private static void ParseUserProtections(HtmlNode userProtectionsNode, UserProfile user, ProfileParseConfig config)
		{
			var userProtectionsArray = new[] { userProtectionsNode };

			var head = config.HeadGetter(userProtectionsArray).Single();
			user.HeadGear = ParseGear(head, config);

			var clothes = config.ClothesGetter(userProtectionsArray).Single();
			user.ClothesGear = ParseGear(clothes, config);

			var shoes = config.ShoesGetter(userProtectionsArray).Single();
			user.ShoesGear = ParseGear(shoes, config);
		}
		private static void ParseUserMain(HtmlNode userMainNode, UserProfile user, ProfileParseConfig config)
		{
			var userMainArray = new[] { userMainNode };
			var userInfo = config.UserInfoGetter(userMainArray).Single();
			var userInfoArray = new[] { userInfo };

			var miiImageUri = config.MiiImageUriGetter(userInfoArray).Single();
			user.MiiImageUri = new Uri(miiImageUri);

			user.Name = ConvertEntity(config.MiiNameGetter(userInfoArray).Single());

			var rank = config.RankGetter(userInfoArray).Single();
			user.Rank = Convert.ToByte(rank);

			user.UdemaeAsString = config.UdemaeGetter(userInfoArray).Single();

			var weaponImage = config.WeaponImageGetter(userMainArray).Single();
			var weaponImageUris = ParseImage(weaponImage, config);
			user.WeaponImageUri = weaponImageUris.Item1;
			user.WeaponRetinaImageUri = weaponImageUris.Item2;
		}
		private static UserProfile ParseProfile(string htmlData, ProfileParseConfig config)
		{
			var doc = new HtmlDocument();
			doc.Load(new StringReader(htmlData));

			var xpathConfig = config;
			var content = xpathConfig.ContentRootGetter(new[] { doc.DocumentNode }).Single();
			var infoMessage = xpathConfig.InfoMessageGetter(new[] { content }).SingleOrDefault();
			if (infoMessage != null) throw new SplatoonClientException(infoMessage.InnerText);

			var equipDetail = xpathConfig.EquipDetailGetter(new[] { content }).Single();

			var user = new UserProfile();
			{
				var userMain = xpathConfig.UserMainGetter(new[] { equipDetail }).Single();
				ParseUserMain(userMain, user, xpathConfig);
			}
			{
				var userProtections = xpathConfig.UserProtectionsGetter(new[] { equipDetail }).Single();
				ParseUserProtections(userProtections, user, xpathConfig);
			}
			ParsePaintedRank(content, user, config);
			return user;
		}
		private static void ParsePaintedRank(HtmlNode content, UserProfile user, ProfileParseConfig config)
		{
			var contentArray = new[] { content };
			var paintedRankNodes = config.PaintedRankGetter(contentArray);
			foreach (var paintedRankNode in paintedRankNodes)
			{
				var paintedRankNodeArray = new[] { paintedRankNode };
				var imageNode = config.PaintedWeaponImageGetter(paintedRankNodeArray).Single();
				var imageUris = ParseImage(imageNode, config);

				var pointText = config.PaintedPointGetter(paintedRankNodeArray).Single();
				var point = Convert.ToUInt32(pointText);

				user._PaintedRank.Add(new PaintedRank(imageUris.Item1, imageUris.Item2, point));
			}
		}