Pārlūkot izejas kodu

Merge branch 'test' into dev

# Conflicts:
#	RO_Server_Trunk-branch_0.1.39/roserver/game/model/role.go
#	RO_Server_Trunk-branch_0.1.39/roserver/game/msg/role_msg.go
#	RO_Server_Trunk-branch_0.1.39/roserver/serverproto/config_csv.go
leitao666 1 gadu atpakaļ
vecāks
revīzija
9d797be5fb
24 mainītis faili ar 5427 papildinājumiem un 4101 dzēšanām
  1. 82 0
      RO_Server_Trunk-branch_0.1.39/roserver/baseserver/model/base_config.go
  2. 2 0
      RO_Server_Trunk-branch_0.1.39/roserver/baseserver/model/orm_common.go
  3. 336 334
      RO_Server_Trunk-branch_0.1.39/roserver/baseserver/router/route_table.go
  4. 1 1
      RO_Server_Trunk-branch_0.1.39/roserver/battleboss/model/boss_manager.go
  5. 58 16
      RO_Server_Trunk-branch_0.1.39/roserver/db/model/orm_helper.go
  6. 2 0
      RO_Server_Trunk-branch_0.1.39/roserver/game/model/role_activity.go
  7. 222 61
      RO_Server_Trunk-branch_0.1.39/roserver/game/model/role_battle.go
  8. 52 49
      RO_Server_Trunk-branch_0.1.39/roserver/game/model/role_battle_attr.go
  9. 526 28
      RO_Server_Trunk-branch_0.1.39/roserver/game/model/role_task.go
  10. 9 0
      RO_Server_Trunk-branch_0.1.39/roserver/game/model/task_manager.go
  11. 8 1
      RO_Server_Trunk-branch_0.1.39/roserver/game/msg/gm_msg.go
  12. 1 0
      RO_Server_Trunk-branch_0.1.39/roserver/game/msg/login_msg.go
  13. 1 0
      RO_Server_Trunk-branch_0.1.39/roserver/game/msg/role_msg.go
  14. 26 29
      RO_Server_Trunk-branch_0.1.39/roserver/gate/model/proc_rpc.go
  15. 114 12
      RO_Server_Trunk-branch_0.1.39/roserver/rank/model/rank_map.go
  16. 69 48
      RO_Server_Trunk-branch_0.1.39/roserver/rank/msg/rank_msg.go
  17. 244 240
      RO_Server_Trunk-branch_0.1.39/roserver/serverproto/common.pb.go
  18. 1 0
      RO_Server_Trunk-branch_0.1.39/roserver/serverproto/common.proto
  19. 44 6
      RO_Server_Trunk-branch_0.1.39/roserver/serverproto/config_csv.go
  20. 324 315
      RO_Server_Trunk-branch_0.1.39/roserver/serverproto/db.pb.go
  21. 1 0
      RO_Server_Trunk-branch_0.1.39/roserver/serverproto/db.proto
  22. 943 908
      RO_Server_Trunk-branch_0.1.39/roserver/serverproto/user.pb.go
  23. 4 0
      RO_Server_Trunk-branch_0.1.39/roserver/serverproto/user.proto
  24. 2357 2053
      RO_Server_Trunk-branch_bt/roserver/serverproto/config_csv.go

+ 82 - 0
RO_Server_Trunk-branch_0.1.39/roserver/baseserver/model/base_config.go

@@ -613,6 +613,16 @@ type ConvertTaskData struct {
 	TaskReward []*serverproto.KeyValueType
 }
 
+type HardMissionTaskData struct {
+	TaskId      uint32
+	TaskType    int32
+	GroupTaskId uint32 //所属任务组ID
+
+	Condition       map[int32][]int32
+	TaskReward      []*serverproto.KeyValueType
+	GroupTaskReward []*serverproto.KeyValueType
+}
+
 type CovertTaskScoreData struct {
 	Idx          uint32
 	Active       int32
@@ -623,6 +633,10 @@ type CovertTaskScoreData struct {
 var TargetTaskBeginID uint32 = 0
 var ConvertTaskList = map[uint32]*ConvertTaskData{}
 var ConvertAddTaskList = map[uint32]*ConvertTaskData{}
+var HardMissionTaskList = map[uint32]*HardMissionTaskData{}
+var HardMissionTaskIdList []uint32
+var HardGroupMissionTaskList = map[uint32]*HardMissionTaskData{}
+var HardGroupMissionTaskIdList []uint32
 var ConvertMainTaskOriginalList = map[uint32]uint32{} //[taskid,originaltask]
 var ConvertDailyTaskScoreRewardList = map[uint32]*CovertTaskScoreData{}
 var ConvertWeekTaskScoreRewardList = map[uint32]*CovertTaskScoreData{}
@@ -634,6 +648,9 @@ const (
 
 	TASK_TYPE_TODAY  = 4
 	TASK_TYPE_GROWUP = 5
+
+	TASK_TYPE_HARD       = 6
+	TASK_TYPE_HARD_GROUP = 7
 )
 
 func convertTaskCfg() {
@@ -700,6 +717,71 @@ func convertTaskCfg() {
 		ConvertAddTaskList[convertData.TaskId] = convertData
 	}
 
+	for _, data := range serverproto.HardMissionCfgLoader {
+		convertData := &HardMissionTaskData{
+			TaskId:      uint32(data.MissionID),
+			TaskType:    TASK_TYPE_HARD,
+			GroupTaskId: uint32(data.GroupID),
+			Condition:   map[int32][]int32{},
+		}
+
+		//任务条件
+		for index, _ := range data.MissionCondition {
+			valueList := strings.Split(data.MissionCondition[index], ":")
+			if len(valueList) >= 2 {
+				taskType, _ := Str2Num(valueList[0])
+				convertData.Condition[int32(taskType)] = append(convertData.Condition[int32(taskType)], int32(taskType))
+				for i := 1; i < len(valueList); i++ {
+					taskValue, _ := Str2Num(valueList[i])
+					convertData.Condition[int32(taskType)] = append(convertData.Condition[int32(taskType)], int32(taskValue))
+				}
+			}
+		}
+
+		//任务奖励
+		for index, _ := range data.Reward {
+			key, value := Str2Res(data.Reward[index])
+			convertData.TaskReward = append(convertData.TaskReward, &serverproto.KeyValueType{
+				Key:   key,
+				Value: value,
+			})
+		}
+
+		for index, _ := range data.GroupReward {
+			key2, value2 := Str2Res(data.GroupReward[index])
+			convertData.GroupTaskReward = append(convertData.GroupTaskReward, &serverproto.KeyValueType{
+				Key:   key2,
+				Value: value2,
+			})
+		}
+		if convertData.TaskType == TASK_TYPE_HARD {
+			HardMissionTaskIdList = append(HardMissionTaskIdList, convertData.TaskId)
+			HardMissionTaskList[convertData.TaskId] = convertData
+		}
+		//util.InfoF("groupaward:%v", data.GroupReward)
+		if len(data.GroupReward) > 0 && data.GroupReward[0] != "" {
+			data2 := &HardMissionTaskData{
+				TaskId:          convertData.TaskId,
+				TaskType:        TASK_TYPE_HARD_GROUP,
+				GroupTaskId:     convertData.GroupTaskId,
+				Condition:       convertData.Condition,
+				TaskReward:      convertData.TaskReward,
+				GroupTaskReward: convertData.GroupTaskReward,
+			}
+			//convertData.TaskId = uint32(data.GroupID)
+			HardGroupMissionTaskIdList = append(HardGroupMissionTaskIdList, convertData.GroupTaskId)
+			HardGroupMissionTaskList[convertData.GroupTaskId] = data2
+			//util.InfoF("groupaward:%v len:%v", convertData, len(data.GroupReward))
+		}
+	}
+	sort.Slice(HardMissionTaskIdList, func(i, j int) bool {
+		return HardMissionTaskIdList[i] < HardMissionTaskIdList[j]
+	})
+	sort.Slice(HardGroupMissionTaskIdList, func(i, j int) bool {
+		return HardGroupMissionTaskIdList[i] < HardGroupMissionTaskIdList[j]
+	})
+	//util.InfoF("len taskId:%v,len task group:%v", len(HardMissionTaskIdList), len(HardGroupMissionTaskIdList))
+	//util.InfoF("task group:%v", HardGroupMissionTaskIdList)
 	for _, data := range serverproto.LineMissionCfgLoader {
 		convertData := &ConvertTaskData{
 			TaskId:    uint32(data.MissionID),

+ 2 - 0
RO_Server_Trunk-branch_0.1.39/roserver/baseserver/model/orm_common.go

@@ -32,6 +32,8 @@ const (
 
 	//地图通关进度排名
 	MapRankPrefix = "rank:map"
+	//困难地图通关进度排名
+	MapHardRankPrefix = "rank_hard:map"
 	//历史最大战力
 	MaxFightPowerRankPrefix = "rank:fight"
 

+ 336 - 334
RO_Server_Trunk-branch_0.1.39/roserver/baseserver/router/route_table.go

@@ -5,7 +5,8 @@ type ReqAckKVInfo struct {
 	AckMsgId   int32
 	ReqMsgName string
 }
-var(
+
+var (
 	RouteTable = new(MsgRouteList)
 	//req和ack回复确认匹配协议号
 	ReqAckKVList = map[int]ReqAckKVInfo{}
@@ -13,345 +14,346 @@ var(
 
 func addRule(name string, service string, mod string, id int) {
 	rule := &MsgRouteRule{
-		MsgName: name,
+		MsgName:     name,
 		ServiceName: service,
-		Mod: mod,
-		MsgID: id,
+		Mod:         mod,
+		MsgID:       id,
 	}
 	RouteTable.Rules = append(RouteTable.Rules, rule)
 	AddRouteRule(rule)
 }
 
-//初始化路由信息,或者从服务器发现etcd中获取
-func init(){
-	addRule("CSLoginReq","game,auth","game",1002)
-	addRule("CSReconnectReq","game","game",1004)
-	addRule("CSCreateRoleReq","game","game",1007)
-	addRule("CSNameReq","game","game",1009)
-	addRule("CSGetServerTimeReq","game","game",1016)
-	addRule("CSAddAttrPointReq","game","game",1020)
-	addRule("CSResetAttrPointReq","game","game",1022)
-	addRule("CSActiveHeadReq","game","game",1025)
-	addRule("CSHeadInfoReq","game","game",1027)
-	addRule("CSSetHeadIdReq","game","game",1029)
-	addRule("CSRenameReq","game","game",1031)
-	addRule("CSChangeHeadFrameReq","game","game",1033)
-	addRule("CSHeadFrameInfoReq","game","game",1035)
-	addRule("CSUseHeadFrameItemReq","game","game",1038)
-	addRule("CSHeroLevelUpReq","game","game",1040)
-	addRule("CSHeroAdvanceReq","game","game",1042)
-	addRule("CSHeroBattleReq","game","game",1044)
-	addRule("CSHeroChipDecomposeReq","game","game",1050)
-	addRule("CSHeroStrengthReq","game","game",1052)
-	addRule("CSHeroChangeJobReq","game","game",1054)
-	addRule("CSHeroFighPowerReq","game","game",1057)
-	addRule("CSHeroResetSkillPointReq","game","game",1059)
-	addRule("CSHeroActiveReq","game","game",1061)
-	addRule("CSEquipForgeReq","game","game",1063)
-	addRule("CSEquipUpReq","game","game",1066)
-	addRule("CSEquipDownReq","game","game",1069)
-	addRule("CSEquipLevelUpAllReq","game","game",1070)
-	addRule("CSEquipSlotLevelUpReq","game","game",1072)
-	addRule("CSCardMountReq","game","game",1074)
-	addRule("CSCardDownReq","game","game",1076)
-	addRule("CSCardComposeReq","game","game",1078)
-	addRule("CSCardDecomposeReq","game","game",1080)
-	addRule("CSUseItemReq","game","game",1085)
-	addRule("CSDelItemReq","game","game",1087)
-	addRule("CSChipComposeReq","game","game",1089)
-	addRule("CSCardUpGradeReq","game","game",1092)
-	addRule("CSCardEquipAllReq","game","game",1094)
-	addRule("CSCardEquipDownReq","game","game",1096)
-	addRule("CSCardUpGradeAllReq","game","game",1098)
-	addRule("CSCardCollectInfoReq","game","game",1100)
-	addRule("CSCardCollectRewardReq","game","game",1102)
-	addRule("CSCardCollectionRankReq","game,rank","game",1105)
-	addRule("CSSkillSlotLevelUpReq","game","game",1109)
-	addRule("CSReplaceSkillReq","game","game",1111)
-	addRule("CSActiveSkillReq","game","game",1113)
-	addRule("CSSwapSkillReq","game","game",1115)
-	addRule("CSSetSkillListReq","game","game",1117)
-	addRule("CSSkillLevelUpReq","game","game",1119)
-	addRule("CSResetSkillLevelReq","game","game",1121)
-	addRule("CSFashionUpReq","game","game",1125)
-	addRule("CSFashionDownReq","game","game",1127)
-	addRule("CSFashionComposeReq","game","game",1129)
-	addRule("CSFashionPaperDecomposeReq","game","game",1131)
-	addRule("CSGetOtherPlayerDetailInfoReq","game,social","game",1143)
-	addRule("CSGetOtherPlayerBriefInfoReq","game","game",1145)
-	addRule("CSPlayerChallengeSummonReq","game,battleboss","game",1150)
-	addRule("CSPlayerChallengeHpReq","game,battleboss","game",1153)
-	addRule("CSPlayerLeaveChallengeReq","game,battleboss","game",1155)
-	addRule("CSPlayerWorldBossListReq","game,battleboss","game",1158)
-	addRule("CSChatMessageReq","game,social,guild","game",1162)
-	addRule("CSChatPlayerStateReq","game,social","game",1165)
-	addRule("CSChatOfflineMsgReq","game,db","game",1167)
-	addRule("CSPlayerIncomeReq","game","game",1171)
-	addRule("CSPlayerBossRewardReq","game","game",1173)
-	addRule("CSPlayerBattleRecordDetailSaveReq","battlerecord","battlerecord",1176)
-	addRule("CSPlayerBattleRecordDetailReq","battlerecord","battlerecord",1178)
-	addRule("CSPlayerBattleRecordReq","game,rank","game",1180)
-	addRule("CSGetMapRankReq","game","game",1183)
-	addRule("CSQuickBattleIncomeReq","game","game",1187)
-	addRule("CSBattleBossFightReq","game","game",1189)
-	addRule("CSEvilRefreshReq","game","game",1191)
-	addRule("CSEvilChallengeReq","game","game",1194)
-	addRule("CSGetTaskRewardReq","game","game",1196)
-	addRule("CSGetTaskScoreRewardReq","game","game",1199)
-	addRule("CSArenaReq","game","game",1203)
-	addRule("CSArenaMatchReq","game","game",1204)
-	addRule("CSArenaResultReq","game","game",1206)
-	addRule("CSArenaBuyCountReq","game","game",1208)
-	addRule("CSArenaRankListReq","game","game",1210)
-	addRule("CSArenaActivityReq","game","game",1212)
-	addRule("CSMailListReq","game","game",1216)
-	addRule("CSMailReadReq","game","game",1218)
-	addRule("CSMailRewardReq","game","game",1220)
-	addRule("CSMailDelReadReq","game","game",1222)
-	addRule("CSCompetitionReq","game","game",1225)
-	addRule("CSCompetitionScoreReq","game","game",1228)
-	addRule("CSShopBuyItemReq","game","game",1230)
-	addRule("CSShopInfoReq","game","game",1232)
-	addRule("CSShopRefreshReq","game","game",1234)
-	addRule("CSFriendReq","game","game",1236)
-	addRule("CSFriendAddReq","game","game",1238)
-	addRule("CSFriendDelReq","game","game",1241)
-	addRule("CSFriendBlackReq","game","game",1244)
-	addRule("CSFriendRecommendReq","game","game",1246)
-	addRule("CSFriendSearchReq","game","game",1249)
-	addRule("CSRoleGuideNtf","game","game",1252)
-	addRule("CSRoleStoryReq","game","game",1254)
-	addRule("CSNewMapCartoonReq","game","game",1256)
-	addRule("CSCompulsoryGuidanceReq","game","game",1258)
-	addRule("CSSignUpInfoReq","game","game",1260)
-	addRule("CSSignUpReq","game","game",1262)
-	addRule("CSClimbingTowerInfoReq","game","game",1264)
-	addRule("CSFriendPassTowerInfoReq","game","game",1266)
-	addRule("CSClimbingTowerBeginReq","game","game",1269)
-	addRule("CSClimbingTowerEndReq","game","game",1271)
-	addRule("CSClimbingTowerRankReq","game","game",1273)
-	addRule("CSOnlineRushInfoReq","game","game",1275)
-	addRule("CSTowerActivityReq","game","game",1277)
-	addRule("CSBuildGuildReq","game,guild","game",1281)
-	addRule("CSDisbandGuildReq","game,guild","game",1283)
-	addRule("CSApplyGuildReq","game,guild","game",1285)
-	addRule("CSQuitGuildReq","game,guild","game",1287)
-	addRule("CSKickGuildMemberReq","game,guild","game",1289)
-	addRule("CSChangeMemberTitleReq","game,guild","game",1292)
-	addRule("CSGuildRenameReq","game,guild","game",1295)
-	addRule("CSGuildReNoticeReq","game,guild","game",1297)
-	addRule("CSSetGuildInfoReq","game,guild","game",1299)
-	addRule("CSGuildLogInfoReq","game,guild","game",1301)
-	addRule("CSGuildApplyDataReq","game,guild","game",1303)
-	addRule("CSApplyInfoHandleReq","game,guild","game",1305)
-	addRule("CSGuildInfoReq","game,guild","game",1308)
-	addRule("CSGetSelfGuildInfoReq","game,guild","game",1310)
-	addRule("CSGuildMemberInfoReq","game,guild","game",1312)
-	addRule("CSRecommendGuildInfoReq","game,guild","game",1314)
-	addRule("CSOnlinePlayerGuildReq","game,guild","game",1316)
-	addRule("CSSearchGuildReq","game,guild","game",1318)
-	addRule("CSGuildBossInfoReq","game,guild","game",1321)
-	addRule("CSGuildBossLogReq","game,guild","game",1323)
-	addRule("CSGuildBossChallengeReq","game,guild","game",1325)
-	addRule("CSGuildBossSummonReq","game,guild","game",1327)
-	addRule("CSGuildBossExtraRewardReq","game,guild","game",1329)
-	addRule("CSPetLevelUpReq","game","game",1334)
-	addRule("CSPetAdvanceReq","game","game",1336)
-	addRule("CSPetSkillLevelUpReq","game","game",1338)
-	addRule("CSPetDecomposeReq","game","game",1340)
-	addRule("CSPetBondListReq","game","game",1342)
-	addRule("CSPetBondAssistListReq","game","game",1345)
-	addRule("CSPetBondActiveReq","game","game",1347)
-	addRule("CSPetAssistReq","game","game",1349)
-	addRule("CSPetBattleReq","game","game",1351)
-	addRule("CSPetManualRewardReq","game","game",1353)
-	addRule("CSPetAdvAchievementReq","game","game",1355)
-	addRule("CSExpeditionChallengePreReq","game","game",1358)
-	addRule("CSExpeditionChallengeReq","game","game",1360)
-	addRule("CSExpeditionSelectBuffReq","game","game",1362)
-	addRule("CSExpeditionRewardReq","game","game",1364)
-	addRule("CSExpeditionBattleHeroReq","game","game",1366)
-	addRule("CSExpeditionCallForHelpReq","game","game",1368)
-	addRule("CSExpeditionHelpReq","game","game",1371)
-	addRule("CSActivitiesRewardReq","game","game",1376)
-	addRule("CSActivitiesScoreRewardReq","game","game",1378)
-	addRule("CSActivitiesFirstChargeRewardReq","game","game",1381)
-	addRule("CSInvitationNumberReq","game","game",1386)
-	addRule("CSInvitationNumberUserInfoReq","game","game",1388)
-	addRule("CSInvitationBeToMemberReq","game","game",1390)
-	addRule("CSInvitationClickReq","game","game",1392)
-	addRule("CSInvitationClickReplayReq","game","game",1394)
-	addRule("CSInvitationDelMemberReq","game","game",1396)
-	addRule("CSInvitationTaskRewardReq","game","game",1398)
-	addRule("CSPayInfoGetReq","game","game",1400)
-	addRule("CSPayInfoOrderOKListGetReq","game","game",1403)
-	addRule("CSDaoChang100PlayerInfoReq","game,rank","game",1406)
-	addRule("CSDaoChang100Req","game","game",1408)
-	addRule("CSDaoChang100LogReq","game","game",1410)
-	addRule("CSDaoChang100ChallengeReq","game","game",1412)
-	addRule("CSDaoChang100ChallengeResultReq","game","game",1414)
-	addRule("CSDaoChang100TimeRewardReq","game","game",1415)
-	addRule("CSDaoChang100BuyChallengeCountReq","game","game",1417)
-	addRule("CSGiftRewardReq","game,social,gmweb","game",1419)
-	addRule("CSGMCommandReq","game","game",1421)
-	addRule("CSDrawCardReq","game","game",1424)
-	addRule("CSRuneShopInfoReq","game","game",1426)
-	addRule("CSAntiCheatReq","game","game",1433)
-	addRule("CSQuestionRewardReq","game","game",1435)
-	addRule("CSClientParamNtf","game","game",1437)
-	addRule("CSMapActivityReq","game","game",1438)
-	addRule("CSHeroReplaceJobReq","game","game",1442)
-	addRule("CSDaoChang100SetTipsReq","game","game",1444)
-	addRule("CSOnlineGetKeepSakeReq","game","game",1446)
-	addRule("CSKeepSakeRankReq","game,rank","game",1448)
-	addRule("CSKeepSakeLevelUpReq","game","game",1450)
-	addRule("CSTowerLevelMinFightPowerReq","game","game",1453)
-	addRule("CSActivitiesCollectionServerDataReq","game","game",1455)
-	addRule("CSGuildBattleInfoReq","game,guild","game",1457)
-	addRule("CSGuildBattleSettingReq","game,guild","game",1460)
-	addRule("CSGuildBattleBuyChallengeReq","game,guild","game",1462)
-	addRule("CSGuildBattleRebornReq","game,guild","game",1464)
-	addRule("CSGuildBattleRankListReq","game,guild","game",1466)
-	addRule("CSGuildBattlePosIdxListReq","game,guild","game",1468)
-	addRule("CSGuildBattleLogReq","game,guild","game",1470)
-	addRule("CSGuildBattleChallengeReq","game","game",1472)
-	addRule("CSGuildBattleChallengeResultReq","game,guild","game",1474)
-	addRule("CSGuildBattleChallengePingReq","game,guild","game",1475)
-	addRule("CSGuildBattlePKDataReq","game,guild","game",1477)
-	addRule("CSGuildBattleBuyBuffReq","game,guild","game",1483)
-	addRule("CSGuildBattleCPRankReq","game","game",1487)
-	addRule("CSGuildBattleCountPartReq","game","game",1489)
-	addRule("CSGuildBattleMvpInfoReq","game","game",1491)
-	addRule("CSGuildBattleMvpDetailReq","game","game",1492)
-	addRule("CSExpeditionScoreRankListReq","game","game",1495)
-	addRule("CSDaoChang100WheelReq","game","game",1497)
-	addRule("CSDaoChang100WheelRefreshReq","game","game",1499)
-	addRule("CSDaoChang100WheelOpenRewardReq","game","game",1501)
-	addRule("CSDaoChang100WheelRewardReq","game","game",1503)
-	addRule("CSDaoChang100WheelCloseRewardReq","game","game",1505)
-	addRule("CSFashionUpLvlReq","game","game",1507)
-	addRule("CSFashionResetAttrReq","game","game",1510)
-	addRule("CSExploreInfoReq","game","game",1513)
-	addRule("CSExploreExtraRewardReq","game","game",1515)
-	addRule("CSExploreRewardReq","game","game",1517)
-	addRule("CSDaoChang100WheelLogReq","game,db","game",1519)
-	addRule("CSAccOnlineRewardReq","game,db","game",1523)
-	addRule("CSOnlineTimeRewardReq","game","game",1525)
-	addRule("CSRedBagExchangeReq","game","game",1528)
-	addRule("CSPetActivityReq","game","game",1530)
-	addRule("CSPetActivityRankReq","game,rank","game",1532)
-	addRule("CSAddQualityPointReq","game","game",1536)
-	addRule("CSExpeditionPassRewardReq","game","game",1538)
-	addRule("CSActivitiesLikabilityRewardReq","game","game",1540)
-	addRule("CSActorAttrGetReq","game","game",1542)
-	addRule("CSPetEquipLevelUpReq","game","game",1546)
-	addRule("CSPetEquipUpReq","game","game",1548)
-	addRule("CSPetEquipDownReq","game","game",1550)
-	addRule("CSCompetitionStarInfoReq","game","game",1552)
-	addRule("CSCompetitionStarCloseRewardReq","game","game",1556)
-	addRule("CSCompetitionStarDivineReq","game","game",1559)
-	addRule("CSConverSkillExpReq","game","game",1561)
-	addRule("CSCrossYuanHangTrialRefreshTrialTypeReq","game","game",1564)
-	addRule("CSCrossYuanHangTrialReq","game","game",1566)
-	addRule("CSCrossYuanHangTrialRewardReq","game","game",1568)
-	addRule("CSCrossYuanHangTrialChallengeReq","game","game",1570)
-	addRule("CSCrossYuanHangTrialChallengeResultReq","game","game",1572)
-	addRule("CSCrossYuanHangTrialRankListReq","game","game",1574)
-	addRule("CSCrossYuanHangTrialViewListReq","game","game",1576)
-	addRule("CSCrossYuanHangTrialViewListOutReq","game","game",1578)
-	addRule("CSActivitiesExchangeReq","game","game",1580)
-	addRule("SCActivitiesExchangeAck","game","game",1581)
-	addRule("CSCrossYuanHangTrialInfoReq","game","game",1589)
-	addRule("CSCrossYuanHangTrialLogReq","game","game",1591)
-	addRule("CSRushActivityReq","game","game",1593)
-	addRule("CSRushActivityRewardReq","game","game",1595)
-	addRule("CSRushSkillActivityRankReq","game,rank","game",1597)
-	addRule("CSActivityWheelRefreshReq","game","game",1599)
-	addRule("CSActivityWheelOpenRewardReq","game","game",1601)
-	addRule("CSActivityWheelRewardReq","game","game",1603)
-	addRule("CSActivityWheelCloseRewardReq","game","game",1605)
-	addRule("CSSkillEquipUpReq","game","game",1608)
-	addRule("CSSkillEquipDownReq","game","game",1611)
-	addRule("CSSkillEquipLevelUpReq","game","game",1613)
-	addRule("CSSkillEquipSlotLevelUpReq","game","game",1615)
-	addRule("CSSkillEquipDecomposeReq","game","game",1617)
-	addRule("CSCrossTopTowerFightListReq","game","game",1620)
-	addRule("CSCrossTopTowerChallengeResultReq","game","game",1622)
-	addRule("CSCrossTopTowerForceWinReq","game","game",1624)
-	addRule("CSCrossTopTowerForceWinRankListReq","game","game",1626)
-	addRule("CSCrossTopTowerChallengeReq","game","game",1628)
-	addRule("CSHeadOperateReq","game","game",1631)
-	addRule("CSHeadDataReq","game","game",1633)
-	addRule("CSGCrossGetServerStateReq","game","game",1635)
-	addRule("CSGCrossPlayerEnterMapReq","game","game",1637)
-	addRule("CSGCrossPlayerLeaveMapReq","game","game",1639)
-	addRule("CSGCrossPlayerMapSyncPosReq","game","game",1640)
-	addRule("CSGCrossPlayerShowInfoReq","game","game",1648)
-	addRule("CSSkillEquipRemadeReq","game","game",1650)
-	addRule("CSSkillEquipPoolReq","game","game",1652)
-	addRule("CSGuildDemonInfoReq","game,guild","game",1654)
-	addRule("CSGuildDemonFightReq","game,guild","game",1656)
-	addRule("CSGuildDemonGuildRankReq","game,guild","game",1658)
-	addRule("CSGuildDemonMVPRankReq","game,guild","game",1660)
-	addRule("CSGuildDemonBuyFightCountReq","game","game",1662)
-	addRule("CSActivitySummonReq","game","game",1664)
-	addRule("CSActivitySignInReq","game","game",1666)
-	addRule("CSSkillEquipShiftReq","game","game",1668)
-	addRule("CSCrossTopTowerChallengeViewInfoReq","game","game",1670)
-	addRule("CSGCrossPlayerMapSyncParamReq","game","game",1672)
-	addRule("CSCompetitionOnVoteReq","game","game",1674)
-	addRule("CSCompetitionSelfFansInfoReq","game","game",1676)
-	addRule("CSCompetitionVoteRankReq","game","game",1678)
-	addRule("CSCompetitionFansRewardRankReq","game","game",1680)
-	addRule("CSCompetitionFansGetRewardReq","game","game",1682)
-	addRule("CSCompetitionFansDayRewardReq","game","game",1684)
-	addRule("CSCompetitionGetPlayerVoteRankReq","game","game",1686)
-	addRule("CSPetDetailInfoReq","game","game",1688)
-	addRule("CSWishBoxUseReq","game","game",1690)
-	addRule("CSWishUnlockSlotReq","game","game",1692)
-	addRule("CSWishSlotReq","game","game",1696)
-	addRule("CSActivitiesWordNoticeSetReq","game","game",1698)
-	addRule("CSPetQiyueSlotUnlockReq","game","game",1701)
-	addRule("CSPetQiyueSlotInReq","game","game",1703)
-	addRule("CSPetQiyueSlotOutReq","game","game",1705)
-	addRule("CSPetQiyueBattlePetAttrReq","game","game",1707)
-	addRule("CSCardLevelExchangeReq","game","game",1709)
-	addRule("CSCombineServerInfoReq","game","game",1712)
-	addRule("CSCreditRechargeShopItemBuyReq","game","game",1714)
-	addRule("CSRuneSpecialPrivilegeRewardReq","game","game",1717)
-	addRule("CSClimbingTowerDayRewardReq","game","game",1723)
-	addRule("CSBoliShopLevelUpReq","game","game",1725)
-	addRule("CSBoliShopRewardReq","game","game",1727)
-	addRule("CSBoliShopBuyReq","game","game",1729)
-	addRule("CSBTShopInfoReq","game","game",1736)
-	addRule("CSBoliShopInfoReq","game","game",1738)
-	addRule("CSBTRoCoinShopItemBuyReq","game","game",1740)
-	addRule("CSActivitySmashEggsReq","game","game",1742)
-	addRule("CSActivitySmashEggsMsgReq","game","game",1744)
-	addRule("CSBTFirstRechargeRewardReq","game","game",1747)
-	addRule("CSBTRecharge100RewardReq","game","game",1750)
-	addRule("SSCrossYuanHangTrialViewListReq","crossserver","crossserver",6002)
-	addRule("SSCrossYuanHangTrialReq","crossserver","crossserver",6004)
-	addRule("SSCrossYuanHangTrialChallengeReq","crossserver","crossserver",6006)
-	addRule("SSCrossYuanHangTrialChallengeResultReq","crossserver","crossserver",6008)
-	addRule("SSCrossYuanHangTrialUpdateRankScoreNtf","crossserver","crossserver",6011)
-	addRule("SSCrossYuanHangTrialRankListReq","crossserver","crossserver",6012)
-	addRule("SSCrossYuanHangTrialInfoReq","crossserver","crossserver",6016)
-	addRule("SSCrossYuanHangTrialSelfReq","crossserver","crossserver",6026)
-	addRule("SSCrossRankUpdateNtf","crossrank","crossrank",6028)
-	addRule("SSCrossRankFightInfoUpdateNtf","crossrank","crossrank",6029)
-	addRule("SSCrossTopTowerMatchFightReq","crossrank","crossrank",6030)
-	addRule("SSCrossTopTowerForceWinRankUpdateNtf","crossrank","crossrank",6032)
-	addRule("SSCrossTopTowerForceWinRankListReq","crossrank","crossrank",6033)
-	addRule("SSGCrossMapEnterReq","gcrossmap","gcrossmap",6035)
-	addRule("SSGCrossMapLeaveReq","gcrossmap","gcrossmap",6037)
-	addRule("SSGCrossMapSyncPosReq","gcrossmap","gcrossmap",6040)
-	addRule("SSGCrossMapOtherUnitShowInfoReq","gcrossmap","gcrossmap",6045)
-	addRule("SSGCrossMapUnitShowUpdateNtf","gcrossmap","gcrossmap",6047)
-	addRule("SSGCrossChatMessageReq","gcrossmap","gcrossmap",6048)
-	addRule("SSGCrossMapSyncParamReq","gcrossmap","gcrossmap",6051)
+// 初始化路由信息,或者从服务器发现etcd中获取
+func init() {
+	addRule("CSLoginReq", "game,auth", "game", 1002)
+	addRule("CSReconnectReq", "game", "game", 1004)
+	addRule("CSCreateRoleReq", "game", "game", 1007)
+	addRule("CSNameReq", "game", "game", 1009)
+	addRule("CSGetServerTimeReq", "game", "game", 1016)
+	addRule("CSAddAttrPointReq", "game", "game", 1020)
+	addRule("CSResetAttrPointReq", "game", "game", 1022)
+	addRule("CSActiveHeadReq", "game", "game", 1025)
+	addRule("CSHeadInfoReq", "game", "game", 1027)
+	addRule("CSSetHeadIdReq", "game", "game", 1029)
+	addRule("CSRenameReq", "game", "game", 1031)
+	addRule("CSChangeHeadFrameReq", "game", "game", 1033)
+	addRule("CSHeadFrameInfoReq", "game", "game", 1035)
+	addRule("CSUseHeadFrameItemReq", "game", "game", 1038)
+	addRule("CSHeroLevelUpReq", "game", "game", 1040)
+	addRule("CSHeroAdvanceReq", "game", "game", 1042)
+	addRule("CSHeroBattleReq", "game", "game", 1044)
+	addRule("CSHeroChipDecomposeReq", "game", "game", 1050)
+	addRule("CSHeroStrengthReq", "game", "game", 1052)
+	addRule("CSHeroChangeJobReq", "game", "game", 1054)
+	addRule("CSHeroFighPowerReq", "game", "game", 1057)
+	addRule("CSHeroResetSkillPointReq", "game", "game", 1059)
+	addRule("CSHeroActiveReq", "game", "game", 1061)
+	addRule("CSEquipForgeReq", "game", "game", 1063)
+	addRule("CSEquipUpReq", "game", "game", 1066)
+	addRule("CSEquipDownReq", "game", "game", 1069)
+	addRule("CSEquipLevelUpAllReq", "game", "game", 1070)
+	addRule("CSEquipSlotLevelUpReq", "game", "game", 1072)
+	addRule("CSCardMountReq", "game", "game", 1074)
+	addRule("CSCardDownReq", "game", "game", 1076)
+	addRule("CSCardComposeReq", "game", "game", 1078)
+	addRule("CSCardDecomposeReq", "game", "game", 1080)
+	addRule("CSUseItemReq", "game", "game", 1085)
+	addRule("CSDelItemReq", "game", "game", 1087)
+	addRule("CSChipComposeReq", "game", "game", 1089)
+	addRule("CSCardUpGradeReq", "game", "game", 1092)
+	addRule("CSCardEquipAllReq", "game", "game", 1094)
+	addRule("CSCardEquipDownReq", "game", "game", 1096)
+	addRule("CSCardUpGradeAllReq", "game", "game", 1098)
+	addRule("CSCardCollectInfoReq", "game", "game", 1100)
+	addRule("CSCardCollectRewardReq", "game", "game", 1102)
+	addRule("CSCardCollectionRankReq", "game,rank", "game", 1105)
+	addRule("CSSkillSlotLevelUpReq", "game", "game", 1109)
+	addRule("CSReplaceSkillReq", "game", "game", 1111)
+	addRule("CSActiveSkillReq", "game", "game", 1113)
+	addRule("CSSwapSkillReq", "game", "game", 1115)
+	addRule("CSSetSkillListReq", "game", "game", 1117)
+	addRule("CSSkillLevelUpReq", "game", "game", 1119)
+	addRule("CSResetSkillLevelReq", "game", "game", 1121)
+	addRule("CSFashionUpReq", "game", "game", 1125)
+	addRule("CSFashionDownReq", "game", "game", 1127)
+	addRule("CSFashionComposeReq", "game", "game", 1129)
+	addRule("CSFashionPaperDecomposeReq", "game", "game", 1131)
+	addRule("CSGetOtherPlayerDetailInfoReq", "game,social", "game", 1143)
+	addRule("CSGetOtherPlayerBriefInfoReq", "game", "game", 1145)
+	addRule("CSPlayerChallengeSummonReq", "game,battleboss", "game", 1150)
+	addRule("CSPlayerChallengeHpReq", "game,battleboss", "game", 1153)
+	addRule("CSPlayerLeaveChallengeReq", "game,battleboss", "game", 1155)
+	addRule("CSPlayerWorldBossListReq", "game,battleboss", "game", 1158)
+	addRule("CSChatMessageReq", "game,social,guild", "game", 1162)
+	addRule("CSChatPlayerStateReq", "game,social", "game", 1165)
+	addRule("CSChatOfflineMsgReq", "game,db", "game", 1167)
+	addRule("CSPlayerIncomeReq", "game", "game", 1171)
+	addRule("CSPlayerBossRewardReq", "game", "game", 1173)
+	addRule("CSPlayerBattleRecordDetailSaveReq", "battlerecord", "battlerecord", 1176)
+	addRule("CSPlayerBattleRecordDetailReq", "battlerecord", "battlerecord", 1178)
+	addRule("CSPlayerBattleRecordReq", "game,rank", "game", 1180)
+	addRule("CSGetMapRankReq", "game", "game", 1183)
+	addRule("CSQuickBattleIncomeReq", "game", "game", 1187)
+	addRule("CSBattleBossFightReq", "game", "game", 1189)
+	addRule("CSEvilRefreshReq", "game", "game", 1191)
+	addRule("CSEvilChallengeReq", "game", "game", 1194)
+	addRule("CSGetTaskRewardReq", "game", "game", 1196)
+	addRule("CSGetTaskScoreRewardReq", "game", "game", 1199)
+	addRule("CSArenaReq", "game", "game", 1203)
+	addRule("CSArenaMatchReq", "game", "game", 1204)
+	addRule("CSArenaResultReq", "game", "game", 1206)
+	addRule("CSArenaBuyCountReq", "game", "game", 1208)
+	addRule("CSArenaRankListReq", "game", "game", 1210)
+	addRule("CSArenaActivityReq", "game", "game", 1212)
+	addRule("CSMailListReq", "game", "game", 1216)
+	addRule("CSMailReadReq", "game", "game", 1218)
+	addRule("CSMailRewardReq", "game", "game", 1220)
+	addRule("CSMailDelReadReq", "game", "game", 1222)
+	addRule("CSCompetitionReq", "game", "game", 1225)
+	addRule("CSCompetitionScoreReq", "game", "game", 1228)
+	addRule("CSShopBuyItemReq", "game", "game", 1230)
+	addRule("CSShopInfoReq", "game", "game", 1232)
+	addRule("CSShopRefreshReq", "game", "game", 1234)
+	addRule("CSFriendReq", "game", "game", 1236)
+	addRule("CSFriendAddReq", "game", "game", 1238)
+	addRule("CSFriendDelReq", "game", "game", 1241)
+	addRule("CSFriendBlackReq", "game", "game", 1244)
+	addRule("CSFriendRecommendReq", "game", "game", 1246)
+	addRule("CSFriendSearchReq", "game", "game", 1249)
+	addRule("CSRoleGuideNtf", "game", "game", 1252)
+	addRule("CSRoleStoryReq", "game", "game", 1254)
+	addRule("CSNewMapCartoonReq", "game", "game", 1256)
+	addRule("CSCompulsoryGuidanceReq", "game", "game", 1258)
+	addRule("CSSignUpInfoReq", "game", "game", 1260)
+	addRule("CSSignUpReq", "game", "game", 1262)
+	addRule("CSClimbingTowerInfoReq", "game", "game", 1264)
+	addRule("CSFriendPassTowerInfoReq", "game", "game", 1266)
+	addRule("CSClimbingTowerBeginReq", "game", "game", 1269)
+	addRule("CSClimbingTowerEndReq", "game", "game", 1271)
+	addRule("CSClimbingTowerRankReq", "game", "game", 1273)
+	addRule("CSOnlineRushInfoReq", "game", "game", 1275)
+	addRule("CSTowerActivityReq", "game", "game", 1277)
+	addRule("CSBuildGuildReq", "game,guild", "game", 1281)
+	addRule("CSDisbandGuildReq", "game,guild", "game", 1283)
+	addRule("CSApplyGuildReq", "game,guild", "game", 1285)
+	addRule("CSQuitGuildReq", "game,guild", "game", 1287)
+	addRule("CSKickGuildMemberReq", "game,guild", "game", 1289)
+	addRule("CSChangeMemberTitleReq", "game,guild", "game", 1292)
+	addRule("CSGuildRenameReq", "game,guild", "game", 1295)
+	addRule("CSGuildReNoticeReq", "game,guild", "game", 1297)
+	addRule("CSSetGuildInfoReq", "game,guild", "game", 1299)
+	addRule("CSGuildLogInfoReq", "game,guild", "game", 1301)
+	addRule("CSGuildApplyDataReq", "game,guild", "game", 1303)
+	addRule("CSApplyInfoHandleReq", "game,guild", "game", 1305)
+	addRule("CSGuildInfoReq", "game,guild", "game", 1308)
+	addRule("CSGetSelfGuildInfoReq", "game,guild", "game", 1310)
+	addRule("CSGuildMemberInfoReq", "game,guild", "game", 1312)
+	addRule("CSRecommendGuildInfoReq", "game,guild", "game", 1314)
+	addRule("CSOnlinePlayerGuildReq", "game,guild", "game", 1316)
+	addRule("CSSearchGuildReq", "game,guild", "game", 1318)
+	addRule("CSGuildBossInfoReq", "game,guild", "game", 1321)
+	addRule("CSGuildBossLogReq", "game,guild", "game", 1323)
+	addRule("CSGuildBossChallengeReq", "game,guild", "game", 1325)
+	addRule("CSGuildBossSummonReq", "game,guild", "game", 1327)
+	addRule("CSGuildBossExtraRewardReq", "game,guild", "game", 1329)
+	addRule("CSPetLevelUpReq", "game", "game", 1334)
+	addRule("CSPetAdvanceReq", "game", "game", 1336)
+	addRule("CSPetSkillLevelUpReq", "game", "game", 1338)
+	addRule("CSPetDecomposeReq", "game", "game", 1340)
+	addRule("CSPetBondListReq", "game", "game", 1342)
+	addRule("CSPetBondAssistListReq", "game", "game", 1345)
+	addRule("CSPetBondActiveReq", "game", "game", 1347)
+	addRule("CSPetAssistReq", "game", "game", 1349)
+	addRule("CSPetBattleReq", "game", "game", 1351)
+	addRule("CSPetManualRewardReq", "game", "game", 1353)
+	addRule("CSPetAdvAchievementReq", "game", "game", 1355)
+	addRule("CSExpeditionChallengePreReq", "game", "game", 1358)
+	addRule("CSExpeditionChallengeReq", "game", "game", 1360)
+	addRule("CSExpeditionSelectBuffReq", "game", "game", 1362)
+	addRule("CSExpeditionRewardReq", "game", "game", 1364)
+	addRule("CSExpeditionBattleHeroReq", "game", "game", 1366)
+	addRule("CSExpeditionCallForHelpReq", "game", "game", 1368)
+	addRule("CSExpeditionHelpReq", "game", "game", 1371)
+	addRule("CSActivitiesRewardReq", "game", "game", 1376)
+	addRule("CSActivitiesScoreRewardReq", "game", "game", 1378)
+	addRule("CSActivitiesFirstChargeRewardReq", "game", "game", 1381)
+	addRule("CSInvitationNumberReq", "game", "game", 1386)
+	addRule("CSInvitationNumberUserInfoReq", "game", "game", 1388)
+	addRule("CSInvitationBeToMemberReq", "game", "game", 1390)
+	addRule("CSInvitationClickReq", "game", "game", 1392)
+	addRule("CSInvitationClickReplayReq", "game", "game", 1394)
+	addRule("CSInvitationDelMemberReq", "game", "game", 1396)
+	addRule("CSInvitationTaskRewardReq", "game", "game", 1398)
+	addRule("CSPayInfoGetReq", "game", "game", 1400)
+	addRule("CSPayInfoOrderOKListGetReq", "game", "game", 1403)
+	addRule("CSDaoChang100PlayerInfoReq", "game,rank", "game", 1406)
+	addRule("CSDaoChang100Req", "game", "game", 1408)
+	addRule("CSDaoChang100LogReq", "game", "game", 1410)
+	addRule("CSDaoChang100ChallengeReq", "game", "game", 1412)
+	addRule("CSDaoChang100ChallengeResultReq", "game", "game", 1414)
+	addRule("CSDaoChang100TimeRewardReq", "game", "game", 1415)
+	addRule("CSDaoChang100BuyChallengeCountReq", "game", "game", 1417)
+	addRule("CSGiftRewardReq", "game,social,gmweb", "game", 1419)
+	addRule("CSGMCommandReq", "game", "game", 1421)
+	addRule("CSDrawCardReq", "game", "game", 1424)
+	addRule("CSRuneShopInfoReq", "game", "game", 1426)
+	addRule("CSAntiCheatReq", "game", "game", 1433)
+	addRule("CSQuestionRewardReq", "game", "game", 1435)
+	addRule("CSClientParamNtf", "game", "game", 1437)
+	addRule("CSMapActivityReq", "game", "game", 1438)
+	addRule("CSHeroReplaceJobReq", "game", "game", 1442)
+	addRule("CSDaoChang100SetTipsReq", "game", "game", 1444)
+	addRule("CSOnlineGetKeepSakeReq", "game", "game", 1446)
+	addRule("CSKeepSakeRankReq", "game,rank", "game", 1448)
+	addRule("CSKeepSakeLevelUpReq", "game", "game", 1450)
+	addRule("CSTowerLevelMinFightPowerReq", "game", "game", 1453)
+	addRule("CSActivitiesCollectionServerDataReq", "game", "game", 1455)
+	addRule("CSGuildBattleInfoReq", "game,guild", "game", 1457)
+	addRule("CSGuildBattleSettingReq", "game,guild", "game", 1460)
+	addRule("CSGuildBattleBuyChallengeReq", "game,guild", "game", 1462)
+	addRule("CSGuildBattleRebornReq", "game,guild", "game", 1464)
+	addRule("CSGuildBattleRankListReq", "game,guild", "game", 1466)
+	addRule("CSGuildBattlePosIdxListReq", "game,guild", "game", 1468)
+	addRule("CSGuildBattleLogReq", "game,guild", "game", 1470)
+	addRule("CSGuildBattleChallengeReq", "game", "game", 1472)
+	addRule("CSGuildBattleChallengeResultReq", "game,guild", "game", 1474)
+	addRule("CSGuildBattleChallengePingReq", "game,guild", "game", 1475)
+	addRule("CSGuildBattlePKDataReq", "game,guild", "game", 1477)
+	addRule("CSGuildBattleBuyBuffReq", "game,guild", "game", 1483)
+	addRule("CSGuildBattleCPRankReq", "game", "game", 1487)
+	addRule("CSGuildBattleCountPartReq", "game", "game", 1489)
+	addRule("CSGuildBattleMvpInfoReq", "game", "game", 1491)
+	addRule("CSGuildBattleMvpDetailReq", "game", "game", 1492)
+	addRule("CSExpeditionScoreRankListReq", "game", "game", 1495)
+	addRule("CSDaoChang100WheelReq", "game", "game", 1497)
+	addRule("CSDaoChang100WheelRefreshReq", "game", "game", 1499)
+	addRule("CSDaoChang100WheelOpenRewardReq", "game", "game", 1501)
+	addRule("CSDaoChang100WheelRewardReq", "game", "game", 1503)
+	addRule("CSDaoChang100WheelCloseRewardReq", "game", "game", 1505)
+	addRule("CSFashionUpLvlReq", "game", "game", 1507)
+	addRule("CSFashionResetAttrReq", "game", "game", 1510)
+	addRule("CSExploreInfoReq", "game", "game", 1513)
+	addRule("CSExploreExtraRewardReq", "game", "game", 1515)
+	addRule("CSExploreRewardReq", "game", "game", 1517)
+	addRule("CSDaoChang100WheelLogReq", "game,db", "game", 1519)
+	addRule("CSAccOnlineRewardReq", "game,db", "game", 1523)
+	addRule("CSOnlineTimeRewardReq", "game", "game", 1525)
+	addRule("CSRedBagExchangeReq", "game", "game", 1528)
+	addRule("CSPetActivityReq", "game", "game", 1530)
+	addRule("CSPetActivityRankReq", "game,rank", "game", 1532)
+	addRule("CSAddQualityPointReq", "game", "game", 1536)
+	addRule("CSExpeditionPassRewardReq", "game", "game", 1538)
+	addRule("CSActivitiesLikabilityRewardReq", "game", "game", 1540)
+	addRule("CSActorAttrGetReq", "game", "game", 1542)
+	addRule("CSPetEquipLevelUpReq", "game", "game", 1546)
+	addRule("CSPetEquipUpReq", "game", "game", 1548)
+	addRule("CSPetEquipDownReq", "game", "game", 1550)
+	addRule("CSCompetitionStarInfoReq", "game", "game", 1552)
+	addRule("CSCompetitionStarCloseRewardReq", "game", "game", 1556)
+	addRule("CSCompetitionStarDivineReq", "game", "game", 1559)
+	addRule("CSConverSkillExpReq", "game", "game", 1561)
+	addRule("CSCrossYuanHangTrialRefreshTrialTypeReq", "game", "game", 1564)
+	addRule("CSCrossYuanHangTrialReq", "game", "game", 1566)
+	addRule("CSCrossYuanHangTrialRewardReq", "game", "game", 1568)
+	addRule("CSCrossYuanHangTrialChallengeReq", "game", "game", 1570)
+	addRule("CSCrossYuanHangTrialChallengeResultReq", "game", "game", 1572)
+	addRule("CSCrossYuanHangTrialRankListReq", "game", "game", 1574)
+	addRule("CSCrossYuanHangTrialViewListReq", "game", "game", 1576)
+	addRule("CSCrossYuanHangTrialViewListOutReq", "game", "game", 1578)
+	addRule("CSActivitiesExchangeReq", "game", "game", 1580)
+	addRule("SCActivitiesExchangeAck", "game", "game", 1581)
+	addRule("CSCrossYuanHangTrialInfoReq", "game", "game", 1589)
+	addRule("CSCrossYuanHangTrialLogReq", "game", "game", 1591)
+	addRule("CSRushActivityReq", "game", "game", 1593)
+	addRule("CSRushActivityRewardReq", "game", "game", 1595)
+	addRule("CSRushSkillActivityRankReq", "game,rank", "game", 1597)
+	addRule("CSActivityWheelRefreshReq", "game", "game", 1599)
+	addRule("CSActivityWheelOpenRewardReq", "game", "game", 1601)
+	addRule("CSActivityWheelRewardReq", "game", "game", 1603)
+	addRule("CSActivityWheelCloseRewardReq", "game", "game", 1605)
+	addRule("CSSkillEquipUpReq", "game", "game", 1608)
+	addRule("CSSkillEquipDownReq", "game", "game", 1611)
+	addRule("CSSkillEquipLevelUpReq", "game", "game", 1613)
+	addRule("CSSkillEquipSlotLevelUpReq", "game", "game", 1615)
+	addRule("CSSkillEquipDecomposeReq", "game", "game", 1617)
+	addRule("CSCrossTopTowerFightListReq", "game", "game", 1620)
+	addRule("CSCrossTopTowerChallengeResultReq", "game", "game", 1622)
+	addRule("CSCrossTopTowerForceWinReq", "game", "game", 1624)
+	addRule("CSCrossTopTowerForceWinRankListReq", "game", "game", 1626)
+	addRule("CSCrossTopTowerChallengeReq", "game", "game", 1628)
+	addRule("CSHeadOperateReq", "game", "game", 1631)
+	addRule("CSHeadDataReq", "game", "game", 1633)
+	addRule("CSGCrossGetServerStateReq", "game", "game", 1635)
+	addRule("CSGCrossPlayerEnterMapReq", "game", "game", 1637)
+	addRule("CSGCrossPlayerLeaveMapReq", "game", "game", 1639)
+	addRule("CSGCrossPlayerMapSyncPosReq", "game", "game", 1640)
+	addRule("CSGCrossPlayerShowInfoReq", "game", "game", 1648)
+	addRule("CSSkillEquipRemadeReq", "game", "game", 1650)
+	addRule("CSSkillEquipPoolReq", "game", "game", 1652)
+	addRule("CSGuildDemonInfoReq", "game,guild", "game", 1654)
+	addRule("CSGuildDemonFightReq", "game,guild", "game", 1656)
+	addRule("CSGuildDemonGuildRankReq", "game,guild", "game", 1658)
+	addRule("CSGuildDemonMVPRankReq", "game,guild", "game", 1660)
+	addRule("CSGuildDemonBuyFightCountReq", "game", "game", 1662)
+	addRule("CSActivitySummonReq", "game", "game", 1664)
+	addRule("CSActivitySignInReq", "game", "game", 1666)
+	addRule("CSSkillEquipShiftReq", "game", "game", 1668)
+	addRule("CSCrossTopTowerChallengeViewInfoReq", "game", "game", 1670)
+	addRule("CSGCrossPlayerMapSyncParamReq", "game", "game", 1672)
+	addRule("CSCompetitionOnVoteReq", "game", "game", 1674)
+	addRule("CSCompetitionSelfFansInfoReq", "game", "game", 1676)
+	addRule("CSCompetitionVoteRankReq", "game", "game", 1678)
+	addRule("CSCompetitionFansRewardRankReq", "game", "game", 1680)
+	addRule("CSCompetitionFansGetRewardReq", "game", "game", 1682)
+	addRule("CSCompetitionFansDayRewardReq", "game", "game", 1684)
+	addRule("CSCompetitionGetPlayerVoteRankReq", "game", "game", 1686)
+	addRule("CSPetDetailInfoReq", "game", "game", 1688)
+	addRule("CSWishBoxUseReq", "game", "game", 1690)
+	addRule("CSWishUnlockSlotReq", "game", "game", 1692)
+	addRule("CSWishSlotReq", "game", "game", 1696)
+	addRule("CSActivitiesWordNoticeSetReq", "game", "game", 1698)
+	addRule("CSPetQiyueSlotUnlockReq", "game", "game", 1701)
+	addRule("CSPetQiyueSlotInReq", "game", "game", 1703)
+	addRule("CSPetQiyueSlotOutReq", "game", "game", 1705)
+	addRule("CSPetQiyueBattlePetAttrReq", "game", "game", 1707)
+	addRule("CSCardLevelExchangeReq", "game", "game", 1709)
+	addRule("CSCombineServerInfoReq", "game", "game", 1712)
+	addRule("CSCreditRechargeShopItemBuyReq", "game", "game", 1714)
+	addRule("CSRuneSpecialPrivilegeRewardReq", "game", "game", 1717)
+	addRule("CSClimbingTowerDayRewardReq", "game", "game", 1723)
+	addRule("CSBoliShopLevelUpReq", "game", "game", 1725)
+	addRule("CSBoliShopRewardReq", "game", "game", 1727)
+	addRule("CSBoliShopBuyReq", "game", "game", 1729)
+	addRule("CSBTShopInfoReq", "game", "game", 1736)
+	addRule("CSBoliShopInfoReq", "game", "game", 1738)
+	addRule("CSBTRoCoinShopItemBuyReq", "game", "game", 1740)
+	addRule("CSActivitySmashEggsReq", "game", "game", 1742)
+	addRule("CSActivitySmashEggsMsgReq", "game", "game", 1744)
+	addRule("CSBTFirstRechargeRewardReq", "game", "game", 1747)
+	addRule("CSBTRecharge100RewardReq", "game", "game", 1750)
+	addRule("CSMapLevelTypeChangeReq", "game", "game", 1752)
+	addRule("SSCrossYuanHangTrialViewListReq", "crossserver", "crossserver", 6002)
+	addRule("SSCrossYuanHangTrialReq", "crossserver", "crossserver", 6004)
+	addRule("SSCrossYuanHangTrialChallengeReq", "crossserver", "crossserver", 6006)
+	addRule("SSCrossYuanHangTrialChallengeResultReq", "crossserver", "crossserver", 6008)
+	addRule("SSCrossYuanHangTrialUpdateRankScoreNtf", "crossserver", "crossserver", 6011)
+	addRule("SSCrossYuanHangTrialRankListReq", "crossserver", "crossserver", 6012)
+	addRule("SSCrossYuanHangTrialInfoReq", "crossserver", "crossserver", 6016)
+	addRule("SSCrossYuanHangTrialSelfReq", "crossserver", "crossserver", 6026)
+	addRule("SSCrossRankUpdateNtf", "crossrank", "crossrank", 6028)
+	addRule("SSCrossRankFightInfoUpdateNtf", "crossrank", "crossrank", 6029)
+	addRule("SSCrossTopTowerMatchFightReq", "crossrank", "crossrank", 6030)
+	addRule("SSCrossTopTowerForceWinRankUpdateNtf", "crossrank", "crossrank", 6032)
+	addRule("SSCrossTopTowerForceWinRankListReq", "crossrank", "crossrank", 6033)
+	addRule("SSGCrossMapEnterReq", "gcrossmap", "gcrossmap", 6035)
+	addRule("SSGCrossMapLeaveReq", "gcrossmap", "gcrossmap", 6037)
+	addRule("SSGCrossMapSyncPosReq", "gcrossmap", "gcrossmap", 6040)
+	addRule("SSGCrossMapOtherUnitShowInfoReq", "gcrossmap", "gcrossmap", 6045)
+	addRule("SSGCrossMapUnitShowUpdateNtf", "gcrossmap", "gcrossmap", 6047)
+	addRule("SSGCrossChatMessageReq", "gcrossmap", "gcrossmap", 6048)
+	addRule("SSGCrossMapSyncParamReq", "gcrossmap", "gcrossmap", 6051)
 
- 	//req和ack消息映射处理
+	//req和ack消息映射处理
 	ReqAckKVList[1000] = ReqAckKVInfo{1000, 1001, "CSPingReq|SCPingAck"}
 	ReqAckKVList[1002] = ReqAckKVInfo{1002, 1003, "CSLoginReq|SCLoginAck"}
 	ReqAckKVList[1004] = ReqAckKVInfo{1004, 1005, "CSReconnectReq|SCReconnectAck"}
@@ -636,4 +638,4 @@ func init(){
 	ReqAckKVList[1747] = ReqAckKVInfo{1747, 1748, "CSBTFirstRechargeRewardReq|SCBTFirstRechargeRewardAck"}
 	ReqAckKVList[1750] = ReqAckKVInfo{1750, 1751, "CSBTRecharge100RewardReq|SCBTRecharge100RewardAck"}
 	ReqAckKVList[1752] = ReqAckKVInfo{1752, 1753, "CSMapLevelTypeChangeReq|SCMapLevelTypeChangeAck"}
-}
+}

+ 1 - 1
RO_Server_Trunk-branch_0.1.39/roserver/battleboss/model/boss_manager.go

@@ -524,7 +524,7 @@ func (this *WorldBossManager) PlayerChallengeSummonBoss(uid, challengeBossUid ui
 		if bossInfo.finish {
 			delete(this.challengePlayerList, uid)
 		} else {
-			bossInfo.leaveNotify(uid, false)
+			bossInfo.leaveNotify(uid, true)
 			//util.InfoF("PlayerChallengeSummonBoss already in other boss=%v uid=%v", bossInfo, uid)
 			//return serverproto.ErrorCode_ERROR_AOI_BOSS_CHALLENGING
 		}

+ 58 - 16
RO_Server_Trunk-branch_0.1.39/roserver/db/model/orm_helper.go

@@ -44,6 +44,8 @@ const (
 	RoleBattleDataPrefix = "role_battle_"
 	//任务
 	RoleTaskDataPrefix = "role_task_"
+	//困难模式任务
+	RoleTaskDataHardPrefix = "role_task_hard"
 	//竞技场数据
 	RoleArenaDataPrefix = "role_arena_"
 	//小红点
@@ -336,7 +338,7 @@ func GetRoleFromRedis(uid uint64, ack *serverproto.SSGetRoleAck, RoleRegisterTim
 	//任务数据
 	ack.Role.RoleTask = &serverproto.RoleTask{}
 	GetRoleTaskFromRedis(uid, ack.Role.RoleTask)
-
+	util.InfoF("get role task:%v", ack.Role.RoleTask)
 	//msgData, _, _ = rpcc.EncodeMessage(ack)
 	//newLen = len(msgData)
 	//util.InfoF("msgDatalen1=%v task", newLen-oldLen)
@@ -1520,25 +1522,45 @@ const TASK_REWARD_STATE_REWARD_DB = 2
 func SetRoleTaskToRedis(uid uint64, roleTask *serverproto.RoleTask) {
 	uidStr := strconv.FormatUint(uid, 10)
 	keyStr := RoleTaskDataPrefix + uidStr
+	KeyHardStr := RoleTaskDataHardPrefix + uidStr
 
 	for idx := range roleTask.TaskList {
 		taskInfo := roleTask.TaskList[idx]
 		fieldStr := strconv.Itoa(int(taskInfo.TaskId))
-		//主线完成的任务直接删除
-		if taskInfo.State == TASK_REWARD_STATE_REWARD_DB && len(taskInfo.Progress) <= 0 {
-			service.GetRedis().HDel(keyStr, fieldStr)
-			continue
-		}
-		msgData, err := rocommon.GetCodec().Marshal(taskInfo)
-		if err != nil {
-			util.ErrorF("SetRoleTaskToRedis uid=%v Marshal err=%v field=%v", uid, err, fieldStr)
-			continue
-		}
-		msgStr := base64.StdEncoding.EncodeToString(msgData.([]byte))
+		if taskInfo.TaskType == model.TASK_TYPE_HARD || taskInfo.TaskType == model.TASK_TYPE_HARD_GROUP {
+			//困难模式任务删除
+			if taskInfo.State == TASK_REWARD_STATE_REWARD_DB {
+				service.GetRedis().HDel(KeyHardStr, fieldStr)
+				continue
+			}
+			msgData, err := rocommon.GetCodec().Marshal(taskInfo)
+			if err != nil {
+				util.ErrorF("SetRoleTaskToRedis uid=%v Marshal err=%v field=%v", uid, err, fieldStr)
+				continue
+			}
+			msgStr := base64.StdEncoding.EncodeToString(msgData.([]byte))
 
-		_, err = service.GetRedis().HSet(keyStr, fieldStr, msgStr).Result()
-		if err != nil {
-			util.ErrorF("SetRoleTaskToRedis uid=%v err=%v %v", uid, err)
+			_, err = service.GetRedis().HSet(KeyHardStr, fieldStr, msgStr).Result()
+			if err != nil {
+				util.ErrorF("SetRoleTaskToRedis uid=%v err=%v %v", uid, err)
+			}
+		} else {
+			//主线完成的任务直接删除
+			if taskInfo.State == TASK_REWARD_STATE_REWARD_DB && len(taskInfo.Progress) <= 0 {
+				service.GetRedis().HDel(keyStr, fieldStr)
+				continue
+			}
+			msgData, err := rocommon.GetCodec().Marshal(taskInfo)
+			if err != nil {
+				util.ErrorF("SetRoleTaskToRedis uid=%v Marshal err=%v field=%v", uid, err, fieldStr)
+				continue
+			}
+			msgStr := base64.StdEncoding.EncodeToString(msgData.([]byte))
+
+			_, err = service.GetRedis().HSet(keyStr, fieldStr, msgStr).Result()
+			if err != nil {
+				util.ErrorF("SetRoleTaskToRedis uid=%v err=%v %v", uid, err)
+			}
 		}
 	}
 
@@ -1559,12 +1581,17 @@ func SetRoleTaskToRedis(uid uint64, roleTask *serverproto.RoleTask) {
 func GetRoleTaskFromRedis(uid uint64, roleTask *serverproto.RoleTask) bool {
 	uidStr := strconv.FormatUint(uid, 10)
 	keyStr := RoleTaskDataPrefix + uidStr
-
+	KeyHardStr := RoleTaskDataHardPrefix + uidStr
 	msgStrList, err := service.GetRedis().HGetAll(keyStr).Result()
 	if err != nil {
 		util.ErrorF("GetRoleTaskFromRedis uid=%v err=%v", uid, err)
 		return false
 	}
+	msgStrHardList, er := service.GetRedis().HGetAll(KeyHardStr).Result()
+	if er != nil {
+		util.ErrorF("GetRoleTaskFromRedis uid=%v err=%v", uid, err)
+		return false
+	}
 
 	var tmpTaskList []*serverproto.TaskData
 	for key, val := range msgStrList {
@@ -1594,6 +1621,21 @@ func GetRoleTaskFromRedis(uid uint64, roleTask *serverproto.RoleTask) bool {
 			tmpTaskList = append(tmpTaskList, taskInfo)
 		}
 	}
+	for _, val := range msgStrHardList {
+		msgData, err1 := base64.StdEncoding.DecodeString(val)
+		if err1 != nil {
+			util.ErrorF("GetRoleTaskFromRedis Task DecodeString uid=%v err=%v", uid, err1)
+			continue
+		}
+		taskInfo := &serverproto.TaskData{}
+		err = rocommon.GetCodec().Unmarshal(msgData, taskInfo)
+		if err != nil {
+			util.ErrorF("GetRoleTaskFromRedis Task Unmarshal uid=%v err=%v", uid, err)
+			continue
+		}
+		tmpTaskList = append(tmpTaskList, taskInfo)
+
+	}
 	roleTask.TaskList = append(roleTask.TaskList, tmpTaskList...)
 	return true
 }

+ 2 - 0
RO_Server_Trunk-branch_0.1.39/roserver/game/model/role_activity.go

@@ -3119,6 +3119,7 @@ func (this *RoleActivity) OtherExchangeCheck(useItemList []*serverproto.Exchange
 // 扣除宠物兑换道具
 func (this *RoleActivity) DelPetExchangeItem(useItemList []*serverproto.ExchangeInfo) serverproto.ErrorCode {
 	if len(useItemList) <= 0 {
+		util.ErrorF("uid=%v del pet error useItemList is nil:", this.role.GetUUid())
 		return serverproto.ErrorCode_ERROR_FAIL
 	}
 	//删除消耗的宠物
@@ -3128,6 +3129,7 @@ func (this *RoleActivity) DelPetExchangeItem(useItemList []*serverproto.Exchange
 			costPet := this.role.GetRolePet().getPet(uint32(data.Key))
 			//上阵宠物和契约宠物无法作为兑换材料
 			if costPet == nil || costPet.HeroId > 0 || costPet.QiyueHeroId > 0 {
+				util.ErrorF("uid=%v del pet error costPet:%v :", this.role.GetUUid(), costPet)
 				return serverproto.ErrorCode_ERROR_FAIL
 			}
 			delPetList = append(delPetList, uint32(data.Key))

+ 222 - 61
RO_Server_Trunk-branch_0.1.39/roserver/game/model/role_battle.go

@@ -248,14 +248,21 @@ type RoleBattle struct {
 	maxIncomeTime  uint64
 	mapLevel       uint32
 	mapId          uint32
+	mapLevelHard   uint32 //困难模式
+	mapIdHard      uint32 //困难模式
 	mapRewardCount uint32 //累计的挑战boss成功次数
 	mapRewardId    uint32
 	mapRewardLevel uint32
-	mapLevelTime   uint64
+	//mapRewardIdHard    uint32 //困难模式
+	//mapRewardLevelHard uint32 //困难模式
+	mapLevelTime uint64
 
 	selfRank                 uint32
 	totalRanks               uint32
 	topRankList              []*serverproto.RankPlayerInfo
+	selfHardRank             uint32
+	totalHardRanks           uint32
+	topHardRankList          []*serverproto.RankPlayerInfo
 	getRankTimeStamp         int64
 	mapLevelChallengeNumList []*serverproto.KeyValueType
 
@@ -318,10 +325,14 @@ func (this *RoleBattle) Load(msg interface{}) bool {
 		this.mapLevelChallengeNumList = proRole.RoleBattle.MapChallengeNumList
 		this.mapLevel = proRole.RoleBattle.MapLevel
 		this.mapId = proRole.RoleBattle.MapId
+		this.mapLevelHard = proRole.RoleBattle.MapLevelHard
+		this.mapIdHard = proRole.RoleBattle.MapIdHard
 		//累计的挑战boss成功次数
 		this.mapRewardCount = proRole.RoleBattle.RewardMapCount
 		this.mapRewardId = proRole.RoleBattle.RewardMapId
 		this.mapRewardLevel = proRole.RoleBattle.RewardMapLevel
+		//this.mapRewardIdHard = proRole.RoleBattle.RewardMapIdHard
+		//this.mapRewardLevelHard = proRole.RoleBattle.RewardMapLevelHard
 		this.mapLevelTime = proRole.RoleBattle.MapLevelTime
 		this.lastRecordBattleAcceTime = proRole.RoleBattle.LastRecordBattleAcceTime
 		this.battleAcceDuration = proRole.RoleBattle.BattleAcceDuration
@@ -330,11 +341,21 @@ func (this *RoleBattle) Load(msg interface{}) bool {
 			this.mapId = 1
 			this.SetDirty(true)
 		}
-		if this.mapRewardId == 0 || this.mapRewardLevel == 0 {
-			this.mapRewardId = 1
-			this.mapRewardLevel = 1
+		//if this.mapRewardId == 0 || this.mapRewardLevel == 0 {
+		//	this.mapRewardId = 1
+		//	this.mapRewardLevel = 1
+		//	this.SetDirty(true)
+		//}
+		if this.mapLevelHard == 0 || this.mapIdHard == 0 {
+			this.mapLevelHard = 1
+			this.mapIdHard = 1
 			this.SetDirty(true)
 		}
+		//if this.mapRewardIdHard == 0 || this.mapRewardLevelHard == 0 {
+		//	this.mapRewardIdHard = 1
+		//	this.mapRewardLevelHard = 1
+		//	this.SetDirty(true)
+		//}
 		this.getMapRewardShowCount()
 
 		this.quickBattle = &serverproto.QuickBattleData{}
@@ -467,6 +488,8 @@ func (this *RoleBattle) Save() {
 			RushMap:                  this.rushMap,
 			LastRecordBattleAcceTime: this.lastRecordBattleAcceTime,
 			BattleAcceDuration:       this.battleAcceDuration,
+			MapIdHard:                this.mapIdHard,
+			MapLevelHard:             this.mapLevelHard,
 			//todo...
 			//MapChallengeNumList: this.mapLevelChallengeNumList, 数据太大后续做优化处理
 		},
@@ -583,6 +606,11 @@ func (this *RoleBattle) GetMapShowReward(addItemList map[int32]int32) {
 	}
 }
 
+func (this *RoleBattle) SendBattleData() {
+	this.changeBattleDataNtf()
+
+}
+
 func (this *RoleBattle) addMapRewardCount(rewardCount uint32) {
 	if rewardCount > 0 {
 		this.mapRewardCount += rewardCount
@@ -608,6 +636,10 @@ func (this *RoleBattle) changeBattleDataNtf() {
 		QuickBattle:    this.quickBattle,
 		RewardMapCount: this.getMapRewardShowCount(),
 	}
+	if this.role.GetHardFight() {
+		ntfMsg.MapId = this.mapIdHard
+		ntfMsg.MapLevel = this.mapLevelHard
+	}
 	this.role.ReplayGate(ntfMsg, true)
 }
 
@@ -620,20 +652,29 @@ func (this *RoleBattle) changeQuickBattleNtf(errorCode int32, itemList []*server
 }
 
 func (this *RoleBattle) SetMapRank(selfRank, totalRanks uint32, topRankList []*serverproto.RankPlayerInfo, addSystemMsg bool) {
-	this.selfRank = selfRank
-	this.totalRanks = totalRanks
-	this.topRankList = topRankList
-
-	//刚打完战斗时,会回调并设置,这边需要重新设置时间
-	this.getRankTimeStamp = util.GetTimeSeconds()
-	//util.InfoF("uid=%v SetMapRank selfRank=%v totalRanks=%v topRankList=%v", this.role.GetUUid(),
-	//	this.selfRank, this.totalRanks, this.topRankList)
+	if this.role.isHardFight {
+		this.selfHardRank = selfRank
+		this.totalHardRanks = totalRanks
+		this.topHardRankList = topRankList
 
-	//第一个通过该关卡的玩家
-	if this.selfRank == 1 && addSystemMsg {
-		if this.mapId > 1 && this.mapLevel%5 == 0 {
-			this.role.AddSystemMessage(SystemMessageType_PassMap,
-				AddSystemMsg{ParamId: this.getLevelId(this.mapId, this.mapLevel)})
+		//刚打完战斗时,会回调并设置,这边需要重新设置时间
+		this.getRankTimeStamp = util.GetTimeSeconds()
+	} else {
+		this.selfRank = selfRank
+		this.totalRanks = totalRanks
+		this.topRankList = topRankList
+
+		//刚打完战斗时,会回调并设置,这边需要重新设置时间
+		this.getRankTimeStamp = util.GetTimeSeconds()
+		//util.InfoF("uid=%v SetMapRank selfRank=%v totalRanks=%v topRankList=%v", this.role.GetUUid(),
+		//	this.selfRank, this.totalRanks, this.topRankList)
+
+		//第一个通过该关卡的玩家
+		if this.selfRank == 1 && addSystemMsg {
+			if this.mapId > 1 && this.mapLevel%5 == 0 {
+				this.role.AddSystemMessage(SystemMessageType_PassMap,
+					AddSystemMsg{ParamId: this.getLevelId(this.mapId, this.mapLevel)})
+			}
 		}
 	}
 }
@@ -646,6 +687,14 @@ func (this *RoleBattle) GetPassBattleIdNum(passBattleId int32) int32 {
 	return 0
 }
 
+// 通关指定关卡次数,目前都是一次,后续有特殊关卡会记录通关次数
+func (this *RoleBattle) GetPassHardBattleIdNum(passBattleId int32) int32 {
+	if this.getLevelId(this.mapIdHard, this.mapLevelHard) > passBattleId {
+		return 1
+	}
+	return 0
+}
+
 func (this *RoleBattle) SetIncomeTime(incomeTime uint64) {
 	this.incomeTime = incomeTime
 	this.SetDirty(true)
@@ -719,6 +768,51 @@ func (this *RoleBattle) addMapRank(rewardCount uint32, oldMapId, oldMapLevel uin
 	//任务处理
 	TaskMagCheck(this.role, serverproto.TaskType_Level_Battle_Count, 0)
 	TaskMagCheck(this.role, serverproto.TaskType_Battle_Boss_Reward_Count, 1)
+	//TaskMagCheck(this.role, serverproto.TaskType_Level_Hard_Battle_Count, 0)
+
+	this.role.GetRoleBase().UpdatePlayerBriefInfo(false)
+
+	this.role.GetRoleBase().SetFightPower(0)
+}
+
+// 困难模式
+func (this *RoleBattle) addHardMapRank(rewardCount uint32, oldMapId, oldMapLevel uint32, passTime uint32, recordTimeStamp uint64) {
+	NewMapLevelId := this.getLevelId(this.mapIdHard, this.mapLevelHard)
+	oldMapLevelId := this.getLevelId(oldMapId, oldMapLevel)
+	dbMsg := &serverproto.SSMapLevelChangeReq{
+		NewMapLevelId: uint32(NewMapLevelId),
+		PassTime:      uint64(util.GetTimeMilliseconds()),
+		IsHard:        true,
+	}
+
+	dbMsg.RecordInfo = &serverproto.BattleRecordInfo{
+		Uid:            this.role.GetUUid(),
+		BattleRecordId: model.GenerateUid(),
+		NickName:       this.role.GetNickName(),
+		ImgId:          this.role.GetImageId(),
+		Gender:         this.role.GetRoleBase().GetRoleSex(),
+		Level:          this.role.GetRoleLevel(),
+		ConfigId:       this.role.GetRoleBase().RoleData().HeroData.ConfigId,
+		FightPower:     int32(this.role.roleBattleAttr.curTotalFightPower),
+		//FightPower:     int32(this.role.GetRoleFightPower().TotalFightPower),
+		RecordTime:  recordTimeStamp,
+		BattleTime:  passTime,
+		MapLevelId:  oldMapLevelId,
+		HeadFrameId: this.role.GetRoleBase().RoleData().HeadFrameId,
+	}
+	oldLevelCfgData, ok := serverproto.LevelCfgLoader[oldMapLevelId]
+	if ok {
+		dbMsg.RecordInfo.BattleVersion = oldLevelCfgData.Version
+	}
+
+	this.role.SendRank(dbMsg)
+
+	//this.addMapRewardCount(rewardCount)
+
+	//任务处理
+	//TaskMagCheck(this.role, serverproto.TaskType_Level_Battle_Count, 0)
+	//TaskMagCheck(this.role, serverproto.TaskType_Battle_Boss_Reward_Count, 1)
+	TaskMagCheck(this.role, serverproto.TaskType_Level_Hard_Battle_Count, 0)
 
 	this.role.GetRoleBase().UpdatePlayerBriefInfo(false)
 
@@ -877,23 +971,28 @@ func (this *RoleBattle) GMIncome(incomeTime int32) {
 	util.DebugF("uid=%v GMIncome incomenum=%v dropList=%v", this.role.GetUUid(), incomeNum, ackMsg)
 }
 
-func (this *RoleBattle) GMSetMapLevel(mapId, mapLevel uint32) {
+func (this *RoleBattle) GMSetMapLevel(mapId, mapLevel uint32, b bool) {
 	//关卡数据不存在
 	levelId := this.getLevelId(mapId, mapLevel)
 	_, ok := serverproto.LevelCfgLoader[levelId]
 	if !ok {
 		return
 	}
+	if b {
+		this.mapIdHard = mapId
+		this.mapLevelHard = mapLevel
+		this.SetDirty(true)
+	} else {
+		rewardCount := this.getDeltaMapCount(this.mapId, this.mapLevel, mapId, mapLevel)
 
-	rewardCount := this.getDeltaMapCount(this.mapId, this.mapLevel, mapId, mapLevel)
-
-	oldMapId := this.mapId
-	oldMapLevel := this.mapLevel
-	this.mapId = mapId
-	this.mapLevel = mapLevel
-	this.SetDirty(true)
-	//修改地图通关排名(需要通关该关卡)
-	this.addMapRank(rewardCount, oldMapId, oldMapLevel, 0, 0)
+		oldMapId := this.mapId
+		oldMapLevel := this.mapLevel
+		this.mapId = mapId
+		this.mapLevel = mapLevel
+		this.SetDirty(true)
+		//修改地图通关排名(需要通关该关卡)
+		this.addMapRank(rewardCount, oldMapId, oldMapLevel, 0, 0)
+	}
 
 	this.changeBattleDataNtf()
 }
@@ -1029,8 +1128,11 @@ func (this *RoleBattle) BossReward(challengeTime uint32, mapId, mapLevel uint32,
 	//if ret != serverproto.ErrorCode_ERROR_OK {
 	//	return ret
 	//}
-
+	isHard := this.role.isHardFight
 	levelId := this.getLevelId(this.mapId, this.mapLevel)
+	if isHard {
+		levelId = this.getLevelId(this.mapIdHard, this.mapLevelHard)
+	}
 	levelCfgData, ok := serverproto.LevelCfgLoader[levelId]
 	if !ok {
 		return serverproto.ErrorCode_ERROR_BATTLE_LEVEL_DATA_NOT_FOUND
@@ -1044,28 +1146,59 @@ func (this *RoleBattle) BossReward(challengeTime uint32, mapId, mapLevel uint32,
 	nowTime := util.GetTimeMilliseconds()
 	oldMapId := this.mapId
 	oldMapLevel := this.mapLevel
+	oldHardMapId := this.mapId
+	oldHardMapLevel := this.mapLevel
 	var addItemList = map[int32]int32{}
-	//baseExp
-	addItemList[int32(serverproto.ResType_Res_RoleBaseExp)] = levelCfgData.BaseExp
-	//伙伴经验
-	addItemList[int32(serverproto.ResType_Res_HeroBaseExp)] = levelCfgData.Parter
-	//jobExp
-	addItemList[int32(serverproto.ResType_Res_RoleJobExp)] = levelCfgData.JobExp
-	//rmb
-	addItemList[int32(serverproto.ResType_Res_Rmb)] = levelCfgData.Gold
-	//通关免费充值额度
-	addItemList[int32(serverproto.ResType_Res_CreditRecharge)] = levelCfgData.FreeInvest
-	//cash//做活动时间判定,活动时间内才给
-	if !this.role.FuncDisable() {
-		if ok := CheckHDItemAdd(int32(serverproto.ResType_Res_CashTicket), this.role); ok && (levelCfgData.Cash != 0) {
-			addItemList[int32(serverproto.ResType_Res_CashTicket)] = levelCfgData.Cash
+	if isHard {
+		hardLevelCfgData, ok2 := serverproto.HardLevelCfgLoader[levelId]
+		if !ok2 {
+			return serverproto.ErrorCode_ERROR_BATTLE_LEVEL_DATA_NOT_FOUND
+		}
+		//baseExp
+		addItemList[int32(serverproto.ResType_Res_RoleBaseExp)] = hardLevelCfgData.BaseExp
+		//伙伴经验
+		addItemList[int32(serverproto.ResType_Res_HeroBaseExp)] = hardLevelCfgData.Parter
+		//jobExp
+		addItemList[int32(serverproto.ResType_Res_RoleJobExp)] = hardLevelCfgData.JobExp
+		//rmb
+		addItemList[int32(serverproto.ResType_Res_Rmb)] = hardLevelCfgData.Gold
+		//通关免费充值额度
+		addItemList[int32(serverproto.ResType_Res_CreditRecharge)] = hardLevelCfgData.FreeInvest
+		//cash//做活动时间判定,活动时间内才给
+		if !this.role.FuncDisable() {
+			if ok := CheckHDItemAdd(int32(serverproto.ResType_Res_CashTicket), this.role); ok && (hardLevelCfgData.Cash != 0) {
+				addItemList[int32(serverproto.ResType_Res_CashTicket)] = hardLevelCfgData.Cash
+			}
+		}
+		//coin
+		addItemList[int32(serverproto.ResType_Res_Coin)] = hardLevelCfgData.Zeny
+		//dropId := this.genDropId(model.LevelDropBossDataList, levelId) //放到income中领取
+		//for idx := 0; idx < len(dropId); idx++ {
+		//	this.DropProcess(addItemList, dropId[idx])
+		//}
+	} else {
+		//baseExp
+		addItemList[int32(serverproto.ResType_Res_RoleBaseExp)] = levelCfgData.BaseExp
+		//伙伴经验
+		addItemList[int32(serverproto.ResType_Res_HeroBaseExp)] = levelCfgData.Parter
+		//jobExp
+		addItemList[int32(serverproto.ResType_Res_RoleJobExp)] = levelCfgData.JobExp
+		//rmb
+		addItemList[int32(serverproto.ResType_Res_Rmb)] = levelCfgData.Gold
+		//通关免费充值额度
+		addItemList[int32(serverproto.ResType_Res_CreditRecharge)] = levelCfgData.FreeInvest
+		//cash//做活动时间判定,活动时间内才给
+		if !this.role.FuncDisable() {
+			if ok := CheckHDItemAdd(int32(serverproto.ResType_Res_CashTicket), this.role); ok && (levelCfgData.Cash != 0) {
+				addItemList[int32(serverproto.ResType_Res_CashTicket)] = levelCfgData.Cash
+			}
+		}
+		//coin
+		addItemList[int32(serverproto.ResType_Res_Coin)] = levelCfgData.Zeny
+		dropId := this.genDropId(model.LevelDropBossDataList, levelId) //放到income中领取
+		for idx := 0; idx < len(dropId); idx++ {
+			this.DropProcess(addItemList, dropId[idx])
 		}
-	}
-	//coin
-	addItemList[int32(serverproto.ResType_Res_Coin)] = levelCfgData.Zeny
-	dropId := this.genDropId(model.LevelDropBossDataList, levelId) //放到income中领取
-	for idx := 0; idx < len(dropId); idx++ {
-		this.DropProcess(addItemList, dropId[idx])
 	}
 	this.role.AddItemList(addItemList, AddFrom_Battle, true)
 
@@ -1081,28 +1214,43 @@ func (this *RoleBattle) BossReward(challengeTime uint32, mapId, mapLevel uint32,
 	_, ok1 := serverproto.LevelCfgLoader[levelId+1]
 	if !ok1 {
 		nextLevelId := this.getLevelId(this.mapId+1, 1)
+		if isHard {
+			nextLevelId = this.getLevelId(this.mapIdHard+1, 1)
+		}
 		_, ok2 := serverproto.LevelCfgLoader[nextLevelId]
 		if !ok2 {
 			util.WarnF("uid=%v BossReward next level cfg data not found!!!", this.role.GetUUid())
 		} else {
 			util.InfoF("uid=%v BossReward to next mapId=%v level=%v", this.role.GetUUid(), this.mapId+1, 1)
-			this.mapId++
-			this.mapLevel = 1
+			if isHard {
+				this.mapIdHard++
+				this.mapLevelHard = 1
+				//TaskMagCheck(this.role, serverproto.TaskType_Level_Hard_Battle_Count, 0)
+				this.addHardMapRank(1, oldHardMapId, oldHardMapLevel, challengeTime, recordTimeStamp)
+			} else {
+				this.mapId++
+				this.mapLevel = 1
+				//修改地图通关排名(需要通关该关卡)
+				this.addMapRank(1, oldMapId, oldMapLevel, challengeTime, recordTimeStamp)
+			}
 			this.mapLevelTime = nowTime
 			this.SetDirty(true)
-			//修改地图通关排名(需要通关该关卡)
-			this.addMapRank(1, oldMapId, oldMapLevel, challengeTime, recordTimeStamp)
 
 			this.changeBattleDataNtf()
 		}
 	} else {
-		this.mapLevel++
+		if isHard {
+			this.mapLevelHard++
+			//TaskMagCheck(this.role, serverproto.TaskType_Level_Hard_Battle_Count, 0)
+			this.addHardMapRank(1, oldHardMapId, oldHardMapLevel, challengeTime, recordTimeStamp)
+		} else {
+			this.mapLevel++
+			//修改地图通关排名(需要通关该关卡)
+			this.addMapRank(1, oldMapId, oldMapLevel, challengeTime, recordTimeStamp)
+		}
 		this.mapLevelTime = nowTime
 		this.SetDirty(true)
 
-		//修改地图通关排名(需要通关该关卡)
-		this.addMapRank(1, oldMapId, oldMapLevel, challengeTime, recordTimeStamp)
-
 		util.InfoF("uid=%v BossReward to next mapId=%v level=%v", this.role.GetUUid(), this.mapId, this.mapLevel)
 		this.changeBattleDataNtf()
 	}
@@ -1173,6 +1321,9 @@ func (this *RoleBattle) bossRewardCheck(challengeTime uint32, mapId, mapLevel ui
 func (this *RoleBattle) mapFightCheck() serverproto.ErrorCode {
 	//战斗力校验
 	levelId := this.getLevelId(this.mapId, this.mapLevel)
+	if this.role.GetHardFight() {
+		levelId = this.getLevelId(this.mapIdHard, this.mapLevelHard)
+	}
 	levelCfgData, ok := serverproto.LevelCfgLoader[levelId]
 	if !ok {
 		return serverproto.ErrorCode_ERROR_BATTLE_LEVEL_DATA_NOT_FOUND
@@ -1246,11 +1397,18 @@ func (this *RoleBattle) DropProcess(dropList map[int32]int32, dropId int32) {
 func (this *RoleBattle) GetMapRank() {
 	nowTime := util.GetTimeSeconds()
 	if this.getRankTimeStamp > 0 && (nowTime-this.getRankTimeStamp) < 5 {
-		ackMsg := &serverproto.SCGetMapRankAck{
-			Error:         int32(serverproto.ErrorCode_ERROR_OK),
-			SelfRank:      this.selfRank,
-			TotalRank:     this.totalRanks,
-			TopPlayerList: append(this.topRankList),
+		ackMsg := &serverproto.SCGetMapRankAck{}
+		if this.role.isHardFight {
+			ackMsg.Error = int32(serverproto.ErrorCode_ERROR_OK)
+			ackMsg.SelfRank = this.selfHardRank
+			ackMsg.TotalRank = this.totalHardRanks
+			ackMsg.TopPlayerList = append(this.topHardRankList)
+		} else {
+			ackMsg.Error = int32(serverproto.ErrorCode_ERROR_OK)
+			ackMsg.SelfRank = this.selfRank
+			ackMsg.TotalRank = this.totalRanks
+			ackMsg.TopPlayerList = append(this.topRankList)
+
 		}
 		this.role.ReplayGate(ackMsg, true)
 		return
@@ -1259,6 +1417,9 @@ func (this *RoleBattle) GetMapRank() {
 	this.getRankTimeStamp = nowTime
 	//重新获取排名
 	dbMsg := &serverproto.SSMapLevelChangeReq{}
+	if this.role.isHardFight {
+		dbMsg.IsHard = true
+	}
 	this.role.SendRank(dbMsg)
 }
 

+ 52 - 49
RO_Server_Trunk-branch_0.1.39/roserver/game/model/role_battle_attr.go

@@ -21,7 +21,7 @@ func (this *Role) GetActorAttr(reqMsg *serverproto.CSActorAttrGetReq) {
 	}
 }
 
-//属性变更类型
+// 属性变更类型
 const (
 	Attr_Change_None             = 0
 	Attr_Change_Fashion          = 1  //时装数据变更
@@ -331,7 +331,7 @@ func (this *ActorAttr) isFront() bool {
 	return this.positionValue <= 3
 }
 
-//first
+// first
 func (this *ActorAttr) STR() int32 {
 	return this.baseStr + int32(this.GetAdditionalAttr(serverproto.Attr_Str))
 }
@@ -351,7 +351,7 @@ func (this *ActorAttr) LUK() int32 {
 	return this.baseLuk + int32(this.GetAdditionalAttr(serverproto.Attr_Luk))
 }
 
-//second
+// second
 func (this *ActorAttr) Life() float64 {
 	return this.calcSecondAttrForLife(serverproto.Attr_Life)
 }
@@ -403,27 +403,27 @@ func (this *ActorAttr) CastAcce() float32 {
 	//return this.calcSecondAttr(serverproto.Attr_CastAcce)
 }
 
-//暴击伤害百分比
+// 暴击伤害百分比
 func (this *ActorAttr) CritDamagePercent() float32 {
 	return this.GetAdditionalAttrPercent(serverproto.Attr_CritDamage_Percent)
 }
 
-//忽视物防
+// 忽视物防
 func (this *ActorAttr) Penetration() float32 {
 	return this.GetAdditionalAttrPercent(serverproto.Attr_Penetration_Percent)
 }
 
-//忽视魔防
+// 忽视魔防
 func (this *ActorAttr) MagicPenetration() float32 {
 	return this.GetAdditionalAttrPercent(serverproto.Attr_Magic_Penetration_Percent)
 }
 
-//防御百分比
+// 防御百分比
 func (this *ActorAttr) DefPercent() float32 {
 	return this.GetAdditionalAttrPercent(serverproto.Attr_Defense_Percent)
 }
 
-//魔防百分比
+// 魔防百分比
 func (this *ActorAttr) MagicDefPercent() float32 {
 	return this.GetAdditionalAttrPercent(serverproto.Attr_MagicDefense_Percent)
 }
@@ -562,7 +562,7 @@ func (this *ActorAttr) baseCastAcce() float32 {
 	return p1 * float32(this.DEX())
 }
 
-//获得二级基础属性
+// 获得二级基础属性
 func (this *ActorAttr) getAttr(attrId serverproto.Attr) float32 {
 	if attrId < serverproto.Attr_Life {
 		return 0
@@ -632,7 +632,7 @@ func (this *ActorAttr) getBaseSecondAttr(attrId serverproto.Attr) float32 {
 	return 0
 }
 
-//life需要处理成64位
+// life需要处理成64位
 func (this *ActorAttr) calcSecondAttrForLife(attrId serverproto.Attr) float64 {
 	if attrId < serverproto.Attr_Life || attrId > serverproto.Attr_CastAcce {
 		return 0
@@ -815,10 +815,13 @@ func (this *ActorAttr) calActorAttr(heroData *serverproto.HeroData, attrList []*
 			IsHeroPet: true,
 			ActorId:   uint32(heroData.Id),
 		}
+		//util.InfoF("aaaaa3", this.attrPercent)
 		//代码优化,避免频繁出现扩容操作
 		ntfAttrType.AttrList = make([]*serverproto.KeyValueFloat32, 0, 16)
 		this.attrMag.copyAttrToMsg(this, ntfAttrType)
 		//计算战力
+		//util.InfoF("aaaaaaa", ntfAttrType)
+		//util.InfoF("aaaaaaa22", heroData)
 		heroFightPower := this.calcActorFightPower(ntfAttrType.AttrList)
 		this.getRole().GetRoleHero().BattleAttrChange(heroData, ntfAttrType, heroFightPower)
 
@@ -832,8 +835,8 @@ func (this *ActorAttr) calActorAttr(heroData *serverproto.HeroData, attrList []*
 	return bChange
 }
 
-//计算属性
-//属性点加成
+// 计算属性
+// 属性点加成
 func (this *ActorAttr) calcAddPointAttrs(heroData *serverproto.HeroData, attrList []*serverproto.KeyValueType) bool {
 	if heroData == nil {
 		return false
@@ -859,7 +862,7 @@ func (this *ActorAttr) calcAddPointAttrs(heroData *serverproto.HeroData, attrLis
 	return true
 }
 
-//技能升级添加属性
+// 技能升级添加属性
 func (this *ActorAttr) calcSkillAttrs(heroData *serverproto.HeroData, attrChangeSt AttrChangeST) bool {
 	if !this.changeSetList.Has(Attr_Change_Skill) {
 		return false
@@ -928,7 +931,7 @@ func (this *ActorAttr) calcHeadFrameAttrs(heroData *serverproto.HeroData, attrCh
 	return true
 }
 
-//equip
+// equip
 func (this *ActorAttr) calcEquipAttrs(heroData *serverproto.HeroData) bool {
 	if !this.changeSetList.Has(Attr_Change_Equip) {
 		return false
@@ -961,7 +964,7 @@ func (this *ActorAttr) calcPrivilegeAttrs(heroData *serverproto.HeroData) bool {
 	return true
 }
 
-//card
+// card
 func (this *ActorAttr) calcCardAttrs(heroData *serverproto.HeroData) bool {
 	if !this.changeSetList.Has(Attr_Change_Card) {
 		return false
@@ -983,7 +986,7 @@ func (this *ActorAttr) calcCardAttrs(heroData *serverproto.HeroData) bool {
 	return true
 }
 
-//skill equip
+// skill equip
 func (this *ActorAttr) calcSkillEquipSlotAttrs(heroData *serverproto.HeroData) bool {
 	if !this.changeSetList.Has(Attr_Change_Skill_Equip_Slot) {
 		return false
@@ -1010,7 +1013,7 @@ func (this *ActorAttr) calcSkillEquipSlotAttrs(heroData *serverproto.HeroData) b
 	return true
 }
 
-//fashion
+// fashion
 func (this *ActorAttr) calcFashionAttr(fashionData *serverproto.FashionData, heroData *serverproto.HeroData) bool {
 	if !this.changeSetList.Has(Attr_Change_Fashion) {
 		return false
@@ -1044,7 +1047,7 @@ func (this *ActorAttr) calcFashionAttr(fashionData *serverproto.FashionData, her
 	return true
 }
 
-//sake
+// sake
 func (this *ActorAttr) calcSakeAttr(heroData *serverproto.HeroData) bool {
 	if !this.changeSetList.Has(Attr_Change_Sake) {
 		return false
@@ -1072,7 +1075,7 @@ func (this *ActorAttr) calcSakeAttr(heroData *serverproto.HeroData) bool {
 	return true
 }
 
-//sake
+// sake
 func (this *ActorAttr) calcHeadAttr(heroData *serverproto.HeroData) bool {
 	if !this.changeSetList.Has(Attr_Change_Head) {
 		return false
@@ -1106,7 +1109,7 @@ func (this *ActorAttr) calcHeadAttr(heroData *serverproto.HeroData) bool {
 	return true
 }
 
-//hero advance
+// hero advance
 func (this *ActorAttr) calcAdvanceAttrs(heroData *serverproto.HeroData) bool {
 	if !this.changeSetList.Has(Attr_Change_Advance) {
 		return false
@@ -1123,7 +1126,7 @@ func (this *ActorAttr) calcAdvanceAttrs(heroData *serverproto.HeroData) bool {
 	return true
 }
 
-//hero strength
+// hero strength
 func (this *ActorAttr) calcStrengthAttr(heroData *serverproto.HeroData) bool {
 	if !this.changeSetList.Has(Attr_Change_Strength) {
 		return false
@@ -1140,7 +1143,7 @@ func (this *ActorAttr) calcStrengthAttr(heroData *serverproto.HeroData) bool {
 	return true
 }
 
-//pet
+// pet
 func (this *ActorAttr) calcPetAttr(heroData *serverproto.HeroData, attrChangeSt AttrChangeST) bool {
 	if !this.changeSetList.Has(Attr_Change_Pet) {
 		return false
@@ -1187,7 +1190,7 @@ func (this *ActorAttr) calAttr(curAttr map[serverproto.Attr]float32, attrList ma
 	}
 }
 
-//直接添加到总属性上
+// 直接添加到总属性上
 func (this *ActorAttr) calAttrAdd(curAttr map[serverproto.Attr]float32, attrList map[serverproto.Attr]float32) {
 	for key, val := range attrList {
 		deltaValue := val
@@ -1200,7 +1203,7 @@ func (this *ActorAttr) calAttrAdd(curAttr map[serverproto.Attr]float32, attrList
 	}
 }
 
-//直接减到总属性上
+// 直接减到总属性上
 func (this *ActorAttr) calAttrDel(curAttr map[serverproto.Attr]float32, attrList map[serverproto.Attr]float32) {
 	for key, val := range attrList {
 		deltaValue := -val
@@ -1213,7 +1216,7 @@ func (this *ActorAttr) calAttrDel(curAttr map[serverproto.Attr]float32, attrList
 	}
 }
 
-//attr copy
+// attr copy
 func (this *ActorAttr) calAttrCopy(curAttr map[serverproto.Attr]float32, attrList map[serverproto.Attr]float32) {
 	for key, val := range curAttr {
 		attrList[key] += val
@@ -1362,7 +1365,7 @@ func (this *ActorAttr) GetHeadFrameAttr(baseAttrList map[serverproto.Attr]float3
 	}
 }
 
-//获取属性
+// 获取属性
 func (this *ActorAttr) GetEquipAttr(slotData *serverproto.SlotData, baseAttrList map[serverproto.Attr]float32) {
 	var suitList = map[int32]int32{}
 	//最小精炼等级
@@ -1588,7 +1591,7 @@ func (this *ActorAttr) GetFashionAttr(fashionData *serverproto.FashionData, hero
 	}
 }
 
-//进阶(突破等级上限,角色通过专职来处理)
+// 进阶(突破等级上限,角色通过专职来处理)
 func (this *ActorAttr) GetAdvanceAttrs(heroData *serverproto.HeroData, baseAttrList map[serverproto.Attr]float32) {
 	if heroData.AdvanceLevel <= 0 {
 		return
@@ -1613,7 +1616,7 @@ func (this *ActorAttr) GetAdvanceAttrs(heroData *serverproto.HeroData, baseAttrL
 	}
 }
 
-//突破
+// 突破
 func (this *ActorAttr) GetStrengthAttrs(heroData *serverproto.HeroData, baseAttrList map[serverproto.Attr]float32) {
 	if heroData.StrengthLevel <= 0 {
 		return
@@ -1638,7 +1641,7 @@ func (this *ActorAttr) GetStrengthAttrs(heroData *serverproto.HeroData, baseAttr
 	}
 }
 
-//可能是上阵,也可能是下阵
+// 可能是上阵,也可能是下阵
 func (this *ActorAttr) GetPetAttrs(heroData *serverproto.HeroData, baseAttrList map[serverproto.Attr]float32, attrChangeSt AttrChangeST) {
 	if heroData.BattlePetId <= 0 {
 		return
@@ -1850,7 +1853,7 @@ func (this *ActorAttr) getPetQiyueAttrs(petData *serverproto.PetData, baseAttrLi
 	}
 }
 
-//for pet(宠物自身属性计算)
+// for pet(宠物自身属性计算)
 func (this *ActorAttr) calPetAttrForPetBase() bool {
 	//check is'nt a pet
 	if !this.isPet {
@@ -2064,7 +2067,7 @@ func (this *ActorAttr) calcActorFightPower(attrList []*serverproto.KeyValueFloat
 	return fightPower
 }
 
-//战斗属性计算
+// 战斗属性计算
 type RoleBattleAttr struct {
 	role               *Role
 	bInitAttrCalc      bool   //玩家登陆时第一战斗时计算上阵单位属性
@@ -2102,7 +2105,7 @@ func newRoleBattleAttr(r *Role) *RoleBattleAttr {
 	return mag
 }
 
-//hero
+// hero
 func (this *RoleBattleAttr) getActorAttr(heroData *serverproto.HeroData) *ActorAttr {
 	actorAttr, ok := this.roleActorAttrList[heroData.Id]
 	if !ok {
@@ -2130,7 +2133,7 @@ func (this *RoleBattleAttr) getActorAttr(heroData *serverproto.HeroData) *ActorA
 	return actorAttr
 }
 
-//pet
+// pet
 func (this *RoleBattleAttr) getPetActorAttr(petData *serverproto.PetData) *ActorAttr {
 	actorAttr, ok := this.rolePetAttrList[int32(petData.Id)]
 	if !ok {
@@ -2147,7 +2150,7 @@ func (this *RoleBattleAttr) getPetActorAttr(petData *serverproto.PetData) *Actor
 	return actorAttr
 }
 
-//属性变更
+// 属性变更
 type AttrChangeST struct {
 	IgnoreNotify         bool //是否通知客户端属性变更(true不通知)
 	FightChangeNotNotify bool
@@ -2172,7 +2175,7 @@ type AttrChangeST struct {
 	HeadFrameId      int32
 }
 
-//压制值计算
+// 压制值计算
 type RepressChangeST struct {
 	HeroData      *serverproto.HeroData
 	BReset        bool
@@ -2181,7 +2184,7 @@ type RepressChangeST struct {
 	NewSKillLevel int32
 }
 
-//技能变化
+// 技能变化
 func (this *RoleBattleAttr) HeroSkillChange(heroData *serverproto.HeroData) {
 	if heroData == nil {
 		return
@@ -2213,7 +2216,7 @@ func (this *RoleBattleAttr) HeroSkillChange(heroData *serverproto.HeroData) {
 	}
 }
 
-//等级属性变更
+// 等级属性变更
 func (this *RoleBattleAttr) ResetLevelAttrList(heroData *serverproto.HeroData) {
 	if heroData == nil {
 		return
@@ -2228,7 +2231,7 @@ func (this *RoleBattleAttr) ResetLevelAttrList(heroData *serverproto.HeroData) {
 	})
 }
 
-//更换职业属性变更
+// 更换职业属性变更
 func (this *RoleBattleAttr) ResetJobAttrList(heroData *serverproto.HeroData) {
 	if heroData == nil {
 		return
@@ -2264,7 +2267,7 @@ func (this *RoleBattleAttr) PartnerAdvanceAttrList(heroData *serverproto.HeroDat
 	})
 }
 
-//属性变更唯一对外接口
+// 属性变更唯一对外接口
 func (this *RoleBattleAttr) AttrChange(attrChangeSt AttrChangeST) {
 
 	if attrChangeSt.IsPet {
@@ -2436,7 +2439,7 @@ func (this *RoleBattleAttr) getPetFightPower(petData *serverproto.PetData) int64
 	return fightPower
 }
 
-//获取当前所有技能对应的战力加成
+// 获取当前所有技能对应的战力加成
 func (this *RoleBattleAttr) getHeroTotalSkillFightPower(actorId int32) int32 {
 	var fightPower int32 = 0
 	heroData := this.role.GetRoleHero().GetHero(actorId)
@@ -2661,7 +2664,7 @@ func (this *RoleBattleAttr) syncActorData(out *serverproto.ActorBattleAttr, acto
 	}
 }
 
-//时装属性
+// 时装属性
 func (this *RoleBattleAttr) getFashionAttr(heroData *serverproto.HeroData) {
 	if heroData == nil {
 		//玩家自身角色
@@ -2708,7 +2711,7 @@ func (this *RoleBattleAttr) getFashionAttr(heroData *serverproto.HeroData) {
 	}
 }
 
-//收集屋藏品属性
+// 收集屋藏品属性
 func (this *RoleBattleAttr) getSakeAttr(heroData *serverproto.HeroData) {
 	if heroData == nil {
 		//玩家自身角色
@@ -2754,7 +2757,7 @@ func (this *RoleBattleAttr) getSakeAttr(heroData *serverproto.HeroData) {
 	}
 }
 
-//宠物羁绊属性
+// 宠物羁绊属性
 func (this *RoleBattleAttr) getPetBondAttr() {
 	if this.role.GetRolePet() == nil {
 		return
@@ -2899,7 +2902,7 @@ func (this *RoleBattleAttr) calcAttrPet(petList []*serverproto.PetData, attrChan
 	return
 }
 
-//计算其他玩家战斗属性
+// 计算其他玩家战斗属性
 func (this *RoleBattleAttr) CalcFightRoleInfoAttr(FightInfo *serverproto.FightRoleInfo) map[uint32]*serverproto.ActorData {
 	tempBattleHeroList := map[uint32]*serverproto.ActorData{}
 
@@ -2926,8 +2929,8 @@ func (this *RoleBattleAttr) CalcFightRoleInfoAttr(FightInfo *serverproto.FightRo
 	return tempBattleHeroList
 }
 
-//Role
-//获取英雄属性,宠物属性
+// Role
+// 获取英雄属性,宠物属性
 func (this *RoleBattleAttr) GetActorAttr(actorList []*serverproto.ActorAttrType,
 	isAllBattle bool, bNotify bool) serverproto.ErrorCode {
 
@@ -3028,9 +3031,9 @@ func (this *RoleBattleAttr) GetActorAttr(actorList []*serverproto.ActorAttrType,
 	return serverproto.ErrorCode_ERROR_OK
 }
 
-//获取actor契约属性
-//如果是宠物,则获取契约材料宠物给到契约宠物生成的属性
-//如果是英雄,则获取契约宠物继承到英雄的属性
+// 获取actor契约属性
+// 如果是宠物,则获取契约材料宠物给到契约宠物生成的属性
+// 如果是英雄,则获取契约宠物继承到英雄的属性
 func (this *RoleBattleAttr) GetActorQiyueAttr(actorList []*serverproto.ActorAttrType) {
 	for idx := 0; idx < len(actorList); idx++ {
 		if actorList[idx].IsHeroPet {

+ 526 - 28
RO_Server_Trunk-branch_0.1.39/roserver/game/model/role_task.go

@@ -48,10 +48,12 @@ type RoleTask struct {
 	jobCondition []*serverproto.ChangeJob //只针对主角//伙伴转职出案子再做
 	roleHeadCond serverproto.RoleHeadCond
 
-	taskTypeList  map[int32]set.Interface //根据枚举类型对任务做区分[serverproto.TaskType, taslidlist]
-	dailyTaskList map[uint32]*serverproto.TaskData
-	weekTaskList  map[uint32]*serverproto.TaskData
-	mainTaskList  map[uint32]*serverproto.TaskData
+	taskTypeList         map[int32]set.Interface //根据枚举类型对任务做区分[serverproto.TaskType, taslidlist]
+	dailyTaskList        map[uint32]*serverproto.TaskData
+	weekTaskList         map[uint32]*serverproto.TaskData
+	mainTaskList         map[uint32]*serverproto.TaskData
+	mapHardTaskList      map[uint32]*serverproto.TaskData //困难模式任务
+	mapGroupHardTaskList map[uint32]*serverproto.TaskData //困难模式组任务
 
 	dailyTaskScore serverproto.KeyValueType //活跃度/活跃度对应的奖励,按位处理(完成任务累加的积分)
 	weekTaskScore  serverproto.KeyValueType
@@ -69,10 +71,12 @@ func newRoleTask(r *Role) *RoleTask {
 		SaveObject: SaveObject{
 			role: r,
 		},
-		loadTaskData:  &serverproto.RoleTask{},
-		dailyTaskList: map[uint32]*serverproto.TaskData{},
-		weekTaskList:  map[uint32]*serverproto.TaskData{},
-		mainTaskList:  map[uint32]*serverproto.TaskData{},
+		loadTaskData:         &serverproto.RoleTask{},
+		dailyTaskList:        map[uint32]*serverproto.TaskData{},
+		weekTaskList:         map[uint32]*serverproto.TaskData{},
+		mainTaskList:         map[uint32]*serverproto.TaskData{},
+		mapHardTaskList:      map[uint32]*serverproto.TaskData{},
+		mapGroupHardTaskList: map[uint32]*serverproto.TaskData{},
 
 		taskTypeList: map[int32]set.Interface{},
 		recTypeCnt:   map[int32]*serverproto.KeyValueType{},
@@ -95,11 +99,24 @@ func (this *RoleTask) Load(msg interface{}) bool {
 			if dbRole.RoleTask.WeekTaskScore != nil {
 				this.weekTaskScore = *dbRole.RoleTask.WeekTaskScore
 			}
+			util.InfoF("qqqqqqdb:%v", dbRole.RoleTask.TaskList)
 			for idx := range dbRole.RoleTask.TaskList {
 				taskInfo := dbRole.RoleTask.TaskList[idx]
-				_, ok := model.ConvertTaskList[taskInfo.TaskId]
-				if !ok {
-					continue
+				if taskInfo.TaskType == model.TASK_TYPE_HARD {
+					_, ok := model.HardMissionTaskList[taskInfo.TaskId]
+					if !ok {
+						continue
+					}
+				} else if taskInfo.TaskType == model.TASK_TYPE_HARD_GROUP {
+					_, ok := model.HardGroupMissionTaskList[taskInfo.TaskId]
+					if !ok {
+						continue
+					}
+				} else {
+					_, ok := model.ConvertTaskList[taskInfo.TaskId]
+					if !ok {
+						continue
+					}
 				}
 				if taskInfo.TaskType == model.TASK_TYPE_DAILY {
 					this.dailyTaskList[taskInfo.TaskId] = taskInfo
@@ -107,8 +124,13 @@ func (this *RoleTask) Load(msg interface{}) bool {
 					this.weekTaskList[taskInfo.TaskId] = taskInfo
 				} else if taskInfo.TaskType == model.TASK_TYPE_MAIN {
 					this.mainTaskList[taskInfo.TaskId] = taskInfo
+				} else if taskInfo.TaskType == model.TASK_TYPE_HARD {
+					this.mapHardTaskList[taskInfo.TaskId] = taskInfo
+				} else if taskInfo.TaskType == model.TASK_TYPE_HARD_GROUP {
+					this.mapGroupHardTaskList[taskInfo.TaskId] = taskInfo
 				}
 			}
+			util.InfoF("qqqqqq:%v bbbbbb:%v", this.mapHardTaskList, this.mapGroupHardTaskList)
 			this.initTaskDataFromConfig()
 
 			for _, valueType := range dbRole.RoleTask.TypeRecCount {
@@ -172,6 +194,27 @@ func (this *RoleTask) CopyData() *serverproto.RoleTask {
 	for _, val := range this.mainTaskList {
 		tmpRoleTask.TaskList = append(tmpRoleTask.TaskList, val)
 	}
+	//var groupId uint32
+	//for _, val := range this.mapHardTaskList {
+	//	if val.State != TASK_REWARD_STATE_REWARD {
+	//		groupId = model.HardMissionTaskList[val.TaskId].GroupTaskId
+	//		tmpRoleTask.TaskList = append(tmpRoleTask.TaskList, val)
+	//		continue
+	//	}
+	//	if groupId == 0 && model.HardMissionTaskList[val.TaskId].GroupTaskId == groupId {
+	//		tmpRoleTask.TaskList = append(tmpRoleTask.TaskList, val)
+	//	}
+	//}
+
+	for _, val := range this.mapHardTaskList {
+		tmpRoleTask.TaskList = append(tmpRoleTask.TaskList, val)
+	}
+
+	for _, val := range this.mapGroupHardTaskList {
+		tmpRoleTask.TaskList = append(tmpRoleTask.TaskList, val)
+	}
+	util.InfoF("send task group:%v task:%v all task:%v", this.mapGroupHardTaskList, this.mapHardTaskList, tmpRoleTask.TaskList)
+
 	for _, val := range this.recTypeCnt {
 		tmpRoleTask.TypeRecCount = append(tmpRoleTask.TypeRecCount, val)
 	}
@@ -324,6 +367,73 @@ func (this *RoleTask) initTaskDataFromConfig() {
 			}
 		}
 	}
+	util.InfoF("uuid:%v init hard task1:%v", this.role.GetUUid(), this.mapHardTaskList)
+	var curId uint32
+	var bSave bool
+	if len(this.mapHardTaskList) > 0 {
+		for _, v := range this.mapHardTaskList {
+			if curId <= v.TaskId {
+				curId = v.TaskId
+			}
+		}
+	}
+	for _, val := range model.HardMissionTaskIdList {
+		//每组任务3个,目前只初始化5组所以是15个任务
+		if len(this.mapHardTaskList) >= 15 {
+			break
+		}
+		if val < curId {
+			continue
+		}
+		bSave = true
+		data := model.HardMissionTaskList[val]
+		if data != nil {
+			taskInfo := &serverproto.TaskData{
+				TaskId: data.TaskId,
+				State:  TASK_REWARD_STATE_NONE,
+				//BeginTime: util.GetTimeMilliseconds(),
+				TaskType: data.TaskType,
+			}
+			this.mapHardTaskList[data.TaskId] = taskInfo
+			this.saveTaskDataList = append(this.saveTaskDataList, taskInfo)
+		}
+	}
+	util.InfoF("uuid:%v init hard task2:%v", this.role.GetUUid(), this.mapHardTaskList)
+
+	var curGroupId uint32
+	if len(this.mapGroupHardTaskList) > 0 {
+		for _, v := range this.mapGroupHardTaskList {
+			if curGroupId <= v.TaskId {
+				curGroupId = v.TaskId
+			}
+		}
+	}
+	util.InfoF("uuid:%v init hard task group1:%v", this.role.GetUUid(), this.mapGroupHardTaskList)
+	for _, val := range model.HardGroupMissionTaskIdList {
+		//初始化5组 组任务
+		if len(this.mapGroupHardTaskList) >= 5 {
+			break
+		}
+		if val < curGroupId {
+			continue
+		}
+		bSave = true
+		data := model.HardGroupMissionTaskList[val]
+		if data != nil {
+			taskInfo := &serverproto.TaskData{
+				TaskId: data.GroupTaskId,
+				State:  TASK_REWARD_STATE_NONE,
+				//BeginTime: util.GetTimeMilliseconds(),
+				TaskType: data.TaskType,
+			}
+			this.mapGroupHardTaskList[data.GroupTaskId] = taskInfo
+			this.saveTaskDataList = append(this.saveTaskDataList, taskInfo)
+		}
+	}
+	if bSave {
+		this.SetDirty(true)
+	}
+	util.InfoF("uuid:%v init hard task group2:%v", this.role.GetUUid(), this.mapGroupHardTaskList)
 }
 
 func (this *RoleTask) getTaskData(taskId uint32) *serverproto.TaskData {
@@ -336,6 +446,33 @@ func (this *RoleTask) getTaskData(taskId uint32) *serverproto.TaskData {
 	if taskInfo, ok := this.mainTaskList[taskId]; ok {
 		return taskInfo
 	}
+	//if taskInfo, ok := this.mapHardTaskList[taskId]; ok {
+	//	return taskInfo
+	//}
+	return nil
+}
+
+func (this *RoleTask) getTaskHardAllData(taskId uint32) *serverproto.TaskData {
+	if taskInfo, ok := this.mapHardTaskList[taskId]; ok {
+		return taskInfo
+	}
+	if taskInfo, ok := this.mapGroupHardTaskList[taskId]; ok {
+		return taskInfo
+	}
+	return nil
+}
+
+func (this *RoleTask) getTaskHardData(taskId uint32) *serverproto.TaskData {
+	if taskInfo, ok := this.mapHardTaskList[taskId]; ok {
+		return taskInfo
+	}
+	return nil
+}
+
+func (this *RoleTask) getGroupTaskHardData(taskId uint32) *serverproto.TaskData {
+	if taskInfo, ok := this.mapGroupHardTaskList[taskId]; ok {
+		return taskInfo
+	}
 	return nil
 }
 
@@ -384,6 +521,38 @@ func (this *RoleTask) initTaskTypeList() {
 				this.taskTypeList[key].Add(taskInfo.TaskId)
 			}
 		}
+
+		for _, taskInfo := range this.mapHardTaskList {
+			if taskInfo.State == TASK_REWARD_STATE_COMPLETED {
+				continue
+			}
+			convertData, ok := model.HardMissionTaskList[taskInfo.TaskId]
+			if !ok {
+				continue
+			}
+			for key := range convertData.Condition {
+				if _, ok := this.taskTypeList[key]; !ok {
+					this.taskTypeList[key] = set.New(set.NonThreadSafe)
+				}
+				this.taskTypeList[key].Add(taskInfo.TaskId)
+			}
+		}
+
+		for _, taskInfo := range this.mapGroupHardTaskList {
+			if taskInfo.State == TASK_REWARD_STATE_COMPLETED {
+				continue
+			}
+			convertData, ok := model.HardGroupMissionTaskList[taskInfo.TaskId]
+			if !ok {
+				continue
+			}
+			for key := range convertData.Condition {
+				if _, ok := this.taskTypeList[key]; !ok {
+					this.taskTypeList[key] = set.New(set.NonThreadSafe)
+				}
+				this.taskTypeList[key].Add(taskInfo.TaskId)
+			}
+		}
 	}
 }
 
@@ -400,26 +569,72 @@ func (this *RoleTask) TaskCheck(taskType serverproto.TaskType, count int32) {
 	}
 	for _, val := range this.taskTypeList[int32(taskType)].List() {
 		tmpTaskId := val.(uint32)
-		if taskInfo := this.getTaskData(tmpTaskId); taskInfo != nil {
-			convertTaskData, ok := model.ConvertTaskList[taskInfo.TaskId]
-			if !ok {
-				util.ErrorF("uid=%v TaskCheck TaskCfgData not exist", this.role.GetUUid(), taskInfo)
-				continue
-			}
-			if taskInfo.State != TASK_REWARD_STATE_COMPLETED &&
-				taskInfo.State != TASK_REWARD_STATE_REWARD {
-				util.InfoF("uid=%v TaskCheck before taskInfo=%v", this.role.GetUUid(), taskInfo)
+		if taskType == serverproto.TaskType_Level_Hard_Battle_Count {
+			if taskInfo := this.getTaskHardAllData(tmpTaskId); taskInfo != nil {
+				if taskInfo.TaskType == model.TASK_TYPE_HARD {
+					convertTaskData, ok := model.HardMissionTaskList[taskInfo.TaskId]
+					if !ok {
+						util.ErrorF("uid=%v TaskCheck TaskCfgData not exist", this.role.GetUUid(), taskInfo)
+						continue
+					}
+					if taskInfo.State != TASK_REWARD_STATE_COMPLETED &&
+						taskInfo.State != TASK_REWARD_STATE_REWARD {
+						util.InfoF("uid=%v TaskCheck before taskInfo=%v", this.role.GetUUid(), taskInfo)
+					}
+					//多条件处理
+					ret := TaskConditionCheck(this.role, taskInfo, taskType, convertTaskData.Condition, count, false)
+					if ret {
+						this.saveTaskDataList = append(this.saveTaskDataList, taskInfo)
+						ntfMsg.TaskChangeList = append(ntfMsg.TaskChangeList, taskInfo)
+
+						this.SetDirty(true)
+					}
+				} else if taskInfo.TaskType == model.TASK_TYPE_HARD_GROUP {
+					convertTaskData, ok := model.HardGroupMissionTaskList[taskInfo.TaskId]
+					if !ok {
+						util.ErrorF("uid=%v TaskCheck TaskCfgData not exist", this.role.GetUUid(), taskInfo)
+						continue
+					}
+					if taskInfo.State != TASK_REWARD_STATE_COMPLETED &&
+						taskInfo.State != TASK_REWARD_STATE_REWARD {
+						util.InfoF("uid=%v TaskCheck before taskInfo=%v", this.role.GetUUid(), taskInfo)
+					}
+					//多条件处理
+					ret := TaskConditionCheck(this.role, taskInfo, taskType, convertTaskData.Condition, count, false)
+					if ret {
+						this.saveTaskDataList = append(this.saveTaskDataList, taskInfo)
+						ntfMsg.TaskChangeList = append(ntfMsg.TaskChangeList, taskInfo)
+
+						this.SetDirty(true)
+					}
+				}
 			}
-			//多条件处理
-			ret := TaskConditionCheck(this.role, taskInfo, taskType, convertTaskData.Condition, count, false)
-			if ret {
-				this.saveTaskDataList = append(this.saveTaskDataList, taskInfo)
-				ntfMsg.TaskChangeList = append(ntfMsg.TaskChangeList, taskInfo)
+		} else {
+			if taskInfo := this.getTaskData(tmpTaskId); taskInfo != nil {
+				convertTaskData, ok := model.ConvertTaskList[taskInfo.TaskId]
+				if !ok {
+					util.ErrorF("uid=%v TaskCheck TaskCfgData not exist", this.role.GetUUid(), taskInfo)
+					continue
+				}
+				if taskInfo.State != TASK_REWARD_STATE_COMPLETED &&
+					taskInfo.State != TASK_REWARD_STATE_REWARD {
+					util.InfoF("uid=%v TaskCheck before taskInfo=%v", this.role.GetUUid(), taskInfo)
+				}
+				//多条件处理
+				ret := TaskConditionCheck(this.role, taskInfo, taskType, convertTaskData.Condition, count, false)
+				if ret {
+					this.saveTaskDataList = append(this.saveTaskDataList, taskInfo)
+					ntfMsg.TaskChangeList = append(ntfMsg.TaskChangeList, taskInfo)
 
-				this.SetDirty(true)
+					this.SetDirty(true)
+				}
 			}
 		}
 	}
+	//追加困难模式任务
+	if taskType == serverproto.TaskType_Level_Hard_Battle_Count {
+		this.AddHardTask()
+	}
 	if len(ntfMsg.TaskChangeList) > 0 {
 		this.role.ReplayGate(ntfMsg, true)
 		util.InfoF("uid=%v TaskCheck changelist=%v", this.role.GetUUid(), ntfMsg.TaskChangeList)
@@ -558,10 +773,149 @@ func (this *RoleTask) GetTaskReward(taskId uint32) serverproto.ErrorCode {
 	return serverproto.ErrorCode_ERROR_OK
 }
 
+func (this *RoleTask) AddHardTask() bool {
+	var (
+		count2     int32  //未完成任务组数量
+		maxGroupId uint32 //最后一组 组id
+		//ggId       uint32
+	)
+
+	for _, v := range this.mapGroupHardTaskList {
+		if v.State == TASK_REWARD_STATE_NONE {
+			count2++
+			//if maxGroupId < v.TaskId {
+			//	maxGroupId = v.TaskId
+			//}
+			break
+		}
+		if maxGroupId < v.TaskId {
+			maxGroupId = v.TaskId
+		}
+	}
+
+	if count2 < 1 {
+		////一下全部完成了任务
+		//if maxGroupId == 0 {
+		//	maxGroupId = ggId
+		//}
+		var (
+			count3 int32
+			count4 int32
+			maxId  uint32 //最后一个小任务id
+		)
+		if v, ok := model.HardGroupMissionTaskList[maxGroupId]; ok {
+			maxId = v.TaskId
+		}
+		ntfMsg := &serverproto.SCTaskChangeNtf{
+			DailyTaskScore: &this.dailyTaskScore,
+			WeekTaskScore:  &this.weekTaskScore,
+		}
+		for _, val := range model.HardGroupMissionTaskIdList {
+			//初始化5组 组任务
+			if count3 >= 5 {
+				break
+			}
+			if val <= maxGroupId {
+				continue
+			}
+			data := model.HardGroupMissionTaskList[val]
+			if data != nil {
+				taskInfo := &serverproto.TaskData{
+					TaskId: data.GroupTaskId,
+					State:  TASK_REWARD_STATE_NONE,
+					//BeginTime: util.GetTimeMilliseconds(),
+					TaskType: data.TaskType,
+				}
+				passNum := this.role.GetRoleBattle().GetPassHardBattleIdNum(data.Condition[int32(serverproto.TaskType_Level_Hard_Battle_Count)][1])
+				if passNum == 1 {
+					taskInfo.State = TASK_REWARD_STATE_COMPLETED
+					taskInfo.Progress = []*serverproto.TaskProgressType{{Key: 102, Value: 1, State: 1}}
+				}
+				this.mapGroupHardTaskList[data.GroupTaskId] = taskInfo
+				//role.roleTask.loadTaskData.TaskList = append(role.roleTask.loadTaskData.TaskList, taskInfo)
+				this.saveTaskDataList = append(this.saveTaskDataList, taskInfo)
+				ntfMsg.TaskChangeList = append(ntfMsg.TaskChangeList, taskInfo)
+				util.InfoF("add task gg:%v", taskInfo)
+				count3++
+			}
+		}
+		for _, val := range model.HardMissionTaskIdList {
+			//每组任务3个,目前只初始化5组所以是15个任务
+			if count4 >= 15 {
+				break
+			}
+			if val <= maxId {
+				continue
+			}
+			data := model.HardMissionTaskList[val]
+			if data != nil {
+				taskInfo := &serverproto.TaskData{
+					TaskId: data.TaskId,
+					State:  TASK_REWARD_STATE_NONE,
+					//BeginTime: util.GetTimeMilliseconds(),
+					TaskType: data.TaskType,
+				}
+				passNum := this.role.GetRoleBattle().GetPassHardBattleIdNum(data.Condition[int32(serverproto.TaskType_Level_Hard_Battle_Count)][1])
+				if passNum == 1 {
+					taskInfo.State = TASK_REWARD_STATE_COMPLETED
+					taskInfo.Progress = []*serverproto.TaskProgressType{{Key: 102, Value: 1, State: 1}}
+				}
+				this.mapHardTaskList[data.TaskId] = taskInfo
+				//this.loadTaskData.TaskList = append(this.loadTaskData.TaskList, taskInfo)
+				this.saveTaskDataList = append(this.saveTaskDataList, taskInfo)
+				ntfMsg.TaskChangeList = append(ntfMsg.TaskChangeList, taskInfo)
+				util.InfoF("add task gg2:%v", taskInfo)
+				count4++
+			}
+		}
+		for _, taskInfo := range this.mapHardTaskList {
+			if taskInfo.State == TASK_REWARD_STATE_COMPLETED {
+				continue
+			}
+			convertData, ok := model.HardMissionTaskList[taskInfo.TaskId]
+			if !ok {
+				continue
+			}
+			for key := range convertData.Condition {
+				if _, ok := this.taskTypeList[key]; !ok {
+					this.taskTypeList[key] = set.New(set.NonThreadSafe)
+				}
+				this.taskTypeList[key].Add(taskInfo.TaskId)
+			}
+		}
+
+		for _, taskInfo := range this.mapGroupHardTaskList {
+			if taskInfo.State == TASK_REWARD_STATE_COMPLETED {
+				continue
+			}
+			convertData, ok := model.HardGroupMissionTaskList[taskInfo.TaskId]
+			if !ok {
+				continue
+			}
+			for key := range convertData.Condition {
+				if _, ok := this.taskTypeList[key]; !ok {
+					this.taskTypeList[key] = set.New(set.NonThreadSafe)
+				}
+				this.taskTypeList[key].Add(taskInfo.TaskId)
+			}
+		}
+
+		this.role.ReplayGate(ntfMsg, true)
+		this.role.roleTask.SetDirty(true)
+		util.InfoF("uuid:%v add start hard group taskId:%v  little taskId:%v task info:%v  group info:%v", this.role.GetUUid(), maxGroupId, maxId, this.role.roleTask.mapHardTaskList, this.role.roleTask.mapGroupHardTaskList)
+		if len(ntfMsg.TaskChangeList) > 0 {
+			return true
+		} else {
+			return false
+		}
+	}
+	return false
+}
+
 func (this *RoleTask) GetTaskScoreReward(rewardType, rewardIdx uint32) serverproto.ErrorCode {
 	this.initTaskTypeList()
 
-	if rewardIdx <= 0 || rewardIdx > 32 {
+	if (rewardIdx <= 0 || rewardIdx > 32) && rewardType != model.TASK_TYPE_HARD && rewardType != model.TASK_TYPE_HARD_GROUP {
 		return serverproto.ErrorCode_ERROR_FAIL
 	}
 
@@ -627,6 +981,56 @@ func (this *RoleTask) GetTaskScoreReward(rewardType, rewardIdx uint32) serverpro
 
 		this.weekTaskScore.Key |= 1 << rewardIdx
 		this.SetDirty(true)
+	} else if rewardType == model.TASK_TYPE_HARD {
+		taskInfo := this.getTaskHardData(rewardIdx)
+		if taskInfo == nil {
+			return serverproto.ErrorCode_ERROR_FAIL
+		}
+		if taskInfo.State == TASK_REWARD_STATE_REWARD || taskInfo.State == TASK_REWARD_STATE_NONE {
+			return serverproto.ErrorCode_ERROR_TASK_REWARDED
+		}
+		convertData, ok := model.HardMissionTaskList[rewardIdx]
+		if !ok {
+			return serverproto.ErrorCode_ERROR_ROLE_TASK_SCORE_NOT_FOUND
+		}
+		for _, value := range convertData.TaskReward {
+			addItemList[value.Key] = value.Value
+		}
+		if ret := this.role.CanAddItemList(addItemList); ret != serverproto.ErrorCode_ERROR_OK {
+			return ret
+		}
+		taskInfo.State = TASK_REWARD_STATE_REWARD
+	} else if rewardType == model.TASK_TYPE_HARD_GROUP {
+		taskInfo := this.getGroupTaskHardData(rewardIdx)
+		if taskInfo == nil {
+			return serverproto.ErrorCode_ERROR_FAIL
+		}
+		if taskInfo.State == TASK_REWARD_STATE_REWARD || taskInfo.State == TASK_REWARD_STATE_NONE {
+			return serverproto.ErrorCode_ERROR_TASK_REWARDED
+		}
+		convertData, ok := model.HardGroupMissionTaskList[rewardIdx]
+		if !ok {
+			return serverproto.ErrorCode_ERROR_ROLE_TASK_SCORE_NOT_FOUND
+		}
+		//没找到这组的奖励
+		if len(convertData.GroupTaskReward) == 0 {
+			for _, v := range model.HardMissionTaskList {
+				if v.GroupTaskId == convertData.GroupTaskId {
+					if len(v.GroupTaskReward) != 0 {
+						convertData.GroupTaskReward = v.GroupTaskReward
+						break
+					}
+				}
+			}
+		}
+		for _, value := range convertData.GroupTaskReward {
+			addItemList[value.Key] = value.Value
+		}
+		if ret := this.role.CanAddItemList(addItemList); ret != serverproto.ErrorCode_ERROR_OK {
+			return ret
+		}
+		taskInfo.State = TASK_REWARD_STATE_REWARD
+
 	}
 	for key, val := range addItemList {
 		ackMsg.ItemList = append(ackMsg.ItemList, &serverproto.KeyValueType{
@@ -639,8 +1043,19 @@ func (this *RoleTask) GetTaskScoreReward(rewardType, rewardIdx uint32) serverpro
 		DailyTaskScore: &this.dailyTaskScore,
 		WeekTaskScore:  &this.weekTaskScore,
 	}
+	if rewardType == model.TASK_TYPE_HARD {
+		ntfMsg.TaskChangeList = append(ntfMsg.TaskChangeList, this.getTaskHardData(rewardIdx))
+	}
+	if rewardType == model.TASK_TYPE_HARD_GROUP {
+		ntfMsg.TaskChangeList = append(ntfMsg.TaskChangeList, this.getGroupTaskHardData(rewardIdx))
+	}
 	this.role.ReplayGate(ntfMsg, true)
-
+	if rewardType == model.TASK_TYPE_HARD {
+		this.CheckHardTaskAndDelete(rewardIdx)
+	}
+	if rewardType == model.TASK_TYPE_HARD_GROUP {
+		this.CheckHardGroupTaskAndDelete(rewardIdx)
+	}
 	this.role.AddItemList(addItemList, AddFrom_Task, true)
 	this.role.ReplayGate(ackMsg, true)
 
@@ -649,6 +1064,89 @@ func (this *RoleTask) GetTaskScoreReward(rewardType, rewardIdx uint32) serverpro
 	return serverproto.ErrorCode_ERROR_OK
 }
 
+func (this *RoleTask) CheckHardGroupTaskAndDelete(groupTaskId uint32) {
+	groupTask := this.getGroupTaskHardData(groupTaskId)
+	isDelete := true
+	list := make([]uint32, 0)
+	for _, v := range this.mapHardTaskList {
+		if v2, ok := model.HardMissionTaskList[v.TaskId]; ok {
+			if v2.GroupTaskId == groupTask.TaskId {
+				list = append(list, v.TaskId)
+				if v.State != TASK_REWARD_STATE_REWARD {
+					isDelete = false
+					break
+				}
+			}
+		}
+	}
+	if isDelete {
+		//最后一组任务删除前新增任务
+		if len(this.mapGroupHardTaskList) == 1 {
+			if !this.AddHardTask() {
+				return
+			}
+
+		}
+		for _, v := range list {
+			this.saveTaskDataList = append(this.saveTaskDataList, this.getTaskHardData(v))
+			delete(this.mapHardTaskList, v)
+		}
+		this.saveTaskDataList = append(this.saveTaskDataList, this.getGroupTaskHardData(groupTaskId))
+		this.SetDirty(true)
+		delete(this.mapGroupHardTaskList, groupTaskId)
+		util.InfoF("uuid:%v delete groupId:%v saveTask:%v ", this.role.GetUUid(), groupTaskId, this.saveTaskDataList)
+	}
+}
+
+func (this *RoleTask) CheckHardTaskAndDelete(TaskId uint32) {
+
+	var (
+		groupId     uint32
+		isOver      bool
+		isGroupOver bool
+	)
+	list := make([]uint32, 0)
+	if g, ok := model.HardMissionTaskList[TaskId]; ok {
+		groupId = g.GroupTaskId
+	}
+	if v, ok := this.mapGroupHardTaskList[groupId]; ok {
+		if v.State != TASK_REWARD_STATE_REWARD {
+			isGroupOver = true
+		}
+	}
+	for _, v := range this.mapHardTaskList {
+		if v2, ok := model.HardMissionTaskList[v.TaskId]; ok {
+			if v2.GroupTaskId == groupId {
+				list = append(list, v.TaskId)
+				if v.State != TASK_REWARD_STATE_REWARD {
+					isOver = true
+					break
+				}
+			}
+		}
+	}
+	if !isOver && !isGroupOver {
+		//for _, v := range list {
+		//	delete(this.mapHardTaskList, v)
+		//}
+		//delete(this.mapGroupHardTaskList, groupId)
+		//最后一组任务不删除
+		if len(this.mapGroupHardTaskList) == 1 {
+			if !this.AddHardTask() {
+				return
+			}
+		}
+		for _, v := range list {
+			this.saveTaskDataList = append(this.saveTaskDataList, this.getTaskHardData(v))
+			delete(this.mapHardTaskList, v)
+		}
+		this.saveTaskDataList = append(this.saveTaskDataList, this.getGroupTaskHardData(groupId))
+		delete(this.mapGroupHardTaskList, groupId)
+		this.SetDirty(true)
+		util.InfoF("uuid:%v delete groupId2:%v hard task:%v ", this.role.GetUUid(), groupId, list)
+	}
+}
+
 // 来自上一个任务的继承数值preTaskCount
 func (this *RoleTask) genNextTask(nextTaskId uint32, preTaskCount int32) *serverproto.TaskData {
 	convertTaskData, ok := model.ConvertTaskList[nextTaskId]

+ 9 - 0
RO_Server_Trunk-branch_0.1.39/roserver/game/model/task_manager.go

@@ -174,6 +174,15 @@ func conditionCheck(role *Role, taskData *serverproto.TaskData, taskType serverp
 		passNum := role.GetRoleBattle().GetPassBattleIdNum(passBattleId)
 		return changeTaskProgressSet(&taskData.Progress, passNum, int32(taskType), targetNum)
 
+	case serverproto.TaskType_Level_Hard_Battle_Count:
+		passBattleId := conditionList[1]
+		var targetNum int32 = 1
+		if len(conditionList) >= 3 {
+			targetNum = conditionList[2]
+		}
+		//todo...关卡通关次数会在battle结构中做记录
+		passNum := role.GetRoleBattle().GetPassHardBattleIdNum(passBattleId)
+		return changeTaskProgressSet(&taskData.Progress, passNum, int32(taskType), targetNum)
 		// 总战力达到指定数值
 	case serverproto.TaskType_Total_Power:
 		targetNum := conditionList[1]

+ 8 - 1
RO_Server_Trunk-branch_0.1.39/roserver/game/msg/gm_msg.go

@@ -128,7 +128,14 @@ func init() {
 				mapId, _ := model.Str2Num(cmdList[1])
 				levelId, _ := model.Str2Num(cmdList[2])
 
-				roleOuter.(*model2.Role).GetRoleBattle().GMSetMapLevel(uint32(mapId), uint32(levelId))
+				roleOuter.(*model2.Role).GetRoleBattle().GMSetMapLevel(uint32(mapId), uint32(levelId), false)
+			}
+		case "sethardmap": //设置挑战到的关卡,关卡相关的其他数据不做处理
+			if len(cmdList) >= 3 {
+				mapId, _ := model.Str2Num(cmdList[1])
+				levelId, _ := model.Str2Num(cmdList[2])
+
+				roleOuter.(*model2.Role).GetRoleBattle().GMSetMapLevel(uint32(mapId), uint32(levelId), true)
 			}
 		case "signup":
 			if len(cmdList) >= 2 {

+ 1 - 0
RO_Server_Trunk-branch_0.1.39/roserver/game/msg/login_msg.go

@@ -65,6 +65,7 @@ func init() {
 		role.SetPlatform(msg.Platform)
 		role.SetClientIP(msg.Ip)
 		role.SetSelectZone(msg.SelectZone) //客户端登陆时选择的服务器zone
+		role.SetHardFight(false)
 
 		//利用缓存数据
 		if bHas {

+ 1 - 0
RO_Server_Trunk-branch_0.1.39/roserver/game/msg/role_msg.go

@@ -1103,6 +1103,7 @@ func init() {
 		}
 		util.InfoF("uid=%v cliId=%v receive CSMapLevelTypeChangeReq msg=%v", role.GetUUid(), cliId, msg)
 		role.ReplayGate(ackMsg, true)
+		role.(*model2.Role).GetRoleBattle().SendBattleData()
 	})
 
 	//来自db的地图挑战排名更新(自身调整更新排名)

+ 26 - 29
RO_Server_Trunk-branch_0.1.39/roserver/gate/model/proc_rpc.go

@@ -1,20 +1,17 @@
 package model
 
 import (
+	"github.com/gorilla/websocket"
 	"io"
 	"net"
 	"rocommon"
 	"rocommon/rpc"
-	"rocommon/service"
 	"rocommon/socket"
 	_ "rocommon/socket/tcp"
 	"rocommon/util"
 	"roserver/baseserver/model"
 	"roserver/baseserver/router"
 	"roserver/serverproto"
-	"strings"
-
-	"github.com/gorilla/websocket"
 )
 
 // 消息解析操作
@@ -216,31 +213,31 @@ func FrontendPackageProc(msgId int, seqId uint32, flagId uint16, msgData []byte,
 		}
 	default:
 		//gm白名单处理
-		if msgId == CSPlayerGMReqMsgId && len(service.GetServiceConfig().Node.WhiteListGM) >= 0 {
-			bFind := false
-			gmIPStr := ""
-			switch t := s.Raw().(type) {
-			case net.Conn:
-				gmIPStr = t.RemoteAddr().String()
-			case *websocket.Conn:
-				gmIPStr = t.RemoteAddr().String()
-			}
-			//gmIPStr := s.Raw().(net.Conn).RemoteAddr().String()
-			for idx := 0; idx < len(service.GetServiceConfig().Node.WhiteListGM); idx++ {
-				if strings.Contains(gmIPStr, service.GetServiceConfig().Node.WhiteListGM[idx]) {
-					bFind = true
-					break
-				}
-				if strings.Contains("0.0.0.0", service.GetServiceConfig().Node.WhiteListGM[idx]) {
-					bFind = true
-					break
-				}
-			}
-			if !bFind {
-				s.Close()
-				return
-			}
-		}
+		//if msgId == CSPlayerGMReqMsgId && len(service.GetServiceConfig().Node.WhiteListGM) >= 0 {
+		//	bFind := false
+		//	gmIPStr := ""
+		//	switch t := s.Raw().(type) {
+		//	case net.Conn:
+		//		gmIPStr = t.RemoteAddr().String()
+		//	case *websocket.Conn:
+		//		gmIPStr = t.RemoteAddr().String()
+		//	}
+		//	//gmIPStr := s.Raw().(net.Conn).RemoteAddr().String()
+		//	for idx := 0; idx < len(service.GetServiceConfig().Node.WhiteListGM); idx++ {
+		//		if strings.Contains(gmIPStr, service.GetServiceConfig().Node.WhiteListGM[idx]) {
+		//			bFind = true
+		//			break
+		//		}
+		//		if strings.Contains("0.0.0.0", service.GetServiceConfig().Node.WhiteListGM[idx]) {
+		//			bFind = true
+		//			break
+		//		}
+		//	}
+		//	if !bFind {
+		//		s.Close()
+		//		return
+		//	}
+		//}
 
 		//todo...目前暂时只针对gate做了透传,后期需要对所有服务器节点都可以执行透传
 		routeRule := router.GetRuleByMsgID(msgId)

+ 114 - 12
RO_Server_Trunk-branch_0.1.39/roserver/rank/model/rank_map.go

@@ -13,7 +13,7 @@ import (
 	"time"
 )
 
-//排名前3玩家uid列表
+// 排名前3玩家uid列表
 const (
 	MAPRANK_TOP_3 = 3
 
@@ -27,10 +27,11 @@ const (
 )
 
 var MapRankTopThree []*serverproto.RankPlayerInfo
+var MapHardRankTopThree []*serverproto.RankPlayerInfo
 
-//zSet rank
-//https://www.jianshu.com/p/2cbf358b933b
-//https://www.jianshu.com/p/2cbf358b933b
+// zSet rank
+// https://www.jianshu.com/p/2cbf358b933b
+// https://www.jianshu.com/p/2cbf358b933b
 func AddMapRank(uid uint64, newMapLevel uint32, passTime uint64, recordInfo *serverproto.BattleRecordInfo) (uint32, uint32, uint64) {
 	if uid <= 0 {
 		return 0, 0, 0
@@ -82,6 +83,57 @@ func AddMapRank(uid uint64, newMapLevel uint32, passTime uint64, recordInfo *ser
 	return uint32(selfRank), uint32(rankList), recordId
 }
 
+func AddHardMapRank(uid uint64, newMapLevel uint32, passTime uint64, recordInfo *serverproto.BattleRecordInfo) (uint32, uint32, uint64) {
+	if uid <= 0 {
+		return 0, 0, 0
+	}
+
+	//score
+	scoreStr := getRankScore(uint64(newMapLevel), passTime)
+	//uid
+	keyStr := strconv.FormatUint(uid, 10)
+
+	//todo... 通过多命令方式处理
+	_, err := service.GetRedis().ZAdd(model2.MapHardRankPrefix, redis.Z{Score: float64(scoreStr), Member: keyStr}).Result()
+	if err != nil {
+		util.ErrorF("AddMapRank err=%v uid=%v", err, uid)
+		return 0, 0, 0
+	}
+
+	//util.InfoF("[AddMapRank] ret:%v %v %v", ret, scoreStr, keyStr)
+	//retRank,err1 := service.GetRedis().ZRevRange(MapRankPrefix, 0, -1).Result()
+	//if err1 == nil {
+	//	util.DebugF("[AddMapRank] rankList:%v", retRank)
+	//}
+
+	selfRank, err2 := service.GetRedis().ZRevRank(model2.MapHardRankPrefix, keyStr).Result()
+	if err2 != nil {
+		util.DebugF("AddMapRank selfRank err=%v uid=%v", err2, uid)
+		return 0, 0, 0
+	}
+	util.DebugF("AddMapRank selfRank=%v uid=%v score=%v", selfRank+1, uid, scoreStr)
+
+	rankList, err3 := service.GetRedis().ZCard(model2.MapHardRankPrefix).Result()
+	if err3 != nil {
+		util.DebugF("AddMapRank totalRanks err=%v uid=%v", err2, uid)
+		return 0, 0, 0
+	}
+	util.DebugF("AddMapRank totalRanks=%v uid=%v", rankList, uid)
+
+	////记录战斗回复记录数据(不包括战斗过程记录)
+	//recordId := battleRecord(uid, int32(selfRank), recordInfo)
+	//if recordId > 0 {
+	//	service.GetRedis().SAdd(model2.BattleRecordDetailCheckPrefix, recordId)
+	//}
+
+	//如果自己在前3名内,重新获取排名前3的玩家列表
+	if selfRank < MAPRANK_TOP_3 {
+		getTop3MapHardRank()
+	}
+
+	return uint32(selfRank), uint32(rankList), 0
+}
+
 func GetMapRank(uid uint64) (uint32, uint32) {
 	//获取排名前3的玩家列表
 	//if len(MapRankTopThree) <= 0 {
@@ -110,6 +162,34 @@ func GetMapRank(uid uint64) (uint32, uint32) {
 	return uint32(selfRank), uint32(rankList)
 }
 
+func GetMapHardRank(uid uint64) (uint32, uint32) {
+	//获取排名前3的玩家列表
+	//if len(MapRankTopThree) <= 0 {
+	//	getTop3MapRank()
+	//}
+	//暂时处理成每次重新获取,因为简介信息可能发生变化
+	getTop3MapHardRank()
+
+	//uid
+	keyStr := strconv.FormatUint(uid, 10)
+
+	selfRank, err2 := service.GetRedis().ZRevRank(model2.MapHardRankPrefix, keyStr).Result()
+	if err2 != nil {
+		util.DebugF("uid=%v GetMapRank selfRank keystr=%v err=%v", uid, model2.MapHardRankPrefix, err2)
+		return 0, 0
+	}
+	util.DebugF("uid=%v GetMapRank keystr=%v selfRank=%v", uid, model2.MapHardRankPrefix, selfRank+1)
+
+	rankList, err3 := service.GetRedis().ZCard(model2.MapHardRankPrefix).Result()
+	if err3 != nil {
+		util.DebugF("uid=%v GetMapRank keystr=%v totalRanks err=%v", uid, model2.MapHardRankPrefix, err2)
+		return 0, 0
+	}
+	util.DebugF("uid=%v GetMapRank keystr=%v totalRanks=%v", uid, model2.MapHardRankPrefix, rankList)
+
+	return uint32(selfRank), uint32(rankList)
+}
+
 func GetRankByKeyUid(KeyStr string, uid uint64, compId int32) (uint32, uint32, uint32) {
 	//uid
 	uidStr := strconv.FormatUint(uid, 10)
@@ -233,6 +313,28 @@ func getTop3MapRank() {
 	}
 }
 
+func getTop3MapHardRank() {
+	//topList,err4 := service.GetRedis().ZRevRange(MapRankPrefix, 0, MAPRANK_TOP_3 -1).Result()
+	topListWithScore, err4 := service.GetRedis().ZRevRangeWithScores(model2.MapHardRankPrefix, 0, MAPRANK_TOP_3-1).Result()
+	if err4 == nil {
+		MapHardRankTopThree = MapHardRankTopThree[:0]
+		for index, _ := range topListWithScore {
+			rankUid, _ := strconv.ParseUint(topListWithScore[index].Member.(string), 10, 64)
+			mapId, mapLevel, _ := getValByRankScore(topListWithScore[index].Score)
+			topRankPlayer := &serverproto.RankPlayerInfo{
+				Uid:      rankUid,
+				MapId:    mapId,
+				MapLevel: mapLevel,
+				Brief:    &serverproto.CommonPlayerBriefInfo{},
+			}
+
+			//获取top rank player nickName
+			model.GetSystemDataFromRedis(model.RolePlayerBriefPrefix, rankUid, topRankPlayer.Brief)
+			MapHardRankTopThree = append(MapHardRankTopThree, topRankPlayer)
+		}
+	}
+}
+
 func battleRecord(uid uint64, selfRank int32, recordInfo *serverproto.BattleRecordInfo) uint64 {
 	var retId uint64 = 0
 	if recordInfo.RecordTime <= 0 {
@@ -321,7 +423,7 @@ func newMapScoreManger() *MapScoreManger {
 	return mag
 }
 
-//1秒刷新
+// 1秒刷新
 func (this *MapScoreManger) Update(ms uint64) {
 	if service.GetRedis() == nil {
 		return
@@ -358,7 +460,7 @@ func (this *MapScoreManger) Update(ms uint64) {
 	}
 }
 
-//全服爬塔排名逻辑
+// 全服爬塔排名逻辑
 func (this *MapScoreManger) AddMapScoreRank(uid uint64, score uint32) uint32 {
 	//不在冲榜阶段
 	if this.RushStage != Rush_Map_Rank_Rush {
@@ -403,7 +505,7 @@ func (this *MapScoreManger) AddMapScoreRank(uid uint64, score uint32) uint32 {
 	return uint32(selfRank + 1)
 }
 
-//加载赛季数据
+// 加载赛季数据
 func (this *MapScoreManger) loadRushMapDataFromRedis() error {
 	keyStr := model2.RushMapPrefix
 	ret, err := service.GetRedis().Get(keyStr).Result()
@@ -495,7 +597,7 @@ func (this *MapScoreManger) saveRushMapDataToRedis() {
 	util.InfoF("saveRushMapDataToRedis save rushData success : %v", rushData)
 }
 
-//当前是否有冲榜活动
+// 当前是否有冲榜活动
 func (this *MapScoreManger) CheckInRushActivity() bool {
 	if this.RushId == 0 || (this.RushId != 0 && this.RushStage == int32(Rush_Map_Rank_End)) {
 		return false
@@ -503,7 +605,7 @@ func (this *MapScoreManger) CheckInRushActivity() bool {
 	return true
 }
 
-//是否有新的冲榜开启
+// 是否有新的冲榜开启
 func (this *MapScoreManger) CheckNewRushActivity() {
 	//如果在活动内,不做处理
 	if this.RushId != 0 && this.RushStage != int32(Rush_Map_Rank_End) {
@@ -586,7 +688,7 @@ func (this *MapScoreManger) GetRoundTime(rushId int32) (uint64, uint64, uint64)
 	return 0, 0, 0
 }
 
-//是否冲榜状态更新
+// 是否冲榜状态更新
 func (this *MapScoreManger) SwitchRushActivityState() {
 	if this.CheckInRushActivity() == false {
 		this.CheckNewRushActivity()
@@ -626,7 +728,7 @@ func (this *MapScoreManger) SwitchRushActivityState() {
 	}
 }
 
-//备份爬塔数据
+// 备份爬塔数据
 func (this *MapScoreManger) backUpMapRankData() {
 	roundStr := strconv.Itoa(int(this.RushId))
 	prefixStr := model2.RushMapRankPrefix + roundStr
@@ -762,7 +864,7 @@ func (this *MapScoreManger) SendRushMapReward() {
 	}
 }
 
-//打包冲榜信息给客户端
+// 打包冲榜信息给客户端
 func (this *MapScoreManger) GetCurRushInfo(rushMapData *serverproto.RushActivityData) {
 	if rushMapData == nil {
 		return

+ 69 - 48
RO_Server_Trunk-branch_0.1.39/roserver/rank/msg/rank_msg.go

@@ -20,29 +20,51 @@ func init() {
 			//Error:  int32(serverproto.ErrorCode_ERROR_FAIL),
 			Notify: false,
 		}
+		if msg.IsHard {
+			var selfRank uint32 = 0
+			var totalRank uint32 = 0
+			var battleRecordId uint64 = 0
+			//获取排名
+			if msg.NewMapLevelId == 0 && msg.PassTime == 0 {
+				selfRank, totalRank = rankMode.GetMapHardRank(cliId.SessID)
+				ackMsg.Notify = true
+			} else {
+				//设置排名
+				selfRank, totalRank, battleRecordId = rankMode.AddHardMapRank(cliId.SessID, msg.NewMapLevelId, msg.PassTime, msg.RecordInfo)
+				ackMsg.BattleRecordId = battleRecordId
+				ackMsg.RecordTimeStamp = msg.RecordInfo.RecordTime
+			}
 
-		var selfRank uint32 = 0
-		var totalRank uint32 = 0
-		var battleRecordId uint64 = 0
-		//获取排名
-		if msg.NewMapLevelId == 0 && msg.PassTime == 0 {
-			selfRank, totalRank = rankMode.GetMapRank(cliId.SessID)
-			ackMsg.Notify = true
+			if totalRank > 0 {
+				ackMsg.Error = int32(serverproto.ErrorCode_ERROR_OK)
+				ackMsg.Rank = selfRank + 1
+			}
+			ackMsg.RankPlayers = totalRank
+			ackMsg.TopPlayerList = append(rankMode.MapHardRankTopThree)
 		} else {
-			//设置排名
-			selfRank, totalRank, battleRecordId = rankMode.AddMapRank(cliId.SessID, msg.NewMapLevelId, msg.PassTime, msg.RecordInfo)
-			ackMsg.BattleRecordId = battleRecordId
-			ackMsg.RecordTimeStamp = msg.RecordInfo.RecordTime
-		}
+			var selfRank uint32 = 0
+			var totalRank uint32 = 0
+			var battleRecordId uint64 = 0
+			//获取排名
+			if msg.NewMapLevelId == 0 && msg.PassTime == 0 {
+				selfRank, totalRank = rankMode.GetMapRank(cliId.SessID)
+				ackMsg.Notify = true
+			} else {
+				//设置排名
+				selfRank, totalRank, battleRecordId = rankMode.AddMapRank(cliId.SessID, msg.NewMapLevelId, msg.PassTime, msg.RecordInfo)
+				ackMsg.BattleRecordId = battleRecordId
+				ackMsg.RecordTimeStamp = msg.RecordInfo.RecordTime
+			}
 
-		if totalRank > 0 {
-			ackMsg.Error = int32(serverproto.ErrorCode_ERROR_OK)
-			ackMsg.Rank = selfRank + 1
+			if totalRank > 0 {
+				ackMsg.Error = int32(serverproto.ErrorCode_ERROR_OK)
+				ackMsg.Rank = selfRank + 1
+			}
+			ackMsg.RankPlayers = totalRank
+			ackMsg.TopPlayerList = append(rankMode.MapRankTopThree)
 		}
-		ackMsg.RankPlayers = totalRank
-		ackMsg.TopPlayerList = append(rankMode.MapRankTopThree)
 
-		util.DebugF("SSMapLevelChangeReq ackMsg=%v uid=%v newmaplevel=%v selfRank=%v", ackMsg, cliId.SessID, msg.NewMapLevelId, selfRank)
+		util.DebugF("SSMapLevelChangeReq ackMsg=%v uid=%v newmaplevel=%v selfRank=%v", ackMsg, cliId.SessID, msg.NewMapLevelId, ackMsg.Rank)
 		model.ServiceReplay(ev, ackMsg)
 	})
 
@@ -433,7 +455,7 @@ func init() {
 		}
 		if msg.RushType == model.Rush_Type_Tower {
 			rankMode.TowerMag.GetRushTowerReward(ackMsg, msg.RewardType)
-		}  else if msg.RushType == model.Rush_Type_Arena {
+		} else if msg.RushType == model.Rush_Type_Arena {
 			rankMode.ArenaMag.GetRushArenaReward(ackMsg, msg.RewardType)
 		} else if msg.RushType == model.Rush_Type_Map {
 			rankMode.MapScoreMag.GetRushMapReward(ackMsg, msg.RewardType)
@@ -545,11 +567,11 @@ func init() {
 		util.DebugF("uid=%v receive SSGetRushRankRewardReq msg=%v", cliId.SessID, msg)
 
 		ackMsg := &serverproto.SSGetRushRankRewardAck{
-			Uid:      msg.Uid,
+			Uid: msg.Uid,
 		}
 		for _, data := range msg.RushData {
 			reward := &serverproto.RankRewardList{
-				RushType:data.Key,
+				RushType: data.Key,
 			}
 			if data.Key == model.Rush_Type_Tower {
 				rankMode.TowerMag.GetRushReward(msg.Uid, data.Value, reward)
@@ -570,28 +592,28 @@ func init() {
 
 	//主动领取排名奖励请求
 	/*
-	serverproto.Handle_RANK_SSGetRushRankReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
-		msg := ev.Msg().(*serverproto.SSGetRushRankReq)
-		util.DebugF("uid=%v receive SSGetRushRankReq msg=%v", cliId.SessID, msg)
+		serverproto.Handle_RANK_SSGetRushRankReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
+			msg := ev.Msg().(*serverproto.SSGetRushRankReq)
+			util.DebugF("uid=%v receive SSGetRushRankReq msg=%v", cliId.SessID, msg)
 
-		ackMsg := &serverproto.SSGetRushRankAck{
-			Uid:      msg.Uid,
-			RushType: msg.RushType,
-		}
-		if msg.RushType == model.Rush_Type_Tower {
-			rankMode.TowerMag.GetRushReward(msg.Uid, msg.RushRound, ackMsg)
-		} else if msg.RushType == model.Rush_Type_Arena {
-			rankMode.ArenaMag.GetRushReward(msg.Uid, msg.RushRound, ackMsg)
-		} else if msg.RushType == model.Rush_Type_Map {
-			rankMode.MapScoreMag.GetRushReward(msg.Uid, msg.RushRound, ackMsg)
-		} else if msg.RushType == model.Rush_Type_Pet {
-			rankMode.PetRankMag.GetRushReward(msg.Uid, msg.RushRound, ackMsg)
-		} else if msg.RushType == model.Rush_Type_Skill {
-			rankMode.SkillRankMag.GetRushReward(msg.Uid, msg.RushRound, ackMsg)
-		}
-		model.ServiceReplay(ev, ackMsg)
-	})
-	 */
+			ackMsg := &serverproto.SSGetRushRankAck{
+				Uid:      msg.Uid,
+				RushType: msg.RushType,
+			}
+			if msg.RushType == model.Rush_Type_Tower {
+				rankMode.TowerMag.GetRushReward(msg.Uid, msg.RushRound, ackMsg)
+			} else if msg.RushType == model.Rush_Type_Arena {
+				rankMode.ArenaMag.GetRushReward(msg.Uid, msg.RushRound, ackMsg)
+			} else if msg.RushType == model.Rush_Type_Map {
+				rankMode.MapScoreMag.GetRushReward(msg.Uid, msg.RushRound, ackMsg)
+			} else if msg.RushType == model.Rush_Type_Pet {
+				rankMode.PetRankMag.GetRushReward(msg.Uid, msg.RushRound, ackMsg)
+			} else if msg.RushType == model.Rush_Type_Skill {
+				rankMode.SkillRankMag.GetRushReward(msg.Uid, msg.RushRound, ackMsg)
+			}
+			model.ServiceReplay(ev, ackMsg)
+		})
+	*/
 
 	//主动领取排名奖励请求
 	serverproto.Handle_RANK_SSTestRushRankRewardNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
@@ -602,7 +624,7 @@ func init() {
 			rankMode.TowerMag.SendRushTowerReward()
 		} else if msg.RushType == model.Rush_Type_Arena {
 			rankMode.ArenaMag.SendRushArenaReward()
-		} else if msg.RushType == model.Rush_Type_Map{
+		} else if msg.RushType == model.Rush_Type_Map {
 			rankMode.MapScoreMag.SendRushMapReward()
 		} else if msg.RushType == model.Rush_Type_Pet {
 			rankMode.PetRankMag.SendRushPetReward()
@@ -668,7 +690,6 @@ func init() {
 		model.ServiceReplay(ev, ssAckMsg)
 	})
 
-
 	//更新宠物战力排行榜,更新上阵宠物
 	serverproto.Handle_RANK_SSRushPetInfoChangeNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
 		msg := ev.Msg().(*serverproto.SSRushPetInfoChangeNtf)
@@ -682,7 +703,7 @@ func init() {
 		msg := ev.Msg().(*serverproto.CSPetActivityRankReq)
 		util.DebugF("uid=%v receive CSPetActivityRankReq msg=%v", cliId.SessID, msg)
 
-		ackMsg := &serverproto.SCPetActivityRankAck {
+		ackMsg := &serverproto.SCPetActivityRankAck{
 			Error: int32(serverproto.ErrorCode_ERROR_FAIL),
 			Page:  msg.Page,
 		}
@@ -705,7 +726,7 @@ func init() {
 		msg := ev.Msg().(*serverproto.CSRushSkillActivityRankReq)
 		util.DebugF("uid=%v receive CSRushSkillActivityRankReq msg=%v", cliId.SessID, msg)
 
-		ackMsg := &serverproto.SCRushSkillActivityRankAck {
+		ackMsg := &serverproto.SCRushSkillActivityRankAck{
 			Error: int32(serverproto.ErrorCode_ERROR_FAIL),
 			Page:  msg.Page,
 		}
@@ -720,9 +741,9 @@ func init() {
 		msg := ev.Msg().(*serverproto.SSCompetitionSelfFansInfoReq)
 		util.DebugF("uid=%v receive SSCompetitionSelfFansInfoReq msg=%v", cliId.SessID, msg)
 
-		ackMsg := &serverproto.SSCompetitionSelfFansInfoAck {
+		ackMsg := &serverproto.SSCompetitionSelfFansInfoAck{
 			Error: int32(serverproto.ErrorCode_ERROR_FAIL),
-			Uid: msg.Uid,
+			Uid:   msg.Uid,
 		}
 
 		ackMsg.Error = int32(rankMode.CompetitionMag.GetSelfFansInfo(msg.Uid, msg.CompetitionId, ackMsg))

+ 244 - 240
RO_Server_Trunk-branch_0.1.39/roserver/serverproto/common.pb.go

@@ -315,6 +315,7 @@ const (
 	TaskType_Eve_Arean_First_Cnt           TaskType = 96
 	TaskType_BT_ZhenJiaRecharge            TaskType = 100
 	TaskType_BT_ROCoinRecharge             TaskType = 101
+	TaskType_Level_Hard_Battle_Count       TaskType = 102
 )
 
 var TaskType_name = map[int32]string{
@@ -410,6 +411,7 @@ var TaskType_name = map[int32]string{
 	96:  "Eve_Arean_First_Cnt",
 	100: "BT_ZhenJiaRecharge",
 	101: "BT_ROCoinRecharge",
+	102: "Level_Hard_Battle_Count",
 }
 
 var TaskType_value = map[string]int32{
@@ -505,6 +507,7 @@ var TaskType_value = map[string]int32{
 	"Eve_Arean_First_Cnt":           96,
 	"BT_ZhenJiaRecharge":            100,
 	"BT_ROCoinRecharge":             101,
+	"Level_Hard_Battle_Count":       102,
 }
 
 func (x TaskType) String() string {
@@ -2564,13 +2567,13 @@ func init() {
 }
 
 var fileDescriptor_555bd8c177793206 = []byte{
-	// 6216 bytes of a gzipped FileDescriptorProto
+	// 6226 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x7b, 0x79, 0x90, 0x63, 0xc9,
 	0x51, 0xb7, 0xa5, 0xbe, 0xab, 0xaf, 0xea, 0xd7, 0xdd, 0x33, 0x9a, 0xfb, 0xda, 0xd9, 0x99, 0xe9,
 	0xdd, 0x9d, 0x9d, 0x99, 0xdd, 0xf5, 0xf1, 0xad, 0xaf, 0x96, 0xfa, 0xdc, 0x69, 0x75, 0x6b, 0xa5,
 	0xee, 0x1e, 0xef, 0xfa, 0x78, 0xae, 0x96, 0x4a, 0x52, 0x59, 0x4f, 0xef, 0x69, 0xdf, 0x2b, 0x69,
-	0x5a, 0xdf, 0xf7, 0xcf, 0xf7, 0x7d, 0xe1, 0x7f, 0x30, 0xb6, 0x03, 0x8c, 0x09, 0x8c, 0x03, 0x9b,
-	0x3f, 0x38, 0x22, 0x0c, 0x86, 0x08, 0xc0, 0x5c, 0x81, 0x89, 0xc0, 0x36, 0xb6, 0xb1, 0x83, 0xb0,
+	0x5a, 0xdf, 0xf7, 0xcf, 0xf7, 0x7d, 0xe1, 0x7f, 0x30, 0xb6, 0x03, 0x0c, 0x04, 0xc6, 0x81, 0xcd,
+	0x1f, 0x1c, 0x11, 0x06, 0x43, 0x84, 0xc1, 0x5c, 0x81, 0x89, 0xc0, 0x36, 0xb6, 0xb1, 0x83, 0xb0,
 	0x0d, 0x06, 0x6c, 0xc0, 0xd8, 0xc6, 0x18, 0x0c, 0x06, 0x0c, 0x7f, 0x10, 0x41, 0x10, 0x9c, 0x91,
 	0x59, 0x55, 0x4f, 0xf5, 0x24, 0xb5, 0xf7, 0x2f, 0xe9, 0x65, 0xfe, 0x2a, 0x2b, 0x2b, 0x33, 0x2b,
 	0x33, 0xeb, 0x1d, 0x64, 0xa6, 0x1c, 0x34, 0x9b, 0x81, 0x7f, 0xbb, 0x15, 0x06, 0x32, 0x70, 0xa6,
@@ -2612,7 +2615,7 @@ var fileDescriptor_555bd8c177793206 = []byte{
 	0xce, 0x32, 0x5f, 0x0a, 0x77, 0xf8, 0xc0, 0xd7, 0xe1, 0xc0, 0xd3, 0x80, 0xd8, 0x1d, 0x32, 0x78,
 	0x8b, 0x2c, 0xc8, 0x50, 0xd4, 0x6a, 0x3c, 0x74, 0x8f, 0xda, 0xd5, 0xaa, 0xeb, 0x89, 0x48, 0x66,
 	0x5e, 0x7f, 0x79, 0xe4, 0xe6, 0xf4, 0xbd, 0xf3, 0xb7, 0xad, 0x04, 0x7a, 0x7b, 0x5f, 0xa1, 0xb2,
-	0xed, 0x6a, 0x75, 0x8d, 0x49, 0x56, 0x9c, 0x97, 0x3d, 0xc2, 0x8e, 0x88, 0xe4, 0xd5, 0x5f, 0x48,
+	0xed, 0x6a, 0x75, 0x8d, 0x49, 0x56, 0x9c, 0x97, 0x3d, 0xc2, 0x8e, 0x88, 0xe4, 0xd5, 0x5f, 0x4c,
 	0x91, 0xf9, 0x3e, 0x10, 0xa4, 0x0a, 0x90, 0xba, 0xad, 0x32, 0xeb, 0x6c, 0x51, 0x5f, 0xc1, 0x1e,
 	0x36, 0xb3, 0x62, 0x18, 0xea, 0x4c, 0x37, 0xa3, 0x89, 0x45, 0xa0, 0x41, 0x5a, 0x2a, 0x57, 0x74,
 	0xc6, 0x4b, 0x97, 0x2b, 0xb0, 0x0b, 0xcd, 0x20, 0xd9, 0x6d, 0x71, 0xcc, 0x7c, 0x63, 0xc5, 0x69,
@@ -2663,7 +2666,7 @@ var fileDescriptor_555bd8c177793206 = []byte{
 	0x95, 0xc0, 0x2b, 0x71, 0x16, 0x05, 0x3e, 0xbd, 0x67, 0x0c, 0xfe, 0x40, 0x44, 0xf5, 0x6c, 0x70,
 	0x4c, 0x9f, 0x32, 0xda, 0x68, 0x82, 0x5b, 0xe2, 0xd0, 0x17, 0xd0, 0xa7, 0x0d, 0x3d, 0x17, 0xf2,
 	0x8a, 0x90, 0x45, 0x5e, 0xae, 0xb3, 0xb0, 0xc6, 0xe9, 0x33, 0xc6, 0xd7, 0xc5, 0x3d, 0x8c, 0xaa,
-	0x57, 0x1a, 0x65, 0xb2, 0x81, 0x27, 0x4a, 0xf5, 0x00, 0x03, 0xe0, 0x55, 0x2b, 0xef, 0x5f, 0x20,
+	0x57, 0x1a, 0x65, 0xb2, 0x81, 0x27, 0x4a, 0xf5, 0x00, 0x03, 0xe0, 0x55, 0x2b, 0x1f, 0x5d, 0x20,
 	0x93, 0xfb, 0x2c, 0x6a, 0xe0, 0x6e, 0x9e, 0x24, 0xa3, 0x7a, 0x27, 0xcf, 0x11, 0x02, 0xbb, 0xcf,
 	0xc5, 0x75, 0xd3, 0x14, 0x84, 0xd6, 0x73, 0xc1, 0x91, 0xbe, 0x4c, 0x9b, 0xcb, 0x92, 0x84, 0xc0,
 	0xc3, 0x7d, 0x0c, 0xfb, 0x43, 0xb1, 0xdd, 0xdd, 0x76, 0x93, 0x8e, 0x82, 0x56, 0x3d, 0xda, 0x41,
@@ -2719,239 +2722,240 @@ var fileDescriptor_555bd8c177793206 = []byte{
 	0x4a, 0x87, 0xf9, 0x65, 0xb5, 0x11, 0xde, 0x66, 0x44, 0x6e, 0x08, 0x54, 0x51, 0x8a, 0x2a, 0x2b,
 	0xc3, 0x6e, 0x92, 0xa2, 0xc3, 0x24, 0xa7, 0xae, 0x31, 0x91, 0x15, 0x02, 0xb8, 0xac, 0xb7, 0xc3,
 	0x5c, 0xd9, 0x7d, 0xf7, 0xc5, 0x3a, 0xf7, 0x9f, 0x13, 0x2c, 0x6e, 0x52, 0x2a, 0x58, 0x6f, 0xf7,
-	0x75, 0x8f, 0x12, 0x93, 0xf9, 0xca, 0xfb, 0xc6, 0x08, 0x55, 0x1d, 0x5a, 0x0e, 0x49, 0xd8, 0x9e,
-	0x2c, 0x11, 0x7a, 0xd0, 0xbb, 0x34, 0x87, 0x94, 0xf3, 0x24, 0x63, 0x53, 0x5f, 0xe4, 0x7e, 0x77,
-	0xcf, 0x2f, 0xf3, 0x5c, 0x10, 0x49, 0x9a, 0x82, 0xb4, 0x6c, 0x73, 0xb1, 0x18, 0x60, 0x21, 0x30,
-	0xad, 0x4c, 0xdf, 0x70, 0x75, 0x36, 0x53, 0x3d, 0x0b, 0x1d, 0x01, 0x53, 0xd8, 0x5c, 0x48, 0x4e,
-	0x6a, 0xe0, 0x28, 0x38, 0xdd, 0x66, 0xc1, 0xa6, 0x87, 0x98, 0xc8, 0x1f, 0x16, 0xe8, 0x18, 0x24,
-	0xe0, 0x7e, 0x66, 0x81, 0x4b, 0xe0, 0x8d, 0xf7, 0x0f, 0x54, 0x3e, 0x51, 0x52, 0x27, 0x20, 0x6b,
-	0x25, 0xd4, 0xa9, 0x07, 0x2d, 0x95, 0x11, 0x8a, 0xf9, 0x2c, 0x2e, 0x69, 0x12, 0xf2, 0xa5, 0x0d,
-	0xc1, 0x24, 0x07, 0x38, 0x64, 0x4f, 0xf5, 0xb3, 0x31, 0xb5, 0xc4, 0x6c, 0x02, 0x1e, 0x4c, 0x4c,
-	0xd0, 0xe2, 0x65, 0xc1, 0x3c, 0x00, 0x40, 0xcf, 0x3b, 0xdd, 0xaf, 0x5d, 0x81, 0xcb, 0x78, 0xf0,
-	0x8c, 0x73, 0x95, 0x5c, 0x1c, 0xb6, 0x66, 0x1d, 0x8e, 0x10, 0x22, 0xb3, 0xfd, 0x16, 0x37, 0x18,
-	0x3d, 0x11, 0x9d, 0xeb, 0xd7, 0x40, 0xdb, 0xc6, 0xf0, 0xe7, 0xfb, 0x6d, 0x5e, 0x60, 0xdd, 0xd5,
-	0xa6, 0x6e, 0xc3, 0xfa, 0x9c, 0x05, 0x8d, 0x4f, 0x49, 0x86, 0xdc, 0xaf, 0xc9, 0x3a, 0x5d, 0xe8,
-	0x1f, 0x08, 0x5c, 0x65, 0x56, 0x67, 0xc0, 0xcb, 0xf7, 0x85, 0xe7, 0xe9, 0xc8, 0xa6, 0x8b, 0xce,
-	0x75, 0x72, 0xa5, 0x5f, 0x23, 0xd5, 0xc4, 0x43, 0x76, 0x30, 0x8a, 0x2d, 0xad, 0x7c, 0xef, 0x71,
-	0x42, 0x36, 0xbd, 0xe0, 0x88, 0x79, 0x18, 0x8e, 0xf3, 0x64, 0x5a, 0x5d, 0x99, 0xe3, 0xef, 0x25,
-	0x72, 0x4e, 0x13, 0xd6, 0x7d, 0xc9, 0x43, 0x4c, 0xd9, 0x45, 0xdc, 0xf2, 0xfb, 0xa2, 0x09, 0x7d,
-	0xf2, 0x79, 0x92, 0x31, 0x80, 0xb8, 0x27, 0x84, 0xce, 0x04, 0x0c, 0x77, 0xc1, 0xb9, 0x46, 0x2e,
-	0x69, 0x2e, 0x66, 0x90, 0xbd, 0x50, 0xd4, 0x84, 0xcf, 0x3c, 0x77, 0x55, 0xca, 0x50, 0x37, 0x9c,
-	0xe7, 0x40, 0xd5, 0xe1, 0xa0, 0x4a, 0x05, 0x70, 0x0a, 0x76, 0x11, 0xb6, 0x9b, 0x86, 0xa9, 0xca,
-	0x80, 0x21, 0x44, 0xaf, 0x63, 0x41, 0xb6, 0xe8, 0x79, 0xe1, 0x0b, 0xfa, 0x28, 0x24, 0xee, 0x04,
-	0xb5, 0xd3, 0xa2, 0x37, 0x2c, 0x65, 0xed, 0x86, 0xcb, 0xc5, 0x48, 0xb8, 0x85, 0x9d, 0x9d, 0xe2,
-	0xea, 0x9c, 0x92, 0x17, 0xbe, 0x5a, 0xe6, 0x6d, 0x88, 0xc0, 0x24, 0x6f, 0xdb, 0x2f, 0x07, 0x4d,
-	0x6d, 0x85, 0x27, 0x2d, 0xc1, 0x9a, 0xbd, 0x23, 0x9a, 0x42, 0x2a, 0xee, 0x1d, 0xcb, 0x88, 0xfb,
-	0xe0, 0x10, 0xe9, 0xc2, 0xe9, 0xc4, 0xcd, 0x72, 0x48, 0xdd, 0xdb, 0x6b, 0xf4, 0x29, 0xc8, 0x18,
-	0x46, 0x2f, 0x3c, 0xc4, 0xbb, 0x79, 0x76, 0x4c, 0x0b, 0xd6, 0x8a, 0xb1, 0xd3, 0x3f, 0xf0, 0x77,
-	0x82, 0x72, 0x83, 0x1e, 0x38, 0x97, 0xc9, 0x79, 0x9b, 0x9e, 0x67, 0xc7, 0xc9, 0x86, 0xf8, 0x10,
-	0xe2, 0xd1, 0x46, 0xc4, 0x5c, 0x68, 0x59, 0x39, 0x7d, 0x60, 0xe9, 0xab, 0xf9, 0xd0, 0x60, 0x2a,
-	0x14, 0x7d, 0x93, 0x35, 0x3a, 0xd1, 0xcb, 0xab, 0xe4, 0x45, 0x5f, 0xb0, 0x0c, 0x85, 0x1d, 0x84,
-	0x2a, 0xe6, 0xb8, 0xd6, 0x17, 0x2d, 0xdd, 0x2c, 0x1e, 0xfa, 0x55, 0xc5, 0xed, 0x9b, 0x61, 0xc3,
-	0x25, 0x6d, 0x55, 0xe4, 0xac, 0xd2, 0x45, 0x2f, 0xbb, 0xa5, 0x87, 0x41, 0x58, 0xa1, 0x6f, 0xb1,
-	0xe2, 0x66, 0x10, 0x53, 0x0c, 0x8e, 0x8e, 0x78, 0x48, 0xdf, 0xfa, 0x7d, 0x41, 0xab, 0x61, 0xb9,
-	0xce, 0x43, 0xfa, 0x36, 0x2b, 0xb8, 0x06, 0x41, 0xf8, 0xa8, 0x44, 0x30, 0x9f, 0xba, 0x90, 0xa3,
-	0x4e, 0x84, 0x3d, 0x60, 0x7e, 0x85, 0xbe, 0xfd, 0xfb, 0x42, 0x30, 0x6f, 0x33, 0x6c, 0x7b, 0xe2,
-	0xc5, 0xc3, 0x26, 0x81, 0x13, 0x25, 0x18, 0x26, 0xa2, 0x35, 0xdb, 0xe6, 0x2d, 0xce, 0x2b, 0xba,
-	0xac, 0xa9, 0x43, 0x5a, 0xdd, 0x1e, 0xda, 0x0e, 0x55, 0xfd, 0xd2, 0xf7, 0xa8, 0xa8, 0xb0, 0xa2,
-	0x6f, 0xdb, 0x17, 0x52, 0x71, 0x0b, 0x41, 0x28, 0x43, 0x26, 0x24, 0x7d, 0x07, 0x24, 0x09, 0xb3,
-	0x81, 0xb8, 0xcf, 0x9a, 0x3c, 0x76, 0x74, 0xc3, 0xb2, 0x91, 0x6a, 0x1c, 0x4d, 0xc9, 0xee, 0xb5,
-	0x5d, 0xd4, 0xb3, 0x3c, 0xd2, 0x07, 0x52, 0x7d, 0x7d, 0x24, 0x69, 0xf3, 0x64, 0x41, 0xbd, 0xde,
-	0xdf, 0x77, 0x1e, 0x25, 0x57, 0x87, 0x83, 0x74, 0x00, 0xaa, 0x66, 0xab, 0xe5, 0xdc, 0x20, 0xd7,
-	0x4e, 0xc0, 0x31, 0xbf, 0x01, 0xbb, 0x4e, 0xc5, 0xca, 0x4b, 0xd6, 0xce, 0x51, 0xc0, 0x3c, 0x93,
-	0xe5, 0xba, 0xbb, 0x1f, 0x40, 0x7f, 0x53, 0x95, 0x34, 0xb4, 0x54, 0xcf, 0x33, 0xe1, 0x6d, 0x57,
-	0x34, 0x0e, 0x10, 0x3a, 0x9c, 0xa5, 0x73, 0x8b, 0x5c, 0x1f, 0x86, 0xc1, 0xbb, 0x2d, 0xba, 0x4d,
-	0x52, 0xd0, 0xb6, 0xb5, 0x4a, 0x0d, 0xc5, 0x16, 0x75, 0xef, 0xa1, 0xcf, 0x43, 0x03, 0xea, 0x9c,
-	0x04, 0x92, 0xf5, 0x1e, 0xe8, 0xa1, 0x15, 0x2d, 0x98, 0x6a, 0x0e, 0x5a, 0xee, 0x66, 0xc8, 0x2a,
-	0x10, 0x34, 0x51, 0xd0, 0x0e, 0xcb, 0x9c, 0x76, 0x2d, 0xaf, 0xda, 0xed, 0xb0, 0x76, 0xdd, 0xff,
-	0xb6, 0xd6, 0x5e, 0xe4, 0xe5, 0xb0, 0x8d, 0x7e, 0x0f, 0x83, 0x18, 0xf0, 0x7f, 0x9c, 0xb3, 0xb1,
-	0xdb, 0x4b, 0xdd, 0x48, 0xf2, 0x66, 0x3e, 0xaa, 0xa9, 0x9b, 0x2f, 0xff, 0x3f, 0xe5, 0x64, 0xc8,
-	0x62, 0xac, 0xe3, 0xb1, 0xbb, 0x0b, 0x41, 0xb1, 0xc3, 0x7d, 0xfa, 0x2e, 0xe8, 0x1e, 0xe2, 0xd4,
-	0x10, 0x40, 0x11, 0x80, 0x63, 0x0f, 0x1c, 0x14, 0x30, 0x63, 0xd1, 0x1f, 0x4c, 0x39, 0x97, 0xe3,
-	0x79, 0x35, 0x60, 0x83, 0xf9, 0x51, 0x0f, 0xf1, 0xee, 0x94, 0x73, 0xa5, 0x97, 0x7f, 0x14, 0x22,
-	0xeb, 0xb1, 0x72, 0xa3, 0x07, 0x79, 0x4f, 0xca, 0xd6, 0x4d, 0xd4, 0xfc, 0x83, 0x56, 0x1c, 0xcc,
-	0xef, 0x4d, 0x39, 0xb7, 0xc8, 0x23, 0x43, 0xd6, 0x6d, 0xe2, 0xb1, 0x27, 0xe6, 0x83, 0xb6, 0xb2,
-	0xd8, 0x09, 0xda, 0x67, 0x85, 0x48, 0xd2, 0x0f, 0xd9, 0xf3, 0x20, 0x60, 0xfd, 0xb8, 0xa5, 0x07,
-	0x7f, 0x38, 0xe5, 0x9c, 0xef, 0x6d, 0xa9, 0x90, 0x33, 0xa9, 0x1b, 0xe8, 0x1d, 0x11, 0x49, 0xfa,
-	0x91, 0x94, 0x73, 0xb5, 0xe7, 0xa0, 0xa0, 0xd9, 0xe2, 0x52, 0x75, 0x93, 0x50, 0x7a, 0x59, 0x03,
-	0xbb, 0xf7, 0x8f, 0xda, 0x0b, 0xed, 0x3b, 0x71, 0xeb, 0x54, 0xf8, 0x4b, 0x29, 0xe7, 0x62, 0xec,
-	0x44, 0x5b, 0xcc, 0x06, 0x3e, 0x4b, 0xa0, 0xbf, 0x6c, 0x4f, 0xa3, 0x92, 0xac, 0xea, 0x40, 0xcd,
-	0xfd, 0x9f, 0x48, 0xd2, 0x5f, 0x4b, 0x39, 0x17, 0xe2, 0xcc, 0x60, 0x19, 0x44, 0x47, 0xd2, 0xaf,
-	0xdb, 0xbe, 0x54, 0x46, 0xd0, 0x01, 0xf0, 0xf1, 0x94, 0x73, 0x86, 0x2c, 0xd9, 0x1c, 0x73, 0x2b,
-	0x88, 0xfe, 0xb6, 0x6d, 0x39, 0x75, 0x10, 0x53, 0x21, 0x62, 0x14, 0xff, 0x84, 0xed, 0x66, 0x05,
-	0x58, 0x6d, 0xb5, 0xbc, 0x2e, 0x5a, 0x07, 0xab, 0xcf, 0x27, 0x6d, 0xb5, 0x12, 0x08, 0xdc, 0x9a,
-	0x9f, 0x4a, 0x39, 0xe7, 0xe2, 0x2a, 0xa0, 0xd8, 0x10, 0x68, 0x8a, 0xf9, 0xbb, 0xb6, 0xe5, 0x14,
-	0xb3, 0xc0, 0xc3, 0x28, 0xc0, 0xa2, 0x0e, 0x8d, 0x35, 0xa7, 0x9f, 0x1e, 0x14, 0x7f, 0x28, 0xca,
-	0xbc, 0x10, 0xaa, 0xae, 0xfc, 0x33, 0xb6, 0xf7, 0xac, 0xe3, 0xb6, 0x92, 0xff, 0xd9, 0x41, 0xed,
-	0xb1, 0xc2, 0x28, 0x05, 0x41, 0xfb, 0xdf, 0x1b, 0x44, 0xec, 0x70, 0xd6, 0xd1, 0xad, 0xa3, 0x9b,
-	0x5b, 0xa3, 0x9f, 0x1b, 0x34, 0xd1, 0x4e, 0x50, 0xc3, 0x45, 0xa8, 0x6c, 0xf6, 0xf9, 0x94, 0x73,
-	0x23, 0x4e, 0x67, 0xda, 0x00, 0xa0, 0xbb, 0x70, 0xf7, 0x03, 0x75, 0xad, 0x97, 0xf2, 0x05, 0x5b,
-	0x52, 0xc1, 0xb8, 0x18, 0x6f, 0xc8, 0x29, 0x47, 0x7d, 0xd1, 0x5e, 0x2b, 0x00, 0xcc, 0xf9, 0x43,
-	0x45, 0xea, 0x97, 0x06, 0xd7, 0x9a, 0x55, 0x5a, 0x42, 0x78, 0xfc, 0xe1, 0x20, 0x17, 0xd3, 0xbf,
-	0xba, 0xf1, 0xfe, 0xe5, 0x94, 0x73, 0x2d, 0xce, 0x80, 0xda, 0xd1, 0x9c, 0x85, 0xe5, 0x3a, 0x04,
-	0x32, 0x84, 0x2b, 0x6c, 0xfa, 0x3f, 0x1a, 0x74, 0x07, 0x26, 0x04, 0x0b, 0xf2, 0xc7, 0x83, 0xf6,
-	0xda, 0x0d, 0xa4, 0x28, 0x73, 0xed, 0x55, 0x9f, 0x7e, 0x65, 0x50, 0x88, 0x49, 0x4b, 0x06, 0xf2,
-	0xd5, 0x41, 0x93, 0xee, 0xf9, 0x59, 0x7d, 0x27, 0xbc, 0x52, 0xe3, 0xf4, 0x4f, 0x53, 0xce, 0x23,
-	0x71, 0xee, 0x1c, 0x6a, 0xd2, 0xf5, 0xe3, 0x16, 0xfd, 0xb3, 0xc4, 0xbe, 0xb3, 0xf7, 0x26, 0x24,
-	0x6c, 0x4c, 0x70, 0x7f, 0x3e, 0x18, 0x3d, 0x71, 0xe5, 0x8b, 0x24, 0xfd, 0x9a, 0x2d, 0x41, 0xdf,
-	0x7c, 0x00, 0xbb, 0xaf, 0xf1, 0xb2, 0xbe, 0xc5, 0x46, 0xff, 0xc2, 0xde, 0xb9, 0x87, 0xa2, 0xd5,
-	0xcf, 0xff, 0xfa, 0xa0, 0xaa, 0xfa, 0xee, 0xa2, 0xed, 0xfa, 0x6f, 0xd8, 0x5b, 0x30, 0x21, 0x81,
-	0x7e, 0x33, 0xe5, 0xdc, 0x8c, 0xab, 0xdc, 0xd0, 0x55, 0x98, 0x24, 0xf1, 0xad, 0x7e, 0x21, 0xab,
-	0x51, 0x04, 0xbb, 0x30, 0xb7, 0x46, 0xbf, 0x9d, 0x72, 0x9e, 0x20, 0x37, 0xcd, 0x16, 0xef, 0x9d,
-	0x79, 0x51, 0x87, 0x1c, 0xf3, 0xbc, 0x8d, 0x20, 0xdc, 0xe2, 0x5e, 0x2b, 0xb7, 0x86, 0xdd, 0xd7,
-	0x77, 0x12, 0x09, 0xb3, 0x07, 0xc7, 0xfb, 0x5d, 0xb0, 0xad, 0xfe, 0xd6, 0xce, 0x47, 0xf6, 0x19,
-	0x9a, 0xf7, 0x30, 0x7f, 0x67, 0xaf, 0x7c, 0xe8, 0x4d, 0x1e, 0x40, 0x7d, 0xf7, 0x04, 0x49, 0x28,
-	0x46, 0xa7, 0xae, 0xbf, 0xb7, 0x83, 0xca, 0xba, 0xa5, 0x95, 0xf3, 0xa0, 0xa9, 0x04, 0x29, 0xff,
-	0x68, 0xef, 0xb1, 0x01, 0x04, 0x3e, 0xef, 0x60, 0x91, 0xe4, 0x21, 0xfd, 0xde, 0xcb, 0x03, 0x79,
-	0x13, 0xba, 0xc2, 0x7f, 0xb2, 0xfd, 0x9a, 0xe8, 0x5e, 0x55, 0x1b, 0xf6, 0xcf, 0xb6, 0xb1, 0x8b,
-	0xf9, 0x2c, 0x44, 0x9e, 0x7e, 0x72, 0xf4, 0x2f, 0x76, 0x4a, 0x7b, 0xbe, 0xcd, 0x23, 0x7d, 0x73,
-	0x0e, 0xd7, 0xf2, 0xaf, 0xb6, 0x55, 0xc0, 0x49, 0x77, 0x55, 0xb2, 0x8d, 0x1d, 0x0e, 0x4a, 0xd0,
-	0x7f, 0xb3, 0xad, 0x62, 0x3f, 0xd9, 0x51, 0x3a, 0xa0, 0x93, 0xfe, 0x3d, 0xe5, 0x3c, 0x1a, 0xf7,
-	0xa4, 0x36, 0x46, 0xcd, 0xb4, 0x0d, 0xc7, 0xac, 0x0e, 0xf3, 0xe8, 0x7f, 0x9c, 0x84, 0x83, 0x03,
-	0xbb, 0xc2, 0x62, 0x29, 0xfb, 0xcf, 0x93, 0x70, 0xb1, 0xc3, 0x54, 0x3e, 0xfb, 0x2f, 0xdb, 0x84,
-	0x36, 0x0e, 0xef, 0xbc, 0x2b, 0x81, 0xa8, 0xe0, 0x7f, 0xdb, 0x39, 0xa5, 0xd8, 0x8e, 0xea, 0xf6,
-	0xed, 0x6a, 0x63, 0x8f, 0xff, 0x9b, 0xee, 0x07, 0xa9, 0xa6, 0x2a, 0x01, 0xfa, 0x7f, 0x69, 0xcb,
-	0x1c, 0x6a, 0xa7, 0x4b, 0xc1, 0x23, 0xf7, 0xee, 0xd3, 0x6b, 0xac, 0x1b, 0xe1, 0xad, 0x2b, 0xfa,
-	0xce, 0xb4, 0xf3, 0x38, 0xb9, 0xf1, 0xb2, 0xea, 0x67, 0xbb, 0xb8, 0xb3, 0x7f, 0x20, 0x3d, 0xb0,
-	0x2d, 0xd7, 0x3d, 0x21, 0xf5, 0x53, 0x01, 0xec, 0xa8, 0x73, 0x6b, 0xf4, 0x5d, 0x36, 0x6a, 0xd0,
-	0x0d, 0x6e, 0xae, 0xce, 0xcb, 0x0d, 0xfa, 0xee, 0xb4, 0x15, 0x2a, 0x89, 0xdb, 0xaa, 0x8a, 0xff,
-	0x9e, 0xb4, 0x6d, 0xd8, 0xd8, 0xcf, 0x98, 0xe1, 0x65, 0xe0, 0x73, 0xc8, 0x2c, 0xac, 0xe9, 0xd1,
-	0xf7, 0xa6, 0xad, 0x0c, 0x5d, 0xe4, 0x2d, 0x8f, 0x95, 0x79, 0xef, 0xc1, 0xd2, 0x0f, 0xd9, 0xb3,
-	0x58, 0x5c, 0x53, 0x1c, 0x7e, 0xd8, 0xd6, 0x15, 0x0d, 0x99, 0x67, 0x2d, 0x63, 0xac, 0xae, 0xa9,
-	0xd7, 0xef, 0x4b, 0x5b, 0xd9, 0xc4, 0x3c, 0x9e, 0x74, 0x73, 0x61, 0x37, 0x92, 0x70, 0xaa, 0x0c,
-	0xa0, 0x31, 0xe6, 0x21, 0x1c, 0xe9, 0x7f, 0xc4, 0x76, 0xcc, 0x30, 0xad, 0xf3, 0xc2, 0xa7, 0x3f,
-	0xf6, 0xb2, 0xa0, 0x4e, 0x8b, 0x7e, 0x20, 0x6d, 0x75, 0x57, 0xb9, 0x3a, 0x67, 0xd2, 0xcd, 0x32,
-	0x7d, 0x20, 0xfe, 0xf1, 0xa1, 0xfa, 0x18, 0x25, 0x40, 0x21, 0xad, 0x1b, 0xfd, 0xa0, 0x6d, 0x45,
-	0xfb, 0xb1, 0x28, 0x1e, 0x1c, 0xca, 0xf1, 0x29, 0xe4, 0xc3, 0xe9, 0x81, 0x4a, 0x66, 0xe1, 0x8a,
-	0xfc, 0x28, 0x08, 0x7d, 0xfa, 0x93, 0x76, 0x40, 0x25, 0x40, 0x0a, 0x00, 0x39, 0xf3, 0xa7, 0xd2,
-	0x03, 0xa5, 0xec, 0x3e, 0xa4, 0x81, 0x5e, 0x65, 0xff, 0x69, 0xdb, 0x25, 0xba, 0x35, 0xc4, 0xfe,
-	0x41, 0x87, 0xed, 0xcf, 0xd8, 0x7c, 0xbd, 0x3b, 0xf4, 0xbd, 0x5a, 0xdc, 0x71, 0x3f, 0x9b, 0xb6,
-	0xd2, 0xac, 0x32, 0x0c, 0x9e, 0x75, 0x4d, 0x8f, 0x43, 0x3f, 0x92, 0xb6, 0xca, 0x93, 0x0d, 0x68,
-	0x1f, 0x79, 0xa2, 0x4c, 0x7f, 0x2e, 0x6d, 0xb5, 0x74, 0xfa, 0x31, 0x3e, 0xde, 0x11, 0xa1, 0x3f,
-	0x7f, 0xa2, 0x11, 0x30, 0xb4, 0xd5, 0x59, 0xf1, 0xa3, 0xe9, 0x81, 0x4a, 0xdc, 0x7b, 0x3e, 0xa3,
-	0x1e, 0x21, 0xff, 0xe2, 0x90, 0x6d, 0x72, 0x5c, 0x56, 0x47, 0xd2, 0x42, 0xc8, 0x23, 0x51, 0xe1,
-	0xbe, 0xa4, 0xbf, 0x62, 0xcf, 0x96, 0x63, 0x51, 0x1d, 0x6f, 0xcd, 0xf5, 0x90, 0xb8, 0xe3, 0x3e,
-	0x96, 0x76, 0xae, 0x93, 0xcb, 0x27, 0x83, 0xb4, 0xcd, 0x7e, 0x35, 0x9d, 0xc8, 0xbb, 0xea, 0x56,
-	0xee, 0x06, 0xb6, 0x07, 0x58, 0xb1, 0x7f, 0xc3, 0xf6, 0x4a, 0xb2, 0x49, 0x8a, 0x24, 0xbe, 0x15,
-	0xf0, 0x9b, 0xb6, 0x55, 0x71, 0x23, 0x14, 0xf0, 0x79, 0x94, 0x57, 0xd6, 0xcf, 0xc5, 0x7f, 0xcb,
-	0x76, 0xbe, 0xfd, 0xd4, 0xc8, 0xc2, 0x7c, 0xdc, 0xde, 0x8b, 0xfa, 0x11, 0xf5, 0x31, 0x76, 0x62,
-	0x1d, 0x1e, 0xd2, 0xdf, 0xb1, 0x63, 0x11, 0x9f, 0x98, 0x6f, 0x8a, 0xaa, 0xcc, 0xb2, 0x9a, 0xbb,
-	0xc3, 0x8e, 0xb8, 0xe7, 0x3e, 0xad, 0x7a, 0x74, 0xfa, 0x49, 0x5b, 0x95, 0x17, 0xda, 0xcc, 0xdf,
-	0x62, 0x7e, 0x6d, 0x1f, 0x22, 0x3b, 0xcf, 0x8e, 0xa1, 0x6e, 0x7d, 0x2a, 0x6d, 0xe5, 0xd2, 0x5c,
-	0x18, 0x44, 0x51, 0x02, 0xa5, 0x6c, 0x02, 0xc0, 0x4f, 0xdb, 0xfb, 0x64, 0x10, 0x78, 0x28, 0xf8,
-	0x43, 0x2d, 0xf2, 0x33, 0xb6, 0x6e, 0x83, 0xc8, 0xbd, 0x16, 0xf7, 0x71, 0xe7, 0x7d, 0xd6, 0xce,
-	0x97, 0x43, 0xa6, 0x66, 0x7e, 0x03, 0x82, 0x54, 0x4b, 0xfd, 0x5c, 0xc2, 0x7b, 0x80, 0xce, 0xb3,
-	0xe3, 0x5e, 0x2c, 0x01, 0xfa, 0x90, 0x79, 0xf4, 0x0b, 0x76, 0x48, 0x21, 0x6c, 0x3f, 0x68, 0x61,
-	0xd6, 0x8f, 0xe7, 0xfd, 0x62, 0xda, 0xb9, 0x4b, 0x1e, 0x3f, 0x51, 0x12, 0xfe, 0xdb, 0xf6, 0xab,
-	0xc1, 0x41, 0xab, 0xc2, 0xa4, 0xaa, 0x74, 0x5f, 0x1a, 0xd8, 0xfa, 0x6b, 0xbc, 0x09, 0xdd, 0x46,
-	0x18, 0xb0, 0x4a, 0x8e, 0x45, 0xfa, 0xd9, 0x35, 0xfd, 0x03, 0xdb, 0xb1, 0x78, 0x1b, 0x53, 0xdd,
-	0x4a, 0x2c, 0xf2, 0x6a, 0x10, 0xd6, 0xd4, 0x5d, 0xef, 0x2f, 0xdb, 0xf1, 0x63, 0x61, 0x4a, 0x75,
-	0x51, 0x95, 0x88, 0xf8, 0x93, 0x84, 0x4f, 0xac, 0x86, 0x6b, 0xbb, 0x12, 0x40, 0x15, 0xe8, 0x9a,
-	0x50, 0xfd, 0xaa, 0xed, 0x5d, 0xfd, 0xca, 0x44, 0xfc, 0x02, 0x82, 0x17, 0x48, 0xfa, 0x35, 0xdb,
-	0x68, 0x05, 0x2e, 0x9f, 0x17, 0xdd, 0x36, 0x37, 0xb7, 0xe0, 0x10, 0x8e, 0x13, 0x7e, 0xbd, 0x2f,
-	0xa4, 0x15, 0x4c, 0xbd, 0xfb, 0xa7, 0xb6, 0xf3, 0x37, 0x12, 0x89, 0x82, 0x85, 0xfa, 0x71, 0x76,
-	0xbc, 0x79, 0xe8, 0x37, 0xed, 0x7d, 0x9a, 0x7c, 0xd9, 0x01, 0x7a, 0x52, 0xdd, 0x20, 0xfe, 0x65,
-	0xd2, 0x3b, 0x36, 0x6a, 0xdb, 0x17, 0xe0, 0x6a, 0xfa, 0x2d, 0x3b, 0x57, 0x6f, 0xb0, 0x48, 0x5a,
-	0x0d, 0xc7, 0x5f, 0xd9, 0xd9, 0xa8, 0xd8, 0x3c, 0xda, 0x0f, 0xd4, 0xa3, 0x09, 0x2d, 0xfd, 0xdb,
-	0xb6, 0xf5, 0xcd, 0x31, 0x17, 0x7d, 0xbf, 0xc6, 0xba, 0xda, 0x64, 0x7f, 0x6d, 0x63, 0x8a, 0x01,
-	0x8c, 0xde, 0x0f, 0xb2, 0x81, 0x27, 0x60, 0x73, 0x69, 0x39, 0x7f, 0x63, 0x63, 0xf0, 0x1c, 0x0b,
-	0x35, 0xd9, 0xaa, 0xe2, 0x91, 0xa4, 0xdf, 0x4d, 0xaf, 0xfc, 0xfe, 0x18, 0x99, 0xcc, 0x33, 0xa1,
-	0x6e, 0x37, 0x2f, 0x90, 0x59, 0xf3, 0xdf, 0x3c, 0xfa, 0x98, 0x27, 0xd3, 0x31, 0x69, 0x33, 0x4f,
-	0x53, 0xce, 0x22, 0x99, 0x8f, 0x09, 0xea, 0x10, 0x4b, 0xd3, 0x89, 0x81, 0x30, 0x8d, 0x7a, 0x61,
-	0x23, 0x26, 0x61, 0x35, 0xa7, 0xa3, 0x4e, 0x86, 0x2c, 0xc5, 0x34, 0x2b, 0x24, 0xe8, 0x98, 0x73,
-	0x8a, 0x38, 0xbd, 0x69, 0x20, 0x34, 0x51, 0xca, 0xb8, 0x73, 0x9a, 0x2c, 0xc6, 0xf4, 0x5e, 0x5b,
-	0x4b, 0x27, 0x12, 0x8c, 0x5e, 0x2b, 0x43, 0x27, 0x13, 0x0c, 0xeb, 0xbd, 0xa4, 0xa9, 0x04, 0xe3,
-	0x50, 0xb4, 0xcc, 0x03, 0x18, 0xe2, 0x50, 0x32, 0x13, 0x33, 0x0a, 0xac, 0x4b, 0xa7, 0x13, 0xda,
-	0xe0, 0xa3, 0x38, 0x7c, 0x54, 0x38, 0x93, 0xa0, 0x43, 0x4a, 0x44, 0xb7, 0xd0, 0xd9, 0x01, 0xba,
-	0x5a, 0xef, 0x9c, 0xb3, 0x44, 0x68, 0x82, 0x9e, 0x67, 0x2d, 0x3a, 0xef, 0x9c, 0x27, 0x99, 0xbe,
-	0xb5, 0xaa, 0x72, 0x51, 0x08, 0x39, 0xa5, 0xce, 0x25, 0x72, 0x6e, 0x28, 0x57, 0x37, 0xd4, 0x0b,
-	0xce, 0x45, 0x72, 0x76, 0x28, 0x40, 0x65, 0x5c, 0xe7, 0x44, 0x01, 0xb0, 0x49, 0x79, 0x48, 0x17,
-	0x9d, 0x33, 0x64, 0xd9, 0xd2, 0xca, 0xe7, 0xfa, 0x3d, 0x28, 0x4e, 0x97, 0x12, 0x2c, 0x75, 0xbe,
-	0xd2, 0x11, 0xb7, 0x3c, 0xb0, 0x16, 0xa8, 0x11, 0xa7, 0x12, 0xd4, 0xcd, 0xbc, 0x5b, 0xe2, 0x5e,
-	0x95, 0x9e, 0x1e, 0xb0, 0x07, 0x66, 0x7e, 0x9a, 0x49, 0xb8, 0xa0, 0x97, 0x80, 0xe8, 0x99, 0x44,
-	0xfc, 0x40, 0x7e, 0xa0, 0x67, 0x9d, 0x65, 0xb2, 0x60, 0x85, 0x94, 0x27, 0x4a, 0x5b, 0x41, 0x8b,
-	0x9e, 0x73, 0x2e, 0x90, 0x33, 0xbd, 0xf0, 0x53, 0x8f, 0x4d, 0x0a, 0xa1, 0xe8, 0x08, 0x8f, 0xd7,
-	0x38, 0x3d, 0xbf, 0xe2, 0x93, 0x79, 0x28, 0xed, 0xfa, 0x21, 0xba, 0x79, 0x7f, 0x30, 0x97, 0xdf,
-	0x37, 0x0f, 0x50, 0x28, 0x99, 0x81, 0xab, 0xc2, 0x7a, 0xb1, 0xb4, 0xb7, 0xbb, 0xba, 0xa3, 0xde,
-	0x3b, 0x02, 0xca, 0x83, 0xbd, 0xe2, 0xce, 0x9a, 0x7a, 0xef, 0x08, 0x2e, 0x37, 0x0f, 0xb6, 0x77,
-	0xd6, 0xe8, 0x88, 0xc1, 0x9b, 0xa4, 0x4e, 0x89, 0x33, 0x4d, 0x26, 0x80, 0x02, 0xbe, 0x9c, 0x5e,
-	0xe1, 0xea, 0xa9, 0xbd, 0x9e, 0xaf, 0xd4, 0x56, 0x6f, 0xa5, 0x2e, 0x93, 0x05, 0x80, 0x94, 0x0e,
-	0xb2, 0xee, 0xfe, 0x0b, 0x85, 0x75, 0x33, 0xf7, 0x39, 0x72, 0x3a, 0x41, 0xb6, 0x02, 0x3a, 0x35,
-	0xc0, 0xb4, 0x62, 0x37, 0xbd, 0xf2, 0xa1, 0x14, 0xa1, 0xca, 0x8d, 0x45, 0x5e, 0x0e, 0xc2, 0x0a,
-	0xce, 0x72, 0x86, 0x2c, 0xf7, 0xd3, 0xcc, 0xae, 0x3d, 0x47, 0x4e, 0x0f, 0x61, 0xe1, 0x03, 0x9a,
-	0xd4, 0x50, 0xe6, 0x21, 0x0f, 0xa3, 0x76, 0x44, 0xd3, 0x43, 0x85, 0xea, 0x1d, 0x3d, 0x8c, 0x85,
-	0x19, 0x6d, 0x74, 0xe5, 0x5b, 0x29, 0xb2, 0x68, 0xf3, 0x8c, 0x21, 0xe2, 0xd7, 0x84, 0x12, 0x64,
-	0xa3, 0xe5, 0x15, 0x72, 0x61, 0x18, 0x37, 0x4e, 0x56, 0x14, 0x8e, 0x6f, 0x17, 0x87, 0x0a, 0xe0,
-	0x0f, 0x8f, 0x04, 0x47, 0x0c, 0x64, 0xfd, 0xf3, 0xc3, 0x30, 0xf1, 0x9d, 0xdd, 0x11, 0x08, 0x9a,
-	0x61, 0x08, 0xf5, 0x92, 0xe0, 0xa8, 0x73, 0x9d, 0x5c, 0x19, 0xc6, 0x4e, 0x24, 0x5f, 0x3a, 0xb6,
-	0xf2, 0xa3, 0x29, 0x32, 0xb7, 0x5e, 0xe0, 0x52, 0xdd, 0x0f, 0xc0, 0xf5, 0x9d, 0x26, 0x8b, 0x49,
-	0x8a, 0x59, 0xda, 0x59, 0x72, 0xaa, 0x8f, 0x61, 0x9e, 0xd6, 0xa3, 0xfd, 0xfb, 0x78, 0xab, 0x95,
-	0x8e, 0x79, 0x56, 0x7c, 0x86, 0x2c, 0xf7, 0x4b, 0xc4, 0x0a, 0x46, 0x47, 0xf0, 0x59, 0x7a, 0x1f,
-	0xab, 0xdd, 0xa4, 0xa3, 0x2b, 0xef, 0x1f, 0x25, 0xb3, 0xeb, 0xe6, 0x84, 0x82, 0x6a, 0x01, 0xd2,
-	0x26, 0x18, 0xad, 0x1e, 0x21, 0x97, 0x93, 0xf4, 0x35, 0x26, 0xbc, 0xae, 0x9b, 0x6b, 0x37, 0xe3,
-	0xd7, 0x1f, 0x28, 0xd4, 0xc8, 0x73, 0x49, 0xd4, 0xdd, 0xa7, 0xf1, 0xf5, 0x0b, 0xf5, 0x72, 0x03,
-	0x1d, 0xc5, 0x27, 0xf4, 0x43, 0x01, 0xfb, 0x2c, 0x6a, 0xd0, 0x31, 0x7c, 0xc3, 0x27, 0xc9, 0xbf,
-	0x73, 0x27, 0x96, 0x3f, 0x8e, 0xb6, 0x49, 0xb0, 0xd7, 0x8f, 0xd5, 0xe3, 0x19, 0x3a, 0x31, 0x38,
-	0xf7, 0x6a, 0x59, 0x48, 0xd1, 0x91, 0x5d, 0x6c, 0x73, 0xe9, 0x24, 0x1a, 0x2f, 0x01, 0x88, 0x7b,
-	0x60, 0x3a, 0x05, 0xe1, 0x96, 0x64, 0xee, 0x88, 0x06, 0x3b, 0x12, 0x68, 0x77, 0x32, 0xa8, 0x36,
-	0x34, 0xad, 0x71, 0xed, 0x9f, 0x1e, 0xb4, 0xda, 0x7d, 0xe1, 0xd7, 0xe8, 0x0c, 0x3a, 0x39, 0x41,
-	0x7f, 0x50, 0xe7, 0xdc, 0xa3, 0xb3, 0xf8, 0x1a, 0x47, 0x82, 0x51, 0x6a, 0x37, 0x21, 0x9f, 0xcd,
-	0x0d, 0xe1, 0x88, 0x9a, 0xbf, 0xed, 0xd3, 0x79, 0xe7, 0x1a, 0xb9, 0x94, 0xe4, 0x0c, 0xbe, 0x9a,
-	0xb0, 0x34, 0xe8, 0xa7, 0x21, 0xef, 0x35, 0x2c, 0x0f, 0x9a, 0x39, 0xbb, 0xef, 0x96, 0x9a, 0x2c,
-	0xaa, 0xaf, 0xd7, 0x6a, 0xf4, 0xd4, 0xca, 0x07, 0x52, 0x64, 0xb6, 0xc0, 0xba, 0x7b, 0x61, 0x85,
-	0x87, 0x25, 0xc9, 0xa4, 0x8e, 0x56, 0x9b, 0x62, 0xe2, 0x02, 0x23, 0x2b, 0xc1, 0xd8, 0xe4, 0x90,
-	0x93, 0x60, 0x19, 0x49, 0x3a, 0x5c, 0x35, 0xd4, 0x2b, 0x0d, 0x83, 0x9c, 0x0d, 0x26, 0x3c, 0x5e,
-	0xa1, 0x23, 0x68, 0xe9, 0x21, 0xe3, 0x74, 0x2d, 0x19, 0x5d, 0xf9, 0xc4, 0x08, 0x99, 0x29, 0xb0,
-	0xee, 0x66, 0x10, 0x54, 0x22, 0xd3, 0x78, 0xc0, 0x00, 0x3b, 0x56, 0x97, 0xc9, 0x42, 0x4c, 0x5a,
-	0x13, 0x91, 0x7a, 0x54, 0x95, 0x32, 0xaa, 0xf6, 0x95, 0xe6, 0x74, 0x82, 0xae, 0x32, 0x5d, 0x96,
-	0xd5, 0xe8, 0x48, 0x42, 0x0c, 0xde, 0xdf, 0x05, 0xf2, 0x68, 0x02, 0xde, 0xab, 0xe4, 0x63, 0x03,
-	0x74, 0x55, 0xc9, 0xc7, 0xf1, 0xcd, 0x44, 0x9b, 0x0e, 0xd9, 0x7f, 0xc2, 0xd8, 0x27, 0xae, 0xa4,
-	0xa6, 0x90, 0x4e, 0x26, 0x38, 0x56, 0x11, 0xa6, 0x53, 0x03, 0x92, 0xa0, 0x8e, 0x92, 0x81, 0x79,
-	0x55, 0xc5, 0x9c, 0x4e, 0xa8, 0x0f, 0x74, 0x2c, 0x8e, 0x33, 0x49, 0x7b, 0x65, 0xb7, 0x9e, 0xa1,
-	0xf7, 0x54, 0x56, 0xd1, 0xa4, 0xbe, 0xf7, 0x74, 0x2b, 0x18, 0x2a, 0x86, 0x39, 0x50, 0x35, 0x79,
-	0x62, 0xf6, 0x02, 0x83, 0x2e, 0x91, 0x97, 0x1b, 0xb4, 0xaa, 0xb2, 0x18, 0x33, 0xc1, 0x65, 0xe4,
-	0xdd, 0xbd, 0x73, 0x87, 0xd6, 0x56, 0x7e, 0x22, 0x45, 0x66, 0xf2, 0xdd, 0xe8, 0x25, 0x6f, 0x27,
-	0xa8, 0xa1, 0x0f, 0xe7, 0x08, 0xd9, 0xb1, 0x1d, 0x48, 0xc9, 0xcc, 0x8e, 0xd5, 0x48, 0xd0, 0x14,
-	0x68, 0xad, 0x29, 0xd5, 0x2a, 0x92, 0xb0, 0xda, 0xee, 0xc4, 0x8d, 0xd7, 0x48, 0xef, 0xb2, 0x98,
-	0xcd, 0xd3, 0x51, 0x68, 0x3e, 0xd5, 0xa5, 0xca, 0x8e, 0x63, 0xd0, 0x7c, 0xda, 0x32, 0x21, 0xff,
-	0x2d, 0x59, 0x44, 0x88, 0x37, 0xbc, 0x25, 0xb0, 0xbc, 0xf2, 0xce, 0x19, 0x32, 0x8a, 0x5f, 0xa4,
-	0x4c, 0x92, 0x51, 0xad, 0xd0, 0x04, 0x19, 0x29, 0xc9, 0x90, 0xa6, 0xe0, 0xcf, 0x6a, 0x4d, 0xd0,
-	0x34, 0xfc, 0xd9, 0xf6, 0x25, 0x1d, 0x81, 0x3f, 0x87, 0x42, 0xd2, 0x51, 0xf8, 0xb3, 0xc6, 0x8f,
-	0xe9, 0x18, 0xfc, 0xd9, 0x69, 0x37, 0xe8, 0x38, 0x8c, 0xdf, 0x11, 0x55, 0xc8, 0x4d, 0xe3, 0x24,
-	0x5d, 0x82, 0x14, 0x44, 0xc8, 0xb8, 0xfa, 0x58, 0x4f, 0xbd, 0xfc, 0x6f, 0x7d, 0xe0, 0xa7, 0xba,
-	0x03, 0xfd, 0x2d, 0x1e, 0x9d, 0x56, 0x9d, 0x65, 0xef, 0xeb, 0x3c, 0x3a, 0x03, 0x62, 0xb7, 0x84,
-	0xa4, 0xb3, 0xce, 0x14, 0x19, 0x5b, 0x0b, 0x2a, 0x35, 0x4e, 0xe7, 0x60, 0x86, 0x5c, 0x28, 0x24,
-	0x9d, 0x07, 0xee, 0x3e, 0xf7, 0xd5, 0x2b, 0xfe, 0xab, 0xbd, 0x8f, 0xec, 0xe8, 0x02, 0x36, 0x31,
-	0x2c, 0x92, 0xab, 0xe5, 0x32, 0xb4, 0x78, 0x53, 0x64, 0x2c, 0xcf, 0x8e, 0xb7, 0x5a, 0x74, 0x51,
-	0xff, 0x2d, 0xb5, 0xe8, 0x92, 0xfa, 0x4a, 0x40, 0x7d, 0x79, 0x47, 0x97, 0x41, 0x44, 0x69, 0xbf,
-	0xe8, 0xea, 0xef, 0x9d, 0xe8, 0x25, 0x94, 0xb9, 0xb9, 0x1d, 0x13, 0x2e, 0x03, 0x61, 0x7b, 0x77,
-	0x3f, 0x26, 0x5c, 0x01, 0xc2, 0xe1, 0x76, 0x8f, 0x70, 0x15, 0x08, 0x6b, 0xeb, 0x6f, 0x8a, 0x09,
-	0xd7, 0xd0, 0x21, 0x07, 0xf7, 0x63, 0xc2, 0x23, 0xe8, 0x64, 0x51, 0xe5, 0x31, 0xe5, 0x3a, 0x84,
-	0x41, 0xa9, 0x15, 0x5f, 0x3f, 0x0a, 0xe7, 0x00, 0xb5, 0x94, 0x98, 0x76, 0x43, 0xf5, 0x81, 0xb1,
-	0xd5, 0x62, 0xc6, 0x4d, 0x70, 0xa5, 0xb6, 0x55, 0x4c, 0xbc, 0xa5, 0x4e, 0x0d, 0x3d, 0x2b, 0xc6,
-	0x9c, 0x15, 0x50, 0x67, 0x4b, 0xc8, 0x98, 0xf0, 0x18, 0xbe, 0x2c, 0x09, 0x56, 0x8d, 0x49, 0x8f,
-	0x63, 0x03, 0x17, 0x5a, 0xa0, 0x27, 0xf0, 0x85, 0x6c, 0xee, 0xc7, 0x84, 0xdb, 0xa0, 0x8e, 0x65,
-	0xed, 0x98, 0x81, 0xaf, 0x91, 0x18, 0xab, 0x7b, 0x5c, 0x7d, 0x37, 0x18, 0x73, 0xef, 0xa8, 0xa6,
-	0xf5, 0x78, 0xab, 0xb7, 0xd8, 0xbb, 0x9a, 0x64, 0xad, 0xff, 0x9e, 0xfa, 0x02, 0x41, 0x79, 0x25,
-	0xa6, 0x3e, 0x05, 0x92, 0xf5, 0xc9, 0x14, 0x82, 0xd3, 0x55, 0xdf, 0xa6, 0xa9, 0x57, 0x50, 0xe8,
-	0x06, 0xe4, 0xcf, 0x21, 0x5c, 0x33, 0x7a, 0x13, 0xaa, 0xa4, 0xe6, 0x3f, 0x60, 0x12, 0x5f, 0x8e,
-	0x4c, 0x00, 0xb6, 0xa0, 0x25, 0xd2, 0x80, 0xcd, 0x30, 0x68, 0xfb, 0x95, 0x7e, 0xc4, 0xb6, 0x35,
-	0xc5, 0x86, 0x08, 0x07, 0xa6, 0x78, 0xce, 0xe2, 0x3f, 0x10, 0x83, 0xe3, 0xef, 0x5b, 0x2a, 0x94,
-	0x98, 0xf0, 0x65, 0x3f, 0x60, 0xc7, 0x12, 0xb0, 0xc6, 0xc2, 0x46, 0x3f, 0x3f, 0x6f, 0xa9, 0x88,
-	0x6b, 0x5c, 0xf5, 0xa5, 0x48, 0x58, 0xa1, 0x00, 0xbd, 0xdf, 0x09, 0x08, 0x23, 0xe5, 0x79, 0x28,
-	0xa7, 0x09, 0x4b, 0x0c, 0x01, 0x15, 0xa1, 0x9c, 0x26, 0xad, 0x31, 0x04, 0x55, 0xb2, 0xa6, 0x43,
-	0x8b, 0x0c, 0xc1, 0xec, 0x5b, 0x18, 0xb4, 0xca, 0x10, 0xcc, 0x81, 0xa5, 0x92, 0xb2, 0xcc, 0x10,
-	0xd0, 0xa1, 0x25, 0x08, 0xad, 0x33, 0x04, 0xf3, 0x00, 0xc2, 0xd2, 0xfa, 0x60, 0x35, 0x66, 0xbc,
-	0x59, 0x9d, 0x81, 0x6a, 0xa2, 0xec, 0x0e, 0x63, 0xbf, 0x05, 0xf6, 0x4b, 0xc1, 0xfa, 0x3c, 0x34,
-	0xe6, 0xbc, 0x35, 0xde, 0x77, 0x7d, 0x8c, 0xb7, 0x81, 0x44, 0x50, 0xc1, 0x4d, 0x8c, 0xd3, 0x5f,
-	0x52, 0x52, 0x17, 0xdf, 0xda, 0x07, 0xf6, 0xb0, 0xc1, 0xf8, 0xde, 0x65, 0x2e, 0xfe, 0x90, 0x35,
-	0xa6, 0x33, 0x08, 0x91, 0xc2, 0xe0, 0x67, 0xaa, 0x31, 0xe0, 0x48, 0x9d, 0x64, 0x6b, 0x27, 0xf1,
-	0xcb, 0xd0, 0x0b, 0x6f, 0xd8, 0x5f, 0x9a, 0xc6, 0xac, 0x0a, 0x68, 0x74, 0xd8, 0xf7, 0x29, 0x69,
-	0xcc, 0xe5, 0xce, 0x24, 0x19, 0xc9, 0xb3, 0x63, 0xfa, 0x9d, 0x89, 0x95, 0x8f, 0xa5, 0xc8, 0xb8,
-	0x32, 0x34, 0xe4, 0x16, 0xf5, 0x4f, 0x9d, 0x32, 0x03, 0xc9, 0xe8, 0x2b, 0xfa, 0x88, 0x58, 0x28,
-	0x52, 0xb0, 0x65, 0x2d, 0x22, 0x06, 0x16, 0x4d, 0x43, 0x29, 0xb6, 0xa8, 0x2a, 0x92, 0xe8, 0x48,
-	0x9f, 0x04, 0x08, 0x1d, 0xf5, 0x85, 0x99, 0x2d, 0x41, 0xf8, 0x15, 0x3a, 0xd6, 0x27, 0x76, 0x47,
-	0xd4, 0xea, 0x52, 0x7d, 0x98, 0x62, 0x51, 0x21, 0x1a, 0xe8, 0x44, 0x96, 0xbe, 0x38, 0x77, 0xfb,
-	0xc9, 0x67, 0xad, 0xcf, 0xeb, 0x8e, 0xc6, 0xf1, 0xe7, 0xa9, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff,
-	0xed, 0xc2, 0xe4, 0x39, 0xeb, 0x3f, 0x00, 0x00,
+	0x75, 0x8f, 0x12, 0x93, 0x39, 0x58, 0x54, 0x39, 0x65, 0x0b, 0xcc, 0x9c, 0x48, 0x52, 0xd5, 0x95,
+	0xf7, 0x8d, 0x11, 0xaa, 0xda, 0xb7, 0x1c, 0xe2, 0xb1, 0x77, 0x59, 0x22, 0xf4, 0xa0, 0x77, 0x69,
+	0x4e, 0x30, 0xe7, 0x49, 0xc6, 0xa6, 0xbe, 0xc8, 0xfd, 0xee, 0x9e, 0x5f, 0xe6, 0xb9, 0x20, 0x92,
+	0x34, 0x05, 0x39, 0xdb, 0xe6, 0x62, 0xa5, 0xc0, 0x2a, 0x61, 0xfa, 0x9c, 0xbe, 0xe1, 0xea, 0xe0,
+	0xa6, 0x1a, 0x1a, 0x3a, 0x02, 0x76, 0xb2, 0xb9, 0x90, 0xb9, 0xd4, 0xc0, 0x51, 0xd0, 0xdf, 0x66,
+	0x41, 0x46, 0x80, 0x80, 0xc9, 0x1f, 0x16, 0xe8, 0x18, 0x64, 0xe7, 0x7e, 0x66, 0x81, 0x4b, 0xe0,
+	0x8d, 0xf7, 0x0f, 0x54, 0x2b, 0x57, 0x52, 0x27, 0x20, 0xa5, 0x25, 0xd4, 0xa9, 0x07, 0x2d, 0x95,
+	0x2e, 0x8a, 0xf9, 0x2c, 0x2e, 0x69, 0x12, 0x92, 0xa9, 0x0d, 0xc1, 0x0c, 0x08, 0x38, 0x64, 0x4f,
+	0xf5, 0xb3, 0x31, 0xef, 0xc4, 0x6c, 0x02, 0xee, 0x4d, 0x4c, 0xd0, 0xe2, 0x65, 0xc1, 0x3c, 0x00,
+	0x40, 0x43, 0x3c, 0xdd, 0xaf, 0x5d, 0x81, 0xcb, 0x78, 0xf0, 0x8c, 0x73, 0x95, 0x5c, 0x1c, 0xb6,
+	0x66, 0x1d, 0xab, 0x10, 0x3f, 0xb3, 0xfd, 0x16, 0x37, 0x18, 0x3d, 0x11, 0x9d, 0xeb, 0xd7, 0x40,
+	0xdb, 0xc6, 0xf0, 0xe7, 0xfb, 0x6d, 0x5e, 0x60, 0xdd, 0xd5, 0xa6, 0xee, 0xd1, 0xfa, 0x9c, 0x05,
+	0x5d, 0x51, 0x49, 0x86, 0xdc, 0xaf, 0xc9, 0x3a, 0x5d, 0xe8, 0x1f, 0x08, 0x5c, 0x65, 0x56, 0x67,
+	0xc0, 0xcb, 0xf7, 0x85, 0xe7, 0xe9, 0xb0, 0xa7, 0x8b, 0xce, 0x75, 0x72, 0xa5, 0x5f, 0x23, 0xd5,
+	0xe1, 0x43, 0xea, 0x30, 0x8a, 0x2d, 0xad, 0x7c, 0xef, 0x71, 0x42, 0x36, 0xbd, 0xe0, 0x88, 0x79,
+	0x18, 0x8e, 0xf3, 0x64, 0x5a, 0x5d, 0x99, 0xb3, 0xf1, 0x25, 0x72, 0x4e, 0x13, 0xd6, 0x7d, 0xc9,
+	0x43, 0xcc, 0xe7, 0x45, 0xcc, 0x07, 0xfb, 0xa2, 0x09, 0x4d, 0xf4, 0x79, 0x92, 0x31, 0x80, 0xb8,
+	0x61, 0x84, 0xb6, 0x05, 0x0c, 0x77, 0xc1, 0xb9, 0x46, 0x2e, 0x69, 0x2e, 0xa6, 0x97, 0xbd, 0x50,
+	0xd4, 0x84, 0xcf, 0x3c, 0x77, 0x55, 0xca, 0x50, 0x77, 0xa3, 0xe7, 0x40, 0xd5, 0xe1, 0xa0, 0x4a,
+	0x05, 0x70, 0x0a, 0x76, 0x11, 0xf6, 0xa2, 0x86, 0xa9, 0xb2, 0x81, 0x21, 0x44, 0xaf, 0x63, 0xb5,
+	0xb6, 0xe8, 0x79, 0xe1, 0x0b, 0xfa, 0x28, 0x64, 0xf5, 0x04, 0xb5, 0xd3, 0xa2, 0x37, 0x2c, 0x65,
+	0xed, 0x6e, 0xcc, 0xc5, 0x48, 0xb8, 0x85, 0x6d, 0x9f, 0xe2, 0xea, 0x9d, 0x9b, 0x17, 0xbe, 0x5a,
+	0xe6, 0x6d, 0x88, 0xc0, 0x24, 0x6f, 0xdb, 0x2f, 0x07, 0x4d, 0x6d, 0x85, 0x27, 0x2d, 0xc1, 0x9a,
+	0xbd, 0x23, 0x9a, 0x42, 0x2a, 0xee, 0x1d, 0xcb, 0x88, 0xfb, 0xe0, 0x10, 0xe9, 0xc2, 0xd1, 0xc5,
+	0xcd, 0x72, 0xc8, 0xeb, 0xdb, 0x6b, 0xf4, 0x29, 0x48, 0x27, 0x46, 0x2f, 0x3c, 0xe1, 0xbb, 0x79,
+	0x76, 0x4c, 0x0b, 0xd6, 0x8a, 0xf1, 0x18, 0x70, 0xe0, 0xef, 0x04, 0xe5, 0x06, 0x3d, 0x70, 0x2e,
+	0x93, 0xf3, 0x36, 0x3d, 0xcf, 0x8e, 0x93, 0xdd, 0xf2, 0x21, 0xc4, 0xa3, 0x8d, 0x88, 0xb9, 0xd0,
+	0xcf, 0x72, 0xfa, 0xc0, 0xd2, 0x57, 0xf3, 0xa1, 0xfb, 0x54, 0x28, 0xfa, 0x26, 0x6b, 0x74, 0xa2,
+	0xd1, 0x57, 0xc9, 0x8b, 0xbe, 0x60, 0x19, 0x0a, 0xdb, 0x0b, 0x55, 0xe9, 0x71, 0xad, 0x2f, 0x5a,
+	0xba, 0x59, 0x3c, 0xf4, 0xab, 0x8a, 0xdb, 0x37, 0xc3, 0x86, 0x4b, 0xda, 0xaa, 0xc8, 0x59, 0xa5,
+	0x8b, 0x5e, 0x76, 0x4b, 0x0f, 0x83, 0xb0, 0x42, 0xdf, 0x62, 0xc5, 0xcd, 0x20, 0xa6, 0x18, 0x1c,
+	0x1d, 0xf1, 0x90, 0xbe, 0xf5, 0xfb, 0x82, 0x56, 0xc3, 0x72, 0x9d, 0x87, 0xf4, 0x6d, 0x56, 0x70,
+	0x0d, 0x82, 0xf0, 0x39, 0x8a, 0x60, 0x3e, 0x75, 0x21, 0x47, 0x9d, 0x08, 0x7b, 0xc0, 0xfc, 0x0a,
+	0x7d, 0xfb, 0xf7, 0x85, 0x60, 0xde, 0x66, 0xd8, 0x13, 0xc5, 0x8b, 0x87, 0x4d, 0x02, 0xc7, 0x4d,
+	0x30, 0x4c, 0x44, 0x6b, 0xb6, 0xcd, 0x5b, 0x9c, 0x57, 0x74, 0xcd, 0x53, 0x27, 0xb8, 0xba, 0x3d,
+	0xb4, 0x1d, 0xaa, 0xe2, 0xa6, 0x6f, 0x60, 0x51, 0x61, 0x45, 0xdf, 0xb6, 0x2f, 0xa4, 0xe2, 0x16,
+	0x82, 0x50, 0x86, 0x4c, 0x48, 0xfa, 0x0e, 0x48, 0x12, 0x66, 0x03, 0x71, 0x9f, 0x35, 0x79, 0xec,
+	0xe8, 0x86, 0x65, 0x23, 0xd5, 0x55, 0x9a, 0x7a, 0xde, 0xeb, 0xc9, 0xa8, 0x67, 0x79, 0xa4, 0x0f,
+	0xa4, 0x9a, 0xfe, 0x48, 0xd2, 0xe6, 0xc9, 0x82, 0x7a, 0x07, 0x03, 0xdf, 0x79, 0x94, 0x5c, 0x1d,
+	0x0e, 0xd2, 0x01, 0xa8, 0x3a, 0xb1, 0x96, 0x73, 0x83, 0x5c, 0x3b, 0x01, 0xc7, 0xfc, 0x06, 0xec,
+	0x3a, 0x15, 0x2b, 0x2f, 0x59, 0x3b, 0x47, 0x01, 0xf3, 0x4c, 0x96, 0xeb, 0xee, 0x7e, 0x00, 0xcd,
+	0x4f, 0x55, 0xd2, 0xd0, 0x52, 0x3d, 0xcf, 0x84, 0xb7, 0x5d, 0xd1, 0x38, 0x40, 0xe8, 0x70, 0x96,
+	0xce, 0x2d, 0x72, 0x7d, 0x18, 0x06, 0x6f, 0xc5, 0xe8, 0x1e, 0x4a, 0x41, 0xdb, 0xd6, 0x2a, 0x35,
+	0x14, 0xfb, 0xd7, 0xbd, 0x87, 0x3e, 0x0f, 0x0d, 0xa8, 0x73, 0x12, 0x48, 0xd6, 0x7b, 0xa0, 0x87,
+	0x56, 0xb4, 0x60, 0xaa, 0x39, 0x68, 0xb9, 0x9b, 0x21, 0xab, 0x40, 0xd0, 0x44, 0x41, 0x3b, 0x2c,
+	0x73, 0xda, 0xb5, 0xbc, 0x6a, 0xf7, 0xca, 0xda, 0x75, 0xff, 0xdb, 0x5a, 0x7b, 0x91, 0x97, 0xc3,
+	0x36, 0xfa, 0x3d, 0x0c, 0x62, 0xc0, 0xff, 0x71, 0xce, 0xc6, 0x6e, 0x2f, 0x75, 0x23, 0xc9, 0x9b,
+	0xf9, 0xa8, 0xa6, 0xee, 0xcc, 0xfc, 0xff, 0x94, 0x93, 0x21, 0x8b, 0xb1, 0x8e, 0xc7, 0xee, 0x2e,
+	0x04, 0xc5, 0x0e, 0xf7, 0xe9, 0xbb, 0xa0, 0x7b, 0x88, 0x53, 0x43, 0x00, 0x45, 0x00, 0xce, 0x44,
+	0x70, 0x8a, 0xc0, 0x8c, 0x45, 0x7f, 0x30, 0xe5, 0x5c, 0x8e, 0xe7, 0xd5, 0x80, 0x0d, 0xe6, 0x47,
+	0x3d, 0xc4, 0xbb, 0x53, 0xce, 0x95, 0x5e, 0xfe, 0x51, 0x88, 0xac, 0xc7, 0xca, 0x8d, 0x1e, 0xe4,
+	0x3d, 0x29, 0x5b, 0x37, 0x51, 0xf3, 0x0f, 0x5a, 0x71, 0x30, 0xbf, 0x37, 0xe5, 0xdc, 0x22, 0x8f,
+	0x0c, 0x59, 0xb7, 0x89, 0xc7, 0x9e, 0x98, 0x0f, 0xd8, 0xca, 0x62, 0x9b, 0x68, 0x1f, 0x24, 0x22,
+	0x49, 0x3f, 0x68, 0xcf, 0x83, 0x80, 0xf5, 0xe3, 0x96, 0x1e, 0xfc, 0xa1, 0x94, 0x73, 0xbe, 0xb7,
+	0xa5, 0x42, 0xce, 0xa4, 0xee, 0xae, 0x77, 0x44, 0x24, 0xe9, 0x87, 0x53, 0xce, 0xd5, 0x9e, 0x83,
+	0x82, 0x66, 0x8b, 0x4b, 0xd5, 0x6a, 0x42, 0xe9, 0x65, 0x0d, 0x6c, 0xed, 0x3f, 0x62, 0x2f, 0xb4,
+	0xef, 0x38, 0xae, 0x53, 0xe1, 0x47, 0x53, 0xce, 0xc5, 0xd8, 0x89, 0xb6, 0x98, 0x0d, 0x7c, 0xd0,
+	0x40, 0x7f, 0xd9, 0x9e, 0x46, 0x25, 0x59, 0xd5, 0x9e, 0x9a, 0x9b, 0x43, 0x91, 0xa4, 0xbf, 0x96,
+	0x72, 0x2e, 0xc4, 0x99, 0xc1, 0x32, 0x88, 0x8e, 0xa4, 0x5f, 0xb7, 0x7d, 0xa9, 0x8c, 0xa0, 0x03,
+	0xe0, 0xe3, 0x29, 0xe7, 0x0c, 0x59, 0xb2, 0x39, 0xe6, 0x3e, 0x11, 0xfd, 0x6d, 0xdb, 0x72, 0xea,
+	0x94, 0xa6, 0x42, 0xc4, 0x28, 0xfe, 0x09, 0xdb, 0xcd, 0x0a, 0xb0, 0xda, 0x6a, 0x79, 0x5d, 0xb4,
+	0x0e, 0x56, 0x9f, 0x4f, 0xda, 0x6a, 0x25, 0x10, 0xb8, 0x35, 0x3f, 0x95, 0x72, 0xce, 0xc5, 0x55,
+	0x40, 0xb1, 0x21, 0xd0, 0x14, 0xf3, 0x77, 0x6d, 0xcb, 0x29, 0x66, 0x81, 0x87, 0x51, 0x80, 0x45,
+	0x1d, 0xba, 0x6e, 0x4e, 0x3f, 0x3d, 0x28, 0xfe, 0x50, 0x94, 0x79, 0x21, 0x54, 0x2d, 0xfb, 0x67,
+	0x6c, 0xef, 0x59, 0x67, 0x71, 0x25, 0xff, 0xb3, 0x83, 0xda, 0x63, 0x85, 0x51, 0x0a, 0x82, 0xf6,
+	0xbf, 0x37, 0x88, 0xd8, 0xe1, 0xac, 0xa3, 0x5b, 0x47, 0x37, 0xb7, 0x46, 0x3f, 0x37, 0x68, 0xa2,
+	0x9d, 0xa0, 0x86, 0x8b, 0x50, 0xd9, 0xec, 0xf3, 0x29, 0xe7, 0x46, 0x9c, 0xce, 0xb4, 0x01, 0x40,
+	0x77, 0xe1, 0xee, 0x07, 0xea, 0x5a, 0x2f, 0xe5, 0x0b, 0xb6, 0xa4, 0x82, 0x71, 0x31, 0xde, 0xad,
+	0x53, 0x8e, 0xfa, 0xa2, 0xbd, 0x56, 0x00, 0x98, 0xc3, 0x89, 0x8a, 0xd4, 0x2f, 0x0d, 0xae, 0x35,
+	0xab, 0xb4, 0x84, 0xf0, 0xf8, 0xc3, 0x41, 0x2e, 0xa6, 0x7f, 0x75, 0x57, 0xfe, 0xcb, 0x29, 0xe7,
+	0x5a, 0x9c, 0x01, 0xb5, 0xa3, 0x39, 0x0b, 0xcb, 0x75, 0x08, 0x64, 0x08, 0x57, 0xd8, 0xf4, 0x7f,
+	0x34, 0xe8, 0x0e, 0x4c, 0x08, 0x16, 0xe4, 0x8f, 0x07, 0xed, 0xb5, 0x1b, 0x48, 0x51, 0xe6, 0xda,
+	0xab, 0x3e, 0xfd, 0xca, 0xa0, 0x10, 0x93, 0x96, 0x0c, 0xe4, 0xab, 0x83, 0x26, 0xdd, 0xf3, 0xb3,
+	0xfa, 0x36, 0x79, 0xa5, 0xc6, 0xe9, 0x9f, 0xa6, 0x9c, 0x47, 0xe2, 0xdc, 0x39, 0xd4, 0xa4, 0xeb,
+	0xc7, 0x2d, 0xfa, 0x67, 0x89, 0x7d, 0x67, 0xef, 0x4d, 0x48, 0xd8, 0x98, 0xe0, 0xfe, 0x7c, 0x30,
+	0x7a, 0xe2, 0xca, 0x17, 0x49, 0xfa, 0x35, 0x5b, 0x82, 0xbe, 0x33, 0x01, 0x76, 0x5f, 0xe3, 0x65,
+	0x7d, 0xff, 0x8d, 0xfe, 0x85, 0xbd, 0x73, 0x0f, 0x45, 0xab, 0x9f, 0xff, 0xf5, 0x41, 0x55, 0xf5,
+	0xad, 0x47, 0xdb, 0xf5, 0xdf, 0xb0, 0xb7, 0x60, 0x42, 0x02, 0xfd, 0x66, 0xca, 0xb9, 0x19, 0x57,
+	0xb9, 0xa1, 0xab, 0x30, 0x49, 0xe2, 0x5b, 0xfd, 0x42, 0x56, 0xa3, 0x08, 0x76, 0x61, 0x6e, 0x8d,
+	0x7e, 0x3b, 0xe5, 0x3c, 0x41, 0x6e, 0x9a, 0x2d, 0xde, 0x3b, 0x10, 0xa3, 0x0e, 0x39, 0xe6, 0x79,
+	0x1b, 0x41, 0xb8, 0xc5, 0xbd, 0x56, 0x6e, 0x0d, 0xbb, 0xaf, 0xef, 0x24, 0x12, 0x66, 0x0f, 0x8e,
+	0x37, 0xc3, 0x60, 0x5b, 0xfd, 0xad, 0x9d, 0x8f, 0xec, 0x03, 0x36, 0xef, 0x61, 0xfe, 0xce, 0x5e,
+	0xf9, 0xd0, 0x3b, 0x40, 0x80, 0xfa, 0xee, 0x09, 0x92, 0x50, 0x8c, 0x4e, 0x5d, 0x7f, 0x6f, 0x07,
+	0x95, 0x75, 0xbf, 0x2b, 0xe7, 0x41, 0x53, 0x09, 0x52, 0xfe, 0xd1, 0xde, 0x63, 0x03, 0x08, 0x7c,
+	0x18, 0xc2, 0x22, 0xc9, 0x43, 0xfa, 0xbd, 0x97, 0x07, 0xf2, 0x26, 0x74, 0x85, 0xff, 0x64, 0xfb,
+	0x35, 0xd1, 0xbd, 0xaa, 0x36, 0xec, 0x9f, 0x6d, 0x63, 0x17, 0xf3, 0x59, 0x88, 0x3c, 0xfd, 0x58,
+	0xe9, 0x5f, 0xec, 0x94, 0xf6, 0x7c, 0x9b, 0x47, 0xfa, 0xce, 0x1d, 0xae, 0xe5, 0x5f, 0x6d, 0xab,
+	0x80, 0x93, 0xee, 0xaa, 0x64, 0x1b, 0x3b, 0x1c, 0x94, 0xa0, 0xff, 0x66, 0x5b, 0xc5, 0x7e, 0xec,
+	0xa3, 0x74, 0x40, 0x27, 0xfd, 0x7b, 0xca, 0x79, 0x34, 0xee, 0x49, 0x6d, 0x8c, 0x9a, 0x69, 0x1b,
+	0x8e, 0x59, 0x1d, 0xe6, 0xd1, 0xff, 0x38, 0x09, 0x07, 0x07, 0x76, 0x85, 0xc5, 0x52, 0xf6, 0x9f,
+	0x27, 0xe1, 0x62, 0x87, 0xa9, 0x7c, 0xf6, 0x5f, 0xb6, 0x09, 0x6d, 0x1c, 0xde, 0x96, 0x57, 0x02,
+	0x51, 0xc1, 0xff, 0xb6, 0x73, 0x4a, 0xb1, 0x1d, 0xd5, 0xed, 0x7b, 0xd9, 0xc6, 0x1e, 0xff, 0x37,
+	0xdd, 0x0f, 0x52, 0x4d, 0x55, 0x02, 0xf4, 0xff, 0xd2, 0x96, 0x39, 0xd4, 0x4e, 0x97, 0x82, 0x47,
+	0xee, 0xdd, 0xa7, 0xd7, 0x58, 0x37, 0xc2, 0xfb, 0x5a, 0xf4, 0x9d, 0x69, 0xe7, 0x71, 0x72, 0xe3,
+	0x65, 0xd5, 0xcf, 0x76, 0x71, 0x67, 0xff, 0x40, 0x7a, 0x60, 0x5b, 0xae, 0x7b, 0x42, 0xea, 0x47,
+	0x06, 0xd8, 0x51, 0xe7, 0xd6, 0xe8, 0xbb, 0x6c, 0xd4, 0xa0, 0x1b, 0xdc, 0x5c, 0x9d, 0x97, 0x1b,
+	0xf4, 0xdd, 0x69, 0x2b, 0x54, 0x12, 0xf7, 0x5c, 0x15, 0xff, 0x3d, 0x69, 0xdb, 0xb0, 0xb1, 0x9f,
+	0x31, 0xc3, 0xcb, 0xc0, 0xe7, 0x90, 0x59, 0x58, 0xd3, 0xa3, 0xef, 0x4d, 0x5b, 0x19, 0xba, 0xc8,
+	0x5b, 0x1e, 0x2b, 0xf3, 0xde, 0x53, 0xa7, 0x1f, 0xb2, 0x67, 0xb1, 0xb8, 0xa6, 0x38, 0xfc, 0xb0,
+	0xad, 0x2b, 0x1a, 0x32, 0xcf, 0x5a, 0xc6, 0x58, 0x5d, 0x53, 0xaf, 0xdf, 0x97, 0xb6, 0xb2, 0x89,
+	0x79, 0x76, 0xe9, 0xe6, 0xc2, 0x6e, 0x24, 0xe1, 0x54, 0x19, 0x40, 0x63, 0xcc, 0x43, 0x38, 0xd2,
+	0xff, 0x88, 0xed, 0x98, 0x61, 0x5a, 0xe7, 0x85, 0x4f, 0x7f, 0xfc, 0x65, 0x41, 0x9d, 0x16, 0x7d,
+	0x7f, 0xda, 0xea, 0xae, 0x72, 0x75, 0xce, 0xa4, 0x9b, 0x65, 0xfa, 0x40, 0xfc, 0x13, 0x43, 0xf5,
+	0x31, 0x4a, 0x80, 0x42, 0x5a, 0x37, 0xfa, 0x01, 0xdb, 0x8a, 0xf6, 0x33, 0x53, 0x3c, 0x38, 0x94,
+	0xe3, 0x53, 0xc8, 0x87, 0xd2, 0x03, 0x95, 0xcc, 0xc2, 0x15, 0xf9, 0x51, 0x10, 0xfa, 0xf4, 0xa7,
+	0xec, 0x80, 0x4a, 0x80, 0x14, 0x00, 0x72, 0xe6, 0x4f, 0xa7, 0x07, 0x4a, 0xd9, 0x7d, 0x48, 0x03,
+	0xbd, 0xca, 0xfe, 0x33, 0xb6, 0x4b, 0x74, 0x6b, 0x88, 0xfd, 0x83, 0x0e, 0xdb, 0x9f, 0xb5, 0xf9,
+	0x7a, 0x77, 0xe8, 0x1b, 0xb9, 0xb8, 0xe3, 0x7e, 0x2e, 0x6d, 0xa5, 0x59, 0x65, 0x18, 0x3c, 0xeb,
+	0x9a, 0x1e, 0x87, 0x7e, 0x38, 0x6d, 0x95, 0x27, 0x1b, 0xd0, 0x3e, 0xf2, 0x44, 0x99, 0xfe, 0x7c,
+	0xda, 0x6a, 0xe9, 0xf4, 0x33, 0x7e, 0xbc, 0x23, 0x42, 0x7f, 0xe1, 0x44, 0x23, 0x60, 0x68, 0xab,
+	0xb3, 0xe2, 0x47, 0xd2, 0x03, 0x95, 0xb8, 0xf7, 0xf0, 0x46, 0x3d, 0x5f, 0xfe, 0xa5, 0x21, 0xdb,
+	0xe4, 0xb8, 0xac, 0x8e, 0xa4, 0x85, 0x90, 0x47, 0xa2, 0xc2, 0x7d, 0x49, 0x7f, 0xc5, 0x9e, 0x2d,
+	0xc7, 0xa2, 0x3a, 0xde, 0x9a, 0xeb, 0x21, 0x71, 0xc7, 0x7d, 0x2c, 0xed, 0x5c, 0x27, 0x97, 0x4f,
+	0x06, 0x69, 0x9b, 0xfd, 0x6a, 0x3a, 0x91, 0x77, 0xd5, 0x7d, 0xde, 0x0d, 0x6c, 0x0f, 0xb0, 0x62,
+	0xff, 0x86, 0xed, 0x95, 0x64, 0x93, 0x14, 0x49, 0x7c, 0x65, 0xe0, 0x37, 0x6d, 0xab, 0xe2, 0x46,
+	0x28, 0xe0, 0xc3, 0x2a, 0xaf, 0xac, 0x1f, 0x9a, 0xff, 0x96, 0xed, 0x7c, 0xfb, 0x91, 0x92, 0x85,
+	0xf9, 0xb8, 0xbd, 0x17, 0xf5, 0xf3, 0xeb, 0x63, 0xec, 0xc4, 0x3a, 0x3c, 0xa4, 0xbf, 0x63, 0xc7,
+	0x22, 0x3e, 0x4e, 0xdf, 0x14, 0x55, 0x99, 0x65, 0x35, 0x77, 0x87, 0x1d, 0x71, 0xcf, 0x7d, 0x5a,
+	0xf5, 0xe8, 0xf4, 0x93, 0xb6, 0x2a, 0x2f, 0xb4, 0x99, 0xbf, 0xc5, 0xfc, 0xda, 0x3e, 0x44, 0x76,
+	0x9e, 0x1d, 0x43, 0xdd, 0xfa, 0x54, 0xda, 0xca, 0xa5, 0xb9, 0x30, 0x88, 0xa2, 0x04, 0x4a, 0xd9,
+	0x04, 0x80, 0x9f, 0xb6, 0xf7, 0xc9, 0x20, 0xf0, 0x50, 0xf0, 0x87, 0x5a, 0xe4, 0x67, 0x6c, 0xdd,
+	0x06, 0x91, 0x7b, 0x2d, 0xee, 0xe3, 0xce, 0xfb, 0xac, 0x9d, 0x2f, 0x87, 0x4c, 0xcd, 0xfc, 0x06,
+	0x04, 0xa9, 0x96, 0xfa, 0xb9, 0x84, 0xf7, 0x00, 0x9d, 0x67, 0xc7, 0xbd, 0x58, 0x02, 0xf4, 0x21,
+	0xf3, 0xe8, 0x17, 0xec, 0x90, 0x42, 0xd8, 0x7e, 0xd0, 0xc2, 0xac, 0x1f, 0xcf, 0xfb, 0xc5, 0xb4,
+	0x73, 0x97, 0x3c, 0x7e, 0xa2, 0x24, 0xfc, 0xb7, 0xed, 0x57, 0x83, 0x83, 0x56, 0x85, 0x49, 0x55,
+	0xe9, 0xbe, 0x34, 0xb0, 0xf5, 0xd7, 0x78, 0x13, 0xba, 0x8d, 0x30, 0x60, 0x95, 0x1c, 0x8b, 0xf4,
+	0x83, 0x6d, 0xfa, 0x07, 0xb6, 0x63, 0xf1, 0x36, 0xa6, 0xba, 0x95, 0x58, 0xe4, 0xd5, 0x20, 0xac,
+	0xa9, 0xbb, 0xde, 0x5f, 0xb6, 0xe3, 0xc7, 0xc2, 0x94, 0xea, 0xa2, 0x2a, 0x11, 0xf1, 0x27, 0x09,
+	0x9f, 0x58, 0x0d, 0xd7, 0x76, 0x25, 0x80, 0x2a, 0xd0, 0x35, 0xa1, 0xfa, 0x55, 0xdb, 0xbb, 0xfa,
+	0x7d, 0x8a, 0xf8, 0xed, 0x04, 0x2f, 0x90, 0xf4, 0x6b, 0xb6, 0xd1, 0x0a, 0x5c, 0x3e, 0x2f, 0xba,
+	0x6d, 0x6e, 0x6e, 0xc1, 0x21, 0x1c, 0x27, 0xfc, 0x7a, 0x5f, 0x48, 0x2b, 0x98, 0x7a, 0x31, 0x50,
+	0x6d, 0xe7, 0x6f, 0x24, 0x12, 0x05, 0x0b, 0xf5, 0xb3, 0xee, 0x78, 0xf3, 0xd0, 0x6f, 0xda, 0xfb,
+	0x34, 0xf9, 0x26, 0x04, 0xf4, 0xa4, 0xba, 0x41, 0xfc, 0xcb, 0xa4, 0x77, 0x6c, 0xd4, 0xb6, 0x2f,
+	0xc0, 0xd5, 0xf4, 0x5b, 0x76, 0xae, 0xde, 0x60, 0x91, 0xb4, 0x1a, 0x8e, 0xbf, 0xb2, 0xb3, 0x51,
+	0xb1, 0x79, 0xb4, 0x1f, 0xa8, 0xe7, 0x16, 0x5a, 0xfa, 0xb7, 0x6d, 0xeb, 0x9b, 0x63, 0x2e, 0xfa,
+	0x7e, 0x8d, 0x75, 0xb5, 0xc9, 0xfe, 0xda, 0xc6, 0x14, 0x03, 0x18, 0xbd, 0x1f, 0x64, 0x03, 0x4f,
+	0xc0, 0xe6, 0xd2, 0x72, 0xfe, 0xc6, 0xc6, 0xe0, 0x39, 0x16, 0x6a, 0xb2, 0x55, 0xc5, 0x23, 0x49,
+	0xbf, 0x9b, 0x5e, 0xf9, 0xfd, 0x31, 0x32, 0x99, 0x67, 0x42, 0xdd, 0x6e, 0x5e, 0x20, 0xb3, 0xe6,
+	0xbf, 0x79, 0xf4, 0x31, 0x4f, 0xa6, 0x63, 0xd2, 0x66, 0x9e, 0xa6, 0x9c, 0x45, 0x32, 0x1f, 0x13,
+	0xd4, 0x21, 0x96, 0xa6, 0x13, 0x03, 0x61, 0x1a, 0xf5, 0x36, 0x47, 0x4c, 0xc2, 0x6a, 0x4e, 0x47,
+	0x9d, 0x0c, 0x59, 0x8a, 0x69, 0x56, 0x48, 0xd0, 0x31, 0xe7, 0x14, 0x71, 0x7a, 0xd3, 0x40, 0x68,
+	0xa2, 0x94, 0x71, 0xe7, 0x34, 0x59, 0x8c, 0xe9, 0xbd, 0xb6, 0x96, 0x4e, 0x24, 0x18, 0xbd, 0x56,
+	0x86, 0x4e, 0x26, 0x18, 0xd6, 0x4b, 0x4b, 0x53, 0x09, 0xc6, 0xa1, 0x68, 0x99, 0x07, 0x30, 0xc4,
+	0xa1, 0x64, 0x26, 0x66, 0x14, 0x58, 0x97, 0x4e, 0x27, 0xb4, 0xc1, 0xe7, 0x74, 0xf8, 0x1c, 0x71,
+	0x26, 0x41, 0x87, 0x94, 0x88, 0x6e, 0xa1, 0xb3, 0x03, 0x74, 0xb5, 0xde, 0x39, 0x67, 0x89, 0xd0,
+	0x04, 0x3d, 0xcf, 0x5a, 0x74, 0xde, 0x39, 0x4f, 0x32, 0x7d, 0x6b, 0x55, 0xe5, 0xa2, 0x10, 0x72,
+	0x4a, 0x9d, 0x4b, 0xe4, 0xdc, 0x50, 0xae, 0x6e, 0xa8, 0x17, 0x9c, 0x8b, 0xe4, 0xec, 0x50, 0x80,
+	0xca, 0xb8, 0xce, 0x89, 0x02, 0x60, 0x93, 0xf2, 0x90, 0x2e, 0x3a, 0x67, 0xc8, 0xb2, 0xa5, 0x95,
+	0xcf, 0xf5, 0x4b, 0x52, 0x9c, 0x2e, 0x25, 0x58, 0xea, 0x7c, 0xa5, 0x23, 0x6e, 0x79, 0x60, 0x2d,
+	0x50, 0x23, 0x4e, 0x25, 0xa8, 0x9b, 0x79, 0xb7, 0xc4, 0xbd, 0x2a, 0x3d, 0x3d, 0x60, 0x0f, 0xcc,
+	0xfc, 0x34, 0x93, 0x70, 0x41, 0x2f, 0x01, 0xd1, 0x33, 0x89, 0xf8, 0x81, 0xfc, 0x40, 0xcf, 0x3a,
+	0xcb, 0x64, 0xc1, 0x0a, 0x29, 0x4f, 0x94, 0xb6, 0x82, 0x16, 0x3d, 0xe7, 0x5c, 0x20, 0x67, 0x7a,
+	0xe1, 0xa7, 0x1e, 0x9b, 0x14, 0x42, 0xd1, 0x11, 0x1e, 0xaf, 0x71, 0x7a, 0x7e, 0xc5, 0x27, 0xf3,
+	0x50, 0xda, 0xf5, 0x13, 0x76, 0xf3, 0x72, 0x61, 0x2e, 0xbf, 0x6f, 0x1e, 0xa0, 0x50, 0x32, 0x03,
+	0x57, 0x85, 0xf5, 0x62, 0x69, 0x6f, 0x77, 0x75, 0x47, 0xbd, 0x94, 0x04, 0x94, 0x07, 0x7b, 0xc5,
+	0x9d, 0x35, 0xf5, 0x52, 0x12, 0x5c, 0x6e, 0x1e, 0x6c, 0xef, 0xac, 0xd1, 0x11, 0x83, 0x37, 0x49,
+	0x9d, 0x12, 0x67, 0x9a, 0x4c, 0x00, 0x05, 0x7c, 0x39, 0xbd, 0xc2, 0xd5, 0x23, 0x7d, 0x3d, 0x5f,
+	0xa9, 0xad, 0x5e, 0x59, 0x5d, 0x26, 0x0b, 0x00, 0x29, 0x1d, 0x64, 0xdd, 0xfd, 0x17, 0x0a, 0xeb,
+	0x66, 0xee, 0x73, 0xe4, 0x74, 0x82, 0x6c, 0x05, 0x74, 0x6a, 0x80, 0x69, 0xc5, 0x6e, 0x7a, 0xe5,
+	0x83, 0x29, 0x42, 0x95, 0x1b, 0x8b, 0xbc, 0x1c, 0x84, 0x15, 0x9c, 0xe5, 0x0c, 0x59, 0xee, 0xa7,
+	0x99, 0x5d, 0x7b, 0x8e, 0x9c, 0x1e, 0xc2, 0xc2, 0x07, 0x34, 0xa9, 0xa1, 0xcc, 0x43, 0x1e, 0x46,
+	0xed, 0x88, 0xa6, 0x87, 0x0a, 0xd5, 0x3b, 0x7a, 0x18, 0x0b, 0x33, 0xda, 0xe8, 0xca, 0xb7, 0x52,
+	0x64, 0xd1, 0xe6, 0x19, 0x43, 0xc4, 0xef, 0x10, 0x25, 0xc8, 0x46, 0xcb, 0x2b, 0xe4, 0xc2, 0x30,
+	0x6e, 0x9c, 0xac, 0x28, 0x1c, 0xdf, 0x2e, 0x0e, 0x15, 0xc0, 0x1f, 0x1e, 0x09, 0x8e, 0x18, 0xc8,
+	0xfa, 0xe7, 0x87, 0x61, 0xe2, 0x3b, 0xbb, 0x23, 0x10, 0x34, 0xc3, 0x10, 0xea, 0x0d, 0xc2, 0x51,
+	0xe7, 0x3a, 0xb9, 0x32, 0x8c, 0x9d, 0x48, 0xbe, 0x74, 0x6c, 0xe5, 0xc7, 0x52, 0x64, 0x6e, 0xbd,
+	0xc0, 0xa5, 0xba, 0x1f, 0x80, 0xeb, 0x3b, 0x4d, 0x16, 0x93, 0x14, 0xb3, 0xb4, 0xb3, 0xe4, 0x54,
+	0x1f, 0xc3, 0x3c, 0xca, 0x47, 0xfb, 0xf7, 0xf1, 0x56, 0x2b, 0x1d, 0xf3, 0xac, 0xf8, 0x0c, 0x59,
+	0xee, 0x97, 0x88, 0x15, 0x8c, 0x8e, 0xe0, 0x83, 0xf6, 0x3e, 0x56, 0xbb, 0x49, 0x47, 0x57, 0x7e,
+	0x74, 0x94, 0xcc, 0xae, 0x9b, 0x13, 0x0a, 0xaa, 0x05, 0x48, 0x9b, 0x60, 0xb4, 0x7a, 0x84, 0x5c,
+	0x4e, 0xd2, 0xd7, 0x98, 0xf0, 0xba, 0x6e, 0xae, 0xdd, 0x8c, 0xdf, 0x8d, 0xa0, 0x50, 0x23, 0xcf,
+	0x25, 0x51, 0x77, 0x9f, 0xc6, 0x77, 0x33, 0xd4, 0x9b, 0x0f, 0x74, 0x14, 0x1f, 0xdf, 0x0f, 0x05,
+	0xec, 0xb3, 0xa8, 0x41, 0xc7, 0xf0, 0xf5, 0x9f, 0x24, 0xff, 0xce, 0x9d, 0x58, 0xfe, 0x38, 0xda,
+	0x26, 0xc1, 0x5e, 0x3f, 0x56, 0x8f, 0x67, 0xe8, 0xc4, 0xe0, 0xdc, 0xab, 0x65, 0x21, 0x45, 0x47,
+	0x76, 0xb1, 0xcd, 0xa5, 0x93, 0x68, 0xbc, 0x04, 0x20, 0xee, 0x81, 0xe9, 0x14, 0x84, 0x5b, 0x92,
+	0xb9, 0x23, 0x1a, 0xec, 0x48, 0xa0, 0xdd, 0xc9, 0xa0, 0xda, 0xd0, 0xb4, 0xc6, 0xb5, 0x7f, 0x7a,
+	0xd0, 0x6a, 0xf7, 0x85, 0x5f, 0xa3, 0x33, 0xe8, 0xe4, 0x04, 0xfd, 0x41, 0x9d, 0x73, 0x8f, 0xce,
+	0xe2, 0x3b, 0x1e, 0x09, 0x46, 0xa9, 0xdd, 0x84, 0x7c, 0x36, 0x37, 0x84, 0x23, 0x6a, 0xfe, 0xb6,
+	0x4f, 0xe7, 0x9d, 0x6b, 0xe4, 0x52, 0x92, 0x33, 0xf8, 0xde, 0xc2, 0xd2, 0xa0, 0x9f, 0x86, 0xbc,
+	0xf4, 0xb0, 0x3c, 0x68, 0xe6, 0xec, 0xbe, 0x5b, 0x6a, 0xb2, 0xa8, 0xbe, 0x5e, 0xab, 0xd1, 0x53,
+	0x2b, 0xef, 0x4f, 0x91, 0xd9, 0x02, 0xeb, 0xee, 0x85, 0x15, 0x1e, 0x96, 0x24, 0x93, 0x3a, 0x5a,
+	0x6d, 0x8a, 0x89, 0x0b, 0x8c, 0xac, 0x04, 0x63, 0x93, 0x43, 0x4e, 0x82, 0x65, 0x24, 0xe9, 0x70,
+	0xd5, 0x50, 0xaf, 0x34, 0x0c, 0x72, 0x36, 0x98, 0xf0, 0x78, 0x85, 0x8e, 0xa0, 0xa5, 0x87, 0x8c,
+	0xd3, 0xb5, 0x64, 0x74, 0xe5, 0x13, 0x23, 0x64, 0xa6, 0xc0, 0xba, 0x9b, 0x41, 0x50, 0x89, 0x4c,
+	0xe3, 0x01, 0x03, 0xec, 0x58, 0x5d, 0x26, 0x0b, 0x31, 0x69, 0x4d, 0x44, 0xea, 0x51, 0x55, 0xca,
+	0xa8, 0xda, 0x57, 0x9a, 0xd3, 0x09, 0xba, 0xca, 0x74, 0x59, 0x56, 0xa3, 0x23, 0x09, 0x31, 0x78,
+	0x7f, 0x17, 0xc8, 0xa3, 0x09, 0x78, 0xaf, 0x92, 0x8f, 0x0d, 0xd0, 0x55, 0x25, 0x1f, 0xc7, 0xd7,
+	0x16, 0x6d, 0x3a, 0x64, 0xff, 0x09, 0x63, 0x9f, 0xb8, 0x92, 0x9a, 0x42, 0x3a, 0x99, 0xe0, 0x58,
+	0x45, 0x98, 0x4e, 0x0d, 0x48, 0x82, 0x3a, 0x4a, 0x06, 0xe6, 0x55, 0x15, 0x73, 0x3a, 0xa1, 0x3e,
+	0xd0, 0xb1, 0x38, 0xce, 0x24, 0xed, 0x95, 0xdd, 0x7a, 0x86, 0xde, 0x53, 0x59, 0x45, 0x93, 0xfa,
+	0x5e, 0xe2, 0xad, 0x60, 0xa8, 0x18, 0xe6, 0x40, 0xd5, 0xe4, 0x89, 0xd9, 0x0b, 0x0c, 0xba, 0x44,
+	0x5e, 0x6e, 0xd0, 0xaa, 0xca, 0x62, 0xcc, 0x04, 0x97, 0x91, 0x77, 0xf7, 0xce, 0x1d, 0x5a, 0x5b,
+	0xf9, 0xc9, 0x14, 0x99, 0xc9, 0x77, 0xa3, 0x97, 0xbc, 0x9d, 0xa0, 0x86, 0x3e, 0x9c, 0x23, 0x64,
+	0xc7, 0x76, 0x20, 0x25, 0x33, 0x3b, 0x56, 0x23, 0x41, 0x53, 0xa0, 0xb5, 0xa6, 0x54, 0xab, 0x48,
+	0xc2, 0x6a, 0xbb, 0x13, 0x37, 0x5e, 0x23, 0xbd, 0xcb, 0x62, 0x36, 0x4f, 0x47, 0xa1, 0xf9, 0x54,
+	0x97, 0x2a, 0x3b, 0x8e, 0x41, 0xf3, 0x69, 0xcb, 0x84, 0xfc, 0xb7, 0x64, 0x11, 0x21, 0xde, 0xf0,
+	0x96, 0xc0, 0xf2, 0xca, 0x3b, 0x67, 0xc8, 0x28, 0x7e, 0xae, 0x32, 0x49, 0x46, 0xb5, 0x42, 0x13,
+	0x64, 0xa4, 0x24, 0x43, 0x9a, 0x82, 0x3f, 0xab, 0x35, 0x41, 0xd3, 0xf0, 0x67, 0xdb, 0x97, 0x74,
+	0x04, 0xfe, 0x1c, 0x0a, 0x49, 0x47, 0xe1, 0xcf, 0x1a, 0x3f, 0xa6, 0x63, 0xf0, 0x67, 0xa7, 0xdd,
+	0xa0, 0xe3, 0x30, 0x7e, 0x47, 0x54, 0x21, 0x37, 0x8d, 0x93, 0x74, 0x09, 0x52, 0x10, 0x21, 0xe3,
+	0xea, 0x4b, 0x3e, 0xf5, 0x65, 0x80, 0xf5, 0xf5, 0x9f, 0xea, 0x0e, 0xf4, 0x87, 0x7a, 0x74, 0x5a,
+	0x75, 0x96, 0xbd, 0x4f, 0xf7, 0xe8, 0x0c, 0x88, 0xdd, 0x12, 0x92, 0xce, 0x3a, 0x53, 0x64, 0x6c,
+	0x2d, 0xa8, 0xd4, 0x38, 0x9d, 0x83, 0x19, 0x72, 0xa1, 0x90, 0x74, 0x1e, 0xb8, 0xfb, 0xdc, 0x57,
+	0xef, 0xff, 0xaf, 0xf6, 0xbe, 0xc0, 0xa3, 0x0b, 0xd8, 0xc4, 0xb0, 0x48, 0xae, 0x96, 0xcb, 0xd0,
+	0xe2, 0x4d, 0x91, 0xb1, 0x3c, 0x3b, 0xde, 0x6a, 0xd1, 0x45, 0xfd, 0xb7, 0xd4, 0xa2, 0x4b, 0xea,
+	0x13, 0x02, 0xf5, 0x59, 0x1e, 0x5d, 0x06, 0x11, 0xa5, 0xfd, 0xa2, 0xab, 0x3f, 0x86, 0xa2, 0x97,
+	0x50, 0xe6, 0xe6, 0x76, 0x4c, 0xb8, 0x0c, 0x84, 0xed, 0xdd, 0xfd, 0x98, 0x70, 0x05, 0x08, 0x87,
+	0xdb, 0x3d, 0xc2, 0x55, 0x20, 0xac, 0xad, 0xbf, 0x29, 0x26, 0x5c, 0x43, 0x87, 0x1c, 0xdc, 0x8f,
+	0x09, 0x8f, 0xa0, 0x93, 0x45, 0x95, 0xc7, 0x94, 0xeb, 0x10, 0x06, 0xa5, 0x56, 0x7c, 0xfd, 0x28,
+	0x9c, 0x03, 0xd4, 0x52, 0x62, 0xda, 0x0d, 0xd5, 0x07, 0xc6, 0x56, 0x8b, 0x19, 0x37, 0xc1, 0x95,
+	0xda, 0x56, 0x31, 0xf1, 0x96, 0x3a, 0x35, 0xf4, 0xac, 0x18, 0x73, 0x56, 0x40, 0x9d, 0x2d, 0x21,
+	0x63, 0xc2, 0x63, 0xf8, 0x26, 0x25, 0x58, 0x35, 0x26, 0x3d, 0x8e, 0x0d, 0x5c, 0x68, 0x81, 0x9e,
+	0xc0, 0xb7, 0xb5, 0xb9, 0x1f, 0x13, 0x6e, 0x83, 0x3a, 0x96, 0xb5, 0x63, 0x06, 0xbe, 0x46, 0x62,
+	0xac, 0xee, 0x71, 0xf5, 0x51, 0x61, 0xcc, 0xbd, 0xa3, 0x9a, 0xd6, 0xe3, 0xad, 0xde, 0x62, 0xef,
+	0x6a, 0x92, 0xb5, 0xfe, 0x7b, 0xea, 0xf3, 0x04, 0xe5, 0x95, 0x98, 0xfa, 0x14, 0x48, 0xd6, 0x27,
+	0x53, 0x08, 0x4e, 0x57, 0x7d, 0xb8, 0xa6, 0x5e, 0x41, 0xa1, 0x1b, 0x90, 0x3f, 0x87, 0x70, 0xcd,
+	0xe8, 0x4d, 0xa8, 0x92, 0x9a, 0xff, 0x80, 0x49, 0x7c, 0x73, 0x32, 0x01, 0xd8, 0x82, 0x96, 0x48,
+	0x03, 0x36, 0xc3, 0xa0, 0xed, 0x57, 0xfa, 0x11, 0xdb, 0xd6, 0x14, 0x1b, 0x22, 0x1c, 0x98, 0xe2,
+	0x39, 0x8b, 0xff, 0x40, 0x0c, 0x8e, 0xbf, 0x6f, 0xa9, 0x50, 0x62, 0xc2, 0x97, 0xfd, 0x80, 0x1d,
+	0x4b, 0xc0, 0x1a, 0x0b, 0x1b, 0xfd, 0xfc, 0xbc, 0xa5, 0x22, 0xae, 0x71, 0xd5, 0x97, 0x22, 0x61,
+	0x85, 0x02, 0xf4, 0x7e, 0x27, 0x20, 0x8c, 0x94, 0xe7, 0xa1, 0x9c, 0x26, 0x2c, 0x31, 0x04, 0x54,
+	0x84, 0x72, 0x9a, 0xb4, 0xc6, 0x10, 0x54, 0xc9, 0x9a, 0x0e, 0x2d, 0x32, 0x04, 0xb3, 0x6f, 0x61,
+	0xd0, 0x2a, 0x43, 0x30, 0x07, 0x96, 0x4a, 0xca, 0x32, 0x43, 0x40, 0x87, 0x96, 0x20, 0xb4, 0xce,
+	0x10, 0xcc, 0x03, 0x08, 0x4b, 0xeb, 0x6b, 0xd6, 0x98, 0xf1, 0x66, 0x75, 0x06, 0xaa, 0x89, 0xb2,
+	0x3b, 0x8c, 0xfd, 0x16, 0xd8, 0x2f, 0x05, 0xeb, 0xdb, 0xd1, 0x98, 0xf3, 0xd6, 0x78, 0xdf, 0xf5,
+	0x31, 0xde, 0x06, 0x12, 0x41, 0x05, 0x37, 0x31, 0x4e, 0x7f, 0x66, 0x49, 0x5d, 0x7c, 0xa5, 0x1f,
+	0xd8, 0xc3, 0x06, 0xe3, 0x4b, 0x99, 0xb9, 0xf8, 0x2b, 0xd7, 0x98, 0xce, 0x20, 0x44, 0x0a, 0x83,
+	0xdf, 0xb0, 0xc6, 0x80, 0x23, 0x75, 0x92, 0xad, 0x9d, 0xc4, 0x2f, 0x43, 0x2f, 0xbc, 0x61, 0x7f,
+	0x86, 0x1a, 0xb3, 0x2a, 0xa0, 0xd1, 0x61, 0xdf, 0x77, 0xa6, 0x31, 0x97, 0x3b, 0x93, 0x64, 0x24,
+	0xcf, 0x8e, 0xe9, 0x77, 0x26, 0x56, 0x3e, 0x96, 0x22, 0xe3, 0xca, 0xd0, 0x90, 0x5b, 0xd4, 0x3f,
+	0x75, 0xca, 0x0c, 0x24, 0xa3, 0xaf, 0xe8, 0x23, 0x62, 0xa1, 0x48, 0xc1, 0x96, 0xb5, 0x88, 0x18,
+	0x58, 0x34, 0x0d, 0xa5, 0xd8, 0xa2, 0xaa, 0x48, 0xa2, 0x23, 0x7d, 0x12, 0x20, 0x74, 0xd4, 0xe7,
+	0x67, 0xb6, 0x04, 0xe1, 0x57, 0xe8, 0x58, 0x9f, 0xd8, 0x1d, 0x51, 0xab, 0x4b, 0xf5, 0xd5, 0x8a,
+	0x45, 0x85, 0x68, 0xa0, 0x13, 0x59, 0xfa, 0xe2, 0xdc, 0xed, 0x27, 0x9f, 0xb5, 0xbe, 0xbd, 0x3b,
+	0x1a, 0xc7, 0x9f, 0xa7, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x35, 0x0b, 0x8a, 0x08, 0x40,
+	0x00, 0x00,
 }

+ 1 - 0
RO_Server_Trunk-branch_0.1.39/roserver/serverproto/common.proto

@@ -167,6 +167,7 @@ enum TaskType {
 
     BT_ZhenJiaRecharge                  = 100; // bt真假累计充值
     BT_ROCoinRecharge                   = 101; // bt Ro币累计获得
+    Level_Hard_Battle_Count             = 102; //通关困难指定关卡                  [102:关卡ID:关卡次数]
 
 }
 //超值礼包触发条件

+ 44 - 6
RO_Server_Trunk-branch_0.1.39/roserver/serverproto/config_csv.go

@@ -219,9 +219,11 @@ func configNameListInit() {
 	CFGNameList["JobExpCfg"] = JobExpCfgLoad
 	CFGNameList["KeepSakeCfg"] = KeepSakeCfgLoad
 	CFGNameList["LevelCfg"] = LevelCfgLoad
+	CFGNameList["HardLevelCfg"] = HardLevelCfgLoad
 	CFGNameList["LineMissionCfg"] = LineMissionCfgLoad
 	CFGNameList["MailCfg"] = MailCfgLoad
 	CFGNameList["MissionCfg"] = MissionCfgLoad
+	CFGNameList["HardMissionCfg"] = HardMissionCfgLoad
 	CFGNameList["NatureCfg"] = NatureCfgLoad
 	CFGNameList["NpcCfg"] = NpcCfgLoad
 	CFGNameList["OnlineRewardsCfg"] = OnlineRewardsCfgLoad
@@ -397,6 +399,7 @@ func ConfigInit(path string) {
 	LineMissionCfgLoad(path)
 	MailCfgLoad(path)
 	MissionCfgLoad(path)
+	HardMissionCfgLoad(path)
 	NatureCfgLoad(path)
 	NpcCfgLoad(path)
 	OnlineRewardsCfgLoad(path)
@@ -438,6 +441,7 @@ func ConfigInit(path string) {
 	ServiceRecordCfgLoad(path)
 	ShieldedWordCfgLoad(path)
 	ShopCfgLoad(path)
+	HardLevelCfgLoad(path)
 	ShopTypeCfgLoad(path)
 	SignInCfgLoad(path)
 	SkillCfgLoad(path)
@@ -2223,15 +2227,25 @@ func MissionCfgLoad(path string) {
 	}
 }
 
-var NatureCfgLoader map[int32]*NatureCfg
+var HardMissionCfgLoader map[int32]*HardMissionCfg
 
-type NatureCfg struct {
-	Id              int32  `csv:"Id"`              //屬性id
-	Name            string `csv:"Name"`            //屬性名字
-	NatureAttribute string `csv:"NatureAttribute"` //附加元素屬性
-	AntiNature      string `csv:"AntiNature"`      //承受屬性伤害系数
+type HardMissionCfg struct {
+	MissionID        int32    `csv:"MissionID"`        //任务ID
+	MissionCondition []string `csv:"MissionCondition"` //任务枚举
+	MissionType      int32    `csv:"MissionType"`      //任务类型
+	Reward           []string `csv:"Reward"`           //奖励
+	GroupID          int32    `csv:"GroupID"`          //所属组id
+	GroupReward      []string `csv:"GroupReward"`      //所属组奖励
 }
 
+func HardMissionCfgLoad(path string) {
+	cfg := []*HardMissionCfg{}
+	HardMissionCfgLoader = map[int32]*HardMissionCfg{}
+	loadCsvCfg(path+"HardMissionCfg.csv", &cfg)
+	for _, row := range cfg {
+		HardMissionCfgLoader[row.MissionID] = row
+	}
+}
 func NatureCfgLoad(path string) {
 	cfg := []*NatureCfg{}
 	NatureCfgLoader = map[int32]*NatureCfg{}
@@ -3767,3 +3781,27 @@ func WorldBossChangePlayCfgLoad(path string) {
 		WorldBossChangePlayCfgLoader[row.Id] = row
 	}
 }
+
+var HardLevelCfgLoader map[int32]*HardLevelCfg
+
+type HardLevelCfg struct {
+	Id         int32 `csv:"Id"`         //唯一id
+	LevelId    int32 `csv:"LevelId"`    //场景id
+	MapId      int32 `csv:"MapId"`      //地图id
+	BaseExp    int32 `csv:"BaseExp"`    //通关base经验
+	JobExp     int32 `csv:"JobExp"`     //通关job经验
+	Zeny       int32 `csv:"Zeny"`       //通关银币
+	Gold       int32 `csv:"Gold"`       //通关金币
+	Parter     int32 `csv:"Parter"`     //通关伙伴经验
+	Cash       int32 `csv:"Cash"`       //活动通关现金
+	FreeInvest int32 `csv:"FreeInvest"` //通关免费充值额度
+}
+
+func HardLevelCfgLoad(path string) {
+	cfg := []*HardLevelCfg{}
+	HardLevelCfgLoader = map[int32]*HardLevelCfg{}
+	loadCsvCfg(path+"HardLevelCfg.csv", &cfg)
+	for _, row := range cfg {
+		HardLevelCfgLoader[row.Id] = row
+	}
+}

+ 324 - 315
RO_Server_Trunk-branch_0.1.39/roserver/serverproto/db.pb.go

@@ -2206,6 +2206,7 @@ type SSMapLevelChangeReq struct {
 	NewMapLevelId        uint32            `protobuf:"varint,1,opt,name=new_map_level_id,json=newMapLevelId,proto3" json:"new_map_level_id,omitempty"`
 	PassTime             uint64            `protobuf:"varint,2,opt,name=pass_time,json=passTime,proto3" json:"pass_time,omitempty"`
 	RecordInfo           *BattleRecordInfo `protobuf:"bytes,3,opt,name=record_info,json=recordInfo,proto3" json:"record_info,omitempty"`
+	IsHard               bool              `protobuf:"varint,4,opt,name=isHard,proto3" json:"isHard,omitempty"`
 	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
 	XXX_unrecognized     []byte            `json:"-"`
 	XXX_sizecache        int32             `json:"-"`
@@ -2257,6 +2258,13 @@ func (m *SSMapLevelChangeReq) GetRecordInfo() *BattleRecordInfo {
 	return nil
 }
 
+func (m *SSMapLevelChangeReq) GetIsHard() bool {
+	if m != nil {
+		return m.IsHard
+	}
+	return false
+}
+
 type SSMapLevelChangeAck struct {
 	Error                int32             `protobuf:"varint,1,opt,name=error,proto3" json:"error,omitempty"`
 	Rank                 uint32            `protobuf:"varint,2,opt,name=rank,proto3" json:"rank,omitempty"`
@@ -7160,319 +7168,320 @@ func init() {
 }
 
 var fileDescriptor_8817812184a13374 = []byte{
-	// 5020 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x3b, 0x5d, 0x8f, 0x1c, 0x49,
-	0x52, 0xea, 0xaf, 0x99, 0xee, 0xe8, 0xe9, 0x99, 0x71, 0xad, 0xd7, 0x1e, 0x9f, 0x6f, 0xf7, 0x7c,
-	0xb5, 0xb7, 0x8b, 0xf7, 0xe3, 0x76, 0xef, 0x6c, 0xe3, 0xdd, 0xf5, 0x9a, 0xdd, 0x9d, 0x19, 0xdb,
-	0xb3, 0x73, 0xeb, 0xf1, 0xce, 0x56, 0xcf, 0x78, 0xd1, 0xa1, 0x53, 0x29, 0xbb, 0x2b, 0xbb, 0xbb,
-	0x70, 0x75, 0x55, 0xbb, 0xb2, 0x7a, 0xec, 0xe1, 0x09, 0x9d, 0x00, 0x01, 0x0f, 0x27, 0x5e, 0x78,
-	0x40, 0xc7, 0x03, 0x08, 0x09, 0x84, 0x84, 0x90, 0x78, 0x38, 0x84, 0x78, 0x01, 0xc1, 0x2f, 0x40,
-	0x20, 0x21, 0xf1, 0xc8, 0x0b, 0x82, 0x5f, 0x81, 0x22, 0x22, 0xab, 0x2a, 0xab, 0xbb, 0xba, 0x3d,
-	0xb3, 0xcb, 0x03, 0x4f, 0xd3, 0x15, 0x19, 0x19, 0x19, 0x19, 0x11, 0x19, 0x1f, 0x99, 0x31, 0xd0,
-	0xf4, 0x7a, 0xef, 0x4e, 0xe2, 0x28, 0x89, 0xac, 0xb6, 0x92, 0xf1, 0x89, 0x8c, 0xe9, 0xe3, 0x5b,
-	0x30, 0x55, 0x32, 0xe6, 0x01, 0xfb, 0x77, 0x2a, 0x70, 0xb9, 0xdb, 0xdd, 0xee, 0xf7, 0xa3, 0x69,
-	0x98, 0xec, 0xc9, 0xc4, 0x89, 0x02, 0xf9, 0xd0, 0x57, 0x89, 0x23, 0x9f, 0x5a, 0xaf, 0x00, 0xf4,
-	0x47, 0x22, 0x0c, 0x65, 0xe0, 0xfa, 0xde, 0x56, 0xe5, 0x5a, 0xe5, 0x7a, 0xdd, 0x69, 0x69, 0xc8,
-	0xbe, 0x67, 0x5d, 0x86, 0xd5, 0x68, 0x22, 0x43, 0x1c, 0xab, 0x5e, 0xab, 0x5c, 0x6f, 0x39, 0x2b,
-	0xf8, 0xb9, 0xef, 0x59, 0xdf, 0x82, 0xe6, 0x24, 0x10, 0xc9, 0x20, 0x8a, 0xc7, 0x5b, 0x35, 0x1a,
-	0xc9, 0xbe, 0x71, 0xd2, 0x6f, 0x44, 0xa1, 0xc4, 0x49, 0xf5, 0x6b, 0x95, 0xeb, 0x0d, 0x67, 0x05,
-	0x3f, 0xf7, 0x3d, 0x7b, 0x5a, 0xce, 0xc7, 0x76, 0xff, 0x89, 0xf5, 0x2e, 0x34, 0xe2, 0x28, 0x90,
-	0x6a, 0xab, 0x72, 0xad, 0x76, 0xbd, 0x7d, 0x63, 0xeb, 0x5d, 0x63, 0x33, 0xef, 0xea, 0x29, 0x88,
-	0xef, 0x30, 0x9a, 0xf5, 0x16, 0x5c, 0xf0, 0x95, 0xdb, 0x0f, 0x22, 0x25, 0xdd, 0x58, 0x0e, 0x7d,
-	0x95, 0xc8, 0x98, 0x58, 0x6c, 0x3a, 0x1b, 0xbe, 0xda, 0x45, 0xb8, 0xa3, 0xc1, 0xf6, 0x5f, 0x57,
-	0x60, 0xb3, 0xdb, 0xdd, 0xf6, 0x3c, 0x24, 0xb0, 0x23, 0x70, 0xe4, 0xa9, 0xf5, 0x26, 0xd4, 0x7b,
-	0x42, 0x49, 0xda, 0x72, 0xfb, 0xc6, 0xcb, 0x85, 0xf5, 0x32, 0x3c, 0x42, 0xb1, 0xbe, 0x03, 0x6d,
-	0xd1, 0x4f, 0xfc, 0x13, 0xe9, 0xf6, 0x23, 0x4f, 0x6a, 0x41, 0x00, 0x83, 0x76, 0x23, 0x4f, 0x9a,
-	0x52, 0xaa, 0x15, 0xa4, 0xf4, 0x5d, 0x58, 0x53, 0xd3, 0x9e, 0x9b, 0x49, 0xaa, 0x4e, 0xa3, 0x6d,
-	0x35, 0xed, 0x1d, 0xa6, 0xc2, 0xb2, 0xa0, 0x8e, 0xd2, 0xd9, 0x6a, 0x90, 0xa4, 0xe8, 0xb7, 0xfd,
-	0x70, 0x86, 0x5f, 0x14, 0xd0, 0x26, 0xd4, 0x64, 0x1c, 0x13, 0xbb, 0x0d, 0x07, 0x7f, 0x5a, 0x6f,
-	0xc0, 0x46, 0x3f, 0x96, 0x22, 0x91, 0x2e, 0x8a, 0xc4, 0x9d, 0x6a, 0x1d, 0xd5, 0x9d, 0x0e, 0x83,
-	0x71, 0xf6, 0xb1, 0xef, 0xd9, 0xf7, 0xe1, 0xa5, 0x4c, 0xea, 0x9a, 0xe8, 0xa3, 0x64, 0x70, 0x5e,
-	0x89, 0xdb, 0x77, 0x61, 0xad, 0xdb, 0xd5, 0x5a, 0x43, 0x01, 0xbe, 0x03, 0x16, 0xad, 0x9b, 0x4a,
-	0xdf, 0x4d, 0xfc, 0xb1, 0xd4, 0x16, 0xb4, 0x19, 0x13, 0x12, 0x0f, 0x1c, 0xf9, 0x63, 0x69, 0xef,
-	0x19, 0xb3, 0xcb, 0xb7, 0xf3, 0x3a, 0xd4, 0x71, 0x16, 0xed, 0xa1, 0x7d, 0xe3, 0xc2, 0x9c, 0x42,
-	0x1c, 0x1a, 0xb6, 0x2f, 0x82, 0x95, 0x11, 0x7a, 0xe0, 0x87, 0xbe, 0x1a, 0x3d, 0x4a, 0x06, 0xf6,
-	0xc7, 0x70, 0xa1, 0xdb, 0x4d, 0xc5, 0xd5, 0x15, 0x27, 0xe7, 0x54, 0x31, 0xcf, 0xff, 0x4c, 0xc6,
-	0xd1, 0x3d, 0x91, 0x08, 0x63, 0xfe, 0x48, 0xc6, 0xd1, 0xc2, 0xf9, 0x88, 0xef, 0x10, 0x8a, 0xbd,
-	0x83, 0x5c, 0xdd, 0x7f, 0x3a, 0xf5, 0x27, 0x26, 0x81, 0x77, 0xa0, 0x21, 0x11, 0xa6, 0x29, 0x5c,
-	0x9a, 0xa3, 0x40, 0x33, 0x1c, 0x46, 0xb2, 0x7f, 0x97, 0x8e, 0x69, 0xf7, 0x89, 0x1f, 0x04, 0x73,
-	0x94, 0xee, 0x42, 0x5b, 0xe1, 0x80, 0x6b, 0xd2, 0xbb, 0x3a, 0x47, 0x2f, 0x9f, 0xec, 0x80, 0xca,
-	0x7e, 0x5b, 0xef, 0xc1, 0x45, 0x63, 0xb6, 0xeb, 0xc9, 0xc0, 0x0d, 0x7c, 0x95, 0x6c, 0x55, 0xaf,
-	0xd5, 0xae, 0x77, 0x9c, 0x0b, 0x39, 0xe6, 0x3d, 0x19, 0xe0, 0x81, 0xb4, 0xef, 0xa0, 0x01, 0xee,
-	0x88, 0xa1, 0xc9, 0xc2, 0x1b, 0x50, 0xeb, 0x89, 0xa1, 0x5e, 0xfa, 0x62, 0x89, 0x30, 0x87, 0x0e,
-	0x22, 0xb0, 0x28, 0x77, 0x47, 0x45, 0xfe, 0xdf, 0x84, 0x7a, 0x7f, 0x94, 0x31, 0x3e, 0x2f, 0x4a,
-	0xc4, 0x77, 0x08, 0xc5, 0xde, 0xc5, 0xb5, 0x0f, 0x44, 0x61, 0xfa, 0x7b, 0xd0, 0x24, 0x5b, 0x1b,
-	0x8b, 0xc9, 0x42, 0x06, 0x0e, 0xc4, 0xc4, 0x59, 0x8d, 0xf9, 0x87, 0x66, 0x42, 0xc4, 0xde, 0x2c,
-	0x13, 0x22, 0xf6, 0x16, 0x33, 0x21, 0x62, 0xcf, 0x21, 0x14, 0xfb, 0x47, 0x70, 0xb1, 0xdb, 0x7d,
-	0x20, 0xd4, 0xc8, 0x8f, 0x42, 0x93, 0xc4, 0x0d, 0x58, 0x1d, 0x30, 0x54, 0x53, 0xd9, 0x9a, 0xa3,
-	0xa2, 0x67, 0x39, 0x29, 0xa2, 0xfd, 0x00, 0xcf, 0xdf, 0x8e, 0x48, 0x92, 0x40, 0x16, 0xf7, 0xb4,
-	0xd2, 0x23, 0xa0, 0xa6, 0x74, 0xb9, 0x44, 0xa4, 0x38, 0xec, 0x68, 0x34, 0xfb, 0x17, 0x15, 0x64,
-	0x6a, 0x77, 0x24, 0x92, 0x03, 0xa9, 0x94, 0x18, 0x66, 0x76, 0xbe, 0x0d, 0xed, 0x41, 0x1c, 0x8d,
-	0xd1, 0xcd, 0x9c, 0xca, 0x58, 0x93, 0xbb, 0x56, 0x20, 0x87, 0xb3, 0x0e, 0x69, 0x78, 0x27, 0xf6,
-	0xe5, 0x60, 0x3f, 0x1c, 0x44, 0x0e, 0xe0, 0x24, 0x06, 0x5a, 0xbf, 0x02, 0xed, 0x68, 0x30, 0x08,
-	0xfc, 0x50, 0xba, 0x63, 0x35, 0xd4, 0x67, 0xf0, 0xdb, 0x73, 0x24, 0xf4, 0xc2, 0x3c, 0x5d, 0x4f,
-	0x38, 0x50, 0x43, 0xeb, 0x2a, 0xb4, 0x12, 0x11, 0x0f, 0x65, 0x92, 0xba, 0xc0, 0xba, 0xd3, 0x64,
-	0xc0, 0xbe, 0xc7, 0xba, 0x38, 0x12, 0xea, 0xc9, 0x8c, 0x2e, 0x12, 0xa1, 0x9e, 0x2c, 0xd4, 0x05,
-	0xe2, 0x3b, 0x84, 0x62, 0x7f, 0x0e, 0x2f, 0xf3, 0xd9, 0xbe, 0x17, 0x8b, 0x67, 0x45, 0x65, 0xb4,
-	0xc8, 0x2a, 0xbc, 0x58, 0x3c, 0x5b, 0x48, 0x08, 0x27, 0x39, 0x64, 0x3d, 0xf8, 0xcb, 0xde, 0x82,
-	0x4b, 0x2c, 0xc3, 0x2f, 0x98, 0x7b, 0xde, 0xbf, 0x23, 0x9f, 0xda, 0xbd, 0xd2, 0x11, 0xf4, 0x55,
-	0x9f, 0xc1, 0xcb, 0xb4, 0x8e, 0x21, 0x21, 0x3e, 0x3f, 0x8b, 0xad, 0x59, 0x24, 0x0e, 0x79, 0xc7,
-	0x2f, 0x32, 0x19, 0xd1, 0xb9, 0xfa, 0xbb, 0x0a, 0x2e, 0x42, 0xba, 0x4d, 0xd5, 0x90, 0x2b, 0x11,
-	0x7a, 0x08, 0x73, 0xfd, 0x70, 0x90, 0xba, 0x1c, 0xbb, 0xa8, 0x80, 0x68, 0x3c, 0x8e, 0xc2, 0x59,
-	0x2d, 0xb6, 0x7a, 0xe9, 0xcf, 0xc5, 0xc1, 0x7a, 0x26, 0x80, 0xd5, 0xe6, 0x02, 0xd8, 0x8b, 0xe3,
-	0x94, 0xdd, 0x45, 0x2d, 0x68, 0xbf, 0x9b, 0xaf, 0x2e, 0x9f, 0x62, 0x00, 0x4b, 0x4e, 0x27, 0x52,
-	0xbb, 0x72, 0xfa, 0x8d, 0xa1, 0x89, 0x8d, 0x11, 0xa3, 0x52, 0xee, 0x6b, 0xea, 0x4e, 0x87, 0xc1,
-	0xc7, 0xbe, 0x47, 0xf2, 0x08, 0xcb, 0x88, 0xa2, 0xc8, 0xcb, 0x88, 0x16, 0x25, 0x54, 0xa5, 0xa8,
-	0x75, 0x3e, 0x09, 0xd9, 0x9f, 0xa3, 0x9b, 0xde, 0x8e, 0x65, 0x28, 0x4c, 0x3b, 0xfa, 0x65, 0x00,
-	0xd2, 0xaf, 0xc0, 0x81, 0x85, 0xbe, 0x9a, 0xa6, 0x39, 0x64, 0x71, 0xf4, 0x93, 0x9d, 0x24, 0x47,
-	0x43, 0xcf, 0x70, 0x92, 0xb1, 0xf4, 0x16, 0xfa, 0x28, 0x47, 0x7a, 0x0e, 0x22, 0xf0, 0x99, 0xe8,
-	0x8e, 0xa2, 0x59, 0x27, 0xa9, 0x46, 0xd1, 0x62, 0x27, 0x89, 0xf8, 0x0e, 0xa1, 0x70, 0xbc, 0x39,
-	0x8a, 0x9e, 0xc9, 0x78, 0x26, 0xde, 0x24, 0x08, 0x5b, 0xb8, 0x07, 0x9a, 0xe1, 0x30, 0x12, 0xd3,
-	0xd8, 0x9b, 0xfa, 0x81, 0x37, 0x43, 0x63, 0x88, 0xb0, 0x85, 0x34, 0x68, 0x86, 0xc3, 0x48, 0xf6,
-	0x31, 0x85, 0xac, 0x44, 0x24, 0xbe, 0x4a, 0xfc, 0xbe, 0x32, 0x09, 0xdd, 0x01, 0x50, 0xd9, 0x80,
-	0xa6, 0xf6, 0xad, 0xf9, 0x3d, 0xa5, 0x28, 0x8e, 0x81, 0x6d, 0xff, 0x4f, 0x05, 0x2e, 0x6d, 0xa3,
-	0x79, 0xfa, 0xc9, 0x69, 0x4a, 0xf3, 0x9e, 0x4c, 0x84, 0x1f, 0x58, 0xaf, 0x41, 0x47, 0xf0, 0x88,
-	0x2f, 0x55, 0x9a, 0xb3, 0x36, 0x9c, 0xb5, 0x1c, 0xb8, 0xef, 0x59, 0x0f, 0x32, 0xa4, 0x53, 0xd7,
-	0x13, 0x89, 0xd0, 0x0e, 0xed, 0xbb, 0x33, 0x39, 0x4e, 0x3a, 0x83, 0x49, 0xe3, 0x42, 0x19, 0x1d,
-	0x5a, 0xd6, 0xfa, 0x04, 0x36, 0x31, 0x17, 0x1e, 0x4a, 0x17, 0x3d, 0x11, 0x1b, 0x72, 0x8d, 0x0c,
-	0xaf, 0xa8, 0x9d, 0xd4, 0xbb, 0x39, 0xeb, 0x8c, 0x8e, 0xdf, 0x68, 0xe0, 0x96, 0x0d, 0x1d, 0x8c,
-	0xb6, 0xf9, 0xec, 0x3a, 0x85, 0xdc, 0xb6, 0x27, 0x83, 0x14, 0xc7, 0xfe, 0x8f, 0x0a, 0x9e, 0x82,
-	0xd9, 0xed, 0xa2, 0x08, 0x3f, 0x86, 0x0e, 0x1b, 0xa6, 0x1e, 0xd3, 0x52, 0xbc, 0x32, 0x6f, 0x9b,
-	0x1a, 0xc1, 0x59, 0x8b, 0x8d, 0x2f, 0xeb, 0x18, 0x2e, 0x6a, 0xf6, 0x33, 0x69, 0x64, 0x67, 0xb1,
-	0x7d, 0xe3, 0xb5, 0x32, 0x69, 0xcc, 0x88, 0xdb, 0xb1, 0x98, 0x40, 0x3a, 0x4a, 0x9b, 0x7a, 0x0b,
-	0x2e, 0xe0, 0xa6, 0x8a, 0x34, 0x51, 0x2c, 0x0d, 0x67, 0xc3, 0x93, 0x81, 0x89, 0x6b, 0xff, 0x04,
-	0x5e, 0xc9, 0xf7, 0xd6, 0x1d, 0x0b, 0x35, 0xba, 0x3f, 0x1c, 0xaa, 0x03, 0x35, 0xc4, 0x35, 0x30,
-	0x0d, 0xbd, 0x0b, 0x28, 0xf2, 0xdc, 0xa7, 0xd6, 0x89, 0xb7, 0xa2, 0xa1, 0x74, 0x4f, 0x55, 0x22,
-	0xc7, 0x3a, 0xf8, 0x90, 0xe3, 0x4a, 0x1d, 0xea, 0xdf, 0x52, 0x6a, 0x7f, 0x28, 0x13, 0x53, 0x6c,
-	0xd7, 0x60, 0x6d, 0x22, 0x93, 0x3c, 0xcd, 0xa9, 0x90, 0xcc, 0x61, 0x22, 0x13, 0x9d, 0xdf, 0xa0,
-	0x5a, 0x7a, 0x51, 0xe8, 0x15, 0x33, 0xa1, 0x86, 0xd3, 0x46, 0x60, 0x8a, 0x93, 0xe6, 0x1c, 0x13,
-	0x99, 0x90, 0xc7, 0x2c, 0x3b, 0xcf, 0x87, 0x32, 0xe1, 0x9c, 0xe3, 0x50, 0x26, 0xd6, 0xdb, 0x60,
-	0xe1, 0xb2, 0x33, 0x39, 0x16, 0x2b, 0x7c, 0x63, 0x22, 0x93, 0x42, 0x86, 0xb5, 0x47, 0x09, 0xeb,
-	0x34, 0x94, 0x65, 0x01, 0x2d, 0x9e, 0x86, 0x8b, 0xb3, 0x56, 0x9c, 0xc4, 0x01, 0x0d, 0x7f, 0xd9,
-	0x47, 0x48, 0xe8, 0x73, 0x29, 0x27, 0x5d, 0xf1, 0x24, 0xcb, 0x08, 0x3e, 0x81, 0x75, 0x22, 0xf4,
-	0x44, 0xca, 0x89, 0xab, 0xc4, 0x13, 0xb9, 0xd0, 0x72, 0xd2, 0x99, 0x6c, 0x39, 0xe9, 0x97, 0xbd,
-	0x07, 0xeb, 0xdd, 0xee, 0xc3, 0x48, 0x78, 0xe4, 0xea, 0x50, 0x4f, 0x5f, 0xd3, 0x49, 0xfe, 0xa2,
-	0x02, 0x1b, 0xda, 0xe5, 0x1e, 0x88, 0xa4, 0x3f, 0x42, 0xee, 0x2e, 0x42, 0x43, 0xf5, 0xa3, 0x38,
-	0xf5, 0xee, 0xfc, 0x81, 0x31, 0x23, 0x10, 0x2a, 0x71, 0xf3, 0xc0, 0x91, 0x96, 0x33, 0x08, 0x3e,
-	0x4c, 0xe3, 0x06, 0x56, 0xac, 0x63, 0xa4, 0xe4, 0x06, 0x72, 0xc0, 0x9a, 0x69, 0x38, 0x2d, 0x82,
-	0x3c, 0x94, 0x83, 0x04, 0x63, 0x1d, 0x0f, 0xc7, 0xfe, 0x70, 0x94, 0xe8, 0x02, 0x94, 0x67, 0x38,
-	0x08, 0xb1, 0xbe, 0x07, 0xeb, 0x49, 0x34, 0x71, 0x0d, 0x1a, 0x5c, 0x7a, 0xad, 0x25, 0xd1, 0xe4,
-	0x20, 0x25, 0x63, 0x3f, 0x2c, 0xb2, 0x8d, 0x31, 0xe9, 0x43, 0x80, 0x01, 0x52, 0x30, 0x23, 0x74,
-	0xd1, 0x4e, 0x1f, 0xe0, 0x30, 0x8a, 0x81, 0xe3, 0x0e, 0x61, 0x53, 0xdc, 0xf9, 0x14, 0xdd, 0xe4,
-	0x9e, 0x4c, 0xbe, 0x48, 0x46, 0x32, 0x3e, 0xe2, 0xc4, 0x48, 0x87, 0xcf, 0x4d, 0xa8, 0x4d, 0xb3,
-	0xca, 0x1b, 0x7f, 0x5a, 0x2f, 0x41, 0x23, 0x31, 0xb6, 0x5f, 0x4f, 0xb0, 0x88, 0xfb, 0xed, 0x4a,
-	0x39, 0x09, 0x5d, 0x4b, 0x9d, 0x81, 0x04, 0x8a, 0x5d, 0xc6, 0x71, 0x14, 0x6b, 0x99, 0xf1, 0x87,
-	0xf5, 0x7d, 0xa8, 0xd3, 0x7e, 0xea, 0x25, 0x06, 0xf2, 0xd8, 0x97, 0xcf, 0xb2, 0xed, 0x10, 0x9a,
-	0x3d, 0xc2, 0xf3, 0xb6, 0x27, 0xc6, 0x72, 0x47, 0x84, 0x69, 0x25, 0x79, 0x19, 0x56, 0x7b, 0x22,
-	0x74, 0x73, 0x1e, 0x56, 0x7a, 0x22, 0xc4, 0x15, 0xaf, 0xc1, 0x1a, 0x0e, 0xc8, 0xd0, 0xe3, 0xe2,
-	0x90, 0xb9, 0x81, 0x9e, 0x08, 0xef, 0x87, 0x1e, 0x96, 0x85, 0xd6, 0x15, 0x68, 0x22, 0x06, 0xc5,
-	0x7a, 0x66, 0x0b, 0x49, 0x1d, 0x9d, 0x4e, 0x64, 0x9e, 0xf6, 0x39, 0x53, 0x35, 0x2a, 0x3f, 0x25,
-	0x6a, 0xb4, 0xe4, 0x94, 0xa8, 0x51, 0x7a, 0x4a, 0xd4, 0xc8, 0xfe, 0x93, 0x0a, 0x15, 0xc1, 0xa8,
-	0xcf, 0x2e, 0x5a, 0x9b, 0x23, 0xc2, 0x27, 0xc8, 0xba, 0x16, 0x5d, 0x35, 0x17, 0x5d, 0x66, 0x9c,
-	0x35, 0xd3, 0x38, 0xaf, 0x42, 0x2b, 0x0a, 0x3c, 0x97, 0x47, 0xd8, 0xa6, 0x9a, 0x51, 0xe0, 0x11,
-	0x2d, 0xf4, 0x26, 0x63, 0x3f, 0x74, 0xd1, 0xaa, 0x18, 0x81, 0x0d, 0xaa, 0x3d, 0xf6, 0xc3, 0xa3,
-	0x68, 0xc2, 0x38, 0xd7, 0x00, 0xed, 0xcb, 0x8d, 0x45, 0xf8, 0xc4, 0x0d, 0xa7, 0xe3, 0xad, 0x15,
-	0xb6, 0xcb, 0x24, 0x9a, 0x10, 0x2b, 0xd3, 0xb1, 0xed, 0x60, 0x6a, 0x78, 0x20, 0x9e, 0x93, 0x11,
-	0x1d, 0x52, 0xa0, 0x5e, 0xc8, 0xe4, 0x1b, 0xb0, 0x31, 0x16, 0xcf, 0x5d, 0x36, 0xc7, 0x09, 0x85,
-	0x7c, 0xce, 0xba, 0x3b, 0x63, 0x93, 0x80, 0xfd, 0x73, 0xda, 0xf6, 0x81, 0x98, 0x3c, 0x94, 0x27,
-	0x32, 0xd8, 0x25, 0x57, 0x8e, 0x22, 0xfc, 0x25, 0xd8, 0x0c, 0xe5, 0x33, 0x2c, 0xa7, 0xdc, 0x00,
-	0x47, 0xd2, 0x38, 0xda, 0x71, 0x3a, 0xa1, 0x7c, 0x96, 0xe2, 0xef, 0x7b, 0xb8, 0xef, 0x89, 0x50,
-	0xca, 0x54, 0x5f, 0x13, 0x01, 0xa4, 0xbc, 0x8f, 0xa1, 0x1d, 0xcb, 0x7e, 0x14, 0x7b, 0x7c, 0x22,
-	0xd8, 0x49, 0xbe, 0x52, 0x50, 0x85, 0x2e, 0x61, 0x08, 0x8b, 0xab, 0x86, 0x38, 0xfb, 0x6d, 0xff,
-	0x61, 0x75, 0x9e, 0x3b, 0xb4, 0xe7, 0xcc, 0x50, 0x2b, 0xa6, 0xa1, 0x5a, 0x50, 0x47, 0xe9, 0x11,
-	0x17, 0x1d, 0x87, 0x7e, 0x63, 0xde, 0x4a, 0x12, 0x65, 0x9f, 0xa1, 0x88, 0x85, 0x8e, 0xd3, 0x46,
-	0x18, 0x3b, 0x0c, 0x65, 0xed, 0xc2, 0x06, 0x0a, 0x5e, 0x7b, 0x15, 0x23, 0xc4, 0xcc, 0x54, 0xcf,
-	0xd9, 0x14, 0x62, 0xb3, 0x93, 0x44, 0x13, 0xfe, 0xa4, 0x58, 0x70, 0x09, 0x56, 0xc2, 0x28, 0xf1,
-	0x07, 0xa7, 0xa4, 0xda, 0xa6, 0xa3, 0xbf, 0xac, 0xeb, 0xb0, 0xc9, 0xc5, 0x99, 0x9b, 0x0a, 0xc2,
-	0x23, 0xcd, 0xd6, 0x9d, 0xf5, 0x9e, 0xb9, 0x73, 0x0f, 0x63, 0xa6, 0x46, 0x41, 0x51, 0xba, 0x2a,
-	0x11, 0xe3, 0xc9, 0xd6, 0x2a, 0xa1, 0x6e, 0xf0, 0x00, 0x8a, 0xb4, 0x8b, 0x60, 0x3b, 0xc9, 0xb2,
-	0x54, 0xe4, 0x2a, 0xbd, 0xa9, 0xbb, 0x0a, 0x2d, 0xda, 0xab, 0x91, 0x17, 0x37, 0x11, 0x80, 0x87,
-	0x05, 0x07, 0x55, 0x22, 0x62, 0xac, 0xbf, 0x9e, 0x93, 0x84, 0x1a, 0x4e, 0x93, 0x00, 0xfb, 0xde,
-	0x73, 0xf4, 0x78, 0xe4, 0x59, 0x95, 0x14, 0x2a, 0xca, 0x6e, 0xa9, 0x1a, 0xce, 0x1a, 0x42, 0xbb,
-	0x04, 0xdc, 0xf7, 0xec, 0xff, 0xac, 0xcc, 0x2d, 0xbb, 0x58, 0x19, 0xef, 0x6b, 0x66, 0x8c, 0x74,
-	0xa2, 0xe8, 0x0a, 0x33, 0x3a, 0x24, 0x4e, 0x62, 0x94, 0x24, 0x89, 0x8c, 0xca, 0x60, 0x40, 0x07,
-	0x41, 0xb3, 0xd1, 0x44, 0x00, 0xa2, 0x16, 0xb7, 0x58, 0x5f, 0xb6, 0xc5, 0xc6, 0xcc, 0x16, 0xdf,
-	0x80, 0x8d, 0x8c, 0xac, 0x3e, 0x84, 0x7c, 0xc2, 0x3a, 0x29, 0x71, 0x3a, 0x86, 0xf6, 0xaf, 0x61,
-	0x09, 0x9d, 0xf1, 0xe6, 0xc8, 0x67, 0x58, 0xf2, 0x97, 0x7a, 0xe1, 0xcc, 0x0f, 0x54, 0x67, 0xfc,
-	0xc0, 0xac, 0x14, 0x9b, 0x2a, 0x95, 0xe0, 0x4f, 0x4a, 0x88, 0xa3, 0x08, 0x0b, 0x7b, 0xae, 0xcc,
-	0xec, 0xf9, 0x3a, 0x6c, 0xc6, 0x84, 0x69, 0xa8, 0x87, 0x97, 0x5c, 0x67, 0x78, 0xa6, 0xa0, 0x5f,
-	0x2f, 0x90, 0x3f, 0x9e, 0x78, 0x22, 0xa1, 0xc3, 0x3c, 0xaf, 0xde, 0xca, 0xbc, 0x7a, 0xe9, 0xba,
-	0x8e, 0xd7, 0x31, 0x8f, 0x02, 0x57, 0x65, 0x9a, 0x83, 0xdc, 0xe0, 0xed, 0x3f, 0xad, 0x94, 0x2c,
-	0xb6, 0xd8, 0x1c, 0xf6, 0x17, 0x12, 0x9f, 0x3d, 0x67, 0x9f, 0xcb, 0xd3, 0xc7, 0x22, 0x98, 0x4a,
-	0x54, 0xe9, 0xed, 0x5b, 0xf3, 0x2b, 0x97, 0xca, 0xa3, 0x56, 0x2a, 0x8f, 0x3f, 0xae, 0xc0, 0x96,
-	0x2e, 0x82, 0x0e, 0x85, 0x52, 0xb9, 0xdb, 0x43, 0x9f, 0xf9, 0x09, 0x74, 0xa8, 0xca, 0x71, 0x7b,
-	0x85, 0x8a, 0xba, 0xc8, 0x0c, 0xcd, 0xcd, 0x0b, 0xc5, 0x36, 0xcd, 0xd8, 0xe1, 0x62, 0xba, 0xf4,
-	0xc0, 0x56, 0x4b, 0x0f, 0x2c, 0x86, 0x5b, 0x5f, 0xb9, 0x43, 0xbe, 0x09, 0x6f, 0x3a, 0x75, 0x5f,
-	0xed, 0x8d, 0xed, 0x3b, 0x18, 0xb0, 0x69, 0x85, 0x03, 0x3f, 0x34, 0x9c, 0xba, 0x7c, 0x8a, 0x39,
-	0x0a, 0x33, 0x47, 0xce, 0x57, 0x8b, 0x12, 0x08, 0x44, 0xae, 0xd0, 0xfe, 0xd7, 0x0a, 0x74, 0x0a,
-	0x53, 0x71, 0x8a, 0xe9, 0xed, 0xf5, 0x94, 0x41, 0x46, 0xd6, 0xfa, 0x00, 0x1a, 0xb8, 0x4f, 0xa5,
-	0x4b, 0x9d, 0xb3, 0x14, 0xc6, 0x3c, 0x01, 0x49, 0x1b, 0x3b, 0xd5, 0x81, 0x04, 0xf2, 0x3d, 0x22,
-	0x82, 0xf6, 0x72, 0x84, 0x50, 0x27, 0x27, 0x0b, 0x0c, 0x22, 0x84, 0xd7, 0x41, 0xbb, 0x3b, 0xf7,
-	0x44, 0xc6, 0xca, 0x8f, 0x42, 0x7d, 0x3e, 0x3b, 0x0c, 0x7d, 0xcc, 0x40, 0xfb, 0x9f, 0x2a, 0xe5,
-	0x22, 0xd1, 0xc9, 0x15, 0x8b, 0x44, 0x2b, 0x6b, 0xde, 0xa3, 0x14, 0xe6, 0x39, 0x2d, 0xc2, 0x26,
-	0x4d, 0x95, 0x39, 0xe1, 0xea, 0xd9, 0x9d, 0x70, 0xad, 0x5c, 0xa7, 0xb9, 0xcb, 0xaf, 0x9b, 0x2e,
-	0xdf, 0x7e, 0x1b, 0xf7, 0x80, 0xf6, 0x76, 0x94, 0xa9, 0x8b, 0x4f, 0x7b, 0x89, 0x13, 0xb1, 0x6f,
-	0xc3, 0x7a, 0x8e, 0x46, 0xcc, 0xa6, 0x51, 0x4c, 0x5f, 0x6c, 0x50, 0x14, 0x9b, 0x8b, 0xef, 0x76,
-	0x5c, 0xbe, 0xc8, 0x0b, 0x9d, 0xc9, 0x9d, 0x82, 0x14, 0xcb, 0xce, 0x5f, 0x91, 0x1d, 0x43, 0x8c,
-	0x76, 0xa8, 0x13, 0xcc, 0x07, 0xb1, 0x2f, 0x43, 0xef, 0x28, 0x85, 0x97, 0x7b, 0xc7, 0x2b, 0xd0,
-	0x9c, 0xb9, 0xd9, 0x59, 0x9d, 0xf2, 0x9d, 0x0e, 0x7a, 0x88, 0x9e, 0x1c, 0xfa, 0x61, 0x9a, 0x40,
-	0xd1, 0x07, 0xdd, 0xf7, 0x87, 0xe9, 0x7b, 0x10, 0xfe, 0xb4, 0xff, 0xac, 0x52, 0xbe, 0x60, 0x79,
-	0x46, 0x6b, 0x98, 0x77, 0xed, 0x7c, 0xe6, 0x7d, 0x11, 0x1a, 0x03, 0x3f, 0x14, 0x81, 0x3e, 0x9c,
-	0xfc, 0x91, 0x73, 0x59, 0x2f, 0xe1, 0xb2, 0x91, 0x73, 0xf9, 0x16, 0x66, 0x65, 0x5f, 0x84, 0x81,
-	0x1f, 0xca, 0x3d, 0x99, 0x60, 0x2e, 0xb9, 0x50, 0x28, 0xf6, 0xa0, 0x14, 0x17, 0xf7, 0x73, 0x07,
-	0x5a, 0x98, 0xad, 0xf2, 0x5d, 0x04, 0x1b, 0x77, 0x31, 0x4f, 0x42, 0x64, 0xb3, 0x02, 0x77, 0x9a,
-	0xb1, 0xce, 0x7a, 0x4b, 0xac, 0xe3, 0xf7, 0x29, 0xab, 0x4b, 0xd3, 0xe2, 0x3c, 0xab, 0x9b, 0x97,
-	0xda, 0x55, 0xbd, 0x2e, 0x05, 0x54, 0x9d, 0x16, 0x20, 0x80, 0x02, 0x6a, 0x79, 0xa6, 0x7b, 0x09,
-	0x56, 0xe8, 0xc7, 0x8d, 0xf4, 0xed, 0x8e, 0xbf, 0x32, 0xf8, 0x4d, 0x2d, 0x1d, 0xfd, 0x65, 0xff,
-	0x65, 0x09, 0x33, 0xe5, 0x2a, 0x5c, 0xca, 0xcc, 0x2b, 0x00, 0x34, 0x18, 0x47, 0xd3, 0x30, 0x75,
-	0xf8, 0x84, 0xee, 0x20, 0x20, 0xe7, 0xb5, 0x5e, 0xce, 0x6b, 0x63, 0x01, 0xaf, 0x2b, 0x05, 0x5e,
-	0x49, 0x41, 0x5a, 0x35, 0xfc, 0x0e, 0xb8, 0x38, 0xfe, 0x7f, 0x03, 0x6e, 0xed, 0x9f, 0x56, 0x4a,
-	0x17, 0xfa, 0x1a, 0x62, 0xb9, 0x04, 0x2b, 0x1c, 0xf5, 0xb4, 0xf5, 0xea, 0x2f, 0x4a, 0x7c, 0x39,
-	0x4a, 0x32, 0x0b, 0x2c, 0x96, 0x36, 0xc3, 0x32, 0x26, 0x2e, 0x66, 0x4c, 0x74, 0x47, 0xd1, 0x64,
-	0xf1, 0x69, 0x5e, 0xca, 0x02, 0x3a, 0x9c, 0x51, 0x34, 0x31, 0x6b, 0xb4, 0x26, 0x02, 0x68, 0xf0,
-	0x55, 0x68, 0xab, 0x69, 0xcf, 0x25, 0x84, 0xec, 0xb9, 0xb7, 0xa5, 0xa6, 0x3d, 0x5a, 0xd0, 0xb3,
-	0xff, 0xb1, 0x8c, 0x89, 0x6f, 0x60, 0x1e, 0x2a, 0x11, 0x43, 0x69, 0x0a, 0xbc, 0x8b, 0x80, 0x19,
-	0x7d, 0xd4, 0x67, 0xad, 0xa7, 0xb0, 0x85, 0xc6, 0xf2, 0x2d, 0xac, 0xcc, 0x6e, 0xe1, 0x8f, 0xc8,
-	0xc0, 0x8d, 0x2d, 0xec, 0x4c, 0x4f, 0xff, 0xaf, 0xc5, 0x78, 0x05, 0x9a, 0xc3, 0x28, 0xf2, 0x54,
-	0x2e, 0xc3, 0x55, 0xfa, 0xe6, 0x0a, 0x8c, 0x87, 0xb0, 0x6a, 0xd4, 0xbc, 0x13, 0x00, 0x6b, 0xc6,
-	0x7f, 0x2f, 0xe1, 0xed, 0xff, 0x97, 0x74, 0xcd, 0x9d, 0xad, 0x2c, 0xd9, 0xd9, 0xea, 0xcc, 0xce,
-	0xb6, 0xe9, 0x9e, 0x81, 0x37, 0x46, 0x0e, 0xf1, 0xdc, 0x12, 0xb7, 0xff, 0xa1, 0x3a, 0x43, 0x63,
-	0x71, 0xfe, 0x3a, 0x5f, 0x61, 0x2f, 0xad, 0x53, 0xae, 0x40, 0x33, 0xbb, 0xd3, 0xa8, 0xd3, 0x9c,
-	0x55, 0xa9, 0x2f, 0x34, 0x0a, 0x1c, 0x35, 0x66, 0xe4, 0x7c, 0x0b, 0x9a, 0x58, 0x8b, 0x52, 0x14,
-	0x58, 0xa1, 0x28, 0x70, 0x65, 0x2e, 0x0a, 0xe0, 0x02, 0x47, 0xd1, 0xe4, 0xa6, 0xb3, 0x9a, 0xf0,
-	0xeb, 0x00, 0x8a, 0x9f, 0x58, 0xe1, 0x64, 0x71, 0x55, 0xdb, 0xa7, 0x0c, 0x06, 0x14, 0xc6, 0xad,
-	0x9b, 0xd0, 0xa4, 0xdb, 0x4e, 0x24, 0xda, 0x2c, 0x79, 0xca, 0x47, 0xa2, 0xfa, 0x82, 0xd4, 0x59,
-	0x9d, 0xf0, 0x0f, 0xac, 0x19, 0xfa, 0xd3, 0xd8, 0x35, 0xd4, 0xda, 0xe2, 0x9a, 0xa1, 0x3f, 0x8d,
-	0x9d, 0xcc, 0x8f, 0x79, 0xe9, 0x5b, 0x3b, 0x42, 0xbe, 0xae, 0xaf, 0xa4, 0xf4, 0x92, 0x5c, 0x95,
-	0x61, 0xfa, 0xc0, 0x20, 0xd2, 0xd3, 0xbf, 0x54, 0xe6, 0x96, 0x39, 0xa7, 0xa6, 0xf2, 0xc5, 0x6b,
-	0xcb, 0x17, 0xaf, 0xcf, 0x2e, 0x6e, 0xdd, 0x86, 0x96, 0x9f, 0xc8, 0x31, 0x67, 0x32, 0x8d, 0x12,
-	0x9d, 0x98, 0x05, 0x8b, 0xd3, 0x44, 0x5c, 0xca, 0x72, 0x8a, 0x67, 0x62, 0x65, 0x36, 0x02, 0xfc,
-	0x56, 0x05, 0xd6, 0x70, 0x3b, 0x07, 0xfa, 0x5d, 0xa1, 0x44, 0x68, 0x77, 0x32, 0xd6, 0x8c, 0x62,
-	0x69, 0xc9, 0xda, 0x9a, 0x6b, 0x5a, 0x9d, 0xee, 0x7f, 0xfc, 0xc0, 0x9d, 0x88, 0x58, 0x8c, 0xcd,
-	0xfb, 0xf7, 0x0e, 0x82, 0x0f, 0x11, 0x4a, 0x65, 0xdc, 0xdf, 0x54, 0xe0, 0x2a, 0x07, 0xe7, 0xec,
-	0x85, 0x20, 0xab, 0x4c, 0xb1, 0x4a, 0x7a, 0x15, 0xda, 0x44, 0xa7, 0x3f, 0x18, 0xe6, 0x75, 0x63,
-	0x0b, 0x41, 0xbb, 0x83, 0x21, 0x1f, 0x51, 0x1a, 0x37, 0x15, 0x8b, 0x80, 0x54, 0x74, 0x34, 0x48,
-	0x96, 0x57, 0x5b, 0x60, 0xce, 0xa9, 0x00, 0x78, 0x5e, 0x6a, 0xcf, 0x4b, 0xdc, 0x09, 0xbf, 0xc3,
-	0xa6, 0xd6, 0xf0, 0x82, 0x22, 0xfd, 0xb6, 0x99, 0x57, 0xbd, 0x50, 0x82, 0x59, 0x4e, 0x65, 0xff,
-	0x45, 0x05, 0xd6, 0x73, 0xda, 0x25, 0x5c, 0x55, 0x66, 0x9d, 0x9c, 0x79, 0xfb, 0x94, 0xe6, 0xed,
-	0x33, 0x1a, 0xac, 0x7d, 0x43, 0x0d, 0xd6, 0xcb, 0x34, 0xf8, 0xb3, 0x02, 0xa7, 0xe9, 0x15, 0xca,
-	0xe2, 0xd3, 0x76, 0x17, 0xe8, 0xf6, 0xcb, 0xcd, 0xb2, 0x86, 0xf2, 0xab, 0xae, 0x7c, 0xe3, 0x0e,
-	0xc4, 0xd9, 0x37, 0xa6, 0x15, 0x03, 0xea, 0xa9, 0x29, 0xa6, 0x15, 0x0c, 0x63, 0xf5, 0x8c, 0x4a,
-	0xd5, 0x53, 0x1e, 0x74, 0xee, 0x96, 0x99, 0xf8, 0x22, 0x66, 0xe8, 0x9e, 0xcb, 0x10, 0x91, 0xfd,
-	0x19, 0x55, 0x8b, 0x52, 0xcd, 0x2c, 0x65, 0xdc, 0x88, 0x9e, 0x35, 0x12, 0x7c, 0xc4, 0x8f, 0x2d,
-	0x68, 0x8d, 0x7c, 0x1d, 0x5b, 0x4e, 0xa3, 0x70, 0xe5, 0xd3, 0xd1, 0x49, 0xa6, 0x7d, 0x08, 0x1d,
-	0x7e, 0x0a, 0x41, 0x53, 0xc6, 0x89, 0xe5, 0x8e, 0xe9, 0x4d, 0xa8, 0xa3, 0xe6, 0x74, 0xf9, 0xfd,
-	0x72, 0x49, 0x7b, 0x8a, 0x1f, 0x38, 0x84, 0x62, 0xff, 0x66, 0x15, 0x49, 0x22, 0x20, 0x7d, 0x04,
-	0xfb, 0x54, 0x5b, 0x83, 0x4a, 0x44, 0x22, 0xf3, 0x47, 0xab, 0x59, 0x57, 0x8e, 0x53, 0x76, 0xa3,
-	0x30, 0x91, 0x61, 0xc2, 0x76, 0xd2, 0x45, 0x7c, 0xf3, 0xa1, 0x91, 0xa8, 0x98, 0x2f, 0x5a, 0x9e,
-	0x0c, 0x70, 0x16, 0xe1, 0xdc, 0x85, 0x8e, 0xf0, 0x3c, 0x03, 0xa7, 0xf6, 0x82, 0x35, 0xda, 0xc2,
-	0xf3, 0xb2, 0xd9, 0xe4, 0x2b, 0x9e, 0xf3, 0xec, 0x3c, 0xd5, 0x1b, 0x8b, 0xe7, 0x88, 0xb1, 0xef,
-	0x59, 0x6f, 0x83, 0x85, 0x21, 0x65, 0x18, 0x44, 0x3d, 0x11, 0x64, 0x68, 0x1c, 0x02, 0x37, 0xfa,
-	0xd3, 0x78, 0x8f, 0x06, 0x18, 0xd9, 0x76, 0xa9, 0x95, 0x25, 0x1a, 0x4f, 0x64, 0xe2, 0x27, 0x7e,
-	0x14, 0xa6, 0x77, 0xfb, 0x7b, 0xb0, 0xd9, 0xcf, 0xa1, 0x69, 0xbd, 0x34, 0xdf, 0x8c, 0x42, 0x5d,
-	0x16, 0x39, 0xa2, 0xb3, 0x61, 0xcc, 0xa2, 0x13, 0x3e, 0xd4, 0x9d, 0x05, 0xc7, 0xbe, 0xb7, 0x73,
-	0x4a, 0x0f, 0x15, 0x62, 0x4c, 0x2b, 0x5c, 0x01, 0x8a, 0xe3, 0xc6, 0x6b, 0xc5, 0x2a, 0x7e, 0x1f,
-	0xfb, 0xd4, 0x26, 0xa1, 0xa4, 0x88, 0xfb, 0x23, 0x37, 0x14, 0xe3, 0xac, 0xcf, 0x8f, 0x41, 0x38,
-	0x3d, 0xeb, 0xd5, 0xab, 0x19, 0xbd, 0x7a, 0xfd, 0xb2, 0x85, 0xf0, 0x38, 0xfc, 0x08, 0x36, 0xf2,
-	0x76, 0x05, 0x53, 0xa7, 0x67, 0xa9, 0x5d, 0x3b, 0x59, 0xcf, 0x02, 0x1d, 0x05, 0x6a, 0x47, 0xba,
-	0xb7, 0xc3, 0x95, 0xf2, 0xb6, 0xe7, 0x3d, 0x10, 0xa1, 0xd2, 0x9b, 0xa1, 0xce, 0x1f, 0x63, 0x33,
-	0xf8, 0x8d, 0x9b, 0xb9, 0x0c, 0xab, 0xa8, 0xec, 0x3c, 0x58, 0xae, 0x08, 0xcf, 0x3b, 0xf6, 0x29,
-	0x34, 0xcd, 0x13, 0x5b, 0x1c, 0x70, 0xcd, 0x25, 0xaa, 0xc5, 0x25, 0x3e, 0xca, 0x97, 0xa8, 0x9d,
-	0xf9, 0xd2, 0x29, 0x65, 0xa3, 0xb0, 0xa5, 0x7b, 0x32, 0x40, 0x2e, 0xf0, 0x28, 0x2c, 0xdf, 0x12,
-	0xda, 0xb8, 0xb1, 0x25, 0x4f, 0x06, 0x48, 0xeb, 0x9f, 0x29, 0x0d, 0xd6, 0xa4, 0x8c, 0x97, 0xa2,
-	0xdb, 0xd0, 0xc4, 0xd4, 0xde, 0x90, 0xfd, 0xd2, 0xcb, 0xc8, 0x55, 0x35, 0xed, 0x91, 0xa9, 0x7f,
-	0x00, 0xad, 0x81, 0x08, 0xd5, 0x99, 0x6f, 0x31, 0x9b, 0x88, 0x4d, 0x33, 0xef, 0x00, 0xf4, 0x02,
-	0xd1, 0x2f, 0xb4, 0x0a, 0x2c, 0x9d, 0xda, 0x22, 0x74, 0x52, 0x32, 0xf5, 0x89, 0xa1, 0xa3, 0xc9,
-	0x37, 0x82, 0x02, 0x79, 0x0f, 0x56, 0x06, 0x04, 0x58, 0xd8, 0x27, 0xc6, 0xf8, 0x8e, 0x46, 0xb3,
-	0xff, 0xab, 0x02, 0xd6, 0x57, 0x51, 0x1c, 0x78, 0x3b, 0x91, 0x52, 0xe4, 0x21, 0xd2, 0xee, 0xa0,
-	0x5e, 0xa4, 0x8c, 0x96, 0x89, 0x15, 0xfc, 0xdc, 0xf7, 0xac, 0x75, 0xa8, 0x8e, 0x26, 0xda, 0x67,
-	0x56, 0x47, 0x93, 0xc2, 0xdd, 0x4e, 0xad, 0x78, 0xb7, 0x83, 0x27, 0x64, 0x8a, 0x5a, 0x35, 0x73,
-	0x5f, 0x60, 0x10, 0xa5, 0xbf, 0xaf, 0x41, 0xc7, 0x9b, 0xc6, 0x82, 0x0e, 0x2f, 0xa1, 0xe8, 0xb7,
-	0xd5, 0x14, 0x48, 0x48, 0x98, 0xd0, 0x32, 0x15, 0xdf, 0x7b, 0x9e, 0x17, 0x5c, 0x08, 0xd9, 0xf7,
-	0x9e, 0x5b, 0xd7, 0x61, 0x53, 0x0f, 0x13, 0xbf, 0xe4, 0xd1, 0x39, 0xeb, 0x5d, 0x67, 0x38, 0xee,
-	0x8b, 0xfc, 0xfa, 0x7f, 0x57, 0xd0, 0x91, 0x52, 0x1b, 0x71, 0x34, 0x5c, 0x90, 0x66, 0xa5, 0x9d,
-	0x44, 0x55, 0xa3, 0x93, 0xe8, 0x0a, 0xdb, 0x85, 0xf9, 0xea, 0xa8, 0xa6, 0xbd, 0xb4, 0x14, 0x9a,
-	0x0b, 0xc9, 0xad, 0x49, 0x1a, 0x8e, 0x31, 0x40, 0xd2, 0xc7, 0xed, 0x5b, 0x79, 0xc6, 0x58, 0x77,
-	0xda, 0x1a, 0xa6, 0x4d, 0xa0, 0x10, 0xf4, 0x56, 0xce, 0x93, 0x15, 0x20, 0x63, 0x89, 0xbe, 0x3d,
-	0x5f, 0xbd, 0x56, 0xbb, 0xde, 0x72, 0x56, 0x55, 0xc2, 0x37, 0xf2, 0xf7, 0x61, 0x2d, 0xdb, 0x2a,
-	0xbf, 0xc7, 0x37, 0x83, 0x68, 0x68, 0xda, 0xf6, 0x4c, 0xcf, 0x84, 0x29, 0x17, 0x67, 0x35, 0x88,
-	0xb8, 0x61, 0x62, 0x0c, 0x17, 0xb8, 0x11, 0x49, 0xdd, 0x38, 0x38, 0x55, 0x4f, 0xf9, 0x52, 0xf2,
-	0x22, 0x34, 0xc6, 0x51, 0x28, 0x4f, 0xf5, 0x1b, 0x20, 0x7f, 0x58, 0xaf, 0xc3, 0x7a, 0x12, 0x25,
-	0x22, 0x70, 0x63, 0xd9, 0x1f, 0x89, 0x78, 0xc8, 0x32, 0xac, 0x3a, 0x1d, 0x82, 0x3a, 0x1a, 0x88,
-	0x91, 0xf7, 0xc4, 0xd7, 0xef, 0x88, 0x69, 0xfe, 0x7d, 0xe2, 0xf3, 0x9b, 0x9e, 0xfd, 0x52, 0xda,
-	0x97, 0xeb, 0x48, 0x45, 0xeb, 0x3d, 0x4a, 0x06, 0xf6, 0x1f, 0xd0, 0xf5, 0x08, 0x3b, 0x06, 0xb2,
-	0x4f, 0xbe, 0x35, 0x2a, 0x0f, 0xca, 0x58, 0x40, 0x4e, 0xfd, 0xc0, 0xb8, 0xd5, 0x5d, 0xa5, 0x6f,
-	0x6e, 0x6b, 0x4b, 0xbb, 0x73, 0x8c, 0xca, 0x42, 0x77, 0xe0, 0xa0, 0x32, 0xaf, 0xc3, 0xa6, 0x27,
-	0xd1, 0x90, 0xf8, 0xea, 0xdc, 0xb0, 0xd9, 0x75, 0x82, 0xd3, 0x55, 0x32, 0xb5, 0x27, 0x4b, 0xb8,
-	0xc2, 0xfd, 0xa2, 0xbb, 0x51, 0x10, 0xc8, 0x3e, 0x9a, 0xea, 0x32, 0xa6, 0x2e, 0xc3, 0x6a, 0x5f,
-	0xe4, 0x37, 0xcd, 0x0d, 0x67, 0x05, 0x3f, 0xf7, 0xa9, 0x39, 0x81, 0x06, 0x4c, 0x69, 0xb4, 0x10,
-	0xc2, 0xe2, 0xf8, 0x12, 0x95, 0x88, 0x47, 0xfc, 0x50, 0x26, 0x48, 0xf9, 0x0d, 0xa8, 0x4d, 0x64,
-	0xb2, 0xb0, 0x5d, 0xec, 0x50, 0x26, 0x0e, 0x22, 0xa0, 0x10, 0x82, 0x48, 0x78, 0x2e, 0x7a, 0x01,
-	0x6e, 0x72, 0x5f, 0xc5, 0xef, 0xfb, 0xa1, 0x67, 0x87, 0xa9, 0xd7, 0xc8, 0x7b, 0x7f, 0xb9, 0xad,
-	0xe6, 0x9b, 0x34, 0x0c, 0x2f, 0x59, 0xef, 0xaf, 0xe8, 0xda, 0xf6, 0x50, 0x26, 0x5f, 0x4e, 0x65,
-	0x7c, 0xba, 0xad, 0x94, 0xaf, 0xb2, 0x5e, 0x86, 0x5d, 0xb8, 0xf0, 0x14, 0xa1, 0xae, 0x20, 0xb0,
-	0x69, 0x9c, 0x45, 0xaf, 0xc5, 0xd3, 0xc8, 0x32, 0x37, 0x9e, 0xe6, 0x74, 0x66, 0xde, 0x5a, 0xab,
-	0x85, 0xb7, 0xd6, 0x25, 0x6e, 0xc9, 0xb4, 0x91, 0x7a, 0xc1, 0x46, 0xec, 0x93, 0x72, 0x6e, 0x31,
-	0xde, 0xe5, 0x0b, 0x55, 0x0a, 0x0b, 0x95, 0xee, 0xa2, 0x7a, 0xbe, 0x5d, 0xd8, 0x5f, 0xa2, 0xe1,
-	0x1f, 0xca, 0xa4, 0x2b, 0x13, 0x86, 0x6a, 0xa5, 0xcc, 0x4b, 0xe6, 0x6a, 0x09, 0x4d, 0x6a, 0xc0,
-	0xa2, 0xe4, 0x5c, 0xe4, 0x24, 0xff, 0xbe, 0x4a, 0xc7, 0x46, 0x26, 0x3b, 0x51, 0xe8, 0xe5, 0x4b,
-	0xa1, 0xe0, 0x5f, 0x05, 0x6a, 0x5d, 0x9a, 0xa9, 0xe3, 0x10, 0xc4, 0x75, 0xdc, 0x0e, 0x6c, 0xf4,
-	0xa3, 0xd0, 0xa3, 0xf4, 0xe8, 0x87, 0x67, 0xac, 0x37, 0xd7, 0xf3, 0x19, 0x24, 0x64, 0x93, 0xc6,
-	0x8d, 0x33, 0x56, 0x3c, 0x39, 0x8d, 0x1b, 0x73, 0x34, 0x6e, 0x9a, 0x8f, 0xf1, 0x67, 0xa2, 0x71,
-	0x33, 0x55, 0x76, 0x66, 0x07, 0x8d, 0xc5, 0x76, 0xb0, 0x52, 0xb4, 0x83, 0xb8, 0x54, 0x76, 0x68,
-	0x06, 0x2f, 0x92, 0xdd, 0x07, 0x45, 0xa5, 0xbd, 0xc0, 0x10, 0x4c, 0x85, 0xdd, 0xd6, 0x6b, 0x6e,
-	0x7b, 0x27, 0xdb, 0xfd, 0x91, 0x2f, 0x4f, 0xe4, 0x18, 0xb3, 0x6a, 0xf9, 0xd4, 0xfa, 0x36, 0xc0,
-	0x44, 0x26, 0xc5, 0x25, 0x9b, 0x13, 0x99, 0xd0, 0x8a, 0xf6, 0xcf, 0x2b, 0xa5, 0x13, 0x91, 0xd9,
-	0xa5, 0x13, 0xad, 0x37, 0x61, 0x53, 0xe4, 0xf8, 0x66, 0xd3, 0xc6, 0x86, 0x01, 0xa7, 0x18, 0xfc,
-	0x01, 0x34, 0x28, 0xc5, 0x3c, 0x47, 0xe6, 0xc6, 0x13, 0xec, 0xc7, 0xe8, 0x2a, 0xe7, 0x98, 0xeb,
-	0xb2, 0x43, 0x5b, 0xce, 0xdf, 0x55, 0x68, 0x09, 0xef, 0x44, 0x3b, 0x47, 0x5d, 0xa4, 0x09, 0xef,
-	0x84, 0x7d, 0xe3, 0x29, 0xb5, 0x46, 0xf3, 0x65, 0x15, 0xae, 0x97, 0xfb, 0x5f, 0x7a, 0x2e, 0xc5,
-	0x40, 0x64, 0x76, 0x8d, 0x01, 0x81, 0xb8, 0xb9, 0xe6, 0x1d, 0xdd, 0xc3, 0x54, 0x2d, 0x6b, 0xc9,
-	0xcf, 0x29, 0x72, 0x0b, 0x53, 0xea, 0xce, 0x6b, 0xf9, 0x83, 0xca, 0x01, 0x6c, 0xf1, 0xd2, 0xe4,
-	0x0e, 0xcf, 0xb9, 0xf8, 0xfc, 0xfb, 0xcc, 0x63, 0x2c, 0x09, 0xee, 0x3f, 0x9f, 0x48, 0x36, 0xdb,
-	0x7b, 0x3b, 0x9f, 0xc9, 0x60, 0x82, 0x6a, 0xb7, 0xa1, 0xd3, 0x93, 0xee, 0x48, 0x06, 0x13, 0xe9,
-	0x19, 0x09, 0x6e, 0xbb, 0x27, 0x3f, 0x23, 0xd8, 0x31, 0xc7, 0xbb, 0x05, 0xf9, 0xb6, 0x1d, 0x94,
-	0xd1, 0x5d, 0x9c, 0xb9, 0xcf, 0xad, 0x56, 0x5d, 0xbe, 0x5a, 0xad, 0xb8, 0x9a, 0x8b, 0x9e, 0x13,
-	0x03, 0xcb, 0x7e, 0x78, 0xe2, 0x27, 0x22, 0xad, 0xac, 0x50, 0x26, 0xf7, 0x60, 0xc3, 0xcf, 0x80,
-	0x8b, 0x9f, 0xd7, 0xb9, 0x75, 0x2c, 0xc5, 0x73, 0xd6, 0xf3, 0x39, 0xf4, 0xe0, 0xf8, 0x6f, 0x75,
-	0x0c, 0x5d, 0x39, 0x42, 0x5a, 0x0c, 0x5f, 0x85, 0x56, 0x4f, 0x28, 0xe9, 0x2a, 0x71, 0x22, 0xb5,
-	0x6b, 0x6e, 0xf6, 0xf4, 0xbf, 0xf5, 0xe0, 0x60, 0x3f, 0xf0, 0xfb, 0xdc, 0x44, 0xa5, 0x4d, 0x88,
-	0x00, 0x8f, 0xa6, 0x63, 0xeb, 0x16, 0x5c, 0xa2, 0xda, 0xce, 0x60, 0x2e, 0x9c, 0x8e, 0x7b, 0x59,
-	0x77, 0xd4, 0x45, 0x1c, 0xcd, 0x17, 0x7c, 0x44, 0x63, 0xdc, 0x50, 0x48, 0xff, 0xc1, 0x34, 0xcd,
-	0xe2, 0x47, 0x8b, 0x21, 0xc7, 0x69, 0xaf, 0x15, 0x0d, 0x67, 0x77, 0xbe, 0x8d, 0xb4, 0xd7, 0x0a,
-	0xc1, 0x69, 0x2b, 0xdb, 0x5b, 0x70, 0x81, 0x39, 0x1b, 0x4b, 0x24, 0x9b, 0x67, 0x7f, 0x75, 0x67,
-	0x83, 0x06, 0x0e, 0x08, 0x4e, 0x8e, 0xea, 0x7d, 0xd8, 0x62, 0xdc, 0x58, 0x4e, 0x02, 0x71, 0xea,
-	0xea, 0x05, 0xb2, 0xbc, 0xaf, 0xee, 0xbc, 0x4c, 0xe3, 0x0e, 0x0d, 0x1f, 0xd0, 0xa8, 0x2e, 0xe1,
-	0x5b, 0x79, 0x2f, 0x31, 0xdf, 0xf6, 0x7e, 0xa7, 0x20, 0xf3, 0x7c, 0x77, 0x59, 0x4f, 0x72, 0x33,
-	0x49, 0xbb, 0x91, 0xbb, 0xf0, 0x12, 0x5d, 0x00, 0x30, 0x83, 0x99, 0x17, 0x6d, 0x11, 0x9d, 0xef,
-	0x2d, 0xa0, 0xc3, 0x6c, 0x3f, 0x16, 0x7c, 0x8d, 0xb7, 0x29, 0x3c, 0x8f, 0x21, 0xba, 0x87, 0xdf,
-	0xfa, 0x3e, 0xbc, 0x44, 0x37, 0x0f, 0x33, 0x44, 0x81, 0x3b, 0x4b, 0x3c, 0x19, 0x14, 0xd1, 0x3f,
-	0x85, 0x35, 0xe4, 0x21, 0xcb, 0x5d, 0xdb, 0xb4, 0xf8, 0xab, 0x0b, 0x16, 0x4f, 0xf3, 0x57, 0x10,
-	0x9e, 0xf7, 0x90, 0x53, 0x58, 0xd2, 0x17, 0x2f, 0x86, 0x36, 0xb0, 0xa6, 0xef, 0x21, 0x08, 0xf2,
-	0x68, 0x3a, 0xb6, 0x7f, 0x15, 0x0f, 0x73, 0x4e, 0x61, 0x4f, 0x6a, 0x3d, 0xeb, 0xff, 0x76, 0x1c,
-	0xca, 0xcc, 0x28, 0xd8, 0xb6, 0x5a, 0x43, 0x59, 0x6e, 0x09, 0xd5, 0x19, 0x4b, 0xb0, 0x07, 0x0b,
-	0x28, 0xe3, 0x11, 0x7c, 0x1b, 0x2e, 0xcc, 0x5b, 0x9d, 0xfe, 0x67, 0x38, 0x7f, 0xb9, 0xc5, 0xcd,
-	0xad, 0xf3, 0x3e, 0xbc, 0x62, 0xae, 0xc3, 0x93, 0x8e, 0x55, 0xfe, 0x1e, 0x8f, 0x99, 0x8b, 0xb9,
-	0x82, 0xfe, 0xb2, 0xff, 0xbc, 0xb2, 0x6c, 0xe6, 0x62, 0x4f, 0x91, 0x05, 0x83, 0xea, 0x39, 0x83,
-	0xc1, 0x8c, 0x2e, 0x6a, 0x33, 0xba, 0x30, 0x18, 0xad, 0x17, 0x18, 0xfd, 0x59, 0x05, 0xbe, 0x6b,
-	0x32, 0xca, 0x26, 0xf2, 0x28, 0x4a, 0xfc, 0xbe, 0x64, 0x6b, 0x47, 0x47, 0x50, 0x14, 0x53, 0x65,
-	0xf6, 0x60, 0x9a, 0x37, 0x39, 0xd5, 0xe2, 0x4d, 0xce, 0x7b, 0xd0, 0xa0, 0x92, 0x4c, 0x47, 0xb7,
-	0x25, 0xd9, 0x05, 0xe3, 0xd9, 0xbf, 0xc7, 0x97, 0x22, 0x82, 0x1d, 0xff, 0x0f, 0x7f, 0xf0, 0x83,
-	0xd4, 0x19, 0x7d, 0x08, 0x2d, 0xf4, 0x43, 0xcb, 0x6f, 0xa2, 0x8c, 0x79, 0x4e, 0x53, 0xe9, 0xdc,
-	0xcd, 0xba, 0x6d, 0x54, 0x68, 0x65, 0x97, 0x08, 0xc6, 0xac, 0x87, 0xd1, 0x30, 0x2f, 0xd1, 0x0e,
-	0xd0, 0xf1, 0x72, 0xc7, 0x55, 0xd6, 0x9d, 0x5d, 0xec, 0x04, 0x35, 0x2a, 0x91, 0x6b, 0xb0, 0x96,
-	0x35, 0x79, 0xe7, 0xe5, 0x08, 0x3c, 0xd1, 0x13, 0xf7, 0x3d, 0xbb, 0x0b, 0x57, 0x0b, 0x3b, 0xfb,
-	0x6a, 0x24, 0x65, 0xf0, 0x30, 0x1a, 0x6e, 0x7b, 0x74, 0x95, 0x7a, 0x6b, 0xae, 0x8e, 0x2c, 0x4a,
-	0x2b, 0x45, 0x2f, 0x96, 0x91, 0xfb, 0x60, 0x75, 0xbb, 0xbb, 0x71, 0xa4, 0xb2, 0x7f, 0xf9, 0x40,
-	0x5a, 0x37, 0xe7, 0x85, 0x35, 0xdf, 0x22, 0x4e, 0xb3, 0x72, 0x31, 0xa5, 0xff, 0x7a, 0x29, 0xbc,
-	0xb9, 0x7f, 0xbd, 0x14, 0xde, 0x92, 0x7f, 0xbd, 0x14, 0x9e, 0x43, 0x28, 0xf6, 0x8f, 0x73, 0x71,
-	0xcd, 0x52, 0x29, 0x2d, 0xdc, 0x70, 0x92, 0x51, 0xb8, 0xe1, 0xe7, 0x3e, 0xdf, 0xfd, 0x62, 0x29,
-	0x9a, 0x35, 0x43, 0xe0, 0x07, 0x6f, 0x13, 0x63, 0x60, 0xb6, 0x55, 0xbd, 0x4d, 0xaa, 0x8e, 0xce,
-	0xb2, 0x4d, 0x44, 0xa4, 0x6d, 0xee, 0xa2, 0x81, 0x7d, 0xe5, 0xab, 0xd1, 0x4e, 0xf4, 0xdc, 0xe4,
-	0xf1, 0x6d, 0x68, 0x3c, 0xf3, 0xd5, 0x48, 0x2d, 0xdc, 0x2a, 0xce, 0x71, 0x18, 0xc7, 0xfe, 0x29,
-	0x75, 0xd3, 0xef, 0x1c, 0x99, 0x42, 0xff, 0x10, 0xd6, 0x7a, 0x89, 0xdb, 0x8b, 0x02, 0xdf, 0x64,
-	0xa8, 0x98, 0xa0, 0xee, 0x1c, 0xed, 0x44, 0x81, 0xcf, 0x9e, 0xb4, 0x97, 0xa4, 0xbf, 0xad, 0x5b,
-	0x3a, 0xd2, 0x1a, 0xff, 0x22, 0x33, 0x37, 0x4f, 0x28, 0xae, 0x44, 0x28, 0x04, 0xe3, 0xaf, 0x9d,
-	0xcd, 0x1f, 0xaf, 0xbf, 0xfb, 0xde, 0x47, 0x06, 0x5a, 0x6f, 0x85, 0xfe, 0xdc, 0xfc, 0xdf, 0x00,
-	0x00, 0x00, 0xff, 0xff, 0x4f, 0x3f, 0x38, 0x1a, 0x8c, 0x3e, 0x00, 0x00,
+	// 5032 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x3b, 0x5d, 0x8f, 0x1c, 0xd7,
+	0x52, 0x9a, 0xaf, 0xdd, 0x99, 0x9a, 0x9d, 0xdd, 0x75, 0xc7, 0xb1, 0xd7, 0xf1, 0x4d, 0xae, 0xd3,
+	0xb9, 0x09, 0xce, 0xc7, 0x4d, 0xee, 0xb5, 0x8d, 0x93, 0x38, 0x26, 0xc9, 0xee, 0xda, 0x5e, 0xef,
+	0x8d, 0xd7, 0xd9, 0xf4, 0xac, 0x1d, 0x74, 0xd1, 0x55, 0xeb, 0xcc, 0xf4, 0x99, 0x99, 0xc6, 0x3d,
+	0xdd, 0xe3, 0x3e, 0x3d, 0x6b, 0x2f, 0x4f, 0xe8, 0x0a, 0x10, 0xf0, 0x70, 0xc5, 0x0b, 0x0f, 0x08,
+	0x1e, 0x40, 0x48, 0x20, 0x24, 0x84, 0x84, 0xd0, 0x45, 0x88, 0x17, 0x10, 0xfc, 0x02, 0x04, 0x12,
+	0x12, 0x8f, 0xbc, 0x20, 0xf8, 0x15, 0xa8, 0xaa, 0x4e, 0x77, 0x9f, 0x9e, 0xe9, 0x19, 0xef, 0x26,
+	0x3c, 0xf0, 0xb4, 0xd3, 0x75, 0xea, 0xd4, 0xa9, 0x53, 0x55, 0xa7, 0x3e, 0xce, 0xa9, 0x85, 0xa6,
+	0xd7, 0x7b, 0x7f, 0x12, 0x47, 0x49, 0x64, 0xb5, 0x95, 0x8c, 0x8f, 0x65, 0x4c, 0x1f, 0xaf, 0xc0,
+	0x54, 0xc9, 0x98, 0x07, 0xec, 0xdf, 0xaa, 0xc0, 0xc5, 0x6e, 0x77, 0xbb, 0xdf, 0x8f, 0xa6, 0x61,
+	0xb2, 0x27, 0x13, 0x27, 0x0a, 0xe4, 0x03, 0x5f, 0x25, 0x8e, 0x7c, 0x6a, 0xbd, 0x0a, 0xd0, 0x1f,
+	0x89, 0x30, 0x94, 0x81, 0xeb, 0x7b, 0x5b, 0x95, 0x2b, 0x95, 0xab, 0x75, 0xa7, 0xa5, 0x21, 0xfb,
+	0x9e, 0x75, 0x11, 0x56, 0xa3, 0x89, 0x0c, 0x71, 0xac, 0x7a, 0xa5, 0x72, 0xb5, 0xe5, 0xac, 0xe0,
+	0xe7, 0xbe, 0x67, 0xbd, 0x02, 0xcd, 0x49, 0x20, 0x92, 0x41, 0x14, 0x8f, 0xb7, 0x6a, 0x34, 0x92,
+	0x7d, 0xe3, 0xa4, 0x5f, 0x8b, 0x42, 0x89, 0x93, 0xea, 0x57, 0x2a, 0x57, 0x1b, 0xce, 0x0a, 0x7e,
+	0xee, 0x7b, 0xf6, 0xb4, 0x9c, 0x8f, 0xed, 0xfe, 0x13, 0xeb, 0x7d, 0x68, 0xc4, 0x51, 0x20, 0xd5,
+	0x56, 0xe5, 0x4a, 0xed, 0x6a, 0xfb, 0xda, 0xd6, 0xfb, 0xc6, 0x66, 0xde, 0xd7, 0x53, 0x10, 0xdf,
+	0x61, 0x34, 0xeb, 0x1d, 0x38, 0xe7, 0x2b, 0xb7, 0x1f, 0x44, 0x4a, 0xba, 0xb1, 0x1c, 0xfa, 0x2a,
+	0x91, 0x31, 0xb1, 0xd8, 0x74, 0x36, 0x7c, 0xb5, 0x8b, 0x70, 0x47, 0x83, 0xed, 0xbf, 0xaa, 0xc0,
+	0x66, 0xb7, 0xbb, 0xed, 0x79, 0x48, 0x60, 0x47, 0xe0, 0xc8, 0x53, 0xeb, 0x6d, 0xa8, 0xf7, 0x84,
+	0x92, 0xb4, 0xe5, 0xf6, 0xb5, 0x97, 0x0b, 0xeb, 0x65, 0x78, 0x84, 0x62, 0x7d, 0x17, 0xda, 0xa2,
+	0x9f, 0xf8, 0xc7, 0xd2, 0xed, 0x47, 0x9e, 0xd4, 0x82, 0x00, 0x06, 0xed, 0x46, 0x9e, 0x34, 0xa5,
+	0x54, 0x2b, 0x48, 0xe9, 0x75, 0x58, 0x53, 0xd3, 0x9e, 0x9b, 0x49, 0xaa, 0x4e, 0xa3, 0x6d, 0x35,
+	0xed, 0x1d, 0xa6, 0xc2, 0xb2, 0xa0, 0x8e, 0xd2, 0xd9, 0x6a, 0x90, 0xa4, 0xe8, 0xb7, 0xfd, 0x60,
+	0x86, 0x5f, 0x14, 0xd0, 0x26, 0xd4, 0x64, 0x1c, 0x13, 0xbb, 0x0d, 0x07, 0x7f, 0x5a, 0x6f, 0xc1,
+	0x46, 0x3f, 0x96, 0x22, 0x91, 0x2e, 0x8a, 0xc4, 0x9d, 0x6a, 0x1d, 0xd5, 0x9d, 0x0e, 0x83, 0x71,
+	0xf6, 0x23, 0xdf, 0xb3, 0xef, 0xc2, 0x4b, 0x99, 0xd4, 0x35, 0xd1, 0x87, 0xc9, 0xe0, 0xac, 0x12,
+	0xb7, 0x6f, 0xc3, 0x5a, 0xb7, 0xab, 0xb5, 0x86, 0x02, 0x7c, 0x0f, 0x2c, 0x5a, 0x37, 0x95, 0xbe,
+	0x9b, 0xf8, 0x63, 0xa9, 0x2d, 0x68, 0x33, 0x26, 0x24, 0x1e, 0x38, 0xf2, 0xc7, 0xd2, 0xde, 0x33,
+	0x66, 0x97, 0x6f, 0xe7, 0x4d, 0xa8, 0xe3, 0x2c, 0xda, 0x43, 0xfb, 0xda, 0xb9, 0x39, 0x85, 0x38,
+	0x34, 0x6c, 0x9f, 0x07, 0x2b, 0x23, 0x74, 0xcf, 0x0f, 0x7d, 0x35, 0x7a, 0x98, 0x0c, 0xec, 0x4f,
+	0xe1, 0x5c, 0xb7, 0x9b, 0x8a, 0xab, 0x2b, 0x8e, 0xcf, 0xa8, 0x62, 0x9e, 0x7f, 0x5f, 0xc6, 0xd1,
+	0x1d, 0x91, 0x08, 0x63, 0xfe, 0x48, 0xc6, 0xd1, 0xc2, 0xf9, 0x88, 0xef, 0x10, 0x8a, 0xbd, 0x83,
+	0x5c, 0xdd, 0x7d, 0x3a, 0xf5, 0x27, 0x26, 0x81, 0xf7, 0xa0, 0x21, 0x11, 0xa6, 0x29, 0x5c, 0x98,
+	0xa3, 0x40, 0x33, 0x1c, 0x46, 0xb2, 0x7f, 0x9b, 0x8e, 0x69, 0xf7, 0x89, 0x1f, 0x04, 0x73, 0x94,
+	0x6e, 0x43, 0x5b, 0xe1, 0x80, 0x6b, 0xd2, 0xbb, 0x3c, 0x47, 0x2f, 0x9f, 0xec, 0x80, 0xca, 0x7e,
+	0x5b, 0x1f, 0xc0, 0x79, 0x63, 0xb6, 0xeb, 0xc9, 0xc0, 0x0d, 0x7c, 0x95, 0x6c, 0x55, 0xaf, 0xd4,
+	0xae, 0x76, 0x9c, 0x73, 0x39, 0xe6, 0x1d, 0x19, 0xe0, 0x81, 0xb4, 0x6f, 0xa1, 0x01, 0xee, 0x88,
+	0xa1, 0xc9, 0xc2, 0x5b, 0x50, 0xeb, 0x89, 0xa1, 0x5e, 0xfa, 0x7c, 0x89, 0x30, 0x87, 0x0e, 0x22,
+	0xb0, 0x28, 0x77, 0x47, 0x45, 0xfe, 0xdf, 0x86, 0x7a, 0x7f, 0x94, 0x31, 0x3e, 0x2f, 0x4a, 0xc4,
+	0x77, 0x08, 0xc5, 0xde, 0xc5, 0xb5, 0x0f, 0x44, 0x61, 0xfa, 0x07, 0xd0, 0x24, 0x5b, 0x1b, 0x8b,
+	0xc9, 0x42, 0x06, 0x0e, 0xc4, 0xc4, 0x59, 0x8d, 0xf9, 0x87, 0x66, 0x42, 0xc4, 0xde, 0x2c, 0x13,
+	0x22, 0xf6, 0x16, 0x33, 0x21, 0x62, 0xcf, 0x21, 0x14, 0xfb, 0x47, 0x70, 0xbe, 0xdb, 0xbd, 0x27,
+	0xd4, 0xc8, 0x8f, 0x42, 0x93, 0xc4, 0x35, 0x58, 0x1d, 0x30, 0x54, 0x53, 0xd9, 0x9a, 0xa3, 0xa2,
+	0x67, 0x39, 0x29, 0xa2, 0x7d, 0x0f, 0xcf, 0xdf, 0x8e, 0x48, 0x92, 0x40, 0x16, 0xf7, 0xb4, 0xd2,
+	0x23, 0xa0, 0xa6, 0x74, 0xb1, 0x44, 0xa4, 0x38, 0xec, 0x68, 0x34, 0xfb, 0xe7, 0x15, 0x64, 0x6a,
+	0x77, 0x24, 0x92, 0x03, 0xa9, 0x94, 0x18, 0x66, 0x76, 0xbe, 0x0d, 0xed, 0x41, 0x1c, 0x8d, 0xd1,
+	0xcd, 0x9c, 0xc8, 0x58, 0x93, 0xbb, 0x52, 0x20, 0x87, 0xb3, 0x0e, 0x69, 0x78, 0x27, 0xf6, 0xe5,
+	0x60, 0x3f, 0x1c, 0x44, 0x0e, 0xe0, 0x24, 0x06, 0x5a, 0xbf, 0x04, 0xed, 0x68, 0x30, 0x08, 0xfc,
+	0x50, 0xba, 0x63, 0x35, 0xd4, 0x67, 0xf0, 0x3b, 0x73, 0x24, 0xf4, 0xc2, 0x3c, 0x5d, 0x4f, 0x38,
+	0x50, 0x43, 0xeb, 0x32, 0xb4, 0x12, 0x11, 0x0f, 0x65, 0x92, 0xba, 0xc0, 0xba, 0xd3, 0x64, 0xc0,
+	0xbe, 0xc7, 0xba, 0x38, 0x12, 0xea, 0xc9, 0x8c, 0x2e, 0x12, 0xa1, 0x9e, 0x2c, 0xd4, 0x05, 0xe2,
+	0x3b, 0x84, 0x62, 0x7f, 0x01, 0x2f, 0xf3, 0xd9, 0xbe, 0x13, 0x8b, 0x67, 0x45, 0x65, 0xb4, 0xc8,
+	0x2a, 0xbc, 0x58, 0x3c, 0x5b, 0x48, 0x08, 0x27, 0x39, 0x64, 0x3d, 0xf8, 0xcb, 0xde, 0x82, 0x0b,
+	0x2c, 0xc3, 0x2f, 0x99, 0x7b, 0xde, 0xbf, 0x23, 0x9f, 0xda, 0xbd, 0xd2, 0x11, 0xf4, 0x55, 0xf7,
+	0xe1, 0x65, 0x5a, 0xc7, 0x90, 0x10, 0x9f, 0x9f, 0xc5, 0xd6, 0x2c, 0x12, 0x87, 0xbc, 0xe3, 0x97,
+	0x99, 0x8c, 0xe8, 0x5c, 0xfd, 0x5d, 0x05, 0x17, 0x21, 0xdd, 0xa6, 0x6a, 0xc8, 0x95, 0x08, 0x3d,
+	0x84, 0xb9, 0x7e, 0x38, 0x48, 0x5d, 0x8e, 0x5d, 0x54, 0x40, 0x34, 0x1e, 0x47, 0xe1, 0xac, 0x16,
+	0x5b, 0xbd, 0xf4, 0xe7, 0xe2, 0x60, 0x3d, 0x13, 0xc0, 0x6a, 0x73, 0x01, 0xec, 0xc5, 0x71, 0xca,
+	0xee, 0xa2, 0x16, 0xb4, 0xdf, 0xcd, 0x57, 0x97, 0x4f, 0x31, 0x80, 0x25, 0x27, 0x13, 0xa9, 0x5d,
+	0x39, 0xfd, 0xc6, 0xd0, 0xc4, 0xc6, 0x88, 0x51, 0x29, 0xf7, 0x35, 0x75, 0xa7, 0xc3, 0xe0, 0x47,
+	0xbe, 0x47, 0xf2, 0x08, 0xcb, 0x88, 0xa2, 0xc8, 0xcb, 0x88, 0x16, 0x25, 0x54, 0xa5, 0xa8, 0x75,
+	0x36, 0x09, 0xd9, 0x5f, 0xa0, 0x9b, 0xde, 0x8e, 0x65, 0x28, 0x4c, 0x3b, 0xfa, 0x45, 0x00, 0xd2,
+	0xaf, 0xc0, 0x81, 0x85, 0xbe, 0x9a, 0xa6, 0x39, 0x64, 0x71, 0xf4, 0x93, 0x9d, 0x24, 0x47, 0x43,
+	0xcf, 0x70, 0x92, 0xb1, 0xf4, 0x16, 0xfa, 0x28, 0x47, 0x7a, 0x0e, 0x22, 0xf0, 0x99, 0xe8, 0x8e,
+	0xa2, 0x59, 0x27, 0xa9, 0x46, 0xd1, 0x62, 0x27, 0x89, 0xf8, 0x0e, 0xa1, 0x70, 0xbc, 0x39, 0x8a,
+	0x9e, 0xc9, 0x78, 0x26, 0xde, 0x24, 0x08, 0x5b, 0xb8, 0x07, 0x9a, 0xe1, 0x30, 0x12, 0xd3, 0xd8,
+	0x9b, 0xfa, 0x81, 0x37, 0x43, 0x63, 0x88, 0xb0, 0x85, 0x34, 0x68, 0x86, 0xc3, 0x48, 0xf6, 0x23,
+	0x0a, 0x59, 0x89, 0x48, 0x7c, 0x95, 0xf8, 0x7d, 0x65, 0x12, 0xba, 0x05, 0xa0, 0xb2, 0x01, 0x4d,
+	0xed, 0x95, 0xf9, 0x3d, 0xa5, 0x28, 0x8e, 0x81, 0x6d, 0xff, 0x4f, 0x05, 0x2e, 0x6c, 0xa3, 0x79,
+	0xfa, 0xc9, 0x49, 0x4a, 0xf3, 0x8e, 0x4c, 0x84, 0x1f, 0x58, 0x6f, 0x40, 0x47, 0xf0, 0x88, 0x2f,
+	0x55, 0x9a, 0xb3, 0x36, 0x9c, 0xb5, 0x1c, 0xb8, 0xef, 0x59, 0xf7, 0x32, 0xa4, 0x13, 0xd7, 0x13,
+	0x89, 0xd0, 0x0e, 0xed, 0xf5, 0x99, 0x1c, 0x27, 0x9d, 0xc1, 0xa4, 0x71, 0xa1, 0x8c, 0x0e, 0x2d,
+	0x6b, 0x7d, 0x06, 0x9b, 0x98, 0x0b, 0x0f, 0xa5, 0x8b, 0x9e, 0x88, 0x0d, 0xb9, 0x46, 0x86, 0x57,
+	0xd4, 0x4e, 0xea, 0xdd, 0x9c, 0x75, 0x46, 0xc7, 0x6f, 0x34, 0x70, 0xcb, 0x86, 0x0e, 0x46, 0xdb,
+	0x7c, 0x76, 0x9d, 0x42, 0x6e, 0xdb, 0x93, 0x41, 0x8a, 0x63, 0xff, 0x47, 0x05, 0x4f, 0xc1, 0xec,
+	0x76, 0x51, 0x84, 0x9f, 0x42, 0x87, 0x0d, 0x53, 0x8f, 0x69, 0x29, 0x5e, 0x9a, 0xb7, 0x4d, 0x8d,
+	0xe0, 0xac, 0xc5, 0xc6, 0x97, 0xf5, 0x08, 0xce, 0x6b, 0xf6, 0x33, 0x69, 0x64, 0x67, 0xb1, 0x7d,
+	0xed, 0x8d, 0x32, 0x69, 0xcc, 0x88, 0xdb, 0xb1, 0x98, 0x40, 0x3a, 0x4a, 0x9b, 0x7a, 0x07, 0xce,
+	0xe1, 0xa6, 0x8a, 0x34, 0x51, 0x2c, 0x0d, 0x67, 0xc3, 0x93, 0x81, 0x89, 0x6b, 0xff, 0x04, 0x5e,
+	0xcd, 0xf7, 0xd6, 0x1d, 0x0b, 0x35, 0xba, 0x3b, 0x1c, 0xaa, 0x03, 0x35, 0xc4, 0x35, 0x30, 0x0d,
+	0xbd, 0x0d, 0x28, 0xf2, 0xdc, 0xa7, 0xd6, 0x89, 0xb7, 0xa2, 0xa1, 0x74, 0x4f, 0x54, 0x22, 0xc7,
+	0x3a, 0xf8, 0x90, 0xe3, 0x4a, 0x1d, 0xea, 0xdf, 0x52, 0x6a, 0x7f, 0x28, 0x13, 0x53, 0x6c, 0x57,
+	0x60, 0x6d, 0x22, 0x93, 0x3c, 0xcd, 0xa9, 0x90, 0xcc, 0x61, 0x22, 0x13, 0x9d, 0xdf, 0xa0, 0x5a,
+	0x7a, 0x51, 0xe8, 0x15, 0x33, 0xa1, 0x86, 0xd3, 0x46, 0x60, 0x8a, 0x93, 0xe6, 0x1c, 0x13, 0x99,
+	0x90, 0xc7, 0x2c, 0x3b, 0xcf, 0x87, 0x32, 0xe1, 0x9c, 0xe3, 0x50, 0x26, 0xd6, 0xbb, 0x60, 0xe1,
+	0xb2, 0x33, 0x39, 0x16, 0x2b, 0x7c, 0x63, 0x22, 0x93, 0x42, 0x86, 0xb5, 0x47, 0x09, 0xeb, 0x34,
+	0x94, 0x65, 0x01, 0x2d, 0x9e, 0x86, 0x8b, 0xb3, 0x56, 0x9c, 0xc4, 0x01, 0x0d, 0x7f, 0xd9, 0x47,
+	0x48, 0xe8, 0x0b, 0x29, 0x27, 0x5d, 0xf1, 0x24, 0xcb, 0x08, 0x3e, 0x83, 0x75, 0x22, 0xf4, 0x44,
+	0xca, 0x89, 0xab, 0xc4, 0x13, 0xb9, 0xd0, 0x72, 0xd2, 0x99, 0x6c, 0x39, 0xe9, 0x97, 0xbd, 0x07,
+	0xeb, 0xdd, 0xee, 0x83, 0x48, 0x78, 0xe4, 0xea, 0x50, 0x4f, 0xdf, 0xd0, 0x49, 0xfe, 0xbc, 0x02,
+	0x1b, 0xda, 0xe5, 0x1e, 0x88, 0xa4, 0x3f, 0x42, 0xee, 0xce, 0x43, 0x43, 0xf5, 0xa3, 0x38, 0xf5,
+	0xee, 0xfc, 0x81, 0x31, 0x23, 0x10, 0x2a, 0x71, 0xf3, 0xc0, 0x91, 0x96, 0x33, 0x08, 0x3e, 0x4c,
+	0xe3, 0x06, 0x56, 0xac, 0x63, 0xa4, 0xe4, 0x06, 0x72, 0xc0, 0x9a, 0x69, 0x38, 0x2d, 0x82, 0x3c,
+	0x90, 0x83, 0x04, 0x63, 0x1d, 0x0f, 0xc7, 0xfe, 0x70, 0x94, 0xe8, 0x02, 0x94, 0x67, 0x38, 0x08,
+	0xb1, 0xbe, 0x07, 0xeb, 0x49, 0x34, 0x71, 0x0d, 0x1a, 0x5c, 0x7a, 0xad, 0x25, 0xd1, 0xe4, 0x20,
+	0x25, 0x63, 0x3f, 0x28, 0xb2, 0x8d, 0x31, 0xe9, 0x63, 0x80, 0x01, 0x52, 0x30, 0x23, 0x74, 0xd1,
+	0x4e, 0xef, 0xe1, 0x30, 0x8a, 0x81, 0xe3, 0x0e, 0x61, 0x53, 0xdc, 0xf9, 0x1c, 0xdd, 0xe4, 0x9e,
+	0x4c, 0xbe, 0x4c, 0x46, 0x32, 0x3e, 0xe2, 0xc4, 0x48, 0x87, 0xcf, 0x4d, 0xa8, 0x4d, 0xb3, 0xca,
+	0x1b, 0x7f, 0x5a, 0x2f, 0x41, 0x23, 0x31, 0xb6, 0x5f, 0x4f, 0xb0, 0x88, 0xfb, 0xcd, 0x4a, 0x39,
+	0x09, 0x5d, 0x4b, 0x9d, 0x82, 0x04, 0x8a, 0x5d, 0xc6, 0x71, 0x14, 0x6b, 0x99, 0xf1, 0x87, 0xf5,
+	0x7d, 0xa8, 0xd3, 0x7e, 0xea, 0x25, 0x06, 0xf2, 0xd8, 0x97, 0xcf, 0xb2, 0xed, 0x10, 0x9a, 0x3d,
+	0xc2, 0xf3, 0xb6, 0x27, 0xc6, 0x72, 0x47, 0x84, 0x69, 0x25, 0x79, 0x11, 0x56, 0x7b, 0x22, 0x74,
+	0x73, 0x1e, 0x56, 0x7a, 0x22, 0xc4, 0x15, 0xaf, 0xc0, 0x1a, 0x0e, 0xc8, 0xd0, 0xe3, 0xe2, 0x90,
+	0xb9, 0x81, 0x9e, 0x08, 0xef, 0x86, 0x1e, 0x96, 0x85, 0xd6, 0x25, 0x68, 0x22, 0x06, 0xc5, 0x7a,
+	0x66, 0x0b, 0x49, 0x1d, 0x9d, 0x4c, 0x64, 0x9e, 0xf6, 0x39, 0x53, 0x35, 0x2a, 0x3f, 0x25, 0x6a,
+	0xb4, 0xe4, 0x94, 0xa8, 0x51, 0x7a, 0x4a, 0xd4, 0xc8, 0xfe, 0xe3, 0x0a, 0x15, 0xc1, 0xa8, 0xcf,
+	0x2e, 0x5a, 0x9b, 0x23, 0xc2, 0x27, 0xc8, 0xba, 0x16, 0x5d, 0x35, 0x17, 0x5d, 0x66, 0x9c, 0x35,
+	0xd3, 0x38, 0x2f, 0x43, 0x2b, 0x0a, 0x3c, 0x97, 0x47, 0xd8, 0xa6, 0x9a, 0x51, 0xe0, 0x11, 0x2d,
+	0xf4, 0x26, 0x63, 0x3f, 0x74, 0xd1, 0xaa, 0x18, 0x81, 0x0d, 0xaa, 0x3d, 0xf6, 0xc3, 0xa3, 0x68,
+	0xc2, 0x38, 0x57, 0x00, 0xed, 0xcb, 0x8d, 0x45, 0xf8, 0xc4, 0x0d, 0xa7, 0xe3, 0xad, 0x15, 0xb6,
+	0xcb, 0x24, 0x9a, 0x10, 0x2b, 0xd3, 0xb1, 0xed, 0x60, 0x6a, 0x78, 0x20, 0x9e, 0x93, 0x11, 0x1d,
+	0x52, 0xa0, 0x5e, 0xc8, 0xe4, 0x5b, 0xb0, 0x31, 0x16, 0xcf, 0x5d, 0x36, 0xc7, 0x09, 0x85, 0x7c,
+	0xce, 0xba, 0x3b, 0x63, 0x93, 0x80, 0xfd, 0x37, 0xb4, 0xed, 0x03, 0x31, 0x79, 0x20, 0x8f, 0x65,
+	0xb0, 0x4b, 0xae, 0x1c, 0x45, 0xf8, 0x0b, 0xb0, 0x19, 0xca, 0x67, 0x58, 0x4e, 0xb9, 0x01, 0x8e,
+	0xa4, 0x71, 0xb4, 0xe3, 0x74, 0x42, 0xf9, 0x2c, 0xc5, 0xdf, 0xf7, 0x70, 0xdf, 0x13, 0xa1, 0x94,
+	0xa9, 0xbe, 0x26, 0x02, 0x48, 0x79, 0x9f, 0x42, 0x3b, 0x96, 0xfd, 0x28, 0xf6, 0xf8, 0x44, 0xb0,
+	0x93, 0x7c, 0xb5, 0xa0, 0x0a, 0x5d, 0xc2, 0x10, 0x16, 0x57, 0x0d, 0x71, 0xf6, 0xdb, 0xba, 0x00,
+	0x2b, 0xbe, 0xba, 0x8f, 0x15, 0x59, 0x9d, 0x2e, 0x6e, 0xf4, 0x97, 0xfd, 0xfb, 0xd5, 0x79, 0xae,
+	0xd1, 0xce, 0x33, 0x03, 0xae, 0x98, 0x06, 0x6c, 0x41, 0x1d, 0xa5, 0x4a, 0xdc, 0x75, 0x1c, 0xfa,
+	0x8d, 0xf9, 0x2c, 0x49, 0x9a, 0x7d, 0x89, 0x22, 0xd6, 0x3a, 0x4e, 0x1b, 0x61, 0xec, 0x48, 0x94,
+	0xb5, 0x0b, 0x1b, 0xa8, 0x10, 0xed, 0x6d, 0x8c, 0xd0, 0x33, 0x53, 0x55, 0x67, 0x53, 0x88, 0xfd,
+	0x4e, 0x12, 0x4d, 0xf8, 0x93, 0x62, 0xc4, 0x05, 0x58, 0x09, 0xa3, 0xc4, 0x1f, 0x9c, 0x90, 0xca,
+	0x9b, 0x8e, 0xfe, 0xb2, 0xae, 0xc2, 0x26, 0x17, 0x6d, 0x6e, 0x2a, 0x20, 0x8f, 0x34, 0x5e, 0x77,
+	0xd6, 0x7b, 0xa6, 0x44, 0x3c, 0x8c, 0xa5, 0x1a, 0x05, 0x45, 0xec, 0xaa, 0x44, 0x8c, 0x27, 0x5b,
+	0xab, 0x84, 0xba, 0xc1, 0x03, 0x28, 0xea, 0x2e, 0x82, 0xed, 0x24, 0xcb, 0x5e, 0x91, 0xab, 0xf4,
+	0x06, 0xef, 0x32, 0xb4, 0x68, 0xaf, 0x46, 0xbe, 0xdc, 0x44, 0x00, 0x1e, 0x22, 0x1c, 0x54, 0x89,
+	0x88, 0xb1, 0x2e, 0x7b, 0x4e, 0x12, 0x6a, 0x38, 0x4d, 0x02, 0xec, 0x7b, 0xcf, 0xd1, 0x13, 0x92,
+	0xc7, 0x55, 0x52, 0xa8, 0x28, 0xbb, 0xbd, 0x6a, 0x38, 0x6b, 0x08, 0xed, 0x12, 0x70, 0xdf, 0xb3,
+	0xff, 0xb3, 0x32, 0xb7, 0xec, 0x62, 0x65, 0x7c, 0xa8, 0x99, 0x31, 0xd2, 0x8c, 0xa2, 0x8b, 0xcc,
+	0xe8, 0x90, 0x38, 0x89, 0x51, 0x92, 0x24, 0x32, 0x2a, 0x83, 0x01, 0x1d, 0x10, 0xcd, 0x46, 0x13,
+	0x01, 0x88, 0x5a, 0xdc, 0x62, 0x7d, 0xd9, 0x16, 0x1b, 0x33, 0x5b, 0x7c, 0x0b, 0x36, 0x32, 0xb2,
+	0xfa, 0x70, 0xf2, 0xc9, 0xeb, 0xa4, 0xc4, 0xe9, 0x78, 0xda, 0xbf, 0x82, 0xa5, 0x75, 0xc6, 0x9b,
+	0x23, 0x9f, 0x89, 0xd8, 0x2b, 0xf7, 0xce, 0x99, 0x7f, 0xa8, 0xce, 0xf8, 0x87, 0x59, 0x29, 0x36,
+	0x55, 0x2a, 0xc1, 0x9f, 0x94, 0x10, 0x47, 0x11, 0x16, 0xf6, 0x5c, 0x99, 0xd9, 0xf3, 0x55, 0xd8,
+	0x8c, 0x09, 0xd3, 0x50, 0x0f, 0x2f, 0xb9, 0xce, 0xf0, 0x4c, 0x41, 0xbf, 0x5a, 0x20, 0xff, 0x68,
+	0xe2, 0x89, 0x84, 0x0e, 0xf9, 0xbc, 0x7a, 0x2b, 0xf3, 0xea, 0xa5, 0x6b, 0x3c, 0x5e, 0xc7, 0x3c,
+	0x0a, 0x5c, 0xad, 0x69, 0x0e, 0x72, 0x83, 0xb7, 0xff, 0xa4, 0x52, 0xb2, 0xd8, 0x62, 0x73, 0xd8,
+	0x5f, 0x48, 0x7c, 0xf6, 0x9c, 0x7d, 0x21, 0x4f, 0x1e, 0x8b, 0x60, 0x2a, 0x51, 0xa5, 0x37, 0x6f,
+	0xcc, 0xaf, 0x5c, 0x2a, 0x8f, 0x5a, 0xa9, 0x3c, 0xfe, 0xa8, 0x02, 0x5b, 0xba, 0x38, 0x3a, 0x14,
+	0x4a, 0xe5, 0xee, 0x10, 0x7d, 0xe9, 0x67, 0xd0, 0xa1, 0xea, 0xc7, 0xed, 0x15, 0x2a, 0xed, 0x22,
+	0x33, 0x34, 0x37, 0x2f, 0x20, 0xdb, 0x34, 0x63, 0x87, 0x8b, 0xec, 0xd2, 0x03, 0x5b, 0x2d, 0x3d,
+	0xb0, 0x18, 0x86, 0x7d, 0xe5, 0x0e, 0xf9, 0x86, 0xbc, 0xe9, 0xd4, 0x7d, 0xb5, 0x37, 0xb6, 0x6f,
+	0x61, 0x20, 0xa7, 0x15, 0x0e, 0xfc, 0xd0, 0x70, 0xf6, 0xf2, 0x29, 0xe6, 0x2e, 0xcc, 0x1c, 0x39,
+	0x65, 0x2d, 0x4a, 0x20, 0x10, 0xb9, 0x42, 0xfb, 0x5f, 0x2b, 0xd0, 0x29, 0x4c, 0xc5, 0x29, 0x66,
+	0x14, 0xd0, 0x53, 0x06, 0x19, 0x59, 0xeb, 0x23, 0x68, 0xe0, 0x3e, 0x95, 0x2e, 0x81, 0x4e, 0x53,
+	0x30, 0xf3, 0x04, 0x24, 0x6d, 0xec, 0x54, 0x07, 0x18, 0xc8, 0xf7, 0x88, 0x08, 0xda, 0xcb, 0x11,
+	0x42, 0x9d, 0x9c, 0x2c, 0x30, 0x88, 0x10, 0xde, 0x04, 0xed, 0xee, 0xdc, 0x63, 0x19, 0x2b, 0x3f,
+	0x0a, 0xf5, 0xf9, 0xec, 0x30, 0xf4, 0x31, 0x03, 0xed, 0x7f, 0xaa, 0x94, 0x8b, 0x44, 0x27, 0x5d,
+	0x2c, 0x12, 0xad, 0xac, 0x79, 0x8f, 0x52, 0x98, 0xe7, 0xb4, 0x08, 0x9b, 0x34, 0x55, 0xe6, 0x84,
+	0xab, 0xa7, 0x77, 0xc2, 0xb5, 0x72, 0x9d, 0xe6, 0x2e, 0xbf, 0x6e, 0xba, 0x7c, 0xfb, 0x5d, 0xdc,
+	0x03, 0xda, 0xdb, 0x51, 0xa6, 0x2e, 0x3e, 0xed, 0x25, 0x4e, 0xc4, 0xbe, 0x09, 0xeb, 0x39, 0x1a,
+	0x31, 0x9b, 0x46, 0x31, 0x7d, 0xe1, 0x41, 0x51, 0x6c, 0x2e, 0xee, 0xdb, 0x71, 0xf9, 0x22, 0x2f,
+	0x74, 0x26, 0xb7, 0x0a, 0x52, 0x2c, 0x3b, 0x7f, 0x45, 0x76, 0x0c, 0x31, 0xda, 0xa1, 0x4e, 0x3c,
+	0xef, 0xc5, 0xbe, 0x0c, 0xbd, 0xa3, 0x14, 0x5e, 0xee, 0x1d, 0x2f, 0x41, 0x73, 0xe6, 0xc6, 0x67,
+	0x75, 0xca, 0x77, 0x3d, 0xe8, 0x21, 0x7a, 0x72, 0xe8, 0x87, 0x69, 0x62, 0x45, 0x1f, 0xf4, 0x0e,
+	0x10, 0xa6, 0xef, 0x44, 0xf8, 0xd3, 0xfe, 0xd3, 0x4a, 0xf9, 0x82, 0xe5, 0x99, 0xae, 0x61, 0xde,
+	0xb5, 0xb3, 0x99, 0xf7, 0x79, 0x68, 0x0c, 0xfc, 0x50, 0x04, 0xfa, 0x70, 0xf2, 0x47, 0xce, 0x65,
+	0xbd, 0x84, 0xcb, 0x46, 0xce, 0xe5, 0x3b, 0x98, 0xad, 0x7d, 0x19, 0x06, 0x7e, 0x28, 0xf7, 0x64,
+	0x82, 0x39, 0xe6, 0x42, 0xa1, 0xd8, 0x83, 0x52, 0x5c, 0xdc, 0xcf, 0x2d, 0x68, 0x61, 0x16, 0xcb,
+	0x77, 0x14, 0x6c, 0xdc, 0xc5, 0xfc, 0x09, 0x91, 0xcd, 0xca, 0xdc, 0x69, 0xc6, 0x3a, 0x1b, 0x2e,
+	0xb1, 0x8e, 0xdf, 0xa5, 0x6c, 0x2f, 0x4d, 0x97, 0xf3, 0x6c, 0x6f, 0x5e, 0x6a, 0x97, 0xf5, 0xba,
+	0x14, 0x50, 0x75, 0x5a, 0x80, 0x00, 0x0a, 0xa8, 0xe5, 0x19, 0xf0, 0x05, 0x58, 0xa1, 0x1f, 0xd7,
+	0xd2, 0x37, 0x3d, 0xfe, 0xca, 0xe0, 0xd7, 0xb5, 0x74, 0xf4, 0x97, 0xfd, 0x17, 0x25, 0xcc, 0x94,
+	0xab, 0x70, 0x29, 0x33, 0xaf, 0x02, 0xd0, 0x60, 0x1c, 0x4d, 0xc3, 0xd4, 0xe1, 0x13, 0xba, 0x83,
+	0x80, 0x9c, 0xd7, 0x7a, 0x39, 0xaf, 0x8d, 0x05, 0xbc, 0xae, 0x14, 0x78, 0x25, 0x05, 0x69, 0xd5,
+	0xf0, 0xfb, 0xe0, 0xe2, 0xf8, 0xff, 0x2d, 0xb8, 0xb5, 0x7f, 0x5a, 0x29, 0x5d, 0xe8, 0x1b, 0x88,
+	0xe5, 0x02, 0xac, 0x70, 0xd4, 0xd3, 0xd6, 0xab, 0xbf, 0x28, 0xf1, 0xe5, 0x28, 0xc9, 0x2c, 0xb0,
+	0x58, 0xda, 0x0c, 0xcb, 0x98, 0x38, 0x9f, 0x31, 0xd1, 0x1d, 0x45, 0x93, 0xc5, 0xa7, 0x79, 0x29,
+	0x0b, 0xe8, 0x70, 0x46, 0xd1, 0xc4, 0xac, 0xdd, 0x9a, 0x08, 0xa0, 0xc1, 0xd7, 0xa0, 0xad, 0xa6,
+	0x3d, 0x97, 0x10, 0xb2, 0x67, 0xe0, 0x96, 0x9a, 0xf6, 0x68, 0x41, 0xcf, 0xfe, 0xc7, 0x32, 0x26,
+	0xbe, 0x85, 0x79, 0xa8, 0x44, 0x0c, 0xa5, 0x29, 0xf0, 0x2e, 0x02, 0x66, 0xf4, 0x51, 0x9f, 0xb5,
+	0x9e, 0xc2, 0x16, 0x1a, 0xcb, 0xb7, 0xb0, 0x32, 0xbb, 0x85, 0x3f, 0x20, 0x03, 0x37, 0xb6, 0xb0,
+	0x33, 0x3d, 0xf9, 0xbf, 0x16, 0xe3, 0x25, 0x68, 0x0e, 0xa3, 0xc8, 0x53, 0xb9, 0x0c, 0x57, 0xe9,
+	0x9b, 0x2b, 0x33, 0x1e, 0xc2, 0x6a, 0x52, 0xf3, 0x4e, 0x00, 0xac, 0x25, 0xff, 0xbd, 0x84, 0xb7,
+	0xff, 0x5f, 0xd2, 0x35, 0x77, 0xb6, 0xb2, 0x64, 0x67, 0xab, 0x33, 0x3b, 0xdb, 0xa6, 0xfb, 0x07,
+	0xde, 0x18, 0x39, 0xc4, 0x33, 0x4b, 0xdc, 0xfe, 0x87, 0xea, 0x0c, 0x8d, 0xc5, 0xf9, 0xeb, 0x7c,
+	0xe5, 0xbd, 0xb4, 0x4e, 0xb9, 0x04, 0xcd, 0xec, 0xae, 0xa3, 0x4e, 0x73, 0x56, 0xa5, 0xbe, 0xe8,
+	0x28, 0x70, 0xd4, 0x98, 0x91, 0xf3, 0x0d, 0x68, 0x62, 0x2d, 0x4a, 0x51, 0x60, 0x85, 0xa2, 0xc0,
+	0xa5, 0xb9, 0x28, 0x80, 0x0b, 0x1c, 0x45, 0x93, 0xeb, 0xce, 0x6a, 0xc2, 0xaf, 0x06, 0x28, 0x7e,
+	0x62, 0x85, 0x93, 0xc5, 0x55, 0x6d, 0x9f, 0x32, 0x18, 0x50, 0x18, 0xb7, 0xae, 0x43, 0x93, 0x6e,
+	0x41, 0x91, 0x68, 0xb3, 0xe4, 0x89, 0x1f, 0x89, 0xea, 0x8b, 0x53, 0x67, 0x75, 0xc2, 0x3f, 0xb0,
+	0x66, 0xe8, 0x4f, 0x63, 0xd7, 0x50, 0x6b, 0x8b, 0x6b, 0x86, 0xfe, 0x34, 0x76, 0x32, 0x3f, 0xe6,
+	0xa5, 0x6f, 0xf0, 0x08, 0xf9, 0xa6, 0xbe, 0x92, 0xd2, 0x4b, 0x72, 0x55, 0x86, 0xe9, 0x03, 0x83,
+	0x48, 0x4f, 0xff, 0x52, 0x99, 0x5b, 0xe6, 0x8c, 0x9a, 0xca, 0x17, 0xaf, 0x2d, 0x5f, 0xbc, 0x3e,
+	0xbb, 0xb8, 0x75, 0x13, 0x5a, 0x7e, 0x22, 0xc7, 0x9c, 0xc9, 0x34, 0x4a, 0x74, 0x62, 0x16, 0x2c,
+	0x4e, 0x13, 0x71, 0x29, 0xcb, 0x29, 0x9e, 0x89, 0x95, 0xd9, 0x08, 0xf0, 0x1b, 0x15, 0x58, 0xc3,
+	0xed, 0x1c, 0xe8, 0xf7, 0x86, 0x12, 0xa1, 0xdd, 0xca, 0x58, 0x33, 0x8a, 0xa5, 0x25, 0x6b, 0x6b,
+	0xae, 0x69, 0x75, 0xba, 0x17, 0xf2, 0x03, 0x77, 0x22, 0x62, 0x31, 0x36, 0xef, 0xe5, 0x3b, 0x08,
+	0x3e, 0x44, 0x28, 0x95, 0x71, 0x7f, 0x5d, 0x81, 0xcb, 0x1c, 0x9c, 0xb3, 0x97, 0x83, 0xac, 0x32,
+	0xc5, 0x2a, 0xe9, 0x35, 0x68, 0x13, 0x9d, 0xfe, 0x60, 0x98, 0xd7, 0x8d, 0x2d, 0x04, 0xed, 0x0e,
+	0x86, 0x7c, 0x44, 0x69, 0xdc, 0x54, 0x2c, 0x02, 0x52, 0xd1, 0xd1, 0x20, 0x59, 0x5e, 0x6d, 0x81,
+	0x39, 0xa7, 0x02, 0xe0, 0x79, 0xa9, 0x3d, 0x2f, 0x71, 0x27, 0xfc, 0x3e, 0x9b, 0x5a, 0xc3, 0x0b,
+	0x8a, 0xf4, 0x9b, 0x66, 0x5e, 0xf5, 0x42, 0x09, 0x66, 0x39, 0x95, 0xfd, 0xe7, 0x15, 0x58, 0xcf,
+	0x69, 0x97, 0x70, 0x55, 0x99, 0x75, 0x72, 0xe6, 0xed, 0x53, 0x9a, 0xb7, 0xcf, 0x68, 0xb0, 0xf6,
+	0x2d, 0x35, 0x58, 0x2f, 0xd3, 0xe0, 0xcf, 0x0a, 0x9c, 0xa6, 0x57, 0x28, 0x8b, 0x4f, 0xdb, 0x6d,
+	0xa0, 0xdb, 0x2f, 0x37, 0xcb, 0x1a, 0xca, 0xaf, 0xba, 0xf2, 0x8d, 0x3b, 0x10, 0x67, 0xdf, 0x98,
+	0x56, 0x0c, 0xa8, 0xd7, 0xa6, 0x98, 0x56, 0x30, 0x8c, 0xd5, 0x33, 0x2a, 0x55, 0x4f, 0x79, 0xd0,
+	0xb9, 0x5d, 0x66, 0xe2, 0x8b, 0x98, 0xa1, 0x7b, 0x2e, 0x43, 0x44, 0xf6, 0x7d, 0xaa, 0x16, 0xa5,
+	0x9a, 0x59, 0xca, 0xb8, 0x29, 0x3d, 0x6d, 0x24, 0xf8, 0x84, 0x1f, 0x61, 0xd0, 0x1a, 0xf9, 0x9a,
+	0xb6, 0x9c, 0x46, 0xe1, 0xca, 0xa7, 0xa3, 0x93, 0x4c, 0xfb, 0x10, 0x3a, 0xfc, 0x44, 0x82, 0xa6,
+	0x8c, 0x13, 0xcb, 0x1d, 0xd3, 0xdb, 0x50, 0x47, 0xcd, 0xe9, 0xf2, 0xfb, 0xe5, 0x92, 0xb6, 0x15,
+	0x3f, 0x70, 0x08, 0xc5, 0xfe, 0xf5, 0x2a, 0x92, 0x44, 0x40, 0xfa, 0x38, 0xf6, 0xb9, 0xb6, 0x06,
+	0x95, 0x88, 0x44, 0xe6, 0x8f, 0x59, 0xb3, 0xae, 0x1c, 0xa7, 0xec, 0x46, 0x61, 0x22, 0xc3, 0x84,
+	0xed, 0xa4, 0x8b, 0xf8, 0xe6, 0x03, 0x24, 0x51, 0x31, 0x5f, 0xba, 0x3c, 0x19, 0xe0, 0x2c, 0xc2,
+	0xb9, 0x0d, 0x1d, 0xe1, 0x79, 0x06, 0x4e, 0xed, 0x05, 0x6b, 0xb4, 0x85, 0xe7, 0x65, 0xb3, 0xc9,
+	0x57, 0x3c, 0xe7, 0xd9, 0x79, 0xaa, 0x37, 0x16, 0xcf, 0x11, 0x63, 0xdf, 0xb3, 0xde, 0x05, 0x0b,
+	0x43, 0xca, 0x30, 0x88, 0x7a, 0x22, 0xc8, 0xd0, 0x38, 0x04, 0x6e, 0xf4, 0xa7, 0xf1, 0x1e, 0x0d,
+	0x30, 0xb2, 0xed, 0x52, 0x8b, 0x4b, 0x34, 0x9e, 0xc8, 0xc4, 0x4f, 0xfc, 0x28, 0x4c, 0xef, 0xfc,
+	0xf7, 0x60, 0xb3, 0x9f, 0x43, 0xd3, 0x7a, 0x69, 0xbe, 0x49, 0x85, 0xba, 0x2f, 0x72, 0x44, 0x67,
+	0xc3, 0x98, 0x45, 0x27, 0x7c, 0xa8, 0x3b, 0x0e, 0x1e, 0xf9, 0xde, 0xce, 0x09, 0x3d, 0x60, 0x88,
+	0x31, 0xad, 0x70, 0x09, 0x28, 0x8e, 0x1b, 0xaf, 0x18, 0xab, 0xf8, 0xfd, 0xc8, 0xa7, 0xf6, 0x09,
+	0x25, 0x45, 0xdc, 0x1f, 0xb9, 0xa1, 0x18, 0x67, 0xfd, 0x7f, 0x0c, 0xc2, 0xe9, 0x59, 0x0f, 0x5f,
+	0xcd, 0xe8, 0xe1, 0xeb, 0x97, 0x2d, 0x84, 0xc7, 0xe1, 0x47, 0xb0, 0x91, 0xb7, 0x31, 0x98, 0x3a,
+	0x3d, 0x4d, 0xed, 0xda, 0xc9, 0x7a, 0x19, 0xe8, 0x28, 0x50, 0x9b, 0xd2, 0x9d, 0x1d, 0xae, 0x94,
+	0xb7, 0x3d, 0xef, 0x9e, 0x08, 0x95, 0xde, 0x0c, 0x75, 0x04, 0x19, 0x9b, 0xc1, 0x6f, 0xdc, 0xcc,
+	0x45, 0x58, 0x45, 0x65, 0xe7, 0xc1, 0x72, 0x45, 0x78, 0xde, 0x23, 0x9f, 0x42, 0xd3, 0x3c, 0xb1,
+	0xc5, 0x01, 0xd7, 0x5c, 0xa2, 0x5a, 0x5c, 0xe2, 0x93, 0x7c, 0x89, 0xda, 0xa9, 0x2f, 0x9d, 0x52,
+	0x36, 0x0a, 0x5b, 0xba, 0x23, 0x03, 0xe4, 0x02, 0x8f, 0xc2, 0xf2, 0x2d, 0xa1, 0x8d, 0x1b, 0x5b,
+	0xf2, 0x64, 0x80, 0xb4, 0xfe, 0x99, 0xd2, 0x60, 0x4d, 0xca, 0x78, 0x41, 0xba, 0x09, 0x4d, 0x4c,
+	0xed, 0x0d, 0xd9, 0x2f, 0xbd, 0x8c, 0x5c, 0x55, 0xd3, 0x1e, 0x99, 0xfa, 0x47, 0xd0, 0x1a, 0x88,
+	0x50, 0x9d, 0xfa, 0x16, 0xb3, 0x89, 0xd8, 0x34, 0xf3, 0x16, 0x40, 0x2f, 0x10, 0xfd, 0x42, 0x0b,
+	0xc1, 0xd2, 0xa9, 0x2d, 0x42, 0x27, 0x25, 0x53, 0xff, 0x18, 0x3a, 0x9a, 0x7c, 0x23, 0x28, 0x90,
+	0x0f, 0x60, 0x65, 0x40, 0x80, 0x85, 0xfd, 0x63, 0x8c, 0xef, 0x68, 0x34, 0xfb, 0xbf, 0x2a, 0x60,
+	0x7d, 0x1d, 0xc5, 0x81, 0xb7, 0x13, 0x29, 0x45, 0x1e, 0x22, 0xed, 0x1a, 0xea, 0x45, 0xca, 0x68,
+	0xa5, 0x58, 0xc1, 0xcf, 0x7d, 0xcf, 0x5a, 0x87, 0xea, 0x68, 0xa2, 0x7d, 0x66, 0x75, 0x34, 0x29,
+	0xdc, 0xed, 0xd4, 0x8a, 0x77, 0x3b, 0x78, 0x42, 0xa6, 0xa8, 0x55, 0x33, 0xf7, 0x05, 0x06, 0x51,
+	0xfa, 0xfb, 0x06, 0x74, 0xbc, 0x69, 0x2c, 0xe8, 0xf0, 0x12, 0x8a, 0x7e, 0x73, 0x4d, 0x81, 0x84,
+	0x84, 0x09, 0x2d, 0x53, 0xf1, 0xbd, 0xe7, 0x79, 0xc1, 0x85, 0x90, 0x7d, 0xef, 0xb9, 0x75, 0x15,
+	0x36, 0xf5, 0x30, 0xf1, 0x4b, 0x1e, 0x9d, 0xb3, 0xde, 0x75, 0x86, 0xe3, 0xbe, 0xc8, 0xaf, 0xff,
+	0x77, 0x05, 0x1d, 0x29, 0xb5, 0x17, 0x47, 0xc3, 0x05, 0x69, 0x56, 0xda, 0x61, 0x54, 0x35, 0x3a,
+	0x8c, 0x2e, 0xb1, 0x5d, 0x98, 0xaf, 0x91, 0x6a, 0xda, 0x4b, 0x4b, 0xa1, 0xb9, 0x90, 0xdc, 0x9a,
+	0xa4, 0xe1, 0x18, 0x03, 0x24, 0x7d, 0xdc, 0xbc, 0x91, 0x67, 0x8c, 0x75, 0xa7, 0xad, 0x61, 0xda,
+	0x04, 0x0a, 0x41, 0x6f, 0xe5, 0x2c, 0x59, 0x01, 0x32, 0x96, 0xe8, 0xdb, 0xf3, 0xd5, 0x2b, 0xb5,
+	0xab, 0x2d, 0x67, 0x55, 0x25, 0x7c, 0x23, 0x7f, 0x17, 0xd6, 0xb2, 0xad, 0xf2, 0x3b, 0x7d, 0x33,
+	0x88, 0x86, 0xa6, 0x6d, 0xcf, 0xf4, 0x52, 0x98, 0x72, 0x71, 0x56, 0x83, 0x88, 0x1b, 0x29, 0xc6,
+	0x70, 0x8e, 0x1b, 0x94, 0xd4, 0xb5, 0x83, 0x13, 0xf5, 0x94, 0x2f, 0x25, 0xcf, 0x43, 0x63, 0x1c,
+	0x85, 0xf2, 0x44, 0xbf, 0x0d, 0xf2, 0x87, 0xf5, 0x26, 0xac, 0x27, 0x51, 0x22, 0x02, 0x37, 0x96,
+	0xfd, 0x91, 0x88, 0x87, 0x2c, 0xc3, 0xaa, 0xd3, 0x21, 0xa8, 0xa3, 0x81, 0x18, 0x79, 0x8f, 0x7d,
+	0xfd, 0xbe, 0x98, 0xe6, 0xdf, 0xc7, 0x3e, 0xbf, 0xe9, 0xd9, 0x2f, 0xa5, 0xfd, 0xba, 0x8e, 0x54,
+	0xb4, 0xde, 0xc3, 0x64, 0x60, 0xff, 0x1e, 0x5d, 0x8f, 0xb0, 0x63, 0x20, 0xfb, 0xe4, 0x5b, 0xa3,
+	0xf2, 0xa0, 0x8c, 0x05, 0xe4, 0xd4, 0x0f, 0x8c, 0x5b, 0xdd, 0x55, 0xfa, 0xe6, 0x76, 0xb7, 0xb4,
+	0x6b, 0xc7, 0xa8, 0x2c, 0x74, 0x67, 0x0e, 0x2a, 0xf3, 0x2a, 0x6c, 0x7a, 0x12, 0x0d, 0x89, 0xaf,
+	0xce, 0x0d, 0x9b, 0x5d, 0x27, 0x38, 0x5d, 0x25, 0x53, 0xdb, 0xb2, 0x84, 0x4b, 0xdc, 0x47, 0xba,
+	0x1b, 0x05, 0x81, 0xec, 0xa3, 0xa9, 0x2e, 0x63, 0xea, 0x22, 0xac, 0xf6, 0x45, 0x7e, 0xd3, 0xdc,
+	0x70, 0x56, 0xf0, 0x73, 0x9f, 0x9a, 0x16, 0x68, 0xc0, 0x94, 0x46, 0x0b, 0x21, 0x2c, 0x8e, 0xaf,
+	0x50, 0x89, 0x78, 0xc4, 0x0f, 0x65, 0x82, 0x94, 0xdf, 0x82, 0xda, 0x44, 0x26, 0x0b, 0xdb, 0xc8,
+	0x0e, 0x65, 0xe2, 0x20, 0x02, 0x0a, 0x21, 0x88, 0x84, 0xe7, 0xa2, 0x17, 0xe0, 0xe6, 0xf7, 0x55,
+	0xfc, 0xbe, 0x1b, 0x7a, 0x76, 0x98, 0x7a, 0x8d, 0xbc, 0x27, 0x98, 0xdb, 0x6d, 0xbe, 0x4d, 0x23,
+	0xf1, 0x92, 0xf5, 0xfe, 0x92, 0xae, 0x6d, 0x0f, 0x65, 0xf2, 0xd5, 0x54, 0xc6, 0x27, 0xdb, 0x4a,
+	0xf9, 0x2a, 0xeb, 0x71, 0xd8, 0x85, 0x73, 0x4f, 0x11, 0xea, 0x0a, 0x02, 0x9b, 0xc6, 0x59, 0xf4,
+	0x5a, 0x3c, 0x8d, 0x2c, 0x73, 0xe3, 0x69, 0x4e, 0x67, 0xe6, 0xad, 0xb5, 0x5a, 0x78, 0x6b, 0x5d,
+	0xe2, 0x96, 0x4c, 0x1b, 0xa9, 0x17, 0x6c, 0xc4, 0x3e, 0x2e, 0xe7, 0x16, 0xe3, 0x5d, 0xbe, 0x50,
+	0xa5, 0xb0, 0x50, 0xe9, 0x2e, 0xaa, 0x67, 0xdb, 0x85, 0xfd, 0x15, 0x1a, 0xfe, 0xa1, 0x4c, 0xba,
+	0x32, 0x61, 0xa8, 0x56, 0xca, 0xbc, 0x64, 0x2e, 0x97, 0xd0, 0xa4, 0xc6, 0x2c, 0x4a, 0xce, 0x45,
+	0x4e, 0xf2, 0xef, 0xab, 0x74, 0x6c, 0x64, 0xb2, 0x13, 0x85, 0x5e, 0xbe, 0x14, 0x0a, 0xfe, 0x35,
+	0xa0, 0x96, 0xa6, 0x99, 0x3a, 0x0e, 0x41, 0x5c, 0xc7, 0xed, 0xc0, 0x46, 0x3f, 0x0a, 0x3d, 0x4a,
+	0x8f, 0x7e, 0x78, 0xca, 0x7a, 0x73, 0x3d, 0x9f, 0x41, 0x42, 0x36, 0x69, 0x5c, 0x3b, 0x65, 0xc5,
+	0x93, 0xd3, 0xb8, 0x36, 0x47, 0xe3, 0xba, 0xf9, 0x18, 0x7f, 0x2a, 0x1a, 0xd7, 0x53, 0x65, 0x67,
+	0x76, 0xd0, 0x58, 0x6c, 0x07, 0x2b, 0x45, 0x3b, 0x88, 0x4b, 0x65, 0x87, 0x66, 0xf0, 0x22, 0xd9,
+	0x7d, 0x54, 0x54, 0xda, 0x0b, 0x0c, 0xc1, 0x54, 0xd8, 0x4d, 0xbd, 0xe6, 0xb6, 0x77, 0xbc, 0xdd,
+	0x1f, 0xf9, 0xf2, 0x58, 0x8e, 0x31, 0xab, 0x96, 0x4f, 0xad, 0xef, 0x00, 0x4c, 0x64, 0x52, 0x5c,
+	0xb2, 0x39, 0x91, 0x09, 0xad, 0x68, 0xff, 0x61, 0xa5, 0x74, 0x22, 0x32, 0xbb, 0x74, 0xa2, 0xf5,
+	0x36, 0x6c, 0x8a, 0x1c, 0xdf, 0x6c, 0xe6, 0xd8, 0x30, 0xe0, 0x14, 0x83, 0x3f, 0x82, 0x06, 0xa5,
+	0x98, 0x67, 0xc8, 0xdc, 0x78, 0x82, 0xfd, 0x18, 0x5d, 0xe5, 0x1c, 0x73, 0x5d, 0x76, 0x68, 0xcb,
+	0xf9, 0xbb, 0x0c, 0x2d, 0xe1, 0x1d, 0x6b, 0xe7, 0xa8, 0x8b, 0x34, 0xe1, 0x1d, 0xb3, 0x6f, 0x3c,
+	0xa1, 0x96, 0x69, 0xbe, 0xac, 0xc2, 0xf5, 0x72, 0xff, 0x4b, 0xcf, 0xa5, 0x18, 0x88, 0xcc, 0x6e,
+	0x32, 0x20, 0x10, 0x37, 0xdd, 0xbc, 0xa7, 0x7b, 0x9b, 0xaa, 0x65, 0xad, 0xfa, 0x39, 0x45, 0x6e,
+	0x6d, 0x4a, 0xdd, 0x79, 0x2d, 0x7f, 0x50, 0x39, 0x80, 0x2d, 0x5e, 0x9a, 0xdc, 0xe1, 0x19, 0x17,
+	0x9f, 0x7f, 0x9f, 0x79, 0x8c, 0x25, 0xc1, 0xdd, 0xe7, 0x13, 0xc9, 0x66, 0x7b, 0x67, 0xe7, 0xbe,
+	0x0c, 0x26, 0xa8, 0x76, 0x1b, 0x3a, 0x3d, 0xe9, 0x8e, 0x64, 0x30, 0x91, 0x9e, 0x91, 0xe0, 0xb6,
+	0x7b, 0xf2, 0x3e, 0xc1, 0x1e, 0x71, 0xbc, 0x5b, 0x90, 0x6f, 0xdb, 0x41, 0x19, 0xdd, 0xc5, 0x99,
+	0xfb, 0xdc, 0x6a, 0xd5, 0xe5, 0xab, 0xd5, 0x8a, 0xab, 0xb9, 0xe8, 0x39, 0x31, 0xb0, 0xec, 0x87,
+	0xc7, 0x7e, 0x22, 0xd2, 0xca, 0x0a, 0x65, 0x72, 0x07, 0x36, 0xfc, 0x0c, 0xb8, 0xf8, 0x79, 0x9d,
+	0x5b, 0xca, 0x52, 0x3c, 0x67, 0x3d, 0x9f, 0x43, 0x0f, 0x8e, 0xff, 0x56, 0xc7, 0xd0, 0x95, 0x23,
+	0xa4, 0xc5, 0xf0, 0x65, 0x68, 0xf5, 0x84, 0x92, 0xae, 0x12, 0xc7, 0x52, 0xbb, 0xe6, 0x66, 0x4f,
+	0xff, 0xbb, 0x0f, 0x0e, 0xf6, 0x03, 0xbf, 0xcf, 0xcd, 0x55, 0xda, 0x84, 0x08, 0xf0, 0x70, 0x3a,
+	0xb6, 0x6e, 0xc0, 0x05, 0xaa, 0xed, 0x0c, 0xe6, 0xc2, 0xe9, 0xb8, 0x97, 0x75, 0x4d, 0x9d, 0xc7,
+	0xd1, 0x7c, 0xc1, 0x87, 0x34, 0xc6, 0x8d, 0x86, 0xf4, 0x9f, 0x4d, 0xd3, 0x2c, 0x7e, 0xb4, 0x18,
+	0xf2, 0x28, 0xed, 0xc1, 0xa2, 0xe1, 0xec, 0xce, 0xb7, 0x91, 0xf6, 0x60, 0x21, 0x38, 0x6d, 0x71,
+	0x7b, 0x07, 0xce, 0x31, 0x67, 0x63, 0x89, 0x64, 0xf3, 0xec, 0xaf, 0xee, 0x6c, 0xd0, 0xc0, 0x01,
+	0xc1, 0xc9, 0x51, 0x7d, 0x08, 0x5b, 0x8c, 0x1b, 0xcb, 0x49, 0x20, 0x4e, 0x5c, 0xbd, 0x40, 0x96,
+	0xf7, 0xd5, 0x9d, 0x97, 0x69, 0xdc, 0xa1, 0xe1, 0x03, 0x1a, 0xd5, 0x25, 0x7c, 0x2b, 0xef, 0x31,
+	0xe6, 0xdb, 0xde, 0xef, 0x16, 0x64, 0x9e, 0xef, 0x2e, 0xeb, 0x55, 0x6e, 0x26, 0x69, 0x97, 0x72,
+	0x17, 0x5e, 0xa2, 0x0b, 0x00, 0x66, 0x30, 0xf3, 0xa2, 0x2d, 0xa2, 0xf3, 0xbd, 0x05, 0x74, 0x98,
+	0xed, 0xc7, 0x82, 0xaf, 0xf1, 0x36, 0x85, 0xe7, 0x31, 0x44, 0xf7, 0xf6, 0x5b, 0xdf, 0x87, 0x97,
+	0xe8, 0xe6, 0x61, 0x86, 0x28, 0x70, 0x67, 0x89, 0x27, 0x83, 0x22, 0xfa, 0xe7, 0xb0, 0x86, 0x3c,
+	0x64, 0xb9, 0x6b, 0x9b, 0x16, 0x7f, 0x6d, 0xc1, 0xe2, 0x69, 0xfe, 0x0a, 0xc2, 0xf3, 0x1e, 0x70,
+	0x0a, 0x4b, 0xfa, 0xe2, 0xc5, 0xd0, 0x06, 0xd6, 0xf4, 0x3d, 0x04, 0x41, 0x1e, 0x4e, 0xc7, 0xf6,
+	0x2f, 0xe3, 0x61, 0xce, 0x29, 0xec, 0x49, 0xad, 0x67, 0xfd, 0x5f, 0x90, 0x43, 0x99, 0x19, 0x05,
+	0xdb, 0x56, 0x6b, 0x28, 0xcb, 0x2d, 0xa1, 0x3a, 0x63, 0x09, 0xf6, 0x60, 0x01, 0x65, 0x3c, 0x82,
+	0xef, 0xc2, 0xb9, 0x79, 0xab, 0xd3, 0xff, 0x24, 0xe7, 0x2f, 0xb7, 0xb8, 0xb9, 0x75, 0x3e, 0x84,
+	0x57, 0xcd, 0x75, 0x78, 0xd2, 0x23, 0x95, 0xbf, 0xc7, 0x63, 0xe6, 0x62, 0xae, 0xa0, 0xbf, 0xec,
+	0x3f, 0xab, 0x2c, 0x9b, 0xb9, 0xd8, 0x53, 0x64, 0xc1, 0xa0, 0x7a, 0xc6, 0x60, 0x30, 0xa3, 0x8b,
+	0xda, 0x8c, 0x2e, 0x0c, 0x46, 0xeb, 0x05, 0x46, 0x7f, 0x56, 0x81, 0xd7, 0x4d, 0x46, 0xd9, 0x44,
+	0x1e, 0x46, 0x89, 0xdf, 0x97, 0x6c, 0xed, 0xe8, 0x08, 0x8a, 0x62, 0xaa, 0xcc, 0x1e, 0x4c, 0xf3,
+	0x26, 0xa7, 0x5a, 0xbc, 0xc9, 0xf9, 0x00, 0x1a, 0x54, 0x92, 0xe9, 0xe8, 0xb6, 0x24, 0xbb, 0x60,
+	0x3c, 0xfb, 0x77, 0xf8, 0x52, 0x44, 0xb0, 0xe3, 0xff, 0xe1, 0x0f, 0x7e, 0x90, 0x3a, 0xa3, 0x8f,
+	0xa1, 0x85, 0x7e, 0x68, 0xf9, 0x4d, 0x94, 0x31, 0xcf, 0x69, 0x2a, 0x9d, 0xbb, 0x59, 0x37, 0x8d,
+	0x0a, 0xad, 0xec, 0x12, 0xc1, 0x98, 0xf5, 0x20, 0x1a, 0xe6, 0x25, 0xda, 0x01, 0x3a, 0x5e, 0xee,
+	0xb8, 0xca, 0xba, 0xb6, 0x8b, 0x1d, 0xa2, 0x46, 0x25, 0x72, 0x05, 0xd6, 0xb2, 0xe6, 0xef, 0xbc,
+	0x1c, 0x81, 0x27, 0x7a, 0xe2, 0xbe, 0x67, 0x77, 0xe1, 0x72, 0x61, 0x67, 0x5f, 0x8f, 0xa4, 0x0c,
+	0x1e, 0x44, 0xc3, 0x6d, 0x8f, 0xae, 0x52, 0x6f, 0xcc, 0xd5, 0x91, 0x45, 0x69, 0xa5, 0xe8, 0xc5,
+	0x32, 0x72, 0x1f, 0xac, 0x6e, 0x77, 0x37, 0x8e, 0x54, 0xf6, 0xaf, 0x20, 0x48, 0xeb, 0xfa, 0xbc,
+	0xb0, 0xe6, 0x5b, 0xc7, 0x69, 0x56, 0x2e, 0xa6, 0xf4, 0x5f, 0x32, 0x85, 0x37, 0xf7, 0x2f, 0x99,
+	0xc2, 0x5b, 0xf2, 0x2f, 0x99, 0xc2, 0x73, 0x08, 0xc5, 0xfe, 0x71, 0x2e, 0xae, 0x59, 0x2a, 0xa5,
+	0x85, 0x1b, 0x4e, 0x32, 0x0a, 0x37, 0xfc, 0xdc, 0xe7, 0xbb, 0x5f, 0x2c, 0x45, 0xb3, 0x66, 0x08,
+	0xfc, 0xe0, 0x6d, 0x62, 0x0c, 0xcc, 0xb6, 0xaa, 0xb7, 0x49, 0xd5, 0xd1, 0x69, 0xb6, 0x89, 0x88,
+	0xb4, 0xcd, 0x5d, 0x34, 0xb0, 0xaf, 0x7d, 0x35, 0xda, 0x89, 0x9e, 0x9b, 0x3c, 0xbe, 0x0b, 0x8d,
+	0x67, 0xbe, 0x1a, 0xa9, 0x85, 0x5b, 0xc5, 0x39, 0x0e, 0xe3, 0xd8, 0x3f, 0xa5, 0x2e, 0xfb, 0x9d,
+	0x23, 0x53, 0xe8, 0x1f, 0xc3, 0x5a, 0x2f, 0x71, 0x7b, 0x51, 0xe0, 0x9b, 0x0c, 0x15, 0x13, 0xd4,
+	0x9d, 0xa3, 0x9d, 0x28, 0xf0, 0xd9, 0x93, 0xf6, 0x92, 0xf4, 0xb7, 0x75, 0x43, 0x47, 0x5a, 0xe3,
+	0x5f, 0x67, 0xe6, 0xe6, 0x09, 0xc5, 0x95, 0x08, 0x85, 0x60, 0xfc, 0xb5, 0xb3, 0xf9, 0xe3, 0xf5,
+	0xf7, 0x3f, 0xf8, 0xc4, 0x40, 0xeb, 0xad, 0xd0, 0x9f, 0xeb, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff,
+	0xde, 0x18, 0xc2, 0x65, 0xa4, 0x3e, 0x00, 0x00,
 }

+ 1 - 0
RO_Server_Trunk-branch_0.1.39/roserver/serverproto/db.proto

@@ -233,6 +233,7 @@ message SSMapLevelChangeReq {   //project rank
     uint32  new_map_level_id        = 1; //到达的mapid和level
     uint64  pass_time               = 2; //通关时间ms
     BattleRecordInfo record_info    = 3; //战斗时刻玩家信息
+    bool isHard =4;//是否是困难模式
 }
 message SSMapLevelChangeAck {   //project game
     int32       error               = 1; //错误码是否上榜

+ 943 - 908
RO_Server_Trunk-branch_0.1.39/roserver/serverproto/user.pb.go

@@ -4131,6 +4131,10 @@ type RoleBattle struct {
 	// 战斗加速时间(客户端显示根据last_record_battle_acce_time+battle_acce_duration为最大能使用的结束时间戳)
 	LastRecordBattleAcceTime uint64   `protobuf:"varint,14,opt,name=last_record_battle_acce_time,json=lastRecordBattleAcceTime,proto3" json:"last_record_battle_acce_time,omitempty"`
 	BattleAcceDuration       uint64   `protobuf:"varint,15,opt,name=battle_acce_duration,json=battleAcceDuration,proto3" json:"battle_acce_duration,omitempty"`
+	MapLevelHard             uint32   `protobuf:"varint,16,opt,name=map_level_hard,json=mapLevelHard,proto3" json:"map_level_hard,omitempty"`
+	MapIdHard                uint32   `protobuf:"varint,17,opt,name=map_id_hard,json=mapIdHard,proto3" json:"map_id_hard,omitempty"`
+	RewardMapIdHard          uint32   `protobuf:"varint,18,opt,name=reward_map_id_hard,json=rewardMapIdHard,proto3" json:"reward_map_id_hard,omitempty"`
+	RewardMapLevelHard       uint32   `protobuf:"varint,19,opt,name=reward_map_level_hard,json=rewardMapLevelHard,proto3" json:"reward_map_level_hard,omitempty"`
 	XXX_NoUnkeyedLiteral     struct{} `json:"-"`
 	XXX_unrecognized         []byte   `json:"-"`
 	XXX_sizecache            int32    `json:"-"`
@@ -4266,6 +4270,34 @@ func (m *RoleBattle) GetBattleAcceDuration() uint64 {
 	return 0
 }
 
+func (m *RoleBattle) GetMapLevelHard() uint32 {
+	if m != nil {
+		return m.MapLevelHard
+	}
+	return 0
+}
+
+func (m *RoleBattle) GetMapIdHard() uint32 {
+	if m != nil {
+		return m.MapIdHard
+	}
+	return 0
+}
+
+func (m *RoleBattle) GetRewardMapIdHard() uint32 {
+	if m != nil {
+		return m.RewardMapIdHard
+	}
+	return 0
+}
+
+func (m *RoleBattle) GetRewardMapLevelHard() uint32 {
+	if m != nil {
+		return m.RewardMapLevelHard
+	}
+	return 0
+}
+
 type ActorPosition struct {
 	Id                   uint32    `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
 	Pos                  *Position `protobuf:"bytes,2,opt,name=pos,proto3" json:"pos,omitempty"`
@@ -16814,917 +16846,920 @@ func init() {
 }
 
 var fileDescriptor_116e343673f7ffaf = []byte{
-	// 14586 bytes of a gzipped FileDescriptorProto
+	// 14640 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0xbd, 0x5b, 0x8c, 0x1c, 0x57,
 	0x7a, 0x18, 0x8c, 0x9e, 0xee, 0x9e, 0xee, 0xfe, 0xfa, 0x36, 0x53, 0xe4, 0x8c, 0x86, 0xa2, 0xa8,
 	0x4b, 0xad, 0xa4, 0xa5, 0xb4, 0x5a, 0x5d, 0x86, 0x12, 0x97, 0xda, 0x9b, 0x40, 0x0e, 0xc9, 0xe5,
 	0x68, 0x49, 0x69, 0xb6, 0x86, 0x94, 0xfc, 0xeb, 0xb7, 0xd1, 0x7f, 0x75, 0xd7, 0x99, 0xe9, 0xd2,
-	0x74, 0x57, 0xb5, 0xaa, 0xaa, 0x87, 0x33, 0x6b, 0xfb, 0x77, 0x1c, 0xc4, 0x71, 0x60, 0xc3, 0x8e,
+	0x74, 0x57, 0xb5, 0xaa, 0xaa, 0x87, 0x33, 0x6b, 0xfb, 0x77, 0x1c, 0xc4, 0x71, 0x60, 0xc7, 0x8e,
 	0x11, 0x04, 0x71, 0x80, 0xc0, 0x46, 0x0c, 0x3b, 0x08, 0x12, 0x3f, 0x38, 0x17, 0x20, 0x89, 0x13,
-	0x3f, 0x24, 0x36, 0x82, 0x18, 0x48, 0x1e, 0x8c, 0x3c, 0x38, 0x40, 0x1e, 0x02, 0xd8, 0x0f, 0x89,
-	0x01, 0x23, 0x2f, 0x01, 0x62, 0x20, 0xf1, 0x4b, 0xf0, 0x5d, 0x4e, 0xd5, 0xa9, 0xea, 0xea, 0x19,
-	0x4a, 0x5e, 0x38, 0xc9, 0x53, 0x77, 0x7d, 0xe7, 0x7e, 0xfb, 0xce, 0x77, 0x3f, 0x00, 0xf3, 0x58,
-	0x45, 0xaf, 0xcf, 0xa2, 0x30, 0x09, 0xad, 0x76, 0xac, 0xa2, 0x63, 0x15, 0xd1, 0x87, 0xfd, 0xcf,
-	0x2a, 0xd0, 0xbe, 0x39, 0x1a, 0x85, 0xf3, 0x20, 0x71, 0xc2, 0x89, 0xb2, 0x9e, 0x82, 0x46, 0x38,
-	0x53, 0xc1, 0xc0, 0xf7, 0xb6, 0x2a, 0xcf, 0x57, 0xae, 0xb6, 0x9c, 0x55, 0xfc, 0xdc, 0xf5, 0xac,
-	0xa7, 0xa1, 0x39, 0x9b, 0xb8, 0xc9, 0x41, 0x18, 0x4d, 0xb7, 0x56, 0x28, 0x25, 0xfd, 0xb6, 0xd6,
-	0xa0, 0x3a, 0xf7, 0xbd, 0xad, 0xea, 0xf3, 0x95, 0xab, 0x35, 0x07, 0xff, 0x5a, 0x2f, 0x41, 0x6f,
-	0x36, 0x0e, 0x03, 0x35, 0x48, 0xcb, 0xd4, 0x9e, 0xaf, 0x5c, 0xad, 0x3b, 0x5d, 0x82, 0xee, 0xe9,
-	0x82, 0x5f, 0x82, 0x6e, 0xa4, 0x0e, 0xfd, 0x38, 0x51, 0xd1, 0x20, 0xf1, 0xa7, 0x6a, 0xab, 0x4e,
-	0x55, 0x74, 0x34, 0xf0, 0xa1, 0x3f, 0x55, 0xd6, 0x26, 0xac, 0x7e, 0x12, 0x06, 0x6a, 0xd7, 0xdb,
-	0x5a, 0xa5, 0x3a, 0xe4, 0xcb, 0x7e, 0x15, 0xba, 0x8e, 0x1a, 0x85, 0x41, 0xa0, 0x46, 0xc9, 0x6e,
-	0x70, 0x10, 0x5a, 0x97, 0xa0, 0x39, 0x3b, 0x9e, 0x0d, 0x82, 0xd0, 0x53, 0xd2, 0xf9, 0xc6, 0xec,
-	0x78, 0xf6, 0x41, 0xe8, 0x29, 0xfb, 0x43, 0xe8, 0x3f, 0x8a, 0x55, 0xb4, 0x63, 0xe4, 0xbe, 0x02,
-	0x30, 0x09, 0x0f, 0xfd, 0x91, 0x99, 0xbf, 0x45, 0x10, 0x2c, 0x81, 0xc9, 0xd8, 0xa3, 0x41, 0x9c,
-	0xb8, 0xd3, 0x19, 0x8d, 0xb8, 0xea, 0xb4, 0x10, 0xb2, 0x8f, 0x00, 0xfb, 0x3a, 0x74, 0xbe, 0xab,
-	0x4e, 0x3f, 0x72, 0x27, 0x73, 0xf5, 0xf0, 0x74, 0xa6, 0x70, 0x0a, 0x8e, 0xd4, 0x29, 0x55, 0x53,
-	0x77, 0xf0, 0xaf, 0x75, 0x11, 0xea, 0xc7, 0x98, 0x4c, 0x65, 0xeb, 0x0e, 0x7f, 0xd8, 0x3b, 0xb0,
-	0x66, 0x96, 0xbb, 0xef, 0xc7, 0x49, 0x49, 0xd9, 0x2b, 0x00, 0x94, 0x7d, 0x30, 0xf1, 0xe3, 0x64,
-	0x6b, 0xe5, 0xf9, 0xea, 0xd5, 0xba, 0xd3, 0x22, 0x08, 0x16, 0xb0, 0xff, 0x61, 0x05, 0x7a, 0x66,
-	0x2d, 0xd7, 0xdf, 0x36, 0xeb, 0xa8, 0x9d, 0xd1, 0x3e, 0x4e, 0x26, 0xfd, 0xd9, 0xa6, 0xd5, 0xaa,
-	0x3b, 0xf2, 0x95, 0xc2, 0xaf, 0xc9, 0x42, 0xc9, 0x17, 0xee, 0x87, 0x38, 0x89, 0x06, 0xc7, 0xee,
-	0x84, 0xd6, 0xa6, 0xe5, 0xac, 0xc6, 0x49, 0xf4, 0x91, 0x3b, 0x49, 0x0b, 0xbc, 0x4d, 0xab, 0x52,
-	0x93, 0x02, 0x6f, 0xa7, 0xf0, 0x77, 0xb6, 0x1a, 0xcf, 0x57, 0xae, 0x36, 0x05, 0xfe, 0x8e, 0xfd,
-	0x6d, 0x58, 0xcf, 0x77, 0x79, 0x3f, 0x89, 0x4a, 0x7a, 0x6d, 0xb4, 0xb7, 0x62, 0xb6, 0x67, 0xef,
-	0x43, 0x5f, 0x97, 0xbf, 0x3b, 0x09, 0xdd, 0xe4, 0xda, 0xf6, 0x79, 0x73, 0xbe, 0xa2, 0xc7, 0xbc,
-	0x05, 0x0d, 0xfa, 0x73, 0xfd, 0x6d, 0x1a, 0x74, 0xc5, 0xd1, 0x9f, 0xf6, 0xd7, 0xa0, 0xfb, 0x68,
-	0xd9, 0x32, 0x76, 0x4b, 0xaa, 0xec, 0xea, 0x65, 0x1c, 0x41, 0x6f, 0x7f, 0x12, 0x26, 0xb7, 0x55,
-	0xe2, 0xfa, 0x93, 0xdb, 0x6e, 0xe2, 0x62, 0xbe, 0x89, 0x3a, 0x56, 0x13, 0xe9, 0x0e, 0x7f, 0xe0,
-	0x96, 0x54, 0x9f, 0xcd, 0xfd, 0x19, 0x9e, 0x27, 0x5e, 0x87, 0x06, 0x7d, 0xef, 0x7a, 0xd6, 0xf3,
-	0xd0, 0x19, 0xb9, 0x91, 0x37, 0xf0, 0x3d, 0x5e, 0xe5, 0x2a, 0xad, 0x32, 0x20, 0x6c, 0xd7, 0xa3,
-	0x65, 0xfe, 0x11, 0x68, 0x52, 0x23, 0x58, 0xfd, 0x53, 0xd0, 0x18, 0xab, 0x28, 0xd4, 0xe7, 0xb2,
-	0xee, 0xac, 0xe2, 0xe7, 0xae, 0x67, 0xdd, 0x80, 0x56, 0x3c, 0x09, 0x93, 0x6c, 0xa7, 0xb4, 0xb7,
-	0x2f, 0xbf, 0x6e, 0x9c, 0xf0, 0xd7, 0xf3, 0xfd, 0x74, 0x9a, 0x98, 0x9b, 0xaa, 0x3f, 0x81, 0xce,
-	0x9e, 0x4a, 0xee, 0x60, 0x77, 0xa8, 0x89, 0x1e, 0xac, 0x48, 0xed, 0x5d, 0x67, 0xc5, 0xa7, 0x0e,
-	0x72, 0xdf, 0x47, 0x07, 0x87, 0x59, 0xff, 0x81, 0x60, 0x3b, 0x07, 0x87, 0xbb, 0x5e, 0x36, 0xe6,
-	0xaa, 0x39, 0xe6, 0xb4, 0xdc, 0x4c, 0x25, 0x58, 0xae, 0x46, 0x35, 0x72, 0xb9, 0x3d, 0x95, 0xec,
-	0x7a, 0xb6, 0x07, 0xeb, 0x7b, 0x2a, 0x29, 0x4c, 0xe0, 0x1a, 0x54, 0x7d, 0xef, 0x44, 0xaf, 0xa6,
-	0xef, 0x9d, 0x2c, 0x4c, 0x5e, 0x37, 0x9b, 0x3c, 0x1b, 0xba, 0x71, 0x82, 0xf8, 0x25, 0x3f, 0x7b,
-	0x6d, 0x02, 0xca, 0xf4, 0xbd, 0x05, 0xad, 0xfd, 0x23, 0x7f, 0x32, 0x29, 0x0c, 0xae, 0x4e, 0x83,
-	0xbb, 0x08, 0xf5, 0x59, 0xe8, 0x07, 0x89, 0x3e, 0x1d, 0xf4, 0x61, 0xff, 0xff, 0xd0, 0xda, 0x19,
-	0xbb, 0xc1, 0xa1, 0x7a, 0x3f, 0x1c, 0x5a, 0xdb, 0xd0, 0x4a, 0xdc, 0xf8, 0x88, 0xeb, 0xaf, 0xd0,
-	0xcc, 0x6e, 0xe4, 0x66, 0xf6, 0xa1, 0x1b, 0x1f, 0xf1, 0x9c, 0x62, 0x3e, 0x3a, 0xca, 0xc6, 0x32,
-	0xad, 0xe4, 0x96, 0xe9, 0x45, 0xe8, 0x7d, 0x1a, 0x0e, 0x07, 0x07, 0xf3, 0x78, 0x8c, 0x28, 0x25,
-	0x51, 0x34, 0x67, 0x5d, 0xa7, 0xf3, 0x69, 0x38, 0xbc, 0x3b, 0x8f, 0xc7, 0xfb, 0x08, 0xb3, 0x87,
-	0xb0, 0xb6, 0xa7, 0x92, 0xef, 0xf9, 0xa7, 0x73, 0x85, 0xb3, 0xa3, 0xb1, 0x1a, 0x2d, 0x70, 0x36,
-	0x39, 0x0d, 0xfc, 0xde, 0xf5, 0x4e, 0xac, 0x0d, 0x58, 0x95, 0x39, 0x96, 0xcd, 0x39, 0xc3, 0xe9,
-	0xb5, 0x9e, 0x01, 0x40, 0xb0, 0x2c, 0x1b, 0xaf, 0x4d, 0x73, 0xa6, 0x12, 0x5a, 0x34, 0x7b, 0x42,
-	0xcb, 0x4e, 0x6d, 0x50, 0xfd, 0x59, 0x25, 0x15, 0xb3, 0x92, 0x3b, 0xd0, 0xff, 0x0c, 0xf3, 0x0c,
-	0x8a, 0xbb, 0xeb, 0x4a, 0x6e, 0x0e, 0x8a, 0xdd, 0x75, 0xba, 0x9f, 0xe9, 0x4f, 0x5a, 0x84, 0x69,
-	0xd6, 0xda, 0xcd, 0x24, 0x89, 0x96, 0xb5, 0x76, 0x17, 0xd6, 0x86, 0x6e, 0x92, 0x4c, 0xd4, 0xc0,
-	0x4d, 0x92, 0xc8, 0x6c, 0xee, 0x99, 0x5c, 0x73, 0x05, 0x14, 0xe0, 0xf4, 0xb8, 0x14, 0x56, 0x4d,
-	0xcd, 0xfd, 0xd7, 0x55, 0x68, 0xde, 0x53, 0x51, 0x58, 0xba, 0xe6, 0x97, 0xa1, 0x35, 0x0a, 0x83,
-	0x03, 0xdf, 0xd8, 0xcd, 0x4d, 0x06, 0xec, 0x7a, 0xd6, 0x73, 0xd0, 0x3e, 0xf0, 0x0f, 0xc7, 0xc9,
-	0x60, 0x16, 0x3e, 0x56, 0x91, 0xcc, 0x1a, 0x10, 0x68, 0x0f, 0x21, 0x58, 0xda, 0x8f, 0x07, 0xdc,
-	0x1e, 0xed, 0xe9, 0xa6, 0xd3, 0xf4, 0xe3, 0x5b, 0xf4, 0x8d, 0x08, 0x7b, 0xe8, 0xc6, 0x6a, 0xc0,
-	0xc7, 0xa1, 0x4e, 0x85, 0x5b, 0x08, 0xb9, 0x4f, 0x47, 0xe2, 0x4b, 0xd0, 0x75, 0xbd, 0x63, 0x37,
-	0x18, 0xe9, 0x1c, 0x7c, 0x93, 0x75, 0x04, 0xc8, 0x99, 0x5e, 0x82, 0x5e, 0x9c, 0x44, 0x2a, 0x38,
-	0x4c, 0xc6, 0x92, 0xab, 0xc1, 0x77, 0xa6, 0x86, 0x72, 0xb6, 0x57, 0xa0, 0x86, 0x4b, 0xb2, 0xd5,
-	0x7c, 0xbe, 0xb2, 0xb0, 0x23, 0x35, 0xba, 0x70, 0x28, 0x8b, 0xf5, 0x1a, 0xd4, 0x63, 0x3c, 0x01,
-	0x5b, 0x2d, 0xca, 0xbb, 0x99, 0xcb, 0x8b, 0xd7, 0x3d, 0x9d, 0x0f, 0x87, 0x33, 0x59, 0xd7, 0xa1,
-	0x95, 0x4d, 0x3e, 0xd0, 0xe4, 0x5f, 0x2a, 0x9d, 0x7c, 0xc4, 0x94, 0x4e, 0xd3, 0x95, 0x39, 0xc7,
-	0xb1, 0x53, 0x39, 0x3e, 0x4f, 0x6d, 0x1e, 0x3b, 0x42, 0xf6, 0x10, 0x80, 0x47, 0x55, 0x96, 0x56,
-	0x16, 0xbe, 0x43, 0x0b, 0xdf, 0x66, 0x20, 0x21, 0x04, 0xeb, 0x65, 0xe8, 0x63, 0xa2, 0xb9, 0x00,
-	0x5d, 0xba, 0x13, 0xba, 0x33, 0x95, 0xdc, 0xcd, 0xd6, 0xe0, 0x9b, 0xd0, 0xf9, 0x6c, 0xee, 0x4e,
-	0xfc, 0xe4, 0x94, 0x7b, 0xd9, 0x3b, 0xaf, 0x97, 0x6d, 0xc9, 0x4e, 0x1d, 0x7d, 0x0b, 0x36, 0x22,
-	0x35, 0x8b, 0x54, 0x1c, 0x0f, 0x68, 0xc4, 0x03, 0xa4, 0x16, 0xf0, 0xa6, 0xe9, 0x53, 0x9f, 0x2d,
-	0x49, 0xa4, 0x49, 0xd9, 0x3b, 0x9e, 0xe1, 0x2d, 0xb7, 0x0b, 0x6b, 0x9c, 0x95, 0x11, 0x11, 0x4d,
-	0xfc, 0x1a, 0x4d, 0xe6, 0x73, 0xf9, 0x89, 0xc7, 0x4c, 0x84, 0x4a, 0xd3, 0x25, 0xe8, 0xc5, 0x39,
-	0x98, 0xf5, 0x1e, 0xf4, 0x70, 0x8c, 0x7c, 0xa8, 0x3c, 0x37, 0x71, 0xb7, 0xd6, 0xa9, 0xa2, 0x4b,
-	0xa5, 0xe7, 0x89, 0xce, 0x52, 0x67, 0x26, 0x5f, 0xb4, 0x9d, 0xdf, 0x87, 0x8b, 0xc5, 0x33, 0x32,
-	0x08, 0x27, 0xde, 0xd6, 0xf6, 0x79, 0x93, 0xb0, 0x9e, 0x3f, 0x24, 0x1f, 0x4e, 0xca, 0xcf, 0xdb,
-	0xb5, 0x2f, 0x70, 0xde, 0x7e, 0x0c, 0xda, 0x77, 0xdd, 0x78, 0xec, 0x87, 0x81, 0xc6, 0xe1, 0xea,
-	0x54, 0x69, 0x1c, 0xae, 0x4e, 0x95, 0x65, 0x41, 0x6d, 0xec, 0xfa, 0x91, 0x1c, 0x37, 0xfa, 0x8f,
-	0x47, 0x0d, 0x7f, 0x07, 0xee, 0xb1, 0x9b, 0xb8, 0xe9, 0x51, 0x43, 0xd0, 0x4d, 0x82, 0xe0, 0x76,
-	0x38, 0xe0, 0x5a, 0x07, 0xf3, 0x19, 0x77, 0xae, 0x46, 0xf8, 0xbd, 0x2b, 0xe0, 0x47, 0x33, 0x6a,
-	0xfd, 0x51, 0xda, 0x3a, 0xe1, 0x96, 0x2d, 0x68, 0x7c, 0x1a, 0x0e, 0x71, 0xc8, 0x1a, 0x51, 0xca,
-	0x27, 0x12, 0x25, 0x38, 0xce, 0xdd, 0x14, 0x2b, 0xf3, 0x57, 0x76, 0xb9, 0x57, 0x4d, 0x1a, 0xed,
-	0xff, 0x85, 0xee, 0x3d, 0xe5, 0x7a, 0x77, 0x23, 0x77, 0xca, 0x33, 0x6f, 0x43, 0x77, 0xac, 0x5c,
-	0x6f, 0x70, 0x80, 0x90, 0xec, 0x0a, 0x6e, 0x8f, 0x75, 0x2e, 0xde, 0xc2, 0x46, 0x1e, 0x22, 0x66,
-	0x99, 0x68, 0xec, 0xa6, 0xb9, 0x90, 0x9a, 0xb5, 0x7f, 0xbe, 0x82, 0x18, 0xca, 0xf5, 0x08, 0xf7,
-	0xbe, 0x00, 0x1d, 0x2a, 0x74, 0xac, 0xa2, 0xd8, 0x0f, 0x03, 0xb3, 0xde, 0x8f, 0x18, 0x84, 0x68,
-	0x87, 0xb2, 0x18, 0x94, 0x60, 0x13, 0x01, 0xb4, 0xa3, 0x6f, 0xe5, 0x1a, 0x4d, 0x2f, 0xc2, 0xf6,
-	0xf6, 0xd3, 0xb9, 0x55, 0xcc, 0x8d, 0xc6, 0xe8, 0x10, 0x4d, 0xe2, 0x7f, 0xaf, 0x42, 0x13, 0x71,
-	0x01, 0x8d, 0xf4, 0x12, 0x34, 0x09, 0x8f, 0xa9, 0x93, 0x99, 0x9e, 0x43, 0xfc, 0xbe, 0x73, 0x32,
-	0xc3, 0xab, 0x0d, 0x6f, 0x30, 0x4c, 0x91, 0x49, 0xfc, 0x34, 0x1c, 0x62, 0xc2, 0x65, 0x68, 0x61,
-	0x82, 0x49, 0x09, 0x34, 0x3f, 0x0d, 0x87, 0xf7, 0x35, 0x01, 0x44, 0x17, 0x22, 0x16, 0x63, 0xca,
-	0x92, 0x2e, 0x48, 0x2c, 0xb7, 0x8d, 0x23, 0x8b, 0x42, 0x3e, 0x0b, 0xf5, 0x12, 0x6c, 0xa6, 0x11,
-	0xb9, 0x43, 0x55, 0x50, 0xff, 0x0a, 0x58, 0x9a, 0x49, 0x4f, 0x13, 0x4b, 0x6f, 0xc2, 0xea, 0x28,
-	0x9a, 0xfb, 0xb1, 0x12, 0xe4, 0x29, 0x5f, 0x88, 0xa4, 0xa6, 0xee, 0xc9, 0x40, 0xd2, 0x9a, 0x8c,
-	0xa4, 0xa6, 0xee, 0xc9, 0x0e, 0x27, 0xd3, 0xbd, 0xed, 0x22, 0x31, 0x46, 0xb8, 0x92, 0xee, 0x6d,
-	0xd7, 0xe3, 0x65, 0x9d, 0xb8, 0x71, 0x32, 0x40, 0xc6, 0x20, 0xe0, 0x65, 0x05, 0xc6, 0x4c, 0x08,
-	0xbe, 0x8f, 0x50, 0x62, 0x52, 0x2e, 0x43, 0x8b, 0x11, 0xc5, 0x30, 0x3c, 0x11, 0x1c, 0xd8, 0x24,
-	0xc0, 0xad, 0xf0, 0xc4, 0xda, 0x81, 0xb5, 0x61, 0x18, 0xc7, 0x83, 0x48, 0x3d, 0x46, 0x8a, 0x8f,
-	0xd6, 0xa9, 0x73, 0xde, 0xa9, 0xed, 0x61, 0x11, 0x87, 0x4a, 0xd0, 0x5a, 0xbf, 0x0a, 0xeb, 0xdc,
-	0x42, 0xa4, 0x62, 0xbc, 0xdd, 0x91, 0x65, 0x23, 0x2c, 0x59, 0x77, 0xfa, 0x94, 0xe0, 0x20, 0x7c,
-	0x07, 0xc1, 0x8b, 0x1b, 0xb6, 0xb7, 0xb0, 0x61, 0xed, 0x3f, 0x69, 0xf1, 0xba, 0xdf, 0x72, 0x63,
-	0x65, 0x5c, 0x95, 0x35, 0x7d, 0x55, 0x06, 0xfe, 0xe8, 0x68, 0x10, 0xb8, 0xb2, 0x8f, 0x5b, 0x4e,
-	0x13, 0x01, 0x1f, 0xb8, 0x53, 0x3a, 0xd3, 0x9e, 0x8a, 0x47, 0xb4, 0xd6, 0x2d, 0x87, 0xfe, 0xe3,
-	0xc9, 0x8f, 0xd5, 0x89, 0x2c, 0x31, 0xfe, 0xc5, 0xd3, 0x48, 0x7d, 0x8c, 0x4e, 0xe5, 0x3e, 0xd4,
-	0x9f, 0xb8, 0x27, 0x0e, 0xe7, 0xbe, 0x47, 0x1d, 0xe3, 0x8b, 0xb0, 0x41, 0xdf, 0xbb, 0x1e, 0x56,
-	0x3d, 0x0a, 0xfd, 0x80, 0x16, 0xaf, 0xe6, 0xd0, 0x7f, 0xac, 0x3a, 0x9a, 0x0e, 0x69, 0xcd, 0xba,
-	0x0e, 0xfe, 0xb5, 0xde, 0x86, 0x66, 0xa4, 0x62, 0x9e, 0xc7, 0xd6, 0x79, 0xf3, 0xd8, 0x88, 0x54,
-	0x4c, 0x13, 0xb8, 0x0d, 0xad, 0x28, 0x9c, 0x08, 0xee, 0x85, 0x92, 0xfd, 0xa6, 0x4f, 0x81, 0xd3,
-	0x8c, 0xf4, 0x79, 0xf8, 0x06, 0x74, 0x34, 0x26, 0xa2, 0x62, 0x6d, 0x2a, 0xb6, 0x95, 0x2b, 0x66,
-	0x20, 0x40, 0xa7, 0x7d, 0x60, 0x60, 0xc3, 0x6d, 0x39, 0xba, 0x78, 0xd4, 0x69, 0xa5, 0x16, 0x37,
-	0x38, 0xe3, 0x01, 0x3e, 0xd1, 0x29, 0xb5, 0x97, 0x84, 0xd1, 0x29, 0x2f, 0x5a, 0x95, 0xa8, 0x3d,
-	0xfc, 0xde, 0xf5, 0xac, 0xb7, 0x60, 0x75, 0x44, 0xf3, 0x44, 0xf7, 0xd5, 0x99, 0x63, 0x96, 0x8c,
-	0xd6, 0xb7, 0xa1, 0x3b, 0x75, 0x67, 0x03, 0x37, 0xf0, 0xa7, 0x6e, 0x82, 0x08, 0x66, 0xed, 0xbc,
-	0x92, 0x9d, 0xa9, 0x3b, 0xbb, 0xa9, 0xb3, 0x33, 0x3a, 0x90, 0x6d, 0xbf, 0x4e, 0x4b, 0xd2, 0x18,
-	0xba, 0xbc, 0xe1, 0x5f, 0x82, 0x5e, 0x12, 0x26, 0x2e, 0x6e, 0xc7, 0xd1, 0xd8, 0x8d, 0x0e, 0xd5,
-	0x96, 0x45, 0x3c, 0x57, 0x97, 0xa0, 0x8e, 0x00, 0x11, 0xc3, 0x79, 0xee, 0x69, 0x96, 0xe9, 0x02,
-	0x65, 0x6a, 0x7b, 0xee, 0x69, 0x9a, 0xe5, 0x32, 0xb4, 0x8e, 0xfd, 0x99, 0xe0, 0x8f, 0x8b, 0x7c,
-	0x74, 0x8e, 0xfd, 0x19, 0xe3, 0x8f, 0xd7, 0xc0, 0xa2, 0xf3, 0xa7, 0x2b, 0xe0, 0xbe, 0x6c, 0x50,
-	0x5f, 0xd6, 0x30, 0x45, 0x57, 0x43, 0x9d, 0xfa, 0x32, 0xf4, 0x3f, 0x9b, 0xab, 0x18, 0xfb, 0x2e,
-	0x87, 0x6d, 0x6b, 0x93, 0x2a, 0xec, 0x69, 0x30, 0x1f, 0x28, 0x24, 0xc8, 0x46, 0x91, 0x72, 0x13,
-	0xa5, 0xb3, 0x3d, 0x45, 0x04, 0x5d, 0x87, 0x81, 0x92, 0x49, 0x8f, 0x1e, 0x2f, 0x94, 0x2d, 0x8d,
-	0x0c, 0x03, 0xba, 0x50, 0x6c, 0xe8, 0x8e, 0xc6, 0x6e, 0x32, 0x48, 0x67, 0xe7, 0x12, 0xf5, 0xa8,
-	0x8d, 0xc0, 0x5b, 0x32, 0x43, 0xb9, 0x3c, 0x58, 0xc7, 0xd3, 0x7c, 0x08, 0x75, 0x1e, 0xac, 0xe7,
-	0x55, 0x58, 0xe7, 0x59, 0x0c, 0x83, 0x89, 0x1f, 0xc8, 0xe8, 0x2e, 0xf3, 0xa1, 0xa6, 0x84, 0x0f,
-	0x09, 0x4e, 0xf5, 0xbd, 0x00, 0x1d, 0xc9, 0xc5, 0x32, 0x89, 0x67, 0xb8, 0x49, 0x86, 0x91, 0x54,
-	0xc2, 0xba, 0x0a, 0x6b, 0x92, 0x45, 0x50, 0x8d, 0xef, 0x6d, 0x5d, 0xe1, 0x09, 0x60, 0x38, 0x8f,
-	0x6c, 0xd7, 0xb3, 0xae, 0xc1, 0xa6, 0xe7, 0xfa, 0x93, 0x53, 0xc1, 0x26, 0x86, 0xa8, 0xe3, 0x59,
-	0xaa, 0xf6, 0x02, 0xa5, 0x12, 0x4a, 0x79, 0xa8, 0x85, 0x1e, 0xcb, 0x09, 0xa8, 0xe7, 0x96, 0x12,
-	0x50, 0x6f, 0xc0, 0xc5, 0x61, 0x32, 0xf8, 0xfe, 0x58, 0xe1, 0x01, 0x32, 0xf6, 0xc1, 0x36, 0xed,
-	0x83, 0xf5, 0x61, 0xf2, 0xc9, 0x58, 0x05, 0xb7, 0x8d, 0xdd, 0xf0, 0x55, 0xb8, 0x30, 0x4c, 0x06,
-	0x9f, 0xfa, 0x6e, 0x3e, 0xff, 0x35, 0x6a, 0x61, 0x6d, 0x98, 0xbc, 0xef, 0xbb, 0x66, 0xf6, 0xb7,
-	0x60, 0x43, 0xb2, 0x17, 0x76, 0xe3, 0xdb, 0x34, 0x0c, 0x8b, 0x0a, 0x3c, 0x34, 0xb7, 0xa4, 0xfd,
-	0x93, 0x2b, 0xb0, 0x55, 0xa0, 0xd7, 0x32, 0x2e, 0xf4, 0x45, 0xe8, 0x99, 0x04, 0x5f, 0xca, 0xa7,
-	0x74, 0x32, 0x6a, 0x8e, 0x8e, 0xe2, 0x86, 0x99, 0xab, 0xc8, 0x55, 0x58, 0x59, 0xe6, 0x1d, 0xcd,
-	0x5f, 0x5c, 0x83, 0xcd, 0x1c, 0x25, 0x99, 0xb8, 0x51, 0xee, 0xca, 0xbc, 0x60, 0x90, 0x8b, 0x89,
-	0x1b, 0xf1, 0xee, 0xbf, 0x02, 0xc0, 0xec, 0x17, 0x65, 0x64, 0xe4, 0x4a, 0xec, 0x3e, 0x27, 0xdf,
-	0x90, 0x64, 0xa4, 0x66, 0xe2, 0xad, 0xfa, 0x79, 0x98, 0x90, 0x4a, 0x22, 0xa5, 0x14, 0xdb, 0x9f,
-	0x81, 0xb5, 0x48, 0xb2, 0x2e, 0x17, 0x32, 0xdc, 0x5a, 0x14, 0x32, 0xbc, 0x74, 0x16, 0xfd, 0x5b,
-	0x26, 0x6e, 0xf8, 0x61, 0xe8, 0x65, 0xb9, 0x4a, 0x05, 0x0e, 0x67, 0xf2, 0x67, 0x38, 0x15, 0xc5,
-	0x39, 0x6b, 0xc5, 0x7a, 0xa6, 0xec, 0x10, 0x2e, 0x66, 0xb5, 0x33, 0x0f, 0x4f, 0x6d, 0xdc, 0xc9,
-	0x13, 0xf0, 0x84, 0xc4, 0x2b, 0x84, 0x04, 0x2f, 0x2f, 0x19, 0x40, 0x91, 0x78, 0xd7, 0x84, 0xad,
-	0xeb, 0x71, 0xa7, 0x9a, 0x0e, 0xfe, 0xb5, 0xff, 0x52, 0x05, 0x7a, 0x29, 0x0b, 0x45, 0x19, 0xad,
-	0xaf, 0x80, 0x85, 0x34, 0x46, 0xe9, 0xfe, 0xe9, 0x4f, 0xdd, 0x93, 0x7d, 0x73, 0x0b, 0x15, 0x3a,
-	0xb6, 0x5c, 0x7c, 0xb3, 0xb4, 0x63, 0x34, 0xab, 0x5f, 0x87, 0x56, 0xd6, 0xcb, 0xdc, 0x04, 0x56,
-	0x0a, 0x13, 0xb8, 0x06, 0xd5, 0x60, 0x3e, 0x95, 0x79, 0xc5, 0xbf, 0xf6, 0x2d, 0x68, 0xe1, 0x08,
-	0xb8, 0xf3, 0xef, 0x00, 0x18, 0x3d, 0x61, 0x71, 0x47, 0x9e, 0x61, 0xcc, 0x3a, 0xd1, 0x52, 0x69,
-	0xfb, 0x63, 0x68, 0xee, 0x26, 0x6a, 0x5a, 0x58, 0xcf, 0xda, 0xf9, 0xeb, 0x29, 0xdd, 0x61, 0x29,
-	0x08, 0xfe, 0x2d, 0x48, 0x5c, 0x59, 0x6a, 0x64, 0x48, 0x5c, 0x7f, 0x08, 0x9a, 0x3b, 0xe3, 0xcf,
-	0x39, 0xd0, 0xd2, 0x9a, 0xab, 0xc5, 0x9a, 0x3f, 0x81, 0x06, 0x13, 0x42, 0x87, 0x78, 0x65, 0xfb,
-	0x89, 0x9a, 0x2e, 0x97, 0xf9, 0xe8, 0xc1, 0x3a, 0x4d, 0xcc, 0x47, 0x74, 0xc5, 0x65, 0x68, 0x0d,
-	0xdd, 0x43, 0x21, 0xc8, 0x64, 0x98, 0x43, 0xf7, 0x90, 0x28, 0x31, 0xfb, 0xdb, 0x4c, 0x64, 0x21,
-	0x29, 0x9b, 0x27, 0x78, 0xcb, 0x2a, 0x5f, 0x24, 0x78, 0x75, 0x79, 0x1c, 0x39, 0x96, 0x1f, 0x8d,
-	0xf3, 0x2b, 0x94, 0x2f, 0xaf, 0xe7, 0xc7, 0x69, 0x62, 0x3e, 0x5a, 0x9f, 0x08, 0x3a, 0xef, 0x87,
-	0xc3, 0x4c, 0x0e, 0x26, 0xc4, 0x7a, 0x9c, 0xb8, 0x87, 0x9a, 0x4b, 0x42, 0x62, 0x7d, 0x1f, 0xbf,
-	0xad, 0x3b, 0xb0, 0x3e, 0x0f, 0x26, 0xe1, 0xe8, 0x48, 0xf6, 0xb0, 0xb1, 0x29, 0xcf, 0x40, 0x2b,
-	0x7d, 0x2e, 0x43, 0x6d, 0x50, 0x9b, 0x13, 0xe8, 0xa6, 0x27, 0x83, 0x58, 0x5f, 0x24, 0x6a, 0xa8,
-	0xc2, 0x74, 0xb5, 0x1a, 0xf4, 0xbd, 0xeb, 0x21, 0xbd, 0xce, 0xc5, 0x35, 0x53, 0xc1, 0x5f, 0x78,
-	0x93, 0x79, 0xea, 0xc0, 0x9d, 0x4f, 0x92, 0x41, 0x5a, 0x94, 0x0f, 0x7d, 0x4f, 0xe0, 0xfb, 0x5c,
-	0x83, 0xfd, 0xd3, 0x15, 0xde, 0xc6, 0xf4, 0x8d, 0x5c, 0x36, 0x8d, 0x2f, 0xeb, 0x7f, 0xa5, 0xa4,
-	0xff, 0xe6, 0x94, 0x90, 0x08, 0x2e, 0xed, 0xbc, 0xf5, 0x2e, 0xc0, 0xc2, 0xe0, 0x9f, 0x2e, 0x17,
-	0x9c, 0xe0, 0xd8, 0x1c, 0x26, 0xfb, 0x69, 0xdc, 0xef, 0x42, 0x73, 0xc7, 0x8d, 0xbc, 0x2f, 0x72,
-	0x14, 0x15, 0x74, 0xb0, 0xe8, 0x3d, 0x37, 0xf0, 0x6e, 0x85, 0xe1, 0x11, 0x62, 0x62, 0x11, 0x0e,
-	0x6b, 0x4c, 0xcc, 0x72, 0x61, 0xdc, 0xca, 0x94, 0xc0, 0x68, 0x90, 0x6b, 0x68, 0x21, 0x24, 0xbd,
-	0x30, 0xe4, 0xe6, 0x8f, 0xd4, 0x48, 0x63, 0x49, 0x86, 0x38, 0x6a, 0x64, 0x8f, 0xa1, 0x8d, 0xcd,
-	0xec, 0x84, 0x93, 0x89, 0x1a, 0x25, 0x48, 0x51, 0x50, 0x65, 0x22, 0x24, 0xd1, 0xec, 0x27, 0xc2,
-	0xbe, 0xc7, 0x20, 0xeb, 0x3a, 0x50, 0xed, 0x83, 0x61, 0x18, 0x1e, 0x95, 0x6e, 0x05, 0xb3, 0xdb,
-	0x4e, 0x13, 0xf3, 0xe2, 0x3f, 0xfb, 0x8f, 0x2b, 0xb2, 0x71, 0x91, 0x90, 0xda, 0x96, 0x4a, 0x96,
-	0x6f, 0x5c, 0x99, 0x36, 0xae, 0x80, 0xd6, 0xe1, 0x45, 0xe8, 0x51, 0x99, 0xfc, 0xbd, 0x53, 0x77,
-	0xa8, 0xc7, 0x5a, 0xbc, 0x88, 0xf4, 0x39, 0xe5, 0x1a, 0xf1, 0x88, 0x84, 0xfb, 0xdd, 0x5a, 0xa8,
-	0x5c, 0x46, 0xcc, 0x63, 0xd3, 0xc3, 0xbf, 0x07, 0x17, 0x98, 0x68, 0xa0, 0x2a, 0x82, 0xf9, 0x34,
-	0x13, 0x35, 0x9c, 0xb9, 0xe1, 0xd7, 0xa8, 0x14, 0x56, 0xfb, 0xc1, 0x9c, 0x50, 0x80, 0xfd, 0x9f,
-	0x2a, 0xd0, 0xc7, 0xd1, 0x9a, 0xb2, 0x90, 0x2b, 0x00, 0x9a, 0x75, 0x48, 0x57, 0xb1, 0x25, 0x10,
-	0x91, 0x37, 0x4a, 0xf2, 0xe4, 0x58, 0xaf, 0xa4, 0x2e, 0x71, 0xff, 0x78, 0x82, 0x8b, 0xa3, 0x33,
-	0x3c, 0x56, 0x22, 0x26, 0x69, 0xa6, 0x0c, 0xc6, 0xc7, 0xca, 0x8d, 0xf0, 0xfe, 0x27, 0xf2, 0x8d,
-	0xee, 0x74, 0xe9, 0x77, 0x29, 0x6f, 0x82, 0x19, 0x1c, 0x23, 0xaf, 0xf5, 0x3a, 0xd4, 0x4d, 0xa2,
-	0x61, 0x79, 0x21, 0xce, 0x66, 0xff, 0x72, 0x05, 0xda, 0xc6, 0x00, 0xcd, 0xce, 0xa5, 0x8b, 0x5a,
-	0x4f, 0x3b, 0x47, 0x4b, 0xf3, 0x5e, 0x81, 0x75, 0x2a, 0x13, 0xe7, 0x16, 0xe6, 0x2c, 0xcf, 0x3e,
-	0x7d, 0x05, 0xaa, 0x93, 0xe3, 0x58, 0x96, 0xf4, 0x8c, 0xe5, 0xc0, 0x5c, 0xf6, 0x3f, 0xaa, 0x30,
-	0x12, 0x7f, 0xe0, 0xce, 0x10, 0xdd, 0x20, 0xd7, 0x93, 0x18, 0x82, 0xa0, 0xa9, 0x3b, 0x23, 0x7a,
-	0xfb, 0xcb, 0x50, 0x9d, 0x85, 0x31, 0xcd, 0x76, 0x71, 0x0f, 0xee, 0x85, 0xb1, 0x4f, 0x1c, 0x02,
-	0xe6, 0x40, 0xfc, 0xf3, 0x38, 0x8c, 0x26, 0xb8, 0xf1, 0xe3, 0x58, 0x70, 0xbb, 0xe0, 0x1f, 0x82,
-	0xdf, 0x0a, 0xe3, 0x98, 0x79, 0xed, 0x77, 0xe1, 0x92, 0x99, 0x73, 0xec, 0x4e, 0x26, 0x2a, 0x38,
-	0x54, 0xa6, 0xd8, 0x6a, 0x33, 0x2b, 0xa2, 0x93, 0x69, 0xdb, 0xbc, 0x0d, 0x4d, 0xdd, 0xaa, 0xd5,
-	0x81, 0x0a, 0xcb, 0xf7, 0x57, 0x9c, 0xca, 0x09, 0x7e, 0x9d, 0x8a, 0x12, 0xab, 0x72, 0x8a, 0x5f,
-	0xdf, 0xa7, 0xd6, 0x57, 0x9c, 0xca, 0xf7, 0xed, 0x6b, 0xd0, 0xf8, 0x48, 0x8d, 0x92, 0x30, 0xba,
-	0xf6, 0x39, 0x0a, 0x7d, 0x02, 0xab, 0x7b, 0x13, 0xf7, 0x54, 0x45, 0x5a, 0x59, 0x5b, 0xc9, 0x94,
-	0xb5, 0x4f, 0x3c, 0x29, 0x1b, 0xb0, 0x3a, 0xe7, 0x69, 0x15, 0x79, 0xd9, 0x1c, 0x27, 0xd5, 0xfe,
-	0xfb, 0x55, 0xe8, 0x71, 0xe5, 0xfb, 0xe3, 0xf0, 0x31, 0xb1, 0xb1, 0x8b, 0x8d, 0xa4, 0xba, 0xa2,
-	0x15, 0x53, 0x57, 0x94, 0xe3, 0xfd, 0xaa, 0x05, 0xde, 0x6f, 0x13, 0x56, 0x0f, 0x55, 0xe0, 0xa9,
-	0x48, 0xeb, 0x24, 0xf9, 0x0b, 0xbb, 0x81, 0x38, 0xde, 0xf7, 0x44, 0xb0, 0x50, 0xff, 0x34, 0x1c,
-	0xee, 0x16, 0x64, 0x16, 0xab, 0x05, 0x99, 0x45, 0x91, 0x91, 0x6f, 0x7c, 0x1e, 0x46, 0xfe, 0x32,
-	0xb4, 0xdc, 0x51, 0x22, 0x27, 0x99, 0x65, 0x47, 0x4d, 0x06, 0xec, 0x7a, 0xcb, 0x45, 0x47, 0x1b,
-	0xb0, 0xea, 0x4f, 0x09, 0xff, 0x03, 0x77, 0xd3, 0x9f, 0x1e, 0xb2, 0xea, 0x2a, 0x2f, 0x9b, 0x69,
-	0x2f, 0x0a, 0x13, 0x0b, 0x62, 0xae, 0x4e, 0x99, 0x32, 0xe2, 0x20, 0x0a, 0xa7, 0x83, 0xef, 0x87,
-	0x81, 0xd2, 0x3c, 0x33, 0x02, 0x3e, 0x09, 0x03, 0x62, 0xa8, 0x23, 0xe5, 0x4e, 0x38, 0x71, 0x83,
-	0x13, 0x11, 0x80, 0x89, 0xf6, 0x2b, 0xb0, 0xf1, 0x61, 0x32, 0x56, 0x11, 0x2f, 0x18, 0x53, 0xea,
-	0xe5, 0x4b, 0x66, 0xff, 0xeb, 0x0a, 0x74, 0x1f, 0x05, 0x7e, 0xb2, 0x17, 0xc6, 0x37, 0x03, 0xef,
-	0xb6, 0x5f, 0xb6, 0x77, 0x5e, 0x36, 0xf7, 0xce, 0xc5, 0xdc, 0x74, 0xca, 0x26, 0xe5, 0xad, 0xf3,
-	0x32, 0x54, 0x3d, 0x9f, 0x91, 0xd8, 0xd2, 0x7c, 0x9e, 0x1f, 0x59, 0xcf, 0x43, 0xc7, 0x8f, 0x07,
-	0x61, 0x30, 0x38, 0x8c, 0xc2, 0x79, 0xe0, 0x89, 0xa2, 0x05, 0xfc, 0xf8, 0xc3, 0xe0, 0x3b, 0x04,
-	0x31, 0x36, 0x61, 0xdd, 0xd8, 0x84, 0xa4, 0xfc, 0x77, 0x23, 0x77, 0x6a, 0x08, 0x95, 0xe8, 0x7b,
-	0xd7, 0xb3, 0xc7, 0xd0, 0xff, 0xde, 0xdc, 0x1f, 0x1d, 0xb1, 0xae, 0x46, 0xaf, 0x28, 0x92, 0xea,
-	0x48, 0x03, 0xc6, 0xfa, 0x7a, 0x9e, 0xba, 0x27, 0xc8, 0xea, 0xc6, 0x98, 0x88, 0xbc, 0x27, 0x27,
-	0x0a, 0x41, 0xe7, 0xb9, 0xa7, 0x59, 0x62, 0xe4, 0x3e, 0x66, 0x4e, 0x9d, 0x2d, 0x1e, 0x9a, 0x08,
-	0x20, 0xe1, 0xee, 0xbf, 0xab, 0x80, 0xc5, 0xad, 0xdc, 0x39, 0xf6, 0x27, 0x78, 0xe0, 0x35, 0x5f,
-	0x35, 0x0b, 0x63, 0x43, 0x83, 0xb7, 0x3a, 0x0b, 0xe3, 0x5d, 0xef, 0x04, 0x13, 0x08, 0x6b, 0x64,
-	0xea, 0x42, 0xfc, 0xe4, 0x0d, 0xa0, 0x4e, 0x66, 0x7e, 0xa4, 0xcc, 0x76, 0x80, 0x41, 0x24, 0x0c,
-	0x78, 0x19, 0xfa, 0x72, 0xd1, 0xab, 0x63, 0x7f, 0x62, 0x88, 0x57, 0xbb, 0x0c, 0xc6, 0xf6, 0xef,
-	0x9c, 0xcc, 0x10, 0x51, 0x47, 0xea, 0x20, 0x52, 0xf1, 0x38, 0x33, 0xb0, 0xa8, 0x3b, 0x6d, 0x81,
-	0x51, 0x55, 0x5b, 0xd0, 0xd0, 0x04, 0x80, 0x4c, 0x9c, 0x7c, 0xda, 0xbf, 0xbb, 0x02, 0xbd, 0x6c,
-	0x38, 0xe9, 0xad, 0x16, 0x29, 0x25, 0x18, 0x51, 0xdf, 0x6a, 0x91, 0x52, 0x8c, 0x0c, 0x75, 0xf2,
-	0xc4, 0x9f, 0xfa, 0x89, 0xb0, 0x4b, 0x94, 0x7c, 0x1f, 0x01, 0xd6, 0x97, 0xa1, 0x9f, 0x21, 0xc8,
-	0x1c, 0x52, 0x4d, 0xc1, 0x69, 0x3d, 0x34, 0xae, 0x1c, 0xe3, 0x8b, 0x10, 0xc6, 0x0c, 0xdf, 0x84,
-	0x16, 0xcd, 0x1b, 0xe1, 0x58, 0xbe, 0xc2, 0xf2, 0xfa, 0x98, 0xc5, 0x45, 0x70, 0x9a, 0x58, 0x82,
-	0x6e, 0xa6, 0xef, 0xc1, 0x53, 0x5a, 0x8b, 0x54, 0xec, 0xcd, 0xea, 0x79, 0x97, 0xcd, 0x86, 0x94,
-	0xdc, 0xc9, 0xf7, 0xf7, 0x39, 0x68, 0x0b, 0x29, 0x41, 0xd5, 0xb0, 0xec, 0x19, 0x98, 0x4e, 0x20,
-	0x3e, 0xe0, 0x47, 0x60, 0x43, 0xfa, 0x74, 0x32, 0x53, 0x1e, 0xe1, 0xd4, 0x9b, 0xb8, 0xed, 0xcb,
-	0x14, 0xd3, 0x25, 0x78, 0xb2, 0x07, 0x2b, 0xe3, 0x99, 0xcc, 0xd5, 0xca, 0x78, 0x86, 0xdf, 0xb1,
-	0x5e, 0xf1, 0x95, 0x78, 0x66, 0x7b, 0xb0, 0x59, 0xac, 0x5e, 0x84, 0x58, 0x5f, 0x86, 0xbe, 0x4a,
-	0x61, 0xe6, 0x9d, 0xd8, 0xcb, 0xc0, 0x74, 0x80, 0x68, 0xa7, 0xd0, 0x8e, 0x62, 0xfd, 0x34, 0x93,
-	0x5b, 0x6d, 0x86, 0xb1, 0x7a, 0xfa, 0x27, 0x2b, 0x60, 0x19, 0x0d, 0xb8, 0xc1, 0x11, 0x61, 0x0e,
-	0x0b, 0x6a, 0x91, 0x1b, 0x1c, 0x49, 0xbd, 0xf4, 0xdf, 0xba, 0x09, 0x30, 0x8c, 0x7c, 0x75, 0x30,
-	0xf0, 0x83, 0x83, 0x50, 0xd0, 0x83, 0x9d, 0x27, 0xcb, 0xc2, 0xe9, 0x34, 0x0c, 0x18, 0x0d, 0xdd,
-	0xc2, 0xac, 0x24, 0x09, 0x6d, 0x0d, 0xf5, 0x5f, 0x9c, 0x89, 0x78, 0x14, 0x46, 0x5a, 0x53, 0xce,
-	0x1f, 0xf6, 0xef, 0xb7, 0x60, 0xad, 0x38, 0xd4, 0x27, 0x1f, 0xe4, 0xd5, 0x54, 0xef, 0x45, 0x9c,
-	0x98, 0x41, 0x57, 0x8a, 0x66, 0x0b, 0x59, 0x30, 0xda, 0x24, 0x6f, 0xc2, 0x45, 0x5e, 0x51, 0xa3,
-	0x62, 0xcd, 0xb0, 0xd6, 0x1d, 0x8b, 0xd2, 0xb2, 0x1e, 0x7c, 0x30, 0x27, 0x63, 0xa6, 0x6c, 0x3b,
-	0x61, 0x56, 0x5e, 0x9e, 0x4e, 0x0a, 0xc4, 0x4c, 0xaf, 0xc3, 0x85, 0xd1, 0x3c, 0x1a, 0x14, 0x7b,
-	0xcb, 0xc7, 0x72, 0x7d, 0x34, 0x8f, 0xee, 0xe4, 0x3b, 0xfc, 0x36, 0x6c, 0x1e, 0xf8, 0x81, 0x1f,
-	0x8f, 0xcd, 0x22, 0xd4, 0xed, 0x55, 0xea, 0xf6, 0x45, 0x4e, 0xcd, 0x4a, 0x51, 0xe7, 0x3f, 0x84,
-	0x75, 0x73, 0x2d, 0xb9, 0x40, 0x83, 0xf6, 0xf6, 0x97, 0xca, 0xce, 0x49, 0x61, 0xd3, 0x38, 0x7d,
-	0x63, 0xd5, 0xa9, 0xc2, 0xab, 0xb0, 0x86, 0xdd, 0x96, 0xb9, 0xe3, 0x0d, 0xda, 0x94, 0x93, 0x3b,
-	0x8f, 0xb8, 0x16, 0x3e, 0x9a, 0xef, 0x99, 0x47, 0x93, 0x85, 0xf3, 0xf6, 0x99, 0x4d, 0xd2, 0x31,
-	0x30, 0x4e, 0x67, 0xb6, 0x44, 0xc3, 0xf9, 0xc1, 0x41, 0xa6, 0x8d, 0x4e, 0x97, 0xe8, 0xd6, 0xfc,
-	0xe0, 0x80, 0x72, 0xbe, 0x03, 0x4f, 0x49, 0xce, 0x58, 0x21, 0x41, 0x6f, 0x14, 0x68, 0xf3, 0xe4,
-	0x70, 0xf2, 0x3e, 0xa5, 0xa6, 0xc5, 0xbe, 0x07, 0x17, 0xcc, 0x3d, 0x30, 0x9e, 0x99, 0x0a, 0x99,
-	0x27, 0xe9, 0xeb, 0x5a, 0xb6, 0x55, 0xee, 0xcd, 0xb4, 0x0a, 0x5c, 0xaa, 0x44, 0x1c, 0xdf, 0xd5,
-	0xea, 0x7f, 0x84, 0x20, 0x9a, 0xbf, 0x01, 0xe0, 0xc6, 0xb1, 0x1f, 0x27, 0xb4, 0x2d, 0x7a, 0xe7,
-	0xc9, 0xe0, 0x5b, 0x9c, 0x19, 0xb7, 0xcb, 0xb7, 0xa0, 0x3b, 0x54, 0x03, 0xa3, 0xf0, 0xb9, 0xa2,
-	0xff, 0xf6, 0x50, 0xdd, 0x4c, 0x8b, 0xbf, 0x00, 0x1d, 0x29, 0xcb, 0x67, 0x7a, 0x8d, 0x79, 0x08,
-	0x86, 0xd1, 0xea, 0x5a, 0x6f, 0xc1, 0x86, 0x64, 0x39, 0x9c, 0xfb, 0x13, 0x6f, 0xa0, 0x02, 0xcf,
-	0x94, 0xf7, 0x5b, 0x9c, 0xf8, 0x1d, 0x4c, 0xbb, 0x13, 0x78, 0x74, 0x61, 0xdc, 0x03, 0x2b, 0xeb,
-	0xd4, 0x5c, 0x5b, 0xe0, 0x58, 0x25, 0xc2, 0xab, 0xbc, 0xc5, 0x97, 0xd3, 0xd7, 0x7d, 0x7b, 0xe4,
-	0xa7, 0x3a, 0x2d, 0xa9, 0xc6, 0x90, 0xcf, 0x5c, 0xa0, 0x86, 0xfb, 0x9c, 0x90, 0x09, 0x9f, 0xdf,
-	0x84, 0x8b, 0x85, 0x93, 0xc3, 0xd8, 0xe1, 0x22, 0x61, 0x07, 0x2b, 0x77, 0x74, 0xf6, 0x31, 0xc5,
-	0xfa, 0x1a, 0x6c, 0x95, 0x95, 0x18, 0x4c, 0xdd, 0x13, 0x22, 0x8b, 0xba, 0xce, 0xc6, 0x62, 0xa9,
-	0x07, 0xee, 0x89, 0xf5, 0x2d, 0xb8, 0xbc, 0x50, 0x28, 0x93, 0x93, 0x93, 0x4a, 0xa1, 0xe6, 0x6c,
-	0xa9, 0x7c, 0xc1, 0x54, 0x56, 0x8e, 0x67, 0xb6, 0x70, 0xbe, 0x4d, 0x2d, 0x43, 0xcd, 0xb9, 0x98,
-	0x47, 0x4a, 0x7c, 0xe6, 0xec, 0xdf, 0x45, 0x0e, 0x66, 0x1e, 0x8f, 0x91, 0x83, 0x21, 0xf2, 0x64,
-	0x26, 0x03, 0x64, 0x01, 0x22, 0xb2, 0x34, 0x3c, 0x2c, 0x91, 0x37, 0x71, 0x22, 0x4b, 0xb9, 0x9a,
-	0x43, 0xf7, 0x90, 0x13, 0x9f, 0x85, 0x76, 0x34, 0x8f, 0xc7, 0x03, 0x2c, 0x2e, 0x22, 0x93, 0xae,
-	0xd3, 0x8a, 0xb8, 0x5e, 0x93, 0xb2, 0xcc, 0xc8, 0x2b, 0x4d, 0x59, 0x3a, 0x44, 0x5e, 0x65, 0xd7,
-	0x00, 0xe7, 0x48, 0x09, 0x06, 0x42, 0x0c, 0x94, 0xe5, 0x39, 0x68, 0x23, 0x8e, 0xd7, 0x83, 0x62,
-	0xa2, 0x01, 0x10, 0x24, 0x43, 0xf9, 0xcf, 0x75, 0x00, 0x96, 0xa8, 0x91, 0x71, 0xcc, 0x55, 0x20,
-	0x4d, 0xcd, 0xc0, 0x0f, 0x46, 0xa1, 0xd6, 0x8d, 0x33, 0x09, 0xd9, 0x43, 0xf8, 0x2e, 0x81, 0xb5,
-	0x16, 0x15, 0x3b, 0x9e, 0x5d, 0x80, 0x3c, 0x6e, 0xc6, 0x2c, 0x1b, 0xb0, 0x9a, 0x1b, 0x55, 0x7d,
-	0x4a, 0x23, 0x7a, 0x19, 0xfa, 0x48, 0xca, 0x99, 0x95, 0xb3, 0xec, 0xb0, 0x3b, 0x75, 0x4f, 0x8c,
-	0xba, 0xdf, 0x83, 0xce, 0x67, 0x48, 0x05, 0x6a, 0x13, 0x1e, 0xd6, 0x38, 0xe7, 0xf9, 0xd1, 0x02,
-	0x99, 0xe8, 0xb4, 0x3f, 0xcb, 0x00, 0x48, 0xb8, 0xcb, 0xcc, 0x48, 0x37, 0x56, 0xd9, 0x90, 0x85,
-	0x81, 0x3c, 0xbd, 0x57, 0x61, 0xcd, 0xc8, 0x93, 0x59, 0xf1, 0x74, 0x9d, 0x5e, 0x9a, 0x8d, 0x47,
-	0x93, 0xcf, 0xc9, 0x64, 0x43, 0xb3, 0x90, 0x93, 0x69, 0x8b, 0x1b, 0x40, 0x94, 0x0f, 0xdf, 0xa4,
-	0xad, 0x12, 0xd9, 0x75, 0x9e, 0x44, 0x73, 0x9a, 0x98, 0x9b, 0x6e, 0xd0, 0xbb, 0xb9, 0x6b, 0x91,
-	0xca, 0xb3, 0xde, 0xf3, 0xca, 0xd9, 0x97, 0x80, 0x71, 0x6b, 0x52, 0x3d, 0x2f, 0x42, 0x2f, 0x1d,
-	0x0e, 0xcf, 0x70, 0x9b, 0xed, 0x74, 0xf5, 0xda, 0xd0, 0x04, 0xbf, 0x01, 0x4d, 0xbd, 0xf5, 0x88,
-	0x63, 0x29, 0xd2, 0xf9, 0xb2, 0xb9, 0x9d, 0x86, 0xec, 0x46, 0xeb, 0x03, 0xd8, 0xa4, 0xb1, 0x9b,
-	0x97, 0x26, 0xe3, 0x92, 0xee, 0x79, 0x64, 0xd8, 0x85, 0xa9, 0x3b, 0xdb, 0x31, 0xee, 0x55, 0xc2,
-	0x26, 0xdf, 0x86, 0x67, 0xb4, 0xae, 0x30, 0x8c, 0x3c, 0x7d, 0x59, 0xb9, 0xa3, 0x91, 0x6c, 0x8b,
-	0x1e, 0x9f, 0x5b, 0xd1, 0x1a, 0x86, 0x91, 0xc7, 0x03, 0xbf, 0x39, 0x1a, 0xf1, 0x0e, 0x79, 0x33,
-	0x33, 0xb0, 0xc1, 0x32, 0xde, 0x3c, 0x62, 0xa5, 0x69, 0x5f, 0x54, 0x49, 0x69, 0xee, 0xdb, 0x92,
-	0x62, 0xdf, 0x83, 0x2e, 0x5d, 0x09, 0x29, 0x17, 0x5f, 0x54, 0x69, 0x3c, 0x29, 0x6b, 0x6d, 0xff,
-	0x42, 0x05, 0x7a, 0x48, 0x50, 0x31, 0x3d, 0xb4, 0x84, 0x87, 0xfe, 0x22, 0xc7, 0xe3, 0x06, 0xd4,
-	0x89, 0xa4, 0xa2, 0x43, 0xf1, 0x64, 0x34, 0x18, 0x17, 0xb0, 0x7f, 0xae, 0x0a, 0x17, 0x3f, 0xce,
-	0x64, 0x1d, 0x41, 0xa2, 0x82, 0x44, 0x5b, 0x0c, 0x8a, 0x6d, 0xa1, 0xd8, 0xba, 0x8e, 0xc8, 0x1a,
-	0xd4, 0x60, 0x66, 0xaa, 0x39, 0x66, 0xe6, 0x65, 0xe8, 0x53, 0x42, 0x3c, 0xc7, 0xd6, 0xe8, 0x8a,
-	0x14, 0x5e, 0x05, 0xc1, 0xfb, 0x04, 0xe5, 0x6b, 0x52, 0xba, 0x5a, 0xff, 0x9c, 0x5d, 0x4d, 0xb1,
-	0x9a, 0x8a, 0xe8, 0x92, 0x5c, 0x35, 0xb0, 0x9a, 0x8a, 0xf0, 0x22, 0x2c, 0xf0, 0x53, 0x8d, 0x05,
-	0x7e, 0xea, 0x12, 0x34, 0x99, 0xdc, 0x1b, 0xcf, 0x84, 0xb0, 0x69, 0xd0, 0xf7, 0xbd, 0x19, 0x0d,
-	0x77, 0x1e, 0x61, 0x42, 0x4b, 0x86, 0x3b, 0x8f, 0xee, 0x91, 0x94, 0xc9, 0x8f, 0xd9, 0x64, 0x8d,
-	0x4e, 0x55, 0xd3, 0x69, 0xf8, 0x31, 0xd9, 0xaa, 0xe1, 0xb5, 0x16, 0xa8, 0x13, 0xdc, 0x88, 0x06,
-	0xe7, 0xc5, 0x47, 0xa6, 0x8f, 0x09, 0x8e, 0xc1, 0x7d, 0x5d, 0x15, 0xdb, 0x10, 0x99, 0x1c, 0xa2,
-	0x06, 0xd9, 0x1e, 0xad, 0x97, 0xcd, 0x0e, 0x89, 0x59, 0xbe, 0x0b, 0x5d, 0xb2, 0xa8, 0xfb, 0xc0,
-	0x9d, 0x2a, 0x4d, 0x77, 0x93, 0xac, 0x83, 0x6d, 0xd7, 0xe9, 0x7f, 0xb9, 0x5d, 0xeb, 0xa2, 0x81,
-	0xbe, 0xfd, 0xdb, 0x15, 0xd8, 0x4c, 0x17, 0xd7, 0x71, 0x03, 0x8f, 0xaa, 0xa6, 0x6a, 0x11, 0xbd,
-	0x1b, 0x86, 0x2a, 0x2c, 0xda, 0x13, 0xb1, 0xb2, 0x36, 0x72, 0x2d, 0xe7, 0x5a, 0x4b, 0x16, 0xba,
-	0x5a, 0xb6, 0xd0, 0x65, 0x63, 0xae, 0x95, 0x8d, 0xd9, 0x7a, 0x06, 0x5a, 0x7e, 0xfc, 0xe1, 0xc1,
-	0xc1, 0xc4, 0x0f, 0x18, 0x63, 0x37, 0x9d, 0x0c, 0x60, 0x1f, 0xc0, 0xda, 0x43, 0x37, 0x3e, 0xda,
-	0x8b, 0xc2, 0xc3, 0x48, 0xc5, 0xf1, 0xe7, 0x31, 0xc4, 0x27, 0xee, 0x22, 0xb5, 0xc3, 0xad, 0x3b,
-	0xfc, 0x81, 0x50, 0x5a, 0x76, 0xb9, 0x42, 0xf8, 0xc3, 0xfe, 0x07, 0x15, 0x68, 0x6a, 0x63, 0x5f,
-	0x1c, 0x3d, 0x99, 0x05, 0xa7, 0xe7, 0x7c, 0x15, 0x3f, 0x77, 0x3d, 0xeb, 0x5d, 0x68, 0xce, 0xa4,
-	0x27, 0xa5, 0xa6, 0xb2, 0xc5, 0xae, 0x3a, 0x69, 0xf6, 0x7c, 0x67, 0xba, 0xba, 0x33, 0x48, 0x55,
-	0xaa, 0xd4, 0xec, 0xa8, 0x46, 0x8b, 0xd7, 0x22, 0x88, 0xbe, 0x2c, 0xa9, 0x23, 0x06, 0x03, 0x41,
-	0x86, 0xc8, 0xb4, 0x59, 0x3e, 0x66, 0x2b, 0xb3, 0x9d, 0x30, 0xc8, 0x49, 0xa8, 0x2a, 0x39, 0x09,
-	0x55, 0xce, 0xc2, 0x79, 0xe5, 0x89, 0x2c, 0x9c, 0xed, 0x3b, 0xd0, 0x61, 0x85, 0x96, 0x54, 0xfe,
-	0x0e, 0xc0, 0x28, 0x0c, 0xf8, 0xb2, 0x88, 0x97, 0x68, 0xb5, 0x38, 0xab, 0x63, 0x64, 0xe4, 0xfe,
-	0x45, 0x61, 0xd6, 0xbf, 0x32, 0xb5, 0xf3, 0x9f, 0xa9, 0x7f, 0x52, 0xf9, 0x93, 0xf4, 0x8f, 0xb3,
-	0xe6, 0xfa, 0xf7, 0x47, 0x35, 0xd6, 0x5f, 0x60, 0x0b, 0x5f, 0xc8, 0x12, 0xfc, 0x6d, 0x52, 0x00,
-	0x71, 0x75, 0xd2, 0xf7, 0xcd, 0x82, 0xb2, 0x4e, 0x0c, 0xcd, 0x9d, 0x2c, 0xa3, 0x75, 0x5d, 0x4c,
-	0x86, 0x10, 0x22, 0xc2, 0xb2, 0x4b, 0x0b, 0x12, 0xf3, 0x74, 0x42, 0xc9, 0x6c, 0x88, 0x46, 0x79,
-	0x5d, 0x54, 0x8b, 0x54, 0xae, 0xb6, 0xb4, 0x9c, 0x0c, 0x94, 0xd4, 0x8b, 0x54, 0x6e, 0x07, 0xd6,
-	0xd8, 0x0c, 0x84, 0xc6, 0xc7, 0x24, 0x65, 0xfd, 0x3c, 0x16, 0xa3, 0x47, 0x45, 0x70, 0xcc, 0x4c,
-	0x73, 0xde, 0x84, 0xfe, 0x63, 0xa5, 0x8e, 0xcc, 0x3a, 0x56, 0xcf, 0xab, 0xa3, 0x8b, 0x25, 0xb2,
-	0x2a, 0x5e, 0xd4, 0xd6, 0x44, 0xae, 0xe7, 0x0d, 0xbe, 0xaf, 0x82, 0x53, 0x41, 0xd1, 0x1d, 0x82,
-	0xde, 0xf4, 0xbc, 0x4f, 0x54, 0x70, 0x6a, 0x6d, 0xc3, 0x86, 0x3b, 0x1a, 0xcd, 0xa7, 0xf3, 0x89,
-	0x9b, 0xf8, 0xc7, 0x8a, 0xf5, 0x36, 0xd3, 0x63, 0x8d, 0xb1, 0x2f, 0x98, 0x89, 0x3b, 0x48, 0x42,
-	0x1d, 0xcf, 0x10, 0x17, 0x4f, 0xdc, 0x44, 0xc5, 0xc9, 0x3b, 0x83, 0x71, 0x38, 0x17, 0x37, 0xa3,
-	0x16, 0xe3, 0x62, 0x49, 0xb8, 0x17, 0xce, 0xd9, 0xd3, 0xe8, 0x1a, 0x6c, 0x32, 0x68, 0x80, 0xbd,
-	0x33, 0x0b, 0xb0, 0xcd, 0xdf, 0x05, 0x4e, 0xfd, 0x18, 0x13, 0xd3, 0x42, 0xef, 0x41, 0x4f, 0x48,
-	0xfc, 0x91, 0x90, 0x71, 0xed, 0xf3, 0xa8, 0x97, 0x4e, 0x42, 0x64, 0xff, 0x88, 0x45, 0x43, 0x3f,
-	0xca, 0xbe, 0x24, 0x86, 0x99, 0xf3, 0xd2, 0x03, 0x71, 0x15, 0xd6, 0x28, 0xc1, 0x14, 0x0e, 0xaf,
-	0x30, 0x25, 0x8d, 0x70, 0xa3, 0x8a, 0x12, 0x8b, 0xea, 0x6a, 0x89, 0x45, 0xb5, 0xfd, 0x3f, 0x2a,
-	0xd0, 0xcb, 0x3e, 0x09, 0xc1, 0xbd, 0x02, 0xac, 0xe0, 0xe2, 0xc2, 0x5c, 0x56, 0x8c, 0x18, 0x08,
-	0x7e, 0x37, 0x05, 0x5b, 0xb7, 0xa1, 0x4f, 0xfa, 0x39, 0x23, 0xe7, 0x32, 0x17, 0x94, 0xac, 0x11,
-	0xa7, 0x17, 0xeb, 0x6f, 0xae, 0xe5, 0x75, 0xb8, 0x80, 0x7d, 0x1d, 0x86, 0x81, 0x67, 0xd6, 0xc4,
-	0xb8, 0x70, 0x7d, 0xa6, 0x92, 0x5b, 0x61, 0xe0, 0x19, 0xf9, 0xef, 0xc2, 0x9a, 0x8b, 0x54, 0x97,
-	0x99, 0xb9, 0x76, 0x7e, 0xb3, 0x7d, 0x2a, 0x94, 0xd5, 0x63, 0x9f, 0x42, 0x0b, 0x69, 0xd2, 0x9b,
-	0x91, 0x0a, 0x48, 0xb0, 0x49, 0xd4, 0x2b, 0x73, 0x3d, 0x22, 0xd8, 0x44, 0x08, 0xf3, 0x3c, 0x17,
-	0xa1, 0x6e, 0x2a, 0xf8, 0xf9, 0xc3, 0xda, 0x84, 0x55, 0x61, 0x82, 0x84, 0xe2, 0xe1, 0xaf, 0x22,
-	0x87, 0x54, 0x5b, 0xe0, 0x90, 0x7e, 0xad, 0x0e, 0x2d, 0x6a, 0x97, 0x6e, 0xdc, 0x12, 0xb1, 0x68,
-	0xa5, 0x54, 0x2c, 0x9a, 0x31, 0x67, 0x66, 0x67, 0xe4, 0xba, 0xe6, 0x2c, 0xc8, 0x1d, 0xce, 0x4f,
-	0x73, 0xc2, 0xd5, 0xe6, 0x70, 0x7e, 0xca, 0x89, 0xa9, 0x48, 0xad, 0x26, 0x97, 0x9e, 0x66, 0x28,
-	0x1f, 0xfb, 0x81, 0x14, 0x91, 0x8b, 0xe4, 0xb1, 0x1f, 0x94, 0x4a, 0x36, 0x57, 0x8b, 0x92, 0x4d,
-	0x2c, 0x1d, 0x4e, 0x3c, 0x39, 0xf7, 0x2c, 0xf8, 0x6c, 0x86, 0x13, 0x8f, 0xcf, 0xf5, 0x15, 0x00,
-	0xac, 0x3a, 0x4e, 0x22, 0xe5, 0x1e, 0x69, 0xb3, 0xdb, 0xc7, 0x7e, 0xb0, 0x4f, 0x00, 0xeb, 0x4b,
-	0xd0, 0x3d, 0x70, 0xfd, 0x89, 0xf2, 0x74, 0x0e, 0xa6, 0xb0, 0x3a, 0x0c, 0x94, 0x4c, 0xdb, 0xb0,
-	0x41, 0x64, 0x7d, 0x36, 0x45, 0x33, 0xa2, 0x02, 0xb3, 0x43, 0x19, 0x27, 0x29, 0x2f, 0x20, 0x4a,
-	0xae, 0x17, 0xa1, 0x17, 0xab, 0xc9, 0x81, 0x21, 0xe5, 0x63, 0x89, 0x50, 0x07, 0xa1, 0xa9, 0x8c,
-	0xef, 0x65, 0xe8, 0xbb, 0xb8, 0x08, 0x83, 0x58, 0xb9, 0x31, 0x6b, 0x77, 0x58, 0xd5, 0xd2, 0x25,
-	0xf0, 0x3e, 0x41, 0xd9, 0x76, 0x8b, 0x7a, 0x90, 0xcb, 0x4c, 0x78, 0xa1, 0x9b, 0x75, 0xe1, 0x66,
-	0x56, 0x44, 0x13, 0x76, 0xc2, 0x88, 0x64, 0x93, 0xcb, 0x66, 0xb8, 0x3d, 0x86, 0x7f, 0xac, 0xa7,
-	0xf8, 0x35, 0xb0, 0x24, 0xa7, 0x39, 0xd3, 0x4c, 0x04, 0x4a, 0x1d, 0x0f, 0xb3, 0xf9, 0x7e, 0x47,
-	0x36, 0x2a, 0x75, 0x46, 0x0c, 0x3a, 0x37, 0x17, 0x18, 0x2d, 0xea, 0x0d, 0x6f, 0x60, 0xde, 0xdf,
-	0xd7, 0x60, 0xb3, 0x30, 0xd6, 0x41, 0xa4, 0xbc, 0xf9, 0x88, 0x05, 0x3d, 0x88, 0x3c, 0xcd, 0x21,
-	0x3b, 0x94, 0x64, 0xff, 0x18, 0x74, 0xb9, 0xa2, 0x3f, 0x4f, 0x51, 0xaf, 0xde, 0x97, 0xf6, 0xbb,
-	0x6c, 0xd8, 0xc1, 0xfd, 0x7f, 0x0d, 0xea, 0x3c, 0xe2, 0x4a, 0xc9, 0x88, 0xd3, 0xa3, 0xe4, 0x70,
-	0x26, 0xfb, 0x37, 0x56, 0xa0, 0xfd, 0xc0, 0xf5, 0x27, 0xc2, 0xb6, 0x7c, 0x3e, 0x57, 0x20, 0x0b,
-	0x6a, 0x86, 0x92, 0x93, 0xfe, 0x5b, 0x5f, 0xcf, 0x13, 0xc5, 0xe7, 0xda, 0x08, 0x98, 0xf4, 0x72,
-	0x9e, 0x8e, 0xab, 0x17, 0xe9, 0xb8, 0x02, 0x6f, 0xb2, 0xba, 0xc0, 0x9b, 0xa4, 0xd4, 0x61, 0xc3,
-	0x24, 0x55, 0xaf, 0x00, 0xb0, 0xc2, 0x8b, 0x3a, 0xd4, 0x64, 0x1f, 0x51, 0x82, 0x50, 0xa3, 0x48,
-	0xc9, 0xfa, 0xc9, 0x84, 0xef, 0xba, 0x96, 0xc3, 0x1f, 0x6c, 0x94, 0x4d, 0x53, 0x42, 0xa7, 0xa7,
-	0xe5, 0xe8, 0x4f, 0x64, 0x40, 0x9b, 0xac, 0x40, 0xf7, 0x27, 0xd6, 0x3b, 0xc8, 0x68, 0xfa, 0x39,
-	0x03, 0x9a, 0xbc, 0xaa, 0xd4, 0x98, 0x5b, 0x64, 0x41, 0x7d, 0xb6, 0x9d, 0x79, 0x16, 0xda, 0x53,
-	0xf7, 0x64, 0x40, 0x45, 0xd3, 0x79, 0x6d, 0x4d, 0xdd, 0x13, 0xcc, 0xbe, 0xeb, 0x59, 0x5f, 0x25,
-	0xe1, 0x77, 0x34, 0x38, 0x9c, 0x84, 0x43, 0x77, 0x92, 0xe6, 0xe3, 0x79, 0x5e, 0xc3, 0xa4, 0xef,
-	0x50, 0x0a, 0x67, 0xb7, 0xdf, 0x60, 0x95, 0xbe, 0xa3, 0xc8, 0x7d, 0xce, 0x8f, 0x07, 0xf3, 0x20,
-	0x42, 0xe2, 0x08, 0xcb, 0xd1, 0x5a, 0x36, 0x9d, 0x8e, 0x1f, 0x3f, 0x22, 0x20, 0x16, 0xb1, 0x7f,
-	0x14, 0x36, 0x76, 0xc2, 0xe9, 0x4c, 0x25, 0x86, 0x2c, 0x5b, 0xfb, 0xfa, 0xa6, 0x06, 0xb1, 0x27,
-	0x29, 0x72, 0x17, 0x5b, 0xd8, 0x13, 0xac, 0x5d, 0x2b, 0xd3, 0x02, 0x6f, 0x90, 0x88, 0xc9, 0x3b,
-	0xf9, 0x21, 0x93, 0x2e, 0x2d, 0xf0, 0x1e, 0x4e, 0x8b, 0x13, 0x5e, 0x2d, 0x4c, 0xb8, 0xfd, 0x3f,
-	0x57, 0xa0, 0x6f, 0xb4, 0x4e, 0xed, 0xbe, 0x04, 0xbd, 0x51, 0x06, 0xca, 0xee, 0xf3, 0xae, 0x01,
-	0x15, 0x57, 0xd0, 0x79, 0x94, 0x89, 0x5e, 0xb9, 0x75, 0x18, 0xcd, 0x23, 0x2d, 0x72, 0xbd, 0x9f,
-	0x4a, 0x8b, 0xf0, 0x90, 0x99, 0x9e, 0x1e, 0x0b, 0x27, 0x6d, 0x71, 0xf8, 0x5a, 0xa2, 0x84, 0xff,
-	0xb5, 0xc5, 0xda, 0x28, 0x9c, 0x0e, 0xa8, 0xef, 0x72, 0x15, 0x34, 0x47, 0xe1, 0x74, 0x0f, 0xbf,
-	0xad, 0xaf, 0x80, 0x95, 0x26, 0x12, 0x39, 0x66, 0xec, 0xda, 0xbe, 0xce, 0x75, 0xd3, 0xf3, 0x52,
-	0xb7, 0x07, 0xc4, 0xb3, 0x84, 0x14, 0x56, 0xc5, 0xed, 0x41, 0x4d, 0x0e, 0x10, 0x61, 0x90, 0xd9,
-	0x1d, 0x1b, 0xe5, 0x62, 0x2a, 0x6f, 0xde, 0x16, 0x9b, 0x87, 0x63, 0xf2, 0x8b, 0xd0, 0x23, 0x2e,
-	0x19, 0x5b, 0xe3, 0xd3, 0xcf, 0xf7, 0x43, 0x07, 0xa1, 0x3b, 0xe1, 0x34, 0xa5, 0x0c, 0x19, 0xfb,
-	0xa7, 0xb9, 0xe4, 0x8e, 0x20, 0xb4, 0x2f, 0xb9, 0xec, 0xfb, 0x00, 0xb7, 0xfd, 0x63, 0x3f, 0x60,
-	0xc6, 0x18, 0xc7, 0x37, 0x8f, 0xc8, 0xc6, 0x36, 0x16, 0xfe, 0xb5, 0x39, 0x9a, 0x47, 0xfb, 0xf8,
-	0xcd, 0xa6, 0x2b, 0x74, 0xe7, 0xe4, 0xee, 0x50, 0x86, 0x31, 0x45, 0xf6, 0x11, 0x74, 0x6f, 0xbb,
-	0xa7, 0xfb, 0xf3, 0xd9, 0x6c, 0x72, 0xaa, 0x9d, 0x7b, 0xe9, 0xbc, 0x8a, 0x30, 0x86, 0x3f, 0xb0,
-	0x19, 0x5c, 0x32, 0x3f, 0xf0, 0xd4, 0x89, 0xac, 0x59, 0x53, 0x05, 0xde, 0x2e, 0x7e, 0x93, 0x93,
-	0x44, 0xe4, 0x3e, 0x16, 0xb3, 0x1d, 0xfa, 0x6f, 0xdf, 0x87, 0xce, 0x5d, 0x37, 0x88, 0x3f, 0x0a,
-	0x13, 0xd6, 0x42, 0x97, 0x31, 0xf0, 0x1a, 0xc3, 0xae, 0x18, 0x18, 0xb6, 0x1c, 0x3d, 0xde, 0x81,
-	0x36, 0xd6, 0x76, 0x2b, 0x3c, 0xd1, 0x26, 0xaa, 0x05, 0x71, 0xd1, 0x1a, 0x54, 0x87, 0xe1, 0x89,
-	0x36, 0x33, 0x1b, 0x86, 0x27, 0x69, 0xe5, 0xd5, 0xac, 0x72, 0xfb, 0x7d, 0xee, 0x14, 0x2e, 0xc9,
-	0x92, 0x7a, 0xd2, 0xe6, 0x57, 0x4c, 0xaa, 0xa1, 0xac, 0xae, 0x21, 0xf4, 0xd2, 0x01, 0x92, 0x65,
-	0x41, 0xb9, 0x10, 0xeb, 0x38, 0x4c, 0x94, 0xb9, 0xd3, 0x9b, 0x08, 0xd0, 0x36, 0xee, 0x89, 0x3f,
-	0x3a, 0x4a, 0xfd, 0x5b, 0xb8, 0xf2, 0x36, 0xc3, 0x78, 0x71, 0xee, 0x41, 0x67, 0xd7, 0x0b, 0x27,
-	0xd8, 0x0e, 0x2d, 0xf6, 0x0d, 0x68, 0x1d, 0xb8, 0x41, 0x6c, 0xe2, 0xaa, 0xcb, 0x05, 0xb3, 0x0e,
-	0xb3, 0x47, 0x4e, 0x13, 0x73, 0xd3, 0x89, 0xfd, 0xf5, 0x15, 0x68, 0x62, 0x55, 0xba, 0x1a, 0xea,
-	0x96, 0x61, 0x9c, 0x79, 0xa6, 0x2e, 0x83, 0xfa, 0xac, 0x55, 0xe2, 0x6c, 0xaa, 0x4e, 0xb4, 0x9e,
-	0x38, 0xeb, 0x93, 0x83, 0x03, 0xd1, 0x82, 0xaf, 0xc0, 0xda, 0xa7, 0x21, 0x51, 0x00, 0xe9, 0xd1,
-	0x94, 0x4d, 0xd1, 0x47, 0xb8, 0x71, 0x62, 0x89, 0x76, 0x0b, 0x4f, 0x06, 0x26, 0x89, 0xd6, 0x1c,
-	0x86, 0x27, 0x7c, 0x10, 0x48, 0xc6, 0x15, 0xc5, 0xc9, 0x80, 0x77, 0x62, 0x5d, 0xbb, 0x3e, 0x45,
-	0x71, 0x72, 0x4b, 0x6f, 0x47, 0xce, 0xa0, 0x02, 0x4f, 0x6e, 0x91, 0x26, 0x01, 0xee, 0xb0, 0x58,
-	0x3f, 0x56, 0xc8, 0x1d, 0x4a, 0x71, 0x66, 0xaf, 0xda, 0x0c, 0xe3, 0xf2, 0x57, 0x00, 0x24, 0x0b,
-	0x56, 0xd0, 0xe4, 0x6b, 0x8a, 0x21, 0x77, 0x02, 0xcf, 0xfe, 0x99, 0x8a, 0x69, 0xe5, 0xb3, 0x64,
-	0xab, 0x68, 0x1f, 0x9b, 0xa1, 0x1b, 0xab, 0x52, 0xa9, 0xa7, 0xf6, 0x38, 0x62, 0x1f, 0x1b, 0xf2,
-	0x3d, 0xca, 0x99, 0xc5, 0x56, 0x9f, 0xc8, 0x0f, 0xcc, 0xfe, 0xb7, 0x2b, 0xd0, 0xc3, 0xa5, 0x63,
-	0x7a, 0x85, 0x3a, 0xf3, 0x4d, 0x68, 0x7b, 0xb4, 0xc2, 0xcb, 0x77, 0x42, 0xbe, 0xfb, 0x0e, 0x70,
-	0x7e, 0x42, 0x89, 0xd7, 0x65, 0xf9, 0x97, 0x9a, 0xbc, 0x9a, 0x67, 0x84, 0x17, 0x5f, 0xdf, 0xed,
-	0xc6, 0xe2, 0x57, 0x8b, 0x8b, 0x5f, 0x58, 0xb4, 0xda, 0xd9, 0x8b, 0x56, 0x3f, 0x67, 0xd1, 0x56,
-	0xcf, 0x5b, 0xb4, 0x46, 0x61, 0xd1, 0x10, 0x7b, 0x8e, 0xdd, 0x78, 0x80, 0xbb, 0x4a, 0xba, 0xd8,
-	0xe4, 0x7b, 0x73, 0xec, 0x22, 0xe2, 0x10, 0x6e, 0xe4, 0xff, 0x03, 0x4b, 0x1f, 0x12, 0x86, 0x2c,
-	0x59, 0xdd, 0x1b, 0xd0, 0xf2, 0xbd, 0x70, 0xb2, 0xdc, 0x58, 0xbd, 0x78, 0x46, 0x30, 0x37, 0x1d,
-	0xb5, 0x5f, 0x5d, 0x61, 0x03, 0x49, 0x73, 0xb7, 0xdf, 0x81, 0x3e, 0x62, 0x69, 0xf3, 0x5c, 0x54,
-	0x4a, 0x74, 0x32, 0x85, 0x3b, 0x95, 0x14, 0xce, 0x66, 0x35, 0xdb, 0xb0, 0x91, 0xf2, 0x44, 0xb9,
-	0xab, 0x96, 0xb1, 0xd5, 0x05, 0xcd, 0x1c, 0x99, 0x17, 0xee, 0xbb, 0x70, 0xa9, 0xa4, 0x4c, 0x3c,
-	0x1f, 0x66, 0xe4, 0xc8, 0xe6, 0x42, 0xb9, 0xfd, 0xf9, 0x70, 0xd7, 0xb3, 0xde, 0x80, 0x55, 0x8f,
-	0x6e, 0x1a, 0x11, 0xb3, 0x3c, 0x95, 0xeb, 0x6c, 0x76, 0x09, 0x39, 0x92, 0xcd, 0x7a, 0x05, 0x6a,
-	0x38, 0x0d, 0xa5, 0x1e, 0x8e, 0x1a, 0xfb, 0x38, 0x94, 0xc5, 0x1e, 0xb1, 0xda, 0xec, 0x6e, 0xe4,
-	0xab, 0x80, 0xdc, 0x8f, 0xb0, 0x47, 0xe9, 0x6e, 0xae, 0x39, 0x8d, 0x78, 0x3e, 0xd4, 0x17, 0x78,
-	0x86, 0xf3, 0x56, 0x28, 0x2d, 0x45, 0x6b, 0x44, 0x6e, 0x4e, 0xdc, 0xd1, 0x51, 0x46, 0x25, 0x20,
-	0xb9, 0x89, 0x10, 0x11, 0x90, 0x51, 0x23, 0xfb, 0xe1, 0xc8, 0x77, 0x27, 0xd6, 0xd7, 0x00, 0x0e,
-	0xa8, 0x39, 0x72, 0x52, 0xab, 0x94, 0x0c, 0x29, 0xeb, 0x91, 0x63, 0x64, 0xb5, 0xff, 0xb4, 0x0a,
-	0xdd, 0xbb, 0xac, 0x36, 0x9c, 0x28, 0xed, 0xba, 0xe6, 0xc7, 0x83, 0x28, 0x1c, 0x86, 0x89, 0x50,
-	0x67, 0x0d, 0x3f, 0x76, 0xf0, 0xf3, 0x07, 0xc1, 0x22, 0x9c, 0xe9, 0x65, 0x9a, 0x73, 0x5d, 0xaf,
-	0x3d, 0xb9, 0xeb, 0x7a, 0xd1, 0x2a, 0xb0, 0xfe, 0x79, 0xac, 0x02, 0xbf, 0x01, 0xbd, 0x14, 0x6f,
-	0x65, 0x26, 0x19, 0x4b, 0x91, 0x57, 0x47, 0x23, 0x2f, 0xcd, 0x7a, 0x22, 0xa9, 0x6c, 0xca, 0x67,
-	0xc4, 0xdb, 0x7f, 0xea, 0x9e, 0xe4, 0x3c, 0xde, 0xfb, 0x86, 0xf7, 0x7c, 0x4a, 0xea, 0x17, 0x75,
-	0x6b, 0x7b, 0x8a, 0x9d, 0xce, 0xbb, 0xa9, 0x57, 0x7d, 0x6a, 0x44, 0x4d, 0x62, 0x46, 0x62, 0x99,
-	0x33, 0x13, 0xc5, 0x0e, 0x43, 0x71, 0xba, 0xd9, 0x9b, 0xa9, 0xdc, 0xad, 0x0b, 0x96, 0xb9, 0x75,
-	0xd9, 0x23, 0xe8, 0xef, 0x8c, 0xdd, 0xe4, 0x81, 0x8a, 0x63, 0xf7, 0x90, 0x97, 0x7f, 0x0b, 0x1a,
-	0x53, 0xfe, 0xd4, 0xc1, 0x77, 0xe4, 0x93, 0x89, 0xc4, 0x3c, 0x6d, 0xdb, 0x44, 0x80, 0x56, 0xbc,
-	0xe0, 0x2e, 0x37, 0x18, 0x2e, 0xdc, 0xe5, 0x24, 0xc3, 0xfe, 0x0b, 0x2b, 0x70, 0x01, 0x5b, 0x29,
-	0xec, 0x8a, 0x72, 0x9a, 0x62, 0xb9, 0xbb, 0x6a, 0x66, 0x87, 0x59, 0x35, 0xed, 0x30, 0x73, 0x2c,
-	0x60, 0xad, 0xc0, 0x02, 0xa6, 0x56, 0x58, 0x75, 0xd3, 0x0a, 0x6b, 0xc1, 0x74, 0x73, 0x75, 0xd1,
-	0x74, 0x33, 0x33, 0x5a, 0x6d, 0xe4, 0x8c, 0x56, 0x73, 0x96, 0xae, 0xcd, 0x82, 0xa5, 0xeb, 0x32,
-	0x1b, 0x52, 0xfb, 0x0f, 0xeb, 0xc4, 0xd2, 0x2c, 0x1e, 0x8d, 0x1f, 0xd0, 0x24, 0x2c, 0x33, 0xb1,
-	0x2d, 0x1f, 0x7f, 0x6e, 0xca, 0x56, 0xcf, 0x0e, 0xa0, 0xd1, 0x58, 0xb0, 0x59, 0xcd, 0xf9, 0x2f,
-	0x26, 0x4a, 0x6e, 0xa2, 0xcc, 0x7f, 0x31, 0x21, 0x1a, 0xc7, 0x74, 0x84, 0x64, 0x31, 0x2d, 0x84,
-	0x99, 0x0f, 0x24, 0x49, 0xa3, 0x1e, 0x2b, 0xed, 0x06, 0x06, 0x5a, 0x1a, 0xf5, 0x58, 0x65, 0x1e,
-	0x73, 0x9c, 0xc1, 0xd0, 0xb9, 0xb5, 0x08, 0x42, 0xe5, 0x9f, 0x87, 0x4e, 0xa6, 0xc9, 0x4e, 0xc5,
-	0x3d, 0xa0, 0x95, 0xa8, 0x2c, 0x62, 0x95, 0x03, 0x27, 0x32, 0x19, 0xdf, 0x13, 0x29, 0x8f, 0x98,
-	0x1f, 0xb1, 0xea, 0xb8, 0xcc, 0x90, 0x77, 0xd1, 0xc9, 0x3a, 0xbf, 0xea, 0xfd, 0xc2, 0xaa, 0x3f,
-	0x07, 0x6d, 0x31, 0x5c, 0x22, 0x4b, 0xdd, 0x35, 0xee, 0x0b, 0x83, 0xc8, 0x90, 0xd7, 0xd8, 0x16,
-	0xeb, 0x39, 0xc5, 0xcd, 0xa2, 0xf3, 0xed, 0xb3, 0x65, 0xce, 0xb7, 0xe5, 0xce, 0xb3, 0xcf, 0x2d,
-	0x71, 0x9e, 0x15, 0x3f, 0xeb, 0xe7, 0x79, 0x47, 0x45, 0xd3, 0x21, 0x92, 0xf8, 0x24, 0x8b, 0x7f,
-	0x81, 0xbd, 0xb1, 0xf1, 0x7f, 0x19, 0xe2, 0xb2, 0x53, 0x73, 0x0b, 0x03, 0x71, 0xbd, 0x02, 0x6b,
-	0x9e, 0x1b, 0x12, 0x9e, 0x79, 0xeb, 0xcd, 0x37, 0x07, 0x89, 0x3f, 0x8b, 0xb7, 0xbe, 0x44, 0x9b,
-	0xb2, 0x6f, 0xc0, 0x1f, 0xfa, 0xb3, 0xd8, 0xfe, 0x06, 0xf4, 0x85, 0x32, 0xc3, 0x4d, 0xb0, 0x64,
-	0x77, 0x6f, 0xc2, 0x2a, 0xef, 0x03, 0xb1, 0x2a, 0x95, 0x2f, 0xfb, 0x04, 0xba, 0xfb, 0xa7, 0x71,
-	0xa2, 0xa6, 0x82, 0x8b, 0x52, 0xe9, 0x4d, 0xc5, 0x90, 0xde, 0x9c, 0x79, 0x34, 0x4c, 0xcb, 0x61,
-	0x26, 0xe0, 0xb4, 0xe5, 0x70, 0x1e, 0x73, 0xd5, 0xf2, 0x98, 0xcb, 0xfe, 0x0f, 0x15, 0xb0, 0xa4,
-	0x51, 0x53, 0x3b, 0x5e, 0xd6, 0xfe, 0xbb, 0xd0, 0x20, 0x73, 0x6d, 0xa1, 0x4a, 0xda, 0xdb, 0xcf,
-	0x17, 0x55, 0x41, 0x45, 0x24, 0xe7, 0xac, 0x62, 0x81, 0x5d, 0xcf, 0xba, 0x9e, 0xa1, 0xd5, 0x6a,
-	0x19, 0x75, 0x94, 0xc7, 0xc2, 0x39, 0xa4, 0x9b, 0xe0, 0xd2, 0xa6, 0x21, 0x98, 0x6a, 0x4e, 0x93,
-	0x01, 0xec, 0x45, 0x64, 0x88, 0x32, 0xea, 0x45, 0x51, 0xc6, 0x48, 0x3b, 0x9d, 0xb9, 0x89, 0xf5,
-	0x31, 0x3c, 0x15, 0xb2, 0xba, 0x75, 0x30, 0x8d, 0x0f, 0x45, 0xf4, 0x6a, 0x92, 0xd8, 0xe7, 0x0f,
-	0xe5, 0xa2, 0x54, 0xf0, 0x20, 0x3e, 0xe4, 0x24, 0x6a, 0x24, 0x86, 0xc6, 0xad, 0xf9, 0xa9, 0xa6,
-	0x1c, 0x0e, 0xc3, 0xd0, 0x8b, 0x0d, 0xff, 0x30, 0xfa, 0x16, 0xa3, 0x82, 0xf9, 0xe9, 0x20, 0x73,
-	0x97, 0x5a, 0x1d, 0xce, 0x4f, 0x3f, 0x98, 0x4f, 0xc9, 0x39, 0x7b, 0x7e, 0x6a, 0x9a, 0x47, 0x63,
-	0x46, 0x7d, 0xa5, 0x44, 0xea, 0x20, 0x93, 0x5b, 0x54, 0x9d, 0x46, 0xa4, 0x0e, 0x68, 0xcd, 0x12,
-	0x68, 0xef, 0xcf, 0x14, 0x52, 0x3e, 0xfb, 0xe3, 0x70, 0xd1, 0x3a, 0xba, 0x42, 0xb9, 0x73, 0xd6,
-	0xd1, 0x57, 0x00, 0xb8, 0x6f, 0x66, 0x28, 0x36, 0x82, 0xd0, 0x0d, 0x4b, 0x11, 0xec, 0xb8, 0x06,
-	0x93, 0x63, 0xd5, 0xd5, 0x32, 0xcb, 0xfa, 0xd7, 0x2b, 0xd0, 0xc6, 0xf6, 0xf4, 0x78, 0xd3, 0x3a,
-	0x8d, 0x8d, 0xc2, 0x75, 0x92, 0x0a, 0xfb, 0x2d, 0x71, 0x42, 0x14, 0x62, 0x69, 0xf1, 0xb6, 0x97,
-	0x7a, 0xd8, 0x07, 0x91, 0x6a, 0xbc, 0xc6, 0x43, 0x36, 0x58, 0xa8, 0x3c, 0x11, 0x63, 0x0c, 0x9a,
-	0x26, 0x83, 0x98, 0xa8, 0xdf, 0x58, 0x81, 0x26, 0x42, 0x76, 0x13, 0x35, 0x3d, 0x6b, 0x0d, 0x2e,
-	0x42, 0x7d, 0x16, 0xf9, 0xa3, 0x54, 0xfc, 0x40, 0x1f, 0x5a, 0xc8, 0xc2, 0x29, 0xfa, 0xfe, 0x9c,
-	0x47, 0x7b, 0x94, 0xf8, 0x2c, 0x80, 0xe7, 0xc7, 0x33, 0x15, 0x8d, 0x54, 0xa6, 0x34, 0xc8, 0x20,
-	0x78, 0xbe, 0xc7, 0x61, 0x22, 0x21, 0xe2, 0xf0, 0x2f, 0x85, 0xe3, 0xf3, 0xa7, 0x7e, 0xc2, 0x73,
-	0xc2, 0xb7, 0x60, 0x8b, 0x20, 0x34, 0x27, 0xa9, 0xfe, 0x05, 0x0a, 0xfa, 0x97, 0x91, 0x1f, 0x8d,
-	0x26, 0x4a, 0x9c, 0x28, 0xe4, 0x4b, 0x3b, 0x0b, 0x27, 0x99, 0x90, 0xbe, 0xca, 0xce, 0xc2, 0x89,
-	0xde, 0x20, 0xe9, 0xa9, 0xee, 0xf1, 0x06, 0xd1, 0xe4, 0xc8, 0x33, 0x00, 0x63, 0x6f, 0xc0, 0xd3,
-	0xef, 0x69, 0x8c, 0x3d, 0xf6, 0x70, 0x8a, 0x76, 0x3d, 0xfb, 0x67, 0x64, 0xc6, 0x34, 0xdf, 0x7f,
-	0xd6, 0x2a, 0x6e, 0x2f, 0xae, 0x62, 0x21, 0x58, 0x93, 0x4c, 0xbd, 0xb1, 0x8c, 0x6f, 0xf0, 0xa6,
-	0xa6, 0x22, 0xd5, 0x33, 0x16, 0x1e, 0xb7, 0xba, 0x0e, 0x20, 0x93, 0xdb, 0xc0, 0xb5, 0xc5, 0x0d,
-	0xbc, 0xb0, 0x43, 0xeb, 0x8b, 0x3b, 0x14, 0x8f, 0x19, 0xb2, 0xb1, 0x5a, 0x72, 0x50, 0x75, 0x56,
-	0x3d, 0xf7, 0xf4, 0x0e, 0x33, 0x21, 0xa4, 0xdb, 0xd5, 0xdc, 0x65, 0xd5, 0x69, 0xe0, 0xf7, 0x9d,
-	0xc0, 0xb3, 0xdf, 0xe1, 0xb9, 0xa0, 0x63, 0xf0, 0x0a, 0xd4, 0x96, 0x7a, 0xb5, 0xea, 0x09, 0x73,
-	0x28, 0x8b, 0xfd, 0xc7, 0x55, 0xe8, 0x7c, 0xe4, 0xab, 0xc7, 0x29, 0xdf, 0x50, 0x74, 0x1b, 0x4e,
-	0xcd, 0x80, 0x56, 0x3e, 0xaf, 0x19, 0x90, 0x96, 0x3e, 0x20, 0xa5, 0x7d, 0x8e, 0x24, 0x21, 0xd2,
-	0x4e, 0xb9, 0xaf, 0x40, 0x8d, 0xb2, 0xd7, 0x96, 0x08, 0x2b, 0x30, 0x93, 0x43, 0x59, 0xac, 0x6d,
-	0x68, 0x08, 0xfd, 0x5f, 0xca, 0x28, 0x18, 0xce, 0x6c, 0x8e, 0xce, 0x98, 0xe7, 0x4c, 0x56, 0xbf,
-	0x38, 0x67, 0xf2, 0xb9, 0xfc, 0x95, 0x9e, 0x86, 0xa6, 0xe7, 0xb2, 0x55, 0xaa, 0x26, 0x35, 0xf5,
-	0x77, 0x01, 0xf5, 0xb7, 0x8a, 0x6a, 0x03, 0xdc, 0xd4, 0x64, 0x07, 0x4c, 0x57, 0x25, 0xeb, 0x08,
-	0x5a, 0x04, 0xa1, 0xbb, 0xf2, 0x0d, 0x68, 0xa6, 0x7c, 0x48, 0xfb, 0x0c, 0x3e, 0xa4, 0x31, 0x63,
-	0x0e, 0xc4, 0x1e, 0xf0, 0x26, 0xd9, 0x09, 0x99, 0x6b, 0x8d, 0xc7, 0x61, 0xce, 0x31, 0xaf, 0x89,
-	0x00, 0xed, 0xbf, 0x13, 0x29, 0x39, 0x4b, 0x12, 0x29, 0x31, 0x52, 0x7c, 0x92, 0xc8, 0x9f, 0xc9,
-	0x74, 0xc2, 0xeb, 0x3a, 0x98, 0x97, 0x71, 0xeb, 0xcf, 0x8b, 0xde, 0x82, 0xf0, 0xf9, 0x6b, 0x50,
-	0xf3, 0x99, 0x8f, 0x5d, 0x54, 0x59, 0x18, 0x08, 0xd8, 0xa1, 0x5c, 0x48, 0xc0, 0x31, 0x15, 0x95,
-	0xbf, 0x61, 0x58, 0xdf, 0x79, 0x8b, 0xaf, 0x99, 0x37, 0xa1, 0x39, 0x0a, 0x89, 0x84, 0xd2, 0x9e,
-	0x88, 0x8b, 0x9b, 0x1b, 0x07, 0xe7, 0x34, 0x30, 0x9b, 0xa3, 0x62, 0xfb, 0x2b, 0xd0, 0xd9, 0x99,
-	0x47, 0xa4, 0x35, 0xde, 0xf7, 0x0f, 0x49, 0xc2, 0x43, 0x44, 0x58, 0xec, 0x1f, 0x06, 0x72, 0xc1,
-	0x34, 0x11, 0x80, 0x89, 0xf6, 0x4f, 0xc0, 0x2a, 0xfe, 0x3e, 0x9a, 0x11, 0xca, 0xf2, 0x0f, 0x83,
-	0xbc, 0xfe, 0x19, 0x21, 0xac, 0x7f, 0x7e, 0x0a, 0x1a, 0x88, 0x6d, 0x3d, 0xf7, 0x54, 0xdf, 0x83,
-	0xa3, 0x79, 0x74, 0xdb, 0x3d, 0xb5, 0xbe, 0x05, 0x5d, 0x92, 0x75, 0x63, 0x59, 0xc1, 0x1b, 0x8b,
-	0xa6, 0x17, 0x66, 0x87, 0x9c, 0xf6, 0x68, 0x1e, 0xe1, 0x1f, 0x62, 0xe3, 0x7f, 0xab, 0xc6, 0xf6,
-	0x32, 0x37, 0x47, 0x89, 0x7f, 0xec, 0x27, 0xa7, 0xd6, 0x9b, 0xd0, 0xca, 0xea, 0x62, 0x79, 0xc0,
-	0x85, 0xfc, 0x88, 0xa9, 0xbf, 0x4e, 0x33, 0x96, 0x2a, 0xac, 0x2f, 0xb3, 0x6f, 0x80, 0xe0, 0x0f,
-	0x93, 0xcb, 0xeb, 0x72, 0x1f, 0xb5, 0x12, 0xe3, 0x43, 0xb0, 0x5c, 0x69, 0xc6, 0x60, 0x9a, 0x79,
-	0x56, 0x5f, 0xc8, 0xeb, 0xf3, 0x38, 0x9b, 0xaf, 0x62, 0x23, 0x94, 0xc4, 0x9a, 0x2e, 0x9c, 0x32,
-	0xd1, 0xaf, 0xc2, 0x3a, 0x0b, 0xcf, 0x4c, 0xf2, 0x96, 0x69, 0x9d, 0x3e, 0x25, 0xec, 0x64, 0xd4,
-	0xed, 0xbb, 0x70, 0x29, 0x97, 0x37, 0xe7, 0xeb, 0xc2, 0x28, 0x71, 0xd3, 0x28, 0xe3, 0x64, 0x0e,
-	0x10, 0xd6, 0xc7, 0x60, 0x89, 0x5b, 0xbc, 0x94, 0x35, 0x0e, 0xf3, 0x2b, 0x4b, 0xfa, 0xfd, 0x88,
-	0x0a, 0x68, 0xfa, 0x9a, 0xfb, 0xcf, 0x95, 0x70, 0xfd, 0xd4, 0xff, 0x0f, 0x60, 0x33, 0x5f, 0xf1,
-	0xd8, 0x8d, 0x4d, 0x5f, 0x8d, 0xb3, 0x0c, 0x60, 0xcd, 0xca, 0xee, 0xb9, 0x3a, 0xc2, 0xd1, 0x06,
-	0xab, 0x0d, 0xbd, 0x41, 0x3a, 0xd1, 0x86, 0x76, 0xf0, 0x82, 0x24, 0xea, 0xb5, 0xa6, 0x32, 0xdf,
-	0x84, 0x8e, 0x3b, 0x4a, 0x88, 0xb6, 0x33, 0x02, 0xff, 0xe5, 0x3d, 0xde, 0x73, 0x04, 0xb6, 0x03,
-	0xee, 0x28, 0x79, 0x10, 0x1f, 0xd2, 0xf1, 0xfe, 0x83, 0x06, 0x5c, 0x2c, 0x5b, 0x2c, 0x8a, 0x78,
-	0x98, 0xc2, 0x33, 0x9a, 0xa2, 0x93, 0x01, 0x77, 0xc9, 0x37, 0xc9, 0xc8, 0x64, 0x1c, 0xfd, 0x5e,
-	0x06, 0x26, 0x0c, 0x90, 0xbf, 0xcf, 0xab, 0x22, 0xe5, 0x2c, 0xbd, 0xcf, 0x79, 0xf9, 0xd3, 0xfb,
-	0xdc, 0x38, 0x37, 0xf5, 0xdc, 0xb9, 0xb9, 0x03, 0xeb, 0x1c, 0xd3, 0xcb, 0x54, 0xeb, 0x9e, 0x8b,
-	0xa0, 0xfb, 0x54, 0xc6, 0x88, 0xca, 0xf5, 0x5d, 0xe8, 0x1d, 0x84, 0x51, 0x12, 0x10, 0x3b, 0xe4,
-	0xb9, 0xa7, 0xb1, 0x60, 0xea, 0x17, 0x97, 0xec, 0x8b, 0xbb, 0x3a, 0xf3, 0x6d, 0xf7, 0x34, 0x76,
-	0xba, 0x07, 0xe6, 0x67, 0x86, 0x9b, 0x69, 0x24, 0x22, 0x81, 0x27, 0x88, 0x56, 0x8e, 0xe4, 0x76,
-	0x6d, 0xcb, 0xb4, 0xfe, 0xe0, 0xad, 0xfa, 0x01, 0xf4, 0xc5, 0x15, 0x3e, 0xf5, 0x13, 0x82, 0x92,
-	0x70, 0x2d, 0x59, 0x7f, 0x76, 0xd2, 0xdc, 0x1c, 0x5e, 0x24, 0x2b, 0x2d, 0x3b, 0xb4, 0x3f, 0xf1,
-	0x8f, 0xdc, 0xa1, 0x3f, 0xd1, 0x87, 0x56, 0x42, 0x60, 0x2d, 0xab, 0xef, 0x7e, 0x9a, 0x9b, 0xeb,
-	0x9b, 0xe4, 0xbe, 0xf1, 0x86, 0x3e, 0xf2, 0x83, 0x43, 0x32, 0x15, 0x13, 0x8f, 0x9b, 0x65, 0x96,
-	0x74, 0x98, 0x8f, 0xac, 0xef, 0xbe, 0x0c, 0x7d, 0xe2, 0x36, 0xb9, 0x1c, 0x72, 0x30, 0x44, 0xd1,
-	0x75, 0x9d, 0x9e, 0x06, 0x3f, 0x24, 0xa8, 0xf5, 0x6d, 0xe8, 0xaa, 0x13, 0x91, 0x77, 0x2d, 0x0d,
-	0x0f, 0x79, 0x47, 0x72, 0xb0, 0x4c, 0x4e, 0xe7, 0xa7, 0xc1, 0x7e, 0x0b, 0xe0, 0xf1, 0x58, 0xa9,
-	0x09, 0x8f, 0x93, 0x3d, 0x6d, 0x9e, 0x2d, 0x1b, 0xe7, 0xe9, 0xc7, 0x98, 0x8d, 0x43, 0xa1, 0x3c,
-	0xd6, 0x7f, 0x29, 0x12, 0x2f, 0x62, 0x4e, 0x2a, 0xbd, 0x56, 0x62, 0xa7, 0xaf, 0x4b, 0x33, 0xf2,
-	0x65, 0x0c, 0x4a, 0x25, 0x77, 0xa0, 0x37, 0x4c, 0x06, 0x51, 0x38, 0x0a, 0x7d, 0x29, 0x7e, 0xb1,
-	0xc4, 0x4c, 0x5f, 0x17, 0xbf, 0xf5, 0xd0, 0xf9, 0x70, 0x27, 0xf4, 0x03, 0xa7, 0x33, 0x4c, 0x1c,
-	0x2a, 0x43, 0x95, 0x7c, 0x0c, 0x57, 0x24, 0xd2, 0xd2, 0xa7, 0xbe, 0x6b, 0xb0, 0xfc, 0xa9, 0xe1,
-	0xe2, 0xc6, 0x59, 0xd3, 0x7d, 0x89, 0x23, 0x31, 0x7d, 0xea, 0xbb, 0xa9, 0x4c, 0x40, 0x5b, 0x54,
-	0xfe, 0x66, 0x05, 0xd6, 0x8a, 0x6d, 0x5b, 0xdf, 0x82, 0xbe, 0x61, 0x38, 0x78, 0xbe, 0x61, 0x64,
-	0x37, 0xb5, 0x19, 0x14, 0xf2, 0xa6, 0x97, 0x99, 0x0c, 0x9e, 0x6f, 0xde, 0xd9, 0xd1, 0xd6, 0x82,
-	0x42, 0x6c, 0xae, 0x53, 0xe1, 0xdc, 0x8d, 0xc3, 0x48, 0x81, 0x6a, 0xcd, 0xae, 0x1c, 0x7b, 0x1f,
-	0x7a, 0xf9, 0x59, 0x4f, 0xb5, 0xce, 0xb4, 0x54, 0x86, 0x2b, 0x0a, 0x69, 0x9d, 0x31, 0x4f, 0xaa,
-	0xd7, 0xe6, 0xb5, 0x3c, 0x4d, 0x5d, 0x80, 0x79, 0xb9, 0x4e, 0x63, 0xfb, 0x77, 0x57, 0x60, 0x7d,
-	0x61, 0x27, 0x58, 0x8f, 0x60, 0x93, 0x77, 0x8f, 0x56, 0xd4, 0x17, 0xe2, 0xc8, 0xe4, 0xf9, 0x64,
-	0x2a, 0x27, 0x2a, 0x7a, 0xa1, 0xfe, 0x9d, 0x0b, 0x8f, 0xf3, 0x40, 0x4d, 0x90, 0x71, 0xb5, 0xe1,
-	0x4c, 0x05, 0xda, 0xa3, 0x96, 0x20, 0x1f, 0xce, 0x54, 0x80, 0x57, 0xa0, 0x6e, 0x95, 0x69, 0xfc,
-	0xcc, 0x47, 0xb1, 0x2f, 0xd5, 0x11, 0x5c, 0xbc, 0xc1, 0x12, 0x35, 0x9d, 0x4d, 0xdc, 0x44, 0x19,
-	0x46, 0xf8, 0x6d, 0x0d, 0xdb, 0xf5, 0x4e, 0xc8, 0x14, 0x8c, 0xaa, 0xc3, 0x6a, 0xb4, 0x29, 0x18,
-	0x02, 0xb0, 0x7c, 0x9a, 0x88, 0x85, 0x57, 0x8d, 0x44, 0x2c, 0xf9, 0x36, 0x34, 0x27, 0xe1, 0xe1,
-	0xf2, 0xdb, 0x8b, 0x06, 0x7c, 0x3f, 0x3c, 0x64, 0xf2, 0x70, 0x12, 0xf2, 0xfd, 0x71, 0x13, 0x3a,
-	0xe6, 0x81, 0x5c, 0xb0, 0xd3, 0x79, 0x01, 0xd2, 0x23, 0x6a, 0x52, 0x68, 0x1a, 0xf6, 0xc1, 0x7c,
-	0x6a, 0xfb, 0x59, 0x15, 0x9a, 0x25, 0x4a, 0xed, 0x69, 0x8d, 0x58, 0x9d, 0x29, 0x8c, 0x64, 0x2a,
-	0x2d, 0x22, 0xea, 0x70, 0x89, 0xce, 0x8f, 0x6f, 0x43, 0x04, 0x20, 0xae, 0x87, 0x3d, 0x48, 0x77,
-	0x13, 0x5e, 0x76, 0x65, 0xfd, 0xd5, 0xc2, 0x9f, 0x15, 0x43, 0xf8, 0x63, 0xde, 0x4e, 0xd5, 0xfc,
-	0xed, 0xd4, 0x83, 0x95, 0xe1, 0x21, 0xad, 0x43, 0xcb, 0x59, 0x19, 0x1e, 0xda, 0x7f, 0xb3, 0x02,
-	0x4f, 0x2d, 0xb9, 0x2b, 0x48, 0xb2, 0x99, 0x19, 0xd8, 0x0a, 0x81, 0x98, 0xa4, 0x16, 0xb4, 0xaf,
-	0xc2, 0x7a, 0x96, 0x9c, 0x29, 0xa3, 0xd9, 0x6c, 0x53, 0xe7, 0x12, 0xad, 0x64, 0xce, 0x9e, 0xb9,
-	0xfa, 0x64, 0x76, 0xd5, 0x3f, 0x0e, 0xcf, 0x9c, 0x45, 0xdd, 0x3c, 0xd9, 0x85, 0x9f, 0xbf, 0xc7,
-	0x57, 0xce, 0xba, 0xc7, 0xf3, 0x33, 0x65, 0x1f, 0xc0, 0xd6, 0xb2, 0x4b, 0x6b, 0x61, 0x11, 0x32,
-	0x6b, 0x9f, 0x6c, 0xcb, 0x88, 0xb5, 0x8f, 0x6c, 0xe3, 0x20, 0x1c, 0x04, 0x61, 0xa2, 0x45, 0x1a,
-	0x4d, 0xa7, 0x19, 0x84, 0x1f, 0xd0, 0xb7, 0x7d, 0xd7, 0x6c, 0x27, 0x7f, 0x99, 0x2d, 0x09, 0xf1,
-	0x7e, 0x11, 0xea, 0x6c, 0x48, 0xa3, 0x63, 0x70, 0xe3, 0x87, 0x3d, 0x81, 0x3e, 0x2b, 0xcd, 0x1e,
-	0x86, 0x8f, 0xc5, 0x9f, 0xa7, 0x20, 0xbb, 0xae, 0x2c, 0xc8, 0xae, 0x6f, 0x40, 0x1d, 0xa9, 0x6e,
-	0xed, 0x3d, 0xf0, 0x44, 0x8c, 0x2f, 0x15, 0xd0, 0x96, 0xac, 0xd4, 0xd6, 0x9f, 0xb3, 0x25, 0xeb,
-	0x9f, 0x48, 0xf8, 0xa5, 0x87, 0xda, 0xec, 0x38, 0x08, 0x1f, 0x0f, 0x16, 0xc7, 0xd9, 0x0d, 0xc2,
-	0xc7, 0x0f, 0xb3, 0xa1, 0x22, 0x16, 0x4e, 0xf3, 0x19, 0xc1, 0x72, 0x3b, 0x3a, 0x1b, 0xed, 0x07,
-	0x6d, 0xea, 0x98, 0xa4, 0xf6, 0xc0, 0x65, 0xa6, 0x8e, 0x94, 0x9f, 0x47, 0x98, 0x76, 0x22, 0x3e,
-	0x4d, 0xa3, 0xad, 0x1a, 0x54, 0x61, 0x37, 0x3e, 0x95, 0x88, 0xaa, 0x54, 0xfd, 0x37, 0xe1, 0xb2,
-	0xd1, 0xd1, 0x41, 0xa6, 0xc7, 0x37, 0x4d, 0x9e, 0x9e, 0xca, 0x16, 0xe8, 0xb6, 0x56, 0xeb, 0xd3,
-	0x8e, 0xbc, 0x07, 0x1d, 0x47, 0x1d, 0xcc, 0x63, 0xe5, 0xdd, 0x9c, 0xcd, 0x26, 0x3a, 0xaa, 0xe9,
-	0x24, 0x75, 0xb3, 0xa8, 0x51, 0x54, 0xd3, 0x89, 0x04, 0x6d, 0x72, 0x31, 0x8f, 0x39, 0xd2, 0x16,
-	0x41, 0xa8, 0xa6, 0xdb, 0xd0, 0xbc, 0xed, 0x9e, 0xfe, 0x59, 0x6b, 0xf9, 0xa5, 0x0a, 0xf4, 0x68,
-	0xfc, 0x99, 0x8e, 0x68, 0x07, 0xda, 0xa3, 0x90, 0x5d, 0x71, 0x32, 0x6e, 0xee, 0x49, 0xb6, 0x15,
-	0x70, 0x31, 0xbd, 0x6d, 0x45, 0x21, 0x92, 0xb6, 0x5b, 0x77, 0xc4, 0xdd, 0x59, 0x47, 0x02, 0x95,
-	0x0c, 0x3a, 0x8c, 0xb1, 0x76, 0xfa, 0x21, 0xa8, 0x04, 0x32, 0xb6, 0xbf, 0x0f, 0x3d, 0x47, 0x61,
-	0xbd, 0x2a, 0xf0, 0xc8, 0x9d, 0xf8, 0xac, 0xb1, 0x96, 0x47, 0x41, 0x78, 0x0e, 0xda, 0x84, 0x4e,
-	0x8c, 0xa8, 0x18, 0x55, 0x62, 0x47, 0xfc, 0x63, 0xa5, 0x9f, 0x0a, 0xe1, 0x2f, 0xf1, 0xdf, 0x91,
-	0x2f, 0xbc, 0x66, 0xd2, 0xb6, 0xf7, 0x55, 0x62, 0xbd, 0x05, 0x75, 0x6a, 0xa9, 0xd4, 0x4a, 0x24,
-	0xdf, 0x4b, 0x87, 0x73, 0xda, 0x3f, 0x04, 0xed, 0x07, 0x6a, 0x3a, 0x94, 0x59, 0x2a, 0x51, 0x50,
-	0xbc, 0x00, 0x1d, 0x2d, 0x28, 0x37, 0x16, 0xa8, 0x2d, 0x30, 0x6d, 0xc8, 0xc9, 0x36, 0x99, 0x22,
-	0x48, 0xa5, 0x0f, 0xfb, 0xaf, 0x56, 0xa0, 0x4f, 0x4d, 0x21, 0x0a, 0x3a, 0x60, 0x54, 0xf3, 0x55,
-	0x2d, 0x03, 0x2b, 0xd3, 0xc8, 0x53, 0x66, 0xea, 0x86, 0x16, 0x7c, 0x5d, 0x86, 0xd6, 0x54, 0x4d,
-	0xf3, 0x21, 0xe8, 0xa6, 0x6a, 0xca, 0xb2, 0x3d, 0xd6, 0xcb, 0xd3, 0x46, 0x11, 0x74, 0xd7, 0xf0,
-	0x63, 0xde, 0x6d, 0x1b, 0xb0, 0x3a, 0x9a, 0xa5, 0xb1, 0x0a, 0x9a, 0x4e, 0x7d, 0x34, 0xe3, 0x2b,
-	0x15, 0x78, 0xac, 0xfa, 0x42, 0x15, 0xdf, 0x0c, 0x9e, 0x5a, 0xf6, 0x05, 0x60, 0x29, 0x09, 0xe1,
-	0x4a, 0xf5, 0xc5, 0x45, 0x76, 0xf6, 0x4f, 0x55, 0xc0, 0xe2, 0xf1, 0x84, 0x71, 0x8c, 0xe4, 0x81,
-	0x4a, 0xd8, 0x2c, 0xa1, 0xc5, 0x1a, 0xa6, 0x49, 0x78, 0x28, 0x73, 0xf0, 0xf4, 0xe2, 0x1c, 0x90,
-	0xba, 0xe9, 0x7e, 0x78, 0xe8, 0x34, 0x0f, 0xe4, 0x9f, 0x75, 0x5d, 0x24, 0x40, 0x4f, 0xde, 0x11,
-	0xca, 0x6f, 0x1f, 0x41, 0x37, 0xed, 0x86, 0x76, 0xf3, 0xd2, 0x4e, 0x6e, 0xe2, 0xe6, 0x25, 0x4e,
-	0x6e, 0x57, 0x80, 0x95, 0x9a, 0xb9, 0x3b, 0x8c, 0x20, 0x3a, 0xea, 0x2b, 0x27, 0x8f, 0x72, 0x17,
-	0x19, 0xeb, 0x46, 0x77, 0x18, 0x75, 0xfc, 0xf3, 0x0a, 0x34, 0xa9, 0x35, 0xec, 0xf1, 0x25, 0x68,
-	0x86, 0xb3, 0x01, 0xef, 0x0b, 0x11, 0xbc, 0x87, 0xb3, 0x87, 0x64, 0xad, 0x4b, 0x8f, 0xf1, 0x98,
-	0x4a, 0xab, 0xd5, 0x70, 0x46, 0x62, 0xb8, 0x67, 0xa1, 0x3d, 0x54, 0x83, 0xb4, 0x98, 0xc4, 0x79,
-	0x1b, 0xaa, 0x0f, 0xa5, 0xe0, 0x33, 0x00, 0x9c, 0x4e, 0x65, 0x99, 0xbe, 0x68, 0x62, 0x32, 0x95,
-	0xa6, 0xe0, 0x2a, 0x2a, 0x48, 0x4c, 0xcf, 0xb1, 0x16, 0x41, 0x34, 0xb3, 0x2d, 0xc9, 0x99, 0x39,
-	0xb2, 0x24, 0x63, 0xe7, 0x6f, 0x42, 0x5b, 0xf7, 0x1d, 0x8f, 0xd2, 0x36, 0xb0, 0x78, 0x50, 0x56,
-	0x6a, 0x91, 0x96, 0xd0, 0x99, 0x1d, 0x3e, 0xec, 0xf7, 0xc3, 0x43, 0xfb, 0xdf, 0x54, 0xa4, 0x0e,
-	0xde, 0x65, 0xb2, 0x7d, 0x87, 0x2a, 0xca, 0x30, 0x41, 0x93, 0x01, 0x8c, 0x0a, 0x78, 0x94, 0x2b,
-	0xc6, 0xa1, 0x59, 0x38, 0x6d, 0xd5, 0xc5, 0xd3, 0xf6, 0xcd, 0x14, 0x5b, 0xd0, 0x8e, 0xa8, 0x9d,
-	0x6f, 0xaf, 0x24, 0xa8, 0x44, 0xfb, 0x3c, 0xbb, 0x9e, 0x27, 0x41, 0x11, 0xcc, 0xb7, 0x89, 0x5c,
-	0x8f, 0x11, 0x03, 0x4d, 0xc6, 0x3f, 0xa9, 0xe8, 0xa3, 0x42, 0x9b, 0x66, 0x03, 0x56, 0x67, 0x91,
-	0xca, 0x46, 0x51, 0x9f, 0x45, 0x6a, 0xd7, 0xc3, 0xe5, 0x3a, 0xf6, 0x47, 0x6a, 0x20, 0x69, 0x6c,
-	0xb0, 0xd3, 0x42, 0xd0, 0x1e, 0xa5, 0xbf, 0x0b, 0x6d, 0x3d, 0xfe, 0x4c, 0xf2, 0xbf, 0xb5, 0x38,
-	0x8b, 0xdc, 0x92, 0x03, 0xd3, 0xec, 0x70, 0x5e, 0x46, 0x86, 0x7a, 0x74, 0x94, 0xd3, 0x50, 0x22,
-	0x40, 0xd3, 0x53, 0x94, 0x98, 0x11, 0xf3, 0x0d, 0xfc, 0xc6, 0x23, 0xfe, 0xeb, 0x15, 0x80, 0x0c,
-	0x8f, 0x9c, 0x73, 0xed, 0x18, 0x12, 0xe1, 0x95, 0xa2, 0x44, 0xf8, 0x39, 0x68, 0x73, 0xf2, 0xd0,
-	0xf5, 0x0e, 0xf5, 0x56, 0xe4, 0x12, 0xb7, 0x10, 0x92, 0x65, 0x30, 0x63, 0xf9, 0x70, 0x06, 0xa6,
-	0x05, 0x5e, 0x80, 0x0e, 0x67, 0x10, 0xfc, 0x52, 0x67, 0xfc, 0x42, 0x30, 0xc6, 0x2f, 0xf6, 0xdf,
-	0x5b, 0x81, 0x16, 0xf7, 0xd6, 0x8d, 0x11, 0xdb, 0xe8, 0x26, 0x9f, 0x04, 0x45, 0x4a, 0x5f, 0x68,
-	0x98, 0x62, 0xad, 0x27, 0x0d, 0x31, 0xc1, 0xd6, 0xf2, 0xdc, 0x53, 0x41, 0x63, 0x97, 0xf5, 0x5e,
-	0x56, 0x27, 0x3a, 0x4c, 0x28, 0x4f, 0xcb, 0x9d, 0x93, 0x59, 0xf1, 0xf2, 0xa9, 0x2d, 0x5c, 0x3e,
-	0x24, 0x9e, 0x19, 0x45, 0x73, 0x3f, 0x77, 0xb0, 0xda, 0x02, 0xa3, 0xa3, 0x45, 0xba, 0x18, 0xce,
-	0x92, 0x7b, 0x07, 0x44, 0x80, 0x69, 0xd8, 0x33, 0x21, 0x4e, 0x1b, 0x7c, 0xe8, 0xf9, 0x0b, 0xef,
-	0x59, 0x5d, 0x58, 0xd2, 0x9b, 0x94, 0xae, 0xab, 0x14, 0x0a, 0xf6, 0x23, 0x68, 0xdf, 0x56, 0x53,
-	0x24, 0x8d, 0xa7, 0xee, 0xa1, 0x2a, 0xd7, 0xa4, 0x7b, 0x94, 0x26, 0xc8, 0x4b, 0xbe, 0x0a, 0x88,
-	0xad, 0x5a, 0x40, 0x6c, 0xf6, 0x6f, 0xe8, 0x1d, 0x43, 0xb5, 0x6b, 0x9b, 0x75, 0x4f, 0x4d, 0x4d,
-	0x36, 0x0b, 0x46, 0xf3, 0x88, 0xd2, 0x77, 0xbd, 0xec, 0xde, 0xc8, 0xb5, 0xc6, 0xf7, 0x86, 0x74,
-	0xee, 0x5d, 0x68, 0x73, 0xa2, 0xc9, 0x8a, 0xe4, 0x37, 0xbe, 0x31, 0x16, 0x07, 0x38, 0x33, 0xf1,
-	0xc5, 0x65, 0x9a, 0xaf, 0x5a, 0x4e, 0xf3, 0x65, 0xff, 0x84, 0xdc, 0xab, 0x37, 0xb3, 0x53, 0xfd,
-	0x02, 0x74, 0x64, 0x11, 0xd9, 0x25, 0x58, 0xee, 0x32, 0x86, 0x11, 0x2a, 0xa0, 0xc8, 0xa3, 0xe9,
-	0x1e, 0x19, 0x98, 0x9e, 0xc3, 0xbd, 0x74, 0xa7, 0x70, 0xce, 0xf3, 0xc8, 0x11, 0xfb, 0x84, 0x03,
-	0xa1, 0xd2, 0x5d, 0x4b, 0xcd, 0x6f, 0x73, 0x64, 0x31, 0xbe, 0x8b, 0xcb, 0x90, 0xa5, 0xa6, 0x03,
-	0x29, 0xe0, 0x18, 0xdf, 0xd1, 0xd7, 0xa0, 0x11, 0x31, 0x9d, 0x59, 0xca, 0xaa, 0x9a, 0x34, 0xa8,
-	0xa3, 0x73, 0xda, 0x21, 0xac, 0xa7, 0xd7, 0xd9, 0x43, 0x8d, 0x0e, 0x36, 0x41, 0xee, 0xb0, 0xc2,
-	0x8d, 0x96, 0x5a, 0xee, 0x98, 0xf4, 0x03, 0xef, 0x05, 0xc3, 0xed, 0xcc, 0x98, 0xeb, 0x6a, 0xd9,
-	0x5c, 0xb7, 0xe5, 0x80, 0x26, 0x82, 0x9e, 0x73, 0x51, 0x44, 0x2a, 0x8b, 0x51, 0x44, 0xae, 0xc2,
-	0xda, 0xf4, 0x78, 0x36, 0xc8, 0x65, 0x93, 0x79, 0x9e, 0x1e, 0xcf, 0x1c, 0x23, 0xe7, 0x42, 0x60,
-	0xa5, 0xea, 0x62, 0x60, 0x25, 0xfb, 0x67, 0x2b, 0xb0, 0x96, 0x6d, 0x4f, 0x61, 0x74, 0x8b, 0x5b,
-	0xb0, 0xb2, 0xb8, 0x05, 0x2f, 0x41, 0x33, 0xdd, 0xc3, 0xa2, 0x77, 0xf2, 0x64, 0x03, 0x7f, 0xf1,
-	0xdd, 0x69, 0xff, 0x5e, 0x05, 0x5a, 0x7c, 0x0e, 0x70, 0xd9, 0xaf, 0xc2, 0x1a, 0x45, 0x45, 0x33,
-	0x67, 0x59, 0x1c, 0xfc, 0x10, 0x7e, 0x37, 0x9b, 0xe9, 0x97, 0xa1, 0x3f, 0x9c, 0x9f, 0x0e, 0x16,
-	0x97, 0xa3, 0x3b, 0x9c, 0x9f, 0xe6, 0xf3, 0xcd, 0xe3, 0x7c, 0x85, 0x42, 0x74, 0xcf, 0x63, 0xb3,
-	0xbe, 0xf3, 0x4f, 0x49, 0xfa, 0xc2, 0x85, 0x71, 0xf6, 0xeb, 0xd9, 0x0b, 0x17, 0x77, 0xd3, 0xf3,
-	0xff, 0xef, 0xab, 0xcc, 0xe8, 0x9d, 0x4b, 0xbb, 0xbf, 0x57, 0xc0, 0xe7, 0x2b, 0x25, 0x66, 0x2b,
-	0x85, 0x73, 0x99, 0xc3, 0xf6, 0xd6, 0x37, 0x34, 0x7e, 0xcf, 0x68, 0xd6, 0xb2, 0x18, 0xbc, 0xe9,
-	0xb1, 0x12, 0x14, 0x9f, 0x32, 0x50, 0x9f, 0x11, 0x8a, 0x4c, 0x03, 0x70, 0x35, 0xf0, 0x5b, 0x33,
-	0xfe, 0xea, 0x24, 0x19, 0x7c, 0x1a, 0x8a, 0xfd, 0x7c, 0xd5, 0x69, 0x22, 0xe0, 0x7d, 0x16, 0x68,
-	0x02, 0xd1, 0x7b, 0x1c, 0xd0, 0x81, 0x15, 0x01, 0xcf, 0x96, 0xdc, 0x29, 0xc6, 0x81, 0x72, 0x28,
-	0xd2, 0x15, 0x87, 0x7c, 0xc8, 0xdf, 0x92, 0x8d, 0xe2, 0x2d, 0x69, 0x43, 0x57, 0x4d, 0xfc, 0x44,
-	0x49, 0x90, 0x50, 0x6d, 0x5e, 0xdf, 0x26, 0x20, 0xc5, 0xd7, 0xf0, 0xac, 0x6f, 0xe8, 0x79, 0x93,
-	0x00, 0x35, 0xad, 0x12, 0x95, 0xaf, 0x71, 0xc6, 0x64, 0xce, 0xe4, 0xc0, 0xbd, 0x03, 0x20, 0xdb,
-	0x38, 0x8b, 0xf2, 0xb2, 0xb9, 0xb8, 0x55, 0xd9, 0xaa, 0xd6, 0xd3, 0x7f, 0xed, 0x97, 0xe5, 0x5e,
-	0xdd, 0xf5, 0xd4, 0xc9, 0x19, 0x6b, 0x8a, 0x64, 0x7a, 0xd7, 0xd1, 0x22, 0x04, 0x4d, 0x1f, 0x13,
-	0x6f, 0x9e, 0xf9, 0x28, 0xe3, 0xe7, 0xf9, 0x32, 0x9e, 0x2b, 0x00, 0xa3, 0x49, 0x18, 0xe7, 0x02,
-	0x1b, 0xb6, 0x08, 0xa2, 0x93, 0x8d, 0x48, 0x4b, 0x12, 0xf3, 0x20, 0xd2, 0xa1, 0x95, 0xec, 0x5f,
-	0xae, 0x40, 0x13, 0xfb, 0x71, 0x6e, 0x17, 0x22, 0x79, 0x68, 0xed, 0x50, 0xa5, 0x02, 0x20, 0x7e,
-	0x65, 0x8d, 0x29, 0x12, 0x53, 0xe9, 0xc3, 0x16, 0xd2, 0xa6, 0xc3, 0xde, 0xbb, 0x00, 0x84, 0x8f,
-	0x58, 0x16, 0x5f, 0x2b, 0x8b, 0x01, 0x6d, 0xce, 0x85, 0xd3, 0x8a, 0xf4, 0x5f, 0xfb, 0x87, 0x84,
-	0x8f, 0xd0, 0xac, 0x49, 0xc9, 0xfd, 0x7b, 0x0e, 0x03, 0x91, 0x5d, 0xcf, 0x4c, 0x81, 0xc8, 0x97,
-	0x7d, 0x5d, 0xae, 0x5f, 0xde, 0x6f, 0xe7, 0x5d, 0xeb, 0x59, 0xb9, 0xdf, 0xaa, 0x18, 0xac, 0x0d,
-	0xa1, 0xa3, 0x37, 0xa1, 0x31, 0x75, 0x4f, 0x10, 0x27, 0x2e, 0xa7, 0x9d, 0xd8, 0xb4, 0x7b, 0x75,
-	0xea, 0x9e, 0xdc, 0x76, 0xa7, 0x79, 0x76, 0xac, 0x2c, 0x26, 0xf6, 0x32, 0x76, 0xec, 0xfc, 0x9b,
-	0x83, 0xcc, 0xd5, 0x29, 0x18, 0x08, 0xe9, 0xb4, 0x24, 0xd4, 0x23, 0x85, 0x01, 0xa1, 0x98, 0x83,
-	0x3f, 0xa2, 0x29, 0xbf, 0x30, 0x8e, 0xcf, 0xc2, 0x3a, 0xef, 0x00, 0x5e, 0x99, 0x74, 0xbe, 0x96,
-	0xf7, 0x50, 0x4f, 0x81, 0xd3, 0xf0, 0xdc, 0x53, 0xfc, 0xb0, 0xdf, 0xe2, 0x28, 0xfe, 0x88, 0x3b,
-	0xdc, 0x53, 0xfd, 0xc4, 0x10, 0x8b, 0x59, 0x32, 0x09, 0x41, 0xcd, 0x61, 0xc9, 0x0b, 0xd5, 0x61,
-	0x6f, 0x6b, 0xb2, 0xe2, 0x73, 0x94, 0xf9, 0xc3, 0x15, 0xb8, 0x60, 0x9c, 0xdd, 0x7d, 0x35, 0x39,
-	0x58, 0xe2, 0x63, 0x61, 0x0e, 0x71, 0x25, 0x3f, 0xc4, 0x27, 0xb9, 0x07, 0xad, 0xeb, 0xd0, 0xca,
-	0xc2, 0xe0, 0x9d, 0x6f, 0x0a, 0x3f, 0xd4, 0x51, 0xf1, 0x28, 0xa0, 0xe8, 0x30, 0x8c, 0x82, 0x4c,
-	0xa5, 0x22, 0xd7, 0x00, 0x83, 0xb5, 0x12, 0xff, 0x25, 0xe8, 0xb9, 0xf3, 0x24, 0xcc, 0xbc, 0xb1,
-	0x89, 0x86, 0x6d, 0x3a, 0x5d, 0x84, 0xa6, 0x6e, 0xd8, 0x34, 0x23, 0x98, 0x8d, 0x0b, 0x8b, 0xa1,
-	0x17, 0x20, 0xc8, 0x21, 0x08, 0x1e, 0xde, 0xc7, 0x3e, 0x87, 0x54, 0x64, 0x13, 0x95, 0xd5, 0xc7,
-	0x7e, 0xa0, 0xb5, 0x0c, 0xec, 0x32, 0x9e, 0xfa, 0x83, 0x37, 0xd9, 0x63, 0xdc, 0x3d, 0xca, 0x28,
-	0xf4, 0x59, 0xa4, 0x24, 0xea, 0x0e, 0x4f, 0xd7, 0x5e, 0xa4, 0xec, 0xdf, 0x5c, 0x91, 0x95, 0xd9,
-	0xa3, 0xe8, 0xaa, 0x67, 0x87, 0x5e, 0x3d, 0x63, 0x9e, 0x17, 0x9f, 0xb3, 0xdd, 0x81, 0x76, 0xf8,
-	0x38, 0x50, 0xd1, 0xe0, 0xf3, 0x86, 0x52, 0x02, 0x2a, 0xc6, 0xcc, 0xc7, 0x8b, 0xc0, 0x0a, 0xcb,
-	0xe2, 0x04, 0x77, 0x08, 0xaa, 0xe7, 0x17, 0x69, 0x05, 0xca, 0x65, 0x20, 0x51, 0xe6, 0xc1, 0xb9,
-	0xf4, 0x7e, 0x8a, 0x49, 0x73, 0xdb, 0x01, 0x3b, 0x2c, 0x21, 0x33, 0x52, 0xe0, 0x23, 0x8a, 0xcf,
-	0xdb, 0x17, 0x53, 0x5d, 0x52, 0x9f, 0x66, 0x7a, 0x65, 0x96, 0x52, 0xec, 0xf9, 0xc1, 0x21, 0x21,
-	0xd6, 0xbf, 0x5b, 0x85, 0x9e, 0xb1, 0x41, 0xf1, 0xec, 0x96, 0x19, 0xb2, 0x12, 0xea, 0x64, 0x57,
-	0x75, 0xc3, 0x51, 0x55, 0x7c, 0xd4, 0x73, 0xbe, 0xca, 0x2c, 0x69, 0x12, 0x5f, 0x65, 0x63, 0x15,
-	0x6a, 0xb9, 0x55, 0x78, 0x0d, 0x2c, 0xb1, 0x52, 0x15, 0xc3, 0x52, 0xba, 0x3e, 0xf9, 0xa5, 0xd9,
-	0x35, 0x4e, 0xe1, 0x29, 0xa5, 0x5b, 0xf4, 0x65, 0xe8, 0x4b, 0xee, 0x74, 0xe9, 0x78, 0x6a, 0xba,
-	0x0c, 0x96, 0xab, 0x8c, 0x75, 0x21, 0x66, 0xad, 0xd9, 0xec, 0xf4, 0xcd, 0x4a, 0x1f, 0x91, 0xc7,
-	0xda, 0x46, 0x31, 0xb0, 0x00, 0x77, 0x82, 0x99, 0xab, 0x0b, 0xa3, 0x7c, 0x64, 0x01, 0xea, 0xc7,
-	0x6b, 0x60, 0x65, 0x65, 0xd2, 0xae, 0xb0, 0xb5, 0xfa, 0x5a, 0x9a, 0xa2, 0x7b, 0xf3, 0x26, 0x5c,
-	0x5c, 0x68, 0x61, 0x2e, 0x51, 0xa1, 0x6b, 0x8e, 0x55, 0x68, 0xe0, 0x11, 0x5b, 0xf2, 0xf3, 0x11,
-	0x50, 0xee, 0x91, 0x7e, 0x4c, 0x8c, 0x8e, 0x80, 0x72, 0x8f, 0xec, 0x3f, 0xa8, 0xe4, 0x50, 0x09,
-	0x72, 0xc4, 0xb4, 0xd3, 0x5f, 0x85, 0x75, 0x1d, 0x0d, 0x33, 0xdb, 0x39, 0x8c, 0x58, 0xc4, 0x85,
-	0x24, 0xdb, 0x3a, 0x2f, 0xa7, 0x5e, 0x25, 0x45, 0x8b, 0x1d, 0x06, 0xeb, 0xcd, 0xf8, 0x75, 0x00,
-	0xd6, 0x27, 0x19, 0x04, 0xf0, 0x99, 0x12, 0x94, 0x16, 0x65, 0xd7, 0x3e, 0x4a, 0x12, 0x6e, 0xf1,
-	0x78, 0x46, 0x88, 0xa8, 0xe6, 0x34, 0x09, 0xf0, 0xe0, 0x98, 0xac, 0x9d, 0x8e, 0xfc, 0xc9, 0x44,
-	0x45, 0x94, 0x5a, 0x67, 0x81, 0x08, 0x43, 0x1e, 0x1c, 0xcf, 0xec, 0xdf, 0xae, 0xcb, 0x49, 0xce,
-	0xc6, 0x88, 0x7d, 0x36, 0xc9, 0x23, 0xc3, 0x99, 0xda, 0xa0, 0x83, 0x38, 0x08, 0x15, 0x32, 0xa6,
-	0x9c, 0x97, 0xa6, 0xc2, 0xb0, 0x46, 0xa2, 0x4a, 0x69, 0x1e, 0x70, 0x11, 0x73, 0xf5, 0x99, 0xd1,
-	0xa0, 0xd6, 0x8c, 0x2a, 0xd9, 0xb0, 0xe2, 0x2a, 0xac, 0xb1, 0xda, 0x18, 0x29, 0x88, 0x9c, 0x37,
-	0x1f, 0xa9, 0x93, 0x89, 0xb0, 0x60, 0x8f, 0x3c, 0x1d, 0xfc, 0x4b, 0x07, 0x31, 0x35, 0xbc, 0x35,
-	0x29, 0xf8, 0x97, 0x0c, 0x89, 0xf2, 0x7e, 0x15, 0xac, 0x24, 0x9c, 0x47, 0xb8, 0xdf, 0x82, 0x04,
-	0x71, 0xda, 0xcc, 0x8d, 0xf4, 0x71, 0x5f, 0xcf, 0x52, 0xf6, 0x38, 0x81, 0x23, 0xb3, 0xa4, 0xd9,
-	0x4d, 0x47, 0xce, 0x7e, 0x06, 0xe7, 0x9a, 0xc9, 0x43, 0x20, 0xcd, 0x9a, 0x39, 0x74, 0x76, 0x33,
-	0xe8, 0x9d, 0xc0, 0xc3, 0x0e, 0xc4, 0x6a, 0xea, 0x1f, 0xf8, 0x81, 0x3b, 0x89, 0xd3, 0x0e, 0xf0,
-	0x4e, 0x5e, 0xcf, 0x52, 0x8c, 0x0e, 0x18, 0xd9, 0xb9, 0x03, 0xbc, 0x8d, 0xfb, 0x19, 0x3c, 0xed,
-	0x80, 0x91, 0x15, 0x3b, 0xd0, 0x16, 0x1d, 0x4c, 0x0a, 0xc5, 0x0e, 0xbc, 0x84, 0x48, 0x31, 0xd7,
-	0x78, 0x47, 0xa3, 0x27, 0xb3, 0xe1, 0x17, 0xa0, 0x93, 0x6b, 0xb4, 0xab, 0x85, 0xaa, 0x59, 0x83,
-	0x44, 0x56, 0xa5, 0x8d, 0xf5, 0x34, 0x59, 0xa5, 0x1b, 0xba, 0x04, 0xcd, 0x78, 0x1c, 0x3e, 0xa6,
-	0x44, 0x0e, 0xe8, 0xd7, 0xc0, 0xef, 0x3b, 0x6c, 0x5b, 0xe7, 0xc7, 0xac, 0x5f, 0x67, 0x1f, 0x8c,
-	0x55, 0x3f, 0x26, 0xe5, 0x7a, 0xd1, 0xe0, 0x66, 0x7d, 0xd1, 0xe0, 0xc6, 0x7c, 0x23, 0xcc, 0xca,
-	0xbd, 0x11, 0x66, 0xff, 0xce, 0x0a, 0xf4, 0x88, 0x0b, 0x7b, 0xe8, 0x0e, 0x25, 0xec, 0xf8, 0x0b,
-	0xd0, 0xd1, 0xbb, 0x97, 0x9c, 0xc6, 0x85, 0x2d, 0x96, 0x48, 0xb1, 0xe4, 0x37, 0xae, 0x6f, 0xb8,
-	0xb7, 0xb2, 0x8b, 0x89, 0x2f, 0xaa, 0xb7, 0x98, 0x53, 0x97, 0x44, 0x42, 0x51, 0xfc, 0x00, 0x1f,
-	0x33, 0x1e, 0x6f, 0x11, 0x66, 0xd2, 0xb2, 0xb4, 0xb7, 0x44, 0x1c, 0x27, 0x2a, 0x7e, 0x86, 0xb1,
-	0x3c, 0x4e, 0x37, 0xb0, 0xad, 0x03, 0xe8, 0xeb, 0x06, 0xb6, 0x8d, 0x06, 0xb6, 0xcd, 0x28, 0xfa,
-	0xdc, 0xc0, 0x76, 0xae, 0x81, 0x6d, 0x69, 0xa0, 0x61, 0x34, 0xb0, 0x9d, 0x36, 0x80, 0xd8, 0x8b,
-	0x49, 0x21, 0x76, 0xf2, 0x41, 0xec, 0x95, 0xf2, 0x8d, 0x98, 0x68, 0x18, 0x79, 0x23, 0x19, 0xa0,
-	0x4d, 0xbc, 0x79, 0x9a, 0xc1, 0x08, 0x73, 0x61, 0xdf, 0x15, 0x6c, 0x47, 0x33, 0xb9, 0x87, 0x08,
-	0x0c, 0x67, 0xd3, 0x7a, 0x23, 0x67, 0x70, 0x7c, 0xb9, 0x70, 0x15, 0x9b, 0x93, 0x2e, 0x66, 0xc7,
-	0x23, 0x2d, 0x11, 0xe1, 0xe8, 0x9e, 0xec, 0x9d, 0x7e, 0xb6, 0xd8, 0x93, 0x42, 0x1b, 0x99, 0x4c,
-	0x38, 0x3d, 0x82, 0x55, 0x88, 0xa4, 0x93, 0x73, 0xc9, 0x3f, 0xcc, 0x5d, 0xa2, 0x88, 0xe8, 0x16,
-	0x09, 0x3c, 0xed, 0xf4, 0xbf, 0x62, 0x38, 0xfd, 0x9b, 0xfd, 0xa8, 0x2e, 0x68, 0xc2, 0x16, 0x43,
-	0xf6, 0xd8, 0x3f, 0x5f, 0xc9, 0x21, 0x48, 0x27, 0x17, 0x25, 0xa0, 0x52, 0xe6, 0xa6, 0x6f, 0xc6,
-	0x13, 0x38, 0xa3, 0x39, 0xad, 0x3f, 0xa9, 0x7d, 0x4e, 0xfd, 0xc9, 0x5f, 0x4e, 0xb9, 0x0c, 0xea,
-	0xd0, 0xce, 0xde, 0x0f, 0x54, 0x85, 0x95, 0xe9, 0xa9, 0x24, 0x40, 0x1e, 0xe9, 0xa9, 0xd2, 0xb1,
-	0xd5, 0x8c, 0x10, 0x04, 0x7f, 0xbb, 0x02, 0x9d, 0xef, 0x3c, 0x60, 0x59, 0xa8, 0x16, 0xf9, 0xb1,
-	0xb8, 0x74, 0x30, 0x0a, 0x27, 0x61, 0x24, 0xce, 0x89, 0x6d, 0x86, 0xed, 0x20, 0xc8, 0xc8, 0x12,
-	0xcf, 0x94, 0xd2, 0x66, 0x13, 0x92, 0x65, 0x1f, 0x41, 0xb9, 0x5a, 0x32, 0x33, 0xe4, 0xb4, 0x16,
-	0xec, 0xe4, 0x97, 0xa1, 0x2f, 0x59, 0xfc, 0x20, 0x51, 0xd1, 0x71, 0x1a, 0x45, 0xb0, 0x17, 0x48,
-	0x6f, 0x18, 0x6a, 0x7f, 0x07, 0xd6, 0x1d, 0x35, 0x0a, 0x83, 0x40, 0x8d, 0x92, 0x47, 0x71, 0xa6,
-	0x3a, 0x90, 0xf0, 0x9d, 0x15, 0x33, 0x7c, 0xe7, 0x59, 0x21, 0x3f, 0xed, 0x4f, 0xa1, 0x97, 0xbe,
-	0xb9, 0xb6, 0xe3, 0x46, 0x5e, 0x4c, 0xcf, 0xe7, 0xf3, 0x63, 0xe1, 0x9a, 0xdc, 0xe5, 0xb7, 0xc2,
-	0xad, 0xf7, 0xcc, 0xe7, 0x74, 0x0c, 0x97, 0x84, 0xb3, 0xa2, 0x94, 0xe9, 0x97, 0x76, 0xd8, 0x50,
-	0xb8, 0xaa, 0xe3, 0xae, 0x8b, 0x03, 0x5c, 0xb9, 0x9b, 0x56, 0x99, 0xfb, 0xdc, 0x4a, 0xa9, 0xfb,
-	0x5c, 0xce, 0x27, 0xab, 0xba, 0xd4, 0x5d, 0xb1, 0x56, 0xee, 0xae, 0x58, 0x2f, 0x77, 0x57, 0x5c,
-	0x5d, 0xea, 0xae, 0xd8, 0x38, 0xdb, 0x5d, 0xb1, 0xb9, 0xe0, 0xae, 0x58, 0x20, 0x75, 0x5b, 0x0b,
-	0xa4, 0x6e, 0x41, 0x31, 0x0e, 0xfc, 0xcc, 0xbd, 0xa1, 0x18, 0x3f, 0xdf, 0xd9, 0x90, 0xa4, 0x1d,
-	0x32, 0x4d, 0x69, 0xdc, 0xf0, 0x48, 0x66, 0xe8, 0xe4, 0x89, 0x3c, 0x0c, 0x17, 0xb5, 0xef, 0xfd,
-	0x32, 0xed, 0xfb, 0x10, 0x7a, 0x1c, 0x7a, 0x7b, 0xdf, 0x3d, 0x56, 0xa9, 0xae, 0xaa, 0xe4, 0x25,
-	0xf6, 0xfc, 0xe3, 0xf1, 0x2b, 0xf9, 0xc7, 0xe3, 0xe9, 0x25, 0x14, 0xef, 0xd8, 0xf0, 0xc2, 0xee,
-	0x3a, 0x4d, 0xd7, 0x3b, 0xe6, 0xed, 0xf8, 0xb3, 0x15, 0x00, 0x6e, 0x44, 0xbf, 0xb1, 0xc1, 0x4c,
-	0x53, 0xb6, 0x45, 0x9a, 0x04, 0x10, 0xbe, 0x84, 0x13, 0x8b, 0x7e, 0x79, 0x5d, 0x02, 0x7f, 0xa0,
-	0x37, 0xc2, 0x0d, 0xe8, 0x52, 0x2f, 0x0b, 0x51, 0x6f, 0xca, 0xbd, 0x0e, 0xda, 0x38, 0x04, 0x09,
-	0x72, 0x63, 0xff, 0x74, 0x05, 0x7a, 0x7b, 0x1c, 0x3b, 0x6e, 0x2f, 0x8c, 0x17, 0x7b, 0xb4, 0x52,
-	0xe8, 0x51, 0x36, 0x1f, 0x55, 0x73, 0x3e, 0x16, 0x9e, 0x6e, 0xe7, 0x33, 0x9d, 0x7f, 0xba, 0x3d,
-	0x3f, 0x69, 0xf5, 0xc2, 0x8b, 0xfb, 0x3f, 0x57, 0x81, 0xb6, 0xf4, 0x84, 0xba, 0xf1, 0x2c, 0xb4,
-	0x29, 0xd6, 0x5d, 0x2e, 0x88, 0x6e, 0x0b, 0x41, 0x3c, 0xc9, 0x37, 0x80, 0x3e, 0x96, 0x87, 0x59,
-	0xc8, 0x0f, 0xcb, 0x69, 0x62, 0x6e, 0xed, 0xef, 0x9d, 0x46, 0xd2, 0x33, 0x3d, 0xe5, 0x3b, 0x12,
-	0x44, 0x8f, 0xd7, 0xe9, 0x11, 0xbd, 0xc9, 0x9f, 0x7b, 0x13, 0x6e, 0xf9, 0x5b, 0x65, 0xe5, 0x96,
-	0x18, 0x84, 0x79, 0x53, 0x72, 0x99, 0xfe, 0xdb, 0x7f, 0xb1, 0x06, 0x0d, 0x59, 0x89, 0xcf, 0xf7,
-	0xb4, 0x63, 0xda, 0x44, 0xd5, 0x6c, 0xe2, 0x89, 0x26, 0xfe, 0x46, 0xee, 0xb5, 0xb6, 0xb2, 0x17,
-	0x30, 0xcd, 0x91, 0x1a, 0x8f, 0xb5, 0x99, 0x31, 0x16, 0x57, 0x73, 0x31, 0x16, 0x53, 0x7b, 0x2e,
-	0x89, 0xb6, 0x45, 0x1f, 0xd6, 0x5d, 0x89, 0x74, 0x68, 0xbc, 0x91, 0xd8, 0x2c, 0x91, 0x11, 0x63,
-	0x6b, 0xf9, 0x07, 0x30, 0xbb, 0x58, 0x2c, 0x7d, 0xaf, 0x11, 0x8f, 0x34, 0xbf, 0x00, 0xaf, 0x1b,
-	0x17, 0x23, 0x6e, 0x02, 0xde, 0xe3, 0x1e, 0xfc, 0x20, 0x1f, 0x7a, 0x2f, 0x89, 0x03, 0x79, 0x8d,
-	0xdd, 0x75, 0xf3, 0x2f, 0xeb, 0x97, 0x3d, 0x08, 0xff, 0xf6, 0x17, 0x78, 0x10, 0xfe, 0x2e, 0x74,
-	0x19, 0x05, 0x68, 0x01, 0xcc, 0x12, 0x34, 0xf3, 0x2c, 0xb4, 0x91, 0xf5, 0x1c, 0xe5, 0xb8, 0xcf,
-	0x96, 0x0a, 0x3c, 0x31, 0x91, 0x38, 0xa2, 0x23, 0xf3, 0xc0, 0x0d, 0xe6, 0xee, 0x64, 0xff, 0x61,
-	0xe1, 0x80, 0x55, 0xce, 0xc2, 0x4a, 0x2b, 0x79, 0xac, 0xb4, 0x40, 0xc4, 0x57, 0x17, 0x88, 0x78,
-	0xfb, 0x37, 0x25, 0xf4, 0xfe, 0x9e, 0x32, 0xe2, 0x1d, 0x9a, 0xc1, 0xf7, 0x39, 0x8e, 0x55, 0xea,
-	0x40, 0x65, 0x98, 0xd7, 0xad, 0x14, 0xcd, 0xeb, 0x8a, 0x9a, 0xaf, 0xea, 0xa2, 0xe6, 0xeb, 0x55,
-	0x58, 0x37, 0xad, 0x34, 0x07, 0x07, 0x13, 0xf7, 0x50, 0xee, 0xb9, 0x7e, 0x9c, 0x99, 0x69, 0xde,
-	0x9d, 0xb8, 0x87, 0x45, 0xfb, 0xbb, 0xfa, 0x82, 0xfd, 0xdd, 0xef, 0x55, 0x39, 0x4a, 0x1a, 0xf6,
-	0xfd, 0x19, 0x7e, 0xe4, 0xdc, 0x98, 0x6f, 0x7e, 0xd6, 0x68, 0x8f, 0xa6, 0xfc, 0x26, 0x6f, 0x85,
-	0x29, 0xcd, 0xe9, 0x13, 0xbe, 0xed, 0x88, 0xbb, 0x84, 0x17, 0x41, 0xcc, 0xb6, 0xe5, 0xed, 0x88,
-	0xe5, 0x6f, 0xcd, 0xe7, 0x56, 0xdf, 0x91, 0x77, 0x2f, 0xa8, 0xb0, 0xe9, 0x3b, 0x56, 0x7b, 0x02,
-	0xdf, 0x31, 0xeb, 0x1d, 0x13, 0x0f, 0x96, 0x3d, 0x54, 0x67, 0x20, 0x55, 0x03, 0x09, 0x3e, 0x80,
-	0x4d, 0x63, 0x9c, 0x8b, 0xee, 0x1d, 0x0b, 0x75, 0xe8, 0x5d, 0xe6, 0x5c, 0x48, 0x47, 0x6b, 0x78,
-	0x78, 0xe8, 0xb0, 0xf6, 0x33, 0x95, 0x88, 0x6f, 0xc7, 0x62, 0x58, 0xfb, 0x3d, 0x95, 0x70, 0x58,
-	0x7b, 0x5c, 0x85, 0xf7, 0x18, 0x09, 0x2f, 0x60, 0x8a, 0x05, 0xbc, 0x94, 0x3d, 0xa8, 0x8a, 0xf8,
-	0x39, 0x7b, 0xd3, 0xf5, 0x33, 0xd8, 0xd8, 0x53, 0xc9, 0x4d, 0xef, 0xf8, 0xe6, 0x68, 0xec, 0xab,
-	0x63, 0x85, 0xcc, 0x7a, 0xfa, 0x0e, 0x59, 0xba, 0xcf, 0x65, 0x79, 0xd3, 0x7d, 0xfe, 0x0a, 0xac,
-	0xb9, 0x59, 0x7e, 0xf3, 0x58, 0xf5, 0x0d, 0xb8, 0xf6, 0xf4, 0x2f, 0x84, 0x03, 0xff, 0x61, 0xe8,
-	0x19, 0xcf, 0x24, 0xfa, 0x61, 0x50, 0xae, 0xb7, 0x38, 0xeb, 0xe9, 0xc9, 0x4b, 0x6c, 0x00, 0x6e,
-	0xa8, 0xc2, 0x1b, 0x93, 0x90, 0x85, 0x8b, 0xff, 0xaa, 0x02, 0xd6, 0x6e, 0x70, 0xec, 0x27, 0x14,
-	0x35, 0xff, 0xfc, 0x48, 0xda, 0x4f, 0xe7, 0x22, 0x69, 0xf3, 0x59, 0xd7, 0xa1, 0xb2, 0x5f, 0xd2,
-	0xb1, 0xfa, 0xd2, 0x00, 0x6e, 0x55, 0xf3, 0xdd, 0x2b, 0x09, 0xe1, 0xb6, 0x10, 0x29, 0xb5, 0xb6,
-	0x18, 0x29, 0xf5, 0x35, 0x0a, 0x74, 0x37, 0x9b, 0xa8, 0x84, 0x9e, 0x04, 0xc9, 0x79, 0xc7, 0xae,
-	0xe9, 0x94, 0x07, 0xee, 0x09, 0xfb, 0x19, 0x9e, 0xc2, 0x7a, 0x36, 0x04, 0xb1, 0x63, 0x27, 0x1d,
-	0x36, 0x1b, 0xee, 0x64, 0x64, 0x0c, 0xf3, 0x17, 0x3d, 0x86, 0xa7, 0x74, 0xcc, 0x0b, 0xd0, 0x99,
-	0x45, 0xe1, 0x48, 0xc5, 0xb1, 0xb9, 0x32, 0x6d, 0x81, 0x69, 0x57, 0xa5, 0x48, 0xc5, 0x14, 0x78,
-	0x45, 0x34, 0x3f, 0x91, 0x8a, 0x3f, 0x72, 0x27, 0xf6, 0x2f, 0x56, 0xe0, 0xa9, 0xac, 0x6d, 0x36,
-	0x02, 0xfa, 0xc8, 0x9d, 0x2c, 0x8f, 0xd6, 0x56, 0x72, 0x61, 0x2f, 0x46, 0x8c, 0xa8, 0x96, 0x45,
-	0x8c, 0x30, 0xfa, 0x50, 0xd3, 0x76, 0xc0, 0xd8, 0x87, 0x8c, 0x39, 0xaf, 0x1b, 0x72, 0x5d, 0xfb,
-	0xf7, 0xab, 0xac, 0x3e, 0xc9, 0x7a, 0x47, 0x37, 0xfd, 0x44, 0x1b, 0x1d, 0x69, 0x62, 0x62, 0xc2,
-	0x56, 0x47, 0xd6, 0xdb, 0xb0, 0x49, 0xe1, 0x02, 0xfd, 0x34, 0x3f, 0x66, 0x1b, 0xa6, 0x51, 0x8c,
-	0x2f, 0x62, 0x6a, 0x56, 0xd9, 0x07, 0x94, 0x86, 0x1b, 0x6f, 0xea, 0xc6, 0x89, 0xd0, 0x6d, 0xa2,
-	0x32, 0x64, 0x88, 0x90, 0x92, 0x92, 0x5c, 0x70, 0x02, 0xeb, 0x32, 0x58, 0x0b, 0x33, 0x5f, 0x85,
-	0x75, 0xee, 0x99, 0x2c, 0x59, 0x8a, 0x56, 0x6a, 0x4e, 0x9f, 0x12, 0x78, 0x66, 0xc5, 0x2b, 0xce,
-	0xb0, 0x90, 0x5f, 0x2d, 0x79, 0x60, 0x6c, 0x71, 0x3b, 0x1b, 0xb1, 0xbf, 0xef, 0x43, 0x5f, 0xda,
-	0x48, 0x5f, 0xc7, 0x61, 0x97, 0x88, 0x17, 0x97, 0xd4, 0x91, 0x5b, 0x53, 0xa7, 0xcb, 0x85, 0xf5,
-	0x23, 0x39, 0xef, 0x1a, 0x9e, 0x15, 0x65, 0x34, 0xc7, 0xc2, 0xb6, 0x4c, 0xdd, 0x2b, 0xe8, 0x05,
-	0x1c, 0x1a, 0x72, 0xa4, 0x28, 0x00, 0x90, 0xcc, 0x53, 0xea, 0xfa, 0x5b, 0x73, 0x36, 0x28, 0xdd,
-	0xa1, 0xe4, 0x07, 0x94, 0x2a, 0xd7, 0x78, 0xf3, 0x76, 0xe4, 0x3e, 0xd6, 0x58, 0x87, 0x5f, 0xbc,
-	0x33, 0xdc, 0x76, 0xe9, 0xc5, 0x3b, 0x31, 0x16, 0x4c, 0x9f, 0xc3, 0xd3, 0x87, 0xb5, 0xa5, 0xdf,
-	0xc3, 0x8b, 0xed, 0xff, 0x28, 0xde, 0xb9, 0x58, 0x99, 0x75, 0x1d, 0xda, 0x94, 0x37, 0x26, 0x77,
-	0xc2, 0x72, 0xfb, 0x17, 0x69, 0xd4, 0xa1, 0x5a, 0xd9, 0xef, 0x90, 0xc2, 0x86, 0xe2, 0x49, 0xe6,
-	0x86, 0x68, 0x17, 0x67, 0x86, 0xfd, 0x6b, 0x98, 0x84, 0xc5, 0x28, 0x44, 0x2e, 0x6e, 0xb2, 0xaf,
-	0x80, 0x85, 0xf8, 0xb7, 0x90, 0x5b, 0x7c, 0x62, 0x66, 0x2a, 0xc9, 0x65, 0xfe, 0x3a, 0x3c, 0x9d,
-	0x7b, 0x1f, 0x3c, 0x5f, 0x88, 0xcf, 0xc0, 0xa6, 0xf1, 0x18, 0xb8, 0x51, 0xd6, 0xfe, 0x3b, 0x15,
-	0x68, 0x39, 0xf3, 0x40, 0x7d, 0x27, 0x0c, 0xbd, 0xf8, 0x0b, 0x05, 0xb1, 0x78, 0x0e, 0xda, 0x63,
-	0x3f, 0x4e, 0xc2, 0xe8, 0x74, 0x30, 0x9c, 0x9f, 0x6a, 0xe3, 0x39, 0x01, 0xdd, 0x9a, 0x9f, 0x2e,
-	0x78, 0x36, 0x1a, 0x91, 0x0a, 0xb4, 0x44, 0xba, 0x68, 0xb2, 0x5e, 0x65, 0x89, 0xb4, 0x61, 0xa9,
-	0xfe, 0x4b, 0xa4, 0x34, 0x0f, 0xd8, 0x45, 0xfa, 0x29, 0x68, 0x90, 0x13, 0xb6, 0x21, 0x21, 0x18,
-	0x87, 0x33, 0xa6, 0xc8, 0xe2, 0xf9, 0x70, 0xa0, 0x13, 0xb5, 0xc4, 0x6b, 0x3e, 0xdc, 0xe7, 0xf4,
-	0x77, 0x74, 0xb8, 0x03, 0xc3, 0x46, 0xb1, 0x68, 0x8c, 0x2f, 0x73, 0x21, 0x61, 0x10, 0x52, 0xf1,
-	0x8b, 0xf1, 0x16, 0x86, 0x8e, 0x50, 0x60, 0x3c, 0x83, 0x61, 0xff, 0xb7, 0x0a, 0xb4, 0xb1, 0xec,
-	0x9d, 0x93, 0xd9, 0x04, 0x29, 0xac, 0x4d, 0x7a, 0x70, 0xe3, 0xfe, 0xf1, 0x24, 0x7d, 0xfb, 0x98,
-	0xbe, 0xf0, 0x5a, 0xd0, 0xcf, 0xae, 0xe9, 0x6b, 0x41, 0x7f, 0x5b, 0xcf, 0x02, 0x4c, 0xfd, 0x18,
-	0x59, 0xdd, 0x3b, 0x27, 0xfa, 0xa1, 0x3c, 0x03, 0x62, 0x6d, 0x41, 0x63, 0xc8, 0x5e, 0x2b, 0x62,
-	0xea, 0xac, 0x3f, 0x2d, 0x1b, 0x3a, 0x07, 0xf3, 0xc9, 0xe4, 0x81, 0x7b, 0x72, 0x33, 0x25, 0xb1,
-	0x9a, 0x4e, 0x0e, 0x66, 0xbd, 0xa1, 0xb1, 0xdf, 0xb9, 0x0e, 0xa2, 0xa2, 0xf0, 0x7a, 0x1e, 0xda,
-	0xee, 0x24, 0x52, 0xae, 0x77, 0x8a, 0x03, 0xd3, 0x52, 0x52, 0x03, 0x64, 0xff, 0x97, 0x15, 0xe8,
-	0xe0, 0x9f, 0x54, 0x7f, 0x43, 0xb6, 0x81, 0xb1, 0x4a, 0x52, 0x3e, 0xbe, 0xa2, 0x6d, 0x03, 0x63,
-	0x95, 0x08, 0x1b, 0x8f, 0x38, 0x6c, 0x1a, 0x06, 0xc9, 0x58, 0x42, 0xdf, 0x87, 0x9e, 0x7f, 0x70,
-	0x2a, 0x4e, 0x61, 0x7d, 0x4a, 0xa0, 0xb0, 0xf7, 0x04, 0xb6, 0xde, 0x84, 0x8b, 0xf3, 0x18, 0x6f,
-	0xc9, 0x48, 0x79, 0x7e, 0x92, 0x47, 0xfc, 0x75, 0xc7, 0xc2, 0xb4, 0x1d, 0x4a, 0x4a, 0xb1, 0xff,
-	0xeb, 0x70, 0x81, 0x2e, 0xc2, 0x42, 0x01, 0x3e, 0x05, 0xeb, 0x53, 0xf7, 0xa4, 0x90, 0x7f, 0x1b,
-	0x36, 0x0a, 0x79, 0xe5, 0xe1, 0x47, 0x9e, 0xc3, 0x0b, 0xa3, 0x5c, 0x76, 0x7e, 0x02, 0xf2, 0x3e,
-	0xf4, 0x66, 0x91, 0x7f, 0xec, 0x4f, 0xd4, 0xa1, 0x04, 0xdb, 0x5c, 0x2d, 0x71, 0x28, 0xa5, 0xed,
-	0xca, 0x31, 0x4b, 0xf6, 0x74, 0x6e, 0xc6, 0x8d, 0x33, 0xf3, 0x13, 0xd9, 0x29, 0x3f, 0x1e, 0xcc,
-	0x5c, 0x7a, 0x79, 0x57, 0x8d, 0x8e, 0x44, 0xd1, 0xdc, 0xf6, 0xe3, 0x3d, 0x37, 0x8e, 0x77, 0x10,
-	0x64, 0xff, 0x38, 0x6c, 0x2d, 0xab, 0x8e, 0xa4, 0xbc, 0x0c, 0x37, 0x38, 0x71, 0x81, 0xb0, 0x90,
-	0xc8, 0x3c, 0x5e, 0xa9, 0xba, 0x33, 0x75, 0x21, 0x29, 0x5e, 0xeb, 0xd5, 0x85, 0x6b, 0xdd, 0xfe,
-	0xc7, 0x82, 0x02, 0xb1, 0x0f, 0xd6, 0xb6, 0x84, 0x40, 0x58, 0xea, 0x30, 0xa9, 0xcf, 0x29, 0x47,
-	0x46, 0xd0, 0xa1, 0x20, 0xa2, 0x79, 0xa0, 0x06, 0x8a, 0x8f, 0x87, 0xd8, 0x53, 0x6d, 0x2d, 0x14,
-	0x93, 0xe3, 0xe3, 0xb4, 0x23, 0xe3, 0x2c, 0x5d, 0x87, 0x16, 0x15, 0xa6, 0x80, 0x9c, 0xa5, 0x0f,
-	0x4a, 0x18, 0x7b, 0xd0, 0x69, 0x46, 0xf2, 0x65, 0xbf, 0x8f, 0xbb, 0x33, 0x1e, 0x3b, 0x6e, 0x70,
-	0xf4, 0x30, 0x9c, 0x5d, 0x5b, 0x16, 0xaa, 0x56, 0x5e, 0x76, 0x26, 0x21, 0x80, 0x27, 0x21, 0x6d,
-	0x17, 0xa2, 0xc2, 0xfe, 0xd3, 0x0a, 0xac, 0x51, 0x4c, 0x72, 0xc3, 0x7f, 0x9f, 0x82, 0x3a, 0x90,
-	0x6f, 0x8f, 0x71, 0xab, 0x90, 0x0b, 0x0f, 0xde, 0x2a, 0x4f, 0x41, 0xc3, 0x0f, 0x06, 0xf8, 0xa9,
-	0xa3, 0x3d, 0xf9, 0x01, 0xd6, 0x90, 0x9a, 0x70, 0x51, 0x92, 0xbc, 0xbe, 0x4a, 0xa8, 0x04, 0x13,
-	0x99, 0x46, 0x39, 0xcc, 0x44, 0xe5, 0x89, 0x8e, 0x3e, 0x47, 0x4a, 0x3b, 0x23, 0xc2, 0x26, 0x01,
-	0xee, 0x04, 0x99, 0xa5, 0x90, 0x19, 0xdc, 0x9e, 0xfa, 0xc5, 0x44, 0xdf, 0xdf, 0x5a, 0x81, 0xde,
-	0x6d, 0x37, 0xdc, 0x91, 0x68, 0x55, 0xff, 0x67, 0x6a, 0xc5, 0x33, 0x6d, 0xb7, 0x61, 0x81, 0xc6,
-	0x9a, 0x9b, 0xbe, 0xa1, 0x17, 0x2f, 0xe4, 0x3d, 0x5f, 0x33, 0x5e, 0xd8, 0xfc, 0xfc, 0x38, 0x99,
-	0xb1, 0xf9, 0xed, 0x9f, 0xae, 0xc0, 0x96, 0x31, 0x3b, 0x7b, 0x61, 0x6c, 0x44, 0x0f, 0x5d, 0x6a,
-	0x78, 0xf1, 0xaa, 0xf9, 0x36, 0x65, 0xde, 0x4c, 0x2c, 0x7b, 0x76, 0x32, 0xd3, 0x53, 0x9b, 0x81,
-	0xb9, 0xb3, 0x13, 0xd6, 0xcd, 0x22, 0x73, 0x63, 0x4f, 0x7e, 0xb5, 0x0a, 0x1b, 0xf9, 0x9e, 0x9c,
-	0x6b, 0xff, 0x71, 0x15, 0xd6, 0x58, 0x16, 0xb8, 0xd0, 0x8b, 0x1e, 0xc1, 0xb3, 0x4e, 0xbc, 0x08,
-	0x0c, 0x29, 0xf6, 0xa1, 0x43, 0x50, 0x4d, 0x5d, 0x5e, 0x83, 0x4d, 0xce, 0x85, 0xc7, 0x4a, 0x8d,
-	0x92, 0x22, 0x31, 0x7a, 0x81, 0x52, 0xf7, 0x38, 0x51, 0x17, 0x2a, 0xd8, 0x95, 0xd4, 0xbf, 0xa8,
-	0x5d, 0x09, 0x57, 0x42, 0xa1, 0x37, 0x33, 0x81, 0x16, 0xf7, 0x8f, 0x02, 0x70, 0xee, 0x7a, 0x25,
-	0xd6, 0x27, 0x8d, 0x12, 0xeb, 0x13, 0x53, 0x33, 0xd4, 0x3c, 0xcb, 0x0f, 0xa0, 0x55, 0xb4, 0x70,
-	0x2c, 0x5a, 0x7a, 0xc1, 0xa2, 0x8d, 0xf0, 0xaf, 0x55, 0xe0, 0x42, 0x89, 0xdf, 0x33, 0x39, 0x28,
-	0x71, 0xc0, 0x25, 0xbd, 0x48, 0x0d, 0x8a, 0x88, 0xc4, 0x0f, 0x24, 0xeb, 0x58, 0x4c, 0x42, 0x39,
-	0x71, 0x4a, 0x5a, 0x26, 0x23, 0xed, 0x28, 0xa3, 0x10, 0x55, 0x7a, 0xdf, 0x66, 0x0f, 0x4b, 0xe9,
-	0x7d, 0x2b, 0x34, 0xeb, 0xd8, 0x8d, 0x4d, 0x91, 0x4a, 0xd3, 0x69, 0x8d, 0x5d, 0xd9, 0xbd, 0xf6,
-	0x2f, 0x54, 0xa0, 0x63, 0x7a, 0x2b, 0xe7, 0x38, 0x5b, 0xd1, 0x12, 0x0a, 0x67, 0x7b, 0x76, 0x60,
-	0xb9, 0x45, 0x3b, 0xa2, 0xeb, 0x12, 0x13, 0xea, 0x09, 0x8d, 0xb3, 0x7c, 0x71, 0x02, 0xb7, 0xff,
-	0x5a, 0x8d, 0xc3, 0xe7, 0x1a, 0x7b, 0xfc, 0xc9, 0x1f, 0x0d, 0x79, 0x1d, 0x32, 0x23, 0x96, 0x41,
-	0xf6, 0x36, 0xc8, 0x8a, 0x3c, 0x39, 0xab, 0x93, 0x6e, 0xe9, 0x47, 0x42, 0xce, 0x7c, 0x41, 0x84,
-	0xf4, 0x3b, 0xb1, 0x2a, 0x71, 0xae, 0xec, 0x21, 0xdc, 0xf0, 0xae, 0xbc, 0x0c, 0x2d, 0x9c, 0x35,
-	0x93, 0x6b, 0xc4, 0x69, 0x64, 0xb5, 0xb9, 0x36, 0x3a, 0x76, 0x93, 0xc4, 0x1d, 0x1d, 0x11, 0x16,
-	0x5a, 0xcd, 0x8c, 0x8e, 0x6f, 0x12, 0x54, 0x2c, 0x61, 0x12, 0x7f, 0x16, 0x0f, 0x3c, 0x15, 0x8f,
-	0xc4, 0xaa, 0xb6, 0x89, 0x80, 0xdb, 0x2a, 0x1e, 0x9d, 0xe1, 0x71, 0x0f, 0x3f, 0x38, 0x8f, 0xfb,
-	0xf6, 0x13, 0x79, 0xdc, 0x77, 0x9e, 0xcc, 0xe3, 0xbe, 0x7b, 0x8e, 0xc7, 0x7d, 0xef, 0x2c, 0x8f,
-	0xfb, 0x7e, 0xde, 0xe3, 0xde, 0x76, 0xd8, 0xbb, 0x60, 0x67, 0xac, 0xdc, 0x84, 0x42, 0xf5, 0xe5,
-	0x42, 0xfe, 0xb1, 0x0d, 0x62, 0x16, 0xf2, 0x8f, 0x43, 0xc1, 0x72, 0xa0, 0x97, 0x51, 0x34, 0xba,
-	0xb6, 0xad, 0xdf, 0x38, 0x40, 0xe8, 0x83, 0xf8, 0x70, 0x07, 0x61, 0xf6, 0x2e, 0xd7, 0x89, 0x8b,
-	0xe4, 0xc7, 0x89, 0x3f, 0xb2, 0x6e, 0x00, 0x8c, 0xb0, 0x01, 0x33, 0x2e, 0xfa, 0x59, 0x4f, 0xd7,
-	0x52, 0x66, 0xb2, 0x84, 0x7d, 0x08, 0xcd, 0xef, 0x2a, 0x35, 0xdb, 0x77, 0x8f, 0x48, 0x13, 0x76,
-	0xa4, 0xd4, 0x6c, 0x10, 0xbb, 0x47, 0x86, 0xe1, 0x0e, 0x1c, 0x49, 0x3a, 0x5b, 0xed, 0x64, 0x39,
-	0x4c, 0xf9, 0x45, 0x57, 0x67, 0x62, 0xdd, 0xc5, 0x29, 0x87, 0x2b, 0x4a, 0x6b, 0xde, 0x86, 0x56,
-	0x5a, 0xae, 0x94, 0xa0, 0xd2, 0x39, 0x9d, 0xa6, 0xae, 0xc8, 0x7a, 0x07, 0x9a, 0x53, 0x37, 0x51,
-	0x91, 0xef, 0x4e, 0x9e, 0xc0, 0xfb, 0x5f, 0x67, 0xb5, 0x6f, 0x82, 0xa5, 0x2b, 0x3b, 0x53, 0x4e,
-	0x76, 0x86, 0x20, 0xec, 0x4f, 0xc5, 0x7c, 0x79, 0x57, 0xc2, 0x4f, 0x91, 0x4c, 0xbb, 0xa0, 0x7a,
-	0x69, 0xcf, 0x54, 0xb2, 0xa3, 0x55, 0x23, 0x97, 0xa1, 0x85, 0x79, 0xcc, 0xf0, 0xfb, 0xcd, 0x99,
-	0x4a, 0xd2, 0x87, 0x60, 0x49, 0xa0, 0x6a, 0x86, 0x44, 0x9e, 0x29, 0xf1, 0x22, 0xc2, 0x9b, 0x9e,
-	0xe5, 0xd8, 0xac, 0x1f, 0x31, 0x9c, 0xaf, 0xf8, 0x19, 0x27, 0xd2, 0x8a, 0xdc, 0xd7, 0xaa, 0x16,
-	0xfd, 0x20, 0x7a, 0xf6, 0x04, 0x58, 0xdd, 0xe9, 0x08, 0x30, 0x8d, 0x3f, 0xcf, 0x9a, 0xcc, 0xec,
-	0x85, 0xaf, 0xba, 0x03, 0x04, 0x4a, 0x33, 0x70, 0x5b, 0xe6, 0x53, 0x40, 0xac, 0x9e, 0xe1, 0x47,
-	0x1a, 0x6e, 0x20, 0x9b, 0x47, 0x32, 0x52, 0x1a, 0xff, 0x2b, 0xb9, 0x60, 0x5d, 0x1b, 0x0b, 0x42,
-	0x55, 0xc3, 0xba, 0xe0, 0x67, 0x2b, 0x69, 0xd1, 0xdb, 0x26, 0x95, 0x69, 0x3e, 0x43, 0x53, 0x10,
-	0xdc, 0xaf, 0x18, 0x0f, 0x15, 0xed, 0x6b, 0x4b, 0x08, 0x43, 0xd7, 0xcc, 0x24, 0xec, 0x35, 0x96,
-	0x49, 0x1b, 0x26, 0x0f, 0x5b, 0x65, 0xc2, 0x5d, 0xb6, 0x19, 0x16, 0xed, 0xa2, 0xfd, 0x8b, 0xe2,
-	0xf2, 0xbe, 0x13, 0x85, 0x71, 0x6c, 0xdd, 0x86, 0xee, 0xe9, 0xdc, 0x0d, 0x10, 0x2d, 0x27, 0xb4,
-	0xa5, 0x2a, 0x25, 0x81, 0x63, 0x30, 0xfb, 0xff, 0x33, 0x77, 0x83, 0x7b, 0x6e, 0x70, 0xf8, 0x10,
-	0x73, 0x39, 0xf9, 0x42, 0x58, 0xcb, 0x08, 0xab, 0x4b, 0xc2, 0x59, 0x92, 0x3e, 0xeb, 0x55, 0x56,
-	0x0b, 0x35, 0xfa, 0x30, 0x9c, 0xb1, 0xd7, 0x7b, 0xbe, 0x90, 0xfd, 0x2b, 0x2b, 0xb0, 0xbe, 0xd0,
-	0xd4, 0xa2, 0xdd, 0x70, 0xa5, 0xc4, 0x6e, 0x18, 0x91, 0x07, 0xe6, 0x36, 0xa4, 0x14, 0x4d, 0x02,
-	0x60, 0x22, 0xbd, 0x50, 0x24, 0x97, 0x3b, 0x65, 0x32, 0xc2, 0x35, 0xaf, 0xe9, 0x2b, 0x1e, 0x13,
-	0xe8, 0x7e, 0xfd, 0x16, 0x00, 0xe7, 0x12, 0xf3, 0xf9, 0xc5, 0x81, 0xe4, 0xfa, 0xc7, 0x9a, 0xb9,
-	0x44, 0xff, 0xb5, 0xbe, 0x69, 0xc8, 0xbb, 0xea, 0x25, 0xc1, 0xc1, 0x72, 0x85, 0x17, 0x44, 0x5e,
-	0xb8, 0x0d, 0xa8, 0xf1, 0xdc, 0x36, 0x25, 0x10, 0xef, 0xc2, 0x9f, 0xaa, 0xc2, 0xfa, 0x42, 0xfb,
-	0xe5, 0x76, 0x3a, 0x14, 0x96, 0x57, 0xb8, 0x1b, 0xfc, 0x4f, 0x31, 0x38, 0x8a, 0xe3, 0xe7, 0x9e,
-	0xd3, 0xc0, 0x5f, 0x84, 0x9e, 0xa6, 0xae, 0xe4, 0x2d, 0x6b, 0xbe, 0x1a, 0x3b, 0x22, 0xb3, 0xe1,
-	0x87, 0xac, 0x8b, 0x0a, 0x29, 0xbe, 0x1b, 0x73, 0x56, 0x65, 0xcf, 0x41, 0xdb, 0xf3, 0x23, 0x3c,
-	0x8e, 0x54, 0x8b, 0x3c, 0x09, 0x44, 0x20, 0xae, 0x03, 0xaf, 0x61, 0x95, 0x7f, 0x39, 0x57, 0x0e,
-	0x5c, 0x6f, 0xa8, 0xcc, 0x87, 0x71, 0xad, 0xb7, 0x60, 0x23, 0x97, 0x33, 0x95, 0x48, 0x36, 0xe9,
-	0x82, 0xb0, 0x8c, 0xec, 0x5a, 0xe0, 0x88, 0xa4, 0x62, 0x14, 0x4e, 0x07, 0x91, 0x72, 0x27, 0x1c,
-	0x9a, 0x58, 0x3f, 0xcb, 0x15, 0x85, 0x53, 0x47, 0xb9, 0x13, 0x0a, 0x4e, 0xfc, 0x25, 0xe8, 0xea,
-	0x17, 0x72, 0x33, 0x8a, 0xaf, 0xee, 0x74, 0x34, 0x50, 0xd3, 0x93, 0xe4, 0xa3, 0x8b, 0xfd, 0x63,
-	0x43, 0xd6, 0x06, 0x7e, 0x7f, 0x30, 0x9f, 0xda, 0xff, 0x72, 0x05, 0x2e, 0x96, 0x2d, 0xe5, 0x0f,
-	0x92, 0xc3, 0x2a, 0x67, 0xa4, 0x6a, 0xe7, 0x32, 0x52, 0x06, 0x73, 0x54, 0x2f, 0x67, 0x8e, 0x16,
-	0x6a, 0xa6, 0x79, 0xe2, 0xdd, 0x96, 0xab, 0xf9, 0x93, 0xc5, 0x7d, 0xd3, 0x28, 0xee, 0x9b, 0x1c,
-	0x59, 0xd8, 0x7c, 0x72, 0xb2, 0xf0, 0xc7, 0xa1, 0xc7, 0xec, 0xc1, 0xff, 0x9e, 0xf7, 0xb9, 0x7e,
-	0x8c, 0x91, 0x4d, 0x0e, 0x23, 0xe1, 0xe6, 0x39, 0x76, 0x27, 0xbe, 0xc1, 0xb1, 0x49, 0x7c, 0x25,
-	0x82, 0x6a, 0x3e, 0xe3, 0xa6, 0xf6, 0x81, 0x31, 0xd4, 0x90, 0xf9, 0x3e, 0xe9, 0x0a, 0x73, 0x6f,
-	0x0c, 0x88, 0x9f, 0x8c, 0xb6, 0xef, 0xd8, 0x28, 0xcd, 0x84, 0x67, 0x39, 0x63, 0x25, 0xf0, 0xaf,
-	0xf5, 0xae, 0x6e, 0xce, 0x98, 0x82, 0xbc, 0xda, 0xb2, 0xac, 0x99, 0x2c, 0xc2, 0x6a, 0x41, 0x7d,
-	0x9c, 0x3f, 0xad, 0xf6, 0xef, 0x54, 0xa0, 0xbf, 0x4f, 0x75, 0x65, 0x01, 0xac, 0x8b, 0x31, 0x69,
-	0xd6, 0xa0, 0x1a, 0x0b, 0x13, 0xd3, 0x72, 0xf0, 0xaf, 0xf5, 0x0d, 0xf2, 0x93, 0x4a, 0x72, 0xb6,
-	0xd5, 0x79, 0x5d, 0x3b, 0xd5, 0x26, 0xa6, 0x04, 0x2a, 0x1e, 0x91, 0x17, 0x95, 0x3c, 0x3b, 0x42,
-	0xa6, 0x45, 0x27, 0x83, 0xf4, 0x6c, 0xd5, 0xb4, 0x69, 0xd1, 0xc9, 0x7d, 0x3e, 0x5e, 0xd6, 0x1b,
-	0x70, 0x11, 0x73, 0xc4, 0x33, 0x77, 0xa4, 0x06, 0x2a, 0x48, 0xf0, 0x72, 0xcf, 0xfc, 0xc0, 0xd7,
-	0xa7, 0xee, 0xc9, 0x3e, 0x26, 0xdd, 0xa1, 0x14, 0x3c, 0x8f, 0xdf, 0x86, 0x7e, 0xa1, 0x41, 0xdc,
-	0x4d, 0x69, 0xc4, 0xed, 0xba, 0x43, 0xff, 0x75, 0x40, 0xbd, 0x8c, 0xef, 0x5a, 0x1d, 0xcd, 0x23,
-	0x2c, 0x7f, 0x53, 0x8b, 0xb9, 0xe2, 0x71, 0x1a, 0xb8, 0x85, 0x2e, 0xff, 0xd2, 0x17, 0xdb, 0x30,
-	0x1b, 0x51, 0x20, 0xe2, 0x98, 0x85, 0x7f, 0xed, 0x7f, 0x51, 0xe1, 0x38, 0x36, 0xf4, 0xf5, 0x7f,
-	0x9d, 0x26, 0xfe, 0xaf, 0x54, 0xf8, 0xcd, 0x5d, 0x2d, 0x77, 0x28, 0x7f, 0x73, 0x37, 0x45, 0x54,
-	0x2b, 0xe6, 0x63, 0x6e, 0xc5, 0xc8, 0x47, 0x86, 0x9c, 0x5f, 0x07, 0x6b, 0x32, 0x2e, 0xd3, 0xb3,
-	0x82, 0x35, 0x11, 0xed, 0xfd, 0x35, 0x5e, 0x0b, 0xec, 0x8d, 0xf5, 0x15, 0xa8, 0x63, 0xd3, 0xcb,
-	0xdf, 0xe6, 0xa5, 0xb2, 0x9c, 0x47, 0x17, 0xfc, 0xd8, 0x8f, 0xc7, 0x58, 0x30, 0x9e, 0x84, 0x49,
-	0x79, 0x41, 0xcc, 0xb1, 0x3f, 0x09, 0x13, 0x87, 0xf3, 0xd8, 0xbf, 0x52, 0x81, 0xa6, 0x86, 0x59,
-	0x5f, 0x85, 0x9a, 0xcf, 0x1a, 0x9e, 0x73, 0x5e, 0x81, 0xa5, 0x6c, 0x64, 0x9a, 0x1d, 0x8d, 0x74,
-	0x34, 0x2e, 0x7e, 0x02, 0x22, 0x1a, 0xe9, 0xa8, 0xd4, 0xcb, 0xe6, 0x65, 0x13, 0xc4, 0x4c, 0x5b,
-	0x04, 0xfa, 0xda, 0x68, 0x7b, 0x0b, 0x1a, 0x7e, 0x7c, 0x7f, 0x3e, 0x3a, 0x3a, 0x95, 0x9b, 0x55,
-	0x7f, 0xda, 0x09, 0xac, 0xd2, 0xf3, 0x43, 0x0f, 0xad, 0xb7, 0xa1, 0x35, 0x0c, 0x27, 0xbe, 0x66,
-	0x6a, 0x16, 0xed, 0x53, 0x6f, 0x3d, 0xbc, 0x15, 0x4e, 0x7c, 0x6d, 0x58, 0xc0, 0xff, 0xa8, 0x14,
-	0xf2, 0xbe, 0xa9, 0xd0, 0xb3, 0xa4, 0x54, 0x2a, 0x49, 0x1d, 0xca, 0x3f, 0xfb, 0x8f, 0x2a, 0x00,
-	0x59, 0x75, 0x4b, 0x82, 0x48, 0xdd, 0x84, 0xbe, 0x11, 0x7e, 0xe8, 0x09, 0x6d, 0x33, 0xd2, 0x67,
-	0x86, 0x08, 0x25, 0xdc, 0x80, 0xae, 0x8e, 0x1d, 0xbd, 0xdc, 0x52, 0x4e, 0x07, 0xc0, 0x6d, 0x4b,
-	0x00, 0x69, 0x4d, 0x32, 0x2d, 0xb2, 0xf3, 0xa6, 0x94, 0xfb, 0x65, 0xe8, 0x93, 0xed, 0xbc, 0x41,
-	0xd8, 0x88, 0x6f, 0x18, 0x82, 0x53, 0xca, 0xc6, 0xfe, 0x1b, 0x2b, 0x34, 0x54, 0xad, 0xd1, 0x78,
-	0x1d, 0x2e, 0x70, 0xc8, 0xd5, 0xfc, 0xfb, 0x03, 0x7c, 0x1f, 0x70, 0xe4, 0xd6, 0xdc, 0x03, 0x04,
-	0xdf, 0x82, 0xcb, 0x85, 0xfc, 0x39, 0xcc, 0xcb, 0x86, 0x3d, 0x5b, 0xb9, 0x72, 0x66, 0x98, 0xd6,
-	0x57, 0xe8, 0xc1, 0x4d, 0x02, 0xf3, 0x8b, 0x03, 0xa9, 0xa4, 0xae, 0x6f, 0xc0, 0xa9, 0xa5, 0xb7,
-	0x61, 0xd3, 0xcc, 0x2a, 0xcd, 0x78, 0xee, 0xa9, 0x1c, 0xfe, 0x8b, 0x46, 0xaa, 0x96, 0x69, 0x9e,
-	0x5a, 0x37, 0x60, 0xab, 0xa4, 0x54, 0x2e, 0x82, 0xec, 0x42, 0x39, 0xbe, 0x21, 0xfe, 0xb8, 0x03,
-	0x35, 0xdc, 0x7a, 0x0b, 0xb1, 0xae, 0xbf, 0xe0, 0x7b, 0x59, 0x67, 0x47, 0xb9, 0x4e, 0xc3, 0x56,
-	0x67, 0x51, 0xae, 0xdf, 0x80, 0xa6, 0xb4, 0x73, 0x28, 0x38, 0xe4, 0x62, 0x49, 0x33, 0x87, 0x4e,
-	0x83, 0x5b, 0x39, 0x24, 0x0c, 0x8e, 0x05, 0x48, 0x2d, 0x2a, 0x82, 0xc9, 0xcd, 0x85, 0x22, 0xa4,
-	0x13, 0x75, 0xa8, 0x3b, 0xf4, 0x37, 0xed, 0xdb, 0x68, 0xec, 0xcf, 0x44, 0xb1, 0xb3, 0xd8, 0xb7,
-	0x9d, 0xb1, 0x3f, 0xe3, 0xbe, 0xe1, 0xbf, 0xb4, 0x6f, 0x53, 0x77, 0x56, 0x6e, 0x60, 0x43, 0xaf,
-	0x52, 0xce, 0xb8, 0x6f, 0x0f, 0x5c, 0xa3, 0x11, 0xc4, 0xc3, 0xad, 0x65, 0x8d, 0x20, 0x92, 0xe7,
-	0x46, 0xdc, 0x88, 0x9c, 0xab, 0xa9, 0x8c, 0x0e, 0xe0, 0x0d, 0xe7, 0x04, 0xf0, 0x6e, 0x47, 0xd9,
-	0x87, 0x75, 0x03, 0xda, 0x32, 0x7b, 0xe4, 0x98, 0xdd, 0x5e, 0xf2, 0x4a, 0x92, 0x98, 0x47, 0x43,
-	0x94, 0xfe, 0x4f, 0xbb, 0x2a, 0xf1, 0x4e, 0xcb, 0xbb, 0x8a, 0x08, 0x9c, 0xbb, 0xaa, 0x5f, 0x1b,
-	0x97, 0x39, 0x74, 0x39, 0xd2, 0x69, 0xf9, 0x1c, 0xba, 0x89, 0x9e, 0x43, 0x37, 0x49, 0xe7, 0x30,
-	0x52, 0x6c, 0x24, 0x5c, 0x36, 0x87, 0x8e, 0xf2, 0x78, 0x0e, 0x1d, 0x95, 0x6d, 0x3c, 0x7a, 0x4b,
-	0xb3, 0xbf, 0xa4, 0x91, 0x07, 0xf4, 0x5e, 0x5e, 0xa4, 0x5f, 0x05, 0xfd, 0x0e, 0xac, 0x71, 0xc7,
-	0x8c, 0x17, 0xbb, 0xd6, 0x4a, 0x9c, 0xfb, 0x0b, 0x0f, 0x7d, 0x39, 0xfd, 0xa8, 0xf0, 0xf2, 0x97,
-	0x6e, 0x3c, 0x1e, 0x87, 0x33, 0x72, 0xaa, 0x29, 0x6b, 0x9c, 0xb5, 0x60, 0x91, 0x0e, 0xed, 0xfd,
-	0x6d, 0xe8, 0x52, 0x19, 0x1d, 0xd8, 0x98, 0xbc, 0x6d, 0xca, 0x5e, 0x39, 0xd7, 0x5a, 0x26, 0x87,
-	0x16, 0x3c, 0x8d, 0x6b, 0xad, 0x37, 0x34, 0x73, 0xd7, 0x17, 0x96, 0x6c, 0x68, 0x1d, 0x4b, 0x2e,
-	0x0d, 0x68, 0xa7, 0x8b, 0xb1, 0x37, 0xcb, 0xc5, 0x25, 0xc5, 0x38, 0x52, 0x18, 0x15, 0x63, 0x37,
-	0x17, 0x3d, 0x42, 0x7a, 0x02, 0x72, 0x63, 0xc9, 0x08, 0x6f, 0x47, 0xee, 0x63, 0x1e, 0x21, 0x99,
-	0x47, 0xe8, 0x32, 0xd1, 0x3c, 0x50, 0x5b, 0x9b, 0x4b, 0xca, 0x38, 0xf3, 0x40, 0x70, 0x01, 0xe9,
-	0x13, 0xf5, 0x92, 0x18, 0x4f, 0xaa, 0x6c, 0x3d, 0xb5, 0x64, 0x49, 0x0c, 0xe1, 0x31, 0x2f, 0xc9,
-	0xed, 0xac, 0x90, 0x75, 0x13, 0x7a, 0xbc, 0x24, 0x5a, 0xf2, 0xb7, 0xb5, 0xb5, 0x24, 0xec, 0x42,
-	0x2a, 0x1b, 0x74, 0x68, 0x41, 0x32, 0x51, 0xe1, 0x7b, 0x52, 0x45, 0x26, 0x8f, 0xbb, 0xb4, 0x64,
-	0x89, 0x52, 0x99, 0x1c, 0x2d, 0xd1, 0x77, 0x33, 0xb9, 0x1c, 0xcf, 0x35, 0xc9, 0x34, 0xb6, 0x9e,
-	0x5e, 0x32, 0xd7, 0xc4, 0x6e, 0xf0, 0x5c, 0xb3, 0x00, 0x26, 0x9b, 0xb7, 0x78, 0xbc, 0x75, 0x79,
-	0xe9, 0xbc, 0xc5, 0x63, 0x3d, 0x6f, 0xf1, 0xd8, 0xba, 0x23, 0xf3, 0x66, 0xd8, 0x7e, 0x6c, 0x3d,
-	0x53, 0x12, 0xb2, 0x97, 0x06, 0x9c, 0x5a, 0x7f, 0x38, 0x34, 0xc0, 0xec, 0xdb, 0x40, 0xc5, 0xae,
-	0xb7, 0x75, 0x65, 0x29, 0x2a, 0x76, 0x3d, 0x8d, 0x8a, 0xdd, 0x6c, 0x6b, 0x3c, 0xf6, 0xe3, 0x31,
-	0x3d, 0xdb, 0x53, 0x56, 0x06, 0x49, 0x29, 0x2e, 0x43, 0xa4, 0xd8, 0x6b, 0xd0, 0x60, 0x04, 0x94,
-	0xd0, 0xeb, 0x3d, 0xc5, 0x90, 0xec, 0x4c, 0xd5, 0x38, 0xab, 0x84, 0x78, 0x92, 0x5b, 0x6b, 0x9f,
-	0xf4, 0x5e, 0x7f, 0xe3, 0x1b, 0x46, 0x86, 0xe1, 0x2a, 0xfd, 0x5c, 0xfb, 0x5f, 0x01, 0x00, 0x00,
-	0xff, 0xff, 0xe9, 0x5a, 0x4c, 0xf5, 0x07, 0xb4, 0x00, 0x00,
+	0x3f, 0x24, 0x36, 0x82, 0x18, 0x48, 0x1e, 0x8c, 0x3c, 0x38, 0x40, 0x1e, 0x02, 0xd8, 0x2f, 0x31,
+	0x60, 0xe4, 0x25, 0x40, 0x0c, 0x24, 0x7e, 0x09, 0xbe, 0xcb, 0xa9, 0x3a, 0x55, 0x5d, 0x3d, 0x43,
+	0xc9, 0x0b, 0x27, 0x79, 0xea, 0xae, 0xef, 0xdc, 0x6f, 0xdf, 0xf9, 0xee, 0x07, 0x60, 0x1e, 0xab,
+	0xe8, 0xf5, 0x59, 0x14, 0x26, 0xa1, 0xd5, 0x8e, 0x55, 0x74, 0xac, 0x22, 0xfa, 0xb0, 0xff, 0x79,
+	0x05, 0xda, 0x37, 0x47, 0xa3, 0x70, 0x1e, 0x24, 0x4e, 0x38, 0x51, 0xd6, 0x53, 0xd0, 0x08, 0x67,
+	0x2a, 0x18, 0xf8, 0xde, 0x56, 0xe5, 0xf9, 0xca, 0xd5, 0x96, 0xb3, 0x8a, 0x9f, 0xbb, 0x9e, 0xf5,
+	0x34, 0x34, 0x67, 0x13, 0x37, 0x39, 0x08, 0xa3, 0xe9, 0xd6, 0x0a, 0xa5, 0xa4, 0xdf, 0xd6, 0x1a,
+	0x54, 0xe7, 0xbe, 0xb7, 0x55, 0x7d, 0xbe, 0x72, 0xb5, 0xe6, 0xe0, 0x5f, 0xeb, 0x25, 0xe8, 0xcd,
+	0xc6, 0x61, 0xa0, 0x06, 0x69, 0x99, 0xda, 0xf3, 0x95, 0xab, 0x75, 0xa7, 0x4b, 0xd0, 0x3d, 0x5d,
+	0xf0, 0x4b, 0xd0, 0x8d, 0xd4, 0xa1, 0x1f, 0x27, 0x2a, 0x1a, 0x24, 0xfe, 0x54, 0x6d, 0xd5, 0xa9,
+	0x8a, 0x8e, 0x06, 0x3e, 0xf4, 0xa7, 0xca, 0xda, 0x84, 0xd5, 0x4f, 0xc2, 0x40, 0xed, 0x7a, 0x5b,
+	0xab, 0x54, 0x87, 0x7c, 0xd9, 0xaf, 0x42, 0xd7, 0x51, 0xa3, 0x30, 0x08, 0xd4, 0x28, 0xd9, 0x0d,
+	0x0e, 0x42, 0xeb, 0x12, 0x34, 0x67, 0xc7, 0xb3, 0x41, 0x10, 0x7a, 0x4a, 0x3a, 0xdf, 0x98, 0x1d,
+	0xcf, 0x3e, 0x08, 0x3d, 0x65, 0x7f, 0x08, 0xfd, 0x47, 0xb1, 0x8a, 0x76, 0x8c, 0xdc, 0x57, 0x00,
+	0x26, 0xe1, 0xa1, 0x3f, 0x32, 0xf3, 0xb7, 0x08, 0x82, 0x25, 0x30, 0x19, 0x7b, 0x34, 0x88, 0x13,
+	0x77, 0x3a, 0xa3, 0x11, 0x57, 0x9d, 0x16, 0x42, 0xf6, 0x11, 0x60, 0x5f, 0x87, 0xce, 0x77, 0xd5,
+	0xe9, 0x47, 0xee, 0x64, 0xae, 0x1e, 0x9e, 0xce, 0x14, 0x4e, 0xc1, 0x91, 0x3a, 0xa5, 0x6a, 0xea,
+	0x0e, 0xfe, 0xb5, 0x2e, 0x42, 0xfd, 0x18, 0x93, 0xa9, 0x6c, 0xdd, 0xe1, 0x0f, 0x7b, 0x07, 0xd6,
+	0xcc, 0x72, 0xf7, 0xfd, 0x38, 0x29, 0x29, 0x7b, 0x05, 0x80, 0xb2, 0x0f, 0x26, 0x7e, 0x9c, 0x6c,
+	0xad, 0x3c, 0x5f, 0xbd, 0x5a, 0x77, 0x5a, 0x04, 0xc1, 0x02, 0xf6, 0x3f, 0xaa, 0x40, 0xcf, 0xac,
+	0xe5, 0xfa, 0xdb, 0x66, 0x1d, 0xb5, 0x33, 0xda, 0xc7, 0xc9, 0xa4, 0x3f, 0xdb, 0xb4, 0x5a, 0x75,
+	0x47, 0xbe, 0x52, 0xf8, 0x35, 0x59, 0x28, 0xf9, 0xc2, 0xfd, 0x10, 0x27, 0xd1, 0xe0, 0xd8, 0x9d,
+	0xd0, 0xda, 0xb4, 0x9c, 0xd5, 0x38, 0x89, 0x3e, 0x72, 0x27, 0x69, 0x81, 0xb7, 0x69, 0x55, 0x6a,
+	0x52, 0xe0, 0xed, 0x14, 0xfe, 0xce, 0x56, 0xe3, 0xf9, 0xca, 0xd5, 0xa6, 0xc0, 0xdf, 0xb1, 0xbf,
+	0x0d, 0xeb, 0xf9, 0x2e, 0xef, 0x27, 0x51, 0x49, 0xaf, 0x8d, 0xf6, 0x56, 0xcc, 0xf6, 0xec, 0x7d,
+	0xe8, 0xeb, 0xf2, 0x77, 0x27, 0xa1, 0x9b, 0x5c, 0xdb, 0x3e, 0x6f, 0xce, 0x57, 0xf4, 0x98, 0xb7,
+	0xa0, 0x41, 0x7f, 0xae, 0xbf, 0x4d, 0x83, 0xae, 0x38, 0xfa, 0xd3, 0xfe, 0x1a, 0x74, 0x1f, 0x2d,
+	0x5b, 0xc6, 0x6e, 0x49, 0x95, 0x5d, 0xbd, 0x8c, 0x23, 0xe8, 0xed, 0x4f, 0xc2, 0xe4, 0xb6, 0x4a,
+	0x5c, 0x7f, 0x72, 0xdb, 0x4d, 0x5c, 0xcc, 0x37, 0x51, 0xc7, 0x6a, 0x22, 0xdd, 0xe1, 0x0f, 0xdc,
+	0x92, 0xea, 0xb3, 0xb9, 0x3f, 0xc3, 0xf3, 0xc4, 0xeb, 0xd0, 0xa0, 0xef, 0x5d, 0xcf, 0x7a, 0x1e,
+	0x3a, 0x23, 0x37, 0xf2, 0x06, 0xbe, 0xc7, 0xab, 0x5c, 0xa5, 0x55, 0x06, 0x84, 0xed, 0x7a, 0xb4,
+	0xcc, 0x3f, 0x02, 0x4d, 0x6a, 0x04, 0xab, 0x7f, 0x0a, 0x1a, 0x63, 0x15, 0x85, 0xfa, 0x5c, 0xd6,
+	0x9d, 0x55, 0xfc, 0xdc, 0xf5, 0xac, 0x1b, 0xd0, 0x8a, 0x27, 0x61, 0x92, 0xed, 0x94, 0xf6, 0xf6,
+	0xe5, 0xd7, 0x8d, 0x13, 0xfe, 0x7a, 0xbe, 0x9f, 0x4e, 0x13, 0x73, 0x53, 0xf5, 0x27, 0xd0, 0xd9,
+	0x53, 0xc9, 0x1d, 0xec, 0x0e, 0x35, 0xd1, 0x83, 0x15, 0xa9, 0xbd, 0xeb, 0xac, 0xf8, 0xd4, 0x41,
+	0xee, 0xfb, 0xe8, 0xe0, 0x30, 0xeb, 0x3f, 0x10, 0x6c, 0xe7, 0xe0, 0x70, 0xd7, 0xcb, 0xc6, 0x5c,
+	0x35, 0xc7, 0x9c, 0x96, 0x9b, 0xa9, 0x04, 0xcb, 0xd5, 0xa8, 0x46, 0x2e, 0xb7, 0xa7, 0x92, 0x5d,
+	0xcf, 0xf6, 0x60, 0x7d, 0x4f, 0x25, 0x85, 0x09, 0x5c, 0x83, 0xaa, 0xef, 0x9d, 0xe8, 0xd5, 0xf4,
+	0xbd, 0x93, 0x85, 0xc9, 0xeb, 0x66, 0x93, 0x67, 0x43, 0x37, 0x4e, 0x10, 0xbf, 0xe4, 0x67, 0xaf,
+	0x4d, 0x40, 0x99, 0xbe, 0xb7, 0xa0, 0xb5, 0x7f, 0xe4, 0x4f, 0x26, 0x85, 0xc1, 0xd5, 0x69, 0x70,
+	0x17, 0xa1, 0x3e, 0x0b, 0xfd, 0x20, 0xd1, 0xa7, 0x83, 0x3e, 0xec, 0xff, 0x1f, 0x5a, 0x3b, 0x63,
+	0x37, 0x38, 0x54, 0xef, 0x87, 0x43, 0x6b, 0x1b, 0x5a, 0x89, 0x1b, 0x1f, 0x71, 0xfd, 0x15, 0x9a,
+	0xd9, 0x8d, 0xdc, 0xcc, 0x3e, 0x74, 0xe3, 0x23, 0x9e, 0x53, 0xcc, 0x47, 0x47, 0xd9, 0x58, 0xa6,
+	0x95, 0xdc, 0x32, 0xbd, 0x08, 0xbd, 0x4f, 0xc3, 0xe1, 0xe0, 0x60, 0x1e, 0x8f, 0x11, 0xa5, 0x24,
+	0x8a, 0xe6, 0xac, 0xeb, 0x74, 0x3e, 0x0d, 0x87, 0x77, 0xe7, 0xf1, 0x78, 0x1f, 0x61, 0xf6, 0x10,
+	0xd6, 0xf6, 0x54, 0xf2, 0x3d, 0xff, 0x74, 0xae, 0x70, 0x76, 0x34, 0x56, 0xa3, 0x05, 0xce, 0x26,
+	0xa7, 0x81, 0xdf, 0xbb, 0xde, 0x89, 0xb5, 0x01, 0xab, 0x32, 0xc7, 0xb2, 0x39, 0x67, 0x38, 0xbd,
+	0xd6, 0x33, 0x00, 0x08, 0x96, 0x65, 0xe3, 0xb5, 0x69, 0xce, 0x54, 0x42, 0x8b, 0x66, 0x4f, 0x68,
+	0xd9, 0xa9, 0x0d, 0xaa, 0x3f, 0xab, 0xa4, 0x62, 0x56, 0x72, 0x07, 0xfa, 0x9f, 0x61, 0x9e, 0x41,
+	0x71, 0x77, 0x5d, 0xc9, 0xcd, 0x41, 0xb1, 0xbb, 0x4e, 0xf7, 0x33, 0xfd, 0x49, 0x8b, 0x30, 0xcd,
+	0x5a, 0xbb, 0x99, 0x24, 0xd1, 0xb2, 0xd6, 0xee, 0xc2, 0xda, 0xd0, 0x4d, 0x92, 0x89, 0x1a, 0xb8,
+	0x49, 0x12, 0x99, 0xcd, 0x3d, 0x93, 0x6b, 0xae, 0x80, 0x02, 0x9c, 0x1e, 0x97, 0xc2, 0xaa, 0xa9,
+	0xb9, 0xff, 0xba, 0x0a, 0xcd, 0x7b, 0x2a, 0x0a, 0x4b, 0xd7, 0xfc, 0x32, 0xb4, 0x46, 0x61, 0x70,
+	0xe0, 0x1b, 0xbb, 0xb9, 0xc9, 0x80, 0x5d, 0xcf, 0x7a, 0x0e, 0xda, 0x07, 0xfe, 0xe1, 0x38, 0x19,
+	0xcc, 0xc2, 0xc7, 0x2a, 0x92, 0x59, 0x03, 0x02, 0xed, 0x21, 0x04, 0x4b, 0xfb, 0xf1, 0x80, 0xdb,
+	0xa3, 0x3d, 0xdd, 0x74, 0x9a, 0x7e, 0x7c, 0x8b, 0xbe, 0x11, 0x61, 0x0f, 0xdd, 0x58, 0x0d, 0xf8,
+	0x38, 0xd4, 0xa9, 0x70, 0x0b, 0x21, 0xf7, 0xe9, 0x48, 0x7c, 0x09, 0xba, 0xae, 0x77, 0xec, 0x06,
+	0x23, 0x9d, 0x83, 0x6f, 0xb2, 0x8e, 0x00, 0x39, 0xd3, 0x4b, 0xd0, 0x8b, 0x93, 0x48, 0x05, 0x87,
+	0xc9, 0x58, 0x72, 0x35, 0xf8, 0xce, 0xd4, 0x50, 0xce, 0xf6, 0x0a, 0xd4, 0x70, 0x49, 0xb6, 0x9a,
+	0xcf, 0x57, 0x16, 0x76, 0xa4, 0x46, 0x17, 0x0e, 0x65, 0xb1, 0x5e, 0x83, 0x7a, 0x8c, 0x27, 0x60,
+	0xab, 0x45, 0x79, 0x37, 0x73, 0x79, 0xf1, 0xba, 0xa7, 0xf3, 0xe1, 0x70, 0x26, 0xeb, 0x3a, 0xb4,
+	0xb2, 0xc9, 0x07, 0x9a, 0xfc, 0x4b, 0xa5, 0x93, 0x8f, 0x98, 0xd2, 0x69, 0xba, 0x32, 0xe7, 0x38,
+	0x76, 0x2a, 0xc7, 0xe7, 0xa9, 0xcd, 0x63, 0x47, 0xc8, 0x1e, 0x02, 0xf0, 0xa8, 0xca, 0xd2, 0xca,
+	0xc2, 0x77, 0x68, 0xe1, 0xdb, 0x0c, 0x24, 0x84, 0x60, 0xbd, 0x0c, 0x7d, 0x4c, 0x34, 0x17, 0xa0,
+	0x4b, 0x77, 0x42, 0x77, 0xa6, 0x92, 0xbb, 0xd9, 0x1a, 0x7c, 0x13, 0x3a, 0x9f, 0xcd, 0xdd, 0x89,
+	0x9f, 0x9c, 0x72, 0x2f, 0x7b, 0xe7, 0xf5, 0xb2, 0x2d, 0xd9, 0xa9, 0xa3, 0x6f, 0xc1, 0x46, 0xa4,
+	0x66, 0x91, 0x8a, 0xe3, 0x01, 0x8d, 0x78, 0x80, 0xd4, 0x02, 0xde, 0x34, 0x7d, 0xea, 0xb3, 0x25,
+	0x89, 0x34, 0x29, 0x7b, 0xc7, 0x33, 0xbc, 0xe5, 0x76, 0x61, 0x8d, 0xb3, 0x32, 0x22, 0xa2, 0x89,
+	0x5f, 0xa3, 0xc9, 0x7c, 0x2e, 0x3f, 0xf1, 0x98, 0x89, 0x50, 0x69, 0xba, 0x04, 0xbd, 0x38, 0x07,
+	0xb3, 0xde, 0x83, 0x1e, 0x8e, 0x91, 0x0f, 0x95, 0xe7, 0x26, 0xee, 0xd6, 0x3a, 0x55, 0x74, 0xa9,
+	0xf4, 0x3c, 0xd1, 0x59, 0xea, 0xcc, 0xe4, 0x8b, 0xb6, 0xf3, 0xfb, 0x70, 0xb1, 0x78, 0x46, 0x06,
+	0xe1, 0xc4, 0xdb, 0xda, 0x3e, 0x6f, 0x12, 0xd6, 0xf3, 0x87, 0xe4, 0xc3, 0x49, 0xf9, 0x79, 0xbb,
+	0xf6, 0x05, 0xce, 0xdb, 0x8f, 0x41, 0xfb, 0xae, 0x1b, 0x8f, 0xfd, 0x30, 0xd0, 0x38, 0x5c, 0x9d,
+	0x2a, 0x8d, 0xc3, 0xd5, 0xa9, 0xb2, 0x2c, 0xa8, 0x8d, 0x5d, 0x3f, 0x92, 0xe3, 0x46, 0xff, 0xf1,
+	0xa8, 0xe1, 0xef, 0xc0, 0x3d, 0x76, 0x13, 0x37, 0x3d, 0x6a, 0x08, 0xba, 0x49, 0x10, 0xdc, 0x0e,
+	0x07, 0x5c, 0xeb, 0x60, 0x3e, 0xe3, 0xce, 0xd5, 0x08, 0xbf, 0x77, 0x05, 0xfc, 0x68, 0x46, 0xad,
+	0x3f, 0x4a, 0x5b, 0x27, 0xdc, 0xb2, 0x05, 0x8d, 0x4f, 0xc3, 0x21, 0x0e, 0x59, 0x23, 0x4a, 0xf9,
+	0x44, 0xa2, 0x04, 0xc7, 0xb9, 0x9b, 0x62, 0x65, 0xfe, 0xca, 0x2e, 0xf7, 0xaa, 0x49, 0xa3, 0xfd,
+	0xbf, 0xd0, 0xbd, 0xa7, 0x5c, 0xef, 0x6e, 0xe4, 0x4e, 0x79, 0xe6, 0x6d, 0xe8, 0x8e, 0x95, 0xeb,
+	0x0d, 0x0e, 0x10, 0x92, 0x5d, 0xc1, 0xed, 0xb1, 0xce, 0xc5, 0x5b, 0xd8, 0xc8, 0x43, 0xc4, 0x2c,
+	0x13, 0x8d, 0xdd, 0x34, 0x17, 0x52, 0xb3, 0xf6, 0xcf, 0x57, 0x10, 0x43, 0xb9, 0x1e, 0xe1, 0xde,
+	0x17, 0xa0, 0x43, 0x85, 0x8e, 0x55, 0x14, 0xfb, 0x61, 0x60, 0xd6, 0xfb, 0x11, 0x83, 0x10, 0xed,
+	0x50, 0x16, 0x83, 0x12, 0x6c, 0x22, 0x80, 0x76, 0xf4, 0xad, 0x5c, 0xa3, 0xe9, 0x45, 0xd8, 0xde,
+	0x7e, 0x3a, 0xb7, 0x8a, 0xb9, 0xd1, 0x18, 0x1d, 0xa2, 0x49, 0xfc, 0xef, 0x55, 0x68, 0x22, 0x2e,
+	0xa0, 0x91, 0x5e, 0x82, 0x26, 0xe1, 0x31, 0x75, 0x32, 0xd3, 0x73, 0x88, 0xdf, 0x77, 0x4e, 0x66,
+	0x78, 0xb5, 0xe1, 0x0d, 0x86, 0x29, 0x32, 0x89, 0x9f, 0x86, 0x43, 0x4c, 0xb8, 0x0c, 0x2d, 0x4c,
+	0x30, 0x29, 0x81, 0xe6, 0xa7, 0xe1, 0xf0, 0xbe, 0x26, 0x80, 0xe8, 0x42, 0xc4, 0x62, 0x4c, 0x59,
+	0xd2, 0x05, 0x89, 0xe5, 0xb6, 0x71, 0x64, 0x51, 0xc8, 0x67, 0xa1, 0x5e, 0x82, 0xcd, 0x34, 0x22,
+	0x77, 0xa8, 0x0a, 0xea, 0x5f, 0x01, 0x4b, 0x33, 0xe9, 0x69, 0x62, 0xe9, 0x4d, 0x58, 0x1d, 0x45,
+	0x73, 0x3f, 0x56, 0x82, 0x3c, 0xe5, 0x0b, 0x91, 0xd4, 0xd4, 0x3d, 0x19, 0x48, 0x5a, 0x93, 0x91,
+	0xd4, 0xd4, 0x3d, 0xd9, 0xe1, 0x64, 0xba, 0xb7, 0x5d, 0x24, 0xc6, 0x08, 0x57, 0xd2, 0xbd, 0xed,
+	0x7a, 0xbc, 0xac, 0x13, 0x37, 0x4e, 0x06, 0xc8, 0x18, 0x04, 0xbc, 0xac, 0xc0, 0x98, 0x09, 0xc1,
+	0xf7, 0x11, 0x4a, 0x4c, 0xca, 0x65, 0x68, 0x31, 0xa2, 0x18, 0x86, 0x27, 0x82, 0x03, 0x9b, 0x04,
+	0xb8, 0x15, 0x9e, 0x58, 0x3b, 0xb0, 0x36, 0x0c, 0xe3, 0x78, 0x10, 0xa9, 0xc7, 0x48, 0xf1, 0xd1,
+	0x3a, 0x75, 0xce, 0x3b, 0xb5, 0x3d, 0x2c, 0xe2, 0x50, 0x09, 0x5a, 0xeb, 0x57, 0x61, 0x9d, 0x5b,
+	0x88, 0x54, 0x8c, 0xb7, 0x3b, 0xb2, 0x6c, 0x84, 0x25, 0xeb, 0x4e, 0x9f, 0x12, 0x1c, 0x84, 0xef,
+	0x20, 0x78, 0x71, 0xc3, 0xf6, 0x16, 0x36, 0xac, 0xfd, 0x27, 0x2d, 0x5e, 0xf7, 0x5b, 0x6e, 0xac,
+	0x8c, 0xab, 0xb2, 0xa6, 0xaf, 0xca, 0xc0, 0x1f, 0x1d, 0x0d, 0x02, 0x57, 0xf6, 0x71, 0xcb, 0x69,
+	0x22, 0xe0, 0x03, 0x77, 0x4a, 0x67, 0xda, 0x53, 0xf1, 0x88, 0xd6, 0xba, 0xe5, 0xd0, 0x7f, 0x3c,
+	0xf9, 0xb1, 0x3a, 0x91, 0x25, 0xc6, 0xbf, 0x78, 0x1a, 0xa9, 0x8f, 0xd1, 0xa9, 0xdc, 0x87, 0xfa,
+	0x13, 0xf7, 0xc4, 0xe1, 0xdc, 0xf7, 0xa8, 0x63, 0x7c, 0x11, 0x36, 0xe8, 0x7b, 0xd7, 0xc3, 0xaa,
+	0x47, 0xa1, 0x1f, 0xd0, 0xe2, 0xd5, 0x1c, 0xfa, 0x8f, 0x55, 0x47, 0xd3, 0x21, 0xad, 0x59, 0xd7,
+	0xc1, 0xbf, 0xd6, 0xdb, 0xd0, 0x8c, 0x54, 0xcc, 0xf3, 0xd8, 0x3a, 0x6f, 0x1e, 0x1b, 0x91, 0x8a,
+	0x69, 0x02, 0xb7, 0xa1, 0x15, 0x85, 0x13, 0xc1, 0xbd, 0x50, 0xb2, 0xdf, 0xf4, 0x29, 0x70, 0x9a,
+	0x91, 0x3e, 0x0f, 0xdf, 0x80, 0x8e, 0xc6, 0x44, 0x54, 0xac, 0x4d, 0xc5, 0xb6, 0x72, 0xc5, 0x0c,
+	0x04, 0xe8, 0xb4, 0x0f, 0x0c, 0x6c, 0xb8, 0x2d, 0x47, 0x17, 0x8f, 0x3a, 0xad, 0xd4, 0xe2, 0x06,
+	0x67, 0x3c, 0xc0, 0x27, 0x3a, 0xa5, 0xf6, 0x92, 0x30, 0x3a, 0xe5, 0x45, 0xab, 0x12, 0xb5, 0x87,
+	0xdf, 0xbb, 0x9e, 0xf5, 0x16, 0xac, 0x8e, 0x68, 0x9e, 0xe8, 0xbe, 0x3a, 0x73, 0xcc, 0x92, 0xd1,
+	0xfa, 0x36, 0x74, 0xa7, 0xee, 0x6c, 0xe0, 0x06, 0xfe, 0xd4, 0x4d, 0x10, 0xc1, 0xac, 0x9d, 0x57,
+	0xb2, 0x33, 0x75, 0x67, 0x37, 0x75, 0x76, 0x46, 0x07, 0xb2, 0xed, 0xd7, 0x69, 0x49, 0x1a, 0x43,
+	0x97, 0x37, 0xfc, 0x4b, 0xd0, 0x4b, 0xc2, 0xc4, 0xc5, 0xed, 0x38, 0x1a, 0xbb, 0xd1, 0xa1, 0xda,
+	0xb2, 0x88, 0xe7, 0xea, 0x12, 0xd4, 0x11, 0x20, 0x62, 0x38, 0xcf, 0x3d, 0xcd, 0x32, 0x5d, 0xa0,
+	0x4c, 0x6d, 0xcf, 0x3d, 0x4d, 0xb3, 0x5c, 0x86, 0xd6, 0xb1, 0x3f, 0x13, 0xfc, 0x71, 0x91, 0x8f,
+	0xce, 0xb1, 0x3f, 0x63, 0xfc, 0xf1, 0x1a, 0x58, 0x74, 0xfe, 0x74, 0x05, 0xdc, 0x97, 0x0d, 0xea,
+	0xcb, 0x1a, 0xa6, 0xe8, 0x6a, 0xa8, 0x53, 0x5f, 0x86, 0xfe, 0x67, 0x73, 0x15, 0x63, 0xdf, 0xe5,
+	0xb0, 0x6d, 0x6d, 0x52, 0x85, 0x3d, 0x0d, 0xe6, 0x03, 0x85, 0x04, 0xd9, 0x28, 0x52, 0x6e, 0xa2,
+	0x74, 0xb6, 0xa7, 0x88, 0xa0, 0xeb, 0x30, 0x50, 0x32, 0xe9, 0xd1, 0xe3, 0x85, 0xb2, 0xa5, 0x91,
+	0x61, 0x40, 0x17, 0x8a, 0x0d, 0xdd, 0xd1, 0xd8, 0x4d, 0x06, 0xe9, 0xec, 0x5c, 0xa2, 0x1e, 0xb5,
+	0x11, 0x78, 0x4b, 0x66, 0x28, 0x97, 0x07, 0xeb, 0x78, 0x9a, 0x0f, 0xa1, 0xce, 0x83, 0xf5, 0xbc,
+	0x0a, 0xeb, 0x3c, 0x8b, 0x61, 0x30, 0xf1, 0x03, 0x19, 0xdd, 0x65, 0x3e, 0xd4, 0x94, 0xf0, 0x21,
+	0xc1, 0xa9, 0xbe, 0x17, 0xa0, 0x23, 0xb9, 0x58, 0x26, 0xf1, 0x0c, 0x37, 0xc9, 0x30, 0x92, 0x4a,
+	0x58, 0x57, 0x61, 0x4d, 0xb2, 0x08, 0xaa, 0xf1, 0xbd, 0xad, 0x2b, 0x3c, 0x01, 0x0c, 0xe7, 0x91,
+	0xed, 0x7a, 0xd6, 0x35, 0xd8, 0xf4, 0x5c, 0x7f, 0x72, 0x2a, 0xd8, 0xc4, 0x10, 0x75, 0x3c, 0x4b,
+	0xd5, 0x5e, 0xa0, 0x54, 0x42, 0x29, 0x0f, 0xb5, 0xd0, 0x63, 0x39, 0x01, 0xf5, 0xdc, 0x52, 0x02,
+	0xea, 0x0d, 0xb8, 0x38, 0x4c, 0x06, 0xdf, 0x1f, 0x2b, 0x3c, 0x40, 0xc6, 0x3e, 0xd8, 0xa6, 0x7d,
+	0xb0, 0x3e, 0x4c, 0x3e, 0x19, 0xab, 0xe0, 0xb6, 0xb1, 0x1b, 0xbe, 0x0a, 0x17, 0x86, 0xc9, 0xe0,
+	0x53, 0xdf, 0xcd, 0xe7, 0xbf, 0x46, 0x2d, 0xac, 0x0d, 0x93, 0xf7, 0x7d, 0xd7, 0xcc, 0xfe, 0x16,
+	0x6c, 0x48, 0xf6, 0xc2, 0x6e, 0x7c, 0x9b, 0x86, 0x61, 0x51, 0x81, 0x87, 0xe6, 0x96, 0xb4, 0x7f,
+	0x72, 0x05, 0xb6, 0x0a, 0xf4, 0x5a, 0xc6, 0x85, 0xbe, 0x08, 0x3d, 0x93, 0xe0, 0x4b, 0xf9, 0x94,
+	0x4e, 0x46, 0xcd, 0xd1, 0x51, 0xdc, 0x30, 0x73, 0x15, 0xb9, 0x0a, 0x2b, 0xcb, 0xbc, 0xa3, 0xf9,
+	0x8b, 0x6b, 0xb0, 0x99, 0xa3, 0x24, 0x13, 0x37, 0xca, 0x5d, 0x99, 0x17, 0x0c, 0x72, 0x31, 0x71,
+	0x23, 0xde, 0xfd, 0x57, 0x00, 0x98, 0xfd, 0xa2, 0x8c, 0x8c, 0x5c, 0x89, 0xdd, 0xe7, 0xe4, 0x1b,
+	0x92, 0x8c, 0xd4, 0x4c, 0xbc, 0x55, 0x3f, 0x0f, 0x13, 0x52, 0x49, 0xa4, 0x94, 0x62, 0xfb, 0x33,
+	0xb0, 0x16, 0x49, 0xd6, 0xe5, 0x42, 0x86, 0x5b, 0x8b, 0x42, 0x86, 0x97, 0xce, 0xa2, 0x7f, 0xcb,
+	0xc4, 0x0d, 0x3f, 0x0c, 0xbd, 0x2c, 0x57, 0xa9, 0xc0, 0xe1, 0x4c, 0xfe, 0x0c, 0xa7, 0xa2, 0x38,
+	0x67, 0xad, 0x58, 0xcf, 0x94, 0x1d, 0xc2, 0xc5, 0xac, 0x76, 0xe6, 0xe1, 0xa9, 0x8d, 0x3b, 0x79,
+	0x02, 0x9e, 0x90, 0x78, 0x85, 0x90, 0xe0, 0xe5, 0x25, 0x03, 0x28, 0x12, 0xef, 0x9a, 0xb0, 0x75,
+	0x3d, 0xee, 0x54, 0xd3, 0xc1, 0xbf, 0xf6, 0x5f, 0xaa, 0x40, 0x2f, 0x65, 0xa1, 0x28, 0xa3, 0xf5,
+	0x15, 0xb0, 0x90, 0xc6, 0x28, 0xdd, 0x3f, 0xfd, 0xa9, 0x7b, 0xb2, 0x6f, 0x6e, 0xa1, 0x42, 0xc7,
+	0x96, 0x8b, 0x6f, 0x96, 0x76, 0x8c, 0x66, 0xf5, 0xeb, 0xd0, 0xca, 0x7a, 0x99, 0x9b, 0xc0, 0x4a,
+	0x61, 0x02, 0xd7, 0xa0, 0x1a, 0xcc, 0xa7, 0x32, 0xaf, 0xf8, 0xd7, 0xbe, 0x05, 0x2d, 0x1c, 0x01,
+	0x77, 0xfe, 0x1d, 0x00, 0xa3, 0x27, 0x2c, 0xee, 0xc8, 0x33, 0x8c, 0x59, 0x27, 0x5a, 0x2a, 0x6d,
+	0x7f, 0x0c, 0xcd, 0xdd, 0x44, 0x4d, 0x0b, 0xeb, 0x59, 0x3b, 0x7f, 0x3d, 0xa5, 0x3b, 0x2c, 0x05,
+	0xc1, 0xbf, 0x05, 0x89, 0x2b, 0x4b, 0x8d, 0x0c, 0x89, 0xeb, 0x0f, 0x41, 0x73, 0x67, 0xfc, 0x39,
+	0x07, 0x5a, 0x5a, 0x73, 0xb5, 0x58, 0xf3, 0x27, 0xd0, 0x60, 0x42, 0xe8, 0x10, 0xaf, 0x6c, 0x3f,
+	0x51, 0xd3, 0xe5, 0x32, 0x1f, 0x3d, 0x58, 0xa7, 0x89, 0xf9, 0x88, 0xae, 0xb8, 0x0c, 0xad, 0xa1,
+	0x7b, 0x28, 0x04, 0x99, 0x0c, 0x73, 0xe8, 0x1e, 0x12, 0x25, 0x66, 0x7f, 0x9b, 0x89, 0x2c, 0x24,
+	0x65, 0xf3, 0x04, 0x6f, 0x59, 0xe5, 0x8b, 0x04, 0xaf, 0x2e, 0x8f, 0x23, 0xc7, 0xf2, 0xa3, 0x71,
+	0x7e, 0x85, 0xf2, 0xe5, 0xf5, 0xfc, 0x38, 0x4d, 0xcc, 0x47, 0xeb, 0x13, 0x41, 0xe7, 0xfd, 0x70,
+	0x98, 0xc9, 0xc1, 0x84, 0x58, 0x8f, 0x13, 0xf7, 0x50, 0x73, 0x49, 0x48, 0xac, 0xef, 0xe3, 0xb7,
+	0x75, 0x07, 0xd6, 0xe7, 0xc1, 0x24, 0x1c, 0x1d, 0xc9, 0x1e, 0x36, 0x36, 0xe5, 0x19, 0x68, 0xa5,
+	0xcf, 0x65, 0xa8, 0x0d, 0x6a, 0x73, 0x02, 0xdd, 0xf4, 0x64, 0x10, 0xeb, 0x8b, 0x44, 0x0d, 0x55,
+	0x98, 0xae, 0x56, 0x83, 0xbe, 0x77, 0x3d, 0xa4, 0xd7, 0xb9, 0xb8, 0x66, 0x2a, 0xf8, 0x0b, 0x6f,
+	0x32, 0x4f, 0x1d, 0xb8, 0xf3, 0x49, 0x32, 0x48, 0x8b, 0xf2, 0xa1, 0xef, 0x09, 0x7c, 0x9f, 0x6b,
+	0xb0, 0x7f, 0xba, 0xc2, 0xdb, 0x98, 0xbe, 0x91, 0xcb, 0xa6, 0xf1, 0x65, 0xfd, 0xaf, 0x94, 0xf4,
+	0xdf, 0x9c, 0x12, 0x12, 0xc1, 0xa5, 0x9d, 0xb7, 0xde, 0x05, 0x58, 0x18, 0xfc, 0xd3, 0xe5, 0x82,
+	0x13, 0x1c, 0x9b, 0xc3, 0x64, 0x3f, 0x8d, 0xfb, 0x5d, 0x68, 0xee, 0xb8, 0x91, 0xf7, 0x45, 0x8e,
+	0xa2, 0x82, 0x0e, 0x16, 0xbd, 0xe7, 0x06, 0xde, 0xad, 0x30, 0x3c, 0x42, 0x4c, 0x2c, 0xc2, 0x61,
+	0x8d, 0x89, 0x59, 0x2e, 0x8c, 0x5b, 0x99, 0x12, 0x18, 0x0d, 0x72, 0x0d, 0x2d, 0x84, 0xa4, 0x17,
+	0x86, 0xdc, 0xfc, 0x91, 0x1a, 0x69, 0x2c, 0xc9, 0x10, 0x47, 0x8d, 0xec, 0x31, 0xb4, 0xb1, 0x99,
+	0x9d, 0x70, 0x32, 0x51, 0xa3, 0x04, 0x29, 0x0a, 0xaa, 0x4c, 0x84, 0x24, 0x9a, 0xfd, 0x44, 0xd8,
+	0xf7, 0x18, 0x64, 0x5d, 0x07, 0xaa, 0x7d, 0x30, 0x0c, 0xc3, 0xa3, 0xd2, 0xad, 0x60, 0x76, 0xdb,
+	0x69, 0x62, 0x5e, 0xfc, 0x67, 0xff, 0x71, 0x45, 0x36, 0x2e, 0x12, 0x52, 0xdb, 0x52, 0xc9, 0xf2,
+	0x8d, 0x2b, 0xd3, 0xc6, 0x15, 0xd0, 0x3a, 0xbc, 0x08, 0x3d, 0x2a, 0x93, 0xbf, 0x77, 0xea, 0x0e,
+	0xf5, 0x58, 0x8b, 0x17, 0x91, 0x3e, 0xa7, 0x5c, 0x23, 0x1e, 0x91, 0x70, 0xbf, 0x5b, 0x0b, 0x95,
+	0xcb, 0x88, 0x79, 0x6c, 0x7a, 0xf8, 0xf7, 0xe0, 0x02, 0x13, 0x0d, 0x54, 0x45, 0x30, 0x9f, 0x66,
+	0xa2, 0x86, 0x33, 0x37, 0xfc, 0x1a, 0x95, 0xc2, 0x6a, 0x3f, 0x98, 0x13, 0x0a, 0xb0, 0xff, 0x73,
+	0x05, 0xfa, 0x38, 0x5a, 0x53, 0x16, 0x72, 0x05, 0x40, 0xb3, 0x0e, 0xe9, 0x2a, 0xb6, 0x04, 0x22,
+	0xf2, 0x46, 0x49, 0x9e, 0x1c, 0xeb, 0x95, 0xd4, 0x25, 0xee, 0x1f, 0x4f, 0x70, 0x71, 0x74, 0x86,
+	0xc7, 0x4a, 0xc4, 0x24, 0xcd, 0x94, 0xc1, 0xf8, 0x58, 0xb9, 0x11, 0xde, 0xff, 0x44, 0xbe, 0xd1,
+	0x9d, 0x2e, 0xfd, 0x2e, 0xe5, 0x4d, 0x30, 0x83, 0x63, 0xe4, 0xb5, 0x5e, 0x87, 0xba, 0x49, 0x34,
+	0x2c, 0x2f, 0xc4, 0xd9, 0xec, 0x5f, 0xae, 0x40, 0xdb, 0x18, 0xa0, 0xd9, 0xb9, 0x74, 0x51, 0xeb,
+	0x69, 0xe7, 0x68, 0x69, 0xde, 0x2b, 0xb0, 0x4e, 0x65, 0xe2, 0xdc, 0xc2, 0x9c, 0xe5, 0xd9, 0xa7,
+	0xaf, 0x40, 0x75, 0x72, 0x1c, 0xcb, 0x92, 0x9e, 0xb1, 0x1c, 0x98, 0xcb, 0xfe, 0xc7, 0x15, 0x46,
+	0xe2, 0x0f, 0xdc, 0x19, 0xa2, 0x1b, 0xe4, 0x7a, 0x12, 0x43, 0x10, 0x34, 0x75, 0x67, 0x44, 0x6f,
+	0x7f, 0x19, 0xaa, 0xb3, 0x30, 0xa6, 0xd9, 0x2e, 0xee, 0xc1, 0xbd, 0x30, 0xf6, 0x89, 0x43, 0xc0,
+	0x1c, 0x88, 0x7f, 0x1e, 0x87, 0xd1, 0x04, 0x37, 0x7e, 0x1c, 0x0b, 0x6e, 0x17, 0xfc, 0x43, 0xf0,
+	0x5b, 0x61, 0x1c, 0x33, 0xaf, 0xfd, 0x2e, 0x5c, 0x32, 0x73, 0x8e, 0xdd, 0xc9, 0x44, 0x05, 0x87,
+	0xca, 0x14, 0x5b, 0x6d, 0x66, 0x45, 0x74, 0x32, 0x6d, 0x9b, 0xb7, 0xa1, 0xa9, 0x5b, 0xb5, 0x3a,
+	0x50, 0x61, 0xf9, 0xfe, 0x8a, 0x53, 0x39, 0xc1, 0xaf, 0x53, 0x51, 0x62, 0x55, 0x4e, 0xf1, 0xeb,
+	0xfb, 0xd4, 0xfa, 0x8a, 0x53, 0xf9, 0xbe, 0x7d, 0x0d, 0x1a, 0x1f, 0xa9, 0x51, 0x12, 0x46, 0xd7,
+	0x3e, 0x47, 0xa1, 0x4f, 0x60, 0x75, 0x6f, 0xe2, 0x9e, 0xaa, 0x48, 0x2b, 0x6b, 0x2b, 0x99, 0xb2,
+	0xf6, 0x89, 0x27, 0x65, 0x03, 0x56, 0xe7, 0x3c, 0xad, 0x22, 0x2f, 0x9b, 0xe3, 0xa4, 0xda, 0xff,
+	0xa0, 0x0a, 0x3d, 0xae, 0x7c, 0x7f, 0x1c, 0x3e, 0x26, 0x36, 0x76, 0xb1, 0x91, 0x54, 0x57, 0xb4,
+	0x62, 0xea, 0x8a, 0x72, 0xbc, 0x5f, 0xb5, 0xc0, 0xfb, 0x6d, 0xc2, 0xea, 0xa1, 0x0a, 0x3c, 0x15,
+	0x69, 0x9d, 0x24, 0x7f, 0x61, 0x37, 0x10, 0xc7, 0xfb, 0x9e, 0x08, 0x16, 0xea, 0x9f, 0x86, 0xc3,
+	0xdd, 0x82, 0xcc, 0x62, 0xb5, 0x20, 0xb3, 0x28, 0x32, 0xf2, 0x8d, 0xcf, 0xc3, 0xc8, 0x5f, 0x86,
+	0x96, 0x3b, 0x4a, 0xe4, 0x24, 0xb3, 0xec, 0xa8, 0xc9, 0x80, 0x5d, 0x6f, 0xb9, 0xe8, 0x68, 0x03,
+	0x56, 0xfd, 0x29, 0xe1, 0x7f, 0xe0, 0x6e, 0xfa, 0xd3, 0x43, 0x56, 0x5d, 0xe5, 0x65, 0x33, 0xed,
+	0x45, 0x61, 0x62, 0x41, 0xcc, 0xd5, 0x29, 0x53, 0x46, 0x1c, 0x44, 0xe1, 0x74, 0xf0, 0xfd, 0x30,
+	0x50, 0x9a, 0x67, 0x46, 0xc0, 0x27, 0x61, 0x40, 0x0c, 0x75, 0xa4, 0xdc, 0x09, 0x27, 0x6e, 0x70,
+	0x22, 0x02, 0x30, 0xd1, 0x7e, 0x05, 0x36, 0x3e, 0x4c, 0xc6, 0x2a, 0xe2, 0x05, 0x63, 0x4a, 0xbd,
+	0x7c, 0xc9, 0xec, 0x7f, 0x53, 0x81, 0xee, 0xa3, 0xc0, 0x4f, 0xf6, 0xc2, 0xf8, 0x66, 0xe0, 0xdd,
+	0xf6, 0xcb, 0xf6, 0xce, 0xcb, 0xe6, 0xde, 0xb9, 0x98, 0x9b, 0x4e, 0xd9, 0xa4, 0xbc, 0x75, 0x5e,
+	0x86, 0xaa, 0xe7, 0x33, 0x12, 0x5b, 0x9a, 0xcf, 0xf3, 0x23, 0xeb, 0x79, 0xe8, 0xf8, 0xf1, 0x20,
+	0x0c, 0x06, 0x87, 0x51, 0x38, 0x0f, 0x3c, 0x51, 0xb4, 0x80, 0x1f, 0x7f, 0x18, 0x7c, 0x87, 0x20,
+	0xc6, 0x26, 0xac, 0x1b, 0x9b, 0x90, 0x94, 0xff, 0x6e, 0xe4, 0x4e, 0x0d, 0xa1, 0x12, 0x7d, 0xef,
+	0x7a, 0xf6, 0x18, 0xfa, 0xdf, 0x9b, 0xfb, 0xa3, 0x23, 0xd6, 0xd5, 0xe8, 0x15, 0x45, 0x52, 0x1d,
+	0x69, 0xc0, 0x58, 0x5f, 0xcf, 0x53, 0xf7, 0x04, 0x59, 0xdd, 0x18, 0x13, 0x91, 0xf7, 0xe4, 0x44,
+	0x21, 0xe8, 0x3c, 0xf7, 0x34, 0x4b, 0x8c, 0xdc, 0xc7, 0xcc, 0xa9, 0xb3, 0xc5, 0x43, 0x13, 0x01,
+	0x24, 0xdc, 0xfd, 0xf7, 0x15, 0xb0, 0xb8, 0x95, 0x3b, 0xc7, 0xfe, 0x04, 0x0f, 0xbc, 0xe6, 0xab,
+	0x66, 0x61, 0x6c, 0x68, 0xf0, 0x56, 0x67, 0x61, 0xbc, 0xeb, 0x9d, 0x60, 0x02, 0x61, 0x8d, 0x4c,
+	0x5d, 0x88, 0x9f, 0xbc, 0x01, 0xd4, 0xc9, 0xcc, 0x8f, 0x94, 0xd9, 0x0e, 0x30, 0x88, 0x84, 0x01,
+	0x2f, 0x43, 0x5f, 0x2e, 0x7a, 0x75, 0xec, 0x4f, 0x0c, 0xf1, 0x6a, 0x97, 0xc1, 0xd8, 0xfe, 0x9d,
+	0x93, 0x19, 0x22, 0xea, 0x48, 0x1d, 0x44, 0x2a, 0x1e, 0x67, 0x06, 0x16, 0x75, 0xa7, 0x2d, 0x30,
+	0xaa, 0x6a, 0x0b, 0x1a, 0x9a, 0x00, 0x90, 0x89, 0x93, 0x4f, 0xfb, 0x77, 0x57, 0xa0, 0x97, 0x0d,
+	0x27, 0xbd, 0xd5, 0x22, 0xa5, 0x04, 0x23, 0xea, 0x5b, 0x2d, 0x52, 0x8a, 0x91, 0xa1, 0x4e, 0x9e,
+	0xf8, 0x53, 0x3f, 0x11, 0x76, 0x89, 0x92, 0xef, 0x23, 0xc0, 0xfa, 0x32, 0xf4, 0x33, 0x04, 0x99,
+	0x43, 0xaa, 0x29, 0x38, 0xad, 0x87, 0xc6, 0x95, 0x63, 0x7c, 0x11, 0xc2, 0x98, 0xe1, 0x9b, 0xd0,
+	0xa2, 0x79, 0x23, 0x1c, 0xcb, 0x57, 0x58, 0x5e, 0x1f, 0xb3, 0xb8, 0x08, 0x4e, 0x13, 0x4b, 0xd0,
+	0xcd, 0xf4, 0x3d, 0x78, 0x4a, 0x6b, 0x91, 0x8a, 0xbd, 0x59, 0x3d, 0xef, 0xb2, 0xd9, 0x90, 0x92,
+	0x3b, 0xf9, 0xfe, 0x3e, 0x07, 0x6d, 0x21, 0x25, 0xa8, 0x1a, 0x96, 0x3d, 0x03, 0xd3, 0x09, 0xc4,
+	0x07, 0xfc, 0x08, 0x6c, 0x48, 0x9f, 0x4e, 0x66, 0xca, 0x23, 0x9c, 0x7a, 0x13, 0xb7, 0x7d, 0x99,
+	0x62, 0xba, 0x04, 0x4f, 0xf6, 0x60, 0x65, 0x3c, 0x93, 0xb9, 0x5a, 0x19, 0xcf, 0xf0, 0x3b, 0xd6,
+	0x2b, 0xbe, 0x12, 0xcf, 0x6c, 0x0f, 0x36, 0x8b, 0xd5, 0x8b, 0x10, 0xeb, 0xcb, 0xd0, 0x57, 0x29,
+	0xcc, 0xbc, 0x13, 0x7b, 0x19, 0x98, 0x0e, 0x10, 0xed, 0x14, 0xda, 0x51, 0xac, 0x9f, 0x66, 0x72,
+	0xab, 0xcd, 0x30, 0x56, 0x4f, 0xff, 0x64, 0x05, 0x2c, 0xa3, 0x01, 0x37, 0x38, 0x22, 0xcc, 0x61,
+	0x41, 0x2d, 0x72, 0x83, 0x23, 0xa9, 0x97, 0xfe, 0x5b, 0x37, 0x01, 0x86, 0x91, 0xaf, 0x0e, 0x06,
+	0x7e, 0x70, 0x10, 0x0a, 0x7a, 0xb0, 0xf3, 0x64, 0x59, 0x38, 0x9d, 0x86, 0x01, 0xa3, 0xa1, 0x5b,
+	0x98, 0x95, 0x24, 0xa1, 0xad, 0xa1, 0xfe, 0x8b, 0x33, 0x11, 0x8f, 0xc2, 0x48, 0x6b, 0xca, 0xf9,
+	0xc3, 0xfe, 0xfd, 0x16, 0xac, 0x15, 0x87, 0xfa, 0xe4, 0x83, 0xbc, 0x9a, 0xea, 0xbd, 0x88, 0x13,
+	0x33, 0xe8, 0x4a, 0xd1, 0x6c, 0x21, 0x0b, 0x46, 0x9b, 0xe4, 0x4d, 0xb8, 0xc8, 0x2b, 0x6a, 0x54,
+	0xac, 0x19, 0xd6, 0xba, 0x63, 0x51, 0x5a, 0xd6, 0x83, 0x0f, 0xe6, 0x64, 0xcc, 0x94, 0x6d, 0x27,
+	0xcc, 0xca, 0xcb, 0xd3, 0x49, 0x81, 0x98, 0xe9, 0x75, 0xb8, 0x30, 0x9a, 0x47, 0x83, 0x62, 0x6f,
+	0xf9, 0x58, 0xae, 0x8f, 0xe6, 0xd1, 0x9d, 0x7c, 0x87, 0xdf, 0x86, 0xcd, 0x03, 0x3f, 0xf0, 0xe3,
+	0xb1, 0x59, 0x84, 0xba, 0xbd, 0x4a, 0xdd, 0xbe, 0xc8, 0xa9, 0x59, 0x29, 0xea, 0xfc, 0x87, 0xb0,
+	0x6e, 0xae, 0x25, 0x17, 0x68, 0xd0, 0xde, 0xfe, 0x52, 0xd9, 0x39, 0x29, 0x6c, 0x1a, 0xa7, 0x6f,
+	0xac, 0x3a, 0x55, 0x78, 0x15, 0xd6, 0xb0, 0xdb, 0x32, 0x77, 0xbc, 0x41, 0x9b, 0x72, 0x72, 0xe7,
+	0x11, 0xd7, 0xc2, 0x47, 0xf3, 0x3d, 0xf3, 0x68, 0xb2, 0x70, 0xde, 0x3e, 0xb3, 0x49, 0x3a, 0x06,
+	0xc6, 0xe9, 0xcc, 0x96, 0x68, 0x38, 0x3f, 0x38, 0xc8, 0xb4, 0xd1, 0xe9, 0x12, 0xdd, 0x9a, 0x1f,
+	0x1c, 0x50, 0xce, 0x77, 0xe0, 0x29, 0xc9, 0x19, 0x2b, 0x24, 0xe8, 0x8d, 0x02, 0x6d, 0x9e, 0x1c,
+	0x4e, 0xde, 0xa7, 0xd4, 0xb4, 0xd8, 0xf7, 0xe0, 0x82, 0xb9, 0x07, 0xc6, 0x33, 0x53, 0x21, 0xf3,
+	0x24, 0x7d, 0x5d, 0xcb, 0xb6, 0xca, 0xbd, 0x99, 0x56, 0x81, 0x4b, 0x95, 0x88, 0xe3, 0xbb, 0x5a,
+	0xfd, 0x8f, 0x10, 0x44, 0xf3, 0x37, 0x00, 0xdc, 0x38, 0xf6, 0xe3, 0x84, 0xb6, 0x45, 0xef, 0x3c,
+	0x19, 0x7c, 0x8b, 0x33, 0xe3, 0x76, 0xf9, 0x16, 0x74, 0x87, 0x6a, 0x60, 0x14, 0x3e, 0x57, 0xf4,
+	0xdf, 0x1e, 0xaa, 0x9b, 0x69, 0xf1, 0x17, 0xa0, 0x23, 0x65, 0xf9, 0x4c, 0xaf, 0x31, 0x0f, 0xc1,
+	0x30, 0x5a, 0x5d, 0xeb, 0x2d, 0xd8, 0x90, 0x2c, 0x87, 0x73, 0x7f, 0xe2, 0x0d, 0x54, 0xe0, 0x99,
+	0xf2, 0x7e, 0x8b, 0x13, 0xbf, 0x83, 0x69, 0x77, 0x02, 0x8f, 0x2e, 0x8c, 0x7b, 0x60, 0x65, 0x9d,
+	0x9a, 0x6b, 0x0b, 0x1c, 0xab, 0x44, 0x78, 0x95, 0xb7, 0xf8, 0x72, 0xfa, 0xba, 0x6f, 0x8f, 0xfc,
+	0x54, 0xa7, 0x25, 0xd5, 0x18, 0xf2, 0x99, 0x0b, 0xd4, 0x70, 0x9f, 0x13, 0x32, 0xe1, 0xf3, 0x9b,
+	0x70, 0xb1, 0x70, 0x72, 0x18, 0x3b, 0x5c, 0x24, 0xec, 0x60, 0xe5, 0x8e, 0xce, 0x3e, 0xa6, 0x58,
+	0x5f, 0x83, 0xad, 0xb2, 0x12, 0x83, 0xa9, 0x7b, 0x42, 0x64, 0x51, 0xd7, 0xd9, 0x58, 0x2c, 0xf5,
+	0xc0, 0x3d, 0xb1, 0xbe, 0x05, 0x97, 0x17, 0x0a, 0x65, 0x72, 0x72, 0x52, 0x29, 0xd4, 0x9c, 0x2d,
+	0x95, 0x2f, 0x98, 0xca, 0xca, 0xf1, 0xcc, 0x16, 0xce, 0xb7, 0xa9, 0x65, 0xa8, 0x39, 0x17, 0xf3,
+	0x48, 0x89, 0xcf, 0x9c, 0xfd, 0xbb, 0xc8, 0xc1, 0xcc, 0xe3, 0x31, 0x72, 0x30, 0x44, 0x9e, 0xcc,
+	0x64, 0x80, 0x2c, 0x40, 0x44, 0x96, 0x86, 0x87, 0x25, 0xf2, 0x26, 0x4e, 0x64, 0x29, 0x57, 0x73,
+	0xe8, 0x1e, 0x72, 0xe2, 0xb3, 0xd0, 0x8e, 0xe6, 0xf1, 0x78, 0x80, 0xc5, 0x45, 0x64, 0xd2, 0x75,
+	0x5a, 0x11, 0xd7, 0x6b, 0x52, 0x96, 0x19, 0x79, 0xa5, 0x29, 0x4b, 0x87, 0xc8, 0xab, 0xec, 0x1a,
+	0xe0, 0x1c, 0x29, 0xc1, 0x40, 0x88, 0x81, 0xb2, 0x3c, 0x07, 0x6d, 0xc4, 0xf1, 0x7a, 0x50, 0x4c,
+	0x34, 0x00, 0x82, 0x64, 0x28, 0x7f, 0xb5, 0x01, 0xc0, 0x12, 0x35, 0x32, 0x8e, 0xb9, 0x0a, 0xa4,
+	0xa9, 0x19, 0xf8, 0xc1, 0x28, 0xd4, 0xba, 0x71, 0x26, 0x21, 0x7b, 0x08, 0xdf, 0x25, 0xb0, 0xd6,
+	0xa2, 0x62, 0xc7, 0xb3, 0x0b, 0x90, 0xc7, 0xcd, 0x98, 0x65, 0x03, 0x56, 0x73, 0xa3, 0xaa, 0x4f,
+	0x69, 0x44, 0x2f, 0x43, 0x1f, 0x49, 0x39, 0xb3, 0x72, 0x96, 0x1d, 0x76, 0xa7, 0xee, 0x89, 0x51,
+	0xf7, 0x7b, 0xd0, 0xf9, 0x0c, 0xa9, 0x40, 0x6d, 0xc2, 0xc3, 0x1a, 0xe7, 0x3c, 0x3f, 0x5a, 0x20,
+	0x13, 0x9d, 0xf6, 0x67, 0x19, 0x00, 0x09, 0x77, 0x99, 0x19, 0xe9, 0xc6, 0x2a, 0x1b, 0xb2, 0x30,
+	0x90, 0xa7, 0xf7, 0x2a, 0xac, 0x19, 0x79, 0x32, 0x2b, 0x9e, 0xae, 0xd3, 0x4b, 0xb3, 0xf1, 0x68,
+	0xf2, 0x39, 0x99, 0x6c, 0x68, 0x16, 0x72, 0x32, 0x6d, 0x71, 0x03, 0x88, 0xf2, 0xe1, 0x9b, 0xb4,
+	0x55, 0x22, 0xbb, 0xce, 0x93, 0x68, 0x4e, 0x13, 0x73, 0xd3, 0x0d, 0x7a, 0x37, 0x77, 0x2d, 0x52,
+	0x79, 0xd6, 0x7b, 0x5e, 0x39, 0xfb, 0x12, 0x30, 0x6e, 0x4d, 0xaa, 0xe7, 0x45, 0xe8, 0xa5, 0xc3,
+	0xe1, 0x19, 0x6e, 0xb3, 0x9d, 0xae, 0x5e, 0x1b, 0x9a, 0xe0, 0x37, 0xa0, 0xa9, 0xb7, 0x1e, 0x71,
+	0x2c, 0x45, 0x3a, 0x5f, 0x36, 0xb7, 0xd3, 0x90, 0xdd, 0x68, 0x7d, 0x00, 0x9b, 0x34, 0x76, 0xf3,
+	0xd2, 0x64, 0x5c, 0xd2, 0x3d, 0x8f, 0x0c, 0xbb, 0x30, 0x75, 0x67, 0x3b, 0xc6, 0xbd, 0x4a, 0xd8,
+	0xe4, 0xdb, 0xf0, 0x8c, 0xd6, 0x15, 0x86, 0x91, 0xa7, 0x2f, 0x2b, 0x77, 0x34, 0x92, 0x6d, 0xd1,
+	0xe3, 0x73, 0x2b, 0x5a, 0xc3, 0x30, 0xf2, 0x78, 0xe0, 0x37, 0x47, 0x23, 0xde, 0x21, 0x6f, 0x66,
+	0x06, 0x36, 0x58, 0xc6, 0x9b, 0x47, 0xac, 0x34, 0xed, 0x8b, 0x2a, 0x29, 0xcd, 0x7d, 0x5b, 0x52,
+	0xf2, 0x13, 0x33, 0xc6, 0xc3, 0xb0, 0xc6, 0xda, 0x22, 0x3d, 0x31, 0xf7, 0x90, 0x04, 0x7b, 0x16,
+	0xda, 0xbc, 0x63, 0x38, 0xcb, 0x3a, 0x9f, 0x49, 0xda, 0xbd, 0x94, 0xfe, 0x15, 0xb0, 0x72, 0x1b,
+	0x8b, 0xb3, 0x59, 0xac, 0x37, 0x30, 0x76, 0x17, 0x65, 0x26, 0x1d, 0x5c, 0x7e, 0x87, 0x71, 0xfe,
+	0x0b, 0x8c, 0x07, 0xf3, 0xdb, 0x0c, 0x8b, 0xd8, 0xf7, 0xa0, 0x4b, 0x17, 0x57, 0x2a, 0x6b, 0x28,
+	0x2a, 0x5e, 0x9e, 0x54, 0x00, 0x60, 0xff, 0x42, 0x05, 0x7a, 0x48, 0xf6, 0x31, 0xd5, 0xb6, 0x84,
+	0xd3, 0xff, 0x22, 0x87, 0xf8, 0x06, 0xd4, 0x89, 0xf0, 0xa3, 0xa3, 0xfb, 0x64, 0x94, 0x22, 0x17,
+	0xb0, 0x7f, 0xae, 0x0a, 0x17, 0x3f, 0xce, 0x24, 0x32, 0x41, 0xa2, 0x82, 0x44, 0xdb, 0x35, 0x8a,
+	0x05, 0xa4, 0x58, 0xe4, 0x8e, 0xc8, 0x66, 0xd5, 0x60, 0xb9, 0xaa, 0x39, 0x96, 0xeb, 0x65, 0xe8,
+	0x53, 0x42, 0x3c, 0xc7, 0xd6, 0xe8, 0x22, 0x17, 0x8e, 0x0a, 0xc1, 0xfb, 0x04, 0xe5, 0xcb, 0x5c,
+	0xba, 0x5a, 0xff, 0x9c, 0x5d, 0x4d, 0x71, 0xaf, 0x8a, 0xe8, 0x2a, 0x5f, 0x35, 0x70, 0xaf, 0x8a,
+	0xf0, 0xba, 0x2e, 0x70, 0x7d, 0x8d, 0x05, 0xae, 0xef, 0x12, 0x34, 0x99, 0x28, 0x1d, 0xcf, 0x84,
+	0xfc, 0x6a, 0xd0, 0xf7, 0xbd, 0x19, 0x0d, 0x77, 0x1e, 0x61, 0x42, 0x4b, 0x86, 0x3b, 0x8f, 0xee,
+	0x91, 0x2c, 0xcc, 0x8f, 0xd9, 0xb0, 0x8e, 0xce, 0x7e, 0xd3, 0x69, 0xf8, 0x31, 0x59, 0xd4, 0xe1,
+	0xe5, 0x1b, 0xa8, 0x13, 0x3c, 0x2e, 0x06, 0x7f, 0xc8, 0x07, 0xbb, 0x8f, 0x09, 0x8e, 0xc1, 0x23,
+	0x5e, 0x15, 0x0b, 0x16, 0x99, 0x1c, 0xa2, 0x59, 0xd9, 0x6a, 0xae, 0x97, 0xcd, 0x0e, 0x09, 0x83,
+	0xbe, 0x0b, 0x5d, 0xb2, 0xfb, 0xfb, 0xc0, 0x9d, 0x2a, 0xcd, 0x1d, 0x90, 0x44, 0x86, 0x2d, 0xec,
+	0xe9, 0x7f, 0xb9, 0xf5, 0xed, 0xa2, 0x1b, 0x81, 0xfd, 0xdb, 0x15, 0xd8, 0x4c, 0x17, 0xd7, 0x71,
+	0x03, 0x8f, 0xaa, 0xa6, 0x6a, 0xf1, 0x12, 0x32, 0xcc, 0x69, 0x58, 0x00, 0x29, 0xc2, 0x6f, 0x6d,
+	0x8a, 0x5b, 0xce, 0x5b, 0x97, 0x2c, 0x74, 0xb5, 0x6c, 0xa1, 0xcb, 0xc6, 0x5c, 0x2b, 0x1b, 0xb3,
+	0xf5, 0x0c, 0xb4, 0xfc, 0xf8, 0xc3, 0x83, 0x83, 0x89, 0x1f, 0xf0, 0xbd, 0xd2, 0x74, 0x32, 0x80,
+	0x7d, 0x00, 0x6b, 0x0f, 0xdd, 0xf8, 0x68, 0x2f, 0x0a, 0x0f, 0x23, 0x15, 0xc7, 0x9f, 0xc7, 0x5d,
+	0x80, 0x78, 0xa0, 0xd4, 0x5a, 0xb8, 0xee, 0xf0, 0x07, 0x42, 0x69, 0xd9, 0xe5, 0xa2, 0xe3, 0x0f,
+	0xfb, 0x1f, 0x56, 0xa0, 0xa9, 0x4d, 0x92, 0x71, 0xf4, 0x64, 0xbc, 0x9c, 0x9e, 0xf3, 0x55, 0xfc,
+	0xdc, 0xf5, 0xac, 0x77, 0xa1, 0x39, 0x93, 0x9e, 0x94, 0x1a, 0xf4, 0x16, 0xbb, 0xea, 0xa4, 0xd9,
+	0xf3, 0x9d, 0xe9, 0xea, 0xce, 0x20, 0xed, 0xab, 0x52, 0xe3, 0xa8, 0x1a, 0x2d, 0x5e, 0x8b, 0x20,
+	0xfa, 0x4a, 0xa7, 0x8e, 0x18, 0x6c, 0x0e, 0x99, 0x4b, 0xd3, 0x66, 0xf9, 0x98, 0x6d, 0xe1, 0x76,
+	0xc2, 0x20, 0x27, 0x47, 0xab, 0xe4, 0xe4, 0x68, 0x39, 0x3b, 0xec, 0x95, 0x27, 0xb2, 0xc3, 0xb6,
+	0xef, 0x40, 0x87, 0xd5, 0x6e, 0x52, 0xf9, 0x3b, 0x00, 0xa3, 0x30, 0xe0, 0x2b, 0x2d, 0x5e, 0xa2,
+	0x7b, 0xe3, 0xac, 0x8e, 0x91, 0x91, 0xfb, 0x17, 0x85, 0x59, 0xff, 0xca, 0x94, 0xe3, 0x7f, 0xa6,
+	0xfe, 0x49, 0xe5, 0x4f, 0xd2, 0x3f, 0xce, 0x9a, 0xeb, 0xdf, 0x1f, 0xd5, 0x58, 0xcb, 0x82, 0x2d,
+	0x7c, 0x21, 0x7b, 0xf5, 0xb7, 0x49, 0x4d, 0xc5, 0xd5, 0x49, 0xdf, 0x37, 0x0b, 0x2a, 0x45, 0x31,
+	0x87, 0x77, 0xb2, 0x8c, 0xd6, 0x75, 0x31, 0x6c, 0x42, 0x88, 0x88, 0xf4, 0x2e, 0x2d, 0xc8, 0xf5,
+	0xd3, 0x09, 0x25, 0xe3, 0x26, 0x1a, 0xe5, 0x75, 0x51, 0x80, 0x52, 0xb9, 0xda, 0xd2, 0x72, 0x32,
+	0x50, 0x52, 0x82, 0x52, 0xb9, 0x1d, 0x58, 0x63, 0x63, 0x15, 0x1a, 0x1f, 0x13, 0xbe, 0xf5, 0xf3,
+	0x18, 0xa1, 0x1e, 0x15, 0xc1, 0x31, 0x33, 0x65, 0x7c, 0x13, 0xfa, 0x8f, 0x95, 0x3a, 0x32, 0xeb,
+	0x58, 0x3d, 0xaf, 0x8e, 0x2e, 0x96, 0xc8, 0xaa, 0x78, 0x51, 0xdb, 0x3c, 0xb9, 0x9e, 0x37, 0xf8,
+	0xbe, 0x0a, 0x4e, 0x05, 0x45, 0x77, 0x08, 0x7a, 0xd3, 0xf3, 0x3e, 0x51, 0xc1, 0xa9, 0xb5, 0x0d,
+	0x1b, 0xee, 0x68, 0x34, 0x9f, 0xce, 0x27, 0x6e, 0xe2, 0x1f, 0x2b, 0xd6, 0x2e, 0x4d, 0x8f, 0x35,
+	0xc6, 0xbe, 0x60, 0x26, 0xee, 0xe0, 0x5d, 0x7d, 0x3c, 0x43, 0x5c, 0x3c, 0x71, 0x13, 0x15, 0x27,
+	0xef, 0x0c, 0xc6, 0xe1, 0x5c, 0x9c, 0xa1, 0x5a, 0x8c, 0x8b, 0x25, 0xe1, 0x5e, 0x38, 0x67, 0x7f,
+	0xa8, 0x6b, 0xb0, 0xc9, 0xa0, 0x01, 0xf6, 0xce, 0x2c, 0xc0, 0x96, 0x89, 0x17, 0x38, 0xf5, 0x63,
+	0x4c, 0x4c, 0x0b, 0xbd, 0x07, 0x3d, 0x61, 0x44, 0x46, 0x42, 0x6c, 0xb6, 0xcf, 0xa3, 0xb1, 0x3a,
+	0x09, 0x31, 0x27, 0x23, 0x16, 0x60, 0xfd, 0x28, 0x7b, 0xbc, 0x18, 0xc6, 0xd8, 0x4b, 0x0f, 0xc4,
+	0x55, 0x58, 0xa3, 0x04, 0x53, 0x84, 0xbd, 0xc2, 0xf4, 0x3e, 0xc2, 0x8d, 0x2a, 0x4a, 0xec, 0xbe,
+	0xab, 0x25, 0x76, 0xdf, 0xf6, 0xff, 0xa8, 0x40, 0x2f, 0xfb, 0x24, 0x04, 0xf7, 0x0a, 0xb0, 0x1a,
+	0x8e, 0x0b, 0x73, 0x59, 0x31, 0xb5, 0x20, 0xf8, 0xdd, 0x14, 0x6c, 0xdd, 0x86, 0x3e, 0x69, 0x11,
+	0x8d, 0x9c, 0xcb, 0x1c, 0x65, 0xb2, 0x46, 0x9c, 0x5e, 0xac, 0xbf, 0xb9, 0x96, 0xd7, 0xe1, 0x02,
+	0xf6, 0x75, 0x18, 0x06, 0x9e, 0x59, 0x13, 0xe3, 0xc2, 0xf5, 0x99, 0x4a, 0x6e, 0x85, 0x81, 0x67,
+	0xe4, 0xbf, 0x0b, 0x6b, 0x2e, 0x52, 0x5d, 0x66, 0xe6, 0xda, 0xf9, 0xcd, 0xf6, 0xa9, 0x50, 0x56,
+	0x8f, 0x7d, 0x0a, 0x2d, 0xa4, 0x9c, 0x6f, 0x46, 0x2a, 0x20, 0xf1, 0x2b, 0xd1, 0xd8, 0xcc, 0x9b,
+	0x89, 0xf8, 0x15, 0x21, 0xcc, 0x99, 0x5d, 0x84, 0xba, 0x69, 0x86, 0xc0, 0x1f, 0xd6, 0x26, 0xac,
+	0x0a, 0xab, 0x26, 0x14, 0x0f, 0x7f, 0x15, 0xf9, 0xb8, 0xda, 0x02, 0x1f, 0xf7, 0x6b, 0x75, 0x68,
+	0x51, 0xbb, 0x74, 0xe3, 0x96, 0x08, 0x6f, 0x2b, 0xa5, 0xc2, 0xdb, 0x8c, 0x85, 0x34, 0x3b, 0x23,
+	0xd7, 0x35, 0x67, 0x41, 0x1e, 0x76, 0x7e, 0x9a, 0x13, 0x01, 0x37, 0x87, 0xf3, 0x53, 0x4e, 0x4c,
+	0x05, 0x7f, 0x35, 0xb9, 0xf4, 0x34, 0xdb, 0xfb, 0xd8, 0x0f, 0xa4, 0x88, 0x5c, 0x24, 0x8f, 0xfd,
+	0xa0, 0x54, 0xfe, 0xba, 0x5a, 0x94, 0xbf, 0x62, 0xe9, 0x70, 0xe2, 0xc9, 0xb9, 0x67, 0xf1, 0x6c,
+	0x33, 0x9c, 0x78, 0x7c, 0xae, 0xaf, 0x00, 0x60, 0xd5, 0x71, 0x12, 0x29, 0xf7, 0x48, 0x1b, 0x07,
+	0x3f, 0xf6, 0x83, 0x7d, 0x02, 0x58, 0x5f, 0x82, 0xee, 0x81, 0xeb, 0x4f, 0x94, 0xa7, 0x73, 0x30,
+	0x85, 0xd5, 0x61, 0xa0, 0x64, 0xda, 0x86, 0x0d, 0x62, 0x3e, 0xb2, 0x29, 0x9a, 0x11, 0x15, 0x98,
+	0x1d, 0xca, 0x38, 0x49, 0x39, 0x16, 0x51, 0xc5, 0xbd, 0x08, 0xbd, 0x58, 0x4d, 0x0e, 0x0c, 0x59,
+	0x24, 0xcb, 0xad, 0x3a, 0x08, 0x4d, 0x25, 0x91, 0x2f, 0x43, 0xdf, 0xc5, 0x45, 0x18, 0xc4, 0xca,
+	0x8d, 0x59, 0x07, 0xc5, 0x0a, 0xa1, 0x2e, 0x81, 0xf7, 0x09, 0xca, 0x16, 0x66, 0xd4, 0x83, 0x5c,
+	0x66, 0xc2, 0x0b, 0xdd, 0xac, 0x0b, 0x37, 0xb3, 0x22, 0x9a, 0xb0, 0x13, 0x76, 0x29, 0x9b, 0x5c,
+	0x36, 0x16, 0xee, 0x31, 0xfc, 0x63, 0x3d, 0xc5, 0xaf, 0x21, 0x97, 0x42, 0x39, 0xcd, 0x99, 0x66,
+	0x22, 0x50, 0xea, 0x78, 0x98, 0xcd, 0xf7, 0x3b, 0xb2, 0x51, 0xa9, 0x33, 0x62, 0x76, 0xba, 0xb9,
+	0xc0, 0x0e, 0x52, 0x6f, 0x78, 0x03, 0xf3, 0xfe, 0xbe, 0x06, 0x9b, 0x85, 0xb1, 0x0e, 0x22, 0xe5,
+	0xcd, 0x47, 0x2c, 0x8e, 0x42, 0xe4, 0x69, 0x0e, 0xd9, 0xa1, 0x24, 0xfb, 0xc7, 0xa0, 0xcb, 0x15,
+	0xfd, 0x79, 0x0a, 0xa4, 0xf5, 0xbe, 0xb4, 0xdf, 0x65, 0xf3, 0x13, 0xee, 0xff, 0x6b, 0x50, 0xe7,
+	0x11, 0x57, 0x4a, 0x46, 0x9c, 0x1e, 0x25, 0x87, 0x33, 0xd9, 0xbf, 0xb1, 0x02, 0xed, 0x07, 0xae,
+	0x3f, 0x11, 0xb6, 0xe5, 0xf3, 0x39, 0x2c, 0x59, 0x50, 0x33, 0x54, 0xb1, 0xf4, 0xdf, 0xfa, 0x7a,
+	0x9e, 0x28, 0x3e, 0xd7, 0x92, 0xc1, 0xa4, 0x97, 0xf3, 0x74, 0x5c, 0xbd, 0x48, 0xc7, 0x15, 0x78,
+	0x93, 0xd5, 0x05, 0xde, 0x24, 0xa5, 0x0e, 0x1b, 0x26, 0xa9, 0x7a, 0x05, 0x80, 0xd5, 0x72, 0xd4,
+	0xa1, 0x26, 0x7b, 0xb2, 0x12, 0x84, 0x1a, 0x45, 0x4a, 0xd6, 0x4f, 0x26, 0x7c, 0xd7, 0xb5, 0x1c,
+	0xfe, 0x60, 0xd3, 0x71, 0x9a, 0x12, 0x3a, 0x3d, 0x2d, 0x47, 0x7f, 0x22, 0x03, 0xda, 0x64, 0x35,
+	0xbf, 0x3f, 0xb1, 0xde, 0x41, 0x46, 0xd3, 0xcf, 0x99, 0xf9, 0xe4, 0x15, 0xba, 0xc6, 0xdc, 0x22,
+	0x0b, 0xea, 0xb3, 0x85, 0x0f, 0xb1, 0xe3, 0x27, 0x03, 0x2a, 0x9a, 0xce, 0x6b, 0x6b, 0xea, 0x9e,
+	0x60, 0xf6, 0x5d, 0xcf, 0xfa, 0x2a, 0x89, 0xe8, 0xa3, 0xc1, 0xe1, 0x24, 0x1c, 0xba, 0x93, 0x34,
+	0x1f, 0xcf, 0xf3, 0x1a, 0x26, 0x7d, 0x87, 0x52, 0x38, 0xbb, 0xfd, 0x06, 0x1b, 0x1e, 0x38, 0x8a,
+	0x9c, 0xfc, 0xfc, 0x78, 0x30, 0x0f, 0x22, 0x24, 0x8e, 0xb0, 0x1c, 0xad, 0x65, 0xd3, 0xe9, 0xf8,
+	0xf1, 0x23, 0x02, 0x62, 0x11, 0xfb, 0x47, 0x61, 0x63, 0x27, 0x9c, 0xce, 0x54, 0x62, 0x48, 0xdc,
+	0xb5, 0x47, 0x72, 0x6a, 0xb6, 0x7b, 0x92, 0x22, 0x77, 0xb1, 0xd8, 0x3d, 0xc1, 0xda, 0xb5, 0xca,
+	0x2f, 0xf0, 0x06, 0x89, 0x18, 0xe6, 0x93, 0xb7, 0x34, 0x69, 0xfc, 0x02, 0xef, 0xe1, 0xb4, 0x38,
+	0xe1, 0xd5, 0xc2, 0x84, 0xdb, 0xff, 0x73, 0x05, 0xfa, 0x46, 0xeb, 0xd4, 0xee, 0x4b, 0xd0, 0x1b,
+	0x65, 0xa0, 0xec, 0x3e, 0xef, 0x1a, 0x50, 0x71, 0x58, 0x9d, 0x47, 0x99, 0x80, 0x98, 0x5b, 0x87,
+	0xd1, 0x3c, 0xd2, 0x82, 0xe1, 0xfb, 0xa9, 0x4c, 0x0b, 0x0f, 0x99, 0xe9, 0x8f, 0xb2, 0x70, 0xd2,
+	0x16, 0x87, 0xaf, 0xe5, 0x5e, 0xf8, 0x5f, 0xdb, 0xd5, 0x8d, 0xc2, 0xe9, 0x80, 0xfa, 0x2e, 0x57,
+	0x41, 0x73, 0x14, 0x4e, 0xf7, 0xf0, 0xdb, 0xfa, 0x0a, 0x58, 0x69, 0x22, 0x91, 0x63, 0xc6, 0xae,
+	0xed, 0xeb, 0x5c, 0x37, 0x3d, 0x2f, 0x75, 0xce, 0x40, 0x3c, 0x4b, 0x48, 0x61, 0x55, 0x9c, 0x33,
+	0xd4, 0xe4, 0x00, 0x11, 0x06, 0x19, 0x07, 0xb2, 0xe9, 0x30, 0xa6, 0xf2, 0xe6, 0x6d, 0xb1, 0x11,
+	0x3b, 0x26, 0xbf, 0x08, 0x3d, 0xe2, 0x92, 0xb1, 0x35, 0x3e, 0xfd, 0x7c, 0x3f, 0x74, 0x10, 0xba,
+	0x13, 0x4e, 0x53, 0xca, 0x90, 0xb1, 0x7f, 0x9a, 0x4b, 0xee, 0x08, 0x42, 0xfb, 0x92, 0xcb, 0xbe,
+	0x0f, 0x70, 0xdb, 0x3f, 0xf6, 0x03, 0x66, 0x8c, 0x71, 0x7c, 0xf3, 0x88, 0x2c, 0x81, 0x63, 0xe1,
+	0x5f, 0x9b, 0xa3, 0x79, 0xb4, 0x8f, 0xdf, 0x6c, 0x60, 0x43, 0x77, 0x4e, 0xee, 0x0e, 0x65, 0x18,
+	0x53, 0x64, 0x1f, 0x41, 0xf7, 0xb6, 0x7b, 0xba, 0x3f, 0x9f, 0xcd, 0x26, 0xa7, 0xda, 0x05, 0x99,
+	0xce, 0xab, 0x08, 0x63, 0xf8, 0x03, 0x9b, 0xc1, 0x25, 0xf3, 0x03, 0x4f, 0x9d, 0xc8, 0x9a, 0x35,
+	0x55, 0xe0, 0xed, 0xe2, 0x37, 0xb9, 0x72, 0x44, 0xee, 0x63, 0x31, 0x2e, 0xa2, 0xff, 0xf6, 0x7d,
+	0xe8, 0xdc, 0x75, 0x83, 0xf8, 0xa3, 0x30, 0x61, 0x5d, 0x79, 0x19, 0x03, 0xaf, 0x31, 0xec, 0x8a,
+	0x81, 0x61, 0xcb, 0xd1, 0xe3, 0x1d, 0x68, 0x63, 0x6d, 0xb7, 0xc2, 0x13, 0x6d, 0x48, 0x5b, 0x10,
+	0x17, 0xad, 0x41, 0x75, 0x18, 0x9e, 0x68, 0x63, 0xb8, 0x61, 0x78, 0x92, 0x56, 0x5e, 0xcd, 0x2a,
+	0xb7, 0xdf, 0xe7, 0x4e, 0xe1, 0x92, 0x2c, 0xa9, 0x27, 0x6d, 0x7e, 0xc5, 0xa4, 0x1a, 0xca, 0xea,
+	0x1a, 0x42, 0x2f, 0x1d, 0x20, 0xd9, 0x3f, 0x94, 0x0b, 0xb1, 0x8e, 0xc3, 0x44, 0x99, 0x3b, 0xbd,
+	0x89, 0x00, 0x6d, 0x89, 0x9f, 0xf8, 0xa3, 0xa3, 0xd4, 0x0b, 0x87, 0x2b, 0x6f, 0x33, 0x8c, 0x17,
+	0xe7, 0x1e, 0x74, 0x76, 0xbd, 0x70, 0x82, 0xed, 0xd0, 0x62, 0xdf, 0x80, 0xd6, 0x81, 0x1b, 0xc4,
+	0x26, 0xae, 0xba, 0x5c, 0x30, 0x3e, 0x31, 0x7b, 0xe4, 0x34, 0x31, 0x37, 0x9d, 0xd8, 0x5f, 0x5f,
+	0x81, 0x26, 0x56, 0xa5, 0xab, 0xa1, 0x6e, 0x19, 0x26, 0xa4, 0x67, 0x6a, 0x5c, 0xa8, 0xcf, 0x5a,
+	0x71, 0xcf, 0x06, 0xf5, 0x44, 0xeb, 0x49, 0x48, 0x01, 0x72, 0xc3, 0x20, 0x5a, 0xf0, 0x15, 0x58,
+	0xfb, 0x34, 0x24, 0x0a, 0x20, 0x3d, 0x9a, 0xb2, 0x29, 0xfa, 0x08, 0x37, 0x4e, 0x2c, 0xd1, 0x6e,
+	0xe1, 0xc9, 0xc0, 0x24, 0xd1, 0x9a, 0xc3, 0xf0, 0x84, 0x0f, 0x02, 0xc9, 0xb8, 0xa2, 0x38, 0x19,
+	0xf0, 0x4e, 0xac, 0x6b, 0x07, 0xad, 0x28, 0x4e, 0x6e, 0xe9, 0xed, 0xc8, 0x19, 0x54, 0xe0, 0xc9,
+	0x2d, 0xd2, 0x24, 0xc0, 0x1d, 0x56, 0x3e, 0xc4, 0x0a, 0xb9, 0x43, 0x29, 0xce, 0xec, 0x55, 0x9b,
+	0x61, 0x5c, 0xfe, 0x0a, 0x80, 0x64, 0xc1, 0x0a, 0x9a, 0x7c, 0x4d, 0x31, 0xe4, 0x4e, 0xe0, 0xd9,
+	0x3f, 0x53, 0x31, 0x6d, 0x91, 0x96, 0x6c, 0x15, 0xed, 0x09, 0x34, 0x74, 0x63, 0x55, 0x2a, 0xf5,
+	0xd4, 0x7e, 0x51, 0xec, 0x09, 0x44, 0x1e, 0x52, 0x39, 0xe3, 0xdd, 0xea, 0x13, 0x79, 0xab, 0xd9,
+	0xff, 0x6e, 0x05, 0x7a, 0xb8, 0x74, 0x4c, 0xaf, 0x50, 0x67, 0xbe, 0x09, 0x6d, 0x8f, 0x56, 0x78,
+	0xf9, 0x4e, 0xc8, 0x77, 0xdf, 0x01, 0xce, 0x4f, 0x28, 0xf1, 0xba, 0x2c, 0xff, 0x52, 0xc3, 0x5c,
+	0xf3, 0x8c, 0xf0, 0xe2, 0xeb, 0xbb, 0xdd, 0x58, 0xfc, 0x6a, 0x71, 0xf1, 0x0b, 0x8b, 0x56, 0x3b,
+	0x7b, 0xd1, 0xea, 0xe7, 0x2c, 0xda, 0xea, 0x79, 0x8b, 0xd6, 0x28, 0x2c, 0x1a, 0x62, 0xcf, 0xb1,
+	0x1b, 0x0f, 0x70, 0x57, 0x49, 0x17, 0x9b, 0x7c, 0x6f, 0x8e, 0x5d, 0x44, 0x1c, 0xc2, 0x8d, 0xfc,
+	0x7f, 0x60, 0xe9, 0x43, 0xc2, 0x90, 0x25, 0xab, 0x7b, 0x03, 0x5a, 0xbe, 0x17, 0x4e, 0x96, 0x9b,
+	0xd4, 0x17, 0xcf, 0x08, 0xe6, 0xa6, 0xa3, 0xf6, 0xab, 0x2b, 0x6c, 0xc6, 0x69, 0xee, 0xf6, 0x3b,
+	0xd0, 0x47, 0x2c, 0x6d, 0x9e, 0x8b, 0x4a, 0x89, 0xe6, 0xa8, 0x70, 0xa7, 0x92, 0x5a, 0xdc, 0xac,
+	0x66, 0x3b, 0x15, 0xdb, 0x17, 0xae, 0x5a, 0xc6, 0x56, 0x17, 0x34, 0x73, 0x64, 0x5e, 0xb8, 0xef,
+	0xc2, 0xa5, 0x92, 0x32, 0xf1, 0x7c, 0x98, 0x91, 0x23, 0x9b, 0x0b, 0xe5, 0xf6, 0xe7, 0xc3, 0x5d,
+	0xcf, 0x7a, 0x03, 0x56, 0x3d, 0xba, 0x69, 0x44, 0xcc, 0xf2, 0x54, 0xae, 0xb3, 0xd9, 0x25, 0xe4,
+	0x48, 0x36, 0xeb, 0x15, 0xa8, 0xe1, 0x34, 0x94, 0xfa, 0x61, 0x6a, 0xec, 0xe3, 0x50, 0x16, 0x7b,
+	0xc4, 0xca, 0xbd, 0xbb, 0x91, 0xaf, 0x02, 0x72, 0x92, 0xc2, 0x1e, 0xa5, 0xbb, 0xb9, 0xe6, 0x34,
+	0xe2, 0xf9, 0x50, 0x5f, 0xe0, 0x19, 0xce, 0x5b, 0xa1, 0xb4, 0x14, 0xad, 0x11, 0xb9, 0x39, 0x71,
+	0x47, 0x47, 0x19, 0x95, 0x80, 0xe4, 0x26, 0x42, 0x44, 0x40, 0x46, 0x8d, 0xec, 0x87, 0x23, 0xdf,
+	0x9d, 0x58, 0x5f, 0x03, 0x38, 0xa0, 0xe6, 0xc8, 0x95, 0xae, 0x52, 0x32, 0xa4, 0xac, 0x47, 0x8e,
+	0x91, 0xd5, 0xfe, 0xd3, 0x2a, 0x74, 0xef, 0xb2, 0x72, 0x73, 0xa2, 0xb4, 0x83, 0x9d, 0x1f, 0x0f,
+	0xa2, 0x70, 0x18, 0x26, 0x42, 0x9d, 0x35, 0xfc, 0xd8, 0xc1, 0xcf, 0x1f, 0x04, 0x8b, 0x70, 0xa6,
+	0x2f, 0x6c, 0xce, 0xc1, 0xbe, 0xf6, 0xe4, 0x0e, 0xf6, 0x45, 0xdb, 0xc5, 0xfa, 0xe7, 0xb1, 0x5d,
+	0xfc, 0x06, 0xf4, 0x52, 0xbc, 0x95, 0x19, 0x8e, 0x2c, 0x45, 0x5e, 0x1d, 0x8d, 0xbc, 0x34, 0xeb,
+	0x89, 0xa4, 0xb2, 0x29, 0x9f, 0x91, 0x98, 0x04, 0x53, 0xf7, 0x24, 0xe7, 0x97, 0xdf, 0x37, 0x7c,
+	0xfc, 0x53, 0x52, 0xbf, 0xa8, 0x01, 0xdc, 0x53, 0xec, 0x1a, 0xdf, 0x4d, 0x7d, 0xff, 0x53, 0x53,
+	0x6f, 0x12, 0x33, 0x12, 0xcb, 0x9c, 0x19, 0x52, 0x76, 0x18, 0x8a, 0xd3, 0xbd, 0xeb, 0x2d, 0x77,
+	0x3e, 0x83, 0x65, 0xce, 0x67, 0xf6, 0x08, 0xfa, 0x3b, 0x63, 0x37, 0x79, 0xa0, 0xe2, 0xd8, 0x3d,
+	0xe4, 0xe5, 0xdf, 0x82, 0xc6, 0x94, 0x3f, 0x75, 0x88, 0x20, 0xf9, 0x64, 0x22, 0x31, 0x4f, 0xdb,
+	0x36, 0x11, 0xa0, 0x15, 0x2f, 0xb8, 0xcb, 0x0d, 0x86, 0x0b, 0x77, 0x39, 0xc9, 0xb0, 0xff, 0xc2,
+	0x0a, 0x5c, 0xc0, 0x56, 0x0a, 0xbb, 0xa2, 0x9c, 0xa6, 0x58, 0xee, 0x54, 0x9b, 0x59, 0x8b, 0x56,
+	0x4d, 0x6b, 0xd1, 0x1c, 0x0b, 0x58, 0x2b, 0xb0, 0x80, 0xa9, 0xad, 0x58, 0xdd, 0xb4, 0x15, 0x5b,
+	0x30, 0x30, 0x5d, 0x5d, 0x34, 0x30, 0xcd, 0x4c, 0x6b, 0x1b, 0x39, 0xd3, 0xda, 0x9c, 0x3d, 0x6e,
+	0xb3, 0x60, 0x8f, 0xbb, 0xcc, 0xd2, 0xd5, 0xfe, 0xc3, 0x3a, 0xb1, 0x34, 0x8b, 0x47, 0xe3, 0x07,
+	0x34, 0x09, 0xcb, 0x0c, 0x81, 0xcb, 0xc7, 0x9f, 0x9b, 0xb2, 0xd5, 0xb3, 0xc3, 0x7c, 0x34, 0x16,
+	0x2c, 0x6b, 0x73, 0x5e, 0x96, 0x89, 0x92, 0x9b, 0x28, 0xf3, 0xb2, 0x4c, 0x88, 0xc6, 0x31, 0xdd,
+	0x35, 0x59, 0x4c, 0x0b, 0x61, 0xe6, 0xa9, 0x49, 0xd2, 0xa8, 0xc7, 0x4a, 0x3b, 0xab, 0x81, 0x96,
+	0x46, 0x3d, 0x56, 0x99, 0x5f, 0x1f, 0x67, 0x30, 0x74, 0x6e, 0x2d, 0x82, 0x50, 0xf9, 0xe7, 0xa1,
+	0x93, 0x29, 0x77, 0x53, 0x71, 0x0f, 0x68, 0x25, 0x2a, 0x8b, 0x58, 0xe5, 0xc0, 0x89, 0x4c, 0xc6,
+	0xf7, 0x44, 0xca, 0x23, 0x46, 0x52, 0xac, 0xe0, 0x2e, 0x33, 0x37, 0x5e, 0x74, 0x05, 0xcf, 0xaf,
+	0x7a, 0xbf, 0xb0, 0xea, 0xcf, 0x41, 0x5b, 0xcc, 0xab, 0xc8, 0x9e, 0x78, 0x8d, 0xfb, 0xc2, 0x20,
+	0x32, 0x37, 0x36, 0xb6, 0xc5, 0x7a, 0x4e, 0x71, 0xb3, 0xe8, 0x22, 0xfc, 0x6c, 0x99, 0x8b, 0x70,
+	0xb9, 0x8b, 0xef, 0x73, 0x4b, 0x5c, 0x7c, 0xc5, 0x1b, 0xfc, 0x79, 0xde, 0x51, 0xd1, 0x74, 0x88,
+	0x24, 0x3e, 0xc9, 0xe2, 0x5f, 0x60, 0x9f, 0x71, 0xfc, 0x5f, 0x86, 0xb8, 0xec, 0xd4, 0x28, 0xc4,
+	0x40, 0x5c, 0xaf, 0xc0, 0x9a, 0xe7, 0x86, 0x84, 0x67, 0xde, 0x7a, 0xf3, 0xcd, 0x41, 0xe2, 0xcf,
+	0xe2, 0xad, 0x2f, 0xd1, 0xa6, 0xec, 0x1b, 0xf0, 0x87, 0xfe, 0x2c, 0xb6, 0xbf, 0x01, 0x7d, 0xa1,
+	0xcc, 0x70, 0x13, 0x2c, 0xd9, 0xdd, 0x9b, 0xb0, 0xca, 0xfb, 0x40, 0x6c, 0x5f, 0xe5, 0xcb, 0x3e,
+	0x81, 0xee, 0xfe, 0x69, 0x9c, 0xa8, 0xa9, 0xe0, 0xa2, 0x54, 0x7a, 0x53, 0x31, 0xa4, 0x37, 0x67,
+	0x1e, 0x0d, 0xd3, 0xbe, 0x99, 0x09, 0x38, 0x6d, 0xdf, 0x9c, 0xc7, 0x5c, 0xb5, 0x3c, 0xe6, 0xb2,
+	0xff, 0x63, 0x05, 0x2c, 0x69, 0xd4, 0xd4, 0x8e, 0x97, 0xb5, 0xff, 0x2e, 0x34, 0xc8, 0xa8, 0x5c,
+	0xa8, 0x92, 0xf6, 0xf6, 0xf3, 0x45, 0x55, 0x50, 0x11, 0xc9, 0x39, 0xab, 0x58, 0x60, 0xd7, 0xb3,
+	0xae, 0x67, 0x68, 0xb5, 0x5a, 0x46, 0x1d, 0xe5, 0xb1, 0x70, 0x0e, 0xe9, 0x26, 0xb8, 0xb4, 0x69,
+	0xa0, 0xa8, 0x9a, 0xd3, 0x64, 0x00, 0xfb, 0x3a, 0x19, 0xa2, 0x8c, 0x7a, 0x51, 0x94, 0x31, 0xd2,
+	0xae, 0x71, 0x6e, 0x62, 0x7d, 0x0c, 0x4f, 0x85, 0xac, 0x6e, 0x1d, 0x4c, 0xe3, 0x43, 0x11, 0xbd,
+	0x9a, 0x24, 0xf6, 0xf9, 0x43, 0xb9, 0x28, 0x15, 0x3c, 0x88, 0x0f, 0x39, 0x89, 0x1a, 0x89, 0xa1,
+	0x71, 0x6b, 0x7e, 0xaa, 0x29, 0x87, 0xc3, 0x30, 0xf4, 0x62, 0xc3, 0x8b, 0x8d, 0xbe, 0xc5, 0xa8,
+	0x60, 0x7e, 0x3a, 0xc8, 0x9c, 0xba, 0x56, 0x87, 0xf3, 0xd3, 0x0f, 0xe6, 0x53, 0x72, 0x21, 0x9f,
+	0x9f, 0x9a, 0x46, 0xdc, 0x98, 0x51, 0x5f, 0x29, 0x91, 0x3a, 0xc8, 0xe4, 0x16, 0x55, 0xa7, 0x11,
+	0xa9, 0x03, 0x5a, 0xb3, 0x04, 0xda, 0xfb, 0x33, 0x85, 0x94, 0xcf, 0xfe, 0x38, 0x5c, 0xb4, 0xe1,
+	0xae, 0x50, 0xee, 0x9c, 0x0d, 0xf7, 0x15, 0x00, 0xee, 0x9b, 0x19, 0x30, 0x8e, 0x20, 0x74, 0xc3,
+	0x52, 0x9c, 0x3d, 0xae, 0xc1, 0xe4, 0x58, 0x75, 0xb5, 0xcc, 0xb2, 0xfe, 0x8d, 0x0a, 0xb4, 0xb1,
+	0x3d, 0x3d, 0xde, 0xb4, 0x4e, 0x63, 0xa3, 0x70, 0x9d, 0xa4, 0xc2, 0x7e, 0x4b, 0x5c, 0x25, 0x85,
+	0x58, 0x5a, 0xbc, 0xed, 0xa5, 0x1e, 0xf6, 0x94, 0xa4, 0x1a, 0xaf, 0xf1, 0x90, 0x0d, 0x16, 0x2a,
+	0x4f, 0xc4, 0x18, 0x83, 0xa6, 0xc9, 0x20, 0x26, 0xea, 0x37, 0x56, 0xa0, 0x89, 0x90, 0xdd, 0x44,
+	0x4d, 0xcf, 0x5a, 0x83, 0x8b, 0x50, 0x9f, 0x45, 0xfe, 0x28, 0x15, 0x3f, 0xd0, 0x87, 0x16, 0xb2,
+	0x70, 0x8a, 0xbe, 0x3f, 0xe7, 0xd1, 0x1e, 0x25, 0x3e, 0x0b, 0xe0, 0xf9, 0xf1, 0x4c, 0x45, 0x23,
+	0x95, 0x29, 0x0d, 0x32, 0x08, 0x9e, 0xef, 0x71, 0x98, 0x48, 0x20, 0x3b, 0xfc, 0x4b, 0x41, 0x03,
+	0xfd, 0xa9, 0x9f, 0xf0, 0x9c, 0xf0, 0x2d, 0xd8, 0x22, 0x08, 0xcd, 0x49, 0xaa, 0x7f, 0x81, 0x82,
+	0xfe, 0x65, 0xe4, 0x47, 0xa3, 0x89, 0x12, 0x57, 0x0f, 0xf9, 0xd2, 0x2e, 0xcd, 0x49, 0x26, 0xa4,
+	0xaf, 0xb2, 0x4b, 0x73, 0xa2, 0x37, 0x48, 0x7a, 0xaa, 0x7b, 0xbc, 0x41, 0x34, 0x39, 0xf2, 0x0c,
+	0xc0, 0xd8, 0x1b, 0xf0, 0xf4, 0x7b, 0x1a, 0x63, 0x8f, 0x3d, 0x9c, 0xa2, 0x5d, 0xcf, 0xfe, 0x19,
+	0x99, 0x31, 0xcd, 0xf7, 0x9f, 0xb5, 0x8a, 0xdb, 0x8b, 0xab, 0x58, 0x08, 0x29, 0x25, 0x53, 0x6f,
+	0x2c, 0xe3, 0x1b, 0xbc, 0xa9, 0xa9, 0x48, 0xf5, 0x8c, 0x85, 0xc7, 0xad, 0xae, 0xc3, 0xdc, 0xe4,
+	0x36, 0x70, 0x6d, 0x71, 0x03, 0x2f, 0xec, 0xd0, 0xfa, 0xe2, 0x0e, 0xc5, 0x63, 0x86, 0x6c, 0xac,
+	0x96, 0x1c, 0x54, 0x9d, 0x55, 0xcf, 0x3d, 0xbd, 0xc3, 0x4c, 0x08, 0xe9, 0x76, 0x35, 0x77, 0x59,
+	0x75, 0x1a, 0xf8, 0x7d, 0x27, 0xf0, 0xec, 0x77, 0x78, 0x2e, 0xe8, 0x18, 0xbc, 0x02, 0xb5, 0xa5,
+	0xbe, 0xb7, 0x7a, 0xc2, 0x1c, 0xca, 0x62, 0xff, 0x71, 0x15, 0x3a, 0x1f, 0xf9, 0xea, 0x71, 0xca,
+	0x37, 0x14, 0x9d, 0x9b, 0x53, 0x33, 0xa0, 0x95, 0xcf, 0x6b, 0x06, 0xa4, 0xa5, 0x0f, 0x48, 0x69,
+	0x9f, 0x23, 0x49, 0x88, 0xb4, 0xeb, 0xf0, 0x2b, 0x50, 0xa3, 0xec, 0xb5, 0x25, 0xc2, 0x0a, 0xcc,
+	0xe4, 0x50, 0x16, 0x6b, 0x1b, 0x1a, 0x42, 0xff, 0x97, 0x32, 0x0a, 0x86, 0xcb, 0x9d, 0xa3, 0x33,
+	0xe6, 0x39, 0x93, 0xd5, 0x2f, 0xce, 0x99, 0x7c, 0x2e, 0xaf, 0xaa, 0xa7, 0xa1, 0xe9, 0xb9, 0x6c,
+	0x3b, 0xab, 0x49, 0x4d, 0xfd, 0x5d, 0x40, 0xfd, 0xad, 0xa2, 0xda, 0x00, 0x37, 0x35, 0x59, 0x2b,
+	0xd3, 0x55, 0xc9, 0x3a, 0x82, 0x16, 0x41, 0xe8, 0xae, 0x7c, 0x03, 0x9a, 0x29, 0x1f, 0xd2, 0x3e,
+	0x83, 0x0f, 0x69, 0xcc, 0x98, 0x03, 0xb1, 0x07, 0xbc, 0x49, 0x76, 0x42, 0xe6, 0x5a, 0xe3, 0x71,
+	0x98, 0x73, 0x1f, 0x6c, 0x22, 0x40, 0x7b, 0x19, 0x45, 0x4a, 0xce, 0x92, 0xc4, 0x73, 0x8c, 0x14,
+	0x9f, 0x24, 0xf2, 0xba, 0x32, 0x5d, 0x05, 0xbb, 0x0e, 0xe6, 0x65, 0xdc, 0xfa, 0xf3, 0xa2, 0xb7,
+	0x20, 0x7c, 0xfe, 0x1a, 0xd4, 0x7c, 0xe6, 0x63, 0x17, 0x55, 0x16, 0x06, 0x02, 0x76, 0x28, 0x17,
+	0x12, 0x70, 0x4c, 0x45, 0xe5, 0x6f, 0x18, 0xd6, 0x77, 0xde, 0xe2, 0x6b, 0xe6, 0x4d, 0x68, 0x8e,
+	0x42, 0x22, 0xa1, 0xb4, 0xbf, 0xe4, 0xe2, 0xe6, 0xc6, 0xc1, 0x39, 0x0d, 0xcc, 0xe6, 0xa8, 0xd8,
+	0xfe, 0x0a, 0x74, 0x76, 0xe6, 0x11, 0x69, 0x8d, 0xf7, 0xfd, 0x43, 0x92, 0xf0, 0x10, 0x11, 0x16,
+	0xfb, 0x87, 0x81, 0x5c, 0x30, 0x4d, 0x04, 0x60, 0xa2, 0xfd, 0x13, 0xb0, 0x8a, 0xbf, 0x8f, 0x66,
+	0x84, 0xb2, 0xfc, 0xc3, 0x20, 0xaf, 0x7f, 0x46, 0x08, 0xeb, 0x9f, 0x9f, 0x82, 0x06, 0x62, 0x5b,
+	0xcf, 0x3d, 0xd5, 0xf7, 0xe0, 0x68, 0x1e, 0xdd, 0x76, 0x4f, 0xad, 0x6f, 0x41, 0x97, 0x64, 0xdd,
+	0x58, 0x56, 0xf0, 0xc6, 0xa2, 0xe9, 0x85, 0xd9, 0x21, 0xa7, 0x3d, 0x9a, 0x47, 0xf8, 0x87, 0xd8,
+	0xf8, 0xdf, 0xaa, 0xb1, 0xbd, 0xcc, 0xcd, 0x51, 0xe2, 0x1f, 0xfb, 0xc9, 0xa9, 0xf5, 0x26, 0xb4,
+	0xb2, 0xba, 0x58, 0x1e, 0x70, 0x21, 0x3f, 0x62, 0xea, 0xaf, 0xd3, 0x8c, 0xa5, 0x0a, 0xeb, 0xcb,
+	0xec, 0xc1, 0x20, 0xf8, 0xc3, 0xe4, 0xf2, 0xba, 0xdc, 0x47, 0xad, 0xc4, 0xf8, 0x10, 0x2c, 0x57,
+	0x9a, 0x31, 0x98, 0x66, 0x9e, 0xd5, 0x17, 0xf2, 0xfa, 0x3c, 0xce, 0xe6, 0xab, 0xd8, 0x08, 0x78,
+	0xb1, 0xa6, 0x0b, 0xa7, 0x4c, 0xf4, 0xab, 0xb0, 0xce, 0xc2, 0x33, 0x93, 0xbc, 0x65, 0x5a, 0xa7,
+	0x4f, 0x09, 0x3b, 0x19, 0x75, 0xfb, 0x2e, 0x5c, 0xca, 0xe5, 0xcd, 0x79, 0xe4, 0x30, 0x4a, 0xdc,
+	0x34, 0xca, 0x38, 0x99, 0x9b, 0x86, 0xf5, 0x31, 0x58, 0xe2, 0xbc, 0x2f, 0x65, 0x8d, 0xc3, 0xfc,
+	0xca, 0x92, 0x7e, 0x3f, 0xa2, 0x02, 0x9a, 0xbe, 0xe6, 0xfe, 0x73, 0x25, 0x5c, 0x3f, 0xf5, 0xff,
+	0x03, 0xd8, 0xcc, 0x57, 0x3c, 0x76, 0x63, 0xd3, 0xa3, 0xe4, 0x2c, 0x33, 0x5d, 0xb3, 0xb2, 0x7b,
+	0xae, 0x8e, 0xc3, 0xb4, 0xc1, 0x6a, 0x43, 0x6f, 0x90, 0x4e, 0xb4, 0xa1, 0x1d, 0xbc, 0x20, 0x89,
+	0x7a, 0xad, 0xa9, 0xcc, 0x37, 0xa1, 0xe3, 0x8e, 0x12, 0xa2, 0xed, 0x8c, 0xf0, 0x84, 0x79, 0xbf,
+	0xfc, 0x1c, 0x81, 0xed, 0x80, 0x3b, 0x4a, 0x1e, 0xc4, 0x87, 0x74, 0xbc, 0xff, 0xa0, 0x01, 0x17,
+	0xcb, 0x16, 0x8b, 0xe2, 0x32, 0xa6, 0xf0, 0x8c, 0xa6, 0xe8, 0x64, 0xc0, 0x5d, 0xf2, 0xa0, 0x32,
+	0x32, 0x19, 0x47, 0xbf, 0x97, 0x81, 0x09, 0x03, 0xe4, 0xef, 0xf3, 0xaa, 0x48, 0x39, 0x4b, 0xef,
+	0x73, 0x5e, 0xfe, 0xf4, 0x3e, 0x37, 0xce, 0x4d, 0x3d, 0x77, 0x6e, 0xee, 0xc0, 0x3a, 0x47, 0x1e,
+	0x33, 0xd5, 0xba, 0xe7, 0x22, 0xe8, 0x3e, 0x95, 0x31, 0x62, 0x87, 0x7d, 0x17, 0x7a, 0x07, 0x61,
+	0x94, 0x04, 0xc4, 0x0e, 0x79, 0xee, 0x69, 0x2c, 0x98, 0xfa, 0xc5, 0x25, 0xfb, 0xe2, 0xae, 0xce,
+	0x7c, 0xdb, 0x3d, 0x8d, 0x9d, 0xee, 0x81, 0xf9, 0x99, 0xe1, 0x66, 0x1a, 0x89, 0x48, 0xe0, 0x09,
+	0xa2, 0x95, 0x23, 0xb9, 0x5d, 0xdb, 0x32, 0xad, 0x3f, 0x78, 0xab, 0x7e, 0x00, 0x7d, 0x71, 0xd8,
+	0x4f, 0xbd, 0x99, 0xa0, 0x24, 0xa8, 0x4c, 0xd6, 0x9f, 0x9d, 0x34, 0x37, 0x07, 0x41, 0xc9, 0x4a,
+	0xcb, 0x0e, 0xed, 0x4f, 0xfc, 0x23, 0x77, 0xe8, 0x4f, 0xf4, 0xa1, 0x95, 0x40, 0x5d, 0xcb, 0xea,
+	0xbb, 0x9f, 0xe6, 0xe6, 0xfa, 0x26, 0xb9, 0x6f, 0xbc, 0xa1, 0x8f, 0xfc, 0xe0, 0x90, 0x4c, 0xc5,
+	0xc4, 0x2f, 0x68, 0x99, 0x25, 0x1d, 0xe6, 0x23, 0xeb, 0xbb, 0x2f, 0x43, 0x9f, 0xb8, 0x4d, 0x2e,
+	0x87, 0x1c, 0x0c, 0x51, 0x74, 0x5d, 0xa7, 0xa7, 0xc1, 0x0f, 0x09, 0x6a, 0x7d, 0x1b, 0xba, 0xea,
+	0x44, 0xe4, 0x5d, 0x4b, 0x83, 0x58, 0xde, 0x91, 0x1c, 0x2c, 0x93, 0xd3, 0xf9, 0x69, 0xb0, 0xdf,
+	0x02, 0x78, 0x3c, 0x56, 0x6a, 0xc2, 0xe3, 0x64, 0x7f, 0xa0, 0x67, 0xcb, 0xc6, 0x79, 0xfa, 0x31,
+	0x66, 0xe3, 0x80, 0x2d, 0x8f, 0xf5, 0x5f, 0x8a, 0x17, 0x8c, 0x98, 0x93, 0x4a, 0xaf, 0x95, 0x78,
+	0x13, 0xe8, 0xd2, 0x8c, 0x7c, 0x19, 0x83, 0x52, 0xc9, 0x1d, 0xe8, 0x0d, 0x93, 0x41, 0x14, 0x8e,
+	0x42, 0x5f, 0x8a, 0x5f, 0x2c, 0x71, 0x26, 0xd0, 0xc5, 0x6f, 0x3d, 0x74, 0x3e, 0xdc, 0x09, 0xfd,
+	0xc0, 0xe9, 0x0c, 0x13, 0x87, 0xca, 0x50, 0x25, 0x1f, 0xc3, 0x15, 0x89, 0x07, 0xf5, 0xa9, 0xef,
+	0x1a, 0x2c, 0x7f, 0x6a, 0xb8, 0xb8, 0x71, 0xd6, 0x74, 0x5f, 0xe2, 0x78, 0x51, 0x9f, 0xfa, 0x6e,
+	0x2a, 0x13, 0xd0, 0x16, 0x95, 0xbf, 0x59, 0x81, 0xb5, 0x62, 0xdb, 0xd6, 0xb7, 0xa0, 0x6f, 0x18,
+	0x0e, 0x9e, 0x6f, 0x18, 0xd9, 0x4d, 0x6d, 0x06, 0x85, 0xbc, 0xe9, 0x65, 0x26, 0x83, 0xe7, 0x9b,
+	0x77, 0x76, 0xb4, 0xb5, 0xa0, 0x10, 0x9b, 0xeb, 0x54, 0x38, 0x77, 0xe3, 0x30, 0x52, 0xa0, 0x5a,
+	0xb3, 0x2b, 0xc7, 0xde, 0x87, 0x5e, 0x7e, 0xd6, 0x53, 0xad, 0x33, 0x2d, 0x95, 0xe1, 0x30, 0x43,
+	0x5a, 0x67, 0xcc, 0x93, 0xea, 0xb5, 0x79, 0x2d, 0x4f, 0x53, 0x47, 0x65, 0x5e, 0xae, 0xd3, 0xd8,
+	0xfe, 0xdd, 0x15, 0x58, 0x5f, 0xd8, 0x09, 0xd6, 0x23, 0xd8, 0xe4, 0xdd, 0xa3, 0x15, 0xf5, 0x85,
+	0x68, 0x37, 0x79, 0x3e, 0x99, 0xca, 0x89, 0x8a, 0x5e, 0xa8, 0x7f, 0xe7, 0xc2, 0xe3, 0x3c, 0x50,
+	0x13, 0x64, 0x5c, 0x6d, 0x38, 0x53, 0x81, 0xf6, 0xfb, 0x25, 0xc8, 0x87, 0x33, 0x15, 0xe0, 0x15,
+	0xa8, 0x5b, 0x65, 0x1a, 0x3f, 0xf3, 0xa4, 0xec, 0x4b, 0x75, 0x04, 0x17, 0x9f, 0xb5, 0x44, 0x4d,
+	0x67, 0x13, 0x37, 0x51, 0x86, 0x11, 0x7e, 0x5b, 0xc3, 0x76, 0xbd, 0x13, 0x32, 0x05, 0xa3, 0xea,
+	0xb0, 0x1a, 0x6d, 0x0a, 0x86, 0x00, 0x2c, 0x9f, 0x26, 0x62, 0xe1, 0x55, 0x23, 0x11, 0x4b, 0xbe,
+	0x0d, 0xcd, 0x49, 0x78, 0xb8, 0xfc, 0xf6, 0xa2, 0x01, 0xdf, 0x0f, 0x0f, 0x99, 0x3c, 0x9c, 0x84,
+	0x7c, 0x7f, 0xdc, 0x84, 0x8e, 0x79, 0x20, 0x17, 0xec, 0x74, 0x5e, 0x80, 0xf4, 0x88, 0x9a, 0x14,
+	0x9a, 0x86, 0x7d, 0x30, 0x9f, 0xda, 0x7e, 0x56, 0x85, 0x66, 0x89, 0x52, 0x7b, 0x5a, 0x23, 0xa2,
+	0x68, 0x0a, 0x23, 0x99, 0x4a, 0x8b, 0x88, 0x3a, 0x5c, 0xa2, 0xf3, 0xa3, 0xf0, 0x10, 0x01, 0x88,
+	0xeb, 0x61, 0x0f, 0xd2, 0xdd, 0x84, 0x97, 0x5d, 0x59, 0x7f, 0xb5, 0xf0, 0x67, 0xc5, 0x10, 0xfe,
+	0x98, 0xb7, 0x53, 0x35, 0x7f, 0x3b, 0xf5, 0x60, 0x65, 0x78, 0x48, 0xeb, 0xd0, 0x72, 0x56, 0x86,
+	0x87, 0xf6, 0xdf, 0xaa, 0xc0, 0x53, 0x4b, 0xee, 0x0a, 0x92, 0x6c, 0x66, 0x06, 0xb6, 0x42, 0x20,
+	0x26, 0xa9, 0x05, 0xed, 0xab, 0xb0, 0x9e, 0x25, 0x67, 0xca, 0x68, 0x36, 0xdb, 0xd4, 0xb9, 0x44,
+	0x2b, 0x99, 0xb3, 0x67, 0xae, 0x3e, 0x99, 0x5d, 0xf5, 0x8f, 0xc3, 0x33, 0x67, 0x51, 0x37, 0x4f,
+	0x76, 0xe1, 0xe7, 0xef, 0xf1, 0x95, 0xb3, 0xee, 0xf1, 0xfc, 0x4c, 0xd9, 0x07, 0xb0, 0xb5, 0xec,
+	0xd2, 0x5a, 0x58, 0x84, 0xcc, 0xda, 0x27, 0xdb, 0x32, 0x62, 0xed, 0x23, 0xdb, 0x38, 0x08, 0x07,
+	0x41, 0x98, 0x68, 0x91, 0x46, 0xd3, 0x69, 0x06, 0xe1, 0x07, 0xf4, 0x6d, 0xdf, 0x35, 0xdb, 0xc9,
+	0x5f, 0x66, 0x4b, 0x02, 0xd1, 0x5f, 0x84, 0x3a, 0x1b, 0xd2, 0xe8, 0x48, 0xe1, 0xf8, 0x61, 0x4f,
+	0xa0, 0xcf, 0x4a, 0xb3, 0x87, 0xe1, 0x63, 0xf1, 0xe7, 0x29, 0xc8, 0xae, 0x2b, 0x0b, 0xb2, 0xeb,
+	0x1b, 0x50, 0x47, 0xaa, 0x5b, 0x7b, 0x0f, 0x3c, 0x11, 0xe3, 0x4b, 0x05, 0xb4, 0x25, 0x2b, 0xb5,
+	0xf5, 0xe7, 0x6c, 0xc9, 0xfa, 0x27, 0x12, 0x24, 0xea, 0xa1, 0x36, 0x3b, 0x0e, 0xc2, 0xc7, 0x83,
+	0xc5, 0x71, 0x76, 0x83, 0xf0, 0xf1, 0xc3, 0x6c, 0xa8, 0x88, 0x85, 0xd3, 0x7c, 0x46, 0x48, 0xdf,
+	0x8e, 0xce, 0x46, 0xfb, 0x41, 0x9b, 0x3a, 0x26, 0xa9, 0x3d, 0x70, 0x99, 0xa9, 0x23, 0xe5, 0xe7,
+	0x11, 0xa6, 0x9d, 0x88, 0x4f, 0xd3, 0x98, 0xb0, 0x06, 0x55, 0xd8, 0x8d, 0x4f, 0x25, 0xee, 0x2b,
+	0x55, 0xff, 0x4d, 0xb8, 0x6c, 0x74, 0x74, 0x90, 0xe9, 0xf1, 0x4d, 0x93, 0xa7, 0xa7, 0xb2, 0x05,
+	0xba, 0xad, 0xd5, 0xfa, 0xb4, 0x23, 0xef, 0x41, 0xc7, 0x51, 0x07, 0xf3, 0x58, 0x79, 0x37, 0x67,
+	0xb3, 0x89, 0x8e, 0xbd, 0x3a, 0x49, 0xdd, 0x2c, 0x6a, 0x14, 0x7b, 0x75, 0x22, 0xa1, 0xa5, 0x5c,
+	0xcc, 0x63, 0x8e, 0xb4, 0x45, 0x10, 0xaa, 0xe9, 0x36, 0x34, 0x6f, 0xbb, 0xa7, 0x7f, 0xd6, 0x5a,
+	0x7e, 0xa9, 0x02, 0x3d, 0x1a, 0x7f, 0xa6, 0x23, 0xda, 0x81, 0xf6, 0x28, 0x64, 0x57, 0x9c, 0x8c,
+	0x9b, 0x7b, 0x92, 0x6d, 0x05, 0x5c, 0x4c, 0x6f, 0x5b, 0x51, 0x88, 0xa4, 0xed, 0xd6, 0x1d, 0x71,
+	0xca, 0xd6, 0xf1, 0x4a, 0x25, 0x83, 0x0e, 0xb6, 0xac, 0x9d, 0x7e, 0x08, 0x2a, 0xe1, 0x96, 0xed,
+	0xef, 0x43, 0xcf, 0x51, 0x58, 0xaf, 0x0a, 0x3c, 0x72, 0x7a, 0x3e, 0x6b, 0xac, 0xe5, 0xb1, 0x1a,
+	0x9e, 0x83, 0x36, 0xa1, 0x13, 0x23, 0x76, 0x47, 0x95, 0xd8, 0x11, 0xff, 0x58, 0xe9, 0x07, 0x4d,
+	0xf8, 0x4b, 0xfc, 0x77, 0xe4, 0x0b, 0xaf, 0x99, 0xb4, 0xed, 0x7d, 0x95, 0x58, 0x6f, 0x41, 0x9d,
+	0x5a, 0x2a, 0xb5, 0x12, 0xc9, 0xf7, 0xd2, 0xe1, 0x9c, 0xf6, 0x0f, 0x41, 0xfb, 0x81, 0x9a, 0x0e,
+	0x65, 0x96, 0x4a, 0x14, 0x14, 0x2f, 0x40, 0x47, 0x0b, 0xca, 0x8d, 0x05, 0x6a, 0x0b, 0x4c, 0x1b,
+	0x72, 0xb2, 0x4d, 0xa6, 0x08, 0x52, 0xe9, 0xc3, 0xfe, 0x6b, 0x15, 0xe8, 0x53, 0x53, 0x88, 0x82,
+	0x0e, 0x18, 0xd5, 0x7c, 0x55, 0xcb, 0xc0, 0xca, 0x34, 0xf2, 0x94, 0x99, 0xba, 0xa1, 0x05, 0x5f,
+	0x97, 0xa1, 0x35, 0x55, 0xd3, 0x7c, 0xa0, 0xbc, 0xa9, 0x9a, 0xb2, 0x6c, 0x8f, 0xf5, 0xf2, 0xb4,
+	0x51, 0x04, 0xdd, 0x35, 0xfc, 0x98, 0x77, 0xdb, 0x06, 0xac, 0x8e, 0x66, 0x69, 0x44, 0x85, 0xa6,
+	0x53, 0x1f, 0xcd, 0xf8, 0x4a, 0x05, 0x1e, 0xab, 0xbe, 0x50, 0xc5, 0x37, 0x83, 0xa7, 0x96, 0x7d,
+	0x01, 0x58, 0x4a, 0x42, 0xb8, 0x52, 0x7d, 0x71, 0x91, 0x9d, 0xfd, 0x53, 0x15, 0xb0, 0x78, 0x3c,
+	0x61, 0x1c, 0x23, 0x79, 0xa0, 0x12, 0x36, 0x4b, 0x68, 0xb1, 0x86, 0x69, 0x12, 0x1e, 0xca, 0x1c,
+	0x3c, 0xbd, 0x38, 0x07, 0xa4, 0x6e, 0xba, 0x1f, 0x1e, 0x3a, 0xcd, 0x03, 0xf9, 0x67, 0x5d, 0x17,
+	0x09, 0xd0, 0x93, 0x77, 0x84, 0xf2, 0xdb, 0x47, 0xd0, 0x4d, 0xbb, 0xa1, 0xdd, 0xbc, 0xb4, 0x93,
+	0x9b, 0xb8, 0x79, 0x89, 0x93, 0xdb, 0x15, 0x60, 0xa5, 0x66, 0xee, 0x0e, 0x23, 0x88, 0x8e, 0x4d,
+	0xcb, 0xc9, 0xa3, 0xdc, 0x45, 0xc6, 0xba, 0xd1, 0x1d, 0x46, 0x1d, 0xff, 0xa2, 0x02, 0x4d, 0x6a,
+	0x0d, 0x7b, 0x7c, 0x09, 0x9a, 0xe1, 0x6c, 0xc0, 0xfb, 0x42, 0x04, 0xef, 0xe1, 0xec, 0x21, 0x59,
+	0xeb, 0xd2, 0x93, 0x41, 0xa6, 0xd2, 0x6a, 0x35, 0x9c, 0x91, 0x18, 0xee, 0x59, 0x68, 0x0f, 0xd5,
+	0x20, 0x2d, 0x26, 0xd1, 0xe8, 0x86, 0xea, 0x43, 0x29, 0xf8, 0x0c, 0x00, 0xa7, 0x53, 0x59, 0xa6,
+	0x2f, 0x9a, 0x98, 0x4c, 0xa5, 0x29, 0x04, 0x8c, 0x0a, 0x12, 0xd3, 0x73, 0xac, 0x45, 0x10, 0xcd,
+	0x6c, 0x4b, 0x72, 0x66, 0x8e, 0x2c, 0xc9, 0xd8, 0xf9, 0x9b, 0xd0, 0xd6, 0x7d, 0xc7, 0xa3, 0xb4,
+	0x0d, 0x2c, 0x1e, 0x94, 0x95, 0x5a, 0xa4, 0x25, 0x74, 0x66, 0x87, 0x0f, 0xfb, 0xfd, 0xf0, 0xd0,
+	0xfe, 0xb7, 0x15, 0xa9, 0x83, 0x77, 0x99, 0x6c, 0xdf, 0xa1, 0x8a, 0x32, 0x4c, 0xd0, 0x64, 0x00,
+	0xa3, 0x02, 0x1e, 0xe5, 0x8a, 0x71, 0x68, 0x16, 0x4e, 0x5b, 0x75, 0xf1, 0xb4, 0x7d, 0x33, 0xc5,
+	0x16, 0xb4, 0x23, 0x6a, 0xe7, 0xdb, 0x2b, 0x09, 0x2a, 0xd1, 0x9e, 0xd9, 0xae, 0xe7, 0x49, 0xe8,
+	0x06, 0xf3, 0x05, 0x25, 0xd7, 0x63, 0xc4, 0x40, 0x93, 0xf1, 0x4f, 0x2b, 0xfa, 0xa8, 0xd0, 0xa6,
+	0xd9, 0x80, 0xd5, 0x59, 0xa4, 0xb2, 0x51, 0xd4, 0x67, 0x91, 0xda, 0x25, 0x37, 0xe5, 0x63, 0x7f,
+	0xa4, 0x06, 0x92, 0xc6, 0x06, 0x3b, 0x2d, 0x04, 0xed, 0x51, 0xfa, 0xbb, 0xd0, 0xd6, 0xe3, 0xcf,
+	0x24, 0xff, 0x5b, 0x8b, 0xb3, 0xc8, 0x2d, 0x39, 0x30, 0xcd, 0x0e, 0xe7, 0x65, 0x64, 0xa8, 0x47,
+	0x47, 0x39, 0x0d, 0x25, 0x02, 0x34, 0x3d, 0x45, 0x89, 0x19, 0x31, 0xdf, 0xc0, 0x6f, 0x3c, 0xe2,
+	0xbf, 0x5e, 0x01, 0xc8, 0xf0, 0xc8, 0x39, 0xd7, 0x8e, 0x21, 0x11, 0x5e, 0x29, 0x4a, 0x84, 0x9f,
+	0x83, 0x36, 0x27, 0x0f, 0x5d, 0xef, 0x50, 0x6f, 0x45, 0x2e, 0x71, 0x0b, 0x21, 0x59, 0x06, 0x33,
+	0xe2, 0x10, 0x67, 0x60, 0x5a, 0xe0, 0x05, 0xe8, 0x70, 0x06, 0xc1, 0x2f, 0x75, 0xc6, 0x2f, 0x04,
+	0x63, 0xfc, 0x62, 0xff, 0xfd, 0x15, 0x68, 0x71, 0x6f, 0xdd, 0x18, 0xb1, 0x8d, 0x6e, 0xf2, 0x49,
+	0x50, 0xa4, 0xf4, 0x85, 0x86, 0x29, 0xd6, 0x7a, 0xd2, 0x10, 0x13, 0x6c, 0x2d, 0xcf, 0x3d, 0x15,
+	0x34, 0x76, 0x59, 0xef, 0x65, 0x75, 0xa2, 0x83, 0x99, 0xf2, 0xb4, 0xdc, 0x39, 0x99, 0x15, 0x2f,
+	0x9f, 0xda, 0xc2, 0xe5, 0x43, 0xe2, 0x99, 0x51, 0x34, 0xf7, 0x73, 0x07, 0xab, 0x2d, 0x30, 0x3a,
+	0x5a, 0xa4, 0x8b, 0xe1, 0x2c, 0xb9, 0xd7, 0x4a, 0x04, 0x98, 0x06, 0x67, 0x13, 0xe2, 0xb4, 0xc1,
+	0x87, 0x9e, 0xbf, 0xf0, 0x9e, 0xd5, 0x85, 0x25, 0xbd, 0x49, 0xe9, 0xba, 0x4a, 0xa1, 0x60, 0x3f,
+	0x82, 0xf6, 0x6d, 0x35, 0x45, 0xd2, 0x78, 0xea, 0x1e, 0xaa, 0x72, 0x4d, 0xba, 0x47, 0x69, 0x82,
+	0xbc, 0xe4, 0xab, 0x80, 0xd8, 0xaa, 0x05, 0xc4, 0x66, 0xff, 0x86, 0xde, 0x31, 0x54, 0xbb, 0xb6,
+	0x59, 0xf7, 0xd4, 0xd4, 0x64, 0xb3, 0x60, 0x34, 0x8f, 0x28, 0x7d, 0xd7, 0xcb, 0xee, 0x8d, 0x5c,
+	0x6b, 0x7c, 0x6f, 0x48, 0xe7, 0xde, 0x85, 0x36, 0x27, 0x9a, 0xac, 0x48, 0x7e, 0xe3, 0x1b, 0x63,
+	0x71, 0x80, 0x33, 0x13, 0x5f, 0x5c, 0xa6, 0xf9, 0xaa, 0xe5, 0x34, 0x5f, 0xf6, 0x4f, 0xc8, 0xbd,
+	0x7a, 0x33, 0x3b, 0xd5, 0x2f, 0x40, 0x47, 0x16, 0x91, 0x5d, 0x82, 0xe5, 0x2e, 0x63, 0x18, 0xa1,
+	0x02, 0x8a, 0x8f, 0x9a, 0xee, 0x91, 0x81, 0xe9, 0x39, 0xdc, 0x4b, 0x77, 0x0a, 0xe7, 0x3c, 0x8f,
+	0x1c, 0xb1, 0x4f, 0x38, 0x5c, 0x2b, 0xdd, 0xb5, 0xd4, 0xfc, 0x36, 0xc7, 0x3f, 0xe3, 0xbb, 0xb8,
+	0x0c, 0x59, 0x6a, 0x3a, 0x90, 0xc2, 0xa2, 0xf1, 0x1d, 0x7d, 0x0d, 0x1a, 0x11, 0xd3, 0x99, 0xa5,
+	0xac, 0xaa, 0x49, 0x83, 0x3a, 0x3a, 0xa7, 0x1d, 0xc2, 0x7a, 0x7a, 0x9d, 0x3d, 0xd4, 0xe8, 0x60,
+	0x13, 0xe4, 0x0e, 0x2b, 0xdc, 0x68, 0xa9, 0xe5, 0x8e, 0x49, 0x3f, 0xf0, 0x5e, 0x30, 0xdc, 0xce,
+	0x8c, 0xb9, 0xae, 0x96, 0xcd, 0x75, 0x5b, 0x0e, 0x68, 0x22, 0xe8, 0x39, 0x17, 0xeb, 0xa4, 0xb2,
+	0x18, 0xeb, 0xe4, 0x2a, 0xac, 0x4d, 0x8f, 0x67, 0x83, 0x5c, 0x36, 0x99, 0xe7, 0xe9, 0xf1, 0xcc,
+	0x31, 0x72, 0x2e, 0x84, 0x7f, 0xaa, 0x2e, 0x86, 0x7f, 0xb2, 0x7f, 0xb6, 0x02, 0x6b, 0xd9, 0xf6,
+	0x14, 0x46, 0xb7, 0xb8, 0x05, 0x2b, 0x8b, 0x5b, 0xf0, 0x12, 0x34, 0xd3, 0x3d, 0x2c, 0x7a, 0x27,
+	0x4f, 0x36, 0xf0, 0x17, 0xdf, 0x9d, 0xf6, 0xef, 0x55, 0xa0, 0xc5, 0xe7, 0x00, 0x97, 0xfd, 0x2a,
+	0xac, 0x51, 0xec, 0x36, 0x73, 0x96, 0xc5, 0xc1, 0x0f, 0xe1, 0x77, 0xb3, 0x99, 0x7e, 0x19, 0xfa,
+	0xc3, 0xf9, 0xe9, 0x60, 0x71, 0x39, 0xba, 0xc3, 0xf9, 0x69, 0x3e, 0xdf, 0x3c, 0xce, 0x57, 0x28,
+	0x44, 0xf7, 0x3c, 0x36, 0xeb, 0x3b, 0xff, 0x94, 0xa4, 0xef, 0x70, 0x18, 0x67, 0xbf, 0x9e, 0xbd,
+	0xc3, 0x71, 0x37, 0x3d, 0xff, 0xff, 0xa1, 0xca, 0x8c, 0xde, 0xb9, 0xb4, 0xfb, 0x7b, 0x05, 0x7c,
+	0xbe, 0x52, 0x62, 0xb6, 0x52, 0x38, 0x97, 0x39, 0x6c, 0x6f, 0x7d, 0x43, 0xe3, 0xf7, 0x8c, 0x66,
+	0x2d, 0x8b, 0x14, 0x9c, 0x1e, 0x2b, 0x41, 0xf1, 0x29, 0x03, 0xf5, 0x19, 0xa1, 0xc8, 0x34, 0x4c,
+	0x58, 0x03, 0xbf, 0x35, 0xe3, 0xaf, 0x4e, 0x92, 0xc1, 0xa7, 0xa1, 0xd8, 0xcf, 0x57, 0x9d, 0x26,
+	0x02, 0xde, 0x67, 0x81, 0x26, 0x10, 0xbd, 0xc7, 0x01, 0x1d, 0x58, 0x11, 0xf0, 0x6c, 0xc9, 0x9d,
+	0x62, 0x1c, 0x28, 0x87, 0xe2, 0x71, 0x71, 0xc8, 0x87, 0xfc, 0x2d, 0xd9, 0x28, 0xde, 0x92, 0x36,
+	0x74, 0xd5, 0xc4, 0x4f, 0x94, 0x84, 0x32, 0xd5, 0xe6, 0xf5, 0x6d, 0x02, 0x52, 0x7c, 0x0d, 0xcf,
+	0xfa, 0x86, 0x9e, 0x37, 0x09, 0xa3, 0xd3, 0x2a, 0x51, 0xf9, 0x1a, 0x67, 0x4c, 0xe6, 0x4c, 0x0e,
+	0xdc, 0x3b, 0x00, 0xb2, 0x8d, 0xb3, 0x58, 0x34, 0x9b, 0x8b, 0x5b, 0x95, 0xad, 0x6a, 0x3d, 0xfd,
+	0xd7, 0x7e, 0x59, 0xee, 0xd5, 0x5d, 0x4f, 0x9d, 0x9c, 0xb1, 0xa6, 0x48, 0xa6, 0x77, 0x1d, 0x2d,
+	0x42, 0xd0, 0xf4, 0x31, 0xf1, 0xe6, 0x99, 0x8f, 0x32, 0x7e, 0x9e, 0x2f, 0xe3, 0xb9, 0x02, 0x30,
+	0x9a, 0x84, 0x71, 0x2e, 0xfc, 0x62, 0x8b, 0x20, 0x3a, 0xd9, 0x88, 0x07, 0x25, 0x31, 0x0f, 0x22,
+	0x1d, 0x00, 0xca, 0xfe, 0xe5, 0x0a, 0x34, 0xb1, 0x1f, 0xe7, 0x76, 0x21, 0x92, 0xe7, 0xe0, 0x0e,
+	0x55, 0x2a, 0x00, 0xe2, 0xb7, 0xe0, 0x98, 0x22, 0x31, 0x95, 0x3e, 0x6c, 0x21, 0x6d, 0x3a, 0xec,
+	0xbd, 0x0b, 0x40, 0xf8, 0x88, 0x65, 0xf1, 0xb5, 0xb2, 0x48, 0xd5, 0xe6, 0x5c, 0x38, 0xad, 0x48,
+	0xff, 0xb5, 0x7f, 0x48, 0xf8, 0x08, 0xcd, 0x9a, 0x94, 0xdc, 0xbf, 0xe7, 0x30, 0x10, 0xd9, 0xf5,
+	0xcc, 0x14, 0x88, 0x7c, 0xd9, 0xd7, 0xe5, 0xfa, 0xe5, 0xfd, 0x76, 0xde, 0xb5, 0x9e, 0x95, 0xfb,
+	0xad, 0x8a, 0xc1, 0xda, 0x10, 0x3a, 0x7a, 0x13, 0x1a, 0x53, 0xf7, 0x04, 0x71, 0xe2, 0x72, 0xda,
+	0x89, 0x4d, 0xbb, 0x57, 0xa7, 0xee, 0xc9, 0x6d, 0x77, 0x9a, 0x67, 0xc7, 0xca, 0x22, 0x77, 0x2f,
+	0x63, 0xc7, 0xce, 0xbf, 0x39, 0xc8, 0x5c, 0x9d, 0x82, 0x81, 0x90, 0x4e, 0x4b, 0x02, 0x52, 0x52,
+	0x18, 0x10, 0x8a, 0x8c, 0xf8, 0x23, 0x9a, 0xf2, 0x0b, 0xe3, 0xf8, 0x2c, 0xac, 0xf3, 0x0e, 0xe0,
+	0x95, 0x49, 0xe7, 0x6b, 0x79, 0x0f, 0xf5, 0x14, 0x38, 0x0d, 0xcf, 0x3d, 0xc5, 0x0f, 0xfb, 0x2d,
+	0x7e, 0x6b, 0x00, 0x71, 0x87, 0x7b, 0xaa, 0x1f, 0x42, 0x62, 0x31, 0x4b, 0x26, 0x21, 0xa8, 0x39,
+	0x2c, 0x79, 0xa1, 0x3a, 0xec, 0x6d, 0x4d, 0x56, 0x7c, 0x8e, 0x32, 0x7f, 0xb8, 0x02, 0x17, 0x8c,
+	0xb3, 0xbb, 0xaf, 0x26, 0x07, 0x4b, 0x7c, 0x2c, 0xcc, 0x21, 0xae, 0xe4, 0x87, 0xf8, 0x24, 0xf7,
+	0xa0, 0x75, 0x1d, 0x5a, 0x59, 0xb0, 0xbe, 0xf3, 0x4d, 0xe1, 0x87, 0x3a, 0x76, 0x1f, 0x85, 0x3d,
+	0x1d, 0x86, 0x51, 0x90, 0xa9, 0x54, 0xe4, 0x1a, 0x60, 0xb0, 0x56, 0xe2, 0xbf, 0x04, 0x3d, 0x77,
+	0x9e, 0x84, 0x99, 0x37, 0x36, 0xd1, 0xb0, 0x4d, 0xa7, 0x8b, 0xd0, 0xd4, 0x0d, 0x9b, 0x66, 0x04,
+	0xb3, 0x71, 0x61, 0x31, 0xf4, 0x02, 0x04, 0x39, 0x04, 0xc1, 0xc3, 0xfb, 0xd8, 0xe7, 0xc0, 0x8f,
+	0x6c, 0xa2, 0xb2, 0xfa, 0xd8, 0x0f, 0xb4, 0x96, 0x81, 0x5d, 0xc6, 0x53, 0x7f, 0xf0, 0x26, 0x7b,
+	0x8c, 0xbb, 0x47, 0x19, 0x85, 0x3e, 0x8b, 0x94, 0x44, 0xdd, 0xe1, 0xe9, 0xda, 0x8b, 0x94, 0xfd,
+	0x9b, 0x2b, 0xb2, 0x32, 0x7b, 0x14, 0x03, 0xf6, 0xec, 0x00, 0xb1, 0x67, 0xcc, 0xf3, 0xe2, 0xa3,
+	0xbb, 0x3b, 0xd0, 0x0e, 0x1f, 0x07, 0x2a, 0x1a, 0x7c, 0xde, 0x50, 0x4a, 0x40, 0xc5, 0x98, 0xf9,
+	0x78, 0x11, 0x58, 0x61, 0x59, 0x9c, 0xe0, 0x0e, 0x41, 0xf5, 0xfc, 0x22, 0xad, 0x40, 0xb9, 0x0c,
+	0x24, 0xca, 0x3c, 0x38, 0x97, 0xde, 0x4f, 0x31, 0x69, 0x6e, 0x3b, 0x60, 0x87, 0x25, 0x64, 0x46,
+	0x0a, 0x7c, 0x44, 0x51, 0x84, 0xfb, 0x62, 0xaa, 0x4b, 0xea, 0xd3, 0x4c, 0xaf, 0xcc, 0x52, 0x8a,
+	0x3d, 0x3f, 0x38, 0x24, 0xc4, 0xfa, 0xf7, 0xaa, 0xd0, 0x33, 0x36, 0x28, 0x9e, 0xdd, 0x32, 0x43,
+	0x56, 0x42, 0x9d, 0xec, 0xaa, 0x6e, 0x38, 0xaa, 0x8a, 0x8f, 0x7a, 0xce, 0x57, 0x99, 0x25, 0x4d,
+	0xe2, 0xab, 0x6c, 0xac, 0x42, 0x2d, 0xb7, 0x0a, 0xaf, 0x81, 0x25, 0x56, 0xaa, 0x62, 0x58, 0x4a,
+	0xd7, 0x27, 0xbf, 0x87, 0xbb, 0xc6, 0x29, 0x3c, 0xa5, 0x74, 0x8b, 0xbe, 0x0c, 0x7d, 0xc9, 0x9d,
+	0x2e, 0x1d, 0x4f, 0x4d, 0x97, 0xc1, 0x72, 0x95, 0xb1, 0x2e, 0xc4, 0xac, 0x35, 0x9b, 0x9d, 0xbe,
+	0x59, 0xe9, 0x23, 0xf2, 0x58, 0xdb, 0x28, 0x06, 0x16, 0xe0, 0x4e, 0x30, 0x73, 0x75, 0x61, 0x94,
+	0x8f, 0x2c, 0x40, 0xfd, 0x78, 0x0d, 0xac, 0xac, 0x4c, 0xda, 0x15, 0xb6, 0x56, 0x5f, 0x4b, 0x53,
+	0x74, 0x6f, 0xde, 0x84, 0x8b, 0x0b, 0x2d, 0xcc, 0x25, 0x76, 0x75, 0xcd, 0xb1, 0x0a, 0x0d, 0x3c,
+	0x62, 0x4b, 0x7e, 0x3e, 0x02, 0xca, 0x3d, 0xd2, 0x4f, 0x9e, 0xd1, 0x11, 0x50, 0xee, 0x91, 0xfd,
+	0x07, 0x95, 0x1c, 0x2a, 0x41, 0x8e, 0x98, 0x76, 0xfa, 0xab, 0xb0, 0xae, 0x63, 0x76, 0x66, 0x3b,
+	0x87, 0x11, 0x8b, 0xb8, 0x90, 0x64, 0x5b, 0xe7, 0xe5, 0xd4, 0xab, 0xa4, 0x68, 0xb1, 0xc3, 0x60,
+	0xbd, 0x19, 0xbf, 0x0e, 0xc0, 0xfa, 0x24, 0x83, 0x00, 0x3e, 0x53, 0x82, 0xd2, 0xa2, 0xec, 0xda,
+	0x47, 0x49, 0x82, 0x42, 0x1e, 0xcf, 0x08, 0x11, 0xd5, 0x9c, 0x26, 0x01, 0x1e, 0x1c, 0x93, 0xb5,
+	0xd3, 0x91, 0x3f, 0x99, 0xa8, 0x88, 0x52, 0xeb, 0x2c, 0x10, 0x61, 0xc8, 0x83, 0xe3, 0x99, 0xfd,
+	0xdb, 0x75, 0x39, 0xc9, 0xd9, 0x18, 0xb1, 0xcf, 0x26, 0x79, 0x64, 0x38, 0x53, 0x1b, 0x74, 0x10,
+	0x07, 0xa1, 0x42, 0xc6, 0x94, 0xf3, 0xd2, 0x54, 0x18, 0xd6, 0x48, 0x54, 0x29, 0xcd, 0x03, 0x2e,
+	0x62, 0xae, 0x3e, 0x33, 0x1a, 0xd4, 0x9a, 0x51, 0x25, 0x1b, 0x56, 0x5c, 0x85, 0x35, 0x56, 0x1b,
+	0x23, 0x05, 0x91, 0xf3, 0xe6, 0x23, 0x75, 0x32, 0x11, 0x16, 0xec, 0x91, 0xa7, 0x83, 0x7f, 0xe9,
+	0x50, 0xab, 0x86, 0xb7, 0x26, 0x05, 0xff, 0x92, 0x21, 0x51, 0xde, 0xaf, 0x82, 0x95, 0x84, 0xf3,
+	0x08, 0xf7, 0x5b, 0x90, 0x20, 0x4e, 0x9b, 0xb9, 0x91, 0x3e, 0xee, 0xeb, 0x59, 0xca, 0x1e, 0x27,
+	0x70, 0x64, 0x96, 0x34, 0xbb, 0xe9, 0xc8, 0xd9, 0xcf, 0xe0, 0x5c, 0x33, 0x79, 0x08, 0xa4, 0x59,
+	0x33, 0x87, 0xce, 0x6e, 0x06, 0xbd, 0x13, 0x78, 0xd8, 0x81, 0x58, 0x4d, 0xfd, 0x03, 0x3f, 0x70,
+	0x27, 0x71, 0xda, 0x01, 0xde, 0xc9, 0xeb, 0x59, 0x8a, 0xd1, 0x01, 0x23, 0x3b, 0x77, 0x80, 0xb7,
+	0x71, 0x3f, 0x83, 0xa7, 0x1d, 0x30, 0xb2, 0x62, 0x07, 0xda, 0xa2, 0x83, 0x49, 0xa1, 0xd8, 0x81,
+	0x97, 0x10, 0x29, 0xe6, 0x1a, 0xef, 0x68, 0xf4, 0x64, 0x36, 0xfc, 0x02, 0x74, 0x72, 0x8d, 0x76,
+	0xb5, 0x50, 0x35, 0x6b, 0x90, 0xc8, 0xaa, 0xb4, 0xb1, 0x9e, 0x26, 0xab, 0x74, 0x43, 0x97, 0xa0,
+	0x19, 0x8f, 0xc3, 0xc7, 0x94, 0xc8, 0x61, 0x07, 0x1b, 0xf8, 0x7d, 0x87, 0x6d, 0xeb, 0xfc, 0x98,
+	0xf5, 0xeb, 0xec, 0x83, 0xb1, 0xea, 0xc7, 0xa4, 0x5c, 0x2f, 0x1a, 0xdc, 0xac, 0x2f, 0x1a, 0xdc,
+	0x98, 0x2f, 0x99, 0x59, 0xb9, 0x97, 0xcc, 0xec, 0xdf, 0x59, 0x81, 0x1e, 0x71, 0x61, 0x0f, 0xdd,
+	0xa1, 0x04, 0x47, 0x7f, 0x01, 0x3a, 0x7a, 0xf7, 0x92, 0xd3, 0xb8, 0xb0, 0xc5, 0x12, 0xcf, 0x96,
+	0xfc, 0xc6, 0xf5, 0x0d, 0xf7, 0x56, 0x76, 0x31, 0xf1, 0x45, 0xf5, 0x16, 0x73, 0xea, 0x92, 0x48,
+	0x28, 0x8a, 0x9f, 0x09, 0x64, 0xc6, 0xe3, 0x2d, 0xc2, 0x4c, 0x5a, 0x96, 0xf6, 0x96, 0x88, 0xe3,
+	0x44, 0xc5, 0xcf, 0x30, 0x96, 0xc7, 0xe9, 0x06, 0xb6, 0x75, 0x98, 0x7f, 0xdd, 0xc0, 0xb6, 0xd1,
+	0xc0, 0xb6, 0x19, 0xeb, 0x9f, 0x1b, 0xd8, 0xce, 0x35, 0xb0, 0x2d, 0x0d, 0x34, 0x8c, 0x06, 0xb6,
+	0xd3, 0x06, 0x10, 0x7b, 0x31, 0x29, 0xc4, 0x4e, 0x3e, 0x88, 0xbd, 0x52, 0xbe, 0x11, 0x13, 0x0d,
+	0x23, 0x6f, 0x24, 0x03, 0xb4, 0x89, 0x37, 0x4f, 0x33, 0x18, 0x61, 0x2e, 0xec, 0xbb, 0x82, 0xed,
+	0x68, 0x26, 0xf7, 0x10, 0x81, 0xe1, 0x6c, 0x5a, 0x6f, 0xe4, 0x0c, 0x8e, 0x2f, 0x17, 0xae, 0x62,
+	0x73, 0xd2, 0xc5, 0xec, 0x78, 0xa4, 0x25, 0x22, 0x1c, 0x83, 0x94, 0xbd, 0xd3, 0xcf, 0x16, 0x7b,
+	0x52, 0x68, 0x23, 0x93, 0x09, 0xa7, 0xa7, 0xba, 0x0a, 0x91, 0x74, 0x72, 0x2e, 0xf9, 0x87, 0xb9,
+	0x4b, 0x14, 0x11, 0xdd, 0x22, 0x81, 0xa7, 0x9d, 0xfe, 0x57, 0x0c, 0xa7, 0x7f, 0xb3, 0x1f, 0xd5,
+	0x05, 0x4d, 0xd8, 0x62, 0xc8, 0x1e, 0xfb, 0xe7, 0x2b, 0x39, 0x04, 0xe9, 0xe4, 0xa2, 0x04, 0x54,
+	0xca, 0xdc, 0xf4, 0xcd, 0x78, 0x02, 0x67, 0x34, 0xa7, 0xf5, 0x27, 0xb5, 0xcf, 0xa9, 0x3f, 0xf9,
+	0xcb, 0x29, 0x97, 0x41, 0x1d, 0xda, 0xd9, 0xfb, 0x81, 0xaa, 0xb0, 0x32, 0x3d, 0x95, 0x04, 0xc8,
+	0x23, 0x3d, 0x55, 0x3a, 0xb6, 0x9a, 0x11, 0x82, 0xe0, 0xef, 0x54, 0xa0, 0xf3, 0x9d, 0x07, 0x2c,
+	0x0b, 0xd5, 0x22, 0x3f, 0x16, 0x97, 0x0e, 0x46, 0xe1, 0x24, 0x8c, 0xc4, 0x39, 0xb1, 0xcd, 0xb0,
+	0x1d, 0x04, 0x19, 0x59, 0xe2, 0x99, 0x52, 0xda, 0x6c, 0x42, 0xb2, 0xec, 0x23, 0x28, 0x57, 0x4b,
+	0x66, 0x86, 0x9c, 0xd6, 0x82, 0x9d, 0xfc, 0x32, 0xf4, 0x25, 0x8b, 0x1f, 0x24, 0x2a, 0x3a, 0x4e,
+	0xa3, 0x08, 0xf6, 0x02, 0xe9, 0x0d, 0x43, 0xed, 0xef, 0xc0, 0xba, 0xa3, 0x46, 0x61, 0x10, 0xa8,
+	0x51, 0xf2, 0x28, 0xce, 0x54, 0x07, 0x12, 0xbe, 0xb3, 0x62, 0x86, 0xef, 0x3c, 0x2b, 0xe4, 0xa7,
+	0xfd, 0x29, 0xf4, 0xd2, 0x97, 0xe1, 0x76, 0xdc, 0xc8, 0x8b, 0xe9, 0x91, 0x7f, 0x7e, 0xd2, 0x5c,
+	0x93, 0xbb, 0xfc, 0xa2, 0xb9, 0xf5, 0x9e, 0xf9, 0xe8, 0x8f, 0xe1, 0x92, 0x70, 0x56, 0x94, 0x32,
+	0xfd, 0x1e, 0x10, 0x1b, 0x0a, 0x57, 0x75, 0x74, 0x78, 0x71, 0x80, 0x2b, 0x77, 0xd3, 0x2a, 0x73,
+	0x9f, 0x5b, 0x29, 0x75, 0x9f, 0xcb, 0xf9, 0x64, 0x55, 0x97, 0xba, 0x2b, 0xd6, 0xca, 0xdd, 0x15,
+	0xeb, 0xe5, 0xee, 0x8a, 0xab, 0x4b, 0xdd, 0x15, 0x1b, 0x67, 0xbb, 0x2b, 0x36, 0x17, 0xdc, 0x15,
+	0x0b, 0xa4, 0x6e, 0x6b, 0x81, 0xd4, 0x2d, 0x28, 0xc6, 0x81, 0x1f, 0xe3, 0x37, 0x14, 0xe3, 0xe7,
+	0x3b, 0x1b, 0x92, 0xb4, 0x43, 0xa6, 0x29, 0x8d, 0x6e, 0x1e, 0xc9, 0x0c, 0x9d, 0x3c, 0x91, 0x87,
+	0xe1, 0xa2, 0xf6, 0xbd, 0x5f, 0xa6, 0x7d, 0x1f, 0x42, 0x8f, 0x03, 0x84, 0xef, 0xbb, 0xc7, 0x2a,
+	0xd5, 0x55, 0x95, 0xbc, 0x17, 0x9f, 0x7f, 0xe2, 0x7e, 0x25, 0xff, 0xc4, 0x3d, 0xbd, 0xd7, 0xe2,
+	0x1d, 0x1b, 0x5e, 0xd8, 0x5d, 0xa7, 0xe9, 0x7a, 0xc7, 0xbc, 0x1d, 0x7f, 0xb6, 0x02, 0xc0, 0x8d,
+	0xe8, 0x97, 0x40, 0x98, 0x69, 0xca, 0xb6, 0x48, 0x93, 0x00, 0xc2, 0x97, 0x70, 0x62, 0xd1, 0x2f,
+	0xaf, 0x4b, 0xe0, 0x0f, 0xf4, 0x46, 0xb8, 0x01, 0x5d, 0xea, 0x65, 0x21, 0xea, 0x4d, 0xb9, 0xd7,
+	0x41, 0x1b, 0x87, 0x20, 0x41, 0x6e, 0xec, 0x9f, 0xae, 0x40, 0x6f, 0x8f, 0x63, 0xc7, 0xed, 0x85,
+	0xf1, 0x62, 0x8f, 0x56, 0x0a, 0x3d, 0xca, 0xe6, 0xa3, 0x6a, 0xce, 0xc7, 0xc2, 0x03, 0xf3, 0x7c,
+	0xa6, 0xf3, 0x0f, 0xcc, 0xe7, 0x27, 0xad, 0x9e, 0x9f, 0x34, 0xfb, 0xe7, 0x2a, 0xd0, 0x96, 0x9e,
+	0x50, 0x37, 0x9e, 0x85, 0x36, 0xc5, 0xba, 0xcb, 0x05, 0xd1, 0x6d, 0x21, 0x88, 0x27, 0xf9, 0x06,
+	0xd0, 0xc7, 0xf2, 0x30, 0x0b, 0xf9, 0x61, 0x39, 0x4d, 0xcc, 0xad, 0xfd, 0xbd, 0xd3, 0x48, 0x7a,
+	0xa6, 0xa7, 0x7c, 0x47, 0x82, 0xe8, 0xf1, 0x3a, 0x3d, 0x82, 0xce, 0x9e, 0x4a, 0x72, 0x2f, 0xd7,
+	0x2d, 0x7f, 0x51, 0xad, 0xdc, 0x12, 0x83, 0x30, 0x6f, 0x4a, 0x2e, 0xd3, 0x7f, 0xfb, 0x2f, 0xd6,
+	0xa0, 0x21, 0x2b, 0xf1, 0xf9, 0x1e, 0xa0, 0x4c, 0x9b, 0xa8, 0x9a, 0x4d, 0x3c, 0xd1, 0xc4, 0xdf,
+	0xc8, 0xbd, 0x29, 0x57, 0xf6, 0x4e, 0xa7, 0x39, 0x52, 0xe3, 0x49, 0x39, 0x33, 0xc6, 0xe2, 0x6a,
+	0x2e, 0xc6, 0x62, 0x6a, 0xcf, 0x25, 0xd1, 0xb6, 0xe8, 0xc3, 0xba, 0x2b, 0x91, 0x0e, 0x8d, 0x97,
+	0x1c, 0x9b, 0x25, 0x32, 0x62, 0x6c, 0x2d, 0xff, 0x4c, 0x67, 0x17, 0x8b, 0xa5, 0xaf, 0x4a, 0xe2,
+	0x91, 0xe6, 0x77, 0xea, 0x75, 0xe3, 0x62, 0xc4, 0x4d, 0xc0, 0x7b, 0xdc, 0x83, 0x1f, 0xe4, 0x73,
+	0xf4, 0x25, 0x71, 0x20, 0xaf, 0xb1, 0xbb, 0x6e, 0xfe, 0xfd, 0xff, 0xb2, 0x67, 0xeb, 0xdf, 0xfe,
+	0x02, 0xcf, 0xd6, 0xdf, 0x85, 0x2e, 0xa3, 0x00, 0x2d, 0x80, 0x59, 0x82, 0x66, 0x9e, 0x85, 0x36,
+	0xb2, 0x9e, 0xa3, 0x1c, 0xf7, 0xd9, 0x52, 0x81, 0x27, 0x26, 0x12, 0x47, 0x74, 0x64, 0x1e, 0xb8,
+	0xc1, 0xdc, 0x9d, 0xec, 0x3f, 0x2c, 0x1c, 0xb0, 0xca, 0x59, 0x58, 0x69, 0x25, 0x8f, 0x95, 0x16,
+	0x88, 0xf8, 0xea, 0x02, 0x11, 0x6f, 0xff, 0xa6, 0x3c, 0x10, 0xb0, 0xa7, 0x8c, 0x78, 0x87, 0xe6,
+	0x13, 0x01, 0x1c, 0xc7, 0x2a, 0x75, 0xa0, 0x32, 0xcc, 0xeb, 0x56, 0x8a, 0xe6, 0x75, 0x45, 0xcd,
+	0x57, 0x75, 0x51, 0xf3, 0xf5, 0x2a, 0xac, 0x9b, 0x56, 0x9a, 0x83, 0x83, 0x89, 0x7b, 0x28, 0xf7,
+	0x5c, 0x3f, 0xce, 0xcc, 0x34, 0xef, 0x4e, 0xdc, 0xc3, 0xa2, 0xfd, 0x5d, 0x7d, 0xc1, 0xfe, 0xee,
+	0xf7, 0xaa, 0x1c, 0x25, 0x0d, 0xfb, 0xfe, 0x0c, 0x3f, 0xc5, 0x6e, 0xcc, 0x37, 0x3f, 0xbe, 0xb4,
+	0x47, 0x53, 0x7e, 0x93, 0xb7, 0xc2, 0x94, 0xe6, 0xf4, 0x09, 0x5f, 0xa0, 0xc4, 0x5d, 0xc2, 0x8b,
+	0x20, 0x66, 0xdb, 0xf2, 0xc2, 0xc5, 0xf2, 0x17, 0xf1, 0x73, 0xab, 0xef, 0xc8, 0xeb, 0x1c, 0x54,
+	0xd8, 0xf4, 0x1d, 0xab, 0x3d, 0x81, 0xef, 0x98, 0xf5, 0x8e, 0x89, 0x07, 0xcb, 0x9e, 0xd3, 0x33,
+	0x90, 0xaa, 0x81, 0x04, 0x1f, 0xc0, 0xa6, 0x31, 0xce, 0x45, 0xf7, 0x8e, 0x85, 0x3a, 0xf4, 0x2e,
+	0x73, 0x2e, 0xa4, 0xa3, 0x35, 0x3c, 0x3c, 0x74, 0xf0, 0xfd, 0x99, 0x4a, 0xc4, 0xb7, 0x63, 0x31,
+	0xf8, 0xfe, 0x9e, 0x4a, 0x38, 0xf8, 0x3e, 0xae, 0xc2, 0x7b, 0x8c, 0x84, 0x17, 0x30, 0xc5, 0x02,
+	0x5e, 0xca, 0x9e, 0x7d, 0x45, 0xfc, 0x9c, 0xbd, 0x3c, 0xfb, 0x19, 0x6c, 0xec, 0xa9, 0xe4, 0xa6,
+	0x77, 0x7c, 0x73, 0x34, 0xf6, 0xd5, 0xb1, 0x42, 0x66, 0x3d, 0x7d, 0x2d, 0x2d, 0xdd, 0xe7, 0xb2,
+	0xbc, 0xe9, 0x3e, 0x7f, 0x05, 0xd6, 0xdc, 0x2c, 0xbf, 0x79, 0xac, 0xfa, 0x06, 0x5c, 0x7b, 0xfa,
+	0x17, 0xc2, 0x81, 0xff, 0x30, 0xf4, 0x8c, 0xc7, 0x1c, 0xfd, 0x30, 0x28, 0xd7, 0x5b, 0x9c, 0xf5,
+	0x40, 0xe6, 0x25, 0x36, 0x00, 0x37, 0x54, 0xe1, 0x8d, 0x49, 0xc8, 0xc2, 0xc5, 0x7f, 0x5d, 0x01,
+	0x6b, 0x37, 0x38, 0xf6, 0x13, 0x8a, 0xed, 0x7f, 0x7e, 0x24, 0xed, 0xa7, 0x73, 0x91, 0xb4, 0xf9,
+	0xac, 0xeb, 0x50, 0xd9, 0x2f, 0xe9, 0x58, 0x7d, 0x69, 0x00, 0xb7, 0xaa, 0xf9, 0x3a, 0x97, 0x84,
+	0x70, 0x5b, 0x88, 0x94, 0x5a, 0x5b, 0x8c, 0x94, 0xfa, 0x1a, 0x05, 0xba, 0x9b, 0x4d, 0x54, 0x42,
+	0x0f, 0x97, 0xe4, 0xbc, 0x63, 0xd7, 0x74, 0xca, 0x03, 0xf7, 0x84, 0xfd, 0x0c, 0x4f, 0x61, 0x3d,
+	0x1b, 0x82, 0xd8, 0xb1, 0x93, 0x0e, 0x9b, 0x0d, 0x77, 0x32, 0x32, 0x86, 0xf9, 0x8b, 0x1e, 0xc3,
+	0x53, 0x3a, 0xe6, 0x05, 0xe8, 0xcc, 0xa2, 0x70, 0xa4, 0xe2, 0xd8, 0x5c, 0x99, 0xb6, 0xc0, 0xb4,
+	0xab, 0x52, 0xa4, 0x62, 0x0a, 0xbc, 0x22, 0x9a, 0x9f, 0x48, 0xc5, 0x1f, 0xb9, 0x13, 0xfb, 0x17,
+	0x2b, 0xf0, 0x54, 0xd6, 0x36, 0x1b, 0x01, 0x7d, 0xe4, 0x4e, 0x96, 0x47, 0x6b, 0x2b, 0xb9, 0xb0,
+	0x17, 0x23, 0x46, 0x54, 0xcb, 0x22, 0x46, 0x18, 0x7d, 0xa8, 0x69, 0x3b, 0x60, 0xec, 0x43, 0xc6,
+	0x9c, 0xd7, 0x0d, 0xb9, 0xae, 0xfd, 0xfb, 0x55, 0x56, 0x9f, 0x64, 0xbd, 0xa3, 0x9b, 0x7e, 0xa2,
+	0x8d, 0x8e, 0x34, 0x31, 0x31, 0x61, 0xab, 0x23, 0xeb, 0x6d, 0xd8, 0xa4, 0x70, 0x81, 0x7e, 0x9a,
+	0x1f, 0xb3, 0x0d, 0xd3, 0x28, 0xc6, 0x17, 0x31, 0x35, 0xab, 0xec, 0x03, 0x4a, 0xc3, 0x8d, 0x37,
+	0x75, 0xe3, 0x44, 0xe8, 0x36, 0x51, 0x19, 0x32, 0x44, 0x48, 0x49, 0x49, 0x2e, 0x38, 0x81, 0x75,
+	0x19, 0xac, 0x85, 0x99, 0xaf, 0xc2, 0x3a, 0xf7, 0x4c, 0x96, 0x2c, 0x45, 0x2b, 0x35, 0xa7, 0x4f,
+	0x09, 0x3c, 0xb3, 0xe2, 0x15, 0x67, 0x58, 0xc8, 0xaf, 0x96, 0x3c, 0x83, 0xb6, 0xb8, 0x9d, 0x8d,
+	0xd8, 0xdf, 0xf7, 0xa1, 0x2f, 0x6d, 0xa4, 0x6f, 0xf8, 0xb0, 0x4b, 0xc4, 0x8b, 0x4b, 0xea, 0xc8,
+	0xad, 0xa9, 0xd3, 0xe5, 0xc2, 0xfa, 0x29, 0x9f, 0x77, 0x0d, 0xcf, 0x8a, 0x32, 0x9a, 0x63, 0x61,
+	0x5b, 0xa6, 0xee, 0x15, 0xf4, 0x4e, 0x0f, 0x0d, 0x39, 0x52, 0x14, 0x00, 0x48, 0xe6, 0x29, 0x75,
+	0xfd, 0xad, 0x39, 0x1b, 0x94, 0xee, 0x50, 0xf2, 0x03, 0x4a, 0x95, 0x6b, 0xbc, 0x79, 0x3b, 0x72,
+	0x1f, 0x6b, 0xac, 0xc3, 0xef, 0xf2, 0x19, 0x6e, 0xbb, 0xf4, 0x2e, 0x9f, 0x18, 0x0b, 0xa6, 0x8f,
+	0xf6, 0xe9, 0xc3, 0xda, 0xd2, 0xaf, 0xf6, 0xc5, 0xf6, 0x7f, 0x12, 0xef, 0x5c, 0xac, 0xcc, 0xba,
+	0x0e, 0x6d, 0xca, 0x1b, 0x93, 0x3b, 0x61, 0xb9, 0xfd, 0x8b, 0x34, 0xea, 0x50, 0xad, 0xec, 0x77,
+	0x48, 0x61, 0x43, 0xf1, 0x24, 0x73, 0x43, 0xb4, 0x8b, 0x33, 0xc3, 0xfe, 0x35, 0x4c, 0xc2, 0x62,
+	0x14, 0x22, 0x17, 0x37, 0xd9, 0x57, 0xc0, 0x42, 0xfc, 0x5b, 0xc8, 0x2d, 0x3e, 0x31, 0x33, 0x95,
+	0xe4, 0x32, 0x7f, 0x1d, 0x9e, 0xce, 0xbd, 0x62, 0x9e, 0x2f, 0xc4, 0x67, 0x60, 0xd3, 0x78, 0xb2,
+	0xdc, 0x28, 0x6b, 0xff, 0xdd, 0x0a, 0xb4, 0x9c, 0x79, 0xa0, 0xbe, 0x13, 0x86, 0x5e, 0xfc, 0x85,
+	0x82, 0x58, 0x3c, 0x07, 0xed, 0xb1, 0x1f, 0x27, 0x61, 0x74, 0x3a, 0x18, 0xce, 0x4f, 0xb5, 0xf1,
+	0x9c, 0x80, 0x6e, 0xcd, 0x4f, 0x17, 0x3c, 0x1b, 0x8d, 0x48, 0x05, 0x5a, 0x22, 0x5d, 0x34, 0x59,
+	0xaf, 0xb2, 0x44, 0xda, 0xb0, 0x54, 0xff, 0x25, 0x52, 0x9a, 0x07, 0xec, 0x22, 0xfd, 0x14, 0x34,
+	0xc8, 0x09, 0xdb, 0x90, 0x10, 0x8c, 0xc3, 0x19, 0x53, 0x64, 0xf1, 0x7c, 0x38, 0xd0, 0x89, 0x5a,
+	0xe2, 0x35, 0x1f, 0xee, 0x73, 0xfa, 0x3b, 0x3a, 0xdc, 0x81, 0x61, 0xa3, 0x58, 0x34, 0xc6, 0x97,
+	0xb9, 0x90, 0x30, 0x08, 0xa9, 0xf8, 0xc5, 0x78, 0x0b, 0x43, 0x47, 0x28, 0x30, 0x9e, 0xc1, 0xb0,
+	0xff, 0x5b, 0x05, 0xda, 0x58, 0xf6, 0xce, 0xc9, 0x6c, 0x82, 0x14, 0xd6, 0x26, 0x3d, 0xb8, 0x71,
+	0xff, 0x78, 0x92, 0xbe, 0xd0, 0x4c, 0x5f, 0x78, 0x2d, 0xe8, 0xc7, 0xe1, 0xf4, 0xb5, 0xa0, 0xbf,
+	0xad, 0x67, 0x01, 0xa6, 0x7e, 0x8c, 0xac, 0xee, 0x9d, 0x13, 0xfd, 0x9c, 0x9f, 0x01, 0xb1, 0xb6,
+	0xa0, 0x31, 0x64, 0xaf, 0x15, 0x31, 0x75, 0xd6, 0x9f, 0x96, 0x0d, 0x9d, 0x83, 0xf9, 0x64, 0xf2,
+	0xc0, 0x3d, 0xb9, 0x99, 0x92, 0x58, 0x4d, 0x27, 0x07, 0xb3, 0xde, 0xd0, 0xd8, 0xef, 0x5c, 0x07,
+	0x51, 0x51, 0x78, 0x3d, 0x0f, 0x6d, 0x77, 0x12, 0x29, 0xd7, 0x3b, 0xc5, 0x81, 0x69, 0x29, 0xa9,
+	0x01, 0xb2, 0xff, 0xcb, 0x0a, 0x74, 0xf0, 0x4f, 0xaa, 0xbf, 0x21, 0xdb, 0xc0, 0x58, 0x25, 0x29,
+	0x1f, 0x5f, 0xd1, 0xb6, 0x81, 0xb1, 0x4a, 0x84, 0x8d, 0x47, 0x1c, 0x36, 0x0d, 0x83, 0x64, 0x2c,
+	0xa1, 0xef, 0x43, 0xcf, 0x3f, 0x38, 0x15, 0xa7, 0xb0, 0x3e, 0x25, 0x50, 0xd8, 0x7b, 0x02, 0x5b,
+	0x6f, 0xc2, 0xc5, 0x79, 0x8c, 0xb7, 0x64, 0xa4, 0x3c, 0x3f, 0xc9, 0x23, 0xfe, 0xba, 0x63, 0x61,
+	0xda, 0x0e, 0x25, 0xa5, 0xd8, 0xff, 0x75, 0xb8, 0x40, 0x17, 0x61, 0xa1, 0x00, 0x9f, 0x82, 0xf5,
+	0xa9, 0x7b, 0x52, 0xc8, 0xbf, 0x0d, 0x1b, 0x85, 0xbc, 0xf2, 0x3c, 0x25, 0xcf, 0xe1, 0x85, 0x51,
+	0x2e, 0x3b, 0x3f, 0x54, 0x79, 0x1f, 0x7a, 0xb3, 0xc8, 0x3f, 0xf6, 0x27, 0xea, 0x50, 0x82, 0x6d,
+	0xae, 0x96, 0x38, 0x94, 0xd2, 0x76, 0xe5, 0x98, 0x25, 0x7b, 0x3a, 0x37, 0xe3, 0xc6, 0x99, 0xf9,
+	0x89, 0xec, 0x94, 0x1f, 0x0f, 0x66, 0x2e, 0xbd, 0x0f, 0xac, 0x46, 0x47, 0xa2, 0x68, 0x6e, 0xfb,
+	0xf1, 0x9e, 0x1b, 0xc7, 0x3b, 0x08, 0xb2, 0x7f, 0x1c, 0xb6, 0x96, 0x55, 0x47, 0x52, 0x5e, 0x86,
+	0x1b, 0x9c, 0xb8, 0x40, 0x58, 0x48, 0x64, 0x1e, 0xaf, 0x54, 0xdd, 0x99, 0xba, 0x90, 0x14, 0xaf,
+	0xf5, 0xea, 0xc2, 0xb5, 0x6e, 0xff, 0x13, 0x41, 0x81, 0xd8, 0x07, 0x6b, 0x5b, 0x42, 0x20, 0x2c,
+	0x75, 0x98, 0xd4, 0xe7, 0x94, 0x23, 0x23, 0xe8, 0x50, 0x10, 0xd1, 0x3c, 0x50, 0x03, 0xc5, 0xc7,
+	0x43, 0xec, 0xa9, 0xb6, 0x16, 0x8a, 0xc9, 0xf1, 0x71, 0xda, 0x91, 0x71, 0x96, 0xae, 0x43, 0x8b,
+	0x0a, 0x53, 0x40, 0xce, 0xd2, 0x07, 0x25, 0x8c, 0x3d, 0xe8, 0x34, 0x23, 0xf9, 0xb2, 0xdf, 0xc7,
+	0xdd, 0x19, 0x8f, 0x1d, 0x37, 0x38, 0x7a, 0x18, 0xce, 0xae, 0x2d, 0x0b, 0x55, 0x2b, 0xef, 0x4f,
+	0x93, 0x10, 0xc0, 0x93, 0x90, 0xb6, 0x0b, 0x51, 0x61, 0xff, 0x59, 0x05, 0xd6, 0x28, 0x26, 0xb9,
+	0xe1, 0xbf, 0x4f, 0x41, 0x1d, 0xc8, 0xb7, 0xc7, 0xb8, 0x55, 0xc8, 0x85, 0x07, 0x6f, 0x95, 0xa7,
+	0xa0, 0xe1, 0x07, 0x03, 0xfc, 0xd4, 0xd1, 0x9e, 0xfc, 0x00, 0x6b, 0x48, 0x4d, 0xb8, 0x28, 0x49,
+	0xde, 0x88, 0x25, 0x54, 0x82, 0x89, 0x4c, 0xa3, 0x1c, 0x66, 0xa2, 0xf2, 0x44, 0x47, 0x9f, 0x23,
+	0xa5, 0x9d, 0x11, 0x61, 0x93, 0x00, 0x77, 0x82, 0xcc, 0x52, 0xc8, 0x0c, 0x6e, 0x4f, 0xfd, 0x62,
+	0xa2, 0xef, 0x6f, 0xaf, 0x40, 0xef, 0xb6, 0x1b, 0xee, 0x48, 0xb4, 0xaa, 0xff, 0x33, 0xb5, 0xe2,
+	0x99, 0xb6, 0xdb, 0xb0, 0x40, 0x63, 0xcd, 0x4d, 0xdf, 0xd0, 0x8b, 0x17, 0xf2, 0x9e, 0xaf, 0x19,
+	0x2f, 0x6c, 0x7e, 0x7e, 0x42, 0xcd, 0xd8, 0xfc, 0xf6, 0x4f, 0x57, 0x60, 0xcb, 0x98, 0x9d, 0xbd,
+	0x30, 0x36, 0xa2, 0x87, 0x2e, 0x35, 0xbc, 0x78, 0xd5, 0x7c, 0x41, 0x33, 0x6f, 0x26, 0x96, 0x3d,
+	0x8e, 0x99, 0xe9, 0xa9, 0xcd, 0xc0, 0xdc, 0xd9, 0x09, 0xeb, 0x66, 0x91, 0xb9, 0xb1, 0x27, 0xbf,
+	0x5a, 0x85, 0x8d, 0x7c, 0x4f, 0xce, 0xb5, 0xff, 0xb8, 0x0a, 0x6b, 0x2c, 0x0b, 0x5c, 0xe8, 0x45,
+	0x8f, 0xe0, 0x59, 0x27, 0x5e, 0x04, 0x86, 0x14, 0xfb, 0xd0, 0x21, 0xa8, 0xa6, 0x2e, 0xaf, 0xc1,
+	0x26, 0xe7, 0xc2, 0x63, 0xa5, 0x46, 0x49, 0x91, 0x18, 0xbd, 0x40, 0xa9, 0x7b, 0x9c, 0xa8, 0x0b,
+	0x15, 0xec, 0x4a, 0xea, 0x5f, 0xd4, 0xae, 0x84, 0x2b, 0xa1, 0xd0, 0x9b, 0x99, 0x40, 0x8b, 0xfb,
+	0x47, 0x01, 0x38, 0x77, 0xbd, 0x12, 0xeb, 0x93, 0x46, 0x89, 0xf5, 0x89, 0xa9, 0x19, 0x6a, 0x9e,
+	0xe5, 0x07, 0xd0, 0x2a, 0x5a, 0x38, 0x16, 0x2d, 0xbd, 0x60, 0xd1, 0x46, 0xf8, 0xd7, 0x2a, 0x70,
+	0xa1, 0xc4, 0xef, 0x99, 0x1c, 0x94, 0x38, 0xe0, 0x92, 0x5e, 0xa4, 0x06, 0x45, 0x44, 0xe2, 0x67,
+	0x9c, 0x75, 0x2c, 0x26, 0xa1, 0x9c, 0x38, 0x25, 0x2d, 0x93, 0x91, 0x76, 0x94, 0x51, 0x88, 0x2a,
+	0xbd, 0x6f, 0xb3, 0x87, 0xa5, 0xf4, 0xbe, 0x15, 0x9a, 0x75, 0xec, 0xc6, 0xa6, 0x48, 0xa5, 0xe9,
+	0xb4, 0xc6, 0xae, 0xec, 0x5e, 0xfb, 0x17, 0x2a, 0xd0, 0x31, 0xbd, 0x95, 0x73, 0x9c, 0xad, 0x68,
+	0x09, 0x85, 0xb3, 0x3d, 0x3b, 0xb0, 0xdc, 0xa2, 0x1d, 0xd1, 0x75, 0x89, 0x09, 0xf5, 0x84, 0xc6,
+	0x59, 0xbe, 0x38, 0x81, 0xdb, 0x7f, 0xbd, 0xc6, 0xe1, 0x73, 0x8d, 0x3d, 0xfe, 0xe4, 0x8f, 0x86,
+	0xbc, 0x0e, 0x99, 0x11, 0xcb, 0x20, 0x7b, 0x1b, 0x64, 0x45, 0x1e, 0xc6, 0xd5, 0x49, 0xb7, 0xf4,
+	0x23, 0x21, 0x67, 0xbe, 0x20, 0x42, 0xfa, 0x9d, 0x58, 0x95, 0x38, 0x57, 0xf6, 0x10, 0x6e, 0x78,
+	0x57, 0x5e, 0x86, 0x16, 0xce, 0x9a, 0xc9, 0x35, 0xe2, 0x34, 0xb2, 0xda, 0x5c, 0x1b, 0x1d, 0xbb,
+	0x49, 0xe2, 0x8e, 0x8e, 0x08, 0x0b, 0xad, 0x66, 0x46, 0xc7, 0x37, 0x09, 0x2a, 0x96, 0x30, 0x89,
+	0x3f, 0x8b, 0x07, 0x9e, 0x8a, 0x47, 0x62, 0x55, 0xdb, 0x44, 0xc0, 0x6d, 0x15, 0x8f, 0xce, 0xf0,
+	0xb8, 0x87, 0x1f, 0x9c, 0xc7, 0x7d, 0xfb, 0x89, 0x3c, 0xee, 0x3b, 0x4f, 0xe6, 0x71, 0xdf, 0x3d,
+	0xc7, 0xe3, 0xbe, 0x77, 0x96, 0xc7, 0x7d, 0x3f, 0xef, 0x71, 0x6f, 0x3b, 0xec, 0x5d, 0xb0, 0x33,
+	0x56, 0x6e, 0x42, 0xa1, 0xfa, 0x72, 0x21, 0xff, 0xd8, 0x06, 0x31, 0x0b, 0xf9, 0xc7, 0xa1, 0x60,
+	0x39, 0xd0, 0xcb, 0x28, 0x1a, 0x5d, 0xdb, 0xd6, 0x6f, 0x1c, 0x20, 0xf4, 0x41, 0x7c, 0xb8, 0x83,
+	0x30, 0x7b, 0x97, 0xeb, 0xc4, 0x45, 0xf2, 0xe3, 0xc4, 0x1f, 0x59, 0x37, 0x00, 0x46, 0xd8, 0x80,
+	0x19, 0x17, 0xfd, 0xac, 0x07, 0x76, 0x29, 0x33, 0x59, 0xc2, 0x3e, 0x84, 0xe6, 0x77, 0x95, 0x9a,
+	0xed, 0xbb, 0x47, 0xa4, 0x09, 0x3b, 0x52, 0x6a, 0x36, 0x88, 0xdd, 0x23, 0xc3, 0x70, 0x07, 0x8e,
+	0x24, 0x9d, 0xad, 0x76, 0xb2, 0x1c, 0xa6, 0xfc, 0xa2, 0xab, 0x33, 0xb1, 0xee, 0xe2, 0x94, 0xc3,
+	0x15, 0xa5, 0x35, 0x6f, 0x43, 0x2b, 0x2d, 0x57, 0x4a, 0x50, 0xe9, 0x9c, 0x4e, 0x53, 0x57, 0x64,
+	0xbd, 0x03, 0xcd, 0xa9, 0x9b, 0xa8, 0xc8, 0x77, 0x27, 0x4f, 0xe0, 0xfd, 0xaf, 0xb3, 0xda, 0x37,
+	0xc1, 0xd2, 0x95, 0x9d, 0x29, 0x27, 0x3b, 0x43, 0x10, 0xf6, 0xa7, 0x62, 0xbe, 0xbc, 0x2b, 0xe1,
+	0xa7, 0x48, 0xa6, 0x5d, 0x50, 0xbd, 0xb4, 0x67, 0x2a, 0xd9, 0xd1, 0xaa, 0x91, 0xcb, 0xd0, 0xc2,
+	0x3c, 0x66, 0xf8, 0xfd, 0xe6, 0x4c, 0x25, 0xe9, 0x73, 0xb5, 0x24, 0x50, 0x35, 0x43, 0x22, 0xcf,
+	0x94, 0x78, 0x11, 0xe1, 0x4d, 0xcf, 0x72, 0x6c, 0xd6, 0x8f, 0x18, 0xce, 0x57, 0xfc, 0x8c, 0x13,
+	0x69, 0x45, 0xee, 0x6b, 0x55, 0x8b, 0x7e, 0xb6, 0x3d, 0x7b, 0x02, 0xac, 0xee, 0x74, 0x04, 0x98,
+	0xc6, 0x9f, 0x67, 0x4d, 0x66, 0xf6, 0xc2, 0x57, 0xdd, 0x01, 0x02, 0xa5, 0x19, 0xb8, 0x2d, 0xf3,
+	0x29, 0x20, 0x56, 0xcf, 0xf0, 0x23, 0x0d, 0x37, 0x90, 0xcd, 0x23, 0x19, 0x29, 0x8d, 0xff, 0x95,
+	0x5c, 0xb0, 0xae, 0x8d, 0x05, 0xa1, 0xaa, 0x61, 0x5d, 0xf0, 0xb3, 0x95, 0xb4, 0xe8, 0x6d, 0x93,
+	0xca, 0x34, 0x9f, 0xa1, 0x29, 0x08, 0xee, 0x57, 0x8c, 0x87, 0x8a, 0xf6, 0xb5, 0x25, 0x84, 0xa1,
+	0x6b, 0x66, 0x12, 0xf6, 0x1a, 0xcb, 0xa4, 0x0d, 0x93, 0x87, 0xad, 0x32, 0xe1, 0x2e, 0xdb, 0x0c,
+	0x8b, 0x76, 0xd1, 0xfe, 0x45, 0x71, 0x79, 0xdf, 0x89, 0xc2, 0x38, 0xb6, 0x6e, 0x43, 0xf7, 0x74,
+	0xee, 0x06, 0x88, 0x96, 0x13, 0xda, 0x52, 0x95, 0x92, 0xc0, 0x31, 0x98, 0xfd, 0xff, 0x99, 0xbb,
+	0xc1, 0x3d, 0x37, 0x38, 0x7c, 0x88, 0xb9, 0x9c, 0x7c, 0x21, 0xac, 0x65, 0x84, 0xd5, 0x25, 0xe1,
+	0x2c, 0x49, 0x9f, 0xf5, 0x2a, 0xab, 0x85, 0x1a, 0x7d, 0x18, 0xce, 0xd8, 0xeb, 0x3d, 0x5f, 0xc8,
+	0xfe, 0x95, 0x15, 0x58, 0x5f, 0x68, 0x6a, 0xd1, 0x6e, 0xb8, 0x52, 0x62, 0x37, 0x8c, 0xc8, 0x03,
+	0x73, 0x1b, 0x52, 0x8a, 0x26, 0x01, 0x30, 0x91, 0x5e, 0x28, 0x92, 0xcb, 0x9d, 0x32, 0x19, 0xe1,
+	0x9a, 0xd7, 0xf4, 0x15, 0x8f, 0x09, 0x74, 0xbf, 0x7e, 0x0b, 0x80, 0x73, 0x89, 0xf9, 0xfc, 0xe2,
+	0x40, 0x72, 0xfd, 0x63, 0xcd, 0x5c, 0xa2, 0xff, 0x5a, 0xdf, 0x34, 0xe4, 0x5d, 0xf5, 0x92, 0xe0,
+	0x60, 0xb9, 0xc2, 0x0b, 0x22, 0x2f, 0xdc, 0x06, 0xd4, 0x78, 0x6e, 0x9b, 0x12, 0x88, 0x77, 0xe1,
+	0x4f, 0x55, 0x61, 0x7d, 0xa1, 0xfd, 0x72, 0x3b, 0x1d, 0x0a, 0xcb, 0x2b, 0xdc, 0x0d, 0xfe, 0xa7,
+	0x18, 0x1c, 0xc5, 0xf1, 0x73, 0xcf, 0x69, 0xe0, 0x2f, 0x42, 0x4f, 0x53, 0x57, 0xf2, 0xe2, 0x36,
+	0x5f, 0x8d, 0x1d, 0x91, 0xd9, 0xf0, 0x73, 0xdb, 0x45, 0x85, 0x14, 0xdf, 0x8d, 0x39, 0xab, 0xb2,
+	0xe7, 0xa0, 0xed, 0xf9, 0x11, 0x1e, 0x47, 0xaa, 0x45, 0x9e, 0x04, 0x22, 0x10, 0xd7, 0x81, 0xd7,
+	0xb0, 0xca, 0xbf, 0xef, 0x2b, 0x07, 0xae, 0x37, 0x54, 0xe6, 0xf3, 0xbd, 0xd6, 0x5b, 0xb0, 0x91,
+	0xcb, 0x99, 0x4a, 0x24, 0x9b, 0x74, 0x41, 0x58, 0x46, 0x76, 0x2d, 0x70, 0x44, 0x52, 0x31, 0x0a,
+	0xa7, 0x83, 0x48, 0xb9, 0x13, 0x0e, 0x4d, 0xac, 0x9f, 0xe5, 0x8a, 0xc2, 0xa9, 0xa3, 0xdc, 0x09,
+	0x05, 0x27, 0xfe, 0x12, 0x74, 0xf5, 0x3b, 0xbe, 0x19, 0xc5, 0x57, 0x77, 0x3a, 0x1a, 0xa8, 0xe9,
+	0x49, 0xf2, 0xd1, 0xc5, 0xfe, 0xb1, 0x21, 0x6b, 0x03, 0xbf, 0x3f, 0x98, 0x4f, 0xed, 0x7f, 0xb5,
+	0x02, 0x17, 0xcb, 0x96, 0xf2, 0x07, 0xc9, 0x61, 0x95, 0x33, 0x52, 0xb5, 0x73, 0x19, 0x29, 0x83,
+	0x39, 0xaa, 0x97, 0x33, 0x47, 0x0b, 0x35, 0xd3, 0x3c, 0xf1, 0x6e, 0xcb, 0xd5, 0xfc, 0xc9, 0xe2,
+	0xbe, 0x69, 0x14, 0xf7, 0x4d, 0x8e, 0x2c, 0x6c, 0x3e, 0x39, 0x59, 0xf8, 0xe3, 0xd0, 0x63, 0xf6,
+	0xe0, 0x7f, 0xcf, 0xfb, 0x5c, 0x3f, 0xc6, 0xc8, 0x26, 0x87, 0x91, 0x70, 0xf3, 0x1c, 0xbb, 0x13,
+	0xdf, 0xe0, 0xd8, 0x24, 0xbe, 0x12, 0x41, 0x35, 0x9f, 0x71, 0x53, 0xfb, 0xc0, 0x18, 0x6a, 0xc8,
+	0x7c, 0x9f, 0x74, 0x85, 0xb9, 0x37, 0x06, 0xc4, 0x4f, 0x46, 0xdb, 0x77, 0x6c, 0x94, 0x66, 0xc2,
+	0xb3, 0x9c, 0xb1, 0x12, 0xf8, 0xd7, 0x7a, 0x57, 0x37, 0x67, 0x4c, 0x41, 0x5e, 0x6d, 0x59, 0xd6,
+	0x4c, 0x16, 0x61, 0xb5, 0xa0, 0x3e, 0xce, 0x9f, 0x56, 0xfb, 0x77, 0x2a, 0xd0, 0xdf, 0xa7, 0xba,
+	0xb2, 0x00, 0xd6, 0xc5, 0x98, 0x34, 0x6b, 0x50, 0x8d, 0x85, 0x89, 0x69, 0x39, 0xf8, 0xd7, 0xfa,
+	0x06, 0xf9, 0x49, 0x25, 0x39, 0xdb, 0xea, 0xbc, 0xae, 0x9d, 0x6a, 0x13, 0x53, 0x02, 0x15, 0x8f,
+	0xc8, 0x8b, 0x4a, 0x9e, 0x1d, 0x21, 0xd3, 0xa2, 0x93, 0x41, 0x7a, 0xb6, 0x6a, 0xda, 0xb4, 0xe8,
+	0xe4, 0x3e, 0x1f, 0x2f, 0xeb, 0x0d, 0xb8, 0x88, 0x39, 0xe2, 0x99, 0x3b, 0x52, 0x03, 0x15, 0x24,
+	0x78, 0xb9, 0x67, 0x7e, 0xe0, 0xeb, 0x53, 0xf7, 0x64, 0x1f, 0x93, 0xee, 0x50, 0x0a, 0x9e, 0xc7,
+	0x6f, 0x43, 0xbf, 0xd0, 0x20, 0xee, 0xa6, 0x34, 0xe2, 0x76, 0xdd, 0xa1, 0xff, 0x3a, 0xa0, 0x5e,
+	0xc6, 0x77, 0xad, 0x8e, 0xe6, 0x11, 0x96, 0xbf, 0xa9, 0xc5, 0x5c, 0xf1, 0x38, 0x0d, 0xdc, 0x42,
+	0x97, 0x7f, 0xe9, 0x8b, 0x6d, 0x98, 0x8d, 0x28, 0x10, 0x71, 0xcc, 0xc2, 0xbf, 0xf6, 0xbf, 0xac,
+	0x70, 0x1c, 0x1b, 0xfa, 0xfa, 0xbf, 0x4e, 0x13, 0xff, 0x57, 0x2a, 0xfc, 0xe6, 0xae, 0x96, 0x3b,
+	0x94, 0xbf, 0xb9, 0x9b, 0x22, 0xaa, 0x15, 0xf3, 0x31, 0xb7, 0x62, 0xe4, 0x23, 0x43, 0xce, 0xaf,
+	0x83, 0x35, 0x19, 0x97, 0xe9, 0x59, 0xc1, 0x9a, 0x88, 0xf6, 0xfe, 0x1a, 0xaf, 0x05, 0xf6, 0xc6,
+	0xfa, 0x0a, 0xd4, 0xb1, 0xe9, 0xe5, 0x6f, 0xf3, 0x52, 0x59, 0xce, 0xa3, 0x0b, 0x7e, 0xec, 0xc7,
+	0x63, 0x2c, 0x18, 0x4f, 0xc2, 0xa4, 0xbc, 0x20, 0xe6, 0xd8, 0x9f, 0x84, 0x89, 0xc3, 0x79, 0xec,
+	0x5f, 0xa9, 0x40, 0x53, 0xc3, 0xac, 0xaf, 0x42, 0xcd, 0x67, 0x0d, 0xcf, 0x39, 0xaf, 0xc0, 0x52,
+	0x36, 0x32, 0xcd, 0x8e, 0x46, 0x3a, 0x1a, 0x17, 0x3f, 0x01, 0x11, 0x8d, 0x74, 0x54, 0xea, 0x65,
+	0xf3, 0xb2, 0x09, 0x62, 0xa6, 0x2d, 0x02, 0x7d, 0x6d, 0xb4, 0xbd, 0x05, 0x0d, 0x3f, 0xbe, 0x3f,
+	0x1f, 0x1d, 0x9d, 0xca, 0xcd, 0xaa, 0x3f, 0xed, 0x04, 0x56, 0xe9, 0xf9, 0xa1, 0x87, 0xd6, 0xdb,
+	0xd0, 0x1a, 0x86, 0x13, 0x5f, 0x33, 0x35, 0x8b, 0xf6, 0xa9, 0xb7, 0x1e, 0xde, 0x0a, 0x27, 0xbe,
+	0x36, 0x2c, 0xe0, 0x7f, 0x54, 0x0a, 0x79, 0xdf, 0x54, 0xe8, 0x59, 0x52, 0x2a, 0x95, 0xa4, 0x0e,
+	0xe5, 0x9f, 0xfd, 0x47, 0x15, 0x80, 0xac, 0xba, 0x25, 0x41, 0xa4, 0x6e, 0x42, 0xdf, 0x08, 0x3f,
+	0xf4, 0x84, 0xb6, 0x19, 0xe9, 0x33, 0x43, 0x84, 0x12, 0x6e, 0x40, 0x57, 0xc7, 0x8e, 0x5e, 0x6e,
+	0x29, 0xa7, 0x03, 0xe0, 0xb6, 0x25, 0x80, 0xb4, 0x26, 0x99, 0x16, 0xd9, 0x79, 0x53, 0xca, 0xfd,
+	0x32, 0xf4, 0xc9, 0x76, 0xde, 0x20, 0x6c, 0xc4, 0x37, 0x0c, 0xc1, 0x29, 0x65, 0x63, 0xff, 0xcd,
+	0x15, 0x1a, 0xaa, 0xd6, 0x68, 0xbc, 0x0e, 0x17, 0x38, 0xe4, 0x6a, 0xfe, 0xfd, 0x01, 0xbe, 0x0f,
+	0x38, 0x72, 0x6b, 0xee, 0x01, 0x82, 0x6f, 0xc1, 0xe5, 0x42, 0xfe, 0x1c, 0xe6, 0x65, 0xc3, 0x9e,
+	0xad, 0x5c, 0x39, 0x33, 0x4c, 0xeb, 0x2b, 0xf4, 0xe0, 0x26, 0x81, 0xf9, 0xc5, 0x81, 0x54, 0x52,
+	0xd7, 0x37, 0xe0, 0xd4, 0xd2, 0xdb, 0xb0, 0x69, 0x66, 0x95, 0x66, 0x3c, 0xf7, 0x54, 0x0e, 0xff,
+	0x45, 0x23, 0x55, 0xcb, 0x34, 0x4f, 0xad, 0x1b, 0xb0, 0x55, 0x52, 0x2a, 0x17, 0x41, 0x76, 0xa1,
+	0x1c, 0xdf, 0x10, 0x7f, 0xdc, 0x81, 0x1a, 0x6e, 0xbd, 0x85, 0x58, 0xd7, 0x5f, 0xf0, 0xbd, 0xac,
+	0xb3, 0xa3, 0x5c, 0xa7, 0x61, 0xab, 0xb3, 0x28, 0xd7, 0x6f, 0x40, 0x53, 0xda, 0x39, 0x14, 0x1c,
+	0x72, 0xb1, 0xa4, 0x99, 0x43, 0xa7, 0xc1, 0xad, 0x1c, 0x12, 0x06, 0xc7, 0x02, 0xa4, 0x16, 0x15,
+	0xc1, 0xe4, 0xe6, 0x42, 0x11, 0xd2, 0x89, 0x3a, 0xd4, 0x1d, 0xfa, 0x9b, 0xf6, 0x6d, 0x34, 0xf6,
+	0x67, 0xa2, 0xd8, 0x59, 0xec, 0xdb, 0xce, 0xd8, 0x9f, 0x71, 0xdf, 0xf0, 0x5f, 0xda, 0xb7, 0xa9,
+	0x3b, 0x2b, 0x37, 0xb0, 0xa1, 0x57, 0x29, 0x67, 0xdc, 0xb7, 0x07, 0xae, 0xd1, 0x08, 0xe2, 0xe1,
+	0xd6, 0xb2, 0x46, 0x10, 0xc9, 0x73, 0x23, 0x6e, 0x44, 0xce, 0xd5, 0x54, 0x46, 0x07, 0xf0, 0x86,
+	0x73, 0x02, 0x78, 0xb7, 0xa3, 0xec, 0xc3, 0xba, 0x01, 0x6d, 0x99, 0x3d, 0x72, 0xcc, 0x6e, 0x2f,
+	0x79, 0x25, 0x49, 0xcc, 0xa3, 0x21, 0x4a, 0xff, 0xa7, 0x5d, 0x95, 0x78, 0xa7, 0xe5, 0x5d, 0x45,
+	0x04, 0xce, 0x5d, 0xd5, 0xaf, 0x8d, 0xcb, 0x1c, 0xba, 0x1c, 0xe9, 0xb4, 0x7c, 0x0e, 0xdd, 0x44,
+	0xcf, 0xa1, 0x9b, 0xa4, 0x73, 0x18, 0x29, 0x36, 0x12, 0x2e, 0x9b, 0x43, 0x47, 0x79, 0x3c, 0x87,
+	0x8e, 0xca, 0x36, 0x1e, 0xbd, 0xa5, 0xd9, 0x5f, 0xd2, 0xc8, 0x03, 0x7a, 0x2f, 0x2f, 0xd2, 0xaf,
+	0x82, 0x7e, 0x07, 0xd6, 0xb8, 0x63, 0xc6, 0x8b, 0x5d, 0x6b, 0x25, 0xce, 0xfd, 0x85, 0x87, 0xbe,
+	0x9c, 0x7e, 0x54, 0x78, 0xf9, 0x4b, 0x37, 0x1e, 0x8f, 0xc3, 0x19, 0x39, 0xd5, 0x94, 0x35, 0xce,
+	0x5a, 0xb0, 0x48, 0x87, 0xf6, 0xfe, 0x36, 0x74, 0xa9, 0x8c, 0x0e, 0x6c, 0x4c, 0xde, 0x36, 0x65,
+	0xaf, 0x9c, 0x6b, 0x2d, 0x93, 0x43, 0x0b, 0x9e, 0xc6, 0xb5, 0xd6, 0x1b, 0x9a, 0xb9, 0xeb, 0x0b,
+	0x4b, 0x36, 0xb4, 0x8e, 0x25, 0x97, 0x06, 0xb4, 0xd3, 0xc5, 0xd8, 0x9b, 0xe5, 0xe2, 0x92, 0x62,
+	0x1c, 0x29, 0x8c, 0x8a, 0xb1, 0x9b, 0x8b, 0x1e, 0x21, 0x3d, 0x01, 0xb9, 0xb1, 0x64, 0x84, 0xb7,
+	0x23, 0xf7, 0x31, 0x8f, 0x90, 0xcc, 0x23, 0x74, 0x99, 0x68, 0x1e, 0xa8, 0xad, 0xcd, 0x25, 0x65,
+	0x9c, 0x79, 0x20, 0xb8, 0x80, 0xf4, 0x89, 0x7a, 0x49, 0x8c, 0x27, 0x55, 0xb6, 0x9e, 0x5a, 0xb2,
+	0x24, 0x86, 0xf0, 0x98, 0x97, 0xe4, 0x76, 0x56, 0xc8, 0xba, 0x09, 0x3d, 0x5e, 0x12, 0x2d, 0xf9,
+	0xdb, 0xda, 0x5a, 0x12, 0x76, 0x21, 0x95, 0x0d, 0x3a, 0xb4, 0x20, 0x99, 0xa8, 0xf0, 0x3d, 0xa9,
+	0x22, 0x93, 0xc7, 0x5d, 0x5a, 0xb2, 0x44, 0xa9, 0x4c, 0x8e, 0x96, 0xe8, 0xbb, 0x99, 0x5c, 0x8e,
+	0xe7, 0x9a, 0x64, 0x1a, 0x5b, 0x4f, 0x2f, 0x99, 0x6b, 0x62, 0x37, 0x78, 0xae, 0x59, 0x00, 0x93,
+	0xcd, 0x5b, 0x3c, 0xde, 0xba, 0xbc, 0x74, 0xde, 0xe2, 0xb1, 0x9e, 0xb7, 0x78, 0x6c, 0xdd, 0x91,
+	0x79, 0x33, 0x6c, 0x3f, 0xb6, 0x9e, 0x29, 0x09, 0xd9, 0x4b, 0x03, 0x4e, 0xad, 0x3f, 0x1c, 0x1a,
+	0x60, 0xf6, 0x6d, 0xa0, 0x62, 0xd7, 0xdb, 0xba, 0xb2, 0x14, 0x15, 0xbb, 0x9e, 0x46, 0xc5, 0x6e,
+	0xb6, 0x35, 0x1e, 0xfb, 0xf1, 0x98, 0x9e, 0xed, 0x29, 0x2b, 0x83, 0xa4, 0x14, 0x97, 0x21, 0x52,
+	0xec, 0x35, 0x68, 0x30, 0x02, 0x4a, 0xe8, 0xf5, 0x9e, 0x62, 0x48, 0x76, 0xa6, 0x6a, 0x9c, 0x55,
+	0x42, 0x3c, 0xc9, 0xad, 0xb5, 0x4f, 0x7a, 0xaf, 0xbf, 0xf1, 0x0d, 0x23, 0xc3, 0x70, 0x95, 0x7e,
+	0xae, 0xfd, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x7b, 0x24, 0xaf, 0xad, 0xb4, 0x00, 0x00,
 }

+ 4 - 0
RO_Server_Trunk-branch_0.1.39/roserver/serverproto/user.proto

@@ -501,6 +501,10 @@ message RoleBattle {
     // 战斗加速时间(客户端显示根据last_record_battle_acce_time+battle_acce_duration为最大能使用的结束时间戳)
     uint64 last_record_battle_acce_time  = 14; // 上次记录时的时间
     uint64 battle_acce_duration          = 15; // 当前剩余的时间
+    uint32      map_level_hard                = 16; //当前场景ID,默认为1
+    uint32      map_id_hard                   = 17; //当前地图ID,默认为1
+    uint32      reward_map_id_hard            = 18;
+    uint32      reward_map_level_hard         = 19;
 }
 
 message ActorPosition {

+ 2357 - 2053
RO_Server_Trunk-branch_bt/roserver/serverproto/config_csv.go

@@ -1,149 +1,150 @@
 package serverproto
 
 const (
-	CFG_ActiveCodeCfg = "ActiveCodeCfg.csv"
-	CFG_ActivitiesBtChargeTaskGoldCfg = "ActivitiesBtChargeTaskGoldCfg.csv"
+	CFG_ActiveCodeCfg                    = "ActiveCodeCfg.csv"
+	CFG_ActivitiesBtChargeTaskGoldCfg    = "ActivitiesBtChargeTaskGoldCfg.csv"
 	CFG_ActivitiesBtChargeTaskRoMoneyCfg = "ActivitiesBtChargeTaskRoMoneyCfg.csv"
-	CFG_ActivitiesBtFirstChargeCfg = "ActivitiesBtFirstChargeCfg.csv"
-	CFG_ActivitiesCfg = "ActivitiesCfg.csv"
-	CFG_ActivitiesCollectionCfg = "ActivitiesCollectionCfg.csv"
-	CFG_ActivitiesDiscountsCfg = "ActivitiesDiscountsCfg.csv"
-	CFG_ActivitiesFirstChargeCfg = "ActivitiesFirstChargeCfg.csv"
-	CFG_ActivitiesFortnightDaysCfg = "ActivitiesFortnightDaysCfg.csv"
-	CFG_ActivitiesFortnightOnlineCfg = "ActivitiesFortnightOnlineCfg.csv"
-	CFG_ActivitiesGiftCfg = "ActivitiesGiftCfg.csv"
-	CFG_ActivitiesKingTaskCfg = "ActivitiesKingTaskCfg.csv"
-	CFG_ActivitieslikabilityCfg = "ActivitieslikabilityCfg.csv"
-	CFG_ActivitiesPetExchangeCfg = "ActivitiesPetExchangeCfg.csv"
-	CFG_ActivitiesRewardCfg = "ActivitiesRewardCfg.csv"
-	CFG_ActivitiesSignInCfg = "ActivitiesSignInCfg.csv"
-	CFG_ActivitiesTaskCfg = "ActivitiesTaskCfg.csv"
-	CFG_ActivitiesTiredChargeCfg = "ActivitiesTiredChargeCfg.csv"
-	CFG_ActivityRoulettelCfg = "ActivityRoulettelCfg.csv"
-	CFG_ActRewardCfg = "ActRewardCfg.csv"
-	CFG_AdvertisingScreen = "AdvertisingScreen.csv"
-	CFG_ArenaLevelCfg = "ArenaLevelCfg.csv"
-	CFG_ArenaRewardCfg = "ArenaRewardCfg.csv"
-	CFG_ArtifactCfg = "ArtifactCfg.csv"
-	CFG_ArtifactExpCfg = "ArtifactExpCfg.csv"
-	CFG_BoliShopCfg = "BoliShopCfg.csv"
-	CFG_BoliVipCfg = "BoliVipCfg.csv"
-	CFG_BTSmashEggsCfg = "BTSmashEggsCfg.csv"
-	CFG_CardCfg = "CardCfg.csv"
-	CFG_CardIdentification = "CardIdentification.csv"
-	CFG_CardReset = "CardReset.csv"
-	CFG_CardSuitNewCfg = "CardSuitNewCfg.csv"
-	CFG_CardUnlockCfg = "CardUnlockCfg.csv"
-	CFG_ClimbingTowerCfg = "ClimbingTowerCfg.csv"
-	CFG_CombinedServiceCfg = "CombinedServiceCfg.csv"
-	CFG_CompetitionAidouluCfg = "CompetitionAidouluCfg.csv"
-	CFG_CompetitionCfg = "CompetitionCfg.csv"
-	CFG_CompetitionDevineCfg = "CompetitionDevineCfg.csv"
-	CFG_CompetitionPrizeWheelCfg = "CompetitionPrizeWheelCfg.csv"
-	CFG_ConditionCfg = "ConditionCfg.csv"
-	CFG_DesignationCfg = "DesignationCfg.csv"
-	CFG_DropCfg = "DropCfg.csv"
-	CFG_EquipCfg = "EquipCfg.csv"
-	CFG_EquipRefineCfg = "EquipRefineCfg.csv"
-	CFG_EquipSuitNewCfg = "EquipSuitNewCfg.csv"
-	CFG_EvilCfg = "EvilCfg.csv"
-	CFG_ExpeditionBuffCfg = "ExpeditionBuffCfg.csv"
-	CFG_ExpeditionBuffDropCfg = "ExpeditionBuffDropCfg.csv"
-	CFG_ExpeditionCfg = "ExpeditionCfg.csv"
-	CFG_FashionCfg = "FashionCfg.csv"
-	CFG_FashionLevelUp = "FashionLevelUp.csv"
-	CFG_FashionPaperCfg = "FashionPaperCfg.csv"
-	CFG_FashionRandom = "FashionRandom.csv"
-	CFG_FashionSuitCfg = "FashionSuitCfg.csv"
-	CFG_FightCfg = "FightCfg.csv"
-	CFG_FunctionCfg = "FunctionCfg.csv"
-	CFG_GlobalCfg = "GlobalCfg.csv"
-	CFG_GuildBadgeCfg = "GuildBadgeCfg.csv"
-	CFG_GuildBossCfg = "GuildBossCfg.csv"
-	CFG_GuildBossRewardCfg = "GuildBossRewardCfg.csv"
-	CFG_GuildDemonCfg = "GuildDemonCfg.csv"
-	CFG_GuildLvCfg = "GuildLvCfg.csv"
-	CFG_GuildWarAgainstCfg = "GuildWarAgainstCfg.csv"
-	CFG_GuildWarBuffCfg = "GuildWarBuffCfg.csv"
-	CFG_GuildWarDojoCfg = "GuildWarDojoCfg.csv"
-	CFG_HeadFrameCfg = "HeadFrameCfg.csv"
-	CFG_HeadPortraitCfg = "HeadPortraitCfg.csv"
-	CFG_HundredDojoCfg = "HundredDojoCfg.csv"
-	CFG_InvitationTaskCfg = "InvitationTaskCfg.csv"
-	CFG_ItemCfg = "ItemCfg.csv"
-	CFG_JobCfg = "JobCfg.csv"
-	CFG_JobExpCfg = "JobExpCfg.csv"
-	CFG_KeepSakeCfg = "KeepSakeCfg.csv"
-	CFG_LevelCfg = "LevelCfg.csv"
-	CFG_LineMissionCfg = "LineMissionCfg.csv"
-	CFG_MailCfg = "MailCfg.csv"
-	CFG_MissionCfg = "MissionCfg.csv"
-	CFG_NatureCfg = "NatureCfg.csv"
-	CFG_NpcCfg = "NpcCfg.csv"
-	CFG_OnlineRewardsCfg = "OnlineRewardsCfg.csv"
-	CFG_ParterAttributeCfg = "ParterAttributeCfg.csv"
-	CFG_ParterCfg = "ParterCfg.csv"
-	CFG_ParterProgressCfg = "ParterProgressCfg.csv"
-	CFG_ParterSkillTreeCfg = "ParterSkillTreeCfg.csv"
-	CFG_PassCheckCfg = "PassCheckCfg.csv"
-	CFG_PassiveSkillCfg = "PassiveSkillCfg.csv"
-	CFG_PetBattleCfg = "PetBattleCfg.csv"
-	CFG_PetCfg = "PetCfg.csv"
-	CFG_PetEquipCfg = "PetEquipCfg.csv"
-	CFG_PetEquipExpCfg = "PetEquipExpCfg.csv"
-	CFG_PetEquipSuitCfg = "PetEquipSuitCfg.csv"
-	CFG_PetExpCfg = "PetExpCfg.csv"
-	CFG_PetpartnerCfg = "PetpartnerCfg.csv"
-	CFG_PetProgressCfg = "PetProgressCfg.csv"
-	CFG_PresspointPvPCfg = "PresspointPvPCfg.csv"
-	CFG_PrivilegeCardCfg = "PrivilegeCardCfg.csv"
-	CFG_PurseShopCfg = "PurseShopCfg.csv"
-	CFG_QualityPointCfg = "QualityPointCfg.csv"
-	CFG_QuickBattleCostCfg = "QuickBattleCostCfg.csv"
-	CFG_RobotCfg = "RobotCfg.csv"
-	CFG_RoleAttributeCfg = "RoleAttributeCfg.csv"
-	CFG_RuneShopExploreCfg = "RuneShopExploreCfg.csv"
-	CFG_RuneShopExploreRewardCfg = "RuneShopExploreRewardCfg.csv"
-	CFG_RuneShopGiftsCfg = "RuneShopGiftsCfg.csv"
-	CFG_RuneShopGuildBattleCfg = "RuneShopGuildBattleCfg.csv"
-	CFG_RuneShopLimitCfg = "RuneShopLimitCfg.csv"
-	CFG_RuneShopMonthCardCfg = "RuneShopMonthCardCfg.csv"
-	CFG_RuneShopRankAidouluCfg = "RuneShopRankAidouluCfg.csv"
-	CFG_RuneShopRankArenaCfg = "RuneShopRankArenaCfg.csv"
-	CFG_RuneShopRankMapCfg = "RuneShopRankMapCfg.csv"
-	CFG_RuneShopRankPetCfg = "RuneShopRankPetCfg.csv"
-	CFG_RuneShopRankSkillCfg = "RuneShopRankSkillCfg.csv"
-	CFG_RuneShopRankTowerCfg = "RuneShopRankTowerCfg.csv"
-	CFG_RushListCfg = "RushListCfg.csv"
-	CFG_RushListTargetCfg = "RushListTargetCfg.csv"
-	CFG_ServiceRecordCfg = "ServiceRecordCfg.csv"
-	CFG_ShieldedWordCfg = "ShieldedWordCfg.csv"
-	CFG_ShopCfg = "ShopCfg.csv"
-	CFG_ShopTypeCfg = "ShopTypeCfg.csv"
-	CFG_SignInCfg = "SignInCfg.csv"
-	CFG_SkillCfg = "SkillCfg.csv"
-	CFG_SkillDemandCfg = "SkillDemandCfg.csv"
-	CFG_SkillLvCfg = "SkillLvCfg.csv"
-	CFG_SkillSlotCfg = "SkillSlotCfg.csv"
-	CFG_SkillSuitNewCfg = "SkillSuitNewCfg.csv"
-	CFG_SkillTreeCfg = "SkillTreeCfg.csv"
-	CFG_SkillUpEffectCfg = "SkillUpEffectCfg.csv"
-	CFG_SummonServerCfg = "SummonServerCfg.csv"
-	CFG_SummonTemplateCfg = "SummonTemplateCfg.csv"
-	CFG_SysReward = "SysReward.csv"
-	CFG_TargetTaskCfg = "TargetTaskCfg.csv"
-	CFG_TopTowerCfgLevel = "TopTowerCfgLevel.csv"
-	CFG_TopTowerCfgReward = "TopTowerCfgReward.csv"
-	CFG_TransportCfg = "TransportCfg.csv"
-	CFG_UIFuncUnLockCfg = "UIFuncUnLockCfg.csv"
-	CFG_VipCfg = "VipCfg.csv"
-	CFG_WishCfg = "WishCfg.csv"
-	CFG_WorldBossCfg = "WorldBossCfg.csv"
-	CFG_WorldBossChangePlayCfg = "WorldBossChangePlayCfg.csv"
+	CFG_ActivitiesBtFirstChargeCfg       = "ActivitiesBtFirstChargeCfg.csv"
+	CFG_ActivitiesCfg                    = "ActivitiesCfg.csv"
+	CFG_ActivitiesCollectionCfg          = "ActivitiesCollectionCfg.csv"
+	CFG_ActivitiesDiscountsCfg           = "ActivitiesDiscountsCfg.csv"
+	CFG_ActivitiesFirstChargeCfg         = "ActivitiesFirstChargeCfg.csv"
+	CFG_ActivitiesFortnightDaysCfg       = "ActivitiesFortnightDaysCfg.csv"
+	CFG_ActivitiesFortnightOnlineCfg     = "ActivitiesFortnightOnlineCfg.csv"
+	CFG_ActivitiesGiftCfg                = "ActivitiesGiftCfg.csv"
+	CFG_ActivitiesKingTaskCfg            = "ActivitiesKingTaskCfg.csv"
+	CFG_ActivitieslikabilityCfg          = "ActivitieslikabilityCfg.csv"
+	CFG_ActivitiesPetExchangeCfg         = "ActivitiesPetExchangeCfg.csv"
+	CFG_ActivitiesRewardCfg              = "ActivitiesRewardCfg.csv"
+	CFG_ActivitiesSignInCfg              = "ActivitiesSignInCfg.csv"
+	CFG_ActivitiesTaskCfg                = "ActivitiesTaskCfg.csv"
+	CFG_ActivitiesTiredChargeCfg         = "ActivitiesTiredChargeCfg.csv"
+	CFG_ActivityRoulettelCfg             = "ActivityRoulettelCfg.csv"
+	CFG_ActRewardCfg                     = "ActRewardCfg.csv"
+	CFG_AdvertisingScreen                = "AdvertisingScreen.csv"
+	CFG_ArenaLevelCfg                    = "ArenaLevelCfg.csv"
+	CFG_ArenaRewardCfg                   = "ArenaRewardCfg.csv"
+	CFG_ArtifactCfg                      = "ArtifactCfg.csv"
+	CFG_ArtifactExpCfg                   = "ArtifactExpCfg.csv"
+	CFG_BoliShopCfg                      = "BoliShopCfg.csv"
+	CFG_BoliVipCfg                       = "BoliVipCfg.csv"
+	CFG_BTSmashEggsCfg                   = "BTSmashEggsCfg.csv"
+	CFG_CardCfg                          = "CardCfg.csv"
+	CFG_CardIdentification               = "CardIdentification.csv"
+	CFG_CardReset                        = "CardReset.csv"
+	CFG_CardSuitNewCfg                   = "CardSuitNewCfg.csv"
+	CFG_CardUnlockCfg                    = "CardUnlockCfg.csv"
+	CFG_ClimbingTowerCfg                 = "ClimbingTowerCfg.csv"
+	CFG_CombinedServiceCfg               = "CombinedServiceCfg.csv"
+	CFG_CompetitionAidouluCfg            = "CompetitionAidouluCfg.csv"
+	CFG_CompetitionCfg                   = "CompetitionCfg.csv"
+	CFG_CompetitionDevineCfg             = "CompetitionDevineCfg.csv"
+	CFG_CompetitionPrizeWheelCfg         = "CompetitionPrizeWheelCfg.csv"
+	CFG_ConditionCfg                     = "ConditionCfg.csv"
+	CFG_DesignationCfg                   = "DesignationCfg.csv"
+	CFG_DropCfg                          = "DropCfg.csv"
+	CFG_EquipCfg                         = "EquipCfg.csv"
+	CFG_EquipRefineCfg                   = "EquipRefineCfg.csv"
+	CFG_EquipSuitNewCfg                  = "EquipSuitNewCfg.csv"
+	CFG_EvilCfg                          = "EvilCfg.csv"
+	CFG_ExpeditionBuffCfg                = "ExpeditionBuffCfg.csv"
+	CFG_ExpeditionBuffDropCfg            = "ExpeditionBuffDropCfg.csv"
+	CFG_ExpeditionCfg                    = "ExpeditionCfg.csv"
+	CFG_FashionCfg                       = "FashionCfg.csv"
+	CFG_FashionLevelUp                   = "FashionLevelUp.csv"
+	CFG_FashionPaperCfg                  = "FashionPaperCfg.csv"
+	CFG_FashionRandom                    = "FashionRandom.csv"
+	CFG_FashionSuitCfg                   = "FashionSuitCfg.csv"
+	CFG_FightCfg                         = "FightCfg.csv"
+	CFG_FunctionCfg                      = "FunctionCfg.csv"
+	CFG_GlobalCfg                        = "GlobalCfg.csv"
+	CFG_GuildBadgeCfg                    = "GuildBadgeCfg.csv"
+	CFG_GuildBossCfg                     = "GuildBossCfg.csv"
+	CFG_GuildBossRewardCfg               = "GuildBossRewardCfg.csv"
+	CFG_GuildDemonCfg                    = "GuildDemonCfg.csv"
+	CFG_GuildLvCfg                       = "GuildLvCfg.csv"
+	CFG_GuildWarAgainstCfg               = "GuildWarAgainstCfg.csv"
+	CFG_GuildWarBuffCfg                  = "GuildWarBuffCfg.csv"
+	CFG_GuildWarDojoCfg                  = "GuildWarDojoCfg.csv"
+	CFG_HeadFrameCfg                     = "HeadFrameCfg.csv"
+	CFG_HeadPortraitCfg                  = "HeadPortraitCfg.csv"
+	CFG_HundredDojoCfg                   = "HundredDojoCfg.csv"
+	CFG_InvitationTaskCfg                = "InvitationTaskCfg.csv"
+	CFG_ItemCfg                          = "ItemCfg.csv"
+	CFG_JobCfg                           = "JobCfg.csv"
+	CFG_JobExpCfg                        = "JobExpCfg.csv"
+	CFG_KeepSakeCfg                      = "KeepSakeCfg.csv"
+	CFG_LevelCfg                         = "LevelCfg.csv"
+	CFG_LineMissionCfg                   = "LineMissionCfg.csv"
+	CFG_MailCfg                          = "MailCfg.csv"
+	CFG_MissionCfg                       = "MissionCfg.csv"
+	CFG_NatureCfg                        = "NatureCfg.csv"
+	CFG_NpcCfg                           = "NpcCfg.csv"
+	CFG_OnlineRewardsCfg                 = "OnlineRewardsCfg.csv"
+	CFG_ParterAttributeCfg               = "ParterAttributeCfg.csv"
+	CFG_ParterCfg                        = "ParterCfg.csv"
+	CFG_ParterProgressCfg                = "ParterProgressCfg.csv"
+	CFG_ParterSkillTreeCfg               = "ParterSkillTreeCfg.csv"
+	CFG_PassCheckCfg                     = "PassCheckCfg.csv"
+	CFG_PassiveSkillCfg                  = "PassiveSkillCfg.csv"
+	CFG_PetBattleCfg                     = "PetBattleCfg.csv"
+	CFG_PetCfg                           = "PetCfg.csv"
+	CFG_PetEquipCfg                      = "PetEquipCfg.csv"
+	CFG_PetEquipExpCfg                   = "PetEquipExpCfg.csv"
+	CFG_PetEquipSuitCfg                  = "PetEquipSuitCfg.csv"
+	CFG_PetExpCfg                        = "PetExpCfg.csv"
+	CFG_PetpartnerCfg                    = "PetpartnerCfg.csv"
+	CFG_PetProgressCfg                   = "PetProgressCfg.csv"
+	CFG_PresspointPvPCfg                 = "PresspointPvPCfg.csv"
+	CFG_PrivilegeCardCfg                 = "PrivilegeCardCfg.csv"
+	CFG_PurseShopCfg                     = "PurseShopCfg.csv"
+	CFG_QualityPointCfg                  = "QualityPointCfg.csv"
+	CFG_QuickBattleCostCfg               = "QuickBattleCostCfg.csv"
+	CFG_RobotCfg                         = "RobotCfg.csv"
+	CFG_RoleAttributeCfg                 = "RoleAttributeCfg.csv"
+	CFG_RuneShopExploreCfg               = "RuneShopExploreCfg.csv"
+	CFG_RuneShopExploreRewardCfg         = "RuneShopExploreRewardCfg.csv"
+	CFG_RuneShopGiftsCfg                 = "RuneShopGiftsCfg.csv"
+	CFG_RuneShopGuildBattleCfg           = "RuneShopGuildBattleCfg.csv"
+	CFG_RuneShopLimitCfg                 = "RuneShopLimitCfg.csv"
+	CFG_RuneShopMonthCardCfg             = "RuneShopMonthCardCfg.csv"
+	CFG_RuneShopRankAidouluCfg           = "RuneShopRankAidouluCfg.csv"
+	CFG_RuneShopRankArenaCfg             = "RuneShopRankArenaCfg.csv"
+	CFG_RuneShopRankMapCfg               = "RuneShopRankMapCfg.csv"
+	CFG_RuneShopRankPetCfg               = "RuneShopRankPetCfg.csv"
+	CFG_RuneShopRankSkillCfg             = "RuneShopRankSkillCfg.csv"
+	CFG_RuneShopRankTowerCfg             = "RuneShopRankTowerCfg.csv"
+	CFG_RushListCfg                      = "RushListCfg.csv"
+	CFG_RushListTargetCfg                = "RushListTargetCfg.csv"
+	CFG_ServiceRecordCfg                 = "ServiceRecordCfg.csv"
+	CFG_ShieldedWordCfg                  = "ShieldedWordCfg.csv"
+	CFG_ShopCfg                          = "ShopCfg.csv"
+	CFG_ShopTypeCfg                      = "ShopTypeCfg.csv"
+	CFG_SignInCfg                        = "SignInCfg.csv"
+	CFG_SkillCfg                         = "SkillCfg.csv"
+	CFG_SkillDemandCfg                   = "SkillDemandCfg.csv"
+	CFG_SkillLvCfg                       = "SkillLvCfg.csv"
+	CFG_SkillSlotCfg                     = "SkillSlotCfg.csv"
+	CFG_SkillSuitNewCfg                  = "SkillSuitNewCfg.csv"
+	CFG_SkillTreeCfg                     = "SkillTreeCfg.csv"
+	CFG_SkillUpEffectCfg                 = "SkillUpEffectCfg.csv"
+	CFG_SummonServerCfg                  = "SummonServerCfg.csv"
+	CFG_SummonTemplateCfg                = "SummonTemplateCfg.csv"
+	CFG_SysReward                        = "SysReward.csv"
+	CFG_TargetTaskCfg                    = "TargetTaskCfg.csv"
+	CFG_TopTowerCfgLevel                 = "TopTowerCfgLevel.csv"
+	CFG_TopTowerCfgReward                = "TopTowerCfgReward.csv"
+	CFG_TransportCfg                     = "TransportCfg.csv"
+	CFG_UIFuncUnLockCfg                  = "UIFuncUnLockCfg.csv"
+	CFG_VipCfg                           = "VipCfg.csv"
+	CFG_WishCfg                          = "WishCfg.csv"
+	CFG_WorldBossCfg                     = "WorldBossCfg.csv"
+	CFG_WorldBossChangePlayCfg           = "WorldBossChangePlayCfg.csv"
 )
+
 var CFGNameList = map[string]func(path string){}
 
-func configNameListInit(){
+func configNameListInit() {
 	CFGNameList["ActiveCodeCfg"] = ActiveCodeCfgLoad
 	CFGNameList["ActivitiesBtChargeTaskGoldCfg"] = ActivitiesBtChargeTaskGoldCfgLoad
 	CFGNameList["ActivitiesBtChargeTaskRoMoneyCfg"] = ActivitiesBtChargeTaskRoMoneyCfgLoad
@@ -218,6 +219,7 @@ func configNameListInit(){
 	CFGNameList["JobExpCfg"] = JobExpCfgLoad
 	CFGNameList["KeepSakeCfg"] = KeepSakeCfgLoad
 	CFGNameList["LevelCfg"] = LevelCfgLoad
+	CFGNameList["HardLevelCfg"] = HardLevelCfgLoad
 	CFGNameList["LineMissionCfg"] = LineMissionCfgLoad
 	CFGNameList["MailCfg"] = MailCfgLoad
 	CFGNameList["MissionCfg"] = MissionCfgLoad
@@ -285,7 +287,6 @@ func configNameListInit(){
 	CFGNameList["WorldBossChangePlayCfg"] = WorldBossChangePlayCfgLoad
 }
 
-
 var XmlFileList = []string{
 	"BattleFormulaParamCfg",
 	"Born_Scene_prontera_sd",
@@ -317,7 +318,7 @@ var XmlFileList = []string{
 	"FrameEvent_Xiehailangren",
 }
 
-//load config data
+// load config data
 func ConfigInit(path string) {
 	configNameListInit()
 	ActiveCodeCfgLoad(path)
@@ -394,6 +395,7 @@ func ConfigInit(path string) {
 	JobExpCfgLoad(path)
 	KeepSakeCfgLoad(path)
 	LevelCfgLoad(path)
+	HardLevelCfgLoad(path)
 	LineMissionCfgLoad(path)
 	MailCfgLoad(path)
 	MissionCfgLoad(path)
@@ -461,3025 +463,3327 @@ func ConfigInit(path string) {
 	WorldBossChangePlayCfgLoad(path)
 }
 
-var ActiveCodeCfgLoader  map[int32]*ActiveCodeCfg
-type ActiveCodeCfg struct{
-	Id	int32	`csv:"Id"`		//ID
-	Code	string	`csv:"Code"`		//类型
+var ActiveCodeCfgLoader map[int32]*ActiveCodeCfg
+
+type ActiveCodeCfg struct {
+	Id   int32  `csv:"Id"`   //ID
+	Code string `csv:"Code"` //类型
 }
+
 func ActiveCodeCfgLoad(path string) {
 	cfg := []*ActiveCodeCfg{}
 	ActiveCodeCfgLoader = map[int32]*ActiveCodeCfg{}
-	loadCsvCfg(path + "ActiveCodeCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActiveCodeCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActiveCodeCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesBtChargeTaskGoldCfgLoader  map[int32]*ActivitiesBtChargeTaskGoldCfg
-type ActivitiesBtChargeTaskGoldCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	TaskIds	[]string	`csv:"TaskIds"`		//7日累充
-	DailyTaskIds	[]string	`csv:"DailyTaskIds"`		//每日累充
-	ActivitiesId	int32	`csv:"ActivitiesId"`		//活动Id
-	Day	int32	`csv:"Day"`		//天数
+var ActivitiesBtChargeTaskGoldCfgLoader map[int32]*ActivitiesBtChargeTaskGoldCfg
+
+type ActivitiesBtChargeTaskGoldCfg struct {
+	Id           int32    `csv:"Id"`           //唯一id
+	TaskIds      []string `csv:"TaskIds"`      //7日累充
+	DailyTaskIds []string `csv:"DailyTaskIds"` //每日累充
+	ActivitiesId int32    `csv:"ActivitiesId"` //活动Id
+	Day          int32    `csv:"Day"`          //天数
 }
+
 func ActivitiesBtChargeTaskGoldCfgLoad(path string) {
 	cfg := []*ActivitiesBtChargeTaskGoldCfg{}
 	ActivitiesBtChargeTaskGoldCfgLoader = map[int32]*ActivitiesBtChargeTaskGoldCfg{}
-	loadCsvCfg(path + "ActivitiesBtChargeTaskGoldCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesBtChargeTaskGoldCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesBtChargeTaskGoldCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesBtChargeTaskRoMoneyCfgLoader  map[int32]*ActivitiesBtChargeTaskRoMoneyCfg
-type ActivitiesBtChargeTaskRoMoneyCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	TaskIds	[]string	`csv:"TaskIds"`		//7日累充
-	DailyTaskIds	[]string	`csv:"DailyTaskIds"`		//每日累充
-	ActivitiesId	int32	`csv:"ActivitiesId"`		//活动Id
-	Day	int32	`csv:"Day"`		//天数
+var ActivitiesBtChargeTaskRoMoneyCfgLoader map[int32]*ActivitiesBtChargeTaskRoMoneyCfg
+
+type ActivitiesBtChargeTaskRoMoneyCfg struct {
+	Id           int32    `csv:"Id"`           //唯一id
+	TaskIds      []string `csv:"TaskIds"`      //7日累充
+	DailyTaskIds []string `csv:"DailyTaskIds"` //每日累充
+	ActivitiesId int32    `csv:"ActivitiesId"` //活动Id
+	Day          int32    `csv:"Day"`          //天数
 }
+
 func ActivitiesBtChargeTaskRoMoneyCfgLoad(path string) {
 	cfg := []*ActivitiesBtChargeTaskRoMoneyCfg{}
 	ActivitiesBtChargeTaskRoMoneyCfgLoader = map[int32]*ActivitiesBtChargeTaskRoMoneyCfg{}
-	loadCsvCfg(path + "ActivitiesBtChargeTaskRoMoneyCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesBtChargeTaskRoMoneyCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesBtChargeTaskRoMoneyCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesBtFirstChargeCfgLoader  map[int32]*ActivitiesBtFirstChargeCfg
-type ActivitiesBtFirstChargeCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	Name	string	`csv:"Name"`		//名称
-	OpenCondition	[]string	`csv:"OpenCondition"`		//解锁条件
-	RechargeAmount	[]string	`csv:"RechargeAmount"`		//充值金额
-	Reward1	[]string	`csv:"Reward1"`		//奖励1
-	Value1	int32	`csv:"Value1"`		//价值
-	Reward2	[]string	`csv:"Reward2"`		//奖励2
-	Value2	int32	`csv:"Value2"`		//价值
-	Reward3	[]string	`csv:"Reward3"`		//奖励3
-	Value3	int32	`csv:"Value3"`		//价值
+var ActivitiesBtFirstChargeCfgLoader map[int32]*ActivitiesBtFirstChargeCfg
+
+type ActivitiesBtFirstChargeCfg struct {
+	Id             int32    `csv:"Id"`             //唯一id
+	Name           string   `csv:"Name"`           //名称
+	OpenCondition  []string `csv:"OpenCondition"`  //解锁条件
+	RechargeAmount []string `csv:"RechargeAmount"` //充值金额
+	Reward1        []string `csv:"Reward1"`        //奖励1
+	Value1         int32    `csv:"Value1"`         //价值
+	Reward2        []string `csv:"Reward2"`        //奖励2
+	Value2         int32    `csv:"Value2"`         //价值
+	Reward3        []string `csv:"Reward3"`        //奖励3
+	Value3         int32    `csv:"Value3"`         //价值
 }
+
 func ActivitiesBtFirstChargeCfgLoad(path string) {
 	cfg := []*ActivitiesBtFirstChargeCfg{}
 	ActivitiesBtFirstChargeCfgLoader = map[int32]*ActivitiesBtFirstChargeCfg{}
-	loadCsvCfg(path + "ActivitiesBtFirstChargeCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesBtFirstChargeCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesBtFirstChargeCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesCfgLoader  map[int32]*ActivitiesCfg
-type ActivitiesCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	Type	int32	`csv:"Type"`		//活动类型
-	Order	int32	`csv:"Order"`		//活动排序
-	StartTime	string	`csv:"StartTime"`		//活动开始时间
-	EndTime	string	`csv:"EndTime"`		//活动结束时间
-	OpenCondition	[]string	`csv:"OpenCondition"`		//活动解锁条件
-	BG	string	`csv:"BG"`		//活动图片
-	HdDrop	[]string	`csv:"HdDrop"`		//活动掉落
-	ActShopID	[]string	`csv:"ActShopID"`		//活动商店ID
-	NeedShow	bool	`csv:"NeedShow"`		//是否显示活动Banner
-	ExpiredActivities	int32	`csv:"ExpiredActivities"`		//过期活动
-	ServiceMark	int32	`csv:"ServiceMark"`		//合服活动
+var ActivitiesCfgLoader map[int32]*ActivitiesCfg
+
+type ActivitiesCfg struct {
+	Id                int32    `csv:"Id"`                //唯一id
+	Type              int32    `csv:"Type"`              //活动类型
+	Order             int32    `csv:"Order"`             //活动排序
+	StartTime         string   `csv:"StartTime"`         //活动开始时间
+	EndTime           string   `csv:"EndTime"`           //活动结束时间
+	OpenCondition     []string `csv:"OpenCondition"`     //活动解锁条件
+	BG                string   `csv:"BG"`                //活动图片
+	HdDrop            []string `csv:"HdDrop"`            //活动掉落
+	ActShopID         []string `csv:"ActShopID"`         //活动商店ID
+	NeedShow          bool     `csv:"NeedShow"`          //是否显示活动Banner
+	ExpiredActivities int32    `csv:"ExpiredActivities"` //过期活动
+	ServiceMark       int32    `csv:"ServiceMark"`       //合服活动
 }
+
 func ActivitiesCfgLoad(path string) {
 	cfg := []*ActivitiesCfg{}
 	ActivitiesCfgLoader = map[int32]*ActivitiesCfg{}
-	loadCsvCfg(path + "ActivitiesCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesCollectionCfgLoader  map[int32]*ActivitiesCollectionCfg
-type ActivitiesCollectionCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	Order	int32	`csv:"Order"`		//显示排序
-	ExchangeCondition	[]string	`csv:"ExchangeCondition"`		//兑换条件
-	ServersReward	int32	`csv:"ServersReward"`		//全服奖励数量
-	Number	int32	`csv:"Number"`		//兑换数量
-	Reward	[]string	`csv:"Reward"`		//兑换奖励
-	ActivitiesId	int32	`csv:"ActivitiesId"`		//活动Id
+var ActivitiesCollectionCfgLoader map[int32]*ActivitiesCollectionCfg
+
+type ActivitiesCollectionCfg struct {
+	Id                int32    `csv:"Id"`                //唯一id
+	Order             int32    `csv:"Order"`             //显示排序
+	ExchangeCondition []string `csv:"ExchangeCondition"` //兑换条件
+	ServersReward     int32    `csv:"ServersReward"`     //全服奖励数量
+	Number            int32    `csv:"Number"`            //兑换数量
+	Reward            []string `csv:"Reward"`            //兑换奖励
+	ActivitiesId      int32    `csv:"ActivitiesId"`      //活动Id
 }
+
 func ActivitiesCollectionCfgLoad(path string) {
 	cfg := []*ActivitiesCollectionCfg{}
 	ActivitiesCollectionCfgLoader = map[int32]*ActivitiesCollectionCfg{}
-	loadCsvCfg(path + "ActivitiesCollectionCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesCollectionCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesCollectionCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesDiscountsCfgLoader  map[int32]*ActivitiesDiscountsCfg
-type ActivitiesDiscountsCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	ProductID	int32	`csv:"ProductID"`		//商品标识
-	Name	string	`csv:"Name"`		//名称
-	TriggeringCondition	[]string	`csv:"TriggeringCondition"`		//解锁条件
-	Money	float32	`csv:"Money"`		//金额
-	Reward	[]string	`csv:"Reward"`		//奖励1
-	Time	int32	`csv:"Time"`		//倒计时
-	Value	int32	`csv:"Value"`		//价值
-	Popup	int32	`csv:"Popup"`		//弹出次数
-	PopupWindow	int32	`csv:"PopupWindow"`		//是否弹出
-	Recharge	int32	`csv:"Recharge"`		//累计充值
+var ActivitiesDiscountsCfgLoader map[int32]*ActivitiesDiscountsCfg
+
+type ActivitiesDiscountsCfg struct {
+	Id                  int32    `csv:"Id"`                  //唯一id
+	ProductID           int32    `csv:"ProductID"`           //商品标识
+	Name                string   `csv:"Name"`                //名称
+	TriggeringCondition []string `csv:"TriggeringCondition"` //解锁条件
+	Money               float32  `csv:"Money"`               //金额
+	Reward              []string `csv:"Reward"`              //奖励1
+	Time                int32    `csv:"Time"`                //倒计时
+	Value               int32    `csv:"Value"`               //价值
+	Popup               int32    `csv:"Popup"`               //弹出次数
+	PopupWindow         int32    `csv:"PopupWindow"`         //是否弹出
+	Recharge            int32    `csv:"Recharge"`            //累计充值
 }
+
 func ActivitiesDiscountsCfgLoad(path string) {
 	cfg := []*ActivitiesDiscountsCfg{}
 	ActivitiesDiscountsCfgLoader = map[int32]*ActivitiesDiscountsCfg{}
-	loadCsvCfg(path + "ActivitiesDiscountsCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesDiscountsCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesDiscountsCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesFirstChargeCfgLoader  map[int32]*ActivitiesFirstChargeCfg
-type ActivitiesFirstChargeCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	Name	string	`csv:"Name"`		//名称
-	OpenCondition	[]string	`csv:"OpenCondition"`		//解锁条件
-	RechargeAmount	float32	`csv:"RechargeAmount"`		//充值金额
-	Reward1	[]string	`csv:"Reward1"`		//奖励1
-	Value1	int32	`csv:"Value1"`		//价值
-	Reward2	[]string	`csv:"Reward2"`		//奖励2
-	Value2	int32	`csv:"Value2"`		//价值
-	Reward3	[]string	`csv:"Reward3"`		//奖励3
-	Value3	int32	`csv:"Value3"`		//价值
+var ActivitiesFirstChargeCfgLoader map[int32]*ActivitiesFirstChargeCfg
+
+type ActivitiesFirstChargeCfg struct {
+	Id             int32    `csv:"Id"`             //唯一id
+	Name           string   `csv:"Name"`           //名称
+	OpenCondition  []string `csv:"OpenCondition"`  //解锁条件
+	RechargeAmount float32  `csv:"RechargeAmount"` //充值金额
+	Reward1        []string `csv:"Reward1"`        //奖励1
+	Value1         int32    `csv:"Value1"`         //价值
+	Reward2        []string `csv:"Reward2"`        //奖励2
+	Value2         int32    `csv:"Value2"`         //价值
+	Reward3        []string `csv:"Reward3"`        //奖励3
+	Value3         int32    `csv:"Value3"`         //价值
 }
+
 func ActivitiesFirstChargeCfgLoad(path string) {
 	cfg := []*ActivitiesFirstChargeCfg{}
 	ActivitiesFirstChargeCfgLoader = map[int32]*ActivitiesFirstChargeCfg{}
-	loadCsvCfg(path + "ActivitiesFirstChargeCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesFirstChargeCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesFirstChargeCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesFortnightDaysCfgLoader  map[int32]*ActivitiesFortnightDaysCfg
-type ActivitiesFortnightDaysCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	TaskIds	[]string	`csv:"TaskIds"`		//成长任务
-	DailyTaskIds	[]string	`csv:"DailyTaskIds"`		//今日挑战
+var ActivitiesFortnightDaysCfgLoader map[int32]*ActivitiesFortnightDaysCfg
+
+type ActivitiesFortnightDaysCfg struct {
+	Id           int32    `csv:"Id"`           //唯一id
+	TaskIds      []string `csv:"TaskIds"`      //成长任务
+	DailyTaskIds []string `csv:"DailyTaskIds"` //今日挑战
 }
+
 func ActivitiesFortnightDaysCfgLoad(path string) {
 	cfg := []*ActivitiesFortnightDaysCfg{}
 	ActivitiesFortnightDaysCfgLoader = map[int32]*ActivitiesFortnightDaysCfg{}
-	loadCsvCfg(path + "ActivitiesFortnightDaysCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesFortnightDaysCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesFortnightDaysCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesFortnightOnlineCfgLoader  map[int32]*ActivitiesFortnightOnlineCfg
-type ActivitiesFortnightOnlineCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	Rewards	[]string	`csv:"Rewards"`		//登录奖励
-	ActivitiesId	int32	`csv:"ActivitiesId"`		//活动Id
-	Day	int32	`csv:"Day"`		//登录天数
+var ActivitiesFortnightOnlineCfgLoader map[int32]*ActivitiesFortnightOnlineCfg
+
+type ActivitiesFortnightOnlineCfg struct {
+	Id           int32    `csv:"Id"`           //唯一id
+	Rewards      []string `csv:"Rewards"`      //登录奖励
+	ActivitiesId int32    `csv:"ActivitiesId"` //活动Id
+	Day          int32    `csv:"Day"`          //登录天数
 }
+
 func ActivitiesFortnightOnlineCfgLoad(path string) {
 	cfg := []*ActivitiesFortnightOnlineCfg{}
 	ActivitiesFortnightOnlineCfgLoader = map[int32]*ActivitiesFortnightOnlineCfg{}
-	loadCsvCfg(path + "ActivitiesFortnightOnlineCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesFortnightOnlineCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesFortnightOnlineCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesGiftCfgLoader  map[int32]*ActivitiesGiftCfg
-type ActivitiesGiftCfg struct{
-	Id	int32	`csv:"Id"`		//ID
-	Classitemid	int32	`csv:"Classitemid"`		//档位类型
-	Classcostaddlike	[]string	`csv:"Classcostaddlike"`		//消耗的道具数量:增加的好感度
-	Activityid	int32	`csv:"Activityid"`		//活动ID
+var ActivitiesGiftCfgLoader map[int32]*ActivitiesGiftCfg
+
+type ActivitiesGiftCfg struct {
+	Id               int32    `csv:"Id"`               //ID
+	Classitemid      int32    `csv:"Classitemid"`      //档位类型
+	Classcostaddlike []string `csv:"Classcostaddlike"` //消耗的道具数量:增加的好感度
+	Activityid       int32    `csv:"Activityid"`       //活动ID
 }
+
 func ActivitiesGiftCfgLoad(path string) {
 	cfg := []*ActivitiesGiftCfg{}
 	ActivitiesGiftCfgLoader = map[int32]*ActivitiesGiftCfg{}
-	loadCsvCfg(path + "ActivitiesGiftCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesGiftCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesGiftCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesKingTaskCfgLoader  map[int32]*ActivitiesKingTaskCfg
-type ActivitiesKingTaskCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	TaskIds	[]string	`csv:"TaskIds"`		//成长任务
-	DailyTaskIds	[]string	`csv:"DailyTaskIds"`		//今日挑战
-	ActivitiesId	int32	`csv:"ActivitiesId"`		//活动Id
-	Day	int32	`csv:"Day"`		//天数
+var ActivitiesKingTaskCfgLoader map[int32]*ActivitiesKingTaskCfg
+
+type ActivitiesKingTaskCfg struct {
+	Id           int32    `csv:"Id"`           //唯一id
+	TaskIds      []string `csv:"TaskIds"`      //成长任务
+	DailyTaskIds []string `csv:"DailyTaskIds"` //今日挑战
+	ActivitiesId int32    `csv:"ActivitiesId"` //活动Id
+	Day          int32    `csv:"Day"`          //天数
 }
+
 func ActivitiesKingTaskCfgLoad(path string) {
 	cfg := []*ActivitiesKingTaskCfg{}
 	ActivitiesKingTaskCfgLoader = map[int32]*ActivitiesKingTaskCfg{}
-	loadCsvCfg(path + "ActivitiesKingTaskCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesKingTaskCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesKingTaskCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitieslikabilityCfgLoader  map[int32]*ActivitieslikabilityCfg
-type ActivitieslikabilityCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	Likelevel	int32	`csv:"Likelevel"`		//好感度等级
-	LikeMax	int32	`csv:"LikeMax"`		//好感度上限
-	Conditionrewards	[]string	`csv:"Conditionrewards"`		//好感度固定值对应奖励
-	Activityid	int32	`csv:"Activityid"`		//活动ID
+var ActivitieslikabilityCfgLoader map[int32]*ActivitieslikabilityCfg
+
+type ActivitieslikabilityCfg struct {
+	Id               int32    `csv:"Id"`               //唯一id
+	Likelevel        int32    `csv:"Likelevel"`        //好感度等级
+	LikeMax          int32    `csv:"LikeMax"`          //好感度上限
+	Conditionrewards []string `csv:"Conditionrewards"` //好感度固定值对应奖励
+	Activityid       int32    `csv:"Activityid"`       //活动ID
 }
+
 func ActivitieslikabilityCfgLoad(path string) {
 	cfg := []*ActivitieslikabilityCfg{}
 	ActivitieslikabilityCfgLoader = map[int32]*ActivitieslikabilityCfg{}
-	loadCsvCfg(path + "ActivitieslikabilityCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitieslikabilityCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitieslikabilityCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesPetExchangeCfgLoader  map[int32]*ActivitiesPetExchangeCfg
-type ActivitiesPetExchangeCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	Order	int32	`csv:"Order"`		//显示排序
-	ExchangeCondition1	[]string	`csv:"ExchangeCondition1"`		//兑换条件1
-	ExchangeCondition2	[]string	`csv:"ExchangeCondition2"`		//兑换条件2
-	ServersReward	int32	`csv:"ServersReward"`		//全服奖励数量
-	Number	int32	`csv:"Number"`		//兑换数量
-	Reward	[]string	`csv:"Reward"`		//兑换奖励
-	ActivitiesId	int32	`csv:"ActivitiesId"`		//活动Id
-	Type	int32	`csv:"Type"`		//类型
-	Broadcast	int32	`csv:"Broadcast"`		//是否系统公告
-	Scope	[]string	`csv:"Scope"`		//筛选范围
-	ResetDay	int32	`csv:"ResetDay"`		//刷新天数
+var ActivitiesPetExchangeCfgLoader map[int32]*ActivitiesPetExchangeCfg
+
+type ActivitiesPetExchangeCfg struct {
+	Id                 int32    `csv:"Id"`                 //唯一id
+	Order              int32    `csv:"Order"`              //显示排序
+	ExchangeCondition1 []string `csv:"ExchangeCondition1"` //兑换条件1
+	ExchangeCondition2 []string `csv:"ExchangeCondition2"` //兑换条件2
+	ServersReward      int32    `csv:"ServersReward"`      //全服奖励数量
+	Number             int32    `csv:"Number"`             //兑换数量
+	Reward             []string `csv:"Reward"`             //兑换奖励
+	ActivitiesId       int32    `csv:"ActivitiesId"`       //活动Id
+	Type               int32    `csv:"Type"`               //类型
+	Broadcast          int32    `csv:"Broadcast"`          //是否系统公告
+	Scope              []string `csv:"Scope"`              //筛选范围
+	ResetDay           int32    `csv:"ResetDay"`           //刷新天数
 }
+
 func ActivitiesPetExchangeCfgLoad(path string) {
 	cfg := []*ActivitiesPetExchangeCfg{}
 	ActivitiesPetExchangeCfgLoader = map[int32]*ActivitiesPetExchangeCfg{}
-	loadCsvCfg(path + "ActivitiesPetExchangeCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesPetExchangeCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesPetExchangeCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesRewardCfgLoader  map[int32]*ActivitiesRewardCfg
-type ActivitiesRewardCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	Type	int32	`csv:"Type"`		//类型
-	Integral	int32	`csv:"Integral"`		//所需积分
-	Rewards	[]string	`csv:"Rewards"`		//宝箱奖励
+var ActivitiesRewardCfgLoader map[int32]*ActivitiesRewardCfg
+
+type ActivitiesRewardCfg struct {
+	Id       int32    `csv:"Id"`       //唯一id
+	Type     int32    `csv:"Type"`     //类型
+	Integral int32    `csv:"Integral"` //所需积分
+	Rewards  []string `csv:"Rewards"`  //宝箱奖励
 }
+
 func ActivitiesRewardCfgLoad(path string) {
 	cfg := []*ActivitiesRewardCfg{}
 	ActivitiesRewardCfgLoader = map[int32]*ActivitiesRewardCfg{}
-	loadCsvCfg(path + "ActivitiesRewardCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesRewardCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesRewardCfgLoader[row.Id] = row
 	}
 }
 
-var ActivitiesSignInCfgLoader  map[int32]*ActivitiesSignInCfg
-type ActivitiesSignInCfg struct{
-	ID	int32	`csv:"ID"`		//序列id
-	SignInType	int32	`csv:"SignInType"`		//签到类型
-	SignInReward	[]string	`csv:"SignInReward"`		//签到奖励
-	VipLevel	int32	`csv:"VipLevel"`		//Vip等级
-	ActivitiesId	int32	`csv:"ActivitiesId"`		//活动Id
-	Day	int32	`csv:"Day"`		//签到天数
+var ActivitiesSignInCfgLoader map[int32]*ActivitiesSignInCfg
+
+type ActivitiesSignInCfg struct {
+	ID           int32    `csv:"ID"`           //序列id
+	SignInType   int32    `csv:"SignInType"`   //签到类型
+	SignInReward []string `csv:"SignInReward"` //签到奖励
+	VipLevel     int32    `csv:"VipLevel"`     //Vip等级
+	ActivitiesId int32    `csv:"ActivitiesId"` //活动Id
+	Day          int32    `csv:"Day"`          //签到天数
 }
+
 func ActivitiesSignInCfgLoad(path string) {
 	cfg := []*ActivitiesSignInCfg{}
 	ActivitiesSignInCfgLoader = map[int32]*ActivitiesSignInCfg{}
-	loadCsvCfg(path + "ActivitiesSignInCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesSignInCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesSignInCfgLoader[row.ID] = row
 	}
 }
 
-var ActivitiesTaskCfgLoader  map[int32]*ActivitiesTaskCfg
-type ActivitiesTaskCfg struct{
-	TaskId	int32	`csv:"TaskId"`		//任务ID
-	TaskCondition	[]string	`csv:"TaskCondition"`		//任务枚举
-	Reward	[]string	`csv:"Reward"`		//任务奖励
-	ShowState	int32	`csv:"ShowState"`		//是否显示进度
-	Integral	int32	`csv:"Integral"`		//积分
+var ActivitiesTaskCfgLoader map[int32]*ActivitiesTaskCfg
+
+type ActivitiesTaskCfg struct {
+	TaskId        int32    `csv:"TaskId"`        //任务ID
+	TaskCondition []string `csv:"TaskCondition"` //任务枚举
+	Reward        []string `csv:"Reward"`        //任务奖励
+	ShowState     int32    `csv:"ShowState"`     //是否显示进度
+	Integral      int32    `csv:"Integral"`      //积分
 }
+
 func ActivitiesTaskCfgLoad(path string) {
 	cfg := []*ActivitiesTaskCfg{}
 	ActivitiesTaskCfgLoader = map[int32]*ActivitiesTaskCfg{}
-	loadCsvCfg(path + "ActivitiesTaskCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesTaskCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesTaskCfgLoader[row.TaskId] = row
 	}
 }
 
-var ActivitiesTiredChargeCfgLoader  map[int32]*ActivitiesTiredChargeCfg
-type ActivitiesTiredChargeCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	RechargeAmount	float32	`csv:"RechargeAmount"`		//充值金额
-	Reward	[]string	`csv:"Reward"`		//奖励1
-	Day	int32	`csv:"Day"`		//奖励天数
-	Index	int32	`csv:"Index"`		//奖励档次
+var ActivitiesTiredChargeCfgLoader map[int32]*ActivitiesTiredChargeCfg
+
+type ActivitiesTiredChargeCfg struct {
+	Id             int32    `csv:"Id"`             //唯一id
+	RechargeAmount float32  `csv:"RechargeAmount"` //充值金额
+	Reward         []string `csv:"Reward"`         //奖励1
+	Day            int32    `csv:"Day"`            //奖励天数
+	Index          int32    `csv:"Index"`          //奖励档次
 }
+
 func ActivitiesTiredChargeCfgLoad(path string) {
 	cfg := []*ActivitiesTiredChargeCfg{}
 	ActivitiesTiredChargeCfgLoader = map[int32]*ActivitiesTiredChargeCfg{}
-	loadCsvCfg(path + "ActivitiesTiredChargeCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivitiesTiredChargeCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivitiesTiredChargeCfgLoader[row.Id] = row
 	}
 }
 
-var ActivityRoulettelCfgLoader  map[int32]*ActivityRoulettelCfg
-type ActivityRoulettelCfg struct{
-	Id	int32	`csv:"Id"`		//ID
-	LowNormalNum	[]string	`csv:"LowNormalNum"`		//低级奖
-	NormalNum	[]string	`csv:"NormalNum"`		//Normal奖
-	MiniNum	[]string	`csv:"MiniNum"`		//Mini奖
-	MvpNum	[]string	`csv:"MvpNum"`		//Mvp奖
-	ModProbability	int32	`csv:"ModProbability"`		//模板权重
-	Probability	[]string	`csv:"Probability"`		//非MVP抽奖概率
-	MvpProbability	[]string	`csv:"MvpProbability"`		//MVP抽奖概率
-	ItemPrice	int32	`csv:"ItemPrice"`		//一个道具的价格
-	RewardOneItem	[]string	`csv:"RewardOneItem"`		//抽一次价格(道具)
-	RewardOneGold	[]string	`csv:"RewardOneGold"`		//抽一次价格(金币)
-	RewardAllItem	[]string	`csv:"RewardAllItem"`		//抽全部价格(道具)
-	RewardAdllGold	int32	`csv:"RewardAdllGold"`		//抽全部价格(金币)
-	RefreshPrice	[]string	`csv:"RefreshPrice"`		//刷新价格(金币)
-	NoRewardNum	int32	`csv:"NoRewardNum"`		//结束本轮次数
-	ActivitiesId	int32	`csv:"ActivitiesId"`		//活动Id
+var ActivityRoulettelCfgLoader map[int32]*ActivityRoulettelCfg
+
+type ActivityRoulettelCfg struct {
+	Id             int32    `csv:"Id"`             //ID
+	LowNormalNum   []string `csv:"LowNormalNum"`   //低级奖
+	NormalNum      []string `csv:"NormalNum"`      //Normal奖
+	MiniNum        []string `csv:"MiniNum"`        //Mini奖
+	MvpNum         []string `csv:"MvpNum"`         //Mvp奖
+	ModProbability int32    `csv:"ModProbability"` //模板权重
+	Probability    []string `csv:"Probability"`    //非MVP抽奖概率
+	MvpProbability []string `csv:"MvpProbability"` //MVP抽奖概率
+	ItemPrice      int32    `csv:"ItemPrice"`      //一个道具的价格
+	RewardOneItem  []string `csv:"RewardOneItem"`  //抽一次价格(道具)
+	RewardOneGold  []string `csv:"RewardOneGold"`  //抽一次价格(金币)
+	RewardAllItem  []string `csv:"RewardAllItem"`  //抽全部价格(道具)
+	RewardAdllGold int32    `csv:"RewardAdllGold"` //抽全部价格(金币)
+	RefreshPrice   []string `csv:"RefreshPrice"`   //刷新价格(金币)
+	NoRewardNum    int32    `csv:"NoRewardNum"`    //结束本轮次数
+	ActivitiesId   int32    `csv:"ActivitiesId"`   //活动Id
 }
+
 func ActivityRoulettelCfgLoad(path string) {
 	cfg := []*ActivityRoulettelCfg{}
 	ActivityRoulettelCfgLoader = map[int32]*ActivityRoulettelCfg{}
-	loadCsvCfg(path + "ActivityRoulettelCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActivityRoulettelCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActivityRoulettelCfgLoader[row.Id] = row
 	}
 }
 
-var ActRewardCfgLoader  map[int32]*ActRewardCfg
-type ActRewardCfg struct{
-	ID	int32	`csv:"ID"`		//ID
-	ActiveType	int32	`csv:"ActiveType"`		//活跃度类型
-	Active	int32	`csv:"Active"`		//活跃值
-	Reward	[]string	`csv:"Reward"`		//奖励
-	HdDrop	[]string	`csv:"HdDrop"`		//活动掉落
+var ActRewardCfgLoader map[int32]*ActRewardCfg
+
+type ActRewardCfg struct {
+	ID         int32    `csv:"ID"`         //ID
+	ActiveType int32    `csv:"ActiveType"` //活跃度类型
+	Active     int32    `csv:"Active"`     //活跃值
+	Reward     []string `csv:"Reward"`     //奖励
+	HdDrop     []string `csv:"HdDrop"`     //活动掉落
 }
+
 func ActRewardCfgLoad(path string) {
 	cfg := []*ActRewardCfg{}
 	ActRewardCfgLoader = map[int32]*ActRewardCfg{}
-	loadCsvCfg(path + "ActRewardCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ActRewardCfg.csv", &cfg)
+	for _, row := range cfg {
 		ActRewardCfgLoader[row.ID] = row
 	}
 }
 
-var AdvertisingScreenLoader  map[int32]*AdvertisingScreen
-type AdvertisingScreen struct{
-	ID	int32	`csv:"ID"`		//ID
-	Type	string	`csv:"Type"`		//Type
+var AdvertisingScreenLoader map[int32]*AdvertisingScreen
+
+type AdvertisingScreen struct {
+	ID   int32  `csv:"ID"`   //ID
+	Type string `csv:"Type"` //Type
 }
+
 func AdvertisingScreenLoad(path string) {
 	cfg := []*AdvertisingScreen{}
 	AdvertisingScreenLoader = map[int32]*AdvertisingScreen{}
-	loadCsvCfg(path + "AdvertisingScreen.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"AdvertisingScreen.csv", &cfg)
+	for _, row := range cfg {
 		AdvertisingScreenLoader[row.ID] = row
 	}
 }
 
-var ArenaLevelCfgLoader  map[int32]*ArenaLevelCfg
-type ArenaLevelCfg struct{
-	ArenaLevelId	int32	`csv:"ArenaLevelId"`		//段位ID
-	ArenaLevelName	string	`csv:"ArenaLevelName"`		//段位名称
-	ArenaLevelScore	int32	`csv:"ArenaLevelScore"`		//段位积分
-	ArenaLevelReward	[]string	`csv:"ArenaLevelReward"`		//段位奖励
-	WinReward	[]string	`csv:"WinReward"`		//胜利资源奖励
-	FailReward	[]string	`csv:"FailReward"`		//失败资源奖励
-	WinScore	int32	`csv:"WinScore"`		//胜利积分
-	WinScore1	int32	`csv:"WinScore1"`		//遇强敌胜利积分
-	WinScore2	int32	`csv:"WinScore2"`		//遇弱胜利积分
-	LostScore	int32	`csv:"LostScore"`		//失败积分
-	LostScore1	int32	`csv:"LostScore1"`		//遇强敌失败积分
-	LostScore2	int32	`csv:"LostScore2"`		//遇弱失败积分
-	Section	[]string	`csv:"Section"`		//强弱区间
-	WinStreak	[]string	`csv:"WinStreak"`		//连胜积分
-	Win	[]string	`csv:"Win"`		//胜利匹配区间
-	Fail	[]string	`csv:"Fail"`		//失败匹配区间
-	LevelReduce	int32	`csv:"LevelReduce"`		//赛季降段
+var ArenaLevelCfgLoader map[int32]*ArenaLevelCfg
+
+type ArenaLevelCfg struct {
+	ArenaLevelId     int32    `csv:"ArenaLevelId"`     //段位ID
+	ArenaLevelName   string   `csv:"ArenaLevelName"`   //段位名称
+	ArenaLevelScore  int32    `csv:"ArenaLevelScore"`  //段位积分
+	ArenaLevelReward []string `csv:"ArenaLevelReward"` //段位奖励
+	WinReward        []string `csv:"WinReward"`        //胜利资源奖励
+	FailReward       []string `csv:"FailReward"`       //失败资源奖励
+	WinScore         int32    `csv:"WinScore"`         //胜利积分
+	WinScore1        int32    `csv:"WinScore1"`        //遇强敌胜利积分
+	WinScore2        int32    `csv:"WinScore2"`        //遇弱胜利积分
+	LostScore        int32    `csv:"LostScore"`        //失败积分
+	LostScore1       int32    `csv:"LostScore1"`       //遇强敌失败积分
+	LostScore2       int32    `csv:"LostScore2"`       //遇弱失败积分
+	Section          []string `csv:"Section"`          //强弱区间
+	WinStreak        []string `csv:"WinStreak"`        //连胜积分
+	Win              []string `csv:"Win"`              //胜利匹配区间
+	Fail             []string `csv:"Fail"`             //失败匹配区间
+	LevelReduce      int32    `csv:"LevelReduce"`      //赛季降段
 }
+
 func ArenaLevelCfgLoad(path string) {
 	cfg := []*ArenaLevelCfg{}
 	ArenaLevelCfgLoader = map[int32]*ArenaLevelCfg{}
-	loadCsvCfg(path + "ArenaLevelCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ArenaLevelCfg.csv", &cfg)
+	for _, row := range cfg {
 		ArenaLevelCfgLoader[row.ArenaLevelId] = row
 	}
 }
 
-var ArenaRewardCfgLoader  map[int32]*ArenaRewardCfg
-type ArenaRewardCfg struct{
-	RankId	int32	`csv:"RankId"`		//排名ID
-	Zone	int32	`csv:"Zone"`		//区号
-	StartTime	string	`csv:"StartTime"`		//开始时间
-	CloseTime	string	`csv:"CloseTime"`		//结束时间
-	Rest	int32	`csv:"Rest"`		//休息时间
-	ArenaRank	[]string	`csv:"ArenaRank"`		//竞技场排名
-	ArenaReward	[]string	`csv:"ArenaReward"`		//排名奖励
+var ArenaRewardCfgLoader map[int32]*ArenaRewardCfg
+
+type ArenaRewardCfg struct {
+	RankId      int32    `csv:"RankId"`      //排名ID
+	Zone        int32    `csv:"Zone"`        //区号
+	StartTime   string   `csv:"StartTime"`   //开始时间
+	CloseTime   string   `csv:"CloseTime"`   //结束时间
+	Rest        int32    `csv:"Rest"`        //休息时间
+	ArenaRank   []string `csv:"ArenaRank"`   //竞技场排名
+	ArenaReward []string `csv:"ArenaReward"` //排名奖励
 }
+
 func ArenaRewardCfgLoad(path string) {
 	cfg := []*ArenaRewardCfg{}
 	ArenaRewardCfgLoader = map[int32]*ArenaRewardCfg{}
-	loadCsvCfg(path + "ArenaRewardCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ArenaRewardCfg.csv", &cfg)
+	for _, row := range cfg {
 		ArenaRewardCfgLoader[row.RankId] = row
 	}
 }
 
-var ArtifactCfgLoader  map[int32]*ArtifactCfg
-type ArtifactCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	Quality	int32	`csv:"Quality"`		//品质
-	ArtifactMaxLevel	int32	`csv:"ArtifactMaxLevel"`		//最大星级
-	ArtifacFuncId	[]string	`csv:"ArtifacFuncId"`		//效果ID
-	JobType	int32	`csv:"JobType"`		//职业类型
-	JobBranch	int32	`csv:"JobBranch"`		//职业分支
-	JobStage	int32	`csv:"JobStage"`		//职业阶段
-	Condition	[]string	`csv:"Condition"`		//升星条件
-	AddFight	[]string	`csv:"AddFight"`		//增加战力
-	SmeltReturn	[]string	`csv:"SmeltReturn"`		//熔炼返还材料
-	ReforgeCost	[]string	`csv:"ReforgeCost"`		//神器重铸消耗
-	Times	int32	`csv:"Times"`		//批次id
-	ArtifactDuration	[]string	`csv:"ArtifactDuration"`		//开服天数区间
+var ArtifactCfgLoader map[int32]*ArtifactCfg
+
+type ArtifactCfg struct {
+	Id               int32    `csv:"Id"`               //唯一id
+	Quality          int32    `csv:"Quality"`          //品质
+	ArtifactMaxLevel int32    `csv:"ArtifactMaxLevel"` //最大星级
+	ArtifacFuncId    []string `csv:"ArtifacFuncId"`    //效果ID
+	JobType          int32    `csv:"JobType"`          //职业类型
+	JobBranch        int32    `csv:"JobBranch"`        //职业分支
+	JobStage         int32    `csv:"JobStage"`         //职业阶段
+	Condition        []string `csv:"Condition"`        //升星条件
+	AddFight         []string `csv:"AddFight"`         //增加战力
+	SmeltReturn      []string `csv:"SmeltReturn"`      //熔炼返还材料
+	ReforgeCost      []string `csv:"ReforgeCost"`      //神器重铸消耗
+	Times            int32    `csv:"Times"`            //批次id
+	ArtifactDuration []string `csv:"ArtifactDuration"` //开服天数区间
 }
+
 func ArtifactCfgLoad(path string) {
 	cfg := []*ArtifactCfg{}
 	ArtifactCfgLoader = map[int32]*ArtifactCfg{}
-	loadCsvCfg(path + "ArtifactCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ArtifactCfg.csv", &cfg)
+	for _, row := range cfg {
 		ArtifactCfgLoader[row.Id] = row
 	}
 }
 
-var ArtifactExpCfgLoader  map[int32]*ArtifactExpCfg
-type ArtifactExpCfg struct{
-	ArtifactLevel	int32	`csv:"ArtifactLevel"`		//神器位等级
-	UpgradeCost	[]string	`csv:"UpgradeCost"`		//升级消耗
-	Nature	[]string	`csv:"Nature"`		//增加属性
+var ArtifactExpCfgLoader map[int32]*ArtifactExpCfg
+
+type ArtifactExpCfg struct {
+	ArtifactLevel int32    `csv:"ArtifactLevel"` //神器位等级
+	UpgradeCost   []string `csv:"UpgradeCost"`   //升级消耗
+	Nature        []string `csv:"Nature"`        //增加属性
 }
+
 func ArtifactExpCfgLoad(path string) {
 	cfg := []*ArtifactExpCfg{}
 	ArtifactExpCfgLoader = map[int32]*ArtifactExpCfg{}
-	loadCsvCfg(path + "ArtifactExpCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ArtifactExpCfg.csv", &cfg)
+	for _, row := range cfg {
 		ArtifactExpCfgLoader[row.ArtifactLevel] = row
 	}
 }
 
-var BoliShopCfgLoader  map[int32]*BoliShopCfg
-type BoliShopCfg struct{
-	GoodsId	int32	`csv:"GoodsId"`		//商品Id
-	GoodsName	string	`csv:"GoodsName"`		//商品名称
-	GoodsType	int32	`csv:"GoodsType"`		//商品所属tab
-	GoodsTypename	string	`csv:"GoodsTypename"`		//商品页签
-	GoodsItem	int32	`csv:"GoodsItem"`		//商品内容
-	PayForType	int32	`csv:"PayForType"`		//消耗资源类型
-	PayForNum	int32	`csv:"PayForNum"`		//消耗资源数量
-	HdDrop	int32	`csv:"HdDrop"`		//活动商品
-	SellWell	int32	`csv:"SellWell"`		//是否热销
-	Proportion	int32	`csv:"Proportion"`		//折扣比例
-	DiscountPayForNum	int32	`csv:"DiscountPayForNum"`		//折扣后价格
-	RestrictedType	string	`csv:"RestrictedType"`		//限购类型次数
-	BeginTime	string	`csv:"BeginTime"`		//开始时间
-	EndTime	string	`csv:"EndTime"`		//结束时间
-	SortId	int32	`csv:"SortId"`		//排序Id
-	Weight	int32	`csv:"Weight"`		//权重概率
-	Weight1	int32	`csv:"Weight1"`		//VIP权重概率1
-	Weight2	int32	`csv:"Weight2"`		//VIP权重概率2
-	Weight3	int32	`csv:"Weight3"`		//VIP权重概率3
-	Weight4	int32	`csv:"Weight4"`		//VIP权重概率4
-	NtfClient	int32	`csv:"NtfClient"`		//是否通知客户端
-	GoodsPic	string	`csv:"GoodsPic"`		//图片
-	Reward	[]string	`csv:"Reward"`		//购买后获得道具
-	Condition	[]string	`csv:"Condition"`		//上架解锁条件枚举
-	BoliVipLevel	int32	`csv:"BoliVipLevel"`		//波利特权等级显示
+var BoliShopCfgLoader map[int32]*BoliShopCfg
+
+type BoliShopCfg struct {
+	GoodsId           int32    `csv:"GoodsId"`           //商品Id
+	GoodsName         string   `csv:"GoodsName"`         //商品名称
+	GoodsType         int32    `csv:"GoodsType"`         //商品所属tab
+	GoodsTypename     string   `csv:"GoodsTypename"`     //商品页签
+	GoodsItem         int32    `csv:"GoodsItem"`         //商品内容
+	PayForType        int32    `csv:"PayForType"`        //消耗资源类型
+	PayForNum         int32    `csv:"PayForNum"`         //消耗资源数量
+	HdDrop            int32    `csv:"HdDrop"`            //活动商品
+	SellWell          int32    `csv:"SellWell"`          //是否热销
+	Proportion        int32    `csv:"Proportion"`        //折扣比例
+	DiscountPayForNum int32    `csv:"DiscountPayForNum"` //折扣后价格
+	RestrictedType    string   `csv:"RestrictedType"`    //限购类型次数
+	BeginTime         string   `csv:"BeginTime"`         //开始时间
+	EndTime           string   `csv:"EndTime"`           //结束时间
+	SortId            int32    `csv:"SortId"`            //排序Id
+	Weight            int32    `csv:"Weight"`            //权重概率
+	Weight1           int32    `csv:"Weight1"`           //VIP权重概率1
+	Weight2           int32    `csv:"Weight2"`           //VIP权重概率2
+	Weight3           int32    `csv:"Weight3"`           //VIP权重概率3
+	Weight4           int32    `csv:"Weight4"`           //VIP权重概率4
+	NtfClient         int32    `csv:"NtfClient"`         //是否通知客户端
+	GoodsPic          string   `csv:"GoodsPic"`          //图片
+	Reward            []string `csv:"Reward"`            //购买后获得道具
+	Condition         []string `csv:"Condition"`         //上架解锁条件枚举
+	BoliVipLevel      int32    `csv:"BoliVipLevel"`      //波利特权等级显示
 }
+
 func BoliShopCfgLoad(path string) {
 	cfg := []*BoliShopCfg{}
 	BoliShopCfgLoader = map[int32]*BoliShopCfg{}
-	loadCsvCfg(path + "BoliShopCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"BoliShopCfg.csv", &cfg)
+	for _, row := range cfg {
 		BoliShopCfgLoader[row.GoodsId] = row
 	}
 }
 
-var BoliVipCfgLoader  map[int32]*BoliVipCfg
-type BoliVipCfg struct{
-	Lv	int32	`csv:"Lv"`		//波利特权等级
-	QuickBattle	int32	`csv:"QuickBattle"`		//战斗X2加速
-	Reward	[]string	`csv:"Reward"`		//Vip道具奖励
-	VipExp	int32	`csv:"VipExp"`		//Vip升级所需经验
-	EvilFreeTimes	int32	`csv:"EvilFreeTimes"`		//恶魔免费刷新次数
-	VipLogin	int32	`csv:"VipLogin"`		//VIP上线提示
-	PetAdvance	int32	`csv:"PetAdvance"`		//宠物进阶消耗免费
-	CardReset	int32	`csv:"CardReset"`		//卡片重铸免费
-	PetBreak	int32	`csv:"PetBreak"`		//宠物分解全额返还
-	SkillReset	int32	`csv:"SkillReset"`		//角色技能重置免费
-	GuildBossChallenge	int32	`csv:"GuildBossChallenge"`		//公会狩猎额外次数
-	CardInsertion	int32	`csv:"CardInsertion"`		//一键插卡功能
-	ShopWeight	int32	`csv:"ShopWeight"`		//黑市VIP权重
-	WorldBoss	int32	`csv:"WorldBoss"`		//世界BOSS刮奖次数
-	PvpReward	int32	`csv:"PvpReward"`		//额外荣誉之证
-	HangupTimes	int32	`csv:"HangupTimes"`		//时光之力购买次数
-	SilverUp	int32	`csv:"SilverUp"`		//银币加成
-	BaseExpUp	int32	`csv:"BaseExpUp"`		//基础经验加成
-	PartnerExpUp	int32	`csv:"PartnerExpUp"`		//伙伴经验加成
-	SkillExpUp	int32	`csv:"SkillExpUp"`		//技能经验加成
-	GiftBuyTimes	[]string	`csv:"GiftBuyTimes"`		//每日礼包购买次数+1
-	HangupDuration	int32	`csv:"HangupDuration"`		//离线挂机时长上限(秒)
-	SignInRewardUp	int32	`csv:"SignInRewardUp"`		//签到翻倍
-	WorldBossCount	int32	`csv:"WorldBossCount"`		//世界BOSS购买次数
-	DevilsUp	int32	`csv:"DevilsUp"`		//挂机魔魂值加成
-	TransportRobbery	int32	`csv:"TransportRobbery"`		//飞艇被抢劫掉落减少至
-	LuxuryPrizeWheelTimes	int32	`csv:"LuxuryPrizeWheelTimes"`		//豪华转盘可使用次数
-	GiftRewards	[]string	`csv:"GiftRewards"`		//每日礼包
+var BoliVipCfgLoader map[int32]*BoliVipCfg
+
+type BoliVipCfg struct {
+	Lv                    int32    `csv:"Lv"`                    //波利特权等级
+	QuickBattle           int32    `csv:"QuickBattle"`           //战斗X2加速
+	Reward                []string `csv:"Reward"`                //Vip道具奖励
+	VipExp                int32    `csv:"VipExp"`                //Vip升级所需经验
+	EvilFreeTimes         int32    `csv:"EvilFreeTimes"`         //恶魔免费刷新次数
+	VipLogin              int32    `csv:"VipLogin"`              //VIP上线提示
+	PetAdvance            int32    `csv:"PetAdvance"`            //宠物进阶消耗免费
+	CardReset             int32    `csv:"CardReset"`             //卡片重铸免费
+	PetBreak              int32    `csv:"PetBreak"`              //宠物分解全额返还
+	SkillReset            int32    `csv:"SkillReset"`            //角色技能重置免费
+	GuildBossChallenge    int32    `csv:"GuildBossChallenge"`    //公会狩猎额外次数
+	CardInsertion         int32    `csv:"CardInsertion"`         //一键插卡功能
+	ShopWeight            int32    `csv:"ShopWeight"`            //黑市VIP权重
+	WorldBoss             int32    `csv:"WorldBoss"`             //世界BOSS刮奖次数
+	PvpReward             int32    `csv:"PvpReward"`             //额外荣誉之证
+	HangupTimes           int32    `csv:"HangupTimes"`           //时光之力购买次数
+	SilverUp              int32    `csv:"SilverUp"`              //银币加成
+	BaseExpUp             int32    `csv:"BaseExpUp"`             //基础经验加成
+	PartnerExpUp          int32    `csv:"PartnerExpUp"`          //伙伴经验加成
+	SkillExpUp            int32    `csv:"SkillExpUp"`            //技能经验加成
+	GiftBuyTimes          []string `csv:"GiftBuyTimes"`          //每日礼包购买次数+1
+	HangupDuration        int32    `csv:"HangupDuration"`        //离线挂机时长上限(秒)
+	SignInRewardUp        int32    `csv:"SignInRewardUp"`        //签到翻倍
+	WorldBossCount        int32    `csv:"WorldBossCount"`        //世界BOSS购买次数
+	DevilsUp              int32    `csv:"DevilsUp"`              //挂机魔魂值加成
+	TransportRobbery      int32    `csv:"TransportRobbery"`      //飞艇被抢劫掉落减少至
+	LuxuryPrizeWheelTimes int32    `csv:"LuxuryPrizeWheelTimes"` //豪华转盘可使用次数
+	GiftRewards           []string `csv:"GiftRewards"`           //每日礼包
 }
+
 func BoliVipCfgLoad(path string) {
 	cfg := []*BoliVipCfg{}
 	BoliVipCfgLoader = map[int32]*BoliVipCfg{}
-	loadCsvCfg(path + "BoliVipCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"BoliVipCfg.csv", &cfg)
+	for _, row := range cfg {
 		BoliVipCfgLoader[row.Lv] = row
 	}
 }
 
-var BTSmashEggsCfgLoader  map[int32]*BTSmashEggsCfg
-type BTSmashEggsCfg struct{
-	Id	int32	`csv:"Id"`		//砸蛋Id
-	Name	string	`csv:"Name"`		//砸蛋名字
-	Cost	[]string	`csv:"Cost"`		//消耗道具顺序
-	Method	[]string	`csv:"Method"`		//砸蛋方式
-	DropId	int32	`csv:"DropId"`		//消耗道具1掉落包
-	DropId2	int32	`csv:"DropId2"`		//消耗道具1掉落包
-	Total	int32	`csv:"Total"`		//保底奖励的累计次数
-	ExtDropId	int32	`csv:"ExtDropId"`		//保底奖励的掉落包
-	SortId	int32	`csv:"SortId"`		//界面排序
-	ShowItemType	[]string	`csv:"ShowItemType"`		//可用于表现的道具类型
-	UnLock	int32	`csv:"UnLock"`		//解锁ID
-	ActivitiesId	int32	`csv:"ActivitiesId"`		//活动Id
-	Type	int32	`csv:"Type"`		//召唤类型
-	StartDay	int32	`csv:"StartDay"`		//开服时间
-	SummoType	int32	`csv:"SummoType"`		//召唤组
-	Show	[]string	`csv:"Show"`		//大奖预览
-	ClientShow	[]string	`csv:"ClientShow"`		//客户端大奖预览
+var BTSmashEggsCfgLoader map[int32]*BTSmashEggsCfg
+
+type BTSmashEggsCfg struct {
+	Id           int32    `csv:"Id"`           //砸蛋Id
+	Name         string   `csv:"Name"`         //砸蛋名字
+	Cost         []string `csv:"Cost"`         //消耗道具顺序
+	Method       []string `csv:"Method"`       //砸蛋方式
+	DropId       int32    `csv:"DropId"`       //消耗道具1掉落包
+	DropId2      int32    `csv:"DropId2"`      //消耗道具1掉落包
+	Total        int32    `csv:"Total"`        //保底奖励的累计次数
+	ExtDropId    int32    `csv:"ExtDropId"`    //保底奖励的掉落包
+	SortId       int32    `csv:"SortId"`       //界面排序
+	ShowItemType []string `csv:"ShowItemType"` //可用于表现的道具类型
+	UnLock       int32    `csv:"UnLock"`       //解锁ID
+	ActivitiesId int32    `csv:"ActivitiesId"` //活动Id
+	Type         int32    `csv:"Type"`         //召唤类型
+	StartDay     int32    `csv:"StartDay"`     //开服时间
+	SummoType    int32    `csv:"SummoType"`    //召唤组
+	Show         []string `csv:"Show"`         //大奖预览
+	ClientShow   []string `csv:"ClientShow"`   //客户端大奖预览
 }
+
 func BTSmashEggsCfgLoad(path string) {
 	cfg := []*BTSmashEggsCfg{}
 	BTSmashEggsCfgLoader = map[int32]*BTSmashEggsCfg{}
-	loadCsvCfg(path + "BTSmashEggsCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"BTSmashEggsCfg.csv", &cfg)
+	for _, row := range cfg {
 		BTSmashEggsCfgLoader[row.Id] = row
 	}
 }
 
-var CardCfgLoader  map[int32]*CardCfg
-type CardCfg struct{
-	CardId	int32	`csv:"CardId"`		//卡片ID
-	CardName	string	`csv:"CardName"`		//卡片名称
-	FromCardId	int32	`csv:"FromCardId"`		//来源目标
-	ToCardId	int32	`csv:"ToCardId"`		//升级目标
-	CardType	int32	`csv:"CardType"`		//卡片类型
-	CardLocation	int32	`csv:"CardLocation"`		//卡片部位
-	CardLevel	int32	`csv:"CardLevel"`		//卡片等级
-	Attribute1	[]string	`csv:"Attribute1"`		//卡片属性
-	CardPicId	int32	`csv:"CardPicId"`		//卡片图鉴ID
-	BUFF	[]string	`csv:"BUFF"`		//卡片BUFF
-	Pro	int32	`csv:"Pro"`		//卡组权重
-	FightPower	int32	`csv:"FightPower"`		//卡片附加战斗力
-	Profession	[]string	`csv:"Profession"`		//推荐职业
-	Attribute2	[]string	`csv:"Attribute2"`		//筛选用基础属性
-	Attribute3	int32	`csv:"Attribute3"`		//卡片相克属性
-	UpCost	int32	`csv:"UpCost"`		//卡片升级费用
+var CardCfgLoader map[int32]*CardCfg
+
+type CardCfg struct {
+	CardId       int32    `csv:"CardId"`       //卡片ID
+	CardName     string   `csv:"CardName"`     //卡片名称
+	FromCardId   int32    `csv:"FromCardId"`   //来源目标
+	ToCardId     int32    `csv:"ToCardId"`     //升级目标
+	CardType     int32    `csv:"CardType"`     //卡片类型
+	CardLocation int32    `csv:"CardLocation"` //卡片部位
+	CardLevel    int32    `csv:"CardLevel"`    //卡片等级
+	Attribute1   []string `csv:"Attribute1"`   //卡片属性
+	CardPicId    int32    `csv:"CardPicId"`    //卡片图鉴ID
+	BUFF         []string `csv:"BUFF"`         //卡片BUFF
+	Pro          int32    `csv:"Pro"`          //卡组权重
+	FightPower   int32    `csv:"FightPower"`   //卡片附加战斗力
+	Profession   []string `csv:"Profession"`   //推荐职业
+	Attribute2   []string `csv:"Attribute2"`   //筛选用基础属性
+	Attribute3   int32    `csv:"Attribute3"`   //卡片相克属性
+	UpCost       int32    `csv:"UpCost"`       //卡片升级费用
 }
+
 func CardCfgLoad(path string) {
 	cfg := []*CardCfg{}
 	CardCfgLoader = map[int32]*CardCfg{}
-	loadCsvCfg(path + "CardCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"CardCfg.csv", &cfg)
+	for _, row := range cfg {
 		CardCfgLoader[row.CardId] = row
 	}
 }
 
-var CardIdentificationLoader  map[int32]*CardIdentification
-type CardIdentification struct{
-	Cardid	int32	`csv:"Cardid"`		//卡片ID
-	CardQuality	int32	`csv:"CardQuality"`		//卡片品质
-	MaxLv	int32	`csv:"MaxLv"`		//最大等级
-	CardReward1	[]string	`csv:"CardReward1"`		//收集奖励1
-	CardReward2	[]string	`csv:"CardReward2"`		//收集奖励2
-	CardReward3	[]string	`csv:"CardReward3"`		//收集奖励3
-	CardReward4	[]string	`csv:"CardReward4"`		//收集奖励4
-	CardReward5	[]string	`csv:"CardReward5"`		//收集奖励5
+var CardIdentificationLoader map[int32]*CardIdentification
+
+type CardIdentification struct {
+	Cardid      int32    `csv:"Cardid"`      //卡片ID
+	CardQuality int32    `csv:"CardQuality"` //卡片品质
+	MaxLv       int32    `csv:"MaxLv"`       //最大等级
+	CardReward1 []string `csv:"CardReward1"` //收集奖励1
+	CardReward2 []string `csv:"CardReward2"` //收集奖励2
+	CardReward3 []string `csv:"CardReward3"` //收集奖励3
+	CardReward4 []string `csv:"CardReward4"` //收集奖励4
+	CardReward5 []string `csv:"CardReward5"` //收集奖励5
 }
+
 func CardIdentificationLoad(path string) {
 	cfg := []*CardIdentification{}
 	CardIdentificationLoader = map[int32]*CardIdentification{}
-	loadCsvCfg(path + "CardIdentification.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"CardIdentification.csv", &cfg)
+	for _, row := range cfg {
 		CardIdentificationLoader[row.Cardid] = row
 	}
 }
 
-var CardResetLoader  map[int32]*CardReset
-type CardReset struct{
-	Id	int32	`csv:"Id"`		//ID
-	CardType	int32	`csv:"CardType"`		//卡片类型
-	CardLv	int32	`csv:"CardLv"`		//卡片等级
-	Normal	int32	`csv:"Normal"`		//获得普通概率
-	Mini	int32	`csv:"Mini"`		//获得迷你概率
-	Boss	int32	`csv:"Boss"`		//获得BOSS概率
+var CardResetLoader map[int32]*CardReset
+
+type CardReset struct {
+	Id       int32 `csv:"Id"`       //ID
+	CardType int32 `csv:"CardType"` //卡片类型
+	CardLv   int32 `csv:"CardLv"`   //卡片等级
+	Normal   int32 `csv:"Normal"`   //获得普通概率
+	Mini     int32 `csv:"Mini"`     //获得迷你概率
+	Boss     int32 `csv:"Boss"`     //获得BOSS概率
 }
+
 func CardResetLoad(path string) {
 	cfg := []*CardReset{}
 	CardResetLoader = map[int32]*CardReset{}
-	loadCsvCfg(path + "CardReset.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"CardReset.csv", &cfg)
+	for _, row := range cfg {
 		CardResetLoader[row.Id] = row
 	}
 }
 
-var CardSuitNewCfgLoader  map[int32]*CardSuitNewCfg
-type CardSuitNewCfg struct{
-	Id	int32	`csv:"Id"`		//id
-	Suit1	[]string	`csv:"Suit1"`		//祝福效果
-	TriggerConditions	[]string	`csv:"TriggerConditions"`		//激活条件
+var CardSuitNewCfgLoader map[int32]*CardSuitNewCfg
+
+type CardSuitNewCfg struct {
+	Id                int32    `csv:"Id"`                //id
+	Suit1             []string `csv:"Suit1"`             //祝福效果
+	TriggerConditions []string `csv:"TriggerConditions"` //激活条件
 }
+
 func CardSuitNewCfgLoad(path string) {
 	cfg := []*CardSuitNewCfg{}
 	CardSuitNewCfgLoader = map[int32]*CardSuitNewCfg{}
-	loadCsvCfg(path + "CardSuitNewCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"CardSuitNewCfg.csv", &cfg)
+	for _, row := range cfg {
 		CardSuitNewCfgLoader[row.Id] = row
 	}
 }
 
-var CardUnlockCfgLoader  map[int32]*CardUnlockCfg
-type CardUnlockCfg struct{
-	CardSlotID	int32	`csv:"CardSlotID"`		//卡槽ID
-	UnlockingCondition	[]string	`csv:"UnlockingCondition"`		//解锁条件
+var CardUnlockCfgLoader map[int32]*CardUnlockCfg
+
+type CardUnlockCfg struct {
+	CardSlotID         int32    `csv:"CardSlotID"`         //卡槽ID
+	UnlockingCondition []string `csv:"UnlockingCondition"` //解锁条件
 }
+
 func CardUnlockCfgLoad(path string) {
 	cfg := []*CardUnlockCfg{}
 	CardUnlockCfgLoader = map[int32]*CardUnlockCfg{}
-	loadCsvCfg(path + "CardUnlockCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"CardUnlockCfg.csv", &cfg)
+	for _, row := range cfg {
 		CardUnlockCfgLoader[row.CardSlotID] = row
 	}
 }
 
-var ClimbingTowerCfgLoader  map[int32]*ClimbingTowerCfg
-type ClimbingTowerCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	MaxFightingTime	int32	`csv:"MaxFightingTime"`		//最长战斗时间
-	RewardItems	[]string	`csv:"RewardItems"`		//关卡奖励
-	MonsterLevel	int32	`csv:"MonsterLevel"`		//怪物等级
-	SpecialReward	[]string	`csv:"SpecialReward"`		//特殊奖励
-	FightCheck	int32	`csv:"FightCheck"`		//战力校验
-	SpAddition	string	`csv:"SpAddition"`		//蓝量加成
-	PowerWeaken	string	`csv:"PowerWeaken"`		//战力削弱
-	StayTimeWeaken	string	`csv:"StayTimeWeaken"`		//停留时间削弱
-	Version	int32	`csv:"version"`		//版本
-	CardUnlock	string	`csv:"CardUnlock"`		//卡槽解锁
-	CloseDown	string	`csv:"CloseDown"`		//查封配置
+var ClimbingTowerCfgLoader map[int32]*ClimbingTowerCfg
+
+type ClimbingTowerCfg struct {
+	Id              int32    `csv:"Id"`              //唯一id
+	MaxFightingTime int32    `csv:"MaxFightingTime"` //最长战斗时间
+	RewardItems     []string `csv:"RewardItems"`     //关卡奖励
+	MonsterLevel    int32    `csv:"MonsterLevel"`    //怪物等级
+	SpecialReward   []string `csv:"SpecialReward"`   //特殊奖励
+	FightCheck      int32    `csv:"FightCheck"`      //战力校验
+	SpAddition      string   `csv:"SpAddition"`      //蓝量加成
+	PowerWeaken     string   `csv:"PowerWeaken"`     //战力削弱
+	StayTimeWeaken  string   `csv:"StayTimeWeaken"`  //停留时间削弱
+	Version         int32    `csv:"version"`         //版本
+	CardUnlock      string   `csv:"CardUnlock"`      //卡槽解锁
+	CloseDown       string   `csv:"CloseDown"`       //查封配置
 }
+
 func ClimbingTowerCfgLoad(path string) {
 	cfg := []*ClimbingTowerCfg{}
 	ClimbingTowerCfgLoader = map[int32]*ClimbingTowerCfg{}
-	loadCsvCfg(path + "ClimbingTowerCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ClimbingTowerCfg.csv", &cfg)
+	for _, row := range cfg {
 		ClimbingTowerCfgLoader[row.Id] = row
 	}
 }
 
-var CombinedServiceCfgLoader  map[int32]*CombinedServiceCfg
-type CombinedServiceCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	Number	[]string	`csv:"Number"`		//合服编号
-	Time	string	`csv:"Time"`		//合服时间
-	Tips	string	`csv:"Tips"`		//合服预告
+var CombinedServiceCfgLoader map[int32]*CombinedServiceCfg
+
+type CombinedServiceCfg struct {
+	Id     int32    `csv:"Id"`     //唯一id
+	Number []string `csv:"Number"` //合服编号
+	Time   string   `csv:"Time"`   //合服时间
+	Tips   string   `csv:"Tips"`   //合服预告
 }
+
 func CombinedServiceCfgLoad(path string) {
 	cfg := []*CombinedServiceCfg{}
 	CombinedServiceCfgLoader = map[int32]*CombinedServiceCfg{}
-	loadCsvCfg(path + "CombinedServiceCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"CombinedServiceCfg.csv", &cfg)
+	for _, row := range cfg {
 		CombinedServiceCfgLoader[row.Id] = row
 	}
 }
 
-var CompetitionAidouluCfgLoader  map[int32]*CompetitionAidouluCfg
-type CompetitionAidouluCfg struct{
-	BoxId	int32	`csv:"BoxId"`		//宝箱
-	GoodNum	int32	`csv:"GoodNum"`		//需要礼包数
-	ConditionHot	int32	`csv:"ConditionHot"`		//需要热度
-	Rewards	[]string	`csv:"Rewards"`		//宝箱奖励
+var CompetitionAidouluCfgLoader map[int32]*CompetitionAidouluCfg
+
+type CompetitionAidouluCfg struct {
+	BoxId        int32    `csv:"BoxId"`        //宝箱
+	GoodNum      int32    `csv:"GoodNum"`      //需要礼包数
+	ConditionHot int32    `csv:"ConditionHot"` //需要热度
+	Rewards      []string `csv:"Rewards"`      //宝箱奖励
 }
+
 func CompetitionAidouluCfgLoad(path string) {
 	cfg := []*CompetitionAidouluCfg{}
 	CompetitionAidouluCfgLoader = map[int32]*CompetitionAidouluCfg{}
-	loadCsvCfg(path + "CompetitionAidouluCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"CompetitionAidouluCfg.csv", &cfg)
+	for _, row := range cfg {
 		CompetitionAidouluCfgLoader[row.BoxId] = row
 	}
 }
 
-var CompetitionCfgLoader  map[int32]*CompetitionCfg
-type CompetitionCfg struct{
-	Id	int32	`csv:"Id"`		//序列ID
-	CompetitionId	int32	`csv:"CompetitionId"`		//赛季ID
-	CompetitionType	int32	`csv:"CompetitionType"`		//赛季类型
-	CompetitionCondition	[]string	`csv:"CompetitionCondition"`		//赛季条件
-	CompetitionReward1	[]string	`csv:"CompetitionReward1"`		//奖励1
-	CompetitionReward2	[]string	`csv:"CompetitionReward2"`		//奖励2
-	CompetitionReward3	[]string	`csv:"CompetitionReward3"`		//奖励3
-	CompetitionPeriod	[]string	`csv:"CompetitionPeriod"`		//赛季周期(天)
-	BeginTime	string	`csv:"BeginTime"`		//开始时间
-	EndTime	string	`csv:"EndTime"`		//结束时间
-	RestTime	int32	`csv:"RestTime"`		//赛季休赛期(天)
-	HuodongItem	[]string	`csv:"HuodongItem"`		//活动道具
-	Level	int32	`csv:"Level"`		//档位
+var CompetitionCfgLoader map[int32]*CompetitionCfg
+
+type CompetitionCfg struct {
+	Id                   int32    `csv:"Id"`                   //序列ID
+	CompetitionId        int32    `csv:"CompetitionId"`        //赛季ID
+	CompetitionType      int32    `csv:"CompetitionType"`      //赛季类型
+	CompetitionCondition []string `csv:"CompetitionCondition"` //赛季条件
+	CompetitionReward1   []string `csv:"CompetitionReward1"`   //奖励1
+	CompetitionReward2   []string `csv:"CompetitionReward2"`   //奖励2
+	CompetitionReward3   []string `csv:"CompetitionReward3"`   //奖励3
+	CompetitionPeriod    []string `csv:"CompetitionPeriod"`    //赛季周期(天)
+	BeginTime            string   `csv:"BeginTime"`            //开始时间
+	EndTime              string   `csv:"EndTime"`              //结束时间
+	RestTime             int32    `csv:"RestTime"`             //赛季休赛期(天)
+	HuodongItem          []string `csv:"HuodongItem"`          //活动道具
+	Level                int32    `csv:"Level"`                //档位
 }
+
 func CompetitionCfgLoad(path string) {
 	cfg := []*CompetitionCfg{}
 	CompetitionCfgLoader = map[int32]*CompetitionCfg{}
-	loadCsvCfg(path + "CompetitionCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"CompetitionCfg.csv", &cfg)
+	for _, row := range cfg {
 		CompetitionCfgLoader[row.Id] = row
 	}
 }
 
-var CompetitionDevineCfgLoader  map[int32]*CompetitionDevineCfg
-type CompetitionDevineCfg struct{
-	ID	int32	`csv:"ID"`		//ID
-	NowLightNum	int32	`csv:"NowLightNum"`		//当前点亮数
-	Probability	int32	`csv:"Probability"`		//下次点亮概率(万分比)
-	PledgeProbability	int32	`csv:"PledgeProbability"`		//连续点暗保底概率(万分比)
-	ItemPrice	[]string	`csv:"ItemPrice"`		//下次占道具花费
-	GoldPrice	[]string	`csv:"GoldPrice"`		//下次占金币花费
-	LuckyPrice	[]string	`csv:"LuckyPrice"`		//下次幸运符花费
-	Rewards	[]string	`csv:"Rewards"`		//奖励
-	Point	[]string	`csv:"Point"`		//下次【占星】得到的积分
-	IfBroadcast	int32	`csv:"IfBroadcast"`		//领奖是否需要播报
-	BroadcastKey	string	`csv:"BroadcastKey"`		//播报key
+var CompetitionDevineCfgLoader map[int32]*CompetitionDevineCfg
+
+type CompetitionDevineCfg struct {
+	ID                int32    `csv:"ID"`                //ID
+	NowLightNum       int32    `csv:"NowLightNum"`       //当前点亮数
+	Probability       int32    `csv:"Probability"`       //下次点亮概率(万分比)
+	PledgeProbability int32    `csv:"PledgeProbability"` //连续点暗保底概率(万分比)
+	ItemPrice         []string `csv:"ItemPrice"`         //下次占道具花费
+	GoldPrice         []string `csv:"GoldPrice"`         //下次占金币花费
+	LuckyPrice        []string `csv:"LuckyPrice"`        //下次幸运符花费
+	Rewards           []string `csv:"Rewards"`           //奖励
+	Point             []string `csv:"Point"`             //下次【占星】得到的积分
+	IfBroadcast       int32    `csv:"IfBroadcast"`       //领奖是否需要播报
+	BroadcastKey      string   `csv:"BroadcastKey"`      //播报key
 }
+
 func CompetitionDevineCfgLoad(path string) {
 	cfg := []*CompetitionDevineCfg{}
 	CompetitionDevineCfgLoader = map[int32]*CompetitionDevineCfg{}
-	loadCsvCfg(path + "CompetitionDevineCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"CompetitionDevineCfg.csv", &cfg)
+	for _, row := range cfg {
 		CompetitionDevineCfgLoader[row.ID] = row
 	}
 }
 
-var CompetitionPrizeWheelCfgLoader  map[int32]*CompetitionPrizeWheelCfg
-type CompetitionPrizeWheelCfg struct{
-	Id	int32	`csv:"Id"`		//ID
-	LowNormalNum	[]string	`csv:"LowNormalNum"`		//低级奖
-	NormalNum	[]string	`csv:"NormalNum"`		//Normal奖
-	MiniNum	[]string	`csv:"MiniNum"`		//Mini奖
-	MvpNum	[]string	`csv:"MvpNum"`		//Mvp奖
-	ModProbability	int32	`csv:"ModProbability"`		//模板权重
-	Probability	[]string	`csv:"Probability"`		//非MVP抽奖概率
-	MvpProbability	[]string	`csv:"MvpProbability"`		//MVP抽奖概率
-	ItemPrice	int32	`csv:"ItemPrice"`		//一个道具的价格
-	RewardOneItem	[]string	`csv:"RewardOneItem"`		//抽一次价格(道具)
-	RewardOneGold	[]string	`csv:"RewardOneGold"`		//抽一次价格(金币)
-	RewardAllItem	[]string	`csv:"RewardAllItem"`		//抽全部价格(道具)
-	RewardAdllGold	int32	`csv:"RewardAdllGold"`		//抽全部价格(金币)
-	RefreshPrice	[]string	`csv:"RefreshPrice"`		//刷新价格(金币)
-	NoRewardNum	int32	`csv:"NoRewardNum"`		//结束本轮次数
-	RewardOnePoint	[]string	`csv:"RewardOnePoint"`		//抽一次送赛季积分
-	RewardAllPoint	int32	`csv:"RewardAllPoint"`		//抽全部送赛季积分
+var CompetitionPrizeWheelCfgLoader map[int32]*CompetitionPrizeWheelCfg
+
+type CompetitionPrizeWheelCfg struct {
+	Id             int32    `csv:"Id"`             //ID
+	LowNormalNum   []string `csv:"LowNormalNum"`   //低级奖
+	NormalNum      []string `csv:"NormalNum"`      //Normal奖
+	MiniNum        []string `csv:"MiniNum"`        //Mini奖
+	MvpNum         []string `csv:"MvpNum"`         //Mvp奖
+	ModProbability int32    `csv:"ModProbability"` //模板权重
+	Probability    []string `csv:"Probability"`    //非MVP抽奖概率
+	MvpProbability []string `csv:"MvpProbability"` //MVP抽奖概率
+	ItemPrice      int32    `csv:"ItemPrice"`      //一个道具的价格
+	RewardOneItem  []string `csv:"RewardOneItem"`  //抽一次价格(道具)
+	RewardOneGold  []string `csv:"RewardOneGold"`  //抽一次价格(金币)
+	RewardAllItem  []string `csv:"RewardAllItem"`  //抽全部价格(道具)
+	RewardAdllGold int32    `csv:"RewardAdllGold"` //抽全部价格(金币)
+	RefreshPrice   []string `csv:"RefreshPrice"`   //刷新价格(金币)
+	NoRewardNum    int32    `csv:"NoRewardNum"`    //结束本轮次数
+	RewardOnePoint []string `csv:"RewardOnePoint"` //抽一次送赛季积分
+	RewardAllPoint int32    `csv:"RewardAllPoint"` //抽全部送赛季积分
 }
+
 func CompetitionPrizeWheelCfgLoad(path string) {
 	cfg := []*CompetitionPrizeWheelCfg{}
 	CompetitionPrizeWheelCfgLoader = map[int32]*CompetitionPrizeWheelCfg{}
-	loadCsvCfg(path + "CompetitionPrizeWheelCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"CompetitionPrizeWheelCfg.csv", &cfg)
+	for _, row := range cfg {
 		CompetitionPrizeWheelCfgLoader[row.Id] = row
 	}
 }
 
-var ConditionCfgLoader  map[int32]*ConditionCfg
-type ConditionCfg struct{
-	ConditionId	int32	`csv:"ConditionId"`		//条件ID
-	Condition	[]string	`csv:"Condition"`		//条件枚举
+var ConditionCfgLoader map[int32]*ConditionCfg
+
+type ConditionCfg struct {
+	ConditionId int32    `csv:"ConditionId"` //条件ID
+	Condition   []string `csv:"Condition"`   //条件枚举
 }
+
 func ConditionCfgLoad(path string) {
 	cfg := []*ConditionCfg{}
 	ConditionCfgLoader = map[int32]*ConditionCfg{}
-	loadCsvCfg(path + "ConditionCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ConditionCfg.csv", &cfg)
+	for _, row := range cfg {
 		ConditionCfgLoader[row.ConditionId] = row
 	}
 }
 
-var DesignationCfgLoader  map[int32]*DesignationCfg
-type DesignationCfg struct{
-	ID	int32	`csv:"ID"`		//ID
-	Name	string	`csv:"Name"`		//称号名字
-	Type	int32	`csv:"Type"`		//称号类别
-	Attribute	[]string	`csv:"Attribute"`		//称号属性
-	TaskCondition	[]string	`csv:"TaskCondition"`		//任务条件枚举
-	TaskConditionItem	[]string	`csv:"TaskConditionItem"`		//消耗道具
-	Time	int32	`csv:"Time"`		//称号时限
-	DecomposeReward	int32	`csv:"DecomposeReward"`		//分解
-	RefreshDaily	int32	`csv:"RefreshDaily"`		//条件计数是否每日刷新
+var DesignationCfgLoader map[int32]*DesignationCfg
+
+type DesignationCfg struct {
+	ID                int32    `csv:"ID"`                //ID
+	Name              string   `csv:"Name"`              //称号名字
+	Type              int32    `csv:"Type"`              //称号类别
+	Attribute         []string `csv:"Attribute"`         //称号属性
+	TaskCondition     []string `csv:"TaskCondition"`     //任务条件枚举
+	TaskConditionItem []string `csv:"TaskConditionItem"` //消耗道具
+	Time              int32    `csv:"Time"`              //称号时限
+	DecomposeReward   int32    `csv:"DecomposeReward"`   //分解
+	RefreshDaily      int32    `csv:"RefreshDaily"`      //条件计数是否每日刷新
 }
+
 func DesignationCfgLoad(path string) {
 	cfg := []*DesignationCfg{}
 	DesignationCfgLoader = map[int32]*DesignationCfg{}
-	loadCsvCfg(path + "DesignationCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"DesignationCfg.csv", &cfg)
+	for _, row := range cfg {
 		DesignationCfgLoader[row.ID] = row
 	}
 }
 
-var DropCfgLoader  map[int32]*DropCfg
-type DropCfg struct{
-	Id	int32	`csv:"Id"`		//ID
-	Rate	int32	`csv:"Rate"`		//出现概率
-	DropType	int32	`csv:"DropType"`		//类型
-	Times	int32	`csv:"Times"`		//随机次数
-	Drop1	[]string	`csv:"Drop1"`		//掉落组1
+var DropCfgLoader map[int32]*DropCfg
+
+type DropCfg struct {
+	Id       int32    `csv:"Id"`       //ID
+	Rate     int32    `csv:"Rate"`     //出现概率
+	DropType int32    `csv:"DropType"` //类型
+	Times    int32    `csv:"Times"`    //随机次数
+	Drop1    []string `csv:"Drop1"`    //掉落组1
 }
+
 func DropCfgLoad(path string) {
 	cfg := []*DropCfg{}
 	DropCfgLoader = map[int32]*DropCfg{}
-	loadCsvCfg(path + "DropCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"DropCfg.csv", &cfg)
+	for _, row := range cfg {
 		DropCfgLoader[row.Id] = row
 	}
 }
 
-var EquipCfgLoader  map[int32]*EquipCfg
-type EquipCfg struct{
-	Id	int32	`csv:"Id"`		//id
-	Type	int32	`csv:"Type"`		//装备类型
-	EquipLevel	int32	`csv:"EquipLevel"`		//装备等级
-	JobType	[]string	`csv:"JobType"`		//职业类型
-	Forge	int32	`csv:"Forge"`		//锻造目标
-	ForgeOld	int32	`csv:"ForgeOld"`		//装备前置
-	CostMoney	int32	`csv:"CostMoney"`		//合成消耗
-	Suit	int32	`csv:"Suit"`		//套装ID
-	Attack	int32	`csv:"Attack"`		//物攻
-	MagicAttack	int32	`csv:"MagicAttack"`		//魔攻
-	Defense	int32	`csv:"Defense"`		//物防
-	MagicDefense	int32	`csv:"MagicDefense"`		//魔防
-	Life	int32	`csv:"Life"`		//生命
-	Sp	int32	`csv:"Sp"`		//蓝量
-	Crit	int32	`csv:"Crit"`		//暴击
-	Ten	int32	`csv:"Ten"`		//韧性
-	Hit	int32	`csv:"Hit"`		//命中
-	Dodge	int32	`csv:"Dodge"`		//闪避
-	PhysicalDamageBonus	int32	`csv:"PhysicalDamageBonus"`		//物伤加成
-	MagicDamageBonus	int32	`csv:"MagicDamageBonus"`		//魔伤加成
-	AtkPercent	int32	`csv:"AtkPercent"`		//ATK%
-	MatkPercent	int32	`csv:"MatkPercent"`		//MATK%
-	Str	int32	`csv:"Str"`		//力量
-	Agi	int32	`csv:"Agi"`		//敏捷
-	Int	int32	`csv:"Int"`		//智力
-	Vit	int32	`csv:"Vit"`		//体质
-	Dex	int32	`csv:"Dex"`		//灵巧
-	Luk	int32	`csv:"Luk"`		//幸运
+var EquipCfgLoader map[int32]*EquipCfg
+
+type EquipCfg struct {
+	Id                  int32    `csv:"Id"`                  //id
+	Type                int32    `csv:"Type"`                //装备类型
+	EquipLevel          int32    `csv:"EquipLevel"`          //装备等级
+	JobType             []string `csv:"JobType"`             //职业类型
+	Forge               int32    `csv:"Forge"`               //锻造目标
+	ForgeOld            int32    `csv:"ForgeOld"`            //装备前置
+	CostMoney           int32    `csv:"CostMoney"`           //合成消耗
+	Suit                int32    `csv:"Suit"`                //套装ID
+	Attack              int32    `csv:"Attack"`              //物攻
+	MagicAttack         int32    `csv:"MagicAttack"`         //魔攻
+	Defense             int32    `csv:"Defense"`             //物防
+	MagicDefense        int32    `csv:"MagicDefense"`        //魔防
+	Life                int32    `csv:"Life"`                //生命
+	Sp                  int32    `csv:"Sp"`                  //蓝量
+	Crit                int32    `csv:"Crit"`                //暴击
+	Ten                 int32    `csv:"Ten"`                 //韧性
+	Hit                 int32    `csv:"Hit"`                 //命中
+	Dodge               int32    `csv:"Dodge"`               //闪避
+	PhysicalDamageBonus int32    `csv:"PhysicalDamageBonus"` //物伤加成
+	MagicDamageBonus    int32    `csv:"MagicDamageBonus"`    //魔伤加成
+	AtkPercent          int32    `csv:"AtkPercent"`          //ATK%
+	MatkPercent         int32    `csv:"MatkPercent"`         //MATK%
+	Str                 int32    `csv:"Str"`                 //力量
+	Agi                 int32    `csv:"Agi"`                 //敏捷
+	Int                 int32    `csv:"Int"`                 //智力
+	Vit                 int32    `csv:"Vit"`                 //体质
+	Dex                 int32    `csv:"Dex"`                 //灵巧
+	Luk                 int32    `csv:"Luk"`                 //幸运
 }
+
 func EquipCfgLoad(path string) {
 	cfg := []*EquipCfg{}
 	EquipCfgLoader = map[int32]*EquipCfg{}
-	loadCsvCfg(path + "EquipCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"EquipCfg.csv", &cfg)
+	for _, row := range cfg {
 		EquipCfgLoader[row.Id] = row
 	}
 }
 
-var EquipRefineCfgLoader  map[int32]*EquipRefineCfg
-type EquipRefineCfg struct{
-	Id	int32	`csv:"Id"`		//id
-	Place1	[]string	`csv:"Place1"`		//部位1
-	Costzeny1	int32	`csv:"Costzeny1"`		//消耗银币1
-	Costitem1	[]string	`csv:"Costitem1"`		//消耗道具1
-	Place2	[]string	`csv:"Place2"`		//部位2
-	Costzeny2	int32	`csv:"Costzeny2"`		//消耗银币2
-	Costitem2	[]string	`csv:"Costitem2"`		//消耗道具2
-	Rate	int32	`csv:"rate"`		//成功概率
-	Result	int32	`csv:"Result"`		//精炼效果
-	Suit	[]string	`csv:"Suit"`		//全身加
-	SuitServer	[]string	`csv:"SuitServer"`		//全身加
+var EquipRefineCfgLoader map[int32]*EquipRefineCfg
+
+type EquipRefineCfg struct {
+	Id         int32    `csv:"Id"`         //id
+	Place1     []string `csv:"Place1"`     //部位1
+	Costzeny1  int32    `csv:"Costzeny1"`  //消耗银币1
+	Costitem1  []string `csv:"Costitem1"`  //消耗道具1
+	Place2     []string `csv:"Place2"`     //部位2
+	Costzeny2  int32    `csv:"Costzeny2"`  //消耗银币2
+	Costitem2  []string `csv:"Costitem2"`  //消耗道具2
+	Rate       int32    `csv:"rate"`       //成功概率
+	Result     int32    `csv:"Result"`     //精炼效果
+	Suit       []string `csv:"Suit"`       //全身加
+	SuitServer []string `csv:"SuitServer"` //全身加
 }
+
 func EquipRefineCfgLoad(path string) {
 	cfg := []*EquipRefineCfg{}
 	EquipRefineCfgLoader = map[int32]*EquipRefineCfg{}
-	loadCsvCfg(path + "EquipRefineCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"EquipRefineCfg.csv", &cfg)
+	for _, row := range cfg {
 		EquipRefineCfgLoader[row.Id] = row
 	}
 }
 
-var EquipSuitNewCfgLoader  map[int32]*EquipSuitNewCfg
-type EquipSuitNewCfg struct{
-	Id	int32	`csv:"Id"`		//id
-	Name	string	`csv:"Name"`		//名称
-	Suit1	[]string	`csv:"Suit1"`		//2件属性
-	Suit2	[]string	`csv:"Suit2"`		//4件属性
-	Suit3	[]string	`csv:"Suit3"`		//6件属性
+var EquipSuitNewCfgLoader map[int32]*EquipSuitNewCfg
+
+type EquipSuitNewCfg struct {
+	Id    int32    `csv:"Id"`    //id
+	Name  string   `csv:"Name"`  //名称
+	Suit1 []string `csv:"Suit1"` //2件属性
+	Suit2 []string `csv:"Suit2"` //4件属性
+	Suit3 []string `csv:"Suit3"` //6件属性
 }
+
 func EquipSuitNewCfgLoad(path string) {
 	cfg := []*EquipSuitNewCfg{}
 	EquipSuitNewCfgLoader = map[int32]*EquipSuitNewCfg{}
-	loadCsvCfg(path + "EquipSuitNewCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"EquipSuitNewCfg.csv", &cfg)
+	for _, row := range cfg {
 		EquipSuitNewCfgLoader[row.Id] = row
 	}
 }
 
-var EvilCfgLoader  map[int32]*EvilCfg
-type EvilCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	MonsterList	[]string	`csv:"MonsterList"`		//召唤怪物
-	LevelReward	[]string	`csv:"LevelReward"`		//升级奖励
-	LevelTimes	int32	`csv:"LevelTimes"`		//升级次数
-	MaxFightingTime	int32	`csv:"MaxFightingTime"`		//最长战斗时间
+var EvilCfgLoader map[int32]*EvilCfg
+
+type EvilCfg struct {
+	Id              int32    `csv:"Id"`              //唯一id
+	MonsterList     []string `csv:"MonsterList"`     //召唤怪物
+	LevelReward     []string `csv:"LevelReward"`     //升级奖励
+	LevelTimes      int32    `csv:"LevelTimes"`      //升级次数
+	MaxFightingTime int32    `csv:"MaxFightingTime"` //最长战斗时间
 }
+
 func EvilCfgLoad(path string) {
 	cfg := []*EvilCfg{}
 	EvilCfgLoader = map[int32]*EvilCfg{}
-	loadCsvCfg(path + "EvilCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"EvilCfg.csv", &cfg)
+	for _, row := range cfg {
 		EvilCfgLoader[row.Id] = row
 	}
 }
 
-var ExpeditionBuffCfgLoader  map[int32]*ExpeditionBuffCfg
-type ExpeditionBuffCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	BuffId	int32	`csv:"BuffId"`		//buffid
-	WarriorScore	int32	`csv:"WarriorScore"`		//勇士积分
+var ExpeditionBuffCfgLoader map[int32]*ExpeditionBuffCfg
+
+type ExpeditionBuffCfg struct {
+	Id           int32 `csv:"Id"`           //唯一id
+	BuffId       int32 `csv:"BuffId"`       //buffid
+	WarriorScore int32 `csv:"WarriorScore"` //勇士积分
 }
+
 func ExpeditionBuffCfgLoad(path string) {
 	cfg := []*ExpeditionBuffCfg{}
 	ExpeditionBuffCfgLoader = map[int32]*ExpeditionBuffCfg{}
-	loadCsvCfg(path + "ExpeditionBuffCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ExpeditionBuffCfg.csv", &cfg)
+	for _, row := range cfg {
 		ExpeditionBuffCfgLoader[row.Id] = row
 	}
 }
 
-var ExpeditionBuffDropCfgLoader  map[int32]*ExpeditionBuffDropCfg
-type ExpeditionBuffDropCfg struct{
-	Id	int32	`csv:"Id"`		//索引
-	BossID	int32	`csv:"BossID"`		//BossID
-	Buffs	[]string	`csv:"Buffs"`		//掉落Buff列表
-	LevelId	int32	`csv:"LevelId"`		//关卡Id
-	WarriorScore	int32	`csv:"WarriorScore"`		//勇士积分
+var ExpeditionBuffDropCfgLoader map[int32]*ExpeditionBuffDropCfg
+
+type ExpeditionBuffDropCfg struct {
+	Id           int32    `csv:"Id"`           //索引
+	BossID       int32    `csv:"BossID"`       //BossID
+	Buffs        []string `csv:"Buffs"`        //掉落Buff列表
+	LevelId      int32    `csv:"LevelId"`      //关卡Id
+	WarriorScore int32    `csv:"WarriorScore"` //勇士积分
 }
+
 func ExpeditionBuffDropCfgLoad(path string) {
 	cfg := []*ExpeditionBuffDropCfg{}
 	ExpeditionBuffDropCfgLoader = map[int32]*ExpeditionBuffDropCfg{}
-	loadCsvCfg(path + "ExpeditionBuffDropCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ExpeditionBuffDropCfg.csv", &cfg)
+	for _, row := range cfg {
 		ExpeditionBuffDropCfgLoader[row.Id] = row
 	}
 }
 
-var ExpeditionCfgLoader  map[int32]*ExpeditionCfg
-type ExpeditionCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	Type	int32	`csv:"Type"`		//副本难度
-	LevelId	int32	`csv:"LevelId"`		//副本关
-	LevelNum	int32	`csv:"LevelNum"`		//关卡数量
-	BossList	[]string	`csv:"BossList"`		//召唤boss
-	Reward	[]string	`csv:"Reward"`		//奖励
-	MaxFightingTime	int32	`csv:"MaxFightingTime"`		//最长战斗时间
-	HighReward	int32	`csv:"HighReward"`		//是否为高级奖励
-	ChallengeNum	int32	`csv:"ChallengeNum"`		//赠送挑战次数
-	UnlockDesc	string	`csv:"UnlockDesc"`		//开启条件
-	WarriorScore	int32	`csv:"WarriorScore"`		//勇士积分
-	LevelCoefficient	int32	`csv:"LevelCoefficient"`		//加成积分系数
-	DayReward	[]string	`csv:"DayReward"`		//每日通关奖励
+var ExpeditionCfgLoader map[int32]*ExpeditionCfg
+
+type ExpeditionCfg struct {
+	Id               int32    `csv:"Id"`               //唯一id
+	Type             int32    `csv:"Type"`             //副本难度
+	LevelId          int32    `csv:"LevelId"`          //副本关
+	LevelNum         int32    `csv:"LevelNum"`         //关卡数量
+	BossList         []string `csv:"BossList"`         //召唤boss
+	Reward           []string `csv:"Reward"`           //奖励
+	MaxFightingTime  int32    `csv:"MaxFightingTime"`  //最长战斗时间
+	HighReward       int32    `csv:"HighReward"`       //是否为高级奖励
+	ChallengeNum     int32    `csv:"ChallengeNum"`     //赠送挑战次数
+	UnlockDesc       string   `csv:"UnlockDesc"`       //开启条件
+	WarriorScore     int32    `csv:"WarriorScore"`     //勇士积分
+	LevelCoefficient int32    `csv:"LevelCoefficient"` //加成积分系数
+	DayReward        []string `csv:"DayReward"`        //每日通关奖励
 }
+
 func ExpeditionCfgLoad(path string) {
 	cfg := []*ExpeditionCfg{}
 	ExpeditionCfgLoader = map[int32]*ExpeditionCfg{}
-	loadCsvCfg(path + "ExpeditionCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ExpeditionCfg.csv", &cfg)
+	for _, row := range cfg {
 		ExpeditionCfgLoader[row.Id] = row
 	}
 }
 
-var FashionCfgLoader  map[int32]*FashionCfg
-type FashionCfg struct{
-	FashionId	int32	`csv:"FashionId"`		//时装id
-	FashionLocation	int32	`csv:"FashionLocation"`		//时装部位类型
-	FashionHideHair	bool	`csv:"FashionHideHair"`		//是否隐藏发型
-	FashionSex	int32	`csv:"FashionSex"`		//时装性别限制
-	FashionUseJob	[]string	`csv:"FashionUseJob"`		//时装职业限制
-	FashionOpen	bool	`csv:"FashionOpen"`		//是否开放使用
-	FashionQuality	int32	`csv:"FashionQuality"`		//时装品质
-	AttrNum	int32	`csv:"AttrNum"`		//属性数量
-	SuitId	[]string	`csv:"SuitId"`		//时装套装
+var FashionCfgLoader map[int32]*FashionCfg
+
+type FashionCfg struct {
+	FashionId       int32    `csv:"FashionId"`       //时装id
+	FashionLocation int32    `csv:"FashionLocation"` //时装部位类型
+	FashionHideHair bool     `csv:"FashionHideHair"` //是否隐藏发型
+	FashionSex      int32    `csv:"FashionSex"`      //时装性别限制
+	FashionUseJob   []string `csv:"FashionUseJob"`   //时装职业限制
+	FashionOpen     bool     `csv:"FashionOpen"`     //是否开放使用
+	FashionQuality  int32    `csv:"FashionQuality"`  //时装品质
+	AttrNum         int32    `csv:"AttrNum"`         //属性数量
+	SuitId          []string `csv:"SuitId"`          //时装套装
 }
+
 func FashionCfgLoad(path string) {
 	cfg := []*FashionCfg{}
 	FashionCfgLoader = map[int32]*FashionCfg{}
-	loadCsvCfg(path + "FashionCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"FashionCfg.csv", &cfg)
+	for _, row := range cfg {
 		FashionCfgLoader[row.FashionId] = row
 	}
 }
 
-var FashionLevelUpLoader  map[int32]*FashionLevelUp
-type FashionLevelUp struct{
-	Level	int32	`csv:"Level"`		//等级
-	UpMaterial1	[]string	`csv:"UpMaterial1"`		//绿色升级消耗
-	UpMaterial2	[]string	`csv:"UpMaterial2"`		//蓝色升级消耗
-	UpMaterial3	[]string	`csv:"UpMaterial3"`		//紫色升级消耗
-	UpMaterial4	[]string	`csv:"UpMaterial4"`		//金色升级消耗
-	UpMaterial5	[]string	`csv:"UpMaterial5"`		//红色升级消耗
-	UpAttribute	int32	`csv:"UpAttribute"`		//每级属性
+var FashionLevelUpLoader map[int32]*FashionLevelUp
+
+type FashionLevelUp struct {
+	Level       int32    `csv:"Level"`       //等级
+	UpMaterial1 []string `csv:"UpMaterial1"` //绿色升级消耗
+	UpMaterial2 []string `csv:"UpMaterial2"` //蓝色升级消耗
+	UpMaterial3 []string `csv:"UpMaterial3"` //紫色升级消耗
+	UpMaterial4 []string `csv:"UpMaterial4"` //金色升级消耗
+	UpMaterial5 []string `csv:"UpMaterial5"` //红色升级消耗
+	UpAttribute int32    `csv:"UpAttribute"` //每级属性
 }
+
 func FashionLevelUpLoad(path string) {
 	cfg := []*FashionLevelUp{}
 	FashionLevelUpLoader = map[int32]*FashionLevelUp{}
-	loadCsvCfg(path + "FashionLevelUp.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"FashionLevelUp.csv", &cfg)
+	for _, row := range cfg {
 		FashionLevelUpLoader[row.Level] = row
 	}
 }
 
-var FashionPaperCfgLoader  map[int32]*FashionPaperCfg
-type FashionPaperCfg struct{
-	PaperId	int32	`csv:"PaperId"`		//图纸ID
-	MakeMaterial	[]string	`csv:"MakeMaterial"`		//图纸制作材料
-	FashionId	int32	`csv:"FashionId"`		//时装ID
-	ResolveItem	[]string	`csv:"ResolveItem"`		//分解获得
+var FashionPaperCfgLoader map[int32]*FashionPaperCfg
+
+type FashionPaperCfg struct {
+	PaperId      int32    `csv:"PaperId"`      //图纸ID
+	MakeMaterial []string `csv:"MakeMaterial"` //图纸制作材料
+	FashionId    int32    `csv:"FashionId"`    //时装ID
+	ResolveItem  []string `csv:"ResolveItem"`  //分解获得
 }
+
 func FashionPaperCfgLoad(path string) {
 	cfg := []*FashionPaperCfg{}
 	FashionPaperCfgLoader = map[int32]*FashionPaperCfg{}
-	loadCsvCfg(path + "FashionPaperCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"FashionPaperCfg.csv", &cfg)
+	for _, row := range cfg {
 		FashionPaperCfgLoader[row.PaperId] = row
 	}
 }
 
-var FashionRandomLoader  map[int32]*FashionRandom
-type FashionRandom struct{
-	ID	int32	`csv:"ID"`		//ID
-	RoleId	int32	`csv:"RoleId"`		//目标角色类型
-	AtrId	[]string	`csv:"AtrId"`		//属性类型
+var FashionRandomLoader map[int32]*FashionRandom
+
+type FashionRandom struct {
+	ID     int32    `csv:"ID"`     //ID
+	RoleId int32    `csv:"RoleId"` //目标角色类型
+	AtrId  []string `csv:"AtrId"`  //属性类型
 }
+
 func FashionRandomLoad(path string) {
 	cfg := []*FashionRandom{}
 	FashionRandomLoader = map[int32]*FashionRandom{}
-	loadCsvCfg(path + "FashionRandom.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"FashionRandom.csv", &cfg)
+	for _, row := range cfg {
 		FashionRandomLoader[row.ID] = row
 	}
 }
 
-var FashionSuitCfgLoader  map[int32]*FashionSuitCfg
-type FashionSuitCfg struct{
-	SuitId	int32	`csv:"SuitId"`		//套装id
-	SuitName	string	`csv:"SuitName"`		//套装标签名字
-	SuitSex	int32	`csv:"SuitSex"`		//套装性别
-	FashionId	[]string	`csv:"FashionId"`		//套装内时装
-	LevelCondition	[]string	`csv:"LevelCondition"`		//套装等级条件
-	Attribute	[]string	`csv:"Attribute"`		//每级属性
+var FashionSuitCfgLoader map[int32]*FashionSuitCfg
+
+type FashionSuitCfg struct {
+	SuitId         int32    `csv:"SuitId"`         //套装id
+	SuitName       string   `csv:"SuitName"`       //套装标签名字
+	SuitSex        int32    `csv:"SuitSex"`        //套装性别
+	FashionId      []string `csv:"FashionId"`      //套装内时装
+	LevelCondition []string `csv:"LevelCondition"` //套装等级条件
+	Attribute      []string `csv:"Attribute"`      //每级属性
 }
+
 func FashionSuitCfgLoad(path string) {
 	cfg := []*FashionSuitCfg{}
 	FashionSuitCfgLoader = map[int32]*FashionSuitCfg{}
-	loadCsvCfg(path + "FashionSuitCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"FashionSuitCfg.csv", &cfg)
+	for _, row := range cfg {
 		FashionSuitCfgLoader[row.SuitId] = row
 	}
 }
 
-var FightCfgLoader  map[int32]*FightCfg
-type FightCfg struct{
-	Id	int32	`csv:"Id"`		//属性ID
-	Coefficient	[]string	`csv:"Coefficient"`		//系数
-	Mapping	int32	`csv:"Mapping"`		//映射关系
+var FightCfgLoader map[int32]*FightCfg
+
+type FightCfg struct {
+	Id          int32    `csv:"Id"`          //属性ID
+	Coefficient []string `csv:"Coefficient"` //系数
+	Mapping     int32    `csv:"Mapping"`     //映射关系
 }
+
 func FightCfgLoad(path string) {
 	cfg := []*FightCfg{}
 	FightCfgLoader = map[int32]*FightCfg{}
-	loadCsvCfg(path + "FightCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"FightCfg.csv", &cfg)
+	for _, row := range cfg {
 		FightCfgLoader[row.Id] = row
 	}
 }
 
-var FunctionCfgLoader  map[int32]*FunctionCfg
-type FunctionCfg struct{
-	Id	int32	`csv:"Id"`		//状态id
-	FunctionType	int32	`csv:"FunctionType"`		//状态类型
-	Group	int32	`csv:"Group"`		//状态组
-	BuffType	int32	`csv:"BuffType"`		//buff类型
-	HurtStop	int32	`csv:"HurtStop"`		//伤害打断
-	ForbidMove	int32	`csv:"ForbidMove"`		//禁止移动
-	ForbidAttack	int32	`csv:"ForbidAttack"`		//禁止普攻
-	ForbidSkill	int32	`csv:"ForbidSkill"`		//禁止技能
-	Dodge	int32	`csv:"Dodge"`		//闪避
-	Effect	int32	`csv:"Effect"`		//状态特效
-	EndEffect	int32	`csv:"EndEffect"`		//状态特效
+var FunctionCfgLoader map[int32]*FunctionCfg
+
+type FunctionCfg struct {
+	Id           int32 `csv:"Id"`           //状态id
+	FunctionType int32 `csv:"FunctionType"` //状态类型
+	Group        int32 `csv:"Group"`        //状态组
+	BuffType     int32 `csv:"BuffType"`     //buff类型
+	HurtStop     int32 `csv:"HurtStop"`     //伤害打断
+	ForbidMove   int32 `csv:"ForbidMove"`   //禁止移动
+	ForbidAttack int32 `csv:"ForbidAttack"` //禁止普攻
+	ForbidSkill  int32 `csv:"ForbidSkill"`  //禁止技能
+	Dodge        int32 `csv:"Dodge"`        //闪避
+	Effect       int32 `csv:"Effect"`       //状态特效
+	EndEffect    int32 `csv:"EndEffect"`    //状态特效
 }
+
 func FunctionCfgLoad(path string) {
 	cfg := []*FunctionCfg{}
 	FunctionCfgLoader = map[int32]*FunctionCfg{}
-	loadCsvCfg(path + "FunctionCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"FunctionCfg.csv", &cfg)
+	for _, row := range cfg {
 		FunctionCfgLoader[row.Id] = row
 	}
 }
 
-var GlobalCfgLoader  map[int32]*GlobalCfg
-type GlobalCfg struct{
-	Id	int32	`csv:"Id"`		//全局配置id
-	IVal	int32	`csv:"IVal"`		//int类型数据
-	SVal	string	`csv:"SVal"`		//字符串类型数据
-	FVal	float32	`csv:"FVal"`		//浮点数据类型
+var GlobalCfgLoader map[int32]*GlobalCfg
+
+type GlobalCfg struct {
+	Id   int32   `csv:"Id"`   //全局配置id
+	IVal int32   `csv:"IVal"` //int类型数据
+	SVal string  `csv:"SVal"` //字符串类型数据
+	FVal float32 `csv:"FVal"` //浮点数据类型
 }
+
 func GlobalCfgLoad(path string) {
 	cfg := []*GlobalCfg{}
 	GlobalCfgLoader = map[int32]*GlobalCfg{}
-	loadCsvCfg(path + "GlobalCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"GlobalCfg.csv", &cfg)
+	for _, row := range cfg {
 		GlobalCfgLoader[row.Id] = row
 	}
 }
 
-var GuildBadgeCfgLoader  map[int32]*GuildBadgeCfg
-type GuildBadgeCfg struct{
-	Id	int32	`csv:"Id"`		//ID
+var GuildBadgeCfgLoader map[int32]*GuildBadgeCfg
+
+type GuildBadgeCfg struct {
+	Id int32 `csv:"Id"` //ID
 }
+
 func GuildBadgeCfgLoad(path string) {
 	cfg := []*GuildBadgeCfg{}
 	GuildBadgeCfgLoader = map[int32]*GuildBadgeCfg{}
-	loadCsvCfg(path + "GuildBadgeCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"GuildBadgeCfg.csv", &cfg)
+	for _, row := range cfg {
 		GuildBadgeCfgLoader[row.Id] = row
 	}
 }
 
-var GuildBossCfgLoader  map[int32]*GuildBossCfg
-type GuildBossCfg struct{
-	Id	int32	`csv:"Id"`		//全局配置id
-	BossType	int32	`csv:"BossType"`		//BOSS类型
-	Challenge	int32	`csv:"Challenge"`		//挑战次数
-	SummonId	int32	`csv:"SummonId"`		//召唤物id
-	SummonLimit	[]string	`csv:"SummonLimit"`		//开启权限
-	SummonTime	int32	`csv:"SummonTime"`		//BOSS开启时间
-	LifeTime	int32	`csv:"LifeTime"`		//boss存活时间
-	SettlementCd	int32	`csv:"SettlementCd"`		//BOSS结算CD
-	UnlockCond	int32	`csv:"UnlockCond"`		//解锁条件
-	Consume	int32	`csv:"Consume"`		//开启消耗
-	BattleTime	int32	`csv:"BattleTime"`		//挑战时间
-	DamageSegment	int32	`csv:"DamageSegment"`		//伤害档位
-	RewardRange	[]string	`csv:"RewardRange"`		//奖励区间
-	ReviewAwards	[]string	`csv:"ReviewAwards"`		//挑战后的可获得奖励预览
-	Reward	[]string	`csv:"Reward"`		//单局档位结算奖励
-	MasterReward	[]string	`csv:"MasterReward"`		//大师馈赠奖励
-	EndBattleDamage	int32	`csv:"EndBattleDamage"`		//战斗终止伤害量
+var GuildBossCfgLoader map[int32]*GuildBossCfg
+
+type GuildBossCfg struct {
+	Id              int32    `csv:"Id"`              //全局配置id
+	BossType        int32    `csv:"BossType"`        //BOSS类型
+	Challenge       int32    `csv:"Challenge"`       //挑战次数
+	SummonId        int32    `csv:"SummonId"`        //召唤物id
+	SummonLimit     []string `csv:"SummonLimit"`     //开启权限
+	SummonTime      int32    `csv:"SummonTime"`      //BOSS开启时间
+	LifeTime        int32    `csv:"LifeTime"`        //boss存活时间
+	SettlementCd    int32    `csv:"SettlementCd"`    //BOSS结算CD
+	UnlockCond      int32    `csv:"UnlockCond"`      //解锁条件
+	Consume         int32    `csv:"Consume"`         //开启消耗
+	BattleTime      int32    `csv:"BattleTime"`      //挑战时间
+	DamageSegment   int32    `csv:"DamageSegment"`   //伤害档位
+	RewardRange     []string `csv:"RewardRange"`     //奖励区间
+	ReviewAwards    []string `csv:"ReviewAwards"`    //挑战后的可获得奖励预览
+	Reward          []string `csv:"Reward"`          //单局档位结算奖励
+	MasterReward    []string `csv:"MasterReward"`    //大师馈赠奖励
+	EndBattleDamage int32    `csv:"EndBattleDamage"` //战斗终止伤害量
 }
+
 func GuildBossCfgLoad(path string) {
 	cfg := []*GuildBossCfg{}
 	GuildBossCfgLoader = map[int32]*GuildBossCfg{}
-	loadCsvCfg(path + "GuildBossCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"GuildBossCfg.csv", &cfg)
+	for _, row := range cfg {
 		GuildBossCfgLoader[row.Id] = row
 	}
 }
 
-var GuildBossRewardCfgLoader  map[int32]*GuildBossRewardCfg
-type GuildBossRewardCfg struct{
-	Id	int32	`csv:"Id"`		//ID
-	Reward	[]string	`csv:"Reward"`		//结算奖励
-	Note	string	`csv:"Note"`		//备注
+var GuildBossRewardCfgLoader map[int32]*GuildBossRewardCfg
+
+type GuildBossRewardCfg struct {
+	Id     int32    `csv:"Id"`     //ID
+	Reward []string `csv:"Reward"` //结算奖励
+	Note   string   `csv:"Note"`   //备注
 }
+
 func GuildBossRewardCfgLoad(path string) {
 	cfg := []*GuildBossRewardCfg{}
 	GuildBossRewardCfgLoader = map[int32]*GuildBossRewardCfg{}
-	loadCsvCfg(path + "GuildBossRewardCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"GuildBossRewardCfg.csv", &cfg)
+	for _, row := range cfg {
 		GuildBossRewardCfgLoader[row.Id] = row
 	}
 }
 
-var GuildDemonCfgLoader  map[int32]*GuildDemonCfg
-type GuildDemonCfg struct{
-	Id	int32	`csv:"Id"`		//全局配置id
-	BossLvCycle	[]string	`csv:"BossLvCycle"`		//开服天数
-	WeekDay	int32	`csv:"WeekDay"`		//星期几的BOSS
-	BossLevel	int32	`csv:"BossLevel"`		//Boss等级
-	BossLvMax	int32	`csv:"BossLvMax"`		//BOSS等级达到上限
-	FreeChallenge	int32	`csv:"FreeChallenge"`		//免费挑战次数
-	ChallengeTimes	int32	`csv:"ChallengeTimes"`		//挑战次数购买上限
-	ChallengeReward	[]string	`csv:"ChallengeReward"`		//单局结算奖励
-	ChallengePrice	[]string	`csv:"ChallengePrice"`		//挑战次数购买价格
-	SummonId	int32	`csv:"SummonId"`		//召唤物id
-	SummonTime	string	`csv:"SummonTime"`		//BOSS开启时间
-	LifeTime	int32	`csv:"LifeTime"`		//boss存活时间
-	SettlementCd	int32	`csv:"SettlementCd"`		//BOSS结算CD
-	BattleTime	int32	`csv:"BattleTime"`		//挑战时间
-	DamageSegment	string	`csv:"DamageSegment"`		//评分档位所需伤害量
-	DamageReward	[]string	`csv:"DamageReward"`		//宝箱奖励
-	DamageCheck	string	`csv:"DamageCheck"`		//整场伤害上限校验
+var GuildDemonCfgLoader map[int32]*GuildDemonCfg
+
+type GuildDemonCfg struct {
+	Id              int32    `csv:"Id"`              //全局配置id
+	BossLvCycle     []string `csv:"BossLvCycle"`     //开服天数
+	WeekDay         int32    `csv:"WeekDay"`         //星期几的BOSS
+	BossLevel       int32    `csv:"BossLevel"`       //Boss等级
+	BossLvMax       int32    `csv:"BossLvMax"`       //BOSS等级达到上限
+	FreeChallenge   int32    `csv:"FreeChallenge"`   //免费挑战次数
+	ChallengeTimes  int32    `csv:"ChallengeTimes"`  //挑战次数购买上限
+	ChallengeReward []string `csv:"ChallengeReward"` //单局结算奖励
+	ChallengePrice  []string `csv:"ChallengePrice"`  //挑战次数购买价格
+	SummonId        int32    `csv:"SummonId"`        //召唤物id
+	SummonTime      string   `csv:"SummonTime"`      //BOSS开启时间
+	LifeTime        int32    `csv:"LifeTime"`        //boss存活时间
+	SettlementCd    int32    `csv:"SettlementCd"`    //BOSS结算CD
+	BattleTime      int32    `csv:"BattleTime"`      //挑战时间
+	DamageSegment   string   `csv:"DamageSegment"`   //评分档位所需伤害量
+	DamageReward    []string `csv:"DamageReward"`    //宝箱奖励
+	DamageCheck     string   `csv:"DamageCheck"`     //整场伤害上限校验
 }
+
 func GuildDemonCfgLoad(path string) {
 	cfg := []*GuildDemonCfg{}
 	GuildDemonCfgLoader = map[int32]*GuildDemonCfg{}
-	loadCsvCfg(path + "GuildDemonCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"GuildDemonCfg.csv", &cfg)
+	for _, row := range cfg {
 		GuildDemonCfgLoader[row.Id] = row
 	}
 }
 
-var GuildLvCfgLoader  map[int32]*GuildLvCfg
-type GuildLvCfg struct{
-	Id	int32	`csv:"Id"`		//ID
-	ExpRequire	int32	`csv:"ExpRequire"`		//需求经验
-	PeopleLimit	int32	`csv:"PeopleLimit"`		//人数上限
-	ActiveLimit	int32	`csv:"ActiveLimit"`		//公会活跃值上限
-	PeopleAdd	int32	`csv:"PeopleAdd"`		//公会升级成员上限增量
-	ActiveAdd	int32	`csv:"ActiveAdd"`		//公会升级活跃上限增量
+var GuildLvCfgLoader map[int32]*GuildLvCfg
+
+type GuildLvCfg struct {
+	Id          int32 `csv:"Id"`          //ID
+	ExpRequire  int32 `csv:"ExpRequire"`  //需求经验
+	PeopleLimit int32 `csv:"PeopleLimit"` //人数上限
+	ActiveLimit int32 `csv:"ActiveLimit"` //公会活跃值上限
+	PeopleAdd   int32 `csv:"PeopleAdd"`   //公会升级成员上限增量
+	ActiveAdd   int32 `csv:"ActiveAdd"`   //公会升级活跃上限增量
 }
+
 func GuildLvCfgLoad(path string) {
 	cfg := []*GuildLvCfg{}
 	GuildLvCfgLoader = map[int32]*GuildLvCfg{}
-	loadCsvCfg(path + "GuildLvCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"GuildLvCfg.csv", &cfg)
+	for _, row := range cfg {
 		GuildLvCfgLoader[row.Id] = row
 	}
 }
 
-var GuildWarAgainstCfgLoader  map[int32]*GuildWarAgainstCfg
-type GuildWarAgainstCfg struct{
-	Id	int32	`csv:"Id"`		//ID
-	Ranking	int32	`csv:"Ranking"`		//公会战排名
-	DeaconName	string	`csv:"DeaconName"`		//会长奖励文本
-	DeaconReword	[]string	`csv:"DeaconReword"`		//会长奖励
-	GuildsmenName	string	`csv:"GuildsmenName"`		//公会成员奖励文本
-	GuildsmenReword	[]string	`csv:"GuildsmenReword"`		//公会战成员奖励
-	PointMvpName	string	`csv:"PointMvpName"`		//积分MVP奖励文本
-	PointMvp	int32	`csv:"PointMvp"`		//积分MVP
-	PointMvpReword	[]string	`csv:"PointMvpReword"`		//积分MVP奖励
-	KillerMvpName	string	`csv:"KillerMvpName"`		//击杀MVP奖励文本
-	KillerMvp	int32	`csv:"KillerMvp"`		//击杀MVP
-	KillerMvpReword	[]string	`csv:"KillerMvpReword"`		//击杀MVP奖励
+var GuildWarAgainstCfgLoader map[int32]*GuildWarAgainstCfg
+
+type GuildWarAgainstCfg struct {
+	Id              int32    `csv:"Id"`              //ID
+	Ranking         int32    `csv:"Ranking"`         //公会战排名
+	DeaconName      string   `csv:"DeaconName"`      //会长奖励文本
+	DeaconReword    []string `csv:"DeaconReword"`    //会长奖励
+	GuildsmenName   string   `csv:"GuildsmenName"`   //公会成员奖励文本
+	GuildsmenReword []string `csv:"GuildsmenReword"` //公会战成员奖励
+	PointMvpName    string   `csv:"PointMvpName"`    //积分MVP奖励文本
+	PointMvp        int32    `csv:"PointMvp"`        //积分MVP
+	PointMvpReword  []string `csv:"PointMvpReword"`  //积分MVP奖励
+	KillerMvpName   string   `csv:"KillerMvpName"`   //击杀MVP奖励文本
+	KillerMvp       int32    `csv:"KillerMvp"`       //击杀MVP
+	KillerMvpReword []string `csv:"KillerMvpReword"` //击杀MVP奖励
 }
+
 func GuildWarAgainstCfgLoad(path string) {
 	cfg := []*GuildWarAgainstCfg{}
 	GuildWarAgainstCfgLoader = map[int32]*GuildWarAgainstCfg{}
-	loadCsvCfg(path + "GuildWarAgainstCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"GuildWarAgainstCfg.csv", &cfg)
+	for _, row := range cfg {
 		GuildWarAgainstCfgLoader[row.Id] = row
 	}
 }
 
-var GuildWarBuffCfgLoader  map[int32]*GuildWarBuffCfg
-type GuildWarBuffCfg struct{
-	Id	int32	`csv:"Id"`		//公会战buffID
-	SortId	int32	`csv:"SortId"`		//buff排序ID
-	Price	[]string	`csv:"Price"`		//购买价格
-	Mark	int32	`csv:"Mark"`		//对应mark
+var GuildWarBuffCfgLoader map[int32]*GuildWarBuffCfg
+
+type GuildWarBuffCfg struct {
+	Id     int32    `csv:"Id"`     //公会战buffID
+	SortId int32    `csv:"SortId"` //buff排序ID
+	Price  []string `csv:"Price"`  //购买价格
+	Mark   int32    `csv:"Mark"`   //对应mark
 }
+
 func GuildWarBuffCfgLoad(path string) {
 	cfg := []*GuildWarBuffCfg{}
 	GuildWarBuffCfgLoader = map[int32]*GuildWarBuffCfg{}
-	loadCsvCfg(path + "GuildWarBuffCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"GuildWarBuffCfg.csv", &cfg)
+	for _, row := range cfg {
 		GuildWarBuffCfgLoader[row.Id] = row
 	}
 }
 
-var GuildWarDojoCfgLoader  map[int32]*GuildWarDojoCfg
-type GuildWarDojoCfg struct{
-	Id	int32	`csv:"Id"`		//地块编号
-	AreaType	int32	`csv:"AreaType"`		//地块类别
-	GuildWarPoint	int32	`csv:"GuildWarPoint"`		//获得积分
+var GuildWarDojoCfgLoader map[int32]*GuildWarDojoCfg
+
+type GuildWarDojoCfg struct {
+	Id            int32 `csv:"Id"`            //地块编号
+	AreaType      int32 `csv:"AreaType"`      //地块类别
+	GuildWarPoint int32 `csv:"GuildWarPoint"` //获得积分
 }
+
 func GuildWarDojoCfgLoad(path string) {
 	cfg := []*GuildWarDojoCfg{}
 	GuildWarDojoCfgLoader = map[int32]*GuildWarDojoCfg{}
-	loadCsvCfg(path + "GuildWarDojoCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"GuildWarDojoCfg.csv", &cfg)
+	for _, row := range cfg {
 		GuildWarDojoCfgLoader[row.Id] = row
 	}
 }
 
-var HeadFrameCfgLoader  map[int32]*HeadFrameCfg
-type HeadFrameCfg struct{
-	HeadFrameId	int32	`csv:"HeadFrameId"`		//头像框id
-	HeadFrameQuality	[]string	`csv:"HeadFrameQuality"`		//头像框属性
-	HeadFrameSource	[]string	`csv:"HeadFrameSource"`		//头像框来源
-	HeadFrameType	int32	`csv:"HeadFrameType"`		//头像框类型
-	ResolveItem	[]string	`csv:"ResolveItem"`		//分解获得
-	Dec	string	`csv:"Dec"`		//备注
+var HeadFrameCfgLoader map[int32]*HeadFrameCfg
+
+type HeadFrameCfg struct {
+	HeadFrameId      int32    `csv:"HeadFrameId"`      //头像框id
+	HeadFrameQuality []string `csv:"HeadFrameQuality"` //头像框属性
+	HeadFrameSource  []string `csv:"HeadFrameSource"`  //头像框来源
+	HeadFrameType    int32    `csv:"HeadFrameType"`    //头像框类型
+	ResolveItem      []string `csv:"ResolveItem"`      //分解获得
+	Dec              string   `csv:"Dec"`              //备注
 }
+
 func HeadFrameCfgLoad(path string) {
 	cfg := []*HeadFrameCfg{}
 	HeadFrameCfgLoader = map[int32]*HeadFrameCfg{}
-	loadCsvCfg(path + "HeadFrameCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"HeadFrameCfg.csv", &cfg)
+	for _, row := range cfg {
 		HeadFrameCfgLoader[row.HeadFrameId] = row
 	}
 }
 
-var HeadPortraitCfgLoader  map[int32]*HeadPortraitCfg
-type HeadPortraitCfg struct{
-	HeadPortraitId	int32	`csv:"HeadPortraitId"`		//头像ID
-	UnlockCondition	int32	`csv:"UnlockCondition"`		//解锁条件
-	HeadLoadId	int32	`csv:"HeadLoadId"`		//头像加载ID
-	HeadPortraitSex	int32	`csv:"HeadPortraitSex"`		//头像性别
+var HeadPortraitCfgLoader map[int32]*HeadPortraitCfg
+
+type HeadPortraitCfg struct {
+	HeadPortraitId  int32 `csv:"HeadPortraitId"`  //头像ID
+	UnlockCondition int32 `csv:"UnlockCondition"` //解锁条件
+	HeadLoadId      int32 `csv:"HeadLoadId"`      //头像加载ID
+	HeadPortraitSex int32 `csv:"HeadPortraitSex"` //头像性别
 }
+
 func HeadPortraitCfgLoad(path string) {
 	cfg := []*HeadPortraitCfg{}
 	HeadPortraitCfgLoader = map[int32]*HeadPortraitCfg{}
-	loadCsvCfg(path + "HeadPortraitCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"HeadPortraitCfg.csv", &cfg)
+	for _, row := range cfg {
 		HeadPortraitCfgLoader[row.HeadPortraitId] = row
 	}
 }
 
-var HundredDojoCfgLoader  map[int32]*HundredDojoCfg
-type HundredDojoCfg struct{
-	Id	int32	`csv:"Id"`		//地块编号
-	AreaType	int32	`csv:"AreaType"`		//地块类别
-	FunType	int32	`csv:"FunType"`		//功能类型
-	RewardList	[]string	`csv:"RewardList"`		//固定时间间隔资源产出
-	Robot	int32	`csv:"Robot"`		//初始机器人Id
-	TimeProtect	int32	`csv:"TimeProtect"`		//保护时间(分钟)
-	TimeReward	int32	`csv:"TimeReward"`		//占领时间(分钟)
-	ShowRewardList	[]string	`csv:"ShowRewardList"`		//固定时间间隔资源产出
+var HundredDojoCfgLoader map[int32]*HundredDojoCfg
+
+type HundredDojoCfg struct {
+	Id             int32    `csv:"Id"`             //地块编号
+	AreaType       int32    `csv:"AreaType"`       //地块类别
+	FunType        int32    `csv:"FunType"`        //功能类型
+	RewardList     []string `csv:"RewardList"`     //固定时间间隔资源产出
+	Robot          int32    `csv:"Robot"`          //初始机器人Id
+	TimeProtect    int32    `csv:"TimeProtect"`    //保护时间(分钟)
+	TimeReward     int32    `csv:"TimeReward"`     //占领时间(分钟)
+	ShowRewardList []string `csv:"ShowRewardList"` //固定时间间隔资源产出
 }
+
 func HundredDojoCfgLoad(path string) {
 	cfg := []*HundredDojoCfg{}
 	HundredDojoCfgLoader = map[int32]*HundredDojoCfg{}
-	loadCsvCfg(path + "HundredDojoCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"HundredDojoCfg.csv", &cfg)
+	for _, row := range cfg {
 		HundredDojoCfgLoader[row.Id] = row
 	}
 }
 
-var InvitationTaskCfgLoader  map[int32]*InvitationTaskCfg
-type InvitationTaskCfg struct{
-	TaskId	int32	`csv:"TaskId"`		//任务ID
-	TaskCondition	[]string	`csv:"TaskCondition"`		//任务枚举
-	Reward	[]string	`csv:"Reward"`		//任务奖励
-	Desc	string	`csv:"Desc"`		//任务描述
-	CompleteNum	int32	`csv:"CompleteNum"`		//可完成的最大次数
+var InvitationTaskCfgLoader map[int32]*InvitationTaskCfg
+
+type InvitationTaskCfg struct {
+	TaskId        int32    `csv:"TaskId"`        //任务ID
+	TaskCondition []string `csv:"TaskCondition"` //任务枚举
+	Reward        []string `csv:"Reward"`        //任务奖励
+	Desc          string   `csv:"Desc"`          //任务描述
+	CompleteNum   int32    `csv:"CompleteNum"`   //可完成的最大次数
 }
+
 func InvitationTaskCfgLoad(path string) {
 	cfg := []*InvitationTaskCfg{}
 	InvitationTaskCfgLoader = map[int32]*InvitationTaskCfg{}
-	loadCsvCfg(path + "InvitationTaskCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"InvitationTaskCfg.csv", &cfg)
+	for _, row := range cfg {
 		InvitationTaskCfgLoader[row.TaskId] = row
 	}
 }
 
-var ItemCfgLoader  map[int32]*ItemCfg
-type ItemCfg struct{
-	Id	int32	`csv:"Id"`		//id
-	ResType	int32	`csv:"ResType"`		//道具类型
-	Quality	int32	`csv:"Quality"`		//道具品质
-	Composition	int32	`csv:"Composition"`		//叠加数量
-	AutoUse	int32	`csv:"AutoUse"`		//是否自动使用
-	Costitem	[]string	`csv:"Costitem"`		//是否消耗道具
-	NeedLevel	int32	`csv:"NeedLevel"`		//需要等级
-	Bang	int32	`csv:"Bang"`		//是否绑定
-	Job	int32	`csv:"Job"`		//是否分职业
-	ComposeItem	[]string	`csv:"ComposeItem"`		//合成目标
-	Resolve	[]string	`csv:"Resolve"`		//分解目标
-	ItemTime	int32	`csv:"ItemTime"`		//道具时效
-	DebrisShow	int32	`csv:"DebrisShow"`		//碎片展示
-	SourceFun	[]string	`csv:"SourceFun"`		//获取途径
-	NatureType	int32	`csv:"NatureType"`		//属性
-	ActivationItem	int32	`csv:"ActivationItem"`		//对应藏品
-	ItemTimeCd	int32	`csv:"ItemTimeCd"`		//道具使用所需时间
+var ItemCfgLoader map[int32]*ItemCfg
+
+type ItemCfg struct {
+	Id             int32    `csv:"Id"`             //id
+	ResType        int32    `csv:"ResType"`        //道具类型
+	Quality        int32    `csv:"Quality"`        //道具品质
+	Composition    int32    `csv:"Composition"`    //叠加数量
+	AutoUse        int32    `csv:"AutoUse"`        //是否自动使用
+	Costitem       []string `csv:"Costitem"`       //是否消耗道具
+	NeedLevel      int32    `csv:"NeedLevel"`      //需要等级
+	Bang           int32    `csv:"Bang"`           //是否绑定
+	Job            int32    `csv:"Job"`            //是否分职业
+	ComposeItem    []string `csv:"ComposeItem"`    //合成目标
+	Resolve        []string `csv:"Resolve"`        //分解目标
+	ItemTime       int32    `csv:"ItemTime"`       //道具时效
+	DebrisShow     int32    `csv:"DebrisShow"`     //碎片展示
+	SourceFun      []string `csv:"SourceFun"`      //获取途径
+	NatureType     int32    `csv:"NatureType"`     //属性
+	ActivationItem int32    `csv:"ActivationItem"` //对应藏品
+	ItemTimeCd     int32    `csv:"ItemTimeCd"`     //道具使用所需时间
 }
+
 func ItemCfgLoad(path string) {
 	cfg := []*ItemCfg{}
 	ItemCfgLoader = map[int32]*ItemCfg{}
-	loadCsvCfg(path + "ItemCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ItemCfg.csv", &cfg)
+	for _, row := range cfg {
 		ItemCfgLoader[row.Id] = row
 	}
 }
 
-var JobCfgLoader  map[int32]*JobCfg
-type JobCfg struct{
-	Id	int32	`csv:"Id"`		//职业ID
-	JobName	string	`csv:"JobName"`		//职业名字
-	Position	int32	`csv:"Position"`		//站位
-	JobType	int32	`csv:"JobType"`		//职业类型
-	JobBranch	int32	`csv:"JobBranch"`		//职业分支
-	JobStage	int32	`csv:"JobStage"`		//职业阶段
-	MaxJobLv	int32	`csv:"MaxJobLv"`		//职业等级上限
-	BeforeJobId	int32	`csv:"BeforeJobId"`		//上阶职业
-	AfterJobId	[]string	`csv:"AfterJobId"`		//下阶职业
-	ChangeCond	[]string	`csv:"ChangeCond"`		//转职条件
-	ItemCost	[]string	`csv:"ItemCost"`		//消耗道具
-	Again	int32	`csv:"Again"`		//转生
-	UpBaseLV	int32	`csv:"UpBaseLV"`		//转职人物等级
-	UpJobLv	int32	`csv:"UpJobLv"`		//转职职业等级
-	Bag	int32	`csv:"Bag"`		//装备背包格子
-	HpRate	int32	`csv:"HpRate"`		//生命系数
-	SpRate	int32	`csv:"SpRate"`		//蓝量系数
-	AtkRate	int32	`csv:"AtkRate"`		//物攻系数
-	MatkRate	int32	`csv:"MatkRate"`		//魔攻系数
-	DefRate	int32	`csv:"DefRate"`		//物防系数
-	MdefRate	int32	`csv:"MdefRate"`		//魔防系数
-	HitRate	int32	`csv:"HitRate"`		//命中系数
-	DodgeRate	int32	`csv:"DodgeRate"`		//闪避系数
-	CritRate	int32	`csv:"CritRate"`		//暴击系数
-	TenRate	int32	`csv:"TenRate"`		//韧性系数
-	Aspd	int32	`csv:"Aspd"`		//攻速
-	ArmsType	int32	`csv:"ArmsType"`		//职业武器类型
-	NormalSkillIds	[]string	`csv:"NormalSkillIds"`		//普攻技能id
-	SkillIds	[]string	`csv:"SkillIds"`		//默认技能id
-	NatureId	int32	`csv:"NatureId"`		//属性id
-	RaceId	int32	`csv:"RaceId"`		//种族id
-	AutoAddPoint	[]string	`csv:"AutoAddPoint"`		//自动加点
-	AlternativeSkills	[]string	`csv:"AlternativeSkills"`		//备用技能id
+var JobCfgLoader map[int32]*JobCfg
+
+type JobCfg struct {
+	Id                int32    `csv:"Id"`                //职业ID
+	JobName           string   `csv:"JobName"`           //职业名字
+	Position          int32    `csv:"Position"`          //站位
+	JobType           int32    `csv:"JobType"`           //职业类型
+	JobBranch         int32    `csv:"JobBranch"`         //职业分支
+	JobStage          int32    `csv:"JobStage"`          //职业阶段
+	MaxJobLv          int32    `csv:"MaxJobLv"`          //职业等级上限
+	BeforeJobId       int32    `csv:"BeforeJobId"`       //上阶职业
+	AfterJobId        []string `csv:"AfterJobId"`        //下阶职业
+	ChangeCond        []string `csv:"ChangeCond"`        //转职条件
+	ItemCost          []string `csv:"ItemCost"`          //消耗道具
+	Again             int32    `csv:"Again"`             //转生
+	UpBaseLV          int32    `csv:"UpBaseLV"`          //转职人物等级
+	UpJobLv           int32    `csv:"UpJobLv"`           //转职职业等级
+	Bag               int32    `csv:"Bag"`               //装备背包格子
+	HpRate            int32    `csv:"HpRate"`            //生命系数
+	SpRate            int32    `csv:"SpRate"`            //蓝量系数
+	AtkRate           int32    `csv:"AtkRate"`           //物攻系数
+	MatkRate          int32    `csv:"MatkRate"`          //魔攻系数
+	DefRate           int32    `csv:"DefRate"`           //物防系数
+	MdefRate          int32    `csv:"MdefRate"`          //魔防系数
+	HitRate           int32    `csv:"HitRate"`           //命中系数
+	DodgeRate         int32    `csv:"DodgeRate"`         //闪避系数
+	CritRate          int32    `csv:"CritRate"`          //暴击系数
+	TenRate           int32    `csv:"TenRate"`           //韧性系数
+	Aspd              int32    `csv:"Aspd"`              //攻速
+	ArmsType          int32    `csv:"ArmsType"`          //职业武器类型
+	NormalSkillIds    []string `csv:"NormalSkillIds"`    //普攻技能id
+	SkillIds          []string `csv:"SkillIds"`          //默认技能id
+	NatureId          int32    `csv:"NatureId"`          //属性id
+	RaceId            int32    `csv:"RaceId"`            //种族id
+	AutoAddPoint      []string `csv:"AutoAddPoint"`      //自动加点
+	AlternativeSkills []string `csv:"AlternativeSkills"` //备用技能id
 }
+
 func JobCfgLoad(path string) {
 	cfg := []*JobCfg{}
 	JobCfgLoader = map[int32]*JobCfg{}
-	loadCsvCfg(path + "JobCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"JobCfg.csv", &cfg)
+	for _, row := range cfg {
 		JobCfgLoader[row.Id] = row
 	}
 }
 
-var JobExpCfgLoader  map[int32]*JobExpCfg
-type JobExpCfg struct{
-	JobLevel	int32	`csv:"jobLevel"`		//job等级
-	ExpRequire1	int32	`csv:"expRequire1"`		//未转身所需经验
-	Point1	int32	`csv:"point1"`		//1转升级点
-	ExpRequire2	int32	`csv:"expRequire2"`		//1转所需经验
-	Point2	int32	`csv:"point2"`		//2转升级点
-	ExpRequire3	int32	`csv:"expRequire3"`		//3转所需经验
-	Point3	int32	`csv:"point3"`		//3转升级点
+var JobExpCfgLoader map[int32]*JobExpCfg
+
+type JobExpCfg struct {
+	JobLevel    int32 `csv:"jobLevel"`    //job等级
+	ExpRequire1 int32 `csv:"expRequire1"` //未转身所需经验
+	Point1      int32 `csv:"point1"`      //1转升级点
+	ExpRequire2 int32 `csv:"expRequire2"` //1转所需经验
+	Point2      int32 `csv:"point2"`      //2转升级点
+	ExpRequire3 int32 `csv:"expRequire3"` //3转所需经验
+	Point3      int32 `csv:"point3"`      //3转升级点
 }
+
 func JobExpCfgLoad(path string) {
 	cfg := []*JobExpCfg{}
 	JobExpCfgLoader = map[int32]*JobExpCfg{}
-	loadCsvCfg(path + "JobExpCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"JobExpCfg.csv", &cfg)
+	for _, row := range cfg {
 		JobExpCfgLoader[row.JobLevel] = row
 	}
 }
 
-var KeepSakeCfgLoader  map[int32]*KeepSakeCfg
-type KeepSakeCfg struct{
-	Id	int32	`csv:"Id"`		//藏品Id
-	CollectionLevel	int32	`csv:"CollectionLevel"`		//藏品等级
-	MaterialMaxLevel	int32	`csv:"MaterialMaxLevel"`		//最大合成等级
-	MaterialLevel1	[]string	`csv:"MaterialLevel1"`		//合成阶段1
-	MaterialLevel2	[]string	`csv:"MaterialLevel2"`		//合成阶段2
-	MaterialLevel3	[]string	`csv:"MaterialLevel3"`		//合成阶段3
-	MaterialLevel4	[]string	`csv:"MaterialLevel4"`		//合成阶段4
-	MaterialLevel5	[]string	`csv:"MaterialLevel5"`		//合成阶段5
-	AddAttrLevel1	[]string	`csv:"AddAttrLevel1"`		//增加属性1
-	AddAttrLevel2	[]string	`csv:"AddAttrLevel2"`		//增加属性2
-	AddAttrLevel3	[]string	`csv:"AddAttrLevel3"`		//增加属性3
-	AddAttrLevel4	[]string	`csv:"AddAttrLevel4"`		//增加属性4
-	AddAttrLevel5	[]string	`csv:"AddAttrLevel5"`		//增加属性5
-	Job	[]string	`csv:"Job"`		//加成职业
+var KeepSakeCfgLoader map[int32]*KeepSakeCfg
+
+type KeepSakeCfg struct {
+	Id               int32    `csv:"Id"`               //藏品Id
+	CollectionLevel  int32    `csv:"CollectionLevel"`  //藏品等级
+	MaterialMaxLevel int32    `csv:"MaterialMaxLevel"` //最大合成等级
+	MaterialLevel1   []string `csv:"MaterialLevel1"`   //合成阶段1
+	MaterialLevel2   []string `csv:"MaterialLevel2"`   //合成阶段2
+	MaterialLevel3   []string `csv:"MaterialLevel3"`   //合成阶段3
+	MaterialLevel4   []string `csv:"MaterialLevel4"`   //合成阶段4
+	MaterialLevel5   []string `csv:"MaterialLevel5"`   //合成阶段5
+	AddAttrLevel1    []string `csv:"AddAttrLevel1"`    //增加属性1
+	AddAttrLevel2    []string `csv:"AddAttrLevel2"`    //增加属性2
+	AddAttrLevel3    []string `csv:"AddAttrLevel3"`    //增加属性3
+	AddAttrLevel4    []string `csv:"AddAttrLevel4"`    //增加属性4
+	AddAttrLevel5    []string `csv:"AddAttrLevel5"`    //增加属性5
+	Job              []string `csv:"Job"`              //加成职业
 }
+
 func KeepSakeCfgLoad(path string) {
 	cfg := []*KeepSakeCfg{}
 	KeepSakeCfgLoader = map[int32]*KeepSakeCfg{}
-	loadCsvCfg(path + "KeepSakeCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"KeepSakeCfg.csv", &cfg)
+	for _, row := range cfg {
 		KeepSakeCfgLoader[row.Id] = row
 	}
 }
 
-var LevelCfgLoader  map[int32]*LevelCfg
-type LevelCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	LevelId	int32	`csv:"LevelId"`		//场景id
-	MapId	int32	`csv:"MapId"`		//地图id
-	LevelType	int32	`csv:"LevelType"`		//场景类型
-	FightCD	int32	`csv:"FightCD"`		//挑战CD
-	BaseExpOl	int32	`csv:"BaseExpOl"`		//在线base经验
-	ParterOl	int32	`csv:"ParterOl"`		//在线伙伴经验
-	ZenyOl	int32	`csv:"ZenyOl"`		//在线银币
-	CruiseOl	int32	`csv:"CruiseOl"`		//技能经验
-	GoldOl	int32	`csv:"GoldOl"`		//在线金币
-	EvilOl	int32	`csv:"EvilOl"`		//在线魔魂值
-	DropOl	[]string	`csv:"DropOl"`		//在线掉落包ID
-	HdDrop	[]string	`csv:"HdDrop"`		//活动掉落ID
-	BaseExp	int32	`csv:"BaseExp"`		//通关base经验
-	JobExp	int32	`csv:"JobExp"`		//通关job经验
-	Zeny	int32	`csv:"Zeny"`		//通关银币
-	Gold	int32	`csv:"Gold"`		//通关金币
-	Parter	int32	`csv:"Parter"`		//通关伙伴经验
-	Cash	int32	`csv:"Cash"`		//活动通关现金
-	PassNum	int32	`csv:"PassNum"`		//通关超过人数
-	GuildActive	int32	`csv:"GuildActive"`		//通关公会活跃
-	Drop	[]string	`csv:"Drop"`		//通关掉落包ID
-	BossId	int32	`csv:"BossId"`		//bossId
-	DropTimes	int32	`csv:"DropTimes"`		//挑战后掉落次数
-	FightLv	int32	`csv:"FightLv"`		//BOSS挑战等级
-	DlgId	int32	`csv:"DlgId"`		//巡游前剧情ID
-	DlgContentId	int32	`csv:"DlgContentId"`		//剧情索引ID
-	FightCheck	int32	`csv:"FightCheck"`		//战力校验
-	SpAddition	string	`csv:"SpAddition"`		//蓝量加成
-	PowerWeaken	string	`csv:"PowerWeaken"`		//战力削弱
-	StayTimeWeaken	string	`csv:"StayTimeWeaken"`		//停留时间削弱
-	Version	int32	`csv:"version"`		//版本
-	MapScore	int32	`csv:"MapScore"`		//里程积分
-	CloseDown	string	`csv:"CloseDown"`		//查封配置
-	FreeInvest	int32	`csv:"FreeInvest"`		//通关免费充值额度
+var LevelCfgLoader map[int32]*LevelCfg
+
+type LevelCfg struct {
+	Id             int32    `csv:"Id"`             //唯一id
+	LevelId        int32    `csv:"LevelId"`        //场景id
+	MapId          int32    `csv:"MapId"`          //地图id
+	LevelType      int32    `csv:"LevelType"`      //场景类型
+	FightCD        int32    `csv:"FightCD"`        //挑战CD
+	BaseExpOl      int32    `csv:"BaseExpOl"`      //在线base经验
+	ParterOl       int32    `csv:"ParterOl"`       //在线伙伴经验
+	ZenyOl         int32    `csv:"ZenyOl"`         //在线银币
+	CruiseOl       int32    `csv:"CruiseOl"`       //技能经验
+	GoldOl         int32    `csv:"GoldOl"`         //在线金币
+	EvilOl         int32    `csv:"EvilOl"`         //在线魔魂值
+	DropOl         []string `csv:"DropOl"`         //在线掉落包ID
+	HdDrop         []string `csv:"HdDrop"`         //活动掉落ID
+	BaseExp        int32    `csv:"BaseExp"`        //通关base经验
+	JobExp         int32    `csv:"JobExp"`         //通关job经验
+	Zeny           int32    `csv:"Zeny"`           //通关银币
+	Gold           int32    `csv:"Gold"`           //通关金币
+	Parter         int32    `csv:"Parter"`         //通关伙伴经验
+	Cash           int32    `csv:"Cash"`           //活动通关现金
+	PassNum        int32    `csv:"PassNum"`        //通关超过人数
+	GuildActive    int32    `csv:"GuildActive"`    //通关公会活跃
+	Drop           []string `csv:"Drop"`           //通关掉落包ID
+	BossId         int32    `csv:"BossId"`         //bossId
+	DropTimes      int32    `csv:"DropTimes"`      //挑战后掉落次数
+	FightLv        int32    `csv:"FightLv"`        //BOSS挑战等级
+	DlgId          int32    `csv:"DlgId"`          //巡游前剧情ID
+	DlgContentId   int32    `csv:"DlgContentId"`   //剧情索引ID
+	FightCheck     int32    `csv:"FightCheck"`     //战力校验
+	SpAddition     string   `csv:"SpAddition"`     //蓝量加成
+	PowerWeaken    string   `csv:"PowerWeaken"`    //战力削弱
+	StayTimeWeaken string   `csv:"StayTimeWeaken"` //停留时间削弱
+	Version        int32    `csv:"version"`        //版本
+	MapScore       int32    `csv:"MapScore"`       //里程积分
+	CloseDown      string   `csv:"CloseDown"`      //查封配置
+	FreeInvest     int32    `csv:"FreeInvest"`     //通关免费充值额度
 }
+
 func LevelCfgLoad(path string) {
 	cfg := []*LevelCfg{}
 	LevelCfgLoader = map[int32]*LevelCfg{}
-	loadCsvCfg(path + "LevelCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"LevelCfg.csv", &cfg)
+	for _, row := range cfg {
 		LevelCfgLoader[row.Id] = row
 	}
 }
 
-var LineMissionCfgLoader  map[int32]*LineMissionCfg
-type LineMissionCfg struct{
-	MissionID	int32	`csv:"MissionID"`		//任务ID
-	MissionCondition	[]string	`csv:"MissionCondition"`		//任务枚举
-	Reward	[]string	`csv:"Reward"`		//奖励
-	BeginMission	int32	`csv:"BeginMission"`		//是否为开始任务
-	FollowMissionld	int32	`csv:"FollowMissionld"`		//后续ID
+var LineMissionCfgLoader map[int32]*LineMissionCfg
+
+type LineMissionCfg struct {
+	MissionID        int32    `csv:"MissionID"`        //任务ID
+	MissionCondition []string `csv:"MissionCondition"` //任务枚举
+	Reward           []string `csv:"Reward"`           //奖励
+	BeginMission     int32    `csv:"BeginMission"`     //是否为开始任务
+	FollowMissionld  int32    `csv:"FollowMissionld"`  //后续ID
 }
+
 func LineMissionCfgLoad(path string) {
 	cfg := []*LineMissionCfg{}
 	LineMissionCfgLoader = map[int32]*LineMissionCfg{}
-	loadCsvCfg(path + "LineMissionCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"LineMissionCfg.csv", &cfg)
+	for _, row := range cfg {
 		LineMissionCfgLoader[row.MissionID] = row
 	}
 }
 
-var MailCfgLoader  map[int32]*MailCfg
-type MailCfg struct{
-	Id	int32	`csv:"Id"`		//id
-	Title	string	`csv:"Title"`		//主题
-	Text	string	`csv:"Text"`		//正文
-	Time	int32	`csv:"Time"`		//有效期
+var MailCfgLoader map[int32]*MailCfg
+
+type MailCfg struct {
+	Id    int32  `csv:"Id"`    //id
+	Title string `csv:"Title"` //主题
+	Text  string `csv:"Text"`  //正文
+	Time  int32  `csv:"Time"`  //有效期
 }
+
 func MailCfgLoad(path string) {
 	cfg := []*MailCfg{}
 	MailCfgLoader = map[int32]*MailCfg{}
-	loadCsvCfg(path + "MailCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"MailCfg.csv", &cfg)
+	for _, row := range cfg {
 		MailCfgLoader[row.Id] = row
 	}
 }
 
-var MissionCfgLoader  map[int32]*MissionCfg
-type MissionCfg struct{
-	MissionID	int32	`csv:"MissionID"`		//任务ID
-	MissionCondition	[]string	`csv:"MissionCondition"`		//任务枚举
-	MissionType	int32	`csv:"MissionType"`		//任务类型
-	Active	int32	`csv:"Active"`		//活跃度
-	GuildActive	int32	`csv:"GuildActive"`		//公会个人活跃值
-	RenovateTime	int32	`csv:"RenovateTime"`		//刷新时间
+var MissionCfgLoader map[int32]*MissionCfg
+
+type MissionCfg struct {
+	MissionID        int32    `csv:"MissionID"`        //任务ID
+	MissionCondition []string `csv:"MissionCondition"` //任务枚举
+	MissionType      int32    `csv:"MissionType"`      //任务类型
+	Active           int32    `csv:"Active"`           //活跃度
+	GuildActive      int32    `csv:"GuildActive"`      //公会个人活跃值
+	RenovateTime     int32    `csv:"RenovateTime"`     //刷新时间
 }
+
 func MissionCfgLoad(path string) {
 	cfg := []*MissionCfg{}
 	MissionCfgLoader = map[int32]*MissionCfg{}
-	loadCsvCfg(path + "MissionCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"MissionCfg.csv", &cfg)
+	for _, row := range cfg {
 		MissionCfgLoader[row.MissionID] = row
 	}
 }
 
-var NatureCfgLoader  map[int32]*NatureCfg
-type NatureCfg struct{
-	Id	int32	`csv:"Id"`		//属性id
-	Name	string	`csv:"Name"`		//属性名字
-	NatureAttribute	string	`csv:"NatureAttribute"`		//附加元素属性
-	AntiNature	string	`csv:"AntiNature"`		//承受属性伤害系数
+var NatureCfgLoader map[int32]*NatureCfg
+
+type NatureCfg struct {
+	Id              int32  `csv:"Id"`              //属性id
+	Name            string `csv:"Name"`            //属性名字
+	NatureAttribute string `csv:"NatureAttribute"` //附加元素属性
+	AntiNature      string `csv:"AntiNature"`      //承受属性伤害系数
 }
+
 func NatureCfgLoad(path string) {
 	cfg := []*NatureCfg{}
 	NatureCfgLoader = map[int32]*NatureCfg{}
-	loadCsvCfg(path + "NatureCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"NatureCfg.csv", &cfg)
+	for _, row := range cfg {
 		NatureCfgLoader[row.Id] = row
 	}
 }
 
-var NpcCfgLoader  map[int32]*NpcCfg
-type NpcCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	MonsterId	int32	`csv:"MonsterId"`		//怪物id
-	BaseLv	int32	`csv:"BaseLv"`		//角色等级
-	JobType	int32	`csv:"JobType"`		//怪物职业
-	NpcType	int32	`csv:"NpcType"`		//职业类型
-	Hp	float32	`csv:"Hp"`		//生命
-	Sp	float32	`csv:"Sp"`		//蓝量
-	SkillIds	[]string	`csv:"SkillIds"`		//技能id
-	NatureId	int32	`csv:"NatureId"`		//属性id
-	PassiveSkills	[]string	`csv:"PassiveSkills"`		//被动技能
-	EngName	string	`csv:"EngName"`		//英语唯一名
+var NpcCfgLoader map[int32]*NpcCfg
+
+type NpcCfg struct {
+	Id            int32    `csv:"Id"`            //唯一id
+	MonsterId     int32    `csv:"MonsterId"`     //怪物id
+	BaseLv        int32    `csv:"BaseLv"`        //角色等级
+	JobType       int32    `csv:"JobType"`       //怪物职业
+	NpcType       int32    `csv:"NpcType"`       //职业类型
+	Hp            float32  `csv:"Hp"`            //生命
+	Sp            float32  `csv:"Sp"`            //蓝量
+	SkillIds      []string `csv:"SkillIds"`      //技能id
+	NatureId      int32    `csv:"NatureId"`      //属性id
+	PassiveSkills []string `csv:"PassiveSkills"` //被动技能
+	EngName       string   `csv:"EngName"`       //英语唯一名
 }
+
 func NpcCfgLoad(path string) {
 	cfg := []*NpcCfg{}
 	NpcCfgLoader = map[int32]*NpcCfg{}
-	loadCsvCfg(path + "NpcCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"NpcCfg.csv", &cfg)
+	for _, row := range cfg {
 		NpcCfgLoader[row.Id] = row
 	}
 }
 
-var OnlineRewardsCfgLoader  map[int32]*OnlineRewardsCfg
-type OnlineRewardsCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	Day	int32	`csv:"Day"`		//天数
-	Time	int32	`csv:"Time"`		//在线时长
-	Rewards	[]string	`csv:"Rewards"`		//奖励
-	SpeedUp	int32	`csv:"SpeedUp"`		//金币加速
+var OnlineRewardsCfgLoader map[int32]*OnlineRewardsCfg
+
+type OnlineRewardsCfg struct {
+	Id      int32    `csv:"Id"`      //唯一id
+	Day     int32    `csv:"Day"`     //天数
+	Time    int32    `csv:"Time"`    //在线时长
+	Rewards []string `csv:"Rewards"` //奖励
+	SpeedUp int32    `csv:"SpeedUp"` //金币加速
 }
+
 func OnlineRewardsCfgLoad(path string) {
 	cfg := []*OnlineRewardsCfg{}
 	OnlineRewardsCfgLoader = map[int32]*OnlineRewardsCfg{}
-	loadCsvCfg(path + "OnlineRewardsCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"OnlineRewardsCfg.csv", &cfg)
+	for _, row := range cfg {
 		OnlineRewardsCfgLoader[row.Id] = row
 	}
 }
 
-var ParterAttributeCfgLoader  map[int32]*ParterAttributeCfg
-type ParterAttributeCfg struct{
-	BaseLv	int32	`csv:"BaseLv"`		//伙伴等级
-	Exp	int32	`csv:"Exp"`		//需求经验
-	Money	int32	`csv:"Money"`		//伙伴升级费用
-	GetPoint	int32	`csv:"GetPoint"`		//获得点数
+var ParterAttributeCfgLoader map[int32]*ParterAttributeCfg
+
+type ParterAttributeCfg struct {
+	BaseLv   int32 `csv:"BaseLv"`   //伙伴等级
+	Exp      int32 `csv:"Exp"`      //需求经验
+	Money    int32 `csv:"Money"`    //伙伴升级费用
+	GetPoint int32 `csv:"GetPoint"` //获得点数
 }
+
 func ParterAttributeCfgLoad(path string) {
 	cfg := []*ParterAttributeCfg{}
 	ParterAttributeCfgLoader = map[int32]*ParterAttributeCfg{}
-	loadCsvCfg(path + "ParterAttributeCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ParterAttributeCfg.csv", &cfg)
+	for _, row := range cfg {
 		ParterAttributeCfgLoader[row.BaseLv] = row
 	}
 }
 
-var ParterCfgLoader  map[int32]*ParterCfg
-type ParterCfg struct{
-	ParterId	int32	`csv:"ParterId"`		//佣兵ID
-	Desc	string	`csv:"Desc"`		//描述
-	JobName	string	`csv:"JobName"`		//职业名字
-	JobIcon	string	`csv:"JobIcon"`		//职业图标
-	JobType	int32	`csv:"JobType"`		//职业类型
-	JobStage	int32	`csv:"JobStage"`		//职业阶段
-	JobBranch	int32	`csv:"JobBranch"`		//职业分支
-	AvatarId	int32	`csv:"AvatarId"`		//模型id
-	NatureId	int32	`csv:"NatureId"`		//属性id
-	RaceId	int32	`csv:"RaceId"`		//种族id
-	HeadId	string	`csv:"HeadId"`		//头像id
-	Avatar	string	`csv:"Avatar"`		//纸娃娃
-	AvatarGray	string	`csv:"AvatarGray"`		//纸娃娃简影
-	JobIcon2	string	`csv:"JobIcon2"`		//职业图标2
-	PostId	int32	`csv:"PostId"`		//显示顺位
-	Position	int32	`csv:"Position"`		//站位
-	Hp	int32	`csv:"Hp"`		//初始生命
-	Sp	int32	`csv:"Sp"`		//初始蓝量
-	Atk	int32	`csv:"Atk"`		//初始物攻
-	Matk	int32	`csv:"Matk"`		//初始魔攻
-	Def	int32	`csv:"Def"`		//初始物防
-	Mdef	int32	`csv:"Mdef"`		//初始魔防
-	Hit	int32	`csv:"Hit"`		//初始命中
-	Dodge	int32	`csv:"Dodge"`		//初始闪避
-	Crit	int32	`csv:"Crit"`		//初始暴击
-	Ten	int32	`csv:"Ten"`		//初始韧性
-	StrRate	int32	`csv:"StrRate"`		//STR成长率
-	IntRate	int32	`csv:"IntRate"`		//INT成长率
-	AgiRate	int32	`csv:"AgiRate"`		//AGI成长率
-	DexRate	int32	`csv:"DexRate"`		//DEX成长率
-	LucRate	int32	`csv:"LucRate"`		//LUC成长率
-	ViteRate	int32	`csv:"ViteRate"`		//VIT成长率
-	Aspd	int32	`csv:"Aspd"`		//攻速
-	NormalSkillIds	[]string	`csv:"NormalSkillIds"`		//普攻技能id
-	SkillIds	[]string	`csv:"SkillIds"`		//默认技能id
-	Chip	string	`csv:"Chip"`		//重复分解
-	InitialSkill	int32	`csv:"InitialSkill"`		//初始技能id
-	BeforeJobId	int32	`csv:"BeforeJobId"`		//上阶职业
-	AfterJobId	[]string	`csv:"AfterJobId"`		//下阶职业
-	ChangeCond	[]string	`csv:"ChangeCond"`		//转职条件
-	ItemCost	[]string	`csv:"ItemCost"`		//消耗道具
-	InitFightPower	int32	`csv:"InitFightPower"`		//初始战力
-	AlternativeSkills	[]string	`csv:"AlternativeSkills"`		//备用技能id
-	ParterJob	int32	`csv:"ParterJob"`		//伙伴转职索引
-	AddPoint	[]string	`csv:"AddPoint"`		//推荐加点比例
+var ParterCfgLoader map[int32]*ParterCfg
+
+type ParterCfg struct {
+	ParterId          int32    `csv:"ParterId"`          //佣兵ID
+	Desc              string   `csv:"Desc"`              //描述
+	JobName           string   `csv:"JobName"`           //职业名字
+	JobIcon           string   `csv:"JobIcon"`           //职业图标
+	JobType           int32    `csv:"JobType"`           //职业类型
+	JobStage          int32    `csv:"JobStage"`          //职业阶段
+	JobBranch         int32    `csv:"JobBranch"`         //职业分支
+	AvatarId          int32    `csv:"AvatarId"`          //模型id
+	NatureId          int32    `csv:"NatureId"`          //属性id
+	RaceId            int32    `csv:"RaceId"`            //种族id
+	HeadId            string   `csv:"HeadId"`            //头像id
+	Avatar            string   `csv:"Avatar"`            //纸娃娃
+	AvatarGray        string   `csv:"AvatarGray"`        //纸娃娃简影
+	JobIcon2          string   `csv:"JobIcon2"`          //职业图标2
+	PostId            int32    `csv:"PostId"`            //显示顺位
+	Position          int32    `csv:"Position"`          //站位
+	Hp                int32    `csv:"Hp"`                //初始生命
+	Sp                int32    `csv:"Sp"`                //初始蓝量
+	Atk               int32    `csv:"Atk"`               //初始物攻
+	Matk              int32    `csv:"Matk"`              //初始魔攻
+	Def               int32    `csv:"Def"`               //初始物防
+	Mdef              int32    `csv:"Mdef"`              //初始魔防
+	Hit               int32    `csv:"Hit"`               //初始命中
+	Dodge             int32    `csv:"Dodge"`             //初始闪避
+	Crit              int32    `csv:"Crit"`              //初始暴击
+	Ten               int32    `csv:"Ten"`               //初始韧性
+	StrRate           int32    `csv:"StrRate"`           //STR成长率
+	IntRate           int32    `csv:"IntRate"`           //INT成长率
+	AgiRate           int32    `csv:"AgiRate"`           //AGI成长率
+	DexRate           int32    `csv:"DexRate"`           //DEX成长率
+	LucRate           int32    `csv:"LucRate"`           //LUC成长率
+	ViteRate          int32    `csv:"ViteRate"`          //VIT成长率
+	Aspd              int32    `csv:"Aspd"`              //攻速
+	NormalSkillIds    []string `csv:"NormalSkillIds"`    //普攻技能id
+	SkillIds          []string `csv:"SkillIds"`          //默认技能id
+	Chip              string   `csv:"Chip"`              //重复分解
+	InitialSkill      int32    `csv:"InitialSkill"`      //初始技能id
+	BeforeJobId       int32    `csv:"BeforeJobId"`       //上阶职业
+	AfterJobId        []string `csv:"AfterJobId"`        //下阶职业
+	ChangeCond        []string `csv:"ChangeCond"`        //转职条件
+	ItemCost          []string `csv:"ItemCost"`          //消耗道具
+	InitFightPower    int32    `csv:"InitFightPower"`    //初始战力
+	AlternativeSkills []string `csv:"AlternativeSkills"` //备用技能id
+	ParterJob         int32    `csv:"ParterJob"`         //伙伴转职索引
+	AddPoint          []string `csv:"AddPoint"`          //推荐加点比例
 }
+
 func ParterCfgLoad(path string) {
 	cfg := []*ParterCfg{}
 	ParterCfgLoader = map[int32]*ParterCfg{}
-	loadCsvCfg(path + "ParterCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ParterCfg.csv", &cfg)
+	for _, row := range cfg {
 		ParterCfgLoader[row.ParterId] = row
 	}
 }
 
-var ParterProgressCfgLoader  map[int32]*ParterProgressCfg
-type ParterProgressCfg struct{
-	Id	int32	`csv:"Id"`		//佣兵ID
-	Times	int32	`csv:"Times"`		//进阶上限(次)
-	CostMoney	[]string	`csv:"CostMoney"`		//消耗银币
-	CostStone	[]string	`csv:"CostStone"`		//消耗天使之泪
-	AddLv	[]string	`csv:"AddLv"`		//提高等级上限
-	Attribute1	[]string	`csv:"Attribute1"`		//进阶1增加属性
-	Attribute2	[]string	`csv:"Attribute2"`		//进阶2增加属性
-	Attribute3	[]string	`csv:"Attribute3"`		//进阶3增加属性
-	Attribute4	[]string	`csv:"Attribute4"`		//进阶4增加属性
-	Attribute5	[]string	`csv:"Attribute5"`		//进阶5增加属性
-	Attribute6	[]string	`csv:"Attribute6"`		//进阶6增加属性
-	Attribute7	[]string	`csv:"Attribute7"`		//进阶7增加属性
-	Attribute8	[]string	`csv:"Attribute8"`		//进阶8增加属性
-	Attribute9	[]string	`csv:"Attribute9"`		//进阶9增加属性
-	Attribute10	[]string	`csv:"Attribute10"`		//进阶10增加属性
-	Attribute11	[]string	`csv:"Attribute11"`		//进阶11增加属性
-	Attribute12	[]string	`csv:"Attribute12"`		//进阶12增加属性
-	Attribute13	[]string	`csv:"Attribute13"`		//进阶13增加属性
-	Attribute14	[]string	`csv:"Attribute14"`		//进阶14增加属性
-	Attribute15	[]string	`csv:"Attribute15"`		//进阶15增加属性
-	BreachTimes	int32	`csv:"BreachTimes"`		//伙伴突破次数
-	BreachAddLv	[]string	`csv:"BreachAddLv"`		//突破获得等级
-	BreachMoney	[]string	`csv:"BreachMoney"`		//突破银币
-	BreachCost	[]string	`csv:"BreachCost"`		//突破材料
-	BreachAttribute1	[]string	`csv:"BreachAttribute1"`		//突破1增加属性
-	BreachAttribute2	[]string	`csv:"BreachAttribute2"`		//突破2增加属性
-	BreachAttribute3	[]string	`csv:"BreachAttribute3"`		//突破3增加属性
-	BreachAttribute4	[]string	`csv:"BreachAttribute4"`		//突破4增加属性
-	BreachAttribute5	[]string	`csv:"BreachAttribute5"`		//突破5增加属性
-	BreachAttribute6	[]string	`csv:"BreachAttribute6"`		//突破6增加属性
-	BreachAttribute7	[]string	`csv:"BreachAttribute7"`		//突破7增加属性
-	BreachAttribute8	[]string	`csv:"BreachAttribute8"`		//突破8增加属性
-	BreachAttribute9	[]string	`csv:"BreachAttribute9"`		//突破9增加属性
-	BreachAttribute10	[]string	`csv:"BreachAttribute10"`		//突破10增加属性
-	BreachAttribute11	[]string	`csv:"BreachAttribute11"`		//突破11增加属性
-	BreachAttribute12	[]string	`csv:"BreachAttribute12"`		//突破12增加属性
-	BreachAttribute13	[]string	`csv:"BreachAttribute13"`		//突破13增加属性
-	BreachAttribute14	[]string	`csv:"BreachAttribute14"`		//突破14增加属性
-	BreachAttribute15	[]string	`csv:"BreachAttribute15"`		//突破15增加属性
+var ParterProgressCfgLoader map[int32]*ParterProgressCfg
+
+type ParterProgressCfg struct {
+	Id                int32    `csv:"Id"`                //佣兵ID
+	Times             int32    `csv:"Times"`             //进阶上限(次)
+	CostMoney         []string `csv:"CostMoney"`         //消耗银币
+	CostStone         []string `csv:"CostStone"`         //消耗天使之泪
+	AddLv             []string `csv:"AddLv"`             //提高等级上限
+	Attribute1        []string `csv:"Attribute1"`        //进阶1增加属性
+	Attribute2        []string `csv:"Attribute2"`        //进阶2增加属性
+	Attribute3        []string `csv:"Attribute3"`        //进阶3增加属性
+	Attribute4        []string `csv:"Attribute4"`        //进阶4增加属性
+	Attribute5        []string `csv:"Attribute5"`        //进阶5增加属性
+	Attribute6        []string `csv:"Attribute6"`        //进阶6增加属性
+	Attribute7        []string `csv:"Attribute7"`        //进阶7增加属性
+	Attribute8        []string `csv:"Attribute8"`        //进阶8增加属性
+	Attribute9        []string `csv:"Attribute9"`        //进阶9增加属性
+	Attribute10       []string `csv:"Attribute10"`       //进阶10增加属性
+	Attribute11       []string `csv:"Attribute11"`       //进阶11增加属性
+	Attribute12       []string `csv:"Attribute12"`       //进阶12增加属性
+	Attribute13       []string `csv:"Attribute13"`       //进阶13增加属性
+	Attribute14       []string `csv:"Attribute14"`       //进阶14增加属性
+	Attribute15       []string `csv:"Attribute15"`       //进阶15增加属性
+	BreachTimes       int32    `csv:"BreachTimes"`       //伙伴突破次数
+	BreachAddLv       []string `csv:"BreachAddLv"`       //突破获得等级
+	BreachMoney       []string `csv:"BreachMoney"`       //突破银币
+	BreachCost        []string `csv:"BreachCost"`        //突破材料
+	BreachAttribute1  []string `csv:"BreachAttribute1"`  //突破1增加属性
+	BreachAttribute2  []string `csv:"BreachAttribute2"`  //突破2增加属性
+	BreachAttribute3  []string `csv:"BreachAttribute3"`  //突破3增加属性
+	BreachAttribute4  []string `csv:"BreachAttribute4"`  //突破4增加属性
+	BreachAttribute5  []string `csv:"BreachAttribute5"`  //突破5增加属性
+	BreachAttribute6  []string `csv:"BreachAttribute6"`  //突破6增加属性
+	BreachAttribute7  []string `csv:"BreachAttribute7"`  //突破7增加属性
+	BreachAttribute8  []string `csv:"BreachAttribute8"`  //突破8增加属性
+	BreachAttribute9  []string `csv:"BreachAttribute9"`  //突破9增加属性
+	BreachAttribute10 []string `csv:"BreachAttribute10"` //突破10增加属性
+	BreachAttribute11 []string `csv:"BreachAttribute11"` //突破11增加属性
+	BreachAttribute12 []string `csv:"BreachAttribute12"` //突破12增加属性
+	BreachAttribute13 []string `csv:"BreachAttribute13"` //突破13增加属性
+	BreachAttribute14 []string `csv:"BreachAttribute14"` //突破14增加属性
+	BreachAttribute15 []string `csv:"BreachAttribute15"` //突破15增加属性
 }
+
 func ParterProgressCfgLoad(path string) {
 	cfg := []*ParterProgressCfg{}
 	ParterProgressCfgLoader = map[int32]*ParterProgressCfg{}
-	loadCsvCfg(path + "ParterProgressCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ParterProgressCfg.csv", &cfg)
+	for _, row := range cfg {
 		ParterProgressCfgLoader[row.Id] = row
 	}
 }
 
-var ParterSkillTreeCfgLoader  map[int32]*ParterSkillTreeCfg
-type ParterSkillTreeCfg struct{
-	SkillId	int32	`csv:"SkillId"`		//技能ID
-	SkillType	int32	`csv:"SkillType"`		//技能类型
-	MaxLv	int32	`csv:"MaxLv"`		//技能等级上限
-	SkillQuality	int32	`csv:"SkillQuality"`		//技能品质
-	JobType	int32	`csv:"JobType"`		//职业类型
-	JobBranch	int32	`csv:"JobBranch"`		//职业分支
-	JobStage	int32	`csv:"JobStage"`		//职业阶段
-	ParterID	int32	`csv:"ParterID"`		//对应伙伴
-	OpenLevel	int32	`csv:"OpenLevel"`		//解锁伙伴等级要求
-	OpenNeedCost	[]string	`csv:"OpenNeedCost"`		//解锁需求
-	Pos	int32	`csv:"Pos"`		//技能树位置件
-	Order	int32	`csv:"order"`		//技能排序
-	SuperSkill	[]string	`csv:"SuperSkill"`		//进阶技能
-	BeforeSkill	int32	`csv:"beforeSkill"`		//下阶技能
-	SkillBranch	int32	`csv:"SkillBranch"`		//进阶职业阶段
-	PressPoint	int32	`csv:"PressPoint"`		//技能压制值
-	StartPressPoint	int32	`csv:"StartPressPoint"`		//技能原压制值
+var ParterSkillTreeCfgLoader map[int32]*ParterSkillTreeCfg
+
+type ParterSkillTreeCfg struct {
+	SkillId         int32    `csv:"SkillId"`         //技能ID
+	SkillType       int32    `csv:"SkillType"`       //技能类型
+	MaxLv           int32    `csv:"MaxLv"`           //技能等级上限
+	SkillQuality    int32    `csv:"SkillQuality"`    //技能品质
+	JobType         int32    `csv:"JobType"`         //职业类型
+	JobBranch       int32    `csv:"JobBranch"`       //职业分支
+	JobStage        int32    `csv:"JobStage"`        //职业阶段
+	ParterID        int32    `csv:"ParterID"`        //对应伙伴
+	OpenLevel       int32    `csv:"OpenLevel"`       //解锁伙伴等级要求
+	OpenNeedCost    []string `csv:"OpenNeedCost"`    //解锁需求
+	Pos             int32    `csv:"Pos"`             //技能树位置件
+	Order           int32    `csv:"order"`           //技能排序
+	SuperSkill      []string `csv:"SuperSkill"`      //进阶技能
+	BeforeSkill     int32    `csv:"beforeSkill"`     //下阶技能
+	SkillBranch     int32    `csv:"SkillBranch"`     //进阶职业阶段
+	PressPoint      int32    `csv:"PressPoint"`      //技能压制值
+	StartPressPoint int32    `csv:"StartPressPoint"` //技能原压制值
 }
+
 func ParterSkillTreeCfgLoad(path string) {
 	cfg := []*ParterSkillTreeCfg{}
 	ParterSkillTreeCfgLoader = map[int32]*ParterSkillTreeCfg{}
-	loadCsvCfg(path + "ParterSkillTreeCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ParterSkillTreeCfg.csv", &cfg)
+	for _, row := range cfg {
 		ParterSkillTreeCfgLoader[row.SkillId] = row
 	}
 }
 
-var PassCheckCfgLoader  map[int32]*PassCheckCfg
-type PassCheckCfg struct{
-	Lv	int32	`csv:"Lv"`		//等级
-	RMB	float32	`csv:"RMB"`		//价格
-	Automatic	int32	`csv:"Automatic"`		//自动挑战
-	AddLeadExp	int32	`csv:"AddLeadExp"`		//时光助力主角经验提升万分比
-	AddAttrLevel	[]string	`csv:"AddAttrLevel"`		//增加主角属性
+var PassCheckCfgLoader map[int32]*PassCheckCfg
+
+type PassCheckCfg struct {
+	Lv           int32    `csv:"Lv"`           //等级
+	RMB          float32  `csv:"RMB"`          //价格
+	Automatic    int32    `csv:"Automatic"`    //自动挑战
+	AddLeadExp   int32    `csv:"AddLeadExp"`   //时光助力主角经验提升万分比
+	AddAttrLevel []string `csv:"AddAttrLevel"` //增加主角属性
 }
+
 func PassCheckCfgLoad(path string) {
 	cfg := []*PassCheckCfg{}
 	PassCheckCfgLoader = map[int32]*PassCheckCfg{}
-	loadCsvCfg(path + "PassCheckCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"PassCheckCfg.csv", &cfg)
+	for _, row := range cfg {
 		PassCheckCfgLoader[row.Lv] = row
 	}
 }
 
-var PassiveSkillCfgLoader  map[int32]*PassiveSkillCfg
-type PassiveSkillCfg struct{
-	SkillId	int32	`csv:"SkillId"`		//技能ID
-	AddAttributes	[]string	`csv:"AddAttributes"`		//增加属性
+var PassiveSkillCfgLoader map[int32]*PassiveSkillCfg
+
+type PassiveSkillCfg struct {
+	SkillId       int32    `csv:"SkillId"`       //技能ID
+	AddAttributes []string `csv:"AddAttributes"` //增加属性
 }
+
 func PassiveSkillCfgLoad(path string) {
 	cfg := []*PassiveSkillCfg{}
 	PassiveSkillCfgLoader = map[int32]*PassiveSkillCfg{}
-	loadCsvCfg(path + "PassiveSkillCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"PassiveSkillCfg.csv", &cfg)
+	for _, row := range cfg {
 		PassiveSkillCfgLoader[row.SkillId] = row
 	}
 }
 
-var PetBattleCfgLoader  map[int32]*PetBattleCfg
-type PetBattleCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	AvatarId	int32	`csv:"AvatarId"`		//模型id
-	JobType	int32	`csv:"JobType"`		//宠物职业
-	Fame	int32	`csv:"Fame"`		//头像框
-	NatureType	int32	`csv:"NatureType"`		//属性
-	Hp	float32	`csv:"Hp"`		//生命
-	Sp	float32	`csv:"Sp"`		//蓝量
-	Atk	float32	`csv:"Atk"`		//物攻
-	Matk	float32	`csv:"Matk"`		//魔攻
-	Skill1	int32	`csv:"Skill1"`		//技能1
-	Skill1Rate	[]string	`csv:"Skill1Rate"`		//技能1发动概率
-	Skill2	int32	`csv:"Skill2"`		//技能2
-	Skill2Rate	[]string	`csv:"Skill2Rate"`		//技能2发动概率
-	Skill3	int32	`csv:"Skill3"`		//技能3
-	Skill3Rate	[]string	`csv:"Skill3Rate"`		//技能3发动概率
-	Skill4	int32	`csv:"Skill4"`		//技能4
+var PetBattleCfgLoader map[int32]*PetBattleCfg
+
+type PetBattleCfg struct {
+	Id         int32    `csv:"Id"`         //唯一id
+	AvatarId   int32    `csv:"AvatarId"`   //模型id
+	JobType    int32    `csv:"JobType"`    //宠物职业
+	Fame       int32    `csv:"Fame"`       //头像框
+	NatureType int32    `csv:"NatureType"` //属性
+	Hp         float32  `csv:"Hp"`         //生命
+	Sp         float32  `csv:"Sp"`         //蓝量
+	Atk        float32  `csv:"Atk"`        //物攻
+	Matk       float32  `csv:"Matk"`       //魔攻
+	Skill1     int32    `csv:"Skill1"`     //技能1
+	Skill1Rate []string `csv:"Skill1Rate"` //技能1发动概率
+	Skill2     int32    `csv:"Skill2"`     //技能2
+	Skill2Rate []string `csv:"Skill2Rate"` //技能2发动概率
+	Skill3     int32    `csv:"Skill3"`     //技能3
+	Skill3Rate []string `csv:"Skill3Rate"` //技能3发动概率
+	Skill4     int32    `csv:"Skill4"`     //技能4
 }
+
 func PetBattleCfgLoad(path string) {
 	cfg := []*PetBattleCfg{}
 	PetBattleCfgLoader = map[int32]*PetBattleCfg{}
-	loadCsvCfg(path + "PetBattleCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"PetBattleCfg.csv", &cfg)
+	for _, row := range cfg {
 		PetBattleCfgLoader[row.Id] = row
 	}
 }
 
-var PetCfgLoader  map[int32]*PetCfg
-type PetCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	AvatarId	int32	`csv:"AvatarId"`		//模型id
-	JobType	int32	`csv:"JobType"`		//宠物职业
-	Quality	int32	`csv:"Quality"`		//品质
-	Fame	int32	`csv:"Fame"`		//头像框
-	NatureType	int32	`csv:"NatureType"`		//属性
-	ConversionRate	int32	`csv:"ConversionRate"`		//属性转化率
-	Pos	int32	`csv:"Pos"`		//虚拟站位
-	Hp	float32	`csv:"Hp"`		//生命
-	Sp	float32	`csv:"Sp"`		//蓝量
-	Atk	float32	`csv:"Atk"`		//物攻
-	Matk	float32	`csv:"Matk"`		//魔攻
-	Def	float32	`csv:"Def"`		//物防
-	Mdef	float32	`csv:"Mdef"`		//魔防
-	Hit	float32	`csv:"Hit"`		//命中
-	Dodge	float32	`csv:"Dodge"`		//闪避
-	Crit	float32	`csv:"Crit"`		//暴击
-	Ten	float32	`csv:"Ten"`		//韧性
-	AttackSpeed	float32	`csv:"AttackSpeed"`		//攻击速度
-	HpRate	int32	`csv:"HpRate"`		//生命系数
-	SpRate	int32	`csv:"SpRate"`		//蓝量系数
-	AtkRate	int32	`csv:"AtkRate"`		//物攻系数
-	MatkRate	int32	`csv:"MatkRate"`		//魔攻系数
-	DefRate	int32	`csv:"DefRate"`		//物防系数
-	MdefRate	int32	`csv:"MdefRate"`		//魔防系数
-	HitRate	int32	`csv:"HitRate"`		//命中系数
-	DodgeRate	int32	`csv:"DodgeRate"`		//闪避系数
-	CritRate	int32	`csv:"CritRate"`		//暴击系数
-	TenRate	int32	`csv:"TenRate"`		//韧性系数
-	NormalSkillIds	[]string	`csv:"NormalSkillIds"`		//普攻技能id
-	Skill1	int32	`csv:"Skill1"`		//技能1
-	Skill1Rate	[]string	`csv:"Skill1Rate"`		//技能1发动概率
-	Skill2	int32	`csv:"Skill2"`		//技能2
-	Skill2Rate	[]string	`csv:"Skill2Rate"`		//技能2发动概率
-	Skill3	int32	`csv:"Skill3"`		//技能3
-	Skill3Rate	[]string	`csv:"Skill3Rate"`		//技能3发动概率
-	Skill4	int32	`csv:"Skill4"`		//技能4
-	Skill4Rate	[]string	`csv:"Skill4Rate"`		//技能4发动概率
-	EmptySkill	int32	`csv:"EmptySkill"`		//备用技能
-	PetReward	[]string	`csv:"PetReward"`		//收集奖励
-	Contract	int32	`csv:"contract"`		//宠物契约继承属性
-	Understand	int32	`csv:"understand"`		//领悟额外增加继承属性
+var PetCfgLoader map[int32]*PetCfg
+
+type PetCfg struct {
+	Id             int32    `csv:"Id"`             //唯一id
+	AvatarId       int32    `csv:"AvatarId"`       //模型id
+	JobType        int32    `csv:"JobType"`        //宠物职业
+	Quality        int32    `csv:"Quality"`        //品质
+	Fame           int32    `csv:"Fame"`           //头像框
+	NatureType     int32    `csv:"NatureType"`     //属性
+	ConversionRate int32    `csv:"ConversionRate"` //属性转化率
+	Pos            int32    `csv:"Pos"`            //虚拟站位
+	Hp             float32  `csv:"Hp"`             //生命
+	Sp             float32  `csv:"Sp"`             //蓝量
+	Atk            float32  `csv:"Atk"`            //物攻
+	Matk           float32  `csv:"Matk"`           //魔攻
+	Def            float32  `csv:"Def"`            //物防
+	Mdef           float32  `csv:"Mdef"`           //魔防
+	Hit            float32  `csv:"Hit"`            //命中
+	Dodge          float32  `csv:"Dodge"`          //闪避
+	Crit           float32  `csv:"Crit"`           //暴击
+	Ten            float32  `csv:"Ten"`            //韧性
+	AttackSpeed    float32  `csv:"AttackSpeed"`    //攻击速度
+	HpRate         int32    `csv:"HpRate"`         //生命系数
+	SpRate         int32    `csv:"SpRate"`         //蓝量系数
+	AtkRate        int32    `csv:"AtkRate"`        //物攻系数
+	MatkRate       int32    `csv:"MatkRate"`       //魔攻系数
+	DefRate        int32    `csv:"DefRate"`        //物防系数
+	MdefRate       int32    `csv:"MdefRate"`       //魔防系数
+	HitRate        int32    `csv:"HitRate"`        //命中系数
+	DodgeRate      int32    `csv:"DodgeRate"`      //闪避系数
+	CritRate       int32    `csv:"CritRate"`       //暴击系数
+	TenRate        int32    `csv:"TenRate"`        //韧性系数
+	NormalSkillIds []string `csv:"NormalSkillIds"` //普攻技能id
+	Skill1         int32    `csv:"Skill1"`         //技能1
+	Skill1Rate     []string `csv:"Skill1Rate"`     //技能1发动概率
+	Skill2         int32    `csv:"Skill2"`         //技能2
+	Skill2Rate     []string `csv:"Skill2Rate"`     //技能2发动概率
+	Skill3         int32    `csv:"Skill3"`         //技能3
+	Skill3Rate     []string `csv:"Skill3Rate"`     //技能3发动概率
+	Skill4         int32    `csv:"Skill4"`         //技能4
+	Skill4Rate     []string `csv:"Skill4Rate"`     //技能4发动概率
+	EmptySkill     int32    `csv:"EmptySkill"`     //备用技能
+	PetReward      []string `csv:"PetReward"`      //收集奖励
+	Contract       int32    `csv:"contract"`       //宠物契约继承属性
+	Understand     int32    `csv:"understand"`     //领悟额外增加继承属性
 }
+
 func PetCfgLoad(path string) {
 	cfg := []*PetCfg{}
 	PetCfgLoader = map[int32]*PetCfg{}
-	loadCsvCfg(path + "PetCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"PetCfg.csv", &cfg)
+	for _, row := range cfg {
 		PetCfgLoader[row.Id] = row
 	}
 }
 
-var PetEquipCfgLoader  map[int32]*PetEquipCfg
-type PetEquipCfg struct{
-	Id	int32	`csv:"Id"`		//id
-	Type	int32	`csv:"Type"`		//格子编号
-	Quality	int32	`csv:"Quality"`		//品质
-	MaxLevel	int32	`csv:"MaxLevel"`		//最大等级
-	Advance	int32	`csv:"Advance"`		//进阶目标
-	AdvanceCost	[]string	`csv:"AdvanceCost"`		//进阶消耗
+var PetEquipCfgLoader map[int32]*PetEquipCfg
+
+type PetEquipCfg struct {
+	Id          int32    `csv:"Id"`          //id
+	Type        int32    `csv:"Type"`        //格子编号
+	Quality     int32    `csv:"Quality"`     //品质
+	MaxLevel    int32    `csv:"MaxLevel"`    //最大等级
+	Advance     int32    `csv:"Advance"`     //进阶目标
+	AdvanceCost []string `csv:"AdvanceCost"` //进阶消耗
 }
+
 func PetEquipCfgLoad(path string) {
 	cfg := []*PetEquipCfg{}
 	PetEquipCfgLoader = map[int32]*PetEquipCfg{}
-	loadCsvCfg(path + "PetEquipCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"PetEquipCfg.csv", &cfg)
+	for _, row := range cfg {
 		PetEquipCfgLoader[row.Id] = row
 	}
 }
 
-var PetEquipExpCfgLoader  map[int32]*PetEquipExpCfg
-type PetEquipExpCfg struct{
-	Id	int32	`csv:"Id"`		//唯一ID
-	PetEquipLevel	int32	`csv:"PetEquipLevel"`		//印记等级
-	PetEquipID	int32	`csv:"PetEquipID"`		//印记ID
-	Cost	[]string	`csv:"Cost"`		//升级所需材料
-	Nature	[]string	`csv:"Nature"`		//属性
-	FightPower	int32	`csv:"FightPower"`		//战斗力
+var PetEquipExpCfgLoader map[int32]*PetEquipExpCfg
+
+type PetEquipExpCfg struct {
+	Id            int32    `csv:"Id"`            //唯一ID
+	PetEquipLevel int32    `csv:"PetEquipLevel"` //印记等级
+	PetEquipID    int32    `csv:"PetEquipID"`    //印记ID
+	Cost          []string `csv:"Cost"`          //升级所需材料
+	Nature        []string `csv:"Nature"`        //属性
+	FightPower    int32    `csv:"FightPower"`    //战斗力
 }
+
 func PetEquipExpCfgLoad(path string) {
 	cfg := []*PetEquipExpCfg{}
 	PetEquipExpCfgLoader = map[int32]*PetEquipExpCfg{}
-	loadCsvCfg(path + "PetEquipExpCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"PetEquipExpCfg.csv", &cfg)
+	for _, row := range cfg {
 		PetEquipExpCfgLoader[row.Id] = row
 	}
 }
 
-var PetEquipSuitCfgLoader  map[int32]*PetEquipSuitCfg
-type PetEquipSuitCfg struct{
-	Id	int32	`csv:"Id"`		//id
-	Amount	[]string	`csv:"Amount"`		//激活数量
-	Suit	[]string	`csv:"Suit"`		//6件属性
+var PetEquipSuitCfgLoader map[int32]*PetEquipSuitCfg
+
+type PetEquipSuitCfg struct {
+	Id     int32    `csv:"Id"`     //id
+	Amount []string `csv:"Amount"` //激活数量
+	Suit   []string `csv:"Suit"`   //6件属性
 }
+
 func PetEquipSuitCfgLoad(path string) {
 	cfg := []*PetEquipSuitCfg{}
 	PetEquipSuitCfgLoader = map[int32]*PetEquipSuitCfg{}
-	loadCsvCfg(path + "PetEquipSuitCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"PetEquipSuitCfg.csv", &cfg)
+	for _, row := range cfg {
 		PetEquipSuitCfgLoader[row.Id] = row
 	}
 }
 
-var PetExpCfgLoader  map[int32]*PetExpCfg
-type PetExpCfg struct{
-	PetLevel	int32	`csv:"petLevel"`		//宠物等级
-	Experience1	int32	`csv:"experience1"`		//Normal升级所需经验
-	Experience2	int32	`csv:"experience2"`		//Mini升级所需经验
-	Experience3	int32	`csv:"experience3"`		//Mvp升级所需经验
-	CostMoney1	int32	`csv:"CostMoney1"`		//Normal升级所需银币
-	CostMoney2	int32	`csv:"CostMoney2"`		//Mini升级所需银币
-	CostMoney3	int32	`csv:"CostMoney3"`		//Mvp升级所需银币
-	Capacity1	int32	`csv:"Capacity1"`		//Normal战力
-	Capacity2	int32	`csv:"Capacity2"`		//Mini战力
-	Capacity3	int32	`csv:"Capacity3"`		//Mvp战力
+var PetExpCfgLoader map[int32]*PetExpCfg
+
+type PetExpCfg struct {
+	PetLevel    int32 `csv:"petLevel"`    //宠物等级
+	Experience1 int32 `csv:"experience1"` //Normal升级所需经验
+	Experience2 int32 `csv:"experience2"` //Mini升级所需经验
+	Experience3 int32 `csv:"experience3"` //Mvp升级所需经验
+	CostMoney1  int32 `csv:"CostMoney1"`  //Normal升级所需银币
+	CostMoney2  int32 `csv:"CostMoney2"`  //Mini升级所需银币
+	CostMoney3  int32 `csv:"CostMoney3"`  //Mvp升级所需银币
+	Capacity1   int32 `csv:"Capacity1"`   //Normal战力
+	Capacity2   int32 `csv:"Capacity2"`   //Mini战力
+	Capacity3   int32 `csv:"Capacity3"`   //Mvp战力
 }
+
 func PetExpCfgLoad(path string) {
 	cfg := []*PetExpCfg{}
 	PetExpCfgLoader = map[int32]*PetExpCfg{}
-	loadCsvCfg(path + "PetExpCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"PetExpCfg.csv", &cfg)
+	for _, row := range cfg {
 		PetExpCfgLoader[row.PetLevel] = row
 	}
 }
 
-var PetpartnerCfgLoader  map[int32]*PetpartnerCfg
-type PetpartnerCfg struct{
-	Id	int32	`csv:"Id"`		//唯一id
-	Condition1	[]string	`csv:"Condition1"`		//激活条件1
-	Attribute1	[]string	`csv:"attribute1"`		//属性1
-	Capacity1	int32	`csv:"Capacity1"`		//战力1
-	AddHeroCap1	[]string	`csv:"AddHeroCap1"`		//战力1
-	Condition2	[]string	`csv:"Condition2"`		//激活条件2
-	Attribute2	[]string	`csv:"attribute2"`		//属性2
-	Capacity2	int32	`csv:"Capacity2"`		//战力2
-	AddHeroCap2	[]string	`csv:"AddHeroCap2"`		//战力2
-	Condition3	[]string	`csv:"Condition3"`		//激活条件3
-	Attribute3	[]string	`csv:"attribute3"`		//属性3
-	Capacity3	int32	`csv:"Capacity3"`		//战力3
-	AddHeroCap3	[]string	`csv:"AddHeroCap3"`		//战力3
+var PetpartnerCfgLoader map[int32]*PetpartnerCfg
+
+type PetpartnerCfg struct {
+	Id          int32    `csv:"Id"`          //唯一id
+	Condition1  []string `csv:"Condition1"`  //激活条件1
+	Attribute1  []string `csv:"attribute1"`  //属性1
+	Capacity1   int32    `csv:"Capacity1"`   //战力1
+	AddHeroCap1 []string `csv:"AddHeroCap1"` //战力1
+	Condition2  []string `csv:"Condition2"`  //激活条件2
+	Attribute2  []string `csv:"attribute2"`  //属性2
+	Capacity2   int32    `csv:"Capacity2"`   //战力2
+	AddHeroCap2 []string `csv:"AddHeroCap2"` //战力2
+	Condition3  []string `csv:"Condition3"`  //激活条件3
+	Attribute3  []string `csv:"attribute3"`  //属性3
+	Capacity3   int32    `csv:"Capacity3"`   //战力3
+	AddHeroCap3 []string `csv:"AddHeroCap3"` //战力3
 }
+
 func PetpartnerCfgLoad(path string) {
 	cfg := []*PetpartnerCfg{}
 	PetpartnerCfgLoader = map[int32]*PetpartnerCfg{}
-	loadCsvCfg(path + "PetpartnerCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"PetpartnerCfg.csv", &cfg)
+	for _, row := range cfg {
 		PetpartnerCfgLoader[row.Id] = row
 	}
 }
 
-var PetProgressCfgLoader  map[int32]*PetProgressCfg
-type PetProgressCfg struct{
-	Id	int32	`csv:"Id"`		//宠物ID
-	CostMoney	[]string	`csv:"CostMoney"`		//消耗银币
-	AddFight	[]string	`csv:"AddFight"`		//进阶增加战力
-	Attribute1	[]string	`csv:"Attribute1"`		//1阶增加属性
-	AttributeRateAdd1	[]string	`csv:"AttributeRateAdd1"`		//1阶成长率
-	Condition11	[]string	`csv:"Condition11"`		//1阶条件1
-	Condition12	[]string	`csv:"Condition12"`		//1阶条件2
-	Attribute2	[]string	`csv:"Attribute2"`		//进阶2增加属性
-	AttributeRateAdd2	[]string	`csv:"AttributeRateAdd2"`		//进阶2成长率
-	Condition21	[]string	`csv:"Condition21"`		//2阶条件1
-	Condition22	[]string	`csv:"Condition22"`		//2阶条件2
-	Attribute3	[]string	`csv:"Attribute3"`		//进阶3增加属性
-	AttributeRateAdd3	[]string	`csv:"AttributeRateAdd3"`		//进阶3成长率
-	Condition31	[]string	`csv:"Condition31"`		//3阶条件1
-	Condition32	[]string	`csv:"Condition32"`		//3阶条件2
-	Attribute4	[]string	`csv:"Attribute4"`		//进阶4增加属性
-	AttributeRateAdd4	[]string	`csv:"AttributeRateAdd4"`		//进阶4成长率
-	Condition41	[]string	`csv:"Condition41"`		//4阶条件1
-	Condition42	[]string	`csv:"Condition42"`		//4阶条件2
-	Attribute5	[]string	`csv:"Attribute5"`		//进阶5增加属性
-	AttributeRateAdd5	[]string	`csv:"AttributeRateAdd5"`		//进阶5成长率
-	Condition51	[]string	`csv:"Condition51"`		//5阶条件1
-	Condition52	[]string	`csv:"Condition52"`		//5阶条件2
-	Attribute6	[]string	`csv:"Attribute6"`		//进阶6增加属性
-	AttributeRateAdd6	[]string	`csv:"AttributeRateAdd6"`		//进阶6成长率
-	Condition61	[]string	`csv:"Condition61"`		//6阶条件1
-	Condition62	[]string	`csv:"Condition62"`		//6阶条件2
-	Attribute7	[]string	`csv:"Attribute7"`		//进阶7增加属性
-	AttributeRateAdd7	[]string	`csv:"AttributeRateAdd7"`		//进阶7成长率
-	Condition71	[]string	`csv:"Condition71"`		//7阶条件1
-	Condition72	[]string	`csv:"Condition72"`		//7阶条件2
-	Attribute8	[]string	`csv:"Attribute8"`		//进阶8增加属性
-	AttributeRateAdd8	[]string	`csv:"AttributeRateAdd8"`		//进阶8成长率
-	Condition81	[]string	`csv:"Condition81"`		//8阶条件1
-	Condition82	[]string	`csv:"Condition82"`		//8阶条件2
-	Attribute9	[]string	`csv:"Attribute9"`		//进阶9增加属性
-	AttributeRateAdd9	[]string	`csv:"AttributeRateAdd9"`		//进阶9成长率
-	Condition91	[]string	`csv:"Condition91"`		//9阶条件1
-	Condition92	[]string	`csv:"Condition92"`		//9阶条件2
-	Attribute10	[]string	`csv:"Attribute10"`		//进阶10增加属性
-	AttributeRateAdd10	[]string	`csv:"AttributeRateAdd10"`		//进阶10成长率
-	Condition101	[]string	`csv:"Condition101"`		//10阶条件1
-	Condition102	[]string	`csv:"Condition102"`		//10阶条件2
+var PetProgressCfgLoader map[int32]*PetProgressCfg
+
+type PetProgressCfg struct {
+	Id                 int32    `csv:"Id"`                 //宠物ID
+	CostMoney          []string `csv:"CostMoney"`          //消耗银币
+	AddFight           []string `csv:"AddFight"`           //进阶增加战力
+	Attribute1         []string `csv:"Attribute1"`         //1阶增加属性
+	AttributeRateAdd1  []string `csv:"AttributeRateAdd1"`  //1阶成长率
+	Condition11        []string `csv:"Condition11"`        //1阶条件1
+	Condition12        []string `csv:"Condition12"`        //1阶条件2
+	Attribute2         []string `csv:"Attribute2"`         //进阶2增加属性
+	AttributeRateAdd2  []string `csv:"AttributeRateAdd2"`  //进阶2成长率
+	Condition21        []string `csv:"Condition21"`        //2阶条件1
+	Condition22        []string `csv:"Condition22"`        //2阶条件2
+	Attribute3         []string `csv:"Attribute3"`         //进阶3增加属性
+	AttributeRateAdd3  []string `csv:"AttributeRateAdd3"`  //进阶3成长率
+	Condition31        []string `csv:"Condition31"`        //3阶条件1
+	Condition32        []string `csv:"Condition32"`        //3阶条件2
+	Attribute4         []string `csv:"Attribute4"`         //进阶4增加属性
+	AttributeRateAdd4  []string `csv:"AttributeRateAdd4"`  //进阶4成长率
+	Condition41        []string `csv:"Condition41"`        //4阶条件1
+	Condition42        []string `csv:"Condition42"`        //4阶条件2
+	Attribute5         []string `csv:"Attribute5"`         //进阶5增加属性
+	AttributeRateAdd5  []string `csv:"AttributeRateAdd5"`  //进阶5成长率
+	Condition51        []string `csv:"Condition51"`        //5阶条件1
+	Condition52        []string `csv:"Condition52"`        //5阶条件2
+	Attribute6         []string `csv:"Attribute6"`         //进阶6增加属性
+	AttributeRateAdd6  []string `csv:"AttributeRateAdd6"`  //进阶6成长率
+	Condition61        []string `csv:"Condition61"`        //6阶条件1
+	Condition62        []string `csv:"Condition62"`        //6阶条件2
+	Attribute7         []string `csv:"Attribute7"`         //进阶7增加属性
+	AttributeRateAdd7  []string `csv:"AttributeRateAdd7"`  //进阶7成长率
+	Condition71        []string `csv:"Condition71"`        //7阶条件1
+	Condition72        []string `csv:"Condition72"`        //7阶条件2
+	Attribute8         []string `csv:"Attribute8"`         //进阶8增加属性
+	AttributeRateAdd8  []string `csv:"AttributeRateAdd8"`  //进阶8成长率
+	Condition81        []string `csv:"Condition81"`        //8阶条件1
+	Condition82        []string `csv:"Condition82"`        //8阶条件2
+	Attribute9         []string `csv:"Attribute9"`         //进阶9增加属性
+	AttributeRateAdd9  []string `csv:"AttributeRateAdd9"`  //进阶9成长率
+	Condition91        []string `csv:"Condition91"`        //9阶条件1
+	Condition92        []string `csv:"Condition92"`        //9阶条件2
+	Attribute10        []string `csv:"Attribute10"`        //进阶10增加属性
+	AttributeRateAdd10 []string `csv:"AttributeRateAdd10"` //进阶10成长率
+	Condition101       []string `csv:"Condition101"`       //10阶条件1
+	Condition102       []string `csv:"Condition102"`       //10阶条件2
 }
+
 func PetProgressCfgLoad(path string) {
 	cfg := []*PetProgressCfg{}
 	PetProgressCfgLoader = map[int32]*PetProgressCfg{}
-	loadCsvCfg(path + "PetProgressCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"PetProgressCfg.csv", &cfg)
+	for _, row := range cfg {
 		PetProgressCfgLoader[row.Id] = row
 	}
 }
 
-var PresspointPvPCfgLoader  map[int32]*PresspointPvPCfg
-type PresspointPvPCfg struct{
-	Id	int32	`csv:"Id"`		//ID挡位
-	TriggerConditions	int32	`csv:"TriggerConditions"`		//差值
-	Buffid	[]string	`csv:"buffid"`		//触发buff
+var PresspointPvPCfgLoader map[int32]*PresspointPvPCfg
+
+type PresspointPvPCfg struct {
+	Id                int32    `csv:"Id"`                //ID挡位
+	TriggerConditions int32    `csv:"TriggerConditions"` //差值
+	Buffid            []string `csv:"buffid"`            //触发buff
 }
+
 func PresspointPvPCfgLoad(path string) {
 	cfg := []*PresspointPvPCfg{}
 	PresspointPvPCfgLoader = map[int32]*PresspointPvPCfg{}
-	loadCsvCfg(path + "PresspointPvPCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"PresspointPvPCfg.csv", &cfg)
+	for _, row := range cfg {
 		PresspointPvPCfgLoader[row.Id] = row
 	}
 }
 
-var PrivilegeCardCfgLoader  map[int32]*PrivilegeCardCfg
-type PrivilegeCardCfg struct{
-	Lv	int32	`csv:"Lv"`		//等级
-	RMB	float32	`csv:"RMB"`		//价格
-	UnlockCond	[]string	`csv:"UnlockCond"`		//解锁条件
-	QuickBattle	int32	`csv:"QuickBattle"`		//战斗X2加速
-	Reward	[]string	`csv:"Reward"`		//特权每日礼包
-	PurseQuota	int32	`csv:"PurseQuota"`		//充值钱包额度
-	BuyReward	[]string	`csv:"BuyReward"`		//购买奖励显示
+var PrivilegeCardCfgLoader map[int32]*PrivilegeCardCfg
+
+type PrivilegeCardCfg struct {
+	Lv          int32    `csv:"Lv"`          //等级
+	RMB         float32  `csv:"RMB"`         //价格
+	UnlockCond  []string `csv:"UnlockCond"`  //解锁条件
+	QuickBattle int32    `csv:"QuickBattle"` //战斗X2加速
+	Reward      []string `csv:"Reward"`      //特权每日礼包
+	PurseQuota  int32    `csv:"PurseQuota"`  //充值钱包额度
+	BuyReward   []string `csv:"BuyReward"`   //购买奖励显示
 }
+
 func PrivilegeCardCfgLoad(path string) {
 	cfg := []*PrivilegeCardCfg{}
 	PrivilegeCardCfgLoader = map[int32]*PrivilegeCardCfg{}
-	loadCsvCfg(path + "PrivilegeCardCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"PrivilegeCardCfg.csv", &cfg)
+	for _, row := range cfg {
 		PrivilegeCardCfgLoader[row.Lv] = row
 	}
 }
 
-var PurseShopCfgLoader  map[int32]*PurseShopCfg
-type PurseShopCfg struct{
-	Id	int32	`csv:"Id"`		//礼包Id
-	Name	string	`csv:"Name"`		//礼包名字
-	Type	int32	`csv:"Type"`		//类型
-	RMB	float32	`csv:"RMB"`		//价格
-	Reward	[]string	`csv:"Reward"`		//购买后获得道具
-	FirstBuyReward	[]string	`csv:"FirstBuyReward"`		//首次购买奖励
-	ExtraBuyReward	[]string	`csv:"ExtraBuyReward"`		//购买额外获得
-	RestrictedType	int32	`csv:"RestrictedType"`		//限购类型次数
-	SortId	int32	`csv:"SortId"`		//排序Id
-	RmbTotalPay	int32	`csv:"RmbTotalPay"`		//累计充值金额
+var PurseShopCfgLoader map[int32]*PurseShopCfg
+
+type PurseShopCfg struct {
+	Id             int32    `csv:"Id"`             //礼包Id
+	Name           string   `csv:"Name"`           //礼包名字
+	Type           int32    `csv:"Type"`           //类型
+	RMB            float32  `csv:"RMB"`            //价格
+	Reward         []string `csv:"Reward"`         //购买后获得道具
+	FirstBuyReward []string `csv:"FirstBuyReward"` //首次购买奖励
+	ExtraBuyReward []string `csv:"ExtraBuyReward"` //购买额外获得
+	RestrictedType int32    `csv:"RestrictedType"` //限购类型次数
+	SortId         int32    `csv:"SortId"`         //排序Id
+	RmbTotalPay    int32    `csv:"RmbTotalPay"`    //累计充值金额
 }
+
 func PurseShopCfgLoad(path string) {
 	cfg := []*PurseShopCfg{}
 	PurseShopCfgLoader = map[int32]*PurseShopCfg{}
-	loadCsvCfg(path + "PurseShopCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"PurseShopCfg.csv", &cfg)
+	for _, row := range cfg {
 		PurseShopCfgLoader[row.Id] = row
 	}
 }
 
-var QualityPointCfgLoader  map[int32]*QualityPointCfg
-type QualityPointCfg struct{
-	Count	int32	`csv:"count"`		//点数
-	Cost	int32	`csv:"cost"`		//消耗
+var QualityPointCfgLoader map[int32]*QualityPointCfg
+
+type QualityPointCfg struct {
+	Count int32 `csv:"count"` //点数
+	Cost  int32 `csv:"cost"`  //消耗
 }
+
 func QualityPointCfgLoad(path string) {
 	cfg := []*QualityPointCfg{}
 	QualityPointCfgLoader = map[int32]*QualityPointCfg{}
-	loadCsvCfg(path + "QualityPointCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"QualityPointCfg.csv", &cfg)
+	for _, row := range cfg {
 		QualityPointCfgLoader[row.Count] = row
 	}
 }
 
-var QuickBattleCostCfgLoader  map[int32]*QuickBattleCostCfg
-type QuickBattleCostCfg struct{
-	ID	int32	`csv:"ID"`		//次数
-	Cost	int32	`csv:"Cost"`		//消耗
-	CostType	int32	`csv:"CostType"`		//消耗类型
+var QuickBattleCostCfgLoader map[int32]*QuickBattleCostCfg
+
+type QuickBattleCostCfg struct {
+	ID       int32 `csv:"ID"`       //次数
+	Cost     int32 `csv:"Cost"`     //消耗
+	CostType int32 `csv:"CostType"` //消耗类型
 }
+
 func QuickBattleCostCfgLoad(path string) {
 	cfg := []*QuickBattleCostCfg{}
 	QuickBattleCostCfgLoader = map[int32]*QuickBattleCostCfg{}
-	loadCsvCfg(path + "QuickBattleCostCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"QuickBattleCostCfg.csv", &cfg)
+	for _, row := range cfg {
 		QuickBattleCostCfgLoader[row.ID] = row
 	}
 }
 
-var RobotCfgLoader  map[int32]*RobotCfg
-type RobotCfg struct{
-	RobotId	int32	`csv:"RobotId"`		//机器人ID
-	RobotName	string	`csv:"RobotName"`		//名字
-	ArenaLevelId	int32	`csv:"ArenaLevelId"`		//段位ID
-	RobotLevel	int32	`csv:"RobotLevel"`		//等级
-	RobotAvatar	int32	`csv:"RobotAvatar"`		//机器人模型
-	RobotEquip	[]string	`csv:"RobotEquip"`		//装备
-	RobotSkill	[]string	`csv:"RobotSkill"`		//技能
-	RobotHeadPortrait	int32	`csv:"RobotHeadPortrait"`		//头像
-	PartnerId	[]string	`csv:"PartnerId"`		//伙伴
-	PartnerEquip	[]string	`csv:"PartnerEquip"`		//伙伴装备
-	PartnerLevel	[]string	`csv:"PartnerLevel"`		//伙伴等级
-	FightPower	[]string	`csv:"FightPower"`		//战斗力
-	SystemType	int32	`csv:"SystemType"`		//机器人系统类别
+var RobotCfgLoader map[int32]*RobotCfg
+
+type RobotCfg struct {
+	RobotId           int32    `csv:"RobotId"`           //机器人ID
+	RobotName         string   `csv:"RobotName"`         //名字
+	ArenaLevelId      int32    `csv:"ArenaLevelId"`      //段位ID
+	RobotLevel        int32    `csv:"RobotLevel"`        //等级
+	RobotAvatar       int32    `csv:"RobotAvatar"`       //机器人模型
+	RobotEquip        []string `csv:"RobotEquip"`        //装备
+	RobotSkill        []string `csv:"RobotSkill"`        //技能
+	RobotHeadPortrait int32    `csv:"RobotHeadPortrait"` //头像
+	PartnerId         []string `csv:"PartnerId"`         //伙伴
+	PartnerEquip      []string `csv:"PartnerEquip"`      //伙伴装备
+	PartnerLevel      []string `csv:"PartnerLevel"`      //伙伴等级
+	FightPower        []string `csv:"FightPower"`        //战斗力
+	SystemType        int32    `csv:"SystemType"`        //机器人系统类别
 }
+
 func RobotCfgLoad(path string) {
 	cfg := []*RobotCfg{}
 	RobotCfgLoader = map[int32]*RobotCfg{}
-	loadCsvCfg(path + "RobotCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RobotCfg.csv", &cfg)
+	for _, row := range cfg {
 		RobotCfgLoader[row.RobotId] = row
 	}
 }
 
-var RoleAttributeCfgLoader  map[int32]*RoleAttributeCfg
-type RoleAttributeCfg struct{
-	BaseLv	int32	`csv:"BaseLv"`		//角色等级
-	Name	int32	`csv:"Name"`		//需求经验
-	GetPoint	int32	`csv:"GetPoint"`		//获得点数
-	Hp	int32	`csv:"Hp"`		//生命
-	Sp	int32	`csv:"Sp"`		//蓝量
-	Atk	int32	`csv:"Atk"`		//物攻
-	Matk	int32	`csv:"Matk"`		//魔攻
-	Def	int32	`csv:"Def"`		//物防
-	Mdef	int32	`csv:"Mdef"`		//魔防
-	Hit	int32	`csv:"Hit"`		//命中
-	Dodge	int32	`csv:"Dodge"`		//闪避
-	Crit	int32	`csv:"Crit"`		//暴击
-	Ten	int32	`csv:"Ten"`		//韧性
+var RoleAttributeCfgLoader map[int32]*RoleAttributeCfg
+
+type RoleAttributeCfg struct {
+	BaseLv   int32 `csv:"BaseLv"`   //角色等级
+	Name     int32 `csv:"Name"`     //需求经验
+	GetPoint int32 `csv:"GetPoint"` //获得点数
+	Hp       int32 `csv:"Hp"`       //生命
+	Sp       int32 `csv:"Sp"`       //蓝量
+	Atk      int32 `csv:"Atk"`      //物攻
+	Matk     int32 `csv:"Matk"`     //魔攻
+	Def      int32 `csv:"Def"`      //物防
+	Mdef     int32 `csv:"Mdef"`     //魔防
+	Hit      int32 `csv:"Hit"`      //命中
+	Dodge    int32 `csv:"Dodge"`    //闪避
+	Crit     int32 `csv:"Crit"`     //暴击
+	Ten      int32 `csv:"Ten"`      //韧性
 }
+
 func RoleAttributeCfgLoad(path string) {
 	cfg := []*RoleAttributeCfg{}
 	RoleAttributeCfgLoader = map[int32]*RoleAttributeCfg{}
-	loadCsvCfg(path + "RoleAttributeCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RoleAttributeCfg.csv", &cfg)
+	for _, row := range cfg {
 		RoleAttributeCfgLoader[row.BaseLv] = row
 	}
 }
 
-var RuneShopExploreCfgLoader  map[int32]*RuneShopExploreCfg
-type RuneShopExploreCfg struct{
-	ID	int32	`csv:"ID"`		//高级解锁商品ID
-	Round	int32	`csv:"Round"`		//活动轮次
-	GoldExp	string	`csv:"GoldExp"`		//消耗金币获取经验比例
-	MissionExp	string	`csv:"MissionExp"`		//任务活跃度转化经验比例
-	MissonExpUp	string	`csv:"MissonExpUp"`		//解锁后任务获得经验提高
-	RMB	float32	`csv:"RMB"`		//解锁价格
-	SellingBegin	int32	`csv:"SellingBegin"`		//间隔时间
-	StartTime	string	`csv:"StartTime"`		//活动开启时间
-	SellingDuration	int32	`csv:"SellingDuration"`		//活动结束时长
-	CloseTime	string	`csv:"CloseTime"`		//结束时间
-	MaxLvRewad	[]string	`csv:"MaxLvRewad"`		//满级奖励
-	ExpCost	int32	`csv:"ExpCost"`		//领取消耗经验
+var RuneShopExploreCfgLoader map[int32]*RuneShopExploreCfg
+
+type RuneShopExploreCfg struct {
+	ID              int32    `csv:"ID"`              //高级解锁商品ID
+	Round           int32    `csv:"Round"`           //活动轮次
+	GoldExp         string   `csv:"GoldExp"`         //消耗金币获取经验比例
+	MissionExp      string   `csv:"MissionExp"`      //任务活跃度转化经验比例
+	MissonExpUp     string   `csv:"MissonExpUp"`     //解锁后任务获得经验提高
+	RMB             float32  `csv:"RMB"`             //解锁价格
+	SellingBegin    int32    `csv:"SellingBegin"`    //间隔时间
+	StartTime       string   `csv:"StartTime"`       //活动开启时间
+	SellingDuration int32    `csv:"SellingDuration"` //活动结束时长
+	CloseTime       string   `csv:"CloseTime"`       //结束时间
+	MaxLvRewad      []string `csv:"MaxLvRewad"`      //满级奖励
+	ExpCost         int32    `csv:"ExpCost"`         //领取消耗经验
 }
+
 func RuneShopExploreCfgLoad(path string) {
 	cfg := []*RuneShopExploreCfg{}
 	RuneShopExploreCfgLoader = map[int32]*RuneShopExploreCfg{}
-	loadCsvCfg(path + "RuneShopExploreCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RuneShopExploreCfg.csv", &cfg)
+	for _, row := range cfg {
 		RuneShopExploreCfgLoader[row.ID] = row
 	}
 }
 
-var RuneShopExploreRewardCfgLoader  map[int32]*RuneShopExploreRewardCfg
-type RuneShopExploreRewardCfg struct{
-	ID	int32	`csv:"ID"`		//奖励ID
-	Lv	int32	`csv:"Lv"`		//探索等级
-	Exp	int32	`csv:"Exp"`		//升级所需经验
-	Reward	[]string	`csv:"Reward"`		//普通奖励
-	CashReward	[]string	`csv:"CashReward"`		//高级奖励
-	MaxRewardConsumen	int32	`csv:"MaxRewardConsumen"`		//满级奖励消耗所需经验
-	RewardSign	int32	`csv:"RewardSign"`		//是否为大奖
-	ActiveRound	int32	`csv:"ActiveRound"`		//活动轮次
+var RuneShopExploreRewardCfgLoader map[int32]*RuneShopExploreRewardCfg
+
+type RuneShopExploreRewardCfg struct {
+	ID                int32    `csv:"ID"`                //奖励ID
+	Lv                int32    `csv:"Lv"`                //探索等级
+	Exp               int32    `csv:"Exp"`               //升级所需经验
+	Reward            []string `csv:"Reward"`            //普通奖励
+	CashReward        []string `csv:"CashReward"`        //高级奖励
+	MaxRewardConsumen int32    `csv:"MaxRewardConsumen"` //满级奖励消耗所需经验
+	RewardSign        int32    `csv:"RewardSign"`        //是否为大奖
+	ActiveRound       int32    `csv:"ActiveRound"`       //活动轮次
 }
+
 func RuneShopExploreRewardCfgLoad(path string) {
 	cfg := []*RuneShopExploreRewardCfg{}
 	RuneShopExploreRewardCfgLoader = map[int32]*RuneShopExploreRewardCfg{}
-	loadCsvCfg(path + "RuneShopExploreRewardCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RuneShopExploreRewardCfg.csv", &cfg)
+	for _, row := range cfg {
 		RuneShopExploreRewardCfgLoader[row.ID] = row
 	}
 }
 
-var RuneShopGiftsCfgLoader  map[int32]*RuneShopGiftsCfg
-type RuneShopGiftsCfg struct{
-	Id	int32	`csv:"Id"`		//礼包Id
-	Name	string	`csv:"Name"`		//礼包名字
-	Type	int32	`csv:"Type"`		//类型
-	RMB	float32	`csv:"RMB"`		//价格
-	Reward	[]string	`csv:"Reward"`		//购买后获得道具
-	FirstBuyReward	[]string	`csv:"FirstBuyReward"`		//首次购买奖励
-	ExtraBuyReward	[]string	`csv:"ExtraBuyReward"`		//购买额外获得
-	RestrictedType	int32	`csv:"RestrictedType"`		//限购类型次数
-	SortId	int32	`csv:"SortId"`		//排序Id
-	RmbTotalPay	int32	`csv:"RmbTotalPay"`		//累计充值金额
+var RuneShopGiftsCfgLoader map[int32]*RuneShopGiftsCfg
+
+type RuneShopGiftsCfg struct {
+	Id             int32    `csv:"Id"`             //礼包Id
+	Name           string   `csv:"Name"`           //礼包名字
+	Type           int32    `csv:"Type"`           //类型
+	RMB            float32  `csv:"RMB"`            //价格
+	Reward         []string `csv:"Reward"`         //购买后获得道具
+	FirstBuyReward []string `csv:"FirstBuyReward"` //首次购买奖励
+	ExtraBuyReward []string `csv:"ExtraBuyReward"` //购买额外获得
+	RestrictedType int32    `csv:"RestrictedType"` //限购类型次数
+	SortId         int32    `csv:"SortId"`         //排序Id
+	RmbTotalPay    int32    `csv:"RmbTotalPay"`    //累计充值金额
 }
+
 func RuneShopGiftsCfgLoad(path string) {
 	cfg := []*RuneShopGiftsCfg{}
 	RuneShopGiftsCfgLoader = map[int32]*RuneShopGiftsCfg{}
-	loadCsvCfg(path + "RuneShopGiftsCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RuneShopGiftsCfg.csv", &cfg)
+	for _, row := range cfg {
 		RuneShopGiftsCfgLoader[row.Id] = row
 	}
 }
 
-var RuneShopGuildBattleCfgLoader  map[int32]*RuneShopGuildBattleCfg
-type RuneShopGuildBattleCfg struct{
-	Id	int32	`csv:"Id"`		//礼包Id
-	Name	string	`csv:"Name"`		//礼包名字
-	RMB	float32	`csv:"RMB"`		//价格
-	Reward	[]string	`csv:"Reward"`		//购买后获得道具
-	RestrictedType	int32	`csv:"RestrictedType"`		//限购类型次数
-	SortId	int32	`csv:"SortId"`		//排序Id
+var RuneShopGuildBattleCfgLoader map[int32]*RuneShopGuildBattleCfg
+
+type RuneShopGuildBattleCfg struct {
+	Id             int32    `csv:"Id"`             //礼包Id
+	Name           string   `csv:"Name"`           //礼包名字
+	RMB            float32  `csv:"RMB"`            //价格
+	Reward         []string `csv:"Reward"`         //购买后获得道具
+	RestrictedType int32    `csv:"RestrictedType"` //限购类型次数
+	SortId         int32    `csv:"SortId"`         //排序Id
 }
+
 func RuneShopGuildBattleCfgLoad(path string) {
 	cfg := []*RuneShopGuildBattleCfg{}
 	RuneShopGuildBattleCfgLoader = map[int32]*RuneShopGuildBattleCfg{}
-	loadCsvCfg(path + "RuneShopGuildBattleCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RuneShopGuildBattleCfg.csv", &cfg)
+	for _, row := range cfg {
 		RuneShopGuildBattleCfgLoader[row.Id] = row
 	}
 }
 
-var RuneShopLimitCfgLoader  map[int32]*RuneShopLimitCfg
-type RuneShopLimitCfg struct{
-	Id	int32	`csv:"Id"`		//限时商品Id
-	Name	string	`csv:"Name"`		//商品名字
-	BuyReward	[]string	`csv:"BuyReward"`		//购买奖励
-	RMB	float32	`csv:"RMB"`		//价格
-	SellingType	int32	`csv:"SellingType"`		//商品上架类型
-	SellingBegin	int32	`csv:"SellingBegin"`		//开服后起始时间
-	SellingDuration	int32	`csv:"SellingDuration"`		//开服上架持续时长
-	BeginTime	string	`csv:"BeginTime"`		//商品上架时间
-	EndTime	string	`csv:"EndTime"`		//商品下架时间
-	RestrictedType	int32	`csv:"RestrictedType"`		//限购次数
-	SeasonId	int32	`csv:"SeasonId"`		//赛季ID
-	ActiveId	int32	`csv:"ActiveId"`		//活动ID
-	RedPoint	int32	`csv:"RedPoint"`		//红点显示
-	SortId	int32	`csv:"SortId"`		//排序Id
+var RuneShopLimitCfgLoader map[int32]*RuneShopLimitCfg
+
+type RuneShopLimitCfg struct {
+	Id              int32    `csv:"Id"`              //限时商品Id
+	Name            string   `csv:"Name"`            //商品名字
+	BuyReward       []string `csv:"BuyReward"`       //购买奖励
+	RMB             float32  `csv:"RMB"`             //价格
+	SellingType     int32    `csv:"SellingType"`     //商品上架类型
+	SellingBegin    int32    `csv:"SellingBegin"`    //开服后起始时间
+	SellingDuration int32    `csv:"SellingDuration"` //开服上架持续时长
+	BeginTime       string   `csv:"BeginTime"`       //商品上架时间
+	EndTime         string   `csv:"EndTime"`         //商品下架时间
+	RestrictedType  int32    `csv:"RestrictedType"`  //限购次数
+	SeasonId        int32    `csv:"SeasonId"`        //赛季ID
+	ActiveId        int32    `csv:"ActiveId"`        //活动ID
+	RedPoint        int32    `csv:"RedPoint"`        //红点显示
+	SortId          int32    `csv:"SortId"`          //排序Id
 }
+
 func RuneShopLimitCfgLoad(path string) {
 	cfg := []*RuneShopLimitCfg{}
 	RuneShopLimitCfgLoader = map[int32]*RuneShopLimitCfg{}
-	loadCsvCfg(path + "RuneShopLimitCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RuneShopLimitCfg.csv", &cfg)
+	for _, row := range cfg {
 		RuneShopLimitCfgLoader[row.Id] = row
 	}
 }
 
-var RuneShopMonthCardCfgLoader  map[int32]*RuneShopMonthCardCfg
-type RuneShopMonthCardCfg struct{
-	Id	int32	`csv:"Id"`		//周卡类型
-	Name	string	`csv:"Name"`		//周卡名字
-	AddTime	int32	`csv:"AddTime"`		//增加时长
-	BuyReward	[]string	`csv:"BuyReward"`		//购买奖励显示
-	DayReward	[]string	`csv:"DayReward"`		//每日奖励
-	TotalReward	[]string	`csv:"TotalReward"`		//总计奖励
-	RMB	float32	`csv:"RMB"`		//价格
-	BuyRewardServer	[]string	`csv:"BuyRewardServer"`		//获得购买奖励
-	RewardMail	int32	`csv:"RewardMail"`		//奖励邮件
-	Monthdec	string	`csv:"Monthdec"`		//周卡描述
+var RuneShopMonthCardCfgLoader map[int32]*RuneShopMonthCardCfg
+
+type RuneShopMonthCardCfg struct {
+	Id              int32    `csv:"Id"`              //周卡类型
+	Name            string   `csv:"Name"`            //周卡名字
+	AddTime         int32    `csv:"AddTime"`         //增加时长
+	BuyReward       []string `csv:"BuyReward"`       //购买奖励显示
+	DayReward       []string `csv:"DayReward"`       //每日奖励
+	TotalReward     []string `csv:"TotalReward"`     //总计奖励
+	RMB             float32  `csv:"RMB"`             //价格
+	BuyRewardServer []string `csv:"BuyRewardServer"` //获得购买奖励
+	RewardMail      int32    `csv:"RewardMail"`      //奖励邮件
+	Monthdec        string   `csv:"Monthdec"`        //周卡描述
 }
+
 func RuneShopMonthCardCfgLoad(path string) {
 	cfg := []*RuneShopMonthCardCfg{}
 	RuneShopMonthCardCfgLoader = map[int32]*RuneShopMonthCardCfg{}
-	loadCsvCfg(path + "RuneShopMonthCardCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RuneShopMonthCardCfg.csv", &cfg)
+	for _, row := range cfg {
 		RuneShopMonthCardCfgLoader[row.Id] = row
 	}
 }
 
-var RuneShopRankAidouluCfgLoader  map[int32]*RuneShopRankAidouluCfg
-type RuneShopRankAidouluCfg struct{
-	Id	int32	`csv:"Id"`		//礼包Id
-	RankId	int32	`csv:"RankId"`		//活序号
-	Name	string	`csv:"Name"`		//礼包名字
-	RMB	float32	`csv:"RMB"`		//价格
-	Reward	[]string	`csv:"Reward"`		//前端显示获得道具
-	RestrictedType	int32	`csv:"RestrictedType"`		//限购类型次数
-	SortId	int32	`csv:"SortId"`		//排序Id
-	SeverReward	[]string	`csv:"SeverReward"`		//购买后获得道具
-	RewardScore	int32	`csv:"RewardScore"`		//购买后获得积分
-	IfRequite	int32	`csv:"IfRequite"`		//是否解锁馈赠
+var RuneShopRankAidouluCfgLoader map[int32]*RuneShopRankAidouluCfg
+
+type RuneShopRankAidouluCfg struct {
+	Id             int32    `csv:"Id"`             //礼包Id
+	RankId         int32    `csv:"RankId"`         //活序号
+	Name           string   `csv:"Name"`           //礼包名字
+	RMB            float32  `csv:"RMB"`            //价格
+	Reward         []string `csv:"Reward"`         //前端显示获得道具
+	RestrictedType int32    `csv:"RestrictedType"` //限购类型次数
+	SortId         int32    `csv:"SortId"`         //排序Id
+	SeverReward    []string `csv:"SeverReward"`    //购买后获得道具
+	RewardScore    int32    `csv:"RewardScore"`    //购买后获得积分
+	IfRequite      int32    `csv:"IfRequite"`      //是否解锁馈赠
 }
+
 func RuneShopRankAidouluCfgLoad(path string) {
 	cfg := []*RuneShopRankAidouluCfg{}
 	RuneShopRankAidouluCfgLoader = map[int32]*RuneShopRankAidouluCfg{}
-	loadCsvCfg(path + "RuneShopRankAidouluCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RuneShopRankAidouluCfg.csv", &cfg)
+	for _, row := range cfg {
 		RuneShopRankAidouluCfgLoader[row.Id] = row
 	}
 }
 
-var RuneShopRankArenaCfgLoader  map[int32]*RuneShopRankArenaCfg
-type RuneShopRankArenaCfg struct{
-	Id	int32	`csv:"Id"`		//礼包Id
-	RankId	int32	`csv:"RankId"`		//活序号
-	Name	string	`csv:"Name"`		//礼包名字
-	RMB	float32	`csv:"RMB"`		//价格
-	Reward	[]string	`csv:"Reward"`		//购买后获得道具
-	RestrictedType	int32	`csv:"RestrictedType"`		//限购类型次数
-	SortId	int32	`csv:"SortId"`		//排序Id
+var RuneShopRankArenaCfgLoader map[int32]*RuneShopRankArenaCfg
+
+type RuneShopRankArenaCfg struct {
+	Id             int32    `csv:"Id"`             //礼包Id
+	RankId         int32    `csv:"RankId"`         //活序号
+	Name           string   `csv:"Name"`           //礼包名字
+	RMB            float32  `csv:"RMB"`            //价格
+	Reward         []string `csv:"Reward"`         //购买后获得道具
+	RestrictedType int32    `csv:"RestrictedType"` //限购类型次数
+	SortId         int32    `csv:"SortId"`         //排序Id
 }
+
 func RuneShopRankArenaCfgLoad(path string) {
 	cfg := []*RuneShopRankArenaCfg{}
 	RuneShopRankArenaCfgLoader = map[int32]*RuneShopRankArenaCfg{}
-	loadCsvCfg(path + "RuneShopRankArenaCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RuneShopRankArenaCfg.csv", &cfg)
+	for _, row := range cfg {
 		RuneShopRankArenaCfgLoader[row.Id] = row
 	}
 }
 
-var RuneShopRankMapCfgLoader  map[int32]*RuneShopRankMapCfg
-type RuneShopRankMapCfg struct{
-	Id	int32	`csv:"Id"`		//礼包Id
-	RankId	int32	`csv:"RankId"`		//活序号
-	Name	string	`csv:"Name"`		//礼包名字
-	RMB	float32	`csv:"RMB"`		//价格
-	Reward	[]string	`csv:"Reward"`		//购买后获得道具
-	RewardScore	int32	`csv:"RewardScore"`		//购买后获得积分
-	RestrictedType	int32	`csv:"RestrictedType"`		//限购类型次数
-	SortId	int32	`csv:"SortId"`		//排序Id
-	SeverReward	[]string	`csv:"SeverReward"`		//购买后获得道具
+var RuneShopRankMapCfgLoader map[int32]*RuneShopRankMapCfg
+
+type RuneShopRankMapCfg struct {
+	Id             int32    `csv:"Id"`             //礼包Id
+	RankId         int32    `csv:"RankId"`         //活序号
+	Name           string   `csv:"Name"`           //礼包名字
+	RMB            float32  `csv:"RMB"`            //价格
+	Reward         []string `csv:"Reward"`         //购买后获得道具
+	RewardScore    int32    `csv:"RewardScore"`    //购买后获得积分
+	RestrictedType int32    `csv:"RestrictedType"` //限购类型次数
+	SortId         int32    `csv:"SortId"`         //排序Id
+	SeverReward    []string `csv:"SeverReward"`    //购买后获得道具
 }
+
 func RuneShopRankMapCfgLoad(path string) {
 	cfg := []*RuneShopRankMapCfg{}
 	RuneShopRankMapCfgLoader = map[int32]*RuneShopRankMapCfg{}
-	loadCsvCfg(path + "RuneShopRankMapCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RuneShopRankMapCfg.csv", &cfg)
+	for _, row := range cfg {
 		RuneShopRankMapCfgLoader[row.Id] = row
 	}
 }
 
-var RuneShopRankPetCfgLoader  map[int32]*RuneShopRankPetCfg
-type RuneShopRankPetCfg struct{
-	Id	int32	`csv:"Id"`		//礼包Id
-	RankId	int32	`csv:"RankId"`		//活序号
-	Name	string	`csv:"Name"`		//礼包名字
-	RMB	float32	`csv:"RMB"`		//价格
-	Reward	[]string	`csv:"Reward"`		//购买后获得道具
-	RestrictedType	int32	`csv:"RestrictedType"`		//限购类型次数
-	SortId	int32	`csv:"SortId"`		//排序Id
+var RuneShopRankPetCfgLoader map[int32]*RuneShopRankPetCfg
+
+type RuneShopRankPetCfg struct {
+	Id             int32    `csv:"Id"`             //礼包Id
+	RankId         int32    `csv:"RankId"`         //活序号
+	Name           string   `csv:"Name"`           //礼包名字
+	RMB            float32  `csv:"RMB"`            //价格
+	Reward         []string `csv:"Reward"`         //购买后获得道具
+	RestrictedType int32    `csv:"RestrictedType"` //限购类型次数
+	SortId         int32    `csv:"SortId"`         //排序Id
 }
+
 func RuneShopRankPetCfgLoad(path string) {
 	cfg := []*RuneShopRankPetCfg{}
 	RuneShopRankPetCfgLoader = map[int32]*RuneShopRankPetCfg{}
-	loadCsvCfg(path + "RuneShopRankPetCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RuneShopRankPetCfg.csv", &cfg)
+	for _, row := range cfg {
 		RuneShopRankPetCfgLoader[row.Id] = row
 	}
 }
 
-var RuneShopRankSkillCfgLoader  map[int32]*RuneShopRankSkillCfg
-type RuneShopRankSkillCfg struct{
-	Id	int32	`csv:"Id"`		//礼包Id
-	RankId	int32	`csv:"RankId"`		//活序号
-	Name	string	`csv:"Name"`		//礼包名字
-	RMB	float32	`csv:"RMB"`		//价格
-	Reward	[]string	`csv:"Reward"`		//购买后获得道具
-	RestrictedType	int32	`csv:"RestrictedType"`		//限购类型次数
-	SortId	int32	`csv:"SortId"`		//排序Id
+var RuneShopRankSkillCfgLoader map[int32]*RuneShopRankSkillCfg
+
+type RuneShopRankSkillCfg struct {
+	Id             int32    `csv:"Id"`             //礼包Id
+	RankId         int32    `csv:"RankId"`         //活序号
+	Name           string   `csv:"Name"`           //礼包名字
+	RMB            float32  `csv:"RMB"`            //价格
+	Reward         []string `csv:"Reward"`         //购买后获得道具
+	RestrictedType int32    `csv:"RestrictedType"` //限购类型次数
+	SortId         int32    `csv:"SortId"`         //排序Id
 }
+
 func RuneShopRankSkillCfgLoad(path string) {
 	cfg := []*RuneShopRankSkillCfg{}
 	RuneShopRankSkillCfgLoader = map[int32]*RuneShopRankSkillCfg{}
-	loadCsvCfg(path + "RuneShopRankSkillCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RuneShopRankSkillCfg.csv", &cfg)
+	for _, row := range cfg {
 		RuneShopRankSkillCfgLoader[row.Id] = row
 	}
 }
 
-var RuneShopRankTowerCfgLoader  map[int32]*RuneShopRankTowerCfg
-type RuneShopRankTowerCfg struct{
-	Id	int32	`csv:"Id"`		//礼包Id
-	RankId	int32	`csv:"RankId"`		//活序号
-	Name	string	`csv:"Name"`		//礼包名字
-	RMB	float32	`csv:"RMB"`		//价格
-	Reward	[]string	`csv:"Reward"`		//购买后获得道具
-	RestrictedType	int32	`csv:"RestrictedType"`		//限购类型次数
-	SortId	int32	`csv:"SortId"`		//排序Id
+var RuneShopRankTowerCfgLoader map[int32]*RuneShopRankTowerCfg
+
+type RuneShopRankTowerCfg struct {
+	Id             int32    `csv:"Id"`             //礼包Id
+	RankId         int32    `csv:"RankId"`         //活序号
+	Name           string   `csv:"Name"`           //礼包名字
+	RMB            float32  `csv:"RMB"`            //价格
+	Reward         []string `csv:"Reward"`         //购买后获得道具
+	RestrictedType int32    `csv:"RestrictedType"` //限购类型次数
+	SortId         int32    `csv:"SortId"`         //排序Id
 }
+
 func RuneShopRankTowerCfgLoad(path string) {
 	cfg := []*RuneShopRankTowerCfg{}
 	RuneShopRankTowerCfgLoader = map[int32]*RuneShopRankTowerCfg{}
-	loadCsvCfg(path + "RuneShopRankTowerCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RuneShopRankTowerCfg.csv", &cfg)
+	for _, row := range cfg {
 		RuneShopRankTowerCfgLoader[row.Id] = row
 	}
 }
 
-var RushListCfgLoader  map[int32]*RushListCfg
-type RushListCfg struct{
-	Id	int32	`csv:"Id"`		//RankId
-	RankType	int32	`csv:"RankType"`		//活动种类
-	RankId	int32	`csv:"RankId"`		//活动序号
-	StartDay	int32	`csv:"StartDay"`		//活动开始日期
-	StartTime	string	`csv:"StartTime"`		//活动开始时间
-	CloseDay	int32	`csv:"CloseDay"`		//活动结束日期
-	CloseTime	string	`csv:"CloseTime"`		//活动结束时间
-	RestDay	int32	`csv:"RestDay"`		//功能结束日期
-	RestTime	string	`csv:"RestTime"`		//功能结束时间
-	RankGrade	int32	`csv:"RankGrade"`		//排名档次
-	Rank	[]string	`csv:"Rank"`		//排名区间
-	Reward	[]string	`csv:"Reward"`		//排名奖励
+var RushListCfgLoader map[int32]*RushListCfg
+
+type RushListCfg struct {
+	Id        int32    `csv:"Id"`        //RankId
+	RankType  int32    `csv:"RankType"`  //活动种类
+	RankId    int32    `csv:"RankId"`    //活动序号
+	StartDay  int32    `csv:"StartDay"`  //活动开始日期
+	StartTime string   `csv:"StartTime"` //活动开始时间
+	CloseDay  int32    `csv:"CloseDay"`  //活动结束日期
+	CloseTime string   `csv:"CloseTime"` //活动结束时间
+	RestDay   int32    `csv:"RestDay"`   //功能结束日期
+	RestTime  string   `csv:"RestTime"`  //功能结束时间
+	RankGrade int32    `csv:"RankGrade"` //排名档次
+	Rank      []string `csv:"Rank"`      //排名区间
+	Reward    []string `csv:"Reward"`    //排名奖励
 }
+
 func RushListCfgLoad(path string) {
 	cfg := []*RushListCfg{}
 	RushListCfgLoader = map[int32]*RushListCfg{}
-	loadCsvCfg(path + "RushListCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RushListCfg.csv", &cfg)
+	for _, row := range cfg {
 		RushListCfgLoader[row.Id] = row
 	}
 }
 
-var RushListTargetCfgLoader  map[int32]*RushListTargetCfg
-type RushListTargetCfg struct{
-	Id	int32	`csv:"Id"`		//Id
-	RankType	int32	`csv:"RankType"`		//活动种类
-	RankId	int32	`csv:"RankId"`		//活序号
-	Rank	[]string	`csv:"Rank"`		//条件区间
-	TargetGrade	int32	`csv:"TargetGrade"`		//目标档次
-	Reward	[]string	`csv:"Reward"`		//奖励
+var RushListTargetCfgLoader map[int32]*RushListTargetCfg
+
+type RushListTargetCfg struct {
+	Id          int32    `csv:"Id"`          //Id
+	RankType    int32    `csv:"RankType"`    //活动种类
+	RankId      int32    `csv:"RankId"`      //活序号
+	Rank        []string `csv:"Rank"`        //条件区间
+	TargetGrade int32    `csv:"TargetGrade"` //目标档次
+	Reward      []string `csv:"Reward"`      //奖励
 }
+
 func RushListTargetCfgLoad(path string) {
 	cfg := []*RushListTargetCfg{}
 	RushListTargetCfgLoader = map[int32]*RushListTargetCfg{}
-	loadCsvCfg(path + "RushListTargetCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"RushListTargetCfg.csv", &cfg)
+	for _, row := range cfg {
 		RushListTargetCfgLoader[row.Id] = row
 	}
 }
 
-var ServiceRecordCfgLoader  map[int32]*ServiceRecordCfg
-type ServiceRecordCfg struct{
-	Id	int32	`csv:"Id"`		//合服记录编号
-	ActivitiesId	[]string	`csv:"ActivitiesId"`		//活动Id
+var ServiceRecordCfgLoader map[int32]*ServiceRecordCfg
+
+type ServiceRecordCfg struct {
+	Id           int32    `csv:"Id"`           //合服记录编号
+	ActivitiesId []string `csv:"ActivitiesId"` //活动Id
 }
+
 func ServiceRecordCfgLoad(path string) {
 	cfg := []*ServiceRecordCfg{}
 	ServiceRecordCfgLoader = map[int32]*ServiceRecordCfg{}
-	loadCsvCfg(path + "ServiceRecordCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ServiceRecordCfg.csv", &cfg)
+	for _, row := range cfg {
 		ServiceRecordCfgLoader[row.Id] = row
 	}
 }
 
-var ShieldedWordCfgLoader  map[int32]*ShieldedWordCfg
-type ShieldedWordCfg struct{
-	ID	int32	`csv:"ID"`		//ID
-	Type	string	`csv:"Type"`		//Type
+var ShieldedWordCfgLoader map[int32]*ShieldedWordCfg
+
+type ShieldedWordCfg struct {
+	ID   int32  `csv:"ID"`   //ID
+	Type string `csv:"Type"` //Type
 }
+
 func ShieldedWordCfgLoad(path string) {
 	cfg := []*ShieldedWordCfg{}
 	ShieldedWordCfgLoader = map[int32]*ShieldedWordCfg{}
-	loadCsvCfg(path + "ShieldedWordCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ShieldedWordCfg.csv", &cfg)
+	for _, row := range cfg {
 		ShieldedWordCfgLoader[row.ID] = row
 	}
 }
 
-var ShopCfgLoader  map[int32]*ShopCfg
-type ShopCfg struct{
-	GoodsId	int32	`csv:"GoodsId"`		//商品Id
-	GoodsName	string	`csv:"GoodsName"`		//商品名称
-	GoodsType	int32	`csv:"GoodsType"`		//商品所属tab
-	GoodsTypename	string	`csv:"GoodsTypename"`		//商品页签
-	GoodsItem	int32	`csv:"GoodsItem"`		//商品内容
-	PayForType	int32	`csv:"PayForType"`		//消耗资源类型
-	PayForNum	int32	`csv:"PayForNum"`		//消耗资源数量
-	HdDrop	int32	`csv:"HdDrop"`		//活动商品
-	SellWell	int32	`csv:"SellWell"`		//是否热销
-	Proportion	int32	`csv:"Proportion"`		//折扣比例
-	DiscountPayForNum	int32	`csv:"DiscountPayForNum"`		//折扣后价格
-	RestrictedType	string	`csv:"RestrictedType"`		//限购类型次数
-	BeginTime	string	`csv:"BeginTime"`		//开始时间
-	EndTime	string	`csv:"EndTime"`		//结束时间
-	SortId	int32	`csv:"SortId"`		//排序Id
-	Weight	int32	`csv:"Weight"`		//权重概率
-	Weight1	int32	`csv:"Weight1"`		//VIP权重概率1
-	Weight2	int32	`csv:"Weight2"`		//VIP权重概率2
-	Weight3	int32	`csv:"Weight3"`		//VIP权重概率3
-	Weight4	int32	`csv:"Weight4"`		//VIP权重概率4
-	NtfClient	int32	`csv:"NtfClient"`		//是否通知客户端
-	GoodsPic	string	`csv:"GoodsPic"`		//图片
-	Reward	[]string	`csv:"Reward"`		//购买后获得道具
-	Condition	[]string	`csv:"Condition"`		//上架解锁条件枚举
+var ShopCfgLoader map[int32]*ShopCfg
+
+type ShopCfg struct {
+	GoodsId           int32    `csv:"GoodsId"`           //商品Id
+	GoodsName         string   `csv:"GoodsName"`         //商品名称
+	GoodsType         int32    `csv:"GoodsType"`         //商品所属tab
+	GoodsTypename     string   `csv:"GoodsTypename"`     //商品页签
+	GoodsItem         int32    `csv:"GoodsItem"`         //商品内容
+	PayForType        int32    `csv:"PayForType"`        //消耗资源类型
+	PayForNum         int32    `csv:"PayForNum"`         //消耗资源数量
+	HdDrop            int32    `csv:"HdDrop"`            //活动商品
+	SellWell          int32    `csv:"SellWell"`          //是否热销
+	Proportion        int32    `csv:"Proportion"`        //折扣比例
+	DiscountPayForNum int32    `csv:"DiscountPayForNum"` //折扣后价格
+	RestrictedType    string   `csv:"RestrictedType"`    //限购类型次数
+	BeginTime         string   `csv:"BeginTime"`         //开始时间
+	EndTime           string   `csv:"EndTime"`           //结束时间
+	SortId            int32    `csv:"SortId"`            //排序Id
+	Weight            int32    `csv:"Weight"`            //权重概率
+	Weight1           int32    `csv:"Weight1"`           //VIP权重概率1
+	Weight2           int32    `csv:"Weight2"`           //VIP权重概率2
+	Weight3           int32    `csv:"Weight3"`           //VIP权重概率3
+	Weight4           int32    `csv:"Weight4"`           //VIP权重概率4
+	NtfClient         int32    `csv:"NtfClient"`         //是否通知客户端
+	GoodsPic          string   `csv:"GoodsPic"`          //图片
+	Reward            []string `csv:"Reward"`            //购买后获得道具
+	Condition         []string `csv:"Condition"`         //上架解锁条件枚举
 }
+
 func ShopCfgLoad(path string) {
 	cfg := []*ShopCfg{}
 	ShopCfgLoader = map[int32]*ShopCfg{}
-	loadCsvCfg(path + "ShopCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ShopCfg.csv", &cfg)
+	for _, row := range cfg {
 		ShopCfgLoader[row.GoodsId] = row
 	}
 }
 
-var ShopTypeCfgLoader  map[int32]*ShopTypeCfg
-type ShopTypeCfg struct{
-	Id	int32	`csv:"Id"`		//商店唯一ID
-	ShopType	int32	`csv:"ShopType"`		//商店类型
-	Currency	[]string	`csv:"Currency"`		//交易货币
-	RefreshTime	[]string	`csv:"RefreshTime"`		//自动刷新时间点
-	PayForRefresh	[]string	`csv:"PayForRefresh"`		//手动刷新消耗
-	RefreshNum	int32	`csv:"RefreshNum"`		//手动刷新最大次数
-	GoodsRefreshNum	int32	`csv:"GoodsRefreshNum"`		//刷新商店道具上架数量
-	SortId	int32	`csv:"SortId"`		//商店页签排序
-	ActShop	int32	`csv:"ActShop"`		//活动商店类型
+var ShopTypeCfgLoader map[int32]*ShopTypeCfg
+
+type ShopTypeCfg struct {
+	Id              int32    `csv:"Id"`              //商店唯一ID
+	ShopType        int32    `csv:"ShopType"`        //商店类型
+	Currency        []string `csv:"Currency"`        //交易货币
+	RefreshTime     []string `csv:"RefreshTime"`     //自动刷新时间点
+	PayForRefresh   []string `csv:"PayForRefresh"`   //手动刷新消耗
+	RefreshNum      int32    `csv:"RefreshNum"`      //手动刷新最大次数
+	GoodsRefreshNum int32    `csv:"GoodsRefreshNum"` //刷新商店道具上架数量
+	SortId          int32    `csv:"SortId"`          //商店页签排序
+	ActShop         int32    `csv:"ActShop"`         //活动商店类型
 }
+
 func ShopTypeCfgLoad(path string) {
 	cfg := []*ShopTypeCfg{}
 	ShopTypeCfgLoader = map[int32]*ShopTypeCfg{}
-	loadCsvCfg(path + "ShopTypeCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"ShopTypeCfg.csv", &cfg)
+	for _, row := range cfg {
 		ShopTypeCfgLoader[row.Id] = row
 	}
 }
 
-var SignInCfgLoader  map[int32]*SignInCfg
-type SignInCfg struct{
-	ID	int32	`csv:"ID"`		//序列id
-	SignInType	int32	`csv:"SignInType"`		//签到类型
-	SignInReward	[]string	`csv:"SignInReward"`		//签到奖励
-	VipLevel	int32	`csv:"VipLevel"`		//Vip等级
-	SignInAddReward	[]string	`csv:"SignInAddReward"`		//累计奖励
-	Balloon	int32	`csv:"balloon"`		//气球方向
+var SignInCfgLoader map[int32]*SignInCfg
+
+type SignInCfg struct {
+	ID              int32    `csv:"ID"`              //序列id
+	SignInType      int32    `csv:"SignInType"`      //签到类型
+	SignInReward    []string `csv:"SignInReward"`    //签到奖励
+	VipLevel        int32    `csv:"VipLevel"`        //Vip等级
+	SignInAddReward []string `csv:"SignInAddReward"` //累计奖励
+	Balloon         int32    `csv:"balloon"`         //气球方向
 }
+
 func SignInCfgLoad(path string) {
 	cfg := []*SignInCfg{}
 	SignInCfgLoader = map[int32]*SignInCfg{}
-	loadCsvCfg(path + "SignInCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"SignInCfg.csv", &cfg)
+	for _, row := range cfg {
 		SignInCfgLoader[row.ID] = row
 	}
 }
 
-var SkillCfgLoader  map[int32]*SkillCfg
-type SkillCfg struct{
-	SkillId	int32	`csv:"SkillId"`		//技能ID
-	SkillType	int32	`csv:"SkillType"`		//技能类型
-	JobType	int32	`csv:"JobType"`		//职业类型
-	JobBranch	int32	`csv:"JobBranch"`		//职业分支
-	JobStage	int32	`csv:"JobStage"`		//职业阶段
-	Hide	int32	`csv:"Hide"`		//隐藏
-	BuffPoint	[]string	`csv:"BuffPoint"`		//技能点数
-	AddFight	int32	`csv:"AddFight"`		//技能升级提升战力
-	SpcSkillDec	[]string	`csv:"SpcSkillDec"`		//特殊技能
+var SkillCfgLoader map[int32]*SkillCfg
+
+type SkillCfg struct {
+	SkillId     int32    `csv:"SkillId"`     //技能ID
+	SkillType   int32    `csv:"SkillType"`   //技能类型
+	JobType     int32    `csv:"JobType"`     //职业类型
+	JobBranch   int32    `csv:"JobBranch"`   //职业分支
+	JobStage    int32    `csv:"JobStage"`    //职业阶段
+	Hide        int32    `csv:"Hide"`        //隐藏
+	BuffPoint   []string `csv:"BuffPoint"`   //技能点数
+	AddFight    int32    `csv:"AddFight"`    //技能升级提升战力
+	SpcSkillDec []string `csv:"SpcSkillDec"` //特殊技能
 }
+
 func SkillCfgLoad(path string) {
 	cfg := []*SkillCfg{}
 	SkillCfgLoader = map[int32]*SkillCfg{}
-	loadCsvCfg(path + "SkillCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"SkillCfg.csv", &cfg)
+	for _, row := range cfg {
 		SkillCfgLoader[row.SkillId] = row
 	}
 }
 
-var SkillDemandCfgLoader  map[int32]*SkillDemandCfg
-type SkillDemandCfg struct{
-	LearnLv	int32	`csv:"LearnLv"`		//技能学习等级
-	LvupDemand	[]string	`csv:"LvupDemand"`		//技能升级需求等级
-	LvupCost	[]string	`csv:"LvupCost"`		//技能升级所需消耗
+var SkillDemandCfgLoader map[int32]*SkillDemandCfg
+
+type SkillDemandCfg struct {
+	LearnLv    int32    `csv:"LearnLv"`    //技能学习等级
+	LvupDemand []string `csv:"LvupDemand"` //技能升级需求等级
+	LvupCost   []string `csv:"LvupCost"`   //技能升级所需消耗
 }
+
 func SkillDemandCfgLoad(path string) {
 	cfg := []*SkillDemandCfg{}
 	SkillDemandCfgLoader = map[int32]*SkillDemandCfg{}
-	loadCsvCfg(path + "SkillDemandCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"SkillDemandCfg.csv", &cfg)
+	for _, row := range cfg {
 		SkillDemandCfgLoader[row.LearnLv] = row
 	}
 }
 
-var SkillLvCfgLoader  map[int32]*SkillLvCfg
-type SkillLvCfg struct{
-	Id	int32	`csv:"Id"`		//固定ID
-	Cost	int32	`csv:"Cost"`		//SP消耗
-	SkillId	int32	`csv:"SkillId"`		//技能ID
-	SkillLV	int32	`csv:"SkillLV"`		//技能等级
+var SkillLvCfgLoader map[int32]*SkillLvCfg
+
+type SkillLvCfg struct {
+	Id      int32 `csv:"Id"`      //固定ID
+	Cost    int32 `csv:"Cost"`    //SP消耗
+	SkillId int32 `csv:"SkillId"` //技能ID
+	SkillLV int32 `csv:"SkillLV"` //技能等级
 }
+
 func SkillLvCfgLoad(path string) {
 	cfg := []*SkillLvCfg{}
 	SkillLvCfgLoader = map[int32]*SkillLvCfg{}
-	loadCsvCfg(path + "SkillLvCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"SkillLvCfg.csv", &cfg)
+	for _, row := range cfg {
 		SkillLvCfgLoader[row.Id] = row
 	}
 }
 
-var SkillSlotCfgLoader  map[int32]*SkillSlotCfg
-type SkillSlotCfg struct{
-	ID	int32	`csv:"ID"`		//编号
-	Condition	int32	`csv:"Condition"`		//升级解锁条件
-	SCondition	[]string	`csv:"S_Condition"`		//升级解锁条件
-	FightPower	int32	`csv:"FightPower"`		//技能槽附加战斗力
-	ParterCondition	int32	`csv:"ParterCondition"`		//伙伴技能升级条件
-	SParterCondition	[]string	`csv:"S_ParterCondition"`		//伙伴技能升级条件
+var SkillSlotCfgLoader map[int32]*SkillSlotCfg
+
+type SkillSlotCfg struct {
+	ID               int32    `csv:"ID"`                //编号
+	Condition        int32    `csv:"Condition"`         //升级解锁条件
+	SCondition       []string `csv:"S_Condition"`       //升级解锁条件
+	FightPower       int32    `csv:"FightPower"`        //技能槽附加战斗力
+	ParterCondition  int32    `csv:"ParterCondition"`   //伙伴技能升级条件
+	SParterCondition []string `csv:"S_ParterCondition"` //伙伴技能升级条件
 }
+
 func SkillSlotCfgLoad(path string) {
 	cfg := []*SkillSlotCfg{}
 	SkillSlotCfgLoader = map[int32]*SkillSlotCfg{}
-	loadCsvCfg(path + "SkillSlotCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"SkillSlotCfg.csv", &cfg)
+	for _, row := range cfg {
 		SkillSlotCfgLoader[row.ID] = row
 	}
 }
 
-var SkillSuitNewCfgLoader  map[int32]*SkillSuitNewCfg
-type SkillSuitNewCfg struct{
-	Id	int32	`csv:"Id"`		//id
-	Name	string	`csv:"Name"`		//名称
-	Suit1	[]string	`csv:"Suit1"`		//效果
-	TriggerConditions	[]string	`csv:"TriggerConditions"`		//激活条件
-	Buffid	int32	`csv:"buffid"`		//触发buff
+var SkillSuitNewCfgLoader map[int32]*SkillSuitNewCfg
+
+type SkillSuitNewCfg struct {
+	Id                int32    `csv:"Id"`                //id
+	Name              string   `csv:"Name"`              //名称
+	Suit1             []string `csv:"Suit1"`             //效果
+	TriggerConditions []string `csv:"TriggerConditions"` //激活条件
+	Buffid            int32    `csv:"buffid"`            //触发buff
 }
+
 func SkillSuitNewCfgLoad(path string) {
 	cfg := []*SkillSuitNewCfg{}
 	SkillSuitNewCfgLoader = map[int32]*SkillSuitNewCfg{}
-	loadCsvCfg(path + "SkillSuitNewCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"SkillSuitNewCfg.csv", &cfg)
+	for _, row := range cfg {
 		SkillSuitNewCfgLoader[row.Id] = row
 	}
 }
 
-var SkillTreeCfgLoader  map[int32]*SkillTreeCfg
-type SkillTreeCfg struct{
-	SkillId	int32	`csv:"SkillId"`		//技能ID
-	Name	string	`csv:"Name"`		//技能名字
-	SkillType	int32	`csv:"SkillType"`		//技能类型
-	MaxLv	int32	`csv:"MaxLv"`		//技能等级上限
-	SkillQuality	int32	`csv:"SkillQuality"`		//技能品质
-	JobType	int32	`csv:"JobType"`		//职业类型
-	JobBranch	int32	`csv:"JobBranch"`		//职业分支
-	JobStage	int32	`csv:"JobStage"`		//职业阶段
-	OpenLevel	int32	`csv:"OpenLevel"`		//解锁主角等级要求
-	OpenNeedCost	[]string	`csv:"OpenNeedCost"`		//解锁需求
-	Pos	int32	`csv:"Pos"`		//技能树位置件
-	Order	int32	`csv:"order"`		//技能排序
-	SuperSkill	[]string	`csv:"SuperSkill"`		//进阶技能
-	BeforeSkill	int32	`csv:"beforeSkill"`		//下阶技能
-	SkillBranch	int32	`csv:"SkillBranch"`		//进阶职业阶段
-	PressPoint	int32	`csv:"PressPoint"`		//技能压制值
-	StartPressPoint	int32	`csv:"StartPressPoint"`		//技能原压制值
+var SkillTreeCfgLoader map[int32]*SkillTreeCfg
+
+type SkillTreeCfg struct {
+	SkillId         int32    `csv:"SkillId"`         //技能ID
+	Name            string   `csv:"Name"`            //技能名字
+	SkillType       int32    `csv:"SkillType"`       //技能类型
+	MaxLv           int32    `csv:"MaxLv"`           //技能等级上限
+	SkillQuality    int32    `csv:"SkillQuality"`    //技能品质
+	JobType         int32    `csv:"JobType"`         //职业类型
+	JobBranch       int32    `csv:"JobBranch"`       //职业分支
+	JobStage        int32    `csv:"JobStage"`        //职业阶段
+	OpenLevel       int32    `csv:"OpenLevel"`       //解锁主角等级要求
+	OpenNeedCost    []string `csv:"OpenNeedCost"`    //解锁需求
+	Pos             int32    `csv:"Pos"`             //技能树位置件
+	Order           int32    `csv:"order"`           //技能排序
+	SuperSkill      []string `csv:"SuperSkill"`      //进阶技能
+	BeforeSkill     int32    `csv:"beforeSkill"`     //下阶技能
+	SkillBranch     int32    `csv:"SkillBranch"`     //进阶职业阶段
+	PressPoint      int32    `csv:"PressPoint"`      //技能压制值
+	StartPressPoint int32    `csv:"StartPressPoint"` //技能原压制值
 }
+
 func SkillTreeCfgLoad(path string) {
 	cfg := []*SkillTreeCfg{}
 	SkillTreeCfgLoader = map[int32]*SkillTreeCfg{}
-	loadCsvCfg(path + "SkillTreeCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"SkillTreeCfg.csv", &cfg)
+	for _, row := range cfg {
 		SkillTreeCfgLoader[row.SkillId] = row
 	}
 }
 
-var SkillUpEffectCfgLoader  map[int32]*SkillUpEffectCfg
-type SkillUpEffectCfg struct{
-	Id	int32	`csv:"Id"`		//技能ID
-	SkillId	int32	`csv:"SkillId"`		//技能ID
-	SkillLv	int32	`csv:"SkillLv"`		//技能等级
-	SkillType	int32	`csv:"SkillType"`		//技能类型
-	AddAttributes	[]string	`csv:"AddAttributes"`		//增加属性
+var SkillUpEffectCfgLoader map[int32]*SkillUpEffectCfg
+
+type SkillUpEffectCfg struct {
+	Id            int32    `csv:"Id"`            //技能ID
+	SkillId       int32    `csv:"SkillId"`       //技能ID
+	SkillLv       int32    `csv:"SkillLv"`       //技能等级
+	SkillType     int32    `csv:"SkillType"`     //技能类型
+	AddAttributes []string `csv:"AddAttributes"` //增加属性
 }
+
 func SkillUpEffectCfgLoad(path string) {
 	cfg := []*SkillUpEffectCfg{}
 	SkillUpEffectCfgLoader = map[int32]*SkillUpEffectCfg{}
-	loadCsvCfg(path + "SkillUpEffectCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"SkillUpEffectCfg.csv", &cfg)
+	for _, row := range cfg {
 		SkillUpEffectCfgLoader[row.Id] = row
 	}
 }
 
-var SummonServerCfgLoader  map[int32]*SummonServerCfg
-type SummonServerCfg struct{
-	Id	int32	`csv:"Id"`		//召唤Id
-	Name	string	`csv:"Name"`		//召唤名字
-	Cost	[]string	`csv:"Cost"`		//消耗道具顺序
-	Method	[]string	`csv:"Method"`		//召唤方式
-	DropId	int32	`csv:"DropId"`		//钥匙掉落包
-	DropId2	int32	`csv:"DropId2"`		//金币掉落包
-	Total	int32	`csv:"Total"`		//额外奖励的累计次数
-	ExtDropId	int32	`csv:"ExtDropId"`		//额外奖励的掉落包
-	SortId	int32	`csv:"SortId"`		//界面排序
-	ShowItemType	[]string	`csv:"ShowItemType"`		//可用于表现的道具类型
-	UnLock	int32	`csv:"UnLock"`		//解锁ID
-	ActivitiesId	int32	`csv:"ActivitiesId"`		//活动Id
-	Type	int32	`csv:"Type"`		//召唤类型
-	StartDay	int32	`csv:"StartDay"`		//开服时间
-	SummoType	int32	`csv:"SummoType"`		//召唤组
+var SummonServerCfgLoader map[int32]*SummonServerCfg
+
+type SummonServerCfg struct {
+	Id           int32    `csv:"Id"`           //召唤Id
+	Name         string   `csv:"Name"`         //召唤名字
+	Cost         []string `csv:"Cost"`         //消耗道具顺序
+	Method       []string `csv:"Method"`       //召唤方式
+	DropId       int32    `csv:"DropId"`       //钥匙掉落包
+	DropId2      int32    `csv:"DropId2"`      //金币掉落包
+	Total        int32    `csv:"Total"`        //额外奖励的累计次数
+	ExtDropId    int32    `csv:"ExtDropId"`    //额外奖励的掉落包
+	SortId       int32    `csv:"SortId"`       //界面排序
+	ShowItemType []string `csv:"ShowItemType"` //可用于表现的道具类型
+	UnLock       int32    `csv:"UnLock"`       //解锁ID
+	ActivitiesId int32    `csv:"ActivitiesId"` //活动Id
+	Type         int32    `csv:"Type"`         //召唤类型
+	StartDay     int32    `csv:"StartDay"`     //开服时间
+	SummoType    int32    `csv:"SummoType"`    //召唤组
 }
+
 func SummonServerCfgLoad(path string) {
 	cfg := []*SummonServerCfg{}
 	SummonServerCfgLoader = map[int32]*SummonServerCfg{}
-	loadCsvCfg(path + "SummonServerCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"SummonServerCfg.csv", &cfg)
+	for _, row := range cfg {
 		SummonServerCfgLoader[row.Id] = row
 	}
 }
 
-var SummonTemplateCfgLoader  map[int32]*SummonTemplateCfg
-type SummonTemplateCfg struct{
-	Id	int32	`csv:"Id"`		//ID
-	BlueNum	[]string	`csv:"BlueNum"`		//蓝色
-	PurpleNum	[]string	`csv:"PurpleNum"`		//紫色
-	GoldNum	[]string	`csv:"GoldNum"`		//金色
-	SecurityNum	int32	`csv:"SecurityNum"`		//保底增加百分比
-	Probability1	int32	`csv:"Probability1"`		//用道具抽取权重
-	Probability2	int32	`csv:"Probability2"`		//用金币抽取权重
-	CardType	int32	`csv:"CardType"`		//类型
+var SummonTemplateCfgLoader map[int32]*SummonTemplateCfg
+
+type SummonTemplateCfg struct {
+	Id           int32    `csv:"Id"`           //ID
+	BlueNum      []string `csv:"BlueNum"`      //蓝色
+	PurpleNum    []string `csv:"PurpleNum"`    //紫色
+	GoldNum      []string `csv:"GoldNum"`      //金色
+	SecurityNum  int32    `csv:"SecurityNum"`  //保底增加百分比
+	Probability1 int32    `csv:"Probability1"` //用道具抽取权重
+	Probability2 int32    `csv:"Probability2"` //用金币抽取权重
+	CardType     int32    `csv:"CardType"`     //类型
 }
+
 func SummonTemplateCfgLoad(path string) {
 	cfg := []*SummonTemplateCfg{}
 	SummonTemplateCfgLoader = map[int32]*SummonTemplateCfg{}
-	loadCsvCfg(path + "SummonTemplateCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"SummonTemplateCfg.csv", &cfg)
+	for _, row := range cfg {
 		SummonTemplateCfgLoader[row.Id] = row
 	}
 }
 
-var SysRewardLoader  map[int32]*SysReward
-type SysReward struct{
-	Id	int32	`csv:"Id"`		//爬塔层数
-	Reward	[]string	`csv:"Reward"`		//对应奖励
+var SysRewardLoader map[int32]*SysReward
+
+type SysReward struct {
+	Id     int32    `csv:"Id"`     //爬塔层数
+	Reward []string `csv:"Reward"` //对应奖励
 }
+
 func SysRewardLoad(path string) {
 	cfg := []*SysReward{}
 	SysRewardLoader = map[int32]*SysReward{}
-	loadCsvCfg(path + "SysReward.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"SysReward.csv", &cfg)
+	for _, row := range cfg {
 		SysRewardLoader[row.Id] = row
 	}
 }
 
-var TargetTaskCfgLoader  map[int32]*TargetTaskCfg
-type TargetTaskCfg struct{
-	TargetTaskId	int32	`csv:"TargetTaskId"`		//任务ID
-	TargetTaskCondition	[]string	`csv:"TargetTaskCondition"`		//任务枚举
-	TargetTaskType	int32	`csv:"TargetTaskType"`		//任务类型
-	TargetReward	[]string	`csv:"TargetReward"`		//任务奖励
-	FollowTaskOld	int32	`csv:"FollowTaskOld"`		//后续ID
-	TargetTaskTitle	string	`csv:"TargetTaskTitle"`		//任务标题
-	TargetTaskDescribe	string	`csv:"TargetTaskDescribe"`		//任务描述
-	SkipInterface	int32	`csv:"SkipInterface"`		//跳转界面
-	ShowState	int32	`csv:"ShowState"`		//是否显示进度
+var TargetTaskCfgLoader map[int32]*TargetTaskCfg
+
+type TargetTaskCfg struct {
+	TargetTaskId        int32    `csv:"TargetTaskId"`        //任务ID
+	TargetTaskCondition []string `csv:"TargetTaskCondition"` //任务枚举
+	TargetTaskType      int32    `csv:"TargetTaskType"`      //任务类型
+	TargetReward        []string `csv:"TargetReward"`        //任务奖励
+	FollowTaskOld       int32    `csv:"FollowTaskOld"`       //后续ID
+	TargetTaskTitle     string   `csv:"TargetTaskTitle"`     //任务标题
+	TargetTaskDescribe  string   `csv:"TargetTaskDescribe"`  //任务描述
+	SkipInterface       int32    `csv:"SkipInterface"`       //跳转界面
+	ShowState           int32    `csv:"ShowState"`           //是否显示进度
 }
+
 func TargetTaskCfgLoad(path string) {
 	cfg := []*TargetTaskCfg{}
 	TargetTaskCfgLoader = map[int32]*TargetTaskCfg{}
-	loadCsvCfg(path + "TargetTaskCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"TargetTaskCfg.csv", &cfg)
+	for _, row := range cfg {
 		TargetTaskCfgLoader[row.TargetTaskId] = row
 	}
 }
 
-var TopTowerCfgLevelLoader  map[int32]*TopTowerCfgLevel
-type TopTowerCfgLevel struct{
-	LevelId	int32	`csv:"LevelId"`		//区间ID
-	RankId	[]string	`csv:"RankId"`		//排名ID
-	LevelRank1	[]string	`csv:"LevelRank1"`		//第1层
-	LevelRank2	[]string	`csv:"LevelRank2"`		//第2层
-	LevelRank3	[]string	`csv:"LevelRank3"`		//第3层
-	LevelRank4	[]string	`csv:"LevelRank4"`		//第4层
-	LevelRank5	[]string	`csv:"LevelRank5"`		//第5层
-	LevelRank6	[]string	`csv:"LevelRank6"`		//第6层
-	LevelRank7	[]string	`csv:"LevelRank7"`		//第7层
-	LevelRank8	[]string	`csv:"LevelRank8"`		//第8层
-	LevelRank9	[]string	`csv:"LevelRank9"`		//第9层
-	LevelRank10	[]string	`csv:"LevelRank10"`		//第10层
+var TopTowerCfgLevelLoader map[int32]*TopTowerCfgLevel
+
+type TopTowerCfgLevel struct {
+	LevelId     int32    `csv:"LevelId"`     //区间ID
+	RankId      []string `csv:"RankId"`      //排名ID
+	LevelRank1  []string `csv:"LevelRank1"`  //第1层
+	LevelRank2  []string `csv:"LevelRank2"`  //第2层
+	LevelRank3  []string `csv:"LevelRank3"`  //第3层
+	LevelRank4  []string `csv:"LevelRank4"`  //第4层
+	LevelRank5  []string `csv:"LevelRank5"`  //第5层
+	LevelRank6  []string `csv:"LevelRank6"`  //第6层
+	LevelRank7  []string `csv:"LevelRank7"`  //第7层
+	LevelRank8  []string `csv:"LevelRank8"`  //第8层
+	LevelRank9  []string `csv:"LevelRank9"`  //第9层
+	LevelRank10 []string `csv:"LevelRank10"` //第10层
 }
+
 func TopTowerCfgLevelLoad(path string) {
 	cfg := []*TopTowerCfgLevel{}
 	TopTowerCfgLevelLoader = map[int32]*TopTowerCfgLevel{}
-	loadCsvCfg(path + "TopTowerCfgLevel.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"TopTowerCfgLevel.csv", &cfg)
+	for _, row := range cfg {
 		TopTowerCfgLevelLoader[row.LevelId] = row
 	}
 }
 
-var TopTowerCfgRewardLoader  map[int32]*TopTowerCfgReward
-type TopTowerCfgReward struct{
-	LevelId	int32	`csv:"LevelId"`		//层数
-	RewardItems	[]string	`csv:"RewardItems"`		//层数奖励
-	BuyRoadCost	[]string	`csv:"BuyRoadCost"`		//买路花费
+var TopTowerCfgRewardLoader map[int32]*TopTowerCfgReward
+
+type TopTowerCfgReward struct {
+	LevelId     int32    `csv:"LevelId"`     //层数
+	RewardItems []string `csv:"RewardItems"` //层数奖励
+	BuyRoadCost []string `csv:"BuyRoadCost"` //买路花费
 }
+
 func TopTowerCfgRewardLoad(path string) {
 	cfg := []*TopTowerCfgReward{}
 	TopTowerCfgRewardLoader = map[int32]*TopTowerCfgReward{}
-	loadCsvCfg(path + "TopTowerCfgReward.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"TopTowerCfgReward.csv", &cfg)
+	for _, row := range cfg {
 		TopTowerCfgRewardLoader[row.LevelId] = row
 	}
 }
 
-var TransportCfgLoader  map[int32]*TransportCfg
-type TransportCfg struct{
-	ShipLevel	int32	`csv:"ShipLevel"`		//飞艇等级
-	Duration	int32	`csv:"Duration"`		//远航完成时长
-	Consume	[]string	`csv:"Consume"`		//飞艇升级消耗
-	Probability	int32	`csv:"Probability"`		//飞艇升级成功率
-	TranspoertReward	[]string	`csv:"TranspoertReward"`		//远航完成奖励
-	RobberyTimes	int32	`csv:"RobberyTimes"`		//被打劫次数
-	RobberyLose	[]string	`csv:"RobberyLose"`		//被打劫后损失奖励
-	RobberyReward	[]string	`csv:"RobberyReward"`		//打劫奖励
-	RobberyFraction	int32	`csv:"RobberyFraction"`		//打劫获得积分
-	TopLevel	[]string	`csv:"TopLevel"`		//直接升至顶级
+var TransportCfgLoader map[int32]*TransportCfg
+
+type TransportCfg struct {
+	ShipLevel        int32    `csv:"ShipLevel"`        //飞艇等级
+	Duration         int32    `csv:"Duration"`         //远航完成时长
+	Consume          []string `csv:"Consume"`          //飞艇升级消耗
+	Probability      int32    `csv:"Probability"`      //飞艇升级成功率
+	TranspoertReward []string `csv:"TranspoertReward"` //远航完成奖励
+	RobberyTimes     int32    `csv:"RobberyTimes"`     //被打劫次数
+	RobberyLose      []string `csv:"RobberyLose"`      //被打劫后损失奖励
+	RobberyReward    []string `csv:"RobberyReward"`    //打劫奖励
+	RobberyFraction  int32    `csv:"RobberyFraction"`  //打劫获得积分
+	TopLevel         []string `csv:"TopLevel"`         //直接升至顶级
 }
+
 func TransportCfgLoad(path string) {
 	cfg := []*TransportCfg{}
 	TransportCfgLoader = map[int32]*TransportCfg{}
-	loadCsvCfg(path + "TransportCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"TransportCfg.csv", &cfg)
+	for _, row := range cfg {
 		TransportCfgLoader[row.ShipLevel] = row
 	}
 }
 
-var UIFuncUnLockCfgLoader  map[int32]*UIFuncUnLockCfg
-type UIFuncUnLockCfg struct{
-	Id	int32	`csv:"Id"`		//ID
-	UIId	int32	`csv:"UIId"`		//界面ID
-	UnlockCond	[]string	`csv:"UnlockCond"`		//解锁条件列表
-	LockNotice	string	`csv:"LockNotice"`		//锁定提示
-	NeedLock	bool	`csv:"NeedLock"`		//需要锁定
-	NeedMask	bool	`csv:"NeedMask"`		//需要按钮遮挡
-	NeedNotify	bool	`csv:"NeedNotify"`		//需要提示界面
-	NeedGuide	bool	`csv:"NeedGuide"`		//需要引导
-	NeedDisplay	bool	`csv:"NeedDisplay"`		//需要显示
-	PrePose	int32	`csv:"PrePose"`		//前置
-	PostPose	int32	`csv:"PostPose"`		//后置
-	ForceGuideGroup	int32	`csv:"ForceGuideGroup"`		//强制引导
+var UIFuncUnLockCfgLoader map[int32]*UIFuncUnLockCfg
+
+type UIFuncUnLockCfg struct {
+	Id              int32    `csv:"Id"`              //ID
+	UIId            int32    `csv:"UIId"`            //界面ID
+	UnlockCond      []string `csv:"UnlockCond"`      //解锁条件列表
+	LockNotice      string   `csv:"LockNotice"`      //锁定提示
+	NeedLock        bool     `csv:"NeedLock"`        //需要锁定
+	NeedMask        bool     `csv:"NeedMask"`        //需要按钮遮挡
+	NeedNotify      bool     `csv:"NeedNotify"`      //需要提示界面
+	NeedGuide       bool     `csv:"NeedGuide"`       //需要引导
+	NeedDisplay     bool     `csv:"NeedDisplay"`     //需要显示
+	PrePose         int32    `csv:"PrePose"`         //前置
+	PostPose        int32    `csv:"PostPose"`        //后置
+	ForceGuideGroup int32    `csv:"ForceGuideGroup"` //强制引导
 }
+
 func UIFuncUnLockCfgLoad(path string) {
 	cfg := []*UIFuncUnLockCfg{}
 	UIFuncUnLockCfgLoader = map[int32]*UIFuncUnLockCfg{}
-	loadCsvCfg(path + "UIFuncUnLockCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"UIFuncUnLockCfg.csv", &cfg)
+	for _, row := range cfg {
 		UIFuncUnLockCfgLoader[row.Id] = row
 	}
 }
 
-var VipCfgLoader  map[int32]*VipCfg
-type VipCfg struct{
-	Lv	int32	`csv:"Lv"`		//Vip等级
-	QuickBattle	int32	`csv:"QuickBattle"`		//战斗X2加速
-	Reward	[]string	`csv:"Reward"`		//Vip道具奖励
-	VipExp	int32	`csv:"VipExp"`		//Vip升级所需经验
-	EvilFreeTimes	int32	`csv:"EvilFreeTimes"`		//恶魔免费刷新次数
-	VipLogin	int32	`csv:"VipLogin"`		//VIP上线提示
-	PetAdvance	int32	`csv:"PetAdvance"`		//宠物进阶消耗免费
-	CardReset	int32	`csv:"CardReset"`		//卡片重铸免费
-	PetBreak	int32	`csv:"PetBreak"`		//宠物分解全额返还
-	SkillReset	int32	`csv:"SkillReset"`		//角色技能重置免费
-	GuildBossChallenge	int32	`csv:"GuildBossChallenge"`		//公会狩猎额外次数
-	CardInsertion	int32	`csv:"CardInsertion"`		//一键插卡功能
-	ShopWeight	int32	`csv:"ShopWeight"`		//黑市VIP权重
-	WorldBoss	int32	`csv:"WorldBoss"`		//世界BOSS刮奖次数
-	PvpReward	int32	`csv:"PvpReward"`		//额外荣誉之证
-	HangupTimes	int32	`csv:"HangupTimes"`		//时光之力购买次数
-	SilverUp	int32	`csv:"SilverUp"`		//银币加成
-	BaseExpUp	int32	`csv:"BaseExpUp"`		//基础经验加成
-	PartnerExpUp	int32	`csv:"PartnerExpUp"`		//伙伴经验加成
-	SkillExpUp	int32	`csv:"SkillExpUp"`		//技能经验加成
-	GiftBuyTimes	[]string	`csv:"GiftBuyTimes"`		//每日礼包购买次数+1
-	HangupDuration	int32	`csv:"HangupDuration"`		//离线挂机时长上限(秒)
-	SignInRewardUp	int32	`csv:"SignInRewardUp"`		//签到翻倍
-	WorldBossCount	int32	`csv:"WorldBossCount"`		//世界BOSS购买次数
-	DevilsUp	int32	`csv:"DevilsUp"`		//挂机魔魂值加成
-	TransportRobbery	int32	`csv:"TransportRobbery"`		//飞艇被抢劫掉落减少至
+var VipCfgLoader map[int32]*VipCfg
+
+type VipCfg struct {
+	Lv                 int32    `csv:"Lv"`                 //Vip等级
+	QuickBattle        int32    `csv:"QuickBattle"`        //战斗X2加速
+	Reward             []string `csv:"Reward"`             //Vip道具奖励
+	VipExp             int32    `csv:"VipExp"`             //Vip升级所需经验
+	EvilFreeTimes      int32    `csv:"EvilFreeTimes"`      //恶魔免费刷新次数
+	VipLogin           int32    `csv:"VipLogin"`           //VIP上线提示
+	PetAdvance         int32    `csv:"PetAdvance"`         //宠物进阶消耗免费
+	CardReset          int32    `csv:"CardReset"`          //卡片重铸免费
+	PetBreak           int32    `csv:"PetBreak"`           //宠物分解全额返还
+	SkillReset         int32    `csv:"SkillReset"`         //角色技能重置免费
+	GuildBossChallenge int32    `csv:"GuildBossChallenge"` //公会狩猎额外次数
+	CardInsertion      int32    `csv:"CardInsertion"`      //一键插卡功能
+	ShopWeight         int32    `csv:"ShopWeight"`         //黑市VIP权重
+	WorldBoss          int32    `csv:"WorldBoss"`          //世界BOSS刮奖次数
+	PvpReward          int32    `csv:"PvpReward"`          //额外荣誉之证
+	HangupTimes        int32    `csv:"HangupTimes"`        //时光之力购买次数
+	SilverUp           int32    `csv:"SilverUp"`           //银币加成
+	BaseExpUp          int32    `csv:"BaseExpUp"`          //基础经验加成
+	PartnerExpUp       int32    `csv:"PartnerExpUp"`       //伙伴经验加成
+	SkillExpUp         int32    `csv:"SkillExpUp"`         //技能经验加成
+	GiftBuyTimes       []string `csv:"GiftBuyTimes"`       //每日礼包购买次数+1
+	HangupDuration     int32    `csv:"HangupDuration"`     //离线挂机时长上限(秒)
+	SignInRewardUp     int32    `csv:"SignInRewardUp"`     //签到翻倍
+	WorldBossCount     int32    `csv:"WorldBossCount"`     //世界BOSS购买次数
+	DevilsUp           int32    `csv:"DevilsUp"`           //挂机魔魂值加成
+	TransportRobbery   int32    `csv:"TransportRobbery"`   //飞艇被抢劫掉落减少至
 }
+
 func VipCfgLoad(path string) {
 	cfg := []*VipCfg{}
 	VipCfgLoader = map[int32]*VipCfg{}
-	loadCsvCfg(path + "VipCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"VipCfg.csv", &cfg)
+	for _, row := range cfg {
 		VipCfgLoader[row.Lv] = row
 	}
 }
 
-var WishCfgLoader  map[int32]*WishCfg
-type WishCfg struct{
-	Id	int32	`csv:"Id"`		//ID
-	Name	string	`csv:"Name"`		//名字
-	BoxType	int32	`csv:"BoxType"`		//宝箱类型
-	WishReward	[]string	`csv:"WishReward"`		//许愿奖励(随机/权重:道具:数量/自选/道具:数量)
-	AccelerateCost	[]string	`csv:"AccelerateCost"`		//加速消耗
-	LuckyProbability	int32	`csv:"LuckyProbability"`		//暴击概率(百分比)
-	LuckyReward	[]string	`csv:"LuckyReward"`		//暴击奖励(概率:道具:数量)
-	WishCountdown	int32	`csv:"WishCountdown"`		//倒计时(秒)
+var WishCfgLoader map[int32]*WishCfg
+
+type WishCfg struct {
+	Id               int32    `csv:"Id"`               //ID
+	Name             string   `csv:"Name"`             //名字
+	BoxType          int32    `csv:"BoxType"`          //宝箱类型
+	WishReward       []string `csv:"WishReward"`       //许愿奖励(随机/权重:道具:数量/自选/道具:数量)
+	AccelerateCost   []string `csv:"AccelerateCost"`   //加速消耗
+	LuckyProbability int32    `csv:"LuckyProbability"` //暴击概率(百分比)
+	LuckyReward      []string `csv:"LuckyReward"`      //暴击奖励(概率:道具:数量)
+	WishCountdown    int32    `csv:"WishCountdown"`    //倒计时(秒)
 }
+
 func WishCfgLoad(path string) {
 	cfg := []*WishCfg{}
 	WishCfgLoader = map[int32]*WishCfg{}
-	loadCsvCfg(path + "WishCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"WishCfg.csv", &cfg)
+	for _, row := range cfg {
 		WishCfgLoader[row.Id] = row
 	}
 }
 
-var WorldBossCfgLoader  map[int32]*WorldBossCfg
-type WorldBossCfg struct{
-	Id	int32	`csv:"Id"`		//全局配置id
-	SummonId	int32	`csv:"SummonId"`		//召唤物id
-	StartDay	int32	`csv:"StartDay"`		//开服时间
-	Tiaozhantiaojian	int32	`csv:"Tiaozhantiaojian"`		//解锁条件
-	SummonTime	[]string	`csv:"SummonTime"`		//召唤时间
-	LifeTime	int32	`csv:"LifeTime"`		//存活时间
-	FirstRewardServer	[]string	`csv:"FirstRewardServer"`		//1等奖
-	SecondRewardServer	[]string	`csv:"SecondRewardServer"`		//2等奖
-	ThreeRewardServer	[]string	`csv:"ThreeRewardServer"`		//3等奖奖
-	Roll	[]string	`csv:"Roll"`		//中将概率
-	Roll2	[]string	`csv:"Roll2"`		//衰减概率
-	AutoHp	[]string	`csv:"AutoHp"`		//系统掉血
+var WorldBossCfgLoader map[int32]*WorldBossCfg
+
+type WorldBossCfg struct {
+	Id                 int32    `csv:"Id"`                 //全局配置id
+	SummonId           int32    `csv:"SummonId"`           //召唤物id
+	StartDay           int32    `csv:"StartDay"`           //开服时间
+	Tiaozhantiaojian   int32    `csv:"Tiaozhantiaojian"`   //解锁条件
+	SummonTime         []string `csv:"SummonTime"`         //召唤时间
+	LifeTime           int32    `csv:"LifeTime"`           //存活时间
+	FirstRewardServer  []string `csv:"FirstRewardServer"`  //1等奖
+	SecondRewardServer []string `csv:"SecondRewardServer"` //2等奖
+	ThreeRewardServer  []string `csv:"ThreeRewardServer"`  //3等奖奖
+	Roll               []string `csv:"Roll"`               //中将概率
+	Roll2              []string `csv:"Roll2"`              //衰减概率
+	AutoHp             []string `csv:"AutoHp"`             //系统掉血
 }
+
 func WorldBossCfgLoad(path string) {
 	cfg := []*WorldBossCfg{}
 	WorldBossCfgLoader = map[int32]*WorldBossCfg{}
-	loadCsvCfg(path + "WorldBossCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"WorldBossCfg.csv", &cfg)
+	for _, row := range cfg {
 		WorldBossCfgLoader[row.Id] = row
 	}
 }
 
-var WorldBossChangePlayCfgLoader  map[int32]*WorldBossChangePlayCfg
-type WorldBossChangePlayCfg struct{
-	Id	int32	`csv:"Id"`		//全局配置id
-	SummonId	int32	`csv:"SummonId"`		//召唤物id
-	Consume	[]string	`csv:"Consume"`		//消耗资源
-	StartTime	string	`csv:"StartTime"`		//活动开始时间
-	EndTime	string	`csv:"EndTime"`		//活动结束时间
-	SummonTime	[]string	`csv:"SummonTime"`		//召唤时间
-	LifeTime	int32	`csv:"LifeTime"`		//存活时间
-	ChangePlayId	[]string	`csv:"ChangePlayId"`		//变身
-	FirstRewardServer	[]string	`csv:"FirstRewardServer"`		//1等奖
-	SecondRewardServer	[]string	`csv:"SecondRewardServer"`		//2等奖
-	ThreeRewardServer	[]string	`csv:"ThreeRewardServer"`		//3等奖奖
-	Roll	[]string	`csv:"Roll"`		//中将概率
-	Roll2	[]string	`csv:"Roll2"`		//衰减概率
-	AutoHp	[]string	`csv:"AutoHp"`		//系统掉血
-	HpSegment	int32	`csv:"HpSegment"`		//血条段数
+var WorldBossChangePlayCfgLoader map[int32]*WorldBossChangePlayCfg
+
+type WorldBossChangePlayCfg struct {
+	Id                 int32    `csv:"Id"`                 //全局配置id
+	SummonId           int32    `csv:"SummonId"`           //召唤物id
+	Consume            []string `csv:"Consume"`            //消耗资源
+	StartTime          string   `csv:"StartTime"`          //活动开始时间
+	EndTime            string   `csv:"EndTime"`            //活动结束时间
+	SummonTime         []string `csv:"SummonTime"`         //召唤时间
+	LifeTime           int32    `csv:"LifeTime"`           //存活时间
+	ChangePlayId       []string `csv:"ChangePlayId"`       //变身
+	FirstRewardServer  []string `csv:"FirstRewardServer"`  //1等奖
+	SecondRewardServer []string `csv:"SecondRewardServer"` //2等奖
+	ThreeRewardServer  []string `csv:"ThreeRewardServer"`  //3等奖奖
+	Roll               []string `csv:"Roll"`               //中将概率
+	Roll2              []string `csv:"Roll2"`              //衰减概率
+	AutoHp             []string `csv:"AutoHp"`             //系统掉血
+	HpSegment          int32    `csv:"HpSegment"`          //血条段数
 }
+
 func WorldBossChangePlayCfgLoad(path string) {
 	cfg := []*WorldBossChangePlayCfg{}
 	WorldBossChangePlayCfgLoader = map[int32]*WorldBossChangePlayCfg{}
-	loadCsvCfg(path + "WorldBossChangePlayCfg.csv", &cfg)
-	for _,row := range cfg{
+	loadCsvCfg(path+"WorldBossChangePlayCfg.csv", &cfg)
+	for _, row := range cfg {
 		WorldBossChangePlayCfgLoader[row.Id] = row
 	}
-}
+}
+
+var HardLevelCfgLoader map[int32]*HardLevelCfg
+
+type HardLevelCfg struct {
+	Id         int32 `csv:"Id"`         //唯一id
+	LevelId    int32 `csv:"LevelId"`    //场景id
+	MapId      int32 `csv:"MapId"`      //地图id
+	BaseExp    int32 `csv:"BaseExp"`    //通关base经验
+	JobExp     int32 `csv:"JobExp"`     //通关job经验
+	Zeny       int32 `csv:"Zeny"`       //通关银币
+	Gold       int32 `csv:"Gold"`       //通关金币
+	Parter     int32 `csv:"Parter"`     //通关伙伴经验
+	Cash       int32 `csv:"Cash"`       //活动通关现金
+	FreeInvest int32 `csv:"FreeInvest"` //通关免费充值额度
+}
+
+func HardLevelCfgLoad(path string) {
+	cfg := []*HardLevelCfg{}
+	HardLevelCfgLoader = map[int32]*HardLevelCfg{}
+	loadCsvCfg(path+"HardLevelCfg.csv", &cfg)
+	for _, row := range cfg {
+		HardLevelCfgLoader[row.Id] = row
+	}
+}