From 3d1dc6314df3444d090f645a5fdcdcbecf64a1ee Mon Sep 17 00:00:00 2001 From: KimLS Date: Sun, 7 Jun 2015 19:42:12 -0700 Subject: [PATCH 01/48] New style AA data loading, still rudimentary --- zone/CMakeLists.txt | 1 + zone/aa.cpp | 126 +++++++++++++++++++++++++++++++++++++++++ zone/aa_ability.h | 45 +++++++++++++++ zone/aa_rank.h | 44 ++++++++++++++ zone/aa_rank_effects.h | 37 ++++++++++++ zone/aa_rank_prereqs.h | 33 +++++++++++ zone/client_packet.cpp | 2 + zone/entity.cpp | 1 - zone/net.cpp | 1 - zone/zone.cpp | 7 +-- zone/zone.h | 13 ++++- zone/zonedb.h | 7 ++- 12 files changed, 308 insertions(+), 9 deletions(-) create mode 100644 zone/aa_ability.h create mode 100644 zone/aa_rank.h create mode 100644 zone/aa_rank_effects.h create mode 100644 zone/aa_rank_prereqs.h diff --git a/zone/CMakeLists.txt b/zone/CMakeLists.txt index 2510dcddb..4340ff6da 100644 --- a/zone/CMakeLists.txt +++ b/zone/CMakeLists.txt @@ -125,6 +125,7 @@ SET(zone_sources SET(zone_headers aa.h + aa_ability.h basic_functions.h beacon.h bot.h diff --git a/zone/aa.cpp b/zone/aa.cpp index b6e220d60..c98e31372 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -2070,3 +2070,129 @@ Mob *AA_SwarmPetInfo::GetOwner() { return entity_list.GetMobID(owner_id); } + +//New AA +void Zone::LoadAlternateAdvancement() { + Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Data..."); + if(!database.LoadAlternateAdvancementAbilities(zone->aa_abilities, + zone->aa_ranks)) + { + zone->aa_abilities.clear(); + zone->aa_ranks.clear(); + Log.Out(Logs::General, Logs::Status, "Failed to load Alternate Advancement Data"); + return; + } + + Log.Out(Logs::General, Logs::Status, "Loaded Alternate Advancement Data"); +} + +bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map> &abilities, + std::unordered_map> &ranks) +{ + Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Abilities..."); + abilities.clear(); + std::string query = "SELECT id, name, expansion, category, classes, expendable, first_rank_id FROM aa_ability"; + auto results = QueryDatabase(query); + if(results.Success()) { + for(auto row = results.begin(); row != results.end(); ++row) { + AA::Ability *ability = new AA::Ability; + int id = atoi(row[0]); + + ability->name = row[1]; + ability->expansion = atoi(row[2]); + ability->category = atoi(row[3]); + ability->classes = atoi(row[4]); + ability->expendable = atoi(row[5]) != 0 ? true : false; + ability->first_rank_id = atoi(row[6]); + + abilities[id] = std::unique_ptr(ability); + } + } else { + Log.Out(Logs::General, Logs::Error, "Failed to load Alternate Advancement Abilities"); + return false; + } + + Log.Out(Logs::General, Logs::Status, "Loaded %d Alternate Advancement Abilities", (int)abilities.size()); + + Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Ability Ranks..."); + ranks.clear(); + query = "SELECT id, upper_hotkey_sid, lower_hotkey_sid, title_sid, desc_sid, cost, level_req, spell, spell_type, recast_time, " + "prev_id, next_id FROM aa_ranks"; + results = QueryDatabase(query); + if(results.Success()) { + for(auto row = results.begin(); row != results.end(); ++row) { + AA::Rank *rank = new AA::Rank; + int id = atoi(row[0]); + rank->upper_hotkey_sid = atoi(row[1]); + rank->lower_hotkey_sid = atoi(row[2]); + rank->title_sid = atoi(row[3]); + rank->desc_sid = atoi(row[4]); + rank->cost = atoi(row[5]); + rank->level_req = atoi(row[6]); + rank->spell = atoi(row[7]); + rank->spell_type = atoi(row[8]); + rank->recast_time = atoi(row[9]); + rank->prev_id = atoi(row[10]); + rank->next_id = atoi(row[11]); + + ranks[id] = std::unique_ptr(rank); + } + } else { + Log.Out(Logs::General, Logs::Error, "Failed to load Alternate Advancement Ability Ranks"); + return false; + } + + Log.Out(Logs::General, Logs::Status, "Loaded %d Alternate Advancement Ability Ranks", (int)ranks.size()); + + Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Ability Rank Effects..."); + query = "SELECT rank_id, slot, effect_id, base1, base2 FROM aa_rank_effects"; + results = QueryDatabase(query); + if(results.Success()) { + for(auto row = results.begin(); row != results.end(); ++row) { + AA::RankEffect effect; + int rank_id = atoi(row[0]); + int slot = atoi(row[1]); + effect.effect_id = atoi(row[2]); + effect.base1 = atoi(row[3]); + effect.base2 = atoi(row[4]); + + if(slot < 1 || slot > 12) + continue; + + if(ranks.count(rank_id) > 0) { + AA::Rank *rank = ranks[rank_id].get(); + rank->effects[slot] = effect; + } + } + } else { + Log.Out(Logs::General, Logs::Error, "Failed to load Alternate Advancement Ability Rank Effects"); + return false; + } + + Log.Out(Logs::General, Logs::Status, "Loaded Alternate Advancement Ability Rank Effects"); + + Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Ability Rank Prereqs..."); + query = "SELECT rank_id, aa_id, points FROM aa_rank_prereqs"; + results = QueryDatabase(query); + if(results.Success()) { + for(auto row = results.begin(); row != results.end(); ++row) { + AA::RankPrereq prereq; + int rank_id = atoi(row[0]); + prereq.aa_id = atoi(row[1]); + prereq.points = atoi(row[1]); + + if(ranks.count(rank_id) > 0) { + AA::Rank *rank = ranks[rank_id].get(); + rank->prereqs.push_back(prereq); + } + } + } else { + Log.Out(Logs::General, Logs::Error, "Failed to load Alternate Advancement Ability Rank Prereqs"); + return false; + } + + Log.Out(Logs::General, Logs::Status, "Loaded Alternate Advancement Ability Rank Prereqs"); + + return true; +} + diff --git a/zone/aa_ability.h b/zone/aa_ability.h new file mode 100644 index 000000000..bb9148689 --- /dev/null +++ b/zone/aa_ability.h @@ -0,0 +1,45 @@ +/* EQEMu: Everquest Server Emulator + Copyright (C) 2001-2015 EQEMu Development Team (http://eqemulator.net) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY except by those people which sell it, which + are required to give you total support for your newly bought product; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef EQEMU_ZONE_AA_ABILITY_H +#define EQEMU_ZONE_AA_ABILITY_H + +#include "../common/global_define.h" +#include +#include +#include +#include "aa_rank_effects.h" +#include "aa_rank_prereqs.h" +#include "aa_rank.h" + +namespace AA +{ + +struct Ability +{ + std::string name; + int expansion; + int category; + int classes; + bool expendable; + int first_rank_id; +}; + +} + +#endif diff --git a/zone/aa_rank.h b/zone/aa_rank.h new file mode 100644 index 000000000..ec1cc4115 --- /dev/null +++ b/zone/aa_rank.h @@ -0,0 +1,44 @@ +/* EQEMu: Everquest Server Emulator + Copyright (C) 2001-2015 EQEMu Development Team (http://eqemulator.net) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY except by those people which sell it, which + are required to give you total support for your newly bought product; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef EQEMU_ZONE_AA_RANK_H +#define EQEMU_ZONE_AA_RANK_H + +namespace AA +{ + +struct Rank +{ + int upper_hotkey_sid; + int lower_hotkey_sid; + int title_sid; + int desc_sid; + int cost; + int level_req; + int spell; + int spell_type; + int recast_time; + int prev_id; + int next_id; + std::unordered_map effects; + std::vector prereqs; +}; + +} + +#endif diff --git a/zone/aa_rank_effects.h b/zone/aa_rank_effects.h new file mode 100644 index 000000000..fd65d507f --- /dev/null +++ b/zone/aa_rank_effects.h @@ -0,0 +1,37 @@ +/* EQEMu: Everquest Server Emulator + Copyright (C) 2001-2015 EQEMu Development Team (http://eqemulator.net) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY except by those people which sell it, which + are required to give you total support for your newly bought product; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef EQEMU_ZONE_AA_RANK_EFFECTS_H +#define EQEMU_ZONE_AA_RANK_EFFECTS_H + +#include "../common/global_define.h" +#include + +namespace AA +{ + +struct RankEffect +{ + int effect_id; + int base1; + int base2; +}; + +} + +#endif diff --git a/zone/aa_rank_prereqs.h b/zone/aa_rank_prereqs.h new file mode 100644 index 000000000..b1620be6c --- /dev/null +++ b/zone/aa_rank_prereqs.h @@ -0,0 +1,33 @@ +/* EQEMu: Everquest Server Emulator + Copyright (C) 2001-2015 EQEMu Development Team (http://eqemulator.net) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY except by those people which sell it, which + are required to give you total support for your newly bought product; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef EQEMU_ZONE_AA_RANK_PREREQS_H +#define EQEMU_ZONE_AA_RANK_PREREQS_H + +namespace AA +{ + +struct RankPrereq +{ + int aa_id; + int points; +}; + +} + +#endif diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 8a7b8a133..112e8f33f 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1091,6 +1091,7 @@ void Client::Handle_Connect_OP_SendAAStats(const EQApplicationPacket *app) void Client::Handle_Connect_OP_SendAATable(const EQApplicationPacket *app) { + Log.Out(Logs::General, Logs::Error, "SendAAList()"); SendAAList(); return; } @@ -1152,6 +1153,7 @@ void Client::Handle_Connect_OP_TGB(const EQApplicationPacket *app) void Client::Handle_Connect_OP_UpdateAA(const EQApplicationPacket *app) { + Log.Out(Logs::General, Logs::Error, "SendAATable()"); SendAATable(); } diff --git a/zone/entity.cpp b/zone/entity.cpp index baa4f4354..a73b21f4d 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -58,7 +58,6 @@ extern uint32 numclients; extern PetitionList petition_list; extern char errorname[32]; -extern uint16 adverrornum; Entity::Entity() { diff --git a/zone/net.cpp b/zone/net.cpp index ef6b46836..0178eff21 100644 --- a/zone/net.cpp +++ b/zone/net.cpp @@ -96,7 +96,6 @@ EntityList entity_list; WorldServer worldserver; uint32 numclients = 0; char errorname[32]; -uint16 adverrornum = 0; extern Zone* zone; EQStreamFactory eqsf(ZoneStream); npcDecayTimes_Struct npcCorpseDecayTimes[100]; diff --git a/zone/zone.cpp b/zone/zone.cpp index e58bea24a..31bc27b41 100644 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -68,7 +68,6 @@ extern bool staticzone; extern NetConnection net; extern PetitionList petition_list; extern QuestParserCollection* parse; -extern uint16 adverrornum; extern uint32 numclients; extern WorldServer worldserver; extern Zone* zone; @@ -954,15 +953,14 @@ bool Zone::Init(bool iStaticZone) { zone->LoadNPCEmotes(&NPCEmoteList); //Load AA information - adverrornum = 500; LoadAAs(); + LoadAlternateAdvancement(); + //Load merchant data - adverrornum = 501; zone->GetMerchantDataForZoneLoad(); //Load temporary merchant data - adverrornum = 502; zone->LoadTempMerchantData(); // Merc data @@ -974,7 +972,6 @@ bool Zone::Init(bool iStaticZone) { if (RuleB(Zone, LevelBasedEXPMods)) zone->LoadLevelEXPMods(); - adverrornum = 503; petition_list.ClearPetitions(); petition_list.ReadDatabase(); diff --git a/zone/zone.h b/zone/zone.h index 7b1b855a7..274a1a021 100644 --- a/zone/zone.h +++ b/zone/zone.h @@ -27,6 +27,7 @@ #include "qglobals.h" #include "spawn2.h" #include "spawngroup.h" +#include "aa_ability.h" struct ZonePoint { @@ -113,12 +114,17 @@ public: inline const uint32& GetMaxClients() { return pMaxClients; } + //new AA + void LoadAlternateAdvancement(); + + //old AA void LoadAAs(); int GetTotalAAs() { return totalAAs; } SendAA_Struct* GetAABySequence(uint32 seq) { return aas[seq]; } SendAA_Struct* FindAA(uint32 id); uint8 GetTotalAALevels(uint32 skill_id); - void LoadZoneDoors(const char* zone, int16 version); + + void LoadZoneDoors(const char* zone, int16 version); bool LoadZoneObjects(); bool LoadGroundSpawns(); void ReloadStaticData(); @@ -313,6 +319,11 @@ private: int totalBS; ZoneSpellsBlocked *blocked_spells; + //new AA + std::unordered_map> aa_abilities; + std::unordered_map> aa_ranks; + + //old AA int totalAAs; SendAA_Struct **aas; //array of AA structs diff --git a/zone/zonedb.h b/zone/zonedb.h index cac380a96..dda01b7dc 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -6,6 +6,7 @@ #include "position.h" #include "../common/faction.h" #include "../common/eqemu_logsys.h" +#include "aa_ability.h" class Client; class Corpse; @@ -339,7 +340,11 @@ public: bool SetCharacterFactionLevel(uint32 char_id, int32 faction_id, int32 value, uint8 temp, faction_map &val_list); // needed for factions Dec, 16 2001 bool LoadFactionData(); - /* AAs */ + /* AAs New */ + bool LoadAlternateAdvancementAbilities(std::unordered_map> &abilities, + std::unordered_map> &ranks); + + /* AAs Old */ bool LoadAAEffects(); bool LoadAAEffects2(); bool LoadSwarmSpells(); From 3ee1c43ac401a612c9dae5f6b2d1bdc38f5dc0bc Mon Sep 17 00:00:00 2001 From: KimLS Date: Mon, 8 Jun 2015 09:53:21 -0700 Subject: [PATCH 02/48] Remove old aa list send for experiment also want to merge from master... --- common/eq_packet_structs.h | 45 ++++++++++++++++++++++++++++++++++++++ zone/aa.cpp | 8 +++---- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index e5ab88e57..adfa3d9ee 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -4218,6 +4218,51 @@ struct UseAA_Struct { uint32 end; }; +//new AA stuff + +struct AARankInfo_Struct +{ + uint32 id; + int32 upper_hotkey_sid; + int32 lower_hotkey_sid; + int32 title_sid; + int32 desc_sid; + int32 level_req; + int32 cost; + uint32 seq; + uint32 current_level; + uint32 type; + int32 spell; + int32 spell_type; + int32 spell_refresh; + int32 classes; + int32 max_level; + int32 prev_id; + int32 next_id; + int32 total_cost; + int32 expansion; + int32 category; + uint8 expendable; + uint32 total_effects; + uint32 total_prereqs; +}; + +struct AARankPrereq_Struct +{ + int32 aa_id; + int32 points; +}; + +struct AARankEffect_Struct +{ + int32 effect_id; + int32 base1; + int32 base2; + int32 slot; +}; + +//old AA stuff + struct AA_Ability { /*00*/ uint32 skill_id; /*04*/ uint32 base1; diff --git a/zone/aa.cpp b/zone/aa.cpp index c98e31372..1a8b5f5c5 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1377,10 +1377,10 @@ void Client::SendAA(uint32 id, int seq) { } void Client::SendAAList(){ - int total = zone->GetTotalAAs(); - for(int i=0;i < total;i++){ - SendAA(0,i); - } +// int total = zone->GetTotalAAs(); +// for(int i=0;i < total;i++){ +// SendAA(0,i); +// } } uint32 Client::GetAA(uint32 aa_id) const { From 250d0cc9036475d1622893c27321f649b443c69e Mon Sep 17 00:00:00 2001 From: KimLS Date: Mon, 8 Jun 2015 20:06:14 -0700 Subject: [PATCH 03/48] More aa work, it actually loads yay --- common/eq_packet_structs.h | 3 +- common/patches/uf.cpp | 71 +++++++- common/patches/uf_structs.h | 3 +- zone/CMakeLists.txt | 1 + zone/aa.cpp | 315 +++++++++++++++++++++++++++++++++--- zone/aa_ability.cpp | 69 ++++++++ zone/aa_ability.h | 15 +- zone/aa_rank.h | 12 +- zone/client.h | 6 +- zone/client_packet.cpp | 7 +- zone/zone.h | 5 + 11 files changed, 469 insertions(+), 38 deletions(-) create mode 100644 zone/aa_ability.cpp diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index da965f4ba..d2d9ae8b3 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -4220,7 +4220,7 @@ struct UseAA_Struct { }; //new AA stuff - +//reference only struct AARankInfo_Struct { uint32 id; @@ -4244,6 +4244,7 @@ struct AARankInfo_Struct int32 expansion; int32 category; uint8 expendable; + uint8 grant_only; uint32 total_effects; uint32 total_prereqs; }; diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index deedcec5f..bbe0c0f0d 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -1804,11 +1804,11 @@ namespace UF // OUT(unknown00224[48]); //NOTE: new client supports 300 AAs, our internal rep/PP //only supports 240.. - for (r = 0; r < MAX_PP_AA_ARRAY; r++) { - OUT(aa_array[r].AA); - OUT(aa_array[r].value); - OUT(aa_array[r].charges); - } + //for (r = 0; r < MAX_PP_AA_ARRAY; r++) { + // OUT(aa_array[r].AA); + // OUT(aa_array[r].value); + // OUT(aa_array[r].charges); + //} // OUT(unknown02220[4]); OUT(mana); OUT(cur_hp); @@ -2145,13 +2145,66 @@ namespace UF ENCODE(OP_SendAATable) { +#if 1 + EQApplicationPacket *inapp = *p; + *p = nullptr; + AARankInfo_Struct *emu = (AARankInfo_Struct*)inapp->pBuffer; + + EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, sizeof(structs::SendAA_Struct) + emu->total_effects * sizeof(structs::AA_Ability)); + structs::SendAA_Struct *eq = (structs::SendAA_Struct*)outapp->pBuffer; + + inapp->SetReadPosition(sizeof(AARankInfo_Struct)); + outapp->SetWritePosition(sizeof(structs::SendAA_Struct)); + + eq->id = emu->id; + eq->unknown004 = 1; + eq->id = emu->id; + eq->hotkey_sid = emu->upper_hotkey_sid; + eq->hotkey_sid2 = emu->lower_hotkey_sid; + eq->desc_sid = emu->desc_sid; + eq->title_sid = emu->title_sid; + eq->class_type = emu->level_req; + eq->cost = emu->cost; + eq->seq = emu->seq; + eq->current_level = emu->current_level; + eq->type = emu->type; + eq->spellid = emu->spell; + eq->spell_type = emu->spell_type; + eq->spell_refresh = emu->spell_refresh; + eq->classes = emu->classes; + eq->max_level = emu->max_level; + eq->last_id = emu->prev_id; + eq->next_id = emu->next_id; + eq->cost2 = emu->total_cost; + eq->grant_only = emu->grant_only > 0 ? true : false; + eq->expendable_charges = emu->expendable ? 1 : 0; + eq->aa_expansion = emu->expansion; + eq->special_category = emu->category; + eq->total_abilities = emu->total_effects; + + for(auto i = 0; i < eq->total_abilities; ++i) { + eq->abilities[i].skill_id = inapp->ReadUInt32(); + eq->abilities[i].base1 = inapp->ReadUInt32(); + eq->abilities[i].base2 = inapp->ReadUInt32(); + eq->abilities[i].slot = inapp->ReadUInt32(); + } + + if(emu->total_prereqs > 0) { + eq->prereq_skill = -(int)inapp->ReadUInt32(); + eq->prereq_minpoints = inapp->ReadUInt32(); + } + + Log.Out(Logs::General, Logs::Status, "%s", DumpPacketToString(outapp).c_str()); + dest->FastQueuePacket(&outapp); + delete inapp; +#else ENCODE_LENGTH_ATLEAST(SendAA_Struct); SETUP_VAR_ENCODE(SendAA_Struct); ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); // Check clientver field to verify this AA should be sent for SoF // clientver 1 is for all clients and 6 is for Underfoot - if (emu->clientver <= 6) + if(emu->clientver <= 6) { OUT(id); eq->unknown004 = 1; @@ -2174,7 +2227,7 @@ namespace UF OUT(spell_type); OUT(spell_refresh); OUT(classes); - OUT(berserker); + //OUT(berserker); //eq->max_level = emu->sof_max_level; OUT(max_level); OUT(last_id); @@ -2185,7 +2238,7 @@ namespace UF eq->expendable_charges = emu->special_category == 7 ? 1 : 0; // temp hack, this can actually be any number OUT(total_abilities); unsigned int r; - for (r = 0; r < emu->total_abilities; r++) { + for(r = 0; r < emu->total_abilities; r++) { OUT(abilities[r].skill_id); OUT(abilities[r].base1); OUT(abilities[r].base2); @@ -2193,7 +2246,9 @@ namespace UF } } + Log.Out(Logs::General, Logs::Status, "%s", DumpPacketToString(__packet).c_str()); FINISH_ENCODE(); +#endif } ENCODE(OP_SendCharInfo) diff --git a/common/patches/uf_structs.h b/common/patches/uf_structs.h index c943c6ea5..36d6dea74 100644 --- a/common/patches/uf_structs.h +++ b/common/patches/uf_structs.h @@ -3886,8 +3886,7 @@ struct SendAA_Struct { /*0049*/ uint32 spellid; /*0053*/ uint32 spell_type; /*0057*/ uint32 spell_refresh; -/*0061*/ uint16 classes; -/*0063*/ uint16 berserker; //seems to be 1 if its a berserker ability +/*0061*/ uint32 classes; /*0065*/ uint32 max_level; /*0069*/ uint32 last_id; /*0073*/ uint32 next_id; diff --git a/zone/CMakeLists.txt b/zone/CMakeLists.txt index a68945155..ba9aa8620 100644 --- a/zone/CMakeLists.txt +++ b/zone/CMakeLists.txt @@ -2,6 +2,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) SET(zone_sources aa.cpp + aa_ability.cpp aggro.cpp attack.cpp beacon.cpp diff --git a/zone/aa.cpp b/zone/aa.cpp index edca1ebdb..88e2a2e56 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1097,22 +1097,24 @@ void Client::SendAATimers() { } void Client::SendAATable() { + Log.Out(Logs::General, Logs::Status, "SendAATable()"); EQApplicationPacket* outapp = new EQApplicationPacket(OP_RespondAA, sizeof(AATable_Struct)); AATable_Struct* aa2 = (AATable_Struct *)outapp->pBuffer; - aa2->aa_spent = GetAAPointsSpent(); - - uint32 i; - for(i=0;i < MAX_PP_AA_ARRAY;i++){ - aa2->aa_list[i].AA = aa[i]->value ? aa[i]->AA : 0; // bit of a hack to prevent expendables punching a hole - aa2->aa_list[i].value = aa[i]->value; - aa2->aa_list[i].charges = aa[i]->charges; - } + //aa2->aa_spent = GetAAPointsSpent(); + // + //uint32 i; + //for(i=0;i < MAX_PP_AA_ARRAY;i++){ + // aa2->aa_list[i].AA = aa[i]->value ? aa[i]->AA : 0; // bit of a hack to prevent expendables punching a hole + // aa2->aa_list[i].value = aa[i]->value; + // aa2->aa_list[i].charges = aa[i]->charges; + //} QueuePacket(outapp); safe_delete(outapp); } void Client::SendPreviousAA(uint32 id, int seq){ + Log.Out(Logs::General, Logs::Status, "SendPreviousAA(%u, %i)", id, seq); uint32 value=0; SendAA_Struct* saa2 = nullptr; if(id==0) @@ -1148,11 +1150,13 @@ void Client::SendPreviousAA(uint32 id, int seq){ } database.FillAAEffects(saa); + Log.Out(Logs::General, Logs::Status, "%s", DumpPacketToString(outapp).c_str()); QueuePacket(outapp); safe_delete(outapp); } void Client::SendAA(uint32 id, int seq) { + Log.Out(Logs::General, Logs::Status, "SendAA(%u, %i)", id, seq); uint32 value=0; SendAA_Struct* saa2 = nullptr; @@ -1368,6 +1372,7 @@ void Client::SendAA(uint32 id, int seq) { EQApplicationPacket* outapp = new EQApplicationPacket(OP_SendAATable); outapp->size=size; outapp->pBuffer=(uchar*)saa; + if(id==0 && value && (orig_val < saa->max_level)) //send previous AA only on zone in SendPreviousAA(id, seq); @@ -1377,10 +1382,13 @@ void Client::SendAA(uint32 id, int seq) { } void Client::SendAAList(){ -// int total = zone->GetTotalAAs(); -// for(int i=0;i < total;i++){ -// SendAA(0,i); -// } + Log.Out(Logs::General, Logs::Status, "SendAAList()"); + int total = zone->GetTotalAAs(); + + total = total > 2 ? 2 : total; + for(int i=0;i < total;i++){ + SendAA(0,i); + } } uint32 Client::GetAA(uint32 aa_id) const { @@ -2080,39 +2088,300 @@ Mob *AA_SwarmPetInfo::GetOwner() return entity_list.GetMobID(owner_id); } +void Client::SendAlternateAdvancementList() { + for(auto &aa : zone->aa_abilities) { + SendAlternateAdvancement(aa.first, true); + } +} + //New AA +void Client::SendAlternateAdvancement(int aa_id, bool first_login) { + if(!zone) + return; + + AA::Ability *ability = zone->GetAlternateAdvancementAbility(aa_id); + + if(!ability) + return; + + if(!(ability->classes & (1 << GetClass()))) { + return; + } + + if(ability->account_time_required) { + if((Timer::GetTimeSeconds() - account_creation) < ability->account_time_required) + { + return; + } + } + + // Hide Quest/Progression AAs unless player has been granted the first level using $client->IncrementAA(skill_id). + if(ability->category == 1 || ability->category == 2) { + //if(GetAA(saa2->id) == 0) + // return; + + if(ability->expansion > 0) { + AA::Ability *qaa = zone->GetAlternateAdvancementAbility(aa_id + 1); + //if(qaa && qaa->expansion == ability->expansion && GetAA(aa_id) > 0) { + // return; + //} + } + } + + // Passive and Active Shroud AAs + // For now we skip them + if(ability->category == 3 || ability->category == 4) { + return; + } + + // Check for racial/Drakkin blood line AAs + if(ability->category == 8) + { + uint32 client_race = GetBaseRace(); + + // Drakkin Bloodlines + if(ability->expansion > 522) + { + if(client_race != 522) + return; + + int heritage = this->GetDrakkinHeritage() + 523; // 523 = Drakkin Race(522) + Bloodline + + if(heritage != ability->expansion) + return; + } + else if(client_race != ability->expansion) + { + return; + } + } + + //Send first rank + AA::Rank *rank = ability->first; + if(!rank) + return; + + //Should move this to another function + int size = sizeof(AARankInfo_Struct)+(sizeof(AARankEffect_Struct)* rank->effects.size()) + (sizeof(AARankPrereq_Struct)* rank->prereqs.size()); + EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, size); + AARankInfo_Struct *aai = (AARankInfo_Struct*)outapp->pBuffer; + + aai->id = rank->id; + aai->upper_hotkey_sid = rank->upper_hotkey_sid; + aai->lower_hotkey_sid = rank->lower_hotkey_sid; + aai->title_sid = rank->title_sid; + aai->desc_sid = rank->desc_sid; + aai->level_req = rank->level_req; + aai->cost = rank->cost; + aai->seq = aa_id; + aai->current_level = 1; + aai->type = ability->type; + aai->spell = rank->spell; + aai->spell_type = rank->spell_type; + aai->spell_refresh = rank->recast_time; + aai->classes = ability->classes; + aai->max_level = ability->GetMaxLevel(); + aai->prev_id = rank->prev_id; + aai->next_id = rank->next_id; + aai->total_cost = rank->total_cost; + aai->expansion = ability->expansion; + aai->category = ability->category; + aai->expendable = ability->expendable; + aai->grant_only = ability->grant_only; + aai->total_effects = rank->effects.size(); + aai->total_prereqs = rank->prereqs.size(); + + outapp->SetWritePosition(sizeof(AARankInfo_Struct)); + for(auto effect : rank->effects) { + outapp->WriteSInt32(effect.second.effect_id); + outapp->WriteSInt32(effect.second.base1); + outapp->WriteSInt32(effect.second.base2); + outapp->WriteSInt32(effect.first); + } + + for(auto prereq : rank->prereqs) { + outapp->WriteSInt32(prereq.aa_id); + outapp->WriteSInt32(prereq.points); + } + + //if first_login then also send current rank if not maxed + + QueuePacket(outapp); + safe_delete(outapp); + + // + //if(size == 0) + // return; + // + //uchar* buffer = new uchar[size]; + //SendAA_Struct* saa = (SendAA_Struct*)buffer; + //memcpy(saa, saa2, size); + // + //if(saa->spellid == 0) + // saa->spellid = 0xFFFFFFFF; + // + //value = GetAA(saa->id); + //uint32 orig_val = value; + // + //if(value && saa->id){ + // + // if(value < saa->max_level){ + // saa->id += value; + // saa->next_id = saa->id + 1; + // value++; + // } + // + // else if(aa_stack && saa->sof_next_id){ + // saa->id += value - 1; + // saa->next_id = saa->sof_next_id; + // + // //Prevent removal of previous AA from window if next AA belongs to a higher client version. + // SendAA_Struct* saa_next = nullptr; + // saa_next = zone->FindAA(saa->sof_next_id); + // + // // this check should work as long as we continue to just add the clients and just increase + // // each number .... + // if(saa_next && static_cast(GetClientVersion()) < saa_next->clientver - 1) { + // saa->next_id = 0xFFFFFFFF; + // } + // } + // + // else{ + // saa->id += value - 1; + // saa->next_id = 0xFFFFFFFF; + // } + // + // uint32 current_level_mod = 0; + // if(aa_stack) + // current_level_mod = saa->sof_current_level; + // + // saa->last_id = saa->id - 1; + // saa->current_level = value + (current_level_mod); + // saa->cost = saa2->cost + (saa2->cost_inc*(value - 1)); + // saa->cost2 = 0; + // for(uint32 i = 0; i < value; i++) { + // saa->cost2 += saa2->cost + (saa2->cost_inc * i); + // } + // saa->class_type = saa2->class_type + (saa2->level_inc*(value - 1)); + //} + // + //if(aa_stack){ + // + // if(saa->sof_current_level >= 1 && value == 0) + // saa->current_level = saa->sof_current_level + 1; + // + // saa->max_level = saa->sof_max_level; + //} + // + //database.FillAAEffects(saa); + // + //if(value > 0) + //{ + // // AA_Action stores the base ID + // const AA_DBAction *caa = &AA_Actions[saa->id - value + 1][value - 1]; + // + // if(caa && caa->reuse_time > 0) + // saa->spell_refresh = CalcAAReuseTimer(caa); + //} + // + ////You can now use the level_inc field in the altadv_vars table to accomplish this, though still needed + ////for special cases like LOH/HT due to inability to implement correct stacking of AA's that use hotkeys. + //std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(saa->id); + // + //if(RequiredLevel != AARequiredLevelAndCost.end()) + //{ + // saa->class_type = RequiredLevel->second.Level; + // saa->cost = RequiredLevel->second.Cost; + //} + // + // + //EQApplicationPacket* outapp = new EQApplicationPacket(OP_SendAATable); + //outapp->size = size; + //outapp->pBuffer = (uchar*)saa; + //if(id == 0 && value && (orig_val < saa->max_level)) //send previous AA only on zone in + // SendPreviousAA(id, seq); + // + //QueuePacket(outapp); + //safe_delete(outapp); + ////will outapp delete the buffer for us even though it didnt make it? --- Yes, it should +} + void Zone::LoadAlternateAdvancement() { Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Data..."); - if(!database.LoadAlternateAdvancementAbilities(zone->aa_abilities, - zone->aa_ranks)) + if(!database.LoadAlternateAdvancementAbilities(aa_abilities, + aa_ranks)) { - zone->aa_abilities.clear(); - zone->aa_ranks.clear(); + aa_abilities.clear(); + aa_ranks.clear(); Log.Out(Logs::General, Logs::Status, "Failed to load Alternate Advancement Data"); return; } + Log.Out(Logs::General, Logs::Status, "Processing Alternate Advancement Data..."); + for(const auto &ability : aa_abilities) { + ability.second->first = GetAlternateAdvancementRank(ability.second->first_rank_id); + + //process these ranks + AA::Rank *current = ability.second->first; + while(current) { + current->prev = GetAlternateAdvancementRank(current->prev_id); + current->next = GetAlternateAdvancementRank(current->next_id); + current->base_ability = ability.second.get(); + + if(current->prev) { + current->total_cost = current->cost + current->prev->total_cost; + } else { + current->total_cost = current->cost; + } + + current = current->next; + } + + ability.second->GetMaxLevel(true); + } + Log.Out(Logs::General, Logs::Status, "Loaded Alternate Advancement Data"); } +AA::Ability *Zone::GetAlternateAdvancementAbility(int id) { + auto iter = aa_abilities.find(id); + if(iter != aa_abilities.end()) { + return iter->second.get(); + } + + return nullptr; +} + +AA::Rank *Zone::GetAlternateAdvancementRank(int rank_id) { + auto iter = aa_ranks.find(rank_id); + if(iter != aa_ranks.end()) { + return iter->second.get(); + } + + return nullptr; +} + bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map> &abilities, std::unordered_map> &ranks) { Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Abilities..."); abilities.clear(); - std::string query = "SELECT id, name, expansion, category, classes, expendable, first_rank_id FROM aa_ability"; + std::string query = "SELECT id, name, expansion, category, classes, type, expendable, account_time_required, grant_only, first_rank_id FROM aa_ability"; auto results = QueryDatabase(query); if(results.Success()) { for(auto row = results.begin(); row != results.end(); ++row) { AA::Ability *ability = new AA::Ability; int id = atoi(row[0]); - ability->name = row[1]; ability->expansion = atoi(row[2]); ability->category = atoi(row[3]); ability->classes = atoi(row[4]); - ability->expendable = atoi(row[5]) != 0 ? true : false; - ability->first_rank_id = atoi(row[6]); + ability->type = atoi(row[5]); + ability->expendable = atoi(row[6]) != 0 ? true : false; + ability->account_time_required = atoul(row[7]); + ability->grant_only = atoi(row[8]) != 0 ? true : false; + ability->first_rank_id = atoi(row[9]); + ability->first = nullptr; abilities[id] = std::unique_ptr(ability); } @@ -2132,6 +2401,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_mapid = id; rank->upper_hotkey_sid = atoi(row[1]); rank->lower_hotkey_sid = atoi(row[2]); rank->title_sid = atoi(row[3]); @@ -2143,6 +2413,10 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_maprecast_time = atoi(row[9]); rank->prev_id = atoi(row[10]); rank->next_id = atoi(row[11]); + rank->base_ability = nullptr; + rank->total_cost = 0; + rank->next = nullptr; + rank->prev = nullptr; ranks[id] = std::unique_ptr(rank); } @@ -2204,4 +2478,3 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_mapnext) { + current = current->next; + } + + return current; +} + +AA::Rank *AA::Ability::GetRankByPointsSpent(int current_level) { + if(!first) + return nullptr; + + if(current_level == 0) { + return GetMaxRank(); + } + + int i = 1; + Rank *current = first; + while(current->next) { + if(1 == current_level) { + break; + } + + i++; + current = current->next; + } + + return current; +} + +int AA::Ability::GetMaxLevel(bool force_calc) { + if(!force_calc) + return max_level; + + max_level = 0; + Rank *current = first; + while(current) { + max_level++; + current = current->next; + } + + return max_level; +} \ No newline at end of file diff --git a/zone/aa_ability.h b/zone/aa_ability.h index bb9148689..b2098c408 100644 --- a/zone/aa_ability.h +++ b/zone/aa_ability.h @@ -30,14 +30,27 @@ namespace AA { -struct Ability +class Ability { +public: + Ability() { } + ~Ability() { } + + Rank *GetMaxRank(); + Rank *GetRankByPointsSpent(int current_level); + int GetMaxLevel(bool force_calc = false); + std::string name; int expansion; int category; int classes; + uint32 account_time_required; + bool grant_only; + int type; bool expendable; int first_rank_id; + int max_level; + Rank *first; }; } diff --git a/zone/aa_rank.h b/zone/aa_rank.h index ec1cc4115..43b6ef635 100644 --- a/zone/aa_rank.h +++ b/zone/aa_rank.h @@ -22,8 +22,14 @@ namespace AA { -struct Rank +class Ability; +class Rank { +public: + Rank() { } + ~Rank() { } + + int id; int upper_hotkey_sid; int lower_hotkey_sid; int title_sid; @@ -34,7 +40,11 @@ struct Rank int spell_type; int recast_time; int prev_id; + Rank *prev; int next_id; + Rank *next; + int total_cost; + Ability *base_ability; std::unordered_map effects; std::vector prereqs; }; diff --git a/zone/client.h b/zone/client.h index de093990c..7bc4aac1e 100644 --- a/zone/client.h +++ b/zone/client.h @@ -759,7 +759,11 @@ public: inline PTimerList &GetPTimers() { return(p_timers); } - //AA Methods + //New AA Methods + void SendAlternateAdvancement(int aa_id, bool first_login = false); + void SendAlternateAdvancementList(); + + //old AA Methods void SendAAList(); void ResetAA(); void SendClearAA(); diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index df8ef8f12..bfe96fdb3 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1091,8 +1091,10 @@ void Client::Handle_Connect_OP_SendAAStats(const EQApplicationPacket *app) void Client::Handle_Connect_OP_SendAATable(const EQApplicationPacket *app) { - Log.Out(Logs::General, Logs::Error, "SendAAList()"); - SendAAList(); + //SendAAList(); + + SendAlternateAdvancementList(); + return; } @@ -1153,7 +1155,6 @@ void Client::Handle_Connect_OP_TGB(const EQApplicationPacket *app) void Client::Handle_Connect_OP_UpdateAA(const EQApplicationPacket *app) { - Log.Out(Logs::General, Logs::Error, "SendAATable()"); SendAATable(); } diff --git a/zone/zone.h b/zone/zone.h index 274a1a021..fbe1b48d1 100644 --- a/zone/zone.h +++ b/zone/zone.h @@ -116,6 +116,8 @@ public: //new AA void LoadAlternateAdvancement(); + AA::Ability *GetAlternateAdvancementAbility(int id); + AA::Rank *GetAlternateAdvancementRank(int rank_id); //old AA void LoadAAs(); @@ -319,10 +321,13 @@ private: int totalBS; ZoneSpellsBlocked *blocked_spells; +public: //new AA std::unordered_map> aa_abilities; std::unordered_map> aa_ranks; +private: + //old AA int totalAAs; SendAA_Struct **aas; //array of AA structs From dbbe6b5a91155e55ebbbcfdc597dc0debe4a399d Mon Sep 17 00:00:00 2001 From: KimLS Date: Tue, 9 Jun 2015 12:39:39 -0700 Subject: [PATCH 04/48] Experimenting with packets --- common/eq_packet_structs.h | 2 +- common/patches/uf.cpp | 2 +- zone/aa.cpp | 168 +++++++++---------------------------- zone/aa_ability.cpp | 9 +- zone/aa_ability.h | 5 +- zone/aa_rank.h | 2 + zone/client.h | 2 +- zone/client_packet.cpp | 3 - zone/command.cpp | 14 ++-- 9 files changed, 59 insertions(+), 148 deletions(-) diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index d2d9ae8b3..0c4335016 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -4243,7 +4243,7 @@ struct AARankInfo_Struct int32 total_cost; int32 expansion; int32 category; - uint8 expendable; + uint8 charges; uint8 grant_only; uint32 total_effects; uint32 total_prereqs; diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index bbe0c0f0d..caea6b933 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -2177,7 +2177,7 @@ namespace UF eq->next_id = emu->next_id; eq->cost2 = emu->total_cost; eq->grant_only = emu->grant_only > 0 ? true : false; - eq->expendable_charges = emu->expendable ? 1 : 0; + eq->expendable_charges = emu->charges ? 1 : 0; eq->aa_expansion = emu->expansion; eq->special_category = emu->category; eq->total_abilities = emu->total_effects; diff --git a/zone/aa.cpp b/zone/aa.cpp index 88e2a2e56..57f6df675 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1101,6 +1101,14 @@ void Client::SendAATable() { EQApplicationPacket* outapp = new EQApplicationPacket(OP_RespondAA, sizeof(AATable_Struct)); AATable_Struct* aa2 = (AATable_Struct *)outapp->pBuffer; + aa2->aa_spent = 8; + //aa2->aa_list[0].AA = 11; + //aa2->aa_list[0].value = 4; + //aa2->aa_list[0].charges = 0; + //aa2->aa_list[1].AA = 202; + //aa2->aa_list[1].value = 4; + //aa2->aa_list[1].charges = 0; + //aa2->aa_spent = GetAAPointsSpent(); // //uint32 i; @@ -2089,13 +2097,16 @@ Mob *AA_SwarmPetInfo::GetOwner() } void Client::SendAlternateAdvancementList() { - for(auto &aa : zone->aa_abilities) { - SendAlternateAdvancement(aa.first, true); - } + //for(auto &aa : zone->aa_abilities) { + // SendAlternateAdvancement(aa.first, 5); + //} + + SendAlternateAdvancement(1, 4); + SendAlternateAdvancement(2, 4); } //New AA -void Client::SendAlternateAdvancement(int aa_id, bool first_login) { +void Client::SendAlternateAdvancement(int aa_id, int level) { if(!zone) return; @@ -2108,8 +2119,12 @@ void Client::SendAlternateAdvancement(int aa_id, bool first_login) { return; } - if(ability->account_time_required) { - if((Timer::GetTimeSeconds() - account_creation) < ability->account_time_required) + AA::Rank *rank = ability->GetRankByPointsSpent(level + 1); + if(!rank) + return; + + if(rank->account_time_required) { + if((Timer::GetTimeSeconds() - account_creation) < rank->account_time_required) { return; } @@ -2120,9 +2135,9 @@ void Client::SendAlternateAdvancement(int aa_id, bool first_login) { //if(GetAA(saa2->id) == 0) // return; - if(ability->expansion > 0) { + if(rank->expansion > 0) { AA::Ability *qaa = zone->GetAlternateAdvancementAbility(aa_id + 1); - //if(qaa && qaa->expansion == ability->expansion && GetAA(aa_id) > 0) { + //if(qaa && qaa->expansion == rank->expansion && GetAA(aa_id) > 0) { // return; //} } @@ -2140,33 +2155,28 @@ void Client::SendAlternateAdvancement(int aa_id, bool first_login) { uint32 client_race = GetBaseRace(); // Drakkin Bloodlines - if(ability->expansion > 522) + if(rank->expansion > 522) { if(client_race != 522) return; int heritage = this->GetDrakkinHeritage() + 523; // 523 = Drakkin Race(522) + Bloodline - if(heritage != ability->expansion) + if(heritage != rank->expansion) return; } - else if(client_race != ability->expansion) + else if(client_race != rank->expansion) { return; } } - - //Send first rank - AA::Rank *rank = ability->first; - if(!rank) - return; //Should move this to another function int size = sizeof(AARankInfo_Struct)+(sizeof(AARankEffect_Struct)* rank->effects.size()) + (sizeof(AARankPrereq_Struct)* rank->prereqs.size()); EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, size); AARankInfo_Struct *aai = (AARankInfo_Struct*)outapp->pBuffer; - aai->id = rank->id; + aai->id = ability->GetMaxRank()->id; aai->upper_hotkey_sid = rank->upper_hotkey_sid; aai->lower_hotkey_sid = rank->lower_hotkey_sid; aai->title_sid = rank->title_sid; @@ -2174,7 +2184,7 @@ void Client::SendAlternateAdvancement(int aa_id, bool first_login) { aai->level_req = rank->level_req; aai->cost = rank->cost; aai->seq = aa_id; - aai->current_level = 1; + aai->current_level = level + 1; aai->type = ability->type; aai->spell = rank->spell; aai->spell_type = rank->spell_type; @@ -2184,9 +2194,9 @@ void Client::SendAlternateAdvancement(int aa_id, bool first_login) { aai->prev_id = rank->prev_id; aai->next_id = rank->next_id; aai->total_cost = rank->total_cost; - aai->expansion = ability->expansion; + aai->expansion = rank->expansion; aai->category = ability->category; - aai->expendable = ability->expendable; + aai->charges = ability->charges; aai->grant_only = ability->grant_only; aai->total_effects = rank->effects.size(); aai->total_prereqs = rank->prereqs.size(); @@ -2204,106 +2214,8 @@ void Client::SendAlternateAdvancement(int aa_id, bool first_login) { outapp->WriteSInt32(prereq.points); } - //if first_login then also send current rank if not maxed - QueuePacket(outapp); safe_delete(outapp); - - // - //if(size == 0) - // return; - // - //uchar* buffer = new uchar[size]; - //SendAA_Struct* saa = (SendAA_Struct*)buffer; - //memcpy(saa, saa2, size); - // - //if(saa->spellid == 0) - // saa->spellid = 0xFFFFFFFF; - // - //value = GetAA(saa->id); - //uint32 orig_val = value; - // - //if(value && saa->id){ - // - // if(value < saa->max_level){ - // saa->id += value; - // saa->next_id = saa->id + 1; - // value++; - // } - // - // else if(aa_stack && saa->sof_next_id){ - // saa->id += value - 1; - // saa->next_id = saa->sof_next_id; - // - // //Prevent removal of previous AA from window if next AA belongs to a higher client version. - // SendAA_Struct* saa_next = nullptr; - // saa_next = zone->FindAA(saa->sof_next_id); - // - // // this check should work as long as we continue to just add the clients and just increase - // // each number .... - // if(saa_next && static_cast(GetClientVersion()) < saa_next->clientver - 1) { - // saa->next_id = 0xFFFFFFFF; - // } - // } - // - // else{ - // saa->id += value - 1; - // saa->next_id = 0xFFFFFFFF; - // } - // - // uint32 current_level_mod = 0; - // if(aa_stack) - // current_level_mod = saa->sof_current_level; - // - // saa->last_id = saa->id - 1; - // saa->current_level = value + (current_level_mod); - // saa->cost = saa2->cost + (saa2->cost_inc*(value - 1)); - // saa->cost2 = 0; - // for(uint32 i = 0; i < value; i++) { - // saa->cost2 += saa2->cost + (saa2->cost_inc * i); - // } - // saa->class_type = saa2->class_type + (saa2->level_inc*(value - 1)); - //} - // - //if(aa_stack){ - // - // if(saa->sof_current_level >= 1 && value == 0) - // saa->current_level = saa->sof_current_level + 1; - // - // saa->max_level = saa->sof_max_level; - //} - // - //database.FillAAEffects(saa); - // - //if(value > 0) - //{ - // // AA_Action stores the base ID - // const AA_DBAction *caa = &AA_Actions[saa->id - value + 1][value - 1]; - // - // if(caa && caa->reuse_time > 0) - // saa->spell_refresh = CalcAAReuseTimer(caa); - //} - // - ////You can now use the level_inc field in the altadv_vars table to accomplish this, though still needed - ////for special cases like LOH/HT due to inability to implement correct stacking of AA's that use hotkeys. - //std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(saa->id); - // - //if(RequiredLevel != AARequiredLevelAndCost.end()) - //{ - // saa->class_type = RequiredLevel->second.Level; - // saa->cost = RequiredLevel->second.Cost; - //} - // - // - //EQApplicationPacket* outapp = new EQApplicationPacket(OP_SendAATable); - //outapp->size = size; - //outapp->pBuffer = (uchar*)saa; - //if(id == 0 && value && (orig_val < saa->max_level)) //send previous AA only on zone in - // SendPreviousAA(id, seq); - // - //QueuePacket(outapp); - //safe_delete(outapp); - ////will outapp delete the buffer for us even though it didnt make it? --- Yes, it should } void Zone::LoadAlternateAdvancement() { @@ -2366,21 +2278,19 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_mapname = row[1]; - ability->expansion = atoi(row[2]); - ability->category = atoi(row[3]); - ability->classes = atoi(row[4]); - ability->type = atoi(row[5]); - ability->expendable = atoi(row[6]) != 0 ? true : false; - ability->account_time_required = atoul(row[7]); - ability->grant_only = atoi(row[8]) != 0 ? true : false; - ability->first_rank_id = atoi(row[9]); + ability->category = atoi(row[2]); + ability->classes = atoi(row[3]); + ability->type = atoi(row[4]); + ability->charges = atoi(row[5]); + ability->grant_only = atoi(row[6]) != 0 ? true : false; + ability->first_rank_id = atoi(row[7]); ability->first = nullptr; abilities[id] = std::unique_ptr(ability); @@ -2395,7 +2305,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_maprecast_time = atoi(row[9]); rank->prev_id = atoi(row[10]); rank->next_id = atoi(row[11]); + rank->expansion = atoi(row[12]); + rank->account_time_required = atoul(row[13]); rank->base_ability = nullptr; rank->total_cost = 0; rank->next = nullptr; diff --git a/zone/aa_ability.cpp b/zone/aa_ability.cpp index 3cc14826a..8f9cb8da4 100644 --- a/zone/aa_ability.cpp +++ b/zone/aa_ability.cpp @@ -33,17 +33,16 @@ AA::Rank *AA::Ability::GetMaxRank() { } AA::Rank *AA::Ability::GetRankByPointsSpent(int current_level) { + if(current_level == 0) + return nullptr; + if(!first) return nullptr; - if(current_level == 0) { - return GetMaxRank(); - } - int i = 1; Rank *current = first; while(current->next) { - if(1 == current_level) { + if(i == current_level) { break; } diff --git a/zone/aa_ability.h b/zone/aa_ability.h index b2098c408..d1ef49105 100644 --- a/zone/aa_ability.h +++ b/zone/aa_ability.h @@ -37,17 +37,16 @@ public: ~Ability() { } Rank *GetMaxRank(); + Rank *GetRankByLevel(int level); Rank *GetRankByPointsSpent(int current_level); int GetMaxLevel(bool force_calc = false); std::string name; - int expansion; int category; int classes; - uint32 account_time_required; bool grant_only; int type; - bool expendable; + int charges; int first_rank_id; int max_level; Rank *first; diff --git a/zone/aa_rank.h b/zone/aa_rank.h index 43b6ef635..d35582834 100644 --- a/zone/aa_rank.h +++ b/zone/aa_rank.h @@ -43,6 +43,8 @@ public: Rank *prev; int next_id; Rank *next; + int expansion; + uint32 account_time_required; int total_cost; Ability *base_ability; std::unordered_map effects; diff --git a/zone/client.h b/zone/client.h index 7bc4aac1e..71fc219fb 100644 --- a/zone/client.h +++ b/zone/client.h @@ -760,7 +760,7 @@ public: inline PTimerList &GetPTimers() { return(p_timers); } //New AA Methods - void SendAlternateAdvancement(int aa_id, bool first_login = false); + void SendAlternateAdvancement(int aa_id, int level); void SendAlternateAdvancementList(); //old AA Methods diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index bfe96fdb3..77431ecd9 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1091,10 +1091,7 @@ void Client::Handle_Connect_OP_SendAAStats(const EQApplicationPacket *app) void Client::Handle_Connect_OP_SendAATable(const EQApplicationPacket *app) { - //SendAAList(); - SendAlternateAdvancementList(); - return; } diff --git a/zone/command.cpp b/zone/command.cpp index a286f92bd..3210ba070 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -674,12 +674,14 @@ void command_incstat(Client* c, const Seperator* sep){ } void command_resetaa(Client* c,const Seperator *sep){ - if(c->GetTarget()!=0 && c->GetTarget()->IsClient()){ - c->GetTarget()->CastToClient()->ResetAA(); - c->Message(13,"Successfully reset %s's AAs", c->GetTarget()->GetName()); - } - else - c->Message(0,"Usage: Target a client and use #resetaa to reset the AA data in their Profile."); + c->SendAlternateAdvancement(1, 1); + c->SendAlternateAdvancement(2, 1); + //if(c->GetTarget()!=0 && c->GetTarget()->IsClient()){ + // c->GetTarget()->CastToClient()->ResetAA(); + // c->Message(13,"Successfully reset %s's AAs", c->GetTarget()->GetName()); + //} + //else + // c->Message(0,"Usage: Target a client and use #resetaa to reset the AA data in their Profile."); } void command_help(Client *c, const Seperator *sep) From 33c1c7c3e4abbf1e182b85fccd05741284a003f4 Mon Sep 17 00:00:00 2001 From: KimLS Date: Tue, 9 Jun 2015 16:17:09 -0700 Subject: [PATCH 05/48] More packet figuring out... --- common/patches/uf.cpp | 4 +++ zone/aa.cpp | 62 ++++++++++++++++++++++--------------------- zone/client.h | 2 +- zone/command.cpp | 10 +++++-- 4 files changed, 45 insertions(+), 33 deletions(-) diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index caea6b933..81ad197d6 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -1810,6 +1810,10 @@ namespace UF // OUT(aa_array[r].charges); //} // OUT(unknown02220[4]); + + eq->aa_array[0].AA = 6; + eq->aa_array[0].value = 5; + OUT(mana); OUT(cur_hp); OUT(STR); diff --git a/zone/aa.cpp b/zone/aa.cpp index 57f6df675..2fe75e4fc 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1097,28 +1097,28 @@ void Client::SendAATimers() { } void Client::SendAATable() { - Log.Out(Logs::General, Logs::Status, "SendAATable()"); - EQApplicationPacket* outapp = new EQApplicationPacket(OP_RespondAA, sizeof(AATable_Struct)); - - AATable_Struct* aa2 = (AATable_Struct *)outapp->pBuffer; - aa2->aa_spent = 8; - //aa2->aa_list[0].AA = 11; + //Log.Out(Logs::General, Logs::Status, "SendAATable()"); + //EQApplicationPacket* outapp = new EQApplicationPacket(OP_RespondAA, sizeof(AATable_Struct)); + // + //AATable_Struct* aa2 = (AATable_Struct *)outapp->pBuffer; + //aa2->aa_spent = 10; + //aa2->aa_list[0].AA = 6; //aa2->aa_list[0].value = 4; //aa2->aa_list[0].charges = 0; - //aa2->aa_list[1].AA = 202; + //aa2->aa_list[1].AA = 11; //aa2->aa_list[1].value = 4; //aa2->aa_list[1].charges = 0; - - //aa2->aa_spent = GetAAPointsSpent(); // - //uint32 i; - //for(i=0;i < MAX_PP_AA_ARRAY;i++){ - // aa2->aa_list[i].AA = aa[i]->value ? aa[i]->AA : 0; // bit of a hack to prevent expendables punching a hole - // aa2->aa_list[i].value = aa[i]->value; - // aa2->aa_list[i].charges = aa[i]->charges; - //} - QueuePacket(outapp); - safe_delete(outapp); + ////aa2->aa_spent = GetAAPointsSpent(); + //// + ////uint32 i; + ////for(i=0;i < MAX_PP_AA_ARRAY;i++){ + //// aa2->aa_list[i].AA = aa[i]->value ? aa[i]->AA : 0; // bit of a hack to prevent expendables punching a hole + //// aa2->aa_list[i].value = aa[i]->value; + //// aa2->aa_list[i].charges = aa[i]->charges; + ////} + //QueuePacket(outapp); + //safe_delete(outapp); } void Client::SendPreviousAA(uint32 id, int seq){ @@ -2101,12 +2101,15 @@ void Client::SendAlternateAdvancementList() { // SendAlternateAdvancement(aa.first, 5); //} - SendAlternateAdvancement(1, 4); - SendAlternateAdvancement(2, 4); + SendAlternateAdvancementRank(1, 5); + SendAlternateAdvancementRank(1, 6); + SendAlternateAdvancementRank(2, 1); + //SendAlternateAdvancement(1, 5); + //SendAlternateAdvancement(2, 5); } //New AA -void Client::SendAlternateAdvancement(int aa_id, int level) { +void Client::SendAlternateAdvancementRank(int aa_id, int level) { if(!zone) return; @@ -2119,7 +2122,7 @@ void Client::SendAlternateAdvancement(int aa_id, int level) { return; } - AA::Rank *rank = ability->GetRankByPointsSpent(level + 1); + AA::Rank *rank = ability->GetRankByPointsSpent(level); if(!rank) return; @@ -2129,12 +2132,12 @@ void Client::SendAlternateAdvancement(int aa_id, int level) { return; } } - + // Hide Quest/Progression AAs unless player has been granted the first level using $client->IncrementAA(skill_id). if(ability->category == 1 || ability->category == 2) { //if(GetAA(saa2->id) == 0) // return; - + if(rank->expansion > 0) { AA::Ability *qaa = zone->GetAlternateAdvancementAbility(aa_id + 1); //if(qaa && qaa->expansion == rank->expansion && GetAA(aa_id) > 0) { @@ -2142,7 +2145,7 @@ void Client::SendAlternateAdvancement(int aa_id, int level) { //} } } - + // Passive and Active Shroud AAs // For now we skip them if(ability->category == 3 || ability->category == 4) { @@ -2171,25 +2174,24 @@ void Client::SendAlternateAdvancement(int aa_id, int level) { } } - //Should move this to another function - int size = sizeof(AARankInfo_Struct)+(sizeof(AARankEffect_Struct)* rank->effects.size()) + (sizeof(AARankPrereq_Struct)* rank->prereqs.size()); + int size = sizeof(AARankInfo_Struct) + (sizeof(AARankEffect_Struct) * rank->effects.size()) + (sizeof(AARankPrereq_Struct) * rank->prereqs.size()); EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, size); AARankInfo_Struct *aai = (AARankInfo_Struct*)outapp->pBuffer; - aai->id = ability->GetMaxRank()->id; + aai->id = rank->id; aai->upper_hotkey_sid = rank->upper_hotkey_sid; aai->lower_hotkey_sid = rank->lower_hotkey_sid; aai->title_sid = rank->title_sid; aai->desc_sid = rank->desc_sid; - aai->level_req = rank->level_req; aai->cost = rank->cost; aai->seq = aa_id; - aai->current_level = level + 1; aai->type = ability->type; aai->spell = rank->spell; aai->spell_type = rank->spell_type; aai->spell_refresh = rank->recast_time; aai->classes = ability->classes; + aai->level_req = rank->level_req; + aai->current_level = level; aai->max_level = ability->GetMaxLevel(); aai->prev_id = rank->prev_id; aai->next_id = rank->next_id; @@ -2208,7 +2210,7 @@ void Client::SendAlternateAdvancement(int aa_id, int level) { outapp->WriteSInt32(effect.second.base2); outapp->WriteSInt32(effect.first); } - + for(auto prereq : rank->prereqs) { outapp->WriteSInt32(prereq.aa_id); outapp->WriteSInt32(prereq.points); diff --git a/zone/client.h b/zone/client.h index 71fc219fb..1a1e32c6f 100644 --- a/zone/client.h +++ b/zone/client.h @@ -760,7 +760,7 @@ public: inline PTimerList &GetPTimers() { return(p_timers); } //New AA Methods - void SendAlternateAdvancement(int aa_id, int level); + void SendAlternateAdvancementRank(int aa_id, int level); void SendAlternateAdvancementList(); //old AA Methods diff --git a/zone/command.cpp b/zone/command.cpp index 3210ba070..f2a84baaa 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -674,8 +674,14 @@ void command_incstat(Client* c, const Seperator* sep){ } void command_resetaa(Client* c,const Seperator *sep){ - c->SendAlternateAdvancement(1, 1); - c->SendAlternateAdvancement(2, 1); + + //if(sep->IsNumber(1) && atoi(sep->arg[1]) == 1) { + // c->SendAlternateAdvancement(2, 2); + //} + //else if(sep->IsNumber(1) && atoi(sep->arg[1]) == 2) { + // c->SendAlternateAdvancement(2, 3); + //} + //if(c->GetTarget()!=0 && c->GetTarget()->IsClient()){ // c->GetTarget()->CastToClient()->ResetAA(); // c->Message(13,"Successfully reset %s's AAs", c->GetTarget()->GetName()); From d5e697c061df46d38711305405925d3903f13415 Mon Sep 17 00:00:00 2001 From: KimLS Date: Tue, 9 Jun 2015 22:12:31 -0700 Subject: [PATCH 06/48] More work, looks a lot better than before, tomorrow i hope to get actual client implementation done --- zone/aa.cpp | 395 +++++++++++++++++++++-------------------- zone/aa_ability.h | 1 + zone/bonuses.cpp | 29 +-- zone/client.cpp | 84 ++++----- zone/client.h | 8 +- zone/client_packet.cpp | 108 +++++------ zone/mob.h | 11 +- zone/spell_effects.cpp | 68 +++---- zone/zone.h | 1 + 9 files changed, 363 insertions(+), 342 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 2fe75e4fc..a66b533f6 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1254,37 +1254,37 @@ void Client::SendAA(uint32 id, int seq) { if (RuleB(AA, Stacking) && (GetClientVersionBit() >= 4) && (saa2->hotkey_sid == 4294967295u)) aa_stack = true; - if (aa_stack){ - uint32 aa_AA = 0; - uint32 aa_value = 0; - for (int i = 0; i < MAX_PP_AA_ARRAY; i++) { - if (aa[i]) { - aa_AA = aa[i]->AA; - aa_value = aa[i]->value; - - if (aa_AA){ - - if (aa_value > 0) - aa_AA -= aa_value-1; - - saa_pp = zone->FindAA(aa_AA); - - if (saa_pp){ - - if (saa_pp->sof_next_skill == saa2->sof_next_skill){ - - if (saa_pp->id == saa2->id) - break; //You already have this in the player profile. - else if ((saa_pp->sof_current_level < saa2->sof_current_level) && (aa_value < saa_pp->max_level)) - return; //DISABLE DISPLAY HIGHER - You have not reached max level yet of your current AA. - else if ((saa_pp->sof_current_level < saa2->sof_current_level) && (aa_value == saa_pp->max_level) && (saa_pp->sof_next_id == saa2->id)) - IsBaseLevel = false; //ALLOW DISPLAY HIGHER - } - } - } - } - } - } + //if (aa_stack){ + // uint32 aa_AA = 0; + // uint32 aa_value = 0; + // for (int i = 0; i < MAX_PP_AA_ARRAY; i++) { + // if (aa[i]) { + // aa_AA = aa[i]->AA; + // aa_value = aa[i]->value; + // + // if (aa_AA){ + // + // if (aa_value > 0) + // aa_AA -= aa_value-1; + // + // saa_pp = zone->FindAA(aa_AA); + // + // if (saa_pp){ + // + // if (saa_pp->sof_next_skill == saa2->sof_next_skill){ + // + // if (saa_pp->id == saa2->id) + // break; //You already have this in the player profile. + // else if ((saa_pp->sof_current_level < saa2->sof_current_level) && (aa_value < saa_pp->max_level)) + // return; //DISABLE DISPLAY HIGHER - You have not reached max level yet of your current AA. + // else if ((saa_pp->sof_current_level < saa2->sof_current_level) && (aa_value == saa_pp->max_level) && (saa_pp->sof_next_id == saa2->id)) + // IsBaseLevel = false; //ALLOW DISPLAY HIGHER + // } + // } + // } + // } + // } + //} //Hide higher tiers of multi tiered AA's if the base level is not fully purchased. if (aa_stack && IsBaseLevel && saa2->sof_current_level > 0) @@ -1399,51 +1399,6 @@ void Client::SendAAList(){ } } -uint32 Client::GetAA(uint32 aa_id) const { - std::map::const_iterator res; - res = aa_points.find(aa_id); - if(res != aa_points.end()) { - return(res->second); - } - return(0); -} - -bool Client::SetAA(uint32 aa_id, uint32 new_value) { - aa_points[aa_id] = new_value; - uint32 cur; - auto sendaa = zone->FindAA(aa_id); // this is a bit hacky - uint32 charges = sendaa->special_category == 7 && new_value ? 1 : 0; - for(cur=0;cur < MAX_PP_AA_ARRAY;cur++){ - if((aa[cur]->value > 1) && ((aa[cur]->AA - aa[cur]->value + 1)== aa_id)){ - aa[cur]->value = new_value; - if(new_value > 0) - aa[cur]->AA++; - aa[cur]->charges = charges; - return true; - } - else if((aa[cur]->value == 1) && (aa[cur]->AA == aa_id)){ - aa[cur]->value = new_value; - if(new_value > 0) - aa[cur]->AA++; - aa[cur]->charges = charges; - return true; - } - // hack to prevent expendable exploit, we should probably be reshuffling the array to fix the hole - else if(aa[cur]->value == 0 && new_value == 1 && aa[cur]->AA == aa_id) { - aa[cur]->value = new_value; - aa[cur]->charges = charges; - return true; - } - else if(aa[cur]->AA==0){ //end of list - aa[cur]->AA = aa_id; - aa[cur]->value = new_value; - aa[cur]->charges = charges; - return true; - } - } - return false; -} - SendAA_Struct* Zone::FindAA(uint32 id) { return aas_send[id]; } @@ -1503,39 +1458,39 @@ bool ZoneDatabase::LoadAAEffects2() { } void Client::ResetAA(){ - RefundAA(); - uint32 i; - for (i=0; i < MAX_PP_AA_ARRAY; i++) { - aa[i]->AA = 0; - aa[i]->value = 0; - aa[i]->charges = 0; - m_pp.aa_array[i].AA = 0; - m_pp.aa_array[i].value = 0; - m_pp.aa_array[i].charges= 0; - } - - std::map::iterator itr; - for(itr = aa_points.begin(); itr != aa_points.end(); ++itr) - aa_points[itr->first] = 0; - - for(int i = 0; i < _maxLeaderAA; ++i) - m_pp.leader_abilities.ranks[i] = 0; - - m_pp.group_leadership_points = 0; - m_pp.raid_leadership_points = 0; - m_pp.group_leadership_exp = 0; - m_pp.raid_leadership_exp = 0; - - database.DeleteCharacterAAs(this->CharacterID()); - SaveAA(); - SendClearAA(); - SendAAList(); - SendAATable(); - SendAAStats(); - database.DeleteCharacterLeadershipAAs(this->CharacterID()); - // undefined for these clients - if (GetClientVersionBit() & BIT_TitaniumAndEarlier) - Kick(); +// RefundAA(); +// uint32 i; +// for (i=0; i < MAX_PP_AA_ARRAY; i++) { +// aa[i]->AA = 0; +// aa[i]->value = 0; +// aa[i]->charges = 0; +// m_pp.aa_array[i].AA = 0; +// m_pp.aa_array[i].value = 0; +// m_pp.aa_array[i].charges= 0; +// } +// +// std::map::iterator itr; +// for(itr = aa_points.begin(); itr != aa_points.end(); ++itr) +// aa_points[itr->first] = 0; +// +// for(int i = 0; i < _maxLeaderAA; ++i) +// m_pp.leader_abilities.ranks[i] = 0; +// +// m_pp.group_leadership_points = 0; +// m_pp.raid_leadership_points = 0; +// m_pp.group_leadership_exp = 0; +// m_pp.raid_leadership_exp = 0; +// +// database.DeleteCharacterAAs(this->CharacterID()); +// SaveAA(); +// SendClearAA(); +// SendAAList(); +// SendAATable(); +// SendAAStats(); +// database.DeleteCharacterLeadershipAAs(this->CharacterID()); +// // undefined for these clients +// if (GetClientVersionBit() & BIT_TitaniumAndEarlier) +// Kick(); } void Client::SendClearAA() @@ -2096,19 +2051,23 @@ Mob *AA_SwarmPetInfo::GetOwner() return entity_list.GetMobID(owner_id); } -void Client::SendAlternateAdvancementList() { - //for(auto &aa : zone->aa_abilities) { - // SendAlternateAdvancement(aa.first, 5); - //} - - SendAlternateAdvancementRank(1, 5); - SendAlternateAdvancementRank(1, 6); - SendAlternateAdvancementRank(2, 1); - //SendAlternateAdvancement(1, 5); - //SendAlternateAdvancement(2, 5); +//New AA +void Client::SendAlternateAdvancementTable() { + for(auto &aa : zone->aa_abilities) { + auto ranks = GetAA(aa.second->first_rank_id); + if(ranks) { + if(aa.second->GetMaxLevel() == ranks) { + SendAlternateAdvancementRank(aa.first, ranks); + } else { + SendAlternateAdvancementRank(aa.first, ranks); + SendAlternateAdvancementRank(aa.first, ranks + 1); + } + } else { + SendAlternateAdvancementRank(aa.first, 1); + } + } } -//New AA void Client::SendAlternateAdvancementRank(int aa_id, int level) { if(!zone) return; @@ -2126,53 +2085,9 @@ void Client::SendAlternateAdvancementRank(int aa_id, int level) { if(!rank) return; - if(rank->account_time_required) { - if((Timer::GetTimeSeconds() - account_creation) < rank->account_time_required) - { - return; - } - } - - // Hide Quest/Progression AAs unless player has been granted the first level using $client->IncrementAA(skill_id). - if(ability->category == 1 || ability->category == 2) { - //if(GetAA(saa2->id) == 0) - // return; - - if(rank->expansion > 0) { - AA::Ability *qaa = zone->GetAlternateAdvancementAbility(aa_id + 1); - //if(qaa && qaa->expansion == rank->expansion && GetAA(aa_id) > 0) { - // return; - //} - } - } - - // Passive and Active Shroud AAs - // For now we skip them - if(ability->category == 3 || ability->category == 4) { + if(!CanUseAlternateAdvancementRank(rank)) { return; } - - // Check for racial/Drakkin blood line AAs - if(ability->category == 8) - { - uint32 client_race = GetBaseRace(); - - // Drakkin Bloodlines - if(rank->expansion > 522) - { - if(client_race != 522) - return; - - int heritage = this->GetDrakkinHeritage() + 523; // 523 = Drakkin Race(522) + Bloodline - - if(heritage != rank->expansion) - return; - } - else if(client_race != rank->expansion) - { - return; - } - } int size = sizeof(AARankInfo_Struct) + (sizeof(AARankEffect_Struct) * rank->effects.size()) + (sizeof(AARankPrereq_Struct) * rank->prereqs.size()); EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, size); @@ -2220,10 +2135,126 @@ void Client::SendAlternateAdvancementRank(int aa_id, int level) { safe_delete(outapp); } +AA::Ability *Zone::GetAlternateAdvancementAbility(int id) { + auto iter = aa_abilities.find(id); + if(iter != aa_abilities.end()) { + return iter->second.get(); + } + + return nullptr; +} + +AA::Ability *Zone::GetAlternateAdvancementAbilityByRank(int rank_id) { + AA::Rank *rank = GetAlternateAdvancementRank(rank_id); + + if(!rank) + return nullptr; + + return rank->base_ability; +} + +AA::Rank *Zone::GetAlternateAdvancementRank(int rank_id) { + auto iter = aa_ranks.find(rank_id); + if(iter != aa_ranks.end()) { + return iter->second.get(); + } + + return nullptr; +} + +uint32 Mob::GetAA(uint32 rank_id) const { + if(zone) { + AA::Ability *ability = zone->GetAlternateAdvancementAbilityByRank(rank_id); + if(!ability) + return 0; + + auto iter = aa_ranks.find(ability->id); + if(iter != aa_ranks.end()) { + return iter->second; + } + } + return 0; +} + +bool Mob::SetAA(uint32 rank_id, uint32 new_value) { + if(zone) { + AA::Ability *ability = zone->GetAlternateAdvancementAbilityByRank(rank_id); + + if(!ability) { + return false; + } + + if(new_value > ability->GetMaxLevel()) { + return false; + } + + aa_ranks[ability->id] = new_value; + } + + return false; +} + + +bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) { + AA::Ability *ability = rank->base_ability; + + if(!ability) + return false; + + // Passive and Active Shroud AAs + // For now we skip them + if(ability->category == 3 || ability->category == 4) { + return false; + } + + // Check for racial/Drakkin blood line AAs + if(ability->category == 8) + { + uint32 client_race = GetBaseRace(); + + // Drakkin Bloodlines + if(rank->expansion > 522) + { + if(client_race != 522) + return false; + + int heritage = this->GetDrakkinHeritage() + 523; // 523 = Drakkin Race(522) + Bloodline + + if(heritage != rank->expansion) + return false; + } + else if(client_race != rank->expansion) + { + return false; + } + } + + return true; +} + +bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank) { + AA::Ability *ability = rank->base_ability; + + if(!ability) + return false; + + if(!CanUseAlternateAdvancementRank(rank)) { + return false; + } + + //You can't purchase grant only AAs they can only be assigned + if(ability->grant_only) { + return false; + } + + //check other stuff like price later + return true; +} + void Zone::LoadAlternateAdvancement() { Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Data..."); - if(!database.LoadAlternateAdvancementAbilities(aa_abilities, - aa_ranks)) + if(!database.LoadAlternateAdvancementAbilities(aa_abilities, + aa_ranks)) { aa_abilities.clear(); aa_ranks.clear(); @@ -2244,7 +2275,8 @@ void Zone::LoadAlternateAdvancement() { if(current->prev) { current->total_cost = current->cost + current->prev->total_cost; - } else { + } + else { current->total_cost = current->cost; } @@ -2257,24 +2289,6 @@ void Zone::LoadAlternateAdvancement() { Log.Out(Logs::General, Logs::Status, "Loaded Alternate Advancement Data"); } -AA::Ability *Zone::GetAlternateAdvancementAbility(int id) { - auto iter = aa_abilities.find(id); - if(iter != aa_abilities.end()) { - return iter->second.get(); - } - - return nullptr; -} - -AA::Rank *Zone::GetAlternateAdvancementRank(int rank_id) { - auto iter = aa_ranks.find(rank_id); - if(iter != aa_ranks.end()) { - return iter->second.get(); - } - - return nullptr; -} - bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map> &abilities, std::unordered_map> &ranks) { @@ -2285,7 +2299,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_mapid = atoi(row[0]); ability->name = row[1]; ability->category = atoi(row[2]); ability->classes = atoi(row[3]); @@ -2295,7 +2309,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_mapfirst_rank_id = atoi(row[7]); ability->first = nullptr; - abilities[id] = std::unique_ptr(ability); + abilities[ability->id] = std::unique_ptr(ability); } } else { Log.Out(Logs::General, Logs::Error, "Failed to load Alternate Advancement Abilities"); @@ -2312,8 +2326,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_mapid = id; + rank->id = atoi(row[0]); rank->upper_hotkey_sid = atoi(row[1]); rank->lower_hotkey_sid = atoi(row[2]); rank->title_sid = atoi(row[3]); @@ -2332,7 +2345,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_mapnext = nullptr; rank->prev = nullptr; - ranks[id] = std::unique_ptr(rank); + ranks[rank->id] = std::unique_ptr(rank); } } else { Log.Out(Logs::General, Logs::Error, "Failed to load Alternate Advancement Ability Ranks"); diff --git a/zone/aa_ability.h b/zone/aa_ability.h index d1ef49105..a31bc06e3 100644 --- a/zone/aa_ability.h +++ b/zone/aa_ability.h @@ -41,6 +41,7 @@ public: Rank *GetRankByPointsSpent(int current_level); int GetMaxLevel(bool force_calc = false); + int id; std::string name; int category; int classes; diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index 5dd7440f6..a2a180cef 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -639,20 +639,21 @@ void Client::CalcAABonuses(StatBonuses* newbon) { uint32 slots = 0; uint32 aa_AA = 0; uint32 aa_value = 0; - if(this->aa) { - for (i = 0; i < MAX_PP_AA_ARRAY; i++) { //iterate through all of the client's AAs - if (this->aa[i]) { // make sure aa exists or we'll crash zone - aa_AA = this->aa[i]->AA; //same as aaid from the aa_effects table - aa_value = this->aa[i]->value; //how many points in it - if (aa_AA > 0 || aa_value > 0) { //do we have the AA? if 1 of the 2 is set, we can assume we do - //slots = database.GetTotalAALevels(aa_AA); //find out how many effects from aa_effects table - slots = zone->GetTotalAALevels(aa_AA); //find out how many effects from aa_effects, which is loaded into memory - if (slots > 0) //and does it have any effects? may be able to put this above, not sure if it runs on each iteration - ApplyAABonuses(aa_AA, slots, newbon); //add the bonuses - } - } - } - } + //aa old + //if(this->aa) { + // for (i = 0; i < MAX_PP_AA_ARRAY; i++) { //iterate through all of the client's AAs + // if (this->aa[i]) { // make sure aa exists or we'll crash zone + // aa_AA = this->aa[i]->AA; //same as aaid from the aa_effects table + // aa_value = this->aa[i]->value; //how many points in it + // if (aa_AA > 0 || aa_value > 0) { //do we have the AA? if 1 of the 2 is set, we can assume we do + // //slots = database.GetTotalAALevels(aa_AA); //find out how many effects from aa_effects table + // slots = zone->GetTotalAALevels(aa_AA); //find out how many effects from aa_effects, which is loaded into memory + // if (slots > 0) //and does it have any effects? may be able to put this above, not sure if it runs on each iteration + // ApplyAABonuses(aa_AA, slots, newbon); //add the bonuses + // } + // } + // } + //} } diff --git a/zone/client.cpp b/zone/client.cpp index 53d39ea7b..dc32745e4 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -176,7 +176,6 @@ Client::Client(EQStreamInterface* ieqs) admin = 0; lsaccountid = 0; shield_target = nullptr; - SQL_log = nullptr; guild_id = GUILD_NONE; guildrank = 0; GuildBanker = false; @@ -524,47 +523,48 @@ void Client::ReportConnectingState() { } bool Client::SaveAA(){ - int first_entry = 0; - std::string rquery; - /* Save Player AA */ - int spentpoints = 0; - for (int a = 0; a < MAX_PP_AA_ARRAY; a++) { - uint32 points = aa[a]->value; - if (points > HIGHEST_AA_VALUE) { - aa[a]->value = HIGHEST_AA_VALUE; - points = HIGHEST_AA_VALUE; - } - if (points > 0) { - SendAA_Struct* curAA = zone->FindAA(aa[a]->AA - aa[a]->value + 1); - if (curAA) { - for (int rank = 0; rank::iterator RequiredLevel = AARequiredLevelAndCost.find(aa[a]->AA - aa[a]->value + 1 + rank); - if (RequiredLevel != AARequiredLevelAndCost.end()) { - spentpoints += RequiredLevel->second.Cost; - } - else - spentpoints += (curAA->cost + (curAA->cost_inc * rank)); - } - } - } - } - m_pp.aapoints_spent = spentpoints + m_epp.expended_aa; - int highest = 0; - for (int a = 0; a < MAX_PP_AA_ARRAY; a++) { - if (aa[a]->AA > 0) { // those with value 0 will be cleaned up on next load - if (first_entry != 1){ - rquery = StringFormat("REPLACE INTO `character_alternate_abilities` (id, slot, aa_id, aa_value, charges)" - " VALUES (%u, %u, %u, %u, %u)", character_id, a, aa[a]->AA, aa[a]->value, aa[a]->charges); - first_entry = 1; - } else { - rquery = rquery + StringFormat(", (%u, %u, %u, %u, %u)", character_id, a, aa[a]->AA, aa[a]->value, aa[a]->charges); - } - highest = a; - } - } - auto results = database.QueryDatabase(rquery); - /* This is another part of the hack to clean up holes left by expendable AAs */ - rquery = StringFormat("DELETE FROM `character_alternate_abilities` WHERE `id` = %u AND `slot` > %d", character_id, highest); + //aa old + //int first_entry = 0; + //std::string rquery; + ///* Save Player AA */ + //int spentpoints = 0; + //for (int a = 0; a < MAX_PP_AA_ARRAY; a++) { + // uint32 points = aa[a]->value; + // if (points > HIGHEST_AA_VALUE) { + // aa[a]->value = HIGHEST_AA_VALUE; + // points = HIGHEST_AA_VALUE; + // } + // if (points > 0) { + // SendAA_Struct* curAA = zone->FindAA(aa[a]->AA - aa[a]->value + 1); + // if (curAA) { + // for (int rank = 0; rank::iterator RequiredLevel = AARequiredLevelAndCost.find(aa[a]->AA - aa[a]->value + 1 + rank); + // if (RequiredLevel != AARequiredLevelAndCost.end()) { + // spentpoints += RequiredLevel->second.Cost; + // } + // else + // spentpoints += (curAA->cost + (curAA->cost_inc * rank)); + // } + // } + // } + //} + //m_pp.aapoints_spent = spentpoints + m_epp.expended_aa; + //int highest = 0; + //for (int a = 0; a < MAX_PP_AA_ARRAY; a++) { + // if (aa[a]->AA > 0) { // those with value 0 will be cleaned up on next load + // if (first_entry != 1){ + // rquery = StringFormat("REPLACE INTO `character_alternate_abilities` (id, slot, aa_id, aa_value, charges)" + // " VALUES (%u, %u, %u, %u, %u)", character_id, a, aa[a]->AA, aa[a]->value, aa[a]->charges); + // first_entry = 1; + // } else { + // rquery = rquery + StringFormat(", (%u, %u, %u, %u, %u)", character_id, a, aa[a]->AA, aa[a]->value, aa[a]->charges); + // } + // highest = a; + // } + //} + //auto results = database.QueryDatabase(rquery); + ///* This is another part of the hack to clean up holes left by expendable AAs */ + //rquery = StringFormat("DELETE FROM `character_alternate_abilities` WHERE `id` = %u AND `slot` > %d", character_id, highest); return true; } diff --git a/zone/client.h b/zone/client.h index 1a1e32c6f..c2d3b1f63 100644 --- a/zone/client.h +++ b/zone/client.h @@ -761,7 +761,7 @@ public: //New AA Methods void SendAlternateAdvancementRank(int aa_id, int level); - void SendAlternateAdvancementList(); + void SendAlternateAdvancementTable(); //old AA Methods void SendAAList(); @@ -787,8 +787,6 @@ public: void DisableAAEffect(aaEffectType type); bool CheckAAEffect(aaEffectType type); void HandleAAAction(aaID activate); - uint32 GetAA(uint32 aa_id) const; - bool SetAA(uint32 aa_id, uint32 new_value); inline uint32 GetAAPointsSpent() { return m_pp.aapoints_spent; } int16 CalcAAFocusEffect(focusType type, uint16 focus_spell, uint16 spell_id); int16 CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id); @@ -1493,11 +1491,7 @@ private: uint32 tribute_master_id; - FILE *SQL_log; uint32 max_AAXP; - uint32 staminacount; - AA_Array* aa[MAX_PP_AA_ARRAY]; //this list contains pointers into our player profile - std::map aa_points; bool npcflag; uint8 npclevel; bool feigned; diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 77431ecd9..c242d50e2 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1091,7 +1091,7 @@ void Client::Handle_Connect_OP_SendAAStats(const EQApplicationPacket *app) void Client::Handle_Connect_OP_SendAATable(const EQApplicationPacket *app) { - SendAlternateAdvancementList(); + SendAlternateAdvancementTable(); return; } @@ -1440,58 +1440,60 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) if (m_pp.ldon_points_available < 0 || m_pp.ldon_points_available > 2000000000){ m_pp.ldon_points_available = 0; } /* Initialize AA's : Move to function eventually */ - for (uint32 a = 0; a < MAX_PP_AA_ARRAY; a++) - aa[a] = &m_pp.aa_array[a]; - query = StringFormat( - "SELECT " - "slot, " - "aa_id, " - "aa_value, " - "charges " - "FROM " - "`character_alternate_abilities` " - "WHERE `id` = %u ORDER BY `slot`", this->CharacterID()); - results = database.QueryDatabase(query); i = 0; - int offset = 0; // offset to fix the hole from expendables - for (auto row = results.begin(); row != results.end(); ++row) { - i = atoi(row[0]) - offset; - m_pp.aa_array[i].AA = atoi(row[1]); - m_pp.aa_array[i].value = atoi(row[2]); - m_pp.aa_array[i].charges = atoi(row[3]); - /* A used expendable could cause there to be a "hole" in the array, this is very bad. Bad things like keeping your expendable after use. - We could do a few things, one of them being reshuffling when the hole is created or defer the fixing until a later point, like during load! - Or just never making a hole in the array and just have hacks every where. Fixing the hole at load really just keeps 1 hack in Client::SendAATable - and keeping this offset that will cause the next AA to be pushed back over the hole. We also need to clean up on save so we don't have multiple - entries for a single AA. - */ - if (m_pp.aa_array[i].value == 0) - offset++; - } - for (uint32 a = 0; a < MAX_PP_AA_ARRAY; a++){ - uint32 id = aa[a]->AA; - //watch for invalid AA IDs - if (id == aaNone) - continue; - if (id >= aaHighestID) { - aa[a]->AA = aaNone; - aa[a]->value = 0; - continue; - } - if (aa[a]->value == 0) { - aa[a]->AA = aaNone; - continue; - } - if (aa[a]->value > HIGHEST_AA_VALUE) { - aa[a]->AA = aaNone; - aa[a]->value = 0; - continue; - } - - if (aa[a]->value > 1) /* hack in some stuff for sony's new AA method (where each level of each aa.has a seperate ID) */ - aa_points[(id - aa[a]->value + 1)] = aa[a]->value; - else - aa_points[id] = aa[a]->value; - } + //aa old + //for (uint32 a = 0; a < MAX_PP_AA_ARRAY; a++) + // aa[a] = &m_pp.aa_array[a]; + //query = StringFormat( + // "SELECT " + // "slot, " + // "aa_id, " + // "aa_value, " + // "charges " + // "FROM " + // "`character_alternate_abilities` " + // "WHERE `id` = %u ORDER BY `slot`", this->CharacterID()); + //results = database.QueryDatabase(query); i = 0; + //int offset = 0; // offset to fix the hole from expendables + //for (auto row = results.begin(); row != results.end(); ++row) { + // i = atoi(row[0]) - offset; + // m_pp.aa_array[i].AA = atoi(row[1]); + // m_pp.aa_array[i].value = atoi(row[2]); + // m_pp.aa_array[i].charges = atoi(row[3]); + // /* A used expendable could cause there to be a "hole" in the array, this is very bad. Bad things like keeping your expendable after use. + // We could do a few things, one of them being reshuffling when the hole is created or defer the fixing until a later point, like during load! + // Or just never making a hole in the array and just have hacks every where. Fixing the hole at load really just keeps 1 hack in Client::SendAATable + // and keeping this offset that will cause the next AA to be pushed back over the hole. We also need to clean up on save so we don't have multiple + // entries for a single AA. + // */ + // if (m_pp.aa_array[i].value == 0) + // offset++; + //} + //for (uint32 a = 0; a < MAX_PP_AA_ARRAY; a++){ + // uint32 id = aa[a]->AA; + // //watch for invalid AA IDs + // if (id == aaNone) + // continue; + // if (id >= aaHighestID) { + // aa[a]->AA = aaNone; + // aa[a]->value = 0; + // continue; + // } + // if (aa[a]->value == 0) { + // aa[a]->AA = aaNone; + // continue; + // } + // if (aa[a]->value > HIGHEST_AA_VALUE) { + // aa[a]->AA = aaNone; + // aa[a]->value = 0; + // continue; + // } + // + // //aa old +// // if (aa[a]->value > 1) /* hack in some stuff for sony's new AA method (where each level of each aa.has a seperate ID) */ +// // aa_points[(id - aa[a]->value + 1)] = aa[a]->value; +// // else +// // aa_points[id] = aa[a]->value; + //} if (SPDAT_RECORDS > 0) { for (uint32 z = 0; z #include #include @@ -860,7 +861,6 @@ public: uint32 GetZoneID() const; //for perl virtual int32 CheckAggroAmount(uint16 spell_id, bool isproc = false); virtual int32 CheckHealAggroAmount(uint16 spell_id, uint32 heal_possible = 0); - virtual uint32 GetAA(uint32 aa_id) const { return(0); } uint32 GetInstrumentMod(uint16 spell_id) const; int CalcSpellEffectValue(uint16 spell_id, int effect_id, int caster_level = 1, uint32 instrument_mod = 10, Mob *caster = nullptr, int ticsremaining = 0); @@ -956,6 +956,12 @@ public: void Tune_FindAccuaryByHitChance(Mob* defender, Mob *attacker, float hit_chance, int interval, int max_loop, int avoid_override, int Msg = 0); void Tune_FindAvoidanceByHitChance(Mob* defender, Mob *attacker, float hit_chance, int interval, int max_loop, int acc_override, int Msg = 0); + //aa new + uint32 GetAA(uint32 rank_id) const; + bool SetAA(uint32 rank_id, uint32 new_value); + bool CanUseAlternateAdvancementRank(AA::Rank *rank); + bool CanPurchaseAlternateAdvancementRank(AA::Rank *ran); + protected: void CommonDamage(Mob* other, int32 &damage, const uint16 spell_id, const SkillUseTypes attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic); static uint16 GetProcID(uint16 spell_id, uint8 effect_index); @@ -969,7 +975,6 @@ protected: virtual bool AI_PursueCastCheck() { return(false); } virtual bool AI_IdleCastCheck() { return(false); } - bool IsFullHP; bool moved; @@ -1311,6 +1316,8 @@ protected: bool bEnraged; bool destructibleobject; + std::unordered_map aa_ranks; + private: void _StopSong(); //this is not what you think it is Mob* target; diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index b331113bd..7e91550c5 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -5231,24 +5231,25 @@ uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) { uint32 aa_AA = 0; uint32 aa_value = 0; - for (int i = 0; i < MAX_PP_AA_ARRAY; i++) - { - aa_AA = this->aa[i]->AA; - aa_value = this->aa[i]->value; - if (aa_AA < 1 || aa_value < 1) - continue; - - if (SympatheticProcList.size() > MAX_SYMPATHETIC_PROCS) - continue; - - proc_spellid = CalcAAFocus(type, aa_AA, spell_id); - - if (IsValidSpell(proc_spellid)){ - ProcChance = GetSympatheticProcChances(spell_id, GetAABase1(aa_AA, 1)); - if(zone->random.Roll(ProcChance)) - SympatheticProcList.push_back(proc_spellid); - } - } + //aa old + //for (int i = 0; i < MAX_PP_AA_ARRAY; i++) + //{ + // aa_AA = this->aa[i]->AA; + // aa_value = this->aa[i]->value; + // if (aa_AA < 1 || aa_value < 1) + // continue; + // + // if (SympatheticProcList.size() > MAX_SYMPATHETIC_PROCS) + // continue; + // + // proc_spellid = CalcAAFocus(type, aa_AA, spell_id); + // + // if (IsValidSpell(proc_spellid)){ + // ProcChance = GetSympatheticProcChances(spell_id, GetAABase1(aa_AA, 1)); + // if(zone->random.Roll(ProcChance)) + // SympatheticProcList.push_back(proc_spellid); + // } + //} } if (SympatheticProcList.size() > 0) @@ -5503,21 +5504,22 @@ int16 Client::GetFocusEffect(focusType type, uint16 spell_id) { uint32 aa_AA = 0; uint32 aa_value = 0; - for (int i = 0; i < MAX_PP_AA_ARRAY; i++) - { - aa_AA = this->aa[i]->AA; - aa_value = this->aa[i]->value; - if (aa_AA < 1 || aa_value < 1) - continue; - - Total3 = CalcAAFocus(type, aa_AA, spell_id); - if (Total3 > 0 && realTotal3 >= 0 && Total3 > realTotal3) { - realTotal3 = Total3; - } - else if (Total3 < 0 && Total3 < realTotal3) { - realTotal3 = Total3; - } - } + //aa old + //for (int i = 0; i < MAX_PP_AA_ARRAY; i++) + //{ + // aa_AA = this->aa[i]->AA; + // aa_value = this->aa[i]->value; + // if (aa_AA < 1 || aa_value < 1) + // continue; + // + // Total3 = CalcAAFocus(type, aa_AA, spell_id); + // if (Total3 > 0 && realTotal3 >= 0 && Total3 > realTotal3) { + // realTotal3 = Total3; + // } + // else if (Total3 < 0 && Total3 < realTotal3) { + // realTotal3 = Total3; + // } + //} } if(type == focusReagentCost && IsSummonPetSpell(spell_id) && GetAA(aaElementalPact)) diff --git a/zone/zone.h b/zone/zone.h index fbe1b48d1..536ff048c 100644 --- a/zone/zone.h +++ b/zone/zone.h @@ -117,6 +117,7 @@ public: //new AA void LoadAlternateAdvancement(); AA::Ability *GetAlternateAdvancementAbility(int id); + AA::Ability *GetAlternateAdvancementAbilityByRank(int rank_id); AA::Rank *GetAlternateAdvancementRank(int rank_id); //old AA From 8422ce6f25b0f047703e98f31d242609ba9e2686 Mon Sep 17 00:00:00 2001 From: KimLS Date: Tue, 9 Jun 2015 22:46:53 -0700 Subject: [PATCH 07/48] Moved effects to a vector since we dont need the random access by slot --- zone/aa.cpp | 14 +++++++------- zone/aa_rank.h | 2 +- zone/aa_rank_effects.h | 1 + 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index a66b533f6..c9fa78ab2 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -2120,10 +2120,10 @@ void Client::SendAlternateAdvancementRank(int aa_id, int level) { outapp->SetWritePosition(sizeof(AARankInfo_Struct)); for(auto effect : rank->effects) { - outapp->WriteSInt32(effect.second.effect_id); - outapp->WriteSInt32(effect.second.base1); - outapp->WriteSInt32(effect.second.base2); - outapp->WriteSInt32(effect.first); + outapp->WriteSInt32(effect.effect_id); + outapp->WriteSInt32(effect.base1); + outapp->WriteSInt32(effect.base2); + outapp->WriteSInt32(effect.slot); } for(auto prereq : rank->prereqs) { @@ -2361,17 +2361,17 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map 12) + if(effect.slot < 1 || effect.slot > 12) continue; if(ranks.count(rank_id) > 0) { AA::Rank *rank = ranks[rank_id].get(); - rank->effects[slot] = effect; + rank->effects.push_back(effect); } } } else { diff --git a/zone/aa_rank.h b/zone/aa_rank.h index d35582834..20628a506 100644 --- a/zone/aa_rank.h +++ b/zone/aa_rank.h @@ -47,7 +47,7 @@ public: uint32 account_time_required; int total_cost; Ability *base_ability; - std::unordered_map effects; + std::vector effects; std::vector prereqs; }; diff --git a/zone/aa_rank_effects.h b/zone/aa_rank_effects.h index fd65d507f..d68937078 100644 --- a/zone/aa_rank_effects.h +++ b/zone/aa_rank_effects.h @@ -27,6 +27,7 @@ namespace AA struct RankEffect { + int slot; int effect_id; int base1; int base2; From 1589169200d3c27cc2e76e5bb21ecaf672dc47fe Mon Sep 17 00:00:00 2001 From: KimLS Date: Wed, 10 Jun 2015 22:46:57 -0700 Subject: [PATCH 08/48] AAs should load from character data now, though will be fucked up if you already had stacked aas. --- common/eq_packet_structs.h | 2 +- common/patches/rof2.cpp | 3 +- common/patches/sod.cpp | 4 +- common/patches/sof.cpp | 4 +- common/patches/uf.cpp | 79 +- common/ptimer.h | 4 - zone/aa.cpp | 2025 +++++++++++++++------------------- zone/aa.h | 11 - zone/aa_rank.h | 1 + zone/attack.cpp | 63 +- zone/bonuses.cpp | 1533 +++++++++++++------------- zone/bot.cpp | 2126 ++++++++++++++++++------------------ zone/bot.h | 2 - zone/client.cpp | 52 +- zone/client.h | 14 +- zone/client_packet.cpp | 85 +- zone/command.cpp | 99 +- zone/exp.cpp | 2 +- zone/mob.h | 5 +- zone/net.cpp | 3 - zone/perl_client.cpp | 55 +- zone/spell_effects.cpp | 899 +++++++-------- zone/zone.cpp | 15 - zone/zone.h | 24 +- zone/zonedb.h | 13 +- 25 files changed, 3318 insertions(+), 3805 deletions(-) diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index 0c4335016..e562a94e5 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -4243,7 +4243,7 @@ struct AARankInfo_Struct int32 total_cost; int32 expansion; int32 category; - uint8 charges; + uint32 charges; uint8 grant_only; uint32 total_effects; uint32 total_prereqs; diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index 096467edf..a4f484a9e 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -2466,7 +2466,8 @@ namespace RoF2 outapp->WriteUInt32(emu->lastlogin); outapp->WriteUInt32(emu->timePlayedMin); outapp->WriteUInt32(emu->timeentitledonaccount); - outapp->WriteUInt32(0x0007ffff); // Expansion bitmask + outapp->WriteUInt32(emu->expansions); + //outapp->WriteUInt32(0x0007ffff); // Expansion bitmask outapp->WriteUInt32(structs::MAX_PP_LANGUAGE); diff --git a/common/patches/sod.cpp b/common/patches/sod.cpp index 80201da1e..69bb7f4c1 100644 --- a/common/patches/sod.cpp +++ b/common/patches/sod.cpp @@ -1677,8 +1677,8 @@ namespace SoD OUT(copper_bank); OUT(platinum_shared); // OUT(unknown13156[84]); - //OUT(expansions); - eq->expansions = 16383; + OUT(expansions); + //eq->expansions = 16383; // OUT(unknown13244[12]); OUT(autosplit); // OUT(unknown13260[16]); diff --git a/common/patches/sof.cpp b/common/patches/sof.cpp index 7b0e14c1c..2d8ec8d3a 100644 --- a/common/patches/sof.cpp +++ b/common/patches/sof.cpp @@ -1335,8 +1335,8 @@ namespace SoF OUT(copper_bank); OUT(platinum_shared); // OUT(unknown13156[84]); - //OUT(expansions); - eq->expansions = 16383; + OUT(expansions); + //eq->expansions = 16383; // OUT(unknown13244[12]); OUT(autosplit); // OUT(unknown13260[16]); diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index 81ad197d6..5b879af9d 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -1804,15 +1804,13 @@ namespace UF // OUT(unknown00224[48]); //NOTE: new client supports 300 AAs, our internal rep/PP //only supports 240.. - //for (r = 0; r < MAX_PP_AA_ARRAY; r++) { - // OUT(aa_array[r].AA); - // OUT(aa_array[r].value); - // OUT(aa_array[r].charges); - //} - // OUT(unknown02220[4]); + for (r = 0; r < MAX_PP_AA_ARRAY; r++) { + eq->aa_array[r].AA = emu->aa_array[r].AA; + eq->aa_array[r].value = emu->aa_array[r].value; + eq->aa_array[r].charges = emu->aa_array[r].charges; + } - eq->aa_array[0].AA = 6; - eq->aa_array[0].value = 5; + // OUT(unknown02220[4]); OUT(mana); OUT(cur_hp); @@ -1943,8 +1941,8 @@ namespace UF OUT(copper_bank); OUT(platinum_shared); // OUT(unknown13156[84]); - //OUT(expansions); - eq->expansions = 0xffff; + OUT(expansions); + //eq->expansions = 0x1ffff; // OUT(unknown13244[12]); OUT(autosplit); // OUT(unknown13260[16]); @@ -2149,7 +2147,6 @@ namespace UF ENCODE(OP_SendAATable) { -#if 1 EQApplicationPacket *inapp = *p; *p = nullptr; AARankInfo_Struct *emu = (AARankInfo_Struct*)inapp->pBuffer; @@ -2180,8 +2177,8 @@ namespace UF eq->last_id = emu->prev_id; eq->next_id = emu->next_id; eq->cost2 = emu->total_cost; - eq->grant_only = emu->grant_only > 0 ? true : false; - eq->expendable_charges = emu->charges ? 1 : 0; + eq->grant_only = emu->grant_only; + eq->expendable_charges = emu->charges; eq->aa_expansion = emu->expansion; eq->special_category = emu->category; eq->total_abilities = emu->total_effects; @@ -2194,65 +2191,13 @@ namespace UF } if(emu->total_prereqs > 0) { - eq->prereq_skill = -(int)inapp->ReadUInt32(); + eq->prereq_skill = inapp->ReadUInt32(); eq->prereq_minpoints = inapp->ReadUInt32(); } - Log.Out(Logs::General, Logs::Status, "%s", DumpPacketToString(outapp).c_str()); + //Log.Out(Logs::General, Logs::Status, "%s", DumpPacketToString(outapp).c_str()); dest->FastQueuePacket(&outapp); delete inapp; -#else - ENCODE_LENGTH_ATLEAST(SendAA_Struct); - SETUP_VAR_ENCODE(SendAA_Struct); - ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); - - // Check clientver field to verify this AA should be sent for SoF - // clientver 1 is for all clients and 6 is for Underfoot - if(emu->clientver <= 6) - { - OUT(id); - eq->unknown004 = 1; - //eq->hotkey_sid = (emu->hotkey_sid==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->hotkey_sid2 = (emu->hotkey_sid2==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->title_sid = emu->id - emu->current_level + 1; - //eq->desc_sid = emu->id - emu->current_level + 1; - eq->hotkey_sid = (emu->hotkey_sid == 4294967295UL) ? 0 : (emu->sof_next_skill); - eq->hotkey_sid2 = (emu->hotkey_sid2 == 4294967295UL) ? 0 : (emu->sof_next_skill); - eq->title_sid = emu->sof_next_skill; - eq->desc_sid = emu->sof_next_skill; - OUT(class_type); - OUT(cost); - OUT(seq); - OUT(current_level); - OUT(prereq_skill); - OUT(prereq_minpoints); - eq->type = emu->sof_type; - OUT(spellid); - OUT(spell_type); - OUT(spell_refresh); - OUT(classes); - //OUT(berserker); - //eq->max_level = emu->sof_max_level; - OUT(max_level); - OUT(last_id); - OUT(next_id); - OUT(cost2); - eq->aa_expansion = emu->aa_expansion; - eq->special_category = emu->special_category; - eq->expendable_charges = emu->special_category == 7 ? 1 : 0; // temp hack, this can actually be any number - OUT(total_abilities); - unsigned int r; - for(r = 0; r < emu->total_abilities; r++) { - OUT(abilities[r].skill_id); - OUT(abilities[r].base1); - OUT(abilities[r].base2); - OUT(abilities[r].slot); - } - } - - Log.Out(Logs::General, Logs::Status, "%s", DumpPacketToString(__packet).c_str()); - FINISH_ENCODE(); -#endif } ENCODE(OP_SendCharInfo) diff --git a/common/ptimer.h b/common/ptimer.h index 8a559a148..7194ab49b 100644 --- a/common/ptimer.h +++ b/common/ptimer.h @@ -139,8 +139,4 @@ protected: std::map _list; }; -//code prettying macros -#define AA_Choose3(val, v1, v2, v3) (val==1?v1:(val==2?v2:v3)) -#define AA_Choose5(val, v1, v2, v3, v4, v5) (val==1?v1:(val==2?v2:(val==3?v3:(val==4?v4:v5)))) - #endif diff --git a/zone/aa.cpp b/zone/aa.cpp index c9fa78ab2..4bbdf88a6 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -37,35 +37,28 @@ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net) extern QueryServ* QServ; - -AA_DBAction AA_Actions[aaHighestID][MAX_AA_ACTION_RANKS]; //[aaid][rank] -std::mapaas_send; -std::map > aa_effects; //stores the effects from the aa_effects table in memory -std::map AARequiredLevelAndCost; - - int Client::GetAATimerID(aaID activate) { - SendAA_Struct* aa2 = zone->FindAA(activate); - - if(!aa2) - { - for(int i = 1;i < MAX_AA_ACTION_RANKS; ++i) - { - int a = activate - i; - - if(a <= 0) - break; - - aa2 = zone->FindAA(a); - - if(aa2 != nullptr) - break; - } - } - - if(aa2) - return aa2->spell_type; + //SendAA_Struct* aa2 = zone->FindAA(activate); + // + //if(!aa2) + //{ + // for(int i = 1;i < MAX_AA_ACTION_RANKS; ++i) + // { + // int a = activate - i; + // + // if(a <= 0) + // break; + // + // aa2 = zone->FindAA(a); + // + // if(aa2 != nullptr) + // break; + // } + //} + // + //if(aa2) + // return aa2->spell_type; return 0; } @@ -96,400 +89,400 @@ int Client::CalcAAReuseTimer(const AA_DBAction *caa) { } void Client::ActivateAA(aaID activate){ - if(activate < 0 || activate >= aaHighestID) - return; - if(IsStunned() || IsFeared() || IsMezzed() || IsSilenced() || IsPet() || IsSitting() || GetFeigned()) - return; - - int AATimerID = GetAATimerID(activate); - - SendAA_Struct* aa2 = nullptr; - aaID aaid = activate; - uint8 activate_val = GetAA(activate); - //this wasn't taking into acct multi tiered act talents before... - if(activate_val == 0){ - aa2 = zone->FindAA(activate); - if(!aa2){ - int i; - int a; - for(i=1;iFindAA(a); - if(aa2 != nullptr) - break; - } - } - if(aa2){ - aaid = (aaID) aa2->id; - activate_val = GetAA(aa2->id); - } - } - - if (activate_val == 0){ - return; - } - - if(aa2) - { - if(aa2->account_time_required) - { - if((Timer::GetTimeSeconds() + account_creation) < aa2->account_time_required) - { - return; - } - } - } - - if(!p_timers.Expired(&database, AATimerID + pTimerAAStart)) - { - uint32 aaremain = p_timers.GetRemainingTime(AATimerID + pTimerAAStart); - uint32 aaremain_hr = aaremain / (60 * 60); - uint32 aaremain_min = (aaremain / 60) % 60; - uint32 aaremain_sec = aaremain % 60; - - if(aa2) { - if (aaremain_hr >= 1) //1 hour or more - Message(13, "You can use the ability %s again in %u hour(s) %u minute(s) %u seconds", - aa2->name, aaremain_hr, aaremain_min, aaremain_sec); - else //less than an hour - Message(13, "You can use the ability %s again in %u minute(s) %u seconds", - aa2->name, aaremain_min, aaremain_sec); - } else { - if (aaremain_hr >= 1) //1 hour or more - Message(13, "You can use this ability again in %u hour(s) %u minute(s) %u seconds", - aaremain_hr, aaremain_min, aaremain_sec); - else //less than an hour - Message(13, "You can use this ability again in %u minute(s) %u seconds", - aaremain_min, aaremain_sec); - } - return; - } - - if(activate_val > MAX_AA_ACTION_RANKS) - activate_val = MAX_AA_ACTION_RANKS; - activate_val--; //to get array index. - - //get our current node, now that the indices are well bounded - const AA_DBAction *caa = &AA_Actions[aaid][activate_val]; - - if((aaid == aaImprovedHarmTouch || aaid == aaLeechTouch) && !p_timers.Expired(&database, pTimerHarmTouch)){ - Message(13,"Ability recovery time not yet met."); - return; - } - - //everything should be configured out now - - uint16 target_id = 0; - - //figure out our target - switch(caa->target) { - case aaTargetUser: - case aaTargetGroup: - target_id = GetID(); - break; - case aaTargetCurrent: - case aaTargetCurrentGroup: - if(GetTarget() == nullptr) { - Message_StringID(MT_DefaultText, AA_NO_TARGET); //You must first select a target for this ability! - p_timers.Clear(&database, AATimerID + pTimerAAStart); - return; - } - target_id = GetTarget()->GetID(); - break; - case aaTargetPet: - if(GetPet() == nullptr) { - Message(0, "A pet is required for this skill."); - return; - } - target_id = GetPetID(); - break; - } - - //handle non-spell action - if(caa->action != aaActionNone) { - if(caa->mana_cost > 0) { - if(GetMana() < caa->mana_cost) { - Message_StringID(13, INSUFFICIENT_MANA); - return; - } - SetMana(GetMana() - caa->mana_cost); - } - if(caa->reuse_time > 0) - { - uint32 timer_base = CalcAAReuseTimer(caa); - if(activate == aaImprovedHarmTouch || activate == aaLeechTouch) - { - p_timers.Start(pTimerHarmTouch, HarmTouchReuseTime); - } - p_timers.Start(AATimerID + pTimerAAStart, timer_base); - SendAATimer(AATimerID, 0, 0); - } - HandleAAAction(aaid); - } - - //cast the spell, if we have one - if(caa->spell_id > 0 && caa->spell_id < SPDAT_RECORDS) { - - if(caa->reuse_time > 0) - { - uint32 timer_base = CalcAAReuseTimer(caa); - SendAATimer(AATimerID, 0, 0); - p_timers.Start(AATimerID + pTimerAAStart, timer_base); - if(activate == aaImprovedHarmTouch || activate == aaLeechTouch) - { - p_timers.Start(pTimerHarmTouch, HarmTouchReuseTime); - } - // Bards can cast instant cast AAs while they are casting another song - if (spells[caa->spell_id].cast_time == 0 && GetClass() == BARD && IsBardSong(casting_spell_id)) { - if(!SpellFinished(caa->spell_id, entity_list.GetMob(target_id), 10, -1, -1, spells[caa->spell_id].ResistDiff, false)) { - //Reset on failed cast - SendAATimer(AATimerID, 0, 0xFFFFFF); - Message_StringID(15,ABILITY_FAILED); - p_timers.Clear(&database, AATimerID + pTimerAAStart); - return; - } - } else { - if (!CastSpell(caa->spell_id, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, AATimerID + pTimerAAStart, timer_base, 1)) { - //Reset on failed cast - SendAATimer(AATimerID, 0, 0xFFFFFF); - Message_StringID(15,ABILITY_FAILED); - p_timers.Clear(&database, AATimerID + pTimerAAStart); - return; - } - } - } - else - { - if(!CastSpell(caa->spell_id, target_id)) - return; - } - } - // Check if AA is expendable - if (aas_send[activate - activate_val]->special_category == 7) { - - // Add the AA cost to the extended profile to track overall total - m_epp.expended_aa += aas_send[activate]->cost; - - SetAA(activate, 0); - - SaveAA(); /* Save Character AA */ - SendAA(activate); - SendAATable(); - } +// if(activate < 0 || activate >= aaHighestID) +// return; +// if(IsStunned() || IsFeared() || IsMezzed() || IsSilenced() || IsPet() || IsSitting() || GetFeigned()) +// return; +// +// int AATimerID = GetAATimerID(activate); +// +// SendAA_Struct* aa2 = nullptr; +// aaID aaid = activate; +// uint8 activate_val = GetAA(activate); +// //this wasn't taking into acct multi tiered act talents before... +// if(activate_val == 0){ +// aa2 = zone->FindAA(activate); +// if(!aa2){ +// int i; +// int a; +// for(i=1;iFindAA(a); +// if(aa2 != nullptr) +// break; +// } +// } +// if(aa2){ +// aaid = (aaID) aa2->id; +// activate_val = GetAA(aa2->id); +// } +// } +// +// if (activate_val == 0){ +// return; +// } +// +// if(aa2) +// { +// if(aa2->account_time_required) +// { +// if((Timer::GetTimeSeconds() + account_creation) < aa2->account_time_required) +// { +// return; +// } +// } +// } +// +// if(!p_timers.Expired(&database, AATimerID + pTimerAAStart)) +// { +// uint32 aaremain = p_timers.GetRemainingTime(AATimerID + pTimerAAStart); +// uint32 aaremain_hr = aaremain / (60 * 60); +// uint32 aaremain_min = (aaremain / 60) % 60; +// uint32 aaremain_sec = aaremain % 60; +// +// if(aa2) { +// if (aaremain_hr >= 1) //1 hour or more +// Message(13, "You can use the ability %s again in %u hour(s) %u minute(s) %u seconds", +// aa2->name, aaremain_hr, aaremain_min, aaremain_sec); +// else //less than an hour +// Message(13, "You can use the ability %s again in %u minute(s) %u seconds", +// aa2->name, aaremain_min, aaremain_sec); +// } else { +// if (aaremain_hr >= 1) //1 hour or more +// Message(13, "You can use this ability again in %u hour(s) %u minute(s) %u seconds", +// aaremain_hr, aaremain_min, aaremain_sec); +// else //less than an hour +// Message(13, "You can use this ability again in %u minute(s) %u seconds", +// aaremain_min, aaremain_sec); +// } +// return; +// } +// +// if(activate_val > MAX_AA_ACTION_RANKS) +// activate_val = MAX_AA_ACTION_RANKS; +// activate_val--; //to get array index. +// +// //get our current node, now that the indices are well bounded +// const AA_DBAction *caa = &AA_Actions[aaid][activate_val]; +// +// if((aaid == aaImprovedHarmTouch || aaid == aaLeechTouch) && !p_timers.Expired(&database, pTimerHarmTouch)){ +// Message(13,"Ability recovery time not yet met."); +// return; +// } +// +// //everything should be configured out now +// +// uint16 target_id = 0; +// +// //figure out our target +// switch(caa->target) { +// case aaTargetUser: +// case aaTargetGroup: +// target_id = GetID(); +// break; +// case aaTargetCurrent: +// case aaTargetCurrentGroup: +// if(GetTarget() == nullptr) { +// Message_StringID(MT_DefaultText, AA_NO_TARGET); //You must first select a target for this ability! +// p_timers.Clear(&database, AATimerID + pTimerAAStart); +// return; +// } +// target_id = GetTarget()->GetID(); +// break; +// case aaTargetPet: +// if(GetPet() == nullptr) { +// Message(0, "A pet is required for this skill."); +// return; +// } +// target_id = GetPetID(); +// break; +// } +// +// //handle non-spell action +// if(caa->action != aaActionNone) { +// if(caa->mana_cost > 0) { +// if(GetMana() < caa->mana_cost) { +// Message_StringID(13, INSUFFICIENT_MANA); +// return; +// } +// SetMana(GetMana() - caa->mana_cost); +// } +// if(caa->reuse_time > 0) +// { +// uint32 timer_base = CalcAAReuseTimer(caa); +// if(activate == aaImprovedHarmTouch || activate == aaLeechTouch) +// { +// p_timers.Start(pTimerHarmTouch, HarmTouchReuseTime); +// } +// p_timers.Start(AATimerID + pTimerAAStart, timer_base); +// SendAATimer(AATimerID, 0, 0); +// } +// HandleAAAction(aaid); +// } +// +// //cast the spell, if we have one +// if(caa->spell_id > 0 && caa->spell_id < SPDAT_RECORDS) { +// +// if(caa->reuse_time > 0) +// { +// uint32 timer_base = CalcAAReuseTimer(caa); +// SendAATimer(AATimerID, 0, 0); +// p_timers.Start(AATimerID + pTimerAAStart, timer_base); +// if(activate == aaImprovedHarmTouch || activate == aaLeechTouch) +// { +// p_timers.Start(pTimerHarmTouch, HarmTouchReuseTime); +// } +// // Bards can cast instant cast AAs while they are casting another song +// if (spells[caa->spell_id].cast_time == 0 && GetClass() == BARD && IsBardSong(casting_spell_id)) { +// if(!SpellFinished(caa->spell_id, entity_list.GetMob(target_id), 10, -1, -1, spells[caa->spell_id].ResistDiff, false)) { +// //Reset on failed cast +// SendAATimer(AATimerID, 0, 0xFFFFFF); +// Message_StringID(15,ABILITY_FAILED); +// p_timers.Clear(&database, AATimerID + pTimerAAStart); +// return; +// } +// } else { +// if (!CastSpell(caa->spell_id, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, AATimerID + pTimerAAStart, timer_base, 1)) { +// //Reset on failed cast +// SendAATimer(AATimerID, 0, 0xFFFFFF); +// Message_StringID(15,ABILITY_FAILED); +// p_timers.Clear(&database, AATimerID + pTimerAAStart); +// return; +// } +// } +// } +// else +// { +// if(!CastSpell(caa->spell_id, target_id)) +// return; +// } +// } +// // Check if AA is expendable +// if (aas_send[activate - activate_val]->special_category == 7) { +// +// // Add the AA cost to the extended profile to track overall total +// m_epp.expended_aa += aas_send[activate]->cost; +// +// SetAA(activate, 0); +// +// SaveAA(); /* Save Character AA */ +// SendAA(activate); +// SendAATable(); +// } } void Client::HandleAAAction(aaID activate) { - if(activate < 0 || activate >= aaHighestID) - return; - - uint8 activate_val = GetAA(activate); - - if (activate_val == 0) - return; - - if(activate_val > MAX_AA_ACTION_RANKS) - activate_val = MAX_AA_ACTION_RANKS; - activate_val--; //to get array index. - - //get our current node, now that the indices are well bounded - const AA_DBAction *caa = &AA_Actions[activate][activate_val]; - - uint16 timer_id = 0; - uint16 timer_duration = caa->duration; - aaTargetType target = aaTargetUser; - - uint16 spell_id = SPELL_UNKNOWN; //gets cast at the end if not still unknown - - switch(caa->action) { - case aaActionAETaunt: - entity_list.AETaunt(this); - break; - - case aaActionFlamingArrows: - //toggle it - if(CheckAAEffect(aaEffectFlamingArrows)) - EnableAAEffect(aaEffectFlamingArrows); - else - DisableAAEffect(aaEffectFlamingArrows); - break; - - case aaActionFrostArrows: - if(CheckAAEffect(aaEffectFrostArrows)) - EnableAAEffect(aaEffectFrostArrows); - else - DisableAAEffect(aaEffectFrostArrows); - break; - - case aaActionRampage: - EnableAAEffect(aaEffectRampage, 10); - break; - - case aaActionSharedHealth: - if(CheckAAEffect(aaEffectSharedHealth)) - EnableAAEffect(aaEffectSharedHealth); - else - DisableAAEffect(aaEffectSharedHealth); - break; - - case aaActionCelestialRegen: { - //special because spell_id depends on a different AA - switch (GetAA(aaCelestialRenewal)) { - case 1: - spell_id = 3250; - break; - case 2: - spell_id = 3251; - break; - default: - spell_id = 2740; - break; - } - target = aaTargetCurrent; - break; - } - - case aaActionDireCharm: { - //special because spell_id depends on class - switch (GetClass()) - { - case DRUID: - spell_id = 2760; //2644? - break; - case NECROMANCER: - spell_id = 2759; //2643? - break; - case ENCHANTER: - spell_id = 2761; //2642? - break; - } - target = aaTargetCurrent; - break; - } - - case aaActionImprovedFamiliar: { - //Spell IDs might be wrong... - if (GetAA(aaAllegiantFamiliar)) - spell_id = 3264; //1994? - else - spell_id = 2758; //2155? - break; - } - - case aaActionActOfValor: - if(GetTarget() != nullptr) { - int curhp = GetTarget()->GetHP(); - target = aaTargetCurrent; - GetTarget()->HealDamage(curhp, this); - Death(this, 0, SPELL_UNKNOWN, SkillHandtoHand); - } - break; - - case aaActionSuspendedMinion: - if (GetPet()) { - target = aaTargetPet; - switch (GetAA(aaSuspendedMinion)) { - case 1: - spell_id = 3248; - break; - case 2: - spell_id = 3249; - break; - } - //do we really need to cast a spell? - - Message(0,"You call your pet to your side."); - GetPet()->WipeHateList(); - GetPet()->GMMove(GetX(),GetY(),GetZ()); - if (activate_val > 1) - entity_list.ClearFeignAggro(GetPet()); - } else { - Message(0,"You have no pet to call."); - } - break; - - case aaActionEscape: - Escape(); - break; - - // Don't think this code is used any longer for Bestial Alignment as the aa.has a spell_id and no nonspell_action. - case aaActionBeastialAlignment: - switch(GetBaseRace()) { - case BARBARIAN: - spell_id = AA_Choose3(activate_val, 4521, 4522, 4523); - break; - case TROLL: - spell_id = AA_Choose3(activate_val, 4524, 4525, 4526); - break; - case OGRE: - spell_id = AA_Choose3(activate_val, 4527, 4527, 4529); - break; - case IKSAR: - spell_id = AA_Choose3(activate_val, 4530, 4531, 4532); - break; - case VAHSHIR: - spell_id = AA_Choose3(activate_val, 4533, 4534, 4535); - break; - } - - case aaActionLeechTouch: - target = aaTargetCurrent; - spell_id = SPELL_HARM_TOUCH2; - EnableAAEffect(aaEffectLeechTouch, 1000); - break; - - case aaActionFadingMemories: - // Do nothing since spell effect works correctly, but mana isn't used. - break; - - default: - Log.Out(Logs::General, Logs::Error, "Unknown AA nonspell action type %d", caa->action); - return; - } - - - uint16 target_id = 0; - //figure out our target - switch(target) { - case aaTargetUser: - case aaTargetGroup: - target_id = GetID(); - break; - case aaTargetCurrent: - case aaTargetCurrentGroup: - if(GetTarget() == nullptr) { - Message_StringID(MT_DefaultText, AA_NO_TARGET); //You must first select a target for this ability! - p_timers.Clear(&database, timer_id + pTimerAAEffectStart); - return; - } - target_id = GetTarget()->GetID(); - break; - case aaTargetPet: - if(GetPet() == nullptr) { - Message(0, "A pet is required for this skill."); - return; - } - target_id = GetPetID(); - break; - } - - //cast the spell, if we have one - if(IsValidSpell(spell_id)) { - int aatid = GetAATimerID(activate); - if (!CastSpell(spell_id, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, pTimerAAStart + aatid, CalcAAReuseTimer(caa), 1)) { - SendAATimer(aatid, 0, 0xFFFFFF); - Message_StringID(15,ABILITY_FAILED); - p_timers.Clear(&database, pTimerAAStart + aatid); - return; - } - } - - //handle the duration timer if we have one. - if(timer_id > 0 && timer_duration > 0) { - p_timers.Start(pTimerAAEffectStart + timer_id, timer_duration); - } +// if(activate < 0 || activate >= aaHighestID) +// return; +// +// uint8 activate_val = GetAA(activate); +// +// if (activate_val == 0) +// return; +// +// if(activate_val > MAX_AA_ACTION_RANKS) +// activate_val = MAX_AA_ACTION_RANKS; +// activate_val--; //to get array index. +// +// //get our current node, now that the indices are well bounded +// const AA_DBAction *caa = &AA_Actions[activate][activate_val]; +// +// uint16 timer_id = 0; +// uint16 timer_duration = caa->duration; +// aaTargetType target = aaTargetUser; +// +// uint16 spell_id = SPELL_UNKNOWN; //gets cast at the end if not still unknown +// +// switch(caa->action) { +// case aaActionAETaunt: +// entity_list.AETaunt(this); +// break; +// +// case aaActionFlamingArrows: +// //toggle it +// if(CheckAAEffect(aaEffectFlamingArrows)) +// EnableAAEffect(aaEffectFlamingArrows); +// else +// DisableAAEffect(aaEffectFlamingArrows); +// break; +// +// case aaActionFrostArrows: +// if(CheckAAEffect(aaEffectFrostArrows)) +// EnableAAEffect(aaEffectFrostArrows); +// else +// DisableAAEffect(aaEffectFrostArrows); +// break; +// +// case aaActionRampage: +// EnableAAEffect(aaEffectRampage, 10); +// break; +// +// case aaActionSharedHealth: +// if(CheckAAEffect(aaEffectSharedHealth)) +// EnableAAEffect(aaEffectSharedHealth); +// else +// DisableAAEffect(aaEffectSharedHealth); +// break; +// +// case aaActionCelestialRegen: { +// //special because spell_id depends on a different AA +// switch (GetAA(aaCelestialRenewal)) { +// case 1: +// spell_id = 3250; +// break; +// case 2: +// spell_id = 3251; +// break; +// default: +// spell_id = 2740; +// break; +// } +// target = aaTargetCurrent; +// break; +// } +// +// case aaActionDireCharm: { +// //special because spell_id depends on class +// switch (GetClass()) +// { +// case DRUID: +// spell_id = 2760; //2644? +// break; +// case NECROMANCER: +// spell_id = 2759; //2643? +// break; +// case ENCHANTER: +// spell_id = 2761; //2642? +// break; +// } +// target = aaTargetCurrent; +// break; +// } +// +// case aaActionImprovedFamiliar: { +// //Spell IDs might be wrong... +// if (GetAA(aaAllegiantFamiliar)) +// spell_id = 3264; //1994? +// else +// spell_id = 2758; //2155? +// break; +// } +// +// case aaActionActOfValor: +// if(GetTarget() != nullptr) { +// int curhp = GetTarget()->GetHP(); +// target = aaTargetCurrent; +// GetTarget()->HealDamage(curhp, this); +// Death(this, 0, SPELL_UNKNOWN, SkillHandtoHand); +// } +// break; +// +// case aaActionSuspendedMinion: +// if (GetPet()) { +// target = aaTargetPet; +// switch (GetAA(aaSuspendedMinion)) { +// case 1: +// spell_id = 3248; +// break; +// case 2: +// spell_id = 3249; +// break; +// } +// //do we really need to cast a spell? +// +// Message(0,"You call your pet to your side."); +// GetPet()->WipeHateList(); +// GetPet()->GMMove(GetX(),GetY(),GetZ()); +// if (activate_val > 1) +// entity_list.ClearFeignAggro(GetPet()); +// } else { +// Message(0,"You have no pet to call."); +// } +// break; +// +// case aaActionEscape: +// Escape(); +// break; +// +// // Don't think this code is used any longer for Bestial Alignment as the aa.has a spell_id and no nonspell_action. +// case aaActionBeastialAlignment: +// switch(GetBaseRace()) { +// case BARBARIAN: +// spell_id = AA_Choose3(activate_val, 4521, 4522, 4523); +// break; +// case TROLL: +// spell_id = AA_Choose3(activate_val, 4524, 4525, 4526); +// break; +// case OGRE: +// spell_id = AA_Choose3(activate_val, 4527, 4527, 4529); +// break; +// case IKSAR: +// spell_id = AA_Choose3(activate_val, 4530, 4531, 4532); +// break; +// case VAHSHIR: +// spell_id = AA_Choose3(activate_val, 4533, 4534, 4535); +// break; +// } +// +// case aaActionLeechTouch: +// target = aaTargetCurrent; +// spell_id = SPELL_HARM_TOUCH2; +// EnableAAEffect(aaEffectLeechTouch, 1000); +// break; +// +// case aaActionFadingMemories: +// // Do nothing since spell effect works correctly, but mana isn't used. +// break; +// +// default: +// Log.Out(Logs::General, Logs::Error, "Unknown AA nonspell action type %d", caa->action); +// return; +// } +// +// +// uint16 target_id = 0; +// //figure out our target +// switch(target) { +// case aaTargetUser: +// case aaTargetGroup: +// target_id = GetID(); +// break; +// case aaTargetCurrent: +// case aaTargetCurrentGroup: +// if(GetTarget() == nullptr) { +// Message_StringID(MT_DefaultText, AA_NO_TARGET); //You must first select a target for this ability! +// p_timers.Clear(&database, timer_id + pTimerAAEffectStart); +// return; +// } +// target_id = GetTarget()->GetID(); +// break; +// case aaTargetPet: +// if(GetPet() == nullptr) { +// Message(0, "A pet is required for this skill."); +// return; +// } +// target_id = GetPetID(); +// break; +// } +// +// //cast the spell, if we have one +// if(IsValidSpell(spell_id)) { +// int aatid = GetAATimerID(activate); +// if (!CastSpell(spell_id, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, pTimerAAStart + aatid, CalcAAReuseTimer(caa), 1)) { +// SendAATimer(aatid, 0, 0xFFFFFF); +// Message_StringID(15,ABILITY_FAILED); +// p_timers.Clear(&database, pTimerAAStart + aatid); +// return; +// } +// } +// +// //handle the duration timer if we have one. +// if(timer_id > 0 && timer_duration > 0) { +// p_timers.Start(pTimerAAEffectStart + timer_id, timer_duration); +// } } void Mob::TemporaryPets(uint16 spell_id, Mob *targ, const char *name_override, uint32 duration_override, bool followme, bool sticktarg) { @@ -937,130 +930,119 @@ bool Client::CheckAAEffect(aaEffectType type) { return(false); } -void Client::SendAAStats() { - EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAExpUpdate, sizeof(AltAdvStats_Struct)); - AltAdvStats_Struct *aps = (AltAdvStats_Struct *)outapp->pBuffer; - aps->experience = m_pp.expAA; - aps->experience = (uint32)(((float)330.0f * (float)m_pp.expAA) / (float)max_AAXP); - aps->unspent = m_pp.aapoints; - aps->percentage = m_epp.perAA; - QueuePacket(outapp); - safe_delete(outapp); -} - void Client::BuyAA(AA_Action* action) { - Log.Out(Logs::Detail, Logs::AA, "Starting to buy AA %d", action->ability); - - //find the AA information from the database - SendAA_Struct* aa2 = zone->FindAA(action->ability); - if(!aa2) { - //hunt for a lower level... - int i; - int a; - for(i=1;iability - i; - if(a <= 0) - break; - Log.Out(Logs::Detail, Logs::AA, "Could not find AA %d, trying potential parent %d", action->ability, a); - aa2 = zone->FindAA(a); - if(aa2 != nullptr) - break; - } - } - if(aa2 == nullptr) - return; //invalid ability... - - if(aa2->special_category == 1 || aa2->special_category == 2) - return; // Not purchasable progression style AAs - - if(aa2->special_category == 8 && aa2->cost == 0) - return; // Not purchasable racial AAs(set a cost to make them purchasable) - - uint32 cur_level = GetAA(aa2->id); - if((aa2->id + cur_level) != action->ability) { //got invalid AA - Log.Out(Logs::Detail, Logs::AA, "Unable to find or match AA %d (found %d + lvl %d)", action->ability, aa2->id, cur_level); - return; - } - - if(aa2->account_time_required) - { - if((Timer::GetTimeSeconds() - account_creation) < aa2->account_time_required) - { - return; - } - } - - uint32 real_cost; - uint8 req_level; - std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(action->ability); - - if(RequiredLevel != AARequiredLevelAndCost.end()) { - real_cost = RequiredLevel->second.Cost; - req_level = RequiredLevel->second.Level; - } - else { - real_cost = aa2->cost + (aa2->cost_inc * cur_level); - req_level = aa2->class_type + (aa2->level_inc * cur_level); - } - - if (req_level > GetLevel()) - return; //Cheater trying to Buy AA... - - if (m_pp.aapoints >= real_cost && cur_level < aa2->max_level) { - SetAA(aa2->id, cur_level + 1); - - Log.Out(Logs::Detail, Logs::AA, "Set AA %d to level %d", aa2->id, cur_level + 1); - - m_pp.aapoints -= real_cost; - - /* Do Player Profile rank calculations and set player profile */ - SaveAA(); - /* Save to Database to avoid having to write the whole AA array to the profile, only write changes*/ - // database.SaveCharacterAA(this->CharacterID(), aa2->id, (cur_level + 1)); - - if ((RuleB(AA, Stacking) && (GetClientVersionBit() >= 4) && (aa2->hotkey_sid == 4294967295u)) - && ((aa2->max_level == (cur_level + 1)) && aa2->sof_next_id)){ - SendAA(aa2->id); - SendAA(aa2->sof_next_id); - } - else - SendAA(aa2->id); - - SendAATable(); - - /* - We are building these messages ourself instead of using the stringID to work around patch discrepencies - these are AA_GAIN_ABILITY (410) & AA_IMPROVE (411), respectively, in both Titanium & SoF. not sure about 6.2 - */ - - /* Initial purchase of an AA ability */ - if (cur_level < 1){ - Message(15, "You have gained the ability \"%s\" at a cost of %d ability %s.", aa2->name, real_cost, (real_cost>1) ? "points" : "point"); - - /* QS: Player_Log_AA_Purchases */ - if (RuleB(QueryServ, PlayerLogAAPurchases)){ - std::string event_desc = StringFormat("Initial AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); - QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); - } - } - /* Ranked purchase of an AA ability */ - else{ - Message(15, "You have improved %s %d at a cost of %d ability %s.", aa2->name, cur_level + 1, real_cost, (real_cost > 1) ? "points" : "point"); - - /* QS: Player_Log_AA_Purchases */ - if (RuleB(QueryServ, PlayerLogAAPurchases)){ - std::string event_desc = StringFormat("Ranked AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); - QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); - } - } - - SendAAStats(); - - CalcBonuses(); - if(title_manager.IsNewAATitleAvailable(m_pp.aapoints_spent, GetBaseClass())) - NotifyNewTitlesAvailable(); - } + //Log.Out(Logs::Detail, Logs::AA, "Starting to buy AA %d", action->ability); + // + ////find the AA information from the database + //SendAA_Struct* aa2 = zone->FindAA(action->ability); + ////if(!aa2) { + //// //hunt for a lower level... + //// int i; + //// int a; + //// for(i=1;iability - i; + //// if(a <= 0) + //// break; + //// Log.Out(Logs::Detail, Logs::AA, "Could not find AA %d, trying potential parent %d", action->ability, a); + //// aa2 = zone->FindAA(a); + //// if(aa2 != nullptr) + //// break; + //// } + ////} + //if(aa2 == nullptr) + // return; //invalid ability... + // + //if(aa2->special_category == 1 || aa2->special_category == 2) + // return; // Not purchasable progression style AAs + // + //if(aa2->special_category == 8 && aa2->cost == 0) + // return; // Not purchasable racial AAs(set a cost to make them purchasable) + // + //uint32 cur_level = GetAA(aa2->id); + //if((aa2->id + cur_level) != action->ability) { //got invalid AA + // Log.Out(Logs::Detail, Logs::AA, "Unable to find or match AA %d (found %d + lvl %d)", action->ability, aa2->id, cur_level); + // return; + //} + // + //if(aa2->account_time_required) + //{ + // if((Timer::GetTimeSeconds() - account_creation) < aa2->account_time_required) + // { + // return; + // } + //} + // + //uint32 real_cost; + //uint8 req_level; + ////std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(action->ability); + //// + ////if(RequiredLevel != AARequiredLevelAndCost.end()) { + //// real_cost = RequiredLevel->second.Cost; + //// req_level = RequiredLevel->second.Level; + ////} + ////else { + //// real_cost = aa2->cost + (aa2->cost_inc * cur_level); + //// req_level = aa2->class_type + (aa2->level_inc * cur_level); + ////} + // + //if (req_level > GetLevel()) + // return; //Cheater trying to Buy AA... + // + //if (m_pp.aapoints >= real_cost && cur_level < aa2->max_level) { + // SetAA(aa2->id, cur_level + 1); + // + // Log.Out(Logs::Detail, Logs::AA, "Set AA %d to level %d", aa2->id, cur_level + 1); + // + // m_pp.aapoints -= real_cost; + // + // /* Do Player Profile rank calculations and set player profile */ + // SaveAA(); + // /* Save to Database to avoid having to write the whole AA array to the profile, only write changes*/ + // // database.SaveCharacterAA(this->CharacterID(), aa2->id, (cur_level + 1)); + // + // if ((RuleB(AA, Stacking) && (GetClientVersionBit() >= 4) && (aa2->hotkey_sid == 4294967295u)) + // && ((aa2->max_level == (cur_level + 1)) && aa2->sof_next_id)){ + // SendAA(aa2->id); + // SendAA(aa2->sof_next_id); + // } + // else + // SendAA(aa2->id); + // + // SendAATable(); + // + // /* + // We are building these messages ourself instead of using the stringID to work around patch discrepencies + // these are AA_GAIN_ABILITY (410) & AA_IMPROVE (411), respectively, in both Titanium & SoF. not sure about 6.2 + // */ + // + // /* Initial purchase of an AA ability */ + // if (cur_level < 1){ + // Message(15, "You have gained the ability \"%s\" at a cost of %d ability %s.", aa2->name, real_cost, (real_cost>1) ? "points" : "point"); + // + // /* QS: Player_Log_AA_Purchases */ + // if (RuleB(QueryServ, PlayerLogAAPurchases)){ + // std::string event_desc = StringFormat("Initial AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); + // QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); + // } + // } + // /* Ranked purchase of an AA ability */ + // else{ + // Message(15, "You have improved %s %d at a cost of %d ability %s.", aa2->name, cur_level + 1, real_cost, (real_cost > 1) ? "points" : "point"); + // + // /* QS: Player_Log_AA_Purchases */ + // if (RuleB(QueryServ, PlayerLogAAPurchases)){ + // std::string event_desc = StringFormat("Ranked AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); + // QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); + // } + // } + // + // //SendAAStats(); + // + // CalcBonuses(); + // if(title_manager.IsNewAATitleAvailable(m_pp.aapoints_spent, GetBaseClass())) + // NotifyNewTitlesAvailable(); + //} } void Client::SendAATimer(uint32 ability, uint32 begin, uint32 end) { @@ -1096,114 +1078,50 @@ void Client::SendAATimers() { safe_delete(outapp); } -void Client::SendAATable() { - //Log.Out(Logs::General, Logs::Status, "SendAATable()"); - //EQApplicationPacket* outapp = new EQApplicationPacket(OP_RespondAA, sizeof(AATable_Struct)); - // - //AATable_Struct* aa2 = (AATable_Struct *)outapp->pBuffer; - //aa2->aa_spent = 10; - //aa2->aa_list[0].AA = 6; - //aa2->aa_list[0].value = 4; - //aa2->aa_list[0].charges = 0; - //aa2->aa_list[1].AA = 11; - //aa2->aa_list[1].value = 4; - //aa2->aa_list[1].charges = 0; - // - ////aa2->aa_spent = GetAAPointsSpent(); - //// - ////uint32 i; - ////for(i=0;i < MAX_PP_AA_ARRAY;i++){ - //// aa2->aa_list[i].AA = aa[i]->value ? aa[i]->AA : 0; // bit of a hack to prevent expendables punching a hole - //// aa2->aa_list[i].value = aa[i]->value; - //// aa2->aa_list[i].charges = aa[i]->charges; - ////} - //QueuePacket(outapp); - //safe_delete(outapp); -} - void Client::SendPreviousAA(uint32 id, int seq){ - Log.Out(Logs::General, Logs::Status, "SendPreviousAA(%u, %i)", id, seq); - uint32 value=0; - SendAA_Struct* saa2 = nullptr; - if(id==0) - saa2 = zone->GetAABySequence(seq); - else - saa2 = zone->FindAA(id); - if(!saa2) - return; - int size=sizeof(SendAA_Struct)+sizeof(AA_Ability)*saa2->total_abilities; - uchar* buffer = new uchar[size]; - SendAA_Struct* saa=(SendAA_Struct*)buffer; - value = GetAA(saa2->id); - EQApplicationPacket* outapp = new EQApplicationPacket(OP_SendAATable); - outapp->size=size; - outapp->pBuffer=(uchar*)saa; - value--; - memcpy(saa,saa2,size); - - if(value>0){ - if(saa->spellid==0) - saa->spellid=0xFFFFFFFF; - saa->id+=value; - saa->next_id=saa->id+1; - if(value==1) - saa->last_id=saa2->id; - else - saa->last_id=saa->id-1; - saa->current_level=value+1; - saa->cost2 = 0; //cost 2 is what the client uses to calc how many points we've spent, so we have to add up the points in order - for(uint32 i = 0; i < (value+1); i++) { - saa->cost2 += saa->cost + (saa->cost_inc * i); - } - } - - database.FillAAEffects(saa); - Log.Out(Logs::General, Logs::Status, "%s", DumpPacketToString(outapp).c_str()); - QueuePacket(outapp); - safe_delete(outapp); } void Client::SendAA(uint32 id, int seq) { - Log.Out(Logs::General, Logs::Status, "SendAA(%u, %i)", id, seq); - - uint32 value=0; - SendAA_Struct* saa2 = nullptr; - SendAA_Struct* qaa = nullptr; - SendAA_Struct* saa_pp = nullptr; - bool IsBaseLevel = true; - bool aa_stack = false; - - if(id==0) - saa2 = zone->GetAABySequence(seq); - else - saa2 = zone->FindAA(id); - if(!saa2) - return; - - uint16 classes = saa2->classes; - if(!(classes & (1 << GetClass())) && (GetClass()!=BERSERKER || saa2->berserker==0)){ - return; - } - - if(saa2->account_time_required) - { - if((Timer::GetTimeSeconds() - account_creation) < saa2->account_time_required) - { - return; - } - } - - // Hide Quest/Progression AAs unless player has been granted the first level using $client->IncrementAA(skill_id). - if (saa2->special_category == 1 || saa2->special_category == 2 ) { - if(GetAA(saa2->id) == 0) - return; - // For Quest line AA(demiplane AEs) where only 1 is visible at a time, check to make sure only the highest level obtained is shown - if(saa2->aa_expansion > 0) { - qaa = zone->FindAA(saa2->id+1); - if(qaa && (saa2->aa_expansion == qaa->aa_expansion) && GetAA(qaa->id) > 0) - return; - } - } + //Log.Out(Logs::General, Logs::Status, "SendAA(%u, %i)", id, seq); + // + //uint32 value=0; + //SendAA_Struct* saa2 = nullptr; + //SendAA_Struct* qaa = nullptr; + //SendAA_Struct* saa_pp = nullptr; + //bool IsBaseLevel = true; + //bool aa_stack = false; + // + //if(id==0) + // saa2 = zone->GetAABySequence(seq); + //else + // saa2 = zone->FindAA(id); + //if(!saa2) + // return; + // + //uint16 classes = saa2->classes; + //if(!(classes & (1 << GetClass())) && (GetClass()!=BERSERKER || saa2->berserker==0)){ + // return; + //} + // + //if(saa2->account_time_required) + //{ + // if((Timer::GetTimeSeconds() - account_creation) < saa2->account_time_required) + // { + // return; + // } + //} + // + //// Hide Quest/Progression AAs unless player has been granted the first level using $client->IncrementAA(skill_id). + //if (saa2->special_category == 1 || saa2->special_category == 2 ) { + // if(GetAA(saa2->id) == 0) + // return; + // // For Quest line AA(demiplane AEs) where only 1 is visible at a time, check to make sure only the highest level obtained is shown + // if(saa2->aa_expansion > 0) { + // qaa = zone->FindAA(saa2->id+1); + // if(qaa && (saa2->aa_expansion == qaa->aa_expansion) && GetAA(qaa->id) > 0) + // return; + // } + //} /* Beginning of Shroud AAs, these categories are for Passive and Active Shroud AAs Eventually with a toggle we could have it show player list or shroud list @@ -1211,250 +1129,182 @@ void Client::SendAA(uint32 id, int seq) { return; */ // Check for racial/Drakkin blood line AAs - if (saa2->special_category == 8) - { - uint32 client_race = this->GetBaseRace(); - - // Drakkin Bloodlines - if (saa2->aa_expansion > 522) - { - if (client_race != 522) - return; // Check for Drakkin Race - - int heritage = this->GetDrakkinHeritage() + 523; // 523 = Drakkin Race(522) + Bloodline - - if (heritage != saa2->aa_expansion) - return; - } - // Racial AAs - else if (client_race != saa2->aa_expansion) - { - return; - } - } - - /* - AA stacking on SoF+ clients. - - Note: There were many ways to achieve this effect - The method used proved to be the most straight forward and consistent. - Stacking does not currently work ideally for AA's that use hotkeys, therefore they will be excluded at this time. - - TODO: Problem with aa.hotkeys - When you reach max rank of an AA tier (ie 5/5), it automatically displays the next AA in - the series and you can not transfer the hotkey to the next AA series. To the best of the my ability and through many - different variations of coding I could not find an ideal solution to this issue. - - How stacking works: - Utilizes two new fields: sof_next_id (which is the next id in the series), sof_current_level (ranks the AA's as the current level) - 1) If no AA's purchased only display the base levels of each AA series. - 2) When you purchase an AA and its rank is maxed it sends the packet for the completed AA, and the packet - for the next aa in the series. The previous tier is removed from your window, and the new AA is displayed. - 3) When you zone/buy your player profile will be checked and determine what AA can be displayed base on what you have already. - */ - - if (RuleB(AA, Stacking) && (GetClientVersionBit() >= 4) && (saa2->hotkey_sid == 4294967295u)) - aa_stack = true; - - //if (aa_stack){ - // uint32 aa_AA = 0; - // uint32 aa_value = 0; - // for (int i = 0; i < MAX_PP_AA_ARRAY; i++) { - // if (aa[i]) { - // aa_AA = aa[i]->AA; - // aa_value = aa[i]->value; + //if (saa2->special_category == 8) + //{ + // uint32 client_race = this->GetBaseRace(); // - // if (aa_AA){ + // // Drakkin Bloodlines + // if (saa2->aa_expansion > 522) + // { + // if (client_race != 522) + // return; // Check for Drakkin Race // - // if (aa_value > 0) - // aa_AA -= aa_value-1; + // int heritage = this->GetDrakkinHeritage() + 523; // 523 = Drakkin Race(522) + Bloodline // - // saa_pp = zone->FindAA(aa_AA); - // - // if (saa_pp){ - // - // if (saa_pp->sof_next_skill == saa2->sof_next_skill){ - // - // if (saa_pp->id == saa2->id) - // break; //You already have this in the player profile. - // else if ((saa_pp->sof_current_level < saa2->sof_current_level) && (aa_value < saa_pp->max_level)) - // return; //DISABLE DISPLAY HIGHER - You have not reached max level yet of your current AA. - // else if ((saa_pp->sof_current_level < saa2->sof_current_level) && (aa_value == saa_pp->max_level) && (saa_pp->sof_next_id == saa2->id)) - // IsBaseLevel = false; //ALLOW DISPLAY HIGHER - // } - // } - // } - // } + // if (heritage != saa2->aa_expansion) + // return; + // } + // // Racial AAs + // else if (client_race != saa2->aa_expansion) + // { + // return; // } //} - - //Hide higher tiers of multi tiered AA's if the base level is not fully purchased. - if (aa_stack && IsBaseLevel && saa2->sof_current_level > 0) - return; - - int size=sizeof(SendAA_Struct)+sizeof(AA_Ability)*saa2->total_abilities; - - if(size == 0) - return; - - uchar* buffer = new uchar[size]; - SendAA_Struct* saa=(SendAA_Struct*)buffer; - memcpy(saa,saa2,size); - - if(saa->spellid==0) - saa->spellid=0xFFFFFFFF; - - value=GetAA(saa->id); - uint32 orig_val = value; - - if(value && saa->id){ - - if(value < saa->max_level){ - saa->id+=value; - saa->next_id=saa->id+1; - value++; - } - - else if (aa_stack && saa->sof_next_id){ - saa->id+=value-1; - saa->next_id=saa->sof_next_id; - - //Prevent removal of previous AA from window if next AA belongs to a higher client version. - SendAA_Struct* saa_next = nullptr; - saa_next = zone->FindAA(saa->sof_next_id); - - // this check should work as long as we continue to just add the clients and just increase - // each number .... - if (saa_next && static_cast(GetClientVersion()) < saa_next->clientver - 1) { - saa->next_id=0xFFFFFFFF; - } - } - - else{ - saa->id+=value-1; - saa->next_id=0xFFFFFFFF; - } - - uint32 current_level_mod = 0; - if (aa_stack) - current_level_mod = saa->sof_current_level; - - saa->last_id=saa->id-1; - saa->current_level=value+(current_level_mod); - saa->cost = saa2->cost + (saa2->cost_inc*(value-1)); - saa->cost2 = 0; - for(uint32 i = 0; i < value; i++) { - saa->cost2 += saa2->cost + (saa2->cost_inc * i); - } - saa->class_type = saa2->class_type + (saa2->level_inc*(value-1)); - } - - if (aa_stack){ - - if (saa->sof_current_level >= 1 && value == 0) - saa->current_level = saa->sof_current_level+1; - - saa->max_level = saa->sof_max_level; - } - - database.FillAAEffects(saa); - - if(value > 0) - { - // AA_Action stores the base ID - const AA_DBAction *caa = &AA_Actions[saa->id - value + 1][value - 1]; - - if(caa && caa->reuse_time > 0) - saa->spell_refresh = CalcAAReuseTimer(caa); - } - - //You can now use the level_inc field in the altadv_vars table to accomplish this, though still needed - //for special cases like LOH/HT due to inability to implement correct stacking of AA's that use hotkeys. - std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(saa->id); - - if(RequiredLevel != AARequiredLevelAndCost.end()) - { - saa->class_type = RequiredLevel->second.Level; - saa->cost = RequiredLevel->second.Cost; - } - - - EQApplicationPacket* outapp = new EQApplicationPacket(OP_SendAATable); - outapp->size=size; - outapp->pBuffer=(uchar*)saa; - - if(id==0 && value && (orig_val < saa->max_level)) //send previous AA only on zone in - SendPreviousAA(id, seq); - - QueuePacket(outapp); - safe_delete(outapp); - //will outapp delete the buffer for us even though it didnt make it? --- Yes, it should -} - -void Client::SendAAList(){ - Log.Out(Logs::General, Logs::Status, "SendAAList()"); - int total = zone->GetTotalAAs(); - - total = total > 2 ? 2 : total; - for(int i=0;i < total;i++){ - SendAA(0,i); - } -} - -SendAA_Struct* Zone::FindAA(uint32 id) { - return aas_send[id]; -} - -void Zone::LoadAAs() { - Log.Out(Logs::General, Logs::Status, "Loading AA information..."); - totalAAs = database.CountAAs(); - if(totalAAs == 0) { - Log.Out(Logs::General, Logs::Error, "Failed to load AAs!"); - aas = nullptr; - return; - } - aas = new SendAA_Struct *[totalAAs]; - - database.LoadAAs(aas); - - int i; - for(i=0; i < totalAAs; i++){ - SendAA_Struct* aa = aas[i]; - aas_send[aa->id] = aa; - } - - //load AA Effects into aa_effects - Log.Out(Logs::General, Logs::Status, "Loading AA Effects..."); - if (database.LoadAAEffects2()) - Log.Out(Logs::General, Logs::Status, "Loaded %d AA Effects.", aa_effects.size()); - else - Log.Out(Logs::General, Logs::Error, "Failed to load AA Effects!"); -} - -bool ZoneDatabase::LoadAAEffects2() { - aa_effects.clear(); //start fresh - - const std::string query = "SELECT aaid, slot, effectid, base1, base2 FROM aa_effects ORDER BY aaid ASC, slot ASC"; - auto results = QueryDatabase(query); - if (!results.Success()) { - return false; - } - - if (!results.RowCount()) { //no results - return false; - } - - for(auto row = results.begin(); row != results.end(); ++row) { - int aaid = atoi(row[0]); - int slot = atoi(row[1]); - int effectid = atoi(row[2]); - int base1 = atoi(row[3]); - int base2 = atoi(row[4]); - aa_effects[aaid][slot].skill_id = effectid; - aa_effects[aaid][slot].base1 = base1; - aa_effects[aaid][slot].base2 = base2; - aa_effects[aaid][slot].slot = slot; //not really needed, but we'll populate it just in case - } - - return true; + // + ///* + //AA stacking on SoF+ clients. + // + //Note: There were many ways to achieve this effect - The method used proved to be the most straight forward and consistent. + //Stacking does not currently work ideally for AA's that use hotkeys, therefore they will be excluded at this time. + // + //TODO: Problem with aa.hotkeys - When you reach max rank of an AA tier (ie 5/5), it automatically displays the next AA in + //the series and you can not transfer the hotkey to the next AA series. To the best of the my ability and through many + //different variations of coding I could not find an ideal solution to this issue. + // + //How stacking works: + //Utilizes two new fields: sof_next_id (which is the next id in the series), sof_current_level (ranks the AA's as the current level) + //1) If no AA's purchased only display the base levels of each AA series. + //2) When you purchase an AA and its rank is maxed it sends the packet for the completed AA, and the packet + //for the next aa in the series. The previous tier is removed from your window, and the new AA is displayed. + //3) When you zone/buy your player profile will be checked and determine what AA can be displayed base on what you have already. + //*/ + // + //if (RuleB(AA, Stacking) && (GetClientVersionBit() >= 4) && (saa2->hotkey_sid == 4294967295u)) + // aa_stack = true; + // + ////if (aa_stack){ + //// uint32 aa_AA = 0; + //// uint32 aa_value = 0; + //// for (int i = 0; i < MAX_PP_AA_ARRAY; i++) { + //// if (aa[i]) { + //// aa_AA = aa[i]->AA; + //// aa_value = aa[i]->value; + //// + //// if (aa_AA){ + //// + //// if (aa_value > 0) + //// aa_AA -= aa_value-1; + //// + //// saa_pp = zone->FindAA(aa_AA); + //// + //// if (saa_pp){ + //// + //// if (saa_pp->sof_next_skill == saa2->sof_next_skill){ + //// + //// if (saa_pp->id == saa2->id) + //// break; //You already have this in the player profile. + //// else if ((saa_pp->sof_current_level < saa2->sof_current_level) && (aa_value < saa_pp->max_level)) + //// return; //DISABLE DISPLAY HIGHER - You have not reached max level yet of your current AA. + //// else if ((saa_pp->sof_current_level < saa2->sof_current_level) && (aa_value == saa_pp->max_level) && (saa_pp->sof_next_id == saa2->id)) + //// IsBaseLevel = false; //ALLOW DISPLAY HIGHER + //// } + //// } + //// } + //// } + //// } + ////} + // + ////Hide higher tiers of multi tiered AA's if the base level is not fully purchased. + //if (aa_stack && IsBaseLevel && saa2->sof_current_level > 0) + // return; + // + //int size=sizeof(SendAA_Struct)+sizeof(AA_Ability)*saa2->total_abilities; + // + //if(size == 0) + // return; + // + //uchar* buffer = new uchar[size]; + //SendAA_Struct* saa=(SendAA_Struct*)buffer; + //memcpy(saa,saa2,size); + // + //if(saa->spellid==0) + // saa->spellid=0xFFFFFFFF; + // + //value=GetAA(saa->id); + //uint32 orig_val = value; + // + //if(value && saa->id){ + // + // if(value < saa->max_level){ + // saa->id+=value; + // saa->next_id=saa->id+1; + // value++; + // } + // + // else if (aa_stack && saa->sof_next_id){ + // saa->id+=value-1; + // saa->next_id=saa->sof_next_id; + // + // //Prevent removal of previous AA from window if next AA belongs to a higher client version. + // SendAA_Struct* saa_next = nullptr; + // saa_next = zone->FindAA(saa->sof_next_id); + // + // // this check should work as long as we continue to just add the clients and just increase + // // each number .... + // if (saa_next && static_cast(GetClientVersion()) < saa_next->clientver - 1) { + // saa->next_id=0xFFFFFFFF; + // } + // } + // + // else{ + // saa->id+=value-1; + // saa->next_id=0xFFFFFFFF; + // } + // + // uint32 current_level_mod = 0; + // if (aa_stack) + // current_level_mod = saa->sof_current_level; + // + // saa->last_id=saa->id-1; + // saa->current_level=value+(current_level_mod); + // saa->cost = saa2->cost + (saa2->cost_inc*(value-1)); + // saa->cost2 = 0; + // for(uint32 i = 0; i < value; i++) { + // saa->cost2 += saa2->cost + (saa2->cost_inc * i); + // } + // saa->class_type = saa2->class_type + (saa2->level_inc*(value-1)); + //} + // + //if (aa_stack){ + // + // if (saa->sof_current_level >= 1 && value == 0) + // saa->current_level = saa->sof_current_level+1; + // + // saa->max_level = saa->sof_max_level; + //} + // + ////database.FillAAEffects(saa); + // + ////if(value > 0) + ////{ + //// // AA_Action stores the base ID + //// const AA_DBAction *caa = &AA_Actions[saa->id - value + 1][value - 1]; + //// + //// if(caa && caa->reuse_time > 0) + //// saa->spell_refresh = CalcAAReuseTimer(caa); + ////} + // + ////You can now use the level_inc field in the altadv_vars table to accomplish this, though still needed + ////for special cases like LOH/HT due to inability to implement correct stacking of AA's that use hotkeys. + ////std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(saa->id); + //// + ////if(RequiredLevel != AARequiredLevelAndCost.end()) + ////{ + //// saa->class_type = RequiredLevel->second.Level; + //// saa->cost = RequiredLevel->second.Cost; + ////} + // + // + //EQApplicationPacket* outapp = new EQApplicationPacket(OP_SendAATable); + //outapp->size=size; + //outapp->pBuffer=(uchar*)saa; + // + //if(id==0 && value && (orig_val < saa->max_level)) //send previous AA only on zone in + // SendPreviousAA(id, seq); + // + //QueuePacket(outapp); + //safe_delete(outapp); + ////will outapp delete the buffer for us even though it didnt make it? --- Yes, it should } void Client::ResetAA(){ @@ -1768,262 +1618,6 @@ void Client::InspectBuffs(Client* Inspector, int Rank) Inspector->FastQueuePacket(&outapp); } -//this really need to be renamed to LoadAAActions() -bool ZoneDatabase::LoadAAEffects() { - memset(AA_Actions, 0, sizeof(AA_Actions)); //I hope the compiler is smart about this size... - - const std::string query = "SELECT aaid, rank, reuse_time, spell_id, target, " - "nonspell_action, nonspell_mana, nonspell_duration, " - "redux_aa, redux_rate, redux_aa2, redux_rate2 FROM aa_actions"; - auto results = QueryDatabase(query); - if (!results.Success()) { - return false; - } - - for (auto row = results.begin(); row != results.end(); ++row) { - - int aaid = atoi(row[0]); - int rank = atoi(row[1]); - if(aaid < 0 || aaid >= aaHighestID || rank < 0 || rank >= MAX_AA_ACTION_RANKS) - continue; - AA_DBAction *caction = &AA_Actions[aaid][rank]; - - caction->reuse_time = atoi(row[2]); - caction->spell_id = atoi(row[3]); - caction->target = (aaTargetType) atoi(row[4]); - caction->action = (aaNonspellAction) atoi(row[5]); - caction->mana_cost = atoi(row[6]); - caction->duration = atoi(row[7]); - caction->redux_aa = (aaID) atoi(row[8]); - caction->redux_rate = atoi(row[9]); - caction->redux_aa2 = (aaID) atoi(row[10]); - caction->redux_rate2 = atoi(row[11]); - - } - - return true; -} - -//Returns the number effects an aa.has when we send them to the client -//For the purposes of sizing a packet because every skill does not -//have the same number effects, they can range from none to a few depending on AA. -//counts the # of effects by counting the different slots of an AAID in the DB. - -//AndMetal: this may now be obsolete since we have Zone::GetTotalAALevels() -uint8 ZoneDatabase::GetTotalAALevels(uint32 skill_id) { - - std::string query = StringFormat("SELECT count(slot) FROM aa_effects WHERE aaid = %i", skill_id); - auto results = QueryDatabase(query); - if (!results.Success()) { - return 0; - } - - if (results.RowCount() != 1) - return 0; - - auto row = results.begin(); - - return atoi(row[0]); -} - -//this will allow us to count the number of effects for an AA by pulling the info from memory instead of the database. hopefully this will same some CPU cycles -uint8 Zone::GetTotalAALevels(uint32 skill_id) { - size_t sz = aa_effects[skill_id].size(); - return sz >= 255 ? 255 : static_cast(sz); -} - -/* -Every AA can send the client effects, which are purely for client side effects. -Essentially it's like being able to attach a very simple version of a spell to -Any given AA, it has 4 fields: -skill_id = spell effect id -slot = ID slot, doesn't appear to have any impact on stacking like real spells, just needs to be unique. -base1 = the base field of a spell -base2 = base field 2 of a spell, most AAs do not utilize this -example: - skill_id = SE_STA - slot = 1 - base1 = 15 - This would if you filled the abilities struct with this make the client show if it had - that AA an additional 15 stamina on the client's stats -*/ -void ZoneDatabase::FillAAEffects(SendAA_Struct* aa_struct){ - if(!aa_struct) - return; - - auto it = aa_effects.find(aa_struct->id); - if (it != aa_effects.end()) { - for (uint32 slot = 0; slot < aa_struct->total_abilities; slot++) { - // aa_effects is a map of a map, so the slot reference does not start at 0 - aa_struct->abilities[slot].skill_id = it->second[slot + 1].skill_id; - aa_struct->abilities[slot].base1 = it->second[slot + 1].base1; - aa_struct->abilities[slot].base2 = it->second[slot + 1].base2; - aa_struct->abilities[slot].slot = it->second[slot + 1].slot; - } - } -} - -uint32 ZoneDatabase::CountAAs(){ - - const std::string query = "SELECT count(title_sid) FROM altadv_vars"; - auto results = QueryDatabase(query); - if (!results.Success()) { - return 0; - } - - if (results.RowCount() != 1) - return 0; - - auto row = results.begin(); - - return atoi(row[0]);; -} - -uint32 ZoneDatabase::CountAAEffects() { - - const std::string query = "SELECT count(id) FROM aa_effects"; - auto results = QueryDatabase(query); - if (!results.Success()) { - return 0; - } - - if (results.RowCount() != 1) - return 0; - - auto row = results.begin(); - - return atoi(row[0]); -} - -uint32 ZoneDatabase::GetSizeAA(){ - int size=CountAAs()*sizeof(SendAA_Struct); - if(size>0) - size+=CountAAEffects()*sizeof(AA_Ability); - return size; -} - -void ZoneDatabase::LoadAAs(SendAA_Struct **load){ - if(!load) - return; - - std::string query = "SELECT skill_id FROM altadv_vars ORDER BY skill_id"; - auto results = QueryDatabase(query); - if (results.Success()) { - int skill = 0, index = 0; - for (auto row = results.begin(); row != results.end(); ++row, ++index) { - skill = atoi(row[0]); - load[index] = GetAASkillVars(skill); - load[index]->seq = index+1; - } - } else { - } - - AARequiredLevelAndCost.clear(); - query = "SELECT skill_id, level, cost from aa_required_level_cost order by skill_id"; - results = QueryDatabase(query); - if (!results.Success()) { - return; - } - - AALevelCost_Struct aalcs; - for (auto row = results.begin(); row != results.end(); ++row) { - aalcs.Level = atoi(row[1]); - aalcs.Cost = atoi(row[2]); - AARequiredLevelAndCost[atoi(row[0])] = aalcs; - } -} - -SendAA_Struct* ZoneDatabase::GetAASkillVars(uint32 skill_id) -{ - std::string query = "SET @row = 0"; //initialize "row" variable in database for next query - auto results = QueryDatabase(query); - if (!results.Success()) { - return nullptr; - } - - query = StringFormat("SELECT a.cost, a.max_level, a.hotkey_sid, a.hotkey_sid2, a.title_sid, a.desc_sid, a.type, " - "COALESCE(" //So we can return 0 if it's null. - "(" // this is our derived table that has the row # - // that we can SELECT from, because the client is stupid. - "SELECT p.prereq_index_num " - "FROM (SELECT a2.skill_id, @row := @row + 1 AS prereq_index_num " - "FROM altadv_vars a2) AS p " - "WHERE p.skill_id = a.prereq_skill), 0) " - "AS prereq_skill_index, a.prereq_minpoints, a.spell_type, a.spell_refresh, a.classes, " - "a.berserker, a.spellid, a.class_type, a.name, a.cost_inc, a.aa_expansion, a.special_category, " - "a.sof_type, a.sof_cost_inc, a.sof_max_level, a.sof_next_skill, " - "a.clientver, " // Client Version 0 = None, 1 = All, 2 = Titanium/6.2, 4 = SoF 5 = SOD 6 = UF - "a.account_time_required, a.sof_current_level, a.sof_next_id, a.level_inc " - "FROM altadv_vars a WHERE skill_id=%i", skill_id); - results = QueryDatabase(query); - if (!results.Success()) { - return nullptr; - } - - if (results.RowCount() != 1) - return nullptr; - - int total_abilities = GetTotalAALevels(skill_id); //eventually we'll want to use zone->GetTotalAALevels(skill_id) since it should save queries to the DB - int totalsize = total_abilities * sizeof(AA_Ability) + sizeof(SendAA_Struct); - - SendAA_Struct* sendaa = nullptr; - uchar* buffer; - - buffer = new uchar[totalsize]; - memset(buffer,0,totalsize); - sendaa = (SendAA_Struct*)buffer; - - auto row = results.begin(); - - //ATOI IS NOT UNSIGNED LONG-SAFE!!! - - sendaa->cost = atoul(row[0]); - sendaa->cost2 = sendaa->cost; - sendaa->max_level = atoul(row[1]); - sendaa->hotkey_sid = atoul(row[2]); - sendaa->id = skill_id; - sendaa->hotkey_sid2 = atoul(row[3]); - sendaa->title_sid = atoul(row[4]); - sendaa->desc_sid = atoul(row[5]); - sendaa->type = atoul(row[6]); - sendaa->prereq_skill = atoul(row[7]); - sendaa->prereq_minpoints = atoul(row[8]); - sendaa->spell_type = atoul(row[9]); - sendaa->spell_refresh = atoul(row[10]); - sendaa->classes = static_cast(atoul(row[11])); - sendaa->berserker = static_cast(atoul(row[12])); - sendaa->last_id = 0xFFFFFFFF; - sendaa->current_level=1; - sendaa->spellid = atoul(row[13]); - sendaa->class_type = atoul(row[14]); - strcpy(sendaa->name,row[15]); - - sendaa->total_abilities=total_abilities; - if(sendaa->max_level > 1) - sendaa->next_id=skill_id+1; - else - sendaa->next_id=0xFFFFFFFF; - - sendaa->cost_inc = atoi(row[16]); - - // Begin SoF Specific/Adjusted AA Fields - sendaa->aa_expansion = atoul(row[17]); - sendaa->special_category = atoul(row[18]); - sendaa->sof_type = atoul(row[19]); - sendaa->sof_cost_inc = atoi(row[20]); - sendaa->sof_max_level = atoul(row[21]); - sendaa->sof_next_skill = atoul(row[22]); - sendaa->clientver = atoul(row[23]); - sendaa->account_time_required = atoul(row[24]); - - //Internal use only - not sent to client - sendaa->sof_current_level = atoul(row[25]); - sendaa->sof_next_id = atoul(row[26]); - sendaa->level_inc = static_cast(atoul(row[27])); - - return sendaa; -} - void Client::DurationRampage(uint32 duration) { if(duration) { @@ -2032,6 +1626,56 @@ void Client::DurationRampage(uint32 duration) } } +void Client::RefundAA() { +// int cur = 0; +// bool refunded = false; +// +// for(int x = 0; x < aaHighestID; x++) { +// cur = GetAA(x); +// if(cur > 0){ +// SendAA_Struct* curaa = zone->FindAA(x); +// if(cur){ +// SetAA(x, 0); +// for(int j = 0; j < cur; j++) { +// m_pp.aapoints += curaa->cost + (curaa->cost_inc * j); +// refunded = true; +// } +// } +// else +// { +// m_pp.aapoints += cur; +// SetAA(x, 0); +// refunded = true; +// } +// } +// } +// +// if(refunded) { +// SaveAA(); +// Save(); +// // Kick(); +// } +} + +void Client::IncrementAA(int aa_id) { + //SendAA_Struct* aa2 = zone->FindAA(aa_id); + // + //if(aa2 == nullptr) + // return; + // + //if(GetAA(aa_id) == aa2->max_level) + // return; + // + //SetAA(aa_id, GetAA(aa_id) + 1); + // + //SaveAA(); + // + //SendAA(aa_id); + //SendAATable(); + //SendAAStats(); + //CalcBonuses(); +} + AA_SwarmPetInfo::AA_SwarmPetInfo() { target = 0; @@ -2119,14 +1763,14 @@ void Client::SendAlternateAdvancementRank(int aa_id, int level) { aai->total_prereqs = rank->prereqs.size(); outapp->SetWritePosition(sizeof(AARankInfo_Struct)); - for(auto effect : rank->effects) { + for(auto &effect : rank->effects) { outapp->WriteSInt32(effect.effect_id); outapp->WriteSInt32(effect.base1); outapp->WriteSInt32(effect.base2); outapp->WriteSInt32(effect.slot); } - for(auto prereq : rank->prereqs) { + for(auto &prereq : rank->prereqs) { outapp->WriteSInt32(prereq.aa_id); outapp->WriteSInt32(prereq.points); } @@ -2135,6 +1779,72 @@ void Client::SendAlternateAdvancementRank(int aa_id, int level) { safe_delete(outapp); } +void Client::SendAlternateAdvancementStats() { + EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAExpUpdate, sizeof(AltAdvStats_Struct)); + AltAdvStats_Struct *aps = (AltAdvStats_Struct *)outapp->pBuffer; + aps->experience = m_pp.expAA; + aps->experience = (uint32)(((float)330.0f * (float)m_pp.expAA) / (float)max_AAXP); + aps->unspent = m_pp.aapoints; + aps->percentage = m_epp.perAA; + QueuePacket(outapp); + safe_delete(outapp); +} + +void Client::SendAlternateAdvancementPoints() { + EQApplicationPacket* outapp = new EQApplicationPacket(OP_RespondAA, sizeof(AATable_Struct)); + AATable_Struct* aa2 = (AATable_Struct *)outapp->pBuffer; + + int i = 0; + for(auto &aa : zone->aa_abilities) { + auto ranks = GetAA(aa.second->first_rank_id); + if(ranks) { + AA::Rank *rank = aa.second->GetRankByPointsSpent(ranks); + if(rank) { + aa2->aa_list[i].AA = rank->id; + aa2->aa_list[i].value = ranks; + aa2->aa_list[i].charges = 0; // todo send charges + i++; + } + } + } + + + aa2->aa_spent = GetAAPointsSpent(); + QueuePacket(outapp); + safe_delete(outapp); +} + +void Client::PurchaseAlternateAdvancementRank(int rank_id) { +} + +bool ZoneDatabase::LoadAlternateAdvancement(Client *c) { + c->ClearAAs(); + std::string query = StringFormat( + "SELECT " + "aa_id, " + "aa_value, " + "charges " + "FROM " + "`character_alternate_abilities` " + "WHERE `id` = %u ORDER BY `slot`", c->CharacterID()); + MySQLRequestResult results = database.QueryDatabase(query); + + int i = 0; + for(auto row = results.begin(); row != results.end(); ++row) { + uint32 aa = atoi(row[0]); + uint32 value = atoi(row[1]); + uint32 charges = atoi(row[2]); + + c->GetPP().aa_array[i].AA = aa; + c->GetPP().aa_array[i].value = value; + c->GetPP().aa_array[i].charges = charges; + c->SetAA(aa, value, charges); + i++; + } + + return true; +} + AA::Ability *Zone::GetAlternateAdvancementAbility(int id) { auto iter = aa_abilities.find(id); if(iter != aa_abilities.end()) { @@ -2170,13 +1880,13 @@ uint32 Mob::GetAA(uint32 rank_id) const { auto iter = aa_ranks.find(ability->id); if(iter != aa_ranks.end()) { - return iter->second; + return iter->second.first; } } return 0; } -bool Mob::SetAA(uint32 rank_id, uint32 new_value) { +bool Mob::SetAA(uint32 rank_id, uint32 new_value, uint32 charges) { if(zone) { AA::Ability *ability = zone->GetAlternateAdvancementAbilityByRank(rank_id); @@ -2188,10 +1898,10 @@ bool Mob::SetAA(uint32 rank_id, uint32 new_value) { return false; } - aa_ranks[ability->id] = new_value; + aa_ranks[ability->id] = std::make_pair(new_value, charges); } - return false; + return true; } @@ -2201,6 +1911,14 @@ bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) { if(!ability) return false; + if(!ability->classes & (1 << GetClass())) { + return false; + } + + if(!(RuleI(World, ExpansionSettings) & (1 << rank->expansion))) { + return false; + } + // Passive and Active Shroud AAs // For now we skip them if(ability->category == 3 || ability->category == 4) { @@ -2247,7 +1965,15 @@ bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank) { return false; } - //check other stuff like price later + //check that we have previous rank already + if(rank->prev) { + //rank->prev-> + } + + //check prereqs + + //check price + return true; } @@ -2268,10 +1994,12 @@ void Zone::LoadAlternateAdvancement() { //process these ranks AA::Rank *current = ability.second->first; + int i = 1; while(current) { current->prev = GetAlternateAdvancementRank(current->prev_id); current->next = GetAlternateAdvancementRank(current->next_id); current->base_ability = ability.second.get(); + current->current_value = i; if(current->prev) { current->total_cost = current->cost + current->prev->total_cost; @@ -2280,6 +2008,7 @@ void Zone::LoadAlternateAdvancement() { current->total_cost = current->cost; } + i++; current = current->next; } @@ -2366,7 +2095,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map 12) + if(effect.slot < 1) continue; if(ranks.count(rank_id) > 0) { @@ -2389,7 +2118,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map 0) { AA::Rank *rank = ranks[rank_id].get(); diff --git a/zone/aa.h b/zone/aa.h index ad41fc3ae..54d495e6e 100644 --- a/zone/aa.h +++ b/zone/aa.h @@ -2137,17 +2137,6 @@ struct AALevelCost_Struct uint32 Cost; }; -//assumes that no activatable aa.has more than 5 ranks -#define MAX_AA_ACTION_RANKS 20 -extern AA_DBAction AA_Actions[aaHighestID][MAX_AA_ACTION_RANKS]; //[aaid][rank] -extern std::map AA_SwarmPets; //key=spell_id - -#define AA_Choose3(val, v1, v2, v3) (val==1?v1:(val==2?v2:v3)) - -extern std::mapaas_send; -extern std::map > aa_effects; -extern std::map AARequiredLevelAndCost; - enum { //values of AA_Action.action aaActionActivate = 0, aaActionSetEXP = 1, diff --git a/zone/aa_rank.h b/zone/aa_rank.h index 20628a506..a824f2c82 100644 --- a/zone/aa_rank.h +++ b/zone/aa_rank.h @@ -43,6 +43,7 @@ public: Rank *prev; int next_id; Rank *next; + int current_value; int expansion; uint32 account_time_required; int total_cost; diff --git a/zone/attack.cpp b/zone/attack.cpp index a229f197e..74cb33272 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -4659,38 +4659,39 @@ void Mob::TrySkillProc(Mob *on, uint16 skill, uint16 ReuseTime, bool Success, ui proc_spell_id = 0; ProcMod = 0; - std::map >::const_iterator find_iter = aa_effects.find(aaid); - if(find_iter == aa_effects.end()) - break; + //old AA + //std::map >::const_iterator find_iter = aa_effects.find(aaid); + //if(find_iter == aa_effects.end()) + // break; - for (std::map::const_iterator iter = aa_effects[aaid].begin(); iter != aa_effects[aaid].end(); ++iter) { - effect = iter->second.skill_id; - base1 = iter->second.base1; - base2 = iter->second.base2; - slot = iter->second.slot; - - if (effect == SE_SkillProc || effect == SE_SkillProcSuccess) { - proc_spell_id = base1; - ProcMod = static_cast(base2); - } - - else if (effect == SE_LimitToSkill && base1 <= HIGHEST_SKILL) { - - if (CanProc && base1 == skill && IsValidSpell(proc_spell_id)) { - float final_chance = chance * (ProcMod / 100.0f); - - if (zone->random.Roll(final_chance)) { - ExecWeaponProc(nullptr, proc_spell_id, on); - CanProc = false; - break; - } - } - } - else { - proc_spell_id = 0; - ProcMod = 0; - } - } + //for (std::map::const_iterator iter = aa_effects[aaid].begin(); iter != aa_effects[aaid].end(); ++iter) { + // effect = iter->second.skill_id; + // base1 = iter->second.base1; + // base2 = iter->second.base2; + // slot = iter->second.slot; + // + // if (effect == SE_SkillProc || effect == SE_SkillProcSuccess) { + // proc_spell_id = base1; + // ProcMod = static_cast(base2); + // } + // + // else if (effect == SE_LimitToSkill && base1 <= HIGHEST_SKILL) { + // + // if (CanProc && base1 == skill && IsValidSpell(proc_spell_id)) { + // float final_chance = chance * (ProcMod / 100.0f); + // + // if (zone->random.Roll(final_chance)) { + // ExecWeaponProc(nullptr, proc_spell_id, on); + // CanProc = false; + // break; + // } + // } + // } + // else { + // proc_spell_id = 0; + // ProcMod = 0; + // } + //} } } } diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index a2a180cef..437befe11 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -671,772 +671,773 @@ void Client::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon) int32 base2 = 0; //only really used for SE_RaiseStatCap & SE_ReduceSkillTimer in aa_effects table uint32 slot = 0; - std::map >::const_iterator find_iter = aa_effects.find(aaid); - if(find_iter == aa_effects.end()) - { - return; - } - - for (std::map::const_iterator iter = aa_effects[aaid].begin(); iter != aa_effects[aaid].end(); ++iter) { - effect = iter->second.skill_id; - base1 = iter->second.base1; - base2 = iter->second.base2; - slot = iter->second.slot; - - //we default to 0 (SE_CurrentHP) for the effect, so if there aren't any base1/2 values, we'll just skip it - if (effect == 0 && base1 == 0 && base2 == 0) - continue; - - //IsBlankSpellEffect() - if (effect == SE_Blank || (effect == SE_CHA && base1 == 0) || effect == SE_StackingCommand_Block || effect == SE_StackingCommand_Overwrite) - continue; - - Log.Out(Logs::Detail, Logs::AA, "Applying Effect %d from AA %u in slot %d (base1: %d, base2: %d) on %s", effect, aaid, slot, base1, base2, this->GetCleanName()); - - uint8 focus = IsFocusEffect(0, 0, true,effect); - if (focus) - { - newbon->FocusEffects[focus] = static_cast(effect); - continue; - } - - switch (effect) - { - //Note: AA effects that use accuracy are skill limited, while spell effect is not. - case SE_Accuracy: - if ((base2 == ALL_SKILLS) && (newbon->Accuracy[HIGHEST_SKILL+1] < base1)) - newbon->Accuracy[HIGHEST_SKILL+1] = base1; - else if (newbon->Accuracy[base2] < base1) - newbon->Accuracy[base2] += base1; - break; - case SE_CurrentHP: //regens - newbon->HPRegen += base1; - break; - case SE_CurrentEndurance: - newbon->EnduranceRegen += base1; - break; - case SE_MovementSpeed: - newbon->movementspeed += base1; //should we let these stack? - /*if (base1 > newbon->movementspeed) //or should we use a total value? - newbon->movementspeed = base1;*/ - break; - case SE_STR: - newbon->STR += base1; - break; - case SE_DEX: - newbon->DEX += base1; - break; - case SE_AGI: - newbon->AGI += base1; - break; - case SE_STA: - newbon->STA += base1; - break; - case SE_INT: - newbon->INT += base1; - break; - case SE_WIS: - newbon->WIS += base1; - break; - case SE_CHA: - newbon->CHA += base1; - break; - case SE_WaterBreathing: - //handled by client - break; - case SE_CurrentMana: - newbon->ManaRegen += base1; - break; - case SE_ItemManaRegenCapIncrease: - newbon->ItemManaRegenCap += base1; - break; - case SE_ResistFire: - newbon->FR += base1; - break; - case SE_ResistCold: - newbon->CR += base1; - break; - case SE_ResistPoison: - newbon->PR += base1; - break; - case SE_ResistDisease: - newbon->DR += base1; - break; - case SE_ResistMagic: - newbon->MR += base1; - break; - case SE_ResistCorruption: - newbon->Corrup += base1; - break; - case SE_IncreaseSpellHaste: - break; - case SE_IncreaseRange: - break; - case SE_MaxHPChange: - newbon->MaxHP += base1; - break; - case SE_Packrat: - newbon->Packrat += base1; - break; - case SE_TwoHandBash: - break; - case SE_SetBreathLevel: - break; - case SE_RaiseStatCap: - switch(base2) - { - //are these #define'd somewhere? - case 0: //str - newbon->STRCapMod += base1; - break; - case 1: //sta - newbon->STACapMod += base1; - break; - case 2: //agi - newbon->AGICapMod += base1; - break; - case 3: //dex - newbon->DEXCapMod += base1; - break; - case 4: //wis - newbon->WISCapMod += base1; - break; - case 5: //int - newbon->INTCapMod += base1; - break; - case 6: //cha - newbon->CHACapMod += base1; - break; - case 7: //mr - newbon->MRCapMod += base1; - break; - case 8: //cr - newbon->CRCapMod += base1; - break; - case 9: //fr - newbon->FRCapMod += base1; - break; - case 10: //pr - newbon->PRCapMod += base1; - break; - case 11: //dr - newbon->DRCapMod += base1; - break; - case 12: //corruption - newbon->CorrupCapMod += base1; - break; - } - break; - case SE_PetDiscipline2: - break; - case SE_SpellSlotIncrease: - break; - case SE_MysticalAttune: - newbon->BuffSlotIncrease += base1; - break; - case SE_TotalHP: - newbon->HP += base1; - break; - case SE_StunResist: - newbon->StunResist += base1; - break; - case SE_SpellCritChance: - newbon->CriticalSpellChance += base1; - break; - case SE_SpellCritDmgIncrease: - newbon->SpellCritDmgIncrease += base1; - break; - case SE_DotCritDmgIncrease: - newbon->DotCritDmgIncrease += base1; - break; - case SE_ResistSpellChance: - newbon->ResistSpellChance += base1; - break; - case SE_CriticalHealChance: - newbon->CriticalHealChance += base1; - break; - case SE_CriticalHealOverTime: - newbon->CriticalHealOverTime += base1; - break; - case SE_CriticalDoTChance: - newbon->CriticalDoTChance += base1; - break; - case SE_ReduceSkillTimer: - newbon->SkillReuseTime[base2] += base1; - break; - case SE_Fearless: - newbon->Fearless = true; - break; - case SE_PersistantCasting: - newbon->PersistantCasting += base1; - break; - case SE_DelayDeath: - newbon->DelayDeath += base1; - break; - case SE_FrontalStunResist: - newbon->FrontalStunResist += base1; - break; - case SE_ImprovedBindWound: - newbon->BindWound += base1; - break; - case SE_MaxBindWound: - newbon->MaxBindWound += base1; - break; - case SE_ExtraAttackChance: - newbon->ExtraAttackChance += base1; - break; - case SE_SeeInvis: - newbon->SeeInvis = base1; - break; - case SE_BaseMovementSpeed: - newbon->BaseMovementSpeed += base1; - break; - case SE_IncreaseRunSpeedCap: - newbon->IncreaseRunSpeedCap += base1; - break; - case SE_ConsumeProjectile: - newbon->ConsumeProjectile += base1; - break; - case SE_ForageAdditionalItems: - newbon->ForageAdditionalItems += base1; - break; - case SE_Salvage: - newbon->SalvageChance += base1; - break; - case SE_ArcheryDamageModifier: - newbon->ArcheryDamageModifier += base1; - break; - case SE_DoubleRangedAttack: - newbon->DoubleRangedAttack += base1; - break; - case SE_DamageShield: - newbon->DamageShield += base1; - break; - case SE_CharmBreakChance: - newbon->CharmBreakChance += base1; - break; - case SE_OffhandRiposteFail: - newbon->OffhandRiposteFail += base1; - break; - case SE_ItemAttackCapIncrease: - newbon->ItemATKCap += base1; - break; - case SE_GivePetGroupTarget: - newbon->GivePetGroupTarget = true; - break; - case SE_ItemHPRegenCapIncrease: - newbon->ItemHPRegenCap = +base1; - break; - case SE_Ambidexterity: - newbon->Ambidexterity += base1; - break; - case SE_PetMaxHP: - newbon->PetMaxHP += base1; - break; - case SE_AvoidMeleeChance: - newbon->AvoidMeleeChanceEffect += base1; - break; - case SE_CombatStability: - newbon->CombatStability += base1; - break; - case SE_AddSingingMod: - switch (base2) - { - case ItemTypeWindInstrument: - newbon->windMod += base1; - break; - case ItemTypeStringedInstrument: - newbon->stringedMod += base1; - break; - case ItemTypeBrassInstrument: - newbon->brassMod += base1; - break; - case ItemTypePercussionInstrument: - newbon->percussionMod += base1; - break; - case ItemTypeSinging: - newbon->singingMod += base1; - break; - } - break; - case SE_SongModCap: - newbon->songModCap += base1; - break; - case SE_PetCriticalHit: - newbon->PetCriticalHit += base1; - break; - case SE_PetAvoidance: - newbon->PetAvoidance += base1; - break; - case SE_ShieldBlock: - newbon->ShieldBlock += base1; - break; - case SE_ShieldEquipHateMod: - newbon->ShieldEquipHateMod += base1; - break; - case SE_ShieldEquipDmgMod: - newbon->ShieldEquipDmgMod[0] += base1; - newbon->ShieldEquipDmgMod[1] += base2; - break; - case SE_SecondaryDmgInc: - newbon->SecondaryDmgInc = true; - break; - case SE_ChangeAggro: - newbon->hatemod += base1; - break; - case SE_EndurancePool: - newbon->Endurance += base1; - break; - case SE_ChannelChanceItems: - newbon->ChannelChanceItems += base1; - break; - case SE_ChannelChanceSpells: - newbon->ChannelChanceSpells += base1; - break; - case SE_DoubleSpecialAttack: - newbon->DoubleSpecialAttack += base1; - break; - case SE_TripleBackstab: - newbon->TripleBackstab += base1; - break; - case SE_FrontalBackstabMinDmg: - newbon->FrontalBackstabMinDmg = true; - break; - case SE_FrontalBackstabChance: - newbon->FrontalBackstabChance += base1; - break; - case SE_BlockBehind: - newbon->BlockBehind += base1; - break; - - case SE_StrikeThrough: - case SE_StrikeThrough2: - newbon->StrikeThrough += base1; - break; - case SE_DoubleAttackChance: - newbon->DoubleAttackChance += base1; - break; - case SE_GiveDoubleAttack: - newbon->GiveDoubleAttack += base1; - break; - case SE_ProcChance: - newbon->ProcChanceSPA += base1; - break; - case SE_RiposteChance: - newbon->RiposteChance += base1; - break; - case SE_Flurry: - newbon->FlurryChance += base1; - break; - case SE_PetFlurry: - newbon->PetFlurry += base1; - break; - case SE_BardSongRange: - newbon->SongRange += base1; - break; - case SE_RootBreakChance: - newbon->RootBreakChance += base1; - break; - case SE_UnfailingDivinity: - newbon->UnfailingDivinity += base1; - break; - case SE_CrippBlowChance: - newbon->CrippBlowChance += base1; - break; - - case SE_HitChance: - { - if(base2 == ALL_SKILLS) - newbon->HitChanceEffect[HIGHEST_SKILL+1] += base1; - else - newbon->HitChanceEffect[base2] += base1; - } - - case SE_ProcOnKillShot: - for(int i = 0; i < MAX_SPELL_TRIGGER*3; i+=3) - { - if(!newbon->SpellOnKill[i] || ((newbon->SpellOnKill[i] == base2) && (newbon->SpellOnKill[i+1] < base1))) - { - //base1 = chance, base2 = SpellID to be triggered, base3 = min npc level - newbon->SpellOnKill[i] = base2; - newbon->SpellOnKill[i+1] = base1; - - if (GetLevel() > 15) - newbon->SpellOnKill[i+2] = GetLevel() - 15; //AA specifiy "non-trivial" - else - newbon->SpellOnKill[i+2] = 0; - - break; - } - } - break; - - case SE_SpellOnDeath: - for(int i = 0; i < MAX_SPELL_TRIGGER*2; i+=2) - { - if(!newbon->SpellOnDeath[i]) - { - // base1 = SpellID to be triggered, base2 = chance to fire - newbon->SpellOnDeath[i] = base1; - newbon->SpellOnDeath[i+1] = base2; - break; - } - } - break; - - case SE_TriggerOnCast: - - for(int i = 0; i < MAX_SPELL_TRIGGER; i++) - { - if (newbon->SpellTriggers[i] == aaid) - break; - - if(!newbon->SpellTriggers[i]) - { - //Save the 'aaid' of each triggerable effect to an array - newbon->SpellTriggers[i] = aaid; - break; - } - } - break; - - case SE_CriticalHitChance: - { - if(base2 == ALL_SKILLS) - newbon->CriticalHitChance[HIGHEST_SKILL+1] += base1; - else - newbon->CriticalHitChance[base2] += base1; - } - break; - - case SE_CriticalDamageMob: - { - // base1 = effect value, base2 = skill restrictions(-1 for all) - if(base2 == ALL_SKILLS) - newbon->CritDmgMob[HIGHEST_SKILL+1] += base1; - else - newbon->CritDmgMob[base2] += base1; - break; - } - - case SE_CriticalSpellChance: - { - newbon->CriticalSpellChance += base1; - - if (base2 > newbon->SpellCritDmgIncNoStack) - newbon->SpellCritDmgIncNoStack = base2; - - break; - } - - case SE_ResistFearChance: - { - if(base1 == 100) // If we reach 100% in a single spell/item then we should be immune to negative fear resist effects until our immunity is over - newbon->Fearless = true; - - newbon->ResistFearChance += base1; // these should stack - break; - } - - case SE_SkillDamageAmount: - { - if(base2 == ALL_SKILLS) - newbon->SkillDamageAmount[HIGHEST_SKILL+1] += base1; - else - newbon->SkillDamageAmount[base2] += base1; - break; - } - - case SE_SpecialAttackKBProc: - { - //You can only have one of these per client. [AA Dragon Punch] - newbon->SpecialAttackKBProc[0] = base1; //Chance base 100 = 25% proc rate - newbon->SpecialAttackKBProc[1] = base2; //Skill to KB Proc Off - break; - } - - case SE_DamageModifier: - { - if(base2 == ALL_SKILLS) - newbon->DamageModifier[HIGHEST_SKILL+1] += base1; - else - newbon->DamageModifier[base2] += base1; - break; - } - - case SE_DamageModifier2: - { - if(base2 == ALL_SKILLS) - newbon->DamageModifier2[HIGHEST_SKILL+1] += base1; - else - newbon->DamageModifier2[base2] += base1; - break; - } - - case SE_SlayUndead: - { - if(newbon->SlayUndead[1] < base1) - newbon->SlayUndead[0] = base1; // Rate - newbon->SlayUndead[1] = base2; // Damage Modifier - break; - } - - case SE_DoubleRiposte: - { - newbon->DoubleRiposte += base1; - } - - case SE_GiveDoubleRiposte: - { - //0=Regular Riposte 1=Skill Attack Riposte 2=Skill - if(base2 == 0){ - if(newbon->GiveDoubleRiposte[0] < base1) - newbon->GiveDoubleRiposte[0] = base1; - } - //Only for special attacks. - else if(base2 > 0 && (newbon->GiveDoubleRiposte[1] < base1)){ - newbon->GiveDoubleRiposte[1] = base1; - newbon->GiveDoubleRiposte[2] = base2; - } - - break; - } - - //Kayen: Not sure best way to implement this yet. - //Physically raises skill cap ie if 55/55 it will raise to 55/60 - case SE_RaiseSkillCap: - { - if(newbon->RaiseSkillCap[0] < base1){ - newbon->RaiseSkillCap[0] = base1; //value - newbon->RaiseSkillCap[1] = base2; //skill - } - break; - } - - case SE_MasteryofPast: - { - if(newbon->MasteryofPast < base1) - newbon->MasteryofPast = base1; - break; - } - - case SE_CastingLevel2: - case SE_CastingLevel: - { - newbon->effective_casting_level += base1; - break; - } - - case SE_DivineSave: - { - if(newbon->DivineSaveChance[0] < base1) - { - newbon->DivineSaveChance[0] = base1; - newbon->DivineSaveChance[1] = base2; - } - break; - } - - - case SE_SpellEffectResistChance: - { - for(int e = 0; e < MAX_RESISTABLE_EFFECTS*2; e+=2) - { - if(newbon->SEResist[e+1] && (newbon->SEResist[e] == base2) && (newbon->SEResist[e+1] < base1)){ - newbon->SEResist[e] = base2; //Spell Effect ID - newbon->SEResist[e+1] = base1; //Resist Chance - break; - } - else if (!newbon->SEResist[e+1]){ - newbon->SEResist[e] = base2; //Spell Effect ID - newbon->SEResist[e+1] = base1; //Resist Chance - break; - } - } - break; - } - - case SE_MitigateDamageShield: - { - if (base1 < 0) - base1 = base1*(-1); - - newbon->DSMitigationOffHand += base1; - break; - } - - case SE_FinishingBlow: - { - //base1 = chance, base2 = damage - if (newbon->FinishingBlow[1] < base2){ - newbon->FinishingBlow[0] = base1; - newbon->FinishingBlow[1] = base2; - } - break; - } - - case SE_FinishingBlowLvl: - { - //base1 = level, base2 = ??? (Set to 200 in AA data, possible proc rate mod?) - if (newbon->FinishingBlowLvl[0] < base1){ - newbon->FinishingBlowLvl[0] = base1; - newbon->FinishingBlowLvl[1] = base2; - } - break; - } - - case SE_StunBashChance: - newbon->StunBashChance += base1; - break; - - case SE_IncreaseChanceMemwipe: - newbon->IncreaseChanceMemwipe += base1; - break; - - case SE_CriticalMend: - newbon->CriticalMend += base1; - break; - - case SE_HealRate: - newbon->HealRate += base1; - break; - - case SE_MeleeLifetap: - { - - if((base1 < 0) && (newbon->MeleeLifetap > base1)) - newbon->MeleeLifetap = base1; - - else if(newbon->MeleeLifetap < base1) - newbon->MeleeLifetap = base1; - break; - } - - case SE_Vampirism: - newbon->Vampirism += base1; - break; - - case SE_FrenziedDevastation: - newbon->FrenziedDevastation += base2; - break; - - case SE_SpellProcChance: - newbon->SpellProcChance += base1; - break; - - case SE_Berserk: - newbon->BerserkSPA = true; - break; - - case SE_Metabolism: - newbon->Metabolism += base1; - break; - - case SE_ImprovedReclaimEnergy: - { - if((base1 < 0) && (newbon->ImprovedReclaimEnergy > base1)) - newbon->ImprovedReclaimEnergy = base1; - - else if(newbon->ImprovedReclaimEnergy < base1) - newbon->ImprovedReclaimEnergy = base1; - break; - } - - case SE_HeadShot: - { - if(newbon->HeadShot[1] < base2){ - newbon->HeadShot[0] = base1; - newbon->HeadShot[1] = base2; - } - break; - } - - case SE_HeadShotLevel: - { - if(newbon->HSLevel < base1) - newbon->HSLevel = base1; - break; - } - - case SE_Assassinate: - { - if(newbon->Assassinate[1] < base2){ - newbon->Assassinate[0] = base1; - newbon->Assassinate[1] = base2; - } - break; - } - - case SE_AssassinateLevel: - { - if(newbon->AssassinateLevel < base1) - newbon->AssassinateLevel = base1; - break; - } - - case SE_PetMeleeMitigation: - newbon->PetMeleeMitigation += base1; - break; - - case SE_MeleeVulnerability: - newbon->MeleeVulnerability += base1; - break; - - case SE_FactionModPct: - { - if((base1 < 0) && (newbon->FactionModPct > base1)) - newbon->FactionModPct = base1; - - else if(newbon->FactionModPct < base1) - newbon->FactionModPct = base1; - break; - } - - case SE_IllusionPersistence: - newbon->IllusionPersistence = true; - break; - - case SE_LimitToSkill:{ - if (base1 <= HIGHEST_SKILL) - newbon->LimitToSkill[base1] = true; - break; - } - - case SE_SkillProc:{ - for(int e = 0; e < MAX_SKILL_PROCS; e++) - { - if(newbon->SkillProc[e] && newbon->SkillProc[e] == aaid) - break; //Do not use the same aa id more than once. - - else if(!newbon->SkillProc[e]){ - newbon->SkillProc[e] = aaid; - break; - } - } - break; - } - - case SE_SkillProcSuccess:{ - - for(int e = 0; e < MAX_SKILL_PROCS; e++) - { - if(newbon->SkillProcSuccess[e] && newbon->SkillProcSuccess[e] == aaid) - break; //Do not use the same spell id more than once. - - else if(!newbon->SkillProcSuccess[e]){ - newbon->SkillProcSuccess[e] = aaid; - break; - } - } - break; - } - - case SE_MeleeMitigation: - newbon->MeleeMitigationEffect -= base1; - break; - - } - } + //AA old + //std::map >::const_iterator find_iter = aa_effects.find(aaid); + //if(find_iter == aa_effects.end()) + //{ + // return; + //} + // + //for (std::map::const_iterator iter = aa_effects[aaid].begin(); iter != aa_effects[aaid].end(); ++iter) { + // effect = iter->second.skill_id; + // base1 = iter->second.base1; + // base2 = iter->second.base2; + // slot = iter->second.slot; + // + // //we default to 0 (SE_CurrentHP) for the effect, so if there aren't any base1/2 values, we'll just skip it + // if (effect == 0 && base1 == 0 && base2 == 0) + // continue; + // + // //IsBlankSpellEffect() + // if (effect == SE_Blank || (effect == SE_CHA && base1 == 0) || effect == SE_StackingCommand_Block || effect == SE_StackingCommand_Overwrite) + // continue; + // + // Log.Out(Logs::Detail, Logs::AA, "Applying Effect %d from AA %u in slot %d (base1: %d, base2: %d) on %s", effect, aaid, slot, base1, base2, this->GetCleanName()); + // + // uint8 focus = IsFocusEffect(0, 0, true,effect); + // if (focus) + // { + // newbon->FocusEffects[focus] = static_cast(effect); + // continue; + // } + // + // switch (effect) + // { + // //Note: AA effects that use accuracy are skill limited, while spell effect is not. + // case SE_Accuracy: + // if ((base2 == ALL_SKILLS) && (newbon->Accuracy[HIGHEST_SKILL+1] < base1)) + // newbon->Accuracy[HIGHEST_SKILL+1] = base1; + // else if (newbon->Accuracy[base2] < base1) + // newbon->Accuracy[base2] += base1; + // break; + // case SE_CurrentHP: //regens + // newbon->HPRegen += base1; + // break; + // case SE_CurrentEndurance: + // newbon->EnduranceRegen += base1; + // break; + // case SE_MovementSpeed: + // newbon->movementspeed += base1; //should we let these stack? + // /*if (base1 > newbon->movementspeed) //or should we use a total value? + // newbon->movementspeed = base1;*/ + // break; + // case SE_STR: + // newbon->STR += base1; + // break; + // case SE_DEX: + // newbon->DEX += base1; + // break; + // case SE_AGI: + // newbon->AGI += base1; + // break; + // case SE_STA: + // newbon->STA += base1; + // break; + // case SE_INT: + // newbon->INT += base1; + // break; + // case SE_WIS: + // newbon->WIS += base1; + // break; + // case SE_CHA: + // newbon->CHA += base1; + // break; + // case SE_WaterBreathing: + // //handled by client + // break; + // case SE_CurrentMana: + // newbon->ManaRegen += base1; + // break; + // case SE_ItemManaRegenCapIncrease: + // newbon->ItemManaRegenCap += base1; + // break; + // case SE_ResistFire: + // newbon->FR += base1; + // break; + // case SE_ResistCold: + // newbon->CR += base1; + // break; + // case SE_ResistPoison: + // newbon->PR += base1; + // break; + // case SE_ResistDisease: + // newbon->DR += base1; + // break; + // case SE_ResistMagic: + // newbon->MR += base1; + // break; + // case SE_ResistCorruption: + // newbon->Corrup += base1; + // break; + // case SE_IncreaseSpellHaste: + // break; + // case SE_IncreaseRange: + // break; + // case SE_MaxHPChange: + // newbon->MaxHP += base1; + // break; + // case SE_Packrat: + // newbon->Packrat += base1; + // break; + // case SE_TwoHandBash: + // break; + // case SE_SetBreathLevel: + // break; + // case SE_RaiseStatCap: + // switch(base2) + // { + // //are these #define'd somewhere? + // case 0: //str + // newbon->STRCapMod += base1; + // break; + // case 1: //sta + // newbon->STACapMod += base1; + // break; + // case 2: //agi + // newbon->AGICapMod += base1; + // break; + // case 3: //dex + // newbon->DEXCapMod += base1; + // break; + // case 4: //wis + // newbon->WISCapMod += base1; + // break; + // case 5: //int + // newbon->INTCapMod += base1; + // break; + // case 6: //cha + // newbon->CHACapMod += base1; + // break; + // case 7: //mr + // newbon->MRCapMod += base1; + // break; + // case 8: //cr + // newbon->CRCapMod += base1; + // break; + // case 9: //fr + // newbon->FRCapMod += base1; + // break; + // case 10: //pr + // newbon->PRCapMod += base1; + // break; + // case 11: //dr + // newbon->DRCapMod += base1; + // break; + // case 12: //corruption + // newbon->CorrupCapMod += base1; + // break; + // } + // break; + // case SE_PetDiscipline2: + // break; + // case SE_SpellSlotIncrease: + // break; + // case SE_MysticalAttune: + // newbon->BuffSlotIncrease += base1; + // break; + // case SE_TotalHP: + // newbon->HP += base1; + // break; + // case SE_StunResist: + // newbon->StunResist += base1; + // break; + // case SE_SpellCritChance: + // newbon->CriticalSpellChance += base1; + // break; + // case SE_SpellCritDmgIncrease: + // newbon->SpellCritDmgIncrease += base1; + // break; + // case SE_DotCritDmgIncrease: + // newbon->DotCritDmgIncrease += base1; + // break; + // case SE_ResistSpellChance: + // newbon->ResistSpellChance += base1; + // break; + // case SE_CriticalHealChance: + // newbon->CriticalHealChance += base1; + // break; + // case SE_CriticalHealOverTime: + // newbon->CriticalHealOverTime += base1; + // break; + // case SE_CriticalDoTChance: + // newbon->CriticalDoTChance += base1; + // break; + // case SE_ReduceSkillTimer: + // newbon->SkillReuseTime[base2] += base1; + // break; + // case SE_Fearless: + // newbon->Fearless = true; + // break; + // case SE_PersistantCasting: + // newbon->PersistantCasting += base1; + // break; + // case SE_DelayDeath: + // newbon->DelayDeath += base1; + // break; + // case SE_FrontalStunResist: + // newbon->FrontalStunResist += base1; + // break; + // case SE_ImprovedBindWound: + // newbon->BindWound += base1; + // break; + // case SE_MaxBindWound: + // newbon->MaxBindWound += base1; + // break; + // case SE_ExtraAttackChance: + // newbon->ExtraAttackChance += base1; + // break; + // case SE_SeeInvis: + // newbon->SeeInvis = base1; + // break; + // case SE_BaseMovementSpeed: + // newbon->BaseMovementSpeed += base1; + // break; + // case SE_IncreaseRunSpeedCap: + // newbon->IncreaseRunSpeedCap += base1; + // break; + // case SE_ConsumeProjectile: + // newbon->ConsumeProjectile += base1; + // break; + // case SE_ForageAdditionalItems: + // newbon->ForageAdditionalItems += base1; + // break; + // case SE_Salvage: + // newbon->SalvageChance += base1; + // break; + // case SE_ArcheryDamageModifier: + // newbon->ArcheryDamageModifier += base1; + // break; + // case SE_DoubleRangedAttack: + // newbon->DoubleRangedAttack += base1; + // break; + // case SE_DamageShield: + // newbon->DamageShield += base1; + // break; + // case SE_CharmBreakChance: + // newbon->CharmBreakChance += base1; + // break; + // case SE_OffhandRiposteFail: + // newbon->OffhandRiposteFail += base1; + // break; + // case SE_ItemAttackCapIncrease: + // newbon->ItemATKCap += base1; + // break; + // case SE_GivePetGroupTarget: + // newbon->GivePetGroupTarget = true; + // break; + // case SE_ItemHPRegenCapIncrease: + // newbon->ItemHPRegenCap = +base1; + // break; + // case SE_Ambidexterity: + // newbon->Ambidexterity += base1; + // break; + // case SE_PetMaxHP: + // newbon->PetMaxHP += base1; + // break; + // case SE_AvoidMeleeChance: + // newbon->AvoidMeleeChanceEffect += base1; + // break; + // case SE_CombatStability: + // newbon->CombatStability += base1; + // break; + // case SE_AddSingingMod: + // switch (base2) + // { + // case ItemTypeWindInstrument: + // newbon->windMod += base1; + // break; + // case ItemTypeStringedInstrument: + // newbon->stringedMod += base1; + // break; + // case ItemTypeBrassInstrument: + // newbon->brassMod += base1; + // break; + // case ItemTypePercussionInstrument: + // newbon->percussionMod += base1; + // break; + // case ItemTypeSinging: + // newbon->singingMod += base1; + // break; + // } + // break; + // case SE_SongModCap: + // newbon->songModCap += base1; + // break; + // case SE_PetCriticalHit: + // newbon->PetCriticalHit += base1; + // break; + // case SE_PetAvoidance: + // newbon->PetAvoidance += base1; + // break; + // case SE_ShieldBlock: + // newbon->ShieldBlock += base1; + // break; + // case SE_ShieldEquipHateMod: + // newbon->ShieldEquipHateMod += base1; + // break; + // case SE_ShieldEquipDmgMod: + // newbon->ShieldEquipDmgMod[0] += base1; + // newbon->ShieldEquipDmgMod[1] += base2; + // break; + // case SE_SecondaryDmgInc: + // newbon->SecondaryDmgInc = true; + // break; + // case SE_ChangeAggro: + // newbon->hatemod += base1; + // break; + // case SE_EndurancePool: + // newbon->Endurance += base1; + // break; + // case SE_ChannelChanceItems: + // newbon->ChannelChanceItems += base1; + // break; + // case SE_ChannelChanceSpells: + // newbon->ChannelChanceSpells += base1; + // break; + // case SE_DoubleSpecialAttack: + // newbon->DoubleSpecialAttack += base1; + // break; + // case SE_TripleBackstab: + // newbon->TripleBackstab += base1; + // break; + // case SE_FrontalBackstabMinDmg: + // newbon->FrontalBackstabMinDmg = true; + // break; + // case SE_FrontalBackstabChance: + // newbon->FrontalBackstabChance += base1; + // break; + // case SE_BlockBehind: + // newbon->BlockBehind += base1; + // break; + // + // case SE_StrikeThrough: + // case SE_StrikeThrough2: + // newbon->StrikeThrough += base1; + // break; + // case SE_DoubleAttackChance: + // newbon->DoubleAttackChance += base1; + // break; + // case SE_GiveDoubleAttack: + // newbon->GiveDoubleAttack += base1; + // break; + // case SE_ProcChance: + // newbon->ProcChanceSPA += base1; + // break; + // case SE_RiposteChance: + // newbon->RiposteChance += base1; + // break; + // case SE_Flurry: + // newbon->FlurryChance += base1; + // break; + // case SE_PetFlurry: + // newbon->PetFlurry += base1; + // break; + // case SE_BardSongRange: + // newbon->SongRange += base1; + // break; + // case SE_RootBreakChance: + // newbon->RootBreakChance += base1; + // break; + // case SE_UnfailingDivinity: + // newbon->UnfailingDivinity += base1; + // break; + // case SE_CrippBlowChance: + // newbon->CrippBlowChance += base1; + // break; + // + // case SE_HitChance: + // { + // if(base2 == ALL_SKILLS) + // newbon->HitChanceEffect[HIGHEST_SKILL+1] += base1; + // else + // newbon->HitChanceEffect[base2] += base1; + // } + // + // case SE_ProcOnKillShot: + // for(int i = 0; i < MAX_SPELL_TRIGGER*3; i+=3) + // { + // if(!newbon->SpellOnKill[i] || ((newbon->SpellOnKill[i] == base2) && (newbon->SpellOnKill[i+1] < base1))) + // { + // //base1 = chance, base2 = SpellID to be triggered, base3 = min npc level + // newbon->SpellOnKill[i] = base2; + // newbon->SpellOnKill[i+1] = base1; + // + // if (GetLevel() > 15) + // newbon->SpellOnKill[i+2] = GetLevel() - 15; //AA specifiy "non-trivial" + // else + // newbon->SpellOnKill[i+2] = 0; + // + // break; + // } + // } + // break; + // + // case SE_SpellOnDeath: + // for(int i = 0; i < MAX_SPELL_TRIGGER*2; i+=2) + // { + // if(!newbon->SpellOnDeath[i]) + // { + // // base1 = SpellID to be triggered, base2 = chance to fire + // newbon->SpellOnDeath[i] = base1; + // newbon->SpellOnDeath[i+1] = base2; + // break; + // } + // } + // break; + // + // case SE_TriggerOnCast: + // + // for(int i = 0; i < MAX_SPELL_TRIGGER; i++) + // { + // if (newbon->SpellTriggers[i] == aaid) + // break; + // + // if(!newbon->SpellTriggers[i]) + // { + // //Save the 'aaid' of each triggerable effect to an array + // newbon->SpellTriggers[i] = aaid; + // break; + // } + // } + // break; + // + // case SE_CriticalHitChance: + // { + // if(base2 == ALL_SKILLS) + // newbon->CriticalHitChance[HIGHEST_SKILL+1] += base1; + // else + // newbon->CriticalHitChance[base2] += base1; + // } + // break; + // + // case SE_CriticalDamageMob: + // { + // // base1 = effect value, base2 = skill restrictions(-1 for all) + // if(base2 == ALL_SKILLS) + // newbon->CritDmgMob[HIGHEST_SKILL+1] += base1; + // else + // newbon->CritDmgMob[base2] += base1; + // break; + // } + // + // case SE_CriticalSpellChance: + // { + // newbon->CriticalSpellChance += base1; + // + // if (base2 > newbon->SpellCritDmgIncNoStack) + // newbon->SpellCritDmgIncNoStack = base2; + // + // break; + // } + // + // case SE_ResistFearChance: + // { + // if(base1 == 100) // If we reach 100% in a single spell/item then we should be immune to negative fear resist effects until our immunity is over + // newbon->Fearless = true; + // + // newbon->ResistFearChance += base1; // these should stack + // break; + // } + // + // case SE_SkillDamageAmount: + // { + // if(base2 == ALL_SKILLS) + // newbon->SkillDamageAmount[HIGHEST_SKILL+1] += base1; + // else + // newbon->SkillDamageAmount[base2] += base1; + // break; + // } + // + // case SE_SpecialAttackKBProc: + // { + // //You can only have one of these per client. [AA Dragon Punch] + // newbon->SpecialAttackKBProc[0] = base1; //Chance base 100 = 25% proc rate + // newbon->SpecialAttackKBProc[1] = base2; //Skill to KB Proc Off + // break; + // } + // + // case SE_DamageModifier: + // { + // if(base2 == ALL_SKILLS) + // newbon->DamageModifier[HIGHEST_SKILL+1] += base1; + // else + // newbon->DamageModifier[base2] += base1; + // break; + // } + // + // case SE_DamageModifier2: + // { + // if(base2 == ALL_SKILLS) + // newbon->DamageModifier2[HIGHEST_SKILL+1] += base1; + // else + // newbon->DamageModifier2[base2] += base1; + // break; + // } + // + // case SE_SlayUndead: + // { + // if(newbon->SlayUndead[1] < base1) + // newbon->SlayUndead[0] = base1; // Rate + // newbon->SlayUndead[1] = base2; // Damage Modifier + // break; + // } + // + // case SE_DoubleRiposte: + // { + // newbon->DoubleRiposte += base1; + // } + // + // case SE_GiveDoubleRiposte: + // { + // //0=Regular Riposte 1=Skill Attack Riposte 2=Skill + // if(base2 == 0){ + // if(newbon->GiveDoubleRiposte[0] < base1) + // newbon->GiveDoubleRiposte[0] = base1; + // } + // //Only for special attacks. + // else if(base2 > 0 && (newbon->GiveDoubleRiposte[1] < base1)){ + // newbon->GiveDoubleRiposte[1] = base1; + // newbon->GiveDoubleRiposte[2] = base2; + // } + // + // break; + // } + // + // //Kayen: Not sure best way to implement this yet. + // //Physically raises skill cap ie if 55/55 it will raise to 55/60 + // case SE_RaiseSkillCap: + // { + // if(newbon->RaiseSkillCap[0] < base1){ + // newbon->RaiseSkillCap[0] = base1; //value + // newbon->RaiseSkillCap[1] = base2; //skill + // } + // break; + // } + // + // case SE_MasteryofPast: + // { + // if(newbon->MasteryofPast < base1) + // newbon->MasteryofPast = base1; + // break; + // } + // + // case SE_CastingLevel2: + // case SE_CastingLevel: + // { + // newbon->effective_casting_level += base1; + // break; + // } + // + // case SE_DivineSave: + // { + // if(newbon->DivineSaveChance[0] < base1) + // { + // newbon->DivineSaveChance[0] = base1; + // newbon->DivineSaveChance[1] = base2; + // } + // break; + // } + // + // + // case SE_SpellEffectResistChance: + // { + // for(int e = 0; e < MAX_RESISTABLE_EFFECTS*2; e+=2) + // { + // if(newbon->SEResist[e+1] && (newbon->SEResist[e] == base2) && (newbon->SEResist[e+1] < base1)){ + // newbon->SEResist[e] = base2; //Spell Effect ID + // newbon->SEResist[e+1] = base1; //Resist Chance + // break; + // } + // else if (!newbon->SEResist[e+1]){ + // newbon->SEResist[e] = base2; //Spell Effect ID + // newbon->SEResist[e+1] = base1; //Resist Chance + // break; + // } + // } + // break; + // } + // + // case SE_MitigateDamageShield: + // { + // if (base1 < 0) + // base1 = base1*(-1); + // + // newbon->DSMitigationOffHand += base1; + // break; + // } + // + // case SE_FinishingBlow: + // { + // //base1 = chance, base2 = damage + // if (newbon->FinishingBlow[1] < base2){ + // newbon->FinishingBlow[0] = base1; + // newbon->FinishingBlow[1] = base2; + // } + // break; + // } + // + // case SE_FinishingBlowLvl: + // { + // //base1 = level, base2 = ??? (Set to 200 in AA data, possible proc rate mod?) + // if (newbon->FinishingBlowLvl[0] < base1){ + // newbon->FinishingBlowLvl[0] = base1; + // newbon->FinishingBlowLvl[1] = base2; + // } + // break; + // } + // + // case SE_StunBashChance: + // newbon->StunBashChance += base1; + // break; + // + // case SE_IncreaseChanceMemwipe: + // newbon->IncreaseChanceMemwipe += base1; + // break; + // + // case SE_CriticalMend: + // newbon->CriticalMend += base1; + // break; + // + // case SE_HealRate: + // newbon->HealRate += base1; + // break; + // + // case SE_MeleeLifetap: + // { + // + // if((base1 < 0) && (newbon->MeleeLifetap > base1)) + // newbon->MeleeLifetap = base1; + // + // else if(newbon->MeleeLifetap < base1) + // newbon->MeleeLifetap = base1; + // break; + // } + // + // case SE_Vampirism: + // newbon->Vampirism += base1; + // break; + // + // case SE_FrenziedDevastation: + // newbon->FrenziedDevastation += base2; + // break; + // + // case SE_SpellProcChance: + // newbon->SpellProcChance += base1; + // break; + // + // case SE_Berserk: + // newbon->BerserkSPA = true; + // break; + // + // case SE_Metabolism: + // newbon->Metabolism += base1; + // break; + // + // case SE_ImprovedReclaimEnergy: + // { + // if((base1 < 0) && (newbon->ImprovedReclaimEnergy > base1)) + // newbon->ImprovedReclaimEnergy = base1; + // + // else if(newbon->ImprovedReclaimEnergy < base1) + // newbon->ImprovedReclaimEnergy = base1; + // break; + // } + // + // case SE_HeadShot: + // { + // if(newbon->HeadShot[1] < base2){ + // newbon->HeadShot[0] = base1; + // newbon->HeadShot[1] = base2; + // } + // break; + // } + // + // case SE_HeadShotLevel: + // { + // if(newbon->HSLevel < base1) + // newbon->HSLevel = base1; + // break; + // } + // + // case SE_Assassinate: + // { + // if(newbon->Assassinate[1] < base2){ + // newbon->Assassinate[0] = base1; + // newbon->Assassinate[1] = base2; + // } + // break; + // } + // + // case SE_AssassinateLevel: + // { + // if(newbon->AssassinateLevel < base1) + // newbon->AssassinateLevel = base1; + // break; + // } + // + // case SE_PetMeleeMitigation: + // newbon->PetMeleeMitigation += base1; + // break; + // + // case SE_MeleeVulnerability: + // newbon->MeleeVulnerability += base1; + // break; + // + // case SE_FactionModPct: + // { + // if((base1 < 0) && (newbon->FactionModPct > base1)) + // newbon->FactionModPct = base1; + // + // else if(newbon->FactionModPct < base1) + // newbon->FactionModPct = base1; + // break; + // } + // + // case SE_IllusionPersistence: + // newbon->IllusionPersistence = true; + // break; + // + // case SE_LimitToSkill:{ + // if (base1 <= HIGHEST_SKILL) + // newbon->LimitToSkill[base1] = true; + // break; + // } + // + // case SE_SkillProc:{ + // for(int e = 0; e < MAX_SKILL_PROCS; e++) + // { + // if(newbon->SkillProc[e] && newbon->SkillProc[e] == aaid) + // break; //Do not use the same aa id more than once. + // + // else if(!newbon->SkillProc[e]){ + // newbon->SkillProc[e] = aaid; + // break; + // } + // } + // break; + // } + // + // case SE_SkillProcSuccess:{ + // + // for(int e = 0; e < MAX_SKILL_PROCS; e++) + // { + // if(newbon->SkillProcSuccess[e] && newbon->SkillProcSuccess[e] == aaid) + // break; //Do not use the same spell id more than once. + // + // else if(!newbon->SkillProcSuccess[e]){ + // newbon->SkillProcSuccess[e] = aaid; + // break; + // } + // } + // break; + // } + // + // case SE_MeleeMitigation: + // newbon->MeleeMitigationEffect -= base1; + // break; + // + // } + //} } void Mob::CalcSpellBonuses(StatBonuses* newbon) diff --git a/zone/bot.cpp b/zone/bot.cpp index 8b3741443..c6c0f6e7f 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -193,7 +193,7 @@ Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double to GenerateBaseStats(); LoadTimers(); - LoadAAs(); + //LoadAAs(); old aa, replace this LoadBuffs(); CalcBotStats(false); @@ -1430,114 +1430,103 @@ void Bot::GenerateAABonuses(StatBonuses* newbon) { uint8 botLevel = GetLevel(); memset(newbon, 0, sizeof(StatBonuses)); //start fresh - - if(botLevel >= 51) { - //level 51 = 1 AA level - - int i; - int totalAAs = database.CountAAs(); - uint32 slots = 0; - uint32 aa_AA = 0; - uint32 aa_value = 0; - for (i = 0; i < totalAAs; i++) { //iterate through all of the client's AAs - std::map::iterator aa = botAAs.find(i); - if(aa != botAAs.end()) { // make sure aa exists or we'll crash zone - aa_AA = aa->second.aa_id; //same as aaid from the aa_effects table - aa_value = aa->second.total_levels; //how many points in it - if (aa_AA > 0 || aa_value > 0) { //do we have the AA? if 1 of the 2 is set, we can assume we do - //slots = database.GetTotalAALevels(aa_AA); //find out how many effects from aa_effects table - slots = zone->GetTotalAALevels(aa_AA); //find out how many effects from aa_effects, which is loaded into memory - if (slots > 0) //and does it have any effects? may be able to put this above, not sure if it runs on each iteration - ApplyAABonuses(aa_AA + aa_value -1, slots, newbon); //add the bonuses - } - } - } - } + //old aa + //if(botLevel >= 51) { + // //level 51 = 1 AA level + // + // int i; + // int totalAAs = database.CountAAs(); + // uint32 slots = 0; + // uint32 aa_AA = 0; + // uint32 aa_value = 0; + // for (i = 0; i < totalAAs; i++) { //iterate through all of the client's AAs + // std::map::iterator aa = botAAs.find(i); + // if(aa != botAAs.end()) { // make sure aa exists or we'll crash zone + // aa_AA = aa->second.aa_id; //same as aaid from the aa_effects table + // aa_value = aa->second.total_levels; //how many points in it + // if (aa_AA > 0 || aa_value > 0) { //do we have the AA? if 1 of the 2 is set, we can assume we do + // //slots = database.GetTotalAALevels(aa_AA); //find out how many effects from aa_effects table + // //slots = zone->GetTotalAALevels(aa_AA); //find out how many effects from aa_effects, which is loaded into memory + // //if (slots > 0) //and does it have any effects? may be able to put this above, not sure if it runs on each iteration + // // ApplyAABonuses(aa_AA + aa_value -1, slots, newbon); //add the bonuses + // } + // } + // } + //} } -void Bot::LoadAAs() { - int maxAAExpansion = RuleI(Bots, BotAAExpansion); //get expansion to get AAs up to - botAAs.clear(); //start fresh - - std::string query; - - if(GetClass() == BERSERKER) - query = StringFormat("SELECT skill_id FROM altadv_vars WHERE berserker = 1 AND class_type > 1 AND class_type <= %i AND aa_expansion <= %i ORDER BY skill_id;", GetLevel(), maxAAExpansion); - else - query = StringFormat("SELECT skill_id FROM altadv_vars WHERE ((classes & ( 1 << %i )) >> %i) = 1 AND class_type > 1 AND class_type <= %i AND aa_expansion <= %i ORDER BY skill_id;", GetClass(), GetClass(), GetLevel(), maxAAExpansion); - - auto results = database.QueryDatabase(query); - - if(!results.Success()) { - Log.Out(Logs::General, Logs::Error, "Error in Bot::LoadAAs()"); - return; - } - - int totalAAs = database.CountAAs(); - - for (auto row = results.begin(); row != results.end(); ++row) { - uint32 skill_id = 0; - skill_id = atoi(row[0]); - - if(skill_id <= 0 || skill_id >= totalAAs) - continue; - - SendAA_Struct *sendAA = zone->FindAA(skill_id); - - if(!sendAA) - continue; - - for(int i=0; imax_level; i++) { - //Get AA info & add to list - uint32 aaid = sendAA->id + i; - uint8 total_levels = 0; - uint8 req_level; - std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(aaid); - - //Get level required for AA - if(RequiredLevel != AARequiredLevelAndCost.end()) - req_level = RequiredLevel->second.Level; - else - req_level = (sendAA->class_type + i * sendAA->level_inc); - - if(req_level > GetLevel()) - break; - - //Bot is high enough level for AA - std::map::iterator foundAA = botAAs.find(aaid); - - // AA is already in list - if(foundAA != botAAs.end()) - continue; - - if(sendAA->id == aaid) { - BotAA newAA; - - newAA.total_levels = 0; - newAA.aa_id = aaid; - newAA.req_level = req_level; - newAA.total_levels += 1; - - botAAs[aaid] = newAA; //add to list - } - else //update master AA record with number of levels a bot has in AA, based on level. - botAAs[sendAA->id].total_levels+=1; - } - } - -} - -uint32 Bot::GetAA(uint32 aa_id) { - - std::map::const_iterator find_iter = botAAs.find(aa_id); - int aaLevel = 0; - - if(find_iter != botAAs.end()) { - aaLevel = find_iter->second.total_levels; - } - - return aaLevel; -} +//old AA +//void Bot::LoadAAs() { +// int maxAAExpansion = RuleI(Bots, BotAAExpansion); //get expansion to get AAs up to +// botAAs.clear(); //start fresh +// +// std::string query; +// +// if(GetClass() == BERSERKER) +// query = StringFormat("SELECT skill_id FROM altadv_vars WHERE berserker = 1 AND class_type > 1 AND class_type <= %i AND aa_expansion <= %i ORDER BY skill_id;", GetLevel(), maxAAExpansion); +// else +// query = StringFormat("SELECT skill_id FROM altadv_vars WHERE ((classes & ( 1 << %i )) >> %i) = 1 AND class_type > 1 AND class_type <= %i AND aa_expansion <= %i ORDER BY skill_id;", GetClass(), GetClass(), GetLevel(), maxAAExpansion); +// +// auto results = database.QueryDatabase(query); +// +// if(!results.Success()) { +// Log.Out(Logs::General, Logs::Error, "Error in Bot::LoadAAs()"); +// return; +// } +// +// int totalAAs = database.CountAAs(); +// +// for (auto row = results.begin(); row != results.end(); ++row) { +// uint32 skill_id = 0; +// skill_id = atoi(row[0]); +// +// if(skill_id <= 0 || skill_id >= totalAAs) +// continue; +// +// SendAA_Struct *sendAA = zone->FindAA(skill_id); +// +// if(!sendAA) +// continue; +// +// for(int i=0; imax_level; i++) { +// //Get AA info & add to list +// uint32 aaid = sendAA->id + i; +// uint8 total_levels = 0; +// uint8 req_level; +// std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(aaid); +// +// //Get level required for AA +// if(RequiredLevel != AARequiredLevelAndCost.end()) +// req_level = RequiredLevel->second.Level; +// else +// req_level = (sendAA->class_type + i * sendAA->level_inc); +// +// if(req_level > GetLevel()) +// break; +// +// //Bot is high enough level for AA +// std::map::iterator foundAA = botAAs.find(aaid); +// +// // AA is already in list +// if(foundAA != botAAs.end()) +// continue; +// +// if(sendAA->id == aaid) { +// BotAA newAA; +// +// newAA.total_levels = 0; +// newAA.aa_id = aaid; +// newAA.req_level = req_level; +// newAA.total_levels += 1; +// +// botAAs[aaid] = newAA; //add to list +// } +// else //update master AA record with number of levels a bot has in AA, based on level. +// botAAs[sendAA->id].total_levels+=1; +// } +// } +// +//} //current with Client::ApplyAABonuses 9/26/12 void Bot::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon) @@ -1551,551 +1540,552 @@ void Bot::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon) int32 base2 = 0; //only really used for SE_RaiseStatCap & SE_ReduceSkillTimer in aa_effects table uint32 slot = 0; - std::map >::const_iterator find_iter = aa_effects.find(aaid); - if(find_iter == aa_effects.end()) - { - return; - } - - for (std::map::const_iterator iter = aa_effects[aaid].begin(); iter != aa_effects[aaid].end(); ++iter) { - effect = iter->second.skill_id; - base1 = iter->second.base1; - base2 = iter->second.base2; - slot = iter->second.slot; - - //we default to 0 (SE_CurrentHP) for the effect, so if there aren't any base1/2 values, we'll just skip it - if (effect == 0 && base1 == 0 && base2 == 0) - continue; - - //IsBlankSpellEffect() - if (effect == SE_Blank || (effect == SE_CHA && base1 == 0) || effect == SE_StackingCommand_Block || effect == SE_StackingCommand_Overwrite) - continue; - - Log.Out(Logs::Detail, Logs::AA, "Applying Effect %d from AA %u in slot %d (base1: %d, base2: %d) on %s", effect, aaid, slot, base1, base2, this->GetCleanName()); - - uint8 focus = IsFocusEffect(0, 0, true,effect); - if (focus) - { - newbon->FocusEffects[focus] = effect; - continue; - } - - switch (effect) - { - //Note: AA effects that use accuracy are skill limited, while spell effect is not. - case SE_Accuracy: - if ((base2 == -1) && (newbon->Accuracy[HIGHEST_SKILL+1] < base1)) - newbon->Accuracy[HIGHEST_SKILL+1] = base1; - else if (newbon->Accuracy[base2] < base1) - newbon->Accuracy[base2] += base1; - break; - case SE_CurrentHP: //regens - newbon->HPRegen += base1; - break; - case SE_CurrentEndurance: - newbon->EnduranceRegen += base1; - break; - case SE_MovementSpeed: - newbon->movementspeed += base1; //should we let these stack? - /*if (base1 > newbon->movementspeed) //or should we use a total value? - newbon->movementspeed = base1;*/ - break; - case SE_STR: - newbon->STR += base1; - break; - case SE_DEX: - newbon->DEX += base1; - break; - case SE_AGI: - newbon->AGI += base1; - break; - case SE_STA: - newbon->STA += base1; - break; - case SE_INT: - newbon->INT += base1; - break; - case SE_WIS: - newbon->WIS += base1; - break; - case SE_CHA: - newbon->CHA += base1; - break; - case SE_WaterBreathing: - //handled by client - break; - case SE_CurrentMana: - newbon->ManaRegen += base1; - break; - case SE_ItemManaRegenCapIncrease: - newbon->ItemManaRegenCap += base1; - break; - case SE_ResistFire: - newbon->FR += base1; - break; - case SE_ResistCold: - newbon->CR += base1; - break; - case SE_ResistPoison: - newbon->PR += base1; - break; - case SE_ResistDisease: - newbon->DR += base1; - break; - case SE_ResistMagic: - newbon->MR += base1; - break; - case SE_ResistCorruption: - newbon->Corrup += base1; - break; - case SE_IncreaseSpellHaste: - break; - case SE_IncreaseRange: - break; - case SE_MaxHPChange: - newbon->MaxHP += base1; - break; - case SE_Packrat: - newbon->Packrat += base1; - break; - case SE_TwoHandBash: - break; - case SE_SetBreathLevel: - break; - case SE_RaiseStatCap: - switch(base2) - { - //are these #define'd somewhere? - case 0: //str - newbon->STRCapMod += base1; - break; - case 1: //sta - newbon->STACapMod += base1; - break; - case 2: //agi - newbon->AGICapMod += base1; - break; - case 3: //dex - newbon->DEXCapMod += base1; - break; - case 4: //wis - newbon->WISCapMod += base1; - break; - case 5: //int - newbon->INTCapMod += base1; - break; - case 6: //cha - newbon->CHACapMod += base1; - break; - case 7: //mr - newbon->MRCapMod += base1; - break; - case 8: //cr - newbon->CRCapMod += base1; - break; - case 9: //fr - newbon->FRCapMod += base1; - break; - case 10: //pr - newbon->PRCapMod += base1; - break; - case 11: //dr - newbon->DRCapMod += base1; - break; - case 12: //corruption - newbon->CorrupCapMod += base1; - break; - } - break; - case SE_PetDiscipline2: - break; - case SE_SpellSlotIncrease: - break; - case SE_MysticalAttune: - newbon->BuffSlotIncrease += base1; - break; - case SE_TotalHP: - newbon->HP += base1; - break; - case SE_StunResist: - newbon->StunResist += base1; - break; - case SE_SpellCritChance: - newbon->CriticalSpellChance += base1; - break; - case SE_SpellCritDmgIncrease: - newbon->SpellCritDmgIncrease += base1; - break; - case SE_DotCritDmgIncrease: - newbon->DotCritDmgIncrease += base1; - break; - case SE_ResistSpellChance: - newbon->ResistSpellChance += base1; - break; - case SE_CriticalHealChance: - newbon->CriticalHealChance += base1; - break; - case SE_CriticalHealOverTime: - newbon->CriticalHealOverTime += base1; - break; - case SE_CriticalDoTChance: - newbon->CriticalDoTChance += base1; - break; - case SE_ReduceSkillTimer: - newbon->SkillReuseTime[base2] += base1; - break; - case SE_Fearless: - newbon->Fearless = true; - break; - case SE_PersistantCasting: - newbon->PersistantCasting += base1; - break; - case SE_DelayDeath: - newbon->DelayDeath += base1; - break; - case SE_FrontalStunResist: - newbon->FrontalStunResist += base1; - break; - case SE_ImprovedBindWound: - newbon->BindWound += base1; - break; - case SE_MaxBindWound: - newbon->MaxBindWound += base1; - break; - case SE_ExtraAttackChance: - newbon->ExtraAttackChance += base1; - break; - case SE_SeeInvis: - newbon->SeeInvis = base1; - break; - case SE_BaseMovementSpeed: - newbon->BaseMovementSpeed += base1; - break; - case SE_IncreaseRunSpeedCap: - newbon->IncreaseRunSpeedCap += base1; - break; - case SE_ConsumeProjectile: - newbon->ConsumeProjectile += base1; - break; - case SE_ArcheryDamageModifier: - newbon->ArcheryDamageModifier += base1; - break; - case SE_DamageShield: - newbon->DamageShield += base1; - break; - case SE_CharmBreakChance: - newbon->CharmBreakChance += base1; - break; - case SE_OffhandRiposteFail: - newbon->OffhandRiposteFail += base1; - break; - case SE_ItemAttackCapIncrease: - newbon->ItemATKCap += base1; - break; - case SE_GivePetGroupTarget: - newbon->GivePetGroupTarget = true; - break; - case SE_ItemHPRegenCapIncrease: - newbon->ItemHPRegenCap = +base1; - break; - case SE_Ambidexterity: - newbon->Ambidexterity += base1; - break; - case SE_PetMaxHP: - newbon->PetMaxHP += base1; - break; - case SE_AvoidMeleeChance: - newbon->AvoidMeleeChance += base1; - break; - case SE_CombatStability: - newbon->CombatStability += base1; - break; - case SE_PetCriticalHit: - newbon->PetCriticalHit += base1; - break; - case SE_PetAvoidance: - newbon->PetAvoidance += base1; - break; - case SE_ShieldBlock: - newbon->ShieldBlock += base1; - break; - case SE_SecondaryDmgInc: - newbon->SecondaryDmgInc = true; - break; - case SE_ChangeAggro: - newbon->hatemod += base1; - break; - case SE_EndurancePool: - newbon->Endurance += base1; - break; - case SE_ChannelChanceItems: - newbon->ChannelChanceItems += base1; - break; - case SE_ChannelChanceSpells: - newbon->ChannelChanceSpells += base1; - break; - case SE_DoubleSpecialAttack: - newbon->DoubleSpecialAttack += base1; - break; - case SE_TripleBackstab: - newbon->TripleBackstab += base1; - break; - case SE_FrontalBackstabMinDmg: - newbon->FrontalBackstabMinDmg = true; - break; - case SE_FrontalBackstabChance: - newbon->FrontalBackstabChance += base1; - break; - case SE_BlockBehind: - newbon->BlockBehind += base1; - break; - case SE_StrikeThrough2: - newbon->StrikeThrough += base1; - break; - case SE_DoubleAttackChance: - newbon->DoubleAttackChance += base1; - break; - case SE_GiveDoubleAttack: - newbon->GiveDoubleAttack += base1; - break; - case SE_ProcChance: - newbon->ProcChance += base1; - break; - case SE_RiposteChance: - newbon->RiposteChance += base1; - break; - case SE_Flurry: - newbon->FlurryChance += base1; - break; - case SE_PetFlurry: - newbon->PetFlurry = base1; - break; - case SE_BardSongRange: - newbon->SongRange += base1; - break; - case SE_RootBreakChance: - newbon->RootBreakChance += base1; - break; - case SE_UnfailingDivinity: - newbon->UnfailingDivinity += base1; - break; - - case SE_ProcOnKillShot: - for(int i = 0; i < MAX_SPELL_TRIGGER*3; i+=3) - { - if(!newbon->SpellOnKill[i] || ((newbon->SpellOnKill[i] == base2) && (newbon->SpellOnKill[i+1] < base1))) - { - //base1 = chance, base2 = SpellID to be triggered, base3 = min npc level - newbon->SpellOnKill[i] = base2; - newbon->SpellOnKill[i+1] = base1; - - if (GetLevel() > 15) - newbon->SpellOnKill[i+2] = GetLevel() - 15; //AA specifiy "non-trivial" - else - newbon->SpellOnKill[i+2] = 0; - - break; - } - } - break; - - case SE_SpellOnDeath: - for(int i = 0; i < MAX_SPELL_TRIGGER*2; i+=2) - { - if(!newbon->SpellOnDeath[i]) - { - // base1 = SpellID to be triggered, base2 = chance to fire - newbon->SpellOnDeath[i] = base1; - newbon->SpellOnDeath[i+1] = base2; - break; - } - } - break; - - case SE_TriggerOnCast: - - for(int i = 0; i < MAX_SPELL_TRIGGER; i++) - { - if (newbon->SpellTriggers[i] == aaid) - break; - - if(!newbon->SpellTriggers[i]) - { - //Save the 'aaid' of each triggerable effect to an array - newbon->SpellTriggers[i] = aaid; - break; - } - } - break; - - case SE_CriticalHitChance: - { - if(base2 == -1) - newbon->CriticalHitChance[HIGHEST_SKILL+1] += base1; - else - newbon->CriticalHitChance[base2] += base1; - } - break; - - case SE_CriticalDamageMob: - { - // base1 = effect value, base2 = skill restrictions(-1 for all) - if(base2 == -1) - newbon->CritDmgMob[HIGHEST_SKILL+1] += base1; - else - newbon->CritDmgMob[base2] += base1; - break; - } - - case SE_CriticalSpellChance: - { - newbon->CriticalSpellChance += base1; - - if (base2 > newbon->SpellCritDmgIncrease) - newbon->SpellCritDmgIncrease = base2; - - break; - } - - case SE_ResistFearChance: - { - if(base1 == 100) // If we reach 100% in a single spell/item then we should be immune to negative fear resist effects until our immunity is over - newbon->Fearless = true; - - newbon->ResistFearChance += base1; // these should stack - break; - } - - case SE_SkillDamageAmount: - { - if(base2 == -1) - newbon->SkillDamageAmount[HIGHEST_SKILL+1] += base1; - else - newbon->SkillDamageAmount[base2] += base1; - break; - } - - case SE_SpecialAttackKBProc: - { - //You can only have one of these per client. [AA Dragon Punch] - newbon->SpecialAttackKBProc[0] = base1; //Chance base 100 = 25% proc rate - newbon->SpecialAttackKBProc[1] = base2; //Skill to KB Proc Off - break; - } - - case SE_DamageModifier: - { - if(base2 == -1) - newbon->DamageModifier[HIGHEST_SKILL+1] += base1; - else - newbon->DamageModifier[base2] += base1; - break; - } - - case SE_SlayUndead: - { - if(newbon->SlayUndead[1] < base1) - newbon->SlayUndead[0] = base1; // Rate - newbon->SlayUndead[1] = base2; // Damage Modifier - break; - } - - case SE_GiveDoubleRiposte: - { - //0=Regular Riposte 1=Skill Attack Riposte 2=Skill - if(base2 == 0){ - if(newbon->GiveDoubleRiposte[0] < base1) - newbon->GiveDoubleRiposte[0] = base1; - } - //Only for special attacks. - else if(base2 > 0 && (newbon->GiveDoubleRiposte[1] < base1)){ - newbon->GiveDoubleRiposte[1] = base1; - newbon->GiveDoubleRiposte[2] = base2; - } - - break; - } - - //Kayen: Not sure best way to implement this yet. - //Physically raises skill cap ie if 55/55 it will raise to 55/60 - case SE_RaiseSkillCap: - { - if(newbon->RaiseSkillCap[0] < base1){ - newbon->RaiseSkillCap[0] = base1; //value - newbon->RaiseSkillCap[1] = base2; //skill - } - break; - } - - case SE_MasteryofPast: - { - if(newbon->MasteryofPast < base1) - newbon->MasteryofPast = base1; - break; - } - - case SE_CastingLevel2: - case SE_CastingLevel: - { - newbon->effective_casting_level += base1; - break; - } - - - case SE_DivineSave: - { - if(newbon->DivineSaveChance[0] < base1) - { - newbon->DivineSaveChance[0] = base1; - newbon->DivineSaveChance[1] = base2; - } - break; - } - - case SE_SpellEffectResistChance: - { - for(int e = 0; e < MAX_RESISTABLE_EFFECTS*2; e+=2) - { - if(!newbon->SEResist[e] || ((newbon->SEResist[e] = base2) && (newbon->SEResist[e+1] < base1)) ){ - newbon->SEResist[e] = base2; - newbon->SEResist[e+1] = base1; - break; - } - } - break; - } - - case SE_MitigateDamageShield: - { - if (base1 < 0) - base1 = base1*(-1); - - newbon->DSMitigationOffHand += base1; - break; - } - - case SE_FinishingBlow: - { - - //base1 = chance, base2 = damage - if (newbon->FinishingBlow[1] < base2){ - newbon->FinishingBlow[0] = base1; - newbon->FinishingBlow[1] = base2; - } - break; - } - - case SE_FinishingBlowLvl: - { - //base1 = level, base2 = ??? (Set to 200 in AA data, possible proc rate mod?) - if (newbon->FinishingBlowLvl[0] < base1){ - newbon->FinishingBlowLvl[0] = base1; - newbon->FinishingBlowLvl[1] = base2; - } - break; - } - } - } + //old AA + //std::map >::const_iterator find_iter = aa_effects.find(aaid); + //if(find_iter == aa_effects.end()) + //{ + // return; + //} + // + //for (std::map::const_iterator iter = aa_effects[aaid].begin(); iter != aa_effects[aaid].end(); ++iter) { + // effect = iter->second.skill_id; + // base1 = iter->second.base1; + // base2 = iter->second.base2; + // slot = iter->second.slot; + // + // //we default to 0 (SE_CurrentHP) for the effect, so if there aren't any base1/2 values, we'll just skip it + // if (effect == 0 && base1 == 0 && base2 == 0) + // continue; + // + // //IsBlankSpellEffect() + // if (effect == SE_Blank || (effect == SE_CHA && base1 == 0) || effect == SE_StackingCommand_Block || effect == SE_StackingCommand_Overwrite) + // continue; + // + // Log.Out(Logs::Detail, Logs::AA, "Applying Effect %d from AA %u in slot %d (base1: %d, base2: %d) on %s", effect, aaid, slot, base1, base2, this->GetCleanName()); + // + // uint8 focus = IsFocusEffect(0, 0, true,effect); + // if (focus) + // { + // newbon->FocusEffects[focus] = effect; + // continue; + // } + // + // switch (effect) + // { + // //Note: AA effects that use accuracy are skill limited, while spell effect is not. + // case SE_Accuracy: + // if ((base2 == -1) && (newbon->Accuracy[HIGHEST_SKILL+1] < base1)) + // newbon->Accuracy[HIGHEST_SKILL+1] = base1; + // else if (newbon->Accuracy[base2] < base1) + // newbon->Accuracy[base2] += base1; + // break; + // case SE_CurrentHP: //regens + // newbon->HPRegen += base1; + // break; + // case SE_CurrentEndurance: + // newbon->EnduranceRegen += base1; + // break; + // case SE_MovementSpeed: + // newbon->movementspeed += base1; //should we let these stack? + // /*if (base1 > newbon->movementspeed) //or should we use a total value? + // newbon->movementspeed = base1;*/ + // break; + // case SE_STR: + // newbon->STR += base1; + // break; + // case SE_DEX: + // newbon->DEX += base1; + // break; + // case SE_AGI: + // newbon->AGI += base1; + // break; + // case SE_STA: + // newbon->STA += base1; + // break; + // case SE_INT: + // newbon->INT += base1; + // break; + // case SE_WIS: + // newbon->WIS += base1; + // break; + // case SE_CHA: + // newbon->CHA += base1; + // break; + // case SE_WaterBreathing: + // //handled by client + // break; + // case SE_CurrentMana: + // newbon->ManaRegen += base1; + // break; + // case SE_ItemManaRegenCapIncrease: + // newbon->ItemManaRegenCap += base1; + // break; + // case SE_ResistFire: + // newbon->FR += base1; + // break; + // case SE_ResistCold: + // newbon->CR += base1; + // break; + // case SE_ResistPoison: + // newbon->PR += base1; + // break; + // case SE_ResistDisease: + // newbon->DR += base1; + // break; + // case SE_ResistMagic: + // newbon->MR += base1; + // break; + // case SE_ResistCorruption: + // newbon->Corrup += base1; + // break; + // case SE_IncreaseSpellHaste: + // break; + // case SE_IncreaseRange: + // break; + // case SE_MaxHPChange: + // newbon->MaxHP += base1; + // break; + // case SE_Packrat: + // newbon->Packrat += base1; + // break; + // case SE_TwoHandBash: + // break; + // case SE_SetBreathLevel: + // break; + // case SE_RaiseStatCap: + // switch(base2) + // { + // //are these #define'd somewhere? + // case 0: //str + // newbon->STRCapMod += base1; + // break; + // case 1: //sta + // newbon->STACapMod += base1; + // break; + // case 2: //agi + // newbon->AGICapMod += base1; + // break; + // case 3: //dex + // newbon->DEXCapMod += base1; + // break; + // case 4: //wis + // newbon->WISCapMod += base1; + // break; + // case 5: //int + // newbon->INTCapMod += base1; + // break; + // case 6: //cha + // newbon->CHACapMod += base1; + // break; + // case 7: //mr + // newbon->MRCapMod += base1; + // break; + // case 8: //cr + // newbon->CRCapMod += base1; + // break; + // case 9: //fr + // newbon->FRCapMod += base1; + // break; + // case 10: //pr + // newbon->PRCapMod += base1; + // break; + // case 11: //dr + // newbon->DRCapMod += base1; + // break; + // case 12: //corruption + // newbon->CorrupCapMod += base1; + // break; + // } + // break; + // case SE_PetDiscipline2: + // break; + // case SE_SpellSlotIncrease: + // break; + // case SE_MysticalAttune: + // newbon->BuffSlotIncrease += base1; + // break; + // case SE_TotalHP: + // newbon->HP += base1; + // break; + // case SE_StunResist: + // newbon->StunResist += base1; + // break; + // case SE_SpellCritChance: + // newbon->CriticalSpellChance += base1; + // break; + // case SE_SpellCritDmgIncrease: + // newbon->SpellCritDmgIncrease += base1; + // break; + // case SE_DotCritDmgIncrease: + // newbon->DotCritDmgIncrease += base1; + // break; + // case SE_ResistSpellChance: + // newbon->ResistSpellChance += base1; + // break; + // case SE_CriticalHealChance: + // newbon->CriticalHealChance += base1; + // break; + // case SE_CriticalHealOverTime: + // newbon->CriticalHealOverTime += base1; + // break; + // case SE_CriticalDoTChance: + // newbon->CriticalDoTChance += base1; + // break; + // case SE_ReduceSkillTimer: + // newbon->SkillReuseTime[base2] += base1; + // break; + // case SE_Fearless: + // newbon->Fearless = true; + // break; + // case SE_PersistantCasting: + // newbon->PersistantCasting += base1; + // break; + // case SE_DelayDeath: + // newbon->DelayDeath += base1; + // break; + // case SE_FrontalStunResist: + // newbon->FrontalStunResist += base1; + // break; + // case SE_ImprovedBindWound: + // newbon->BindWound += base1; + // break; + // case SE_MaxBindWound: + // newbon->MaxBindWound += base1; + // break; + // case SE_ExtraAttackChance: + // newbon->ExtraAttackChance += base1; + // break; + // case SE_SeeInvis: + // newbon->SeeInvis = base1; + // break; + // case SE_BaseMovementSpeed: + // newbon->BaseMovementSpeed += base1; + // break; + // case SE_IncreaseRunSpeedCap: + // newbon->IncreaseRunSpeedCap += base1; + // break; + // case SE_ConsumeProjectile: + // newbon->ConsumeProjectile += base1; + // break; + // case SE_ArcheryDamageModifier: + // newbon->ArcheryDamageModifier += base1; + // break; + // case SE_DamageShield: + // newbon->DamageShield += base1; + // break; + // case SE_CharmBreakChance: + // newbon->CharmBreakChance += base1; + // break; + // case SE_OffhandRiposteFail: + // newbon->OffhandRiposteFail += base1; + // break; + // case SE_ItemAttackCapIncrease: + // newbon->ItemATKCap += base1; + // break; + // case SE_GivePetGroupTarget: + // newbon->GivePetGroupTarget = true; + // break; + // case SE_ItemHPRegenCapIncrease: + // newbon->ItemHPRegenCap = +base1; + // break; + // case SE_Ambidexterity: + // newbon->Ambidexterity += base1; + // break; + // case SE_PetMaxHP: + // newbon->PetMaxHP += base1; + // break; + // case SE_AvoidMeleeChance: + // newbon->AvoidMeleeChance += base1; + // break; + // case SE_CombatStability: + // newbon->CombatStability += base1; + // break; + // case SE_PetCriticalHit: + // newbon->PetCriticalHit += base1; + // break; + // case SE_PetAvoidance: + // newbon->PetAvoidance += base1; + // break; + // case SE_ShieldBlock: + // newbon->ShieldBlock += base1; + // break; + // case SE_SecondaryDmgInc: + // newbon->SecondaryDmgInc = true; + // break; + // case SE_ChangeAggro: + // newbon->hatemod += base1; + // break; + // case SE_EndurancePool: + // newbon->Endurance += base1; + // break; + // case SE_ChannelChanceItems: + // newbon->ChannelChanceItems += base1; + // break; + // case SE_ChannelChanceSpells: + // newbon->ChannelChanceSpells += base1; + // break; + // case SE_DoubleSpecialAttack: + // newbon->DoubleSpecialAttack += base1; + // break; + // case SE_TripleBackstab: + // newbon->TripleBackstab += base1; + // break; + // case SE_FrontalBackstabMinDmg: + // newbon->FrontalBackstabMinDmg = true; + // break; + // case SE_FrontalBackstabChance: + // newbon->FrontalBackstabChance += base1; + // break; + // case SE_BlockBehind: + // newbon->BlockBehind += base1; + // break; + // case SE_StrikeThrough2: + // newbon->StrikeThrough += base1; + // break; + // case SE_DoubleAttackChance: + // newbon->DoubleAttackChance += base1; + // break; + // case SE_GiveDoubleAttack: + // newbon->GiveDoubleAttack += base1; + // break; + // case SE_ProcChance: + // newbon->ProcChance += base1; + // break; + // case SE_RiposteChance: + // newbon->RiposteChance += base1; + // break; + // case SE_Flurry: + // newbon->FlurryChance += base1; + // break; + // case SE_PetFlurry: + // newbon->PetFlurry = base1; + // break; + // case SE_BardSongRange: + // newbon->SongRange += base1; + // break; + // case SE_RootBreakChance: + // newbon->RootBreakChance += base1; + // break; + // case SE_UnfailingDivinity: + // newbon->UnfailingDivinity += base1; + // break; + // + // case SE_ProcOnKillShot: + // for(int i = 0; i < MAX_SPELL_TRIGGER*3; i+=3) + // { + // if(!newbon->SpellOnKill[i] || ((newbon->SpellOnKill[i] == base2) && (newbon->SpellOnKill[i+1] < base1))) + // { + // //base1 = chance, base2 = SpellID to be triggered, base3 = min npc level + // newbon->SpellOnKill[i] = base2; + // newbon->SpellOnKill[i+1] = base1; + // + // if (GetLevel() > 15) + // newbon->SpellOnKill[i+2] = GetLevel() - 15; //AA specifiy "non-trivial" + // else + // newbon->SpellOnKill[i+2] = 0; + // + // break; + // } + // } + // break; + // + // case SE_SpellOnDeath: + // for(int i = 0; i < MAX_SPELL_TRIGGER*2; i+=2) + // { + // if(!newbon->SpellOnDeath[i]) + // { + // // base1 = SpellID to be triggered, base2 = chance to fire + // newbon->SpellOnDeath[i] = base1; + // newbon->SpellOnDeath[i+1] = base2; + // break; + // } + // } + // break; + // + // case SE_TriggerOnCast: + // + // for(int i = 0; i < MAX_SPELL_TRIGGER; i++) + // { + // if (newbon->SpellTriggers[i] == aaid) + // break; + // + // if(!newbon->SpellTriggers[i]) + // { + // //Save the 'aaid' of each triggerable effect to an array + // newbon->SpellTriggers[i] = aaid; + // break; + // } + // } + // break; + // + // case SE_CriticalHitChance: + // { + // if(base2 == -1) + // newbon->CriticalHitChance[HIGHEST_SKILL+1] += base1; + // else + // newbon->CriticalHitChance[base2] += base1; + // } + // break; + // + // case SE_CriticalDamageMob: + // { + // // base1 = effect value, base2 = skill restrictions(-1 for all) + // if(base2 == -1) + // newbon->CritDmgMob[HIGHEST_SKILL+1] += base1; + // else + // newbon->CritDmgMob[base2] += base1; + // break; + // } + // + // case SE_CriticalSpellChance: + // { + // newbon->CriticalSpellChance += base1; + // + // if (base2 > newbon->SpellCritDmgIncrease) + // newbon->SpellCritDmgIncrease = base2; + // + // break; + // } + // + // case SE_ResistFearChance: + // { + // if(base1 == 100) // If we reach 100% in a single spell/item then we should be immune to negative fear resist effects until our immunity is over + // newbon->Fearless = true; + // + // newbon->ResistFearChance += base1; // these should stack + // break; + // } + // + // case SE_SkillDamageAmount: + // { + // if(base2 == -1) + // newbon->SkillDamageAmount[HIGHEST_SKILL+1] += base1; + // else + // newbon->SkillDamageAmount[base2] += base1; + // break; + // } + // + // case SE_SpecialAttackKBProc: + // { + // //You can only have one of these per client. [AA Dragon Punch] + // newbon->SpecialAttackKBProc[0] = base1; //Chance base 100 = 25% proc rate + // newbon->SpecialAttackKBProc[1] = base2; //Skill to KB Proc Off + // break; + // } + // + // case SE_DamageModifier: + // { + // if(base2 == -1) + // newbon->DamageModifier[HIGHEST_SKILL+1] += base1; + // else + // newbon->DamageModifier[base2] += base1; + // break; + // } + // + // case SE_SlayUndead: + // { + // if(newbon->SlayUndead[1] < base1) + // newbon->SlayUndead[0] = base1; // Rate + // newbon->SlayUndead[1] = base2; // Damage Modifier + // break; + // } + // + // case SE_GiveDoubleRiposte: + // { + // //0=Regular Riposte 1=Skill Attack Riposte 2=Skill + // if(base2 == 0){ + // if(newbon->GiveDoubleRiposte[0] < base1) + // newbon->GiveDoubleRiposte[0] = base1; + // } + // //Only for special attacks. + // else if(base2 > 0 && (newbon->GiveDoubleRiposte[1] < base1)){ + // newbon->GiveDoubleRiposte[1] = base1; + // newbon->GiveDoubleRiposte[2] = base2; + // } + // + // break; + // } + // + // //Kayen: Not sure best way to implement this yet. + // //Physically raises skill cap ie if 55/55 it will raise to 55/60 + // case SE_RaiseSkillCap: + // { + // if(newbon->RaiseSkillCap[0] < base1){ + // newbon->RaiseSkillCap[0] = base1; //value + // newbon->RaiseSkillCap[1] = base2; //skill + // } + // break; + // } + // + // case SE_MasteryofPast: + // { + // if(newbon->MasteryofPast < base1) + // newbon->MasteryofPast = base1; + // break; + // } + // + // case SE_CastingLevel2: + // case SE_CastingLevel: + // { + // newbon->effective_casting_level += base1; + // break; + // } + // + // + // case SE_DivineSave: + // { + // if(newbon->DivineSaveChance[0] < base1) + // { + // newbon->DivineSaveChance[0] = base1; + // newbon->DivineSaveChance[1] = base2; + // } + // break; + // } + // + // case SE_SpellEffectResistChance: + // { + // for(int e = 0; e < MAX_RESISTABLE_EFFECTS*2; e+=2) + // { + // if(!newbon->SEResist[e] || ((newbon->SEResist[e] = base2) && (newbon->SEResist[e+1] < base1)) ){ + // newbon->SEResist[e] = base2; + // newbon->SEResist[e+1] = base1; + // break; + // } + // } + // break; + // } + // + // case SE_MitigateDamageShield: + // { + // if (base1 < 0) + // base1 = base1*(-1); + // + // newbon->DSMitigationOffHand += base1; + // break; + // } + // + // case SE_FinishingBlow: + // { + // + // //base1 = chance, base2 = damage + // if (newbon->FinishingBlow[1] < base2){ + // newbon->FinishingBlow[0] = base1; + // newbon->FinishingBlow[1] = base2; + // } + // break; + // } + // + // case SE_FinishingBlowLvl: + // { + // //base1 = level, base2 = ??? (Set to 200 in AA data, possible proc rate mod?) + // if (newbon->FinishingBlowLvl[0] < base1){ + // newbon->FinishingBlowLvl[0] = base1; + // newbon->FinishingBlowLvl[1] = base2; + // } + // break; + // } + // } + //} } bool Bot::IsValidRaceClassCombo() { @@ -6326,398 +6316,399 @@ int32 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id) bool LimitFound = false; int FocusCount = 0; - std::map >::const_iterator find_iter = aa_effects.find(aa_ID); - if(find_iter == aa_effects.end()) - { - return 0; - } + //old AA + //std::map >::const_iterator find_iter = aa_effects.find(aa_ID); + //if(find_iter == aa_effects.end()) + //{ + // return 0; + //} + // + //for (std::map::const_iterator iter = aa_effects[aa_ID].begin(); iter != aa_effects[aa_ID].end(); ++iter) + //{ + // effect = iter->second.skill_id; + // base1 = iter->second.base1; + // base2 = iter->second.base2; + // slot = iter->second.slot; + // + // //AA Foci's can contain multiple focus effects within the same AA. + // //To handle this we will not automatically return zero if a limit is found. + // //Instead if limit is found and multiple effects, we will reset the limit check + // //when the next valid focus effect is found. + // if (IsFocusEffect(0, 0, true,effect) || (effect == SE_TriggerOnCast)){ + // FocusCount++; + // //If limit found on prior check next, else end loop. + // if (FocusCount > 1){ + // if (LimitFound){ + // value = 0; + // LimitFound = false; + // } + // + // else{ + // break; + // } + // } + // } + // + // + // switch (effect) + // { + // case SE_Blank: + // break; + // + // //Handle Focus Limits + // case SE_LimitResist: + // if(base1) + // { + // if(spell.resisttype != base1) + // LimitFound = true; + // } + // break; + // case SE_LimitInstant: + // if(spell.buffduration) + // LimitFound = true; + // break; + // case SE_LimitMaxLevel: + // spell_level = spell.classes[(GetClass()%16) - 1]; + // lvldiff = spell_level - base1; + // //every level over cap reduces the effect by base2 percent unless from a clicky when ItemCastsUseFocus is true + // if(lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || RuleB(Character, ItemCastsUseFocus) == false)) + // { + // if(base2 > 0) + // { + // lvlModifier -= base2*lvldiff; + // if(lvlModifier < 1) + // LimitFound = true; + // } + // else { + // LimitFound = true; + // } + // } + // break; + // case SE_LimitMinLevel: + // if((spell.classes[(GetClass()%16) - 1]) < base1) + // LimitFound = true; + // break; + // case SE_LimitCastTimeMin: + // if (spell.cast_time < base1) + // LimitFound = true; + // break; + // case SE_LimitSpell: + // // Exclude spell(any but this) + // if(base1 < 0) { + // if (spell_id == (base1*-1)) + // LimitFound = true; + // } + // else { + // // Include Spell(only this) + // if (spell_id != base1) + // LimitFound = true; + // } + // break; + // case SE_LimitMinDur: + // if (base1 > CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) + // LimitFound = true; + // break; + // case SE_LimitEffect: + // // Exclude effect(any but this) + // if(base1 < 0) { + // if(IsEffectInSpell(spell_id,(base1*-1))) + // LimitFound = true; + // } + // else { + // // Include effect(only this) + // if(!IsEffectInSpell(spell_id,base1)) + // LimitFound = true; + // } + // break; + // case SE_LimitSpellType: + // switch(base1) + // { + // case 0: + // if (!IsDetrimentalSpell(spell_id)) + // LimitFound = true; + // break; + // case 1: + // if (!IsBeneficialSpell(spell_id)) + // LimitFound = true; + // break; + // } + // break; + // + // case SE_LimitManaMin: + // if(spell.mana < base1) + // LimitFound = true; + // break; + // + // case SE_LimitTarget: + // // Exclude + // if(base1 < 0){ + // if(-base1 == spell.targettype) + // LimitFound = true; + // } + // // Include + // else { + // if(base1 != spell.targettype) + // LimitFound = true; + // } + // break; + // + // case SE_LimitCombatSkills: + // // 1 is for disciplines only + // if(base1 == 1 && !IsDiscipline(spell_id)) + // LimitFound = true; + // // 0 is spells only + // else if(base1 == 0 && IsDiscipline(spell_id)) + // LimitFound = true; + // break; + // + // case SE_LimitSpellGroup: + // if(base1 > 0 && base1 != spell.spellgroup) + // LimitFound = true; + // else if(base1 < 0 && base1 == spell.spellgroup) + // LimitFound = true; + // break; + // + // + // case SE_LimitCastingSkill: + // LimitSpellSkill = true; + // if(base1 == spell.skill) + // SpellSkill_Found = true; + // break; + // + // case SE_LimitClass: + // //Do not use this limit more then once per spell. If multiple class, treat value like items would. + // if (!PassLimitClass(base1, GetClass())) + // LimitFound = true; + // break; + // + // + // //Handle Focus Effects + // case SE_ImprovedDamage: + // if (type == focusImprovedDamage && base1 > value) + // value = base1; + // break; + // + // case SE_ImprovedHeal: + // if (type == focusImprovedHeal && base1 > value) + // value = base1; + // break; + // + // case SE_ReduceManaCost: + // if (type == focusManaCost ) + // value = base1; + // break; + // + // case SE_IncreaseSpellHaste: + // if (type == focusSpellHaste && base1 > value) + // value = base1; + // break; + // + // case SE_IncreaseSpellDuration: + // if (type == focusSpellDuration && base1 > value) + // value = base1; + // break; + // + // case SE_SpellDurationIncByTic: + // if (type == focusSpellDurByTic && base1 > value) + // value = base1; + // break; + // + // case SE_SwarmPetDuration: + // if (type == focusSwarmPetDuration && base1 > value) + // value = base1; + // break; + // + // case SE_IncreaseRange: + // if (type == focusRange && base1 > value) + // value = base1; + // break; + // + // case SE_ReduceReagentCost: + // if (type == focusReagentCost && base1 > value) + // value = base1; + // break; + // + // case SE_PetPowerIncrease: + // if (type == focusPetPower && base1 > value) + // value = base1; + // break; + // + // case SE_SpellResistReduction: + // if (type == focusResistRate && base1 > value) + // value = base1; + // break; + // + // case SE_SpellHateMod: + // if (type == focusSpellHateMod) + // { + // if(value != 0) + // { + // if(value > 0) + // { + // if(base1 > value) + // { + // value = base1; + // } + // } + // else + // { + // if(base1 < value) + // { + // value = base1; + // } + // } + // } + // else + // value = base1; + // } + // break; + // + // case SE_ReduceReuseTimer: + // { + // if(type == focusReduceRecastTime) + // value = base1 / 1000; + // + // break; + // } + // + // case SE_TriggerOnCast: + // { + // if(type == focusTriggerOnCast) + // { + // if(zone->random.Int(0, 100) <= base1){ + // value = base2; + // } + // + // else{ + // value = 0; + // LimitFound = true; + // } + // } + // break; + // } + // case SE_FcSpellVulnerability: + // { + // if(type == focusSpellVulnerability) + // { + // value = base1; + // } + // break; + // } + // case SE_BlockNextSpellFocus: + // { + // if(type == focusBlockNextSpell) + // { + // if(zone->random.Int(1, 100) <= base1) + // value = 1; + // } + // break; + // } + // case SE_FcTwincast: + // { + // if(type == focusTwincast) + // { + // value = base1; + // } + // break; + // } + // + // /* + // case SE_SympatheticProc: + // { + // if(type == focusSympatheticProc) + // { + // float ProcChance, ProcBonus; + // int16 ProcRateMod = base1; //Baseline is 100 for most Sympathetic foci + // int32 cast_time = GetActSpellCasttime(spell_id, spells[spell_id].cast_time); + // GetSympatheticProcChances(ProcBonus, ProcChance, cast_time, ProcRateMod); + // + // if(zone->random.Real(0, 1) <= ProcChance) + // value = focus_id; + // + // else + // value = 0; + // } + // break; + // } + // */ + // case SE_FcDamageAmt: + // { + // if(type == focusFcDamageAmt) + // value = base1; + // + // break; + // } + // + // case SE_FcDamageAmtCrit: + // { + // if(type == focusFcDamageAmtCrit) + // value = base1; + // + // break; + // } + // + // case SE_FcDamageAmtIncoming: + // { + // if(type == focusFcDamageAmtIncoming) + // value = base1; + // + // break; + // } + // + // case SE_FcHealAmtIncoming: + // if(type == focusFcHealAmtIncoming) + // value = base1; + // break; + // + // case SE_FcHealPctCritIncoming: + // if (type == focusFcHealPctCritIncoming) + // value = base1; + // break; + // + // case SE_FcHealAmtCrit: + // if(type == focusFcHealAmtCrit) + // value = base1; + // break; + // + // case SE_FcHealAmt: + // if(type == focusFcHealAmt) + // value = base1; + // break; + // + // case SE_FcHealPctIncoming: + // if(type == focusFcHealPctIncoming) + // value = base1; + // break; + // + // case SE_FcBaseEffects: + // { + // if (type == focusFcBaseEffects) + // value = base1; + // + // break; + // } + // case SE_FcDamagePctCrit: + // { + // if(type == focusFcDamagePctCrit) + // value = base1; + // + // break; + // } + // + // case SE_FcIncreaseNumHits: + // { + // if(type == focusIncreaseNumHits) + // value = base1; + // + // break; + // } - for (std::map::const_iterator iter = aa_effects[aa_ID].begin(); iter != aa_effects[aa_ID].end(); ++iter) - { - effect = iter->second.skill_id; - base1 = iter->second.base1; - base2 = iter->second.base2; - slot = iter->second.slot; - - //AA Foci's can contain multiple focus effects within the same AA. - //To handle this we will not automatically return zero if a limit is found. - //Instead if limit is found and multiple effects, we will reset the limit check - //when the next valid focus effect is found. - if (IsFocusEffect(0, 0, true,effect) || (effect == SE_TriggerOnCast)){ - FocusCount++; - //If limit found on prior check next, else end loop. - if (FocusCount > 1){ - if (LimitFound){ - value = 0; - LimitFound = false; - } - - else{ - break; - } - } - } - - - switch (effect) - { - case SE_Blank: - break; - - //Handle Focus Limits - case SE_LimitResist: - if(base1) - { - if(spell.resisttype != base1) - LimitFound = true; - } - break; - case SE_LimitInstant: - if(spell.buffduration) - LimitFound = true; - break; - case SE_LimitMaxLevel: - spell_level = spell.classes[(GetClass()%16) - 1]; - lvldiff = spell_level - base1; - //every level over cap reduces the effect by base2 percent unless from a clicky when ItemCastsUseFocus is true - if(lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || RuleB(Character, ItemCastsUseFocus) == false)) - { - if(base2 > 0) - { - lvlModifier -= base2*lvldiff; - if(lvlModifier < 1) - LimitFound = true; - } - else { - LimitFound = true; - } - } - break; - case SE_LimitMinLevel: - if((spell.classes[(GetClass()%16) - 1]) < base1) - LimitFound = true; - break; - case SE_LimitCastTimeMin: - if (spell.cast_time < base1) - LimitFound = true; - break; - case SE_LimitSpell: - // Exclude spell(any but this) - if(base1 < 0) { - if (spell_id == (base1*-1)) - LimitFound = true; - } - else { - // Include Spell(only this) - if (spell_id != base1) - LimitFound = true; - } - break; - case SE_LimitMinDur: - if (base1 > CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) - LimitFound = true; - break; - case SE_LimitEffect: - // Exclude effect(any but this) - if(base1 < 0) { - if(IsEffectInSpell(spell_id,(base1*-1))) - LimitFound = true; - } - else { - // Include effect(only this) - if(!IsEffectInSpell(spell_id,base1)) - LimitFound = true; - } - break; - case SE_LimitSpellType: - switch(base1) - { - case 0: - if (!IsDetrimentalSpell(spell_id)) - LimitFound = true; - break; - case 1: - if (!IsBeneficialSpell(spell_id)) - LimitFound = true; - break; - } - break; - - case SE_LimitManaMin: - if(spell.mana < base1) - LimitFound = true; - break; - - case SE_LimitTarget: - // Exclude - if(base1 < 0){ - if(-base1 == spell.targettype) - LimitFound = true; - } - // Include - else { - if(base1 != spell.targettype) - LimitFound = true; - } - break; - - case SE_LimitCombatSkills: - // 1 is for disciplines only - if(base1 == 1 && !IsDiscipline(spell_id)) - LimitFound = true; - // 0 is spells only - else if(base1 == 0 && IsDiscipline(spell_id)) - LimitFound = true; - break; - - case SE_LimitSpellGroup: - if(base1 > 0 && base1 != spell.spellgroup) - LimitFound = true; - else if(base1 < 0 && base1 == spell.spellgroup) - LimitFound = true; - break; - - - case SE_LimitCastingSkill: - LimitSpellSkill = true; - if(base1 == spell.skill) - SpellSkill_Found = true; - break; - - case SE_LimitClass: - //Do not use this limit more then once per spell. If multiple class, treat value like items would. - if (!PassLimitClass(base1, GetClass())) - LimitFound = true; - break; - - - //Handle Focus Effects - case SE_ImprovedDamage: - if (type == focusImprovedDamage && base1 > value) - value = base1; - break; - - case SE_ImprovedHeal: - if (type == focusImprovedHeal && base1 > value) - value = base1; - break; - - case SE_ReduceManaCost: - if (type == focusManaCost ) - value = base1; - break; - - case SE_IncreaseSpellHaste: - if (type == focusSpellHaste && base1 > value) - value = base1; - break; - - case SE_IncreaseSpellDuration: - if (type == focusSpellDuration && base1 > value) - value = base1; - break; - - case SE_SpellDurationIncByTic: - if (type == focusSpellDurByTic && base1 > value) - value = base1; - break; - - case SE_SwarmPetDuration: - if (type == focusSwarmPetDuration && base1 > value) - value = base1; - break; - - case SE_IncreaseRange: - if (type == focusRange && base1 > value) - value = base1; - break; - - case SE_ReduceReagentCost: - if (type == focusReagentCost && base1 > value) - value = base1; - break; - - case SE_PetPowerIncrease: - if (type == focusPetPower && base1 > value) - value = base1; - break; - - case SE_SpellResistReduction: - if (type == focusResistRate && base1 > value) - value = base1; - break; - - case SE_SpellHateMod: - if (type == focusSpellHateMod) - { - if(value != 0) - { - if(value > 0) - { - if(base1 > value) - { - value = base1; - } - } - else - { - if(base1 < value) - { - value = base1; - } - } - } - else - value = base1; - } - break; - - case SE_ReduceReuseTimer: - { - if(type == focusReduceRecastTime) - value = base1 / 1000; - - break; - } - - case SE_TriggerOnCast: - { - if(type == focusTriggerOnCast) - { - if(zone->random.Int(0, 100) <= base1){ - value = base2; - } - - else{ - value = 0; - LimitFound = true; - } - } - break; - } - case SE_FcSpellVulnerability: - { - if(type == focusSpellVulnerability) - { - value = base1; - } - break; - } - case SE_BlockNextSpellFocus: - { - if(type == focusBlockNextSpell) - { - if(zone->random.Int(1, 100) <= base1) - value = 1; - } - break; - } - case SE_FcTwincast: - { - if(type == focusTwincast) - { - value = base1; - } - break; - } - - /* - case SE_SympatheticProc: - { - if(type == focusSympatheticProc) - { - float ProcChance, ProcBonus; - int16 ProcRateMod = base1; //Baseline is 100 for most Sympathetic foci - int32 cast_time = GetActSpellCasttime(spell_id, spells[spell_id].cast_time); - GetSympatheticProcChances(ProcBonus, ProcChance, cast_time, ProcRateMod); - - if(zone->random.Real(0, 1) <= ProcChance) - value = focus_id; - - else - value = 0; - } - break; - } - */ - case SE_FcDamageAmt: - { - if(type == focusFcDamageAmt) - value = base1; - - break; - } - - case SE_FcDamageAmtCrit: - { - if(type == focusFcDamageAmtCrit) - value = base1; - - break; - } - - case SE_FcDamageAmtIncoming: - { - if(type == focusFcDamageAmtIncoming) - value = base1; - - break; - } - - case SE_FcHealAmtIncoming: - if(type == focusFcHealAmtIncoming) - value = base1; - break; - - case SE_FcHealPctCritIncoming: - if (type == focusFcHealPctCritIncoming) - value = base1; - break; - - case SE_FcHealAmtCrit: - if(type == focusFcHealAmtCrit) - value = base1; - break; - - case SE_FcHealAmt: - if(type == focusFcHealAmt) - value = base1; - break; - - case SE_FcHealPctIncoming: - if(type == focusFcHealPctIncoming) - value = base1; - break; - - case SE_FcBaseEffects: - { - if (type == focusFcBaseEffects) - value = base1; - - break; - } - case SE_FcDamagePctCrit: - { - if(type == focusFcDamagePctCrit) - value = base1; - - break; - } - - case SE_FcIncreaseNumHits: - { - if(type == focusIncreaseNumHits) - value = base1; - - break; - } - - //Check for spell skill limits. - if ((LimitSpellSkill) && (!SpellSkill_Found)) - return 0; - - } - } + ////Check for spell skill limits. + //if ((LimitSpellSkill) && (!SpellSkill_Found)) + // return 0; + // + // } + //} if (LimitFound){ return 0; @@ -6885,30 +6876,30 @@ int32 Bot::GetBotFocusEffect(BotfocusType bottype, uint16 spell_id) { // AA Focus if (aabonuses.FocusEffects[bottype]){ - - int totalAAs = database.CountAAs(); - int32 Total3 = 0; - uint32 slots = 0; - uint32 aa_AA = 0; - uint32 aa_value = 0; - - for (int i = 0; i < totalAAs; i++) { //iterate through all of the client's AAs - std::map::iterator aa = botAAs.find(i); - if(aa != botAAs.end()) { // make sure aa exists or we'll crash zone - aa_AA = aa->second.aa_id; //same as aaid from the aa_effects table - aa_value = aa->second.total_levels; //how many points in it - if (aa_AA < 1 || aa_value < 1) - continue; - - Total3 = CalcBotAAFocus(bottype, aa_AA, spell_id); - if (Total3 > 0 && realTotal3 >= 0 && Total3 > realTotal3) { - realTotal3 = Total3; - } - else if (Total3 < 0 && Total3 < realTotal3) { - realTotal3 = Total3; - } - } - } + //old aa + //int totalAAs = database.CountAAs(); + //int32 Total3 = 0; + //uint32 slots = 0; + //uint32 aa_AA = 0; + //uint32 aa_value = 0; + // + //for (int i = 0; i < totalAAs; i++) { //iterate through all of the client's AAs + // std::map::iterator aa = botAAs.find(i); + // if(aa != botAAs.end()) { // make sure aa exists or we'll crash zone + // aa_AA = aa->second.aa_id; //same as aaid from the aa_effects table + // aa_value = aa->second.total_levels; //how many points in it + // if (aa_AA < 1 || aa_value < 1) + // continue; + // + // Total3 = CalcBotAAFocus(bottype, aa_AA, spell_id); + // if (Total3 > 0 && realTotal3 >= 0 && Total3 > realTotal3) { + // realTotal3 = Total3; + // } + // else if (Total3 < 0 && Total3 < realTotal3) { + // realTotal3 = Total3; + // } + // } + //} } if(bottype == BotfocusReagentCost && IsSummonPetSpell(spell_id) && GetAA(aaElementalPact)) @@ -8940,6 +8931,7 @@ int32 Bot::GetActSpellCost(uint16 spell_id, int32 cost) { break; } + //aa old bonus += 0.05 * GetAA(aaAdvancedSpellCastingMastery); if(SuccessChance <= (SpecializeSkill * 0.3 * bonus)) diff --git a/zone/bot.h b/zone/bot.h index 25e0d1c52..1f1262ffc 100644 --- a/zone/bot.h +++ b/zone/bot.h @@ -448,8 +448,6 @@ public: bool IsBotWISCaster() { return (GetClass() == CLERIC || GetClass() == DRUID || GetClass() == SHAMAN); } bool CanHeal(); int GetRawACNoShield(int &shield_ac); - void LoadAAs(); - uint32 GetAA(uint32 aa_id); void ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon); bool GetHasBeenSummoned() { return _hasBeenSummoned; } const glm::vec3 GetPreSummonLocation() const { return m_PreSummonLocation; } diff --git a/zone/client.cpp b/zone/client.cpp index f7510f855..24968f005 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -439,7 +439,7 @@ void Client::SendZoneInPackets() //Send AA Exp packet: if (GetLevel() >= 51) - SendAAStats(); + SendAlternateAdvancementStats(); // Send exp packets outapp = new EQApplicationPacket(OP_ExpUpdate, sizeof(ExpUpdate_Struct)); @@ -8040,56 +8040,6 @@ void Client::TryItemTimer(int slot) } } -void Client::RefundAA() { - int cur = 0; - bool refunded = false; - - for(int x = 0; x < aaHighestID; x++) { - cur = GetAA(x); - if(cur > 0){ - SendAA_Struct* curaa = zone->FindAA(x); - if(cur){ - SetAA(x, 0); - for(int j = 0; j < cur; j++) { - m_pp.aapoints += curaa->cost + (curaa->cost_inc * j); - refunded = true; - } - } - else - { - m_pp.aapoints += cur; - SetAA(x, 0); - refunded = true; - } - } - } - - if(refunded) { - SaveAA(); - Save(); - // Kick(); - } -} - -void Client::IncrementAA(int aa_id) { - SendAA_Struct* aa2 = zone->FindAA(aa_id); - - if(aa2 == nullptr) - return; - - if(GetAA(aa_id) == aa2->max_level) - return; - - SetAA(aa_id, GetAA(aa_id) + 1); - - SaveAA(); - - SendAA(aa_id); - SendAATable(); - SendAAStats(); - CalcBonuses(); -} - void Client::SendItemScale(ItemInst *inst) { int slot = m_inv.GetSlotByItemInst(inst); if(slot != -1) { diff --git a/zone/client.h b/zone/client.h index 0b105c3ef..bd2c5371d 100644 --- a/zone/client.h +++ b/zone/client.h @@ -762,9 +762,16 @@ public: //New AA Methods void SendAlternateAdvancementRank(int aa_id, int level); void SendAlternateAdvancementTable(); + void SendAlternateAdvancementStats(); + void PurchaseAlternateAdvancementRank(int rank_id); + void SendAlternateAdvancementPoints(); + + void SetAAPoints(uint32 points) { m_pp.aapoints = points; SendAlternateAdvancementStats(); } + void AddAAPoints(uint32 points) { m_pp.aapoints += points; SendAlternateAdvancementStats(); } + int GetAAPoints() { return m_pp.aapoints; } + int GetSpentAA() { return m_pp.aapoints_spent; } //old AA Methods - void SendAAList(); void ResetAA(); void SendClearAA(); void SendAA(uint32 id, int seq=1); @@ -776,7 +783,6 @@ public: void SetTitleSuffix(const char *txt); inline uint32 GetMaxAAXP(void) const { return max_AAXP; } inline uint32 GetAAXP() const { return m_pp.expAA; } - void SendAAStats(); void SendAATable(); void SendAATimers(); int GetAATimerID(aaID activate); @@ -790,10 +796,6 @@ public: inline uint32 GetAAPointsSpent() { return m_pp.aapoints_spent; } int16 CalcAAFocusEffect(focusType type, uint16 focus_spell, uint16 spell_id); int16 CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id); - void SetAAPoints(uint32 points) { m_pp.aapoints = points; SendAAStats(); } - void AddAAPoints(uint32 points) { m_pp.aapoints += points; SendAAStats(); } - int GetAAPoints() { return m_pp.aapoints; } - int GetSpentAA() { return m_pp.aapoints_spent; } void RefundAA(); void IncrementAA(int aa_id); int32 GetAAEffectDataBySlot(uint32 aa_ID, uint32 slot_id, bool GetEffect, bool GetBase1, bool GetBase2); diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index f97873db3..e7d3b61a7 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1152,7 +1152,7 @@ void Client::Handle_Connect_OP_TGB(const EQApplicationPacket *app) void Client::Handle_Connect_OP_UpdateAA(const EQApplicationPacket *app) { - SendAATable(); + SendAlternateAdvancementPoints(); } void Client::Handle_Connect_OP_WearChange(const EQApplicationPacket *app) @@ -1439,61 +1439,9 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) if (m_pp.ldon_points_tak < 0 || m_pp.ldon_points_tak > 2000000000){ m_pp.ldon_points_tak = 0; } if (m_pp.ldon_points_available < 0 || m_pp.ldon_points_available > 2000000000){ m_pp.ldon_points_available = 0; } - /* Initialize AA's : Move to function eventually */ - //aa old - //for (uint32 a = 0; a < MAX_PP_AA_ARRAY; a++) - // aa[a] = &m_pp.aa_array[a]; - //query = StringFormat( - // "SELECT " - // "slot, " - // "aa_id, " - // "aa_value, " - // "charges " - // "FROM " - // "`character_alternate_abilities` " - // "WHERE `id` = %u ORDER BY `slot`", this->CharacterID()); - //results = database.QueryDatabase(query); i = 0; - //int offset = 0; // offset to fix the hole from expendables - //for (auto row = results.begin(); row != results.end(); ++row) { - // i = atoi(row[0]) - offset; - // m_pp.aa_array[i].AA = atoi(row[1]); - // m_pp.aa_array[i].value = atoi(row[2]); - // m_pp.aa_array[i].charges = atoi(row[3]); - // /* A used expendable could cause there to be a "hole" in the array, this is very bad. Bad things like keeping your expendable after use. - // We could do a few things, one of them being reshuffling when the hole is created or defer the fixing until a later point, like during load! - // Or just never making a hole in the array and just have hacks every where. Fixing the hole at load really just keeps 1 hack in Client::SendAATable - // and keeping this offset that will cause the next AA to be pushed back over the hole. We also need to clean up on save so we don't have multiple - // entries for a single AA. - // */ - // if (m_pp.aa_array[i].value == 0) - // offset++; - //} - //for (uint32 a = 0; a < MAX_PP_AA_ARRAY; a++){ - // uint32 id = aa[a]->AA; - // //watch for invalid AA IDs - // if (id == aaNone) - // continue; - // if (id >= aaHighestID) { - // aa[a]->AA = aaNone; - // aa[a]->value = 0; - // continue; - // } - // if (aa[a]->value == 0) { - // aa[a]->AA = aaNone; - // continue; - // } - // if (aa[a]->value > HIGHEST_AA_VALUE) { - // aa[a]->AA = aaNone; - // aa[a]->value = 0; - // continue; - // } - // - // //aa old -// // if (aa[a]->value > 1) /* hack in some stuff for sony's new AA method (where each level of each aa.has a seperate ID) */ -// // aa_points[(id - aa[a]->value + 1)] = aa[a]->value; -// // else -// // aa_points[id] = aa[a]->value; - //} + if(!database.LoadAlternateAdvancement(this)) { + Log.Out(Logs::General, Logs::Error, "Error loading AA points for %s", GetName()); + } if (SPDAT_RECORDS > 0) { for (uint32 z = 0; zsize != sizeof(AA_Action)){ - printf("Error! OP_AAAction size didnt match!\n"); + Log.Out(Logs::General, Logs::AA, "Error! OP_AAAction size didnt match!"); return; } AA_Action* action = (AA_Action*)app->pBuffer; if (action->action == aaActionActivate) {//AA Hotkey Log.Out(Logs::Detail, Logs::AA, "Activating AA %d", action->ability); - ActivateAA((aaID)action->ability); + //ActivateAlternateAdvancementAbility(action->ability); } else if (action->action == aaActionBuy) { - BuyAA(action); + PurchaseAlternateAdvancementRank(action->ability); } else if (action->action == aaActionDisableEXP){ //Turn Off AA Exp if (m_epp.perAA > 0) Message_StringID(0, AA_OFF); + m_epp.perAA = 0; - SendAAStats(); + SendAlternateAdvancementStats(); } else if (action->action == aaActionSetEXP) { if (m_epp.perAA == 0) Message_StringID(0, AA_ON); m_epp.perAA = action->exp_value; - if (m_epp.perAA<0 || m_epp.perAA>100) m_epp.perAA = 0; // stop exploit with sanity check + if (m_epp.perAA < 0 || m_epp.perAA > 100) + m_epp.perAA = 0; // stop exploit with sanity check + // send an update - SendAAStats(); - SendAATable(); + SendAlternateAdvancementStats(); + SendAlternateAdvancementTable(); } else { - printf("Unknown AA action: %u %u 0x%x %d\n", action->action, action->ability, action->unknown08, action->exp_value); + Log.Out(Logs::General, Logs::AA, "Unknown AA action : %u %u 0x%x %d", action->action, action->ability, action->unknown08, action->exp_value); } - - return; } void Client::Handle_OP_AcceptNewTask(const EQApplicationPacket *app) diff --git a/zone/command.cpp b/zone/command.cpp index f2a84baaa..298022dc9 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -5600,8 +5600,8 @@ void command_setaapts(Client *c, const Seperator *sep) t->SetLeadershipEXP(t->GetGroupEXP(), atoi(sep->arg[2])*RAID_EXP_PER_POINT); } else { t->SetEXP(t->GetEXP(),t->GetMaxAAXP()*atoi(sep->arg[2]),false); - t->SendAAStats(); - t->SendAATable(); + t->SendAlternateAdvancementStats(); + t->SendAlternateAdvancementTable(); } } @@ -7684,54 +7684,55 @@ void command_reloadtitles(Client *c, const Seperator *sep) } +//old aa, probably to be removed void command_altactivate(Client *c, const Seperator *sep){ - if(sep->arg[1][0] == '\0'){ - c->Message(10, "Invalid argument, usage:"); - c->Message(10, "#altactivate list - lists the AA ID numbers that are available to you"); - c->Message(10, "#altactivate time [argument] - returns the time left until you can use the AA with the ID that matches the argument."); - c->Message(10, "#altactivate [argument] - activates the AA with the ID that matches the argument."); - return; - } - if(!strcasecmp(sep->arg[1], "help")){ - c->Message(10, "Usage:"); - c->Message(10, "#altactivate list - lists the AA ID numbers that are available to you"); - c->Message(10, "#altactivate time [argument] - returns the time left until you can use the AA with the ID that matches the argument."); - c->Message(10, "#altactivate [argument] - activates the AA with the ID that matches the argument."); - return; - } - if(!strcasecmp(sep->arg[1], "list")){ - c->Message(10, "You have access to the following AA Abilities:"); - int x, val; - SendAA_Struct* saa = nullptr; - for(x = 0; x < aaHighestID; x++){ - if(AA_Actions[x][0].spell_id || AA_Actions[x][0].action){ //if there's an action or spell associated we assume it's a valid - val = 0; //and assume if they don't have a value for the first rank then it isn't valid for any rank - saa = nullptr; - val = c->GetAA(x); - if(val){ - saa = zone->FindAA(x); - c->Message(10, "%d: %s %d", x, saa->name, val); - } - } - } - } - else if(!strcasecmp(sep->arg[1], "time")){ - int ability = atoi(sep->arg[2]); - if(c->GetAA(ability)){ - int remain = c->GetPTimers().GetRemainingTime(pTimerAAStart + ability); - if(remain) - c->Message(10, "You may use that ability in %d minutes and %d seconds.", (remain/60), (remain%60)); - else - c->Message(10, "You may use that ability now."); - } - else{ - c->Message(10, "You do not have access to that ability."); - } - } - else - { - c->ActivateAA((aaID) atoi(sep->arg[1])); - } +// if(sep->arg[1][0] == '\0'){ +// c->Message(10, "Invalid argument, usage:"); +// c->Message(10, "#altactivate list - lists the AA ID numbers that are available to you"); +// c->Message(10, "#altactivate time [argument] - returns the time left until you can use the AA with the ID that matches the argument."); +// c->Message(10, "#altactivate [argument] - activates the AA with the ID that matches the argument."); +// return; +// } +// if(!strcasecmp(sep->arg[1], "help")){ +// c->Message(10, "Usage:"); +// c->Message(10, "#altactivate list - lists the AA ID numbers that are available to you"); +// c->Message(10, "#altactivate time [argument] - returns the time left until you can use the AA with the ID that matches the argument."); +// c->Message(10, "#altactivate [argument] - activates the AA with the ID that matches the argument."); +// return; +// } +// if(!strcasecmp(sep->arg[1], "list")){ +// c->Message(10, "You have access to the following AA Abilities:"); +// int x, val; +// SendAA_Struct* saa = nullptr; +// for(x = 0; x < aaHighestID; x++){ +// if(AA_Actions[x][0].spell_id || AA_Actions[x][0].action){ //if there's an action or spell associated we assume it's a valid +// val = 0; //and assume if they don't have a value for the first rank then it isn't valid for any rank +// saa = nullptr; +// val = c->GetAA(x); +// if(val){ +// saa = zone->FindAA(x); +// c->Message(10, "%d: %s %d", x, saa->name, val); +// } +// } +// } +// } +// else if(!strcasecmp(sep->arg[1], "time")){ +// int ability = atoi(sep->arg[2]); +// if(c->GetAA(ability)){ +// int remain = c->GetPTimers().GetRemainingTime(pTimerAAStart + ability); +// if(remain) +// c->Message(10, "You may use that ability in %d minutes and %d seconds.", (remain/60), (remain%60)); +// else +// c->Message(10, "You may use that ability now."); +// } +// else{ +// c->Message(10, "You do not have access to that ability."); +// } +// } +// else +// { +// c->ActivateAA((aaID) atoi(sep->arg[1])); +// } } void command_traindisc(Client *c, const Seperator *sep) diff --git a/zone/exp.cpp b/zone/exp.cpp index 826b12e67..0172263e7 100644 --- a/zone/exp.cpp +++ b/zone/exp.cpp @@ -515,7 +515,7 @@ void Client::SetEXP(uint32 set_exp, uint32 set_aaxp, bool isrezzexp) { if (GetLevel() < 51) { m_epp.perAA = 0; // turn off aa exp if they drop below 51 } else - SendAAStats(); //otherwise, send them an AA update + SendAlternateAdvancementStats(); //otherwise, send them an AA update //send the expdata in any case so the xp bar isnt stuck after leveling uint32 tmpxp1 = GetEXPForLevel(GetLevel()+1); diff --git a/zone/mob.h b/zone/mob.h index b074782b3..bbc841f48 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -958,7 +958,8 @@ public: //aa new uint32 GetAA(uint32 rank_id) const; - bool SetAA(uint32 rank_id, uint32 new_value); + bool SetAA(uint32 rank_id, uint32 new_value, uint32 charges = 0); + void ClearAAs() { aa_ranks.clear(); } bool CanUseAlternateAdvancementRank(AA::Rank *rank); bool CanPurchaseAlternateAdvancementRank(AA::Rank *ran); @@ -1316,7 +1317,7 @@ protected: bool bEnraged; bool destructibleobject; - std::unordered_map aa_ranks; + std::unordered_map> aa_ranks; private: void _StopSong(); //this is not what you think it is diff --git a/zone/net.cpp b/zone/net.cpp index 0178eff21..1bca0571b 100644 --- a/zone/net.cpp +++ b/zone/net.cpp @@ -248,9 +248,6 @@ int main(int argc, char** argv) { Log.Out(Logs::General, Logs::Zone_Server, "Loading titles"); title_manager.LoadTitles(); - Log.Out(Logs::General, Logs::Zone_Server, "Loading AA effects"); - database.LoadAAEffects(); - Log.Out(Logs::General, Logs::Zone_Server, "Loading tributes"); database.LoadTributes(); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index eed8305f4..d564a341e 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -4077,33 +4077,34 @@ XS(XS_Client_RefundAA) { if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - int curpt = 0; - bool refunded = false; - - for(int x1=0;x1GetAA(x1); - if(curpt > 0){ - SendAA_Struct* curaa = zone->FindAA(x1); - if(curaa){ - THIS->SetAA(x1, 0); - for(int x2=0;x2GetPP().aapoints += curaa->cost + (curaa->cost_inc * x2); - refunded = true; - } - } - else //aa doesn't exist.. but if they bought it then it had at least a cost of 1 point each - { //so give back what we can - THIS->GetPP().aapoints += curpt; - THIS->SetAA(x1, 0); - refunded = true; - } - } - } - - if(refunded){ - THIS->Save(); //save of course - THIS->Kick(); //client gets all buggy if we don't immediatly relog so just force it on them - } + //old aa + //int curpt = 0; + //bool refunded = false; + // + //for(int x1=0;x1GetAA(x1); + // if(curpt > 0){ + // SendAA_Struct* curaa = zone->FindAA(x1); + // if(curaa){ + // THIS->SetAA(x1, 0); + // for(int x2=0;x2GetPP().aapoints += curaa->cost + (curaa->cost_inc * x2); + // refunded = true; + // } + // } + // else //aa doesn't exist.. but if they bought it then it had at least a cost of 1 point each + // { //so give back what we can + // THIS->GetPP().aapoints += curpt; + // THIS->SetAA(x1, 0); + // refunded = true; + // } + // } + //} + // + //if(refunded){ + // THIS->Save(); //save of course + // THIS->Kick(); //client gets all buggy if we don't immediatly relog so just force it on them + //} } XSRETURN_EMPTY; } diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 7e91550c5..8ac60c125 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -4157,30 +4157,30 @@ int32 Client::GetAAEffectDataBySlot(uint32 aa_ID, uint32 slot_id, bool GetEffect int32 base2 = 0; uint32 slot = 0; - - std::map >::const_iterator find_iter = aa_effects.find(aa_ID); - if(find_iter == aa_effects.end()) - return 0; - - for (std::map::const_iterator iter = aa_effects[aa_ID].begin(); iter != aa_effects[aa_ID].end(); ++iter) - { - effect = iter->second.skill_id; - base1 = iter->second.base1; - base2 = iter->second.base2; - slot = iter->second.slot; - - if (slot && slot == slot_id) { - - if (GetEffect) - return effect; - - if (GetBase1) - return base1; - - if (GetBase2) - return base2; - } - } + //old aa + //std::map >::const_iterator find_iter = aa_effects.find(aa_ID); + //if(find_iter == aa_effects.end()) + // return 0; + // + //for (std::map::const_iterator iter = aa_effects[aa_ID].begin(); iter != aa_effects[aa_ID].end(); ++iter) + //{ + // effect = iter->second.skill_id; + // base1 = iter->second.base1; + // base2 = iter->second.base2; + // slot = iter->second.slot; + // + // if (slot && slot == slot_id) { + // + // if (GetEffect) + // return effect; + // + // if (GetBase1) + // return base1; + // + // if (GetBase2) + // return base2; + // } + //} return 0; } @@ -4214,431 +4214,432 @@ int16 Client::CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id) */ int FocusCount = 0; - std::map >::const_iterator find_iter = aa_effects.find(aa_ID); - if(find_iter == aa_effects.end()) - { - return 0; - } - - for (std::map::const_iterator iter = aa_effects[aa_ID].begin(); iter != aa_effects[aa_ID].end(); ++iter) - { - effect = iter->second.skill_id; - base1 = iter->second.base1; - base2 = iter->second.base2; - slot = iter->second.slot; - - /* - AA Foci's can contain multiple focus effects within the same AA. - To handle this we will not automatically return zero if a limit is found. - Instead if limit is found and multiple focus effects, we will reset the limit check - when the next valid focus effect is found. - */ - - if (IsFocusEffect(0, 0, true,effect) || (effect == SE_TriggerOnCast)){ - FocusCount++; - //If limit found on prior check next, else end loop. - if (FocusCount > 1){ - - for(int e = 0; e < MaxLimitInclude; e+=2) { - if (LimitInclude[e] && !LimitInclude[e+1]) - LimitFailure = true; - } - - if (LimitFailure){ - value = 0; - LimitFailure = false; - - for(int e = 0; e < MaxLimitInclude; e++) { - LimitInclude[e] = false; //Reset array - } - } - - else{ - break; - } - } - } - - - switch (effect) - { - case SE_Blank: - break; - - //Handle Focus Limits - - case SE_LimitResist: - if(base1 < 0){ - if(spell.resisttype == -base1) //Exclude - LimitFailure = true; - } - else { - LimitInclude[0] = true; - if (spell.resisttype == base1) //Include - LimitInclude[1] = true; - } - break; - - case SE_LimitInstant: - if(base1 == 1 && spell.buffduration) //Fail if not instant - LimitFailure = true; - if(base1 == 0 && (spell.buffduration == 0)) //Fail if instant - LimitFailure = true; - - break; - - case SE_LimitMaxLevel: - spell_level = spell.classes[(GetClass()%16) - 1]; - lvldiff = spell_level - base1; - //every level over cap reduces the effect by base2 percent unless from a clicky when ItemCastsUseFocus is true - if(lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || RuleB(Character, ItemCastsUseFocus) == false)) { - if(base2 > 0){ - lvlModifier -= base2*lvldiff; - if(lvlModifier < 1) - LimitFailure = true; - } - else - LimitFailure = true; - } - break; - - case SE_LimitMinLevel: - if((spell.classes[(GetClass()%16) - 1]) < base1) - LimitFailure = true; - break; - - case SE_LimitCastTimeMin: - if (static_cast(spell.cast_time) < base1) - LimitFailure = true; - break; - - case SE_LimitCastTimeMax: - if (static_cast(spell.cast_time) > base1) - LimitFailure = true; - break; - - case SE_LimitSpell: - if(base1 < 0) { //Exclude - if (spell_id == -base1) - LimitFailure = true; - } - else { - LimitInclude[2] = true; - if (spell_id == base1) //Include - LimitInclude[3] = true; - } - break; - - case SE_LimitMinDur: - if (base1 > CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) - LimitFailure = true; - - break; - - case SE_LimitEffect: - if(base1 < 0){ - if(IsEffectInSpell(spell_id,-base1)) //Exclude - LimitFailure = true; - } - else{ - LimitInclude[4] = true; - if(IsEffectInSpell(spell_id,base1)) //Include - LimitInclude[5] = true; - } - break; - - case SE_LimitSpellType: - switch(base1) - { - case 0: - if (!IsDetrimentalSpell(spell_id)) - LimitFailure = true; - break; - case 1: - if (!IsBeneficialSpell(spell_id)) - LimitFailure = true; - break; - } - break; - - case SE_LimitManaMin: - if(spell.mana < base1) - LimitFailure = true; - break; - - case SE_LimitTarget: - if (base1 < 0) { - if (-base1 == spell.targettype) //Exclude - LimitFailure = true; - } - else { - LimitInclude[6] = true; - if (base1 == spell.targettype) //Include - LimitInclude[7] = true; - } - break; - - case SE_LimitCombatSkills: - if (base1 == 0 && (IsCombatSkill(spell_id) || IsCombatProc(spell_id))) //Exclude Discs / Procs - LimitFailure = true; - else if (base1 == 1 && (!IsCombatSkill(spell_id) || !IsCombatProc(spell_id))) //Exclude Spells - LimitFailure = true; - - break; - - case SE_LimitSpellGroup: - if(base1 < 0) { - if (-base1 == spell.spellgroup) //Exclude - LimitFailure = true; - } - else { - LimitInclude[8] = true; - if (base1 == spell.spellgroup) //Include - LimitInclude[9] = true; - } - break; - - case SE_LimitCastingSkill: - if(base1 < 0) { - if(-base1 == spell.skill) - LimitFailure = true; - } - else { - LimitInclude[10] = true; - if(base1 == spell.skill) - LimitInclude[11] = true; - } - break; - - case SE_LimitSpellClass: - if(base1 < 0) { //Exclude - if (CheckSpellCategory(spell_id, base1, SE_LimitSpellClass)) - return(0); - } - else { - LimitInclude[12] = true; - if (CheckSpellCategory(spell_id, base1, SE_LimitSpellClass)) //Include - LimitInclude[13] = true; - } - break; - - case SE_LimitSpellSubclass: - if(base1 < 0) { //Exclude - if (CheckSpellCategory(spell_id, base1, SE_LimitSpellSubclass)) - return(0); - } - else { - LimitInclude[14] = true; - if (CheckSpellCategory(spell_id, base1, SE_LimitSpellSubclass)) //Include - LimitInclude[15] = true; - } - break; - - case SE_LimitClass: - //Do not use this limit more then once per spell. If multiple class, treat value like items would. - if (!PassLimitClass(base1, GetClass())) - LimitFailure = true; - break; - - case SE_LimitRace: - if (base1 != GetRace()) - LimitFailure = true; - break; - - case SE_LimitUseMin: - if (base1 > spell.numhits) - LimitFailure = true; - break; - - case SE_LimitUseType: - if (base1 != spell.numhitstype) - LimitFailure = true; - break; - - //Handle Focus Effects - case SE_ImprovedDamage: - if (type == focusImprovedDamage && base1 > value) - value = base1; - break; - - case SE_ImprovedHeal: - if (type == focusImprovedHeal && base1 > value) - value = base1; - break; - - case SE_ReduceManaCost: - if (type == focusManaCost) - value = base1; - break; - - case SE_IncreaseSpellHaste: - if (type == focusSpellHaste && base1 > value) - value = base1; - break; - - case SE_IncreaseSpellDuration: - if (type == focusSpellDuration && base1 > value) - value = base1; - break; - - case SE_SpellDurationIncByTic: - if (type == focusSpellDurByTic && base1 > value) - value = base1; - break; - - case SE_SwarmPetDuration: - if (type == focusSwarmPetDuration && base1 > value) - value = base1; - break; - - case SE_IncreaseRange: - if (type == focusRange && base1 > value) - value = base1; - break; - - case SE_ReduceReagentCost: - if (type == focusReagentCost && base1 > value) - value = base1; - break; - - case SE_PetPowerIncrease: - if (type == focusPetPower && base1 > value) - value = base1; - break; - - case SE_SpellResistReduction: - if (type == focusResistRate && base1 > value) - value = base1; - break; - - case SE_SpellHateMod: - if (type == focusSpellHateMod ) { - if(value != 0) { - if(value > 0){ - if(base1 > value) - value = base1; - } - else{ - if(base1 < value) - value = base1; - } - } - else - value = base1; - } - break; - - case SE_ReduceReuseTimer: - if(type == focusReduceRecastTime) - value = base1 / 1000; - break; - - case SE_TriggerOnCast: - if(type == focusTriggerOnCast){ - if(zone->random.Roll(base1)) { - value = base2; - } else { - value = 0; - LimitFailure = true; - } - break; - } - - case SE_FcSpellVulnerability: - if(type == focusSpellVulnerability) - value = base1; - break; - - case SE_BlockNextSpellFocus: - if(type == focusBlockNextSpell){ - if(zone->random.Roll(base1)) - value = 1; - } - break; - - case SE_FcTwincast: - if(type == focusTwincast) - value = base1; - break; - - //Note if using these as AA, make sure this is first focus used. - case SE_SympatheticProc: - if(type == focusSympatheticProc) - value = base2; - break; - - case SE_FcDamageAmt: - if(type == focusFcDamageAmt) - value = base1; - break; - - case SE_FcDamageAmtCrit: - if(type == focusFcDamageAmtCrit) - value = base1; - break; - - case SE_FcDamageAmtIncoming: - if(type == focusFcDamageAmtIncoming) - value = base1; - break; - - case SE_FcHealAmtIncoming: - if(type == focusFcHealAmtIncoming) - value = base1; - break; - - case SE_FcHealPctCritIncoming: - if (type == focusFcHealPctCritIncoming) - value = base1; - break; - - case SE_FcHealAmtCrit: - if(type == focusFcHealAmtCrit) - value = base1; - break; - - case SE_FcHealAmt: - if(type == focusFcHealAmt) - value = base1; - break; - - case SE_FcHealPctIncoming: - if(type == focusFcHealPctIncoming) - value = base1; - break; - - case SE_FcBaseEffects: - if (type == focusFcBaseEffects) - value = base1; - break; - - case SE_FcDamagePctCrit: - if(type == focusFcDamagePctCrit) - value = base1; - break; - - case SE_FcIncreaseNumHits: - if(type == focusIncreaseNumHits) - value = base1; - break; - - case SE_FcLimitUse: - if(type == focusFcLimitUse) - value = base1; - break; - - case SE_FcMute: - if(type == focusFcMute) - value = base1; - break; - - case SE_FcStunTimeMod: - if(type == focusFcStunTimeMod) - value = base1; - break; - - } - } + //old AA + //std::map >::const_iterator find_iter = aa_effects.find(aa_ID); + //if(find_iter == aa_effects.end()) + //{ + // return 0; + //} + // + //for (std::map::const_iterator iter = aa_effects[aa_ID].begin(); iter != aa_effects[aa_ID].end(); ++iter) + //{ + // effect = iter->second.skill_id; + // base1 = iter->second.base1; + // base2 = iter->second.base2; + // slot = iter->second.slot; + // + // /* + // AA Foci's can contain multiple focus effects within the same AA. + // To handle this we will not automatically return zero if a limit is found. + // Instead if limit is found and multiple focus effects, we will reset the limit check + // when the next valid focus effect is found. + // */ + // + // if (IsFocusEffect(0, 0, true,effect) || (effect == SE_TriggerOnCast)){ + // FocusCount++; + // //If limit found on prior check next, else end loop. + // if (FocusCount > 1){ + // + // for(int e = 0; e < MaxLimitInclude; e+=2) { + // if (LimitInclude[e] && !LimitInclude[e+1]) + // LimitFailure = true; + // } + // + // if (LimitFailure){ + // value = 0; + // LimitFailure = false; + // + // for(int e = 0; e < MaxLimitInclude; e++) { + // LimitInclude[e] = false; //Reset array + // } + // } + // + // else{ + // break; + // } + // } + // } + // + // + // switch (effect) + // { + // case SE_Blank: + // break; + // + // //Handle Focus Limits + // + // case SE_LimitResist: + // if(base1 < 0){ + // if(spell.resisttype == -base1) //Exclude + // LimitFailure = true; + // } + // else { + // LimitInclude[0] = true; + // if (spell.resisttype == base1) //Include + // LimitInclude[1] = true; + // } + // break; + // + // case SE_LimitInstant: + // if(base1 == 1 && spell.buffduration) //Fail if not instant + // LimitFailure = true; + // if(base1 == 0 && (spell.buffduration == 0)) //Fail if instant + // LimitFailure = true; + // + // break; + // + // case SE_LimitMaxLevel: + // spell_level = spell.classes[(GetClass()%16) - 1]; + // lvldiff = spell_level - base1; + // //every level over cap reduces the effect by base2 percent unless from a clicky when ItemCastsUseFocus is true + // if(lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || RuleB(Character, ItemCastsUseFocus) == false)) { + // if(base2 > 0){ + // lvlModifier -= base2*lvldiff; + // if(lvlModifier < 1) + // LimitFailure = true; + // } + // else + // LimitFailure = true; + // } + // break; + // + // case SE_LimitMinLevel: + // if((spell.classes[(GetClass()%16) - 1]) < base1) + // LimitFailure = true; + // break; + // + // case SE_LimitCastTimeMin: + // if (static_cast(spell.cast_time) < base1) + // LimitFailure = true; + // break; + // + // case SE_LimitCastTimeMax: + // if (static_cast(spell.cast_time) > base1) + // LimitFailure = true; + // break; + // + // case SE_LimitSpell: + // if(base1 < 0) { //Exclude + // if (spell_id == -base1) + // LimitFailure = true; + // } + // else { + // LimitInclude[2] = true; + // if (spell_id == base1) //Include + // LimitInclude[3] = true; + // } + // break; + // + // case SE_LimitMinDur: + // if (base1 > CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) + // LimitFailure = true; + // + // break; + // + // case SE_LimitEffect: + // if(base1 < 0){ + // if(IsEffectInSpell(spell_id,-base1)) //Exclude + // LimitFailure = true; + // } + // else{ + // LimitInclude[4] = true; + // if(IsEffectInSpell(spell_id,base1)) //Include + // LimitInclude[5] = true; + // } + // break; + // + // case SE_LimitSpellType: + // switch(base1) + // { + // case 0: + // if (!IsDetrimentalSpell(spell_id)) + // LimitFailure = true; + // break; + // case 1: + // if (!IsBeneficialSpell(spell_id)) + // LimitFailure = true; + // break; + // } + // break; + // + // case SE_LimitManaMin: + // if(spell.mana < base1) + // LimitFailure = true; + // break; + // + // case SE_LimitTarget: + // if (base1 < 0) { + // if (-base1 == spell.targettype) //Exclude + // LimitFailure = true; + // } + // else { + // LimitInclude[6] = true; + // if (base1 == spell.targettype) //Include + // LimitInclude[7] = true; + // } + // break; + // + // case SE_LimitCombatSkills: + // if (base1 == 0 && (IsCombatSkill(spell_id) || IsCombatProc(spell_id))) //Exclude Discs / Procs + // LimitFailure = true; + // else if (base1 == 1 && (!IsCombatSkill(spell_id) || !IsCombatProc(spell_id))) //Exclude Spells + // LimitFailure = true; + // + // break; + // + // case SE_LimitSpellGroup: + // if(base1 < 0) { + // if (-base1 == spell.spellgroup) //Exclude + // LimitFailure = true; + // } + // else { + // LimitInclude[8] = true; + // if (base1 == spell.spellgroup) //Include + // LimitInclude[9] = true; + // } + // break; + // + // case SE_LimitCastingSkill: + // if(base1 < 0) { + // if(-base1 == spell.skill) + // LimitFailure = true; + // } + // else { + // LimitInclude[10] = true; + // if(base1 == spell.skill) + // LimitInclude[11] = true; + // } + // break; + // + // case SE_LimitSpellClass: + // if(base1 < 0) { //Exclude + // if (CheckSpellCategory(spell_id, base1, SE_LimitSpellClass)) + // return(0); + // } + // else { + // LimitInclude[12] = true; + // if (CheckSpellCategory(spell_id, base1, SE_LimitSpellClass)) //Include + // LimitInclude[13] = true; + // } + // break; + // + // case SE_LimitSpellSubclass: + // if(base1 < 0) { //Exclude + // if (CheckSpellCategory(spell_id, base1, SE_LimitSpellSubclass)) + // return(0); + // } + // else { + // LimitInclude[14] = true; + // if (CheckSpellCategory(spell_id, base1, SE_LimitSpellSubclass)) //Include + // LimitInclude[15] = true; + // } + // break; + // + // case SE_LimitClass: + // //Do not use this limit more then once per spell. If multiple class, treat value like items would. + // if (!PassLimitClass(base1, GetClass())) + // LimitFailure = true; + // break; + // + // case SE_LimitRace: + // if (base1 != GetRace()) + // LimitFailure = true; + // break; + // + // case SE_LimitUseMin: + // if (base1 > spell.numhits) + // LimitFailure = true; + // break; + // + // case SE_LimitUseType: + // if (base1 != spell.numhitstype) + // LimitFailure = true; + // break; + // + // //Handle Focus Effects + // case SE_ImprovedDamage: + // if (type == focusImprovedDamage && base1 > value) + // value = base1; + // break; + // + // case SE_ImprovedHeal: + // if (type == focusImprovedHeal && base1 > value) + // value = base1; + // break; + // + // case SE_ReduceManaCost: + // if (type == focusManaCost) + // value = base1; + // break; + // + // case SE_IncreaseSpellHaste: + // if (type == focusSpellHaste && base1 > value) + // value = base1; + // break; + // + // case SE_IncreaseSpellDuration: + // if (type == focusSpellDuration && base1 > value) + // value = base1; + // break; + // + // case SE_SpellDurationIncByTic: + // if (type == focusSpellDurByTic && base1 > value) + // value = base1; + // break; + // + // case SE_SwarmPetDuration: + // if (type == focusSwarmPetDuration && base1 > value) + // value = base1; + // break; + // + // case SE_IncreaseRange: + // if (type == focusRange && base1 > value) + // value = base1; + // break; + // + // case SE_ReduceReagentCost: + // if (type == focusReagentCost && base1 > value) + // value = base1; + // break; + // + // case SE_PetPowerIncrease: + // if (type == focusPetPower && base1 > value) + // value = base1; + // break; + // + // case SE_SpellResistReduction: + // if (type == focusResistRate && base1 > value) + // value = base1; + // break; + // + // case SE_SpellHateMod: + // if (type == focusSpellHateMod ) { + // if(value != 0) { + // if(value > 0){ + // if(base1 > value) + // value = base1; + // } + // else{ + // if(base1 < value) + // value = base1; + // } + // } + // else + // value = base1; + // } + // break; + // + // case SE_ReduceReuseTimer: + // if(type == focusReduceRecastTime) + // value = base1 / 1000; + // break; + // + // case SE_TriggerOnCast: + // if(type == focusTriggerOnCast){ + // if(zone->random.Roll(base1)) { + // value = base2; + // } else { + // value = 0; + // LimitFailure = true; + // } + // break; + // } + // + // case SE_FcSpellVulnerability: + // if(type == focusSpellVulnerability) + // value = base1; + // break; + // + // case SE_BlockNextSpellFocus: + // if(type == focusBlockNextSpell){ + // if(zone->random.Roll(base1)) + // value = 1; + // } + // break; + // + // case SE_FcTwincast: + // if(type == focusTwincast) + // value = base1; + // break; + // + // //Note if using these as AA, make sure this is first focus used. + // case SE_SympatheticProc: + // if(type == focusSympatheticProc) + // value = base2; + // break; + // + // case SE_FcDamageAmt: + // if(type == focusFcDamageAmt) + // value = base1; + // break; + // + // case SE_FcDamageAmtCrit: + // if(type == focusFcDamageAmtCrit) + // value = base1; + // break; + // + // case SE_FcDamageAmtIncoming: + // if(type == focusFcDamageAmtIncoming) + // value = base1; + // break; + // + // case SE_FcHealAmtIncoming: + // if(type == focusFcHealAmtIncoming) + // value = base1; + // break; + // + // case SE_FcHealPctCritIncoming: + // if (type == focusFcHealPctCritIncoming) + // value = base1; + // break; + // + // case SE_FcHealAmtCrit: + // if(type == focusFcHealAmtCrit) + // value = base1; + // break; + // + // case SE_FcHealAmt: + // if(type == focusFcHealAmt) + // value = base1; + // break; + // + // case SE_FcHealPctIncoming: + // if(type == focusFcHealPctIncoming) + // value = base1; + // break; + // + // case SE_FcBaseEffects: + // if (type == focusFcBaseEffects) + // value = base1; + // break; + // + // case SE_FcDamagePctCrit: + // if(type == focusFcDamagePctCrit) + // value = base1; + // break; + // + // case SE_FcIncreaseNumHits: + // if(type == focusIncreaseNumHits) + // value = base1; + // break; + // + // case SE_FcLimitUse: + // if(type == focusFcLimitUse) + // value = base1; + // break; + // + // case SE_FcMute: + // if(type == focusFcMute) + // value = base1; + // break; + // + // case SE_FcStunTimeMod: + // if(type == focusFcStunTimeMod) + // value = base1; + // break; + // + // } + //} for(int e = 0; e < MaxLimitInclude; e+=2) { if (LimitInclude[e] && !LimitInclude[e+1]) diff --git a/zone/zone.cpp b/zone/zone.cpp index 31bc27b41..e5e30f01a 100644 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -804,8 +804,6 @@ Zone::Zone(uint32 in_zoneid, uint32 in_instanceid, const char* in_short_name) weather_intensity = 0; blocked_spells = nullptr; totalBS = 0; - aas = nullptr; - totalAAs = 0; zone_has_current_time = false; Instance_Shutdown_Timer = nullptr; @@ -864,16 +862,6 @@ Zone::~Zone() { safe_delete(qGlobals); safe_delete_array(adv_data); safe_delete_array(map_name); - - if(aas != nullptr) { - int r; - for(r = 0; r < totalAAs; r++) { - uchar *data = (uchar *) aas[r]; - safe_delete_array(data); - } - safe_delete_array(aas); - } - safe_delete(GuildBanks); } @@ -952,9 +940,6 @@ bool Zone::Init(bool iStaticZone) { zone->LoadAlternateCurrencies(); zone->LoadNPCEmotes(&NPCEmoteList); - //Load AA information - LoadAAs(); - LoadAlternateAdvancement(); //Load merchant data diff --git a/zone/zone.h b/zone/zone.h index 536ff048c..a4a49b8b2 100644 --- a/zone/zone.h +++ b/zone/zone.h @@ -120,14 +120,7 @@ public: AA::Ability *GetAlternateAdvancementAbilityByRank(int rank_id); AA::Rank *GetAlternateAdvancementRank(int rank_id); - //old AA - void LoadAAs(); - int GetTotalAAs() { return totalAAs; } - SendAA_Struct* GetAABySequence(uint32 seq) { return aas[seq]; } - SendAA_Struct* FindAA(uint32 id); - uint8 GetTotalAALevels(uint32 skill_id); - - void LoadZoneDoors(const char* zone, int16 version); + void LoadZoneDoors(const char* zone, int16 version); bool LoadZoneObjects(); bool LoadGroundSpawns(); void ReloadStaticData(); @@ -202,6 +195,10 @@ public: char *adv_data; bool did_adventure_actions; + //new AA + std::unordered_map> aa_abilities; + std::unordered_map> aa_ranks; + void DoAdventureCountIncrease(); void DoAdventureAssassinationCountIncrease(); void DoAdventureActions(); @@ -322,17 +319,6 @@ private: int totalBS; ZoneSpellsBlocked *blocked_spells; -public: - //new AA - std::unordered_map> aa_abilities; - std::unordered_map> aa_ranks; - -private: - - //old AA - int totalAAs; - SendAA_Struct **aas; //array of AA structs - /* Spawn related things */ diff --git a/zone/zonedb.h b/zone/zonedb.h index ddd9450d2..35275b654 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -343,18 +343,7 @@ public: /* AAs New */ bool LoadAlternateAdvancementAbilities(std::unordered_map> &abilities, std::unordered_map> &ranks); - - /* AAs Old */ - bool LoadAAEffects(); - bool LoadAAEffects2(); - bool LoadSwarmSpells(); - SendAA_Struct*GetAASkillVars(uint32 skill_id); - uint8 GetTotalAALevels(uint32 skill_id); - uint32 GetSizeAA(); - uint32 CountAAs(); - void LoadAAs(SendAA_Struct **load); - uint32 CountAAEffects(); - void FillAAEffects(SendAA_Struct* aa_struct); + bool LoadAlternateAdvancement(Client *c); /* Zone related */ bool GetZoneCFG(uint32 zoneid, uint16 instance_id, NewZone_Struct *data, bool &can_bind, bool &can_combat, bool &can_levitate, bool &can_castoutdoor, bool &is_city, bool &is_hotzone, bool &allow_mercs, uint8 &zone_type, int &ruleset, char **map_filename); From bad4a94b84c31d9f5bec2a357f3acf723e1be1f3 Mon Sep 17 00:00:00 2001 From: KimLS Date: Thu, 11 Jun 2015 01:45:55 -0700 Subject: [PATCH 09/48] Apply RoF2 patch demon gave me for AAs --- common/patches/rof2.cpp | 120 ++++++++++++++++++++++++---------------- 1 file changed, 71 insertions(+), 49 deletions(-) diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index a4f484a9e..3d96ae182 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -2936,58 +2936,80 @@ namespace RoF2 ENCODE(OP_SendAATable) { - ENCODE_LENGTH_ATLEAST(SendAA_Struct); - SETUP_VAR_ENCODE(SendAA_Struct); - ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); + EQApplicationPacket *inapp = *p; + *p = nullptr; + AARankInfo_Struct *emu = (AARankInfo_Struct*)inapp->pBuffer; + + // the structs::SendAA_Struct includes enough space for 1 prereq which is the min even if it has no prereqs + auto prereq_size = emu->total_prereqs > 1 ? (emu->total_prereqs - 1) * 8 : 0; + auto outapp = new EQApplicationPacket(OP_SendAATable, sizeof(structs::SendAA_Struct) + emu->total_effects * sizeof(structs::AA_Ability) + prereq_size); + inapp->SetReadPosition(sizeof(AARankInfo_Struct)+emu->total_effects * sizeof(AARankEffect_Struct)); + - // Check clientver field to verify this AA should be sent for SoF - // clientver 1 is for all clients and 5 is for Live - if (emu->clientver <= 8) - { - OUT(id); - eq->unknown004 = 1; - //eq->hotkey_sid = (emu->hotkey_sid==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->hotkey_sid2 = (emu->hotkey_sid2==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->title_sid = emu->id - emu->current_level + 1; - //eq->desc_sid = emu->id - emu->current_level + 1; - eq->hotkey_sid = (emu->hotkey_sid == 4294967295UL) ? -1 : (emu->sof_next_skill); - eq->hotkey_sid2 = (emu->hotkey_sid2 == 4294967295UL) ? -1 : (emu->sof_next_skill); - eq->title_sid = emu->sof_next_skill; - eq->desc_sid = emu->sof_next_skill; - OUT(class_type); - OUT(cost); - OUT(seq); - OUT(current_level); - eq->prereq_skill_count = 1; // min 1 - OUT(prereq_skill); - eq->prereq_minpoints_count = 1; // min 1 - OUT(prereq_minpoints); - eq->type = emu->sof_type; - OUT(spellid); - eq->unknown057 = 1; // Introduced during HoT - OUT(spell_type); - OUT(spell_refresh); - OUT(classes); - OUT(berserker); - //eq->max_level = emu->sof_max_level; - OUT(max_level); - OUT(last_id); - OUT(next_id); - OUT(cost2); - eq->aa_expansion = emu->aa_expansion; - eq->special_category = emu->special_category; - OUT(total_abilities); - eq->expendable_charges = emu->special_category == 7 ? 1 : 0; // temp hack, this can actually be any number - unsigned int r; - for (r = 0; r < emu->total_abilities; r++) { - OUT(abilities[r].skill_id); - OUT(abilities[r].base1); - OUT(abilities[r].base2); - OUT(abilities[r].slot); - } + std::vector skill; + std::vector points; + for(auto i = 0; i < emu->total_prereqs; ++i) { + skill.push_back(inapp->ReadUInt32()); + points.push_back(inapp->ReadUInt32()); } - FINISH_ENCODE(); + outapp->WriteUInt32(emu->id); + outapp->WriteUInt8(1); + outapp->WriteSInt32(emu->upper_hotkey_sid); + outapp->WriteSInt32(emu->lower_hotkey_sid); + outapp->WriteSInt32(emu->title_sid); + outapp->WriteSInt32(emu->desc_sid); + outapp->WriteSInt32(emu->level_req); + outapp->WriteSInt32(emu->cost); + outapp->WriteUInt32(emu->seq); + outapp->WriteUInt32(emu->current_level); + + if (emu->total_prereqs) { + outapp->WriteUInt32(emu->total_prereqs); + for (auto &e : skill) + outapp->WriteSInt32(e); + outapp->WriteUInt32(emu->total_prereqs); + for (auto &e : points) + outapp->WriteSInt32(e); + } else { + outapp->WriteUInt32(1); + outapp->WriteUInt32(0); + outapp->WriteUInt32(1); + outapp->WriteUInt32(0); + } + + outapp->WriteSInt32(emu->type); + outapp->WriteSInt32(emu->spell); + outapp->WriteSInt32(1); + outapp->WriteSInt32(emu->spell_type); + outapp->WriteSInt32(emu->spell_refresh); + outapp->WriteSInt32(emu->classes); + outapp->WriteSInt32(emu->max_level); + outapp->WriteSInt32(emu->prev_id); + outapp->WriteSInt32(emu->next_id); + outapp->WriteSInt32(emu->total_cost); + outapp->WriteUInt8(0); + outapp->WriteUInt8(emu->grant_only); + outapp->WriteUInt8(0); + outapp->WriteUInt32(emu->charges); + outapp->WriteSInt32(emu->expansion); + outapp->WriteSInt32(emu->category); + outapp->WriteUInt8(0); // shroud + outapp->WriteUInt8(0); // unknown109 + outapp->WriteUInt8(0); // loh + outapp->WriteUInt8(0); // unknown111 + outapp->WriteUInt32(emu->total_effects); + + inapp->SetReadPosition(sizeof(AARankInfo_Struct)); + for(auto i = 0; i < emu->total_effects; ++i) { + outapp->WriteUInt32(inapp->ReadUInt32()); // skill_id + outapp->WriteUInt32(inapp->ReadUInt32()); // base1 + outapp->WriteUInt32(inapp->ReadUInt32()); // base2 + outapp->WriteUInt32(inapp->ReadUInt32()); // slot + } + + dest->FastQueuePacket(&outapp); + delete inapp; } ENCODE(OP_SendCharInfo) From 985d969384e9a4b64668f96070cffd843db50224 Mon Sep 17 00:00:00 2001 From: KimLS Date: Thu, 11 Jun 2015 17:04:59 -0700 Subject: [PATCH 10/48] AA purchasing works --- zone/aa.cpp | 115 +++++++++++++++++++++++++++++++++++++++++++----- zone/client.cpp | 80 ++++++++++++++++----------------- zone/mob.h | 2 +- 3 files changed, 143 insertions(+), 54 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 4bbdf88a6..868c1f62c 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1796,13 +1796,14 @@ void Client::SendAlternateAdvancementPoints() { int i = 0; for(auto &aa : zone->aa_abilities) { - auto ranks = GetAA(aa.second->first_rank_id); + uint32 charges = 0; + auto ranks = GetAA(aa.second->first_rank_id, &charges); if(ranks) { AA::Rank *rank = aa.second->GetRankByPointsSpent(ranks); if(rank) { aa2->aa_list[i].AA = rank->id; aa2->aa_list[i].value = ranks; - aa2->aa_list[i].charges = 0; // todo send charges + aa2->aa_list[i].charges = charges; i++; } } @@ -1815,6 +1816,65 @@ void Client::SendAlternateAdvancementPoints() { } void Client::PurchaseAlternateAdvancementRank(int rank_id) { + AA::Rank *rank = zone->GetAlternateAdvancementRank(rank_id); + if(!rank) { + return; + } + + if(!rank->base_ability) { + return; + } + + if(!CanPurchaseAlternateAdvancementRank(rank)) { + return; + } + + if(rank->base_ability->charges > 0) { + SetAA(rank_id, rank->current_value, rank->base_ability->charges); + } else { + SetAA(rank_id, rank->current_value, 0); + + //if not max then send next aa + if(rank->next) { + SendAlternateAdvancementRank(rank->base_ability->id, rank->next->current_value); + } + } + + m_pp.aapoints -= rank->cost; + SaveAA(); + + SendAlternateAdvancementPoints(); + SendAlternateAdvancementStats(); + + if(rank->prev) { + Message_StringID(15, AA_IMPROVE, + std::to_string(rank->title_sid).c_str(), + std::to_string(rank->prev->current_value).c_str(), + std::to_string(rank->cost).c_str(), + std::to_string(AA_POINTS).c_str()); + + //QS stuff broke with new aa, todo: fix later + /* QS: Player_Log_AA_Purchases */ + // if (RuleB(QueryServ, PlayerLogAAPurchases)){ + // std::string event_desc = StringFormat("Ranked AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); + // QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); + // } + } else { + Message_StringID(15, AA_GAIN_ABILITY, + std::to_string(rank->title_sid).c_str(), + std::to_string(rank->cost).c_str(), + std::to_string(AA_POINTS).c_str()); + //QS stuff broke with new aa, todo: fix later + /* QS: Player_Log_AA_Purchases */ + // if (RuleB(QueryServ, PlayerLogAAPurchases)){ + // std::string event_desc = StringFormat("Initial AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); + // QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); + // } + } + + CalcBonuses(); + if(title_manager.IsNewAATitleAvailable(m_pp.aapoints_spent, GetBaseClass())) + NotifyNewTitlesAvailable(); } bool ZoneDatabase::LoadAlternateAdvancement(Client *c) { @@ -1872,7 +1932,7 @@ AA::Rank *Zone::GetAlternateAdvancementRank(int rank_id) { return nullptr; } -uint32 Mob::GetAA(uint32 rank_id) const { +uint32 Mob::GetAA(uint32 rank_id, uint32 *charges) const { if(zone) { AA::Ability *ability = zone->GetAlternateAdvancementAbilityByRank(rank_id); if(!ability) @@ -1880,6 +1940,9 @@ uint32 Mob::GetAA(uint32 rank_id) const { auto iter = aa_ranks.find(ability->id); if(iter != aa_ranks.end()) { + if(charges) { + *charges = iter->second.second; + } return iter->second.first; } } @@ -1915,10 +1978,6 @@ bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) { return false; } - if(!(RuleI(World, ExpansionSettings) & (1 << rank->expansion))) { - return false; - } - // Passive and Active Shroud AAs // For now we skip them if(ability->category == 3 || ability->category == 4) { @@ -1965,14 +2024,50 @@ bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank) { return false; } - //check that we have previous rank already + if(!(RuleI(World, ExpansionSettings) & (1 << rank->expansion))) { + return false; + } + + //check level req + if(rank->level_req > GetLevel()) { + return false; + } + + uint32 current_charges = 0; + auto points = GetAA(rank->id, ¤t_charges); + + //check that we are on previous rank already (if exists) if(rank->prev) { - //rank->prev-> + if(points != rank->prev->current_value) { + return false; + } + } + + //if expendable only let us purchase if we have no charges already + //not quite sure on how this functions client side atm + //I intend to look into it later to make sure the behavior is right + if(ability->charges > 0 && current_charges > 0) { + return false; } //check prereqs + for(auto &prereq : rank->prereqs) { + AA::Ability *prereq_ability = zone->GetAlternateAdvancementAbility(prereq.aa_id); - //check price + if(prereq_ability) { + auto ranks = GetAA(prereq_ability->first_rank_id); + if(ranks < prereq.points) { + return false; + } + } + } + + //check price, if client + if(IsClient()) { + if(rank->cost > CastToClient()->GetAAPoints()) { + return false; + } + } return true; } diff --git a/zone/client.cpp b/zone/client.cpp index 24968f005..f36609b9c 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -523,49 +523,43 @@ void Client::ReportConnectingState() { }; } -bool Client::SaveAA(){ - //aa old - //int first_entry = 0; - //std::string rquery; - ///* Save Player AA */ - //int spentpoints = 0; - //for (int a = 0; a < MAX_PP_AA_ARRAY; a++) { - // uint32 points = aa[a]->value; - // if (points > HIGHEST_AA_VALUE) { - // aa[a]->value = HIGHEST_AA_VALUE; - // points = HIGHEST_AA_VALUE; - // } - // if (points > 0) { - // SendAA_Struct* curAA = zone->FindAA(aa[a]->AA - aa[a]->value + 1); - // if (curAA) { - // for (int rank = 0; rank::iterator RequiredLevel = AARequiredLevelAndCost.find(aa[a]->AA - aa[a]->value + 1 + rank); - // if (RequiredLevel != AARequiredLevelAndCost.end()) { - // spentpoints += RequiredLevel->second.Cost; - // } - // else - // spentpoints += (curAA->cost + (curAA->cost_inc * rank)); - // } - // } - // } - //} - //m_pp.aapoints_spent = spentpoints + m_epp.expended_aa; - //int highest = 0; - //for (int a = 0; a < MAX_PP_AA_ARRAY; a++) { - // if (aa[a]->AA > 0) { // those with value 0 will be cleaned up on next load - // if (first_entry != 1){ - // rquery = StringFormat("REPLACE INTO `character_alternate_abilities` (id, slot, aa_id, aa_value, charges)" - // " VALUES (%u, %u, %u, %u, %u)", character_id, a, aa[a]->AA, aa[a]->value, aa[a]->charges); - // first_entry = 1; - // } else { - // rquery = rquery + StringFormat(", (%u, %u, %u, %u, %u)", character_id, a, aa[a]->AA, aa[a]->value, aa[a]->charges); - // } - // highest = a; - // } - //} - //auto results = database.QueryDatabase(rquery); - ///* This is another part of the hack to clean up holes left by expendable AAs */ - //rquery = StringFormat("DELETE FROM `character_alternate_abilities` WHERE `id` = %u AND `slot` > %d", character_id, highest); +bool Client::SaveAA() { + std::string dquery; + std::string iquery; + int spentpoints = 0; + int i = 0; + for(auto &rank : aa_ranks) { + AA::Ability *ability = zone->GetAlternateAdvancementAbility(rank.first); + if(!ability) + continue; + + if(rank.second.first > 0) { + AA::Rank *r = ability->GetRankByPointsSpent(rank.second.first); + + if(!r) + continue; + + spentpoints += r->total_cost; + + if(i == 0) { + iquery = StringFormat("INSERT INTO `character_alternate_abilities` (id, slot, aa_id, aa_value, charges)" + " VALUES (%u, %u, %u, %u, %u)", character_id, i, ability->first_rank_id, rank.second.first, rank.second.second); + } else { + iquery += StringFormat(", (%u, %u, %u, %u, %u)", character_id, i, ability->first_rank_id, rank.second.first, rank.second.second); + } + i++; + } + } + + m_pp.aapoints_spent = spentpoints + m_epp.expended_aa; + + dquery = StringFormat("DELETE FROM `character_alternate_abilities` WHERE id=%u", character_id); + database.QueryDatabase(dquery); + + if(iquery.length() > 0) { + database.QueryDatabase(iquery); + } + return true; } diff --git a/zone/mob.h b/zone/mob.h index bbc841f48..ce9fe3634 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -957,7 +957,7 @@ public: void Tune_FindAvoidanceByHitChance(Mob* defender, Mob *attacker, float hit_chance, int interval, int max_loop, int acc_override, int Msg = 0); //aa new - uint32 GetAA(uint32 rank_id) const; + uint32 GetAA(uint32 rank_id, uint32 *charges = nullptr) const; bool SetAA(uint32 rank_id, uint32 new_value, uint32 charges = 0); void ClearAAs() { aa_ranks.clear(); } bool CanUseAlternateAdvancementRank(AA::Rank *rank); From 63928caacebd29c4e6eaa6910e37edbafb72a3d3 Mon Sep 17 00:00:00 2001 From: KimLS Date: Thu, 11 Jun 2015 18:38:46 -0700 Subject: [PATCH 11/48] Removing cruft, patches should *all* work now even titanium, incrementaa has been implemented (untested atm) --- common/patches/rof.cpp | 123 ++++++---- common/patches/rof2.cpp | 2 +- common/patches/sod.cpp | 93 ++++---- common/patches/sof.cpp | 94 ++++---- common/patches/titanium.cpp | 82 +++---- common/patches/uf.cpp | 5 +- zone/aa.cpp | 449 +++++++----------------------------- zone/client.h | 6 +- zone/client_packet.cpp | 2 +- zone/lua_client.cpp | 2 +- zone/mob.h | 2 +- zone/perl_client.cpp | 2 +- zone/titles.cpp | 4 +- 13 files changed, 299 insertions(+), 567 deletions(-) diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index f4f01e300..0596ee95b 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -2810,7 +2810,7 @@ namespace RoF eq->aa_spent = emu->aa_spent; // These fields may need to be correctly populated at some point - eq->aapoints_assigned = emu->aa_spent + 1; + eq->aapoints_assigned = 0; eq->aa_spent_general = 0; eq->aa_spent_archetype = 0; eq->aa_spent_class = 0; @@ -2846,58 +2846,81 @@ namespace RoF ENCODE(OP_SendAATable) { - ENCODE_LENGTH_ATLEAST(SendAA_Struct); - SETUP_VAR_ENCODE(SendAA_Struct); - ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); + EQApplicationPacket *inapp = *p; + *p = nullptr; + AARankInfo_Struct *emu = (AARankInfo_Struct*)inapp->pBuffer; - // Check clientver field to verify this AA should be sent for SoF - // clientver 1 is for all clients and 5 is for Live - if (emu->clientver <= 7) - { - OUT(id); - eq->unknown004 = 1; - //eq->hotkey_sid = (emu->hotkey_sid==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->hotkey_sid2 = (emu->hotkey_sid2==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->title_sid = emu->id - emu->current_level + 1; - //eq->desc_sid = emu->id - emu->current_level + 1; - eq->hotkey_sid = (emu->hotkey_sid == 4294967295UL) ? -1 : (emu->sof_next_skill); - eq->hotkey_sid2 = (emu->hotkey_sid2 == 4294967295UL) ? -1 : (emu->sof_next_skill); - eq->title_sid = emu->sof_next_skill; - eq->desc_sid = emu->sof_next_skill; - OUT(class_type); - OUT(cost); - OUT(seq); - OUT(current_level); - eq->prereq_skill_count = 1; // min 1 - OUT(prereq_skill); - eq->prereq_minpoints_count = 1; // min 1 - OUT(prereq_minpoints); - eq->type = emu->sof_type; - OUT(spellid); - eq->unknown057 = 1; // Introduced during HoT - OUT(spell_type); - OUT(spell_refresh); - OUT(classes); - OUT(berserker); - //eq->max_level = emu->sof_max_level; - OUT(max_level); - OUT(last_id); - OUT(next_id); - OUT(cost2); - eq->aa_expansion = emu->aa_expansion; - eq->special_category = emu->special_category; - eq->expendable_charges = emu->special_category == 7 ? 1 : 0; // temp hack, this can actually be any number - OUT(total_abilities); - unsigned int r; - for (r = 0; r < emu->total_abilities; r++) { - OUT(abilities[r].skill_id); - OUT(abilities[r].base1); - OUT(abilities[r].base2); - OUT(abilities[r].slot); - } + // the structs::SendAA_Struct includes enough space for 1 prereq which is the min even if it has no prereqs + auto prereq_size = emu->total_prereqs > 1 ? (emu->total_prereqs - 1) * 8 : 0; + auto outapp = new EQApplicationPacket(OP_SendAATable, sizeof(structs::SendAA_Struct) + emu->total_effects * sizeof(structs::AA_Ability) + prereq_size); + inapp->SetReadPosition(sizeof(AARankInfo_Struct)+emu->total_effects * sizeof(AARankEffect_Struct)); + + + std::vector skill; + std::vector points; + for(auto i = 0; i < emu->total_prereqs; ++i) { + skill.push_back(inapp->ReadUInt32()); + points.push_back(inapp->ReadUInt32()); } - FINISH_ENCODE(); + outapp->WriteUInt32(emu->id); + outapp->WriteUInt8(1); + outapp->WriteSInt32(emu->upper_hotkey_sid); + outapp->WriteSInt32(emu->lower_hotkey_sid); + outapp->WriteSInt32(emu->title_sid); + outapp->WriteSInt32(emu->desc_sid); + outapp->WriteSInt32(emu->level_req); + outapp->WriteSInt32(emu->cost); + outapp->WriteUInt32(emu->seq); + outapp->WriteUInt32(emu->current_level); + + if(emu->total_prereqs) { + outapp->WriteUInt32(emu->total_prereqs); + for(auto &e : skill) + outapp->WriteSInt32(e); + outapp->WriteUInt32(emu->total_prereqs); + for(auto &e : points) + outapp->WriteSInt32(e); + } + else { + outapp->WriteUInt32(1); + outapp->WriteUInt32(0); + outapp->WriteUInt32(1); + outapp->WriteUInt32(0); + } + + outapp->WriteSInt32(emu->type); + outapp->WriteSInt32(emu->spell); + outapp->WriteSInt32(1); + outapp->WriteSInt32(emu->spell_type); + outapp->WriteSInt32(emu->spell_refresh); + outapp->WriteSInt32(emu->classes); + outapp->WriteSInt32(emu->max_level); + outapp->WriteSInt32(emu->prev_id); + outapp->WriteSInt32(emu->next_id); + outapp->WriteSInt32(emu->total_cost); + outapp->WriteUInt8(0); + outapp->WriteUInt8(emu->grant_only); + outapp->WriteUInt8(0); + outapp->WriteUInt32(emu->charges); + outapp->WriteSInt32(emu->expansion); + outapp->WriteSInt32(emu->category); + outapp->WriteUInt8(0); // shroud + outapp->WriteUInt8(0); // unknown109 + outapp->WriteUInt8(0); // loh + outapp->WriteUInt8(0); // unknown111 + outapp->WriteUInt32(emu->total_effects); + + inapp->SetReadPosition(sizeof(AARankInfo_Struct)); + for(auto i = 0; i < emu->total_effects; ++i) { + outapp->WriteUInt32(inapp->ReadUInt32()); // skill_id + outapp->WriteUInt32(inapp->ReadUInt32()); // base1 + outapp->WriteUInt32(inapp->ReadUInt32()); // base2 + outapp->WriteUInt32(inapp->ReadUInt32()); // slot + } + + dest->FastQueuePacket(&outapp); + delete inapp; } ENCODE(OP_SendCharInfo) diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index 3d96ae182..ba2099710 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -2900,7 +2900,7 @@ namespace RoF2 eq->aa_spent = emu->aa_spent; // These fields may need to be correctly populated at some point - eq->aapoints_assigned = emu->aa_spent + 1; + eq->aapoints_assigned = 0; eq->aa_spent_general = 0; eq->aa_spent_archetype = 0; eq->aa_spent_class = 0; diff --git a/common/patches/sod.cpp b/common/patches/sod.cpp index 69bb7f4c1..1910a96e4 100644 --- a/common/patches/sod.cpp +++ b/common/patches/sod.cpp @@ -1862,55 +1862,56 @@ namespace SoD ENCODE(OP_SendAATable) { - ENCODE_LENGTH_ATLEAST(SendAA_Struct); - SETUP_VAR_ENCODE(SendAA_Struct); - ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); + EQApplicationPacket *inapp = *p; + *p = nullptr; + AARankInfo_Struct *emu = (AARankInfo_Struct*)inapp->pBuffer; - // Check clientver field to verify this AA should be sent for SoF - // clientver 1 is for all clients and 5 is for SoD - if (emu->clientver <= 5) - { - OUT(id); - eq->unknown004 = 1; - //eq->hotkey_sid = (emu->hotkey_sid==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->hotkey_sid2 = (emu->hotkey_sid2==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->title_sid = emu->id - emu->current_level + 1; - //eq->desc_sid = emu->id - emu->current_level + 1; - eq->hotkey_sid = (emu->hotkey_sid == 4294967295UL) ? 0 : (emu->sof_next_skill); - eq->hotkey_sid2 = (emu->hotkey_sid2 == 4294967295UL) ? 0 : (emu->sof_next_skill); - eq->title_sid = emu->sof_next_skill; - eq->desc_sid = emu->sof_next_skill; - OUT(class_type); - OUT(cost); - OUT(seq); - OUT(current_level); - OUT(prereq_skill); - OUT(prereq_minpoints); - eq->type = emu->sof_type; - OUT(spellid); - OUT(spell_type); - OUT(spell_refresh); - OUT(classes); - OUT(berserker); - //eq->max_level = emu->sof_max_level; - OUT(max_level); - OUT(last_id); - OUT(next_id); - OUT(cost2); - eq->aa_expansion = emu->aa_expansion; - eq->special_category = emu->special_category; - eq->expendable_charges = emu->special_category == 7 ? 1 : 0; // temp hack, this can actually be any number - OUT(total_abilities); - unsigned int r; - for (r = 0; r < emu->total_abilities; r++) { - OUT(abilities[r].skill_id); - OUT(abilities[r].base1); - OUT(abilities[r].base2); - OUT(abilities[r].slot); - } + EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, sizeof(structs::SendAA_Struct) + emu->total_effects * sizeof(structs::AA_Ability)); + structs::SendAA_Struct *eq = (structs::SendAA_Struct*)outapp->pBuffer; + + inapp->SetReadPosition(sizeof(AARankInfo_Struct)); + outapp->SetWritePosition(sizeof(structs::SendAA_Struct)); + + eq->id = emu->id; + eq->unknown004 = 1; + eq->id = emu->id; + eq->hotkey_sid = emu->upper_hotkey_sid; + eq->hotkey_sid2 = emu->lower_hotkey_sid; + eq->desc_sid = emu->desc_sid; + eq->title_sid = emu->title_sid; + eq->class_type = emu->level_req; + eq->cost = emu->cost; + eq->seq = emu->seq; + eq->current_level = emu->current_level; + eq->type = emu->type; + eq->spellid = emu->spell; + eq->spell_type = emu->spell_type; + eq->spell_refresh = emu->spell_refresh; + eq->classes = emu->classes; + eq->max_level = emu->max_level; + eq->last_id = emu->prev_id; + eq->next_id = emu->next_id; + eq->cost2 = emu->total_cost; + eq->grant_only = emu->grant_only; + eq->expendable_charges = emu->charges; + eq->aa_expansion = emu->expansion; + eq->special_category = emu->category; + eq->total_abilities = emu->total_effects; + + for(auto i = 0; i < eq->total_abilities; ++i) { + eq->abilities[i].skill_id = inapp->ReadUInt32(); + eq->abilities[i].base1 = inapp->ReadUInt32(); + eq->abilities[i].base2 = inapp->ReadUInt32(); + eq->abilities[i].slot = inapp->ReadUInt32(); } - FINISH_ENCODE(); + if(emu->total_prereqs > 0) { + eq->prereq_skill = inapp->ReadUInt32(); + eq->prereq_minpoints = inapp->ReadUInt32(); + } + + dest->FastQueuePacket(&outapp); + delete inapp; } ENCODE(OP_SendCharInfo) diff --git a/common/patches/sof.cpp b/common/patches/sof.cpp index 2d8ec8d3a..421903970 100644 --- a/common/patches/sof.cpp +++ b/common/patches/sof.cpp @@ -1520,56 +1520,56 @@ namespace SoF ENCODE(OP_SendAATable) { - ENCODE_LENGTH_ATLEAST(SendAA_Struct); + EQApplicationPacket *inapp = *p; + *p = nullptr; + AARankInfo_Struct *emu = (AARankInfo_Struct*)inapp->pBuffer; - SETUP_VAR_ENCODE(SendAA_Struct); - ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); + EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, sizeof(structs::SendAA_Struct) + emu->total_effects * sizeof(structs::AA_Ability)); + structs::SendAA_Struct *eq = (structs::SendAA_Struct*)outapp->pBuffer; - // Check clientver field to verify this AA should be sent for SoF - // clientver 1 is for all clients and 4 is for SoF - if (emu->clientver <= 4) - { - OUT(id); - eq->unknown004 = 1; - //eq->hotkey_sid = (emu->hotkey_sid==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->hotkey_sid2 = (emu->hotkey_sid2==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->title_sid = emu->id - emu->current_level + 1; - //eq->desc_sid = emu->id - emu->current_level + 1; - eq->hotkey_sid = (emu->hotkey_sid == 4294967295UL) ? 0 : (emu->sof_next_skill); - eq->hotkey_sid2 = (emu->hotkey_sid2 == 4294967295UL) ? 0 : (emu->sof_next_skill); - eq->title_sid = emu->sof_next_skill; - eq->desc_sid = emu->sof_next_skill; - OUT(class_type); - OUT(cost); - OUT(seq); - OUT(current_level); - OUT(prereq_skill); - OUT(prereq_minpoints); - eq->type = emu->sof_type; - OUT(spellid); - OUT(spell_type); - OUT(spell_refresh); - OUT(classes); - OUT(berserker); - //eq->max_level = emu->sof_max_level; - OUT(max_level); - OUT(last_id); - OUT(next_id); - OUT(cost2); - eq->aa_expansion = emu->aa_expansion; - eq->special_category = emu->special_category; - eq->expendable_charges = emu->special_category == 7 ? 1 : 0; // temp hack, this can actually be any number - OUT(total_abilities); - unsigned int r; - for (r = 0; r < emu->total_abilities; r++) { - OUT(abilities[r].skill_id); - OUT(abilities[r].base1); - OUT(abilities[r].base2); - OUT(abilities[r].slot); - } + inapp->SetReadPosition(sizeof(AARankInfo_Struct)); + outapp->SetWritePosition(sizeof(structs::SendAA_Struct)); + + eq->id = emu->id; + eq->unknown004 = 1; + eq->id = emu->id; + eq->hotkey_sid = emu->upper_hotkey_sid; + eq->hotkey_sid2 = emu->lower_hotkey_sid; + eq->desc_sid = emu->desc_sid; + eq->title_sid = emu->title_sid; + eq->class_type = emu->level_req; + eq->cost = emu->cost; + eq->seq = emu->seq; + eq->current_level = emu->current_level; + eq->type = emu->type; + eq->spellid = emu->spell; + eq->spell_type = emu->spell_type; + eq->spell_refresh = emu->spell_refresh; + eq->classes = emu->classes; + eq->max_level = emu->max_level; + eq->last_id = emu->prev_id; + eq->next_id = emu->next_id; + eq->cost2 = emu->total_cost; + eq->grant_only = emu->grant_only; + eq->expendable_charges = emu->charges; + eq->aa_expansion = emu->expansion; + eq->special_category = emu->category; + eq->total_abilities = emu->total_effects; + + for(auto i = 0; i < eq->total_abilities; ++i) { + eq->abilities[i].skill_id = inapp->ReadUInt32(); + eq->abilities[i].base1 = inapp->ReadUInt32(); + eq->abilities[i].base2 = inapp->ReadUInt32(); + eq->abilities[i].slot = inapp->ReadUInt32(); } - FINISH_ENCODE(); + if(emu->total_prereqs > 0) { + eq->prereq_skill = inapp->ReadUInt32(); + eq->prereq_minpoints = inapp->ReadUInt32(); + } + + dest->FastQueuePacket(&outapp); + delete inapp; } ENCODE(OP_SendCharInfo) @@ -1665,8 +1665,6 @@ namespace SoF emu_ptr += sizeof(CharacterSelectEntry_Struct); eq_ptr += sizeof(structs::CharacterSelectEntry_Struct); } - - FINISH_ENCODE(); } //hack hack hack diff --git a/common/patches/titanium.cpp b/common/patches/titanium.cpp index 2fda4038a..ec25aba61 100644 --- a/common/patches/titanium.cpp +++ b/common/patches/titanium.cpp @@ -1107,50 +1107,52 @@ namespace Titanium ENCODE(OP_SendAATable) { - ENCODE_LENGTH_ATLEAST(SendAA_Struct); + EQApplicationPacket *inapp = *p; + *p = nullptr; + AARankInfo_Struct *emu = (AARankInfo_Struct*)inapp->pBuffer; - SETUP_VAR_ENCODE(SendAA_Struct); - ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); + EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, sizeof(structs::SendAA_Struct) + emu->total_effects * sizeof(structs::AA_Ability)); + structs::SendAA_Struct *eq = (structs::SendAA_Struct*)outapp->pBuffer; - // Check clientver field to verify this AA should be sent for Titanium - // clientver 1 is for all clients and 3 is for Titanium - if (emu->clientver <= 3) - { - OUT(id); - eq->unknown004 = 1; - eq->hotkey_sid = (emu->hotkey_sid == 4294967295UL) ? 0 : (emu->id - emu->current_level + 1); - eq->hotkey_sid2 = (emu->hotkey_sid2 == 4294967295UL) ? 0 : (emu->id - emu->current_level + 1); - eq->title_sid = emu->id - emu->current_level + 1; - eq->desc_sid = emu->id - emu->current_level + 1; - OUT(class_type); - OUT(cost); - OUT(seq); - OUT(current_level); - OUT(prereq_skill); - OUT(prereq_minpoints); - OUT(type); - OUT(spellid); - OUT(spell_type); - OUT(spell_refresh); - OUT(classes); - OUT(berserker); - OUT(max_level); - OUT(last_id); - OUT(next_id); - OUT(cost2); - OUT(unknown80[0]); - OUT(unknown80[1]); - OUT(total_abilities); - unsigned int r; - for (r = 0; r < emu->total_abilities; r++) { - OUT(abilities[r].skill_id); - OUT(abilities[r].base1); - OUT(abilities[r].base2); - OUT(abilities[r].slot); - } + inapp->SetReadPosition(sizeof(AARankInfo_Struct)); + outapp->SetWritePosition(sizeof(structs::SendAA_Struct)); + + eq->id = emu->id; + eq->unknown004 = 1; + eq->id = emu->id; + eq->hotkey_sid = emu->upper_hotkey_sid; + eq->hotkey_sid2 = emu->lower_hotkey_sid; + eq->desc_sid = emu->desc_sid; + eq->title_sid = emu->title_sid; + eq->class_type = emu->level_req; + eq->cost = emu->cost; + eq->seq = emu->seq; + eq->current_level = emu->current_level; + eq->type = emu->type; + eq->spellid = emu->spell; + eq->spell_type = emu->spell_type; + eq->spell_refresh = emu->spell_refresh; + eq->classes = emu->classes; + eq->max_level = emu->max_level; + eq->last_id = emu->prev_id; + eq->next_id = emu->next_id; + eq->cost2 = emu->total_cost; + eq->total_abilities = emu->total_effects; + + for(auto i = 0; i < eq->total_abilities; ++i) { + eq->abilities[i].skill_id = inapp->ReadUInt32(); + eq->abilities[i].base1 = inapp->ReadUInt32(); + eq->abilities[i].base2 = inapp->ReadUInt32(); + eq->abilities[i].slot = inapp->ReadUInt32(); } - FINISH_ENCODE(); + if(emu->total_prereqs > 0) { + eq->prereq_skill = inapp->ReadUInt32(); + eq->prereq_minpoints = inapp->ReadUInt32(); + } + + dest->FastQueuePacket(&outapp); + delete inapp; } ENCODE(OP_SendCharInfo) diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index 5b879af9d..df6fa9615 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -2129,8 +2129,8 @@ namespace UF SETUP_DIRECT_ENCODE(AATable_Struct, structs::AATable_Struct); eq->aa_spent = emu->aa_spent; - eq->aa_assigned = emu->aa_spent; - eq->aa_spent3 = emu->aa_spent; + eq->aa_assigned = 0; + eq->aa_spent3 = 0; eq->unknown012 = 0; eq->unknown016 = 0; eq->unknown020 = 0; @@ -2195,7 +2195,6 @@ namespace UF eq->prereq_minpoints = inapp->ReadUInt32(); } - //Log.Out(Logs::General, Logs::Status, "%s", DumpPacketToString(outapp).c_str()); dest->FastQueuePacket(&outapp); delete inapp; } diff --git a/zone/aa.cpp b/zone/aa.cpp index 868c1f62c..d6be92fe7 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -930,121 +930,6 @@ bool Client::CheckAAEffect(aaEffectType type) { return(false); } -void Client::BuyAA(AA_Action* action) -{ - //Log.Out(Logs::Detail, Logs::AA, "Starting to buy AA %d", action->ability); - // - ////find the AA information from the database - //SendAA_Struct* aa2 = zone->FindAA(action->ability); - ////if(!aa2) { - //// //hunt for a lower level... - //// int i; - //// int a; - //// for(i=1;iability - i; - //// if(a <= 0) - //// break; - //// Log.Out(Logs::Detail, Logs::AA, "Could not find AA %d, trying potential parent %d", action->ability, a); - //// aa2 = zone->FindAA(a); - //// if(aa2 != nullptr) - //// break; - //// } - ////} - //if(aa2 == nullptr) - // return; //invalid ability... - // - //if(aa2->special_category == 1 || aa2->special_category == 2) - // return; // Not purchasable progression style AAs - // - //if(aa2->special_category == 8 && aa2->cost == 0) - // return; // Not purchasable racial AAs(set a cost to make them purchasable) - // - //uint32 cur_level = GetAA(aa2->id); - //if((aa2->id + cur_level) != action->ability) { //got invalid AA - // Log.Out(Logs::Detail, Logs::AA, "Unable to find or match AA %d (found %d + lvl %d)", action->ability, aa2->id, cur_level); - // return; - //} - // - //if(aa2->account_time_required) - //{ - // if((Timer::GetTimeSeconds() - account_creation) < aa2->account_time_required) - // { - // return; - // } - //} - // - //uint32 real_cost; - //uint8 req_level; - ////std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(action->ability); - //// - ////if(RequiredLevel != AARequiredLevelAndCost.end()) { - //// real_cost = RequiredLevel->second.Cost; - //// req_level = RequiredLevel->second.Level; - ////} - ////else { - //// real_cost = aa2->cost + (aa2->cost_inc * cur_level); - //// req_level = aa2->class_type + (aa2->level_inc * cur_level); - ////} - // - //if (req_level > GetLevel()) - // return; //Cheater trying to Buy AA... - // - //if (m_pp.aapoints >= real_cost && cur_level < aa2->max_level) { - // SetAA(aa2->id, cur_level + 1); - // - // Log.Out(Logs::Detail, Logs::AA, "Set AA %d to level %d", aa2->id, cur_level + 1); - // - // m_pp.aapoints -= real_cost; - // - // /* Do Player Profile rank calculations and set player profile */ - // SaveAA(); - // /* Save to Database to avoid having to write the whole AA array to the profile, only write changes*/ - // // database.SaveCharacterAA(this->CharacterID(), aa2->id, (cur_level + 1)); - // - // if ((RuleB(AA, Stacking) && (GetClientVersionBit() >= 4) && (aa2->hotkey_sid == 4294967295u)) - // && ((aa2->max_level == (cur_level + 1)) && aa2->sof_next_id)){ - // SendAA(aa2->id); - // SendAA(aa2->sof_next_id); - // } - // else - // SendAA(aa2->id); - // - // SendAATable(); - // - // /* - // We are building these messages ourself instead of using the stringID to work around patch discrepencies - // these are AA_GAIN_ABILITY (410) & AA_IMPROVE (411), respectively, in both Titanium & SoF. not sure about 6.2 - // */ - // - // /* Initial purchase of an AA ability */ - // if (cur_level < 1){ - // Message(15, "You have gained the ability \"%s\" at a cost of %d ability %s.", aa2->name, real_cost, (real_cost>1) ? "points" : "point"); - // - // /* QS: Player_Log_AA_Purchases */ - // if (RuleB(QueryServ, PlayerLogAAPurchases)){ - // std::string event_desc = StringFormat("Initial AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); - // QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); - // } - // } - // /* Ranked purchase of an AA ability */ - // else{ - // Message(15, "You have improved %s %d at a cost of %d ability %s.", aa2->name, cur_level + 1, real_cost, (real_cost > 1) ? "points" : "point"); - // - // /* QS: Player_Log_AA_Purchases */ - // if (RuleB(QueryServ, PlayerLogAAPurchases)){ - // std::string event_desc = StringFormat("Ranked AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); - // QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); - // } - // } - // - // //SendAAStats(); - // - // CalcBonuses(); - // if(title_manager.IsNewAATitleAvailable(m_pp.aapoints_spent, GetBaseClass())) - // NotifyNewTitlesAvailable(); - //} -} - void Client::SendAATimer(uint32 ability, uint32 begin, uint32 end) { EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAAction,sizeof(UseAA_Struct)); UseAA_Struct* uaaout = (UseAA_Struct*)outapp->pBuffer; @@ -1078,235 +963,6 @@ void Client::SendAATimers() { safe_delete(outapp); } -void Client::SendPreviousAA(uint32 id, int seq){ -} - -void Client::SendAA(uint32 id, int seq) { - //Log.Out(Logs::General, Logs::Status, "SendAA(%u, %i)", id, seq); - // - //uint32 value=0; - //SendAA_Struct* saa2 = nullptr; - //SendAA_Struct* qaa = nullptr; - //SendAA_Struct* saa_pp = nullptr; - //bool IsBaseLevel = true; - //bool aa_stack = false; - // - //if(id==0) - // saa2 = zone->GetAABySequence(seq); - //else - // saa2 = zone->FindAA(id); - //if(!saa2) - // return; - // - //uint16 classes = saa2->classes; - //if(!(classes & (1 << GetClass())) && (GetClass()!=BERSERKER || saa2->berserker==0)){ - // return; - //} - // - //if(saa2->account_time_required) - //{ - // if((Timer::GetTimeSeconds() - account_creation) < saa2->account_time_required) - // { - // return; - // } - //} - // - //// Hide Quest/Progression AAs unless player has been granted the first level using $client->IncrementAA(skill_id). - //if (saa2->special_category == 1 || saa2->special_category == 2 ) { - // if(GetAA(saa2->id) == 0) - // return; - // // For Quest line AA(demiplane AEs) where only 1 is visible at a time, check to make sure only the highest level obtained is shown - // if(saa2->aa_expansion > 0) { - // qaa = zone->FindAA(saa2->id+1); - // if(qaa && (saa2->aa_expansion == qaa->aa_expansion) && GetAA(qaa->id) > 0) - // return; - // } - //} - -/* Beginning of Shroud AAs, these categories are for Passive and Active Shroud AAs - Eventually with a toggle we could have it show player list or shroud list - if (saa2->special_category == 3 || saa2->special_category == 4) - return; -*/ - // Check for racial/Drakkin blood line AAs - //if (saa2->special_category == 8) - //{ - // uint32 client_race = this->GetBaseRace(); - // - // // Drakkin Bloodlines - // if (saa2->aa_expansion > 522) - // { - // if (client_race != 522) - // return; // Check for Drakkin Race - // - // int heritage = this->GetDrakkinHeritage() + 523; // 523 = Drakkin Race(522) + Bloodline - // - // if (heritage != saa2->aa_expansion) - // return; - // } - // // Racial AAs - // else if (client_race != saa2->aa_expansion) - // { - // return; - // } - //} - // - ///* - //AA stacking on SoF+ clients. - // - //Note: There were many ways to achieve this effect - The method used proved to be the most straight forward and consistent. - //Stacking does not currently work ideally for AA's that use hotkeys, therefore they will be excluded at this time. - // - //TODO: Problem with aa.hotkeys - When you reach max rank of an AA tier (ie 5/5), it automatically displays the next AA in - //the series and you can not transfer the hotkey to the next AA series. To the best of the my ability and through many - //different variations of coding I could not find an ideal solution to this issue. - // - //How stacking works: - //Utilizes two new fields: sof_next_id (which is the next id in the series), sof_current_level (ranks the AA's as the current level) - //1) If no AA's purchased only display the base levels of each AA series. - //2) When you purchase an AA and its rank is maxed it sends the packet for the completed AA, and the packet - //for the next aa in the series. The previous tier is removed from your window, and the new AA is displayed. - //3) When you zone/buy your player profile will be checked and determine what AA can be displayed base on what you have already. - //*/ - // - //if (RuleB(AA, Stacking) && (GetClientVersionBit() >= 4) && (saa2->hotkey_sid == 4294967295u)) - // aa_stack = true; - // - ////if (aa_stack){ - //// uint32 aa_AA = 0; - //// uint32 aa_value = 0; - //// for (int i = 0; i < MAX_PP_AA_ARRAY; i++) { - //// if (aa[i]) { - //// aa_AA = aa[i]->AA; - //// aa_value = aa[i]->value; - //// - //// if (aa_AA){ - //// - //// if (aa_value > 0) - //// aa_AA -= aa_value-1; - //// - //// saa_pp = zone->FindAA(aa_AA); - //// - //// if (saa_pp){ - //// - //// if (saa_pp->sof_next_skill == saa2->sof_next_skill){ - //// - //// if (saa_pp->id == saa2->id) - //// break; //You already have this in the player profile. - //// else if ((saa_pp->sof_current_level < saa2->sof_current_level) && (aa_value < saa_pp->max_level)) - //// return; //DISABLE DISPLAY HIGHER - You have not reached max level yet of your current AA. - //// else if ((saa_pp->sof_current_level < saa2->sof_current_level) && (aa_value == saa_pp->max_level) && (saa_pp->sof_next_id == saa2->id)) - //// IsBaseLevel = false; //ALLOW DISPLAY HIGHER - //// } - //// } - //// } - //// } - //// } - ////} - // - ////Hide higher tiers of multi tiered AA's if the base level is not fully purchased. - //if (aa_stack && IsBaseLevel && saa2->sof_current_level > 0) - // return; - // - //int size=sizeof(SendAA_Struct)+sizeof(AA_Ability)*saa2->total_abilities; - // - //if(size == 0) - // return; - // - //uchar* buffer = new uchar[size]; - //SendAA_Struct* saa=(SendAA_Struct*)buffer; - //memcpy(saa,saa2,size); - // - //if(saa->spellid==0) - // saa->spellid=0xFFFFFFFF; - // - //value=GetAA(saa->id); - //uint32 orig_val = value; - // - //if(value && saa->id){ - // - // if(value < saa->max_level){ - // saa->id+=value; - // saa->next_id=saa->id+1; - // value++; - // } - // - // else if (aa_stack && saa->sof_next_id){ - // saa->id+=value-1; - // saa->next_id=saa->sof_next_id; - // - // //Prevent removal of previous AA from window if next AA belongs to a higher client version. - // SendAA_Struct* saa_next = nullptr; - // saa_next = zone->FindAA(saa->sof_next_id); - // - // // this check should work as long as we continue to just add the clients and just increase - // // each number .... - // if (saa_next && static_cast(GetClientVersion()) < saa_next->clientver - 1) { - // saa->next_id=0xFFFFFFFF; - // } - // } - // - // else{ - // saa->id+=value-1; - // saa->next_id=0xFFFFFFFF; - // } - // - // uint32 current_level_mod = 0; - // if (aa_stack) - // current_level_mod = saa->sof_current_level; - // - // saa->last_id=saa->id-1; - // saa->current_level=value+(current_level_mod); - // saa->cost = saa2->cost + (saa2->cost_inc*(value-1)); - // saa->cost2 = 0; - // for(uint32 i = 0; i < value; i++) { - // saa->cost2 += saa2->cost + (saa2->cost_inc * i); - // } - // saa->class_type = saa2->class_type + (saa2->level_inc*(value-1)); - //} - // - //if (aa_stack){ - // - // if (saa->sof_current_level >= 1 && value == 0) - // saa->current_level = saa->sof_current_level+1; - // - // saa->max_level = saa->sof_max_level; - //} - // - ////database.FillAAEffects(saa); - // - ////if(value > 0) - ////{ - //// // AA_Action stores the base ID - //// const AA_DBAction *caa = &AA_Actions[saa->id - value + 1][value - 1]; - //// - //// if(caa && caa->reuse_time > 0) - //// saa->spell_refresh = CalcAAReuseTimer(caa); - ////} - // - ////You can now use the level_inc field in the altadv_vars table to accomplish this, though still needed - ////for special cases like LOH/HT due to inability to implement correct stacking of AA's that use hotkeys. - ////std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(saa->id); - //// - ////if(RequiredLevel != AARequiredLevelAndCost.end()) - ////{ - //// saa->class_type = RequiredLevel->second.Level; - //// saa->cost = RequiredLevel->second.Cost; - ////} - // - // - //EQApplicationPacket* outapp = new EQApplicationPacket(OP_SendAATable); - //outapp->size=size; - //outapp->pBuffer=(uchar*)saa; - // - //if(id==0 && value && (orig_val < saa->max_level)) //send previous AA only on zone in - // SendPreviousAA(id, seq); - // - //QueuePacket(outapp); - //safe_delete(outapp); - ////will outapp delete the buffer for us even though it didnt make it? --- Yes, it should -} - void Client::ResetAA(){ // RefundAA(); // uint32 i; @@ -1657,25 +1313,6 @@ void Client::RefundAA() { // } } -void Client::IncrementAA(int aa_id) { - //SendAA_Struct* aa2 = zone->FindAA(aa_id); - // - //if(aa2 == nullptr) - // return; - // - //if(GetAA(aa_id) == aa2->max_level) - // return; - // - //SetAA(aa_id, GetAA(aa_id) + 1); - // - //SaveAA(); - // - //SendAA(aa_id); - //SendAATable(); - //SendAAStats(); - //CalcBonuses(); -} - AA_SwarmPetInfo::AA_SwarmPetInfo() { target = 0; @@ -1753,7 +1390,12 @@ void Client::SendAlternateAdvancementRank(int aa_id, int level) { aai->current_level = level; aai->max_level = ability->GetMaxLevel(); aai->prev_id = rank->prev_id; - aai->next_id = rank->next_id; + + if(rank->next && !CanUseAlternateAdvancementRank(rank->next)) { + aai->next_id = -1; + } else { + aai->next_id = rank->next_id; + } aai->total_cost = rank->total_cost; aai->expansion = rank->expansion; aai->category = ability->category; @@ -1810,7 +1452,7 @@ void Client::SendAlternateAdvancementPoints() { } - aa2->aa_spent = GetAAPointsSpent(); + aa2->aa_spent = GetSpentAA(); QueuePacket(outapp); safe_delete(outapp); } @@ -1825,7 +1467,7 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { return; } - if(!CanPurchaseAlternateAdvancementRank(rank)) { + if(!CanPurchaseAlternateAdvancementRank(rank, true)) { return; } @@ -1877,6 +1519,67 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { NotifyNewTitlesAvailable(); } +void Client::IncrementAlternateAdvancementRank(int rank_id) { + AA::Rank *rank = zone->GetAlternateAdvancementRank(rank_id); + if(!rank) { + return; + } + + if(!rank->base_ability) { + return; + } + + if(!CanPurchaseAlternateAdvancementRank(rank, false)) { + return; + } + + if(rank->base_ability->charges > 0) { + SetAA(rank_id, rank->current_value, rank->base_ability->charges); + } + else { + SetAA(rank_id, rank->current_value, 0); + + //if not max then send next aa + if(rank->next) { + SendAlternateAdvancementRank(rank->base_ability->id, rank->next->current_value); + } + } + + SaveAA(); + + SendAlternateAdvancementPoints(); + SendAlternateAdvancementStats(); + + if(rank->prev) { + Message_StringID(15, AA_IMPROVE, + std::to_string(rank->title_sid).c_str(), + std::to_string(rank->prev->current_value).c_str(), + std::to_string(rank->cost).c_str(), + std::to_string(AA_POINTS).c_str()); + + //QS stuff broke with new aa, todo: fix later + /* QS: Player_Log_AA_Purchases */ + // if (RuleB(QueryServ, PlayerLogAAPurchases)){ + // std::string event_desc = StringFormat("Ranked AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); + // QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); + // } + } + else { + Message_StringID(15, AA_GAIN_ABILITY, + std::to_string(rank->title_sid).c_str(), + std::to_string(rank->cost).c_str(), + std::to_string(AA_POINTS).c_str()); + //QS stuff broke with new aa, todo: fix later + /* QS: Player_Log_AA_Purchases */ + // if (RuleB(QueryServ, PlayerLogAAPurchases)){ + // std::string event_desc = StringFormat("Initial AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); + // QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); + // } + } + + CalcBonuses(); +} + bool ZoneDatabase::LoadAlternateAdvancement(Client *c) { c->ClearAAs(); std::string query = StringFormat( @@ -1984,6 +1687,16 @@ bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) { return false; } + //the one titanium hack i will allow + //just to make sure we dont crash the client with newer aas + //we'll exclude any expendable ones + if(IsClient() && CastToClient()->GetClientVersionBit() & BIT_TitaniumAndEarlier) { + if(ability->charges > 0) { + return false; + } + } + + //I might add a races behind the scenes field to take care of this // Check for racial/Drakkin blood line AAs if(ability->category == 8) { @@ -2009,7 +1722,7 @@ bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) { return true; } -bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank) { +bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price) { AA::Ability *ability = rank->base_ability; if(!ability) @@ -2063,7 +1776,7 @@ bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank) { } //check price, if client - if(IsClient()) { + if(check_price && IsClient()) { if(rank->cost > CastToClient()->GetAAPoints()) { return false; } diff --git a/zone/client.h b/zone/client.h index bd2c5371d..082d86fdc 100644 --- a/zone/client.h +++ b/zone/client.h @@ -764,6 +764,7 @@ public: void SendAlternateAdvancementTable(); void SendAlternateAdvancementStats(); void PurchaseAlternateAdvancementRank(int rank_id); + void IncrementAlternateAdvancementRank(int rank_id); void SendAlternateAdvancementPoints(); void SetAAPoints(uint32 points) { m_pp.aapoints = points; SendAlternateAdvancementStats(); } @@ -774,9 +775,6 @@ public: //old AA Methods void ResetAA(); void SendClearAA(); - void SendAA(uint32 id, int seq=1); - void SendPreviousAA(uint32 id, int seq=1); - void BuyAA(AA_Action* action); //this function is used by some AA stuff void MemorizeSpell(uint32 slot,uint32 spellid,uint32 scribing); void SetAATitle(const char *Title); @@ -793,11 +791,9 @@ public: void DisableAAEffect(aaEffectType type); bool CheckAAEffect(aaEffectType type); void HandleAAAction(aaID activate); - inline uint32 GetAAPointsSpent() { return m_pp.aapoints_spent; } int16 CalcAAFocusEffect(focusType type, uint16 focus_spell, uint16 spell_id); int16 CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id); void RefundAA(); - void IncrementAA(int aa_id); int32 GetAAEffectDataBySlot(uint32 aa_ID, uint32 slot_id, bool GetEffect, bool GetBase1, bool GetBase2); int32 GetAAEffectid(uint32 aa_ID, uint32 slot_id) { return GetAAEffectDataBySlot(aa_ID, slot_id, true, false,false); } int32 GetAABase1(uint32 aa_ID, uint32 slot_id) { return GetAAEffectDataBySlot(aa_ID, slot_id, false, true,false); } diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index e7d3b61a7..2068a815c 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -8801,7 +8801,7 @@ void Client::Handle_OP_LFGuild(const EQApplicationPacket *app) pack->WriteUInt32(QSG_LFGuild_UpdatePlayerInfo); pack->WriteUInt32(GetBaseClass()); pack->WriteUInt32(GetLevel()); - pack->WriteUInt32(GetAAPointsSpent()); + pack->WriteUInt32(GetSpentAA()); pack->WriteString(pts->Comment); pack->WriteUInt32(pts->Toggle); pack->WriteUInt32(pts->TimeZone); diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 47607b705..37f379a06 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -1024,7 +1024,7 @@ void Lua_Client::AddLevelBasedExp(int exp_pct, int max_level) { void Lua_Client::IncrementAA(int aa) { Lua_Safe_Call_Void(); - self->IncrementAA(aa); + self->IncrementAlternateAdvancementRank(aa); } void Lua_Client::MarkSingleCompassLoc(float in_x, float in_y, float in_z) { diff --git a/zone/mob.h b/zone/mob.h index ce9fe3634..db3879257 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -961,7 +961,7 @@ public: bool SetAA(uint32 rank_id, uint32 new_value, uint32 charges = 0); void ClearAAs() { aa_ranks.clear(); } bool CanUseAlternateAdvancementRank(AA::Rank *rank); - bool CanPurchaseAlternateAdvancementRank(AA::Rank *ran); + bool CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price); protected: void CommonDamage(Mob* other, int32 &damage, const uint16 spell_id, const SkillUseTypes attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index d564a341e..95fc146ae 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -4916,7 +4916,7 @@ XS(XS_Client_IncrementAA) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - THIS->IncrementAA(aaskillid); + THIS->IncrementAlternateAdvancementRank(aaskillid); } XSRETURN_EMPTY; } diff --git a/zone/titles.cpp b/zone/titles.cpp index 3a4162060..8e6115aee 100644 --- a/zone/titles.cpp +++ b/zone/titles.cpp @@ -179,10 +179,10 @@ bool TitleManager::IsClientEligibleForTitle(Client *c, std::vector:: if((Title->Class >= 0) && (c->GetBaseClass() != Title->Class)) return false; - if((Title->MinAAPoints >= 0) && (c->GetAAPointsSpent() < static_cast(Title->MinAAPoints))) + if((Title->MinAAPoints >= 0) && (c->GetSpentAA() < static_cast(Title->MinAAPoints))) return false; - if((Title->MaxAAPoints >= 0) && (c->GetAAPointsSpent() > static_cast(Title->MaxAAPoints))) + if((Title->MaxAAPoints >= 0) && (c->GetSpentAA() > static_cast(Title->MaxAAPoints))) return false; if(Title->SkillID >= 0) From dd345c01de2be23d6dbd711d8e811776e2a5d833 Mon Sep 17 00:00:00 2001 From: KimLS Date: Thu, 11 Jun 2015 21:33:39 -0700 Subject: [PATCH 12/48] Activating AAs now works, don't have expend charges working quite yet so they can just be cast over and over. --- common/eq_packet_structs.h | 2 +- common/patches/rof.cpp | 2 +- common/patches/rof2.cpp | 2 +- common/patches/rof2_structs.h | 2 +- common/patches/rof_structs.h | 2 +- common/patches/sod_structs.h | 2 +- common/patches/sof_structs.h | 2 +- common/patches/titanium_structs.h | 2 +- common/patches/uf.cpp | 2 +- common/patches/uf_structs.h | 2 +- common/spdat.h | 2 +- zone/aa.cpp | 233 ++++++++++++++++++++---------- zone/client.cpp | 2 +- zone/client.h | 6 +- zone/client_packet.cpp | 8 +- zone/mob.h | 1 + zone/spells.cpp | 5 +- 17 files changed, 176 insertions(+), 101 deletions(-) diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index e562a94e5..7b604fc47 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -4319,7 +4319,7 @@ struct SendAA_Struct { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; }; diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index 0596ee95b..e76f33bbe 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -2810,7 +2810,7 @@ namespace RoF eq->aa_spent = emu->aa_spent; // These fields may need to be correctly populated at some point - eq->aapoints_assigned = 0; + eq->aapoints_assigned = emu->aa_spent; eq->aa_spent_general = 0; eq->aa_spent_archetype = 0; eq->aa_spent_class = 0; diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index ba2099710..ec5752f79 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -2900,7 +2900,7 @@ namespace RoF2 eq->aa_spent = emu->aa_spent; // These fields may need to be correctly populated at some point - eq->aapoints_assigned = 0; + eq->aapoints_assigned = emu->aa_spent; eq->aa_spent_general = 0; eq->aa_spent_archetype = 0; eq->aa_spent_class = 0; diff --git a/common/patches/rof2_structs.h b/common/patches/rof2_structs.h index 812e9c464..bc49fe88f 100644 --- a/common/patches/rof2_structs.h +++ b/common/patches/rof2_structs.h @@ -4289,7 +4289,7 @@ struct AA_List { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; /*16*/ }; diff --git a/common/patches/rof_structs.h b/common/patches/rof_structs.h index a87b530c4..eb7c6edfb 100644 --- a/common/patches/rof_structs.h +++ b/common/patches/rof_structs.h @@ -4288,7 +4288,7 @@ struct AA_List { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; /*16*/ }; diff --git a/common/patches/sod_structs.h b/common/patches/sod_structs.h index 2f5d2c2db..6e1a77b6b 100644 --- a/common/patches/sod_structs.h +++ b/common/patches/sod_structs.h @@ -3840,7 +3840,7 @@ struct AA_List { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; }; diff --git a/common/patches/sof_structs.h b/common/patches/sof_structs.h index afd34ba68..faa306ab0 100644 --- a/common/patches/sof_structs.h +++ b/common/patches/sof_structs.h @@ -3702,7 +3702,7 @@ struct AA_List { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; }; diff --git a/common/patches/titanium_structs.h b/common/patches/titanium_structs.h index f836395c9..e5fa44a8e 100644 --- a/common/patches/titanium_structs.h +++ b/common/patches/titanium_structs.h @@ -3175,7 +3175,7 @@ struct AA_List { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; }; diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index df6fa9615..ef224d574 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -2129,7 +2129,7 @@ namespace UF SETUP_DIRECT_ENCODE(AATable_Struct, structs::AATable_Struct); eq->aa_spent = emu->aa_spent; - eq->aa_assigned = 0; + eq->aa_assigned = emu->aa_spent; eq->aa_spent3 = 0; eq->unknown012 = 0; eq->unknown016 = 0; diff --git a/common/patches/uf_structs.h b/common/patches/uf_structs.h index 36d6dea74..882158492 100644 --- a/common/patches/uf_structs.h +++ b/common/patches/uf_structs.h @@ -3912,7 +3912,7 @@ struct AA_List { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; }; diff --git a/common/spdat.h b/common/spdat.h index bf2d23f30..bb71c1e88 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -417,7 +417,7 @@ typedef enum { #define SE_SongModCap 261 // implemented[AA] - Song Mod cap increase (no longer used on live) #define SE_RaiseStatCap 262 // implemented //#define SE_TradeSkillMastery 263 // not implemented - lets you raise more than one tradeskill above master. -//#define SE_HastenedAASkill 264 // not implemented as bonus - Use redux field in aa_actions table for this effect +#define SE_HastenedAASkill 264 // implemented #define SE_MasteryofPast 265 // implemented[AA] - Spells less than effect values level can not be fizzled #define SE_ExtraAttackChance 266 // implemented - increase chance to score an extra attack with a 2-Handed Weapon. #define SE_PetDiscipline2 267 // *not implemented - /pet focus, /pet no cast diff --git a/zone/aa.cpp b/zone/aa.cpp index d6be92fe7..368eda225 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -37,32 +37,6 @@ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net) extern QueryServ* QServ; -int Client::GetAATimerID(aaID activate) -{ - //SendAA_Struct* aa2 = zone->FindAA(activate); - // - //if(!aa2) - //{ - // for(int i = 1;i < MAX_AA_ACTION_RANKS; ++i) - // { - // int a = activate - i; - // - // if(a <= 0) - // break; - // - // aa2 = zone->FindAA(a); - // - // if(aa2 != nullptr) - // break; - // } - //} - // - //if(aa2) - // return aa2->spell_type; - - return 0; -} - int Client::CalcAAReuseTimer(const AA_DBAction *caa) { if(!caa) @@ -930,39 +904,6 @@ bool Client::CheckAAEffect(aaEffectType type) { return(false); } -void Client::SendAATimer(uint32 ability, uint32 begin, uint32 end) { - EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAAction,sizeof(UseAA_Struct)); - UseAA_Struct* uaaout = (UseAA_Struct*)outapp->pBuffer; - uaaout->ability = ability; - uaaout->begin = begin; - uaaout->end = end; - QueuePacket(outapp); - safe_delete(outapp); -} - -//sends all AA timers. -void Client::SendAATimers() { - //we dont use SendAATimer because theres no reason to allocate the EQApplicationPacket every time - EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAAction,sizeof(UseAA_Struct)); - UseAA_Struct* uaaout = (UseAA_Struct*)outapp->pBuffer; - - PTimerList::iterator c,e; - c = p_timers.begin(); - e = p_timers.end(); - for(; c != e; ++c) { - PersistentTimer *cur = c->second; - if(cur->GetType() < pTimerAAStart || cur->GetType() > pTimerAAEnd) - continue; //not an AA timer - //send timer - uaaout->begin = cur->GetStartTime(); - uaaout->end = static_cast(time(nullptr)); - uaaout->ability = cur->GetType() - pTimerAAStart; // uuaaout->ability is really a shared timer number - QueuePacket(outapp); - } - - safe_delete(outapp); -} - void Client::ResetAA(){ // RefundAA(); // uint32 i; @@ -1457,6 +1398,39 @@ void Client::SendAlternateAdvancementPoints() { safe_delete(outapp); } +void Client::SendAlternateAdvancementTimer(int ability, int begin, int end) { + EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAAction, sizeof(UseAA_Struct)); + UseAA_Struct* uaaout = (UseAA_Struct*)outapp->pBuffer; + uaaout->ability = ability; + uaaout->begin = begin; + uaaout->end = end; + QueuePacket(outapp); + safe_delete(outapp); +} + +//sends all AA timers. +void Client::SendAlternateAdvancementTimers() { + //we dont use SendAATimer because theres no reason to allocate the EQApplicationPacket every time + EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAAction, sizeof(UseAA_Struct)); + UseAA_Struct* uaaout = (UseAA_Struct*)outapp->pBuffer; + + PTimerList::iterator c, e; + c = p_timers.begin(); + e = p_timers.end(); + for(; c != e; ++c) { + PersistentTimer *cur = c->second; + if(cur->GetType() < pTimerAAStart || cur->GetType() > pTimerAAEnd) + continue; //not an AA timer + //send timer + uaaout->begin = cur->GetStartTime(); + uaaout->end = static_cast(time(nullptr)); + uaaout->ability = cur->GetType() - pTimerAAStart; // uuaaout->ability is really a shared timer number + QueuePacket(outapp); + } + + safe_delete(outapp); +} + void Client::PurchaseAlternateAdvancementRank(int rank_id) { AA::Rank *rank = zone->GetAlternateAdvancementRank(rank_id); if(!rank) { @@ -1495,23 +1469,21 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { std::to_string(rank->cost).c_str(), std::to_string(AA_POINTS).c_str()); - //QS stuff broke with new aa, todo: fix later /* QS: Player_Log_AA_Purchases */ - // if (RuleB(QueryServ, PlayerLogAAPurchases)){ - // std::string event_desc = StringFormat("Ranked AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); - // QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); - // } + if (RuleB(QueryServ, PlayerLogAAPurchases)){ + std::string event_desc = StringFormat("Ranked AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, rank->cost, GetZoneID(), GetInstanceID()); + QServ->PlayerLogEvent(Player_Log_AA_Purchases, CharacterID(), event_desc); + } } else { Message_StringID(15, AA_GAIN_ABILITY, std::to_string(rank->title_sid).c_str(), std::to_string(rank->cost).c_str(), std::to_string(AA_POINTS).c_str()); - //QS stuff broke with new aa, todo: fix later /* QS: Player_Log_AA_Purchases */ - // if (RuleB(QueryServ, PlayerLogAAPurchases)){ - // std::string event_desc = StringFormat("Initial AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); - // QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); - // } + if (RuleB(QueryServ, PlayerLogAAPurchases)){ + std::string event_desc = StringFormat("Initial AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, rank->cost, GetZoneID(), GetInstanceID()); + QServ->PlayerLogEvent(Player_Log_AA_Purchases, CharacterID(), event_desc); + } } CalcBonuses(); @@ -1557,29 +1529,132 @@ void Client::IncrementAlternateAdvancementRank(int rank_id) { std::to_string(rank->cost).c_str(), std::to_string(AA_POINTS).c_str()); - //QS stuff broke with new aa, todo: fix later /* QS: Player_Log_AA_Purchases */ - // if (RuleB(QueryServ, PlayerLogAAPurchases)){ - // std::string event_desc = StringFormat("Ranked AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); - // QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); - // } + if (RuleB(QueryServ, PlayerLogAAPurchases)){ + std::string event_desc = StringFormat("Ranked AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, rank->cost, GetZoneID(), GetInstanceID()); + QServ->PlayerLogEvent(Player_Log_AA_Purchases, CharacterID(), event_desc); + } } else { Message_StringID(15, AA_GAIN_ABILITY, std::to_string(rank->title_sid).c_str(), std::to_string(rank->cost).c_str(), std::to_string(AA_POINTS).c_str()); - //QS stuff broke with new aa, todo: fix later + /* QS: Player_Log_AA_Purchases */ - // if (RuleB(QueryServ, PlayerLogAAPurchases)){ - // std::string event_desc = StringFormat("Initial AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); - // QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); - // } + if (RuleB(QueryServ, PlayerLogAAPurchases)){ + std::string event_desc = StringFormat("Initial AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, rank->cost, GetZoneID(), GetInstanceID()); + QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); + } } CalcBonuses(); } +void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) { + AA::Rank *rank = zone->GetAlternateAdvancementRank(rank_id); + if(!rank) { + return; + } + + AA::Ability *ability = rank->base_ability; + if(!ability) { + return; + } + + if(!IsValidSpell(rank->spell)) { + return; + } + + if(!CanUseAlternateAdvancementRank(rank)) { + return; + } + + //make sure it's activateable type + if(!(ability->type == 3 || ability->type == 4)) { + return; + } + + //check cooldown + if(!p_timers.Expired(&database, rank->spell_type + pTimerAAStart)) { + uint32 aaremain = p_timers.GetRemainingTime(rank->spell_type + pTimerAAStart); + uint32 aaremain_hr = aaremain / (60 * 60); + uint32 aaremain_min = (aaremain / 60) % 60; + uint32 aaremain_sec = aaremain % 60; + + if(aaremain_hr >= 1) { + Message(13, "You can use this ability again in %u hour(s) %u minute(s) %u seconds", + aaremain_hr, aaremain_min, aaremain_sec); + } + else { + Message(13, "You can use this ability again in %u minute(s) %u seconds", + aaremain_min, aaremain_sec); + } + + return; + } + + //calculate cooldown + int cooldown = rank->recast_time - GetAlternateAdvancementCooldownReduction(rank); + if(cooldown < 0) { + cooldown = 0; + } + + // Bards can cast instant cast AAs while they are casting another song + if(spells[rank->spell].cast_time == 0 && GetClass() == BARD && IsBardSong(casting_spell_id)) { + if(!SpellFinished(rank->spell, entity_list.GetMob(target_id), 10, -1, -1, spells[rank->spell].ResistDiff, false)) { + //Reset on failed cast + SendAlternateAdvancementTimer(rank->spell_type, 0, -1); + Message_StringID(15, ABILITY_FAILED); + p_timers.Clear(&database, rank->spell_type + pTimerAAStart); + return; + } + } else { + if(!CastSpell(rank->spell, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, rank->spell_type + pTimerAAStart, cooldown, 1)) { + //Reset on failed cast + SendAlternateAdvancementTimer(rank->spell_type, 0, -1); + Message_StringID(15, ABILITY_FAILED); + p_timers.Clear(&database, rank->spell_type + pTimerAAStart); + return; + } + } + + if(cooldown > 0) { + SendAlternateAdvancementTimer(rank->spell_type, 0, 0); + } +} + +int Mob::GetAlternateAdvancementCooldownReduction(AA::Rank *rank_in) { + if(!rank_in) { + return 0; + } + + AA::Ability *ability_in = rank_in->base_ability; + if(!ability_in) { + return 0; + } + + for(auto &aa : aa_ranks) { + AA::Ability *ability = zone->GetAlternateAdvancementAbility(aa.first); + if(!ability) { + continue; + } + + AA::Rank *rank = ability->GetRankByPointsSpent(aa.second.first); + if(!rank) { + continue; + } + + for(auto &effect : rank->effects) { + if(effect.effect_id == SE_HastenedAASkill && effect.base2 == ability_in->id) { + return effect.base1; + } + } + } + + return 0; +} + bool ZoneDatabase::LoadAlternateAdvancement(Client *c) { c->ClearAAs(); std::string query = StringFormat( diff --git a/zone/client.cpp b/zone/client.cpp index f36609b9c..5ef3e84e5 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -456,7 +456,7 @@ void Client::SendZoneInPackets() } safe_delete(outapp); - SendAATimers(); + SendAlternateAdvancementTimers(); outapp = new EQApplicationPacket(OP_RaidUpdate, sizeof(ZoneInSendName_Struct)); ZoneInSendName_Struct* zonesendname = (ZoneInSendName_Struct*)outapp->pBuffer; diff --git a/zone/client.h b/zone/client.h index 082d86fdc..dd283596d 100644 --- a/zone/client.h +++ b/zone/client.h @@ -765,7 +765,10 @@ public: void SendAlternateAdvancementStats(); void PurchaseAlternateAdvancementRank(int rank_id); void IncrementAlternateAdvancementRank(int rank_id); + void ActivateAlternateAdvancementAbility(int rank_id, int target_id); void SendAlternateAdvancementPoints(); + void SendAlternateAdvancementTimer(int ability, int begin, int end); + void SendAlternateAdvancementTimers(); void SetAAPoints(uint32 points) { m_pp.aapoints = points; SendAlternateAdvancementStats(); } void AddAAPoints(uint32 points) { m_pp.aapoints += points; SendAlternateAdvancementStats(); } @@ -782,11 +785,8 @@ public: inline uint32 GetMaxAAXP(void) const { return max_AAXP; } inline uint32 GetAAXP() const { return m_pp.expAA; } void SendAATable(); - void SendAATimers(); - int GetAATimerID(aaID activate); int CalcAAReuseTimer(const AA_DBAction *caa); void ActivateAA(aaID activate); - void SendAATimer(uint32 ability, uint32 begin, uint32 end); void EnableAAEffect(aaEffectType type, uint32 duration = 0); void DisableAAEffect(aaEffectType type); bool CheckAAEffect(aaEffectType type); diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 2068a815c..b76c11d8c 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1082,7 +1082,7 @@ void Client::Handle_Connect_OP_ReqNewZone(const EQApplicationPacket *app) void Client::Handle_Connect_OP_SendAAStats(const EQApplicationPacket *app) { - SendAATimers(); + SendAlternateAdvancementTimers(); EQApplicationPacket* outapp = new EQApplicationPacket(OP_SendAAStats, 0); QueuePacket(outapp); safe_delete(outapp); @@ -1749,7 +1749,7 @@ void Client::Handle_OP_AAAction(const EQApplicationPacket *app) if (action->action == aaActionActivate) {//AA Hotkey Log.Out(Logs::Detail, Logs::AA, "Activating AA %d", action->ability); - //ActivateAlternateAdvancementAbility(action->ability); + ActivateAlternateAdvancementAbility(action->ability, action->target_id); } else if (action->action == aaActionBuy) { PurchaseAlternateAdvancementRank(action->ability); @@ -1773,7 +1773,7 @@ void Client::Handle_OP_AAAction(const EQApplicationPacket *app) SendAlternateAdvancementTable(); } else { - Log.Out(Logs::General, Logs::AA, "Unknown AA action : %u %u 0x%x %d", action->action, action->ability, action->unknown08, action->exp_value); + Log.Out(Logs::General, Logs::AA, "Unknown AA action : %u %u %u %d", action->action, action->ability, action->target_id, action->exp_value); } } @@ -3847,8 +3847,6 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app) return; } - m_TargetRing = glm::vec3(castspell->x_pos, castspell->y_pos, castspell->z_pos); - CastSpell(spell_to_cast, castspell->target_id, castspell->slot); } /* Spell Slot or Potion Belt Slot */ diff --git a/zone/mob.h b/zone/mob.h index db3879257..08c6cd482 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -962,6 +962,7 @@ public: void ClearAAs() { aa_ranks.clear(); } bool CanUseAlternateAdvancementRank(AA::Rank *rank); bool CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price); + int GetAlternateAdvancementCooldownReduction(AA::Rank *rank_in); protected: void CommonDamage(Mob* other, int32 &damage, const uint16 spell_id, const SkillUseTypes attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic); diff --git a/zone/spells.cpp b/zone/spells.cpp index 868180dff..4ef1337a7 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -817,8 +817,8 @@ void Mob::InterruptSpell(uint16 message, uint16 color, uint16 spellid) } if(casting_spell_type == 1 && IsClient()) { //Rest AA Timer on failed cast - CastToClient()->SendAATimer(casting_spell_timer - pTimerAAStart, 0, 0xFFFFFF); - CastToClient()->Message_StringID(15,ABILITY_FAILED); + CastToClient()->SendAlternateAdvancementTimer(casting_spell_timer - pTimerAAStart, 0, -1); + CastToClient()->Message_StringID(15, ABILITY_FAILED); CastToClient()->GetPTimers().Clear(&database, casting_spell_timer); } @@ -2276,6 +2276,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 { if(spell_id == casting_spell_id && casting_spell_timer != 0xFFFFFFFF) { + //aa new todo: aa expendable charges here CastToClient()->GetPTimers().Start(casting_spell_timer, casting_spell_timer_duration); Log.Out(Logs::Detail, Logs::Spells, "Spell %d: Setting custom reuse timer %d to %d", spell_id, casting_spell_timer, casting_spell_timer_duration); } From afaa9ee6c995dbad567477dac038816fd8fe4fae Mon Sep 17 00:00:00 2001 From: KimLS Date: Thu, 11 Jun 2015 23:08:17 -0700 Subject: [PATCH 13/48] Expendable aa work --- zone/aa.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++----- zone/bot.cpp | 9 ++++---- zone/bot.h | 5 +++-- zone/mob.cpp | 1 + zone/mob.h | 8 +++++-- zone/spells.cpp | 15 +++++++++---- 6 files changed, 77 insertions(+), 17 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 368eda225..20009d281 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1276,7 +1276,8 @@ Mob *AA_SwarmPetInfo::GetOwner() //New AA void Client::SendAlternateAdvancementTable() { for(auto &aa : zone->aa_abilities) { - auto ranks = GetAA(aa.second->first_rank_id); + uint32 charges = 0; + auto ranks = GetAA(aa.second->first_rank_id, &charges); if(ranks) { if(aa.second->GetMaxLevel() == ranks) { SendAlternateAdvancementRank(aa.first, ranks); @@ -1446,7 +1447,12 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { } if(rank->base_ability->charges > 0) { - SetAA(rank_id, rank->current_value, rank->base_ability->charges); + uint32 charges = 0; + GetAA(rank_id, &charges); + + if(charges == 0) { + SetAA(rank_id, rank->current_value, rank->base_ability->charges); + } } else { SetAA(rank_id, rank->current_value, 0); @@ -1570,11 +1576,21 @@ void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) { return; } - //make sure it's activateable type - if(!(ability->type == 3 || ability->type == 4)) { + //make sure it is not a passive + if(rank->effects.size() > 0) { return; } + //if expendable make sure we have charges + if(ability->charges > 0) { + uint32 charges = 0; + GetAA(rank_id, &charges); + + if(charges < 0) { + return; + } + } + //check cooldown if(!p_timers.Expired(&database, rank->spell_type + pTimerAAStart)) { uint32 aaremain = p_timers.GetRemainingTime(rank->spell_type + pTimerAAStart); @@ -1609,8 +1625,9 @@ void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) { p_timers.Clear(&database, rank->spell_type + pTimerAAStart); return; } + ExpendAlternateAdvancementCharge(ability->id); } else { - if(!CastSpell(rank->spell, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, rank->spell_type + pTimerAAStart, cooldown, 1)) { + if(!CastSpell(rank->spell, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, rank->spell_type + pTimerAAStart, cooldown, 1, nullptr, ability->id)) { //Reset on failed cast SendAlternateAdvancementTimer(rank->spell_type, 0, -1); Message_StringID(15, ABILITY_FAILED); @@ -1655,6 +1672,35 @@ int Mob::GetAlternateAdvancementCooldownReduction(AA::Rank *rank_in) { return 0; } +void Mob::ExpendAlternateAdvancementCharge(uint32 aa_id) { + for(auto &iter : aa_ranks) { + AA::Ability *ability = zone->GetAlternateAdvancementAbility(iter.first); + if(ability && aa_id == ability->id) { + if(iter.second.second > 0) { + iter.second.second -= 1; + + if(iter.second.second == 0) { + aa_ranks.erase(iter.first); + if(IsClient()) { + AA::Rank *r = ability->GetRankByPointsSpent(iter.second.first); + if(r) { + CastToClient()->GetEPP().expended_aa += r->cost; + } + } + } + + if(IsClient()) { + Client *c = CastToClient(); + c->SaveAA(); + c->SendAlternateAdvancementPoints(); + } + } + + return; + } + } +} + bool ZoneDatabase::LoadAlternateAdvancement(Client *c) { c->ClearAAs(); std::string query = StringFormat( diff --git a/zone/bot.cpp b/zone/bot.cpp index c6c0f6e7f..1d8c16f57 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -9078,7 +9078,8 @@ void Bot::DoBuffTic(const Buffs_Struct &buff, int slot, Mob* caster) { Mob::DoBuffTic(buff, slot, caster); } -bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, int16 *resist_adjust) { +bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, + uint32* oSpellWillFinish, uint32 item_slot, int16 *resist_adjust, uint32 aa_id) { bool Result = false; if(zone && !zone->IsSpellBlocked(spell_id, glm::vec3(GetPosition()))) { @@ -9143,7 +9144,7 @@ bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_t bardsong_timer.Disable(); } - Result = DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot); + Result = DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, aa_id); } return Result; @@ -9305,7 +9306,7 @@ bool Bot::DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_ce return Result; } -bool Bot::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot) { +bool Bot::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, uint32 aa_id) { bool Result = false; if(GetClass() == BARD) { @@ -9313,7 +9314,7 @@ bool Bot::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast cast_time = 0; } - Result = Mob::DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot); + Result = Mob::DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, aa_id); if(oSpellWillFinish) { const SPDat_Spell_Struct &spell = spells[spell_id]; diff --git a/zone/bot.h b/zone/bot.h index 1f1262ffc..4a88c5f18 100644 --- a/zone/bot.h +++ b/zone/bot.h @@ -314,11 +314,12 @@ public: virtual float GetAOERange(uint16 spell_id); virtual bool SpellEffect(Mob* caster, uint16 spell_id, float partial = 100); virtual void DoBuffTic(const Buffs_Struct &buff, int slot, Mob* caster = nullptr); - virtual bool CastSpell(uint16 spell_id, uint16 target_id, uint16 slot = USE_ITEM_SPELL_SLOT, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, int16 *resist_adjust = nullptr); + virtual bool CastSpell(uint16 spell_id, uint16 target_id, uint16 slot = USE_ITEM_SPELL_SLOT, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, + uint32 item_slot = 0xFFFFFFFF, int16 *resist_adjust = nullptr, uint32 aa_id = 0); virtual bool SpellOnTarget(uint16 spell_id, Mob* spelltar); virtual bool IsImmuneToSpell(uint16 spell_id, Mob *caster); virtual bool DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_center, CastAction_type &CastAction); - virtual bool DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot = USE_ITEM_SPELL_SLOT, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF); + virtual bool DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot = USE_ITEM_SPELL_SLOT, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, uint32 aa_id = 0); // Bot Action Command Methods bool MesmerizeTarget(Mob* target); diff --git a/zone/mob.cpp b/zone/mob.cpp index b107565bc..645b42325 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -309,6 +309,7 @@ Mob::Mob(const char* in_name, casting_spell_timer_duration = 0; casting_spell_type = 0; casting_spell_inventory_slot = 0; + casting_spell_aa_id = 0; target = 0; ActiveProjectileATK = false; diff --git a/zone/mob.h b/zone/mob.h index 08c6cd482..ed5d68c2c 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -222,10 +222,12 @@ public: virtual void SpellProcess(); virtual bool CastSpell(uint16 spell_id, uint16 target_id, uint16 slot = USE_ITEM_SPELL_SLOT, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, - uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, uint32 type = 0, int16 *resist_adjust = nullptr); + uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, uint32 type = 0, int16 *resist_adjust = nullptr, + uint32 aa_id = 0); virtual bool DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot = 10, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, - uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, uint32 type = 0, int16 resist_adjust = 0); + uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, uint32 type = 0, int16 resist_adjust = 0, + uint32 aa_id = 0); void CastedSpellFinished(uint16 spell_id, uint32 target_id, uint16 slot, uint16 mana_used, uint32 inventory_slot = 0xFFFFFFFF, int16 resist_adjust = 0); bool SpellFinished(uint16 spell_id, Mob *target, uint16 slot = 10, uint16 mana_used = 0, @@ -963,6 +965,7 @@ public: bool CanUseAlternateAdvancementRank(AA::Rank *rank); bool CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price); int GetAlternateAdvancementCooldownReduction(AA::Rank *rank_in); + void ExpendAlternateAdvancementCharge(uint32 aa_id); protected: void CommonDamage(Mob* other, int32 &damage, const uint16 spell_id, const SkillUseTypes attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic); @@ -1152,6 +1155,7 @@ protected: uint32 casting_spell_timer_duration; uint32 casting_spell_type; int16 casting_spell_resist_adjust; + uint32 casting_spell_aa_id; bool casting_spell_checks; uint16 bardsong; uint8 bardsong_slot; diff --git a/zone/spells.cpp b/zone/spells.cpp index 4ef1337a7..ea4d1068b 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -146,7 +146,8 @@ void NPC::SpellProcess() // to allow procs to work bool Mob::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, - uint32 timer, uint32 timer_duration, uint32 type, int16 *resist_adjust) + uint32 timer, uint32 timer_duration, uint32 type, int16 *resist_adjust, + uint32 aa_id) { Log.Out(Logs::Detail, Logs::Spells, "CastSpell called for spell %s (%d) on entity %d, slot %d, time %d, mana %d, from item slot %d", (IsValidSpell(spell_id))?spells[spell_id].name:"UNKNOWN SPELL", spell_id, target_id, slot, cast_time, mana_cost, (item_slot==0xFFFFFFFF)?999:item_slot); @@ -318,11 +319,11 @@ bool Mob::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, if(resist_adjust) { - return(DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, timer, timer_duration, type, *resist_adjust)); + return(DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, timer, timer_duration, type, *resist_adjust, aa_id)); } else { - return(DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, timer, timer_duration, type, spells[spell_id].ResistDiff)); + return(DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, timer, timer_duration, type, spells[spell_id].ResistDiff, aa_id)); } } @@ -337,7 +338,7 @@ bool Mob::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, bool Mob::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, uint32 timer, uint32 timer_duration, uint32 type, - int16 resist_adjust) + int16 resist_adjust, uint32 aa_id) { Mob* pMob = nullptr; int32 orgcasttime; @@ -361,6 +362,7 @@ bool Mob::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, casting_spell_timer = timer; casting_spell_timer_duration = timer_duration; } + casting_spell_aa_id = aa_id; casting_spell_type = type; SaveSpellLoc(); @@ -786,6 +788,7 @@ void Mob::ZeroCastingVars() casting_spell_type = 0; casting_spell_resist_adjust = 0; casting_spell_checks = false; + casting_spell_aa_id = 0; delaytimer = false; } @@ -2297,6 +2300,10 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 Log.Out(Logs::Detail, Logs::Spells, "Spell %d: Setting long reuse timer to %d s (orig %d)", spell_id, recast, spells[spell_id].recast_time); CastToClient()->GetPTimers().Start(pTimerSpellStart + spell_id, recast); } + + if(casting_spell_aa_id) { + ExpendAlternateAdvancementCharge(casting_spell_aa_id); + } } if(IsClient() && ((slot == USE_ITEM_SPELL_SLOT) || (slot == POTION_BELT_SPELL_SLOT) || (slot == TARGET_RING_SPELL_SLOT))) From e5d1e98793dce69f38945452883d7f9a1a3bb44d Mon Sep 17 00:00:00 2001 From: KimLS Date: Fri, 12 Jun 2015 02:56:51 -0700 Subject: [PATCH 14/48] Added deity and race checking to AAs, doubled over the sanity check code and found a mistake, added code to make boats move smoother after loading into oot 50 times and seeing it skip every time. --- zone/aa.cpp | 92 ++++++++++++++++++++++++++------------------- zone/aa_ability.cpp | 14 ++++--- zone/aa_ability.h | 7 +++- zone/mob.cpp | 4 ++ zone/waypoints.cpp | 4 +- 5 files changed, 72 insertions(+), 49 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 20009d281..fc1923506 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -23,7 +23,7 @@ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net) #include "../common/races.h" #include "../common/spdat.h" #include "../common/string_util.h" - +#include "../common/deity.h" #include "aa.h" #include "client.h" #include "corpse.h" @@ -1279,7 +1279,7 @@ void Client::SendAlternateAdvancementTable() { uint32 charges = 0; auto ranks = GetAA(aa.second->first_rank_id, &charges); if(ranks) { - if(aa.second->GetMaxLevel() == ranks) { + if(aa.second->GetMaxLevel(this) == ranks) { SendAlternateAdvancementRank(aa.first, ranks); } else { SendAlternateAdvancementRank(aa.first, ranks); @@ -1330,7 +1330,7 @@ void Client::SendAlternateAdvancementRank(int aa_id, int level) { aai->classes = ability->classes; aai->level_req = rank->level_req; aai->current_level = level; - aai->max_level = ability->GetMaxLevel(); + aai->max_level = ability->GetMaxLevel(this); aai->prev_id = rank->prev_id; if(rank->next && !CanUseAlternateAdvancementRank(rank->next)) { @@ -1450,9 +1450,11 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { uint32 charges = 0; GetAA(rank_id, &charges); - if(charges == 0) { - SetAA(rank_id, rank->current_value, rank->base_ability->charges); + if(charges > 0) { + return; } + + SetAA(rank_id, rank->current_value, rank->base_ability->charges); } else { SetAA(rank_id, rank->current_value, 0); @@ -1781,7 +1783,7 @@ bool Mob::SetAA(uint32 rank_id, uint32 new_value, uint32 charges) { return false; } - if(new_value > ability->GetMaxLevel()) { + if(new_value > ability->GetMaxLevel(this)) { return false; } @@ -1817,29 +1819,44 @@ bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) { } } - //I might add a races behind the scenes field to take care of this - // Check for racial/Drakkin blood line AAs - if(ability->category == 8) - { - uint32 client_race = GetBaseRace(); - - // Drakkin Bloodlines - if(rank->expansion > 522) - { - if(client_race != 522) - return false; - - int heritage = this->GetDrakkinHeritage() + 523; // 523 = Drakkin Race(522) + Bloodline - - if(heritage != rank->expansion) - return false; - } - else if(client_race != rank->expansion) - { - return false; - } + if(!(RuleI(World, ExpansionSettings) & (1 << rank->expansion))) { + return false; } + auto race = GetArrayRace(GetBaseRace()); + race = race > 16 ? 1 : race; + if(!(ability->races & (1 << (race - 1)))) { + return false; + } + + auto deity = ConvertDeityToBitDeity((DeityTypes)GetDeity()); + if(!(ability->deities & deity)) { + return false; + } + + // Check for racial/Drakkin blood line AAs + //Commented this out for now, will add a drakkin heritage field later + //if(ability->category == 8) + //{ + // uint32 client_race = GetBaseRace(); + // + // // Drakkin Bloodlines + // if(rank->expansion > 522) + // { + // if(client_race != 522) + // return false; + // + // int heritage = this->GetDrakkinHeritage() + 523; // 523 = Drakkin Race(522) + Bloodline + // + // if(heritage != rank->expansion) + // return false; + // } + // else if(client_race != rank->expansion) + // { + // return false; + // } + //} + return true; } @@ -1858,10 +1875,6 @@ bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price) return false; } - if(!(RuleI(World, ExpansionSettings) & (1 << rank->expansion))) { - return false; - } - //check level req if(rank->level_req > GetLevel()) { return false; @@ -1940,8 +1953,6 @@ void Zone::LoadAlternateAdvancement() { i++; current = current->next; } - - ability.second->GetMaxLevel(true); } Log.Out(Logs::General, Logs::Status, "Loaded Alternate Advancement Data"); @@ -1952,7 +1963,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_mapid = atoi(row[0]); ability->name = row[1]; ability->category = atoi(row[2]); - ability->classes = atoi(row[3]); - ability->type = atoi(row[4]); - ability->charges = atoi(row[5]); - ability->grant_only = atoi(row[6]) != 0 ? true : false; - ability->first_rank_id = atoi(row[7]); + //EQ client has classes left shifted by one bit for some odd reason + ability->classes = atoi(row[3]) << 1; + ability->races = atoi(row[4]); + ability->deities = atoi(row[5]); + ability->type = atoi(row[6]); + ability->charges = atoi(row[7]); + ability->grant_only = atoi(row[8]) != 0 ? true : false; + ability->first_rank_id = atoi(row[9]); ability->first = nullptr; abilities[ability->id] = std::unique_ptr(ability); diff --git a/zone/aa_ability.cpp b/zone/aa_ability.cpp index 8f9cb8da4..3612b00c7 100644 --- a/zone/aa_ability.cpp +++ b/zone/aa_ability.cpp @@ -18,6 +18,7 @@ #include "../common/global_define.h" #include "../common/types.h" +#include "masterentity.h" #include "aa_ability.h" AA::Rank *AA::Ability::GetMaxRank() { @@ -53,16 +54,17 @@ AA::Rank *AA::Ability::GetRankByPointsSpent(int current_level) { return current; } -int AA::Ability::GetMaxLevel(bool force_calc) { - if(!force_calc) - return max_level; - - max_level = 0; +int AA::Ability::GetMaxLevel(Mob *who) { + int max_level = 0; Rank *current = first; while(current) { + if(!who->CanUseAlternateAdvancementRank(current)) { + return max_level; + } + max_level++; current = current->next; } - + return max_level; } \ No newline at end of file diff --git a/zone/aa_ability.h b/zone/aa_ability.h index a31bc06e3..bd2b9e306 100644 --- a/zone/aa_ability.h +++ b/zone/aa_ability.h @@ -27,6 +27,8 @@ #include "aa_rank_prereqs.h" #include "aa_rank.h" +class Mob; + namespace AA { @@ -39,17 +41,18 @@ public: Rank *GetMaxRank(); Rank *GetRankByLevel(int level); Rank *GetRankByPointsSpent(int current_level); - int GetMaxLevel(bool force_calc = false); + int GetMaxLevel(Mob *who); int id; std::string name; int category; int classes; + int races; + int deities; bool grant_only; int type; int charges; int first_rank_id; - int max_level; Rank *first; }; diff --git a/zone/mob.cpp b/zone/mob.cpp index 645b42325..965007fcf 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -1143,6 +1143,10 @@ void Mob::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) else ns->spawn.flymode = flymode; + if(IsBoat()) { + ns->spawn.flymode = 1; + } + ns->spawn.lastName[0] = '\0'; strn0cpy(ns->spawn.lastName, lastname, sizeof(ns->spawn.lastName)); diff --git a/zone/waypoints.cpp b/zone/waypoints.cpp index 7570165a3..834109dd1 100644 --- a/zone/waypoints.cpp +++ b/zone/waypoints.cpp @@ -212,7 +212,7 @@ void NPC::UpdateWaypoint(int wp_index) Log.Out(Logs::Detail, Logs::AI, "Next waypoint %d: (%.3f, %.3f, %.3f, %.3f)", wp_index, m_CurrentWayPoint.x, m_CurrentWayPoint.y, m_CurrentWayPoint.z, m_CurrentWayPoint.w); //fix up pathing Z - if(zone->HasMap() && RuleB(Map, FixPathingZAtWaypoints)) + if(zone->HasMap() && RuleB(Map, FixPathingZAtWaypoints) && !IsBoat()) { if(!RuleB(Watermap, CheckForWaterAtWaypoints) || !zone->HasWaterMap() || @@ -521,7 +521,7 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, int speed, boo } bool send_update = false; - int compare_steps = IsBoat() ? 1 : 20; + int compare_steps = 20; if(tar_ndx < compare_steps && m_TargetLocation.x==x && m_TargetLocation.y==y) { float new_x = m_Position.x + m_TargetV.x*tar_vector; From 65ac9683a3035691ecdcdfb33cacd3285486a081 Mon Sep 17 00:00:00 2001 From: KimLS Date: Fri, 12 Jun 2015 13:39:20 -0700 Subject: [PATCH 15/48] Removed fluff code, added drakkin heritage and status can use modifiers to aa abilities --- zone/aa.cpp | 468 ++--------------------------------- zone/aa.h | 605 ---------------------------------------------- zone/aa_ability.h | 2 + zone/client.h | 3 - zone/command.cpp | 83 ------- zone/command.h | 2 - 6 files changed, 20 insertions(+), 1143 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index fc1923506..cf2fb0685 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -37,428 +37,6 @@ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net) extern QueryServ* QServ; -int Client::CalcAAReuseTimer(const AA_DBAction *caa) { - - if(!caa) - return 0; - - int ReuseTime = caa->reuse_time; - - if(ReuseTime > 0) - { - int ReductionPercentage; - - if(caa->redux_aa > 0 && caa->redux_aa < aaHighestID) - { - ReductionPercentage = GetAA(caa->redux_aa) * caa->redux_rate; - - if(caa->redux_aa2 > 0 && caa->redux_aa2 < aaHighestID) - ReductionPercentage += (GetAA(caa->redux_aa2) * caa->redux_rate2); - - ReuseTime = caa->reuse_time * (100 - ReductionPercentage) / 100; - } - - } - return ReuseTime; -} - -void Client::ActivateAA(aaID activate){ -// if(activate < 0 || activate >= aaHighestID) -// return; -// if(IsStunned() || IsFeared() || IsMezzed() || IsSilenced() || IsPet() || IsSitting() || GetFeigned()) -// return; -// -// int AATimerID = GetAATimerID(activate); -// -// SendAA_Struct* aa2 = nullptr; -// aaID aaid = activate; -// uint8 activate_val = GetAA(activate); -// //this wasn't taking into acct multi tiered act talents before... -// if(activate_val == 0){ -// aa2 = zone->FindAA(activate); -// if(!aa2){ -// int i; -// int a; -// for(i=1;iFindAA(a); -// if(aa2 != nullptr) -// break; -// } -// } -// if(aa2){ -// aaid = (aaID) aa2->id; -// activate_val = GetAA(aa2->id); -// } -// } -// -// if (activate_val == 0){ -// return; -// } -// -// if(aa2) -// { -// if(aa2->account_time_required) -// { -// if((Timer::GetTimeSeconds() + account_creation) < aa2->account_time_required) -// { -// return; -// } -// } -// } -// -// if(!p_timers.Expired(&database, AATimerID + pTimerAAStart)) -// { -// uint32 aaremain = p_timers.GetRemainingTime(AATimerID + pTimerAAStart); -// uint32 aaremain_hr = aaremain / (60 * 60); -// uint32 aaremain_min = (aaremain / 60) % 60; -// uint32 aaremain_sec = aaremain % 60; -// -// if(aa2) { -// if (aaremain_hr >= 1) //1 hour or more -// Message(13, "You can use the ability %s again in %u hour(s) %u minute(s) %u seconds", -// aa2->name, aaremain_hr, aaremain_min, aaremain_sec); -// else //less than an hour -// Message(13, "You can use the ability %s again in %u minute(s) %u seconds", -// aa2->name, aaremain_min, aaremain_sec); -// } else { -// if (aaremain_hr >= 1) //1 hour or more -// Message(13, "You can use this ability again in %u hour(s) %u minute(s) %u seconds", -// aaremain_hr, aaremain_min, aaremain_sec); -// else //less than an hour -// Message(13, "You can use this ability again in %u minute(s) %u seconds", -// aaremain_min, aaremain_sec); -// } -// return; -// } -// -// if(activate_val > MAX_AA_ACTION_RANKS) -// activate_val = MAX_AA_ACTION_RANKS; -// activate_val--; //to get array index. -// -// //get our current node, now that the indices are well bounded -// const AA_DBAction *caa = &AA_Actions[aaid][activate_val]; -// -// if((aaid == aaImprovedHarmTouch || aaid == aaLeechTouch) && !p_timers.Expired(&database, pTimerHarmTouch)){ -// Message(13,"Ability recovery time not yet met."); -// return; -// } -// -// //everything should be configured out now -// -// uint16 target_id = 0; -// -// //figure out our target -// switch(caa->target) { -// case aaTargetUser: -// case aaTargetGroup: -// target_id = GetID(); -// break; -// case aaTargetCurrent: -// case aaTargetCurrentGroup: -// if(GetTarget() == nullptr) { -// Message_StringID(MT_DefaultText, AA_NO_TARGET); //You must first select a target for this ability! -// p_timers.Clear(&database, AATimerID + pTimerAAStart); -// return; -// } -// target_id = GetTarget()->GetID(); -// break; -// case aaTargetPet: -// if(GetPet() == nullptr) { -// Message(0, "A pet is required for this skill."); -// return; -// } -// target_id = GetPetID(); -// break; -// } -// -// //handle non-spell action -// if(caa->action != aaActionNone) { -// if(caa->mana_cost > 0) { -// if(GetMana() < caa->mana_cost) { -// Message_StringID(13, INSUFFICIENT_MANA); -// return; -// } -// SetMana(GetMana() - caa->mana_cost); -// } -// if(caa->reuse_time > 0) -// { -// uint32 timer_base = CalcAAReuseTimer(caa); -// if(activate == aaImprovedHarmTouch || activate == aaLeechTouch) -// { -// p_timers.Start(pTimerHarmTouch, HarmTouchReuseTime); -// } -// p_timers.Start(AATimerID + pTimerAAStart, timer_base); -// SendAATimer(AATimerID, 0, 0); -// } -// HandleAAAction(aaid); -// } -// -// //cast the spell, if we have one -// if(caa->spell_id > 0 && caa->spell_id < SPDAT_RECORDS) { -// -// if(caa->reuse_time > 0) -// { -// uint32 timer_base = CalcAAReuseTimer(caa); -// SendAATimer(AATimerID, 0, 0); -// p_timers.Start(AATimerID + pTimerAAStart, timer_base); -// if(activate == aaImprovedHarmTouch || activate == aaLeechTouch) -// { -// p_timers.Start(pTimerHarmTouch, HarmTouchReuseTime); -// } -// // Bards can cast instant cast AAs while they are casting another song -// if (spells[caa->spell_id].cast_time == 0 && GetClass() == BARD && IsBardSong(casting_spell_id)) { -// if(!SpellFinished(caa->spell_id, entity_list.GetMob(target_id), 10, -1, -1, spells[caa->spell_id].ResistDiff, false)) { -// //Reset on failed cast -// SendAATimer(AATimerID, 0, 0xFFFFFF); -// Message_StringID(15,ABILITY_FAILED); -// p_timers.Clear(&database, AATimerID + pTimerAAStart); -// return; -// } -// } else { -// if (!CastSpell(caa->spell_id, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, AATimerID + pTimerAAStart, timer_base, 1)) { -// //Reset on failed cast -// SendAATimer(AATimerID, 0, 0xFFFFFF); -// Message_StringID(15,ABILITY_FAILED); -// p_timers.Clear(&database, AATimerID + pTimerAAStart); -// return; -// } -// } -// } -// else -// { -// if(!CastSpell(caa->spell_id, target_id)) -// return; -// } -// } -// // Check if AA is expendable -// if (aas_send[activate - activate_val]->special_category == 7) { -// -// // Add the AA cost to the extended profile to track overall total -// m_epp.expended_aa += aas_send[activate]->cost; -// -// SetAA(activate, 0); -// -// SaveAA(); /* Save Character AA */ -// SendAA(activate); -// SendAATable(); -// } -} - -void Client::HandleAAAction(aaID activate) { -// if(activate < 0 || activate >= aaHighestID) -// return; -// -// uint8 activate_val = GetAA(activate); -// -// if (activate_val == 0) -// return; -// -// if(activate_val > MAX_AA_ACTION_RANKS) -// activate_val = MAX_AA_ACTION_RANKS; -// activate_val--; //to get array index. -// -// //get our current node, now that the indices are well bounded -// const AA_DBAction *caa = &AA_Actions[activate][activate_val]; -// -// uint16 timer_id = 0; -// uint16 timer_duration = caa->duration; -// aaTargetType target = aaTargetUser; -// -// uint16 spell_id = SPELL_UNKNOWN; //gets cast at the end if not still unknown -// -// switch(caa->action) { -// case aaActionAETaunt: -// entity_list.AETaunt(this); -// break; -// -// case aaActionFlamingArrows: -// //toggle it -// if(CheckAAEffect(aaEffectFlamingArrows)) -// EnableAAEffect(aaEffectFlamingArrows); -// else -// DisableAAEffect(aaEffectFlamingArrows); -// break; -// -// case aaActionFrostArrows: -// if(CheckAAEffect(aaEffectFrostArrows)) -// EnableAAEffect(aaEffectFrostArrows); -// else -// DisableAAEffect(aaEffectFrostArrows); -// break; -// -// case aaActionRampage: -// EnableAAEffect(aaEffectRampage, 10); -// break; -// -// case aaActionSharedHealth: -// if(CheckAAEffect(aaEffectSharedHealth)) -// EnableAAEffect(aaEffectSharedHealth); -// else -// DisableAAEffect(aaEffectSharedHealth); -// break; -// -// case aaActionCelestialRegen: { -// //special because spell_id depends on a different AA -// switch (GetAA(aaCelestialRenewal)) { -// case 1: -// spell_id = 3250; -// break; -// case 2: -// spell_id = 3251; -// break; -// default: -// spell_id = 2740; -// break; -// } -// target = aaTargetCurrent; -// break; -// } -// -// case aaActionDireCharm: { -// //special because spell_id depends on class -// switch (GetClass()) -// { -// case DRUID: -// spell_id = 2760; //2644? -// break; -// case NECROMANCER: -// spell_id = 2759; //2643? -// break; -// case ENCHANTER: -// spell_id = 2761; //2642? -// break; -// } -// target = aaTargetCurrent; -// break; -// } -// -// case aaActionImprovedFamiliar: { -// //Spell IDs might be wrong... -// if (GetAA(aaAllegiantFamiliar)) -// spell_id = 3264; //1994? -// else -// spell_id = 2758; //2155? -// break; -// } -// -// case aaActionActOfValor: -// if(GetTarget() != nullptr) { -// int curhp = GetTarget()->GetHP(); -// target = aaTargetCurrent; -// GetTarget()->HealDamage(curhp, this); -// Death(this, 0, SPELL_UNKNOWN, SkillHandtoHand); -// } -// break; -// -// case aaActionSuspendedMinion: -// if (GetPet()) { -// target = aaTargetPet; -// switch (GetAA(aaSuspendedMinion)) { -// case 1: -// spell_id = 3248; -// break; -// case 2: -// spell_id = 3249; -// break; -// } -// //do we really need to cast a spell? -// -// Message(0,"You call your pet to your side."); -// GetPet()->WipeHateList(); -// GetPet()->GMMove(GetX(),GetY(),GetZ()); -// if (activate_val > 1) -// entity_list.ClearFeignAggro(GetPet()); -// } else { -// Message(0,"You have no pet to call."); -// } -// break; -// -// case aaActionEscape: -// Escape(); -// break; -// -// // Don't think this code is used any longer for Bestial Alignment as the aa.has a spell_id and no nonspell_action. -// case aaActionBeastialAlignment: -// switch(GetBaseRace()) { -// case BARBARIAN: -// spell_id = AA_Choose3(activate_val, 4521, 4522, 4523); -// break; -// case TROLL: -// spell_id = AA_Choose3(activate_val, 4524, 4525, 4526); -// break; -// case OGRE: -// spell_id = AA_Choose3(activate_val, 4527, 4527, 4529); -// break; -// case IKSAR: -// spell_id = AA_Choose3(activate_val, 4530, 4531, 4532); -// break; -// case VAHSHIR: -// spell_id = AA_Choose3(activate_val, 4533, 4534, 4535); -// break; -// } -// -// case aaActionLeechTouch: -// target = aaTargetCurrent; -// spell_id = SPELL_HARM_TOUCH2; -// EnableAAEffect(aaEffectLeechTouch, 1000); -// break; -// -// case aaActionFadingMemories: -// // Do nothing since spell effect works correctly, but mana isn't used. -// break; -// -// default: -// Log.Out(Logs::General, Logs::Error, "Unknown AA nonspell action type %d", caa->action); -// return; -// } -// -// -// uint16 target_id = 0; -// //figure out our target -// switch(target) { -// case aaTargetUser: -// case aaTargetGroup: -// target_id = GetID(); -// break; -// case aaTargetCurrent: -// case aaTargetCurrentGroup: -// if(GetTarget() == nullptr) { -// Message_StringID(MT_DefaultText, AA_NO_TARGET); //You must first select a target for this ability! -// p_timers.Clear(&database, timer_id + pTimerAAEffectStart); -// return; -// } -// target_id = GetTarget()->GetID(); -// break; -// case aaTargetPet: -// if(GetPet() == nullptr) { -// Message(0, "A pet is required for this skill."); -// return; -// } -// target_id = GetPetID(); -// break; -// } -// -// //cast the spell, if we have one -// if(IsValidSpell(spell_id)) { -// int aatid = GetAATimerID(activate); -// if (!CastSpell(spell_id, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, pTimerAAStart + aatid, CalcAAReuseTimer(caa), 1)) { -// SendAATimer(aatid, 0, 0xFFFFFF); -// Message_StringID(15,ABILITY_FAILED); -// p_timers.Clear(&database, pTimerAAStart + aatid); -// return; -// } -// } -// -// //handle the duration timer if we have one. -// if(timer_id > 0 && timer_duration > 0) { -// p_timers.Start(pTimerAAEffectStart + timer_id, timer_duration); -// } -} - void Mob::TemporaryPets(uint16 spell_id, Mob *targ, const char *name_override, uint32 duration_override, bool followme, bool sticktarg) { //It might not be a bad idea to put these into the database, eventually.. @@ -1333,7 +911,7 @@ void Client::SendAlternateAdvancementRank(int aa_id, int level) { aai->max_level = ability->GetMaxLevel(this); aai->prev_id = rank->prev_id; - if(rank->next && !CanUseAlternateAdvancementRank(rank->next)) { + if(rank->next && !CanUseAlternateAdvancementRank(rank->next) || ability->charges > 0) { aai->next_id = -1; } else { aai->next_id = rank->next_id; @@ -1834,28 +1412,16 @@ bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) { return false; } - // Check for racial/Drakkin blood line AAs - //Commented this out for now, will add a drakkin heritage field later - //if(ability->category == 8) - //{ - // uint32 client_race = GetBaseRace(); - // - // // Drakkin Bloodlines - // if(rank->expansion > 522) - // { - // if(client_race != 522) - // return false; - // - // int heritage = this->GetDrakkinHeritage() + 523; // 523 = Drakkin Race(522) + Bloodline - // - // if(heritage != rank->expansion) - // return false; - // } - // else if(client_race != rank->expansion) - // { - // return false; - // } - //} + if(IsClient() && CastToClient()->Admin() < ability->status) { + return false; + } + + if(GetBaseRace() == 522) { + //drakkin_heritage + if(!(ability->drakkin_heritage & (1 << GetDrakkinHeritage()))) { + return false; + } + } return true; } @@ -1963,7 +1529,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_mapclasses = atoi(row[3]) << 1; ability->races = atoi(row[4]); ability->deities = atoi(row[5]); - ability->type = atoi(row[6]); - ability->charges = atoi(row[7]); - ability->grant_only = atoi(row[8]) != 0 ? true : false; - ability->first_rank_id = atoi(row[9]); + ability->drakkin_heritage = atoi(row[6]); + ability->status = atoi(row[7]); + ability->type = atoi(row[8]); + ability->charges = atoi(row[9]); + ability->grant_only = atoi(row[10]) != 0 ? true : false; + ability->first_rank_id = atoi(row[11]); ability->first = nullptr; abilities[ability->id] = std::unique_ptr(ability); diff --git a/zone/aa.h b/zone/aa.h index 54d495e6e..0ee32c99a 100644 --- a/zone/aa.h +++ b/zone/aa.h @@ -1,27 +1,8 @@ - #ifndef AA_H #define AA_H -struct AA_Ability; -struct SendAA_Struct; - - -#define MANA_BURN 664 - -#include - #define MAX_SWARM_PETS 12 //this can change as long as you make more coords (swarm_pet_x/swarm_pet_y) -//this might be missing some, and some might not be used... -typedef enum { //AA Targeting Constants - aaTargetUser = 1, - aaTargetCurrent = 2, //use current target - aaTargetGroup = 3, //target group of user - aaTargetCurrentGroup = 4, //target group of current target - aaTargetPet = 5 //target the user's pet -} aaTargetType; - - typedef enum { aaActionNone = 0, aaActionAETaunt = 1, @@ -133,571 +114,6 @@ static const uint8 LeadershipAACosts[_maxLeaderAA][MAX_LEADERSHIP_TIERS] = { { 0, 0, 0, 0, 0, 0 }, //raidAA15 }; -/* -typedef enum { //AA IDs - aaNone = 0, - aaInnateStrength = 2, //works - aaInnateStamina = 7, //works - aaInnateAgility = 12, //works - //aaCompleteHeal = 13,/ //not implemented, but is in dbstr_us.txt - aaInnateDexterity = 17, //works - aaInnateIntelligence = 22, //works - aaInnateWisdom = 27, //works - aaInnateCharisma = 32, //works - aaInnateFireProtection = 37, //works - aaInnateColdProtection = 42, //works - aaInnateMagicProtection = 47, //works - aaInnatePoisonProtection = 52, //works - aaInnateDiseaseProtection = 57, //works - aaInnateRunSpeed = 62, //works - aaInnateRegeneration = 65, //works - aaInnateMetabolism = 68, - aaInnateLungCapacity = 71, //handled by client - aaFirstAid = 74, //untested - aaHealingAdept = 77, //untested - aaHealingGift = 80, //untested - aaSpellCastingMastery = 83, //untested - aaSpellCastingReinforcement = 86, //untested - aaMentalClarity = 89, - aaSpellCastingFury = 92, //untested - aaChanellingFocus = 95, - aaSpellCastingSubtlety = 98, //untested - aaSpellCastingExpertise = 101, //untested - aaSpellCastingDeftness = 104, //untested - aaNaturalDurability = 107, //works - aaNaturalHealing = 110, //untested - aaCombatFury = 113, //untested - aaFearResistance = 116, //untested - aaFinishingBlow = 119, //untested - aaCombatStability = 122, - aaCombatAgility = 125, - aaMassGroupBuff = 128, //untested - aaDivineResurrection = 129, //DB - aaInnateInvisToUndead = 130, //DB - aaCelestialRegeneration = 131, //untested - aaBestowDivineAura = 132, //DB - aaTurnUndead = 133, //DB - aaPurifySoul = 136, //DB - aaQuickEvacuation = 137, //untested - aaExodus = 140, //untested - aaQuickDamage = 141, //untested - aaEnhancedRoot = 144, - aaDireCharm = 145, //untested - aaCannibalization = 146, //DB - aaQuickBuff = 147, //untested - aaAlchemyMastery = 150, - aaRabidBear = 153, //DB - aaManaBurn = 154, //DB - aaImprovedFamiliar = 155, //untested, implemented? - aaNexusGate = 156, //DB - aaUnknown54 = 157, - aaPermanentIllusion = 158, - aaJewelCraftMastery = 159, - aaGatherMana = 162, //DB - aaMendCompanion = 163, //DB - aaQuickSummoning = 164, //untested - aaFrenziedBurnout = 167, //DB - aaElementalFormFire = 168, //DB - aaElementalFormWater = 171, //DB - aaElementalFormEarth = 174, //DB - aaElementalFormAir = 177, //DB - aaImprovedReclaimEnergy = 180, //untested - aaTurnSummoned = 181, //DB - aaElementalPact = 182, //DB - aaLifeBurn = 183, //DB - aaDeadMesmerization = 184, //DB - aaFearstorm = 185, //DB - aaFleshToBone = 186, //DB - aaCallToCorpse = 187, //DB - aaDivineStun = 188, //DB - aaImprovedLayOnHands = 189, - aaSlayUndead = 190, - aaActOfValor = 193, //DB - aaHolySteed = 194, //DB - aaFearless = 195, - aa2HandBash = 196, //works. handled by client? - aaInnateCamouflage = 197, //DB - aaAmbidexterity = 198, //untested - aaArcheryMastery = 199, //untested - aaFletchingMastery = 202, //removed from db? - aaEndlessQuiver = 205, //untested - aaUnholySteed = 206, //DB - aaImprovedHarmTouch = 207, //untested - aaLeechTouch = 208, //DB - aaDeathPeace = 209, - aaSoulAbrasion = 210, //untested - aaInstrumentMastery = 213, //untested - aaUnknown91 = 216, //not used - aaUnknown92 = 219, //not used - aaUnknown93 = 222, //not used - aaJamFest = 225, - aaUnknown95 = 228, - aaSonicCall = 229, - aaCriticalMend = 230, //untested - aaPurifyBody = 233, //DB - aaChainCombo = 234, - aaRapidFeign = 237, //works - aaReturnKick = 240, - aaEscape = 243, //DB - aaPoisonMastery = 244, - aaDoubleRiposte = 247, //untested - aaQuickHide = 250, - aaQuickThrow = 253, //corrected from dbstr_us.txt - aaPurgePoison = 254, //DB - aaFlurry = 255, //untested - aaRampage = 258, //untested - aaAreaTaunt = 259, //untested - aaWarcry = 260, //DB - aaBandageWound = 263, //untested - aaSpellCastingReinforcementMastery = 266, //untested - aaSpellCastingFuryMastery = 267, //untested - aaExtendedNotes = 270, //untested - aaDragonPunch = 273, - aaStrongRoot = 274, //DB - aaSingingMastery = 275, //untested - aaBodyAndMindRejuvenation = 278, //added - aaPhysicalEnhancement = 279, //untested - aaAdvTrapNegotiation = 280, //untested - aaAcrobatics = 283, //untested - aaScribbleNotes = 286, - aaChaoticStab = 287, //untested - aaPetDiscipline = 288, //added - aaHobbleofSpirits = 289, //DB - aaFrenzyofSpirit = 290, //DB - aaParagonofSpirit = 291, //DB - aaAdvancedInnateStrength = 292, //works - aaAdvancedInnateStamina = 302, //works - aaAdvancedInnateAgility = 312, //works - aaAdvancedInnateDexterity = 322, //works - aaAdvancedInnateIntelligence = 332, //works - aaAdvancedInnateWisdom = 342, //works - aaAdvancedInnateCharisma = 352, //works - aaWardingofSolusek = 362, //works - aaBlessingofEci = 372, //works - aaMarrsProtection = 382, //works - aaShroudofTheFaceless = 392, //works - aaBertoxxulousGift = 402, //works - aaNewTanaanCraftingMastery = 412, - aaPlanarPower = 418, //untested - aaPlanarDurability = 423, //added - aaInnateEnlightenment = 426, //added - aaAdvancedSpellCastingMastery = 431,//untested - aaAdvancedHealingAdept = 434, //untested - aaAdvancedHealingGift = 437, //untested - aaCoupdeGrace = 440, //added - aaFuryoftheAges = 443, //added - aaMasteryofthePast = 446, //untested - aaLightningReflexes = 449, //added - aaInnateDefense = 454, //added - aaRadiantCure = 459, //DB - aaHastenedDivinity = 462, //DB - aaHastenedTurning = 465, //DB - aaHastenedPurificationofSoul = 468, //DB - aaHastenedGathering = 471, //DB - aaHastenedRabidity = 474, //DB - aaHastenedExodus = 477, //DB - aaHastenedRoot = 480, //DB - aaHastenedMending = 483, //DB - aaHastenedBanishment = 486, //DB - aaHastenedInstigation = 489, //DB, maybe - aaFuriousRampage = 492, //DB - aaHastenedPurificationoftheBody = 495,//DB - aaHastyExit = 498, //DB - aaHastenedPurification = 501, //DB - aaFlashofSteel = 504, - aaDivineArbitration = 507, //DB - aaWrathoftheWild = 510, //DB - aaVirulentParalysis = 513, //DB - aaHarvestofDruzzil = 516, //DB - aaEldritchRune = 517, //DB - aaServantofRo = 520, //DB - aaWaketheDead = 523, //DB - aaSuspendedMinion = 526, //untested - aaSpiritCall = 528, //DB - aaCelestialRenewal = 531, //DB - aaAllegiantFamiliar = 533, - aaHandofPiety = 534, //DB - aaMithanielsBinding = 537, //untested - aaMendingoftheTranquil = 539, - aaRagingFlurry = 542, - aaGuardianoftheForest = 545, //DB - aaSpiritoftheWood = 548, //DB - aaBestialFrenzy = 551, //untested - aaHarmoniousAttack = 556, //untested - aaKnightsAdvantage = 561, - aaFerocity = 564, - aaViscidRoots = 567, - aaSionachiesCrescendo = 568, //untested - aaAyonaesTutelage = 571, - aaFeignedMinion = 574, - aaUnfailingDivinity = 577, - aaAnimationEmpathy = 580, // Implemented - aaRushtoJudgement = 583, - aaLivingShield = 586, - aaConsumptionoftheSoul = 589, //untested - aaBoastfulBellow = 592, //DB - aaFervrentBlessing = 593, //untested - aaTouchoftheWicked = 596, //untested - aaPunishingBlade = 599, - aaSpeedoftheKnight = 602, - aaShroudofStealth = 605, - aaNimbleEvasion = 606, - aaTechniqueofMasterWu = 611, - aaHostoftheElements = 616, //DB - aaCallofXuzl = 619, //DB - aaHastenedStealth = 622, - aaIngenuity = 625, - aaFleetofFoot = 628, - aaFadingMemories = 630, - aaTacticalMastery = 631, - aaTheftofLife = 634, - aaFuryofMagic = 637, - aaFuryofMagicMastery2 = 640, //whats the difference? - aaProjectIllusion = 643, - aaHeadshot = 644, //added - aaEntrap = 645, //DB - aaUnholyTouch = 646, //untested - aaTotalDomination = 649, // Implemented - aaStalwartEndurance = 652, //implemented as bonus - aaQuickSummoning2 = 655, //whats the difference? - aaMentalClarity2 = 658, //whats the difference? - aaInnateRegeneration2 = 661, //whats the difference? - aaManaBurn2 = 664, //whats the difference? - aaExtendedNotes2 = 665, //not implemented - later expansions replaced Extended Notes with this. - aaSionachiesCrescendo2 = 668, //not implemented - later expansions replaced Sionachies Crescendo with this. - aaImprovedReclaimEnergy2 = 671, //whats the difference? untetsed - aaSwiftJourney = 672, //implemented as bonus - aaConvalescence = 674, //added 9/26/08 - aaLastingBreath = 676, //handled by client - aaPackrat = 678, //added 9/29/08 - aaHeightenedEndurance = 683, - aaWeaponAffinity = 686, //implemented - aaSecondaryForte = 691, - aaPersistantCasting = 692, - aaTuneofPursuance = 695, - aaImprovedInstrumentMastery = 700, - aaImprovedSingingMastery =701, - aaExultantBellowing = 702, - aaEchoofTaelosia = 707, - aaInternalMetronome = 710, //In 2006 this AA was removed. - aaPiousSupplication = 715, - aaBeastialAlignment = 718, //untested - aaWrathofXuzl = 721, - aaFeralSwipe = 723, //DB? - aaWardersFury = 724, - aaWardersAlacrity = 729, - aaPetAffinity = 734, // Implemented - aaMasteryofthePast2 = 735, //whats the difference? - aaSpellCastingSubtlety2 = 738, //whats the difference? - aaTouchoftheDivine = 741, - aaDivineAvatar = 746, //DB - aaExquisiteBenediction = 749, //DB - aaQuickenedCuring = 754, - aaNaturesBoon = 757, //DB - aaAdvancedTracking = 762, - aaCriticalAffliction = 767, - aaFuryofMagicMastery = 770, //whats the difference? - aaDoppelganger = 773, - aaEnchancedForgetfulness = 776, - aaMesmerizationMastery = 781, - aaQuickMassGroupBuff = 782, - aaSharedHealth = 785, - aaElementalFury = 790, - aaElementalAlacrity = 795, - aaElementalAgility = 800, - aaElementalDurability = 803, - aaSinisterStrikes = 806, - aaStrikethrough = 807, - aaStonewall = 810, - aaRapidStrikes = 815, - aaKickMastery = 820, - aaHightenedAwareness = 823, - aaDestructiveForce = 828, //DB - aaSwarmofDecay = 831, //DB - aaDeathsFury = 834, - aaQuickeningofDeath = 839, - aaAdvancedTheftofLife = 844, - aaTripleBackstab = 846, - aaHastenedPiety = 849, - aaImmobilizingBash = 852, - aaViciousSmash = 855, - aaRadiantCure2 = 860, //whats the difference? - aaPurification = 863, - aaPrecisionofthePathfinder = 864, - aaCoatofThistles = 867, - aaFlamingArrows = 872, //untested - aaFrostArrows = 875, //untested - aaSeizedOpportunity = 878, - aaTrapCircumvention = 881, - aaImprovedHastyExit = 886, - aaVirulentVenom = 888, - aaImprovedConsumptionofSoul = 893, - aaIntenseHatred = 895, - aaAdvancedSpiritCall = 900, - aaCalloftheAncients = 902, //DB - aaSturdiness = 907, - aaWarlordsTenacity = 912, //DB - aaStrengthenedStrike = 915, - aaExtendedShielding = 918, - aaRosFlamingFamiliar = 921, //DB - aaEcisIcyFamiliar = 922, //DB - aaDruzzilsMysticalFamiliar = 923, //DB - aaAdvancedFuryofMagicMastery = 924, //added 9/29/08 - aaWardofDestruction = 926, //DB - aaFrenziedDevastation = 931, //DB - aaCombatFury2 = 934, //whats the difference? - aaCombatFury3 = 937, //whats the difference? - aaCombatFury4 = 940, //whats the difference? - aaFuryoftheAges2 = 943, //whats the difference? - aaFuryoftheAges3 = 946, //whats the difference? - aaFuryoftheAges4 = 949, //whats the difference? - aaPlanarDurability2 = 952, //whats the difference? - aaInnateEnlightenment2 = 955, //whats the difference? - aaDireCharm2 = 960, //whats the difference? - aaDireCharm3 = 961, //whats the difference? - aaTouchoftheDivine2 = 962, //whats the difference? - aaTouchofDecay = 967, - aaCalloftheAncients2 = 970, //whats the difference? - aaImprovedVision = 975, - aaEternalBreath = 978, //handled by client - aaBlacksmithingMastery = 979, //added 9/29/08 - aaBakingMastery = 982, //added 9/29/08 - aaBrewingMastery = 985, //added 9/29/08 - aaFletchingMastery2 = 988, //added 9/29/08 - aaPotteryMastery = 991, //added 9/29/08 - aaTailoringMastery = 994, //added 9/29/08 - aaSalvage = 997, - aaOrigin = 1000, //spell - aaChaoticPotential = 1001, //added - aaDiscordantDefiance = 1006, //added 9/29/08 - aaTrialsofMataMuram = 1011, - aaMysticalAttuning = 1021, - aaDelayDeath = 1026, - aaHealthyAura = 1031, - aaFitness = 1036, - aaVeteransWrath = 1041, //added 9/29/08 - aaVeteransWrath2 = 1044, //whats the difference? - aaVeteransWrath3 = 1047, //whats the difference? - aaVeteransWrath4 = 1050, //whats the difference? - aaDeathblow = 1053, - aaReflexiveMastery = 1061, - aaDefensiveInstincts = 1066, - aaMnemonicRetention = 1071, //Implemented - aaExpansiveMind = 1072, //added 9/29/08 - aaSleightofHand = 1077, - aaSleightofHand2 = 1080, //whats the difference? - aaHealingAdeptMastery = 1083, - aaHealingGiftMastery = 1086, - aaArcaneTongues = 1089, - aaMasterofDisguise = 1092, - aaSlipperyAttacks = 1093, - aaImprovedCriticalAffliction = 1099, - aaFortifiedBellowing = 1102, - aaFuryofMagic2 = 1107, //whats the difference? - aaDanceofBlades = 1110, - aaShieldofNotes = 1116, - aaRoarofThunder = 1119, - aaPersistentMinion = 1122, - aaPerfectionofSpirit = 1123, - aaReplentishCompanion = 1126, - aaAdvancedPetDiscipline = 1129, - aaThrowingMastery = 1131, - aaBlurofAxes = 1134, - aaHastenedWarCry = 1137, - aaDeadAim = 1140, - aaFrenziedDefense = 1143, - aaTirelessSprint = 1146, - aaDesperation = 1149, - aaUntamedRage = 1150, - aaEchoingCries = 1155, - aaViciousFrenzy = 1158, - aaCrazedOnslaught = 1163, - aaOverwhelmingAttack = 1172, - aaFuriousRage = 1175, - aaBloodPact = 1178, - aaShieldingResistance = 1181, - aaHealingBoon = 1186, - aaResplendentCure = 1189, - aaCelestialHammer = 1192, - aaDivineRetribution = 1195, - aaCelestialRejuvination = 1203, - aaFerventBenediction = 1206, - aaSanctuary = 1209, - aaDestructiveFury = 1210, //added 9/29/08 - aaDestructiveFury2 = 1213, //whats the difference? - aaBoonoftheForest = 1222, - aaSpiritoftheGrove = 1225, - aaCalloftheWild = 1228, - aaSecondaryRecall = 1229, - aaNaturesBounty = 1230, - aaStasis = 1233, - aaColorShock = 1239, - aaMindOverMatter = 1242, - aaSoothingWords = 1245, - aaElementalSwarm = 1248, - aaHeartofFlames = 1251, - aaHeartofVapor = 1252, - aaHeartofIce = 1253, - aaHeartofStone = 1254, - aaImitateDeath = 1255, - aaCripplingStrike = 1256, - aaStunningKick = 1259, - aaEyeGouge = 1262, - aaIronKicks = 1265, - aaStyleoftheMimic = 1268, - aaDeathPeace2 = 1272, //whats the difference? - aaArmyoftheDead = 1274, - aaCelestialStun = 1277, - aaHandofDevotion = 1278, - aaSteadfastWill = 1284, - aaShieldBlock = 1287, - aaScoutsEfficiency = 1290, - aaGuardianoftheGlade = 1293, - aaTrackingMastery = 1296, - aaFlurryofKnives = 1301, - aaPrecision = 1304, - aaNervesofSteel = 1307, - aaTouchoftheCursed = 1313, - aaSpiritualCorrosion = 1316, - aaSoulThief = 1319, - aaSpiritualChanneling = 1323, - aaBoonoftheAncients = 1324, - aaAncestralAid = 1327, - aaResoluteDefiance = 1330, - aaPresstheAttack = 1333, - aaMindCrash = 1334, - aaProlongedDestruction = 1337, - aaRosGreaterFamiliar = 1340, - aaEcisGreaterFamiliar = 1341, - aaDruzzilsGreaterFamiliar = 1342, - aaTeleportBind = 1343, - aaDevotedFamiliar = 1344, - aaAuspiceoftheHunter = 1345, - aaSavageSpirit = 1348, - aaPresstheAttack2 = 1351, //whats the difference? - aaCripplingStrike2 = 1352, //whats the difference? - aaStunningKick2 = 1353, //whats the difference? - aaEyeGouge2 = 1358, //whats the difference? - - //Dragons of Norrath - //good info here: http://www.eqthieves.com/exp-don-progression.htm and here: http://everquest.allakhazam.com/db/guides.html?guide=811 - aaGiftoftheDarkReign = 1361, //from dbstr_us.txt - aaTenacityoftheDarkReign = 1362, //from dbstr_us.txt - aaEmbraceoftheDarkReign = 1363, //from dbstr_us.txt - aaPoweroftheDarkReign = 1364, //from dbstr_us.txt - aaFervoroftheDarkReign = 1365, //from dbstr_us.txt - aaGiftoftheKeepers = 1366, //from dbstr_us.txt - aaValoroftheKeepers = 1367, //from dbstr_us.txt - aaEmbraceoftheKeepers = 1368, //from dbstr_us.txt - aaPoweroftheKeepers = 1369, //from dbstr_us.txt - aaSanctityoftheKeepers = 1370, //from dbstr_us.txt - - //Veteran AAs - aaLessonoftheDevoted = 1371, //from dbstr_us.txt - aaInfusionoftheFaithful = 1372, //from dbstr_us.txt - aaChaoticJester = 1373, //from dbstr_us.txt - aaExpedientRecovery = 1374, //from dbstr_us.txt - aaSteadfastServant = 1375, //from dbstr_us.txt - aaStaunchRecovery = 1376, //from dbstr_us.txt - aaIntensityoftheResolute = 1377, //from dbstr_us.txt - - //Depths of Darkhollow - - //the following 5 look to be used as flags for completion of the Blood Raids for access to the Demiplane of Blood - //quest info here: http://everquest.allakhazam.com/db/quest.html?quest=3582 - //"You must also complete the five Blood Raids in any order: The Council of Nine, Emperor Draygun, Bloodeye, Matriarch Shyra, Sendaii, the Hive Queen" - //"The AA's you receive are: Curse of Blood (1/5), Affliction of Blood (2/5), Torment of Blood (3/5), Temptation of Blood (4/5), Invitation of Blood (5/5)." - aaCurseofBlood = 1378, //from dbstr_us.txt - aaAfflictionofBlood = 1379, //from dbstr_us.txt - aaTormentofBlood = 1380, //from dbstr_us.txt - aaTemptationofBlood = 1381, //from dbstr_us.txt - aaInvitationofBlood = 1382, //from dbstr_us.txt - - aaTurnUndead2 = 1383, //from dbstr_us.txt, Class AA changed in DoD - aaWrackUndead = 1386, //from dbstr_us.txt, PoP Class AA changed in DoD - aaEradicateUndead = 1387, //from dbstr_us.txt - aaInnateSeeInvis = 1388, //from dbstr_us.txt - aaProlongedMortality = 1389, //from dbstr_us.txt - aaPrecognition = 1394, //from dbstr_us.txt - aaThickSkin = 1399, //from dbstr_us.txt - aaSilentCasting = 1404, //from dbstr_us.txt - aaSilentCasting2 = 1409, //from dbstr_us.txt - aaHastenedMindCrash = 1414, //from dbstr_us.txt - aaFieldDressing = 1417, //from dbstr_us.txt - aaBandageWounds = 1420, //from dbstr_us.txt - aaCascadingRage = 1425, //from dbstr_us.txt - aaElementalFerocity = 1430, //from dbstr_us.txt - aaGiftofMana = 1435, //from dbstr_us.txt - aaRuneofShadows = 1440, //from dbstr_us.txt - aaChannelingMastery = 1445, //from dbstr_us.txt - aaConservation = 1453, //from dbstr_us.txt - aaCryofBattle = 1458, //from dbstr_us.txt - aaWardofPurity = 1459, //from dbstr_us.txt - aaTurnSummoned2 = 1462, //from dbstr_us.txt - aaWrackSummoned = 1465, //from dbstr_us.txt - aaEradicateSummoned = 1466, //from dbstr_us.txt - aaWardersSavagery = 1467, //from dbstr_us.txt - aaShackleofSpirits = 1470, //from dbstr_us.txt - aaHastenedThunder = 1471, //from dbstr_us.txt - aaTranslocationalAnchor = 1474, //from dbstr_us.txt - aaStealthyGetaway = 1477, //from dbstr_us.txt - aaPyromancy = 1478, //from dbstr_us.txt - aaMasteryofFury = 1483, //from dbstr_us.txt - aaAbundantHealing = 1486, //from dbstr_us.txt - aaGreaterAvatar = 1491, //from dbstr_us.txt - aaSharedCamouflage = 1494, //from dbstr_us.txt - aaConvergenceofSpirits = 1495, //from dbstr_us.txt - aaNaturesGuardian = 1498, //from dbstr_us.txt - aaEdictofCommand = 1501, //from dbstr_us.txt - aaExtendedBurnout = 1504, //from dbstr_us.txt - aaGuardianofRo = 1507, //from dbstr_us.txt - aaBloodMagic = 1510, //from dbstr_us.txt - aaGraverobbing = 1511, //from dbstr_us.txt - aaAfflictionMastery = 1514, //from dbstr_us.txt - aaGreaterRabidBear = 1517, //from dbstr_us.txt - aaAncestralGuard = 1520, //from dbstr_us.txt - aaCloakofLight = 1523, //from dbstr_us.txt - aaVanquishUndead = 1524, //from dbstr_us.txt - aaCloakofShadows = 1527, //from dbstr_us.txt - aaWillfulDeath = 1528, //from dbstr_us.txt - aaSwiftBlade = 1533, //from dbstr_us.txt - aaWickedBlade = 1536, //from dbstr_us.txt - aaForcedOpening = 1539, //from dbstr_us.txt - aaAppraisal = 1542, //from dbstr_us.txt - aaPreciseStrikes = 1543, //from dbstr_us.txt - aaHastenedDeath = 1546, //from dbstr_us.txt - aaUnflinchingResolve = 1549, //from dbstr_us.txt - aaWeightlessSteps = 1552, //from dbstr_us.txt - aaHastenedBlades = 1555, //from dbstr_us.txt - aaImprovedHarmoniousAttack = 1563, //from dbstr_us.txt - aaImprovedBestialFrenzy = 1566, //from dbstr_us.txt - aaSongofStone = 1569, //from dbstr_us.txt - aaDeepSleep = 1572, //from dbstr_us.txt - aaCompanionsGift = 1577, //from dbstr_us.txt - aaHastenedDefiance = 1583, //from dbstr_us.txt - aaDauntlessPerseverance = 1586, //from dbstr_us.txt - aaConcentration = 1587, //from dbstr_us.txt - aaEnhancedAggression = 1592, //from dbstr_us.txt - aaCallofChallenge = 1597, //from dbstr_us.txt - aaCacophony = 1598, //from dbstr_us.txt - aaImprovedHeadshot = 1601, //from dbstr_us.txt - aaAnatomy = 1604, //from dbstr_us.txt - aaFetterofSpirits = 1607, //from dbstr_us.txt - aaTrickShot = 1608, //from dbstr_us.txt - aaLightningStrikes = 1616, //from dbstr_us.txt - aaRelentlessAssault = 1621, //from dbstr_us.txt - aaKnightsExpertise = 1624, //from dbstr_us.txt - aaSelosEnduringCadence = 1627, //from dbstr_us.txt - aaHarmTouch = 7800, //from dbstr_us.txt - aaLayonHands = 7850, //from dbstr_us.txt - aaLayonHandsRank16 = 7866, - - aaHighestID //this should always be last, and should always - //follow the highest AA ID -} aaID; -*/ - - typedef enum { //AA IDs aaNone =0, aaInnateStrength =2,//implemented as bonus @@ -2109,21 +1525,6 @@ typedef enum { //AA IDs //follow the highest AA ID } aaID; - -//Structure representing the database's AA actions -struct AA_DBAction { - uint32 reuse_time; //in seconds - uint16 spell_id; //spell to cast, SPELL_UNKNOWN=no spell - aaTargetType target; //from aaTargetType - aaNonspellAction action; //non-spell action to take - uint16 mana_cost; //mana the NON-SPELL action costs - uint16 duration; //duration of NON-SPELL effect, 0=N/A - aaID redux_aa; //AA which reduces reuse time - int32 redux_rate; //%/point in redux_aa reduction in reuse time - aaID redux_aa2; //AA which reduces reuse time - int32 redux_rate2; //%/point in redux_aa reduction in reuse time -}; - //Structure representing the database's swarm pet configs struct AA_SwarmPet { uint8 count; //number to summon @@ -2131,12 +1532,6 @@ struct AA_SwarmPet { uint16 duration; //how long they last, in seconds }; -struct AALevelCost_Struct -{ - uint32 Level; - uint32 Cost; -}; - enum { //values of AA_Action.action aaActionActivate = 0, aaActionSetEXP = 1, diff --git a/zone/aa_ability.h b/zone/aa_ability.h index bd2b9e306..ba152fb06 100644 --- a/zone/aa_ability.h +++ b/zone/aa_ability.h @@ -49,6 +49,8 @@ public: int classes; int races; int deities; + int drakkin_heritage; + int status; bool grant_only; int type; int charges; diff --git a/zone/client.h b/zone/client.h index dd283596d..faa4eeb3a 100644 --- a/zone/client.h +++ b/zone/client.h @@ -784,9 +784,6 @@ public: void SetTitleSuffix(const char *txt); inline uint32 GetMaxAAXP(void) const { return max_AAXP; } inline uint32 GetAAXP() const { return m_pp.expAA; } - void SendAATable(); - int CalcAAReuseTimer(const AA_DBAction *caa); - void ActivateAA(aaID activate); void EnableAAEffect(aaEffectType type, uint32 duration = 0); void DisableAAEffect(aaEffectType type); bool CheckAAEffect(aaEffectType type); diff --git a/zone/command.cpp b/zone/command.cpp index 298022dc9..0554a5e68 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -167,7 +167,6 @@ int command_init(void) { command_add("aggro", "(range) [-v] - Display aggro information for all mobs 'range' distance from your target. -v is verbose faction info.", 80, command_aggro) || command_add("aggrozone", "[aggro] - Aggro every mob in the zone with X aggro. Default is 0. Not recommend if you're not invulnerable.", 100, command_aggrozone) || command_add("ai", "[factionid/spellslist/con/guard/roambox/stop/start] - Modify AI on NPC target", 100, command_ai) || - command_add("altactivate", "[argument] - activates alternate advancement abilities, use altactivate help for more information", 0, command_altactivate) || command_add("appearance", "[type] [value] - Send an appearance packet for you or your target", 150, command_appearance) || command_add("attack", "[targetname] - Make your NPC target attack targetname", 150, command_attack) || command_add("augmentitem", "Force augments an item. Must have the augment item window open.", 250, command_augmentitem) || @@ -273,7 +272,6 @@ int command_init(void) { command_add("los", nullptr,0, command_checklos) || command_add("makepet", "[level] [class] [race] [texture] - Make a pet", 50, command_makepet) || command_add("mana", "- Fill your or your target's mana", 50, command_mana) || - command_add("manaburn", "- Use AA Wizard class skill manaburn on target", 10, command_manaburn) || command_add("maxskills", "Maxes skills for you.", 200, command_max_all_skills) || command_add("memspell", "[slotid] [spellid] - Memorize spellid in the specified slot", 50, command_memspell) || command_add("merchant_close_shop", "Closes a merchant shop", 100, command_merchantcloseshop) || @@ -4848,36 +4846,6 @@ void command_zonestatus(Client *c, const Seperator *sep) } } -void command_manaburn(Client *c, const Seperator *sep) -{ - Mob* target=c->GetTarget(); - - if (c->GetTarget() == 0) - c->Message(0, "#Manaburn needs a target."); - else { - int cur_level=c->GetAA(MANA_BURN);//ManaBurn ID - if (DistanceSquared(c->GetPosition(), target->GetPosition()) > 200) - c->Message(0,"You are too far away from your target."); - else { - if(cur_level == 1) { - if(c->IsAttackAllowed(target)) - { - c->SetMana(0); - int nukedmg=(c->GetMana())*2; - if (nukedmg>0) - { - target->Damage(c, nukedmg, 2751, SkillAbjuration/*hackish*/); - c->Message(4,"You unleash an enormous blast of magical energies."); - } - Log.Out(Logs::General, Logs::Normal, "Manaburn request from %s, damage: %d", c->GetName(), nukedmg); - } - } - else - c->Message(0, "You have not learned this skill."); - } - } -} - void command_doanim(Client *c, const Seperator *sep) { if (!sep->IsNumber(1)) @@ -7684,57 +7652,6 @@ void command_reloadtitles(Client *c, const Seperator *sep) } -//old aa, probably to be removed -void command_altactivate(Client *c, const Seperator *sep){ -// if(sep->arg[1][0] == '\0'){ -// c->Message(10, "Invalid argument, usage:"); -// c->Message(10, "#altactivate list - lists the AA ID numbers that are available to you"); -// c->Message(10, "#altactivate time [argument] - returns the time left until you can use the AA with the ID that matches the argument."); -// c->Message(10, "#altactivate [argument] - activates the AA with the ID that matches the argument."); -// return; -// } -// if(!strcasecmp(sep->arg[1], "help")){ -// c->Message(10, "Usage:"); -// c->Message(10, "#altactivate list - lists the AA ID numbers that are available to you"); -// c->Message(10, "#altactivate time [argument] - returns the time left until you can use the AA with the ID that matches the argument."); -// c->Message(10, "#altactivate [argument] - activates the AA with the ID that matches the argument."); -// return; -// } -// if(!strcasecmp(sep->arg[1], "list")){ -// c->Message(10, "You have access to the following AA Abilities:"); -// int x, val; -// SendAA_Struct* saa = nullptr; -// for(x = 0; x < aaHighestID; x++){ -// if(AA_Actions[x][0].spell_id || AA_Actions[x][0].action){ //if there's an action or spell associated we assume it's a valid -// val = 0; //and assume if they don't have a value for the first rank then it isn't valid for any rank -// saa = nullptr; -// val = c->GetAA(x); -// if(val){ -// saa = zone->FindAA(x); -// c->Message(10, "%d: %s %d", x, saa->name, val); -// } -// } -// } -// } -// else if(!strcasecmp(sep->arg[1], "time")){ -// int ability = atoi(sep->arg[2]); -// if(c->GetAA(ability)){ -// int remain = c->GetPTimers().GetRemainingTime(pTimerAAStart + ability); -// if(remain) -// c->Message(10, "You may use that ability in %d minutes and %d seconds.", (remain/60), (remain%60)); -// else -// c->Message(10, "You may use that ability now."); -// } -// else{ -// c->Message(10, "You do not have access to that ability."); -// } -// } -// else -// { -// c->ActivateAA((aaID) atoi(sep->arg[1])); -// } -} - void command_traindisc(Client *c, const Seperator *sep) { uint8 max_level, min_level; diff --git a/zone/command.h b/zone/command.h index 0560b8eff..f44362ea7 100644 --- a/zone/command.h +++ b/zone/command.h @@ -216,7 +216,6 @@ void command_time(Client *c, const Seperator *sep); void command_guild(Client *c, const Seperator *sep); bool helper_guild_edit(Client *c, uint32 dbid, uint32 eqid, uint8 rank, const char* what, const char* value); void command_zonestatus(Client *c, const Seperator *sep); -void command_manaburn(Client *c, const Seperator *sep); void command_doanim(Client *c, const Seperator *sep); void command_randomfeatures(Client *c, const Seperator *sep); void command_face(Client *c, const Seperator *sep); @@ -276,7 +275,6 @@ void command_guildlist(Client *c, const Seperator *sep); void command_rules(Client *c, const Seperator *sep); void command_task(Client *c, const Seperator *sep); void command_reloadtitles(Client *c, const Seperator *sep); -void command_altactivate(Client *c, const Seperator *sep); void command_refundaa(Client *c, const Seperator *sep); void command_traindisc(Client *c, const Seperator *sep); void command_deletegraveyard(Client *c, const Seperator *sep); From ed11ee8bea0b5a60082cead55a6bf5ec3d44498d Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Fri, 12 Jun 2015 22:41:18 -0400 Subject: [PATCH 16/48] AA effects and focus should work Still need to verify all effects and implement currently unhandled --- common/spdat.h | 14 +- zone/attack.cpp | 7 + zone/bonuses.cpp | 1588 +++++++++++++++++++------------------- zone/bot.cpp | 6 +- zone/client.h | 4 +- zone/client_mods.cpp | 2 +- zone/common.h | 2 +- zone/mob.cpp | 8 +- zone/special_attacks.cpp | 32 +- zone/spell_effects.cpp | 1145 +++++++++++++-------------- 10 files changed, 1391 insertions(+), 1417 deletions(-) diff --git a/common/spdat.h b/common/spdat.h index bb71c1e88..ab128a37c 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -401,7 +401,7 @@ typedef enum { //#define SE_TrapCircumvention 245 // *not implemented[AA] - decreases the chance that you will set off a trap when opening a chest #define SE_SetBreathLevel 246 // *not implemented as bonus #define SE_RaiseSkillCap 247 // *not implemented[AA] - adds skill over the skill cap. -//#define SE_SecondaryForte 248 // not implemented as bonus(gives you a 2nd specialize skill that can go past 50 to 100) +#define SE_SecondaryForte 248 // not implemented as bonus(gives you a 2nd specialize skill that can go past 50 to 100) #define SE_SecondaryDmgInc 249 // implemented[AA] Allows off hand weapon to recieve a damage bonus (Sinister Strikes) #define SE_SpellProcChance 250 // implemented - Increase chance to proc from melee proc spells (ie Spirit of Panther) #define SE_ConsumeProjectile 251 // implemented[AA] - chance to not consume an arrow (ConsumeProjectile = 100) @@ -416,12 +416,12 @@ typedef enum { #define SE_AddSingingMod 260 // implemented[AA] - Instrument/Singing Mastery, base1 is the mod, base2 is the ItemType #define SE_SongModCap 261 // implemented[AA] - Song Mod cap increase (no longer used on live) #define SE_RaiseStatCap 262 // implemented -//#define SE_TradeSkillMastery 263 // not implemented - lets you raise more than one tradeskill above master. +#define SE_TradeSkillMastery 263 // not implemented - lets you raise more than one tradeskill above master. #define SE_HastenedAASkill 264 // implemented #define SE_MasteryofPast 265 // implemented[AA] - Spells less than effect values level can not be fizzled #define SE_ExtraAttackChance 266 // implemented - increase chance to score an extra attack with a 2-Handed Weapon. #define SE_PetDiscipline2 267 // *not implemented - /pet focus, /pet no cast -//#define SE_ReduceTradeskillFail 268 // *not implemented? - reduces chance to fail with given tradeskill by a percent chance +#define SE_ReduceTradeskillFail 268 // *not implemented? - reduces chance to fail with given tradeskill by a percent chance #define SE_MaxBindWound 269 // implemented[AA] - Increase max HP you can bind wound. #define SE_BardSongRange 270 // implemented[AA] - increase range of beneficial bard songs (Sionachie's Crescendo) #define SE_BaseMovementSpeed 271 // implemented[AA] - mods basemove speed, doesn't stack with other move mods @@ -441,7 +441,7 @@ typedef enum { //#define SE_NimbleEvasion 285 // *not implemented - base1 = 100 for max #define SE_FcDamageAmt 286 // implemented - adds direct spell damage #define SE_SpellDurationIncByTic 287 // implemented -#define SE_SpecialAttackKBProc 288 // implemented[AA] - Chance to to do a knockback from special attacks [AA Dragon Punch]. +#define SE_SkillAttackProc 288 // implemented[AA] - Chance to proc spell on skill attack usage (ex. Dragon Punch) #define SE_CastOnFadeEffect 289 // implemented - Triggers only if fades after natural duration. #define SE_IncreaseRunSpeedCap 290 // implemented[AA] - increases run speed over the hard cap #define SE_Purify 291 // implemented - Removes determental effects @@ -515,8 +515,8 @@ typedef enum { //#define SE_PassiveSenseTrap 359 // *not implemented - Invulnerability (Brell's Blessing) #define SE_ProcOnKillShot 360 // implemented - a buff that has a base1 % to cast spell base2 when you kill a "challenging foe" base3 min level #define SE_SpellOnDeath 361 // implemented - casts spell on death of buffed -//#define SE_PotionBeltSlots 362 // *not implemented[AA] 'Quick Draw' expands the potion belt by one additional available item slot per rank. -//#define SE_BandolierSlots 363 // *not implemented[AA] 'Battle Ready' expands the bandolier by one additional save slot per rank. +#define SE_PotionBeltSlots 362 // *not implemented[AA] 'Quick Draw' expands the potion belt by one additional available item slot per rank. +#define SE_BandolierSlots 363 // *not implemented[AA] 'Battle Ready' expands the bandolier by one additional save slot per rank. #define SE_TripleAttackChance 364 // implemented #define SE_ProcOnSpellKillShot 365 // implemented - chance to trigger a spell on kill when the kill is caused by a specific spell with this effect in it (10470 Venin) #define SE_ShieldEquipDmgMod 366 // implemented[AA] Damage modifier to melee if shield equiped. (base1 = dmg mod , base2 = ?) ie Shield Specialist AA @@ -525,7 +525,7 @@ typedef enum { #define SE_CorruptionCounter 369 // implemented #define SE_ResistCorruption 370 // implemented #define SE_AttackSpeed4 371 // implemented - stackable slow effect 'Inhibit Melee' -//#define SE_ForageSkill 372 // *not implemented[AA] Will increase the skill cap for those that have the Forage skill and grant the skill and raise the cap to those that do not. +#define SE_ForageSkill 372 // *not implemented[AA] Will increase the skill cap for those that have the Forage skill and grant the skill and raise the cap to those that do not. #define SE_CastOnFadeEffectAlways 373 // implemented - Triggers if fades after natural duration OR from rune/numhits fades. #define SE_ApplyEffect 374 // implemented #define SE_DotCritDmgIncrease 375 // implemented - Increase damage of DoT critical amount diff --git a/zone/attack.cpp b/zone/attack.cpp index 74cb33272..cecf37ff1 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -1372,6 +1372,13 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b /////////////////////////////////////////////////////////// ////// Send Attack Damage /////////////////////////////////////////////////////////// + if (damage > 0 && aabonuses.SkillAttackProc[0] && aabonuses.SkillAttackProc[1] == skillinuse && + IsValidSpell(aabonuses.SkillAttackProc[2])) { + float chance = aabonuses.SkillAttackProc[0] / 1000.0f; + if (zone->random.Roll(chance)) + SpellFinished(aabonuses.SkillAttackProc[2], other, 10, 0, -1, + spells[aabonuses.SkillAttackProc[2]].ResistDiff); + } other->Damage(this, damage, SPELL_UNKNOWN, skillinuse); if (IsDead()) return false; diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index 437befe11..23a896979 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -632,812 +632,814 @@ void Client::CalcEdibleBonuses(StatBonuses* newbon) { } } -void Client::CalcAABonuses(StatBonuses* newbon) { - memset(newbon, 0, sizeof(StatBonuses)); //start fresh +void Client::CalcAABonuses(StatBonuses *newbon) +{ + memset(newbon, 0, sizeof(StatBonuses)); // start fresh - int i; - uint32 slots = 0; - uint32 aa_AA = 0; - uint32 aa_value = 0; - //aa old - //if(this->aa) { - // for (i = 0; i < MAX_PP_AA_ARRAY; i++) { //iterate through all of the client's AAs - // if (this->aa[i]) { // make sure aa exists or we'll crash zone - // aa_AA = this->aa[i]->AA; //same as aaid from the aa_effects table - // aa_value = this->aa[i]->value; //how many points in it - // if (aa_AA > 0 || aa_value > 0) { //do we have the AA? if 1 of the 2 is set, we can assume we do - // //slots = database.GetTotalAALevels(aa_AA); //find out how many effects from aa_effects table - // slots = zone->GetTotalAALevels(aa_AA); //find out how many effects from aa_effects, which is loaded into memory - // if (slots > 0) //and does it have any effects? may be able to put this above, not sure if it runs on each iteration - // ApplyAABonuses(aa_AA, slots, newbon); //add the bonuses - // } - // } - // } - //} + for (const auto &aa : aa_ranks) { + auto ability = zone->GetAlternateAdvancementAbility(aa.first); + // zone doesn't know about this! bad data some where + if (!ability) + continue; + + auto rank = ability->GetRankByPointsSpent(aa.second.first); + // bad data or no effects + if (!rank || rank->effects.empty()) + continue; + + ApplyAABonuses(*rank, newbon); + } } - //A lot of the normal spell functions (IsBlankSpellEffect, etc) are set for just spells (in common/spdat.h). //For now, we'll just put them directly into the code and comment with the corresponding normal function //Maybe we'll fix it later? :-D -void Client::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon) +void Client::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) { - if(slots == 0) //sanity check. why bother if no slots to fill? + if (rank.effects.empty()) // sanity check. why bother if no slots to fill? return; - //from AA_Ability struct uint32 effect = 0; int32 base1 = 0; - int32 base2 = 0; //only really used for SE_RaiseStatCap & SE_ReduceSkillTimer in aa_effects table + int32 base2 = 0; // only really used for SE_RaiseStatCap & SE_ReduceSkillTimer in aa_effects table uint32 slot = 0; - //AA old - //std::map >::const_iterator find_iter = aa_effects.find(aaid); - //if(find_iter == aa_effects.end()) - //{ - // return; - //} - // - //for (std::map::const_iterator iter = aa_effects[aaid].begin(); iter != aa_effects[aaid].end(); ++iter) { - // effect = iter->second.skill_id; - // base1 = iter->second.base1; - // base2 = iter->second.base2; - // slot = iter->second.slot; - // - // //we default to 0 (SE_CurrentHP) for the effect, so if there aren't any base1/2 values, we'll just skip it - // if (effect == 0 && base1 == 0 && base2 == 0) - // continue; - // - // //IsBlankSpellEffect() - // if (effect == SE_Blank || (effect == SE_CHA && base1 == 0) || effect == SE_StackingCommand_Block || effect == SE_StackingCommand_Overwrite) - // continue; - // - // Log.Out(Logs::Detail, Logs::AA, "Applying Effect %d from AA %u in slot %d (base1: %d, base2: %d) on %s", effect, aaid, slot, base1, base2, this->GetCleanName()); - // - // uint8 focus = IsFocusEffect(0, 0, true,effect); - // if (focus) - // { - // newbon->FocusEffects[focus] = static_cast(effect); - // continue; - // } - // - // switch (effect) - // { - // //Note: AA effects that use accuracy are skill limited, while spell effect is not. - // case SE_Accuracy: - // if ((base2 == ALL_SKILLS) && (newbon->Accuracy[HIGHEST_SKILL+1] < base1)) - // newbon->Accuracy[HIGHEST_SKILL+1] = base1; - // else if (newbon->Accuracy[base2] < base1) - // newbon->Accuracy[base2] += base1; - // break; - // case SE_CurrentHP: //regens - // newbon->HPRegen += base1; - // break; - // case SE_CurrentEndurance: - // newbon->EnduranceRegen += base1; - // break; - // case SE_MovementSpeed: - // newbon->movementspeed += base1; //should we let these stack? - // /*if (base1 > newbon->movementspeed) //or should we use a total value? - // newbon->movementspeed = base1;*/ - // break; - // case SE_STR: - // newbon->STR += base1; - // break; - // case SE_DEX: - // newbon->DEX += base1; - // break; - // case SE_AGI: - // newbon->AGI += base1; - // break; - // case SE_STA: - // newbon->STA += base1; - // break; - // case SE_INT: - // newbon->INT += base1; - // break; - // case SE_WIS: - // newbon->WIS += base1; - // break; - // case SE_CHA: - // newbon->CHA += base1; - // break; - // case SE_WaterBreathing: - // //handled by client - // break; - // case SE_CurrentMana: - // newbon->ManaRegen += base1; - // break; - // case SE_ItemManaRegenCapIncrease: - // newbon->ItemManaRegenCap += base1; - // break; - // case SE_ResistFire: - // newbon->FR += base1; - // break; - // case SE_ResistCold: - // newbon->CR += base1; - // break; - // case SE_ResistPoison: - // newbon->PR += base1; - // break; - // case SE_ResistDisease: - // newbon->DR += base1; - // break; - // case SE_ResistMagic: - // newbon->MR += base1; - // break; - // case SE_ResistCorruption: - // newbon->Corrup += base1; - // break; - // case SE_IncreaseSpellHaste: - // break; - // case SE_IncreaseRange: - // break; - // case SE_MaxHPChange: - // newbon->MaxHP += base1; - // break; - // case SE_Packrat: - // newbon->Packrat += base1; - // break; - // case SE_TwoHandBash: - // break; - // case SE_SetBreathLevel: - // break; - // case SE_RaiseStatCap: - // switch(base2) - // { - // //are these #define'd somewhere? - // case 0: //str - // newbon->STRCapMod += base1; - // break; - // case 1: //sta - // newbon->STACapMod += base1; - // break; - // case 2: //agi - // newbon->AGICapMod += base1; - // break; - // case 3: //dex - // newbon->DEXCapMod += base1; - // break; - // case 4: //wis - // newbon->WISCapMod += base1; - // break; - // case 5: //int - // newbon->INTCapMod += base1; - // break; - // case 6: //cha - // newbon->CHACapMod += base1; - // break; - // case 7: //mr - // newbon->MRCapMod += base1; - // break; - // case 8: //cr - // newbon->CRCapMod += base1; - // break; - // case 9: //fr - // newbon->FRCapMod += base1; - // break; - // case 10: //pr - // newbon->PRCapMod += base1; - // break; - // case 11: //dr - // newbon->DRCapMod += base1; - // break; - // case 12: //corruption - // newbon->CorrupCapMod += base1; - // break; - // } - // break; - // case SE_PetDiscipline2: - // break; - // case SE_SpellSlotIncrease: - // break; - // case SE_MysticalAttune: - // newbon->BuffSlotIncrease += base1; - // break; - // case SE_TotalHP: - // newbon->HP += base1; - // break; - // case SE_StunResist: - // newbon->StunResist += base1; - // break; - // case SE_SpellCritChance: - // newbon->CriticalSpellChance += base1; - // break; - // case SE_SpellCritDmgIncrease: - // newbon->SpellCritDmgIncrease += base1; - // break; - // case SE_DotCritDmgIncrease: - // newbon->DotCritDmgIncrease += base1; - // break; - // case SE_ResistSpellChance: - // newbon->ResistSpellChance += base1; - // break; - // case SE_CriticalHealChance: - // newbon->CriticalHealChance += base1; - // break; - // case SE_CriticalHealOverTime: - // newbon->CriticalHealOverTime += base1; - // break; - // case SE_CriticalDoTChance: - // newbon->CriticalDoTChance += base1; - // break; - // case SE_ReduceSkillTimer: - // newbon->SkillReuseTime[base2] += base1; - // break; - // case SE_Fearless: - // newbon->Fearless = true; - // break; - // case SE_PersistantCasting: - // newbon->PersistantCasting += base1; - // break; - // case SE_DelayDeath: - // newbon->DelayDeath += base1; - // break; - // case SE_FrontalStunResist: - // newbon->FrontalStunResist += base1; - // break; - // case SE_ImprovedBindWound: - // newbon->BindWound += base1; - // break; - // case SE_MaxBindWound: - // newbon->MaxBindWound += base1; - // break; - // case SE_ExtraAttackChance: - // newbon->ExtraAttackChance += base1; - // break; - // case SE_SeeInvis: - // newbon->SeeInvis = base1; - // break; - // case SE_BaseMovementSpeed: - // newbon->BaseMovementSpeed += base1; - // break; - // case SE_IncreaseRunSpeedCap: - // newbon->IncreaseRunSpeedCap += base1; - // break; - // case SE_ConsumeProjectile: - // newbon->ConsumeProjectile += base1; - // break; - // case SE_ForageAdditionalItems: - // newbon->ForageAdditionalItems += base1; - // break; - // case SE_Salvage: - // newbon->SalvageChance += base1; - // break; - // case SE_ArcheryDamageModifier: - // newbon->ArcheryDamageModifier += base1; - // break; - // case SE_DoubleRangedAttack: - // newbon->DoubleRangedAttack += base1; - // break; - // case SE_DamageShield: - // newbon->DamageShield += base1; - // break; - // case SE_CharmBreakChance: - // newbon->CharmBreakChance += base1; - // break; - // case SE_OffhandRiposteFail: - // newbon->OffhandRiposteFail += base1; - // break; - // case SE_ItemAttackCapIncrease: - // newbon->ItemATKCap += base1; - // break; - // case SE_GivePetGroupTarget: - // newbon->GivePetGroupTarget = true; - // break; - // case SE_ItemHPRegenCapIncrease: - // newbon->ItemHPRegenCap = +base1; - // break; - // case SE_Ambidexterity: - // newbon->Ambidexterity += base1; - // break; - // case SE_PetMaxHP: - // newbon->PetMaxHP += base1; - // break; - // case SE_AvoidMeleeChance: - // newbon->AvoidMeleeChanceEffect += base1; - // break; - // case SE_CombatStability: - // newbon->CombatStability += base1; - // break; - // case SE_AddSingingMod: - // switch (base2) - // { - // case ItemTypeWindInstrument: - // newbon->windMod += base1; - // break; - // case ItemTypeStringedInstrument: - // newbon->stringedMod += base1; - // break; - // case ItemTypeBrassInstrument: - // newbon->brassMod += base1; - // break; - // case ItemTypePercussionInstrument: - // newbon->percussionMod += base1; - // break; - // case ItemTypeSinging: - // newbon->singingMod += base1; - // break; - // } - // break; - // case SE_SongModCap: - // newbon->songModCap += base1; - // break; - // case SE_PetCriticalHit: - // newbon->PetCriticalHit += base1; - // break; - // case SE_PetAvoidance: - // newbon->PetAvoidance += base1; - // break; - // case SE_ShieldBlock: - // newbon->ShieldBlock += base1; - // break; - // case SE_ShieldEquipHateMod: - // newbon->ShieldEquipHateMod += base1; - // break; - // case SE_ShieldEquipDmgMod: - // newbon->ShieldEquipDmgMod[0] += base1; - // newbon->ShieldEquipDmgMod[1] += base2; - // break; - // case SE_SecondaryDmgInc: - // newbon->SecondaryDmgInc = true; - // break; - // case SE_ChangeAggro: - // newbon->hatemod += base1; - // break; - // case SE_EndurancePool: - // newbon->Endurance += base1; - // break; - // case SE_ChannelChanceItems: - // newbon->ChannelChanceItems += base1; - // break; - // case SE_ChannelChanceSpells: - // newbon->ChannelChanceSpells += base1; - // break; - // case SE_DoubleSpecialAttack: - // newbon->DoubleSpecialAttack += base1; - // break; - // case SE_TripleBackstab: - // newbon->TripleBackstab += base1; - // break; - // case SE_FrontalBackstabMinDmg: - // newbon->FrontalBackstabMinDmg = true; - // break; - // case SE_FrontalBackstabChance: - // newbon->FrontalBackstabChance += base1; - // break; - // case SE_BlockBehind: - // newbon->BlockBehind += base1; - // break; - // - // case SE_StrikeThrough: - // case SE_StrikeThrough2: - // newbon->StrikeThrough += base1; - // break; - // case SE_DoubleAttackChance: - // newbon->DoubleAttackChance += base1; - // break; - // case SE_GiveDoubleAttack: - // newbon->GiveDoubleAttack += base1; - // break; - // case SE_ProcChance: - // newbon->ProcChanceSPA += base1; - // break; - // case SE_RiposteChance: - // newbon->RiposteChance += base1; - // break; - // case SE_Flurry: - // newbon->FlurryChance += base1; - // break; - // case SE_PetFlurry: - // newbon->PetFlurry += base1; - // break; - // case SE_BardSongRange: - // newbon->SongRange += base1; - // break; - // case SE_RootBreakChance: - // newbon->RootBreakChance += base1; - // break; - // case SE_UnfailingDivinity: - // newbon->UnfailingDivinity += base1; - // break; - // case SE_CrippBlowChance: - // newbon->CrippBlowChance += base1; - // break; - // - // case SE_HitChance: - // { - // if(base2 == ALL_SKILLS) - // newbon->HitChanceEffect[HIGHEST_SKILL+1] += base1; - // else - // newbon->HitChanceEffect[base2] += base1; - // } - // - // case SE_ProcOnKillShot: - // for(int i = 0; i < MAX_SPELL_TRIGGER*3; i+=3) - // { - // if(!newbon->SpellOnKill[i] || ((newbon->SpellOnKill[i] == base2) && (newbon->SpellOnKill[i+1] < base1))) - // { - // //base1 = chance, base2 = SpellID to be triggered, base3 = min npc level - // newbon->SpellOnKill[i] = base2; - // newbon->SpellOnKill[i+1] = base1; - // - // if (GetLevel() > 15) - // newbon->SpellOnKill[i+2] = GetLevel() - 15; //AA specifiy "non-trivial" - // else - // newbon->SpellOnKill[i+2] = 0; - // - // break; - // } - // } - // break; - // - // case SE_SpellOnDeath: - // for(int i = 0; i < MAX_SPELL_TRIGGER*2; i+=2) - // { - // if(!newbon->SpellOnDeath[i]) - // { - // // base1 = SpellID to be triggered, base2 = chance to fire - // newbon->SpellOnDeath[i] = base1; - // newbon->SpellOnDeath[i+1] = base2; - // break; - // } - // } - // break; - // - // case SE_TriggerOnCast: - // - // for(int i = 0; i < MAX_SPELL_TRIGGER; i++) - // { - // if (newbon->SpellTriggers[i] == aaid) - // break; - // - // if(!newbon->SpellTriggers[i]) - // { - // //Save the 'aaid' of each triggerable effect to an array - // newbon->SpellTriggers[i] = aaid; - // break; - // } - // } - // break; - // - // case SE_CriticalHitChance: - // { - // if(base2 == ALL_SKILLS) - // newbon->CriticalHitChance[HIGHEST_SKILL+1] += base1; - // else - // newbon->CriticalHitChance[base2] += base1; - // } - // break; - // - // case SE_CriticalDamageMob: - // { - // // base1 = effect value, base2 = skill restrictions(-1 for all) - // if(base2 == ALL_SKILLS) - // newbon->CritDmgMob[HIGHEST_SKILL+1] += base1; - // else - // newbon->CritDmgMob[base2] += base1; - // break; - // } - // - // case SE_CriticalSpellChance: - // { - // newbon->CriticalSpellChance += base1; - // - // if (base2 > newbon->SpellCritDmgIncNoStack) - // newbon->SpellCritDmgIncNoStack = base2; - // - // break; - // } - // - // case SE_ResistFearChance: - // { - // if(base1 == 100) // If we reach 100% in a single spell/item then we should be immune to negative fear resist effects until our immunity is over - // newbon->Fearless = true; - // - // newbon->ResistFearChance += base1; // these should stack - // break; - // } - // - // case SE_SkillDamageAmount: - // { - // if(base2 == ALL_SKILLS) - // newbon->SkillDamageAmount[HIGHEST_SKILL+1] += base1; - // else - // newbon->SkillDamageAmount[base2] += base1; - // break; - // } - // - // case SE_SpecialAttackKBProc: - // { - // //You can only have one of these per client. [AA Dragon Punch] - // newbon->SpecialAttackKBProc[0] = base1; //Chance base 100 = 25% proc rate - // newbon->SpecialAttackKBProc[1] = base2; //Skill to KB Proc Off - // break; - // } - // - // case SE_DamageModifier: - // { - // if(base2 == ALL_SKILLS) - // newbon->DamageModifier[HIGHEST_SKILL+1] += base1; - // else - // newbon->DamageModifier[base2] += base1; - // break; - // } - // - // case SE_DamageModifier2: - // { - // if(base2 == ALL_SKILLS) - // newbon->DamageModifier2[HIGHEST_SKILL+1] += base1; - // else - // newbon->DamageModifier2[base2] += base1; - // break; - // } - // - // case SE_SlayUndead: - // { - // if(newbon->SlayUndead[1] < base1) - // newbon->SlayUndead[0] = base1; // Rate - // newbon->SlayUndead[1] = base2; // Damage Modifier - // break; - // } - // - // case SE_DoubleRiposte: - // { - // newbon->DoubleRiposte += base1; - // } - // - // case SE_GiveDoubleRiposte: - // { - // //0=Regular Riposte 1=Skill Attack Riposte 2=Skill - // if(base2 == 0){ - // if(newbon->GiveDoubleRiposte[0] < base1) - // newbon->GiveDoubleRiposte[0] = base1; - // } - // //Only for special attacks. - // else if(base2 > 0 && (newbon->GiveDoubleRiposte[1] < base1)){ - // newbon->GiveDoubleRiposte[1] = base1; - // newbon->GiveDoubleRiposte[2] = base2; - // } - // - // break; - // } - // - // //Kayen: Not sure best way to implement this yet. - // //Physically raises skill cap ie if 55/55 it will raise to 55/60 - // case SE_RaiseSkillCap: - // { - // if(newbon->RaiseSkillCap[0] < base1){ - // newbon->RaiseSkillCap[0] = base1; //value - // newbon->RaiseSkillCap[1] = base2; //skill - // } - // break; - // } - // - // case SE_MasteryofPast: - // { - // if(newbon->MasteryofPast < base1) - // newbon->MasteryofPast = base1; - // break; - // } - // - // case SE_CastingLevel2: - // case SE_CastingLevel: - // { - // newbon->effective_casting_level += base1; - // break; - // } - // - // case SE_DivineSave: - // { - // if(newbon->DivineSaveChance[0] < base1) - // { - // newbon->DivineSaveChance[0] = base1; - // newbon->DivineSaveChance[1] = base2; - // } - // break; - // } - // - // - // case SE_SpellEffectResistChance: - // { - // for(int e = 0; e < MAX_RESISTABLE_EFFECTS*2; e+=2) - // { - // if(newbon->SEResist[e+1] && (newbon->SEResist[e] == base2) && (newbon->SEResist[e+1] < base1)){ - // newbon->SEResist[e] = base2; //Spell Effect ID - // newbon->SEResist[e+1] = base1; //Resist Chance - // break; - // } - // else if (!newbon->SEResist[e+1]){ - // newbon->SEResist[e] = base2; //Spell Effect ID - // newbon->SEResist[e+1] = base1; //Resist Chance - // break; - // } - // } - // break; - // } - // - // case SE_MitigateDamageShield: - // { - // if (base1 < 0) - // base1 = base1*(-1); - // - // newbon->DSMitigationOffHand += base1; - // break; - // } - // - // case SE_FinishingBlow: - // { - // //base1 = chance, base2 = damage - // if (newbon->FinishingBlow[1] < base2){ - // newbon->FinishingBlow[0] = base1; - // newbon->FinishingBlow[1] = base2; - // } - // break; - // } - // - // case SE_FinishingBlowLvl: - // { - // //base1 = level, base2 = ??? (Set to 200 in AA data, possible proc rate mod?) - // if (newbon->FinishingBlowLvl[0] < base1){ - // newbon->FinishingBlowLvl[0] = base1; - // newbon->FinishingBlowLvl[1] = base2; - // } - // break; - // } - // - // case SE_StunBashChance: - // newbon->StunBashChance += base1; - // break; - // - // case SE_IncreaseChanceMemwipe: - // newbon->IncreaseChanceMemwipe += base1; - // break; - // - // case SE_CriticalMend: - // newbon->CriticalMend += base1; - // break; - // - // case SE_HealRate: - // newbon->HealRate += base1; - // break; - // - // case SE_MeleeLifetap: - // { - // - // if((base1 < 0) && (newbon->MeleeLifetap > base1)) - // newbon->MeleeLifetap = base1; - // - // else if(newbon->MeleeLifetap < base1) - // newbon->MeleeLifetap = base1; - // break; - // } - // - // case SE_Vampirism: - // newbon->Vampirism += base1; - // break; - // - // case SE_FrenziedDevastation: - // newbon->FrenziedDevastation += base2; - // break; - // - // case SE_SpellProcChance: - // newbon->SpellProcChance += base1; - // break; - // - // case SE_Berserk: - // newbon->BerserkSPA = true; - // break; - // - // case SE_Metabolism: - // newbon->Metabolism += base1; - // break; - // - // case SE_ImprovedReclaimEnergy: - // { - // if((base1 < 0) && (newbon->ImprovedReclaimEnergy > base1)) - // newbon->ImprovedReclaimEnergy = base1; - // - // else if(newbon->ImprovedReclaimEnergy < base1) - // newbon->ImprovedReclaimEnergy = base1; - // break; - // } - // - // case SE_HeadShot: - // { - // if(newbon->HeadShot[1] < base2){ - // newbon->HeadShot[0] = base1; - // newbon->HeadShot[1] = base2; - // } - // break; - // } - // - // case SE_HeadShotLevel: - // { - // if(newbon->HSLevel < base1) - // newbon->HSLevel = base1; - // break; - // } - // - // case SE_Assassinate: - // { - // if(newbon->Assassinate[1] < base2){ - // newbon->Assassinate[0] = base1; - // newbon->Assassinate[1] = base2; - // } - // break; - // } - // - // case SE_AssassinateLevel: - // { - // if(newbon->AssassinateLevel < base1) - // newbon->AssassinateLevel = base1; - // break; - // } - // - // case SE_PetMeleeMitigation: - // newbon->PetMeleeMitigation += base1; - // break; - // - // case SE_MeleeVulnerability: - // newbon->MeleeVulnerability += base1; - // break; - // - // case SE_FactionModPct: - // { - // if((base1 < 0) && (newbon->FactionModPct > base1)) - // newbon->FactionModPct = base1; - // - // else if(newbon->FactionModPct < base1) - // newbon->FactionModPct = base1; - // break; - // } - // - // case SE_IllusionPersistence: - // newbon->IllusionPersistence = true; - // break; - // - // case SE_LimitToSkill:{ - // if (base1 <= HIGHEST_SKILL) - // newbon->LimitToSkill[base1] = true; - // break; - // } - // - // case SE_SkillProc:{ - // for(int e = 0; e < MAX_SKILL_PROCS; e++) - // { - // if(newbon->SkillProc[e] && newbon->SkillProc[e] == aaid) - // break; //Do not use the same aa id more than once. - // - // else if(!newbon->SkillProc[e]){ - // newbon->SkillProc[e] = aaid; - // break; - // } - // } - // break; - // } - // - // case SE_SkillProcSuccess:{ - // - // for(int e = 0; e < MAX_SKILL_PROCS; e++) - // { - // if(newbon->SkillProcSuccess[e] && newbon->SkillProcSuccess[e] == aaid) - // break; //Do not use the same spell id more than once. - // - // else if(!newbon->SkillProcSuccess[e]){ - // newbon->SkillProcSuccess[e] = aaid; - // break; - // } - // } - // break; - // } - // - // case SE_MeleeMitigation: - // newbon->MeleeMitigationEffect -= base1; - // break; - // - // } - //} + for (const auto &e : rank.effects) { + effect = e.effect_id; + base1 = e.base1; + base2 = e.base2; + slot = e.slot; + + // we default to 0 (SE_CurrentHP) for the effect, so if there aren't any base1/2 values, we'll just skip it + if (effect == 0 && base1 == 0 && base2 == 0) + continue; + + // IsBlankSpellEffect() + if (effect == SE_Blank || (effect == SE_CHA && base1 == 0) || effect == SE_StackingCommand_Block || + effect == SE_StackingCommand_Overwrite) + continue; + + Log.Out(Logs::Detail, Logs::AA, "Applying Effect %d from AA %u in slot %d (base1: %d, base2: %d) on %s", + effect, rank.id, slot, base1, base2, GetCleanName()); + + uint8 focus = IsFocusEffect(0, 0, true, effect); + if (focus) { + newbon->FocusEffects[focus] = static_cast(effect); + continue; + } + + switch (effect) { + // Note: AA effects that use accuracy are skill limited, while spell effect is not. + case SE_Accuracy: + if ((base2 == ALL_SKILLS) && (newbon->Accuracy[HIGHEST_SKILL + 1] < base1)) + newbon->Accuracy[HIGHEST_SKILL + 1] = base1; + else if (newbon->Accuracy[base2] < base1) + newbon->Accuracy[base2] += base1; + break; + case SE_CurrentHP: // regens + newbon->HPRegen += base1; + break; + case SE_CurrentEndurance: + newbon->EnduranceRegen += base1; + break; + case SE_MovementSpeed: + newbon->movementspeed += base1; // should we let these stack? + /*if (base1 > newbon->movementspeed) //or should we use a total value? + newbon->movementspeed = base1;*/ + break; + case SE_STR: + newbon->STR += base1; + break; + case SE_DEX: + newbon->DEX += base1; + break; + case SE_AGI: + newbon->AGI += base1; + break; + case SE_STA: + newbon->STA += base1; + break; + case SE_INT: + newbon->INT += base1; + break; + case SE_WIS: + newbon->WIS += base1; + break; + case SE_CHA: + newbon->CHA += base1; + break; + case SE_WaterBreathing: + // handled by client + break; + case SE_CurrentMana: + newbon->ManaRegen += base1; + break; + case SE_ManaPool: + newbon->Mana += base1; + break; + case SE_ItemManaRegenCapIncrease: + newbon->ItemManaRegenCap += base1; + break; + case SE_ResistFire: + newbon->FR += base1; + break; + case SE_ResistCold: + newbon->CR += base1; + break; + case SE_ResistPoison: + newbon->PR += base1; + break; + case SE_ResistDisease: + newbon->DR += base1; + break; + case SE_ResistMagic: + newbon->MR += base1; + break; + case SE_ResistCorruption: + newbon->Corrup += base1; + break; + case SE_IncreaseSpellHaste: + break; + case SE_IncreaseRange: + break; + case SE_MaxHPChange: + newbon->MaxHP += base1; + break; + case SE_Packrat: + newbon->Packrat += base1; + break; + case SE_TwoHandBash: + break; + case SE_SetBreathLevel: + break; + case SE_RaiseStatCap: + switch (base2) { + // are these #define'd somewhere? + case 0: // str + newbon->STRCapMod += base1; + break; + case 1: // sta + newbon->STACapMod += base1; + break; + case 2: // agi + newbon->AGICapMod += base1; + break; + case 3: // dex + newbon->DEXCapMod += base1; + break; + case 4: // wis + newbon->WISCapMod += base1; + break; + case 5: // int + newbon->INTCapMod += base1; + break; + case 6: // cha + newbon->CHACapMod += base1; + break; + case 7: // mr + newbon->MRCapMod += base1; + break; + case 8: // cr + newbon->CRCapMod += base1; + break; + case 9: // fr + newbon->FRCapMod += base1; + break; + case 10: // pr + newbon->PRCapMod += base1; + break; + case 11: // dr + newbon->DRCapMod += base1; + break; + case 12: // corruption + newbon->CorrupCapMod += base1; + break; + } + break; + case SE_PetDiscipline2: + break; + case SE_SpellSlotIncrease: + break; + case SE_MysticalAttune: + newbon->BuffSlotIncrease += base1; + break; + case SE_TotalHP: + newbon->HP += base1; + break; + case SE_StunResist: + newbon->StunResist += base1; + break; + case SE_SpellCritChance: + newbon->CriticalSpellChance += base1; + break; + case SE_SpellCritDmgIncrease: + newbon->SpellCritDmgIncrease += base1; + break; + case SE_DotCritDmgIncrease: + newbon->DotCritDmgIncrease += base1; + break; + case SE_ResistSpellChance: + newbon->ResistSpellChance += base1; + break; + case SE_CriticalHealChance: + newbon->CriticalHealChance += base1; + break; + case SE_CriticalHealOverTime: + newbon->CriticalHealOverTime += base1; + break; + case SE_CriticalDoTChance: + newbon->CriticalDoTChance += base1; + break; + case SE_ReduceSkillTimer: + newbon->SkillReuseTime[base2] += base1; + break; + case SE_Fearless: + newbon->Fearless = true; + break; + case SE_PersistantCasting: + newbon->PersistantCasting += base1; + break; + case SE_DelayDeath: + newbon->DelayDeath += base1; + break; + case SE_FrontalStunResist: + newbon->FrontalStunResist += base1; + break; + case SE_ImprovedBindWound: + newbon->BindWound += base1; + break; + case SE_MaxBindWound: + newbon->MaxBindWound += base1; + break; + case SE_ExtraAttackChance: + newbon->ExtraAttackChance += base1; + break; + case SE_SeeInvis: + newbon->SeeInvis = base1; + break; + case SE_BaseMovementSpeed: + newbon->BaseMovementSpeed += base1; + break; + case SE_IncreaseRunSpeedCap: + newbon->IncreaseRunSpeedCap += base1; + break; + case SE_ConsumeProjectile: + newbon->ConsumeProjectile += base1; + break; + case SE_ForageAdditionalItems: + newbon->ForageAdditionalItems += base1; + break; + case SE_Salvage: + newbon->SalvageChance += base1; + break; + case SE_ArcheryDamageModifier: + newbon->ArcheryDamageModifier += base1; + break; + case SE_DoubleRangedAttack: + newbon->DoubleRangedAttack += base1; + break; + case SE_DamageShield: + newbon->DamageShield += base1; + break; + case SE_CharmBreakChance: + newbon->CharmBreakChance += base1; + break; + case SE_OffhandRiposteFail: + newbon->OffhandRiposteFail += base1; + break; + case SE_ItemAttackCapIncrease: + newbon->ItemATKCap += base1; + break; + case SE_GivePetGroupTarget: + newbon->GivePetGroupTarget = true; + break; + case SE_ItemHPRegenCapIncrease: + newbon->ItemHPRegenCap = +base1; + break; + case SE_Ambidexterity: + newbon->Ambidexterity += base1; + break; + case SE_PetMaxHP: + newbon->PetMaxHP += base1; + break; + case SE_AvoidMeleeChance: + newbon->AvoidMeleeChanceEffect += base1; + break; + case SE_CombatStability: + newbon->CombatStability += base1; + break; + case SE_AddSingingMod: + switch (base2) { + case ItemTypeWindInstrument: + newbon->windMod += base1; + break; + case ItemTypeStringedInstrument: + newbon->stringedMod += base1; + break; + case ItemTypeBrassInstrument: + newbon->brassMod += base1; + break; + case ItemTypePercussionInstrument: + newbon->percussionMod += base1; + break; + case ItemTypeSinging: + newbon->singingMod += base1; + break; + } + break; + case SE_SongModCap: + newbon->songModCap += base1; + break; + case SE_PetCriticalHit: + newbon->PetCriticalHit += base1; + break; + case SE_PetAvoidance: + newbon->PetAvoidance += base1; + break; + case SE_ShieldBlock: + newbon->ShieldBlock += base1; + break; + case SE_ShieldEquipHateMod: + newbon->ShieldEquipHateMod += base1; + break; + case SE_ShieldEquipDmgMod: + newbon->ShieldEquipDmgMod[0] += base1; + newbon->ShieldEquipDmgMod[1] += base2; + break; + case SE_SecondaryDmgInc: + newbon->SecondaryDmgInc = true; + break; + case SE_ChangeAggro: + newbon->hatemod += base1; + break; + case SE_EndurancePool: + newbon->Endurance += base1; + break; + case SE_ChannelChanceItems: + newbon->ChannelChanceItems += base1; + break; + case SE_ChannelChanceSpells: + newbon->ChannelChanceSpells += base1; + break; + case SE_DoubleSpecialAttack: + newbon->DoubleSpecialAttack += base1; + break; + case SE_TripleBackstab: + newbon->TripleBackstab += base1; + break; + case SE_FrontalBackstabMinDmg: + newbon->FrontalBackstabMinDmg = true; + break; + case SE_FrontalBackstabChance: + newbon->FrontalBackstabChance += base1; + break; + case SE_BlockBehind: + newbon->BlockBehind += base1; + break; + + case SE_StrikeThrough: + case SE_StrikeThrough2: + newbon->StrikeThrough += base1; + break; + case SE_DoubleAttackChance: + newbon->DoubleAttackChance += base1; + break; + case SE_GiveDoubleAttack: + newbon->GiveDoubleAttack += base1; + break; + case SE_ProcChance: + newbon->ProcChanceSPA += base1; + break; + case SE_RiposteChance: + newbon->RiposteChance += base1; + break; + case SE_Flurry: + newbon->FlurryChance += base1; + break; + case SE_PetFlurry: + newbon->PetFlurry += base1; + break; + case SE_BardSongRange: + newbon->SongRange += base1; + break; + case SE_RootBreakChance: + newbon->RootBreakChance += base1; + break; + case SE_UnfailingDivinity: + newbon->UnfailingDivinity += base1; + break; + case SE_CrippBlowChance: + newbon->CrippBlowChance += base1; + break; + + case SE_HitChance: { + if (base2 == ALL_SKILLS) + newbon->HitChanceEffect[HIGHEST_SKILL + 1] += base1; + else + newbon->HitChanceEffect[base2] += base1; + } + + case SE_ProcOnKillShot: + for (int i = 0; i < MAX_SPELL_TRIGGER * 3; i += 3) { + if (!newbon->SpellOnKill[i] || + ((newbon->SpellOnKill[i] == base2) && (newbon->SpellOnKill[i + 1] < base1))) { + // base1 = chance, base2 = SpellID to be triggered, base3 = min npc level + newbon->SpellOnKill[i] = base2; + newbon->SpellOnKill[i + 1] = base1; + + if (GetLevel() > 15) + newbon->SpellOnKill[i + 2] = + GetLevel() - 15; // AA specifiy "non-trivial" + else + newbon->SpellOnKill[i + 2] = 0; + + break; + } + } + break; + + case SE_SpellOnDeath: + for (int i = 0; i < MAX_SPELL_TRIGGER * 2; i += 2) { + if (!newbon->SpellOnDeath[i]) { + // base1 = SpellID to be triggered, base2 = chance to fire + newbon->SpellOnDeath[i] = base1; + newbon->SpellOnDeath[i + 1] = base2; + break; + } + } + break; + + case SE_TriggerOnCast: + + for (int i = 0; i < MAX_SPELL_TRIGGER; i++) { + if (newbon->SpellTriggers[i] == rank.id) + break; + + if (!newbon->SpellTriggers[i]) { + // Save the 'rank.id' of each triggerable effect to an array + newbon->SpellTriggers[i] = rank.id; + break; + } + } + break; + + case SE_CriticalHitChance: { + if (base2 == ALL_SKILLS) + newbon->CriticalHitChance[HIGHEST_SKILL + 1] += base1; + else + newbon->CriticalHitChance[base2] += base1; + } break; + + case SE_CriticalDamageMob: { + // base1 = effect value, base2 = skill restrictions(-1 for all) + if (base2 == ALL_SKILLS) + newbon->CritDmgMob[HIGHEST_SKILL + 1] += base1; + else + newbon->CritDmgMob[base2] += base1; + break; + } + + case SE_CriticalSpellChance: { + newbon->CriticalSpellChance += base1; + + if (base2 > newbon->SpellCritDmgIncNoStack) + newbon->SpellCritDmgIncNoStack = base2; + + break; + } + + case SE_ResistFearChance: { + if (base1 == 100) // If we reach 100% in a single spell/item then we should be immune to + // negative fear resist effects until our immunity is over + newbon->Fearless = true; + + newbon->ResistFearChance += base1; // these should stack + break; + } + + case SE_SkillDamageAmount: { + if (base2 == ALL_SKILLS) + newbon->SkillDamageAmount[HIGHEST_SKILL + 1] += base1; + else + newbon->SkillDamageAmount[base2] += base1; + break; + } + + case SE_SkillAttackProc: { + // You can only have one of these per client. [AA Dragon Punch] + newbon->SkillAttackProc[0] = base1; // Chance base 1000 = 100% proc rate + newbon->SkillAttackProc[1] = base2; // Skill to Proc Off + newbon->SkillAttackProc[2] = rank.spell; // spell to proc + break; + } + + case SE_DamageModifier: { + if (base2 == ALL_SKILLS) + newbon->DamageModifier[HIGHEST_SKILL + 1] += base1; + else + newbon->DamageModifier[base2] += base1; + break; + } + + case SE_DamageModifier2: { + if (base2 == ALL_SKILLS) + newbon->DamageModifier2[HIGHEST_SKILL + 1] += base1; + else + newbon->DamageModifier2[base2] += base1; + break; + } + + case SE_SlayUndead: { + if (newbon->SlayUndead[1] < base1) + newbon->SlayUndead[0] = base1; // Rate + newbon->SlayUndead[1] = base2; // Damage Modifier + break; + } + + case SE_DoubleRiposte: { + newbon->DoubleRiposte += base1; + } + + case SE_GiveDoubleRiposte: { + // 0=Regular Riposte 1=Skill Attack Riposte 2=Skill + if (base2 == 0) { + if (newbon->GiveDoubleRiposte[0] < base1) + newbon->GiveDoubleRiposte[0] = base1; + } + // Only for special attacks. + else if (base2 > 0 && (newbon->GiveDoubleRiposte[1] < base1)) { + newbon->GiveDoubleRiposte[1] = base1; + newbon->GiveDoubleRiposte[2] = base2; + } + + break; + } + + // Kayen: Not sure best way to implement this yet. + // Physically raises skill cap ie if 55/55 it will raise to 55/60 + case SE_RaiseSkillCap: { + if (newbon->RaiseSkillCap[0] < base1) { + newbon->RaiseSkillCap[0] = base1; // value + newbon->RaiseSkillCap[1] = base2; // skill + } + break; + } + + case SE_MasteryofPast: { + if (newbon->MasteryofPast < base1) + newbon->MasteryofPast = base1; + break; + } + + case SE_CastingLevel2: + case SE_CastingLevel: { + newbon->effective_casting_level += base1; + break; + } + + case SE_DivineSave: { + if (newbon->DivineSaveChance[0] < base1) { + newbon->DivineSaveChance[0] = base1; + newbon->DivineSaveChance[1] = base2; + } + break; + } + + case SE_SpellEffectResistChance: { + for (int e = 0; e < MAX_RESISTABLE_EFFECTS * 2; e += 2) { + if (newbon->SEResist[e + 1] && (newbon->SEResist[e] == base2) && + (newbon->SEResist[e + 1] < base1)) { + newbon->SEResist[e] = base2; // Spell Effect ID + newbon->SEResist[e + 1] = base1; // Resist Chance + break; + } else if (!newbon->SEResist[e + 1]) { + newbon->SEResist[e] = base2; // Spell Effect ID + newbon->SEResist[e + 1] = base1; // Resist Chance + break; + } + } + break; + } + + case SE_MitigateDamageShield: { + if (base1 < 0) + base1 = base1 * (-1); + + newbon->DSMitigationOffHand += base1; + break; + } + + case SE_FinishingBlow: { + // base1 = chance, base2 = damage + if (newbon->FinishingBlow[1] < base2) { + newbon->FinishingBlow[0] = base1; + newbon->FinishingBlow[1] = base2; + } + break; + } + + case SE_FinishingBlowLvl: { + // base1 = level, base2 = ??? (Set to 200 in AA data, possible proc rate mod?) + if (newbon->FinishingBlowLvl[0] < base1) { + newbon->FinishingBlowLvl[0] = base1; + newbon->FinishingBlowLvl[1] = base2; + } + break; + } + + case SE_StunBashChance: + newbon->StunBashChance += base1; + break; + + case SE_IncreaseChanceMemwipe: + newbon->IncreaseChanceMemwipe += base1; + break; + + case SE_CriticalMend: + newbon->CriticalMend += base1; + break; + + case SE_HealRate: + newbon->HealRate += base1; + break; + + case SE_MeleeLifetap: { + + if ((base1 < 0) && (newbon->MeleeLifetap > base1)) + newbon->MeleeLifetap = base1; + + else if (newbon->MeleeLifetap < base1) + newbon->MeleeLifetap = base1; + break; + } + + case SE_Vampirism: + newbon->Vampirism += base1; + break; + + case SE_FrenziedDevastation: + newbon->FrenziedDevastation += base2; + break; + + case SE_SpellProcChance: + newbon->SpellProcChance += base1; + break; + + case SE_Berserk: + newbon->BerserkSPA = true; + break; + + case SE_Metabolism: + newbon->Metabolism += base1; + break; + + case SE_ImprovedReclaimEnergy: { + if ((base1 < 0) && (newbon->ImprovedReclaimEnergy > base1)) + newbon->ImprovedReclaimEnergy = base1; + + else if (newbon->ImprovedReclaimEnergy < base1) + newbon->ImprovedReclaimEnergy = base1; + break; + } + + case SE_HeadShot: { + if (newbon->HeadShot[1] < base2) { + newbon->HeadShot[0] = base1; + newbon->HeadShot[1] = base2; + } + break; + } + + case SE_HeadShotLevel: { + if (newbon->HSLevel < base1) + newbon->HSLevel = base1; + break; + } + + case SE_Assassinate: { + if (newbon->Assassinate[1] < base2) { + newbon->Assassinate[0] = base1; + newbon->Assassinate[1] = base2; + } + break; + } + + case SE_AssassinateLevel: { + if (newbon->AssassinateLevel < base1) + newbon->AssassinateLevel = base1; + break; + } + + case SE_PetMeleeMitigation: + newbon->PetMeleeMitigation += base1; + break; + + case SE_MeleeVulnerability: + newbon->MeleeVulnerability += base1; + break; + + case SE_FactionModPct: { + if ((base1 < 0) && (newbon->FactionModPct > base1)) + newbon->FactionModPct = base1; + + else if (newbon->FactionModPct < base1) + newbon->FactionModPct = base1; + break; + } + + case SE_IllusionPersistence: + newbon->IllusionPersistence = true; + break; + + case SE_LimitToSkill: { + if (base1 <= HIGHEST_SKILL) + newbon->LimitToSkill[base1] = true; + break; + } + + case SE_SkillProc: { + for (int e = 0; e < MAX_SKILL_PROCS; e++) { + if (newbon->SkillProc[e] && newbon->SkillProc[e] == rank.id) + break; // Do not use the same aa id more than once. + + else if (!newbon->SkillProc[e]) { + newbon->SkillProc[e] = rank.id; + break; + } + } + break; + } + + case SE_SkillProcSuccess: { + + for (int e = 0; e < MAX_SKILL_PROCS; e++) { + if (newbon->SkillProcSuccess[e] && newbon->SkillProcSuccess[e] == rank.id) + break; // Do not use the same spell id more than once. + + else if (!newbon->SkillProcSuccess[e]) { + newbon->SkillProcSuccess[e] = rank.id; + break; + } + } + break; + } + + case SE_MeleeMitigation: + newbon->MeleeMitigationEffect -= base1; + break; + + case SE_ATK: + newbon->ATK += base1; + break; + // to do + case SE_ReduceTradeskillFail: + break; + case SE_PotionBeltSlots: + break; + case SE_BandolierSlots: + break; + case SE_ForageSkill: + break; + case SE_TradeSkillMastery: + break; + case SE_SecondaryForte: + break; + + // not handled here + case SE_HastenedAASkill: + // not handled here but don't want to clutter debug log -- these may need to be verified to ignore + case SE_LimitMaxLevel: + case SE_LimitResist: + case SE_LimitTarget: + case SE_LimitEffect: + case SE_LimitSpellType: + case SE_LimitMinDur: + case SE_LimitInstant: + case SE_LimitMinLevel: + case SE_LimitCastTimeMin: + case SE_LimitCastTimeMax: + case SE_LimitSpell: + case SE_LimitCombatSkills: + case SE_LimitManaMin: + case SE_LimitSpellGroup: + case SE_LimitSpellClass: + case SE_LimitSpellSubclass: + case SE_LimitHPPercent: + case SE_LimitManaPercent: + case SE_LimitEndPercent: + case SE_LimitClass: + case SE_LimitRace: + case SE_LimitCastingSkill: + case SE_LimitUseMin: + case SE_LimitUseType: + break; + + default: + Log.Out(Logs::Detail, Logs::AA, "SPA %d not accounted for in AA %s (%d)", effect, rank.base_ability->name.c_str(), rank.id); + break; + } + + } } void Mob::CalcSpellBonuses(StatBonuses* newbon) diff --git a/zone/bot.cpp b/zone/bot.cpp index 1d8c16f57..5200f3e95 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -7712,14 +7712,14 @@ void Bot::DoSpecialAttackDamage(Mob *who, SkillUseTypes skill, int32 max_damage, CheckNumHitsRemaining(NumHit::OutgoingHitSuccess); //[AA Dragon Punch] value[0] = 100 for 25%, chance value[1] = skill - if(aabonuses.SpecialAttackKBProc[0] && aabonuses.SpecialAttackKBProc[1] == skill){ +/* if(aabonuses.SpecialAttackKBProc[0] && aabonuses.SpecialAttackKBProc[1] == skill){ int kb_chance = 25; kb_chance += kb_chance*(100-aabonuses.SpecialAttackKBProc[0])/100; if (zone->random.Int(0, 99) < kb_chance) SpellFinished(904, who, 10, 0, -1, spells[904].ResistDiff); //who->Stun(100); Kayen: This effect does not stun on live, it only moves the NPC. - } + }*/ if (HasSkillProcs()) TrySkillProc(who, skill, ReuseTime*1000); @@ -9078,7 +9078,7 @@ void Bot::DoBuffTic(const Buffs_Struct &buff, int slot, Mob* caster) { Mob::DoBuffTic(buff, slot, caster); } -bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, +bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, int16 *resist_adjust, uint32 aa_id) { bool Result = false; diff --git a/zone/client.h b/zone/client.h index faa4eeb3a..014747576 100644 --- a/zone/client.h +++ b/zone/client.h @@ -789,7 +789,7 @@ public: bool CheckAAEffect(aaEffectType type); void HandleAAAction(aaID activate); int16 CalcAAFocusEffect(focusType type, uint16 focus_spell, uint16 spell_id); - int16 CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id); + int16 CalcAAFocus(focusType type, const AA::Rank &rank, uint16 spell_id); void RefundAA(); int32 GetAAEffectDataBySlot(uint32 aa_ID, uint32 slot_id, bool GetEffect, bool GetBase1, bool GetBase2); int32 GetAAEffectid(uint32 aa_ID, uint32 slot_id) { return GetAAEffectDataBySlot(aa_ID, slot_id, true, false,false); } @@ -1265,7 +1265,7 @@ protected: int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat); void CalcEdibleBonuses(StatBonuses* newbon); void CalcAABonuses(StatBonuses* newbon); - void ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon); + void ApplyAABonuses(const AA::Rank &rank, StatBonuses* newbon); void ProcessItemCaps(); void MakeBuffFadePacket(uint16 spell_id, int slot_id, bool send_message = true); bool client_data_loaded; diff --git a/zone/client_mods.cpp b/zone/client_mods.cpp index f12c20064..56a22de9a 100644 --- a/zone/client_mods.cpp +++ b/zone/client_mods.cpp @@ -1121,7 +1121,7 @@ int32 Client::CalcMaxMana() switch (GetCasterClass()) { case 'I': case 'W': { - max_mana = (CalcBaseMana() + itembonuses.Mana + spellbonuses.Mana + GroupLeadershipAAManaEnhancement()); + max_mana = (CalcBaseMana() + itembonuses.Mana + spellbonuses.Mana + aabonuses.Mana + GroupLeadershipAAManaEnhancement()); break; } case 'N': { diff --git a/zone/common.h b/zone/common.h index d9e3637a8..e658a352d 100644 --- a/zone/common.h +++ b/zone/common.h @@ -412,7 +412,7 @@ struct StatBonuses { int8 BaseMovementSpeed; // Adjust base run speed, does not stack with other movement bonuses. uint8 IncreaseRunSpeedCap; // Increase max run speed above cap. int32 DoubleSpecialAttack; // Chance to to perform a double special attack (ie flying kick 2x) - int32 SpecialAttackKBProc[2]; // Chance to to do a knockback from special attacks. (0 = chance 1 = Skill) + int32 SkillAttackProc[3]; // [0] chance to proc [2] spell on [1] skill usage uint8 FrontalStunResist; // Chance to resist a frontal stun int32 BindWound; // Increase amount of HP by percent. int32 MaxBindWound; // Increase max amount of HP you can bind wound. diff --git a/zone/mob.cpp b/zone/mob.cpp index 965007fcf..35b0d62d2 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -3510,9 +3510,11 @@ void Mob::TriggerOnCast(uint32 focus_spell, uint32 spell_id, bool aa_trigger) uint32 trigger_spell_id = 0; - if (aa_trigger && IsClient()){ - //focus_spell = aaid - trigger_spell_id = CastToClient()->CalcAAFocus(focusTriggerOnCast, focus_spell, spell_id); + if (aa_trigger && IsClient()) { + // focus_spell = aaid + auto rank = zone->GetAlternateAdvancementRank(focus_spell); + if (rank) + trigger_spell_id = CastToClient()->CalcAAFocus(focusTriggerOnCast, *rank, spell_id); if(IsValidSpell(trigger_spell_id) && GetTarget()) SpellFinished(trigger_spell_id, GetTarget(), 10, 0, -1, spells[trigger_spell_id].ResistDiff); diff --git a/zone/special_attacks.cpp b/zone/special_attacks.cpp index a3557d021..0021350a4 100644 --- a/zone/special_attacks.cpp +++ b/zone/special_attacks.cpp @@ -149,22 +149,19 @@ void Mob::DoSpecialAttackDamage(Mob *who, SkillUseTypes skill, int32 max_damage, } who->AddToHateList(this, hate, 0, false); + if (max_damage > 0 && aabonuses.SkillAttackProc[0] && aabonuses.SkillAttackProc[1] == skill && + IsValidSpell(aabonuses.SkillAttackProc[2])) { + float chance = aabonuses.SkillAttackProc[0] / 1000.0f; + if (zone->random.Roll(chance)) + SpellFinished(aabonuses.SkillAttackProc[2], who, 10, 0, -1, + spells[aabonuses.SkillAttackProc[2]].ResistDiff); + } who->Damage(this, max_damage, SPELL_UNKNOWN, skill, false); //Make sure 'this' has not killed the target and 'this' is not dead (Damage shield ect). if(!GetTarget())return; if (HasDied()) return; - //[AA Dragon Punch] value[0] = 100 for 25%, chance value[1] = skill - if(aabonuses.SpecialAttackKBProc[0] && aabonuses.SpecialAttackKBProc[1] == skill){ - int kb_chance = 25; - kb_chance += kb_chance*(100-aabonuses.SpecialAttackKBProc[0])/100; - - if (zone->random.Roll(kb_chance)) - SpellFinished(904, who, 10, 0, -1, spells[904].ResistDiff); - //who->Stun(100); Kayen: This effect does not stun on live, it only moves the NPC. - } - if (HasSkillProcs()) TrySkillProc(who, skill, ReuseTime*1000); @@ -2442,19 +2439,18 @@ void Mob::DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, SkillUseTypes } other->AddToHateList(this, hate, 0, false); + if (damage > 0 && aabonuses.SkillAttackProc[0] && aabonuses.SkillAttackProc[1] == skillinuse && + IsValidSpell(aabonuses.SkillAttackProc[2])) { + float chance = aabonuses.SkillAttackProc[0] / 1000.0f; + if (zone->random.Roll(chance)) + SpellFinished(aabonuses.SkillAttackProc[2], other, 10, 0, -1, + spells[aabonuses.SkillAttackProc[2]].ResistDiff); + } other->Damage(this, damage, SPELL_UNKNOWN, skillinuse); if (HasDied()) return; - if(aabonuses.SpecialAttackKBProc[0] && aabonuses.SpecialAttackKBProc[1] == skillinuse){ - int kb_chance = 25; - kb_chance += kb_chance*(100-aabonuses.SpecialAttackKBProc[0])/100; - - if (zone->random.Roll(kb_chance)) - SpellFinished(904, other, 10, 0, -1, spells[904].ResistDiff); - } - if (CanSkillProc && HasSkillProcs()) TrySkillProc(other, skillinuse, ReuseTime); diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 8ac60c125..0bb7b78b9 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -4186,7 +4186,7 @@ int32 Client::GetAAEffectDataBySlot(uint32 aa_ID, uint32 slot_id, bool GetEffect } -int16 Client::CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id) +int16 Client::CalcAAFocus(focusType type, const AA::Rank &rank, uint16 spell_id) { const SPDat_Spell_Struct &spell = spells[spell_id]; @@ -4200,8 +4200,9 @@ int16 Client::CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id) uint32 slot = 0; bool LimitFailure = false; - bool LimitInclude[MaxLimitInclude] = { false }; - /* Certain limits require only one of several Include conditions to be true. Ie. Add damage to fire OR ice spells. + bool LimitInclude[MaxLimitInclude] = {false}; + /* Certain limits require only one of several Include conditions to be true. Ie. Add damage to fire OR ice + spells. 0/1 SE_LimitResist 2/3 SE_LimitSpell 4/5 SE_LimitEffect @@ -4214,452 +4215,431 @@ int16 Client::CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id) */ int FocusCount = 0; - //old AA - //std::map >::const_iterator find_iter = aa_effects.find(aa_ID); - //if(find_iter == aa_effects.end()) - //{ - // return 0; - //} - // - //for (std::map::const_iterator iter = aa_effects[aa_ID].begin(); iter != aa_effects[aa_ID].end(); ++iter) - //{ - // effect = iter->second.skill_id; - // base1 = iter->second.base1; - // base2 = iter->second.base2; - // slot = iter->second.slot; - // - // /* - // AA Foci's can contain multiple focus effects within the same AA. - // To handle this we will not automatically return zero if a limit is found. - // Instead if limit is found and multiple focus effects, we will reset the limit check - // when the next valid focus effect is found. - // */ - // - // if (IsFocusEffect(0, 0, true,effect) || (effect == SE_TriggerOnCast)){ - // FocusCount++; - // //If limit found on prior check next, else end loop. - // if (FocusCount > 1){ - // - // for(int e = 0; e < MaxLimitInclude; e+=2) { - // if (LimitInclude[e] && !LimitInclude[e+1]) - // LimitFailure = true; - // } - // - // if (LimitFailure){ - // value = 0; - // LimitFailure = false; - // - // for(int e = 0; e < MaxLimitInclude; e++) { - // LimitInclude[e] = false; //Reset array - // } - // } - // - // else{ - // break; - // } - // } - // } - // - // - // switch (effect) - // { - // case SE_Blank: - // break; - // - // //Handle Focus Limits - // - // case SE_LimitResist: - // if(base1 < 0){ - // if(spell.resisttype == -base1) //Exclude - // LimitFailure = true; - // } - // else { - // LimitInclude[0] = true; - // if (spell.resisttype == base1) //Include - // LimitInclude[1] = true; - // } - // break; - // - // case SE_LimitInstant: - // if(base1 == 1 && spell.buffduration) //Fail if not instant - // LimitFailure = true; - // if(base1 == 0 && (spell.buffduration == 0)) //Fail if instant - // LimitFailure = true; - // - // break; - // - // case SE_LimitMaxLevel: - // spell_level = spell.classes[(GetClass()%16) - 1]; - // lvldiff = spell_level - base1; - // //every level over cap reduces the effect by base2 percent unless from a clicky when ItemCastsUseFocus is true - // if(lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || RuleB(Character, ItemCastsUseFocus) == false)) { - // if(base2 > 0){ - // lvlModifier -= base2*lvldiff; - // if(lvlModifier < 1) - // LimitFailure = true; - // } - // else - // LimitFailure = true; - // } - // break; - // - // case SE_LimitMinLevel: - // if((spell.classes[(GetClass()%16) - 1]) < base1) - // LimitFailure = true; - // break; - // - // case SE_LimitCastTimeMin: - // if (static_cast(spell.cast_time) < base1) - // LimitFailure = true; - // break; - // - // case SE_LimitCastTimeMax: - // if (static_cast(spell.cast_time) > base1) - // LimitFailure = true; - // break; - // - // case SE_LimitSpell: - // if(base1 < 0) { //Exclude - // if (spell_id == -base1) - // LimitFailure = true; - // } - // else { - // LimitInclude[2] = true; - // if (spell_id == base1) //Include - // LimitInclude[3] = true; - // } - // break; - // - // case SE_LimitMinDur: - // if (base1 > CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) - // LimitFailure = true; - // - // break; - // - // case SE_LimitEffect: - // if(base1 < 0){ - // if(IsEffectInSpell(spell_id,-base1)) //Exclude - // LimitFailure = true; - // } - // else{ - // LimitInclude[4] = true; - // if(IsEffectInSpell(spell_id,base1)) //Include - // LimitInclude[5] = true; - // } - // break; - // - // case SE_LimitSpellType: - // switch(base1) - // { - // case 0: - // if (!IsDetrimentalSpell(spell_id)) - // LimitFailure = true; - // break; - // case 1: - // if (!IsBeneficialSpell(spell_id)) - // LimitFailure = true; - // break; - // } - // break; - // - // case SE_LimitManaMin: - // if(spell.mana < base1) - // LimitFailure = true; - // break; - // - // case SE_LimitTarget: - // if (base1 < 0) { - // if (-base1 == spell.targettype) //Exclude - // LimitFailure = true; - // } - // else { - // LimitInclude[6] = true; - // if (base1 == spell.targettype) //Include - // LimitInclude[7] = true; - // } - // break; - // - // case SE_LimitCombatSkills: - // if (base1 == 0 && (IsCombatSkill(spell_id) || IsCombatProc(spell_id))) //Exclude Discs / Procs - // LimitFailure = true; - // else if (base1 == 1 && (!IsCombatSkill(spell_id) || !IsCombatProc(spell_id))) //Exclude Spells - // LimitFailure = true; - // - // break; - // - // case SE_LimitSpellGroup: - // if(base1 < 0) { - // if (-base1 == spell.spellgroup) //Exclude - // LimitFailure = true; - // } - // else { - // LimitInclude[8] = true; - // if (base1 == spell.spellgroup) //Include - // LimitInclude[9] = true; - // } - // break; - // - // case SE_LimitCastingSkill: - // if(base1 < 0) { - // if(-base1 == spell.skill) - // LimitFailure = true; - // } - // else { - // LimitInclude[10] = true; - // if(base1 == spell.skill) - // LimitInclude[11] = true; - // } - // break; - // - // case SE_LimitSpellClass: - // if(base1 < 0) { //Exclude - // if (CheckSpellCategory(spell_id, base1, SE_LimitSpellClass)) - // return(0); - // } - // else { - // LimitInclude[12] = true; - // if (CheckSpellCategory(spell_id, base1, SE_LimitSpellClass)) //Include - // LimitInclude[13] = true; - // } - // break; - // - // case SE_LimitSpellSubclass: - // if(base1 < 0) { //Exclude - // if (CheckSpellCategory(spell_id, base1, SE_LimitSpellSubclass)) - // return(0); - // } - // else { - // LimitInclude[14] = true; - // if (CheckSpellCategory(spell_id, base1, SE_LimitSpellSubclass)) //Include - // LimitInclude[15] = true; - // } - // break; - // - // case SE_LimitClass: - // //Do not use this limit more then once per spell. If multiple class, treat value like items would. - // if (!PassLimitClass(base1, GetClass())) - // LimitFailure = true; - // break; - // - // case SE_LimitRace: - // if (base1 != GetRace()) - // LimitFailure = true; - // break; - // - // case SE_LimitUseMin: - // if (base1 > spell.numhits) - // LimitFailure = true; - // break; - // - // case SE_LimitUseType: - // if (base1 != spell.numhitstype) - // LimitFailure = true; - // break; - // - // //Handle Focus Effects - // case SE_ImprovedDamage: - // if (type == focusImprovedDamage && base1 > value) - // value = base1; - // break; - // - // case SE_ImprovedHeal: - // if (type == focusImprovedHeal && base1 > value) - // value = base1; - // break; - // - // case SE_ReduceManaCost: - // if (type == focusManaCost) - // value = base1; - // break; - // - // case SE_IncreaseSpellHaste: - // if (type == focusSpellHaste && base1 > value) - // value = base1; - // break; - // - // case SE_IncreaseSpellDuration: - // if (type == focusSpellDuration && base1 > value) - // value = base1; - // break; - // - // case SE_SpellDurationIncByTic: - // if (type == focusSpellDurByTic && base1 > value) - // value = base1; - // break; - // - // case SE_SwarmPetDuration: - // if (type == focusSwarmPetDuration && base1 > value) - // value = base1; - // break; - // - // case SE_IncreaseRange: - // if (type == focusRange && base1 > value) - // value = base1; - // break; - // - // case SE_ReduceReagentCost: - // if (type == focusReagentCost && base1 > value) - // value = base1; - // break; - // - // case SE_PetPowerIncrease: - // if (type == focusPetPower && base1 > value) - // value = base1; - // break; - // - // case SE_SpellResistReduction: - // if (type == focusResistRate && base1 > value) - // value = base1; - // break; - // - // case SE_SpellHateMod: - // if (type == focusSpellHateMod ) { - // if(value != 0) { - // if(value > 0){ - // if(base1 > value) - // value = base1; - // } - // else{ - // if(base1 < value) - // value = base1; - // } - // } - // else - // value = base1; - // } - // break; - // - // case SE_ReduceReuseTimer: - // if(type == focusReduceRecastTime) - // value = base1 / 1000; - // break; - // - // case SE_TriggerOnCast: - // if(type == focusTriggerOnCast){ - // if(zone->random.Roll(base1)) { - // value = base2; - // } else { - // value = 0; - // LimitFailure = true; - // } - // break; - // } - // - // case SE_FcSpellVulnerability: - // if(type == focusSpellVulnerability) - // value = base1; - // break; - // - // case SE_BlockNextSpellFocus: - // if(type == focusBlockNextSpell){ - // if(zone->random.Roll(base1)) - // value = 1; - // } - // break; - // - // case SE_FcTwincast: - // if(type == focusTwincast) - // value = base1; - // break; - // - // //Note if using these as AA, make sure this is first focus used. - // case SE_SympatheticProc: - // if(type == focusSympatheticProc) - // value = base2; - // break; - // - // case SE_FcDamageAmt: - // if(type == focusFcDamageAmt) - // value = base1; - // break; - // - // case SE_FcDamageAmtCrit: - // if(type == focusFcDamageAmtCrit) - // value = base1; - // break; - // - // case SE_FcDamageAmtIncoming: - // if(type == focusFcDamageAmtIncoming) - // value = base1; - // break; - // - // case SE_FcHealAmtIncoming: - // if(type == focusFcHealAmtIncoming) - // value = base1; - // break; - // - // case SE_FcHealPctCritIncoming: - // if (type == focusFcHealPctCritIncoming) - // value = base1; - // break; - // - // case SE_FcHealAmtCrit: - // if(type == focusFcHealAmtCrit) - // value = base1; - // break; - // - // case SE_FcHealAmt: - // if(type == focusFcHealAmt) - // value = base1; - // break; - // - // case SE_FcHealPctIncoming: - // if(type == focusFcHealPctIncoming) - // value = base1; - // break; - // - // case SE_FcBaseEffects: - // if (type == focusFcBaseEffects) - // value = base1; - // break; - // - // case SE_FcDamagePctCrit: - // if(type == focusFcDamagePctCrit) - // value = base1; - // break; - // - // case SE_FcIncreaseNumHits: - // if(type == focusIncreaseNumHits) - // value = base1; - // break; - // - // case SE_FcLimitUse: - // if(type == focusFcLimitUse) - // value = base1; - // break; - // - // case SE_FcMute: - // if(type == focusFcMute) - // value = base1; - // break; - // - // case SE_FcStunTimeMod: - // if(type == focusFcStunTimeMod) - // value = base1; - // break; - // - // } - //} + for (const auto &e : rank.effects) { + effect = e.effect_id; + base1 = e.base1; + base2 = e.base2; + slot = e.slot; - for(int e = 0; e < MaxLimitInclude; e+=2) { - if (LimitInclude[e] && !LimitInclude[e+1]) + /* + AA Foci's can contain multiple focus effects within the same AA. + To handle this we will not automatically return zero if a limit is found. + Instead if limit is found and multiple focus effects, we will reset the limit check + when the next valid focus effect is found. + */ + + if (IsFocusEffect(0, 0, true, effect) || (effect == SE_TriggerOnCast)) { + FocusCount++; + // If limit found on prior check next, else end loop. + if (FocusCount > 1) { + + for (int e = 0; e < MaxLimitInclude; e += 2) { + if (LimitInclude[e] && !LimitInclude[e + 1]) + LimitFailure = true; + } + + if (LimitFailure) { + value = 0; + LimitFailure = false; + + for (int e = 0; e < MaxLimitInclude; e++) { + LimitInclude[e] = false; // Reset array + } + } + + else { + break; + } + } + } + + switch (effect) { + case SE_Blank: + break; + + // Handle Focus Limits + + case SE_LimitResist: + if (base1 < 0) { + if (spell.resisttype == -base1) // Exclude + LimitFailure = true; + } else { + LimitInclude[0] = true; + if (spell.resisttype == base1) // Include + LimitInclude[1] = true; + } + break; + + case SE_LimitInstant: + if (base1 == 1 && spell.buffduration) // Fail if not instant + LimitFailure = true; + if (base1 == 0 && (spell.buffduration == 0)) // Fail if instant + LimitFailure = true; + + break; + + case SE_LimitMaxLevel: + spell_level = spell.classes[(GetClass() % 16) - 1]; + lvldiff = spell_level - base1; + // every level over cap reduces the effect by base2 percent unless from a clicky when + // ItemCastsUseFocus is true + if (lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || + RuleB(Character, ItemCastsUseFocus) == false)) { + if (base2 > 0) { + lvlModifier -= base2 * lvldiff; + if (lvlModifier < 1) + LimitFailure = true; + } else + LimitFailure = true; + } + break; + + case SE_LimitMinLevel: + if ((spell.classes[(GetClass() % 16) - 1]) < base1) + LimitFailure = true; + break; + + case SE_LimitCastTimeMin: + if (static_cast(spell.cast_time) < base1) + LimitFailure = true; + break; + + case SE_LimitCastTimeMax: + if (static_cast(spell.cast_time) > base1) + LimitFailure = true; + break; + + case SE_LimitSpell: + if (base1 < 0) { // Exclude + if (spell_id == -base1) + LimitFailure = true; + } else { + LimitInclude[2] = true; + if (spell_id == base1) // Include + LimitInclude[3] = true; + } + break; + + case SE_LimitMinDur: + if (base1 > CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) + LimitFailure = true; + + break; + + case SE_LimitEffect: + if (base1 < 0) { + if (IsEffectInSpell(spell_id, -base1)) // Exclude + LimitFailure = true; + } else { + LimitInclude[4] = true; + if (IsEffectInSpell(spell_id, base1)) // Include + LimitInclude[5] = true; + } + break; + + case SE_LimitSpellType: + switch (base1) { + case 0: + if (!IsDetrimentalSpell(spell_id)) + LimitFailure = true; + break; + case 1: + if (!IsBeneficialSpell(spell_id)) + LimitFailure = true; + break; + } + break; + + case SE_LimitManaMin: + if (spell.mana < base1) + LimitFailure = true; + break; + + case SE_LimitTarget: + if (base1 < 0) { + if (-base1 == spell.targettype) // Exclude + LimitFailure = true; + } else { + LimitInclude[6] = true; + if (base1 == spell.targettype) // Include + LimitInclude[7] = true; + } + break; + + case SE_LimitCombatSkills: + if (base1 == 0 && (IsCombatSkill(spell_id) || IsCombatProc(spell_id))) // Exclude Discs / Procs + LimitFailure = true; + else if (base1 == 1 && (!IsCombatSkill(spell_id) || !IsCombatProc(spell_id))) // Exclude Spells + LimitFailure = true; + + break; + + case SE_LimitSpellGroup: + if (base1 < 0) { + if (-base1 == spell.spellgroup) // Exclude + LimitFailure = true; + } else { + LimitInclude[8] = true; + if (base1 == spell.spellgroup) // Include + LimitInclude[9] = true; + } + break; + + case SE_LimitCastingSkill: + if (base1 < 0) { + if (-base1 == spell.skill) + LimitFailure = true; + } else { + LimitInclude[10] = true; + if (base1 == spell.skill) + LimitInclude[11] = true; + } + break; + + case SE_LimitSpellClass: + if (base1 < 0) { // Exclude + if (CheckSpellCategory(spell_id, base1, SE_LimitSpellClass)) + return (0); + } else { + LimitInclude[12] = true; + if (CheckSpellCategory(spell_id, base1, SE_LimitSpellClass)) // Include + LimitInclude[13] = true; + } + break; + + case SE_LimitSpellSubclass: + if (base1 < 0) { // Exclude + if (CheckSpellCategory(spell_id, base1, SE_LimitSpellSubclass)) + return (0); + } else { + LimitInclude[14] = true; + if (CheckSpellCategory(spell_id, base1, SE_LimitSpellSubclass)) // Include + LimitInclude[15] = true; + } + break; + + case SE_LimitClass: + // Do not use this limit more then once per spell. If multiple class, treat value like items + // would. + if (!PassLimitClass(base1, GetClass())) + LimitFailure = true; + break; + + case SE_LimitRace: + if (base1 != GetRace()) + LimitFailure = true; + break; + + case SE_LimitUseMin: + if (base1 > spell.numhits) + LimitFailure = true; + break; + + case SE_LimitUseType: + if (base1 != spell.numhitstype) + LimitFailure = true; + break; + + // Handle Focus Effects + case SE_ImprovedDamage: + if (type == focusImprovedDamage && base1 > value) + value = base1; + break; + + case SE_ImprovedHeal: + if (type == focusImprovedHeal && base1 > value) + value = base1; + break; + + case SE_ReduceManaCost: + if (type == focusManaCost) + value = base1; + break; + + case SE_IncreaseSpellHaste: + if (type == focusSpellHaste && base1 > value) + value = base1; + break; + + case SE_IncreaseSpellDuration: + if (type == focusSpellDuration && base1 > value) + value = base1; + break; + + case SE_SpellDurationIncByTic: + if (type == focusSpellDurByTic && base1 > value) + value = base1; + break; + + case SE_SwarmPetDuration: + if (type == focusSwarmPetDuration && base1 > value) + value = base1; + break; + + case SE_IncreaseRange: + if (type == focusRange && base1 > value) + value = base1; + break; + + case SE_ReduceReagentCost: + if (type == focusReagentCost && base1 > value) + value = base1; + break; + + case SE_PetPowerIncrease: + if (type == focusPetPower && base1 > value) + value = base1; + break; + + case SE_SpellResistReduction: + if (type == focusResistRate && base1 > value) + value = base1; + break; + + case SE_SpellHateMod: + if (type == focusSpellHateMod) { + if (value != 0) { + if (value > 0) { + if (base1 > value) + value = base1; + } else { + if (base1 < value) + value = base1; + } + } else + value = base1; + } + break; + + case SE_ReduceReuseTimer: + if (type == focusReduceRecastTime) + value = base1 / 1000; + break; + + case SE_TriggerOnCast: + if (type == focusTriggerOnCast) { + if (zone->random.Roll(base1)) { + value = base2; + } else { + value = 0; + LimitFailure = true; + } + break; + } + + case SE_FcSpellVulnerability: + if (type == focusSpellVulnerability) + value = base1; + break; + + case SE_BlockNextSpellFocus: + if (type == focusBlockNextSpell) { + if (zone->random.Roll(base1)) + value = 1; + } + break; + + case SE_FcTwincast: + if (type == focusTwincast) + value = base1; + break; + + // Note if using these as AA, make sure this is first focus used. + case SE_SympatheticProc: + if (type == focusSympatheticProc) + value = base2; + break; + + case SE_FcDamageAmt: + if (type == focusFcDamageAmt) + value = base1; + break; + + case SE_FcDamageAmtCrit: + if (type == focusFcDamageAmtCrit) + value = base1; + break; + + case SE_FcDamageAmtIncoming: + if (type == focusFcDamageAmtIncoming) + value = base1; + break; + + case SE_FcHealAmtIncoming: + if (type == focusFcHealAmtIncoming) + value = base1; + break; + + case SE_FcHealPctCritIncoming: + if (type == focusFcHealPctCritIncoming) + value = base1; + break; + + case SE_FcHealAmtCrit: + if (type == focusFcHealAmtCrit) + value = base1; + break; + + case SE_FcHealAmt: + if (type == focusFcHealAmt) + value = base1; + break; + + case SE_FcHealPctIncoming: + if (type == focusFcHealPctIncoming) + value = base1; + break; + + case SE_FcBaseEffects: + if (type == focusFcBaseEffects) + value = base1; + break; + + case SE_FcDamagePctCrit: + if (type == focusFcDamagePctCrit) + value = base1; + break; + + case SE_FcIncreaseNumHits: + if (type == focusIncreaseNumHits) + value = base1; + break; + + case SE_FcLimitUse: + if (type == focusFcLimitUse) + value = base1; + break; + + case SE_FcMute: + if (type == focusFcMute) + value = base1; + break; + + case SE_FcStunTimeMod: + if (type == focusFcStunTimeMod) + value = base1; + break; + } + } + + for (int e = 0; e < MaxLimitInclude; e += 2) { + if (LimitInclude[e] && !LimitInclude[e + 1]) return 0; } if (LimitFailure) return 0; - return(value*lvlModifier/100); + return (value * lvlModifier / 100); } //given an item/spell's focus ID and the spell being cast, determine the focus ammount, if any //assumes that spell_id is not a bard spell and that both ids are valid spell ids -int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, bool best_focus) { - - if(!IsValidSpell(focus_id) || !IsValidSpell(spell_id)) +int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, bool best_focus) +{ + if (!IsValidSpell(focus_id) || !IsValidSpell(spell_id)) return 0; - const SPDat_Spell_Struct &focus_spell = spells[focus_id]; const SPDat_Spell_Struct &spell = spells[spell_id]; @@ -4669,8 +4649,9 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo int lvldiff = 0; uint32 Caston_spell_id = 0; - bool LimitInclude[MaxLimitInclude] = { false }; - /* Certain limits require only one of several Include conditions to be true. Ie. Add damage to fire OR ice spells. + bool LimitInclude[MaxLimitInclude] = {false}; + /* Certain limits require only one of several Include conditions to be true. Ie. Add damage to fire OR ice + spells. 0/1 SE_LimitResist 2/3 SE_LimitSpell 4/5 SE_LimitEffect @@ -4690,21 +4671,20 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo break; case SE_LimitResist: - if(focus_spell.base[i] < 0){ - if (spell.resisttype == -focus_spell.base[i]) //Exclude + if (focus_spell.base[i] < 0) { + if (spell.resisttype == -focus_spell.base[i]) // Exclude return 0; - } - else { + } else { LimitInclude[0] = true; - if (spell.resisttype == focus_spell.base[i]) //Include + if (spell.resisttype == focus_spell.base[i]) // Include LimitInclude[1] = true; } break; case SE_LimitInstant: - if(focus_spell.base[i] == 1 && spell.buffduration) //Fail if not instant + if (focus_spell.base[i] == 1 && spell.buffduration) // Fail if not instant return 0; - if(focus_spell.base[i] == 0 && (spell.buffduration == 0)) //Fail if instant + if (focus_spell.base[i] == 0 && (spell.buffduration == 0)) // Fail if instant return 0; break; @@ -4712,16 +4692,17 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo case SE_LimitMaxLevel: if (IsNPC()) break; - spell_level = spell.classes[(GetClass()%16) - 1]; + spell_level = spell.classes[(GetClass() % 16) - 1]; lvldiff = spell_level - focus_spell.base[i]; - //every level over cap reduces the effect by focus_spell.base2[i] percent unless from a clicky when ItemCastsUseFocus is true - if(lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || RuleB(Character, ItemCastsUseFocus) == false)){ - if(focus_spell.base2[i] > 0){ - lvlModifier -= focus_spell.base2[i]*lvldiff; - if(lvlModifier < 1) + // every level over cap reduces the effect by focus_spell.base2[i] percent unless from a clicky + // when ItemCastsUseFocus is true + if (lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || + RuleB(Character, ItemCastsUseFocus) == false)) { + if (focus_spell.base2[i] > 0) { + lvlModifier -= focus_spell.base2[i] * lvldiff; + if (lvlModifier < 1) return 0; - } - else + } else return 0; } break; @@ -4729,116 +4710,115 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo case SE_LimitMinLevel: if (IsNPC()) break; - if (spell.classes[(GetClass()%16) - 1] < focus_spell.base[i]) - return(0); + if (spell.classes[(GetClass() % 16) - 1] < focus_spell.base[i]) + return (0); break; case SE_LimitCastTimeMin: if (spells[spell_id].cast_time < (uint16)focus_spell.base[i]) - return(0); + return (0); break; case SE_LimitCastTimeMax: if (spells[spell_id].cast_time > (uint16)focus_spell.base[i]) - return(0); + return (0); break; case SE_LimitSpell: - if(focus_spell.base[i] < 0) { //Exclude + if (focus_spell.base[i] < 0) { // Exclude if (spell_id == -focus_spell.base[i]) - return(0); - } - else { + return (0); + } else { LimitInclude[2] = true; - if (spell_id == focus_spell.base[i]) //Include + if (spell_id == focus_spell.base[i]) // Include LimitInclude[3] = true; } break; case SE_LimitMinDur: - if (focus_spell.base[i] > CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) - return(0); + if (focus_spell.base[i] > + CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) + return (0); break; case SE_LimitEffect: - if(focus_spell.base[i] < 0){ - if(IsEffectInSpell(spell_id,-focus_spell.base[i])) //Exclude + if (focus_spell.base[i] < 0) { + if (IsEffectInSpell(spell_id, -focus_spell.base[i])) // Exclude return 0; - } - else{ + } else { LimitInclude[4] = true; - if(IsEffectInSpell(spell_id,focus_spell.base[i])) //Include + if (IsEffectInSpell(spell_id, focus_spell.base[i])) // Include LimitInclude[5] = true; } break; - case SE_LimitSpellType: - switch( focus_spell.base[i]){ - case 0: - if (!IsDetrimentalSpell(spell_id)) - return 0; - break; - case 1: - if (!IsBeneficialSpell(spell_id)) - return 0; - break; - default: - Log.Out(Logs::General, Logs::Normal, "CalcFocusEffect: unknown limit spelltype %d", focus_spell.base[i]); + switch (focus_spell.base[i]) { + case 0: + if (!IsDetrimentalSpell(spell_id)) + return 0; + break; + case 1: + if (!IsBeneficialSpell(spell_id)) + return 0; + break; + default: + Log.Out(Logs::General, Logs::Normal, "CalcFocusEffect: unknown limit spelltype %d", + focus_spell.base[i]); } break; case SE_LimitManaMin: - if(spell.mana < focus_spell.base[i]) + if (spell.mana < focus_spell.base[i]) return 0; break; case SE_LimitTarget: if (focus_spell.base[i] < 0) { - if (-focus_spell.base[i] == spell.targettype) //Exclude + if (-focus_spell.base[i] == spell.targettype) // Exclude return 0; - } - else { + } else { LimitInclude[6] = true; - if (focus_spell.base[i] == spell.targettype) //Include + if (focus_spell.base[i] == spell.targettype) // Include LimitInclude[7] = true; } break; case SE_LimitCombatSkills: - if (focus_spell.base[i] == 0 && (IsCombatSkill(spell_id) || IsCombatProc(spell_id))) //Exclude Discs / Procs + if (focus_spell.base[i] == 0 && + (IsCombatSkill(spell_id) || IsCombatProc(spell_id))) // Exclude Discs / Procs return 0; - else if (focus_spell.base[i] == 1 && (!IsCombatSkill(spell_id) || !IsCombatProc(spell_id))) //Exclude Spells + else if (focus_spell.base[i] == 1 && + (!IsCombatSkill(spell_id) || !IsCombatProc(spell_id))) // Exclude Spells return 0; break; case SE_LimitSpellGroup: - if(focus_spell.base[i] < 0) { - if (-focus_spell.base[i] == spell.spellgroup) //Exclude + if (focus_spell.base[i] < 0) { + if (-focus_spell.base[i] == spell.spellgroup) // Exclude return 0; - } - else { + } else { LimitInclude[8] = true; - if (focus_spell.base[i] == spell.spellgroup) //Include + if (focus_spell.base[i] == spell.spellgroup) // Include LimitInclude[9] = true; } break; case SE_LimitCastingSkill: - if(focus_spell.base[i] < 0) { - if(-focus_spell.base[i] == spell.skill) + if (focus_spell.base[i] < 0) { + if (-focus_spell.base[i] == spell.skill) return 0; - } - else { + } else { LimitInclude[10] = true; - if(focus_spell.base[i] == spell.skill) + if (focus_spell.base[i] == spell.skill) LimitInclude[11] = true; } break; case SE_LimitClass: - //Do not use this limit more then once per spell. If multiple class, treat value like items would. + // Do not use this limit more then once per spell. If multiple class, treat value like items + // would. if (!PassLimitClass(focus_spell.base[i], GetClass())) return 0; break; @@ -4864,40 +4844,38 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo break; case SE_LimitSpellClass: - if(focus_spell.base[i] < 0) { //Exclude + if (focus_spell.base[i] < 0) { // Exclude if (CheckSpellCategory(spell_id, focus_spell.base[i], SE_LimitSpellClass)) - return(0); - } - else { + return (0); + } else { LimitInclude[12] = true; - if (CheckSpellCategory(spell_id, focus_spell.base[i], SE_LimitSpellClass)) //Include + if (CheckSpellCategory(spell_id, focus_spell.base[i], SE_LimitSpellClass)) // Include LimitInclude[13] = true; } break; case SE_LimitSpellSubclass: - if(focus_spell.base[i] < 0) { //Exclude + if (focus_spell.base[i] < 0) { // Exclude if (CheckSpellCategory(spell_id, focus_spell.base[i], SE_LimitSpellSubclass)) - return(0); - } - else { + return (0); + } else { LimitInclude[14] = true; - if (CheckSpellCategory(spell_id, focus_spell.base[i], SE_LimitSpellSubclass)) //Include + if (CheckSpellCategory(spell_id, focus_spell.base[i], SE_LimitSpellSubclass)) // Include LimitInclude[15] = true; } break; - - //handle effects + // handle effects case SE_ImprovedDamage: if (type == focusImprovedDamage) { // This is used to determine which focus should be used for the random calculation - if(best_focus) { + if (best_focus) { // If the spell contains a value in the base2 field then that is the max value if (focus_spell.base2[i] != 0) { value = focus_spell.base2[i]; } - // If the spell does not contain a base2 value, then its a straight non random value + // If the spell does not contain a base2 value, then its a straight non random + // value else { value = focus_spell.base[i]; } @@ -4905,8 +4883,7 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo // Actual focus calculation starts here else if (focus_spell.base2[i] == 0 || focus_spell.base[i] == focus_spell.base2[i]) { value = focus_spell.base[i]; - } - else { + } else { value = zone->random.Int(focus_spell.base[i], focus_spell.base2[i]); } } @@ -4914,18 +4891,15 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo case SE_ImprovedHeal: if (type == focusImprovedHeal) { - if(best_focus) { + if (best_focus) { if (focus_spell.base2[i] != 0) { value = focus_spell.base2[i]; - } - else { + } else { value = focus_spell.base[i]; } - } - else if (focus_spell.base2[i] == 0 || focus_spell.base[i] == focus_spell.base2[i]) { + } else if (focus_spell.base2[i] == 0 || focus_spell.base[i] == focus_spell.base2[i]) { value = focus_spell.base[i]; - } - else { + } else { value = zone->random.Int(focus_spell.base[i], focus_spell.base2[i]); } } @@ -4933,18 +4907,15 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo case SE_ReduceManaCost: if (type == focusManaCost) { - if(best_focus) { + if (best_focus) { if (focus_spell.base2[i] != 0) { value = focus_spell.base2[i]; - } - else { + } else { value = focus_spell.base[i]; } - } - else if (focus_spell.base2[i] == 0 || focus_spell.base[i] == focus_spell.base2[i]) { + } else if (focus_spell.base2[i] == 0 || focus_spell.base[i] == focus_spell.base2[i]) { value = focus_spell.base[i]; - } - else { + } else { value = zone->random.Int(focus_spell.base[i], focus_spell.base2[i]); } } @@ -4991,30 +4962,28 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo break; case SE_SpellHateMod: - if (type == focusSpellHateMod){ - if(value != 0){ - if(value > 0){ - if(focus_spell.base[i] > value) + if (type == focusSpellHateMod) { + if (value != 0) { + if (value > 0) { + if (focus_spell.base[i] > value) + value = focus_spell.base[i]; + } else { + if (focus_spell.base[i] < value) value = focus_spell.base[i]; } - else{ - if(focus_spell.base[i] < value) - value = focus_spell.base[i]; - } - } - else + } else value = focus_spell.base[i]; } break; case SE_ReduceReuseTimer: - if(type == focusReduceRecastTime) + if (type == focusReduceRecastTime) value = focus_spell.base[i] / 1000; break; case SE_TriggerOnCast: - if(type == focusTriggerOnCast){ - if(zone->random.Roll(focus_spell.base[i])) + if (type == focusTriggerOnCast) { + if (zone->random.Roll(focus_spell.base[i])) value = focus_spell.base2[i]; else value = 0; @@ -5022,50 +4991,50 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo break; case SE_BlockNextSpellFocus: - if(type == focusBlockNextSpell){ - if(zone->random.Roll(focus_spell.base[i])) + if (type == focusBlockNextSpell) { + if (zone->random.Roll(focus_spell.base[i])) value = 1; } break; case SE_SympatheticProc: - if(type == focusSympatheticProc) { + if (type == focusSympatheticProc) { value = focus_id; } break; case SE_FcSpellVulnerability: - if(type == focusSpellVulnerability) + if (type == focusSpellVulnerability) value = focus_spell.base[i]; break; case SE_FcTwincast: - if(type == focusTwincast) + if (type == focusTwincast) value = focus_spell.base[i]; break; case SE_FcDamageAmt: - if(type == focusFcDamageAmt) + if (type == focusFcDamageAmt) value = focus_spell.base[i]; break; case SE_FcDamageAmtCrit: - if(type == focusFcDamageAmtCrit) + if (type == focusFcDamageAmtCrit) value = focus_spell.base[i]; break; case SE_FcDamageAmtIncoming: - if(type == focusFcDamageAmtIncoming) + if (type == focusFcDamageAmtIncoming) value = focus_spell.base[i]; break; case SE_FcHealAmtIncoming: - if(type == focusFcHealAmtIncoming) + if (type == focusFcHealAmtIncoming) value = focus_spell.base[i]; break; case SE_FcDamagePctCrit: - if(type == focusFcDamagePctCrit) + if (type == focusFcDamagePctCrit) value = focus_spell.base[i]; break; @@ -5075,17 +5044,17 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo break; case SE_FcHealAmtCrit: - if(type == focusFcHealAmtCrit) + if (type == focusFcHealAmtCrit) value = focus_spell.base[i]; break; - case SE_FcHealAmt: - if(type == focusFcHealAmt) + case SE_FcHealAmt: + if (type == focusFcHealAmt) value = focus_spell.base[i]; break; case SE_FcHealPctIncoming: - if(type == focusFcHealPctIncoming) + if (type == focusFcHealPctIncoming) value = focus_spell.base[i]; break; @@ -5095,51 +5064,51 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo break; case SE_FcIncreaseNumHits: - if(type == focusIncreaseNumHits) + if (type == focusIncreaseNumHits) value = focus_spell.base[i]; break; case SE_FcLimitUse: - if(type == focusFcLimitUse) + if (type == focusFcLimitUse) value = focus_spell.base[i]; break; case SE_FcMute: - if(type == focusFcMute) + if (type == focusFcMute) value = focus_spell.base[i]; break; case SE_FcStunTimeMod: - if(type == focusFcStunTimeMod) + if (type == focusFcStunTimeMod) value = focus_spell.base[i]; break; case SE_FcTimerRefresh: - if(type == focusFcTimerRefresh) + if (type == focusFcTimerRefresh) value = focus_spell.base[i]; break; #if EQDEBUG >= 6 - //this spits up a lot of garbage when calculating spell focuses - //since they have all kinds of extra effects on them. + // this spits up a lot of garbage when calculating spell focuses + // since they have all kinds of extra effects on them. default: - Log.Out(Logs::General, Logs::Normal, "CalcFocusEffect: unknown effectid %d", focus_spell.effectid[i]); + Log.Out(Logs::General, Logs::Normal, "CalcFocusEffect: unknown effectid %d", + focus_spell.effectid[i]); #endif } - } - for(int e = 0; e < MaxLimitInclude; e+=2) { - if (LimitInclude[e] && !LimitInclude[e+1]) + for (int e = 0; e < MaxLimitInclude; e += 2) { + if (LimitInclude[e] && !LimitInclude[e + 1]) return 0; } - if (Caston_spell_id){ - if(IsValidSpell(Caston_spell_id) && (Caston_spell_id != spell_id)) + if (Caston_spell_id) { + if (IsValidSpell(Caston_spell_id) && (Caston_spell_id != spell_id)) SpellFinished(Caston_spell_id, this, 10, 0, -1, spells[Caston_spell_id].ResistDiff); } - return(value*lvlModifier/100); + return (value * lvlModifier / 100); } uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) { @@ -5501,26 +5470,24 @@ int16 Client::GetFocusEffect(focusType type, uint16 spell_id) { if (aabonuses.FocusEffects[type]){ int16 Total3 = 0; - uint32 slots = 0; - uint32 aa_AA = 0; - uint32 aa_value = 0; - //aa old - //for (int i = 0; i < MAX_PP_AA_ARRAY; i++) - //{ - // aa_AA = this->aa[i]->AA; - // aa_value = this->aa[i]->value; - // if (aa_AA < 1 || aa_value < 1) - // continue; - // - // Total3 = CalcAAFocus(type, aa_AA, spell_id); - // if (Total3 > 0 && realTotal3 >= 0 && Total3 > realTotal3) { - // realTotal3 = Total3; - // } - // else if (Total3 < 0 && Total3 < realTotal3) { - // realTotal3 = Total3; - // } - //} + for (const auto &aa : aa_ranks) { + auto ability = zone->GetAlternateAdvancementAbility(aa.first); + if (!ability) + continue; + + auto rank = ability->GetRankByPointsSpent(aa.second.first); + if (!rank || rank->effects.empty()) + continue; + + Total3 = CalcAAFocus(type, *rank, spell_id); + if (Total3 > 0 && realTotal3 >= 0 && Total3 > realTotal3) { + realTotal3 = Total3; + } + else if (Total3 < 0 && Total3 < realTotal3) { + realTotal3 = Total3; + } + } } if(type == focusReagentCost && IsSummonPetSpell(spell_id) && GetAA(aaElementalPact)) From 4898bfd822cf1bb08ba6549b7f6c9ab5a1bfbb20 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sat, 13 Jun 2015 02:12:17 -0400 Subject: [PATCH 17/48] Fix focusReagenCost for pets All focus seem to use 33 ... --- zone/spell_effects.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 0bb7b78b9..7fcba77e9 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -4332,8 +4332,14 @@ int16 Client::CalcAAFocus(focusType type, const AA::Rank &rank, uint16 spell_id) LimitFailure = true; } else { LimitInclude[4] = true; - if (IsEffectInSpell(spell_id, base1)) // Include - LimitInclude[5] = true; + // they use 33 here for all classes ... unsure if the type check is really needed + if (base1 == SE_SummonPet && type == focusReagentCost) { + if (IsSummonPetSpell(spell_id) || IsSummonSkeletonSpell(spell_id)) + LimitInclude[5] = true; + } else { + if (IsEffectInSpell(spell_id, base1)) // Include + LimitInclude[5] = true; + } } break; @@ -5490,9 +5496,6 @@ int16 Client::GetFocusEffect(focusType type, uint16 spell_id) { } } - if(type == focusReagentCost && IsSummonPetSpell(spell_id) && GetAA(aaElementalPact)) - return 100; - if(type == focusReagentCost && (IsEffectInSpell(spell_id, SE_SummonItem) || IsSacrificeSpell(spell_id))) return 0; //Summon Spells that require reagents are typically imbue type spells, enchant metal, sacrifice and shouldn't be affected From 106e0c69abf140dd1b1f15daac2a4bf8e680dcc0 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sat, 13 Jun 2015 02:43:00 -0400 Subject: [PATCH 18/48] Added todo list to ApplyAABonuses Probably incomplete --- common/spdat.h | 20 ++++++++++---------- zone/bonuses.cpp | 24 ++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/common/spdat.h b/common/spdat.h index ab128a37c..a0c74c16a 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -381,24 +381,24 @@ typedef enum { #define SE_GiveDoubleAttack 225 // implemented[AA] - Allow any class to double attack with set chance. #define SE_TwoHandBash 226 // *not implemented as bonus #define SE_ReduceSkillTimer 227 // implemented -//#define SE_ReduceFallDamage 228 // not implented as bonus - reduce the damage that you take from falling +#define SE_ReduceFallDamage 228 // not implented as bonus - reduce the damage that you take from falling #define SE_PersistantCasting 229 // implemented -//#define SE_ExtendedShielding 230 // not used as bonus - increase range of /shield ability +#define SE_ExtendedShielding 230 // not used as bonus - increase range of /shield ability #define SE_StunBashChance 231 // implemented - increase chance to stun from bash. #define SE_DivineSave 232 // implemented (base1 == % chance on death to insta-res) (base2 == spell cast on save) #define SE_Metabolism 233 // implemented - Modifies food/drink consumption rates. -//#define SE_ReduceApplyPoisonTime 234 // not implemented as bonus - reduces the time to apply poison +#define SE_ReduceApplyPoisonTime 234 // not implemented as bonus - reduces the time to apply poison #define SE_ChannelChanceSpells 235 // implemented[AA] - chance to channel from SPELLS *No longer used on live. //#define SE_FreePet 236 // not used #define SE_GivePetGroupTarget 237 // implemented[AA] - (Pet Affinity) #define SE_IllusionPersistence 238 // implemented - lends persistence to your illusionary disguises, causing them to last until you die or the illusion is forcibly removed. -//#define SE_FeignedCastOnChance 239 // *not implemented as bonus - ability gives you an increasing chance for your feigned deaths to not be revealed by spells cast upon you. +#define SE_FeignedCastOnChance 239 // *not implemented as bonus - ability gives you an increasing chance for your feigned deaths to not be revealed by spells cast upon you. //#define SE_StringUnbreakable 240 // not used [Likely related to above - you become immune to feign breaking on a resisted spell and have a good chance of feigning through a spell that successfully lands upon you.] #define SE_ImprovedReclaimEnergy 241 // implemented - increase the amount of mana returned to you when reclaiming your pet. #define SE_IncreaseChanceMemwipe 242 // implemented - increases the chance to wipe hate with memory blurr #define SE_CharmBreakChance 243 // implemented - Total Domination #define SE_RootBreakChance 244 // implemented[AA] reduce the chance that your root will break. -//#define SE_TrapCircumvention 245 // *not implemented[AA] - decreases the chance that you will set off a trap when opening a chest +#define SE_TrapCircumvention 245 // *not implemented[AA] - decreases the chance that you will set off a trap when opening a chest #define SE_SetBreathLevel 246 // *not implemented as bonus #define SE_RaiseSkillCap 247 // *not implemented[AA] - adds skill over the skill cap. #define SE_SecondaryForte 248 // not implemented as bonus(gives you a 2nd specialize skill that can go past 50 to 100) @@ -408,9 +408,9 @@ typedef enum { #define SE_FrontalBackstabChance 252 // implemented[AA] - chance to perform a full damage backstab from front. #define SE_FrontalBackstabMinDmg 253 // implemented[AA] - allow a frontal backstab for mininum damage. #define SE_Blank 254 // implemented -//#define SE_ShieldDuration 255 // not implemented as bonus - increases duration of /shield -//#define SE_ShroudofStealth 256 // not implemented as bonus - rogue improved invs -//#define SE_PetDiscipline 257 // not implemented as bonus - /pet hold +#define SE_ShieldDuration 255 // not implemented as bonus - increases duration of /shield +#define SE_ShroudofStealth 256 // not implemented as bonus - rogue improved invs +#define SE_PetDiscipline 257 // not implemented as bonus - /pet hold #define SE_TripleBackstab 258 // implemented[AA] - chance to perform a triple backstab #define SE_CombatStability 259 // implemented[AA] - damage mitigation #define SE_AddSingingMod 260 // implemented[AA] - Instrument/Singing Mastery, base1 is the mod, base2 is the ItemType @@ -434,11 +434,11 @@ typedef enum { #define SE_FinishingBlow 278 // implemented[AA] - chance to do massive damage under 10% HP (base1 = chance, base2 = damage) #define SE_Flurry 279 // implemented #define SE_PetFlurry 280 // implemented[AA] -//#define SE_FeignedMinion 281 // *not implemented[AA] ability allows you to instruct your pet to feign death via the '/pet feign' command. value = succeed chance +#define SE_FeignedMinion 281 // *not implemented[AA] ability allows you to instruct your pet to feign death via the '/pet feign' command. value = succeed chance #define SE_ImprovedBindWound 282 // implemented[AA] - increase bind wound amount by percent. #define SE_DoubleSpecialAttack 283 // implemented[AA] - Chance to perform second special attack as monk //#define SE_LoHSetHeal 284 // not used -//#define SE_NimbleEvasion 285 // *not implemented - base1 = 100 for max +#define SE_NimbleEvasion 285 // *not implemented - base1 = 100 for max #define SE_FcDamageAmt 286 // implemented - adds direct spell damage #define SE_SpellDurationIncByTic 287 // implemented #define SE_SkillAttackProc 288 // implemented[AA] - Chance to proc spell on skill attack usage (ex. Dragon Punch) diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index 23a896979..8e7b56721 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -816,8 +816,6 @@ void Client::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) break; } break; - case SE_PetDiscipline2: - break; case SE_SpellSlotIncrease: break; case SE_MysticalAttune: @@ -1392,6 +1390,10 @@ void Client::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) newbon->ATK += base1; break; // to do + case SE_PetDiscipline: + break; + case SE_PetDiscipline2: + break; case SE_ReduceTradeskillFail: break; case SE_PotionBeltSlots: @@ -1404,7 +1406,25 @@ void Client::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) break; case SE_SecondaryForte: break; + case SE_FeignedCastOnChance: + break; + case SE_ExtendedShielding: + break; + case SE_ShieldDuration: + break; + case SE_ReduceApplyPoisonTime: + break; + case SE_NimbleEvasion: + break; + case SE_TrapCircumvention: + break; + case SE_ShroudofStealth: + break; + case SE_FeignedMinion: + break; + // handled client side + case SE_ReduceFallDamage: // not handled here case SE_HastenedAASkill: // not handled here but don't want to clutter debug log -- these may need to be verified to ignore From 121af489c4c094fc5c6056f48f145bdae4a44dae Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sat, 13 Jun 2015 17:53:21 -0400 Subject: [PATCH 19/48] Support for Eyes Wide Open This probably needs testing on older clients ... --- common/spdat.h | 2 +- zone/bonuses.cpp | 6 ++++++ zone/common.h | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/common/spdat.h b/common/spdat.h index a0c74c16a..24e982aee 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -579,7 +579,7 @@ typedef enum { #define SE_LimitUseType 423 // implemented - limit a focus to require a certain numhits type #define SE_GravityEffect 424 // implemented - Pulls/pushes you toward/away the mob at a set pace //#define SE_Display 425 // *not implemented - Illusion: Flying Dragon(21626) -//#define SE_IncreaseExtTargetWindow 426 // *not implmented[AA] - increases the capacity of your extended target window +#define SE_IncreaseExtTargetWindow 426 // *not implmented[AA] - increases the capacity of your extended target window #define SE_SkillProc 427 // implemented - chance to proc when using a skill(ie taunt) #define SE_LimitToSkill 428 // implemented - limits what skills will effect a skill proc #define SE_SkillProcSuccess 429 // implemented - chance to proc when tje skill in use successfully fires. diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index 8e7b56721..b0c48f205 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -113,6 +113,9 @@ void Client::CalcBonuses() rooted = FindType(SE_Root); XPRate = 100 + spellbonuses.XPRateMod; + + if (GetMaxXTargets() != 5 + aabonuses.extra_xtargets) + SetMaxXTargets(5 + aabonuses.extra_xtargets); } int Client::CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat) @@ -1389,6 +1392,9 @@ void Client::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_ATK: newbon->ATK += base1; break; + case SE_IncreaseExtTargetWindow: + newbon->extra_xtargets += base1; + break; // to do case SE_PetDiscipline: break; diff --git a/zone/common.h b/zone/common.h index e658a352d..d21a0039d 100644 --- a/zone/common.h +++ b/zone/common.h @@ -461,6 +461,7 @@ struct StatBonuses { uint8 AssassinateLevel; // Max Level Assassinate will be effective at. int32 PetMeleeMitigation; // Add AC to owner's pet. bool IllusionPersistence; // Causes illusions not to fade. + uint16 extra_xtargets; // extra xtarget entries }; typedef struct From 335470d3dbe040b8de5be739c270c7ea103d9308 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sat, 13 Jun 2015 22:49:32 -0400 Subject: [PATCH 20/48] Port up AA sympathetic procs --- zone/spell_effects.cpp | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 7fcba77e9..c78e80be8 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -5202,33 +5202,29 @@ uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) { /*Note: At present, ff designing custom AA to have a sympathetic proc effect, only use one focus effect within the aa_effects data for each AA*[No live AA's use this effect to my knowledge]*/ - if (aabonuses.FocusEffects[type]){ + if (aabonuses.FocusEffects[type]) { + for (const auto &aa : aa_ranks) { + if (SympatheticProcList.size() > MAX_SYMPATHETIC_PROCS) + break; - uint32 aa_AA = 0; - uint32 aa_value = 0; + auto ability = zone->GetAlternateAdvancementAbility(aa.first); + if (!ability) + continue; - //aa old - //for (int i = 0; i < MAX_PP_AA_ARRAY; i++) - //{ - // aa_AA = this->aa[i]->AA; - // aa_value = this->aa[i]->value; - // if (aa_AA < 1 || aa_value < 1) - // continue; - // - // if (SympatheticProcList.size() > MAX_SYMPATHETIC_PROCS) - // continue; - // - // proc_spellid = CalcAAFocus(type, aa_AA, spell_id); - // - // if (IsValidSpell(proc_spellid)){ - // ProcChance = GetSympatheticProcChances(spell_id, GetAABase1(aa_AA, 1)); - // if(zone->random.Roll(ProcChance)) - // SympatheticProcList.push_back(proc_spellid); - // } - //} + auto rank = ability->GetRankByPointsSpent(aa.second.first); + if (!rank || rank->effects.empty()) + continue; + + proc_spellid = CalcAAFocus(type, *rank, spell_id); + if (IsValidSpell(proc_spellid)) { + ProcChance = GetSympatheticProcChances(spell_id, rank->effects[0].base1); + if (zone->random.Roll(ProcChance)) + SympatheticProcList.push_back(proc_spellid); + } + } } - if (SympatheticProcList.size() > 0) + if (!SympatheticProcList.empty()) { uint8 random = zone->random.Int(0, SympatheticProcList.size()-1); int FinalSympatheticProc = SympatheticProcList[random]; From 34f01064379c192fcf9099b78bb1bb2c098791a0 Mon Sep 17 00:00:00 2001 From: KimLS Date: Mon, 15 Jun 2015 13:57:18 -0700 Subject: [PATCH 21/48] Added reset aa command for rof2 (50 status req), fixed #resetaa command --- common/emu_oplist.h | 1 + utils/patches/patch_RoF2.conf | 1 + zone/aa.cpp | 116 ++++++++++++++++------------------ zone/client_packet.cpp | 10 ++- zone/client_packet.h | 1 + zone/command.cpp | 24 +++---- 6 files changed, 72 insertions(+), 81 deletions(-) diff --git a/common/emu_oplist.h b/common/emu_oplist.h index e4793826e..4ef1761bd 100644 --- a/common/emu_oplist.h +++ b/common/emu_oplist.h @@ -548,4 +548,5 @@ N(OP_ZoneServerInfo), N(OP_ZoneServerReady), N(OP_ZoneSpawns), N(OP_ZoneUnavail), +N(OP_ResetAA), // mail and chat opcodes located in ../mail_oplist.h diff --git a/utils/patches/patch_RoF2.conf b/utils/patches/patch_RoF2.conf index 1ebf05442..b22cc66d5 100644 --- a/utils/patches/patch_RoF2.conf +++ b/utils/patches/patch_RoF2.conf @@ -353,6 +353,7 @@ OP_OpenContainer=0x0000 OP_Marquee=0x502e OP_ItemRecastDelay=0x15a9 #OP_OpenInventory=0x0000 # Likely does not exist in RoF -U +OP_ResetAA=0x1669 # Expeditions OP_DzAddPlayer=0x4701 diff --git a/zone/aa.cpp b/zone/aa.cpp index cf2fb0685..c2a3d63cf 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -482,40 +482,35 @@ bool Client::CheckAAEffect(aaEffectType type) { return(false); } -void Client::ResetAA(){ -// RefundAA(); -// uint32 i; -// for (i=0; i < MAX_PP_AA_ARRAY; i++) { -// aa[i]->AA = 0; -// aa[i]->value = 0; -// aa[i]->charges = 0; -// m_pp.aa_array[i].AA = 0; -// m_pp.aa_array[i].value = 0; -// m_pp.aa_array[i].charges= 0; -// } -// -// std::map::iterator itr; -// for(itr = aa_points.begin(); itr != aa_points.end(); ++itr) -// aa_points[itr->first] = 0; -// -// for(int i = 0; i < _maxLeaderAA; ++i) -// m_pp.leader_abilities.ranks[i] = 0; -// -// m_pp.group_leadership_points = 0; -// m_pp.raid_leadership_points = 0; -// m_pp.group_leadership_exp = 0; -// m_pp.raid_leadership_exp = 0; -// -// database.DeleteCharacterAAs(this->CharacterID()); -// SaveAA(); -// SendClearAA(); -// SendAAList(); -// SendAATable(); -// SendAAStats(); -// database.DeleteCharacterLeadershipAAs(this->CharacterID()); -// // undefined for these clients -// if (GetClientVersionBit() & BIT_TitaniumAndEarlier) -// Kick(); +void Client::ResetAA() { + RefundAA(); + uint32 i; + for (i=0; i < MAX_PP_AA_ARRAY; i++) { + m_pp.aa_array[i].AA = 0; + m_pp.aa_array[i].value = 0; + m_pp.aa_array[i].charges= 0; + } + + aa_ranks.clear(); + + for(int i = 0; i < _maxLeaderAA; ++i) + m_pp.leader_abilities.ranks[i] = 0; + + m_pp.group_leadership_points = 0; + m_pp.raid_leadership_points = 0; + m_pp.group_leadership_exp = 0; + m_pp.raid_leadership_exp = 0; + + database.DeleteCharacterAAs(CharacterID()); + SaveAA(); + SendClearAA(); + SendAlternateAdvancementTable(); + SendAlternateAdvancementPoints(); + SendAlternateAdvancementStats(); + database.DeleteCharacterLeadershipAAs(this->CharacterID()); + // undefined for these clients + if (GetClientVersionBit() & BIT_TitaniumAndEarlier) + Kick(); } void Client::SendClearAA() @@ -802,34 +797,31 @@ void Client::DurationRampage(uint32 duration) } void Client::RefundAA() { -// int cur = 0; -// bool refunded = false; -// -// for(int x = 0; x < aaHighestID; x++) { -// cur = GetAA(x); -// if(cur > 0){ -// SendAA_Struct* curaa = zone->FindAA(x); -// if(cur){ -// SetAA(x, 0); -// for(int j = 0; j < cur; j++) { -// m_pp.aapoints += curaa->cost + (curaa->cost_inc * j); -// refunded = true; -// } -// } -// else -// { -// m_pp.aapoints += cur; -// SetAA(x, 0); -// refunded = true; -// } -// } -// } -// -// if(refunded) { -// SaveAA(); -// Save(); -// // Kick(); -// } + int refunded = 0; + + for(auto &rank_value : aa_ranks) { + AA::Ability *ability = zone->GetAlternateAdvancementAbility(rank_value.first); + if(!ability) { + continue; + } + + if(ability->charges > 0 && rank_value.second.second < 1) { + continue; + } + + AA::Rank *rank = ability->GetRankByPointsSpent(rank_value.second.first); + if(!rank) { + continue; + } + + refunded += rank->total_cost; + } + + if(refunded > 0) { + m_pp.aapoints += refunded; + SaveAA(); + Save(); + } } AA_SwarmPetInfo::AA_SwarmPetInfo() diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index b76c11d8c..d01bcf109 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -389,6 +389,7 @@ void MapOpcodes() ConnectedOpcodes[OP_XTargetRequest] = &Client::Handle_OP_XTargetRequest; ConnectedOpcodes[OP_YellForHelp] = &Client::Handle_OP_YellForHelp; ConnectedOpcodes[OP_ZoneChange] = &Client::Handle_OP_ZoneChange; + ConnectedOpcodes[OP_ResetAA] = &Client::Handle_OP_ResetAA; } void ClearMappedOpcode(EmuOpcode op) @@ -14163,9 +14164,12 @@ void Client::Handle_OP_YellForHelp(const EQApplicationPacket *app) return; } -/* -void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) +void Client::Handle_OP_ResetAA(const EQApplicationPacket *app) { + if(Admin() >= 50) { + Message(0, "Resetting AA points."); + ResetAA(); + } return; } -*/ + diff --git a/zone/client_packet.h b/zone/client_packet.h index 1a9591f4c..a39e3fb74 100644 --- a/zone/client_packet.h +++ b/zone/client_packet.h @@ -295,3 +295,4 @@ void Handle_OP_XTargetRequest(const EQApplicationPacket *app); void Handle_OP_YellForHelp(const EQApplicationPacket *app); void Handle_OP_ZoneChange(const EQApplicationPacket *app); + void Handle_OP_ResetAA(const EQApplicationPacket *app); diff --git a/zone/command.cpp b/zone/command.cpp index 0554a5e68..16f50e7d7 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -332,7 +332,7 @@ int command_init(void) { command_add("reloadzonepoints", "- Reload zone points from database", 150, command_reloadzps) || command_add("reloadzps", nullptr,0, command_reloadzps) || command_add("repop", "[delay] - Repop the zone with optional delay", 100, command_repop) || - command_add("resetaa", "- Resets a Player's AA in their profile and refunds spent AA's to unspent, disconnects player.", 200, command_resetaa) || + command_add("resetaa", "- Resets a Player's AA in their profile and refunds spent AA's to unspent, may disconnect player.", 200, command_resetaa) || command_add("revoke", "[charname] [1/0] - Makes charname unable to talk on OOC", 200, command_revoke) || command_add("rules", "(subcommand) - Manage server rules", 250, command_rules) || command_add("save", "- Force your player or player corpse target to be saved to the database", 50, command_save) || @@ -671,21 +671,13 @@ void command_incstat(Client* c, const Seperator* sep){ } } -void command_resetaa(Client* c,const Seperator *sep){ - - //if(sep->IsNumber(1) && atoi(sep->arg[1]) == 1) { - // c->SendAlternateAdvancement(2, 2); - //} - //else if(sep->IsNumber(1) && atoi(sep->arg[1]) == 2) { - // c->SendAlternateAdvancement(2, 3); - //} - - //if(c->GetTarget()!=0 && c->GetTarget()->IsClient()){ - // c->GetTarget()->CastToClient()->ResetAA(); - // c->Message(13,"Successfully reset %s's AAs", c->GetTarget()->GetName()); - //} - //else - // c->Message(0,"Usage: Target a client and use #resetaa to reset the AA data in their Profile."); +void command_resetaa(Client* c,const Seperator *sep) { + if(c->GetTarget() && c->GetTarget()->IsClient()){ + c->GetTarget()->CastToClient()->ResetAA(); + c->Message(13,"Successfully reset %s's AAs", c->GetTarget()->GetName()); + } + else + c->Message(0,"Usage: Target a client and use #resetaa to reset the AA data in their Profile."); } void command_help(Client *c, const Seperator *sep) From a984e9bd7c116a07085e279c7745766d43bfbe76 Mon Sep 17 00:00:00 2001 From: KimLS Date: Mon, 15 Jun 2015 15:09:06 -0700 Subject: [PATCH 22/48] Some cleanup as well as fix for a certain type of aa proc --- zone/aa.cpp | 65 +++++++++++++++++++++++++++------------ zone/attack.cpp | 70 ++++++++++++++++++++++-------------------- zone/bonuses.cpp | 14 +++++---- zone/client.h | 24 ++++++--------- zone/mob.h | 1 + zone/perl_client.cpp | 29 +---------------- zone/spell_effects.cpp | 63 ++++++++++--------------------------- zone/zone.h | 1 + 8 files changed, 120 insertions(+), 147 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index c2a3d63cf..1f0b5b086 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -800,7 +800,10 @@ void Client::RefundAA() { int refunded = 0; for(auto &rank_value : aa_ranks) { - AA::Ability *ability = zone->GetAlternateAdvancementAbility(rank_value.first); + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(rank_value.first, rank_value.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + if(!ability) { continue; } @@ -809,11 +812,6 @@ void Client::RefundAA() { continue; } - AA::Rank *rank = ability->GetRankByPointsSpent(rank_value.second.first); - if(!rank) { - continue; - } - refunded += rank->total_cost; } @@ -864,20 +862,19 @@ void Client::SendAlternateAdvancementTable() { void Client::SendAlternateAdvancementRank(int aa_id, int level) { if(!zone) return; - - AA::Ability *ability = zone->GetAlternateAdvancementAbility(aa_id); - if(!ability) + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa_id, level); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!ability) { return; + } if(!(ability->classes & (1 << GetClass()))) { return; } - AA::Rank *rank = ability->GetRankByPointsSpent(level); - if(!rank) - return; - if(!CanUseAlternateAdvancementRank(rank)) { return; } @@ -1224,13 +1221,11 @@ int Mob::GetAlternateAdvancementCooldownReduction(AA::Rank *rank_in) { } for(auto &aa : aa_ranks) { - AA::Ability *ability = zone->GetAlternateAdvancementAbility(aa.first); - if(!ability) { - continue; - } + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa.first, aa.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; - AA::Rank *rank = ability->GetRankByPointsSpent(aa.second.first); - if(!rank) { + if(!ability) { continue; } @@ -1328,6 +1323,21 @@ AA::Rank *Zone::GetAlternateAdvancementRank(int rank_id) { return nullptr; } +std::pair Zone::GetAlternateAdvancementAbilityAndRank(int id, int points_spent) { + AA::Ability *ability = GetAlternateAdvancementAbility(id); + + if(!ability) { + return std::make_pair(nullptr, nullptr); + } + + AA::Rank *rank = ability->GetRankByPointsSpent(points_spent); + if(!rank) { + return std::make_pair(nullptr, nullptr); + } + + return std::make_pair(ability, rank); +} + uint32 Mob::GetAA(uint32 rank_id, uint32 *charges) const { if(zone) { AA::Ability *ability = zone->GetAlternateAdvancementAbilityByRank(rank_id); @@ -1345,6 +1355,23 @@ uint32 Mob::GetAA(uint32 rank_id, uint32 *charges) const { return 0; } +uint32 Mob::GetAAByAAID(uint32 aa_id, uint32 *charges) const { + if(zone) { + AA::Ability *ability = zone->GetAlternateAdvancementAbility(aa_id); + + if(!ability) + return 0; + + auto iter = aa_ranks.find(ability->id); + if(iter != aa_ranks.end()) { + if(charges) { + *charges = iter->second.second; + } + return iter->second.first; + } + } +} + bool Mob::SetAA(uint32 rank_id, uint32 new_value, uint32 charges) { if(zone) { AA::Ability *ability = zone->GetAlternateAdvancementAbilityByRank(rank_id); diff --git a/zone/attack.cpp b/zone/attack.cpp index cecf37ff1..fda7837ab 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -4647,7 +4647,7 @@ void Mob::TrySkillProc(Mob *on, uint16 skill, uint16 ReuseTime, bool Success, ui if (IsClient() && aabonuses.LimitToSkill[skill]){ CanProc = true; - uint32 effect = 0; + uint32 effect_id = 0; int32 base1 = 0; int32 base2 = 0; uint32 slot = 0; @@ -4666,39 +4666,43 @@ void Mob::TrySkillProc(Mob *on, uint16 skill, uint16 ReuseTime, bool Success, ui proc_spell_id = 0; ProcMod = 0; - //old AA - //std::map >::const_iterator find_iter = aa_effects.find(aaid); - //if(find_iter == aa_effects.end()) - // break; + for(auto &rank_info : aa_ranks) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(rank_info.first, rank_info.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; - //for (std::map::const_iterator iter = aa_effects[aaid].begin(); iter != aa_effects[aaid].end(); ++iter) { - // effect = iter->second.skill_id; - // base1 = iter->second.base1; - // base2 = iter->second.base2; - // slot = iter->second.slot; - // - // if (effect == SE_SkillProc || effect == SE_SkillProcSuccess) { - // proc_spell_id = base1; - // ProcMod = static_cast(base2); - // } - // - // else if (effect == SE_LimitToSkill && base1 <= HIGHEST_SKILL) { - // - // if (CanProc && base1 == skill && IsValidSpell(proc_spell_id)) { - // float final_chance = chance * (ProcMod / 100.0f); - // - // if (zone->random.Roll(final_chance)) { - // ExecWeaponProc(nullptr, proc_spell_id, on); - // CanProc = false; - // break; - // } - // } - // } - // else { - // proc_spell_id = 0; - // ProcMod = 0; - // } - //} + if(!ability) { + continue; + } + + for(auto &effect : rank->effects) { + effect_id = effect.effect_id; + base1 = effect.base1; + base2 = effect.base2; + slot = effect.slot; + + if(effect_id == SE_SkillProc || effect_id == SE_SkillProcSuccess) { + proc_spell_id = base1; + ProcMod = static_cast(base2); + } + else if(effect_id == SE_LimitToSkill && base1 <= HIGHEST_SKILL) { + + if (CanProc && base1 == skill && IsValidSpell(proc_spell_id)) { + float final_chance = chance * (ProcMod / 100.0f); + + if (zone->random.Roll(final_chance)) { + ExecWeaponProc(nullptr, proc_spell_id, on); + CanProc = false; + break; + } + } + } + else { + proc_spell_id = 0; + ProcMod = 0; + } + } + } } } } diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index b0c48f205..6d12b1eac 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -640,14 +640,16 @@ void Client::CalcAABonuses(StatBonuses *newbon) memset(newbon, 0, sizeof(StatBonuses)); // start fresh for (const auto &aa : aa_ranks) { - auto ability = zone->GetAlternateAdvancementAbility(aa.first); - // zone doesn't know about this! bad data some where - if (!ability) - continue; + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa.first, aa.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!ability) { + continue; + } - auto rank = ability->GetRankByPointsSpent(aa.second.first); // bad data or no effects - if (!rank || rank->effects.empty()) + if (rank->effects.empty()) continue; ApplyAABonuses(*rank, newbon); diff --git a/zone/client.h b/zone/client.h index 014747576..e830edfa8 100644 --- a/zone/client.h +++ b/zone/client.h @@ -774,27 +774,23 @@ public: void AddAAPoints(uint32 points) { m_pp.aapoints += points; SendAlternateAdvancementStats(); } int GetAAPoints() { return m_pp.aapoints; } int GetSpentAA() { return m_pp.aapoints_spent; } - - //old AA Methods + + //old AA methods that we still use void ResetAA(); + void RefundAA(); void SendClearAA(); - //this function is used by some AA stuff - void MemorizeSpell(uint32 slot,uint32 spellid,uint32 scribing); - void SetAATitle(const char *Title); - void SetTitleSuffix(const char *txt); inline uint32 GetMaxAAXP(void) const { return max_AAXP; } inline uint32 GetAAXP() const { return m_pp.expAA; } + int16 CalcAAFocus(focusType type, const AA::Rank &rank, uint16 spell_id); + void SetAATitle(const char *Title); + void SetTitleSuffix(const char *txt); + + //old AA Methods that are slated for removal + void MemorizeSpell(uint32 slot,uint32 spellid,uint32 scribing); void EnableAAEffect(aaEffectType type, uint32 duration = 0); void DisableAAEffect(aaEffectType type); bool CheckAAEffect(aaEffectType type); - void HandleAAAction(aaID activate); - int16 CalcAAFocusEffect(focusType type, uint16 focus_spell, uint16 spell_id); - int16 CalcAAFocus(focusType type, const AA::Rank &rank, uint16 spell_id); - void RefundAA(); - int32 GetAAEffectDataBySlot(uint32 aa_ID, uint32 slot_id, bool GetEffect, bool GetBase1, bool GetBase2); - int32 GetAAEffectid(uint32 aa_ID, uint32 slot_id) { return GetAAEffectDataBySlot(aa_ID, slot_id, true, false,false); } - int32 GetAABase1(uint32 aa_ID, uint32 slot_id) { return GetAAEffectDataBySlot(aa_ID, slot_id, false, true,false); } - int32 GetAABase2(uint32 aa_ID, uint32 slot_id) { return GetAAEffectDataBySlot(aa_ID, slot_id, false, false,true); } + int32 acmod(); // Item methods diff --git a/zone/mob.h b/zone/mob.h index ed5d68c2c..3e4f5ea39 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -960,6 +960,7 @@ public: //aa new uint32 GetAA(uint32 rank_id, uint32 *charges = nullptr) const; + uint32 GetAAByAAID(uint32 aa_id, uint32 *charges = nullptr) const; bool SetAA(uint32 rank_id, uint32 new_value, uint32 charges = 0); void ClearAAs() { aa_ranks.clear(); } bool CanUseAlternateAdvancementRank(AA::Rank *rank); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index 95fc146ae..eea9918cd 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -4077,34 +4077,7 @@ XS(XS_Client_RefundAA) { if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - //old aa - //int curpt = 0; - //bool refunded = false; - // - //for(int x1=0;x1GetAA(x1); - // if(curpt > 0){ - // SendAA_Struct* curaa = zone->FindAA(x1); - // if(curaa){ - // THIS->SetAA(x1, 0); - // for(int x2=0;x2GetPP().aapoints += curaa->cost + (curaa->cost_inc * x2); - // refunded = true; - // } - // } - // else //aa doesn't exist.. but if they bought it then it had at least a cost of 1 point each - // { //so give back what we can - // THIS->GetPP().aapoints += curpt; - // THIS->SetAA(x1, 0); - // refunded = true; - // } - // } - //} - // - //if(refunded){ - // THIS->Save(); //save of course - // THIS->Kick(); //client gets all buggy if we don't immediatly relog so just force it on them - //} + THIS->RefundAA(); } XSRETURN_EMPTY; } diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index c78e80be8..a7c5643a1 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -4149,43 +4149,6 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses) CalcBonuses(); } -int32 Client::GetAAEffectDataBySlot(uint32 aa_ID, uint32 slot_id, bool GetEffect, bool GetBase1, bool GetBase2) -{ - int32 aa_effects_data[3] = { 0 }; - uint32 effect = 0; - int32 base1 = 0; - int32 base2 = 0; - uint32 slot = 0; - - //old aa - //std::map >::const_iterator find_iter = aa_effects.find(aa_ID); - //if(find_iter == aa_effects.end()) - // return 0; - // - //for (std::map::const_iterator iter = aa_effects[aa_ID].begin(); iter != aa_effects[aa_ID].end(); ++iter) - //{ - // effect = iter->second.skill_id; - // base1 = iter->second.base1; - // base2 = iter->second.base2; - // slot = iter->second.slot; - // - // if (slot && slot == slot_id) { - // - // if (GetEffect) - // return effect; - // - // if (GetBase1) - // return base1; - // - // if (GetBase2) - // return base2; - // } - //} - - return 0; -} - - int16 Client::CalcAAFocus(focusType type, const AA::Rank &rank, uint16 spell_id) { const SPDat_Spell_Struct &spell = spells[spell_id]; @@ -5207,12 +5170,15 @@ uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) { if (SympatheticProcList.size() > MAX_SYMPATHETIC_PROCS) break; - auto ability = zone->GetAlternateAdvancementAbility(aa.first); - if (!ability) - continue; + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa.first, aa.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; - auto rank = ability->GetRankByPointsSpent(aa.second.first); - if (!rank || rank->effects.empty()) + if(!ability) { + continue; + } + + if (rank->effects.empty()) continue; proc_spellid = CalcAAFocus(type, *rank, spell_id); @@ -5474,12 +5440,15 @@ int16 Client::GetFocusEffect(focusType type, uint16 spell_id) { int16 Total3 = 0; for (const auto &aa : aa_ranks) { - auto ability = zone->GetAlternateAdvancementAbility(aa.first); - if (!ability) - continue; + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa.first, aa.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; - auto rank = ability->GetRankByPointsSpent(aa.second.first); - if (!rank || rank->effects.empty()) + if(!ability) { + continue; + } + + if (rank->effects.empty()) continue; Total3 = CalcAAFocus(type, *rank, spell_id); diff --git a/zone/zone.h b/zone/zone.h index a4a49b8b2..94bba72e4 100644 --- a/zone/zone.h +++ b/zone/zone.h @@ -119,6 +119,7 @@ public: AA::Ability *GetAlternateAdvancementAbility(int id); AA::Ability *GetAlternateAdvancementAbilityByRank(int rank_id); AA::Rank *GetAlternateAdvancementRank(int rank_id); + std::pair GetAlternateAdvancementAbilityAndRank(int id, int points_spent); void LoadZoneDoors(const char* zone, int16 version); bool LoadZoneObjects(); From 1b088b7157c4e120fd598890b37474e584c6e3b4 Mon Sep 17 00:00:00 2001 From: KimLS Date: Tue, 16 Jun 2015 11:34:43 -0700 Subject: [PATCH 23/48] AA bonus calc -> Mob from Client, Bots should now work with their aa stuff again (untested) --- zone/bonuses.cpp | 15 +- zone/bot.cpp | 1533 ++++++++++++++-------------------------------- zone/bot.h | 5 +- zone/client.h | 2 - zone/mob.h | 2 + 5 files changed, 463 insertions(+), 1094 deletions(-) diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index 6d12b1eac..c19755aae 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -42,6 +42,7 @@ void Mob::CalcBonuses() { CalcSpellBonuses(&spellbonuses); + CalcAABonuses(&aabonuses); CalcMaxHP(); CalcMaxMana(); SetAttackTimer(); @@ -51,9 +52,7 @@ void Mob::CalcBonuses() void NPC::CalcBonuses() { - Mob::CalcBonuses(); - memset(&aabonuses, 0, sizeof(StatBonuses)); - + memset(&itembonuses, 0, sizeof(StatBonuses)); if(RuleB(NPC, UseItemBonusesForNonPets)){ memset(&itembonuses, 0, sizeof(StatBonuses)); CalcItemBonuses(&itembonuses); @@ -74,12 +73,8 @@ void Client::CalcBonuses() memset(&itembonuses, 0, sizeof(StatBonuses)); CalcItemBonuses(&itembonuses); CalcEdibleBonuses(&itembonuses); - CalcSpellBonuses(&spellbonuses); - - Log.Out(Logs::Detail, Logs::AA, "Calculating AA Bonuses for %s.", this->GetCleanName()); - CalcAABonuses(&aabonuses); //we're not quite ready for this - Log.Out(Logs::Detail, Logs::AA, "Finished calculating AA Bonuses for %s.", this->GetCleanName()); + CalcAABonuses(&aabonuses); ProcessItemCaps(); // caps that depend on spell/aa bonuses @@ -635,7 +630,7 @@ void Client::CalcEdibleBonuses(StatBonuses* newbon) { } } -void Client::CalcAABonuses(StatBonuses *newbon) +void Mob::CalcAABonuses(StatBonuses *newbon) { memset(newbon, 0, sizeof(StatBonuses)); // start fresh @@ -659,7 +654,7 @@ void Client::CalcAABonuses(StatBonuses *newbon) //A lot of the normal spell functions (IsBlankSpellEffect, etc) are set for just spells (in common/spdat.h). //For now, we'll just put them directly into the code and comment with the corresponding normal function //Maybe we'll fix it later? :-D -void Client::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) +void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) { if (rank.effects.empty()) // sanity check. why bother if no slots to fill? return; diff --git a/zone/bot.cpp b/zone/bot.cpp index 5200f3e95..ea6739c79 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -193,7 +193,7 @@ Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double to GenerateBaseStats(); LoadTimers(); - //LoadAAs(); old aa, replace this + LoadAAs(); LoadBuffs(); CalcBotStats(false); @@ -1424,668 +1424,41 @@ int32 Bot::GenerateBaseHitPoints() return new_base_hp; } -void Bot::GenerateAABonuses(StatBonuses* newbon) { - // General AA bonus - uint8 botClass = GetClass(); - uint8 botLevel = GetLevel(); +void Bot::LoadAAs() { + int maxAAExpansion = RuleI(Bots, BotAAExpansion); //get expansion to get AAs up to + aa_ranks.clear(); - memset(newbon, 0, sizeof(StatBonuses)); //start fresh - //old aa - //if(botLevel >= 51) { - // //level 51 = 1 AA level - // - // int i; - // int totalAAs = database.CountAAs(); - // uint32 slots = 0; - // uint32 aa_AA = 0; - // uint32 aa_value = 0; - // for (i = 0; i < totalAAs; i++) { //iterate through all of the client's AAs - // std::map::iterator aa = botAAs.find(i); - // if(aa != botAAs.end()) { // make sure aa exists or we'll crash zone - // aa_AA = aa->second.aa_id; //same as aaid from the aa_effects table - // aa_value = aa->second.total_levels; //how many points in it - // if (aa_AA > 0 || aa_value > 0) { //do we have the AA? if 1 of the 2 is set, we can assume we do - // //slots = database.GetTotalAALevels(aa_AA); //find out how many effects from aa_effects table - // //slots = zone->GetTotalAALevels(aa_AA); //find out how many effects from aa_effects, which is loaded into memory - // //if (slots > 0) //and does it have any effects? may be able to put this above, not sure if it runs on each iteration - // // ApplyAABonuses(aa_AA + aa_value -1, slots, newbon); //add the bonuses - // } - // } - // } - //} -} + int id = 0; + int points = 0; + auto iter = zone->aa_abilities.begin(); + while(iter != zone->aa_abilities.end()) { + AA::Ability *ability = (*iter).second.get(); -//old AA -//void Bot::LoadAAs() { -// int maxAAExpansion = RuleI(Bots, BotAAExpansion); //get expansion to get AAs up to -// botAAs.clear(); //start fresh -// -// std::string query; -// -// if(GetClass() == BERSERKER) -// query = StringFormat("SELECT skill_id FROM altadv_vars WHERE berserker = 1 AND class_type > 1 AND class_type <= %i AND aa_expansion <= %i ORDER BY skill_id;", GetLevel(), maxAAExpansion); -// else -// query = StringFormat("SELECT skill_id FROM altadv_vars WHERE ((classes & ( 1 << %i )) >> %i) = 1 AND class_type > 1 AND class_type <= %i AND aa_expansion <= %i ORDER BY skill_id;", GetClass(), GetClass(), GetLevel(), maxAAExpansion); -// -// auto results = database.QueryDatabase(query); -// -// if(!results.Success()) { -// Log.Out(Logs::General, Logs::Error, "Error in Bot::LoadAAs()"); -// return; -// } -// -// int totalAAs = database.CountAAs(); -// -// for (auto row = results.begin(); row != results.end(); ++row) { -// uint32 skill_id = 0; -// skill_id = atoi(row[0]); -// -// if(skill_id <= 0 || skill_id >= totalAAs) -// continue; -// -// SendAA_Struct *sendAA = zone->FindAA(skill_id); -// -// if(!sendAA) -// continue; -// -// for(int i=0; imax_level; i++) { -// //Get AA info & add to list -// uint32 aaid = sendAA->id + i; -// uint8 total_levels = 0; -// uint8 req_level; -// std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(aaid); -// -// //Get level required for AA -// if(RequiredLevel != AARequiredLevelAndCost.end()) -// req_level = RequiredLevel->second.Level; -// else -// req_level = (sendAA->class_type + i * sendAA->level_inc); -// -// if(req_level > GetLevel()) -// break; -// -// //Bot is high enough level for AA -// std::map::iterator foundAA = botAAs.find(aaid); -// -// // AA is already in list -// if(foundAA != botAAs.end()) -// continue; -// -// if(sendAA->id == aaid) { -// BotAA newAA; -// -// newAA.total_levels = 0; -// newAA.aa_id = aaid; -// newAA.req_level = req_level; -// newAA.total_levels += 1; -// -// botAAs[aaid] = newAA; //add to list -// } -// else //update master AA record with number of levels a bot has in AA, based on level. -// botAAs[sendAA->id].total_levels+=1; -// } -// } -// -//} + //skip expendables + if(!ability->first || ability->charges > 0) { + continue; + } -//current with Client::ApplyAABonuses 9/26/12 -void Bot::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon) -{ - if(slots == 0) //sanity check. why bother if no slots to fill? - return; + id = ability->first->id; + points = 0; - //from AA_Ability struct - uint32 effect = 0; - int32 base1 = 0; - int32 base2 = 0; //only really used for SE_RaiseStatCap & SE_ReduceSkillTimer in aa_effects table - uint32 slot = 0; + AA::Rank *current = ability->first; - //old AA - //std::map >::const_iterator find_iter = aa_effects.find(aaid); - //if(find_iter == aa_effects.end()) - //{ - // return; - //} - // - //for (std::map::const_iterator iter = aa_effects[aaid].begin(); iter != aa_effects[aaid].end(); ++iter) { - // effect = iter->second.skill_id; - // base1 = iter->second.base1; - // base2 = iter->second.base2; - // slot = iter->second.slot; - // - // //we default to 0 (SE_CurrentHP) for the effect, so if there aren't any base1/2 values, we'll just skip it - // if (effect == 0 && base1 == 0 && base2 == 0) - // continue; - // - // //IsBlankSpellEffect() - // if (effect == SE_Blank || (effect == SE_CHA && base1 == 0) || effect == SE_StackingCommand_Block || effect == SE_StackingCommand_Overwrite) - // continue; - // - // Log.Out(Logs::Detail, Logs::AA, "Applying Effect %d from AA %u in slot %d (base1: %d, base2: %d) on %s", effect, aaid, slot, base1, base2, this->GetCleanName()); - // - // uint8 focus = IsFocusEffect(0, 0, true,effect); - // if (focus) - // { - // newbon->FocusEffects[focus] = effect; - // continue; - // } - // - // switch (effect) - // { - // //Note: AA effects that use accuracy are skill limited, while spell effect is not. - // case SE_Accuracy: - // if ((base2 == -1) && (newbon->Accuracy[HIGHEST_SKILL+1] < base1)) - // newbon->Accuracy[HIGHEST_SKILL+1] = base1; - // else if (newbon->Accuracy[base2] < base1) - // newbon->Accuracy[base2] += base1; - // break; - // case SE_CurrentHP: //regens - // newbon->HPRegen += base1; - // break; - // case SE_CurrentEndurance: - // newbon->EnduranceRegen += base1; - // break; - // case SE_MovementSpeed: - // newbon->movementspeed += base1; //should we let these stack? - // /*if (base1 > newbon->movementspeed) //or should we use a total value? - // newbon->movementspeed = base1;*/ - // break; - // case SE_STR: - // newbon->STR += base1; - // break; - // case SE_DEX: - // newbon->DEX += base1; - // break; - // case SE_AGI: - // newbon->AGI += base1; - // break; - // case SE_STA: - // newbon->STA += base1; - // break; - // case SE_INT: - // newbon->INT += base1; - // break; - // case SE_WIS: - // newbon->WIS += base1; - // break; - // case SE_CHA: - // newbon->CHA += base1; - // break; - // case SE_WaterBreathing: - // //handled by client - // break; - // case SE_CurrentMana: - // newbon->ManaRegen += base1; - // break; - // case SE_ItemManaRegenCapIncrease: - // newbon->ItemManaRegenCap += base1; - // break; - // case SE_ResistFire: - // newbon->FR += base1; - // break; - // case SE_ResistCold: - // newbon->CR += base1; - // break; - // case SE_ResistPoison: - // newbon->PR += base1; - // break; - // case SE_ResistDisease: - // newbon->DR += base1; - // break; - // case SE_ResistMagic: - // newbon->MR += base1; - // break; - // case SE_ResistCorruption: - // newbon->Corrup += base1; - // break; - // case SE_IncreaseSpellHaste: - // break; - // case SE_IncreaseRange: - // break; - // case SE_MaxHPChange: - // newbon->MaxHP += base1; - // break; - // case SE_Packrat: - // newbon->Packrat += base1; - // break; - // case SE_TwoHandBash: - // break; - // case SE_SetBreathLevel: - // break; - // case SE_RaiseStatCap: - // switch(base2) - // { - // //are these #define'd somewhere? - // case 0: //str - // newbon->STRCapMod += base1; - // break; - // case 1: //sta - // newbon->STACapMod += base1; - // break; - // case 2: //agi - // newbon->AGICapMod += base1; - // break; - // case 3: //dex - // newbon->DEXCapMod += base1; - // break; - // case 4: //wis - // newbon->WISCapMod += base1; - // break; - // case 5: //int - // newbon->INTCapMod += base1; - // break; - // case 6: //cha - // newbon->CHACapMod += base1; - // break; - // case 7: //mr - // newbon->MRCapMod += base1; - // break; - // case 8: //cr - // newbon->CRCapMod += base1; - // break; - // case 9: //fr - // newbon->FRCapMod += base1; - // break; - // case 10: //pr - // newbon->PRCapMod += base1; - // break; - // case 11: //dr - // newbon->DRCapMod += base1; - // break; - // case 12: //corruption - // newbon->CorrupCapMod += base1; - // break; - // } - // break; - // case SE_PetDiscipline2: - // break; - // case SE_SpellSlotIncrease: - // break; - // case SE_MysticalAttune: - // newbon->BuffSlotIncrease += base1; - // break; - // case SE_TotalHP: - // newbon->HP += base1; - // break; - // case SE_StunResist: - // newbon->StunResist += base1; - // break; - // case SE_SpellCritChance: - // newbon->CriticalSpellChance += base1; - // break; - // case SE_SpellCritDmgIncrease: - // newbon->SpellCritDmgIncrease += base1; - // break; - // case SE_DotCritDmgIncrease: - // newbon->DotCritDmgIncrease += base1; - // break; - // case SE_ResistSpellChance: - // newbon->ResistSpellChance += base1; - // break; - // case SE_CriticalHealChance: - // newbon->CriticalHealChance += base1; - // break; - // case SE_CriticalHealOverTime: - // newbon->CriticalHealOverTime += base1; - // break; - // case SE_CriticalDoTChance: - // newbon->CriticalDoTChance += base1; - // break; - // case SE_ReduceSkillTimer: - // newbon->SkillReuseTime[base2] += base1; - // break; - // case SE_Fearless: - // newbon->Fearless = true; - // break; - // case SE_PersistantCasting: - // newbon->PersistantCasting += base1; - // break; - // case SE_DelayDeath: - // newbon->DelayDeath += base1; - // break; - // case SE_FrontalStunResist: - // newbon->FrontalStunResist += base1; - // break; - // case SE_ImprovedBindWound: - // newbon->BindWound += base1; - // break; - // case SE_MaxBindWound: - // newbon->MaxBindWound += base1; - // break; - // case SE_ExtraAttackChance: - // newbon->ExtraAttackChance += base1; - // break; - // case SE_SeeInvis: - // newbon->SeeInvis = base1; - // break; - // case SE_BaseMovementSpeed: - // newbon->BaseMovementSpeed += base1; - // break; - // case SE_IncreaseRunSpeedCap: - // newbon->IncreaseRunSpeedCap += base1; - // break; - // case SE_ConsumeProjectile: - // newbon->ConsumeProjectile += base1; - // break; - // case SE_ArcheryDamageModifier: - // newbon->ArcheryDamageModifier += base1; - // break; - // case SE_DamageShield: - // newbon->DamageShield += base1; - // break; - // case SE_CharmBreakChance: - // newbon->CharmBreakChance += base1; - // break; - // case SE_OffhandRiposteFail: - // newbon->OffhandRiposteFail += base1; - // break; - // case SE_ItemAttackCapIncrease: - // newbon->ItemATKCap += base1; - // break; - // case SE_GivePetGroupTarget: - // newbon->GivePetGroupTarget = true; - // break; - // case SE_ItemHPRegenCapIncrease: - // newbon->ItemHPRegenCap = +base1; - // break; - // case SE_Ambidexterity: - // newbon->Ambidexterity += base1; - // break; - // case SE_PetMaxHP: - // newbon->PetMaxHP += base1; - // break; - // case SE_AvoidMeleeChance: - // newbon->AvoidMeleeChance += base1; - // break; - // case SE_CombatStability: - // newbon->CombatStability += base1; - // break; - // case SE_PetCriticalHit: - // newbon->PetCriticalHit += base1; - // break; - // case SE_PetAvoidance: - // newbon->PetAvoidance += base1; - // break; - // case SE_ShieldBlock: - // newbon->ShieldBlock += base1; - // break; - // case SE_SecondaryDmgInc: - // newbon->SecondaryDmgInc = true; - // break; - // case SE_ChangeAggro: - // newbon->hatemod += base1; - // break; - // case SE_EndurancePool: - // newbon->Endurance += base1; - // break; - // case SE_ChannelChanceItems: - // newbon->ChannelChanceItems += base1; - // break; - // case SE_ChannelChanceSpells: - // newbon->ChannelChanceSpells += base1; - // break; - // case SE_DoubleSpecialAttack: - // newbon->DoubleSpecialAttack += base1; - // break; - // case SE_TripleBackstab: - // newbon->TripleBackstab += base1; - // break; - // case SE_FrontalBackstabMinDmg: - // newbon->FrontalBackstabMinDmg = true; - // break; - // case SE_FrontalBackstabChance: - // newbon->FrontalBackstabChance += base1; - // break; - // case SE_BlockBehind: - // newbon->BlockBehind += base1; - // break; - // case SE_StrikeThrough2: - // newbon->StrikeThrough += base1; - // break; - // case SE_DoubleAttackChance: - // newbon->DoubleAttackChance += base1; - // break; - // case SE_GiveDoubleAttack: - // newbon->GiveDoubleAttack += base1; - // break; - // case SE_ProcChance: - // newbon->ProcChance += base1; - // break; - // case SE_RiposteChance: - // newbon->RiposteChance += base1; - // break; - // case SE_Flurry: - // newbon->FlurryChance += base1; - // break; - // case SE_PetFlurry: - // newbon->PetFlurry = base1; - // break; - // case SE_BardSongRange: - // newbon->SongRange += base1; - // break; - // case SE_RootBreakChance: - // newbon->RootBreakChance += base1; - // break; - // case SE_UnfailingDivinity: - // newbon->UnfailingDivinity += base1; - // break; - // - // case SE_ProcOnKillShot: - // for(int i = 0; i < MAX_SPELL_TRIGGER*3; i+=3) - // { - // if(!newbon->SpellOnKill[i] || ((newbon->SpellOnKill[i] == base2) && (newbon->SpellOnKill[i+1] < base1))) - // { - // //base1 = chance, base2 = SpellID to be triggered, base3 = min npc level - // newbon->SpellOnKill[i] = base2; - // newbon->SpellOnKill[i+1] = base1; - // - // if (GetLevel() > 15) - // newbon->SpellOnKill[i+2] = GetLevel() - 15; //AA specifiy "non-trivial" - // else - // newbon->SpellOnKill[i+2] = 0; - // - // break; - // } - // } - // break; - // - // case SE_SpellOnDeath: - // for(int i = 0; i < MAX_SPELL_TRIGGER*2; i+=2) - // { - // if(!newbon->SpellOnDeath[i]) - // { - // // base1 = SpellID to be triggered, base2 = chance to fire - // newbon->SpellOnDeath[i] = base1; - // newbon->SpellOnDeath[i+1] = base2; - // break; - // } - // } - // break; - // - // case SE_TriggerOnCast: - // - // for(int i = 0; i < MAX_SPELL_TRIGGER; i++) - // { - // if (newbon->SpellTriggers[i] == aaid) - // break; - // - // if(!newbon->SpellTriggers[i]) - // { - // //Save the 'aaid' of each triggerable effect to an array - // newbon->SpellTriggers[i] = aaid; - // break; - // } - // } - // break; - // - // case SE_CriticalHitChance: - // { - // if(base2 == -1) - // newbon->CriticalHitChance[HIGHEST_SKILL+1] += base1; - // else - // newbon->CriticalHitChance[base2] += base1; - // } - // break; - // - // case SE_CriticalDamageMob: - // { - // // base1 = effect value, base2 = skill restrictions(-1 for all) - // if(base2 == -1) - // newbon->CritDmgMob[HIGHEST_SKILL+1] += base1; - // else - // newbon->CritDmgMob[base2] += base1; - // break; - // } - // - // case SE_CriticalSpellChance: - // { - // newbon->CriticalSpellChance += base1; - // - // if (base2 > newbon->SpellCritDmgIncrease) - // newbon->SpellCritDmgIncrease = base2; - // - // break; - // } - // - // case SE_ResistFearChance: - // { - // if(base1 == 100) // If we reach 100% in a single spell/item then we should be immune to negative fear resist effects until our immunity is over - // newbon->Fearless = true; - // - // newbon->ResistFearChance += base1; // these should stack - // break; - // } - // - // case SE_SkillDamageAmount: - // { - // if(base2 == -1) - // newbon->SkillDamageAmount[HIGHEST_SKILL+1] += base1; - // else - // newbon->SkillDamageAmount[base2] += base1; - // break; - // } - // - // case SE_SpecialAttackKBProc: - // { - // //You can only have one of these per client. [AA Dragon Punch] - // newbon->SpecialAttackKBProc[0] = base1; //Chance base 100 = 25% proc rate - // newbon->SpecialAttackKBProc[1] = base2; //Skill to KB Proc Off - // break; - // } - // - // case SE_DamageModifier: - // { - // if(base2 == -1) - // newbon->DamageModifier[HIGHEST_SKILL+1] += base1; - // else - // newbon->DamageModifier[base2] += base1; - // break; - // } - // - // case SE_SlayUndead: - // { - // if(newbon->SlayUndead[1] < base1) - // newbon->SlayUndead[0] = base1; // Rate - // newbon->SlayUndead[1] = base2; // Damage Modifier - // break; - // } - // - // case SE_GiveDoubleRiposte: - // { - // //0=Regular Riposte 1=Skill Attack Riposte 2=Skill - // if(base2 == 0){ - // if(newbon->GiveDoubleRiposte[0] < base1) - // newbon->GiveDoubleRiposte[0] = base1; - // } - // //Only for special attacks. - // else if(base2 > 0 && (newbon->GiveDoubleRiposte[1] < base1)){ - // newbon->GiveDoubleRiposte[1] = base1; - // newbon->GiveDoubleRiposte[2] = base2; - // } - // - // break; - // } - // - // //Kayen: Not sure best way to implement this yet. - // //Physically raises skill cap ie if 55/55 it will raise to 55/60 - // case SE_RaiseSkillCap: - // { - // if(newbon->RaiseSkillCap[0] < base1){ - // newbon->RaiseSkillCap[0] = base1; //value - // newbon->RaiseSkillCap[1] = base2; //skill - // } - // break; - // } - // - // case SE_MasteryofPast: - // { - // if(newbon->MasteryofPast < base1) - // newbon->MasteryofPast = base1; - // break; - // } - // - // case SE_CastingLevel2: - // case SE_CastingLevel: - // { - // newbon->effective_casting_level += base1; - // break; - // } - // - // - // case SE_DivineSave: - // { - // if(newbon->DivineSaveChance[0] < base1) - // { - // newbon->DivineSaveChance[0] = base1; - // newbon->DivineSaveChance[1] = base2; - // } - // break; - // } - // - // case SE_SpellEffectResistChance: - // { - // for(int e = 0; e < MAX_RESISTABLE_EFFECTS*2; e+=2) - // { - // if(!newbon->SEResist[e] || ((newbon->SEResist[e] = base2) && (newbon->SEResist[e+1] < base1)) ){ - // newbon->SEResist[e] = base2; - // newbon->SEResist[e+1] = base1; - // break; - // } - // } - // break; - // } - // - // case SE_MitigateDamageShield: - // { - // if (base1 < 0) - // base1 = base1*(-1); - // - // newbon->DSMitigationOffHand += base1; - // break; - // } - // - // case SE_FinishingBlow: - // { - // - // //base1 = chance, base2 = damage - // if (newbon->FinishingBlow[1] < base2){ - // newbon->FinishingBlow[0] = base1; - // newbon->FinishingBlow[1] = base2; - // } - // break; - // } - // - // case SE_FinishingBlowLvl: - // { - // //base1 = level, base2 = ??? (Set to 200 in AA data, possible proc rate mod?) - // if (newbon->FinishingBlowLvl[0] < base1){ - // newbon->FinishingBlowLvl[0] = base1; - // newbon->FinishingBlowLvl[1] = base2; - // } - // break; - // } - // } - //} + while(current) { + if(!CanUseAlternateAdvancementRank(current)) { + current = nullptr; + } else { + current = current->next; + points++; + } + } + + if(points > 0) { + SetAA(id, points); + } + + ++iter; + } } bool Bot::IsValidRaceClassCombo() { @@ -6298,7 +5671,7 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b return false; } -int32 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id) +int32 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint32 points, uint16 spell_id) { const SPDat_Spell_Struct &spell = spells[spell_id]; @@ -6316,401 +5689,401 @@ int32 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id) bool LimitFound = false; int FocusCount = 0; - //old AA - //std::map >::const_iterator find_iter = aa_effects.find(aa_ID); - //if(find_iter == aa_effects.end()) - //{ - // return 0; - //} - // - //for (std::map::const_iterator iter = aa_effects[aa_ID].begin(); iter != aa_effects[aa_ID].end(); ++iter) - //{ - // effect = iter->second.skill_id; - // base1 = iter->second.base1; - // base2 = iter->second.base2; - // slot = iter->second.slot; - // - // //AA Foci's can contain multiple focus effects within the same AA. - // //To handle this we will not automatically return zero if a limit is found. - // //Instead if limit is found and multiple effects, we will reset the limit check - // //when the next valid focus effect is found. - // if (IsFocusEffect(0, 0, true,effect) || (effect == SE_TriggerOnCast)){ - // FocusCount++; - // //If limit found on prior check next, else end loop. - // if (FocusCount > 1){ - // if (LimitFound){ - // value = 0; - // LimitFound = false; - // } - // - // else{ - // break; - // } - // } - // } - // - // - // switch (effect) - // { - // case SE_Blank: - // break; - // - // //Handle Focus Limits - // case SE_LimitResist: - // if(base1) - // { - // if(spell.resisttype != base1) - // LimitFound = true; - // } - // break; - // case SE_LimitInstant: - // if(spell.buffduration) - // LimitFound = true; - // break; - // case SE_LimitMaxLevel: - // spell_level = spell.classes[(GetClass()%16) - 1]; - // lvldiff = spell_level - base1; - // //every level over cap reduces the effect by base2 percent unless from a clicky when ItemCastsUseFocus is true - // if(lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || RuleB(Character, ItemCastsUseFocus) == false)) - // { - // if(base2 > 0) - // { - // lvlModifier -= base2*lvldiff; - // if(lvlModifier < 1) - // LimitFound = true; - // } - // else { - // LimitFound = true; - // } - // } - // break; - // case SE_LimitMinLevel: - // if((spell.classes[(GetClass()%16) - 1]) < base1) - // LimitFound = true; - // break; - // case SE_LimitCastTimeMin: - // if (spell.cast_time < base1) - // LimitFound = true; - // break; - // case SE_LimitSpell: - // // Exclude spell(any but this) - // if(base1 < 0) { - // if (spell_id == (base1*-1)) - // LimitFound = true; - // } - // else { - // // Include Spell(only this) - // if (spell_id != base1) - // LimitFound = true; - // } - // break; - // case SE_LimitMinDur: - // if (base1 > CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) - // LimitFound = true; - // break; - // case SE_LimitEffect: - // // Exclude effect(any but this) - // if(base1 < 0) { - // if(IsEffectInSpell(spell_id,(base1*-1))) - // LimitFound = true; - // } - // else { - // // Include effect(only this) - // if(!IsEffectInSpell(spell_id,base1)) - // LimitFound = true; - // } - // break; - // case SE_LimitSpellType: - // switch(base1) - // { - // case 0: - // if (!IsDetrimentalSpell(spell_id)) - // LimitFound = true; - // break; - // case 1: - // if (!IsBeneficialSpell(spell_id)) - // LimitFound = true; - // break; - // } - // break; - // - // case SE_LimitManaMin: - // if(spell.mana < base1) - // LimitFound = true; - // break; - // - // case SE_LimitTarget: - // // Exclude - // if(base1 < 0){ - // if(-base1 == spell.targettype) - // LimitFound = true; - // } - // // Include - // else { - // if(base1 != spell.targettype) - // LimitFound = true; - // } - // break; - // - // case SE_LimitCombatSkills: - // // 1 is for disciplines only - // if(base1 == 1 && !IsDiscipline(spell_id)) - // LimitFound = true; - // // 0 is spells only - // else if(base1 == 0 && IsDiscipline(spell_id)) - // LimitFound = true; - // break; - // - // case SE_LimitSpellGroup: - // if(base1 > 0 && base1 != spell.spellgroup) - // LimitFound = true; - // else if(base1 < 0 && base1 == spell.spellgroup) - // LimitFound = true; - // break; - // - // - // case SE_LimitCastingSkill: - // LimitSpellSkill = true; - // if(base1 == spell.skill) - // SpellSkill_Found = true; - // break; - // - // case SE_LimitClass: - // //Do not use this limit more then once per spell. If multiple class, treat value like items would. - // if (!PassLimitClass(base1, GetClass())) - // LimitFound = true; - // break; - // - // - // //Handle Focus Effects - // case SE_ImprovedDamage: - // if (type == focusImprovedDamage && base1 > value) - // value = base1; - // break; - // - // case SE_ImprovedHeal: - // if (type == focusImprovedHeal && base1 > value) - // value = base1; - // break; - // - // case SE_ReduceManaCost: - // if (type == focusManaCost ) - // value = base1; - // break; - // - // case SE_IncreaseSpellHaste: - // if (type == focusSpellHaste && base1 > value) - // value = base1; - // break; - // - // case SE_IncreaseSpellDuration: - // if (type == focusSpellDuration && base1 > value) - // value = base1; - // break; - // - // case SE_SpellDurationIncByTic: - // if (type == focusSpellDurByTic && base1 > value) - // value = base1; - // break; - // - // case SE_SwarmPetDuration: - // if (type == focusSwarmPetDuration && base1 > value) - // value = base1; - // break; - // - // case SE_IncreaseRange: - // if (type == focusRange && base1 > value) - // value = base1; - // break; - // - // case SE_ReduceReagentCost: - // if (type == focusReagentCost && base1 > value) - // value = base1; - // break; - // - // case SE_PetPowerIncrease: - // if (type == focusPetPower && base1 > value) - // value = base1; - // break; - // - // case SE_SpellResistReduction: - // if (type == focusResistRate && base1 > value) - // value = base1; - // break; - // - // case SE_SpellHateMod: - // if (type == focusSpellHateMod) - // { - // if(value != 0) - // { - // if(value > 0) - // { - // if(base1 > value) - // { - // value = base1; - // } - // } - // else - // { - // if(base1 < value) - // { - // value = base1; - // } - // } - // } - // else - // value = base1; - // } - // break; - // - // case SE_ReduceReuseTimer: - // { - // if(type == focusReduceRecastTime) - // value = base1 / 1000; - // - // break; - // } - // - // case SE_TriggerOnCast: - // { - // if(type == focusTriggerOnCast) - // { - // if(zone->random.Int(0, 100) <= base1){ - // value = base2; - // } - // - // else{ - // value = 0; - // LimitFound = true; - // } - // } - // break; - // } - // case SE_FcSpellVulnerability: - // { - // if(type == focusSpellVulnerability) - // { - // value = base1; - // } - // break; - // } - // case SE_BlockNextSpellFocus: - // { - // if(type == focusBlockNextSpell) - // { - // if(zone->random.Int(1, 100) <= base1) - // value = 1; - // } - // break; - // } - // case SE_FcTwincast: - // { - // if(type == focusTwincast) - // { - // value = base1; - // } - // break; - // } - // - // /* - // case SE_SympatheticProc: - // { - // if(type == focusSympatheticProc) - // { - // float ProcChance, ProcBonus; - // int16 ProcRateMod = base1; //Baseline is 100 for most Sympathetic foci - // int32 cast_time = GetActSpellCasttime(spell_id, spells[spell_id].cast_time); - // GetSympatheticProcChances(ProcBonus, ProcChance, cast_time, ProcRateMod); - // - // if(zone->random.Real(0, 1) <= ProcChance) - // value = focus_id; - // - // else - // value = 0; - // } - // break; - // } - // */ - // case SE_FcDamageAmt: - // { - // if(type == focusFcDamageAmt) - // value = base1; - // - // break; - // } - // - // case SE_FcDamageAmtCrit: - // { - // if(type == focusFcDamageAmtCrit) - // value = base1; - // - // break; - // } - // - // case SE_FcDamageAmtIncoming: - // { - // if(type == focusFcDamageAmtIncoming) - // value = base1; - // - // break; - // } - // - // case SE_FcHealAmtIncoming: - // if(type == focusFcHealAmtIncoming) - // value = base1; - // break; - // - // case SE_FcHealPctCritIncoming: - // if (type == focusFcHealPctCritIncoming) - // value = base1; - // break; - // - // case SE_FcHealAmtCrit: - // if(type == focusFcHealAmtCrit) - // value = base1; - // break; - // - // case SE_FcHealAmt: - // if(type == focusFcHealAmt) - // value = base1; - // break; - // - // case SE_FcHealPctIncoming: - // if(type == focusFcHealPctIncoming) - // value = base1; - // break; - // - // case SE_FcBaseEffects: - // { - // if (type == focusFcBaseEffects) - // value = base1; - // - // break; - // } - // case SE_FcDamagePctCrit: - // { - // if(type == focusFcDamagePctCrit) - // value = base1; - // - // break; - // } - // - // case SE_FcIncreaseNumHits: - // { - // if(type == focusIncreaseNumHits) - // value = base1; - // - // break; - // } + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa_ID, points); + auto ability = ability_rank.first; + auto rank = ability_rank.second; - ////Check for spell skill limits. - //if ((LimitSpellSkill) && (!SpellSkill_Found)) - // return 0; - // - // } - //} + if(!ability) { + return 0; + } - if (LimitFound){ + for(auto &eff : rank->effects) { + effect = eff.effect_id; + base1 = eff.base1; + base2 = eff.base2; + slot = eff.slot; + + //AA Foci's can contain multiple focus effects within the same AA. + //To handle this we will not automatically return zero if a limit is found. + //Instead if limit is found and multiple effects, we will reset the limit check + //when the next valid focus effect is found. + if (IsFocusEffect(0, 0, true,effect) || (effect == SE_TriggerOnCast)){ + FocusCount++; + //If limit found on prior check next, else end loop. + if (FocusCount > 1){ + if (LimitFound){ + value = 0; + LimitFound = false; + } + + else{ + break; + } + } + } + + + switch (effect) + { + case SE_Blank: + break; + + //Handle Focus Limits + case SE_LimitResist: + if(base1) + { + if(spell.resisttype != base1) + LimitFound = true; + } + break; + case SE_LimitInstant: + if(spell.buffduration) + LimitFound = true; + break; + case SE_LimitMaxLevel: + spell_level = spell.classes[(GetClass()%16) - 1]; + lvldiff = spell_level - base1; + //every level over cap reduces the effect by base2 percent unless from a clicky when ItemCastsUseFocus is true + if(lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || RuleB(Character, ItemCastsUseFocus) == false)) + { + if(base2 > 0) + { + lvlModifier -= base2*lvldiff; + if(lvlModifier < 1) + LimitFound = true; + } + else { + LimitFound = true; + } + } + break; + case SE_LimitMinLevel: + if((spell.classes[(GetClass()%16) - 1]) < base1) + LimitFound = true; + break; + case SE_LimitCastTimeMin: + if (spell.cast_time < base1) + LimitFound = true; + break; + case SE_LimitSpell: + // Exclude spell(any but this) + if(base1 < 0) { + if (spell_id == (base1*-1)) + LimitFound = true; + } + else { + // Include Spell(only this) + if (spell_id != base1) + LimitFound = true; + } + break; + case SE_LimitMinDur: + if (base1 > CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) + LimitFound = true; + break; + case SE_LimitEffect: + // Exclude effect(any but this) + if(base1 < 0) { + if(IsEffectInSpell(spell_id,(base1*-1))) + LimitFound = true; + } + else { + // Include effect(only this) + if(!IsEffectInSpell(spell_id,base1)) + LimitFound = true; + } + break; + case SE_LimitSpellType: + switch(base1) + { + case 0: + if (!IsDetrimentalSpell(spell_id)) + LimitFound = true; + break; + case 1: + if (!IsBeneficialSpell(spell_id)) + LimitFound = true; + break; + } + break; + + case SE_LimitManaMin: + if(spell.mana < base1) + LimitFound = true; + break; + + case SE_LimitTarget: + // Exclude + if(base1 < 0){ + if(-base1 == spell.targettype) + LimitFound = true; + } + // Include + else { + if(base1 != spell.targettype) + LimitFound = true; + } + break; + + case SE_LimitCombatSkills: + // 1 is for disciplines only + if(base1 == 1 && !IsDiscipline(spell_id)) + LimitFound = true; + // 0 is spells only + else if(base1 == 0 && IsDiscipline(spell_id)) + LimitFound = true; + break; + + case SE_LimitSpellGroup: + if(base1 > 0 && base1 != spell.spellgroup) + LimitFound = true; + else if(base1 < 0 && base1 == spell.spellgroup) + LimitFound = true; + break; + + + case SE_LimitCastingSkill: + LimitSpellSkill = true; + if(base1 == spell.skill) + SpellSkill_Found = true; + break; + + case SE_LimitClass: + //Do not use this limit more then once per spell. If multiple class, treat value like items would. + if (!PassLimitClass(base1, GetClass())) + LimitFound = true; + break; + + + //Handle Focus Effects + case SE_ImprovedDamage: + if (type == focusImprovedDamage && base1 > value) + value = base1; + break; + + case SE_ImprovedHeal: + if (type == focusImprovedHeal && base1 > value) + value = base1; + break; + + case SE_ReduceManaCost: + if (type == focusManaCost ) + value = base1; + break; + + case SE_IncreaseSpellHaste: + if (type == focusSpellHaste && base1 > value) + value = base1; + break; + + case SE_IncreaseSpellDuration: + if (type == focusSpellDuration && base1 > value) + value = base1; + break; + + case SE_SpellDurationIncByTic: + if (type == focusSpellDurByTic && base1 > value) + value = base1; + break; + + case SE_SwarmPetDuration: + if (type == focusSwarmPetDuration && base1 > value) + value = base1; + break; + + case SE_IncreaseRange: + if (type == focusRange && base1 > value) + value = base1; + break; + + case SE_ReduceReagentCost: + if (type == focusReagentCost && base1 > value) + value = base1; + break; + + case SE_PetPowerIncrease: + if (type == focusPetPower && base1 > value) + value = base1; + break; + + case SE_SpellResistReduction: + if (type == focusResistRate && base1 > value) + value = base1; + break; + + case SE_SpellHateMod: + if (type == focusSpellHateMod) + { + if(value != 0) + { + if(value > 0) + { + if(base1 > value) + { + value = base1; + } + } + else + { + if(base1 < value) + { + value = base1; + } + } + } + else + value = base1; + } + break; + + case SE_ReduceReuseTimer: + { + if(type == focusReduceRecastTime) + value = base1 / 1000; + + break; + } + + case SE_TriggerOnCast: + { + if(type == focusTriggerOnCast) + { + if(zone->random.Int(0, 100) <= base1){ + value = base2; + } + + else{ + value = 0; + LimitFound = true; + } + } + break; + } + case SE_FcSpellVulnerability: + { + if(type == focusSpellVulnerability) + { + value = base1; + } + break; + } + case SE_BlockNextSpellFocus: + { + if(type == focusBlockNextSpell) + { + if(zone->random.Int(1, 100) <= base1) + value = 1; + } + break; + } + case SE_FcTwincast: + { + if(type == focusTwincast) + { + value = base1; + } + break; + } + + /* + case SE_SympatheticProc: + { + if(type == focusSympatheticProc) + { + float ProcChance, ProcBonus; + int16 ProcRateMod = base1; //Baseline is 100 for most Sympathetic foci + int32 cast_time = GetActSpellCasttime(spell_id, spells[spell_id].cast_time); + GetSympatheticProcChances(ProcBonus, ProcChance, cast_time, ProcRateMod); + + if(zone->random.Real(0, 1) <= ProcChance) + value = focus_id; + + else + value = 0; + } + break; + } + */ + case SE_FcDamageAmt: + { + if(type == focusFcDamageAmt) + value = base1; + + break; + } + + case SE_FcDamageAmtCrit: + { + if(type == focusFcDamageAmtCrit) + value = base1; + + break; + } + + case SE_FcDamageAmtIncoming: + { + if(type == focusFcDamageAmtIncoming) + value = base1; + + break; + } + + case SE_FcHealAmtIncoming: + if(type == focusFcHealAmtIncoming) + value = base1; + break; + + case SE_FcHealPctCritIncoming: + if (type == focusFcHealPctCritIncoming) + value = base1; + break; + + case SE_FcHealAmtCrit: + if(type == focusFcHealAmtCrit) + value = base1; + break; + + case SE_FcHealAmt: + if(type == focusFcHealAmt) + value = base1; + break; + + case SE_FcHealPctIncoming: + if(type == focusFcHealPctIncoming) + value = base1; + break; + + case SE_FcBaseEffects: + { + if (type == focusFcBaseEffects) + value = base1; + + break; + } + case SE_FcDamagePctCrit: + { + if(type == focusFcDamagePctCrit) + value = base1; + + break; + } + + case SE_FcIncreaseNumHits: + { + if(type == focusIncreaseNumHits) + value = base1; + + break; + } + } + + //Check for spell skill limits. + if ((LimitSpellSkill) && (!SpellSkill_Found)) { + return 0; + } + } + + if (LimitFound) { return 0; } @@ -6875,31 +6248,34 @@ int32 Bot::GetBotFocusEffect(BotfocusType bottype, uint16 spell_id) { } // AA Focus - if (aabonuses.FocusEffects[bottype]){ - //old aa - //int totalAAs = database.CountAAs(); - //int32 Total3 = 0; - //uint32 slots = 0; - //uint32 aa_AA = 0; - //uint32 aa_value = 0; - // - //for (int i = 0; i < totalAAs; i++) { //iterate through all of the client's AAs - // std::map::iterator aa = botAAs.find(i); - // if(aa != botAAs.end()) { // make sure aa exists or we'll crash zone - // aa_AA = aa->second.aa_id; //same as aaid from the aa_effects table - // aa_value = aa->second.total_levels; //how many points in it - // if (aa_AA < 1 || aa_value < 1) - // continue; - // - // Total3 = CalcBotAAFocus(bottype, aa_AA, spell_id); - // if (Total3 > 0 && realTotal3 >= 0 && Total3 > realTotal3) { - // realTotal3 = Total3; - // } - // else if (Total3 < 0 && Total3 < realTotal3) { - // realTotal3 = Total3; - // } - // } - //} + if (aabonuses.FocusEffects[bottype]) { + int32 Total3 = 0; + uint32 slots = 0; + uint32 aa_AA = 0; + uint32 aa_value = 0; + + for(auto &aa : aa_ranks) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa.first, aa.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!ability) { + continue; + } + + aa_AA = ability->id; + aa_value = aa.second.first; + if (aa_AA < 1 || aa_value < 1) + continue; + + Total3 = CalcBotAAFocus(bottype, aa_AA, aa_value, spell_id); + if (Total3 > 0 && realTotal3 >= 0 && Total3 > realTotal3) { + realTotal3 = Total3; + } + else if (Total3 < 0 && Total3 < realTotal3) { + realTotal3 = Total3; + } + } } if(bottype == BotfocusReagentCost && IsSummonPetSpell(spell_id) && GetAA(aaElementalPact)) @@ -8931,7 +8307,6 @@ int32 Bot::GetActSpellCost(uint16 spell_id, int32 cost) { break; } - //aa old bonus += 0.05 * GetAA(aaAdvancedSpellCastingMastery); if(SuccessChance <= (SpecializeSkill * 0.3 * bonus)) @@ -9559,7 +8934,7 @@ void Bot::CalcBonuses() { GenerateBaseStats(); CalcItemBonuses(&itembonuses); CalcSpellBonuses(&spellbonuses); - GenerateAABonuses(&aabonuses); + CalcAABonuses(&aabonuses); SetAttackTimer(); CalcATK(); diff --git a/zone/bot.h b/zone/bot.h index 4a88c5f18..6103fa7f2 100644 --- a/zone/bot.h +++ b/zone/bot.h @@ -449,7 +449,6 @@ public: bool IsBotWISCaster() { return (GetClass() == CLERIC || GetClass() == DRUID || GetClass() == SHAMAN); } bool CanHeal(); int GetRawACNoShield(int &shield_ac); - void ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon); bool GetHasBeenSummoned() { return _hasBeenSummoned; } const glm::vec3 GetPreSummonLocation() const { return m_PreSummonLocation; } bool GetGroupMessagesOn() { return _groupMessagesOn; } @@ -561,7 +560,7 @@ protected: virtual bool CheckBotDoubleAttack(bool Triple = false); virtual int32 GetBotFocusEffect(BotfocusType bottype, uint16 spell_id); virtual int32 CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spell_id, bool best_focus=false); - virtual int32 CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id); + virtual int32 CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint32 points, uint16 spell_id); virtual void PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* client); virtual bool AIDoSpellCast(uint8 i, Mob* tar, int32 mana_cost, uint32* oDontDoAgainBefore = 0); virtual float GetMaxMeleeRangeToTarget(Mob* target); @@ -642,12 +641,12 @@ private: uint8 _baseGender; // Bots gender. Necessary to preserve the original value otherwise it can be changed by illusions. // Class Methods + void LoadAAs(); int32 acmod(); void GenerateBaseStats(); void GenerateAppearance(); void GenerateArmorClass(); int32 GenerateBaseHitPoints(); - void GenerateAABonuses(StatBonuses* newbon); int32 GenerateBaseManaPoints(); void GenerateSpecialAttacks(); void SetBotID(uint32 botID); diff --git a/zone/client.h b/zone/client.h index e830edfa8..2689964f0 100644 --- a/zone/client.h +++ b/zone/client.h @@ -1260,8 +1260,6 @@ protected: void AdditiveWornBonuses(const ItemInst *inst, StatBonuses* newbon, bool isAug = false); int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat); void CalcEdibleBonuses(StatBonuses* newbon); - void CalcAABonuses(StatBonuses* newbon); - void ApplyAABonuses(const AA::Rank &rank, StatBonuses* newbon); void ProcessItemCaps(); void MakeBuffFadePacket(uint16 spell_id, int slot_id, bool send_message = true); bool client_data_loaded; diff --git a/zone/mob.h b/zone/mob.h index 3e4f5ea39..959c5e543 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -967,6 +967,8 @@ public: bool CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price); int GetAlternateAdvancementCooldownReduction(AA::Rank *rank_in); void ExpendAlternateAdvancementCharge(uint32 aa_id); + void CalcAABonuses(StatBonuses* newbon); + void ApplyAABonuses(const AA::Rank &rank, StatBonuses* newbon); protected: void CommonDamage(Mob* other, int32 &damage, const uint16 spell_id, const SkillUseTypes attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic); From d3280c9676ae24e2d3995c14b1badd7552232bed Mon Sep 17 00:00:00 2001 From: KimLS Date: Tue, 16 Jun 2015 12:33:14 -0700 Subject: [PATCH 24/48] Removing old code, need to reimplement warcry and rampage still at least --- zone/aa.cpp | 51 ------------------------------------- zone/aa.h | 15 ----------- zone/attack.cpp | 8 ------ zone/client.h | 9 +------ zone/client_process.cpp | 37 ++++++++++++++------------- zone/command.cpp | 15 ++++++++--- zone/spell_effects.cpp | 56 ++++++++++++++++++++--------------------- zone/spells.cpp | 15 ++++++----- 8 files changed, 65 insertions(+), 141 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 1f0b5b086..766057e2f 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -440,48 +440,6 @@ void Mob::WakeTheDead(uint16 spell_id, Mob *target, uint32 duration) target->AddToHateList(this, 1, 0); } -//turn on an AA effect -//duration == 0 means no time limit, used for one-shot deals, etc.. -void Client::EnableAAEffect(aaEffectType type, uint32 duration) { - if(type > _maxaaEffectType) - return; //for now, special logic needed. - m_epp.aa_effects |= 1 << (type-1); - - if(duration > 0) { - p_timers.Start(pTimerAAEffectStart + type, duration); - } else { - p_timers.Clear(&database, pTimerAAEffectStart + type); - } -} - -void Client::DisableAAEffect(aaEffectType type) { - if(type > _maxaaEffectType) - return; //for now, special logic needed. - uint32 bit = 1 << (type-1); - if(m_epp.aa_effects & bit) { - m_epp.aa_effects ^= bit; - } - p_timers.Clear(&database, pTimerAAEffectStart + type); -} - -/* -By default an AA effect is a one shot deal, unless -a duration timer is set. -*/ -bool Client::CheckAAEffect(aaEffectType type) { - if(type > _maxaaEffectType) - return(false); //for now, special logic needed. - if(m_epp.aa_effects & (1 << (type-1))) { //is effect enabled? - //has our timer expired? - if(p_timers.Expired(&database, pTimerAAEffectStart + type)) { - DisableAAEffect(type); - return(false); - } - return(true); - } - return(false); -} - void Client::ResetAA() { RefundAA(); uint32 i; @@ -788,14 +746,6 @@ void Client::InspectBuffs(Client* Inspector, int Rank) Inspector->FastQueuePacket(&outapp); } -void Client::DurationRampage(uint32 duration) -{ - if(duration) { - m_epp.aa_effects |= 1 << (aaEffectRampage-1); - p_timers.Start(pTimerAAEffectStart + aaEffectRampage, duration); - } -} - void Client::RefundAA() { int refunded = 0; @@ -933,7 +883,6 @@ void Client::SendAlternateAdvancementRank(int aa_id, int level) { void Client::SendAlternateAdvancementStats() { EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAExpUpdate, sizeof(AltAdvStats_Struct)); AltAdvStats_Struct *aps = (AltAdvStats_Struct *)outapp->pBuffer; - aps->experience = m_pp.expAA; aps->experience = (uint32)(((float)330.0f * (float)m_pp.expAA) / (float)max_AAXP); aps->unspent = m_pp.aapoints; aps->percentage = m_epp.perAA; diff --git a/zone/aa.h b/zone/aa.h index 0ee32c99a..76df0f388 100644 --- a/zone/aa.h +++ b/zone/aa.h @@ -23,21 +23,6 @@ typedef enum { aaActionFadingMemories = 16 } aaNonspellAction; -//use these for AAs which dont cast spells, yet need effects -//if this list grows beyond 32, more work is needed in *AAEffect -typedef enum { //AA Effect IDs - aaEffectMassGroupBuff = 1, //unused - Handled via spell effect. - aaEffectRampage, - aaEffectSharedHealth, - aaEffectFlamingArrows, - aaEffectFrostArrows, - aaEffectWarcry, - aaEffectLeechTouch, - aaEffectProjectIllusion, // unused - Handled via spell effect - _maxaaEffectType = 32 -} aaEffectType; - - enum { //leadership AA indexes groupAAMarkNPC = 0, groupAANPCHealth, diff --git a/zone/attack.cpp b/zone/attack.cpp index fda7837ab..864efa3e7 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -3519,14 +3519,6 @@ void Mob::CommonDamage(Mob* attacker, int32 &damage, const uint16 spell_id, cons if(damage > 0) { //if there is some damage being done and theres an attacker involved if(attacker) { - if(spell_id == SPELL_HARM_TOUCH2 && attacker->IsClient() && attacker->CastToClient()->CheckAAEffect(aaEffectLeechTouch)){ - int healed = damage; - healed = attacker->GetActSpellHealing(spell_id, healed); - attacker->HealDamage(healed); - entity_list.MessageClose(this, true, 300, MT_Emote, "%s beams a smile at %s", attacker->GetCleanName(), this->GetCleanName() ); - attacker->CastToClient()->DisableAAEffect(aaEffectLeechTouch); - } - // if spell is lifetap add hp to the caster if (spell_id != SPELL_UNKNOWN && IsLifetapSpell( spell_id )) { int healed = damage; diff --git a/zone/client.h b/zone/client.h index 2689964f0..034ff83b4 100644 --- a/zone/client.h +++ b/zone/client.h @@ -541,7 +541,6 @@ public: bool Flurry(); bool Rampage(); - void DurationRampage(uint32 duration); inline uint32 GetEXP() const { return m_pp.exp; } @@ -784,13 +783,7 @@ public: int16 CalcAAFocus(focusType type, const AA::Rank &rank, uint16 spell_id); void SetAATitle(const char *Title); void SetTitleSuffix(const char *txt); - - //old AA Methods that are slated for removal - void MemorizeSpell(uint32 slot,uint32 spellid,uint32 scribing); - void EnableAAEffect(aaEffectType type, uint32 duration = 0); - void DisableAAEffect(aaEffectType type); - bool CheckAAEffect(aaEffectType type); - + void MemorizeSpell(uint32 slot, uint32 spellid, uint32 scribing); int32 acmod(); // Item methods diff --git a/zone/client_process.cpp b/zone/client_process.cpp index 4a16e7698..603636a82 100644 --- a/zone/client_process.cpp +++ b/zone/client_process.cpp @@ -391,12 +391,13 @@ bool Client::Process() { } else if (auto_attack_target->GetHP() > -10) // -10 so we can watch people bleed in PvP { - if(CheckAAEffect(aaEffectRampage)) - { - entity_list.AEAttack(this, 30); - } else { + //old aa + //if(CheckAAEffect(aaEffectRampage)) + //{ + // entity_list.AEAttack(this, 30); + //} else { Attack(auto_attack_target, MainPrimary); // Kaiyodo - added attacking hand to arguments - } + //} ItemInst *wpn = GetInv().GetItem(MainPrimary); TryWeaponProc(wpn, auto_attack_target, MainPrimary); @@ -406,11 +407,11 @@ bool Client::Process() { CheckIncreaseSkill(SkillDoubleAttack, auto_attack_target, -10); if(CheckDoubleAttack()) { //should we allow rampage on double attack? - if(CheckAAEffect(aaEffectRampage)) { - entity_list.AEAttack(this, 30); - } else { + //if(CheckAAEffect(aaEffectRampage)) { + // entity_list.AEAttack(this, 30); + //} else { Attack(auto_attack_target, MainPrimary, false); - } + //} } //triple attack: rangers, monks, warriors, berserkers over level 60 @@ -499,21 +500,21 @@ bool Client::Process() { float random = zone->random.Real(0, 1); CheckIncreaseSkill(SkillDualWield, auto_attack_target, -10); if (random < DualWieldProbability){ // Max 78% of DW - if(CheckAAEffect(aaEffectRampage)) { - entity_list.AEAttack(this, 30, MainSecondary); - } else { + //if(CheckAAEffect(aaEffectRampage)) { + // entity_list.AEAttack(this, 30, MainSecondary); + //} else { Attack(auto_attack_target, MainSecondary); // Single attack with offhand - } + //} ItemInst *wpn = GetInv().GetItem(MainSecondary); TryWeaponProc(wpn, auto_attack_target, MainSecondary); if( CanThisClassDoubleAttack() && CheckDoubleAttack()) { - if(CheckAAEffect(aaEffectRampage)) { - entity_list.AEAttack(this, 30, MainSecondary); - } else { - if(auto_attack_target && auto_attack_target->GetHP() > -10) + //if(CheckAAEffect(aaEffectRampage)) { + // entity_list.AEAttack(this, 30, MainSecondary); + //} else { + // if(auto_attack_target && auto_attack_target->GetHP() > -10) Attack(auto_attack_target, MainSecondary); // Single attack with offhand - } + //} } } } diff --git a/zone/command.cpp b/zone/command.cpp index 16f50e7d7..ab2b4ad78 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -5555,13 +5555,20 @@ void command_setaapts(Client *c, const Seperator *sep) else if(atoi(sep->arg[2]) <= 0 || atoi(sep->arg[2]) > 200) c->Message(0, "You must have a number greater than 0 for points and no more than 200."); else if(!strcasecmp(sep->arg[1], "group")) { - t->SetLeadershipEXP(atoi(sep->arg[2])*GROUP_EXP_PER_POINT, t->GetRaidEXP()); + t->GetPP().group_leadership_points = atoi(sep->arg[2]); + t->GetPP().group_leadership_exp = 0; + t->Message(MT_Experience, "Setting Group AA points to %u", t->GetPP().group_leadership_points); + t->SendLeadershipEXPUpdate(); } else if(!strcasecmp(sep->arg[1], "raid")) { - t->SetLeadershipEXP(t->GetGroupEXP(), atoi(sep->arg[2])*RAID_EXP_PER_POINT); + t->GetPP().raid_leadership_points = atoi(sep->arg[2]); + t->GetPP().raid_leadership_exp = 0; + t->Message(MT_Experience, "Setting Raid AA points to %u", t->GetPP().raid_leadership_points); + t->SendLeadershipEXPUpdate(); } else { - t->SetEXP(t->GetEXP(),t->GetMaxAAXP()*atoi(sep->arg[2]),false); + t->GetPP().aapoints = atoi(sep->arg[2]); + t->GetPP().expAA = 0; + t->Message(MT_Experience, "Setting personal AA points to %u", t->GetPP().aapoints); t->SendAlternateAdvancementStats(); - t->SendAlternateAdvancementTable(); } } diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index a7c5643a1..3c0c8fad4 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -651,27 +651,28 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove group_id_caster = (GetRaid()->GetGroup(CastToClient()) == 0xFFFF) ? 0 : (GetRaid()->GetGroup(CastToClient()) + 1); } } - if(group_id_caster){ - Group *g = entity_list.GetGroupByID(group_id_caster); - uint32 time = spell.base[i]*10; - if(g){ - for(int gi=0; gi < 6; gi++){ - if(g->members[gi] && g->members[gi]->IsClient()) - { - g->members[gi]->CastToClient()->EnableAAEffect(aaEffectWarcry , time); - if (g->members[gi]->GetID() != caster->GetID()) - g->members[gi]->Message(13, "You hear the war cry."); - else - Message(13, "You let loose a fierce war cry."); - } - } - } - } - - else{ - CastToClient()->EnableAAEffect(aaEffectWarcry , time); - Message(13, "You let loose a fierce war cry."); - } + //old aa + //if(group_id_caster){ + // Group *g = entity_list.GetGroupByID(group_id_caster); + // uint32 time = spell.base[i]*10; + // if(g){ + // for(int gi=0; gi < 6; gi++){ + // if(g->members[gi] && g->members[gi]->IsClient()) + // { + // g->members[gi]->CastToClient()->EnableAAEffect(aaEffectWarcry , time); + // if (g->members[gi]->GetID() != caster->GetID()) + // g->members[gi]->Message(13, "You hear the war cry."); + // else + // Message(13, "You let loose a fierce war cry."); + // } + // } + // } + //} + // + //else{ + // CastToClient()->EnableAAEffect(aaEffectWarcry , time); + // Message(13, "You let loose a fierce war cry."); + //} break; } @@ -2232,12 +2233,14 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove case SE_AEMelee: { + //old aa + #ifdef SPELL_EFFECT_SPAM snprintf(effect_desc, _EDLEN, "Duration Rampage"); #endif - if (caster && caster->IsClient()) { // will tidy this up later so that NPCs can duration ramp from spells too - CastToClient()->DurationRampage(effect_value*12); - } + //if (caster && caster->IsClient()) { // will tidy this up later so that NPCs can duration ramp from spells too + // CastToClient()->DurationRampage(effect_value*12); + //} break; } @@ -3435,11 +3438,6 @@ void Mob::DoBuffTic(const Buffs_Struct &buff, int slot, Mob *caster) } } - // Check for non buff spell effects to fade - // AE melee effects - if (IsClient()) - CastToClient()->CheckAAEffect(aaEffectRampage); - for (int i = 0; i < EFFECT_COUNT; i++) { if (IsBlankSpellEffect(buff.spellid, i)) continue; diff --git a/zone/spells.cpp b/zone/spells.cpp index ea4d1068b..3ea0a5ddd 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -4124,14 +4124,13 @@ bool Mob::IsImmuneToSpell(uint16 spell_id, Mob *caster) } return true; } - - else if (IsClient() && CastToClient()->CheckAAEffect(aaEffectWarcry)) - { - Message(13, "Your are immune to fear."); - Log.Out(Logs::Detail, Logs::Spells, "Clients has WarCry effect, immune to fear!"); - caster->Message_StringID(MT_Shout, IMMUNE_FEAR); - return true; - } + //else if (IsClient() && CastToClient()->CheckAAEffect(aaEffectWarcry)) //old aa + //{ + // Message(13, "Your are immune to fear."); + // Log.Out(Logs::Detail, Logs::Spells, "Clients has WarCry effect, immune to fear!"); + // caster->Message_StringID(MT_Shout, IMMUNE_FEAR); + // return true; + //} } if(IsCharmSpell(spell_id)) From f4c22d711144cf339721dc1606c3c1132386fcef Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Tue, 16 Jun 2015 17:10:47 -0400 Subject: [PATCH 25/48] Fix double riposte --- zone/attack.cpp | 53 ++++++++++++++++++++++++++++++------------------ zone/bonuses.cpp | 1 + 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/zone/attack.cpp b/zone/attack.cpp index 864efa3e7..146bcdce6 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -4412,42 +4412,55 @@ bool Mob::TryFinishingBlow(Mob *defender, SkillUseTypes skillinuse) return false; } -void Mob::DoRiposte(Mob* defender) { +void Mob::DoRiposte(Mob *defender) +{ Log.Out(Logs::Detail, Logs::Combat, "Preforming a riposte"); if (!defender) return; defender->Attack(this, MainPrimary, true); - if (HasDied()) return; + if (HasDied()) + return; - int32 DoubleRipChance = defender->aabonuses.GiveDoubleRiposte[0] + - defender->spellbonuses.GiveDoubleRiposte[0] + - defender->itembonuses.GiveDoubleRiposte[0]; + // this effect isn't used on live? See no AAs or spells + int32 DoubleRipChance = defender->aabonuses.DoubleRiposte + defender->spellbonuses.DoubleRiposte + + defender->itembonuses.DoubleRiposte; - DoubleRipChance = defender->aabonuses.DoubleRiposte + - defender->spellbonuses.DoubleRiposte + - defender->itembonuses.DoubleRiposte; - - //Live AA - Double Riposte - if(DoubleRipChance && zone->random.Roll(DoubleRipChance)) { - Log.Out(Logs::Detail, Logs::Combat, "Preforming a double riposed (%d percent chance)", DoubleRipChance); + if (DoubleRipChance && zone->random.Roll(DoubleRipChance)) { + Log.Out(Logs::Detail, Logs::Combat, + "Preforming a double riposted from SE_DoubleRiposte (%d percent chance)", DoubleRipChance); defender->Attack(this, MainPrimary, true); - if (HasDied()) return; + if (HasDied()) + return; } - //Double Riposte effect, allows for a chance to do RIPOSTE with a skill specfic special attack (ie Return Kick). - //Coded narrowly: Limit to one per client. Limit AA only. [1 = Skill Attack Chance, 2 = Skill] + DoubleRipChance = defender->aabonuses.GiveDoubleRiposte[0] + defender->spellbonuses.GiveDoubleRiposte[0] + + defender->itembonuses.GiveDoubleRiposte[0]; + + // Live AA - Double Riposte + if (DoubleRipChance && zone->random.Roll(DoubleRipChance)) { + Log.Out(Logs::Detail, Logs::Combat, + "Preforming a double riposted from SE_GiveDoubleRiposte base1 == 0 (%d percent chance)", + DoubleRipChance); + defender->Attack(this, MainPrimary, true); + if (HasDied()) + return; + } + + // Double Riposte effect, allows for a chance to do RIPOSTE with a skill specific special attack (ie Return Kick). + // Coded narrowly: Limit to one per client. Limit AA only. [1 = Skill Attack Chance, 2 = Skill] DoubleRipChance = defender->aabonuses.GiveDoubleRiposte[1]; - if(DoubleRipChance && zone->random.Roll(DoubleRipChance)) { - Log.Out(Logs::Detail, Logs::Combat, "Preforming a return SPECIAL ATTACK (%d percent chance)", DoubleRipChance); + if (DoubleRipChance && zone->random.Roll(DoubleRipChance)) { + Log.Out(Logs::Detail, Logs::Combat, "Preforming a return SPECIAL ATTACK (%d percent chance)", + DoubleRipChance); if (defender->GetClass() == MONK) defender->MonkSpecialAttack(this, defender->aabonuses.GiveDoubleRiposte[2]); else if (defender->IsClient()) - defender->CastToClient()->DoClassAttacks(this,defender->aabonuses.GiveDoubleRiposte[2], true); + defender->CastToClient()->DoClassAttacks(this, defender->aabonuses.GiveDoubleRiposte[2], true); } } @@ -4678,10 +4691,10 @@ void Mob::TrySkillProc(Mob *on, uint16 skill, uint16 ReuseTime, bool Success, ui ProcMod = static_cast(base2); } else if(effect_id == SE_LimitToSkill && base1 <= HIGHEST_SKILL) { - + if (CanProc && base1 == skill && IsValidSpell(proc_spell_id)) { float final_chance = chance * (ProcMod / 100.0f); - + if (zone->random.Roll(final_chance)) { ExecWeaponProc(nullptr, proc_spell_id, on); CanProc = false; diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index c19755aae..e90f9626a 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -1156,6 +1156,7 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_DoubleRiposte: { newbon->DoubleRiposte += base1; + break; } case SE_GiveDoubleRiposte: { From 60f2e312404e679fd432aa48bdc0bf76042dc87f Mon Sep 17 00:00:00 2001 From: KimLS Date: Tue, 16 Jun 2015 21:43:51 -0700 Subject: [PATCH 26/48] Retooled how cooldowns work so they should be more consistent with how the client shows them --- zone/aa.cpp | 14 ++------------ zone/spells.cpp | 9 +++------ 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 766057e2f..a99a81ada 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1137,26 +1137,16 @@ void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) { // Bards can cast instant cast AAs while they are casting another song if(spells[rank->spell].cast_time == 0 && GetClass() == BARD && IsBardSong(casting_spell_id)) { if(!SpellFinished(rank->spell, entity_list.GetMob(target_id), 10, -1, -1, spells[rank->spell].ResistDiff, false)) { - //Reset on failed cast - SendAlternateAdvancementTimer(rank->spell_type, 0, -1); - Message_StringID(15, ABILITY_FAILED); - p_timers.Clear(&database, rank->spell_type + pTimerAAStart); return; } + CastToClient()->GetPTimers().Start(rank->spell_type, cooldown); + SendAlternateAdvancementTimer(rank->spell_type, 0, 0); ExpendAlternateAdvancementCharge(ability->id); } else { if(!CastSpell(rank->spell, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, rank->spell_type + pTimerAAStart, cooldown, 1, nullptr, ability->id)) { - //Reset on failed cast - SendAlternateAdvancementTimer(rank->spell_type, 0, -1); - Message_StringID(15, ABILITY_FAILED); - p_timers.Clear(&database, rank->spell_type + pTimerAAStart); return; } } - - if(cooldown > 0) { - SendAlternateAdvancementTimer(rank->spell_type, 0, 0); - } } int Mob::GetAlternateAdvancementCooldownReduction(AA::Rank *rank_in) { diff --git a/zone/spells.cpp b/zone/spells.cpp index 3ea0a5ddd..5002e8104 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -819,12 +819,6 @@ void Mob::InterruptSpell(uint16 message, uint16 color, uint16 spellid) CastToNPC()->AI_Event_SpellCastFinished(false, casting_spell_slot); } - if(casting_spell_type == 1 && IsClient()) { //Rest AA Timer on failed cast - CastToClient()->SendAlternateAdvancementTimer(casting_spell_timer - pTimerAAStart, 0, -1); - CastToClient()->Message_StringID(15, ABILITY_FAILED); - CastToClient()->GetPTimers().Clear(&database, casting_spell_timer); - } - ZeroCastingVars(); // resets all the state keeping stuff Log.Out(Logs::Detail, Logs::Spells, "Spell %d has been interrupted.", spellid); @@ -2282,6 +2276,9 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 //aa new todo: aa expendable charges here CastToClient()->GetPTimers().Start(casting_spell_timer, casting_spell_timer_duration); Log.Out(Logs::Detail, Logs::Spells, "Spell %d: Setting custom reuse timer %d to %d", spell_id, casting_spell_timer, casting_spell_timer_duration); + if(casting_spell_aa_id) { + CastToClient()->SendAlternateAdvancementTimer(casting_spell_timer - pTimerAAStart, 0, 0); + } } else if(spells[spell_id].recast_time > 1000 && !spells[spell_id].IsDisciplineBuff) { int recast = spells[spell_id].recast_time/1000; From c445f631869648dfad0bc716ef5a706f8a4ee3df Mon Sep 17 00:00:00 2001 From: KimLS Date: Tue, 16 Jun 2015 23:41:46 -0700 Subject: [PATCH 27/48] Okay timers now work right, for real this time --- zone/aa.cpp | 5 ++++- zone/lua_mob.cpp | 2 +- zone/mob.cpp | 1 - zone/mob.h | 4 ++-- zone/mob_ai.cpp | 2 +- zone/perl_mob.cpp | 4 ++-- zone/spells.cpp | 39 +++++++++++++++++++++++---------------- 7 files changed, 33 insertions(+), 24 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index a99a81ada..21e1de1b2 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1143,10 +1143,13 @@ void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) { SendAlternateAdvancementTimer(rank->spell_type, 0, 0); ExpendAlternateAdvancementCharge(ability->id); } else { - if(!CastSpell(rank->spell, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, rank->spell_type + pTimerAAStart, cooldown, 1, nullptr, ability->id)) { + if(!CastSpell(rank->spell, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, rank->spell_type + pTimerAAStart, cooldown, nullptr, rank->id)) { return; } } + + CastToClient()->GetPTimers().Start(rank->spell_type + pTimerAAStart, cooldown); + SendAlternateAdvancementTimer(rank->spell_type, 0, 0); } int Mob::GetAlternateAdvancementCooldownReduction(AA::Rank *rank_in) { diff --git a/zone/lua_mob.cpp b/zone/lua_mob.cpp index f4d7d64cb..11124d50f 100644 --- a/zone/lua_mob.cpp +++ b/zone/lua_mob.cpp @@ -790,7 +790,7 @@ bool Lua_Mob::CastSpell(int spell_id, int target_id, int slot, int cast_time, in int16 res = resist_adjust; return self->CastSpell(spell_id, target_id, slot, cast_time, mana_cost, nullptr, static_cast(item_slot), - static_cast(timer), static_cast(timer_duration), 0, &res); + static_cast(timer), static_cast(timer_duration), &res); } bool Lua_Mob::SpellFinished(int spell_id, Lua_Mob target) { diff --git a/zone/mob.cpp b/zone/mob.cpp index 35b0d62d2..4eb87f7ad 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -307,7 +307,6 @@ Mob::Mob(const char* in_name, casting_spell_id = 0; casting_spell_timer = 0; casting_spell_timer_duration = 0; - casting_spell_type = 0; casting_spell_inventory_slot = 0; casting_spell_aa_id = 0; target = 0; diff --git a/zone/mob.h b/zone/mob.h index 959c5e543..20ec928e7 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -222,11 +222,11 @@ public: virtual void SpellProcess(); virtual bool CastSpell(uint16 spell_id, uint16 target_id, uint16 slot = USE_ITEM_SPELL_SLOT, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, - uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, uint32 type = 0, int16 *resist_adjust = nullptr, + uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, int16 *resist_adjust = nullptr, uint32 aa_id = 0); virtual bool DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot = 10, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, - uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, uint32 type = 0, int16 resist_adjust = 0, + uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, int16 resist_adjust = 0, uint32 aa_id = 0); void CastedSpellFinished(uint16 spell_id, uint32 target_id, uint16 slot, uint16 mana_used, uint32 inventory_slot = 0xFFFFFFFF, int16 resist_adjust = 0); diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 650ba350c..fb6714087 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -342,7 +342,7 @@ bool NPC::AIDoSpellCast(uint8 i, Mob* tar, int32 mana_cost, uint32* oDontDoAgain SetCurrentSpeed(0); } - return CastSpell(AIspells[i].spellid, tar->GetID(), 1, AIspells[i].manacost == -2 ? 0 : -1, mana_cost, oDontDoAgainBefore, -1, -1, 0, 0, &(AIspells[i].resist_adjust)); + return CastSpell(AIspells[i].spellid, tar->GetID(), 1, AIspells[i].manacost == -2 ? 0 : -1, mana_cost, oDontDoAgainBefore, -1, -1, 0, &(AIspells[i].resist_adjust)); } bool EntityList::AICheckCloseBeneficialSpells(NPC* caster, uint8 iChance, float iRange, uint16 iSpellTypes) { diff --git a/zone/perl_mob.cpp b/zone/perl_mob.cpp index f5ef80a4c..80ca97484 100644 --- a/zone/perl_mob.cpp +++ b/zone/perl_mob.cpp @@ -3998,9 +3998,9 @@ XS(XS_Mob_CastSpell) } if (resist_adjust == 0)//If you do not pass resist adjust as nullptr it will ignore the spells default resist adjust - THIS->CastSpell(spell_id, target_id, slot, casttime, mana_cost, 0, 0xFFFFFFFF, 0xFFFFFFFF, 0, 0); + THIS->CastSpell(spell_id, target_id, slot, casttime, mana_cost, 0, 0xFFFFFFFF, 0xFFFFFFFF, 0); else - THIS->CastSpell(spell_id, target_id, slot, casttime, mana_cost, 0, 0xFFFFFFFF, 0xFFFFFFFF, 0, 0, &resist_adjust); + THIS->CastSpell(spell_id, target_id, slot, casttime, mana_cost, 0, 0xFFFFFFFF, 0xFFFFFFFF, 0, &resist_adjust); } XSRETURN_EMPTY; } diff --git a/zone/spells.cpp b/zone/spells.cpp index 5002e8104..310e2bd01 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -146,7 +146,7 @@ void NPC::SpellProcess() // to allow procs to work bool Mob::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, - uint32 timer, uint32 timer_duration, uint32 type, int16 *resist_adjust, + uint32 timer, uint32 timer_duration, int16 *resist_adjust, uint32 aa_id) { Log.Out(Logs::Detail, Logs::Spells, "CastSpell called for spell %s (%d) on entity %d, slot %d, time %d, mana %d, from item slot %d", @@ -319,11 +319,11 @@ bool Mob::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, if(resist_adjust) { - return(DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, timer, timer_duration, type, *resist_adjust, aa_id)); + return(DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, timer, timer_duration, *resist_adjust, aa_id)); } else { - return(DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, timer, timer_duration, type, spells[spell_id].ResistDiff, aa_id)); + return(DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, timer, timer_duration, spells[spell_id].ResistDiff, aa_id)); } } @@ -337,7 +337,7 @@ bool Mob::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, // bool Mob::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, - uint32 item_slot, uint32 timer, uint32 timer_duration, uint32 type, + uint32 item_slot, uint32 timer, uint32 timer_duration, int16 resist_adjust, uint32 aa_id) { Mob* pMob = nullptr; @@ -363,7 +363,6 @@ bool Mob::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, casting_spell_timer_duration = timer_duration; } casting_spell_aa_id = aa_id; - casting_spell_type = type; SaveSpellLoc(); Log.Out(Logs::Detail, Logs::Spells, "Casting %d Started at (%.3f,%.3f,%.3f)", spell_id, m_SpellLocation.x, m_SpellLocation.y, m_SpellLocation.z); @@ -785,7 +784,6 @@ void Mob::ZeroCastingVars() casting_spell_inventory_slot = 0; casting_spell_timer = 0; casting_spell_timer_duration = 0; - casting_spell_type = 0; casting_spell_resist_adjust = 0; casting_spell_checks = false; casting_spell_aa_id = 0; @@ -819,6 +817,15 @@ void Mob::InterruptSpell(uint16 message, uint16 color, uint16 spellid) CastToNPC()->AI_Event_SpellCastFinished(false, casting_spell_slot); } + if(casting_spell_aa_id && IsClient()) { //Rest AA Timer on failed cast + AA::Rank *rank = zone->GetAlternateAdvancementRank(casting_spell_aa_id); + if(rank) { + CastToClient()->SendAlternateAdvancementTimer(rank->spell_type, 0, 0x7fffffff); + CastToClient()->Message_StringID(15, ABILITY_FAILED); + CastToClient()->GetPTimers().Clear(&database, rank->spell_type + pTimerAAStart); + } + } + ZeroCastingVars(); // resets all the state keeping stuff Log.Out(Logs::Detail, Logs::Spells, "Spell %d has been interrupted.", spellid); @@ -2075,7 +2082,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 else if(!SpellOnTarget(spell_id, spell_target, false, true, resist_adjust, false, level_override)) { if(IsBuffSpell(spell_id) && IsBeneficialSpell(spell_id)) { // Prevent mana usage/timers being set for beneficial buffs - if(casting_spell_type == 1) + if(casting_spell_aa_id) InterruptSpell(); return false; } @@ -2271,14 +2278,18 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 //set our reuse timer on long ass reuse_time spells... if(IsClient() && !isproc) { - if(spell_id == casting_spell_id && casting_spell_timer != 0xFFFFFFFF) + if(casting_spell_aa_id) { + AA::Rank *rank = zone->GetAlternateAdvancementRank(casting_spell_aa_id); + + if(rank && rank->base_ability) { + ExpendAlternateAdvancementCharge(rank->base_ability->id); + } + } + else if(spell_id == casting_spell_id && casting_spell_timer != 0xFFFFFFFF) { //aa new todo: aa expendable charges here CastToClient()->GetPTimers().Start(casting_spell_timer, casting_spell_timer_duration); Log.Out(Logs::Detail, Logs::Spells, "Spell %d: Setting custom reuse timer %d to %d", spell_id, casting_spell_timer, casting_spell_timer_duration); - if(casting_spell_aa_id) { - CastToClient()->SendAlternateAdvancementTimer(casting_spell_timer - pTimerAAStart, 0, 0); - } } else if(spells[spell_id].recast_time > 1000 && !spells[spell_id].IsDisciplineBuff) { int recast = spells[spell_id].recast_time/1000; @@ -2297,10 +2308,6 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 Log.Out(Logs::Detail, Logs::Spells, "Spell %d: Setting long reuse timer to %d s (orig %d)", spell_id, recast, spells[spell_id].recast_time); CastToClient()->GetPTimers().Start(pTimerSpellStart + spell_id, recast); } - - if(casting_spell_aa_id) { - ExpendAlternateAdvancementCharge(casting_spell_aa_id); - } } if(IsClient() && ((slot == USE_ITEM_SPELL_SLOT) || (slot == POTION_BELT_SPELL_SLOT) || (slot == TARGET_RING_SPELL_SLOT))) @@ -3758,7 +3765,7 @@ bool Mob::SpellOnTarget(uint16 spell_id, Mob *spelltar, bool reflect, bool use_r // if SpellEffect returned false there's a problem applying the // spell. It's most likely a buff that can't stack. Log.Out(Logs::Detail, Logs::Spells, "Spell %d could not apply its effects %s -> %s\n", spell_id, GetName(), spelltar->GetName()); - if(casting_spell_type != 1) // AA is handled differently + if(casting_spell_aa_id) Message_StringID(MT_SpellFailure, SPELL_NO_HOLD); safe_delete(action_packet); return false; From 0447321d92f00803ab3bc3611e55f12987a02d33 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Wed, 17 Jun 2015 02:47:05 -0400 Subject: [PATCH 28/48] Implement songcap needed for the AA revamp Added rule Character:UseSpellFileSongCap defaulted to true since most servers will probably be updating everything. --- common/ruletypes.h | 1 + common/shareddb.cpp | 5 +++-- common/spdat.h | 4 ++-- zone/client_mods.cpp | 11 ++++++++--- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index 9a36b77f4..f066b9115 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -99,6 +99,7 @@ RULE_BOOL ( Character, EnableXTargetting, true) // Enable Extended Targetting Wi RULE_BOOL ( Character, KeepLevelOverMax, false) // Don't delevel a character that has somehow gone over the level cap RULE_INT ( Character, FoodLossPerUpdate, 35) // How much food/water you lose per stamina update RULE_INT ( Character, BaseInstrumentSoftCap, 36) // Softcap for instrument mods, 36 commonly referred to as "3.6" as well. +RULE_BOOL ( Character, UseSpellFileSongCap, true) // When they removed the AA that increased the cap they removed the above and just use the spell field RULE_INT ( Character, BaseRunSpeedCap, 158) // Base Run Speed Cap, on live it's 158% which will give you a runspeed of 1.580 hard capped to 225. RULE_INT ( Character, OrnamentationAugmentType, 20) //Ornamentation Augment Type RULE_REAL(Character, EnvironmentDamageMulipliter, 1) diff --git a/common/shareddb.cpp b/common/shareddb.cpp index aa4924665..c9106ea04 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -1682,6 +1682,7 @@ void SharedDatabase::LoadSpells(void *data, int max_spells) { sp[tempid].not_extendable = atoi(row[197]) != 0; sp[tempid].suspendable = atoi(row[200]) != 0; sp[tempid].viral_range = atoi(row[201]); + sp[tempid].songcap = atoi(row[202]); sp[tempid].no_block = atoi(row[205]); sp[tempid].spellgroup=atoi(row[207]); sp[tempid].rank = atoi(row[208]); @@ -2021,7 +2022,7 @@ const LootDrop_Struct* SharedDatabase::GetLootDrop(uint32 lootdrop_id) { void SharedDatabase::LoadCharacterInspectMessage(uint32 character_id, InspectMessage_Struct* message) { std::string query = StringFormat("SELECT `inspect_message` FROM `character_inspect_messages` WHERE `id` = %u LIMIT 1", character_id); - auto results = QueryDatabase(query); + auto results = QueryDatabase(query); auto row = results.begin(); memset(message, '\0', sizeof(InspectMessage_Struct)); for (auto row = results.begin(); row != results.end(); ++row) { @@ -2031,7 +2032,7 @@ void SharedDatabase::LoadCharacterInspectMessage(uint32 character_id, InspectMes void SharedDatabase::SaveCharacterInspectMessage(uint32 character_id, const InspectMessage_Struct* message) { std::string query = StringFormat("REPLACE INTO `character_inspect_messages` (id, inspect_message) VALUES (%u, '%s')", character_id, EscapeString(message->text).c_str()); - auto results = QueryDatabase(query); + auto results = QueryDatabase(query); } void SharedDatabase::GetBotInspectMessage(uint32 botid, InspectMessage_Struct* message) { diff --git a/common/spdat.h b/common/spdat.h index 24e982aee..c8e039f15 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -735,8 +735,8 @@ struct SPDat_Spell_Struct /* 198- 199 */ /* 200 */ bool suspendable; // buff is suspended in suspended buff zones /* 201 */ int viral_range; -/* 202 */ -/* 203 */ //int songcap; // individual song cap (how live currently does it, not implemented) +/* 202 */ int songcap; // individual song cap +/* 203 */ /* 204 */ /* 205 */ bool no_block; /* 206 */ diff --git a/zone/client_mods.cpp b/zone/client_mods.cpp index 56a22de9a..76ce5195c 100644 --- a/zone/client_mods.cpp +++ b/zone/client_mods.cpp @@ -1978,7 +1978,11 @@ uint32 Mob::GetInstrumentMod(uint16 spell_id) const return 10; uint32 effectmod = 10; - int effectmodcap = RuleI(Character, BaseInstrumentSoftCap); + int effectmodcap = 0; + if (RuleB(Character, UseSpellFileSongCap)) + effectmodcap = spells[spell_id].songcap / 10; + else + effectmodcap = RuleI(Character, BaseInstrumentSoftCap); // this should never use spell modifiers... // if a spell grants better modifers, they are copied into the item mods // because the spells are supposed to act just like having the intrument. @@ -2048,10 +2052,11 @@ uint32 Mob::GetInstrumentMod(uint16 spell_id) const effectmod = 10; return effectmod; } - effectmodcap += aabonuses.songModCap + spellbonuses.songModCap + itembonuses.songModCap; + if (!RuleB(Character, UseSpellFileSongCap)) + effectmodcap += aabonuses.songModCap + spellbonuses.songModCap + itembonuses.songModCap; if (effectmod < 10) effectmod = 10; - if (effectmod > effectmodcap) + if (effectmodcap && effectmod > effectmodcap) // if the cap is calculated to be 0 using new rules, no cap. effectmod = effectmodcap; Log.Out(Logs::Detail, Logs::Spells, "%s::GetInstrumentMod() spell=%d mod=%d modcap=%d\n", GetName(), spell_id, effectmod, effectmodcap); From 065363480f14c88c5604ea97c692e65e21d82f83 Mon Sep 17 00:00:00 2001 From: KimLS Date: Wed, 17 Jun 2015 12:05:09 -0700 Subject: [PATCH 29/48] Added AA grant to quest system, fixed a bug here or there noticed incrementaa needs to be fixed or removed --- zone/aa.cpp | 55 ++++++++++++++++++++++++++--- zone/aa_ability.h | 1 - zone/aa_rank.h | 1 - zone/client.cpp | 4 +++ zone/lua_mob.cpp | 24 +++++++++++++ zone/lua_mob.h | 4 +++ zone/mob.h | 1 + zone/perl_mob.cpp | 90 +++++++++++++++++++++++++++++++++++++++++++++-- zone/spells.cpp | 2 +- 9 files changed, 171 insertions(+), 11 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 21e1de1b2..741a15aff 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1015,6 +1015,7 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { NotifyNewTitlesAvailable(); } +//need to rewrite this void Client::IncrementAlternateAdvancementRank(int rank_id) { AA::Rank *rank = zone->GetAlternateAdvancementRank(rank_id); if(!rank) { @@ -1139,8 +1140,6 @@ void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) { if(!SpellFinished(rank->spell, entity_list.GetMob(target_id), 10, -1, -1, spells[rank->spell].ResistDiff, false)) { return; } - CastToClient()->GetPTimers().Start(rank->spell_type, cooldown); - SendAlternateAdvancementTimer(rank->spell_type, 0, 0); ExpendAlternateAdvancementCharge(ability->id); } else { if(!CastSpell(rank->spell, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, rank->spell_type + pTimerAAStart, cooldown, nullptr, rank->id)) { @@ -1312,6 +1311,8 @@ uint32 Mob::GetAAByAAID(uint32 aa_id, uint32 *charges) const { return iter->second.first; } } + + return 0; } bool Mob::SetAA(uint32 rank_id, uint32 new_value, uint32 charges) { @@ -1474,9 +1475,14 @@ void Zone::LoadAlternateAdvancement() { current->total_cost = current->cost + current->prev->total_cost; } else { + current->prev_id = -1; current->total_cost = current->cost; } + if(!current->next) { + current->next_id = -1; + } + i++; current = current->next; } @@ -1490,7 +1496,8 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_mapprev_id = atoi(row[10]); rank->next_id = atoi(row[11]); rank->expansion = atoi(row[12]); - rank->account_time_required = atoul(row[13]); rank->base_ability = nullptr; rank->total_cost = 0; rank->next = nullptr; @@ -1606,3 +1612,42 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_mapGetAlternateAdvancementAbilityAndRank(aa_id, points); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!ability) { + return; + } + + if(ability->charges > 0) { + return; + } + + if(!ability->grant_only) { + return; + } + + if(!CanUseAlternateAdvancementRank(rank)) { + return; + } + + SetAA(ability->first_rank_id, rank->current_value, 0); + + if(IsClient()) { + Client *c = CastToClient(); + + if(rank->next) { + c->SendAlternateAdvancementRank(rank->base_ability->id, rank->next->current_value); + } + + c->SendAlternateAdvancementPoints(); + c->SendAlternateAdvancementStats(); + c->CalcBonuses(); + } +} \ No newline at end of file diff --git a/zone/aa_ability.h b/zone/aa_ability.h index ba152fb06..4a2d41f3e 100644 --- a/zone/aa_ability.h +++ b/zone/aa_ability.h @@ -39,7 +39,6 @@ public: ~Ability() { } Rank *GetMaxRank(); - Rank *GetRankByLevel(int level); Rank *GetRankByPointsSpent(int current_level); int GetMaxLevel(Mob *who); diff --git a/zone/aa_rank.h b/zone/aa_rank.h index a824f2c82..977a07680 100644 --- a/zone/aa_rank.h +++ b/zone/aa_rank.h @@ -45,7 +45,6 @@ public: Rank *next; int current_value; int expansion; - uint32 account_time_required; int total_cost; Ability *base_ability; std::vector effects; diff --git a/zone/client.cpp b/zone/client.cpp index 5ef3e84e5..0ce7292ef 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -533,6 +533,10 @@ bool Client::SaveAA() { if(!ability) continue; + if(ability->grant_only) { + continue; + } + if(rank.second.first > 0) { AA::Rank *r = ability->GetRankByPointsSpent(rank.second.first); diff --git a/zone/lua_mob.cpp b/zone/lua_mob.cpp index 11124d50f..31719d364 100644 --- a/zone/lua_mob.cpp +++ b/zone/lua_mob.cpp @@ -1195,6 +1195,26 @@ int Lua_Mob::GetAA(int id) { return self->GetAA(id); } +int Lua_Mob::GetAAByAAID(int id) { + Lua_Safe_Call_Int(); + return self->GetAAByAAID(id); +} + +bool Lua_Mob::SetAA(int rank_id, int new_value) { + Lua_Safe_Call_Bool(); + return self->SetAA(rank_id, new_value); +} + +bool Lua_Mob::SetAA(int rank_id, int new_value, int charges) { + Lua_Safe_Call_Bool(); + return self->SetAA(rank_id, new_value, charges); +} + +void Lua_Mob::GrantAlternateAdvancementAbility(int aa_id, int points) { + Lua_Safe_Call_Void(); + self->GrantAlternateAdvancementAbility(aa_id, points); +} + bool Lua_Mob::DivineAura() { Lua_Safe_Call_Bool(); return self->DivineAura(); @@ -2074,6 +2094,10 @@ luabind::scope lua_register_mob() { .def("CheckHealAggroAmount", (int(Lua_Mob::*)(int))&Lua_Mob::CheckHealAggroAmount) .def("CheckHealAggroAmount", (int(Lua_Mob::*)(int,uint32))&Lua_Mob::CheckHealAggroAmount) .def("GetAA", (int(Lua_Mob::*)(int))&Lua_Mob::GetAA) + .def("GetAAByAAID", (int(Lua_Mob::*)(int))&Lua_Mob::GetAAByAAID) + .def("SetAA", (bool(Lua_Mob::*)(int,int))&Lua_Mob::SetAA) + .def("SetAA", (bool(Lua_Mob::*)(int,int,int))&Lua_Mob::SetAA) + .def("GrantAlternateAdvancementAbility", (void(Lua_Mob::*)(int, int))&Lua_Mob::GrantAlternateAdvancementAbility) .def("DivineAura", (bool(Lua_Mob::*)(void))&Lua_Mob::DivineAura) .def("SetOOCRegen", (void(Lua_Mob::*)(int))&Lua_Mob::SetOOCRegen) .def("GetEntityVariable", (const char*(Lua_Mob::*)(const char*))&Lua_Mob::GetEntityVariable) diff --git a/zone/lua_mob.h b/zone/lua_mob.h index 023fedd2a..914f46c5d 100644 --- a/zone/lua_mob.h +++ b/zone/lua_mob.h @@ -249,6 +249,10 @@ public: int CheckHealAggroAmount(int spell_id); int CheckHealAggroAmount(int spell_id, uint32 heal_possible); int GetAA(int id); + int GetAAByAAID(int id); + bool SetAA(int rank_id, int new_value); + bool SetAA(int rank_id, int new_value, int charges); + void GrantAlternateAdvancementAbility(int aa_id, int points); bool DivineAura(); void SetOOCRegen(int regen); const char* GetEntityVariable(const char *name); diff --git a/zone/mob.h b/zone/mob.h index 20ec928e7..1c3d7ab15 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -969,6 +969,7 @@ public: void ExpendAlternateAdvancementCharge(uint32 aa_id); void CalcAABonuses(StatBonuses* newbon); void ApplyAABonuses(const AA::Rank &rank, StatBonuses* newbon); + void GrantAlternateAdvancementAbility(int aa_id, int points); protected: void CommonDamage(Mob* other, int32 &damage, const uint16 spell_id, const SkillUseTypes attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic); diff --git a/zone/perl_mob.cpp b/zone/perl_mob.cpp index 80ca97484..612d9f868 100644 --- a/zone/perl_mob.cpp +++ b/zone/perl_mob.cpp @@ -6360,12 +6360,12 @@ XS(XS_Mob_GetAA) { dXSARGS; if (items != 2) - Perl_croak(aTHX_ "Usage: Mob::GetAA(THIS, aa_id)"); + Perl_croak(aTHX_ "Usage: Mob::GetAA(THIS, rank_id)"); { Mob * THIS; uint32 RETVAL; dXSTARG; - uint32 aa_id = (uint32)SvUV(ST(1)); + uint32 rank_id = (uint32)SvUV(ST(1)); if (sv_derived_from(ST(0), "Mob")) { IV tmp = SvIV((SV*)SvRV(ST(0))); @@ -6376,12 +6376,93 @@ XS(XS_Mob_GetAA) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetAA(aa_id); + RETVAL = THIS->GetAA(rank_id); XSprePUSH; PUSHu((UV)RETVAL); } XSRETURN(1); } +XS(XS_Mob_GetAAByAAID); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Mob_GetAAByAAID) +{ + dXSARGS; + if(items != 2) + Perl_croak(aTHX_ "Usage: Mob::GetAAByAAID(THIS, aa_id)"); + { + Mob * THIS; + uint32 RETVAL; + dXSTARG; + uint32 aa_id = (uint32)SvUV(ST(1)); + + if(sv_derived_from(ST(0), "Mob")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + THIS = INT2PTR(Mob *, tmp); + } + else + Perl_croak(aTHX_ "THIS is not of type Mob"); + if(THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + RETVAL = THIS->GetAAByAAID(aa_id); + XSprePUSH; PUSHu((UV)RETVAL); + } + XSRETURN(1); +} + +XS(XS_Mob_SetAA); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Mob_SetAA) +{ + dXSARGS; + if(items < 3 || items > 4) + Perl_croak(aTHX_ "Usage: Mob::SetAA(THIS, aa_id, points, [charges])"); + { + Mob * THIS; + bool RETVAL; + int aa_id = (int)SvIV(ST(1)); + int points = (int)SvIV(ST(2)); + int charges = (items == 4) ? (int)SvIV(ST(3)) : 0; + + if(sv_derived_from(ST(0), "Mob")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + THIS = INT2PTR(Mob *, tmp); + } + else + Perl_croak(aTHX_ "THIS is not of type Mob"); + if(THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + RETVAL = THIS->SetAA(aa_id, points, charges); + ST(0) = boolSV(RETVAL); + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + +XS(XS_Mob_GrantAlternateAdvancementAbility); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Mob_GrantAlternateAdvancementAbility) +{ + dXSARGS; + if(items != 3) + Perl_croak(aTHX_ "Usage: Mob::GrantAlternateAdvancementAbility(THIS, aa_id, points)"); + { + Mob * THIS; + int aa_id = (int)SvIV(ST(1)); + int points = (int)SvIV(ST(2)); + + if(sv_derived_from(ST(0), "Mob")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + THIS = INT2PTR(Mob *, tmp); + } + else + Perl_croak(aTHX_ "THIS is not of type Mob"); + if(THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + THIS->GrantAlternateAdvancementAbility(aa_id, points); + } + XSRETURN_EMPTY; +} + XS(XS_Mob_DivineAura); /* prototype to pass -Wmissing-prototypes */ XS(XS_Mob_DivineAura) { @@ -8625,6 +8706,9 @@ XS(boot_Mob) newXSproto(strcpy(buf, "CheckAggroAmount"), XS_Mob_CheckAggroAmount, file, "$$"); newXSproto(strcpy(buf, "CheckHealAggroAmount"), XS_Mob_CheckHealAggroAmount, file, "$$"); newXSproto(strcpy(buf, "GetAA"), XS_Mob_GetAA, file, "$$"); + newXSproto(strcpy(buf, "GetAAByAAID"), XS_Mob_GetAAByAAID, file, "$$"); + newXSproto(strcpy(buf, "SetAA"), XS_Mob_SetAA, file, "$$$;$"); + newXSproto(strcpy(buf, "GrantAlternateAdvancementAbility"), XS_Mob_GrantAlternateAdvancementAbility, file, "$$$"); newXSproto(strcpy(buf, "DivineAura"), XS_Mob_DivineAura, file, "$"); newXSproto(strcpy(buf, "AddFeignMemory"), XS_Mob_AddFeignMemory, file, "$$"); newXSproto(strcpy(buf, "RemoveFromFeignMemory"), XS_Mob_RemoveFromFeignMemory, file, "$$"); diff --git a/zone/spells.cpp b/zone/spells.cpp index 310e2bd01..ec872d1c9 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -820,8 +820,8 @@ void Mob::InterruptSpell(uint16 message, uint16 color, uint16 spellid) if(casting_spell_aa_id && IsClient()) { //Rest AA Timer on failed cast AA::Rank *rank = zone->GetAlternateAdvancementRank(casting_spell_aa_id); if(rank) { + CastToClient()->Message_StringID(MT_SpellFailure, ABILITY_FAILED); CastToClient()->SendAlternateAdvancementTimer(rank->spell_type, 0, 0x7fffffff); - CastToClient()->Message_StringID(15, ABILITY_FAILED); CastToClient()->GetPTimers().Clear(&database, rank->spell_type + pTimerAAStart); } } From 635ac692eaa3492cdd9a36c62b19612ece91df55 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Fri, 19 Jun 2015 21:48:34 -0400 Subject: [PATCH 30/48] Fix merge ... --- zone/bot.cpp | 271 +++++++++++++++++++++++++-------------------------- 1 file changed, 134 insertions(+), 137 deletions(-) diff --git a/zone/bot.cpp b/zone/bot.cpp index 0d601dec7..9dae2fc6a 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -172,17 +172,17 @@ Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double to end_regen = CalcEnduranceRegen(); if(cur_hp > max_hp) cur_hp = max_hp; - + if(cur_hp <= 0) { SetHP(max_hp/5); SetMana(0); BuffFadeAll(); SpellOnTarget(756, this); // Rezz effects } - + if(cur_mana > max_mana) cur_mana = max_mana; - + cur_end = max_end; } @@ -1140,7 +1140,7 @@ void Bot::GenerateArmorClass() { iksarlevel -= 10; if(iksarlevel > 25) iksarlevel = 25; - + if(iksarlevel > 0) displayed += (iksarlevel * 12 / 10); } @@ -1535,7 +1535,7 @@ bool Bot::IsBotNameAvailable(char *botName, std::string* errorMessage) { *errorMessage = std::string(results.ErrorMessage()); return false; } - + if (results.RowCount()) return false; @@ -1568,7 +1568,7 @@ bool Bot::Save() { auto botOwner = GetBotOwner(); if (botOwner) botOwner->Message(13, results.ErrorMessage().c_str()); - + return false; } @@ -1607,7 +1607,7 @@ bool Bot::Save() { auto botOwner = GetBotOwner(); if (botOwner) botOwner->Message(13, results.ErrorMessage().c_str()); - + return false; } SaveBuffs(); @@ -2043,7 +2043,7 @@ void Bot::BotMeditate(bool isSitting) { if(IsSitting()) Stand(); } - + if(IsSitting()) { if(!rest_timer.Enabled()) rest_timer.Start(RuleI(Character, RestRegenTimeToActivate) * 1000); @@ -2087,14 +2087,14 @@ void Bot::BotRangedAttack(Mob* other) { BuffFadeByEffect(SE_Invisibility2); invisible = false; } - + if(invisible_undead) { Log.Out(Logs::Detail, Logs::Combat, "Removing invisibility vs. undead due to melee attack."); BuffFadeByEffect(SE_InvisVsUndead); BuffFadeByEffect(SE_InvisVsUndead2); invisible_undead = false; } - + if(invisible_animals) { Log.Out(Logs::Detail, Logs::Combat, "Removing invisibility vs. animals due to melee attack."); BuffFadeByEffect(SE_InvisVsAnimals); @@ -2218,11 +2218,11 @@ void Bot::DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, SkillUseTypes const Item_Struct* botweapon = 0; if(inst) botweapon = inst->GetItem(); - + if(botweapon) { if(botweapon->ItemType == ItemTypeShield) hate += botweapon->AC; - + hate = (hate * (100 + GetFuriousBash(botweapon->Focus.Effect)) / 100); } } @@ -2278,7 +2278,7 @@ void Bot::ApplySpecialAttackMod(SkillUseTypes skill, int32 &dmg, int32 &mindmg) const Item_Struct* botweapon = 0; if(inst) botweapon = inst->GetItem(); - + if(botweapon) dmg += botweapon->AC * (RuleI(Combat, SpecialAttackACBonus))/100; } @@ -2391,7 +2391,7 @@ void Bot::AI_Process() { if(!GetTarget() || (IsBotCaster() && !IsBotCasterCombatRange(GetTarget())) || (IsBotArcher() && IsArcheryRange(GetTarget())) || (DistanceSquaredNoZ(static_cast(m_Position), m_PreSummonLocation) < 10)) { if(GetTarget()) FaceTarget(GetTarget()); - + SetHasBeenSummoned(false); } else if(!IsRooted()) { if(GetTarget() && GetTarget()->GetHateTop() && GetTarget()->GetHateTop() != this) { @@ -2410,7 +2410,7 @@ void Bot::AI_Process() { } else { if(GetTarget()) FaceTarget(GetTarget()); - + SetHasBeenSummoned(false); } return; @@ -2619,7 +2619,7 @@ void Bot::AI_Process() { entity_list.MessageClose_StringID(this, false, 200, 0, BERSERK_START, GetName()); this->berserk = true; } - + if (berserk && this->GetHPRatio() > 30) { entity_list.MessageClose_StringID(this, false, 200, 0, BERSERK_END, GetName()); this->berserk = false; @@ -2846,16 +2846,16 @@ void Bot::PetAIProcess() { aa_skill += botPet->GetOwner()->GetAA(aaWardersAlacrity); if(aa_skill >= 1) aa_chance += ((aa_skill > 5 ? 5 : aa_skill) * 4); - + if(aa_skill >= 6) aa_chance += ((aa_skill - 5 > 3 ? 3 : aa_skill - 5) * 7); - + if(aa_skill >= 9) aa_chance += ((aa_skill - 8 > 3 ? 3 : aa_skill - 8) * 3); - + if(aa_skill >= 12) aa_chance += ((aa_skill - 11) * 1); - + //aa_chance += botPet->GetOwner()->GetAA(aaCompanionsAlacrity) * 3; @@ -3035,7 +3035,7 @@ void Bot::Spawn(Client* botCharacterOwner, std::string* errorMessage) { uint8 materialFromSlot = 0xFF; for(int i = EmuConstants::EQUIPMENT_BEGIN; i <= EmuConstants::EQUIPMENT_END; ++i) { itemID = GetBotItemBySlot(i); - if(itemID != 0) { + if(itemID != 0) { materialFromSlot = Inventory::CalcMaterialFromSlot(i); if(materialFromSlot != 0xFF) this->SendWearChange(materialFromSlot); @@ -3273,7 +3273,7 @@ void Bot::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) { if(item) { if(strlen(item->IDFile) > 2) ns->spawn.equipment[MaterialPrimary].Material = atoi(&item->IDFile[2]); - + ns->spawn.colors[MaterialPrimary].Color = GetEquipmentColor(MaterialPrimary); } } @@ -3284,7 +3284,7 @@ void Bot::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) { if(item) { if(strlen(item->IDFile) > 2) ns->spawn.equipment[MaterialSecondary].Material = atoi(&item->IDFile[2]); - + ns->spawn.colors[MaterialSecondary].Color = GetEquipmentColor(MaterialSecondary); } } @@ -4138,7 +4138,7 @@ bool Bot::Bot_Command_CharmTarget(int charmtype, Mob *target) { charmid = 198; else if((charmlevel >= 31) && (charmlevel <= 46)) charmid = 197; - else if((charmlevel >= 18) && (charmlevel <= 30)) + else if((charmlevel >= 18) && (charmlevel <= 30)) charmid = 196; break; case 3: // Druid @@ -4240,7 +4240,7 @@ bool Bot::Bot_Command_RezzTarget(Mob *target) { rezid = 2172; else if(rezlevel >= 37) rezid = 388; - else if(rezlevel >= 32) + else if(rezlevel >= 32) rezid = 2171; else if(rezlevel >= 27) rezid = 391; @@ -4382,11 +4382,11 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli "Left Finger", "Right Finger", "Chest", "Legs", "Feet", "Waist", "Ammo", "Powersource" }; bool success = false; int how_many_slots = 0; - for(int j = EmuConstants::EQUIPMENT_BEGIN; j <= (EmuConstants::EQUIPMENT_END + 1); ++j) { + for(int j = EmuConstants::EQUIPMENT_BEGIN; j <= (EmuConstants::EQUIPMENT_END + 1); ++j) { if((mWeaponItem->Slots & (1 << j))) { if (j == 22) j = 9999; - + how_many_slots++; if(!GetBotItem(j)) { if(j == MainPrimary) { @@ -4447,7 +4447,7 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli if((mWeaponItem->Slots & (1 << j))) { if (j == 22) j = 9999; - + swap_item = GetBotItem(j); failedLoreCheck = false; for (int k = AUG_BEGIN; k < EmuConstants::ITEM_COMMON_SIZE; ++k) { @@ -4634,7 +4634,7 @@ void Bot::Damage(Mob *from, int32 damage, uint16 spell_id, SkillUseTypes attack_ Log.Out(Logs::Detail, Logs::Combat, "Triggering EVENT_ATTACK due to attack by %s", from->GetName()); parse->EventNPC(EVENT_ATTACK, this, from, "", 0); } - + attacked_timer.Start(CombatEventTimer_expire); // if spell is lifetap add hp to the caster if (spell_id != SPELL_UNKNOWN && IsLifetapSpell(spell_id)) { @@ -4685,7 +4685,7 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b if ((IsCasting() && (GetClass() != BARD) && !IsFromSpell) || other == nullptr || (GetHP() < 0) || (GetAppearance() == eaDead) || (!IsAttackAllowed(other))) { if(this->GetOwnerID()) entity_list.MessageClose(this, 1, 200, 10, "%s says, '%s is not a legal target master.'", this->GetCleanName(), this->GetTarget()->GetCleanName()); - + if(other) { RemoveFromHateList(other); Log.Out(Logs::Detail, Logs::Combat, "I am not allowed to attack %s", other->GetCleanName()); @@ -4697,14 +4697,14 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b Log.Out(Logs::Detail, Logs::Combat, "Attack canceled, Divine Aura is in effect."); return false; } - + FaceTarget(GetTarget()); ItemInst* weapon = nullptr; if(Hand == MainPrimary) { weapon = GetBotItem(MainPrimary); OffHandAtk(false); } - + if(Hand == MainSecondary) { weapon = GetBotItem(MainSecondary); OffHandAtk(true); @@ -4731,7 +4731,7 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b uint32 hate = 0; if (weapon) hate = (weapon->GetItem()->Damage + weapon->GetItem()->ElemDmgAmt); - + int weapon_damage = GetWeaponDamage(other, weapon, &hate); if (hate == 0 && weapon_damage > 1) hate = weapon_damage; @@ -4896,14 +4896,14 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b BuffFadeByEffect(SE_Invisibility2); invisible = false; } - + if(invisible_undead) { Log.Out(Logs::Detail, Logs::Combat, "Removing invisibility vs. undead due to melee attack."); BuffFadeByEffect(SE_InvisVsUndead); BuffFadeByEffect(SE_InvisVsUndead2); invisible_undead = false; } - + if(invisible_animals){ Log.Out(Logs::Detail, Logs::Combat, "Removing invisibility vs. animals due to melee attack."); BuffFadeByEffect(SE_InvisVsAnimals); @@ -4963,7 +4963,7 @@ int32 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint32 points, uint16 base1 = eff.base1; base2 = eff.base2; slot = eff.slot; - + //AA Foci's can contain multiple focus effects within the same AA. //To handle this we will not automatically return zero if a limit is found. //Instead if limit is found and multiple effects, we will reset the limit check @@ -5175,10 +5175,8 @@ int32 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint32 points, uint16 case SE_FcTwincast: { if(type == focusTwincast) value = base1; - } break; } - /* case SE_SympatheticProc: { @@ -5188,10 +5186,10 @@ int32 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint32 points, uint16 int16 ProcRateMod = base1; //Baseline is 100 for most Sympathetic foci int32 cast_time = GetActSpellCasttime(spell_id, spells[spell_id].cast_time); GetSympatheticProcChances(ProcBonus, ProcChance, cast_time, ProcRateMod); - + if(zone->random.Real(0, 1) <= ProcChance) value = focus_id; - + else value = 0; } @@ -5247,7 +5245,6 @@ int32 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint32 points, uint16 value = base1; break; } - } //Check for spell skill limits. if ((LimitSpellSkill) && (!SpellSkill_Found)) @@ -5289,7 +5286,7 @@ int32 Bot::GetBotFocusEffect(BotfocusType bottype, uint16 spell_id) { ItemInst* ins = GetBotItem(x); if (!ins) continue; - + TempItem = ins->GetItem(); if (TempItem && TempItem->Focus.Effect > 0 && TempItem->Focus.Effect != SPELL_UNKNOWN) { if(rand_effectiveness) { @@ -5400,7 +5397,7 @@ int32 Bot::GetBotFocusEffect(BotfocusType bottype, uint16 spell_id) { aa_value = aa.second.first; if (aa_AA < 1 || aa_value < 1) continue; - + Total3 = CalcBotAAFocus(bottype, aa_AA, aa_value, spell_id); if (Total3 > 0 && realTotal3 >= 0 && Total3 > realTotal3) { realTotal3 = Total3; @@ -5470,7 +5467,7 @@ int32 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel if (spell.classes[(GetClass() % 16) - 1] < focus_spell.base[i]) return 0; break; - + case SE_LimitCastTimeMin: if (spells[spell_id].cast_time < (uint32)focus_spell.base[i]) return 0; @@ -5501,8 +5498,8 @@ int32 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel return 0; } break; - - + + case SE_LimitSpellType: switch(focus_spell.base[i]) { case 0: @@ -5517,7 +5514,7 @@ int32 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel Log.Out(Logs::General, Logs::Normal, "CalcFocusEffect: unknown limit spelltype %d", focus_spell.base[i]); } break; - + case SE_LimitManaMin: if(spell.mana < focus_spell.base[i]) return 0; @@ -5712,19 +5709,19 @@ int32 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel case SE_FcBaseEffects: { if (bottype == BotfocusFcBaseEffects) value = focus_spell.base[i]; - + break; } case SE_FcDamagePctCrit: { if(bottype == BotfocusFcDamagePctCrit) value = focus_spell.base[i]; - + break; } case SE_FcIncreaseNumHits: { if(bottype == BotfocusIncreaseNumHits) value = focus_spell.base[i]; - + break; } default: @@ -5791,7 +5788,7 @@ bool Bot::AvoidDamage(Mob* other, int32 &damage, bool CanRiposte) { damage = -3; Log.Out(Logs::Detail, Logs::Combat, "I am enraged, riposting frontal attack."); } - + float riposte_chance = 0.0f; if (CanRiposte && damage > 0 && CanThisClassRiposte() && !other->BehindMob(this, other->GetX(), other->GetY())) { riposte_chance = ((100.0f + (float)defender->GetAABonuses().RiposteChance + (float)defender->GetSpellBonuses().RiposteChance + (float)defender->GetItemBonuses().RiposteChance) / 100.0f); @@ -5802,7 +5799,7 @@ bool Bot::AvoidDamage(Mob* other, int32 &damage, bool CanRiposte) { RollTable[0] = (bonus + (itembonuses.HeroicDEX / 25)); } } - + bool bBlockFromRear = false; bool bShieldBlockFromRear = false; if (this->IsBot()) { @@ -5894,7 +5891,7 @@ bool Bot::AvoidDamage(Mob* other, int32 &damage, bool CanRiposte) { if (damage < 0) return true; - + return false; } @@ -5977,11 +5974,11 @@ void Bot::DoSpecialAttackDamage(Mob *who, SkillUseTypes skill, int32 max_damage, const Item_Struct* botweapon = 0; if(inst) botweapon = inst->GetItem(); - + if(botweapon) { if(botweapon->ItemType == ItemTypeShield) hate += botweapon->AC; - + hate = (hate * (100 + GetFuriousBash(botweapon->Focus.Effect)) / 100); } } @@ -6046,7 +6043,7 @@ void Bot::TryBackstab(Mob *other, int ReuseTime) { const Item_Struct* botpiercer = nullptr; if(inst) botpiercer = inst->GetItem(); - + if(!botpiercer || (botpiercer->ItemType != ItemType1HPiercing)) { BotGroupSay(this, "I can't backstab with this weapon!"); return; @@ -6218,7 +6215,7 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { bool canBash = false; if((GetRace() == OGRE || GetRace() == TROLL || GetRace() == BARBARIAN) || (m_inv.GetItem(MainSecondary) && m_inv.GetItem(MainSecondary)->GetItem()->ItemType == ItemTypeShield) || (m_inv.GetItem(MainPrimary) && (m_inv.GetItem(MainPrimary)->GetItem()->ItemType == ItemType2HSlash || m_inv.GetItem(MainPrimary)->GetItem()->ItemType == ItemType2HBlunt || m_inv.GetItem(MainPrimary)->GetItem()->ItemType == ItemType2HPiercing) && GetAA(aa2HandBash) >= 1)) canBash = true; - + if(!canBash || zone->random.Int(0, 100) > 25) skill_to_use = SkillKick; else @@ -6671,7 +6668,7 @@ void Bot::SetAttackTimer() { } else { delay = ItemToUse->Delay; } - + speed = (RuleB(Spells, Jun182014HundredHandsRevamp) ? static_cast(((delay / haste_mod) + ((hhe / 1000.0f) * (delay / haste_mod))) * 100) : static_cast(((delay / haste_mod) + ((hhe / 100.0f) * delay)) * 100)); TimerToUse->SetAtTrigger(std::max(RuleI(Combat, MinHastedDelay), speed), true); @@ -6982,7 +6979,7 @@ int32 Bot::GetActSpellDuration(uint16 spell_id, int32 duration) { increase += 30; if (GetAA(aaSpellCastingReinforcementMastery) == 1) increase += 20; - + break; } @@ -7001,7 +6998,7 @@ float Bot::GetAOERange(uint16 spell_id) { range = spells[spell_id].aoerange; if(range == 0) range = spells[spell_id].range; - + if(range == 0) range = 10; @@ -7048,14 +7045,14 @@ bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_t Log.Out(Logs::Detail, Logs::Spells, "Spell casting canceled: not able to cast now. Valid? %d, casting %d, waiting? %d, spellend? %d, stunned? %d, feared? %d, mezed? %d, silenced? %d", IsValidSpell(spell_id), casting_spell_id, delaytimer, spellend_timer.Enabled(), IsStunned(), IsFeared(), IsMezzed(), IsSilenced() ); if(IsSilenced() && !IsDiscipline(spell_id)) Message_StringID(13, SILENCED_STRING); - + if(IsAmnesiad() && IsDiscipline(spell_id)) - + Message_StringID(13, MELEE_SILENCE); - + if(casting_spell_id) AI_Event_SpellCastFinished(false, casting_spell_slot); - + return false; } } @@ -7064,7 +7061,7 @@ bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_t Message_StringID(13, SPELL_WOULDNT_HOLD); if(casting_spell_id) AI_Event_SpellCastFinished(false, casting_spell_slot); - + return false; } @@ -7073,7 +7070,7 @@ bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_t InterruptSpell(173, 0x121, false); return false; } - + if(slot < MAX_PP_MEMSPELL && !CheckFizzle(spell_id)) { int fizzle_msg = IsBardSong(spell_id) ? MISS_NOTE : SPELL_FIZZLE; InterruptSpell(fizzle_msg, 0x121, spell_id); @@ -7233,7 +7230,7 @@ bool Bot::DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_ce bool Bot::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, uint32 aa_id) { bool Result = false; - if(GetClass() == BARD) + if(GetClass() == BARD) cast_time = 0; Result = Mob::DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, aa_id); @@ -7263,7 +7260,7 @@ int32 Bot::GenerateBaseManaPoints() { } else ConvertedWisInt = WisInt; - + if(GetLevel() < 41) { wisint_mana = (GetLevel() * 75 * ConvertedWisInt / 1000); base_mana = (GetLevel() * 15); @@ -7280,7 +7277,7 @@ int32 Bot::GenerateBaseManaPoints() { MindLesserFactor = ((WisInt - 199) / 2); else MindLesserFactor = 0; - + MindFactor = WisInt - MindLesserFactor; if(WisInt > 100) bot_mana = (((5 * (MindFactor + 20)) / 2) * 3 * GetLevel() / 40); @@ -7297,7 +7294,7 @@ int32 Bot::GenerateBaseManaPoints() { ConvertedWisInt -= ((WisInt - 201) * 5 / 4); } else ConvertedWisInt = WisInt; - + if(GetLevel() < 41) { wisint_mana = (GetLevel() * 75 * ConvertedWisInt / 1000); base_mana = (GetLevel() * 15); @@ -7314,7 +7311,7 @@ int32 Bot::GenerateBaseManaPoints() { MindLesserFactor = ((WisInt - 199) / 2); else MindLesserFactor = 0; - + MindFactor = (WisInt - MindLesserFactor); if(WisInt > 100) bot_mana = (((5 * (MindFactor + 20)) / 2) * 3 * GetLevel() / 40); @@ -7339,7 +7336,7 @@ bool Bot::DoFinishedSpellAETarget(uint16 spell_id, Mob* spellTarget, uint16 slot if(GetClass() == BARD) { if(!ApplyNextBardPulse(bardsong, this, bardsong_slot)) InterruptSpell(SONG_ENDS_ABRUPTLY, 0x121, bardsong); - + stopLogic = true; } return true; @@ -7381,7 +7378,7 @@ bool Bot::DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, uint16 } else SpellOnTarget(thespell, g->members[i]); - + if(g->members[i] && g->members[i]->GetPetID()) SpellOnTarget(thespell, g->members[i]->GetPet()); } @@ -7548,7 +7545,7 @@ int32 Bot::CalcSTR() { int32 mod = aabonuses.STR; if(val > 255 && GetLevel() <= 60) val = 255; - + STR = (val + mod); if(STR < 1) STR = 1; @@ -7565,7 +7562,7 @@ int32 Bot::CalcSTA() { int32 mod = aabonuses.STA; if(val > 255 && GetLevel() <= 60) val = 255; - + STA = (val + mod); if(STA < 1) STA = 1; @@ -7599,7 +7596,7 @@ int32 Bot::CalcDEX() { int32 mod = aabonuses.DEX; if(val > 255 && GetLevel() <= 60) val = 255; - + DEX = (val + mod); if(DEX < 1) DEX = 1; @@ -7616,12 +7613,12 @@ int32 Bot::CalcINT() { int32 mod = aabonuses.INT; if(val > 255 && GetLevel() <= 60) val = 255; - + INT = (val + mod); if(INT < 1) INT = 1; - + int m = GetMaxINT(); if(INT > m) INT = m; @@ -7634,7 +7631,7 @@ int32 Bot::CalcWIS() { int32 mod = aabonuses.WIS; if(val > 255 && GetLevel() <= 60) val = 255; - + WIS = (val + mod); if(WIS < 1) @@ -7652,7 +7649,7 @@ int32 Bot::CalcCHA() { int32 mod = aabonuses.CHA; if(val > 255 && GetLevel() <= 60) val = 255; - + CHA = (val + mod); if(CHA < 1) @@ -8049,10 +8046,10 @@ void Bot::DoEnduranceUpkeep() { if(cost_redux > 0) { if(upkeep <= cost_redux) continue; - + upkeep -= cost_redux; } - + if((upkeep+upkeep_sum) > GetEndurance()) BuffFadeBySlot(buffs_i); else @@ -8196,7 +8193,7 @@ bool Bot::CanHeal() { if(botSpell.SpellId != 0) result = true; - + return result; } @@ -9010,7 +9007,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if (!results.Success()) return; - for (int i = 0; i < 7; i++) { + for (int i = 0; i < 7; i++) { uint8 slotmaterial = Inventory::CalcMaterialFromSlot((uint8)slots[i]); c->GetTarget()->CastToBot()->SendWearChange(slotmaterial); } @@ -9030,7 +9027,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } return; } - + if(!strcasecmp(sep->arg[1], "help") && !strcasecmp(sep->arg[2], "armorcolor")){ c->Message(0, "-----------------#bot armorcolor help-----------------------------"); c->Message(0, "Armor: -1(All), 2(Helm), 7(Arms), 9(Bracer), 12(Hands), 17(Chest/Robe), 18(Legs), 19(Boots)"); @@ -9504,7 +9501,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { failedLoreCheck = true; } } - + if(c->CheckLoreConflict(itm)) failedLoreCheck = true; } @@ -9645,12 +9642,12 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { binder = g->members[i]; } } - + if(!hasbinder) c->Message(15, "You must have a Cleric in your group."); } } - + if(hasbinder) { binder->CastToBot()->BotGroupSay(binder->CastToBot(), "Attempting to bind you %s.", c->GetName()); binder->CastToNPC()->CastSpell(35, c->GetID(), 1, -1, -1); @@ -9671,12 +9668,12 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { runeer = g->members[i]; } } - + if(!hasruneer) c->Message(15, "You must have an Enchanter in your group."); } } - + if(hasruneer) { if (c->GetLevel() <= 12) { runeer->CastToBot()->BotGroupSay(runeer->CastToBot(), "I need to be level 13 or higher for this..."); @@ -9886,7 +9883,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { mezzer->CastToBot()->MesmerizeTarget(target); } } - + if(!hasmezzer) c->Message(15, "You must have an Enchanter in your group."); } @@ -9905,22 +9902,22 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { case ENCHANTER: if(casterlevel >= 15) hascaster = true; - + break; case WIZARD: if(casterlevel >= 14) hascaster = true; - + break; case NECROMANCER: if(casterlevel >= 17) hascaster = true; - + break; case MAGICIAN: if(casterlevel >= 13) hascaster = true; - + break; default: break; @@ -9932,12 +9929,12 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } } } - + if(!hascaster) c->Message(15, "You don't see anyone in your group that can cast Identify."); } else c->Message(15, "You don't see anyone in your group that can cast Identify."); - + return; } @@ -9961,12 +9958,12 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { break; } } - + if(!hasrezzer) c->Message(15, "You must have a Cleric in your group!"); } else c->Message(15, "You must have a Cleric in your group!"); - + return; } @@ -9979,7 +9976,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->GetTarget()->CastToBot()->BotGroupSay(c->GetTarget()->CastToBot(), "I don't have any pets yet."); return; } - + if(!strcasecmp(sep->arg[2], "water")) { c->GetTarget()->CastToBot()->SetPetChooserID(0); } else if(!strcasecmp(sep->arg[2], "fire")) { @@ -10007,7 +10004,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } else c->GetTarget()->CastToBot()->SetPetChooserID(4); } - + if(c->GetTarget()->GetPet()) { uint16 id = c->GetTarget()->GetPetID(); c->GetTarget()->SetPetID(0); @@ -10016,7 +10013,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } } else c->Message(15, "You must target your Magician bot!"); - + return; } @@ -10026,7 +10023,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(15, "You must select player with his corpse in the zone!"); return; } - + if(c->IsGrouped()) { bool hassummoner = false; Mob *t = c->GetTarget(); @@ -10060,10 +10057,10 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } } } - + if (!hassummoner) c->Message(15, "You must have a Necromancer or Shadow Knight in your group."); - + return; } } @@ -10084,7 +10081,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(pacer->Bot_Command_CalmTarget(target)) { if(target->FindType(SE_Lull) || target->FindType(SE_Harmony) || target->FindType(SE_InstantHate)) c->Message(0, "I have successfully pacified %s.", target->GetCleanName()); - + return; } else c->Message(0, "I failed to pacify %s.", target->GetCleanName()); @@ -10097,7 +10094,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(pacer->Bot_Command_CalmTarget(target)) { if(target->FindType(SE_Lull) || target->FindType(SE_Harmony) || target->FindType(SE_InstantHate)) c->Message(0, "I have successfully pacified %s.", target->GetCleanName()); - + return; } else c->Message(0, "I failed to pacify %s.", target->GetCleanName()); @@ -10116,7 +10113,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(15, "You must select a monster!"); return; } - + uint32 DBtype = c->GetTarget()->GetBodyType(); Mob *Charmer; uint32 CharmerClass = 0; @@ -10202,7 +10199,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(15, "You must target your Enchanter, Necromancer, or Druid bot."); } else c->Message(15, "You must target an Enchanter, Necromancer, or Druid bot."); - + return; } @@ -10290,18 +10287,18 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { evac = g->members[i]; } } - + if(!hasevac) c->Message(15, "You must have a Druid in your group."); } } - + if((hasevac) && (c->GetLevel() >= 18)) { evac->CastToBot()->BotGroupSay(evac->CastToBot(), "Attempting to evacuate you, %s.", c->GetName()); evac->CastToClient()->CastSpell(2183, c->GetID(), 1, -1, -1); } else if((hasevac) && (c->GetLevel() <= 17)) evac->CastToBot()->BotGroupSay(evac->CastToBot(), "I'm not level 18 yet.", c->GetName()); - + return; } @@ -11470,7 +11467,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { for(int i = 0; i < MAX_GROUP_MEMBERS; i++) { if(!g->members[i]) continue; - + if((g->members[i]->IsClient() && g->members[i]->CastToClient()->GetAggroCount()) || g->members[i]->IsEngaged()) { c->Message(0, "You can't spawn bots while your group is engaged."); return; @@ -11559,7 +11556,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(13, "Unable to create botgroup."); return; } - + Group *newBotGroup = botGroupLeader->GetGroup(); if(!newBotGroup) { c->Message(13, "Unable to find valid botgroup"); @@ -11576,7 +11573,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { safe_delete(botGroupMember); return; } - + if(!botGroupMember) { safe_delete(botGroupMember); continue; @@ -11664,15 +11661,15 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { float Size = target->GetSize(); if (!strcasecmp(sep->arg[1], "hair")) HairStyle = atoi(sep->arg[2]); - + if (!strcasecmp(sep->arg[1], "haircolor")) HairColor = atoi(sep->arg[2]); - + if (!strcasecmp(sep->arg[1], "beard") || !strcasecmp(sep->arg[1], "beardcolor")) { if (!Gender || Race == 8) { if (!strcasecmp(sep->arg[1], "beard")) Beard = atoi(sep->arg[2]); - + if (!strcasecmp(sep->arg[1], "beardcolor")) BeardColor = atoi(sep->arg[2]); } else { @@ -11680,7 +11677,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { return; } } - + if (!strcasecmp(sep->arg[1], "face")) LuclinFace = atoi(sep->arg[2]); @@ -11688,19 +11685,19 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { EyeColor1 = EyeColor2 = atoi(sep->arg[2]); c->Message(0, "Eye Values = 0 - 11"); } - + if(!strcasecmp(sep->arg[1], "heritage") || !strcasecmp(sep->arg[1], "tattoo") || !strcasecmp(sep->arg[1], "details")) { if(Race == 522) { if(!strcasecmp(sep->arg[1], "heritage")) { DrakkinHeritage = atoi(sep->arg[2]); c->Message(0, "Heritage Values = 0 - 6"); } - + if(!strcasecmp(sep->arg[1], "tattoo")) { DrakkinTattoo = atoi(sep->arg[2]); c->Message(0, "Tattoo Values = 0 - 7"); } - + if(!strcasecmp(sep->arg[1], "details")) { DrakkinDetails = atoi(sep->arg[2]); c->Message(0, "Details Values = 0 - 7"); @@ -11847,7 +11844,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(13, "You must name a valid bot."); } else c->Message(0, "Usage #bot stance [name] [stance (id)] (Passive = 0, Balanced = 1, Efficient = 2, Reactive = 3, Aggressive = 4, Burn = 5, BurnAE = 6)"); - + return; } @@ -11899,7 +11896,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } } else c->Message(0, "Usage #bot groupmessages [on|off] [bot name|all]"); - + return; } @@ -11967,7 +11964,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { tempBot->UseDiscipline(defensiveSpellID, tempBot->GetID()); } else c->Message(13, "You must name a valid bot."); - + return; } @@ -12555,7 +12552,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(0, "Usage #bot bardoutofcombat [on|off]"); return; } - + if(!strcasecmp(sep->arg[1], "showhelm")) { bool showhelm = true; if (sep->arg[2]) { @@ -12567,10 +12564,10 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(0, "Usage #bot showhelm [on|off]"); return; } - + Mob *target = c->GetTarget(); if (target && target->IsBot() && (c == target->GetOwner()->CastToClient())) { - Bot* b = target->CastToBot(); + Bot* b = target->CastToBot(); if (b) { b->SetShowHelm(showhelm); c->Message(0, "Your bot will %s show their helmet.", (showhelm ? "now" : "no longer")); @@ -12578,7 +12575,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } } else c->Message(0, "Usage #bot showhelm [on|off]"); - + return; } } @@ -12738,7 +12735,7 @@ Mob* EntityList::GetMobByBotID(uint32 botID) { for (auto it = mob_list.begin(); it != mob_list.end(); ++it) { if(!it->second) continue; - + if(it->second->IsBot() && it->second->CastToBot()->GetBotID() == botID) { Result = it->second; break; @@ -13032,7 +13029,7 @@ uint32 Bot::CalcCurrentWeight() { for(int i = EmuConstants::EQUIPMENT_BEGIN; i <= EmuConstants::EQUIPMENT_END; ++i) { inst = GetBotItem(i); if(inst) { - TempItem = inst->GetItem(); + TempItem = inst->GetItem(); if (TempItem) Total += TempItem->Weight; } @@ -13041,7 +13038,7 @@ uint32 Bot::CalcCurrentWeight() { float Packrat = ((float)spellbonuses.Packrat + (float)aabonuses.Packrat); if (Packrat > 0) Total = (uint32)((float)Total * (1.0f - ((Packrat * 1.0f) / 100.0f))); - + return Total; } @@ -13174,7 +13171,7 @@ void Bot::SetDefaultBotStance() { BotStanceType defaultStance = BotStanceBalanced; if (GetClass() == WARRIOR) defaultStance = BotStanceAggressive; - + _baseBotStance = BotStancePassive; _botStance = defaultStance; } @@ -13324,21 +13321,21 @@ void Bot::SetPrevHealRotationMember( Bot* healer ) { Bot* Bot::GetHealRotationLeader( ) { if(_healRotationLeader) return entity_list.GetBotByBotID(_healRotationLeader); - + return 0; } Bot* Bot::GetNextHealRotationMember( ) { if(_healRotationMemberNext) return entity_list.GetBotByBotID(_healRotationMemberNext); - + return 0; } Bot* Bot::GetPrevHealRotationMember( ) { if(_healRotationMemberNext) return entity_list.GetBotByBotID(_healRotationMemberPrev); - + return 0; } @@ -13352,7 +13349,7 @@ bool Bot::AddHealRotationTarget( Mob* target ) { } else if(!strcasecmp(tempTarget->GetCleanName(), target->GetCleanName())) { if(tempTarget->GetID() != target->GetID()) _healRotationTargets[i] = target->GetID(); - + return false; } } From d5098a56e0d50af6b687874b5e7374b3d43055d9 Mon Sep 17 00:00:00 2001 From: KimLS Date: Sat, 20 Jun 2015 19:44:00 -0700 Subject: [PATCH 31/48] Timers and some more loading stuff --- common/clientversions.h | 22 ++++++++ common/ruletypes.h | 1 + world/client.cpp | 8 ++- zone/aa.cpp | 122 ++++++++++++++++++++++++++++++++-------- zone/aa.h | 7 +++ zone/aa_ability.h | 1 - zone/aa_rank.h | 2 +- zone/aa_rank_prereqs.h | 33 ----------- zone/client.cpp | 10 +--- zone/client.h | 3 +- zone/client_packet.cpp | 10 +++- zone/command.cpp | 34 +++++++++++ zone/command.h | 4 +- zone/entity.cpp | 8 +++ zone/entity.h | 2 +- zone/mob.h | 2 + zone/npc.cpp | 1 - zone/spells.cpp | 8 +-- 18 files changed, 199 insertions(+), 79 deletions(-) delete mode 100644 zone/aa_rank_prereqs.h diff --git a/common/clientversions.h b/common/clientversions.h index 675429eab..4e575f8f4 100644 --- a/common/clientversions.h +++ b/common/clientversions.h @@ -150,4 +150,26 @@ static ClientVersion ClientVersionFromBit(uint32 clientVersionBit) } } +static uint32 ExpansionFromClientVersion(ClientVersion clientVersion) +{ + switch(clientVersion) + { + case ClientVersion::Unknown: + case ClientVersion::Client62: + case ClientVersion::Titanium: + return 0x000007FFU; + case ClientVersion::SoF: + return 0x00007FFFU; + case ClientVersion::SoD: + return 0x0000FFFFU; + case ClientVersion::UF: + return 0x0001FFFFU; + case ClientVersion::RoF: + case ClientVersion::RoF2: + return 0x000FFFFFU; + default: + return 0; + } +} + #endif /* CLIENTVERSIONS_H */ diff --git a/common/ruletypes.h b/common/ruletypes.h index 4c9430998..8dffc82e5 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -184,6 +184,7 @@ RULE_INT(World, MinGMAntiHackStatus, 1) //Minimum GM status to check against Ant RULE_INT(World, SoFStartZoneID, -1) //Sets the Starting Zone for SoF Clients separate from Titanium Clients (-1 is disabled) RULE_INT(World, TitaniumStartZoneID, -1) //Sets the Starting Zone for Titanium Clients (-1 is disabled). Replaces the old method. RULE_INT(World, ExpansionSettings, 16383) // Sets the expansion settings for the server, This is sent on login to world and affects client expansion settings. Defaults to all expansions enabled up to TSS. +RULE_BOOL(World, UseClientBasedExpansionSettings, true) // if true it will overrule World, ExpansionSettings and set someone's expansion based on the client they're using RULE_INT(World, PVPSettings, 0) // Sets the PVP settings for the server, 1 = Rallos Zek RuleSet, 2 = Tallon/Vallon Zek Ruleset, 4 = Sullon Zek Ruleset, 6 = Discord Ruleset, anything above 6 is the Discord Ruleset without the no-drop restrictions removed. TODO: Edit IsAttackAllowed in Zone to accomodate for these rules. RULE_BOOL (World, IsGMPetitionWindowEnabled, false) RULE_INT (World, FVNoDropFlag, 0) // Sets the Firiona Vie settings on the client. If set to 2, the flag will be set for GMs only, allowing trading of no-drop items. diff --git a/world/client.cpp b/world/client.cpp index 26a69222b..2c476902a 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -152,7 +152,13 @@ void Client::SendEnterWorld(std::string name) void Client::SendExpansionInfo() { auto outapp = new EQApplicationPacket(OP_ExpansionInfo, sizeof(ExpansionInfo_Struct)); ExpansionInfo_Struct *eis = (ExpansionInfo_Struct*)outapp->pBuffer; - eis->Expansions = (RuleI(World, ExpansionSettings)); + if(RuleB(World, UseClientBasedExpansionSettings)) { + eis->Expansions = ExpansionFromClientVersion(eqs->GetClientVersion()); + //eis->Expansions = ExpansionFromClientVersion(this->GetCLE. + } else { + eis->Expansions = (RuleI(World, ExpansionSettings)); + } + QueuePacket(outapp); safe_delete(outapp); } diff --git a/zone/aa.cpp b/zone/aa.cpp index 741a15aff..0c31034c7 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -872,8 +872,8 @@ void Client::SendAlternateAdvancementRank(int aa_id, int level) { } for(auto &prereq : rank->prereqs) { - outapp->WriteSInt32(prereq.aa_id); - outapp->WriteSInt32(prereq.points); + outapp->WriteSInt32(prereq.first); + outapp->WriteSInt32(prereq.second); } QueuePacket(outapp); @@ -948,6 +948,41 @@ void Client::SendAlternateAdvancementTimers() { safe_delete(outapp); } +void Client::ResetAlternateAdvancementTimer(int ability) { + AA::Rank *rank = zone->GetAlternateAdvancementRank(casting_spell_aa_id); + if(rank) { + SendAlternateAdvancementTimer(rank->spell_type, 0, time(0)); + p_timers.Clear(&database, rank->spell_type + pTimerAAStart); + } +} + +void Client::ResetAlternateAdvancementTimers() { + EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAAction, sizeof(UseAA_Struct)); + UseAA_Struct* uaaout = (UseAA_Struct*)outapp->pBuffer; + + PTimerList::iterator c, e; + c = p_timers.begin(); + e = p_timers.end(); + std::vector r_timers; + for(; c != e; ++c) { + PersistentTimer *cur = c->second; + if(cur->GetType() < pTimerAAStart || cur->GetType() > pTimerAAEnd) + continue; + //send timer + uaaout->begin = 0; + uaaout->end = static_cast(time(nullptr)); + uaaout->ability = cur->GetType() - pTimerAAStart; + r_timers.push_back(cur->GetType()); + QueuePacket(outapp); + } + + for(auto &i : r_timers) { + p_timers.Clear(&database, i); + } + + safe_delete(outapp); +} + void Client::PurchaseAlternateAdvancementRank(int rank_id) { AA::Rank *rank = zone->GetAlternateAdvancementRank(rank_id); if(!rank) { @@ -1212,13 +1247,13 @@ void Mob::ExpendAlternateAdvancementCharge(uint32 aa_id) { bool ZoneDatabase::LoadAlternateAdvancement(Client *c) { c->ClearAAs(); std::string query = StringFormat( - "SELECT " - "aa_id, " - "aa_value, " - "charges " - "FROM " - "`character_alternate_abilities` " - "WHERE `id` = %u ORDER BY `slot`", c->CharacterID()); + "SELECT " + "aa_id, " + "aa_value, " + "charges " + "FROM " + "`character_alternate_abilities` " + "WHERE `id` = %u", c->CharacterID()); MySQLRequestResult results = database.QueryDatabase(query); int i = 0; @@ -1227,11 +1262,25 @@ bool ZoneDatabase::LoadAlternateAdvancement(Client *c) { uint32 value = atoi(row[1]); uint32 charges = atoi(row[2]); - c->GetPP().aa_array[i].AA = aa; - c->GetPP().aa_array[i].value = value; - c->GetPP().aa_array[i].charges = charges; - c->SetAA(aa, value, charges); - i++; + auto rank = zone->GetAlternateAdvancementRank(aa); + if(!rank) { + continue; + } + + auto ability = rank->base_ability; + if(!ability) { + continue; + } + + rank = ability->GetRankByPointsSpent(value); + + if(c->CanUseAlternateAdvancementRank(rank)) { + c->GetPP().aa_array[i].AA = aa; + c->GetPP().aa_array[i].value = value; + c->GetPP().aa_array[i].charges = charges; + c->SetAA(aa, value, charges); + i++; + } } return true; @@ -1359,8 +1408,14 @@ bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) { } } - if(!(RuleI(World, ExpansionSettings) & (1 << rank->expansion))) { - return false; + if(IsClient()) { + if(!(CastToClient()->GetPP().expansions & (1 << rank->expansion))) { + return false; + } + } else { + if(!(RuleI(World, ExpansionSettings) & (1 << rank->expansion))) { + return false; + } } auto race = GetArrayRace(GetBaseRace()); @@ -1427,11 +1482,11 @@ bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price) //check prereqs for(auto &prereq : rank->prereqs) { - AA::Ability *prereq_ability = zone->GetAlternateAdvancementAbility(prereq.aa_id); + AA::Ability *prereq_ability = zone->GetAlternateAdvancementAbility(prereq.first); if(prereq_ability) { auto ranks = GetAA(prereq_ability->first_rank_id); - if(ranks < prereq.points) { + if(ranks < prereq.second) { return false; } } @@ -1473,6 +1528,24 @@ void Zone::LoadAlternateAdvancement() { if(current->prev) { current->total_cost = current->cost + current->prev->total_cost; + + //check prereqs here + for(auto &prev_prereq : current->prev->prereqs) { + // //if prev has an aa we dont have set + // // then set it here too + // //if prev has an aa we have and the count is different + // // then set to whichever is highest + // + auto iter = current->prereqs.find(prev_prereq.first); + if(iter == current->prereqs.end()) { + //not found + current->prereqs[prev_prereq.first] = prev_prereq.second; + } else { + //they already have it too! + auto points = std::max(iter->second, prev_prereq.second); + current->prereqs[iter->first] = points; + } + } } else { current->prev_id = -1; @@ -1593,14 +1666,17 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map 0) { AA::Rank *rank = ranks[rank_id].get(); - rank->prereqs.push_back(prereq); + rank->prereqs[aa_id] = points; } } } else { @@ -1650,4 +1726,4 @@ void Mob::GrantAlternateAdvancementAbility(int aa_id, int points) { c->SendAlternateAdvancementStats(); c->CalcBonuses(); } -} \ No newline at end of file +} diff --git a/zone/aa.h b/zone/aa.h index 76df0f388..280f56d53 100644 --- a/zone/aa.h +++ b/zone/aa.h @@ -1536,4 +1536,11 @@ public: uint32 owner_id; }; +enum AATimers +{ + aaTimerRampage, + aaTimerWarcry, + aaTimerMax +}; + #endif diff --git a/zone/aa_ability.h b/zone/aa_ability.h index 4a2d41f3e..0d6a240c4 100644 --- a/zone/aa_ability.h +++ b/zone/aa_ability.h @@ -24,7 +24,6 @@ #include #include #include "aa_rank_effects.h" -#include "aa_rank_prereqs.h" #include "aa_rank.h" class Mob; diff --git a/zone/aa_rank.h b/zone/aa_rank.h index 977a07680..c328e4ebb 100644 --- a/zone/aa_rank.h +++ b/zone/aa_rank.h @@ -48,7 +48,7 @@ public: int total_cost; Ability *base_ability; std::vector effects; - std::vector prereqs; + std::map prereqs; }; } diff --git a/zone/aa_rank_prereqs.h b/zone/aa_rank_prereqs.h deleted file mode 100644 index b1620be6c..000000000 --- a/zone/aa_rank_prereqs.h +++ /dev/null @@ -1,33 +0,0 @@ -/* EQEMu: Everquest Server Emulator - Copyright (C) 2001-2015 EQEMu Development Team (http://eqemulator.net) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY except by those people which sell it, which - are required to give you total support for your newly bought product; - without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#ifndef EQEMU_ZONE_AA_RANK_PREREQS_H -#define EQEMU_ZONE_AA_RANK_PREREQS_H - -namespace AA -{ - -struct RankPrereq -{ - int aa_id; - int points; -}; - -} - -#endif diff --git a/zone/client.cpp b/zone/client.cpp index 0ce7292ef..ae0ceedff 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -524,7 +524,6 @@ void Client::ReportConnectingState() { } bool Client::SaveAA() { - std::string dquery; std::string iquery; int spentpoints = 0; int i = 0; @@ -546,10 +545,10 @@ bool Client::SaveAA() { spentpoints += r->total_cost; if(i == 0) { - iquery = StringFormat("INSERT INTO `character_alternate_abilities` (id, slot, aa_id, aa_value, charges)" - " VALUES (%u, %u, %u, %u, %u)", character_id, i, ability->first_rank_id, rank.second.first, rank.second.second); + iquery = StringFormat("REPLACE INTO `character_alternate_abilities` (id, aa_id, aa_value, charges)" + " VALUES (%u, %u, %u, %u)", character_id, ability->first_rank_id, rank.second.first, rank.second.second); } else { - iquery += StringFormat(", (%u, %u, %u, %u, %u)", character_id, i, ability->first_rank_id, rank.second.first, rank.second.second); + iquery += StringFormat(", (%u, %u, %u, %u)", character_id, ability->first_rank_id, rank.second.first, rank.second.second); } i++; } @@ -557,9 +556,6 @@ bool Client::SaveAA() { m_pp.aapoints_spent = spentpoints + m_epp.expended_aa; - dquery = StringFormat("DELETE FROM `character_alternate_abilities` WHERE id=%u", character_id); - database.QueryDatabase(dquery); - if(iquery.length() > 0) { database.QueryDatabase(iquery); } diff --git a/zone/client.h b/zone/client.h index 034ff83b4..07d42a313 100644 --- a/zone/client.h +++ b/zone/client.h @@ -45,7 +45,6 @@ struct Item_Struct; #include "../common/item_struct.h" #include "../common/clientversions.h" -#include "aa.h" #include "common.h" #include "merc.h" #include "mob.h" @@ -768,6 +767,8 @@ public: void SendAlternateAdvancementPoints(); void SendAlternateAdvancementTimer(int ability, int begin, int end); void SendAlternateAdvancementTimers(); + void ResetAlternateAdvancementTimer(int ability); + void ResetAlternateAdvancementTimers(); void SetAAPoints(uint32 points) { m_pp.aapoints = points; SendAlternateAdvancementStats(); } void AddAAPoints(uint32 points) { m_pp.aapoints += points; SendAlternateAdvancementStats(); } diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index d01bcf109..8f4b55004 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1440,6 +1440,13 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) if (m_pp.ldon_points_tak < 0 || m_pp.ldon_points_tak > 2000000000){ m_pp.ldon_points_tak = 0; } if (m_pp.ldon_points_available < 0 || m_pp.ldon_points_available > 2000000000){ m_pp.ldon_points_available = 0; } + if(RuleB(World, UseClientBasedExpansionSettings)) { + m_pp.expansions = ExpansionFromClientVersion(GetClientVersion()); + } + else { + m_pp.expansions = RuleI(World, ExpansionSettings); + } + if(!database.LoadAlternateAdvancement(this)) { Log.Out(Logs::General, Logs::Error, "Error loading AA points for %s", GetName()); } @@ -1566,9 +1573,6 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) /* Update LFP in case any (or all) of our group disbanded while we were zoning. */ if (IsLFP()) { UpdateLFP(); } - /* Get Expansions from variables table and ship via PP */ - m_pp.expansions = RuleI(World, ExpansionSettings); - p_timers.SetCharID(CharacterID()); if (!p_timers.Load(&database)) { Log.Out(Logs::General, Logs::Error, "Unable to load ability timers from the database for %s (%i)!", GetCleanName(), CharacterID()); diff --git a/zone/command.cpp b/zone/command.cpp index ab2b4ad78..59f4bfa8a 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -320,6 +320,7 @@ int command_init(void) { command_add("raidloot", "LEADER|GROUPLEADER|SELECTED|ALL - Sets your raid loot settings if you have permission to do so.", 0, command_raidloot) || command_add("randomfeatures", "- Temporarily randomizes the Facial Features of your target", 80, command_randomfeatures) || command_add("refreshgroup", "- Refreshes Group.", 0, command_refreshgroup) || + command_add("reloadaa", "Reloads AA data", 200, command_reloadaa) || command_add("reloadallrules", "Executes a reload of all rules.", 80, command_reloadallrules) || command_add("reloademote", "Reloads NPC Emotes", 80, command_reloademote) || command_add("reloadlevelmods", nullptr,255, command_reloadlevelmods) || @@ -333,6 +334,7 @@ int command_init(void) { command_add("reloadzps", nullptr,0, command_reloadzps) || command_add("repop", "[delay] - Repop the zone with optional delay", 100, command_repop) || command_add("resetaa", "- Resets a Player's AA in their profile and refunds spent AA's to unspent, may disconnect player.", 200, command_resetaa) || + command_add("resetaa_timer", "Command to reset AA cooldown timers.", 200, command_resetaa_timer) || command_add("revoke", "[charname] [1/0] - Makes charname unable to talk on OOC", 200, command_revoke) || command_add("rules", "(subcommand) - Manage server rules", 250, command_rules) || command_add("save", "- Force your player or player corpse target to be saved to the database", 50, command_save) || @@ -10580,3 +10582,35 @@ void command_mysqltest(Client *c, const Seperator *sep) } Log.Out(Logs::General, Logs::Debug, "MySQL Test... Took %f seconds", ((float)(std::clock() - t)) / CLOCKS_PER_SEC); } + +void command_resetaa_timer(Client *c, const Seperator *sep) { + Client *target = nullptr; + if(!c->GetTarget() || !c->GetTarget()->IsClient()) { + target = c; + } else { + target = c->GetTarget()->CastToClient(); + } + + if(sep->IsNumber(1)) + { + int timer_id = atoi(sep->arg[1]); + c->Message(0, "Reset of timer %i for %s", timer_id, c->GetName()); + c->ResetAlternateAdvancementTimer(timer_id); + } + else if(!strcasecmp(sep->arg[1], "all")) + { + c->Message(0, "Reset all timers for %s", c->GetName()); + c->ResetAlternateAdvancementTimers(); + } + else + { + c->Message(0, "usage: #resetaa_timer [all | timer_id]"); + } +} + +void command_reloadaa(Client *c, const Seperator *sep) { + c->Message(0, "Reloading Alternate Advancement Data..."); + zone->LoadAlternateAdvancement(); + c->Message(0, "Alternate Advancement Data Reloaded"); + entity_list.SendAlternateAdvancementStats(); +} \ No newline at end of file diff --git a/zone/command.h b/zone/command.h index f44362ea7..795f75919 100644 --- a/zone/command.h +++ b/zone/command.h @@ -323,7 +323,9 @@ void command_tune(Client *c, const Seperator *sep); void command_logtest(Client *c, const Seperator *sep); void command_mysqltest(Client *c, const Seperator *sep); void command_logs(Client *c, const Seperator *sep); - +void command_resetaa_timer(Client *c, const Seperator *sep); +void command_reloadaa(Client *c, const Seperator *sep); + #ifdef EQPROFILE void command_profiledump(Client *c, const Seperator *sep); void command_profilereset(Client *c, const Seperator *sep); diff --git a/zone/entity.cpp b/zone/entity.cpp index 5033c52fe..8749b102c 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -4704,3 +4704,11 @@ void EntityList::StopMobAI() mob.second->AI_ShutDown(); } } + +void EntityList::SendAlternateAdvancementStats() { + for(auto &c : client_list) { + c.second->SendAlternateAdvancementTable(); + c.second->SendAlternateAdvancementStats(); + c.second->SendAlternateAdvancementPoints(); + } +} diff --git a/zone/entity.h b/zone/entity.h index 446c5d505..1adf23783 100644 --- a/zone/entity.h +++ b/zone/entity.h @@ -398,7 +398,6 @@ public: void SaveAllClientsTaskState(); void ReloadAllClientsTaskState(int TaskID=0); - uint16 CreateGroundObject(uint32 itemid, const glm::vec4& position, uint32 decay_time = 300000); uint16 CreateGroundObjectFromModel(const char *model, const glm::vec4& position, uint8 type = 0x00, uint32 decay_time = 0); uint16 CreateDoor(const char *model, const glm::vec4& position, uint8 type = 0, uint16 size = 100); @@ -429,6 +428,7 @@ public: uint16 GetFreeID(); void RefreshAutoXTargets(Client *c); void RefreshClientXTargets(Client *c); + void SendAlternateAdvancementStats(); protected: friend class Zone; diff --git a/zone/mob.h b/zone/mob.h index 1c3d7ab15..8352d764e 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -24,6 +24,7 @@ #include "pathing.h" #include "position.h" #include "aa_ability.h" +#include "aa.h" #include #include #include @@ -1327,6 +1328,7 @@ protected: bool destructibleobject; std::unordered_map> aa_ranks; + Timer aa_timers[aaTimerMax]; private: void _StopSong(); //this is not what you think it is diff --git a/zone/npc.cpp b/zone/npc.cpp index d4a33b6d0..2d0c1f13b 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -31,7 +31,6 @@ #include "../common/linked_list.h" #include "../common/servertalk.h" -#include "aa.h" #include "client.h" #include "entity.h" #include "npc.h" diff --git a/zone/spells.cpp b/zone/spells.cpp index ec872d1c9..4f492c343 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -818,12 +818,8 @@ void Mob::InterruptSpell(uint16 message, uint16 color, uint16 spellid) } if(casting_spell_aa_id && IsClient()) { //Rest AA Timer on failed cast - AA::Rank *rank = zone->GetAlternateAdvancementRank(casting_spell_aa_id); - if(rank) { - CastToClient()->Message_StringID(MT_SpellFailure, ABILITY_FAILED); - CastToClient()->SendAlternateAdvancementTimer(rank->spell_type, 0, 0x7fffffff); - CastToClient()->GetPTimers().Clear(&database, rank->spell_type + pTimerAAStart); - } + CastToClient()->Message_StringID(MT_SpellFailure, ABILITY_FAILED); + CastToClient()->ResetAlternateAdvancementTimer(casting_spell_aa_id); } ZeroCastingVars(); // resets all the state keeping stuff From d34b4a786b63e39d9705ae35f736da119ad0b03d Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sun, 21 Jun 2015 02:01:48 -0400 Subject: [PATCH 32/48] Implement duration ramp and war cry with new AA system Rampage also correctly does a full attack round for classes other than monk and ranger --- zone/aa.cpp | 43 ++++++++++++++------- zone/attack.cpp | 36 ++++++++++++++++++ zone/client.h | 3 +- zone/client_process.cpp | 84 +++-------------------------------------- zone/effects.cpp | 7 +++- zone/mob.h | 1 + zone/spell_effects.cpp | 53 ++++++++------------------ zone/spells.cpp | 16 ++++---- 8 files changed, 102 insertions(+), 141 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 0c31034c7..41be9a0cf 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -828,7 +828,7 @@ void Client::SendAlternateAdvancementRank(int aa_id, int level) { if(!CanUseAlternateAdvancementRank(rank)) { return; } - + int size = sizeof(AARankInfo_Struct) + (sizeof(AARankEffect_Struct) * rank->effects.size()) + (sizeof(AARankPrereq_Struct) * rank->prereqs.size()); EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, size); AARankInfo_Struct *aai = (AARankInfo_Struct*)outapp->pBuffer; @@ -996,7 +996,7 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { if(!CanPurchaseAlternateAdvancementRank(rank, true)) { return; } - + if(rank->base_ability->charges > 0) { uint32 charges = 0; GetAA(rank_id, &charges); @@ -1004,7 +1004,7 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { if(charges > 0) { return; } - + SetAA(rank_id, rank->current_value, rank->base_ability->charges); } else { SetAA(rank_id, rank->current_value, 0); @@ -1022,10 +1022,10 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { SendAlternateAdvancementStats(); if(rank->prev) { - Message_StringID(15, AA_IMPROVE, - std::to_string(rank->title_sid).c_str(), - std::to_string(rank->prev->current_value).c_str(), - std::to_string(rank->cost).c_str(), + Message_StringID(15, AA_IMPROVE, + std::to_string(rank->title_sid).c_str(), + std::to_string(rank->prev->current_value).c_str(), + std::to_string(rank->cost).c_str(), std::to_string(AA_POINTS).c_str()); /* QS: Player_Log_AA_Purchases */ @@ -1034,9 +1034,9 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { QServ->PlayerLogEvent(Player_Log_AA_Purchases, CharacterID(), event_desc); } } else { - Message_StringID(15, AA_GAIN_ABILITY, - std::to_string(rank->title_sid).c_str(), - std::to_string(rank->cost).c_str(), + Message_StringID(15, AA_GAIN_ABILITY, + std::to_string(rank->title_sid).c_str(), + std::to_string(rank->cost).c_str(), std::to_string(AA_POINTS).c_str()); /* QS: Player_Log_AA_Purchases */ if (RuleB(QueryServ, PlayerLogAAPurchases)){ @@ -1125,7 +1125,7 @@ void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) { if(!IsValidSpell(rank->spell)) { return; } - + if(!CanUseAlternateAdvancementRank(rank)) { return; } @@ -1448,7 +1448,7 @@ bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price) if(!ability) return false; - + if(!CanUseAlternateAdvancementRank(rank)) { return false; } @@ -1474,7 +1474,7 @@ bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price) } //if expendable only let us purchase if we have no charges already - //not quite sure on how this functions client side atm + //not quite sure on how this functions client side atm //I intend to look into it later to make sure the behavior is right if(ability->charges > 0 && current_charges > 0) { return false; @@ -1565,7 +1565,7 @@ void Zone::LoadAlternateAdvancement() { } bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map> &abilities, - std::unordered_map> &ranks) + std::unordered_map> &ranks) { Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Abilities..."); abilities.clear(); @@ -1727,3 +1727,18 @@ void Mob::GrantAlternateAdvancementAbility(int aa_id, int points) { c->CalcBonuses(); } } + +bool Mob::CheckAATimer(int timer) +{ + if (timer >= aaTimerMax) + return false; + if (aa_timers[timer].Enabled()) { + if (aa_timers[timer].Check(false)) { + aa_timers[timer].Disable(); + return false; + } else { + return true; + } + } + return false; +} diff --git a/zone/attack.cpp b/zone/attack.cpp index 6a8125507..202ad77b6 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -5056,3 +5056,39 @@ void NPC::SetAttackTimer() TimerToUse->SetAtTrigger(std::max(RuleI(Combat, MinHastedDelay), speed), true, true); } } + +void Client::DoAttackRounds(Mob *target, int hand, bool IsFromSpell) +{ + if (!target) + return; + + Attack(target, hand, false, false, IsFromSpell); + + if (CanThisClassDoubleAttack()) { + CheckIncreaseSkill(SkillDoubleAttack, target, -10); + if (CheckDoubleAttack()) + Attack(target, hand, false, false, IsFromSpell); + if (hand == MainPrimary && GetLevel() >= 60 && + (GetClass() == MONK || GetClass() == WARRIOR || GetClass() == RANGER || GetClass() == BERSERKER) && + CheckDoubleAttack(true)) + Attack(target, hand, false, false, IsFromSpell); + } + if (hand == MainPrimary) { + auto flurrychance = aabonuses.FlurryChance + spellbonuses.FlurryChance + itembonuses.FlurryChance; + if (flurrychance && zone->random.Roll(flurrychance)) { + Message_StringID(MT_NPCFlurry, YOU_FLURRY); + Attack(target, hand, false, false, IsFromSpell); + Attack(target, hand, false, false, IsFromSpell); + } + + auto extraattackchance = aabonuses.ExtraAttackChance + spellbonuses.ExtraAttackChance + itembonuses.ExtraAttackChance; + if (extraattackchance) { + auto wpn = GetInv().GetItem(MainPrimary); + if (wpn && (wpn->GetItem()->ItemType == ItemType2HBlunt || + wpn->GetItem()->ItemType == ItemType2HSlash || + wpn->GetItem()->ItemType == ItemType2HPiercing)) + if (zone->random.Roll(extraattackchance)) + Attack(target, hand, false, false, IsFromSpell); + } + } +} diff --git a/zone/client.h b/zone/client.h index 07d42a313..44e86f971 100644 --- a/zone/client.h +++ b/zone/client.h @@ -226,6 +226,7 @@ public: virtual int32 GetMeleeMitDmg(Mob *attacker, int32 damage, int32 minhit, float mit_rating, float atk_rating); virtual void SetAttackTimer(); float GetQuiverHaste(); + void DoAttackRounds(Mob *target, int hand, bool IsFromSpell = false); void AI_Init(); void AI_Start(uint32 iMoveDelay = 0); @@ -774,7 +775,7 @@ public: void AddAAPoints(uint32 points) { m_pp.aapoints += points; SendAlternateAdvancementStats(); } int GetAAPoints() { return m_pp.aapoints; } int GetSpentAA() { return m_pp.aapoints_spent; } - + //old AA methods that we still use void ResetAA(); void RefundAA(); diff --git a/zone/client_process.cpp b/zone/client_process.cpp index 603636a82..42c244e6b 100644 --- a/zone/client_process.cpp +++ b/zone/client_process.cpp @@ -391,74 +391,12 @@ bool Client::Process() { } else if (auto_attack_target->GetHP() > -10) // -10 so we can watch people bleed in PvP { - //old aa - //if(CheckAAEffect(aaEffectRampage)) - //{ - // entity_list.AEAttack(this, 30); - //} else { - Attack(auto_attack_target, MainPrimary); // Kaiyodo - added attacking hand to arguments - //} ItemInst *wpn = GetInv().GetItem(MainPrimary); TryWeaponProc(wpn, auto_attack_target, MainPrimary); - bool tripleAttackSuccess = false; - if( auto_attack_target && CanThisClassDoubleAttack() ) { - - CheckIncreaseSkill(SkillDoubleAttack, auto_attack_target, -10); - if(CheckDoubleAttack()) { - //should we allow rampage on double attack? - //if(CheckAAEffect(aaEffectRampage)) { - // entity_list.AEAttack(this, 30); - //} else { - Attack(auto_attack_target, MainPrimary, false); - //} - } - - //triple attack: rangers, monks, warriors, berserkers over level 60 - if((((GetClass() == MONK || GetClass() == WARRIOR || GetClass() == RANGER || GetClass() == BERSERKER) - && GetLevel() >= 60) || GetSpecialAbility(SPECATK_TRIPLE)) - && CheckDoubleAttack(true)) - { - tripleAttackSuccess = true; - Attack(auto_attack_target, MainPrimary, false); - } - - //quad attack, does this belong here?? - if(GetSpecialAbility(SPECATK_QUAD) && CheckDoubleAttack(true)) - { - Attack(auto_attack_target, MainPrimary, false); - } - } - - //Live AA - Flurry, Rapid Strikes ect (Flurry does not require Triple Attack). - int16 flurrychance = aabonuses.FlurryChance + spellbonuses.FlurryChance + itembonuses.FlurryChance; - - if (auto_attack_target && flurrychance) - { - if(zone->random.Int(0, 99) < flurrychance) - { - Message_StringID(MT_NPCFlurry, YOU_FLURRY); - Attack(auto_attack_target, MainPrimary, false); - Attack(auto_attack_target, MainPrimary, false); - } - } - - int16 ExtraAttackChanceBonus = spellbonuses.ExtraAttackChance + itembonuses.ExtraAttackChance + aabonuses.ExtraAttackChance; - - if (auto_attack_target && ExtraAttackChanceBonus) { - ItemInst *wpn = GetInv().GetItem(MainPrimary); - if(wpn){ - if(wpn->GetItem()->ItemType == ItemType2HSlash || - wpn->GetItem()->ItemType == ItemType2HBlunt || - wpn->GetItem()->ItemType == ItemType2HPiercing ) - { - if(zone->random.Int(0, 99) < ExtraAttackChanceBonus) - { - Attack(auto_attack_target, MainPrimary, false); - } - } - } - } + DoAttackRounds(auto_attack_target, MainPrimary); + if (CheckAATimer(aaTimerRampage)) + entity_list.AEAttack(this, 30); } } @@ -499,23 +437,11 @@ bool Client::Process() { float random = zone->random.Real(0, 1); CheckIncreaseSkill(SkillDualWield, auto_attack_target, -10); - if (random < DualWieldProbability){ // Max 78% of DW - //if(CheckAAEffect(aaEffectRampage)) { - // entity_list.AEAttack(this, 30, MainSecondary); - //} else { - Attack(auto_attack_target, MainSecondary); // Single attack with offhand - //} + if (random < DualWieldProbability) { // Max 78% of DW ItemInst *wpn = GetInv().GetItem(MainSecondary); TryWeaponProc(wpn, auto_attack_target, MainSecondary); - if( CanThisClassDoubleAttack() && CheckDoubleAttack()) { - //if(CheckAAEffect(aaEffectRampage)) { - // entity_list.AEAttack(this, 30, MainSecondary); - //} else { - // if(auto_attack_target && auto_attack_target->GetHP() > -10) - Attack(auto_attack_target, MainSecondary); // Single attack with offhand - //} - } + DoAttackRounds(auto_attack_target, MainSecondary); } } } diff --git a/zone/effects.cpp b/zone/effects.cpp index 55e56cdac..68e68e78d 100644 --- a/zone/effects.cpp +++ b/zone/effects.cpp @@ -878,7 +878,7 @@ void EntityList::AEBardPulse(Mob *caster, Mob *center, uint16 spell_id, bool aff caster->CastToClient()->CheckSongSkillIncrease(spell_id); } -//Dook- Rampage and stuff for clients. +// Rampage and stuff for clients. Normal and Duration rampages //NPCs handle it differently in Mob::Rampage void EntityList::AEAttack(Mob *attacker, float dist, int Hand, int count, bool IsFromSpell) { //Dook- Will need tweaking, currently no pets or players or horses @@ -896,7 +896,10 @@ void EntityList::AEAttack(Mob *attacker, float dist, int Hand, int count, bool I && curmob->GetRace() != 216 && curmob->GetRace() != 472 /* dont attack horses */ && (DistanceSquared(curmob->GetPosition(), attacker->GetPosition()) <= dist2) ) { - attacker->Attack(curmob, Hand, false, false, IsFromSpell); + if (!attacker->IsClient() || attacker->GetClass() == MONK || attacker->GetClass() == RANGER) + attacker->Attack(curmob, Hand, false, false, IsFromSpell); + else + attacker->CastToClient()->DoAttackRounds(curmob, Hand, IsFromSpell); hit++; if (count != 0 && hit >= count) return; diff --git a/zone/mob.h b/zone/mob.h index 8352d764e..c9ba4471d 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -971,6 +971,7 @@ public: void CalcAABonuses(StatBonuses* newbon); void ApplyAABonuses(const AA::Rank &rank, StatBonuses* newbon); void GrantAlternateAdvancementAbility(int aa_id, int points); + bool CheckAATimer(int timer); protected: void CommonDamage(Mob* other, int32 &damage, const uint16 spell_id, const SkillUseTypes attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic); diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 3c0c8fad4..5c30185aa 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -638,42 +638,23 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove snprintf(effect_desc, _EDLEN, "Group Fear Immunity"); #endif //Added client messages to give some indication this effect is active. - uint32 group_id_caster = 0; - uint32 time = spell.base[i]*10; - if(caster->IsClient()) - { - if(caster->IsGrouped()) - { - group_id_caster = GetGroup()->GetID(); - } - else if(caster->IsRaidGrouped()) - { - group_id_caster = (GetRaid()->GetGroup(CastToClient()) == 0xFFFF) ? 0 : (GetRaid()->GetGroup(CastToClient()) + 1); + // Is there a message generated? Too disgusted by raids. + uint32 time = spell.base[i] * 10 * 1000; + if (caster->IsClient()) { + if (caster->IsGrouped()) { + auto group = caster->GetGroup(); + for (int i = 0; i < 6; ++i) + if (group->members[i]) + group->members[i]->aa_timers[aaTimerWarcry].Start(time); + } else if (caster->IsRaidGrouped()) { + auto raid = caster->GetRaid(); + uint32 gid = raid->GetGroup(caster->CastToClient()); + if (gid < 12) + for (int i = 0; i < MAX_RAID_MEMBERS; ++i) + if (raid->members[i].member && raid->members[i].GroupNumber == gid) + raid->members[i].member->aa_timers[aaTimerWarcry].Start(time); } } - //old aa - //if(group_id_caster){ - // Group *g = entity_list.GetGroupByID(group_id_caster); - // uint32 time = spell.base[i]*10; - // if(g){ - // for(int gi=0; gi < 6; gi++){ - // if(g->members[gi] && g->members[gi]->IsClient()) - // { - // g->members[gi]->CastToClient()->EnableAAEffect(aaEffectWarcry , time); - // if (g->members[gi]->GetID() != caster->GetID()) - // g->members[gi]->Message(13, "You hear the war cry."); - // else - // Message(13, "You let loose a fierce war cry."); - // } - // } - // } - //} - // - //else{ - // CastToClient()->EnableAAEffect(aaEffectWarcry , time); - // Message(13, "You let loose a fierce war cry."); - //} - break; } @@ -2238,9 +2219,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove #ifdef SPELL_EFFECT_SPAM snprintf(effect_desc, _EDLEN, "Duration Rampage"); #endif - //if (caster && caster->IsClient()) { // will tidy this up later so that NPCs can duration ramp from spells too - // CastToClient()->DurationRampage(effect_value*12); - //} + aa_timers[aaTimerRampage].Start(effect_value * 10 * 1000); // Live bug, was suppose to be 1 second per value break; } diff --git a/zone/spells.cpp b/zone/spells.cpp index 4f492c343..c3e777b5c 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -2280,7 +2280,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 if(rank && rank->base_ability) { ExpendAlternateAdvancementCharge(rank->base_ability->id); } - } + } else if(spell_id == casting_spell_id && casting_spell_timer != 0xFFFFFFFF) { //aa new todo: aa expendable charges here @@ -4124,13 +4124,13 @@ bool Mob::IsImmuneToSpell(uint16 spell_id, Mob *caster) } return true; } - //else if (IsClient() && CastToClient()->CheckAAEffect(aaEffectWarcry)) //old aa - //{ - // Message(13, "Your are immune to fear."); - // Log.Out(Logs::Detail, Logs::Spells, "Clients has WarCry effect, immune to fear!"); - // caster->Message_StringID(MT_Shout, IMMUNE_FEAR); - // return true; - //} + else if (CheckAATimer(aaTimerWarcry)) + { + Message(13, "Your are immune to fear."); + Log.Out(Logs::Detail, Logs::Spells, "Clients has WarCry effect, immune to fear!"); + caster->Message_StringID(MT_Shout, IMMUNE_FEAR); + return true; + } } if(IsCharmSpell(spell_id)) From c0ea82f9e108a43c6bede64a6c5a05bf46917e08 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sun, 21 Jun 2015 02:58:43 -0400 Subject: [PATCH 33/48] SE_MeleeVulnerability really really is Max Mana limit Also found the cause of bard song tick increase and removed the uneeded code Also removed the IsBardSong check from GetFocusEffect, it really shouldn't be needed, but will need to keep an eye out. The focus effects should most often limit out the bard songs anyways --- common/spdat.h | 2 +- zone/bonuses.cpp | 14 -------------- zone/common.h | 1 - zone/effects.cpp | 6 ------ zone/mob.cpp | 3 --- zone/spell_effects.cpp | 21 ++++++++++++++------- 6 files changed, 15 insertions(+), 32 deletions(-) diff --git a/common/spdat.h b/common/spdat.h index c8e039f15..938b659e1 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -544,7 +544,7 @@ typedef enum { //#define SE_SummonCorpseZone 388 // *not implemented - summons a corpse from any zone(nec AA) #define SE_FcTimerRefresh 389 // implemented - Refresh spell icons //#define SE_FcTimerLockout 390 // *not implemented - Sets recast timers to specific value, focus limited. -#define SE_MeleeVulnerability 391 // implemented [Live SPA has this as LimitManaMax however that is clearly not the effect used] +#define SE_LimitManaMax 391 // implemented #define SE_FcHealAmt 392 // implemented - Adds or removes healing from spells #define SE_FcHealPctIncoming 393 // implemented - HealRate with focus restrictions. #define SE_FcHealAmtIncoming 394 // implemented - Adds/Removes amount of healing on target by X value with foucs restrictions. diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index e90f9626a..7ff8e7fc7 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -1333,10 +1333,6 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) newbon->PetMeleeMitigation += base1; break; - case SE_MeleeVulnerability: - newbon->MeleeVulnerability += base1; - break; - case SE_FactionModPct: { if ((base1 < 0) && (newbon->FactionModPct > base1)) newbon->FactionModPct = base1; @@ -3008,10 +3004,6 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne new_bonus->PetMeleeMitigation += effect_value; break; - case SE_MeleeVulnerability: - new_bonus->MeleeVulnerability += effect_value; - break; - case SE_Sanctuary: new_bonus->Sanctuary = true; break; @@ -4588,12 +4580,6 @@ void Mob::NegateSpellsBonuses(uint16 spell_id) aabonuses.FactionModPct = effect_value; break; - case SE_MeleeVulnerability: - spellbonuses.MeleeVulnerability = effect_value; - itembonuses.MeleeVulnerability = effect_value; - aabonuses.MeleeVulnerability = effect_value; - break; - case SE_IllusionPersistence: spellbonuses.IllusionPersistence = false; itembonuses.IllusionPersistence = false; diff --git a/zone/common.h b/zone/common.h index d21a0039d..e9521cb94 100644 --- a/zone/common.h +++ b/zone/common.h @@ -400,7 +400,6 @@ struct StatBonuses { int32 Metabolism; // Food/drink consumption rates. bool Sanctuary; // Sanctuary effect, lowers place on hate list until cast on others. int32 FactionModPct; // Modifies amount of faction gained. - int32 MeleeVulnerability; // Weakness/mitigation to melee damage bool LimitToSkill[HIGHEST_SKILL+2]; // Determines if we need to search for a skill proc. uint32 SkillProc[MAX_SKILL_PROCS]; // Max number of spells containing skill_procs. uint32 SkillProcSuccess[MAX_SKILL_PROCS]; // Max number of spells containing skill_procs_success. diff --git a/zone/effects.cpp b/zone/effects.cpp index 68e68e78d..85a858c94 100644 --- a/zone/effects.cpp +++ b/zone/effects.cpp @@ -421,12 +421,6 @@ int32 Mob::GetActSpellDuration(uint16 spell_id, int32 duration) int tic_inc = 0; tic_inc = GetFocusEffect(focusSpellDurByTic, spell_id); - // unsure on the exact details, but bard songs that don't cost mana at some point get an extra tick, 60 for now - // a level 53 bard reported getting 2 tics - // bard DOTs do get this extra tick, but beneficial long bard songs don't? (invul, crescendo) - if ((IsShortDurationBuff(spell_id) || IsDetrimentalSpell(spell_id)) && IsBardSong(spell_id) && - spells[spell_id].mana == 0 && GetClass() == BARD && GetLevel() > 60) - tic_inc++; float focused = ((duration * increase) / 100.0f) + tic_inc; int ifocused = static_cast(focused); diff --git a/zone/mob.cpp b/zone/mob.cpp index 4eb87f7ad..1777bb7a3 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -3769,11 +3769,8 @@ int16 Mob::GetSkillDmgTaken(const SkillUseTypes skill_used) skilldmg_mod += itembonuses.SkillDmgTaken[HIGHEST_SKILL+1] + spellbonuses.SkillDmgTaken[HIGHEST_SKILL+1] + itembonuses.SkillDmgTaken[skill_used] + spellbonuses.SkillDmgTaken[skill_used]; - skilldmg_mod += SkillDmgTaken_Mod[skill_used] + SkillDmgTaken_Mod[HIGHEST_SKILL+1]; - skilldmg_mod += spellbonuses.MeleeVulnerability + itembonuses.MeleeVulnerability + aabonuses.MeleeVulnerability; - if(skilldmg_mod < -100) skilldmg_mod = -100; diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 5c30185aa..71740e589 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -2948,7 +2948,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove case SE_FcIncreaseNumHits: case SE_CastonFocusEffect: case SE_FcHealAmtIncoming: - case SE_MeleeVulnerability: + case SE_LimitManaMax: case SE_DoubleRangedAttack: case SE_ShieldEquipHateMod: case SE_ShieldEquipDmgMod: @@ -3356,7 +3356,7 @@ void Mob::BuffProcess() { --buffs[buffs_i].ticsremaining; - if ((buffs[buffs_i].ticsremaining == 0 && !IsShortDurationBuff(buffs[buffs_i].spellid)) || buffs[buffs_i].ticsremaining < 0) { + if ((buffs[buffs_i].ticsremaining == 0 && !(IsShortDurationBuff(buffs[buffs_i].spellid) || IsBardSong(buffs[buffs_i].spellid))) || buffs[buffs_i].ticsremaining < 0) { Log.Out(Logs::Detail, Logs::Spells, "Buff %d in slot %d has expired. Fading.", buffs[buffs_i].spellid, buffs_i); BuffFadeBySlot(buffs_i); } @@ -4301,6 +4301,11 @@ int16 Client::CalcAAFocus(focusType type, const AA::Rank &rank, uint16 spell_id) LimitFailure = true; break; + case SE_LimitManaMax: + if (spell.mana > base1) + LimitFailure = true; + break; + case SE_LimitTarget: if (base1 < 0) { if (-base1 == spell.targettype) // Exclude @@ -4719,6 +4724,11 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo return 0; break; + case SE_LimitManaMax: + if (spell.mana > focus_spell.base[i]) + return 0; + break; + case SE_LimitTarget: if (focus_spell.base[i] < 0) { if (-focus_spell.base[i] == spell.targettype) // Exclude @@ -5178,11 +5188,8 @@ uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) { return 0; } -int16 Client::GetFocusEffect(focusType type, uint16 spell_id) { - - if (IsBardSong(spell_id) && type != focusFcBaseEffects) - return 0; - +int16 Client::GetFocusEffect(focusType type, uint16 spell_id) +{ int16 realTotal = 0; int16 realTotal2 = 0; int16 realTotal3 = 0; From 77f050b653e77ea1cde5b3aea90f1f4513f77186 Mon Sep 17 00:00:00 2001 From: KimLS Date: Sun, 21 Jun 2015 01:25:34 -0700 Subject: [PATCH 34/48] setaapts command will now let you have up to 5k AA points, from 200. Removed the need to specify a prev_id in alternate_abilities table it can deduce that by itself. --- zone/aa.cpp | 21 ++++++++++++--------- zone/command.cpp | 4 ++-- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 0c31034c7..974ccef13 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1520,7 +1520,9 @@ void Zone::LoadAlternateAdvancement() { //process these ranks AA::Rank *current = ability.second->first; int i = 1; + int prev_id = -1; while(current) { + current->prev_id = prev_id; current->prev = GetAlternateAdvancementRank(current->prev_id); current->next = GetAlternateAdvancementRank(current->next_id); current->base_ability = ability.second.get(); @@ -1531,11 +1533,11 @@ void Zone::LoadAlternateAdvancement() { //check prereqs here for(auto &prev_prereq : current->prev->prereqs) { - // //if prev has an aa we dont have set - // // then set it here too - // //if prev has an aa we have and the count is different - // // then set to whichever is highest - // + //if prev has an aa we dont have set + // then set it here too + //if prev has an aa we have + // then set to whichever is highest + auto iter = current->prereqs.find(prev_prereq.first); if(iter == current->prereqs.end()) { //not found @@ -1557,6 +1559,7 @@ void Zone::LoadAlternateAdvancement() { } i++; + prev_id = current->id; current = current->next; } } @@ -1602,7 +1605,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_mapspell = atoi(row[7]); rank->spell_type = atoi(row[8]); rank->recast_time = atoi(row[9]); - rank->prev_id = atoi(row[10]); - rank->next_id = atoi(row[11]); - rank->expansion = atoi(row[12]); + rank->next_id = atoi(row[10]); + rank->expansion = atoi(row[11]); rank->base_ability = nullptr; rank->total_cost = 0; + rank->prev_id = -1; rank->next = nullptr; rank->prev = nullptr; diff --git a/zone/command.cpp b/zone/command.cpp index 59f4bfa8a..7114244b3 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -5554,8 +5554,8 @@ void command_setaapts(Client *c, const Seperator *sep) if(sep->arg[1][0] == '\0' || sep->arg[2][0] == '\0') c->Message(0, "Usage: #setaapts "); - else if(atoi(sep->arg[2]) <= 0 || atoi(sep->arg[2]) > 200) - c->Message(0, "You must have a number greater than 0 for points and no more than 200."); + else if(atoi(sep->arg[2]) <= 0 || atoi(sep->arg[2]) > 5000) + c->Message(0, "You must have a number greater than 0 for points and no more than 5000."); else if(!strcasecmp(sep->arg[1], "group")) { t->GetPP().group_leadership_points = atoi(sep->arg[2]); t->GetPP().group_leadership_exp = 0; From fd989cdbc84447a026d084e99ac258f0f2eea477 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Mon, 22 Jun 2015 00:08:21 -0400 Subject: [PATCH 35/48] Add back in the bard song focus check But also allowed focusSpellDuration through for that AA --- zone/spell_effects.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 71740e589..9134e8ff7 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -5190,6 +5190,9 @@ uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) { int16 Client::GetFocusEffect(focusType type, uint16 spell_id) { + if (IsBardSong(spell_id) && type != focusFcBaseEffects && type != focusSpellDuration) + return 0; + int16 realTotal = 0; int16 realTotal2 = 0; int16 realTotal3 = 0; From ce5e185738a4d0f643a7a925c4f9654746951e2a Mon Sep 17 00:00:00 2001 From: KimLS Date: Tue, 23 Jun 2015 00:36:43 -0700 Subject: [PATCH 36/48] Reworked how grant aa works --- zone/aa.cpp | 86 ++++++++++++++++++++------------------------ zone/client.cpp | 4 --- zone/client.h | 3 ++ zone/lua_client.cpp | 6 ++++ zone/lua_client.h | 1 + zone/lua_mob.cpp | 6 ---- zone/lua_mob.h | 1 - zone/mob.h | 3 +- zone/perl_client.cpp | 29 +++++++++++++++ zone/perl_mob.cpp | 26 -------------- 10 files changed, 78 insertions(+), 87 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 5cbb5da14..8a4df6293 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -902,7 +902,7 @@ void Client::SendAlternateAdvancementPoints() { AA::Rank *rank = aa.second->GetRankByPointsSpent(ranks); if(rank) { aa2->aa_list[i].AA = rank->id; - aa2->aa_list[i].value = ranks; + aa2->aa_list[i].value = rank->total_cost; aa2->aa_list[i].charges = charges; i++; } @@ -993,10 +993,37 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { return; } - if(!CanPurchaseAlternateAdvancementRank(rank, true)) { + if(!CanPurchaseAlternateAdvancementRank(rank, true, true)) { return; } + FinishAlternateAdvancementPurchase(rank); +} + +bool Client::GrantAlternateAdvancementAbility(int aa_id, int points) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa_id, points); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!rank) { + return false; + } + + if(!rank->base_ability) { + return false; + } + + if(!CanPurchaseAlternateAdvancementRank(rank, true, false)) { + return false; + } + + FinishAlternateAdvancementPurchase(rank); + return true; +} + +void Client::FinishAlternateAdvancementPurchase(AA::Rank *rank) { + int rank_id = rank->base_ability->first_rank_id; + if(rank->base_ability->charges > 0) { uint32 charges = 0; GetAA(rank_id, &charges); @@ -1006,7 +1033,8 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { } SetAA(rank_id, rank->current_value, rank->base_ability->charges); - } else { + } + else { SetAA(rank_id, rank->current_value, 0); //if not max then send next aa @@ -1029,17 +1057,18 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { std::to_string(AA_POINTS).c_str()); /* QS: Player_Log_AA_Purchases */ - if (RuleB(QueryServ, PlayerLogAAPurchases)){ + if(RuleB(QueryServ, PlayerLogAAPurchases)){ std::string event_desc = StringFormat("Ranked AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, rank->cost, GetZoneID(), GetInstanceID()); QServ->PlayerLogEvent(Player_Log_AA_Purchases, CharacterID(), event_desc); } - } else { + } + else { Message_StringID(15, AA_GAIN_ABILITY, std::to_string(rank->title_sid).c_str(), std::to_string(rank->cost).c_str(), std::to_string(AA_POINTS).c_str()); /* QS: Player_Log_AA_Purchases */ - if (RuleB(QueryServ, PlayerLogAAPurchases)){ + if(RuleB(QueryServ, PlayerLogAAPurchases)){ std::string event_desc = StringFormat("Initial AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, rank->cost, GetZoneID(), GetInstanceID()); QServ->PlayerLogEvent(Player_Log_AA_Purchases, CharacterID(), event_desc); } @@ -1061,7 +1090,7 @@ void Client::IncrementAlternateAdvancementRank(int rank_id) { return; } - if(!CanPurchaseAlternateAdvancementRank(rank, false)) { + if(!CanPurchaseAlternateAdvancementRank(rank, false, true)) { return; } @@ -1443,7 +1472,7 @@ bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) { return true; } -bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price) { +bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price, bool check_grant) { AA::Ability *ability = rank->base_ability; if(!ability) @@ -1454,7 +1483,7 @@ bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price) } //You can't purchase grant only AAs they can only be assigned - if(ability->grant_only) { + if(check_grant && ability->grant_only) { return false; } @@ -1692,45 +1721,6 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_mapGetAlternateAdvancementAbilityAndRank(aa_id, points); - auto ability = ability_rank.first; - auto rank = ability_rank.second; - - if(!ability) { - return; - } - - if(ability->charges > 0) { - return; - } - - if(!ability->grant_only) { - return; - } - - if(!CanUseAlternateAdvancementRank(rank)) { - return; - } - - SetAA(ability->first_rank_id, rank->current_value, 0); - - if(IsClient()) { - Client *c = CastToClient(); - - if(rank->next) { - c->SendAlternateAdvancementRank(rank->base_ability->id, rank->next->current_value); - } - - c->SendAlternateAdvancementPoints(); - c->SendAlternateAdvancementStats(); - c->CalcBonuses(); - } -} - bool Mob::CheckAATimer(int timer) { if (timer >= aaTimerMax) diff --git a/zone/client.cpp b/zone/client.cpp index ae0ceedff..240902d09 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -532,10 +532,6 @@ bool Client::SaveAA() { if(!ability) continue; - if(ability->grant_only) { - continue; - } - if(rank.second.first > 0) { AA::Rank *r = ability->GetRankByPointsSpent(rank.second.first); diff --git a/zone/client.h b/zone/client.h index 44e86f971..8b0522162 100644 --- a/zone/client.h +++ b/zone/client.h @@ -763,6 +763,7 @@ public: void SendAlternateAdvancementTable(); void SendAlternateAdvancementStats(); void PurchaseAlternateAdvancementRank(int rank_id); + bool GrantAlternateAdvancementAbility(int aa_id, int points); void IncrementAlternateAdvancementRank(int rank_id); void ActivateAlternateAdvancementAbility(int rank_id, int target_id); void SendAlternateAdvancementPoints(); @@ -1262,6 +1263,8 @@ protected: int16 GetFocusEffect(focusType type, uint16 spell_id); uint16 GetSympatheticFocusEffect(focusType type, uint16 spell_id); + void FinishAlternateAdvancementPurchase(AA::Rank *rank); + Mob* bind_sight_target; glm::vec4 m_AutoAttackPosition; diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 37f379a06..8f2106b04 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -1027,6 +1027,11 @@ void Lua_Client::IncrementAA(int aa) { self->IncrementAlternateAdvancementRank(aa); } +bool Lua_Client::GrantAlternateAdvancementAbility(int aa_id, int points) { + Lua_Safe_Call_Bool(); + self->GrantAlternateAdvancementAbility(aa_id, points); +} + void Lua_Client::MarkSingleCompassLoc(float in_x, float in_y, float in_z) { Lua_Safe_Call_Void(); self->MarkSingleCompassLoc(in_x, in_y, in_z); @@ -1500,6 +1505,7 @@ luabind::scope lua_register_client() { .def("AddLevelBasedExp", (void(Lua_Client::*)(int))&Lua_Client::AddLevelBasedExp) .def("AddLevelBasedExp", (void(Lua_Client::*)(int,int))&Lua_Client::AddLevelBasedExp) .def("IncrementAA", (void(Lua_Client::*)(int))&Lua_Client::IncrementAA) + .def("GrantAlternateAdvancementAbility", (bool(Lua_Client::*)(int, int))&Lua_Client::GrantAlternateAdvancementAbility) .def("MarkSingleCompassLoc", (void(Lua_Client::*)(float,float,float))&Lua_Client::MarkSingleCompassLoc) .def("MarkSingleCompassLoc", (void(Lua_Client::*)(float,float,float,int))&Lua_Client::MarkSingleCompassLoc) .def("GetNextAvailableSpellBookSlot", (int(Lua_Client::*)(void))&Lua_Client::GetNextAvailableSpellBookSlot) diff --git a/zone/lua_client.h b/zone/lua_client.h index 8f930fc26..a20f4fb57 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -233,6 +233,7 @@ public: void AddLevelBasedExp(int exp_pct); void AddLevelBasedExp(int exp_pct, int max_level); void IncrementAA(int aa); + bool GrantAlternateAdvancementAbility(int aa_id, int points); void MarkSingleCompassLoc(float in_x, float in_y, float in_z); void MarkSingleCompassLoc(float in_x, float in_y, float in_z, int count); int GetNextAvailableSpellBookSlot(); diff --git a/zone/lua_mob.cpp b/zone/lua_mob.cpp index 31719d364..9662d1931 100644 --- a/zone/lua_mob.cpp +++ b/zone/lua_mob.cpp @@ -1210,11 +1210,6 @@ bool Lua_Mob::SetAA(int rank_id, int new_value, int charges) { return self->SetAA(rank_id, new_value, charges); } -void Lua_Mob::GrantAlternateAdvancementAbility(int aa_id, int points) { - Lua_Safe_Call_Void(); - self->GrantAlternateAdvancementAbility(aa_id, points); -} - bool Lua_Mob::DivineAura() { Lua_Safe_Call_Bool(); return self->DivineAura(); @@ -2097,7 +2092,6 @@ luabind::scope lua_register_mob() { .def("GetAAByAAID", (int(Lua_Mob::*)(int))&Lua_Mob::GetAAByAAID) .def("SetAA", (bool(Lua_Mob::*)(int,int))&Lua_Mob::SetAA) .def("SetAA", (bool(Lua_Mob::*)(int,int,int))&Lua_Mob::SetAA) - .def("GrantAlternateAdvancementAbility", (void(Lua_Mob::*)(int, int))&Lua_Mob::GrantAlternateAdvancementAbility) .def("DivineAura", (bool(Lua_Mob::*)(void))&Lua_Mob::DivineAura) .def("SetOOCRegen", (void(Lua_Mob::*)(int))&Lua_Mob::SetOOCRegen) .def("GetEntityVariable", (const char*(Lua_Mob::*)(const char*))&Lua_Mob::GetEntityVariable) diff --git a/zone/lua_mob.h b/zone/lua_mob.h index 914f46c5d..4f427aca5 100644 --- a/zone/lua_mob.h +++ b/zone/lua_mob.h @@ -252,7 +252,6 @@ public: int GetAAByAAID(int id); bool SetAA(int rank_id, int new_value); bool SetAA(int rank_id, int new_value, int charges); - void GrantAlternateAdvancementAbility(int aa_id, int points); bool DivineAura(); void SetOOCRegen(int regen); const char* GetEntityVariable(const char *name); diff --git a/zone/mob.h b/zone/mob.h index c9ba4471d..60a40711b 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -965,12 +965,11 @@ public: bool SetAA(uint32 rank_id, uint32 new_value, uint32 charges = 0); void ClearAAs() { aa_ranks.clear(); } bool CanUseAlternateAdvancementRank(AA::Rank *rank); - bool CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price); + bool CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price, bool check_grant); int GetAlternateAdvancementCooldownReduction(AA::Rank *rank_in); void ExpendAlternateAdvancementCharge(uint32 aa_id); void CalcAABonuses(StatBonuses* newbon); void ApplyAABonuses(const AA::Rank &rank, StatBonuses* newbon); - void GrantAlternateAdvancementAbility(int aa_id, int points); bool CheckAATimer(int timer); protected: diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index eea9918cd..c836e378e 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -4894,6 +4894,34 @@ XS(XS_Client_IncrementAA) XSRETURN_EMPTY; } +XS(XS_Client_GrantAlternateAdvancementAbility); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_GrantAlternateAdvancementAbility) +{ + dXSARGS; + if(items != 3) + Perl_croak(aTHX_ "Usage: Client::GrantAlternateAdvancementAbility(THIS, aa_id, points)"); + { + Client * THIS; + bool RETVAL; + int aa_id = (int)SvIV(ST(1)); + int points = (int)SvIV(ST(2)); + + if(sv_derived_from(ST(0), "Client")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + THIS = INT2PTR(Client *, tmp); + } + else + Perl_croak(aTHX_ "THIS is not of type Client"); + if(THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + RETVAL = THIS->GrantAlternateAdvancementAbility(aa_id, points); + ST(0) = boolSV(RETVAL); + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + XS(XS_Client_GetAALevel); XS(XS_Client_GetAALevel) { @@ -6437,6 +6465,7 @@ XS(boot_Client) newXSproto(strcpy(buf, "GetIP"), XS_Client_GetIP, file, "$"); newXSproto(strcpy(buf, "AddLevelBasedExp"), XS_Client_AddLevelBasedExp, file, "$$;$"); newXSproto(strcpy(buf, "IncrementAA"), XS_Client_IncrementAA, file, "$$"); + newXSproto(strcpy(buf, "GrantAlternateAdvancementAbility"), XS_Client_GrantAlternateAdvancementAbility, file, "$$$"); newXSproto(strcpy(buf, "GetAALevel"), XS_Client_GetAALevel, file, "$$"); newXSproto(strcpy(buf, "MarkCompassLoc"), XS_Client_MarkCompassLoc, file, "$$$$"); newXSproto(strcpy(buf, "ClearCompassMark"), XS_Client_ClearCompassMark, file, "$"); diff --git a/zone/perl_mob.cpp b/zone/perl_mob.cpp index 612d9f868..dcd999a3e 100644 --- a/zone/perl_mob.cpp +++ b/zone/perl_mob.cpp @@ -6438,31 +6438,6 @@ XS(XS_Mob_SetAA) XSRETURN(1); } -XS(XS_Mob_GrantAlternateAdvancementAbility); /* prototype to pass -Wmissing-prototypes */ -XS(XS_Mob_GrantAlternateAdvancementAbility) -{ - dXSARGS; - if(items != 3) - Perl_croak(aTHX_ "Usage: Mob::GrantAlternateAdvancementAbility(THIS, aa_id, points)"); - { - Mob * THIS; - int aa_id = (int)SvIV(ST(1)); - int points = (int)SvIV(ST(2)); - - if(sv_derived_from(ST(0), "Mob")) { - IV tmp = SvIV((SV*)SvRV(ST(0))); - THIS = INT2PTR(Mob *, tmp); - } - else - Perl_croak(aTHX_ "THIS is not of type Mob"); - if(THIS == nullptr) - Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - - THIS->GrantAlternateAdvancementAbility(aa_id, points); - } - XSRETURN_EMPTY; -} - XS(XS_Mob_DivineAura); /* prototype to pass -Wmissing-prototypes */ XS(XS_Mob_DivineAura) { @@ -8708,7 +8683,6 @@ XS(boot_Mob) newXSproto(strcpy(buf, "GetAA"), XS_Mob_GetAA, file, "$$"); newXSproto(strcpy(buf, "GetAAByAAID"), XS_Mob_GetAAByAAID, file, "$$"); newXSproto(strcpy(buf, "SetAA"), XS_Mob_SetAA, file, "$$$;$"); - newXSproto(strcpy(buf, "GrantAlternateAdvancementAbility"), XS_Mob_GrantAlternateAdvancementAbility, file, "$$$"); newXSproto(strcpy(buf, "DivineAura"), XS_Mob_DivineAura, file, "$"); newXSproto(strcpy(buf, "AddFeignMemory"), XS_Mob_AddFeignMemory, file, "$$"); newXSproto(strcpy(buf, "RemoveFromFeignMemory"), XS_Mob_RemoveFromFeignMemory, file, "$$"); From a41570677f698805c0d86cc525bcbea73db05dc4 Mon Sep 17 00:00:00 2001 From: KimLS Date: Tue, 23 Jun 2015 12:53:46 -0700 Subject: [PATCH 37/48] More work on Granting, incrementaa now uses grant internally which should make it work more consistently with its old behavior --- zone/aa.cpp | 130 +++++++++++++++++-------------------------- zone/client.h | 4 +- zone/lua_client.cpp | 6 ++ zone/lua_client.h | 1 + zone/perl_client.cpp | 13 +++-- 5 files changed, 70 insertions(+), 84 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 8a4df6293..c97ff7af4 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -762,6 +762,10 @@ void Client::RefundAA() { continue; } + if(ability->grant_only) { + continue; + } + refunded += rank->total_cost; } @@ -997,31 +1001,36 @@ void Client::PurchaseAlternateAdvancementRank(int rank_id) { return; } - FinishAlternateAdvancementPurchase(rank); + FinishAlternateAdvancementPurchase(rank, false); } -bool Client::GrantAlternateAdvancementAbility(int aa_id, int points) { - auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa_id, points); - auto ability = ability_rank.first; - auto rank = ability_rank.second; +bool Client::GrantAlternateAdvancementAbility(int aa_id, int points, bool ignore_cost) { + bool ret = false; + for(int i = 1; i <= points; ++i) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa_id, i); + auto ability = ability_rank.first; + auto rank = ability_rank.second; - if(!rank) { - return false; + if(!rank) { + continue; + } + + if(!rank->base_ability) { + continue; + } + + if(!CanPurchaseAlternateAdvancementRank(rank, !ignore_cost, false)) { + continue; + } + + ret = true; + FinishAlternateAdvancementPurchase(rank, ignore_cost); } - if(!rank->base_ability) { - return false; - } - - if(!CanPurchaseAlternateAdvancementRank(rank, true, false)) { - return false; - } - - FinishAlternateAdvancementPurchase(rank); - return true; + return ret; } -void Client::FinishAlternateAdvancementPurchase(AA::Rank *rank) { +void Client::FinishAlternateAdvancementPurchase(AA::Rank *rank, bool ignore_cost) { int rank_id = rank->base_ability->first_rank_id; if(rank->base_ability->charges > 0) { @@ -1043,7 +1052,9 @@ void Client::FinishAlternateAdvancementPurchase(AA::Rank *rank) { } } - m_pp.aapoints -= rank->cost; + int cost = !ignore_cost ? rank->cost : 0; + + m_pp.aapoints -= cost ; SaveAA(); SendAlternateAdvancementPoints(); @@ -1053,30 +1064,33 @@ void Client::FinishAlternateAdvancementPurchase(AA::Rank *rank) { Message_StringID(15, AA_IMPROVE, std::to_string(rank->title_sid).c_str(), std::to_string(rank->prev->current_value).c_str(), - std::to_string(rank->cost).c_str(), - std::to_string(AA_POINTS).c_str()); + std::to_string(cost).c_str(), + cost == 1 ? std::to_string(AA_POINT).c_str() : std::to_string(AA_POINTS).c_str()); /* QS: Player_Log_AA_Purchases */ - if(RuleB(QueryServ, PlayerLogAAPurchases)){ - std::string event_desc = StringFormat("Ranked AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, rank->cost, GetZoneID(), GetInstanceID()); + if(RuleB(QueryServ, PlayerLogAAPurchases)) { + std::string event_desc = StringFormat("Ranked AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, cost, GetZoneID(), GetInstanceID()); QServ->PlayerLogEvent(Player_Log_AA_Purchases, CharacterID(), event_desc); } } else { Message_StringID(15, AA_GAIN_ABILITY, std::to_string(rank->title_sid).c_str(), - std::to_string(rank->cost).c_str(), - std::to_string(AA_POINTS).c_str()); + std::to_string(cost).c_str(), + cost == 1 ? std::to_string(AA_POINT).c_str() : std::to_string(AA_POINTS).c_str()); /* QS: Player_Log_AA_Purchases */ - if(RuleB(QueryServ, PlayerLogAAPurchases)){ - std::string event_desc = StringFormat("Initial AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, rank->cost, GetZoneID(), GetInstanceID()); + if(RuleB(QueryServ, PlayerLogAAPurchases)) { + std::string event_desc = StringFormat("Initial AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, cost, GetZoneID(), GetInstanceID()); QServ->PlayerLogEvent(Player_Log_AA_Purchases, CharacterID(), event_desc); } } CalcBonuses(); - if(title_manager.IsNewAATitleAvailable(m_pp.aapoints_spent, GetBaseClass())) - NotifyNewTitlesAvailable(); + + if(cost > 0) { + if(title_manager.IsNewAATitleAvailable(m_pp.aapoints_spent, GetBaseClass())) + NotifyNewTitlesAvailable(); + } } //need to rewrite this @@ -1090,54 +1104,8 @@ void Client::IncrementAlternateAdvancementRank(int rank_id) { return; } - if(!CanPurchaseAlternateAdvancementRank(rank, false, true)) { - return; - } - - if(rank->base_ability->charges > 0) { - SetAA(rank_id, rank->current_value, rank->base_ability->charges); - } - else { - SetAA(rank_id, rank->current_value, 0); - - //if not max then send next aa - if(rank->next) { - SendAlternateAdvancementRank(rank->base_ability->id, rank->next->current_value); - } - } - - SaveAA(); - - SendAlternateAdvancementPoints(); - SendAlternateAdvancementStats(); - - if(rank->prev) { - Message_StringID(15, AA_IMPROVE, - std::to_string(rank->title_sid).c_str(), - std::to_string(rank->prev->current_value).c_str(), - std::to_string(rank->cost).c_str(), - std::to_string(AA_POINTS).c_str()); - - /* QS: Player_Log_AA_Purchases */ - if (RuleB(QueryServ, PlayerLogAAPurchases)){ - std::string event_desc = StringFormat("Ranked AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, rank->cost, GetZoneID(), GetInstanceID()); - QServ->PlayerLogEvent(Player_Log_AA_Purchases, CharacterID(), event_desc); - } - } - else { - Message_StringID(15, AA_GAIN_ABILITY, - std::to_string(rank->title_sid).c_str(), - std::to_string(rank->cost).c_str(), - std::to_string(AA_POINTS).c_str()); - - /* QS: Player_Log_AA_Purchases */ - if (RuleB(QueryServ, PlayerLogAAPurchases)){ - std::string event_desc = StringFormat("Initial AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, rank->cost, GetZoneID(), GetInstanceID()); - QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); - } - } - - CalcBonuses(); + int points = GetAA(rank_id); + GrantAlternateAdvancementAbility(rank->base_ability->id, points + 1, true); } void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) { @@ -1496,12 +1464,18 @@ bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price, auto points = GetAA(rank->id, ¤t_charges); //check that we are on previous rank already (if exists) - if(rank->prev) { + //grant ignores the req to own the previous rank. + if(check_grant && rank->prev) { if(points != rank->prev->current_value) { return false; } } + //check that we aren't already on this rank or one ahead of us + if(points >= rank->current_value) { + return false; + } + //if expendable only let us purchase if we have no charges already //not quite sure on how this functions client side atm //I intend to look into it later to make sure the behavior is right diff --git a/zone/client.h b/zone/client.h index 8b0522162..7ab3749e1 100644 --- a/zone/client.h +++ b/zone/client.h @@ -763,7 +763,7 @@ public: void SendAlternateAdvancementTable(); void SendAlternateAdvancementStats(); void PurchaseAlternateAdvancementRank(int rank_id); - bool GrantAlternateAdvancementAbility(int aa_id, int points); + bool GrantAlternateAdvancementAbility(int aa_id, int points, bool ignore_cost = false); void IncrementAlternateAdvancementRank(int rank_id); void ActivateAlternateAdvancementAbility(int rank_id, int target_id); void SendAlternateAdvancementPoints(); @@ -1263,7 +1263,7 @@ protected: int16 GetFocusEffect(focusType type, uint16 spell_id); uint16 GetSympatheticFocusEffect(focusType type, uint16 spell_id); - void FinishAlternateAdvancementPurchase(AA::Rank *rank); + void FinishAlternateAdvancementPurchase(AA::Rank *rank, bool ignore_cost); Mob* bind_sight_target; diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 8f2106b04..0c5bf8cc1 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -1032,6 +1032,11 @@ bool Lua_Client::GrantAlternateAdvancementAbility(int aa_id, int points) { self->GrantAlternateAdvancementAbility(aa_id, points); } +bool Lua_Client::GrantAlternateAdvancementAbility(int aa_id, int points, bool ignore_cost) { + Lua_Safe_Call_Bool(); + self->GrantAlternateAdvancementAbility(aa_id, points, ignore_cost); +} + void Lua_Client::MarkSingleCompassLoc(float in_x, float in_y, float in_z) { Lua_Safe_Call_Void(); self->MarkSingleCompassLoc(in_x, in_y, in_z); @@ -1506,6 +1511,7 @@ luabind::scope lua_register_client() { .def("AddLevelBasedExp", (void(Lua_Client::*)(int,int))&Lua_Client::AddLevelBasedExp) .def("IncrementAA", (void(Lua_Client::*)(int))&Lua_Client::IncrementAA) .def("GrantAlternateAdvancementAbility", (bool(Lua_Client::*)(int, int))&Lua_Client::GrantAlternateAdvancementAbility) + .def("GrantAlternateAdvancementAbility", (bool(Lua_Client::*)(int, int, bool))&Lua_Client::GrantAlternateAdvancementAbility) .def("MarkSingleCompassLoc", (void(Lua_Client::*)(float,float,float))&Lua_Client::MarkSingleCompassLoc) .def("MarkSingleCompassLoc", (void(Lua_Client::*)(float,float,float,int))&Lua_Client::MarkSingleCompassLoc) .def("GetNextAvailableSpellBookSlot", (int(Lua_Client::*)(void))&Lua_Client::GetNextAvailableSpellBookSlot) diff --git a/zone/lua_client.h b/zone/lua_client.h index a20f4fb57..0639cd6da 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -234,6 +234,7 @@ public: void AddLevelBasedExp(int exp_pct, int max_level); void IncrementAA(int aa); bool GrantAlternateAdvancementAbility(int aa_id, int points); + bool GrantAlternateAdvancementAbility(int aa_id, int points, bool ignore_cost); void MarkSingleCompassLoc(float in_x, float in_y, float in_z); void MarkSingleCompassLoc(float in_x, float in_y, float in_z, int count); int GetNextAvailableSpellBookSlot(); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index c836e378e..ee4ee943d 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -4898,13 +4898,14 @@ XS(XS_Client_GrantAlternateAdvancementAbility); /* prototype to pass -Wmissing-p XS(XS_Client_GrantAlternateAdvancementAbility) { dXSARGS; - if(items != 3) - Perl_croak(aTHX_ "Usage: Client::GrantAlternateAdvancementAbility(THIS, aa_id, points)"); + if(items < 3 || items > 4) + Perl_croak(aTHX_ "Usage: Client::GrantAlternateAdvancementAbility(THIS, aa_id, points, [ignore_cost])"); { Client * THIS; bool RETVAL; int aa_id = (int)SvIV(ST(1)); int points = (int)SvIV(ST(2)); + bool ignore_cost = false; if(sv_derived_from(ST(0), "Client")) { IV tmp = SvIV((SV*)SvRV(ST(0))); @@ -4915,7 +4916,11 @@ XS(XS_Client_GrantAlternateAdvancementAbility) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GrantAlternateAdvancementAbility(aa_id, points); + if(items > 3) { + ignore_cost = (bool)SvTRUE(ST(3)); + } + + RETVAL = THIS->GrantAlternateAdvancementAbility(aa_id, points, ignore_cost); ST(0) = boolSV(RETVAL); sv_2mortal(ST(0)); } @@ -6465,7 +6470,7 @@ XS(boot_Client) newXSproto(strcpy(buf, "GetIP"), XS_Client_GetIP, file, "$"); newXSproto(strcpy(buf, "AddLevelBasedExp"), XS_Client_AddLevelBasedExp, file, "$$;$"); newXSproto(strcpy(buf, "IncrementAA"), XS_Client_IncrementAA, file, "$$"); - newXSproto(strcpy(buf, "GrantAlternateAdvancementAbility"), XS_Client_GrantAlternateAdvancementAbility, file, "$$$"); + newXSproto(strcpy(buf, "GrantAlternateAdvancementAbility"), XS_Client_GrantAlternateAdvancementAbility, file, "$$$;$"); newXSproto(strcpy(buf, "GetAALevel"), XS_Client_GetAALevel, file, "$$"); newXSproto(strcpy(buf, "MarkCompassLoc"), XS_Client_MarkCompassLoc, file, "$$$$"); newXSproto(strcpy(buf, "ClearCompassMark"), XS_Client_ClearCompassMark, file, "$"); From 8f156b3c91a2fef24b1ca7c86cd050784f83f7c3 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Tue, 23 Jun 2015 18:37:24 -0400 Subject: [PATCH 38/48] Add Client:GetAccountAge to Lua --- zone/client.h | 1 + zone/lua_client.cpp | 6 ++++++ zone/lua_client.h | 5 +++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/zone/client.h b/zone/client.h index 7ab3749e1..4298bcc46 100644 --- a/zone/client.h +++ b/zone/client.h @@ -622,6 +622,7 @@ public: inline uint32 AccountID() const { return account_id; } inline const char* AccountName()const { return account_name; } + inline int GetAccountCreation() const { return account_creation; } inline int16 Admin() const { return admin; } inline uint32 CharacterID() const { return character_id; } void UpdateAdmin(bool iFromDB = true); diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 0c5bf8cc1..d69924577 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -350,6 +350,11 @@ const char *Lua_Client::AccountName() { return self->AccountName(); } +int Lua_Client::GetAccountAge() { + Lua_Safe_Call_Int(); + return time(nullptr) - self->GetAccountCreation(); +} + int Lua_Client::Admin() { Lua_Safe_Call_Bool(); return self->Admin(); @@ -1375,6 +1380,7 @@ luabind::scope lua_register_client() { .def("GetRawItemAC", (int(Lua_Client::*)(void))&Lua_Client::GetRawItemAC) .def("AccountID", (uint32(Lua_Client::*)(void))&Lua_Client::AccountID) .def("AccountName", (const char *(Lua_Client::*)(void))&Lua_Client::AccountName) + .def("GetAccountAge", (int(Lua_Client::*)(void))&Lua_Client::GetAccountAge) .def("Admin", (int(Lua_Client::*)(void))&Lua_Client::Admin) .def("CharacterID", (uint32(Lua_Client::*)(void))&Lua_Client::CharacterID) .def("GuildRank", (int(Lua_Client::*)(void))&Lua_Client::GuildRank) diff --git a/zone/lua_client.h b/zone/lua_client.h index 0639cd6da..dd1059a0a 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -166,9 +166,9 @@ public: void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3); void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4); void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5); - void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, + void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, bool attuned); - void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, + void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, bool attuned, int to_slot); void SetStats(int type, int value); void IncStats(int type, int value); @@ -262,6 +262,7 @@ public: bool HasSpellScribed(int spell_id); void SetAccountFlag(std::string flag, std::string val); std::string GetAccountFlag(std::string flag); + int GetAccountAge(); Lua_Group GetGroup(); Lua_Raid GetRaid(); bool PutItemInInventory(int slot_id, Lua_ItemInst inst); From 31301e0a2603fa665a6659d8bbbf3e0b77a48273 Mon Sep 17 00:00:00 2001 From: KimLS Date: Wed, 24 Jun 2015 01:25:49 -0700 Subject: [PATCH 39/48] ResetAA should hopefully play better with granted AA points now --- zone/aa.cpp | 48 +++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index c97ff7af4..07adc2805 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -441,15 +441,26 @@ void Mob::WakeTheDead(uint16 spell_id, Mob *target, uint32 duration) } void Client::ResetAA() { + SendClearAA(); RefundAA(); - uint32 i; - for (i=0; i < MAX_PP_AA_ARRAY; i++) { - m_pp.aa_array[i].AA = 0; - m_pp.aa_array[i].value = 0; - m_pp.aa_array[i].charges= 0; - } - aa_ranks.clear(); + memset(&m_pp.aa_array[0], 0, sizeof(AA_Array) * MAX_PP_AA_ARRAY); + + int i = 0; + for(auto &rank_value : aa_ranks) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(rank_value.first, rank_value.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!rank) { + continue; + } + + m_pp.aa_array[i].AA = rank_value.first; + m_pp.aa_array[i].value = rank_value.second.first; + m_pp.aa_array[i].charges = rank_value.second.second; + ++i; + } for(int i = 0; i < _maxLeaderAA; ++i) m_pp.leader_abilities.ranks[i] = 0; @@ -459,13 +470,7 @@ void Client::ResetAA() { m_pp.group_leadership_exp = 0; m_pp.raid_leadership_exp = 0; - database.DeleteCharacterAAs(CharacterID()); - SaveAA(); - SendClearAA(); - SendAlternateAdvancementTable(); - SendAlternateAdvancementPoints(); - SendAlternateAdvancementStats(); - database.DeleteCharacterLeadershipAAs(this->CharacterID()); + database.DeleteCharacterLeadershipAAs(CharacterID()); // undefined for these clients if (GetClientVersionBit() & BIT_TitaniumAndEarlier) Kick(); @@ -749,24 +754,29 @@ void Client::InspectBuffs(Client* Inspector, int Rank) void Client::RefundAA() { int refunded = 0; - for(auto &rank_value : aa_ranks) { - auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(rank_value.first, rank_value.second.first); + auto rank_value = aa_ranks.begin(); + while(rank_value != aa_ranks.end()) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(rank_value->first, rank_value->second.first); auto ability = ability_rank.first; auto rank = ability_rank.second; if(!ability) { + ++rank_value; continue; } - if(ability->charges > 0 && rank_value.second.second < 1) { + if(ability->charges > 0 && rank_value->second.second < 1) { + ++rank_value; continue; } if(ability->grant_only) { + ++rank_value; continue; } refunded += rank->total_cost; + rank_value = aa_ranks.erase(rank_value); } if(refunded > 0) { @@ -774,6 +784,10 @@ void Client::RefundAA() { SaveAA(); Save(); } + + SendAlternateAdvancementTable(); + SendAlternateAdvancementPoints(); + SendAlternateAdvancementStats(); } AA_SwarmPetInfo::AA_SwarmPetInfo() From 476ee10ca02b6d4bfee8a4126f87e393d9e7c260 Mon Sep 17 00:00:00 2001 From: KimLS Date: Wed, 24 Jun 2015 20:02:11 -0700 Subject: [PATCH 40/48] Fix for Berserkers not seeing AAs on SoD and below clients. --- common/patches/sod_structs.h | 3 +-- common/patches/sof_structs.h | 3 +-- common/patches/titanium_structs.h | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/common/patches/sod_structs.h b/common/patches/sod_structs.h index 6e1a77b6b..816bff323 100644 --- a/common/patches/sod_structs.h +++ b/common/patches/sod_structs.h @@ -3813,8 +3813,7 @@ struct SendAA_Struct { /*0049*/ uint32 spellid; /*0053*/ uint32 spell_type; /*0057*/ uint32 spell_refresh; -/*0061*/ uint16 classes; -/*0063*/ uint16 berserker; //seems to be 1 if its a berserker ability +/*0061*/ uint32 classes; /*0065*/ uint32 max_level; /*0069*/ uint32 last_id; /*0073*/ uint32 next_id; diff --git a/common/patches/sof_structs.h b/common/patches/sof_structs.h index faa306ab0..49ad7ba3e 100644 --- a/common/patches/sof_structs.h +++ b/common/patches/sof_structs.h @@ -3677,8 +3677,7 @@ struct SendAA_Struct { /*0049*/ uint32 spellid; /*0053*/ uint32 spell_type; /*0057*/ uint32 spell_refresh; -/*0061*/ uint16 classes; -/*0063*/ uint16 berserker; //seems to be 1 if its a berserker ability +/*0061*/ uint32 classes; /*0065*/ uint32 max_level; /*0069*/ uint32 last_id; /*0073*/ uint32 next_id; diff --git a/common/patches/titanium_structs.h b/common/patches/titanium_structs.h index e5fa44a8e..36cf2df3d 100644 --- a/common/patches/titanium_structs.h +++ b/common/patches/titanium_structs.h @@ -3157,8 +3157,7 @@ struct SendAA_Struct { /*0052*/ uint32 spellid; /*0056*/ uint32 spell_type; /*0060*/ uint32 spell_refresh; -/*0064*/ uint16 classes; -/*0066*/ uint16 berserker; //seems to be 1 if its a berserker ability +/*0064*/ uint32 classes; /*0068*/ uint32 max_level; /*0072*/ uint32 last_id; /*0076*/ uint32 next_id; From 4b64e8c39c4abdbe75e5520085fb5768e37d9338 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Fri, 26 Jun 2015 02:04:33 -0400 Subject: [PATCH 41/48] Ignore skills out of range for bonuses --- zone/bonuses.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index 7ff8e7fc7..1e719dceb 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -691,6 +691,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) switch (effect) { // Note: AA effects that use accuracy are skill limited, while spell effect is not. case SE_Accuracy: + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if ((base2 == ALL_SKILLS) && (newbon->Accuracy[HIGHEST_SKILL + 1] < base1)) newbon->Accuracy[HIGHEST_SKILL + 1] = base1; else if (newbon->Accuracy[base2] < base1) @@ -1031,6 +1034,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) break; case SE_HitChance: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if (base2 == ALL_SKILLS) newbon->HitChanceEffect[HIGHEST_SKILL + 1] += base1; else @@ -1082,6 +1088,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) break; case SE_CriticalHitChance: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if (base2 == ALL_SKILLS) newbon->CriticalHitChance[HIGHEST_SKILL + 1] += base1; else @@ -1089,6 +1098,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) } break; case SE_CriticalDamageMob: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; // base1 = effect value, base2 = skill restrictions(-1 for all) if (base2 == ALL_SKILLS) newbon->CritDmgMob[HIGHEST_SKILL + 1] += base1; @@ -1116,6 +1128,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) } case SE_SkillDamageAmount: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if (base2 == ALL_SKILLS) newbon->SkillDamageAmount[HIGHEST_SKILL + 1] += base1; else @@ -1132,6 +1147,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) } case SE_DamageModifier: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if (base2 == ALL_SKILLS) newbon->DamageModifier[HIGHEST_SKILL + 1] += base1; else @@ -1140,6 +1158,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) } case SE_DamageModifier2: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if (base2 == ALL_SKILLS) newbon->DamageModifier2[HIGHEST_SKILL + 1] += base1; else @@ -1347,6 +1368,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) break; case SE_LimitToSkill: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if (base1 <= HIGHEST_SKILL) newbon->LimitToSkill[base1] = true; break; @@ -1899,6 +1923,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_CriticalHitChance: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if (AdditiveWornBonus) { if(base2 == ALL_SKILLS) new_bonus->CriticalHitChance[HIGHEST_SKILL+1] += effect_value; @@ -2102,6 +2129,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_HitChance: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if (AdditiveWornBonus){ if(base2 == ALL_SKILLS) @@ -2136,6 +2166,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_DamageModifier: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if(base2 == ALL_SKILLS) new_bonus->DamageModifier[HIGHEST_SKILL+1] += effect_value; else @@ -2145,6 +2178,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_DamageModifier2: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if(base2 == ALL_SKILLS) new_bonus->DamageModifier2[HIGHEST_SKILL+1] += effect_value; else @@ -2154,6 +2190,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_MinDamageModifier: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if(base2 == ALL_SKILLS) new_bonus->MinDamageModifier[HIGHEST_SKILL+1] += effect_value; else @@ -2227,6 +2266,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_Accuracy: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if ((effect_value < 0) && (new_bonus->Accuracy[HIGHEST_SKILL+1] > effect_value)) new_bonus->Accuracy[HIGHEST_SKILL+1] = effect_value; @@ -2250,6 +2292,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_SkillDamageTaken: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; //When using npc_spells_effects if MAX value set, use stackable quest based modifier. if (IsAISpellEffect && max){ if(base2 == ALL_SKILLS) @@ -2368,6 +2413,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_CriticalDamageMob: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if(base2 == ALL_SKILLS) new_bonus->CritDmgMob[HIGHEST_SKILL+1] += effect_value; else @@ -2384,6 +2432,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_SkillDamageAmount: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if(base2 == ALL_SKILLS) new_bonus->SkillDamageAmount[HIGHEST_SKILL+1] += effect_value; else @@ -2489,6 +2540,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_SkillDamageAmount2: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if(base2 == ALL_SKILLS) new_bonus->SkillDamageAmount2[HIGHEST_SKILL+1] += effect_value; else @@ -3023,6 +3077,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne break; case SE_LimitToSkill:{ + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if (effect_value <= HIGHEST_SKILL){ new_bonus->LimitToSkill[effect_value] = true; } From cee7e401dd87c50cac3272c6f722a3aa10c7217c Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Fri, 26 Jun 2015 02:19:13 -0400 Subject: [PATCH 42/48] Fix issue with initial cast of level override proc buffs --- zone/spell_effects.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 9134e8ff7..4c1f1fa45 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -1770,9 +1770,9 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove #endif if(spells[spell_id].base2[i] == 0) - AddProcToWeapon(procid, false, 100, spell_id, level_override); + AddProcToWeapon(procid, false, 100, spell_id, caster_level); else - AddProcToWeapon(procid, false, spells[spell_id].base2[i]+100, spell_id, level_override); + AddProcToWeapon(procid, false, spells[spell_id].base2[i]+100, spell_id, caster_level); break; } From 337ce2d74b6b911213e963679f838e3ba92845c0 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Fri, 26 Jun 2015 18:00:15 -0400 Subject: [PATCH 43/48] Fix crash for Bard Furious Refrain This does a frenzy, which bards don't have. Live this AA is broken. --- zone/attack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/attack.cpp b/zone/attack.cpp index 202ad77b6..f6690c58f 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -4459,7 +4459,7 @@ void Mob::DoRiposte(Mob *defender) if (defender->GetClass() == MONK) defender->MonkSpecialAttack(this, defender->aabonuses.GiveDoubleRiposte[2]); - else if (defender->IsClient()) + else if (defender->IsClient() && defender->CastToClient()->HasSkill((SkillUseTypes)defender->aabonuses.GiveDoubleRiposte[2])) defender->CastToClient()->DoClassAttacks(this, defender->aabonuses.GiveDoubleRiposte[2], true); } } From 5a6685d12951acde8d6bc4a607fdf60992e6f580 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sat, 27 Jun 2015 18:39:13 -0400 Subject: [PATCH 44/48] Fix issue with AA cast mana consumption AAs will now cast from slot "0xFF" instead of the itemslot to avoid special behavior of items. Mana reduction also moved down to the same place consumption takes place like live. --- zone/aa.cpp | 6 +++--- zone/common.h | 1 + zone/spells.cpp | 27 +++++++++++++++------------ 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 07adc2805..db765e813 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1183,12 +1183,12 @@ void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) { // Bards can cast instant cast AAs while they are casting another song if(spells[rank->spell].cast_time == 0 && GetClass() == BARD && IsBardSong(casting_spell_id)) { - if(!SpellFinished(rank->spell, entity_list.GetMob(target_id), 10, -1, -1, spells[rank->spell].ResistDiff, false)) { + if(!SpellFinished(rank->spell, entity_list.GetMob(target_id), ALTERNATE_ABILITY_SPELL_SLOT, spells[rank->spell].mana, -1, spells[rank->spell].ResistDiff, false)) { return; } ExpendAlternateAdvancementCharge(ability->id); } else { - if(!CastSpell(rank->spell, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, rank->spell_type + pTimerAAStart, cooldown, nullptr, rank->id)) { + if(!CastSpell(rank->spell, target_id, ALTERNATE_ABILITY_SPELL_SLOT, -1, -1, 0, -1, rank->spell_type + pTimerAAStart, cooldown, nullptr, rank->id)) { return; } } @@ -1554,7 +1554,7 @@ void Zone::LoadAlternateAdvancement() { // then set it here too //if prev has an aa we have // then set to whichever is highest - + auto iter = current->prereqs.find(prev_prereq.first); if(iter == current->prereqs.end()) { //not found diff --git a/zone/common.h b/zone/common.h index e9521cb94..0b875456b 100644 --- a/zone/common.h +++ b/zone/common.h @@ -22,6 +22,7 @@ #define TARGET_RING_SPELL_SLOT 12 #define DISCIPLINE_SPELL_SLOT 10 #define ABILITY_SPELL_SLOT 9 +#define ALTERNATE_ABILITY_SPELL_SLOT 0xFF //LOS Parameters: #define HEAD_POSITION 0.9f //ratio of GetSize() where NPCs see from diff --git a/zone/spells.cpp b/zone/spells.cpp index 30e3b02d9..0a4dc29b3 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -409,24 +409,19 @@ bool Mob::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, // ok now we know the target casting_spell_targetid = target_id; - if (mana_cost == -1) { + // We don't get actual mana cost here, that's done when we consume the mana + if (mana_cost == -1) mana_cost = spell.mana; - mana_cost = GetActSpellCost(spell_id, mana_cost); - } - - if(HasMGB() && spells[spell_id].can_mgb) - mana_cost *= 2; // mana is checked for clients on the frontend. we need to recheck it for NPCs though - // fix: items dont need mana :-/ // If you're at full mana, let it cast even if you dont have enough mana // we calculated this above, now enforce it - if(mana_cost > 0 && slot != 10) + if(mana_cost > 0 && slot != USE_ITEM_SPELL_SLOT) { int my_curmana = GetMana(); int my_maxmana = GetMaxMana(); - if(my_curmana < spell.mana) // not enough mana + if(my_curmana < mana_cost) // not enough mana { //this is a special case for NPCs with no mana... if(IsNPC() && my_curmana == my_maxmana) @@ -2157,11 +2152,11 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 } #endif //BOTS + // We hold off turning MBG off so we can still use it to calc the mana cost if(spells[spell_id].can_mgb && HasMGB()) { SpellOnTarget(spell_id, this); entity_list.MassGroupBuff(this, this, spell_id, true); - SetMGB(false); } else { @@ -2262,13 +2257,21 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 } // if this was a spell slot or an ability use up the mana for it - // CastSpell already reduced the cost for it if we're a client with focus if(slot != USE_ITEM_SPELL_SLOT && slot != POTION_BELT_SPELL_SLOT && slot != TARGET_RING_SPELL_SLOT && mana_used > 0) { + mana_used = GetActSpellCost(spell_id, mana_used); + if (HasMGB() && spells[spell_id].can_mgb) { + mana_used *= 2; + SetMGB(false); + } + // clamp if we some how got focused above our current mana + if (GetMana() < mana_used) + mana_used = GetMana(); Log.Out(Logs::Detail, Logs::Spells, "Spell %d: consuming %d mana", spell_id, mana_used); - if (!DoHPToManaCovert(mana_used)) + if (!DoHPToManaCovert(mana_used)) { SetMana(GetMana() - mana_used); TryTriggerOnValueAmount(false, true); + } } //set our reuse timer on long ass reuse_time spells... From 009918cbd10fdfe3e4ce9a7ea587e44b83e31d90 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sat, 27 Jun 2015 22:43:00 -0400 Subject: [PATCH 45/48] Fix songcap implementation --- zone/client_mods.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/zone/client_mods.cpp b/zone/client_mods.cpp index 76ce5195c..13a8130bd 100644 --- a/zone/client_mods.cpp +++ b/zone/client_mods.cpp @@ -1979,10 +1979,17 @@ uint32 Mob::GetInstrumentMod(uint16 spell_id) const uint32 effectmod = 10; int effectmodcap = 0; - if (RuleB(Character, UseSpellFileSongCap)) + bool nocap = false; + if (RuleB(Character, UseSpellFileSongCap)) { effectmodcap = spells[spell_id].songcap / 10; - else + // this looks a bit weird, but easiest way I could think to keep both systems working + if (effectmodcap == 0) + nocap = true; + else + effectmodcap += 10; + } else { effectmodcap = RuleI(Character, BaseInstrumentSoftCap); + } // this should never use spell modifiers... // if a spell grants better modifers, they are copied into the item mods // because the spells are supposed to act just like having the intrument. @@ -2056,7 +2063,7 @@ uint32 Mob::GetInstrumentMod(uint16 spell_id) const effectmodcap += aabonuses.songModCap + spellbonuses.songModCap + itembonuses.songModCap; if (effectmod < 10) effectmod = 10; - if (effectmodcap && effectmod > effectmodcap) // if the cap is calculated to be 0 using new rules, no cap. + if (!nocap && effectmod > effectmodcap) // if the cap is calculated to be 0 using new rules, no cap. effectmod = effectmodcap; Log.Out(Logs::Detail, Logs::Spells, "%s::GetInstrumentMod() spell=%d mod=%d modcap=%d\n", GetName(), spell_id, effectmod, effectmodcap); From 35991b68a0c021d21b665ff63ecfeecb2838358f Mon Sep 17 00:00:00 2001 From: KimLS Date: Thu, 2 Jul 2015 19:36:38 -0700 Subject: [PATCH 46/48] First sql, need to merge from master first before i finish. --- .../sql/git/required/2015_07_02_aa_rework.sql | 20659 ++++++++++++++++ 1 file changed, 20659 insertions(+) create mode 100644 utils/sql/git/required/2015_07_02_aa_rework.sql diff --git a/utils/sql/git/required/2015_07_02_aa_rework.sql b/utils/sql/git/required/2015_07_02_aa_rework.sql new file mode 100644 index 000000000..41a67f7c0 --- /dev/null +++ b/utils/sql/git/required/2015_07_02_aa_rework.sql @@ -0,0 +1,20659 @@ +DROP TABLE IF EXISTS `aa_ability`; +CREATE TABLE IF NOT EXISTS `aa_ability` ( + `id` int(10) unsigned NOT NULL, + `name` text NOT NULL, + `category` int(10) NOT NULL DEFAULT '-1', + `classes` int(10) NOT NULL DEFAULT '131070', + `races` int(10) NOT NULL DEFAULT '65535', + `drakkin_heritage` int(10) NOT NULL DEFAULT '127', + `deities` int(10) NOT NULL DEFAULT '131071', + `status` int(10) NOT NULL DEFAULT '0', + `type` int(10) NOT NULL DEFAULT '0', + `charges` int(11) NOT NULL DEFAULT '0', + `grant_only` tinyint(4) NOT NULL DEFAULT '0', + `first_rank_id` int(10) NOT NULL DEFAULT '-1', + `enabled` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO `aa_ability` (`id`, `name`, `category`, `classes`, `races`, `drakkin_heritage`, `deities`, `status`, `type`, `charges`, `grant_only`, `first_rank_id`, `enabled`) VALUES + (0, 'Unknown AA -1', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 49999, 1), + (1, 'Innate Strength', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 2, 1), + (2, 'Innate Stamina', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 7, 1), + (3, 'Innate Agility', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 12, 1), + (4, 'Innate Dexterity', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 17, 1), + (5, 'Innate Intelligence', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 22, 1), + (6, 'Innate Wisdom', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 27, 1), + (7, 'Innate Charisma', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 32, 1), + (8, 'Innate Fire Protection', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 37, 1), + (9, 'Innate Cold Protection', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 42, 1), + (10, 'Innate Magic Protection', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 47, 1), + (11, 'Innate Poison Protection', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 52, 1), + (12, 'Innate Disease Protection', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 57, 1), + (13, 'Innate Run Speed', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 62, 1), + (15, 'Innate Metabolism', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 68, 1), + (16, 'Innate Lung Capacity', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 71, 1), + (17, 'First Aid', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 74, 1), + (18, 'Healing Adept', -1, 16942, 65535, 127, 131071, 0, 2, 0, 0, 77, 1), + (19, 'Healing Gift', -1, 16942, 65535, 127, 131071, 0, 2, 0, 0, 80, 1), + (20, 'Spell Casting Mastery', -1, 15906, 65535, 127, 131071, 0, 2, 0, 0, 83, 1), + (21, 'Spell Casting Reinforcement', -1, 25150, 65535, 127, 131071, 0, 2, 0, 0, 86, 1), + (23, 'Spell Casting Fury', -1, 32446, 65535, 127, 131071, 0, 2, 0, 0, 92, 1), + (25, 'Spell Casting Subtlety', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 98, 1), + (26, 'Spell Casting Expertise', -1, 15504, 65535, 127, 131071, 0, 2, 0, 0, 101, 1), + (27, 'Spell Casting Deftness', -1, 7184, 65535, 127, 131071, 0, 2, 0, 0, 104, 1), + (28, 'Natural Durability', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 107, 1), + (29, 'Natural Healing', -1, 49629, 65535, 127, 131071, 0, 2, 0, 0, 110, 1), + (30, 'Combat Fury', -1, 16596, 65535, 127, 131071, 0, 2, 0, 0, 113, 1), + (31, 'Fear Resistance', -1, 49629, 65535, 127, 131071, 0, 2, 0, 0, 116, 1), + (32, 'Finishing Blow', -1, 49629, 65535, 127, 131071, 0, 2, 0, 0, 119, 1), + (33, 'Combat Stability', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 122, 1), + (34, 'Combat Agility', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 125, 1), + (35, 'Mass Group Buff', -1, 30254, 65535, 127, 131071, 0, 3, 0, 0, 128, 1), + (36, 'Divine Resurrection', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 129, 1), + (37, 'Innate Invis to Undead', -1, 1026, 65535, 127, 131071, 0, 3, 0, 0, 130, 1), + (38, 'Celestial Regeneration', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 131, 1), + (39, 'Bestow Divine Aura', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 132, 1), + (41, 'Purify Soul', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 136, 1), + (42, 'Quick Evacuation', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 137, 1), + (43, 'Exodus', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 140, 1), + (44, 'Quick Damage', -1, 6176, 65535, 127, 131071, 0, 3, 0, 0, 141, 1), + (45, 'Enhanced Root', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 144, 1), + (46, 'Dire Charm', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 145, 1), + (47, 'Cannibalization', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 146, 1), + (48, 'Quick Buff', -1, 25134, 65535, 127, 131071, 0, 2, 0, 0, 147, 1), + (49, 'Alchemy Mastery', 6, 512, 65535, 127, 131071, 0, 1, 0, 0, 150, 1), + (50, 'Rabid Bear', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 153, 1), + (52, 'Improved Familiar', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 155, 1), + (53, 'Nexus Gate', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 156, 1), + (55, 'Permanent Illusion', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 158, 1), + (56, 'Jewel Craft Mastery', 6, 8192, 65535, 127, 131071, 0, 1, 0, 0, 159, 1), + (57, 'Gather Mana', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 162, 1), + (58, 'Mend Companion', -1, 21504, 65535, 127, 131071, 0, 3, 0, 0, 163, 1), + (60, 'Frenzied Burnout', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 167, 1), + (61, 'Elemental Form: Fire', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 168, 1), + (62, 'Elemental Form: Water', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 171, 1), + (63, 'Elemental Form: Earth', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 174, 1), + (64, 'Elemental Form: Air', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 177, 1), + (67, 'Elemental Pact', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 182, 1), + (68, 'Life Burn', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 183, 1), + (69, 'Dead Mesmerization', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 184, 1), + (70, 'Fear Storm', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 185, 1), + (71, 'Flesh to Bone', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 186, 1), + (72, 'Call to Corpse', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 187, 1), + (73, 'Divine Stun', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 188, 1), + (75, 'Slay Undead', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 190, 1), + (76, 'Act of Valor', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 193, 1), + (77, 'Holy Steed', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 194, 1), + (78, 'Fearless', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 195, 1), + (79, '2 Hand Bash', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 196, 1), + (80, 'Innate Camouflage', -1, 40, 65535, 127, 131071, 0, 3, 0, 0, 197, 1), + (81, 'Ambidexterity', -1, 16841, 65535, 127, 131071, 0, 3, 0, 0, 198, 1), + (82, 'Archery Mastery', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 199, 1), + (84, 'Endless Quiver', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 205, 1), + (85, 'Unholy Steed', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 206, 1), + (87, 'Leech Touch', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 208, 1), + (89, 'Soul Abrasion', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 210, 1), + (90, 'Instrument Mastery', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 213, 1), + (94, 'Jam Fest', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 225, 1), + (97, 'Critical Mend', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 230, 1), + (98, 'Purify Body', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 233, 1), + (100, 'Rapid Feign', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 237, 1), + (101, 'Return Kick', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 240, 1), + (102, 'Escape', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 243, 1), + (103, 'Poison Mastery', 6, 256, 65535, 127, 131071, 0, 1, 0, 0, 244, 1), + (104, 'Double Riposte', -1, 49501, 65535, 127, 131071, 0, 2, 0, 0, 247, 1), + (107, 'Purge Poison', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 254, 1), + (108, 'Flurry', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 255, 1), + (109, 'Rampage', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 258, 1), + (110, 'Area Taunt', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 259, 1), + (111, 'War Cry', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 260, 1), + (112, 'Bandage Wound', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 263, 1), + (114, 'Spell Casting Fury Mastery', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 267, 1), + (116, 'Dragon Punch', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 273, 1), + (117, 'Strong Root', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 274, 1), + (118, 'Singing Mastery', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 275, 1), + (119, 'Body and Mind Rejuvenation', -1, 16540, 65535, 127, 131071, 0, 3, 0, 0, 278, 1), + (120, 'Physical Enhancement', -1, 49629, 65535, 127, 131071, 0, 3, 0, 0, 279, 1), + (121, 'Adv. Trap Negotiation', -1, 384, 65535, 127, 131071, 0, 3, 0, 0, 280, 1), + (122, 'Acrobatics', -1, 448, 65535, 127, 131071, 0, 3, 0, 0, 283, 1), + (123, 'Scribble Notes', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 286, 1), + (124, 'Chaotic Stab', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 287, 1), + (125, 'Pet Discipline', -1, 22032, 65535, 127, 131071, 0, 3, 0, 0, 288, 1), + (126, 'Hobble of Spirits', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 289, 1), + (127, 'Frenzy of Spirit', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 290, 1), + (128, 'Paragon of Spirit', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 291, 1), + (129, 'Chains of Purity', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10348, 1), + (130, 'Resplendent Glory', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 8300, 1), + (131, 'Rage of Rallos Zek', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 8303, 1), + (132, 'Enhanced Area Taunt', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 8312, 1), + (133, 'Decapitation', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 14200, 1), + (134, 'Hastened Berserking Disciplines', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 14203, 1), + (135, 'Quiet Miracle', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 14206, 1), + (136, 'Repel the Wicked', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 14207, 1), + (137, 'Beacon of Life', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 14208, 1), + (138, 'Blessed Chains', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 14209, 1), + (139, 'Hastened Focused Celestial Regeneration', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 14213, 1), + (140, 'Quickened Spirit Calling', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 14225, 1), + (141, 'New Tanaan Crafting Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 412, 1), + (142, 'Planar Power', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 418, 1), + (143, 'Planar Durability', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 423, 1), + (144, 'Innate Enlightenment', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 426, 1), + (146, 'Unknown AA 8001', 9, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8000, 0), + (147, 'Spiritual Rebuke', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 14231, 1), + (148, 'Pathosis', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 14232, 1), + (149, 'Preincarnation', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 14233, 1), + (150, 'Mastery of the Past', -1, 15504, 65535, 127, 131071, 0, 2, 0, 0, 446, 1), + (151, 'Spiritual Blessing', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 14234, 1), + (152, 'Communion of the Cheetah', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 14237, 1), + (153, 'Radiant Cure', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 459, 1), + (154, 'Hastened Divinity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 462, 1), + (156, 'Hastened Purification of the Soul', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 468, 1), + (157, 'Hastened Gathering', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 471, 1), + (158, 'Hastened Rabidity', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 474, 1), + (159, 'Hastened Exodus', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 477, 1), + (160, 'Hastened Root', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 480, 1), + (161, 'Hastened Mending', -1, 21504, 65535, 127, 131071, 0, 3, 0, 0, 483, 1), + (163, 'Hastened Instigation', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 489, 1), + (164, 'Hastened Rampage', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 492, 1), + (165, 'Hastened Purification of the Body', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 495, 1), + (166, 'Hasty Exit', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 498, 1), + (167, 'Hastened Purification', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 501, 1), + (168, 'Hastened Nature\'s Fury', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14241, 1), + (169, 'Divine Arbitration', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 507, 1), + (170, 'Wrath of the Wild', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 510, 1), + (171, 'Virulent Paralysis', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 513, 1), + (172, 'Harvest of Druzzil', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 516, 1), + (173, 'Eldritch Rune', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 517, 1), + (174, 'Servant of Ro', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 520, 1), + (175, 'Wake the Dead', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 523, 1), + (176, 'Suspended Minion', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 526, 1), + (177, 'Spirit Call', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 528, 1), + (178, 'Wrath of the Forest Walker', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14244, 1), + (179, 'Gift of Sylvan Spirits', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14249, 1), + (180, 'Hand of Piety', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 534, 1), + (181, 'Mithaniel\'s Binding', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 537, 1), + (182, 'Summon Personal Tribute Master', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5006, 1), + (183, 'Extended Vinelash Cascade', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14254, 1), + (184, 'Guardian of the Forest', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 545, 1), + (185, 'Spirit of the Wood', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 548, 1), + (186, 'Bestial Frenzy', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 551, 1), + (187, 'Harmonious Attack', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 556, 1), + (188, 'Knight\'s Advantage', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 561, 1), + (189, 'Ferocity', -1, 33097, 65535, 127, 131071, 0, 2, 0, 0, 564, 1), + (190, 'Viscid Roots', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 567, 1), + (193, 'Feigned Minion', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 574, 1), + (194, 'Unfailing Divinity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 577, 1), + (195, 'Animation Empathy', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 580, 1), + (196, 'Rush to Judgment', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 583, 1), + (197, 'Living Shield', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 586, 1), + (198, 'Consumption of the Soul', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 589, 1), + (199, 'Boastful Bellow', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 592, 1), + (200, 'Fervent Blessing', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 593, 1), + (201, 'Touch of the Wicked', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 596, 1), + (202, 'Punishing Blade', -1, 32841, 65535, 127, 131071, 0, 2, 0, 0, 599, 1), + (203, 'Speed of the Knight', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 602, 1), + (204, 'Shroud of Stealth', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 605, 1), + (205, 'Nimble Evasion', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 606, 1), + (206, 'Technique of Master Wu', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 611, 1), + (207, 'Host of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 616, 1), + (208, 'Call of Xuzl', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 619, 1), + (209, 'Hastened Stealth', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 622, 1), + (210, 'Ingenuity', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 625, 1), + (211, 'Fleet of Foot', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 628, 1), + (212, 'Fading Memories', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 630, 1), + (213, 'Tactical Mastery', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 631, 1), + (214, 'Theft of Life', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 634, 1), + (215, 'Fury of Magic', -1, 13858, 65535, 127, 131071, 0, 2, 0, 0, 637, 1), + (216, 'Extended Spirit of the Bear', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14259, 1), + (217, 'Project Illusion', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 643, 1), + (218, 'Headshot', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 644, 1), + (219, 'Entrap', -1, 40, 65535, 127, 131071, 0, 3, 0, 0, 645, 1), + (220, 'Sonic Displacement', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 13528, 1), + (221, 'Total Domination', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 649, 1), + (222, 'Stalwart Endurance', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 652, 1), + (223, 'Quick Summoning', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 655, 1), + (224, 'Mental Clarity', -1, 32446, 65535, 127, 131071, 0, 2, 0, 0, 658, 1), + (225, 'Innate Regeneration', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 661, 1), + (227, 'Extended Notes', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 665, 1), + (228, 'Hastened Warder\'s Gift', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 13463, 1), + (229, 'Improved Reclaim Energy', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 671, 1), + (230, 'Hastened Possum', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 13449, 1), + (231, 'Shauri\'s Sonorious Clouding', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 13527, 1), + (232, 'Veil of the Underbrush', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14262, 1), + (233, 'Packrat', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 678, 1), + (234, 'Heightened Endurance ', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 683, 1), + (235, 'Weapon Affinity', -1, 49629, 65535, 127, 131071, 0, 2, 0, 0, 686, 1), + (236, 'Secondary Forte', -1, 15906, 65535, 127, 131071, 0, 2, 0, 0, 691, 1), + (237, 'Persistent Casting', -1, 32446, 65535, 127, 131071, 0, 2, 0, 0, 692, 1), + (238, 'Tune of Pursuance', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 695, 1), + (239, 'Hastened Companion\'s Sacrifice', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 13474, 1), + (240, 'Cheetah\'s Pounce', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 13483, 1), + (241, 'Bloodlust', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 13484, 1), + (242, 'Primal Fury', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 13485, 1), + (244, 'Lure of the Siren\'s Song', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 13529, 1), + (245, 'Bestial Alignment', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 718, 1), + (246, 'Hidden Communion of the Cheetah', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14265, 1), + (247, 'Feral Swipe', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 723, 1), + (248, 'Warder\'s Fury', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 724, 1), + (249, 'Warder\'s Alacrity', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 729, 1), + (250, 'Pet Affinity', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 734, 1), + (251, 'Mastery of the Past', -1, 16942, 65535, 127, 131071, 0, 2, 0, 0, 735, 1), + (252, 'Spell Casting Subtlety', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 738, 1), + (254, 'Divine Avatar', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 746, 1), + (255, 'Exquisite Benediction', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 749, 1), + (256, 'Hastened Curing', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 754, 1), + (257, 'Nature\'s Boon', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 757, 1), + (258, 'Advanced Tracking', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 762, 1), + (259, 'Critical Affliction', -1, 18104, 65535, 127, 131071, 0, 2, 0, 0, 767, 1), + (260, 'Glacial Arrow', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 13549, 1), + (261, 'Doppelganger', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 773, 1), + (262, 'Enhanced Forgetfulness', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 776, 1), + (263, 'Mesmerization Mastery', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 781, 1), + (264, 'Quick Mass Group Buff', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 782, 1), + (265, 'Shared Health', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 785, 1), + (266, 'Elemental Fury', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 790, 1), + (267, 'Elemental Alacrity ', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 795, 1), + (268, 'Elemental Agility', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 800, 1), + (269, 'Elemental Durability', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 803, 1), + (270, 'Sinister Strikes', -1, 16841, 65535, 127, 131071, 0, 3, 0, 0, 806, 1), + (271, 'Strikethrough', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 807, 1), + (272, 'Stonewall', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 810, 1), + (273, 'Rapid Strikes ', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 815, 1), + (274, 'Kick Mastery', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 820, 1), + (275, 'Heightened Awareness', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 823, 1), + (276, 'Destructive Force ', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 828, 1), + (278, 'Death\'s Fury ', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 834, 1), + (279, 'Quickening of Death ', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 839, 1), + (280, 'Group Perfected Invisibility to Undead', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 14281, 1), + (281, 'Triple Backstab', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 846, 1), + (282, 'Hastened Piety', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 849, 1), + (283, 'Immobilizing Bash', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 852, 1), + (284, 'Vicious Smash', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 855, 1), + (285, 'Radiant Cure', -1, 4, 65535, 127, 131071, 0, 2, 0, 0, 860, 1), + (286, 'Purification ', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 863, 1), + (287, 'Precision of the Pathfinder', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 864, 1), + (288, 'Coat of Thistles', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 867, 1), + (289, 'Flaming Arrows', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 872, 1), + (290, 'Frost Arrows', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 875, 1), + (291, 'Perfected Invisibility to Undead', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 14282, 1), + (292, 'Trap Circumvention ', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 881, 1), + (293, 'Quickened Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 14283, 1), + (294, 'Virulent Venom ', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 888, 1), + (295, 'Extended Dreary Deeds', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 14286, 1), + (296, 'Intense Hatred', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 895, 1), + (297, 'Quickened Frenzied Burnout', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 14289, 1), + (299, 'Sturdiness', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 907, 1), + (300, 'Warlord\'s Tenacity ', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 912, 1), + (301, 'Strengthened Strike', -1, 9, 65535, 127, 131071, 0, 3, 0, 0, 915, 1), + (302, 'Extended Shielding', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 918, 1), + (303, 'Ro\'s Flaming Familiar ', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 921, 1), + (304, 'E\'ci\'s Icy Familiar ', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 922, 1), + (305, 'Druzzil\'s Mystical Familiar ', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 923, 1), + (306, 'Unknown AA 15819', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15819, 1), + (307, 'Ward of Destruction ', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 926, 1), + (308, 'Frenzied Devastation', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 931, 1), + (309, 'Combat Fury', -1, 32769, 65535, 127, 131071, 0, 2, 0, 0, 934, 1), + (310, 'Combat Fury', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 937, 1), + (311, 'Combat Fury', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 940, 1), + (312, 'Quickened Host of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 14292, 1), + (313, 'Hastened Companion\'s Relocation', -1, 30224, 65535, 127, 131071, 0, 3, 0, 0, 14295, 1), + (314, 'Veteran\'s Wrath', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 1047, 1), + (315, 'Planar Durability', -1, 32788, 65535, 127, 131071, 0, 3, 0, 0, 952, 1), + (316, 'Innate Enlightenment', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 955, 1), + (317, 'Dire Charm', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 960, 1), + (318, 'Dire Charm', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 961, 1), + (319, 'Touch of the Divine', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 962, 1), + (320, 'Swarm of Decay', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 967, 1), + (321, 'Call of the Ancients', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 970, 1), + (322, 'Innate See Invis', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1388, 1), + (323, 'Virulent Talon', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 14307, 1), + (324, 'Blacksmithing Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 979, 1), + (325, 'Baking Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 982, 1), + (326, 'Brewing Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 985, 1), + (327, 'Fletching Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 988, 1), + (328, 'Pottery Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 991, 1), + (329, 'Tailoring Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 994, 1), + (330, 'Salvage', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 997, 1), + (331, 'Origin', 9, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1000, 1), + (333, 'Discordant Defiance', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1006, 1), + (334, 'Mystical Attuning', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1021, 1), + (335, 'Delay Death', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1026, 1), + (336, 'Earthen Brawn', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8263, 1), + (337, 'Unknown AA 15798', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15798, 1), + (338, 'Veteran\'s Wrath', -1, 16596, 65535, 127, 131071, 0, 2, 0, 0, 1041, 1), + (339, 'Veteran\'s Wrath', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1044, 1), + (340, 'Unknown AA 15833', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 15833, 1), + (341, 'Veteran\'s Wrath', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 1050, 1), + (342, 'Staff Block', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 14301, 1), + (343, 'Hastened Pestilent Paralysis', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14308, 1), + (344, 'Hastened Mercurial Torment', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14311, 1), + (345, 'Unknown AA 15768', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15768, 1), + (346, 'Unknown AA 15771', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 15771, 1), + (347, 'Mnemonic Retention', -1, 32446, 65535, 127, 131071, 0, 2, 0, 0, 1071, 1), + (348, 'Expansive Mind', -1, 32446, 65535, 127, 131071, 0, 2, 0, 0, 1072, 1), + (350, 'Death\'s Malaise', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14321, 1), + (351, 'Dying Grasp', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14322, 1), + (352, 'Arcane Tongues', 6, 15360, 65535, 127, 131071, 0, 2, 0, 0, 1089, 1), + (353, 'Master of Disguise', -1, 384, 65535, 127, 131071, 0, 3, 0, 0, 1092, 1), + (354, 'Slippery Attacks', -1, 16841, 65535, 127, 131071, 0, 2, 0, 0, 1093, 1), + (355, 'Unknown AA 15836', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 15836, 1), + (357, 'Unknown AA 16176', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16176, 1), + (358, 'Fury of Magic', -1, 16540, 65535, 127, 131071, 0, 2, 0, 0, 1107, 1), + (359, 'Dance of Blades', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1110, 1), + (360, 'Bloodthirsty Blade', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 13616, 1), + (361, 'Shield of Notes', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1116, 1), + (362, 'Roar of Thunder', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 1119, 1), + (363, 'Unknown AA 16179', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16179, 1), + (364, 'Persistent Minion', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 1122, 1), + (365, 'A Hole In Space', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 14323, 1), + (366, 'Advanced Pet Discipline', -1, 22032, 65535, 127, 131071, 0, 3, 0, 0, 1129, 1), + (367, 'Throwing Mastery', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1131, 1), + (368, 'Blur of Axes', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1134, 1), + (369, 'Hastened War Cry', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1137, 1), + (370, 'Dead Aim', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1140, 1), + (371, 'Frenzied Defense', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1166, 1), + (372, 'Tireless Sprint', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1146, 1), + (373, 'Desperation', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1149, 1), + (374, 'Untamed Rage', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1150, 1), + (375, 'Echoing Cries', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1155, 1), + (376, 'Distant Strike', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14372, 1), + (377, 'Earthen Stability', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8268, 1), + (378, 'Earthen Alacrity', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8273, 1), + (379, 'Earthen Artistry', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8278, 1), + (380, 'Earthen Sagacity', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8283, 1), + (381, 'Earthen Brilliance', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8288, 1), + (382, 'Earthen Allure', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8293, 1), + (383, 'Extended Spirit of the Wood', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12646, 1), + (384, 'Spirit of the Bear', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12651, 1), + (385, 'Twinheal', -1, 16942, 65535, 127, 131071, 0, 2, 0, 0, 12652, 1), + (386, 'Nature\'s Fury', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12661, 1), + (387, 'Blood Pact', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1178, 1), + (388, 'Shielding Resistance', -1, 16841, 65535, 127, 131071, 0, 2, 0, 0, 1181, 1), + (389, 'Healing Boon', -1, 518, 65535, 127, 131071, 0, 2, 0, 0, 1186, 1), + (390, 'Elemental Union', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 13695, 1), + (391, 'Celestial Hammer', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 1192, 1), + (392, 'Divine Retribution', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 1195, 1), + (393, 'Nature\'s Blessing', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12655, 1), + (394, 'Extended Convergence of Spirit', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12645, 1), + (395, 'Hastened Storm Strike', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12664, 1), + (396, 'Sanctuary', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 1209, 1), + (397, 'Destructive Fury', -1, 2048, 65535, 127, 131071, 0, 2, 0, 0, 1210, 1), + (398, 'Destructive Fury', -1, 13858, 65535, 127, 131071, 0, 2, 0, 0, 1213, 1), + (399, 'Unknown AA 16180', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16180, 1), + (400, 'Hastened Improved Twincast', -1, 14370, 65535, 127, 131071, 0, 3, 0, 0, 14331, 1), + (401, 'Extended Heel of Kanji', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 12688, 1), + (402, 'Extended Scaledfist', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 12691, 1), + (403, 'Paralytic Spores', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 14264, 1), + (404, 'Call of the Wild', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 1228, 1), + (405, 'Secondary Recall', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 1229, 1), + (406, 'Nature\'s Bounty', -1, 40, 65535, 127, 131071, 0, 3, 0, 0, 1230, 1), + (407, 'Extended Speed Focus', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 7884, 1), + (408, 'Extended Crystalpalm', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 7885, 1), + (409, 'Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 1233, 1), + (410, 'Fists of Steel', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 12706, 1), + (411, 'Extended Deftdance', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12709, 1), + (412, 'Color Shock', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 1239, 1), + (413, 'Mind Over Matter', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 1242, 1), + (414, 'Soothing Words', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 1245, 1), + (415, 'Hastened Deftdance', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12710, 1), + (416, 'Hastened Lyre Leap', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12713, 1), + (417, 'Hastened Quick Time', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12716, 1), + (418, 'Replenish Companion', -1, 21504, 65535, 127, 131071, 0, 3, 0, 0, 1126, 1), + (419, 'Extended Quick Time', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12719, 1), + (420, 'Imitate Death', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1255, 1), + (424, 'Extended Fierce Eye', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12720, 1), + (425, 'Hastened Fierce Eye', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12721, 1), + (426, 'Unknown AA 15904', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 15904, 1), + (427, 'Resounding Dirge', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12737, 1), + (428, 'Death Peace', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 1272, 1), + (429, 'Unknown AA 15908', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15908, 1), + (430, 'Mercurial Torment', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 12766, 1), + (431, 'Pestilent Paralysis', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 12770, 1), + (432, 'Hastened Divine Companion Aura', -1, 30224, 65535, 127, 131071, 0, 3, 0, 0, 12773, 1), + (433, 'Embalmer\'s Carapace', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 12778, 1), + (434, 'Steadfast Will', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 1284, 1), + (435, 'Shield Block', -1, 21, 65535, 127, 131071, 0, 2, 0, 0, 1287, 1), + (436, 'Hastened Encroaching Darkness', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 12779, 1), + (437, 'Tracking Mastery', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 1296, 1), + (438, 'Expanding Darkness', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 12782, 1), + (439, 'Precision', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1304, 1), + (440, 'Nerves of Steel', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1307, 1), + (441, 'Aegis of Kildrukaun', -1, 5120, 65535, 127, 131071, 0, 3, 0, 0, 12785, 1), + (442, 'Touch of the Cursed', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 1313, 1), + (443, 'Bestial Bloodrage', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12804, 1), + (444, 'Companion\'s Sacrifice', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12807, 1), + (445, 'Shield Block', -1, 16384, 65535, 127, 131071, 0, 2, 0, 0, 12813, 1), + (446, 'Spiritual Channeling', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 1323, 1), + (447, 'Ancestral Aid', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 1327, 1), + (448, 'Extended Feralgia', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12816, 1), + (450, 'Hastened Protective Spirit', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12819, 1), + (451, 'Mind Crash', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1334, 1), + (452, 'Prolonged Destruction', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1337, 1), + (453, 'Summon Permutation Peddler', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 9032, 1), + (454, 'Hastened Empathic Fury', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12822, 1), + (455, 'Convergence of Spirits', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 13556, 1), + (456, 'Teleport Bind', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1343, 1), + (457, 'Quickened Paragon of Spirit', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12831, 1), + (458, 'Warder\'s Gift', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12837, 1), + (459, 'Gelid Rending', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12846, 1), + (460, 'Quickened Nature\'s Salve', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12849, 1), + (462, 'Auspice of the Hunter', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 1345, 1), + (463, 'Divine Guardian', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 13385, 1), + (464, 'Divine Peace', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 13388, 1), + (465, 'Savage Spirit', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1348, 1), + (466, 'Trials of Mata Muram', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1011, 1), + (467, 'Press the Attack', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 1351, 1), + (468, 'Crippling Strike', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1352, 1), + (469, 'Stunning Kick', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1355, 1), + (470, 'Eye Gouge', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1358, 1), + (471, 'Gift of the Dark Reign', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1361, 1), + (472, 'Tenacity of the Dark Reign', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1362, 1), + (473, 'Embrace of the Dark Reign', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1363, 1), + (474, 'Power of the Dark Reign', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1364, 1), + (475, 'Fervor of the Dark Reign', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1365, 1), + (476, 'Gift of the Keepers', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1366, 1), + (477, 'Valor of the Keepers', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1367, 1), + (478, 'Embrace of the Keepers', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1368, 1), + (479, 'Power of the Keepers', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1369, 1), + (480, 'Sanctity of the Keepers', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1370, 1), + (481, 'Lesson of the Devoted', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1371, 1), + (482, 'Infusion of the Faithful', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1372, 1), + (483, 'Chaotic Jester', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1373, 1), + (484, 'Expedient Recovery', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1374, 1), + (485, 'Steadfast Servant', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1375, 1), + (486, 'Staunch Recovery', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1376, 1), + (487, 'Intensity of the Resolute', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1377, 1), + (488, 'Curse of Blood', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1378, 1), + (489, 'Yaulp', -1, 6, 65535, 127, 131071, 0, 3, 0, 0, 13389, 1), + (490, 'Abscond', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12864, 1), + (491, 'Atol\'s Unresistable Shackles', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12865, 1), + (492, 'Dimensional Shield', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 12866, 1), + (493, 'Improved Sustained Destruction', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12867, 1), + (494, 'Silent Casting', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 1409, 1), + (495, 'Gift of Mana', -1, 15906, 65535, 127, 131071, 0, 2, 0, 0, 1435, 1), + (496, 'Field Dressing', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 1611, 1), + (497, 'Bandage Wounds', -1, 32766, 65535, 127, 131071, 0, 1, 0, 0, 1420, 1), + (498, 'Enhanced Aggression', -1, 49629, 65535, 127, 131071, 0, 2, 0, 0, 1592, 1), + (499, 'Cascading Rage', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1425, 1), + (500, 'Silent Casting', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 1404, 1), + (501, 'E\'ci\'s Icy Blessing', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12886, 1), + (503, 'Hastened Thunder', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 1471, 1), + (504, 'Conservation', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1453, 1), + (505, 'Cry of Battle', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1458, 1), + (506, 'Ward of Purity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 1459, 1), + (507, 'Ro\'s Fiery Blessing', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12887, 1), + (508, 'Druzzil\'s Mystical Blessing', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12888, 1), + (509, 'Kerafyrm\'s Favor', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12889, 1), + (510, 'Kerafyrm\'s Prismatic Familiar', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12892, 1), + (511, 'Throne of Heroes', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 4665, 1), + (512, 'Translocational Anchor', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1630, 1), + (513, 'Hastened Phantasmal Opponent', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12894, 1), + (514, 'Pyromancy', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1478, 1), + (515, 'Improved Twincast', -1, 14370, 65535, 127, 131071, 0, 3, 0, 0, 12893, 1), + (516, 'Abundant Healing', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 1486, 1), + (517, 'Hastened First Spire of Enchantment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12902, 1), + (518, 'Shared Camouflage', -1, 40, 65535, 127, 131071, 0, 3, 0, 0, 1494, 1), + (519, 'Convergence of Spirits', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 1495, 1), + (520, 'Nature\'s Guardian', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 1498, 1), + (521, 'Edict of Command', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 1501, 1), + (522, 'Extended Burnout', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1504, 1), + (523, 'Hastened Second Spire of Enchantment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12907, 1), + (524, 'Blood Magic', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 1510, 1), + (525, 'Graverobbing', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 1511, 1), + (526, 'Affliction Mastery', -1, 1568, 65535, 127, 131071, 0, 3, 0, 0, 1514, 1), + (527, 'Hastened Third Spire of Enchantment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12912, 1), + (528, 'Ancestral Guard', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 1520, 1), + (529, 'Cloak of Light', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 1523, 1), + (530, 'Profound Visage', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12920, 1), + (531, 'Cloak of Shadows', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 1527, 1), + (532, 'Willful Death', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 1528, 1), + (533, 'Unknown AA 16016', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 16016, 1), + (534, 'Calculated Insanity', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12931, 1), + (535, 'Crippling Aurora', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12937, 1), + (536, 'Appraisal', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1542, 1), + (537, 'Precise Strikes', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1543, 1), + (538, 'Hastened Death', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1546, 1), + (539, 'Unflinching Resolve', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1549, 1), + (540, 'Weightless Steps', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1552, 1), + (541, 'Hastened Blades', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1555, 1), + (542, 'Unknown AA 16071', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 16071, 1), + (543, 'Diminutive Companion', -1, 20480, 65535, 127, 131071, 0, 3, 0, 0, 12941, 1), + (544, 'Song of Stone', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1569, 1), + (545, 'Deep Sleep', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 1572, 1), + (546, 'Companion\'s Gift', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1577, 1), + (547, 'Unknown AA 16081', -1, 15360, 65535, 127, 131071, 0, 3, 0, 0, 16081, 1), + (548, 'Hastened Defiance', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 1583, 1), + (549, 'Dauntless Perseverance', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 1591, 1), + (550, 'Steadfast Resolve', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 14275, 1), + (551, 'Hastened Mind Crash', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1414, 1), + (552, 'Call of Challenge', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 1597, 1), + (553, 'Cacophony', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1598, 1), + (554, 'Hastened Nightmare Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 14341, 1), + (555, 'Anatomy', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1604, 1), + (556, 'Scintillating Beam', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 14346, 1), + (557, 'Trick Shot', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 1608, 1), + (558, 'Turn Undead', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 1383, 1), + (559, 'Turn Summoned', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1462, 1), + (560, 'Selo\'s Enduring Cadence', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1627, 1), + (561, 'Hastened Harvest of Druzzil', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12881, 1), + (562, 'Lightning Strikes', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 1616, 1), + (563, 'Concentration', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 1588, 1), + (565, 'Mana Burn', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1638, 1), + (567, 'Unknown AA 16146', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16146, 1), + (568, 'Thief\'s Intuition', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1641, 1), + (569, 'Thief\'s Intuition', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1642, 1), + (570, 'Valiant Steed', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 1645, 1), + (571, 'Abyssal Steed', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 1646, 1), + (572, 'Holy Warhorse', -1, 4, 65535, 127, 131071, 0, 3, 0, 1, 1643, 1), + (573, 'Unholy Warhorse', -1, 16, 65535, 127, 131071, 0, 3, 0, 1, 1644, 1), + (574, 'Harmonic Dissonance', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1647, 1), + (575, 'Tinkering Mastery', 6, 15639, 65535, 127, 131071, 0, 1, 0, 1, 4672, 1), + (576, 'Jewel Craft Mastery ', 6, 57343, 65535, 127, 131071, 0, 1, 0, 0, 4675, 1), + (577, 'Concussive Intuition', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12885, 1), + (578, 'Glyph Spray', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12939, 1), + (579, 'Combat Medic ', -1, 32766, 65535, 127, 131071, 0, 1, 0, 0, 4688, 1), + (580, 'Hastened Outrider\'s Accuracy', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 13565, 1), + (581, 'Quick Draw', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 4698, 1), + (582, 'Battle Ready', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 4699, 1), + (583, 'Hastened Outrider\'s Evasion', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 13568, 1), + (584, 'Grasp of Sylvan Spirits', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 13571, 1), + (585, 'Glyph of Dragon Scales', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 4702, 1), + (586, 'Glyph of Indeterminable Reward', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 13788, 1), + (587, 'Glyph of Arcane Secrets', 7, 32318, 65535, 127, 131071, 0, 4, 1, 0, 4704, 1), + (588, 'Glyph of Draconic Potential', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 4705, 1), + (589, 'Glyph of Destruction', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 4706, 1), + (590, 'Breath of Atathus', 8, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5150, 1), + (591, 'Breath of Draton\'ra', 8, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5165, 1), + (592, 'Breath of Osh\'vir', 8, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5180, 1), + (593, 'Breath of Venesh', 8, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5195, 1), + (594, 'Breath of Mysaphar', 8, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5210, 1), + (595, 'Breath of Keikolin', 8, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5225, 1), + (596, 'Small Modulation Shard', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 12963, 1), + (597, 'Medium Modulation Shard', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 12964, 1), + (598, 'Large Modulation Shard', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 12965, 1), + (599, 'Hastened Malosinete', -1, 4608, 65535, 127, 131071, 0, 3, 0, 0, 12968, 1), + (600, 'Blessing of the Devoted', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 9033, 1), + (601, 'Grappling Strike', -1, 65, 65535, 127, 131071, 0, 3, 0, 0, 4836, 1), + (602, 'Mental Contortion', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12938, 1), + (603, 'Shield of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 12971, 1), + (604, 'Extended Malosinete', -1, 4608, 65535, 127, 131071, 0, 3, 0, 0, 12977, 1), + (605, 'Shield Specialist', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 4844, 1), + (606, 'Mark of the Mage Hunter', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 4849, 1), + (609, 'Uncanny Resilience', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 4854, 1), + (610, 'Blinding Fury', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 4857, 1), + (611, 'Battle Leap', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 4860, 1), + (612, 'Soul Seeker', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 4861, 1), + (613, 'Lingering Death', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13096, 1), + (614, 'Spirit Guardian', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 5369, 1), + (615, 'Surreality', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 4887, 1), + (616, 'Mana Draw', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 4890, 1), + (617, 'Doppelganger\'s Beckon', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 5127, 1), + (618, 'Armor of Ancestral Spirits', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 12989, 1), + (619, 'Group Pact of the Wolf', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 12992, 1), + (620, 'Hastened Inconspicuous Totem', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 13001, 1), + (621, 'Fire Core', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 4903, 1), + (622, 'Vapor Core', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 4906, 1), + (623, 'Ice Core ', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 4909, 1), + (624, 'Stone Core ', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 4912, 1), + (625, 'Volatile Mana Blaze', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 4915, 1), + (626, 'Purified Spirits', -1, 546, 65535, 127, 131071, 0, 3, 0, 0, 13004, 1), + (627, 'Group Spirit Walk', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 13008, 1), + (628, 'Greater Blood Tithe', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 4924, 1), + (629, 'Gathering Dusk', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 4927, 1), + (630, 'Group Silent Presence', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 13009, 1), + (631, 'Double Attack', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 5366, 1), + (632, 'Sanguine Mind Crystal', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 4934, 1), + (633, 'Azure Mind Crystal', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 4935, 1), + (634, 'Hastened Cannibalization', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 13010, 1), + (635, 'Hastened Spirit Channeling', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 13013, 1), + (636, 'Arcane Whisper', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 4938, 1), + (637, 'Vengeful Spirits', -1, 9776, 65535, 127, 131071, 0, 3, 0, 0, 13017, 1), + (638, 'Crippling Apparition', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 13020, 1), + (639, 'Dimensional Instability', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 4943, 1), + (640, 'Cryomancy', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 4944, 1), + (641, 'Hastened Self Preservation', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13055, 1), + (642, 'Binding Axe', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13065, 1), + (643, 'Agony of Absolution', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13066, 1), + (644, 'Hastened Absolution', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13067, 1), + (645, 'Hastened Calculated Insanity', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 13753, 1), + (646, 'Hastened Mental Contortion', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 13758, 1), + (647, 'Hastened Crippling Aurora', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 13764, 1), + (649, 'Hastened Leech Touch', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 14046, 1), + (650, 'Bony Grasp of Death', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 14051, 1), + (651, 'Thought Leech', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 14052, 1), + (652, 'Hastened Leechcurse Discipline', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 14056, 1), + (653, 'Hastened Unholy Aura Discipline', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 14059, 1), + (654, 'Hastened Harmshield', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 14062, 1), + (655, 'Hastened Projection of Doom', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 14065, 1), + (656, 'Hastened Projection of Piety', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14068, 1), + (657, 'Shield of Brilliance', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14071, 1), + (658, 'Hastened Sanctification Discipline', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14076, 1), + (659, 'Speed of the Savior', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14080, 1), + (660, 'Divine Call', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14081, 1), + (661, 'Hunter\'s Fury', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 5248, 1), + (662, 'Union of Spirits', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 5251, 1), + (663, 'Quickened Stuns', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14100, 1), + (664, 'Extended Outrider\'s Attack', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 14115, 1), + (665, 'Death\'s Wrath', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 5264, 1), + (666, 'Taste of Blood', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 5015, 1), + (667, 'Summoner\'s Beckon', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 5269, 1), + (668, 'Hymn of the Last Stand', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 5017, 1), + (669, 'Bladed Song', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 5020, 1), + (670, 'Twisted Shank', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 5021, 1), + (671, 'Dirty Fighting', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 5022, 1), + (672, 'Ligament Slice', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 5025, 1), + (673, 'Tumble', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 5028, 1), + (674, 'Unknown AA 16149', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16149, 1), + (675, 'Shrink', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 14224, 1), + (676, 'Convergence', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14358, 1), + (677, 'Gift of Deathly Resolve', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14359, 1), + (678, 'Unknown AA 16082', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 16082, 1), + (679, 'Unknown AA 16083', -1, 15906, 65535, 127, 131071, 0, 2, 0, 0, 16083, 1), + (680, 'Unknown AA 16084', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 16084, 1), + (681, 'Unknown AA 16087', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 16087, 1), + (682, 'Unknown AA 16096', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16096, 1), + (683, 'Unknown AA 16097', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16097, 1), + (684, 'Unknown AA 16104', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16104, 1), + (685, 'Unknown AA 16105', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16105, 1), + (686, 'Unknown AA 16106', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16106, 1), + (687, 'Unknown AA 16107', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16107, 1), + (688, 'Unknown AA 16108', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16108, 1), + (689, 'Combat Medic ', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 5136, 1), + (690, 'Unknown AA 16109', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16109, 1), + (691, 'Unknown AA 16113', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16113, 1), + (692, 'Unknown AA 16114', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16114, 1), + (693, 'Unknown AA 16117', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16117, 1), + (694, 'Unknown AA 16120', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16120, 1), + (695, 'Unknown AA 16152', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16152, 1), + (696, 'Unknown AA 16156', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16156, 1), + (697, 'Mortal Coil', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 5085, 1), + (698, 'Hastened Purified Spirits', -1, 546, 65535, 127, 131071, 0, 3, 0, 0, 13416, 1), + (699, 'Swarm of Fireflies', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 13419, 1), + (700, 'Unknown AA 16159', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16159, 1), + (701, 'Armor of the Inquisitor', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 5095, 1), + (702, 'Hand of Disruption', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 5098, 1), + (703, 'Quickened Death Bloom', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14318, 1), + (704, 'Hero\'s Barracks', 9, 65535, 65535, 127, 131071, 0, 4, 0, 1, 14367, 1), + (705, 'Spirit of the White Wolf', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 5105, 1), + (706, 'Unknown AA 16160', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16160, 1), + (707, 'Pact of the Wolf', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 5109, 1), + (708, 'Enchant Alaran Metal', -1, 8192, 65535, 127, 131071, 0, 3, 0, 1, 13271, 1), + (709, 'Mass Enchant Alaran Metal', -1, 8192, 65535, 127, 131071, 0, 3, 0, 1, 13272, 1), + (710, 'Funeral Pyre', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14360, 1), + (711, 'Unknown AA 16162', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16162, 1), + (712, 'Hastened Sanctuary', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 5118, 1), + (713, 'Etherium Blades', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 14129, 1), + (714, 'Hastened Assassination Disciplines', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 14135, 1), + (715, 'Cunning Disguise: Shissar', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 14139, 1), + (716, 'Scout\'s Mastery of Piercing', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 14141, 1), + (717, 'Extended Envenomed Blades', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 14144, 1), + (718, 'Heel of Brithrax', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14151, 1), + (719, 'Extended Zan Fi\'s Whistle', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14163, 1), + (720, 'Hastened Marr\'s Salvation', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14088, 1), + (721, 'Hastened Armor of the Inquisitor', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14091, 1), + (722, 'Hastened Drape of Shadows', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 14304, 1), + (723, 'Unknown AA 16185', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16185, 1), + (724, 'Hastened Eldritch Rune', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 14364, 1), + (725, 'Unknown AA 16124', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 16124, 1), + (726, 'Unknown AA 16128', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 16128, 1), + (727, 'Unknown AA 16131', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 16131, 1), + (728, 'Unknown AA 16137', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 16137, 1), + (729, 'Unknown AA 16140', -1, 6, 65535, 127, 131071, 0, 3, 0, 0, 16140, 1), + (730, 'Unknown AA 16186', -1, 9, 65535, 127, 131071, 0, 3, 0, 0, 16186, 1), + (731, 'Unknown AA 16188', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16188, 1), + (732, 'Unknown AA 16195', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16195, 1), + (733, 'Killing Spree', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 4739, 1), + (734, 'Hold the Line', -1, 32833, 65535, 127, 131071, 0, 3, 0, 0, 4742, 1), + (735, 'Battle Frenzy', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 13134, 1), + (737, 'Quickened Silent Casting', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 13143, 1), + (738, 'Quickened Silent Casting', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 13146, 1), + (739, 'Balefire Burst', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 13164, 1), + (740, 'Blood Tithe', -1, 1568, 65535, 127, 131071, 0, 3, 0, 0, 4761, 1), + (741, 'Leap of Faith', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 13202, 1), + (742, 'Unknown AA 16196', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16196, 1), + (743, 'Hastened Explosion of Hatred', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 13166, 1), + (744, 'Howl of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 13169, 1), + (745, 'Hastened Tune In Your Head', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 13204, 1), + (746, 'Unknown AA 16197', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16197, 1), + (747, 'Unknown AA 16200', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16200, 1), + (748, 'Nightmare Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 4894, 1), + (749, 'Explosion of Spite', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 13165, 1), + (751, 'Scent of Terris', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13225, 1), + (752, 'Bloodfury', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13224, 1), + (753, 'Dreary Deeds', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 13252, 1), + (754, 'Enchant Feymetal', -1, 8192, 65535, 127, 131071, 0, 3, 0, 1, 13260, 1), + (755, 'Mass Enchant Feymetal', -1, 8192, 65535, 127, 131071, 0, 3, 0, 1, 13261, 1), + (756, 'Enlightened Focus of Arcanum', -1, 15904, 65535, 127, 131071, 0, 3, 0, 0, 13646, 1), + (757, 'Shifting Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 5276, 1), + (758, 'Extended Silent Casting', -1, 15360, 65535, 127, 131071, 0, 3, 0, 0, 13667, 1), + (759, 'Fury of Kerafyrm', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 13670, 1), + (760, 'Unknown AA 16203', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 16203, 1), + (761, 'Unknown AA 16208', -1, 552, 65535, 127, 131071, 0, 3, 0, 0, 16208, 1), + (762, 'Shield Block', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 5283, 1), + (763, 'Mirrored Pestilence', -1, 1552, 65535, 127, 131071, 0, 3, 0, 0, 13684, 1), + (764, 'Embrace The Decay', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13687, 1), + (765, 'Quickened Scent of Terris', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13689, 1), + (766, 'Frenzy of the Dead', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13693, 1), + (767, 'Unknown AA 16211', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 16211, 1), + (768, 'Unknown AA 16215', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 16215, 1), + (769, 'Marr\'s Salvation', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 13100, 1), + (770, 'Blessing of the Faithful', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 13101, 1), + (771, 'Unbridled Strike of Fear', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 13108, 1), + (772, 'Noteworthy Disguise: Drake', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 14192, 1), + (773, 'Death\'s Effigy', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13133, 1), + (774, 'Empowered Focus of Arcanum', -1, 15904, 65535, 127, 131071, 0, 3, 0, 0, 14690, 1), + (775, 'Unknown AA 16342', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 16342, 1), + (776, 'Arcane Overkill', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 5295, 1), + (777, 'Funeral Dirge', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 5298, 1), + (778, 'Protection of the Spirit Wolf', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 5007, 1), + (779, 'Hastened Juggernaut Surge', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13873, 1), + (780, 'Hastened Resilience', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13878, 1), + (781, 'Hastened Blood Pact', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13881, 1), + (782, 'Unknown AA 16317', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 16317, 1), + (783, 'Energetic Attunement', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1056, 1), + (784, 'Heart of Flames', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1251, 1), + (785, 'Heart of Vapor', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1252, 1), + (786, 'Heart of Ice', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1253, 1), + (787, 'Heart of Stone', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1254, 1), + (789, 'Stealthy Getaway', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1477, 1), + (790, 'Seized Opportunity', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 878, 1), + (791, 'Veil of Mindshadow', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 4931, 1), + (792, 'Army of the Dead', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 1274, 1), + (793, 'Mana Blast', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1639, 1), + (794, 'Mana Blaze', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1640, 1), + (795, 'Innate Corruption Protection', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1662, 1), + (796, 'Hastened Five Point Palm', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 13889, 1), + (797, 'Moving Mountains', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 13130, 1), + (798, 'Veturika\'s Perseverance', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 14229, 1), + (799, 'Unknown AA 16644', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16644, 1), + (800, 'Vehement Rage', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 6607, 1), + (801, 'Knee Strike', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6610, 1), + (802, 'Hastened Fortitude Discipline', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6611, 1), + (803, 'Hastened Furious Discipline', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6614, 1), + (804, 'Warlord\'s Bravery', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6617, 1), + (805, 'Hastened Speed Focus', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14148, 1), + (806, 'Hastened Zan Fi\'s Whistle', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14160, 1), + (807, 'Pressure Points', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14157, 1), + (808, 'Hastened Thunder', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14166, 1), + (809, 'Allegretto of Battle', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 14181, 1), + (810, 'Vivace of Conflict', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 14186, 1), + (811, 'Unknown AA 16218', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 16218, 1), + (812, 'Unknown AA 16221', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 16221, 1), + (813, 'Unknown AA 16222', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 16222, 1), + (814, 'Unknown AA 16225', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 16225, 1), + (815, 'Unknown AA 16230', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 16230, 1), + (816, 'Unknown AA 16235', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 16235, 1), + (817, 'Unknown AA 16238', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 16238, 1), + (818, 'Unknown AA 16257', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 16257, 1), + (819, 'Unknown AA 16666', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16666, 1), + (820, 'Death\'s Revenge', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6630, 1), + (821, 'Harmshield', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 6635, 1), + (822, 'Explosion of Hatred', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6640, 1), + (823, 'Cascading Theft of Defense', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6641, 1), + (824, 'Hate Step', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6644, 1), + (825, 'Vicious Bite of Chaos', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6645, 1), + (826, 'Encroaching Darkness', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 6646, 1), + (827, 'Unknown AA 16745', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16745, 1), + (828, 'Unknown AA 16260', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 16260, 1), + (829, 'Unknown AA 16263', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 16263, 1), + (830, 'Unknown AA 16272', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 16272, 1), + (831, 'Unknown AA 16276', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 16276, 1), + (832, 'Unknown AA 16287', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 16287, 1), + (833, 'Unknown AA 17252', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 17252, 1), + (834, 'Unknown AA 16296', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 16296, 1), + (835, 'Unknown AA 16300', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 16300, 1), + (836, 'Unknown AA 16310', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 16310, 1), + (837, 'Unknown AA 16330', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 16330, 1), + (838, 'Unknown AA 16163', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16163, 1), + (839, 'Unknown AA 16360', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 16360, 1), + (840, 'Unknown AA 16363', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 16363, 1), + (841, 'Sleight of Hand', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6663, 1), + (842, 'Enduring Vision', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6666, 1), + (843, 'Expertise of Blades', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6668, 1), + (844, 'Cunning Disguise: Human', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6671, 1), + (845, 'Cunning Disguise: Half-Elf', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6672, 1), + (846, 'Cunning Disguise: Barbarian', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6673, 1), + (847, 'Cunning Disguise: Erudite', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6674, 1), + (848, 'Cunning Disguise: Troll', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6675, 1), + (849, 'Cunning Disguise: Goblin', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6676, 1), + (850, 'Unknown AA 16366', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 16366, 1), + (851, 'Unknown AA 16369', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 16369, 1), + (852, 'Unknown AA 16370', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 16370, 1), + (853, 'Unknown AA 16371', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 16371, 1), + (854, 'Unknown AA 17256', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 17256, 1), + (856, 'Tigir\'s Insect Swarm', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6691, 1), + (857, 'Dampen Resistance', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6692, 1), + (858, 'Hastened Dampen Resistance', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6697, 1), + (859, 'Spirit Walk', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6702, 1), + (860, 'Hastened Virulent Paralysis', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6703, 1), + (861, 'Languid Bite', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6706, 1), + (862, 'Quickened Blood of Nadox', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6709, 1), + (863, 'Hastened Spirit Call', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6712, 1), + (864, 'Hastened Thousand Blades', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 14169, 1), + (865, 'Unknown AA 17257', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 17257, 1), + (866, 'Extended Dance of Blades', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 14179, 1), + (867, 'Extended Thousand Blades', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 14180, 1), + (868, 'Unknown AA 16380', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 16380, 1), + (869, 'Unknown AA 16386', -1, 4608, 65535, 127, 131071, 0, 3, 0, 0, 16386, 1), + (870, 'Harmonious Arrow', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6750, 1), + (871, 'Hastened Weapon Shield', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6751, 1), + (872, 'Outrider\'s Attack', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6754, 1), + (873, 'Group Guardian of the Forest', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6755, 1), + (874, 'Pack Hunt', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6758, 1), + (875, 'Keen Blade', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6761, 1), + (876, 'Outrider\'s Evasion', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6764, 1), + (877, 'Ranged Finesse', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6765, 1), + (878, 'Bow Mastery', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 1196, 1), + (879, 'Unknown AA 17258', -1, 1040, 65535, 127, 131071, 0, 2, 0, 0, 17258, 1), + (880, 'Unknown AA 16392', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 16392, 1), + (881, 'Unknown AA 16395', -1, 10248, 65535, 127, 131071, 0, 3, 0, 0, 16395, 1), + (882, 'Unknown AA 16396', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 16396, 1), + (883, 'Unknown AA 16536', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 16536, 1), + (884, 'Unknown AA 17209', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 17209, 1), + (885, 'Unknown AA 17212', -1, 1, 65535, 127, 131071, 0, 2, 0, 0, 17212, 1), + (886, 'Unknown AA 17218', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 17218, 1), + (888, 'Unknown AA 17555', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17555, 1), + (889, 'Unknown AA 17229', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 17229, 1), + (890, 'Unknown AA 17235', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 17235, 1), + (891, 'Healing Light', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 6791, 1), + (892, 'Halt the Dead', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 6794, 1), + (894, 'Unknown AA 17242', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 17242, 1), + (895, 'Unknown AA 17245', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 17245, 1), + (896, 'Unknown AA 17249', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 17249, 1), + (897, 'Unknown AA 17199', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 17199, 1), + (898, 'Unknown AA 17267', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 17267, 1), + (899, 'Unknown AA 17273', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 17273, 1), + (900, 'Rise of Bones', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 6815, 1), + (901, 'Whisperwind', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 6818, 1), + (902, 'Hastened Blood Magic', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 6819, 1), + (903, 'Overpower Undead', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 6822, 1), + (904, 'Hastened Swarm of Decay', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 6823, 1), + (905, 'Gift of the Grave', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 6828, 1), + (906, 'Hastened Gut Punch', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10522, 1), + (907, 'Hastened First Spire of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10527, 1), + (908, 'Hastened Second Spire of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10532, 1), + (909, 'Hastened Third Spire of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10537, 1), + (910, 'Unknown AA 17280', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 17280, 1), + (911, 'Warlord\'s Resurgence', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10545, 1), + (912, 'Warlord\'s Fury', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10546, 1), + (914, 'Improved Shield Specialist', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10548, 1), + (915, 'Unknown AA 17281', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 17281, 1), + (917, 'Hastened Grappling Strike', -1, 65, 65535, 127, 131071, 0, 3, 0, 0, 10588, 1), + (918, 'Furious Refrain', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10627, 1), + (919, 'Unknown AA 17554', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17554, 1), + (920, 'Valorous Rage', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10711, 1), + (921, 'Hastened Group Guardian of the Forest', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10714, 1), + (922, 'Hastened Outrider\'s Attack', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10719, 1), + (923, 'Hastened Protection of the Spirit Wolf', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10722, 1), + (924, 'Hastened Imbued Ferocity', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10727, 1), + (925, 'Hastened Harmonious Arrow', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10730, 1), + (926, 'Hastened Entrap', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10733, 1), + (927, 'Poison Arrows', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10736, 1), + (928, 'Merciless Blade', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 14026, 1), + (929, 'Combatant\'s Pact', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 14029, 1), + (930, 'Warlord\'s Resolve', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 14032, 1), + (931, 'Hastened Hate\'s Attraction', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 12582, 1), + (932, 'Unknown AA 17289', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 17289, 1), + (933, 'Improved Death Peace', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 12635, 1), + (934, 'Unknown AA 17307', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 17307, 1), + (935, 'Blessing of Ro', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10789, 1), + (936, 'Extended Wild Growth', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 10792, 1), + (937, 'Unknown AA 17317', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 17317, 1), + (938, 'Eyes Wide Open', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 12636, 1), + (939, 'Communion of the Cheetah', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12638, 1), + (940, 'Hastened Song of Stone', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6870, 1), + (941, 'Flurry', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6873, 1), + (942, 'Destructive Cascade', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6876, 1), + (943, 'Total Domination', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6879, 1), + (944, 'Enhanced Forgetfulness', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6882, 1), + (945, 'Infusion of Thunder', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10346, 1), + (946, 'Hastened Warlord\'s Bravery', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 14037, 1), + (947, 'Hastened Warlord\'s Tenacity', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 14040, 1), + (948, 'Unknown AA 17328', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 17328, 1), + (949, 'Unknown AA 17329', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 17329, 1), + (950, 'Unknown AA 17336', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 17336, 1), + (951, 'Unknown AA 17339', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 17339, 1), + (952, 'Unknown AA 17342', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 17342, 1), + (953, 'Unknown AA 17344', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 17344, 1), + (954, 'Unknown AA 17347', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 17347, 1), + (955, 'Unknown AA 17357', -1, 514, 65535, 127, 131071, 0, 2, 0, 0, 17357, 1), + (956, 'Unknown AA 17361', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 17361, 1), + (957, 'Unknown AA 17364', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 17364, 1), + (958, 'Unknown AA 17370', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 17370, 1), + (959, 'Unknown AA 17372', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 17372, 1), + (960, 'Stomping Leap', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 6930, 1), + (961, 'Juggernaut Surge', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6931, 1), + (962, 'Distraction Attack', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6932, 1), + (963, 'Hastened Savage Spirit', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6935, 1), + (964, 'Dying Blow', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6938, 1), + (965, 'Hastened Projection of Fury', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10519, 1), + (966, 'Unknown AA 17373', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 17373, 1), + (967, 'Blade Guardian', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 13444, 1), + (968, 'Unknown AA 17375', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 17375, 1), + (969, 'Unknown AA 17378', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 17378, 1), + (970, 'Unknown AA 17378', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 17379, 1), + (971, 'Unknown AA 17378', -1, 16384, 65535, 127, 131071, 0, 2, 0, 0, 17380, 1), + (972, 'Unknown AA 17384', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 17384, 1), + (974, 'Unknown AA 17409', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 17409, 1), + (975, 'Unknown AA 17414', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 17414, 1), + (976, 'Unknown AA 17418', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17418, 1), + (977, 'Unknown AA 17558', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17558, 1), + (978, 'Unknown AA 17428', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17428, 1), + (979, 'Unknown AA 17436', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17436, 1), + (980, 'Natural Invisibility', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6970, 1), + (981, 'Attack of the Warders', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6971, 1), + (982, 'Hastened Feral Attacks', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6974, 1), + (983, 'Hastened Focused Paragon', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6977, 1), + (984, 'Hastened Paragon', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6980, 1), + (985, 'Group Bestial Alignment', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6983, 1), + (986, 'Bite of the Asp', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6984, 1), + (987, 'Raven\'s Claw', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6985, 1), + (988, 'Gorilla Smash', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6986, 1), + (989, 'Stonefoot', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10340, 1), + (990, 'Hastened Stunning Kick', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10343, 1), + (991, 'Quickened Turn Undead', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10470, 1), + (992, 'Tranquil Blessings', -1, 30254, 65535, 127, 131071, 0, 3, 0, 0, 3676, 1), + (993, 'Righteous Zeal', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6082, 1), + (994, 'Hastened Divine Retribution', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6088, 1), + (995, 'Intrinsic Efficiency', -1, 15386, 65535, 127, 131071, 0, 2, 0, 0, 6112, 1), + (996, 'Powerful Elixirs', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6113, 1), + (997, 'Celestial Rapidity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6534, 1), + (998, 'Hastened Celestial Regeneration', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 2400, 1), + (999, 'Improved Burst of Life', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7765, 1), + (1000, 'Unknown AA 17439', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17439, 1), + (1001, 'Unknown AA 17445', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17445, 1), + (1002, 'Unknown AA 17448', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17448, 1), + (1003, 'Unknown AA 10478', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10478, 1), + (1004, 'Unknown AA 17492', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 17492, 1), + (1005, 'Unknown AA 17495', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 17495, 1), + (1006, 'Unknown AA 17515', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 17515, 1), + (1007, 'Unknown AA 17517', -1, 5120, 65535, 127, 131071, 0, 3, 0, 0, 17517, 1), + (1008, 'Unknown AA 17522', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 17522, 1), + (1009, 'Unknown AA 17533', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 17533, 1), + (1011, 'Neshika\'s Blink', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 7869, 1), + (1012, 'Five Point Palm', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 7875, 1), + (1013, 'War Cry of the Braxi', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13872, 1), + (1014, 'Unknown AA 17538', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 17538, 1), + (1015, 'Unknown AA 17547', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 17547, 1), + (1016, 'Unknown AA 17549', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 17549, 1), + (1017, 'Unknown AA 17238', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 17238, 1), + (1018, 'Unknown AA 17553', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 17553, 1), + (1019, 'Unknown AA 17248', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 17248, 1), + (1020, 'Hastened Companion\'s Blessing', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 12478, 1), + (1021, 'Unknown AA 17215', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 17215, 1), + (1022, 'Destructive Fury', -1, 16540, 65535, 127, 131071, 0, 2, 0, 0, 6636, 1), + (1023, 'Restoration of Life', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14010, 1), + (1024, 'Hastened Leap of Faith', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14085, 1), + (1025, 'Hastened Beacon of the Righteous', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14011, 1), + (1026, 'Unknown AA 17561', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17561, 1), + (1027, 'Unknown AA 17564', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17564, 1), + (1028, 'Unknown AA 17567', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17567, 1), + (1029, 'Unknown AA 17570', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17570, 1), + (1030, 'Unknown AA 17573', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17573, 1), + (1031, 'Unknown AA 17576', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17576, 1), + (1032, 'Unknown AA 17579', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17579, 1), + (1033, 'Unknown AA 17582', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17582, 1), + (1034, 'Unknown AA 17585', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17585, 1), + (1035, 'Unknown AA 17588', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17588, 1), + (1036, 'Unknown AA 17591', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17591, 1), + (1037, 'Unknown AA 17594', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17594, 1), + (1038, 'Unknown AA 17597', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17597, 1), + (1039, 'Unknown AA 17600', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17600, 1), + (1040, 'Theft of Essence', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 7900, 1), + (1041, 'Malosinete', -1, 4608, 65535, 127, 131071, 0, 3, 0, 0, 7903, 1), + (1042, 'Unknown AA 17603', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17603, 1), + (1043, 'Unknown AA 17606', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17606, 1), + (1044, 'Unknown AA 17609', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17609, 1), + (1045, 'Unknown AA 17612', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17612, 1), + (1046, 'Unknown AA 17615', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17615, 1), + (1047, 'Unknown AA 17618', -1, 8192, 65535, 127, 131071, 0, 5, 0, 0, 17618, 1), + (1048, 'Unknown AA 17621', -1, 8192, 65535, 127, 131071, 0, 5, 0, 0, 17621, 1), + (1049, 'Unknown AA 17624', -1, 8192, 65535, 127, 131071, 0, 5, 0, 0, 17624, 1), + (1050, 'Unknown AA 17627', -1, 8192, 65535, 127, 131071, 0, 5, 0, 0, 17627, 1), + (1051, 'Unknown AA 17630', -1, 8192, 65535, 127, 131071, 0, 5, 0, 0, 17630, 1), + (1052, 'Unknown AA 17633', -1, 8192, 65535, 127, 131071, 0, 5, 0, 0, 17633, 1), + (1053, 'Unknown AA 10481', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 10481, 1), + (1054, 'Unknown AA 17639', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 17639, 1), + (1060, 'Hastened Turn Undead', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7940, 1), + (1061, 'Cascading Divine Aura', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7943, 1), + (1062, 'Group Purify Soul', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7944, 1), + (1063, 'Hastened Renewal', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7945, 1), + (1064, 'Sanctified Blessing', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7948, 1), + (1065, 'Focused Celestial Regeneration', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7951, 1), + (1090, 'Mastery of Nature', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 7980, 1), + (1091, 'Hastened Nature\'s Guardian', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 7983, 1), + (1092, 'Spirit of the Black Wolf', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 7986, 1), + (1093, 'Hastened Lycan Soul', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 7989, 1), + (1113, 'Hastened Mass Group Buff', -1, 30254, 65535, 127, 131071, 0, 3, 0, 0, 5010, 1), + (1115, 'Mystical Shield', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 5045, 1), + (1120, 'Self Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8030, 1), + (1121, 'Hastened Veil of Mindshadow', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8031, 1), + (1122, 'Phantasmal Opponent', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8034, 1), + (1123, 'Hastened Edict of Command', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8035, 1), + (1124, 'Fog of Memories', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8038, 1), + (1125, 'Bite of Tashani', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8039, 1), + (1150, 'Fury of Druzzil', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8060, 1), + (1151, 'Fury of Eci', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8063, 1), + (1152, 'Fury of Ro', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8066, 1), + (1153, 'Fortified Entanglement', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8069, 1), + (1154, 'Force of Will', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8072, 1), + (1155, 'Atol\'s Shackles', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8075, 1), + (1156, 'Hastened Manaburn', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8076, 1), + (1157, 'Hastened Call of Xuzl', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8082, 1), + (1158, 'Divine Steed', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 1667, 1), + (1159, 'Hastened Leap', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 11014, 1), + (1169, 'Unknown AA 16336', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 16336, 1), + (1170, 'Unknown AA 16339', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 16339, 1), + (1171, 'Hastened Counterattack Discipline', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 15502, 1), + (1173, 'Hastened Onslaught', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 15509, 1), + (1174, 'Mrylokar\'s Rigor', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 15512, 1), + (1175, 'Absorbing Agent', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 15515, 1), + (1176, 'Improved Requiem of Time', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15516, 1), + (1177, 'Quickened Requiem of Time', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15517, 1), + (1178, 'Silent Displacement', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15521, 1), + (1200, 'Companion\'s Alacrity', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 8190, 1), + (1201, 'Improved Intimidation', -1, 41408, 65535, 127, 131071, 0, 2, 0, 1, 8193, 1), + (1202, 'Perfected Levitation', -1, 31272, 65535, 127, 131071, 0, 2, 0, 0, 8194, 1), + (1203, 'Hastened Fortify Companion', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 8195, 1), + (1204, 'Empowered Ingenuity', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 8198, 1), + (1205, 'Companion\'s Fury', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 8201, 1), + (1206, 'Quickened Radiant Cure', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 8204, 1), + (1207, 'Quickened Radiant Cure', -1, 4, 65535, 127, 131071, 0, 2, 0, 0, 8207, 1), + (1208, 'Mental Stamina', -1, 32446, 65535, 127, 131071, 0, 2, 0, 0, 8210, 1), + (1209, 'Hardy Endurance', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 8215, 1), + (1210, 'Group Perfected Invisibility', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 8220, 1), + (1211, 'Focus of Arcanum', -1, 15904, 65535, 127, 131071, 0, 3, 0, 0, 8221, 1), + (1212, 'Group Perfected Invisibility to Undead', -1, 1046, 65535, 127, 131071, 0, 2, 0, 0, 8222, 1), + (1214, 'Cascade of Life', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 8224, 1), + (1215, 'Summon Companion', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 8227, 1), + (1216, 'Mental Fortitude', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8228, 1), + (1217, 'Gate', -1, 15906, 65535, 127, 131071, 0, 2, 0, 0, 8231, 1), + (1218, 'Extended Ingenuity', -1, 128, 65535, 127, 131071, 0, 2, 0, 0, 8040, 1), + (1219, 'Armor of Wisdom', -1, 1, 65535, 127, 131071, 0, 2, 0, 0, 8235, 1), + (1220, 'Armor of Wisdom', -1, 20, 65535, 127, 131071, 0, 2, 0, 0, 8240, 1), + (1221, 'Armor of Wisdom', -1, 202, 65535, 127, 131071, 0, 2, 0, 0, 8245, 1), + (1222, 'Armor of Wisdom', -1, 49920, 65535, 127, 131071, 0, 2, 0, 0, 8250, 1), + (1223, 'Armor of Wisdom', -1, 15392, 65535, 127, 131071, 0, 2, 0, 0, 8255, 1), + (1232, 'Way of the Katori', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15429, 1), + (1233, 'Harmony of Battle', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15432, 1), + (1234, 'Hastened Ironfist', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15438, 1), + (1235, 'Two-Finger Wasp Touch', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15447, 1), + (1236, 'Thunderfoot', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15444, 1), + (1237, 'Extended Bloodlust', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 15414, 1), + (1239, 'Consumption of Spirit', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 15423, 1), + (1240, 'Frenzied Swipes', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 15424, 1), + (1242, 'Hastened Synergy', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15450, 1), + (1243, 'Hastened Crane Stance', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15453, 1), + (1244, 'Hastened Eye Gouge', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15456, 1), + (1245, 'Troubadour\'s Slashing Mastery', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15540, 1), + (1246, 'Troubadour\'s Blunt Mastery', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15543, 1), + (1247, 'Troubadour\'s Piercing Mastery', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15546, 1), + (1248, 'Hastened Lure of the Siren\'s Song', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15549, 1), + (1249, 'Frenzied Axe of Rallos', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 15555, 1), + (1250, 'Juggernaut\'s Mastery of Throwing', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 15564, 1), + (1251, 'Furious Rampage', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 15567, 1), + (1252, 'Battle Stomp', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 15569, 1), + (1253, 'Communion of Blood', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 15570, 1), + (1254, 'Hastened Dying Grasp', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 15571, 1), + (1255, 'Rest the Dead', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 15574, 1), + (1256, 'Extended Encroaching Darkness', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 15579, 1), + (1257, 'Hand of Death', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 15582, 1), + (1258, 'Quickened Levant', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 15591, 1), + (1259, 'Cascade of Decay', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 15594, 1), + (1261, 'Hastened Fury of the Gods', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15598, 1), + (1262, 'Lower Element', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15601, 1), + (1263, 'Destructive Adept', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15602, 1), + (1264, 'Arcane Fusion', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15609, 1), + (1265, 'Arcane Destruction', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15611, 1), + (1266, 'Force of Flame', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15612, 1), + (1267, 'Force of Ice', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15615, 1), + (1269, 'Sha\'s Reprisal', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 15425, 1), + (1270, 'Crippling Spirit', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 15377, 1), + (1271, 'Quick Damage', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 15622, 1), + (1272, 'Assassin\'s Wrath', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 15625, 1), + (1273, 'Hastened Swiftblade', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 15634, 1), + (1274, 'Improved Explosion of Spite', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15639, 1), + (1275, 'Improved Explosion of Hatred', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15640, 1), + (1277, 'Soul Touch', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15642, 1), + (1278, 'Soul Flay', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15643, 1), + (1279, 'Ragged Bite of Agony', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15646, 1), + (1281, 'Everburn', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 15648, 1), + (1282, 'Marr\'s Gift', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15619, 1), + (1300, 'Fundament of Intellect', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 9100, 1), + (1301, 'Fundament of Intellect', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 9109, 1), + (1302, 'Fundament of Intellect', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 9118, 1), + (1303, 'Fundament of Intellect', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 9127, 1), + (1304, 'Fundament of Wisdom', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 9136, 1), + (1305, 'Fundament of Wisdom', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 9145, 1), + (1306, 'Fundament of Wisdom', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 9154, 1), + (1307, 'Fundament of Power', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 9163, 1), + (1308, 'Fundament of Power', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 9172, 1), + (1309, 'Fundament of Power', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 9181, 1), + (1310, 'Fundament of Power', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 9190, 1), + (1311, 'Fundament of Power', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 9199, 1), + (1312, 'Fundament of Combat', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 9208, 1), + (1313, 'Fundament of Combat', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 9217, 1), + (1314, 'Fundament of Combat', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 9226, 1), + (1315, 'Fundament of Combat', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 9235, 1), + (1350, 'Fundament: First Spire of Arcanum', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 9300, 1), + (1351, 'Fundament: Second Spire of Arcanum', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 9303, 1), + (1352, 'Fundament: Third Spire of Arcanum', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 9306, 1), + (1360, 'Fundament: First Spire of the Sensei', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 9309, 1), + (1361, 'Fundament: Second Spire of the Sensei', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 9312, 1), + (1362, 'Fundament: Third Spire of the Sensei', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 9315, 1), + (1370, 'Fundament: First Spire of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 9318, 1), + (1371, 'Fundament: Second Spire of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 9321, 1), + (1372, 'Fundament: Third Spire of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 9324, 1), + (1380, 'Fundament: First Spire of Enchantment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 9327, 1), + (1381, 'Fundament: Second Spire of Enchantment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 9330, 1), + (1382, 'Fundament: Third Spire of Enchantment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 9333, 1), + (1390, 'Fundament: First Spire of Necromancy', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 9336, 1), + (1391, 'Fundament: Second Spire of Necromancy', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 9339, 1), + (1392, 'Fundament: Third Spire of Necromancy', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 9342, 1), + (1400, 'Fundament: First Spire of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 9345, 1), + (1401, 'Fundament: Second Spire of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 9348, 1), + (1402, 'Fundament: Third Spire of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 9351, 1), + (1403, 'Sturdy Companion', -1, 30224, 65535, 127, 131071, 0, 3, 0, 0, 9503, 1), + (1404, 'Extended Swarm', -1, 32306, 65535, 127, 131071, 0, 3, 0, 0, 9506, 1), + (1405, 'Twincast', -1, 15906, 65535, 127, 131071, 0, 3, 0, 0, 9509, 1), + (1406, 'Staff Block', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 9512, 1), + (1410, 'Fundament: First Spire of the Rake', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 9354, 1), + (1411, 'Fundament: Second Spire of the Rake', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 9357, 1), + (1412, 'Fundament: Third Spire of the Rake', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 9360, 1), + (1420, 'Fundament: First Spire of the Minstrels', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 9363, 1), + (1421, 'Fundament: Second Spire of the Minstrels', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 9366, 1), + (1422, 'Fundament: Third Spire of the Minstrels', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 9369, 1), + (1430, 'Fundament: First Spire of the Savage Lord', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 9372, 1), + (1431, 'Fundament: Second Spire of the Savage Lord', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 9375, 1), + (1432, 'Fundament: Third Spire of the Savage Lord', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 9378, 1), + (1433, 'Extended Ingenuity', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 8232, 1), + (1440, 'Fundament: First Spire of Holiness', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 9381, 1), + (1441, 'Fundament: Second Spire of Holiness', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 9384, 1), + (1442, 'Fundament: Third Spire of Holiness', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 9387, 1), + (1450, 'Fundament: First Spire of the Reavers', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 9390, 1), + (1451, 'Fundament: Second Spire of the Reavers', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 9393, 1), + (1452, 'Fundament: Third Spire of the Reavers', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 9396, 1), + (1460, 'Fundament: First Spire of the Pathfinders', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 9399, 1), + (1461, 'Fundament: Second Spire of the Pathfinders', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 9402, 1), + (1462, 'Fundament: Third Spire of the Pathfinders', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 9405, 1), + (1470, 'Fundament: First Spire of Divinity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 9408, 1), + (1471, 'Fundament: Second Spire of Divinity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 9411, 1), + (1472, 'Fundament: Third Spire of Divinity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 9414, 1), + (1480, 'Fundament: First Spire of Nature', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 9417, 1), + (1481, 'Fundament: Second Spire of Nature', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 9420, 1), + (1482, 'Fundament: Third Spire of Nature', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 9423, 1), + (1490, 'Fundament: First Spire of Ancestors', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 9426, 1), + (1491, 'Fundament: Second Spire of Ancestors', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 9429, 1), + (1492, 'Fundament: Third Spire of Ancestors', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 9432, 1), + (1500, 'Fundament: First Spire of Savagery', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 9435, 1), + (1501, 'Fundament: Second Spire of Savagery', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 9438, 1), + (1502, 'Fundament: Third Spire of Savagery', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 9441, 1), + (1503, 'Hallowed Steed', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 13673, 1), + (1504, 'Wicked Steed', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 13674, 1), + (1505, 'Unknown AA 16103', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 16103, 1), + (1580, 'Divine Companion Aura', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 5809, 1), + (1662, 'Spell Casting Mastery', -1, 16412, 65535, 127, 131071, 0, 2, 0, 0, 1216, 1), + (1663, 'Gift of Mana', -1, 16412, 65535, 127, 131071, 0, 2, 0, 0, 1219, 1), + (1664, 'Twinproc', -1, 50175, 65535, 127, 131071, 0, 3, 0, 0, 12416, 1), + (1665, 'Tactical Mastery', -1, 16596, 65535, 127, 131071, 0, 3, 0, 0, 12419, 1), + (1666, 'Group Perfected Levitation', -1, 31272, 65535, 127, 131071, 0, 2, 0, 0, 12422, 1), + (1667, 'Quickened Encroaching Darkness', -1, 1040, 65535, 127, 131071, 0, 2, 0, 0, 6026, 1), + (1668, 'Acute Focus of Arcanum', -1, 15904, 65535, 127, 131071, 0, 3, 0, 0, 8260, 1), + (1669, 'Flurry', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 5806, 1), + (1680, 'Hastened Flash of Anger', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 13905, 1), + (1681, 'Hastened Bazu Roar', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 13908, 1), + (1682, 'Hastened Scowl', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 13911, 1), + (1683, 'Hastened Mark of the Mage Hunter', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 13917, 1), + (1684, 'Knowledge of Alaran Culture', 2, 65535, 65535, 127, 131071, 0, 4, 0, 0, 14017, 1), + (1685, 'Knowledge of Alaran Culture - Advanced', 2, 65535, 65535, 127, 131071, 0, 4, 0, 0, 14018, 1), + (1686, 'Brace For Impact', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 14019, 1), + (1687, 'Summon Tome of the Hero\'s Journey', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 14371, 1), + (1800, 'Enchant Planar Alloy', -1, 8192, 65535, 127, 131071, 0, 3, 0, 1, 14373, 1), + (1801, 'Mass Enchant Planar Alloy', -1, 8192, 65535, 127, 131071, 0, 3, 0, 1, 14374, 1), + (2000, 'Armor of Experience', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 4700, 1), + (2001, 'Sneering Grin', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15096, 1), + (2002, 'Warlord\'s Grasp', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15099, 1), + (2003, 'Hastened Press the Attack', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15100, 1), + (2004, 'Hastened Rage of Rallos Zek', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15105, 1), + (2005, 'Hastened Unbroken Attention', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15108, 1), + (2006, 'Extended Resplendant Glory', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15113, 1), + (2007, 'Wars Sheol\'s Heroic Blade', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15119, 1), + (2008, 'Hastened Vehement Rage', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15120, 1), + (2009, 'Hastened Barbed Tongue', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15123, 1), + (2010, 'Hastened Shield Topple', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15126, 1), + (2011, 'Imperator\'s Command', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15129, 1), + (2012, 'Imperator\'s Charge', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15130, 1), + (2013, 'Imperator\'s Precision', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15131, 1), + (2014, 'Hastened Divine Call', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15132, 1), + (2015, 'Extended Divine Call', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15135, 1), + (2016, 'Heroic Leap', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15136, 1), + (2018, 'Helix of the Undying', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 15146, 1), + (2019, 'Group Armor of the Inquisitor', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15147, 1), + (2020, 'Quickened Demand For Honor', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15150, 1), + (2021, 'Extended Sanctification', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15153, 1), + (2022, 'Extended Speed of the Savior', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15154, 1), + (2023, 'Extended Preservation of Marr', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15155, 1), + (2024, 'Extended Shield of Brilliance', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15158, 1), + (2025, 'Extended Blessing of the Faithful', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15159, 1), + (2026, 'Hastened Speed of the Savior', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15162, 1), + (2028, 'Hastened Shield of Brilliance', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15168, 1), + (2031, 'Purity of Death', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15177, 1), + (2032, 'Quickened Scourge Skin', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15179, 1), + (2034, 'Gift of the Quick Spear', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15193, 1), + (2035, 'Extended Provocation for Power', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15194, 1), + (2036, 'Quickened Auspice of the Hunter', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15253, 1), + (2037, 'Chameleon\'s Gift', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15304, 1), + (2040, 'Hastened Enraging Kicks', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15283, 1), + (2041, 'Close Combat Mastery', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15288, 1), + (2042, 'Quickened Cover Tracks', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15295, 1), + (2045, 'Shield of Reverence', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 15338, 1), + (2046, 'Extended Healing Frenzy', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 15342, 1), + (2047, 'Call of the Herald', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 15343, 1), + (2048, 'Covenant of Spirit', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 15356, 1), + (2049, 'Talisman of Celerity', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 15357, 1), + (2050, 'Extended Spiritual Blessing', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 15358, 1), + (2051, 'Rejuvenation of Spirit', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 15362, 1), + (2053, 'Hastened Turgur\'s Swarm', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 15371, 1), + (2054, 'Shielding of Spirits', -1, 16930, 65535, 127, 131071, 0, 2, 0, 0, 15374, 1), + (2055, 'Hastened Lunar Healing', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 15383, 1), + (2056, 'Quickened Blessing of Ro', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 15389, 1), + (2057, 'Hastened Wall of Wind', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 15403, 1), + (2059, 'Quickened Focused Paragon of Spirit', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 15406, 1), + (2060, 'Elemental Ward', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15200, 1), + (2061, 'Cloak of Shadows', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15203, 1), + (2062, 'Hastened Elemental Union', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15204, 1), + (2063, 'Hastened Virulent Talon', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15207, 1), + (2064, 'Wind of Malosinete', -1, 4608, 65535, 127, 131071, 0, 3, 0, 0, 15210, 1), + (2065, 'Mana Reserve', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15213, 1), + (2066, 'Second Wind Ward', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15214, 1), + (2076, 'Steel Vengeance', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15217, 1), + (2077, 'Extended Vapor Core', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15220, 1), + (2078, 'Extended Stone Core', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15223, 1), + (2079, 'Extended Fire Core', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15226, 1), + (2080, 'Extended Ice Core', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15229, 1), + (2081, 'Flames of Power', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15232, 1), + (2200, 'Rune of Banishment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15475, 1), + (2201, 'Hastened Glyph Spray', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15478, 1), + (2202, 'Illusions of Grandeur', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15481, 1), + (2203, 'Illusory Ally', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15482, 1), + (2204, 'Gracious Gift of Mana', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15485, 1), + (2205, 'Chromatic Haze', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15486, 1), + (2206, 'Blanket of Forgetfulness', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15489, 1), + (2207, 'Ethereal Manipulation', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15490, 1), + (2208, 'Quick Mezz', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15493, 1), + (2209, 'Reactive Rune', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15496, 1), + (2234, 'Cover Tracks', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10368, 1), + (2235, 'Imbued Ferocity', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10387, 1), + (2709, 'Perfected Dead Man Floating', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13692, 1), + (2899, 'Levant', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 10700, 1), + (3000, 'Auroria Mastery', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 6987, 1), + (3202, 'Pet Discipline', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 7733, 1), + (3203, 'Enchant Palladium Trio', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7736, 1), + (3204, 'Mass Enchant Palladium', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7737, 1), + (3205, 'Greater Mass Enchant Palladium', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7738, 1), + (3206, 'Enchant Dwerium', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7732, 1), + (3207, 'Mass Enchant Dwerium', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7734, 1), + (3208, 'Enchant Palladium', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7735, 1), + (3209, 'Enchant Temporite', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7739, 1), + (3210, 'Mass Enchant Temporite', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7740, 1), + (3211, 'Nature\'s Reprieve', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10388, 1), + (3212, 'Hastened Divine Intervention', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10358, 1), + (3213, 'Projection of Fury', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10351, 1), + (3214, 'Improved Atone', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10364, 1), + (3215, 'Projection of Doom', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10352, 1), + (3216, 'Projection of Piety', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10353, 1), + (3217, 'Hastened Jolting Kicks', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 12500, 1), + (3218, 'Enchant Cosgrite', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7741, 1), + (3219, 'Mass Enchant Cosgrite', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7742, 1), + (3500, 'Blessing of Light', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10355, 1), + (3506, 'Fierce Eye', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 5717, 1), + (3511, 'Punch Mastery', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 6020, 1), + (3512, 'Companion\'s Durability', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 6051, 1), + (3513, 'Rake\'s Deadly Aim', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6322, 1), + (3514, 'Rogue\'s Fury', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6325, 1), + (3515, 'Envenomed Blades', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6328, 1), + (3516, 'Companion of Necessity', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 6333, 1), + (3517, 'Rake\'s Powerful Aim', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6334, 1), + (3518, 'Hastened Cacophony', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6337, 1), + (3519, 'Hastened Funeral Dirge', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6340, 1), + (3520, 'Master\'s Hastened Combination', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 6343, 1), + (3521, 'Hastened Silent Casting', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 6346, 1), + (3522, 'Hastened Silent Casting', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 6349, 1), + (3525, 'Precise Blow', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 5776, 1), + (3550, 'Beguiler\'s Banishment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 5849, 1), + (3551, 'Beguiler\'s Directed Banishment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 5870, 1), + (3600, 'Rapid Defiance', 1, 1, 65535, 127, 131071, 0, 3, 0, 1, 6136, 1), + (3646, 'Blast of Anger', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6135, 1), + (3676, 'Gift of Life', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10354, 1), + (3701, 'Dirge of the Sleepwalker', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6200, 1), + (3702, 'Quick Time', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6201, 1), + (3703, 'Steady Hands ', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6202, 1), + (3704, 'Selo\'s Sonata', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6205, 1), + (3705, 'Companion\'s Blessing ', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 6206, 1), + (3706, 'Hastened Bestial Alignment ', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6209, 1), + (3707, 'Fortify Companion ', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 6212, 1), + (3708, 'Burst of Power ', -1, 20, 65535, 127, 131071, 0, 2, 0, 0, 6215, 1), + (3709, 'Pact of the Wurine', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6218, 1), + (3710, 'Reckless Abandon ', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6219, 1), + (3711, 'Gift of Resurrection', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 6222, 1), + (3713, 'Hastened Call of the Wild ', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 6228, 1), + (3714, 'Protection of Direwood', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 6232, 1), + (3716, 'Clinging Root ', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 6236, 1), + (3718, 'Critical Affliction', -1, 8194, 65535, 127, 131071, 0, 2, 0, 0, 6240, 1), + (3720, 'Mana Overburn ', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 6249, 1), + (3724, 'Knight\'s Return Strike ', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 6266, 1), + (3725, 'Hunter\'s Return Kick ', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6269, 1), + (3726, 'Hastened Ligament Slice ', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6272, 1), + (3727, 'Knave\'s Return Strike', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6275, 1), + (3728, 'Storm Strike', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 6278, 1), + (3729, 'Turgur\'s Swarm', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6281, 1), + (3730, 'Silent Presence', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6282, 1), + (3731, 'Infused by Rage ', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6283, 1), + (3732, 'Gut Punch', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6286, 1), + (3733, 'Warlord\'s Return Kick', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6287, 1), + (3734, 'Arcomancy ', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 6290, 1), + (3800, 'Blessing of Resurrection', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6299, 1), + (3801, 'General Sturdiness', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 6119, 1), + (3802, 'Shield Block', -1, 392, 65535, 127, 131071, 0, 2, 0, 0, 6124, 1), + (3803, 'Hastened Trueshot', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6355, 1), + (3804, 'Outrider\'s Accuracy', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6370, 1), + (3805, 'Hastened Mend', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 4801, 1), + (3812, 'Perfected Invisibility', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 7069, 1), + (3813, 'Spell Casting Reinforcement', -1, 7168, 65535, 127, 131071, 0, 2, 0, 0, 6257, 1), + (3815, 'Destructive Cascade', -1, 9776, 65535, 127, 131071, 0, 3, 0, 0, 6375, 1), + (3816, 'Companion\'s Relocation', -1, 30224, 65535, 127, 131071, 0, 3, 0, 0, 6379, 1), + (3817, 'Focused Paragon of Spirits', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6380, 1), + (3818, 'Companion\'s Agility', -1, 30224, 65535, 127, 131071, 0, 3, 0, 0, 6383, 1), + (3819, 'Maestro\'s Concentration', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6386, 1), + (3820, 'Blessing of Life', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 6395, 1), + (3821, 'Quickened Harvest of Druzzil', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 6503, 1), + (3822, 'Chattering Bones', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6508, 1), + (3823, 'Warlord\'s Deadly Aim', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6511, 1), + (3824, 'Quickened Call of the Wild', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 6514, 1), + (3826, 'Force of Disruption', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 5984, 1), + (3830, 'Hastened Divine Avatar', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7100, 1), + (3831, 'Hastened Purification', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 7103, 1), + (3832, 'Beastlords Feral Kick', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 7106, 1), + (3833, 'Burst of Power ', -1, 32841, 65535, 127, 131071, 0, 2, 0, 0, 6409, 1), + (3834, 'Burst of Power ', -1, 256, 65535, 127, 131071, 0, 2, 0, 0, 6419, 1), + (3835, 'Shield Block', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 6428, 1), + (3836, 'Holy Root', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6436, 1), + (3837, 'Burst of Power ', -1, 16512, 65535, 127, 131071, 0, 2, 0, 0, 6060, 1), + (3838, 'Quickened Suspend Minion', -1, 30224, 65535, 127, 131071, 0, 3, 0, 0, 6445, 1), + (3839, 'Quickened Summon Axes', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6452, 1), + (3840, 'Recourse of Life', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6601, 1), + (3841, 'Call Hither', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 6455, 1), + (3842, 'Fortified Survival', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 6458, 1), + (3843, 'Fortified Intervention', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6461, 1), + (3865, 'Planar Durability', -1, 72, 65535, 127, 131071, 0, 3, 0, 0, 6422, 1), + (3890, 'Hastened Force of Will', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 7822, 1), + (3891, 'Hastened Burnout', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 7832, 1), + (3892, 'Hastened Rumbling Servant', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 7828, 1), + (3893, 'Extended Rumbling Servant', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 7827, 1), + (3899, 'Furious Leap', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 6499, 1), + (4001, 'Undaunted Fury', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 7407, 1), + (4002, 'Frenzied Volley', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 7818, 1), + (4200, 'Hastened Forceful Rejuvenation', -1, 32318, 65535, 127, 131071, 0, 2, 0, 0, 12475, 1), + (4666, 'Shield Specialist', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 4666, 1), + (5000, 'Glyph of Courage', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 7000, 1), + (5002, 'Glyph of Stored Life', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 7002, 1), + (5003, 'Glyph of Frantic Infusion', 7, 30224, 65535, 127, 131071, 0, 4, 1, 0, 7003, 1), + (5004, 'Glyph of Angry Thoughts', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 7004, 1), + (5005, 'Foraging', 8, 65535, 65535, 127, 131071, 0, 1, 0, 0, 7062, 1), + (6000, 'Harm Touch', 9, 16, 65535, 127, 131071, 0, 3, 0, 0, 7800, 1), + (6001, 'Lay on Hands', 9, 4, 65535, 127, 131071, 0, 3, 0, 0, 7850, 1), + (6002, 'Hunter\'s Attack Power', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6546, 1), + (6106, 'Sustained Destruction', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 6106, 1), + (6302, 'Hastened Reckless Abandon', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6302, 1), + (6362, 'Hastened Recklessness', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6362, 1), + (6478, 'Hastened Blessing of Resurrection', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6478, 1), + (6481, 'Hastened Divine Resurrection', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6481, 1), + (6488, 'Flurry of Life', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6488, 1), + (6489, 'Hastened Holyforge', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 6489, 1), + (6492, 'Inquisitor\'s Judgement', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 6492, 1), + (6988, 'Extended Group Bestial Alignment', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6988, 1), + (7000, 'Voice of Thule', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6639, 1), + (7001, 'Zan Fi\'s Whistle', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 7872, 1), + (7002, 'Summon Remains', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 9500, 1), + (7003, 'Forceful Rejuvenation', -1, 32318, 65535, 127, 131071, 0, 2, 0, 0, 9502, 1), + (7007, 'Summon Remains', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 9501, 1), + (7009, 'Teleport Bind', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 1419, 1), + (7016, 'Glyph of the Master', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 7016, 1), + (7017, 'Glyph of Lost Secrets', 7, 32318, 65535, 127, 131071, 0, 4, 1, 0, 7017, 1), + (7018, 'Glyph of Genari Might', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 7018, 1), + (7019, 'Glyph of the Cataclysm', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 7019, 1), + (7025, 'Group Shrink', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 7669, 1), + (7033, 'Lasting Bravery', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 7033, 1), + (7036, 'Hastened Blast of Anger', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 7036, 1), + (7050, 'Call of the Hero', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1017, 1), + (7060, 'Precision of Axes', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 4809, 1), + (7070, 'Hastened Distraction Attack', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6941, 1), + (7105, 'Deathly Pact', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 976, 1), + (7106, 'Planar Durability', -1, 16768, 65535, 127, 131071, 0, 3, 0, 0, 6467, 1), + (7107, 'Hastened Getaway', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 7005, 1), + (7108, 'Divine Aura', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 977, 1), + (7109, 'Hastened Wrath of the Wild', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 7664, 1), + (7689, 'Burst of Life', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7689, 1), + (7690, 'Spirit Mastery', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7690, 1), + (7695, 'Quickened Blood of Avoling', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 7695, 1), + (7698, 'Dead Man Floating', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 7698, 1), + (7699, 'Dread Incarnate', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 7699, 1), + (7700, 'Flurry', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 7700, 1), + (7703, 'Death Bloom', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 7703, 1), + (7712, 'Disruptive Persecution', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 7712, 1), + (7715, 'Hastened Whisperwind', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 7715, 1), + (7743, 'Hastened Guardian of the Forest', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 7743, 1), + (7746, 'Hastened Flusterbolt', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 7746, 1), + (7747, 'Volatile Arrow', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 7747, 1), + (7748, 'Pathfinder\'s Grace', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 7748, 1), + (7751, 'Hastened Cover Tracks', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 7751, 1), + (7754, 'Steed of Souls', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 7754, 1), + (7755, 'Scourge Skin', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 7755, 1), + (7756, 'Death\'s Effigy', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 7756, 1), + (7757, 'Hastened Visage of Death', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 7757, 1), + (7760, 'Hastened Hate Step', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 7760, 1), + (7801, 'Songwriting', 6, 128, 65535, 127, 131071, 0, 3, 0, 0, 9001, 1), + (7809, 'Hybrid Research', 6, 16412, 65535, 127, 131071, 0, 2, 0, 0, 9011, 1), + (7819, 'Written Prayer', 6, 546, 65535, 127, 131071, 0, 2, 0, 0, 9021, 1), + (7925, 'Sionachie\'s Crescendo', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1018, 1), + (8081, 'Summon Resupply Agent', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 9000, 1), + (8130, 'Summon Clockwork Banker', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 9031, 1), + (8200, 'Hastened Dirge of the Sleepwalker', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10329, 1), + (8201, 'Vainglorious Shout ', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10330, 1), + (8202, 'Lyre Leap ', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10331, 1), + (8203, 'Domination Mastery ', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10332, 1), + (8204, 'Lyrical Prankster', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10333, 1), + (8205, 'Selo\'s Kick ', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10336, 1), + (8261, 'A Tune Stuck In Your Head', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10339, 1), + (8262, 'The Show Must Go On', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 7010, 1), + (8300, 'Spell Casting Subtlety', -1, 16384, 65535, 127, 131071, 0, 2, 0, 0, 10370, 1), + (8301, 'Improved Natural Invisibility', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 10373, 1), + (8302, 'Protection of the Warder', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 10374, 1), + (8303, 'Nature\'s Salve', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 10377, 1), + (8304, 'Focus of Animus', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 10380, 1), + (8314, 'Fluid March', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 8314, 1), + (8317, 'Hastened Selo\'s Kick', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 8317, 1), + (8319, 'Hastened Bellow', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 8319, 1), + (8322, 'Belltone Mind', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 8322, 1), + (8325, 'Subtle Blows', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 8325, 1), + (8331, 'Enhanced Thief\'s Eyes', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 8331, 1), + (8332, 'Extended Languid Bite', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 8332, 1), + (8335, 'Quickened Malosinete', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 8335, 1), + (8341, 'Drape of Shadows', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 8341, 1), + (8342, 'Host in the Shell', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 8342, 1), + (8347, 'Hastened Mana Draw', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8347, 1), + (8350, 'Hastened Mezmerization', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8350, 1), + (8400, 'Self Preservation', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 10400, 1), + (8401, 'Hastened Frenzy', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 10401, 1), + (8402, 'Extended Havoc', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 10404, 1), + (8500, 'Healing Frenzy', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10450, 1), + (8501, 'Overpowering Strikes', -1, 6, 65535, 127, 131071, 0, 3, 0, 0, 10453, 1), + (8502, 'Quickened Blessing of Ressurection', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10456, 1), + (8503, 'Hastened Atonement', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10459, 1), + (8504, 'Improved Sanctuary', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10462, 1), + (8505, 'Blessing of Sanctuary', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10463, 1), + (8506, 'Hastened Celestial Hammer', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10464, 1), + (8600, 'Spirit of Eagle', -1, 40, 65535, 127, 131071, 0, 3, 0, 0, 10500, 1), + (8601, 'Flight of Eagles', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10501, 1), + (8602, 'Egress', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10502, 1), + (8603, 'Spirits of Nature', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10503, 1), + (8604, 'Wall of Wind', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10506, 1), + (8605, 'Hastened Spirit of the Wood', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10511, 1), + (8606, 'Hastened Convergence of Spirits', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10514, 1), + (8700, 'Beam of Slumber', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 10550, 1), + (8701, 'Phantasmic Reflex', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 10551, 1), + (8702, 'Friendly Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 10557, 1), + (8703, 'Hastened Self Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 10558, 1), + (8704, 'Forceful Banishment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 10561, 1), + (8708, 'Hastened Cascading Rage', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6908, 1), + (8800, 'Force of Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 10600, 1), + (8801, 'Aspect of Zomm', -1, 6144, 65535, 127, 131071, 0, 3, 0, 0, 10603, 1), + (8802, 'Extended Shared Health', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 10610, 1), + (8900, 'Agile Feet', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10650, 1), + (8901, 'Hastened Defensive Poses', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10653, 1), + (8902, 'Extended Impenetrable Discipline', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10656, 1), + (8903, 'Hastened Destructive Force', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10657, 1), + (9001, 'Reluctant Benevolence', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 10701, 1), + (9100, 'Bestow Divine Aura', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10752, 1), + (9101, 'Blessing of Purification', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10753, 1), + (9102, 'Sense the Dead', -1, 1030, 65535, 127, 131071, 0, 3, 0, 0, 10754, 1), + (9200, 'Hastened Auspice of the Hunter', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10800, 1), + (9201, 'Clenched Jaw', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10803, 1), + (9202, 'Scout\'s Mastery of Fire', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10806, 1), + (9203, 'Scout\'s Mastery of Ice', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10809, 1), + (9205, 'Scout\'s Mastery of Slashing', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10815, 1), + (9206, 'Scout\'s Mastery of Piercing', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10818, 1), + (9207, 'Scout\'s Mastery of Blunt Weapons', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10821, 1), + (9300, 'Massive Strike', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 10850, 1), + (9301, 'Strikethrough', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 10853, 1), + (9400, 'Hate\'s Attraction', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10900, 1), + (9401, 'Feigned Minion', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10903, 1), + (9402, 'Hastened Summon Remains', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10909, 1), + (9403, 'Visage of Death', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10912, 1), + (9404, 'Cascading Theft of Life', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10915, 1), + (9500, 'Extended Sloth', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 10950, 1), + (9501, 'Hastened Ancestral Aid', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 10951, 1), + (9502, 'Hastened Union of Spirits', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 10954, 1), + (9503, 'Group Shrink', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 10957, 1), + (9504, 'Inconspicuous Totem', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 10958, 1), + (9505, 'Extended Pestilence', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 10959, 1), + (9600, 'Hastened Taunt', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 11000, 1), + (9601, 'Extended Shield Reflect', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 11003, 1), + (9602, 'Extended Commanding Voice', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 11004, 1), + (9700, 'Hastened Destruction', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 11050, 1), + (9701, 'Netherstep', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 11055, 1), + (9702, 'Beam of Displacement', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 11056, 1), + (9703, 'Translocate', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 11057, 1), + (9704, 'Teleport', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 11058, 1), + (10367, 'Ageless Enmity', -1, 1, 65535, 127, 131071, 0, 2, 0, 0, 10367, 1), + (10389, 'Extended Trickery', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 10389, 1), + (10392, 'Ageless Enmity', -1, 20, 65535, 127, 131071, 0, 2, 0, 0, 10392, 1), + (10393, 'Shackles of Tunare', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10393, 1), + (10394, 'Beacon of the Righteous', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10394, 1), + (10395, 'Bobbing Corpse', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10395, 1), + (10396, 'Group Spirit of the White Wolf', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10396, 1), + (10397, 'Group Spirit of the Black Wolf', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10397, 1), + (10405, 'Hastened Deflection Discipline', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 10405, 1), + (10410, 'Rogue Triple Attack Skillup Test', -1, 256, 65535, 127, 131071, 0, 3, 0, 1, 10410, 1), + (10413, 'Hastened Host of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 10413, 1), + (10424, 'Hand of Ro', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10424, 1), + (10425, 'Fixation of Ro', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10425, 1), + (10426, 'Peaceful Spirit of the Wood', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10426, 1), + (10427, 'Peaceful Convergence of Spirits', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10427, 1), + (10434, 'Quickened Army of the Dead', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 10434, 1), + (11073, 'Playing Possum', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 11073, 1), + (11074, 'Cat-like Reflexes', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 11074, 1), + (11077, 'Hastened Bite of the Asp', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 11077, 1), + (11078, 'Hastened Gorilla Smash', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 11078, 1), + (11079, 'Hastened Raven\'s Claw', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 11079, 1), + (11080, 'Chameleon Strike', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 11080, 1), + (11085, 'Two Hands, No Mercy!', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 11085, 1), + (11088, 'Hastened Cry of Battle', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 11088, 1), + (12600, 'Hastened Frenzied Stabbing', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 12600, 1), + (12603, 'Extended Frenzied Stabbing Discipline', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 12603, 1), + (12606, 'Speed of the Scoundrel', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 12606, 1), + (12607, 'Hastened Pinpoint', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 12607, 1), + (12615, 'Hastened Twisted Chance Discipline', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 12615, 1), + (15073, 'Banestrike', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 15073, 1), + (15074, 'Hastened Banestrike', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 15074, 1), + (30050, 'Unknown AA 30050', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 30050, 1), + (30100, 'Unknown AA 30100', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 30100, 1), + (30150, 'Unknown AA 30150', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 30150, 1), + (30175, 'Unknown AA 30175', 2, 65335, 65535, 127, 131071, 0, 4, 0, 1, 30175, 1), + (30180, 'Unknown AA 30180', 2, 128, 65535, 127, 131071, 0, 4, 0, 1, 30180, 1), + (30185, 'Unknown AA 30185', 2, 64, 65535, 127, 131071, 0, 4, 0, 1, 30185, 1), + (30190, 'Unknown AA 30190', 2, 8, 65535, 127, 131071, 0, 4, 0, 1, 30190, 1), + (30195, 'Unknown AA 30195', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 30195, 1); + +DROP TABLE IF EXISTS `aa_ranks`; +CREATE TABLE IF NOT EXISTS `aa_ranks` ( + `id` int(10) unsigned NOT NULL, + `upper_hotkey_sid` int(10) NOT NULL DEFAULT '-1', + `lower_hotkey_sid` int(10) NOT NULL DEFAULT '-1', + `title_sid` int(10) NOT NULL DEFAULT '-1', + `desc_sid` int(10) NOT NULL DEFAULT '-1', + `cost` int(10) NOT NULL DEFAULT '1', + `level_req` int(10) NOT NULL DEFAULT '51', + `spell` int(10) NOT NULL DEFAULT '-1', + `spell_type` int(10) NOT NULL DEFAULT '0', + `recast_time` int(10) NOT NULL DEFAULT '0', + `expansion` int(10) NOT NULL DEFAULT '0', + `prev_id` int(10) NOT NULL DEFAULT '-1', + `next_id` int(10) NOT NULL DEFAULT '-1', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO `aa_ranks` (`id`, `upper_hotkey_sid`, `lower_hotkey_sid`, `title_sid`, `desc_sid`, `cost`, `level_req`, `spell`, `spell_type`, `recast_time`, `expansion`, `prev_id`, `next_id`) VALUES + (2, -1, -1, 2, 2, 1, 51, -1, 0, 0, 3, -1, 3), + (3, -1, -1, 2, 2, 1, 51, -1, 0, 0, 3, 2, 4), + (4, -1, -1, 2, 2, 1, 51, -1, 0, 0, 3, 3, 5), + (5, -1, -1, 2, 2, 1, 51, -1, 0, 0, 3, 4, 6), + (6, -1, -1, 2, 2, 1, 51, -1, 0, 0, 3, 5, 292), + (7, -1, -1, 7, 7, 1, 51, -1, 0, 0, 3, -1, 8), + (8, -1, -1, 7, 7, 1, 51, -1, 0, 0, 3, 7, 9), + (9, -1, -1, 7, 7, 1, 51, -1, 0, 0, 3, 8, 10), + (10, -1, -1, 7, 7, 1, 51, -1, 0, 0, 3, 9, 11), + (11, -1, -1, 7, 7, 1, 51, -1, 0, 0, 3, 10, 302), + (12, -1, -1, 12, 12, 1, 51, -1, 0, 0, 3, -1, 13), + (13, -1, -1, 12, 12, 1, 51, -1, 0, 0, 3, 12, 14), + (14, -1, -1, 12, 12, 1, 51, -1, 0, 0, 3, 13, 15), + (15, -1, -1, 12, 12, 1, 51, -1, 0, 0, 3, 14, 16), + (16, -1, -1, 12, 12, 1, 51, -1, 0, 0, 3, 15, 312), + (17, -1, -1, 17, 17, 1, 51, -1, 0, 0, 3, -1, 18), + (18, -1, -1, 17, 17, 1, 51, -1, 0, 0, 3, 17, 19), + (19, -1, -1, 17, 17, 1, 51, -1, 0, 0, 3, 18, 20), + (20, -1, -1, 17, 17, 1, 51, -1, 0, 0, 3, 19, 21), + (21, -1, -1, 17, 17, 1, 51, -1, 0, 0, 3, 20, 322), + (22, -1, -1, 22, 22, 1, 51, -1, 0, 0, 3, -1, 23), + (23, -1, -1, 22, 22, 1, 51, -1, 0, 0, 3, 22, 24), + (24, -1, -1, 22, 22, 1, 51, -1, 0, 0, 3, 23, 25), + (25, -1, -1, 22, 22, 1, 51, -1, 0, 0, 3, 24, 26), + (26, -1, -1, 22, 22, 1, 51, -1, 0, 0, 3, 25, 332), + (27, -1, -1, 27, 27, 1, 51, -1, 0, 0, 3, -1, 28), + (28, -1, -1, 27, 27, 1, 51, -1, 0, 0, 3, 27, 29), + (29, -1, -1, 27, 27, 1, 51, -1, 0, 0, 3, 28, 30), + (30, -1, -1, 27, 27, 1, 51, -1, 0, 0, 3, 29, 31), + (31, -1, -1, 27, 27, 1, 51, -1, 0, 0, 3, 30, 342), + (32, -1, -1, 32, 32, 1, 51, -1, 0, 0, 3, -1, 33), + (33, -1, -1, 32, 32, 1, 51, -1, 0, 0, 3, 32, 34), + (34, -1, -1, 32, 32, 1, 51, -1, 0, 0, 3, 33, 35), + (35, -1, -1, 32, 32, 1, 51, -1, 0, 0, 3, 34, 36), + (36, -1, -1, 32, 32, 1, 51, -1, 0, 0, 3, 35, 352), + (37, -1, -1, 37, 37, 1, 51, -1, 0, 0, 3, -1, 38), + (38, -1, -1, 37, 37, 1, 51, -1, 0, 0, 3, 37, 39), + (39, -1, -1, 37, 37, 1, 51, -1, 0, 0, 3, 38, 40), + (40, -1, -1, 37, 37, 1, 51, -1, 0, 0, 3, 39, 41), + (41, -1, -1, 37, 37, 1, 51, -1, 0, 0, 3, 40, 362), + (42, -1, -1, 42, 42, 1, 51, -1, 0, 0, 3, -1, 43), + (43, -1, -1, 42, 42, 1, 51, -1, 0, 0, 3, 42, 44), + (44, -1, -1, 42, 42, 1, 51, -1, 0, 0, 3, 43, 45), + (45, -1, -1, 42, 42, 1, 51, -1, 0, 0, 3, 44, 46), + (46, -1, -1, 42, 42, 1, 51, -1, 0, 0, 3, 45, 372), + (47, -1, -1, 47, 47, 1, 51, -1, 0, 0, 3, -1, 48), + (48, -1, -1, 47, 47, 1, 51, -1, 0, 0, 3, 47, 49), + (49, -1, -1, 47, 47, 1, 51, -1, 0, 0, 3, 48, 50), + (50, -1, -1, 47, 47, 1, 51, -1, 0, 0, 3, 49, 51), + (51, -1, -1, 47, 47, 1, 51, -1, 0, 0, 3, 50, 382), + (52, -1, -1, 52, 52, 1, 51, -1, 0, 0, 3, -1, 53), + (53, -1, -1, 52, 52, 1, 51, -1, 0, 0, 3, 52, 54), + (54, -1, -1, 52, 52, 1, 51, -1, 0, 0, 3, 53, 55), + (55, -1, -1, 52, 52, 1, 51, -1, 0, 0, 3, 54, 56), + (56, -1, -1, 52, 52, 1, 51, -1, 0, 0, 3, 55, 392), + (57, -1, -1, 57, 57, 1, 51, -1, 0, 0, 3, -1, 58), + (58, -1, -1, 57, 57, 1, 51, -1, 0, 0, 3, 57, 59), + (59, -1, -1, 57, 57, 1, 51, -1, 0, 0, 3, 58, 60), + (60, -1, -1, 57, 57, 1, 51, -1, 0, 0, 3, 59, 61), + (61, -1, -1, 57, 57, 1, 51, -1, 0, 0, 3, 60, 402), + (62, -1, -1, 62, 62, 1, 51, -1, 0, 0, 3, -1, 63), + (63, -1, -1, 62, 62, 1, 51, -1, 0, 0, 3, 62, 64), + (64, -1, -1, 62, 62, 1, 51, -1, 0, 0, 3, 63, 672), + (68, -1, -1, 68, 68, 1, 51, -1, 0, 0, 3, -1, 69), + (69, -1, -1, 68, 68, 1, 51, -1, 0, 0, 3, 68, 70), + (70, -1, -1, 68, 68, 1, 51, -1, 0, 0, 3, 69, -1), + (71, -1, -1, 71, 71, 1, 51, -1, 0, 0, 3, -1, 72), + (72, -1, -1, 71, 71, 1, 51, -1, 0, 0, 3, 71, 73), + (73, -1, -1, 71, 71, 1, 51, -1, 0, 0, 3, 72, 676), + (74, -1, -1, 74, 74, 1, 51, -1, 0, 0, 3, -1, 75), + (75, -1, -1, 74, 74, 1, 51, -1, 0, 0, 3, 74, 76), + (76, -1, -1, 74, 74, 1, 51, -1, 0, 0, 3, 75, -1), + (77, -1, -1, 77, 77, 2, 55, -1, 0, 0, 3, -1, 78), + (78, -1, -1, 77, 77, 4, 55, -1, 0, 0, 3, 77, 79), + (79, -1, -1, 77, 77, 6, 55, -1, 0, 0, 3, 78, 434), + (80, -1, -1, 80, 80, 2, 55, -1, 0, 0, 3, -1, 81), + (81, -1, -1, 80, 80, 4, 55, -1, 0, 0, 3, 80, 82), + (82, -1, -1, 80, 80, 6, 55, -1, 0, 0, 3, 81, 437), + (83, -1, -1, 83, 83, 2, 55, -1, 0, 0, 3, -1, 84), + (84, -1, -1, 83, 83, 4, 55, -1, 0, 0, 3, 83, 85), + (85, -1, -1, 83, 83, 6, 55, -1, 0, 0, 3, 84, 13099), + (86, -1, -1, 86, 86, 2, 55, -1, 0, 0, 3, -1, 87), + (87, -1, -1, 86, 86, 4, 55, -1, 0, 0, 3, 86, 88), + (88, -1, -1, 86, 86, 6, 55, -1, 0, 0, 3, 87, 266), + (92, -1, -1, 92, 92, 2, 55, -1, 0, 0, 3, -1, 93), + (93, -1, -1, 92, 92, 4, 55, -1, 0, 0, 3, 92, 94), + (94, -1, -1, 92, 92, 6, 55, -1, 0, 0, 3, 93, -1), + (98, -1, -1, 98, 98, 2, 55, -1, 0, 0, 3, -1, 99), + (99, -1, -1, 98, 98, 4, 55, -1, 0, 0, 3, 98, 100), + (100, -1, -1, 98, 98, 6, 55, -1, 0, 0, 3, 99, 4767), + (101, -1, -1, 101, 101, 2, 55, -1, 0, 0, 3, -1, 102), + (102, -1, -1, 101, 101, 4, 55, -1, 0, 0, 3, 101, 103), + (103, -1, -1, 101, 101, 6, 55, -1, 0, 0, 3, 102, -1), + (104, -1, -1, 104, 104, 2, 55, -1, 0, 0, 3, -1, 105), + (105, -1, -1, 104, 104, 4, 55, -1, 0, 0, 3, 104, 106), + (106, -1, -1, 104, 104, 6, 55, -1, 0, 0, 3, 105, -1), + (107, -1, -1, 107, 107, 2, 55, -1, 0, 0, 3, -1, 108), + (108, -1, -1, 107, 107, 4, 55, -1, 0, 0, 3, 107, 109), + (109, -1, -1, 107, 107, 6, 55, -1, 0, 0, 3, 108, 7541), + (110, -1, -1, 110, 110, 2, 55, -1, 0, 0, 3, -1, 111), + (111, -1, -1, 110, 110, 4, 55, -1, 0, 0, 3, 110, 112), + (112, -1, -1, 110, 110, 6, 55, -1, 0, 0, 3, 111, -1), + (113, -1, -1, 113, 113, 2, 55, -1, 0, 0, 3, -1, 114), + (114, -1, -1, 113, 113, 4, 55, -1, 0, 0, 3, 113, 115), + (115, -1, -1, 113, 113, 6, 55, -1, 0, 0, 3, 114, 443), + (116, -1, -1, 116, 116, 2, 55, -1, 0, 0, 3, -1, 117), + (117, -1, -1, 116, 116, 4, 55, -1, 0, 0, 3, 116, 118), + (118, -1, -1, 116, 116, 6, 55, -1, 0, 0, 3, 117, -1), + (119, -1, -1, 119, 119, 2, 55, -1, 0, 0, 3, -1, 120), + (120, -1, -1, 119, 119, 4, 55, -1, 0, 0, 3, 119, 121), + (121, -1, -1, 119, 119, 6, 55, -1, 0, 0, 3, 120, 440), + (122, -1, -1, 122, 122, 2, 55, -1, 0, 0, 3, -1, 123), + (123, -1, -1, 122, 122, 4, 55, -1, 0, 0, 3, 122, 124), + (124, -1, -1, 122, 122, 6, 55, -1, 0, 0, 3, 123, 454), + (125, -1, -1, 125, 125, 2, 55, -1, 0, 0, 3, -1, 126), + (126, -1, -1, 125, 125, 4, 55, -1, 0, 0, 3, 125, 127), + (127, -1, -1, 125, 125, 6, 55, -1, 0, 0, 3, 126, 449), + (128, 128, 128, 128, 128, 9, 59, 5228, 1, 4320, 3, -1, -1), + (129, 129, 129, 129, 129, 5, 59, 2738, 2, 64800, 3, -1, -1), + (130, 130, 130, 130, 130, 3, 59, 2739, 3, 7, 3, -1, -1), + (131, 131, 131, 131, 131, 5, 59, 2740, 4, 900, 3, -1, 531), + (132, 132, 132, 132, 132, 6, 59, 2741, 5, 600, 3, -1, -1), + (136, 136, -1, 136, 136, 5, 59, 2742, 7, 1800, 3, -1, 15341), + (137, -1, -1, 137, 137, 3, 59, -1, 0, 0, 3, -1, 138), + (138, -1, -1, 137, 137, 6, 59, -1, 0, 0, 3, 137, 139), + (139, -1, -1, 137, 137, 9, 59, -1, 0, 0, 3, 138, -1), + (140, 140, -1, 140, 140, 6, 59, 2771, 3, 4320, 3, -1, -1), + (141, -1, -1, 141, 12863, 3, 59, -1, 0, 0, 3, -1, 142), + (142, -1, -1, 141, 12863, 6, 59, -1, 0, 0, 3, 141, 143), + (143, -1, -1, 141, 12863, 9, 59, -1, 0, 0, 3, 142, 12863), + (144, -1, -1, 144, 144, 5, 59, -1, 0, 0, 3, -1, -1), + (145, 145, 145, 145, 145, 9, 59, 2761, 2, 4320, 3, -1, -1), + (146, 146, 146, 146, 146, 5, 59, 2749, 2, 180, 3, -1, 5069), + (147, -1, -1, 147, 147, 3, 59, -1, 0, 0, 3, -1, 148), + (148, -1, -1, 147, 147, 6, 59, -1, 0, 0, 3, 147, 149), + (149, -1, -1, 147, 147, 9, 59, -1, 0, 0, 3, 148, -1), + (150, -1, -1, 150, 150, 3, 59, -1, 0, 0, 3, -1, 151), + (151, -1, -1, 150, 150, 6, 59, -1, 0, 0, 3, 150, 152), + (152, -1, -1, 150, 150, 9, 59, -1, 0, 0, 3, 151, -1), + (153, 153, 153, 153, 153, 5, 59, 2750, 3, 2160, 3, -1, 1519), + (155, 155, 155, 155, 155, 9, 59, 2758, 8, 60, 3, -1, 533), + (156, 156, 156, 156, 156, 6, 59, 2734, 2, 4320, 3, -1, -1), + (158, -1, -1, 158, 158, 3, 59, -1, 0, 0, 3, -1, -1), + (159, -1, -1, 159, 159, 2, 59, -1, 0, 0, 3, -1, 160), + (160, -1, -1, 159, 159, 4, 59, -1, 0, 0, 3, 159, 161), + (161, -1, -1, 159, 159, 6, 59, -1, 0, 0, 3, 160, -1), + (162, 162, 162, 162, 162, 5, 59, 2753, 3, 8640, 3, -1, -1), + (163, 163, 163, 163, 163, 5, 59, 2752, 2, 2160, 3, -1, -1), + (167, 167, 167, 167, 167, 6, 59, 2754, 14, 900, 3, -1, 5879), + (168, 168, 168, 168, 168, 3, 59, 2795, 4, 10, 3, -1, 169), + (169, 168, 168, 168, 168, 6, 59, 2796, 4, 10, 3, 168, 170), + (170, 168, 168, 168, 168, 9, 59, 2797, 4, 10, 3, 169, 15241), + (171, 171, 171, 171, 171, 3, 59, 2798, 4, 10, 3, -1, 172), + (172, 171, 171, 171, 171, 6, 59, 2799, 4, 10, 3, 171, 173), + (173, 171, 171, 171, 171, 9, 59, 2800, 4, 10, 3, 172, 15244), + (174, 174, 174, 174, 174, 3, 59, 2792, 4, 10, 3, -1, 175), + (175, 174, 174, 174, 174, 6, 59, 2793, 4, 10, 3, 174, 176), + (176, 174, 174, 174, 174, 9, 59, 2794, 4, 10, 3, 175, 15247), + (177, 177, 177, 177, 177, 3, 59, 2789, 4, 10, 3, -1, 178), + (178, 177, 177, 177, 177, 6, 59, 2790, 4, 10, 3, 177, 179), + (179, 177, 177, 177, 177, 9, 59, 2791, 4, 10, 3, 178, 15250), + (182, -1, -1, 182, 182, 5, 59, -1, 0, 0, 3, -1, -1), + (183, 183, 183, 183, 183, 9, 59, 2755, 4, 8640, 3, -1, -1), + (184, 184, 184, 184, 184, 3, 59, 2756, 5, 4320, 3, -1, 5953), + (185, 185, 185, 185, 185, 5, 59, 2757, 6, 4320, 3, -1, -1), + (186, 186, 186, 186, 186, 3, 59, 2772, 7, 7, 3, -1, -1), + (187, 187, 187, 187, 187, 6, 59, 2764, 8, 4320, 3, -1, -1), + (188, 188, 188, 188, 188, 9, 59, 2190, 2, 30, 3, -1, 1277), + (190, -1, -1, 190, 190, 3, 59, -1, 0, 0, 3, -1, 191), + (191, -1, -1, 190, 190, 6, 59, -1, 0, 0, 3, 190, 192), + (192, -1, -1, 190, 190, 9, 59, -1, 0, 0, 3, 191, 1524), + (193, 193, 193, 193, 193, 3, 59, 2775, 3, 4320, 3, -1, -1), + (194, 194, 194, 194, 194, 5, 59, 2874, 0, 1, 3, -1, -1), + (195, -1, -1, 195, 195, 6, 59, -1, 0, 0, 3, -1, -1), + (196, -1, -1, 196, 196, 6, 59, -1, 0, 0, 3, -1, -1), + (197, 197, 197, 197, 197, 5, 59, 2765, 2, 7, 3, -1, -1), + (198, -1, -1, 198, 198, 9, 59, -1, 0, 0, 3, -1, -1), + (199, -1, -1, 199, 199, 3, 59, -1, 0, 0, 3, -1, 200), + (200, -1, -1, 199, 199, 6, 59, -1, 0, 0, 3, 199, 201), + (201, -1, -1, 199, 199, 9, 59, -1, 0, 0, 3, 200, 12507), + (205, -1, -1, 205, 205, 9, 59, -1, 0, 0, 3, -1, -1), + (206, 206, 206, 206, 206, 5, 59, 2875, 0, 1, 3, -1, -1), + (208, 208, 208, 208, 208, 6, 59, 2766, 2, 4320, 3, -1, -1), + (210, -1, -1, 210, 210, 3, 59, -1, 0, 0, 3, -1, 211), + (211, -1, -1, 210, 210, 6, 59, -1, 0, 0, 3, 210, 212), + (212, -1, -1, 210, 210, 9, 59, -1, 0, 0, 3, 211, 1316), + (213, -1, -1, 213, 213, 3, 59, -1, 0, 0, 3, -1, 214), + (214, -1, -1, 213, 213, 6, 59, -1, 0, 0, 3, 213, 215), + (215, -1, -1, 213, 213, 9, 59, -1, 0, 0, 3, 214, 700), + (225, -1, -1, 225, 225, 3, 59, -1, 0, 0, 3, -1, 226), + (226, -1, -1, 225, 225, 6, 59, -1, 0, 0, 3, 225, 227), + (227, -1, -1, 225, 225, 9, 59, -1, 0, 0, 3, 226, -1), + (230, -1, -1, 230, 230, 3, 59, -1, 0, 0, 3, -1, 231), + (231, -1, -1, 230, 230, 6, 59, -1, 0, 0, 3, 230, 232), + (232, -1, -1, 230, 230, 9, 59, -1, 0, 0, 3, 231, 539), + (233, 233, 233, 233, 233, 9, 59, 5248, 1, 1800, 3, -1, -1), + (237, -1, -1, 237, 237, 3, 59, -1, 0, 0, 3, -1, 238), + (238, -1, -1, 237, 237, 6, 59, -1, 0, 0, 3, 237, 239), + (239, -1, -1, 237, 237, 9, 59, -1, 0, 0, 3, 238, -1), + (240, -1, -1, 240, 240, 3, 59, -1, 0, 0, 3, -1, 241), + (241, -1, -1, 240, 240, 6, 59, -1, 0, 0, 3, 240, 242), + (242, -1, -1, 240, 240, 9, 59, -1, 0, 0, 3, 241, -1), + (243, 243, -1, 243, 243, 9, 59, 5244, 1, 1440, 3, -1, -1), + (244, -1, -1, 244, 244, 3, 59, -1, 0, 0, 3, -1, 245), + (245, -1, -1, 244, 244, 6, 59, -1, 0, 0, 3, 244, 246), + (246, -1, -1, 244, 244, 9, 59, -1, 0, 0, 3, 245, 8328), + (247, -1, -1, 247, 247, 3, 59, -1, 0, 0, 3, -1, 248), + (248, -1, -1, 247, 247, 6, 59, -1, 0, 0, 3, 247, 249), + (249, -1, -1, 247, 247, 9, 59, -1, 0, 0, 3, 248, 504), + (254, 254, 254, 254, 254, 5, 59, 5232, 12, 4320, 3, -1, -1), + (255, -1, -1, 255, 255, 3, 59, -1, 0, 0, 3, -1, 256), + (256, -1, -1, 255, 255, 6, 59, -1, 0, 0, 3, 255, 257), + (257, -1, -1, 255, 255, 9, 59, -1, 0, 0, 3, 256, 542), + (258, 258, -1, 258, 258, 5, 59, 5233, 1, 600, 3, -1, 10578), + (259, 259, 259, 259, 259, 5, 59, 5234, 2, 900, 3, -1, -1), + (260, 260, -1, 260, 260, 3, 59, 5229, 3, 2160, 3, -1, 261), + (261, 260, -1, 260, 260, 6, 59, 5230, 3, 2160, 3, 260, 262), + (262, 260, -1, 260, 260, 9, 59, 5231, 3, 2160, 3, 261, 8309), + (263, -1, -1, 263, 263, 3, 59, -1, 0, 0, 3, -1, 264), + (264, -1, -1, 263, 263, 6, 59, -1, 0, 0, 3, 263, 265), + (265, -1, -1, 263, 263, 9, 59, -1, 0, 0, 3, 264, -1), + (266, -1, -1, 86, 86, 8, 59, -1, 0, 0, 3, 88, 10467), + (267, -1, -1, 267, 267, 3, 59, -1, 0, 0, 3, -1, 268), + (268, -1, -1, 267, 267, 6, 59, -1, 0, 0, 3, 267, 269), + (269, -1, -1, 267, 267, 9, 59, -1, 0, 0, 3, 268, 640), + (273, -1, -1, 273, 273, 5, 59, 2767, 0, 0, 3, -1, -1), + (274, 274, 274, 274, 274, 5, 59, 2748, 4, 4320, 3, -1, -1), + (275, -1, -1, 275, 275, 3, 59, -1, 0, 0, 3, -1, 276), + (276, -1, -1, 275, 275, 6, 59, -1, 0, 0, 3, 275, 277), + (277, -1, -1, 275, 275, 9, 59, -1, 0, 0, 3, 276, 701), + (278, -1, -1, 278, 278, 5, 59, -1, 0, 0, 3, -1, -1), + (279, -1, -1, 279, 279, 5, 59, -1, 0, 0, 3, -1, 18972), + (280, -1, -1, 280, 280, 3, 59, -1, 0, 0, 3, -1, 281), + (281, -1, -1, 280, 280, 6, 59, -1, 0, 0, 3, 280, 282), + (282, -1, -1, 280, 280, 9, 59, -1, 0, 0, 3, 281, -1), + (283, -1, -1, 283, 283, 3, 59, -1, 0, 0, 3, -1, 284), + (284, -1, -1, 283, 283, 6, 59, -1, 0, 0, 3, 283, 285), + (285, -1, -1, 283, 283, 9, 59, -1, 0, 0, 3, 284, -1), + (286, -1, -1, 286, 286, 3, 59, -1, 0, 0, 3, -1, -1), + (287, -1, -1, 287, 287, 6, 59, -1, 0, 0, 3, -1, -1), + (288, -1, -1, 288, 288, 6, 59, -1, 0, 0, 3, -1, -1), + (289, 289, 289, 289, 289, 5, 59, 3290, 3, 300, 3, -1, 1607), + (290, 290, 290, 290, 290, 4, 59, 3289, 4, 720, 3, -1, 13173), + (291, 291, 291, 291, 291, 6, 59, 3291, 5, 900, 3, -1, 1123), + (292, -1, -1, 2, 2, 1, 61, -1, 0, 0, 4, 6, 293), + (293, -1, -1, 2, 2, 1, 61, -1, 0, 0, 4, 292, 294), + (294, -1, -1, 2, 2, 1, 62, -1, 0, 0, 4, 293, 295), + (295, -1, -1, 2, 2, 1, 62, -1, 0, 0, 4, 294, 296), + (296, -1, -1, 2, 2, 1, 63, -1, 0, 0, 4, 295, 297), + (297, -1, -1, 2, 2, 1, 63, -1, 0, 0, 4, 296, 298), + (298, -1, -1, 2, 2, 1, 64, -1, 0, 0, 4, 297, 299), + (299, -1, -1, 2, 2, 1, 64, -1, 0, 0, 4, 298, 300), + (300, -1, -1, 2, 2, 1, 65, -1, 0, 0, 4, 299, 301), + (301, -1, -1, 2, 2, 1, 65, -1, 0, 0, 4, 300, -1), + (302, -1, -1, 7, 7, 1, 61, -1, 0, 0, 4, 11, 303), + (303, -1, -1, 7, 7, 1, 61, -1, 0, 0, 4, 302, 304), + (304, -1, -1, 7, 7, 1, 62, -1, 0, 0, 4, 303, 305), + (305, -1, -1, 7, 7, 1, 62, -1, 0, 0, 4, 304, 306), + (306, -1, -1, 7, 7, 1, 63, -1, 0, 0, 4, 305, 307), + (307, -1, -1, 7, 7, 1, 63, -1, 0, 0, 4, 306, 308), + (308, -1, -1, 7, 7, 1, 64, -1, 0, 0, 4, 307, 309), + (309, -1, -1, 7, 7, 1, 64, -1, 0, 0, 4, 308, 310), + (310, -1, -1, 7, 7, 1, 65, -1, 0, 0, 4, 309, 311), + (311, -1, -1, 7, 7, 1, 65, -1, 0, 0, 4, 310, -1), + (312, -1, -1, 12, 12, 1, 61, -1, 0, 0, 4, 16, 313), + (313, -1, -1, 12, 12, 1, 61, -1, 0, 0, 4, 312, 314), + (314, -1, -1, 12, 12, 1, 62, -1, 0, 0, 4, 313, 315), + (315, -1, -1, 12, 12, 1, 62, -1, 0, 0, 4, 314, 316), + (316, -1, -1, 12, 12, 1, 63, -1, 0, 0, 4, 315, 317), + (317, -1, -1, 12, 12, 1, 63, -1, 0, 0, 4, 316, 318), + (318, -1, -1, 12, 12, 1, 64, -1, 0, 0, 4, 317, 319), + (319, -1, -1, 12, 12, 1, 64, -1, 0, 0, 4, 318, 320), + (320, -1, -1, 12, 12, 1, 65, -1, 0, 0, 4, 319, 321), + (321, -1, -1, 12, 12, 1, 65, -1, 0, 0, 4, 320, -1), + (322, -1, -1, 17, 17, 1, 61, -1, 0, 0, 4, 21, 323), + (323, -1, -1, 17, 17, 1, 61, -1, 0, 0, 4, 322, 324), + (324, -1, -1, 17, 17, 1, 62, -1, 0, 0, 4, 323, 325), + (325, -1, -1, 17, 17, 1, 62, -1, 0, 0, 4, 324, 326), + (326, -1, -1, 17, 17, 1, 63, -1, 0, 0, 4, 325, 327), + (327, -1, -1, 17, 17, 1, 63, -1, 0, 0, 4, 326, 328), + (328, -1, -1, 17, 17, 1, 64, -1, 0, 0, 4, 327, 329), + (329, -1, -1, 17, 17, 1, 64, -1, 0, 0, 4, 328, 330), + (330, -1, -1, 17, 17, 1, 65, -1, 0, 0, 4, 329, 331), + (331, -1, -1, 17, 17, 1, 65, -1, 0, 0, 4, 330, -1), + (332, -1, -1, 22, 22, 1, 61, -1, 0, 0, 4, 26, 333), + (333, -1, -1, 22, 22, 1, 61, -1, 0, 0, 4, 332, 334), + (334, -1, -1, 22, 22, 1, 62, -1, 0, 0, 4, 333, 335), + (335, -1, -1, 22, 22, 1, 62, -1, 0, 0, 4, 334, 336), + (336, -1, -1, 22, 22, 1, 63, -1, 0, 0, 4, 335, 337), + (337, -1, -1, 22, 22, 1, 63, -1, 0, 0, 4, 336, 338), + (338, -1, -1, 22, 22, 1, 64, -1, 0, 0, 4, 337, 339), + (339, -1, -1, 22, 22, 1, 64, -1, 0, 0, 4, 338, 340), + (340, -1, -1, 22, 22, 1, 65, -1, 0, 0, 4, 339, 341), + (341, -1, -1, 22, 22, 1, 65, -1, 0, 0, 4, 340, -1), + (342, -1, -1, 27, 27, 1, 61, -1, 0, 0, 4, 31, 343), + (343, -1, -1, 27, 27, 1, 61, -1, 0, 0, 4, 342, 344), + (344, -1, -1, 27, 27, 1, 62, -1, 0, 0, 4, 343, 345), + (345, -1, -1, 27, 27, 1, 62, -1, 0, 0, 4, 344, 346), + (346, -1, -1, 27, 27, 1, 63, -1, 0, 0, 4, 345, 347), + (347, -1, -1, 27, 27, 1, 63, -1, 0, 0, 4, 346, 348), + (348, -1, -1, 27, 27, 1, 64, -1, 0, 0, 4, 347, 349), + (349, -1, -1, 27, 27, 1, 64, -1, 0, 0, 4, 348, 350), + (350, -1, -1, 27, 27, 1, 65, -1, 0, 0, 4, 349, 351), + (351, -1, -1, 27, 27, 1, 65, -1, 0, 0, 4, 350, -1), + (352, -1, -1, 32, 32, 1, 61, -1, 0, 0, 4, 36, 353), + (353, -1, -1, 32, 32, 1, 61, -1, 0, 0, 4, 352, 354), + (354, -1, -1, 32, 32, 1, 62, -1, 0, 0, 4, 353, 355), + (355, -1, -1, 32, 32, 1, 62, -1, 0, 0, 4, 354, 356), + (356, -1, -1, 32, 32, 1, 63, -1, 0, 0, 4, 355, 357), + (357, -1, -1, 32, 32, 1, 63, -1, 0, 0, 4, 356, 358), + (358, -1, -1, 32, 32, 1, 64, -1, 0, 0, 4, 357, 359), + (359, -1, -1, 32, 32, 1, 64, -1, 0, 0, 4, 358, 360), + (360, -1, -1, 32, 32, 1, 65, -1, 0, 0, 4, 359, 361), + (361, -1, -1, 32, 32, 1, 65, -1, 0, 0, 4, 360, -1), + (362, -1, -1, 37, 37, 1, 61, -1, 0, 0, 4, 41, 363), + (363, -1, -1, 37, 37, 1, 61, -1, 0, 0, 4, 362, 364), + (364, -1, -1, 37, 37, 1, 62, -1, 0, 0, 4, 363, 365), + (365, -1, -1, 37, 37, 1, 62, -1, 0, 0, 4, 364, 366), + (366, -1, -1, 37, 37, 1, 63, -1, 0, 0, 4, 365, 367), + (367, -1, -1, 37, 37, 1, 63, -1, 0, 0, 4, 366, 368), + (368, -1, -1, 37, 37, 1, 64, -1, 0, 0, 4, 367, 369), + (369, -1, -1, 37, 37, 1, 64, -1, 0, 0, 4, 368, 370), + (370, -1, -1, 37, 37, 1, 65, -1, 0, 0, 4, 369, 371), + (371, -1, -1, 37, 37, 1, 65, -1, 0, 0, 4, 370, -1), + (372, -1, -1, 42, 42, 1, 61, -1, 0, 0, 4, 46, 373), + (373, -1, -1, 42, 42, 1, 61, -1, 0, 0, 4, 372, 374), + (374, -1, -1, 42, 42, 1, 62, -1, 0, 0, 4, 373, 375), + (375, -1, -1, 42, 42, 1, 62, -1, 0, 0, 4, 374, 376), + (376, -1, -1, 42, 42, 1, 63, -1, 0, 0, 4, 375, 377), + (377, -1, -1, 42, 42, 1, 63, -1, 0, 0, 4, 376, 378), + (378, -1, -1, 42, 42, 1, 64, -1, 0, 0, 4, 377, 379), + (379, -1, -1, 42, 42, 1, 64, -1, 0, 0, 4, 378, 380), + (380, -1, -1, 42, 42, 1, 65, -1, 0, 0, 4, 379, 381), + (381, -1, -1, 42, 42, 1, 65, -1, 0, 0, 4, 380, -1), + (382, -1, -1, 47, 47, 1, 61, -1, 0, 0, 4, 51, 383), + (383, -1, -1, 47, 47, 1, 61, -1, 0, 0, 4, 382, 384), + (384, -1, -1, 47, 47, 1, 62, -1, 0, 0, 4, 383, 385), + (385, -1, -1, 47, 47, 1, 62, -1, 0, 0, 4, 384, 386), + (386, -1, -1, 47, 47, 1, 63, -1, 0, 0, 4, 385, 387), + (387, -1, -1, 47, 47, 1, 63, -1, 0, 0, 4, 386, 388), + (388, -1, -1, 47, 47, 1, 64, -1, 0, 0, 4, 387, 389), + (389, -1, -1, 47, 47, 1, 64, -1, 0, 0, 4, 388, 390), + (390, -1, -1, 47, 47, 1, 65, -1, 0, 0, 4, 389, 391), + (391, -1, -1, 47, 47, 1, 65, -1, 0, 0, 4, 390, -1), + (392, -1, -1, 52, 52, 1, 61, -1, 0, 0, 4, 56, 393), + (393, -1, -1, 52, 52, 1, 61, -1, 0, 0, 4, 392, 394), + (394, -1, -1, 52, 52, 1, 62, -1, 0, 0, 4, 393, 395), + (395, -1, -1, 52, 52, 1, 62, -1, 0, 0, 4, 394, 396), + (396, -1, -1, 52, 52, 1, 63, -1, 0, 0, 4, 395, 397), + (397, -1, -1, 52, 52, 1, 63, -1, 0, 0, 4, 396, 398), + (398, -1, -1, 52, 52, 1, 64, -1, 0, 0, 4, 397, 399), + (399, -1, -1, 52, 52, 1, 64, -1, 0, 0, 4, 398, 400), + (400, -1, -1, 52, 52, 1, 65, -1, 0, 0, 4, 399, 401), + (401, -1, -1, 52, 52, 1, 65, -1, 0, 0, 4, 400, -1), + (402, -1, -1, 57, 57, 1, 61, -1, 0, 0, 4, 61, 403), + (403, -1, -1, 57, 57, 1, 61, -1, 0, 0, 4, 402, 404), + (404, -1, -1, 57, 57, 1, 62, -1, 0, 0, 4, 403, 405), + (405, -1, -1, 57, 57, 1, 62, -1, 0, 0, 4, 404, 406), + (406, -1, -1, 57, 57, 1, 63, -1, 0, 0, 4, 405, 407), + (407, -1, -1, 57, 57, 1, 63, -1, 0, 0, 4, 406, 408), + (408, -1, -1, 57, 57, 1, 64, -1, 0, 0, 4, 407, 409), + (409, -1, -1, 57, 57, 1, 64, -1, 0, 0, 4, 408, 410), + (410, -1, -1, 57, 57, 1, 65, -1, 0, 0, 4, 409, 411), + (411, -1, -1, 57, 57, 1, 65, -1, 0, 0, 4, 410, -1), + (412, -1, -1, 412, 412, 3, 51, -1, 0, 0, 3, -1, 413), + (413, -1, -1, 412, 412, 3, 51, -1, 0, 0, 3, 412, 414), + (414, -1, -1, 412, 412, 3, 51, -1, 0, 0, 3, 413, 415), + (415, -1, -1, 412, 412, 3, 51, -1, 0, 0, 3, 414, 416), + (416, -1, -1, 412, 412, 3, 51, -1, 0, 0, 3, 415, 417), + (417, -1, -1, 412, 412, 3, 51, -1, 0, 0, 3, 416, -1), + (418, -1, -1, 418, 418, 2, 61, -1, 0, 0, 4, -1, 419), + (419, -1, -1, 418, 418, 2, 62, -1, 0, 0, 4, 418, 420), + (420, -1, -1, 418, 418, 2, 63, -1, 0, 0, 4, 419, 421), + (421, -1, -1, 418, 418, 2, 64, -1, 0, 0, 4, 420, 422), + (422, -1, -1, 418, 418, 2, 65, -1, 0, 0, 4, 421, 1001), + (423, -1, -1, 423, 423, 3, 61, -1, 0, 0, 4, -1, 424), + (424, -1, -1, 423, 423, 3, 63, -1, 0, 0, 4, 423, 425), + (425, -1, -1, 423, 423, 3, 65, -1, 0, 0, 4, 424, -1), + (426, -1, -1, 426, 426, 3, 61, -1, 0, 0, 4, -1, 427), + (427, -1, -1, 426, 426, 3, 62, -1, 0, 0, 4, 426, 428), + (428, -1, -1, 426, 426, 3, 63, -1, 0, 0, 4, 427, 429), + (429, -1, -1, 426, 426, 3, 64, -1, 0, 0, 4, 428, 430), + (430, -1, -1, 426, 426, 3, 65, -1, 0, 0, 4, 429, -1), + (434, -1, -1, 77, 77, 2, 62, -1, 0, 0, 4, 79, 435), + (435, -1, -1, 77, 77, 4, 63, -1, 0, 0, 4, 434, 436), + (436, -1, -1, 77, 77, 6, 64, -1, 0, 0, 4, 435, 1083), + (437, -1, -1, 80, 80, 2, 62, -1, 0, 0, 4, 82, 438), + (438, -1, -1, 80, 80, 3, 63, -1, 0, 0, 4, 437, 439), + (439, -1, -1, 80, 80, 4, 64, -1, 0, 0, 4, 438, 1086), + (440, -1, -1, 119, 119, 2, 62, -1, 0, 0, 4, 121, 441), + (441, -1, -1, 119, 119, 2, 63, -1, 0, 0, 4, 440, 442), + (442, -1, -1, 119, 119, 2, 64, -1, 0, 0, 4, 441, 1053), + (443, -1, -1, 113, 113, 3, 62, -1, 0, 0, 4, 115, 444), + (444, -1, -1, 113, 113, 3, 63, -1, 0, 0, 4, 443, 445), + (445, -1, -1, 113, 113, 3, 64, -1, 0, 0, 4, 444, -1), + (446, -1, -1, 446, 735, 3, 62, -1, 0, 0, 4, -1, 447), + (447, -1, -1, 446, 735, 3, 63, -1, 0, 0, 4, 446, 448), + (448, -1, -1, 446, 735, 3, 64, -1, 0, 0, 4, 447, 7050), + (449, -1, -1, 125, 125, 3, 61, -1, 0, 0, 4, 127, 450), + (450, -1, -1, 125, 125, 3, 62, -1, 0, 0, 4, 449, 451), + (451, -1, -1, 125, 125, 3, 63, -1, 0, 0, 4, 450, 452), + (452, -1, -1, 125, 125, 3, 64, -1, 0, 0, 4, 451, 453), + (453, -1, -1, 125, 125, 3, 65, -1, 0, 0, 4, 452, 1061), + (454, -1, -1, 122, 122, 3, 61, -1, 0, 0, 4, 124, 455), + (455, -1, -1, 122, 122, 3, 62, -1, 0, 0, 4, 454, 456), + (456, -1, -1, 122, 122, 3, 63, -1, 0, 0, 4, 455, 457), + (457, -1, -1, 122, 122, 3, 64, -1, 0, 0, 4, 456, 458), + (458, -1, -1, 122, 122, 3, 65, -1, 0, 0, 4, 457, 1066), + (459, 459, 459, 459, 459, 2, 61, 3297, 8, 180, 4, -1, 460), + (460, 459, 459, 459, 459, 4, 63, 3298, 8, 180, 4, 459, 461), + (461, 459, 459, 459, 459, 6, 65, 3299, 8, 180, 4, 460, 1189), + (462, -1, -1, 462, 462, 2, 63, -1, 0, 0, 4, -1, 463), + (463, -1, -1, 462, 462, 2, 64, -1, 0, 0, 4, 462, 464), + (464, -1, -1, 462, 462, 2, 65, -1, 0, 0, 4, 463, 7994), + (468, -1, -1, 468, 468, 2, 63, -1, 0, 0, 4, -1, 469), + (469, -1, -1, 468, 468, 2, 64, -1, 0, 0, 4, 468, 470), + (470, -1, -1, 468, 468, 2, 65, -1, 0, 0, 4, 469, 6439), + (471, -1, -1, 471, 471, 2, 63, -1, 0, 0, 4, -1, 472), + (472, -1, -1, 471, 471, 2, 64, -1, 0, 0, 4, 471, 473), + (473, -1, -1, 471, 471, 2, 65, -1, 0, 0, 4, 472, 12899), + (474, -1, -1, 474, 474, 2, 63, -1, 0, 0, 4, -1, 475), + (475, -1, -1, 474, 474, 2, 64, -1, 0, 0, 4, 474, 476), + (476, -1, -1, 474, 474, 2, 65, -1, 0, 0, 4, 475, 15359), + (477, -1, -1, 477, 477, 2, 63, -1, 0, 0, 4, -1, 478), + (478, -1, -1, 477, 477, 2, 64, -1, 0, 0, 4, 477, 479), + (479, -1, -1, 477, 477, 2, 65, -1, 0, 0, 4, 478, 6233), + (480, -1, -1, 480, 480, 2, 63, -1, 0, 0, 4, -1, 481), + (481, -1, -1, 480, 480, 2, 64, -1, 0, 0, 4, 480, 482), + (482, -1, -1, 480, 480, 2, 65, -1, 0, 0, 4, 481, 4921), + (483, -1, -1, 483, 483, 2, 63, -1, 0, 0, 4, -1, 484), + (484, -1, -1, 483, 483, 2, 64, -1, 0, 0, 4, 483, 485), + (485, -1, -1, 483, 483, 2, 65, -1, 0, 0, 4, 484, -1), + (489, -1, -1, 489, 489, 3, 63, -1, 0, 0, 4, -1, 490), + (490, -1, -1, 489, 489, 3, 64, -1, 0, 0, 4, 489, 491), + (491, -1, -1, 489, 489, 3, 65, -1, 0, 0, 4, 490, 7116), + (492, -1, -1, 492, 492, 2, 63, -1, 0, 0, 4, -1, 493), + (493, -1, -1, 492, 492, 2, 64, -1, 0, 0, 4, 492, 494), + (494, -1, -1, 492, 492, 2, 65, -1, 0, 0, 4, 493, 7128), + (495, -1, -1, 495, 495, 2, 63, -1, 0, 0, 4, -1, 496), + (496, -1, -1, 495, 495, 2, 64, -1, 0, 0, 4, 495, 497), + (497, -1, -1, 495, 495, 2, 65, -1, 0, 0, 4, 496, 6260), + (498, -1, -1, 498, 498, 2, 63, -1, 0, 0, 4, -1, 499), + (499, -1, -1, 498, 498, 2, 64, -1, 0, 0, 4, 498, 500), + (500, -1, -1, 498, 498, 2, 65, -1, 0, 0, 4, 499, 886), + (501, -1, -1, 501, 501, 2, 63, -1, 0, 0, 4, -1, 502), + (502, -1, -1, 501, 501, 2, 64, -1, 0, 0, 4, 501, 503), + (503, -1, -1, 501, 501, 2, 65, -1, 0, 0, 4, 502, 6319), + (504, -1, -1, 247, 247, 3, 62, -1, 0, 0, 4, 249, 505), + (505, -1, -1, 247, 247, 3, 63, -1, 0, 0, 4, 504, 506), + (506, -1, -1, 247, 247, 3, 64, -1, 0, 0, 4, 505, -1), + (507, 507, 507, 507, 507, 3, 61, 3252, 9, 180, 4, -1, 508), + (508, 507, 507, 507, 507, 3, 63, 3253, 9, 180, 4, 507, 509), + (509, 507, 507, 507, 507, 3, 65, 3254, 9, 180, 4, 508, -1), + (510, 510, 510, 510, 510, 3, 61, 3255, 37, 240, 4, -1, 511), + (511, 510, 510, 510, 510, 3, 63, 3256, 37, 240, 4, 510, 512), + (512, 510, 510, 510, 510, 3, 65, 3257, 37, 240, 4, 511, 7425), + (513, 513, 513, 513, 513, 3, 61, 3274, 4, 120, 4, -1, 514), + (514, 513, 513, 513, 513, 3, 63, 3275, 4, 120, 4, 513, 515), + (515, 513, 513, 513, 513, 3, 65, 3276, 4, 120, 4, 514, 6095), + (516, 516, 516, 516, 516, 2, 62, 3338, 5, 480, 4, -1, 6398), + (517, 517, 517, 517, 517, 3, 61, 3258, 12, 600, 4, -1, 518), + (518, 517, 517, 517, 517, 3, 63, 3259, 12, 600, 4, 517, 519), + (519, 517, 517, 517, 517, 3, 65, 3260, 12, 600, 4, 518, 1440), + (520, 520, 520, 520, 520, 3, 61, 3265, 6, 540, 4, -1, 521), + (521, 520, 520, 520, 520, 3, 63, 3266, 6, 540, 4, 520, 522), + (522, 520, 520, 520, 520, 3, 65, 3267, 6, 540, 4, 521, 1507), + (523, 523, 523, 523, 523, 5, 61, 3268, 9, 540, 4, -1, 524), + (524, 523, 523, 523, 523, 4, 63, 3269, 9, 540, 4, 523, 525), + (525, 523, 523, 523, 523, 3, 65, 3270, 9, 540, 4, 524, -1), + (526, 526, 526, 526, 526, 5, 62, 3248, 0, 1, 4, -1, 527), + (527, 526, 526, 526, 526, 3, 64, 3249, 0, 1, 4, 526, -1), + (528, 528, 528, 528, 528, 4, 61, 3283, 5, 720, 4, -1, 529), + (529, 528, 528, 528, 528, 3, 63, 3284, 5, 720, 4, 528, 530), + (530, 528, 528, 528, 528, 2, 65, 3285, 5, 720, 4, 529, 900), + (531, 131, 131, 131, 131, 3, 63, 3250, 4, 900, 4, 131, 532), + (532, 131, 131, 131, 131, 6, 64, 3251, 4, 900, 4, 531, 1203), + (533, 155, 155, 155, 155, 6, 64, 3264, 8, 60, 4, 155, 1344), + (534, 534, 534, 534, 534, 3, 61, 3261, 4, 2160, 4, -1, 535), + (535, 534, 534, 534, 534, 3, 63, 3262, 4, 2160, 4, 534, 536), + (536, 534, 534, 534, 534, 3, 65, 3263, 4, 2160, 4, 535, 715), + (537, -1, -1, 537, 537, 3, 63, -1, 0, 0, 4, -1, 538), + (538, -1, -1, 537, 537, 3, 64, -1, 0, 0, 4, 537, -1), + (539, -1, -1, 230, 230, 2, 63, -1, 0, 0, 4, 232, 540), + (540, -1, -1, 230, 230, 4, 64, -1, 0, 0, 4, 539, 541), + (541, -1, -1, 230, 230, 6, 65, -1, 0, 0, 4, 540, 12677), + (542, -1, -1, 255, 255, 2, 63, -1, 0, 0, 4, 257, 543), + (543, -1, -1, 255, 255, 4, 64, -1, 0, 0, 4, 542, 544), + (544, -1, -1, 255, 255, 6, 65, -1, 0, 0, 4, 543, 1163), + (545, 545, 545, 545, 545, 3, 61, 3271, 3, 900, 4, -1, 546), + (546, 545, 545, 545, 545, 3, 63, 3272, 3, 900, 4, 545, 547), + (547, 545, 545, 545, 545, 3, 65, 3273, 3, 900, 4, 546, 1293), + (548, 548, 548, 548, 548, 4, 61, 3277, 5, 900, 4, -1, 549), + (549, 548, 548, 548, 548, 3, 63, 3278, 5, 900, 4, 548, 550), + (550, 548, 548, 548, 548, 2, 65, 3279, 5, 900, 4, 549, 1225), + (551, -1, -1, 551, 551, 2, 61, -1, 0, 0, 4, -1, 552), + (552, -1, -1, 551, 551, 2, 62, -1, 0, 0, 4, 551, 553), + (553, -1, -1, 551, 551, 2, 63, -1, 0, 0, 4, 552, 554), + (554, -1, -1, 551, 551, 2, 64, -1, 0, 0, 4, 553, 555), + (555, -1, -1, 551, 551, 2, 65, -1, 0, 0, 4, 554, 1633), + (556, -1, -1, 556, 556, 2, 61, -1, 0, 0, 4, -1, 557), + (557, -1, -1, 556, 556, 2, 62, -1, 0, 0, 4, 556, 558), + (558, -1, -1, 556, 556, 2, 63, -1, 0, 0, 4, 557, 559), + (559, -1, -1, 556, 556, 2, 64, -1, 0, 0, 4, 558, 560), + (560, -1, -1, 556, 556, 2, 65, -1, 0, 0, 4, 559, 1563), + (561, -1, -1, 561, 561, 2, 61, -1, 0, 0, 4, -1, 562), + (562, -1, -1, 561, 561, 4, 63, -1, 0, 0, 4, 561, 563), + (563, -1, -1, 561, 561, 6, 65, -1, 0, 0, 4, 562, 1624), + (564, -1, -1, 564, 564, 3, 61, -1, 0, 0, 4, -1, 565), + (565, -1, -1, 564, 564, 3, 63, -1, 0, 0, 4, 564, 566), + (566, -1, -1, 564, 564, 3, 65, -1, 0, 0, 4, 565, 1621), + (567, -1, -1, 567, 567, 5, 63, -1, 0, 0, 4, -1, 5061), + (574, -1, -1, 574, 574, 3, 61, -1, 0, 0, 4, -1, 575), + (575, -1, -1, 574, 574, 3, 63, -1, 0, 0, 4, 574, 576), + (576, -1, -1, 574, 574, 3, 65, -1, 0, 0, 4, 575, 7718), + (577, -1, -1, 577, 577, 2, 61, -1, 0, 0, 4, -1, 578), + (578, -1, -1, 577, 577, 4, 63, -1, 0, 0, 4, 577, 579), + (579, -1, -1, 577, 577, 6, 65, -1, 0, 0, 4, 578, -1), + (580, -1, -1, 580, 580, 4, 61, -1, 0, 0, 4, -1, 581), + (581, -1, -1, 580, 580, 3, 63, -1, 0, 0, 4, 580, 582), + (582, -1, -1, 580, 580, 2, 65, -1, 0, 0, 4, 581, -1), + (583, -1, -1, 583, 583, 2, 63, -1, 0, 0, 4, -1, 584), + (584, -1, -1, 583, 583, 2, 64, -1, 0, 0, 4, 583, 585), + (585, -1, -1, 583, 583, 2, 65, -1, 0, 0, 4, 584, -1), + (586, -1, -1, 586, 586, 2, 61, -1, 0, 0, 4, -1, 587), + (587, -1, -1, 586, 586, 4, 63, -1, 0, 0, 4, 586, 588), + (588, -1, -1, 586, 586, 6, 65, -1, 0, 0, 4, 587, 6130), + (589, -1, -1, 589, 589, 3, 61, -1, 0, 0, 4, -1, 590), + (590, -1, -1, 589, 589, 3, 63, -1, 0, 0, 4, 589, 591), + (591, -1, -1, 589, 589, 3, 65, -1, 0, 0, 4, 590, 893), + (592, 592, 592, 592, 592, 6, 63, 3282, 2, 18, 4, -1, 702), + (593, -1, -1, 593, 593, 3, 61, -1, 0, 0, 4, -1, 594), + (594, -1, -1, 593, 593, 3, 63, -1, 0, 0, 4, 593, 595), + (595, -1, -1, 593, 593, 3, 65, -1, 0, 0, 4, 594, 5972), + (596, -1, -1, 596, 596, 2, 61, -1, 0, 0, 4, -1, 597), + (597, -1, -1, 596, 596, 4, 63, -1, 0, 0, 4, 596, 598), + (598, -1, -1, 596, 596, 6, 65, -1, 0, 0, 4, 597, 5973), + (599, -1, -1, 599, 599, 2, 61, -1, 0, 0, 4, -1, 600), + (600, -1, -1, 599, 599, 4, 63, -1, 0, 0, 4, 599, 601), + (601, -1, -1, 599, 599, 6, 65, -1, 0, 0, 4, 600, 1536), + (602, -1, -1, 602, 602, 3, 61, -1, 0, 0, 4, -1, 603), + (603, -1, -1, 602, 602, 3, 63, -1, 0, 0, 4, 602, 604), + (604, -1, -1, 602, 602, 3, 65, -1, 0, 0, 4, 603, 1533), + (605, -1, -1, 605, 605, 6, 63, -1, 0, 0, 4, -1, -1), + (606, -1, -1, 606, 606, 1, 61, -1, 0, 0, 4, -1, 607), + (607, -1, -1, 606, 606, 1, 62, -1, 0, 0, 4, 606, 608), + (608, -1, -1, 606, 606, 1, 63, -1, 0, 0, 4, 607, 609), + (609, -1, -1, 606, 606, 1, 64, -1, 0, 0, 4, 608, 610), + (610, -1, -1, 606, 606, 1, 65, -1, 0, 0, 4, 609, -1), + (611, -1, -1, 611, 611, 2, 61, -1, 0, 0, 4, -1, 612), + (612, -1, -1, 611, 611, 2, 62, -1, 0, 0, 4, 611, 613), + (613, -1, -1, 611, 611, 2, 63, -1, 0, 0, 4, 612, 614), + (614, -1, -1, 611, 611, 2, 64, -1, 0, 0, 4, 613, 615), + (615, -1, -1, 611, 611, 2, 65, -1, 0, 0, 4, 614, 7175), + (616, 616, 616, 616, 616, 5, 63, 3286, 7, 900, 4, -1, 617), + (617, 616, 616, 616, 616, 4, 64, 3287, 7, 900, 4, 616, 618), + (618, 616, 616, 616, 616, 3, 65, 3288, 7, 900, 4, 617, 1248), + (619, 619, 619, 619, 619, 3, 61, 3292, 6, 900, 4, -1, 620), + (620, 619, 619, 619, 619, 2, 63, 3293, 6, 900, 4, 619, 621), + (621, 619, 619, 619, 619, 1, 65, 3294, 6, 900, 4, 620, 721), + (622, -1, -1, 622, 622, 3, 61, -1, 0, 0, 4, -1, 623), + (623, -1, -1, 622, 622, 3, 62, -1, 0, 0, 4, 622, 624), + (624, -1, -1, 622, 622, 3, 63, -1, 0, 0, 4, 623, 8329), + (625, -1, -1, 625, 625, 1, 61, -1, 0, 0, 4, -1, 626), + (626, -1, -1, 625, 625, 2, 63, -1, 0, 0, 4, 625, 627), + (627, -1, -1, 625, 625, 3, 65, -1, 0, 0, 4, 626, 4733), + (628, -1, -1, 628, 628, 2, 62, -1, 0, 0, 4, -1, 629), + (629, -1, -1, 628, 628, 4, 64, -1, 0, 0, 4, 628, -1), + (630, 630, 630, 630, 630, 6, 63, 5243, 7, 1, 4, -1, -1), + (631, -1, -1, 631, 631, 2, 61, -1, 0, 0, 4, -1, 632), + (632, -1, -1, 631, 631, 3, 63, -1, 0, 0, 4, 631, 633), + (633, -1, -1, 631, 631, 4, 65, -1, 0, 0, 4, 632, 1172), + (634, -1, -1, 634, 634, 1, 61, -1, 0, 0, 4, -1, 635), + (635, -1, -1, 634, 634, 2, 63, -1, 0, 0, 4, 634, 636), + (636, -1, -1, 634, 634, 3, 65, -1, 0, 0, 4, 635, 844), + (637, -1, -1, 637, 637, 3, 61, -1, 0, 0, 4, -1, 638), + (638, -1, -1, 637, 637, 6, 63, -1, 0, 0, 4, 637, 639), + (639, -1, -1, 637, 637, 9, 65, -1, 0, 0, 4, 638, 770), + (640, -1, -1, 267, 267, 2, 61, -1, 0, 0, 4, 269, 641), + (641, -1, -1, 267, 267, 4, 63, -1, 0, 0, 4, 640, 642), + (642, -1, -1, 267, 267, 6, 65, -1, 0, 0, 4, 641, 924), + (643, 643, 643, 643, 643, 4, 62, 5227, 0, 1, 4, -1, -1), + (644, -1, -1, 644, 644, 4, 60, -1, 0, 0, 4, -1, 1601), + (645, 645, -1, 645, 645, 4, 64, 3614, 4, 5, 4, -1, 5999), + (649, -1, -1, 649, 649, 2, 61, -1, 0, 0, 4, -1, 650), + (650, -1, -1, 649, 649, 4, 63, -1, 0, 0, 4, 649, 651), + (651, -1, -1, 649, 649, 6, 65, -1, 0, 0, 4, 650, 5860), + (652, -1, -1, 652, 652, 2, 61, -1, 0, 0, 4, -1, 653), + (653, -1, -1, 652, 652, 4, 63, -1, 0, 0, 4, 652, 654), + (654, -1, -1, 652, 652, 6, 65, -1, 0, 0, 4, 653, -1), + (655, -1, -1, 655, 655, 3, 59, -1, 0, 0, 3, -1, 656), + (656, -1, -1, 655, 655, 6, 59, -1, 0, 0, 3, 655, 657), + (657, -1, -1, 655, 655, 9, 59, -1, 0, 0, 3, 656, -1), + (658, -1, -1, 658, 658, 2, 55, -1, 0, 0, 3, -1, 659), + (659, -1, -1, 658, 658, 4, 55, -1, 0, 0, 3, 658, 660), + (660, -1, -1, 658, 658, 6, 55, -1, 0, 0, 3, 659, 5306), + (661, -1, -1, 65, 661, 1, 51, -1, 0, 0, 3, -1, 662), + (662, -1, -1, 65, 661, 1, 51, -1, 0, 0, 3, 661, 663), + (663, -1, -1, 65, 661, 1, 51, -1, 0, 0, 3, 662, 674), + (665, -1, -1, 270, 665, 3, 59, -1, 0, 0, 3, -1, 666), + (666, -1, -1, 270, 665, 6, 59, -1, 0, 0, 3, 665, 667), + (667, -1, -1, 270, 665, 9, 59, -1, 0, 0, 3, 666, 668), + (668, -1, -1, 270, 665, 2, 63, -1, 0, 0, 4, 667, 669), + (669, -1, -1, 270, 665, 2, 64, -1, 0, 0, 4, 668, 670), + (670, -1, -1, 270, 665, 2, 65, -1, 0, 0, 4, 669, 7612), + (671, -1, -1, 671, 671, 3, 59, -1, 0, 0, 3, -1, -1), + (672, -1, -1, 62, 62, 5, 61, -1, 0, 0, 7, 64, 673), + (673, -1, -1, 62, 62, 5, 61, -1, 0, 0, 7, 672, -1), + (674, -1, -1, 65, 661, 3, 61, -1, 0, 0, 7, 663, 675), + (675, -1, -1, 65, 661, 3, 61, -1, 0, 0, 7, 674, 1031), + (676, -1, -1, 71, 71, 2, 61, -1, 0, 0, 7, 73, 677), + (677, -1, -1, 71, 71, 3, 61, -1, 0, 0, 7, 676, 978), + (678, -1, -1, 678, 678, 3, 61, -1, 0, 0, 7, -1, 679), + (679, -1, -1, 678, 678, 3, 61, -1, 0, 0, 7, 678, 680), + (680, -1, -1, 678, 678, 3, 61, -1, 0, 0, 7, 679, 681), + (681, -1, -1, 678, 678, 3, 61, -1, 0, 0, 7, 680, 682), + (682, -1, -1, 678, 678, 3, 61, -1, 0, 0, 7, 681, 6518), + (683, -1, -1, 683, 683, 3, 61, -1, 0, 0, 7, -1, 684), + (684, -1, -1, 683, 683, 6, 61, -1, 0, 0, 7, 683, 685), + (685, -1, -1, 683, 683, 9, 61, -1, 0, 0, 7, 684, 1036), + (686, -1, -1, 686, 686, 5, 55, -1, 0, 0, 7, -1, 687), + (687, -1, -1, 686, 686, 5, 55, -1, 0, 0, 7, 686, 688), + (688, -1, -1, 686, 686, 5, 55, -1, 0, 0, 7, 687, 689), + (689, -1, -1, 686, 686, 5, 55, -1, 0, 0, 7, 688, 690), + (690, -1, -1, 686, 686, 5, 55, -1, 0, 0, 7, 689, 7640), + (691, -1, -1, 691, 691, 9, 55, -1, 0, 0, 7, -1, -1), + (692, -1, -1, 692, 692, 3, 55, -1, 0, 0, 7, -1, 693), + (693, -1, -1, 692, 692, 6, 55, -1, 0, 0, 7, 692, 694), + (694, -1, -1, 692, 692, 9, 55, -1, 0, 0, 7, 693, 7647), + (695, -1, -1, 695, 695, 4, 65, -1, 0, 0, 7, -1, 696), + (696, -1, -1, 695, 695, 4, 65, -1, 0, 0, 7, 695, 697), + (697, -1, -1, 695, 695, 4, 65, -1, 0, 0, 7, 696, 698), + (698, -1, -1, 695, 695, 4, 65, -1, 0, 0, 7, 697, 699), + (699, -1, -1, 695, 695, 4, 65, -1, 0, 0, 7, 698, 15529), + (700, -1, -1, 213, 213, 9, 61, -1, 0, 0, 7, 215, -1), + (701, -1, -1, 275, 275, 9, 61, -1, 0, 0, 7, 277, -1), + (702, 592, 592, 592, 592, 3, 65, 4842, 2, 18, 7, 592, 703), + (703, 592, 592, 592, 592, 3, 65, 4843, 2, 18, 7, 702, 704), + (704, 592, 592, 592, 592, 3, 65, 4844, 2, 18, 7, 703, 705), + (705, 592, 592, 592, 592, 3, 65, 4845, 2, 18, 7, 704, 706), + (706, 592, 592, 592, 592, 3, 65, 4846, 2, 18, 7, 705, 1102), + (715, 534, 534, 534, 534, 3, 65, 5112, 4, 2160, 7, 536, 716), + (716, 534, 534, 534, 534, 6, 65, 5113, 4, 2160, 7, 715, 717), + (717, 534, 534, 534, 534, 9, 65, 5114, 4, 2160, 7, 716, 1278), + (718, 718, 718, 718, 718, 3, 65, 4521, 7, 4320, 7, -1, 719), + (719, 718, 718, 718, 718, 6, 65, 4522, 7, 4320, 7, 718, 720), + (720, 718, 718, 718, 718, 9, 65, 4523, 7, 4320, 7, 719, 1019), + (721, 619, 619, 619, 619, 5, 65, 5110, 6, 900, 7, 621, 722), + (722, 619, 619, 619, 619, 5, 65, 5111, 6, 900, 7, 721, 6296), + (723, 723, 723, 723, 723, 9, 65, 4788, 6, 30, 7, -1, 4963), + (724, -1, -1, 724, 724, 3, 65, -1, 0, 0, 7, -1, 725), + (725, -1, -1, 724, 724, 3, 65, -1, 0, 0, 7, 724, 726), + (726, -1, -1, 724, 724, 3, 65, -1, 0, 0, 7, 725, 727), + (727, -1, -1, 724, 724, 3, 65, -1, 0, 0, 7, 726, 728), + (728, -1, -1, 724, 724, 3, 65, -1, 0, 0, 7, 727, 5254), + (729, -1, -1, 729, 729, 5, 65, -1, 0, 0, 7, -1, 730), + (730, -1, -1, 729, 729, 5, 65, -1, 0, 0, 7, 729, 731), + (731, -1, -1, 729, 729, 5, 65, -1, 0, 0, 7, 730, 732), + (732, -1, -1, 729, 729, 5, 65, -1, 0, 0, 7, 731, 733), + (733, -1, -1, 729, 729, 5, 65, -1, 0, 0, 7, 732, 1467), + (734, -1, -1, 734, 734, 12, 65, -1, 0, 0, 7, -1, -1), + (735, -1, -1, 735, 735, 3, 62, -1, 0, 0, 7, -1, 736), + (736, -1, -1, 735, 735, 3, 62, -1, 0, 0, 7, 735, 737), + (737, -1, -1, 735, 735, 3, 62, -1, 0, 0, 7, 736, 7056), + (738, -1, -1, 98, 738, 3, 55, -1, 0, 0, 7, -1, 739), + (739, -1, -1, 98, 738, 6, 55, -1, 0, 0, 7, 738, 740), + (740, -1, -1, 98, 738, 9, 55, -1, 0, 0, 7, 739, 5317), + (746, 746, 746, 746, 746, 3, 65, 4549, 10, 2160, 7, -1, 747), + (747, 746, 746, 746, 746, 6, 65, 4550, 10, 2160, 7, 746, 748), + (748, 746, 746, 746, 746, 9, 65, 4551, 10, 2160, 7, 747, 1491), + (749, 749, 749, 749, 749, 5, 65, 4790, 11, 1800, 7, -1, 750), + (750, 749, 749, 749, 749, 5, 65, 4791, 11, 1800, 7, 749, 751), + (751, 749, 749, 749, 749, 5, 65, 4792, 11, 1800, 7, 750, 752), + (752, 749, 749, 749, 749, 5, 65, 4793, 11, 1800, 7, 751, 753), + (753, 749, 749, 749, 749, 5, 65, 4794, 11, 1800, 7, 752, 1206), + (754, -1, -1, 754, 754, 3, 65, -1, 0, 0, 7, -1, 755), + (755, -1, -1, 754, 754, 6, 65, -1, 0, 0, 7, 754, 756), + (756, -1, -1, 754, 754, 9, 65, -1, 0, 0, 7, 755, 7659), + (757, 757, -1, 757, 757, 5, 65, 4796, 6, 1800, 7, -1, 758), + (758, 757, -1, 757, 757, 5, 65, 4797, 6, 1800, 7, 757, 759), + (759, 757, -1, 757, 757, 5, 65, 4798, 6, 1800, 7, 758, 760), + (760, 757, -1, 757, 757, 5, 65, 4799, 6, 1800, 7, 759, 761), + (761, 757, -1, 757, 757, 5, 65, 4800, 6, 1800, 7, 760, 1222), + (762, -1, -1, 762, 762, 4, 65, -1, 0, 0, 7, -1, 763), + (763, -1, -1, 762, 762, 4, 65, -1, 0, 0, 7, 762, 764), + (764, -1, -1, 762, 762, 4, 65, -1, 0, 0, 7, 763, 765), + (765, -1, -1, 762, 762, 4, 65, -1, 0, 0, 7, 764, 766), + (766, -1, -1, 762, 762, 4, 65, -1, 0, 0, 7, 765, -1), + (767, -1, -1, 767, 767, 3, 65, -1, 0, 0, 7, -1, 768), + (768, -1, -1, 767, 767, 6, 65, -1, 0, 0, 7, 767, 769), + (769, -1, -1, 767, 767, 9, 65, -1, 0, 0, 7, 768, 1099), + (770, -1, -1, 637, 637, 3, 65, -1, 0, 0, 7, 639, 771), + (771, -1, -1, 637, 637, 6, 65, -1, 0, 0, 7, 770, 772), + (772, -1, -1, 637, 637, 9, 65, -1, 0, 0, 7, 771, 4749), + (773, 773, -1, 773, 773, 3, 65, 4552, 5, 1800, 7, -1, 774), + (774, 773, -1, 773, 773, 6, 65, 4553, 5, 1800, 7, 773, 775), + (775, 773, -1, 773, 773, 9, 65, 4554, 5, 1800, 7, 774, 5854), + (776, -1, -1, 776, 776, 3, 65, -1, 0, 0, 7, -1, 777), + (777, -1, -1, 776, 776, 3, 65, -1, 0, 0, 7, 776, 778), + (778, -1, -1, 776, 776, 3, 65, -1, 0, 0, 7, 777, 779), + (779, -1, -1, 776, 776, 3, 65, -1, 0, 0, 7, 778, 780), + (780, -1, -1, 776, 776, 3, 65, -1, 0, 0, 7, 779, -1), + (781, -1, -1, 781, 781, 12, 65, -1, 0, 0, 7, -1, 5850), + (782, -1, -1, 782, 782, 3, 65, -1, 0, 0, 7, -1, 783), + (783, -1, -1, 782, 782, 6, 65, -1, 0, 0, 7, 782, 784), + (784, -1, -1, 782, 782, 9, 65, -1, 0, 0, 7, 783, -1), + (785, 785, 785, 785, 785, 5, 65, 5235, 8, 900, 7, -1, 786), + (786, 785, 785, 785, 785, 5, 65, 5236, 8, 900, 7, 785, 787), + (787, 785, 785, 785, 785, 5, 65, 5237, 8, 900, 7, 786, 788), + (788, 785, 785, 785, 785, 5, 65, 5238, 8, 900, 7, 787, 789), + (789, 785, 785, 785, 785, 5, 65, 5239, 8, 900, 7, 788, 15235), + (790, -1, -1, 790, 790, 3, 65, -1, 0, 0, 7, -1, 791), + (791, -1, -1, 790, 790, 3, 65, -1, 0, 0, 7, 790, 792), + (792, -1, -1, 790, 790, 3, 65, -1, 0, 0, 7, 791, 793), + (793, -1, -1, 790, 790, 3, 65, -1, 0, 0, 7, 792, 794), + (794, -1, -1, 790, 790, 3, 65, -1, 0, 0, 7, 793, 5259), + (795, -1, -1, 795, 795, 5, 65, -1, 0, 0, 7, -1, 796), + (796, -1, -1, 795, 795, 5, 65, -1, 0, 0, 7, 795, 797), + (797, -1, -1, 795, 795, 5, 65, -1, 0, 0, 7, 796, 798), + (798, -1, -1, 795, 795, 5, 65, -1, 0, 0, 7, 797, 799), + (799, -1, -1, 795, 795, 5, 65, -1, 0, 0, 7, 798, 1430), + (800, -1, -1, 800, 800, 3, 65, -1, 0, 0, 7, -1, 801), + (801, -1, -1, 800, 800, 6, 65, -1, 0, 0, 7, 800, 802), + (802, -1, -1, 800, 800, 9, 65, -1, 0, 0, 7, 801, -1), + (803, -1, -1, 803, 803, 3, 65, -1, 0, 0, 7, -1, 804), + (804, -1, -1, 803, 803, 6, 65, -1, 0, 0, 7, 803, 805), + (805, -1, -1, 803, 803, 9, 65, -1, 0, 0, 7, 804, -1), + (806, -1, -1, 806, 806, 12, 65, -1, 0, 0, 7, -1, -1), + (807, -1, -1, 807, 807, 3, 65, -1, 0, 0, 7, -1, 808), + (808, -1, -1, 807, 807, 6, 65, -1, 0, 0, 7, 807, 809), + (809, -1, -1, 807, 807, 9, 65, -1, 0, 0, 7, 808, 1268), + (810, -1, -1, 810, 810, 5, 65, -1, 0, 0, 7, -1, 811), + (811, -1, -1, 810, 810, 5, 65, -1, 0, 0, 7, 810, 812), + (812, -1, -1, 810, 810, 5, 65, -1, 0, 0, 7, 811, 813), + (813, -1, -1, 810, 810, 5, 65, -1, 0, 0, 7, 812, 814), + (814, -1, -1, 810, 810, 5, 65, -1, 0, 0, 7, 813, 4824), + (815, -1, -1, 815, 815, 4, 65, -1, 0, 0, 7, -1, 816), + (816, -1, -1, 815, 815, 4, 65, -1, 0, 0, 7, 815, 817), + (817, -1, -1, 815, 815, 4, 65, -1, 0, 0, 7, 816, 818), + (818, -1, -1, 815, 815, 4, 65, -1, 0, 0, 7, 817, 819), + (819, -1, -1, 815, 815, 4, 65, -1, 0, 0, 7, 818, 5141), + (820, -1, -1, 820, 820, 3, 65, -1, 0, 0, 7, -1, 821), + (821, -1, -1, 820, 820, 6, 65, -1, 0, 0, 7, 820, 822), + (822, -1, -1, 820, 820, 9, 65, -1, 0, 0, 7, 821, 1265), + (823, -1, -1, 823, 823, 5, 65, -1, 0, 0, 7, -1, 824), + (824, -1, -1, 823, 823, 5, 65, -1, 0, 0, 7, 823, 825), + (825, -1, -1, 823, 823, 5, 65, -1, 0, 0, 7, 824, 826), + (826, -1, -1, 823, 823, 5, 65, -1, 0, 0, 7, 825, 827), + (827, -1, -1, 823, 823, 5, 65, -1, 0, 0, 7, 826, -1), + (828, 828, 828, 828, 828, 3, 65, 5240, 2, 3600, 7, -1, 829), + (829, 828, 828, 828, 828, 6, 65, 5241, 2, 3600, 7, 828, 830), + (830, 828, 828, 828, 828, 9, 65, 5242, 2, 3600, 7, 829, 16250), + (834, -1, -1, 834, 834, 3, 65, -1, 0, 0, 7, -1, 835), + (835, -1, -1, 834, 834, 3, 65, -1, 0, 0, 7, 834, 836), + (836, -1, -1, 834, 834, 3, 65, -1, 0, 0, 7, 835, 837), + (837, -1, -1, 834, 834, 3, 65, -1, 0, 0, 7, 836, 838), + (838, -1, -1, 834, 834, 3, 65, -1, 0, 0, 7, 837, -1), + (839, -1, -1, 839, 839, 5, 65, -1, 0, 0, 7, -1, 840), + (840, -1, -1, 839, 839, 5, 65, -1, 0, 0, 7, 839, 841), + (841, -1, -1, 839, 839, 5, 65, -1, 0, 0, 7, 840, 842), + (842, -1, -1, 839, 839, 5, 65, -1, 0, 0, 7, 841, 843), + (843, -1, -1, 839, 839, 5, 65, -1, 0, 0, 7, 842, 5325), + (844, -1, -1, 634, 634, 5, 65, -1, 0, 0, 7, 636, 845), + (845, -1, -1, 634, 634, 5, 65, -1, 0, 0, 7, 844, 1319), + (846, -1, -1, 846, 846, 3, 65, -1, 0, 0, 7, -1, 847), + (847, -1, -1, 846, 846, 6, 65, -1, 0, 0, 7, 846, 848), + (848, -1, -1, 846, 846, 9, 65, -1, 0, 0, 7, 847, 1301), + (849, -1, -1, 849, 849, 3, 65, -1, 0, 0, 7, -1, 850), + (850, -1, -1, 849, 849, 6, 65, -1, 0, 0, 7, 849, 851), + (851, -1, -1, 849, 849, 9, 65, -1, 0, 0, 7, 850, 10621), + (852, -1, -1, 852, 852, 5, 65, -1, 0, 0, 7, -1, 853), + (853, -1, -1, 852, 852, 5, 65, -1, 0, 0, 7, 852, 854), + (854, -1, -1, 852, 852, 5, 65, -1, 0, 0, 7, 853, 5500), + (855, -1, -1, 855, 855, 5, 65, -1, 0, 0, 7, -1, 856), + (856, -1, -1, 855, 855, 5, 65, -1, 0, 0, 7, 855, 857), + (857, -1, -1, 855, 855, 5, 65, -1, 0, 0, 7, 856, 858), + (858, -1, -1, 855, 855, 5, 65, -1, 0, 0, 7, 857, 859), + (859, -1, -1, 855, 855, 5, 65, -1, 0, 0, 7, 858, 7673), + (860, 860, 860, 860, 860, 3, 65, 3297, 5, 180, 7, -1, 861), + (861, 860, 860, 860, 860, 6, 65, 3298, 5, 180, 7, 860, 862), + (862, 860, 860, 860, 860, 9, 65, 3299, 5, 180, 7, 861, 5130), + (863, 863, -1, 863, 863, 12, 65, 5248, 6, 4320, 7, -1, -1), + (864, -1, -1, 864, 864, 3, 65, -1, 0, 0, 7, -1, 865), + (865, -1, -1, 864, 864, 6, 65, -1, 0, 0, 7, 864, 866), + (866, -1, -1, 864, 864, 9, 65, -1, 0, 0, 7, 865, 1290), + (867, -1, -1, 867, 867, 5, 65, -1, 0, 0, 7, -1, 868), + (868, -1, -1, 867, 867, 5, 65, -1, 0, 0, 7, 867, 869), + (869, -1, -1, 867, 867, 5, 65, -1, 0, 0, 7, 868, 870), + (870, -1, -1, 867, 867, 5, 65, -1, 0, 0, 7, 869, 871), + (871, -1, -1, 867, 867, 5, 65, -1, 0, 0, 7, 870, 7362), + (872, 872, 872, 872, 872, 3, 65, 4802, 5, 180, 7, -1, 873), + (873, 872, 872, 872, 872, 6, 65, 4803, 5, 180, 7, 872, 874), + (874, 872, 872, 872, 872, 9, 65, 4804, 5, 180, 7, 873, 7367), + (875, 875, 875, 875, 875, 3, 65, 4805, 5, 180, 7, -1, 876), + (876, 875, 875, 875, 875, 6, 65, 4806, 5, 180, 7, 875, 877), + (877, 875, 875, 875, 875, 9, 65, 4807, 5, 180, 7, 876, 7370), + (878, -1, -1, 878, 878, 3, 65, -1, 0, 0, 7, -1, 879), + (879, -1, -1, 878, 878, 6, 65, -1, 0, 0, 7, 878, 880), + (880, -1, -1, 878, 878, 9, 65, -1, 0, 0, 7, 879, 1539), + (881, -1, -1, 881, 881, 3, 65, -1, 0, 0, 7, -1, 882), + (882, -1, -1, 881, 881, 3, 65, -1, 0, 0, 7, 881, 883), + (883, -1, -1, 881, 881, 3, 65, -1, 0, 0, 7, 882, 884), + (884, -1, -1, 881, 881, 3, 65, -1, 0, 0, 7, 883, 885), + (885, -1, -1, 881, 881, 3, 65, -1, 0, 0, 7, 884, -1), + (886, -1, -1, 498, 498, 5, 65, -1, 0, 0, 7, 500, 887), + (887, -1, -1, 498, 498, 5, 65, -1, 0, 0, 7, 886, 975), + (888, -1, -1, 888, 888, 3, 65, -1, 0, 0, 7, -1, 889), + (889, -1, -1, 888, 888, 3, 65, -1, 0, 0, 7, 888, 890), + (890, -1, -1, 888, 888, 3, 65, -1, 0, 0, 7, 889, 891), + (891, -1, -1, 888, 888, 3, 65, -1, 0, 0, 7, 890, 892), + (892, -1, -1, 888, 888, 3, 65, -1, 0, 0, 7, 891, 16267), + (893, -1, -1, 589, 589, 5, 65, -1, 0, 0, 7, 591, 894), + (894, -1, -1, 589, 589, 5, 65, -1, 0, 0, 7, 893, 5270), + (895, -1, -1, 895, 895, 5, 65, -1, 0, 0, 7, -1, 896), + (896, -1, -1, 895, 895, 5, 65, -1, 0, 0, 7, 895, 897), + (897, -1, -1, 895, 895, 5, 65, -1, 0, 0, 7, 896, 898), + (898, -1, -1, 895, 895, 5, 65, -1, 0, 0, 7, 897, 899), + (899, -1, -1, 895, 895, 5, 65, -1, 0, 0, 7, 898, 6075), + (900, 528, 528, 528, 528, 5, 65, 4826, 5, 720, 7, 530, 901), + (901, 528, 528, 528, 528, 5, 65, 4827, 5, 720, 7, 900, 6103), + (907, -1, -1, 907, 907, 5, 65, -1, 0, 0, 7, -1, 908), + (908, -1, -1, 907, 907, 5, 65, -1, 0, 0, 7, 907, 909), + (909, -1, -1, 907, 907, 5, 65, -1, 0, 0, 7, 908, 910), + (910, -1, -1, 907, 907, 5, 65, -1, 0, 0, 7, 909, 911), + (911, -1, -1, 907, 907, 5, 65, -1, 0, 0, 7, 910, 5243), + (912, 912, 912, 912, 912, 3, 65, 4925, 4, 3600, 7, -1, 913), + (913, 912, 912, 912, 912, 6, 65, 4926, 4, 3600, 7, 912, 914), + (914, 912, 912, 912, 912, 9, 65, 4927, 4, 3600, 7, 913, 1330), + (915, -1, -1, 915, 915, 3, 65, -1, 0, 0, 7, -1, 916), + (916, -1, -1, 915, 915, 6, 65, -1, 0, 0, 7, 915, 917), + (917, -1, -1, 915, 915, 9, 65, -1, 0, 0, 7, 916, -1), + (918, -1, -1, 918, 918, 3, 65, -1, 0, 0, 7, -1, 919), + (919, -1, -1, 918, 918, 6, 65, -1, 0, 0, 7, 918, 920), + (920, -1, -1, 918, 918, 9, 65, -1, 0, 0, 7, 919, -1), + (921, 921, 921, 921, 921, 12, 65, 4833, 8, 60, 7, -1, 1340), + (922, 922, 922, 922, 922, 12, 65, 4834, 8, 60, 7, -1, 1341), + (923, 923, 923, 923, 923, 12, 65, 4835, 8, 60, 7, -1, 1342), + (924, -1, -1, 267, 267, 5, 65, -1, 0, 0, 7, 642, 925), + (925, -1, -1, 267, 267, 5, 65, -1, 0, 0, 7, 924, 5133), + (926, 926, 926, 926, 926, 3, 65, 4836, 12, 1800, 7, -1, 927), + (927, 926, 926, 926, 926, 3, 65, 4837, 12, 1800, 7, 926, 928), + (928, 926, 926, 926, 926, 3, 65, 4838, 12, 1800, 7, 927, 929), + (929, 926, 926, 926, 926, 3, 65, 4839, 12, 1800, 7, 928, 930), + (930, 926, 926, 926, 926, 3, 65, 4840, 12, 1800, 7, 929, 14991), + (931, 931, 931, 931, 931, 3, 65, 5245, 13, 4320, 7, -1, 932), + (932, 931, 931, 931, 931, 6, 65, 5246, 13, 4320, 7, 931, 933), + (933, 931, 931, 931, 931, 9, 65, 5247, 13, 4320, 7, 932, -1), + (934, -1, -1, 113, 934, 2, 55, -1, 0, 0, 3, -1, 935), + (935, -1, -1, 113, 934, 4, 55, -1, 0, 0, 3, 934, 936), + (936, -1, -1, 113, 934, 6, 55, -1, 0, 0, 3, 935, 943), + (937, -1, -1, 113, 937, 2, 55, -1, 0, 0, 3, -1, 938), + (938, -1, -1, 113, 937, 4, 55, -1, 0, 0, 3, 937, 939), + (939, -1, -1, 113, 937, 6, 55, -1, 0, 0, 3, 938, 946), + (940, -1, -1, 113, 940, 2, 55, -1, 0, 0, 3, -1, 941), + (941, -1, -1, 113, 940, 4, 55, -1, 0, 0, 3, 940, 942), + (942, -1, -1, 113, 940, 6, 55, -1, 0, 0, 3, 941, 949), + (943, -1, -1, 113, 934, 3, 62, -1, 0, 0, 4, 936, 944), + (944, -1, -1, 113, 934, 3, 63, -1, 0, 0, 4, 943, 945), + (945, -1, -1, 113, 934, 3, 64, -1, 0, 0, 4, 944, -1), + (946, -1, -1, 113, 937, 3, 62, -1, 0, 0, 4, 939, 947), + (947, -1, -1, 113, 937, 3, 63, -1, 0, 0, 4, 946, 948), + (948, -1, -1, 113, 937, 3, 64, -1, 0, 0, 4, 947, -1), + (949, -1, -1, 113, 940, 3, 62, -1, 0, 0, 4, 942, 950), + (950, -1, -1, 113, 940, 3, 63, -1, 0, 0, 4, 949, 951), + (951, -1, -1, 113, 940, 3, 64, -1, 0, 0, 4, 950, -1), + (952, -1, -1, 952, 952, 3, 61, -1, 0, 0, 4, -1, 953), + (953, -1, -1, 952, 952, 3, 63, -1, 0, 0, 4, 952, 954), + (954, -1, -1, 952, 952, 3, 65, -1, 0, 0, 4, 953, -1), + (955, -1, -1, 955, 955, 3, 61, -1, 0, 0, 4, -1, 956), + (956, -1, -1, 955, 955, 3, 62, -1, 0, 0, 4, 955, 957), + (957, -1, -1, 955, 955, 3, 63, -1, 0, 0, 4, 956, 958), + (958, -1, -1, 955, 955, 3, 64, -1, 0, 0, 4, 957, 959), + (959, -1, -1, 955, 955, 3, 65, -1, 0, 0, 4, 958, -1), + (960, 960, 960, 960, 960, 9, 59, 2760, 7, 4320, 3, -1, -1), + (961, 961, 961, 961, 961, 9, 59, 2759, 11, 4320, 3, -1, -1), + (962, -1, -1, 962, 962, 5, 65, -1, 0, 0, 7, -1, 963), + (963, -1, -1, 962, 962, 5, 65, -1, 0, 0, 7, 962, 964), + (964, -1, -1, 962, 962, 5, 65, -1, 0, 0, 7, 963, 965), + (965, -1, -1, 962, 962, 5, 65, -1, 0, 0, 7, 964, 966), + (966, -1, -1, 962, 962, 5, 65, -1, 0, 0, 7, 965, 6223), + (967, 967, 967, 967, 967, 3, 65, 4564, 10, 1800, 7, -1, 968), + (968, 967, 967, 967, 967, 6, 65, 4565, 10, 1800, 7, 967, 969), + (969, 967, 967, 967, 967, 9, 65, 4566, 10, 1800, 7, 968, 6464), + (970, 970, 970, 970, 970, 5, 65, 4828, 6, 1800, 7, -1, 971), + (971, 970, 970, 970, 970, 5, 65, 4829, 6, 1800, 7, 970, 972), + (972, 970, 970, 970, 970, 5, 65, 4830, 6, 1800, 7, 971, 973), + (973, 970, 970, 970, 970, 5, 65, 4831, 6, 1800, 7, 972, 974), + (974, 970, 970, 970, 970, 5, 65, 4832, 6, 1800, 7, 973, 1324), + (975, -1, -1, 498, 498, 5, 65, -1, 0, 0, 15, 887, 13262), + (976, -1, -1, 976, 976, 5, 59, -1, 0, 0, 15, -1, -1), + (977, 977, 977, 977, 977, 6, 64, 13835, 72, 600, 15, -1, -1), + (978, -1, -1, 71, 71, 5, 68, -1, 0, 0, 8, 677, -1), + (979, -1, -1, 979, 979, 3, 59, -1, 0, 0, 8, -1, 980), + (980, -1, -1, 979, 979, 6, 59, -1, 0, 0, 8, 979, 981), + (981, -1, -1, 979, 979, 9, 59, -1, 0, 0, 8, 980, -1), + (982, -1, -1, 982, 982, 3, 59, -1, 0, 0, 8, -1, 983), + (983, -1, -1, 982, 982, 6, 59, -1, 0, 0, 8, 982, 984), + (984, -1, -1, 982, 982, 9, 59, -1, 0, 0, 8, 983, -1), + (985, -1, -1, 985, 985, 3, 59, -1, 0, 0, 8, -1, 986), + (986, -1, -1, 985, 985, 6, 59, -1, 0, 0, 8, 985, 987), + (987, -1, -1, 985, 985, 9, 59, -1, 0, 0, 8, 986, -1), + (988, -1, -1, 988, 988, 3, 59, -1, 0, 0, 8, -1, 989), + (989, -1, -1, 988, 988, 6, 59, -1, 0, 0, 8, 988, 990), + (990, -1, -1, 988, 988, 9, 59, -1, 0, 0, 8, 989, -1), + (991, -1, -1, 991, 991, 3, 59, -1, 0, 0, 8, -1, 992), + (992, -1, -1, 991, 991, 6, 59, -1, 0, 0, 8, 991, 993), + (993, -1, -1, 991, 991, 9, 59, -1, 0, 0, 8, 992, -1), + (994, -1, -1, 994, 994, 3, 59, -1, 0, 0, 8, -1, 995), + (995, -1, -1, 994, 994, 6, 59, -1, 0, 0, 8, 994, 996), + (996, -1, -1, 994, 994, 9, 59, -1, 0, 0, 8, 995, -1), + (997, -1, -1, 997, 997, 5, 60, -1, 0, 0, 8, -1, 998), + (998, -1, -1, 997, 997, 5, 65, -1, 0, 0, 8, 997, 999), + (999, -1, -1, 997, 997, 5, 70, -1, 0, 0, 8, 998, 1113), + (1000, 1000, -1, 1000, 1000, 0, 5, 5824, 20, 1080, 0, -1, -1), + (1001, -1, -1, 418, 418, 5, 66, -1, 0, 0, 8, 422, 1002), + (1002, -1, -1, 418, 418, 5, 67, -1, 0, 0, 8, 1001, 1003), + (1003, -1, -1, 418, 418, 5, 68, -1, 0, 0, 8, 1002, 1004), + (1004, -1, -1, 418, 418, 5, 69, -1, 0, 0, 8, 1003, 1005), + (1005, -1, -1, 418, 418, 5, 70, -1, 0, 0, 8, 1004, 4678), + (1006, -1, -1, 1006, 1006, 5, 66, -1, 0, 0, 8, -1, 1007), + (1007, -1, -1, 1006, 1006, 5, 67, -1, 0, 0, 8, 1006, 1008), + (1008, -1, -1, 1006, 1006, 5, 68, -1, 0, 0, 8, 1007, 1009), + (1009, -1, -1, 1006, 1006, 5, 69, -1, 0, 0, 8, 1008, 1010), + (1010, -1, -1, 1006, 1006, 5, 70, -1, 0, 0, 8, 1009, 7516), + (1011, -1, -1, 1011, 1011, 0, 51, -1, 0, 0, 8, -1, 1012), + (1012, -1, -1, 1011, 1011, 0, 51, -1, 0, 0, 8, 1011, 1013), + (1013, -1, -1, 1011, 1011, 0, 51, -1, 0, 0, 8, 1012, 1014), + (1014, -1, -1, 1011, 1011, 0, 51, -1, 0, 0, 8, 1013, 1015), + (1016, -1, -1, 1011, 1011, 0, 51, -1, 0, 0, 8, 1015, -1), + (1017, 1017, 1017, 1017, 1017, 6, 59, 16531, 75, 15, 15, -1, 13726), + (1018, 1018, 1018, 1018, 1018, 2, 63, 16455, 69, 1, 15, -1, -1), + (1019, 718, 718, 718, 718, 12, 65, 21746, 7, 4320, 16, 720, 13454), + (1021, -1, -1, 1021, 1021, 5, 51, -1, 0, 0, 8, -1, 1022), + (1022, -1, -1, 1021, 1021, 5, 55, -1, 0, 0, 8, 1021, 1023), + (1023, -1, -1, 1021, 1021, 5, 60, -1, 0, 0, 8, 1022, 1024), + (1024, -1, -1, 1021, 1021, 5, 65, -1, 0, 0, 8, 1023, 1025), + (1025, -1, -1, 1021, 1021, 5, 70, -1, 0, 0, 8, 1024, 6521), + (1026, -1, -1, 1026, 1026, 3, 66, -1, 0, 0, 8, -1, 1027), + (1027, -1, -1, 1026, 1026, 3, 67, -1, 0, 0, 8, 1026, 1028), + (1028, -1, -1, 1026, 1026, 3, 68, -1, 0, 0, 8, 1027, 1029), + (1029, -1, -1, 1026, 1026, 3, 69, -1, 0, 0, 8, 1028, 1030), + (1030, -1, -1, 1026, 1026, 3, 70, -1, 0, 0, 8, 1029, 1389), + (1031, -1, -1, 65, 661, 3, 66, -1, 0, 0, 8, 675, 1032), + (1032, -1, -1, 65, 661, 3, 67, -1, 0, 0, 8, 1031, 1033), + (1033, -1, -1, 65, 661, 3, 68, -1, 0, 0, 8, 1032, 1034), + (1034, -1, -1, 65, 661, 3, 69, -1, 0, 0, 8, 1033, 1035), + (1035, -1, -1, 65, 661, 3, 70, -1, 0, 0, 8, 1034, 4693), + (1036, -1, -1, 683, 683, 5, 66, -1, 0, 0, 8, 685, 1037), + (1037, -1, -1, 683, 683, 5, 68, -1, 0, 0, 8, 1036, 1038), + (1038, -1, -1, 683, 683, 5, 70, -1, 0, 0, 8, 1037, 5301), + (1041, -1, -1, 1041, 1041, 3, 67, -1, 0, 0, 8, -1, 1042), + (1042, -1, -1, 1041, 1041, 6, 68, -1, 0, 0, 8, 1041, 1043), + (1043, -1, -1, 1041, 1041, 9, 69, -1, 0, 0, 8, 1042, 4707), + (1044, -1, -1, 1044, 1044, 3, 67, -1, 0, 0, 8, -1, 1045), + (1045, -1, -1, 1044, 1044, 6, 68, -1, 0, 0, 8, 1044, 1046), + (1046, -1, -1, 1044, 1044, 9, 69, -1, 0, 0, 8, 1045, 4710), + (1047, -1, -1, 1047, 1047, 3, 67, -1, 0, 0, 8, -1, 1048), + (1048, -1, -1, 1047, 1047, 6, 68, -1, 0, 0, 8, 1047, 1049), + (1049, -1, -1, 1047, 1047, 9, 69, -1, 0, 0, 8, 1048, 4713), + (1050, -1, -1, 1050, 1050, 3, 67, -1, 0, 0, 8, -1, 1051), + (1051, -1, -1, 1050, 1050, 6, 68, -1, 0, 0, 8, 1050, 1052), + (1052, -1, -1, 1050, 1050, 9, 69, -1, 0, 0, 8, 1051, 4716), + (1053, -1, -1, 119, 119, 3, 66, -1, 0, 0, 8, 442, 1054), + (1054, -1, -1, 119, 119, 3, 68, -1, 0, 0, 8, 1053, 1055), + (1055, -1, -1, 119, 119, 3, 70, -1, 0, 0, 8, 1054, 4722), + (1056, -1, -1, 1056, 1056, 5, 71, -1, 0, 0, 12, -1, 1057), + (1057, -1, -1, 1056, 1056, 5, 72, -1, 0, 0, 12, 1056, 1058), + (1058, -1, -1, 1056, 1056, 5, 73, -1, 0, 0, 12, 1057, 1059), + (1059, -1, -1, 1056, 1056, 5, 74, -1, 0, 0, 12, 1058, 1060), + (1060, -1, -1, 1056, 1056, 5, 75, -1, 0, 0, 12, 1059, 6431), + (1061, -1, -1, 125, 125, 5, 66, -1, 0, 0, 8, 453, 1062), + (1062, -1, -1, 125, 125, 5, 67, -1, 0, 0, 8, 1061, 1063), + (1063, -1, -1, 125, 125, 5, 68, -1, 0, 0, 8, 1062, 1064), + (1064, -1, -1, 125, 125, 5, 69, -1, 0, 0, 8, 1063, 1065), + (1065, -1, -1, 125, 125, 5, 70, -1, 0, 0, 8, 1064, 1394), + (1066, -1, -1, 122, 122, 5, 66, -1, 0, 0, 8, 458, 1067), + (1067, -1, -1, 122, 122, 5, 67, -1, 0, 0, 8, 1066, 1068), + (1068, -1, -1, 122, 122, 5, 68, -1, 0, 0, 8, 1067, 1069), + (1069, -1, -1, 122, 122, 5, 69, -1, 0, 0, 8, 1068, 1070), + (1070, -1, -1, 122, 122, 5, 70, -1, 0, 0, 8, 1069, 1399), + (1071, -1, -1, 1071, 1071, 3, 55, -1, 0, 0, 8, -1, 4764), + (1072, -1, -1, 1072, 1072, 5, 66, -1, 0, 0, 8, -1, 1073), + (1073, -1, -1, 1072, 1072, 5, 67, -1, 0, 0, 8, 1072, 1074), + (1074, -1, -1, 1072, 1072, 5, 68, -1, 0, 0, 8, 1073, 1075), + (1075, -1, -1, 1072, 1072, 5, 69, -1, 0, 0, 8, 1074, 1076), + (1076, -1, -1, 1072, 1072, 5, 70, -1, 0, 0, 8, 1075, 4744), + (1083, -1, -1, 77, 77, 3, 66, -1, 0, 0, 8, 436, 1084), + (1084, -1, -1, 77, 77, 6, 68, -1, 0, 0, 8, 1083, 1085), + (1085, -1, -1, 77, 77, 9, 70, -1, 0, 0, 8, 1084, 12449), + (1086, -1, -1, 80, 80, 3, 66, -1, 0, 0, 8, 439, 1087), + (1087, -1, -1, 80, 80, 6, 68, -1, 0, 0, 8, 1086, 1088), + (1088, -1, -1, 80, 80, 9, 70, -1, 0, 0, 8, 1087, 4779), + (1089, -1, -1, 1089, 1089, 3, 59, -1, 0, 0, 8, -1, 1090), + (1090, -1, -1, 1089, 1089, 6, 59, -1, 0, 0, 8, 1089, 1091), + (1091, -1, -1, 1089, 1089, 9, 59, -1, 0, 0, 8, 1090, -1), + (1092, -1, -1, 1092, 1092, 7, 67, -1, 0, 0, 8, -1, -1), + (1093, -1, -1, 1093, 1093, 3, 66, -1, 0, 0, 8, -1, 1094), + (1094, -1, -1, 1093, 1093, 3, 67, -1, 0, 0, 8, 1093, 1095), + (1095, -1, -1, 1093, 1093, 3, 68, -1, 0, 0, 8, 1094, 1096), + (1096, -1, -1, 1093, 1093, 3, 69, -1, 0, 0, 8, 1095, 1097), + (1097, -1, -1, 1093, 1093, 3, 70, -1, 0, 0, 8, 1096, -1), + (1099, -1, -1, 767, 767, 3, 67, -1, 0, 0, 8, 769, 1100), + (1100, -1, -1, 767, 767, 6, 68, -1, 0, 0, 8, 1099, 1101), + (1101, -1, -1, 767, 767, 9, 69, -1, 0, 0, 8, 1100, 12423), + (1102, 592, 592, 592, 592, 3, 66, 5825, 2, 18, 8, 706, 1103), + (1103, 592, 592, 592, 592, 3, 67, 5826, 2, 18, 8, 1102, 1104), + (1104, 592, 592, 592, 592, 3, 68, 5827, 2, 18, 8, 1103, 1105), + (1105, 592, 592, 592, 592, 3, 69, 5828, 2, 18, 8, 1104, 1106), + (1106, 592, 592, 592, 592, 3, 70, 5829, 2, 18, 8, 1105, 4975), + (1107, -1, -1, 1107, 1107, 3, 66, -1, 0, 0, 8, -1, 1108), + (1108, -1, -1, 1107, 1107, 6, 68, -1, 0, 0, 8, 1107, 1109), + (1109, -1, -1, 1107, 1107, 9, 70, -1, 0, 0, 8, 1108, 5286), + (1110, 1110, 1110, 1110, 1110, 3, 68, 5830, 3, 2160, 8, -1, 1111), + (1111, 1110, 1110, 1110, 1110, 6, 69, 5831, 3, 2160, 8, 1110, 1112), + (1112, 1110, 1110, 1110, 1110, 9, 70, 5832, 3, 2160, 8, 1111, 6400), + (1113, -1, -1, 997, 997, 5, 75, -1, 0, 0, 16, 999, 1114), + (1114, -1, -1, 997, 997, 5, 80, -1, 0, 0, 16, 1113, 1115), + (1115, -1, -1, 997, 997, 5, 85, -1, 0, 0, 16, 1114, -1), + (1116, 1116, 1116, 1116, 1116, 3, 68, 5837, 4, 2160, 8, -1, 1117), + (1117, 1116, 1116, 1116, 1116, 6, 69, 5838, 4, 2160, 8, 1116, 1118), + (1118, 1116, 1116, 1116, 1116, 9, 70, 5839, 4, 2160, 8, 1117, 4980), + (1119, 1119, 1119, 1119, 1119, 3, 68, 5841, 8, 900, 8, -1, 1120), + (1120, 1119, 1119, 1119, 1119, 6, 69, 5842, 8, 900, 8, 1119, 1121), + (1121, 1119, 1119, 1119, 1119, 9, 70, 5843, 8, 900, 8, 1120, 4964), + (1122, -1, -1, 1122, 1122, 7, 67, -1, 0, 0, 8, -1, -1), + (1123, 291, 291, 291, 291, 5, 66, 5854, 5, 900, 8, 291, 1124), + (1124, 291, 291, 291, 291, 5, 68, 5855, 5, 900, 8, 1123, 1125), + (1125, 291, 291, 291, 291, 5, 70, 5856, 5, 900, 8, 1124, 4969), + (1126, 1126, 1126, 1126, 1126, 3, 67, 5845, 2, 2160, 8, -1, 1127), + (1127, 1126, 1126, 1126, 1126, 6, 68, 5846, 2, 2160, 8, 1126, 1128), + (1128, 1126, 1126, 1126, 1126, 9, 69, 5847, 2, 2160, 8, 1127, 5513), + (1129, -1, -1, 1129, 1129, 5, 67, -1, 0, 0, 8, -1, 1130), + (1130, -1, -1, 1129, 1129, 3, 69, -1, 0, 0, 8, 1129, -1), + (1131, -1, -1, 1131, 1131, 3, 59, -1, 0, 0, 3, -1, 1132), + (1132, -1, -1, 1131, 1131, 6, 59, -1, 0, 0, 3, 1131, 1133), + (1133, -1, -1, 1131, 1131, 9, 59, -1, 0, 0, 3, 1132, 11082), + (1134, -1, -1, 1134, 1134, 3, 61, -1, 0, 0, 4, -1, 1135), + (1135, -1, -1, 1134, 1134, 4, 63, -1, 0, 0, 4, 1134, 1136), + (1136, -1, -1, 1134, 1134, 5, 65, -1, 0, 0, 4, 1135, 1158), + (1137, -1, -1, 1137, 1137, 3, 59, -1, 0, 0, 3, -1, 1138), + (1138, -1, -1, 1137, 1137, 6, 59, -1, 0, 0, 3, 1137, 1139), + (1139, -1, -1, 1137, 1137, 9, 59, -1, 0, 0, 3, 1138, -1), + (1140, -1, -1, 1140, 1140, 3, 61, -1, 0, 0, 4, -1, 1141), + (1141, -1, -1, 1140, 1140, 3, 63, -1, 0, 0, 4, 1140, 1142), + (1142, -1, -1, 1140, 1140, 3, 65, -1, 0, 0, 4, 1141, -1), + (1146, 1146, 1146, 1146, 1146, 3, 59, 6040, 3, 1500, 3, -1, 1147), + (1147, 1146, 1146, 1146, 1146, 6, 59, 6041, 3, 1200, 3, 1146, 1148), + (1148, 1146, 1146, 1146, 1146, 9, 59, 6042, 3, 900, 3, 1147, -1), + (1149, 1149, -1, 1149, 1149, 12, 65, 5853, 5, 1320, 7, -1, -1), + (1150, 1150, 1150, 1150, 1150, 3, 65, 5848, 2, 2160, 7, -1, 1151), + (1151, 1150, 1150, 1150, 1150, 6, 65, 5849, 2, 2160, 7, 1150, 1152), + (1152, 1150, 1150, 1150, 1150, 9, 65, 5850, 2, 2160, 7, 1151, -1), + (1155, -1, -1, 1155, 1155, 3, 65, -1, 0, 0, 7, -1, 1156), + (1156, -1, -1, 1155, 1155, 6, 65, -1, 0, 0, 7, 1155, 1157), + (1157, -1, -1, 1155, 1155, 9, 65, -1, 0, 0, 7, 1156, -1), + (1158, -1, -1, 1134, 1134, 4, 66, -1, 0, 0, 8, 1136, 1159), + (1159, -1, -1, 1134, 1134, 4, 67, -1, 0, 0, 8, 1158, 1160), + (1160, -1, -1, 1134, 1134, 4, 68, -1, 0, 0, 8, 1159, 1161), + (1161, -1, -1, 1134, 1134, 4, 69, -1, 0, 0, 8, 1160, 1162), + (1162, -1, -1, 1134, 1134, 4, 70, -1, 0, 0, 8, 1161, 4790), + (1163, -1, -1, 255, 255, 5, 67, -1, 0, 0, 8, 544, 1164), + (1164, -1, -1, 255, 255, 5, 68, -1, 0, 0, 8, 1163, 1165), + (1165, -1, -1, 255, 255, 5, 69, -1, 0, 0, 8, 1164, 4795), + (1166, -1, -1, 1143, 1143, 3, 65, -1, 0, 0, 15, -1, 1167), + (1167, -1, -1, 1143, 1143, 6, 65, -1, 0, 0, 15, 1166, 1168), + (1168, -1, -1, 1143, 1143, 9, 65, -1, 0, 0, 15, 1167, 6911), + (1172, -1, -1, 631, 631, 5, 67, -1, 0, 0, 8, 633, 1173), + (1173, -1, -1, 631, 631, 5, 68, -1, 0, 0, 8, 1172, 1174), + (1174, -1, -1, 631, 631, 5, 69, -1, 0, 0, 8, 1173, 4798), + (1178, 1178, 1178, 1178, 1178, 3, 68, 5857, 4, 900, 8, -1, 1179), + (1179, 1178, 1178, 1178, 1178, 6, 69, 5858, 4, 900, 8, 1178, 1180), + (1180, 1178, 1178, 1178, 1178, 9, 70, 5859, 4, 900, 8, 1179, 5779), + (1181, -1, -1, 1181, 1181, 3, 66, -1, 0, 0, 8, -1, 1182), + (1182, -1, -1, 1181, 1181, 3, 67, -1, 0, 0, 8, 1181, 1183), + (1183, -1, -1, 1181, 1181, 3, 68, -1, 0, 0, 8, 1182, 1184), + (1184, -1, -1, 1181, 1181, 3, 69, -1, 0, 0, 8, 1183, 1185), + (1185, -1, -1, 1181, 1181, 3, 70, -1, 0, 0, 8, 1184, -1), + (1186, -1, -1, 1186, 1186, 3, 66, -1, 0, 0, 8, -1, 1187), + (1187, -1, -1, 1186, 1186, 6, 68, -1, 0, 0, 8, 1186, 1188), + (1188, -1, -1, 1186, 1186, 9, 70, -1, 0, 0, 8, 1187, 4776), + (1189, 459, 459, 459, 459, 3, 66, 5860, 8, 180, 8, 461, 1190), + (1190, 459, 459, 459, 459, 6, 68, 5861, 8, 180, 8, 1189, 1191), + (1191, 459, 459, 459, 459, 9, 70, 5862, 8, 180, 8, 1190, 5062), + (1192, 1192, 1192, 1192, 1192, 5, 67, 5863, 12, 1320, 8, -1, 1193), + (1193, 1192, 1192, 1192, 1192, 5, 68, 5864, 12, 1320, 8, 1192, 1194), + (1194, 1192, 1192, 1192, 1192, 5, 69, 5865, 12, 1320, 8, 1193, 5076), + (1195, 1195, 1195, 1195, 1195, 12, 70, 5866, 13, 2160, 8, -1, 5079), + (1196, -1, -1, 1196, 1196, 2, 81, -1, 0, 0, 15, -1, 1197), + (1197, -1, -1, 1196, 1196, 2, 81, -1, 0, 0, 15, 1196, 1198), + (1198, -1, -1, 1196, 1196, 2, 81, -1, 0, 0, 15, 1197, 1199), + (1199, -1, -1, 1196, 1196, 2, 81, -1, 0, 0, 15, 1198, 1200), + (1200, -1, -1, 1196, 1196, 2, 81, -1, 0, 0, 15, 1199, 10743), + (1203, 131, 131, 131, 131, 5, 67, 5869, 4, 900, 8, 532, 1204), + (1204, 131, 131, 131, 131, 5, 68, 5870, 4, 900, 8, 1203, 1205), + (1205, 131, 131, 131, 131, 5, 69, 5988, 4, 900, 8, 1204, 5070), + (1206, 749, 749, 749, 749, 5, 66, 5871, 11, 1800, 8, 753, 1207), + (1207, 749, 749, 749, 749, 5, 68, 5872, 11, 1800, 8, 1206, 1208), + (1208, 749, 749, 749, 749, 5, 70, 5873, 11, 1800, 8, 1207, 17298), + (1209, 1209, -1, 1209, 1209, 12, 70, 5912, 14, 4320, 8, -1, -1), + (1210, -1, -1, 1210, 1210, 3, 66, -1, 0, 0, 8, -1, 1211), + (1211, -1, -1, 1210, 1210, 6, 68, -1, 0, 0, 8, 1210, 1212), + (1212, -1, -1, 1210, 1210, 9, 70, -1, 0, 0, 8, 1211, 1483), + (1213, -1, -1, 1210, 1213, 3, 66, -1, 0, 0, 8, -1, 1214), + (1214, -1, -1, 1210, 1213, 6, 68, -1, 0, 0, 8, 1213, 1215), + (1215, -1, -1, 1210, 1213, 9, 70, -1, 0, 0, 8, 1214, 4755), + (1216, -1, -1, 83, 83, 3, 81, -1, 0, 0, 16, -1, 1217), + (1217, -1, -1, 83, 83, 6, 81, -1, 0, 0, 16, 1216, 1218), + (1218, -1, -1, 83, 83, 9, 81, -1, 0, 0, 16, 1217, 15422), + (1219, -1, -1, 1435, 1435, 10, 71, -1, 0, 0, 16, -1, 1220), + (1220, -1, -1, 1435, 1435, 11, 71, -1, 0, 0, 16, 1219, 1221), + (1221, -1, -1, 1435, 1435, 12, 71, -1, 0, 0, 16, 1220, 1648), + (1222, 757, -1, 757, 1222, 5, 66, 5877, 6, 1800, 8, 761, 1223), + (1223, 757, -1, 757, 1222, 5, 68, 5878, 6, 1800, 8, 1222, 1224), + (1224, 757, -1, 757, 1222, 5, 70, 5879, 6, 1800, 8, 1223, 5051), + (1225, 548, 548, 548, 548, 5, 67, 5881, 5, 900, 8, 550, 1226), + (1226, 548, 548, 548, 548, 5, 68, 5882, 5, 900, 8, 1225, 1227), + (1227, 548, 548, 548, 548, 5, 69, 5883, 5, 900, 8, 1226, 5054), + (1228, 1228, 1228, 1228, 1228, 9, 70, 5880, 9, 600, 8, -1, -1), + (1229, 1229, 1229, 1229, 1229, 7, 66, 6094, 10, 600, 8, -1, -1), + (1230, -1, -1, 1230, 1230, 1, 51, -1, 0, 0, 8, -1, 1231), + (1231, -1, -1, 1230, 1230, 2, 53, -1, 0, 0, 8, 1230, 1232), + (1232, -1, -1, 1230, 1230, 3, 55, -1, 0, 0, 8, 1231, 5000), + (1233, 1233, -1, 1233, 1233, 3, 68, 5887, 7, 2160, 8, -1, 1234), + (1234, 1233, -1, 1233, 1233, 6, 69, 5888, 7, 2160, 8, 1233, 1235), + (1235, 1233, -1, 1233, 1233, 9, 70, 5889, 7, 2160, 8, 1234, -1), + (1239, 1239, 1239, 1239, 1239, 12, 70, 5903, 6, 600, 8, -1, 5868), + (1242, 1242, 1242, 1242, 1242, 3, 67, 5906, 9, 1320, 8, -1, 1243), + (1243, 1242, 1242, 1242, 1242, 6, 68, 5907, 9, 1320, 8, 1242, 1244), + (1244, 1242, 1242, 1242, 1242, 9, 69, 5908, 9, 1320, 8, 1243, 5857), + (1245, 1245, 1245, 1245, 1245, 3, 66, 5909, 8, 2160, 8, -1, 1246), + (1246, 1245, 1245, 1245, 1245, 6, 68, 5910, 8, 2160, 8, 1245, 1247), + (1247, 1245, 1245, 1245, 1245, 9, 70, 5911, 8, 2160, 8, 1246, 15459), + (1248, 616, 616, 616, 616, 3, 68, 6226, 7, 900, 8, 618, 1249), + (1249, 616, 616, 616, 616, 6, 69, 6227, 7, 900, 8, 1248, 1250), + (1250, 616, 616, 616, 616, 9, 70, 6228, 7, 900, 8, 1249, 6254), + (1251, 1251, 1251, 1251, 1251, 9, 70, 5915, 9, 1320, 8, -1, -1), + (1252, 1252, 1252, 1252, 1252, 9, 68, 5913, 9, 1320, 8, -1, -1), + (1253, 1253, 1253, 1253, 1253, 9, 67, 5916, 16, 1320, 8, -1, -1), + (1254, 1254, 1254, 1254, 1254, 9, 69, 5914, 16, 1320, 8, -1, -1), + (1255, 1255, 1255, 1255, 1255, 9, 70, 5918, 4, 1080, 8, -1, -1), + (1265, -1, -1, 820, 820, 5, 66, -1, 0, 0, 8, 822, 1266), + (1266, -1, -1, 820, 820, 5, 68, -1, 0, 0, 8, 1265, 1267), + (1267, -1, -1, 820, 820, 5, 70, -1, 0, 0, 8, 1266, 4813), + (1268, -1, -1, 807, 807, 5, 66, -1, 0, 0, 8, 809, 1269), + (1269, -1, -1, 807, 807, 5, 68, -1, 0, 0, 8, 1268, 1270), + (1270, -1, -1, 807, 807, 5, 70, -1, 0, 0, 8, 1269, 5922), + (1272, 209, 209, 209, 1272, 5, 66, 5919, 12, 5, 8, -1, 6378), + (1274, 1274, 1274, 1274, 1274, 3, 68, 5921, 9, 540, 8, -1, 1275), + (1275, 1274, 1274, 1274, 1274, 6, 69, 5922, 9, 540, 8, 1274, 1276), + (1276, 1274, 1274, 1274, 1274, 9, 70, 5923, 9, 540, 8, 1275, 4864), + (1277, 188, 188, 188, 188, 9, 68, 5924, 2, 30, 8, 188, 5044), + (1278, 534, 534, 534, 534, 5, 67, 5927, 4, 2160, 8, 717, 1279), + (1279, 534, 534, 534, 534, 5, 68, 5928, 4, 2160, 8, 1278, 1280), + (1280, 534, 534, 534, 534, 5, 69, 5929, 4, 2160, 8, 1279, 5041), + (1284, -1, -1, 1284, 1284, 3, 66, -1, 0, 0, 8, -1, 1285), + (1285, -1, -1, 1284, 1284, 6, 68, -1, 0, 0, 8, 1284, 1286), + (1286, -1, -1, 1284, 1284, 9, 70, -1, 0, 0, 8, 1285, 5035), + (1287, -1, -1, 1287, 1287, 3, 67, -1, 0, 0, 8, -1, 1288), + (1288, -1, -1, 1287, 1287, 6, 68, -1, 0, 0, 8, 1287, 1289), + (1289, -1, -1, 1287, 1287, 9, 69, -1, 0, 0, 8, 1288, 5516), + (1290, -1, -1, 864, 864, 3, 66, -1, 0, 0, 8, 866, 1291), + (1291, -1, -1, 864, 864, 6, 68, -1, 0, 0, 8, 1290, 1292), + (1292, -1, -1, 864, 864, 9, 70, -1, 0, 0, 8, 1291, 4983), + (1293, 545, 545, 545, 545, 3, 68, 6079, 3, 900, 8, 547, 1294), + (1294, 545, 545, 545, 545, 6, 69, 6080, 3, 900, 8, 1293, 1295), + (1295, 545, 545, 545, 545, 9, 70, 6081, 3, 900, 8, 1294, 4997), + (1296, -1, -1, 1296, 1296, 3, 66, -1, 0, 0, 8, -1, 1297), + (1297, -1, -1, 1296, 1296, 3, 67, -1, 0, 0, 8, 1296, 1298), + (1298, -1, -1, 1296, 1296, 3, 68, -1, 0, 0, 8, 1297, 1299), + (1299, -1, -1, 1296, 1296, 3, 69, -1, 0, 0, 8, 1298, 1300), + (1300, -1, -1, 1296, 1296, 3, 70, -1, 0, 0, 8, 1299, -1), + (1301, -1, -1, 846, 846, 3, 66, -1, 0, 0, 8, 848, 1302), + (1302, -1, -1, 846, 846, 6, 68, -1, 0, 0, 8, 1301, 1303), + (1303, -1, -1, 846, 846, 9, 70, -1, 0, 0, 8, 1302, 4948), + (1304, -1, -1, 1304, 1304, 3, 66, -1, 0, 0, 8, -1, 1305), + (1305, -1, -1, 1304, 1304, 6, 68, -1, 0, 0, 8, 1304, 1306), + (1306, -1, -1, 1304, 1304, 9, 70, -1, 0, 0, 8, 1305, 6029), + (1307, -1, -1, 1307, 1307, 5, 66, -1, 0, 0, 8, -1, 1308), + (1308, -1, -1, 1307, 1307, 5, 67, -1, 0, 0, 8, 1307, 1309), + (1309, -1, -1, 1307, 1307, 5, 68, -1, 0, 0, 8, 1308, 1310), + (1310, -1, -1, 1307, 1307, 5, 69, -1, 0, 0, 8, 1309, 1311), + (1311, -1, -1, 1307, 1307, 5, 70, -1, 0, 0, 8, 1310, 6660), + (1313, -1, -1, 1313, 1313, 3, 68, -1, 0, 0, 8, -1, 1314), + (1314, -1, -1, 1313, 1313, 6, 69, -1, 0, 0, 8, 1313, 1315), + (1315, -1, -1, 1313, 1313, 9, 70, -1, 0, 0, 8, 1314, 5029), + (1316, -1, -1, 210, 210, 5, 67, -1, 0, 0, 8, 212, 1317), + (1317, -1, -1, 210, 210, 5, 68, -1, 0, 0, 8, 1316, 1318), + (1318, -1, -1, 210, 210, 5, 69, -1, 0, 0, 8, 1317, 6072), + (1319, -1, -1, 634, 634, 5, 67, -1, 0, 0, 8, 845, 1320), + (1320, -1, -1, 634, 634, 5, 68, -1, 0, 0, 8, 1319, 1321), + (1321, -1, -1, 634, 634, 5, 69, -1, 0, 0, 8, 1320, 5032), + (1323, 1323, 1323, 1323, 1323, 12, 70, 5932, 7, 2160, 8, -1, -1), + (1324, 970, 970, 970, 970, 5, 66, 6030, 6, 1800, 8, 974, 1325), + (1325, 970, 970, 970, 970, 5, 68, 6031, 6, 1800, 8, 1324, 1326), + (1326, 970, 970, 970, 970, 5, 70, 6032, 6, 1800, 8, 1325, 17311), + (1327, 1327, 1327, 1327, 1327, 5, 67, 5933, 10, 900, 8, -1, 1328), + (1328, 1327, 1327, 1327, 1327, 5, 68, 5934, 10, 900, 8, 1327, 1329), + (1329, 1327, 1327, 1327, 1327, 5, 69, 5935, 10, 900, 8, 1328, 5314), + (1330, 912, 912, 912, 912, 3, 66, 5936, 4, 3600, 8, 914, 1331), + (1331, 912, 912, 912, 912, 6, 68, 5937, 4, 3600, 8, 1330, 1332), + (1332, 912, 912, 912, 912, 9, 70, 5938, 4, 3600, 8, 1331, 7119), + (1334, 1334, 1334, 1334, 1334, 3, 66, 5943, 11, 4320, 8, -1, 1335), + (1335, 1334, 1334, 1334, 1334, 6, 68, 5944, 11, 4320, 8, 1334, 1336), + (1336, 1334, 1334, 1334, 1334, 9, 70, 5945, 11, 4320, 8, 1335, 6152), + (1337, 1337, 1337, 1337, 1337, 5, 67, 5946, 13, 4320, 8, -1, 1338), + (1338, 1337, 1337, 1337, 1337, 5, 68, 5947, 13, 4320, 8, 1337, 1339), + (1339, 1337, 1337, 1337, 1337, 5, 69, 5948, 13, 4320, 8, 1338, 6158), + (1340, 921, 921, 921, 921, 12, 69, 5950, 8, 60, 8, 921, 5280), + (1341, 922, 922, 922, 922, 12, 68, 5951, 8, 60, 8, 922, 5281), + (1342, 923, 923, 923, 923, 12, 67, 5952, 8, 60, 8, 923, 5282), + (1343, 1343, 1343, 1343, 1343, 9, 69, 5953, 9, 300, 8, -1, -1), + (1344, 155, 155, 155, 155, 12, 70, 5949, 8, 60, 8, 533, 5279), + (1345, 1345, 1345, 1345, 1345, 5, 67, 6132, 6, 900, 8, -1, 1346), + (1346, 1345, 1345, 1345, 1345, 5, 68, 6133, 6, 900, 8, 1345, 1347), + (1347, 1345, 1345, 1345, 1345, 5, 69, 6134, 6, 900, 8, 1346, 5003), + (1348, 1348, 1348, 1348, 1348, 3, 68, 6090, 0, 3600, 8, -1, 1349), + (1349, 1348, 1348, 1348, 1348, 6, 69, 6091, 0, 3600, 8, 1348, 1350), + (1350, 1348, 1348, 1348, 1348, 9, 70, 6092, 0, 3600, 8, 1349, 5770), + (1351, 1351, 1351, 1351, 1351, 5, 67, 5939, 5, 30, 8, -1, 6133), + (1352, 1352, 1352, 1352, 1352, 3, 67, 6067, 3, 60, 8, -1, 1353), + (1353, 1352, 1352, 1352, 1352, 6, 68, 6068, 3, 60, 8, 1352, 1354), + (1354, 1352, 1352, 1352, 1352, 9, 69, 6069, 3, 60, 8, 1353, 6313), + (1355, 1355, 1355, 1355, 1355, 3, 68, 6070, 3, 60, 8, -1, 1356), + (1356, 1355, 1355, 1355, 1355, 6, 69, 6071, 3, 60, 8, 1355, 1357), + (1357, 1355, 1355, 1355, 1355, 9, 70, 6072, 3, 60, 8, 1356, 5240), + (1358, 1358, 1358, 1358, 1358, 3, 66, 6073, 3, 60, 8, -1, 1359), + (1359, 1358, 1358, 1358, 1358, 6, 67, 6074, 3, 60, 8, 1358, 1360), + (1360, 1358, 1358, 1358, 1358, 9, 68, 6075, 3, 60, 8, 1359, 6307), + (1361, -1, -1, 1361, 1361, 0, 65, -1, 0, 0, 3, -1, -1), + (1362, -1, -1, 1362, 1362, 0, 65, -1, 0, 0, 3, -1, -1), + (1363, -1, -1, 1363, 1363, 0, 68, -1, 0, 0, 3, -1, -1), + (1364, -1, -1, 1364, 1364, 0, 68, -1, 0, 0, 3, -1, -1), + (1365, -1, -1, 1365, 1365, 0, 68, -1, 0, 0, 3, -1, -1), + (1366, -1, -1, 1366, 1366, 0, 65, -1, 0, 0, 3, -1, -1), + (1367, -1, -1, 1367, 1367, 0, 65, -1, 0, 0, 3, -1, -1), + (1368, -1, -1, 1368, 1368, 0, 68, -1, 0, 0, 3, -1, -1), + (1369, -1, -1, 1369, 1369, 0, 68, -1, 0, 0, 3, -1, -1), + (1370, -1, -1, 1370, 1370, 0, 68, -1, 0, 0, 3, -1, -1), + (1371, 1371, 1371, 1371, 1371, 0, 1, 6880, 23, 72000, 0, -1, -1), + (1372, 1372, 1372, 1372, 1372, 0, 1, 6881, 24, 72000, 0, -1, -1), + (1373, 1373, 1373, 1373, 1373, 0, 1, 6882, 25, 72000, 0, -1, -1), + (1374, 1374, 1374, 1374, 1374, 0, 1, 6883, 26, 590400, 0, -1, -1), + (1375, 1375, 1375, 1375, 1375, 0, 1, 6884, 27, 72000, 0, -1, -1), + (1376, 1376, 1376, 1376, 1376, 0, 1, 6885, 28, 244800, 0, -1, -1), + (1377, 1377, 1377, 1377, 1377, 0, 1, 6886, 29, 14400, 0, -1, -1), + (1378, -1, -1, 1378, 1378, 0, 1, -1, 0, 0, 10, -1, 1379), + (1379, -1, -1, 1379, 1379, 0, 1, -1, 0, 0, 10, 1378, 1380), + (1380, -1, -1, 1380, 1380, 0, 1, -1, 0, 0, 10, 1379, 1381), + (1382, -1, -1, 1382, 1382, 0, 1, -1, 0, 0, 10, 1381, -1), + (1383, 1383, 1383, 1383, 1383, 3, 59, 8048, 6, 300, 3, -1, 1384), + (1384, 1383, 1383, 1383, 1383, 6, 59, 8049, 6, 300, 3, 1383, 1385), + (1385, 1383, 1383, 1383, 1383, 9, 59, 8050, 6, 300, 3, 1384, 1386), + (1386, 1383, 1383, 1383, 1383, 9, 65, 8052, 6, 300, 4, 1385, 1387), + (1387, 1383, 1383, 1383, 1383, 9, 70, 8053, 6, 300, 10, 1386, 5084), + (1388, -1, -1, 1388, 1388, 9, 70, -1, 0, 0, 10, -1, -1), + (1389, -1, -1, 1026, 1026, 5, 70, -1, 0, 0, 10, 1030, 1390), + (1390, -1, -1, 1026, 1026, 5, 70, -1, 0, 0, 10, 1389, 1391), + (1391, -1, -1, 1026, 1026, 5, 70, -1, 0, 0, 10, 1390, 1392), + (1392, -1, -1, 1026, 1026, 5, 70, -1, 0, 0, 10, 1391, 1393), + (1393, -1, -1, 1026, 1026, 5, 70, -1, 0, 0, 10, 1392, 4683), + (1394, -1, -1, 125, 125, 5, 70, -1, 0, 0, 10, 1065, 1395), + (1395, -1, -1, 125, 125, 5, 70, -1, 0, 0, 10, 1394, 1396), + (1396, -1, -1, 125, 125, 5, 70, -1, 0, 0, 10, 1395, 1397), + (1397, -1, -1, 125, 125, 5, 70, -1, 0, 0, 10, 1396, 1398), + (1398, -1, -1, 125, 125, 5, 70, -1, 0, 0, 10, 1397, 5519), + (1399, -1, -1, 122, 122, 5, 70, -1, 0, 0, 10, 1070, 1400), + (1400, -1, -1, 122, 122, 5, 70, -1, 0, 0, 10, 1399, 1401), + (1401, -1, -1, 122, 122, 5, 70, -1, 0, 0, 10, 1400, 1402), + (1402, -1, -1, 122, 122, 5, 70, -1, 0, 0, 10, 1401, 1403), + (1403, -1, -1, 122, 122, 5, 70, -1, 0, 0, 10, 1402, 5524), + (1404, 1404, 1404, 1404, 1404, 5, 66, 8054, 15, 2160, 10, -1, 1405), + (1405, 1404, 1404, 1404, 1404, 5, 67, 8055, 15, 2160, 10, 1404, 1406), + (1406, 1404, 1404, 1404, 1404, 5, 68, 8056, 15, 2160, 10, 1405, 1407), + (1407, 1404, 1404, 1404, 1404, 5, 69, 8057, 15, 2160, 10, 1406, 1408), + (1408, 1404, 1404, 1404, 1404, 5, 70, 8058, 15, 2160, 10, 1407, 12880), + (1409, 1409, 1409, 1409, 1409, 5, 66, 8054, 15, 2160, 10, -1, 1410), + (1410, 1409, 1409, 1409, 1409, 5, 67, 8055, 15, 2160, 10, 1409, 1411), + (1411, 1409, 1409, 1409, 1409, 5, 68, 8056, 15, 2160, 10, 1410, 1412), + (1412, 1409, 1409, 1409, 1409, 5, 69, 8057, 15, 2160, 10, 1411, 1413), + (1413, 1409, 1409, 1409, 1409, 5, 70, 8058, 15, 2160, 10, 1412, -1), + (1414, -1, -1, 1414, 1414, 5, 66, -1, 0, 0, 10, -1, 1415), + (1415, -1, -1, 1414, 1414, 5, 67, -1, 0, 0, 10, 1414, 1416), + (1416, -1, -1, 1414, 1414, 5, 68, -1, 0, 0, 10, 1415, 1417), + (1417, -1, -1, 1414, 1414, 5, 69, -1, 0, 0, 10, 1416, 1418), + (1418, -1, -1, 1414, 1414, 5, 70, -1, 0, 0, 10, 1417, 12874), + (1419, 1419, 1419, 1419, 1419, 9, 74, 16441, 52, 300, 15, -1, -1), + (1420, -1, -1, 1420, 1420, 3, 66, -1, 0, 0, 10, -1, 1421), + (1421, -1, -1, 1420, 1420, 3, 67, -1, 0, 0, 10, 1420, 1422), + (1422, -1, -1, 1420, 1420, 3, 68, -1, 0, 0, 10, 1421, 1423), + (1423, -1, -1, 1420, 1420, 3, 69, -1, 0, 0, 10, 1422, 1424), + (1424, -1, -1, 1420, 1420, 3, 70, -1, 0, 0, 10, 1423, -1), + (1425, 1425, 1425, 1425, 1425, 5, 70, 8060, 2, 2160, 10, -1, 1426), + (1426, 1425, 1425, 1425, 1425, 5, 70, 8061, 2, 2160, 10, 1425, 1427), + (1427, 1425, 1425, 1425, 1425, 5, 70, 8063, 2, 2160, 10, 1426, 1428), + (1428, 1425, 1425, 1425, 1425, 5, 70, 8066, 2, 2160, 10, 1427, 1429), + (1429, 1425, 1425, 1425, 1425, 5, 70, 8070, 2, 2160, 10, 1428, 5759), + (1430, -1, -1, 795, 795, 3, 70, -1, 0, 0, 10, 799, 1431), + (1431, -1, -1, 795, 795, 6, 70, -1, 0, 0, 10, 1430, 1432), + (1432, -1, -1, 795, 795, 9, 70, -1, 0, 0, 10, 1431, 4897), + (1435, -1, -1, 1435, 1435, 3, 66, -1, 0, 0, 10, -1, 1436), + (1436, -1, -1, 1435, 1435, 6, 68, -1, 0, 0, 10, 1435, 1437), + (1437, -1, -1, 1435, 1435, 9, 70, -1, 0, 0, 10, 1436, 4773), + (1440, 517, 517, 517, 517, 5, 66, 8109, 12, 600, 10, 519, 1441), + (1441, 517, 517, 517, 517, 5, 67, 8110, 12, 600, 10, 1440, 1442), + (1442, 517, 517, 517, 517, 5, 68, 8111, 12, 600, 10, 1441, 1443), + (1443, 517, 517, 517, 517, 5, 69, 8112, 12, 600, 10, 1442, 1444), + (1444, 517, 517, 517, 517, 5, 70, 8113, 12, 600, 10, 1443, 7296), + (1453, -1, -1, 1453, 1453, 5, 66, -1, 0, 0, 10, -1, 1454), + (1454, -1, -1, 1453, 1453, 5, 67, -1, 0, 0, 10, 1453, 1455), + (1455, -1, -1, 1453, 1453, 5, 68, -1, 0, 0, 10, 1454, 1456), + (1456, -1, -1, 1453, 1453, 5, 69, -1, 0, 0, 10, 1455, 1457), + (1457, -1, -1, 1453, 1453, 5, 70, -1, 0, 0, 10, 1456, -1), + (1458, 1458, 1458, 1458, 1458, 12, 70, 8124, 6, 4320, 10, -1, -1), + (1459, 1459, 1459, 1459, 1459, 7, 70, 8125, 11, 1800, 10, -1, 1460), + (1460, 1459, 1459, 1459, 1459, 7, 70, 8126, 11, 1800, 10, 1459, 1461), + (1461, 1459, 1459, 1459, 1459, 7, 70, 8127, 11, 1800, 10, 1460, 5080), + (1462, 1462, 1462, 1462, 1462, 3, 59, 8133, 5, 300, 3, -1, 1463), + (1463, 1462, 1462, 1462, 1462, 6, 59, 8134, 5, 300, 3, 1462, 1464), + (1464, 1462, 1462, 1462, 1462, 9, 59, 8135, 5, 300, 3, 1463, 1465), + (1465, 1462, 1462, 1462, 1462, 9, 65, 8137, 5, 300, 4, 1464, 1466), + (1466, 1462, 1462, 1462, 1462, 9, 70, 8138, 5, 300, 10, 1465, 4900), + (1467, -1, -1, 729, 729, 3, 70, -1, 0, 0, 10, 733, 1468), + (1468, -1, -1, 729, 729, 6, 70, -1, 0, 0, 10, 1467, 1469), + (1469, -1, -1, 729, 729, 9, 70, -1, 0, 0, 10, 1468, 4960), + (1471, -1, -1, 1471, 1471, 5, 70, -1, 0, 0, 10, -1, 1472), + (1472, -1, -1, 1471, 1471, 5, 70, -1, 0, 0, 10, 1471, 1473), + (1473, -1, -1, 1471, 1471, 5, 70, -1, 0, 0, 10, 1472, 1474), + (1474, -1, -1, 1471, 1471, 5, 70, -1, 0, 0, 10, 1473, 1475), + (1475, -1, -1, 1471, 1471, 5, 70, -1, 0, 0, 10, 1474, 6442), + (1477, 1477, 1477, 1477, 1477, 9, 70, 8149, 3, 4320, 10, -1, -1), + (1478, 1478, -1, 1478, 1478, 3, 66, 8406, 0, 1, 10, -1, 1479), + (1479, 1478, -1, 1478, 1478, 6, 68, 8407, 0, 1, 10, 1478, 1480), + (1480, 1478, -1, 1478, 1478, 9, 70, 8408, 0, 1, 10, 1479, 6161), + (1483, -1, -1, 1210, 1210, 7, 70, -1, 0, 0, 10, 1212, 1484), + (1484, -1, -1, 1210, 1210, 7, 70, -1, 0, 0, 10, 1483, 1485), + (1485, -1, -1, 1210, 1210, 7, 70, -1, 0, 0, 10, 1484, 4752), + (1486, -1, -1, 1486, 1486, 5, 66, -1, 0, 0, 10, -1, 1487), + (1487, -1, -1, 1486, 1486, 5, 67, -1, 0, 0, 10, 1486, 1488), + (1488, -1, -1, 1486, 1486, 5, 68, -1, 0, 0, 10, 1487, 1489), + (1489, -1, -1, 1486, 1486, 5, 69, -1, 0, 0, 10, 1488, 1490), + (1490, -1, -1, 1486, 1486, 5, 70, -1, 0, 0, 10, 1489, 5529), + (1491, 746, 746, 746, 746, 3, 70, 8156, 10, 2160, 10, 748, 1492), + (1492, 746, 746, 746, 746, 6, 70, 8157, 10, 2160, 10, 1491, 1493), + (1493, 746, 746, 746, 746, 9, 70, 8158, 10, 2160, 10, 1492, 5800), + (1494, 1494, 1494, 1494, 1494, 12, 70, 8170, 2, 7, 10, -1, -1), + (1495, 1495, 1495, 1495, 1495, 3, 70, 8190, 30, 900, 10, -1, 1496), + (1496, 1495, 1495, 1495, 1495, 6, 70, 8191, 30, 900, 10, 1495, 1497), + (1497, 1495, 1495, 1495, 1495, 9, 70, 8192, 30, 900, 10, 1496, 5311), + (1498, 1498, 1498, 1498, 1498, 3, 70, 8193, 12, 1320, 10, -1, 1499), + (1499, 1498, 1498, 1498, 1498, 6, 70, 8194, 12, 1320, 10, 1498, 1500), + (1500, 1498, 1498, 1498, 1498, 9, 70, 8195, 12, 1320, 10, 1499, 5058), + (1501, 1501, 1501, 1501, 1501, 3, 70, 8196, 10, 4320, 10, -1, 1502), + (1502, 1501, 1501, 1501, 1501, 6, 70, 8197, 10, 4320, 10, 1501, 1503), + (1503, 1501, 1501, 1501, 1501, 9, 70, 8198, 10, 4320, 10, 1502, 1558), + (1504, -1, -1, 1504, 1504, 5, 70, -1, 0, 0, 10, -1, 1505), + (1505, -1, -1, 1504, 1504, 5, 70, -1, 0, 0, 10, 1504, 1506), + (1506, -1, -1, 1504, 1504, 5, 70, -1, 0, 0, 10, 1505, 5880), + (1507, 520, 520, 520, 520, 3, 70, 8201, 6, 540, 10, 522, 1508), + (1508, 520, 520, 520, 520, 6, 70, 8202, 6, 540, 10, 1507, 1509), + (1509, 520, 520, 520, 520, 9, 70, 8203, 6, 540, 10, 1508, 5883), + (1510, 1510, -1, 1510, 1510, 12, 70, 8205, 13, 2160, 10, -1, 7202), + (1511, -1, -1, 1511, 1511, 5, 70, -1, 0, 0, 10, -1, 1512), + (1512, -1, -1, 1511, 1511, 5, 70, -1, 0, 0, 10, 1511, 1513), + (1513, -1, -1, 1511, 1511, 5, 70, -1, 0, 0, 10, 1512, 5950), + (1514, -1, -1, 1514, 1514, 7, 70, -1, 0, 0, 10, -1, 1515), + (1515, -1, -1, 1514, 1514, 7, 70, -1, 0, 0, 10, 1514, 1516), + (1516, -1, -1, 1514, 1514, 7, 70, -1, 0, 0, 10, 1515, 13404), + (1519, 153, 153, 153, 153, 9, 70, 8216, 3, 2160, 10, 153, 5068), + (1520, 1520, 1520, 1520, 1520, 3, 70, 8218, 11, 900, 10, -1, 1521), + (1521, 1520, 1520, 1520, 1520, 6, 70, 8219, 11, 900, 10, 1520, 1522), + (1522, 1520, 1520, 1520, 1520, 9, 70, 8220, 11, 900, 10, 1521, 6449), + (1523, 1523, 1523, 1523, 1523, 12, 70, 8221, 7, 7, 10, -1, -1), + (1524, -1, -1, 190, 190, 7, 70, -1, 0, 0, 10, 192, 1526), + (1525, -1, -1, 190, 190, 7, 70, -1, 0, 0, 10, 1526, 5038), + (1526, -1, -1, 190, 190, 7, 70, -1, 0, 0, 10, 1524, 1525), + (1527, 1527, 1527, 1527, 1527, 12, 70, 8223, 3, 7, 10, -1, -1), + (1528, -1, -1, 1528, 4819, 5, 66, -1, 0, 0, 10, -1, 1529), + (1529, -1, -1, 1528, 4819, 5, 67, -1, 0, 0, 10, 1528, 1530), + (1530, -1, -1, 1528, 4819, 5, 68, -1, 0, 0, 10, 1529, 1531), + (1531, -1, -1, 1528, 4819, 5, 69, -1, 0, 0, 10, 1530, 1532), + (1532, -1, -1, 1528, 4819, 5, 70, -1, 0, 0, 10, 1531, 4819), + (1533, -1, -1, 602, 602, 3, 70, -1, 0, 0, 10, 604, 1534), + (1534, -1, -1, 602, 602, 6, 70, -1, 0, 0, 10, 1533, 1535), + (1535, -1, -1, 602, 602, 9, 70, -1, 0, 0, 10, 1534, 4758), + (1536, -1, -1, 599, 599, 3, 70, -1, 0, 0, 10, 601, 1537), + (1537, -1, -1, 599, 599, 6, 70, -1, 0, 0, 10, 1536, 1538), + (1538, -1, -1, 599, 599, 9, 70, -1, 0, 0, 10, 1537, 5534), + (1539, -1, -1, 878, 878, 7, 70, -1, 0, 0, 10, 880, 1540), + (1540, -1, -1, 878, 878, 7, 70, -1, 0, 0, 10, 1539, 1541), + (1541, -1, -1, 878, 878, 7, 70, -1, 0, 0, 10, 1540, 4957), + (1542, 1542, -1, 1542, 1542, 3, 60, 8240, 0, 1, 10, -1, -1), + (1543, -1, -1, 1543, 1543, 5, 70, -1, 0, 0, 10, -1, 1544), + (1544, -1, -1, 1543, 1543, 5, 70, -1, 0, 0, 10, 1543, 1545), + (1545, -1, -1, 1543, 1543, 5, 70, -1, 0, 0, 10, 1544, 4951), + (1546, -1, -1, 1546, 1546, 5, 70, -1, 0, 0, 10, -1, 1547), + (1547, -1, -1, 1546, 1546, 5, 70, -1, 0, 0, 10, 1546, 1548), + (1548, -1, -1, 1546, 1546, 5, 70, -1, 0, 0, 10, 1547, 4829), + (1549, -1, -1, 1549, 1549, 3, 66, -1, 0, 0, 10, -1, 1550), + (1550, -1, -1, 1549, 1549, 6, 68, -1, 0, 0, 10, 1549, 1551), + (1551, -1, -1, 1549, 1549, 9, 70, -1, 0, 0, 10, 1550, -1), + (1552, -1, -1, 1552, 1552, 3, 66, -1, 0, 0, 10, -1, 1553), + (1553, -1, -1, 1552, 1552, 6, 68, -1, 0, 0, 10, 1552, 1554), + (1554, -1, -1, 1552, 1552, 9, 70, -1, 0, 0, 10, 1553, -1), + (1555, -1, -1, 1555, 1555, 5, 70, -1, 0, 0, 10, -1, 1556), + (1556, -1, -1, 1555, 1555, 5, 70, -1, 0, 0, 10, 1555, 1557), + (1557, -1, -1, 1555, 1555, 5, 70, -1, 0, 0, 10, 1556, 12727), + (1558, 1501, 1501, 1501, 1501, 6, 75, 16444, 10, 4320, 15, 1503, 1559), + (1559, 1501, 1501, 1501, 1501, 6, 80, 16445, 10, 4320, 15, 1558, 1560), + (1560, 1501, 1501, 1501, 1501, 6, 85, 16446, 10, 4320, 15, 1559, 13244), + (1563, -1, -1, 556, 556, 5, 66, -1, 0, 0, 10, 560, 1564), + (1564, -1, -1, 556, 556, 5, 67, -1, 0, 0, 10, 1563, 1565), + (1565, -1, -1, 556, 556, 5, 68, -1, 0, 0, 10, 1564, 1566), + (1566, -1, -1, 556, 556, 5, 69, -1, 0, 0, 10, 1565, 1567), + (1567, -1, -1, 556, 556, 5, 70, -1, 0, 0, 10, 1566, 17004), + (1569, 1569, 1569, 1569, 1569, 3, 70, 8256, 5, 1800, 10, -1, 1570), + (1570, 1569, 1569, 1569, 1569, 6, 70, 8257, 5, 1800, 10, 1569, 1571), + (1571, 1569, 1569, 1569, 1569, 9, 70, 8258, 5, 1800, 10, 1570, 5713), + (1572, -1, -1, 1572, 1572, 5, 66, -1, 0, 0, 10, -1, 1573), + (1573, -1, -1, 1572, 1572, 5, 67, -1, 0, 0, 10, 1572, 1574), + (1574, -1, -1, 1572, 1572, 5, 68, -1, 0, 0, 10, 1573, 1575), + (1575, -1, -1, 1572, 1572, 5, 69, -1, 0, 0, 10, 1574, 1576), + (1576, -1, -1, 1572, 1572, 5, 70, -1, 0, 0, 10, 1575, 10554), + (1577, -1, -1, 1577, 1577, 3, 66, -1, 0, 0, 10, -1, 1578), + (1578, -1, -1, 1577, 1577, 6, 68, -1, 0, 0, 10, 1577, 1579), + (1579, -1, -1, 1577, 1577, 9, 70, -1, 0, 0, 10, 1578, 5886), + (1583, -1, -1, 1583, 1583, 5, 70, -1, 0, 0, 10, -1, 1584), + (1584, -1, -1, 1583, 1583, 5, 70, -1, 0, 0, 10, 1583, 1585), + (1585, -1, -1, 1583, 1583, 5, 70, -1, 0, 0, 10, 1584, 1586), + (1586, -1, -1, 1583, 1583, 5, 70, -1, 0, 0, 10, 1585, 1587), + (1587, -1, -1, 1583, 1583, 5, 70, -1, 0, 0, 10, 1586, -1), + (1588, -1, -1, 1587, 1587, 3, 66, -1, 0, 0, 10, -1, 1589), + (1589, -1, -1, 1587, 1587, 6, 68, -1, 0, 0, 10, 1588, 1590), + (1590, -1, -1, 1587, 1587, 9, 70, -1, 0, 0, 10, 1589, -1), + (1591, -1, -1, 1586, 1586, 12, 70, -1, 0, 0, 10, -1, -1), + (1592, -1, -1, 1592, 1592, 5, 66, -1, 0, 0, 10, -1, 1593), + (1593, -1, -1, 1592, 1592, 5, 67, -1, 0, 0, 10, 1592, 1594), + (1594, -1, -1, 1592, 1592, 5, 68, -1, 0, 0, 10, 1593, 1595), + (1595, -1, -1, 1592, 1592, 5, 69, -1, 0, 0, 10, 1594, 1596), + (1596, -1, -1, 1592, 1592, 5, 70, -1, 0, 0, 10, 1595, 4725), + (1597, 1597, 1597, 1597, 1597, 9, 70, 8271, 6, 10, 10, -1, 6606), + (1598, 1598, -1, 1598, 1598, 3, 70, 8272, 6, 900, 10, -1, 1599), + (1599, 1598, -1, 1598, 1598, 6, 70, 8273, 6, 900, 10, 1598, 1600), + (1600, 1598, -1, 1598, 1598, 9, 70, 8274, 6, 900, 10, 1599, 4972), + (1601, -1, -1, 644, 644, 5, 61, -1, 0, 0, 10, 644, 1602), + (1602, -1, -1, 644, 644, 5, 63, -1, 0, 0, 10, 1601, 1603), + (1603, -1, -1, 644, 644, 5, 65, -1, 0, 0, 10, 1602, 4986), + (1604, -1, -1, 1604, 1604, 5, 60, -1, 0, 0, 10, -1, 1605), + (1605, -1, -1, 1604, 1604, 5, 61, -1, 0, 0, 10, 1604, 1606), + (1606, -1, -1, 1604, 1604, 5, 62, -1, 0, 0, 10, 1605, 5290), + (1607, 289, 289, 289, 289, 9, 70, 8278, 3, 300, 10, 289, 5742), + (1608, -1, -1, 1608, 1608, 3, 66, -1, 0, 0, 10, -1, 1609), + (1609, -1, -1, 1608, 1608, 6, 68, -1, 0, 0, 10, 1608, 1610), + (1610, -1, -1, 1608, 1608, 9, 70, -1, 0, 0, 10, 1609, 4989), + (1611, -1, -1, 1417, 1417, 3, 66, -1, 0, 0, 10, -1, 1612), + (1612, -1, -1, 1417, 1417, 3, 67, -1, 0, 0, 10, 1611, 1613), + (1613, -1, -1, 1417, 1417, 3, 68, -1, 0, 0, 10, 1612, 1614), + (1614, -1, -1, 1417, 1417, 3, 69, -1, 0, 0, 10, 1613, 1615), + (1615, -1, -1, 1417, 1417, 3, 70, -1, 0, 0, 10, 1614, -1), + (1616, -1, -1, 1616, 1616, 5, 66, -1, 0, 0, 10, -1, 1617), + (1617, -1, -1, 1616, 1616, 5, 67, -1, 0, 0, 10, 1616, 1618), + (1618, -1, -1, 1616, 1616, 5, 68, -1, 0, 0, 10, 1617, 1619), + (1619, -1, -1, 1616, 1616, 5, 69, -1, 0, 0, 10, 1618, 1620), + (1620, -1, -1, 1616, 1616, 5, 70, -1, 0, 0, 10, 1619, 4992), + (1621, -1, -1, 564, 564, 7, 70, -1, 0, 0, 10, 566, 1622), + (1622, -1, -1, 564, 564, 7, 70, -1, 0, 0, 10, 1621, 1623), + (1623, -1, -1, 564, 564, 7, 70, -1, 0, 0, 10, 1622, -1), + (1624, -1, -1, 561, 561, 7, 70, -1, 0, 0, 10, 563, 1625), + (1625, -1, -1, 561, 561, 7, 70, -1, 0, 0, 10, 1624, 1626), + (1626, -1, -1, 561, 561, 7, 70, -1, 0, 0, 10, 1625, -1), + (1627, -1, -1, 1627, 1627, 3, 66, -1, 0, 0, 10, -1, 1628), + (1628, -1, -1, 1627, 1627, 6, 68, -1, 0, 0, 10, 1627, 1629), + (1629, -1, -1, 1627, 1627, 9, 70, -1, 0, 0, 10, 1628, -1), + (1630, 1474, 1474, 1474, 1474, 3, 70, 8146, 14, 300, 10, -1, 1631), + (1631, 1474, 1474, 1474, 1474, 6, 70, 8147, 14, 300, 10, 1630, 1632), + (1632, 1474, 1474, 1474, 1474, 9, 70, 8148, 14, 300, 10, 1631, -1), + (1633, -1, -1, 551, 551, 5, 66, -1, 0, 0, 10, 555, 1634), + (1634, -1, -1, 551, 551, 5, 67, -1, 0, 0, 10, 1633, 1635), + (1635, -1, -1, 551, 551, 5, 68, -1, 0, 0, 10, 1634, 1636), + (1636, -1, -1, 551, 551, 5, 69, -1, 0, 0, 10, 1635, 1637), + (1637, -1, -1, 551, 551, 5, 70, -1, 0, 0, 10, 1636, 6905), + (1638, 1638, 1638, 1638, 1638, 5, 59, 8450, 7, 4320, 3, -1, -1), + (1639, 1639, 1639, 1639, 1639, 9, 65, 8451, 7, 4320, 4, -1, -1), + (1640, 1640, 1640, 1640, 1640, 12, 70, 8452, 7, 4320, 10, -1, -1), + (1641, -1, -1, 1641, 1641, 15, 70, -1, 0, 0, 3, -1, -1), + (1642, -1, -1, 1642, 1642, 15, 70, -1, 0, 0, 3, -1, -1), + (1643, 1643, 1643, 1643, 1643, 0, 59, 8975, 0, 1, 11, -1, -1), + (1644, 1644, 1644, 1644, 1644, 0, 59, 8900, 0, 1, 11, -1, -1), + (1645, 1645, 1645, 1645, 1645, 9, 70, 8977, 0, 1, 3, -1, -1), + (1646, 1646, 1646, 1646, 1646, 9, 70, 8978, 0, 1, 3, -1, -1), + (1647, 1647, 1647, 1647, 1647, 0, 68, 8771, 21, 900, 3, -1, -1), + (1648, -1, -1, 1435, 4773, 9, 71, -1, 0, 0, 16, 1221, 1649), + (1649, -1, -1, 1435, 4773, 9, 76, -1, 0, 0, 16, 1648, 1650), + (1650, -1, -1, 1435, 4773, 9, 81, -1, 0, 0, 16, 1649, 13091), + (1651, -1, -1, 8210, 8210, 5, 85, -1, 0, 0, 16, 8214, 1652), + (1652, -1, -1, 8210, 8210, 5, 85, -1, 0, 0, 16, 1651, 1653), + (1653, -1, -1, 8210, 8210, 5, 85, -1, 0, 0, 16, 1652, 1654), + (1654, -1, -1, 8210, 8210, 5, 85, -1, 0, 0, 16, 1653, 1655), + (1655, -1, -1, 8210, 8210, 5, 85, -1, 0, 0, 16, 1654, 13149), + (1656, -1, -1, 8204, 8204, 4, 85, -1, 0, 0, 16, 8206, 1657), + (1657, -1, -1, 8204, 8204, 4, 85, -1, 0, 0, 16, 1656, -1), + (1659, -1, -1, 8207, 8207, 4, 85, -1, 0, 0, 16, 8209, 1660), + (1660, -1, -1, 8207, 8207, 4, 85, -1, 0, 0, 16, 1659, -1), + (1662, -1, -1, 1662, 1662, 3, 65, -1, 0, 0, 17, -1, 1663), + (1663, -1, -1, 1662, 1662, 3, 66, -1, 0, 0, 17, 1662, 1664), + (1664, -1, -1, 1662, 1662, 3, 67, -1, 0, 0, 17, 1663, 1665), + (1665, -1, -1, 1662, 1662, 3, 68, -1, 0, 0, 17, 1664, 1666), + (1666, -1, -1, 1662, 1662, 3, 69, -1, 0, 0, 17, 1665, -1), + (1667, 1667, 1667, 1667, 1667, 9, 85, 23602, 0, 1, 16, -1, -1), + (2400, -1, -1, 2400, 2400, 9, 81, 0, 0, 0, 17, -1, 2401), + (2401, -1, -1, 2400, 2400, 12, 83, 0, 0, 0, 17, 2400, 2402), + (2402, -1, -1, 2400, 2400, 15, 85, 0, 0, 0, 17, 2401, 15344), + (3676, 3676, 3676, 3676, 3676, 9, 85, 23606, 67, 30, 16, -1, -1), + (4665, 4665, 4665, 4665, 4665, 0, 1, 9177, 19, 4320, 0, -1, -1), + (4666, -1, -1, 4844, 4844, 5, 81, -1, 0, 0, 16, -1, 4667), + (4667, -1, -1, 4844, 4844, 5, 82, -1, 0, 0, 16, 4666, 4668), + (4668, -1, -1, 4844, 4844, 5, 83, -1, 0, 0, 16, 4667, 4669), + (4669, -1, -1, 4844, 4844, 5, 84, -1, 0, 0, 16, 4668, 4670), + (4670, -1, -1, 4844, 4844, 5, 85, -1, 0, 0, 16, 4669, -1), + (4672, -1, -1, 4672, 4672, 3, 59, -1, 0, 0, 8, -1, 4673), + (4673, -1, -1, 4672, 4672, 6, 59, -1, 0, 0, 8, 4672, 4674), + (4674, -1, -1, 4672, 4672, 9, 59, -1, 0, 0, 8, 4673, -1), + (4675, -1, -1, 4675, 4675, 3, 59, -1, 0, 0, 3, -1, 4676), + (4676, -1, -1, 4675, 4675, 6, 59, -1, 0, 0, 3, 4675, 4677), + (4677, -1, -1, 4675, 4675, 9, 59, -1, 0, 0, 3, 4676, -1), + (4678, -1, -1, 418, 418, 5, 71, -1, 0, 0, 12, 1005, 4679), + (4679, -1, -1, 418, 418, 5, 72, -1, 0, 0, 12, 4678, 4680), + (4680, -1, -1, 418, 418, 5, 73, -1, 0, 0, 12, 4679, 4681), + (4681, -1, -1, 418, 418, 5, 74, -1, 0, 0, 12, 4680, 4682), + (4682, -1, -1, 418, 418, 5, 75, -1, 0, 0, 12, 4681, 7547), + (4683, -1, -1, 1026, 1026, 5, 71, -1, 0, 0, 12, 1393, 4684), + (4684, -1, -1, 1026, 1026, 5, 72, -1, 0, 0, 12, 4683, 4685), + (4685, -1, -1, 1026, 1026, 5, 73, -1, 0, 0, 12, 4684, 4686), + (4686, -1, -1, 1026, 1026, 5, 74, -1, 0, 0, 12, 4685, 4687), + (4687, -1, -1, 1026, 1026, 5, 75, -1, 0, 0, 12, 4686, 6523), + (4688, -1, -1, 4688, 4688, 3, 71, -1, 0, 0, 12, -1, 4689), + (4689, -1, -1, 4688, 4688, 3, 72, -1, 0, 0, 12, 4688, 4690), + (4690, -1, -1, 4688, 4688, 3, 73, -1, 0, 0, 12, 4689, 4691), + (4691, -1, -1, 4688, 4688, 3, 74, -1, 0, 0, 12, 4690, 4692), + (4692, -1, -1, 4688, 4688, 3, 75, -1, 0, 0, 12, 4691, -1), + (4693, -1, -1, 65, 661, 3, 71, -1, 0, 0, 12, 1035, 4694), + (4694, -1, -1, 65, 661, 3, 72, -1, 0, 0, 12, 4693, 4695), + (4695, -1, -1, 65, 661, 3, 73, -1, 0, 0, 12, 4694, 4696), + (4696, -1, -1, 65, 661, 3, 74, -1, 0, 0, 12, 4695, 4697), + (4697, -1, -1, 65, 661, 3, 75, -1, 0, 0, 12, 4696, 6390), + (4698, -1, -1, 4698, 4698, 5, 51, -1, 0, 0, 12, -1, 6545), + (4699, -1, -1, 4699, 4699, 5, 51, -1, 0, 0, 12, -1, 6540), + (4700, 1037, 1037, 1037, 1037, 0, 1, 7619, 33, 72000, 0, -1, -1), + (4702, 4702, 4702, 4702, 4702, 3, 71, 9475, 31, 600, 12, -1, -1), + (4704, 4704, 4704, 4704, 4704, 4, 71, 9477, 31, 600, 12, -1, -1), + (4705, 4705, 4705, 4705, 4705, 3, 71, 9478, 31, 600, 12, -1, -1), + (4706, 4706, 4706, 4706, 4706, 3, 71, 9479, 31, 600, 12, -1, -1), + (4707, -1, -1, 1041, 1041, 6, 71, -1, 0, 0, 12, 1043, 4708), + (4708, -1, -1, 1041, 1041, 6, 73, -1, 0, 0, 12, 4707, 4709), + (4709, -1, -1, 1041, 1041, 6, 75, -1, 0, 0, 12, 4708, 5542), + (4710, -1, -1, 1044, 1044, 6, 71, -1, 0, 0, 12, 1046, 4711), + (4711, -1, -1, 1044, 1044, 6, 73, -1, 0, 0, 12, 4710, 4712), + (4712, -1, -1, 1044, 1044, 6, 75, -1, 0, 0, 12, 4711, 5545), + (4713, -1, -1, 1047, 1047, 6, 71, -1, 0, 0, 12, 1049, 4714), + (4714, -1, -1, 1047, 1047, 6, 73, -1, 0, 0, 12, 4713, 4715), + (4715, -1, -1, 1047, 1047, 6, 75, -1, 0, 0, 12, 4714, 5548), + (4716, -1, -1, 1050, 1050, 6, 71, -1, 0, 0, 12, 1052, 4717), + (4717, -1, -1, 1050, 1050, 6, 73, -1, 0, 0, 12, 4716, 4718), + (4718, -1, -1, 1050, 1050, 6, 75, -1, 0, 0, 12, 4717, 5551), + (4722, -1, -1, 119, 119, 3, 71, -1, 0, 0, 12, 1055, 4723), + (4723, -1, -1, 119, 119, 3, 73, -1, 0, 0, 12, 4722, 4724), + (4724, -1, -1, 119, 119, 3, 75, -1, 0, 0, 12, 4723, 5554), + (4725, -1, -1, 1592, 1592, 5, 71, -1, 0, 0, 12, 1596, 4726), + (4726, -1, -1, 1592, 1592, 5, 72, -1, 0, 0, 12, 4725, 4727), + (4727, -1, -1, 1592, 1592, 5, 73, -1, 0, 0, 12, 4726, 4728), + (4728, -1, -1, 1592, 1592, 5, 74, -1, 0, 0, 12, 4727, 4729), + (4729, -1, -1, 1592, 1592, 5, 75, -1, 0, 0, 12, 4728, 5557), + (4733, -1, -1, 625, 625, 3, 71, -1, 0, 0, 12, 627, 4734), + (4734, -1, -1, 625, 625, 3, 73, -1, 0, 0, 12, 4733, 4735), + (4735, -1, -1, 625, 625, 3, 75, -1, 0, 0, 12, 4734, 7641), + (4739, -1, -1, 4739, 4739, 3, 71, -1, 0, 0, 12, -1, 4740), + (4740, -1, -1, 4739, 4739, 6, 73, -1, 0, 0, 12, 4739, 4741), + (4741, -1, -1, 4739, 4739, 9, 75, -1, 0, 0, 12, 4740, 5562), + (4742, 4742, 4742, 4742, 4742, 9, 71, 11024, 12, 600, 12, -1, 5565), + (4744, -1, -1, 1072, 1072, 5, 71, -1, 0, 0, 12, 1076, 4745), + (4745, -1, -1, 1072, 1072, 5, 72, -1, 0, 0, 12, 4744, 4746), + (4746, -1, -1, 1072, 1072, 5, 73, -1, 0, 0, 12, 4745, 4747), + (4747, -1, -1, 1072, 1072, 5, 74, -1, 0, 0, 12, 4746, 4748), + (4748, -1, -1, 1072, 1072, 5, 75, -1, 0, 0, 12, 4747, 5566), + (4749, -1, -1, 637, 637, 6, 71, -1, 0, 0, 12, 772, 4750), + (4750, -1, -1, 637, 637, 6, 73, -1, 0, 0, 12, 4749, 4751), + (4751, -1, -1, 637, 637, 6, 75, -1, 0, 0, 12, 4750, 5571), + (4752, -1, -1, 1210, 1210, 7, 71, -1, 0, 0, 12, 1485, 4753), + (4753, -1, -1, 1210, 1210, 7, 73, -1, 0, 0, 12, 4752, 4754), + (4754, -1, -1, 1210, 1210, 7, 75, -1, 0, 0, 12, 4753, 5574), + (4755, -1, -1, 1210, 1213, 6, 71, -1, 0, 0, 12, 1215, 4756), + (4756, -1, -1, 1210, 1213, 6, 73, -1, 0, 0, 12, 4755, 4757), + (4757, -1, -1, 1210, 1213, 6, 75, -1, 0, 0, 12, 4756, 5577), + (4758, -1, -1, 602, 602, 6, 71, -1, 0, 0, 12, 1535, 4759), + (4759, -1, -1, 602, 602, 6, 73, -1, 0, 0, 12, 4758, 4760), + (4760, -1, -1, 602, 602, 6, 75, -1, 0, 0, 12, 4759, 5580), + (4761, -1, -1, 4761, 4761, 7, 71, -1, 0, 0, 12, -1, 4762), + (4762, -1, -1, 4761, 4761, 7, 73, -1, 0, 0, 12, 4761, 4763), + (4763, -1, -1, 4761, 4761, 7, 75, -1, 0, 0, 12, 4762, 6500), + (4764, -1, -1, 1071, 1071, 6, 75, -1, 0, 0, 14, 1071, 7553), + (4767, -1, -1, 98, 98, 4, 71, -1, 0, 0, 12, 100, 4768), + (4768, -1, -1, 98, 98, 4, 73, -1, 0, 0, 12, 4767, 4769), + (4769, -1, -1, 98, 98, 4, 75, -1, 0, 0, 12, 4768, 5586), + (4773, -1, -1, 1435, 4773, 9, 71, -1, 0, 0, 12, 1437, 6517), + (4776, -1, -1, 1186, 1186, 6, 71, -1, 0, 0, 12, 1188, 4777), + (4777, -1, -1, 1186, 1186, 6, 73, -1, 0, 0, 12, 4776, 4778), + (4778, -1, -1, 1186, 1186, 6, 75, -1, 0, 0, 12, 4777, 5589), + (4779, -1, -1, 80, 80, 6, 71, -1, 0, 0, 12, 1088, 4780), + (4780, -1, -1, 80, 80, 6, 73, -1, 0, 0, 12, 4779, 4781), + (4781, -1, -1, 80, 80, 6, 75, -1, 0, 0, 12, 4780, 5592), + (4790, -1, -1, 1134, 1134, 5, 71, -1, 0, 0, 12, 1162, 4791), + (4791, -1, -1, 1134, 1134, 5, 72, -1, 0, 0, 12, 4790, 4792), + (4792, -1, -1, 1134, 1134, 5, 73, -1, 0, 0, 12, 4791, 4793), + (4793, -1, -1, 1134, 1134, 5, 74, -1, 0, 0, 12, 4792, 4794), + (4794, -1, -1, 1134, 1134, 5, 75, -1, 0, 0, 12, 4793, 4804), + (4795, -1, -1, 255, 255, 5, 71, -1, 0, 0, 12, 1165, 4796), + (4796, -1, -1, 255, 255, 5, 73, -1, 0, 0, 12, 4795, 4797), + (4797, -1, -1, 255, 255, 5, 75, -1, 0, 0, 12, 4796, 5595), + (4798, -1, -1, 631, 631, 5, 71, -1, 0, 0, 12, 1174, 4799), + (4799, -1, -1, 631, 631, 5, 73, -1, 0, 0, 12, 4798, 4800), + (4800, -1, -1, 631, 631, 5, 75, -1, 0, 0, 12, 4799, -1), + (4801, -1, -1, 4801, 4801, 6, 74, -1, 0, 0, 14, -1, 4802), + (4802, -1, -1, 4801, 4801, 6, 76, -1, 0, 0, 14, 4801, 4803), + (4803, -1, -1, 4801, 4801, 6, 78, -1, 0, 0, 14, 4802, 7160), + (4804, -1, -1, 1134, 1134, 5, 76, -1, 0, 0, 15, 4794, 4805), + (4805, -1, -1, 1134, 1134, 5, 77, -1, 0, 0, 15, 4804, 4806), + (4806, -1, -1, 1134, 1134, 5, 78, -1, 0, 0, 15, 4805, 4807), + (4807, -1, -1, 1134, 1134, 5, 79, -1, 0, 0, 15, 4806, 4808), + (4808, -1, -1, 1134, 1134, 5, 80, -1, 0, 0, 15, 4807, 10311), + (4809, -1, -1, 4809, 4809, 5, 81, -1, 0, 0, 15, -1, 4810), + (4810, -1, -1, 4809, 4809, 5, 83, -1, 0, 0, 15, 4809, 4811), + (4811, -1, -1, 4809, 4809, 5, 85, -1, 0, 0, 15, 4810, 10316), + (4813, -1, -1, 820, 820, 5, 71, -1, 0, 0, 12, 1267, 4814), + (4814, -1, -1, 820, 820, 5, 73, -1, 0, 0, 12, 4813, 4815), + (4815, -1, -1, 820, 820, 5, 75, -1, 0, 0, 12, 4814, 5917), + (4819, -1, -1, 1528, 4819, 5, 71, -1, 0, 0, 12, 1532, 4820), + (4820, -1, -1, 1528, 4819, 5, 72, -1, 0, 0, 12, 4819, 4821), + (4821, -1, -1, 1528, 4819, 5, 73, -1, 0, 0, 12, 4820, 4822), + (4822, -1, -1, 1528, 4819, 5, 74, -1, 0, 0, 12, 4821, 4823), + (4823, -1, -1, 1528, 4819, 5, 75, -1, 0, 0, 12, 4822, 15188), + (4824, -1, -1, 810, 810, 5, 71, -1, 0, 0, 12, 814, 4825), + (4825, -1, -1, 810, 810, 5, 72, -1, 0, 0, 12, 4824, 4826), + (4826, -1, -1, 810, 810, 5, 73, -1, 0, 0, 12, 4825, 4827), + (4827, -1, -1, 810, 810, 5, 74, -1, 0, 0, 12, 4826, 4828), + (4828, -1, -1, 810, 810, 5, 75, -1, 0, 0, 12, 4827, 15426), + (4829, -1, -1, 1546, 1546, 5, 71, -1, 0, 0, 12, 1548, 4830), + (4830, -1, -1, 1546, 1546, 5, 72, -1, 0, 0, 12, 4829, 4831), + (4831, -1, -1, 1546, 1546, 5, 73, -1, 0, 0, 12, 4830, 6441), + (4836, 4836, 4836, 4836, 4836, 5, 71, 11033, 5, 30, 12, -1, -1), + (4844, -1, -1, 4844, 4844, 5, 71, -1, 0, 0, 12, -1, 4845), + (4845, -1, -1, 4844, 4844, 5, 72, -1, 0, 0, 12, 4844, 4846), + (4846, -1, -1, 4844, 4844, 5, 73, -1, 0, 0, 12, 4845, 4847), + (4847, -1, -1, 4844, 4844, 5, 74, -1, 0, 0, 12, 4846, 4848), + (4848, -1, -1, 4844, 4844, 5, 75, -1, 0, 0, 12, 4847, 7122), + (4849, 4849, 4849, 4849, 4849, 9, 71, 11041, 7, 1800, 12, -1, 6134), + (4854, 4854, 4854, 4854, 4854, 3, 71, 11046, 8, 600, 12, -1, 4855), + (4855, 4854, 4854, 4854, 4854, 6, 73, 11047, 8, 600, 12, 4854, 4856), + (4856, 4854, 4854, 4854, 4854, 9, 75, 11048, 8, 600, 12, 4855, 5764), + (4857, 4857, 4857, 4857, 4857, 3, 71, 11049, 7, 600, 12, -1, 4858), + (4858, 4857, 4857, 4857, 4857, 6, 73, 11050, 7, 600, 12, 4857, 4859), + (4859, 4857, 4857, 4857, 4857, 9, 75, 11051, 7, 600, 12, 4858, 5767), + (4860, 4860, 4860, 4860, 4860, 9, 75, 11052, 13, 60, 12, -1, 5606), + (4861, -1, -1, 4861, 4861, 6, 71, -1, 0, 0, 12, -1, 4862), + (4862, -1, -1, 4861, 4861, 6, 73, -1, 0, 0, 12, 4861, 4863), + (4863, -1, -1, 4861, 4861, 6, 75, -1, 0, 0, 12, 4862, 5954), + (4864, 1274, 1274, 1274, 1274, 6, 73, 11053, 9, 540, 12, 1276, 4865), + (4865, 1274, 1274, 1274, 1274, 6, 74, 11054, 9, 540, 12, 4864, 4866), + (4866, 1274, 1274, 1274, 1274, 6, 75, 11055, 9, 540, 12, 4865, 5947), + (4887, -1, -1, 4887, 4887, 6, 71, -1, 0, 0, 12, -1, 4888), + (4888, -1, -1, 4887, 4887, 6, 73, -1, 0, 0, 12, 4887, 4889), + (4889, -1, -1, 4887, 4887, 6, 75, -1, 0, 0, 12, 4888, -1), + (4890, 4890, -1, 4890, 4890, 9, 75, 11056, 3, 8640, 12, -1, 5869), + (4894, 4894, 4894, 4894, 4894, 6, 73, 11057, 7, 2160, 12, -1, 4895), + (4895, 4894, 4894, 4894, 4894, 6, 74, 11058, 7, 2160, 12, 4894, 4896), + (4896, 4894, 4894, 4894, 4894, 6, 75, 11059, 7, 2160, 12, 4895, 6352), + (4897, -1, -1, 795, 795, 6, 71, -1, 0, 0, 12, 1432, 4898), + (4898, -1, -1, 795, 795, 6, 73, -1, 0, 0, 12, 4897, 4899), + (4899, -1, -1, 795, 795, 6, 75, -1, 0, 0, 12, 4898, 5889), + (4900, 1462, 1462, 1462, 1462, 6, 71, 11061, 5, 300, 12, 1466, 4901), + (4901, 1462, 1462, 1462, 1462, 6, 73, 11062, 5, 300, 12, 4900, 4902), + (4902, 1462, 1462, 1462, 1462, 6, 75, 11063, 5, 300, 12, 4901, 14739), + (4903, 4903, 4903, 4903, 4903, 9, 71, 11064, 9, 1320, 12, -1, 5892), + (4906, 4906, 4906, 4906, 4906, 9, 71, 11065, 9, 1320, 12, -1, 5893), + (4909, 4909, 4909, 4909, 4909, 9, 71, 11066, 16, 1320, 12, -1, 5894), + (4912, 4912, 4912, 4912, 4912, 9, 71, 11067, 16, 1320, 12, -1, 5895), + (4915, 4915, 4915, 4915, 4915, 9, 71, 11068, 7, 4320, 12, -1, 4916), + (4916, 4915, 4915, 4915, 4915, 9, 73, 11069, 7, 4320, 12, 4915, 4917), + (4917, 4915, 4915, 4915, 4915, 9, 75, 11070, 7, 4320, 12, 4916, 5607), + (4921, -1, -1, 480, 480, 2, 71, -1, 0, 0, 12, 482, 4922), + (4922, -1, -1, 480, 480, 2, 73, -1, 0, 0, 12, 4921, 4923), + (4923, -1, -1, 480, 480, 2, 75, -1, 0, 0, 12, 4922, -1), + (4924, -1, -1, 4924, 4924, 5, 75, -1, 0, 0, 12, -1, 4925), + (4925, -1, -1, 4924, 4924, 5, 75, -1, 0, 0, 12, 4924, 4926), + (4926, -1, -1, 4924, 4924, 5, 75, -1, 0, 0, 12, 4925, 5944), + (4927, 4927, 4927, 4927, 4927, 9, 71, 11076, 14, 600, 12, -1, 7209), + (4931, 4931, 4931, 4931, 4931, 6, 71, 11083, 4, 600, 12, -1, 4932), + (4932, 4931, 4931, 4931, 4931, 6, 73, 11084, 4, 600, 12, 4931, 4933), + (4933, 4931, 4931, 4931, 4931, 6, 75, 11085, 4, 600, 12, 4932, 6054), + (4934, 4934, 4934, 4934, 4934, 7, 71, 11086, 13, 300, 12, -1, 7295), + (4935, 4935, 4935, 4935, 4935, 7, 71, 11087, 14, 300, 12, -1, 7294), + (4938, 4938, 4938, 4938, 4938, 9, 75, 11092, 35, 1800, 12, -1, 5610), + (4943, 4943, 4943, 4943, 4943, 7, 75, 11098, 17, 1800, 12, -1, -1), + (4944, 4944, -1, 4944, 4944, 3, 71, 11103, 0, 1, 12, -1, 4945), + (4945, 4944, -1, 4944, 4944, 6, 73, 11104, 0, 1, 12, 4944, 4946), + (4946, 4944, -1, 4944, 4944, 9, 75, 11105, 0, 1, 12, 4945, 6155), + (4948, -1, -1, 846, 846, 3, 71, -1, 0, 0, 12, 1303, 4949), + (4949, -1, -1, 846, 846, 6, 73, -1, 0, 0, 12, 4948, 4950), + (4950, -1, -1, 846, 846, 9, 75, -1, 0, 0, 12, 4949, 6035), + (4951, -1, -1, 1543, 1543, 5, 71, -1, 0, 0, 12, 1545, 4952), + (4952, -1, -1, 1543, 1543, 5, 73, -1, 0, 0, 12, 4951, 4953), + (4953, -1, -1, 1543, 1543, 5, 75, -1, 0, 0, 12, 4952, 6042), + (4957, -1, -1, 878, 878, 7, 71, -1, 0, 0, 12, 1541, 4958), + (4958, -1, -1, 878, 878, 7, 73, -1, 0, 0, 12, 4957, 4959), + (4959, -1, -1, 878, 878, 7, 75, -1, 0, 0, 12, 4958, 6331), + (4960, -1, -1, 729, 729, 6, 71, -1, 0, 0, 12, 1469, 4961), + (4961, -1, -1, 729, 729, 6, 73, -1, 0, 0, 12, 4960, 4962), + (4962, -1, -1, 729, 729, 6, 75, -1, 0, 0, 12, 4961, 5738), + (4963, 723, 723, 723, 723, 9, 71, 11205, 6, 30, 12, 723, 5737), + (4964, 1119, 1119, 1119, 1119, 6, 73, 11206, 8, 900, 12, 1121, 4965), + (4965, 1119, 1119, 1119, 1119, 6, 74, 11207, 8, 900, 12, 4964, 4966), + (4966, 1119, 1119, 1119, 1119, 6, 75, 11208, 8, 900, 12, 4965, 5734), + (4969, 291, 291, 291, 291, 5, 71, 11212, 5, 900, 12, 1125, 4970), + (4970, 291, 291, 291, 291, 5, 73, 11213, 5, 900, 12, 4969, 4971), + (4971, 291, 291, 291, 291, 5, 75, 11214, 5, 900, 12, 4970, 5743), + (4972, 1598, -1, 1598, 1598, 6, 71, 11215, 6, 900, 12, 1600, 4973), + (4973, 1598, -1, 1598, 1598, 6, 73, 11216, 6, 900, 12, 4972, 4974), + (4974, 1598, -1, 1598, 1598, 6, 75, 11217, 6, 900, 12, 4973, 5710), + (4975, 592, 592, 592, 592, 3, 71, 11218, 2, 18, 12, 1106, 4976), + (4976, 592, 592, 592, 592, 3, 72, 11219, 2, 18, 12, 4975, 4977), + (4977, 592, 592, 592, 592, 3, 73, 11220, 2, 18, 12, 4976, 4978), + (4978, 592, 592, 592, 592, 3, 74, 11221, 2, 18, 12, 4977, 4979), + (4979, 592, 592, 592, 592, 3, 75, 11222, 2, 18, 12, 4978, 5702), + (4980, 1116, 1116, 1116, 1116, 6, 73, 11223, 4, 2160, 12, 1118, 4981), + (4981, 1116, 1116, 1116, 1116, 6, 74, 11224, 4, 2160, 12, 4980, 4982), + (4982, 1116, 1116, 1116, 1116, 6, 75, 11225, 4, 2160, 12, 4981, 5699), + (4983, -1, -1, 864, 864, 6, 71, -1, 0, 0, 12, 1292, 4984), + (4984, -1, -1, 864, 864, 6, 73, -1, 0, 0, 12, 4983, 4985), + (4985, -1, -1, 864, 864, 6, 75, -1, 0, 0, 12, 4984, 6011), + (4986, -1, -1, 644, 644, 5, 67, -1, 0, 0, 12, 1603, 4987), + (4987, -1, -1, 644, 644, 5, 69, -1, 0, 0, 12, 4986, 4988), + (4988, -1, -1, 644, 644, 5, 71, -1, 0, 0, 12, 4987, 6017), + (4989, -1, -1, 1608, 1608, 6, 71, -1, 0, 0, 12, 1610, 4990), + (4990, -1, -1, 1608, 1608, 6, 73, -1, 0, 0, 12, 4989, 4991), + (4991, -1, -1, 1608, 1608, 6, 75, -1, 0, 0, 12, 4990, 7378), + (4992, -1, -1, 1616, 1616, 5, 71, -1, 0, 0, 12, 1620, 4993), + (4993, -1, -1, 1616, 1616, 5, 72, -1, 0, 0, 12, 4992, 4994), + (4994, -1, -1, 1616, 1616, 5, 73, -1, 0, 0, 12, 4993, 4995), + (4995, -1, -1, 1616, 1616, 5, 74, -1, 0, 0, 12, 4994, 4996), + (4996, -1, -1, 1616, 1616, 5, 75, -1, 0, 0, 12, 4995, 6003), + (4997, 545, 545, 545, 545, 6, 73, 11226, 3, 900, 12, 1295, 4998), + (4998, 545, 545, 545, 545, 6, 74, 11227, 3, 900, 12, 4997, 4999), + (4999, 545, 545, 545, 545, 6, 75, 11228, 3, 900, 12, 4998, 6000), + (5000, -1, -1, 1230, 1230, 2, 71, -1, 0, 0, 12, 1232, 5001), + (5001, -1, -1, 1230, 1230, 2, 73, -1, 0, 0, 12, 5000, 5002), + (5002, -1, -1, 1230, 1230, 2, 75, -1, 0, 0, 12, 5001, -1), + (5003, 1345, 1345, 1345, 1345, 5, 73, 11229, 6, 900, 12, 1347, 5004), + (5004, 1345, 1345, 1345, 1345, 5, 74, 11230, 6, 900, 12, 5003, 5005), + (5005, 1345, 1345, 1345, 1345, 5, 75, 11231, 6, 900, 12, 5004, 6008), + (5006, 5006, 5006, 5006, 5006, 0, 0, 27673, 96, 72000, 0, -1, -1), + (5007, 5007, 5007, 5007, 5007, 3, 71, 11233, 8, 2160, 12, -1, 5008), + (5008, 5007, 5007, 5007, 5007, 6, 73, 11234, 8, 2160, 12, 5007, 5009), + (5009, 5007, 5007, 5007, 5007, 9, 75, 11235, 8, 2160, 12, 5008, 6425), + (5010, -1, -1, 1007, 1007, 8, 81, -1, 0, 0, 16, -1, 5011), + (5011, -1, -1, 1007, 1007, 10, 83, -1, 0, 0, 16, 5010, 5012), + (5012, -1, -1, 1007, 1007, 12, 85, -1, 0, 0, 16, 5011, 15317), + (5013, -1, -1, 1284, 1284, 6, 83, -1, 0, 0, 16, 5037, 5014), + (5014, -1, -1, 1284, 1284, 6, 85, -1, 0, 0, 16, 5013, -1), + (5015, 5015, 5015, 5015, 5015, 5, 75, 11241, 9, 900, 12, -1, 5741), + (5017, 5017, 5017, 5017, 5017, 3, 71, 11243, 8, 600, 12, -1, 5018), + (5018, 5017, 5017, 5017, 5017, 6, 73, 11244, 8, 600, 12, 5017, 5019), + (5019, 5017, 5017, 5017, 5017, 9, 75, 11245, 8, 600, 12, 5018, 7454), + (5020, 5020, 5020, 5020, 5020, 9, 75, 11246, 9, 300, 12, -1, 5716), + (5021, 5021, 5021, 5021, 5021, 9, 71, 11341, 7, 60, 12, -1, 10868), + (5022, 5022, 5022, 5022, 5022, 3, 71, 11247, 5, 600, 12, -1, 5023), + (5023, 5022, 5022, 5022, 5022, 6, 73, 23986, 5, 600, 12, 5022, 5024), + (5024, 5022, 5022, 5022, 5022, 9, 75, 23987, 5, 600, 12, 5023, 6038), + (5025, 5025, 5025, 5025, 5025, 3, 71, 11251, 6, 180, 12, -1, 5026), + (5026, 5025, 5025, 5025, 5025, 6, 73, 11252, 6, 180, 12, 5025, 5027), + (5027, 5025, 5025, 5025, 5025, 9, 75, 11253, 6, 180, 12, 5026, -1), + (5028, 5028, -1, 5028, 5028, 9, 75, 11254, 4, 900, 12, -1, 6041), + (5029, -1, -1, 1313, 1313, 6, 71, -1, 0, 0, 8, 1315, 5030), + (5030, -1, -1, 1313, 1313, 6, 73, -1, 0, 0, 8, 5029, 5031), + (5031, -1, -1, 1313, 1313, 6, 75, -1, 0, 0, 8, 5030, 6066), + (5032, -1, -1, 634, 634, 5, 72, -1, 0, 0, 12, 1321, 5033), + (5033, -1, -1, 634, 634, 5, 73, -1, 0, 0, 12, 5032, 5034), + (5034, -1, -1, 634, 634, 5, 74, -1, 0, 0, 12, 5033, 5611), + (5035, -1, -1, 1284, 1284, 6, 71, -1, 0, 0, 12, 1286, 5036), + (5036, -1, -1, 1284, 1284, 6, 73, -1, 0, 0, 12, 5035, 5037), + (5037, -1, -1, 1284, 1284, 6, 75, -1, 0, 0, 12, 5036, 5013), + (5038, -1, -1, 190, 190, 7, 71, -1, 0, 0, 12, 1525, 5039), + (5039, -1, -1, 190, 190, 7, 73, -1, 0, 0, 12, 5038, 5040), + (5040, -1, -1, 190, 190, 7, 75, -1, 0, 0, 12, 5039, 15141), + (5041, 534, 534, 534, 534, 5, 72, 11255, 4, 2160, 12, 1280, 5042), + (5042, 534, 534, 534, 534, 5, 73, 11256, 4, 2160, 12, 5041, 5043), + (5043, 534, 534, 534, 534, 5, 74, 11257, 4, 2160, 12, 5042, 5969), + (5044, 188, 188, 188, 188, 9, 73, 11258, 2, 30, 12, 1277, 7339), + (5045, -1, -1, 1057, 1057, 9, 85, -1, 0, 0, 16, -1, -1), + (5051, 757, -1, 757, 757, 5, 71, 11262, 6, 1800, 12, 1224, 5052), + (5052, 757, -1, 757, 757, 5, 73, 11263, 6, 1800, 12, 5051, 5053), + (5053, 757, -1, 757, 757, 5, 75, 11264, 6, 1800, 12, 5052, 5822), + (5054, 548, 548, 548, 548, 5, 72, 11265, 5, 900, 12, 1227, 5055), + (5055, 548, 548, 548, 548, 5, 73, 11266, 5, 900, 12, 5054, 5056), + (5056, 548, 548, 548, 548, 5, 74, 11267, 5, 900, 12, 5055, 5829), + (5058, 1498, 1498, 1498, 1498, 6, 71, 11269, 12, 1320, 12, 1500, 5059), + (5059, 1498, 1498, 1498, 1498, 6, 73, 11270, 12, 1320, 12, 5058, 5060), + (5060, 1498, 1498, 1498, 1498, 6, 75, 11271, 12, 1320, 12, 5059, 5819), + (5061, -1, -1, 567, 567, 5, 72, -1, 0, 0, 12, 567, 5825), + (5062, 459, 459, 459, 459, 6, 71, 11272, 8, 180, 12, 1191, 5063), + (5063, 459, 459, 459, 459, 6, 73, 11273, 8, 180, 12, 5062, 5064), + (5064, 459, 459, 459, 459, 6, 75, 11274, 8, 180, 12, 5063, -1), + (5068, 153, 153, 153, 153, 9, 75, 11279, 3, 2160, 12, 1519, 6101), + (5069, 146, 146, 146, 146, 5, 72, 11281, 2, 180, 12, 146, 6102), + (5070, 131, 131, 131, 131, 5, 72, 11282, 4, 900, 12, 1205, 5071), + (5071, 131, 131, 131, 131, 5, 73, 11283, 4, 900, 12, 5070, 5072), + (5072, 131, 131, 131, 131, 5, 74, 11284, 4, 900, 12, 5071, 5791), + (5076, 1192, 1192, 1192, 1192, 5, 72, 11288, 12, 1320, 12, 1194, 5077), + (5077, 1192, 1192, 1192, 1192, 5, 73, 11289, 12, 1320, 12, 5076, 5078), + (5078, 1192, 1192, 1192, 1192, 5, 74, 11290, 12, 1320, 12, 5077, 5794), + (5079, 1195, 1195, 1195, 1195, 9, 75, 11291, 13, 2160, 12, 1195, 5790), + (5080, 1459, 1459, 1459, 1459, 5, 71, 11293, 11, 1800, 12, 1461, 5081), + (5081, 1459, 1459, 1459, 1459, 5, 73, 11294, 11, 1800, 12, 5080, 5082), + (5082, 1459, 1459, 1459, 1459, 5, 75, 11295, 11, 1800, 12, 5081, 5803), + (5084, 1383, 1383, 1383, 1383, 12, 75, 11296, 6, 300, 12, 1387, 5789), + (5085, -1, -1, 5085, 5085, 3, 71, -1, 0, 0, 12, -1, 5086), + (5086, -1, -1, 5085, 5085, 6, 73, -1, 0, 0, 12, 5085, 5087), + (5087, -1, -1, 5085, 5085, 9, 75, -1, 0, 0, 12, 5086, 6406), + (5095, 5095, 5095, 5095, 5095, 3, 71, 11307, 10, 900, 12, -1, 5096), + (5096, 5095, 5095, 5095, 5095, 6, 73, 11308, 10, 900, 12, 5095, 5097), + (5097, 5095, 5095, 5095, 5095, 9, 75, 11309, 10, 900, 12, 5096, 5975), + (5098, 5098, 5098, 5098, 5098, 9, 75, 11310, 2, 30, 12, -1, -1), + (5105, 5105, 5105, 5105, 5105, 9, 75, 11317, 11, 600, 12, -1, 5832), + (5109, 5109, 5109, 5109, 5109, 9, 75, 11321, 0, 1, 12, -1, 6448), + (5118, -1, -1, 5083, 5083, 3, 71, -1, 0, 0, 12, -1, 5119), + (5119, -1, -1, 5083, 5083, 3, 73, -1, 0, 0, 12, 5118, 5120), + (5120, -1, -1, 5083, 5083, 3, 75, -1, 0, 0, 12, 5119, 5797), + (5127, -1, -1, 5127, 5127, 3, 71, -1, 0, 0, 12, -1, 5128), + (5128, -1, -1, 5127, 5127, 3, 73, -1, 0, 0, 12, 5127, 5129), + (5129, -1, -1, 5127, 5127, 3, 75, -1, 0, 0, 12, 5128, -1), + (5130, 860, 860, 860, 860, 6, 71, 5860, 5, 180, 12, 862, 5131), + (5131, 860, 860, 860, 860, 6, 73, 5861, 5, 180, 12, 5130, 5132), + (5132, 860, 860, 860, 860, 6, 75, 5862, 5, 180, 12, 5131, -1), + (5133, -1, -1, 267, 267, 6, 71, -1, 0, 0, 12, 925, 5134), + (5134, -1, -1, 267, 267, 6, 73, -1, 0, 0, 12, 5133, 5135), + (5135, -1, -1, 267, 267, 6, 75, -1, 0, 0, 12, 5134, 5617), + (5136, -1, -1, 4688, 4688, 3, 71, -1, 0, 0, 12, -1, 5137), + (5137, -1, -1, 4688, 4688, 3, 72, -1, 0, 0, 12, 5136, 5138), + (5138, -1, -1, 4688, 4688, 3, 73, -1, 0, 0, 12, 5137, 5139), + (5139, -1, -1, 4688, 4688, 3, 74, -1, 0, 0, 12, 5138, 5140), + (5140, -1, -1, 4688, 4688, 3, 75, -1, 0, 0, 12, 5139, -1), + (5141, -1, -1, 815, 815, 5, 71, -1, 0, 0, 12, 819, 5142), + (5142, -1, -1, 815, 815, 5, 72, -1, 0, 0, 12, 5141, 5143), + (5143, -1, -1, 815, 815, 5, 73, -1, 0, 0, 12, 5142, 5144), + (5144, -1, -1, 815, 815, 5, 74, -1, 0, 0, 12, 5143, 5145), + (5145, -1, -1, 815, 815, 5, 75, -1, 0, 0, 12, 5144, 5909), + (5150, 5150, 5150, 5150, 5150, 0, 1, 11112, 22, 300, 3, -1, 5151), + (5165, 5165, 5165, 5165, 5165, 0, 1, 11127, 22, 300, 3, -1, 5166), + (5180, 5180, 5180, 5180, 5180, 0, 1, 11142, 22, 300, 3, -1, 5181), + (5195, 5195, 5195, 5195, 5195, 0, 1, 11157, 22, 300, 3, -1, 5196), + (5210, 5210, 5210, 5210, 5210, 0, 1, 11172, 22, 300, 3, -1, 5211), + (5225, 5225, 5225, 5225, 5225, 0, 1, 11187, 22, 300, 3, -1, 5226), + (5240, 1355, 1355, 1355, 1355, 6, 71, 11611, 3, 60, 12, 1357, 5241), + (5241, 1355, 1355, 1355, 1355, 6, 73, 11612, 3, 60, 12, 5240, 5242), + (5242, 1355, 1355, 1355, 1355, 6, 75, 11613, 3, 60, 12, 5241, 5914), + (5243, -1, -1, 907, 907, 7, 71, -1, 0, 0, 12, 911, 5244), + (5244, -1, -1, 907, 907, 7, 72, -1, 0, 0, 12, 5243, 5245), + (5245, -1, -1, 907, 907, 7, 73, -1, 0, 0, 12, 5244, 5246), + (5246, -1, -1, 907, 907, 7, 74, -1, 0, 0, 12, 5245, 5247), + (5247, -1, -1, 907, 907, 7, 75, -1, 0, 0, 12, 5246, -1), + (5248, -1, -1, 5248, 5248, 3, 71, -1, 0, 0, 12, -1, 5249), + (5249, -1, -1, 5248, 5248, 6, 73, -1, 0, 0, 12, 5248, 5250), + (5250, -1, -1, 5248, 5248, 9, 75, -1, 0, 0, 12, 5249, 6014), + (5251, 5251, 5251, 5251, 5251, 5, 71, 11615, 13, 900, 12, -1, 5252), + (5252, 5251, 5251, 5251, 5251, 5, 73, 11616, 13, 900, 12, 5251, 5253), + (5253, 5251, 5251, 5251, 5251, 5, 75, 11617, 13, 900, 12, 5252, 6092), + (5254, -1, -1, 724, 724, 3, 71, -1, 0, 0, 12, 728, 5255), + (5255, -1, -1, 724, 724, 3, 72, -1, 0, 0, 12, 5254, 5256), + (5256, -1, -1, 724, 724, 3, 73, -1, 0, 0, 12, 5255, 5257), + (5257, -1, -1, 724, 724, 3, 74, -1, 0, 0, 12, 5256, 5258), + (5258, -1, -1, 724, 724, 3, 75, -1, 0, 0, 12, 5257, 5729), + (5259, -1, -1, 790, 790, 3, 71, -1, 0, 0, 12, 794, 5260), + (5260, -1, -1, 790, 790, 3, 72, -1, 0, 0, 12, 5259, 5261), + (5261, -1, -1, 790, 790, 3, 73, -1, 0, 0, 12, 5260, 5262), + (5262, -1, -1, 790, 790, 3, 74, -1, 0, 0, 12, 5261, 5263), + (5263, -1, -1, 790, 790, 3, 75, -1, 0, 0, 12, 5262, 5320), + (5264, -1, -1, 5264, 5264, 3, 71, -1, 0, 0, 12, -1, 5265), + (5265, -1, -1, 5264, 5264, 3, 72, -1, 0, 0, 12, 5264, 5266), + (5266, -1, -1, 5264, 5264, 3, 73, -1, 0, 0, 12, 5265, 5267), + (5267, -1, -1, 5264, 5264, 3, 74, -1, 0, 0, 12, 5266, 5268), + (5268, -1, -1, 5264, 5264, 3, 75, -1, 0, 0, 12, 5267, 5939), + (5269, -1, -1, 5269, 5269, 3, 71, -1, 0, 0, 12, -1, -1), + (5270, -1, -1, 589, 589, 7, 71, -1, 0, 0, 12, 894, 5271), + (5271, -1, -1, 589, 589, 7, 73, -1, 0, 0, 12, 5270, 5272), + (5272, -1, -1, 589, 589, 7, 75, -1, 0, 0, 12, 5271, 6063), + (5276, -1, -1, 5276, 5276, 3, 71, -1, 0, 0, 12, -1, 5277), + (5277, -1, -1, 5276, 5276, 6, 73, -1, 0, 0, 12, 5276, 5278), + (5278, -1, -1, 5276, 5276, 9, 75, -1, 0, 0, 12, 5277, 15238), + (5279, 155, 155, 155, 155, 12, 75, 11624, 8, 60, 12, 1344, 5289), + (5280, 921, 921, 921, 921, 9, 74, 11625, 8, 60, 12, 1340, 6149), + (5281, 922, 922, 922, 922, 9, 73, 11626, 8, 60, 12, 1341, 6150), + (5282, 923, 923, 923, 923, 9, 72, 11627, 8, 60, 12, 1342, 6151), + (5283, -1, -1, 5263, 5263, 3, 71, -1, 0, 0, 12, -1, 5284), + (5284, -1, -1, 5263, 5263, 6, 73, -1, 0, 0, 12, 5283, 5285), + (5285, -1, -1, 5263, 5263, 9, 75, -1, 0, 0, 12, 5284, 5620), + (5286, -1, -1, 1107, 1107, 6, 71, -1, 0, 0, 12, 1109, 5287), + (5287, -1, -1, 1107, 1107, 6, 73, -1, 0, 0, 12, 5286, 5288), + (5288, -1, -1, 1107, 1107, 6, 75, -1, 0, 0, 12, 5287, 6403), + (5289, 155, 155, 155, 155, 12, 77, 13227, 8, 60, 14, 5279, 7238), + (5290, -1, -1, 1604, 1604, 5, 63, -1, 0, 0, 12, 1606, 5291), + (5291, -1, -1, 1604, 1604, 5, 64, -1, 0, 0, 12, 5290, 5292), + (5292, -1, -1, 1604, 1604, 5, 65, -1, 0, 0, 12, 5291, 5293), + (5293, -1, -1, 1604, 1604, 5, 66, -1, 0, 0, 12, 5292, 5294), + (5294, -1, -1, 1604, 1604, 5, 67, -1, 0, 0, 12, 5293, 6032), + (5295, -1, -1, 5295, 5295, 3, 71, -1, 0, 0, 12, -1, 5296), + (5296, -1, -1, 5295, 5295, 6, 73, -1, 0, 0, 12, 5295, 5297), + (5297, -1, -1, 5295, 5295, 9, 75, -1, 0, 0, 12, 5296, 6531), + (5298, 5298, 5298, 5298, 5298, 3, 71, 11630, 32, 1800, 12, -1, 5299), + (5299, 5298, 5298, 5298, 5298, 6, 73, 11631, 32, 1800, 12, 5298, 5300), + (5300, 5298, 5298, 5298, 5298, 9, 75, 11632, 32, 1800, 12, 5299, 5707), + (5301, -1, -1, 683, 683, 5, 71, -1, 0, 0, 12, 1038, 5302), + (5302, -1, -1, 683, 683, 5, 72, -1, 0, 0, 12, 5301, 5303), + (5303, -1, -1, 683, 683, 5, 73, -1, 0, 0, 12, 5302, 5304), + (5304, -1, -1, 683, 683, 5, 74, -1, 0, 0, 12, 5303, 5305), + (5305, -1, -1, 683, 683, 5, 75, -1, 0, 0, 12, 5304, 6080), + (5306, -1, -1, 658, 658, 5, 71, -1, 0, 0, 12, 660, 5307), + (5307, -1, -1, 658, 658, 5, 72, -1, 0, 0, 12, 5306, 5308), + (5308, -1, -1, 658, 658, 5, 73, -1, 0, 0, 12, 5307, 5309), + (5309, -1, -1, 658, 658, 5, 74, -1, 0, 0, 12, 5308, 5310), + (5310, -1, -1, 658, 658, 5, 75, -1, 0, 0, 12, 5309, 5623), + (5311, 1495, 1495, 1495, 1495, 5, 71, 11639, 30, 900, 12, 1497, 5312), + (5312, 1495, 1495, 1495, 1495, 5, 73, 11640, 30, 900, 12, 5311, 5313), + (5313, 1495, 1495, 1495, 1495, 5, 75, 11641, 30, 900, 12, 5312, 5826), + (5314, 1327, 1327, 1327, 1327, 5, 71, 11642, 10, 900, 12, 1329, 5315), + (5315, 1327, 1327, 1327, 1327, 5, 73, 11643, 10, 900, 12, 5314, 5316), + (5316, 1327, 1327, 1327, 1327, 5, 75, 11644, 10, 900, 12, 5315, 6098), + (5317, -1, -1, 98, 738, 4, 71, -1, 0, 0, 12, 740, 5318), + (5318, -1, -1, 98, 738, 4, 73, -1, 0, 0, 12, 5317, 5319), + (5319, -1, -1, 98, 738, 4, 75, -1, 0, 0, 12, 5318, 5628), + (5320, -1, -1, 790, 790, 6, 76, -1, 0, 0, 14, 5263, 5321), + (5321, -1, -1, 790, 790, 6, 77, -1, 0, 0, 14, 5320, 5322), + (5322, -1, -1, 790, 790, 6, 78, -1, 0, 0, 14, 5321, 5323), + (5323, -1, -1, 790, 790, 6, 79, -1, 0, 0, 14, 5322, 5324), + (5324, -1, -1, 790, 790, 6, 80, -1, 0, 0, 14, 5323, 7270), + (5325, -1, -1, 839, 839, 6, 70, -1, 0, 0, 14, 843, 5326), + (5326, -1, -1, 839, 839, 6, 70, -1, 0, 0, 14, 5325, 5327), + (5327, -1, -1, 839, 839, 6, 70, -1, 0, 0, 14, 5326, 5328), + (5328, -1, -1, 839, 839, 6, 70, -1, 0, 0, 14, 5327, 5329), + (5329, -1, -1, 839, 839, 6, 70, -1, 0, 0, 14, 5328, 7210), + (5330, 1327, 1327, 1327, 1327, 12, 91, 30870, 10, 900, 18, 10189, 5331), + (5333, 1520, 1520, 1520, 1520, 9, 91, 30873, 11, 900, 18, 12999, 5334), + (5336, 12989, 12989, 12989, 12989, 11, 91, 30876, 73, 1800, 18, 12991, 5337), + (5339, -1, -1, 6383, 6383, 11, 91, -1, 0, 0, 18, 12803, 5340), + (5342, 6692, 6692, 6692, 6692, 9, 91, 30879, 42, 600, 18, 6696, 5343), + (5347, -1, -1, 6375, 6375, 12, 91, -1, 0, 0, 18, 10086, 5348), + (5348, -1, -1, 6375, 6375, 15, 93, -1, 0, 0, 18, 5347, 5349), + (5350, 12992, 12992, 12992, 12992, 12, 91, 30884, 0, 1, 18, 12994, 5351), + (5353, 6706, 6706, 6706, 6706, 9, 91, 30887, 44, 600, 18, 10181, 5354), + (5356, 5109, 5109, 5109, 5109, 12, 92, 30890, 0, 1, 18, 13016, 17323), + (5357, 528, 528, 528, 528, 12, 91, 30891, 5, 720, 18, 13163, 5358), + (5360, -1, -1, 9503, 9503, 11, 91, -1, 0, 0, 18, 12794, 5361), + (5363, 5251, 5251, 5251, 5251, 15, 91, 30894, 13, 900, 18, 10199, 5364), + (5366, -1, -1, 5002, 5002, 12, 91, -1, 34, 0, 18, -1, 5367), + (5369, 5001, 5001, 5001, 5001, 12, 91, 30900, 32, 600, 18, -1, 5370), + (5500, -1, -1, 852, 852, 9, 78, -1, 0, 0, 14, 854, 5501), + (5501, -1, -1, 852, 852, 10, 79, -1, 0, 0, 14, 5500, 5502), + (5502, -1, -1, 852, 852, 12, 80, -1, 0, 0, 14, 5501, 7678), + (5513, 1126, 1126, 1126, 1126, 8, 77, 12668, 2, 2160, 14, 1128, 5514), + (5514, 1126, 1126, 1126, 1126, 9, 78, 12669, 2, 2160, 14, 5513, 5515), + (5515, 1126, 1126, 1126, 1126, 10, 79, 12670, 2, 2160, 14, 5514, 13253), + (5516, -1, -1, 1287, 1287, 8, 77, -1, 0, 0, 14, 1289, 5517), + (5517, -1, -1, 1287, 1287, 9, 78, -1, 0, 0, 14, 5516, 5518), + (5518, -1, -1, 1287, 1287, 10, 79, -1, 0, 0, 14, 5517, 12469), + (5519, -1, -1, 125, 125, 6, 76, -1, 0, 0, 14, 1398, 5520), + (5520, -1, -1, 125, 125, 7, 77, -1, 0, 0, 14, 5519, 5521), + (5521, -1, -1, 125, 125, 8, 78, -1, 0, 0, 14, 5520, 5522), + (5522, -1, -1, 125, 125, 9, 79, -1, 0, 0, 14, 5521, 5523), + (5523, -1, -1, 125, 125, 10, 80, -1, 0, 0, 14, 5522, 7501), + (5524, -1, -1, 122, 122, 6, 76, -1, 0, 0, 14, 1403, 5525), + (5525, -1, -1, 122, 122, 7, 77, -1, 0, 0, 14, 5524, 5526), + (5526, -1, -1, 122, 122, 8, 78, -1, 0, 0, 14, 5525, 5527), + (5527, -1, -1, 122, 122, 9, 79, -1, 0, 0, 14, 5526, 5528), + (5528, -1, -1, 122, 122, 10, 80, -1, 0, 0, 14, 5527, 7506), + (5529, -1, -1, 1486, 1486, 7, 76, -1, 0, 0, 14, 1490, 5530), + (5530, -1, -1, 1486, 1486, 8, 77, -1, 0, 0, 14, 5529, 5531), + (5531, -1, -1, 1486, 1486, 9, 78, -1, 0, 0, 14, 5530, 5532), + (5532, -1, -1, 1486, 1486, 10, 79, -1, 0, 0, 14, 5531, 5533), + (5533, -1, -1, 1486, 1486, 12, 80, -1, 0, 0, 14, 5532, 7554), + (5534, -1, -1, 599, 599, 9, 78, -1, 0, 0, 14, 1538, 5535), + (5535, -1, -1, 599, 599, 10, 79, -1, 0, 0, 14, 5534, 5536), + (5536, -1, -1, 599, 599, 12, 80, -1, 0, 0, 14, 5535, 7559), + (5542, -1, -1, 1041, 1041, 7, 76, -1, 0, 0, 14, 4709, 5543), + (5543, -1, -1, 1041, 1041, 9, 78, -1, 0, 0, 14, 5542, 5544), + (5544, -1, -1, 1041, 1041, 12, 80, -1, 0, 0, 14, 5543, 7562), + (5545, -1, -1, 1044, 1044, 7, 76, -1, 0, 0, 14, 4712, 5546), + (5546, -1, -1, 1044, 1044, 9, 78, -1, 0, 0, 14, 5545, 5547), + (5547, -1, -1, 1044, 1044, 12, 80, -1, 0, 0, 14, 5546, 7650), + (5548, -1, -1, 1047, 1047, 7, 76, -1, 0, 0, 14, 4715, 5549), + (5549, -1, -1, 1047, 1047, 9, 78, -1, 0, 0, 14, 5548, 5550), + (5550, -1, -1, 1047, 1047, 12, 80, -1, 0, 0, 14, 5549, 7653), + (5551, -1, -1, 1050, 1050, 7, 76, -1, 0, 0, 14, 4718, 5552), + (5552, -1, -1, 1050, 1050, 9, 78, -1, 0, 0, 14, 5551, 5553), + (5553, -1, -1, 1050, 1050, 12, 80, -1, 0, 0, 14, 5552, 7656), + (5554, -1, -1, 119, 119, 7, 76, -1, 0, 0, 14, 4724, 5555), + (5555, -1, -1, 119, 119, 9, 78, -1, 0, 0, 14, 5554, 5556), + (5556, -1, -1, 119, 119, 12, 80, -1, 0, 0, 14, 5555, 7565), + (5557, -1, -1, 1592, 1592, 7, 76, -1, 0, 0, 14, 4729, 5558), + (5558, -1, -1, 1592, 1592, 8, 77, -1, 0, 0, 14, 5557, 5559), + (5559, -1, -1, 1592, 1592, 9, 78, -1, 0, 0, 14, 5558, 5560), + (5560, -1, -1, 1592, 1592, 10, 79, -1, 0, 0, 14, 5559, 5561), + (5561, -1, -1, 1592, 1592, 12, 80, -1, 0, 0, 14, 5560, 7568), + (5562, -1, -1, 4739, 4739, 7, 76, -1, 0, 0, 14, 4741, 5563), + (5563, -1, -1, 4739, 4739, 9, 78, -1, 0, 0, 14, 5562, 5564), + (5564, -1, -1, 4739, 4739, 12, 80, -1, 0, 0, 14, 5563, 7573), + (5565, 4742, 4742, 4742, 4742, 7, 76, 12671, 12, 600, 14, 4742, -1), + (5566, -1, -1, 1072, 1072, 7, 76, -1, 0, 0, 14, 4748, 5567), + (5567, -1, -1, 1072, 1072, 8, 77, -1, 0, 0, 14, 5566, 5568), + (5568, -1, -1, 1072, 1072, 9, 78, -1, 0, 0, 14, 5567, 5569), + (5569, -1, -1, 1072, 1072, 10, 79, -1, 0, 0, 14, 5568, 5570), + (5570, -1, -1, 1072, 1072, 12, 80, -1, 0, 0, 14, 5569, 7576), + (5571, -1, -1, 637, 637, 7, 76, -1, 0, 0, 14, 4751, 5572), + (5572, -1, -1, 637, 637, 9, 78, -1, 0, 0, 14, 5571, 5573), + (5573, -1, -1, 637, 637, 12, 80, -1, 0, 0, 14, 5572, 12435), + (5574, -1, -1, 1210, 1210, 7, 76, -1, 0, 0, 14, 4754, 5575), + (5575, -1, -1, 1210, 1210, 9, 78, -1, 0, 0, 14, 5574, 5576), + (5576, -1, -1, 1210, 1210, 12, 80, -1, 0, 0, 14, 5575, 7232), + (5577, -1, -1, 1210, 1213, 7, 76, -1, 0, 0, 14, 4757, 5578), + (5578, -1, -1, 1210, 1213, 9, 78, -1, 0, 0, 14, 5577, 5579), + (5579, -1, -1, 1210, 1213, 12, 80, -1, 0, 0, 14, 5578, 7581), + (5580, -1, -1, 602, 602, 7, 76, -1, 0, 0, 14, 4760, 5581), + (5581, -1, -1, 602, 602, 9, 78, -1, 0, 0, 14, 5580, 5582), + (5582, -1, -1, 602, 602, 12, 80, -1, 0, 0, 14, 5581, 10685), + (5586, -1, -1, 98, 98, 7, 76, -1, 0, 0, 14, 4769, 5587), + (5587, -1, -1, 98, 98, 9, 78, -1, 0, 0, 14, 5586, 5588), + (5588, -1, -1, 98, 98, 12, 80, -1, 0, 0, 14, 5587, 7584), + (5589, -1, -1, 1186, 1186, 7, 76, -1, 0, 0, 14, 4778, 5590), + (5590, -1, -1, 1186, 1186, 9, 78, -1, 0, 0, 14, 5589, 5591), + (5591, -1, -1, 1186, 1186, 12, 80, -1, 0, 0, 14, 5590, 7587), + (5592, -1, -1, 80, 80, 7, 76, -1, 0, 0, 14, 4781, 5593), + (5593, -1, -1, 80, 80, 9, 78, -1, 0, 0, 14, 5592, 5594), + (5594, -1, -1, 80, 80, 12, 80, -1, 0, 0, 14, 5593, 7590), + (5595, -1, -1, 255, 255, 7, 76, -1, 0, 0, 14, 4797, 5596), + (5596, -1, -1, 255, 255, 9, 78, -1, 0, 0, 14, 5595, 5597), + (5597, -1, -1, 255, 255, 12, 80, -1, 0, 0, 14, 5596, 7631), + (5606, 4860, 4860, 4860, 4860, 12, 80, 11688, 13, 60, 14, 4860, 7127), + (5607, 4915, 4915, 4915, 4915, 7, 76, 12673, 7, 4320, 14, 4917, 5608), + (5608, 4915, 4915, 4915, 4915, 9, 78, 12674, 7, 4320, 14, 5607, 5609), + (5609, 4915, 4915, 4915, 4915, 12, 80, 12675, 7, 4320, 14, 5608, 7246), + (5610, 4938, 4938, 4938, 4938, 12, 80, 12676, 35, 1800, 14, 4938, 5614), + (5611, -1, -1, 634, 634, 7, 76, -1, 0, 0, 14, 5034, 5612), + (5612, -1, -1, 634, 634, 9, 78, -1, 0, 0, 14, 5611, 5613), + (5613, -1, -1, 634, 634, 12, 80, -1, 0, 0, 14, 5612, 7713), + (5614, 4938, 4938, 4938, 4938, 9, 85, 16852, 35, 1800, 16, 5610, 12875), + (5617, -1, -1, 267, 267, 7, 76, -1, 0, 0, 14, 5135, 5618), + (5618, -1, -1, 267, 267, 9, 78, -1, 0, 0, 14, 5617, 5619), + (5619, -1, -1, 267, 267, 12, 80, -1, 0, 0, 14, 5618, 12860), + (5620, -1, -1, 5263, 5263, 7, 76, -1, 0, 0, 14, 5285, 5621), + (5621, -1, -1, 5263, 5263, 9, 78, -1, 0, 0, 14, 5620, 5622), + (5622, -1, -1, 5263, 5263, 12, 80, -1, 0, 0, 14, 5621, 12466), + (5623, -1, -1, 658, 658, 5, 76, -1, 0, 0, 14, 5310, 5624), + (5624, -1, -1, 658, 658, 5, 77, -1, 0, 0, 14, 5623, 5625), + (5625, -1, -1, 658, 658, 5, 78, -1, 0, 0, 14, 5624, 5626), + (5626, -1, -1, 658, 658, 5, 79, -1, 0, 0, 14, 5625, 5627), + (5627, -1, -1, 658, 658, 5, 80, -1, 0, 0, 14, 5626, 7593), + (5628, -1, -1, 98, 738, 7, 76, -1, 0, 0, 14, 5319, 5629), + (5629, -1, -1, 98, 738, 9, 78, -1, 0, 0, 14, 5628, 5630), + (5630, -1, -1, 98, 738, 12, 80, -1, 0, 0, 14, 5629, 7598), + (5699, 1116, 1116, 1116, 1116, 7, 76, 12500, 4, 2160, 14, 4982, 5700), + (5700, 1116, 1116, 1116, 1116, 9, 78, 12501, 4, 2160, 14, 5699, 5701), + (5701, 1116, 1116, 1116, 1116, 12, 80, 12502, 4, 2160, 14, 5700, 7430), + (5702, 592, 592, 592, 592, 4, 76, 12503, 2, 18, 14, 4979, 5703), + (5703, 592, 592, 592, 592, 4, 77, 12504, 2, 18, 14, 5702, 5704), + (5704, 592, 592, 592, 592, 4, 78, 12505, 2, 18, 14, 5703, 5705), + (5705, 592, 592, 592, 592, 4, 79, 12506, 2, 18, 14, 5704, 5706), + (5706, 592, 592, 592, 592, 4, 80, 12507, 2, 18, 14, 5705, 7433), + (5707, 5298, 5298, 5298, 5298, 9, 78, 12508, 32, 1800, 14, 5300, 5708), + (5708, 5298, 5298, 5298, 5298, 10, 79, 12509, 32, 1800, 14, 5707, 5709), + (5709, 5298, 5298, 5298, 5298, 12, 80, 12510, 32, 1800, 14, 5708, 7438), + (5710, 1598, -1, 1598, 1598, 7, 76, 12511, 6, 900, 14, 4974, 5711), + (5711, 1598, -1, 1598, 1598, 9, 78, 12512, 6, 900, 14, 5710, 5712), + (5712, 1598, -1, 1598, 1598, 12, 80, 12513, 6, 900, 14, 5711, 7441), + (5713, 1569, 1569, 1569, 1569, 7, 76, 12514, 5, 1800, 14, 1571, 5714), + (5714, 1569, 1569, 1569, 1569, 9, 78, 12515, 5, 1800, 14, 5713, 5715), + (5715, 1569, 1569, 1569, 1569, 12, 80, 12516, 5, 1800, 14, 5714, 7457), + (5716, 5020, 5020, 5020, 5020, 9, 77, 12517, 9, 300, 14, 5020, 7444), + (5717, 5717, 5717, 5717, 5717, 10, 76, 12519, 17, 600, 14, -1, -1), + (5729, -1, -1, 724, 724, 7, 76, -1, 0, 0, 14, 5258, 5730), + (5730, -1, -1, 724, 724, 8, 77, -1, 0, 0, 14, 5729, 5731), + (5731, -1, -1, 724, 724, 9, 78, -1, 0, 0, 14, 5730, 5732), + (5732, -1, -1, 724, 724, 10, 79, -1, 0, 0, 14, 5731, 5733), + (5733, -1, -1, 724, 724, 12, 80, -1, 0, 0, 14, 5732, 7489), + (5734, 1119, 1119, 1119, 1119, 7, 78, 12520, 8, 900, 14, 4966, 5735), + (5735, 1119, 1119, 1119, 1119, 8, 79, 12521, 8, 900, 14, 5734, 5736), + (5736, 1119, 1119, 1119, 1119, 9, 80, 12522, 8, 900, 14, 5735, 7479), + (5737, 723, 723, 723, 723, 7, 76, 12523, 6, 30, 14, 4963, 7482), + (5738, -1, -1, 729, 729, 7, 76, -1, 0, 0, 14, 4962, 5739), + (5739, -1, -1, 729, 729, 8, 77, -1, 0, 0, 14, 5738, 5740), + (5740, -1, -1, 729, 729, 9, 78, -1, 0, 0, 14, 5739, 7494), + (5741, 5015, 5015, 5015, 5015, 12, 80, 12524, 9, 900, 14, 5015, 7483), + (5742, 289, 289, 289, 289, 12, 80, 12525, 3, 300, 14, 1607, 7484), + (5743, 291, 291, 291, 291, 9, 78, 12526, 5, 900, 14, 4971, 5744), + (5744, 291, 291, 291, 291, 10, 79, 12527, 5, 900, 14, 5743, 5745), + (5745, 291, 291, 291, 291, 12, 80, 12528, 5, 900, 14, 5744, 7485), + (5759, 1425, 1425, 1425, 1425, 7, 78, 13565, 2, 2160, 14, 1429, 5760), + (5760, 1425, 1425, 1425, 1425, 8, 78, 13570, 2, 2160, 14, 5759, 5761), + (5761, 1425, 1425, 1425, 1425, 9, 79, 13575, 2, 2160, 14, 5760, 5762), + (5762, 1425, 1425, 1425, 1425, 10, 79, 13580, 2, 2160, 14, 5761, 5763), + (5763, 1425, 1425, 1425, 1425, 11, 80, 13585, 2, 2160, 14, 5762, -1), + (5764, 4854, 4854, 4854, 4854, 7, 76, 12534, 8, 600, 14, 4856, 5765), + (5765, 4854, 4854, 4854, 4854, 9, 78, 12535, 8, 600, 14, 5764, 5766), + (5766, 4854, 4854, 4854, 4854, 12, 80, 12536, 8, 600, 14, 5765, 7178), + (5767, 4857, 4857, 4857, 4857, 7, 76, 12537, 7, 600, 14, 4859, 5768), + (5768, 4857, 4857, 4857, 4857, 9, 78, 12538, 7, 600, 14, 5767, 5769), + (5769, 4857, 4857, 4857, 4857, 12, 80, 12539, 7, 600, 14, 5768, 17030), + (5770, 1348, 1348, 1348, 1348, 9, 78, 12540, 0, 3600, 14, 1350, 5771), + (5771, 1348, 1348, 1348, 1348, 10, 79, 12541, 0, 3600, 14, 5770, 5772), + (5772, 1348, 1348, 1348, 1348, 12, 80, 12542, 0, 3600, 14, 5771, 7184), + (5776, -1, -1, 5776, 5776, 7, 76, -1, 0, 0, 14, -1, 5777), + (5777, -1, -1, 5776, 5776, 9, 78, -1, 0, 0, 14, 5776, 5778), + (5778, -1, -1, 5776, 5776, 12, 80, -1, 0, 0, 14, 5777, 7196), + (5779, 1178, 1178, 1178, 1178, 7, 76, 12546, 4, 900, 14, 1180, 5780), + (5780, 1178, 1178, 1178, 1178, 8, 77, 12547, 4, 900, 14, 5779, 5781), + (5781, 1178, 1178, 1178, 1178, 9, 78, 12548, 4, 900, 14, 5780, 7187), + (5789, 1383, 1383, 1383, 1383, 12, 80, 12549, 6, 300, 14, 5084, 7299), + (5790, 1195, 1195, 1195, 1195, 9, 80, 12550, 13, 2160, 14, 5079, 7300), + (5791, 131, 131, 131, 131, 8, 77, 12551, 4, 900, 14, 5072, 5792), + (5792, 131, 131, 131, 131, 9, 78, 12552, 4, 900, 14, 5791, 5793), + (5793, 131, 131, 131, 131, 10, 79, 12553, 4, 900, 14, 5792, 7301), + (5794, 1192, 1192, 1192, 1192, 8, 77, 12554, 12, 1320, 14, 5078, 5795), + (5795, 1192, 1192, 1192, 1192, 9, 78, 12555, 12, 1320, 14, 5794, 5796), + (5796, 1192, 1192, 1192, 1192, 10, 79, 12556, 12, 1320, 14, 5795, 7304), + (5797, -1, -1, 5083, 5083, 7, 76, -1, 0, 0, 14, 5120, 5798), + (5798, -1, -1, 5083, 5083, 9, 78, -1, 0, 0, 14, 5797, 5799), + (5799, -1, -1, 5083, 5083, 12, 80, -1, 0, 0, 14, 5798, -1), + (5800, 746, 746, 746, 746, 9, 78, 12557, 10, 2160, 14, 1493, 5801), + (5801, 746, 746, 746, 746, 10, 79, 12558, 10, 2160, 14, 5800, 5802), + (5802, 746, 746, 746, 746, 12, 80, 12559, 10, 2160, 14, 5801, 7307), + (5803, 1459, 1459, 1459, 1459, 7, 76, 12560, 11, 1800, 14, 5082, 5804), + (5804, 1459, 1459, 1459, 1459, 9, 78, 12561, 11, 1800, 14, 5803, 5805), + (5805, 1459, 1459, 1459, 1459, 12, 80, 12562, 11, 1800, 14, 5804, 7310), + (5806, -1, -1, 255, 255, 7, 59, -1, 0, 0, 16, -1, 5807), + (5807, -1, -1, 255, 255, 9, 59, -1, 0, 0, 16, 5806, 5808), + (5808, -1, -1, 255, 255, 12, 59, -1, 0, 0, 16, 5807, 10623), + (5809, 5833, 5833, 5833, 5833, 9, 85, 20184, 72, 900, 16, -1, -1), + (5819, 1498, 1498, 1498, 1498, 7, 76, 12563, 12, 1320, 14, 5060, 5820), + (5820, 1498, 1498, 1498, 1498, 9, 78, 12564, 12, 1320, 14, 5819, 5821), + (5821, 1498, 1498, 1498, 1498, 12, 80, 12565, 12, 1320, 14, 5820, 7408), + (5822, 757, -1, 757, 757, 7, 76, 12566, 6, 1800, 14, 5053, 5823), + (5823, 757, -1, 757, 757, 9, 78, 12567, 6, 1800, 14, 5822, 5824), + (5824, 757, -1, 757, 757, 12, 80, 12568, 6, 1800, 14, 5823, 7411), + (5825, -1, -1, 567, 567, 7, 76, -1, 0, 0, 14, 5061, -1), + (5826, 1495, 1495, 1495, 1495, 7, 76, 12569, 30, 900, 14, 5313, 5827), + (5827, 1495, 1495, 1495, 1495, 9, 78, 12570, 30, 900, 14, 5826, 5828), + (5828, 1495, 1495, 1495, 1495, 12, 80, 12571, 30, 900, 14, 5827, 7414), + (5829, 548, 548, 548, 548, 8, 77, 12572, 5, 900, 14, 5056, 5830), + (5830, 548, 548, 548, 548, 9, 78, 12573, 5, 900, 14, 5829, 5831), + (5831, 548, 548, 548, 548, 10, 79, 12574, 5, 900, 14, 5830, 7417), + (5832, 5105, 5105, 5105, 5105, 12, 80, 12575, 11, 600, 14, 5105, 7420), + (5849, 54009, 54009, 54009, 54009, 7, 73, 12576, 22, 12, 14, -1, 12923), + (5850, -1, -1, 781, 781, 8, 77, -1, 0, 0, 14, 781, 7284), + (5854, 773, -1, 773, 773, 7, 76, 12580, 5, 1800, 14, 775, 5855), + (5855, 773, -1, 773, 773, 9, 78, 12581, 5, 1800, 14, 5854, 5856), + (5856, 773, -1, 773, 773, 12, 80, 12582, 5, 1800, 14, 5855, 7276), + (5857, 1242, 1242, 1242, 1242, 7, 76, 12577, 9, 1320, 14, 1244, 5858), + (5858, 1242, 1242, 1242, 1242, 9, 78, 12578, 9, 1320, 14, 5857, 5859), + (5859, 1242, 1242, 1242, 1242, 12, 80, 12579, 9, 1320, 14, 5858, 7285), + (5860, -1, -1, 649, 649, 7, 76, -1, 0, 0, 14, 651, 5861), + (5861, -1, -1, 649, 649, 9, 78, -1, 0, 0, 14, 5860, 5862), + (5862, -1, -1, 649, 649, 12, 80, -1, 0, 0, 14, 5861, -1), + (5868, 1239, 1239, 1239, 1239, 12, 80, 13224, 6, 600, 14, 1239, 7275), + (5869, 4890, -1, 4890, 4890, 9, 77, 12587, 3, 8640, 14, 4890, 5871), + (5870, 54010, 54010, 54010, 54010, 7, 73, 12828, 22, 6, 14, -1, -1), + (5871, 4890, -1, 4890, 4890, 9, 79, 16440, 3, 8640, 15, 5869, 5872), + (5872, 4890, -1, 4890, 4890, 9, 81, 21745, 3, 8640, 16, 5871, 14280), + (5879, 167, 167, 167, 167, 10, 79, 12588, 14, 900, 14, 167, 7249), + (5880, -1, -1, 1504, 1504, 5, 76, -1, 0, 0, 14, 1506, 5881), + (5881, -1, -1, 1504, 1504, 5, 78, -1, 0, 0, 14, 5880, 5882), + (5882, -1, -1, 1504, 1504, 5, 80, -1, 0, 0, 14, 5881, 7260), + (5883, 520, 520, 520, 520, 12, 76, 12589, 6, 540, 14, 1509, 5884), + (5884, 520, 520, 520, 520, 12, 78, 12590, 6, 540, 14, 5883, 5885), + (5885, 520, 520, 520, 520, 12, 80, 12591, 6, 540, 14, 5884, 7250), + (5886, -1, -1, 1577, 1577, 7, 76, -1, 0, 0, 14, 1579, 5887), + (5887, -1, -1, 1577, 1577, 9, 78, -1, 0, 0, 14, 5886, 5888), + (5888, -1, -1, 1577, 1577, 12, 80, -1, 0, 0, 14, 5887, 7263), + (5889, -1, -1, 795, 795, 7, 76, -1, 0, 0, 14, 4899, 5890), + (5890, -1, -1, 795, 795, 9, 78, -1, 0, 0, 14, 5889, 5891), + (5891, -1, -1, 795, 795, 12, 80, -1, 0, 0, 14, 5890, 7267), + (5892, 4903, 4903, 4903, 4903, 9, 76, 12592, 9, 1320, 14, 4903, 7253), + (5893, 4906, 4906, 4906, 4906, 9, 76, 12593, 9, 1320, 14, 4906, 7254), + (5894, 4909, 4909, 4909, 4909, 9, 76, 12594, 16, 1320, 14, 4909, 7255), + (5895, 4912, 4912, 4912, 4912, 9, 76, 12595, 16, 1320, 14, 4912, 7256), + (5909, -1, -1, 815, 815, 7, 76, -1, 0, 0, 14, 5145, 5910), + (5910, -1, -1, 815, 815, 8, 77, -1, 0, 0, 14, 5909, 5911), + (5911, -1, -1, 815, 815, 9, 78, -1, 0, 0, 14, 5910, 5912), + (5912, -1, -1, 815, 815, 10, 79, -1, 0, 0, 14, 5911, 5913), + (5913, -1, -1, 815, 815, 12, 80, -1, 0, 0, 14, 5912, 7634), + (5914, 1355, 1355, 1355, 1355, 6, 76, 12596, 3, 60, 14, 5242, 5915), + (5915, 1355, 1355, 1355, 1355, 6, 78, 12597, 3, 60, 14, 5914, 5916), + (5916, 1355, 1355, 1355, 1355, 6, 80, 12598, 3, 60, 14, 5915, 7172), + (5917, -1, -1, 820, 820, 5, 76, -1, 0, 0, 14, 4815, 5918), + (5918, -1, -1, 820, 820, 5, 78, -1, 0, 0, 14, 5917, 5919), + (5919, -1, -1, 820, 820, 5, 80, -1, 0, 0, 14, 5918, 7163), + (5922, -1, -1, 807, 807, 5, 76, -1, 0, 0, 14, 1270, 5923), + (5923, -1, -1, 807, 807, 5, 78, -1, 0, 0, 14, 5922, 5924), + (5924, -1, -1, 807, 807, 5, 80, -1, 0, 0, 14, 5923, 7628), + (5939, -1, -1, 5264, 5264, 7, 76, -1, 0, 0, 14, 5268, 5940), + (5940, -1, -1, 5264, 5264, 8, 77, -1, 0, 0, 14, 5939, 5941), + (5941, -1, -1, 5264, 5264, 9, 78, -1, 0, 0, 14, 5940, 5942), + (5942, -1, -1, 5264, 5264, 10, 79, -1, 0, 0, 14, 5941, 5943), + (5943, -1, -1, 5264, 5264, 12, 80, -1, 0, 0, 14, 5942, 7204), + (5944, -1, -1, 4924, 4924, 9, 78, -1, 0, 0, 14, 4926, 5945), + (5945, -1, -1, 4924, 4924, 10, 79, -1, 0, 0, 14, 5944, 5946), + (5946, -1, -1, 4924, 4924, 12, 80, -1, 0, 0, 14, 5945, -1), + (5947, 1274, 1274, 1274, 1274, 9, 78, 12599, 9, 540, 14, 4866, 5948), + (5948, 1274, 1274, 1274, 1274, 10, 79, 12600, 9, 540, 14, 5947, 5949), + (5949, 1274, 1274, 1274, 1274, 12, 80, 12601, 9, 540, 14, 5948, 7199), + (5950, -1, -1, 1511, 1511, 12, 80, -1, 0, 0, 14, 1513, 5951), + (5951, -1, -1, 1511, 1511, 12, 80, -1, 0, 0, 14, 5950, 5952), + (5952, -1, -1, 1511, 1511, 12, 80, -1, 0, 0, 14, 5951, -1), + (5953, 184, 184, 184, 184, 10, 79, 12602, 5, 4320, 14, 184, 7203), + (5954, -1, -1, 4861, 4861, 7, 76, -1, 0, 0, 14, 4863, 5955), + (5955, -1, -1, 4861, 4861, 9, 78, -1, 0, 0, 14, 5954, 5956), + (5956, -1, -1, 4861, 4861, 12, 80, -1, 0, 0, 14, 5955, 7215), + (5969, 534, 534, 534, 534, 7, 76, 12603, 4, 2160, 14, 5043, 5970), + (5970, 534, 534, 534, 534, 9, 78, 12604, 4, 2160, 14, 5969, 5971), + (5971, 534, 534, 534, 534, 12, 80, 12605, 4, 2160, 14, 5970, 7329), + (5972, -1, -1, 593, 593, 7, 76, -1, 0, 0, 14, 595, -1), + (5973, -1, -1, 596, 596, 7, 76, -1, 0, 0, 14, 598, -1), + (5975, 5095, 5095, 5095, 5095, 7, 76, 12606, 10, 900, 14, 5097, 5976), + (5976, 5095, 5095, 5095, 5095, 9, 78, 12607, 10, 900, 14, 5975, 5977), + (5977, 5095, 5095, 5095, 5095, 12, 80, 12608, 10, 900, 14, 5976, 7332), + (5984, 5984, 5984, 5984, 5984, 12, 80, 12609, 2, 30, 14, -1, 7335), + (5999, 645, -1, 645, 645, 10, 79, 12610, 4, 5, 14, 645, 10739), + (6000, 545, 545, 545, 545, 7, 76, 12611, 3, 900, 14, 4999, 6001), + (6001, 545, 545, 545, 545, 9, 78, 12612, 3, 900, 14, 6000, 6002), + (6002, 545, 545, 545, 545, 12, 80, 12613, 3, 900, 14, 6001, 7344), + (6003, -1, -1, 1616, 1616, 7, 76, -1, 0, 0, 14, 4996, 6004), + (6004, -1, -1, 1616, 1616, 8, 77, -1, 0, 0, 14, 6003, 6005), + (6005, -1, -1, 1616, 1616, 9, 78, -1, 0, 0, 14, 6004, 6006), + (6006, -1, -1, 1616, 1616, 10, 79, -1, 0, 0, 14, 6005, 6007), + (6007, -1, -1, 1616, 1616, 12, 80, -1, 0, 0, 14, 6006, 7637), + (6008, 1345, 1345, 1345, 1345, 8, 77, 12614, 6, 900, 14, 5005, 6009), + (6009, 1345, 1345, 1345, 1345, 9, 78, 12615, 6, 900, 14, 6008, 6010), + (6010, 1345, 1345, 1345, 1345, 10, 79, 12616, 6, 900, 14, 6009, 7347), + (6011, -1, -1, 864, 864, 12, 80, -1, 0, 0, 14, 4985, 6012), + (6012, -1, -1, 864, 864, 12, 80, -1, 0, 0, 14, 6011, 6013), + (6013, -1, -1, 864, 864, 12, 80, -1, 0, 0, 14, 6012, 7353), + (6014, -1, -1, 5248, 5248, 7, 76, -1, 0, 0, 14, 5250, 6015), + (6015, -1, -1, 5248, 5248, 9, 78, -1, 0, 0, 14, 6014, 6016), + (6016, -1, -1, 5248, 5248, 12, 80, -1, 0, 0, 14, 6015, 7356), + (6017, -1, -1, 644, 644, 7, 73, -1, 0, 0, 14, 4988, 6018), + (6018, -1, -1, 644, 644, 9, 75, -1, 0, 0, 14, 6017, 6019), + (6019, -1, -1, 644, 644, 12, 77, -1, 0, 0, 14, 6018, 7359), + (6020, -1, -1, 6020, 6020, 2, 65, -1, 0, 0, 14, -1, 6021), + (6021, -1, -1, 6020, 6020, 2, 65, -1, 0, 0, 14, 6020, 6022), + (6022, -1, -1, 6020, 6020, 2, 65, -1, 0, 0, 14, 6021, 6045), + (6023, -1, -1, 119, 119, 12, 85, -1, 0, 0, 16, 7567, 6024), + (6024, -1, -1, 119, 119, 12, 85, -1, 0, 0, 16, 6023, 6025), + (6025, -1, -1, 119, 119, 12, 85, -1, 0, 0, 16, 6024, 12548), + (6026, -1, -1, 1004, 1004, 7, 81, -1, 0, 0, 16, -1, 6027), + (6027, -1, -1, 1004, 1004, 9, 81, -1, 0, 0, 16, 6026, 6028), + (6028, -1, -1, 1004, 1004, 12, 81, -1, 0, 0, 16, 6027, -1), + (6029, -1, -1, 1304, 1304, 7, 76, -1, 0, 0, 14, 1306, 6030), + (6030, -1, -1, 1304, 1304, 9, 78, -1, 0, 0, 14, 6029, 6031), + (6031, -1, -1, 1304, 1304, 12, 80, -1, 0, 0, 14, 6030, 7148), + (6032, -1, -1, 1604, 1604, 7, 69, -1, 0, 0, 14, 5294, 6033), + (6033, -1, -1, 1604, 1604, 9, 71, -1, 0, 0, 14, 6032, 6034), + (6034, -1, -1, 1604, 1604, 12, 73, -1, 0, 0, 14, 6033, 7131), + (6035, -1, -1, 846, 846, 7, 76, -1, 0, 0, 14, 4950, 6036), + (6036, -1, -1, 846, 846, 9, 78, -1, 0, 0, 14, 6035, 6037), + (6037, -1, -1, 846, 846, 12, 80, -1, 0, 0, 14, 6036, 7151), + (6038, 5022, 5022, 5022, 5022, 7, 76, 23988, 5, 600, 14, 5024, 6039), + (6039, 5022, 5022, 5022, 5022, 9, 78, 23989, 5, 600, 14, 6038, 6040), + (6040, 5022, 5022, 5022, 5022, 12, 80, 23990, 5, 600, 14, 6039, 15628), + (6041, 5028, -1, 5028, 5028, 9, 78, 12621, 4, 900, 14, 5028, -1), + (6042, -1, -1, 1543, 1543, 7, 76, -1, 0, 0, 14, 4953, 6043), + (6043, -1, -1, 1543, 1543, 9, 78, -1, 0, 0, 14, 6042, 6044), + (6044, -1, -1, 1543, 1543, 12, 80, -1, 0, 0, 14, 6043, 7134), + (6045, -1, -1, 6020, 6020, 2, 66, -1, 0, 0, 14, 6022, 6046), + (6046, -1, -1, 6020, 6020, 2, 68, -1, 0, 0, 14, 6045, 6047), + (6047, -1, -1, 6020, 6020, 2, 70, -1, 0, 0, 14, 6046, 6048), + (6048, -1, -1, 6020, 6020, 2, 71, -1, 0, 0, 14, 6047, 6049), + (6049, -1, -1, 6020, 6020, 2, 73, -1, 0, 0, 14, 6048, 6050), + (6050, -1, -1, 6020, 6020, 2, 75, -1, 0, 0, 14, 6049, 6057), + (6051, -1, -1, 6051, 6051, 3, 76, -1, 0, 0, 14, -1, 6052), + (6052, -1, -1, 6051, 6051, 3, 78, -1, 0, 0, 14, 6051, 6053), + (6053, -1, -1, 6051, 6051, 3, 80, -1, 0, 0, 14, 6052, 7601), + (6054, 4931, 4931, 4931, 4931, 7, 76, 12756, 4, 600, 14, 4933, 6055), + (6055, 4931, 4931, 4931, 4931, 7, 78, 12757, 4, 600, 14, 6054, 6056), + (6056, 4931, 4931, 4931, 4931, 7, 80, 12758, 4, 600, 14, 6055, 7291), + (6057, -1, -1, 6020, 6020, 2, 76, -1, 0, 0, 14, 6050, 6058), + (6058, -1, -1, 6020, 6020, 2, 78, -1, 0, 0, 14, 6057, 6059), + (6059, -1, -1, 6020, 6020, 2, 80, -1, 0, 0, 14, 6058, 7169), + (6060, -1, -1, 6540, 6540, 8, 76, -1, 0, 0, 14, -1, 6061), + (6061, -1, -1, 6540, 6540, 8, 76, -1, 0, 0, 14, 6060, 6470), + (6063, -1, -1, 589, 589, 7, 76, -1, 0, 0, 14, 5272, 6064), + (6064, -1, -1, 589, 589, 9, 78, -1, 0, 0, 14, 6063, 6065), + (6065, -1, -1, 589, 589, 12, 80, -1, 0, 0, 14, 6064, 7390), + (6066, -1, -1, 1313, 1313, 7, 76, -1, 0, 0, 14, 5031, 6067), + (6067, -1, -1, 1313, 1313, 7, 76, -1, 0, 0, 14, 6066, 6068), + (6068, -1, -1, 1313, 1313, 8, 77, -1, 0, 0, 14, 6067, 6069), + (6069, -1, -1, 1313, 1313, 9, 78, -1, 0, 0, 14, 6068, 6070), + (6070, -1, -1, 1313, 1313, 10, 79, -1, 0, 0, 14, 6069, 6071), + (6071, -1, -1, 1313, 1313, 12, 80, -1, 0, 0, 14, 6070, 7393), + (6072, -1, -1, 210, 210, 8, 77, -1, 0, 0, 14, 1318, 6073), + (6073, -1, -1, 210, 210, 9, 78, -1, 0, 0, 14, 6072, 6074), + (6074, -1, -1, 210, 210, 10, 79, -1, 0, 0, 14, 6073, 7399), + (6075, -1, -1, 895, 895, 7, 76, -1, 0, 0, 14, 899, 6076), + (6076, -1, -1, 895, 895, 8, 77, -1, 0, 0, 14, 6075, 6077), + (6077, -1, -1, 895, 895, 9, 78, -1, 0, 0, 14, 6076, 6078), + (6078, -1, -1, 895, 895, 10, 79, -1, 0, 0, 14, 6077, 6079), + (6079, -1, -1, 895, 895, 12, 80, -1, 0, 0, 14, 6078, 7402), + (6080, -1, -1, 683, 683, 5, 75, -1, 0, 0, 14, 5305, 6081), + (6081, -1, -1, 683, 683, 5, 75, -1, 0, 0, 14, 6080, 7604), + (6082, -1, -1, 6084, 6084, 5, 85, 0, 0, 0, 17, -1, 6083), + (6083, -1, -1, 6084, 6084, 5, 87, 0, 0, 0, 17, 6082, 6084), + (6084, -1, -1, 6084, 6084, 5, 89, 0, 0, 0, 17, 6083, 13366), + (6085, -1, -1, 6761, 6761, 10, 81, -1, 0, 0, 16, 6763, 6086), + (6086, -1, -1, 6761, 6761, 11, 83, -1, 0, 0, 16, 6085, 6087), + (6087, -1, -1, 6761, 6761, 12, 85, -1, 0, 0, 16, 6086, 10763), + (6088, -1, -1, 6088, 6088, 9, 85, 0, 0, 0, 17, -1, 6089), + (6089, -1, -1, 6088, 6088, 12, 87, 0, 0, 0, 17, 6088, 6090), + (6090, -1, -1, 6088, 6088, 15, 89, 0, 0, 0, 17, 6089, -1), + (6092, 5251, 5251, 5251, 5251, 7, 76, 12635, 13, 900, 14, 5253, 6093), + (6093, 5251, 5251, 5251, 5251, 9, 78, 12636, 13, 900, 14, 6092, 6094), + (6094, 5251, 5251, 5251, 5251, 12, 80, 12637, 13, 900, 14, 6093, 7472), + (6095, 513, 513, 513, 513, 7, 76, 12638, 4, 120, 14, 515, 6096), + (6096, 513, 513, 513, 513, 9, 78, 12639, 4, 120, 14, 6095, 6097), + (6097, 513, 513, 513, 513, 12, 80, 12640, 4, 120, 14, 6096, 7475), + (6098, 1327, 1327, 1327, 1327, 7, 76, 12641, 10, 900, 14, 5316, 6099), + (6099, 1327, 1327, 1327, 1327, 9, 78, 12642, 10, 900, 14, 6098, 6100), + (6100, 1327, 1327, 1327, 1327, 12, 80, 12643, 10, 900, 14, 6099, 7460), + (6101, 153, 153, 153, 153, 12, 80, 12644, 3, 2160, 14, 5068, 7468), + (6102, 146, 146, 146, 146, 8, 77, 12645, 2, 180, 14, 5069, 7466), + (6103, 528, 528, 528, 528, 7, 76, 12646, 5, 720, 14, 901, 6104), + (6104, 528, 528, 528, 528, 9, 78, 12647, 5, 720, 14, 6103, 6105), + (6105, 528, 528, 528, 528, 12, 80, 12648, 5, 720, 14, 6104, 7469), + (6106, 6106, 6106, 6106, 6106, 4, 67, 21965, 13, 4320, 16, -1, 6107), + (6107, 6106, 6106, 6106, 6106, 5, 68, 21966, 13, 4320, 16, 6106, 6108), + (6108, 6106, 6106, 6106, 6106, 6, 69, 21967, 13, 4320, 16, 6107, 6109), + (6109, 6106, 6106, 6106, 6106, 7, 77, 21968, 13, 4320, 16, 6108, 6110), + (6110, 6106, 6106, 6106, 6106, 8, 78, 21969, 13, 4320, 16, 6109, 6111), + (6111, 6106, 6106, 6106, 6106, 9, 79, 21970, 13, 4320, 16, 6110, -1), + (6112, -1, -1, 6112, 6112, 5, 85, -1, 0, 0, 17, -1, 12966), + (6113, -1, -1, 6113, 6113, 9, 85, 0, 0, 0, 17, -1, 6114), + (6114, -1, -1, 6113, 6113, 12, 87, 0, 0, 0, 17, 6113, 6115), + (6115, -1, -1, 6113, 6113, 15, 89, 0, 0, 0, 17, 6114, -1), + (6119, -1, -1, 6119, 6119, 6, 76, -1, 0, 0, 14, -1, 6120), + (6120, -1, -1, 6119, 6119, 6, 77, -1, 0, 0, 14, 6119, 6121), + (6121, -1, -1, 6119, 6119, 6, 78, -1, 0, 0, 14, 6120, 6122), + (6122, -1, -1, 6119, 6119, 6, 79, -1, 0, 0, 14, 6121, 6123), + (6123, -1, -1, 6119, 6119, 6, 80, -1, 0, 0, 14, 6122, 7526), + (6124, -1, -1, 5263, 5263, 3, 71, -1, 0, 0, 12, -1, 6125), + (6125, -1, -1, 5263, 5263, 6, 73, -1, 0, 0, 12, 6124, 6126), + (6126, -1, -1, 5263, 5263, 9, 75, -1, 0, 0, 12, 6125, 6127), + (6127, -1, -1, 5263, 5263, 10, 76, -1, 0, 0, 14, 6126, 6128), + (6128, -1, -1, 5263, 5263, 11, 78, -1, 0, 0, 14, 6127, 6129), + (6129, -1, -1, 5263, 5263, 12, 80, -1, 0, 0, 14, 6128, 12463), + (6130, -1, -1, 586, 586, 7, 76, -1, 0, 0, 14, 588, 6131), + (6131, -1, -1, 586, 586, 7, 76, -1, 0, 0, 14, 6130, 6132), + (6132, -1, -1, 586, 586, 7, 76, -1, 0, 0, 14, 6131, -1), + (6133, 1351, 1351, 1351, 1351, 8, 77, 12649, 5, 30, 14, 1351, 7109), + (6134, 4849, 4849, 4849, 4849, 7, 76, 12650, 7, 1800, 14, 4849, 7110), + (6135, 54006, 54006, 54006, 54006, 7, 76, 12651, 18, 180, 14, -1, 7111), + (6136, -1, -1, 6136, 6136, 7, 76, -1, 0, 0, 10, -1, 6137), + (6149, 921, 921, 921, 921, 9, 79, 12652, 8, 60, 14, 5280, 7245), + (6150, 922, 922, 922, 922, 9, 78, 12653, 8, 60, 14, 5281, 7236), + (6151, 923, 923, 923, 923, 9, 77, 12654, 8, 60, 14, 5282, 7235), + (6152, 1334, 1334, 1334, 1334, 9, 78, 12655, 11, 4320, 14, 1336, 6153), + (6153, 1334, 1334, 1334, 1334, 10, 79, 12656, 11, 4320, 14, 6152, 6154), + (6154, 1334, 1334, 1334, 1334, 12, 80, 12657, 11, 4320, 14, 6153, 7239), + (6155, 4944, -1, 4944, 4944, 7, 76, 12658, 0, 1, 14, 4946, 6156), + (6156, 4944, -1, 4944, 4944, 9, 78, 12659, 0, 1, 14, 6155, 6157), + (6157, 4944, -1, 4944, 4944, 12, 80, 12660, 0, 1, 14, 6156, 7229), + (6158, 1337, 1337, 1337, 1337, 8, 77, 12661, 13, 4320, 14, 1339, 6159), + (6159, 1337, 1337, 1337, 1337, 9, 78, 12662, 13, 4320, 14, 6158, 6160), + (6160, 1337, 1337, 1337, 1337, 10, 79, 12663, 13, 4320, 14, 6159, 14338), + (6161, 1478, -1, 1478, 1478, 9, 78, 12664, 0, 1, 14, 1480, 6162), + (6162, 1478, -1, 1478, 1478, 10, 79, 12665, 0, 1, 14, 6161, 6163), + (6163, 1478, -1, 1478, 1478, 12, 80, 12666, 0, 1, 14, 6162, 7242), + (6200, 6533, 6533, 6533, 6533, 10, 79, 12768, 15, 600, 14, -1, 7428), + (6201, 6534, 6534, 6534, 6534, 9, 78, 12769, 16, 900, 14, -1, 7429), + (6202, -1, -1, 6535, 6535, 5, 70, -1, 0, 0, 14, -1, 6203), + (6203, -1, -1, 6535, 6535, 5, 70, -1, 0, 0, 14, 6202, 6204), + (6204, -1, -1, 6535, 6535, 5, 70, -1, 0, 0, 14, 6203, -1), + (6205, 6536, 6536, 6536, 6536, 7, 76, 12712, 39, 5, 14, -1, -1), + (6206, 6537, 6537, 6537, 6537, 7, 76, 12770, 30, 900, 14, -1, 6207), + (6207, 6537, 6537, 6537, 6537, 8, 77, 12771, 30, 900, 14, 6206, 6208), + (6208, 6537, 6537, 6537, 6537, 9, 78, 12772, 30, 900, 14, 6207, 7606), + (6209, -1, -1, 6538, 6538, 7, 76, -1, 0, 0, 14, -1, 6210), + (6210, -1, -1, 6538, 6538, 9, 78, -1, 0, 0, 14, 6209, 6211), + (6211, -1, -1, 6538, 6538, 12, 80, -1, 0, 0, 14, 6210, 7478), + (6212, 6539, 6539, 6539, 6539, 6, 71, 12776, 18, 1800, 14, -1, 6213), + (6213, 6539, 6539, 6539, 6539, 6, 74, 12777, 18, 1800, 14, 6212, 6214), + (6214, 6539, 6539, 6539, 6539, 6, 77, 12778, 18, 1800, 14, 6213, 7609), + (6215, -1, -1, 6540, 6540, 8, 71, -1, 0, 0, 14, -1, 6216), + (6216, -1, -1, 6540, 6540, 8, 72, -1, 0, 0, 14, 6215, 6217), + (6217, -1, -1, 6540, 6540, 8, 73, -1, 0, 0, 14, 6216, 6300), + (6218, 6218, 6218, 6218, 6218, 7, 76, 12782, 0, 1, 14, -1, 7488), + (6219, 6542, 6542, 6542, 6542, 7, 76, 12783, 18, 1800, 14, -1, 6220), + (6220, 6542, 6542, 6542, 6542, 9, 78, 12784, 18, 1800, 14, 6219, 6221), + (6221, 6542, 6542, 6542, 6542, 12, 80, 12785, 18, 1800, 14, 6220, -1), + (6222, 6543, 6543, 6543, 6543, 9, 72, 13143, 18, 25, 14, -1, -1), + (6223, -1, -1, 962, 962, 5, 76, -1, 0, 0, 14, 966, 6224), + (6224, -1, -1, 962, 962, 5, 77, -1, 0, 0, 14, 6223, 6225), + (6225, -1, -1, 962, 962, 5, 78, -1, 0, 0, 14, 6224, 6226), + (6226, -1, -1, 962, 962, 5, 79, -1, 0, 0, 14, 6225, 6227), + (6227, -1, -1, 962, 962, 5, 80, -1, 0, 0, 14, 6226, 10361), + (6228, -1, -1, 6545, 6545, 2, 70, -1, 0, 0, 14, -1, 6229), + (6229, -1, -1, 6545, 6545, 2, 70, -1, 0, 0, 14, 6228, 6230), + (6230, -1, -1, 6545, 6545, 2, 70, -1, 0, 0, 14, 6229, 6231), + (6231, -1, -1, 6545, 6545, 2, 70, -1, 0, 0, 14, 6230, -1), + (6232, 6232, 6232, 6232, 6232, 12, 80, 14413, 18, 900, 14, -1, 7421), + (6233, -1, -1, 477, 477, 2, 70, -1, 0, 0, 14, 479, 6234), + (6234, -1, -1, 477, 477, 2, 71, -1, 0, 0, 14, 6233, 6235), + (6235, -1, -1, 477, 477, 2, 72, -1, 0, 0, 14, 6234, 16094), + (6236, -1, -1, 6548, 6548, 6, 73, -1, 0, 0, 14, -1, 6237), + (6237, -1, -1, 6548, 6548, 6, 75, -1, 0, 0, 14, 6236, 6238), + (6238, -1, -1, 6548, 6548, 8, 77, -1, 0, 0, 14, 6237, 12929), + (6240, -1, -1, 767, 767, 3, 65, -1, 0, 0, 14, -1, 6241), + (6241, -1, -1, 767, 767, 6, 65, -1, 0, 0, 14, 6240, 6242), + (6242, -1, -1, 767, 767, 9, 65, -1, 0, 0, 14, 6241, 6243), + (6243, -1, -1, 767, 767, 3, 67, -1, 0, 0, 14, 6242, 6244), + (6244, -1, -1, 767, 767, 6, 68, -1, 0, 0, 14, 6243, 6245), + (6245, -1, -1, 767, 767, 9, 69, -1, 0, 0, 14, 6244, 12426), + (6249, 6552, 6552, 6552, 6552, 5, 70, -1, 0, 0, 14, -1, 6250), + (6250, 6552, 6552, 6552, 6552, 6, 72, -1, 0, 0, 14, 6249, 6251), + (6251, 6552, 6552, 6552, 6552, 6, 74, -1, 0, 0, 14, 6250, 6252), + (6252, 6552, 6552, 6552, 6552, 7, 76, -1, 0, 0, 14, 6251, 6253), + (6253, 6552, 6552, 6552, 6552, 9, 78, -1, 0, 0, 14, 6252, 7279), + (6254, 616, 616, 616, 616, 6, 73, 12765, 7, 900, 14, 1250, 6255), + (6255, 616, 616, 616, 616, 7, 76, 12766, 7, 900, 14, 6254, 6256), + (6256, 616, 616, 616, 616, 10, 79, 12767, 7, 900, 14, 6255, 7257), + (6257, -1, -1, 86, 86, 2, 55, -1, 0, 0, 14, -1, 6258), + (6258, -1, -1, 86, 86, 4, 55, -1, 0, 0, 14, 6257, 6259), + (6259, -1, -1, 86, 86, 6, 55, -1, 0, 0, 14, 6258, 8223), + (6260, -1, -1, 495, 495, 6, 73, -1, 0, 0, 14, 497, 6261), + (6261, -1, -1, 495, 495, 7, 76, -1, 0, 0, 14, 6260, 6262), + (6262, -1, -1, 495, 495, 10, 79, -1, 0, 0, 14, 6261, 10666), + (6266, -1, -1, 6557, 6557, 6, 73, -1, 0, 0, 14, -1, 6267), + (6267, -1, -1, 6557, 6557, 7, 76, -1, 0, 0, 14, 6266, 6268), + (6268, -1, -1, 6557, 6557, 10, 79, -1, 0, 0, 14, 6267, -1), + (6269, -1, -1, 6558, 6558, 6, 73, -1, 0, 0, 14, -1, 6270), + (6270, -1, -1, 6558, 6558, 7, 76, -1, 0, 0, 14, 6269, 6271), + (6271, -1, -1, 6558, 6558, 10, 79, -1, 0, 0, 14, 6270, -1), + (6272, -1, -1, 6559, 6559, 6, 73, -1, 0, 0, 14, -1, 6273), + (6273, -1, -1, 6559, 6559, 7, 75, -1, 0, 0, 14, 6272, 6274), + (6274, -1, -1, 6559, 6559, 10, 77, -1, 0, 0, 14, 6273, 7137), + (6275, -1, -1, 6560, 6560, 6, 73, -1, 0, 0, 14, -1, 6276), + (6276, -1, -1, 6560, 6560, 7, 76, -1, 0, 0, 14, 6275, 6277), + (6277, -1, -1, 6560, 6560, 10, 79, -1, 0, 0, 14, 6276, 16266), + (6278, 6561, 6561, 6561, 6561, 7, 76, 12795, 32, 30, 14, -1, 6279), + (6279, 6561, 6561, 6561, 6561, 7, 76, 12796, 32, 30, 14, 6278, 6280), + (6280, 6561, 6561, 6561, 6561, 7, 76, 12797, 32, 30, 14, 6279, 7422), + (6281, 6563, 6563, 6563, 6563, 9, 78, 13144, 36, 8, 14, -1, 12995), + (6282, 6562, 6562, 6562, 6562, 6, 72, 12798, 39, 1, 14, -1, -1), + (6283, -1, -1, 6564, 6564, 6, 73, -1, 0, 0, 14, -1, 6284), + (6284, -1, -1, 6564, 6564, 7, 76, -1, 0, 0, 14, 6283, 6285), + (6285, -1, -1, 6564, 6564, 10, 79, -1, 0, 0, 14, 6284, 7112), + (6286, 6565, 6565, 6565, 6565, 7, 76, 12802, 17, 45, 14, -1, 7115), + (6287, -1, -1, 6566, 6566, 6, 73, -1, 0, 0, 14, -1, 6288), + (6288, -1, -1, 6566, 6566, 7, 76, -1, 0, 0, 14, 6287, 6289), + (6289, -1, -1, 6566, 6566, 10, 79, -1, 0, 0, 14, 6288, -1), + (6290, 6290, 6290, 6290, 6290, 6, 71, 12803, 0, 1, 14, -1, 6291), + (6291, 6290, 6290, 6290, 6290, 6, 73, 12804, 0, 1, 14, 6290, 6292), + (6292, 6290, 6290, 6290, 6290, 6, 75, 12805, 0, 1, 14, 6291, 6293), + (6293, 6290, 6290, 6290, 6290, 7, 76, 12806, 0, 1, 14, 6292, 6294), + (6294, 6290, 6290, 6290, 6290, 9, 78, 12807, 0, 1, 14, 6293, 6295), + (6295, 6290, 6290, 6290, 6290, 12, 80, 12808, 0, 1, 14, 6294, 7223), + (6296, 619, 619, 619, 619, 6, 73, 12759, 6, 900, 14, 722, 6297), + (6297, 619, 619, 619, 619, 6, 73, 12760, 6, 900, 14, 6296, 6298), + (6298, 619, 619, 619, 619, 6, 73, 12761, 6, 900, 14, 6297, 7226), + (6299, 6299, 6299, 6299, 6299, 9, 65, 12786, 18, 12, 14, -1, -1), + (6300, -1, -1, 6540, 6540, 8, 74, -1, 0, 0, 14, 6217, 6301), + (6301, -1, -1, 6540, 6540, 8, 75, -1, 0, 0, 14, 6300, 6472), + (6302, -1, -1, 6302, 6302, 5, 81, 0, 0, 0, 16, -1, 6303), + (6303, -1, -1, 6302, 6302, 5, 83, 0, 0, 0, 16, 6302, 6304), + (6304, -1, -1, 6302, 6302, 5, 85, 0, 0, 0, 16, 6303, 11011), + (6307, 1358, 1358, 1358, 1358, 6, 71, 13168, 3, 60, 14, 1360, 6308), + (6308, 1358, 1358, 1358, 1358, 6, 73, 13169, 3, 60, 14, 6307, 6309), + (6309, 1358, 1358, 1358, 1358, 6, 75, 13170, 3, 60, 14, 6308, 6310), + (6310, 1358, 1358, 1358, 1358, 6, 76, 13171, 3, 60, 14, 6309, 6311), + (6311, 1358, 1358, 1358, 1358, 6, 78, 13172, 3, 60, 14, 6310, 6312), + (6312, 1358, 1358, 1358, 1358, 6, 80, 13173, 3, 60, 14, 6311, 7157), + (6313, 1352, 1352, 1352, 1352, 6, 71, 13174, 3, 60, 14, 1354, 6314), + (6314, 1352, 1352, 1352, 1352, 6, 73, 13175, 3, 60, 14, 6313, 6315), + (6315, 1352, 1352, 1352, 1352, 6, 75, 13177, 3, 60, 14, 6314, 6316), + (6316, 1352, 1352, 1352, 1352, 6, 76, 13178, 3, 60, 14, 6315, 6317), + (6317, 1352, 1352, 1352, 1352, 6, 78, 13179, 3, 60, 14, 6316, 6318), + (6318, 1352, 1352, 1352, 1352, 6, 80, 13180, 3, 60, 14, 6317, 7154), + (6319, -1, -1, 501, 501, 6, 73, -1, 0, 0, 14, 503, 6320), + (6320, -1, -1, 501, 501, 6, 75, -1, 0, 0, 14, 6319, 6321), + (6321, -1, -1, 501, 501, 6, 77, -1, 0, 0, 14, 6320, 6528), + (6322, -1, -1, 6322, 6322, 6, 73, -1, 0, 0, 14, -1, 6323), + (6323, -1, -1, 6322, 6322, 6, 75, -1, 0, 0, 14, 6322, 6324), + (6324, -1, -1, 6322, 6322, 6, 77, -1, 0, 0, 14, 6323, -1), + (6325, 6325, 6325, 6325, 6325, 7, 73, 13213, 18, 600, 14, -1, 6326), + (6326, 6325, 6325, 6325, 6325, 7, 75, 13214, 18, 600, 14, 6325, 6327), + (6327, 6325, 6325, 6325, 6325, 7, 77, 13215, 18, 600, 14, 6326, 6361), + (6328, 6328, 6328, 6328, 6328, 7, 74, 13204, 10, 600, 14, -1, 6329), + (6329, 6328, 6328, 6328, 6328, 7, 76, 13205, 10, 600, 14, 6328, 6330), + (6330, 6328, 6328, 6328, 6328, 7, 78, 13212, 10, 600, 14, 6329, 7143), + (6331, -1, -1, 878, 878, 7, 76, -1, 0, 0, 14, 4959, 6332), + (6332, -1, -1, 878, 878, 7, 78, -1, 0, 0, 14, 6331, 7146), + (6333, 6333, 6333, 6333, 6333, 9, 59, 13167, 3, 600, 14, -1, 7266), + (6334, -1, -1, 6334, 6334, 6, 73, -1, 0, 0, 14, -1, 6335), + (6335, -1, -1, 6334, 6334, 6, 75, -1, 0, 0, 14, 6334, 6336), + (6336, -1, -1, 6334, 6334, 6, 77, -1, 0, 0, 14, 6335, -1), + (6337, -1, -1, 6337, 6337, 6, 74, -1, 0, 0, 14, -1, 6338), + (6338, -1, -1, 6337, 6337, 6, 76, -1, 0, 0, 14, 6337, 6339), + (6339, -1, -1, 6337, 6337, 6, 78, -1, 0, 0, 14, 6338, 7448), + (6340, -1, -1, 6340, 6340, 6, 74, -1, 0, 0, 14, -1, 6341), + (6341, -1, -1, 6340, 6340, 6, 76, -1, 0, 0, 14, 6340, 6342), + (6342, -1, -1, 6340, 6340, 6, 78, -1, 0, 0, 14, 6341, 7451), + (6343, -1, -1, 6343, 6343, 6, 74, -1, 0, 0, 14, -1, 6344), + (6344, -1, -1, 6343, 6343, 6, 76, -1, 0, 0, 14, 6343, 6345), + (6345, -1, -1, 6343, 6343, 6, 78, -1, 0, 0, 14, 6344, 7166), + (6346, -1, -1, 6346, 6346, 6, 74, -1, 0, 0, 14, -1, 6347), + (6347, -1, -1, 6346, 6346, 6, 76, -1, 0, 0, 14, 6346, 6348), + (6348, -1, -1, 6346, 6346, 6, 78, -1, 0, 0, 14, 6347, 7615), + (6349, -1, -1, 6349, 6349, 6, 74, -1, 0, 0, 14, -1, 6350), + (6350, -1, -1, 6349, 6349, 6, 76, -1, 0, 0, 14, 6349, 6351), + (6351, -1, -1, 6349, 6349, 6, 78, -1, 0, 0, 14, 6350, 7618), + (6352, 4894, 4894, 4894, 4894, 6, 76, 13181, 7, 2160, 14, 4896, 6353), + (6353, 4894, 4894, 4894, 4894, 6, 77, 13182, 7, 2160, 14, 6352, 6354), + (6354, 4894, 4894, 4894, 4894, 6, 78, 13183, 7, 2160, 14, 6353, 7288), + (6355, -1, -1, 6355, 6355, 6, 73, -1, 0, 0, 14, -1, 6356), + (6356, -1, -1, 6355, 6355, 6, 74, -1, 0, 0, 14, 6355, 6357), + (6357, -1, -1, 6355, 6355, 6, 75, -1, 0, 0, 14, 6356, 6358), + (6358, -1, -1, 6355, 6355, 6, 76, -1, 0, 0, 14, 6357, 6359), + (6359, -1, -1, 6355, 6355, 6, 77, -1, 0, 0, 14, 6358, 6360), + (6360, -1, -1, 6355, 6355, 6, 80, -1, 0, 0, 16, 6359, 14101), + (6361, 6325, 6325, 6325, 6325, 7, 81, 16861, 18, 600, 16, 6327, 12633), + (6362, -1, -1, 6362, 6362, 5, 77, 0, 0, 0, 16, -1, 6363), + (6363, -1, -1, 6362, 6362, 5, 79, 0, 0, 0, 16, 6362, 6364), + (6364, -1, -1, 6362, 6362, 5, 81, 0, 0, 0, 16, 6363, 6365), + (6365, -1, -1, 6362, 6362, 5, 83, 0, 0, 0, 16, 6364, 6366), + (6366, -1, -1, 6362, 6362, 5, 85, 0, 0, 0, 16, 6365, 16327), + (6370, 6370, 6370, 6370, 6370, 6, 76, 13188, 7, 600, 14, -1, 6371), + (6371, 6370, 6370, 6370, 6370, 6, 77, 13189, 7, 600, 14, 6370, 6372), + (6372, 6370, 6370, 6370, 6370, 6, 78, 13190, 7, 600, 14, 6371, 7350), + (6375, -1, -1, 6375, 6375, 6, 76, -1, 0, 0, 14, -1, 6376), + (6376, -1, -1, 6375, 6375, 6, 77, -1, 0, 0, 14, 6375, 6377), + (6377, -1, -1, 6375, 6375, 6, 78, -1, 0, 0, 14, 6376, 7644), + (6378, 209, 209, 209, 1272, 6, 76, 13501, 12, 5, 14, 1272, -1), + (6379, 6379, 6379, 6379, 6379, 6, 60, 13500, 37, 5, 14, -1, -1), + (6380, 6380, 6380, 6380, 6380, 6, 78, 13209, 39, 120, 14, -1, 6381), + (6381, 6380, 6380, 6380, 6380, 6, 79, 13210, 39, 120, 14, 6380, 6382), + (6382, 6380, 6380, 6380, 6380, 6, 80, 13211, 39, 120, 14, 6381, 7497), + (6383, -1, -1, 6383, 6383, 3, 70, -1, 0, 0, 14, -1, 6384), + (6384, -1, -1, 6383, 6383, 6, 70, -1, 0, 0, 14, 6383, 6385), + (6385, -1, -1, 6383, 6383, 9, 70, -1, 0, 0, 14, 6384, 10607), + (6386, -1, -1, 6386, 6386, 7, 72, -1, 0, 0, 14, -1, 6387), + (6387, -1, -1, 6386, 6386, 7, 74, -1, 0, 0, 14, 6386, 6388), + (6388, -1, -1, 6386, 6386, 7, 76, -1, 0, 0, 14, 6387, 6389), + (6389, -1, -1, 6386, 6386, 7, 78, -1, 0, 0, 14, 6388, 13521), + (6390, -1, -1, 65, 661, 3, 76, -1, 0, 0, 14, 4697, 6391), + (6391, -1, -1, 65, 661, 3, 77, -1, 0, 0, 14, 6390, 6392), + (6392, -1, -1, 65, 661, 3, 78, -1, 0, 0, 14, 6391, 6393), + (6393, -1, -1, 65, 661, 3, 79, -1, 0, 0, 14, 6392, 6394), + (6394, -1, -1, 65, 661, 3, 80, -1, 0, 0, 14, 6393, 7534), + (6395, -1, -1, 6395, 6395, 7, 76, -1, 0, 0, 14, -1, 6396), + (6396, -1, -1, 6395, 6395, 7, 77, -1, 0, 0, 14, 6395, 6397), + (6397, -1, -1, 6395, 6395, 7, 78, -1, 0, 0, 14, 6396, 7336), + (6398, 516, 516, 516, 516, 6, 72, 13198, 5, 480, 14, 516, 7237), + (6400, 1110, 1110, 1110, 1110, 6, 73, 13192, 3, 2160, 14, 1112, 6401), + (6401, 1110, 1110, 1110, 1110, 6, 75, 13193, 3, 2160, 14, 6400, 6402), + (6402, 1110, 1110, 1110, 1110, 6, 76, 13194, 3, 2160, 14, 6401, 7445), + (6403, -1, -1, 1107, 1107, 7, 76, -1, 0, 0, 14, 5288, 6404), + (6404, -1, -1, 1107, 1107, 9, 78, -1, 0, 0, 14, 6403, 6405), + (6405, -1, -1, 1107, 1107, 12, 80, -1, 0, 0, 14, 6404, 12432), + (6406, -1, -1, 5085, 5085, 6, 76, -1, 0, 0, 14, 5087, 6407), + (6407, -1, -1, 5085, 5085, 6, 78, -1, 0, 0, 14, 6406, 6408), + (6408, -1, -1, 5085, 5085, 6, 80, -1, 0, 0, 14, 6407, 7384), + (6409, -1, -1, 6540, 6540, 8, 71, -1, 0, 0, 14, -1, 6410), + (6410, -1, -1, 6540, 6540, 8, 72, -1, 0, 0, 14, 6409, 6411), + (6411, -1, -1, 6540, 6540, 8, 73, -1, 0, 0, 14, 6410, 6412), + (6412, -1, -1, 6540, 6540, 8, 74, -1, 0, 0, 14, 6411, 6413), + (6413, -1, -1, 6540, 6540, 8, 75, -1, 0, 0, 14, 6412, 6414), + (6414, -1, -1, 6540, 6540, 8, 76, -1, 0, 0, 14, 6413, 6415), + (6415, -1, -1, 6540, 6540, 8, 77, -1, 0, 0, 14, 6414, 6416), + (6416, -1, -1, 6540, 6540, 8, 78, -1, 0, 0, 14, 6415, 6417), + (6417, -1, -1, 6540, 6540, 8, 79, -1, 0, 0, 14, 6416, 6418), + (6418, -1, -1, 6540, 6540, 8, 80, -1, 0, 0, 14, 6417, 6474), + (6419, -1, -1, 6540, 6540, 8, 71, -1, 0, 0, 14, -1, 6420), + (6420, -1, -1, 6540, 6540, 8, 72, -1, 0, 0, 14, 6419, 6421), + (6421, -1, -1, 6540, 6540, 8, 73, -1, 0, 0, 14, 6420, 6476), + (6422, -1, -1, 6422, 6422, 3, 61, -1, 0, 0, 14, -1, 6423), + (6423, -1, -1, 6422, 6422, 3, 63, -1, 0, 0, 14, 6422, 6424), + (6424, -1, -1, 6422, 6422, 3, 65, -1, 0, 0, 14, 6423, -1), + (6425, 5007, 5007, 5007, 5007, 9, 76, 13509, 8, 2160, 14, 5009, 6426), + (6426, 5007, 5007, 5007, 5007, 9, 78, 13510, 8, 2160, 14, 6425, 6427), + (6427, 5007, 5007, 5007, 5007, 9, 80, 13511, 8, 2160, 14, 6426, 7341), + (6428, -1, -1, 1287, 1287, 3, 67, -1, 0, 0, 14, -1, 6429), + (6429, -1, -1, 1287, 1287, 6, 68, -1, 0, 0, 14, 6428, 6430), + (6430, -1, -1, 1287, 1287, 9, 69, -1, 0, 0, 14, 6429, 12472), + (6431, -1, -1, 1056, 1056, 5, 76, -1, 0, 0, 14, 1060, 6432), + (6432, -1, -1, 1056, 1056, 5, 77, -1, 0, 0, 14, 6431, 6433), + (6433, -1, -1, 1056, 1056, 5, 78, -1, 0, 0, 14, 6432, 6434), + (6434, -1, -1, 1056, 1056, 5, 79, -1, 0, 0, 14, 6433, 6435), + (6435, -1, -1, 1056, 1056, 5, 80, -1, 0, 0, 14, 6434, 7521), + (6436, -1, -1, 6436, 6436, 6, 73, -1, 0, 0, 14, -1, 6437), + (6437, -1, -1, 6436, 6436, 6, 75, -1, 0, 0, 14, 6436, 6438), + (6438, -1, -1, 6436, 6436, 8, 77, -1, 0, 0, 14, 6437, 7313), + (6439, -1, -1, 468, 468, 2, 67, -1, 0, 0, 14, 470, 6440), + (6440, -1, -1, 468, 468, 2, 69, -1, 0, 0, 14, 6439, 7316), + (6441, -1, -1, 1546, 1546, 5, 76, -1, 0, 0, 14, 4831, 12673), + (6442, -1, -1, 1471, 1471, 6, 76, -1, 0, 0, 14, 1475, 6443), + (6443, -1, -1, 1471, 1471, 6, 77, -1, 0, 0, 14, 6442, -1), + (6445, -1, -1, 6445, 6445, 2, 62, -1, 0, 0, 14, -1, 6446), + (6446, -1, -1, 6445, 6445, 2, 64, -1, 0, 0, 14, 6445, 6447), + (6447, -1, -1, 6445, 6445, 2, 66, -1, 0, 0, 14, 6446, -1), + (6448, 5109, 5109, 5109, 5109, 9, 77, 13515, 0, 1, 14, 5109, 7467), + (6449, 1520, 1520, 1520, 1520, 9, 70, 13516, 11, 900, 14, 1522, 6450), + (6450, 1520, 1520, 1520, 1520, 9, 70, 13517, 11, 900, 14, 6449, 6451), + (6451, 1520, 1520, 1520, 1520, 9, 70, 13518, 11, 900, 14, 6450, 7463), + (6452, -1, -1, 6452, 6452, 2, 71, -1, 0, 0, 14, -1, 6453), + (6453, -1, -1, 6452, 6452, 2, 72, -1, 0, 0, 14, 6452, 6454), + (6454, -1, -1, 6452, 6452, 2, 73, -1, 0, 0, 14, 6453, -1), + (6455, 6455, 6455, 6455, 6455, 2, 72, 14750, 36, 30, 14, -1, 6456), + (6456, 6455, 6455, 6455, 6455, 2, 74, 14751, 36, 30, 14, 6455, 6457), + (6457, 6455, 6455, 6455, 6455, 2, 76, 14752, 36, 30, 14, 6456, -1), + (6458, -1, -1, 6458, 6458, 3, 78, -1, 0, 0, 14, -1, 6459), + (6459, -1, -1, 6458, 6458, 3, 78, -1, 0, 0, 14, 6458, 6460), + (6460, -1, -1, 6458, 6458, 3, 78, -1, 0, 0, 14, 6459, -1), + (6461, -1, -1, 6461, 6461, 3, 78, -1, 0, 0, 14, -1, 6462), + (6462, -1, -1, 6461, 6461, 3, 78, -1, 0, 0, 14, 6461, 6463), + (6463, -1, -1, 6461, 6461, 3, 78, -1, 0, 0, 14, 6462, -1), + (6464, 967, 967, 967, 967, 6, 76, 13897, 10, 1800, 14, 969, 6465), + (6465, 967, 967, 967, 967, 6, 77, 13898, 10, 1800, 14, 6464, 6466), + (6466, 967, 967, 967, 967, 6, 78, 13899, 10, 1800, 14, 6465, 7217), + (6467, -1, -1, 6467, 6467, 3, 61, -1, 0, 0, 15, -1, 6468), + (6468, -1, -1, 6467, 6467, 3, 63, -1, 0, 0, 15, 6467, 6469), + (6469, -1, -1, 6467, 6467, 3, 65, -1, 0, 0, 15, 6468, -1), + (6470, -1, -1, 6540, 6540, 8, 76, -1, 0, 0, 15, 6061, 6471), + (6471, -1, -1, 6540, 6540, 8, 81, -1, 0, 0, 15, 6470, 12487), + (6472, -1, -1, 6540, 6540, 8, 81, -1, 0, 0, 15, 6301, 6473), + (6473, -1, -1, 6540, 6540, 8, 83, -1, 0, 0, 15, 6472, 12481), + (6474, -1, -1, 6540, 6540, 8, 81, -1, 0, 0, 15, 6418, 6475), + (6475, -1, -1, 6540, 6540, 8, 83, -1, 0, 0, 15, 6474, 12483), + (6476, -1, -1, 6540, 6540, 8, 81, -1, 0, 0, 15, 6421, 6477), + (6477, -1, -1, 6540, 6540, 8, 83, -1, 0, 0, 15, 6476, 12485), + (6478, 0, 0, 6478, 6478, 3, 81, -1, 0, 0, 16, -1, 6479), + (6479, 0, 0, 6478, 6478, 5, 83, -1, 0, 0, 16, 6478, 6480), + (6480, 0, 0, 6478, 6478, 7, 85, -1, 0, 0, 16, 6479, -1), + (6481, 0, 0, 6481, 6481, 5, 85, -1, 0, 0, 16, -1, 6482), + (6482, 0, 0, 6481, 6481, 7, 85, -1, 0, 0, 16, 6481, 6483), + (6483, 0, 0, 6481, 6481, 9, 85, -1, 0, 0, 16, 6482, 15314), + (6484, -1, -1, 7940, 7940, 5, 85, -1, 0, 0, 16, 10032, 6485), + (6485, -1, -1, 7940, 7940, 7, 85, -1, 0, 0, 16, 6484, 6486), + (6486, -1, -1, 7940, 7940, 9, 85, -1, 0, 0, 16, 6485, 15320), + (6487, 1383, 1383, 1383, 1383, 12, 85, 21812, 6, 300, 16, 10014, 14221), + (6488, 6488, 6488, 6488, 6488, 12, 85, 21806, 32, 900, 16, -1, 13383), + (6489, -1, -1, 6489, 6489, 5, 81, -1, 0, 0, 16, -1, 6490), + (6490, -1, -1, 6489, 6489, 7, 83, -1, 0, 0, 16, 6489, 6491), + (6491, -1, -1, 6489, 6489, 9, 85, -1, 0, 0, 16, 6490, 17239), + (6492, 6492, 6492, 6492, 6492, 7, 75, 21692, 52, 720, 16, -1, 6493), + (6493, 6492, 6492, 6492, 6492, 7, 77, 21693, 52, 720, 16, 6492, 6494), + (6494, 6492, 6492, 6492, 6492, 7, 79, 21694, 52, 720, 16, 6493, 6495), + (6495, 6492, 6492, 6492, 6492, 7, 81, 21695, 52, 720, 16, 6494, 6496), + (6496, 6492, 6492, 6492, 6492, 7, 83, 21696, 52, 720, 16, 6495, 6497), + (6497, 6492, 6492, 6492, 6492, 7, 85, 21697, 52, 720, 16, 6496, 10679), + (6499, 6499, 6499, 6499, 6499, 3, 75, 13512, 13, 60, 14, -1, -1), + (6500, -1, -1, 4761, 4761, 7, 76, -1, 0, 0, 14, 4763, 6501), + (6501, -1, -1, 4761, 4761, 7, 78, -1, 0, 0, 14, 6500, 6502), + (6502, -1, -1, 4761, 4761, 7, 80, -1, 0, 0, 14, 6501, -1), + (6503, -1, -1, 6503, 6503, 6, 72, -1, 0, 0, 14, -1, 6504), + (6504, -1, -1, 6503, 6503, 6, 72, -1, 0, 0, 14, 6503, 6505), + (6505, -1, -1, 6503, 6503, 6, 72, -1, 0, 0, 14, 6504, 6506), + (6506, -1, -1, 6503, 6503, 6, 72, -1, 0, 0, 14, 6505, -1), + (6508, 6508, 6508, 6508, 6508, 7, 74, 13195, 38, 600, 14, -1, 6509), + (6509, 6508, 6508, 6508, 6508, 7, 76, 13196, 38, 600, 14, 6508, 6510), + (6510, 6508, 6508, 6508, 6508, 7, 78, 13197, 38, 600, 14, 6509, 7387), + (6511, -1, -1, 6511, 6511, 6, 73, -1, 0, 0, 14, -1, 6512), + (6512, -1, -1, 6511, 6511, 6, 75, -1, 0, 0, 14, 6511, 6513), + (6513, -1, -1, 6511, 6511, 6, 77, -1, 0, 0, 14, 6512, -1), + (6514, -1, -1, 6514, 6514, 2, 72, -1, 0, 0, 14, -1, 6515), + (6515, -1, -1, 6514, 6514, 2, 72, -1, 0, 0, 14, 6514, 6516), + (6516, -1, -1, 6514, 6514, 2, 72, -1, 0, 0, 14, 6515, -1), + (6517, -1, -1, 1435, 4773, 9, 76, -1, 0, 0, 14, 4773, 7621), + (6518, -1, -1, 678, 678, 3, 65, -1, 0, 0, 14, 682, 6519), + (6519, -1, -1, 678, 678, 3, 65, -1, 0, 0, 14, 6518, 6520), + (6520, -1, -1, 678, 678, 3, 65, -1, 0, 0, 14, 6519, 7544), + (6521, -1, -1, 1021, 1021, 5, 75, -1, 0, 0, 14, 1025, 6522), + (6522, -1, -1, 1021, 1021, 5, 80, -1, 0, 0, 14, 6521, 7539), + (6523, -1, -1, 1026, 1026, 5, 76, -1, 0, 0, 14, 4687, 6524), + (6524, -1, -1, 1026, 1026, 5, 77, -1, 0, 0, 14, 6523, 6525), + (6525, -1, -1, 1026, 1026, 5, 78, -1, 0, 0, 14, 6524, 6526), + (6526, -1, -1, 1026, 1026, 5, 79, -1, 0, 0, 14, 6525, 6527), + (6527, -1, -1, 1026, 1026, 5, 80, -1, 0, 0, 14, 6526, 7511), + (6528, -1, -1, 501, 501, 5, 96, -1, 0, 0, 19, 6321, 6529), + (6531, -1, -1, 5295, 5295, 6, 76, -1, 0, 0, 14, 5297, 6532), + (6532, -1, -1, 5295, 5295, 6, 78, -1, 0, 0, 14, 6531, 6533), + (6533, -1, -1, 5295, 5295, 6, 80, -1, 0, 0, 14, 6532, 7220), + (6534, 8000, 8000, 8000, 8000, 12, 90, 23607, 73, 600, 17, -1, 14216), + (6540, -1, -1, 4699, 4699, 5, 56, -1, 0, 0, 14, 4699, 7500), + (6545, -1, -1, 4698, 4698, 5, 56, -1, 0, 0, 14, 4698, -1), + (6546, -1, -1, 6546, 6546, 0, 55, -1, 0, 0, 3, -1, 6547), + (6547, -1, -1, 6546, 6546, 0, 56, -1, 0, 0, 3, 6546, 6548), + (6548, -1, -1, 6546, 6546, 0, 57, -1, 0, 0, 3, 6547, 6549), + (6549, -1, -1, 6546, 6546, 0, 58, -1, 0, 0, 3, 6548, 6550), + (6550, -1, -1, 6546, 6546, 0, 59, -1, 0, 0, 3, 6549, 6551), + (6551, -1, -1, 6546, 6546, 0, 60, -1, 0, 0, 3, 6550, 6552), + (6552, -1, -1, 6546, 6546, 0, 61, -1, 0, 0, 3, 6551, 6553), + (6553, -1, -1, 6546, 6546, 0, 62, -1, 0, 0, 3, 6552, 6554), + (6554, -1, -1, 6546, 6546, 0, 63, -1, 0, 0, 3, 6553, 6555), + (6555, -1, -1, 6546, 6546, 0, 64, -1, 0, 0, 3, 6554, 6556), + (6556, -1, -1, 6546, 6546, 0, 65, -1, 0, 0, 3, 6555, 6557), + (6557, -1, -1, 6546, 6546, 0, 66, -1, 0, 0, 3, 6556, 6558), + (6558, -1, -1, 6546, 6546, 0, 67, -1, 0, 0, 3, 6557, 6559), + (6559, -1, -1, 6546, 6546, 0, 68, -1, 0, 0, 3, 6558, 6560), + (6560, -1, -1, 6546, 6546, 0, 69, -1, 0, 0, 3, 6559, 6561), + (6561, -1, -1, 6546, 6546, 0, 70, -1, 0, 0, 3, 6560, 6562), + (6562, -1, -1, 6546, 6546, 0, 71, -1, 0, 0, 3, 6561, 6563), + (6563, -1, -1, 6546, 6546, 0, 72, -1, 0, 0, 3, 6562, 6564), + (6564, -1, -1, 6546, 6546, 0, 73, -1, 0, 0, 3, 6563, 6565), + (6565, -1, -1, 6546, 6546, 0, 74, -1, 0, 0, 3, 6564, 6566), + (6566, -1, -1, 6546, 6546, 0, 75, -1, 0, 0, 3, 6565, 6567), + (6567, -1, -1, 6546, 6546, 0, 76, -1, 0, 0, 3, 6566, 6568), + (6568, -1, -1, 6546, 6546, 0, 77, -1, 0, 0, 3, 6567, 6569), + (6569, -1, -1, 6546, 6546, 0, 78, -1, 0, 0, 3, 6568, 6570), + (6570, -1, -1, 6546, 6546, 0, 79, -1, 0, 0, 3, 6569, 6571), + (6571, -1, -1, 6546, 6546, 0, 80, -1, 0, 0, 3, 6570, 7373), + (6601, -1, -1, 6601, 6601, 6, 72, -1, 0, 0, 14, -1, 6602), + (6602, -1, -1, 6601, 6601, 6, 73, -1, 0, 0, 14, 6601, 6603), + (6603, -1, -1, 6601, 6601, 6, 74, -1, 0, 0, 14, 6602, 6604), + (6604, -1, -1, 6601, 6601, 6, 75, -1, 0, 0, 14, 6603, 6605), + (6605, -1, -1, 6601, 6601, 6, 76, -1, 0, 0, 14, 6604, 7318), + (6606, 1597, 1597, 1597, 1597, 9, 75, 16095, 6, 10, 15, 1597, 10571), + (6607, 6607, 6607, 6607, 6607, 9, 75, 16092, 61, 600, 15, -1, 6608), + (6608, 6607, 6607, 6607, 6607, 9, 80, 16093, 61, 600, 15, 6607, 6609), + (6609, 6607, 6607, 6607, 6607, 9, 85, 16094, 61, 600, 15, 6608, 16324), + (6610, 6610, 6610, 6610, 6610, 2, 55, 16096, 41, 30, 15, -1, 10003), + (6611, -1, -1, 6611, 6611, 2, 60, -1, 0, 0, 15, -1, 6612), + (6612, -1, -1, 6611, 6611, 4, 63, -1, 0, 0, 15, 6611, 6613), + (6613, -1, -1, 6611, 6611, 6, 66, -1, 0, 0, 15, 6612, 6618), + (6614, -1, -1, 6614, 6614, 2, 60, -1, 0, 0, 15, -1, 6615), + (6615, -1, -1, 6614, 6614, 4, 63, -1, 0, 0, 15, 6614, 6616), + (6616, -1, -1, 6614, 6614, 6, 66, -1, 0, 0, 15, 6615, 10004), + (6617, 6617, 6617, 6617, 6617, 6, 83, 16097, 42, 3600, 15, -1, 10572), + (6618, -1, -1, 6611, 6611, 6, 69, -1, 0, 0, 15, 6613, 6619), + (6619, -1, -1, 6611, 6611, 6, 72, -1, 0, 0, 15, 6618, 10574), + (6630, -1, -1, 6630, 6630, 6, 70, -1, 0, 0, 15, -1, 6631), + (6631, -1, -1, 6630, 6630, 6, 70, -1, 0, 0, 15, 6630, 6632), + (6632, -1, -1, 6630, 6630, 6, 70, -1, 0, 0, 15, 6631, 6633), + (6633, -1, -1, 6630, 6630, 6, 70, -1, 0, 0, 15, 6632, 6634), + (6634, -1, -1, 6630, 6630, 6, 70, -1, 0, 0, 15, 6633, 10070), + (6635, 6635, 6635, 6635, 6635, 7, 70, 16098, 41, 600, 15, -1, -1), + (6636, -1, -1, 6636, 6636, 3, 70, -1, 0, 0, 15, -1, 6637), + (6637, -1, -1, 6636, 6636, 6, 70, -1, 0, 0, 15, 6636, 6638), + (6638, -1, -1, 6636, 6636, 9, 70, -1, 0, 0, 15, 6637, 10041), + (6639, 6639, 6639, 6639, 6639, 7, 70, 16099, 42, 300, 15, -1, 15173), + (6640, 6640, 6640, 6640, 6640, 7, 81, 16100, 43, 60, 15, -1, 12585), + (6641, -1, -1, 6641, 6641, 7, 81, -1, 0, 0, 15, -1, 6642), + (6642, -1, -1, 6641, 6641, 8, 83, -1, 0, 0, 15, 6641, 6643), + (6643, -1, -1, 6641, 6641, 9, 85, -1, 0, 0, 15, 6642, 10075), + (6644, 6644, 6644, 6644, 6644, 2, 70, 16104, 44, 20, 15, -1, 12586), + (6645, 6645, 6645, 6645, 6645, 6, 80, 16105, 45, 60, 15, -1, 13107), + (6646, 6646, 6646, 6646, 6646, 6, 70, 16106, 46, 6, 15, -1, -1), + (6660, -1, -1, 1307, 1307, 5, 73, -1, 0, 0, 15, 1311, 6661), + (6661, -1, -1, 1307, 1307, 5, 74, -1, 0, 0, 15, 6660, 6662), + (6662, -1, -1, 1307, 1307, 5, 75, -1, 0, 0, 15, 6661, 13210), + (6663, 6663, 6663, 6663, 6663, 7, 73, 16107, 59, 600, 15, -1, 6664), + (6664, 6663, 6663, 6663, 6663, 7, 75, 16108, 59, 600, 15, 6663, 6665), + (6665, 6663, 6663, 6663, 6663, 7, 77, 16109, 59, 600, 15, 6664, 10162), + (6666, -1, -1, 6666, 6666, 8, 81, -1, 0, 0, 15, -1, 6667), + (6667, -1, -1, 6666, 6666, 8, 83, -1, 0, 0, 15, 6666, -1), + (6668, -1, -1, 6668, 6668, 3, 76, -1, 0, 0, 15, -1, 6669), + (6669, -1, -1, 6668, 6668, 3, 77, -1, 0, 0, 15, 6668, 6670), + (6670, -1, -1, 6668, 6668, 3, 78, -1, 0, 0, 15, 6669, -1), + (6671, 6671, 6671, 6671, 6671, 4, 65, 16148, 60, 60, 15, -1, -1), + (6672, 6672, 6672, 6672, 6672, 4, 67, 16149, 60, 60, 15, -1, -1), + (6673, 6673, 6673, 6673, 6673, 4, 69, 16150, 60, 60, 15, -1, -1), + (6674, 6674, 6674, 6674, 6674, 4, 71, 16151, 60, 60, 15, -1, -1), + (6675, 6675, 6675, 6675, 6675, 4, 73, 16152, 60, 60, 15, -1, -1), + (6676, 6676, 6676, 6676, 6676, 4, 75, 16153, 60, 60, 15, -1, -1), + (6691, 6691, 6691, 6691, 6691, 9, 81, 16114, 41, 30, 15, -1, -1), + (6692, 6692, 6692, 6692, 6692, 7, 65, 16115, 42, 600, 15, -1, 6693), + (6693, 6692, 6692, 6692, 6692, 7, 70, 16116, 42, 600, 15, 6692, 6694), + (6694, 6692, 6692, 6692, 6692, 7, 75, 16117, 42, 600, 15, 6693, 6695), + (6695, 6692, 6692, 6692, 6692, 7, 80, 16118, 42, 600, 15, 6694, 6696), + (6696, 6692, 6692, 6692, 6692, 7, 85, 16119, 42, 600, 15, 6695, 5342), + (6697, -1, -1, 6697, 6697, 7, 65, -1, 0, 0, 15, -1, 6698), + (6698, -1, -1, 6697, 6697, 7, 70, -1, 0, 0, 15, 6697, 6699), + (6699, -1, -1, 6697, 6697, 7, 75, -1, 0, 0, 15, 6698, 6700), + (6700, -1, -1, 6697, 6697, 7, 80, -1, 0, 0, 15, 6699, 6701), + (6701, -1, -1, 6697, 6697, 7, 85, -1, 0, 0, 15, 6700, -1), + (6702, 6702, 6702, 6702, 6702, 9, 75, 16120, 43, 120, 15, -1, -1), + (6703, -1, -1, 6703, 6703, 3, 65, -1, 0, 0, 15, -1, 6704), + (6704, -1, -1, 6703, 6703, 3, 65, -1, 0, 0, 15, 6703, 6705), + (6705, -1, -1, 6703, 6703, 3, 65, -1, 0, 0, 15, 6704, 10176), + (6706, 6706, 6706, 6706, 6706, 7, 75, 16121, 44, 600, 15, -1, 6707), + (6707, 6706, 6706, 6706, 6706, 7, 80, 16122, 44, 600, 15, 6706, 6708), + (6708, 6706, 6706, 6706, 6706, 7, 85, 16123, 44, 600, 15, 6707, 10179), + (6709, -1, -1, 6709, 6709, 3, 60, -1, 0, 0, 15, -1, 6710), + (6710, -1, -1, 6709, 6709, 3, 61, -1, 0, 0, 15, 6709, 6711), + (6711, -1, -1, 6709, 6709, 3, 62, -1, 0, 0, 15, 6710, -1), + (6712, -1, -1, 6712, 6712, 7, 65, -1, 0, 0, 15, -1, 6713), + (6713, -1, -1, 6712, 6712, 7, 70, -1, 0, 0, 15, 6712, 6714), + (6714, -1, -1, 6712, 6712, 7, 75, -1, 0, 0, 15, 6713, 6715), + (6715, -1, -1, 6712, 6712, 7, 80, -1, 0, 0, 15, 6714, 6716), + (6716, -1, -1, 6712, 6712, 7, 85, -1, 0, 0, 15, 6715, 10182), + (6750, 6750, 6750, 6750, 6750, 9, 85, 16127, 60, 120, 15, -1, 13899), + (6751, -1, -1, 6751, 6751, 6, 75, -1, 0, 0, 15, -1, 6752), + (6752, -1, -1, 6751, 6751, 6, 75, -1, 0, 0, 15, 6751, 6753), + (6753, -1, -1, 6751, 6751, 6, 75, -1, 0, 0, 15, 6752, 6768), + (6754, 6754, 6754, 6754, 6754, 7, 70, 16130, 41, 1200, 15, -1, 10053), + (6755, 6755, 6755, 6755, 6755, 7, 81, 16131, 42, 900, 15, -1, 6756), + (6756, 6755, 6755, 6755, 6755, 9, 83, 16132, 42, 900, 15, 6755, 6757), + (6757, 6755, 6755, 6755, 6755, 12, 85, 16133, 42, 900, 15, 6756, 13542), + (6758, 6758, 6758, 6758, 6758, 3, 81, 16134, 43, 900, 15, -1, 6759), + (6759, 6758, 6758, 6758, 6758, 6, 83, 16135, 43, 900, 15, 6758, 6760), + (6760, 6758, 6758, 6758, 6758, 9, 85, 16136, 43, 900, 15, 6759, 10054), + (6761, -1, -1, 6761, 6761, 3, 65, -1, 0, 0, 15, -1, 6762), + (6762, -1, -1, 6761, 6761, 6, 65, -1, 0, 0, 15, 6761, 6763), + (6763, -1, -1, 6761, 6761, 9, 65, -1, 0, 0, 15, 6762, 6085), + (6764, 6764, 6764, 6764, 6764, 7, 75, 16137, 52, 600, 15, -1, 10057), + (6765, -1, -1, 6765, 6765, 3, 70, -1, 0, 0, 15, -1, 6766), + (6766, -1, -1, 6765, 6765, 6, 75, -1, 0, 0, 15, 6765, 6767), + (6767, -1, -1, 6765, 6765, 9, 80, -1, 0, 0, 15, 6766, 10058), + (6768, -1, -1, 6751, 6751, 6, 75, -1, 0, 0, 15, 6753, 6769), + (6769, -1, -1, 6751, 6751, 6, 75, -1, 0, 0, 15, 6768, 10769), + (6791, -1, -1, 6791, 6791, 6, 75, -1, 0, 0, 15, -1, 6792), + (6792, -1, -1, 6791, 6791, 6, 80, -1, 0, 0, 15, 6791, 6793), + (6793, -1, -1, 6791, 6791, 6, 85, -1, 0, 0, 15, 6792, 10044), + (6794, 6794, 6794, 6794, 6794, 6, 75, 16142, 41, 60, 15, -1, -1), + (6815, 6815, 6815, 6815, 6815, 8, 75, 16144, 60, 600, 15, -1, 6816), + (6816, 6815, 6815, 6815, 6815, 8, 80, 16145, 60, 600, 15, 6815, 6817), + (6817, 6815, 6815, 6815, 6815, 8, 85, 16146, 60, 600, 15, 6816, 10200), + (6818, 6818, 6818, 6818, 6818, 6, 70, 16147, 44, 20, 15, -1, -1), + (6819, -1, -1, 6819, 6819, 6, 72, -1, 0, 0, 15, -1, 6820), + (6820, -1, -1, 6819, 6819, 6, 74, -1, 0, 0, 15, 6819, 6821), + (6821, -1, -1, 6819, 6819, 6, 76, -1, 0, 0, 15, 6820, 10203), + (6822, 6822, 6822, 6822, 6822, 12, 80, 16154, 42, 120, 15, -1, 13683), + (6823, -1, -1, 6823, 6823, 4, 65, -1, 0, 0, 15, -1, 6824), + (6824, -1, -1, 6823, 6823, 4, 67, -1, 0, 0, 15, 6823, 6825), + (6825, -1, -1, 6823, 6823, 4, 69, -1, 0, 0, 15, 6824, 6826), + (6826, -1, -1, 6823, 6823, 4, 71, -1, 0, 0, 15, 6825, 6827), + (6827, -1, -1, 6823, 6823, 4, 73, -1, 0, 0, 15, 6826, 10206), + (6828, 6828, 6828, 6828, 6828, 12, 80, 16155, 43, 60, 15, -1, 10208), + (6870, -1, -1, 6870, 6870, 6, 75, -1, 0, 0, 15, -1, 6871), + (6871, -1, -1, 6870, 6870, 6, 75, -1, 0, 0, 15, 6870, 6872), + (6872, -1, -1, 6870, 6870, 6, 75, -1, 0, 0, 15, 6871, 10130), + (6873, -1, -1, 255, 255, 3, 76, -1, 0, 0, 15, -1, 6874), + (6874, -1, -1, 255, 255, 6, 76, -1, 0, 0, 15, 6873, 6875), + (6875, -1, -1, 255, 255, 9, 76, -1, 0, 0, 15, 6874, 10133), + (6876, -1, -1, 6375, 6375, 6, 76, -1, 0, 0, 15, -1, 6877), + (6877, -1, -1, 6375, 6375, 6, 77, -1, 0, 0, 15, 6876, 6878), + (6878, -1, -1, 6375, 6375, 6, 78, -1, 0, 0, 15, 6877, 10136), + (6879, -1, -1, 649, 649, 2, 66, -1, 0, 0, 15, -1, 6880), + (6880, -1, -1, 649, 649, 4, 68, -1, 0, 0, 15, 6879, 6881), + (6881, -1, -1, 649, 649, 6, 70, -1, 0, 0, 15, 6880, -1), + (6882, -1, -1, 776, 776, 3, 70, -1, 0, 0, 15, -1, 6883), + (6883, -1, -1, 776, 776, 3, 70, -1, 0, 0, 15, 6882, 6884), + (6884, -1, -1, 776, 776, 3, 70, -1, 0, 0, 15, 6883, -1), + (6900, -1, -1, 6935, 6935, 6, 81, -1, 0, 0, 16, 6937, 6901), + (6901, -1, -1, 6935, 6935, 6, 82, -1, 0, 0, 16, 6900, 6902), + (6902, -1, -1, 6935, 6935, 6, 83, -1, 0, 0, 16, 6901, 6903), + (6903, -1, -1, 6935, 6935, 6, 84, -1, 0, 0, 16, 6902, 6904), + (6904, -1, -1, 6935, 6935, 6, 85, -1, 0, 0, 16, 6903, 14196), + (6905, -1, -1, 551, 551, 5, 81, -1, 0, 0, 16, 1637, 6906), + (6906, -1, -1, 551, 551, 5, 83, -1, 0, 0, 16, 6905, 6907), + (6907, -1, -1, 551, 551, 5, 85, -1, 0, 0, 16, 6906, 12843), + (6908, -1, -1, 6908, 6908, 6, 81, -1, 0, 0, 16, -1, 6909), + (6909, -1, -1, 6908, 6908, 6, 83, -1, 0, 0, 16, 6908, 6910), + (6910, -1, -1, 6908, 6908, 6, 85, -1, 0, 0, 16, 6909, 14199), + (6911, -1, -1, 1143, 1143, 5, 65, -1, 0, 0, 16, 1168, 6912), + (6912, -1, -1, 1143, 1143, 7, 65, -1, 0, 0, 16, 6911, 6913), + (6913, -1, -1, 1143, 1143, 9, 65, -1, 0, 0, 16, 6912, -1), + (6930, 6930, 6930, 6930, 6930, 12, 80, 16156, 13, 60, 15, -1, -1), + (6931, 6931, 6931, 6931, 6931, 12, 85, 16157, 41, 600, 15, -1, 10319), + (6932, 6932, 6932, 6932, 6932, 7, 81, 16158, 42, 1200, 15, -1, 6933), + (6933, 6932, 6932, 6932, 6932, 7, 83, 16159, 42, 1200, 15, 6932, 6934), + (6934, 6932, 6932, 6932, 6932, 7, 85, 16160, 42, 1200, 15, 6933, 10320), + (6935, -1, -1, 6935, 6935, 6, 75, -1, 0, 0, 15, -1, 6936), + (6936, -1, -1, 6935, 6935, 6, 77, -1, 0, 0, 15, 6935, 6937), + (6937, -1, -1, 6935, 6935, 6, 79, -1, 0, 0, 15, 6936, 6900), + (6938, -1, -1, 6938, 6938, 7, 81, -1, 0, 0, 15, -1, 6939), + (6939, -1, -1, 6938, 6938, 7, 83, -1, 0, 0, 15, 6938, 6940), + (6940, -1, -1, 6938, 6938, 7, 85, -1, 0, 0, 15, 6939, -1), + (6941, -1, -1, 6941, 6941, 6, 81, -1, 0, 0, 15, -1, 6942), + (6942, -1, -1, 6941, 6941, 6, 81, -1, 0, 0, 15, 6941, 6943), + (6943, -1, -1, 6941, 6941, 6, 81, -1, 0, 0, 15, 6942, 6944), + (6944, -1, -1, 6941, 6941, 6, 81, -1, 0, 0, 15, 6943, 6945), + (6945, -1, -1, 6941, 6941, 6, 81, -1, 0, 0, 15, 6944, -1), + (6970, 6970, 6970, 6970, 6970, 6, 70, 16167, 61, 6, 15, -1, -1), + (6971, 6971, 6971, 6971, 6971, 7, 78, 16168, 41, 600, 15, -1, 6972), + (6972, 6971, 6971, 6971, 6971, 7, 80, 16169, 41, 600, 15, 6971, 6973), + (6973, 6971, 6971, 6971, 6971, 7, 82, 16170, 41, 600, 15, 6972, 10288), + (6974, -1, -1, 6974, 6974, 5, 81, -1, 0, 0, 15, -1, 6975), + (6975, -1, -1, 6974, 6974, 5, 83, -1, 0, 0, 15, 6974, 6976), + (6976, -1, -1, 6974, 6974, 5, 85, -1, 0, 0, 15, 6975, 10291), + (6977, -1, -1, 6977, 6977, 5, 81, -1, 0, 0, 15, -1, 6978), + (6978, -1, -1, 6977, 6977, 5, 83, -1, 0, 0, 15, 6977, 6979), + (6979, -1, -1, 6977, 6977, 5, 85, -1, 0, 0, 15, 6978, 12840), + (6980, -1, -1, 6980, 6980, 5, 81, -1, 0, 0, 15, -1, 6981), + (6981, -1, -1, 6980, 6980, 5, 83, -1, 0, 0, 15, 6980, 6982), + (6982, -1, -1, 6980, 6980, 5, 85, -1, 0, 0, 15, 6981, 12834), + (6983, 6983, 6983, 6983, 6983, 7, 83, 16439, 66, 720, 15, -1, 16246), + (6984, 6984, 6984, 6984, 6984, 6, 73, 16172, 60, 60, 15, -1, 10294), + (6985, 6985, 6985, 6985, 6985, 6, 73, 16173, 60, 60, 15, -1, 10295), + (6986, 6986, 6986, 6986, 6986, 6, 73, 16174, 60, 60, 15, -1, 10296), + (6987, -1, -1, 6987, 6987, 12, 81, -1, 0, 0, 15, -1, -1), + (6988, -1, -1, 6988, 6988, 5, 83, 0, 0, 0, 16, -1, 6989), + (6989, -1, -1, 6988, 6988, 5, 84, 0, 0, 0, 16, 6988, 6990), + (6990, -1, -1, 6988, 6988, 5, 83, 0, 0, 0, 16, 6989, 14278), + (7000, 7000, 7000, 7000, 7000, 4, 65, 12748, 31, 600, 3, -1, -1), + (7002, 7002, 7002, 7002, 7002, 4, 65, 12750, 31, 600, 3, -1, -1), + (7003, 7003, 7003, 7003, 7003, 4, 65, 12751, 31, 600, 3, -1, -1), + (7004, 7004, 7004, 7004, 7004, 4, 65, 12752, 31, 300, 3, -1, -1), + (7005, -1, -1, 7005, 7005, 2, 73, -1, 0, 0, 15, -1, 7006), + (7006, -1, -1, 7005, 7005, 2, 74, -1, 0, 0, 15, 7005, 7007), + (7007, -1, -1, 7005, 7005, 2, 75, -1, 0, 0, 15, 7006, 15632), + (7008, -1, -1, 1604, 1604, 9, 81, -1, 0, 0, 16, 7133, 7009), + (7009, -1, -1, 1604, 1604, 12, 83, -1, 0, 0, 16, 7008, 12612), + (7010, -1, -1, 7010, 7010, 6, 81, -1, 0, 0, 16, -1, 7011), + (7011, -1, -1, 7010, 7010, 6, 83, -1, 0, 0, 16, 7010, 7012), + (7012, -1, -1, 7010, 7010, 6, 85, -1, 0, 0, 16, 7011, 7013), + (7013, -1, -1, 7010, 7010, 6, 85, -1, 0, 0, 16, 7012, 7014), + (7014, -1, -1, 7010, 7010, 6, 85, -1, 0, 0, 16, 7013, 7015), + (7015, -1, -1, 7010, 7010, 6, 85, -1, 0, 0, 16, 7014, 13533), + (7016, 7016, 7016, 7016, 7016, 5, 85, 21658, 31, 600, 3, -1, -1), + (7017, 7017, 7017, 7017, 7017, 5, 85, 21659, 31, 600, 3, -1, -1), + (7018, 7018, 7018, 7018, 7018, 5, 85, 21660, 31, 600, 3, -1, -1), + (7019, 7019, 7019, 7019, 7019, 5, 85, 21661, 31, 600, 3, -1, -1), + (7020, 7020, 7020, 7020, 7020, 0, 85, 21658, 31, 600, 3, -1, -1), + (7021, 7021, 7021, 7021, 7021, 0, 85, 21659, 31, 600, 3, -1, -1), + (7022, 7022, 7022, 7022, 7022, 0, 85, 21660, 31, 600, 3, -1, -1), + (7023, 7023, 7023, 7023, 7023, 0, 85, 21661, 31, 600, 3, -1, -1), + (7024, 7024, 7024, 7024, 7024, 0, 0, 9475, 31, 600, 12, -1, -1), + (7025, 7025, 7025, 7025, 7025, 0, 0, 9477, 31, 600, 12, -1, -1), + (7026, 7026, 7026, 7026, 7026, 0, 0, 9478, 31, 600, 12, -1, -1), + (7027, 7027, 7027, 7027, 7027, 0, 0, 9479, 31, 600, 12, -1, -1), + (7028, 7028, 7028, 7028, 7028, 0, 0, 12748, 31, 600, 3, -1, -1), + (7030, 7030, 7030, 7030, 7030, 0, 0, 12750, 31, 600, 3, -1, -1), + (7031, 7031, 7031, 7031, 7031, 0, 0, 12751, 31, 600, 3, -1, -1), + (7032, 7032, 7032, 7032, 7032, 0, 0, 12752, 31, 300, 3, -1, -1), + (7033, -1, -1, 7033, 7033, 6, 85, 0, 0, 0, 16, -1, 7034), + (7034, -1, -1, 7033, 7033, 9, 85, 0, 0, 0, 16, 7033, 7035), + (7035, -1, -1, 7033, 7033, 12, 85, 0, 0, 0, 16, 7034, 15746), + (7036, -1, -1, 7036, 7036, 7, 81, -1, 0, 0, 16, -1, 7037), + (7037, -1, -1, 7036, 7036, 9, 81, -1, 0, 0, 16, 7036, 7038), + (7038, -1, -1, 7036, 7036, 12, 81, -1, 0, 0, 16, 7037, 10579), + (7050, -1, -1, 446, 735, 5, 67, -1, 0, 0, 8, 448, 7051), + (7051, -1, -1, 446, 735, 5, 68, -1, 0, 0, 8, 7050, 7052), + (7052, -1, -1, 446, 735, 5, 69, -1, 0, 0, 8, 7051, 7053), + (7053, -1, -1, 446, 735, 7, 72, -1, 0, 0, 12, 7052, 7054), + (7054, -1, -1, 446, 735, 7, 73, -1, 0, 0, 12, 7053, 7055), + (7055, -1, -1, 446, 735, 7, 74, -1, 0, 0, 12, 7054, 7063), + (7056, -1, -1, 735, 735, 5, 67, -1, 0, 0, 8, 737, 7057), + (7057, -1, -1, 735, 735, 5, 68, -1, 0, 0, 8, 7056, 7058), + (7058, -1, -1, 735, 735, 5, 69, -1, 0, 0, 8, 7057, 7059), + (7059, -1, -1, 735, 735, 7, 72, -1, 0, 0, 12, 7058, 7060), + (7060, -1, -1, 735, 735, 7, 73, -1, 0, 0, 12, 7059, 7061), + (7061, -1, -1, 735, 735, 7, 74, -1, 0, 0, 12, 7060, 7066), + (7062, -1, -1, 7062, 7062, 3, 51, -1, 0, 0, 0, -1, -1), + (7063, -1, -1, 446, 735, 8, 76, -1, 0, 0, 14, 7055, 7064), + (7064, -1, -1, 446, 735, 8, 77, -1, 0, 0, 14, 7063, 7065), + (7065, -1, -1, 446, 735, 8, 78, -1, 0, 0, 14, 7064, 7622), + (7066, -1, -1, 735, 735, 8, 76, -1, 0, 0, 14, 7061, 7067), + (7067, -1, -1, 735, 735, 8, 77, -1, 0, 0, 14, 7066, 7068), + (7068, -1, -1, 735, 735, 8, 78, -1, 0, 0, 14, 7067, 7625), + (7069, 7069, 7069, 7069, 7069, 3, 71, 13219, 39, 7, 14, -1, -1), + (7100, -1, -1, 7100, 7100, 6, 76, -1, 0, 0, 14, -1, 7101), + (7101, -1, -1, 7100, 7100, 6, 77, -1, 0, 0, 14, 7100, 7102), + (7102, -1, -1, 7100, 7100, 6, 78, -1, 0, 0, 14, 7101, 7323), + (7103, -1, -1, 7103, 7103, 2, 65, -1, 0, 0, 14, -1, 7104), + (7104, -1, -1, 7103, 7103, 2, 65, -1, 0, 0, 14, 7103, 7105), + (7105, -1, -1, 7103, 7103, 2, 65, -1, 0, 0, 14, 7104, 7326), + (7106, -1, -1, 7106, 7106, 6, 73, -1, 0, 0, 14, -1, 7107), + (7107, -1, -1, 7106, 7106, 7, 76, -1, 0, 0, 14, 7106, 7108), + (7108, -1, -1, 7106, 7106, 10, 79, -1, 0, 0, 14, 7107, -1), + (7109, 1351, 1351, 1351, 1351, 8, 82, 13499, 5, 30, 15, 6133, 13109), + (7110, 4849, 4849, 4849, 4849, 7, 81, 13593, 7, 1800, 15, 6134, 13914), + (7111, 54006, 54006, 54006, 54006, 7, 81, 13594, 18, 180, 15, 6135, 10006), + (7112, -1, -1, 6564, 6564, 6, 78, -1, 0, 0, 15, 6285, 7113), + (7113, -1, -1, 6564, 6564, 7, 81, -1, 0, 0, 15, 7112, 7114), + (7114, -1, -1, 6564, 6564, 10, 84, -1, 0, 0, 15, 7113, 10007), + (7115, 6565, 6565, 6565, 6565, 7, 81, 13595, 17, 45, 15, 6286, 10010), + (7116, -1, -1, 489, 489, 3, 68, -1, 0, 0, 15, 491, 7117), + (7117, -1, -1, 489, 489, 3, 69, -1, 0, 0, 15, 7116, 7118), + (7118, -1, -1, 489, 489, 3, 70, -1, 0, 0, 15, 7117, -1), + (7119, 912, 912, 912, 912, 3, 71, 13496, 4, 3600, 15, 1332, 7120), + (7120, 912, 912, 912, 912, 6, 73, 13497, 4, 3600, 15, 7119, 7121), + (7121, 912, 912, 912, 912, 9, 75, 13498, 4, 3600, 15, 7120, 10011), + (7122, -1, -1, 4844, 4844, 5, 76, -1, 0, 0, 15, 4848, 7123), + (7123, -1, -1, 4844, 4844, 5, 77, -1, 0, 0, 15, 7122, 7124), + (7124, -1, -1, 4844, 4844, 5, 78, -1, 0, 0, 15, 7123, 7125), + (7125, -1, -1, 4844, 4844, 5, 79, -1, 0, 0, 15, 7124, 7126), + (7126, -1, -1, 4844, 4844, 5, 80, -1, 0, 0, 15, 7125, 7686), + (7127, 4860, 4860, 4860, 4860, 12, 85, 13599, 13, 60, 15, 5606, -1), + (7128, -1, -1, 492, 492, 2, 68, -1, 0, 0, 15, 494, 7129), + (7129, -1, -1, 492, 492, 2, 69, -1, 0, 0, 15, 7128, 7130), + (7130, -1, -1, 492, 492, 2, 70, -1, 0, 0, 15, 7129, 10576), + (7131, -1, -1, 1604, 1604, 7, 75, -1, 0, 0, 15, 6034, 7132), + (7132, -1, -1, 1604, 1604, 9, 77, -1, 0, 0, 15, 7131, 7133), + (7133, -1, -1, 1604, 1604, 12, 79, -1, 0, 0, 15, 7132, 7008), + (7134, -1, -1, 1543, 1543, 7, 81, -1, 0, 0, 15, 6044, 7135), + (7135, -1, -1, 1543, 1543, 9, 83, -1, 0, 0, 15, 7134, 7136), + (7136, -1, -1, 1543, 1543, 12, 85, -1, 0, 0, 15, 7135, 10165), + (7137, -1, -1, 6559, 6559, 6, 79, -1, 0, 0, 15, 6274, 7138), + (7138, -1, -1, 6559, 6559, 7, 81, -1, 0, 0, 15, 7137, 7139), + (7139, -1, -1, 6559, 6559, 10, 83, -1, 0, 0, 15, 7138, -1), + (7143, 6328, 6328, 6328, 6328, 7, 79, 13601, 10, 600, 15, 6330, 7144), + (7144, 6328, 6328, 6328, 6328, 7, 81, 13602, 10, 600, 15, 7143, 7145), + (7145, 6328, 6328, 6328, 6328, 7, 83, 13603, 10, 600, 15, 7144, 10168), + (7146, -1, -1, 878, 878, 7, 81, -1, 0, 0, 15, 6332, 7147), + (7147, -1, -1, 878, 878, 7, 83, -1, 0, 0, 15, 7146, 10171), + (7148, -1, -1, 1304, 1304, 7, 81, -1, 0, 0, 15, 6031, 7149), + (7149, -1, -1, 1304, 1304, 9, 83, -1, 0, 0, 15, 7148, 7150), + (7150, -1, -1, 1304, 1304, 12, 85, -1, 0, 0, 15, 7149, 10865), + (7151, -1, -1, 846, 846, 7, 81, -1, 0, 0, 15, 6037, 7152), + (7152, -1, -1, 846, 846, 9, 83, -1, 0, 0, 15, 7151, 7153), + (7153, -1, -1, 846, 846, 12, 85, -1, 0, 0, 15, 7152, 10173), + (7154, 1352, 1352, 1352, 1352, 6, 81, 13613, 3, 60, 15, 6318, 7155), + (7155, 1352, 1352, 1352, 1352, 6, 83, 13614, 3, 60, 15, 7154, 7156), + (7156, 1352, 1352, 1352, 1352, 6, 85, 13615, 3, 60, 15, 7155, 10113), + (7157, 1358, 1358, 1358, 1358, 6, 81, 13610, 3, 60, 15, 6312, 7158), + (7158, 1358, 1358, 1358, 1358, 6, 83, 13611, 3, 60, 15, 7157, 7159), + (7159, 1358, 1358, 1358, 1358, 6, 85, 13612, 3, 60, 15, 7158, 10116), + (7160, -1, -1, 4801, 4801, 6, 79, -1, 0, 0, 15, 4803, 7161), + (7161, -1, -1, 4801, 4801, 6, 81, -1, 0, 0, 15, 7160, 7162), + (7162, -1, -1, 4801, 4801, 6, 83, -1, 0, 0, 15, 7161, 10122), + (7163, -1, -1, 820, 820, 5, 81, -1, 0, 0, 15, 5919, 7164), + (7164, -1, -1, 820, 820, 5, 83, -1, 0, 0, 15, 7163, 7165), + (7165, -1, -1, 820, 820, 5, 85, -1, 0, 0, 15, 7164, 10660), + (7166, -1, -1, 6343, 6343, 6, 79, -1, 0, 0, 15, 6345, 7167), + (7167, -1, -1, 6343, 6343, 6, 81, -1, 0, 0, 15, 7166, 7168), + (7168, -1, -1, 6343, 6343, 6, 83, -1, 0, 0, 15, 7167, -1), + (7169, -1, -1, 6020, 6020, 2, 81, -1, 0, 0, 15, 6059, 7170), + (7170, -1, -1, 6020, 6020, 2, 83, -1, 0, 0, 15, 7169, 7171), + (7171, -1, -1, 6020, 6020, 2, 85, -1, 0, 0, 15, 7170, 10663), + (7172, 1355, 1355, 1355, 1355, 6, 81, 13607, 3, 60, 15, 5916, 7173), + (7173, 1355, 1355, 1355, 1355, 6, 83, 13608, 3, 60, 15, 7172, 7174), + (7174, 1355, 1355, 1355, 1355, 6, 85, 13609, 3, 60, 15, 7173, 10119), + (7175, -1, -1, 611, 611, 2, 68, -1, 0, 0, 15, 615, 7176), + (7176, -1, -1, 611, 611, 2, 69, -1, 0, 0, 15, 7175, 7177), + (7177, -1, -1, 611, 611, 2, 70, -1, 0, 0, 15, 7176, 10124), + (7178, 4854, 4854, 4854, 4854, 7, 81, 13616, 8, 600, 15, 5766, 7179), + (7179, 4854, 4854, 4854, 4854, 9, 83, 13617, 8, 600, 15, 7178, 7180), + (7180, 4854, 4854, 4854, 4854, 12, 85, 13618, 8, 600, 15, 7179, 10323), + (7184, 1348, 1348, 1348, 1348, 12, 91, 13622, 0, 3600, 18, 5772, 7185), + (7187, 1178, 1178, 1178, 1178, 7, 81, 13625, 4, 900, 15, 5781, 7188), + (7188, 1178, 1178, 1178, 1178, 8, 82, 13626, 4, 900, 15, 7187, 7189), + (7189, 1178, 1178, 1178, 1178, 9, 83, 13627, 4, 900, 15, 7188, 10326), + (7196, -1, -1, 5776, 5776, 7, 81, -1, 0, 0, 16, 5778, 7197), + (7197, -1, -1, 5776, 5776, 9, 83, -1, 0, 0, 16, 7196, 7198), + (7198, -1, -1, 5776, 5776, 12, 85, -1, 0, 0, 16, 7197, 13043), + (7199, 1274, 1274, 1274, 1274, 9, 83, 13657, 9, 540, 15, 5949, 7200), + (7200, 1274, 1274, 1274, 1274, 10, 84, 13658, 9, 540, 15, 7199, 7201), + (7201, 1274, 1274, 1274, 1274, 12, 85, 13659, 9, 540, 15, 7200, 10209), + (7202, 1510, -1, 1510, 1510, 12, 75, 13664, 13, 2160, 15, 1510, 10212), + (7203, 184, 184, 184, 184, 10, 84, 13660, 5, 4320, 15, 5953, -1), + (7204, -1, -1, 5264, 5264, 7, 81, -1, 0, 0, 15, 5943, 7205), + (7205, -1, -1, 5264, 5264, 8, 82, -1, 0, 0, 15, 7204, 7206), + (7206, -1, -1, 5264, 5264, 9, 83, -1, 0, 0, 15, 7205, 7207), + (7207, -1, -1, 5264, 5264, 10, 84, -1, 0, 0, 15, 7206, 7208), + (7208, -1, -1, 5264, 5264, 12, 85, -1, 0, 0, 15, 7207, 10213), + (7209, 4927, 4927, 4927, 4927, 9, 76, 13656, 14, 600, 15, 4927, 10218), + (7210, -1, -1, 839, 839, 6, 75, -1, 0, 0, 15, 5329, 7211), + (7211, -1, -1, 839, 839, 6, 75, -1, 0, 0, 15, 7210, 7212), + (7212, -1, -1, 839, 839, 6, 75, -1, 0, 0, 15, 7211, 7213), + (7213, -1, -1, 839, 839, 6, 75, -1, 0, 0, 15, 7212, 7214), + (7214, -1, -1, 839, 839, 6, 75, -1, 0, 0, 15, 7213, 10219), + (7215, -1, -1, 4861, 4861, 9, 83, -1, 0, 0, 15, 5956, 7216), + (7216, -1, -1, 4861, 4861, 12, 85, -1, 0, 0, 15, 7215, 7682), + (7217, 967, 967, 967, 967, 6, 81, 13661, 10, 1800, 15, 6466, 7218), + (7218, 967, 967, 967, 967, 6, 82, 13662, 10, 1800, 15, 7217, 7219), + (7219, 967, 967, 967, 967, 6, 83, 13663, 10, 1800, 15, 7218, 10224), + (7220, -1, -1, 5295, 5295, 6, 81, -1, 0, 0, 15, 6533, 7221), + (7221, -1, -1, 5295, 5295, 6, 83, -1, 0, 0, 15, 7220, 7222), + (7222, -1, -1, 5295, 5295, 6, 85, -1, 0, 0, 15, 7221, 10227), + (7223, 6290, 6290, 6290, 6290, 7, 81, 13689, 0, 1, 15, 6295, 7224), + (7224, 6290, 6290, 6290, 6290, 9, 83, 13690, 0, 1, 15, 7223, 7225), + (7225, 6290, 6290, 6290, 6290, 12, 85, 13691, 0, 1, 15, 7224, 11064), + (7226, 619, 619, 619, 619, 6, 78, 13686, 6, 900, 15, 6298, 7227), + (7227, 619, 619, 619, 619, 6, 78, 13687, 6, 900, 15, 7226, 7228), + (7228, 619, 619, 619, 619, 6, 78, 13688, 6, 900, 15, 7227, 10230), + (7229, 4944, -1, 4944, 4944, 7, 81, 13677, 0, 1, 15, 6157, 7230), + (7230, 4944, -1, 4944, 4944, 9, 83, 13678, 0, 1, 15, 7229, 7231), + (7231, 4944, -1, 4944, 4944, 12, 85, 13679, 0, 1, 15, 7230, 11067), + (7232, -1, -1, 1210, 1210, 7, 81, -1, 0, 0, 15, 5576, 7233), + (7233, -1, -1, 1210, 1210, 9, 83, -1, 0, 0, 15, 7232, 7234), + (7234, -1, -1, 1210, 1210, 12, 85, -1, 0, 0, 15, 7233, 12523), + (7235, 923, 923, 923, 923, 9, 82, 13673, 8, 60, 15, 6151, -1), + (7236, 922, 922, 922, 922, 9, 83, 13672, 8, 60, 15, 6150, -1), + (7237, 516, 516, 516, 516, 6, 77, 13692, 5, 480, 15, 6398, 10233), + (7238, 155, 155, 155, 155, 12, 82, 13693, 8, 60, 15, 5289, 14324), + (7239, 1334, 1334, 1334, 1334, 9, 83, 13674, 11, 4320, 15, 6154, 7240), + (7240, 1334, 1334, 1334, 1334, 10, 84, 13675, 11, 4320, 15, 7239, 7241), + (7241, 1334, 1334, 1334, 1334, 12, 85, 13676, 11, 4320, 15, 7240, 10234), + (7242, 1478, -1, 1478, 1478, 9, 83, 13680, 0, 1, 15, 6163, 7243), + (7243, 1478, -1, 1478, 1478, 10, 84, 13681, 0, 1, 15, 7242, 7244), + (7244, 1478, -1, 1478, 1478, 12, 85, 13682, 0, 1, 15, 7243, 11070), + (7245, 921, 921, 921, 921, 9, 84, 13671, 8, 60, 15, 6149, -1), + (7246, 4915, 4915, 4915, 4915, 7, 81, 13683, 7, 4320, 15, 5609, 7247), + (7247, 4915, 4915, 4915, 4915, 9, 83, 13684, 7, 4320, 15, 7246, 7248), + (7248, 4915, 4915, 4915, 4915, 12, 85, 13685, 7, 4320, 15, 7247, -1), + (7249, 167, 167, 167, 167, 10, 84, 13703, 14, 900, 15, 5879, 8343), + (7250, 520, 520, 520, 520, 12, 81, 13704, 6, 540, 15, 5885, 7251), + (7251, 520, 520, 520, 520, 12, 83, 13705, 6, 540, 15, 7250, 7252), + (7252, 520, 520, 520, 520, 12, 85, 13706, 6, 540, 15, 7251, 10252), + (7253, 4903, 4903, 4903, 4903, 9, 81, 13707, 9, 1320, 15, 5892, 10255), + (7254, 4906, 4906, 4906, 4906, 9, 81, 13708, 9, 1320, 15, 5893, 10256), + (7255, 4909, 4909, 4909, 4909, 9, 81, 13709, 16, 1320, 15, 5894, 10257), + (7256, 4912, 4912, 4912, 4912, 9, 81, 13710, 16, 1320, 15, 5895, 10258), + (7257, 616, 616, 616, 616, 6, 78, 13711, 7, 900, 15, 6256, 7258), + (7258, 616, 616, 616, 616, 7, 81, 13712, 7, 900, 15, 7257, 7259), + (7259, 616, 616, 616, 616, 10, 84, 13713, 7, 900, 15, 7258, 10259), + (7260, -1, -1, 1504, 1504, 5, 81, -1, 0, 0, 15, 5882, 7261), + (7261, -1, -1, 1504, 1504, 5, 83, -1, 0, 0, 15, 7260, 7262), + (7262, -1, -1, 1504, 1504, 5, 85, -1, 0, 0, 15, 7261, -1), + (7263, -1, -1, 1577, 1577, 7, 81, -1, 0, 0, 15, 5888, 7264), + (7264, -1, -1, 1577, 1577, 9, 83, -1, 0, 0, 15, 7263, 7265), + (7265, -1, -1, 1577, 1577, 12, 85, -1, 0, 0, 15, 7264, 10262), + (7266, 6333, 6333, 6333, 6333, 6, 64, 13714, 3, 600, 15, 6333, 13920), + (7267, -1, -1, 795, 795, 7, 81, -1, 0, 0, 15, 5891, 7268), + (7268, -1, -1, 795, 795, 9, 83, -1, 0, 0, 15, 7267, 7269), + (7269, -1, -1, 795, 795, 12, 85, -1, 0, 0, 15, 7268, 10265), + (7270, -1, -1, 790, 790, 6, 81, -1, 0, 0, 15, 5324, 7271), + (7271, -1, -1, 790, 790, 6, 82, -1, 0, 0, 15, 7270, 7272), + (7272, -1, -1, 790, 790, 6, 83, -1, 0, 0, 15, 7271, 7273), + (7273, -1, -1, 790, 790, 6, 84, -1, 0, 0, 15, 7272, 7274), + (7274, -1, -1, 790, 790, 6, 85, -1, 0, 0, 15, 7273, 12950), + (7275, 1239, 1239, 1239, 1239, 12, 85, 13735, 6, 600, 15, 5868, 13251), + (7276, 773, -1, 773, 773, 7, 81, 13726, 5, 1800, 15, 5856, 7277), + (7277, 773, -1, 773, 773, 9, 83, 13727, 5, 1800, 15, 7276, 7278), + (7278, 773, -1, 773, 773, 12, 85, 13728, 5, 1800, 15, 7277, 10564), + (7279, 6552, 6552, 6552, 6552, 5, 75, -1, 0, 0, 15, 6253, 7280), + (7280, 6552, 6552, 6552, 6552, 6, 77, -1, 0, 0, 15, 7279, 7281), + (7281, 6552, 6552, 6552, 6552, 6, 79, -1, 0, 0, 15, 7280, 7282), + (7282, 6552, 6552, 6552, 6552, 7, 81, -1, 0, 0, 15, 7281, 7283), + (7283, 6552, 6552, 6552, 6552, 9, 83, -1, 0, 0, 15, 7282, -1), + (7284, -1, -1, 781, 781, 8, 82, -1, 0, 0, 15, 5850, 13763), + (7285, 1242, 1242, 1242, 1242, 7, 81, 13723, 9, 1320, 15, 5859, 7286), + (7286, 1242, 1242, 1242, 1242, 9, 83, 13724, 9, 1320, 15, 7285, 7287), + (7287, 1242, 1242, 1242, 1242, 12, 85, 13725, 9, 1320, 15, 7286, 10271), + (7288, 4894, 4894, 4894, 4894, 6, 81, 13732, 7, 2160, 15, 6354, 7289), + (7289, 4894, 4894, 4894, 4894, 6, 82, 13733, 7, 2160, 15, 7288, 7290), + (7290, 4894, 4894, 4894, 4894, 6, 83, 13734, 7, 2160, 15, 7289, 13247), + (7291, 4931, 4931, 4931, 4931, 7, 81, 13729, 4, 600, 15, 6056, 7292), + (7292, 4931, 4931, 4931, 4931, 7, 83, 13730, 4, 600, 15, 7291, 7293), + (7293, 4931, 4931, 4931, 4931, 7, 85, 13731, 4, 600, 15, 7292, 10274), + (7294, 4935, 4935, 4935, 4935, 7, 76, 13722, 14, 300, 15, 4935, 10277), + (7295, 4934, 4934, 4934, 4934, 7, 76, 13721, 13, 300, 15, 4934, 10278), + (7296, 517, 517, 517, 517, 5, 73, 13718, 12, 600, 15, 1444, 7297), + (7297, 517, 517, 517, 517, 5, 74, 13719, 12, 600, 15, 7296, 7298), + (7298, 517, 517, 517, 517, 5, 75, 13720, 12, 600, 15, 7297, 10279), + (7299, 1383, 1383, 1383, 1383, 12, 85, 16000, 6, 300, 15, 5789, 10014), + (7300, 1195, 1195, 1195, 1195, 9, 85, 16001, 13, 2160, 15, 5790, 10015), + (7301, 131, 131, 131, 131, 8, 82, 16002, 4, 900, 15, 5793, 7302), + (7302, 131, 131, 131, 131, 9, 83, 16003, 4, 900, 15, 7301, 7303), + (7303, 131, 131, 131, 131, 10, 84, 16004, 4, 900, 15, 7302, 10016), + (7304, 1192, 1192, 1192, 1192, 8, 82, 16005, 12, 1320, 15, 5796, 7305), + (7305, 1192, 1192, 1192, 1192, 9, 83, 16006, 12, 1320, 15, 7304, 7306), + (7306, 1192, 1192, 1192, 1192, 10, 84, 16007, 12, 1320, 15, 7305, 10019), + (7307, 746, 746, 746, 746, 9, 83, 16008, 10, 2160, 15, 5802, 7308), + (7308, 746, 746, 746, 746, 10, 84, 16009, 10, 2160, 15, 7307, 7309), + (7309, 746, 746, 746, 746, 12, 85, 16010, 10, 2160, 15, 7308, 10022), + (7310, 1459, 1459, 1459, 1459, 7, 81, 16011, 11, 1800, 15, 5805, 7311), + (7311, 1459, 1459, 1459, 1459, 9, 83, 16012, 11, 1800, 15, 7310, 7312), + (7312, 1459, 1459, 1459, 1459, 12, 85, 16013, 11, 1800, 15, 7311, -1), + (7313, -1, -1, 6436, 6436, 6, 78, -1, 0, 0, 15, 6438, 7314), + (7314, -1, -1, 6436, 6436, 6, 80, -1, 0, 0, 15, 7313, 7315), + (7315, -1, -1, 6436, 6436, 8, 82, -1, 0, 0, 15, 7314, -1), + (7316, -1, -1, 468, 468, 2, 72, -1, 0, 0, 15, 6440, 7317), + (7317, -1, -1, 468, 468, 2, 74, -1, 0, 0, 15, 7316, 17288), + (7318, -1, -1, 6601, 6601, 6, 77, -1, 0, 0, 15, 6605, 7319), + (7319, -1, -1, 6601, 6601, 6, 78, -1, 0, 0, 15, 7318, 7320), + (7320, -1, -1, 6601, 6601, 6, 79, -1, 0, 0, 15, 7319, 7321), + (7321, -1, -1, 6601, 6601, 6, 80, -1, 0, 0, 15, 7320, 7322), + (7322, -1, -1, 6601, 6601, 6, 81, -1, 0, 0, 15, 7321, 10025), + (7323, -1, -1, 7100, 7100, 6, 81, -1, 0, 0, 15, 7102, 7324), + (7324, -1, -1, 7100, 7100, 6, 82, -1, 0, 0, 15, 7323, 7325), + (7325, -1, -1, 7100, 7100, 6, 83, -1, 0, 0, 15, 7324, 8427), + (7326, -1, -1, 7103, 7103, 2, 70, -1, 0, 0, 15, 7105, 7327), + (7327, -1, -1, 7103, 7103, 2, 70, -1, 0, 0, 15, 7326, 7328), + (7328, -1, -1, 7103, 7103, 2, 70, -1, 0, 0, 15, 7327, 10750), + (7329, 534, 534, 534, 534, 7, 81, 16021, 4, 2160, 15, 5971, 7330), + (7330, 534, 534, 534, 534, 9, 83, 16022, 4, 2160, 15, 7329, 7331), + (7331, 534, 534, 534, 534, 12, 85, 16023, 4, 2160, 15, 7330, 10047), + (7332, 5095, 5095, 5095, 5095, 7, 81, 16024, 10, 900, 15, 5977, 7333), + (7333, 5095, 5095, 5095, 5095, 9, 83, 16025, 10, 900, 15, 7332, 7334), + (7334, 5095, 5095, 5095, 5095, 12, 85, 16026, 10, 900, 15, 7333, 10640), + (7335, 5984, 5984, 5984, 5984, 12, 85, 16027, 2, 30, 15, 5984, 7710), + (7336, -1, -1, 6395, 6395, 7, 81, -1, 0, 0, 15, 6397, 7337), + (7337, -1, -1, 6395, 6395, 7, 82, -1, 0, 0, 15, 7336, 7338), + (7338, -1, -1, 6395, 6395, 7, 83, -1, 0, 0, 15, 7337, 10050), + (7339, 188, 188, 188, 188, 9, 78, 16020, 2, 30, 14, 5044, 7662), + (7340, 7850, 7850, 7850, 7850, 8, 81, 16028, 39, 4320, 0, 7865, 10618), + (7341, 5007, 5007, 5007, 5007, 9, 81, 16047, 8, 2160, 15, 6427, 7342), + (7342, 5007, 5007, 5007, 5007, 9, 83, 16048, 8, 2160, 15, 7341, 7343), + (7343, 5007, 5007, 5007, 5007, 9, 85, 16049, 8, 2160, 15, 7342, 10061), + (7344, 545, 545, 545, 545, 7, 81, 16038, 3, 900, 15, 6002, 7345), + (7345, 545, 545, 545, 545, 9, 83, 16039, 3, 900, 15, 7344, 7346), + (7346, 545, 545, 545, 545, 12, 85, 16040, 3, 900, 15, 7345, 10758), + (7347, 1345, 1345, 1345, 1345, 8, 82, 16041, 6, 900, 15, 6010, 7348), + (7348, 1345, 1345, 1345, 1345, 9, 83, 16042, 6, 900, 15, 7347, 7349), + (7349, 1345, 1345, 1345, 1345, 10, 84, 16043, 6, 900, 15, 7348, 10740), + (7350, 6370, 6370, 6370, 6370, 6, 81, 16044, 7, 600, 15, 6372, 7351), + (7351, 6370, 6370, 6370, 6370, 6, 82, 16045, 7, 600, 15, 7350, 7352), + (7352, 6370, 6370, 6370, 6370, 6, 83, 16046, 7, 600, 15, 7351, 14112), + (7353, -1, -1, 864, 864, 6, 85, -1, 0, 0, 15, 6013, 7354), + (7354, -1, -1, 864, 864, 6, 85, -1, 0, 0, 15, 7353, 7355), + (7355, -1, -1, 864, 864, 6, 85, -1, 0, 0, 15, 7354, -1), + (7356, -1, -1, 5248, 5248, 7, 81, -1, 0, 0, 15, 6016, 7357), + (7357, -1, -1, 5248, 5248, 9, 83, -1, 0, 0, 15, 7356, 7358), + (7358, -1, -1, 5248, 5248, 12, 85, -1, 0, 0, 15, 7357, 16170), + (7359, -1, -1, 644, 644, 7, 79, -1, 0, 0, 15, 6019, 7360), + (7360, -1, -1, 644, 644, 9, 81, -1, 0, 0, 15, 7359, 7361), + (7361, -1, -1, 644, 644, 12, 83, -1, 0, 0, 15, 7360, 13092), + (7362, -1, -1, 867, 867, 5, 70, -1, 0, 0, 15, 871, 7363), + (7363, -1, -1, 867, 867, 5, 70, -1, 0, 0, 15, 7362, 7364), + (7364, -1, -1, 867, 867, 5, 70, -1, 0, 0, 15, 7363, 7365), + (7365, -1, -1, 867, 867, 5, 70, -1, 0, 0, 15, 7364, 7366), + (7366, -1, -1, 867, 867, 5, 70, -1, 0, 0, 15, 7365, 10748), + (7367, 872, 872, 872, 872, 3, 70, 16032, 5, 180, 15, 874, 7368), + (7368, 872, 872, 872, 872, 6, 70, 16033, 5, 180, 15, 7367, 7369), + (7369, 872, 872, 872, 872, 9, 70, 16034, 5, 180, 15, 7368, 10772), + (7370, 875, 875, 875, 875, 3, 70, 16035, 5, 180, 15, 877, 7371), + (7371, 875, 875, 875, 875, 6, 73, 16036, 5, 180, 15, 7370, 7372), + (7372, 875, 875, 875, 875, 9, 75, 16037, 5, 180, 15, 7371, 10775), + (7373, -1, -1, 6546, 6546, 0, 81, -1, 0, 0, 15, 6571, 7374), + (7374, -1, -1, 6546, 6546, 0, 82, -1, 0, 0, 15, 7373, 7375), + (7375, -1, -1, 6546, 6546, 0, 83, -1, 0, 0, 15, 7374, 7376), + (7376, -1, -1, 6546, 6546, 0, 84, -1, 0, 0, 15, 7375, 7377), + (7377, -1, -1, 6546, 6546, 0, 85, -1, 0, 0, 15, 7376, 13122), + (7378, -1, -1, 1608, 1608, 3, 71, -1, 0, 0, 15, 4991, 7379), + (7379, -1, -1, 1608, 1608, 6, 73, -1, 0, 0, 15, 7378, 7380), + (7380, -1, -1, 1608, 1608, 9, 75, -1, 0, 0, 15, 7379, 7381), + (7381, -1, -1, 1608, 1608, 6, 76, -1, 0, 0, 15, 7380, 7382), + (7382, -1, -1, 1608, 1608, 6, 78, -1, 0, 0, 15, 7381, 7383), + (7383, -1, -1, 1608, 1608, 6, 80, -1, 0, 0, 15, 7382, 10064), + (7384, -1, -1, 5085, 5085, 6, 81, -1, 0, 0, 15, 6408, 7385), + (7385, -1, -1, 5085, 5085, 6, 83, -1, 0, 0, 15, 7384, 7386), + (7386, -1, -1, 5085, 5085, 6, 85, -1, 0, 0, 15, 7385, 10383), + (7387, 6508, 6508, 6508, 6508, 7, 79, 16059, 38, 600, 15, 6510, 7388), + (7388, 6508, 6508, 6508, 6508, 7, 81, 16060, 38, 600, 15, 7387, 7389), + (7389, 6508, 6508, 6508, 6508, 7, 83, 16061, 38, 600, 15, 7388, 10078), + (7390, -1, -1, 589, 589, 7, 81, -1, 0, 0, 15, 6065, 7391), + (7391, -1, -1, 589, 589, 7, 83, -1, 0, 0, 15, 7390, 7392), + (7392, -1, -1, 589, 589, 7, 85, -1, 0, 0, 15, 7391, 7707), + (7393, -1, -1, 1313, 1313, 7, 81, -1, 0, 0, 15, 6071, 7394), + (7394, -1, -1, 1313, 1313, 7, 81, -1, 0, 0, 15, 7393, 7395), + (7395, -1, -1, 1313, 1313, 8, 82, -1, 0, 0, 15, 7394, 7396), + (7396, -1, -1, 1313, 1313, 9, 83, -1, 0, 0, 15, 7395, 7397), + (7397, -1, -1, 1313, 1313, 10, 84, -1, 0, 0, 15, 7396, 7398), + (7398, -1, -1, 1313, 1313, 12, 85, -1, 0, 0, 15, 7397, 10081), + (7399, -1, -1, 210, 210, 8, 82, -1, 0, 0, 15, 6074, 7400), + (7400, -1, -1, 210, 210, 9, 83, -1, 0, 0, 15, 7399, 7401), + (7401, -1, -1, 210, 210, 10, 84, -1, 0, 0, 15, 7400, 15172), + (7402, -1, -1, 895, 895, 7, 81, -1, 0, 0, 15, 6079, 7403), + (7403, -1, -1, 895, 895, 8, 82, -1, 0, 0, 15, 7402, 7404), + (7404, -1, -1, 895, 895, 9, 83, -1, 0, 0, 15, 7403, 7405), + (7405, -1, -1, 895, 895, 10, 84, -1, 0, 0, 15, 7404, 7406), + (7406, -1, -1, 895, 895, 12, 85, -1, 0, 0, 15, 7405, 10906), + (7407, -1, -1, 7407, 7407, 12, 85, 0, 0, 0, 16, -1, -1), + (7408, 1498, 1498, 1498, 1498, 7, 81, 16075, 12, 1320, 15, 5821, 7409), + (7409, 1498, 1498, 1498, 1498, 9, 83, 16076, 12, 1320, 15, 7408, 7410), + (7410, 1498, 1498, 1498, 1498, 12, 85, 16077, 12, 1320, 15, 7409, 10090), + (7411, 757, -1, 757, 757, 7, 81, 16078, 6, 1800, 15, 5824, 7412), + (7412, 757, -1, 757, 757, 9, 83, 16079, 6, 1800, 15, 7411, 7413), + (7413, 757, -1, 757, 757, 12, 85, 16080, 6, 1800, 15, 7412, 12658), + (7414, 1495, 1495, 1495, 1495, 7, 81, 16081, 30, 900, 15, 5828, 7415), + (7415, 1495, 1495, 1495, 1495, 9, 83, 16082, 30, 900, 15, 7414, 7416), + (7416, 1495, 1495, 1495, 1495, 12, 85, 16083, 30, 900, 15, 7415, 10093), + (7417, 548, 548, 548, 548, 8, 82, 16084, 5, 900, 15, 5831, 7418), + (7418, 548, 548, 548, 548, 9, 83, 16085, 5, 900, 15, 7417, 7419), + (7419, 548, 548, 548, 548, 10, 84, 16086, 5, 900, 15, 7418, 10096), + (7420, 5105, 5105, 5105, 5105, 12, 85, 16087, 11, 600, 15, 5832, 10509), + (7421, 6232, 6232, 6232, 6232, 12, 85, 16091, 18, 900, 15, 6232, -1), + (7422, 6561, 6561, 6561, 6561, 7, 81, 16088, 32, 30, 15, 6280, 7423), + (7423, 6561, 6561, 6561, 6561, 7, 81, 16089, 32, 30, 15, 7422, 7424), + (7424, 6561, 6561, 6561, 6561, 7, 81, 16090, 32, 30, 15, 7423, 10099), + (7425, 510, 510, 510, 510, 3, 66, 16072, 37, 240, 15, 512, 7426), + (7426, 510, 510, 510, 510, 3, 68, 16073, 37, 240, 15, 7425, 7427), + (7427, 510, 510, 510, 510, 3, 70, 16074, 37, 240, 15, 7426, 10102), + (7428, 6533, 6533, 6533, 6533, 10, 84, 13785, 15, 600, 15, 6200, 10139), + (7429, 6534, 6534, 6534, 6534, 9, 83, 13777, 16, 900, 15, 6201, 13524), + (7430, 1116, 1116, 1116, 1116, 7, 81, 13762, 4, 2160, 15, 5701, 7431), + (7431, 1116, 1116, 1116, 1116, 9, 83, 13763, 4, 2160, 15, 7430, 7432), + (7432, 1116, 1116, 1116, 1116, 12, 85, 13764, 4, 2160, 15, 7431, 10140), + (7433, 592, 592, 592, 592, 5, 81, 13765, 2, 18, 15, 5706, 7434), + (7434, 592, 592, 592, 592, 5, 82, 13766, 2, 18, 15, 7433, 7435), + (7435, 592, 592, 592, 592, 5, 83, 13767, 2, 18, 15, 7434, 7436), + (7436, 592, 592, 592, 592, 5, 84, 13768, 2, 18, 15, 7435, 7437), + (7437, 592, 592, 592, 592, 5, 85, 13769, 2, 18, 15, 7436, 12749), + (7438, 5298, 5298, 5298, 5298, 9, 83, 13770, 32, 1800, 15, 5709, 7439), + (7439, 5298, 5298, 5298, 5298, 10, 84, 13771, 32, 1800, 15, 7438, 7440), + (7440, 5298, 5298, 5298, 5298, 12, 85, 13772, 32, 1800, 15, 7439, 10143), + (7441, 1598, -1, 1598, 1598, 7, 81, 13773, 6, 900, 15, 5712, 7442), + (7442, 1598, -1, 1598, 1598, 9, 83, 13774, 6, 900, 15, 7441, 7443), + (7443, 1598, -1, 1598, 1598, 12, 85, 13775, 6, 900, 15, 7442, 10146), + (7444, 5020, 5020, 5020, 5020, 9, 82, 13776, 9, 300, 15, 5716, 10149), + (7445, 1110, 1110, 1110, 1110, 6, 78, 13778, 3, 2160, 15, 6402, 7446), + (7446, 1110, 1110, 1110, 1110, 6, 80, 13779, 3, 2160, 15, 7445, 7447), + (7447, 1110, 1110, 1110, 1110, 6, 81, 13780, 3, 2160, 15, 7446, 10150), + (7448, -1, -1, 6337, 6337, 6, 79, -1, 0, 0, 15, 6339, 7449), + (7449, -1, -1, 6337, 6337, 6, 81, -1, 0, 0, 15, 7448, 7450), + (7450, -1, -1, 6337, 6337, 6, 83, -1, 0, 0, 15, 7449, 10153), + (7451, -1, -1, 6340, 6340, 6, 79, -1, 0, 0, 15, 6342, 7452), + (7452, -1, -1, 6340, 6340, 6, 81, -1, 0, 0, 15, 7451, 7453), + (7453, -1, -1, 6340, 6340, 6, 83, -1, 0, 0, 15, 7452, 16306), + (7454, 5017, 5017, 5017, 5017, 3, 76, 13759, 8, 600, 15, 5019, 7455), + (7455, 5017, 5017, 5017, 5017, 6, 78, 13760, 8, 600, 15, 7454, 7456), + (7456, 5017, 5017, 5017, 5017, 9, 80, 13761, 8, 600, 15, 7455, 10156), + (7457, 1569, 1569, 1569, 1569, 7, 82, 13756, 5, 1800, 15, 5715, 7458), + (7458, 1569, 1569, 1569, 1569, 7, 83, 13757, 5, 1800, 15, 7457, 7459), + (7459, 1569, 1569, 1569, 1569, 7, 85, 13758, 5, 1800, 15, 7458, 10159), + (7460, 1327, 1327, 1327, 1327, 7, 81, 13792, 10, 900, 15, 6100, 7461), + (7461, 1327, 1327, 1327, 1327, 9, 83, 13793, 10, 900, 15, 7460, 7462), + (7462, 1327, 1327, 1327, 1327, 12, 85, 13794, 10, 900, 15, 7461, 10187), + (7463, 1520, 1520, 1520, 1520, 9, 75, 13801, 11, 900, 15, 6451, 7464), + (7464, 1520, 1520, 1520, 1520, 9, 75, 13802, 11, 900, 15, 7463, 7465), + (7465, 1520, 1520, 1520, 1520, 9, 75, 13803, 11, 900, 15, 7464, 10190), + (7466, 146, 146, 146, 146, 8, 82, 13796, 2, 180, 15, 6102, 7691), + (7467, 5109, 5109, 5109, 5109, 9, 82, 13800, 0, 1, 15, 6448, 13016), + (7468, 153, 153, 153, 153, 12, 85, 13795, 3, 2160, 15, 6101, 10193), + (7469, 528, 528, 528, 528, 7, 81, 13797, 5, 720, 15, 6105, 7470), + (7470, 528, 528, 528, 528, 9, 83, 13798, 5, 720, 15, 7469, 7471), + (7471, 528, 528, 528, 528, 12, 85, 13799, 5, 720, 15, 7470, 10194), + (7472, 5251, 5251, 5251, 5251, 7, 81, 13786, 13, 900, 15, 6094, 7473), + (7473, 5251, 5251, 5251, 5251, 9, 83, 13787, 13, 900, 15, 7472, 7474), + (7474, 5251, 5251, 5251, 5251, 12, 85, 13788, 13, 900, 15, 7473, 10197), + (7475, 513, 513, 513, 513, 7, 81, 13789, 4, 120, 15, 6097, 7476), + (7476, 513, 513, 513, 513, 9, 83, 13790, 4, 120, 15, 7475, 7477), + (7477, 513, 513, 513, 513, 12, 85, 13791, 4, 120, 15, 7476, -1), + (7478, -1, -1, 6538, 6538, 12, 85, -1, 0, 0, 15, 6211, 15421), + (7479, 1119, 1119, 1119, 1119, 7, 83, 13805, 8, 900, 15, 5736, 7480), + (7480, 1119, 1119, 1119, 1119, 8, 84, 13806, 8, 900, 15, 7479, 7481), + (7481, 1119, 1119, 1119, 1119, 9, 85, 13807, 8, 900, 15, 7480, 10297), + (7482, 723, 723, 723, 723, 7, 81, 13808, 6, 30, 15, 5737, 10300), + (7483, 5015, 5015, 5015, 5015, 12, 85, 13809, 9, 900, 15, 5741, 10301), + (7484, 289, 289, 289, 289, 12, 85, 13810, 3, 300, 15, 5742, -1), + (7485, 291, 291, 291, 291, 9, 83, 13811, 5, 900, 15, 5745, 7486), + (7486, 291, 291, 291, 291, 10, 84, 13812, 5, 900, 15, 7485, 7487), + (7487, 291, 291, 291, 291, 12, 85, 13813, 5, 900, 15, 7486, 10302), + (7488, 6218, 6218, 6218, 6218, 7, 81, 13814, 0, 1, 15, 6218, 14272), + (7489, -1, -1, 724, 724, 7, 81, -1, 0, 0, 15, 5733, 7490), + (7490, -1, -1, 724, 724, 8, 82, -1, 0, 0, 15, 7489, 7491), + (7491, -1, -1, 724, 724, 9, 83, -1, 0, 0, 15, 7490, 7492), + (7492, -1, -1, 724, 724, 10, 84, -1, 0, 0, 15, 7491, 7493), + (7493, -1, -1, 724, 724, 12, 85, -1, 0, 0, 15, 7492, 16890), + (7494, -1, -1, 729, 729, 7, 81, -1, 0, 0, 15, 5740, 7495), + (7495, -1, -1, 729, 729, 8, 82, -1, 0, 0, 15, 7494, 7496), + (7496, -1, -1, 729, 729, 9, 83, -1, 0, 0, 15, 7495, 10305), + (7497, 6380, 6380, 6380, 6380, 6, 83, 13815, 39, 120, 15, 6382, 7498), + (7498, 6380, 6380, 6380, 6380, 6, 84, 13816, 39, 120, 15, 7497, 7499), + (7499, 6380, 6380, 6380, 6380, 6, 85, 13817, 39, 120, 15, 7498, 10308), + (7500, -1, -1, 4699, 4699, 5, 61, -1, 0, 0, 15, 6540, 10788), + (7501, -1, -1, 125, 125, 6, 81, -1, 0, 0, 15, 5523, 7502), + (7502, -1, -1, 125, 125, 7, 82, -1, 0, 0, 15, 7501, 7503), + (7503, -1, -1, 125, 125, 8, 83, -1, 0, 0, 15, 7502, 7504), + (7504, -1, -1, 125, 125, 9, 84, -1, 0, 0, 15, 7503, 7505), + (7505, -1, -1, 125, 125, 10, 85, -1, 0, 0, 15, 7504, 12396), + (7506, -1, -1, 122, 122, 6, 81, -1, 0, 0, 15, 5528, 7507), + (7507, -1, -1, 122, 122, 7, 82, -1, 0, 0, 15, 7506, 7508), + (7508, -1, -1, 122, 122, 8, 83, -1, 0, 0, 15, 7507, 7509), + (7509, -1, -1, 122, 122, 9, 84, -1, 0, 0, 15, 7508, 7510), + (7510, -1, -1, 122, 122, 10, 85, -1, 0, 0, 15, 7509, 12401), + (7511, -1, -1, 1026, 1026, 5, 81, -1, 0, 0, 15, 6527, 7512), + (7512, -1, -1, 1026, 1026, 5, 82, -1, 0, 0, 15, 7511, 7513), + (7513, -1, -1, 1026, 1026, 5, 83, -1, 0, 0, 15, 7512, 7514), + (7514, -1, -1, 1026, 1026, 5, 84, -1, 0, 0, 15, 7513, 7515), + (7515, -1, -1, 1026, 1026, 5, 85, -1, 0, 0, 15, 7514, 7886), + (7516, -1, -1, 1006, 1006, 5, 71, -1, 0, 0, 15, 1010, 7517), + (7517, -1, -1, 1006, 1006, 5, 72, -1, 0, 0, 15, 7516, 7518), + (7518, -1, -1, 1006, 1006, 5, 73, -1, 0, 0, 15, 7517, 7519), + (7519, -1, -1, 1006, 1006, 5, 74, -1, 0, 0, 15, 7518, 7520), + (7520, -1, -1, 1006, 1006, 5, 75, -1, 0, 0, 15, 7519, 7837), + (7521, -1, -1, 1056, 1056, 5, 81, -1, 0, 0, 15, 6435, 7522), + (7522, -1, -1, 1056, 1056, 5, 82, -1, 0, 0, 15, 7521, 7523), + (7523, -1, -1, 1056, 1056, 5, 83, -1, 0, 0, 15, 7522, 7524), + (7524, -1, -1, 1056, 1056, 5, 84, -1, 0, 0, 15, 7523, 7525), + (7525, -1, -1, 1056, 1056, 5, 85, -1, 0, 0, 15, 7524, 16414), + (7526, -1, -1, 6119, 6119, 6, 81, -1, 0, 0, 15, 6123, 7527), + (7527, -1, -1, 6119, 6119, 6, 82, -1, 0, 0, 15, 7526, 7528), + (7528, -1, -1, 6119, 6119, 6, 83, -1, 0, 0, 15, 7527, 7529), + (7529, -1, -1, 6119, 6119, 6, 84, -1, 0, 0, 15, 7528, 7530), + (7530, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 15, 7529, 12406), + (7534, -1, -1, 65, 661, 3, 81, -1, 0, 0, 15, 6394, 7535), + (7535, -1, -1, 65, 661, 3, 82, -1, 0, 0, 15, 7534, 7536), + (7536, -1, -1, 65, 661, 3, 83, -1, 0, 0, 15, 7535, 7537), + (7537, -1, -1, 65, 661, 3, 84, -1, 0, 0, 15, 7536, 7538), + (7538, -1, -1, 65, 661, 3, 85, -1, 0, 0, 15, 7537, 7904), + (7539, -1, -1, 1021, 1021, 5, 80, -1, 0, 0, 16, 6522, 7540), + (7540, -1, -1, 1021, 1021, 5, 85, -1, 0, 0, 16, 7539, 7683), + (7541, -1, -1, 107, 107, 2, 60, -1, 0, 0, 15, 109, 7542), + (7542, -1, -1, 107, 107, 4, 60, -1, 0, 0, 15, 7541, 7543), + (7543, -1, -1, 107, 107, 6, 60, -1, 0, 0, 15, 7542, -1), + (7544, -1, -1, 678, 678, 3, 70, -1, 0, 0, 15, 6520, 7545), + (7545, -1, -1, 678, 678, 3, 70, -1, 0, 0, 15, 7544, 7546), + (7546, -1, -1, 678, 678, 3, 70, -1, 0, 0, 15, 7545, -1), + (7547, -1, -1, 418, 418, 5, 76, -1, 0, 0, 15, 4682, 7548), + (7548, -1, -1, 418, 418, 5, 77, -1, 0, 0, 15, 7547, 7549), + (7549, -1, -1, 418, 418, 5, 78, -1, 0, 0, 15, 7548, 7550), + (7550, -1, -1, 418, 418, 5, 79, -1, 0, 0, 15, 7549, 7551), + (7551, -1, -1, 418, 418, 5, 80, -1, 0, 0, 15, 7550, -1), + (7553, -1, -1, 1071, 1071, 6, 80, -1, 0, 0, 16, 4764, 7681), + (7554, -1, -1, 1486, 1486, 7, 81, -1, 0, 0, 15, 5533, 7555), + (7555, -1, -1, 1486, 1486, 8, 82, -1, 0, 0, 15, 7554, 7556), + (7556, -1, -1, 1486, 1486, 9, 83, -1, 0, 0, 15, 7555, 7557), + (7557, -1, -1, 1486, 1486, 10, 84, -1, 0, 0, 15, 7556, 7558), + (7558, -1, -1, 1486, 1486, 12, 85, -1, 0, 0, 15, 7557, 7722), + (7559, -1, -1, 599, 599, 9, 83, -1, 0, 0, 15, 5536, 7560), + (7560, -1, -1, 599, 599, 10, 84, -1, 0, 0, 15, 7559, 7561), + (7561, -1, -1, 599, 599, 12, 85, -1, 0, 0, 15, 7560, 13026), + (7562, -1, -1, 1041, 1041, 7, 81, -1, 0, 0, 15, 5544, 7563), + (7563, -1, -1, 1041, 1041, 9, 83, -1, 0, 0, 15, 7562, 7564), + (7564, -1, -1, 1041, 1041, 12, 85, -1, 0, 0, 15, 7563, 12697), + (7565, -1, -1, 119, 119, 7, 81, -1, 0, 0, 15, 5556, 7566), + (7566, -1, -1, 119, 119, 9, 83, -1, 0, 0, 15, 7565, 7567), + (7567, -1, -1, 119, 119, 12, 85, -1, 0, 0, 15, 7566, 6023), + (7568, -1, -1, 1592, 1592, 7, 81, -1, 0, 0, 15, 5561, 7569), + (7569, -1, -1, 1592, 1592, 8, 82, -1, 0, 0, 15, 7568, 7570), + (7570, -1, -1, 1592, 1592, 9, 83, -1, 0, 0, 15, 7569, 7571), + (7571, -1, -1, 1592, 1592, 10, 84, -1, 0, 0, 15, 7570, 7572), + (7572, -1, -1, 1592, 1592, 12, 85, -1, 0, 0, 15, 7571, 12439), + (7573, -1, -1, 4739, 4739, 7, 81, -1, 0, 0, 15, 5564, 7574), + (7574, -1, -1, 4739, 4739, 9, 83, -1, 0, 0, 15, 7573, 7575), + (7575, -1, -1, 4739, 4739, 12, 85, -1, 0, 0, 15, 7574, -1), + (7576, -1, -1, 1072, 1072, 7, 81, -1, 0, 0, 15, 5570, 7577), + (7577, -1, -1, 1072, 1072, 8, 82, -1, 0, 0, 15, 7576, 7578), + (7578, -1, -1, 1072, 1072, 9, 83, -1, 0, 0, 15, 7577, 7579), + (7579, -1, -1, 1072, 1072, 10, 84, -1, 0, 0, 15, 7578, 7580), + (7580, -1, -1, 1072, 1072, 12, 85, -1, 0, 0, 15, 7579, 12444), + (7581, -1, -1, 1210, 1213, 7, 81, -1, 0, 0, 15, 5579, 7582), + (7582, -1, -1, 1210, 1213, 9, 83, -1, 0, 0, 15, 7581, 7583), + (7583, -1, -1, 1210, 1213, 12, 85, -1, 0, 0, 15, 7582, 8344), + (7584, -1, -1, 98, 98, 7, 81, -1, 0, 0, 15, 5588, 7585), + (7585, -1, -1, 98, 98, 9, 83, -1, 0, 0, 15, 7584, 7586), + (7586, -1, -1, 98, 98, 12, 85, -1, 0, 0, 15, 7585, 11061), + (7587, -1, -1, 1186, 1186, 7, 81, -1, 0, 0, 15, 5591, 7588), + (7588, -1, -1, 1186, 1186, 9, 83, -1, 0, 0, 15, 7587, 7589), + (7589, -1, -1, 1186, 1186, 12, 85, -1, 0, 0, 15, 7588, 7692), + (7590, -1, -1, 80, 80, 7, 81, -1, 0, 0, 15, 5594, 7591), + (7591, -1, -1, 80, 80, 9, 83, -1, 0, 0, 15, 7590, 7592), + (7592, -1, -1, 80, 80, 12, 85, -1, 0, 0, 15, 7591, 12452), + (7593, -1, -1, 658, 658, 5, 81, -1, 0, 0, 15, 5627, 7594), + (7594, -1, -1, 658, 658, 5, 82, -1, 0, 0, 15, 7593, 7595), + (7595, -1, -1, 658, 658, 5, 83, -1, 0, 0, 15, 7594, 7596), + (7596, -1, -1, 658, 658, 5, 84, -1, 0, 0, 15, 7595, 7597), + (7597, -1, -1, 658, 658, 5, 85, -1, 0, 0, 15, 7596, 12455), + (7598, -1, -1, 98, 738, 7, 81, -1, 0, 0, 15, 5630, 7599), + (7599, -1, -1, 98, 738, 9, 83, -1, 0, 0, 15, 7598, 7600), + (7600, -1, -1, 98, 738, 12, 85, -1, 0, 0, 15, 7599, 13924), + (7601, -1, -1, 6051, 6051, 3, 81, -1, 0, 0, 15, 6053, 7602), + (7602, -1, -1, 6051, 6051, 3, 83, -1, 0, 0, 15, 7601, 7603), + (7603, -1, -1, 6051, 6051, 3, 85, -1, 0, 0, 15, 7602, 10604), + (7604, -1, -1, 683, 683, 5, 80, -1, 0, 0, 15, 6081, 7605), + (7605, -1, -1, 683, 683, 5, 80, -1, 0, 0, 15, 7604, 12694), + (7606, 6537, 6537, 6537, 6537, 7, 81, 13821, 30, 900, 15, 6208, 7607), + (7607, 6537, 6537, 6537, 6537, 8, 82, 13822, 30, 900, 15, 7606, 7608), + (7608, 6537, 6537, 6537, 6537, 9, 83, 13823, 30, 900, 15, 7607, 12460), + (7609, 6539, 6539, 6539, 6539, 6, 76, 13824, 18, 1800, 15, 6214, 7610), + (7610, 6539, 6539, 6539, 6539, 6, 79, 13825, 18, 1800, 15, 7609, 7611), + (7611, 6539, 6539, 6539, 6539, 6, 82, 13826, 18, 1800, 15, 7610, 12942), + (7612, -1, -1, 270, 665, 2, 66, -1, 0, 0, 15, 670, 7613), + (7613, -1, -1, 270, 665, 2, 67, -1, 0, 0, 15, 7612, 7614), + (7614, -1, -1, 270, 665, 2, 68, -1, 0, 0, 15, 7613, -1), + (7615, -1, -1, 6346, 6346, 6, 79, -1, 0, 0, 15, 6348, 7616), + (7616, -1, -1, 6346, 6346, 6, 81, -1, 0, 0, 15, 7615, 7617), + (7617, -1, -1, 6346, 6346, 6, 83, -1, 0, 0, 15, 7616, 15397), + (7618, -1, -1, 6349, 6349, 6, 79, -1, 0, 0, 15, 6351, 7619), + (7619, -1, -1, 6349, 6349, 6, 81, -1, 0, 0, 15, 7618, 7620), + (7620, -1, -1, 6349, 6349, 6, 83, -1, 0, 0, 15, 7619, 11053), + (7621, -1, -1, 1435, 4773, 9, 81, -1, 0, 0, 15, 6517, 13090), + (7622, -1, -1, 446, 735, 8, 81, -1, 0, 0, 15, 7065, 7623), + (7623, -1, -1, 446, 735, 8, 82, -1, 0, 0, 15, 7622, 7624), + (7624, -1, -1, 446, 735, 8, 83, -1, 0, 0, 15, 7623, 10473), + (7625, -1, -1, 735, 735, 8, 81, -1, 0, 0, 15, 7068, 7626), + (7626, -1, -1, 735, 735, 8, 82, -1, 0, 0, 15, 7625, 7627), + (7627, -1, -1, 735, 735, 8, 83, -1, 0, 0, 15, 7626, 10632), + (7628, -1, -1, 807, 807, 5, 81, -1, 0, 0, 15, 5924, 7629), + (7629, -1, -1, 807, 807, 5, 83, -1, 0, 0, 15, 7628, 7630), + (7630, -1, -1, 807, 807, 5, 85, -1, 0, 0, 15, 7629, 12685), + (7631, -1, -1, 255, 255, 7, 81, -1, 0, 0, 15, 5597, 7632), + (7632, -1, -1, 255, 255, 9, 83, -1, 0, 0, 15, 7631, 7633), + (7633, -1, -1, 255, 255, 12, 85, -1, 0, 0, 15, 7632, 17441), + (7634, -1, -1, 815, 815, 9, 83, -1, 0, 0, 15, 5913, 7635), + (7635, -1, -1, 815, 815, 10, 84, -1, 0, 0, 15, 7634, 7636), + (7636, -1, -1, 815, 815, 12, 85, -1, 0, 0, 15, 7635, 15441), + (7637, -1, -1, 1616, 1616, 5, 83, -1, 0, 0, 15, 6007, 7638), + (7638, -1, -1, 1616, 1616, 5, 84, -1, 0, 0, 15, 7637, 7639), + (7639, -1, -1, 1616, 1616, 5, 85, -1, 0, 0, 15, 7638, -1), + (7640, -1, -1, 686, 686, 5, 60, -1, 0, 0, 15, 690, 12438), + (7641, -1, -1, 625, 625, 3, 76, -1, 0, 0, 15, 4735, 7642), + (7642, -1, -1, 625, 625, 3, 78, -1, 0, 0, 15, 7641, 7643), + (7643, -1, -1, 625, 625, 3, 80, -1, 0, 0, 15, 7642, -1), + (7644, -1, -1, 6375, 6375, 6, 81, -1, 0, 0, 15, 6377, 7645), + (7645, -1, -1, 6375, 6375, 6, 82, -1, 0, 0, 15, 7644, 7646), + (7646, -1, -1, 6375, 6375, 6, 83, -1, 0, 0, 15, 7645, 7663), + (7647, -1, -1, 692, 692, 6, 60, -1, 0, 0, 15, 694, 7648), + (7648, -1, -1, 692, 692, 6, 60, -1, 0, 0, 15, 7647, 7649), + (7649, -1, -1, 692, 692, 6, 60, -1, 0, 0, 15, 7648, 7670), + (7650, -1, -1, 1044, 1044, 7, 81, -1, 0, 0, 15, 5547, 7651), + (7651, -1, -1, 1044, 1044, 9, 83, -1, 0, 0, 15, 7650, 7652), + (7652, -1, -1, 1044, 1044, 12, 85, -1, 0, 0, 15, 7651, 13074), + (7653, -1, -1, 1047, 1047, 7, 81, -1, 0, 0, 15, 5550, 7654), + (7654, -1, -1, 1047, 1047, 9, 83, -1, 0, 0, 15, 7653, 7655), + (7655, -1, -1, 1047, 1047, 12, 85, -1, 0, 0, 15, 7654, 13077), + (7656, -1, -1, 1050, 1050, 7, 81, -1, 0, 0, 15, 5553, 7657), + (7657, -1, -1, 1050, 1050, 9, 83, -1, 0, 0, 15, 7656, 7658), + (7658, -1, -1, 1050, 1050, 12, 85, -1, 0, 0, 15, 7657, 13023), + (7659, -1, -1, 754, 754, 3, 70, -1, 0, 0, 15, 756, 7660), + (7660, -1, -1, 754, 754, 6, 70, -1, 0, 0, 15, 7659, 7661), + (7661, -1, -1, 754, 754, 9, 70, -1, 0, 0, 15, 7660, -1), + (7662, 188, 188, 188, 188, 9, 83, 16431, 2, 30, 15, 7339, 10647), + (7663, -1, -1, 6375, 6375, 6, 83, -1, 0, 0, 15, 7646, 10084), + (7664, -1, -1, 7664, 7664, 2, 73, -1, 0, 0, 15, -1, 7665), + (7665, -1, -1, 7664, 7664, 2, 74, -1, 0, 0, 15, 7664, 7666), + (7666, -1, -1, 7664, 7664, 2, 75, -1, 0, 0, 15, 7665, 7667), + (7667, -1, -1, 7664, 7664, 2, 76, -1, 0, 0, 15, 7666, 7668), + (7668, -1, -1, 7664, 7664, 2, 77, -1, 0, 0, 15, 7667, 10105), + (7669, 7669, 7669, 7669, 7669, 3, 81, 13838, 35, 5, 15, -1, -1), + (7670, -1, -1, 692, 692, 7, 75, -1, 0, 0, 16, 7649, 7671), + (7671, -1, -1, 692, 692, 9, 80, -1, 0, 0, 16, 7670, 7672), + (7672, -1, -1, 692, 692, 12, 85, -1, 0, 0, 16, 7671, 12767), + (7673, -1, -1, 855, 855, 5, 75, -1, 0, 0, 16, 859, 7674), + (7674, -1, -1, 855, 855, 5, 75, -1, 0, 0, 16, 7673, 7675), + (7675, -1, -1, 855, 855, 5, 75, -1, 0, 0, 16, 7674, 7676), + (7676, -1, -1, 855, 855, 5, 75, -1, 0, 0, 16, 7675, 7677), + (7677, -1, -1, 855, 855, 5, 75, -1, 0, 0, 16, 7676, 10688), + (7678, -1, -1, 852, 852, 9, 81, -1, 0, 0, 16, 5502, 7679), + (7679, -1, -1, 852, 852, 10, 83, -1, 0, 0, 16, 7678, 7680), + (7680, -1, -1, 852, 852, 12, 85, -1, 0, 0, 16, 7679, 12576), + (7681, -1, -1, 1071, 1071, 6, 80, -1, 0, 0, 16, 7553, -1), + (7682, -1, -1, 4861, 4861, 12, 85, -1, 0, 0, 16, 7216, 12757), + (7683, -1, -1, 1021, 1021, 5, 85, -1, 0, 0, 16, 7540, 7684), + (7684, -1, -1, 1021, 1021, 5, 85, -1, 0, 0, 16, 7683, 7685), + (7685, -1, -1, 1021, 1021, 5, 85, -1, 0, 0, 16, 7684, 13894), + (7686, -1, -1, 4844, 4844, 5, 81, -1, 0, 0, 16, 7126, 7687), + (7687, -1, -1, 4844, 4844, 5, 83, -1, 0, 0, 16, 7686, 7688), + (7688, -1, -1, 4844, 4844, 5, 85, -1, 0, 0, 16, 7687, -1), + (7689, 7689, 7689, 7689, 7689, 12, 85, 21820, 94, 180, 16, -1, -1), + (7690, -1, -1, 7690, 7690, 12, 85, -1, 0, 0, 16, -1, -1), + (7691, 146, 146, 146, 146, 8, 85, 16862, 2, 180, 16, 7466, 13256), + (7692, -1, -1, 1186, 1186, 12, 85, -1, 0, 0, 16, 7589, 7693), + (7693, -1, -1, 1186, 1186, 12, 85, -1, 0, 0, 16, 7692, 7694), + (7694, -1, -1, 1186, 1186, 12, 85, -1, 0, 0, 16, 7693, 12564), + (7695, -1, -1, 7695, 7695, 6, 85, -1, 0, 0, 16, -1, 7696), + (7696, -1, -1, 7695, 7695, 6, 85, -1, 0, 0, 16, 7695, 7697), + (7697, -1, -1, 7695, 7695, 6, 85, -1, 0, 0, 16, 7696, -1), + (7698, 7698, 7698, 7698, 7698, 6, 85, 21763, 17, 6, 16, -1, -1), + (7699, -1, -1, 7699, 7699, 12, 85, 0, 0, 0, 16, -1, -1), + (7700, -1, -1, 255, 255, 7, 81, -1, 0, 0, 16, -1, 7701), + (7701, -1, -1, 255, 255, 9, 83, -1, 0, 0, 16, 7700, 7702), + (7702, -1, -1, 255, 255, 12, 85, -1, 0, 0, 16, 7701, 12610), + (7703, 7703, 7703, 7703, 7703, 12, 85, 21754, 16, 600, 16, -1, -1), + (7704, -1, -1, 8195, 8195, 5, 81, -1, 0, 0, 16, 8197, 7705), + (7705, -1, -1, 8195, 8195, 5, 83, -1, 0, 0, 16, 7704, 7706), + (7706, -1, -1, 8195, 8195, 5, 85, -1, 0, 0, 16, 7705, -1), + (7707, -1, -1, 589, 589, 7, 85, -1, 0, 0, 16, 7392, 7708), + (7708, -1, -1, 589, 589, 7, 85, -1, 0, 0, 16, 7707, 7709), + (7709, -1, -1, 589, 589, 7, 85, -1, 0, 0, 16, 7708, 13104), + (7710, 5984, 5984, 5984, 5984, 12, 85, 21679, 2, 30, 16, 7335, 7711), + (7711, 5984, 5984, 5984, 5984, 12, 85, 21680, 2, 30, 16, 7710, 10626), + (7712, 7712, 7712, 7712, 7712, 12, 85, 21682, 2, 30, 16, -1, 10646), + (7713, -1, -1, 634, 634, 12, 81, -1, 0, 0, 16, 5613, 7714), + (7714, -1, -1, 634, 634, 12, 83, -1, 0, 0, 16, 7713, 10778), + (7715, -1, -1, 7715, 7715, 5, 77, 0, 0, 0, 16, -1, 7716), + (7716, -1, -1, 7715, 7715, 5, 79, 0, 0, 0, 16, 7715, 7717), + (7717, -1, -1, 7715, 7715, 5, 81, 0, 0, 0, 16, 7716, 14314), + (7718, -1, -1, 574, 574, 3, 81, -1, 0, 0, 16, 576, -1), + (7722, -1, -1, 1486, 1486, 7, 86, -1, 0, 0, 17, 7558, 7723), + (7723, -1, -1, 1486, 1486, 8, 87, -1, 0, 0, 17, 7722, 7724), + (7724, -1, -1, 1486, 1486, 9, 88, -1, 0, 0, 17, 7723, 7725), + (7725, -1, -1, 1486, 1486, 10, 89, -1, 0, 0, 17, 7724, 7726), + (7726, -1, -1, 1486, 1486, 12, 90, -1, 0, 0, 17, 7725, 7842), + (7732, 7732, 7732, 7732, 7732, 0, 60, 7732, 34, 3600, 14, -1, -1), + (7733, -1, -1, 288, 288, 6, 65, -1, 0, 0, 14, -1, -1), + (7734, 7734, 7734, 7734, 7734, 0, 61, 7734, 34, 28800, 14, -1, -1), + (7735, 7735, 7735, 7735, 7735, 0, 51, 7731, 32, 3600, 9, -1, -1), + (7736, 7736, 7736, 7736, 7736, 0, 52, 7865, 32, 10800, 9, -1, -1), + (7737, 7737, 7737, 7737, 7737, 0, 53, 7733, 32, 10800, 9, -1, -1), + (7738, 7738, 7738, 7738, 7738, 0, 54, 7990, 32, 21600, 9, -1, -1), + (7739, 7739, 7739, 7739, 7739, 0, 65, 13064, 36, 3600, 0, -1, -1), + (7740, 7740, 7740, 7740, 7740, 0, 66, 13065, 36, 28800, 0, -1, -1), + (7741, 7741, 7741, 7741, 7741, 0, 70, 21854, 50, 3600, 0, -1, -1), + (7742, 7742, 7742, 7742, 7742, 0, 71, 21855, 50, 28800, 0, -1, -1), + (7743, -1, -1, 7743, 7743, 5, 61, -1, 0, 0, 16, -1, 7744), + (7744, -1, -1, 7743, 7743, 7, 61, -1, 0, 0, 16, 7743, 7745), + (7745, -1, -1, 7743, 7743, 9, 61, -1, 0, 0, 16, 7744, 10717), + (7746, -1, -1, 7746, 7746, 5, 85, -1, 0, 0, 16, -1, 7763), + (7747, 7747, 7747, 7747, 7747, 9, 85, 21790, 32, 180, 16, -1, -1), + (7748, -1, -1, 7748, 7748, 3, 81, -1, 0, 0, 16, -1, 7749), + (7749, -1, -1, 7748, 7748, 6, 83, -1, 0, 0, 16, 7748, 7750), + (7750, -1, -1, 7748, 7748, 9, 85, -1, 0, 0, 16, 7749, -1), + (7751, -1, -1, 7751, 7751, 5, 85, -1, 0, 0, 16, -1, 7752), + (7752, -1, -1, 7751, 7751, 5, 85, -1, 0, 0, 16, 7751, 7753), + (7753, -1, -1, 7751, 7751, 5, 85, -1, 0, 0, 16, 7752, 14132), + (7754, 7754, 7754, 7754, 7754, 9, 85, 21803, 0, 1, 16, -1, -1), + (7755, 7755, 7755, 7755, 7755, 9, 81, 21804, 53, 900, 16, -1, 15782), + (7756, 7756, 7756, 7756, 7756, 12, 85, 21805, 54, 120, 16, -1, -1), + (7757, -1, -1, 7757, 7757, 5, 85, -1, 0, 0, 16, -1, 7758), + (7758, -1, -1, 7757, 7757, 7, 85, -1, 0, 0, 16, 7757, 7759), + (7759, -1, -1, 7757, 7757, 9, 85, -1, 0, 0, 16, 7758, 12587), + (7760, -1, -1, 7760, 7760, 5, 85, -1, 0, 0, 16, -1, 7761), + (7761, -1, -1, 7760, 7760, 7, 85, -1, 0, 0, 16, 7760, 7762), + (7762, -1, -1, 7760, 7760, 9, 85, -1, 0, 0, 16, 7761, -1), + (7763, -1, -1, 7746, 7746, 5, 85, -1, 0, 0, 16, 7746, 7764), + (7764, -1, -1, 7746, 7746, 5, 85, -1, 0, 0, 16, 7763, -1), + (7765, -1, -1, 7765, 7765, 5, 86, 0, 0, 0, 17, -1, 7766), + (7766, -1, -1, 7765, 7765, 7, 87, 0, 0, 0, 17, 7765, 7767), + (7767, -1, -1, 7765, 7765, 9, 88, 0, 0, 0, 17, 7766, 7768), + (7768, -1, -1, 7765, 7765, 12, 89, 0, 0, 0, 17, 7767, 7769), + (7770, 131, 131, 131, 131, 9, 86, 27655, 4, 900, 17, 10018, 7771), + (7771, 131, 131, 131, 131, 12, 88, 27656, 4, 900, 17, 7770, 7772), + (7772, 131, 131, 131, 131, 15, 90, 27657, 4, 900, 17, 7771, 13374), + (7773, 7951, 7951, 7951, 7951, 9, 86, 27658, 61, 900, 17, 10040, 7774), + (7774, 7951, 7951, 7951, 7951, 9, 88, 27659, 61, 900, 17, 7773, 7775), + (7775, 7951, 7951, 7951, 7951, 9, 90, 27660, 61, 900, 17, 7774, 13377), + (7800, 7800, 7800, 7800, 7800, 0, 1, 13531, 39, 4320, 0, -1, 7801), + (7801, 7800, 7800, 7800, 7800, 0, 6, 13532, 39, 4320, 0, 7800, 7802), + (7802, 7800, 7800, 7800, 7800, 0, 11, 13533, 39, 4320, 0, 7801, 7803), + (7803, 7800, 7800, 7800, 7800, 0, 16, 13534, 39, 4320, 0, 7802, 7804), + (7804, 7800, 7800, 7800, 7800, 0, 21, 13535, 39, 4320, 0, 7803, 7805), + (7805, 7800, 7800, 7800, 7800, 0, 26, 13536, 39, 4320, 0, 7804, 7806), + (7806, 7800, 7800, 7800, 7800, 0, 31, 13537, 39, 4320, 0, 7805, 7807), + (7807, 7800, 7800, 7800, 7800, 0, 36, 13538, 39, 4320, 0, 7806, 7808), + (7808, 7800, 7800, 7800, 7800, 0, 41, 13539, 39, 4320, 0, 7807, 7809), + (7809, 7800, 7800, 7800, 7800, 0, 46, 13540, 39, 4320, 0, 7808, 7810), + (7810, 7800, 7800, 7800, 7800, 3, 51, 13541, 39, 4320, 0, 7809, 7811), + (7811, 7800, 7800, 7800, 7800, 4, 56, 13542, 39, 4320, 0, 7810, 7812), + (7812, 7800, 7800, 7800, 7800, 5, 61, 13543, 39, 4320, 0, 7811, 7813), + (7813, 7800, 7800, 7800, 7800, 6, 66, 13544, 39, 4320, 0, 7812, 7814), + (7814, 7800, 7800, 7800, 7800, 7, 71, 13545, 39, 4320, 0, 7813, 7815), + (7815, 7800, 7800, 7800, 7800, 8, 76, 13562, 39, 4320, 0, 7814, 7816), + (7816, 7800, 7800, 7800, 7800, 8, 81, 16062, 39, 4320, 0, 7815, 7817), + (7817, 7800, 7800, 7800, 7800, 9, 83, 16855, 39, 4320, 0, 7816, 10786), + (7818, -1, -1, 7818, 7818, 12, 85, 21750, 0, 0, 16, -1, 13029), + (7819, -1, -1, 9512, 9512, 7, 85, -1, 0, 0, 16, 9514, 7820), + (7820, -1, -1, 9512, 9512, 7, 85, -1, 0, 0, 16, 7819, 7821), + (7821, -1, -1, 9512, 9512, 7, 85, -1, 0, 0, 16, 7820, 7881), + (7822, -1, -1, 7822, 7822, 5, 77, 0, 0, 0, 16, -1, 7823), + (7823, -1, -1, 7822, 7822, 5, 79, 0, 0, 0, 16, 7822, 7824), + (7824, -1, -1, 7822, 7822, 5, 81, 0, 0, 0, 16, 7823, 7825), + (7825, -1, -1, 7822, 7822, 5, 83, 0, 0, 0, 16, 7824, 7826), + (7826, -1, -1, 7822, 7822, 5, 85, 0, 0, 0, 16, 7825, 14328), + (7827, -1, -1, 7827, 7827, 5, 81, 0, 0, 0, 16, -1, -1), + (7828, -1, -1, 7828, 7828, 5, 79, 0, 0, 0, 16, -1, 7829), + (7829, -1, -1, 7828, 7828, 5, 81, 0, 0, 0, 16, 7828, 7830), + (7830, -1, -1, 7828, 7828, 5, 83, 0, 0, 0, 16, 7829, -1), + (7832, -1, -1, 7832, 7832, 5, 85, 0, 0, 0, 16, -1, 7833), + (7833, -1, -1, 7832, 7832, 5, 85, 0, 0, 0, 16, 7832, 7834), + (7834, -1, -1, 7832, 7832, 5, 85, 0, 0, 0, 16, 7833, 7835), + (7835, -1, -1, 7832, 7832, 5, 85, 0, 0, 0, 16, 7834, 7836), + (7836, -1, -1, 7832, 7832, 5, 85, 0, 0, 0, 16, 7835, -1), + (7837, -1, -1, 1006, 1006, 5, 76, -1, 0, 0, 17, 7520, 7838), + (7838, -1, -1, 1006, 1006, 5, 77, -1, 0, 0, 17, 7837, 7839), + (7839, -1, -1, 1006, 1006, 5, 78, -1, 0, 0, 17, 7838, 7840), + (7840, -1, -1, 1006, 1006, 5, 79, -1, 0, 0, 17, 7839, 7841), + (7841, -1, -1, 1006, 1006, 5, 80, -1, 0, 0, 17, 7840, 8470), + (7842, -1, -1, 1486, 1486, 12, 91, -1, 0, 0, 18, 7726, 7843), + (7843, -1, -1, 1486, 1486, 12, 92, -1, 0, 0, 18, 7842, 7844), + (7844, -1, -1, 1486, 1486, 12, 93, -1, 0, 0, 18, 7843, 7845), + (7850, 7850, 7850, 7850, 7850, 0, 1, 13546, 39, 4320, 0, -1, 7851), + (7851, 7850, 7850, 7850, 7850, 0, 6, 13547, 39, 4320, 0, 7850, 7852), + (7852, 7850, 7850, 7850, 7850, 0, 11, 13548, 39, 4320, 0, 7851, 7853), + (7853, 7850, 7850, 7850, 7850, 0, 16, 13549, 39, 4320, 0, 7852, 7854), + (7854, 7850, 7850, 7850, 7850, 0, 21, 13550, 39, 4320, 0, 7853, 7855), + (7855, 7850, 7850, 7850, 7850, 0, 26, 13551, 39, 4320, 0, 7854, 7856), + (7856, 7850, 7850, 7850, 7850, 0, 31, 13552, 39, 4320, 0, 7855, 7857), + (7857, 7850, 7850, 7850, 7850, 0, 36, 13553, 39, 4320, 0, 7856, 7858), + (7858, 7850, 7850, 7850, 7850, 0, 41, 13554, 39, 4320, 0, 7857, 7859), + (7859, 7850, 7850, 7850, 7850, 0, 46, 13555, 39, 4320, 0, 7858, 7860), + (7860, 7850, 7850, 7850, 7850, 3, 51, 13556, 39, 4320, 0, 7859, 7861), + (7861, 7850, 7850, 7850, 7850, 4, 56, 13557, 39, 4320, 0, 7860, 7862), + (7862, 7850, 7850, 7850, 7850, 5, 61, 13558, 39, 4320, 0, 7861, 7863), + (7863, 7850, 7850, 7850, 7850, 6, 66, 13559, 39, 4320, 0, 7862, 7864), + (7864, 7850, 7850, 7850, 7850, 7, 71, 13560, 39, 4320, 0, 7863, 7865), + (7865, 7850, 7850, 7850, 7850, 8, 76, 13561, 39, 4320, 0, 7864, 7340), + (7869, 7869, 7869, 7869, 7869, 6, 73, 16175, 60, 30, 15, -1, 7870), + (7870, 7869, 7869, 7869, 7869, 6, 77, 16176, 60, 30, 15, 7869, 7871), + (7871, 7869, 7869, 7869, 7869, 6, 81, 16177, 60, 30, 15, 7870, -1), + (7872, 7872, 7872, 7872, 7872, 6, 76, 16178, 41, 600, 15, -1, 7873), + (7873, 7872, 7872, 7872, 7872, 6, 81, 16179, 41, 600, 15, 7872, 7874), + (7874, 7872, 7872, 7872, 7872, 6, 85, 16180, 41, 600, 15, 7873, 10127), + (7875, 7875, 7875, 7875, 7875, 6, 76, 16181, 42, 600, 15, -1, 7876), + (7876, 7875, 7875, 7875, 7875, 6, 81, 16182, 42, 600, 15, 7875, 7877), + (7877, 7875, 7875, 7875, 7875, 6, 85, 16183, 42, 600, 15, 7876, 7878), + (7878, 7875, 7875, 7875, 7875, 6, 85, 16859, 42, 600, 16, 7877, 7879), + (7879, 7875, 7875, 7875, 7875, 6, 85, 21823, 42, 600, 16, 7878, 7880), + (7880, 7875, 7875, 7875, 7875, 6, 85, 21824, 42, 600, 16, 7879, 13816), + (7881, -1, -1, 9512, 9512, 7, 85, -1, 0, 0, 16, 7821, 7882), + (7882, -1, -1, 9512, 9512, 7, 85, -1, 0, 0, 16, 7881, 7883), + (7883, -1, -1, 9512, 9512, 7, 85, -1, 0, 0, 16, 7882, 13187), + (7884, -1, -1, 7884, 7884, 9, 85, -1, 0, 0, 16, -1, 12689), + (7885, -1, -1, 7885, 7885, 9, 85, -1, 0, 0, 16, -1, 12690), + (7886, -1, -1, 1026, 1026, 5, 85, -1, 0, 0, 17, 7515, 7887), + (7887, -1, -1, 1026, 1026, 5, 86, -1, 0, 0, 17, 7886, 7888), + (7888, -1, -1, 1026, 1026, 5, 87, -1, 0, 0, 17, 7887, 7889), + (7889, -1, -1, 1026, 1026, 5, 88, -1, 0, 0, 17, 7888, 7890), + (7890, -1, -1, 1026, 1026, 5, 89, -1, 0, 0, 17, 7889, 8430), + (7900, -1, -1, 7900, 7900, 4, 60, -1, 0, 0, 15, -1, 7901), + (7901, -1, -1, 7900, 7900, 4, 65, -1, 0, 0, 15, 7900, 7902), + (7902, -1, -1, 7900, 7900, 4, 70, -1, 0, 0, 15, 7901, 10268), + (7903, 7903, 7903, 7903, 7903, 6, 75, 16188, 60, 30, 15, -1, 12976), + (7904, -1, -1, 65, 661, 3, 85, -1, 0, 0, 17, 7538, 7905), + (7905, -1, -1, 65, 661, 3, 86, -1, 0, 0, 17, 7904, 7906), + (7906, -1, -1, 65, 661, 3, 87, -1, 0, 0, 17, 7905, 7907), + (7907, -1, -1, 65, 661, 3, 88, -1, 0, 0, 17, 7906, 7908), + (7908, -1, -1, 65, 661, 3, 89, -1, 0, 0, 17, 7907, 8435), + (7940, -1, -1, 7940, 7940, 6, 60, -1, 0, 0, 15, -1, 7941), + (7941, -1, -1, 7940, 7940, 6, 65, -1, 0, 0, 15, 7940, 7942), + (7942, -1, -1, 7940, 7940, 6, 70, -1, 0, 0, 15, 7941, 10030), + (7943, 7943, 7943, 7943, 7943, 6, 79, 16192, 60, 8640, 15, -1, 7993), + (7944, 7944, 7944, 7944, 7944, 7, 79, 16193, 34, 1800, 15, -1, -1), + (7945, -1, -1, 7945, 7945, 6, 81, -1, 0, 0, 15, -1, 7946), + (7946, -1, -1, 7945, 7945, 6, 82, -1, 0, 0, 15, 7945, 7947), + (7947, -1, -1, 7945, 7945, 6, 83, -1, 0, 0, 15, 7946, 10033), + (7948, -1, -1, 7948, 7948, 6, 75, -1, 0, 0, 15, -1, 7949), + (7949, -1, -1, 7948, 7948, 6, 80, -1, 0, 0, 15, 7948, 7950), + (7950, -1, -1, 7948, 7948, 6, 85, -1, 0, 0, 15, 7949, 10035), + (7951, 7951, 7951, 7951, 7951, 6, 82, 16200, 61, 900, 15, -1, 7952), + (7952, 7951, 7951, 7951, 7951, 6, 83, 16201, 61, 900, 15, 7951, 7953), + (7953, 7951, 7951, 7951, 7951, 6, 84, 16202, 61, 900, 15, 7952, 10038), + (7980, -1, -1, 7980, 7980, 6, 70, -1, 0, 0, 15, -1, 7981), + (7981, -1, -1, 7980, 7980, 6, 73, -1, 0, 0, 15, 7980, 7982), + (7982, -1, -1, 7980, 7980, 6, 76, -1, 0, 0, 15, 7981, -1), + (7983, -1, -1, 7983, 7983, 6, 70, -1, 0, 0, 15, -1, 7984), + (7984, -1, -1, 7983, 7983, 6, 73, -1, 0, 0, 15, 7983, 7985), + (7985, -1, -1, 7983, 7983, 6, 76, -1, 0, 0, 15, 7984, 10110), + (7986, 7986, 7986, 7986, 7986, 9, 75, 16203, 11, 600, 15, -1, 7987), + (7987, 7986, 7986, 7986, 7986, 12, 80, 16204, 11, 600, 15, 7986, 7988), + (7988, 7986, 7986, 7986, 7986, 12, 85, 16205, 11, 600, 15, 7987, 10510), + (7989, -1, -1, 7989, 7989, 6, 75, -1, 0, 0, 15, -1, 7990), + (7990, -1, -1, 7989, 7989, 6, 80, -1, 0, 0, 15, 7989, 7991), + (7991, -1, -1, 7989, 7989, 6, 85, -1, 0, 0, 15, 7990, 7992), + (7992, -1, -1, 7989, 7989, 6, 85, -1, 0, 0, 15, 7991, 13415), + (7993, 7943, 7943, 7943, 7943, 6, 85, 23601, 60, 8640, 17, 7943, -1), + (7994, -1, -1, 462, 462, 2, 81, -1, 0, 0, 17, 464, 7995), + (7995, -1, -1, 462, 462, 2, 85, -1, 0, 0, 17, 7994, -1), + (8000, -1, -1, 8001, 8001, 0, 50, -1, 0, 0, 8, -1, -1), + (8030, 8030, 8030, 8030, 8030, 6, 70, 16206, 60, 900, 15, -1, -1), + (8031, -1, -1, 8031, 8031, 6, 75, -1, 0, 0, 15, -1, 8032), + (8032, -1, -1, 8031, 8031, 6, 77, -1, 0, 0, 15, 8031, 8033), + (8033, -1, -1, 8031, 8031, 6, 79, -1, 0, 0, 15, 8032, 10282), + (8034, 8034, 8034, 8034, 8034, 6, 81, 16207, 59, 600, 15, -1, -1), + (8035, -1, -1, 8035, 8035, 6, 73, -1, 0, 0, 15, -1, 8036), + (8036, -1, -1, 8035, 8035, 6, 75, -1, 0, 0, 15, 8035, 8037), + (8037, -1, -1, 8035, 8035, 6, 77, -1, 0, 0, 15, 8036, 10285), + (8038, 8038, 8038, 8038, 8038, 6, 81, 16210, 56, 12, 15, -1, 17541), + (8039, 8039, 8039, 8039, 8039, 6, 83, 16211, 58, 7, 15, -1, 15462), + (8040, -1, -1, 8040, 8040, 4, 65, -1, 0, 0, 15, -1, 8041), + (8041, -1, -1, 8040, 8040, 4, 70, -1, 0, 0, 15, 8040, 8042), + (8042, -1, -1, 8040, 8040, 4, 75, -1, 0, 0, 15, 8041, 8043), + (8043, -1, -1, 8040, 8040, 4, 78, -1, 0, 0, 15, 8042, 8313), + (8059, -1, -1, 8232, 8232, 4, 78, -1, 0, 0, 15, 8234, 8261), + (8060, 8060, 8060, 8060, 8060, 7, 75, 16238, 41, 1800, 15, -1, 8061), + (8061, 8060, 8060, 8060, 8060, 7, 78, 16239, 41, 1800, 15, 8060, 8062), + (8062, 8060, 8060, 8060, 8060, 7, 81, 16240, 41, 1800, 15, 8061, 10237), + (8063, 8063, 8063, 8063, 8063, 7, 75, 16241, 41, 1800, 15, -1, 8064), + (8064, 8063, 8063, 8063, 8063, 7, 78, 16242, 41, 1800, 15, 8063, 8065), + (8065, 8063, 8063, 8063, 8063, 7, 81, 16243, 41, 1800, 15, 8064, 10240), + (8066, 8066, 8066, 8066, 8066, 7, 75, 16244, 41, 1800, 15, -1, 8067), + (8067, 8066, 8066, 8066, 8066, 7, 78, 16245, 41, 1800, 15, 8066, 8068), + (8068, 8066, 8066, 8066, 8066, 7, 81, 16246, 41, 1800, 15, 8067, 10243), + (8069, -1, -1, 8069, 8069, 5, 71, -1, 0, 0, 15, -1, 8070), + (8070, -1, -1, 8069, 8069, 5, 72, -1, 0, 0, 15, 8069, 8071), + (8071, -1, -1, 8069, 8069, 5, 73, -1, 0, 0, 15, 8070, 15606), + (8072, 8072, 8072, 8072, 8072, 7, 75, 16221, 37, 20, 15, -1, 8073), + (8073, 8072, 8072, 8072, 8072, 7, 75, 16222, 37, 20, 15, 8072, 8074), + (8074, 8072, 8072, 8072, 8072, 7, 75, 16223, 37, 20, 15, 8073, 10246), + (8075, 8075, 8075, 8075, 8075, 7, 81, 16224, 42, 6, 15, -1, -1), + (8076, -1, -1, 8076, 8076, 5, 77, -1, 0, 0, 15, -1, 8077), + (8077, -1, -1, 8076, 8076, 5, 78, -1, 0, 0, 15, 8076, 8078), + (8078, -1, -1, 8076, 8076, 5, 79, -1, 0, 0, 15, 8077, 8079), + (8079, -1, -1, 8076, 8076, 5, 80, -1, 0, 0, 15, 8078, 8080), + (8080, -1, -1, 8076, 8076, 5, 81, -1, 0, 0, 15, 8079, 8081), + (8081, -1, -1, 8076, 8076, 5, 82, -1, 0, 0, 15, 8080, -1), + (8082, -1, -1, 8082, 8082, 3, 65, -1, 0, 0, 15, -1, 8083), + (8083, -1, -1, 8082, 8082, 3, 67, -1, 0, 0, 15, 8082, 8084), + (8084, -1, -1, 8082, 8082, 3, 69, -1, 0, 0, 15, 8083, 10249), + (8190, -1, -1, 8190, 8190, 7, 75, -1, 0, 0, 15, -1, 8191), + (8191, -1, -1, 8190, 8190, 7, 75, -1, 0, 0, 15, 8190, 8192), + (8192, -1, -1, 8190, 8190, 7, 75, -1, 0, 0, 15, 8191, -1), + (8193, -1, -1, 8193, 8193, 7, 75, -1, 0, 0, 15, -1, -1), + (8194, 8194, 8194, 8194, 8194, 7, 75, 16226, 47, 12, 15, -1, -1), + (8195, -1, -1, 8195, 8195, 4, 75, -1, 0, 0, 15, -1, 8196), + (8196, -1, -1, 8195, 8195, 4, 75, -1, 0, 0, 15, 8195, 8197), + (8197, -1, -1, 8195, 8195, 4, 75, -1, 0, 0, 15, 8196, 7704), + (8198, -1, -1, 8198, 8198, 4, 65, -1, 0, 0, 15, -1, 8199), + (8199, -1, -1, 8198, 8198, 4, 65, -1, 0, 0, 15, 8198, 8200), + (8200, -1, -1, 8198, 8198, 4, 65, -1, 0, 0, 15, 8199, -1), + (8201, -1, -1, 8201, 8201, 7, 81, -1, 0, 0, 15, -1, 8202), + (8202, -1, -1, 8201, 8201, 7, 81, -1, 0, 0, 15, 8201, 8203), + (8203, -1, -1, 8201, 8201, 7, 81, -1, 0, 0, 15, 8202, 16475), + (8204, -1, -1, 8204, 8204, 4, 75, -1, 0, 0, 15, -1, 8205), + (8205, -1, -1, 8204, 8204, 4, 75, -1, 0, 0, 15, 8204, 8206), + (8206, -1, -1, 8204, 8204, 4, 75, -1, 0, 0, 15, 8205, 1656), + (8207, -1, -1, 8207, 8207, 4, 75, -1, 0, 0, 15, -1, 8208), + (8208, -1, -1, 8207, 8207, 4, 75, -1, 0, 0, 15, 8207, 8209), + (8209, -1, -1, 8207, 8207, 4, 75, -1, 0, 0, 15, 8208, 1659), + (8210, -1, -1, 8210, 8210, 5, 65, -1, 0, 0, 15, -1, 8211), + (8211, -1, -1, 8210, 8210, 5, 70, -1, 0, 0, 15, 8210, 8212), + (8212, -1, -1, 8210, 8210, 5, 75, -1, 0, 0, 15, 8211, 8213), + (8213, -1, -1, 8210, 8210, 5, 80, -1, 0, 0, 15, 8212, 8214), + (8214, -1, -1, 8210, 8210, 5, 85, -1, 0, 0, 15, 8213, 1651), + (8215, -1, -1, 8215, 8215, 5, 65, -1, 0, 0, 15, -1, 8216), + (8216, -1, -1, 8215, 8215, 5, 70, -1, 0, 0, 15, 8215, 8217), + (8217, -1, -1, 8215, 8215, 5, 75, -1, 0, 0, 15, 8216, 8218), + (8218, -1, -1, 8215, 8215, 5, 80, -1, 0, 0, 15, 8217, 8219), + (8219, -1, -1, 8215, 8215, 5, 85, -1, 0, 0, 15, 8218, 12559), + (8220, 8220, 8220, 8220, 8220, 5, 76, 16227, 39, 15, 15, -1, -1), + (8221, 8221, 8221, 8221, 8221, 9, 81, 16228, 45, 600, 15, -1, -1), + (8222, 8222, 8222, 8222, 8222, 7, 75, 16229, 70, 10, 15, -1, -1), + (8223, -1, -1, 86, 86, 8, 59, -1, 0, 0, 15, 6259, 8262), + (8224, -1, -1, 8224, 8224, 5, 75, -1, 0, 0, 15, -1, 8225), + (8225, -1, -1, 8224, 8224, 5, 80, -1, 0, 0, 15, 8224, 8226), + (8226, -1, -1, 8224, 8224, 5, 85, -1, 0, 0, 15, 8225, 8421), + (8227, 8227, 8227, 8227, 8227, 3, 55, 16233, 71, 10, 15, -1, 12810), + (8228, -1, -1, 8228, 8228, 5, 75, -1, 0, 0, 15, -1, 8229), + (8229, -1, -1, 8228, 8228, 5, 80, -1, 0, 0, 15, 8228, 8230), + (8230, -1, -1, 8228, 8228, 5, 85, -1, 0, 0, 15, 8229, -1), + (8231, 8231, -1, 8231, 8231, 3, 55, 16234, 38, 60, 15, -1, -1), + (8232, -1, -1, 8232, 8232, 4, 65, -1, 0, 0, 15, -1, 8233), + (8233, -1, -1, 8232, 8232, 4, 70, -1, 0, 0, 15, 8232, 8234), + (8234, -1, -1, 8232, 8232, 4, 75, -1, 0, 0, 15, 8233, 8059), + (8235, -1, -1, 8235, 8235, 6, 81, -1, 0, 0, 15, -1, 8236), + (8236, -1, -1, 8235, 8235, 6, 81, -1, 0, 0, 15, 8235, 8237), + (8237, -1, -1, 8235, 8235, 6, 81, -1, 0, 0, 15, 8236, 8238), + (8238, -1, -1, 8235, 8235, 6, 81, -1, 0, 0, 15, 8237, 8239), + (8239, -1, -1, 8235, 8235, 6, 81, -1, 0, 0, 15, 8238, 8304), + (8240, -1, -1, 8240, 8240, 6, 81, -1, 0, 0, 15, -1, 8241), + (8241, -1, -1, 8240, 8240, 6, 81, -1, 0, 0, 15, 8240, 8242), + (8242, -1, -1, 8240, 8240, 6, 81, -1, 0, 0, 15, 8241, 8243), + (8243, -1, -1, 8240, 8240, 6, 81, -1, 0, 0, 15, 8242, 8244), + (8244, -1, -1, 8240, 8240, 6, 81, -1, 0, 0, 15, 8243, 10781), + (8245, -1, -1, 8245, 8245, 6, 81, -1, 0, 0, 15, -1, 8246), + (8246, -1, -1, 8245, 8245, 6, 81, -1, 0, 0, 15, 8245, 8247), + (8247, -1, -1, 8245, 8245, 6, 81, -1, 0, 0, 15, 8246, 8248), + (8248, -1, -1, 8245, 8245, 6, 81, -1, 0, 0, 15, 8247, 8249), + (8249, -1, -1, 8245, 8245, 6, 81, -1, 0, 0, 15, 8248, 8422), + (8250, -1, -1, 8250, 8250, 6, 81, -1, 0, 0, 15, -1, 8251), + (8251, -1, -1, 8250, 8250, 6, 81, -1, 0, 0, 15, 8250, 8252), + (8252, -1, -1, 8250, 8250, 6, 81, -1, 0, 0, 15, 8251, 8253), + (8253, -1, -1, 8250, 8250, 6, 81, -1, 0, 0, 15, 8252, 8254), + (8254, -1, -1, 8250, 8250, 6, 81, -1, 0, 0, 15, 8253, 13046), + (8255, -1, -1, 8255, 8255, 6, 81, -1, 0, 0, 15, -1, 8256), + (8256, -1, -1, 8255, 8255, 6, 81, -1, 0, 0, 15, 8255, 8257), + (8257, -1, -1, 8255, 8255, 6, 81, -1, 0, 0, 15, 8256, 8258), + (8258, -1, -1, 8255, 8255, 6, 81, -1, 0, 0, 15, 8257, 8259), + (8259, -1, -1, 8255, 8255, 6, 81, -1, 0, 0, 15, 8258, 12411), + (8260, 8005, 8005, 8005, 8005, 9, 85, 20185, 45, 600, 16, -1, -1), + (8261, -1, -1, 8232, 8232, 4, 80, -1, 0, 0, 16, 8059, 15772), + (8262, -1, -1, 86, 86, 8, 65, -1, 0, 0, 16, 8223, -1), + (8263, -1, -1, 8263, 8263, 5, 81, -1, 0, 0, 16, -1, 8264), + (8264, -1, -1, 8263, 8263, 5, 82, -1, 0, 0, 16, 8263, 8265), + (8265, -1, -1, 8263, 8263, 5, 83, -1, 0, 0, 16, 8264, 8266), + (8266, -1, -1, 8263, 8263, 5, 84, -1, 0, 0, 16, 8265, 8267), + (8267, -1, -1, 8263, 8263, 5, 85, -1, 0, 0, 16, 8266, 8351), + (8268, -1, -1, 8268, 8268, 5, 81, -1, 0, 0, 16, -1, 8269), + (8269, -1, -1, 8268, 8268, 5, 82, -1, 0, 0, 16, 8268, 8270), + (8270, -1, -1, 8268, 8268, 5, 83, -1, 0, 0, 16, 8269, 8271), + (8271, -1, -1, 8268, 8268, 5, 84, -1, 0, 0, 16, 8270, 8272), + (8272, -1, -1, 8268, 8268, 5, 85, -1, 0, 0, 16, 8271, 8361), + (8273, -1, -1, 8273, 8273, 5, 81, -1, 0, 0, 16, -1, 8274), + (8274, -1, -1, 8273, 8273, 5, 82, -1, 0, 0, 16, 8273, 8275), + (8275, -1, -1, 8273, 8273, 5, 83, -1, 0, 0, 16, 8274, 8276), + (8276, -1, -1, 8273, 8273, 5, 84, -1, 0, 0, 16, 8275, 8277), + (8277, -1, -1, 8273, 8273, 5, 85, -1, 0, 0, 16, 8276, 8371), + (8278, -1, -1, 8278, 8278, 5, 81, -1, 0, 0, 16, -1, 8279), + (8279, -1, -1, 8278, 8278, 5, 82, -1, 0, 0, 16, 8278, 8280), + (8280, -1, -1, 8278, 8278, 5, 83, -1, 0, 0, 16, 8279, 8281), + (8281, -1, -1, 8278, 8278, 5, 84, -1, 0, 0, 16, 8280, 8282), + (8282, -1, -1, 8278, 8278, 5, 85, -1, 0, 0, 16, 8281, 8381), + (8283, -1, -1, 8283, 8283, 5, 81, -1, 0, 0, 16, -1, 8284), + (8284, -1, -1, 8283, 8283, 5, 82, -1, 0, 0, 16, 8283, 8285), + (8285, -1, -1, 8283, 8283, 5, 83, -1, 0, 0, 16, 8284, 8286), + (8286, -1, -1, 8283, 8283, 5, 84, -1, 0, 0, 16, 8285, 8287), + (8287, -1, -1, 8283, 8283, 5, 85, -1, 0, 0, 16, 8286, 8391), + (8288, -1, -1, 8288, 8288, 5, 81, -1, 0, 0, 16, -1, 8289), + (8289, -1, -1, 8288, 8288, 5, 82, -1, 0, 0, 16, 8288, 8290), + (8290, -1, -1, 8288, 8288, 5, 83, -1, 0, 0, 16, 8289, 8291), + (8291, -1, -1, 8288, 8288, 5, 84, -1, 0, 0, 16, 8290, 8292), + (8292, -1, -1, 8288, 8288, 5, 85, -1, 0, 0, 16, 8291, 8401), + (8293, -1, -1, 8293, 8293, 5, 81, -1, 0, 0, 16, -1, 8294), + (8294, -1, -1, 8293, 8293, 5, 82, -1, 0, 0, 16, 8293, 8295), + (8295, -1, -1, 8293, 8293, 5, 83, -1, 0, 0, 16, 8294, 8296), + (8296, -1, -1, 8293, 8293, 5, 84, -1, 0, 0, 16, 8295, 8297), + (8297, -1, -1, 8293, 8293, 5, 85, -1, 0, 0, 16, 8296, 8411), + (8300, 8300, 8300, 8300, 8300, 5, 81, 21778, 8, 900, 16, -1, 8301), + (8301, 8300, 8300, 8300, 8300, 7, 83, 21779, 8, 900, 16, 8300, 8302), + (8302, 8300, 8300, 8300, 8300, 9, 85, 21780, 8, 900, 16, 8301, 15111), + (8303, 8303, 8303, 8303, 8303, 12, 85, 21773, 9, 1800, 16, -1, -1), + (8304, -1, -1, 8235, 8235, 6, 85, -1, 0, 0, 16, 8239, 8305), + (8305, -1, -1, 8235, 8235, 6, 85, -1, 0, 0, 16, 8304, 8306), + (8306, -1, -1, 8235, 8235, 6, 85, -1, 0, 0, 16, 8305, 8307), + (8307, -1, -1, 8235, 8235, 6, 85, -1, 0, 0, 16, 8306, 8308), + (8308, -1, -1, 8235, 8235, 6, 85, -1, 0, 0, 16, 8307, 13353), + (8309, 260, -1, 260, 260, 5, 81, 21687, 3, 2160, 16, 262, 8310), + (8310, 260, -1, 260, 260, 7, 83, 21688, 3, 2160, 16, 8309, 8311), + (8311, 260, -1, 260, 260, 9, 85, 21689, 3, 2160, 16, 8310, -1), + (8312, 8312, 8312, 8312, 8312, 12, 85, 21690, 2, 900, 16, -1, -1), + (8313, -1, -1, 8040, 8040, 4, 80, -1, 0, 0, 16, 8043, 15773), + (8314, -1, -1, 8314, 8314, 7, 85, -1, 0, 0, 16, -1, 8315), + (8315, -1, -1, 8314, 8314, 9, 85, -1, 0, 0, 16, 8314, 8316), + (8316, -1, -1, 8314, 8314, 12, 85, -1, 0, 0, 16, 8315, 13508), + (8317, -1, -1, 8317, 8317, 5, 85, -1, 0, 0, 16, -1, 8318), + (8318, -1, -1, 8317, 8317, 5, 85, -1, 0, 0, 16, 8317, -1), + (8319, -1, -1, 8319, 8319, 5, 85, -1, 0, 0, 16, -1, 8320), + (8320, -1, -1, 8319, 8319, 5, 85, -1, 0, 0, 16, 8319, 8321), + (8321, -1, -1, 8319, 8319, 5, 85, -1, 0, 0, 16, 8320, -1), + (8322, -1, -1, 8322, 8322, 5, 81, 0, 0, 0, 16, -1, 8323), + (8323, -1, -1, 8322, 8322, 7, 83, 0, 0, 0, 16, 8322, 8324), + (8324, -1, -1, 8322, 8322, 9, 85, 0, 0, 0, 16, 8323, 13199), + (8325, -1, -1, 8325, 8325, 7, 81, 0, 0, 0, 16, -1, 8326), + (8326, -1, -1, 8325, 8325, 9, 81, 0, 0, 0, 16, 8325, 8327), + (8327, -1, -1, 8325, 8325, 11, 81, 0, 0, 0, 16, 8326, 13219), + (8328, -1, -1, 244, 244, 12, 59, -1, 0, 0, 3, 246, -1), + (8329, -1, -1, 622, 622, 3, 71, -1, 0, 0, 16, 624, -1), + (8331, -1, -1, 8331, 8331, 9, 85, 0, 0, 0, 16, -1, -1), + (8332, -1, -1, 8332, 8332, 7, 85, 0, 0, 0, 16, -1, 8333), + (8333, -1, -1, 8332, 8332, 7, 85, 0, 0, 0, 16, 8332, 8334), + (8334, -1, -1, 8332, 8332, 7, 85, 0, 0, 0, 16, 8333, -1), + (8335, -1, -1, 8335, 8335, 5, 81, 0, 0, 0, 16, -1, 8336), + (8336, -1, -1, 8335, 8335, 5, 82, 0, 0, 0, 16, 8335, 8337), + (8337, -1, -1, 8335, 8335, 5, 83, 0, 0, 0, 16, 8336, 8338), + (8338, -1, -1, 8335, 8335, 5, 84, 0, 0, 0, 16, 8337, 8339), + (8339, -1, -1, 8335, 8335, 5, 85, 0, 0, 0, 16, 8338, -1), + (8341, 8341, 8341, 8341, 8341, 12, 85, 21829, 53, 450, 16, -1, -1), + (8342, 8342, 8342, 8342, 8342, 12, 85, 21843, 54, 240, 16, -1, 14729), + (8343, 167, 167, 167, 167, 10, 85, 21837, 14, 900, 16, 7249, 12955), + (8344, -1, -1, 1210, 1213, 12, 85, -1, 0, 0, 16, 7583, 8345), + (8345, -1, -1, 1210, 1213, 12, 85, -1, 0, 0, 16, 8344, 8346), + (8346, -1, -1, 1210, 1213, 12, 85, -1, 0, 0, 16, 8345, 12526), + (8347, -1, -1, 8347, 8347, 7, 81, 0, 0, 0, 16, -1, 8348), + (8348, -1, -1, 8347, 8347, 9, 83, 0, 0, 0, 16, 8347, 8349), + (8349, -1, -1, 8347, 8347, 11, 85, 0, 0, 0, 16, 8348, -1), + (8350, -1, -1, 8350, 8350, 12, 85, 0, 0, 0, 16, -1, -1), + (8351, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8267, 8352), + (8352, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8351, 8353), + (8353, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8352, 8354), + (8354, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8353, 8355), + (8355, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8354, 8356), + (8356, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8355, 8357), + (8357, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8356, 8358), + (8358, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8357, 8359), + (8359, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8358, 8360), + (8360, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8359, 13933), + (8361, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8272, 8362), + (8362, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8361, 8363), + (8363, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8362, 8364), + (8364, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8363, 8365), + (8365, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8364, 8366), + (8366, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8365, 8367), + (8367, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8366, 8368), + (8368, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8367, 8369), + (8369, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8368, 8370), + (8370, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8369, 13943), + (8371, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8277, 8372), + (8372, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8371, 8373), + (8373, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8372, 8374), + (8374, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8373, 8375), + (8375, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8374, 8376), + (8376, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8375, 8377), + (8377, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8376, 8378), + (8378, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8377, 8379), + (8379, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8378, 8380), + (8380, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8379, 13953), + (8381, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8282, 8382), + (8382, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8381, 8383), + (8383, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8382, 8384), + (8384, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8383, 8385), + (8385, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8384, 8386), + (8386, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8385, 8387), + (8387, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8386, 8388), + (8388, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8387, 8389), + (8389, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8388, 8390), + (8390, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8389, 13963), + (8391, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8287, 8392), + (8392, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8391, 8393), + (8393, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8392, 8394), + (8394, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8393, 8395), + (8395, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8394, 8396), + (8396, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8395, 8397), + (8397, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8396, 8398), + (8398, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8397, 8399), + (8399, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8398, 8400), + (8400, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8399, 13973), + (8401, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8292, 8402), + (8402, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8401, 8403), + (8403, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8402, 8404), + (8404, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8403, 8405), + (8405, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8404, 8406), + (8406, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8405, 8407), + (8407, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8406, 8408), + (8408, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8407, 8409), + (8409, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8408, 8410), + (8410, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8409, 13983), + (8411, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8297, 8412), + (8412, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8411, 8413), + (8413, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8412, 8414), + (8414, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8413, 8415), + (8415, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8414, 8416), + (8416, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8415, 8417), + (8417, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8416, 8418), + (8418, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8417, 8419), + (8419, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8418, 8420), + (8420, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8419, 13993), + (8421, -1, -1, 8224, 8224, 5, 90, -1, 0, 0, 17, 8226, -1), + (8422, -1, -1, 8245, 8245, 6, 86, -1, 0, 0, 17, 8249, 8423), + (8423, -1, -1, 8245, 8245, 6, 87, -1, 0, 0, 17, 8422, 8424), + (8424, -1, -1, 8245, 8245, 6, 88, -1, 0, 0, 17, 8423, 8425), + (8425, -1, -1, 8245, 8245, 6, 89, -1, 0, 0, 17, 8424, 8426), + (8426, -1, -1, 8245, 8245, 6, 90, -1, 0, 0, 17, 8425, 13338), + (8427, -1, -1, 7100, 7100, 6, 85, -1, 0, 0, 17, 7325, 8428), + (8428, -1, -1, 7100, 7100, 6, 87, -1, 0, 0, 17, 8427, 8429), + (8429, -1, -1, 7100, 7100, 6, 89, -1, 0, 0, 17, 8428, -1), + (8430, -1, -1, 1026, 1026, 10, 91, -1, 0, 0, 18, 7890, 8431), + (8435, -1, -1, 65, 661, 8, 91, -1, 0, 0, 18, 7908, 8436), + (8440, -1, -1, 122, 122, 13, 91, -1, 0, 0, 18, 13089, 8441), + (8445, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 12637, 8446), + (8446, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 8445, 8447), + (8447, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 8446, 16419), + (8448, -1, -1, 6119, 6119, 8, 91, -1, 0, 0, 18, 12496, 8449), + (8463, -1, -1, 125, 125, 10, 91, -1, 0, 0, 18, 13084, 8464), + (8464, -1, -1, 125, 125, 11, 91, -1, 0, 0, 18, 8463, 8465), + (8470, -1, -1, 1006, 1006, 10, 91, -1, 0, 0, 18, 7841, 8471), + (9000, 9000, 9000, 9000, 9000, 0, 1, 16995, 49, 72000, 0, -1, -1), + (9001, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, -1, 9002), + (9002, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9001, 9003), + (9003, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9002, 9004), + (9004, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9003, 9005), + (9005, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9004, 9006), + (9006, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9005, 9007), + (9007, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9006, 9008), + (9008, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9007, 9009), + (9009, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9008, 9010), + (9010, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9009, -1), + (9011, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, -1, 9012), + (9012, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9011, 9013), + (9013, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9012, 9014), + (9014, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9013, 9015), + (9015, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9014, 9016), + (9016, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9015, 9017), + (9017, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9016, 9018), + (9018, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9017, 9019), + (9019, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9018, 9020), + (9020, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9019, -1), + (9021, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, -1, 9022), + (9022, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9021, 9023), + (9023, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9022, 9024), + (9024, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9023, 9025), + (9025, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9024, 9026), + (9026, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9025, 9027), + (9027, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9026, 9028), + (9028, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9027, 9029), + (9029, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9028, 9030), + (9030, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9029, -1), + (9031, 9031, 9031, 9031, 9031, 0, 1, 16601, 65, 72000, 0, -1, -1), + (9032, 9032, 9032, 9032, 9032, 0, 0, 21815, 51, 72000, 0, -1, -1), + (9033, -1, -1, 9033, 9033, 0, 1, -1, 0, 0, 0, -1, -1), + (9100, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, -1, 9101), + (9101, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9100, 9102), + (9102, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9101, 9103), + (9103, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9102, 9104), + (9104, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9103, 9105), + (9105, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9104, 9106), + (9106, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9105, 9107), + (9107, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9106, 9108), + (9108, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9107, -1), + (9109, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, -1, 9110), + (9110, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9109, 9111), + (9111, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9110, 9112), + (9112, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9111, 9113), + (9113, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9112, 9114), + (9114, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9113, 9115), + (9115, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9114, 9116), + (9116, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9115, 9117), + (9117, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9116, -1), + (9118, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, -1, 9119), + (9119, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9118, 9120), + (9120, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9119, 9121), + (9121, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9120, 9122), + (9122, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9121, 9123), + (9123, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9122, 9124), + (9124, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9123, 9125), + (9125, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9124, 9126), + (9126, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9125, -1), + (9127, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, -1, 9128), + (9128, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9127, 9129), + (9129, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9128, 9130), + (9130, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9129, 9131), + (9131, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9130, 9132), + (9132, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9131, 9133), + (9133, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9132, 9134), + (9134, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9133, 9135), + (9135, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9134, -1), + (9136, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, -1, 9137), + (9137, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9136, 9138), + (9138, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9137, 9139), + (9139, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9138, 9140), + (9140, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9139, 9141), + (9141, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9140, 9142), + (9142, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9141, 9143), + (9143, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9142, 9144), + (9144, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9143, -1), + (9145, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, -1, 9146), + (9146, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9145, 9147), + (9147, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9146, 9148), + (9148, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9147, 9149), + (9149, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9148, 9150), + (9150, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9149, 9151), + (9151, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9150, 9152), + (9152, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9151, 9153), + (9153, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9152, -1), + (9154, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, -1, 9155), + (9155, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9154, 9156), + (9156, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9155, 9157), + (9157, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9156, 9158), + (9158, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9157, 9159), + (9159, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9158, 9160), + (9160, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9159, 9161), + (9161, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9160, 9162), + (9162, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9161, -1), + (9163, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, -1, 9164), + (9164, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9163, 9165), + (9165, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9164, 9166), + (9166, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9165, 9167), + (9167, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9166, 9168), + (9168, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9167, 9169), + (9169, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9168, 9170), + (9170, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9169, 9171), + (9171, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9170, -1), + (9172, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, -1, 9173), + (9173, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9172, 9174), + (9174, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9173, 9175), + (9175, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9174, 9176), + (9176, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9175, 9177), + (9177, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9176, 9178), + (9178, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9177, 9179), + (9179, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9178, 9180), + (9180, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9179, -1), + (9181, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, -1, 9182), + (9182, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9181, 9183), + (9183, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9182, 9184), + (9184, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9183, 9185), + (9185, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9184, 9186), + (9186, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9185, 9187), + (9187, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9186, 9188), + (9188, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9187, 9189), + (9189, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9188, -1), + (9190, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, -1, 9191), + (9191, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9190, 9192), + (9192, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9191, 9193), + (9193, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9192, 9194), + (9194, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9193, 9195), + (9195, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9194, 9196), + (9196, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9195, 9197), + (9197, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9196, 9198), + (9198, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9197, -1), + (9199, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, -1, 9200), + (9200, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9199, 9201), + (9201, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9200, 9202), + (9202, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9201, 9203), + (9203, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9202, 9204), + (9204, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9203, 9205), + (9205, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9204, 9206), + (9206, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9205, 9207), + (9207, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9206, -1), + (9208, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, -1, 9209), + (9209, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9208, 9210), + (9210, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9209, 9211), + (9211, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9210, 9212), + (9212, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9211, 9213), + (9213, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9212, 9214), + (9214, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9213, 9215), + (9215, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9214, 9216), + (9216, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9215, -1), + (9217, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, -1, 9218), + (9218, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9217, 9219), + (9219, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9218, 9220), + (9220, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9219, 9221), + (9221, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9220, 9222), + (9222, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9221, 9223), + (9223, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9222, 9224), + (9224, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9223, 9225), + (9225, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9224, -1), + (9226, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, -1, 9227), + (9227, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9226, 9228), + (9228, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9227, 9229), + (9229, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9228, 9230), + (9230, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9229, 9231), + (9231, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9230, 9232), + (9232, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9231, 9233), + (9233, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9232, 9234), + (9234, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9233, -1), + (9235, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, -1, 9236), + (9236, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9235, 9237), + (9237, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9236, 9238), + (9238, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9237, 9239), + (9239, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9238, 9240), + (9240, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9239, 9241), + (9241, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9240, 9242), + (9242, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9241, 9243), + (9243, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9242, -1), + (9300, 9300, 9300, 9300, 9300, 5, 85, 16212, 40, 600, 15, -1, 9301), + (9301, 9300, 9300, 9300, 9300, 5, 85, 16213, 40, 600, 15, 9300, 9302), + (9302, 9300, 9300, 9300, 9300, 5, 85, 16214, 40, 600, 15, 9301, -1), + (9303, 9303, 9303, 9303, 9303, 5, 85, 16215, 40, 600, 15, -1, 9304), + (9304, 9303, 9303, 9303, 9303, 5, 85, 16216, 40, 600, 15, 9303, 9305), + (9305, 9303, 9303, 9303, 9303, 5, 85, 16217, 40, 600, 15, 9304, -1), + (9306, 9306, 9306, 9306, 9306, 5, 85, 16218, 40, 600, 15, -1, 9307), + (9307, 9306, 9306, 9306, 9306, 5, 85, 16219, 40, 600, 15, 9306, 9308), + (9308, 9306, 9306, 9306, 9306, 5, 85, 16220, 40, 600, 15, 9307, -1), + (9309, 9309, 9309, 9309, 9309, 5, 85, 16249, 40, 600, 15, -1, 9310), + (9310, 9309, 9309, 9309, 9309, 5, 85, 16250, 40, 600, 15, 9309, 9311), + (9311, 9309, 9309, 9309, 9309, 5, 85, 16251, 40, 600, 15, 9310, -1), + (9312, 9312, 9312, 9312, 9312, 5, 85, 16252, 40, 600, 15, -1, 9313), + (9313, 9312, 9312, 9312, 9312, 5, 85, 16253, 40, 600, 15, 9312, 9314), + (9314, 9312, 9312, 9312, 9312, 5, 85, 16254, 40, 600, 15, 9313, -1), + (9315, 9315, 9315, 9315, 9315, 5, 85, 16255, 40, 600, 15, -1, 9316), + (9316, 9315, 9315, 9315, 9315, 5, 85, 16256, 40, 600, 15, 9315, 9317), + (9317, 9315, 9315, 9315, 9315, 5, 85, 16257, 40, 600, 15, 9316, -1), + (9318, 9318, 9318, 9318, 9318, 5, 85, 16261, 40, 600, 15, -1, 9319), + (9319, 9318, 9318, 9318, 9318, 5, 85, 16262, 40, 600, 15, 9318, 9320), + (9320, 9318, 9318, 9318, 9318, 5, 85, 16263, 40, 600, 15, 9319, -1), + (9321, 9321, 9321, 9321, 9321, 5, 85, 16264, 40, 600, 15, -1, 9322), + (9322, 9321, 9321, 9321, 9321, 5, 85, 16265, 40, 600, 15, 9321, 9323), + (9323, 9321, 9321, 9321, 9321, 5, 85, 16266, 40, 600, 15, 9322, -1), + (9324, 9324, 9324, 9324, 9324, 5, 85, 16267, 40, 600, 15, -1, 9325), + (9325, 9324, 9324, 9324, 9324, 5, 85, 16268, 40, 600, 15, 9324, 9326), + (9326, 9324, 9324, 9324, 9324, 5, 85, 16269, 40, 600, 15, 9325, -1), + (9327, 9327, 9327, 9327, 9327, 5, 85, 16270, 40, 600, 15, -1, 9328), + (9328, 9327, 9327, 9327, 9327, 5, 85, 16271, 40, 600, 15, 9327, 9329), + (9329, 9327, 9327, 9327, 9327, 5, 85, 16272, 40, 600, 15, 9328, -1), + (9330, 9330, 9330, 9330, 9330, 5, 85, 16273, 40, 600, 15, -1, 9331), + (9331, 9330, 9330, 9330, 9330, 5, 85, 16274, 40, 600, 15, 9330, 9332), + (9332, 9330, 9330, 9330, 9330, 5, 85, 16275, 40, 600, 15, 9331, -1), + (9333, 9333, 9333, 9333, 9333, 5, 85, 16276, 40, 600, 15, -1, 9334), + (9334, 9333, 9333, 9333, 9333, 5, 85, 16277, 40, 600, 15, 9333, 9335), + (9335, 9333, 9333, 9333, 9333, 5, 85, 16278, 40, 600, 15, 9334, -1), + (9336, 9336, 9336, 9336, 9336, 5, 85, 16284, 40, 600, 15, -1, 9337), + (9337, 9336, 9336, 9336, 9336, 5, 85, 16285, 40, 600, 15, 9336, 9338), + (9338, 9336, 9336, 9336, 9336, 5, 85, 16286, 40, 600, 15, 9337, -1), + (9339, 9339, 9339, 9339, 9339, 5, 85, 16287, 40, 600, 15, -1, 9340), + (9340, 9339, 9339, 9339, 9339, 5, 85, 16288, 40, 600, 15, 9339, 9341), + (9341, 9339, 9339, 9339, 9339, 5, 85, 16289, 40, 600, 15, 9340, -1), + (9342, 9342, 9342, 9342, 9342, 5, 85, 16290, 40, 600, 15, -1, 9343), + (9343, 9342, 9342, 9342, 9342, 5, 85, 16291, 40, 600, 15, 9342, 9344), + (9344, 9342, 9342, 9342, 9342, 5, 85, 16292, 40, 600, 15, 9343, -1), + (9345, 9345, 9345, 9345, 9345, 5, 85, 16293, 40, 600, 15, -1, 9346), + (9346, 9345, 9345, 9345, 9345, 5, 85, 16294, 40, 600, 15, 9345, 9347), + (9347, 9345, 9345, 9345, 9345, 5, 85, 16295, 40, 600, 15, 9346, -1), + (9348, 9348, 9348, 9348, 9348, 5, 85, 16296, 40, 600, 15, -1, 9349), + (9349, 9348, 9348, 9348, 9348, 5, 85, 16297, 40, 600, 15, 9348, 9350), + (9350, 9348, 9348, 9348, 9348, 5, 85, 16298, 40, 600, 15, 9349, -1), + (9351, 9351, 9351, 9351, 9351, 5, 85, 16299, 40, 600, 15, -1, 9352), + (9352, 9351, 9351, 9351, 9351, 5, 85, 16300, 40, 600, 15, 9351, 9353), + (9353, 9351, 9351, 9351, 9351, 5, 85, 16301, 40, 600, 15, 9352, -1), + (9354, 9354, 9354, 9354, 9354, 5, 85, 16305, 40, 600, 15, -1, 9355), + (9355, 9354, 9354, 9354, 9354, 5, 85, 16306, 40, 600, 15, 9354, 9356), + (9356, 9354, 9354, 9354, 9354, 5, 85, 16307, 40, 600, 15, 9355, 12626), + (9357, 9357, 9357, 9357, 9357, 5, 85, 16308, 40, 600, 15, -1, 9358), + (9358, 9357, 9357, 9357, 9357, 5, 85, 16309, 40, 600, 15, 9357, 9359), + (9359, 9357, 9357, 9357, 9357, 5, 85, 16310, 40, 600, 15, 9358, 12629), + (9360, 9360, 9360, 9360, 9360, 5, 85, 16311, 40, 600, 15, -1, 9361), + (9361, 9360, 9360, 9360, 9360, 5, 85, 16312, 40, 600, 15, 9360, 9362), + (9362, 9360, 9360, 9360, 9360, 5, 85, 16313, 40, 600, 15, 9361, 12632), + (9363, 9363, 9363, 9363, 9363, 5, 85, 16317, 40, 600, 15, -1, 9364), + (9364, 9363, 9363, 9363, 9363, 5, 85, 16318, 40, 600, 15, 9363, 9365), + (9365, 9363, 9363, 9363, 9363, 5, 85, 16319, 40, 600, 15, 9364, -1), + (9366, 9366, 9366, 9366, 9366, 5, 85, 16320, 40, 600, 15, -1, 9367), + (9367, 9366, 9366, 9366, 9366, 5, 85, 16321, 40, 600, 15, 9366, 9368), + (9368, 9366, 9366, 9366, 9366, 5, 85, 16322, 40, 600, 15, 9367, -1), + (9369, 9369, 9369, 9369, 9369, 5, 85, 16323, 40, 600, 15, -1, 9370), + (9370, 9369, 9369, 9369, 9369, 5, 85, 16324, 40, 600, 15, 9369, 9371), + (9371, 9369, 9369, 9369, 9369, 5, 85, 16325, 40, 600, 15, 9370, -1), + (9372, 9372, 9372, 9372, 9372, 5, 85, 16326, 40, 600, 15, -1, 9373), + (9373, 9372, 9372, 9372, 9372, 5, 85, 16327, 40, 600, 15, 9372, 9374), + (9374, 9372, 9372, 9372, 9372, 5, 85, 16328, 40, 600, 15, 9373, -1), + (9375, 9375, 9375, 9375, 9375, 5, 85, 16329, 40, 600, 15, -1, 9376), + (9376, 9375, 9375, 9375, 9375, 5, 85, 16330, 40, 600, 15, 9375, 9377), + (9377, 9375, 9375, 9375, 9375, 5, 85, 16331, 40, 600, 15, 9376, -1), + (9378, 9378, 9378, 9378, 9378, 5, 85, 16332, 40, 600, 15, -1, 9379), + (9379, 9378, 9378, 9378, 9378, 5, 85, 16333, 40, 600, 15, 9378, 9380), + (9380, 9378, 9378, 9378, 9378, 5, 85, 16334, 40, 600, 15, 9379, -1), + (9381, 9381, 9381, 9381, 9381, 5, 85, 16335, 40, 600, 15, -1, 9382), + (9382, 9381, 9381, 9381, 9381, 5, 85, 16336, 40, 600, 15, 9381, 9383), + (9383, 9381, 9381, 9381, 9381, 5, 85, 16337, 40, 600, 15, 9382, -1), + (9384, 9384, 9384, 9384, 9384, 5, 85, 16338, 40, 600, 15, -1, 9385), + (9385, 9384, 9384, 9384, 9384, 5, 85, 16339, 40, 600, 15, 9384, 9386), + (9386, 9384, 9384, 9384, 9384, 5, 85, 16340, 40, 600, 15, 9385, -1), + (9387, 9387, 9387, 9387, 9387, 5, 85, 16341, 40, 600, 15, -1, 9388), + (9388, 9387, 9387, 9387, 9387, 5, 85, 16342, 40, 600, 15, 9387, 9389), + (9389, 9387, 9387, 9387, 9387, 5, 85, 16343, 40, 600, 15, 9388, -1), + (9390, 9390, 9390, 9390, 9390, 5, 85, 16344, 40, 600, 15, -1, 9391), + (9391, 9390, 9390, 9390, 9390, 5, 85, 16345, 40, 600, 15, 9390, 9392), + (9392, 9390, 9390, 9390, 9390, 5, 85, 16346, 40, 600, 15, 9391, -1), + (9393, 9393, 9393, 9393, 9393, 5, 85, 16347, 40, 600, 15, -1, 9394), + (9394, 9393, 9393, 9393, 9393, 5, 85, 16348, 40, 600, 15, 9393, 9395), + (9395, 9393, 9393, 9393, 9393, 5, 85, 16349, 40, 600, 15, 9394, -1), + (9396, 9396, 9396, 9396, 9396, 5, 85, 16350, 40, 600, 15, -1, 9397), + (9397, 9396, 9396, 9396, 9396, 5, 85, 16351, 40, 600, 15, 9396, 9398), + (9398, 9396, 9396, 9396, 9396, 5, 85, 16352, 40, 600, 15, 9397, -1), + (9399, 9399, 9399, 9399, 9399, 5, 85, 16359, 40, 600, 15, -1, 9400), + (9400, 9399, 9399, 9399, 9399, 5, 85, 16360, 40, 600, 15, 9399, 9401), + (9401, 9399, 9399, 9399, 9399, 5, 85, 16361, 40, 600, 15, 9400, -1), + (9402, 9402, 9402, 9402, 9402, 5, 85, 16362, 40, 600, 15, -1, 9403), + (9403, 9402, 9402, 9402, 9402, 5, 85, 16363, 40, 600, 15, 9402, 9404), + (9404, 9402, 9402, 9402, 9402, 5, 85, 16364, 40, 600, 15, 9403, -1), + (9405, 9405, 9405, 9405, 9405, 5, 85, 16365, 40, 600, 15, -1, 9406), + (9406, 9405, 9405, 9405, 9405, 5, 85, 16366, 40, 600, 15, 9405, 9407), + (9407, 9405, 9405, 9405, 9405, 5, 85, 16367, 40, 600, 15, 9406, -1), + (9408, 9408, 9408, 9408, 9408, 5, 85, 16368, 40, 600, 15, -1, 9409), + (9409, 9408, 9408, 9408, 9408, 5, 85, 16369, 40, 600, 15, 9408, 9410), + (9410, 9408, 9408, 9408, 9408, 5, 85, 16370, 40, 600, 15, 9409, -1), + (9411, 9411, 9411, 9411, 9411, 5, 85, 16371, 40, 600, 15, -1, 9412), + (9412, 9411, 9411, 9411, 9411, 5, 85, 16372, 40, 600, 15, 9411, 9413), + (9413, 9411, 9411, 9411, 9411, 5, 85, 16373, 40, 600, 15, 9412, -1), + (9414, 9414, 9414, 9414, 9414, 5, 85, 16374, 40, 600, 15, -1, 9415), + (9415, 9414, 9414, 9414, 9414, 5, 85, 16375, 40, 600, 15, 9414, 9416), + (9416, 9414, 9414, 9414, 9414, 5, 85, 16376, 40, 600, 15, 9415, -1), + (9417, 9417, 9417, 9417, 9417, 5, 85, 16377, 40, 600, 15, -1, 9418), + (9418, 9417, 9417, 9417, 9417, 5, 85, 16378, 40, 600, 15, 9417, 9419), + (9419, 9417, 9417, 9417, 9417, 5, 85, 16379, 40, 600, 15, 9418, -1), + (9420, 9420, 9420, 9420, 9420, 5, 85, 16380, 40, 600, 15, -1, 9421), + (9421, 9420, 9420, 9420, 9420, 5, 85, 16381, 40, 600, 15, 9420, 9422), + (9422, 9420, 9420, 9420, 9420, 5, 85, 16382, 40, 600, 15, 9421, -1), + (9423, 9423, 9423, 9423, 9423, 5, 85, 16386, 40, 600, 15, -1, 9424), + (9424, 9423, 9423, 9423, 9423, 5, 85, 16387, 40, 600, 15, 9423, 9425), + (9425, 9423, 9423, 9423, 9423, 5, 85, 16388, 40, 600, 15, 9424, -1), + (9426, 9426, 9426, 9426, 9426, 5, 85, 16389, 40, 600, 15, -1, 9427), + (9427, 9426, 9426, 9426, 9426, 5, 85, 16390, 40, 600, 15, 9426, 9428), + (9428, 9426, 9426, 9426, 9426, 5, 85, 16391, 40, 600, 15, 9427, -1), + (9429, 9429, 9429, 9429, 9429, 5, 85, 16392, 40, 600, 15, -1, 9430), + (9430, 9429, 9429, 9429, 9429, 5, 85, 16393, 40, 600, 15, 9429, 9431), + (9431, 9429, 9429, 9429, 9429, 5, 85, 16394, 40, 600, 15, 9430, -1), + (9432, 9432, 9432, 9432, 9432, 5, 85, 16395, 40, 600, 15, -1, 9433), + (9433, 9432, 9432, 9432, 9432, 5, 85, 16396, 40, 600, 15, 9432, 9434), + (9434, 9432, 9432, 9432, 9432, 5, 85, 16397, 40, 600, 15, 9433, -1), + (9435, 9435, 9435, 9435, 9435, 5, 85, 16398, 40, 600, 15, -1, 9436), + (9436, 9435, 9435, 9435, 9435, 5, 85, 16399, 40, 600, 15, 9435, 9437), + (9437, 9435, 9435, 9435, 9435, 5, 85, 16400, 40, 600, 15, 9436, -1), + (9438, 9438, 9438, 9438, 9438, 5, 85, 16401, 40, 600, 15, -1, 9439), + (9439, 9438, 9438, 9438, 9438, 5, 85, 16402, 40, 600, 15, 9438, 9440), + (9440, 9438, 9438, 9438, 9438, 5, 85, 16403, 40, 600, 15, 9439, -1), + (9441, 9441, 9441, 9441, 9441, 5, 85, 16404, 40, 600, 15, -1, 9442), + (9442, 9441, 9441, 9441, 9441, 5, 85, 16405, 40, 600, 15, 9441, 9443), + (9443, 9441, 9441, 9441, 9441, 5, 85, 16406, 40, 600, 15, 9442, -1), + (9500, 9500, 9500, 9500, 9500, 3, 76, 16247, 47, 60, 15, -1, -1), + (9501, 9501, 9501, 9501, 9501, 9, 85, 16247, 47, 600, 15, -1, -1), + (9502, 9502, 9502, 9502, 9502, 7, 81, 16248, 48, 3600, 15, -1, -1), + (9503, -1, -1, 9503, 9503, 7, 83, -1, 0, 0, 15, -1, 9504), + (9504, -1, -1, 9503, 9503, 7, 84, -1, 0, 0, 15, 9503, 9505), + (9505, -1, -1, 9503, 9503, 7, 85, -1, 0, 0, 15, 9504, 10087), + (9506, -1, -1, 9506, 9506, 7, 81, -1, 0, 0, 15, -1, 9507), + (9507, -1, -1, 9506, 9506, 7, 83, -1, 0, 0, 15, 9506, 9508), + (9508, -1, -1, 9506, 9506, 7, 85, -1, 0, 0, 15, 9507, 13630), + (9509, -1, -1, 9509, 9509, 7, 81, -1, 0, 0, 15, -1, 9510), + (9510, -1, -1, 9509, 9509, 7, 82, -1, 0, 0, 15, 9509, 9511), + (9511, -1, -1, 9509, 9509, 7, 83, -1, 0, 0, 15, 9510, 9515), + (9512, -1, -1, 9512, 9512, 7, 81, -1, 0, 0, 15, -1, 9513), + (9513, -1, -1, 9512, 9512, 7, 82, -1, 0, 0, 15, 9512, 9514), + (9514, -1, -1, 9512, 9512, 7, 83, -1, 0, 0, 15, 9513, 7819), + (9515, -1, -1, 9509, 9509, 7, 86, -1, 0, 0, 17, 9511, 16361), + (10003, 6610, 6610, 6610, 6610, 5, 60, 16494, 41, 30, 16, 6610, 10573), + (10004, -1, -1, 6614, 6614, 6, 70, -1, 0, 0, 16, 6616, 10005), + (10005, -1, -1, 6614, 6614, 9, 70, -1, 0, 0, 16, 10004, 10575), + (10006, 54006, 54006, 54006, 54006, 7, 85, 16495, 18, 180, 16, 7111, 13425), + (10007, -1, -1, 6564, 6564, 10, 85, -1, 0, 0, 16, 7114, 10008), + (10008, -1, -1, 6564, 6564, 10, 85, -1, 0, 0, 16, 10007, 10009), + (10009, -1, -1, 6564, 6564, 10, 85, -1, 0, 0, 16, 10008, 10568), + (10010, 6565, 6565, 6565, 6565, 7, 85, 16496, 17, 45, 16, 7115, 10517), + (10011, 912, 912, 912, 912, 9, 80, 16497, 4, 3600, 16, 7121, 10012), + (10012, 912, 912, 912, 912, 9, 80, 16498, 4, 3600, 16, 10011, 10013), + (10013, 912, 912, 912, 912, 9, 80, 16499, 4, 3600, 16, 10012, 10585), + (10014, 1383, 1383, 1383, 1383, 12, 85, 21766, 6, 300, 16, 7299, 6487), + (10015, 1195, 1195, 1195, 1195, 9, 85, 16504, 13, 2160, 16, 7300, 13259), + (10016, 131, 131, 131, 131, 10, 85, 16505, 4, 900, 16, 7303, 10017), + (10017, 131, 131, 131, 131, 10, 85, 16506, 4, 900, 16, 10016, 10018), + (10018, 131, 131, 131, 131, 10, 85, 16507, 4, 900, 16, 10017, 7770), + (10019, 1192, 1192, 1192, 1192, 10, 85, 20177, 12, 1320, 16, 7306, 10020), + (10020, 1192, 1192, 1192, 1192, 10, 85, 21652, 12, 1320, 16, 10019, 10021), + (10021, 1192, 1192, 1192, 1192, 10, 85, 21704, 12, 1320, 16, 10020, 13363), + (10022, 746, 746, 746, 746, 12, 85, 16511, 10, 2160, 16, 7309, 10023), + (10023, 746, 746, 746, 746, 12, 85, 16512, 10, 2160, 16, 10022, 10024), + (10024, 746, 746, 746, 746, 12, 85, 16513, 10, 2160, 16, 10023, 15321), + (10025, -1, -1, 6601, 6601, 6, 85, -1, 0, 0, 16, 7322, 10026), + (10026, -1, -1, 6601, 6601, 6, 85, -1, 0, 0, 16, 10025, 10027), + (10027, -1, -1, 6601, 6601, 6, 85, -1, 0, 0, 16, 10026, 10028), + (10028, -1, -1, 6601, 6601, 6, 85, -1, 0, 0, 16, 10027, 10029), + (10029, -1, -1, 6601, 6601, 6, 85, -1, 0, 0, 16, 10028, 10437), + (10030, -1, -1, 7940, 7940, 5, 75, -1, 0, 0, 16, 7942, 10031), + (10031, -1, -1, 7940, 7940, 7, 75, -1, 0, 0, 16, 10030, 10032), + (10032, -1, -1, 7940, 7940, 9, 75, -1, 0, 0, 16, 10031, 6484), + (10033, -1, -1, 7945, 7945, 6, 85, -1, 0, 0, 16, 7947, 10034), + (10034, -1, -1, 7945, 7945, 6, 85, -1, 0, 0, 16, 10033, 10347), + (10035, -1, -1, 7948, 7948, 6, 85, -1, 0, 0, 16, 7950, 10036), + (10036, -1, -1, 7948, 7948, 6, 85, -1, 0, 0, 16, 10035, 10037), + (10037, -1, -1, 7948, 7948, 6, 85, -1, 0, 0, 16, 10036, 15328), + (10038, 7951, 7951, 7951, 7951, 6, 85, 16514, 61, 900, 16, 7953, 10039), + (10039, 7951, 7951, 7951, 7951, 6, 85, 16515, 61, 900, 16, 10038, 10040), + (10040, 7951, 7951, 7951, 7951, 6, 85, 16516, 61, 900, 16, 10039, 7773), + (10041, -1, -1, 6636, 6636, 9, 75, -1, 0, 0, 16, 6638, 10042), + (10042, -1, -1, 6636, 6636, 10, 75, -1, 0, 0, 16, 10041, 10043), + (10043, -1, -1, 6636, 6636, 11, 75, -1, 0, 0, 16, 10042, 12529), + (10044, -1, -1, 6791, 6791, 6, 85, -1, 0, 0, 16, 6793, 10045), + (10045, -1, -1, 6791, 6791, 6, 85, -1, 0, 0, 16, 10044, 10046), + (10046, -1, -1, 6791, 6791, 6, 85, -1, 0, 0, 16, 10045, 10676), + (10047, 534, 534, 534, 534, 12, 85, 16561, 4, 2160, 16, 7331, 10048), + (10048, 534, 534, 534, 534, 12, 85, 16562, 4, 2160, 16, 10047, 10049), + (10049, 534, 534, 534, 534, 12, 85, 16563, 4, 2160, 16, 10048, 10708), + (10050, -1, -1, 6395, 6395, 7, 85, -1, 0, 0, 16, 7338, 10051), + (10051, -1, -1, 6395, 6395, 7, 85, -1, 0, 0, 16, 10050, 10052), + (10052, -1, -1, 6395, 6395, 7, 85, -1, 0, 0, 16, 10051, 10705), + (10053, 6754, 6754, 6754, 6754, 9, 75, 16570, 41, 1200, 16, 6754, 14111), + (10054, 6758, 6758, 6758, 6758, 10, 85, 16571, 43, 900, 16, 6760, 10055), + (10055, 6758, 6758, 6758, 6758, 11, 85, 16572, 43, 900, 16, 10054, 10056), + (10056, 6758, 6758, 6758, 6758, 12, 85, 16573, 43, 900, 16, 10055, 13546), + (10057, 6764, 6764, 6764, 6764, 9, 80, 16574, 52, 600, 16, 6764, 16716), + (10058, -1, -1, 6765, 6765, 9, 85, -1, 0, 0, 16, 6767, 10059), + (10059, -1, -1, 6765, 6765, 9, 85, -1, 0, 0, 16, 10058, 10060), + (10060, -1, -1, 6765, 6765, 9, 85, -1, 0, 0, 16, 10059, 10766), + (10061, 5007, 5007, 5007, 5007, 9, 85, 16575, 8, 2160, 16, 7343, 10062), + (10062, 5007, 5007, 5007, 5007, 9, 85, 16576, 8, 2160, 16, 10061, 10063), + (10063, 5007, 5007, 5007, 5007, 9, 85, 16577, 8, 2160, 16, 10062, 13119), + (10064, -1, -1, 1608, 1608, 6, 85, -1, 0, 0, 16, 7383, 10065), + (10065, -1, -1, 1608, 1608, 7, 85, -1, 0, 0, 16, 10064, 10066), + (10066, -1, -1, 1608, 1608, 8, 85, -1, 0, 0, 16, 10065, 10067), + (10067, -1, -1, 1608, 1608, 9, 85, -1, 0, 0, 16, 10066, 10068), + (10068, -1, -1, 1608, 1608, 10, 85, -1, 0, 0, 16, 10067, 10069), + (10069, -1, -1, 1608, 1608, 11, 85, -1, 0, 0, 16, 10068, 16730), + (10070, -1, -1, 6630, 6630, 6, 75, -1, 0, 0, 16, 6634, 10071), + (10071, -1, -1, 6630, 6630, 6, 75, -1, 0, 0, 16, 10070, 10072), + (10072, -1, -1, 6630, 6630, 6, 75, -1, 0, 0, 16, 10071, 10073), + (10073, -1, -1, 6630, 6630, 6, 75, -1, 0, 0, 16, 10072, 10074), + (10074, -1, -1, 6630, 6630, 6, 75, -1, 0, 0, 16, 10073, 13621), + (10075, -1, -1, 6641, 6641, 9, 85, -1, 0, 0, 16, 6643, 10076), + (10076, -1, -1, 6641, 6641, 9, 85, -1, 0, 0, 16, 10075, 10077), + (10077, -1, -1, 6641, 6641, 9, 85, -1, 0, 0, 16, 10076, 16192), + (10078, 6508, 6508, 6508, 6508, 7, 85, 16578, 38, 600, 16, 7389, 10079), + (10079, 6508, 6508, 6508, 6508, 7, 85, 16579, 38, 600, 16, 10078, 10080), + (10080, 6508, 6508, 6508, 6508, 7, 85, 16580, 38, 600, 16, 10079, 15775), + (10081, -1, -1, 1313, 1313, 12, 85, -1, 0, 0, 16, 7398, 10082), + (10082, -1, -1, 1313, 1313, 12, 85, -1, 0, 0, 16, 10081, 10083), + (10083, -1, -1, 1313, 1313, 12, 85, -1, 0, 0, 16, 10082, 12579), + (10084, -1, -1, 6375, 6375, 6, 85, -1, 0, 0, 16, 7663, 10085), + (10085, -1, -1, 6375, 6375, 6, 85, -1, 0, 0, 16, 10084, 10086), + (10086, -1, -1, 6375, 6375, 6, 85, -1, 0, 0, 16, 10085, 5347), + (10087, -1, -1, 9503, 9503, 7, 85, -1, 0, 0, 16, 9505, 10088), + (10088, -1, -1, 9503, 9503, 7, 85, -1, 0, 0, 16, 10087, 10089), + (10089, -1, -1, 9503, 9503, 7, 85, -1, 0, 0, 16, 10088, 12792), + (10090, 1498, 1498, 1498, 1498, 12, 85, 16590, 12, 1320, 16, 7410, 10091), + (10091, 1498, 1498, 1498, 1498, 12, 85, 16591, 12, 1320, 16, 10090, 10092), + (10092, 1498, 1498, 1498, 1498, 12, 85, 16602, 12, 1320, 16, 10091, 13401), + (10093, 1495, 1495, 1495, 1495, 9, 86, 16603, 30, 900, 17, 7416, 10094), + (10096, 548, 548, 548, 548, 10, 85, 16606, 5, 900, 16, 7419, 10097), + (10097, 548, 548, 548, 548, 10, 85, 16607, 5, 900, 16, 10096, 10098), + (10098, 548, 548, 548, 548, 10, 85, 16608, 5, 900, 16, 10097, 13158), + (10099, 6561, 6561, 6561, 6561, 7, 85, 16609, 32, 30, 16, 7424, 10100), + (10100, 6561, 6561, 6561, 6561, 7, 85, 16610, 32, 30, 16, 10099, 10101), + (10101, 6561, 6561, 6561, 6561, 7, 85, 16611, 32, 30, 16, 10100, 10418), + (10102, 510, 510, 510, 510, 3, 75, 16587, 37, 240, 16, 7427, 10103), + (10103, 510, 510, 510, 510, 3, 75, 16588, 37, 240, 16, 10102, 10104), + (10104, 510, 510, 510, 510, 3, 75, 16589, 37, 240, 16, 10103, 10824), + (10105, -1, -1, 7664, 7664, 2, 82, -1, 0, 0, 16, 7668, 10106), + (10106, -1, -1, 7664, 7664, 2, 82, -1, 0, 0, 16, 10105, 10107), + (10107, -1, -1, 7664, 7664, 2, 82, -1, 0, 0, 16, 10106, 10108), + (10108, -1, -1, 7664, 7664, 2, 82, -1, 0, 0, 16, 10107, 10109), + (10109, -1, -1, 7664, 7664, 2, 82, -1, 0, 0, 16, 10108, 17350), + (10110, -1, -1, 7983, 7983, 6, 81, -1, 0, 0, 16, 7985, 10111), + (10111, -1, -1, 7983, 7983, 6, 81, -1, 0, 0, 16, 10110, 10112), + (10112, -1, -1, 7983, 7983, 6, 81, -1, 0, 0, 16, 10111, -1), + (10113, 1352, 1352, 1352, 1352, 6, 85, 16618, 3, 60, 16, 7156, 10114), + (10114, 1352, 1352, 1352, 1352, 6, 85, 16619, 3, 60, 16, 10113, 10115), + (10115, 1352, 1352, 1352, 1352, 6, 85, 16620, 3, 60, 16, 10114, 13807), + (10116, 1358, 1358, 1358, 1358, 6, 85, 16615, 3, 60, 16, 7159, 10117), + (10117, 1358, 1358, 1358, 1358, 6, 85, 16616, 3, 60, 16, 10116, 10118), + (10118, 1358, 1358, 1358, 1358, 6, 85, 16617, 3, 60, 16, 10117, 13810), + (10119, 1355, 1355, 1355, 1355, 6, 85, 16612, 3, 60, 16, 7174, 10120), + (10120, 1355, 1355, 1355, 1355, 6, 85, 16613, 3, 60, 16, 10119, 10121), + (10121, 1355, 1355, 1355, 1355, 6, 85, 16614, 3, 60, 16, 10120, 12700), + (10122, -1, -1, 4801, 4801, 6, 85, -1, 0, 0, 16, 7162, 10123), + (10123, -1, -1, 4801, 4801, 6, 85, -1, 0, 0, 16, 10122, 12674), + (10124, -1, -1, 611, 611, 2, 75, -1, 0, 0, 16, 7177, 10125), + (10125, -1, -1, 611, 611, 2, 75, -1, 0, 0, 16, 10124, 10126), + (10126, -1, -1, 611, 611, 2, 75, -1, 0, 0, 16, 10125, 12703), + (10127, 7872, 7872, 7872, 7872, 6, 85, 16621, 41, 600, 16, 7874, 10128), + (10128, 7872, 7872, 7872, 7872, 6, 85, 16622, 41, 600, 16, 10127, 10129), + (10129, 7872, 7872, 7872, 7872, 6, 85, 16623, 41, 600, 16, 10128, 12682), + (10130, -1, -1, 6870, 6870, 6, 80, -1, 0, 0, 16, 6872, 10131), + (10131, -1, -1, 6870, 6870, 6, 80, -1, 0, 0, 16, 10130, 10132), + (10132, -1, -1, 6870, 6870, 6, 80, -1, 0, 0, 16, 10131, -1), + (10133, -1, -1, 255, 255, 9, 80, -1, 0, 0, 16, 6875, 10134), + (10134, -1, -1, 255, 255, 9, 80, -1, 0, 0, 16, 10133, 10135), + (10135, -1, -1, 255, 255, 9, 80, -1, 0, 0, 16, 10134, 13196), + (10136, -1, -1, 6375, 6375, 6, 83, -1, 0, 0, 16, 6878, 10137), + (10137, -1, -1, 6375, 6375, 6, 83, -1, 0, 0, 16, 10136, 10138), + (10138, -1, -1, 6375, 6375, 6, 83, -1, 0, 0, 16, 10137, 12734), + (10139, 6533, 6533, 6533, 6533, 10, 85, 16631, 15, 600, 16, 7428, 12740), + (10140, 1116, 1116, 1116, 1116, 12, 85, 16647, 4, 2160, 16, 7432, 10141), + (10141, 1116, 1116, 1116, 1116, 12, 85, 16648, 4, 2160, 16, 10140, 10142), + (10142, 1116, 1116, 1116, 1116, 12, 85, 16649, 4, 2160, 16, 10141, 12743), + (10143, 5298, 5298, 5298, 5298, 12, 85, 16632, 32, 1800, 16, 7440, 10144), + (10144, 5298, 5298, 5298, 5298, 12, 85, 16633, 32, 1800, 16, 10143, 10145), + (10145, 5298, 5298, 5298, 5298, 12, 85, 16634, 32, 1800, 16, 10144, 12746), + (10146, 1598, -1, 1598, 1598, 12, 85, 16638, 6, 900, 16, 7443, 10147), + (10147, 1598, -1, 1598, 1598, 12, 85, 16639, 6, 900, 16, 10146, 10148), + (10148, 1598, -1, 1598, 1598, 12, 85, 16640, 6, 900, 16, 10147, 13193), + (10149, 5020, 5020, 5020, 5020, 9, 85, 16630, 9, 300, 16, 7444, 13490), + (10150, 1110, 1110, 1110, 1110, 6, 85, 16641, 3, 2160, 16, 7447, 10151), + (10151, 1110, 1110, 1110, 1110, 6, 85, 16642, 3, 2160, 16, 10150, 10152), + (10152, 1110, 1110, 1110, 1110, 6, 85, 16643, 3, 2160, 16, 10151, 13190), + (10153, -1, -1, 6337, 6337, 6, 85, -1, 0, 0, 16, 7450, 10154), + (10154, -1, -1, 6337, 6337, 6, 85, -1, 0, 0, 16, 10153, 10155), + (10155, -1, -1, 6337, 6337, 6, 85, -1, 0, 0, 16, 10154, 16297), + (10156, 5017, 5017, 5017, 5017, 9, 85, 16627, 8, 600, 16, 7456, 10157), + (10157, 5017, 5017, 5017, 5017, 9, 85, 16628, 8, 600, 16, 10156, 10158), + (10158, 5017, 5017, 5017, 5017, 9, 85, 16629, 8, 600, 16, 10157, 14189), + (10159, 1569, 1569, 1569, 1569, 7, 85, 16624, 5, 1800, 16, 7459, 10160), + (10160, 1569, 1569, 1569, 1569, 7, 85, 16625, 5, 1800, 16, 10159, 10161), + (10161, 1569, 1569, 1569, 1569, 7, 85, 16626, 5, 1800, 16, 10160, 17276), + (10162, 6663, 6663, 6663, 6663, 7, 82, 16653, 59, 600, 16, 6665, 10163), + (10163, 6663, 6663, 6663, 6663, 7, 82, 16654, 59, 600, 16, 10162, 10164), + (10164, 6663, 6663, 6663, 6663, 7, 82, 16655, 59, 600, 16, 10163, -1), + (10165, -1, -1, 1543, 1543, 12, 85, -1, 0, 0, 16, 7136, 10166), + (10166, -1, -1, 1543, 1543, 12, 85, -1, 0, 0, 16, 10165, 10167), + (10167, -1, -1, 1543, 1543, 12, 85, -1, 0, 0, 16, 10166, 13213), + (10168, 6328, 6328, 6328, 6328, 7, 85, 16650, 10, 600, 16, 7145, 10169), + (10169, 6328, 6328, 6328, 6328, 7, 85, 16651, 10, 600, 16, 10168, 10170), + (10170, 6328, 6328, 6328, 6328, 7, 85, 16652, 10, 600, 16, 10169, 13770), + (10171, -1, -1, 878, 878, 7, 85, -1, 0, 0, 16, 7147, 10172), + (10172, -1, -1, 878, 878, 7, 85, -1, 0, 0, 16, 10171, -1), + (10173, -1, -1, 846, 846, 12, 85, -1, 0, 0, 16, 7153, 10174), + (10174, -1, -1, 846, 846, 12, 85, -1, 0, 0, 16, 10173, 10175), + (10175, -1, -1, 846, 846, 12, 85, -1, 0, 0, 16, 10174, 13795), + (10176, -1, -1, 6703, 6703, 3, 70, -1, 0, 0, 16, 6705, 10177), + (10177, -1, -1, 6703, 6703, 3, 70, -1, 0, 0, 16, 10176, 10178), + (10178, -1, -1, 6703, 6703, 3, 70, -1, 0, 0, 16, 10177, 13005), + (10179, 6706, 6706, 6706, 6706, 7, 85, 16675, 44, 600, 16, 6708, 10180), + (10180, 6706, 6706, 6706, 6706, 7, 85, 16676, 44, 600, 16, 10179, 10181), + (10181, 6706, 6706, 6706, 6706, 7, 85, 16677, 44, 600, 16, 10180, 5353), + (10182, -1, -1, 6712, 6712, 7, 85, -1, 0, 0, 16, 6716, 10183), + (10183, -1, -1, 6712, 6712, 7, 85, -1, 0, 0, 16, 10182, 10184), + (10184, -1, -1, 6712, 6712, 7, 85, -1, 0, 0, 16, 10183, 10185), + (10185, -1, -1, 6712, 6712, 7, 85, -1, 0, 0, 16, 10184, 10186), + (10186, -1, -1, 6712, 6712, 7, 85, -1, 0, 0, 16, 10185, -1), + (10187, 1327, 1327, 1327, 1327, 12, 85, 16665, 10, 900, 16, 7462, 10188), + (10188, 1327, 1327, 1327, 1327, 12, 85, 16666, 10, 900, 16, 10187, 10189), + (10189, 1327, 1327, 1327, 1327, 12, 85, 16667, 10, 900, 16, 10188, 5330), + (10190, 1520, 1520, 1520, 1520, 9, 80, 16672, 11, 900, 16, 7465, 10191), + (10191, 1520, 1520, 1520, 1520, 9, 80, 16673, 11, 900, 16, 10190, 10192), + (10192, 1520, 1520, 1520, 1520, 9, 80, 16674, 11, 900, 16, 10191, 12997), + (10193, 153, 153, 153, 153, 12, 85, 16668, 3, 2160, 16, 7468, 11081), + (10194, 528, 528, 528, 528, 12, 85, 16669, 5, 720, 16, 7471, 10195), + (10195, 528, 528, 528, 528, 12, 85, 16670, 5, 720, 16, 10194, 10196), + (10196, 528, 528, 528, 528, 12, 85, 16671, 5, 720, 16, 10195, 13161), + (10197, 5251, 5251, 5251, 5251, 12, 85, 16662, 13, 900, 16, 7474, 10198), + (10198, 5251, 5251, 5251, 5251, 12, 85, 16663, 13, 900, 16, 10197, 10199), + (10199, 5251, 5251, 5251, 5251, 12, 85, 16664, 13, 900, 16, 10198, 5363), + (10200, 6815, 6815, 6815, 6815, 8, 85, 16691, 60, 600, 16, 6817, 10201), + (10201, 6815, 6815, 6815, 6815, 8, 85, 16692, 60, 600, 16, 10200, 10202), + (10202, 6815, 6815, 6815, 6815, 8, 85, 16693, 60, 600, 16, 10201, 12786), + (10203, -1, -1, 6819, 6819, 6, 77, -1, 0, 0, 16, 6821, 10204), + (10204, -1, -1, 6819, 6819, 6, 77, -1, 0, 0, 16, 10203, 10205), + (10205, -1, -1, 6819, 6819, 6, 77, -1, 0, 0, 16, 10204, -1), + (10206, -1, -1, 6823, 6823, 4, 75, -1, 0, 0, 16, 6827, 10207), + (10207, -1, -1, 6823, 6823, 4, 77, -1, 0, 0, 16, 10206, -1), + (10208, 6828, 6828, 6828, 6828, 12, 85, 16686, 43, 60, 16, 6828, 17534), + (10209, 1274, 1274, 1274, 1274, 12, 85, 16683, 9, 540, 16, 7201, 10210), + (10210, 1274, 1274, 1274, 1274, 12, 85, 16684, 9, 540, 16, 10209, 10211), + (10211, 1274, 1274, 1274, 1274, 12, 85, 16685, 9, 540, 16, 10210, 12760), + (10212, 1510, -1, 1510, 1510, 12, 80, 16690, 13, 2160, 16, 7202, -1), + (10213, -1, -1, 5264, 5264, 12, 85, -1, 0, 0, 16, 7208, 10214), + (10214, -1, -1, 5264, 5264, 12, 85, -1, 0, 0, 16, 10213, 10215), + (10215, -1, -1, 5264, 5264, 12, 85, -1, 0, 0, 16, 10214, 10216), + (10216, -1, -1, 5264, 5264, 12, 85, -1, 0, 0, 16, 10215, 10217), + (10217, -1, -1, 5264, 5264, 12, 85, -1, 0, 0, 16, 10216, 12798), + (10218, 4927, 4927, 4927, 4927, 9, 85, 16682, 14, 600, 16, 7209, -1), + (10219, -1, -1, 839, 839, 6, 80, -1, 0, 0, 16, 7214, 10220), + (10220, -1, -1, 839, 839, 6, 80, -1, 0, 0, 16, 10219, 10221), + (10221, -1, -1, 839, 839, 6, 80, -1, 0, 0, 16, 10220, 10222), + (10222, -1, -1, 839, 839, 6, 80, -1, 0, 0, 16, 10221, 10223), + (10223, -1, -1, 839, 839, 6, 80, -1, 0, 0, 16, 10222, -1), + (10224, 967, 967, 967, 967, 6, 85, 16687, 10, 1800, 16, 7219, 10225), + (10225, 967, 967, 967, 967, 6, 85, 16688, 10, 1800, 16, 10224, 10226), + (10226, 967, 967, 967, 967, 6, 85, 16689, 10, 1800, 16, 10225, 12789), + (10227, -1, -1, 5295, 5295, 6, 85, -1, 0, 0, 16, 7222, 10228), + (10228, -1, -1, 5295, 5295, 6, 85, -1, 0, 0, 16, 10227, 10229), + (10229, -1, -1, 5295, 5295, 6, 85, -1, 0, 0, 16, 10228, 13226), + (10230, 619, 619, 619, 619, 6, 83, 16704, 6, 900, 16, 7228, 10231), + (10231, 619, 619, 619, 619, 6, 83, 16705, 6, 900, 16, 10230, 10232), + (10232, 619, 619, 619, 619, 6, 83, 16706, 6, 900, 16, 10231, -1), + (10233, 516, 516, 516, 516, 6, 82, 16707, 5, 480, 16, 7237, 12879), + (10234, 1334, 1334, 1334, 1334, 12, 85, 16701, 11, 4320, 16, 7241, 10235), + (10235, 1334, 1334, 1334, 1334, 12, 85, 16702, 11, 4320, 16, 10234, 10236), + (10236, 1334, 1334, 1334, 1334, 12, 85, 16703, 11, 4320, 16, 10235, 12868), + (10237, 8060, 8060, 8060, 8060, 7, 85, 16711, 41, 1800, 16, 8062, 10238), + (10238, 8060, 8060, 8060, 8060, 7, 85, 16712, 41, 1800, 16, 10237, 10239), + (10239, 8060, 8060, 8060, 8060, 7, 85, 16713, 41, 1800, 16, 10238, 13650), + (10240, 8063, 8063, 8063, 8063, 7, 85, 16714, 41, 1800, 16, 8065, 10241), + (10241, 8063, 8063, 8063, 8063, 7, 85, 16715, 41, 1800, 16, 10240, 10242), + (10242, 8063, 8063, 8063, 8063, 7, 85, 16716, 41, 1800, 16, 10241, 13653), + (10243, 8066, 8066, 8066, 8066, 7, 85, 16717, 41, 1800, 16, 8068, 10244), + (10244, 8066, 8066, 8066, 8066, 7, 85, 16718, 41, 1800, 16, 10243, 10245), + (10245, 8066, 8066, 8066, 8066, 7, 85, 16719, 41, 1800, 16, 10244, 13656), + (10246, 8072, 8072, 8072, 8072, 7, 80, 16708, 37, 20, 16, 8074, 10247), + (10247, 8072, 8072, 8072, 8072, 7, 80, 16709, 37, 20, 16, 10246, 10248), + (10248, 8072, 8072, 8072, 8072, 7, 80, 16710, 37, 20, 16, 10247, 12857), + (10249, -1, -1, 8082, 8082, 3, 74, -1, 0, 0, 16, 8084, 10250), + (10250, -1, -1, 8082, 8082, 3, 74, -1, 0, 0, 16, 10249, 10251), + (10251, -1, -1, 8082, 8082, 3, 74, -1, 0, 0, 16, 10250, -1), + (10252, 520, 520, 520, 520, 12, 85, 16723, 6, 540, 16, 7252, 10253), + (10253, 520, 520, 520, 520, 12, 85, 16724, 6, 540, 16, 10252, 10254), + (10254, 520, 520, 520, 520, 12, 85, 16725, 6, 540, 16, 10253, 12985), + (10255, 4903, 4903, 4903, 4903, 9, 81, 16726, 9, 1320, 16, 7253, 12956), + (10256, 4906, 4906, 4906, 4906, 9, 81, 16727, 9, 1320, 16, 7254, 12959), + (10257, 4909, 4909, 4909, 4909, 9, 81, 16728, 16, 1320, 16, 7255, 12957), + (10258, 4912, 4912, 4912, 4912, 9, 81, 16729, 16, 1320, 16, 7256, 12958), + (10259, 616, 616, 616, 616, 10, 85, 16733, 7, 900, 16, 7259, 10260), + (10260, 616, 616, 616, 616, 10, 85, 16734, 7, 900, 16, 10259, 10261), + (10261, 616, 616, 616, 616, 10, 85, 16735, 7, 900, 16, 10260, 14730), + (10262, -1, -1, 1577, 1577, 12, 85, -1, 0, 0, 16, 7265, 10263), + (10263, -1, -1, 1577, 1577, 12, 85, -1, 0, 0, 16, 10262, 10264), + (10264, -1, -1, 1577, 1577, 12, 85, -1, 0, 0, 16, 10263, 13707), + (10265, -1, -1, 795, 795, 12, 85, -1, 0, 0, 16, 7269, 10266), + (10266, -1, -1, 795, 795, 12, 85, -1, 0, 0, 16, 10265, 10267), + (10267, -1, -1, 795, 795, 12, 85, -1, 0, 0, 16, 10266, 12945), + (10268, -1, -1, 7900, 7900, 4, 70, -1, 0, 0, 16, 7902, 10269), + (10269, -1, -1, 7900, 7900, 4, 70, -1, 0, 0, 16, 10268, 10270), + (10270, -1, -1, 7900, 7900, 4, 70, -1, 0, 0, 16, 10269, -1), + (10271, 1242, 1242, 1242, 1242, 12, 85, 16744, 9, 1320, 16, 7287, 10272), + (10272, 1242, 1242, 1242, 1242, 12, 85, 16745, 9, 1320, 16, 10271, 10273), + (10273, 1242, 1242, 1242, 1242, 12, 85, 16746, 9, 1320, 16, 10272, 12934), + (10274, 4931, 4931, 4931, 4931, 7, 85, 16747, 4, 600, 16, 7293, 10275), + (10275, 4931, 4931, 4931, 4931, 7, 85, 16748, 4, 600, 16, 10274, 10276), + (10276, 4931, 4931, 4931, 4931, 7, 85, 16749, 4, 600, 16, 10275, 10428), + (10277, 4935, 4935, 4935, 4935, 7, 81, 16743, 14, 300, 16, 7294, 17540), + (10278, 4934, 4934, 4934, 4934, 7, 81, 16742, 13, 300, 16, 7295, 17539), + (10279, 517, 517, 517, 517, 5, 80, 16739, 12, 600, 16, 7298, 10280), + (10280, 517, 517, 517, 517, 5, 80, 16740, 12, 600, 16, 10279, 10281), + (10281, 517, 517, 517, 517, 5, 80, 16741, 12, 600, 16, 10280, 12917), + (10282, -1, -1, 8031, 8031, 6, 84, -1, 0, 0, 16, 8033, 10283), + (10283, -1, -1, 8031, 8031, 6, 84, -1, 0, 0, 16, 10282, 10284), + (10284, -1, -1, 8031, 8031, 6, 84, -1, 0, 0, 16, 10283, 10431), + (10285, -1, -1, 8035, 8035, 6, 82, -1, 0, 0, 16, 8037, 10286), + (10286, -1, -1, 8035, 8035, 6, 82, -1, 0, 0, 16, 10285, 10287), + (10287, -1, -1, 8035, 8035, 6, 82, -1, 0, 0, 16, 10286, 15472), + (10288, 6971, 6971, 6971, 6971, 7, 85, 16761, 41, 600, 16, 6973, 10289), + (10289, 6971, 6971, 6971, 6971, 7, 85, 16762, 41, 600, 16, 10288, 10290), + (10290, 6971, 6971, 6971, 6971, 7, 85, 16763, 41, 600, 16, 10289, 14274), + (10291, -1, -1, 6974, 6974, 5, 85, -1, 0, 0, 16, 6976, 10292), + (10292, -1, -1, 6974, 6974, 5, 85, -1, 0, 0, 16, 10291, 10293), + (10293, -1, -1, 6974, 6974, 5, 85, -1, 0, 0, 16, 10292, -1), + (10294, 6984, 6984, 6984, 6984, 6, 78, 16765, 60, 60, 16, 6984, 13177), + (10295, 6985, 6985, 6985, 6985, 6, 78, 16766, 60, 60, 16, 6985, 13179), + (10296, 6986, 6986, 6986, 6986, 6, 78, 16767, 60, 60, 16, 6986, 13178), + (10297, 1119, 1119, 1119, 1119, 9, 85, 16750, 8, 900, 16, 7481, 10298), + (10298, 1119, 1119, 1119, 1119, 9, 85, 16751, 8, 900, 16, 10297, 10299), + (10299, 1119, 1119, 1119, 1119, 9, 85, 16752, 8, 900, 16, 10298, 16883), + (10300, 723, 723, 723, 723, 7, 85, 16753, 6, 30, 16, 7482, 14273), + (10301, 5015, 5015, 5015, 5015, 12, 85, 16754, 9, 900, 16, 7483, 17382), + (10302, 291, 291, 291, 291, 12, 85, 16755, 5, 900, 16, 7487, 10303), + (10303, 291, 291, 291, 291, 12, 85, 16756, 5, 900, 16, 10302, 10304), + (10304, 291, 291, 291, 291, 12, 85, 16757, 5, 900, 16, 10303, 12828), + (10305, -1, -1, 729, 729, 9, 85, -1, 0, 0, 16, 7496, 10306), + (10306, -1, -1, 729, 729, 9, 85, -1, 0, 0, 16, 10305, 10307), + (10307, -1, -1, 729, 729, 9, 85, -1, 0, 0, 16, 10306, 16887), + (10308, 6380, 6380, 6380, 6380, 6, 85, 16758, 39, 120, 16, 7499, 10309), + (10309, 6380, 6380, 6380, 6380, 6, 85, 16759, 39, 120, 16, 10308, 10310), + (10310, 6380, 6380, 6380, 6380, 6, 85, 16760, 39, 120, 16, 10309, 13170), + (10311, -1, -1, 1134, 1134, 3, 85, -1, 0, 0, 16, 4808, 10312), + (10312, -1, -1, 1134, 1134, 3, 85, -1, 0, 0, 16, 10311, 10313), + (10313, -1, -1, 1134, 1134, 3, 85, -1, 0, 0, 16, 10312, 10314), + (10314, -1, -1, 1134, 1134, 3, 85, -1, 0, 0, 16, 10313, 10315), + (10315, -1, -1, 1134, 1134, 3, 85, -1, 0, 0, 16, 10314, 13035), + (10316, -1, -1, 4809, 4809, 5, 85, -1, 0, 0, 16, 4811, 10317), + (10317, -1, -1, 4809, 4809, 5, 85, -1, 0, 0, 16, 10316, 10318), + (10318, -1, -1, 4809, 4809, 5, 85, -1, 0, 0, 16, 10317, 13040), + (10319, 6931, 6931, 6931, 6931, 12, 85, 16774, 41, 600, 16, 6931, 13058), + (10320, 6932, 6932, 6932, 6932, 7, 85, 16775, 42, 1200, 16, 6934, 10321), + (10321, 6932, 6932, 6932, 6932, 7, 85, 16776, 42, 1200, 16, 10320, 10322), + (10322, 6932, 6932, 6932, 6932, 7, 85, 16777, 42, 1200, 16, 10321, 13062), + (10323, 4854, 4854, 4854, 4854, 12, 85, 16768, 8, 600, 16, 7180, 10324), + (10324, 4854, 4854, 4854, 4854, 12, 85, 16769, 8, 600, 16, 10323, 10325), + (10325, 4854, 4854, 4854, 4854, 12, 85, 16770, 8, 600, 16, 10324, 13059), + (10326, 1178, 1178, 1178, 1178, 9, 85, 16771, 4, 900, 16, 7189, 10327), + (10327, 1178, 1178, 1178, 1178, 9, 85, 16772, 4, 900, 16, 10326, 10328), + (10328, 1178, 1178, 1178, 1178, 9, 85, 16773, 4, 900, 16, 10327, 13845), + (10329, -1, -1, 10329, 10329, 5, 85, 0, 0, 0, 16, -1, 10398), + (10330, 10330, 10330, 10330, 10330, 7, 85, 16785, 35, 30, 16, -1, 13203), + (10331, 10331, 10331, 10331, 10331, 6, 85, 16787, 44, 20, 16, -1, -1), + (10332, -1, -1, 10332, 10332, 3, 85, -1, 0, 0, 16, -1, 12733), + (10333, 10333, 10333, 10333, 10333, 5, 85, 16788, 55, 120, 16, -1, 10334), + (10334, 10333, 10333, 10333, 10333, 7, 85, 16789, 55, 120, 16, 10333, 10335), + (10335, 10333, 10333, 10333, 10333, 9, 85, 16790, 55, 120, 16, 10334, 12724), + (10336, 10336, 10336, 10336, 10336, 5, 85, 16791, 58, 8, 16, -1, 10337), + (10337, 10336, 10336, 10336, 10336, 7, 85, 16792, 58, 8, 16, 10336, 10338), + (10338, 10336, 10336, 10336, 10336, 9, 85, 16793, 58, 8, 16, 10337, 12730), + (10339, 10339, 10339, 10339, 10339, 12, 85, 16786, 48, 1800, 16, -1, -1), + (10340, -1, -1, 10340, 10340, 3, 80, -1, 0, 0, 16, -1, 10341), + (10341, -1, -1, 10340, 10340, 6, 83, -1, 0, 0, 16, 10340, 10342), + (10342, -1, -1, 10340, 10340, 9, 85, -1, 0, 0, 16, 10341, 13184), + (10343, -1, -1, 10343, 10343, 5, 85, 0, 0, 0, 16, -1, 10344), + (10344, -1, -1, 10343, 10343, 7, 85, 0, 0, 0, 16, 10343, 10345), + (10345, -1, -1, 10343, 10343, 9, 85, 0, 0, 0, 16, 10344, 13841), + (10346, 10346, 10346, 10346, 10346, 9, 85, 21783, 46, 600, 16, -1, 13183), + (10347, -1, -1, 7945, 7945, 6, 85, -1, 0, 0, 16, 10034, 17310), + (10348, 0, 0, 10348, 10348, 5, 80, -1, 0, 0, 16, -1, 10349), + (10349, 0, 0, 10348, 10348, 7, 83, -1, 0, 0, 16, 10348, 10350), + (10350, 0, 0, 10348, 10348, 9, 85, -1, 0, 0, 16, 10349, 13578), + (10351, 10351, 10351, 10351, 10351, 12, 85, 21785, 34, 600, 16, -1, 10682), + (10352, 10352, 10352, 10352, 10352, 12, 85, 21786, 34, 600, 16, -1, 10683), + (10353, 10353, 10353, 10353, 10353, 12, 85, 21787, 34, 600, 16, -1, 10684), + (10354, 10354, 10354, 10354, 10354, 8, 85, 21653, 39, 4320, 16, -1, 14016), + (10355, -1, -1, 10355, 10355, 6, 83, -1, 0, 0, 16, -1, 10356), + (10356, -1, -1, 10355, 10355, 8, 84, -1, 0, 0, 16, 10355, 10357), + (10357, -1, -1, 10355, 10355, 10, 85, -1, 0, 0, 16, 10356, 10643), + (10358, -1, -1, 10358, 10358, 7, 80, -1, 0, 0, 16, -1, 10359), + (10359, -1, -1, 10358, 10358, 9, 83, -1, 0, 0, 16, 10358, 10360), + (10360, -1, -1, 10358, 10358, 12, 85, -1, 0, 0, 16, 10359, 14210), + (10361, -1, -1, 962, 962, 5, 83, -1, 0, 0, 16, 6227, 10362), + (10362, -1, -1, 962, 962, 5, 84, -1, 0, 0, 16, 10361, 10363), + (10363, -1, -1, 962, 962, 5, 85, -1, 0, 0, 16, 10362, 14218), + (10364, -1, -1, 10364, 10364, 5, 85, -1, 0, 0, 16, -1, 10365), + (10365, -1, -1, 10364, 10364, 7, 85, -1, 0, 0, 16, 10364, 10366), + (10366, -1, -1, 10364, 10364, 9, 85, -1, 0, 0, 16, 10365, 10442), + (10367, 10367, 10367, 10367, 10367, 12, 85, 21751, 30, 360, 16, -1, 10630), + (10368, 10368, 10368, 10368, 10368, 6, 85, 21654, 46, 900, 16, -1, 10369), + (10369, 10368, 10368, 10368, 10368, 9, 85, 21655, 46, 900, 16, 10368, 10386), + (10370, -1, -1, 10370, 10370, 3, 60, -1, 0, 0, 16, -1, 10371), + (10371, -1, -1, 10370, 10370, 3, 60, -1, 0, 0, 16, 10370, 10372), + (10372, -1, -1, 10370, 10370, 3, 60, -1, 0, 0, 16, 10371, 13927), + (10373, 10373, 10373, 10373, 10373, 6, 75, 16806, 62, 6, 16, -1, -1), + (10374, 10374, 10374, 10374, 10374, 6, 85, 16800, 63, 900, 16, -1, 10375), + (10375, 10374, 10374, 10374, 10374, 6, 85, 16801, 63, 900, 16, 10374, 10376), + (10376, 10374, 10374, 10374, 10374, 6, 85, 16802, 63, 900, 16, 10375, 13174), + (10377, 10377, 10377, 10377, 10377, 6, 85, 16794, 64, 60, 16, -1, 10378), + (10378, 10377, 10377, 10377, 10377, 6, 85, 16795, 64, 60, 16, 10377, 10379), + (10379, 10377, 10377, 10377, 10377, 6, 85, 16796, 64, 60, 16, 10378, 13180), + (10380, -1, -1, 10380, 10380, 6, 85, -1, 0, 0, 16, -1, 10381), + (10381, -1, -1, 10380, 10380, 6, 85, -1, 0, 0, 16, 10380, 10382), + (10382, -1, -1, 10380, 10380, 6, 85, -1, 0, 0, 16, 10381, 13477), + (10383, -1, -1, 5085, 5085, 6, 85, -1, 0, 0, 16, 7386, 10384), + (10384, -1, -1, 5085, 5085, 6, 85, -1, 0, 0, 16, 10383, 10385), + (10385, -1, -1, 5085, 5085, 6, 85, -1, 0, 0, 16, 10384, -1), + (10386, 10368, 10368, 10368, 10368, 12, 85, 21656, 46, 900, 16, 10369, -1), + (10387, 10387, 10387, 10387, 10387, 9, 85, 21835, 45, 1200, 16, -1, -1), + (10388, -1, -1, 10388, 10388, 12, 85, -1, 0, 0, 16, -1, 13545), + (10389, -1, -1, 10389, 10389, 9, 83, 0, 0, 0, 16, -1, 10390), + (10390, -1, -1, 10389, 10389, 11, 84, 0, 0, 0, 16, 10389, 10391), + (10391, -1, -1, 10389, 10389, 12, 85, 0, 0, 0, 16, 10390, -1), + (10392, 10392, 10392, 10392, 10392, 12, 85, 21751, 11, 480, 16, -1, 10631), + (10393, 10393, 10393, 10393, 10393, 9, 81, 3246, 42, 2, 16, -1, -1), + (10394, 10394, 10394, 10394, 10394, 12, 85, 21821, 30, 600, 16, -1, 10704), + (10395, 10395, 10395, 10395, 10395, 3, 80, 21748, 62, 5, 16, -1, 12590), + (10396, 10396, 10396, 10396, 10396, 12, 85, 16857, 14, 600, 16, -1, 10790), + (10397, 10397, 10397, 10397, 10397, 12, 85, 16858, 14, 600, 16, -1, 10791), + (10398, -1, -1, 10329, 10329, 7, 85, 0, 0, 0, 16, 10329, 10399), + (10399, -1, -1, 10329, 10329, 9, 85, 0, 0, 0, 16, 10398, -1), + (10400, 10400, 10400, 10400, 10400, 6, 85, 16807, 62, 900, 16, -1, 15558), + (10401, -1, -1, 10401, 10401, 6, 85, -1, 0, 0, 16, -1, 10402), + (10402, -1, -1, 10401, 10401, 6, 85, -1, 0, 0, 16, 10401, 10403), + (10403, -1, -1, 10401, 10401, 6, 85, -1, 0, 0, 16, 10402, 13052), + (10404, -1, -1, 10404, 10404, 6, 85, -1, 0, 0, 16, -1, 13051), + (10405, -1, -1, 10405, 10405, 7, 81, 0, 0, 0, 16, -1, 10406), + (10406, -1, -1, 10405, 10405, 7, 82, 0, 0, 0, 16, 10405, 10407), + (10407, -1, -1, 10405, 10405, 7, 83, 0, 0, 0, 16, 10406, 10408), + (10408, -1, -1, 10405, 10405, 7, 84, 0, 0, 0, 16, 10407, 10409), + (10409, -1, -1, 10405, 10405, 7, 85, 0, 0, 0, 16, 10408, 10671), + (10410, -1, -1, 10410, 10410, 8, 85, -1, 0, 0, 16, -1, 10411), + (10413, -1, -1, 10413, 10413, 5, 81, 0, 0, 0, 16, -1, 10414), + (10414, -1, -1, 10413, 10413, 5, 81, 0, 0, 0, 16, 10413, 10415), + (10415, -1, -1, 10413, 10413, 5, 81, 0, 0, 0, 16, 10414, 10416), + (10416, -1, -1, 10413, 10413, 5, 81, 0, 0, 0, 16, 10415, 10417), + (10417, -1, -1, 10413, 10413, 5, 81, 0, 0, 0, 16, 10416, -1), + (10418, 6561, 6561, 6561, 6561, 7, 85, 21808, 32, 30, 16, 10101, 10419), + (10419, 6561, 6561, 6561, 6561, 7, 85, 21810, 32, 30, 16, 10418, 10420), + (10420, 6561, 6561, 6561, 6561, 7, 85, 21811, 32, 30, 16, 10419, 14256), + (10421, 10506, 10506, 10506, 10506, 9, 85, 23521, 66, 120, 16, 10508, -1), + (10424, 10424, 10424, 10424, 10424, 7, 81, 21813, 41, 6, 16, -1, -1), + (10425, 10425, 10425, 10425, 10425, 7, 81, 21814, 39, 6, 16, -1, -1), + (10426, 10426, 10426, 10426, 10426, 10, 85, 21816, 5, 900, 16, -1, -1), + (10427, 10427, 10427, 10427, 10427, 12, 85, 21818, 30, 900, 16, -1, -1), + (10428, 4931, 4931, 4931, 4931, 7, 85, 21838, 4, 600, 16, 10276, 10429), + (10429, 4931, 4931, 4931, 4931, 7, 85, 21839, 4, 600, 16, 10428, 10430), + (10430, 4931, 4931, 4931, 4931, 7, 85, 21844, 4, 600, 16, 10429, 13241), + (10431, -1, -1, 8031, 8031, 6, 85, -1, 0, 0, 16, 10284, 10432), + (10432, -1, -1, 8031, 8031, 6, 85, -1, 0, 0, 16, 10431, 10433), + (10433, -1, -1, 8031, 8031, 6, 85, -1, 0, 0, 16, 10432, -1), + (10434, -1, -1, 10434, 10434, 7, 85, 0, 0, 0, 16, -1, 10435), + (10435, -1, -1, 10434, 10434, 9, 85, 0, 0, 0, 16, 10434, 10436), + (10436, -1, -1, 10434, 10434, 12, 85, 0, 0, 0, 16, 10435, -1), + (10437, -1, -1, 6601, 6601, 6, 86, -1, 0, 0, 17, 10029, 10438), + (10438, -1, -1, 6601, 6601, 6, 87, -1, 0, 0, 17, 10437, 10439), + (10439, -1, -1, 6601, 6601, 6, 88, -1, 0, 0, 17, 10438, 10440), + (10440, -1, -1, 6601, 6601, 6, 89, -1, 0, 0, 17, 10439, 10441), + (10442, -1, -1, 10364, 10364, 9, 86, -1, 0, 0, 17, 10366, 10443), + (10443, -1, -1, 10364, 10364, 9, 88, -1, 0, 0, 17, 10442, -1), + (10450, 10450, 10450, 10450, 10450, 7, 85, 16808, 63, 900, 16, -1, 10451), + (10451, 10450, 10450, 10450, 10450, 7, 85, 16809, 63, 900, 16, 10450, 10452), + (10452, 10450, 10450, 10450, 10450, 7, 85, 16810, 63, 900, 16, 10451, 10468), + (10453, -1, -1, 10453, 10453, 5, 85, -1, 0, 0, 16, -1, 10454), + (10454, -1, -1, 10453, 10453, 7, 85, -1, 0, 0, 16, 10453, 10455), + (10455, -1, -1, 10453, 10453, 9, 85, -1, 0, 0, 16, 10454, 13607), + (10456, -1, -1, 10456, 10456, 5, 85, -1, 0, 0, 16, -1, 10457), + (10457, -1, -1, 10456, 10456, 7, 85, -1, 0, 0, 16, 10456, 10458), + (10458, -1, -1, 10456, 10456, 9, 85, -1, 0, 0, 16, 10457, -1), + (10459, -1, -1, 10459, 10459, 5, 65, -1, 0, 0, 16, -1, 10460), + (10460, -1, -1, 10459, 10459, 7, 65, -1, 0, 0, 16, 10459, 10461), + (10461, -1, -1, 10459, 10459, 9, 65, -1, 0, 0, 16, 10460, -1), + (10462, 10462, 10462, 10462, 10462, 12, 85, 16811, 14, 4320, 16, -1, -1), + (10463, 10463, 10463, 10463, 10463, 12, 85, 16812, 16, 4320, 16, -1, -1), + (10464, -1, -1, 10464, 10464, 5, 80, -1, 0, 0, 16, -1, 10465), + (10465, -1, -1, 10464, 10464, 7, 80, -1, 0, 0, 16, 10464, 10466), + (10466, -1, -1, 10464, 10464, 9, 80, -1, 0, 0, 16, 10465, 13140), + (10467, -1, -1, 86, 86, 8, 85, -1, 0, 0, 17, 266, -1), + (10468, 10450, 10450, 10450, 10450, 7, 85, 23603, 63, 900, 17, 10452, 10469), + (10469, 10450, 10450, 10450, 10450, 7, 85, 23604, 63, 900, 17, 10468, 10670), + (10470, -1, -1, 10470, 10470, 9, 86, -1, 0, 0, 17, -1, 10471), + (10471, -1, -1, 10470, 10470, 12, 88, -1, 0, 0, 17, 10470, 10472), + (10472, -1, -1, 10470, 10470, 15, 90, -1, 0, 0, 17, 10471, 15828), + (10473, -1, -1, 446, 735, 10, 86, -1, 0, 0, 17, 7624, 10474), + (10474, -1, -1, 446, 735, 10, 87, -1, 0, 0, 17, 10473, 10475), + (10475, -1, -1, 446, 735, 10, 88, -1, 0, 0, 17, 10474, 10476), + (10476, -1, -1, 446, 735, 10, 89, -1, 0, 0, 17, 10475, 10477), + (10477, -1, -1, 446, 735, 10, 90, -1, 0, 0, 17, 10476, 13308), + (10478, -1, -1, 10478, 10478, 15, 101, -1, 0, 0, 21, -1, 10479), + (10481, 10481, 10481, 10481, 10481, 21, 105, 46249, 90, 600, 21, -1, -1), + (10500, 10500, 10500, 10500, 10500, 7, 85, 16813, 62, 12, 16, -1, -1), + (10501, 10501, 10501, 10501, 10501, 7, 85, 16814, 63, 1, 16, -1, -1), + (10502, 10502, -1, 10502, 10502, 7, 85, 1566, 64, 120, 16, -1, 12647), + (10503, 10503, 10503, 10503, 10503, 9, 85, 16816, 13, 600, 16, -1, 10504), + (10504, 10503, 10503, 10503, 10503, 9, 85, 16817, 13, 600, 16, 10503, 10505), + (10505, 10503, 10503, 10503, 10503, 9, 85, 16818, 13, 600, 16, 10504, 12648), + (10506, 10506, 10506, 10506, 10506, 9, 85, 16819, 66, 120, 16, -1, 10507), + (10507, 10506, 10506, 10506, 10506, 9, 85, 16820, 66, 120, 16, 10506, 10508), + (10508, 10506, 10506, 10506, 10506, 9, 85, 16821, 66, 120, 16, 10507, 10421), + (10509, 5105, 5105, 5105, 5105, 12, 85, 16822, 11, 600, 16, 7420, 13154), + (10510, 7986, 7986, 7986, 7986, 12, 85, 16823, 11, 600, 16, 7988, 13155), + (10511, -1, -1, 10511, 10511, 6, 85, -1, 0, 0, 16, -1, 10512), + (10512, -1, -1, 10511, 10511, 6, 85, -1, 0, 0, 16, 10511, 10513), + (10513, -1, -1, 10511, 10511, 6, 85, -1, 0, 0, 16, 10512, 12642), + (10514, -1, -1, 10514, 10514, 6, 85, -1, 0, 0, 16, -1, 10516), + (10515, -1, -1, 10514, 10514, 6, 85, -1, 0, 0, 16, 10516, 12639), + (10516, -1, -1, 10514, 10514, 6, 85, -1, 0, 0, 16, 10514, 10515), + (10517, 6565, 6565, 6565, 6565, 9, 88, 23608, 17, 45, 17, 10010, 10518), + (10519, -1, -1, 10519, 10519, 9, 86, 0, 0, 0, 17, -1, 10520), + (10522, -1, -1, 10522, 10522, 7, 86, 0, 0, 0, 17, -1, 10523), + (10527, -1, -1, 10527, 10527, 5, 86, 0, 0, 0, 17, -1, 10528), + (10532, -1, -1, 10532, 10532, 5, 86, 0, 0, 0, 17, -1, 10533), + (10537, -1, -1, 10537, 10537, 5, 86, 0, 0, 0, 17, -1, 10538), + (10545, 10545, 10545, 10545, 10545, 12, 85, 23531, 73, 600, 17, -1, -1), + (10546, 10546, 10546, 10546, 10546, 12, 85, 23528, 74, 600, 17, -1, -1), + (10548, -1, -1, 10548, 10548, 9, 86, -1, 0, 0, 17, -1, 10549), + (10550, 10550, 10550, 10550, 10550, 7, 85, 16824, 61, 120, 16, -1, 13250), + (10551, -1, -1, 10551, 10551, 6, 85, -1, 0, 0, 16, -1, 10552), + (10552, -1, -1, 10551, 10551, 6, 85, -1, 0, 0, 16, 10551, 10553), + (10553, -1, -1, 10551, 10551, 6, 85, -1, 0, 0, 16, 10552, 14764), + (10554, -1, -1, 1572, 1572, 5, 80, -1, 0, 0, 16, 1576, 10555), + (10555, -1, -1, 1572, 1572, 5, 80, -1, 0, 0, 16, 10554, 10556), + (10556, -1, -1, 1572, 1572, 5, 80, -1, 0, 0, 16, 10555, 16062), + (10557, 12395, 12395, 12395, 12395, 9, 75, 16828, 11, 900, 16, -1, -1), + (10558, -1, -1, 10558, 10558, 6, 80, -1, 0, 0, 16, -1, 10559), + (10559, -1, -1, 10558, 10558, 6, 83, -1, 0, 0, 16, 10558, 10560), + (10560, -1, -1, 10558, 10558, 6, 85, -1, 0, 0, 16, 10559, 15469), + (10561, -1, -1, 10561, 10561, 6, 85, -1, 0, 0, 16, -1, 10562), + (10562, -1, -1, 10561, 10561, 6, 85, -1, 0, 0, 16, 10561, 10563), + (10563, -1, -1, 10561, 10561, 6, 85, -1, 0, 0, 16, 10562, 15466), + (10564, 773, -1, 773, 773, 12, 85, 16829, 5, 1800, 16, 7278, 10565), + (10565, 773, -1, 773, 773, 12, 85, 16830, 5, 1800, 16, 10564, 10566), + (10566, 773, -1, 773, 773, 12, 85, 16831, 5, 1800, 16, 10565, 13734), + (10568, -1, -1, 6564, 6564, 10, 86, -1, 0, 0, 17, 10009, 10569), + (10571, 1597, 1597, 1597, 1597, 9, 85, 23611, 6, 10, 17, 6606, -1), + (10572, 6617, 6617, 6617, 6617, 12, 86, 23612, 42, 3600, 17, 6617, 14036), + (10573, 6610, 6610, 6610, 6610, 9, 86, 23613, 41, 30, 17, 10003, 13422), + (10574, -1, -1, 6611, 6611, 6, 85, -1, 0, 0, 17, 6619, 16121), + (10575, -1, -1, 6614, 6614, 9, 85, -1, 0, 0, 17, 10005, -1), + (10576, -1, -1, 492, 492, 2, 87, -1, 0, 0, 17, 7130, -1), + (10578, 258, -1, 258, 258, 9, 86, 27520, 1, 600, 17, 258, 16003), + (10579, -1, -1, 7036, 10579, 9, 85, 0, 0, 0, 17, 7038, 10580), + (10580, -1, -1, 7036, 10579, 12, 87, 0, 0, 0, 17, 10579, 10581), + (10585, 912, 912, 912, 912, 9, 86, 23617, 4, 3600, 17, 10013, 10586), + (10588, -1, -1, 10588, 10588, 5, 86, 0, 0, 0, 17, -1, 10589), + (10589, -1, -1, 10588, 10588, 5, 87, 0, 0, 0, 17, 10588, 10590), + (10590, -1, -1, 10588, 10588, 5, 88, 0, 0, 0, 17, 10589, 10591), + (10591, -1, -1, 10588, 10588, 5, 89, 0, 0, 0, 17, 10590, 10592), + (10592, -1, -1, 10588, 10588, 5, 90, 0, 0, 0, 17, 10591, 17206), + (10600, 10600, 10600, 10600, 10600, 7, 85, 16832, 73, 20, 16, -1, 10601), + (10601, 10600, 10600, 10600, 10600, 7, 85, 16833, 73, 20, 16, 10600, 10602), + (10602, 10600, 10600, 10600, 10600, 7, 85, 16834, 73, 20, 16, 10601, 12982), + (10603, 10601, 10601, 10601, 10601, 3, 85, 16835, 62, 6, 16, -1, -1), + (10604, -1, -1, 6051, 6051, 3, 85, -1, 0, 0, 16, 7603, 10605), + (10605, -1, -1, 6051, 6051, 3, 85, -1, 0, 0, 16, 10604, 10606), + (10606, -1, -1, 6051, 6051, 3, 85, -1, 0, 0, 16, 10605, 12795), + (10607, -1, -1, 6383, 6383, 9, 80, -1, 0, 0, 16, 6385, 10608), + (10608, -1, -1, 6383, 6383, 9, 80, -1, 0, 0, 16, 10607, 10609), + (10609, -1, -1, 6383, 6383, 9, 80, -1, 0, 0, 16, 10608, 12801), + (10610, -1, -1, 10610, 10610, 3, 70, -1, 0, 0, 16, -1, 10611), + (10611, -1, -1, 10610, 10610, 3, 70, -1, 0, 0, 16, 10610, 10612), + (10612, -1, -1, 10610, 10610, 3, 70, -1, 0, 0, 16, 10611, -1), + (10618, 7850, 7850, 7850, 7850, 9, 86, 23532, 39, 4320, 17, 7340, 10619), + (10619, 7850, 7850, 7850, 7850, 12, 88, 23533, 39, 4320, 17, 10618, 10620), + (10620, 7850, 7850, 7850, 7850, 15, 90, 23534, 39, 4320, 17, 10619, 13604), + (10621, -1, -1, 849, 849, 9, 85, -1, 0, 0, 17, 851, 10622), + (10622, -1, -1, 849, 849, 9, 87, -1, 0, 0, 17, 10621, 16604), + (10623, -1, -1, 255, 255, 9, 85, -1, 0, 0, 17, 5808, 10624), + (10624, -1, -1, 255, 255, 12, 87, -1, 0, 0, 17, 10623, 10625), + (10625, -1, -1, 255, 255, 15, 89, -1, 0, 0, 17, 10624, 13589), + (10626, 5984, 5984, 5984, 5984, 12, 90, 23535, 2, 30, 17, 7711, 13592), + (10627, -1, -1, 10627, 10627, 3, 59, 0, 0, 0, 3, -1, 10628), + (10628, -1, -1, 10627, 10627, 3, 59, 0, 0, 0, 3, 10627, 10629), + (10629, -1, -1, 10627, 10627, 3, 59, 0, 0, 0, 3, 10628, -1), + (10630, 10367, 10367, 10367, 10367, 12, 90, 27642, 30, 360, 17, 10367, 13434), + (10631, 10392, 10392, 10392, 10392, 12, 90, 27642, 11, 480, 17, 10392, -1), + (10632, -1, -1, 735, 735, 10, 86, -1, 0, 0, 17, 7627, 10633), + (10633, -1, -1, 735, 735, 10, 87, -1, 0, 0, 17, 10632, 10634), + (10634, -1, -1, 735, 735, 10, 88, -1, 0, 0, 17, 10633, 10635), + (10635, -1, -1, 735, 735, 10, 89, -1, 0, 0, 17, 10634, 10636), + (10636, -1, -1, 735, 735, 10, 90, -1, 0, 0, 17, 10635, 13884), + (10637, -1, -1, 1287, 1287, 9, 86, -1, 0, 0, 17, 12471, 10638), + (10638, -1, -1, 1287, 1287, 12, 88, -1, 0, 0, 17, 10637, 10639), + (10639, -1, -1, 1287, 1287, 15, 90, -1, 0, 0, 17, 10638, 13323), + (10640, 5095, 5095, 5095, 5095, 9, 85, 23620, 10, 900, 17, 7334, 10641), + (10641, 5095, 5095, 5095, 5095, 12, 87, 23621, 10, 900, 17, 10640, 10642), + (10642, 5095, 5095, 5095, 5095, 15, 89, 23622, 10, 900, 17, 10641, 13575), + (10643, -1, -1, 10355, 10355, 10, 86, -1, 0, 0, 17, 10357, 10644), + (10644, -1, -1, 10355, 10355, 10, 88, -1, 0, 0, 17, 10643, 10645), + (10645, -1, -1, 10355, 10355, 10, 90, -1, 0, 0, 17, 10644, 14094), + (10646, 7712, 7712, 7712, 7712, 15, 90, 23536, 2, 30, 17, 7712, 13585), + (10647, 188, 188, 188, 188, 9, 88, 23537, 2, 30, 17, 7662, 13586), + (10650, -1, -1, 10650, 10650, 7, 85, -1, 0, 0, 16, -1, 10651), + (10651, -1, -1, 10650, 10650, 9, 85, -1, 0, 0, 16, 10650, 10652), + (10652, -1, -1, 10650, 10650, 12, 85, -1, 0, 0, 16, 10651, 13804), + (10653, -1, -1, 10653, 10653, 7, 85, -1, 0, 0, 16, -1, 10654), + (10654, -1, -1, 10653, 10653, 7, 85, -1, 0, 0, 16, 10653, 10655), + (10655, -1, -1, 10653, 10653, 7, 85, -1, 0, 0, 16, 10654, 17406), + (10656, -1, -1, 10656, 10656, 7, 85, -1, 0, 0, 16, -1, 12678), + (10657, -1, -1, 10657, 10657, 7, 85, -1, 0, 0, 16, -1, 10658), + (10658, -1, -1, 10657, 10657, 7, 85, -1, 0, 0, 16, 10657, 10659), + (10659, -1, -1, 10657, 10657, 7, 85, -1, 0, 0, 16, 10658, 12679), + (10660, -1, -1, 820, 820, 5, 85, -1, 0, 0, 16, 7165, 10661), + (10661, -1, -1, 820, 820, 5, 85, -1, 0, 0, 16, 10660, 10662), + (10662, -1, -1, 820, 820, 5, 85, -1, 0, 0, 16, 10661, 12667), + (10663, -1, -1, 6020, 6020, 2, 85, -1, 0, 0, 16, 7171, 10664), + (10664, -1, -1, 6020, 6020, 2, 85, -1, 0, 0, 16, 10663, 10665), + (10665, -1, -1, 6020, 6020, 2, 85, -1, 0, 0, 16, 10664, 12670), + (10666, -1, -1, 495, 495, 6, 85, -1, 0, 0, 16, 6262, 10667), + (10667, -1, -1, 495, 495, 5, 85, -1, 0, 0, 16, 10666, 10668), + (10668, -1, -1, 495, 495, 7, 85, -1, 0, 0, 16, 10667, 17391), + (10670, 10450, 10450, 10450, 10450, 7, 85, 23605, 63, 900, 17, 10469, 15839), + (10671, -1, -1, 10405, 10405, 9, 86, 0, 0, 0, 17, 10409, 10672), + (10672, -1, -1, 10405, 10405, 9, 87, 0, 0, 0, 17, 10671, 10673), + (10673, -1, -1, 10405, 10405, 9, 88, 0, 0, 0, 17, 10672, 10674), + (10674, -1, -1, 10405, 10405, 9, 89, 0, 0, 0, 17, 10673, 10675), + (10675, -1, -1, 10405, 10405, 9, 90, 0, 0, 0, 17, 10674, -1), + (10676, -1, -1, 6791, 6791, 6, 86, -1, 0, 0, 17, 10046, 10677), + (10677, -1, -1, 6791, 6791, 6, 88, -1, 0, 0, 17, 10676, 10678), + (10678, -1, -1, 6791, 6791, 6, 90, -1, 0, 0, 17, 10677, 13598), + (10679, 6492, 6492, 6492, 6492, 9, 85, 23626, 52, 720, 17, 6497, 10680), + (10680, 6492, 6492, 6492, 6492, 9, 87, 23627, 52, 720, 17, 10679, 10681), + (10681, 6492, 6492, 6492, 6492, 9, 89, 23628, 52, 720, 17, 10680, 14003), + (10682, 10351, 10351, 10351, 10351, 15, 90, 23538, 34, 600, 17, 10351, -1), + (10683, 10352, 10352, 10352, 10352, 15, 90, 23539, 34, 600, 17, 10352, -1), + (10684, 10353, 10353, 10353, 10353, 15, 90, 23540, 34, 600, 17, 10353, -1), + (10685, -1, -1, 602, 602, 9, 86, -1, 0, 0, 17, 5582, 10686), + (10686, -1, -1, 602, 602, 12, 88, -1, 0, 0, 17, 10685, 10687), + (10687, -1, -1, 602, 602, 15, 90, -1, 0, 0, 17, 10686, 13610), + (10688, -1, -1, 855, 855, 7, 86, -1, 0, 0, 17, 7677, 10689), + (10689, -1, -1, 855, 855, 7, 87, -1, 0, 0, 17, 10688, 10690), + (10690, -1, -1, 855, 855, 7, 88, -1, 0, 0, 17, 10689, 10691), + (10691, -1, -1, 855, 855, 7, 89, -1, 0, 0, 17, 10690, 10692), + (10692, -1, -1, 855, 855, 7, 90, -1, 0, 0, 17, 10691, 13613), + (10700, 10700, 10700, 10700, 10700, 7, 85, 16839, 61, 10, 16, -1, -1), + (10701, 10701, 10701, 10701, 10701, 7, 85, 21662, 32, 360, 16, -1, 10702), + (10702, 10701, 10701, 10701, 10701, 9, 85, 21663, 32, 360, 16, 10701, 10703), + (10703, 10701, 10701, 10701, 10701, 12, 85, 21664, 32, 360, 16, 10702, 12754), + (10704, 10394, 10394, 10394, 10394, 12, 85, 23541, 30, 300, 17, 10394, 13584), + (10705, -1, -1, 6395, 6395, 9, 86, -1, 0, 0, 17, 10052, 10706), + (10706, -1, -1, 6395, 6395, 9, 88, -1, 0, 0, 17, 10705, 10707), + (10707, -1, -1, 6395, 6395, 9, 90, -1, 0, 0, 17, 10706, 14097), + (10708, 534, 534, 534, 534, 12, 86, 23545, 4, 2160, 17, 10049, 10709), + (10709, 534, 534, 534, 534, 12, 88, 23546, 4, 2160, 17, 10708, 10710), + (10710, 534, 534, 534, 534, 12, 90, 23547, 4, 2160, 17, 10709, 13595), + (10711, 10711, 10711, 10711, 10711, 9, 86, 23548, 75, 1200, 17, -1, 10712), + (10712, 10711, 10711, 10711, 10711, 12, 88, 23549, 75, 1200, 17, 10711, 10713), + (10713, 10711, 10711, 10711, 10711, 15, 90, 23550, 75, 1200, 17, 10712, 14006), + (10714, -1, -1, 10714, 10714, 9, 86, 0, 0, 0, 17, -1, 10715), + (10715, -1, -1, 10714, 10714, 12, 88, 0, 0, 0, 17, 10714, 10716), + (10717, -1, -1, 7743, 7743, 9, 61, -1, 0, 0, 17, 7745, 10718), + (10718, -1, -1, 7743, 7743, 9, 61, -1, 0, 0, 17, 10717, 15258), + (10719, -1, -1, 10719, 10719, 9, 75, 0, 0, 0, 17, -1, 10720), + (10720, -1, -1, 10719, 10719, 12, 75, 0, 0, 0, 17, 10719, 10721), + (10721, -1, -1, 10719, 10719, 15, 75, 0, 0, 0, 17, 10720, 13562), + (10722, -1, -1, 10722, 10722, 5, 81, 0, 0, 0, 17, -1, 10723), + (10723, -1, -1, 10722, 10722, 5, 82, 0, 0, 0, 17, 10722, 10724), + (10724, -1, -1, 10722, 10722, 7, 83, 0, 0, 0, 17, 10723, 10725), + (10725, -1, -1, 10722, 10722, 9, 84, 0, 0, 0, 17, 10724, 10726), + (10726, -1, -1, 10722, 10722, 12, 85, 0, 0, 0, 17, 10725, 15280), + (10727, -1, -1, 10727, 10727, 7, 86, 0, 0, 0, 17, -1, 10728), + (10728, -1, -1, 10727, 10727, 9, 88, 0, 0, 0, 17, 10727, 10729), + (10730, -1, -1, 10730, 10730, 7, 86, 0, 0, 0, 17, -1, 10731), + (10731, -1, -1, 10730, 10730, 9, 88, 0, 0, 0, 17, 10730, 10732), + (10733, -1, -1, 10733, 10733, 7, 81, 0, 0, 0, 17, -1, 10734), + (10734, -1, -1, 10733, 10733, 9, 83, 0, 0, 0, 17, 10733, 10735), + (10735, -1, -1, 10733, 10733, 12, 85, 0, 0, 0, 17, 10734, -1), + (10736, 10736, 10736, 10736, 10736, 7, 86, 23632, 5, 180, 17, -1, 10737), + (10737, 10736, 10736, 10736, 10736, 9, 88, 23633, 5, 180, 17, 10736, 10738), + (10739, 645, -1, 645, 645, 12, 86, 23551, 4, 5, 17, 5999, 13410), + (10740, 1345, 1345, 1345, 1345, 9, 86, 23552, 6, 900, 17, 7349, 10741), + (10741, 1345, 1345, 1345, 1345, 12, 88, 23553, 6, 900, 17, 10740, 10742), + (10743, -1, -1, 1196, 1196, 5, 86, -1, 0, 0, 17, 1200, 10744), + (10744, -1, -1, 1196, 1196, 5, 87, -1, 0, 0, 17, 10743, 10745), + (10745, -1, -1, 1196, 1196, 5, 88, -1, 0, 0, 17, 10744, 10746), + (10748, -1, -1, 867, 867, 7, 86, -1, 0, 0, 17, 7366, 10749), + (10749, -1, -1, 867, 867, 7, 87, -1, 0, 0, 17, 10748, 10755), + (10750, -1, -1, 7103, 7103, 2, 70, -1, 0, 0, 16, 7328, 10751), + (10751, -1, -1, 7103, 7103, 2, 70, -1, 0, 0, 16, 10750, -1), + (10752, 10752, 10752, 10752, 10752, 6, 85, 16843, 72, 600, 16, -1, -1), + (10753, 10753, 10753, 10753, 10753, 12, 80, 16844, 6, 4320, 16, -1, -1), + (10754, 10754, 10754, 10754, 10754, 2, 70, 16845, 62, 5, 16, -1, -1), + (10755, -1, -1, 867, 867, 7, 88, -1, 0, 0, 17, 10749, 10756), + (10758, 545, 545, 545, 545, 12, 86, 23638, 3, 900, 17, 7346, 10759), + (10759, 545, 545, 545, 545, 12, 87, 23639, 3, 900, 17, 10758, 10760), + (10760, 545, 545, 545, 545, 12, 88, 23640, 3, 900, 17, 10759, 10761), + (10763, -1, -1, 6761, 6761, 12, 86, -1, 0, 0, 17, 6087, 10764), + (10764, -1, -1, 6761, 6761, 12, 88, -1, 0, 0, 17, 10763, 10765), + (10766, -1, -1, 6765, 6765, 9, 85, -1, 0, 0, 17, 10060, 10767), + (10767, -1, -1, 6765, 6765, 9, 87, -1, 0, 0, 17, 10766, 10768), + (10768, -1, -1, 6765, 6765, 9, 89, -1, 0, 0, 17, 10767, 13553), + (10769, -1, -1, 6751, 6751, 9, 86, -1, 0, 0, 17, 6769, 10770), + (10770, -1, -1, 6751, 6751, 9, 88, -1, 0, 0, 17, 10769, 10771), + (10772, 872, 872, 872, 872, 9, 85, 23555, 5, 180, 17, 7369, 10773), + (10773, 872, 872, 872, 872, 9, 87, 23556, 5, 180, 17, 10772, 10774), + (10774, 872, 872, 872, 872, 9, 89, 23557, 5, 180, 17, 10773, -1), + (10775, 875, 875, 875, 875, 9, 85, 23561, 5, 180, 17, 7372, 10776), + (10776, 875, 875, 875, 875, 9, 87, 23562, 5, 180, 17, 10775, 10777), + (10777, 875, 875, 875, 875, 9, 89, 23563, 5, 180, 17, 10776, 13536), + (10778, -1, -1, 634, 634, 12, 85, -1, 0, 0, 17, 7714, 10779), + (10779, -1, -1, 634, 634, 12, 87, -1, 0, 0, 17, 10778, 10780), + (10780, -1, -1, 634, 634, 12, 89, -1, 0, 0, 17, 10779, 15585), + (10781, -1, -1, 8240, 8240, 9, 85, -1, 0, 0, 17, 8244, 10782), + (10782, -1, -1, 8240, 8240, 9, 86, -1, 0, 0, 17, 10781, 10783), + (10783, -1, -1, 8240, 8240, 9, 87, -1, 0, 0, 17, 10782, 10784), + (10784, -1, -1, 8240, 8240, 9, 88, -1, 0, 0, 17, 10783, 10785), + (10785, -1, -1, 8240, 8240, 9, 89, -1, 0, 0, 17, 10784, 13343), + (10786, 7800, 7800, 7800, 7800, 12, 85, 23567, 39, 4320, 17, 7817, 10787), + (10787, 7800, 7800, 7800, 7800, 12, 87, 23568, 39, 4320, 17, 10786, 13619), + (10788, -1, -1, 4699, 4699, 7, 65, -1, 0, 0, 17, 7500, -1), + (10789, 10789, 10789, 10789, 10789, 15, 90, 23575, 41, 6, 17, -1, 14261), + (10790, 10396, 10396, 10396, 10396, 15, 90, 23576, 14, 600, 17, 10396, 14024), + (10791, 10397, 10397, 10397, 10397, 15, 90, 23577, 14, 600, 17, 10397, 14025), + (10792, -1, -1, 10792, 10792, 5, 86, 0, 0, 0, 17, -1, 10793), + (10793, -1, -1, 10792, 10792, 7, 87, 0, 0, 0, 17, 10792, 10794), + (10794, -1, -1, 10792, 10792, 9, 88, 0, 0, 0, 17, 10793, 10795), + (10795, -1, -1, 10792, 10792, 11, 89, 0, 0, 0, 17, 10794, 10796), + (10796, -1, -1, 10792, 10792, 13, 90, 0, 0, 0, 17, 10795, 17365), + (10800, -1, -1, 10800, 10800, 6, 70, -1, 0, 0, 16, -1, 10801), + (10801, -1, -1, 10800, 10800, 9, 70, -1, 0, 0, 16, 10800, 10802), + (10802, -1, -1, 10800, 10800, 12, 70, -1, 0, 0, 16, 10801, 17476), + (10803, -1, -1, 10803, 10803, 6, 76, -1, 0, 0, 16, -1, 10804), + (10804, -1, -1, 10803, 10803, 6, 78, -1, 0, 0, 16, 10803, 10805), + (10805, -1, -1, 10803, 10803, 6, 80, -1, 0, 0, 16, 10804, -1), + (10806, 10806, 10806, 10806, 10806, 10, 80, 16846, 71, 540, 16, -1, 10807), + (10807, 10806, 10806, 10806, 10806, 11, 80, 16847, 71, 540, 16, 10806, 10808), + (10808, 10806, 10806, 10806, 10806, 12, 80, 16848, 71, 540, 16, 10807, 15298), + (10809, 10809, 10809, 10809, 10809, 10, 80, 16849, 71, 540, 16, -1, 10810), + (10810, 10809, 10809, 10809, 10809, 11, 80, 16850, 71, 540, 16, 10809, 10811), + (10811, 10809, 10809, 10809, 10809, 12, 80, 16851, 71, 540, 16, 10810, 15301), + (10815, 10815, 10815, 10815, 10815, 6, 80, -1, 0, 0, 16, -1, 10816), + (10816, 10815, 10815, 10815, 10815, 9, 80, -1, 0, 0, 16, 10815, 10817), + (10817, 10815, 10815, 10815, 10815, 12, 80, -1, 0, 0, 16, 10816, 13110), + (10818, 10818, 10818, 10818, 10818, 6, 80, -1, 0, 0, 16, -1, 10819), + (10819, 10818, 10818, 10818, 10818, 9, 80, -1, 0, 0, 16, 10818, 10820), + (10820, 10818, 10818, 10818, 10818, 12, 80, -1, 0, 0, 16, 10819, 13113), + (10821, 10821, 10821, 10821, 10821, 6, 80, -1, 0, 0, 16, -1, 10822), + (10822, 10821, 10821, 10821, 10821, 9, 80, -1, 0, 0, 16, 10821, 10823), + (10823, 10821, 10821, 10821, 10821, 12, 80, -1, 0, 0, 16, 10822, 13116), + (10824, 510, 510, 510, 510, 6, 86, 23578, 37, 240, 17, 10104, 10825), + (10850, -1, -1, 10850, 10850, 6, 85, 16864, 0, 0, 16, -1, 10851), + (10851, -1, -1, 10850, 10850, 6, 85, 16865, 0, 0, 16, 10850, 10852), + (10852, -1, -1, 10850, 10850, 6, 85, 16866, 0, 0, 16, 10851, 13207), + (10853, -1, -1, 10853, 10853, 3, 65, -1, 0, 0, 16, -1, 10854), + (10854, -1, -1, 10853, 10853, 6, 65, -1, 0, 0, 16, 10853, 10855), + (10855, -1, -1, 10853, 10853, 9, 65, -1, 0, 0, 16, 10854, 10856), + (10856, -1, -1, 10853, 10853, 5, 66, -1, 0, 0, 16, 10855, 10857), + (10857, -1, -1, 10853, 10853, 5, 68, -1, 0, 0, 16, 10856, 10858), + (10858, -1, -1, 10853, 10853, 5, 70, -1, 0, 0, 16, 10857, 10859), + (10859, -1, -1, 10853, 10853, 5, 76, -1, 0, 0, 16, 10858, 10860), + (10860, -1, -1, 10853, 10853, 5, 78, -1, 0, 0, 16, 10859, 10861), + (10861, -1, -1, 10853, 10853, 5, 80, -1, 0, 0, 16, 10860, 10862), + (10862, -1, -1, 10853, 10853, 5, 81, -1, 0, 0, 16, 10861, 10863), + (10863, -1, -1, 10853, 10853, 5, 83, -1, 0, 0, 16, 10862, 10864), + (10864, -1, -1, 10853, 10853, 5, 85, -1, 0, 0, 16, 10863, 15954), + (10865, -1, -1, 1304, 1304, 12, 85, -1, 0, 0, 16, 7150, 10866), + (10866, -1, -1, 1304, 1304, 12, 85, -1, 0, 0, 16, 10865, 10867), + (10867, -1, -1, 1304, 1304, 12, 85, -1, 0, 0, 16, 10866, 13218), + (10868, 5021, 5021, 5021, 5021, 9, 76, 16867, 7, 60, 16, 5021, 10869), + (10869, 5021, 5021, 5021, 5021, 9, 81, 16868, 7, 60, 16, 10868, 10870), + (10870, 5021, 5021, 5021, 5021, 9, 85, 16869, 7, 60, 16, 10869, 12618), + (10900, 10900, 10900, 10900, 10900, 9, 85, 16870, 55, 120, 16, -1, 10901), + (10901, 10900, 10900, 10900, 10900, 9, 85, 16871, 55, 120, 16, 10900, 10902), + (10902, 10900, 10900, 10900, 10900, 9, 85, 16872, 55, 120, 16, 10901, 13624), + (10903, -1, -1, 10903, 10903, 6, 81, -1, 0, 0, 16, -1, 10904), + (10904, -1, -1, 10903, 10903, 6, 83, -1, 0, 0, 16, 10903, 10905), + (10905, -1, -1, 10903, 10903, 6, 85, -1, 0, 0, 16, 10904, -1), + (10906, -1, -1, 895, 895, 12, 85, -1, 0, 0, 16, 7406, 10907), + (10907, -1, -1, 895, 895, 12, 85, -1, 0, 0, 16, 10906, 10908), + (10908, -1, -1, 895, 895, 12, 85, -1, 0, 0, 16, 10907, 13627), + (10909, -1, -1, 10909, 10909, 6, 85, -1, 0, 0, 16, -1, 10910), + (10910, -1, -1, 10909, 10909, 6, 85, -1, 0, 0, 16, 10909, 10911), + (10911, -1, -1, 10909, 10909, 6, 85, -1, 0, 0, 16, 10910, -1), + (10912, 10912, 10912, 10912, 10912, 6, 85, 16873, 69, 1800, 16, -1, 10913), + (10913, 10912, 10912, 10912, 10912, 6, 85, 16874, 69, 1800, 16, 10912, 10914), + (10914, 10912, 10912, 10912, 10912, 6, 85, 16875, 69, 1800, 16, 10913, 14053), + (10915, -1, -1, 10915, 10915, 9, 85, -1, 0, 0, 16, -1, 10916), + (10916, -1, -1, 10915, 10915, 9, 85, -1, 0, 0, 16, 10915, 10917), + (10917, -1, -1, 10915, 10915, 9, 85, -1, 0, 0, 16, 10916, 16189), + (10950, -1, -1, 10950, 10950, 6, 85, -1, 0, 0, 16, -1, -1), + (10951, -1, -1, 10951, 10951, 12, 85, -1, 0, 0, 16, -1, 10952), + (10952, -1, -1, 10951, 10951, 12, 85, -1, 0, 0, 16, 10951, 10953), + (10953, -1, -1, 10951, 10951, 12, 85, -1, 0, 0, 16, 10952, 15363), + (10954, -1, -1, 10954, 10954, 12, 85, -1, 0, 0, 16, -1, 10955), + (10955, -1, -1, 10954, 10954, 12, 85, -1, 0, 0, 16, 10954, 10956), + (10956, -1, -1, 10954, 10954, 12, 85, -1, 0, 0, 16, 10955, -1), + (10957, 10957, 10957, 10957, 10957, 6, 85, 16879, 61, 5, 16, -1, -1), + (10958, 10958, 10958, 10958, 10958, 12, 85, 16880, 62, 900, 16, -1, 13000), + (10959, 10959, 10959, 10959, 10959, 12, 85, 16881, 63, 600, 16, -1, 10961), + (10961, 10959, 10959, 10959, 10959, 12, 85, 21717, 63, 600, 16, 10959, 10962), + (10962, 10959, 10959, 10959, 10959, 12, 85, 21718, 63, 600, 16, 10961, 12988), + (11000, -1, -1, 11000, 11000, 6, 85, -1, 0, 0, 16, -1, 11001), + (11001, -1, -1, 11000, 11000, 9, 85, -1, 0, 0, 16, 11000, 11002), + (11002, -1, -1, 11000, 11000, 12, 85, -1, 0, 0, 16, 11001, -1), + (11003, -1, -1, 11003, 11003, 6, 85, -1, 0, 0, 16, -1, -1), + (11004, -1, -1, 11004, 11004, 6, 85, -1, 0, 0, 16, -1, 11005), + (11005, -1, -1, 11004, 11004, 6, 85, -1, 0, 0, 16, 11004, 11006), + (11006, -1, -1, 11004, 11004, 6, 85, -1, 0, 0, 16, 11005, -1), + (11011, -1, -1, 6302, 6302, 5, 85, 0, 0, 0, 16, 6304, 11012), + (11012, -1, -1, 6302, 6302, 5, 85, 0, 0, 0, 16, 11011, 11013), + (11013, -1, -1, 6302, 6302, 5, 85, 0, 0, 0, 16, 11012, 15552), + (11014, -1, -1, 11007, 11007, 5, 80, -1, 0, 0, 16, -1, 11015), + (11015, -1, -1, 11007, 11007, 7, 82, -1, 0, 0, 16, 11014, 11016), + (11016, -1, -1, 11007, 11007, 9, 85, -1, 0, 0, 16, 11015, 11020), + (11020, -1, -1, 11007, 11007, 12, 86, -1, 0, 0, 17, 11016, -1), + (11050, -1, -1, 11050, 11050, 6, 85, -1, 0, 0, 16, -1, 11051), + (11051, -1, -1, 11050, 11050, 6, 85, -1, 0, 0, 16, 11050, 11052), + (11052, -1, -1, 11050, 11050, 6, 85, -1, 0, 0, 16, 11051, 11059), + (11053, -1, -1, 6349, 6349, 6, 83, -1, 0, 0, 16, 7620, 11054), + (11054, -1, -1, 6349, 6349, 6, 83, -1, 0, 0, 16, 11053, -1), + (11055, 11055, 11055, 11055, 11055, 3, 85, 16884, 63, 20, 16, -1, -1), + (11056, 11056, 11056, 11056, 11056, 6, 85, 16885, 64, 180, 16, -1, -1), + (11057, 11057, 11057, 11057, 11057, 2, 85, 1422, 65, 10, 16, -1, -1), + (11058, 11058, 11058, 11058, 11058, 2, 85, 3243, 66, 10, 16, -1, -1), + (11059, -1, -1, 11050, 11050, 6, 85, -1, 0, 0, 16, 11052, 11060), + (11060, -1, -1, 11050, 11050, 6, 85, -1, 0, 0, 16, 11059, 12871), + (11061, -1, -1, 98, 98, 12, 85, -1, 0, 0, 16, 7586, 11062), + (11062, -1, -1, 98, 98, 12, 85, -1, 0, 0, 16, 11061, 11063), + (11063, -1, -1, 98, 98, 12, 85, -1, 0, 0, 16, 11062, 13921), + (11064, 6290, 6290, 6290, 6290, 7, 85, 23500, 0, 1, 16, 7225, 11065), + (11065, 6290, 6290, 6290, 6290, 9, 85, 23501, 0, 1, 16, 11064, 11066), + (11066, 6290, 6290, 6290, 6290, 12, 85, 23502, 0, 1, 16, 11065, 13229), + (11067, 4944, -1, 4944, 4944, 7, 85, 23506, 0, 1, 16, 7231, 11068), + (11068, 4944, -1, 4944, 4944, 9, 85, 23507, 0, 1, 16, 11067, 11069), + (11069, 4944, -1, 4944, 4944, 12, 85, 23508, 0, 1, 16, 11068, 13232), + (11070, 1478, -1, 1478, 1478, 9, 85, 23512, 0, 1, 16, 7244, 11071), + (11071, 1478, -1, 1478, 1478, 10, 85, 23513, 0, 1, 16, 11070, 11072), + (11072, 1478, -1, 1478, 1478, 12, 85, 23514, 0, 1, 16, 11071, 13235), + (11073, 11073, 11073, 11073, 11073, 12, 85, 23518, 53, 30, 16, -1, 13447), + (11074, -1, -1, 11074, 11074, 5, 81, 0, 0, 0, 16, -1, 11075), + (11075, -1, -1, 11074, 11074, 7, 83, 0, 0, 0, 16, 11074, 11076), + (11076, -1, -1, 11074, 11074, 9, 85, 0, 0, 0, 16, 11075, -1), + (11077, -1, -1, 11077, 11077, 5, 81, 0, 0, 0, 16, -1, 15895), + (11078, -1, -1, 11078, 11078, 5, 81, 0, 0, 0, 16, -1, 15891), + (11079, -1, -1, 11079, 11079, 5, 81, 0, 0, 0, 16, -1, 15893), + (11080, 11080, 11080, 11080, 11080, 7, 85, 23519, 10, 20, 16, -1, 13472), + (11081, 153, 153, 153, 153, 12, 85, 23599, 3, 2160, 16, 10193, 12996), + (11082, -1, -1, 1131, 1131, 6, 81, -1, 0, 0, 16, 1133, 11083), + (11083, -1, -1, 1131, 1131, 9, 83, -1, 0, 0, 16, 11082, 11084), + (11084, -1, -1, 1131, 1131, 12, 85, -1, 0, 0, 16, 11083, 13032), + (11085, -1, -1, 11085, 11085, 7, 85, 0, 0, 0, 16, -1, 11086), + (11086, -1, -1, 11085, 11085, 9, 85, 0, 0, 0, 16, 11085, 11087), + (11087, -1, -1, 11085, 11085, 12, 85, 0, 0, 0, 16, 11086, 13021), + (11088, -1, -1, 11088, 11088, 6, 75, 0, 0, 0, 16, -1, 11089), + (11089, -1, -1, 11088, 11088, 6, 75, 0, 0, 0, 16, 11088, 11090), + (11090, -1, -1, 11088, 11088, 6, 75, 0, 0, 0, 16, 11089, 11091), + (11091, -1, -1, 11088, 11088, 6, 75, 0, 0, 0, 16, 11090, -1), + (12396, -1, -1, 125, 125, 8, 85, -1, 0, 0, 16, 7505, 12397), + (12397, -1, -1, 125, 125, 9, 85, -1, 0, 0, 16, 12396, 12398), + (12398, -1, -1, 125, 125, 10, 85, -1, 0, 0, 16, 12397, 12399), + (12399, -1, -1, 125, 125, 11, 85, -1, 0, 0, 16, 12398, 12400), + (12400, -1, -1, 125, 125, 12, 85, -1, 0, 0, 16, 12399, 13080), + (12401, -1, -1, 122, 122, 8, 85, -1, 0, 0, 16, 7510, 12402), + (12402, -1, -1, 122, 122, 9, 85, -1, 0, 0, 16, 12401, 12403), + (12403, -1, -1, 122, 122, 10, 85, -1, 0, 0, 16, 12402, 12404), + (12404, -1, -1, 122, 122, 11, 85, -1, 0, 0, 16, 12403, 12405), + (12405, -1, -1, 122, 122, 12, 85, -1, 0, 0, 16, 12404, 13085), + (12406, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 16, 7530, 12407), + (12407, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 16, 12406, 12408), + (12408, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 16, 12407, 12409), + (12409, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 16, 12408, 12410), + (12410, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 16, 12409, 12492), + (12411, -1, -1, 8255, 8255, 6, 85, -1, 0, 0, 16, 8259, 12412), + (12412, -1, -1, 8255, 8255, 6, 85, -1, 0, 0, 16, 12411, 12413), + (12413, -1, -1, 8255, 8255, 6, 85, -1, 0, 0, 16, 12412, 12414), + (12414, -1, -1, 8255, 8255, 6, 85, -1, 0, 0, 16, 12413, 12415), + (12415, -1, -1, 8255, 8255, 6, 85, -1, 0, 0, 16, 12414, 13358), + (12416, -1, -1, 12416, 12416, 7, 83, -1, 0, 0, 16, -1, 12417), + (12417, -1, -1, 12416, 12416, 9, 84, -1, 0, 0, 16, 12416, 12418), + (12418, -1, -1, 12416, 12416, 12, 85, -1, 0, 0, 16, 12417, 13413), + (12419, -1, -1, 12419, 12419, 5, 83, -1, 0, 0, 16, -1, 12420), + (12420, -1, -1, 12419, 12419, 5, 84, -1, 0, 0, 16, 12419, 12421), + (12421, -1, -1, 12419, 12419, 5, 85, -1, 0, 0, 16, 12420, 12575), + (12422, 12422, 12422, 12422, 12422, 12, 85, 13994, 47, 12, 16, -1, -1), + (12423, -1, -1, 767, 767, 9, 81, -1, 0, 0, 16, 1101, 12424), + (12424, -1, -1, 767, 767, 10, 83, -1, 0, 0, 16, 12423, 12425), + (12425, -1, -1, 767, 767, 12, 85, -1, 0, 0, 16, 12424, -1), + (12426, -1, -1, 767, 767, 3, 81, -1, 0, 0, 16, 6245, 12427), + (12427, -1, -1, 767, 767, 6, 83, -1, 0, 0, 16, 12426, 12428), + (12428, -1, -1, 767, 767, 9, 85, -1, 0, 0, 16, 12427, -1), + (12432, -1, -1, 1107, 1107, 10, 81, -1, 0, 0, 16, 6405, 12433), + (12433, -1, -1, 1107, 1107, 11, 83, -1, 0, 0, 16, 12432, 12434), + (12434, -1, -1, 1107, 1107, 12, 85, -1, 0, 0, 16, 12433, 12556), + (12435, -1, -1, 637, 637, 8, 81, -1, 0, 0, 16, 5573, 12436), + (12436, -1, -1, 637, 637, 10, 83, -1, 0, 0, 16, 12435, 12437), + (12437, -1, -1, 637, 637, 12, 85, -1, 0, 0, 16, 12436, 12553), + (12438, -1, -1, 686, 686, 5, 85, -1, 0, 0, 16, 7640, -1), + (12439, -1, -1, 1592, 1592, 9, 85, -1, 0, 0, 16, 7572, 12440), + (12440, -1, -1, 1592, 1592, 10, 85, -1, 0, 0, 16, 12439, 12441), + (12441, -1, -1, 1592, 1592, 11, 85, -1, 0, 0, 16, 12440, 12442), + (12442, -1, -1, 1592, 1592, 12, 85, -1, 0, 0, 16, 12441, 12443), + (12443, -1, -1, 1592, 1592, 12, 85, -1, 0, 0, 16, 12442, 12532), + (12444, -1, -1, 1072, 1072, 8, 85, -1, 0, 0, 16, 7580, 12445), + (12445, -1, -1, 1072, 1072, 9, 85, -1, 0, 0, 16, 12444, 12446), + (12446, -1, -1, 1072, 1072, 10, 85, -1, 0, 0, 16, 12445, 12447), + (12447, -1, -1, 1072, 1072, 11, 85, -1, 0, 0, 16, 12446, 12448), + (12448, -1, -1, 1072, 1072, 12, 85, -1, 0, 0, 16, 12447, 12537), + (12449, -1, -1, 77, 77, 10, 81, -1, 0, 0, 16, 1085, 12450), + (12450, -1, -1, 77, 77, 11, 83, -1, 0, 0, 16, 12449, 12451), + (12451, -1, -1, 77, 77, 12, 85, -1, 0, 0, 16, 12450, 12497), + (12452, -1, -1, 80, 80, 12, 85, -1, 0, 0, 16, 7592, 12453), + (12453, -1, -1, 80, 80, 12, 85, -1, 0, 0, 16, 12452, 12454), + (12454, -1, -1, 80, 80, 12, 85, -1, 0, 0, 16, 12453, 12567), + (12455, -1, -1, 658, 658, 5, 85, -1, 0, 0, 16, 7597, 12456), + (12456, -1, -1, 658, 658, 5, 85, -1, 0, 0, 16, 12455, 12457), + (12457, -1, -1, 658, 658, 5, 85, -1, 0, 0, 16, 12456, 12458), + (12458, -1, -1, 658, 658, 5, 85, -1, 0, 0, 16, 12457, 12459), + (12459, -1, -1, 658, 658, 5, 85, -1, 0, 0, 16, 12458, 12570), + (12460, 6537, 6537, 6537, 6537, 7, 83, 20172, 30, 900, 16, 7608, 12461), + (12461, 6537, 6537, 6537, 6537, 8, 83, 20173, 30, 900, 16, 12460, 12462), + (12462, 6537, 6537, 6537, 6537, 9, 83, 20174, 30, 900, 16, 12461, 12520), + (12463, -1, -1, 5263, 5263, 7, 81, -1, 0, 0, 16, 6129, 12464), + (12464, -1, -1, 5263, 5263, 8, 81, -1, 0, 0, 16, 12463, 12465), + (12465, -1, -1, 5263, 5263, 9, 81, -1, 0, 0, 16, 12464, 16173), + (12466, -1, -1, 5263, 5263, 7, 81, -1, 0, 0, 16, 5622, 12467), + (12467, -1, -1, 5263, 5263, 9, 81, -1, 0, 0, 16, 12466, 12468), + (12468, -1, -1, 5263, 5263, 12, 81, -1, 0, 0, 16, 12467, 15714), + (12469, -1, -1, 1287, 1287, 7, 81, -1, 0, 0, 16, 5518, 12470), + (12470, -1, -1, 1287, 1287, 9, 81, -1, 0, 0, 16, 12469, 12471), + (12471, -1, -1, 1287, 1287, 12, 81, -1, 0, 0, 16, 12470, 10637), + (12472, -1, -1, 1287, 1287, 8, 81, -1, 0, 0, 16, 6430, 12473), + (12473, -1, -1, 1287, 1287, 9, 81, -1, 0, 0, 16, 12472, 12474), + (12474, -1, -1, 1287, 1287, 10, 81, -1, 0, 0, 16, 12473, 13238), + (12475, -1, -1, 12430, 12430, 5, 85, 0, 0, 0, 16, -1, 12476), + (12476, -1, -1, 12430, 12430, 7, 85, 0, 0, 0, 16, 12475, 12477), + (12477, -1, -1, 12430, 12430, 9, 85, 0, 0, 0, 16, 12476, 12876), + (12478, -1, -1, 12478, 12478, 5, 85, 0, 0, 0, 16, -1, 12479), + (12479, -1, -1, 12478, 12478, 7, 85, 0, 0, 0, 16, 12478, 12480), + (12480, -1, -1, 12478, 12478, 9, 85, 0, 0, 0, 16, 12479, -1), + (12481, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 6473, 12482), + (12482, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 12481, 12508), + (12483, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 6475, 12484), + (12484, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 12483, 12511), + (12485, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 6477, 12486), + (12486, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 12485, 12514), + (12487, -1, -1, 6540, 6540, 8, 83, -1, 0, 0, 16, 6471, 12488), + (12488, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 12487, 12517), + (12492, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 17, 12410, 12493), + (12493, -1, -1, 6119, 6119, 6, 86, -1, 0, 0, 17, 12492, 12494), + (12494, -1, -1, 6119, 6119, 6, 87, -1, 0, 0, 17, 12493, 12495), + (12495, -1, -1, 6119, 6119, 6, 88, -1, 0, 0, 17, 12494, 12496), + (12496, -1, -1, 6119, 6119, 6, 89, -1, 0, 0, 17, 12495, 8448), + (12497, -1, -1, 77, 77, 12, 86, -1, 0, 0, 17, 12451, 12498), + (12498, -1, -1, 77, 77, 12, 88, -1, 0, 0, 17, 12497, 12499), + (12499, -1, -1, 77, 77, 12, 90, -1, 0, 0, 17, 12498, 13296), + (12500, -1, -1, 12500, 12500, 5, 81, -1, 0, 0, 16, -1, 12501), + (12501, -1, -1, 12500, 12500, 7, 81, -1, 0, 0, 16, 12500, 12502), + (12502, -1, -1, 12500, 12500, 9, 81, -1, 0, 0, 16, 12501, 12505), + (12505, -1, -1, 12500, 12500, 11, 83, -1, 0, 0, 16, 12502, 12506), + (12506, -1, -1, 12500, 12500, 12, 85, -1, 0, 0, 16, 12505, -1), + (12507, -1, -1, 199, 199, 12, 81, -1, 0, 0, 16, 201, -1), + (12508, -1, -1, 6540, 6540, 8, 86, -1, 0, 0, 17, 12482, 12509), + (12509, -1, -1, 6540, 6540, 8, 88, -1, 0, 0, 17, 12508, 12510), + (12510, -1, -1, 6540, 6540, 8, 90, -1, 0, 0, 17, 12509, 16440), + (12511, -1, -1, 6540, 6540, 8, 86, -1, 0, 0, 17, 12484, 12512), + (12512, -1, -1, 6540, 6540, 8, 88, -1, 0, 0, 17, 12511, 12513), + (12513, -1, -1, 6540, 6540, 8, 90, -1, 0, 0, 17, 12512, 12591), + (12514, -1, -1, 6540, 6540, 8, 86, -1, 0, 0, 17, 12486, 12515), + (12515, -1, -1, 6540, 6540, 8, 88, -1, 0, 0, 17, 12514, 12516), + (12516, -1, -1, 6540, 6540, 8, 90, -1, 0, 0, 17, 12515, 12594), + (12517, -1, -1, 6540, 6540, 8, 86, -1, 0, 0, 17, 12488, 12518), + (12518, -1, -1, 6540, 6540, 8, 88, -1, 0, 0, 17, 12517, 12519), + (12519, -1, -1, 6540, 6540, 8, 90, -1, 0, 0, 17, 12518, 12597), + (12520, 6537, 6537, 6537, 6537, 7, 86, 23974, 30, 900, 17, 12462, 12521), + (12521, 6537, 6537, 6537, 6537, 8, 88, 23975, 30, 900, 17, 12520, 12522), + (12522, 6537, 6537, 6537, 6537, 9, 90, 23976, 30, 900, 17, 12521, 13275), + (12523, -1, -1, 1210, 1210, 7, 86, -1, 0, 0, 17, 7234, 12524), + (12526, -1, -1, 1210, 1213, 12, 86, -1, 0, 0, 17, 8346, 12527), + (12527, -1, -1, 1210, 1213, 12, 88, -1, 0, 0, 17, 12526, 12528), + (12528, -1, -1, 1210, 1213, 12, 90, -1, 0, 0, 17, 12527, 14349), + (12529, -1, -1, 6636, 6636, 9, 86, -1, 0, 0, 17, 10043, 12530), + (12530, -1, -1, 6636, 6636, 10, 88, -1, 0, 0, 17, 12529, 12531), + (12531, -1, -1, 6636, 6636, 11, 90, -1, 0, 0, 17, 12530, 16164), + (12532, -1, -1, 1592, 1592, 9, 86, -1, 0, 0, 17, 12443, 12533), + (12533, -1, -1, 1592, 1592, 10, 87, -1, 0, 0, 17, 12532, 12534), + (12534, -1, -1, 1592, 1592, 11, 88, -1, 0, 0, 17, 12533, 12535), + (12535, -1, -1, 1592, 1592, 12, 89, -1, 0, 0, 17, 12534, 12536), + (12536, -1, -1, 1592, 1592, 12, 90, -1, 0, 0, 17, 12535, 13930), + (12537, -1, -1, 1072, 1072, 8, 86, -1, 0, 0, 17, 12448, 12538), + (12538, -1, -1, 1072, 1072, 9, 87, -1, 0, 0, 17, 12537, 12539), + (12539, -1, -1, 1072, 1072, 10, 88, -1, 0, 0, 17, 12538, 12540), + (12540, -1, -1, 1072, 1072, 11, 89, -1, 0, 0, 17, 12539, 12541), + (12541, -1, -1, 1072, 1072, 12, 90, -1, 0, 0, 17, 12540, 13281), + (12548, -1, -1, 119, 119, 12, 86, -1, 0, 0, 17, 6025, 12549), + (12549, -1, -1, 119, 119, 12, 87, -1, 0, 0, 17, 12548, 12550), + (12550, -1, -1, 119, 119, 12, 88, -1, 0, 0, 17, 12549, 12551), + (12551, -1, -1, 119, 119, 12, 89, -1, 0, 0, 17, 12550, 12552), + (12552, -1, -1, 119, 119, 12, 90, -1, 0, 0, 17, 12551, 13286), + (12553, -1, -1, 637, 637, 8, 86, -1, 0, 0, 17, 12437, 12554), + (12554, -1, -1, 637, 637, 10, 88, -1, 0, 0, 17, 12553, 12555), + (12555, -1, -1, 637, 637, 12, 90, -1, 0, 0, 17, 12554, 14361), + (12556, -1, -1, 1107, 1107, 10, 86, -1, 0, 0, 17, 12434, 12557), + (12557, -1, -1, 1107, 1107, 11, 88, -1, 0, 0, 17, 12556, 12558), + (12558, -1, -1, 1107, 1107, 12, 90, -1, 0, 0, 17, 12557, 16489), + (12559, -1, -1, 8215, 8215, 5, 86, -1, 0, 0, 17, 8219, 12560), + (12560, -1, -1, 8215, 8215, 5, 87, -1, 0, 0, 17, 12559, 12561), + (12561, -1, -1, 8215, 8215, 5, 88, -1, 0, 0, 17, 12560, 12562), + (12562, -1, -1, 8215, 8215, 5, 89, -1, 0, 0, 17, 12561, 12563), + (12563, -1, -1, 8215, 8215, 5, 90, -1, 0, 0, 17, 12562, 15694), + (12564, -1, -1, 1186, 1186, 12, 86, -1, 0, 0, 17, 7694, 12565), + (12565, -1, -1, 1186, 1186, 12, 88, -1, 0, 0, 17, 12564, 12566), + (12566, -1, -1, 1186, 1186, 12, 90, -1, 0, 0, 17, 12565, 13299), + (12567, -1, -1, 80, 80, 12, 86, -1, 0, 0, 17, 12454, 12568), + (12568, -1, -1, 80, 80, 12, 88, -1, 0, 0, 17, 12567, 12569), + (12569, -1, -1, 80, 80, 12, 90, -1, 0, 0, 17, 12568, 13302), + (12570, -1, -1, 658, 658, 5, 86, -1, 0, 0, 17, 12459, 12571), + (12571, -1, -1, 658, 658, 5, 87, -1, 0, 0, 17, 12570, 12572), + (12572, -1, -1, 658, 658, 5, 88, -1, 0, 0, 17, 12571, 12573), + (12573, -1, -1, 658, 658, 5, 89, -1, 0, 0, 17, 12572, 12574), + (12574, -1, -1, 658, 658, 5, 90, -1, 0, 0, 17, 12573, 13313), + (12575, -1, -1, 12419, 12419, 9, 90, -1, 0, 0, 17, 12421, 13520), + (12576, -1, -1, 852, 852, 12, 86, -1, 0, 0, 17, 7680, 12577), + (12577, -1, -1, 852, 852, 12, 88, -1, 0, 0, 17, 12576, 12578), + (12578, -1, -1, 852, 852, 12, 90, -1, 0, 0, 17, 12577, 13601), + (12579, -1, -1, 1313, 1313, 12, 86, -1, 0, 0, 17, 10083, 12580), + (12580, -1, -1, 1313, 1313, 12, 88, -1, 0, 0, 17, 12579, 12581), + (12581, -1, -1, 1313, 1313, 12, 90, -1, 0, 0, 17, 12580, 14043), + (12582, -1, -1, 12582, 12582, 7, 85, 0, 0, 0, 17, -1, 12583), + (12583, -1, -1, 12582, 12582, 9, 87, 0, 0, 0, 17, 12582, 12584), + (12584, -1, -1, 12582, 12582, 12, 89, 0, 0, 0, 17, 12583, 15174), + (12585, 6640, 6640, 6640, 6640, 9, 86, 23572, 43, 60, 17, 6640, -1), + (12586, 6644, 6644, 6644, 6644, 2, 86, 23573, 44, 20, 17, 6644, -1), + (12587, -1, -1, 7757, 7757, 9, 86, -1, 0, 0, 17, 7759, 12588), + (12588, -1, -1, 7757, 7757, 9, 88, -1, 0, 0, 17, 12587, 12589), + (12589, -1, -1, 7757, 7757, 9, 90, -1, 0, 0, 17, 12588, 15182), + (12590, 10395, 10395, 10395, 10395, 5, 85, 23574, 62, 5, 17, 10395, -1), + (12591, -1, -1, 6540, 6540, 15, 91, -1, 0, 0, 18, 12513, 12592), + (12594, -1, -1, 6540, 6540, 11, 91, -1, 0, 0, 18, 12516, 12595), + (12597, -1, -1, 6540, 6540, 9, 91, -1, 0, 0, 18, 12519, 12598), + (12598, -1, -1, 6540, 6540, 11, 93, -1, 0, 0, 18, 12597, 12599), + (12600, -1, -1, 12600, 12600, 7, 85, 0, 0, 0, 17, -1, 13072), + (12603, -1, -1, 12603, 12603, 10, 70, 0, 0, 0, 17, -1, -1), + (12606, -1, -1, 12606, 12606, 6, 85, 0, 0, 0, 17, -1, -1), + (12607, -1, -1, 12607, 12607, 6, 74, 0, 0, 0, 17, -1, 14140), + (12610, -1, -1, 255, 255, 9, 87, -1, 0, 0, 17, 7702, 13773), + (12612, -1, -1, 1604, 1604, 10, 85, -1, 0, 0, 17, 7009, 12613), + (12613, -1, -1, 1604, 1604, 12, 87, -1, 0, 0, 17, 12612, 13095), + (12615, -1, -1, 12615, 12615, 10, 85, 0, 0, 0, 17, -1, 12616), + (12616, -1, -1, 12615, 12615, 12, 87, 0, 0, 0, 17, 12615, 12617), + (12617, -1, -1, 12615, 12615, 14, 89, 0, 0, 0, 17, 12616, 14138), + (12618, 5021, 5021, 5021, 5021, 9, 86, 24009, 7, 60, 17, 10870, 12619), + (12619, 5021, 5021, 5021, 5021, 9, 87, 24010, 7, 60, 17, 12618, 12620), + (12620, 5021, 5021, 5021, 5021, 9, 88, 24011, 7, 60, 17, 12619, 12621), + (12621, 5021, 5021, 5021, 5021, 9, 89, 24012, 7, 60, 17, 12620, 13785), + (12626, 9354, 9354, 9354, 9354, 5, 86, 23996, 40, 600, 17, 9356, -1), + (12629, 9357, 9357, 9357, 9357, 5, 86, 24002, 40, 600, 17, 9359, -1), + (12632, 9360, 9360, 9360, 9360, 5, 86, 24005, 40, 600, 17, 9362, -1), + (12633, 6325, 6325, 6325, 6325, 7, 85, 24008, 18, 600, 17, 6361, 13792), + (12635, 12635, 12635, 12635, 12635, 12, 90, 23643, 12, 5, 17, -1, -1), + (12636, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, -1, 12637), + (12637, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 12636, 8445), + (12638, 12638, 12638, 12638, 12638, 9, 85, 23581, 68, 10, 17, -1, -1), + (12639, -1, -1, 10514, 10514, 6, 86, -1, 0, 0, 17, 10515, 12640), + (12642, -1, -1, 10511, 10511, 6, 86, -1, 0, 0, 17, 10513, 12643), + (12645, -1, -1, 12645, 12645, 9, 90, 0, 0, 0, 17, -1, 15386), + (12646, -1, -1, 12646, 12646, 9, 90, 0, 0, 0, 17, -1, 15388), + (12647, 10502, -1, 10502, 10502, 7, 90, 16815, 64, 120, 17, 10502, -1), + (12648, 10503, 10503, 10503, 10503, 9, 86, 23582, 13, 600, 17, 10505, 12649), + (12651, 12651, 12651, 12651, 12651, 15, 90, 23585, 69, 600, 17, -1, 17352), + (12652, -1, -1, 12652, 12652, 9, 86, 0, 0, 0, 17, -1, 12653), + (12653, -1, -1, 12652, 12652, 12, 88, 0, 0, 0, 17, 12652, 12654), + (12654, -1, -1, 12652, 12652, 15, 90, 0, 0, 0, 17, 12653, 13411), + (12655, 12655, 12655, 12655, 12655, 9, 86, 23586, 70, 1800, 17, -1, 12656), + (12658, 757, -1, 757, 757, 12, 86, 23589, 6, 1800, 17, 7413, 12659), + (12661, 12661, 12661, 12661, 12661, 9, 86, 23592, 73, 2700, 17, -1, 12662), + (12664, -1, -1, 12664, 12664, 7, 86, 0, 0, 0, 17, -1, 12665), + (12667, -1, -1, 820, 820, 5, 86, -1, 0, 0, 17, 10662, 12668), + (12668, -1, -1, 820, 820, 5, 88, -1, 0, 0, 17, 12667, 12669), + (12669, -1, -1, 820, 820, 5, 90, -1, 0, 0, 17, 12668, 13820), + (12670, -1, -1, 6020, 6020, 2, 86, -1, 0, 0, 17, 10665, 12671), + (12671, -1, -1, 6020, 6020, 2, 87, -1, 0, 0, 17, 12670, 12672), + (12672, -1, -1, 6020, 6020, 2, 88, -1, 0, 0, 17, 12671, 12692), + (12673, -1, -1, 1546, 1546, 5, 80, -1, 0, 0, 17, 6441, -1), + (12674, -1, -1, 4801, 4801, 6, 86, -1, 0, 0, 17, 10123, 12675), + (12675, -1, -1, 4801, 4801, 6, 88, -1, 0, 0, 17, 12674, 12676), + (12676, -1, -1, 4801, 4801, 6, 90, -1, 0, 0, 17, 12675, -1), + (12677, -1, -1, 230, 230, 6, 90, -1, 0, 0, 17, 541, 16249), + (12678, -1, -1, 10656, 10656, 12, 90, 0, 0, 0, 17, 10656, -1), + (12679, -1, -1, 10657, 10657, 7, 86, 0, 0, 0, 17, 10659, 12680), + (12680, -1, -1, 10657, 10657, 9, 88, 0, 0, 0, 17, 12679, 12681), + (12681, -1, -1, 10657, 10657, 12, 90, 0, 0, 0, 17, 12680, 14154), + (12682, 7872, 7872, 7872, 7872, 6, 86, 23595, 41, 600, 17, 10129, 12683), + (12683, 7872, 7872, 7872, 7872, 6, 88, 23596, 41, 600, 17, 12682, 12684), + (12684, 7872, 7872, 7872, 7872, 6, 90, 23597, 41, 600, 17, 12683, 13838), + (12685, -1, -1, 807, 807, 5, 86, -1, 0, 0, 17, 7630, 12686), + (12686, -1, -1, 807, 807, 5, 88, -1, 0, 0, 17, 12685, 12687), + (12687, -1, -1, 807, 807, 5, 90, -1, 0, 0, 17, 12686, -1), + (12688, -1, -1, 12688, 12688, 12, 90, 0, 0, 0, 17, -1, -1), + (12689, -1, -1, 7884, 7884, 12, 87, -1, 0, 0, 17, 7884, -1), + (12690, -1, -1, 7885, 7885, 12, 86, -1, 0, 0, 17, 7885, -1), + (12691, -1, -1, 12691, 12691, 12, 88, 0, 0, 0, 17, -1, -1), + (12692, -1, -1, 6020, 6020, 2, 89, -1, 0, 0, 17, 12672, 12693), + (12693, -1, -1, 6020, 6020, 2, 90, -1, 0, 0, 17, 12692, 13823), + (12694, -1, -1, 683, 683, 5, 86, -1, 0, 0, 17, 7605, 12695), + (12695, -1, -1, 683, 683, 5, 88, -1, 0, 0, 17, 12694, 12696), + (12696, -1, -1, 683, 683, 5, 90, -1, 0, 0, 17, 12695, 13305), + (12697, -1, -1, 1041, 1041, 12, 86, -1, 0, 0, 17, 7564, 12698), + (12698, -1, -1, 1041, 1041, 12, 88, -1, 0, 0, 17, 12697, 12699), + (12699, -1, -1, 1041, 1041, 12, 90, -1, 0, 0, 17, 12698, 13332), + (12700, 1355, 1355, 1355, 1355, 9, 86, 23644, 3, 60, 17, 10121, 12701), + (12701, 1355, 1355, 1355, 1355, 9, 88, 23645, 3, 60, 17, 12700, 12702), + (12702, 1355, 1355, 1355, 1355, 9, 90, 23646, 3, 60, 17, 12701, 13832), + (12703, -1, -1, 611, 611, 4, 86, -1, 0, 0, 17, 10126, 12704), + (12704, -1, -1, 611, 611, 4, 88, -1, 0, 0, 17, 12703, 12705), + (12705, -1, -1, 611, 611, 4, 90, -1, 0, 0, 17, 12704, 13835), + (12706, -1, -1, 12706, 12706, 7, 86, 0, 0, 0, 17, -1, 12707), + (12707, -1, -1, 12706, 12706, 9, 88, 0, 0, 0, 17, 12706, 12708), + (12708, -1, -1, 12706, 12706, 12, 90, 0, 0, 0, 17, 12707, 13813), + (12709, -1, -1, 12709, 12709, 9, 86, -1, 0, 0, 17, -1, -1), + (12710, -1, -1, 12710, 12710, 9, 86, 0, 0, 0, 17, -1, 12711), + (12711, -1, -1, 12710, 12710, 12, 88, 0, 0, 0, 17, 12710, 12712), + (12712, -1, -1, 12710, 12710, 15, 90, 0, 0, 0, 17, 12711, 14173), + (12713, -1, -1, 12713, 12713, 7, 86, 0, 0, 0, 17, -1, 12714), + (12714, -1, -1, 12713, 12713, 7, 88, 0, 0, 0, 17, 12713, 12715), + (12715, -1, -1, 12713, 12713, 7, 90, 0, 0, 0, 17, 12714, -1), + (12716, -1, -1, 12716, 12716, 7, 86, 0, 0, 0, 17, -1, 12717), + (12717, -1, -1, 12716, 12716, 7, 88, 0, 0, 0, 17, 12716, 12718), + (12718, -1, -1, 12716, 12716, 7, 90, 0, 0, 0, 17, 12717, 15526), + (12719, -1, -1, 12719, 12719, 9, 90, 0, 0, 0, 17, -1, -1), + (12720, -1, -1, 12720, 12720, 9, 86, 0, 0, 0, 17, -1, -1), + (12721, -1, -1, 12721, 12721, 7, 86, 0, 0, 0, 17, -1, 12722), + (12722, -1, -1, 12721, 12721, 9, 88, 0, 0, 0, 17, 12721, 12723), + (12723, -1, -1, 12721, 12721, 12, 90, 0, 0, 0, 17, 12722, 16303), + (12724, 10333, 10333, 10333, 10333, 9, 86, 23647, 55, 120, 17, 10335, 12725), + (12725, 10333, 10333, 10333, 10333, 9, 86, 23648, 55, 120, 17, 12724, 12726), + (12726, 10333, 10333, 10333, 10333, 9, 86, 23649, 55, 120, 17, 12725, 15988), + (12727, -1, -1, 1555, 1555, 7, 86, 0, 0, 0, 17, 1557, 12728), + (12728, -1, -1, 1555, 1555, 7, 88, 0, 0, 0, 17, 12727, 12729), + (12729, -1, -1, 1555, 1555, 7, 90, 0, 0, 0, 17, 12728, -1), + (12730, 10336, 10336, 10336, 10336, 9, 86, 23650, 58, 8, 17, 10338, 12731), + (12731, 10336, 10336, 10336, 10336, 12, 88, 23651, 58, 8, 17, 12730, 12732), + (12732, 10336, 10336, 10336, 10336, 15, 90, 23652, 58, 8, 17, 12731, 13517), + (12733, -1, -1, 10332, 10332, 7, 90, -1, 0, 0, 17, 10332, -1), + (12734, -1, -1, 6375, 6375, 9, 86, -1, 0, 0, 17, 10138, 12735), + (12735, -1, -1, 6375, 6375, 9, 88, -1, 0, 0, 17, 12734, 12736), + (12736, -1, -1, 6375, 6375, 9, 90, -1, 0, 0, 17, 12735, 13502), + (12737, -1, -1, 12737, 12737, 9, 86, 0, 0, 0, 17, -1, 12738), + (12738, -1, -1, 12737, 12737, 9, 88, 0, 0, 0, 17, 12737, 12739), + (12739, -1, -1, 12737, 12737, 9, 90, 0, 0, 0, 17, 12738, 15961), + (12740, 6533, 6533, 6533, 6533, 10, 86, 23653, 15, 600, 17, 10139, 12741), + (12741, 6533, 6533, 6533, 6533, 10, 88, 23654, 15, 600, 17, 12740, 12742), + (12742, 6533, 6533, 6533, 6533, 10, 90, 23655, 15, 600, 17, 12741, 13505), + (12743, 1116, 1116, 1116, 1116, 12, 86, 23656, 4, 2160, 17, 10142, 12744), + (12744, 1116, 1116, 1116, 1116, 12, 88, 23657, 4, 2160, 17, 12743, 12745), + (12745, 1116, 1116, 1116, 1116, 12, 90, 23658, 4, 2160, 17, 12744, 13530), + (12746, 5298, 5298, 5298, 5298, 12, 86, 23659, 32, 1800, 17, 10145, 12747), + (12747, 5298, 5298, 5298, 5298, 12, 88, 23660, 32, 1800, 17, 12746, 12748), + (12748, 5298, 5298, 5298, 5298, 12, 90, 23661, 32, 1800, 17, 12747, 13514), + (12749, 592, 592, 592, 592, 5, 86, 23665, 2, 18, 17, 7437, 12750), + (12750, 592, 592, 592, 592, 5, 88, 23666, 2, 18, 17, 12749, 12751), + (12751, 592, 592, 592, 592, 5, 90, 23667, 2, 18, 17, 12750, 13499), + (12754, 10701, 10701, 10701, 10701, 12, 86, 23668, 32, 360, 17, 10703, 12755), + (12755, 10701, 10701, 10701, 10701, 12, 88, 23669, 32, 360, 17, 12754, 12756), + (12756, 10701, 10701, 10701, 10701, 12, 90, 23670, 32, 360, 17, 12755, 15588), + (12757, -1, -1, 4861, 4861, 12, 86, -1, 0, 0, 17, 7682, 12758), + (12758, -1, -1, 4861, 4861, 12, 88, -1, 0, 0, 17, 12757, 12759), + (12759, -1, -1, 4861, 4861, 12, 90, -1, 0, 0, 17, 12758, -1), + (12760, 1274, 1274, 1274, 1274, 12, 86, 23674, 9, 540, 17, 10211, 12761), + (12761, 1274, 1274, 1274, 1274, 12, 88, 23675, 9, 540, 17, 12760, 12762), + (12762, 1274, 1274, 1274, 1274, 12, 90, 23676, 9, 540, 17, 12761, 14352), + (12766, 12766, 12766, 12766, 12766, 15, 90, 23677, 69, 3600, 17, -1, 13682), + (12767, -1, -1, 692, 692, 12, 86, -1, 0, 0, 17, 7672, 12768), + (12768, -1, -1, 692, 692, 12, 88, -1, 0, 0, 17, 12767, 12769), + (12769, -1, -1, 692, 692, 12, 90, -1, 0, 0, 17, 12768, 17295), + (12770, 12770, 12770, 12770, 12770, 9, 85, 23678, 52, 120, 17, -1, 12771), + (12771, 12770, 12770, 12770, 12770, 12, 87, 23679, 52, 120, 17, 12770, 12772), + (12772, 12770, 12770, 12770, 12770, 15, 89, 23680, 52, 120, 17, 12771, -1), + (12773, -1, -1, 12773, 12773, 7, 86, 0, 0, 0, 17, -1, 12774), + (12774, -1, -1, 12773, 12773, 7, 87, 0, 0, 0, 17, 12773, 12775), + (12775, -1, -1, 12773, 12773, 7, 88, 0, 0, 0, 17, 12774, 12776), + (12776, -1, -1, 12773, 12773, 7, 89, 0, 0, 0, 17, 12775, 12777), + (12777, -1, -1, 12773, 12773, 7, 90, 0, 0, 0, 17, 12776, -1), + (12778, 12778, 12778, 12778, 12778, 12, 90, 23681, 74, 1200, 17, -1, 13678), + (12779, -1, -1, 12779, 12779, 7, 85, 0, 0, 0, 17, -1, 12780), + (12780, -1, -1, 12779, 12779, 9, 87, 0, 0, 0, 17, 12779, 12781), + (12781, -1, -1, 12779, 12779, 12, 89, 0, 0, 0, 17, 12780, -1), + (12782, -1, -1, 12782, 12782, 7, 86, 0, 0, 0, 17, -1, 12783), + (12783, -1, -1, 12782, 12782, 9, 88, 0, 0, 0, 17, 12782, 12784), + (12784, -1, -1, 12782, 12782, 12, 90, 0, 0, 0, 17, 12783, -1), + (12785, 12785, 12785, 12785, 12785, 12, 90, 23683, 80, 30, 17, -1, 17131), + (12786, 6815, 6815, 6815, 6815, 8, 86, 23684, 60, 600, 17, 10202, 12787), + (12787, 6815, 6815, 6815, 6815, 8, 88, 23685, 60, 600, 17, 12786, 12788), + (12788, 6815, 6815, 6815, 6815, 8, 90, 23686, 60, 600, 17, 12787, 14355), + (12789, 967, 967, 967, 967, 7, 85, 23687, 10, 1800, 17, 10226, 12790), + (12790, 967, 967, 967, 967, 7, 87, 23688, 10, 1800, 17, 12789, 12791), + (12791, 967, 967, 967, 967, 7, 89, 23689, 10, 1800, 17, 12790, 17535), + (12792, -1, -1, 9503, 9503, 7, 86, -1, 0, 0, 17, 10089, 12793), + (12793, -1, -1, 9503, 9503, 7, 88, -1, 0, 0, 17, 12792, 12794), + (12794, -1, -1, 9503, 9503, 7, 90, -1, 0, 0, 17, 12793, 5360), + (12795, -1, -1, 6051, 6051, 5, 85, -1, 0, 0, 17, 10606, 12796), + (12796, -1, -1, 6051, 6051, 5, 87, -1, 0, 0, 17, 12795, 12797), + (12797, -1, -1, 6051, 6051, 5, 89, -1, 0, 0, 17, 12796, 13278), + (12798, -1, -1, 5264, 5264, 12, 86, -1, 0, 0, 17, 10217, 12799), + (12799, -1, -1, 5264, 5264, 12, 88, -1, 0, 0, 17, 12798, 12800), + (12800, -1, -1, 5264, 5264, 12, 90, -1, 0, 0, 17, 12799, 13675), + (12801, -1, -1, 6383, 6383, 9, 85, -1, 0, 0, 17, 10609, 12802), + (12802, -1, -1, 6383, 6383, 9, 87, -1, 0, 0, 17, 12801, 12803), + (12803, -1, -1, 6383, 6383, 9, 89, -1, 0, 0, 17, 12802, 5339), + (12804, 12804, 12804, 12804, 12804, 7, 86, 23693, 75, 900, 17, -1, 12805), + (12807, 12807, 12807, 12807, 12807, 7, 86, 23699, 73, 1200, 17, -1, 12808), + (12810, 8227, 8227, 8227, 12810, 5, 85, 27402, 71, 10, 17, 8227, 12811), + (12811, 8227, 8227, 8227, 12810, 7, 87, 27403, 71, 10, 17, 12810, 12812), + (12812, 8227, 8227, 8227, 12810, 9, 89, 27404, 71, 10, 17, 12811, -1), + (12813, -1, -1, 1287, 1287, 5, 75, -1, 0, 0, 17, -1, 12814), + (12814, -1, -1, 1287, 1287, 5, 77, -1, 0, 0, 17, 12813, 12815), + (12815, -1, -1, 1287, 1287, 5, 79, -1, 0, 0, 17, 12814, 14279), + (12816, -1, -1, 12816, 12816, 7, 86, 0, 0, 0, 17, -1, 12817), + (12819, -1, -1, 12819, 12819, 9, 85, 0, 0, 0, 17, -1, 12820), + (12820, -1, -1, 12819, 12819, 12, 87, 0, 0, 0, 17, 12819, 12821), + (12822, -1, -1, 12822, 12822, 9, 86, 0, 0, 0, 17, -1, 12823), + (12828, 291, 291, 291, 12828, 12, 86, 27409, 5, 900, 17, 10304, 12829), + (12831, -1, -1, 12831, 12831, 7, 86, 0, 0, 0, 17, -1, 12832), + (12834, -1, -1, 6980, 6980, 5, 85, -1, 0, 0, 17, 6982, 12835), + (12835, -1, -1, 6980, 6980, 5, 87, -1, 0, 0, 17, 12834, 12836), + (12837, 12837, 12837, 12837, 12837, 7, 86, 27412, 74, 420, 17, -1, 12838), + (12840, -1, -1, 6977, 6977, 5, 85, -1, 0, 0, 17, 6979, 12841), + (12841, -1, -1, 6977, 6977, 5, 87, -1, 0, 0, 17, 12840, 12842), + (12843, -1, -1, 551, 551, 5, 86, -1, 0, 0, 17, 6907, 12844), + (12846, -1, -1, 12846, 12846, 7, 86, 6499, 0, 0, 17, -1, 12847), + (12849, -1, -1, 12849, 12849, 7, 86, 0, 0, 0, 17, -1, 12850), + (12857, 8072, 8072, 8072, 8072, 7, 86, 27419, 37, 20, 17, 10248, 12858), + (12860, -1, -1, 267, 267, 12, 86, -1, 0, 0, 17, 5619, 12861), + (12863, -1, -1, 141, 12863, 12, 59, -1, 0, 0, 17, 143, 15396), + (12864, 12864, -1, 12864, 12864, 5, 59, 27422, 73, 10, 17, -1, 17486), + (12865, 12865, 12865, 12865, 12865, 12, 90, 27423, 42, 6, 17, -1, -1), + (12866, 12866, 12866, 12866, 12866, 12, 86, 27424, 74, 1800, 17, -1, 15605), + (12867, 12867, 12867, 12867, 12867, 12, 86, 27426, 13, 4320, 17, -1, -1), + (12868, 1334, 1334, 1334, 1334, 12, 86, 27427, 11, 4320, 17, 10236, 12869), + (12871, -1, -1, 11050, 11050, 9, 85, -1, 0, 0, 17, 11060, 12872), + (12872, -1, -1, 11050, 11050, 12, 87, -1, 0, 0, 17, 12871, 12873), + (12874, -1, -1, 1414, 1414, 5, 86, -1, 0, 0, 17, 1418, 17490), + (12875, 4938, 4938, 4938, 4938, 12, 90, 27430, 35, 1800, 17, 5614, 13727), + (12876, -1, -1, 12430, 12430, 7, 86, 0, 0, 0, 17, 12477, 12877), + (12877, -1, -1, 12430, 12430, 9, 88, 0, 0, 0, 17, 12876, 12878), + (12878, -1, -1, 12430, 12430, 12, 90, 0, 0, 0, 17, 12877, 15270), + (12879, 516, 516, 516, 516, 6, 86, 27431, 5, 480, 17, 10233, 13659), + (12880, 1404, 1404, 1404, 1404, 7, 85, 27432, 15, 2160, 17, 1408, -1), + (12881, -1, -1, 12881, 12881, 9, 86, 0, 0, 0, 17, -1, 12882), + (12885, 12885, 12885, 12885, 12885, 12, 86, 27435, 75, 90, 17, -1, 17491), + (12886, -1, -1, 12886, 12886, 2, 85, -1, 0, 0, 17, -1, -1), + (12887, -1, -1, 12887, 12887, 2, 87, -1, 0, 0, 17, -1, -1), + (12888, -1, -1, 12888, 12888, 2, 89, -1, 0, 0, 17, -1, -1), + (12889, -1, -1, 12889, 12889, 2, 85, -1, 0, 0, 17, -1, 12890), + (12890, -1, -1, 12889, 12889, 2, 87, -1, 0, 0, 17, 12889, 12891), + (12892, 12892, 12892, 12892, 12892, 3, 90, 27434, 8, 60, 17, -1, 13666), + (12893, 12893, 12893, 12893, 12893, 12, 90, 27436, 76, 1800, 17, -1, 13663), + (12894, -1, -1, 12894, 12894, 5, 86, 0, 0, 0, 17, -1, 12895), + (12899, -1, -1, 471, 471, 2, 85, -1, 0, 0, 17, 473, 12900), + (12900, -1, -1, 471, 471, 2, 87, -1, 0, 0, 17, 12899, 12901), + (12902, -1, -1, 12902, 12902, 5, 85, 0, 0, 0, 17, -1, 12903), + (12903, -1, -1, 12902, 12902, 5, 86, 0, 0, 0, 17, 12902, 12904), + (12907, -1, -1, 12907, 12907, 5, 85, 0, 0, 0, 17, -1, 12908), + (12908, -1, -1, 12907, 12907, 5, 86, 0, 0, 0, 17, 12907, 12909), + (12912, -1, -1, 12912, 12912, 5, 85, 0, 0, 0, 17, -1, 12913), + (12913, -1, -1, 12912, 12912, 5, 86, 0, 0, 0, 17, 12912, 12914), + (12917, 517, 517, 517, 517, 5, 85, 27437, 12, 600, 17, 10281, 12918), + (12918, 517, 517, 517, 517, 5, 87, 27438, 12, 600, 17, 12917, 12919), + (12920, -1, -1, 12920, 12920, 5, 86, 0, 0, 0, 17, -1, 12921), + (12923, 54009, 54009, 54009, 12923, 3, 85, 27440, 22, 12, 17, 5849, 12924), + (12924, 54009, 54009, 54009, 12923, 3, 87, 27441, 22, 12, 17, 12923, 12925), + (12929, -1, -1, 6548, 6548, 8, 85, -1, 0, 0, 17, 6238, 12930), + (12930, -1, -1, 6548, 6548, 8, 90, -1, 0, 0, 17, 12929, 15463), + (12931, 12931, 12931, 12931, 12931, 7, 86, 27443, 73, 3600, 17, -1, 12932), + (12934, 1242, 1242, 1242, 1242, 12, 86, 27446, 9, 1320, 17, 10273, 12935), + (12937, 12937, 12937, 12937, 12937, 12, 86, 27449, 16, 420, 17, -1, 13733), + (12938, 12938, 12938, 12938, 12938, 15, 88, 27450, 75, 2700, 17, -1, 13743), + (12939, 12939, 12939, 12939, 12939, 12, 90, 27451, 77, 1800, 17, -1, 14756), + (12941, 12941, 12941, 12941, 12941, 5, 85, 27453, 77, 1, 17, -1, -1), + (12942, 6539, 6539, 6539, 6539, 6, 86, 27454, 18, 1800, 17, 7611, 12943), + (12943, 6539, 6539, 6539, 6539, 6, 88, 27455, 18, 1800, 17, 12942, 12944), + (12944, 6539, 6539, 6539, 6539, 6, 90, 27456, 18, 1800, 17, 12943, 13291), + (12945, -1, -1, 795, 795, 12, 85, -1, 0, 0, 17, 10267, 12946), + (12946, -1, -1, 795, 795, 12, 86, -1, 0, 0, 17, 12945, 12947), + (12947, -1, -1, 795, 795, 12, 87, -1, 0, 0, 17, 12946, 12948), + (12948, -1, -1, 795, 795, 12, 88, -1, 0, 0, 17, 12947, 12949), + (12949, -1, -1, 795, 795, 12, 89, -1, 0, 0, 17, 12948, 13710), + (12950, -1, -1, 790, 790, 6, 86, -1, 0, 0, 17, 7274, 12951), + (12951, -1, -1, 790, 790, 6, 87, -1, 0, 0, 17, 12950, 12952), + (12952, -1, -1, 790, 790, 6, 88, -1, 0, 0, 17, 12951, 12953), + (12953, -1, -1, 790, 790, 6, 89, -1, 0, 0, 17, 12952, 12954), + (12954, -1, -1, 790, 790, 6, 90, -1, 0, 0, 17, 12953, 13713), + (12955, 167, 167, 167, 167, 10, 86, 27457, 14, 900, 17, 8343, 13718), + (12956, 4903, 4903, 4903, 4903, 9, 85, 27460, 9, 1320, 17, 10255, 13698), + (12957, 4909, 4909, 4909, 4909, 9, 85, 27461, 16, 1320, 17, 10257, 14733), + (12958, 4912, 4912, 4912, 4912, 9, 85, 27459, 16, 1320, 17, 10258, 13704), + (12959, 4906, 4906, 4906, 4906, 9, 85, 27458, 9, 1320, 17, 10256, 13701), + (12963, 12963, 12963, 12963, 12963, 7, 86, 27465, 81, 5, 17, -1, -1), + (12964, 12964, 12964, 12964, 12964, 7, 88, 27466, 81, 5, 17, -1, -1), + (12965, 12965, 12965, 12965, 12965, 7, 90, 27467, 81, 5, 17, -1, -1), + (12966, -1, -1, 6112, 6112, 5, 87, -1, 0, 0, 17, 6112, 12967), + (12967, -1, -1, 6112, 6112, 5, 89, -1, 0, 0, 17, 12966, 16402), + (12968, -1, -1, 12968, 12968, 7, 85, 0, 0, 0, 17, -1, 12969), + (12969, -1, -1, 12968, 12968, 7, 87, 0, 0, 0, 17, 12968, 12970), + (12970, -1, -1, 12968, 12968, 7, 89, 0, 0, 0, 17, 12969, 14238), + (12971, 12971, 12971, 12971, 12971, 5, 86, 27471, 79, 2160, 17, -1, 12972), + (12972, 12971, 12971, 12971, 12971, 7, 87, 27472, 79, 2160, 17, 12971, 12973), + (12973, 12971, 12971, 12971, 12971, 9, 88, 27473, 79, 2160, 17, 12972, 12974), + (12974, 12971, 12971, 12971, 12971, 12, 89, 27474, 79, 2160, 17, 12973, 12975), + (12975, 12971, 12971, 12971, 12971, 15, 90, 27475, 79, 2160, 17, 12974, -1), + (12976, 7903, 7903, 7903, 7903, 6, 85, 27476, 60, 30, 17, 7903, 14734), + (12977, -1, -1, 12977, 12977, 5, 85, 0, 0, 0, 17, -1, 12978), + (12978, -1, -1, 12977, 12977, 5, 86, 0, 0, 0, 17, 12977, 12979), + (12979, -1, -1, 12977, 12977, 5, 87, 0, 0, 0, 17, 12978, 12980), + (12980, -1, -1, 12977, 12977, 5, 88, 0, 0, 0, 17, 12979, 12981), + (12981, -1, -1, 12977, 12977, 5, 89, 0, 0, 0, 17, 12980, 17334), + (12982, 10600, 10600, 10600, 10600, 7, 86, 27477, 73, 20, 17, 10602, 12983), + (12983, 10600, 10600, 10600, 10600, 7, 88, 27478, 73, 20, 17, 12982, 12984), + (12984, 10600, 10600, 10600, 10600, 7, 90, 27479, 73, 20, 17, 12983, 13720), + (12985, 520, 520, 520, 520, 12, 86, 27480, 6, 540, 17, 10254, 12986), + (12986, 520, 520, 520, 520, 12, 88, 27481, 6, 540, 17, 12985, 12987), + (12987, 520, 520, 520, 520, 12, 90, 27482, 6, 540, 17, 12986, -1), + (12988, -1, -1, 10959, 12988, 12, 90, -1, 0, 0, 17, 10962, -1), + (12989, 12989, 12989, 12989, 12989, 7, 86, 27486, 73, 1800, 17, -1, 12990), + (12990, 12989, 12989, 12989, 12989, 9, 88, 27487, 73, 1800, 17, 12989, 12991), + (12991, 12989, 12989, 12989, 12989, 12, 90, 27488, 73, 1800, 17, 12990, 5336), + (12992, 12992, 12992, 12992, 12992, 9, 86, 27489, 0, 1, 17, -1, 12993), + (12993, 12992, 12992, 12992, 12992, 12, 88, 27490, 0, 1, 17, 12992, 12994), + (12994, 12992, 12992, 12992, 12992, 15, 90, 27491, 0, 1, 17, 12993, 5350), + (12995, 6563, 6563, 6563, 6563, 12, 86, 27492, 36, 8, 17, 6281, -1), + (12996, 153, 153, 153, 153, 12, 90, 27493, 3, 2160, 17, 11081, 17333), + (12997, 1520, 1520, 1520, 1520, 9, 85, 27494, 11, 900, 17, 10192, 12998), + (12998, 1520, 1520, 1520, 1520, 9, 87, 27495, 11, 900, 17, 12997, 12999), + (12999, 1520, 1520, 1520, 1520, 9, 89, 27496, 11, 900, 17, 12998, 5333), + (13000, 10958, 10958, 10958, 10958, 15, 90, 27497, 62, 900, 17, 10958, 16214), + (13001, -1, -1, 13001, 13001, 7, 86, -1, 0, 0, 17, -1, 13002), + (13002, -1, -1, 13001, 13001, 7, 88, -1, 0, 0, 17, 13001, 13003), + (13003, -1, -1, 13001, 13001, 7, 90, -1, 0, 0, 17, 13002, 15348), + (13004, 13004, 13004, 13004, 13004, 9, 86, 27499, 78, 300, 17, -1, 15855), + (13005, -1, -1, 6703, 6703, 3, 86, -1, 0, 0, 17, 10178, 13006), + (13006, -1, -1, 6703, 6703, 3, 88, -1, 0, 0, 17, 13005, 13007), + (13007, -1, -1, 6703, 6703, 3, 90, -1, 0, 0, 17, 13006, -1), + (13008, 13008, 13008, 13008, 13008, 9, 90, 27500, 86, 300, 17, -1, -1), + (13009, 13009, 13009, 13009, 13009, 6, 86, 27501, 39, 1, 17, -1, -1), + (13010, -1, -1, 13010, 13010, 6, 85, 0, 0, 0, 17, -1, 13011), + (13011, -1, -1, 13010, 13010, 6, 87, 0, 0, 0, 17, 13010, 13012), + (13012, -1, -1, 13010, 13010, 6, 89, 0, 0, 0, 17, 13011, 14223), + (13013, -1, -1, 13013, 13013, 6, 86, 0, 0, 0, 17, -1, 13014), + (13014, -1, -1, 13013, 13013, 6, 88, 0, 0, 0, 17, 13013, 13015), + (13015, -1, -1, 13013, 13013, 6, 90, 0, 0, 0, 17, 13014, -1), + (13016, 5109, 5109, 5109, 5109, 9, 86, 27502, 0, 1, 17, 7467, 5356), + (13017, -1, -1, 13017, 13017, 9, 86, -1, 0, 0, 17, -1, 13018), + (13018, -1, -1, 13017, 13017, 12, 88, -1, 0, 0, 17, 13017, 13019), + (13019, -1, -1, 13017, 13017, 15, 90, -1, 0, 0, 17, 13018, 13396), + (13020, 13020, 13020, 13020, 13020, 12, 86, 27503, 76, 420, 17, -1, -1), + (13021, -1, -1, 11085, 11085, 12, 86, 0, 0, 0, 17, 11087, 13022), + (13023, -1, -1, 1050, 1050, 12, 86, -1, 0, 0, 17, 7658, 13024), + (13026, -1, -1, 599, 599, 12, 86, -1, 0, 0, 17, 7561, 13027), + (13027, -1, -1, 599, 599, 12, 88, -1, 0, 0, 17, 13026, 13028), + (13028, -1, -1, 599, 599, 12, 90, -1, 0, 0, 17, 13027, 13438), + (13029, -1, -1, 7818, 7818, 9, 86, 31681, 0, 0, 17, 7818, 13030), + (13032, -1, -1, 1131, 1131, 9, 85, -1, 0, 0, 17, 11084, 13033), + (13033, -1, -1, 1131, 1131, 12, 87, -1, 0, 0, 17, 13032, 13034), + (13035, -1, -1, 1134, 1134, 3, 86, -1, 0, 0, 17, 10315, 13036), + (13040, -1, -1, 4809, 4809, 5, 86, -1, 0, 0, 17, 10318, 13041), + (13043, -1, -1, 5776, 5776, 9, 86, -1, 0, 0, 17, 7198, 13044), + (13046, -1, -1, 8250, 8250, 6, 85, -1, 0, 0, 17, 8254, 13047), + (13047, -1, -1, 8250, 8250, 6, 86, -1, 0, 0, 17, 13046, 13048), + (13048, -1, -1, 8250, 8250, 6, 87, -1, 0, 0, 17, 13047, 13049), + (13049, -1, -1, 8250, 8250, 6, 88, -1, 0, 0, 17, 13048, 13050), + (13050, -1, -1, 8250, 8250, 6, 89, -1, 0, 0, 17, 13049, 13348), + (13051, -1, -1, 10404, 10404, 6, 90, -1, 0, 0, 17, 10404, -1), + (13052, -1, -1, 10401, 10401, 6, 86, -1, 0, 0, 17, 10403, 13053), + (13055, -1, -1, 13055, 13055, 6, 86, 0, 0, 0, 17, -1, 13056), + (13058, 6931, 6931, 6931, 6931, 12, 90, 27504, 41, 600, 17, 10319, 13857), + (13059, 4854, 4854, 4854, 4854, 9, 86, 27505, 8, 600, 17, 10325, 13060), + (13062, 6932, 6932, 6932, 6932, 7, 86, 27508, 42, 1200, 17, 10322, 13063), + (13065, 13065, 13065, 13065, 13065, 12, 86, 27514, 70, 90, 17, -1, -1), + (13066, 13066, 13066, 13066, 13066, 9, 85, 27516, 71, 1800, 17, -1, -1), + (13067, -1, -1, 13067, 13067, 6, 86, 0, 0, 0, 17, -1, 13068), + (13072, -1, -1, 12600, 12600, 7, 87, 0, 0, 0, 17, 12600, 13073), + (13073, -1, -1, 12600, 12600, 7, 89, 0, 0, 0, 17, 13072, 13222), + (13074, -1, -1, 1044, 1044, 9, 86, -1, 0, 0, 17, 7652, 13075), + (13075, -1, -1, 1044, 1044, 12, 88, -1, 0, 0, 17, 13074, 13076), + (13076, -1, -1, 1044, 1044, 15, 90, -1, 0, 0, 17, 13075, 13326), + (13077, -1, -1, 1047, 1047, 9, 86, -1, 0, 0, 17, 7655, 13078), + (13078, -1, -1, 1047, 1047, 12, 88, -1, 0, 0, 17, 13077, 13079), + (13080, -1, -1, 125, 125, 9, 86, -1, 0, 0, 17, 12400, 13081), + (13081, -1, -1, 125, 125, 10, 87, -1, 0, 0, 17, 13080, 13082), + (13082, -1, -1, 125, 125, 11, 88, -1, 0, 0, 17, 13081, 13083), + (13083, -1, -1, 125, 125, 12, 89, -1, 0, 0, 17, 13082, 13084), + (13084, -1, -1, 125, 125, 13, 90, -1, 0, 0, 17, 13083, 8463), + (13085, -1, -1, 122, 122, 9, 86, -1, 0, 0, 17, 12405, 13086), + (13086, -1, -1, 122, 122, 10, 87, -1, 0, 0, 17, 13085, 13087), + (13087, -1, -1, 122, 122, 11, 88, -1, 0, 0, 17, 13086, 13088), + (13088, -1, -1, 122, 122, 12, 89, -1, 0, 0, 17, 13087, 13089), + (13089, -1, -1, 122, 122, 13, 90, -1, 0, 0, 17, 13088, 8440), + (13090, -1, -1, 1435, 4773, 9, 86, -1, 0, 0, 17, 7621, 13295), + (13091, -1, -1, 1435, 4773, 9, 86, -1, 0, 0, 17, 1650, 13294), + (13092, -1, -1, 644, 644, 9, 85, -1, 0, 0, 17, 7361, 13093), + (13093, -1, -1, 644, 644, 12, 87, -1, 0, 0, 17, 13092, 13094), + (13094, -1, -1, 644, 644, 15, 89, -1, 0, 0, 17, 13093, 13265), + (13095, -1, -1, 1604, 1604, 15, 89, -1, 0, 0, 17, 12613, 13767), + (13096, -1, -1, 13096, 13096, 12, 86, -1, 0, 0, 17, -1, 13097), + (13097, -1, -1, 13096, 13096, 12, 88, -1, 0, 0, 17, 13096, 13098), + (13098, -1, -1, 13096, 13096, 12, 90, -1, 0, 0, 17, 13097, 13127), + (13099, -1, -1, 83, 83, 9, 55, -1, 0, 0, 17, 85, -1), + (13100, 13100, 13100, 13100, 13100, 9, 86, 27534, 86, 300, 17, -1, 15140), + (13101, -1, -1, 13101, 13101, 7, 86, 0, 0, 0, 17, -1, 13102), + (13102, -1, -1, 13101, 13101, 9, 88, 0, 0, 0, 17, 13101, 13103), + (13103, -1, -1, 13101, 13101, 12, 90, 0, 0, 0, 17, 13102, 14082), + (13104, -1, -1, 589, 589, 9, 86, -1, 0, 0, 17, 7709, 13105), + (13105, -1, -1, 589, 589, 9, 88, -1, 0, 0, 17, 13104, 13106), + (13106, -1, -1, 589, 589, 9, 90, -1, 0, 0, 17, 13105, 15778), + (13107, 6645, 6645, 6645, 6645, 9, 90, 27541, 45, 60, 17, 6645, 13633), + (13108, 13108, 13108, 13108, 13108, 5, 90, 27542, 89, 30, 17, -1, -1), + (13109, 1351, 1351, 1351, 1351, 8, 90, 27543, 5, 30, 17, 7109, -1), + (13110, 10815, 10815, 10815, 10815, 9, 86, -1, 0, 0, 17, 10817, 13111), + (13111, 10815, 10815, 10815, 10815, 11, 88, -1, 0, 0, 17, 13110, 13112), + (13113, 10818, 10818, 10818, 10818, 9, 86, -1, 0, 0, 17, 10820, 13114), + (13114, 10818, 10818, 10818, 10818, 11, 88, -1, 0, 0, 17, 13113, 13115), + (13116, 10821, 10821, 10821, 10821, 9, 86, -1, 0, 0, 17, 10823, 13117), + (13117, 10821, 10821, 10821, 10821, 11, 88, -1, 0, 0, 17, 13116, 13118), + (13119, 5007, 5007, 5007, 5007, 9, 86, 27544, 8, 2160, 17, 10063, 13120), + (13120, 5007, 5007, 5007, 5007, 9, 88, 27545, 8, 2160, 17, 13119, 13121), + (13122, -1, -1, 6546, 6546, 0, 86, -1, 0, 0, 17, 7377, 13123), + (13123, -1, -1, 6546, 6546, 0, 87, -1, 0, 0, 17, 13122, 13124), + (13124, -1, -1, 6546, 6546, 0, 88, -1, 0, 0, 17, 13123, 13125), + (13127, -1, -1, 13096, 13096, 12, 91, -1, 0, 0, 18, 13098, 13128), + (13130, 13130, 13130, 13130, 13130, 15, 95, 32440, 48, 30, 18, -1, -1), + (13133, 7756, 7756, 7756, 7756, 12, 85, 21805, 85, 120, 17, -1, -1), + (13134, 13134, 13134, 13134, 13134, 7, 86, 27547, 74, 900, 17, -1, 13135), + (13135, 13134, 13134, 13134, 13134, 7, 88, 27548, 74, 900, 17, 13134, 13136), + (13136, 13134, 13134, 13134, 13134, 7, 90, 27549, 74, 900, 17, 13135, 13380), + (13140, -1, -1, 10464, 10464, 7, 86, -1, 0, 0, 17, 10466, 13141), + (13141, -1, -1, 10464, 10464, 9, 88, -1, 0, 0, 17, 13140, 13142), + (13142, -1, -1, 10464, 10464, 11, 90, -1, 0, 0, 17, 13141, -1), + (13143, -1, -1, 13143, 13143, 5, 86, 0, 0, 0, 17, -1, 13144), + (13144, -1, -1, 13143, 13143, 5, 88, 0, 0, 0, 17, 13143, 13145), + (13145, -1, -1, 13143, 13143, 5, 90, 0, 0, 0, 17, 13144, -1), + (13146, -1, -1, 13146, 13146, 5, 86, 0, 0, 0, 17, -1, 13147), + (13147, -1, -1, 13146, 13146, 5, 88, 0, 0, 0, 17, 13146, 13148), + (13148, -1, -1, 13146, 13146, 5, 90, 0, 0, 0, 17, 13147, -1), + (13149, -1, -1, 8210, 8210, 5, 86, -1, 0, 0, 17, 1655, 13150), + (13150, -1, -1, 8210, 8210, 5, 87, -1, 0, 0, 17, 13149, 13151), + (13151, -1, -1, 8210, 8210, 5, 88, -1, 0, 0, 17, 13150, 13152), + (13152, -1, -1, 8210, 8210, 5, 89, -1, 0, 0, 17, 13151, 13153), + (13153, -1, -1, 8210, 8210, 5, 90, -1, 0, 0, 17, 13152, 13318), + (13154, 5105, 5105, 5105, 5105, 12, 90, 27550, 11, 600, 17, 10509, 14023), + (13155, 7986, 7986, 7986, 7986, 12, 90, 27551, 11, 600, 17, 10510, 14022), + (13158, 548, 548, 548, 548, 10, 86, 27552, 5, 900, 17, 10098, 13159), + (13161, 528, 528, 528, 528, 12, 86, 27555, 5, 720, 17, 10196, 13162), + (13162, 528, 528, 528, 528, 12, 88, 27556, 5, 720, 17, 13161, 13163), + (13163, 528, 528, 528, 528, 12, 90, 27557, 5, 720, 17, 13162, 5357), + (13164, 13164, 13164, 13164, 13164, 9, 86, 27540, 99, 180, 17, -1, -1), + (13165, 13165, 13165, 13165, 13165, 9, 86, 27559, 56, 60, 17, -1, -1), + (13166, -1, -1, 13166, 13166, 7, 86, 0, 0, 0, 17, -1, 13167), + (13167, -1, -1, 13166, 13166, 7, 88, 0, 0, 0, 17, 13166, 13168), + (13168, -1, -1, 13166, 13166, 7, 90, 0, 0, 0, 17, 13167, -1), + (13169, 13169, 13169, 13169, 13169, 9, 90, 27560, 99, 180, 17, -1, 17221), + (13170, 6380, 6380, 6380, 6380, 6, 86, 27561, 39, 120, 17, 10310, 13171), + (13173, 290, 290, 290, 290, 8, 86, 27564, 4, 720, 17, 290, 13448), + (13174, 10374, 10374, 10374, 10374, 6, 85, 27565, 63, 900, 17, 10376, 13175), + (13175, 10374, 10374, 10374, 10374, 8, 87, 27566, 63, 900, 17, 13174, 13176), + (13177, 6984, 6984, 6984, 6984, 6, 83, 27568, 60, 60, 17, 10294, 13466), + (13178, 6986, 6986, 6986, 6986, 6, 83, 27570, 60, 60, 17, 10296, 13468), + (13179, 6985, 6985, 6985, 6985, 6, 83, 27569, 60, 60, 17, 10295, 13467), + (13180, 10377, 10377, 10377, 10377, 6, 86, 16796, 64, 60, 17, 10379, 13181), + (13183, 10346, 10346, 10346, 10346, 9, 90, 27574, 46, 600, 17, 10346, 13819), + (13184, -1, -1, 10340, 10340, 9, 86, -1, 0, 0, 17, 10342, 13185), + (13185, -1, -1, 10340, 10340, 9, 88, -1, 0, 0, 17, 13184, 13186), + (13186, -1, -1, 10340, 10340, 9, 90, -1, 0, 0, 17, 13185, 13829), + (13187, -1, -1, 9512, 9512, 7, 86, -1, 0, 0, 17, 7883, 13188), + (13188, -1, -1, 9512, 9512, 7, 88, -1, 0, 0, 17, 13187, 13189), + (13189, -1, -1, 9512, 9512, 7, 90, -1, 0, 0, 17, 13188, 13826), + (13190, 1110, 1110, 1110, 1110, 6, 86, 27576, 3, 2160, 17, 10152, 13191), + (13191, 1110, 1110, 1110, 1110, 6, 88, 27577, 3, 2160, 17, 13190, 13192), + (13192, 1110, 1110, 1110, 1110, 6, 90, 27578, 3, 2160, 17, 13191, 13496), + (13193, 1598, -1, 1598, 1598, 9, 86, 27582, 6, 900, 17, 10148, 13194), + (13194, 1598, -1, 1598, 1598, 11, 88, 27583, 6, 900, 17, 13193, 13195), + (13195, 1598, -1, 1598, 1598, 13, 90, 27584, 6, 900, 17, 13194, 13493), + (13196, -1, -1, 255, 255, 9, 86, -1, 0, 0, 17, 10135, 13197), + (13197, -1, -1, 255, 255, 9, 88, -1, 0, 0, 17, 13196, 13198), + (13198, -1, -1, 255, 255, 9, 90, -1, 0, 0, 17, 13197, 13511), + (13199, -1, -1, 8322, 8322, 9, 86, 0, 0, 0, 17, 8324, 13200), + (13200, -1, -1, 8322, 8322, 9, 88, 0, 0, 0, 17, 13199, 13201), + (13201, -1, -1, 8322, 8322, 9, 90, 0, 0, 0, 17, 13200, -1), + (13202, 13202, 13202, 13202, 13202, 2, 81, 27585, 98, 20, 17, -1, 14009), + (13203, 10330, 10330, 10330, 10330, 7, 90, 27586, 35, 30, 17, 10330, 13492), + (13204, -1, -1, 13204, 13204, 7, 86, -1, 0, 0, 17, -1, 13205), + (13205, -1, -1, 13204, 13204, 7, 88, -1, 0, 0, 17, 13204, 13206), + (13206, -1, -1, 13204, 13204, 7, 90, -1, 0, 0, 17, 13205, 14176), + (13207, -1, -1, 10850, 10850, 9, 86, 27587, 0, 0, 17, 10852, 13208), + (13208, -1, -1, 10850, 10850, 9, 88, 27588, 0, 0, 17, 13207, 13209), + (13209, -1, -1, 10850, 10850, 9, 90, 27589, 0, 0, 17, 13208, 13779), + (13210, -1, -1, 1307, 1307, 5, 81, -1, 0, 0, 17, 6662, 13211), + (13211, -1, -1, 1307, 1307, 5, 83, -1, 0, 0, 17, 13210, 13212), + (13212, -1, -1, 1307, 1307, 5, 85, -1, 0, 0, 17, 13211, -1), + (13213, -1, -1, 1543, 1543, 7, 86, -1, 0, 0, 17, 10167, 13214), + (13214, -1, -1, 1543, 1543, 7, 87, -1, 0, 0, 17, 13213, 13215), + (13215, -1, -1, 1543, 1543, 7, 88, -1, 0, 0, 17, 13214, 13216), + (13216, -1, -1, 1543, 1543, 7, 89, -1, 0, 0, 17, 13215, 13217), + (13217, -1, -1, 1543, 1543, 7, 90, -1, 0, 0, 17, 13216, 13782), + (13218, -1, -1, 1304, 1304, 12, 90, -1, 0, 0, 17, 10867, 13789), + (13219, -1, -1, 8325, 8325, 7, 85, 0, 0, 0, 17, 8327, 13220), + (13220, -1, -1, 8325, 8325, 9, 87, 0, 0, 0, 17, 13219, 13221), + (13221, -1, -1, 8325, 8325, 11, 89, 0, 0, 0, 17, 13220, 13798), + (13222, -1, -1, 12600, 12600, 7, 89, 0, 0, 0, 17, 13073, 13223), + (13223, -1, -1, 12600, 12600, 7, 89, 0, 0, 0, 17, 13222, -1), + (13224, 13224, -1, 13224, 13224, 3, 86, 27590, 98, 1, 17, -1, 15559), + (13225, 13225, 13225, 13225, 13225, 6, 86, 27592, 0, 4, 17, -1, 13688), + (13226, -1, -1, 5295, 5295, 6, 86, -1, 0, 0, 17, 10229, 13227), + (13229, 6290, 6290, 6290, 6290, 9, 86, 27596, 0, 1, 17, 11066, 13230), + (13232, 4944, -1, 4944, 4944, 9, 86, 27602, 0, 1, 17, 11069, 13233), + (13235, 1478, -1, 1478, 1478, 9, 86, 27608, 0, 1, 17, 11072, 13236), + (13238, -1, -1, 1287, 1287, 9, 86, -1, 0, 0, 17, 12474, 13239), + (13239, -1, -1, 1287, 1287, 10, 88, -1, 0, 0, 17, 13238, 13240), + (13240, -1, -1, 1287, 1287, 11, 90, -1, 0, 0, 17, 13239, 15719), + (13241, 4931, 4931, 4931, 4931, 7, 86, 27614, 4, 600, 17, 10430, 13242), + (13244, 1501, 1501, 1501, 1501, 6, 86, 27617, 10, 4320, 17, 1560, 13245), + (13247, 4894, 4894, 4894, 4894, 6, 86, 27620, 7, 2160, 17, 7290, 13248), + (13250, 10550, 10550, 10550, 10550, 7, 90, 27626, 61, 120, 17, 10550, 13728), + (13251, 1239, 1239, 1239, 1239, 9, 90, 27627, 6, 600, 17, 7275, 13732), + (13252, 13252, 13252, 13252, 13252, 9, 86, 27629, 95, 4, 17, -1, 16065), + (13253, 1126, 1126, 1126, 1126, 7, 85, 27630, 2, 2160, 17, 5515, 13254), + (13254, 1126, 1126, 1126, 1126, 7, 87, 27631, 2, 2160, 17, 13253, 13255), + (13255, 1126, 1126, 1126, 1126, 7, 89, 27632, 2, 2160, 17, 13254, 13723), + (13256, 146, 146, 146, 146, 8, 86, 27633, 2, 180, 17, 7691, 13257), + (13257, 146, 146, 146, 146, 8, 88, 27634, 2, 180, 17, 13256, 13258), + (13258, 146, 146, 146, 146, 8, 90, 27635, 2, 180, 17, 13257, 14222), + (13259, 1195, 1195, 1195, 1195, 9, 90, 27661, 13, 2160, 17, 10015, 15334), + (13260, 13260, 13260, 13260, 13260, 0, 80, 27664, 98, 3600, 17, -1, -1), + (13261, 13261, 13261, 13261, 13261, 0, 81, 27665, 98, 28800, 17, -1, -1), + (13262, -1, -1, 498, 498, 5, 70, -1, 0, 0, 16, 975, 13263), + (13263, -1, -1, 498, 498, 5, 75, -1, 0, 0, 16, 13262, 13264), + (13264, -1, -1, 498, 498, 5, 80, -1, 0, 0, 16, 13263, -1), + (13271, 13271, 13271, 13271, 13271, 0, 80, 27691, 97, 3600, 18, -1, -1), + (13272, 13272, 13272, 13272, 13272, 0, 81, 27692, 97, 28800, 18, -1, -1), + (13275, 6537, 6537, 6537, 6537, 10, 91, 30638, 30, 900, 18, 12522, 13276), + (13278, -1, -1, 6051, 6051, 10, 91, -1, 0, 0, 18, 12797, 13279), + (13281, -1, -1, 1072, 1072, 12, 91, -1, 0, 0, 18, 12541, 13282), + (13286, -1, -1, 119, 119, 12, 91, -1, 0, 0, 18, 12552, 13287), + (13291, 6539, 6539, 6539, 6539, 9, 91, 30641, 18, 1800, 18, 12944, 13292), + (13294, -1, -1, 1435, 4773, 12, 91, -1, 0, 0, 18, 13091, 14490), + (13295, -1, -1, 1435, 4773, 12, 91, -1, 0, 0, 18, 13090, 14491), + (13296, -1, -1, 77, 77, 12, 91, -1, 0, 0, 18, 12499, 13297), + (13297, -1, -1, 77, 77, 12, 93, -1, 0, 0, 18, 13296, 13298), + (13299, -1, -1, 1186, 1186, 12, 91, -1, 0, 0, 18, 12566, 13300), + (13302, -1, -1, 80, 80, 12, 91, -1, 0, 0, 18, 12569, 13303), + (13305, -1, -1, 683, 683, 10, 91, -1, 0, 0, 18, 12696, 13306), + (13308, -1, -1, 446, 735, 10, 91, -1, 0, 0, 18, 10477, 13309), + (13313, -1, -1, 658, 658, 8, 91, -1, 0, 0, 18, 12574, 13314), + (13318, -1, -1, 8210, 8210, 10, 91, -1, 0, 0, 18, 13153, 13319), + (13323, -1, -1, 1287, 1287, 12, 91, -1, 0, 0, 18, 10639, 13324), + (13326, -1, -1, 1044, 1044, 10, 91, -1, 0, 0, 18, 13076, 13327), + (13332, -1, -1, 1041, 1041, 11, 91, -1, 0, 0, 18, 12699, 13333), + (13338, -1, -1, 8245, 8245, 11, 91, -1, 0, 0, 18, 8426, 13339), + (13343, -1, -1, 8240, 8240, 11, 91, -1, 0, 0, 18, 10785, 13344), + (13348, -1, -1, 8250, 8250, 11, 91, -1, 0, 0, 18, 13050, 13349), + (13353, -1, -1, 8235, 8235, 11, 91, -1, 0, 0, 18, 8308, 13354), + (13358, -1, -1, 8255, 8255, 11, 91, -1, 0, 0, 18, 12415, 13359), + (13363, 1192, 1192, 1192, 1192, 9, 91, 30645, 12, 1320, 18, 10021, 13364), + (13383, 6488, 6488, 6488, 6488, 15, 91, 30657, 32, 900, 18, 6488, 13384), + (13385, 13385, 13385, 13385, 13385, 12, 91, 30659, 75, 600, 18, -1, 13386), + (13388, 13388, 13388, 13388, 13388, 12, 91, 30665, 79, 180, 18, -1, -1), + (13389, 13389, -1, 13389, 13389, 5, 91, 30666, 77, 12, 18, -1, 15832), + (13396, -1, -1, 13017, 13017, 15, 91, -1, 0, 0, 18, 13019, 13397), + (13401, 1498, 1498, 1498, 1498, 15, 91, 30679, 12, 1320, 18, 10092, 13402), + (13404, -1, -1, 1514, 1514, 11, 91, -1, 0, 0, 18, 1516, 13405), + (13410, 645, -1, 645, 645, 15, 95, 30682, 4, 5, 18, 10739, -1), + (13411, -1, -1, 12652, 12652, 15, 92, 0, 0, 0, 18, 12654, 13412), + (13413, -1, -1, 12416, 12416, 15, 91, -1, 0, 0, 18, 12418, 13414), + (13415, -1, -1, 7989, 7989, 9, 95, -1, 0, 0, 18, 7992, -1), + (13416, -1, -1, 13416, 13416, 9, 91, 0, 0, 0, 18, -1, 13417), + (13419, 13419, 13419, 13419, 13419, 12, 91, 30683, 99, 600, 18, -1, 13420), + (13425, 54006, 54006, 54006, 54006, 9, 91, 30692, 18, 180, 18, 10006, 13426), + (13438, -1, -1, 599, 599, 13, 91, -1, 0, 0, 18, 13028, 13439), + (13444, 13444, 13444, 13444, 13444, 9, 91, 30699, 75, 600, 18, -1, 13445), + (13447, 11073, 11073, 11073, 11073, 12, 95, 30705, 53, 30, 18, 11073, 15412), + (13449, -1, -1, 13449, 13449, 5, 91, -1, 0, 0, 18, -1, 13450), + (13454, 718, 718, 718, 718, 12, 91, 30711, 7, 4320, 18, 1019, 14855), + (13463, -1, -1, 13463, 13463, 7, 91, -1, 0, 0, 18, -1, 13464), + (13466, 6984, 6984, 6984, 6984, 9, 91, 30721, 60, 60, 18, 13177, 13469), + (13467, 6985, 6985, 6985, 6985, 9, 91, 30723, 60, 60, 18, 13179, 13470), + (13468, 6986, 6986, 6986, 6986, 12, 92, 30725, 60, 60, 18, 13178, 13471), + (13472, 11080, 11080, 11080, 11080, 11, 91, 30727, 10, 20, 18, 11080, 13473), + (13474, -1, -1, 13474, 13474, 9, 91, -1, 0, 0, 18, -1, 13475), + (13477, -1, -1, 10380, 10380, 11, 91, -1, 0, 0, 18, 10382, 13478), + (13483, 13483, 13483, 13483, 13483, 5, 91, 30735, 68, 20, 18, -1, -1), + (13484, 13484, -1, 13484, 13484, 12, 95, 30736, 76, 720, 18, -1, 15879), + (13485, -1, -1, 13485, 13485, 7, 91, -1, 0, 0, 18, -1, 13486), + (13490, 5020, 5020, 5020, 5020, 9, 91, 30742, 9, 300, 18, 10149, 13491), + (13492, 10330, 10330, 10330, 10330, 12, 95, 30744, 35, 30, 18, 13203, 14797), + (13493, 1598, -1, 1598, 1598, 11, 91, 30745, 6, 900, 18, 13195, 13494), + (13496, 1110, 1110, 1110, 1110, 9, 91, 30748, 3, 2160, 18, 13192, 13497), + (13499, 592, 592, 592, 592, 9, 91, 30754, 2, 18, 18, 12751, 13500), + (13502, -1, -1, 6375, 6375, 9, 91, -1, 0, 0, 18, 12736, 13503), + (13505, 6533, 6533, 6533, 6533, 11, 91, 30757, 15, 600, 18, 12742, 13506), + (13508, -1, -1, 8314, 8314, 9, 91, -1, 0, 0, 18, 8316, 13509), + (13511, -1, -1, 255, 255, 9, 91, -1, 0, 0, 18, 13198, 13512), + (13514, 5298, 5298, 5298, 5298, 12, 91, 30760, 32, 1800, 18, 12748, 13515), + (13517, 10336, 10336, 10336, 10336, 11, 91, 30766, 58, 8, 18, 12732, 13518), + (13520, -1, -1, 12419, 12419, 15, 95, -1, 0, 0, 18, 12575, 16886), + (13521, -1, -1, 6386, 6386, 9, 91, -1, 0, 0, 18, 6389, 13522), + (13524, 6534, 6534, 6534, 6534, 11, 91, 30769, 16, 900, 18, 7429, 13525), + (13527, 13527, 13527, 13527, 13527, 9, 91, 30772, 18, 9, 18, -1, 15964), + (13528, 13528, 13528, 13528, 13528, 10, 91, 30773, 42, 60, 18, -1, -1), + (13529, 13529, 13529, 13529, 13529, 15, 95, 30774, 41, 120, 18, -1, -1), + (13530, 1116, 1116, 1116, 1116, 12, 91, 30775, 4, 2160, 18, 12745, 13531), + (13533, -1, -1, 7010, 7010, 9, 91, -1, 0, 0, 18, 7015, 13534), + (13542, 6755, 6755, 6755, 6755, 12, 91, 30784, 42, 900, 18, 6757, 13543), + (13545, -1, -1, 10388, 10388, 12, 95, -1, 0, 0, 18, 10388, 15293), + (13546, 6758, 6758, 6758, 6758, 11, 91, 32360, 43, 900, 18, 10056, 13547), + (13549, 13549, 13549, 13549, 13549, 15, 95, 30788, 64, 180, 18, -1, -1), + (13556, 13556, 13556, 13556, 13556, 9, 91, 30792, 44, 600, 18, -1, 13557), + (13562, -1, -1, 10719, 10719, 15, 91, 0, 0, 0, 18, 10721, 13563), + (13565, -1, -1, 13565, 13565, 11, 91, 0, 0, 0, 18, -1, 13566), + (13568, -1, -1, 13568, 13568, 11, 91, 0, 0, 0, 18, -1, 13569), + (13571, 13571, 13571, 13571, 13571, 12, 91, 30795, 50, 60, 18, -1, -1), + (13575, 5095, 5095, 5095, 5095, 11, 91, 30796, 10, 900, 18, 10642, 13576), + (13578, 0, 0, 10348, 10348, 9, 91, -1, 0, 0, 18, 10350, 13579), + (13584, 10394, 10394, 10394, 10394, 15, 91, 30799, 30, 300, 18, 10704, 14981), + (13585, 7712, 7712, 7712, 7712, 15, 95, 30800, 2, 30, 18, 10646, 15095), + (13586, 188, 188, 188, 188, 12, 91, 30801, 2, 30, 18, 10647, 13587), + (13589, -1, -1, 255, 255, 13, 91, -1, 0, 0, 18, 10625, 13590), + (13590, -1, -1, 255, 255, 15, 93, -1, 0, 0, 18, 13589, 13591), + (13592, 5984, 5984, 5984, 5984, 12, 91, 30803, 2, 30, 18, 10626, 13593), + (13595, 534, 534, 534, 534, 12, 91, 30806, 4, 2160, 18, 10710, 13596), + (13598, -1, -1, 6791, 6791, 11, 91, -1, 0, 0, 18, 10678, 13599), + (13601, -1, -1, 852, 852, 11, 91, -1, 0, 0, 18, 12578, 13602), + (13604, 7850, 7850, 7850, 7850, 15, 91, 30812, 39, 4320, 18, 10620, 13605), + (13607, -1, -1, 10453, 10453, 11, 91, -1, 0, 0, 18, 10455, 13608), + (13610, -1, -1, 602, 602, 12, 91, -1, 0, 0, 18, 10687, 13611), + (13613, -1, -1, 855, 855, 11, 91, -1, 0, 0, 18, 10692, 13614), + (13616, -1, -1, 13616, 13616, 7, 91, -1, 0, 0, 18, -1, 13617), + (13617, -1, -1, 13616, 13616, 9, 93, -1, 0, 0, 18, 13616, 13618), + (13618, -1, -1, 13616, 13616, 12, 95, -1, 0, 0, 18, 13617, 14786), + (13619, 7800, 7800, 7800, 7800, 15, 91, 30815, 39, 4320, 18, 10787, 13620), + (13621, -1, -1, 6630, 6630, 9, 91, -1, 0, 0, 18, 10074, 13622), + (13624, 10900, 10900, 10900, 10900, 9, 91, 30817, 55, 120, 18, 10902, 13625), + (13627, -1, -1, 895, 895, 9, 91, -1, 0, 0, 18, 10908, 13628), + (13628, -1, -1, 895, 895, 12, 93, -1, 0, 0, 18, 13627, 13629), + (13630, -1, -1, 9506, 9506, 11, 91, -1, 0, 0, 18, 9508, 13631), + (13633, 6645, 6645, 6645, 6645, 15, 95, 30820, 45, 60, 18, 13107, 15178), + (13646, 13646, 13646, 13646, 13646, 15, 91, 30837, 45, 600, 18, -1, -1), + (13650, 8060, 8060, 8060, 8060, 9, 91, 31524, 41, 1800, 18, 10239, 13651), + (13653, 8063, 8063, 8063, 8063, 9, 91, 31527, 41, 1800, 18, 10242, 13654), + (13656, 8066, 8066, 8066, 8066, 11, 91, 31530, 41, 1800, 18, 10245, 13657), + (13663, 12893, 12893, 12893, 12893, 15, 91, 31534, 76, 1800, 18, 12893, 13664), + (13667, -1, -1, 13667, 13667, 11, 91, -1, 0, 0, 18, -1, 13668), + (13670, 13670, 13670, 13670, 13670, 12, 91, 31538, 43, 1800, 18, -1, 13671), + (13673, 13673, 13673, 13673, 13673, 18, 95, 32050, 0, 1, 18, -1, -1), + (13674, 13674, 13674, 13674, 13674, 18, 95, 32058, 0, 1, 18, -1, -1), + (13675, -1, -1, 5264, 5264, 12, 91, -1, 0, 0, 18, 12800, 13676), + (13678, 13678, 13678, 13678, 13678, 15, 95, 31543, 74, 1200, 18, 12778, -1), + (13682, 12766, 12766, 12766, 12766, 18, 95, 31545, 69, 3600, 18, 12766, -1), + (13683, 6822, 6822, 6822, 6822, 15, 91, 31546, 42, 120, 18, 6822, 14780), + (13684, -1, -1, 13684, 13684, 9, 91, -1, 0, 0, 18, -1, 13685), + (13685, -1, -1, 13684, 13684, 12, 93, -1, 0, 0, 18, 13684, 13686), + (13686, -1, -1, 13684, 13684, 15, 95, -1, 0, 0, 18, 13685, 16653), + (13687, 13687, 13687, 13687, 13687, 15, 91, 31547, 75, 300, 18, -1, 17521), + (13688, 13225, 13225, 13225, 13225, 12, 91, 31548, 0, 4, 18, 13225, 15620), + (13689, -1, -1, 13689, 13689, 9, 91, -1, 0, 0, 18, -1, 13690), + (13692, 12208, 12208, 12208, 12208, 6, 91, 31549, 17, 12, 18, -1, -1), + (13693, 13693, 13693, 13693, 13693, 18, 95, 31550, 76, 500, 18, -1, 17531), + (13695, 13695, 13695, 13695, 13695, 12, 91, 31577, 91, 1320, 18, -1, 13696), + (13698, 4903, 4903, 4903, 4903, 12, 91, 31580, 9, 1320, 18, 12956, 13699), + (13701, 4906, 4906, 4906, 4906, 12, 91, 31583, 9, 1320, 18, 12959, 13702), + (13704, 4912, 4912, 4912, 4912, 12, 91, 31586, 16, 1320, 18, 12958, 13705), + (13707, -1, -1, 1577, 1577, 12, 91, -1, 0, 0, 18, 10264, 13708), + (13710, -1, -1, 795, 795, 9, 91, -1, 0, 0, 18, 12949, 13711), + (13713, -1, -1, 790, 790, 6, 91, -1, 0, 0, 18, 12954, 13714), + (13718, 167, 167, 167, 167, 12, 91, 31589, 14, 900, 18, 12955, 13719), + (13720, 10600, 10600, 10600, 10600, 11, 91, 31591, 73, 20, 18, 12984, 13721), + (13723, 1126, 1126, 1126, 1126, 11, 91, 31594, 2, 2160, 18, 13255, 13724), + (13726, 1017, 1017, 1017, 1017, 12, 91, 31597, 75, 15, 18, 1017, -1), + (13727, 4938, 4938, 4938, 4938, 12, 95, 31598, 35, 1800, 18, 12875, 16031), + (13734, 773, -1, 773, 773, 9, 91, 31606, 5, 1800, 18, 10566, 13735), + (13753, -1, -1, 13753, 13753, 5, 91, -1, 0, 0, 18, -1, 13754), + (13758, -1, -1, 13758, 13758, 5, 91, -1, 0, 0, 18, -1, 13759), + (13763, -1, -1, 781, 781, 12, 95, -1, 0, 0, 18, 7284, -1), + (13764, -1, -1, 13764, 13764, 9, 91, -1, 0, 0, 18, -1, 13765), + (13767, -1, -1, 1604, 1604, 12, 91, -1, 0, 0, 18, 13095, 13768), + (13770, 6328, 6328, 6328, 6328, 9, 91, 31628, 10, 600, 18, 10170, 13771), + (13771, 6328, 6328, 6328, 6328, 12, 93, 31629, 10, 600, 18, 13770, 13772), + (13773, -1, -1, 255, 255, 11, 91, -1, 0, 0, 18, 12610, 13774), + (13774, -1, -1, 255, 255, 13, 92, -1, 0, 0, 18, 13773, 13775), + (13775, -1, -1, 255, 255, 15, 93, -1, 0, 0, 18, 13774, 14126), + (13779, -1, -1, 10850, 10850, 12, 91, 31637, 0, 0, 18, 13209, 13780), + (13782, -1, -1, 1543, 1543, 9, 91, -1, 0, 0, 18, 13217, 13783), + (13785, 5021, 5021, 5021, 5021, 11, 91, 31640, 7, 60, 18, 12621, 13786), + (13788, 13788, 13788, 13788, 13788, 25, 51, 31643, 31, 2, 3, -1, -1), + (13789, -1, -1, 1304, 1304, 11, 91, -1, 0, 0, 18, 13218, 13790), + (13790, -1, -1, 1304, 1304, 13, 93, -1, 0, 0, 18, 13789, 13791), + (13792, 13792, 13792, 13792, 13792, 9, 91, 31644, 18, 600, 18, 12633, 13793), + (13795, -1, -1, 846, 846, 12, 91, -1, 0, 0, 18, 10175, 13796), + (13798, -1, -1, 8325, 8325, 9, 91, -1, 0, 0, 18, 13221, 13799), + (13804, -1, -1, 10650, 10650, 9, 91, -1, 0, 0, 18, 10652, 13805), + (13807, 1352, 1352, 1352, 1352, 9, 91, 31647, 3, 60, 18, 10115, 13808), + (13810, 1358, 1358, 1358, 1358, 9, 91, 31650, 3, 60, 18, 10118, 13811), + (13813, -1, -1, 12706, 12706, 12, 91, 0, 0, 0, 18, 12708, 13814), + (13816, 7875, 7875, 7875, 7875, 9, 91, 31653, 42, 600, 18, 7880, 13817), + (13819, 10346, 10346, 10346, 10346, 12, 95, 31659, 46, 600, 18, 13183, 16924), + (13820, -1, -1, 820, 820, 9, 91, -1, 0, 0, 18, 12669, 13821), + (13823, -1, -1, 6020, 6020, 9, 91, -1, 0, 0, 18, 12693, 13824), + (13826, -1, -1, 9512, 9512, 9, 91, -1, 0, 0, 18, 13189, 13827), + (13829, -1, -1, 10340, 10340, 12, 91, -1, 0, 0, 18, 13186, 13830), + (13832, 1355, 1355, 1355, 1355, 11, 91, 31661, 3, 60, 18, 12702, 13833), + (13835, -1, -1, 611, 611, 9, 91, -1, 0, 0, 18, 12705, 13836), + (13838, 7872, 7872, 7872, 7872, 9, 91, 31664, 41, 600, 18, 12684, 13839), + (13841, -1, -1, 10343, 10343, 9, 91, 0, 0, 0, 18, 10345, 13842), + (13845, 1178, 1178, 1178, 1178, 9, 91, 31669, 4, 900, 18, 10328, 13846), + (13872, 13872, 13872, 13872, 13872, 15, 95, 31694, 63, 60, 18, -1, 16002), + (13873, -1, -1, 13873, 13873, 7, 91, 0, 0, 0, 18, -1, 13874), + (13878, -1, -1, 13878, 13878, 9, 91, 0, 0, 0, 18, -1, 13879), + (13881, -1, -1, 13881, 13881, 9, 91, 0, 0, 0, 18, -1, 13882), + (13884, -1, -1, 735, 735, 10, 91, -1, 0, 0, 18, 10636, 13885), + (13889, -1, -1, 13889, 13889, 5, 91, 0, 0, 0, 18, -1, 13890), + (13894, -1, -1, 1021, 1021, 6, 91, -1, 0, 0, 18, 7685, 13895), + (13899, 6750, 6750, 6750, 6750, 15, 95, 32100, 60, 120, 18, 6750, 15294), + (13905, -1, -1, 13905, 13905, 10, 91, -1, 0, 0, 18, -1, 13906), + (13908, -1, -1, 13908, 13908, 10, 91, -1, 0, 0, 18, -1, 13909), + (13911, -1, -1, 13911, 13911, 12, 91, -1, 0, 0, 18, -1, 13912), + (13914, 4849, 4849, 4849, 4849, 12, 91, 32103, 7, 1800, 18, 7110, 13915), + (13917, -1, -1, 13917, 13917, 9, 91, -1, 0, 0, 18, -1, 13918), + (13920, 6333, 6333, 6333, 6333, 15, 91, 32140, 3, 600, 18, 7266, 16032), + (13921, -1, -1, 98, 98, 12, 91, -1, 0, 0, 18, 11063, 13922), + (13924, -1, -1, 98, 738, 12, 91, -1, 0, 0, 18, 7600, 13925), + (13927, -1, -1, 10370, 10370, 10, 91, -1, 0, 0, 18, 10372, 13928), + (13930, -1, -1, 1592, 1592, 12, 91, -1, 0, 0, 18, 12536, 13931), + (13933, -1, -1, 8263, 8263, 5, 91, -1, 0, 0, 18, 8360, 13934), + (13943, -1, -1, 8268, 8268, 5, 91, -1, 0, 0, 18, 8370, 13944), + (13953, -1, -1, 8273, 8273, 5, 91, -1, 0, 0, 18, 8380, 13954), + (13963, -1, -1, 8278, 8278, 5, 91, -1, 0, 0, 18, 8390, 13964), + (13973, -1, -1, 8283, 8283, 5, 91, -1, 0, 0, 18, 8400, 13974), + (13983, -1, -1, 8288, 8288, 5, 91, -1, 0, 0, 18, 8410, 13984), + (13993, -1, -1, 8293, 8293, 5, 91, -1, 0, 0, 18, 8420, 13994), + (14003, 6492, 6492, 6492, 6492, 12, 91, 32151, 52, 720, 18, 10681, 14004), + (14006, 10711, 10711, 10711, 10711, 15, 91, 32157, 75, 1200, 18, 10713, 14007), + (14009, 13202, 13202, 13202, 13202, 6, 91, 32160, 98, 20, 18, 13202, -1), + (14010, 14010, 14010, 14010, 14010, 15, 95, 32161, 97, 20, 18, -1, -1), + (14011, -1, -1, 14011, 14011, 5, 91, -1, 0, 0, 18, -1, 14012), + (14016, 10354, 10354, 10354, 10354, 15, 95, 32162, 39, 4320, 18, 10354, 14647), + (14017, -1, -1, 14017, 14017, 0, 90, -1, 0, 0, 18, -1, -1), + (14018, -1, -1, 14018, 14018, 0, 91, -1, 0, 0, 18, -1, -1), + (14019, 14019, 14019, 14019, 14019, 12, 91, 32177, 14, 900, 18, -1, 14020), + (14026, -1, -1, 14026, 14026, 12, 91, -1, 0, 0, 18, -1, 14027), + (14029, -1, -1, 14029, 14029, 12, 91, -1, 0, 0, 18, -1, 14030), + (14032, -1, -1, 14032, 14032, 15, 95, -1, 0, 0, 18, -1, -1), + (14037, -1, -1, 14037, 14037, 9, 91, 0, 0, 0, 18, -1, 14038), + (14040, -1, -1, 14040, 14040, 9, 91, 0, 0, 0, 18, -1, 14041), + (14043, -1, -1, 1313, 1313, 12, 91, -1, 0, 0, 18, 12581, 14044), + (14046, -1, -1, 14046, 14046, 5, 91, -1, 0, 0, 18, -1, 14047), + (14051, 14051, 14051, 14051, 14051, 12, 95, 32300, 62, 8, 18, -1, 15774), + (14052, 14052, 14052, 14052, 14052, 21, 95, 32301, 13, 1440, 18, -1, 14793), + (14053, 10912, 10912, 10912, 10912, 9, 91, 32303, 69, 1800, 18, 10914, 14054), + (14054, 10912, 10912, 10912, 10912, 12, 93, 32304, 69, 1800, 18, 14053, 14055), + (14055, 10912, 10912, 10912, 10912, 15, 95, 32305, 69, 1800, 18, 14054, -1), + (14056, -1, -1, 14056, 14056, 9, 91, -1, 0, 0, 18, -1, 14057), + (14059, -1, -1, 14059, 14059, 9, 91, -1, 0, 0, 18, -1, 14060), + (14062, -1, -1, 14062, 14062, 9, 91, -1, 0, 0, 18, -1, 14063), + (14065, -1, -1, 14065, 14065, 9, 91, 0, 0, 0, 18, -1, 14066), + (14068, -1, -1, 14068, 14068, 9, 91, 0, 0, 0, 18, -1, 14069), + (14071, 14071, 14071, 14071, 14071, 9, 91, 32307, 12, 600, 18, -1, 14072), + (14076, -1, -1, 14076, 14076, 9, 91, -1, 0, 0, 18, -1, 14077), + (14080, 14080, 14080, 14080, 14080, 9, 95, 32312, 13, 900, 18, -1, -1), + (14081, 14081, 14081, 14081, 14081, 9, 95, 32313, 14, 120, 18, -1, 17240), + (14082, -1, -1, 13101, 13101, 9, 91, 0, 0, 0, 18, 13103, 14083), + (14085, -1, -1, 14085, 14085, 9, 91, -1, 0, 0, 18, -1, 14086), + (14088, -1, -1, 14088, 14088, 9, 91, -1, 0, 0, 18, -1, 14089), + (14091, -1, -1, 14091, 14091, 9, 91, -1, 0, 0, 18, -1, 14092), + (14094, -1, -1, 10355, 10355, 9, 91, -1, 0, 0, 18, 10645, 14095), + (14097, -1, -1, 6395, 6395, 12, 91, -1, 0, 0, 18, 10707, 14098), + (14100, -1, -1, 14100, 14100, 15, 95, -1, 0, 0, 18, -1, -1), + (14101, -1, -1, 6355, 6355, 9, 91, -1, 0, 0, 18, 6360, 14263), + (14111, 6754, 6754, 6754, 6754, 12, 95, 32326, 41, 1200, 18, 10053, 14839), + (14112, 6370, 6370, 6370, 6370, 9, 91, 32329, 7, 600, 18, 7352, 14113), + (14115, -1, -1, 14115, 14115, 12, 91, -1, 0, 0, 18, -1, 14116), + (14129, -1, -1, 14129, 14129, 12, 91, -1, 0, 0, 18, -1, 14130), + (14130, -1, -1, 14129, 14129, 15, 93, -1, 0, 0, 18, 14129, 14131), + (14132, -1, -1, 7751, 7751, 7, 91, -1, 0, 0, 18, 7753, 14133), + (14135, -1, -1, 14135, 14135, 12, 91, -1, 0, 0, 18, -1, 14136), + (14138, -1, -1, 12615, 12615, 18, 95, -1, 0, 0, 18, 12617, 15499), + (14139, 14139, 14139, 14139, 14139, 15, 95, 32328, 60, 60, 18, -1, -1), + (14140, -1, -1, 12607, 12607, 15, 95, 0, 0, 0, 18, 12607, 15631), + (14141, -1, -1, 14141, 14141, 9, 91, -1, 0, 0, 18, -1, 14142), + (14144, -1, -1, 14144, 14144, 7, 91, -1, 0, 0, 18, -1, 14145), + (14148, -1, -1, 14148, 14148, 9, 91, 0, 0, 0, 18, -1, 14149), + (14151, -1, -1, 14151, 14151, 9, 91, 0, 0, 0, 18, -1, 14152), + (14154, -1, -1, 10657, 10657, 12, 91, 0, 0, 0, 18, 12681, 14155), + (14157, -1, -1, 14157, 14157, 9, 91, 0, 0, 0, 18, -1, 14158), + (14160, -1, -1, 14160, 14160, 9, 91, 0, 0, 0, 18, -1, 14161), + (14163, -1, -1, 14163, 14163, 9, 91, 0, 0, 0, 18, -1, 14164), + (14166, -1, -1, 14166, 14166, 9, 91, 0, 0, 0, 18, -1, 14167), + (14169, -1, -1, 14169, 14169, 7, 91, -1, 0, 0, 18, -1, 14170), + (14173, -1, -1, 12710, 12710, 9, 91, -1, 0, 0, 18, 12712, 14174), + (14176, -1, -1, 13204, 13204, 9, 91, -1, 0, 0, 18, 13206, 14177), + (14179, -1, -1, 14179, 14179, 9, 95, -1, 0, 0, 18, -1, -1), + (14180, -1, -1, 14180, 14180, 9, 95, -1, 0, 0, 18, -1, -1), + (14181, -1, -1, 14181, 14181, 9, 91, -1, 0, 0, 18, -1, 14182), + (14186, -1, -1, 14186, 14186, 9, 91, -1, 0, 0, 18, -1, 14187), + (14189, 5017, 5017, 5017, 5017, 9, 91, 32332, 8, 600, 18, 10158, 14190), + (14192, 14192, 14192, 14192, 14192, 15, 95, 32335, 36, 12, 18, -1, 15525), + (14196, -1, -1, 6935, 6935, 9, 91, -1, 0, 0, 18, 6904, 14197), + (14199, -1, -1, 6908, 6908, 12, 95, -1, 0, 0, 18, 6910, 15560), + (14200, -1, -1, 14200, 14200, 9, 91, 32336, 0, 0, 18, -1, 14201), + (14203, -1, -1, 14203, 14203, 12, 91, -1, 0, 0, 18, -1, 14204), + (14206, 14206, 14206, 14206, 14206, 12, 95, 32339, 41, 600, 18, -1, 15324), + (14207, 14207, 14207, 14207, 14207, 12, 95, 32340, 39, 180, 18, -1, -1), + (14208, 14208, 14208, 14208, 14208, 12, 95, 32341, 17, 180, 18, -1, 14568), + (14209, 14209, 14209, 14209, 14209, 12, 95, 32342, 22, 3, 18, -1, -1), + (14210, -1, -1, 10358, 10358, 12, 91, -1, 0, 0, 18, 10360, 14211), + (14213, -1, -1, 14213, 14213, 11, 91, -1, 0, 0, 18, -1, 14214), + (14218, -1, -1, 962, 962, 9, 91, -1, 0, 0, 18, 10363, 14219), + (14221, 1383, 1383, 1383, 1383, 18, 95, 32345, 6, 300, 18, 6487, 14581), + (14222, 146, 146, 146, 146, 15, 95, 32346, 2, 180, 18, 13258, 14977), + (14223, -1, -1, 13010, 13010, 12, 95, 0, 0, 0, 18, 13012, 16205), + (14224, 14224, -1, 14224, 14224, 9, 91, 345, 61, 5, 18, -1, 15860), + (14225, -1, -1, 14225, 14225, 9, 91, -1, 0, 0, 18, -1, 14226), + (14229, 14229, 14229, 14229, 14229, 12, 100, 37168, 42, 600, 19, -1, -1), + (14231, 14231, 14231, 14231, 14231, 12, 95, 32347, 91, 6, 18, -1, 16207), + (14232, 14232, -1, 14232, 14232, 12, 95, 32348, 92, 6, 18, -1, 14674), + (14233, 14233, 14233, 14233, 14233, 15, 95, 32349, 93, 30, 18, -1, 15621), + (14234, 14234, 14234, 14234, 14234, 9, 91, 32350, 94, 1800, 18, -1, 14235), + (14237, 12638, 12638, 12638, 12638, 9, 91, 23581, 68, 10, 18, -1, -1), + (14238, -1, -1, 12968, 12968, 9, 91, 0, 0, 0, 18, 12970, 14239), + (14241, -1, -1, 14241, 14241, 9, 91, -1, 0, 0, 18, -1, 14242), + (14244, -1, -1, 14244, 14244, 9, 91, -1, 0, 0, 18, -1, 14245), + (14249, -1, -1, 14249, 14249, 9, 91, -1, 0, 0, 18, -1, 14250), + (14254, -1, -1, 14254, 14254, 11, 91, -1, 0, 0, 18, -1, 14255), + (14256, 6561, 6561, 6561, 6561, 9, 91, 32353, 32, 30, 18, 10420, 14257), + (14259, -1, -1, 14259, 14259, 11, 91, -1, 0, 0, 18, -1, 14260), + (14262, 14262, 14262, 14262, 14262, 15, 95, 32357, 95, 180, 18, -1, -1), + (14264, 14264, 14264, 14264, 14264, 12, 95, 32358, 97, 120, 18, -1, 14600), + (14265, 14265, 14265, 14265, 14265, 15, 95, 32359, 68, 30, 18, -1, -1), + (14272, 6218, 6218, 6218, 14272, 12, 95, 32369, 0, 1, 18, 7488, 17381), + (14273, 723, 723, 723, 723, 12, 95, 32370, 6, 30, 18, 10300, 14869), + (14274, 6971, 6971, 6971, 6971, 9, 91, 32371, 41, 600, 18, 10290, 17383), + (14275, -1, -1, 14275, 14275, 7, 91, -1, 0, 0, 18, -1, 14276), + (14278, -1, -1, 14278, 14278, 12, 95, 0, 0, 0, 18, 6990, 16248), + (14279, -1, -1, 1287, 1287, 11, 95, -1, 0, 0, 18, 12815, 16529), + (14280, 4890, -1, 4890, 4890, 12, 95, 32373, 3, 8640, 18, 5872, 14776), + (14281, 14281, 14281, 14281, 14281, 12, 95, 32375, 39, 15, 18, -1, -1), + (14282, 14282, 14282, 14282, 14282, 9, 91, 32374, 39, 7, 18, -1, -1), + (14283, -1, -1, 14283, 14283, 7, 91, -1, 0, 0, 18, -1, 14284), + (14286, -1, -1, 14286, 14286, 9, 91, -1, 0, 0, 18, -1, 14287), + (14289, -1, -1, 14289, 14289, 9, 91, -1, 0, 0, 18, -1, 14290), + (14292, -1, -1, 14292, 14292, 9, 91, -1, 0, 0, 18, -1, 14293), + (14295, -1, -1, 14295, 14295, 9, 95, -1, 0, 0, 18, -1, 14296), + (14301, -1, -1, 14301, 14301, 9, 91, -1, 0, 0, 18, -1, 14302), + (14304, -1, -1, 14304, 14304, 9, 91, -1, 0, 0, 18, -1, 14305), + (14307, 14307, 14307, 14307, 14307, 12, 95, 32376, 92, 1200, 18, -1, 14743), + (14308, -1, -1, 14308, 14308, 9, 91, -1, 0, 0, 18, -1, 14309), + (14311, -1, -1, 14311, 14311, 9, 91, -1, 0, 0, 18, -1, 14312), + (14314, -1, -1, 7715, 7715, 7, 91, -1, 0, 0, 18, 7717, 14315), + (14318, -1, -1, 14318, 14318, 9, 91, -1, 0, 0, 18, -1, 14319), + (14321, 14321, 14321, 14321, 14321, 12, 95, 32378, 92, 8, 18, -1, 14781), + (14322, 14322, 14322, 14322, 14322, 12, 95, 32379, 94, 2160, 18, -1, 14782), + (14323, 14323, 14323, 14323, 14323, 12, 95, 32380, 92, 150, 18, -1, -1), + (14324, 155, 155, 155, 155, 15, 95, 32381, 8, 60, 18, 7238, 15610), + (14328, -1, -1, 7822, 7822, 7, 91, -1, 0, 0, 18, 7826, 14329), + (14331, -1, -1, 14331, 14331, 9, 91, -1, 0, 0, 18, -1, 14332), + (14338, 1337, 1337, 1337, 1337, 12, 91, 32382, 13, 4320, 18, 6160, 14339), + (14341, -1, -1, 14341, 14341, 5, 91, -1, 0, 0, 18, -1, 14342), + (14346, 14346, 14346, 14346, 14346, 9, 91, 32385, 94, 12, 18, -1, 14347), + (14349, -1, -1, 1210, 1213, 12, 91, -1, 0, 0, 18, 12528, 14350), + (14352, 1274, 1274, 1274, 1274, 12, 91, 32391, 9, 540, 18, 12762, 14353), + (14355, 6815, 6815, 6815, 6815, 9, 91, 32394, 60, 600, 18, 12788, 14356), + (14358, 14358, -1, 14358, 14358, 15, 95, 32397, 98, 300, 18, -1, -1), + (14359, 14359, 14359, 14359, 14359, 15, 95, 32399, 93, 1200, 18, -1, -1), + (14360, 14360, 14360, 14360, 14360, 15, 95, 32400, 95, 1800, 18, -1, 16334), + (14361, -1, -1, 637, 637, 12, 91, -1, 0, 0, 18, 12555, 14362), + (14364, -1, -1, 14364, 14364, 9, 91, -1, 0, 0, 18, -1, 14365), + (14367, -1, -1, 14367, 14367, 0, 1, -1, 0, 0, 0, -1, 14368), + (14371, 14371, 14371, 14371, 14371, 0, 1, 32910, 0, 10, 0, -1, -1), + (14372, 13844, 13844, 13844, 13844, 6, 95, 31667, 47, 6, 18, -1, -1), + (14373, 14373, 14373, 14373, 14373, 0, 85, 33106, 87, 3600, 19, -1, -1), + (14374, 14374, 14374, 14374, 14374, 0, 86, 33107, 88, 28800, 19, -1, -1), + (14690, 14690, 14690, 14690, 14690, 15, 96, 37014, 45, 600, 19, -1, 17479), + (14729, 8342, 8342, 8342, 8342, 15, 100, 33909, 54, 240, 19, 8342, 17501), + (14730, 616, 616, 616, 616, 12, 96, 33910, 7, 900, 19, 10261, 14731), + (14733, 4909, 4909, 4909, 4909, 18, 100, 33913, 16, 1320, 19, 12957, 17147), + (14734, 7903, 7903, 7903, 7903, 12, 100, 33914, 60, 30, 19, 12976, 15853), + (14739, 1462, 1462, 1462, 1462, 18, 99, 33919, 5, 300, 19, 4902, 16054), + (14764, -1, -1, 10551, 10551, 12, 96, -1, 0, 0, 19, 10553, 14765), + (14991, 926, 926, 926, 926, 5, 85, 11071, 12, 1800, 17, 930, 14992), + (14992, 926, 926, 926, 926, 5, 86, 11072, 12, 1800, 17, 14991, 14993), + (15073, 15073, -1, 15073, 15073, 0, 1, 37668, 90, 60, 19, -1, -1), + (15074, -1, -1, 15074, 15074, 0, 1, -1, 0, 0, 19, -1, 15075), + (15096, 15096, 15096, 15096, 15096, 5, 96, 38151, 35, 30, 19, -1, 15097), + (15099, 15099, 15099, 15099, 15099, 12, 100, 37187, 15, 45, 19, -1, 16566), + (15100, -1, -1, 15100, 15100, 5, 96, -1, 0, 0, 19, -1, 15101), + (15105, -1, -1, 15105, 15105, 11, 96, -1, 0, 0, 19, -1, 15106), + (15108, -1, -1, 15108, 15108, 9, 98, -1, 0, 0, 19, -1, 15109), + (15111, 8300, 8300, 8300, 8300, 11, 97, 37189, 8, 900, 19, 8302, 15112), + (15113, -1, -1, 15113, 15113, 11, 96, -1, 0, 0, 19, -1, 15114), + (15119, 15119, 15119, 15119, 15119, 12, 100, 37194, 16, 1200, 19, -1, 15749), + (15120, -1, -1, 15120, 15120, 9, 96, -1, 0, 0, 19, -1, 15121), + (15123, -1, -1, 15123, 15123, 9, 96, -1, 0, 0, 19, -1, 15124), + (15126, -1, -1, 15126, 15126, 9, 96, -1, 0, 0, 19, -1, 15127), + (15129, 15129, 15129, 15129, 15129, 12, 100, 37196, 32, 180, 19, -1, 15736), + (15130, 15130, 15130, 15130, 15130, 12, 100, 37197, 32, 180, 19, -1, 15737), + (15131, 15131, 15131, 15131, 15131, 12, 100, 37198, 32, 180, 19, -1, 15738), + (15132, -1, -1, 15132, 15132, 9, 96, -1, 0, 0, 19, -1, 15133), + (15135, -1, -1, 15135, 15135, 9, 100, -1, 0, 0, 19, -1, -1), + (15136, 15136, 15136, 15136, 15136, 9, 96, 38001, 5, 120, 19, -1, 17241), + (15140, 13100, 13100, 13100, 13100, 11, 100, 38002, 86, 300, 19, 13100, -1), + (15141, -1, -1, 190, 190, 9, 96, -1, 0, 0, 19, 5040, 15142), + (15146, 15146, 15146, 15146, 15146, 13, 100, 38006, 95, 9, 19, -1, 15758), + (15147, 15147, 15147, 15147, 15147, 11, 96, 38007, 8, 1200, 19, -1, 15148), + (15150, -1, -1, 15150, 15150, 7, 96, -1, 0, 0, 19, -1, 15151), + (15153, -1, -1, 15153, 15153, 11, 100, -1, 0, 0, 19, -1, -1), + (15154, -1, -1, 15154, 15154, 9, 96, -1, 0, 0, 19, -1, -1), + (15155, -1, -1, 15155, 15155, 5, 96, -1, 0, 0, 19, -1, 15156), + (15158, -1, -1, 15158, 15158, 13, 100, -1, 0, 0, 19, -1, -1), + (15159, -1, -1, 15159, 15159, 7, 96, -1, 0, 0, 19, -1, 15160), + (15162, -1, -1, 15162, 15162, 7, 96, -1, 0, 0, 19, -1, 15163), + (15168, -1, -1, 15168, 15168, 9, 96, -1, 0, 0, 19, -1, 15169), + (15172, -1, -1, 210, 210, 12, 100, -1, 0, 0, 19, 7401, 16658), + (15173, 6639, 6639, 6639, 6639, 9, 100, 38012, 42, 300, 19, 6639, 15788), + (15174, -1, -1, 12582, 12582, 9, 96, -1, 0, 0, 19, 12584, 15175), + (15177, 15177, 15177, 15177, 15177, 9, 100, 38013, 94, 180, 19, -1, -1), + (15179, -1, -1, 15179, 15179, 7, 96, -1, 0, 0, 19, -1, 15180), + (15182, -1, -1, 7757, 7757, 5, 96, -1, 0, 0, 19, 12589, 15183), + (15188, -1, -1, 1528, 4819, 5, 96, -1, 0, 0, 19, 4823, 15189), + (15193, 15193, 15193, 15193, 15193, 15, 100, 38016, 92, 600, 19, -1, -1), + (15194, -1, -1, 15194, 15194, 9, 100, -1, 0, 0, 19, -1, -1), + (15200, 15200, 15200, 15200, 15200, 9, 96, 38304, 32, 1080, 19, -1, 15201), + (15203, 15203, 15203, 15203, 15203, 15, 100, 38307, 34, 480, 19, -1, -1), + (15204, -1, -1, 15204, 15204, 9, 96, -1, 0, 0, 19, -1, 15205), + (15207, -1, -1, 15207, 15207, 9, 96, -1, 0, 0, 19, -1, 15208), + (15210, 15210, 15210, 15210, 15210, 9, 96, 38308, 12, 120, 19, -1, 15211), + (15213, 15213, 15213, 15213, 15213, 15, 100, 38312, 42, 1080, 19, -1, 17509), + (15214, 15214, 15214, 15214, 15214, 9, 96, 38313, 43, 1800, 19, -1, 15215), + (15217, -1, -1, 15217, 15217, 11, 96, -1, 0, 0, 19, -1, 15218), + (15220, -1, -1, 15220, 15220, 9, 100, -1, 0, 0, 19, -1, 15221), + (15223, -1, -1, 15223, 15223, 9, 100, -1, 0, 0, 19, -1, 15224), + (15226, -1, -1, 15226, 15226, 9, 100, -1, 0, 0, 19, -1, 15227), + (15229, -1, -1, 15229, 15229, 9, 100, -1, 0, 0, 19, -1, 15230), + (15232, -1, -1, 15232, 15232, 9, 96, -1, 0, 0, 19, -1, 15233), + (15235, 785, 785, 785, 785, 9, 96, 38325, 8, 900, 19, 789, 15236), + (15238, -1, -1, 5276, 5276, 11, 96, -1, 0, 0, 19, 5278, 15239), + (15241, 168, 168, 168, 168, 11, 96, 38329, 4, 10, 19, 170, 15242), + (15244, 171, 171, 171, 171, 11, 96, 38333, 4, 10, 19, 173, 15245), + (15247, 174, 174, 174, 174, 11, 96, 38336, 4, 10, 19, 176, 15248), + (15250, 177, 177, 177, 177, 11, 96, 38340, 4, 10, 19, 179, 15251), + (15253, -1, -1, 15253, 15253, 4, 96, -1, 0, 0, 19, -1, 15254), + (15258, -1, -1, 7743, 7743, 11, 100, -1, 0, 0, 19, 10718, -1), + (15270, -1, -1, 12430, 12430, 15, 100, -1, 0, 0, 19, 12878, -1), + (15280, -1, -1, 10722, 10722, 9, 96, -1, 0, 0, 19, 10726, 15281), + (15283, -1, -1, 15283, 15283, 5, 96, -1, 0, 0, 19, -1, 15284), + (15288, -1, -1, 15288, 15288, 7, 96, -1, 0, 0, 19, -1, 15289), + (15295, -1, -1, 15295, 15295, 7, 96, -1, 0, 0, 19, -1, 15296), + (15298, 10806, 10806, 10806, 10806, 9, 96, 38025, 71, 540, 19, 10808, 15299), + (15301, 10809, 10809, 10809, 10809, 9, 96, 38028, 71, 540, 19, 10811, 15302), + (15304, 15304, 15304, 15304, 15304, 12, 100, 38031, 91, 360, 19, -1, -1), + (15314, 0, 0, 6481, 6481, 11, 96, -1, 0, 0, 19, 6483, 15315), + (15317, -1, -1, 15317, 15317, 9, 96, -1, 0, 0, 19, 5012, 15318), + (15320, -1, -1, 7940, 7940, 11, 100, -1, 0, 0, 19, 6486, -1), + (15321, 746, 746, 746, 746, 9, 96, 38033, 10, 2160, 19, 10024, 15322), + (15328, -1, -1, 7948, 7948, 9, 96, -1, 0, 0, 19, 10037, 15329), + (15338, 15338, 15338, 15338, 15338, 9, 96, 38054, 30, 600, 19, -1, 15339), + (15341, 136, -1, 136, 136, 7, 100, 38057, 7, 1800, 19, 136, -1), + (15342, -1, -1, 15341, 15341, 7, 100, -1, 0, 0, 19, -1, -1), + (15343, 15343, 15343, 15343, 15343, 12, 100, 38058, 21, 300, 19, -1, -1), + (15344, -1, -1, 2400, 2400, 12, 97, -1, 0, 0, 19, 2402, 15345), + (15348, -1, -1, 13001, 13001, 7, 96, -1, 0, 0, 19, 13003, 15349), + (15356, -1, -1, 15356, 15356, 15, 100, -1, 0, 0, 19, -1, 15851), + (15357, 15357, 15357, 15357, 15357, 9, 96, 38062, 95, 2, 19, -1, -1), + (15358, -1, -1, 15358, 15358, 12, 100, -1, 0, 0, 19, -1, -1), + (15359, -1, -1, 474, 474, 5, 96, -1, 0, 0, 19, 476, 15360), + (15362, 15362, 15362, 15362, 15362, 15, 100, 38063, 89, 20, 19, -1, -1), + (15363, -1, -1, 10951, 10951, 12, 97, -1, 0, 0, 19, 10953, 15364), + (15371, -1, -1, 15371, 15371, 7, 96, -1, 0, 0, 19, -1, 15372), + (15374, -1, -1, 15374, 15374, 9, 96, -1, 0, 0, 19, -1, 15375), + (15377, 15377, 15377, 15377, 15377, 15, 100, 38070, 75, 420, 19, -1, 15852), + (15383, -1, -1, 15383, 15383, 9, 96, -1, 0, 0, 19, -1, 15384), + (15389, -1, -1, 15389, 15389, 9, 96, -1, 0, 0, 19, -1, 15390), + (15396, -1, -1, 141, 12863, 12, 100, -1, 0, 0, 19, 12863, -1), + (15397, -1, -1, 6346, 6346, 9, 96, -1, 0, 0, 19, 7617, 15398), + (15403, -1, -1, 15403, 15403, 7, 96, -1, 0, 0, 19, -1, 15404), + (15406, -1, -1, 15406, 15406, 7, 96, -1, 0, 0, 19, -1, 15407), + (15414, -1, -1, 15414, 15414, 9, 100, -1, 0, 0, 19, -1, -1), + (15421, -1, -1, 6538, 6538, 12, 100, -1, 0, 0, 19, 7478, -1), + (15422, -1, -1, 83, 83, 12, 100, -1, 0, 0, 19, 1218, -1), + (15423, 15423, 15423, 15423, 15423, 15, 100, 38078, 52, 180, 19, -1, 15884), + (15424, 15424, 15424, 15424, 15424, 12, 100, 38079, 78, 1200, 19, -1, -1), + (15425, 15425, 15425, 15425, 15425, 15, 100, 38077, 79, 6, 19, -1, 15903), + (15426, -1, -1, 810, 810, 5, 96, -1, 0, 0, 19, 4828, 15427), + (15429, -1, -1, 15429, 15429, 7, 96, -1, 0, 0, 19, -1, 15430), + (15432, -1, -1, 15432, 15432, 7, 96, -1, 0, 0, 19, -1, 15433), + (15438, -1, -1, 15438, 15438, 9, 96, -1, 0, 0, 19, -1, 15439), + (15441, -1, -1, 815, 815, 10, 96, -1, 0, 0, 19, 7636, 15442), + (15444, -1, -1, 15444, 15444, 9, 96, 38080, 0, 0, 19, -1, 15445), + (15447, 15447, 15447, 15447, 15447, 9, 96, 38083, 78, 180, 19, -1, 15448), + (15450, -1, -1, 15450, 15450, 9, 96, -1, 0, 0, 19, -1, 15451), + (15453, -1, -1, 15453, 15453, 9, 96, -1, 0, 0, 19, -1, 15454), + (15456, -1, -1, 15456, 15456, 9, 96, -1, 0, 0, 19, -1, 15457), + (15459, 1245, 1245, 1245, 1245, 9, 96, 38404, 8, 2160, 19, 1247, 15460), + (15462, 8039, 8039, 8039, 38407, 15, 100, 38407, 58, 7, 19, 8039, 17167), + (15466, -1, -1, 10561, 10561, 9, 96, -1, 0, 0, 19, 10563, 15467), + (15469, -1, -1, 10558, 10558, 9, 96, -1, 0, 0, 19, 10560, 15470), + (15472, -1, -1, 8035, 8035, 9, 96, -1, 0, 0, 19, 10287, 15473), + (15475, 15475, 15475, 15475, 15475, 11, 96, 38408, 41, 600, 20, -1, 15476), + (15478, -1, -1, 15478, 15478, 9, 96, -1, 0, 0, 19, -1, 15479), + (15481, 15481, 15481, 15481, 15481, 18, 100, 38603, 53, 1080, 19, -1, -1), + (15482, 15482, 15482, 15482, 15482, 11, 96, 38414, 42, 1800, 19, -1, 15483), + (15485, -1, -1, 15485, 15485, 18, 100, -1, 0, 0, 19, -1, -1), + (15486, 15486, 15486, 15486, 15486, 12, 96, 38418, 43, 600, 19, -1, 15487), + (15489, 15489, 15489, 15489, 15489, 18, 100, 38421, 52, 10, 19, -1, -1), + (15490, 15490, 15490, 15490, 15490, 11, 96, 38422, 44, 10, 19, -1, 15491), + (15493, -1, -1, 15493, 15493, 9, 96, -1, 0, 0, 19, -1, 15494), + (15496, 15496, 15496, 15496, 15496, 11, 96, 38425, 46, 1800, 19, -1, 15497), + (15502, -1, -1, 15502, 15502, 9, 96, -1, 0, 0, 19, -1, 15503), + (15509, -1, -1, 15509, 15509, 9, 96, -1, 0, 0, 19, -1, 15510), + (15512, -1, -1, 15512, 15512, 9, 96, 38086, 0, 0, 19, -1, 15513), + (15515, 15515, 15515, 15515, 15515, 12, 100, 38089, 11, 90, 19, -1, 17417), + (15516, -1, -1, 15516, 15516, 9, 100, -1, 0, 0, 19, -1, 15960), + (15517, -1, -1, 15517, 15517, 7, 96, -1, 0, 0, 19, -1, 15518), + (15521, 15521, 15521, 15521, 15521, 12, 96, 38090, 42, 60, 19, -1, -1), + (15526, -1, -1, 12716, 12716, 7, 96, -1, 0, 0, 19, 12718, 15527), + (15529, -1, -1, 695, 695, 4, 96, -1, 0, 0, 19, 699, 15530), + (15540, -1, -1, 15540, 15540, 7, 96, -1, 0, 0, 19, -1, 15541), + (15543, -1, -1, 15543, 15543, 7, 96, -1, 0, 0, 19, -1, 15544), + (15546, -1, -1, 15546, 15546, 7, 96, -1, 0, 0, 19, -1, 15547), + (15549, -1, -1, 15549, 15549, 7, 96, -1, 0, 0, 19, -1, 15550), + (15552, -1, -1, 6302, 6302, 5, 96, -1, 0, 0, 19, 11013, 15553), + (15555, -1, -1, 15555, 15555, 11, 96, -1, 0, 0, 19, -1, 15556), + (15558, 10400, 10400, 10400, 10400, 9, 100, 38104, 62, 900, 19, 10400, -1), + (15564, -1, -1, 15564, 15564, 9, 96, -1, 0, 0, 19, -1, 15565), + (15567, 15567, 15567, 15567, 15567, 12, 96, 38106, 11, 1200, 19, -1, 15568), + (15569, 15569, 15569, 15569, 15569, 12, 96, 38108, 13, 60, 19, -1, 15991), + (15570, 15570, 15570, 15570, 15570, 15, 100, 38109, 64, 600, 19, -1, 15992), + (15571, -1, -1, 15571, 15571, 7, 96, -1, 0, 0, 19, -1, 15572), + (15574, 15574, 15574, 15574, 15574, 9, 80, 38110, 73, 4, 15, -1, 15575), + (15575, 15574, 15574, 15574, 15574, 9, 85, 38111, 73, 4, 16, 15574, 15576), + (15576, 15574, 15574, 15574, 15574, 9, 90, 38112, 73, 4, 17, 15575, 15577), + (15577, 15574, 15574, 15574, 15574, 9, 95, 38113, 73, 4, 18, 15576, 15578), + (15579, -1, -1, 15579, 15579, 7, 96, -1, 0, 0, 19, -1, 15580), + (15582, 15582, 15582, 15582, 15582, 9, 96, 38115, 34, 600, 19, -1, 15583), + (15585, -1, -1, 634, 634, 11, 96, -1, 0, 0, 19, 10780, 15586), + (15588, 10701, 10701, 10701, 10701, 12, 96, 38121, 32, 360, 19, 12756, 15589), + (15591, -1, -1, 15591, 15591, 5, 96, -1, 0, 0, 19, -1, 15592), + (15594, 15594, 15594, 15594, 15594, 9, 96, 38197, 39, 30, 19, -1, 15595), + (15598, -1, -1, 15598, 15598, 12, 96, -1, 0, 0, 19, -1, 15599), + (15601, 15601, 15601, 15601, 15601, 12, 96, 38131, 34, 6, 19, -1, 16077), + (15602, -1, -1, 15602, 15602, 9, 96, -1, 0, 0, 19, -1, 15603), + (15605, 12866, 12866, 12866, 12866, 15, 96, 38132, 74, 1800, 19, 12866, -1), + (15606, -1, -1, 8069, 8069, 5, 96, -1, 0, 0, 19, 8071, 15607), + (15609, -1, -1, 15609, 15609, 15, 100, -1, 0, 0, 19, -1, -1), + (15611, 15611, 15611, 15611, 15611, 18, 100, 38136, 32, 900, 19, -1, 16078), + (15612, 15612, 15612, 15612, 15612, 12, 96, 38137, 36, 20, 19, -1, 15613), + (15615, 15615, 15615, 15615, 15615, 12, 96, 38140, 44, 20, 19, -1, 15616), + (15619, 15619, 15619, 15619, 15619, 15, 100, 37188, 32, 600, 19, -1, -1), + (15622, -1, -1, 15622, 15622, 7, 96, -1, 0, 0, 19, -1, 15623), + (15625, -1, -1, 15625, 15625, 9, 96, -1, 0, 0, 19, -1, 15626), + (15628, 5022, 5022, 5022, 5022, 9, 96, 38176, 5, 600, 19, 6040, 15629), + (15632, -1, -1, 7005, 7005, 5, 96, -1, 0, 0, 19, 7007, 15633), + (15634, -1, -1, 15634, 15634, 3, 80, -1, 0, 0, 19, -1, 15635), + (15635, -1, -1, 15634, 15634, 5, 85, -1, 0, 0, 19, 15634, 15636), + (15639, 15639, 15639, 15639, 15639, 12, 96, 38183, 56, 60, 19, -1, -1), + (15640, 15640, 15640, 15640, 15640, 12, 100, 38184, 43, 60, 19, -1, -1), + (15642, 15642, 15642, 15642, 15642, 18, 100, 38187, 13, 1440, 19, -1, -1), + (15643, 15643, 15643, 15643, 15643, 9, 96, 38188, 75, 600, 19, -1, 15644), + (15646, 15646, 15646, 15646, 15646, 15, 100, 38194, 74, 60, 19, -1, 17255), + (15648, -1, -1, 15648, 15648, 9, 96, -1, 0, 0, 19, -1, 15649), + (15694, -1, -1, 8215, 8215, 5, 96, -1, 0, 0, 20, 12563, 15695), + (15714, -1, -1, 5263, 5263, 12, 96, -1, 0, 0, 20, 12468, 15715), + (15719, -1, -1, 1287, 1287, 11, 96, -1, 0, 0, 20, 13240, 15720), + (15746, -1, -1, 7033, 7033, 12, 96, 0, 0, 0, 20, 7035, 15747), + (15768, -1, -1, 15768, 15768, 7, 96, -1, 0, 0, 20, -1, 15769), + (15771, 15771, -1, 15771, 15771, 1, 55, 38274, 0, 3, 20, -1, -1), + (15772, -1, -1, 8232, 8232, 8, 100, -1, 0, 0, 20, 8261, -1), + (15773, -1, -1, 8040, 8040, 8, 100, -1, 0, 0, 20, 8313, -1), + (15775, 6508, 6508, 6508, 6508, 9, 96, 38276, 38, 600, 20, 10080, 15776), + (15778, -1, -1, 589, 589, 12, 96, -1, 0, 0, 20, 13106, 15779), + (15782, 7755, 7755, 7755, 7755, 12, 96, 38280, 53, 900, 20, 7755, 16187), + (15798, 15798, 15798, 15798, 15798, 9, 100, 38297, 34, 18, 20, -1, 15799), + (15819, 15819, 15819, 15819, 15819, 18, 100, 40807, 18, 900, 20, -1, -1), + (15833, -1, -1, 15833, 15833, 9, 96, 0, 0, 0, 20, -1, 15834), + (15836, -1, -1, 15836, 15836, 9, 100, 0, 0, 0, 20, -1, 15837), + (15839, 10450, 10450, 10450, 10450, 7, 96, 40817, 63, 900, 20, 10670, 15840), + (15855, 13004, 13004, 13004, 13004, 9, 96, 40832, 78, 300, 20, 13004, -1), + (15891, -1, -1, 11078, 11078, 9, 96, 0, 0, 0, 20, 11078, 15892), + (15893, -1, -1, 11079, 11079, 9, 96, 0, 0, 0, 20, 11079, 15894), + (15895, -1, -1, 11077, 11077, 9, 96, 0, 0, 0, 20, 11077, 15896), + (15904, 15904, 15904, 15904, 15904, 7, 66, 40874, 54, 600, 20, -1, -1), + (15908, -1, -1, 15908, 15908, 3, 80, -1, 0, 0, 20, -1, 15909), + (15909, -1, -1, 15908, 15908, 5, 85, -1, 0, 0, 20, 15908, 15910), + (15910, -1, -1, 15908, 15908, 7, 90, -1, 0, 0, 20, 15909, 15911), + (15954, -1, -1, 10853, 10853, 5, 90, -1, 0, 0, 20, 10864, 15955), + (15961, -1, -1, 12737, 12737, 9, 96, 0, 0, 0, 20, 12739, 15962), + (15988, 10333, 10333, 10333, 10333, 9, 96, 40894, 55, 120, 20, 12726, 15989), + (16016, 16016, 16016, 16016, 16016, 12, 100, 40919, 17, 12, 20, -1, -1), + (16062, -1, -1, 1572, 1572, 5, 96, -1, 0, 0, 20, 10556, 16063), + (16071, 16071, 16071, 16071, 16071, 15, 100, 40953, 46, 1800, 20, -1, 16072), + (16081, 16081, 16081, 16081, 16081, 15, 100, 40969, 55, 6, 20, -1, -1), + (16082, 16082, 16082, 16082, 16082, 3, 100, 40970, 53, 6, 20, -1, -1), + (16083, 16083, 16083, 16083, 16083, 3, 55, 40971, 46, 6, 20, -1, -1), + (16084, -1, -1, 16084, 16084, 9, 100, 0, 0, 0, 20, -1, 16085), + (16087, -1, -1, 16087, 16087, 5, 100, 0, 0, 6, 20, -1, 16088), + (16094, -1, -1, 477, 477, 2, 100, -1, 0, 0, 20, 6235, 16095), + (16096, 16096, 16096, 16096, 16096, 12, 100, 40972, 36, 6, 20, -1, -1), + (16097, 16097, 16097, 16097, 16097, 12, 100, 40973, 38, 600, 20, -1, 16098), + (16103, 16103, 16103, 16103, 16103, 0, 85, 41071, 35, 180, 16, -1, -1), + (16104, -1, -1, 16104, 16104, 5, 85, 0, 0, 0, 20, -1, -1), + (16105, 16105, 16105, 16105, 16105, 0, 85, 41086, 76, 30, 20, -1, -1), + (16106, 16106, 16106, 16106, 16106, 0, 85, 41087, 76, 30, 20, -1, -1), + (16107, 16107, 16107, 16107, 16107, 0, 85, 41088, 76, 30, 20, -1, -1), + (16108, 16108, 16108, 16108, 16108, 12, 100, 41090, 77, 120, 20, -1, -1), + (16109, -1, -1, 16109, 16109, 11, 96, -1, 0, 0, 20, -1, 16110), + (16113, 16113, 16113, 16113, 16113, 15, 100, 41096, 78, 60, 20, -1, -1), + (16114, -1, -1, 16114, 16114, 5, 96, -1, 0, 0, 20, -1, 16115), + (16117, -1, -1, 16117, 16117, 11, 96, -1, 0, 0, 20, -1, 16118), + (16120, -1, -1, 16120, 16120, 9, 105, -1, 0, 0, 21, -1, -1), + (16121, -1, -1, 6611, 6611, 6, 100, -1, 0, 0, 20, 10574, 16122), + (16124, -1, -1, 16124, 16124, 5, 96, -1, 0, 0, 20, -1, 16125), + (16128, -1, -1, 16128, 16128, 6, 96, -1, 0, 0, 20, -1, 16129), + (16131, -1, -1, 16131, 16131, 5, 96, -1, 0, 0, 20, -1, 16132), + (16137, -1, -1, 16137, 16137, 9, 100, -1, 0, 0, 20, -1, 16138), + (16140, -1, -1, 16140, 16140, 9, 100, -1, 0, 0, 20, -1, -1), + (16146, -1, -1, 16146, 16146, 11, 100, -1, 0, 0, 20, -1, 16147), + (16149, -1, -1, 16149, 16149, 9, 100, -1, 0, 0, 20, -1, 16150), + (16152, -1, -1, 16152, 16152, 11, 100, -1, 0, 0, 20, -1, 16153), + (16156, -1, -1, 16156, 16156, 12, 100, -1, 0, 0, 20, -1, 16157), + (16159, -1, -1, 16159, 16159, 15, 100, -1, 0, 0, 20, -1, -1), + (16160, 16160, 16160, 16160, 16160, 18, 100, 41110, 81, 900, 20, -1, -1), + (16162, 16162, 16162, 16162, 16162, 12, 100, 41112, 80, 180, 20, -1, -1), + (16163, 16163, 16163, 16163, 16163, 18, 100, 41113, 63, 180, 20, -1, 16695), + (16164, -1, -1, 6636, 6636, 9, 96, -1, 0, 0, 20, 12531, 16165), + (16170, -1, -1, 5248, 5248, 12, 96, -1, 0, 0, 20, 7358, 16171), + (16173, -1, -1, 5263, 5263, 9, 101, -1, 0, 0, 21, 12465, 16174), + (16176, -1, -1, 16176, 16176, 7, 100, -1, 0, 0, 20, -1, 16177), + (16179, -1, -1, 16179, 16179, 18, 100, 41122, 0, 0, 20, -1, -1), + (16180, -1, -1, 16180, 16180, 7, 96, -1, 0, 0, 20, -1, 16181), + (16185, 16185, 16185, 16185, 16185, 18, 100, 41124, 68, 600, 20, -1, 16729), + (16186, -1, -1, 16186, 16186, 12, 100, 41125, 0, 0, 20, -1, -1), + (16188, 16188, 16188, 16188, 16188, 12, 100, 41126, 58, 180, 20, -1, -1), + (16189, -1, -1, 10915, 10915, 9, 96, -1, 0, 0, 20, 10917, 16190), + (16192, -1, -1, 6641, 6641, 9, 96, -1, 0, 0, 20, 10077, 16193), + (16195, 16195, 16195, 16195, 16195, 15, 100, 41133, 59, 60, 20, -1, -1), + (16196, 16196, 16196, 16196, 16196, 15, 100, 41134, 60, 900, 20, -1, 16665), + (16197, 16197, 16197, 16197, 16197, 12, 96, 41136, 61, 900, 20, -1, 16198), + (16200, 16200, 16200, 16200, 16200, 9, 96, 41139, 63, 900, 20, -1, 16201), + (16203, 16203, 16203, 16203, 16203, 12, 96, 41143, 98, 120, 20, -1, 16204), + (16208, -1, -1, 16208, 16208, 5, 96, -1, 0, 0, 20, -1, 16209), + (16211, -1, -1, 16211, 16211, 7, 100, -1, 0, 0, 20, -1, 16212), + (16214, 10958, 10958, 10958, 16214, 18, 100, 41148, 62, 900, 20, 13000, -1), + (16215, 16215, 16215, 16215, 16215, 9, 96, 41150, 92, 300, 20, -1, 16216), + (16218, -1, -1, 16218, 16218, 7, 96, -1, 0, 0, 20, -1, 16219), + (16221, -1, -1, 16221, 16221, 9, 100, -1, 0, 0, 20, -1, 16223), + (16222, 16222, -1, 16222, 16222, 9, 100, 41153, 88, 30, 20, -1, -1), + (16225, -1, -1, 16225, 16225, 5, 96, -1, 0, 0, 20, -1, 16226), + (16230, -1, -1, 16230, 16230, 5, 96, -1, 0, 0, 20, -1, 16231), + (16235, -1, -1, 16235, 16235, 7, 96, -1, 0, 0, 20, -1, 16236), + (16238, -1, -1, 16238, 16238, 7, 96, -1, 0, 0, 20, -1, 16239), + (16246, 6983, 6983, 6983, 6983, 9, 96, 41157, 66, 720, 20, 6983, 16247), + (16249, -1, -1, 230, 230, 9, 100, -1, 0, 0, 20, 12677, -1), + (16250, 828, 828, 828, 828, 9, 96, 41159, 2, 3600, 20, 830, -1), + (16257, -1, -1, 16257, 16257, 11, 100, 0, 0, 0, 20, -1, 16258), + (16260, -1, -1, 16260, 16260, 11, 100, -1, 0, 0, 20, -1, 16261), + (16263, 16263, 16263, 16263, 16263, 11, 96, 41161, 95, 600, 20, -1, 16264), + (16266, -1, -1, 6560, 6560, 9, 96, -1, 0, 0, 20, 6277, -1), + (16267, -1, -1, 888, 888, 3, 96, -1, 0, 0, 20, 892, 16268), + (16272, -1, -1, 16272, 16272, 9, 96, -1, 0, 0, 20, -1, 16273), + (16276, -1, -1, 16276, 16276, 5, 96, -1, 0, 0, 20, -1, 16277), + (16287, -1, -1, 16287, 16287, 7, 96, -1, 0, 0, 20, -1, 16288), + (16296, 16296, 16296, 16296, 16296, 13, 100, 41168, 60, 30, 20, -1, -1), + (16297, -1, -1, 6337, 6337, 6, 96, -1, 0, 0, 20, 10155, 16298), + (16300, -1, -1, 16300, 16300, 9, 100, -1, 0, 0, 20, -1, 16301), + (16303, -1, -1, 12721, 12721, 9, 96, 0, 0, 0, 20, 12723, 16304), + (16306, -1, -1, 6340, 6340, 6, 96, -1, 0, 0, 20, 7453, -1), + (16310, 16310, 16310, 16310, 16310, 12, 100, 41169, 97, 600, 20, -1, -1), + (16317, -1, -1, 16317, 16317, 5, 100, -1, 0, 0, 20, -1, 16318), + (16324, 6607, 6607, 6607, 16324, 9, 96, 16491, 61, 600, 20, 6609, 16325), + (16327, -1, -1, 6362, 6362, 7, 96, 0, 0, 0, 20, 6366, 16328), + (16330, -1, -1, 16330, 16330, 9, 96, -1, 0, 0, 20, -1, 16331), + (16336, -1, -1, 16336, 16336, 7, 96, -1, 0, 0, 20, -1, 16337), + (16339, -1, -1, 16339, 16339, 7, 96, -1, 0, 0, 20, -1, 16340), + (16342, -1, -1, 16342, 16342, 7, 96, -1, 0, 0, 20, -1, 16343), + (16360, 16360, 16360, 16360, 16360, 9, 100, 41188, 91, 6, 20, -1, -1), + (16361, -1, -1, 9509, 9509, 7, 96, -1, 0, 0, 20, 9515, -1), + (16363, 16363, 16363, 16363, 16363, 12, 96, 41193, 89, 1800, 20, -1, 16364), + (16366, -1, -1, 16366, 16366, 12, 96, -1, 0, 0, 20, -1, 16367), + (16369, 16369, 16369, 16369, 16369, 15, 100, 41196, 98, 12, 20, -1, -1), + (16370, 16370, -1, 16370, 16370, 5, 100, 41197, 98, 12, 20, -1, -1), + (16371, -1, -1, 16371, 16371, 3, 96, -1, 0, 0, 20, -1, 16372), + (16380, -1, -1, 16380, 16380, 5, 96, -1, 0, 0, 20, -1, 16381), + (16386, -1, -1, 16386, 16386, 7, 96, -1, 0, 0, 20, -1, 16387), + (16392, -1, -1, 16392, 16392, 5, 96, -1, 0, 0, 20, -1, 16393), + (16395, 16395, 16395, 16395, 16395, 7, 100, 41305, 93, 10, 20, -1, -1), + (16396, -1, -1, 16396, 16396, 7, 96, -1, 0, 0, 20, -1, 16397), + (16402, -1, -1, 6112, 6112, 5, 96, -1, 0, 0, 20, 12967, 16403), + (16414, -1, -1, 1056, 1056, 5, 101, -1, 0, 0, 21, 7525, 16415), + (16419, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 8447, 16420), + (16420, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 16419, 16421), + (16421, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 16420, -1), + (16440, -1, -1, 6540, 6540, 10, 101, -1, 0, 0, 21, 12510, 16441), + (16475, -1, -1, 8201, 8201, 9, 101, -1, 0, 0, 21, 8203, 16476), + (16489, -1, -1, 1107, 1107, 9, 101, -1, 0, 0, 21, 12558, 16490), + (16536, -1, -1, 16536, 16536, 5, 101, -1, 0, 0, 21, -1, 16537), + (16604, -1, -1, 849, 849, 11, 105, -1, 0, 0, 21, 10622, -1), + (16644, -1, -1, 16644, 16644, 11, 101, -1, 0, 0, 21, -1, 16645), + (16666, -1, -1, 16666, 16666, 9, 101, -1, 0, 0, 21, -1, 16667), + (16716, 6764, 6764, 6764, 6764, 12, 105, 41308, 52, 600, 21, 10057, -1), + (16730, -1, -1, 1608, 1608, 13, 101, -1, 0, 0, 21, 10069, 16731), + (16745, -1, -1, 16745, 16745, 9, 101, -1, 0, 0, 21, -1, 16746), + (16883, 1119, 1119, 1119, 1119, 12, 101, 41594, 8, 900, 21, 10299, 16884), + (16887, -1, -1, 729, 729, 11, 101, -1, 0, 0, 21, 10307, 16888), + (16890, -1, -1, 724, 724, 15, 101, -1, 0, 0, 21, 7493, 16891), + (17004, -1, -1, 556, 556, 7, 101, -1, 0, 0, 21, 1567, 17005), + (17030, 4857, 4857, 4857, 4857, 15, 101, 41660, 7, 600, 21, 5769, 17031), + (17131, 12785, 12785, 12785, 12785, 15, 105, 41736, 80, 30, 21, 12785, -1), + (17199, 17199, 17199, 17199, 17199, 100, 51, 41819, 31, 2, 21, -1, -1), + (17206, -1, -1, 10588, 10588, 7, 101, 0, 0, 0, 21, 10592, 17207), + (17209, -1, -1, 17209, 17209, 9, 101, -1, 0, 0, 21, -1, 17210), + (17212, -1, -1, 17212, 17212, 12, 101, -1, 0, 0, 21, -1, 17213), + (17215, -1, -1, 17215, 17215, 12, 101, -1, 0, 0, 21, -1, 17216), + (17218, -1, -1, 17218, 17218, 9, 101, -1, 0, 0, 21, -1, 17219), + (17229, -1, -1, 17229, 17229, 9, 101, -1, 0, 0, 21, -1, 17230), + (17235, -1, -1, 17235, 17235, 15, 101, -1, 0, 0, 21, -1, 17236), + (17238, 17238, 17238, 17238, 17238, 24, 105, 41808, 10, 900, 21, -1, -1), + (17239, -1, -1, 6489, 6489, 12, 101, -1, 0, 0, 21, 6491, -1), + (17242, -1, -1, 17242, 17242, 12, 101, -1, 0, 0, 21, -1, 17243), + (17245, -1, -1, 17245, 17245, 12, 101, -1, 0, 0, 21, -1, 17246), + (17248, 17248, 17248, 17248, 17248, 24, 105, 41811, 93, 1080, 21, -1, -1), + (17249, -1, -1, 17249, 17249, 12, 101, -1, 0, 0, 21, -1, 17250), + (17252, -1, -1, 17252, 17252, 9, 101, -1, 0, 0, 21, -1, 17253), + (17256, 17256, 17256, 17256, 17256, 21, 105, 41815, 93, 360, 21, -1, -1), + (17257, 17257, 17257, 17257, 17257, 21, 105, 41816, 98, 300, 21, -1, -1), + (17258, -1, -1, 17258, 17258, 15, 101, 0, 0, 0, 21, -1, 17259), + (17267, -1, -1, 17267, 17267, 9, 101, -1, 0, 0, 21, -1, 17268), + (17273, 17273, 17273, 17273, 17273, 15, 101, 41830, 98, 720, 21, -1, -1), + (17276, 1569, 1569, 1569, 1569, 9, 101, 41831, 5, 1800, 21, 10161, 17277), + (17280, 17280, 17280, 17280, 17280, 21, 105, 41834, 97, 720, 21, -1, -1), + (17281, -1, -1, 17281, 17281, 15, 105, -1, 0, 0, 21, -1, -1), + (17288, -1, -1, 17288, 17288, 9, 105, -1, 0, 0, 21, 7317, -1), + (17289, -1, -1, 17289, 17289, 7, 101, -1, 0, 0, 21, -1, 17290), + (17295, -1, -1, 692, 692, 12, 101, -1, 0, 0, 21, 12769, 17296), + (17298, 749, 749, 749, 749, 15, 105, 41837, 11, 1800, 21, 1208, -1), + (17307, -1, -1, 17307, 17307, 9, 101, -1, 0, 0, 21, -1, 17308), + (17310, -1, -1, 7945, 7945, 9, 105, -1, 0, 0, 21, 10347, -1), + (17311, 970, 970, 970, 970, 9, 101, 41845, 6, 1800, 21, 1326, 17312), + (17317, -1, -1, 17317, 17317, 9, 101, -1, 0, 0, 21, -1, 17318), + (17328, 17328, 17328, 17328, 17328, 21, 105, 41854, 87, 600, 21, -1, -1), + (17329, 17329, 17329, 17329, 17329, 12, 101, 41855, 88, 20, 21, -1, -1), + (17333, 153, 153, 153, 153, 18, 105, 41856, 3, 2160, 21, 12996, -1), + (17334, -1, -1, 12977, 12977, 12, 102, 0, 0, 0, 21, 12981, 17335), + (17336, -1, -1, 17336, 17336, 9, 101, -1, 0, 0, 21, -1, 17337), + (17339, -1, -1, 17339, 17339, 9, 101, -1, 0, 0, 21, -1, 17340), + (17342, 17342, 17342, 17342, 17342, 15, 105, 41857, 85, 60, 21, -1, -1), + (17344, 17344, 17344, 17344, 17344, 15, 101, 41858, 94, 780, 21, -1, 17345), + (17347, 17347, 17347, 17347, 17347, 12, 101, 41861, 32, 30, 21, -1, 17348), + (17350, -1, -1, 7664, 7664, 5, 102, -1, 0, 0, 21, 10109, 17351), + (17357, -1, -1, 17357, 17357, 9, 96, -1, 0, 0, 19, -1, 17358), + (17361, -1, -1, 17361, 17361, 5, 100, -1, 0, 0, 21, -1, 17362), + (17364, 17364, 17364, 17364, 17364, 15, 105, 46160, 87, 120, 21, -1, -1), + (17365, -1, -1, 10792, 10792, 15, 101, 0, 0, 0, 21, 10796, 17366), + (17370, -1, -1, 17370, 17370, 15, 102, 0, 0, 0, 21, -1, 17371), + (17372, 17372, 17372, 17372, 17372, 18, 104, 46161, 85, 300, 21, -1, -1), + (17373, 17373, -1, 17373, 17373, 15, 105, 46162, 98, 900, 21, -1, -1), + (17375, -1, -1, 17375, 17375, 12, 101, -1, 0, 0, 21, -1, 17376), + (17378, 17378, 17378, 17378, 17378, 10, 101, 46164, 97, 3, 21, -1, -1), + (17379, 17378, 17378, 17378, 17378, 10, 101, 46165, 86, 3, 21, -1, -1), + (17380, 17378, 17378, 17378, 17378, 10, 101, 46166, 97, 3, 21, -1, -1), + (17382, 5015, 5015, 5015, 5015, 15, 103, 46168, 9, 900, 21, 10301, -1), + (17384, 17384, 17384, 17384, 17384, 18, 101, 46171, 10, 20, 21, -1, -1), + (17391, -1, -1, 495, 495, 12, 105, -1, 0, 0, 21, 10668, -1), + (17406, -1, -1, 10653, 10653, 12, 103, -1, 0, 0, 21, 10655, -1), + (17409, -1, -1, 17409, 17409, 15, 105, -1, 0, 0, 21, -1, -1), + (17414, -1, -1, 17414, 17414, 9, 101, -1, 0, 0, 21, -1, 17415), + (17418, -1, -1, 17418, 17418, 7, 101, -1, 0, 0, 21, -1, 17419), + (17428, 17428, 17428, 17428, 17428, 15, 101, 46178, 0, 0, 21, -1, 17429), + (17436, -1, -1, 17436, 17436, 7, 101, -1, 0, 0, 21, -1, 17437), + (17439, -1, -1, 17439, 17439, 9, 102, -1, 0, 0, 21, -1, 17440), + (17441, -1, -1, 255, 255, 15, 102, -1, 0, 0, 21, 7633, -1), + (17445, -1, -1, 17445, 17445, 15, 101, 0, 0, 0, 21, -1, 17446), + (17448, -1, -1, 17448, 17448, 15, 102, 0, 0, 0, 21, -1, 17449), + (17476, -1, -1, 10800, 10800, 15, 101, -1, 0, 0, 21, 10802, 17477), + (17486, 12864, -1, 12864, 12864, 12, 105, 46195, 73, 10, 21, 12864, -1), + (17492, -1, -1, 17492, 17492, 9, 101, -1, 0, 0, 21, -1, 17493), + (17495, -1, -1, 17495, 17495, 9, 101, -1, 0, 0, 21, -1, 17496), + (17515, -1, -1, 17515, 17515, 7, 102, -1, 0, 0, 21, -1, 17516), + (17517, -1, -1, 17517, 17517, 9, 101, -1, 0, 0, 21, -1, 17518), + (17522, -1, -1, 17522, 17522, 9, 101, -1, 0, 0, 21, -1, 17523), + (17533, -1, -1, 17533, 17533, 15, 105, -1, 0, 0, 21, -1, -1), + (17534, 6828, 6828, 6828, 6828, 15, 105, 46207, 43, 60, 21, 10208, -1), + (17535, 967, 967, 967, 967, 9, 101, 46208, 10, 1800, 21, 12791, 17536), + (17538, 17538, 17538, 17538, 17538, 21, 105, 46212, 91, 1800, 21, -1, -1), + (17539, 4934, 4934, 4934, 4934, 12, 105, 46214, 13, 300, 21, 10278, -1), + (17540, 4935, 4935, 4935, 4935, 12, 105, 46215, 14, 300, 21, 10277, -1), + (17541, 8038, 8038, 8038, 8038, 12, 105, 46217, 56, 12, 21, 8038, -1), + (17547, -1, -1, 17547, 17547, 12, 102, -1, 0, 0, 21, -1, 17548), + (17549, -1, -1, 17549, 17549, 9, 101, -1, 0, 0, 21, -1, 17550), + (17553, -1, -1, 17553, 17553, 18, 105, -1, 0, 0, 21, -1, -1), + (17554, -1, -1, 17554, 17554, 15, 105, -1, 0, 0, 21, -1, -1), + (17555, -1, -1, 17555, 17555, 5, 101, -1, 0, 0, 21, -1, 17556), + (17558, -1, -1, 17558, 17558, 5, 101, -1, 0, 0, 21, -1, 17559), + (17561, -1, -1, 17561, 17561, 5, 101, -1, 0, 0, 21, -1, 17562), + (17564, -1, -1, 17564, 17564, 5, 101, -1, 0, 0, 21, -1, 17565), + (17567, -1, -1, 17567, 17567, 5, 101, -1, 0, 0, 21, -1, 17568), + (17570, -1, -1, 17570, 17570, 5, 101, -1, 0, 0, 21, -1, 17571), + (17573, -1, -1, 17573, 17573, 5, 101, -1, 0, 0, 21, -1, 17574), + (17576, -1, -1, 17576, 17576, 5, 101, -1, 0, 0, 21, -1, 17577), + (17579, -1, -1, 17579, 17579, 5, 101, -1, 0, 0, 21, -1, 17580), + (17582, -1, -1, 17582, 17582, 5, 101, -1, 0, 0, 21, -1, 17583), + (17585, -1, -1, 17585, 17585, 5, 101, -1, 0, 0, 21, -1, 17586), + (17588, -1, -1, 17588, 17588, 5, 101, -1, 0, 0, 21, -1, 17589), + (17591, -1, -1, 17591, 17591, 5, 101, -1, 0, 0, 21, -1, 17592), + (17594, -1, -1, 17594, 17594, 5, 101, -1, 0, 0, 21, -1, 17595), + (17597, -1, -1, 17597, 17597, 5, 101, -1, 0, 0, 21, -1, 17598), + (17600, -1, -1, 17600, 17600, 5, 101, -1, 0, 0, 21, -1, 17601), + (17603, -1, -1, 17603, 17603, 5, 101, -1, 0, 0, 21, -1, 17604), + (17606, -1, -1, 17606, 17606, 5, 101, -1, 0, 0, 21, -1, 17607), + (17609, -1, -1, 17609, 17609, 5, 101, -1, 0, 0, 21, -1, 17610), + (17612, -1, -1, 17612, 17612, 5, 101, -1, 0, 0, 21, -1, 17613), + (17615, -1, -1, 17615, 17615, 5, 101, -1, 0, 0, 21, -1, 17616), + (17618, -1, -1, 17618, 17618, 5, 101, -1, 0, 0, 21, -1, 17619), + (17621, -1, -1, 17621, 17621, 5, 101, -1, 0, 0, 21, -1, 17622), + (17624, -1, -1, 17624, 17624, 5, 101, -1, 0, 0, 21, -1, 17625), + (17627, -1, -1, 17627, 17627, 5, 101, -1, 0, 0, 21, -1, 17628), + (17630, -1, -1, 17630, 17630, 5, 101, -1, 0, 0, 21, -1, 17631), + (17633, -1, -1, 17633, 17633, 5, 101, -1, 0, 0, 21, -1, 17634), + (17639, -1, -1, 17639, 17639, 9, 91, 0, 0, 0, 18, -1, 17640), + (18972, -1, -1, 279, 279, 15, 105, -1, 0, 0, 21, 279, -1), + (30050, -1, -1, 30050, 30050, 0, 1, -1, 0, 0, 0, -1, 30051), + (30100, -1, -1, 30100, 30100, 0, 1, -1, 0, 0, 0, -1, 30101), + (30150, -1, -1, 30150, 30150, 0, 1, -1, 0, 0, 0, -1, 30151), + (30175, -1, -1, 30175, 30175, 0, 1, -1, 0, 0, 0, -1, 30176), + (30180, -1, -1, 30180, 30180, 0, 1, -1, 0, 0, 0, -1, 30181), + (30185, -1, -1, 30185, 30185, 0, 1, -1, 0, 0, 0, -1, 30186), + (30190, -1, -1, 30190, 30190, 0, 1, -1, 0, 0, 0, -1, 30191), + (30195, -1, -1, 30195, 30195, 0, 1, -1, 0, 0, 0, -1, 30196), + (49999, -1, -1, -1, -1, 0, 71, 0, 0, 0, 0, -1, 1); + +-- Dumping structure for table eqdb.aa_rank_effects +DROP TABLE IF EXISTS `aa_rank_effects`; +CREATE TABLE IF NOT EXISTS `aa_rank_effects` ( + `rank_id` int(10) unsigned NOT NULL, + `slot` int(10) unsigned NOT NULL DEFAULT '1', + `effect_id` int(10) NOT NULL DEFAULT '0', + `base1` int(10) NOT NULL DEFAULT '0', + `base2` int(10) NOT NULL DEFAULT '0', + PRIMARY KEY (`rank_id`,`slot`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO `aa_rank_effects` (`rank_id`, `slot`, `effect_id`, `base1`, `base2`) VALUES + (2, 1, 4, 2, 0), + (3, 1, 4, 4, 0), + (4, 1, 4, 6, 0), + (5, 1, 4, 8, 0), + (6, 1, 4, 10, 0), + (7, 1, 7, 2, 0), + (8, 1, 7, 4, 0), + (9, 1, 7, 6, 0), + (10, 1, 7, 8, 0), + (11, 1, 7, 10, 0), + (12, 1, 6, 2, 0), + (13, 1, 6, 4, 0), + (14, 1, 6, 6, 0), + (15, 1, 6, 8, 0), + (16, 1, 6, 10, 0), + (17, 1, 5, 2, 0), + (18, 1, 5, 4, 0), + (19, 1, 5, 6, 0), + (20, 1, 5, 8, 0), + (21, 1, 5, 10, 0), + (22, 1, 8, 2, 0), + (23, 1, 8, 4, 0), + (24, 1, 8, 6, 0), + (25, 1, 8, 8, 0), + (26, 1, 8, 10, 0), + (27, 1, 9, 2, 0), + (28, 1, 9, 4, 0), + (29, 1, 9, 6, 0), + (30, 1, 9, 8, 0), + (31, 1, 9, 10, 0), + (32, 1, 10, 2, 0), + (33, 1, 10, 4, 0), + (34, 1, 10, 6, 0), + (35, 1, 10, 8, 0), + (36, 1, 10, 10, 0), + (37, 1, 46, 2, 0), + (38, 1, 46, 4, 0), + (39, 1, 46, 6, 0), + (40, 1, 46, 8, 0), + (41, 1, 46, 10, 0), + (42, 1, 47, 2, 0), + (43, 1, 47, 4, 0), + (44, 1, 47, 6, 0), + (45, 1, 47, 8, 0), + (46, 1, 47, 10, 0), + (47, 1, 50, 2, 0), + (48, 1, 50, 4, 0), + (49, 1, 50, 6, 0), + (50, 1, 50, 8, 0), + (51, 1, 50, 10, 0), + (52, 1, 48, 2, 0), + (53, 1, 48, 4, 0), + (54, 1, 48, 6, 0), + (55, 1, 48, 8, 0), + (56, 1, 48, 10, 0), + (57, 1, 49, 2, 0), + (58, 1, 49, 4, 0), + (59, 1, 49, 6, 0), + (60, 1, 49, 8, 0), + (61, 1, 49, 10, 0), + (62, 1, 271, 8, 0), + (63, 1, 271, 14, 0), + (64, 1, 271, 21, 0), + (68, 1, 233, 110, 0), + (69, 1, 233, 125, 0), + (70, 1, 233, 150, 0), + (71, 1, 246, 110, 0), + (72, 1, 246, 125, 0), + (73, 1, 246, 150, 0), + (74, 1, 269, 10, 0), + (75, 1, 269, 20, 0), + (76, 1, 269, 30, 0), + (77, 1, 125, 2, 2), + (77, 2, 137, 0, 0), + (77, 3, 141, 1, 0), + (77, 4, 139, -6233, 0), + (77, 5, 139, -6265, 0), + (77, 6, 125, 2, 2), + (77, 7, 137, 147, 0), + (77, 8, 141, 1, 0), + (78, 1, 125, 5, 5), + (78, 2, 137, 0, 0), + (78, 3, 141, 1, 0), + (78, 4, 139, -6233, 0), + (78, 5, 139, -6265, 0), + (78, 6, 125, 5, 5), + (78, 7, 137, 147, 0), + (78, 8, 141, 1, 0), + (79, 1, 125, 10, 10), + (79, 2, 137, 0, 0), + (79, 3, 141, 1, 0), + (79, 4, 139, -6233, 0), + (79, 5, 139, -6265, 0), + (79, 6, 125, 10, 10), + (79, 7, 137, 147, 0), + (79, 8, 141, 1, 0), + (80, 1, 274, 3, 0), + (81, 1, 274, 6, 0), + (82, 1, 274, 10, 0), + (83, 1, 132, 2, 2), + (84, 1, 132, 5, 5), + (85, 1, 132, 10, 10), + (86, 1, 128, 5, 5), + (86, 2, 138, 1, 0), + (86, 3, 140, 1, 0), + (86, 4, 139, -2741, 0), + (86, 5, 139, -16843, 0), + (86, 6, 385, -16192, 0), + (86, 7, 385, -10547, 0), + (86, 8, 385, -13543, 0), + (87, 1, 128, 15, 15), + (87, 2, 138, 1, 0), + (87, 3, 140, 1, 0), + (87, 4, 139, -2741, 0), + (87, 5, 139, -16843, 0), + (87, 6, 385, -16192, 0), + (87, 7, 385, -10547, 0), + (87, 8, 385, -13543, 0), + (88, 1, 128, 30, 30), + (88, 2, 138, 1, 0), + (88, 3, 140, 1, 0), + (88, 4, 139, -2741, 0), + (88, 5, 139, -16843, 0), + (88, 6, 385, -16192, 0), + (88, 7, 385, -10547, 0), + (88, 8, 385, -13543, 0), + (92, 1, 294, 2, 100), + (93, 1, 294, 4, 100), + (94, 1, 294, 7, 100), + (98, 1, 114, -5, 0), + (99, 1, 114, -10, 0), + (100, 1, 114, -20, 0), + (101, 1, 265, 20, 0), + (102, 1, 265, 40, 0), + (103, 1, 265, 52, 0), + (104, 1, 127, 10, 10), + (104, 2, 138, 1, 0), + (104, 3, 140, 1, 0), + (104, 4, 143, 3000, 0), + (105, 1, 127, 25, 25), + (105, 2, 138, 1, 0), + (105, 3, 140, 1, 0), + (105, 4, 143, 3000, 0), + (106, 1, 127, 50, 50), + (106, 2, 138, 1, 0), + (106, 3, 140, 1, 0), + (106, 4, 143, 3000, 0), + (107, 1, 214, 200, 0), + (108, 1, 214, 500, 0), + (109, 1, 214, 1000, 0), + (110, 1, 0, 1, 0), + (111, 1, 0, 2, 0), + (112, 1, 0, 3, 0), + (113, 1, 169, 15, -1), + (114, 1, 169, 40, -1), + (115, 1, 169, 75, -1), + (116, 1, 181, 5, 0), + (117, 1, 181, 10, 0), + (118, 1, 181, 25, 0), + (119, 1, 278, 500, 16000), + (119, 2, 440, 50, 100), + (120, 1, 278, 510, 17102), + (120, 2, 440, 52, 100), + (121, 1, 278, 520, 19635), + (121, 2, 440, 54, 100), + (122, 1, 259, 2, 0), + (123, 1, 259, 5, 0), + (124, 1, 259, 10, 0), + (125, 1, 172, 2, 0), + (126, 1, 172, 5, 0), + (127, 1, 172, 10, 0), + (137, 1, 127, 10, 10), + (137, 2, 137, 88, 0), + (138, 1, 127, 25, 25), + (138, 2, 137, 88, 0), + (139, 1, 127, 50, 50), + (139, 2, 137, 88, 0), + (141, 1, 127, 2, 2), + (141, 2, 137, 0, 0), + (141, 3, 138, 0, 0), + (141, 4, 141, 1, 0), + (141, 5, 143, 3000, 0), + (141, 6, 127, 2, 2), + (141, 7, 385, 16555, 0), + (141, 8, 385, 16655, 0), + (142, 1, 127, 5, 5), + (142, 2, 137, 0, 0), + (142, 3, 138, 0, 0), + (142, 4, 141, 1, 0), + (142, 5, 143, 3000, 0), + (142, 6, 127, 5, 5), + (142, 7, 385, 16555, 0), + (142, 8, 385, 16655, 0), + (143, 1, 127, 10, 10), + (143, 2, 137, 0, 0), + (143, 3, 138, 0, 0), + (143, 4, 141, 1, 0), + (143, 5, 143, 3000, 0), + (143, 6, 127, 10, 10), + (143, 7, 385, 16555, 0), + (143, 8, 385, 16655, 0), + (144, 1, 244, 50, 0), + (147, 1, 127, 10, 10), + (147, 2, 138, 1, 0), + (147, 3, 140, 1, 0), + (147, 4, 143, 3000, 0), + (148, 1, 127, 25, 25), + (148, 2, 138, 1, 0), + (148, 3, 140, 1, 0), + (148, 4, 143, 3000, 0), + (149, 1, 127, 50, 50), + (149, 2, 138, 1, 0), + (149, 3, 140, 1, 0), + (149, 4, 143, 3000, 0), + (150, 1, 268, 10, 59), + (151, 1, 268, 25, 59), + (152, 1, 268, 50, 59), + (158, 1, 238, 1, 0), + (159, 1, 268, 10, 68), + (160, 1, 268, 25, 68), + (161, 1, 268, 50, 68), + (182, 1, 131, 100, 0), + (182, 2, 137, 33, 0), + (190, 1, 219, 225, 680), + (191, 1, 219, 235, 1190), + (192, 1, 219, 240, 1700), + (195, 1, 181, 100, 0), + (196, 1, 226, 1, 0), + (198, 1, 276, 32, 0), + (199, 1, 301, 30, 0), + (200, 1, 301, 60, 0), + (201, 1, 301, 100, 0), + (205, 1, 251, 100, 0), + (210, 1, 302, 50, 50), + (210, 2, 385, 99, 0), + (211, 1, 302, 100, 100), + (211, 2, 385, 99, 0), + (212, 1, 302, 200, 200), + (212, 2, 385, 99, 0), + (213, 1, 260, 2, 23), + (213, 2, 260, 2, 24), + (213, 3, 260, 2, 25), + (213, 4, 260, 2, 26), + (214, 1, 260, 4, 23), + (214, 2, 260, 4, 24), + (214, 3, 260, 4, 25), + (214, 4, 260, 4, 26), + (215, 1, 260, 6, 23), + (215, 2, 260, 6, 24), + (215, 3, 260, 6, 25), + (215, 4, 260, 6, 26), + (225, 1, 272, 1, 0), + (226, 1, 272, 3, 0), + (227, 1, 272, 5, 0), + (230, 1, 275, 10, 0), + (231, 1, 275, 20, 0), + (232, 1, 275, 30, 0), + (237, 1, 227, 1, 25), + (238, 1, 227, 3, 25), + (239, 1, 227, 5, 25), + (240, 1, 224, 20, 26), + (240, 2, 173, 1, 0), + (241, 1, 224, 35, 26), + (241, 2, 173, 2, 0), + (242, 1, 224, 50, 26), + (242, 2, 173, 3, 0), + (244, 1, 268, 10, 56), + (244, 2, 234, 7500, 0), + (245, 1, 268, 25, 56), + (245, 2, 234, 5000, 0), + (246, 1, 268, 50, 56), + (246, 2, 234, 2500, 0), + (247, 1, 224, 15, 0), + (248, 1, 224, 30, 0), + (249, 1, 224, 50, 0), + (255, 1, 279, 7, 0), + (256, 1, 279, 11, 0), + (257, 1, 279, 15, 0), + (263, 1, 282, 10, 0), + (264, 1, 282, 25, 0), + (265, 1, 282, 50, 0), + (266, 1, 128, 50, 50), + (266, 2, 138, 1, 0), + (266, 3, 140, 1, 0), + (266, 4, 139, -2741, 0), + (266, 5, 139, -16843, 0), + (266, 6, 385, -16192, 0), + (266, 7, 385, -10547, 0), + (266, 8, 385, -13543, 0), + (267, 1, 294, 2, 100), + (268, 1, 294, 4, 100), + (269, 1, 294, 6, 100), + (273, 1, 288, 1000, 21), + (275, 1, 260, 2, 50), + (276, 1, 260, 4, 50), + (277, 1, 260, 6, 50), + (278, 1, 0, 1, 0), + (278, 2, 15, 1, 0), + (279, 1, 214, 200, 0), + (279, 2, 259, 2, 0), + (279, 3, 172, 2, 0), + (280, 1, 227, 1, 62), + (280, 2, 227, 1, 17), + (281, 1, 227, 3, 62), + (281, 2, 227, 3, 17), + (282, 1, 227, 5, 62), + (282, 2, 227, 5, 17), + (283, 1, 228, 10, 0), + (284, 1, 228, 20, 0), + (285, 1, 228, 30, 0), + (286, 1, 10, 0, 0), + (287, 1, 253, 1, 0), + (288, 1, 257, 1, 0), + (288, 2, 267, 1, 31), + (288, 3, 267, 1, 32), + (288, 4, 267, 1, 33), + (288, 5, 267, 1, 15), + (288, 6, 267, 1, 16), + (288, 7, 267, 1, 17), + (288, 8, 267, 1, 18), + (288, 9, 267, 1, 19), + (288, 10, 267, 1, 20), + (292, 1, 4, 12, 0), + (293, 1, 4, 14, 0), + (294, 1, 4, 16, 0), + (295, 1, 4, 18, 0), + (296, 1, 4, 20, 0), + (297, 1, 4, 22, 0), + (298, 1, 4, 24, 0), + (299, 1, 4, 26, 0), + (300, 1, 4, 28, 0), + (301, 1, 4, 30, 0), + (302, 1, 7, 12, 0), + (303, 1, 7, 14, 0), + (304, 1, 7, 16, 0), + (305, 1, 7, 18, 0), + (306, 1, 7, 20, 0), + (307, 1, 7, 22, 0), + (308, 1, 7, 24, 0), + (309, 1, 7, 26, 0), + (310, 1, 7, 28, 0), + (311, 1, 7, 30, 0), + (312, 1, 6, 12, 0), + (313, 1, 6, 14, 0), + (314, 1, 6, 16, 0), + (315, 1, 6, 18, 0), + (316, 1, 6, 20, 0), + (317, 1, 6, 22, 0), + (318, 1, 6, 24, 0), + (319, 1, 6, 26, 0), + (320, 1, 6, 28, 0), + (321, 1, 6, 30, 0), + (322, 1, 5, 12, 0), + (323, 1, 5, 14, 0), + (324, 1, 5, 16, 0), + (325, 1, 5, 18, 0), + (326, 1, 5, 20, 0), + (327, 1, 5, 22, 0), + (328, 1, 5, 24, 0), + (329, 1, 5, 26, 0), + (330, 1, 5, 28, 0), + (331, 1, 5, 30, 0), + (332, 1, 8, 12, 0), + (333, 1, 8, 14, 0), + (334, 1, 8, 16, 0), + (335, 1, 8, 18, 0), + (336, 1, 8, 20, 0), + (337, 1, 8, 22, 0), + (338, 1, 8, 24, 0), + (339, 1, 8, 26, 0), + (340, 1, 8, 28, 0), + (341, 1, 8, 30, 0), + (342, 1, 9, 12, 0), + (343, 1, 9, 14, 0), + (344, 1, 9, 16, 0), + (345, 1, 9, 18, 0), + (346, 1, 9, 20, 0), + (347, 1, 9, 22, 0), + (348, 1, 9, 24, 0), + (349, 1, 9, 26, 0), + (350, 1, 9, 28, 0), + (351, 1, 9, 30, 0), + (352, 1, 10, 12, 0), + (353, 1, 10, 14, 0), + (354, 1, 10, 16, 0), + (355, 1, 10, 18, 0), + (356, 1, 10, 20, 0), + (357, 1, 10, 22, 0), + (358, 1, 10, 24, 0), + (359, 1, 10, 26, 0), + (360, 1, 10, 28, 0), + (361, 1, 10, 30, 0), + (362, 1, 46, 12, 0), + (363, 1, 46, 14, 0), + (364, 1, 46, 16, 0), + (365, 1, 46, 18, 0), + (366, 1, 46, 20, 0), + (367, 1, 46, 22, 0), + (368, 1, 46, 24, 0), + (369, 1, 46, 26, 0), + (370, 1, 46, 28, 0), + (371, 1, 46, 30, 0), + (372, 1, 47, 12, 0), + (373, 1, 47, 14, 0), + (374, 1, 47, 16, 0), + (375, 1, 47, 18, 0), + (376, 1, 47, 20, 0), + (377, 1, 47, 22, 0), + (378, 1, 47, 24, 0), + (379, 1, 47, 26, 0), + (380, 1, 47, 28, 0), + (381, 1, 47, 30, 0), + (382, 1, 50, 12, 0), + (383, 1, 50, 14, 0), + (384, 1, 50, 16, 0), + (385, 1, 50, 18, 0), + (386, 1, 50, 20, 0), + (387, 1, 50, 22, 0), + (388, 1, 50, 24, 0), + (389, 1, 50, 26, 0), + (390, 1, 50, 28, 0), + (391, 1, 50, 30, 0), + (392, 1, 48, 12, 0), + (393, 1, 48, 14, 0), + (394, 1, 48, 16, 0), + (395, 1, 48, 18, 0), + (396, 1, 48, 20, 0), + (397, 1, 48, 22, 0), + (398, 1, 48, 24, 0), + (399, 1, 48, 26, 0), + (400, 1, 48, 28, 0), + (401, 1, 48, 30, 0), + (402, 1, 49, 12, 0), + (403, 1, 49, 14, 0), + (404, 1, 49, 16, 0), + (405, 1, 49, 18, 0), + (406, 1, 49, 20, 0), + (407, 1, 49, 22, 0), + (408, 1, 49, 24, 0), + (409, 1, 49, 26, 0), + (410, 1, 49, 28, 0), + (411, 1, 49, 30, 0), + (412, 1, 263, 1, 0), + (413, 1, 263, 2, 0), + (414, 1, 263, 3, 0), + (415, 1, 263, 4, 0), + (416, 1, 263, 5, 0), + (417, 1, 263, 6, 0), + (418, 1, 262, 5, 0), + (418, 2, 262, 5, 1), + (418, 3, 262, 5, 2), + (418, 4, 262, 5, 3), + (418, 5, 262, 5, 4), + (418, 6, 262, 5, 5), + (418, 7, 262, 5, 6), + (419, 1, 262, 10, 0), + (419, 2, 262, 10, 1), + (419, 3, 262, 10, 2), + (419, 4, 262, 10, 3), + (419, 5, 262, 10, 4), + (419, 6, 262, 10, 5), + (419, 7, 262, 10, 6), + (420, 1, 262, 15, 0), + (420, 2, 262, 15, 1), + (420, 3, 262, 15, 2), + (420, 4, 262, 15, 3), + (420, 5, 262, 15, 4), + (420, 6, 262, 15, 5), + (420, 7, 262, 15, 6), + (421, 1, 262, 20, 0), + (421, 2, 262, 20, 1), + (421, 3, 262, 20, 2), + (421, 4, 262, 20, 3), + (421, 5, 262, 20, 4), + (421, 6, 262, 20, 5), + (421, 7, 262, 20, 6), + (422, 1, 262, 25, 0), + (422, 2, 262, 25, 1), + (422, 3, 262, 25, 2), + (422, 4, 262, 25, 3), + (422, 5, 262, 25, 4), + (422, 6, 262, 25, 5), + (422, 7, 262, 25, 6), + (423, 1, 214, 150, 0), + (424, 1, 214, 300, 0), + (425, 1, 214, 450, 0), + (426, 1, 262, 10, 5), + (426, 2, 262, 10, 4), + (427, 1, 262, 20, 5), + (427, 2, 262, 20, 4), + (428, 1, 262, 30, 5), + (428, 2, 262, 30, 4), + (429, 1, 262, 40, 5), + (429, 2, 262, 40, 4), + (430, 1, 262, 50, 5), + (430, 2, 262, 50, 4), + (434, 1, 125, 13, 13), + (434, 2, 137, 0, 0), + (434, 3, 141, 1, 0), + (434, 4, 139, -6233, 0), + (434, 5, 139, -6265, 0), + (434, 6, 125, 13, 13), + (434, 7, 137, 147, 0), + (434, 8, 141, 1, 0), + (435, 1, 125, 16, 16), + (435, 2, 137, 0, 0), + (435, 3, 141, 1, 0), + (435, 4, 139, -6233, 0), + (435, 5, 139, -6265, 0), + (435, 6, 125, 16, 16), + (435, 7, 137, 147, 0), + (435, 8, 141, 1, 0), + (436, 1, 125, 19, 19), + (436, 2, 137, 0, 0), + (436, 3, 141, 1, 0), + (436, 4, 139, -6233, 0), + (436, 5, 139, -6265, 0), + (436, 6, 125, 19, 19), + (436, 7, 137, 147, 0), + (436, 8, 141, 1, 0), + (437, 1, 274, 12, 0), + (438, 1, 274, 14, 0), + (439, 1, 274, 16, 0), + (440, 1, 278, 530, 21210), + (440, 2, 440, 56, 100), + (441, 1, 278, 540, 23160), + (441, 2, 440, 58, 100), + (442, 1, 278, 550, 25230), + (442, 2, 440, 60, 100), + (443, 1, 169, 100, -1), + (444, 1, 169, 125, -1), + (445, 1, 169, 150, -1), + (446, 1, 265, 54, 0), + (447, 1, 265, 56, 0), + (448, 1, 265, 58, 0), + (449, 1, 172, 13, 0), + (450, 1, 172, 16, 0), + (451, 1, 172, 19, 0), + (452, 1, 172, 22, 0), + (453, 1, 172, 25, 0), + (454, 1, 259, 13, 0), + (455, 1, 259, 16, 0), + (456, 1, 259, 19, 0), + (457, 1, 259, 22, 0), + (458, 1, 259, 25, 0), + (462, 1, 264, 60, 39), + (462, 2, 264, 864, 1061), + (463, 1, 264, 120, 39), + (463, 2, 264, 1728, 1061), + (464, 1, 264, 180, 39), + (464, 2, 264, 2592, 1061), + (468, 1, 264, 180, 41), + (469, 1, 264, 360, 41), + (470, 1, 264, 540, 41), + (471, 1, 264, 864, 57), + (471, 2, 264, 864, 616), + (472, 1, 264, 1728, 57), + (472, 2, 264, 1728, 616), + (473, 1, 264, 2592, 57), + (473, 2, 264, 2592, 616), + (474, 1, 264, 240, 50), + (475, 1, 264, 480, 50), + (476, 1, 264, 720, 50), + (477, 1, 264, 432, 43), + (478, 1, 264, 864, 43), + (479, 1, 264, 1296, 43), + (480, 1, 264, 432, 117), + (481, 1, 264, 864, 117), + (482, 1, 264, 1296, 117), + (483, 1, 264, 540, 58), + (483, 2, 264, 540, 418), + (484, 1, 264, 1080, 58), + (484, 2, 264, 1080, 418), + (485, 1, 264, 1620, 58), + (485, 2, 264, 1620, 418), + (489, 1, 264, 90, 110), + (490, 1, 264, 180, 110), + (491, 1, 264, 270, 110), + (492, 1, 264, 60, 109), + (493, 1, 264, 120, 109), + (494, 1, 264, 180, 109), + (495, 1, 264, 180, 98), + (496, 1, 264, 360, 98), + (497, 1, 264, 540, 98), + (498, 1, 264, 144, 102), + (499, 1, 264, 288, 102), + (500, 1, 264, 432, 102), + (501, 1, 264, 432, 107), + (502, 1, 264, 864, 107), + (503, 1, 264, 1296, 107), + (504, 1, 224, 110, 0), + (505, 1, 224, 120, 0), + (506, 1, 224, 130, 0), + (537, 1, 282, 60, 0), + (538, 1, 282, 75, 0), + (539, 1, 275, 68, 0), + (540, 1, 275, 76, 0), + (541, 1, 275, 84, 0), + (542, 1, 279, 17, 0), + (543, 1, 279, 19, 0), + (544, 1, 279, 21, 0), + (551, 1, 225, 3, 0), + (552, 1, 225, 6, 0), + (553, 1, 225, 9, 0), + (554, 1, 225, 12, 0), + (555, 1, 225, 15, 0), + (556, 1, 225, 3, 0), + (557, 1, 225, 6, 0), + (558, 1, 225, 9, 0), + (559, 1, 225, 12, 0), + (560, 1, 225, 15, 0), + (561, 1, 177, 3, -1), + (562, 1, 177, 6, -1), + (563, 1, 177, 9, -1), + (564, 1, 177, 3, -1), + (565, 1, 177, 6, -1), + (566, 1, 177, 9, -1), + (567, 1, 244, -12, 0), + (574, 1, 281, 25, 0), + (575, 1, 281, 50, 0), + (576, 1, 281, 75, 0), + (577, 1, 277, 20, 0), + (578, 1, 277, 40, 0), + (579, 1, 277, 60, 0), + (580, 1, 267, 1, 4), + (580, 2, 267, 1, 5), + (580, 3, 267, 1, 29), + (581, 1, 267, 1, 2), + (581, 2, 267, 1, 3), + (581, 3, 267, 1, 4), + (581, 4, 267, 1, 5), + (581, 5, 267, 1, 29), + (582, 1, 267, 1, 0), + (582, 2, 267, 1, 1), + (582, 3, 267, 1, 2), + (582, 4, 267, 1, 3), + (582, 5, 267, 1, 4), + (582, 6, 267, 1, 4), + (582, 7, 267, 1, 5), + (582, 8, 267, 1, 6), + (582, 9, 267, 1, 7), + (582, 10, 267, 1, 8), + (582, 11, 267, 1, 9), + (582, 12, 267, 1, 10), + (582, 13, 267, 1, 11), + (582, 14, 267, 1, 12), + (582, 15, 267, 1, 13), + (582, 16, 267, 1, 14), + (582, 17, 267, 1, 28), + (582, 18, 267, 1, 29), + (582, 19, 267, 1, 30), + (583, 1, 264, 7, 73), + (583, 2, 264, 7, 702), + (583, 3, 264, 7, 3826), + (583, 4, 264, 7, 7712), + (584, 1, 264, 14, 73), + (584, 2, 264, 14, 702), + (584, 3, 264, 14, 3826), + (584, 4, 264, 14, 7712), + (585, 1, 264, 21, 73), + (585, 2, 264, 21, 702), + (585, 3, 264, 21, 3826), + (585, 4, 264, 21, 7712), + (586, 1, 255, 12, 0), + (587, 1, 255, 24, 0), + (588, 1, 255, 36, 0), + (589, 1, 303, 500, 500), + (589, 2, 139, 2766, 0), + (590, 1, 303, 1000, 1000), + (590, 2, 139, 2766, 0), + (591, 1, 303, 1500, 1500), + (591, 2, 139, 2766, 0), + (593, 1, 264, 720, 6001), + (593, 2, 264, 720, 3676), + (594, 1, 264, 1440, 6001), + (594, 2, 264, 1440, 3676), + (595, 1, 264, 2160, 6001), + (595, 2, 264, 2160, 3676), + (596, 1, 264, 720, 6000), + (596, 2, 264, 720, 87), + (597, 1, 264, 1440, 6000), + (597, 2, 264, 1440, 87), + (598, 1, 264, 2160, 6000), + (598, 2, 264, 2160, 87), + (599, 1, 266, 2, 0), + (600, 1, 266, 5, 0), + (601, 1, 266, 8, 0), + (602, 1, 266, 2, 0), + (603, 1, 266, 5, 0), + (604, 1, 266, 8, 0), + (605, 1, 256, 1, 0), + (606, 1, 285, 20, 0), + (607, 1, 285, 40, 0), + (608, 1, 285, 60, 0), + (609, 1, 285, 80, 0), + (610, 1, 285, 100, 0), + (611, 1, 283, 20, 0), + (612, 1, 283, 40, 0), + (613, 1, 283, 60, 0), + (614, 1, 283, 80, 0), + (615, 1, 283, 100, 0), + (622, 1, 227, 1, 29), + (622, 2, 227, 1, 42), + (623, 1, 227, 2, 29), + (623, 2, 227, 2, 42), + (624, 1, 227, 3, 29), + (624, 2, 227, 3, 42), + (625, 1, 294, 3, 100), + (626, 1, 294, 6, 100), + (627, 1, 294, 9, 100), + (628, 1, 290, 5, 0), + (629, 1, 290, 10, 0), + (631, 1, 292, 15, 0), + (632, 1, 292, 30, 0), + (633, 1, 292, 45, 0), + (634, 1, 274, 3, 0), + (635, 1, 274, 6, 0), + (636, 1, 274, 10, 0), + (637, 1, 294, 2, 100), + (638, 1, 294, 4, 100), + (639, 1, 294, 6, 100), + (640, 1, 294, 7, 100), + (641, 1, 294, 8, 100), + (642, 1, 294, 9, 100), + (644, 1, 217, 0, 32000), + (644, 2, 346, 59, 0), + (649, 1, 243, 15, 0), + (650, 1, 243, 25, 0), + (651, 1, 243, 35, 0), + (652, 1, 293, 25, 0), + (653, 1, 293, 50, 0), + (654, 1, 293, 75, 0), + (655, 1, 127, 10, 10), + (655, 2, 137, 32, 0), + (655, 3, 127, 10, 10), + (655, 4, 137, 33, 0), + (655, 5, 127, 10, 10), + (655, 6, 137, 82, 0), + (655, 7, 127, 2, 2), + (655, 8, 137, 152, 0), + (655, 9, 143, 3000, 0), + (656, 1, 127, 25, 25), + (656, 2, 137, 32, 0), + (656, 3, 127, 25, 25), + (656, 4, 137, 33, 0), + (656, 5, 127, 25, 25), + (656, 6, 137, 82, 0), + (656, 7, 127, 5, 5), + (656, 8, 137, 152, 0), + (656, 9, 143, 3000, 0), + (657, 1, 127, 50, 50), + (657, 2, 137, 32, 0), + (657, 3, 127, 50, 50), + (657, 4, 137, 33, 0), + (657, 5, 127, 50, 50), + (657, 6, 137, 82, 0), + (657, 7, 127, 10, 10), + (657, 8, 137, 152, 0), + (657, 9, 143, 3000, 0), + (658, 1, 15, 1, 0), + (659, 1, 15, 2, 0), + (660, 1, 15, 3, 0), + (661, 1, 0, 1, 0), + (662, 1, 0, 2, 0), + (663, 1, 0, 3, 0), + (665, 1, 270, 10, 0), + (666, 1, 270, 15, 0), + (667, 1, 270, 25, 0), + (668, 1, 270, 55, 0), + (669, 1, 270, 60, 0), + (670, 1, 270, 65, 0), + (671, 1, 241, 95, 0), + (672, 1, 271, 28, 0), + (673, 1, 271, 35, 0), + (674, 1, 0, 4, 0), + (675, 1, 0, 5, 0), + (676, 1, 246, 325, 0), + (677, 1, 246, 350, 0), + (678, 1, 221, 3, 0), + (679, 1, 221, 6, 0), + (680, 1, 221, 9, 0), + (681, 1, 221, 12, 0), + (682, 1, 221, 15, 0), + (683, 1, 189, 1, 0), + (684, 1, 189, 2, 0), + (685, 1, 189, 3, 0), + (686, 1, 200, 10, 0), + (687, 1, 200, 20, 0), + (688, 1, 200, 30, 0), + (689, 1, 200, 40, 0), + (690, 1, 200, 50, 0), + (691, 1, 248, 100, 0), + (692, 1, 229, 5, 0), + (693, 1, 229, 10, 0), + (694, 1, 229, 15, 0), + (695, 1, 247, 10, 53), + (696, 1, 247, 20, 53), + (697, 1, 247, 30, 53), + (698, 1, 247, 40, 53), + (699, 1, 247, 50, 53), + (700, 1, 260, 8, 23), + (700, 2, 260, 8, 24), + (700, 3, 260, 8, 25), + (700, 4, 260, 8, 26), + (701, 1, 260, 8, 50), + (724, 1, 218, 1, 0), + (725, 1, 218, 2, 0), + (726, 1, 218, 3, 0), + (727, 1, 218, 4, 0), + (728, 1, 218, 5, 0), + (729, 1, 280, 4, 0), + (730, 1, 280, 8, 0), + (731, 1, 280, 12, 0), + (732, 1, 280, 16, 0), + (733, 1, 280, 20, 0), + (734, 1, 237, 1, 0), + (735, 1, 265, 54, 0), + (736, 1, 265, 56, 0), + (737, 1, 265, 58, 0), + (738, 1, 114, -5, 0), + (739, 1, 114, -10, 0), + (740, 1, 114, -20, 0), + (754, 1, 264, 18, 153), + (755, 1, 264, 36, 153), + (756, 1, 264, 54, 153), + (762, 1, 247, 10, 53), + (763, 1, 247, 20, 53), + (764, 1, 247, 30, 53), + (765, 1, 247, 40, 53), + (766, 1, 247, 50, 53), + (767, 1, 273, 3, 0), + (768, 1, 273, 6, 0), + (769, 1, 273, 9, 0), + (770, 1, 294, 7, 100), + (771, 1, 294, 8, 100), + (772, 1, 294, 9, 100), + (776, 1, 242, 10, 0), + (777, 1, 242, 20, 0), + (778, 1, 242, 30, 0), + (779, 1, 242, 40, 0), + (780, 1, 242, 50, 0), + (781, 1, 287, 1, 1), + (781, 2, 137, 31, 0), + (781, 3, 136, 5, 0), + (782, 1, 264, 432, 35), + (783, 1, 264, 864, 35), + (784, 1, 264, 1296, 35), + (790, 1, 218, 1, 0), + (791, 1, 218, 2, 0), + (792, 1, 218, 3, 0), + (793, 1, 218, 4, 0), + (794, 1, 218, 5, 0), + (795, 1, 280, 4, 0), + (796, 1, 280, 8, 0), + (797, 1, 280, 12, 0), + (798, 1, 280, 16, 0), + (799, 1, 280, 20, 0), + (800, 1, 215, 2, 0), + (801, 1, 215, 5, 0), + (802, 1, 215, 10, 0), + (803, 1, 213, 2, 0), + (804, 1, 213, 5, 0), + (805, 1, 213, 10, 0), + (806, 1, 249, 1, 0), + (807, 1, 292, 5, 0), + (808, 1, 292, 10, 0), + (809, 1, 292, 15, 0), + (810, 1, 239, 10, 0), + (811, 1, 239, 20, 0), + (812, 1, 239, 30, 0), + (813, 1, 239, 40, 0), + (814, 1, 239, 50, 0), + (815, 1, 279, 7, 0), + (816, 1, 279, 11, 0), + (817, 1, 279, 15, 0), + (818, 1, 279, 17, 0), + (819, 1, 279, 19, 0), + (820, 1, 220, 10, 26), + (820, 2, 220, 10, 30), + (820, 3, 220, 10, 38), + (821, 1, 220, 20, 26), + (821, 2, 220, 20, 30), + (821, 3, 220, 20, 38), + (822, 1, 220, 30, 26), + (822, 2, 220, 30, 30), + (822, 3, 220, 30, 38), + (823, 1, 222, 20, 0), + (824, 1, 222, 40, 0), + (825, 1, 222, 60, 0), + (826, 1, 222, 80, 0), + (827, 1, 222, 100, 0), + (834, 1, 218, 1, 0), + (835, 1, 218, 2, 0), + (836, 1, 218, 3, 0), + (837, 1, 218, 4, 0), + (838, 1, 218, 5, 0), + (839, 1, 280, 4, 0), + (840, 1, 280, 8, 0), + (841, 1, 280, 12, 0), + (842, 1, 280, 16, 0), + (843, 1, 280, 20, 0), + (844, 1, 274, 12, 0), + (845, 1, 274, 14, 0), + (846, 1, 258, 5, 0), + (847, 1, 258, 10, 0), + (848, 1, 258, 15, 0), + (849, 1, 264, 240, 180), + (850, 1, 264, 480, 180), + (851, 1, 264, 720, 180), + (852, 1, 231, 1, 0), + (853, 1, 231, 2, 0), + (854, 1, 231, 3, 0), + (855, 1, 220, 5, 10), + (856, 1, 220, 10, 10), + (857, 1, 220, 15, 10), + (858, 1, 220, 20, 10), + (859, 1, 220, 25, 10), + (864, 1, 216, 10, 0), + (864, 2, 216, 10, 1), + (864, 3, 216, 10, 2), + (864, 4, 216, 10, 3), + (864, 5, 216, 10, 10), + (864, 6, 216, 10, 28), + (864, 7, 216, 10, 30), + (864, 8, 216, 10, 36), + (864, 9, 216, 10, 77), + (865, 1, 216, 20, 0), + (865, 2, 216, 20, 1), + (865, 3, 216, 20, 2), + (865, 4, 216, 20, 3), + (865, 5, 216, 20, 10), + (865, 6, 216, 20, 28), + (865, 7, 216, 20, 30), + (865, 8, 216, 20, 36), + (865, 9, 216, 20, 77), + (866, 1, 216, 30, 0), + (866, 2, 216, 30, 1), + (866, 3, 216, 30, 2), + (866, 4, 216, 30, 3), + (866, 5, 216, 30, 10), + (866, 6, 216, 30, 28), + (866, 7, 216, 30, 30), + (866, 8, 216, 30, 36), + (866, 9, 216, 30, 77), + (867, 1, 59, -3, 0), + (868, 1, 59, -6, 0), + (869, 1, 59, -9, 0), + (870, 1, 59, -12, 0), + (871, 1, 59, -15, 0), + (878, 1, 252, 10, 0), + (879, 1, 252, 20, 0), + (880, 1, 252, 30, 0), + (881, 1, 245, 10, 0), + (882, 1, 245, 20, 0), + (883, 1, 245, 30, 0), + (884, 1, 245, 40, 0), + (885, 1, 245, 50, 0), + (886, 1, 264, 576, 102), + (887, 1, 264, 720, 102), + (888, 1, 250, 10, 0), + (889, 1, 250, 20, 0), + (890, 1, 250, 30, 0), + (891, 1, 250, 40, 0), + (892, 1, 250, 50, 0), + (893, 1, 303, 2000, 2000), + (893, 2, 139, 2766, 0), + (894, 1, 303, 2500, 2500), + (894, 2, 139, 2766, 0), + (895, 1, 59, -3, 0), + (896, 1, 59, -6, 0), + (897, 1, 59, -9, 0), + (898, 1, 59, -12, 0), + (899, 1, 59, -15, 0), + (907, 1, 69, 100, 0), + (908, 1, 69, 200, 0), + (909, 1, 69, 300, 0), + (910, 1, 69, 400, 0), + (911, 1, 69, 500, 0), + (915, 1, 220, 5, 10), + (915, 2, 220, 5, 30), + (916, 1, 220, 10, 10), + (916, 2, 220, 10, 30), + (917, 1, 220, 15, 10), + (917, 2, 220, 15, 30), + (918, 1, 230, 2, 0), + (919, 1, 230, 4, 0), + (920, 1, 230, 6, 0), + (924, 1, 294, 10, 100), + (925, 1, 294, 11, 100), + (934, 1, 169, 15, -1), + (935, 1, 169, 30, -1), + (936, 1, 169, 60, -1), + (937, 1, 169, 15, 0), + (937, 2, 169, 15, 1), + (937, 3, 169, 15, 2), + (937, 4, 169, 15, 3), + (937, 5, 169, 15, 7), + (937, 6, 169, 15, 8), + (937, 7, 169, 15, 10), + (937, 8, 169, 15, 28), + (937, 9, 169, 15, 30), + (937, 10, 169, 15, 36), + (937, 11, 169, 15, 51), + (938, 1, 169, 40, 0), + (938, 2, 169, 40, 1), + (938, 3, 169, 40, 2), + (938, 4, 169, 40, 3), + (938, 5, 169, 40, 7), + (938, 6, 169, 40, 8), + (938, 7, 169, 40, 10), + (938, 8, 169, 40, 28), + (938, 9, 169, 40, 30), + (938, 10, 169, 40, 36), + (938, 11, 169, 30, 51), + (939, 1, 169, 75, 0), + (939, 2, 169, 75, 1), + (939, 3, 169, 75, 2), + (939, 4, 169, 75, 3), + (939, 5, 169, 75, 7), + (939, 6, 169, 75, 8), + (939, 7, 169, 75, 10), + (939, 8, 169, 75, 28), + (939, 9, 169, 75, 30), + (939, 10, 169, 75, 36), + (939, 11, 169, 60, 51), + (940, 1, 169, 15, 0), + (940, 2, 169, 15, 1), + (940, 3, 169, 15, 2), + (940, 4, 169, 15, 3), + (940, 5, 169, 15, 7), + (940, 6, 169, 15, 8), + (940, 7, 169, 15, 10), + (940, 8, 169, 15, 28), + (940, 9, 169, 15, 30), + (940, 10, 169, 15, 36), + (940, 11, 169, 15, 51), + (940, 12, 169, 15, 77), + (941, 1, 169, 40, 0), + (941, 2, 169, 40, 1), + (941, 3, 169, 40, 2), + (941, 4, 169, 40, 3), + (941, 5, 169, 30, 7), + (941, 6, 169, 40, 8), + (941, 7, 169, 40, 10), + (941, 8, 169, 40, 28), + (941, 9, 169, 40, 30), + (941, 10, 169, 40, 36), + (941, 11, 169, 40, 51), + (941, 12, 169, 40, 77), + (942, 1, 169, 75, 0), + (942, 2, 169, 75, 1), + (942, 3, 169, 75, 2), + (942, 4, 169, 75, 3), + (942, 5, 169, 60, 7), + (942, 6, 169, 75, 8), + (942, 7, 169, 75, 10), + (942, 8, 169, 75, 28), + (942, 9, 169, 75, 30), + (942, 10, 169, 75, 36), + (942, 11, 169, 75, 51), + (942, 12, 169, 75, 77), + (943, 1, 169, 146, -1), + (944, 1, 169, 172, -1), + (945, 1, 169, 198, -1), + (946, 1, 169, 175, 0), + (946, 2, 169, 175, 1), + (946, 3, 169, 175, 2), + (946, 4, 169, 175, 3), + (946, 5, 169, 175, 7), + (946, 6, 169, 175, 8), + (946, 7, 169, 175, 10), + (946, 8, 169, 175, 28), + (946, 9, 169, 175, 30), + (946, 10, 169, 175, 36), + (946, 11, 169, 146, 51), + (947, 1, 169, 200, 0), + (947, 2, 169, 200, 1), + (947, 3, 169, 200, 2), + (947, 4, 169, 200, 3), + (947, 5, 169, 200, 7), + (947, 6, 169, 200, 8), + (947, 7, 169, 200, 10), + (947, 8, 169, 200, 28), + (947, 9, 169, 200, 30), + (947, 10, 169, 200, 36), + (947, 11, 169, 172, 51), + (948, 1, 169, 225, 0), + (948, 2, 169, 225, 1), + (948, 3, 169, 225, 2), + (948, 4, 169, 225, 3), + (948, 5, 169, 225, 7), + (948, 6, 169, 225, 8), + (948, 7, 169, 225, 10), + (948, 8, 169, 225, 28), + (948, 9, 169, 225, 30), + (948, 10, 169, 225, 36), + (948, 11, 169, 198, 51), + (949, 1, 169, 175, 0), + (949, 2, 169, 175, 1), + (949, 3, 169, 175, 2), + (949, 4, 169, 175, 3), + (949, 5, 169, 161, 7), + (949, 6, 169, 175, 8), + (949, 7, 169, 175, 10), + (949, 8, 169, 175, 28), + (949, 9, 169, 175, 30), + (949, 10, 169, 175, 36), + (949, 11, 169, 175, 51), + (949, 12, 169, 175, 77), + (950, 1, 169, 200, 0), + (950, 2, 169, 200, 1), + (950, 3, 169, 200, 2), + (950, 4, 169, 200, 3), + (950, 5, 169, 187, 7), + (950, 6, 169, 200, 8), + (950, 7, 169, 200, 10), + (950, 8, 169, 200, 28), + (950, 9, 169, 200, 30), + (950, 10, 169, 200, 36), + (950, 11, 169, 200, 51), + (950, 12, 169, 200, 77), + (951, 1, 169, 225, 0), + (951, 2, 169, 225, 1), + (951, 3, 169, 225, 2), + (951, 4, 169, 225, 3), + (951, 5, 169, 213, 7), + (951, 6, 169, 225, 8), + (951, 7, 169, 225, 10), + (951, 8, 169, 225, 28), + (951, 9, 169, 225, 30), + (951, 10, 169, 225, 36), + (951, 11, 169, 225, 51), + (951, 12, 169, 225, 77), + (952, 1, 214, 125, 0), + (953, 1, 214, 250, 0), + (954, 1, 214, 375, 0), + (955, 1, 262, 10, 4), + (955, 2, 262, 10, 5), + (956, 1, 262, 20, 4), + (956, 2, 262, 20, 5), + (957, 1, 262, 30, 4), + (957, 2, 262, 30, 5), + (958, 1, 262, 40, 4), + (958, 2, 262, 40, 5), + (959, 1, 262, 50, 4), + (959, 2, 262, 50, 5), + (962, 1, 232, 2, 4544), + (963, 1, 232, 4, 4544), + (964, 1, 232, 6, 4544), + (965, 1, 232, 8, 4544), + (966, 1, 232, 10, 4544), + (975, 1, 264, 864, 102), + (976, 1, 131, 100, 0), + (976, 2, 137, 33, 0), + (978, 1, 14, 1, 0), + (978, 2, 246, 350, 0), + (979, 1, 268, 10, 63), + (980, 1, 268, 25, 63), + (981, 1, 268, 50, 63), + (982, 1, 268, 10, 60), + (983, 1, 268, 25, 60), + (984, 1, 268, 50, 60), + (985, 1, 268, 10, 65), + (986, 1, 268, 25, 65), + (987, 1, 268, 50, 65), + (988, 1, 268, 10, 64), + (989, 1, 268, 25, 64), + (990, 1, 268, 50, 64), + (991, 1, 268, 10, 69), + (992, 1, 268, 25, 69), + (993, 1, 268, 50, 69), + (994, 1, 268, 10, 61), + (995, 1, 268, 25, 61), + (996, 1, 268, 50, 61), + (997, 1, 331, 5, 0), + (998, 1, 331, 15, 0), + (999, 1, 331, 25, 0), + (1001, 1, 262, 30, 0), + (1001, 2, 262, 30, 1), + (1001, 3, 262, 30, 2), + (1001, 4, 262, 30, 3), + (1001, 5, 262, 30, 4), + (1001, 6, 262, 30, 5), + (1001, 7, 262, 30, 6), + (1002, 1, 262, 35, 0), + (1002, 2, 262, 35, 1), + (1002, 3, 262, 35, 2), + (1002, 4, 262, 35, 3), + (1002, 5, 262, 35, 4), + (1002, 6, 262, 35, 5), + (1002, 7, 262, 35, 6), + (1003, 1, 262, 40, 0), + (1003, 2, 262, 40, 1), + (1003, 3, 262, 40, 2), + (1003, 4, 262, 40, 3), + (1003, 5, 262, 40, 4), + (1003, 6, 262, 40, 5), + (1003, 7, 262, 40, 6), + (1004, 1, 262, 45, 0), + (1004, 2, 262, 45, 1), + (1004, 3, 262, 45, 2), + (1004, 4, 262, 45, 3), + (1004, 5, 262, 45, 4), + (1004, 6, 262, 45, 5), + (1004, 7, 262, 45, 6), + (1005, 1, 262, 50, 0), + (1005, 2, 262, 50, 1), + (1005, 3, 262, 50, 2), + (1005, 4, 262, 50, 3), + (1005, 5, 262, 50, 4), + (1005, 6, 262, 50, 5), + (1005, 7, 262, 50, 6), + (1006, 1, 262, 5, 7), + (1006, 2, 262, 5, 8), + (1006, 3, 262, 5, 9), + (1006, 4, 262, 5, 10), + (1006, 5, 262, 5, 11), + (1007, 1, 262, 10, 7), + (1007, 2, 262, 10, 8), + (1007, 3, 262, 10, 9), + (1007, 4, 262, 10, 10), + (1007, 5, 262, 10, 11), + (1008, 1, 262, 15, 7), + (1008, 2, 262, 15, 8), + (1008, 3, 262, 15, 9), + (1008, 4, 262, 15, 10), + (1008, 5, 262, 15, 11), + (1009, 1, 262, 20, 7), + (1009, 2, 262, 20, 8), + (1009, 3, 262, 20, 9), + (1009, 4, 262, 20, 10), + (1009, 5, 262, 20, 11), + (1010, 1, 262, 25, 7), + (1010, 2, 262, 25, 8), + (1010, 3, 262, 25, 9), + (1010, 4, 262, 25, 10), + (1010, 5, 262, 25, 11), + (1011, 1, 262, 8, 7), + (1011, 2, 262, 8, 8), + (1011, 3, 262, 8, 9), + (1011, 4, 262, 8, 10), + (1011, 5, 262, 8, 11), + (1012, 1, 262, 16, 7), + (1012, 2, 262, 16, 8), + (1012, 3, 262, 16, 9), + (1012, 4, 262, 16, 10), + (1012, 5, 262, 16, 11), + (1013, 1, 262, 24, 7), + (1013, 2, 262, 24, 8), + (1013, 3, 262, 24, 9), + (1013, 4, 262, 24, 10), + (1013, 5, 262, 24, 11), + (1014, 1, 262, 32, 7), + (1014, 2, 262, 32, 8), + (1014, 3, 262, 32, 9), + (1014, 4, 262, 32, 10), + (1014, 5, 262, 32, 11), + (1016, 1, 262, 50, 7), + (1016, 2, 262, 50, 8), + (1016, 3, 262, 50, 9), + (1016, 4, 262, 50, 10), + (1016, 5, 262, 50, 11), + (1021, 1, 327, 1, 0), + (1022, 1, 327, 2, 0), + (1023, 1, 327, 3, 0), + (1024, 1, 327, 4, 0), + (1025, 1, 327, 5, 0), + (1026, 1, 328, 50, 0), + (1027, 1, 328, 100, 0), + (1028, 1, 328, 150, 0), + (1029, 1, 328, 200, 0), + (1030, 1, 328, 250, 0), + (1031, 1, 0, 6, 0), + (1032, 1, 0, 7, 0), + (1033, 1, 0, 8, 0), + (1034, 1, 0, 9, 0), + (1035, 1, 0, 10, 0), + (1036, 1, 189, 4, 0), + (1037, 1, 189, 5, 0), + (1038, 1, 189, 6, 0), + (1041, 1, 330, 25, 0), + (1041, 2, 330, 25, 1), + (1041, 3, 330, 25, 2), + (1041, 4, 330, 25, 3), + (1041, 5, 330, 25, 28), + (1041, 6, 330, 25, 36), + (1041, 7, 330, 25, 77), + (1042, 1, 330, 50, 0), + (1042, 2, 330, 50, 1), + (1042, 3, 330, 50, 2), + (1042, 4, 330, 50, 3), + (1042, 5, 330, 50, 28), + (1042, 6, 330, 50, 36), + (1042, 7, 330, 50, 77), + (1043, 1, 330, 75, 0), + (1043, 2, 330, 75, 1), + (1043, 3, 330, 75, 2), + (1043, 4, 330, 75, 3), + (1043, 5, 330, 75, 28), + (1043, 6, 330, 75, 36), + (1043, 7, 330, 75, 77), + (1044, 1, 330, 25, 0), + (1044, 2, 330, 25, 1), + (1044, 3, 330, 25, 2), + (1044, 4, 330, 25, 3), + (1044, 5, 330, 25, 28), + (1044, 6, 330, 25, 36), + (1045, 1, 330, 50, 0), + (1045, 2, 330, 50, 1), + (1045, 3, 330, 50, 2), + (1045, 4, 330, 50, 3), + (1045, 5, 330, 50, 28), + (1045, 6, 330, 50, 36), + (1046, 1, 330, 75, 0), + (1046, 2, 330, 75, 1), + (1046, 3, 330, 75, 2), + (1046, 4, 330, 75, 3), + (1046, 5, 330, 75, 28), + (1046, 6, 330, 75, 36), + (1047, 1, 330, 25, 0), + (1047, 2, 330, 25, 1), + (1047, 3, 330, 25, 2), + (1047, 4, 330, 25, 3), + (1047, 5, 330, 25, 28), + (1047, 6, 330, 25, 36), + (1047, 7, 330, 25, 77), + (1048, 1, 330, 50, 0), + (1048, 2, 330, 50, 1), + (1048, 3, 330, 50, 2), + (1048, 4, 330, 50, 3), + (1048, 5, 330, 50, 28), + (1048, 6, 330, 50, 36), + (1048, 7, 330, 50, 77), + (1049, 1, 330, 75, 0), + (1049, 2, 330, 75, 1), + (1049, 3, 330, 75, 2), + (1049, 4, 330, 75, 3), + (1049, 5, 330, 75, 28), + (1049, 6, 330, 75, 36), + (1049, 7, 330, 75, 77), + (1050, 1, 330, 15, 0), + (1050, 2, 330, 15, 1), + (1050, 3, 330, 15, 2), + (1050, 4, 330, 15, 3), + (1050, 5, 330, 15, 28), + (1050, 6, 330, 15, 36), + (1050, 7, 330, 15, 77), + (1051, 1, 330, 30, 0), + (1051, 2, 330, 30, 1), + (1051, 3, 330, 30, 2), + (1051, 4, 330, 30, 3), + (1051, 5, 330, 30, 28), + (1051, 6, 330, 30, 36), + (1051, 7, 330, 30, 77), + (1052, 1, 330, 50, 0), + (1052, 2, 330, 50, 1), + (1052, 3, 330, 50, 2), + (1052, 4, 330, 50, 3), + (1052, 5, 330, 50, 28), + (1052, 6, 330, 50, 36), + (1052, 7, 330, 50, 77), + (1053, 1, 278, 560, 27200), + (1053, 2, 440, 61, 100), + (1054, 1, 278, 580, 30135), + (1054, 2, 440, 63, 100), + (1055, 1, 278, 600, 32780), + (1055, 2, 440, 65, 100), + (1056, 1, 317, 1, 0), + (1057, 1, 317, 2, 0), + (1058, 1, 317, 3, 0), + (1059, 1, 317, 4, 0), + (1060, 1, 317, 5, 0), + (1061, 1, 172, 26, 0), + (1062, 1, 172, 27, 0), + (1063, 1, 172, 28, 0), + (1064, 1, 172, 30, 0), + (1065, 1, 172, 32, 0), + (1066, 1, 259, 27, 0), + (1067, 1, 259, 29, 0), + (1068, 1, 259, 31, 0), + (1069, 1, 259, 33, 0), + (1070, 1, 259, 35, 0), + (1071, 1, 326, 1, 0), + (1072, 1, 318, 1, 0), + (1073, 1, 318, 2, 0), + (1074, 1, 318, 3, 0), + (1075, 1, 318, 4, 0), + (1076, 1, 318, 5, 0), + (1083, 1, 125, 22, 22), + (1083, 2, 137, 0, 0), + (1083, 3, 141, 1, 0), + (1083, 4, 139, -6233, 0), + (1083, 5, 139, -6265, 0), + (1083, 6, 125, 22, 22), + (1083, 7, 137, 147, 0), + (1083, 8, 141, 1, 0), + (1084, 1, 125, 25, 25), + (1084, 2, 137, 0, 0), + (1084, 3, 141, 1, 0), + (1084, 4, 139, -6233, 0), + (1084, 5, 139, -6265, 0), + (1084, 6, 125, 25, 25), + (1084, 7, 137, 147, 0), + (1084, 8, 141, 1, 0), + (1085, 1, 125, 28, 28), + (1085, 2, 137, 0, 0), + (1085, 3, 141, 1, 0), + (1085, 4, 139, -6233, 0), + (1085, 5, 139, -6265, 0), + (1085, 6, 125, 28, 28), + (1085, 7, 137, 147, 0), + (1085, 8, 141, 1, 0), + (1086, 1, 274, 18, 0), + (1087, 1, 274, 20, 0), + (1088, 1, 274, 22, 0), + (1089, 1, 268, 10, 58), + (1090, 1, 268, 25, 58), + (1091, 1, 268, 50, 58), + (1092, 1, 238, 1, 0), + (1093, 1, 304, -20, 0), + (1094, 1, 304, -40, 0), + (1095, 1, 304, -60, 0), + (1096, 1, 304, -80, 0), + (1097, 1, 304, -100, 0), + (1099, 1, 273, 12, 0), + (1100, 1, 273, 15, 0), + (1101, 1, 273, 18, 0), + (1107, 1, 294, 2, 100), + (1108, 1, 294, 4, 100), + (1109, 1, 294, 6, 100), + (1113, 1, 331, 30, 0), + (1114, 1, 331, 35, 0), + (1115, 1, 331, 40, 0), + (1122, 1, 308, 1, 0), + (1129, 1, 267, 1, 24), + (1129, 2, 267, 1, 25), + (1129, 3, 267, 1, 26), + (1130, 1, 267, 1, 18), + (1130, 2, 267, 1, 19), + (1130, 3, 267, 1, 20), + (1130, 4, 267, 1, 21), + (1130, 5, 267, 1, 22), + (1130, 6, 267, 1, 23), + (1130, 7, 267, 1, 24), + (1130, 8, 267, 1, 25), + (1130, 9, 267, 1, 26), + (1131, 1, 185, 10, 51), + (1132, 1, 185, 20, 51), + (1133, 1, 185, 30, 51), + (1134, 1, 220, 32, 74), + (1135, 1, 220, 64, 74), + (1136, 1, 220, 96, 74), + (1137, 1, 310, 180000, 0), + (1137, 2, 139, 5027, 0), + (1137, 3, 310, 180000, 0), + (1137, 4, 139, 5028, 0), + (1137, 5, 310, 180000, 0), + (1137, 6, 139, 5029, 0), + (1137, 7, 310, 180000, 0), + (1137, 8, 139, 5030, 0), + (1137, 9, 310, 180000, 0), + (1137, 10, 139, 5031, 0), + (1137, 11, 310, 180000, 0), + (1137, 12, 139, 5032, 0), + (1137, 13, 310, 180000, 0), + (1137, 14, 139, 8476, 0), + (1138, 1, 310, 360000, 0), + (1138, 2, 139, 5027, 0), + (1138, 3, 310, 360000, 0), + (1138, 4, 139, 5028, 0), + (1138, 5, 310, 360000, 0), + (1138, 6, 139, 5029, 0), + (1138, 7, 310, 360000, 0), + (1138, 8, 139, 5030, 0), + (1138, 9, 310, 360000, 0), + (1138, 10, 139, 5031, 0), + (1138, 11, 310, 360000, 0), + (1138, 12, 139, 5032, 0), + (1138, 13, 310, 360000, 0), + (1138, 14, 139, 8476, 0), + (1139, 1, 310, 540000, 0), + (1139, 2, 139, 5027, 0), + (1139, 3, 310, 540000, 0), + (1139, 4, 139, 5028, 0), + (1139, 5, 310, 540000, 0), + (1139, 6, 139, 5029, 0), + (1139, 7, 310, 540000, 0), + (1139, 8, 139, 5030, 0), + (1139, 9, 310, 540000, 0), + (1139, 10, 139, 5031, 0), + (1139, 11, 310, 540000, 0), + (1139, 12, 139, 5032, 0), + (1139, 13, 310, 540000, 0), + (1139, 14, 139, 8476, 0), + (1140, 1, 216, 10, 51), + (1141, 1, 216, 20, 51), + (1142, 1, 216, 30, 51), + (1155, 1, 128, 25, 0), + (1155, 2, 139, 5027, 0), + (1155, 3, 128, 25, 0), + (1155, 4, 139, 5028, 0), + (1155, 5, 128, 25, 0), + (1155, 6, 139, 5029, 0), + (1155, 7, 128, 25, 0), + (1155, 8, 139, 5030, 0), + (1155, 9, 128, 25, 0), + (1155, 10, 139, 5031, 0), + (1155, 11, 128, 25, 0), + (1155, 12, 139, 5032, 0), + (1155, 13, 128, 25, 0), + (1155, 14, 139, 8476, 0), + (1156, 1, 128, 50, 0), + (1156, 2, 139, 5027, 0), + (1156, 3, 128, 50, 0), + (1156, 4, 139, 5028, 0), + (1156, 5, 128, 50, 0), + (1156, 6, 139, 5029, 0), + (1156, 7, 128, 50, 0), + (1156, 8, 139, 5030, 0), + (1156, 9, 128, 50, 0), + (1156, 10, 139, 5031, 0), + (1156, 11, 128, 50, 0), + (1156, 12, 139, 5032, 0), + (1156, 13, 128, 50, 0), + (1156, 14, 139, 8476, 0), + (1157, 1, 128, 100, 0), + (1157, 2, 139, 5027, 0), + (1157, 3, 128, 100, 0), + (1157, 4, 139, 5028, 0), + (1157, 5, 128, 100, 0), + (1157, 6, 139, 5029, 0), + (1157, 7, 128, 100, 0), + (1157, 8, 139, 5030, 0), + (1157, 9, 128, 100, 0), + (1157, 10, 139, 5031, 0), + (1157, 11, 128, 100, 0), + (1157, 12, 139, 5032, 0), + (1157, 13, 128, 100, 0), + (1157, 14, 139, 8476, 0), + (1158, 1, 220, 128, 74), + (1159, 1, 220, 160, 74), + (1160, 1, 220, 192, 74), + (1161, 1, 220, 224, 74), + (1162, 1, 220, 256, 74), + (1163, 1, 279, 23, 0), + (1164, 1, 279, 25, 0), + (1165, 1, 279, 27, 0), + (1166, 1, 224, 20, 74), + (1166, 2, 173, 1, 0), + (1167, 1, 224, 35, 74), + (1167, 2, 173, 1, 0), + (1168, 1, 224, 50, 74), + (1168, 2, 173, 2, 0), + (1172, 1, 292, 50, 0), + (1173, 1, 292, 55, 0), + (1174, 1, 292, 60, 0), + (1181, 1, 305, -20, 0), + (1182, 1, 305, -40, 0), + (1183, 1, 305, -60, 0), + (1184, 1, 305, -80, 0), + (1185, 1, 305, -100, 0), + (1186, 1, 319, 3, 0), + (1187, 1, 319, 6, 0), + (1188, 1, 319, 10, 0), + (1196, 1, 220, 20, 7), + (1197, 1, 220, 40, 7), + (1198, 1, 220, 60, 7), + (1199, 1, 220, 80, 7), + (1200, 1, 220, 100, 7), + (1210, 1, 294, 0, 107), + (1211, 1, 294, 0, 115), + (1212, 1, 294, 0, 125), + (1213, 1, 294, 0, 107), + (1214, 1, 294, 0, 115), + (1215, 1, 294, 0, 125), + (1216, 1, 132, 2, 2), + (1217, 1, 132, 5, 5), + (1218, 1, 132, 10, 10), + (1219, 1, 339, 3, 8105), + (1219, 2, 142, 65, 0), + (1219, 3, 311, 0, 0), + (1219, 4, 134, 70, 0), + (1219, 5, 348, 10, 0), + (1219, 6, 137, 0, 0), + (1219, 7, 339, 3, 8105), + (1219, 8, 142, 65, 0), + (1219, 9, 311, 0, 0), + (1219, 10, 134, 70, 0), + (1219, 11, 348, 10, 0), + (1219, 12, 137, 100, 0), + (1219, 13, 339, 3, 8105), + (1219, 14, 142, 65, 0), + (1219, 15, 311, 0, 0), + (1219, 16, 134, 70, 0), + (1219, 17, 348, 10, 0), + (1219, 18, 137, 79, 0), + (1219, 19, 339, 3, 8105), + (1219, 20, 142, 65, 0), + (1219, 21, 311, 0, 0), + (1219, 22, 134, 70, 0), + (1219, 23, 348, 10, 0), + (1219, 24, 137, 147, 0), + (1220, 1, 339, 6, 8105), + (1220, 2, 142, 65, 0), + (1220, 3, 311, 0, 0), + (1220, 4, 134, 70, 0), + (1220, 5, 348, 10, 0), + (1220, 6, 137, 0, 0), + (1220, 7, 339, 6, 8105), + (1220, 8, 142, 65, 0), + (1220, 9, 311, 0, 0), + (1220, 10, 134, 70, 0), + (1220, 11, 348, 10, 0), + (1220, 12, 137, 100, 0), + (1220, 13, 339, 6, 8105), + (1220, 14, 142, 65, 0), + (1220, 15, 311, 0, 0), + (1220, 16, 134, 70, 0), + (1220, 17, 348, 10, 0), + (1220, 18, 137, 79, 0), + (1220, 19, 339, 6, 8105), + (1220, 20, 142, 65, 0), + (1220, 21, 311, 0, 0), + (1220, 22, 134, 70, 0), + (1220, 23, 348, 10, 0), + (1220, 24, 137, 147, 0), + (1221, 1, 339, 10, 8105), + (1221, 2, 142, 65, 0), + (1221, 3, 311, 0, 0), + (1221, 4, 134, 70, 0), + (1221, 5, 348, 10, 0), + (1221, 6, 137, 0, 0), + (1221, 7, 339, 10, 8105), + (1221, 8, 142, 65, 0), + (1221, 9, 311, 0, 0), + (1221, 10, 134, 70, 0), + (1221, 11, 348, 10, 0), + (1221, 12, 137, 100, 0), + (1221, 13, 339, 10, 8105), + (1221, 14, 142, 65, 0), + (1221, 15, 311, 0, 0), + (1221, 16, 134, 70, 0), + (1221, 17, 348, 10, 0), + (1221, 18, 137, 79, 0), + (1221, 19, 339, 10, 8105), + (1221, 20, 142, 65, 0), + (1221, 21, 311, 0, 0), + (1221, 22, 134, 70, 0), + (1221, 23, 348, 10, 0), + (1221, 24, 137, 147, 0), + (1230, 1, 313, 25, 0), + (1231, 1, 313, 50, 0), + (1232, 1, 313, 75, 0), + (1265, 1, 220, 40, 26), + (1265, 2, 220, 40, 30), + (1265, 3, 220, 40, 38), + (1266, 1, 220, 50, 26), + (1266, 2, 220, 50, 30), + (1266, 3, 220, 50, 38), + (1267, 1, 220, 60, 26), + (1267, 2, 220, 60, 30), + (1267, 3, 220, 60, 38), + (1268, 1, 292, 20, 0), + (1269, 1, 292, 25, 0), + (1270, 1, 292, 30, 0), + (1284, 1, 293, 15, 0), + (1285, 1, 293, 30, 0), + (1286, 1, 293, 50, 0), + (1287, 1, 320, 1, 0), + (1288, 1, 320, 3, 0), + (1289, 1, 320, 5, 0), + (1290, 1, 216, 40, 0), + (1290, 2, 216, 40, 1), + (1290, 3, 216, 40, 2), + (1290, 4, 216, 40, 3), + (1290, 5, 216, 40, 10), + (1290, 6, 216, 40, 28), + (1290, 7, 216, 40, 30), + (1290, 8, 216, 40, 36), + (1290, 9, 216, 40, 77), + (1291, 1, 216, 50, 0), + (1291, 2, 216, 50, 1), + (1291, 3, 216, 50, 2), + (1291, 4, 216, 50, 3), + (1291, 5, 216, 50, 10), + (1291, 6, 216, 50, 28), + (1291, 7, 216, 50, 30), + (1291, 8, 216, 50, 36), + (1291, 9, 216, 50, 77), + (1292, 1, 216, 60, 0), + (1292, 2, 216, 60, 1), + (1292, 3, 216, 60, 2), + (1292, 4, 216, 60, 3), + (1292, 5, 216, 60, 10), + (1292, 6, 216, 60, 28), + (1292, 7, 216, 60, 30), + (1292, 8, 216, 60, 36), + (1292, 9, 216, 60, 77), + (1296, 1, 247, 20, 53), + (1297, 1, 247, 40, 53), + (1298, 1, 247, 60, 53), + (1299, 1, 247, 80, 53), + (1300, 1, 247, 100, 53), + (1301, 1, 258, 20, 0), + (1302, 1, 258, 25, 0), + (1303, 1, 258, 30, 0), + (1304, 1, 216, 50, 8), + (1305, 1, 216, 100, 8), + (1306, 1, 216, 150, 8), + (1307, 1, 325, 10, 0), + (1308, 1, 325, 20, 0), + (1309, 1, 325, 30, 0), + (1310, 1, 325, 40, 0), + (1311, 1, 325, 50, 0), + (1313, 1, 85, 6037, 0), + (1314, 1, 85, 6038, 0), + (1315, 1, 85, 6039, 0), + (1316, 1, 302, 216, 216), + (1316, 2, 385, 99, 0), + (1317, 1, 302, 233, 233), + (1317, 2, 385, 99, 0), + (1318, 1, 302, 250, 250), + (1318, 2, 385, 99, 0), + (1319, 1, 274, 16, 0), + (1320, 1, 274, 18, 0), + (1321, 1, 274, 20, 0), + (1361, 1, 159, 10, 0), + (1361, 2, 262, 10, 0), + (1361, 3, 262, 10, 1), + (1361, 4, 262, 10, 2), + (1361, 5, 262, 10, 3), + (1361, 6, 262, 10, 4), + (1361, 7, 262, 10, 5), + (1361, 8, 262, 10, 6), + (1362, 1, 214, 300, 0), + (1362, 2, 97, 200, 0), + (1362, 3, 190, 200, 0), + (1363, 1, 327, 1, 0), + (1364, 1, 273, 1, 0), + (1364, 2, 274, 1, 0), + (1364, 3, 294, 1, 100), + (1364, 4, 169, 40, 0), + (1364, 5, 169, 40, 1), + (1364, 6, 169, 40, 2), + (1364, 7, 169, 40, 3), + (1364, 8, 169, 40, 8), + (1364, 9, 169, 40, 10), + (1364, 10, 169, 40, 26), + (1364, 11, 169, 40, 28), + (1364, 12, 169, 40, 30), + (1364, 13, 169, 40, 36), + (1364, 14, 169, 40, 74), + (1365, 1, 180, 2, 0), + (1366, 1, 159, 10, 0), + (1366, 2, 262, 10, 0), + (1366, 3, 262, 10, 1), + (1366, 4, 262, 10, 2), + (1366, 5, 262, 10, 3), + (1366, 6, 262, 10, 4), + (1366, 7, 262, 10, 5), + (1366, 8, 262, 10, 6), + (1367, 1, 214, 300, 0), + (1367, 2, 97, 200, 0), + (1367, 3, 190, 200, 0), + (1368, 1, 327, 1, 0), + (1369, 1, 273, 1, 0), + (1369, 2, 274, 1, 0), + (1369, 3, 294, 1, 100), + (1369, 4, 169, 40, 0), + (1369, 5, 169, 40, 1), + (1369, 6, 169, 40, 2), + (1369, 7, 169, 40, 3), + (1369, 8, 169, 40, 8), + (1369, 9, 169, 40, 10), + (1369, 10, 169, 40, 26), + (1369, 11, 169, 40, 28), + (1369, 12, 169, 40, 30), + (1369, 13, 169, 40, 36), + (1369, 14, 169, 40, 74), + (1370, 1, 180, 2, 0), + (1378, 1, 10, 0, 0), + (1379, 1, 10, 0, 0), + (1380, 1, 10, 0, 0), + (1382, 1, 10, 0, 0), + (1388, 2, 13, 1, 0), + (1389, 1, 328, 300, 0), + (1390, 1, 328, 350, 0), + (1391, 1, 328, 400, 0), + (1392, 1, 328, 450, 0), + (1393, 1, 328, 500, 0), + (1394, 1, 172, 33, 0), + (1395, 1, 172, 34, 0), + (1396, 1, 172, 35, 0), + (1397, 1, 172, 37, 0), + (1398, 1, 172, 39, 0), + (1399, 1, 259, 37, 0), + (1400, 1, 259, 39, 0), + (1401, 1, 259, 41, 0), + (1402, 1, 259, 43, 0), + (1403, 1, 259, 45, 0), + (1414, 1, 264, 432, 451), + (1415, 1, 264, 864, 451), + (1416, 1, 264, 1296, 451), + (1417, 1, 264, 1728, 451), + (1418, 1, 264, 2160, 451), + (1420, 1, 282, 20, 0), + (1421, 1, 282, 40, 0), + (1422, 1, 282, 60, 0), + (1423, 1, 282, 80, 0), + (1424, 1, 282, 100, 0), + (1430, 1, 280, 27, 0), + (1431, 1, 280, 34, 0), + (1432, 1, 280, 41, 0), + (1435, 1, 339, 3, 8105), + (1435, 2, 142, 65, 0), + (1435, 3, 311, 0, 0), + (1435, 4, 134, 70, 0), + (1435, 5, 348, 10, 0), + (1435, 6, 137, 0, 0), + (1435, 7, 339, 3, 8105), + (1435, 8, 142, 65, 0), + (1435, 9, 311, 0, 0), + (1435, 10, 134, 70, 0), + (1435, 11, 348, 10, 0), + (1435, 12, 137, 100, 0), + (1435, 13, 339, 3, 8105), + (1435, 14, 142, 65, 0), + (1435, 15, 311, 0, 0), + (1435, 16, 134, 70, 0), + (1435, 17, 348, 10, 0), + (1435, 18, 137, 79, 0), + (1435, 19, 339, 3, 8105), + (1435, 20, 142, 65, 0), + (1435, 21, 311, 0, 0), + (1435, 22, 134, 70, 0), + (1435, 23, 348, 10, 0), + (1435, 24, 137, 147, 0), + (1436, 1, 339, 6, 8105), + (1436, 2, 142, 65, 0), + (1436, 3, 311, 0, 0), + (1436, 4, 134, 70, 0), + (1436, 5, 348, 10, 0), + (1436, 6, 137, 0, 0), + (1436, 7, 339, 6, 8105), + (1436, 8, 142, 65, 0), + (1436, 9, 311, 0, 0), + (1436, 10, 134, 70, 0), + (1436, 11, 348, 10, 0), + (1436, 12, 137, 100, 0), + (1436, 13, 339, 6, 8105), + (1436, 14, 142, 65, 0), + (1436, 15, 311, 0, 0), + (1436, 16, 134, 70, 0), + (1436, 17, 348, 10, 0), + (1436, 18, 137, 79, 0), + (1436, 19, 339, 6, 8105), + (1436, 20, 142, 65, 0), + (1436, 21, 311, 0, 0), + (1436, 22, 134, 70, 0), + (1436, 23, 348, 10, 0), + (1436, 24, 137, 147, 0), + (1437, 1, 339, 10, 8105), + (1437, 2, 142, 65, 0), + (1437, 3, 311, 0, 0), + (1437, 4, 134, 70, 0), + (1437, 5, 348, 10, 0), + (1437, 6, 137, 0, 0), + (1437, 7, 339, 10, 8105), + (1437, 8, 142, 65, 0), + (1437, 9, 311, 0, 0), + (1437, 10, 134, 70, 0), + (1437, 11, 348, 10, 0), + (1437, 12, 137, 100, 0), + (1437, 13, 339, 10, 8105), + (1437, 14, 142, 65, 0), + (1437, 15, 311, 0, 0), + (1437, 16, 134, 70, 0), + (1437, 17, 348, 10, 0), + (1437, 18, 137, 79, 0), + (1437, 19, 339, 10, 8105), + (1437, 20, 142, 65, 0), + (1437, 21, 311, 0, 0), + (1437, 22, 134, 70, 0), + (1437, 23, 348, 10, 0), + (1437, 24, 137, 147, 0), + (1453, 1, 131, 10, 10), + (1453, 2, 137, 32, 0), + (1453, 3, 311, 1, 0), + (1454, 1, 131, 20, 20), + (1454, 2, 137, 32, 0), + (1454, 3, 311, 1, 0), + (1455, 1, 131, 30, 30), + (1455, 2, 137, 32, 0), + (1455, 3, 311, 1, 0), + (1456, 1, 131, 40, 40), + (1456, 2, 137, 32, 0), + (1456, 3, 311, 1, 0), + (1457, 1, 131, 50, 50), + (1457, 2, 137, 32, 0), + (1457, 3, 311, 1, 0), + (1467, 1, 280, 27, 0), + (1468, 1, 280, 34, 0), + (1469, 1, 280, 41, 0), + (1471, 1, 264, 90, 362), + (1472, 1, 264, 180, 362), + (1473, 1, 264, 270, 362), + (1474, 1, 264, 360, 362), + (1475, 1, 264, 450, 362), + (1483, 1, 294, 0, 133), + (1484, 1, 294, 0, 141), + (1485, 1, 294, 0, 150), + (1486, 1, 339, 1, 8165), + (1486, 2, 138, 1, 0), + (1486, 3, 141, 1, 0), + (1486, 4, 142, 60, 0), + (1486, 5, 137, 0, 0), + (1486, 6, 311, 0, 0), + (1486, 7, 134, 75, 0), + (1486, 8, 139, -265, 0), + (1486, 9, 139, -754, 0), + (1486, 10, 139, -1332, 0), + (1486, 11, 139, -1572, 0), + (1486, 12, 139, -2749, 0), + (1486, 13, 139, -4979, 0), + (1486, 14, 139, -5418, 0), + (1486, 15, 139, -5403, 0), + (1486, 16, 348, 10, 0), + (1487, 1, 339, 3, 8166), + (1487, 2, 138, 1, 0), + (1487, 3, 141, 1, 0), + (1487, 4, 142, 60, 0), + (1487, 5, 137, 0, 0), + (1487, 6, 311, 0, 0), + (1487, 7, 134, 75, 0), + (1487, 8, 139, -265, 0), + (1487, 9, 139, -754, 0), + (1487, 10, 139, -1332, 0), + (1487, 11, 139, -1572, 0), + (1487, 12, 139, -2749, 0), + (1487, 13, 139, -4979, 0), + (1487, 14, 139, -5418, 0), + (1487, 15, 139, -5403, 0), + (1487, 16, 348, 10, 0), + (1488, 1, 339, 5, 8167), + (1488, 2, 138, 1, 0), + (1488, 3, 141, 1, 0), + (1488, 4, 142, 60, 0), + (1488, 5, 137, 0, 0), + (1488, 6, 311, 0, 0), + (1488, 7, 134, 75, 0), + (1488, 8, 139, -265, 0), + (1488, 9, 139, -754, 0), + (1488, 10, 139, -1332, 0), + (1488, 11, 139, -1572, 0), + (1488, 12, 139, -2749, 0), + (1488, 13, 139, -4979, 0), + (1488, 14, 139, -5418, 0), + (1488, 15, 139, -5403, 0), + (1488, 16, 348, 10, 0), + (1489, 1, 339, 7, 8168), + (1489, 2, 138, 1, 0), + (1489, 3, 141, 1, 0), + (1489, 4, 142, 60, 0), + (1489, 5, 137, 0, 0), + (1489, 6, 311, 0, 0), + (1489, 7, 134, 75, 0), + (1489, 8, 139, -265, 0), + (1489, 9, 139, -754, 0), + (1489, 10, 139, -1332, 0), + (1489, 11, 139, -1572, 0), + (1489, 12, 139, -2749, 0), + (1489, 13, 139, -4979, 0), + (1489, 14, 139, -5418, 0), + (1489, 15, 139, -5403, 0), + (1489, 16, 348, 10, 0), + (1490, 1, 339, 9, 8169), + (1490, 2, 138, 1, 0), + (1490, 3, 141, 1, 0), + (1490, 4, 142, 60, 0), + (1490, 5, 137, 0, 0), + (1490, 6, 311, 0, 0), + (1490, 7, 134, 75, 0), + (1490, 8, 139, -265, 0), + (1490, 9, 139, -754, 0), + (1490, 10, 139, -1332, 0), + (1490, 11, 139, -1572, 0), + (1490, 12, 139, -2749, 0), + (1490, 13, 139, -4979, 0), + (1490, 14, 139, -5418, 0), + (1490, 15, 139, -5403, 0), + (1490, 16, 348, 10, 0), + (1504, 1, 287, 2, 0), + (1504, 2, 385, 2754, 1), + (1505, 1, 287, 4, 0), + (1505, 2, 385, 2754, 1), + (1506, 1, 287, 6, 0), + (1506, 2, 385, 2754, 1), + (1511, 1, 264, 60, 175), + (1511, 2, 264, 60, 792), + (1512, 1, 264, 120, 175), + (1512, 2, 264, 120, 792), + (1513, 1, 264, 180, 175), + (1513, 2, 264, 180, 792), + (1514, 1, 273, 2, 0), + (1515, 1, 273, 4, 0), + (1516, 1, 273, 6, 0), + (1524, 1, 219, 260, 1800), + (1525, 1, 219, 300, 2000), + (1526, 1, 219, 280, 1900), + (1528, 1, 239, 30, 0), + (1529, 1, 239, 35, 0), + (1530, 1, 239, 40, 0), + (1531, 1, 239, 45, 0), + (1532, 1, 239, 50, 0), + (1533, 1, 266, 11, 0), + (1534, 1, 266, 14, 0), + (1535, 1, 266, 17, 0), + (1536, 1, 266, 11, 0), + (1537, 1, 266, 14, 0), + (1538, 1, 266, 17, 0), + (1539, 1, 252, 37, 0), + (1540, 1, 252, 44, 0), + (1541, 1, 252, 50, 0), + (1543, 1, 220, 10, 8), + (1544, 1, 220, 20, 8), + (1545, 1, 220, 30, 8), + (1546, 1, 264, 120, 420), + (1547, 1, 264, 240, 420), + (1548, 1, 264, 360, 420), + (1549, 1, 293, 25, 0), + (1550, 1, 293, 50, 0), + (1551, 1, 293, 75, 0), + (1552, 1, 271, 5, 0), + (1553, 1, 271, 10, 0), + (1554, 1, 271, 15, 0), + (1555, 1, 264, 240, 359), + (1556, 1, 264, 480, 359), + (1557, 1, 264, 720, 359), + (1563, 1, 225, 18, 0), + (1564, 1, 225, 21, 0), + (1565, 1, 225, 24, 0), + (1566, 1, 225, 27, 0), + (1567, 1, 225, 30, 0), + (1572, 1, 339, 2, 8261), + (1572, 2, 138, 0, 0), + (1572, 3, 137, 31, 0), + (1572, 4, 311, 0, 0), + (1573, 1, 339, 4, 8262), + (1573, 2, 138, 0, 0), + (1573, 3, 137, 31, 0), + (1573, 4, 311, 0, 0), + (1574, 1, 339, 6, 8263), + (1574, 2, 138, 0, 0), + (1574, 3, 137, 31, 0), + (1574, 4, 311, 0, 0), + (1575, 1, 339, 8, 8264), + (1575, 2, 138, 0, 0), + (1575, 3, 137, 31, 0), + (1575, 4, 311, 0, 0), + (1576, 1, 339, 10, 8265), + (1576, 2, 138, 0, 0), + (1576, 3, 137, 31, 0), + (1576, 4, 311, 0, 0), + (1577, 1, 274, 3, 0), + (1578, 1, 274, 6, 0), + (1579, 1, 274, 10, 0), + (1583, 1, 264, 360, 300), + (1584, 1, 264, 720, 300), + (1585, 1, 264, 1080, 300), + (1586, 1, 264, 1440, 300), + (1587, 1, 264, 1800, 300), + (1588, 1, 344, 50, 0), + (1589, 1, 344, 100, 0), + (1590, 1, 344, 150, 0), + (1591, 1, 293, 25, 0), + (1592, 1, 341, 10, 0), + (1593, 1, 341, 20, 0), + (1594, 1, 341, 30, 0), + (1595, 1, 341, 40, 0), + (1596, 1, 341, 50, 0), + (1601, 1, 217, 0, 35200), + (1601, 2, 346, 60, 0), + (1602, 1, 217, 0, 42440), + (1602, 2, 346, 62, 0), + (1603, 1, 217, 0, 46480), + (1603, 2, 346, 64, 0), + (1604, 1, 439, 0, 32000), + (1604, 2, 345, 59, 0), + (1605, 1, 439, 0, 35200), + (1605, 2, 345, 60, 0), + (1606, 1, 439, 0, 42440), + (1606, 2, 345, 61, 0), + (1608, 1, 347, 2, 0), + (1609, 1, 347, 4, 0), + (1610, 1, 347, 6, 0), + (1611, 1, 282, 20, 0), + (1612, 1, 282, 40, 0), + (1613, 1, 282, 60, 0), + (1614, 1, 282, 80, 0), + (1615, 1, 282, 100, 0), + (1616, 1, 279, 7, 0), + (1617, 1, 279, 11, 0), + (1618, 1, 279, 15, 0), + (1619, 1, 279, 17, 0), + (1620, 1, 279, 19, 0), + (1621, 1, 177, 20, -1), + (1622, 1, 177, 22, -1), + (1623, 1, 177, 24, -1), + (1624, 1, 177, 20, -1), + (1625, 1, 177, 22, -1), + (1626, 1, 177, 24, -1), + (1627, 1, 271, 5, 0), + (1628, 1, 271, 10, 0), + (1629, 1, 271, 15, 0), + (1633, 1, 225, 18, 0), + (1634, 1, 225, 21, 0), + (1635, 1, 225, 24, 0), + (1636, 1, 225, 27, 0), + (1637, 1, 225, 30, 0), + (1641, 1, 359, 100, 0), + (1642, 1, 359, 60, 0), + (1648, 1, 339, 10, 8105), + (1648, 2, 142, 65, 0), + (1648, 3, 311, 0, 0), + (1648, 4, 134, 70, 0), + (1648, 5, 348, 10, 0), + (1648, 6, 137, 0, 0), + (1648, 7, 339, 10, 8105), + (1648, 8, 142, 65, 0), + (1648, 9, 311, 0, 0), + (1648, 10, 134, 70, 0), + (1648, 11, 348, 10, 0), + (1648, 12, 137, 100, 0), + (1648, 13, 339, 10, 8105), + (1648, 14, 142, 65, 0), + (1648, 15, 311, 0, 0), + (1648, 16, 134, 70, 0), + (1648, 17, 348, 10, 0), + (1648, 18, 137, 79, 0), + (1648, 19, 339, 10, 8105), + (1648, 20, 142, 65, 0), + (1648, 21, 311, 0, 0), + (1648, 22, 134, 70, 0), + (1648, 23, 348, 10, 0), + (1648, 24, 137, 147, 0), + (1648, 25, 339, 10, 11404), + (1648, 26, 142, 71, 0), + (1648, 27, 311, 0, 0), + (1648, 28, 134, 75, 0), + (1648, 29, 348, 10, 0), + (1648, 30, 137, 0, 0), + (1648, 31, 339, 10, 11404), + (1648, 32, 142, 71, 0), + (1648, 33, 311, 0, 0), + (1648, 34, 134, 75, 0), + (1648, 35, 348, 10, 0), + (1648, 36, 137, 100, 0), + (1648, 37, 339, 10, 11404), + (1648, 38, 142, 71, 0), + (1648, 39, 311, 0, 0), + (1648, 40, 134, 75, 0), + (1648, 41, 348, 10, 0), + (1648, 42, 137, 79, 0), + (1648, 43, 339, 10, 11404), + (1648, 44, 142, 71, 0), + (1648, 45, 311, 0, 0), + (1648, 46, 134, 75, 0), + (1648, 47, 348, 10, 0), + (1648, 48, 137, 147, 0), + (1649, 1, 339, 10, 8105), + (1649, 2, 142, 65, 0), + (1649, 3, 311, 0, 0), + (1649, 4, 134, 70, 0), + (1649, 5, 348, 10, 0), + (1649, 6, 137, 0, 0), + (1649, 7, 339, 10, 8105), + (1649, 8, 142, 65, 0), + (1649, 9, 311, 0, 0), + (1649, 10, 134, 70, 0), + (1649, 11, 348, 10, 0), + (1649, 12, 137, 100, 0), + (1649, 13, 339, 10, 8105), + (1649, 14, 142, 65, 0), + (1649, 15, 311, 0, 0), + (1649, 16, 134, 70, 0), + (1649, 17, 348, 10, 0), + (1649, 18, 137, 79, 0), + (1649, 19, 339, 10, 8105), + (1649, 20, 142, 65, 0), + (1649, 21, 311, 0, 0), + (1649, 22, 134, 70, 0), + (1649, 23, 348, 10, 0), + (1649, 24, 137, 147, 0), + (1649, 25, 339, 10, 11404), + (1649, 26, 142, 71, 0), + (1649, 27, 311, 0, 0), + (1649, 28, 134, 75, 0), + (1649, 29, 348, 10, 0), + (1649, 30, 137, 0, 0), + (1649, 31, 339, 10, 11404), + (1649, 32, 142, 71, 0), + (1649, 33, 311, 0, 0), + (1649, 34, 134, 75, 0), + (1649, 35, 348, 10, 0), + (1649, 36, 137, 100, 0), + (1649, 37, 339, 10, 11404), + (1649, 38, 142, 71, 0), + (1649, 39, 311, 0, 0), + (1649, 40, 134, 75, 0), + (1649, 41, 348, 10, 0), + (1649, 42, 137, 79, 0), + (1649, 43, 339, 10, 11404), + (1649, 44, 142, 71, 0), + (1649, 45, 311, 0, 0), + (1649, 46, 134, 75, 0), + (1649, 47, 348, 10, 0), + (1649, 48, 137, 147, 0), + (1649, 49, 339, 10, 13199), + (1649, 50, 142, 76, 0), + (1649, 51, 311, 0, 0), + (1649, 52, 134, 80, 0), + (1649, 53, 348, 10, 0), + (1649, 54, 137, 0, 0), + (1649, 55, 339, 10, 13199), + (1649, 56, 142, 76, 0), + (1649, 57, 311, 0, 0), + (1649, 58, 134, 80, 0), + (1649, 59, 348, 10, 0), + (1649, 60, 137, 100, 0), + (1649, 61, 339, 10, 13199), + (1649, 62, 142, 76, 0), + (1649, 63, 311, 0, 0), + (1649, 64, 134, 80, 0), + (1649, 65, 348, 10, 0), + (1649, 66, 137, 79, 0), + (1649, 67, 339, 10, 13199), + (1649, 68, 142, 76, 0), + (1649, 69, 311, 0, 0), + (1649, 70, 134, 80, 0), + (1649, 71, 348, 10, 0), + (1649, 72, 137, 147, 0), + (1650, 1, 339, 10, 8105), + (1650, 2, 142, 65, 0), + (1650, 3, 311, 0, 0), + (1650, 4, 134, 70, 0), + (1650, 5, 348, 10, 0), + (1650, 6, 137, 0, 0), + (1650, 7, 339, 10, 8105), + (1650, 8, 142, 65, 0), + (1650, 9, 311, 0, 0), + (1650, 10, 134, 70, 0), + (1650, 11, 348, 10, 0), + (1650, 12, 137, 100, 0), + (1650, 13, 339, 10, 8105), + (1650, 14, 142, 65, 0), + (1650, 15, 311, 0, 0), + (1650, 16, 134, 70, 0), + (1650, 17, 348, 10, 0), + (1650, 18, 137, 79, 0), + (1650, 19, 339, 10, 8105), + (1650, 20, 142, 65, 0), + (1650, 21, 311, 0, 0), + (1650, 22, 134, 70, 0), + (1650, 23, 348, 10, 0), + (1650, 24, 137, 147, 0), + (1650, 25, 339, 10, 11404), + (1650, 26, 142, 71, 0), + (1650, 27, 311, 0, 0), + (1650, 28, 134, 75, 0), + (1650, 29, 348, 10, 0), + (1650, 30, 137, 0, 0), + (1650, 31, 339, 10, 11404), + (1650, 32, 142, 71, 0), + (1650, 33, 311, 0, 0), + (1650, 34, 134, 75, 0), + (1650, 35, 348, 10, 0), + (1650, 36, 137, 100, 0), + (1650, 37, 339, 10, 11404), + (1650, 38, 142, 71, 0), + (1650, 39, 311, 0, 0), + (1650, 40, 134, 75, 0), + (1650, 41, 348, 10, 0), + (1650, 42, 137, 79, 0), + (1650, 43, 339, 10, 11404), + (1650, 44, 142, 71, 0), + (1650, 45, 311, 0, 0), + (1650, 46, 134, 75, 0), + (1650, 47, 348, 10, 0), + (1650, 48, 137, 147, 0), + (1650, 49, 339, 10, 13199), + (1650, 50, 142, 76, 0), + (1650, 51, 311, 0, 0), + (1650, 52, 134, 80, 0), + (1650, 53, 348, 10, 0), + (1650, 54, 137, 0, 0), + (1650, 55, 339, 10, 13199), + (1650, 56, 142, 76, 0), + (1650, 57, 311, 0, 0), + (1650, 58, 134, 80, 0), + (1650, 59, 348, 10, 0), + (1650, 60, 137, 100, 0), + (1650, 61, 339, 10, 13199), + (1650, 62, 142, 76, 0), + (1650, 63, 311, 0, 0), + (1650, 64, 134, 80, 0), + (1650, 65, 348, 10, 0), + (1650, 66, 137, 79, 0), + (1650, 67, 339, 10, 13199), + (1650, 68, 142, 76, 0), + (1650, 69, 311, 0, 0), + (1650, 70, 134, 80, 0), + (1650, 71, 348, 10, 0), + (1650, 72, 137, 147, 0), + (1650, 73, 339, 10, 13830), + (1650, 74, 142, 81, 0), + (1650, 75, 311, 0, 0), + (1650, 76, 134, 85, 0), + (1650, 77, 348, 10, 0), + (1650, 78, 137, 0, 0), + (1650, 79, 339, 10, 13830), + (1650, 80, 142, 81, 0), + (1650, 81, 311, 0, 0), + (1650, 82, 134, 85, 0), + (1650, 83, 348, 10, 0), + (1650, 84, 137, 100, 0), + (1650, 85, 339, 10, 13830), + (1650, 86, 142, 81, 0), + (1650, 87, 311, 0, 0), + (1650, 88, 134, 85, 0), + (1650, 89, 348, 10, 0), + (1650, 90, 137, 79, 0), + (1650, 91, 339, 10, 13830), + (1650, 92, 142, 81, 0), + (1650, 93, 311, 0, 0), + (1650, 94, 134, 85, 0), + (1650, 95, 348, 10, 0), + (1650, 96, 137, 147, 0), + (1651, 1, 97, 300, 0), + (1652, 1, 97, 350, 0), + (1653, 1, 97, 400, 0), + (1654, 1, 97, 450, 0), + (1655, 1, 97, 500, 0), + (1656, 1, 127, 40, 0), + (1656, 2, 137, 154, 0), + (1656, 3, 403, 2, 0), + (1656, 4, 404, 10, 0), + (1657, 1, 127, 50, 0), + (1657, 2, 137, 154, 0), + (1657, 3, 403, 2, 0), + (1657, 4, 404, 10, 0), + (1659, 1, 127, 40, 0), + (1659, 2, 137, 154, 0), + (1659, 3, 403, 2, 0), + (1659, 4, 404, 10, 0), + (1660, 1, 127, 50, 0), + (1660, 2, 137, 154, 0), + (1660, 3, 403, 2, 0), + (1660, 4, 404, 10, 0), + (1662, 1, 370, 2, 0), + (1663, 1, 370, 4, 0), + (1664, 1, 370, 6, 0), + (1665, 1, 370, 8, 0), + (1666, 1, 370, 10, 0), + (2400, 1, 264, 90, 38), + (2401, 1, 264, 180, 38), + (2402, 1, 264, 270, 38), + (4666, 0, 366, 10, 50), + (4666, 1, 349, 5, 0), + (4667, 0, 366, 30, 50), + (4667, 1, 349, 10, 0), + (4668, 0, 366, 60, 50), + (4668, 1, 349, 15, 0), + (4669, 0, 366, 10, 500), + (4669, 1, 349, 20, 0), + (4670, 0, 366, 30, 500), + (4670, 1, 349, 25, 0), + (4672, 1, 268, 10, 57), + (4673, 1, 268, 25, 57), + (4674, 1, 268, 50, 57), + (4675, 1, 268, 10, 68), + (4676, 1, 268, 25, 68), + (4677, 1, 268, 50, 68), + (4678, 1, 262, 55, 0), + (4678, 2, 262, 55, 1), + (4678, 3, 262, 55, 2), + (4678, 4, 262, 55, 3), + (4678, 5, 262, 55, 4), + (4678, 6, 262, 55, 5), + (4678, 7, 262, 55, 6), + (4679, 1, 262, 60, 0), + (4679, 2, 262, 60, 1), + (4679, 3, 262, 60, 2), + (4679, 4, 262, 60, 3), + (4679, 5, 262, 60, 4), + (4679, 6, 262, 60, 5), + (4679, 7, 262, 60, 6), + (4680, 1, 262, 65, 0), + (4680, 2, 262, 65, 1), + (4680, 3, 262, 65, 2), + (4680, 4, 262, 65, 3), + (4680, 5, 262, 65, 4), + (4680, 6, 262, 65, 5), + (4680, 7, 262, 65, 6), + (4681, 1, 262, 70, 0), + (4681, 2, 262, 70, 1), + (4681, 3, 262, 70, 2), + (4681, 4, 262, 70, 3), + (4681, 5, 262, 70, 4), + (4681, 6, 262, 70, 5), + (4681, 7, 262, 70, 6), + (4682, 1, 262, 75, 0), + (4682, 2, 262, 75, 1), + (4682, 3, 262, 75, 2), + (4682, 4, 262, 75, 3), + (4682, 5, 262, 75, 4), + (4682, 6, 262, 75, 5), + (4682, 7, 262, 75, 6), + (4683, 1, 328, 550, 0), + (4684, 1, 328, 600, 0), + (4685, 1, 328, 650, 0), + (4686, 1, 328, 700, 0), + (4687, 1, 328, 750, 0), + (4688, 1, 282, 20, 0), + (4689, 1, 282, 40, 0), + (4690, 1, 282, 60, 0), + (4691, 1, 282, 80, 0), + (4692, 1, 282, 100, 0), + (4693, 1, 0, 11, 0), + (4694, 1, 0, 12, 0), + (4695, 1, 0, 13, 0), + (4696, 1, 0, 14, 0), + (4697, 1, 0, 15, 0), + (4698, 1, 362, 1, 0), + (4699, 1, 363, 1, 0), + (4707, 1, 330, 85, 0), + (4707, 2, 330, 85, 1), + (4707, 3, 330, 85, 2), + (4707, 4, 330, 85, 3), + (4707, 5, 330, 85, 28), + (4707, 6, 330, 85, 36), + (4707, 7, 330, 85, 77), + (4708, 1, 330, 95, 0), + (4708, 2, 330, 95, 1), + (4708, 3, 330, 95, 2), + (4708, 4, 330, 95, 3), + (4708, 5, 330, 95, 28), + (4708, 6, 330, 95, 36), + (4708, 7, 330, 95, 77), + (4709, 1, 330, 105, 0), + (4709, 2, 330, 105, 1), + (4709, 3, 330, 105, 2), + (4709, 4, 330, 105, 3), + (4709, 5, 330, 105, 28), + (4709, 6, 330, 105, 36), + (4709, 7, 330, 105, 77), + (4710, 1, 330, 85, 0), + (4710, 2, 330, 85, 1), + (4710, 3, 330, 85, 2), + (4710, 4, 330, 85, 3), + (4710, 5, 330, 85, 28), + (4710, 6, 330, 85, 36), + (4711, 1, 330, 95, 0), + (4711, 2, 330, 95, 1), + (4711, 3, 330, 95, 2), + (4711, 4, 330, 95, 3), + (4711, 5, 330, 95, 28), + (4711, 6, 330, 95, 36), + (4712, 1, 330, 105, 0), + (4712, 2, 330, 105, 1), + (4712, 3, 330, 105, 2), + (4712, 4, 330, 105, 3), + (4712, 5, 330, 105, 28), + (4712, 6, 330, 105, 36), + (4713, 1, 330, 85, 0), + (4713, 2, 330, 85, 1), + (4713, 3, 330, 85, 2), + (4713, 4, 330, 85, 3), + (4713, 5, 330, 85, 28), + (4713, 6, 330, 85, 36), + (4713, 7, 330, 85, 77), + (4714, 1, 330, 95, 0), + (4714, 2, 330, 95, 1), + (4714, 3, 330, 95, 2), + (4714, 4, 330, 95, 3), + (4714, 5, 330, 95, 28), + (4714, 6, 330, 95, 36), + (4714, 7, 330, 95, 77), + (4715, 1, 330, 105, 0), + (4715, 2, 330, 105, 1), + (4715, 3, 330, 105, 2), + (4715, 4, 330, 105, 3), + (4715, 5, 330, 105, 28), + (4715, 6, 330, 105, 36), + (4715, 7, 330, 105, 77), + (4716, 1, 330, 60, 0), + (4716, 2, 330, 60, 1), + (4716, 3, 330, 60, 2), + (4716, 4, 330, 60, 3), + (4716, 5, 330, 60, 28), + (4716, 6, 330, 60, 36), + (4716, 7, 330, 60, 77), + (4717, 1, 330, 70, 0), + (4717, 2, 330, 70, 1), + (4717, 3, 330, 70, 2), + (4717, 4, 330, 70, 3), + (4717, 5, 330, 70, 28), + (4717, 6, 330, 70, 36), + (4717, 7, 330, 70, 77), + (4718, 1, 330, 80, 0), + (4718, 2, 330, 80, 1), + (4718, 3, 330, 80, 2), + (4718, 4, 330, 80, 3), + (4718, 5, 330, 80, 28), + (4718, 6, 330, 80, 36), + (4718, 7, 330, 80, 77), + (4722, 1, 278, 620, 35216), + (4722, 2, 440, 66, 100), + (4723, 1, 278, 650, 38310), + (4723, 2, 440, 68, 100), + (4724, 1, 278, 670, 41300), + (4724, 2, 440, 70, 100), + (4725, 1, 341, 60, 0), + (4726, 1, 341, 70, 0), + (4727, 1, 341, 80, 0), + (4728, 1, 341, 90, 0), + (4729, 1, 341, 100, 0), + (4733, 1, 294, 11, 100), + (4734, 1, 294, 13, 100), + (4735, 1, 294, 15, 100), + (4739, 1, 360, 10, 11023), + (4740, 1, 360, 20, 11023), + (4741, 1, 360, 30, 11023), + (4744, 1, 318, 6, 0), + (4745, 1, 318, 7, 0), + (4746, 1, 318, 8, 0), + (4747, 1, 318, 9, 0), + (4748, 1, 318, 10, 0), + (4749, 1, 294, 11, 100), + (4750, 1, 294, 13, 100), + (4751, 1, 294, 15, 100), + (4752, 1, 294, 0, 155), + (4753, 1, 294, 0, 160), + (4754, 1, 294, 0, 165), + (4755, 1, 294, 0, 130), + (4756, 1, 294, 0, 135), + (4757, 1, 294, 0, 140), + (4758, 1, 266, 27, 0), + (4759, 1, 266, 28, 0), + (4760, 1, 266, 29, 0), + (4761, 1, 273, 2, 0), + (4762, 1, 273, 3, 0), + (4763, 1, 273, 4, 0), + (4764, 1, 326, 2, 0), + (4767, 1, 114, -43, 0), + (4768, 1, 114, -46, 0), + (4769, 1, 114, -50, 0), + (4773, 1, 339, 10, 8105), + (4773, 2, 142, 65, 0), + (4773, 3, 311, 0, 0), + (4773, 4, 134, 70, 0), + (4773, 5, 348, 10, 0), + (4773, 6, 137, 0, 0), + (4773, 7, 339, 10, 8105), + (4773, 8, 142, 65, 0), + (4773, 9, 311, 0, 0), + (4773, 10, 134, 70, 0), + (4773, 11, 348, 10, 0), + (4773, 12, 137, 100, 0), + (4773, 13, 339, 10, 8105), + (4773, 14, 142, 65, 0), + (4773, 15, 311, 0, 0), + (4773, 16, 134, 70, 0), + (4773, 17, 348, 10, 0), + (4773, 18, 137, 79, 0), + (4773, 19, 339, 10, 8105), + (4773, 20, 142, 65, 0), + (4773, 21, 311, 0, 0), + (4773, 22, 134, 70, 0), + (4773, 23, 348, 10, 0), + (4773, 24, 137, 147, 0), + (4773, 25, 339, 10, 11404), + (4773, 26, 142, 71, 0), + (4773, 27, 311, 0, 0), + (4773, 28, 134, 75, 0), + (4773, 29, 348, 10, 0), + (4773, 30, 137, 0, 0), + (4773, 31, 339, 10, 11404), + (4773, 32, 142, 71, 0), + (4773, 33, 311, 0, 0), + (4773, 34, 134, 75, 0), + (4773, 35, 348, 10, 0), + (4773, 36, 137, 100, 0), + (4773, 37, 339, 10, 11404), + (4773, 38, 142, 71, 0), + (4773, 39, 311, 0, 0), + (4773, 40, 134, 75, 0), + (4773, 41, 348, 10, 0), + (4773, 42, 137, 79, 0), + (4773, 43, 339, 10, 11404), + (4773, 44, 142, 71, 0), + (4773, 45, 311, 0, 0), + (4773, 46, 134, 75, 0), + (4773, 47, 348, 10, 0), + (4773, 48, 137, 147, 0), + (4776, 1, 319, 12, 0), + (4777, 1, 319, 14, 0), + (4778, 1, 319, 16, 0), + (4779, 1, 274, 24, 0), + (4780, 1, 274, 26, 0), + (4781, 1, 274, 28, 0), + (4790, 1, 220, 288, 74), + (4791, 1, 220, 320, 74), + (4792, 1, 220, 352, 74), + (4793, 1, 220, 384, 74), + (4794, 1, 220, 416, 74), + (4795, 1, 279, 28, 0), + (4796, 1, 279, 29, 0), + (4797, 1, 279, 30, 0), + (4798, 1, 292, 65, 0), + (4799, 1, 292, 70, 0), + (4800, 1, 292, 75, 0), + (4801, 1, 227, 30, 32), + (4802, 1, 227, 60, 32), + (4803, 1, 227, 90, 32), + (4804, 1, 220, 448, 74), + (4805, 1, 220, 480, 74), + (4806, 1, 220, 512, 74), + (4807, 1, 220, 544, 74), + (4808, 1, 220, 576, 74), + (4809, 1, 216, 40, 74), + (4810, 1, 216, 80, 74), + (4811, 1, 216, 120, 74), + (4813, 1, 220, 70, 26), + (4813, 2, 220, 70, 30), + (4813, 3, 220, 70, 38), + (4814, 1, 220, 80, 26), + (4814, 2, 220, 80, 30), + (4814, 3, 220, 80, 38), + (4815, 1, 220, 90, 26), + (4815, 2, 220, 90, 30), + (4815, 3, 220, 90, 38), + (4819, 1, 239, 52, 0), + (4820, 1, 239, 54, 0), + (4821, 1, 239, 56, 0), + (4822, 1, 239, 58, 0), + (4823, 1, 239, 60, 0), + (4824, 1, 239, 52, 0), + (4825, 1, 239, 54, 0), + (4826, 1, 239, 56, 0), + (4827, 1, 239, 58, 0), + (4828, 1, 239, 60, 0), + (4829, 1, 264, 480, 420), + (4830, 1, 264, 600, 420), + (4831, 1, 264, 720, 420), + (4844, 1, 349, 5, 0), + (4845, 1, 349, 10, 0), + (4846, 1, 349, 15, 0), + (4847, 1, 349, 20, 0), + (4848, 1, 349, 25, 0), + (4861, 1, 264, 600, 68), + (4862, 1, 264, 1200, 68), + (4863, 1, 264, 1800, 68), + (4887, 1, 264, 120, 413), + (4888, 1, 264, 240, 413), + (4889, 1, 264, 360, 413), + (4897, 1, 280, 44, 0), + (4898, 1, 280, 47, 0), + (4899, 1, 280, 50, 0), + (4921, 1, 264, 1896, 117), + (4921, 2, 244, 75, 0), + (4922, 1, 264, 2496, 117), + (4922, 2, 244, 60, 0), + (4923, 1, 264, 3096, 117), + (4923, 2, 244, 45, 0), + (4924, 1, 273, 1, 0), + (4925, 1, 273, 2, 0), + (4926, 1, 273, 3, 0), + (4948, 1, 258, 35, 0), + (4949, 1, 258, 40, 0), + (4950, 1, 258, 45, 0), + (4951, 1, 220, 40, 8), + (4952, 1, 220, 50, 8), + (4953, 1, 220, 60, 8), + (4957, 1, 252, 55, 0), + (4958, 1, 252, 60, 0), + (4959, 1, 252, 65, 0), + (4960, 1, 280, 46, 0), + (4961, 1, 280, 51, 0), + (4962, 1, 280, 56, 0), + (4983, 1, 216, 65, 0), + (4983, 2, 216, 65, 1), + (4983, 3, 216, 65, 2), + (4983, 4, 216, 65, 3), + (4983, 5, 216, 65, 10), + (4983, 6, 216, 65, 28), + (4983, 7, 216, 65, 30), + (4983, 8, 216, 65, 36), + (4983, 9, 216, 65, 77), + (4984, 1, 216, 70, 0), + (4984, 2, 216, 70, 1), + (4984, 3, 216, 70, 2), + (4984, 4, 216, 70, 3), + (4984, 5, 216, 70, 10), + (4984, 6, 216, 70, 28), + (4984, 7, 216, 70, 30), + (4984, 8, 216, 70, 36), + (4984, 9, 216, 70, 77), + (4985, 1, 216, 75, 0), + (4985, 2, 216, 75, 1), + (4985, 3, 216, 75, 2), + (4985, 4, 216, 75, 3), + (4985, 5, 216, 75, 10), + (4985, 6, 216, 75, 28), + (4985, 7, 216, 75, 30), + (4985, 8, 216, 75, 36), + (4985, 9, 216, 75, 77), + (4986, 1, 217, 0, 52960), + (4986, 2, 346, 66, 40), + (4987, 1, 217, 0, 55400), + (4987, 2, 346, 68, 40), + (4988, 1, 217, 0, 60280), + (4988, 2, 346, 70, 40), + (4989, 1, 347, 8, 0), + (4990, 1, 347, 10, 0), + (4991, 1, 347, 12, 0), + (4992, 1, 279, 21, 0), + (4993, 1, 279, 23, 0), + (4994, 1, 279, 25, 0), + (4995, 1, 279, 27, 0), + (4996, 1, 279, 28, 0), + (5000, 1, 313, 80, 0), + (5001, 1, 313, 90, 0), + (5002, 1, 313, 100, 0), + (5010, 1, 264, 432, 35), + (5011, 1, 264, 864, 35), + (5012, 1, 264, 1296, 35), + (5013, 1, 293, 90, 0), + (5014, 1, 293, 100, 0), + (5029, 1, 85, 11621, 0), + (5030, 1, 85, 11622, 0), + (5031, 1, 85, 11623, 0), + (5032, 1, 274, 22, 0), + (5033, 1, 274, 24, 0), + (5034, 1, 274, 26, 0), + (5035, 1, 293, 60, 0), + (5036, 1, 293, 70, 0), + (5037, 1, 293, 80, 0), + (5038, 1, 219, 330, 2100), + (5039, 1, 219, 360, 2200), + (5040, 1, 219, 390, 2300), + (5045, 1, 180, 5, 0), + (5061, 1, 244, -25, 0), + (5085, 1, 360, 25, 11297), + (5086, 1, 360, 25, 11298), + (5087, 1, 360, 25, 11299), + (5118, 1, 264, 720, 396), + (5118, 2, 264, 720, 8504), + (5118, 3, 264, 720, 8505), + (5119, 1, 264, 1440, 396), + (5119, 2, 264, 1440, 8504), + (5119, 3, 264, 1440, 8505), + (5120, 1, 264, 2160, 396), + (5120, 2, 264, 2160, 8504), + (5120, 3, 264, 2160, 8505), + (5127, 1, 264, 300, 261), + (5128, 1, 264, 600, 261), + (5129, 1, 264, 900, 261), + (5133, 1, 294, 13, 100), + (5134, 1, 294, 15, 100), + (5135, 1, 294, 17, 100), + (5136, 1, 282, 20, 0), + (5137, 1, 282, 40, 0), + (5138, 1, 282, 60, 0), + (5139, 1, 282, 80, 0), + (5140, 1, 282, 100, 0), + (5141, 1, 279, 21, 0), + (5142, 1, 279, 23, 0), + (5143, 1, 279, 25, 0), + (5144, 1, 279, 27, 0), + (5145, 1, 279, 28, 0), + (5243, 1, 69, 600, 0), + (5244, 1, 69, 700, 0), + (5245, 1, 69, 800, 0), + (5246, 1, 69, 900, 0), + (5247, 1, 69, 1000, 0), + (5248, 1, 360, 10, 11232), + (5249, 1, 360, 20, 11232), + (5250, 1, 360, 30, 11232), + (5254, 1, 218, 6, 0), + (5255, 1, 218, 7, 0), + (5256, 1, 218, 8, 0), + (5257, 1, 218, 9, 0), + (5258, 1, 218, 10, 0), + (5259, 1, 218, 6, 0), + (5260, 1, 218, 7, 0), + (5261, 1, 218, 8, 0), + (5262, 1, 218, 9, 0), + (5263, 1, 218, 10, 0), + (5264, 1, 218, 1, 0), + (5265, 1, 218, 2, 0), + (5266, 1, 218, 3, 0), + (5267, 1, 218, 4, 0), + (5268, 1, 218, 5, 0), + (5269, 1, 131, 50, 50), + (5269, 2, 137, 82, 0), + (5270, 1, 303, 3000, 3000), + (5270, 2, 139, 2766, 0), + (5271, 1, 303, 3500, 3500), + (5271, 2, 139, 2766, 0), + (5272, 1, 303, 4000, 4000), + (5272, 2, 139, 2766, 0), + (5276, 1, 264, 60, 621), + (5276, 2, 264, 60, 622), + (5276, 3, 264, 60, 623), + (5276, 4, 264, 60, 784), + (5276, 5, 264, 60, 785), + (5276, 6, 264, 60, 786), + (5276, 7, 264, 60, 787), + (5276, 8, 264, 60, 624), + (5277, 1, 264, 120, 621), + (5277, 2, 264, 120, 622), + (5277, 3, 264, 120, 623), + (5277, 4, 264, 120, 784), + (5277, 5, 264, 120, 785), + (5277, 6, 264, 120, 786), + (5277, 7, 264, 120, 787), + (5277, 8, 264, 120, 624), + (5278, 1, 264, 180, 621), + (5278, 2, 264, 180, 622), + (5278, 3, 264, 180, 623), + (5278, 4, 264, 180, 784), + (5278, 5, 264, 180, 785), + (5278, 6, 264, 180, 786), + (5278, 7, 264, 180, 787), + (5278, 8, 264, 180, 624), + (5283, 1, 320, 1, 0), + (5284, 1, 320, 3, 0), + (5285, 1, 320, 5, 0), + (5286, 1, 294, 7, 100), + (5287, 1, 294, 8, 100), + (5288, 1, 294, 9, 100), + (5290, 1, 439, 0, 46480), + (5290, 2, 345, 62, 0), + (5291, 1, 439, 0, 52960), + (5291, 2, 345, 63, 0), + (5292, 1, 439, 0, 55400), + (5292, 2, 345, 64, 0), + (5293, 1, 439, 0, 60280), + (5293, 2, 345, 65, 0), + (5294, 1, 439, 0, 65440), + (5294, 2, 345, 66, 50), + (5295, 1, 360, 10, 11629), + (5296, 1, 360, 20, 11629), + (5297, 1, 360, 30, 11629), + (5301, 1, 189, 7, 0), + (5302, 1, 189, 8, 0), + (5303, 1, 189, 9, 0), + (5304, 1, 189, 10, 0), + (5305, 1, 189, 11, 0), + (5306, 1, 15, 4, 0), + (5307, 1, 15, 5, 0), + (5308, 1, 15, 6, 0), + (5309, 1, 15, 7, 0), + (5310, 1, 15, 8, 0), + (5317, 1, 114, -43, 0), + (5318, 1, 114, -46, 0), + (5319, 1, 114, -50, 0), + (5320, 1, 218, 11, 0), + (5321, 1, 218, 12, 0), + (5322, 1, 218, 13, 0), + (5323, 1, 218, 14, 0), + (5324, 1, 218, 15, 0), + (5325, 1, 280, 27, 0), + (5326, 1, 280, 34, 0), + (5327, 1, 280, 41, 0), + (5328, 1, 280, 44, 0), + (5329, 1, 280, 47, 0), + (5339, 1, 215, 24, 0), + (5347, 1, 375, 225, 0), + (5348, 1, 375, 230, 0), + (5360, 1, 397, 1300, 0), + (5366, 1, 247, 75, 20), + (5500, 1, 231, 5, 0), + (5501, 1, 231, 7, 0), + (5502, 1, 231, 9, 0), + (5516, 1, 320, 6, 0), + (5517, 1, 320, 7, 0), + (5518, 1, 320, 8, 0), + (5519, 1, 172, 40, 0), + (5520, 1, 172, 41, 0), + (5521, 1, 172, 42, 0), + (5522, 1, 172, 43, 0), + (5523, 1, 172, 44, 0), + (5524, 1, 259, 46, 0), + (5525, 1, 259, 47, 0), + (5526, 1, 259, 48, 0), + (5527, 1, 259, 49, 0), + (5528, 1, 259, 50, 0), + (5529, 1, 339, 11, 12680), + (5529, 2, 138, 1, 0), + (5529, 3, 141, 1, 0), + (5529, 4, 142, 60, 0), + (5529, 5, 137, 0, 0), + (5529, 6, 311, 0, 0), + (5529, 7, 134, 80, 0), + (5529, 8, 139, -265, 0), + (5529, 9, 139, -754, 0), + (5529, 10, 139, -1332, 0), + (5529, 11, 139, -1572, 0), + (5529, 12, 139, -2749, 0), + (5529, 13, 139, -4979, 0), + (5529, 14, 139, -5418, 0), + (5529, 15, 139, -5403, 0), + (5529, 16, 348, 10, 0), + (5530, 1, 339, 13, 12681), + (5530, 2, 138, 1, 0), + (5530, 3, 141, 1, 0), + (5530, 4, 142, 60, 0), + (5530, 5, 137, 0, 0), + (5530, 6, 311, 0, 0), + (5530, 7, 134, 80, 0), + (5530, 8, 139, -265, 0), + (5530, 9, 139, -754, 0), + (5530, 10, 139, -1332, 0), + (5530, 11, 139, -1572, 0), + (5530, 12, 139, -2749, 0), + (5530, 13, 139, -4979, 0), + (5530, 14, 139, -5418, 0), + (5530, 15, 139, -5403, 0), + (5530, 16, 348, 10, 0), + (5531, 1, 339, 15, 12682), + (5531, 2, 138, 1, 0), + (5531, 3, 141, 1, 0), + (5531, 4, 142, 60, 0), + (5531, 5, 137, 0, 0), + (5531, 6, 311, 0, 0), + (5531, 7, 134, 80, 0), + (5531, 8, 139, -265, 0), + (5531, 9, 139, -754, 0), + (5531, 10, 139, -1332, 0), + (5531, 11, 139, -1572, 0), + (5531, 12, 139, -2749, 0), + (5531, 13, 139, -4979, 0), + (5531, 14, 139, -5418, 0), + (5531, 15, 139, -5403, 0), + (5531, 16, 348, 10, 0), + (5532, 1, 339, 17, 12683), + (5532, 2, 138, 1, 0), + (5532, 3, 141, 1, 0), + (5532, 4, 142, 60, 0), + (5532, 5, 137, 0, 0), + (5532, 6, 311, 0, 0), + (5532, 7, 134, 80, 0), + (5532, 8, 139, -265, 0), + (5532, 9, 139, -754, 0), + (5532, 10, 139, -1332, 0), + (5532, 11, 139, -1572, 0), + (5532, 12, 139, -2749, 0), + (5532, 13, 139, -4979, 0), + (5532, 14, 139, -5418, 0), + (5532, 15, 139, -5403, 0), + (5532, 16, 348, 10, 0), + (5533, 1, 339, 19, 12684), + (5533, 2, 138, 1, 0), + (5533, 3, 141, 1, 0), + (5533, 4, 142, 60, 0), + (5533, 5, 137, 0, 0), + (5533, 6, 311, 0, 0), + (5533, 7, 134, 80, 0), + (5533, 8, 139, -265, 0), + (5533, 9, 139, -754, 0), + (5533, 10, 139, -1332, 0), + (5533, 11, 139, -1572, 0), + (5533, 12, 139, -2749, 0), + (5533, 13, 139, -4979, 0), + (5533, 14, 139, -5418, 0), + (5533, 15, 139, -5403, 0), + (5533, 16, 348, 10, 0), + (5534, 1, 266, 18, 0), + (5535, 1, 266, 20, 0), + (5536, 1, 266, 22, 0), + (5542, 1, 330, 110, 0), + (5542, 2, 330, 110, 1), + (5542, 3, 330, 110, 2), + (5542, 4, 330, 110, 3), + (5542, 5, 330, 110, 28), + (5542, 6, 330, 110, 36), + (5542, 7, 330, 110, 77), + (5543, 1, 330, 115, 0), + (5543, 2, 330, 115, 1), + (5543, 3, 330, 115, 2), + (5543, 4, 330, 115, 3), + (5543, 5, 330, 115, 28), + (5543, 6, 330, 115, 36), + (5543, 7, 330, 115, 77), + (5544, 1, 330, 120, 0), + (5544, 2, 330, 120, 1), + (5544, 3, 330, 120, 2), + (5544, 4, 330, 120, 3), + (5544, 5, 330, 120, 28), + (5544, 6, 330, 120, 36), + (5544, 7, 330, 120, 77), + (5545, 1, 330, 110, 0), + (5545, 2, 330, 110, 1), + (5545, 3, 330, 110, 2), + (5545, 4, 330, 110, 3), + (5545, 5, 330, 110, 28), + (5545, 6, 330, 110, 36), + (5546, 1, 330, 115, 0), + (5546, 2, 330, 115, 1), + (5546, 3, 330, 115, 2), + (5546, 4, 330, 115, 3), + (5546, 5, 330, 115, 28), + (5546, 6, 330, 115, 36), + (5547, 1, 330, 120, 0), + (5547, 2, 330, 120, 1), + (5547, 3, 330, 120, 2), + (5547, 4, 330, 120, 3), + (5547, 5, 330, 120, 28), + (5547, 6, 330, 120, 36), + (5548, 1, 330, 110, 0), + (5548, 2, 330, 110, 1), + (5548, 3, 330, 110, 2), + (5548, 4, 330, 110, 3), + (5548, 5, 330, 110, 28), + (5548, 6, 330, 110, 36), + (5548, 7, 330, 110, 77), + (5549, 1, 330, 115, 0), + (5549, 2, 330, 115, 1), + (5549, 3, 330, 115, 2), + (5549, 4, 330, 115, 3), + (5549, 5, 330, 115, 28), + (5549, 6, 330, 115, 36), + (5549, 7, 330, 115, 77), + (5550, 1, 330, 120, 0), + (5550, 2, 330, 120, 1), + (5550, 3, 330, 120, 2), + (5550, 4, 330, 120, 3), + (5550, 5, 330, 120, 28), + (5550, 6, 330, 120, 36), + (5550, 7, 330, 120, 77), + (5551, 1, 330, 85, 0), + (5551, 2, 330, 85, 1), + (5551, 3, 330, 85, 2), + (5551, 4, 330, 85, 3), + (5551, 5, 330, 85, 28), + (5551, 6, 330, 85, 36), + (5551, 7, 330, 85, 77), + (5552, 1, 330, 90, 0), + (5552, 2, 330, 90, 1), + (5552, 3, 330, 90, 2), + (5552, 4, 330, 90, 3), + (5552, 5, 330, 90, 28), + (5552, 6, 330, 90, 36), + (5552, 7, 330, 90, 77), + (5553, 1, 330, 95, 0), + (5553, 2, 330, 95, 1), + (5553, 3, 330, 95, 2), + (5553, 4, 330, 95, 3), + (5553, 5, 330, 95, 28), + (5553, 6, 330, 95, 36), + (5553, 7, 330, 95, 77), + (5554, 1, 278, 700, 44340), + (5554, 2, 440, 71, 100), + (5555, 1, 278, 720, 47230), + (5555, 2, 440, 73, 100), + (5556, 1, 278, 750, 51057), + (5556, 2, 440, 75, 100), + (5557, 1, 341, 110, 0), + (5558, 1, 341, 120, 0), + (5559, 1, 341, 130, 0), + (5560, 1, 341, 140, 0), + (5561, 1, 341, 150, 0), + (5562, 1, 360, 40, 11023), + (5563, 1, 360, 50, 11023), + (5564, 1, 360, 60, 11023), + (5566, 1, 318, 11, 0), + (5567, 1, 318, 12, 0), + (5568, 1, 318, 13, 0), + (5569, 1, 318, 14, 0), + (5570, 1, 318, 15, 0), + (5571, 1, 294, 16, 100), + (5572, 1, 294, 17, 100), + (5573, 1, 294, 18, 100), + (5574, 1, 294, 0, 170), + (5575, 1, 294, 0, 175), + (5576, 1, 294, 0, 180), + (5577, 1, 294, 0, 145), + (5578, 1, 294, 0, 150), + (5579, 1, 294, 0, 155), + (5580, 1, 266, 30, 0), + (5581, 1, 266, 31, 0), + (5582, 1, 266, 32, 0), + (5586, 1, 114, -53, 0), + (5587, 1, 114, -56, 0), + (5588, 1, 114, -59, 0), + (5589, 1, 319, 17, 0), + (5590, 1, 319, 19, 0), + (5591, 1, 319, 21, 0), + (5592, 1, 274, 30, 0), + (5593, 1, 274, 32, 0), + (5594, 1, 274, 34, 0), + (5595, 1, 279, 31, 0), + (5596, 1, 279, 32, 0), + (5597, 1, 279, 33, 0), + (5611, 1, 274, 28, 0), + (5612, 1, 274, 30, 0), + (5613, 1, 274, 32, 0), + (5617, 1, 294, 18, 100), + (5618, 1, 294, 19, 100), + (5619, 1, 294, 20, 100), + (5620, 1, 320, 6, 0), + (5621, 1, 320, 7, 0), + (5622, 1, 320, 8, 0), + (5623, 1, 15, 9, 0), + (5624, 1, 15, 10, 0), + (5625, 1, 15, 11, 0), + (5626, 1, 15, 12, 0), + (5627, 1, 15, 13, 0), + (5628, 1, 114, -53, 0), + (5629, 1, 114, -56, 0), + (5630, 1, 114, -59, 0), + (5729, 1, 218, 11, 0), + (5730, 1, 218, 12, 0), + (5731, 1, 218, 13, 0), + (5732, 1, 218, 14, 0), + (5733, 1, 218, 15, 0), + (5738, 1, 280, 62, 0), + (5739, 1, 280, 63, 0), + (5740, 1, 280, 64, 0), + (5776, 1, 169, 5, -1), + (5777, 1, 169, 10, -1), + (5778, 1, 169, 15, -1), + (5797, 1, 264, 2520, 396), + (5797, 2, 264, 2520, 8504), + (5797, 3, 264, 2520, 8505), + (5798, 1, 264, 2880, 396), + (5798, 2, 264, 2880, 8504), + (5798, 3, 264, 2880, 8505), + (5799, 1, 264, 3240, 396), + (5799, 2, 264, 3240, 8504), + (5799, 3, 264, 3240, 8505), + (5806, 1, 279, 7, 0), + (5807, 1, 279, 11, 0), + (5808, 1, 279, 15, 0), + (5825, 1, 244, -40, 0), + (5850, 1, 287, 2, 1), + (5850, 2, 137, 31, 0), + (5850, 3, 136, 5, 0), + (5860, 1, 243, 40, 0), + (5861, 1, 243, 45, 0), + (5862, 1, 243, 50, 0), + (5880, 1, 287, 8, 0), + (5880, 2, 385, 2754, 1), + (5881, 1, 287, 10, 0), + (5881, 2, 385, 2754, 1), + (5882, 1, 287, 12, 0), + (5882, 2, 385, 2754, 1), + (5883, 2, 139, 2754, 1), + (5886, 1, 274, 12, 0), + (5887, 1, 274, 14, 0), + (5888, 1, 274, 16, 0), + (5889, 1, 280, 51, 0), + (5890, 1, 280, 52, 0), + (5891, 1, 280, 53, 0), + (5909, 1, 279, 29, 0), + (5910, 1, 279, 30, 0), + (5911, 1, 279, 31, 0), + (5912, 1, 279, 32, 0), + (5913, 1, 279, 33, 0), + (5917, 1, 220, 100, 26), + (5917, 2, 220, 100, 30), + (5917, 3, 220, 100, 38), + (5918, 1, 220, 110, 26), + (5918, 2, 220, 110, 30), + (5918, 3, 220, 110, 38), + (5919, 1, 220, 120, 26), + (5919, 2, 220, 120, 30), + (5919, 3, 220, 120, 38), + (5922, 1, 292, 35, 0), + (5923, 1, 292, 40, 0), + (5924, 1, 292, 45, 0), + (5939, 1, 218, 6, 0), + (5940, 1, 218, 7, 0), + (5941, 1, 218, 8, 0), + (5942, 1, 218, 9, 0), + (5943, 1, 218, 10, 0), + (5944, 1, 273, 4, 0), + (5945, 1, 273, 5, 0), + (5946, 1, 273, 6, 0), + (5950, 1, 264, 240, 175), + (5950, 2, 264, 240, 792), + (5951, 1, 264, 300, 175), + (5951, 2, 264, 300, 792), + (5952, 1, 264, 360, 175), + (5952, 2, 264, 360, 792), + (5954, 1, 264, 2400, 68), + (5955, 1, 264, 3000, 68), + (5956, 1, 264, 3600, 68), + (5972, 1, 264, 2880, 6001), + (5972, 2, 264, 2880, 3676), + (5973, 1, 264, 2880, 6000), + (5973, 2, 264, 2880, 87), + (6003, 1, 279, 29, 0), + (6004, 1, 279, 30, 0), + (6005, 1, 279, 31, 0), + (6006, 1, 279, 32, 0), + (6007, 1, 279, 33, 0), + (6011, 1, 216, 95, 0), + (6011, 2, 216, 95, 1), + (6011, 3, 216, 95, 2), + (6011, 4, 216, 95, 3), + (6011, 5, 216, 95, 10), + (6011, 6, 216, 95, 28), + (6011, 7, 216, 95, 30), + (6011, 8, 216, 95, 36), + (6011, 9, 216, 95, 77), + (6012, 1, 216, 100, 0), + (6012, 2, 216, 100, 1), + (6012, 3, 216, 100, 2), + (6012, 4, 216, 100, 3), + (6012, 5, 216, 100, 10), + (6012, 6, 216, 100, 28), + (6012, 7, 216, 100, 30), + (6012, 8, 216, 100, 36), + (6012, 9, 216, 100, 77), + (6013, 1, 216, 105, 0), + (6013, 2, 216, 105, 1), + (6013, 3, 216, 105, 2), + (6013, 4, 216, 105, 3), + (6013, 5, 216, 105, 10), + (6013, 6, 216, 105, 28), + (6013, 7, 216, 105, 30), + (6013, 8, 216, 105, 36), + (6013, 9, 216, 105, 77), + (6014, 1, 360, 40, 12617), + (6015, 1, 360, 50, 12617), + (6016, 1, 360, 60, 12617), + (6017, 1, 217, 0, 65440), + (6017, 2, 346, 72, 28), + (6018, 1, 217, 0, 70880), + (6018, 2, 346, 74, 28), + (6019, 1, 217, 0, 76600), + (6019, 2, 346, 76, 28), + (6020, 1, 220, 15, 21), + (6020, 2, 220, 15, 23), + (6020, 3, 220, 30, 52), + (6020, 4, 220, 15, 28), + (6021, 1, 220, 25, 21), + (6021, 2, 220, 25, 23), + (6021, 3, 220, 50, 52), + (6021, 4, 220, 25, 28), + (6022, 1, 220, 35, 21), + (6022, 2, 220, 35, 23), + (6022, 3, 220, 70, 52), + (6022, 4, 220, 35, 28), + (6023, 1, 278, 900, 66950), + (6023, 2, 440, 82, 100), + (6024, 1, 278, 900, 70230), + (6024, 2, 440, 84, 100), + (6025, 1, 278, 900, 74935), + (6025, 2, 440, 86, 100), + (6026, 1, 127, 10, 0), + (6026, 2, 139, 16106, 0), + (6027, 1, 127, 25, 0), + (6027, 2, 139, 16106, 0), + (6028, 1, 127, 50, 0), + (6028, 2, 139, 16106, 0), + (6029, 1, 216, 200, 8), + (6030, 1, 216, 250, 8), + (6031, 1, 216, 300, 8), + (6032, 1, 439, 0, 70880), + (6032, 2, 345, 68, 50), + (6033, 1, 439, 0, 76600), + (6033, 2, 345, 70, 50), + (6034, 1, 439, 0, 82600), + (6034, 2, 345, 72, 35), + (6035, 1, 258, 48, 0), + (6036, 1, 258, 51, 0), + (6037, 1, 258, 54, 0), + (6042, 1, 220, 70, 8), + (6043, 1, 220, 80, 8), + (6044, 1, 220, 100, 8), + (6045, 1, 220, 45, 21), + (6045, 2, 220, 45, 23), + (6045, 3, 220, 90, 52), + (6045, 4, 220, 45, 28), + (6046, 1, 220, 55, 21), + (6046, 2, 220, 55, 23), + (6046, 3, 220, 110, 52), + (6046, 4, 220, 55, 28), + (6047, 1, 220, 65, 21), + (6047, 2, 220, 65, 23), + (6047, 3, 220, 130, 52), + (6047, 4, 220, 65, 28), + (6048, 1, 220, 75, 21), + (6048, 2, 220, 75, 23), + (6048, 3, 220, 150, 52), + (6048, 4, 220, 75, 28), + (6049, 1, 220, 85, 21), + (6049, 2, 220, 85, 23), + (6049, 3, 220, 170, 52), + (6049, 4, 220, 85, 28), + (6050, 1, 220, 95, 21), + (6050, 2, 220, 95, 23), + (6050, 3, 220, 190, 52), + (6050, 4, 220, 95, 28), + (6051, 1, 213, 1, 0), + (6052, 1, 213, 3, 0), + (6053, 1, 213, 5, 0), + (6057, 1, 220, 105, 21), + (6057, 2, 220, 105, 23), + (6057, 3, 220, 210, 52), + (6057, 4, 220, 105, 28), + (6058, 1, 220, 115, 21), + (6058, 2, 220, 115, 23), + (6058, 3, 220, 230, 52), + (6058, 4, 220, 115, 28), + (6059, 1, 220, 125, 21), + (6059, 2, 220, 125, 23), + (6059, 3, 220, 250, 52), + (6059, 4, 220, 125, 28), + (6060, 1, 247, 5, 76), + (6061, 1, 247, 10, 76), + (6063, 1, 303, 4500, 4500), + (6063, 2, 139, 2766, 0), + (6064, 1, 303, 5000, 5000), + (6064, 2, 139, 2766, 0), + (6065, 1, 303, 5500, 5500), + (6065, 2, 139, 2766, 0), + (6066, 1, 85, 12629, 0), + (6067, 1, 85, 12630, 0), + (6068, 1, 85, 12631, 0), + (6069, 1, 85, 12632, 0), + (6070, 1, 85, 12633, 0), + (6071, 1, 85, 12634, 0), + (6072, 1, 302, 266, 266), + (6072, 2, 385, 99, 0), + (6073, 1, 302, 290, 290), + (6073, 2, 385, 99, 0), + (6074, 1, 302, 310, 310), + (6074, 2, 385, 99, 0), + (6075, 1, 59, -18, 0), + (6076, 1, 59, -21, 0), + (6077, 1, 59, -24, 0), + (6078, 1, 59, -27, 0), + (6079, 1, 59, -30, 0), + (6080, 1, 189, 12, 0), + (6081, 1, 189, 13, 0), + (6082, 1, 247, 50, 20), + (6083, 1, 247, 75, 20), + (6084, 1, 247, 100, 20), + (6085, 1, 292, 20, 0), + (6086, 1, 292, 30, 0), + (6087, 1, 292, 40, 0), + (6088, 1, 264, 180, 392), + (6089, 1, 264, 360, 392), + (6090, 1, 264, 540, 392), + (6112, 1, 131, 10, 10), + (6112, 2, 348, 10, 0), + (6112, 3, 137, -32, 0), + (6113, 1, 287, 2, 0), + (6113, 2, 137, 100, 0), + (6113, 3, 385, -4232, 0), + (6113, 4, 385, -4332, 0), + (6113, 5, 139, -2741, 0), + (6113, 6, 385, -16192, 0), + (6113, 7, 139, -16843, 0), + (6114, 1, 287, 3, 0), + (6114, 2, 137, 100, 0), + (6114, 3, 385, -4232, 0), + (6114, 4, 385, -4332, 0), + (6114, 5, 139, -2741, 0), + (6114, 6, 385, -16192, 0), + (6114, 7, 139, -16843, 0), + (6115, 1, 287, 4, 0), + (6115, 2, 137, 100, 0), + (6115, 3, 385, -4232, 0), + (6115, 4, 385, -4332, 0), + (6115, 5, 139, -2741, 0), + (6115, 6, 385, -16192, 0), + (6115, 7, 139, -16843, 0), + (6119, 1, 69, 100, 0), + (6120, 1, 69, 200, 0), + (6121, 1, 69, 300, 0), + (6122, 1, 69, 400, 0), + (6123, 1, 69, 500, 0), + (6124, 1, 320, 1, 0), + (6125, 1, 320, 3, 0), + (6126, 1, 320, 5, 0), + (6127, 1, 320, 6, 0), + (6128, 1, 320, 7, 0), + (6129, 1, 320, 8, 0), + (6130, 1, 255, 48, 0), + (6131, 1, 255, 60, 0), + (6132, 1, 255, 72, 0), + (6136, 1, 264, 360, 300), + (6202, 1, 247, 10, 35), + (6203, 1, 247, 20, 35), + (6204, 1, 247, 60, 35), + (6209, 1, 264, 720, 245), + (6210, 1, 264, 1440, 245), + (6211, 1, 264, 2160, 245), + (6215, 1, 247, 5, 76), + (6216, 1, 247, 10, 76), + (6217, 1, 247, 15, 76), + (6223, 1, 232, 11, 4544), + (6224, 1, 232, 12, 4544), + (6225, 1, 232, 13, 4544), + (6226, 1, 232, 14, 4544), + (6227, 1, 232, 15, 4544), + (6228, 1, 264, 120, 404), + (6229, 1, 264, 240, 404), + (6230, 1, 264, 360, 404), + (6231, 1, 264, 480, 404), + (6233, 1, 264, 1728, 43), + (6234, 1, 264, 2160, 43), + (6235, 1, 264, 2592, 43), + (6236, 1, 287, 1, 0), + (6236, 2, 137, 3, 0), + (6236, 3, 137, 99, 0), + (6236, 4, 138, 0, 0), + (6236, 5, 244, 50, 0), + (6237, 1, 287, 2, 0), + (6237, 2, 137, 3, 0), + (6237, 3, 137, 99, 0), + (6237, 4, 138, 0, 0), + (6237, 5, 244, 38, 0), + (6238, 1, 287, 3, 0), + (6238, 2, 137, 3, 0), + (6238, 3, 137, 99, 0), + (6238, 4, 138, 0, 0), + (6238, 5, 244, 25, 0), + (6240, 1, 273, 3, 0), + (6241, 1, 273, 6, 0), + (6242, 1, 273, 9, 0), + (6243, 1, 273, 12, 0), + (6244, 1, 273, 15, 0), + (6245, 1, 273, 18, 0), + (6249, 1, 310, 1000, 0), + (6249, 2, 139, 11903, 0), + (6249, 3, 310, 1000, 0), + (6249, 4, 139, 11904, 0), + (6249, 5, 310, 1000, 0), + (6249, 6, 139, 11905, 0), + (6249, 7, 310, 1000, 0), + (6249, 8, 139, 1362, 0), + (6249, 9, 310, 1000, 0), + (6249, 10, 139, 8032, 0), + (6249, 11, 310, 1000, 0), + (6249, 12, 385, 6131, 0), + (6249, 13, 385, 6231, 0), + (6249, 14, 385, 6331, 0), + (6249, 15, 385, 6431, 0), + (6249, 16, 385, 6531, 0), + (6249, 17, 385, 6631, 0), + (6250, 1, 310, 2000, 0), + (6250, 2, 139, 11903, 0), + (6250, 3, 310, 2000, 0), + (6250, 4, 139, 11904, 0), + (6250, 5, 310, 2000, 0), + (6250, 6, 139, 11905, 0), + (6250, 7, 310, 2000, 0), + (6250, 8, 139, 1362, 0), + (6250, 9, 310, 2000, 0), + (6250, 10, 139, 8032, 0), + (6250, 11, 310, 2000, 0), + (6250, 12, 385, 6131, 0), + (6250, 13, 385, 6231, 0), + (6250, 14, 385, 6331, 0), + (6250, 15, 385, 6431, 0), + (6250, 16, 385, 6531, 0), + (6250, 17, 385, 6631, 0), + (6251, 1, 310, 3000, 0), + (6251, 2, 139, 11903, 0), + (6251, 3, 310, 3000, 0), + (6251, 4, 139, 11904, 0), + (6251, 5, 310, 3000, 0), + (6251, 6, 139, 11905, 0), + (6251, 7, 310, 3000, 0), + (6251, 8, 139, 1362, 0), + (6251, 9, 310, 3000, 0), + (6251, 10, 139, 8032, 0), + (6251, 11, 310, 3000, 0), + (6251, 12, 385, 6131, 0), + (6251, 13, 385, 6231, 0), + (6251, 14, 385, 6331, 0), + (6251, 15, 385, 6431, 0), + (6251, 16, 385, 6531, 0), + (6251, 17, 385, 6631, 0), + (6252, 1, 310, 4000, 0), + (6252, 2, 139, 11903, 0), + (6252, 3, 310, 4000, 0), + (6252, 4, 139, 11904, 0), + (6252, 5, 310, 4000, 0), + (6252, 6, 139, 11905, 0), + (6252, 7, 310, 4000, 0), + (6252, 8, 139, 1362, 0), + (6252, 9, 310, 4000, 0), + (6252, 10, 139, 8032, 0), + (6252, 11, 310, 4000, 0), + (6252, 12, 385, 6131, 0), + (6252, 13, 385, 6231, 0), + (6252, 14, 385, 6331, 0), + (6252, 15, 385, 6431, 0), + (6252, 16, 385, 6531, 0), + (6252, 17, 385, 6631, 0), + (6253, 1, 310, 5000, 0), + (6253, 2, 139, 11903, 0), + (6253, 3, 310, 5000, 0), + (6253, 4, 139, 11904, 0), + (6253, 5, 310, 5000, 0), + (6253, 6, 139, 11905, 0), + (6253, 7, 310, 5000, 0), + (6253, 8, 139, 1362, 0), + (6253, 9, 310, 5000, 0), + (6253, 10, 139, 8032, 0), + (6253, 11, 310, 5000, 0), + (6253, 12, 385, 6131, 0), + (6253, 13, 385, 6231, 0), + (6253, 14, 385, 6331, 0), + (6253, 15, 385, 6431, 0), + (6253, 16, 385, 6531, 0), + (6253, 17, 385, 6631, 0), + (6257, 1, 128, 5, 5), + (6257, 2, 138, 1, 0), + (6257, 3, 140, 1, 0), + (6257, 4, 139, -2741, 0), + (6257, 5, 139, -16843, 0), + (6257, 6, 385, -16192, 0), + (6258, 1, 128, 15, 15), + (6258, 2, 138, 1, 0), + (6258, 3, 140, 1, 0), + (6258, 4, 139, -2741, 0), + (6258, 5, 139, -16843, 0), + (6258, 6, 385, -16192, 0), + (6259, 1, 128, 30, 30), + (6259, 2, 138, 1, 0), + (6259, 3, 140, 1, 0), + (6259, 4, 139, -2741, 0), + (6259, 5, 139, -16843, 0), + (6259, 6, 385, -16192, 0), + (6260, 1, 264, 720, 98), + (6261, 1, 264, 900, 98), + (6262, 1, 264, 1080, 98), + (6266, 1, 224, 20, 10), + (6266, 2, 173, 1, 0), + (6267, 1, 224, 35, 10), + (6267, 2, 173, 2, 0), + (6268, 1, 224, 50, 10), + (6268, 2, 173, 3, 0), + (6269, 1, 224, 20, 30), + (6269, 2, 173, 1, 0), + (6270, 1, 224, 35, 30), + (6270, 2, 173, 2, 0), + (6271, 1, 224, 50, 30), + (6271, 2, 173, 3, 0), + (6272, 1, 264, 15, 672), + (6273, 1, 264, 30, 672), + (6274, 1, 264, 45, 672), + (6275, 1, 224, 20, 8), + (6275, 2, 173, 1, 0), + (6276, 1, 224, 35, 8), + (6276, 2, 173, 2, 0), + (6277, 1, 224, 50, 8), + (6277, 2, 173, 3, 0), + (6283, 1, 85, 13200, 0), + (6284, 1, 85, 13200, 25), + (6285, 1, 85, 13200, 50), + (6287, 1, 224, 20, 30), + (6287, 2, 173, 1, 0), + (6288, 1, 224, 35, 30), + (6288, 2, 173, 3, 0), + (6289, 1, 224, 50, 30), + (6289, 2, 173, 3, 0), + (6300, 1, 247, 20, 76), + (6301, 1, 247, 25, 76), + (6302, 1, 264, 120, 3710), + (6303, 1, 264, 240, 3710), + (6304, 1, 264, 360, 3710), + (6319, 1, 264, 1728, 107), + (6320, 1, 264, 2160, 107), + (6321, 1, 264, 2592, 107), + (6322, 1, 216, 5, 51), + (6323, 1, 216, 15, 51), + (6324, 1, 216, 25, 51), + (6331, 1, 252, 70, 0), + (6332, 1, 252, 75, 0), + (6334, 1, 185, 5, 51), + (6335, 1, 185, 10, 51), + (6336, 1, 185, 15, 51), + (6337, 1, 264, 60, 553), + (6338, 1, 264, 120, 553), + (6339, 1, 264, 180, 553), + (6340, 1, 264, 180, 777), + (6341, 1, 264, 360, 777), + (6342, 1, 264, 540, 777), + (6343, 1, 264, 5, 468), + (6343, 2, 264, 5, 469), + (6343, 3, 264, 5, 470), + (6344, 1, 264, 10, 468), + (6344, 2, 264, 10, 469), + (6344, 3, 264, 10, 470), + (6345, 1, 264, 15, 468), + (6345, 2, 264, 15, 469), + (6345, 3, 264, 15, 470), + (6346, 1, 264, 180, 494), + (6347, 1, 264, 360, 494), + (6348, 1, 264, 540, 494), + (6349, 1, 264, 180, 500), + (6350, 1, 264, 360, 500), + (6351, 1, 264, 540, 500), + (6355, 1, 310, 360000, 0), + (6355, 2, 139, 4506, 0), + (6355, 3, 310, 360000, 0), + (6355, 4, 385, 11122, 0), + (6355, 5, 385, 11222, 0), + (6355, 6, 385, 11322, 0), + (6355, 7, 385, 11522, 0), + (6356, 1, 310, 720000, 0), + (6356, 2, 139, 4506, 0), + (6356, 3, 310, 720000, 0), + (6356, 4, 385, 11122, 0), + (6356, 5, 385, 11222, 0), + (6356, 6, 385, 11322, 0), + (6356, 7, 385, 11522, 0), + (6357, 1, 310, 1080000, 0), + (6357, 2, 139, 4506, 0), + (6357, 3, 310, 1080000, 0), + (6357, 4, 385, 11122, 0), + (6357, 5, 385, 11222, 0), + (6357, 6, 385, 11322, 0), + (6357, 7, 385, 11522, 0), + (6358, 1, 310, 1440000, 0), + (6358, 2, 139, 4506, 0), + (6358, 3, 310, 1440000, 0), + (6358, 4, 385, 11122, 0), + (6358, 5, 385, 11222, 0), + (6358, 6, 385, 11322, 0), + (6358, 7, 385, 11522, 0), + (6359, 1, 310, 1800000, 0), + (6359, 2, 139, 4506, 0), + (6359, 3, 310, 1800000, 0), + (6359, 4, 385, 11122, 0), + (6359, 5, 385, 11222, 0), + (6359, 6, 385, 11322, 0), + (6359, 7, 385, 11522, 0), + (6360, 1, 310, 2160000, 0), + (6360, 2, 139, 4506, 0), + (6360, 3, 310, 2160000, 0), + (6360, 4, 385, 11122, 0), + (6360, 5, 385, 11222, 0), + (6360, 6, 385, 11322, 0), + (6360, 7, 385, 11522, 0), + (6361, 1, 213, 3, 0), + (6362, 1, 310, 120000, 0), + (6362, 2, 139, 5040, 0), + (6363, 1, 310, 240000, 0), + (6363, 2, 139, 5040, 0), + (6364, 1, 310, 360000, 0), + (6364, 2, 139, 5040, 0), + (6365, 1, 310, 480000, 0), + (6365, 2, 139, 5040, 0), + (6366, 1, 310, 600000, 0), + (6366, 2, 139, 5040, 0), + (6375, 1, 375, 107, 0), + (6376, 1, 375, 115, 0), + (6377, 1, 375, 125, 0), + (6383, 1, 215, 5, 0), + (6384, 1, 215, 7, 0), + (6385, 1, 215, 10, 0), + (6386, 1, 293, 5, 0), + (6387, 1, 293, 10, 0), + (6388, 1, 293, 15, 0), + (6389, 1, 293, 20, 0), + (6390, 1, 0, 16, 0), + (6391, 1, 0, 17, 0), + (6392, 1, 0, 18, 0), + (6393, 1, 0, 19, 0), + (6394, 1, 0, 20, 0), + (6395, 1, 85, 13502, 0), + (6396, 1, 85, 13503, 0), + (6397, 1, 85, 13504, 0), + (6403, 1, 294, 11, 100), + (6404, 1, 294, 13, 100), + (6405, 1, 294, 15, 100), + (6406, 1, 360, 25, 13201), + (6407, 1, 360, 25, 13202), + (6408, 1, 360, 25, 13203), + (6409, 1, 247, 5, 76), + (6410, 1, 247, 10, 76), + (6411, 1, 247, 15, 76), + (6412, 1, 247, 20, 76), + (6413, 1, 247, 25, 76), + (6414, 1, 247, 30, 76), + (6415, 1, 247, 35, 76), + (6416, 1, 247, 40, 76), + (6417, 1, 247, 45, 76), + (6418, 1, 247, 50, 76), + (6419, 1, 247, 5, 76), + (6420, 1, 247, 10, 76), + (6421, 1, 247, 15, 76), + (6422, 1, 214, 100, 0), + (6423, 1, 214, 200, 0), + (6424, 1, 214, 300, 0), + (6428, 1, 320, 1, 0), + (6429, 1, 320, 3, 0), + (6430, 1, 320, 5, 0), + (6431, 1, 317, 6, 0), + (6432, 1, 317, 7, 0), + (6433, 1, 317, 8, 0), + (6434, 1, 317, 9, 0), + (6435, 1, 317, 10, 0), + (6436, 1, 244, 70, 0), + (6437, 1, 244, 60, 0), + (6438, 1, 244, 50, 0), + (6439, 1, 264, 720, 41), + (6440, 1, 264, 900, 41), + (6441, 1, 264, 840, 420), + (6442, 1, 264, 540, 362), + (6443, 1, 264, 630, 362), + (6445, 1, 127, 15, 0), + (6445, 2, 139, 3248, 0), + (6445, 3, 127, 15, 0), + (6445, 4, 139, 3249, 0), + (6446, 1, 127, 30, 0), + (6446, 2, 139, 3248, 0), + (6446, 3, 127, 30, 0), + (6446, 4, 139, 3249, 0), + (6447, 1, 127, 50, 0), + (6447, 2, 139, 3248, 0), + (6447, 3, 127, 50, 0), + (6447, 4, 139, 3249, 0), + (6452, 1, 310, 1000, 0), + (6452, 2, 403, 7, 0), + (6452, 3, 404, 35, 0), + (6452, 4, 144, 2000, 0), + (6452, 5, 310, 5000, 0), + (6452, 6, 403, 7, 0), + (6452, 7, 404, 35, 0), + (6452, 8, 144, 10000, 0), + (6453, 1, 310, 2000, 0), + (6453, 2, 403, 7, 0), + (6453, 3, 404, 35, 0), + (6453, 4, 144, 2000, 0), + (6453, 5, 310, 10000, 0), + (6453, 6, 403, 7, 0), + (6453, 7, 404, 35, 0), + (6453, 8, 144, 10000, 0), + (6454, 1, 310, 3000, 0), + (6454, 2, 403, 7, 0), + (6454, 3, 404, 35, 0), + (6454, 4, 144, 2000, 0), + (6454, 5, 310, 15000, 0), + (6454, 6, 403, 7, 0), + (6454, 7, 404, 35, 0), + (6454, 8, 144, 10000, 0), + (6458, 1, 310, 30000, 0), + (6458, 2, 385, 5137, 0), + (6458, 3, 385, 5237, 0), + (6458, 4, 385, 5337, 0), + (6458, 5, 385, 5437, 0), + (6458, 6, 385, 5537, 0), + (6458, 7, 385, 5637, 0), + (6458, 8, 127, 15, 15), + (6458, 9, 385, 5137, 0), + (6458, 10, 385, 5237, 0), + (6458, 11, 385, 5337, 0), + (6458, 12, 385, 5437, 0), + (6458, 13, 385, 5537, 0), + (6458, 14, 385, 5637, 0), + (6459, 1, 310, 60000, 0), + (6459, 2, 385, 5137, 0), + (6459, 3, 385, 5237, 0), + (6459, 4, 385, 5337, 0), + (6459, 5, 385, 5437, 0), + (6459, 6, 385, 5537, 0), + (6459, 7, 385, 5637, 0), + (6459, 8, 127, 30, 30), + (6459, 9, 385, 5137, 0), + (6459, 10, 385, 5237, 0), + (6459, 11, 385, 5337, 0), + (6459, 12, 385, 5437, 0), + (6459, 13, 385, 5537, 0), + (6459, 14, 385, 5637, 0), + (6460, 1, 310, 90000, 0), + (6460, 2, 385, 5137, 0), + (6460, 3, 385, 5237, 0), + (6460, 4, 385, 5337, 0), + (6460, 5, 385, 5437, 0), + (6460, 6, 385, 5537, 0), + (6460, 7, 385, 5637, 0), + (6460, 8, 127, 50, 50), + (6460, 9, 385, 5137, 0), + (6460, 10, 385, 5237, 0), + (6460, 11, 385, 5337, 0), + (6460, 12, 385, 5437, 0), + (6460, 13, 385, 5537, 0), + (6460, 14, 385, 5637, 0), + (6461, 1, 127, 15, 0), + (6461, 2, 385, 14130, 0), + (6461, 3, 385, 14230, 0), + (6461, 4, 385, 14330, 0), + (6461, 5, 385, 14430, 0), + (6461, 6, 385, 14530, 0), + (6461, 7, 385, 14630, 0), + (6461, 8, 310, 30000, 0), + (6461, 9, 385, 14130, 0), + (6461, 10, 385, 14230, 0), + (6461, 11, 385, 14330, 0), + (6461, 12, 385, 14430, 0), + (6461, 13, 385, 14530, 0), + (6461, 14, 385, 14630, 0), + (6462, 1, 127, 30, 0), + (6462, 2, 385, 14130, 0), + (6462, 3, 385, 14230, 0), + (6462, 4, 385, 14330, 0), + (6462, 5, 385, 14430, 0), + (6462, 6, 385, 14530, 0), + (6462, 7, 385, 14630, 0), + (6462, 8, 310, 60000, 0), + (6462, 9, 385, 14130, 0), + (6462, 10, 385, 14230, 0), + (6462, 11, 385, 14330, 0), + (6462, 12, 385, 14430, 0), + (6462, 13, 385, 14530, 0), + (6462, 14, 385, 14630, 0), + (6463, 1, 127, 50, 0), + (6463, 2, 385, 14130, 0), + (6463, 3, 385, 14230, 0), + (6463, 4, 385, 14330, 0), + (6463, 5, 385, 14430, 0), + (6463, 6, 385, 14530, 0), + (6463, 7, 385, 14630, 0), + (6463, 8, 310, 90000, 0), + (6463, 9, 385, 14130, 0), + (6463, 10, 385, 14230, 0), + (6463, 11, 385, 14330, 0), + (6463, 12, 385, 14430, 0), + (6463, 13, 385, 14530, 0), + (6463, 14, 385, 14630, 0), + (6467, 1, 214, 100, 0), + (6468, 1, 214, 200, 0), + (6469, 1, 214, 300, 0), + (6470, 1, 247, 15, 76), + (6471, 1, 247, 20, 76), + (6472, 1, 247, 30, 76), + (6473, 1, 247, 35, 76), + (6474, 1, 247, 55, 76), + (6475, 1, 247, 60, 76), + (6476, 1, 247, 20, 76), + (6477, 1, 247, 25, 76), + (6478, 1, 264, 1, 3800), + (6479, 1, 264, 2, 3800), + (6480, 1, 264, 3, 3800), + (6481, 1, 264, 6480, 36), + (6482, 1, 264, 12960, 36), + (6483, 1, 264, 19440, 36), + (6484, 1, 264, 105, 558), + (6485, 1, 264, 120, 558), + (6486, 1, 264, 135, 558), + (6489, 1, 310, 600000, 0), + (6489, 2, 139, 4500, 0), + (6489, 3, 411, 8, 0), + (6490, 1, 310, 1200000, 0), + (6490, 2, 139, 4500, 0), + (6490, 3, 411, 8, 0), + (6491, 1, 310, 1800000, 0), + (6491, 2, 139, 4500, 0), + (6491, 3, 411, 8, 0), + (6500, 1, 273, 5, 0), + (6501, 1, 273, 6, 0), + (6502, 1, 273, 7, 0), + (6503, 1, 127, 12, 0), + (6503, 2, 385, 3338, 0), + (6504, 1, 127, 24, 0), + (6504, 2, 385, 3338, 0), + (6505, 1, 127, 36, 0), + (6505, 2, 385, 3338, 0), + (6506, 1, 127, 50, 0), + (6506, 2, 385, 3338, 0), + (6511, 1, 216, 5, 7), + (6512, 1, 216, 15, 7), + (6513, 1, 216, 25, 7), + (6514, 1, 127, 15, 0), + (6514, 2, 139, 5880, 0), + (6515, 1, 127, 30, 0), + (6515, 2, 139, 5880, 0), + (6516, 1, 127, 50, 0), + (6516, 2, 139, 5880, 0), + (6517, 1, 339, 10, 8105), + (6517, 2, 142, 65, 0), + (6517, 3, 311, 0, 0), + (6517, 4, 134, 70, 0), + (6517, 5, 348, 10, 0), + (6517, 6, 137, 0, 0), + (6517, 7, 339, 10, 8105), + (6517, 8, 142, 65, 0), + (6517, 9, 311, 0, 0), + (6517, 10, 134, 70, 0), + (6517, 11, 348, 10, 0), + (6517, 12, 137, 100, 0), + (6517, 13, 339, 10, 8105), + (6517, 14, 142, 65, 0), + (6517, 15, 311, 0, 0), + (6517, 16, 134, 70, 0), + (6517, 17, 348, 10, 0), + (6517, 18, 137, 79, 0), + (6517, 19, 339, 10, 8105), + (6517, 20, 142, 65, 0), + (6517, 21, 311, 0, 0), + (6517, 22, 134, 70, 0), + (6517, 23, 348, 10, 0), + (6517, 24, 137, 147, 0), + (6517, 25, 339, 10, 11404), + (6517, 26, 142, 71, 0), + (6517, 27, 311, 0, 0), + (6517, 28, 134, 75, 0), + (6517, 29, 348, 10, 0), + (6517, 30, 137, 0, 0), + (6517, 31, 339, 10, 11404), + (6517, 32, 142, 71, 0), + (6517, 33, 311, 0, 0), + (6517, 34, 134, 75, 0), + (6517, 35, 348, 10, 0), + (6517, 36, 137, 100, 0), + (6517, 37, 339, 10, 11404), + (6517, 38, 142, 71, 0), + (6517, 39, 311, 0, 0), + (6517, 40, 134, 75, 0), + (6517, 41, 348, 10, 0), + (6517, 42, 137, 79, 0), + (6517, 43, 339, 10, 11404), + (6517, 44, 142, 71, 0), + (6517, 45, 311, 0, 0), + (6517, 46, 134, 75, 0), + (6517, 47, 348, 10, 0), + (6517, 48, 137, 147, 0), + (6517, 49, 339, 10, 13199), + (6517, 50, 142, 76, 0), + (6517, 51, 311, 0, 0), + (6517, 52, 134, 80, 0), + (6517, 53, 348, 10, 0), + (6517, 54, 137, 0, 0), + (6517, 55, 339, 10, 13199), + (6517, 56, 142, 76, 0), + (6517, 57, 311, 0, 0), + (6517, 58, 134, 80, 0), + (6517, 59, 348, 10, 0), + (6517, 60, 137, 100, 0), + (6517, 61, 339, 10, 13199), + (6517, 62, 142, 76, 0), + (6517, 63, 311, 0, 0), + (6517, 64, 134, 80, 0), + (6517, 65, 348, 10, 0), + (6517, 66, 137, 79, 0), + (6517, 67, 339, 10, 13199), + (6517, 68, 142, 76, 0), + (6517, 69, 311, 0, 0), + (6517, 70, 134, 80, 0), + (6517, 71, 348, 10, 0), + (6517, 72, 137, 147, 0), + (6518, 1, 221, 18, 0), + (6519, 1, 221, 21, 0), + (6520, 1, 221, 24, 0), + (6521, 1, 327, 6, 0), + (6522, 1, 327, 7, 0), + (6523, 1, 328, 800, 0), + (6524, 1, 328, 850, 0), + (6525, 1, 328, 900, 0), + (6526, 1, 328, 950, 0), + (6527, 1, 328, 1000, 0), + (6528, 1, 264, 3024, 107), + (6531, 1, 360, 40, 11629), + (6532, 1, 360, 50, 11629), + (6533, 1, 360, 60, 11629), + (6540, 1, 363, 2, 0), + (6545, 1, 362, 2, 0), + (6546, 1, 2, 4, 0), + (6547, 1, 2, 8, 0), + (6548, 1, 2, 12, 0), + (6549, 1, 2, 16, 0), + (6550, 1, 2, 20, 0), + (6551, 1, 2, 24, 0), + (6552, 1, 2, 28, 0), + (6553, 1, 2, 32, 0), + (6554, 1, 2, 36, 0), + (6555, 1, 2, 40, 0), + (6556, 1, 2, 44, 0), + (6557, 1, 2, 48, 0), + (6558, 1, 2, 52, 0), + (6559, 1, 2, 56, 0), + (6560, 1, 2, 60, 0), + (6561, 1, 2, 64, 0), + (6562, 1, 2, 68, 0), + (6563, 1, 2, 72, 0), + (6564, 1, 2, 76, 0), + (6565, 1, 2, 80, 0), + (6566, 1, 2, 84, 0), + (6567, 1, 2, 88, 0), + (6568, 1, 2, 92, 0), + (6569, 1, 2, 96, 0), + (6570, 1, 2, 100, 0), + (6571, 1, 2, 104, 0), + (6601, 1, 339, 5, 13519), + (6601, 2, 137, 21, 0), + (6602, 1, 339, 10, 13519), + (6602, 2, 137, 21, 0), + (6603, 1, 339, 15, 13519), + (6603, 2, 137, 21, 0), + (6604, 1, 339, 20, 13519), + (6604, 2, 137, 21, 0), + (6605, 1, 339, 25, 13519), + (6605, 2, 137, 21, 0), + (6611, 1, 310, 120000, 0), + (6611, 2, 139, 4670, 0), + (6612, 1, 310, 240000, 0), + (6612, 2, 139, 4670, 0), + (6613, 1, 310, 360000, 0), + (6613, 2, 139, 4670, 0), + (6614, 1, 310, 120000, 0), + (6614, 2, 139, 4674, 0), + (6615, 1, 310, 240000, 0), + (6615, 2, 139, 4674, 0), + (6616, 1, 310, 360000, 0), + (6616, 2, 139, 4674, 0), + (6618, 1, 310, 480000, 0), + (6618, 2, 139, 4670, 0), + (6619, 1, 310, 600000, 0), + (6619, 2, 139, 4670, 0), + (6630, 1, 218, 1, 0), + (6631, 1, 218, 2, 0), + (6632, 1, 218, 3, 0), + (6633, 1, 218, 4, 0), + (6634, 1, 218, 5, 0), + (6636, 1, 294, 0, 107), + (6637, 1, 294, 0, 115), + (6638, 1, 294, 0, 125), + (6641, 1, 339, 10, 16101), + (6641, 2, 138, 0, 0), + (6641, 3, 142, 70, 0), + (6641, 4, 403, 4, 0), + (6641, 5, 348, 1, 0), + (6641, 6, 404, 2, 0), + (6641, 7, 141, 1, 0), + (6642, 1, 339, 10, 16102), + (6642, 2, 138, 0, 0), + (6642, 3, 142, 70, 0), + (6642, 4, 403, 4, 0), + (6642, 5, 348, 1, 0), + (6642, 6, 404, 2, 0), + (6642, 7, 141, 1, 0), + (6643, 1, 339, 10, 16103), + (6643, 2, 138, 0, 0), + (6643, 3, 142, 70, 0), + (6643, 4, 403, 4, 0), + (6643, 5, 348, 1, 0), + (6643, 6, 404, 2, 0), + (6643, 7, 141, 1, 0), + (6660, 1, 325, 55, 0), + (6661, 1, 325, 60, 0), + (6662, 1, 325, 65, 0), + (6666, 1, 287, 2, 0), + (6666, 2, 139, 8001, 0), + (6666, 3, 385, 12529, 0), + (6667, 1, 287, 4, 0), + (6667, 2, 139, 8001, 0), + (6667, 3, 385, 12529, 0), + (6668, 1, 287, 2, 0), + (6668, 2, 139, 11251, 0), + (6668, 3, 139, 11252, 0), + (6668, 4, 139, 11253, 0), + (6669, 1, 287, 4, 0), + (6669, 2, 139, 11251, 0), + (6669, 3, 139, 11252, 0), + (6669, 4, 139, 11253, 0), + (6670, 1, 287, 6, 0), + (6670, 2, 139, 11251, 0), + (6670, 3, 139, 11252, 0), + (6670, 4, 139, 11253, 0), + (6697, 1, 264, 30, 857), + (6698, 1, 264, 60, 857), + (6699, 1, 264, 90, 857), + (6700, 1, 264, 120, 857), + (6701, 1, 264, 150, 857), + (6703, 1, 264, 10, 171), + (6704, 1, 264, 20, 171), + (6705, 1, 264, 30, 171), + (6709, 1, 127, 5, 0), + (6709, 2, 139, 3842, 0), + (6710, 1, 127, 10, 0), + (6710, 2, 139, 3842, 0), + (6711, 1, 127, 15, 0), + (6711, 2, 139, 3842, 0), + (6712, 1, 264, 30, 177), + (6713, 1, 264, 60, 177), + (6714, 1, 264, 90, 177), + (6715, 1, 264, 120, 177), + (6716, 1, 264, 150, 177), + (6751, 1, 310, 240000, 0), + (6751, 2, 139, 4519, 0), + (6752, 1, 310, 480000, 0), + (6752, 2, 139, 4519, 0), + (6753, 1, 310, 720000, 0), + (6753, 2, 139, 4519, 0), + (6761, 1, 292, 5, 0), + (6762, 1, 292, 10, 0), + (6763, 1, 292, 15, 0), + (6765, 1, 330, 15, 7), + (6766, 1, 330, 30, 7), + (6767, 1, 330, 50, 7), + (6768, 1, 310, 960000, 0), + (6768, 2, 139, 4519, 0), + (6769, 1, 310, 1200000, 0), + (6769, 2, 139, 4519, 0), + (6791, 1, 339, 20, 16139), + (6791, 2, 137, 21, 0), + (6791, 3, 385, -18000, 0), + (6791, 4, 339, 20, 16139), + (6791, 5, 137, 343, 0), + (6791, 6, 385, -18000, 0), + (6792, 1, 339, 20, 16140), + (6792, 2, 137, 21, 0), + (6792, 3, 385, -18000, 0), + (6792, 4, 339, 20, 16140), + (6792, 5, 137, 343, 0), + (6792, 6, 385, -18000, 0), + (6793, 1, 339, 20, 16141), + (6793, 2, 137, 21, 0), + (6793, 3, 385, -18000, 0), + (6793, 4, 339, 20, 16141), + (6793, 5, 137, 343, 0), + (6793, 6, 385, -18000, 0), + (6819, 1, 264, 180, 524), + (6820, 1, 264, 360, 524), + (6821, 1, 264, 540, 524), + (6823, 1, 264, 180, 320), + (6824, 1, 264, 360, 320), + (6825, 1, 264, 540, 320), + (6826, 1, 264, 720, 320), + (6827, 1, 264, 900, 320), + (6870, 1, 264, 180, 544), + (6871, 1, 264, 360, 544), + (6872, 1, 264, 540, 544), + (6873, 1, 279, 7, 0), + (6874, 1, 279, 11, 0), + (6875, 1, 279, 15, 0), + (6876, 1, 375, 107, 0), + (6877, 1, 375, 115, 0), + (6878, 1, 375, 125, 0), + (6879, 1, 243, 15, 0), + (6880, 1, 243, 25, 0), + (6881, 1, 243, 35, 0), + (6882, 1, 242, 5, 0), + (6883, 1, 242, 10, 0), + (6884, 1, 242, 15, 0), + (6900, 1, 264, 840, 465), + (6901, 1, 264, 1140, 465), + (6902, 1, 264, 1440, 465), + (6903, 1, 264, 1740, 465), + (6904, 1, 264, 2040, 465), + (6905, 1, 225, 33, 0), + (6906, 1, 225, 36, 0), + (6907, 1, 225, 39, 0), + (6908, 1, 264, 180, 499), + (6909, 1, 264, 360, 499), + (6910, 1, 264, 540, 499), + (6911, 1, 224, 60, 74), + (6911, 2, 173, 2, 0), + (6912, 1, 224, 70, 74), + (6912, 2, 173, 3, 0), + (6913, 1, 224, 80, 74), + (6913, 2, 173, 3, 0), + (6935, 1, 264, 180, 465), + (6936, 1, 264, 360, 465), + (6937, 1, 264, 540, 465), + (6938, 1, 361, 65, 16164), + (6939, 1, 361, 75, 16165), + (6940, 1, 361, 85, 16166), + (6941, 1, 264, 120, 962), + (6942, 1, 264, 240, 962), + (6943, 1, 264, 360, 962), + (6944, 1, 264, 480, 962), + (6945, 1, 264, 600, 962), + (6974, 1, 264, 3, 247), + (6974, 2, 264, 2, 986), + (6974, 3, 264, 2, 987), + (6974, 4, 264, 2, 988), + (6975, 1, 264, 6, 247), + (6975, 2, 264, 4, 986), + (6975, 3, 264, 4, 987), + (6975, 4, 264, 4, 988), + (6976, 1, 264, 12, 247), + (6976, 2, 264, 6, 986), + (6976, 3, 264, 6, 987), + (6976, 4, 264, 6, 988), + (6977, 1, 264, 6, 3817), + (6978, 1, 264, 12, 3817), + (6979, 1, 264, 18, 3817), + (6980, 1, 264, 45, 128), + (6981, 1, 264, 90, 128), + (6982, 1, 264, 135, 128), + (6987, 1, 353, 1, 0), + (6988, 1, 287, 1, 0), + (6988, 2, 385, 16439, 0), + (6988, 3, 411, 32768, 0), + (6989, 1, 287, 2, 0), + (6989, 2, 385, 16439, 0), + (6989, 3, 411, 32768, 0), + (6990, 1, 287, 3, 0), + (6990, 2, 385, 16439, 0), + (6990, 3, 411, 32768, 0), + (7005, 1, 264, 432, 789), + (7006, 1, 264, 864, 789), + (7007, 1, 264, 1296, 789), + (7008, 1, 439, 0, 109400), + (7008, 2, 345, 80, 35), + (7009, 1, 439, 0, 116800), + (7009, 2, 345, 82, 35), + (7010, 1, 378, 25, 96), + (7011, 1, 378, 30, 96), + (7012, 1, 378, 35, 96), + (7013, 1, 378, 40, 96), + (7014, 1, 378, 45, 96), + (7015, 1, 378, 50, 96), + (7033, 1, 421, 5, 0), + (7033, 2, 139, 16097, 0), + (7033, 3, 139, 23612, 0), + (7033, 4, 139, 32196, 0), + (7033, 5, 139, 32565, 0), + (7033, 6, 423, 6, 0), + (7033, 7, 422, 5, 0), + (7033, 8, 411, 2, 0), + (7034, 1, 421, 10, 0), + (7034, 2, 139, 16097, 0), + (7034, 3, 139, 23612, 0), + (7034, 4, 139, 32196, 0), + (7034, 5, 139, 32565, 0), + (7034, 6, 423, 6, 0), + (7034, 7, 422, 5, 0), + (7034, 8, 411, 2, 0), + (7035, 1, 421, 15, 0), + (7035, 2, 139, 16097, 0), + (7035, 3, 139, 23612, 0), + (7035, 4, 139, 32196, 0), + (7035, 5, 139, 32565, 0), + (7035, 6, 423, 6, 0), + (7035, 7, 422, 5, 0), + (7035, 8, 411, 2, 0), + (7036, 1, 264, 10, 3646), + (7037, 1, 264, 20, 3646), + (7038, 1, 264, 30, 3646), + (7050, 1, 265, 62, 0), + (7051, 1, 265, 64, 0), + (7052, 1, 265, 66, 0), + (7053, 1, 265, 67, 0), + (7054, 1, 265, 69, 0), + (7055, 1, 265, 71, 0), + (7056, 1, 265, 62, 0), + (7057, 1, 265, 64, 0), + (7058, 1, 265, 66, 0), + (7059, 1, 265, 67, 0), + (7060, 1, 265, 69, 0), + (7061, 1, 265, 71, 0), + (7062, 1, 372, 50, 0), + (7063, 1, 265, 72, 0), + (7064, 1, 265, 74, 0), + (7065, 1, 265, 76, 0), + (7066, 1, 265, 72, 0), + (7067, 1, 265, 74, 0), + (7068, 1, 265, 76, 0), + (7100, 1, 264, 180, 254), + (7101, 1, 264, 360, 254), + (7102, 1, 264, 540, 254), + (7103, 1, 264, 432, 286), + (7103, 2, 264, 432, 10753), + (7103, 3, 264, 432, 9101), + (7104, 1, 264, 864, 286), + (7104, 2, 264, 864, 10753), + (7104, 3, 264, 864, 9101), + (7105, 1, 264, 1296, 286), + (7105, 2, 264, 1296, 10753), + (7105, 3, 264, 1296, 9101), + (7106, 1, 224, 20, 30), + (7106, 2, 173, 1, 0), + (7107, 1, 224, 35, 30), + (7107, 2, 173, 2, 0), + (7108, 1, 224, 50, 30), + (7108, 2, 173, 3, 0), + (7112, 1, 85, 13596, 50), + (7113, 1, 85, 13597, 50), + (7114, 1, 85, 13598, 50), + (7116, 1, 264, 360, 110), + (7117, 1, 264, 450, 110), + (7118, 1, 264, 540, 110), + (7122, 1, 349, 30, 0), + (7123, 1, 349, 35, 0), + (7124, 1, 349, 40, 0), + (7125, 1, 349, 45, 0), + (7126, 1, 349, 50, 0), + (7128, 1, 264, 240, 109), + (7129, 1, 264, 300, 109), + (7130, 1, 264, 360, 109), + (7131, 1, 439, 0, 88880), + (7131, 2, 345, 74, 28), + (7132, 1, 439, 0, 95440), + (7132, 2, 345, 76, 28), + (7133, 1, 439, 0, 102280), + (7133, 2, 345, 78, 28), + (7134, 1, 220, 120, 8), + (7135, 1, 220, 140, 8), + (7136, 1, 220, 165, 8), + (7137, 1, 264, 60, 672), + (7138, 1, 264, 75, 672), + (7139, 1, 264, 90, 672), + (7146, 1, 252, 80, 0), + (7147, 1, 252, 85, 0), + (7148, 1, 216, 350, 8), + (7149, 1, 216, 400, 8), + (7150, 1, 216, 450, 8), + (7151, 1, 258, 59, 0), + (7152, 1, 258, 64, 0), + (7153, 1, 258, 69, 0), + (7160, 1, 227, 120, 32), + (7161, 1, 227, 150, 32), + (7162, 1, 227, 180, 32), + (7163, 1, 220, 130, 26), + (7163, 2, 220, 130, 30), + (7163, 3, 220, 130, 38), + (7164, 1, 220, 140, 26), + (7164, 2, 220, 140, 30), + (7164, 3, 220, 140, 38), + (7165, 1, 220, 150, 26), + (7165, 2, 220, 150, 30), + (7165, 3, 220, 150, 38), + (7166, 1, 264, 20, 468), + (7166, 2, 264, 20, 469), + (7166, 3, 264, 20, 470), + (7167, 1, 264, 25, 468), + (7167, 2, 264, 25, 469), + (7167, 3, 264, 25, 470), + (7168, 1, 264, 30, 468), + (7168, 2, 264, 30, 469), + (7168, 3, 264, 30, 470), + (7169, 1, 220, 135, 21), + (7169, 2, 220, 135, 23), + (7169, 3, 220, 270, 52), + (7169, 4, 220, 135, 28), + (7170, 1, 220, 145, 21), + (7170, 2, 220, 145, 23), + (7170, 3, 220, 290, 52), + (7170, 4, 220, 145, 28), + (7171, 1, 220, 155, 21), + (7171, 2, 220, 155, 23), + (7171, 3, 220, 310, 52), + (7171, 4, 220, 155, 28), + (7175, 1, 283, 120, 0), + (7176, 1, 283, 140, 0), + (7177, 1, 283, 160, 0), + (7196, 1, 169, 20, -1), + (7197, 1, 169, 25, -1), + (7198, 1, 169, 30, -1), + (7204, 1, 218, 11, 0), + (7205, 1, 218, 12, 0), + (7206, 1, 218, 13, 0), + (7207, 1, 218, 14, 0), + (7208, 1, 218, 15, 0), + (7210, 1, 280, 50, 0), + (7211, 1, 280, 53, 0), + (7212, 1, 280, 56, 0), + (7213, 1, 280, 59, 0), + (7214, 1, 280, 62, 0), + (7215, 1, 264, 4200, 68), + (7216, 1, 264, 4800, 68), + (7220, 1, 360, 60, 12701), + (7221, 1, 360, 60, 12702), + (7222, 1, 360, 60, 12703), + (7232, 1, 294, 0, 185), + (7233, 1, 294, 0, 190), + (7234, 1, 294, 0, 195), + (7260, 1, 287, 14, 0), + (7260, 2, 385, 2754, 1), + (7261, 1, 287, 16, 0), + (7261, 2, 385, 2754, 1), + (7262, 1, 287, 18, 0), + (7262, 2, 385, 2754, 1), + (7263, 1, 274, 18, 0), + (7264, 1, 274, 20, 0), + (7265, 1, 274, 22, 0), + (7267, 1, 280, 54, 0), + (7268, 1, 280, 55, 0), + (7269, 1, 280, 56, 0), + (7270, 1, 218, 16, 0), + (7271, 1, 218, 17, 0), + (7272, 1, 218, 18, 0), + (7273, 1, 218, 19, 0), + (7274, 1, 218, 20, 0), + (7279, 1, 310, 6000, 0), + (7279, 2, 139, 11903, 0), + (7279, 3, 310, 6000, 0), + (7279, 4, 139, 11904, 0), + (7279, 5, 310, 6000, 0), + (7279, 6, 139, 11905, 0), + (7279, 7, 310, 6000, 0), + (7279, 8, 139, 1362, 0), + (7279, 9, 310, 6000, 0), + (7279, 10, 139, 8032, 0), + (7279, 11, 310, 6000, 0), + (7279, 12, 385, 6131, 0), + (7279, 13, 385, 6231, 0), + (7279, 14, 385, 6331, 0), + (7279, 15, 385, 6431, 0), + (7279, 16, 385, 6531, 0), + (7279, 17, 385, 6631, 0), + (7280, 1, 310, 7000, 0), + (7280, 2, 139, 11903, 0), + (7280, 3, 310, 7000, 0), + (7280, 4, 139, 11904, 0), + (7280, 5, 310, 7000, 0), + (7280, 6, 139, 11905, 0), + (7280, 7, 310, 7000, 0), + (7280, 8, 139, 1362, 0), + (7280, 9, 310, 7000, 0), + (7280, 10, 139, 8032, 0), + (7280, 11, 310, 7000, 0), + (7280, 12, 385, 6131, 0), + (7280, 13, 385, 6231, 0), + (7280, 14, 385, 6331, 0), + (7280, 15, 385, 6431, 0), + (7280, 16, 385, 6531, 0), + (7280, 17, 385, 6631, 0), + (7281, 1, 310, 8000, 0), + (7281, 2, 139, 11903, 0), + (7281, 3, 310, 8000, 0), + (7281, 4, 139, 11904, 0), + (7281, 5, 310, 8000, 0), + (7281, 6, 139, 11905, 0), + (7281, 7, 310, 8000, 0), + (7281, 8, 139, 1362, 0), + (7281, 9, 310, 8000, 0), + (7281, 10, 139, 8032, 0), + (7281, 11, 310, 8000, 0), + (7281, 12, 385, 6131, 0), + (7281, 13, 385, 6231, 0), + (7281, 14, 385, 6331, 0), + (7281, 15, 385, 6431, 0), + (7281, 16, 385, 6531, 0), + (7281, 17, 385, 6631, 0), + (7282, 1, 310, 9000, 0), + (7282, 2, 139, 11903, 0), + (7282, 3, 310, 9000, 0), + (7282, 4, 139, 11904, 0), + (7282, 5, 310, 9000, 0), + (7282, 6, 139, 11905, 0), + (7282, 7, 310, 9000, 0), + (7282, 8, 139, 1362, 0), + (7282, 9, 310, 9000, 0), + (7282, 10, 139, 8032, 0), + (7282, 11, 310, 9000, 0), + (7282, 12, 385, 6131, 0), + (7282, 13, 385, 6231, 0), + (7282, 14, 385, 6331, 0), + (7282, 15, 385, 6431, 0), + (7282, 16, 385, 6531, 0), + (7282, 17, 385, 6631, 0), + (7283, 1, 310, 10000, 0), + (7283, 2, 139, 11903, 0), + (7283, 3, 310, 10000, 0), + (7283, 4, 139, 11904, 0), + (7283, 5, 310, 10000, 0), + (7283, 6, 139, 11905, 0), + (7283, 7, 310, 10000, 0), + (7283, 8, 139, 1362, 0), + (7283, 9, 310, 10000, 0), + (7283, 10, 139, 8032, 0), + (7283, 11, 310, 10000, 0), + (7283, 12, 385, 6131, 0), + (7283, 13, 385, 6231, 0), + (7283, 14, 385, 6331, 0), + (7283, 15, 385, 6431, 0), + (7283, 16, 385, 6531, 0), + (7283, 17, 385, 6631, 0), + (7284, 1, 287, 3, 0), + (7284, 2, 137, 31, 0), + (7284, 3, 136, 5, 0), + (7313, 1, 244, 40, 0), + (7314, 1, 244, 30, 0), + (7315, 1, 244, 20, 0), + (7316, 1, 264, 1080, 41), + (7317, 1, 264, 1260, 41), + (7318, 1, 339, 25, 16015), + (7318, 2, 137, 21, 0), + (7319, 1, 339, 25, 16016), + (7319, 2, 137, 21, 0), + (7320, 1, 339, 25, 16017), + (7320, 2, 137, 21, 0), + (7321, 1, 339, 25, 16018), + (7321, 2, 137, 21, 0), + (7322, 1, 339, 25, 16019), + (7322, 2, 137, 21, 0), + (7323, 1, 264, 720, 254), + (7324, 1, 264, 900, 254), + (7325, 1, 264, 1080, 254), + (7326, 1, 264, 1728, 286), + (7326, 2, 264, 1728, 10753), + (7326, 3, 264, 1728, 9101), + (7327, 1, 264, 2160, 286), + (7327, 2, 264, 2160, 10753), + (7327, 3, 264, 2160, 9101), + (7328, 1, 264, 2592, 286), + (7328, 2, 264, 2592, 10753), + (7328, 3, 264, 2592, 9101), + (7336, 1, 85, 16029, 0), + (7337, 1, 85, 16030, 0), + (7338, 1, 85, 16031, 0), + (7353, 1, 216, 115, 0), + (7353, 2, 216, 115, 1), + (7353, 3, 216, 115, 2), + (7353, 4, 216, 115, 3), + (7353, 5, 216, 115, 10), + (7353, 6, 216, 115, 28), + (7353, 7, 216, 115, 30), + (7353, 8, 216, 115, 36), + (7353, 9, 216, 115, 77), + (7354, 1, 216, 120, 0), + (7354, 2, 216, 120, 1), + (7354, 3, 216, 120, 2), + (7354, 4, 216, 120, 3), + (7354, 5, 216, 120, 10), + (7354, 6, 216, 120, 28), + (7354, 7, 216, 120, 30), + (7354, 8, 216, 120, 36), + (7354, 9, 216, 120, 77), + (7355, 1, 216, 125, 0), + (7355, 2, 216, 125, 1), + (7355, 3, 216, 125, 2), + (7355, 4, 216, 125, 3), + (7355, 5, 216, 125, 10), + (7355, 6, 216, 125, 28), + (7355, 7, 216, 125, 30), + (7355, 8, 216, 125, 36), + (7355, 9, 216, 125, 77), + (7356, 1, 360, 60, 16056), + (7357, 1, 360, 60, 16057), + (7358, 1, 360, 60, 16058), + (7359, 1, 217, 0, 82600), + (7359, 2, 346, 78, 22), + (7360, 1, 217, 0, 88880), + (7360, 2, 346, 80, 22), + (7361, 1, 217, 0, 95440), + (7361, 2, 346, 82, 22), + (7362, 1, 59, -18, 0), + (7363, 1, 59, -21, 0), + (7364, 1, 59, -24, 0), + (7365, 1, 59, -27, 0), + (7366, 1, 59, -30, 0), + (7373, 1, 2, 108, 0), + (7374, 1, 2, 112, 0), + (7375, 1, 2, 116, 0), + (7376, 1, 2, 120, 0), + (7377, 1, 2, 124, 0), + (7378, 1, 347, 14, 0), + (7379, 1, 347, 16, 0), + (7380, 1, 347, 18, 0), + (7381, 1, 347, 20, 0), + (7382, 1, 347, 22, 0), + (7383, 1, 347, 24, 0), + (7384, 1, 360, 25, 16063), + (7385, 1, 360, 25, 16064), + (7386, 1, 360, 25, 16065), + (7390, 1, 303, 6000, 6000), + (7390, 2, 139, 2766, 0), + (7391, 1, 303, 6500, 6500), + (7391, 2, 139, 2766, 0), + (7392, 1, 303, 7500, 8500), + (7392, 2, 139, 2766, 0), + (7393, 1, 85, 16066, 0), + (7394, 1, 85, 16067, 0), + (7395, 1, 85, 16068, 0), + (7396, 1, 85, 16069, 0), + (7397, 1, 85, 16070, 0), + (7398, 1, 85, 16071, 0), + (7399, 1, 302, 350, 350), + (7399, 2, 385, 99, 0), + (7400, 1, 302, 370, 370), + (7400, 2, 385, 99, 0), + (7401, 1, 302, 400, 400), + (7401, 2, 385, 99, 0), + (7402, 1, 59, -33, 0), + (7403, 1, 59, -36, 0), + (7404, 1, 59, -39, 0), + (7405, 1, 59, -42, 0), + (7406, 1, 59, -45, 0), + (7407, 1, 181, 100, -1), + (7448, 1, 264, 240, 553), + (7449, 1, 264, 300, 553), + (7450, 1, 264, 360, 553), + (7451, 1, 264, 720, 777), + (7452, 1, 264, 900, 777), + (7453, 1, 264, 1080, 777), + (7478, 1, 264, 2880, 245), + (7489, 1, 218, 16, 0), + (7490, 1, 218, 17, 0), + (7491, 1, 218, 18, 0), + (7492, 1, 218, 19, 0), + (7493, 1, 218, 20, 0), + (7494, 1, 280, 65, 0), + (7495, 1, 280, 66, 0), + (7496, 1, 280, 67, 0), + (7500, 1, 363, 3, 0), + (7501, 1, 172, 45, 0), + (7502, 1, 172, 46, 0), + (7503, 1, 172, 47, 0), + (7504, 1, 172, 48, 0), + (7505, 1, 172, 49, 0), + (7506, 1, 259, 51, 0), + (7507, 1, 259, 52, 0), + (7508, 1, 259, 53, 0), + (7509, 1, 259, 54, 0), + (7510, 1, 259, 55, 0), + (7511, 1, 328, 1050, 0), + (7512, 1, 328, 1100, 0), + (7513, 1, 328, 1150, 0), + (7514, 1, 328, 1200, 0), + (7515, 1, 328, 1250, 0), + (7516, 1, 262, 30, 7), + (7516, 2, 262, 30, 8), + (7516, 3, 262, 30, 9), + (7516, 4, 262, 30, 10), + (7516, 5, 262, 30, 11), + (7517, 1, 262, 35, 7), + (7517, 2, 262, 35, 8), + (7517, 3, 262, 35, 9), + (7517, 4, 262, 35, 10), + (7517, 5, 262, 35, 11), + (7518, 1, 262, 40, 7), + (7518, 2, 262, 40, 8), + (7518, 3, 262, 40, 9), + (7518, 4, 262, 40, 10), + (7518, 5, 262, 40, 11), + (7519, 1, 262, 45, 7), + (7519, 2, 262, 45, 8), + (7519, 3, 262, 45, 9), + (7519, 4, 262, 45, 10), + (7519, 5, 262, 45, 11), + (7520, 1, 262, 50, 7), + (7520, 2, 262, 50, 8), + (7520, 3, 262, 50, 9), + (7520, 4, 262, 50, 10), + (7520, 5, 262, 50, 11), + (7521, 1, 317, 11, 0), + (7522, 1, 317, 12, 0), + (7523, 1, 317, 13, 0), + (7524, 1, 317, 14, 0), + (7525, 1, 317, 15, 0), + (7526, 1, 69, 600, 0), + (7527, 1, 69, 700, 0), + (7528, 1, 69, 800, 0), + (7529, 1, 69, 900, 0), + (7530, 1, 69, 1000, 0), + (7534, 1, 0, 21, 0), + (7535, 1, 0, 22, 0), + (7536, 1, 0, 23, 0), + (7537, 1, 0, 24, 0), + (7538, 1, 0, 25, 0), + (7539, 1, 327, 8, 0), + (7540, 1, 327, 9, 0), + (7541, 1, 214, 1100, 0), + (7542, 1, 214, 1200, 0), + (7543, 1, 214, 1300, 0), + (7544, 1, 221, 27, 0), + (7545, 1, 221, 30, 0), + (7546, 1, 221, 33, 0), + (7547, 1, 262, 80, 0), + (7547, 2, 262, 80, 1), + (7547, 3, 262, 80, 2), + (7547, 4, 262, 80, 3), + (7547, 5, 262, 80, 4), + (7547, 6, 262, 80, 5), + (7547, 7, 262, 80, 6), + (7548, 1, 262, 85, 0), + (7548, 2, 262, 85, 1), + (7548, 3, 262, 85, 2), + (7548, 4, 262, 85, 3), + (7548, 5, 262, 85, 4), + (7548, 6, 262, 85, 5), + (7548, 7, 262, 85, 6), + (7549, 1, 262, 90, 0), + (7549, 2, 262, 90, 1), + (7549, 3, 262, 90, 2), + (7549, 4, 262, 90, 3), + (7549, 5, 262, 90, 4), + (7549, 6, 262, 90, 5), + (7549, 7, 262, 90, 6), + (7550, 1, 262, 95, 0), + (7550, 2, 262, 95, 1), + (7550, 3, 262, 95, 2), + (7550, 4, 262, 95, 3), + (7550, 5, 262, 95, 4), + (7550, 6, 262, 95, 5), + (7550, 7, 262, 95, 6), + (7551, 1, 262, 100, 0), + (7551, 2, 262, 100, 1), + (7551, 3, 262, 100, 2), + (7551, 4, 262, 100, 3), + (7551, 5, 262, 100, 4), + (7551, 6, 262, 100, 5), + (7551, 7, 262, 100, 6), + (7553, 1, 326, 3, 0), + (7554, 1, 339, 20, 16194), + (7554, 2, 138, 1, 0), + (7554, 3, 141, 1, 0), + (7554, 4, 142, 65, 0), + (7554, 5, 137, 0, 0), + (7554, 6, 311, 0, 0), + (7554, 7, 134, 85, 0), + (7554, 8, 139, -265, 0), + (7554, 9, 139, -754, 0), + (7554, 10, 139, -1332, 0), + (7554, 11, 139, -1572, 0), + (7554, 12, 139, -2749, 0), + (7554, 13, 139, -4979, 0), + (7554, 14, 139, -5418, 0), + (7554, 15, 139, -5403, 0), + (7554, 16, 348, 10, 0), + (7555, 1, 339, 21, 16195), + (7555, 2, 138, 1, 0), + (7555, 3, 141, 1, 0), + (7555, 4, 142, 65, 0), + (7555, 5, 137, 0, 0), + (7555, 6, 311, 0, 0), + (7555, 7, 134, 85, 0), + (7555, 8, 139, -265, 0), + (7555, 9, 139, -754, 0), + (7555, 10, 139, -1332, 0), + (7555, 11, 139, -1572, 0), + (7555, 12, 139, -2749, 0), + (7555, 13, 139, -4979, 0), + (7555, 14, 139, -5418, 0), + (7555, 15, 139, -5403, 0), + (7555, 16, 348, 10, 0), + (7556, 1, 339, 22, 16196), + (7556, 2, 138, 1, 0), + (7556, 3, 141, 1, 0), + (7556, 4, 142, 65, 0), + (7556, 5, 137, 0, 0), + (7556, 6, 311, 0, 0), + (7556, 7, 134, 85, 0), + (7556, 8, 139, -265, 0), + (7556, 9, 139, -754, 0), + (7556, 10, 139, -1332, 0), + (7556, 11, 139, -1572, 0), + (7556, 12, 139, -2749, 0), + (7556, 13, 139, -4979, 0), + (7556, 14, 139, -5418, 0), + (7556, 15, 139, -5403, 0), + (7556, 16, 348, 10, 0), + (7557, 1, 339, 23, 16417), + (7557, 2, 138, 1, 0), + (7557, 3, 141, 1, 0), + (7557, 4, 142, 65, 0), + (7557, 5, 137, 0, 0), + (7557, 6, 311, 0, 0), + (7557, 7, 134, 85, 0), + (7557, 8, 139, -265, 0), + (7557, 9, 139, -754, 0), + (7557, 10, 139, -1332, 0), + (7557, 11, 139, -1572, 0), + (7557, 12, 139, -2749, 0), + (7557, 13, 139, -4979, 0), + (7557, 14, 139, -5418, 0), + (7557, 15, 139, -5403, 0), + (7557, 16, 348, 10, 0), + (7558, 1, 339, 24, 16418), + (7558, 2, 138, 1, 0), + (7558, 3, 141, 1, 0), + (7558, 4, 142, 65, 0), + (7558, 5, 137, 0, 0), + (7558, 6, 311, 0, 0), + (7558, 7, 134, 85, 0), + (7558, 8, 139, -265, 0), + (7558, 9, 139, -754, 0), + (7558, 10, 139, -1332, 0), + (7558, 11, 139, -1572, 0), + (7558, 12, 139, -2749, 0), + (7558, 13, 139, -4979, 0), + (7558, 14, 139, -5418, 0), + (7558, 15, 139, -5403, 0), + (7558, 16, 348, 10, 0), + (7559, 1, 266, 23, 0), + (7560, 1, 266, 24, 0), + (7561, 1, 266, 25, 0), + (7562, 1, 330, 125, 0), + (7562, 2, 330, 125, 1), + (7562, 3, 330, 125, 2), + (7562, 4, 330, 125, 3), + (7562, 5, 330, 125, 28), + (7562, 6, 330, 125, 36), + (7562, 7, 330, 125, 77), + (7563, 1, 330, 130, 0), + (7563, 2, 330, 130, 1), + (7563, 3, 330, 130, 2), + (7563, 4, 330, 130, 3), + (7563, 5, 330, 130, 28), + (7563, 6, 330, 130, 36), + (7563, 7, 330, 130, 77), + (7564, 1, 330, 135, 0), + (7564, 2, 330, 135, 1), + (7564, 3, 330, 135, 2), + (7564, 4, 330, 135, 3), + (7564, 5, 330, 135, 28), + (7564, 6, 330, 135, 36), + (7564, 7, 330, 135, 77), + (7565, 1, 278, 800, 54510), + (7565, 2, 440, 76, 100), + (7566, 1, 278, 850, 58400), + (7566, 2, 440, 78, 100), + (7567, 1, 278, 900, 62680), + (7567, 2, 440, 80, 100), + (7568, 1, 341, 160, 0), + (7569, 1, 341, 170, 0), + (7570, 1, 341, 180, 0), + (7571, 1, 341, 190, 0), + (7572, 1, 341, 200, 0), + (7573, 1, 360, 70, 11023), + (7574, 1, 360, 80, 11023), + (7575, 1, 360, 90, 11023), + (7576, 1, 318, 16, 0), + (7577, 1, 318, 17, 0), + (7578, 1, 318, 18, 0), + (7579, 1, 318, 19, 0), + (7580, 1, 318, 20, 0), + (7581, 1, 294, 0, 160), + (7582, 1, 294, 0, 165), + (7583, 1, 294, 0, 170), + (7584, 1, 114, -60, 0), + (7585, 1, 114, -61, 0), + (7586, 1, 114, -62, 0), + (7587, 1, 319, 22, 0), + (7588, 1, 319, 23, 0), + (7589, 1, 319, 24, 0), + (7590, 1, 274, 35, 0), + (7591, 1, 274, 36, 0), + (7592, 1, 274, 37, 0), + (7593, 1, 15, 14, 0), + (7594, 1, 15, 15, 0), + (7595, 1, 15, 16, 0), + (7596, 1, 15, 17, 0), + (7597, 1, 15, 18, 0), + (7598, 1, 114, -60, 0), + (7599, 1, 114, -61, 0), + (7600, 1, 114, -62, 0), + (7601, 1, 213, 7, 0), + (7602, 1, 213, 9, 0), + (7603, 1, 213, 11, 0), + (7604, 1, 189, 14, 0), + (7605, 1, 189, 15, 0), + (7612, 1, 270, 70, 0), + (7613, 1, 270, 75, 0), + (7614, 1, 270, 80, 0), + (7615, 1, 264, 720, 494), + (7616, 1, 264, 900, 494), + (7617, 1, 264, 1080, 494), + (7618, 1, 264, 720, 500), + (7619, 1, 264, 900, 500), + (7620, 1, 264, 1080, 500), + (7621, 1, 339, 10, 8105), + (7621, 2, 142, 65, 0), + (7621, 3, 311, 0, 0), + (7621, 4, 134, 70, 0), + (7621, 5, 348, 10, 0), + (7621, 6, 137, 0, 0), + (7621, 7, 339, 10, 8105), + (7621, 8, 142, 65, 0), + (7621, 9, 311, 0, 0), + (7621, 10, 134, 70, 0), + (7621, 11, 348, 10, 0), + (7621, 12, 137, 100, 0), + (7621, 13, 339, 10, 8105), + (7621, 14, 142, 65, 0), + (7621, 15, 311, 0, 0), + (7621, 16, 134, 70, 0), + (7621, 17, 348, 10, 0), + (7621, 18, 137, 79, 0), + (7621, 19, 339, 10, 8105), + (7621, 20, 142, 65, 0), + (7621, 21, 311, 0, 0), + (7621, 22, 134, 70, 0), + (7621, 23, 348, 10, 0), + (7621, 24, 137, 147, 0), + (7621, 25, 339, 10, 11404), + (7621, 26, 142, 71, 0), + (7621, 27, 311, 0, 0), + (7621, 28, 134, 75, 0), + (7621, 29, 348, 10, 0), + (7621, 30, 137, 0, 0), + (7621, 31, 339, 10, 11404), + (7621, 32, 142, 71, 0), + (7621, 33, 311, 0, 0), + (7621, 34, 134, 75, 0), + (7621, 35, 348, 10, 0), + (7621, 36, 137, 100, 0), + (7621, 37, 339, 10, 11404), + (7621, 38, 142, 71, 0), + (7621, 39, 311, 0, 0), + (7621, 40, 134, 75, 0), + (7621, 41, 348, 10, 0), + (7621, 42, 137, 79, 0), + (7621, 43, 339, 10, 11404), + (7621, 44, 142, 71, 0), + (7621, 45, 311, 0, 0), + (7621, 46, 134, 75, 0), + (7621, 47, 348, 10, 0), + (7621, 48, 137, 147, 0), + (7621, 49, 339, 10, 13199), + (7621, 50, 142, 76, 0), + (7621, 51, 311, 0, 0), + (7621, 52, 134, 80, 0), + (7621, 53, 348, 10, 0), + (7621, 54, 137, 0, 0), + (7621, 55, 339, 10, 13199), + (7621, 56, 142, 76, 0), + (7621, 57, 311, 0, 0), + (7621, 58, 134, 80, 0), + (7621, 59, 348, 10, 0), + (7621, 60, 137, 100, 0), + (7621, 61, 339, 10, 13199), + (7621, 62, 142, 76, 0), + (7621, 63, 311, 0, 0), + (7621, 64, 134, 80, 0), + (7621, 65, 348, 10, 0), + (7621, 66, 137, 79, 0), + (7621, 67, 339, 10, 13199), + (7621, 68, 142, 76, 0), + (7621, 69, 311, 0, 0), + (7621, 70, 134, 80, 0), + (7621, 71, 348, 10, 0), + (7621, 72, 137, 147, 0), + (7621, 73, 339, 10, 13830), + (7621, 74, 142, 81, 0), + (7621, 75, 311, 0, 0), + (7621, 76, 134, 85, 0), + (7621, 77, 348, 10, 0), + (7621, 78, 137, 0, 0), + (7621, 79, 339, 10, 13830), + (7621, 80, 142, 81, 0), + (7621, 81, 311, 0, 0), + (7621, 82, 134, 85, 0), + (7621, 83, 348, 10, 0), + (7621, 84, 137, 100, 0), + (7621, 85, 339, 10, 13830), + (7621, 86, 142, 81, 0), + (7621, 87, 311, 0, 0), + (7621, 88, 134, 85, 0), + (7621, 89, 348, 10, 0), + (7621, 90, 137, 79, 0), + (7621, 91, 339, 10, 13830), + (7621, 92, 142, 81, 0), + (7621, 93, 311, 0, 0), + (7621, 94, 134, 85, 0), + (7621, 95, 348, 10, 0), + (7621, 96, 137, 147, 0), + (7622, 1, 265, 79, 0), + (7623, 1, 265, 80, 0), + (7624, 1, 265, 81, 0), + (7625, 1, 265, 79, 0), + (7626, 1, 265, 80, 0), + (7627, 1, 265, 81, 0), + (7628, 1, 292, 46, 0), + (7629, 1, 292, 47, 0), + (7630, 1, 292, 48, 0), + (7631, 1, 279, 34, 0), + (7632, 1, 279, 35, 0), + (7633, 1, 279, 36, 0), + (7634, 1, 279, 34, 0), + (7635, 1, 279, 35, 0), + (7636, 1, 279, 36, 0), + (7637, 1, 279, 34, 0), + (7638, 1, 279, 35, 0), + (7639, 1, 279, 36, 0), + (7640, 1, 200, 60, 0), + (7641, 1, 294, 17, 100), + (7642, 1, 294, 19, 100), + (7643, 1, 294, 21, 100), + (7644, 1, 375, 130, 0), + (7645, 1, 375, 135, 0), + (7646, 1, 375, 140, 0), + (7647, 1, 229, 20, 0), + (7648, 1, 229, 25, 0), + (7649, 1, 229, 30, 0), + (7650, 1, 330, 125, 0), + (7650, 2, 330, 125, 1), + (7650, 3, 330, 125, 2), + (7650, 4, 330, 125, 3), + (7650, 5, 330, 125, 28), + (7650, 6, 330, 125, 36), + (7651, 1, 330, 130, 0), + (7651, 2, 330, 130, 1), + (7651, 3, 330, 130, 2), + (7651, 4, 330, 130, 3), + (7651, 5, 330, 130, 28), + (7651, 6, 330, 130, 36), + (7652, 1, 330, 135, 0), + (7652, 2, 330, 135, 1), + (7652, 3, 330, 135, 2), + (7652, 4, 330, 135, 3), + (7652, 5, 330, 135, 28), + (7652, 6, 330, 135, 36), + (7653, 1, 330, 125, 0), + (7653, 2, 330, 125, 1), + (7653, 3, 330, 125, 2), + (7653, 4, 330, 125, 3), + (7653, 5, 330, 125, 28), + (7653, 6, 330, 125, 36), + (7653, 7, 330, 125, 77), + (7654, 1, 330, 130, 0), + (7654, 2, 330, 130, 1), + (7654, 3, 330, 130, 2), + (7654, 4, 330, 130, 3), + (7654, 5, 330, 130, 28), + (7654, 6, 330, 130, 36), + (7654, 7, 330, 130, 77), + (7655, 1, 330, 135, 0), + (7655, 2, 330, 135, 1), + (7655, 3, 330, 135, 2), + (7655, 4, 330, 135, 3), + (7655, 5, 330, 135, 28), + (7655, 6, 330, 135, 36), + (7655, 7, 330, 135, 77), + (7656, 1, 330, 100, 0), + (7656, 2, 330, 100, 1), + (7656, 3, 330, 100, 2), + (7656, 4, 330, 100, 3), + (7656, 5, 330, 100, 28), + (7656, 6, 330, 100, 36), + (7656, 7, 330, 100, 77), + (7657, 1, 330, 105, 0), + (7657, 2, 330, 105, 1), + (7657, 3, 330, 105, 2), + (7657, 4, 330, 105, 3), + (7657, 5, 330, 105, 28), + (7657, 6, 330, 105, 36), + (7657, 7, 330, 105, 77), + (7658, 1, 330, 110, 0), + (7658, 2, 330, 110, 1), + (7658, 3, 330, 110, 2), + (7658, 4, 330, 110, 3), + (7658, 5, 330, 110, 28), + (7658, 6, 330, 110, 36), + (7658, 7, 330, 110, 77), + (7659, 1, 264, 72, 153), + (7660, 1, 264, 90, 153), + (7661, 1, 264, 108, 153), + (7663, 1, 375, 150, 0), + (7664, 1, 264, 10, 170), + (7665, 1, 264, 20, 170), + (7666, 1, 264, 30, 170), + (7667, 1, 264, 40, 170), + (7668, 1, 264, 50, 170), + (7670, 1, 229, 35, 0), + (7671, 1, 229, 40, 0), + (7672, 1, 229, 45, 0), + (7673, 1, 220, 50, 10), + (7674, 1, 220, 65, 10), + (7675, 1, 220, 80, 10), + (7676, 1, 220, 95, 10), + (7677, 1, 220, 110, 10), + (7678, 1, 231, 11, 0), + (7679, 1, 231, 13, 0), + (7680, 1, 231, 15, 0), + (7681, 1, 326, 4, 0), + (7682, 1, 264, 5400, 68), + (7683, 1, 327, 10, 0), + (7684, 1, 327, 11, 0), + (7685, 1, 327, 12, 0), + (7686, 1, 349, 55, 0), + (7687, 1, 349, 60, 0), + (7688, 1, 349, 65, 0), + (7690, 1, 353, 1, 0), + (7692, 1, 319, 25, 0), + (7693, 1, 319, 26, 0), + (7694, 1, 319, 27, 0), + (7695, 1, 127, 5, 0), + (7695, 2, 385, 14232, 0), + (7696, 1, 127, 10, 0), + (7696, 2, 385, 14232, 0), + (7697, 1, 127, 15, 0), + (7697, 2, 385, 14232, 0), + (7699, 1, 181, 100, 0), + (7700, 1, 279, 7, 0), + (7701, 1, 279, 11, 0), + (7702, 1, 279, 15, 0), + (7704, 1, 264, 540, 3707), + (7705, 1, 264, 720, 3707), + (7706, 1, 264, 900, 3707), + (7707, 1, 303, 8500, 9500), + (7707, 2, 139, 2766, 0), + (7708, 1, 303, 9500, 11000), + (7708, 2, 139, 2766, 0), + (7709, 1, 303, 11000, 14000), + (7709, 2, 139, 2766, 0), + (7713, 1, 274, 34, 0), + (7714, 1, 274, 36, 0), + (7715, 1, 264, 2, 901), + (7716, 1, 264, 4, 901), + (7717, 1, 264, 6, 901), + (7718, 1, 281, 90, 0), + (7722, 1, 339, 25, 23492), + (7722, 2, 138, 1, 0), + (7722, 3, 141, 1, 0), + (7722, 4, 142, 70, 0), + (7722, 5, 137, 0, 0), + (7722, 6, 311, 0, 0), + (7722, 7, 134, 90, 0), + (7722, 8, 139, -265, 0), + (7722, 9, 139, -754, 0), + (7722, 10, 139, -1332, 0), + (7722, 11, 139, -1572, 0), + (7722, 12, 139, -2749, 0), + (7722, 13, 139, -4979, 0), + (7722, 14, 139, -5418, 0), + (7722, 15, 139, -5403, 0), + (7722, 16, 348, 10, 0), + (7723, 1, 339, 26, 23493), + (7723, 2, 138, 1, 0), + (7723, 3, 141, 1, 0), + (7723, 4, 142, 70, 0), + (7723, 5, 137, 0, 0), + (7723, 6, 311, 0, 0), + (7723, 7, 134, 90, 0), + (7723, 8, 139, -265, 0), + (7723, 9, 139, -754, 0), + (7723, 10, 139, -1332, 0), + (7723, 11, 139, -1572, 0), + (7723, 12, 139, -2749, 0), + (7723, 13, 139, -4979, 0), + (7723, 14, 139, -5418, 0), + (7723, 15, 139, -5403, 0), + (7723, 16, 348, 10, 0), + (7724, 1, 339, 27, 23494), + (7724, 2, 138, 1, 0), + (7724, 3, 141, 1, 0), + (7724, 4, 142, 70, 0), + (7724, 5, 137, 0, 0), + (7724, 6, 311, 0, 0), + (7724, 7, 134, 90, 0), + (7724, 8, 139, -265, 0), + (7724, 9, 139, -754, 0), + (7724, 10, 139, -1332, 0), + (7724, 11, 139, -1572, 0), + (7724, 12, 139, -2749, 0), + (7724, 13, 139, -4979, 0), + (7724, 14, 139, -5418, 0), + (7724, 15, 139, -5403, 0), + (7724, 16, 348, 10, 0), + (7725, 1, 339, 28, 23495), + (7725, 2, 138, 1, 0), + (7725, 3, 141, 1, 0), + (7725, 4, 142, 70, 0), + (7725, 5, 137, 0, 0), + (7725, 6, 311, 0, 0), + (7725, 7, 134, 90, 0), + (7725, 8, 139, -265, 0), + (7725, 9, 139, -754, 0), + (7725, 10, 139, -1332, 0), + (7725, 11, 139, -1572, 0), + (7725, 12, 139, -2749, 0), + (7725, 13, 139, -4979, 0), + (7725, 14, 139, -5418, 0), + (7725, 15, 139, -5403, 0), + (7725, 16, 348, 10, 0), + (7726, 1, 339, 29, 23496), + (7726, 2, 138, 1, 0), + (7726, 3, 141, 1, 0), + (7726, 4, 142, 70, 0), + (7726, 5, 137, 0, 0), + (7726, 6, 311, 0, 0), + (7726, 7, 134, 90, 0), + (7726, 8, 139, -265, 0), + (7726, 9, 139, -754, 0), + (7726, 10, 139, -1332, 0), + (7726, 11, 139, -1572, 0), + (7726, 12, 139, -2749, 0), + (7726, 13, 139, -4979, 0), + (7726, 14, 139, -5418, 0), + (7726, 15, 139, -5403, 0), + (7726, 16, 348, 10, 0), + (7733, 1, 257, 1, 0), + (7733, 2, 267, 1, 31), + (7733, 3, 267, 1, 32), + (7733, 4, 267, 1, 33), + (7733, 5, 267, 1, 15), + (7733, 6, 267, 1, 16), + (7733, 7, 267, 1, 17), + (7733, 8, 267, 1, 18), + (7733, 9, 267, 1, 19), + (7733, 10, 267, 1, 20), + (7743, 1, 264, 90, 184), + (7744, 1, 264, 180, 184), + (7745, 1, 264, 270, 184), + (7746, 1, 310, 2000, 0), + (7746, 2, 385, 11233, 0), + (7746, 3, 385, 11333, 0), + (7746, 4, 411, 16, 0), + (7748, 1, 271, 5, 0), + (7749, 1, 271, 10, 0), + (7750, 1, 271, 15, 0), + (7751, 1, 264, 60, 2234), + (7752, 1, 264, 120, 2234), + (7753, 1, 264, 180, 2234), + (7757, 1, 264, 120, 9403), + (7758, 1, 264, 240, 9403), + (7759, 1, 264, 360, 9403), + (7760, 1, 264, 2, 824), + (7761, 1, 264, 4, 824), + (7762, 1, 264, 6, 824), + (7763, 1, 310, 4000, 0), + (7763, 2, 385, 11233, 0), + (7763, 3, 385, 11333, 0), + (7763, 4, 411, 16, 0), + (7764, 1, 310, 6000, 0), + (7764, 2, 385, 11233, 0), + (7764, 3, 385, 11333, 0), + (7764, 4, 411, 16, 0), + (7765, 1, 392, 1000, 0), + (7765, 2, 139, 21820, 0), + (7765, 3, 411, 4, 0), + (7766, 1, 392, 2000, 0), + (7766, 2, 139, 21820, 0), + (7766, 3, 411, 4, 0), + (7767, 1, 392, 3000, 0), + (7767, 2, 139, 21820, 0), + (7767, 3, 411, 4, 0), + (7768, 1, 392, 4000, 0), + (7768, 2, 139, 21820, 0), + (7768, 3, 411, 4, 0), + (7818, 1, 288, 200, 51), + (7818, 2, 288, 50, 51), + (7819, 1, 405, 7, 0), + (7820, 1, 405, 9, 0), + (7821, 1, 405, 11, 0), + (7822, 1, 264, 1, 1154), + (7823, 1, 264, 2, 1154), + (7824, 1, 264, 3, 1154), + (7825, 1, 264, 4, 1154), + (7826, 1, 264, 5, 1154), + (7827, 1, 398, 9000, 0), + (7827, 2, 385, 7225, 0), + (7827, 3, 385, 7325, 0), + (7827, 4, 385, 7425, 0), + (7828, 1, 310, 2000, 0), + (7828, 2, 385, 7225, 0), + (7828, 3, 385, 7325, 0), + (7828, 4, 385, 7425, 0), + (7828, 5, 385, 7525, 0), + (7828, 6, 385, 7625, 0), + (7829, 1, 310, 4000, 0), + (7829, 2, 385, 7225, 0), + (7829, 3, 385, 7325, 0), + (7829, 4, 385, 7425, 0), + (7829, 5, 385, 7525, 0), + (7829, 6, 385, 7625, 0), + (7830, 1, 310, 6000, 0), + (7830, 2, 385, 7225, 0), + (7830, 3, 385, 7325, 0), + (7830, 4, 385, 7425, 0), + (7830, 5, 385, 7525, 0), + (7830, 6, 385, 7625, 0), + (7832, 1, 264, 60, 60), + (7833, 2, 264, 120, 60), + (7834, 3, 264, 180, 60), + (7835, 4, 264, 240, 60), + (7836, 5, 264, 300, 60), + (7837, 1, 262, 55, 7), + (7837, 2, 262, 55, 8), + (7837, 3, 262, 55, 9), + (7837, 4, 262, 55, 10), + (7837, 5, 262, 55, 11), + (7838, 1, 262, 60, 7), + (7838, 2, 262, 60, 8), + (7838, 3, 262, 60, 9), + (7838, 4, 262, 60, 10), + (7838, 5, 262, 60, 11), + (7839, 1, 262, 65, 7), + (7839, 2, 262, 65, 8), + (7839, 3, 262, 65, 9), + (7839, 4, 262, 65, 10), + (7839, 5, 262, 65, 11), + (7840, 1, 262, 70, 7), + (7840, 2, 262, 70, 8), + (7840, 3, 262, 70, 9), + (7840, 4, 262, 70, 10), + (7840, 5, 262, 70, 11), + (7841, 1, 262, 75, 7), + (7841, 2, 262, 75, 8), + (7841, 3, 262, 75, 9), + (7841, 4, 262, 75, 10), + (7841, 5, 262, 75, 11), + (7842, 1, 339, 30, 27695), + (7842, 2, 138, 1, 0), + (7842, 3, 141, 1, 0), + (7842, 4, 142, 70, 0), + (7842, 5, 137, 0, 0), + (7842, 6, 311, 0, 0), + (7842, 7, 134, 100, 0), + (7842, 8, 139, -265, 0), + (7842, 9, 139, -754, 0), + (7842, 10, 139, -1332, 0), + (7842, 11, 139, -1572, 0), + (7842, 12, 139, -2749, 0), + (7842, 13, 139, -4979, 0), + (7842, 14, 139, -5418, 0), + (7842, 15, 139, -5403, 0), + (7842, 16, 348, 10, 0), + (7843, 1, 339, 31, 27696), + (7843, 2, 138, 1, 0), + (7843, 3, 141, 1, 0), + (7843, 4, 142, 70, 0), + (7843, 5, 137, 0, 0), + (7843, 6, 311, 0, 0), + (7843, 7, 134, 100, 0), + (7843, 8, 139, -265, 0), + (7843, 9, 139, -754, 0), + (7843, 10, 139, -1332, 0), + (7843, 11, 139, -1572, 0), + (7843, 12, 139, -2749, 0), + (7843, 13, 139, -4979, 0), + (7843, 14, 139, -5418, 0), + (7843, 15, 139, -5403, 0), + (7843, 16, 348, 10, 0), + (7844, 1, 339, 32, 27697), + (7844, 2, 138, 1, 0), + (7844, 3, 141, 1, 0), + (7844, 4, 142, 70, 0), + (7844, 5, 137, 0, 0), + (7844, 6, 311, 0, 0), + (7844, 7, 134, 100, 0), + (7844, 8, 139, -265, 0), + (7844, 9, 139, -754, 0), + (7844, 10, 139, -1332, 0), + (7844, 11, 139, -1572, 0), + (7844, 12, 139, -2749, 0), + (7844, 13, 139, -4979, 0), + (7844, 14, 139, -5418, 0), + (7844, 15, 139, -5403, 0), + (7844, 16, 348, 10, 0), + (7881, 1, 405, 13, 0), + (7882, 1, 405, 15, 0), + (7883, 1, 405, 17, 0), + (7884, 1, 287, 1, 0), + (7884, 2, 139, 4691, 0), + (7884, 3, 411, 128, 0), + (7885, 1, 287, 1, 0), + (7885, 2, 385, 8111, 0), + (7885, 3, 385, 15008, 0), + (7885, 4, 385, 8411, 0), + (7885, 5, 385, 8511, 0), + (7885, 6, 411, 128, 0), + (7886, 1, 328, 1300, 0), + (7887, 1, 328, 1350, 0), + (7888, 1, 328, 1400, 0), + (7889, 1, 328, 1450, 0), + (7890, 1, 328, 1500, 0), + (7900, 1, 339, 45, 16189), + (7900, 2, 136, 11, 0), + (7900, 3, 383, 45, 16189), + (7900, 4, 385, 11012, 0), + (7900, 5, 383, 45, 16189), + (7900, 6, 385, 5130, 0), + (7900, 7, 383, 45, 16189), + (7900, 8, 385, 5230, 0), + (7900, 9, 383, 45, 16189), + (7900, 10, 136, 22, 0), + (7900, 11, 383, 45, 16189), + (7900, 12, 385, 5330, 0), + (7900, 13, 385, 5430, 0), + (7900, 14, 385, 5530, 0), + (7901, 1, 339, 45, 16190), + (7901, 2, 136, 11, 0), + (7901, 3, 383, 45, 16190), + (7901, 4, 385, 11012, 0), + (7901, 5, 383, 45, 16190), + (7901, 6, 385, 5130, 0), + (7901, 7, 383, 45, 16190), + (7901, 8, 385, 5230, 0), + (7901, 9, 383, 45, 16190), + (7901, 10, 136, 22, 0), + (7901, 11, 383, 45, 16190), + (7901, 12, 385, 5330, 0), + (7901, 13, 385, 5430, 0), + (7901, 14, 385, 5530, 0), + (7902, 1, 339, 45, 16191), + (7902, 2, 136, 11, 0), + (7902, 3, 383, 45, 16191), + (7902, 4, 385, 11012, 0), + (7902, 5, 383, 45, 16191), + (7902, 6, 385, 5130, 0), + (7902, 7, 383, 45, 16191), + (7902, 8, 385, 5230, 0), + (7902, 9, 383, 45, 16191), + (7902, 10, 136, 22, 0), + (7902, 11, 383, 45, 16191), + (7902, 12, 385, 5330, 0), + (7902, 13, 385, 5430, 0), + (7902, 14, 385, 5530, 0), + (7904, 1, 0, 26, 0), + (7905, 1, 0, 27, 0), + (7906, 1, 0, 28, 0), + (7907, 1, 0, 29, 0), + (7908, 1, 0, 30, 0), + (7940, 1, 264, 15, 558), + (7941, 1, 264, 30, 558), + (7942, 1, 264, 45, 558), + (7945, 1, 310, 2000, 0), + (7945, 2, 139, 8007, 0), + (7945, 3, 310, 2000, 0), + (7945, 4, 385, 4140, 0), + (7945, 5, 385, 4240, 0), + (7945, 6, 385, 4340, 0), + (7945, 7, 385, 4440, 0), + (7945, 8, 385, 4540, 0), + (7945, 9, 385, 4640, 0), + (7946, 1, 310, 4000, 0), + (7946, 2, 139, 8007, 0), + (7946, 3, 310, 4000, 0), + (7946, 4, 385, 4140, 0), + (7946, 5, 385, 4240, 0), + (7946, 6, 385, 4340, 0), + (7946, 7, 385, 4440, 0), + (7946, 8, 385, 4540, 0), + (7946, 9, 385, 4640, 0), + (7947, 1, 310, 6000, 0), + (7947, 2, 139, 8007, 0), + (7947, 3, 310, 6000, 0), + (7947, 4, 385, 4140, 0), + (7947, 5, 385, 4240, 0), + (7947, 6, 385, 4340, 0), + (7947, 7, 385, 4440, 0), + (7947, 8, 385, 4540, 0), + (7947, 9, 385, 4640, 0), + (7948, 1, 339, 25, 16197), + (7948, 2, 138, 1, 0), + (7948, 3, 142, 60, 0), + (7948, 4, 137, 35, 0), + (7948, 5, 134, 75, 0), + (7948, 6, 339, 25, 16197), + (7948, 7, 138, 1, 0), + (7948, 8, 142, 60, 0), + (7948, 9, 137, 36, 0), + (7948, 10, 134, 75, 0), + (7948, 11, 339, 25, 16197), + (7948, 12, 138, 1, 0), + (7948, 13, 142, 60, 0), + (7948, 14, 137, 369, 0), + (7948, 15, 134, 75, 0), + (7948, 16, 339, 25, 16197), + (7948, 17, 138, 1, 0), + (7948, 18, 142, 60, 0), + (7948, 19, 137, 116, 0), + (7948, 20, 134, 75, 0), + (7949, 1, 339, 25, 16198), + (7949, 2, 138, 1, 0), + (7949, 3, 142, 60, 0), + (7949, 4, 137, 35, 0), + (7949, 5, 134, 80, 0), + (7949, 6, 339, 25, 16198), + (7949, 7, 138, 1, 0), + (7949, 8, 142, 60, 0), + (7949, 9, 137, 36, 0), + (7949, 10, 134, 80, 0), + (7949, 11, 339, 25, 16198), + (7949, 12, 138, 1, 0), + (7949, 13, 142, 60, 0), + (7949, 14, 137, 369, 0), + (7949, 15, 134, 80, 0), + (7949, 16, 339, 25, 16198), + (7949, 17, 138, 1, 0), + (7949, 18, 142, 60, 0), + (7949, 19, 137, 116, 0), + (7949, 20, 134, 80, 0), + (7950, 1, 339, 25, 16199), + (7950, 2, 138, 1, 0), + (7950, 3, 142, 60, 0), + (7950, 4, 137, 35, 0), + (7950, 5, 134, 85, 0), + (7950, 6, 339, 25, 16199), + (7950, 7, 138, 1, 0), + (7950, 8, 142, 60, 0), + (7950, 9, 137, 36, 0), + (7950, 10, 134, 85, 0), + (7950, 11, 339, 25, 16199), + (7950, 12, 138, 1, 0), + (7950, 13, 142, 60, 0), + (7950, 14, 137, 369, 0), + (7950, 15, 134, 85, 0), + (7950, 16, 339, 25, 16199), + (7950, 17, 138, 1, 0), + (7950, 18, 142, 60, 0), + (7950, 19, 137, 116, 0), + (7950, 20, 134, 85, 0), + (7980, 1, 243, 15, 0), + (7981, 1, 243, 25, 0), + (7982, 1, 243, 35, 0), + (7983, 1, 264, 120, 520), + (7984, 1, 264, 240, 520), + (7985, 1, 264, 360, 520), + (7989, 1, 264, 30, 705), + (7989, 2, 264, 30, 1092), + (7989, 3, 264, 30, 10396), + (7989, 4, 264, 30, 10397), + (7990, 1, 264, 60, 705), + (7990, 2, 264, 60, 1092), + (7990, 3, 264, 60, 10396), + (7990, 4, 264, 60, 10397), + (7991, 1, 264, 90, 705), + (7991, 2, 264, 90, 1092), + (7991, 3, 264, 90, 10396), + (7991, 4, 264, 90, 10397), + (7992, 1, 264, 120, 705), + (7992, 2, 264, 120, 1092), + (7992, 3, 264, 120, 10396), + (7992, 4, 264, 120, 10397), + (7994, 1, 264, 240, 39), + (7994, 2, 264, 3456, 1061), + (7995, 1, 264, 300, 39), + (7995, 2, 264, 4320, 1061), + (8000, 1, 69, 200, 0), + (8000, 2, 2, 75, 0), + (8000, 3, 97, 200, 0), + (8000, 4, 317, 8, 0), + (8031, 1, 264, 30, 791), + (8032, 1, 264, 60, 791), + (8033, 1, 264, 90, 791), + (8035, 1, 264, 180, 521), + (8036, 1, 264, 360, 521), + (8037, 1, 264, 540, 521), + (8040, 1, 128, 5, 5), + (8040, 2, 138, 1, 0), + (8040, 3, 140, 1, 0), + (8040, 4, 311, 0, 0), + (8040, 5, 411, 256, 0), + (8040, 6, 137, -40, 0), + (8040, 7, 391, 1, 0), + (8041, 1, 128, 15, 15), + (8041, 2, 138, 1, 0), + (8041, 3, 140, 1, 0), + (8041, 4, 311, 0, 0), + (8041, 5, 411, 256, 0), + (8041, 6, 137, -40, 0), + (8041, 7, 391, 1, 0), + (8042, 1, 128, 30, 30), + (8042, 2, 138, 1, 0), + (8042, 3, 140, 1, 0), + (8042, 4, 311, 0, 0), + (8042, 5, 411, 256, 0), + (8042, 6, 137, -40, 0), + (8042, 7, 391, 1, 0), + (8043, 1, 128, 50, 50), + (8043, 2, 138, 1, 0), + (8043, 3, 140, 1, 0), + (8043, 4, 311, 0, 0), + (8043, 5, 411, 256, 0), + (8043, 6, 137, -40, 0), + (8043, 7, 391, 1, 0), + (8059, 1, 128, 50, 50), + (8059, 2, 138, 1, 0), + (8059, 3, 140, 1, 0), + (8059, 4, 311, 0, 0), + (8059, 5, 411, 66434, 0), + (8059, 6, 137, -40, 0), + (8069, 1, 244, -10, 0), + (8070, 1, 244, -15, 0), + (8071, 1, 244, -20, 0), + (8076, 1, 264, 360, 565), + (8076, 2, 264, 360, 793), + (8076, 3, 264, 360, 794), + (8077, 1, 264, 720, 565), + (8077, 2, 264, 720, 793), + (8077, 3, 264, 720, 794), + (8078, 1, 264, 1080, 565), + (8078, 2, 264, 1080, 793), + (8078, 3, 264, 1080, 794), + (8079, 1, 264, 1440, 565), + (8079, 2, 264, 1440, 793), + (8079, 3, 264, 1440, 794), + (8080, 1, 264, 1800, 565), + (8080, 2, 264, 1800, 793), + (8080, 3, 264, 1800, 794), + (8081, 1, 264, 2160, 565), + (8081, 2, 264, 2160, 793), + (8081, 3, 264, 2160, 794), + (8082, 1, 264, 60, 208), + (8083, 1, 264, 120, 208), + (8084, 1, 264, 180, 208), + (8190, 1, 280, 2, 0), + (8191, 1, 280, 4, 0), + (8192, 1, 280, 6, 0), + (8193, 1, 339, 100, 16225), + (8193, 2, 139, 6838, 0), + (8195, 1, 264, 120, 3707), + (8196, 1, 264, 240, 3707), + (8197, 1, 264, 360, 3707), + (8198, 1, 294, 0, 110), + (8199, 1, 294, 0, 120), + (8200, 1, 294, 0, 130), + (8201, 1, 218, 1, 0), + (8202, 1, 218, 2, 0), + (8203, 1, 218, 3, 0), + (8204, 1, 127, 10, 0), + (8204, 2, 137, 154, 0), + (8204, 3, 403, 2, 0), + (8204, 4, 404, 10, 0), + (8205, 1, 127, 20, 0), + (8205, 2, 137, 154, 0), + (8205, 3, 403, 2, 0), + (8205, 4, 404, 10, 0), + (8206, 1, 127, 30, 0), + (8206, 2, 137, 154, 0), + (8206, 3, 403, 2, 0), + (8206, 4, 404, 10, 0), + (8207, 1, 127, 10, 0), + (8207, 2, 137, 154, 0), + (8207, 3, 403, 2, 0), + (8207, 4, 404, 10, 0), + (8208, 1, 127, 20, 0), + (8208, 2, 137, 154, 0), + (8208, 3, 403, 2, 0), + (8208, 4, 404, 10, 0), + (8209, 1, 127, 30, 0), + (8209, 2, 137, 154, 0), + (8209, 3, 403, 2, 0), + (8209, 4, 404, 10, 0), + (8210, 1, 97, 50, 0), + (8211, 1, 97, 100, 0), + (8212, 1, 97, 150, 0), + (8213, 1, 97, 200, 0), + (8214, 1, 97, 250, 0), + (8215, 1, 190, 50, 0), + (8216, 1, 190, 100, 0), + (8217, 1, 190, 150, 0), + (8218, 1, 190, 200, 0), + (8219, 1, 190, 250, 0), + (8223, 1, 128, 50, 50), + (8223, 2, 138, 1, 0), + (8223, 3, 140, 1, 0), + (8223, 4, 139, -2741, 0), + (8223, 5, 139, -16843, 0), + (8223, 6, 385, -16192, 0), + (8224, 1, 339, 10, 16230), + (8224, 2, 138, 1, 0), + (8224, 3, 141, 1, 0), + (8224, 4, 142, 60, 0), + (8224, 5, 137, 0, 0), + (8224, 6, 311, 0, 0), + (8224, 7, 134, 80, 0), + (8224, 8, 139, -265, 0), + (8224, 9, 139, -754, 0), + (8224, 10, 139, -1332, 0), + (8224, 11, 139, -1572, 0), + (8224, 12, 139, -2749, 0), + (8224, 13, 139, -4979, 0), + (8224, 14, 139, -5418, 0), + (8224, 15, 139, -5403, 0), + (8225, 1, 339, 10, 16231), + (8225, 2, 138, 1, 0), + (8225, 3, 141, 1, 0), + (8225, 4, 142, 65, 0), + (8225, 5, 137, 0, 0), + (8225, 6, 311, 0, 0), + (8225, 7, 134, 85, 0), + (8225, 8, 139, -265, 0), + (8225, 9, 139, -754, 0), + (8225, 10, 139, -1332, 0), + (8225, 11, 139, -1572, 0), + (8225, 12, 139, -2749, 0), + (8225, 13, 139, -4979, 0), + (8225, 14, 139, -5418, 0), + (8225, 15, 139, -5403, 0), + (8226, 1, 339, 10, 16232), + (8226, 2, 138, 1, 0), + (8226, 3, 141, 1, 0), + (8226, 4, 142, 70, 0), + (8226, 5, 137, 0, 0), + (8226, 6, 311, 0, 0), + (8226, 7, 134, 90, 0), + (8226, 8, 139, -265, 0), + (8226, 9, 139, -754, 0), + (8226, 10, 139, -1332, 0), + (8226, 11, 139, -1572, 0), + (8226, 12, 139, -2749, 0), + (8226, 13, 139, -4979, 0), + (8226, 14, 139, -5418, 0), + (8226, 15, 139, -5403, 0), + (8228, 1, 378, 5, 22), + (8229, 1, 378, 10, 22), + (8230, 1, 378, 15, 22), + (8232, 1, 128, 5, 5), + (8232, 2, 138, 1, 0), + (8232, 3, 140, 1, 0), + (8232, 4, 311, 0, 0), + (8232, 5, 411, 66434, 0), + (8232, 6, 137, -40, 0), + (8233, 1, 128, 15, 15), + (8233, 2, 138, 1, 0), + (8233, 3, 140, 1, 0), + (8233, 4, 311, 0, 0), + (8233, 5, 411, 66434, 0), + (8233, 6, 137, -40, 0), + (8234, 1, 128, 30, 30), + (8234, 2, 138, 1, 0), + (8234, 3, 140, 1, 0), + (8234, 4, 311, 0, 0), + (8234, 5, 411, 66434, 0), + (8234, 6, 137, -40, 0), + (8235, 1, 1, 29, 0), + (8236, 1, 1, 58, 0), + (8237, 1, 1, 87, 0), + (8238, 1, 1, 116, 0), + (8239, 1, 1, 145, 0), + (8240, 1, 1, 31, 0), + (8241, 1, 1, 62, 0), + (8242, 1, 1, 93, 0), + (8243, 1, 1, 124, 0), + (8244, 1, 1, 155, 0), + (8245, 1, 1, 33, 0), + (8246, 1, 1, 66, 0), + (8247, 1, 1, 99, 0), + (8248, 1, 1, 132, 0), + (8249, 1, 1, 165, 0), + (8250, 1, 1, 40, 0), + (8251, 1, 1, 80, 0), + (8252, 1, 1, 120, 0), + (8253, 1, 1, 160, 0), + (8254, 1, 1, 200, 0), + (8255, 1, 1, 50, 0), + (8256, 1, 1, 100, 0), + (8257, 1, 1, 150, 0), + (8258, 1, 1, 200, 0), + (8259, 1, 1, 250, 0), + (8261, 1, 128, 65, 65), + (8261, 2, 138, 1, 0), + (8261, 3, 140, 1, 0), + (8261, 4, 311, 0, 0), + (8261, 5, 411, 66434, 0), + (8261, 6, 137, -40, 0), + (8262, 1, 128, 70, 70), + (8262, 2, 138, 1, 0), + (8262, 3, 140, 1, 0), + (8262, 4, 139, -2741, 0), + (8262, 5, 139, -16843, 0), + (8262, 6, 385, -16192, 0), + (8263, 1, 262, 5, 0), + (8264, 1, 262, 10, 0), + (8265, 1, 262, 15, 0), + (8266, 1, 262, 20, 0), + (8267, 1, 262, 25, 0), + (8268, 1, 262, 5, 1), + (8269, 1, 262, 10, 1), + (8270, 1, 262, 15, 1), + (8271, 1, 262, 20, 1), + (8272, 1, 262, 25, 1), + (8273, 1, 262, 5, 2), + (8274, 1, 262, 10, 2), + (8275, 1, 262, 15, 2), + (8276, 1, 262, 20, 2), + (8277, 1, 262, 25, 2), + (8278, 1, 262, 5, 3), + (8279, 1, 262, 10, 3), + (8280, 1, 262, 15, 3), + (8281, 1, 262, 20, 3), + (8282, 1, 262, 25, 3), + (8283, 1, 262, 5, 4), + (8284, 1, 262, 10, 4), + (8285, 1, 262, 15, 4), + (8286, 1, 262, 20, 4), + (8287, 1, 262, 25, 4), + (8288, 1, 262, 5, 5), + (8289, 1, 262, 10, 5), + (8290, 1, 262, 15, 5), + (8291, 1, 262, 20, 5), + (8292, 1, 262, 25, 5), + (8293, 1, 262, 5, 6), + (8294, 1, 262, 10, 6), + (8295, 1, 262, 15, 6), + (8296, 1, 262, 20, 6), + (8297, 1, 262, 25, 6), + (8304, 1, 1, 174, 0), + (8305, 1, 1, 203, 0), + (8306, 1, 1, 232, 0), + (8307, 1, 1, 261, 0), + (8308, 1, 1, 290, 0), + (8313, 1, 128, 65, 65), + (8313, 2, 138, 1, 0), + (8313, 3, 140, 1, 0), + (8313, 4, 311, 0, 0), + (8313, 5, 411, 256, 0), + (8313, 6, 137, -40, 0), + (8313, 7, 391, 1, 0), + (8314, 1, 378, 2, 3), + (8315, 1, 378, 3, 3), + (8316, 1, 378, 4, 3), + (8317, 1, 264, 1, 8205), + (8318, 1, 264, 2, 8205), + (8319, 1, 264, 2, 199), + (8320, 1, 264, 4, 199), + (8321, 1, 264, 6, 199), + (8322, 1, 378, 15, 31), + (8323, 1, 378, 20, 31), + (8324, 1, 378, 25, 31), + (8325, 1, 114, -3, 0), + (8326, 1, 114, -6, 0), + (8327, 1, 114, -9, 0), + (8328, 1, 268, 75, 56), + (8328, 2, 234, 1000, 0), + (8329, 1, 227, 4, 29), + (8329, 2, 227, 4, 42), + (8331, 1, 413, 10, 0), + (8331, 2, 139, 8001, 0), + (8331, 3, 385, 12529, 0), + (8331, 4, 411, 512, 0), + (8332, 1, 287, 1, 0), + (8332, 2, 385, 116121, 0), + (8333, 1, 287, 2, 0), + (8333, 2, 385, 116121, 0), + (8334, 1, 287, 3, 0), + (8334, 2, 385, 116121, 0), + (8335, 1, 127, 10, 0), + (8335, 2, 385, 16188, 0), + (8336, 1, 127, 20, 0), + (8336, 2, 385, 16188, 0), + (8337, 1, 127, 30, 0), + (8337, 2, 385, 16188, 0), + (8338, 1, 127, 40, 0), + (8338, 2, 385, 16188, 0), + (8339, 1, 127, 50, 0), + (8339, 2, 385, 16188, 0), + (8344, 1, 294, 0, 175), + (8345, 1, 294, 0, 180), + (8346, 1, 294, 0, 185), + (8347, 1, 264, 600, 616), + (8348, 1, 264, 1200, 616), + (8349, 1, 264, 1800, 616), + (8350, 1, 310, 1200, 0), + (8350, 2, 385, 6212, 0), + (8350, 3, 310, 600, 0), + (8350, 4, 385, 6215, 0), + (8350, 5, 310, 150, 0), + (8350, 6, 385, 6218, 0), + (8350, 7, 310, 9000, 0), + (8350, 8, 385, 6232, 0), + (8350, 9, 310, 600, 0), + (8350, 10, 385, 6243, 0), + (8350, 11, 310, 150, 0), + (8350, 12, 385, 6245, 0), + (8350, 13, 310, 1200, 0), + (8350, 14, 385, 6412, 0), + (8350, 15, 310, 600, 0), + (8350, 16, 385, 6415, 0), + (8350, 17, 310, 150, 0), + (8350, 18, 385, 6418, 0), + (8350, 19, 310, 9000, 0), + (8350, 20, 385, 6432, 0), + (8350, 21, 310, 600, 0), + (8350, 22, 385, 6443, 0), + (8350, 23, 310, 150, 0), + (8350, 24, 385, 6445, 0), + (8351, 1, 262, 30, 0), + (8352, 1, 262, 35, 0), + (8353, 1, 262, 40, 0), + (8354, 1, 262, 45, 0), + (8355, 1, 262, 50, 0), + (8356, 1, 262, 55, 0), + (8357, 1, 262, 60, 0), + (8358, 1, 262, 65, 0), + (8359, 1, 262, 70, 0), + (8360, 1, 262, 75, 0), + (8361, 1, 262, 30, 1), + (8362, 1, 262, 35, 1), + (8363, 1, 262, 40, 1), + (8364, 1, 262, 45, 1), + (8365, 1, 262, 50, 1), + (8366, 1, 262, 55, 1), + (8367, 1, 262, 60, 1), + (8368, 1, 262, 65, 1), + (8369, 1, 262, 70, 1), + (8370, 1, 262, 75, 1), + (8371, 1, 262, 30, 2), + (8372, 1, 262, 35, 2), + (8373, 1, 262, 40, 2), + (8374, 1, 262, 45, 2), + (8375, 1, 262, 50, 2), + (8376, 1, 262, 55, 2), + (8377, 1, 262, 60, 2), + (8378, 1, 262, 65, 2), + (8379, 1, 262, 70, 2), + (8380, 1, 262, 75, 2), + (8381, 1, 262, 30, 3), + (8382, 1, 262, 35, 3), + (8383, 1, 262, 40, 3), + (8384, 1, 262, 45, 3), + (8385, 1, 262, 50, 3), + (8386, 1, 262, 55, 3), + (8387, 1, 262, 60, 3), + (8388, 1, 262, 65, 3), + (8389, 1, 262, 70, 3), + (8390, 1, 262, 75, 3), + (8391, 1, 262, 30, 4), + (8392, 1, 262, 35, 4), + (8393, 1, 262, 40, 4), + (8394, 1, 262, 45, 4), + (8395, 1, 262, 50, 4), + (8396, 1, 262, 55, 4), + (8397, 1, 262, 60, 4), + (8398, 1, 262, 65, 4), + (8399, 1, 262, 70, 4), + (8400, 1, 262, 75, 4), + (8401, 1, 262, 30, 5), + (8402, 1, 262, 35, 5), + (8403, 1, 262, 40, 5), + (8404, 1, 262, 45, 5), + (8405, 1, 262, 50, 5), + (8406, 1, 262, 55, 5), + (8407, 1, 262, 60, 5), + (8408, 1, 262, 65, 5), + (8409, 1, 262, 70, 5), + (8410, 1, 262, 75, 5), + (8411, 1, 262, 30, 6), + (8412, 1, 262, 35, 6), + (8413, 1, 262, 40, 6), + (8414, 1, 262, 45, 6), + (8415, 1, 262, 50, 6), + (8416, 1, 262, 55, 6), + (8417, 1, 262, 60, 6), + (8418, 1, 262, 65, 6), + (8419, 1, 262, 70, 6), + (8420, 1, 262, 75, 6), + (8421, 1, 339, 10, 27535), + (8421, 2, 138, 1, 0), + (8421, 3, 141, 1, 0), + (8421, 4, 142, 75, 0), + (8421, 5, 137, 0, 0), + (8421, 6, 311, 0, 0), + (8421, 7, 134, 95, 0), + (8421, 8, 139, -265, 0), + (8421, 9, 139, -754, 0), + (8421, 10, 139, -1332, 0), + (8421, 11, 139, -1572, 0), + (8421, 12, 139, -2749, 0), + (8421, 13, 139, -4979, 0), + (8421, 14, 139, -5418, 0), + (8421, 15, 139, -5403, 0), + (8422, 1, 1, 198, 0), + (8423, 1, 1, 231, 0), + (8424, 1, 1, 264, 0), + (8425, 1, 1, 297, 0), + (8426, 1, 1, 330, 0), + (8427, 1, 264, 1260, 254), + (8428, 1, 264, 1440, 254), + (8429, 1, 264, 1620, 254), + (8430, 1, 328, 1600, 0), + (8435, 1, 0, 35, 0), + (8440, 1, 259, 66, 0), + (8445, 1, 426, 3, 0), + (8446, 1, 426, 4, 0), + (8447, 1, 426, 5, 0), + (8448, 1, 69, 2200, 0), + (8463, 1, 172, 60, 0), + (8464, 1, 172, 61, 0), + (8470, 1, 262, 80, 7), + (8470, 2, 262, 80, 8), + (8470, 3, 262, 80, 9), + (8470, 4, 262, 80, 10), + (8470, 5, 262, 80, 11), + (9001, 1, 247, 10, 58), + (9002, 1, 247, 20, 58), + (9003, 1, 247, 30, 58), + (9004, 1, 247, 40, 58), + (9005, 1, 247, 50, 58), + (9006, 1, 247, 60, 58), + (9007, 1, 247, 70, 58), + (9008, 1, 247, 80, 58), + (9009, 1, 247, 90, 58), + (9010, 1, 247, 100, 58), + (9011, 1, 247, 10, 58), + (9012, 1, 247, 20, 58), + (9013, 1, 247, 30, 58), + (9014, 1, 247, 40, 58), + (9015, 1, 247, 50, 58), + (9016, 1, 247, 60, 58), + (9017, 1, 247, 70, 58), + (9018, 1, 247, 80, 58), + (9019, 1, 247, 90, 58), + (9020, 1, 247, 100, 58), + (9021, 1, 247, 10, 58), + (9022, 1, 247, 20, 58), + (9023, 1, 247, 30, 58), + (9024, 1, 247, 40, 58), + (9025, 1, 247, 50, 58), + (9026, 1, 247, 60, 58), + (9027, 1, 247, 70, 58), + (9028, 1, 247, 80, 58), + (9029, 1, 247, 90, 58), + (9030, 1, 247, 100, 58), + (9033, 1, 264, 18000, 481), + (9033, 2, 264, 18000, 482), + (9033, 3, 264, 18000, 483), + (9033, 4, 264, 147600, 484), + (9033, 5, 264, 18000, 485), + (9033, 6, 264, 61200, 486), + (9033, 7, 264, 3600, 487), + (9033, 8, 264, 1080, 511), + (9033, 9, 264, 18000, 182), + (9033, 10, 264, 18000, 8081), + (9033, 11, 264, 18000, 8130), + (9033, 12, 264, 18000, 453), + (9033, 13, 264, 18000, 2000), + (9100, 1, 97, 10, 0), + (9100, 2, 262, 1, 5), + (9101, 1, 97, 20, 0), + (9101, 2, 262, 2, 5), + (9102, 1, 97, 30, 0), + (9102, 2, 262, 3, 5), + (9103, 1, 97, 40, 0), + (9103, 2, 262, 4, 5), + (9104, 1, 97, 50, 0), + (9104, 2, 262, 5, 5), + (9105, 1, 97, 60, 0), + (9105, 2, 262, 6, 5), + (9106, 1, 97, 70, 0), + (9106, 2, 262, 7, 5), + (9107, 1, 97, 80, 0), + (9107, 2, 262, 8, 5), + (9108, 1, 97, 90, 0), + (9108, 2, 262, 9, 5), + (9109, 1, 69, 10, 0), + (9109, 2, 262, 1, 1), + (9110, 1, 69, 20, 0), + (9110, 2, 262, 2, 1), + (9111, 1, 69, 30, 0), + (9111, 2, 262, 3, 1), + (9112, 1, 69, 40, 0), + (9112, 2, 262, 4, 1), + (9113, 1, 69, 50, 0), + (9113, 2, 262, 5, 1), + (9114, 1, 69, 60, 0), + (9114, 2, 262, 6, 1), + (9115, 1, 69, 70, 0), + (9115, 2, 262, 7, 1), + (9116, 1, 69, 80, 0), + (9116, 2, 262, 8, 1), + (9117, 1, 69, 90, 0), + (9117, 2, 262, 9, 1), + (9118, 1, 97, 10, 0), + (9118, 2, 262, 1, 5), + (9119, 1, 97, 20, 0), + (9119, 2, 262, 2, 5), + (9120, 1, 97, 30, 0), + (9120, 2, 262, 3, 5), + (9121, 1, 97, 40, 0), + (9121, 2, 262, 4, 5), + (9122, 1, 97, 50, 0), + (9122, 2, 262, 5, 5), + (9123, 1, 97, 60, 0), + (9123, 2, 262, 6, 5), + (9124, 1, 97, 70, 0), + (9124, 2, 262, 7, 5), + (9125, 1, 97, 80, 0), + (9125, 2, 262, 8, 5), + (9126, 1, 97, 90, 0), + (9126, 2, 262, 9, 5), + (9127, 1, 69, 10, 0), + (9127, 2, 262, 1, 5), + (9128, 1, 69, 20, 0), + (9128, 2, 262, 2, 5), + (9129, 1, 69, 30, 0), + (9129, 2, 262, 3, 5), + (9130, 1, 69, 40, 0), + (9130, 2, 262, 4, 5), + (9131, 1, 69, 50, 0), + (9131, 2, 262, 5, 5), + (9132, 1, 69, 60, 0), + (9132, 2, 262, 6, 5), + (9133, 1, 69, 70, 0), + (9133, 2, 262, 7, 5), + (9134, 1, 69, 80, 0), + (9134, 2, 262, 8, 5), + (9135, 1, 69, 90, 0), + (9135, 2, 262, 9, 5), + (9136, 1, 97, 10, 0), + (9136, 2, 262, 1, 4), + (9137, 1, 97, 20, 0), + (9137, 2, 262, 2, 4), + (9138, 1, 97, 30, 0), + (9138, 2, 262, 3, 4), + (9139, 1, 97, 40, 0), + (9139, 2, 262, 4, 4), + (9140, 1, 97, 50, 0), + (9140, 2, 262, 5, 4), + (9141, 1, 97, 60, 0), + (9141, 2, 262, 6, 4), + (9142, 1, 97, 70, 0), + (9142, 2, 262, 7, 4), + (9143, 1, 97, 80, 0), + (9143, 2, 262, 8, 4), + (9144, 1, 97, 90, 0), + (9144, 2, 262, 9, 4), + (9145, 1, 97, 10, 0), + (9145, 2, 262, 1, 4), + (9146, 1, 97, 20, 0), + (9146, 2, 262, 2, 4), + (9147, 1, 97, 30, 0), + (9147, 2, 262, 3, 4), + (9148, 1, 97, 40, 0), + (9148, 2, 262, 4, 4), + (9149, 1, 97, 50, 0), + (9149, 2, 262, 5, 4), + (9150, 1, 97, 60, 0), + (9150, 2, 262, 6, 4), + (9151, 1, 97, 70, 0), + (9151, 2, 262, 7, 4), + (9152, 1, 97, 80, 0), + (9152, 2, 262, 8, 4), + (9153, 1, 97, 90, 0), + (9153, 2, 262, 9, 4), + (9154, 1, 69, 10, 0), + (9154, 2, 262, 1, 1), + (9155, 1, 69, 20, 0), + (9155, 2, 262, 2, 1), + (9156, 1, 69, 30, 0), + (9156, 2, 262, 3, 1), + (9157, 1, 69, 40, 0), + (9157, 2, 262, 4, 1), + (9158, 1, 69, 50, 0), + (9158, 2, 262, 5, 1), + (9159, 1, 69, 60, 0), + (9159, 2, 262, 6, 1), + (9160, 1, 69, 70, 0), + (9160, 2, 262, 7, 1), + (9161, 1, 69, 80, 0), + (9161, 2, 262, 8, 1), + (9162, 1, 69, 90, 0), + (9162, 2, 262, 9, 1), + (9163, 1, 69, 10, 0), + (9163, 2, 262, 1, 3), + (9164, 1, 69, 20, 0), + (9164, 2, 262, 2, 3), + (9165, 1, 69, 30, 0), + (9165, 2, 262, 3, 3), + (9166, 1, 69, 40, 0), + (9166, 2, 262, 4, 3), + (9167, 1, 69, 50, 0), + (9167, 2, 262, 5, 3), + (9168, 1, 69, 60, 0), + (9168, 2, 262, 6, 3), + (9169, 1, 69, 70, 0), + (9169, 2, 262, 7, 3), + (9170, 1, 69, 80, 0), + (9170, 2, 262, 8, 3), + (9171, 1, 69, 90, 0), + (9171, 2, 262, 9, 3), + (9172, 1, 69, 10, 0), + (9172, 2, 262, 1, 0), + (9173, 1, 69, 20, 0), + (9173, 2, 262, 2, 0), + (9174, 1, 69, 30, 0), + (9174, 2, 262, 3, 0), + (9175, 1, 69, 40, 0), + (9175, 2, 262, 4, 0), + (9176, 1, 69, 50, 0), + (9176, 2, 262, 5, 0), + (9177, 1, 69, 60, 0), + (9177, 2, 262, 6, 0), + (9178, 1, 69, 70, 0), + (9178, 2, 262, 7, 0), + (9179, 1, 69, 80, 0), + (9179, 2, 262, 8, 0), + (9180, 1, 69, 90, 0), + (9180, 2, 262, 9, 0), + (9181, 1, 69, 10, 0), + (9181, 2, 262, 1, 0), + (9182, 1, 69, 20, 0), + (9182, 2, 262, 2, 0), + (9183, 1, 69, 30, 0), + (9183, 2, 262, 3, 0), + (9184, 1, 69, 40, 0), + (9184, 2, 262, 4, 0), + (9185, 1, 69, 50, 0), + (9185, 2, 262, 5, 0), + (9186, 1, 69, 60, 0), + (9186, 2, 262, 6, 0), + (9187, 1, 69, 70, 0), + (9187, 2, 262, 7, 0), + (9188, 1, 69, 80, 0), + (9188, 2, 262, 8, 0), + (9189, 1, 69, 90, 0), + (9189, 2, 262, 9, 0), + (9190, 1, 69, 10, 0), + (9190, 2, 262, 1, 0), + (9191, 1, 69, 20, 0), + (9191, 2, 262, 2, 0), + (9192, 1, 69, 30, 0), + (9192, 2, 262, 3, 0), + (9193, 1, 69, 40, 0), + (9193, 2, 262, 4, 0), + (9194, 1, 69, 50, 0), + (9194, 2, 262, 5, 0), + (9195, 1, 69, 60, 0), + (9195, 2, 262, 6, 0), + (9196, 1, 69, 70, 0), + (9196, 2, 262, 7, 0), + (9197, 1, 69, 80, 0), + (9197, 2, 262, 8, 0), + (9198, 1, 69, 90, 0), + (9198, 2, 262, 9, 0), + (9199, 1, 97, 10, 0), + (9199, 2, 262, 1, 0), + (9200, 1, 97, 20, 0), + (9200, 2, 262, 2, 0), + (9201, 1, 97, 30, 0), + (9201, 2, 262, 3, 0), + (9202, 1, 97, 40, 0), + (9202, 2, 262, 4, 0), + (9203, 1, 97, 50, 0), + (9203, 2, 262, 5, 0), + (9204, 1, 97, 60, 0), + (9204, 2, 262, 6, 0), + (9205, 1, 97, 70, 0), + (9205, 2, 262, 7, 0), + (9206, 1, 97, 80, 0), + (9206, 2, 262, 8, 0), + (9207, 1, 97, 90, 0), + (9207, 2, 262, 9, 0), + (9208, 1, 69, 10, 0), + (9208, 2, 262, 1, 0), + (9209, 1, 69, 20, 0), + (9209, 2, 262, 2, 0), + (9210, 1, 69, 30, 0), + (9210, 2, 262, 3, 0), + (9211, 1, 69, 40, 0), + (9211, 2, 262, 4, 0), + (9212, 1, 69, 50, 0), + (9212, 2, 262, 5, 0), + (9213, 1, 69, 60, 0), + (9213, 2, 262, 6, 0), + (9214, 1, 69, 70, 0), + (9214, 2, 262, 7, 0), + (9215, 1, 69, 80, 0), + (9215, 2, 262, 8, 0), + (9216, 1, 69, 90, 0), + (9216, 2, 262, 9, 0), + (9217, 1, 190, 10, 0), + (9217, 2, 262, 1, 0), + (9218, 1, 190, 20, 0), + (9218, 2, 262, 2, 0), + (9219, 1, 190, 30, 0), + (9219, 2, 262, 3, 0), + (9220, 1, 190, 40, 0), + (9220, 2, 262, 4, 0), + (9221, 1, 190, 50, 0), + (9221, 2, 262, 5, 0), + (9222, 1, 190, 60, 0), + (9222, 2, 262, 6, 0), + (9223, 1, 190, 70, 0), + (9223, 2, 262, 7, 0), + (9224, 1, 190, 80, 0), + (9224, 2, 262, 8, 0), + (9225, 1, 190, 90, 0), + (9225, 2, 262, 9, 0), + (9226, 1, 69, 10, 0), + (9226, 2, 262, 1, 0), + (9227, 1, 69, 20, 0), + (9227, 2, 262, 2, 0), + (9228, 1, 69, 30, 0), + (9228, 2, 262, 3, 0), + (9229, 1, 69, 40, 0), + (9229, 2, 262, 4, 0), + (9230, 1, 69, 50, 0), + (9230, 2, 262, 5, 0), + (9231, 1, 69, 60, 0), + (9231, 2, 262, 6, 0), + (9232, 1, 69, 70, 0), + (9232, 2, 262, 7, 0), + (9233, 1, 69, 80, 0), + (9233, 2, 262, 8, 0), + (9234, 1, 69, 90, 0), + (9234, 2, 262, 9, 0), + (9235, 1, 190, 10, 0), + (9235, 2, 262, 1, 0), + (9236, 1, 190, 20, 0), + (9236, 2, 262, 2, 0), + (9237, 1, 190, 30, 0), + (9237, 2, 262, 3, 0), + (9238, 1, 190, 40, 0), + (9238, 2, 262, 4, 0), + (9239, 1, 190, 50, 0), + (9239, 2, 262, 5, 0), + (9240, 1, 190, 60, 0), + (9240, 2, 262, 6, 0), + (9241, 1, 190, 70, 0), + (9241, 2, 262, 7, 0), + (9242, 1, 190, 80, 0), + (9242, 2, 262, 8, 0), + (9243, 1, 190, 90, 0), + (9243, 2, 262, 9, 0), + (9503, 1, 397, 100, 0), + (9504, 1, 397, 200, 0), + (9505, 1, 397, 300, 0), + (9506, 1, 398, 1000, 0), + (9506, 2, 137, 152, 0), + (9507, 1, 398, 2000, 0), + (9507, 2, 137, 152, 0), + (9508, 1, 398, 3000, 0), + (9508, 2, 137, 152, 0), + (9509, 1, 399, 1, 0), + (9509, 2, 141, 1, 0), + (9509, 3, 138, 0, 0), + (9509, 4, 134, 254, 0), + (9509, 5, 348, 10, 0), + (9509, 6, 137, 0, 0), + (9509, 7, 311, 0, 0), + (9509, 8, 137, -152, 0), + (9509, 9, 137, -39, 0), + (9510, 1, 399, 2, 0), + (9510, 2, 141, 1, 0), + (9510, 3, 138, 0, 0), + (9510, 4, 134, 254, 0), + (9510, 5, 348, 10, 0), + (9510, 6, 137, 0, 0), + (9510, 7, 311, 0, 0), + (9510, 8, 137, -152, 0), + (9510, 9, 137, -39, 0), + (9511, 1, 399, 3, 0), + (9511, 2, 141, 1, 0), + (9511, 3, 138, 0, 0), + (9511, 4, 134, 254, 0), + (9511, 5, 348, 10, 0), + (9511, 6, 137, 0, 0), + (9511, 7, 311, 0, 0), + (9511, 8, 137, -152, 0), + (9511, 9, 137, -39, 0), + (9512, 1, 405, 1, 0), + (9513, 1, 405, 3, 0), + (9514, 1, 405, 5, 0), + (9515, 1, 399, 4, 0), + (9515, 2, 141, 1, 0), + (9515, 3, 138, 0, 0), + (9515, 4, 134, 254, 0), + (9515, 5, 348, 10, 0), + (9515, 6, 137, 0, 0), + (9515, 7, 311, 0, 0), + (9515, 8, 137, -152, 0), + (9515, 9, 137, -39, 0), + (10004, 1, 310, 480000, 0), + (10004, 2, 139, 4674, 0), + (10005, 1, 310, 600000, 0), + (10005, 2, 139, 4674, 0), + (10007, 1, 85, 16500, 50), + (10008, 1, 85, 16501, 50), + (10009, 1, 85, 16502, 50), + (10025, 1, 339, 25, 16517), + (10025, 2, 137, 21, 0), + (10026, 1, 339, 25, 16518), + (10026, 2, 137, 21, 0), + (10027, 1, 339, 25, 16519), + (10027, 2, 137, 21, 0), + (10028, 1, 339, 25, 16520), + (10028, 2, 137, 21, 0), + (10029, 1, 339, 25, 16555), + (10029, 2, 137, 21, 0), + (10030, 1, 264, 60, 558), + (10031, 1, 264, 75, 558), + (10032, 1, 264, 90, 558), + (10033, 1, 310, 8000, 0), + (10033, 2, 139, 8007, 0), + (10033, 3, 310, 8000, 0), + (10033, 4, 385, 4140, 0), + (10033, 5, 385, 4240, 0), + (10033, 6, 385, 4340, 0), + (10033, 7, 385, 4440, 0), + (10033, 8, 385, 4540, 0), + (10033, 9, 385, 4640, 0), + (10034, 1, 310, 10000, 0), + (10034, 2, 139, 8007, 0), + (10034, 3, 310, 10000, 0), + (10034, 4, 385, 4140, 0), + (10034, 5, 385, 4240, 0), + (10034, 6, 385, 4340, 0), + (10034, 7, 385, 4440, 0), + (10034, 8, 385, 4540, 0), + (10034, 9, 385, 4640, 0), + (10035, 1, 339, 25, 16556), + (10035, 2, 138, 1, 0), + (10035, 3, 142, 60, 0), + (10035, 4, 137, 35, 0), + (10035, 5, 134, 85, 0), + (10035, 6, 339, 25, 16556), + (10035, 7, 138, 1, 0), + (10035, 8, 142, 60, 0), + (10035, 9, 137, 36, 0), + (10035, 10, 134, 85, 0), + (10035, 11, 339, 25, 16556), + (10035, 12, 138, 1, 0), + (10035, 13, 142, 60, 0), + (10035, 14, 137, 369, 0), + (10035, 15, 134, 85, 0), + (10035, 16, 339, 25, 16556), + (10035, 17, 138, 1, 0), + (10035, 18, 142, 60, 0), + (10035, 19, 137, 116, 0), + (10035, 20, 134, 85, 0), + (10036, 1, 339, 25, 16557), + (10036, 2, 138, 1, 0), + (10036, 3, 142, 60, 0), + (10036, 4, 137, 35, 0), + (10036, 5, 134, 85, 0), + (10036, 6, 339, 25, 16557), + (10036, 7, 138, 1, 0), + (10036, 8, 142, 60, 0), + (10036, 9, 137, 36, 0), + (10036, 10, 134, 85, 0), + (10036, 11, 339, 25, 16557), + (10036, 12, 138, 1, 0), + (10036, 13, 142, 60, 0), + (10036, 14, 137, 369, 0), + (10036, 15, 134, 85, 0), + (10036, 16, 339, 25, 16557), + (10036, 17, 138, 1, 0), + (10036, 18, 142, 60, 0), + (10036, 19, 137, 116, 0), + (10036, 20, 134, 85, 0), + (10037, 1, 339, 25, 16558), + (10037, 2, 138, 1, 0), + (10037, 3, 142, 60, 0), + (10037, 4, 137, 35, 0), + (10037, 5, 134, 85, 0), + (10037, 6, 339, 25, 16558), + (10037, 7, 138, 1, 0), + (10037, 8, 142, 60, 0), + (10037, 9, 137, 36, 0), + (10037, 10, 134, 85, 0), + (10037, 11, 339, 25, 16558), + (10037, 12, 138, 1, 0), + (10037, 13, 142, 60, 0), + (10037, 14, 137, 369, 0), + (10037, 15, 134, 85, 0), + (10037, 16, 339, 25, 16558), + (10037, 17, 138, 1, 0), + (10037, 18, 142, 60, 0), + (10037, 19, 137, 116, 0), + (10037, 20, 134, 85, 0), + (10041, 1, 294, 0, 135), + (10042, 1, 294, 0, 145), + (10043, 1, 294, 0, 155), + (10044, 1, 339, 20, 16564), + (10044, 2, 137, 21, 0), + (10044, 3, 385, -18000, 0), + (10044, 4, 339, 20, 16564), + (10044, 5, 137, 343, 0), + (10044, 6, 385, -18000, 0), + (10045, 1, 339, 20, 16565), + (10045, 2, 137, 21, 0), + (10045, 3, 385, -18000, 0), + (10045, 4, 339, 20, 16565), + (10045, 5, 137, 343, 0), + (10045, 6, 385, -18000, 0), + (10046, 1, 339, 20, 16566), + (10046, 2, 137, 21, 0), + (10046, 3, 385, -18000, 0), + (10046, 4, 339, 20, 16566), + (10046, 5, 137, 343, 0), + (10046, 6, 385, -18000, 0), + (10050, 1, 85, 16567, 0), + (10051, 1, 85, 16568, 0), + (10052, 1, 85, 16569, 0), + (10058, 1, 330, 55, 7), + (10059, 1, 330, 60, 7), + (10060, 1, 330, 65, 7), + (10064, 1, 347, 25, 0), + (10065, 1, 347, 26, 0), + (10066, 1, 347, 27, 0), + (10067, 1, 347, 28, 0), + (10068, 1, 347, 29, 0), + (10069, 1, 347, 30, 0), + (10070, 1, 218, 6, 0), + (10071, 1, 218, 7, 0), + (10072, 1, 218, 8, 0), + (10073, 1, 218, 9, 0), + (10074, 1, 218, 10, 0), + (10075, 1, 339, 10, 16581), + (10075, 2, 138, 0, 0), + (10075, 3, 142, 70, 0), + (10075, 4, 403, 4, 0), + (10075, 5, 348, 1, 0), + (10075, 6, 404, 2, 0), + (10075, 7, 141, 1, 0), + (10076, 1, 339, 10, 16582), + (10076, 2, 138, 0, 0), + (10076, 3, 142, 70, 0), + (10076, 4, 403, 4, 0), + (10076, 5, 348, 1, 0), + (10076, 6, 404, 2, 0), + (10076, 7, 141, 1, 0), + (10077, 1, 339, 10, 16583), + (10077, 2, 138, 0, 0), + (10077, 3, 142, 70, 0), + (10077, 4, 403, 4, 0), + (10077, 5, 348, 1, 0), + (10077, 6, 404, 2, 0), + (10077, 7, 141, 1, 0), + (10081, 1, 85, 16584, 0), + (10082, 1, 85, 16585, 0), + (10083, 1, 85, 16586, 0), + (10084, 1, 375, 175, 0), + (10085, 1, 375, 200, 0), + (10086, 1, 375, 215, 0), + (10087, 1, 397, 400, 0), + (10088, 1, 397, 600, 0), + (10089, 1, 397, 800, 0), + (10105, 1, 264, 60, 170), + (10106, 1, 264, 70, 170), + (10107, 1, 264, 80, 170), + (10108, 1, 264, 90, 170), + (10109, 1, 264, 100, 170), + (10110, 1, 264, 480, 520), + (10111, 1, 264, 600, 520), + (10112, 1, 264, 720, 520), + (10122, 1, 227, 210, 32), + (10123, 1, 227, 240, 32), + (10124, 1, 283, 180, 0), + (10125, 1, 283, 200, 0), + (10126, 1, 283, 220, 0), + (10130, 1, 264, 720, 544), + (10131, 1, 264, 900, 544), + (10132, 1, 264, 1080, 544), + (10133, 1, 279, 19, 0), + (10134, 1, 279, 23, 0), + (10135, 1, 279, 27, 0), + (10136, 1, 375, 130, 0), + (10137, 1, 375, 135, 0), + (10138, 1, 375, 140, 0), + (10153, 1, 264, 420, 553), + (10154, 1, 264, 480, 553), + (10155, 1, 264, 540, 553), + (10165, 1, 220, 195, 8), + (10166, 1, 220, 225, 8), + (10167, 1, 220, 255, 8), + (10171, 1, 252, 90, 0), + (10172, 1, 252, 95, 0), + (10173, 1, 258, 70, 0), + (10174, 1, 258, 71, 0), + (10175, 1, 258, 72, 0), + (10176, 1, 264, 40, 171), + (10177, 1, 264, 50, 171), + (10178, 1, 264, 60, 171), + (10182, 1, 264, 180, 177), + (10183, 1, 264, 210, 177), + (10184, 1, 264, 240, 177), + (10185, 1, 264, 270, 177), + (10186, 1, 264, 300, 177), + (10203, 1, 264, 720, 524), + (10204, 1, 264, 900, 524), + (10205, 1, 264, 1080, 524), + (10206, 1, 264, 1080, 320), + (10207, 1, 264, 1260, 320), + (10213, 1, 218, 16, 0), + (10214, 1, 218, 17, 0), + (10215, 1, 218, 18, 0), + (10216, 1, 218, 19, 0), + (10217, 1, 218, 20, 0), + (10219, 1, 280, 63, 0), + (10220, 1, 280, 64, 0), + (10221, 1, 280, 65, 0), + (10222, 1, 280, 66, 0), + (10223, 1, 280, 67, 0), + (10227, 1, 360, 60, 16720), + (10228, 1, 360, 60, 16721), + (10229, 1, 360, 60, 16722), + (10249, 1, 264, 240, 208), + (10250, 1, 264, 300, 208), + (10251, 1, 264, 360, 208), + (10262, 1, 274, 23, 0), + (10263, 1, 274, 24, 0), + (10264, 1, 274, 25, 0), + (10265, 1, 280, 57, 0), + (10266, 1, 280, 58, 0), + (10267, 1, 280, 59, 0), + (10268, 1, 339, 45, 16736), + (10268, 2, 136, 11, 0), + (10268, 3, 383, 45, 16736), + (10268, 4, 385, 11012, 0), + (10268, 5, 383, 45, 16736), + (10268, 6, 385, 5130, 0), + (10268, 7, 383, 45, 16736), + (10268, 8, 385, 5230, 0), + (10268, 9, 383, 45, 16736), + (10268, 10, 136, 22, 0), + (10268, 11, 383, 45, 16736), + (10268, 12, 385, 5330, 0), + (10268, 13, 385, 5430, 0), + (10268, 14, 385, 5530, 0), + (10269, 1, 339, 45, 16737), + (10269, 2, 136, 11, 0), + (10269, 3, 383, 45, 16737), + (10269, 4, 385, 11012, 0), + (10269, 5, 383, 45, 16737), + (10269, 6, 385, 5130, 0), + (10269, 7, 383, 45, 16737), + (10269, 8, 385, 5230, 0), + (10269, 9, 383, 45, 16737), + (10269, 10, 136, 22, 0), + (10269, 11, 383, 45, 16737), + (10269, 12, 385, 5330, 0), + (10269, 13, 385, 5430, 0), + (10269, 14, 385, 5530, 0), + (10270, 1, 339, 45, 16738), + (10270, 2, 136, 11, 0), + (10270, 3, 383, 45, 16738), + (10270, 4, 385, 11012, 0), + (10270, 5, 383, 45, 16738), + (10270, 6, 385, 5130, 0), + (10270, 7, 383, 45, 16738), + (10270, 8, 385, 5230, 0), + (10270, 9, 383, 45, 16738), + (10270, 10, 136, 22, 0), + (10270, 11, 383, 45, 16738), + (10270, 12, 385, 5330, 0), + (10270, 13, 385, 5430, 0), + (10270, 14, 385, 5530, 0), + (10282, 1, 264, 120, 791), + (10283, 1, 264, 150, 791), + (10284, 1, 264, 180, 791), + (10285, 1, 264, 720, 521), + (10286, 1, 264, 900, 521), + (10287, 1, 264, 1080, 521), + (10291, 1, 264, 15, 247), + (10291, 2, 264, 8, 986), + (10291, 3, 264, 8, 987), + (10291, 4, 264, 8, 988), + (10292, 1, 264, 18, 247), + (10292, 2, 264, 10, 986), + (10292, 3, 264, 10, 987), + (10292, 4, 264, 10, 988), + (10293, 1, 264, 21, 247), + (10293, 2, 264, 12, 986), + (10293, 3, 264, 12, 987), + (10293, 4, 264, 12, 988), + (10305, 1, 280, 68, 0), + (10306, 1, 280, 69, 0), + (10307, 1, 280, 70, 0), + (10311, 1, 220, 608, 74), + (10312, 1, 220, 640, 74), + (10313, 1, 220, 672, 74), + (10314, 1, 220, 704, 74), + (10315, 1, 220, 736, 74), + (10316, 1, 216, 160, 74), + (10317, 1, 216, 200, 74), + (10318, 1, 216, 240, 74), + (10329, 1, 264, 60, 3701), + (10332, 1, 287, 1, 0), + (10332, 2, 137, 22, 0), + (10332, 3, 411, 256, 0), + (10340, 1, 220, 100, 26), + (10341, 1, 220, 160, 26), + (10342, 1, 220, 235, 26), + (10343, 1, 264, 5, 469), + (10344, 1, 264, 10, 469), + (10345, 1, 264, 15, 469), + (10347, 1, 310, 12000, 0), + (10347, 2, 139, 8007, 0), + (10347, 3, 310, 12000, 0), + (10347, 4, 385, 4140, 0), + (10347, 5, 385, 4240, 0), + (10347, 6, 385, 4340, 0), + (10347, 7, 385, 4440, 0), + (10347, 8, 385, 4540, 0), + (10347, 9, 385, 4640, 0), + (10348, 1, 244, 60, 0), + (10349, 1, 244, 50, 0), + (10350, 1, 244, 40, 0), + (10355, 1, 124, 50, 50), + (10355, 2, 385, 19, 0), + (10355, 3, 144, 0, 0), + (10355, 4, 403, 3, 0), + (10355, 5, 404, 48, 0), + (10355, 6, 385, -21768, 0), + (10356, 1, 124, 100, 100), + (10356, 2, 385, 19, 0), + (10356, 3, 144, 0, 0), + (10356, 4, 403, 3, 0), + (10356, 5, 404, 48, 0), + (10356, 6, 385, -21768, 0), + (10357, 1, 124, 150, 150), + (10357, 2, 385, 19, 0), + (10357, 3, 144, 0, 0), + (10357, 4, 403, 3, 0), + (10357, 5, 404, 48, 0), + (10357, 6, 385, -21768, 0), + (10358, 1, 310, 10000, 0), + (10358, 2, 139, 1546, 0), + (10358, 3, 310, 10000, 0), + (10358, 4, 385, 4357, 0), + (10358, 5, 385, 4457, 0), + (10358, 6, 385, 4557, 0), + (10358, 7, 385, 4657, 0), + (10358, 8, 411, 4, 0), + (10359, 1, 310, 20000, 0), + (10359, 2, 139, 1546, 0), + (10359, 3, 310, 20000, 0), + (10359, 4, 385, 4357, 0), + (10359, 5, 385, 4457, 0), + (10359, 6, 385, 4557, 0), + (10359, 7, 385, 4657, 0), + (10359, 8, 411, 4, 0), + (10360, 1, 310, 30000, 0), + (10360, 2, 139, 1546, 0), + (10360, 3, 310, 30000, 0), + (10360, 4, 385, 4357, 0), + (10360, 5, 385, 4457, 0), + (10360, 6, 385, 4557, 0), + (10360, 7, 385, 4657, 0), + (10360, 8, 411, 4, 0), + (10361, 1, 232, 17, 4544), + (10362, 1, 232, 19, 4544), + (10363, 1, 232, 21, 4544), + (10364, 1, 413, -5, 0), + (10364, 2, 139, 480, 0), + (10364, 3, 385, 4352, 0), + (10364, 4, 385, 4452, 0), + (10365, 1, 413, -10, 0), + (10365, 2, 139, 480, 0), + (10365, 3, 385, 4352, 0), + (10365, 4, 385, 4452, 0), + (10366, 1, 413, -15, 0), + (10366, 2, 139, 480, 0), + (10366, 3, 385, 4352, 0), + (10366, 4, 385, 4452, 0), + (10370, 1, 114, -5, 0), + (10371, 1, 114, -10, 0), + (10372, 1, 114, -20, 0), + (10380, 1, 126, 5, 0), + (10380, 2, 134, 85, 0), + (10380, 3, 135, 4, 0), + (10380, 4, 135, 5, 0), + (10381, 1, 126, 10, 0), + (10381, 2, 134, 85, 0), + (10381, 3, 135, 4, 0), + (10381, 4, 135, 5, 0), + (10382, 1, 126, 15, 0), + (10382, 2, 134, 85, 0), + (10382, 3, 135, 4, 0), + (10382, 4, 135, 5, 0), + (10383, 1, 360, 25, 21770), + (10384, 1, 360, 25, 21771), + (10385, 1, 360, 25, 21772), + (10388, 1, 323, 21850, 0), + (10389, 1, 287, 5, 0), + (10389, 2, 385, 16107, 0), + (10389, 3, 411, 512, 0), + (10390, 1, 287, 10, 0), + (10390, 2, 385, 16107, 0), + (10390, 3, 411, 512, 0), + (10391, 1, 287, 15, 0), + (10391, 2, 385, 16107, 0), + (10391, 3, 411, 512, 0), + (10398, 1, 264, 120, 3701), + (10399, 1, 264, 180, 3701), + (10401, 1, 310, 30000, 0), + (10401, 2, 385, 3107, 0), + (10401, 3, 385, 3207, 0), + (10401, 4, 385, 3307, 0), + (10401, 5, 385, 3407, 0), + (10401, 6, 385, 3507, 0), + (10401, 7, 385, 3607, 0), + (10402, 1, 310, 60000, 0), + (10402, 2, 385, 3107, 0), + (10402, 3, 385, 3207, 0), + (10402, 4, 385, 3307, 0), + (10402, 5, 385, 3407, 0), + (10402, 6, 385, 3507, 0), + (10402, 7, 385, 3607, 0), + (10403, 1, 310, 90000, 0), + (10403, 2, 385, 3107, 0), + (10403, 3, 385, 3207, 0), + (10403, 4, 385, 3307, 0), + (10403, 5, 385, 3407, 0), + (10403, 6, 385, 3507, 0), + (10403, 7, 385, 3607, 0), + (10404, 1, 287, 1, 0), + (10404, 2, 139, 8003, 0), + (10405, 1, 310, 120000, 0), + (10405, 2, 139, 4590, 0), + (10406, 1, 310, 240000, 0), + (10406, 2, 139, 4590, 0), + (10407, 1, 310, 360000, 0), + (10407, 2, 139, 4590, 0), + (10408, 1, 310, 480000, 0), + (10408, 2, 139, 4590, 0), + (10409, 1, 310, 600000, 0), + (10409, 2, 139, 4590, 0), + (10410, 1, 247, 130, 76), + (10413, 1, 264, 60, 207), + (10414, 2, 264, 120, 207), + (10415, 3, 264, 180, 207), + (10416, 4, 264, 240, 207), + (10417, 5, 264, 300, 207), + (10431, 1, 264, 210, 791), + (10432, 1, 264, 240, 791), + (10433, 1, 264, 270, 791), + (10434, 1, 127, 16, 0), + (10434, 2, 385, 5921, 0), + (10435, 1, 127, 33, 0), + (10435, 2, 385, 5921, 0), + (10436, 1, 127, 50, 0), + (10436, 2, 385, 5921, 0), + (10437, 1, 339, 25, 23523), + (10437, 2, 137, 21, 0), + (10438, 1, 339, 25, 23524), + (10438, 2, 137, 21, 0), + (10439, 1, 339, 25, 23525), + (10439, 2, 137, 21, 0), + (10440, 1, 339, 25, 23526), + (10440, 2, 137, 21, 0), + (10442, 1, 413, -20, 0), + (10442, 2, 139, 480, 0), + (10442, 3, 385, 4352, 0), + (10442, 4, 385, 4452, 0), + (10443, 1, 413, -25, 0), + (10443, 2, 139, 480, 0), + (10443, 3, 385, 4352, 0), + (10443, 4, 385, 4452, 0), + (10453, 1, 126, 1, 1), + (10453, 2, 137, 21, 0), + (10453, 3, 231, 1, 0), + (10454, 1, 126, 2, 2), + (10454, 2, 137, 21, 0), + (10454, 3, 231, 2, 0), + (10455, 1, 126, 3, 3), + (10455, 2, 137, 21, 0), + (10455, 3, 231, 3, 0), + (10456, 1, 127, 15, 15), + (10456, 2, 139, 12786, 0), + (10457, 1, 127, 30, 30), + (10457, 2, 139, 12786, 0), + (10458, 1, 127, 50, 50), + (10458, 2, 139, 12786, 0), + (10459, 1, 310, 3000, 0), + (10459, 2, 139, 480, 0), + (10459, 3, 310, 3000, 0), + (10459, 4, 385, 4352, 0), + (10459, 5, 385, 4452, 0), + (10459, 6, 385, 4552, 0), + (10460, 1, 310, 6000, 0), + (10460, 2, 139, 480, 0), + (10460, 3, 310, 6000, 0), + (10460, 4, 385, 4352, 0), + (10460, 5, 385, 4452, 0), + (10460, 6, 385, 4552, 0), + (10461, 1, 310, 10000, 0), + (10461, 2, 139, 480, 0), + (10461, 3, 310, 10000, 0), + (10461, 4, 385, 4352, 0), + (10461, 5, 385, 4452, 0), + (10461, 6, 385, 4552, 0), + (10464, 1, 264, 120, 391), + (10465, 1, 264, 240, 391), + (10466, 1, 264, 360, 391), + (10467, 1, 128, 70, 70), + (10467, 2, 138, 1, 0), + (10467, 3, 140, 1, 0), + (10467, 4, 139, -2741, 0), + (10467, 5, 139, -16843, 0), + (10467, 6, 385, -16192, 0), + (10467, 7, 385, -10547, 0), + (10467, 8, 385, -13543, 0), + (10470, 1, 127, 10, 0), + (10470, 2, 385, 8048, 0), + (10471, 1, 127, 20, 0), + (10471, 2, 385, 8048, 0), + (10472, 1, 127, 30, 0), + (10472, 2, 385, 8048, 0), + (10473, 1, 265, 82, 0), + (10474, 1, 265, 83, 0), + (10475, 1, 265, 84, 0), + (10476, 1, 265, 85, 0), + (10477, 1, 265, 86, 0), + (10478, 1, 360, 3, 46246), + (10511, 1, 264, 60, 185), + (10511, 2, 264, 60, 10426), + (10512, 1, 264, 120, 185), + (10512, 2, 264, 120, 10426), + (10513, 1, 264, 180, 185), + (10513, 2, 264, 180, 10426), + (10514, 1, 264, 60, 519), + (10514, 2, 264, 60, 10427), + (10515, 1, 264, 180, 519), + (10515, 2, 264, 180, 10427), + (10516, 1, 264, 120, 519), + (10516, 2, 264, 120, 10427), + (10519, 1, 264, 60, 3213), + (10522, 1, 264, 2, 3732), + (10527, 1, 264, 30, 1400), + (10532, 1, 264, 30, 1401), + (10537, 1, 264, 30, 1402), + (10548, 1, 349, 10, 0), + (10548, 2, 200, 10, 0), + (10548, 3, 419, 27672, 20), + (10551, 1, 339, 10, 16825), + (10551, 2, 137, 31, 0), + (10552, 1, 339, 10, 16826), + (10552, 2, 137, 31, 0), + (10553, 1, 339, 10, 16827), + (10553, 2, 137, 31, 0), + (10554, 1, 339, 12, 8265), + (10554, 2, 138, 0, 0), + (10554, 3, 137, 31, 0), + (10554, 4, 311, 0, 0), + (10555, 1, 339, 14, 8265), + (10555, 2, 138, 0, 0), + (10555, 3, 137, 31, 0), + (10555, 4, 311, 0, 0), + (10556, 1, 339, 16, 8265), + (10556, 2, 138, 0, 0), + (10556, 3, 137, 31, 0), + (10556, 4, 311, 0, 0), + (10558, 1, 264, 60, 1120), + (10559, 1, 264, 120, 1120), + (10560, 1, 264, 180, 1120), + (10561, 1, 126, 5, 5), + (10561, 2, 139, 12576, 0), + (10561, 3, 126, 5, 5), + (10561, 4, 139, 12828, 0), + (10562, 1, 126, 10, 10), + (10562, 2, 139, 12576, 0), + (10562, 3, 126, 10, 10), + (10562, 4, 139, 12828, 0), + (10563, 1, 126, 15, 15), + (10563, 2, 139, 12576, 0), + (10563, 3, 126, 15, 15), + (10563, 4, 139, 12828, 0), + (10568, 1, 85, 23614, 50), + (10574, 1, 310, 720000, 0), + (10574, 2, 139, 4670, 0), + (10575, 1, 310, 720000, 0), + (10575, 2, 139, 4674, 0), + (10576, 1, 264, 420, 109), + (10579, 1, 264, 40, 3646), + (10580, 1, 264, 50, 3646), + (10588, 1, 264, 2, 601), + (10589, 1, 264, 4, 601), + (10590, 1, 264, 6, 601), + (10591, 1, 264, 8, 601), + (10592, 1, 264, 10, 601), + (10604, 1, 213, 13, 0), + (10605, 1, 213, 15, 0), + (10606, 1, 213, 17, 0), + (10607, 1, 215, 12, 0), + (10608, 1, 215, 14, 0), + (10609, 1, 215, 16, 0), + (10610, 1, 129, 25, 25), + (10610, 2, 385, 100265, 0), + (10611, 1, 129, 25, 25), + (10611, 2, 385, 100265, 0), + (10612, 1, 129, 25, 25), + (10612, 2, 385, 100265, 0), + (10621, 1, 264, 960, 180), + (10622, 1, 264, 1200, 180), + (10623, 1, 279, 19, 0), + (10624, 1, 279, 24, 0), + (10625, 1, 279, 30, 0), + (10627, 1, 224, 20, 74), + (10627, 2, 173, 1, 0), + (10628, 1, 224, 35, 74), + (10628, 2, 173, 2, 0), + (10629, 1, 224, 50, 74), + (10629, 2, 173, 3, 0), + (10632, 1, 265, 82, 0), + (10633, 1, 265, 83, 0), + (10634, 1, 265, 84, 0), + (10635, 1, 265, 85, 0), + (10636, 1, 265, 86, 0), + (10637, 1, 320, 12, 0), + (10638, 1, 320, 13, 0), + (10639, 1, 320, 14, 0), + (10641, 2, 385, 11064, 0), + (10643, 1, 124, 200, 200), + (10643, 2, 385, 19, 0), + (10643, 3, 144, 0, 0), + (10643, 4, 403, 3, 0), + (10643, 5, 404, 48, 0), + (10643, 6, 385, -21768, 0), + (10644, 1, 124, 250, 250), + (10644, 2, 385, 19, 0), + (10644, 3, 144, 0, 0), + (10644, 4, 403, 3, 0), + (10644, 5, 404, 48, 0), + (10644, 6, 385, -21768, 0), + (10645, 1, 124, 300, 300), + (10645, 2, 385, 19, 0), + (10645, 3, 144, 0, 0), + (10645, 4, 403, 3, 0), + (10645, 5, 404, 48, 0), + (10645, 6, 385, -21768, 0), + (10650, 1, 378, 1, 3), + (10651, 1, 378, 2, 3), + (10652, 1, 378, 3, 3), + (10653, 1, 310, 120000, 0), + (10653, 2, 139, 4502, 0), + (10653, 3, 139, 4509, 0), + (10654, 1, 310, 240000, 0), + (10654, 2, 139, 4502, 0), + (10654, 3, 139, 4509, 0), + (10655, 1, 310, 360000, 0), + (10655, 2, 139, 4502, 0), + (10655, 3, 139, 4509, 0), + (10656, 1, 287, 1, 0), + (10656, 2, 385, 15002, 0), + (10656, 3, 385, 15003, 0), + (10656, 4, 411, 128, 0), + (10657, 1, 264, 300, 276), + (10658, 1, 264, 600, 276), + (10659, 1, 264, 900, 276), + (10660, 1, 220, 175, 26), + (10660, 2, 220, 175, 30), + (10660, 3, 220, 175, 38), + (10661, 1, 220, 200, 26), + (10661, 2, 220, 200, 30), + (10661, 3, 220, 200, 38), + (10662, 1, 220, 225, 26), + (10662, 2, 220, 225, 30), + (10662, 3, 220, 225, 38), + (10663, 1, 220, 165, 21), + (10663, 2, 220, 165, 23), + (10663, 3, 220, 330, 52), + (10663, 4, 220, 165, 28), + (10664, 1, 220, 175, 21), + (10664, 2, 220, 175, 23), + (10664, 3, 220, 350, 52), + (10664, 4, 220, 175, 28), + (10665, 1, 220, 185, 21), + (10665, 2, 220, 185, 23), + (10665, 3, 220, 370, 52), + (10665, 4, 220, 185, 28), + (10666, 1, 264, 1200, 98), + (10667, 1, 264, 1320, 98), + (10668, 1, 264, 1440, 98), + (10671, 1, 310, 720000, 0), + (10671, 2, 139, 4590, 0), + (10672, 1, 310, 840000, 0), + (10672, 2, 139, 4590, 0), + (10673, 1, 310, 960000, 0), + (10673, 2, 139, 4590, 0), + (10674, 1, 310, 1080000, 0), + (10674, 2, 139, 4590, 0), + (10675, 1, 310, 1200000, 0), + (10675, 2, 139, 4590, 0), + (10676, 1, 339, 20, 23623), + (10676, 2, 137, 21, 0), + (10676, 3, 385, -18000, 0), + (10676, 4, 339, 20, 23623), + (10676, 5, 137, 343, 0), + (10676, 6, 385, -18000, 0), + (10677, 1, 339, 20, 23624), + (10677, 2, 137, 21, 0), + (10677, 3, 385, -18000, 0), + (10677, 4, 339, 20, 23624), + (10677, 5, 137, 343, 0), + (10677, 6, 385, -18000, 0), + (10678, 1, 339, 20, 23625), + (10678, 2, 137, 21, 0), + (10678, 3, 385, -18000, 0), + (10678, 4, 339, 20, 23625), + (10678, 5, 137, 343, 0), + (10678, 6, 385, -18000, 0), + (10685, 1, 266, 34, 0), + (10686, 1, 266, 39, 0), + (10687, 1, 266, 45, 0), + (10688, 1, 220, 125, 10), + (10689, 1, 220, 145, 10), + (10690, 1, 220, 165, 10), + (10691, 1, 220, 190, 10), + (10692, 1, 220, 220, 10), + (10705, 1, 85, 23542, 0), + (10706, 1, 85, 23543, 0), + (10707, 1, 85, 23544, 0), + (10714, 1, 264, 90, 873), + (10715, 1, 264, 180, 873), + (10717, 1, 264, 360, 184), + (10718, 1, 264, 450, 184), + (10719, 1, 264, 120, 872), + (10720, 1, 264, 240, 872), + (10721, 1, 264, 360, 872), + (10722, 1, 264, 120, 778), + (10723, 1, 264, 240, 778), + (10724, 1, 264, 360, 778), + (10725, 1, 264, 480, 778), + (10726, 1, 264, 600, 778), + (10727, 1, 264, 120, 2235), + (10728, 1, 264, 240, 2235), + (10730, 1, 264, 10, 870), + (10731, 1, 264, 20, 870), + (10733, 1, 264, 1, 219), + (10734, 1, 264, 2, 219), + (10735, 1, 264, 3, 219), + (10743, 1, 220, 135, 7), + (10744, 1, 220, 170, 7), + (10745, 1, 220, 205, 7), + (10748, 1, 59, -35, 0), + (10749, 1, 59, -42, 0), + (10750, 1, 264, 3024, 286), + (10750, 2, 264, 3024, 10753), + (10750, 3, 264, 3024, 9101), + (10751, 1, 264, 3456, 286), + (10751, 2, 264, 3456, 10753), + (10751, 3, 264, 3456, 9101), + (10755, 1, 59, -50, 0), + (10763, 1, 292, 50, 0), + (10764, 1, 292, 60, 0), + (10766, 1, 330, 70, 7), + (10767, 1, 330, 75, 7), + (10768, 1, 330, 80, 7), + (10769, 1, 310, 1440000, 0), + (10769, 2, 139, 4519, 0), + (10770, 1, 310, 1680000, 0), + (10770, 2, 139, 4519, 0), + (10778, 1, 274, 38, 0), + (10779, 1, 274, 40, 0), + (10780, 1, 274, 42, 0), + (10781, 1, 1, 186, 0), + (10782, 1, 1, 217, 0), + (10783, 1, 1, 248, 0), + (10784, 1, 1, 279, 0), + (10785, 1, 1, 310, 0), + (10788, 1, 363, 4, 0), + (10792, 1, 287, 1, 0), + (10792, 2, 385, 5240, 0), + (10792, 3, 385, 5340, 0), + (10792, 4, 385, 5440, 0), + (10792, 5, 385, 5540, 0), + (10792, 6, 385, 5640, 0), + (10793, 1, 287, 2, 0), + (10793, 2, 385, 5240, 0), + (10793, 3, 385, 5340, 0), + (10793, 4, 385, 5440, 0), + (10793, 5, 385, 5540, 0), + (10793, 6, 385, 5640, 0), + (10794, 1, 287, 3, 0), + (10794, 2, 385, 5240, 0), + (10794, 3, 385, 5340, 0), + (10794, 4, 385, 5440, 0), + (10794, 5, 385, 5540, 0), + (10794, 6, 385, 5640, 0), + (10795, 1, 287, 4, 0), + (10795, 2, 385, 5240, 0), + (10795, 3, 385, 5340, 0), + (10795, 4, 385, 5440, 0), + (10795, 5, 385, 5540, 0), + (10795, 6, 385, 5640, 0), + (10796, 1, 287, 5, 0), + (10796, 2, 385, 5240, 0), + (10796, 3, 385, 5340, 0), + (10796, 4, 385, 5440, 0), + (10796, 5, 385, 5540, 0), + (10796, 6, 385, 5640, 0), + (10800, 1, 264, 60, 462), + (10801, 1, 264, 120, 462), + (10802, 1, 264, 180, 462), + (10803, 1, 293, 25, 0), + (10804, 1, 293, 50, 0), + (10805, 1, 293, 75, 0), + (10815, 1, 185, 2, 1), + (10815, 2, 185, 2, 3), + (10816, 1, 185, 4, 1), + (10816, 2, 185, 4, 3), + (10817, 1, 185, 6, 1), + (10817, 2, 185, 6, 3), + (10818, 1, 185, 1, 36), + (10819, 1, 185, 3, 36), + (10820, 1, 185, 5, 36), + (10821, 1, 185, 2, 0), + (10821, 2, 185, 2, 2), + (10822, 1, 185, 4, 0), + (10822, 2, 185, 4, 2), + (10823, 1, 185, 6, 0), + (10823, 2, 185, 6, 2), + (10850, 1, 288, 100, 8), + (10851, 1, 288, 100, 8), + (10852, 1, 288, 100, 8), + (10853, 1, 292, 5, 0), + (10854, 1, 292, 10, 0), + (10855, 1, 292, 15, 0), + (10856, 1, 292, 20, 0), + (10857, 1, 292, 25, 0), + (10858, 1, 292, 30, 0), + (10859, 1, 292, 35, 0), + (10860, 1, 292, 40, 0), + (10861, 1, 292, 45, 0), + (10862, 1, 292, 46, 0), + (10863, 1, 292, 47, 0), + (10864, 1, 292, 48, 0), + (10865, 1, 216, 500, 8), + (10866, 1, 216, 550, 8), + (10867, 1, 216, 650, 8), + (10903, 1, 281, 25, 0), + (10904, 1, 281, 50, 0), + (10905, 1, 281, 75, 0), + (10906, 1, 59, -48, 0), + (10907, 1, 59, -51, 0), + (10908, 1, 59, -54, 0), + (10909, 1, 264, 60, 7007), + (10910, 1, 264, 120, 7007), + (10911, 1, 264, 180, 7007), + (10915, 1, 339, 10, 16876), + (10915, 2, 138, 0, 0), + (10915, 3, 142, 70, 0), + (10915, 4, 411, 32, 0), + (10915, 5, 348, 1, 0), + (10915, 6, 141, 1, 0), + (10916, 1, 339, 10, 16877), + (10916, 2, 138, 0, 0), + (10916, 3, 142, 70, 0), + (10916, 4, 411, 32, 0), + (10916, 5, 348, 1, 0), + (10916, 6, 141, 1, 0), + (10917, 1, 339, 10, 16878), + (10917, 2, 138, 0, 0), + (10917, 3, 142, 70, 0), + (10917, 4, 411, 32, 0), + (10917, 5, 348, 1, 0), + (10917, 6, 141, 1, 0), + (10950, 1, 287, 1, 0), + (10950, 2, 403, 4, 0), + (10950, 3, 404, 38, 0), + (10950, 4, 348, 1, 0), + (10950, 5, 137, 11, 0), + (10950, 6, 140, 2, 0), + (10951, 1, 264, 60, 447), + (10952, 1, 264, 120, 447), + (10953, 1, 264, 180, 447), + (10954, 1, 264, 60, 662), + (10955, 1, 264, 120, 662), + (10956, 1, 264, 180, 662), + (11000, 1, 227, 1, 73), + (11001, 1, 227, 2, 73), + (11002, 1, 227, 3, 73), + (11003, 1, 287, 1, 0), + (11003, 2, 137, 158, 0), + (11003, 3, 411, 2, 0), + (11004, 1, 287, 1, 0), + (11004, 2, 139, 8000, 0), + (11005, 1, 287, 2, 0), + (11005, 2, 139, 8000, 0), + (11006, 1, 287, 3, 0), + (11006, 2, 139, 8000, 0), + (11011, 1, 264, 480, 3710), + (11012, 1, 264, 600, 3710), + (11013, 1, 264, 720, 3710), + (11014, 1, 264, 10, 3899), + (11014, 2, 264, 10, 611), + (11014, 3, 264, 10, 960), + (11014, 4, 264, 10, 1252), + (11015, 1, 264, 20, 3899), + (11015, 2, 264, 20, 611), + (11015, 3, 264, 20, 960), + (11015, 4, 264, 20, 1252), + (11016, 1, 264, 30, 3899), + (11016, 2, 264, 30, 611), + (11016, 3, 264, 30, 960), + (11016, 4, 264, 30, 1252), + (11020, 1, 264, 40, 3899), + (11020, 2, 264, 40, 611), + (11020, 3, 264, 40, 960), + (11020, 4, 264, 40, 1252), + (11050, 1, 264, 360, 452), + (11050, 2, 264, 360, 6106), + (11050, 3, 264, 360, 493), + (11051, 1, 264, 720, 452), + (11051, 2, 264, 720, 6106), + (11051, 3, 264, 720, 493), + (11052, 1, 264, 1080, 452), + (11052, 2, 264, 1080, 6106), + (11052, 3, 264, 1080, 493), + (11053, 1, 264, 1260, 500), + (11054, 1, 264, 1440, 500), + (11059, 1, 264, 1440, 452), + (11059, 2, 264, 1440, 6106), + (11059, 3, 264, 1440, 493), + (11060, 1, 264, 1800, 452), + (11060, 2, 264, 1800, 6106), + (11060, 3, 264, 1800, 493), + (11061, 1, 114, -63, 0), + (11062, 1, 114, -64, 0), + (11063, 1, 114, -65, 0), + (11074, 1, 247, 100, 39), + (11075, 1, 247, 150, 39), + (11076, 1, 247, 200, 39), + (11077, 1, 264, 10, 986), + (11078, 1, 264, 10, 988), + (11079, 1, 264, 10, 987), + (11082, 1, 185, 40, 51), + (11083, 1, 185, 50, 51), + (11084, 1, 185, 60, 51), + (11085, 1, 247, 20, 2), + (11085, 2, 247, 20, 3), + (11085, 3, 247, 20, 77), + (11085, 4, 220, 25, 77), + (11085, 5, 220, 25, 2), + (11085, 6, 220, 25, 3), + (11086, 1, 247, 40, 2), + (11086, 2, 247, 40, 3), + (11086, 3, 247, 40, 77), + (11086, 4, 220, 35, 77), + (11086, 5, 220, 35, 2), + (11086, 6, 220, 35, 3), + (11087, 1, 247, 60, 2), + (11087, 2, 247, 60, 3), + (11087, 3, 247, 60, 77), + (11087, 4, 220, 50, 77), + (11087, 5, 220, 50, 2), + (11087, 6, 220, 50, 3), + (11088, 1, 264, 180, 505), + (11089, 1, 264, 360, 505), + (11090, 1, 264, 540, 505), + (11091, 1, 264, 720, 505), + (12396, 1, 172, 50, 0), + (12397, 1, 172, 51, 0), + (12398, 1, 172, 52, 0), + (12399, 1, 172, 53, 0), + (12400, 1, 172, 54, 0), + (12401, 1, 259, 56, 0), + (12402, 1, 259, 57, 0), + (12403, 1, 259, 58, 0), + (12404, 1, 259, 59, 0), + (12405, 1, 259, 60, 0), + (12406, 1, 69, 1100, 0), + (12407, 1, 69, 1200, 0), + (12408, 1, 69, 1300, 0), + (12409, 1, 69, 1400, 0), + (12410, 1, 69, 1500, 0), + (12411, 1, 1, 300, 0), + (12412, 1, 1, 350, 0), + (12413, 1, 1, 400, 0), + (12414, 1, 1, 450, 0), + (12415, 1, 1, 500, 0), + (12416, 1, 399, 3, 0), + (12416, 2, 141, 1, 0), + (12416, 3, 138, 0, 0), + (12416, 4, 142, 255, 0), + (12416, 5, 391, 0, 0), + (12416, 6, 311, 0, 0), + (12416, 7, 137, -152, 0), + (12416, 8, 411, 100350, 0), + (12416, 9, 137, -39, 0), + (12417, 1, 399, 6, 0), + (12417, 2, 141, 1, 0), + (12417, 3, 138, 0, 0), + (12417, 4, 142, 255, 0), + (12417, 5, 391, 0, 0), + (12417, 6, 311, 0, 0), + (12417, 7, 137, -152, 0), + (12417, 8, 411, 100350, 0), + (12417, 9, 137, -39, 0), + (12418, 1, 399, 9, 0), + (12418, 2, 141, 1, 0), + (12418, 3, 138, 0, 0), + (12418, 4, 142, 255, 0), + (12418, 5, 391, 0, 0), + (12418, 6, 311, 0, 0), + (12418, 7, 137, -152, 0), + (12418, 8, 411, 100350, 0), + (12418, 9, 137, -39, 0), + (12419, 1, 292, 15, 0), + (12420, 1, 292, 30, 0), + (12421, 1, 292, 45, 0), + (12423, 1, 273, 21, 0), + (12424, 1, 273, 24, 0), + (12425, 1, 273, 27, 0), + (12426, 1, 273, 21, 0), + (12427, 1, 273, 24, 0), + (12428, 1, 273, 27, 0), + (12432, 1, 294, 17, 100), + (12433, 1, 294, 19, 100), + (12434, 1, 294, 21, 100), + (12435, 1, 294, 23, 100), + (12436, 1, 294, 25, 100), + (12437, 1, 294, 27, 100), + (12438, 1, 200, 70, 0), + (12439, 1, 341, 210, 0), + (12440, 1, 341, 220, 0), + (12441, 1, 341, 230, 0), + (12442, 1, 341, 240, 0), + (12443, 1, 341, 250, 0), + (12444, 1, 318, 21, 0), + (12445, 1, 318, 22, 0), + (12446, 1, 318, 23, 0), + (12447, 1, 318, 24, 0), + (12448, 1, 318, 25, 0), + (12449, 1, 125, 31, 31), + (12449, 2, 137, 0, 0), + (12449, 3, 141, 1, 0), + (12449, 4, 139, -6233, 0), + (12449, 5, 139, -6265, 0), + (12449, 6, 125, 31, 31), + (12449, 7, 137, 147, 0), + (12449, 8, 141, 1, 0), + (12450, 1, 125, 34, 34), + (12450, 2, 137, 0, 0), + (12450, 3, 141, 1, 0), + (12450, 4, 139, -6233, 0), + (12450, 5, 139, -6265, 0), + (12450, 6, 125, 34, 34), + (12450, 7, 137, 147, 0), + (12450, 8, 141, 1, 0), + (12451, 1, 125, 37, 37), + (12451, 2, 137, 0, 0), + (12451, 3, 141, 1, 0), + (12451, 4, 139, -6233, 0), + (12451, 5, 139, -6265, 0), + (12451, 6, 125, 37, 37), + (12451, 7, 137, 147, 0), + (12451, 8, 141, 1, 0), + (12452, 1, 274, 38, 0), + (12453, 1, 274, 39, 0), + (12454, 1, 274, 40, 0), + (12455, 1, 15, 19, 0), + (12456, 1, 15, 20, 0), + (12457, 1, 15, 21, 0), + (12458, 1, 15, 22, 0), + (12459, 1, 15, 23, 0), + (12463, 1, 320, 9, 0), + (12464, 1, 320, 10, 0), + (12465, 1, 320, 11, 0), + (12466, 1, 320, 9, 0), + (12467, 1, 320, 10, 0), + (12468, 1, 320, 11, 0), + (12469, 1, 320, 9, 0), + (12470, 1, 320, 10, 0), + (12471, 1, 320, 11, 0), + (12472, 1, 320, 6, 0), + (12473, 1, 320, 7, 0), + (12474, 1, 320, 8, 0), + (12475, 1, 264, 180, 7003), + (12476, 1, 264, 360, 7003), + (12477, 1, 264, 540, 7003), + (12478, 1, 264, 60, 3705), + (12479, 1, 264, 120, 3705), + (12480, 1, 264, 180, 3705), + (12481, 1, 247, 40, 76), + (12482, 1, 247, 45, 76), + (12483, 1, 247, 65, 76), + (12484, 1, 247, 70, 76), + (12485, 1, 247, 30, 76), + (12486, 1, 247, 35, 76), + (12487, 1, 247, 25, 76), + (12488, 1, 247, 30, 76), + (12492, 1, 69, 1600, 0), + (12493, 1, 69, 1700, 0), + (12494, 1, 69, 1800, 0), + (12495, 1, 69, 1900, 0), + (12496, 1, 69, 2000, 0), + (12497, 1, 125, 40, 40), + (12497, 2, 137, 0, 0), + (12497, 3, 141, 1, 0), + (12497, 4, 139, -6233, 0), + (12497, 5, 139, -6265, 0), + (12497, 6, 125, 40, 40), + (12497, 7, 137, 147, 0), + (12497, 8, 141, 1, 0), + (12498, 1, 125, 43, 43), + (12498, 2, 137, 0, 0), + (12498, 3, 141, 1, 0), + (12498, 4, 139, -6233, 0), + (12498, 5, 139, -6265, 0), + (12498, 6, 125, 43, 43), + (12498, 7, 137, 147, 0), + (12498, 8, 141, 1, 0), + (12499, 1, 125, 46, 46), + (12499, 2, 137, 0, 0), + (12499, 3, 141, 1, 0), + (12499, 4, 139, -6233, 0), + (12499, 5, 139, -6265, 0), + (12499, 6, 125, 46, 46), + (12499, 7, 137, 147, 0), + (12499, 8, 141, 1, 0), + (12500, 1, 310, 1000, 0), + (12500, 2, 385, 4004, 0), + (12500, 3, 385, 11202, 0), + (12500, 4, 385, 11302, 0), + (12500, 5, 385, 11402, 0), + (12500, 6, 385, 11502, 0), + (12500, 7, 385, 11602, 0), + (12501, 1, 310, 2000, 0), + (12501, 2, 385, 4004, 0), + (12501, 3, 385, 11202, 0), + (12501, 4, 385, 11302, 0), + (12501, 5, 385, 11402, 0), + (12501, 6, 385, 11502, 0), + (12501, 7, 385, 11602, 0), + (12502, 1, 310, 3000, 0), + (12502, 2, 385, 4004, 0), + (12502, 3, 385, 11202, 0), + (12502, 4, 385, 11302, 0), + (12502, 5, 385, 11402, 0), + (12502, 6, 385, 11502, 0), + (12502, 7, 385, 11602, 0), + (12505, 1, 310, 4000, 0), + (12505, 2, 385, 4004, 0), + (12505, 3, 385, 11202, 0), + (12505, 4, 385, 11302, 0), + (12505, 5, 385, 11402, 0), + (12505, 6, 385, 11502, 0), + (12505, 7, 385, 11602, 0), + (12506, 1, 310, 5000, 0), + (12506, 2, 385, 4004, 0), + (12506, 3, 385, 11202, 0), + (12506, 4, 385, 11302, 0), + (12506, 5, 385, 11402, 0), + (12506, 6, 385, 11502, 0), + (12506, 7, 385, 11602, 0), + (12507, 1, 301, 120, 0), + (12508, 1, 247, 50, 76), + (12509, 1, 247, 55, 76), + (12510, 1, 247, 60, 76), + (12511, 1, 247, 75, 76), + (12512, 1, 247, 80, 76), + (12513, 1, 247, 85, 76), + (12514, 1, 247, 40, 76), + (12515, 1, 247, 45, 76), + (12516, 1, 247, 50, 76), + (12517, 1, 247, 35, 76), + (12518, 1, 247, 40, 76), + (12519, 1, 247, 45, 76), + (12523, 1, 294, 0, 200), + (12526, 1, 294, 0, 190), + (12527, 1, 294, 0, 195), + (12528, 1, 294, 0, 200), + (12529, 1, 294, 0, 165), + (12530, 1, 294, 0, 175), + (12531, 1, 294, 0, 185), + (12532, 1, 341, 260, 0), + (12533, 1, 341, 270, 0), + (12534, 1, 341, 280, 0), + (12535, 1, 341, 290, 0), + (12536, 1, 341, 300, 0), + (12537, 1, 318, 26, 0), + (12538, 1, 318, 27, 0), + (12539, 1, 318, 28, 0), + (12540, 1, 318, 29, 0), + (12541, 1, 318, 30, 0), + (12548, 1, 278, 900, 79230), + (12548, 2, 440, 87, 100), + (12549, 1, 278, 900, 86260), + (12549, 2, 440, 88, 100), + (12550, 1, 278, 900, 88260), + (12550, 2, 440, 89, 100), + (12551, 1, 278, 900, 91510), + (12551, 2, 440, 90, 100), + (12552, 1, 278, 900, 96305), + (12552, 2, 440, 91, 100), + (12553, 1, 294, 29, 102), + (12554, 1, 294, 31, 104), + (12555, 1, 294, 33, 106), + (12556, 1, 294, 23, 100), + (12557, 1, 294, 25, 100), + (12558, 1, 294, 27, 100), + (12559, 1, 190, 300, 0), + (12560, 1, 190, 350, 0), + (12561, 1, 190, 400, 0), + (12562, 1, 190, 450, 0), + (12563, 1, 190, 500, 0), + (12564, 1, 319, 28, 0), + (12565, 1, 319, 29, 0), + (12566, 1, 319, 30, 0), + (12567, 1, 274, 41, 0), + (12568, 1, 274, 42, 0), + (12569, 1, 274, 43, 0), + (12570, 1, 15, 24, 0), + (12571, 1, 15, 25, 0), + (12572, 1, 15, 26, 0), + (12573, 1, 15, 27, 0), + (12574, 1, 15, 28, 0), + (12575, 1, 292, 60, 0), + (12576, 1, 231, 17, 0), + (12577, 1, 231, 19, 0), + (12578, 1, 231, 21, 0), + (12579, 1, 85, 23569, 0), + (12580, 1, 85, 23570, 0), + (12581, 1, 85, 23571, 0), + (12582, 1, 264, 10, 9400), + (12583, 1, 264, 20, 9400), + (12584, 1, 264, 30, 9400), + (12587, 1, 264, 480, 9403), + (12588, 1, 264, 600, 9403), + (12589, 1, 264, 720, 9403), + (12591, 1, 247, 90, 76), + (12594, 1, 247, 55, 76), + (12597, 1, 247, 50, 76), + (12598, 1, 247, 55, 76), + (12600, 1, 310, 60000, 0), + (12600, 2, 139, 6197, 0), + (12600, 3, 411, 512, 0), + (12603, 1, 287, 1, 0), + (12603, 2, 139, 6197, 0), + (12603, 3, 411, 512, 0), + (12606, 1, 271, 5, 0), + (12607, 1, 310, 12000, 0), + (12607, 2, 385, 13007, 0), + (12607, 3, 385, 12105, 0), + (12607, 4, 385, 12205, 0), + (12607, 5, 310, 36000, 0), + (12607, 6, 385, 12305, 0), + (12607, 7, 385, 12405, 0), + (12607, 8, 385, 12505, 0), + (12607, 9, 411, 512, 0), + (12610, 1, 279, 19, 0), + (12612, 1, 439, 0, 124480), + (12612, 2, 345, 84, 25), + (12613, 1, 439, 0, 132440), + (12613, 2, 345, 86, 25), + (12615, 1, 310, 120000, 0), + (12615, 2, 139, 4695, 0), + (12615, 3, 411, 512, 0), + (12616, 1, 310, 240000, 0), + (12616, 2, 139, 4695, 0), + (12616, 3, 411, 512, 0), + (12617, 1, 310, 360000, 0), + (12617, 2, 139, 4695, 0), + (12617, 3, 411, 512, 0), + (12636, 1, 426, 1, 0), + (12637, 1, 426, 2, 0), + (12639, 1, 264, 240, 519), + (12639, 2, 264, 240, 10427), + (12642, 1, 264, 240, 185), + (12642, 2, 264, 240, 10426), + (12645, 1, 287, 1, 0), + (12645, 2, 385, 8190, 0), + (12645, 3, 287, 1, 0), + (12645, 4, 385, 21818, 0), + (12645, 5, 411, 64, 0), + (12646, 1, 287, 1, 0), + (12646, 2, 385, 3277, 0), + (12646, 3, 287, 1, 0), + (12646, 4, 385, 21816, 0), + (12652, 1, 399, 1, 0), + (12652, 2, 138, 1, 0), + (12652, 3, 137, 0, 0), + (12652, 4, 348, 10, 0), + (12652, 5, 311, 0, 0), + (12652, 6, 141, 1, 0), + (12652, 7, 134, 254, 0), + (12652, 8, 137, -39, 0), + (12653, 1, 399, 2, 0), + (12653, 2, 138, 1, 0), + (12653, 3, 137, 0, 0), + (12653, 4, 348, 10, 0), + (12653, 5, 311, 0, 0), + (12653, 6, 141, 1, 0), + (12653, 7, 134, 254, 0), + (12653, 8, 137, -39, 0), + (12654, 1, 399, 3, 0), + (12654, 2, 138, 1, 0), + (12654, 3, 137, 0, 0), + (12654, 4, 348, 10, 0), + (12654, 5, 311, 0, 0), + (12654, 6, 141, 1, 0), + (12654, 7, 134, 254, 0), + (12654, 8, 137, -39, 0), + (12664, 1, 264, 2, 3728), + (12667, 1, 220, 250, 26), + (12667, 2, 220, 250, 30), + (12667, 3, 220, 250, 38), + (12668, 1, 220, 275, 26), + (12668, 2, 220, 275, 30), + (12668, 3, 220, 275, 38), + (12669, 1, 220, 300, 26), + (12669, 2, 220, 300, 30), + (12669, 3, 220, 300, 38), + (12670, 1, 220, 200, 21), + (12670, 2, 220, 200, 23), + (12670, 3, 220, 400, 52), + (12670, 4, 220, 200, 28), + (12671, 1, 220, 215, 21), + (12671, 2, 220, 215, 23), + (12671, 3, 220, 450, 52), + (12671, 4, 220, 215, 28), + (12672, 1, 220, 235, 21), + (12672, 2, 220, 235, 23), + (12672, 3, 220, 510, 52), + (12672, 4, 220, 235, 28), + (12673, 1, 264, 960, 420), + (12674, 1, 227, 270, 32), + (12675, 1, 227, 300, 32), + (12676, 1, 227, 330, 32), + (12677, 1, 275, 92, 0), + (12678, 1, 287, 2, 0), + (12678, 2, 385, 15002, 0), + (12678, 3, 385, 15003, 0), + (12678, 4, 411, 128, 0), + (12679, 1, 264, 1200, 276), + (12680, 1, 264, 1500, 276), + (12681, 1, 264, 1800, 276), + (12685, 1, 292, 49, 0), + (12686, 1, 292, 50, 0), + (12687, 1, 292, 51, 0), + (12688, 1, 287, 1, 0), + (12688, 2, 385, 8473, 0), + (12688, 3, 385, 8318, 0), + (12688, 4, 385, 8418, 0), + (12688, 5, 385, 8518, 0), + (12688, 6, 411, 128, 0), + (12689, 1, 287, 2, 0), + (12689, 2, 139, 4691, 0), + (12689, 3, 411, 128, 0), + (12690, 1, 287, 2, 0), + (12690, 2, 385, 8111, 0), + (12690, 3, 385, 15008, 0), + (12690, 4, 385, 8411, 0), + (12690, 5, 385, 8511, 0), + (12690, 6, 411, 128, 0), + (12691, 1, 287, 1, 0), + (12691, 2, 385, 15007, 0), + (12691, 3, 411, 128, 0), + (12691, 4, 385, 8316, 0), + (12692, 1, 220, 255, 21), + (12692, 2, 220, 255, 23), + (12692, 3, 220, 570, 52), + (12692, 4, 220, 255, 28), + (12693, 1, 220, 275, 21), + (12693, 2, 220, 275, 23), + (12693, 3, 220, 630, 52), + (12693, 4, 220, 275, 28), + (12694, 1, 189, 16, 0), + (12695, 1, 189, 17, 0), + (12696, 1, 189, 18, 0), + (12697, 1, 330, 140, 0), + (12697, 2, 330, 140, 1), + (12697, 3, 330, 140, 2), + (12697, 4, 330, 140, 3), + (12697, 5, 330, 140, 28), + (12697, 6, 330, 140, 36), + (12697, 7, 330, 140, 77), + (12698, 1, 330, 145, 0), + (12698, 2, 330, 145, 1), + (12698, 3, 330, 145, 2), + (12698, 4, 330, 145, 3), + (12698, 5, 330, 145, 28), + (12698, 6, 330, 145, 36), + (12698, 7, 330, 145, 77), + (12699, 1, 330, 150, 0), + (12699, 2, 330, 150, 1), + (12699, 3, 330, 150, 2), + (12699, 4, 330, 150, 3), + (12699, 5, 330, 150, 28), + (12699, 6, 330, 150, 36), + (12699, 7, 330, 150, 77), + (12703, 1, 283, 240, 0), + (12704, 1, 283, 260, 0), + (12705, 1, 283, 280, 0), + (12706, 1, 220, 60, 28), + (12706, 2, 220, 60, 0), + (12706, 3, 427, 23598, 3), + (12706, 4, 428, 28, 0), + (12706, 5, 428, 0, 0), + (12707, 1, 220, 85, 28), + (12707, 2, 220, 85, 0), + (12707, 3, 427, 23598, 5), + (12707, 4, 428, 28, 0), + (12707, 5, 428, 0, 0), + (12708, 1, 220, 115, 28), + (12708, 2, 220, 115, 0), + (12708, 3, 427, 23598, 7), + (12708, 4, 428, 28, 0), + (12708, 5, 428, 0, 0), + (12709, 1, 287, 1, 0), + (12709, 2, 139, 4516, 0), + (12709, 3, 411, 256, 0), + (12710, 1, 310, 360000, 0), + (12710, 2, 139, 4516, 0), + (12710, 3, 411, 256, 0), + (12711, 1, 310, 720000, 0), + (12711, 2, 139, 4516, 0), + (12711, 3, 411, 256, 0), + (12712, 1, 310, 1080000, 0), + (12712, 2, 139, 4516, 0), + (12712, 3, 411, 256, 0), + (12713, 1, 264, 2, 8202), + (12714, 1, 264, 4, 8202), + (12715, 1, 264, 6, 8202), + (12716, 1, 264, 30, 3702), + (12717, 1, 264, 60, 3702), + (12718, 1, 264, 90, 3702), + (12719, 1, 128, 10, 0), + (12719, 2, 385, 12769, 0), + (12719, 3, 411, 256, 0), + (12720, 1, 287, 1, 0), + (12720, 2, 139, 12519, 0), + (12720, 3, 411, 256, 0), + (12721, 1, 264, 60, 3506), + (12722, 1, 264, 120, 3506), + (12723, 1, 264, 180, 3506), + (12727, 1, 264, 960, 359), + (12728, 1, 264, 1200, 359), + (12729, 1, 264, 1440, 359), + (12733, 1, 287, 2, 0), + (12733, 2, 137, 22, 0), + (12733, 3, 411, 256, 0), + (12734, 1, 375, 145, 0), + (12735, 1, 375, 150, 0), + (12736, 1, 375, 155, 0), + (12737, 1, 129, 5, 0), + (12737, 2, 385, 12768, 0), + (12737, 3, 411, 256, 0), + (12738, 1, 129, 10, 0), + (12738, 2, 385, 12768, 0), + (12738, 3, 411, 256, 0), + (12739, 1, 129, 15, 0), + (12739, 2, 385, 12768, 0), + (12739, 3, 411, 256, 0), + (12757, 1, 264, 6000, 68), + (12758, 1, 264, 6600, 68), + (12759, 1, 264, 7200, 68), + (12767, 1, 229, 50, 0), + (12768, 1, 229, 55, 0), + (12769, 1, 229, 60, 0), + (12773, 1, 264, 60, 1580), + (12774, 1, 264, 120, 1580), + (12775, 1, 264, 180, 1580), + (12776, 1, 264, 240, 1580), + (12777, 1, 264, 300, 1580), + (12779, 1, 264, 0, 826), + (12780, 1, 264, 1, 826), + (12781, 1, 264, 1, 826), + (12782, 1, 129, 10, 0), + (12782, 2, 385, 16106, 0), + (12783, 1, 129, 20, 0), + (12783, 2, 385, 16106, 0), + (12784, 1, 129, 30, 0), + (12784, 2, 385, 16106, 0), + (12792, 1, 397, 1000, 0), + (12793, 1, 397, 1200, 0), + (12794, 1, 397, 1250, 0), + (12795, 1, 213, 19, 0), + (12796, 1, 213, 21, 0), + (12797, 1, 213, 23, 0), + (12798, 1, 218, 21, 0), + (12799, 1, 218, 22, 0), + (12800, 1, 218, 23, 0), + (12801, 1, 215, 18, 0), + (12802, 1, 215, 20, 0), + (12803, 1, 215, 22, 0), + (12813, 1, 320, 2, 0), + (12814, 1, 320, 4, 0), + (12815, 1, 320, 6, 0), + (12816, 1, 128, 1, 0), + (12816, 2, 385, 2223, 0), + (12816, 3, 385, 2323, 0), + (12816, 4, 385, 2240, 0), + (12816, 5, 385, 2340, 0), + (12816, 6, 385, 2440, 0), + (12816, 7, 385, 2540, 0), + (12816, 8, 398, 6000, 0), + (12816, 9, 385, 11872, 0), + (12816, 10, 385, 14154, 0), + (12816, 11, 385, 18166, 0), + (12816, 12, 385, 27225, 0), + (12816, 13, 385, 2419, 0), + (12816, 14, 385, 2427, 0), + (12816, 15, 385, 30374, 0), + (12816, 16, 385, 2527, 0), + (12816, 17, 385, 36431, 0), + (12819, 1, 310, 23400, 0), + (12819, 2, 139, 4671, 0), + (12819, 3, 411, 32768, 0), + (12820, 1, 310, 46800, 0), + (12820, 2, 139, 4671, 0), + (12820, 3, 411, 32768, 0), + (12822, 1, 310, 153000, 0), + (12822, 2, 139, 8233, 0), + (12822, 3, 310, 120000, 0), + (12822, 4, 385, 2439, 0), + (12822, 5, 385, 2539, 0), + (12822, 6, 411, 32768, 0), + (12831, 1, 127, 17, 0), + (12831, 2, 385, 3291, 0), + (12831, 3, 385, 3817, 0), + (12831, 4, 411, 32768, 0), + (12834, 1, 264, 180, 128), + (12835, 1, 264, 225, 128), + (12840, 1, 264, 24, 3817), + (12841, 1, 264, 30, 3817), + (12843, 1, 225, 42, 0), + (12846, 1, 288, 20, 28), + (12846, 2, 288, 20, 0), + (12849, 1, 127, 14, 0), + (12849, 2, 385, 16794, 0), + (12849, 3, 411, 32768, 0), + (12860, 1, 294, 21, 102), + (12863, 1, 127, 15, 15), + (12863, 2, 137, 0, 0), + (12863, 3, 138, 0, 0), + (12863, 4, 141, 1, 0), + (12863, 5, 143, 3000, 0), + (12863, 6, 127, 15, 15), + (12863, 7, 385, 16555, 0), + (12863, 8, 385, 16655, 0), + (12871, 1, 264, 2160, 452), + (12871, 2, 264, 2160, 6106), + (12871, 3, 264, 2160, 493), + (12872, 1, 264, 2520, 452), + (12872, 2, 264, 2520, 6106), + (12872, 3, 264, 2520, 493), + (12874, 1, 264, 2572, 451), + (12876, 1, 264, 900, 7003), + (12877, 1, 264, 1260, 7003), + (12878, 1, 264, 1620, 7003), + (12881, 1, 264, 45, 172), + (12886, 1, 10, 0, 0), + (12887, 1, 10, 0, 0), + (12888, 1, 10, 0, 0), + (12889, 1, 10, 0, 0), + (12890, 1, 10, 0, 0), + (12894, 1, 264, 30, 1122), + (12899, 1, 264, 3456, 57), + (12899, 2, 264, 3456, 616), + (12900, 1, 264, 4320, 57), + (12900, 2, 264, 4320, 616), + (12902, 1, 264, 30, 1380), + (12903, 1, 264, 60, 1380), + (12907, 1, 264, 30, 1381), + (12908, 1, 264, 60, 1381), + (12912, 1, 264, 30, 1382), + (12913, 1, 264, 60, 1382), + (12920, 1, 130, 10, 10), + (12920, 2, 139, 2569, 0), + (12920, 3, 130, -10, -10), + (12920, 4, 139, 2568, 0), + (12929, 1, 287, 4, 0), + (12929, 2, 137, 3, 0), + (12929, 3, 137, 99, 0), + (12929, 4, 138, 0, 0), + (12929, 5, 244, 20, 0), + (12930, 1, 287, 5, 0), + (12930, 2, 137, 3, 0), + (12930, 3, 137, 99, 0), + (12930, 4, 138, 0, 0), + (12930, 5, 244, 15, 0), + (12945, 1, 280, 60, 0), + (12946, 1, 280, 61, 0), + (12947, 1, 280, 62, 0), + (12948, 1, 280, 63, 0), + (12949, 1, 280, 64, 0), + (12950, 1, 218, 21, 0), + (12951, 1, 218, 22, 0), + (12952, 1, 218, 23, 0), + (12953, 1, 218, 24, 0), + (12954, 1, 218, 25, 0), + (12966, 1, 131, 25, 25), + (12966, 2, 348, 10, 0), + (12966, 3, 137, -32, 0), + (12967, 1, 131, 50, 50), + (12967, 2, 348, 10, 0), + (12967, 3, 137, -32, 0), + (12968, 1, 264, 3, 1041), + (12969, 1, 264, 6, 1041), + (12970, 1, 264, 9, 1041), + (12977, 1, 287, 2, 0), + (12977, 2, 385, 16188, 0), + (12978, 1, 287, 4, 0), + (12978, 2, 385, 16188, 0), + (12979, 1, 287, 6, 0), + (12979, 2, 385, 16188, 0), + (12980, 1, 287, 8, 0), + (12980, 2, 385, 16188, 0), + (12981, 1, 287, 10, 0), + (12981, 2, 385, 16188, 0), + (12988, 1, 287, 3, 0), + (12988, 2, 140, 3, 0), + (12988, 3, 348, 1, 0), + (12988, 4, 138, 0, 0), + (12988, 5, 137, 0, 0), + (13001, 1, 264, 60, 9504), + (13002, 1, 264, 120, 9504), + (13003, 1, 264, 180, 9504), + (13005, 1, 264, 70, 171), + (13006, 1, 264, 80, 171), + (13007, 1, 264, 90, 171), + (13010, 1, 264, 10, 47), + (13011, 1, 264, 20, 47), + (13012, 1, 264, 30, 47), + (13013, 1, 264, 120, 446), + (13014, 1, 264, 240, 446), + (13015, 1, 264, 360, 446), + (13017, 1, 375, 15, 0), + (13018, 1, 375, 25, 0), + (13019, 1, 375, 35, 0), + (13021, 1, 247, 80, 2), + (13021, 2, 247, 80, 3), + (13021, 3, 247, 80, 77), + (13021, 4, 220, 75, 77), + (13021, 5, 220, 75, 2), + (13021, 6, 220, 75, 3), + (13023, 1, 330, 115, 0), + (13023, 2, 330, 115, 1), + (13023, 3, 330, 115, 2), + (13023, 4, 330, 115, 3), + (13023, 5, 330, 115, 28), + (13023, 6, 330, 115, 36), + (13023, 7, 330, 115, 77), + (13026, 1, 266, 26, 0), + (13027, 1, 266, 27, 0), + (13028, 1, 266, 28, 0), + (13029, 1, 288, 250, 51), + (13029, 2, 288, 60, 51), + (13032, 1, 185, 70, 51), + (13033, 1, 185, 80, 51), + (13035, 1, 220, 768, 74), + (13040, 1, 216, 280, 74), + (13043, 1, 169, 35, -1), + (13046, 1, 1, 240, 0), + (13047, 1, 1, 280, 0), + (13048, 1, 1, 320, 0), + (13049, 1, 1, 360, 0), + (13050, 1, 1, 400, 0), + (13051, 1, 287, 2, 0), + (13051, 2, 139, 8003, 0), + (13052, 1, 310, 120000, 0), + (13052, 2, 385, 3107, 0), + (13052, 3, 385, 3207, 0), + (13052, 4, 385, 3307, 0), + (13052, 5, 385, 3407, 0), + (13052, 6, 385, 3507, 0), + (13052, 7, 385, 3607, 0), + (13055, 1, 264, 60, 8400), + (13067, 1, 264, 120, 643), + (13072, 1, 310, 120000, 0), + (13072, 2, 139, 6197, 0), + (13072, 3, 411, 512, 0), + (13073, 1, 310, 180000, 0), + (13073, 2, 139, 6197, 0), + (13073, 3, 411, 512, 0), + (13074, 1, 330, 140, 0), + (13074, 2, 330, 140, 1), + (13074, 3, 330, 140, 2), + (13074, 4, 330, 140, 3), + (13074, 5, 330, 140, 28), + (13074, 6, 330, 140, 36), + (13075, 1, 330, 145, 0), + (13075, 2, 330, 145, 1), + (13075, 3, 330, 145, 2), + (13075, 4, 330, 145, 3), + (13075, 5, 330, 145, 28), + (13075, 6, 330, 145, 36), + (13076, 1, 330, 150, 0), + (13076, 2, 330, 150, 1), + (13076, 3, 330, 150, 2), + (13076, 4, 330, 150, 3), + (13076, 5, 330, 150, 28), + (13076, 6, 330, 150, 36), + (13077, 1, 330, 140, 0), + (13077, 2, 330, 140, 1), + (13077, 3, 330, 140, 2), + (13077, 4, 330, 140, 3), + (13077, 5, 330, 140, 28), + (13077, 6, 330, 140, 36), + (13077, 7, 330, 140, 77), + (13078, 1, 330, 145, 0), + (13078, 2, 330, 145, 1), + (13078, 3, 330, 145, 2), + (13078, 4, 330, 145, 3), + (13078, 5, 330, 145, 28), + (13078, 6, 330, 145, 36), + (13078, 7, 330, 145, 77), + (13080, 1, 172, 55, 0), + (13081, 1, 172, 56, 0), + (13082, 1, 172, 57, 0), + (13083, 1, 172, 58, 0), + (13084, 1, 172, 59, 0), + (13085, 1, 259, 61, 0), + (13086, 1, 259, 62, 0), + (13087, 1, 259, 63, 0), + (13088, 1, 259, 64, 0), + (13089, 1, 259, 65, 0), + (13090, 1, 339, 10, 8105), + (13090, 2, 142, 65, 0), + (13090, 3, 311, 0, 0), + (13090, 4, 134, 70, 0), + (13090, 5, 348, 10, 0), + (13090, 6, 137, 0, 0), + (13090, 7, 339, 10, 8105), + (13090, 8, 142, 65, 0), + (13090, 9, 311, 0, 0), + (13090, 10, 134, 70, 0), + (13090, 11, 348, 10, 0), + (13090, 12, 137, 100, 0), + (13090, 13, 339, 10, 8105), + (13090, 14, 142, 65, 0), + (13090, 15, 311, 0, 0), + (13090, 16, 134, 70, 0), + (13090, 17, 348, 10, 0), + (13090, 18, 137, 79, 0), + (13090, 19, 339, 10, 8105), + (13090, 20, 142, 65, 0), + (13090, 21, 311, 0, 0), + (13090, 22, 134, 70, 0), + (13090, 23, 348, 10, 0), + (13090, 24, 137, 147, 0), + (13090, 25, 339, 10, 11404), + (13090, 26, 142, 71, 0), + (13090, 27, 311, 0, 0), + (13090, 28, 134, 75, 0), + (13090, 29, 348, 10, 0), + (13090, 30, 137, 0, 0), + (13090, 31, 339, 10, 11404), + (13090, 32, 142, 71, 0), + (13090, 33, 311, 0, 0), + (13090, 34, 134, 75, 0), + (13090, 35, 348, 10, 0), + (13090, 36, 137, 100, 0), + (13090, 37, 339, 10, 11404), + (13090, 38, 142, 71, 0), + (13090, 39, 311, 0, 0), + (13090, 40, 134, 75, 0), + (13090, 41, 348, 10, 0), + (13090, 42, 137, 79, 0), + (13090, 43, 339, 10, 11404), + (13090, 44, 142, 71, 0), + (13090, 45, 311, 0, 0), + (13090, 46, 134, 75, 0), + (13090, 47, 348, 10, 0), + (13090, 48, 137, 147, 0), + (13090, 49, 339, 10, 13199), + (13090, 50, 142, 76, 0), + (13090, 51, 311, 0, 0), + (13090, 52, 134, 80, 0), + (13090, 53, 348, 10, 0), + (13090, 54, 137, 0, 0), + (13090, 55, 339, 10, 13199), + (13090, 56, 142, 76, 0), + (13090, 57, 311, 0, 0), + (13090, 58, 134, 80, 0), + (13090, 59, 348, 10, 0), + (13090, 60, 137, 100, 0), + (13090, 61, 339, 10, 13199), + (13090, 62, 142, 76, 0), + (13090, 63, 311, 0, 0), + (13090, 64, 134, 80, 0), + (13090, 65, 348, 10, 0), + (13090, 66, 137, 79, 0), + (13090, 67, 339, 10, 13199), + (13090, 68, 142, 76, 0), + (13090, 69, 311, 0, 0), + (13090, 70, 134, 80, 0), + (13090, 71, 348, 10, 0), + (13090, 72, 137, 147, 0), + (13090, 73, 339, 10, 13830), + (13090, 74, 142, 81, 0), + (13090, 75, 311, 0, 0), + (13090, 76, 134, 85, 0), + (13090, 77, 348, 10, 0), + (13090, 78, 137, 0, 0), + (13090, 79, 339, 10, 13830), + (13090, 80, 142, 81, 0), + (13090, 81, 311, 0, 0), + (13090, 82, 134, 85, 0), + (13090, 83, 348, 10, 0), + (13090, 84, 137, 100, 0), + (13090, 85, 339, 10, 13830), + (13090, 86, 142, 81, 0), + (13090, 87, 311, 0, 0), + (13090, 88, 134, 85, 0), + (13090, 89, 348, 10, 0), + (13090, 90, 137, 79, 0), + (13090, 91, 339, 10, 13830), + (13090, 92, 142, 81, 0), + (13090, 93, 311, 0, 0), + (13090, 94, 134, 85, 0), + (13090, 95, 348, 10, 0), + (13090, 96, 137, 147, 0), + (13090, 97, 339, 10, 27527), + (13090, 98, 142, 86, 0), + (13090, 99, 311, 0, 0), + (13090, 100, 134, 90, 0), + (13090, 101, 348, 10, 0), + (13090, 102, 137, 0, 0), + (13090, 103, 339, 10, 27527), + (13090, 104, 142, 86, 0), + (13090, 105, 311, 0, 0), + (13090, 106, 134, 90, 0), + (13090, 107, 348, 10, 0), + (13090, 108, 137, 100, 0), + (13090, 109, 339, 10, 27527), + (13090, 110, 142, 86, 0), + (13090, 111, 311, 0, 0), + (13090, 112, 134, 90, 0), + (13090, 113, 348, 10, 0), + (13090, 114, 137, 79, 0), + (13090, 115, 339, 10, 27527), + (13090, 116, 142, 86, 0), + (13090, 117, 311, 0, 0), + (13090, 118, 134, 90, 0), + (13090, 119, 348, 10, 0), + (13090, 120, 137, 147, 0), + (13091, 1, 339, 10, 8105), + (13091, 2, 142, 65, 0), + (13091, 3, 311, 0, 0), + (13091, 4, 134, 70, 0), + (13091, 5, 348, 10, 0), + (13091, 6, 137, 0, 0), + (13091, 7, 339, 10, 8105), + (13091, 8, 142, 65, 0), + (13091, 9, 311, 0, 0), + (13091, 10, 134, 70, 0), + (13091, 11, 348, 10, 0), + (13091, 12, 137, 100, 0), + (13091, 13, 339, 10, 8105), + (13091, 14, 142, 65, 0), + (13091, 15, 311, 0, 0), + (13091, 16, 134, 70, 0), + (13091, 17, 348, 10, 0), + (13091, 18, 137, 79, 0), + (13091, 19, 339, 10, 8105), + (13091, 20, 142, 65, 0), + (13091, 21, 311, 0, 0), + (13091, 22, 134, 70, 0), + (13091, 23, 348, 10, 0), + (13091, 24, 137, 147, 0), + (13091, 25, 339, 10, 11404), + (13091, 26, 142, 71, 0), + (13091, 27, 311, 0, 0), + (13091, 28, 134, 75, 0), + (13091, 29, 348, 10, 0), + (13091, 30, 137, 0, 0), + (13091, 31, 339, 10, 11404), + (13091, 32, 142, 71, 0), + (13091, 33, 311, 0, 0), + (13091, 34, 134, 75, 0), + (13091, 35, 348, 10, 0), + (13091, 36, 137, 100, 0), + (13091, 37, 339, 10, 11404), + (13091, 38, 142, 71, 0), + (13091, 39, 311, 0, 0), + (13091, 40, 134, 75, 0), + (13091, 41, 348, 10, 0), + (13091, 42, 137, 79, 0), + (13091, 43, 339, 10, 11404), + (13091, 44, 142, 71, 0), + (13091, 45, 311, 0, 0), + (13091, 46, 134, 75, 0), + (13091, 47, 348, 10, 0), + (13091, 48, 137, 147, 0), + (13091, 49, 339, 10, 13199), + (13091, 50, 142, 76, 0), + (13091, 51, 311, 0, 0), + (13091, 52, 134, 80, 0), + (13091, 53, 348, 10, 0), + (13091, 54, 137, 0, 0), + (13091, 55, 339, 10, 13199), + (13091, 56, 142, 76, 0), + (13091, 57, 311, 0, 0), + (13091, 58, 134, 80, 0), + (13091, 59, 348, 10, 0), + (13091, 60, 137, 100, 0), + (13091, 61, 339, 10, 13199), + (13091, 62, 142, 76, 0), + (13091, 63, 311, 0, 0), + (13091, 64, 134, 80, 0), + (13091, 65, 348, 10, 0), + (13091, 66, 137, 79, 0), + (13091, 67, 339, 10, 13199), + (13091, 68, 142, 76, 0), + (13091, 69, 311, 0, 0), + (13091, 70, 134, 80, 0), + (13091, 71, 348, 10, 0), + (13091, 72, 137, 147, 0), + (13091, 73, 339, 10, 13830), + (13091, 74, 142, 81, 0), + (13091, 75, 311, 0, 0), + (13091, 76, 134, 85, 0), + (13091, 77, 348, 10, 0), + (13091, 78, 137, 0, 0), + (13091, 79, 339, 10, 13830), + (13091, 80, 142, 81, 0), + (13091, 81, 311, 0, 0), + (13091, 82, 134, 85, 0), + (13091, 83, 348, 10, 0), + (13091, 84, 137, 100, 0), + (13091, 85, 339, 10, 13830), + (13091, 86, 142, 81, 0), + (13091, 87, 311, 0, 0), + (13091, 88, 134, 85, 0), + (13091, 89, 348, 10, 0), + (13091, 90, 137, 79, 0), + (13091, 91, 339, 10, 13830), + (13091, 92, 142, 81, 0), + (13091, 93, 311, 0, 0), + (13091, 94, 134, 85, 0), + (13091, 95, 348, 10, 0), + (13091, 96, 137, 147, 0), + (13091, 97, 339, 10, 27527), + (13091, 98, 142, 86, 0), + (13091, 99, 311, 0, 0), + (13091, 100, 134, 90, 0), + (13091, 101, 348, 10, 0), + (13091, 102, 137, 0, 0), + (13091, 103, 339, 10, 27527), + (13091, 104, 142, 86, 0), + (13091, 105, 311, 0, 0), + (13091, 106, 134, 90, 0), + (13091, 107, 348, 10, 0), + (13091, 108, 137, 100, 0), + (13091, 109, 339, 10, 27527), + (13091, 110, 142, 86, 0), + (13091, 111, 311, 0, 0), + (13091, 112, 134, 90, 0), + (13091, 113, 348, 10, 0), + (13091, 114, 137, 79, 0), + (13091, 115, 339, 10, 27527), + (13091, 116, 142, 86, 0), + (13091, 117, 311, 0, 0), + (13091, 118, 134, 90, 0), + (13091, 119, 348, 10, 0), + (13091, 120, 137, 147, 0), + (13092, 1, 217, 0, 102280), + (13092, 2, 346, 84, 18), + (13093, 1, 217, 0, 109400), + (13093, 2, 346, 86, 18), + (13094, 1, 217, 0, 116800), + (13094, 2, 346, 88, 18), + (13095, 1, 439, 0, 140680), + (13095, 2, 345, 88, 25), + (13096, 1, 287, 1, 0), + (13096, 2, 140, 3, 0), + (13096, 3, 348, 1, 0), + (13096, 4, 138, 0, 0), + (13096, 5, 137, 0, 0), + (13097, 1, 287, 2, 0), + (13097, 2, 140, 3, 0), + (13097, 3, 348, 1, 0), + (13097, 4, 138, 0, 0), + (13097, 5, 137, 0, 0), + (13098, 1, 287, 3, 0), + (13098, 2, 140, 3, 0), + (13098, 3, 348, 1, 0), + (13098, 4, 138, 0, 0), + (13098, 5, 137, 0, 0), + (13099, 1, 132, 15, 15), + (13101, 1, 360, 25, 27537), + (13102, 1, 360, 25, 27538), + (13103, 1, 360, 25, 27539), + (13104, 1, 303, 14000, 18000), + (13104, 2, 139, 2766, 0), + (13105, 1, 303, 18000, 22500), + (13105, 2, 139, 2766, 0), + (13106, 1, 303, 22500, 27500), + (13106, 2, 139, 2766, 0), + (13110, 1, 185, 8, 1), + (13110, 2, 185, 8, 3), + (13111, 1, 185, 10, 1), + (13111, 2, 185, 10, 3), + (13113, 1, 185, 7, 36), + (13114, 1, 185, 9, 36), + (13116, 1, 185, 8, 0), + (13116, 2, 185, 8, 2), + (13117, 1, 185, 10, 0), + (13117, 2, 185, 10, 2), + (13122, 1, 2, 128, 0), + (13123, 1, 2, 132, 0), + (13124, 1, 2, 136, 0), + (13127, 1, 287, 4, 0), + (13127, 2, 140, 3, 0), + (13127, 3, 348, 1, 0), + (13127, 4, 138, 0, 0), + (13127, 5, 137, 0, 0), + (13130, 1, 264, 1440, 7003), + (13140, 1, 264, 480, 391), + (13141, 1, 264, 600, 391), + (13142, 1, 264, 720, 391), + (13143, 1, 127, 17, 0), + (13143, 2, 385, 8054, 0), + (13144, 1, 127, 34, 0), + (13144, 2, 385, 8054, 0), + (13145, 1, 127, 50, 0), + (13145, 2, 385, 8054, 0), + (13146, 1, 127, 17, 0), + (13146, 2, 385, 8054, 0), + (13147, 1, 127, 34, 0), + (13147, 2, 385, 8054, 0), + (13148, 1, 127, 50, 0), + (13148, 2, 385, 8054, 0), + (13149, 1, 97, 550, 0), + (13150, 1, 97, 600, 0), + (13151, 1, 97, 650, 0), + (13152, 1, 97, 700, 0), + (13153, 1, 97, 750, 0), + (13166, 1, 264, 5, 749), + (13166, 2, 264, 5, 822), + (13166, 3, 264, 5, 1274), + (13166, 4, 264, 5, 1275), + (13167, 1, 264, 10, 749), + (13167, 2, 264, 10, 822), + (13167, 3, 264, 10, 1274), + (13167, 4, 264, 10, 1275), + (13168, 1, 264, 15, 749), + (13168, 2, 264, 15, 822), + (13168, 3, 264, 15, 1274), + (13168, 4, 264, 15, 1275), + (13184, 1, 220, 315, 26), + (13185, 1, 220, 400, 26), + (13186, 1, 220, 500, 26), + (13187, 1, 405, 19, 0), + (13188, 1, 405, 21, 0), + (13189, 1, 405, 23, 0), + (13196, 1, 279, 31, 0), + (13197, 1, 279, 35, 0), + (13198, 1, 279, 39, 0), + (13199, 1, 378, 30, 31), + (13200, 1, 378, 35, 31), + (13201, 1, 378, 40, 31), + (13204, 1, 264, 180, 8261), + (13205, 1, 264, 360, 8261), + (13206, 1, 264, 540, 8261), + (13207, 1, 288, 100, 8), + (13208, 1, 288, 100, 8), + (13209, 1, 288, 100, 8), + (13210, 1, 325, 70, 0), + (13211, 1, 325, 75, 0), + (13212, 1, 325, 80, 0), + (13213, 1, 220, 285, 8), + (13214, 1, 220, 315, 8), + (13215, 1, 220, 350, 8), + (13216, 1, 220, 390, 8), + (13217, 1, 220, 440, 8), + (13218, 1, 216, 750, 8), + (13219, 1, 114, -12, 0), + (13220, 1, 114, -15, 0), + (13221, 1, 114, -18, 0), + (13222, 1, 310, 240000, 0), + (13222, 2, 139, 6197, 0), + (13222, 3, 411, 512, 0), + (13223, 1, 310, 300000, 0), + (13223, 2, 139, 6197, 0), + (13223, 3, 411, 512, 0), + (13226, 1, 360, 60, 27593), + (13238, 1, 320, 9, 0), + (13239, 1, 320, 10, 0), + (13240, 1, 320, 11, 0), + (13262, 1, 264, 1008, 102), + (13263, 1, 264, 1152, 102), + (13264, 1, 264, 1290, 102), + (13278, 1, 213, 25, 0), + (13281, 1, 318, 31, 0), + (13286, 1, 278, 900, 102200), + (13286, 2, 440, 92, 100), + (13294, 1, 339, 10, 8105), + (13294, 2, 142, 65, 0), + (13294, 3, 311, 0, 0), + (13294, 4, 134, 70, 0), + (13294, 5, 348, 10, 0), + (13294, 6, 137, 0, 0), + (13294, 7, 339, 10, 8105), + (13294, 8, 142, 65, 0), + (13294, 9, 311, 0, 0), + (13294, 10, 134, 70, 0), + (13294, 11, 348, 10, 0), + (13294, 12, 137, 100, 0), + (13294, 13, 339, 10, 8105), + (13294, 14, 142, 65, 0), + (13294, 15, 311, 0, 0), + (13294, 16, 134, 70, 0), + (13294, 17, 348, 10, 0), + (13294, 18, 137, 79, 0), + (13294, 19, 339, 10, 8105), + (13294, 20, 142, 65, 0), + (13294, 21, 311, 0, 0), + (13294, 22, 134, 70, 0), + (13294, 23, 348, 10, 0), + (13294, 24, 137, 147, 0), + (13294, 25, 339, 10, 11404), + (13294, 26, 142, 71, 0), + (13294, 27, 311, 0, 0), + (13294, 28, 134, 75, 0), + (13294, 29, 348, 10, 0), + (13294, 30, 137, 0, 0), + (13294, 31, 339, 10, 11404), + (13294, 32, 142, 71, 0), + (13294, 33, 311, 0, 0), + (13294, 34, 134, 75, 0), + (13294, 35, 348, 10, 0), + (13294, 36, 137, 100, 0), + (13294, 37, 339, 10, 11404), + (13294, 38, 142, 71, 0), + (13294, 39, 311, 0, 0), + (13294, 40, 134, 75, 0), + (13294, 41, 348, 10, 0), + (13294, 42, 137, 79, 0), + (13294, 43, 339, 10, 11404), + (13294, 44, 142, 71, 0), + (13294, 45, 311, 0, 0), + (13294, 46, 134, 75, 0), + (13294, 47, 348, 10, 0), + (13294, 48, 137, 147, 0), + (13294, 49, 339, 10, 13199), + (13294, 50, 142, 76, 0), + (13294, 51, 311, 0, 0), + (13294, 52, 134, 80, 0), + (13294, 53, 348, 10, 0), + (13294, 54, 137, 0, 0), + (13294, 55, 339, 10, 13199), + (13294, 56, 142, 76, 0), + (13294, 57, 311, 0, 0), + (13294, 58, 134, 80, 0), + (13294, 59, 348, 10, 0), + (13294, 60, 137, 100, 0), + (13294, 61, 339, 10, 13199), + (13294, 62, 142, 76, 0), + (13294, 63, 311, 0, 0), + (13294, 64, 134, 80, 0), + (13294, 65, 348, 10, 0), + (13294, 66, 137, 79, 0), + (13294, 67, 339, 10, 13199), + (13294, 68, 142, 76, 0), + (13294, 69, 311, 0, 0), + (13294, 70, 134, 80, 0), + (13294, 71, 348, 10, 0), + (13294, 72, 137, 147, 0), + (13294, 73, 339, 10, 13830), + (13294, 74, 142, 81, 0), + (13294, 75, 311, 0, 0), + (13294, 76, 134, 85, 0), + (13294, 77, 348, 10, 0), + (13294, 78, 137, 0, 0), + (13294, 79, 339, 10, 13830), + (13294, 80, 142, 81, 0), + (13294, 81, 311, 0, 0), + (13294, 82, 134, 85, 0), + (13294, 83, 348, 10, 0), + (13294, 84, 137, 100, 0), + (13294, 85, 339, 10, 13830), + (13294, 86, 142, 81, 0), + (13294, 87, 311, 0, 0), + (13294, 88, 134, 85, 0), + (13294, 89, 348, 10, 0), + (13294, 90, 137, 79, 0), + (13294, 91, 339, 10, 13830), + (13294, 92, 142, 81, 0), + (13294, 93, 311, 0, 0), + (13294, 94, 134, 85, 0), + (13294, 95, 348, 10, 0), + (13294, 96, 137, 147, 0), + (13294, 97, 339, 10, 27527), + (13294, 98, 142, 86, 0), + (13294, 99, 311, 0, 0), + (13294, 100, 134, 90, 0), + (13294, 101, 348, 10, 0), + (13294, 102, 137, 0, 0), + (13294, 103, 339, 10, 27527), + (13294, 104, 142, 86, 0), + (13294, 105, 311, 0, 0), + (13294, 106, 134, 90, 0), + (13294, 107, 348, 10, 0), + (13294, 108, 137, 100, 0), + (13294, 109, 339, 10, 27527), + (13294, 110, 142, 86, 0), + (13294, 111, 311, 0, 0), + (13294, 112, 134, 90, 0), + (13294, 113, 348, 10, 0), + (13294, 114, 137, 79, 0), + (13294, 115, 339, 10, 27527), + (13294, 116, 142, 86, 0), + (13294, 117, 311, 0, 0), + (13294, 118, 134, 90, 0), + (13294, 119, 348, 10, 0), + (13294, 120, 137, 147, 0), + (13294, 121, 339, 10, 30644), + (13294, 122, 142, 91, 0), + (13294, 123, 311, 0, 0), + (13294, 124, 134, 95, 0), + (13294, 125, 348, 10, 0), + (13294, 126, 137, 0, 0), + (13294, 127, 339, 10, 30644), + (13294, 128, 142, 91, 0), + (13294, 129, 311, 0, 0), + (13294, 130, 134, 95, 0), + (13294, 131, 348, 10, 0), + (13294, 132, 137, 100, 0), + (13294, 133, 339, 10, 30644), + (13294, 134, 142, 91, 0), + (13294, 135, 311, 0, 0), + (13294, 136, 134, 95, 0), + (13294, 137, 348, 10, 0), + (13294, 138, 137, 79, 0), + (13294, 139, 339, 10, 30644), + (13294, 140, 142, 91, 0), + (13294, 141, 311, 0, 0), + (13294, 142, 134, 95, 0), + (13294, 143, 348, 10, 0), + (13294, 144, 137, 147, 0), + (13295, 1, 339, 10, 8105), + (13295, 2, 142, 65, 0), + (13295, 3, 311, 0, 0), + (13295, 4, 134, 70, 0), + (13295, 5, 348, 10, 0), + (13295, 6, 137, 0, 0), + (13295, 7, 339, 10, 8105), + (13295, 8, 142, 65, 0), + (13295, 9, 311, 0, 0), + (13295, 10, 134, 70, 0), + (13295, 11, 348, 10, 0), + (13295, 12, 137, 100, 0), + (13295, 13, 339, 10, 8105), + (13295, 14, 142, 65, 0), + (13295, 15, 311, 0, 0), + (13295, 16, 134, 70, 0), + (13295, 17, 348, 10, 0), + (13295, 18, 137, 79, 0), + (13295, 19, 339, 10, 8105), + (13295, 20, 142, 65, 0), + (13295, 21, 311, 0, 0), + (13295, 22, 134, 70, 0), + (13295, 23, 348, 10, 0), + (13295, 24, 137, 147, 0), + (13295, 25, 339, 10, 11404), + (13295, 26, 142, 71, 0), + (13295, 27, 311, 0, 0), + (13295, 28, 134, 75, 0), + (13295, 29, 348, 10, 0), + (13295, 30, 137, 0, 0), + (13295, 31, 339, 10, 11404), + (13295, 32, 142, 71, 0), + (13295, 33, 311, 0, 0), + (13295, 34, 134, 75, 0), + (13295, 35, 348, 10, 0), + (13295, 36, 137, 100, 0), + (13295, 37, 339, 10, 11404), + (13295, 38, 142, 71, 0), + (13295, 39, 311, 0, 0), + (13295, 40, 134, 75, 0), + (13295, 41, 348, 10, 0), + (13295, 42, 137, 79, 0), + (13295, 43, 339, 10, 11404), + (13295, 44, 142, 71, 0), + (13295, 45, 311, 0, 0), + (13295, 46, 134, 75, 0), + (13295, 47, 348, 10, 0), + (13295, 48, 137, 147, 0), + (13295, 49, 339, 10, 13199), + (13295, 50, 142, 76, 0), + (13295, 51, 311, 0, 0), + (13295, 52, 134, 80, 0), + (13295, 53, 348, 10, 0), + (13295, 54, 137, 0, 0), + (13295, 55, 339, 10, 13199), + (13295, 56, 142, 76, 0), + (13295, 57, 311, 0, 0), + (13295, 58, 134, 80, 0), + (13295, 59, 348, 10, 0), + (13295, 60, 137, 100, 0), + (13295, 61, 339, 10, 13199), + (13295, 62, 142, 76, 0), + (13295, 63, 311, 0, 0), + (13295, 64, 134, 80, 0), + (13295, 65, 348, 10, 0), + (13295, 66, 137, 79, 0), + (13295, 67, 339, 10, 13199), + (13295, 68, 142, 76, 0), + (13295, 69, 311, 0, 0), + (13295, 70, 134, 80, 0), + (13295, 71, 348, 10, 0), + (13295, 72, 137, 147, 0), + (13295, 73, 339, 10, 13830), + (13295, 74, 142, 81, 0), + (13295, 75, 311, 0, 0), + (13295, 76, 134, 85, 0), + (13295, 77, 348, 10, 0), + (13295, 78, 137, 0, 0), + (13295, 79, 339, 10, 13830), + (13295, 80, 142, 81, 0), + (13295, 81, 311, 0, 0), + (13295, 82, 134, 85, 0), + (13295, 83, 348, 10, 0), + (13295, 84, 137, 100, 0), + (13295, 85, 339, 10, 13830), + (13295, 86, 142, 81, 0), + (13295, 87, 311, 0, 0), + (13295, 88, 134, 85, 0), + (13295, 89, 348, 10, 0), + (13295, 90, 137, 79, 0), + (13295, 91, 339, 10, 13830), + (13295, 92, 142, 81, 0), + (13295, 93, 311, 0, 0), + (13295, 94, 134, 85, 0), + (13295, 95, 348, 10, 0), + (13295, 96, 137, 147, 0), + (13295, 97, 339, 10, 27527), + (13295, 98, 142, 86, 0), + (13295, 99, 311, 0, 0), + (13295, 100, 134, 90, 0), + (13295, 101, 348, 10, 0), + (13295, 102, 137, 0, 0), + (13295, 103, 339, 10, 27527), + (13295, 104, 142, 86, 0), + (13295, 105, 311, 0, 0), + (13295, 106, 134, 90, 0), + (13295, 107, 348, 10, 0), + (13295, 108, 137, 100, 0), + (13295, 109, 339, 10, 27527), + (13295, 110, 142, 86, 0), + (13295, 111, 311, 0, 0), + (13295, 112, 134, 90, 0), + (13295, 113, 348, 10, 0), + (13295, 114, 137, 79, 0), + (13295, 115, 339, 10, 27527), + (13295, 116, 142, 86, 0), + (13295, 117, 311, 0, 0), + (13295, 118, 134, 90, 0), + (13295, 119, 348, 10, 0), + (13295, 120, 137, 147, 0), + (13295, 121, 339, 10, 30644), + (13295, 122, 142, 91, 0), + (13295, 123, 311, 0, 0), + (13295, 124, 134, 95, 0), + (13295, 125, 348, 10, 0), + (13295, 126, 137, 0, 0), + (13295, 127, 339, 10, 30644), + (13295, 128, 142, 91, 0), + (13295, 129, 311, 0, 0), + (13295, 130, 134, 95, 0), + (13295, 131, 348, 10, 0), + (13295, 132, 137, 100, 0), + (13295, 133, 339, 10, 30644), + (13295, 134, 142, 91, 0), + (13295, 135, 311, 0, 0), + (13295, 136, 134, 95, 0), + (13295, 137, 348, 10, 0), + (13295, 138, 137, 79, 0), + (13295, 139, 339, 10, 30644), + (13295, 140, 142, 91, 0), + (13295, 141, 311, 0, 0), + (13295, 142, 134, 95, 0), + (13295, 143, 348, 10, 0), + (13295, 144, 137, 147, 0), + (13296, 1, 125, 49, 49), + (13296, 2, 137, 0, 0), + (13296, 3, 141, 1, 0), + (13296, 4, 139, -6233, 0), + (13296, 5, 139, -6265, 0), + (13296, 6, 125, 49, 49), + (13296, 7, 137, 147, 0), + (13296, 8, 141, 1, 0), + (13297, 1, 125, 52, 52), + (13297, 2, 137, 0, 0), + (13297, 3, 141, 1, 0), + (13297, 4, 139, -6233, 0), + (13297, 5, 139, -6265, 0), + (13297, 6, 125, 52, 52), + (13297, 7, 137, 147, 0), + (13297, 8, 141, 1, 0), + (13299, 1, 319, 31, 0), + (13302, 1, 274, 44, 0), + (13305, 1, 189, 19, 0), + (13308, 1, 265, 87, 0), + (13313, 1, 15, 29, 0), + (13318, 1, 97, 850, 0), + (13323, 1, 320, 15, 0), + (13326, 1, 330, 155, 0), + (13326, 2, 330, 155, 1), + (13326, 3, 330, 155, 2), + (13326, 4, 330, 155, 3), + (13326, 5, 330, 155, 28), + (13326, 6, 330, 155, 36), + (13332, 1, 330, 155, 0), + (13332, 2, 330, 155, 1), + (13332, 3, 330, 155, 2), + (13332, 4, 330, 155, 3), + (13332, 5, 330, 155, 28), + (13332, 6, 330, 155, 36), + (13332, 7, 330, 155, 77), + (13338, 1, 1, 370, 0), + (13343, 1, 1, 340, 0), + (13348, 1, 1, 440, 0), + (13353, 1, 1, 330, 0), + (13358, 1, 1, 540, 0), + (13396, 1, 375, 40, 0), + (13404, 1, 273, 8, 0), + (13411, 1, 399, 4, 0), + (13411, 2, 138, 1, 0), + (13411, 3, 137, 0, 0), + (13411, 4, 348, 10, 0), + (13411, 5, 311, 0, 0), + (13411, 6, 141, 1, 0), + (13411, 7, 134, 254, 0), + (13411, 8, 137, -39, 0), + (13413, 1, 399, 12, 0), + (13413, 2, 141, 1, 0), + (13413, 3, 138, 0, 0), + (13413, 4, 142, 255, 0), + (13413, 5, 391, 0, 0), + (13413, 6, 311, 0, 0), + (13413, 7, 137, -152, 0), + (13413, 8, 411, 100350, 0), + (13413, 9, 137, -39, 0), + (13415, 1, 264, 150, 705), + (13415, 2, 264, 150, 1092), + (13415, 3, 264, 150, 10396), + (13415, 4, 264, 150, 10397), + (13416, 1, 264, 20, 626), + (13438, 1, 266, 29, 0), + (13449, 1, 264, 2, 11073), + (13463, 1, 264, 90, 458), + (13474, 1, 264, 120, 444), + (13477, 1, 126, 20, 0), + (13477, 2, 134, 95, 0), + (13477, 3, 135, 4, 0), + (13477, 4, 135, 5, 0), + (13485, 1, 279, 3, 0), + (13502, 1, 375, 160, 0), + (13508, 1, 378, 5, 3), + (13511, 1, 279, 43, 0), + (13520, 1, 292, 70, 0), + (13521, 1, 293, 25, 0), + (13533, 1, 378, 55, 96), + (13545, 1, 323, 30787, 0), + (13562, 1, 264, 480, 872), + (13565, 1, 264, 60, 3804), + (13568, 1, 264, 60, 876), + (13578, 1, 244, 30, 0), + (13589, 1, 279, 34, 0), + (13590, 1, 279, 38, 0), + (13598, 1, 339, 20, 30809), + (13598, 2, 137, 21, 0), + (13598, 3, 385, -18000, 0), + (13598, 4, 339, 20, 30809), + (13598, 5, 137, 343, 0), + (13598, 6, 385, -18000, 0), + (13601, 1, 231, 22, 0), + (13607, 1, 126, 4, 4), + (13607, 2, 137, 21, 0), + (13607, 3, 231, 4, 4), + (13610, 1, 266, 47, 0), + (13613, 1, 220, 260, 10), + (13616, 1, 220, 150, 2), + (13616, 2, 220, 150, 3), + (13616, 3, 220, 150, 77), + (13617, 1, 220, 375, 2), + (13617, 2, 220, 375, 3), + (13617, 3, 220, 375, 77), + (13618, 1, 220, 500, 2), + (13618, 2, 220, 500, 3), + (13618, 3, 220, 500, 77), + (13621, 1, 218, 11, 0), + (13627, 1, 59, -59, 0), + (13628, 1, 59, -64, 0), + (13630, 1, 398, 10000, 0), + (13630, 2, 137, 152, 0), + (13667, 1, 287, 1, 0), + (13667, 2, 385, 8054, 0), + (13675, 1, 218, 24, 0), + (13684, 1, 399, 2, 0), + (13684, 2, 140, 2, 0), + (13684, 3, 348, 10, 0), + (13684, 4, 138, 0, 0), + (13684, 5, 137, -152, 0), + (13684, 6, 137, -39, 0), + (13685, 1, 399, 3, 0), + (13685, 2, 140, 2, 0), + (13685, 3, 348, 10, 0), + (13685, 4, 138, 0, 0), + (13685, 5, 137, -152, 0), + (13685, 6, 137, -39, 0), + (13686, 1, 399, 4, 0), + (13686, 2, 140, 2, 0), + (13686, 3, 348, 10, 0), + (13686, 4, 138, 0, 0), + (13686, 5, 137, -152, 0), + (13686, 6, 137, -39, 0), + (13689, 1, 127, 10, 0), + (13689, 2, 139, 27592, 0), + (13689, 3, 139, 31548, 0), + (13707, 1, 274, 26, 0), + (13710, 1, 280, 65, 0), + (13713, 1, 218, 26, 0), + (13753, 1, 264, 360, 534), + (13758, 1, 264, 360, 602), + (13763, 1, 287, 4, 0), + (13763, 2, 137, 31, 0), + (13763, 3, 136, 5, 0), + (13764, 1, 264, 60, 535), + (13767, 1, 439, 0, 153514), + (13767, 2, 345, 90, 22), + (13773, 1, 279, 21, 0), + (13774, 1, 279, 23, 0), + (13775, 1, 279, 25, 0), + (13779, 1, 288, 100, 8), + (13782, 1, 220, 490, 8), + (13789, 1, 216, 850, 8), + (13790, 1, 216, 950, 8), + (13795, 1, 258, 73, 0), + (13798, 1, 114, -21, 0), + (13804, 1, 378, 4, 3), + (13813, 1, 220, 150, 28), + (13813, 2, 220, 150, 0), + (13813, 3, 427, 23598, 9), + (13813, 4, 428, 28, 0), + (13813, 5, 428, 0, 0), + (13820, 1, 220, 325, 26), + (13820, 2, 220, 325, 30), + (13820, 3, 220, 325, 38), + (13823, 1, 220, 295, 21), + (13823, 2, 220, 295, 23), + (13823, 3, 220, 670, 52), + (13823, 4, 220, 295, 28), + (13826, 1, 405, 25, 0), + (13829, 1, 220, 550, 26), + (13835, 1, 283, 300, 0), + (13841, 1, 264, 17, 469), + (13873, 1, 264, 30, 961), + (13878, 1, 264, 60, 609), + (13881, 1, 264, 60, 387), + (13884, 1, 265, 87, 0), + (13889, 1, 264, 60, 1012), + (13894, 1, 327, 13, 0), + (13905, 1, 310, 24000, 0), + (13905, 2, 385, 15319, 0), + (13908, 1, 310, 3000, 0), + (13908, 2, 385, 15307, 0), + (13908, 3, 385, 15407, 0), + (13908, 4, 385, 15507, 0), + (13908, 5, 385, 15607, 0), + (13911, 1, 310, 3000, 0), + (13911, 2, 385, 16005, 0), + (13911, 3, 310, 3000, 0), + (13911, 4, 385, 15405, 0), + (13911, 5, 385, 15505, 0), + (13911, 6, 385, 15605, 0), + (13911, 7, 411, 2, 0), + (13917, 1, 264, 120, 606), + (13921, 1, 114, -66, 0), + (13924, 1, 114, -64, 0), + (13927, 1, 114, -25, 0), + (13930, 1, 341, 310, 0), + (13933, 1, 262, 80, 0), + (13943, 1, 262, 80, 1), + (13953, 1, 262, 80, 2), + (13963, 1, 262, 80, 3), + (13973, 1, 262, 80, 4), + (13983, 1, 262, 80, 5), + (13993, 1, 262, 80, 6), + (14011, 1, 264, 30, 10394), + (14017, 1, 69, 10, 0), + (14018, 1, 69, 10, 0), + (14026, 1, 185, 3, 2), + (14026, 2, 185, 3, 3), + (14026, 3, 185, 3, 77), + (14026, 4, 220, 50, 2), + (14026, 5, 220, 50, 3), + (14026, 6, 220, 50, 77), + (14029, 1, 395, 5, 5), + (14029, 2, 385, 9758, 0), + (14029, 3, 385, 9858, 0), + (14029, 4, 385, 9958, 0), + (14032, 1, 181, 100, 0), + (14037, 1, 264, 180, 804), + (14040, 1, 264, 180, 300), + (14043, 1, 85, 32197, 0), + (14046, 1, 264, 90, 87), + (14056, 1, 310, 360000, 0), + (14056, 2, 139, 4504, 0), + (14059, 1, 310, -180000, 0), + (14059, 2, 139, 4520, 0), + (14062, 1, 264, 60, 821), + (14065, 1, 264, 60, 3215), + (14068, 1, 264, 60, 3216), + (14076, 1, 310, 480000, 0), + (14076, 2, 139, 4518, 0), + (14082, 1, 360, 26, 32314), + (14085, 1, 264, 2, 741), + (14088, 1, 264, 30, 769), + (14091, 1, 264, 120, 701), + (14094, 1, 124, 325, 350), + (14094, 2, 385, 19, 0), + (14094, 3, 144, 0, 0), + (14094, 4, 403, 3, 0), + (14094, 5, 404, 48, 0), + (14094, 6, 385, -21768, 0), + (14097, 1, 85, 32317, 5), + (14100, 1, 127, 50, 0), + (14100, 2, 137, 21, 0), + (14100, 3, 143, 1, 0), + (14100, 4, 134, 253, 0), + (14100, 5, 348, 1, 0), + (14101, 1, 310, 2520000, 0), + (14101, 2, 139, 4506, 0), + (14101, 3, 310, 2520000, 0), + (14101, 4, 385, 11122, 0), + (14101, 5, 385, 11222, 0), + (14101, 6, 385, 11322, 0), + (14101, 7, 385, 11522, 0), + (14115, 1, 287, 1, 0), + (14115, 2, 385, 16130, 0), + (14129, 1, 220, 60, 36), + (14129, 2, 427, 32327, 3), + (14129, 3, 428, 36, 0), + (14130, 1, 220, 90, 36), + (14130, 2, 427, 32327, 5), + (14130, 3, 428, 36, 0), + (14132, 1, 264, 240, 2234), + (14135, 1, 310, 132000, 0), + (14135, 2, 385, 13005, 0), + (14135, 3, 385, 12423, 0), + (14135, 4, 385, 12504, 0), + (14135, 5, 310, 132000, 0), + (14135, 6, 139, 4676, 0), + (14135, 7, 411, 512, 0), + (14138, 1, 310, 480000, 0), + (14138, 2, 139, 4695, 0), + (14138, 3, 411, 512, 0), + (14140, 1, 310, 24000, 0), + (14140, 2, 385, 13007, 0), + (14140, 3, 385, 12105, 0), + (14140, 4, 385, 12205, 0), + (14140, 5, 310, 72000, 0), + (14140, 6, 385, 12305, 0), + (14140, 7, 385, 12405, 0), + (14140, 8, 385, 12505, 0), + (14140, 9, 411, 512, 0), + (14141, 1, 185, 2, 36), + (14144, 1, 287, 1, 0), + (14144, 2, 385, 13204, 0), + (14144, 3, 411, 512, 0), + (14148, 1, 310, 90000, 0), + (14148, 2, 139, 4691, 0), + (14151, 1, 185, 2, 26), + (14151, 2, 220, 100, 26), + (14154, 1, 264, 2100, 276), + (14157, 1, 216, 150, 26), + (14160, 1, 264, 60, 7001), + (14163, 1, 287, 1, 0), + (14163, 2, 385, 16178, 0), + (14163, 3, 411, 128, 0), + (14166, 1, 264, 60, 945), + (14169, 1, 310, 202500, 0), + (14169, 2, 139, 8030, 0), + (14169, 3, 411, 256, 0), + (14173, 1, 310, 1440000, 0), + (14173, 2, 139, 4516, 0), + (14173, 3, 411, 256, 0), + (14176, 1, 264, 660, 8261), + (14179, 1, 287, 1, 0), + (14179, 2, 385, 5830, 0), + (14179, 3, 411, 256, 0), + (14180, 1, 287, 1, 0), + (14180, 2, 139, 8030, 0), + (14180, 3, 411, 256, 0), + (14181, 1, 247, 25, 20), + (14186, 1, 247, 25, 76), + (14196, 1, 264, 2340, 465), + (14199, 1, 264, 720, 499), + (14200, 1, 288, 15, 2), + (14200, 2, 288, 15, 3), + (14200, 3, 288, 15, 51), + (14200, 4, 288, 15, 77), + (14203, 1, 310, 150000, 0), + (14203, 2, 385, 3419, 0), + (14203, 3, 385, 14005, 0), + (14203, 4, 385, 3519, 0), + (14203, 5, 411, 65536, 0), + (14210, 1, 310, 40000, 0), + (14210, 2, 139, 1546, 0), + (14210, 3, 310, 40000, 0), + (14210, 4, 385, 4357, 0), + (14210, 5, 385, 4457, 0), + (14210, 6, 385, 4557, 0), + (14210, 7, 385, 4657, 0), + (14210, 8, 411, 4, 0), + (14213, 1, 264, 120, 1065), + (14218, 1, 232, 23, 4544), + (14223, 1, 264, 40, 47), + (14225, 1, 127, 16, 0), + (14225, 2, 385, 3283, 0), + (14225, 3, 411, 1024, 0), + (14238, 1, 264, 12, 1041), + (14241, 1, 264, 180, 386), + (14244, 1, 286, 100, 0), + (14244, 2, 138, 0, 0), + (14244, 3, 143, 1, 0), + (14244, 4, 348, 1, 0), + (14244, 5, 411, 64, 0), + (14249, 1, 392, 200, 0), + (14249, 2, 138, 1, 0), + (14249, 3, 348, 1, 0), + (14254, 1, 287, 1, 0), + (14254, 2, 385, 2025, 0), + (14254, 3, 385, 5121, 0), + (14254, 4, 385, 5221, 0), + (14254, 5, 385, 5562, 0), + (14259, 1, 287, 1, 0), + (14259, 2, 139, 23585, 0), + (14275, 1, 239, 20, 0), + (14278, 1, 287, 4, 0), + (14278, 2, 385, 16439, 0), + (14278, 3, 411, 32768, 0), + (14279, 1, 320, 8, 0), + (14283, 1, 127, 17, 0), + (14283, 2, 385, 3151, 0), + (14283, 3, 385, 5887, 0), + (14286, 1, 287, 1, 0), + (14286, 2, 385, 4877, 0), + (14289, 1, 127, 10, 0), + (14289, 2, 385, 2754, 0), + (14292, 1, 127, 10, 0), + (14292, 2, 385, 3286, 0), + (14295, 1, 264, 1, 3816), + (14301, 1, 405, 5, 0), + (14304, 1, 264, 45, 8341), + (14308, 1, 264, 20, 431), + (14311, 1, 264, 360, 430), + (14314, 1, 264, 8, 901), + (14318, 1, 127, 10, 0), + (14318, 2, 139, 21754, 0), + (14328, 1, 264, 6, 1154), + (14331, 1, 264, 120, 515), + (14341, 1, 264, 360, 748), + (14349, 1, 294, 0, 205), + (14361, 1, 294, 35, 109), + (14364, 1, 264, 90, 173), + (14367, 1, 445, 1, 0), + (14764, 1, 339, 10, 33950), + (14764, 2, 137, 31, 0), + (15074, 1, 264, 5, 15073), + (15100, 1, 264, 2, 467), + (15105, 1, 264, 120, 131), + (15108, 1, 310, 60000, 0), + (15108, 2, 385, 15521, 0), + (15108, 3, 411, 2, 0), + (15111, 1, 287, 1, 0), + (15111, 2, 385, 21778, 0), + (15113, 1, 287, 3, 0), + (15113, 2, 385, 21778, 0), + (15113, 3, 411, 2, 0), + (15120, 1, 264, 60, 800), + (15123, 1, 310, 120000, 0), + (15123, 2, 385, 15422, 0), + (15123, 3, 411, 2, 0), + (15126, 1, 310, 1000, 0), + (15126, 2, 385, 15212, 0), + (15126, 3, 411, 2, 0), + (15132, 1, 264, 10, 660), + (15135, 1, 287, 1, 0), + (15135, 2, 139, 32313, 0), + (15141, 1, 219, 420, 2400), + (15150, 1, 127, 10, 0), + (15150, 2, 385, 10505, 0), + (15150, 3, 385, 10105, 0), + (15150, 4, 385, 10205, 0), + (15150, 5, 385, 10305, 0), + (15150, 6, 385, 10405, 0), + (15150, 7, 385, 10605, 0), + (15153, 1, 287, 1, 0), + (15153, 2, 139, 4518, 0), + (15154, 1, 287, 1, 0), + (15154, 2, 139, 32312, 0), + (15155, 1, 287, 1, 0), + (15155, 2, 385, 10320, 0), + (15155, 3, 385, 10420, 0), + (15155, 4, 385, 10520, 0), + (15158, 1, 287, 1, 0), + (15158, 2, 385, 32307, 0), + (15159, 1, 287, 1, 0), + (15159, 2, 385, 27537, 0), + (15162, 1, 264, 120, 659), + (15168, 1, 264, 60, 657), + (15172, 1, 302, 430, 430), + (15172, 2, 385, 99, 0), + (15174, 1, 264, 40, 9400), + (15179, 1, 127, 10, 0), + (15179, 2, 139, 21804, 0), + (15179, 3, 139, 38280, 0), + (15182, 1, 264, 840, 9403), + (15188, 1, 239, 62, 0), + (15194, 1, 287, 1, 0), + (15194, 2, 385, 13407, 0), + (15194, 3, 385, 13507, 0), + (15204, 1, 264, 60, 390), + (15207, 1, 264, 60, 323), + (15217, 1, 339, 10, 38319), + (15217, 2, 385, 11006, 0), + (15217, 3, 385, 7108, 0), + (15217, 4, 385, 7208, 0), + (15217, 5, 385, 7308, 0), + (15217, 6, 385, 7408, 0), + (15217, 7, 385, 7508, 0), + (15217, 8, 385, 7608, 0), + (15220, 1, 287, 1, 0), + (15220, 2, 385, 11065, 0), + (15223, 1, 287, 1, 0), + (15223, 2, 385, 11067, 0), + (15226, 1, 287, 1, 0), + (15226, 2, 385, 11064, 0), + (15229, 1, 287, 1, 0), + (15229, 2, 385, 11066, 0), + (15232, 1, 339, 100, 38322), + (15232, 2, 385, 7518, 0), + (15238, 1, 264, 240, 621), + (15238, 2, 264, 240, 622), + (15238, 3, 264, 240, 623), + (15238, 4, 264, 240, 784), + (15238, 5, 264, 240, 785), + (15238, 6, 264, 240, 786), + (15238, 7, 264, 240, 787), + (15238, 8, 264, 240, 624), + (15253, 1, 127, 10, 0), + (15253, 2, 385, 32322, 0), + (15258, 1, 264, 540, 184), + (15270, 1, 264, 1980, 7003), + (15280, 1, 264, 720, 778), + (15283, 1, 310, 1000, 0), + (15283, 2, 385, 11402, 0), + (15283, 3, 385, 11502, 0), + (15283, 4, 385, 11441, 0), + (15283, 5, 385, 11541, 0), + (15283, 6, 385, 11641, 0), + (15288, 1, 220, 50, 0), + (15288, 2, 220, 50, 1), + (15288, 3, 220, 100, 2), + (15288, 4, 220, 100, 3), + (15288, 5, 220, 50, 36), + (15288, 6, 220, 100, 77), + (15295, 1, 127, 10, 0), + (15295, 2, 385, 21654, 0), + (15314, 1, 264, 25920, 36), + (15317, 1, 264, 1728, 35), + (15320, 1, 264, 150, 558), + (15328, 1, 339, 25, 38037), + (15328, 2, 138, 1, 0), + (15328, 3, 142, 65, 0), + (15328, 4, 137, 35, 0), + (15328, 5, 134, 90, 0), + (15328, 6, 339, 25, 38037), + (15328, 7, 138, 1, 0), + (15328, 8, 142, 65, 0), + (15328, 9, 137, 36, 0), + (15328, 10, 134, 90, 0), + (15328, 11, 339, 25, 38037), + (15328, 12, 138, 1, 0), + (15328, 13, 142, 65, 0), + (15328, 14, 137, 369, 0), + (15328, 15, 134, 90, 0), + (15328, 16, 339, 25, 38037), + (15328, 17, 138, 1, 0), + (15328, 18, 142, 65, 0), + (15328, 19, 137, 116, 0), + (15328, 20, 134, 90, 0), + (15342, 1, 287, 1, 0), + (15342, 2, 385, 23605, 0), + (15344, 1, 264, 360, 38), + (15348, 1, 264, 240, 9504), + (15356, 1, 232, 20, 4544), + (15358, 1, 287, 1, 0), + (15358, 2, 385, 32350, 0), + (15359, 1, 264, 960, 50), + (15363, 1, 264, 240, 447), + (15371, 1, 264, 1, 3729), + (15374, 1, 195, 20, 0), + (15383, 1, 310, 1000, 0), + (15383, 2, 385, 5132, 0), + (15383, 3, 385, 5232, 0), + (15383, 4, 385, 5332, 0), + (15383, 5, 385, 5432, 0), + (15383, 6, 385, 5532, 0), + (15383, 7, 385, 5032, 0), + (15383, 8, 385, 5632, 0), + (15389, 1, 127, 16, 0), + (15389, 2, 385, 23575, 0), + (15396, 1, 127, 20, 20), + (15396, 2, 137, 0, 0), + (15396, 3, 138, 0, 0), + (15396, 4, 141, 1, 0), + (15396, 5, 143, 3000, 0), + (15396, 6, 127, 20, 20), + (15396, 7, 385, 16555, 0), + (15396, 8, 385, 16655, 0), + (15397, 1, 264, 1260, 494), + (15403, 1, 264, 10, 8604), + (15406, 1, 127, 10, 10), + (15406, 2, 385, 37097, 0), + (15414, 1, 287, 1, 0), + (15414, 2, 139, 30736, 0), + (15421, 1, 264, 3600, 245), + (15422, 1, 132, 15, 15), + (15426, 1, 239, 62, 0), + (15429, 1, 220, 135, 2), + (15432, 1, 184, 5, -1), + (15438, 1, 310, 180000, 0), + (15438, 2, 385, 8316, 0), + (15438, 3, 411, 128, 0), + (15441, 1, 279, 38, 0), + (15444, 1, 288, 60, 26), + (15450, 1, 310, 3000, 0), + (15450, 2, 385, 8202, 0), + (15450, 3, 385, 8302, 0), + (15450, 4, 385, 8402, 0), + (15450, 5, 385, 8502, 0), + (15450, 6, 385, 8602, 0), + (15450, 7, 411, 128, 0), + (15453, 1, 310, 60000, 0), + (15453, 2, 385, 8421, 0), + (15453, 3, 411, 128, 0), + (15456, 1, 264, 5, 470), + (15466, 1, 126, 20, 20), + (15466, 2, 139, 12576, 0), + (15466, 3, 126, 20, 20), + (15466, 4, 139, 12828, 0), + (15469, 1, 264, 240, 1120), + (15472, 1, 264, 1260, 521), + (15478, 1, 264, 120, 578), + (15485, 1, 339, 10, 38417), + (15485, 2, 142, 96, 0), + (15485, 3, 311, 0, 0), + (15485, 4, 134, 105, 0), + (15485, 5, 348, 10, 0), + (15485, 6, 137, 0, 0), + (15485, 7, 339, 10, 38417), + (15485, 8, 142, 96, 0), + (15485, 9, 311, 0, 0), + (15485, 10, 134, 105, 0), + (15485, 11, 348, 10, 0), + (15485, 12, 137, 100, 0), + (15485, 13, 339, 10, 38417), + (15485, 14, 142, 96, 0), + (15485, 15, 311, 0, 0), + (15485, 16, 134, 105, 0), + (15485, 17, 348, 10, 0), + (15485, 18, 137, 79, 0), + (15485, 19, 339, 10, 38417), + (15485, 20, 142, 96, 0), + (15485, 21, 311, 0, 0), + (15485, 22, 134, 105, 0), + (15485, 23, 348, 10, 0), + (15485, 24, 137, 147, 0), + (15493, 1, 127, 10, 0), + (15493, 2, 137, 31, 0), + (15502, 1, 310, 240000, 0), + (15502, 2, 139, 4673, 0), + (15502, 3, 411, 512, 0), + (15509, 1, 310, 3000, 0), + (15509, 2, 385, 12315, 0), + (15509, 3, 385, 12415, 0), + (15509, 4, 385, 12515, 0), + (15509, 5, 385, 12615, 0), + (15509, 10, 411, 512, 0), + (15512, 1, 288, 50, 8), + (15516, 1, 126, 20, 0), + (15516, 2, 139, 3066, 0), + (15516, 3, 411, 256, 0), + (15517, 1, 127, 16, 0), + (15517, 2, 139, 3066, 0), + (15517, 3, 411, 256, 0), + (15526, 1, 264, 120, 3702), + (15529, 1, 247, 60, 53), + (15540, 1, 185, 5, 1), + (15543, 1, 185, 5, 0), + (15546, 1, 185, 5, 36), + (15549, 1, 264, 15, 244), + (15552, 1, 264, 840, 3710), + (15555, 1, 339, 5, 38103), + (15555, 2, 385, 3208, 0), + (15555, 3, 385, 3308, 0), + (15555, 4, 385, 3408, 0), + (15555, 5, 385, 3508, 0), + (15564, 1, 220, 68, 51), + (15571, 1, 264, 180, 351), + (15579, 1, 287, 2, 0), + (15579, 2, 139, 16106, 0), + (15585, 1, 274, 44, 0), + (15591, 1, 127, 10, 0), + (15591, 2, 139, 16839, 0), + (15598, 1, 264, 180, 759), + (15598, 2, 264, 180, 1150), + (15598, 3, 264, 180, 1151), + (15598, 4, 264, 180, 1152), + (15602, 1, 124, 1, 0), + (15602, 2, 138, 0, 0), + (15602, 3, 141, 1, 0), + (15602, 4, 348, 10, 0), + (15606, 1, 244, -25, 0), + (15609, 1, 383, 10, 38134), + (15609, 2, 141, 1, 0), + (15609, 3, 348, 10, 0), + (15609, 4, 142, 85, 0), + (15609, 5, 143, 3000, 0), + (15622, 1, 127, 5, 5), + (15622, 2, 137, 0, 0), + (15622, 3, 138, 0, 0), + (15622, 4, 141, 1, 0), + (15625, 1, 330, 10, 8), + (15632, 1, 264, 1728, 789), + (15634, 1, 310, 1500, 0), + (15634, 2, 385, 12110, 0), + (15634, 3, 385, 12210, 0), + (15634, 4, 385, 12310, 0), + (15634, 5, 385, 12410, 0), + (15634, 6, 385, 12510, 0), + (15635, 1, 310, 3000, 0), + (15635, 2, 385, 12110, 0), + (15635, 3, 385, 12210, 0), + (15635, 4, 385, 12310, 0), + (15635, 5, 385, 12410, 0), + (15635, 6, 385, 12510, 0), + (15648, 1, 185, 3, 74), + (15694, 1, 190, 550, 0), + (15714, 1, 320, 12, 0), + (15719, 1, 320, 12, 0), + (15746, 1, 421, 20, 0), + (15746, 2, 139, 16097, 0), + (15746, 3, 139, 23612, 0), + (15746, 4, 139, 32196, 0), + (15746, 5, 139, 32565, 0), + (15746, 6, 423, 6, 0), + (15746, 7, 422, 5, 0), + (15746, 8, 411, 2, 0), + (15768, 1, 125, 1, 2), + (15768, 2, 136, 46, 0), + (15772, 1, 128, 80, 80), + (15772, 2, 138, 1, 0), + (15772, 3, 140, 1, 0), + (15772, 4, 311, 0, 0), + (15772, 5, 411, 66434, 0), + (15772, 6, 137, -40, 0), + (15773, 1, 128, 80, 80), + (15773, 2, 138, 1, 0), + (15773, 3, 140, 1, 0), + (15773, 4, 311, 0, 0), + (15773, 5, 411, 256, 0), + (15773, 6, 137, -40, 0), + (15773, 7, 391, 1, 0), + (15778, 1, 303, 27500, 32500), + (15778, 2, 139, 2766, 0), + (15833, 1, 264, 60, 2045), + (15836, 1, 264, 60, 463), + (15891, 1, 264, 20, 988), + (15893, 1, 264, 20, 987), + (15895, 1, 264, 20, 986), + (15908, 1, 220, 125, 0), + (15908, 2, 220, 200, 2), + (15909, 1, 220, 155, 0), + (15909, 2, 220, 290, 2), + (15910, 1, 220, 185, 0), + (15910, 2, 220, 385, 2), + (15954, 1, 292, 49, 0), + (15961, 1, 129, 20, 0), + (15961, 2, 385, 12768, 0), + (15961, 3, 411, 256, 0), + (16062, 1, 339, 20, 40941), + (16062, 2, 138, 0, 0), + (16062, 3, 137, 31, 0), + (16062, 4, 311, 0, 0), + (16084, 1, 158, 1, 0), + (16087, 1, 264, 432, 53), + (16094, 1, 264, 3024, 43), + (16104, 1, 10, 0, 0), + (16109, 1, 69, 3000, 0), + (16114, 1, 114, 2, 0), + (16117, 1, 171, 2, 0), + (16120, 1, 226, 1, 0), + (16121, 1, 310, 840000, 0), + (16121, 2, 139, 4670, 0), + (16124, 1, 264, 2, 3711), + (16128, 1, 127, 8, 0), + (16128, 2, 139, 13143, 0), + (16131, 1, 130, 10, 0), + (16131, 2, 385, 18000, 0), + (16137, 1, 287, 1, 0), + (16137, 2, 385, 21821, 0), + (16140, 1, 287, 1, 0), + (16140, 2, 385, 30666, 0), + (16146, 1, 339, 2, 41107), + (16146, 2, 142, 95, 0), + (16146, 3, 138, 1, 0), + (16146, 4, 137, 0, 0), + (16146, 5, 348, 10, 0), + (16146, 6, 141, 1, 0), + (16149, 1, 129, 20, 0), + (16149, 2, 385, 4357, 0), + (16149, 3, 385, 4457, 0), + (16149, 4, 385, 4557, 0), + (16149, 5, 411, 4, 0), + (16152, 1, 339, 3, 41108), + (16152, 2, 142, 90, 0), + (16152, 3, 138, 0, 0), + (16152, 4, 137, 0, 0), + (16152, 5, 348, 10, 0), + (16152, 6, 141, 1, 0), + (16156, 1, 392, 1000, 0), + (16156, 2, 385, 32341, 0), + (16159, 1, 287, 1, 0), + (16159, 2, 385, 32307, 0), + (16164, 1, 294, 0, 195), + (16170, 1, 360, 70, 41119), + (16173, 1, 320, 12, 0), + (16176, 1, 264, 2, 337), + (16179, 1, 288, 8, 7), + (16180, 1, 264, 5, 584), + (16186, 1, 288, 100, 30), + (16189, 1, 339, 12, 41127), + (16189, 2, 138, 0, 0), + (16189, 3, 142, 70, 0), + (16189, 4, 411, 32, 0), + (16189, 5, 348, 1, 0), + (16189, 6, 141, 1, 0), + (16192, 1, 339, 12, 41130), + (16192, 2, 138, 0, 0), + (16192, 3, 142, 70, 0), + (16192, 4, 403, 4, 0), + (16192, 5, 348, 1, 0), + (16192, 6, 404, 2, 0), + (16192, 7, 141, 1, 0), + (16208, 1, 247, 5, 27), + (16211, 1, 287, 1, 0), + (16211, 2, 139, 23581, 0), + (16211, 3, 139, 32359, 0), + (16218, 1, 264, 10, 403), + (16221, 1, 287, 1, 0), + (16221, 2, 385, 23586, 0), + (16225, 1, 264, 1, 219), + (16230, 1, 310, 1000, 0), + (16230, 2, 385, 2431, 0), + (16230, 3, 385, 2531, 0), + (16230, 4, 385, 2545, 0), + (16230, 5, 385, 2631, 0), + (16235, 1, 126, 35, 0), + (16235, 2, 134, 100, 0), + (16235, 3, 135, 3, 0), + (16238, 1, 287, 2, 0), + (16238, 2, 385, 23693, 0), + (16238, 3, 460, 1, 0), + (16249, 1, 275, 100, 0), + (16257, 1, 429, 37114, 2), + (16257, 2, 428, 52, 0), + (16260, 1, 427, 41160, 3), + (16260, 2, 428, 23, 0), + (16266, 1, 224, 50, 8), + (16266, 2, 173, 4, 0), + (16267, 1, 250, 52, 0), + (16272, 1, 175, 2, 0), + (16276, 1, 247, 10, 36), + (16287, 1, 264, 20, 669), + (16297, 1, 264, 600, 553), + (16300, 1, 264, 60, 668), + (16303, 1, 264, 240, 3506), + (16306, 1, 264, 1260, 777), + (16317, 1, 220, 100, -1), + (16327, 1, 310, 720000, 0), + (16327, 2, 139, 5040, 0), + (16330, 1, 330, 105, 74), + (16336, 1, 264, 30, 1257), + (16339, 1, 264, 10, 773), + (16342, 1, 127, 10, 0), + (16342, 2, 385, 38115, 0), + (16361, 1, 399, 5, 0), + (16361, 2, 141, 1, 0), + (16361, 3, 138, 0, 0), + (16361, 4, 134, 254, 0), + (16361, 5, 348, 10, 0), + (16361, 6, 137, 0, 0), + (16361, 7, 311, 0, 0), + (16361, 8, 137, -152, 0), + (16361, 9, 137, -39, 0), + (16366, 1, 286, 200, 0), + (16366, 2, 138, 0, 0), + (16366, 3, 143, 1, 0), + (16366, 4, 348, 10, 0), + (16371, 1, 129, 20, 0), + (16371, 2, 385, 2754, 0), + (16380, 1, 264, 30, 2061), + (16386, 1, 264, 10, 2064), + (16392, 1, 264, 90, 2202), + (16396, 1, 127, 5, 5), + (16396, 2, 137, 0, 0), + (16396, 3, 138, 0, 0), + (16396, 4, 141, 1, 0), + (16402, 1, 131, 60, 60), + (16402, 2, 348, 10, 0), + (16402, 3, 137, -32, 0), + (16414, 1, 317, 16, 0), + (16419, 1, 426, 6, 0), + (16420, 1, 426, 7, 0), + (16421, 1, 426, 8, 0), + (16440, 1, 247, 65, 76), + (16475, 1, 218, 4, 0), + (16489, 1, 294, 29, 102), + (16536, 1, 405, 3, 0), + (16604, 1, 264, 1440, 180), + (16644, 1, 264, 60, 747), + (16666, 1, 264, 60, 742), + (16730, 1, 347, 31, 0), + (16745, 1, 264, 60, 706), + (16887, 1, 280, 75, 0), + (16890, 1, 218, 21, 0), + (17004, 1, 225, 35, 0), + (17206, 1, 264, 12, 601), + (17209, 1, 264, 180, 111), + (17212, 1, 264, 60, 10367), + (17215, 1, 378, 2, 22), + (17215, 2, 378, 2, 31), + (17215, 3, 378, 2, 3), + (17215, 4, 378, 2, 20), + (17218, 1, 127, 10, 0), + (17218, 2, 139, 27560, 0), + (17229, 1, 220, 900, 3), + (17229, 2, 220, 900, 2), + (17229, 3, 220, 900, 77), + (17235, 1, 127, 15, 0), + (17235, 2, 385, 12609, 0), + (17239, 1, 310, 2400000, 0), + (17239, 2, 139, 4500, 0), + (17239, 3, 411, 8, 0), + (17242, 1, 378, 1, 22), + (17242, 2, 378, 1, 31), + (17242, 3, 378, 1, 3), + (17242, 4, 378, 1, 20), + (17245, 1, 378, 1, 22), + (17245, 2, 378, 1, 31), + (17245, 3, 378, 1, 3), + (17245, 4, 378, 1, 20), + (17249, 1, 264, 120, 651), + (17252, 1, 310, 3000, 0), + (17252, 2, 385, 13438, 0), + (17252, 3, 385, 13538, 0), + (17252, 4, 385, 13638, 0), + (17258, 1, 399, 2, 0), + (17258, 2, 137, 457, 0), + (17258, 3, 399, 2, 0), + (17258, 4, 134, 253, 0), + (17258, 5, 142, 100, 0), + (17258, 6, 138, 0, 0), + (17258, 7, 136, 13, 0), + (17258, 8, 136, 20, 0), + (17258, 9, 137, -39, 0), + (17267, 1, 127, 10, 0), + (17267, 2, 385, 13507, 0), + (17267, 3, 385, 13107, 0), + (17267, 4, 385, 13207, 0), + (17267, 5, 385, 13307, 0), + (17267, 6, 385, 13407, 0), + (17267, 7, 385, 13607, 0), + (17281, 1, 287, 1, 0), + (17281, 2, 385, 16646, 0), + (17288, 1, 264, 1440, 41), + (17289, 1, 264, 180, 1062), + (17295, 1, 229, 62, 0), + (17307, 1, 127, 8, 0), + (17307, 2, 139, 38058, 0), + (17310, 1, 310, 14000, 0), + (17310, 2, 139, 8007, 0), + (17310, 3, 310, 14000, 0), + (17310, 4, 385, 4140, 0), + (17310, 5, 385, 4240, 0), + (17310, 6, 385, 4340, 0), + (17310, 7, 385, 4440, 0), + (17310, 8, 385, 4540, 0), + (17310, 9, 385, 4640, 0), + (17317, 1, 264, 60, 1270), + (17334, 1, 287, 12, 0), + (17334, 2, 385, 16188, 0), + (17336, 1, 287, 1, 0), + (17336, 2, 385, 32348, 0), + (17339, 1, 264, 12, 760), + (17350, 1, 264, 110, 170), + (17357, 1, 287, 1, 0), + (17357, 2, 137, 100, 0), + (17357, 3, 138, 1, 0), + (17361, 1, 264, 60, 405), + (17361, 2, 264, 60, 426), + (17365, 1, 287, 6, 0), + (17365, 2, 385, 5240, 0), + (17365, 3, 385, 5340, 0), + (17365, 4, 385, 5440, 0), + (17365, 5, 385, 5540, 0), + (17365, 6, 385, 5640, 0), + (17370, 1, 287, 1, 0), + (17370, 2, 138, 0, 0), + (17370, 3, 137, 0, 0), + (17370, 4, 137, 100, 0), + (17370, 5, 140, 1, 0), + (17370, 6, 348, 10, 0), + (17375, 1, 127, 10, 0), + (17375, 2, 385, 38078, 0), + (17391, 1, 264, 1560, 98), + (17406, 1, 310, 480000, 0), + (17406, 2, 139, 4502, 0), + (17406, 3, 139, 4509, 0), + (17409, 1, 214, 205, 0), + (17409, 2, 259, 4, 0), + (17409, 3, 172, 4, 0), + (17414, 1, 264, 120, 673), + (17418, 1, 247, 10, 74), + (17428, 1, 288, 5, 51), + (17436, 1, 264, 60, 372), + (17439, 1, 287, 1, 0), + (17439, 2, 385, 6040, 0), + (17441, 1, 279, 37, 0), + (17445, 1, 310, 60000, 0), + (17445, 2, 385, 3312, 0), + (17448, 1, 287, 1, 0), + (17448, 2, 385, 14005, 0), + (17448, 3, 385, 3519, 0), + (17476, 1, 264, 240, 462), + (17492, 1, 264, 120, 840), + (17495, 1, 264, 20, 9702), + (17515, 1, 127, 25, 0), + (17515, 2, 385, 7125, 0), + (17517, 1, 127, 17, 0), + (17517, 2, 385, 23683, 0), + (17517, 3, 460, 1, 0), + (17522, 1, 264, 30, 764), + (17533, 1, 287, 1, 0), + (17533, 2, 139, 32399, 0), + (17533, 3, 460, 1, 0), + (17547, 1, 287, 1, 0), + (17547, 2, 137, 0, 0), + (17547, 3, 137, 100, 0), + (17547, 4, 140, 2, 0), + (17547, 5, 138, 0, 0), + (17547, 6, 348, 10, 0), + (17549, 1, 264, 10, 8700), + (17553, 1, 339, 8, 41768), + (17553, 2, 138, 0, 0), + (17553, 3, 141, 1, 0), + (17553, 4, 134, 253, 0), + (17553, 5, 142, 85, 0), + (17553, 6, 143, 1, 0), + (17553, 7, 311, 0, 0), + (17553, 8, 348, 1, 0), + (17553, 9, 137, 0, 0), + (17554, 1, 227, 2, 74), + (17555, 1, 286, 126, 2), + (17555, 2, 385, 9606, 0), + (17555, 3, 303, 252, 0), + (17555, 4, 385, 9606, 0), + (17558, 1, 413, 2, 2), + (17558, 2, 385, 9603, 0), + (17558, 3, 411, 2048, 0), + (17561, 1, 413, 2, 2), + (17561, 2, 385, 9609, 0), + (17561, 3, 411, 2048, 0), + (17564, 1, 413, 2, 2), + (17564, 2, 385, 9619, 0), + (17564, 3, 411, 2048, 0), + (17567, 1, 413, 2, 2), + (17567, 2, 385, 9613, 0), + (17567, 3, 411, 2048, 0), + (17570, 1, 413, 2, 2), + (17570, 2, 385, 9604, 0), + (17570, 3, 411, 2048, 0), + (17573, 1, 413, 2, 2), + (17573, 2, 385, 9651, 0), + (17573, 3, 411, 2048, 0), + (17576, 1, 413, 2, 2), + (17576, 2, 385, 16652, 0), + (17576, 3, 411, 4096, 0), + (17579, 1, 413, 2, 2), + (17579, 2, 385, 16629, 0), + (17579, 3, 411, 4096, 0), + (17582, 1, 413, 2, 2), + (17582, 2, 385, 16650, 0), + (17582, 3, 411, 4096, 0), + (17585, 1, 413, 2, 2), + (17585, 2, 385, 16608, 0), + (17585, 3, 411, 4096, 0), + (17588, 1, 413, 2, 2), + (17588, 2, 385, 16615, 0), + (17588, 3, 411, 4096, 0), + (17591, 1, 413, 2, 2), + (17591, 2, 385, 16618, 0), + (17591, 3, 411, 4096, 0), + (17594, 1, 413, 2, 2), + (17594, 2, 385, 16625, 0), + (17594, 3, 411, 4096, 0), + (17597, 1, 286, 345, 0), + (17597, 2, 385, 7604, 0), + (17600, 1, 413, 2, 2), + (17600, 2, 385, 7608, 0), + (17600, 3, 411, 8192, 0), + (17603, 1, 413, 2, 2), + (17603, 2, 385, 7612, 0), + (17603, 3, 411, 8192, 0), + (17606, 1, 392, 419, 0), + (17606, 2, 385, 7613, 0), + (17606, 3, 396, 838, 0), + (17606, 4, 385, 7613, 0), + (17609, 1, 413, 2, 2), + (17609, 2, 385, 7636, 0), + (17609, 3, 411, 8192, 0), + (17612, 1, 413, 2, 2), + (17612, 2, 385, 7618, 0), + (17612, 3, 411, 8192, 0), + (17615, 1, 286, 539, 0), + (17615, 2, 385, 7638, 0), + (17618, 1, 413, 2, 2), + (17618, 2, 385, 6664, 0), + (17618, 3, 411, 16384, 0), + (17621, 1, 413, 2, 2), + (17621, 2, 385, 6648, 0), + (17621, 3, 411, 16384, 0), + (17624, 1, 413, 2, 2), + (17624, 2, 385, 6649, 0), + (17624, 3, 411, 16384, 0), + (17627, 1, 413, 2, 2), + (17627, 2, 385, 6611, 0), + (17627, 3, 411, 16384, 0), + (17630, 1, 413, 2, 2), + (17630, 2, 385, 6652, 0), + (17630, 3, 411, 16384, 0), + (17633, 1, 413, 2, 2), + (17633, 2, 385, 6655, 0), + (17633, 3, 411, 16384, 0), + (17639, 1, 323, 37182, 100), + (18972, 1, 214, 210, 0), + (18972, 2, 259, 5, 0), + (18972, 3, 172, 5, 0), + (30050, 1, 69, 25, 0), + (30050, 2, 97, 25, 0), + (30050, 3, 190, 25, 0), + (30050, 4, 328, 25, 0), + (30100, 1, 1, 10, 0), + (30100, 2, 2, 10, 0), + (30100, 3, 341, 10, 0), + (30150, 1, 262, 5, 0), + (30150, 2, 262, 5, 1), + (30150, 3, 262, 5, 2), + (30150, 4, 262, 5, 3), + (30150, 5, 262, 5, 4), + (30150, 6, 262, 5, 5), + (30150, 7, 262, 5, 6), + (30150, 8, 159, 5, 0), + (30150, 9, 0, 2, 0), + (30150, 10, 15, 2, 0), + (30150, 11, 189, 2, 0), + (30150, 12, 317, 2, 0), + (30150, 13, 318, 2, 0), + (30175, 1, 271, 1, 0), + (30180, 1, 264, 1, 8202), + (30185, 1, 264, 1, 1011), + (30195, 1, 432, 1, 0), + (49999, 1, 10, 0, 0); + +DROP TABLE IF EXISTS `aa_rank_prereqs`; +CREATE TABLE IF NOT EXISTS `aa_rank_prereqs` ( + `rank_id` int(10) unsigned NOT NULL, + `aa_id` int(10) NOT NULL, + `points` int(10) NOT NULL, + PRIMARY KEY (`rank_id`,`aa_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO `aa_rank_prereqs` (`rank_id`, `aa_id`, `points`) VALUES + (129, 19, 3), + (131, 19, 3), + (136, 19, 3), + (141, 23, 3), + (142, 23, 3), + (143, 23, 3), + (146, 224, 3), + (162, 224, 3), + (190, 30, 3), + (191, 30, 3), + (192, 30, 3), + (195, 31, 3), + (230, 17, 3), + (231, 17, 3), + (232, 17, 3), + (255, 309, 3), + (256, 309, 3), + (257, 309, 3), + (260, 31, 3), + (261, 31, 3), + (262, 31, 3), + (263, 17, 3), + (264, 17, 3), + (265, 17, 3), + (267, 23, 3), + (268, 23, 3), + (269, 23, 3), + (446, 26, 3), + (447, 26, 3), + (448, 26, 3), + (462, 39, 1), + (463, 39, 1), + (464, 39, 1), + (468, 41, 1), + (469, 41, 1), + (470, 41, 1), + (471, 57, 1), + (472, 57, 1), + (473, 57, 1), + (474, 50, 1), + (475, 50, 1), + (476, 50, 1), + (477, 43, 1), + (478, 43, 1), + (479, 43, 1), + (480, 117, 1), + (481, 117, 1), + (482, 117, 1), + (483, 58, 1), + (484, 58, 1), + (485, 58, 1), + (489, 110, 1), + (490, 110, 1), + (491, 110, 1), + (492, 109, 1), + (493, 109, 1), + (494, 109, 1), + (495, 98, 1), + (496, 98, 1), + (497, 98, 1), + (498, 102, 1), + (499, 102, 1), + (500, 102, 1), + (501, 107, 1), + (502, 107, 1), + (503, 107, 1), + (531, 19, 3), + (532, 19, 3), + (534, 6001, 11), + (535, 6001, 11), + (536, 6001, 11), + (537, 112, 3), + (538, 112, 3), + (539, 17, 3), + (540, 17, 3), + (541, 17, 3), + (542, 309, 3), + (543, 309, 3), + (544, 309, 3), + (567, 45, 1), + (574, 125, 1), + (575, 125, 1), + (576, 125, 1), + (583, 73, 1), + (584, 73, 1), + (585, 73, 1), + (586, 120, 1), + (587, 120, 1), + (588, 120, 1), + (589, 87, 1), + (590, 87, 1), + (591, 87, 1), + (592, 30, 1), + (593, 6001, 11), + (594, 6001, 11), + (595, 6001, 11), + (596, 6000, 11), + (597, 6000, 11), + (598, 6000, 11), + (637, 23, 3), + (638, 23, 3), + (639, 23, 3), + (640, 23, 3), + (641, 23, 3), + (642, 23, 3), + (643, 55, 1), + (644, 82, 1), + (702, 30, 1), + (703, 30, 1), + (704, 30, 1), + (705, 30, 1), + (706, 30, 1), + (715, 6001, 11), + (716, 6001, 11), + (717, 6001, 11), + (754, 153, 3), + (755, 153, 3), + (756, 153, 3), + (770, 23, 3), + (771, 23, 3), + (772, 23, 3), + (773, 217, 1), + (774, 217, 1), + (775, 217, 1), + (782, 35, 1), + (783, 35, 1), + (784, 35, 1), + (806, 81, 1), + (849, 180, 3), + (850, 180, 3), + (851, 180, 3), + (886, 102, 1), + (887, 102, 1), + (893, 87, 1), + (894, 87, 1), + (924, 23, 3), + (925, 23, 3), + (931, 23, 1), + (932, 23, 1), + (933, 23, 1), + (975, 102, 1), + (1018, 227, 3), + (1041, 30, 6), + (1042, 30, 6), + (1043, 30, 6), + (1044, 310, 6), + (1045, 310, 6), + (1046, 310, 6), + (1047, 311, 3), + (1048, 311, 3), + (1049, 311, 3), + (1050, 309, 6), + (1051, 309, 6), + (1052, 309, 6), + (1102, 30, 1), + (1103, 30, 1), + (1104, 30, 1), + (1105, 30, 1), + (1106, 30, 1), + (1107, 23, 3), + (1108, 23, 3), + (1109, 23, 3), + (1110, 187, 5), + (1111, 187, 5), + (1112, 187, 5), + (1122, 176, 2), + (1126, 58, 1), + (1127, 58, 1), + (1128, 58, 1), + (1129, 125, 1), + (1130, 125, 1), + (1150, 189, 3), + (1151, 189, 3), + (1152, 189, 3), + (1163, 309, 3), + (1164, 309, 3), + (1165, 309, 3), + (1203, 19, 3), + (1204, 19, 3), + (1205, 19, 3), + (1210, 114, 6), + (1211, 114, 6), + (1212, 114, 6), + (1213, 215, 6), + (1214, 215, 6), + (1215, 215, 6), + (1242, 173, 3), + (1243, 173, 3), + (1244, 173, 3), + (1251, 61, 1), + (1252, 64, 1), + (1253, 62, 1), + (1254, 63, 1), + (1274, 175, 3), + (1275, 175, 3), + (1276, 175, 3), + (1278, 6001, 11), + (1279, 6001, 11), + (1280, 6001, 11), + (1323, 47, 1), + (1337, 308, 3), + (1338, 308, 3), + (1339, 308, 3), + (1414, 451, 1), + (1415, 451, 1), + (1416, 451, 1), + (1417, 451, 1), + (1418, 451, 1), + (1420, 17, 3), + (1421, 17, 3), + (1422, 17, 3), + (1423, 17, 3), + (1424, 17, 3), + (1425, 374, 3), + (1426, 374, 3), + (1427, 374, 3), + (1428, 374, 3), + (1429, 374, 3), + (1435, 20, 3), + (1436, 20, 3), + (1437, 20, 3), + (1458, 375, 3), + (1459, 255, 5), + (1460, 255, 5), + (1461, 255, 5), + (1471, 362, 1), + (1472, 362, 1), + (1473, 362, 1), + (1474, 362, 1), + (1475, 362, 1), + (1483, 114, 6), + (1484, 114, 6), + (1485, 114, 6), + (1486, 19, 7), + (1487, 19, 7), + (1488, 19, 7), + (1489, 19, 7), + (1490, 19, 7), + (1494, 80, 1), + (1495, 185, 6), + (1496, 185, 6), + (1497, 185, 6), + (1501, 46, 1), + (1502, 46, 1), + (1503, 46, 1), + (1504, 60, 1), + (1505, 60, 1), + (1506, 60, 1), + (1511, 175, 3), + (1512, 175, 3), + (1513, 175, 3), + (1514, 259, 6), + (1515, 259, 6), + (1516, 259, 6), + (1524, 30, 3), + (1525, 30, 3), + (1526, 30, 3), + (1543, 439, 3), + (1544, 439, 3), + (1545, 439, 3), + (1546, 420, 1), + (1547, 420, 1), + (1548, 420, 1), + (1552, 13, 5), + (1553, 13, 5), + (1554, 13, 5), + (1555, 359, 3), + (1556, 359, 3), + (1557, 359, 3), + (1558, 46, 1), + (1559, 46, 1), + (1560, 46, 1), + (1572, 263, 1), + (1573, 263, 1), + (1574, 263, 1), + (1575, 263, 1), + (1576, 263, 1), + (1577, 58, 1), + (1578, 58, 1), + (1579, 58, 1), + (1583, 300, 6), + (1584, 300, 6), + (1585, 300, 6), + (1586, 300, 6), + (1587, 300, 6), + (1591, 222, 3), + (1601, 82, 1), + (1602, 82, 1), + (1603, 82, 1), + (1608, 82, 3), + (1609, 82, 3), + (1610, 82, 3), + (1611, 181, 2), + (1612, 181, 2), + (1613, 181, 2), + (1614, 181, 2), + (1615, 181, 2), + (1627, 13, 5), + (1628, 13, 5), + (1629, 13, 5), + (1638, 224, 3), + (1639, 565, 1), + (1640, 793, 1), + (1641, 121, 3), + (1642, 121, 3), + (1643, 77, 1), + (1644, 85, 1), + (1645, 77, 1), + (1646, 85, 1), + (1656, 153, 1), + (1657, 153, 1), + (1659, 285, 1), + (1660, 285, 1), + (1667, 570, 1), + (2400, 38, 1), + (2401, 38, 1), + (2402, 38, 1), + (3676, 35, 1), + (4666, 435, 3), + (4667, 435, 3), + (4668, 435, 3), + (4669, 435, 3), + (4670, 435, 3), + (4688, 497, 5), + (4689, 497, 5), + (4690, 497, 5), + (4691, 497, 5), + (4692, 497, 5), + (4707, 30, 6), + (4708, 30, 6), + (4709, 30, 6), + (4710, 310, 6), + (4711, 310, 6), + (4712, 310, 6), + (4713, 311, 3), + (4714, 311, 3), + (4715, 311, 3), + (4716, 309, 6), + (4717, 309, 6), + (4718, 309, 6), + (4749, 23, 3), + (4750, 23, 3), + (4751, 23, 3), + (4752, 114, 6), + (4753, 114, 6), + (4754, 114, 6), + (4755, 215, 6), + (4756, 215, 6), + (4757, 215, 6), + (4761, 526, 3), + (4762, 526, 3), + (4763, 526, 3), + (4773, 20, 3), + (4795, 309, 3), + (4796, 309, 3), + (4797, 309, 3), + (4829, 420, 1), + (4830, 420, 1), + (4831, 420, 1), + (4844, 435, 3), + (4845, 435, 3), + (4846, 435, 3), + (4847, 435, 3), + (4848, 435, 3), + (4861, 68, 1), + (4862, 68, 1), + (4863, 68, 1), + (4864, 175, 3), + (4865, 175, 3), + (4866, 175, 3), + (4887, 413, 3), + (4888, 413, 3), + (4889, 413, 3), + (4890, 57, 1), + (4894, 409, 3), + (4895, 409, 3), + (4896, 409, 3), + (4903, 784, 1), + (4906, 785, 1), + (4909, 786, 1), + (4912, 787, 1), + (4915, 794, 1), + (4916, 794, 1), + (4917, 794, 1), + (4921, 117, 1), + (4922, 117, 1), + (4923, 117, 1), + (4924, 740, 3), + (4925, 740, 3), + (4926, 740, 3), + (4931, 173, 8), + (4932, 173, 8), + (4933, 173, 8), + (4951, 439, 3), + (4952, 439, 3), + (4953, 439, 3), + (4975, 30, 1), + (4976, 30, 1), + (4977, 30, 1), + (4978, 30, 1), + (4979, 30, 1), + (4986, 82, 1), + (4987, 82, 1), + (4988, 82, 1), + (4989, 82, 3), + (4990, 82, 3), + (4991, 82, 3), + (5010, 35, 1), + (5011, 35, 1), + (5012, 35, 1), + (5038, 30, 3), + (5039, 30, 3), + (5040, 30, 3), + (5041, 6001, 11), + (5042, 6001, 11), + (5043, 6001, 11), + (5061, 45, 1), + (5069, 224, 3), + (5070, 19, 3), + (5071, 19, 3), + (5072, 19, 3), + (5080, 255, 5), + (5081, 255, 5), + (5082, 255, 5), + (5098, 73, 2), + (5118, 396, 1), + (5119, 396, 1), + (5120, 396, 1), + (5127, 261, 3), + (5128, 261, 3), + (5129, 261, 3), + (5133, 23, 3), + (5134, 23, 3), + (5135, 23, 3), + (5136, 496, 5), + (5137, 496, 5), + (5138, 496, 5), + (5139, 496, 5), + (5140, 496, 5), + (5251, 447, 3), + (5252, 447, 3), + (5253, 447, 3), + (5264, 278, 5), + (5265, 278, 5), + (5266, 278, 5), + (5267, 278, 5), + (5268, 278, 5), + (5270, 87, 1), + (5271, 87, 1), + (5272, 87, 1), + (5286, 23, 3), + (5287, 23, 3), + (5288, 23, 3), + (5311, 185, 6), + (5312, 185, 6), + (5313, 185, 6), + (5330, 1685, 1), + (5333, 1685, 1), + (5336, 1685, 1), + (5339, 1685, 1), + (5342, 1685, 1), + (5347, 1685, 1), + (5348, 1685, 1), + (5350, 707, 4), + (5350, 1685, 1), + (5353, 1685, 1), + (5356, 1685, 1), + (5357, 1685, 1), + (5360, 1685, 1), + (5363, 447, 3), + (5363, 1685, 1), + (5366, 1685, 1), + (5369, 1685, 1), + (5513, 58, 1), + (5514, 58, 1), + (5515, 58, 1), + (5529, 19, 7), + (5530, 19, 7), + (5531, 19, 7), + (5532, 19, 7), + (5533, 19, 7), + (5542, 30, 6), + (5543, 30, 6), + (5544, 30, 6), + (5545, 310, 6), + (5546, 310, 6), + (5547, 310, 6), + (5548, 311, 3), + (5549, 311, 3), + (5550, 311, 3), + (5551, 309, 6), + (5552, 309, 6), + (5553, 309, 6), + (5571, 23, 3), + (5572, 23, 3), + (5573, 23, 3), + (5574, 114, 6), + (5575, 114, 6), + (5576, 114, 6), + (5577, 215, 6), + (5578, 215, 6), + (5579, 215, 6), + (5595, 309, 3), + (5596, 309, 3), + (5597, 309, 3), + (5607, 794, 1), + (5608, 794, 1), + (5609, 794, 1), + (5617, 23, 3), + (5618, 23, 3), + (5619, 23, 3), + (5702, 30, 1), + (5703, 30, 1), + (5704, 30, 1), + (5705, 30, 1), + (5706, 30, 1), + (5759, 374, 3), + (5760, 374, 3), + (5761, 374, 3), + (5762, 374, 3), + (5763, 374, 3), + (5791, 19, 3), + (5792, 19, 3), + (5793, 19, 3), + (5797, 396, 1), + (5798, 396, 1), + (5799, 396, 1), + (5803, 255, 5), + (5804, 255, 5), + (5805, 255, 5), + (5806, 30, 3), + (5807, 30, 3), + (5808, 30, 3), + (5825, 45, 1), + (5826, 185, 6), + (5827, 185, 6), + (5828, 185, 6), + (5854, 217, 1), + (5855, 217, 1), + (5856, 217, 1), + (5857, 173, 3), + (5858, 173, 3), + (5859, 173, 3), + (5869, 57, 1), + (5871, 57, 1), + (5872, 57, 1), + (5880, 60, 1), + (5881, 60, 1), + (5882, 60, 1), + (5886, 58, 1), + (5887, 58, 1), + (5888, 58, 1), + (5892, 784, 1), + (5893, 785, 1), + (5894, 786, 1), + (5895, 787, 1), + (5939, 278, 5), + (5940, 278, 5), + (5941, 278, 5), + (5942, 278, 5), + (5943, 278, 5), + (5944, 740, 3), + (5945, 740, 3), + (5946, 740, 3), + (5947, 175, 3), + (5948, 175, 3), + (5949, 175, 3), + (5950, 175, 3), + (5951, 175, 3), + (5952, 175, 3), + (5954, 68, 1), + (5955, 68, 1), + (5956, 68, 1), + (5969, 6001, 11), + (5970, 6001, 11), + (5971, 6001, 11), + (5972, 6001, 11), + (5973, 6000, 11), + (5984, 702, 1), + (6017, 82, 1), + (6018, 82, 1), + (6019, 82, 1), + (6026, 826, 1), + (6027, 826, 1), + (6028, 826, 1), + (6042, 439, 3), + (6043, 439, 3), + (6044, 439, 3), + (6054, 173, 8), + (6055, 173, 8), + (6056, 173, 8), + (6063, 87, 1), + (6064, 87, 1), + (6065, 87, 1), + (6088, 392, 1), + (6089, 392, 1), + (6090, 392, 1), + (6092, 447, 3), + (6093, 447, 3), + (6094, 447, 3), + (6102, 224, 3), + (6106, 308, 3), + (6107, 308, 3), + (6108, 308, 3), + (6109, 308, 3), + (6110, 308, 3), + (6111, 308, 3), + (6130, 120, 1), + (6131, 120, 1), + (6132, 120, 1), + (6136, 300, 6), + (6158, 308, 3), + (6159, 308, 3), + (6160, 308, 3), + (6209, 245, 3), + (6210, 245, 3), + (6211, 245, 3), + (6228, 404, 1), + (6229, 404, 1), + (6230, 404, 1), + (6231, 404, 1), + (6233, 43, 1), + (6234, 43, 1), + (6235, 43, 1), + (6260, 98, 1), + (6261, 98, 1), + (6262, 98, 1), + (6272, 672, 1), + (6273, 672, 1), + (6274, 672, 1), + (6275, 790, 1), + (6276, 790, 1), + (6277, 790, 1), + (6302, 3710, 1), + (6303, 3710, 1), + (6304, 3710, 1), + (6319, 107, 1), + (6320, 107, 1), + (6321, 107, 1), + (6333, 125, 1), + (6337, 553, 1), + (6338, 553, 1), + (6339, 553, 1), + (6340, 777, 1), + (6341, 777, 1), + (6342, 777, 1), + (6346, 494, 3), + (6347, 494, 3), + (6348, 494, 3), + (6349, 500, 3), + (6350, 500, 3), + (6351, 500, 3), + (6352, 409, 3), + (6353, 409, 3), + (6354, 409, 3), + (6380, 128, 3), + (6381, 128, 3), + (6382, 128, 3), + (6400, 187, 5), + (6401, 187, 5), + (6402, 187, 5), + (6403, 23, 3), + (6404, 23, 3), + (6405, 23, 3), + (6439, 41, 1), + (6440, 41, 1), + (6441, 420, 1), + (6442, 362, 1), + (6443, 362, 1), + (6445, 176, 1), + (6446, 176, 1), + (6447, 176, 1), + (6478, 3800, 1), + (6479, 3800, 1), + (6480, 3800, 1), + (6481, 36, 1), + (6482, 36, 1), + (6483, 36, 1), + (6484, 558, 1), + (6485, 558, 1), + (6486, 558, 1), + (6499, 611, 1), + (6500, 526, 3), + (6501, 526, 3), + (6502, 526, 3), + (6503, 172, 1), + (6504, 172, 1), + (6505, 172, 1), + (6506, 172, 1), + (6514, 404, 1), + (6515, 404, 1), + (6516, 404, 1), + (6517, 20, 1), + (6528, 107, 1), + (6630, 278, 5), + (6631, 278, 5), + (6632, 278, 5), + (6633, 278, 5), + (6634, 278, 5), + (6636, 358, 3), + (6637, 358, 3), + (6638, 358, 3), + (6668, 672, 3), + (6669, 672, 3), + (6670, 672, 3), + (6697, 857, 1), + (6698, 857, 1), + (6699, 857, 1), + (6700, 857, 1), + (6701, 857, 1), + (6703, 171, 1), + (6704, 171, 1), + (6705, 171, 1), + (6712, 177, 1), + (6713, 177, 1), + (6714, 177, 1), + (6715, 177, 1), + (6716, 177, 1), + (6755, 184, 3), + (6756, 184, 3), + (6757, 184, 3), + (6819, 524, 1), + (6820, 524, 1), + (6821, 524, 1), + (6823, 320, 1), + (6824, 320, 1), + (6825, 320, 1), + (6826, 320, 1), + (6827, 320, 1), + (6870, 544, 1), + (6871, 544, 1), + (6872, 544, 1), + (6873, 3837, 3), + (6874, 3837, 3), + (6875, 3837, 3), + (6876, 259, 3), + (6877, 259, 3), + (6878, 259, 3), + (6900, 465, 3), + (6901, 465, 3), + (6902, 465, 3), + (6903, 465, 3), + (6904, 465, 3), + (6908, 499, 1), + (6909, 499, 1), + (6910, 499, 1), + (6930, 611, 1), + (6935, 465, 3), + (6936, 465, 3), + (6937, 465, 3), + (6941, 962, 1), + (6942, 962, 1), + (6943, 962, 1), + (6944, 962, 1), + (6945, 962, 1), + (6977, 3817, 1), + (6978, 3817, 1), + (6979, 3817, 1), + (6980, 128, 1), + (6981, 128, 1), + (6982, 128, 1), + (6983, 245, 3), + (6988, 985, 1), + (6989, 985, 1), + (6990, 985, 1), + (7005, 789, 1), + (7006, 789, 1), + (7007, 789, 1), + (7033, 804, 1), + (7034, 804, 1), + (7035, 804, 1), + (7036, 3646, 1), + (7037, 3646, 1), + (7038, 3646, 1), + (7050, 26, 3), + (7051, 26, 3), + (7052, 26, 3), + (7053, 26, 3), + (7054, 26, 3), + (7055, 26, 3), + (7063, 26, 3), + (7064, 26, 3), + (7065, 26, 3), + (7100, 254, 3), + (7101, 254, 3), + (7102, 254, 3), + (7103, 286, 1), + (7104, 286, 1), + (7105, 286, 1), + (7116, 110, 1), + (7117, 110, 1), + (7118, 110, 1), + (7122, 435, 3), + (7123, 435, 3), + (7124, 435, 3), + (7125, 435, 3), + (7126, 435, 3), + (7128, 109, 1), + (7129, 109, 1), + (7130, 109, 1), + (7134, 439, 3), + (7135, 439, 3), + (7136, 439, 3), + (7137, 672, 1), + (7138, 672, 1), + (7139, 672, 1), + (7184, 1685, 1), + (7199, 175, 3), + (7200, 175, 3), + (7201, 175, 3), + (7204, 278, 5), + (7205, 278, 5), + (7206, 278, 5), + (7207, 278, 5), + (7208, 278, 5), + (7215, 68, 1), + (7216, 68, 1), + (7232, 114, 6), + (7233, 114, 6), + (7234, 114, 6), + (7246, 794, 1), + (7247, 794, 1), + (7248, 794, 1), + (7253, 784, 1), + (7254, 785, 1), + (7255, 786, 1), + (7256, 787, 1), + (7260, 60, 1), + (7261, 60, 1), + (7262, 60, 1), + (7263, 58, 1), + (7264, 58, 1), + (7265, 58, 1), + (7266, 125, 1), + (7276, 217, 1), + (7277, 217, 1), + (7278, 217, 1), + (7285, 173, 3), + (7286, 173, 3), + (7287, 173, 3), + (7288, 409, 3), + (7289, 409, 3), + (7290, 409, 3), + (7291, 173, 8), + (7292, 173, 8), + (7293, 173, 8), + (7301, 19, 3), + (7302, 19, 3), + (7303, 19, 3), + (7310, 255, 5), + (7311, 255, 5), + (7312, 255, 5), + (7316, 41, 1), + (7317, 41, 1), + (7323, 254, 3), + (7324, 254, 3), + (7325, 254, 3), + (7326, 286, 1), + (7327, 286, 1), + (7328, 286, 1), + (7329, 6001, 11), + (7330, 6001, 11), + (7331, 6001, 11), + (7335, 702, 1), + (7359, 82, 1), + (7360, 82, 1), + (7361, 82, 1), + (7378, 82, 3), + (7379, 82, 3), + (7380, 82, 3), + (7381, 82, 3), + (7382, 82, 3), + (7383, 82, 3), + (7390, 87, 1), + (7391, 87, 1), + (7392, 87, 1), + (7407, 31, 3), + (7414, 185, 6), + (7415, 185, 6), + (7416, 185, 6), + (7433, 30, 1), + (7434, 30, 1), + (7435, 30, 1), + (7436, 30, 1), + (7437, 30, 1), + (7445, 187, 5), + (7446, 187, 5), + (7447, 187, 5), + (7448, 553, 1), + (7449, 553, 1), + (7450, 553, 1), + (7451, 777, 1), + (7452, 777, 1), + (7453, 777, 1), + (7466, 224, 3), + (7472, 447, 3), + (7473, 447, 3), + (7474, 447, 3), + (7478, 245, 3), + (7497, 128, 3), + (7498, 128, 3), + (7499, 128, 3), + (7554, 19, 7), + (7555, 19, 7), + (7556, 19, 7), + (7557, 19, 7), + (7558, 19, 7), + (7562, 30, 6), + (7563, 30, 6), + (7564, 30, 6), + (7581, 215, 6), + (7582, 215, 6), + (7583, 215, 6), + (7615, 494, 3), + (7616, 494, 3), + (7617, 494, 3), + (7618, 500, 3), + (7619, 500, 3), + (7620, 500, 3), + (7621, 20, 1), + (7622, 26, 3), + (7623, 26, 3), + (7624, 26, 3), + (7631, 309, 3), + (7632, 309, 3), + (7633, 309, 3), + (7650, 310, 6), + (7651, 310, 6), + (7652, 310, 6), + (7653, 311, 3), + (7654, 311, 3), + (7655, 311, 3), + (7656, 309, 6), + (7657, 309, 6), + (7658, 309, 6), + (7659, 153, 3), + (7660, 153, 3), + (7661, 153, 3), + (7664, 170, 3), + (7665, 170, 3), + (7666, 170, 3), + (7667, 170, 3), + (7668, 170, 3), + (7682, 68, 1), + (7686, 435, 3), + (7687, 435, 3), + (7688, 435, 3), + (7691, 224, 3), + (7695, 862, 3), + (7696, 862, 3), + (7697, 862, 3), + (7700, 310, 3), + (7701, 310, 3), + (7702, 310, 3), + (7704, 3707, 1), + (7705, 3707, 1), + (7706, 3707, 1), + (7707, 87, 1), + (7708, 87, 1), + (7709, 87, 1), + (7710, 702, 1), + (7711, 702, 1), + (7712, 3826, 1), + (7715, 901, 1), + (7716, 901, 1), + (7717, 901, 1), + (7718, 125, 1), + (7722, 19, 7), + (7723, 19, 7), + (7724, 19, 7), + (7725, 19, 7), + (7726, 19, 7), + (7733, 195, 3), + (7743, 184, 1), + (7744, 184, 1), + (7745, 184, 1), + (7748, 13, 5), + (7749, 13, 5), + (7750, 13, 5), + (7751, 2234, 1), + (7752, 2234, 1), + (7753, 2234, 1), + (7754, 85, 1), + (7757, 9403, 1), + (7758, 9403, 1), + (7759, 9403, 1), + (7760, 824, 1), + (7761, 824, 1), + (7762, 824, 1), + (7765, 7689, 1), + (7766, 7689, 1), + (7767, 7689, 1), + (7768, 7689, 1), + (7770, 19, 3), + (7771, 19, 3), + (7772, 19, 3), + (7773, 19, 3), + (7774, 19, 3), + (7775, 19, 3), + (7822, 1154, 1), + (7823, 1154, 1), + (7824, 1154, 1), + (7825, 1154, 1), + (7826, 1154, 1), + (7827, 1404, 3), + (7832, 60, 1), + (7833, 60, 1), + (7834, 60, 1), + (7835, 60, 1), + (7836, 60, 1), + (7842, 19, 7), + (7843, 19, 7), + (7844, 19, 7), + (7940, 558, 1), + (7941, 558, 1), + (7942, 558, 1), + (7943, 39, 1), + (7944, 41, 1), + (7951, 19, 3), + (7952, 19, 3), + (7953, 19, 3), + (7983, 520, 1), + (7984, 520, 1), + (7985, 520, 1), + (7986, 705, 1), + (7987, 705, 1), + (7988, 705, 1), + (7989, 1092, 1), + (7990, 1092, 1), + (7991, 1092, 1), + (7992, 1092, 1), + (7993, 39, 1), + (7994, 39, 1), + (7995, 39, 1), + (8031, 791, 1), + (8032, 791, 1), + (8033, 791, 1), + (8035, 521, 1), + (8036, 521, 1), + (8037, 521, 1), + (8069, 160, 4), + (8070, 160, 4), + (8071, 160, 4), + (8076, 565, 1), + (8077, 565, 1), + (8078, 565, 1), + (8079, 565, 1), + (8080, 565, 1), + (8081, 565, 1), + (8082, 208, 1), + (8083, 208, 1), + (8084, 208, 1), + (8195, 3707, 1), + (8196, 3707, 1), + (8197, 3707, 1), + (8198, 210, 1), + (8199, 210, 1), + (8200, 210, 1), + (8204, 153, 1), + (8205, 153, 1), + (8206, 153, 1), + (8207, 285, 1), + (8208, 285, 1), + (8209, 285, 1), + (8220, 3812, 1), + (8224, 516, 3), + (8225, 516, 3), + (8226, 516, 3), + (8260, 1211, 1), + (8263, 142, 20), + (8264, 142, 20), + (8265, 142, 20), + (8266, 142, 20), + (8267, 142, 20), + (8268, 142, 20), + (8269, 142, 20), + (8270, 142, 20), + (8271, 142, 20), + (8272, 142, 20), + (8273, 142, 20), + (8274, 142, 20), + (8275, 142, 20), + (8276, 142, 20), + (8277, 142, 20), + (8278, 142, 20), + (8279, 142, 20), + (8280, 142, 20), + (8281, 142, 20), + (8282, 142, 20), + (8283, 142, 20), + (8284, 142, 20), + (8285, 142, 20), + (8286, 142, 20), + (8287, 142, 20), + (8288, 142, 20), + (8289, 142, 20), + (8290, 142, 20), + (8291, 142, 20), + (8292, 142, 20), + (8293, 142, 20), + (8294, 142, 20), + (8295, 142, 20), + (8296, 142, 20), + (8297, 142, 20), + (8303, 309, 6), + (8309, 31, 3), + (8310, 31, 3), + (8311, 31, 3), + (8312, 110, 1), + (8317, 8205, 1), + (8318, 8205, 1), + (8319, 199, 1), + (8320, 199, 1), + (8321, 199, 1), + (8332, 861, 1), + (8333, 861, 1), + (8334, 861, 1), + (8335, 1041, 1), + (8336, 1041, 1), + (8337, 1041, 1), + (8338, 1041, 1), + (8339, 1041, 1), + (8344, 215, 6), + (8345, 215, 6), + (8346, 215, 6), + (8347, 616, 1), + (8348, 616, 1), + (8349, 616, 1), + (8351, 142, 20), + (8352, 142, 20), + (8353, 142, 20), + (8354, 142, 20), + (8355, 142, 20), + (8356, 142, 20), + (8357, 142, 20), + (8358, 142, 20), + (8359, 142, 20), + (8360, 142, 20), + (8361, 142, 20), + (8362, 142, 20), + (8363, 142, 20), + (8364, 142, 20), + (8365, 142, 20), + (8366, 142, 20), + (8367, 142, 20), + (8368, 142, 20), + (8369, 142, 20), + (8370, 142, 20), + (8371, 142, 20), + (8372, 142, 20), + (8373, 142, 20), + (8374, 142, 20), + (8375, 142, 20), + (8376, 142, 20), + (8377, 142, 20), + (8378, 142, 20), + (8379, 142, 20), + (8380, 142, 20), + (8381, 142, 20), + (8382, 142, 20), + (8383, 142, 20), + (8384, 142, 20), + (8385, 142, 20), + (8386, 142, 20), + (8387, 142, 20), + (8388, 142, 20), + (8389, 142, 20), + (8390, 142, 20), + (8391, 142, 20), + (8392, 142, 20), + (8393, 142, 20), + (8394, 142, 20), + (8395, 142, 20), + (8396, 142, 20), + (8397, 142, 20), + (8398, 142, 20), + (8399, 142, 20), + (8400, 142, 20), + (8401, 142, 20), + (8402, 142, 20), + (8403, 142, 20), + (8404, 142, 20), + (8405, 142, 20), + (8406, 142, 20), + (8407, 142, 20), + (8408, 142, 20), + (8409, 142, 20), + (8410, 142, 20), + (8411, 142, 20), + (8412, 142, 20), + (8413, 142, 20), + (8414, 142, 20), + (8415, 142, 20), + (8416, 142, 20), + (8417, 142, 20), + (8418, 142, 20), + (8419, 142, 20), + (8420, 142, 20), + (8421, 516, 3), + (8427, 254, 3), + (8428, 254, 3), + (8429, 254, 3), + (9103, 1350, 3), + (9104, 1350, 3), + (9105, 1350, 3), + (9106, 1351, 3), + (9107, 1351, 3), + (9108, 1351, 3), + (9112, 1390, 3), + (9113, 1390, 3), + (9114, 1390, 3), + (9115, 1391, 3), + (9116, 1391, 3), + (9117, 1391, 3), + (9121, 1370, 3), + (9122, 1370, 3), + (9123, 1370, 3), + (9124, 1371, 3), + (9125, 1371, 3), + (9126, 1371, 3), + (9130, 1380, 3), + (9131, 1380, 3), + (9132, 1380, 3), + (9133, 1381, 3), + (9134, 1381, 3), + (9135, 1381, 3), + (9139, 1470, 3), + (9140, 1470, 3), + (9141, 1470, 3), + (9142, 1471, 3), + (9143, 1471, 3), + (9144, 1471, 3), + (9148, 1480, 3), + (9149, 1480, 3), + (9150, 1480, 3), + (9151, 1481, 3), + (9152, 1481, 3), + (9153, 1481, 3), + (9157, 1490, 3), + (9158, 1490, 3), + (9159, 1490, 3), + (9160, 1491, 3), + (9161, 1491, 3), + (9162, 1491, 3), + (9166, 1460, 3), + (9167, 1460, 3), + (9168, 1460, 3), + (9169, 1461, 3), + (9170, 1461, 3), + (9171, 1461, 3), + (9175, 1450, 3), + (9176, 1450, 3), + (9177, 1450, 3), + (9178, 1451, 3), + (9179, 1451, 3), + (9180, 1451, 3), + (9184, 1440, 3), + (9185, 1440, 3), + (9186, 1440, 3), + (9187, 1441, 3), + (9188, 1441, 3), + (9189, 1441, 3), + (9193, 1420, 3), + (9194, 1420, 3), + (9195, 1420, 3), + (9196, 1421, 3), + (9197, 1421, 3), + (9198, 1421, 3), + (9202, 1430, 3), + (9203, 1430, 3), + (9204, 1430, 3), + (9205, 1431, 3), + (9206, 1431, 3), + (9207, 1431, 3), + (9211, 1400, 3), + (9212, 1400, 3), + (9213, 1400, 3), + (9214, 1401, 3), + (9215, 1401, 3), + (9216, 1401, 3), + (9220, 1360, 3), + (9221, 1360, 3), + (9222, 1360, 3), + (9223, 1361, 3), + (9224, 1361, 3), + (9225, 1361, 3), + (9229, 1500, 3), + (9230, 1500, 3), + (9231, 1500, 3), + (9232, 1501, 3), + (9233, 1501, 3), + (9234, 1501, 3), + (9238, 1410, 3), + (9239, 1410, 3), + (9240, 1410, 3), + (9241, 1411, 3), + (9242, 1411, 3), + (9243, 1411, 3), + (9300, 1300, 3), + (9301, 1300, 3), + (9302, 1300, 3), + (9303, 1300, 6), + (9304, 1300, 6), + (9305, 1300, 6), + (9306, 1300, 9), + (9307, 1300, 9), + (9308, 1300, 9), + (9309, 1313, 3), + (9310, 1313, 3), + (9311, 1313, 3), + (9312, 1313, 6), + (9313, 1313, 6), + (9314, 1313, 6), + (9315, 1313, 9), + (9316, 1313, 9), + (9317, 1313, 9), + (9318, 1302, 3), + (9319, 1302, 3), + (9320, 1302, 3), + (9321, 1302, 6), + (9322, 1302, 6), + (9323, 1302, 6), + (9324, 1302, 9), + (9325, 1302, 9), + (9326, 1302, 9), + (9327, 1303, 3), + (9328, 1303, 3), + (9329, 1303, 3), + (9330, 1303, 6), + (9331, 1303, 6), + (9332, 1303, 6), + (9333, 1303, 9), + (9334, 1303, 9), + (9335, 1303, 9), + (9336, 1301, 3), + (9337, 1301, 3), + (9338, 1301, 3), + (9339, 1301, 6), + (9340, 1301, 6), + (9341, 1301, 6), + (9342, 1301, 9), + (9343, 1301, 9), + (9344, 1301, 9), + (9345, 1312, 3), + (9346, 1312, 3), + (9347, 1312, 3), + (9348, 1312, 6), + (9349, 1312, 6), + (9350, 1312, 6), + (9351, 1312, 9), + (9352, 1312, 9), + (9353, 1312, 9), + (9354, 1315, 3), + (9355, 1315, 3), + (9356, 1315, 3), + (9357, 1315, 6), + (9358, 1315, 6), + (9359, 1315, 6), + (9360, 1315, 9), + (9361, 1315, 9), + (9362, 1315, 9), + (9363, 1310, 3), + (9364, 1310, 3), + (9365, 1310, 3), + (9366, 1310, 6), + (9367, 1310, 6), + (9368, 1310, 6), + (9369, 1310, 9), + (9370, 1310, 9), + (9371, 1310, 9), + (9372, 1311, 3), + (9373, 1311, 3), + (9374, 1311, 3), + (9375, 1311, 6), + (9376, 1311, 6), + (9377, 1311, 6), + (9378, 1311, 9), + (9379, 1311, 9), + (9380, 1311, 9), + (9381, 1309, 3), + (9382, 1309, 3), + (9383, 1309, 3), + (9384, 1309, 6), + (9385, 1309, 6), + (9386, 1309, 6), + (9387, 1309, 9), + (9388, 1309, 9), + (9389, 1309, 9), + (9390, 1308, 3), + (9391, 1308, 3), + (9392, 1308, 3), + (9393, 1308, 6), + (9394, 1308, 6), + (9395, 1308, 6), + (9396, 1308, 9), + (9397, 1308, 9), + (9398, 1308, 9), + (9399, 1307, 3), + (9400, 1307, 3), + (9401, 1307, 3), + (9402, 1307, 6), + (9403, 1307, 6), + (9404, 1307, 6), + (9405, 1307, 9), + (9406, 1307, 9), + (9407, 1307, 9), + (9408, 1304, 3), + (9409, 1304, 3), + (9410, 1304, 3), + (9411, 1304, 6), + (9412, 1304, 6), + (9413, 1304, 6), + (9414, 1304, 9), + (9415, 1304, 9), + (9416, 1304, 9), + (9417, 1305, 3), + (9418, 1305, 3), + (9419, 1305, 3), + (9420, 1305, 6), + (9421, 1305, 6), + (9422, 1305, 6), + (9423, 1305, 9), + (9424, 1305, 9), + (9425, 1305, 9), + (9426, 1306, 3), + (9427, 1306, 3), + (9428, 1306, 3), + (9429, 1306, 6), + (9430, 1306, 6), + (9431, 1306, 6), + (9432, 1306, 9), + (9433, 1306, 9), + (9434, 1306, 9), + (9435, 1314, 3), + (9436, 1314, 3), + (9437, 1314, 3), + (9438, 1314, 6), + (9439, 1314, 6), + (9440, 1314, 6), + (9441, 1314, 9), + (9442, 1314, 9), + (9443, 1314, 9), + (9500, 72, 1), + (10016, 19, 3), + (10017, 19, 3), + (10018, 19, 3), + (10030, 558, 1), + (10031, 558, 1), + (10032, 558, 1), + (10038, 19, 3), + (10039, 19, 3), + (10040, 19, 3), + (10041, 358, 3), + (10042, 358, 3), + (10043, 358, 3), + (10047, 6001, 11), + (10048, 6001, 11), + (10049, 6001, 11), + (10064, 82, 3), + (10065, 82, 3), + (10066, 82, 3), + (10067, 82, 3), + (10068, 82, 3), + (10069, 82, 3), + (10070, 278, 5), + (10071, 278, 5), + (10072, 278, 5), + (10073, 278, 5), + (10074, 278, 5), + (10093, 185, 6), + (10105, 170, 3), + (10106, 170, 3), + (10107, 170, 3), + (10108, 170, 3), + (10109, 170, 3), + (10110, 520, 1), + (10111, 520, 1), + (10112, 520, 1), + (10130, 544, 1), + (10131, 544, 1), + (10132, 544, 1), + (10133, 3837, 3), + (10134, 3837, 3), + (10135, 3837, 3), + (10136, 259, 3), + (10137, 259, 3), + (10138, 259, 3), + (10150, 187, 5), + (10151, 187, 5), + (10152, 187, 5), + (10153, 553, 1), + (10154, 553, 1), + (10155, 553, 1), + (10165, 439, 3), + (10166, 439, 3), + (10167, 439, 3), + (10176, 171, 1), + (10177, 171, 1), + (10178, 171, 1), + (10182, 177, 1), + (10183, 177, 1), + (10184, 177, 1), + (10185, 177, 1), + (10186, 177, 1), + (10197, 447, 3), + (10198, 447, 3), + (10199, 447, 3), + (10203, 524, 1), + (10204, 524, 1), + (10205, 524, 1), + (10206, 320, 1), + (10207, 320, 1), + (10209, 175, 3), + (10210, 175, 3), + (10211, 175, 3), + (10213, 278, 5), + (10214, 278, 5), + (10215, 278, 5), + (10216, 278, 5), + (10217, 278, 5), + (10249, 208, 1), + (10250, 208, 1), + (10251, 208, 1), + (10255, 784, 1), + (10256, 785, 1), + (10257, 786, 1), + (10258, 787, 1), + (10262, 58, 1), + (10263, 58, 1), + (10264, 58, 1), + (10271, 173, 3), + (10272, 173, 3), + (10273, 173, 3), + (10274, 173, 8), + (10275, 173, 8), + (10276, 173, 8), + (10282, 791, 1), + (10283, 791, 1), + (10284, 791, 1), + (10285, 521, 1), + (10286, 521, 1), + (10287, 521, 1), + (10308, 128, 3), + (10309, 128, 3), + (10310, 128, 3), + (10329, 3701, 1), + (10330, 199, 3), + (10332, 943, 3), + (10336, 941, 1), + (10337, 941, 1), + (10338, 941, 1), + (10354, 6001, 17), + (10389, 841, 1), + (10390, 841, 1), + (10391, 841, 1), + (10396, 705, 4), + (10397, 1092, 4), + (10398, 3701, 1), + (10399, 3701, 1), + (10413, 207, 1), + (10414, 207, 1), + (10415, 207, 1), + (10416, 207, 1), + (10417, 207, 1), + (10426, 185, 18), + (10427, 519, 15), + (10428, 173, 8), + (10429, 173, 8), + (10430, 173, 8), + (10431, 791, 1), + (10432, 791, 1), + (10433, 791, 1), + (10434, 792, 1), + (10435, 792, 1), + (10436, 792, 1), + (10450, 19, 9), + (10451, 19, 9), + (10452, 19, 9), + (10456, 3800, 1), + (10457, 3800, 1), + (10458, 3800, 1), + (10462, 396, 1), + (10463, 396, 1), + (10464, 391, 9), + (10465, 391, 9), + (10466, 391, 9), + (10468, 19, 9), + (10469, 19, 9), + (10470, 558, 1), + (10471, 558, 1), + (10472, 558, 1), + (10473, 26, 3), + (10474, 26, 3), + (10475, 26, 3), + (10476, 26, 3), + (10477, 26, 3), + (10510, 705, 1), + (10511, 185, 3), + (10512, 185, 3), + (10513, 185, 3), + (10514, 519, 3), + (10515, 519, 3), + (10516, 519, 3), + (10519, 3213, 1), + (10522, 3732, 1), + (10527, 1400, 1), + (10532, 1401, 1), + (10537, 1402, 1), + (10548, 605, 13), + (10554, 263, 1), + (10555, 263, 1), + (10556, 263, 1), + (10557, 1120, 1), + (10558, 1120, 1), + (10559, 1120, 1), + (10560, 1120, 1), + (10561, 3551, 1), + (10562, 3551, 1), + (10563, 3551, 1), + (10564, 217, 1), + (10565, 217, 1), + (10566, 217, 1), + (10576, 109, 1), + (10579, 3646, 1), + (10580, 3646, 1), + (10588, 601, 1), + (10589, 601, 1), + (10590, 601, 1), + (10591, 601, 1), + (10592, 601, 1), + (10610, 265, 5), + (10611, 265, 5), + (10612, 265, 5), + (10621, 180, 3), + (10622, 180, 3), + (10623, 30, 3), + (10624, 30, 3), + (10625, 30, 3), + (10626, 702, 1), + (10646, 3826, 1), + (10657, 276, 3), + (10658, 276, 3), + (10659, 276, 3), + (10666, 98, 1), + (10667, 98, 1), + (10668, 98, 1), + (10670, 19, 9), + (10708, 6001, 11), + (10709, 6001, 11), + (10710, 6001, 11), + (10711, 30, 6), + (10712, 30, 6), + (10713, 30, 6), + (10714, 873, 1), + (10715, 873, 1), + (10717, 184, 1), + (10718, 184, 1), + (10719, 872, 1), + (10720, 872, 1), + (10721, 872, 1), + (10722, 778, 1), + (10723, 778, 1), + (10724, 778, 1), + (10725, 778, 1), + (10726, 778, 1), + (10727, 2235, 1), + (10728, 2235, 1), + (10730, 870, 1), + (10731, 870, 1), + (10733, 219, 1), + (10734, 219, 1), + (10735, 219, 1), + (10750, 286, 1), + (10751, 286, 1), + (10752, 7108, 1), + (10753, 286, 1), + (10789, 10424, 1), + (10790, 705, 4), + (10791, 1092, 4), + (10800, 462, 3), + (10801, 462, 3), + (10802, 462, 3), + (10903, 125, 1), + (10904, 125, 1), + (10905, 125, 1), + (10909, 7007, 1), + (10910, 7007, 1), + (10911, 7007, 1), + (10915, 823, 3), + (10916, 823, 3), + (10917, 823, 3), + (10951, 447, 3), + (10952, 447, 3), + (10953, 447, 3), + (10954, 662, 3), + (10955, 662, 3), + (10956, 662, 3), + (11011, 3710, 1), + (11012, 3710, 1), + (11013, 3710, 1), + (11014, 3899, 1), + (11015, 3899, 1), + (11016, 3899, 1), + (11020, 3899, 1), + (11050, 452, 3), + (11051, 452, 3), + (11052, 452, 3), + (11053, 500, 3), + (11054, 500, 3), + (11059, 452, 3), + (11060, 452, 3), + (11077, 986, 1), + (11078, 988, 1), + (11079, 987, 1), + (11088, 505, 1), + (11089, 505, 1), + (11090, 505, 1), + (11091, 505, 1), + (12422, 1202, 1), + (12432, 23, 3), + (12433, 23, 3), + (12434, 23, 3), + (12435, 23, 3), + (12436, 23, 3), + (12437, 23, 3), + (12475, 7003, 1), + (12476, 7003, 1), + (12477, 7003, 1), + (12478, 3705, 9), + (12479, 3705, 9), + (12480, 3705, 9), + (12523, 114, 6), + (12526, 215, 6), + (12527, 215, 6), + (12528, 215, 6), + (12529, 358, 3), + (12530, 358, 3), + (12531, 358, 3), + (12553, 23, 3), + (12554, 23, 3), + (12555, 23, 3), + (12556, 23, 3), + (12557, 23, 3), + (12558, 23, 3), + (12582, 9400, 1), + (12583, 9400, 1), + (12584, 9400, 1), + (12587, 9403, 1), + (12588, 9403, 1), + (12589, 9403, 1), + (12600, 3514, 1), + (12606, 13, 5), + (12610, 310, 3), + (12626, 1410, 3), + (12629, 1411, 3), + (12632, 1412, 3), + (12635, 428, 2), + (12639, 519, 3), + (12642, 185, 3), + (12645, 519, 1), + (12646, 185, 1), + (12664, 3728, 1), + (12673, 420, 1), + (12677, 17, 3), + (12679, 276, 3), + (12680, 276, 3), + (12681, 276, 3), + (12697, 30, 6), + (12698, 30, 6), + (12699, 30, 6), + (12713, 8202, 1), + (12714, 8202, 1), + (12715, 8202, 1), + (12716, 3702, 1), + (12717, 3702, 1), + (12718, 3702, 1), + (12719, 3702, 1), + (12720, 3506, 1), + (12721, 3506, 1), + (12722, 3506, 1), + (12723, 3506, 1), + (12727, 359, 3), + (12728, 359, 3), + (12729, 359, 3), + (12730, 941, 1), + (12731, 941, 1), + (12732, 941, 1), + (12733, 943, 3), + (12734, 259, 3), + (12735, 259, 3), + (12736, 259, 3), + (12737, 3701, 1), + (12738, 3701, 1), + (12739, 3701, 1), + (12749, 30, 1), + (12750, 30, 1), + (12751, 30, 1), + (12757, 68, 1), + (12758, 68, 1), + (12759, 68, 1), + (12760, 175, 3), + (12761, 175, 3), + (12762, 175, 3), + (12773, 1580, 1), + (12774, 1580, 1), + (12775, 1580, 1), + (12776, 1580, 1), + (12777, 1580, 1), + (12779, 826, 1), + (12780, 826, 1), + (12781, 826, 1), + (12782, 826, 1), + (12783, 826, 1), + (12784, 826, 1), + (12798, 278, 5), + (12799, 278, 5), + (12800, 278, 5), + (12831, 128, 1), + (12834, 128, 1), + (12835, 128, 1), + (12840, 3817, 1), + (12841, 3817, 1), + (12849, 8303, 1), + (12860, 23, 3), + (12863, 23, 3), + (12865, 1155, 1), + (12866, 639, 1), + (12867, 6106, 6), + (12871, 452, 3), + (12872, 452, 3), + (12874, 451, 1), + (12876, 7003, 1), + (12877, 7003, 1), + (12878, 7003, 1), + (12881, 172, 1), + (12886, 304, 5), + (12887, 303, 5), + (12888, 305, 5), + (12889, 501, 1), + (12890, 507, 1), + (12892, 509, 3), + (12894, 1122, 1), + (12899, 57, 1), + (12900, 57, 1), + (12902, 1380, 1), + (12903, 1380, 1), + (12907, 1381, 1), + (12908, 1381, 1), + (12912, 1382, 1), + (12913, 1382, 1), + (12934, 173, 3), + (12956, 784, 1), + (12957, 786, 1), + (12958, 787, 1), + (12959, 785, 1), + (12964, 596, 1), + (12965, 597, 1), + (12968, 1041, 1), + (12969, 1041, 1), + (12970, 1041, 1), + (12977, 1041, 1), + (12978, 1041, 1), + (12979, 1041, 1), + (12980, 1041, 1), + (12981, 1041, 1), + (12992, 707, 4), + (12993, 707, 4), + (12994, 707, 4), + (13001, 9504, 1), + (13002, 9504, 1), + (13003, 9504, 1), + (13004, 153, 9), + (13005, 171, 1), + (13006, 171, 1), + (13007, 171, 1), + (13008, 859, 1), + (13009, 3730, 1), + (13010, 47, 1), + (13011, 47, 1), + (13012, 47, 1), + (13013, 446, 1), + (13014, 446, 1), + (13015, 446, 1), + (13017, 3815, 10), + (13018, 3815, 10), + (13019, 3815, 10), + (13023, 309, 6), + (13055, 8400, 1), + (13067, 643, 1), + (13072, 3514, 1), + (13073, 3514, 1), + (13074, 310, 6), + (13075, 310, 6), + (13076, 310, 6), + (13077, 311, 3), + (13078, 311, 3), + (13090, 20, 1), + (13092, 82, 1), + (13093, 82, 1), + (13094, 82, 1), + (13104, 87, 1), + (13105, 87, 1), + (13106, 87, 1), + (13130, 1685, 1), + (13140, 391, 9), + (13141, 391, 9), + (13142, 391, 9), + (13143, 500, 1), + (13144, 500, 1), + (13145, 500, 1), + (13146, 494, 1), + (13147, 494, 1), + (13148, 494, 1), + (13155, 705, 1), + (13166, 822, 1), + (13167, 822, 1), + (13168, 822, 1), + (13170, 128, 3), + (13190, 187, 5), + (13191, 187, 5), + (13192, 187, 5), + (13196, 3837, 3), + (13197, 3837, 3), + (13198, 3837, 3), + (13203, 199, 3), + (13204, 8261, 1), + (13205, 8261, 1), + (13206, 8261, 1), + (13213, 439, 3), + (13214, 439, 3), + (13215, 439, 3), + (13216, 439, 3), + (13217, 439, 3), + (13222, 3514, 1), + (13223, 3514, 1), + (13241, 173, 8), + (13244, 46, 1), + (13247, 409, 3), + (13253, 58, 1), + (13254, 58, 1), + (13255, 58, 1), + (13256, 224, 3), + (13257, 224, 3), + (13258, 224, 3), + (13262, 102, 1), + (13263, 102, 1), + (13264, 102, 1), + (13271, 1685, 1), + (13272, 1685, 1), + (13295, 20, 1), + (13308, 26, 3), + (13326, 310, 6), + (13326, 1685, 1), + (13332, 30, 6), + (13363, 1685, 1), + (13383, 1685, 1), + (13385, 1685, 1), + (13388, 1685, 1), + (13389, 1685, 1), + (13396, 1685, 1), + (13396, 3815, 10), + (13401, 1685, 1), + (13404, 259, 6), + (13404, 1685, 1), + (13410, 1685, 1), + (13413, 1685, 1), + (13415, 1092, 1), + (13415, 1685, 1), + (13416, 626, 1), + (13416, 1685, 1), + (13419, 1685, 1), + (13425, 1685, 1), + (13444, 1685, 1), + (13447, 1685, 1), + (13449, 1685, 1), + (13449, 11073, 1), + (13454, 1685, 1), + (13463, 458, 1), + (13463, 1685, 1), + (13466, 1685, 1), + (13467, 1685, 1), + (13468, 1685, 1), + (13472, 1685, 1), + (13474, 444, 1), + (13474, 1685, 1), + (13477, 1685, 1), + (13483, 1685, 1), + (13484, 1685, 1), + (13485, 1685, 1), + (13490, 1685, 1), + (13492, 199, 3), + (13492, 1685, 1), + (13493, 1685, 1), + (13496, 187, 5), + (13496, 1685, 1), + (13499, 30, 1), + (13499, 1685, 1), + (13502, 259, 3), + (13502, 1685, 1), + (13505, 1685, 1), + (13508, 1685, 1), + (13511, 1685, 1), + (13511, 3837, 3), + (13514, 1685, 1), + (13517, 941, 1), + (13517, 1685, 1), + (13520, 1685, 1), + (13521, 1685, 1), + (13524, 1685, 1), + (13527, 1685, 1), + (13528, 1685, 1), + (13529, 1685, 1), + (13530, 1685, 1), + (13533, 1685, 1), + (13542, 184, 3), + (13542, 1685, 1), + (13545, 1685, 1), + (13546, 1685, 1), + (13549, 1685, 1), + (13556, 1685, 1), + (13562, 872, 1), + (13562, 1685, 1), + (13565, 1685, 1), + (13565, 3804, 1), + (13568, 876, 1), + (13568, 1685, 1), + (13571, 1685, 1), + (13575, 1685, 1), + (13578, 1685, 1), + (13584, 1685, 1), + (13585, 1685, 1), + (13585, 3826, 1), + (13586, 1685, 1), + (13589, 30, 3), + (13589, 1685, 1), + (13590, 30, 3), + (13590, 1685, 1), + (13592, 702, 1), + (13592, 1685, 1), + (13595, 1685, 1), + (13595, 6001, 11), + (13598, 1685, 1), + (13601, 1685, 1), + (13604, 1685, 1), + (13607, 1685, 1), + (13610, 1685, 1), + (13613, 1685, 1), + (13616, 1685, 1), + (13617, 1685, 1), + (13618, 1685, 1), + (13619, 1685, 1), + (13621, 278, 5), + (13621, 1685, 1), + (13624, 1685, 1), + (13627, 1685, 1), + (13628, 1685, 1), + (13630, 1685, 1), + (13633, 1685, 1), + (13646, 1668, 1), + (13646, 1685, 1), + (13650, 1685, 1), + (13653, 1685, 1), + (13656, 1685, 1), + (13663, 1685, 1), + (13667, 500, 1), + (13667, 1685, 1), + (13670, 1685, 1), + (13673, 1158, 1), + (13674, 7754, 1), + (13675, 278, 5), + (13675, 1685, 1), + (13678, 1685, 1), + (13682, 1685, 1), + (13683, 1685, 1), + (13684, 1685, 1), + (13685, 1685, 1), + (13686, 1685, 1), + (13687, 1685, 1), + (13688, 1685, 1), + (13689, 751, 1), + (13689, 1685, 1), + (13692, 1685, 1), + (13693, 1685, 1), + (13695, 1685, 1), + (13698, 784, 1), + (13698, 1685, 1), + (13701, 785, 1), + (13701, 1685, 1), + (13704, 787, 1), + (13704, 1685, 1), + (13707, 58, 1), + (13707, 1685, 1), + (13710, 1685, 1), + (13713, 1685, 1), + (13718, 1685, 1), + (13720, 1685, 1), + (13723, 58, 1), + (13723, 1685, 1), + (13726, 1685, 1), + (13727, 25, 3), + (13727, 1685, 1), + (13734, 217, 1), + (13734, 1685, 1), + (13753, 534, 1), + (13753, 1685, 1), + (13758, 602, 1), + (13758, 1685, 1), + (13763, 1685, 1), + (13764, 535, 1), + (13764, 1685, 1), + (13767, 1685, 1), + (13770, 1685, 1), + (13771, 1685, 1), + (13773, 310, 3), + (13773, 1685, 1), + (13774, 310, 3), + (13774, 1685, 1), + (13775, 310, 3), + (13775, 1685, 1), + (13779, 1685, 1), + (13782, 439, 3), + (13782, 1685, 1), + (13785, 1685, 1), + (13789, 1685, 1), + (13790, 1685, 1), + (13792, 1685, 1), + (13795, 1685, 1), + (13798, 1685, 1), + (13804, 1685, 1), + (13807, 1685, 1), + (13810, 1685, 1), + (13813, 1685, 1), + (13816, 1685, 1), + (13819, 1685, 1), + (13820, 1685, 1), + (13823, 1685, 1), + (13826, 1685, 1), + (13829, 1685, 1), + (13832, 1685, 1), + (13835, 1685, 1), + (13838, 1685, 1), + (13841, 1685, 1), + (13845, 1685, 1), + (13872, 1685, 1), + (13873, 961, 1), + (13873, 1685, 1), + (13878, 609, 1), + (13878, 1685, 1), + (13881, 387, 1), + (13881, 1685, 1), + (13889, 1012, 1), + (13889, 1685, 1), + (13899, 1685, 1), + (13905, 1685, 1), + (13908, 1685, 1), + (13911, 1685, 1), + (13914, 1685, 1), + (13917, 606, 1), + (13917, 1685, 1), + (13920, 125, 1), + (13920, 1685, 1), + (13933, 142, 20), + (13943, 142, 20), + (13953, 142, 20), + (13963, 142, 20), + (13973, 142, 20), + (13983, 142, 20), + (13993, 142, 20), + (14003, 1685, 1), + (14006, 30, 6), + (14006, 1685, 1), + (14009, 1685, 1), + (14010, 1685, 1), + (14011, 1685, 1), + (14011, 10394, 1), + (14016, 1685, 1), + (14016, 6001, 17), + (14018, 1684, 1), + (14019, 1685, 1), + (14026, 1685, 1), + (14029, 1685, 1), + (14032, 1685, 1), + (14037, 804, 1), + (14037, 1685, 1), + (14040, 300, 1), + (14040, 1685, 1), + (14043, 1685, 1), + (14046, 87, 1), + (14046, 1685, 1), + (14051, 1685, 1), + (14052, 1685, 1), + (14053, 1685, 1), + (14054, 1685, 1), + (14055, 1685, 1), + (14056, 1685, 1), + (14059, 1685, 1), + (14062, 821, 1), + (14062, 1685, 1), + (14065, 1685, 1), + (14065, 3215, 1), + (14068, 1685, 1), + (14068, 3216, 1), + (14071, 1685, 1), + (14076, 1685, 1), + (14080, 1685, 1), + (14081, 1685, 1), + (14082, 1685, 1), + (14085, 741, 1), + (14085, 1685, 1), + (14088, 769, 1), + (14088, 1685, 1), + (14091, 701, 1), + (14091, 1685, 1), + (14094, 1685, 1), + (14097, 1685, 1), + (14100, 1685, 1), + (14101, 1685, 1), + (14111, 1685, 1), + (14112, 1685, 1), + (14115, 872, 1), + (14115, 1685, 1), + (14129, 1685, 1), + (14130, 1685, 1), + (14132, 1685, 1), + (14132, 2234, 1), + (14135, 1685, 1), + (14138, 1685, 1), + (14139, 1685, 1), + (14140, 1685, 1), + (14141, 1685, 1), + (14144, 1685, 1), + (14144, 3515, 1), + (14148, 1685, 1), + (14151, 1685, 1), + (14154, 276, 3), + (14154, 1685, 1), + (14157, 1685, 1), + (14160, 1685, 1), + (14160, 7001, 1), + (14163, 1685, 1), + (14163, 7001, 1), + (14166, 945, 1), + (14166, 1685, 1), + (14169, 1685, 1), + (14173, 1685, 1), + (14176, 1685, 1), + (14176, 8261, 1), + (14179, 359, 1), + (14179, 1685, 1), + (14180, 1685, 1), + (14181, 1685, 1), + (14181, 3837, 12), + (14186, 809, 5), + (14186, 1685, 1), + (14189, 1685, 1), + (14192, 1685, 1), + (14196, 465, 3), + (14196, 1685, 1), + (14199, 499, 1), + (14199, 1685, 1), + (14200, 1685, 1), + (14203, 1685, 1), + (14206, 1685, 1), + (14207, 1685, 1), + (14208, 1685, 1), + (14208, 7689, 1), + (14209, 1685, 1), + (14210, 1685, 1), + (14213, 1065, 1), + (14213, 1685, 1), + (14218, 1685, 1), + (14221, 1685, 1), + (14222, 224, 3), + (14222, 1685, 1), + (14223, 47, 1), + (14223, 1685, 1), + (14224, 1685, 1), + (14225, 177, 1), + (14225, 1685, 1), + (14229, 135, 1), + (14231, 1685, 1), + (14232, 1685, 1), + (14233, 1685, 1), + (14234, 1685, 1), + (14237, 1685, 1), + (14238, 1041, 1), + (14238, 1685, 1), + (14241, 386, 1), + (14241, 1685, 1), + (14244, 1685, 1), + (14249, 1685, 1), + (14254, 386, 1), + (14254, 1685, 1), + (14256, 1685, 1), + (14259, 384, 1), + (14259, 1685, 1), + (14265, 939, 1), + (14265, 1685, 1), + (14272, 1685, 1), + (14273, 1685, 1), + (14274, 1685, 1), + (14275, 1685, 1), + (14278, 985, 1), + (14278, 1685, 1), + (14280, 57, 1), + (14280, 1685, 1), + (14281, 291, 1), + (14281, 1685, 1), + (14282, 1685, 1), + (14282, 3812, 1), + (14283, 1685, 1), + (14286, 753, 1), + (14286, 1685, 1), + (14289, 1685, 1), + (14292, 207, 1), + (14292, 1685, 1), + (14295, 1685, 1), + (14295, 3816, 1), + (14304, 1685, 1), + (14304, 8341, 1), + (14307, 1685, 1), + (14308, 431, 1), + (14308, 1685, 1), + (14311, 430, 1), + (14311, 1685, 1), + (14314, 901, 1), + (14314, 1685, 1), + (14318, 1685, 1), + (14318, 7703, 1), + (14321, 1685, 1), + (14322, 1685, 1), + (14323, 1685, 1), + (14324, 1685, 1), + (14328, 1154, 1), + (14328, 1685, 1), + (14331, 515, 1), + (14331, 1685, 1), + (14338, 308, 3), + (14338, 1685, 1), + (14341, 748, 1), + (14341, 1685, 1), + (14346, 1685, 1), + (14349, 215, 6), + (14352, 175, 3), + (14352, 1685, 1), + (14355, 1685, 1), + (14358, 1685, 1), + (14359, 1685, 1), + (14360, 1685, 1), + (14361, 23, 3), + (14364, 173, 1), + (14364, 1685, 1), + (14372, 1685, 1), + (14690, 756, 1), + (14733, 786, 1), + (15100, 467, 1), + (15105, 131, 1), + (15113, 130, 1), + (15120, 800, 1), + (15132, 660, 1), + (15135, 660, 1), + (15141, 30, 3), + (15147, 701, 13), + (15154, 659, 1), + (15158, 657, 1), + (15159, 770, 1), + (15162, 659, 1), + (15168, 657, 1), + (15174, 9400, 1), + (15179, 7755, 1), + (15182, 9403, 1), + (15204, 390, 1), + (15207, 323, 1), + (15210, 1041, 1), + (15220, 622, 1), + (15223, 624, 1), + (15226, 621, 1), + (15229, 623, 1), + (15253, 462, 1), + (15258, 184, 1), + (15270, 7003, 1), + (15280, 778, 1), + (15295, 2234, 1), + (15314, 36, 1), + (15317, 35, 1), + (15320, 558, 1), + (15341, 19, 3), + (15342, 8500, 1), + (15344, 38, 1), + (15348, 9504, 1), + (15356, 149, 1), + (15358, 151, 1), + (15359, 50, 1), + (15363, 447, 3), + (15371, 3729, 1), + (15377, 638, 1), + (15389, 935, 1), + (15396, 23, 3), + (15397, 494, 3), + (15403, 8604, 1), + (15406, 3817, 1), + (15414, 241, 1), + (15421, 245, 3), + (15424, 247, 1), + (15424, 982, 6), + (15466, 3551, 1), + (15469, 1120, 1), + (15472, 521, 1), + (15478, 578, 1), + (15481, 398, 24), + (15482, 261, 1), + (15485, 495, 9), + (15486, 534, 3), + (15526, 3702, 1), + (15549, 244, 1), + (15552, 3710, 1), + (15571, 351, 1), + (15579, 826, 1), + (15591, 2899, 1), + (15598, 759, 1), + (15598, 1150, 1), + (15598, 1151, 1), + (15598, 1152, 1), + (15605, 639, 1), + (15606, 160, 4), + (15622, 23, 3), + (15632, 789, 1), + (15639, 749, 1), + (15640, 822, 2), + (15746, 804, 1), + (15778, 87, 1), + (15833, 2045, 1), + (15836, 463, 1), + (15839, 19, 9), + (15855, 153, 9), + (15891, 988, 1), + (15893, 987, 1), + (15895, 986, 1), + (15961, 3701, 1), + (16062, 263, 1), + (16071, 2209, 3), + (16087, 53, 1), + (16094, 43, 1), + (16103, 7703, 1), + (16105, 684, 1), + (16106, 684, 1), + (16107, 684, 1), + (16117, 309, 6), + (16124, 3711, 1), + (16128, 3711, 1), + (16131, 73, 1), + (16137, 10394, 1), + (16140, 489, 1), + (16156, 137, 1), + (16159, 2045, 1), + (16163, 260, 1), + (16163, 7747, 1), + (16164, 358, 3), + (16176, 337, 1), + (16180, 584, 1), + (16185, 9202, 1), + (16185, 9203, 1), + (16189, 823, 3), + (16203, 403, 1), + (16211, 152, 1), + (16218, 403, 1), + (16221, 393, 1), + (16225, 219, 1), + (16238, 443, 1), + (16246, 245, 3), + (16249, 17, 3), + (16257, 470, 20), + (16266, 790, 1), + (16287, 669, 1), + (16297, 553, 1), + (16300, 668, 1), + (16303, 3506, 1), + (16306, 777, 1), + (16336, 1257, 1), + (16339, 773, 1), + (16342, 1257, 1), + (16371, 60, 1), + (16380, 2061, 1), + (16386, 2064, 1), + (16392, 2202, 1), + (16489, 23, 3), + (16604, 180, 3), + (16644, 747, 1), + (16666, 742, 1), + (16730, 82, 3), + (16745, 706, 1), + (17206, 601, 1), + (17209, 111, 1), + (17212, 10367, 1), + (17218, 744, 1), + (17235, 3826, 1), + (17280, 8205, 1), + (17281, 359, 1), + (17288, 41, 1), + (17289, 1062, 1), + (17307, 2047, 1), + (17317, 1270, 1), + (17334, 1041, 1), + (17336, 148, 1), + (17339, 760, 1), + (17342, 148, 1), + (17350, 170, 3), + (17361, 405, 1), + (17361, 426, 1), + (17364, 935, 4), + (17375, 1239, 1), + (17391, 98, 1), + (17409, 120, 1), + (17414, 673, 1), + (17436, 372, 1), + (17439, 372, 1), + (17441, 309, 3), + (17476, 462, 3), + (17492, 840, 1), + (17495, 9702, 1), + (17515, 3841, 1), + (17517, 441, 1), + (17522, 764, 1), + (17533, 677, 1), + (17549, 8700, 1); + +DROP TABLE IF EXISTS `character_alternate_abilities`; +CREATE TABLE IF NOT EXISTS `character_alternate_abilities` ( + `id` int(11) unsigned NOT NULL DEFAULT '0', + `aa_id` smallint(11) unsigned NOT NULL DEFAULT '0', + `aa_value` smallint(11) unsigned NOT NULL DEFAULT '0', + `charges` smallint(11) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`,`aa_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; From 25c6ddd6318f77672341f5670e7896dea518ebd7 Mon Sep 17 00:00:00 2001 From: KimLS Date: Thu, 2 Jul 2015 20:07:09 -0700 Subject: [PATCH 47/48] Scary final SQL stuff for aa branch --- common/version.h | 2 +- utils/sql/db_update_manifest.txt | 1 + .../sql/git/required/2015_07_02_aa_rework.sql | 20 +++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/common/version.h b/common/version.h index 1813f77c3..00f74e801 100644 --- a/common/version.h +++ b/common/version.h @@ -30,7 +30,7 @@ Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt */ -#define CURRENT_BINARY_DATABASE_VERSION 9083 +#define CURRENT_BINARY_DATABASE_VERSION 9084 #define COMPILE_DATE __DATE__ #define COMPILE_TIME __TIME__ #ifndef WIN32 diff --git a/utils/sql/db_update_manifest.txt b/utils/sql/db_update_manifest.txt index e7aa46221..1a67e2893 100644 --- a/utils/sql/db_update_manifest.txt +++ b/utils/sql/db_update_manifest.txt @@ -337,6 +337,7 @@ 9081|2015_05_23_dbstr_us.sql|SHOW TABLES LIKE 'db_str'|empty| 9082|2015_05_25_npc_types_texture_fields.sql|SHOW COLUMNS FROM `npc_types` LIKE 'armtexture'|empty| 9083|2015_06_07_aa_update.sql|SHOW COLUMNS FROM `character_alternate_abilities` LIKE 'charges'|empty| +9084|2015_07_92_aa_rework.sql|SHOW TABLES LIKE 'aa_ranks'|empty| # Upgrade conditions: # This won't be needed after this system is implemented, but it is used database that are not diff --git a/utils/sql/git/required/2015_07_02_aa_rework.sql b/utils/sql/git/required/2015_07_02_aa_rework.sql index 41a67f7c0..8a585113c 100644 --- a/utils/sql/git/required/2015_07_02_aa_rework.sql +++ b/utils/sql/git/required/2015_07_02_aa_rework.sql @@ -20649,6 +20649,7 @@ INSERT INTO `aa_rank_prereqs` (`rank_id`, `aa_id`, `points`) VALUES (17533, 677, 1), (17549, 8700, 1); +RENAME TABLE `character_alternate_abilities` TO `character_alternate_abilities_old`; DROP TABLE IF EXISTS `character_alternate_abilities`; CREATE TABLE IF NOT EXISTS `character_alternate_abilities` ( `id` int(11) unsigned NOT NULL DEFAULT '0', @@ -20657,3 +20658,22 @@ CREATE TABLE IF NOT EXISTS `character_alternate_abilities` ( `charges` smallint(11) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`,`aa_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +ALTER TABLE `character_data` ADD COLUMN `aa_points_spent_old` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `aa_points_spent`; +ALTER TABLE `character_data` ADD COLUMN `aa_points_old` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `aa_points`; + +UPDATE `character_data` SET `aa_points_spent_old` = `aa_points_spent`, `aa_points_old` = `aa_points`; + + -- sanity checks since if someone never logged in after the db conversion there is junk data + -- I don't have a good way of addressing this so I keep the old data in aa_points_spent_old and aa_points_old and character_alternate_abilities_old + -- for anyone who wants to personally polish up their player data +UPDATE `character_data` SET `aa_points_spent` = 2700 WHERE `aa_points_spent` > 2700; +UPDATE `character_data` SET `aa_points` = 5000 WHERE `aa_points` > 5000; + + -- another sanity check, give people a few levels below 51 to keep their points +UPDATE `character_data` SET `aa_points_spent` = 0 WHERE `level` < 48; +UPDATE `character_data` SET `aa_points` = 0 WHERE `level` < 48; + + -- aa refund here +UPDATE `character_data` SET `aa_points` = `aa_points_spent` + `aa_points`; +UPDATE `character_data` SET `aa_points_spent` = 0; From 233b096c17aee4fe521a5898f407b8f2f2a7add2 Mon Sep 17 00:00:00 2001 From: KimLS Date: Thu, 2 Jul 2015 20:10:26 -0700 Subject: [PATCH 48/48] 0 != 9 and i suck at manifests cause of that fact --- utils/sql/db_update_manifest.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/sql/db_update_manifest.txt b/utils/sql/db_update_manifest.txt index 1a67e2893..08b3994fa 100644 --- a/utils/sql/db_update_manifest.txt +++ b/utils/sql/db_update_manifest.txt @@ -337,7 +337,7 @@ 9081|2015_05_23_dbstr_us.sql|SHOW TABLES LIKE 'db_str'|empty| 9082|2015_05_25_npc_types_texture_fields.sql|SHOW COLUMNS FROM `npc_types` LIKE 'armtexture'|empty| 9083|2015_06_07_aa_update.sql|SHOW COLUMNS FROM `character_alternate_abilities` LIKE 'charges'|empty| -9084|2015_07_92_aa_rework.sql|SHOW TABLES LIKE 'aa_ranks'|empty| +9084|2015_07_02_aa_rework.sql|SHOW TABLES LIKE 'aa_ranks'|empty| # Upgrade conditions: # This won't be needed after this system is implemented, but it is used database that are not