diff --git a/CHANGELOG.md b/CHANGELOG.md index f5cae613d..70eedf0bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,488 @@ +## [22.15.3] - 06/19/2023 + +### Fixes + +* Fix improper condition in Water LOS checks ([#3426](https://github.com/EQEmu/Server/pull/3426)) @Kinglykrab 2023-06-19 + +## [22.15.2] - 06/19/2023 + +### Database + +* Fix multi-statement error reporting ([#3425](https://github.com/EQEmu/Server/pull/3425)) @Akkadius 2023-06-19 + +## [22.15.1] - 06/19/2023 + +### Schema + +* Add `chatchannel_reserved_names` table to `database_schema.h` + +## [22.15.0] - 06/19/2023 + +### Code + +* Default skill type to Hand to Hand in #npcedit meleetype ([#3422](https://github.com/EQEmu/Server/pull/3422)) @Kinglykrab 2023-06-19 + +### Commands + +* Add missing subcommands to #npcedit ([#3423](https://github.com/EQEmu/Server/pull/3423)) @Kinglykrab 2023-06-19 + +### Database + +* Implement native database migrations in server ([#2857](https://github.com/EQEmu/Server/pull/2857)) @Akkadius 2023-06-19 + +### Fixes + +* Fix possible crash with #npcedit weapon ([#3421](https://github.com/EQEmu/Server/pull/3421)) @Kinglykrab 2023-06-19 + +## [22.14.1] - 06/18/2023 + +### Backups + +* Move world database:dump to use MySQL credentials file ([#3410](https://github.com/EQEmu/Server/pull/3410)) @Akkadius 2023-06-17 + +### Binaries + +* Add support for static linking (portable) binaries ([#3417](https://github.com/EQEmu/Server/pull/3417)) @Akkadius 2023-06-18 + +### CI + +* Build static linux binaries ([#3419](https://github.com/EQEmu/Server/pull/3419)) @Akkadius 2023-06-18 + +### CLI + +* Add `bots:enable` and `bots:disable` commands ([#3415](https://github.com/EQEmu/Server/pull/3415)) @Akkadius 2023-06-17 +* Add `mercs:enable` and `mercs:disable` commands ([#3416](https://github.com/EQEmu/Server/pull/3416)) @Akkadius 2023-06-18 +* Console menu validation fixes ([#3413](https://github.com/EQEmu/Server/pull/3413)) @Akkadius 2023-06-17 + +### Database + +* Add query multi statement execution support ([#3414](https://github.com/EQEmu/Server/pull/3414)) @Akkadius 2023-06-17 + +### Feature + +* Add Water Line of Sight Checks ([#3408](https://github.com/EQEmu/Server/pull/3408)) @nytmyr 2023-06-17 + +### Logging + +* Logging improvements, console silencing, terminal coloring ([#3412](https://github.com/EQEmu/Server/pull/3412)) @Akkadius 2023-06-17 + +### Quest API + +* Add convert_money_to_string() to Perl/Lua ([#3418](https://github.com/EQEmu/Server/pull/3418)) @Kinglykrab 2023-06-18 + +### Strings + +* Add more test cases for string utils ([#3411](https://github.com/EQEmu/Server/pull/3411)) @Akkadius 2023-06-17 + +### Targeting + +* Fix bug when using /tar on invalid target ([#3407](https://github.com/EQEmu/Server/pull/3407)) @noudess 2023-06-17 + +### Telnet + +* Add cross zone/world wide cast and move functionality to Telnet ([#3409](https://github.com/EQEmu/Server/pull/3409)) @Kinglykrab 2023-06-17 + +## [22.13.1] - 06/13/2023 + +### Targeting + +* Revert #3383 ([#3405](https://github.com/EQEmu/Server/pull/3405)) @noudess 2023-06-13 + +## [22.13.0] - 06/12/2023 + +### Code + +* Add GMFind_Struct to packet structures ([#3402](https://github.com/EQEmu/Server/pull/3402)) @Kinglykrab 2023-06-12 +* Remove CHECK_LOS_STEP from zone/common.h ([#3398](https://github.com/EQEmu/Server/pull/3398)) @Kinglykrab 2023-06-12 +* Remove CheckCoordLosNoZLeaps() from zone/entity.cpp and zone/entity.h ([#3384](https://github.com/EQEmu/Server/pull/3384)) @Kinglykrab 2023-06-12 +* Remove CountTempPets() from zone/entity.cpp and zone/entity.h ([#3390](https://github.com/EQEmu/Server/pull/3390)) @Kinglykrab 2023-06-12 +* Remove Evade() from zone/entity.cpp and zone/entity.h ([#3394](https://github.com/EQEmu/Server/pull/3394)) @Kinglykrab 2023-06-12 +* Remove GateAllClients() from zone/entity.cpp and zone/entity.h ([#3391](https://github.com/EQEmu/Server/pull/3391)) @Kinglykrab 2023-06-12 +* Remove GetClient(ip, port) from zone/entity.h ([#3386](https://github.com/EQEmu/Server/pull/3386)) @Kinglykrab 2023-06-12 +* Remove GetClientCount() from zone/entity.cpp and zone/entity.h ([#3392](https://github.com/EQEmu/Server/pull/3392)) @Kinglykrab 2023-06-12 +* Remove GetGroupByBot(), GetRaidByMob(), and GetRaidByLeaderName() from zone/entity.cpp and zone/entity.h ([#3387](https://github.com/EQEmu/Server/pull/3387)) @Kinglykrab 2023-06-12 +* Remove InteractiveChat() and TakenAction() from zone/npc.h ([#3382](https://github.com/EQEmu/Server/pull/3382)) @Kinglykrab 2023-06-12 +* Remove LimitCheckBoth() from zone/entity.cpp and zone/entity.h ([#3393](https://github.com/EQEmu/Server/pull/3393)) @Kinglykrab 2023-06-12 +* Remove NPC::AddCash() from npc.cpp/npc.h ([#3380](https://github.com/EQEmu/Server/pull/3380)) @Kinglykrab 2023-06-09 +* Remove RemoveMob() and RemoveRaid() from zone/entity.cpp and zone/entity.h ([#3389](https://github.com/EQEmu/Server/pull/3389)) @Kinglykrab 2023-06-12 +* Remove SPECIALIZE_MANA_REDUCE from zone/common.h ([#3400](https://github.com/EQEmu/Server/pull/3400)) @Kinglykrab 2023-06-12 +* Remove SendAATimer() from zone/entity.h ([#3388](https://github.com/EQEmu/Server/pull/3388)) @Kinglykrab 2023-06-12 +* Remove WriteEntityIDs() from zone/entity.cpp and zone/entity.h ([#3395](https://github.com/EQEmu/Server/pull/3395)) @Kinglykrab 2023-06-12 +* Remove _BECOMENPCPET() and _NPCPET() from zone/common.h ([#3399](https://github.com/EQEmu/Server/pull/3399)) @Kinglykrab 2023-06-12 +* Remove pDBAsyncWorkID from zone/entity.h ([#3385](https://github.com/EQEmu/Server/pull/3385)) @Kinglykrab 2023-06-12 +* Remove struct DynamicZoneSafeReturn from zone/entity.h ([#3396](https://github.com/EQEmu/Server/pull/3396)) @Kinglykrab 2023-06-12 +* Remove struct TradeEntity from zone/common.h ([#3397](https://github.com/EQEmu/Server/pull/3397)) @Kinglykrab 2023-06-12 + +### Commands + +* Assign #opcode to a #reload alias ([#3401](https://github.com/EQEmu/Server/pull/3401)) @Kinglykrab 2023-06-12 + +### Illusions + +* RandomizeFeatures and SetGender were killing db texture ([#3376](https://github.com/EQEmu/Server/pull/3376)) @noudess 2023-06-06 + +### Logging + +* Fixed statements that logged incorrect data ([#3381](https://github.com/EQEmu/Server/pull/3381)) @noudess 2023-06-07 + +### Quest API + +* Add GetEXPForLevel() to Perl/Lua ([#3403](https://github.com/EQEmu/Server/pull/3403)) @Kinglykrab 2023-06-12 +* Add SendChannelMessage() to Perl/Lua ([#3378](https://github.com/EQEmu/Server/pull/3378)) @Kinglykrab 2023-06-04 +* Add several spell methods to Perl/Lua ([#3379](https://github.com/EQEmu/Server/pull/3379)) @Kinglykrab 2023-06-12 + +### Targeting + +* /tar should not untarget existing target ([#3383](https://github.com/EQEmu/Server/pull/3383)) @noudess 2023-06-12 + +## [22.12.0] - 05/29/2023 + +### Code + +* Cleanup #setskill and #setskillall Commands ([#3367](https://github.com/EQEmu/Server/pull/3367)) @Kinglykrab 2023-05-25 +* Delete message.h ([#3348](https://github.com/EQEmu/Server/pull/3348)) @Kinglykrab 2023-05-17 +* Fix #spawn command NPCs having 0 health ([#3371](https://github.com/EQEmu/Server/pull/3371)) @Kinglykrab 2023-05-21 +* Remove CalcPetHp from spdat.h ([#3364](https://github.com/EQEmu/Server/pull/3364)) @Kinglykrab 2023-05-25 +* Remove CountNPC() and QueueManaged() from entity.cpp/entity.h ([#3346](https://github.com/EQEmu/Server/pull/3346)) @Kinglykrab 2023-05-17 +* Remove DumpMerchantList() from zone.cpp/zone.h ([#3343](https://github.com/EQEmu/Server/pull/3343)) @Kinglykrab 2023-05-17 +* Remove GetDamageReceived() and GetHealReceived() from combat_record.cpp/combat_record.h ([#3358](https://github.com/EQEmu/Server/pull/3358)) @Kinglykrab 2023-05-17 +* Remove GetEscapingEntOnHateList() from hate_list.cpp/hate_list.h ([#3353](https://github.com/EQEmu/Server/pull/3353)) @Kinglykrab 2023-05-17 +* Remove GetMaxRank() from aa_ability.cpp/aa_ability.h ([#3347](https://github.com/EQEmu/Server/pull/3347)) @Kinglykrab 2023-05-25 +* Remove IsEntityInFrenzyMode() from hate_list.cpp/hate_list.h ([#3352](https://github.com/EQEmu/Server/pull/3352)) @Kinglykrab 2023-05-17 +* Remove IsRaid() from raids.h ([#3361](https://github.com/EQEmu/Server/pull/3361)) @Kinglykrab 2023-05-25 +* Remove LoadSpawn2() and PopulateZoneSpawnListClose() from spawn2.cpp/zonedb.h ([#3344](https://github.com/EQEmu/Server/pull/3344)) @Kinglykrab 2023-05-25 +* Remove SetGraveyard() from zone.cpp/zone.h ([#3354](https://github.com/EQEmu/Server/pull/3354)) @Kinglykrab 2023-05-17 +* Remove SetTradeCash() from trading.cpp/common.h ([#3356](https://github.com/EQEmu/Server/pull/3356)) @Kinglykrab 2023-05-17 +* Remove TraderUpdate() from trading.cpp/client.h ([#3357](https://github.com/EQEmu/Server/pull/3357)) @Kinglykrab 2023-05-17 +* Remove TypeToSkill() from tradeskills.cpp/object.h ([#3355](https://github.com/EQEmu/Server/pull/3355)) @Kinglykrab 2023-05-17 +* Remove Z_AGGRO from spdat.h ([#3365](https://github.com/EQEmu/Server/pull/3365)) @Kinglykrab 2023-05-25 +* Remove numMembers from raids.h ([#3362](https://github.com/EQEmu/Server/pull/3362)) @Kinglykrab 2023-05-25 +* Set GetAugmentType() to int again ([#3335](https://github.com/EQEmu/Server/pull/3335)) @Kinglykrab 2023-05-08 + +### Commands + +* Add #findcurrency Command ([#3368](https://github.com/EQEmu/Server/pull/3368)) @Kinglykrab 2023-05-25 +* Add entity variable command ([#3345](https://github.com/EQEmu/Server/pull/3345)) @Kinglykrab 2023-05-25 +* Cleanup #setanim ([#3350](https://github.com/EQEmu/Server/pull/3350)) @Kinglykrab 2023-05-25 + +### Feature + +* Intoxication setter/getter for source, getter for Perl/Lua ([#3330](https://github.com/EQEmu/Server/pull/3330)) @JasXSL 2023-05-03 + +### Fixes + +* #augmentitem bypasses augment restrictions ([#3332](https://github.com/EQEmu/Server/pull/3332)) @Kinglykrab 2023-05-07 +* Fix Heroic INT/WIS Bonuses ([#3341](https://github.com/EQEmu/Server/pull/3341)) @RekkasGit 2023-05-15 +* Fix duplicate messages in #npcedit ([#3372](https://github.com/EQEmu/Server/pull/3372)) @Kinglykrab 2023-05-21 +* Fix issue with Group Pointers/Member roles ([#3374](https://github.com/EQEmu/Server/pull/3374)) @Aeadoin 2023-05-25 +* Fix mob item bonus calc ([#3334](https://github.com/EQEmu/Server/pull/3334)) @Akkadius 2023-05-07 +* Fix typos in #zheader ([#3370](https://github.com/EQEmu/Server/pull/3370)) @Kinglykrab 2023-05-21 +* Mob scaling issue with min dmg set to zero while max dmg is not ([#3351](https://github.com/EQEmu/Server/pull/3351)) @RekkasGit 2023-05-20 +* NPC Armor Upgrade to a slot not handled correctly ([#3366](https://github.com/EQEmu/Server/pull/3366)) @noudess 2023-05-20 +* ReloadQuests() on Zone::Init() to avoid cached global quests/plugins ([#3333](https://github.com/EQEmu/Server/pull/3333)) @Kinglykrab 2023-05-07 +* Revert " ReloadQuests() on Zone::Init() to avoid cached global quests/plugins " ([#3333](https://github.com/EQEmu/Server/pull/3333)) @Akkadius 2023-05-08 + +### Memory Leak + +* Fix large memory leak introduced in CalcItemBonuses ([#3331](https://github.com/EQEmu/Server/pull/3331)) @Akkadius 2023-05-07 + +### Messages + +* Remove duplicate heal message for healing yourself ([#3329](https://github.com/EQEmu/Server/pull/3329)) @noudess 2023-05-03 + +### Performance + +* Character bind is now bulk saved ([#3338](https://github.com/EQEmu/Server/pull/3338)) @Akkadius 2023-05-09 +* Character buffs now save in bulk ([#3336](https://github.com/EQEmu/Server/pull/3336)) @Akkadius 2023-05-09 +* Character pet bulk saving ([#3337](https://github.com/EQEmu/Server/pull/3337)) @Akkadius 2023-05-09 +* Character tribute is now bulk saved ([#3340](https://github.com/EQEmu/Server/pull/3340)) @Kinglykrab 2023-05-25 +* Mail key is now cached during player load ([#3339](https://github.com/EQEmu/Server/pull/3339)) @Akkadius 2023-05-09 + +### Pets + +* Fix saving inconsistencies with pets ([#3375](https://github.com/EQEmu/Server/pull/3375)) @Akkadius 2023-05-25 + +### Quest API + +* Add GetHateListClosest(), GetHateListClosestBot(), GetHateListClosestClient(), and GetHateListClosestNPC() methods/overloads to Perl/Lua ([#3359](https://github.com/EQEmu/Server/pull/3359)) @RekkasGit 2023-05-16 +* Add GetPet() to Perl ([#3309](https://github.com/EQEmu/Server/pull/3309)) @Kinglykrab 2023-05-08 +* Add Memorize and Scribe Spell Events to Perl/Lua ([#3363](https://github.com/EQEmu/Server/pull/3363)) @Kinglykrab 2023-05-25 +* Add zone data methods to Perl/Lua ([#3342](https://github.com/EQEmu/Server/pull/3342)) @Kinglykrab 2023-05-24 +* Cleanup The Darkened Sea Quest Methods Names ([#3369](https://github.com/EQEmu/Server/pull/3369)) @Kinglykrab 2023-05-21 + +### Rules + +* Add World:MaximumQuestErrors Rule ([#3349](https://github.com/EQEmu/Server/pull/3349)) @Kinglykrab 2023-05-21 +* ResurrectionEffectBlock to prevent/allow/move buffs. ([#3288](https://github.com/EQEmu/Server/pull/3288)) @nytmyr 2023-05-08 + +## [22.11.0] - 04/29/2023 + +### Code + +* Add check for owner in quest::pausetimer() ([#3304](https://github.com/EQEmu/Server/pull/3304)) @Kinglykrab 2023-04-23 +* Add check for owner in quest::resumetimer() ([#3305](https://github.com/EQEmu/Server/pull/3305)) @Kinglykrab 2023-04-23 +* Add initiator/owner checks to various methods in questmgr.cpp ([#3306](https://github.com/EQEmu/Server/pull/3306)) @Kinglykrab 2023-04-23 +* Fix possible nullptr in quest::addloot() ([#3303](https://github.com/EQEmu/Server/pull/3303)) @Kinglykrab 2023-04-23 +* Remove GetClassHPFactor() from zone/client_mods.cpp and zone/client.h ([#3313](https://github.com/EQEmu/Server/pull/3313)) @Kinglykrab 2023-04-30 +* Remove GetClassHPFactor() from zone/merc.h ([#3314](https://github.com/EQEmu/Server/pull/3314)) @Kinglykrab 2023-04-30 +* Remove pDontCastBefore_casting_spell from zone/npc.h ([#3311](https://github.com/EQEmu/Server/pull/3311)) @Kinglykrab 2023-04-30 +* Remove unused code in zone/pets.cpp ([#3310](https://github.com/EQEmu/Server/pull/3310)) @Kinglykrab 2023-04-30 +* Remove unused methods in zone/bot.cpp and zone/bot.h ([#3315](https://github.com/EQEmu/Server/pull/3315)) @Kinglykrab 2023-04-30 +* Remove unused methods in zone/client.cpp and zone/client.h ([#3312](https://github.com/EQEmu/Server/pull/3312)) @Kinglykrab 2023-04-30 +* Remove unused variable in common/crash.cpp ([#3308](https://github.com/EQEmu/Server/pull/3308)) @Kinglykrab 2023-04-30 +* Use default ctor/dtor in oriented_bounding_box.h ([#3307](https://github.com/EQEmu/Server/pull/3307)) @Kinglykrab 2023-04-30 +* quest::createBot() unnecessary check against nullptr ([#3302](https://github.com/EQEmu/Server/pull/3302)) @Kinglykrab 2023-04-23 +* quest::setallskill() had always true condition. ([#3301](https://github.com/EQEmu/Server/pull/3301)) @Kinglykrab 2023-04-30 + +### Crash + +* Fix UCS crash that occurs during log reloading ([#3324](https://github.com/EQEmu/Server/pull/3324)) @Akkadius 2023-04-30 +* Fix possible dereference of nullptr in Client::CalcHPRegen ([#3316](https://github.com/EQEmu/Server/pull/3316)) @Aeadoin 2023-04-23 +* Fix possible nullptr in Client::GetCharMaxLevelFromQGlobal() ([#3317](https://github.com/EQEmu/Server/pull/3317)) @Kinglykrab 2023-04-23 + +### Discord + +* Add Discord webhook callback processing to world ([#3322](https://github.com/EQEmu/Server/pull/3322)) @Akkadius 2023-04-30 + +### Fixes + +* Fix issue with NPCs no longer using some armor. ([#3318](https://github.com/EQEmu/Server/pull/3318)) @noudess 2023-04-24 +* Fix issue with spawning Mercs ([#3327](https://github.com/EQEmu/Server/pull/3327)) @Aeadoin 2023-04-29 +* Possible issues with SummonItem in Client::QuestReward() methods ([#3325](https://github.com/EQEmu/Server/pull/3325)) @Kinglykrab 2023-04-27 + +### Maps + +* Update download with faster releases link ([#3321](https://github.com/EQEmu/Server/pull/3321)) @Akkadius 2023-04-30 + +### Messages + +* Remove duplicate you have lost a level message ([#3323](https://github.com/EQEmu/Server/pull/3323)) @noudess 2023-04-25 + +### Quest API + +* Add GetDefaultRaceSize() overloads to Perl/Lua ([#3320](https://github.com/EQEmu/Server/pull/3320)) @Kinglykrab 2023-04-30 +* Add HasSpellEffect() to Perl/Lua ([#3319](https://github.com/EQEmu/Server/pull/3319)) @Kinglykrab 2023-04-30 + +## [22.10.0] - 04/22/2023 + +### Backups + +* Fix database dump error reporting ([#3175](https://github.com/EQEmu/Server/pull/3175)) @Akkadius 2023-04-04 + +### Bots + +* Cleanup GetBotTables() ([#3270](https://github.com/EQEmu/Server/pull/3270)) @Aeadoin 2023-04-06 + +### Cleanuo + +* Only define row if we have results in Database::GetCharacterID() ([#3199](https://github.com/EQEmu/Server/pull/3199)) @Kinglykrab 2023-04-05 + +### Code + +* Add missing breaks and returns in bonuses.cpp ([#3231](https://github.com/EQEmu/Server/pull/3231)) @Kinglykrab 2023-04-05 +* Breaks in wrong spot in cases in spell_effects.cpp ([#3297](https://github.com/EQEmu/Server/pull/3297)) @Kinglykrab 2023-04-22 +* Cleanup always true/false statements in shareddb.cpp ([#3189](https://github.com/EQEmu/Server/pull/3189)) @Kinglykrab 2023-04-05 +* Cleanup cheap-to-copy reference to use value instead in eq_stream_ident.cpp/eq_stream_ident.h ([#3209](https://github.com/EQEmu/Server/pull/3209)) @Kinglykrab 2023-04-05 +* Cleanup discord.cpp and discord_manager.cpp ([#3205](https://github.com/EQEmu/Server/pull/3205)) @Kinglykrab 2023-04-05 +* Cleanup duplicate conditions in negate bonuses in bonuses.cpp ([#3226](https://github.com/EQEmu/Server/pull/3226)) @Kinglykrab 2023-04-05 +* Cleanup item_instance.cpp always true statements and reassigning of same values ([#3187](https://github.com/EQEmu/Server/pull/3187)) @Kinglykrab 2023-04-05 +* Cleanup macros in features.h ([#3185](https://github.com/EQEmu/Server/pull/3185)) @Kinglykrab 2023-04-05 +* Cleanup string -> char* -> string conversions in bot_command.cpp ([#3252](https://github.com/EQEmu/Server/pull/3252)) @Kinglykrab 2023-04-05 +* Cleanup unnecessary condition in Client::SendAlternateCurrencyValue() ([#3266](https://github.com/EQEmu/Server/pull/3266)) @Kinglykrab 2023-04-05 +* Cleanup zone/zoning.cpp ([#3289](https://github.com/EQEmu/Server/pull/3289)) @Kinglykrab 2023-04-14 +* Combine similar cases in Client::InitInnates() ([#3260](https://github.com/EQEmu/Server/pull/3260)) @Kinglykrab 2023-04-05 +* Convert equipable_slot_list to std::vector from std::list in bot_command.cpp ([#3253](https://github.com/EQEmu/Server/pull/3253)) @Kinglykrab 2023-04-05 +* Delete embxs.cpp/embxs.h ([#3284](https://github.com/EQEmu/Server/pull/3284)) @Kinglykrab 2023-04-14 +* Delete unused strings in bot_command.cpp ([#3251](https://github.com/EQEmu/Server/pull/3251)) @Kinglykrab 2023-04-05 +* Fix GetLastName() length check in Client::SendWindow() ([#3263](https://github.com/EQEmu/Server/pull/3263)) @Kinglykrab 2023-04-05 +* Fix always false conditions in Client::IncStats() ([#3256](https://github.com/EQEmu/Server/pull/3256)) @Kinglykrab 2023-04-05 +* Fix check for !this in Client::SendHPUpdateMarquee() ([#3257](https://github.com/EQEmu/Server/pull/3257)) @Kinglykrab 2023-04-05 +* Fix filter condition in attack.cpp ([#3218](https://github.com/EQEmu/Server/pull/3218)) @Kinglykrab 2023-04-05 +* Fix ornamentation augment icons in inspect requests ([#3264](https://github.com/EQEmu/Server/pull/3264)) @Kinglykrab 2023-04-05 +* Fix possible nullptr inst in GetSharedBank() ([#3190](https://github.com/EQEmu/Server/pull/3190)) @Kinglykrab 2023-04-08 +* Fix possible overflows in Client::AddPlatinum() and Client::TakePlatinum() ([#3255](https://github.com/EQEmu/Server/pull/3255)) @Kinglykrab 2023-04-05 +* Fix shared_tasks.cpp/shared_tasks.cpp variable named same as class member ([#3192](https://github.com/EQEmu/Server/pull/3192)) @Kinglykrab 2023-04-05 +* Fix skill_used being used as boolean in Mob::CommonDamage() ([#3220](https://github.com/EQEmu/Server/pull/3220)) @Kinglykrab 2023-04-05 +* Identical conditions right beside each other in aa.cpp ([#3213](https://github.com/EQEmu/Server/pull/3213)) @Kinglykrab 2023-04-05 +* Move unreachable code in ApplySpellsBonuses() ([#3229](https://github.com/EQEmu/Server/pull/3229)) @Kinglykrab 2023-04-05 +* Move variable definition to more relevant scope in DatabaseDumpService::Dump() ([#3200](https://github.com/EQEmu/Server/pull/3200)) @Kinglykrab 2023-04-05 +* Multiple cases with same outcome in GetDiscordPayloadFromEvent() ([#3184](https://github.com/EQEmu/Server/pull/3184)) @Kinglykrab 2023-04-05 +* Remove ExportVarComplex() from embparser.cpp/embparser.h ([#3282](https://github.com/EQEmu/Server/pull/3282)) @Kinglykrab 2023-04-14 +* Remove GetQGlobal() from qglobals.cpp/qglobals.h ([#3285](https://github.com/EQEmu/Server/pull/3285)) @Kinglykrab 2023-04-14 +* Remove IsFullHP from mob.cpp/mob.h ([#3277](https://github.com/EQEmu/Server/pull/3277)) @Kinglykrab 2023-04-14 +* Remove IsMeleeDmg() from skills.cpp/skills.h ([#3279](https://github.com/EQEmu/Server/pull/3279)) @Kinglykrab 2023-04-14 +* Remove _GetMovementSpeed() from mob.h ([#3276](https://github.com/EQEmu/Server/pull/3276)) @Kinglykrab 2023-04-14 +* Remove always true condition in Strings::Commify() ([#3193](https://github.com/EQEmu/Server/pull/3193)) @Kinglykrab 2023-04-05 +* Remove always true conditions and unreachable code in Client::SendMercPersonalInfo() ([#3258](https://github.com/EQEmu/Server/pull/3258)) @Kinglykrab 2023-04-05 +* Remove always true statement in say_link.cpp ([#3188](https://github.com/EQEmu/Server/pull/3188)) @Kinglykrab 2023-04-05 +* Remove always true statements in task_client_state.cpp ([#3292](https://github.com/EQEmu/Server/pull/3292)) @Kinglykrab 2023-04-14 +* Remove always true/false conditions from bot.cpp ([#3237](https://github.com/EQEmu/Server/pull/3237)) @Kinglykrab 2023-04-05 +* Remove bool return from GetSharedPlatinum() ([#3191](https://github.com/EQEmu/Server/pull/3191)) @Kinglykrab 2023-04-05 +* Remove extra assignment of current_endurance in Client ctor ([#3261](https://github.com/EQEmu/Server/pull/3261)) @Kinglykrab 2023-04-05 +* Remove extraneous check for NegateAttacks in SE_NegateAttacks ([#3228](https://github.com/EQEmu/Server/pull/3228)) @Kinglykrab 2023-04-05 +* Remove extraneous parentheses around math in Mob::ApplySpellsBonuses() ([#3227](https://github.com/EQEmu/Server/pull/3227)) @Kinglykrab 2023-04-05 +* Remove getd(), geti(), InUse(), lasterr(), my_get_sv(), and VarExists() in embperl.cpp/embperl.h ([#3283](https://github.com/EQEmu/Server/pull/3283)) @Kinglykrab 2023-04-15 +* Remove item_timers from questmgr.cpp/questmgr.h ([#3286](https://github.com/EQEmu/Server/pull/3286)) @Kinglykrab 2023-04-14 +* Remove pendinggroup from mob.h ([#3278](https://github.com/EQEmu/Server/pull/3278)) @Kinglykrab 2023-04-14 +* Remove position_same_update_count from client.cpp/client.h ([#3280](https://github.com/EQEmu/Server/pull/3280)) @Kinglykrab 2023-04-14 +* Remove unnecessary break in while loop in Mob::AddToHateList() ([#3219](https://github.com/EQEmu/Server/pull/3219)) @Kinglykrab 2023-04-05 +* Remove unnecessary check for IsStackable() in DeleteItem() ([#3186](https://github.com/EQEmu/Server/pull/3186)) @Kinglykrab 2023-04-05 +* Remove unnecessary condition and cleanup variable name in tasks.cpp ([#3293](https://github.com/EQEmu/Server/pull/3293)) @Kinglykrab 2023-04-14 +* Remove unnecessary conditions in Client::Consume() ([#3265](https://github.com/EQEmu/Server/pull/3265)) @Kinglykrab 2023-04-05 +* Remove unnecessary conditions in Client::FilteredMessageCheck() ([#3262](https://github.com/EQEmu/Server/pull/3262)) @Kinglykrab 2023-04-05 +* Remove unnecessary conditions in Client::SendFactionMessage() ([#3267](https://github.com/EQEmu/Server/pull/3267)) @Kinglykrab 2023-04-05 +* Remove unnecessary setting of reuse variable in Bot::DoClassAttacks() ([#3233](https://github.com/EQEmu/Server/pull/3233)) @Kinglykrab 2023-04-05 +* Remove unused SetConfigFile in common/eqemu_config.h ([#3208](https://github.com/EQEmu/Server/pull/3208)) @Kinglykrab 2023-04-05 +* Remove unused code in eq_packet.cpp/eq_packet.h ([#3183](https://github.com/EQEmu/Server/pull/3183)) @Kinglykrab 2023-04-05 +* Remove unused ctor and use default dtor in xtargetautohaters.h ([#3290](https://github.com/EQEmu/Server/pull/3290)) @Kinglykrab 2023-04-14 +* Remove unused macros in common/types.h ([#3194](https://github.com/EQEmu/Server/pull/3194)) @Kinglykrab 2023-04-05 +* Remove unused variable in Database::CopyCharacter() ([#3197](https://github.com/EQEmu/Server/pull/3197)) @Kinglykrab 2023-04-05 +* Remove unused variables and use reference in task_manager.cpp ([#3291](https://github.com/EQEmu/Server/pull/3291)) @Kinglykrab 2023-04-14 +* SE_AttackSpeed3 effect_value is always less than 0 ([#3222](https://github.com/EQEmu/Server/pull/3222)) @Kinglykrab 2023-04-05 +* SE_StrikeThrough and SE_StrikeThrough2 are the same in bonuses.cpp ([#3223](https://github.com/EQEmu/Server/pull/3223)) @Kinglykrab 2023-04-05 +* Set bonuses to use spell ID instead of boolean ([#3230](https://github.com/EQEmu/Server/pull/3230)) @Kinglykrab 2023-04-05 +* Use .clear() and .empty() instead of comparing to empty string or setting to empty string in CheckDatabaseConvertPPBlob() ([#3201](https://github.com/EQEmu/Server/pull/3201)) @Kinglykrab 2023-04-05 +* Use .clear() instead of setting string to empty in eqemu_command_handler.cpp ([#3195](https://github.com/EQEmu/Server/pull/3195)) @Kinglykrab 2023-04-05 +* Use .empty() in Client::ScribeSpells() and Client::LearnDisciplines() ([#3259](https://github.com/EQEmu/Server/pull/3259)) @Kinglykrab 2023-04-05 +* Use constant reference and check for empty string properly in dbcore.cpp ([#3203](https://github.com/EQEmu/Server/pull/3203)) @Kinglykrab 2023-04-05 +* Use default ctor instead of an empty ctor. ([#3206](https://github.com/EQEmu/Server/pull/3206)) @Kinglykrab 2023-04-05 +* Use default dtor instead of empty dtor for EQTime in eqtime.cpp/eqtime.h ([#3210](https://github.com/EQEmu/Server/pull/3210)) @Kinglykrab 2023-04-05 +* Use variable for c->GetTarget() instead of calling multiple times in bot_command.cpp ([#3254](https://github.com/EQEmu/Server/pull/3254)) @Kinglykrab 2023-04-05 +* Use variable for character instead of a loop ([#3268](https://github.com/EQEmu/Server/pull/3268)) @Kinglykrab 2023-04-05 +* Utilize .empty() instead of checking for an empty string in Database::ReserveName() ([#3198](https://github.com/EQEmu/Server/pull/3198)) @Kinglykrab 2023-04-05 +* Utilize IsTaunting(), SetPetPower(), SetPetType(), and SetTaunting() ([#3275](https://github.com/EQEmu/Server/pull/3275)) @Kinglykrab 2023-04-15 +* Validate for nullptrs in bot.cpp ([#3232](https://github.com/EQEmu/Server/pull/3232)) @Kinglykrab 2023-04-05 +* other is always defined in these cases in attack.cpp ([#3217](https://github.com/EQEmu/Server/pull/3217)) @Kinglykrab 2023-04-05 +* results variable is assigned but never used in SaveCharacterCreate() ([#3180](https://github.com/EQEmu/Server/pull/3180)) @Kinglykrab 2023-04-05 + +### Crash + +* Add additional raid integrity checks on Bot Spawn. ([#3295](https://github.com/EQEmu/Server/pull/3295)) @Aeadoin 2023-04-16 +* Fix crash with uninitialized item instance, and Bot timeout ([#3296](https://github.com/EQEmu/Server/pull/3296)) @Aeadoin 2023-04-15 +* Resolve crash due to uninitialized pointer. ([#3271](https://github.com/EQEmu/Server/pull/3271)) @Aeadoin 2023-04-08 + +### Feature + +* Make ornamentations work with any augment type ([#3281](https://github.com/EQEmu/Server/pull/3281)) @Kinglykrab 2023-04-16 + +### Fixes + +* Camping was causing player to leave raid, causing unexpected behavior ([#3299](https://github.com/EQEmu/Server/pull/3299)) @Aeadoin 2023-04-22 +* Resolve loading of inventory ([#3272](https://github.com/EQEmu/Server/pull/3272)) @Aeadoin 2023-04-08 + +### Quest API + +* Add ApplySpellRaid() and SetSpellDurationRaid() to Bots in Perl/Lua ([#3274](https://github.com/EQEmu/Server/pull/3274)) @Kinglykrab 2023-04-09 +* Add GetBuffSpellIDs() to Perl/Lua ([#3273](https://github.com/EQEmu/Server/pull/3273)) @Kinglykrab 2023-04-09 +* Fix LDoN Methods in Perl/Lua ([#3287](https://github.com/EQEmu/Server/pull/3287)) @Kinglykrab 2023-04-10 + +### Rules + +* Optional summoning when already in melee range ([#3204](https://github.com/EQEmu/Server/pull/3204)) @trentdm 2023-04-08 + +### Telnet + +* Telnet encoding fix ([#3269](https://github.com/EQEmu/Server/pull/3269)) @Akkadius 2023-04-05 + +## [22.9.1] - 04/03/2023 + +### Code + +* Add client pointer validation to Zone::GetClosestZonePoint() ([#3173](https://github.com/EQEmu/Server/pull/3173)) @Kinglykrab 2023-04-01 +* Change level to bot_level in Bot::DoClassAttacks() to not overlap member variable ([#3239](https://github.com/EQEmu/Server/pull/3239)) @Kinglykrab 2023-04-03 +* Cleanup unnecessary string -> char* -> string conversions in eqemu_config.cpp ([#3207](https://github.com/EQEmu/Server/pull/3207)) @Kinglykrab 2023-04-03 +* Cleanup uses of insert/push_back when a temp object is used. ([#3170](https://github.com/EQEmu/Server/pull/3170)) @Aeadoin 2023-04-03 +* Cleanup variable names in Bot::AddSpellToBotList() ([#3248](https://github.com/EQEmu/Server/pull/3248)) @Kinglykrab 2023-04-03 +* Explicitly cast to float for more precision in Bot::GenerateBastHitPoints() ([#3238](https://github.com/EQEmu/Server/pull/3238)) @Kinglykrab 2023-04-03 +* Fix SEResist array settings duplicate code ([#3225](https://github.com/EQEmu/Server/pull/3225)) @Kinglykrab 2023-04-03 +* Fix loop and code duplication for SE_ProcOnKillShot ([#3224](https://github.com/EQEmu/Server/pull/3224)) @Kinglykrab 2023-04-03 +* Fix possible dereferencing of invalid iterator in constants ([#3181](https://github.com/EQEmu/Server/pull/3181)) @Kinglykrab 2023-04-03 +* Fix typo where itembonuses should have been used instead of spellbonuses ([#3221](https://github.com/EQEmu/Server/pull/3221)) @Kinglykrab 2023-04-03 +* Further bot.cpp nullptr checks ([#3240](https://github.com/EQEmu/Server/pull/3240)) @Kinglykrab 2023-04-03 +* Move cases in Bot::AICastSpell() ([#3247](https://github.com/EQEmu/Server/pull/3247)) @Kinglykrab 2023-04-03 +* Multiple cases same outcome and set skip variable to same value ([#3216](https://github.com/EQEmu/Server/pull/3216)) @Kinglykrab 2023-04-03 +* Multiple cases with same outcome in GetGMSayColorFromCategory() ([#3182](https://github.com/EQEmu/Server/pull/3182)) @Kinglykrab 2023-04-03 +* Remove extraneous loottable_id setting in WakeTheDead in aa.cpp ([#3215](https://github.com/EQEmu/Server/pull/3215)) @Kinglykrab 2023-04-03 +* Remove possible dereferenced nullptrs in bot.cpp ([#3241](https://github.com/EQEmu/Server/pull/3241)) @Kinglykrab 2023-04-03 +* Remove unnecessary >= 0 checks for procs in botspellsai.cpp ([#3242](https://github.com/EQEmu/Server/pull/3242)) @Kinglykrab 2023-04-03 +* Remove unnecessary botCaster check in Bot::GetDebuffBotSpell() ([#3246](https://github.com/EQEmu/Server/pull/3246)) @Kinglykrab 2023-04-03 +* Remove unnecessary group validation in Bot::Death() ([#3235](https://github.com/EQEmu/Server/pull/3235)) @Kinglykrab 2023-04-03 +* Remove unnecessary hpr checks in Bot::BotCastHeal() ([#3245](https://github.com/EQEmu/Server/pull/3245)) @Kinglykrab 2023-04-03 +* Remove unnecessary setting of spell_type_index in Bot::GetChanceToCastBySpellType() ([#3243](https://github.com/EQEmu/Server/pull/3243)) @Kinglykrab 2023-04-03 +* Remove unnecessary skill_to_use check in Bot::DoClassAttacks() ([#3236](https://github.com/EQEmu/Server/pull/3236)) @Kinglykrab 2023-04-03 +* Remove unnecessary spell_list validation check in botspellsai.cpp ([#3244](https://github.com/EQEmu/Server/pull/3244)) @Kinglykrab 2023-04-03 +* Remove unnecessary validation check in Zone::ClearBlockedSpells() ([#3172](https://github.com/EQEmu/Server/pull/3172)) @Kinglykrab 2023-04-01 +* Remove unused Includes under zone files ([#3162](https://github.com/EQEmu/Server/pull/3162)) @Aeadoin 2023-04-02 +* Remove unused query variable in Database::DeleteInstance() ([#3202](https://github.com/EQEmu/Server/pull/3202)) @Kinglykrab 2023-04-03 +* Unconditional return in for loop in GetRaidByCharID() ([#3179](https://github.com/EQEmu/Server/pull/3179)) @Kinglykrab 2023-04-03 +* Use a constant reference for content_flags in SetContentFlags() ([#3196](https://github.com/EQEmu/Server/pull/3196)) @Kinglykrab 2023-04-03 +* Wake The Dead argument was named the same as a member variable in Mob ([#3214](https://github.com/EQEmu/Server/pull/3214)) @Kinglykrab 2023-04-03 +* gid is assigned 2 values simultaneously in bot.cpp ([#3234](https://github.com/EQEmu/Server/pull/3234)) @Kinglykrab 2023-04-03 +* summon_count > MAX_SWARM_PETS is always false in aa.cpp ([#3212](https://github.com/EQEmu/Server/pull/3212)) @Kinglykrab 2023-04-03 + +### Fixes + +* Correct Forward Declaration compilation warning ([#3176](https://github.com/EQEmu/Server/pull/3176)) @Aeadoin 2023-04-02 +* Fix issue with Bot Raid invites not working. ([#3249](https://github.com/EQEmu/Server/pull/3249)) @Aeadoin 2023-04-03 + +### Performance + +* Change to use Pass by reference where valid. ([#3163](https://github.com/EQEmu/Server/pull/3163)) @Aeadoin 2023-04-02 + +## [22.9.0] - 04/01/2023 + +### Bots + +* Remove Bot Groups Functionality ([#3165](https://github.com/EQEmu/Server/pull/3165)) @Aeadoin 2023-04-01 + +### Code + +* Cleanup excessive type casting: string -> char * -> string ([#3169](https://github.com/EQEmu/Server/pull/3169)) @Aeadoin 2023-04-01 + +### Crash + +* Add Checks for valid pointers or fix existing. ([#3164](https://github.com/EQEmu/Server/pull/3164)) @Aeadoin 2023-04-01 +* Fix out of bound arrays, other potential crashes ([#3166](https://github.com/EQEmu/Server/pull/3166)) @Aeadoin 2023-04-01 + +### Fixes + +* Correct SE_SlayUndead & SE_HeadShotLevel limit Value when applied. ([#3171](https://github.com/EQEmu/Server/pull/3171)) @Aeadoin 2023-04-01 +* Prevent VerifyGroup from setting OOZ membername to Null character. ([#3168](https://github.com/EQEmu/Server/pull/3168)) @Aeadoin 2023-04-01 + +### Quest API + +* Add missing Luabind definitions to lua_general.cpp ([#3167](https://github.com/EQEmu/Server/pull/3167)) @Kinglykrab 2023-04-01 + +## [22.8.2] - 03/30/2023 + +### Code + +* "equipped" not "equiped", "dual" not "duel". ([#3149](https://github.com/EQEmu/Server/pull/3149)) @Kinglykrab 2023-03-27 + +### Crash + +* Add Checks for out of bounds & dereferencing nullptrs ([#3151](https://github.com/EQEmu/Server/pull/3151)) @Aeadoin 2023-03-28 + +### Fixes + +* Check Rule "Bots Enabled" to prevent bot database calls on connect ([#3154](https://github.com/EQEmu/Server/pull/3154)) @Aeadoin 2023-03-29 +* Correct logic checks for Bot rule AllowOwnerOptionAltCombat ([#3158](https://github.com/EQEmu/Server/pull/3158)) @Aeadoin 2023-03-30 +* Fix an issue with EVENT_DISCONNECT not firing on regular /camp ([#3153](https://github.com/EQEmu/Server/pull/3153)) @Kinglykrab 2023-03-28 +* Fix bot_raid_members.sql for MYSQL. ([#3155](https://github.com/EQEmu/Server/pull/3155)) @Aeadoin 2023-03-28 +* Fix for OOZ Group updates when removing/inviting Bots ([#3159](https://github.com/EQEmu/Server/pull/3159)) @Aeadoin 2023-03-30 +* Fix issues with Lua tables not starting at index 1 ([#3160](https://github.com/EQEmu/Server/pull/3160)) @Kinglykrab 2023-03-30 +* Fix strcpy-param-overlap ([#3157](https://github.com/EQEmu/Server/pull/3157)) @Aeadoin 2023-03-29 + +### Rules + +* Remove Guild Bank Zone ID Rule ([#3156](https://github.com/EQEmu/Server/pull/3156)) @Kinglykrab 2023-03-29 + +## [22.8.1] - 03/27/2023 + +### Fixes + +* Fix for NPCs having spells interrupted. ([#3150](https://github.com/EQEmu/Server/pull/3150)) @Aeadoin 2023-03-27 + ## [22.8.0] - 03/25/2023 ### Code diff --git a/CMakeLists.txt b/CMakeLists.txt index edc57094b..b89c821cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,15 @@ SET(CMAKE_CXX_STANDARD 20) SET(CMAKE_CXX_STANDARD_REQUIRED ON) SET(CMAKE_CXX_EXTENSIONS OFF) +OPTION(EQEMU_BUILD_STATIC "Build with static linking" OFF) + +IF (EQEMU_BUILD_STATIC) + SET(BUILD_SHARED_LIBS OFF) + SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".a") + MESSAGE(STATUS "Building with static linking") + SET(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++") +ENDIF(EQEMU_BUILD_STATIC) + IF(MSVC) ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) ADD_DEFINITIONS(-DNOMINMAX) @@ -307,6 +316,10 @@ ELSE() SET(ZLIB_LIBRARY_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/libs/zlibng") ENDIF() +IF (EQEMU_BUILD_STATIC) + SET(ZLIB_LIBRARY_LIBS libz.a) +ENDIF(EQEMU_BUILD_STATIC) + MESSAGE(STATUS "") MESSAGE(STATUS "**************************************************") MESSAGE(STATUS "* Library Usage *") diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index b6e9ec89d..b77e4df7f 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -15,6 +15,9 @@ SET(common_sources database.cpp database_conversions.cpp database_instances.cpp + database/database_update_manifest.cpp + database/database_update_manifest_bots.cpp + database/database_update.cpp dbcore.cpp deity.cpp dynamic_zone_base.cpp @@ -506,6 +509,7 @@ SET(common_headers data_verification.h database.h database_schema.h + database/database_update.h dbcore.h deity.h discord/discord.h @@ -666,7 +670,8 @@ SET(common_headers StackWalker/StackWalker.h util/memory_stream.h util/directory.h - util/uuid.h) + util/uuid.h +) SOURCE_GROUP(Event FILES event/event_loop.h diff --git a/common/classes.cpp b/common/classes.cpp index 886412791..693b826b1 100644 --- a/common/classes.cpp +++ b/common/classes.cpp @@ -630,6 +630,20 @@ bool IsINTCasterClass(uint8 class_id) } } +bool IsHeroicINTCasterClass(uint8 class_id) +{ + switch (class_id) { + case NECROMANCER: + case WIZARD: + case MAGICIAN: + case ENCHANTER: + case SHADOWKNIGHT: + return true; + default: + return false; + } +} + bool IsWISCasterClass(uint8 class_id) { switch (class_id) { @@ -642,6 +656,21 @@ bool IsWISCasterClass(uint8 class_id) } } +bool IsHeroicWISCasterClass(uint8 class_id) +{ + switch (class_id) { + case CLERIC: + case DRUID: + case SHAMAN: + case PALADIN: + case BEASTLORD: + case RANGER: + return true; + default: + return false; + } +} + bool IsPlateClass(uint8 class_id) { switch (class_id) { diff --git a/common/classes.h b/common/classes.h index 15481a613..df5dedcd7 100644 --- a/common/classes.h +++ b/common/classes.h @@ -140,7 +140,8 @@ bool IsHybridClass(uint8 class_id); bool IsCasterClass(uint8 class_id); bool IsINTCasterClass(uint8 class_id); bool IsWISCasterClass(uint8 class_id); - +bool IsHeroicINTCasterClass(uint8 class_id); +bool IsHeroicWISCasterClass(uint8 class_id); bool IsPlateClass(uint8 class_id); bool IsChainClass(uint8 class_id); bool IsLeatherClass(uint8 class_id); diff --git a/common/cli/eqemu_command_handler.cpp b/common/cli/eqemu_command_handler.cpp index 3162d400a..b69711b54 100644 --- a/common/cli/eqemu_command_handler.cpp +++ b/common/cli/eqemu_command_handler.cpp @@ -77,7 +77,7 @@ namespace EQEmuCommand { index++; } - if (!arguments_filled || argc == 2 || cmd[{"-h", "--help"}]) { + if (!arguments_filled || (argc == 2 && !cmd[{"-h", "--help"}]) || (argc == 3 && cmd[{"-h", "--help"}])) { std::string arguments_string; for (auto &arg : arguments) { arguments_string += " " + arg; @@ -160,7 +160,7 @@ namespace EQEmuCommand { */ std::string command_section; for (auto &it: in_function_map) { - description = ""; + description.clear(); (it.second)(argc, argv, cmd, description); diff --git a/common/content/world_content_service.cpp b/common/content/world_content_service.cpp index 27be467cf..5bd19ba96 100644 --- a/common/content/world_content_service.cpp +++ b/common/content/world_content_service.cpp @@ -120,7 +120,7 @@ std::vector WorldContentService::GetContentFlagsDisabled() /** * @param content_flags */ -void WorldContentService::SetContentFlags(std::vector content_flags) +void WorldContentService::SetContentFlags(const std::vector& content_flags) { WorldContentService::content_flags = content_flags; } diff --git a/common/content/world_content_service.h b/common/content/world_content_service.h index de667ad1d..f2661831a 100644 --- a/common/content/world_content_service.h +++ b/common/content/world_content_service.h @@ -167,7 +167,7 @@ public: std::vector GetContentFlagsDisabled(); bool IsContentFlagEnabled(const std::string& content_flag); bool IsContentFlagDisabled(const std::string& content_flag); - void SetContentFlags(std::vector content_flags); + void SetContentFlags(const std::vector& content_flags); void ReloadContentFlags(); WorldContentService * SetExpansionContext(); diff --git a/common/crash.cpp b/common/crash.cpp index e5d4d993b..7de645972 100644 --- a/common/crash.cpp +++ b/common/crash.cpp @@ -41,9 +41,6 @@ void SendCrashReport(const std::string &crash_report) r.set_connection_timeout(1, 0); r.set_read_timeout(1, 0); r.set_write_timeout(1, 0); - httplib::Headers headers = { - {"Content-Type", "application/json"} - }; // os info auto os = EQ::GetOS(); @@ -125,7 +122,7 @@ public: StackWalker::OnOutput(szText); } - const std::vector& const GetLines() { return _lines; } + const std::vector& GetLines() { return _lines; } private: std::vector _lines; }; diff --git a/common/database.cpp b/common/database.cpp index 43854172c..738fc0d82 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -353,7 +353,7 @@ bool Database::ReserveName(uint32 account_id, char* name) { query = StringFormat("INSERT INTO `character_data` SET `account_id` = %i, `name` = '%s'", account_id, name); results = QueryDatabase(query); - if (!results.Success() || results.ErrorMessage() != ""){ return false; } + if (!results.Success() || !results.ErrorMessage().empty()){ return false; } // Put character into the default guild if rule is being used. int guild_id = RuleI(Character, DefaultGuild); @@ -363,7 +363,7 @@ bool Database::ReserveName(uint32 account_id, char* name) { if (character_id > -1) { query = StringFormat("INSERT INTO `guild_members` SET `char_id` = %i, `guild_id` = '%i'", character_id, guild_id); results = QueryDatabase(query); - if (!results.Success() || results.ErrorMessage() != ""){ + if (!results.Success() || !results.ErrorMessage().empty()){ LogInfo("Could not put character [{}] into default Guild", name); } } @@ -449,7 +449,8 @@ bool Database::DeleteCharacter(char *character_name) return true; } -bool Database::SaveCharacterCreate(uint32 character_id, uint32 account_id, PlayerProfile_Struct* pp){ +bool Database::SaveCharacterCreate(uint32 character_id, uint32 account_id, PlayerProfile_Struct *pp) +{ std::string query = StringFormat( "REPLACE INTO `character_data` (" "id," @@ -634,101 +635,102 @@ bool Database::SaveCharacterCreate(uint32 character_id, uint32 account_id, Playe "%u," // guild_auto_consent "%u" // RestTimer ")", - character_id, // " id, " - account_id, // " account_id, " - Strings::Escape(pp->name).c_str(), // " `name`, " + character_id, // " id, " + account_id, // " account_id, " + Strings::Escape(pp->name).c_str(), // " `name`, " Strings::Escape(pp->last_name).c_str(), // " last_name, " - pp->gender, // " gender, " - pp->race, // " race, " - pp->class_, // " class, " - pp->level, // " `level`, " - pp->deity, // " deity, " - pp->birthday, // " birthday, " - pp->lastlogin, // " last_login, " - pp->timePlayedMin, // " time_played, " - pp->pvp, // " pvp_status, " - pp->level2, // " level2, " - pp->anon, // " anon, " - pp->gm, // " gm, " - pp->intoxication, // " intoxication, " - pp->haircolor, // " hair_color, " - pp->beardcolor, // " beard_color, " - pp->eyecolor1, // " eye_color_1, " - pp->eyecolor2, // " eye_color_2, " - pp->hairstyle, // " hair_style, " - pp->beard, // " beard, " - pp->ability_time_seconds, // " ability_time_seconds, " - pp->ability_number, // " ability_number, " - pp->ability_time_minutes, // " ability_time_minutes, " - pp->ability_time_hours, // " ability_time_hours, " + pp->gender, // " gender, " + pp->race, // " race, " + pp->class_, // " class, " + pp->level, // " `level`, " + pp->deity, // " deity, " + pp->birthday, // " birthday, " + pp->lastlogin, // " last_login, " + pp->timePlayedMin, // " time_played, " + pp->pvp, // " pvp_status, " + pp->level2, // " level2, " + pp->anon, // " anon, " + pp->gm, // " gm, " + pp->intoxication, // " intoxication, " + pp->haircolor, // " hair_color, " + pp->beardcolor, // " beard_color, " + pp->eyecolor1, // " eye_color_1, " + pp->eyecolor2, // " eye_color_2, " + pp->hairstyle, // " hair_style, " + pp->beard, // " beard, " + pp->ability_time_seconds, // " ability_time_seconds, " + pp->ability_number, // " ability_number, " + pp->ability_time_minutes, // " ability_time_minutes, " + pp->ability_time_hours, // " ability_time_hours, " Strings::Escape(pp->title).c_str(), // " title, " Strings::Escape(pp->suffix).c_str(), // " suffix, " - pp->exp, // " exp, " - pp->points, // " points, " - pp->mana, // " mana, " - pp->cur_hp, // " cur_hp, " - pp->STR, // " str, " - pp->STA, // " sta, " - pp->CHA, // " cha, " - pp->DEX, // " dex, " - pp->INT, // " `int`, " - pp->AGI, // " agi, " - pp->WIS, // " wis, " - pp->face, // " face, " - pp->y, // " y, " - pp->x, // " x, " - pp->z, // " z, " - pp->heading, // " heading, " - pp->pvp2, // " pvp2, " - pp->pvptype, // " pvp_type, " - pp->autosplit, // " autosplit_enabled, " - pp->zone_change_count, // " zone_change_count, " - pp->drakkin_heritage, // " drakkin_heritage, " - pp->drakkin_tattoo, // " drakkin_tattoo, " - pp->drakkin_details, // " drakkin_details, " - pp->toxicity, // " toxicity, " - pp->hunger_level, // " hunger_level, " - pp->thirst_level, // " thirst_level, " - pp->ability_up, // " ability_up, " - pp->zone_id, // " zone_id, " - pp->zoneInstance, // " zone_instance, " - pp->leadAAActive, // " leadership_exp_on, " - pp->ldon_points_guk, // " ldon_points_guk, " - pp->ldon_points_mir, // " ldon_points_mir, " - pp->ldon_points_mmc, // " ldon_points_mmc, " - pp->ldon_points_ruj, // " ldon_points_ruj, " - pp->ldon_points_tak, // " ldon_points_tak, " - pp->ldon_points_available, // " ldon_points_available, " - pp->tribute_time_remaining, // " tribute_time_remaining, " - pp->showhelm, // " show_helm, " - pp->career_tribute_points, // " career_tribute_points, " - pp->tribute_points, // " tribute_points, " - pp->tribute_active, // " tribute_active, " - pp->endurance, // " endurance, " - pp->group_leadership_exp, // " group_leadership_exp, " - pp->raid_leadership_exp, // " raid_leadership_exp, " - pp->group_leadership_points, // " group_leadership_points, " - pp->raid_leadership_points, // " raid_leadership_points, " - pp->air_remaining, // " air_remaining, " - pp->PVPKills, // " pvp_kills, " - pp->PVPDeaths, // " pvp_deaths, " - pp->PVPCurrentPoints, // " pvp_current_points, " - pp->PVPCareerPoints, // " pvp_career_points, " - pp->PVPBestKillStreak, // " pvp_best_kill_streak, " - pp->PVPWorstDeathStreak, // " pvp_worst_death_streak, " - pp->PVPCurrentKillStreak, // " pvp_current_kill_streak, " - pp->aapoints_spent, // " aa_points_spent, " - pp->expAA, // " aa_exp, " - pp->aapoints, // " aa_points, " - pp->groupAutoconsent, // " group_auto_consent, " - pp->raidAutoconsent, // " raid_auto_consent, " - pp->guildAutoconsent, // " guild_auto_consent, " - pp->RestTimer // " RestTimer) " + pp->exp, // " exp, " + pp->points, // " points, " + pp->mana, // " mana, " + pp->cur_hp, // " cur_hp, " + pp->STR, // " str, " + pp->STA, // " sta, " + pp->CHA, // " cha, " + pp->DEX, // " dex, " + pp->INT, // " `int`, " + pp->AGI, // " agi, " + pp->WIS, // " wis, " + pp->face, // " face, " + pp->y, // " y, " + pp->x, // " x, " + pp->z, // " z, " + pp->heading, // " heading, " + pp->pvp2, // " pvp2, " + pp->pvptype, // " pvp_type, " + pp->autosplit, // " autosplit_enabled, " + pp->zone_change_count, // " zone_change_count, " + pp->drakkin_heritage, // " drakkin_heritage, " + pp->drakkin_tattoo, // " drakkin_tattoo, " + pp->drakkin_details, // " drakkin_details, " + pp->toxicity, // " toxicity, " + pp->hunger_level, // " hunger_level, " + pp->thirst_level, // " thirst_level, " + pp->ability_up, // " ability_up, " + pp->zone_id, // " zone_id, " + pp->zoneInstance, // " zone_instance, " + pp->leadAAActive, // " leadership_exp_on, " + pp->ldon_points_guk, // " ldon_points_guk, " + pp->ldon_points_mir, // " ldon_points_mir, " + pp->ldon_points_mmc, // " ldon_points_mmc, " + pp->ldon_points_ruj, // " ldon_points_ruj, " + pp->ldon_points_tak, // " ldon_points_tak, " + pp->ldon_points_available, // " ldon_points_available, " + pp->tribute_time_remaining, // " tribute_time_remaining, " + pp->showhelm, // " show_helm, " + pp->career_tribute_points, // " career_tribute_points, " + pp->tribute_points, // " tribute_points, " + pp->tribute_active, // " tribute_active, " + pp->endurance, // " endurance, " + pp->group_leadership_exp, // " group_leadership_exp, " + pp->raid_leadership_exp, // " raid_leadership_exp, " + pp->group_leadership_points, // " group_leadership_points, " + pp->raid_leadership_points, // " raid_leadership_points, " + pp->air_remaining, // " air_remaining, " + pp->PVPKills, // " pvp_kills, " + pp->PVPDeaths, // " pvp_deaths, " + pp->PVPCurrentPoints, // " pvp_current_points, " + pp->PVPCareerPoints, // " pvp_career_points, " + pp->PVPBestKillStreak, // " pvp_best_kill_streak, " + pp->PVPWorstDeathStreak, // " pvp_worst_death_streak, " + pp->PVPCurrentKillStreak, // " pvp_current_kill_streak, " + pp->aapoints_spent, // " aa_points_spent, " + pp->expAA, // " aa_exp, " + pp->aapoints, // " aa_points, " + pp->groupAutoconsent, // " group_auto_consent, " + pp->raidAutoconsent, // " raid_auto_consent, " + pp->guildAutoconsent, // " guild_auto_consent, " + pp->RestTimer // " RestTimer) " ); - auto results = QueryDatabase(query); + QueryDatabase(query); /* Save Bind Points */ - query = StringFormat("REPLACE INTO `character_bind` (id, zone_id, instance_id, x, y, z, heading, slot)" + query = StringFormat( + "REPLACE INTO `character_bind` (id, zone_id, instance_id, x, y, z, heading, slot)" " VALUES (%u, %u, %u, %f, %f, %f, %f, %i), " "(%u, %u, %u, %f, %f, %f, %f, %i), " "(%u, %u, %u, %f, %f, %f, %f, %i), " @@ -739,57 +741,73 @@ bool Database::SaveCharacterCreate(uint32 character_id, uint32 account_id, Playe character_id, pp->binds[2].zone_id, 0, pp->binds[2].x, pp->binds[2].y, pp->binds[2].z, pp->binds[2].heading, 2, character_id, pp->binds[3].zone_id, 0, pp->binds[3].x, pp->binds[3].y, pp->binds[3].z, pp->binds[3].heading, 3, character_id, pp->binds[4].zone_id, 0, pp->binds[4].x, pp->binds[4].y, pp->binds[4].z, pp->binds[4].heading, 4 - ); results = QueryDatabase(query); + ); + QueryDatabase(query); - /* HoTT Ability */ - if(RuleB(Character, GrantHoTTOnCreate)) - { - query = StringFormat("INSERT INTO `character_leadership_abilities` (id, slot, `rank`) VALUES (%u, %i, %i)", character_id, 14, 1); - results = QueryDatabase(query); - } + /* HoTT Ability */ + if (RuleB(Character, GrantHoTTOnCreate)) { + query = StringFormat( + "INSERT INTO `character_leadership_abilities` (id, slot, `rank`) VALUES (%u, %i, %i)", + character_id, + 14, + 1 + ); + QueryDatabase(query); + } /* Save Skills */ - int firstquery = 0; - for (int i = 0; i < MAX_PP_SKILL; i++){ - if (pp->skills[i] > 0){ - if (firstquery != 1){ + int firstquery = 0; + for (int i = 0; i < MAX_PP_SKILL; i++) { + if (pp->skills[i] > 0) { + if (firstquery != 1) { firstquery = 1; - query = StringFormat("REPLACE INTO `character_skills` (id, skill_id, value) VALUES (%u, %u, %u)", character_id, i, pp->skills[i]); - } - else{ + query = StringFormat( + "REPLACE INTO `character_skills` (id, skill_id, value) VALUES (%u, %u, %u)", + character_id, + i, + pp->skills[i] + ); + } else { query = query + StringFormat(", (%u, %u, %u)", character_id, i, pp->skills[i]); } } } - results = QueryDatabase(query); + QueryDatabase(query); /* Save Language */ firstquery = 0; - for (int i = 0; i < MAX_PP_LANGUAGE; i++){ - if (pp->languages[i] > 0){ - if (firstquery != 1){ + for (int i = 0; i < MAX_PP_LANGUAGE; i++) { + if (pp->languages[i] > 0) { + if (firstquery != 1) { firstquery = 1; - query = StringFormat("REPLACE INTO `character_languages` (id, lang_id, value) VALUES (%u, %u, %u)", character_id, i, pp->languages[i]); - } - else{ + query = StringFormat( + "REPLACE INTO `character_languages` (id, lang_id, value) VALUES (%u, %u, %u)", + character_id, + i, + pp->languages[i] + ); + } else { query = query + StringFormat(", (%u, %u, %u)", character_id, i, pp->languages[i]); } } } - results = QueryDatabase(query); + QueryDatabase(query); return true; } uint32 Database::GetCharacterID(const char *name) { - std::string query = StringFormat("SELECT `id` FROM `character_data` WHERE `name` = '%s'", name); + const auto query = fmt::format( + "SELECT `id` FROM `character_data` WHERE `name` = '{}'", + Strings::Escape(name) + ); auto results = QueryDatabase(query); - auto row = results.begin(); - if (results.RowCount() == 1) - { - return Strings::ToUnsignedInt(row[0]); + if (!results.Success() || !results.RowCount()) { + return 0; } - return 0; + + auto row = results.begin(); + return Strings::ToUnsignedInt(row[0]); } /* @@ -999,7 +1017,7 @@ bool Database::GetVariable(std::string varname, std::string &varvalue) return false; } -bool Database::SetVariable(const std::string varname, const std::string &varvalue) +bool Database::SetVariable(const std::string& varname, const std::string &varvalue) { std::string escaped_name = Strings::Escape(varname); std::string escaped_value = Strings::Escape(varvalue); @@ -2043,10 +2061,12 @@ uint32 Database::GetRaidIDByCharID(uint32 character_id) { character_id ); auto results = QueryDatabase(query); - for (auto row = results.begin(); row != results.end(); ++row) { - return Strings::ToUnsignedInt(row[0]); + if (!results.Success() || !results.RowCount()) { + return 0; } - return 0; + + auto row = results.begin(); + return Strings::ToUnsignedInt(row[0]); } int Database::CountInvSnapshots() { @@ -2272,7 +2292,6 @@ bool Database::CopyCharacter( new_rows.emplace_back(new_values); } - std::string insert_values; std::vector insert_rows; for (auto &r: new_rows) { @@ -2328,7 +2347,7 @@ void Database::SourceDatabaseTableFromUrl(std::string table_name, std::string ur ); if (!DoesTableExist(table_name)) { - LogMySQLQuery("Table [{}] does not exist. Downloading from Github and installing...", table_name); + LogMySQLQuery("Table [{}] does not exist. Downloading and installing...", table_name); // http get request httplib::Client cli( @@ -2336,7 +2355,7 @@ void Database::SourceDatabaseTableFromUrl(std::string table_name, std::string ur "{}://{}", request_uri.get_scheme(), request_uri.get_host() - ).c_str() + ) ); cli.set_connection_timeout(0, 60000000); // 60 sec @@ -2345,7 +2364,7 @@ void Database::SourceDatabaseTableFromUrl(std::string table_name, std::string ur int sourced_queries = 0; - if (auto res = cli.Get(request_uri.get_path().c_str())) { + if (auto res = cli.Get(request_uri.get_path())) { if (res->status == 200) { for (auto &s: Strings::Split(res->body, ';')) { if (!Strings::Trim(s).empty()) { @@ -2389,3 +2408,55 @@ uint8 Database::GetMinStatus(uint32 zone_id, uint32 instance_version) return !zones.empty() ? zones[0].min_status : 0; } + +void Database::SourceSqlFromUrl(std::string url) +{ + try { + uri request_uri(url); + + LogHTTPDetail( + "parsing url [{}] path [{}] host [{}] query_string [{}] protocol [{}] port [{}]", + url, + request_uri.get_path(), + request_uri.get_host(), + request_uri.get_query(), + request_uri.get_scheme(), + request_uri.get_port() + ); + + LogInfo("Downloading and installing from [{}]", url); + + // http get request + httplib::Client cli( + fmt::format( + "{}://{}", + request_uri.get_scheme(), + request_uri.get_host() + ) + ); + + cli.set_connection_timeout(0, 60000000); // 60 sec + cli.set_read_timeout(60, 0); // 60 seconds + cli.set_write_timeout(60, 0); // 60 seconds + + if (auto res = cli.Get(request_uri.get_path())) { + if (res->status == 200) { + auto results = QueryDatabaseMulti(res->body); + if (!results.ErrorMessage().empty()) { + LogError("Error sourcing SQL [{}]", results.ErrorMessage()); + return; + } + } + if (res->status == 404) { + LogError("Error retrieving URL [{}]", url); + } + } + else { + LogError("Error retrieving URL [{}]", url); + } + + } + catch (std::invalid_argument iae) { + LogError("URI parser error [{}]", iae.what()); + } +} diff --git a/common/database.h b/common/database.h index 10120c109..ad9e80c7a 100644 --- a/common/database.h +++ b/common/database.h @@ -235,7 +235,7 @@ public: /* Database Variables */ bool GetVariable(std::string varname, std::string &varvalue); - bool SetVariable(const std::string varname, const std::string &varvalue); + bool SetVariable(const std::string& varname, const std::string &varvalue); bool LoadVariables(); /* General Queries */ @@ -263,7 +263,7 @@ public: void ClearInvSnapshots(bool from_now = false); void SourceDatabaseTableFromUrl(std::string table_name, std::string url); - + void SourceSqlFromUrl(std::string url); private: diff --git a/common/database/database_dump_service.cpp b/common/database/database_dump_service.cpp index 3aa528665..4d81ed663 100644 --- a/common/database/database_dump_service.cpp +++ b/common/database/database_dump_service.cpp @@ -28,6 +28,7 @@ #include "../database_schema.h" #include "../file.h" #include "../process/process.h" +#include "../termcolor/rang.hpp" #include @@ -36,6 +37,7 @@ #else #include +#include #endif @@ -91,6 +93,8 @@ std::string DatabaseDumpService::GetMySQLVersion() return Strings::Trim(version_output); } +const std::string CREDENTIALS_FILE = "login.my.cnf"; + /** * @return */ @@ -99,21 +103,15 @@ std::string DatabaseDumpService::GetBaseMySQLDumpCommand() auto config = EQEmuConfig::get(); if (IsDumpContentTables() && !config->ContentDbHost.empty()) { return fmt::format( - "mysqldump -u {} -p{} -h {} --port={} {}", - config->ContentDbUsername, - config->ContentDbPassword, - config->ContentDbHost, - config->ContentDbPort, + "mysqldump --defaults-extra-file={} {}", + CREDENTIALS_FILE, config->ContentDbName ); }; return fmt::format( - "mysqldump -u {} -p{} -h {} --port={} {}", - config->DatabaseUsername, - config->DatabasePassword, - config->DatabaseHost, - config->DatabasePort, + "mysqldump --defaults-extra-file={} {}", + CREDENTIALS_FILE, config->DatabaseDB ); } @@ -145,7 +143,7 @@ std::string DatabaseDumpService::GetQueryServTables() std::string DatabaseDumpService::GetSystemTablesList() { - auto system_tables = DatabaseSchema::GetServerTables(); + auto system_tables = DatabaseSchema::GetServerTables(); auto version_tables = DatabaseSchema::GetVersionTables(); system_tables.insert( @@ -199,7 +197,7 @@ std::string DatabaseDumpService::GetDumpFileNameWithPath() return GetSetDumpPath() + GetDumpFileName(); } -void DatabaseDumpService::Dump() +void DatabaseDumpService::DatabaseDump() { if (!IsMySQLInstalled()) { LogError("MySQL is not installed; Please check your PATH for a valid MySQL installation"); @@ -293,14 +291,6 @@ void DatabaseDumpService::Dump() pipe_file = fmt::format(" > {}.sql", GetDumpFileNameWithPath()); } - std::string execute_command = fmt::format( - "{} {} {} {}", - GetBaseMySQLDumpCommand(), - options, - tables_to_dump, - pipe_file - ); - if (!File::Exists(GetSetDumpPath()) && !IsDumpOutputToConsole()) { File::Makedir(GetSetDumpPath()); } @@ -308,30 +298,60 @@ void DatabaseDumpService::Dump() if (IsDumpDropTableSyntaxOnly()) { std::vector tables = Strings::Split(tables_to_dump, ' '); - for (auto &table : tables) { + for (auto &table: tables) { std::cout << "DROP TABLE IF EXISTS `" << table << "`;" << std::endl; } if (tables_to_dump.empty()) { std::cerr << "No tables were specified" << std::endl; } + + return; } else { + const auto execute_command = fmt::format( + "{} {} {} {}", + GetBaseMySQLDumpCommand(), + options, + tables_to_dump, + pipe_file + ); + + BuildCredentialsFile(); std::string execution_result = Process::execute(execute_command); if (!execution_result.empty() && IsDumpOutputToConsole()) { std::cout << execution_result; } } + LogSys.LoadLogSettingsDefaults(); + + if (!pipe_file.empty()) { + std::string file = fmt::format("{}.sql", GetDumpFileNameWithPath()); + auto r = File::GetContents(file); + if (!r.error.empty()) { + LogError("{}", r.error); + } + + for (auto &line: Strings::Split(r.contents, "\n")) { + if (Strings::Contains(line, "mysqldump:")) { + LogError("{}", line); + LogError("Database dump failed. Correct the error before continuing or trying again"); + LogError("This is to prevent data loss on behalf of the server operator"); + RemoveSqlBackup(); + std::exit(1); + } + } + } + if (!tables_to_dump.empty()) { LogInfo("Dumping Tables [{}]", Strings::Trim(tables_to_dump)); } LogInfo("Database dump created at [{}.sql]", GetDumpFileNameWithPath()); - if (IsDumpWithCompression() && !IsDumpOutputToConsole()) { if (HasCompressionBinary()) { - LogInfo("Compression requested... Compressing dump [{}.sql]", GetDumpFileNameWithPath()); + LogInfo("Compression requested. Compressing dump [{}.sql]", GetDumpFileNameWithPath()); if (IsTarAvailable()) { Process::execute( @@ -343,6 +363,7 @@ void DatabaseDumpService::Dump() ) ); LogInfo("Compressed dump created at [{}.tar.gz]", GetDumpFileNameWithPath()); + RemoveSqlBackup(); } else if (Is7ZipAvailable()) { Process::execute( @@ -353,6 +374,7 @@ void DatabaseDumpService::Dump() ) ); LogInfo("Compressed dump created at [{}.zip]", GetDumpFileNameWithPath()); + RemoveSqlBackup(); } else { LogInfo("Compression requested, but no available compression binary was found"); @@ -363,6 +385,8 @@ void DatabaseDumpService::Dump() } } + RemoveCredentialsFile(); + // LogDebug("[{}] dump-to-console", IsDumpOutputToConsole()); // LogDebug("[{}] dump-path", GetSetDumpPath()); // LogDebug("[{}] compression", (IsDumpWithCompression() ? "true" : "false")); @@ -535,3 +559,48 @@ void DatabaseDumpService::SetDumpMercTables(bool dump_merc_tables) { DatabaseDumpService::dump_merc_tables = dump_merc_tables; } + +void DatabaseDumpService::RemoveSqlBackup() +{ + std::string file = fmt::format("{}.sql", GetDumpFileNameWithPath()); + if (File::Exists(file)) { + std::filesystem::remove(file); + } + + RemoveCredentialsFile(); +} + +void DatabaseDumpService::BuildCredentialsFile() +{ + auto config = EQEmuConfig::get(); + std::ofstream out(CREDENTIALS_FILE); + if (out.is_open()) { + if (IsDumpContentTables() && !config->ContentDbHost.empty()) { + out << "[mysqldump]" << std::endl; + out << "user=" << config->ContentDbUsername << std::endl; + out << "password=" << config->ContentDbPassword << std::endl; + out << "host=" << config->ContentDbHost << std::endl; + out << "port=" << config->ContentDbPort << std::endl; + out << "default-character-set=utf8" << std::endl; + } + else { + out << "[mysqldump]" << std::endl; + out << "user=" << config->DatabaseUsername << std::endl; + out << "password=" << config->DatabasePassword << std::endl; + out << "host=" << config->DatabaseHost << std::endl; + out << "port=" << config->DatabasePort << std::endl; + out << "default-character-set=utf8" << std::endl; + } + out.close(); + } + else { + LogError("Failed to open credentials file for writing"); + } +} + +void DatabaseDumpService::RemoveCredentialsFile() +{ + if (File::Exists(CREDENTIALS_FILE)) { + std::filesystem::remove(CREDENTIALS_FILE); + } +} diff --git a/common/database/database_dump_service.h b/common/database/database_dump_service.h index 06f39dda1..e60c04d95 100644 --- a/common/database/database_dump_service.h +++ b/common/database/database_dump_service.h @@ -24,7 +24,7 @@ class DatabaseDumpService { public: - void Dump(); + void DatabaseDump(); bool IsDumpAllTables() const; void SetDumpAllTables(bool dump_all_tables); bool IsDumpWithNoData() const; @@ -92,6 +92,9 @@ private: std::string GetDumpFileNameWithPath(); std::string GetSetDumpPath(); std::string GetQueryServTables(); + void RemoveSqlBackup(); + void BuildCredentialsFile(); + void RemoveCredentialsFile(); }; diff --git a/common/database/database_update.cpp b/common/database/database_update.cpp new file mode 100644 index 000000000..d38fe194a --- /dev/null +++ b/common/database/database_update.cpp @@ -0,0 +1,300 @@ +#include +#include "database_update.h" +#include "../eqemu_logsys.h" +#include "../database.h" +#include "../strings.h" +#include "../rulesys.h" +#include "../http/httplib.h" + +#include "database_update_manifest.cpp" +#include "database_update_manifest_bots.cpp" +#include "database_dump_service.h" + +constexpr int BREAK_LENGTH = 70; + +DatabaseVersion DatabaseUpdate::GetDatabaseVersions() +{ + auto results = m_database->QueryDatabase("SELECT `version`, `bots_version` FROM `db_version` LIMIT 1"); + if (!results.Success() || !results.RowCount()) { + LogError("Failed to read from [db_version] table!"); + return DatabaseVersion{}; + } + + auto r = results.begin(); + + return DatabaseVersion{ + .server_database_version = Strings::ToInt(r[0]), + .bots_database_version = Strings::ToInt(r[1]), + }; +} + +DatabaseVersion DatabaseUpdate::GetBinaryDatabaseVersions() +{ + return DatabaseVersion{ + .server_database_version = CURRENT_BINARY_DATABASE_VERSION, + .bots_database_version = (RuleB(Bots, Enabled) ? CURRENT_BINARY_BOTS_DATABASE_VERSION : 0), + }; +} + +// the amount of versions we look-back to ensure we have all migrations +// we may not want to force these, but just warn about the look-backs +constexpr int LOOK_BACK_AMOUNT = 10; + +// this check will take action +void DatabaseUpdate::CheckDbUpdates() +{ + InjectBotsVersionColumn(); + auto v = GetDatabaseVersions(); + auto b = GetBinaryDatabaseVersions(); + if (CheckVersionsUpToDate(v, b)) { + return; + } + + if (UpdateManifest(manifest_entries, v.server_database_version, b.server_database_version)) { + LogInfo( + "Updates ran successfully, setting database version to [{}] from [{}]", + b.server_database_version, + v.server_database_version + ); + m_database->QueryDatabase(fmt::format("UPDATE `db_version` SET `version` = {}", b.server_database_version)); + } + + if (b.bots_database_version > 0) { + if (UpdateManifest(bot_manifest_entries, v.bots_database_version, b.bots_database_version)) { + LogInfo( + "Updates ran successfully, setting database version to [{}] from [{}]", + b.bots_database_version, + v.bots_database_version + ); + m_database->QueryDatabase( + fmt::format( + "UPDATE `db_version` SET `bots_version` = {}", + b.bots_database_version + ) + ); + } + } +} + +std::string DatabaseUpdate::GetQueryResult(std::string query) +{ + auto results = m_database->QueryDatabase(query); + + std::vector result_lines = {}; + + for (auto row = results.begin(); row != results.end(); ++row) { + std::vector cols; + + int field_count = results.ColumnCount(); + cols.reserve(field_count); + for (int i = 0; i < field_count; ++i) { + if (row[i] != nullptr) { + cols.emplace_back(row[i]); + } + } + + result_lines.emplace_back(Strings::Join(cols, " ")); + } + + return Strings::Join(result_lines, "\n"); +} + +bool DatabaseUpdate::ShouldRunMigration(ManifestEntry &e, std::string query_result) +{ + std::string r = Strings::Trim(query_result); + if (e.condition == "contains") { + return Strings::Contains(r, e.match); + } + else if (e.condition == "match") { + return r == e.match; + } + else if (e.condition == "missing") { + return !Strings::Contains(r, e.match); + } + else if (e.condition == "empty") { + return r.empty(); + } + else if (e.condition == "not_empty") { + return !r.empty(); + } + + return false; +} + +// return true if we ran updates +bool DatabaseUpdate::UpdateManifest( + std::vector entries, + int version_low, + int version_high +) +{ + std::vector missing_migrations = {}; + if (version_low != version_high) { + + LogSys.DisableMySQLErrorLogs(); + for (int version = version_low + 1; version <= version_high; ++version) { + for (auto &e: entries) { + if (e.version == version) { + bool has_migration = true; + std::string r = GetQueryResult(e.check); + if (ShouldRunMigration(e, r)) { + has_migration = false; + missing_migrations.emplace_back(e.version); + } + + std::string prefix = fmt::format( + "[{}]", + has_migration ? "ok" : "missing" + ); + + LogInfo( + "[{}] {:>10} | [{}]", + e.version, + prefix, + e.description + ); + } + } + } + LogSys.EnableMySQLErrorLogs(); + LogInfo("{}", Strings::Repeat("-", BREAK_LENGTH)); + + if (!missing_migrations.empty()) { + LogInfo("Automatically backing up database before applying updates"); + LogInfo("{}", Strings::Repeat("-", BREAK_LENGTH)); + auto s = DatabaseDumpService(); + s.SetDumpAllTables(true); + s.SetDumpWithCompression(true); + s.DatabaseDump(); + LogInfo("{}", Strings::Repeat("-", BREAK_LENGTH)); + } + + if (!missing_migrations.empty()) { + LogInfo("Running database migrations. Please wait..."); + LogInfo("{}", Strings::Repeat("-", BREAK_LENGTH)); + } + + for (auto &m: missing_migrations) { + for (auto &e: entries) { + if (e.version == m) { + bool errored_migration = false; + + auto r = m_database->QueryDatabaseMulti(e.sql); + + // ignore empty query result "errors" + if (r.ErrorNumber() != 1065 && !r.ErrorMessage().empty()) { + LogError("(#{}) [{}]", r.ErrorNumber(), r.ErrorMessage()); + errored_migration = true; + + LogInfo("Required database update failed. This could be a problem"); + LogInfo("Would you like to skip this update? [y/n] (Timeout 60s)"); + + // user input + std::string input; + bool gave_input = false; + time_t start_time = time(nullptr); + time_t wait_time_seconds = 60; + + // spawn a concurrent thread that waits for input from std::cin + std::thread t1( + [&]() { + std::cin >> input; + gave_input = true; + } + ); + t1.detach(); + + // check the inputReceived flag once every 50ms for 10 seconds + while (time(nullptr) < start_time + wait_time_seconds && !gave_input) { + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + } + + // prompt for user skip + if (Strings::Trim(input) == "y") { + errored_migration = false; + LogInfo("Skipping update [{}] [{}]", e.version, e.description); + } + } + + LogInfo( + "[{}] [{}] [{}]", + e.version, + e.description, + (errored_migration ? "error" : "ok") + ); + + if (errored_migration) { + LogError("Fatal | Database migration [{}] failed to run", e.description); + LogError("Fatal | Shutting down"); + std::exit(1); + } + } + } + } + + LogInfo("{}", Strings::Repeat("-", BREAK_LENGTH)); + + return true; + } + + return false; +} + +DatabaseUpdate *DatabaseUpdate::SetDatabase(Database *db) +{ + m_database = db; + + return this; +} + +bool DatabaseUpdate::CheckVersionsUpToDate(DatabaseVersion v, DatabaseVersion b) +{ + LogInfo("{}", Strings::Repeat("-", BREAK_LENGTH)); + + LogInfo( + "{:>8} | database [{}] binary [{}] {}", + "Server", + v.server_database_version, + b.server_database_version, + (v.server_database_version == b.server_database_version) ? "up to date" : "checking updates" + ); + + if (RuleB(Bots, Enabled) && b.bots_database_version > 0) { + LogInfo( + "{:>8} | database [{}] binary [{}] {}", + "Bots", + v.bots_database_version, + b.bots_database_version, + (v.bots_database_version == b.bots_database_version) ? "up to date" : "checking updates" + ); + } + + LogInfo("{:>8} | [server.auto_database_updates] [true]", "Config"); + + LogInfo("{}", Strings::Repeat("-", BREAK_LENGTH)); + + // server database version is required + bool server_up_to_date = v.server_database_version == b.server_database_version; + // bots database version is optional, if not enabled then it is always up-to-date + bool bots_up_to_date = RuleB(Bots, Enabled) ? v.bots_database_version == b.bots_database_version : true; + + return server_up_to_date && bots_up_to_date; +} + +// checks to see if there are pending updates +// used by zone to prevent launch or boot loop until updates are applied +bool DatabaseUpdate::HasPendingUpdates() +{ + auto v = GetDatabaseVersions(); + auto b = GetBinaryDatabaseVersions(); + + return !CheckVersionsUpToDate(v, b); +} + +void DatabaseUpdate::InjectBotsVersionColumn() +{ + auto r = m_database->QueryDatabase("show columns from db_version where Field like '%bots_version%'"); + if (r.RowCount() == 0) { + m_database->QueryDatabase("ALTER TABLE db_version ADD bots_version int(11) DEFAULT '0' AFTER version"); + } +} diff --git a/common/database/database_update.h b/common/database/database_update.h new file mode 100644 index 000000000..22c30dd4d --- /dev/null +++ b/common/database/database_update.h @@ -0,0 +1,37 @@ +#ifndef EQEMU_DATABASE_UPDATE_H +#define EQEMU_DATABASE_UPDATE_H + +#include "../database.h" + +struct ManifestEntry { + int version{}; // database version of the migration + std::string description{}; // description of the migration ex: "add_new_table" or "add_index_to_table" + std::string check{}; // query that checks against the condition + std::string condition{}; // condition or "match_type" - Possible values [contains|match|missing|empty|not_empty] + std::string match{}; // match field that is not always used, but works in conjunction with "condition" values [missing|match|contains] + std::string sql{}; // the SQL DDL that gets ran when the condition is true +}; + +struct DatabaseVersion { + int server_database_version; + int bots_database_version; +}; + +class DatabaseUpdate { +public: + DatabaseVersion GetDatabaseVersions(); + DatabaseVersion GetBinaryDatabaseVersions(); + void CheckDbUpdates(); + std::string GetQueryResult(std::string query); + static bool ShouldRunMigration(ManifestEntry &e, std::string query_result); + bool UpdateManifest(std::vector entries, int version_low, int version_high); + + DatabaseUpdate *SetDatabase(Database *db); + bool HasPendingUpdates(); +private: + Database *m_database; + static bool CheckVersionsUpToDate(DatabaseVersion v, DatabaseVersion b); + void InjectBotsVersionColumn(); +}; + +#endif //EQEMU_DATABASE_UPDATE_H diff --git a/common/database/database_update_manifest.cpp b/common/database/database_update_manifest.cpp new file mode 100644 index 000000000..ea7f5c438 --- /dev/null +++ b/common/database/database_update_manifest.cpp @@ -0,0 +1,4797 @@ +#include "database_update.h" + +std::vector manifest_entries = { + ManifestEntry{ + .version = 9000, + .description = "2013_02_18_merc_rules_and_tables.sql", + .check = "SELECT * FROM `rule_values` WHERE `rule_name` LIKE '%Mercs:ResurrectRadius%'", + .condition = "empty", + .match = "", + .sql = R"( +INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Mercs:ResurrectRadius', '50', 'Determines the distance from which a healer merc will attempt to resurrect a corpse'); + +DROP TABLE IF EXISTS mercsbuffs; +DROP TABLE IF EXISTS mercs; + +CREATE TABLE mercs ( + MercID int(10) unsigned NOT NULL AUTO_INCREMENT, + OwnerCharacterID int(10) unsigned NOT NULL, + Slot tinyint(1) unsigned NOT NULL DEFAULT '0', + Name varchar(64) NOT NULL, + TemplateID int(10) unsigned NOT NULL DEFAULT '0', + SuspendedTime int(11) unsigned NOT NULL DEFAULT '0', + IsSuspended tinyint(1) unsigned NOT NULL default '0', + TimerRemaining int(11) unsigned NOT NULL DEFAULT '0', + Gender tinyint unsigned NOT NULL DEFAULT '0', + StanceID tinyint unsigned NOT NULL DEFAULT '0', + HP int(11) unsigned NOT NULL DEFAULT '0', + Mana int(11) unsigned NOT NULL DEFAULT '0', + Endurance int(11) unsigned NOT NULL DEFAULT '0', + Face int(10) unsigned NOT NULL DEFAULT '1', + LuclinHairStyle int(10) unsigned NOT NULL DEFAULT '1', + LuclinHairColor int(10) unsigned NOT NULL DEFAULT '1', + LuclinEyeColor int(10) unsigned NOT NULL DEFAULT '1', + LuclinEyeColor2 int(10) unsigned NOT NULL DEFAULT '1', + LuclinBeardColor int(10) unsigned NOT NULL DEFAULT '1', + LuclinBeard int(10) unsigned NOT NULL DEFAULT '0', + DrakkinHeritage int(10) unsigned NOT NULL DEFAULT '0', + DrakkinTattoo int(10) unsigned NOT NULL DEFAULT '0', + DrakkinDetails int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (MercID) +); + +CREATE TABLE mercbuffs ( + MercBuffId int(10) unsigned NOT NULL auto_increment, + MercId int(10) unsigned NOT NULL default '0', + SpellId int(10) unsigned NOT NULL default '0', + CasterLevel int(10) unsigned NOT NULL default '0', + DurationFormula int(10) unsigned NOT NULL default '0', + TicsRemaining int(11) unsigned NOT NULL default '0', + PoisonCounters int(11) unsigned NOT NULL default '0', + DiseaseCounters int(11) unsigned NOT NULL default '0', + CurseCounters int(11) unsigned NOT NULL default '0', + CorruptionCounters int(11) unsigned NOT NULL default '0', + HitCount int(10) unsigned NOT NULL default '0', + MeleeRune int(10) unsigned NOT NULL default '0', + MagicRune int(10) unsigned NOT NULL default '0', + DeathSaveSuccessChance int(10) unsigned NOT NULL default '0', + CasterAARank int(10) unsigned NOT NULL default '0', + Persistent tinyint(1) NOT NULL default '0', + PRIMARY KEY (MercBuffId), + KEY FK_mercbuff_1 (MercId), + CONSTRAINT FK_mercbuff_1 FOREIGN KEY (MercId) REFERENCES mercs (MercID) +); +)", + }, + ManifestEntry{ + .version = 9001, + .description = "2013_02_25_impr_ht_lt.sql", + .check = "SHOW TABLES LIKE 'merc_inventory'", + .condition = "empty", + .match = "", + .sql = R"( +/* SK AA Touch of the Wicked should reduce reuse timers for */ +/* Improved Harm Touch & Leech Touch as well as regular HT */ +update aa_actions set redux_aa=596, redux_rate=17 where aaid=207; +update aa_actions set redux_aa=596, redux_rate=17 where aaid=208; + +)", + }, + ManifestEntry{ + .version = 9002, + .description = "2013_03_1_merc_rules_and_equipment.sql", + .check = "SHOW TABLES LIKE 'merc_inventory'", + .condition = "empty", + .match = "", + .sql = R"( +INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Mercs:ChargeMercPurchaseCost', 'false', 'Turns Mercenary purchase costs on or off.'); +INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Mercs:ChargeMercUpkeepCost', 'false', 'Turns Mercenary upkeep costs on or off.'); + +UPDATE merc_stats SET spellscale = 100, healscale = 100; + +ALTER TABLE mercbuffs RENAME TO merc_buffs; + +DROP TABLE IF EXISTS merc_inventory; + +CREATE TABLE merc_inventory ( + merc_inventory_id int(10) unsigned NOT NULL auto_increment, + merc_subtype_id int(10) unsigned NOT NULL default '0', + item_id int(11) unsigned NOT NULL default '0', + min_level int(10) unsigned NOT NULL default '0', + max_level int(10) unsigned NOT NULL default '0', + PRIMARY KEY (merc_inventory_id), + KEY FK_merc_inventory_1 (merc_subtype_id), + CONSTRAINT FK_merc_inventory_1 FOREIGN KEY (merc_subtype_id) REFERENCES merc_subtypes (merc_subtype_id) +); + +)", + }, + ManifestEntry{ + .version = 9005, + .description = "2013_04_08_salvage.sql", + .check = "SHOW COLUMNS FROM `tradeskill_recipe_entries` LIKE 'salvagecount'", + .condition = "empty", + .match = "", + .sql = R"( +-- Add row to tre +ALTER TABLE `tradeskill_recipe_entries` ADD `salvagecount` tinyint(2) DEFAULT '0' NOT NULL AFTER `componentcount`; + +-- Fix level req on Salvage +UPDATE `altadv_vars` SET `level_inc` = '5' WHERE `skill_id` = '997'; + +-- Set aa_effects for Salvage +INSERT INTO `aa_effects` (`id`, `aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('2374', '997', '1', '313', '5', '0'); +INSERT INTO `aa_effects` (`id`, `aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('2375', '998', '1', '313', '15', '0'); +INSERT INTO `aa_effects` (`id`, `aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('2376', '999', '1', '313', '25', '0'); + + +)", + }, + ManifestEntry{ + .version = 9006, + .description = "2013_05_05_account_flags.sql", + .check = "SHOW TABLES LIKE 'account_flags'", + .condition = "empty", + .match = "", + .sql = R"( +-- +-- Table structure for table `account_flags` +-- + +CREATE TABLE IF NOT EXISTS `account_flags` ( + `p_accid` int(10) unsigned NOT NULL, + `p_flag` varchar(50) NOT NULL, + `p_value` varchar(80) NOT NULL, + PRIMARY KEY (`p_accid`,`p_flag`), + KEY `p_accid` (`p_accid`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +)", + }, + ManifestEntry{ + .version = 9007, + .description = "2013_05_05_item_tick.sql", + .check = "SHOW TABLES LIKE 'item_tick'", + .condition = "empty", + .match = "", + .sql = R"( +-- +-- Table structure for table `item_tick` +-- + +CREATE TABLE IF NOT EXISTS `item_tick` ( + `it_itemid` int(11) NOT NULL, + `it_chance` int(11) NOT NULL, + `it_level` int(11) NOT NULL, + `it_id` int(11) NOT NULL AUTO_INCREMENT, + `it_qglobal` varchar(50) NOT NULL, + `it_bagslot` tinyint(4) NOT NULL, + PRIMARY KEY (`it_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +)", + }, + ManifestEntry{ + .version = 9008, + .description = "2013_07_11_npc_special_abilities.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'special_abilities'", + .condition = "empty", + .match = "", + .sql =R"( +ALTER TABLE `npc_types` ADD COLUMN `special_abilities` TEXT NULL AFTER `npcspecialattks`; +ALTER TABLE `npc_types` MODIFY COLUMN `special_abilities` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL; + +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "1,1^") WHERE npcspecialattks LIKE BINARY '%S%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "2,1^") WHERE npcspecialattks LIKE BINARY '%E%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "3,1^") WHERE npcspecialattks LIKE BINARY '%R%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "4,1^") WHERE npcspecialattks LIKE BINARY '%r%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "5,1^") WHERE npcspecialattks LIKE BINARY '%F%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "6,1^") WHERE npcspecialattks LIKE BINARY '%T%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "7,1^") WHERE npcspecialattks LIKE BINARY '%Q%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "8,1^") WHERE npcspecialattks LIKE BINARY '%L%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "9,1^") WHERE npcspecialattks LIKE BINARY '%b%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "10,1^") WHERE npcspecialattks LIKE BINARY '%m%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "11,1^") WHERE npcspecialattks LIKE BINARY '%Y%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "12,1^") WHERE npcspecialattks LIKE BINARY '%U%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "13,1^") WHERE npcspecialattks LIKE BINARY '%M%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "14,1^") WHERE npcspecialattks LIKE BINARY '%C%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "15,1^") WHERE npcspecialattks LIKE BINARY '%N%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "16,1^") WHERE npcspecialattks LIKE BINARY '%I%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "17,1^") WHERE npcspecialattks LIKE BINARY '%D%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "18,1^") WHERE npcspecialattks LIKE BINARY '%K%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "19,1^") WHERE npcspecialattks LIKE BINARY '%A%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "20,1^") WHERE npcspecialattks LIKE BINARY '%B%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "21,1^") WHERE npcspecialattks LIKE BINARY '%f%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "22,1^") WHERE npcspecialattks LIKE BINARY '%O%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "23,1^") WHERE npcspecialattks LIKE BINARY '%W%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "24,1^") WHERE npcspecialattks LIKE BINARY '%H%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "25,1^") WHERE npcspecialattks LIKE BINARY '%G%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "26,1^") WHERE npcspecialattks LIKE BINARY '%g%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "27,1^") WHERE npcspecialattks LIKE BINARY '%d%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "28,1^") WHERE npcspecialattks LIKE BINARY '%i%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "29,1^") WHERE npcspecialattks LIKE BINARY '%t%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "30,1^") WHERE npcspecialattks LIKE BINARY '%n%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "31,1^") WHERE npcspecialattks LIKE BINARY '%p%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "32,1^") WHERE npcspecialattks LIKE BINARY '%J%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "33,1^") WHERE npcspecialattks LIKE BINARY '%j%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "34,1^") WHERE npcspecialattks LIKE BINARY '%o%'; +UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "35,1^") WHERE npcspecialattks LIKE BINARY '%Z%'; +UPDATE npc_types SET special_abilities = TRIM(TRAILING '^' FROM special_abilities); + +ALTER TABLE `npc_types` DROP COLUMN `npcspecialattks`; +)", + }, + ManifestEntry{ + .version = 9009, + .description = "2013_10_12_merc_special_abilities.sql", + .check = "SHOW COLUMNS FROM `merc_stats` LIKE 'special_abilities'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `merc_stats` ADD COLUMN `special_abilities` TEXT NULL AFTER `specialattks`; +ALTER TABLE `merc_stats` MODIFY COLUMN `special_abilities` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL; + +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "1,1^") WHERE specialattks LIKE BINARY '%S%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "2,1^") WHERE specialattks LIKE BINARY '%E%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "3,1^") WHERE specialattks LIKE BINARY '%R%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "4,1^") WHERE specialattks LIKE BINARY '%r%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "5,1^") WHERE specialattks LIKE BINARY '%F%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "6,1^") WHERE specialattks LIKE BINARY '%T%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "7,1^") WHERE specialattks LIKE BINARY '%Q%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "8,1^") WHERE specialattks LIKE BINARY '%L%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "9,1^") WHERE specialattks LIKE BINARY '%b%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "10,1^") WHERE specialattks LIKE BINARY '%m%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "11,1^") WHERE specialattks LIKE BINARY '%Y%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "12,1^") WHERE specialattks LIKE BINARY '%U%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "13,1^") WHERE specialattks LIKE BINARY '%M%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "14,1^") WHERE specialattks LIKE BINARY '%C%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "15,1^") WHERE specialattks LIKE BINARY '%N%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "16,1^") WHERE specialattks LIKE BINARY '%I%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "17,1^") WHERE specialattks LIKE BINARY '%D%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "18,1^") WHERE specialattks LIKE BINARY '%K%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "19,1^") WHERE specialattks LIKE BINARY '%A%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "20,1^") WHERE specialattks LIKE BINARY '%B%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "21,1^") WHERE specialattks LIKE BINARY '%f%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "22,1^") WHERE specialattks LIKE BINARY '%O%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "23,1^") WHERE specialattks LIKE BINARY '%W%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "24,1^") WHERE specialattks LIKE BINARY '%H%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "25,1^") WHERE specialattks LIKE BINARY '%G%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "26,1^") WHERE specialattks LIKE BINARY '%g%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "27,1^") WHERE specialattks LIKE BINARY '%d%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "28,1^") WHERE specialattks LIKE BINARY '%i%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "29,1^") WHERE specialattks LIKE BINARY '%t%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "30,1^") WHERE specialattks LIKE BINARY '%n%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "31,1^") WHERE specialattks LIKE BINARY '%p%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "32,1^") WHERE specialattks LIKE BINARY '%J%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "33,1^") WHERE specialattks LIKE BINARY '%j%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "34,1^") WHERE specialattks LIKE BINARY '%o%'; +UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "35,1^") WHERE specialattks LIKE BINARY '%Z%'; +UPDATE merc_stats SET special_abilities = TRIM(TRAILING '^' FROM special_abilities); + +ALTER TABLE `merc_stats` DROP COLUMN `specialattks`; +)", + }, + ManifestEntry{ + .version = 9011, + .description = "2013_10_31_recipe_disabling.sql", + .check = "SHOW COLUMNS FROM `tradeskill_recipe` LIKE 'enabled'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `tradeskill_recipe` ADD `enabled` tinyint(1) NOT NULL DEFAULT '1'; + +)", + }, + ManifestEntry{ + .version = 9014, + .description = "2013_11_18_assistradius.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'assistradius'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD `assistradius` INT( 10 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `aggroradius`; + +)", + }, + ManifestEntry{ + .version = 9015, + .description = "2013_12_26_merchantlist_class_required.sql", + .check = "SHOW COLUMNS FROM `merchantlist` LIKE 'classes_required'", + .condition = "empty", + .match = "", + .sql = R"( + ALTER TABLE `merchantlist` ADD COLUMN `classes_required` INT(11) NOT NULL DEFAULT '65535'; + + +)", + }, + ManifestEntry{ + .version = 9017, + .description = "2014_01_08_spellsnewadditions.sql", + .check = "SHOW COLUMNS FROM `spells_new` LIKE 'persistdeath'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `spells_new` CHANGE `field200` `suspendable` INT(11) DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field202` `songcap` INT(11) DEFAULT '0'; +ALTER TABLE `spells_new` ADD `field215` INT(11) DEFAULT '0'; +ALTER TABLE `spells_new` ADD `field216` INT(11) DEFAULT '0'; +ALTER TABLE `spells_new` ADD `field217` INT(11) DEFAULT '0'; +ALTER TABLE `spells_new` ADD `field218` INT(11) DEFAULT '0'; +ALTER TABLE `spells_new` ADD `maxtargets` INT(11) DEFAULT '0'; +ALTER TABLE `spells_new` ADD `field220` INT(11) DEFAULT '0'; +ALTER TABLE `spells_new` ADD `field221` INT(11) DEFAULT '0'; +ALTER TABLE `spells_new` ADD `field222` INT(11) DEFAULT '0'; +ALTER TABLE `spells_new` ADD `field223` INT(11) DEFAULT '0'; +ALTER TABLE `spells_new` ADD `persistdeath` INT(11) DEFAULT '0'; + +)", + }, + ManifestEntry{ + .version = 9018, + .description = "2014_01_09_preservepetsize.sql", + .check = "SHOW COLUMNS FROM `character_pet_info` LIKE 'size'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `character_pet_info` ADD `size` FLOAT NOT NULL DEFAULT '0'; + +)", + }, + ManifestEntry{ + .version = 9020, + .description = "2014_01_20_not_extendable.sql", + .check = "SHOW COLUMNS FROM `spells_new` LIKE 'not_extendable'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `spells_new` CHANGE `field197` `not_extendable` INT(11) NOT NULL DEFAULT '0'; + +)", + }, + ManifestEntry{ + .version = 9022, + .description = "2014_01_20_weather.sql", + .check = "SHOW COLUMNS FROM `zone` LIKE 'rain_chance1'", + .condition = "empty", + .match = "", + .sql = R"( +alter table zone drop column `weather`; +alter table zone add column `rain_chance1` int(4) not null default 0; +alter table zone add column `rain_chance2` int(4) not null default 0; +alter table zone add column `rain_chance3` int(4) not null default 0; +alter table zone add column `rain_chance4` int(4) not null default 0; +alter table zone add column `rain_duration1` int(4) not null default 0; +alter table zone add column `rain_duration2` int(4) not null default 0; +alter table zone add column `rain_duration3` int(4) not null default 0; +alter table zone add column `rain_duration4` int(4) not null default 0; +alter table zone add column `snow_chance1` int(4) not null default 0; +alter table zone add column `snow_chance2` int(4) not null default 0; +alter table zone add column `snow_chance3` int(4) not null default 0; +alter table zone add column `snow_chance4` int(4) not null default 0; +alter table zone add column `snow_duration1` int(4) not null default 0; +alter table zone add column `snow_duration2` int(4) not null default 0; +alter table zone add column `snow_duration3` int(4) not null default 0; +alter table zone add column `snow_duration4` int(4) not null default 0; +)", + }, + ManifestEntry{ + .version = 9025, + .description = "2014_02_13_rename_instance_lockout_tables.sql", + .check = "SHOW TABLES LIKE 'instance_list'", + .condition = "empty", + .match = "", + .sql = R"( +-- rename the instance_lockout tables to instance_list. They have nothing to do with lockouts. +ALTER TABLE `instance_lockout` RENAME TO `instance_list` ; +ALTER TABLE `instance_lockout_player` RENAME TO `instance_list_player` ; +)", + }, + ManifestEntry{ + .version = 9026, + .description = "2014_02_13_spells_new_update.sql", + .check = "SHOW COLUMNS FROM `spells_new` LIKE 'ConeStartAngle'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `spells_new` CHANGE `field161` `not_reflectable` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field151` `no_partial_resist` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field189` `MinResist` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field190` `MaxResist` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field194` `ConeStartAngle` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field195` `ConeStopAngle` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field208` `rank` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field159` `npc_no_los` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field213` `NotOutofCombat` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field214` `NotInCombat` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field168` `IsDiscipline` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field211` `CastRestriction` INT(11) NOT NULL DEFAULT '0'; + +UPDATE altadv_vars SET sof_next_id = 8261 WHERE skill_id = 8232; +UPDATE altadv_vars SET sof_next_id = 0 WHERE skill_id = 8261; +UPDATE altadv_vars SET sof_current_level = 3 WHERE skill_id = 8261; + +)", + }, + ManifestEntry{ + .version = 9027, + .description = "2014_02_20_buff_update.sql", + .check = "SHOW COLUMNS FROM `character_buffs` LIKE 'caston_y'", + .condition = "empty", + .match = "", + .sql = R"( +-- UPDATE BUFF TABLES +ALTER TABLE `character_buffs` CHANGE `death_save_chance` `dot_rune` INT(10) NOT NULL DEFAULT '0'; +ALTER TABLE `merc_buffs` CHANGE `DeathSaveSuccessChance` `dot_rune` INT(10) NOT NULL DEFAULT '0'; +ALTER TABLE `botbuffs` CHANGE `DeathSaveSuccessChance` `dot_rune` INT(10) NOT NULL DEFAULT '0'; + +ALTER TABLE `character_buffs` CHANGE `death_save_aa_chance` `caston_x` INT(10) NOT NULL DEFAULT '0'; +ALTER TABLE `merc_buffs` CHANGE `CasterAARank` `caston_x` INT(10) NOT NULL DEFAULT '0'; +ALTER TABLE `botbuffs` CHANGE `CasterAARank` `caston_x` INT(10) NOT NULL DEFAULT '0'; + +ALTER TABLE `character_buffs` ADD `caston_y` INT(10) NOT NULL DEFAULT '0'; +ALTER TABLE `merc_buffs` ADD `caston_y` INT(10) NOT NULL DEFAULT '0'; +ALTER TABLE `botbuffs` ADD `caston_y` INT(10) NOT NULL DEFAULT '0'; + +ALTER TABLE `character_buffs` ADD `caston_z` INT(10) NOT NULL DEFAULT '0'; +ALTER TABLE `merc_buffs` ADD `caston_z` INT(10) NOT NULL DEFAULT '0'; +ALTER TABLE `botbuffs` ADD `caston_z` INT(10) NOT NULL DEFAULT '0'; + +ALTER TABLE `character_buffs` ADD `ExtraDIChance` INT(10) NOT NULL DEFAULT '0'; +ALTER TABLE `merc_buffs` ADD `ExtraDIChance` INT(10) NOT NULL DEFAULT '0'; +ALTER TABLE `botbuffs` ADD `ExtraDIChance` INT(10) NOT NULL DEFAULT '0'; + +ALTER TABLE `spells_new` CHANGE `not_reflectable` `reflectable` INT(11) NOT NULL DEFAULT '0'; +)", + }, + ManifestEntry{ + .version = 9028, + .description = "2014_02_26_roambox_update.sql", + .check = "SHOW COLUMNS FROM `spawngroup` LIKE 'mindelay'", + .condition = "empty", + .match = "", + .sql = R"( +alter table `spawngroup` add column `mindelay` int(11) not null default 15000 AFTER delay; +alter table `spawngroup` change `delay` `delay` int(11) not null default 45000; +)", + }, + ManifestEntry{ + .version = 9030, + .description = "2014_04_04_physicalresist.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'PhR'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD `PhR` smallint( 5 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `Corrup`; + +-- Approximate baseline live npc values based on extensive parsing. +UPDATE npc_types SET PhR = 10 WHERE PhR = 0 AND level <= 50; +UPDATE npc_types SET PhR = (10 + (level - 50)) WHERE PhR = 0 AND (level > 50 AND level <= 60); +UPDATE npc_types SET PhR = (20 + ((level - 60)*4)) WHERE PhR = 0 AND level > 60; + +)", + }, + ManifestEntry{ + .version = 9031, + .description = "2014_04_10_no_target_with_hotkey.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'no_target_hotkey'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD `no_target_hotkey` tinyint( 1 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `healscale`; + +)", + }, + ManifestEntry{ + .version = 9032, + .description = "2014_04_12_slowmitigation.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'slow_mitigation'", + .condition = "contains", + .match = "float", + .sql = R"( +-- Convert all values from FLOAT to INT +UPDATE npc_types SET slow_mitigation = slow_mitigation * 100; + +-- Change variable type from FLOAT TO INT +ALTER TABLE npc_types MODIFY slow_mitigation smallint(4) NOT NULL DEFAULT '0'; + + + +)", + }, + ManifestEntry{ + .version = 9034, + .description = "2014_04_25_spawn_events.sql", + .check = "SHOW COLUMNS FROM `spawn_events` LIKE 'strict'", + .condition = "empty", + .match = "", + .sql = R"( +alter table spawn_events add column `strict` tinyint(4) not null default 0; +)", + }, + ManifestEntry{ + .version = 9035, + .description = "2014_04_27_aispelleffects.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'npc_spells_effects_id'", + .condition = "empty", + .match = "", + .sql = R"( +-- Note: The data entered into the new table are only examples and can be deleted/modified as needed. + +ALTER TABLE `npc_types` ADD `npc_spells_effects_id` int( 11 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `npc_spells_id`; + +SET FOREIGN_KEY_CHECKS=0; + +DROP TABLE IF EXISTS `npc_spells_effects`; +CREATE TABLE `npc_spells_effects` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `name` tinytext, + `parent_list` int(11) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1080 DEFAULT CHARSET=latin1; + + +SET FOREIGN_KEY_CHECKS=0; + +-- ---------------------------- +-- Table structure for `npc_spells_effects_entries` +-- ---------------------------- +DROP TABLE IF EXISTS `npc_spells_effects_entries`; +CREATE TABLE `npc_spells_effects_entries` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `npc_spells_effects_id` int(11) NOT NULL DEFAULT '0', + `spell_effect_id` smallint(5) NOT NULL DEFAULT '0', + `minlevel` tinyint(3) unsigned NOT NULL DEFAULT '0', + `maxlevel` tinyint(3) unsigned NOT NULL DEFAULT '255', + `se_base` int(11) NOT NULL DEFAULT '0', + `se_limit` int(11) NOT NULL DEFAULT '0', + `se_max` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `spellsid_spellid` (`npc_spells_effects_id`,`spell_effect_id`) +) ENGINE=InnoDB AUTO_INCREMENT=18374 DEFAULT CHARSET=latin1; + +)", + }, + ManifestEntry{ + .version = 9036, + .description = "2014_05_04_slowmitigationfix.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'slow_mitigation'", + .condition = "contains", + .match = "float", + .sql = R"( +ALTER TABLE npc_types MODIFY slow_mitigation smallint(4) NOT NULL DEFAULT '0'; +)", + }, + ManifestEntry{ + .version = 9040, + .description = "2014_07_10_npc_spells.sql", + .check = "SHOW COLUMNS FROM `npc_spells` LIKE 'engaged_no_sp_recast_min'", + .condition = "empty", + .match = "", + .sql = R"( +-- npc_types +ALTER TABLE `npc_types` ADD `ammo_idfile` varchar( 30 ) NOT NULL DEFAULT 'IT10' AFTER `d_meele_texture2`; +ALTER TABLE `npc_types` ADD `ranged_type` tinyint( 4 ) UNSIGNED NOT NULL DEFAULT '7' AFTER `sec_melee_type`; +ALTER TABLE `npc_types` ADD `Avoidance` mediumint(9) UNSIGNED NOT NULL DEFAULT '0' AFTER `Accuracy`; + +-- npc spells +ALTER TABLE `npc_spells` ADD `range_proc` smallint(5) NOT NULL DEFAULT '-1'; +ALTER TABLE `npc_spells` ADD `rproc_chance` smallint(5) NOT NULL DEFAULT '0'; +ALTER TABLE `npc_spells` ADD `defensive_proc` smallint(5) NOT NULL DEFAULT '-1'; +ALTER TABLE `npc_spells` ADD `dproc_chance` smallint(5) NOT NULL DEFAULT '0'; +ALTER TABLE `npc_spells` ADD `fail_recast` int(11) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `npc_spells` ADD `engaged_no_sp_recast_min` int(11) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `npc_spells` ADD `engaged_no_sp_recast_max` int(11) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `npc_spells` ADD `engaged_b_self_chance` tinyint(3) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `npc_spells` ADD `engaged_b_other_chance` tinyint(3) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `npc_spells` ADD `engaged_d_chance` tinyint(3) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `npc_spells` ADD `pursue_no_sp_recast_min` int(3) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `npc_spells` ADD `pursue_no_sp_recast_max` int(11) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `npc_spells` ADD `pursue_d_chance` tinyint(3) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `npc_spells` ADD `idle_no_sp_recast_min` int(11) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `npc_spells` ADD `idle_no_sp_recast_max` int(11) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `npc_spells` ADD `idle_b_chance` tinyint(11) unsigned NOT NULL DEFAULT '0'; +)", + }, + ManifestEntry{ + .version = 9041, + .description = "2014_08_02_spells_new.sql", + .check = "SHOW COLUMNS FROM `spells_new` LIKE 'viral_range'", + .condition = "empty", + .match = "", + .sql = R"( +-- spells new talbe update +ALTER TABLE `spells_new` CHANGE `NotOutofCombat` `InCombat` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `NotInCombat` `OutofCombat` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field201` `viral_range` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field218` `aemaxtargets` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` ADD `field225` int( 11 ) NOT NULL DEFAULT '0' AFTER `persistdeath`; +ALTER TABLE `spells_new` ADD `field226` int( 11 ) NOT NULL DEFAULT '0' AFTER `field225`; +ALTER TABLE `spells_new` ADD `min_dist` float( 0 ) NOT NULL DEFAULT '0' AFTER `field226`; +ALTER TABLE `spells_new` ADD `min_dist_mod` float( 0 ) NOT NULL DEFAULT '0' AFTER `min_dist`; +ALTER TABLE `spells_new` ADD `max_dist` float( 0 ) NOT NULL DEFAULT '0' AFTER `min_dist_mod`; +ALTER TABLE `spells_new` ADD `max_dist_mod` float( 0 ) NOT NULL DEFAULT '0' AFTER `max_dist`; +ALTER TABLE `spells_new` ADD `min_range` int( 11 ) NOT NULL DEFAULT '0' AFTER `max_dist_mod`; +ALTER TABLE `spells_new` ADD `field232` int( 11 ) NOT NULL DEFAULT '0' AFTER `min_range`; +ALTER TABLE `spells_new` ADD `field233` int( 11 ) NOT NULL DEFAULT '0' AFTER `field232`; +ALTER TABLE `spells_new` ADD `field234` int( 11 ) NOT NULL DEFAULT '0' AFTER `field233`; +ALTER TABLE `spells_new` ADD `field235` int( 11 ) NOT NULL DEFAULT '0' AFTER `field234`; +ALTER TABLE `spells_new` ADD `field236` int( 11 ) NOT NULL DEFAULT '0' AFTER `field235`; +)", + }, + ManifestEntry{ + .version = 9042, + .description = "2014_08_12_npc_raid_targets.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'raid_target'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD `raid_target` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `no_target_hotkey`; + +)", + }, + ManifestEntry{ + .version = 9043, + .description = "2014_08_18_spells_new_update.sql", + .check = "SHOW COLUMNS FROM `spells_new` LIKE 'viral_targets'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `spells_new` CHANGE `field191` `viral_targets` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field192` `viral_timer` INT(11) NOT NULL DEFAULT '0'; +)", + }, + ManifestEntry{ + .version = 9044, + .description = "2014_08_20_merchantlist_probability.sql", + .check = "SHOW COLUMNS FROM `merchantlist` LIKE 'probability'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `merchantlist` ADD `probability` INT(3) NOT NULL DEFAULT '100' AFTER `classes_required`; +)", + }, + ManifestEntry{ + .version = 9045, + .description = "2014_08_23_complete_queryserv_table_structures.sql", + .check = "SHOW TABLES LIKE 'qs_player_aa_rate_hourly'", + .condition = "empty", + .match = "", + .sql = R"( +-- QS Table Structures -- + +SET FOREIGN_KEY_CHECKS=0; + +-- ---------------------------- +-- Table structure for qs_merchant_transaction_record +-- ---------------------------- +DROP TABLE IF EXISTS `qs_merchant_transaction_record`; +CREATE TABLE `qs_merchant_transaction_record` ( + `transaction_id` int(11) NOT NULL AUTO_INCREMENT, + `time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, + `zone_id` int(11) DEFAULT '0', + `merchant_id` int(11) DEFAULT '0', + `merchant_pp` int(11) DEFAULT '0', + `merchant_gp` int(11) DEFAULT '0', + `merchant_sp` int(11) DEFAULT '0', + `merchant_cp` int(11) DEFAULT '0', + `merchant_items` mediumint(7) DEFAULT '0', + `char_id` int(11) DEFAULT '0', + `char_pp` int(11) DEFAULT '0', + `char_gp` int(11) DEFAULT '0', + `char_sp` int(11) DEFAULT '0', + `char_cp` int(11) DEFAULT '0', + `char_items` mediumint(7) DEFAULT '0', + PRIMARY KEY (`transaction_id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for qs_merchant_transaction_record_entries +-- ---------------------------- +DROP TABLE IF EXISTS `qs_merchant_transaction_record_entries`; +CREATE TABLE `qs_merchant_transaction_record_entries` ( + `event_id` int(11) DEFAULT '0', + `char_slot` mediumint(7) DEFAULT '0', + `item_id` int(11) DEFAULT '0', + `charges` mediumint(7) DEFAULT '0', + `aug_1` int(11) DEFAULT '0', + `aug_2` int(11) DEFAULT '0', + `aug_3` int(11) DEFAULT '0', + `aug_4` int(11) DEFAULT '0', + `aug_5` int(11) DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for qs_player_aa_rate_hourly +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_aa_rate_hourly`; +CREATE TABLE `qs_player_aa_rate_hourly` ( + `char_id` int(11) NOT NULL DEFAULT '0', + `hour_time` int(11) NOT NULL, + `aa_count` varchar(11) DEFAULT NULL, + PRIMARY KEY (`char_id`,`hour_time`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- ---------------------------- +-- Table structure for qs_player_delete_record +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_delete_record`; +CREATE TABLE `qs_player_delete_record` ( + `delete_id` int(11) NOT NULL AUTO_INCREMENT, + `time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, + `char_id` int(11) DEFAULT '0', + `stack_size` mediumint(7) DEFAULT '0', + `char_items` mediumint(7) DEFAULT '0', + PRIMARY KEY (`delete_id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for qs_player_delete_record_entries +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_delete_record_entries`; +CREATE TABLE `qs_player_delete_record_entries` ( + `event_id` int(11) DEFAULT '0', + `char_slot` mediumint(7) DEFAULT '0', + `item_id` int(11) DEFAULT '0', + `charges` mediumint(7) DEFAULT '0', + `aug_1` int(11) DEFAULT '0', + `aug_2` int(11) DEFAULT '0', + `aug_3` int(11) DEFAULT '0', + `aug_4` int(11) DEFAULT '0', + `aug_5` int(11) DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for qs_player_events +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_events`; +CREATE TABLE `qs_player_events` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(11) DEFAULT '0', + `event` int(11) unsigned DEFAULT '0', + `event_desc` varchar(255) DEFAULT NULL, + `time` int(11) unsigned DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; + +-- ---------------------------- +-- Table structure for qs_player_handin_record +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_handin_record`; +CREATE TABLE `qs_player_handin_record` ( + `handin_id` int(11) NOT NULL AUTO_INCREMENT, + `time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, + `quest_id` int(11) DEFAULT '0', + `char_id` int(11) DEFAULT '0', + `char_pp` int(11) DEFAULT '0', + `char_gp` int(11) DEFAULT '0', + `char_sp` int(11) DEFAULT '0', + `char_cp` int(11) DEFAULT '0', + `char_items` mediumint(7) DEFAULT '0', + `npc_id` int(11) DEFAULT '0', + `npc_pp` int(11) DEFAULT '0', + `npc_gp` int(11) DEFAULT '0', + `npc_sp` int(11) DEFAULT '0', + `npc_cp` int(11) DEFAULT '0', + `npc_items` mediumint(7) DEFAULT '0', + PRIMARY KEY (`handin_id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for qs_player_handin_record_entries +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_handin_record_entries`; +CREATE TABLE `qs_player_handin_record_entries` ( + `event_id` int(11) DEFAULT '0', + `action_type` char(6) DEFAULT 'action', + `char_slot` mediumint(7) DEFAULT '0', + `item_id` int(11) DEFAULT '0', + `charges` mediumint(7) DEFAULT '0', + `aug_1` int(11) DEFAULT '0', + `aug_2` int(11) DEFAULT '0', + `aug_3` int(11) DEFAULT '0', + `aug_4` int(11) DEFAULT '0', + `aug_5` int(11) DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for qs_player_move_record +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_move_record`; +CREATE TABLE `qs_player_move_record` ( + `move_id` int(11) NOT NULL AUTO_INCREMENT, + `time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, + `char_id` int(11) DEFAULT '0', + `from_slot` mediumint(7) DEFAULT '0', + `to_slot` mediumint(7) DEFAULT '0', + `stack_size` mediumint(7) DEFAULT '0', + `char_items` mediumint(7) DEFAULT '0', + `postaction` tinyint(1) DEFAULT '0', + PRIMARY KEY (`move_id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for qs_player_move_record_entries +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_move_record_entries`; +CREATE TABLE `qs_player_move_record_entries` ( + `event_id` int(11) DEFAULT '0', + `from_slot` mediumint(7) DEFAULT '0', + `to_slot` mediumint(7) DEFAULT '0', + `item_id` int(11) DEFAULT '0', + `charges` mediumint(7) DEFAULT '0', + `aug_1` int(11) DEFAULT '0', + `aug_2` int(11) DEFAULT '0', + `aug_3` int(11) DEFAULT '0', + `aug_4` int(11) DEFAULT '0', + `aug_5` int(11) DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for qs_player_npc_kill_record +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_npc_kill_record`; +CREATE TABLE `qs_player_npc_kill_record` ( + `fight_id` int(11) NOT NULL AUTO_INCREMENT, + `npc_id` int(11) DEFAULT NULL, + `type` int(11) DEFAULT NULL, + `zone_id` int(11) DEFAULT NULL, + `time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`fight_id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for qs_player_npc_kill_record_entries +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_npc_kill_record_entries`; +CREATE TABLE `qs_player_npc_kill_record_entries` ( + `event_id` int(11) DEFAULT '0', + `char_id` int(11) DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for qs_player_speech +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_speech`; +CREATE TABLE `qs_player_speech` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `from` varchar(64) NOT NULL, + `to` varchar(64) NOT NULL, + `message` varchar(256) NOT NULL, + `minstatus` smallint(5) NOT NULL, + `guilddbid` int(11) NOT NULL, + `type` tinyint(3) NOT NULL, + `timerecorded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for qs_player_trade_record +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_trade_record`; +CREATE TABLE `qs_player_trade_record` ( + `trade_id` int(11) NOT NULL AUTO_INCREMENT, + `time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, + `char1_id` int(11) DEFAULT '0', + `char1_pp` int(11) DEFAULT '0', + `char1_gp` int(11) DEFAULT '0', + `char1_sp` int(11) DEFAULT '0', + `char1_cp` int(11) DEFAULT '0', + `char1_items` mediumint(7) DEFAULT '0', + `char2_id` int(11) DEFAULT '0', + `char2_pp` int(11) DEFAULT '0', + `char2_gp` int(11) DEFAULT '0', + `char2_sp` int(11) DEFAULT '0', + `char2_cp` int(11) DEFAULT '0', + `char2_items` mediumint(7) DEFAULT '0', + PRIMARY KEY (`trade_id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for qs_player_trade_record_entries +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_trade_record_entries`; +CREATE TABLE `qs_player_trade_record_entries` ( + `event_id` int(11) DEFAULT '0', + `from_id` int(11) DEFAULT '0', + `from_slot` mediumint(7) DEFAULT '0', + `to_id` int(11) DEFAULT '0', + `to_slot` mediumint(7) DEFAULT '0', + `item_id` int(11) DEFAULT '0', + `charges` mediumint(7) DEFAULT '0', + `aug_1` int(11) DEFAULT '0', + `aug_2` int(11) DEFAULT '0', + `aug_3` int(11) DEFAULT '0', + `aug_4` int(11) DEFAULT '0', + `aug_5` int(11) DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +)", + }, + ManifestEntry{ + .version = 9046, + .description = "2014_08_23_player_events_and_player_aa_rate_hourly.sql", + .check = "SHOW TABLES LIKE 'qs_player_events'", + .condition = "empty", + .match = "", + .sql = R"( +-- ---------------------------- +-- Table structure for qs_player_events +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_events`; +CREATE TABLE `qs_player_events` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(11) DEFAULT '0', + `event` int(11) unsigned DEFAULT '0', + `event_desc` varchar(255) DEFAULT NULL, + `time` int(11) unsigned DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; + +-- ---------------------------- +-- Table structure for qs_player_aa_rate_hourly +-- ---------------------------- +DROP TABLE IF EXISTS `qs_player_aa_rate_hourly`; +CREATE TABLE `qs_player_aa_rate_hourly` ( + `char_id` int(11) NOT NULL DEFAULT '0', + `hour_time` int(11) NOT NULL, + `aa_count` varchar(11) DEFAULT NULL, + PRIMARY KEY (`char_id`,`hour_time`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +)", + }, + ManifestEntry{ + .version = 9048, + .description = "2014_09_09_attack_delay.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'attack_delay'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD `attack_delay` TINYINT(3) UNSIGNED DEFAULT '30' NOT NULL AFTER `attack_speed`; +UPDATE `npc_types` SET `attack_delay` = 36 + 36 * (`attack_speed` / 100); +UPDATE `npc_types` SET `attack_delay` = 30 WHERE `attack_speed` = 0; + +)", + }, + ManifestEntry{ + .version = 9050, + .description = "2014_09_20_ban_messages.sql", + .check = "SHOW COLUMNS FROM `account` LIKE 'ban_reason'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `account` ADD COLUMN `ban_reason` TEXT NULL DEFAULT NULL, ADD COLUMN `suspend_reason` TEXT NULL DEFAULT NULL AFTER `ban_reason`; + +)", + }, + ManifestEntry{ + .version = 9051, + .description = "2014_10_11_raidmotd.sql", + .check = "SHOW COLUMNS FROM `raid_details` LIKE 'motd'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `raid_details` ADD `motd` varchar(1024); + +)", + }, + ManifestEntry{ + .version = 9052, + .description = "2014_10_13_raidleadership.sql", + .check = "SHOW TABLES LIKE 'raid_leaders'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `raid_leaders` ( + `gid` int(4) unsigned NOT NULL, + `rid` int(4) unsigned NOT NULL, + `marknpc` varchar(64) NOT NULL, + `maintank` varchar(64) NOT NULL, + `assist` varchar(64) NOT NULL, + `puller` varchar(64) NOT NULL, + `leadershipaa` tinyblob NOT NULL +); + +)", + }, + ManifestEntry{ + .version = 9053, + .description = "2014_10_18_group_mentor.sql", + .check = "SHOW COLUMNS FROM `group_leaders` LIKE 'mentoree'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `group_leaders` ADD `mentoree` VARCHAR(64) NOT NULL; +ALTER TABLE `group_leaders` ADD `mentor_percent` INT(4) DEFAULT 0 NOT NULL; + +)", + }, + ManifestEntry{ + .version = 9054, + .description = "2014_10_19_raid_group_mentor.sql", + .check = "SHOW COLUMNS FROM `raid_leaders` LIKE 'mentoree'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `raid_leaders` ADD `mentoree` VARCHAR(64) NOT NULL; +ALTER TABLE `raid_leaders` ADD `mentor_percent` INT(4) DEFAULT 0 NOT NULL; + +)", + }, + ManifestEntry{ + .version = 9055, + .description = "2014_10_30_special_abilities_null.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'special_abilities'", + .condition = "contains", + .match = "NO", + .sql = R"( +ALTER TABLE `merc_stats` MODIFY COLUMN `special_abilities` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL; + +ALTER TABLE `npc_types` MODIFY COLUMN `special_abilities` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL; + + +)", + }, + ManifestEntry{ + .version = 9056, + .description = "2014_11_08_raidmembers.sql", + .check = "SHOW COLUMNS FROM `raid_members` LIKE 'groupid'", + .condition = "missing", + .match = "unsigned", + .sql = R"( +ALTER TABLE `raid_members` CHANGE COLUMN `groupid` `groupid` INT(4) UNSIGNED NOT NULL DEFAULT '0' AFTER `charid`; +)", + }, + ManifestEntry{ + .version = 9057, + .description = "2014_11_13_spells_new_updates.sql", + .check = "SHOW COLUMNS FROM `spells_new` LIKE 'disallow_sit'", + .condition = "empty", + .match = "", + .sql = R"( +-- spells new table update +ALTER TABLE `spells_new` CHANGE `field124` `disallow_sit` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field125` `deities0` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field196` `sneaking` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field158` `effectdescnum2` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field165` `ldon_trap` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field205` `no_block` INT(11) NOT NULL DEFAULT '0'; + + + +)", + }, + ManifestEntry{ + .version = 9058, + .description = "2014_11_26_inventorytableupdate.sql", + .check = "SHOW COLUMNS FROM `inventory` LIKE 'ornamenticon'", + .condition = "empty", + .match = "", + .sql = R"( +-- Inventory table update +ALTER TABLE `inventory` + ADD COLUMN `ornamenticon` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `custom_data`, + ADD COLUMN `ornamentidfile` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `ornamenticon`; + +)", + }, + ManifestEntry{ + .version = 9059, + .description = "2014_12_01_mercs_table_update.sql", + .check = "SHOW COLUMNS FROM `mercs` LIKE 'MercSize'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `mercs` ADD `MercSize` float( 0 ) NOT NULL DEFAULT '5' AFTER `Gender`; + +)", + }, + ManifestEntry{ + .version = 9060, + .description = "2014_12_09_items_table_update.sql", + .check = "SHOW COLUMNS FROM `items` LIKE 'herosforgemodel'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `items` ADD `herosforgemodel` int( 11 ) NOT NULL DEFAULT '0' AFTER `material`; + +)", + }, + ManifestEntry{ + .version = 9061, + .description = "2014_12_13_inventory_table_update.sql", + .check = "SHOW COLUMNS FROM `inventory` LIKE 'ornament_hero_model'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `inventory` ADD `ornament_hero_model` int( 11 ) NOT NULL DEFAULT '0' AFTER `ornamentidfile`; +)", + }, + ManifestEntry{ + .version = 9062, + .description = "2014_12_15_multiple_table_updates.sql", + .check = "SHOW COLUMNS FROM `items` LIKE 'augslot6type'", + .condition = "empty", + .match = "", + .sql = R"( +/* Add the new Aug Slot 6 Fields to the items table */ +ALTER TABLE `items` ADD `augslot6type` tinyint( 3 ) NOT NULL DEFAULT '0' AFTER `augslot5visible`; +ALTER TABLE `items` ADD `augslot6visible` tinyint( 3 ) NOT NULL DEFAULT '0' AFTER `augslot6type`; +ALTER TABLE `items` ADD `augslot6unk2` int( 11 ) NOT NULL DEFAULT '0' AFTER `augslot5unk2`; + +/* Add the new Aug Slot 6 Field to the inventory table */ +ALTER TABLE `inventory` ADD `augslot6` mediumint( 7 ) NOT NULL DEFAULT '0' AFTER `augslot5`; + +/* Add the new Aug Slot 6 Field to the sharedbank table */ +ALTER TABLE `sharedbank` ADD `augslot6` mediumint( 7 ) NOT NULL DEFAULT '0' AFTER `augslot5`; + +/* Add the new Aug Slot 6 Field to the object_contents table */ +ALTER TABLE `object_contents` ADD `augslot6` mediumint( 7 ) NOT NULL DEFAULT '0' AFTER `augslot5`; + +/* Add the new Aug Slot 6 Field to the sharedbank table */ +ALTER TABLE `character_corpse_items` ADD `aug_6` int( 11 ) NOT NULL DEFAULT '0' AFTER `aug_5`; +)", + }, + ManifestEntry{ + .version = 9063, + .description = "2014_12_24_npc_types_update.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'd_melee_texture1'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` CHANGE `d_meele_texture1` `d_melee_texture1` INT(11) DEFAULT NULL; +ALTER TABLE `npc_types` CHANGE `d_meele_texture2` `d_melee_texture2` INT(11) DEFAULT NULL; +)", + }, + ManifestEntry{ + .version = 9064, + .description = "2014_12_24_npc_types_table_update.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'herosforgemodel'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD `herosforgemodel` int( 11 ) NOT NULL DEFAULT '0' AFTER `helmtexture`; +)", + }, + ManifestEntry{ + .version = 9066, + .description = "2014_12_31_npc_types_default_values_update.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'bodytype'", + .condition = "contains", + .match = "YES", + .sql = R"( +UPDATE `npc_types` SET `bodytype` = 0 WHERE `bodytype` IS NULL; +ALTER TABLE `npc_types` MODIFY `bodytype` INT(11) NOT NULL DEFAULT '1'; +UPDATE `npc_types` SET `d_melee_texture1` = 0 WHERE `d_melee_texture1` IS NULL; +ALTER TABLE `npc_types` MODIFY `d_melee_texture1` INT(11) NOT NULL DEFAULT '0'; +UPDATE `npc_types` SET `d_melee_texture2` = 0 WHERE `d_melee_texture2` IS NULL; +ALTER TABLE `npc_types` MODIFY `d_melee_texture2` INT(11) NOT NULL DEFAULT '0'; + +)", + }, + ManifestEntry{ + .version = 9067, + .description = "2015_01_21_npc_types_update.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'light'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD `light` tinyint( 2 ) NOT NULL DEFAULT '0'; +)", + }, + ManifestEntry{ + .version = 9068, + .description = "2015_01_15_logsys_categories_table.sql", + .check = "SHOW TABLES LIKE 'logsys_categories'", + .condition = "empty", + .match = "", + .sql = R"( +SET FOREIGN_KEY_CHECKS=0; + +DROP TABLE IF EXISTS `logsys_categories`; +CREATE TABLE `logsys_categories` ( + `log_category_id` int(11) NOT NULL, + `log_category_description` varchar(150) DEFAULT NULL, + `log_to_console` smallint(11) DEFAULT '0', + `log_to_file` smallint(11) DEFAULT '0', + `log_to_gmsay` smallint(11) DEFAULT '0', + PRIMARY KEY (`log_category_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +)", + }, + ManifestEntry{ + .version = 9069, + .description = "2015_01_25_logsys_mercenaries_category.sql", + .check = "SELECT * FROM `logsys_categories` WHERE `log_category_description` LIKE 'Mercenaries'", + .condition = "empty", + .match = "", + .sql = R"( +INSERT INTO `logsys_categories` (`log_category_id`,`log_category_description`,`log_to_console`,`log_to_file`,`log_to_gmsay`) VALUES ('37', 'Mercenaries', '0', '0', '0'); +)", + }, + ManifestEntry{ + .version = 9070, + .description = "2015_01_28_quest_debug_log_category.sql", + .check = "SELECT * FROM `logsys_categories` WHERE `log_category_description` LIKE 'Quest Debug'", + .condition = "empty", + .match = "", + .sql = R"( +INSERT INTO `logsys_categories` (`log_category_id`, `log_category_description`, `log_to_gmsay`) VALUES ('38', 'Quest Debug', '1'); + +)", + }, + ManifestEntry{ + .version = 9071, + .description = "2015_01_29_merc_stats_table_update.sql", + .check = "SHOW COLUMNS FROM `merc_stats` LIKE 'statscale'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `merc_stats` ADD `statscale` int( 11 ) NOT NULL DEFAULT '100' AFTER `runspeed`; +)", + }, + ManifestEntry{ + .version = 9072, + .description = "2015_01_30_merc_attack_delay.sql", + .check = "SHOW COLUMNS FROM `merc_stats` LIKE 'attack_delay'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `merc_stats` ADD `attack_delay` TINYINT(3) UNSIGNED DEFAULT '30' NOT NULL AFTER `attack_speed`; +UPDATE `merc_stats` SET `attack_delay` = 36 + 36 * (`attack_speed` / 100); +UPDATE `merc_stats` SET `attack_delay` = 30 WHERE `attack_speed` = 0; + +)", + }, + ManifestEntry{ + .version = 9073, + .description = "2015_01_31_character_item_recast.sql", + .check = "SHOW TABLES LIKE 'character_item_recast'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `character_item_recast` ( + `id` int(11) UNSIGNED NOT NULL DEFAULT 0, + `recast_type` smallint(11) UNSIGNED NOT NULL DEFAULT 0, + `timestamp` int(11) UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY(`id`, `recast_type`), + KEY `id` (`id`) +) ENGINE = InnoDB DEFAULT CHARSET = latin1; + +)", + }, + ManifestEntry{ + .version = 9074, + .description = "2015_02_01_logsys_packet_logs.sql", + .check = "SELECT * FROM `logsys_categories` WHERE `log_category_description` LIKE 'Packet: Server -> Client'", + .condition = "empty", + .match = "", + .sql = R"( +REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('39', 'Packet: Server -> Client'); +REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('5', 'Packet: Client -> Server'); +REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('40', 'Packet: Client -> Server Unhandled'); +)", + }, + ManifestEntry{ + .version = 9075, + .description = "2015_02_02_logsys_packet_logs_with_dump.sql", + .check = "SELECT * FROM `logsys_categories` WHERE `log_category_description` LIKE 'Packet: Server -> Client With Dump'", + .condition = "empty", + .match = "", + .sql = R"( +REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('41', 'Packet: Server -> Client With Dump'); +REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('42', 'Packet: Client -> Server With Dump'); + +)", + }, + ManifestEntry{ + .version = 9076, + .description = "2015_02_04_average_coin.sql", + .check = "SHOW COLUMNS FROM `loottable` WHERE Field = 'avgcoin'", + .condition = "contains", + .match = "smallint", + .sql = R"( +ALTER TABLE `loottable` CHANGE COLUMN `avgcoin` `avgcoin` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `maxcash`; +UPDATE `loottable` SET avgcoin = 0; + +)", + }, + ManifestEntry{ + .version = 9077, + .description = "2015_02_12_zone_gravity.sql", + .check = "SHOW COLUMNS FROM `zone` LIKE 'gravity'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `zone` +ADD COLUMN `gravity` float NOT NULL DEFAULT .4 AFTER `snow_duration4`; +)", + }, + ManifestEntry{ + .version = 9078, + .description = "2015_05_20_buffinstrumentmod.sql", + .check = "SHOW COLUMNS FROM `character_buffs` LIKE 'instrument_mod'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `character_buffs` ADD COLUMN `instrument_mod` int(10) DEFAULT 10 NOT NULL; + +)", + }, + ManifestEntry{ + .version = 9079, + .description = "2015_05_23_buffdurations.sql", + .check = "SHOW COLUMNS FROM `character_buffs` LIKE 'ticsremaining'", + .condition = "contains", + .match = "unsigned", + .sql = R"( +ALTER TABLE `character_buffs` CHANGE COLUMN `ticsremaining` `ticsremaining` INT(11) SIGNED NOT NULL; +ALTER TABLE `merc_buffs` CHANGE COLUMN `TicsRemaining` `TicsRemaining` INT(11) SIGNED NOT NULL DEFAULT 0; + +)", + }, + ManifestEntry{ + .version = 9080, + .description = "2015_05_23_petbuffinstrumentmod.sql", + .check = "SHOW COLUMNS FROM `character_pet_buffs` LIKE 'instrument_mod'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `character_pet_buffs` ADD COLUMN `instrument_mod` tinyint UNSIGNED DEFAULT 10 NOT NULL; + +)", + }, + ManifestEntry{ + .version = 9081, + .description = "2015_05_23_dbstr_us.sql", + .check = "SHOW TABLES LIKE 'db_str'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `db_str` ( + `id` INT(10) NOT NULL, + `type` INT(10) NOT NULL, + `value` TEXT NOT NULL, + PRIMARY KEY (`id`, `type`) +); + +)", + }, + ManifestEntry{ + .version = 9082, + .description = "2015_05_25_npc_types_texture_fields.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'armtexture'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE npc_types +ADD COLUMN `armtexture` tinyint(2) NOT NULL DEFAULT '0' AFTER `raid_target`, +ADD COLUMN `bracertexture` tinyint(2) NOT NULL DEFAULT '0' AFTER `armtexture`, +ADD COLUMN `handtexture` tinyint(2) NOT NULL DEFAULT '0' AFTER `bracertexture`, +ADD COLUMN `legtexture` tinyint(2) NOT NULL DEFAULT '0' AFTER `handtexture`, +ADD COLUMN `feettexture` tinyint(2) NOT NULL DEFAULT '0' AFTER `legtexture`; +)", + }, + ManifestEntry{ + .version = 9083, + .description = "2015_06_07_aa_update.sql", + .check = "SHOW COLUMNS FROM `character_alternate_abilities` LIKE 'charges'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE character_alternate_abilities ADD COLUMN charges SMALLINT(11) UNSIGNED NOT NULL DEFAULT 0; + +)", + }, + ManifestEntry{ + .version = 9084, + .description = "2015_06_30_runspeed_adjustments.sql", + .check = "SELECT `runspeed` FROM `npc_types` WHERE `runspeed` > 3", + .condition = "not_empty", + .match = "", + .sql = R"( +/* This rescales the old peq runspeeds which were about 80 percent too high to new values */ +/* This section should only ever be run once */ +UPDATE npc_types SET npc_types.runspeed = 1.050 WHERE (npc_types.runspeed > 0 and npc_types.runspeed < 1.2); +UPDATE npc_types SET npc_types.runspeed = 1.325 WHERE (npc_types.runspeed > 1.19 and npc_types.runspeed < 1.75 and race != 73 and race != 72); +UPDATE npc_types SET npc_types.runspeed = 1.575 WHERE (npc_types.runspeed > 1.69 and npc_types.runspeed < 2.2); +UPDATE npc_types SET npc_types.runspeed = 1.850 WHERE (npc_types.runspeed > 2.19 and npc_types.runspeed < 3); +UPDATE npc_types SET npc_types.runspeed = 3 WHERE npc_types.runspeed > 3; +)", + }, + ManifestEntry{ + .version = 9085, + .description = "2015_07_01_marquee_rule.sql", + .check = "SELECT * FROM `rule_values` WHERE `rule_name` LIKE '%Character:MarqueeHPUpdates%'", + .condition = "empty", + .match = "", + .sql = R"( +INSERT INTO `rule_values` (`rule_name`, `rule_value`, `notes`) VALUES ('Character:MarqueeHPUpdates', 'false', 'Will show Health % in center of screen < 100%'); +)", + }, + ManifestEntry{ + .version = 9086, + .description = "2015_07_02_aa_rework.sql", + .check = "SHOW TABLES LIKE 'aa_ranks'", + .condition = "empty", + .match = "", + .sql = R"( +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 '65535', + `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; + +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; + +-- 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; + +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; + +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', + `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; + +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; + +)", + }, + ManifestEntry{ + .version = 9087, + .description = "2015_09_25_inventory_snapshots.sql", + .check = "SHOW TABLES LIKE 'inventory_snapshots'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `inventory_snapshots` ( + `time_index` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `charid` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `slotid` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', + `itemid` INT(11) UNSIGNED NULL DEFAULT '0', + `charges` SMALLINT(3) UNSIGNED NULL DEFAULT '0', + `color` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `augslot1` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', + `augslot2` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', + `augslot3` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', + `augslot4` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', + `augslot5` MEDIUMINT(7) UNSIGNED NULL DEFAULT '0', + `augslot6` MEDIUMINT(7) NOT NULL DEFAULT '0', + `instnodrop` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', + `custom_data` TEXT NULL, + `ornamenticon` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `ornamentidfile` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `ornament_hero_model` INT(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`time_index`, `charid`, `slotid`) +) +COLLATE='latin1_swedish_ci' +ENGINE=InnoDB; + +ALTER TABLE `character_data` ADD COLUMN `e_last_invsnapshot` INT(11) UNSIGNED NOT NULL DEFAULT '0'; + +)", + }, + ManifestEntry{ + .version = 9088, + .description = "2015_11_01_perl_event_export_settings.sql", + .check = "SHOW TABLES LIKE 'perl_event_export_settings'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `perl_event_export_settings` ( + `event_id` int(11) NOT NULL, + `event_description` varchar(150) DEFAULT NULL, + `export_qglobals` smallint(11) DEFAULT '0', + `export_mob` smallint(11) DEFAULT '0', + `export_zone` smallint(11) DEFAULT '0', + `export_item` smallint(11) DEFAULT '0', + `export_event` smallint(11) DEFAULT '0', + PRIMARY KEY (`event_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- ---------------------------- +-- Records of perl_event_export_settings +-- ---------------------------- +INSERT INTO `perl_event_export_settings` VALUES ('0', 'EVENT_SAY', '1', '1', '1', '1', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('1', 'EVENT_ITEM', '1', '1', '1', '1', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('2', 'EVENT_DEATH', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('3', 'EVENT_SPAWN', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('4', 'EVENT_ATTACK', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('5', 'EVENT_COMBAT', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('6', 'EVENT_AGGRO', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('7', 'EVENT_SLAY', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('8', 'EVENT_NPC_SLAY', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('9', 'EVENT_WAYPOINT_ARRIVE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('10', 'EVENT_WAYPOINT_DEPART', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('11', 'EVENT_TIMER', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('12', 'EVENT_SIGNAL', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('13', 'EVENT_HP', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('14', 'EVENT_ENTER', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('15', 'EVENT_EXIT', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('16', 'EVENT_ENTERZONE', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('17', 'EVENT_CLICKDOOR', '1', '1', '1', '1', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('18', 'EVENT_LOOT', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('19', 'EVENT_ZONE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('20', 'EVENT_LEVEL_UP', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('21', 'EVENT_KILLED_MERIT', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('22', 'EVENT_CAST_ON', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('23', 'EVENT_TASKACCEPTED', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('24', 'EVENT_TASK_STAGE_COMPLETE', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('25', 'EVENT_TASK_UPDATE', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('26', 'EVENT_TASK_COMPLETE', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('27', 'EVENT_TASK_FAIL', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('28', 'EVENT_AGGRO_SAY', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('29', 'EVENT_PLAYER_PICKUP', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('30', 'EVENT_POPUPRESPONSE', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('31', 'EVENT_ENVIRONMENTAL_DAMAGE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('32', 'EVENT_PROXIMITY_SAY', '1', '1', '1', '1', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('33', 'EVENT_CAST', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('34', 'EVENT_CAST_BEGIN', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('35', 'EVENT_SCALE_CALC', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('36', 'EVENT_ITEM_ENTER_ZONE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('37', 'EVENT_TARGET_CHANGE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('38', 'EVENT_HATE_LIST', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('39', 'EVENT_SPELL_EFFECT_CLIENT', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('40', 'EVENT_SPELL_EFFECT_NPC', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('41', 'EVENT_SPELL_EFFECT_BUFF_TIC_CLIENT', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('42', 'EVENT_SPELL_EFFECT_BUFF_TIC_NPC', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('43', 'EVENT_SPELL_FADE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('44', 'EVENT_SPELL_EFFECT_TRANSLOCATE_COMPLETE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('45', 'EVENT_COMBINE_SUCCESS', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('46', 'EVENT_COMBINE_FAILURE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('47', 'EVENT_ITEM_CLICK', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('48', 'EVENT_ITEM_CLICK_CAST', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('49', 'EVENT_GROUP_CHANGE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('50', 'EVENT_FORAGE_SUCCESS', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('51', 'EVENT_FORAGE_FAILURE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('52', 'EVENT_FISH_START', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('53', 'EVENT_FISH_SUCCESS', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('54', 'EVENT_FISH_FAILURE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('55', 'EVENT_CLICK_OBJECT', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('56', 'EVENT_DISCOVER_ITEM', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('57', 'EVENT_DISCONNECT', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('58', 'EVENT_CONNECT', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('59', 'EVENT_ITEM_TICK', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('60', 'EVENT_DUEL_WIN', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('61', 'EVENT_DUEL_LOSE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('62', 'EVENT_ENCOUNTER_LOAD', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('63', 'EVENT_ENCOUNTER_UNLOAD', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('64', 'EVENT_SAY', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('65', 'EVENT_DROP_ITEM', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('66', 'EVENT_DESTROY_ITEM', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('67', 'EVENT_FEIGN_DEATH', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('68', 'EVENT_WEAPON_PROC', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('69', 'EVENT_EQUIP_ITEM', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('70', 'EVENT_UNEQUIP_ITEM', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('71', 'EVENT_AUGMENT_ITEM', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('72', 'EVENT_UNAUGMENT_ITEM', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('73', 'EVENT_AUGMENT_INSERT', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('74', 'EVENT_AUGMENT_REMOVE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('75', 'EVENT_ENTER_AREA', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('76', 'EVENT_LEAVE_AREA', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('77', 'EVENT_RESPAWN', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('78', 'EVENT_DEATH_COMPLETE', '1', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('79', 'EVENT_UNHANDLED_OPCODE', '0', '1', '1', '0', '1'); +INSERT INTO `perl_event_export_settings` VALUES ('80', 'EVENT_TICK', '0', '1', '1', '0', '1'); +)", + }, + ManifestEntry{ + .version = 9089, + .description = "2015_11_02_ai_idle_no_spell_recast_default_changes.sql", + .check = "SELECT * FROM `rule_values` WHERE `rule_name` LIKE '%Spells:AI_IdleNoSpellMinRecast%' AND `rule_value` = '500'", + .condition = "not_empty", + .match = "", + .sql = R"( +UPDATE `rule_values` SET `rule_value` = '6000' WHERE `rule_value` = '500' AND `rule_name` = 'Spells:AI_IdleNoSpellMinRecast'; +UPDATE `rule_values` SET `rule_value` = '60000' WHERE `rule_value` = '2000' AND `rule_name` = 'Spells:AI_IdleNoSpellMaxRecast'; +)", + }, + ManifestEntry{ + .version = 9091, + .description = "2015_12_07_command_settings.sql", + .check = "SHOW TABLES LIKE 'command_settings'", + .condition = "empty", + .match = "", + .sql = R"( +RENAME TABLE `commands` to `commands_old`; + +CREATE TABLE `command_settings` ( + `command` varchar(128) NOT NULL DEFAULT '', + `access` int(11) NOT NULL DEFAULT '0', + `aliases` varchar(256) NOT NULL DEFAULT '', + PRIMARY KEY (`command`), + UNIQUE KEY `UK_command_settings_1` (`command`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO `command_settings` VALUES ('acceptrules', '90', ''),('advnpcspawn', '150', 'advnpc'),('aggro', '80', ''),('aggrozone', '200', ''),('ai', '100', ''),('appearance', '150', ''),('apply_shared_memory', '250', ''),('attack', '150', ''),('augmentitem', '250', 'aug'),('ban', '200', ''),('beard', '80', ''),('beardcolor', '80', ''),('bestz', '80', ''),('bind', '80', ''),('camerashake', '80', ''),('castspell', '90', 'cast'),('chat', '200', ''),('checklos', '50', 'los'),('clearinvsnapshots', '200', ''),('connectworldserver', '200', 'connectworld'),('corpse', '90', ''),('crashtest', '201', ''),('cvs', '80', ''),('damage', '150', ''),('date', '150', ''),('dbspawn2', '100', ''),('delacct', '200', ''),('deletegraveyard', '200', ''),('delpetition', '80', ''),('depop', '100', ''),('depopzone', '100', ''),('details', '80', ''),('disablerecipe', '80', ''),('disarmtrap', '80', ''),('distance', '80', ''),('doanim', '50', ''),('emote', '150', ''),('emotesearch', '80', ''),('emoteview', '80', ''),('enablerecipe', '80', ''),('equipitem', '50', ''),('face', '80', ''),('findnpctype', '90', 'fn'),('findspell', '90', 'fs|spfind'),('findzone', '1', 'fz'),('fixmob', '150', ''),('flag', '201', ''),('flagedit', '150', ''),('flags', '80', ''),('flymode', '80', ''),('fov', '80', ''),('freeze', '100', ''),('gassign', '150', ''),('gender', '90', ''),('getplayerburiedcorpsecount', '100', ''),('getvariable', '200', ''),('ginfo', '20', ''),('giveitem', '150', 'gi'),('givemoney', '150', ''),('globalview', '80', ''),('gm', '80', ''),('gmspeed', '80', ''),('goto', '80', ''),('grid', '150', ''),('guild', '80', 'guilds'),('guildapprove', '0', ''),('guildcreate', '0', ''),('guildlist', '0', ''),('hair', '80', ''),('haircolor', '80', ''),('haste', '100', ''),('hatelist', '80', ''),('heal', '100', ''),('helm', '80', ''),('help', '0', ''),('heritage', '80', ''),('heromodel', '200', 'hm'),('hideme', '80', 'gmhideme'),('hotfix', '250', ''),('hp', '90', ''),('incstat', '200', ''),('instance', '80', ''),('interrogateinv', '0', ''),('interrupt', '50', ''),('invsnapshot', '80', ''),('invul', '80', 'invulnerable'),('ipban', '201', ''),('iplookup', '200', ''),('iteminfo', '10', ''),('itemsearch', '90', 'fi|finditem|search'),('kick', '80', ''),('kill', '80', ''),('lastname', '80', ''),('level', '150', ''),('listnpcs', '90', ''),('listpetition', '80', ''),('load_shared_memory', '250', ''),('loc', '0', ''),('lock', '200', ''),('logs', '250', ''),('logtest', '250', ''),('makepet', '150', ''),('mana', '100', ''),('maxskills', '90', ''),('memspell', '100', ''),('merchant_close_shop', '100', 'close_shop'),('merchant_open_shop', '100', 'open_shop'),('modifynpcstat', '150', ''),('motd', '200', ''),('movechar', '80', ''),('myskills', '0', ''),('mysqltest', '250', ''),('mysql', '255', ''),('mystats', '50', ''),('name', '100', ''),('netstats', '200', ''),('npccast', '90', ''),('npcedit', '150', ''),('npcemote', '80', ''),('npcloot', '150', ''),('npcsay', '80', ''),('npcshout', '90', ''),('npcspawn', '100', ''),('npcspecialattk', '150', 'npcspecialatk|npcspecialattack'),('npcstats', '90', ''),('npctype_cache', '250', ''),('npctypespawn', '90', 'dbspawn'),('nukebuffs', '100', ''),('nukeitem', '150', ''),('object', '100', ''),('oocmute', '200', ''),('opcode', '250', ''),('path', '200', ''),('peekinv', '80', ''),('peqzone', '2', ''),('permaclass', '150', ''),('permagender', '150', ''),('permarace', '150', ''),('petitioninfo', '20', ''),('pf', '0', ''),('picklock', '0', ''),('pvp', '80', ''),('qglobal', '150', ''),('questerrors', '0', ''),('race', '90', ''),('raidloot', '0', ''),('randomfeatures', '90', ''),('refreshgroup', '0', ''),('reloadaa', '200', ''),('reloadallrules', '80', ''),('reloademote', '80', ''),('reloadlevelmods', '255', ''),('reloadperlexportsettings', '255', ''),('reloadqst', '80', 'reloadquest|rq'),('reloadrulesworld', '80', ''),('reloadstatic', '150', ''),('reloadtitles', '150', ''),('reloadworld', '255', ''),('reloadzps', '150', 'reloadzonepoints'),('repop', '90', ''),('repopclose', '100', ''),('resetaa', '100', ''),('resetaa_timer', '200', ''),('revoke', '80', ''),('rules', '200', ''),('save', '80', ''),('scribespell', '90', ''),('scribespells', '100', ''),('sendzonespawns', '200', ''),('sensetrap', '0', ''),('serverinfo', '201', ''),('serverrules', '90', ''),('setaapts', '100', 'setaapoints'),('setaaxp', '100', 'setaaexp'),('setadventurepoints', '200', ''),('setanim', '200', ''),('setcrystals', '100', ''),('setfaction', '170', ''),('setgraveyard', '200', ''),('setlanguage', '50', ''),('setlsinfo', '0', ''),('setpass', '150', ''),('setpvppoints', '100', ''),('setskill', '90', ''),('setskillall', '100', 'setallskill|setallskills'),('setstartzone', '80', ''),('setstat', '255', ''),('setxp', '100', 'setexp'),('showbonusstats', '50', ''),('showbuffs', '80', ''),('shownumhits', '0', ''),('showskills', '50', ''),('showspellslist', '100', ''),('showstats', '80', ''),('shutdown', '200', ''),('size', '90', ''),('spawn', '150', ''),('spawnfix', '80', ''),('spawnstatus', '150', ''),('spellinfo', '10', ''),('spoff', '0', ''),('spon', '0', ''),('stun', '100', ''),('summon', '80', ''),('summonburiedplayercorpse', '100', ''),('summonitem', '150', 'si'),('suspend', '100', ''),('task', '150', ''),('tattoo', '80', ''),('tempname', '100', ''),('texture', '150', ''),('time', '90', ''),('timers', '200', ''),('timezone', '90', ''),('title', '100', ''),('titlesuffix', '50', ''),('traindisc', '100', ''),('tune', '100', ''),('undyeme', '0', ''),('unfreeze', '100', ''),('unlock', '150', ''),('unscribespell', '90', ''),('unscribespells', '100', ''),('untraindisc', '180', ''),('untraindiscs', '180', ''),('uptime', '10', ''),('version', '0', ''),('viewnpctype', '100', ''),('viewpetition', '80', ''),('wc', '200', ''),('weather', '90', ''),('worldshutdown', '200', ''),('wp', '150', ''),('wpadd', '150', ''),('wpinfo', '150', ''),('xtargets', '250', ''),('zclip', '150', ''),('zcolor', '150', ''),('zheader', '150', ''),('zone', '80', ''),('zonebootup', '100', ''),('zoneinstance', '80', ''),('zonelock', '200', ''),('zoneshutdown', '200', ''),('zonespawn', '250', ''),('zonestatus', '150', ''),('zopp', '250', ''),('zsafecoords', '150', ''),('zsave', '200', ''), ('zsky', '150', ''),('zstats', '80', ''),('zunderworld', '80', ''),('zuwcoords', '80', ''); + +)", + }, + ManifestEntry{ + .version = 9092, + .description = "2015_12_17_eqtime.sql", + .check = "SHOW TABLES LIKE 'eqtime'", + .condition = "empty", + .match = "", + .sql = R"( +DROP TABLE IF EXISTS `eqtime`; +CREATE TABLE `eqtime` ( + `minute` tinyint(4) not null default 0, + `hour` tinyint(4) not null default 0, + `day` tinyint(4) not null default 0, + `month` tinyint(4) not null default 0, + `year` int(4) not null default 0, + `realtime` int(11) not null default 0 +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +INSERT INTO eqtime values (0,1,28,12,3766,1444035661); +)", + }, + ManifestEntry{ + .version = 9093, + .description = "2015_12_21_items_updates_evoitem.sql", + .check = "SHOW COLUMNS FROM `items` LIKE 'evoitem'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `items` + ADD COLUMN `evoitem` INT(11) NOT NULL DEFAULT '0' AFTER `purity`, + ADD COLUMN `evoid` INT(11) NOT NULL DEFAULT '0' AFTER `evoitem`, + ADD COLUMN `evomax` INT(11) NOT NULL DEFAULT '0' AFTER `evolvinglevel`, + CHANGE `UNK038` `skillmodmax` INT(11) NOT NULL DEFAULT '0', + CHANGE `UNK222` `heirloom` INT(11) NOT NULL DEFAULT '0', + CHANGE `UNK235` `placeable` INT(11) NOT NULL DEFAULT '0', + CHANGE `UNK242` `epicitem` INT(11) NOT NULL DEFAULT '0'; +)", + }, + ManifestEntry{ + .version = 9094, + .description = "2015_12_29_quest_zone_events.sql", + .check = "SELECT * FROM perl_event_export_settings WHERE event_description = 'EVENT_SPAWN_ZONE'", + .condition = "empty", + .match = "", + .sql = R"( +INSERT INTO `perl_event_export_settings` (`event_id`, `event_description`, `export_qglobals`, `export_mob`, `export_zone`, `export_item`, `export_event`) VALUES (81, 'EVENT_SPAWN_ZONE', 0, 0, 0, 0, 1); +INSERT INTO `perl_event_export_settings` (`event_id`, `event_description`, `export_qglobals`, `export_mob`, `export_zone`, `export_item`, `export_event`) VALUES (82, 'EVENT_DEATH_ZONE', 0, 0, 0, 0, 1); +ALTER TABLE `rule_values` +MODIFY COLUMN `notes` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL AFTER `rule_value`; +)", + }, + ManifestEntry{ + .version = 9095, + .description = "2016_01_08_command_find_aliases.sql", + .check = "SELECT * FROM `command_settings` WHERE `command` LIKE 'findaliases'", + .condition = "empty", + .match = "", + .sql = R"( +INSERT INTO `command_settings` VALUES ('findaliases', 0, 'fa'); + +)", + }, + ManifestEntry{ + .version = 9096, + .description = "2016_03_05_secondary_recall.sql", + .check = "SHOW COLUMNS FROM `character_bind` LIKE 'slot'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `character_bind` ADD `slot` int(4) AFTER `id`; +UPDATE `character_bind` SET `slot`='0' WHERE `is_home`=0; +UPDATE `character_bind` SET `slot`='4' WHERE `is_home`=1; +ALTER TABLE `character_bind` DROP PRIMARY KEY, ADD PRIMARY KEY(`id`, `slot`); +ALTER TABLE `character_bind` DROP COLUMN `is_home`; + + +)", + }, + ManifestEntry{ + .version = 9097, + .description = "2016_07_03_npc_class_as_last_name.sql", + .check = "SELECT `rule_name` FROM `rule_values` WHERE `rule_name` LIKE 'NPC:UseClassAsLastName'", + .condition = "empty", + .match = "", + .sql = R"( +INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES +(1, 'NPC:UseClassAsLastName', 'true', 'Uses class archetype as LastName for npcs with none'); + +)", + }, + ManifestEntry{ + .version = 9098, + .description = "2016_08_26_object_size_tilt.sql", + .check = "SHOW COLUMNS FROM `object` LIKE 'size'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `object` + ADD COLUMN `size` FLOAT NOT NULL DEFAULT '100' AFTER `unknown84`, + ADD COLUMN `tilt_x` FLOAT NOT NULL DEFAULT '0' AFTER `size`, + ADD COLUMN `tilt_y` FLOAT NOT NULL DEFAULT '0' AFTER `tilt_x`; +)", + }, + ManifestEntry{ + .version = 9099, + .description = "2016_08_27_ip_exemptions.sql", + .check = "SHOW TABLES LIKE 'ip_exemptions'", + .condition = "empty", + .match = "", + .sql = R"( +-- IP Exemptions table structure +DROP TABLE IF EXISTS `ip_exemptions`; +CREATE TABLE `ip_exemptions` ( + `exemption_id` int(11) NOT NULL AUTO_INCREMENT, + `exemption_ip` varchar(255) DEFAULT NULL, + `exemption_amount` int(11) DEFAULT NULL, + PRIMARY KEY (`exemption_id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; + +-- Rule Value Entry, Default to false +INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES ('1', 'World:EnableIPExemptions', 'false', 'notation'); + +-- Logging Category Entry +INSERT INTO `logsys_categories` (`log_category_id`, `log_category_description`, `log_to_console`, `log_to_file`, `log_to_gmsay`) VALUES ('44', 'Client Login', '1', '1', '1'); +)", + }, + ManifestEntry{ + .version = 9100, + .description = "2016_08_27_object_display_name.sql", + .check = "SHOW COLUMNS FROM `object` LIKE 'display_name'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `object` ADD COLUMN `display_name` VARCHAR(64); + +)", + }, + ManifestEntry{ + .version = 9101, + .description = "2016_12_01_pcnpc_only.sql", + .check = "SHOW COLUMNS FROM `spells_new` LIKE 'pcnpc_only_flag'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `spells_new` CHANGE `field183` `pcnpc_only_flag` INT(11) DEFAULT 0; +ALTER TABLE `spells_new` CHANGE `field184` `cast_not_standing` INT(11) DEFAULT 0; + +)", + }, + ManifestEntry{ + .version = 9102, + .description = "2017_01_10_book_languages.sql", + .check = "SHOW COLUMNS FROM `books` LIKE 'language'", + .condition = "empty", + .match = "", + .sql = R"( +alter table books add language int not null default 0; + +drop table if exists reading_is_fundamental; + +create table reading_is_fundamental +( +filename varchar(32), +language int +); + +insert into reading_is_fundamental (select items.filename, items.booktype from items where items.filename != "" group by filename); + +update books set books.language = (select language from reading_is_fundamental r where r.filename = books.name); + +drop table reading_is_fundamental; + +)", + }, + ManifestEntry{ + .version = 9103, + .description = "2017_01_30_book_languages_fix.sql", + .check = "SELECT `language` from `books` WHERE `language` IS NULL", + .condition = "not_empty", + .match = "", + .sql = R"( +UPDATE `books` SET `language` = '0' WHERE `language` IS NULL; + +ALTER TABLE `books` MODIFY COLUMN `language` INT NOT NULL DEFAULT '0'; + + +)", + }, + ManifestEntry{ + .version = 9104, + .description = "2017_02_09_npc_spells_entries_type_update.sql", + .check = "SHOW COLUMNS IN `npc_spells_entries` LIKE 'type'", + .condition = "contains", + .match = "smallint(5) unsigned", + .sql = R"( +ALTER TABLE `npc_spells_entries` MODIFY COLUMN `type` INT(10) UNSIGNED NOT NULL DEFAULT '0'; + +)", + }, + ManifestEntry{ + .version = 9105, + .description = "2017_02_15_bot_spells_entries.sql", + .check = "SELECT `id` FROM `npc_spells_entries` WHERE `npc_spells_id` >= 701 AND `npc_spells_id` <= 712", + .condition = "not_empty", + .match = "", + .sql = R"( +-- Delete any existing `bots_spells_entries` table +DROP TABLE IF EXISTS `bots_spells_entries`; + +-- Create new bot spells entries table (new table does not have spells_id_spellid constraint) +CREATE TABLE `bot_spells_entries` ( + `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + `npc_spells_id` INT(11) NOT NULL DEFAULT '0', + `spellid` SMALLINT(5) NOT NULL DEFAULT '0', + `type` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `minlevel` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `maxlevel` TINYINT(3) UNSIGNED NOT NULL DEFAULT '255', + `manacost` SMALLINT(5) NOT NULL DEFAULT '-1', + `recast_delay` INT(11) NOT NULL DEFAULT '-1', + `priority` SMALLINT(5) NOT NULL DEFAULT '0', + `resist_adjust` INT(11) NULL DEFAULT NULL, + PRIMARY KEY (`id`) +) +COLLATE='latin1_swedish_ci' +ENGINE=InnoDB +AUTO_INCREMENT=1 +; + +-- Copy bots spells into new table +INSERT INTO `bot_spells_entries` (`npc_spells_id`, `spellid`, `type`, `minlevel`, `maxlevel`, `manacost`, `recast_delay`, `priority`, `resist_adjust`) +SELECT `npc_spells_id`, `spellid`, `type`, `minlevel`, `maxlevel`, `manacost`, `recast_delay`, `priority`, `resist_adjust` +FROM `npc_spells_entries` WHERE `npc_spells_id` >= '701' AND `npc_spells_id` <= '712'; + +-- Delete bot spells from old table +DELETE FROM `npc_spells_entries` WHERE `npc_spells_id` >= '701' AND `npc_spells_id` <= '712'; + +-- Admins can remove this new table if they are 100% certain they will never use bots + +)", + }, + ManifestEntry{ + .version = 9107, + .description = "2017_03_09_inventory_version.sql", + .check = "SHOW TABLES LIKE 'inventory_version'", + .condition = "empty", + .match = "", + .sql = R"( +DROP TABLE IF EXISTS `inventory_version`; + +CREATE TABLE `inventory_version` ( + `version` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `step` INT(11) UNSIGNED NOT NULL DEFAULT '0' +) +COLLATE='latin1_swedish_ci' +ENGINE=MyISAM +; + +INSERT INTO `inventory_version` VALUES (2, 0); + +)", + }, + ManifestEntry{ + .version = 9108, + .description = "2017_04_07_ignore_despawn.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'ignore_despawn'", + .condition = "empty", + .match = "", + .sql = R"( +alter table npc_types add column `ignore_despawn` tinyint(2) not null default 0; +)", + }, + ManifestEntry{ + .version = 9109, + .description = "2017_04_08_doors_disable_timer.sql", + .check = "SHOW COLUMNS FROM `doors` LIKE 'disable_timer'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `doors` ADD COLUMN `disable_timer` TINYINT(2) NOT NULL DEFAULT '0' AFTER `triggertype`; +)", + }, + ManifestEntry{ + .version = 9110, + .description = "2017_04_10_graveyard.sql", + .check = "show index from graveyard WHERE key_name = 'zone_id_nonunique'", + .condition = "empty", + .match = "", + .sql = R"( +alter table graveyard drop index zone_id; +create index zone_id_nonunique on graveyard(zone_id); + +)", + }, + ManifestEntry{ + .version = 9111, + .description = "2017_06_24_saylink_index.sql", + .check = "SHOW INDEX FROM `saylink` WHERE `key_name` = 'phrase_index'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `saylink` +ADD INDEX `phrase_index` (`phrase`) USING BTREE ; +)", + }, + ManifestEntry{ + .version = 9112, + .description = "2017_06_24_rule_values_expand.sql", + .check = "SHOW COLUMNS FROM rule_values WHERE Field = 'rule_value' and Type = 'varchar(30)'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `rule_values` +MODIFY COLUMN `rule_value` varchar(30) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT '' AFTER `rule_name`; + +)", + }, + ManifestEntry{ + .version = 9113, + .description = "2017_07_19_show_name.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'show_name'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD COLUMN `show_name` TINYINT(2) NOT NULL DEFAULT 1; +ALTER TABLE `npc_types` ADD COLUMN `untargetable` TINYINT(2) NOT NULL DEFAULT 0; +UPDATE `npc_types` SET `show_name` = 0, `untargetable` = 1 WHERE `bodytype` >= 66; + +)", + }, + ManifestEntry{ + .version = 9114, + .description = "2017_07_22_aura.sql", + .check = "SHOW TABLES LIKE 'auras'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `auras` ( + `type` INT(10) NOT NULL, + `npc_type` INT(10) NOT NULL, + `name` VARCHAR(64) NOT NULL, + `spell_id` INT(10) NOT NULL, + `distance` INT(10) NOT NULL DEFAULT 60, + `aura_type` INT(10) NOT NULL DEFAULT 1, + `spawn_type` INT(10) NOT NULL DEFAULT 0, + `movement` INT(10) NOT NULL DEFAULT 0, + `duration` INT(10) NOT NULL DEFAULT 5400, + `icon` INT(10) NOT NULL DEFAULT -1, + `cast_time` INT(10) NOT NULL DEFAULT 0, + PRIMARY KEY(`type`) +); + +CREATE TABLE `character_auras` ( + `id` INT(10) NOT NULL, + `slot` TINYINT(10) NOT NULL, + `spell_id` INT(10) NOT NULL, + PRIMARY KEY (`id`, `slot`) +); + +)", + }, + ManifestEntry{ + .version = 9115, + .description = "2017_10_28_traps.sql", + .check = "SHOW COLUMNS FROM `traps` LIKE 'triggered_number'", + .condition = "empty", + .match = "", + .sql = R"( +alter table `traps` add column `triggered_number` tinyint(4) not null default 0; +alter table `traps` add column `group` tinyint(4) not null default 0; +alter table `traps` add column `despawn_when_triggered` tinyint(4) not null default 0; +alter table `traps` add column `undetectable` tinyint(4) not null default 0; + +)", + }, + ManifestEntry{ + .version = 9116, + .description = "2017_12_16_groundspawn_respawn_timer.sql", + .check = "SHOW COLUMNS FROM `ground_spawns` WHERE Field = 'respawn_timer' AND Type = 'int(11) unsigned'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `ground_spawns` MODIFY `respawn_timer` int(11) unsigned NOT NULL default 300; +UPDATE `ground_spawns` SET `respawn_timer` = `respawn_timer` / 1000; + +)", + }, + ManifestEntry{ + .version = 9117, + .description = "2018_02_01_npc_spells_min_max_hp.sql", + .check = "SHOW COLUMNS FROM `npc_spells_entries` LIKE 'min_hp'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_spells_entries` ADD `min_hp` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `npc_spells_entries` ADD `max_hp` SMALLINT(5) DEFAULT '0'; + +)", + }, + ManifestEntry{ + .version = 9118, + .description = "2018_02_04_charm_stats.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'charm_ac'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD `charm_ac` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `npc_types` ADD `charm_min_dmg` INT(10) DEFAULT '0'; +ALTER TABLE `npc_types` ADD `charm_max_dmg` INT(10) DEFAULT '0'; +ALTER TABLE `npc_types` ADD `charm_attack_delay` TINYINT(3) DEFAULT '0'; +ALTER TABLE `npc_types` ADD `charm_accuracy_rating` MEDIUMINT(9) DEFAULT '0'; +ALTER TABLE `npc_types` ADD `charm_avoidance_rating` MEDIUMINT(9) DEFAULT '0'; +ALTER TABLE `npc_types` ADD `charm_atk` MEDIUMINT(9) DEFAULT '0'; + +)", + }, + ManifestEntry{ + .version = 9119, + .description = "2018_02_10_globalloot.sql", + .check = "SHOW TABLES LIKE 'global_loot'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD `skip_global_loot` TINYINT DEFAULT '0'; +ALTER TABLE `npc_types` ADD `rare_spawn` TINYINT DEFAULT '0'; + +CREATE TABLE global_loot ( + id INT NOT NULL AUTO_INCREMENT, + description varchar(255), + loottable_id INT NOT NULL, + enabled TINYINT NOT NULL DEFAULT 1, + min_level INT NOT NULL DEFAULT 0, + max_level INT NOT NULL DEFAULT 0, + rare TINYINT NULL, + raid TINYINT NULL, + race MEDIUMTEXT NULL, + class MEDIUMTEXT NULL, + bodytype MEDIUMTEXT NULL, + zone MEDIUMTEXT NULL, + PRIMARY KEY (id) +); + + +)", + }, + ManifestEntry{ + .version = 9120, + .description = "2018_02_13_heading.sql", + .check = "SELECT value FROM variables WHERE varname = 'fixed_heading'", + .condition = "empty", + .match = "", + .sql = R"( +UPDATE spawn2 SET heading = heading * 8.0 / 4.0; +UPDATE grid_entries SET heading = heading * 8.0 / 4.0 WHERE heading <> -1; +INSERT INTO variables (varname, value, information) VALUES ('fixed_heading', 1, 'manifest heading fix hack'); -- hack + +)", + }, + ManifestEntry{ + .version = 9121, + .description = "2018_02_18_bug_reports.sql", + .check = "SHOW TABLES LIKE 'bug_reports'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `bug_reports` ( + `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + `zone` VARCHAR(32) NOT NULL DEFAULT 'Unknown', + `client_version_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `client_version_name` VARCHAR(24) NOT NULL DEFAULT 'Unknown', + `account_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `character_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `character_name` VARCHAR(64) NOT NULL DEFAULT 'Unknown', + `reporter_spoof` TINYINT(1) NOT NULL DEFAULT '1', + `category_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `category_name` VARCHAR(64) NOT NULL DEFAULT 'Other', + `reporter_name` VARCHAR(64) NOT NULL DEFAULT 'Unknown', + `ui_path` VARCHAR(128) NOT NULL DEFAULT 'Unknown', + `pos_x` FLOAT NOT NULL DEFAULT '0', + `pos_y` FLOAT NOT NULL DEFAULT '0', + `pos_z` FLOAT NOT NULL DEFAULT '0', + `heading` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `time_played` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `target_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `target_name` VARCHAR(64) NOT NULL DEFAULT 'Unknown', + `optional_info_mask` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `_can_duplicate` TINYINT(1) NOT NULL DEFAULT '0', + `_crash_bug` TINYINT(1) NOT NULL DEFAULT '0', + `_target_info` TINYINT(1) NOT NULL DEFAULT '0', + `_character_flags` TINYINT(1) NOT NULL DEFAULT '0', + `_unknown_value` TINYINT(1) NOT NULL DEFAULT '0', + `bug_report` VARCHAR(1024) NOT NULL DEFAULT '', + `system_info` VARCHAR(1024) NOT NULL DEFAULT '', + `report_datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `bug_status` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `last_review` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `last_reviewer` VARCHAR(64) NOT NULL DEFAULT 'None', + `reviewer_notes` VARCHAR(1024) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE INDEX `id` (`id`) +) +COLLATE='utf8_general_ci' +ENGINE=InnoDB +; + +INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES +(1, 'Bugs:ReportingSystemActive', 'true', 'Activates bug reporting'), +(1, 'Bugs:UseOldReportingMethod', 'true', 'Forces the use of the old bug reporting system'), +(1, 'Bugs:DumpTargetEntity', 'false', 'Dumps the target entity, if one is provided'); + +)", + }, + ManifestEntry{ + .version = 9122, + .description = "2018_03_07_ucs_command.sql", + .check = "SELECT * FROM `command_settings` WHERE `command` LIKE 'ucs'", + .condition = "empty", + .match = "", + .sql = R"( +INSERT INTO `command_settings` VALUES ('ucs', '0', ''); + +)", + }, + ManifestEntry{ + .version = 9123, + .description = "2018_07_07_data_buckets.sql", + .check = "SHOW TABLES LIKE 'data_buckets'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `data_buckets` ( + `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT, + `key` varchar(100) DEFAULT NULL, + `value` text, + `expires` int(11) unsigned DEFAULT '0', + PRIMARY KEY (`id`), + KEY `key_index` (`key`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; +)", + }, + ManifestEntry{ + .version = 9124, + .description = "2018_07_09_tasks.sql", + .check = "SHOW COLUMNS FROM `tasks` LIKE 'type'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `tasks` ADD `type` TINYINT NOT NULL DEFAULT '0' AFTER `id`; +ALTER TABLE `tasks` ADD `duration_code` TINYINT NOT NULL DEFAULT '0' AFTER `duration`; +UPDATE `tasks` SET `type` = '2'; -- we were treating them all as quests +ALTER TABLE `character_tasks` ADD `type` TINYINT NOT NULL DEFAULT '0' AFTER `slot`; +UPDATE `character_tasks` SET `type` = '2'; -- we were treating them all as quests +ALTER TABLE `activities` ADD `target_name` VARCHAR(64) NOT NULL DEFAULT '' AFTER `activitytype`; +ALTER TABLE `activities` ADD `item_list` VARCHAR(128) NOT NULL DEFAULT '' AFTER `target_name`; +ALTER TABLE `activities` ADD `skill_list` VARCHAR(64) NOT NULL DEFAULT '-1' AFTER `item_list`; +ALTER TABLE `activities` ADD `spell_list` VARCHAR(64) NOT NULL DEFAULT '0' AFTER `skill_list`; +ALTER TABLE `activities` ADD `description_override` VARCHAR(128) NOT NULL DEFAULT '' AFTER `spell_list`; +ALTER TABLE `activities` ADD `zones` VARCHAR(64) NOT NULL DEFAULT '' AFTER `zoneid`; +UPDATE `activities` SET `description_override` = `text3`; +UPDATE `activities` SET `target_name` = `text1`; +UPDATE `activities` SET `item_list` = `text2`; +UPDATE `activities` SET `zones` = `zoneid`; -- should be safe for us ... +ALTER TABLE `activities` DROP COLUMN `text1`; +ALTER TABLE `activities` DROP COLUMN `text2`; +ALTER TABLE `activities` DROP COLUMN `text3`; +ALTER TABLE `activities` DROP COLUMN `zoneid`; +ALTER TABLE `tasks` DROP COLUMN `startzone`; +ALTER TABLE `tasks` ADD `faction_reward` INT(10) NOT NULL DEFAULT '0'; +RENAME TABLE `activities` TO `task_activities`; +)", + }, + ManifestEntry{ + .version = 9125, + .description = "2018_07_20_task_emote.sql", + .check = "SHOW COLUMNS FROM `tasks` LIKE 'completion_emote'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `tasks` ADD `completion_emote` VARCHAR(128) NOT NULL DEFAULT ''; + +)", + }, + ManifestEntry{ + .version = 9126, + .description = "2018_09_07_fastregen.sql", + .check = "SHOW COLUMNS FROM `zone` LIKE 'fast_regen_hp'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `zone` ADD `fast_regen_hp` INT NOT NULL DEFAULT '180'; +ALTER TABLE `zone` ADD `fast_regen_mana` INT NOT NULL DEFAULT '180'; +ALTER TABLE `zone` ADD `fast_regen_endurance` INT NOT NULL DEFAULT '180'; + +)", + }, + ManifestEntry{ + .version = 9127, + .description = "2018_09_07_npcmaxaggrodist.sql", + .check = "SHOW COLUMNS FROM `zone` LIKE 'npc_max_aggro_dist'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `zone` ADD `npc_max_aggro_dist` INT NOT NULL DEFAULT '600'; + +)", + }, + ManifestEntry{ + .version = 9128, + .description = "2018_08_13_inventory_version_update.sql", + .check = "SHOW TABLES LIKE 'inventory_version'", + .condition = "not_empty", + .match = "", + .sql = R"( +DROP TABLE IF EXISTS `inventory_version`; + +)", + }, + ManifestEntry{ + .version = 9130, + .description = "2018_11_25_name_filter_update.sql", + .check = "SHOW COLUMNS FROM `name_filter` LIKE 'id'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `name_filter` +ADD COLUMN `id` INT(11) NULL AUTO_INCREMENT FIRST, +DROP PRIMARY KEY, +ADD PRIMARY KEY (`id`) USING BTREE, +ADD INDEX `name_search_index`(`name`); + +)", + }, + ManifestEntry{ + .version = 9131, + .description = "2018_12_13_spell_buckets.sql", + .check = "SHOW TABLES LIKE 'spell_buckets'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `spell_buckets` ( + `spellid` bigint(11) unsigned NOT NULL, + `key` varchar(100) DEFAULT NULL, + `value` text, + PRIMARY KEY (`spellid`), + KEY `key_index` (`key`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Spells:EnableSpellBuckets', 'false', 'Enables spell buckets'); +INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Character:PerCharacterBucketMaxLevel', 'false', 'Enables data bucket-based max level.'); +)", + }, + ManifestEntry{ + .version = 9132, + .description = "2018_12_16_global_base_scaling.sql", + .check = "SHOW TABLES LIKE 'npc_scale_global_base'", + .condition = "empty", + .match = "", + .sql = R"( +-- INSERT #devtools / #dev command + +INSERT INTO `command_settings` (`command`, `access`, `aliases`) +VALUES + ('devtools', 200, 'dev'); + +-- CREATE 'npc_scale_global_base' + +CREATE TABLE `npc_scale_global_base` ( + `type` int(11) NOT NULL DEFAULT '0', + `level` int(11) NOT NULL, + `ac` int(11) DEFAULT NULL, + `hp` int(11) DEFAULT NULL, + `accuracy` int(11) DEFAULT NULL, + `slow_mitigation` int(11) DEFAULT NULL, + `attack` int(11) DEFAULT NULL, + `strength` int(11) DEFAULT NULL, + `stamina` int(11) DEFAULT NULL, + `dexterity` int(11) DEFAULT NULL, + `agility` int(11) DEFAULT NULL, + `intelligence` int(11) DEFAULT NULL, + `wisdom` int(11) DEFAULT NULL, + `charisma` int(11) DEFAULT NULL, + `magic_resist` int(11) DEFAULT NULL, + `cold_resist` int(11) DEFAULT NULL, + `fire_resist` int(11) DEFAULT NULL, + `poison_resist` int(11) DEFAULT NULL, + `disease_resist` int(11) DEFAULT NULL, + `corruption_resist` int(11) DEFAULT NULL, + `physical_resist` int(11) DEFAULT NULL, + `min_dmg` int(11) DEFAULT NULL, + `max_dmg` int(11) DEFAULT NULL, + `hp_regen_rate` int(11) DEFAULT NULL, + `attack_delay` int(11) DEFAULT NULL, + `spell_scale` int(11) DEFAULT '100', + `heal_scale` int(11) DEFAULT '100', + `special_abilities` text, + PRIMARY KEY (`type`,`level`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +)", + }, + ManifestEntry{ + .version = 9133, + .description = "2018_11_25_stuckbehavior.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'stuck_behavior'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD COLUMN `stuck_behavior` TINYINT(4) NOT NULL DEFAULT '0' AFTER `rare_spawn`; +UPDATE `npc_types` SET `stuck_behavior`=2 WHERE `underwater`=1; + +)", + }, + ManifestEntry{ + .version = 9135, + .description = "2019_01_10_multi_version_spawns.sql", + .check = "SHOW COLUMNS FROM `spawn2` LIKE 'version'", + .condition = "contains", + .match = "unsigned", + .sql = R"( +ALTER TABLE `spawn2` MODIFY `version` SMALLINT(5) SIGNED NOT NULL DEFAULT '0'; +)", + }, + ManifestEntry{ + .version = 9136, + .description = "2019_02_04_profanity_command.sql", + .check = "SHOW TABLES LIKE 'profanity_list'", + .condition = "empty", + .match = "", + .sql = R"( +DROP TABLE IF EXISTS `profanity_list`; + +CREATE TABLE `profanity_list` ( + `word` VARCHAR(16) NOT NULL +) +COLLATE='latin1_swedish_ci' +ENGINE=InnoDB +; + +REPLACE INTO `command_settings` VALUES ('profanity', 150, 'prof'); + +)", + }, + ManifestEntry{ + .version = 9137, + .description = "2018_12_12_client_faction_tables.sql", + .check = "SHOW TABLES LIKE 'faction_base_data'", + .condition = "empty", + .match = "", + .sql = R"( +-- +-- Table structure for table `client_faction_associations` +-- + +DROP TABLE IF EXISTS `client_faction_associations`; + +CREATE TABLE `client_faction_associations` ( + `faction_id` int(11) NOT NULL, + `other_faction_id` int(11) NOT NULL, + `mod` int(11) DEFAULT NULL, + PRIMARY KEY (`faction_id`,`other_faction_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +)", + }, + ManifestEntry{ + .version = 9139, + .description = "2019_03_25_optional_npc_model.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'model'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD COLUMN `model` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `stuck_behavior`; +)", + }, + ManifestEntry{ + .version = 9140, + .description = "2019_07_03_update_range.sql", + .check = "SHOW COLUMNS FROM `zone` LIKE 'max_movement_update_range'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `zone` ADD COLUMN `max_movement_update_range` INT(11) UNSIGNED NOT NULL DEFAULT '600' AFTER `npc_max_aggro_dist`; +)", + }, + ManifestEntry{ + .version = 9141, + .description = "2019_07_10_npc_flymode.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'flymode'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD COLUMN `flymode` tinyint(4) NOT NULL DEFAULT -1; +)", + }, + ManifestEntry{ + .version = 9142, + .description = "2019_09_02_required_spawn_filter.sql", + .check = "SHOW COLUMNS FROM `spawnentry` LIKE 'condition_value_filter'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `spawnentry` ADD COLUMN `condition_value_filter` MEDIUMINT(9) NOT NULL DEFAULT '1' AFTER `chance`; + +)", + }, + ManifestEntry{ + .version = 9143, + .description = "2019_09_16_account_table_changes.sql", + .check = "SHOW COLUMNS FROM `account` LIKE 'ls_id'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `account` + DROP INDEX `name`, + DROP INDEX `lsaccount_id`; + +ALTER TABLE `account` + ADD COLUMN `ls_id` VARCHAR(64) NULL DEFAULT 'eqemu' AFTER `status`; + +ALTER TABLE `account` + ADD UNIQUE INDEX `name_ls_id` (`name`, `ls_id`), + ADD UNIQUE INDEX `ls_id_lsaccount_id` (`ls_id`, `lsaccount_id`); + +)", + }, + ManifestEntry{ + .version = 9145, + .description = "2019_12_24_banned_ips_update.sql", + .check = "SHOW TABLES LIKE 'Banned_IPs'", + .condition = "not_empty", + .match = "", + .sql = R"( +RENAME TABLE `Banned_IPs` TO `Banned_IPs_`; + +CREATE TABLE `banned_ips` (PRIMARY KEY (`ip_address`)) SELECT `ip_address`, `notes` FROM `Banned_IPs_`; + +DROP TABLE IF EXISTS `Banned_IPs_`; + +)", + }, + ManifestEntry{ + .version = 9146, + .description = "2020_01_10_character_soft_deletes.sql", + .check = "SHOW COLUMNS FROM `character_data` LIKE 'deleted_at'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `character_data` ADD COLUMN `deleted_at` datetime NULL DEFAULT NULL; +)", + }, + ManifestEntry{ + .version = 9147, + .description = "2020_01_24_grid_centerpoint_wp.sql", + .check = "SHOW COLUMNS FROM `grid_entries` LIKE 'centerpoint'", + .condition = "empty", + .match = "", + .sql = R"( +alter table grid_entries add column `centerpoint` tinyint(4) not null default 0; +alter table spawngroup add column `wp_spawns` tinyint(1) unsigned not null default 0; +)", + }, + ManifestEntry{ + .version = 9148, + .description = "2020_01_28_corpse_guild_consent_id.sql", + .check = "SHOW COLUMNS FROM `character_corpses` LIKE 'guild_consent_id'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `character_corpses` ADD COLUMN `guild_consent_id` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `time_of_death`; + +)", + }, + ManifestEntry{ + .version = 9149, + .description = "2020_02_06_globalloot.sql", + .check = "SHOW COLUMNS FROM `global_loot` LIKE 'hot_zone'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `global_loot` ADD `hot_zone` TINYINT NULL; + + +)", + }, + ManifestEntry{ + .version = 9150, + .description = "2020_02_06_aa_reset_on_death.sql", + .check = "SHOW COLUMNS FROM `aa_ability` LIKE 'reset_on_death'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `aa_ability` ADD `reset_on_death` TINYINT(4) NOT NULL DEFAULT '0'; +UPDATE `aa_ability` SET `reset_on_death` = '1' WHERE `id` = 6001; + +)", + }, + ManifestEntry{ + .version = 9151, + .description = "2020_03_05_npc_always_aggro.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'always_aggro'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD COLUMN `always_aggro` tinyint(1) NOT NULL DEFAULT 0; + +)", + }, + ManifestEntry{ + .version = 9152, + .description = "2020_03_09_convert_myisam_to_innodb.sql", + .check = "SELECT * FROM db_version WHERE version >= 9152", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `account_flags` ENGINE=InnoDB; +ALTER TABLE `account_ip` ENGINE=InnoDB; +ALTER TABLE `account` ENGINE=InnoDB; +ALTER TABLE `adventure_template_entry_flavor` ENGINE=InnoDB; +ALTER TABLE `adventure_template_entry` ENGINE=InnoDB; +ALTER TABLE `altadv_vars` ENGINE=InnoDB; +ALTER TABLE `alternate_currency` ENGINE=InnoDB; +ALTER TABLE `banned_ips` ENGINE=InnoDB; +ALTER TABLE `base_data` ENGINE=InnoDB; +ALTER TABLE `blocked_spells` ENGINE=InnoDB; +ALTER TABLE `buyer` ENGINE=InnoDB; +ALTER TABLE `char_create_combinations` ENGINE=InnoDB; +ALTER TABLE `char_create_point_allocations` ENGINE=InnoDB; +ALTER TABLE `character_activities` ENGINE=InnoDB; +ALTER TABLE `character_enabledtasks` ENGINE=InnoDB; +ALTER TABLE `character_tasks` ENGINE=InnoDB; +ALTER TABLE `chatchannels` ENGINE=InnoDB; +ALTER TABLE `completed_tasks` ENGINE=InnoDB; +ALTER TABLE `damageshieldtypes` ENGINE=InnoDB; +ALTER TABLE `discovered_items` ENGINE=InnoDB; +ALTER TABLE `eqtime` ENGINE=InnoDB; +ALTER TABLE `eventlog` ENGINE=InnoDB; +ALTER TABLE `faction_list_mod` ENGINE=InnoDB; +ALTER TABLE `faction_list` ENGINE=InnoDB; +ALTER TABLE `faction_values` ENGINE=InnoDB; +ALTER TABLE `friends` ENGINE=InnoDB; +ALTER TABLE `goallists` ENGINE=InnoDB; +ALTER TABLE `guild_bank` ENGINE=InnoDB; +ALTER TABLE `guild_members` ENGINE=InnoDB; +ALTER TABLE `guild_ranks` ENGINE=InnoDB; +ALTER TABLE `guild_relations` ENGINE=InnoDB; +ALTER TABLE `guilds` ENGINE=InnoDB; +ALTER TABLE `hackers` ENGINE=InnoDB; +ALTER TABLE `horses` ENGINE=InnoDB; +ALTER TABLE `inventory_versions` ENGINE=InnoDB; +ALTER TABLE `item_tick` ENGINE=InnoDB; +ALTER TABLE `items` ENGINE=InnoDB; +ALTER TABLE `keyring` ENGINE=InnoDB; +ALTER TABLE `launcher_zones` ENGINE=InnoDB; +ALTER TABLE `launcher` ENGINE=InnoDB; +ALTER TABLE `ldon_trap_entries` ENGINE=InnoDB; +ALTER TABLE `ldon_trap_templates` ENGINE=InnoDB; +ALTER TABLE `lfguild` ENGINE=InnoDB; +ALTER TABLE `lootdrop_entries` ENGINE=InnoDB; +ALTER TABLE `lootdrop` ENGINE=InnoDB; +ALTER TABLE `loottable_entries` ENGINE=InnoDB; +ALTER TABLE `loottable` ENGINE=InnoDB; +ALTER TABLE `mail` ENGINE=InnoDB; +ALTER TABLE `merc_armorinfo` ENGINE=InnoDB; +ALTER TABLE `merc_buffs` ENGINE=InnoDB; +ALTER TABLE `merc_inventory` ENGINE=InnoDB; +ALTER TABLE `merc_merchant_entries` ENGINE=InnoDB; +ALTER TABLE `merc_merchant_template_entries` ENGINE=InnoDB; +ALTER TABLE `merc_merchant_templates` ENGINE=InnoDB; +ALTER TABLE `merc_name_types` ENGINE=InnoDB; +ALTER TABLE `merc_npc_types` ENGINE=InnoDB; +ALTER TABLE `merc_spell_list_entries` ENGINE=InnoDB; +ALTER TABLE `merc_spell_lists` ENGINE=InnoDB; +ALTER TABLE `merc_stance_entries` ENGINE=InnoDB; +ALTER TABLE `merc_stats` ENGINE=InnoDB; +ALTER TABLE `merc_subtypes` ENGINE=InnoDB; +ALTER TABLE `merc_templates` ENGINE=InnoDB; +ALTER TABLE `merc_types` ENGINE=InnoDB; +ALTER TABLE `merc_weaponinfo` ENGINE=InnoDB; +ALTER TABLE `mercs` ENGINE=InnoDB; +ALTER TABLE `name_filter` ENGINE=InnoDB; +ALTER TABLE `npc_types` ENGINE=InnoDB; +ALTER TABLE `object_contents` ENGINE=InnoDB; +ALTER TABLE `petitions` ENGINE=InnoDB; +ALTER TABLE `pets_equipmentset_entries` ENGINE=InnoDB; +ALTER TABLE `pets_equipmentset` ENGINE=InnoDB; +ALTER TABLE `player_titlesets` ENGINE=InnoDB; +ALTER TABLE `proximities` ENGINE=InnoDB; +ALTER TABLE `races` ENGINE=InnoDB; +ALTER TABLE `raid_details` ENGINE=InnoDB; +ALTER TABLE `raid_leaders` ENGINE=InnoDB; +ALTER TABLE `raid_members` ENGINE=InnoDB; +ALTER TABLE `rule_sets` ENGINE=InnoDB; +ALTER TABLE `rule_values` ENGINE=InnoDB; +ALTER TABLE `saylink` ENGINE=InnoDB; +ALTER TABLE `sharedbank` ENGINE=InnoDB; +ALTER TABLE `skill_caps` ENGINE=InnoDB; +ALTER TABLE `spell_globals` ENGINE=InnoDB; +ALTER TABLE `spells_new` ENGINE=InnoDB; +ALTER TABLE `task_activities` ENGINE=InnoDB; +ALTER TABLE `tasks` ENGINE=InnoDB; +ALTER TABLE `tasksets` ENGINE=InnoDB; +ALTER TABLE `timers` ENGINE=InnoDB; +ALTER TABLE `titles` ENGINE=InnoDB; +ALTER TABLE `trader_audit` ENGINE=InnoDB; +ALTER TABLE `trader` ENGINE=InnoDB; +ALTER TABLE `tradeskill_recipe_entries` ENGINE=InnoDB; +ALTER TABLE `tradeskill_recipe` ENGINE=InnoDB; +ALTER TABLE `variables` ENGINE=InnoDB; +ALTER TABLE `veteran_reward_templates` ENGINE=InnoDB; +)", + }, + ManifestEntry{ + .version = 9153, + .description = "2020_05_09_items_subtype.sql", + .check = "SHOW COLUMNS from `items` LIKE 'UNK219'", + .condition = "not_empty", + .match = "", + .sql = R"( +ALTER TABLE `items` CHANGE `UNK219` `subtype` int(11) not null default '0'; + +)", + }, + ManifestEntry{ + .version = 9154, + .description = "2020_04_11_expansions_content_filters.sql", + .check = "SHOW COLUMNS from `zone` LIKE 'min_expansion'", + .condition = "empty", + .match = "", + .sql = R"( +-- zone +ALTER TABLE `zone` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `zone` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `zone` ADD `content_flags` varchar(100) NULL; + +-- doors +ALTER TABLE `doors` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `doors` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `doors` ADD `content_flags` varchar(100) NULL; + +-- object +ALTER TABLE `object` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `object` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `object` ADD `content_flags` varchar(100) NULL; + +-- spawn2 +ALTER TABLE `spawn2` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `spawn2` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `spawn2` ADD `content_flags` varchar(100) NULL; + +-- tradeskill_recipe +ALTER TABLE `tradeskill_recipe` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `tradeskill_recipe` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `tradeskill_recipe` ADD `content_flags` varchar(100) NULL; + +-- merchantlist +ALTER TABLE `merchantlist` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `merchantlist` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `merchantlist` ADD `content_flags` varchar(100) NULL; + +-- global_loot +ALTER TABLE `global_loot` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `global_loot` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `global_loot` ADD `content_flags` varchar(100) NULL; + +-- fishing +ALTER TABLE `fishing` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `fishing` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `fishing` ADD `content_flags` varchar(100) NULL; + +-- forage +ALTER TABLE `forage` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `forage` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `forage` ADD `content_flags` varchar(100) NULL; + +-- ground_spawns +ALTER TABLE `ground_spawns` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `ground_spawns` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `ground_spawns` ADD `content_flags` varchar(100) NULL; + +-- loottable +ALTER TABLE `loottable` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `loottable` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `loottable` ADD `content_flags` varchar(100) NULL; + +-- lootdrop +ALTER TABLE `lootdrop` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `lootdrop` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `lootdrop` ADD `content_flags` varchar(100) NULL; + +-- starting_items +ALTER TABLE `starting_items` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `starting_items` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `starting_items` ADD `content_flags` varchar(100) NULL; + +-- start_zones +ALTER TABLE `start_zones` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `start_zones` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `start_zones` ADD `content_flags` varchar(100) NULL; + +-- traps +ALTER TABLE `traps` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `traps` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `traps` ADD `content_flags` varchar(100) NULL; + +-- zone_points +ALTER TABLE `zone_points` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `zone_points` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `zone_points` ADD `content_flags` varchar(100) NULL; + +-- pok books +update doors set min_expansion = 4 where name like '%POKTELE%'; + +-- content flags +CREATE TABLE `content_flags` (`id` int AUTO_INCREMENT,`flag_name` varchar(75),`enabled` tinyint,`notes` text, PRIMARY KEY (id)); + +-- content flags disabled + +ALTER TABLE `doors` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `fishing` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `forage` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `global_loot` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `ground_spawns` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `lootdrop` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `loottable` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `merchantlist` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `object` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `spawn2` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `start_zones` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `starting_items` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `tradeskill_recipe` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `traps` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `zone` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `zone_points` ADD `content_flags_disabled` varchar(100) NULL; +)", + }, + ManifestEntry{ + .version = 9155, + .description = "2020_08_15_lootdrop_level_filtering.sql", + .check = "SHOW COLUMNS from `lootdrop_entries` LIKE 'trivial_min_level'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `lootdrop_entries` CHANGE `minlevel` `trivial_min_level` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT ''; +ALTER TABLE `lootdrop_entries` CHANGE `maxlevel` `trivial_max_level` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT ''; +ALTER TABLE `lootdrop_entries` ADD COLUMN `npc_min_level` smallint unsigned NOT NULL DEFAULT '0' COMMENT ''; +ALTER TABLE `lootdrop_entries` ADD COLUMN `npc_max_level` smallint unsigned NOT NULL DEFAULT '0' COMMENT ''; +ALTER TABLE `lootdrop_entries` CHANGE `trivial_min_level` `trivial_min_level` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT ''; +ALTER TABLE `lootdrop_entries` CHANGE `trivial_max_level` `trivial_max_level` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT ''; +UPDATE `lootdrop_entries` SET `trivial_max_level` = 0 WHERE `trivial_max_level` = 127; +)", + }, + ManifestEntry{ + .version = 9156, + .description = "2020_08_16_virtual_zonepoints.sql", + .check = "SHOW COLUMNS from `zone_points` LIKE 'is_virtual'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `zone_points` ADD COLUMN `is_virtual` tinyint NOT NULL DEFAULT '0' COMMENT '' AFTER `content_flags_disabled`; +ALTER TABLE `zone_points` ADD COLUMN `height` int NOT NULL DEFAULT '0' COMMENT ''; +ALTER TABLE `zone_points` ADD COLUMN `width` int NOT NULL DEFAULT '0' COMMENT ''; +)", + }, + ManifestEntry{ + .version = 9157, + .description = "2020_09_02_pet_taunting.sql", + .check = "SHOW COLUMNS from `character_pet_info` LIKE 'taunting'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `character_pet_info` ADD COLUMN `taunting` tinyint(1) NOT NULL DEFAULT '1' COMMENT ''; + +)", + }, + ManifestEntry{ + .version = 9158, + .description = "2020_12_09_underworld.sql", + .check = "SHOW COLUMNS from `zone` LIKE 'underworld_teleport_index'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `zone` ADD COLUMN `underworld_teleport_index` INT(4) NOT NULL DEFAULT '0'; +UPDATE `zone` SET `underworld` = '-2030' WHERE `zoneidnumber` = '71'; +UPDATE `zone` SET `underworld_teleport_index` = '11' WHERE `zoneidnumber` = '71'; +UPDATE `zone` SET `underworld_teleport_index` = '-1' WHERE `zoneidnumber` = '75'; +UPDATE `zone` SET `underworld_teleport_index` = '-1' WHERE `zoneidnumber` = '150'; + + +)", + }, + ManifestEntry{ + .version = 9159, + .description = "2020_12_22_expedition_system.sql", + .check = "SELECT * FROM db_version WHERE version >= 9159", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `expeditions` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `uuid` VARCHAR(36) NOT NULL, + `dynamic_zone_id` INT(10) UNSIGNED NOT NULL DEFAULT 0, + `expedition_name` VARCHAR(128) NOT NULL, + `leader_id` INT(10) UNSIGNED NOT NULL DEFAULT 0, + `min_players` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0, + `max_players` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0, + `add_replay_on_join` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1, + `is_locked` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + UNIQUE INDEX `dynamic_zone_id` (`dynamic_zone_id`) +) +COLLATE='latin1_swedish_ci' +ENGINE=InnoDB +; + +CREATE TABLE `expedition_lockouts` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `expedition_id` INT(10) UNSIGNED NOT NULL, + `event_name` VARCHAR(256) NOT NULL, + `expire_time` DATETIME NOT NULL DEFAULT current_timestamp(), + `duration` INT(10) UNSIGNED NOT NULL DEFAULT 0, + `from_expedition_uuid` VARCHAR(36) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `expedition_id_event_name` (`expedition_id`, `event_name`) +) +COLLATE='latin1_swedish_ci' +ENGINE=InnoDB +; + +CREATE TABLE `expedition_members` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `expedition_id` INT(10) UNSIGNED NOT NULL DEFAULT 0, + `character_id` INT(10) UNSIGNED NOT NULL DEFAULT 0, + `is_current_member` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1, + PRIMARY KEY (`id`), + UNIQUE INDEX `expedition_id_character_id` (`expedition_id`, `character_id`) +) +COLLATE='latin1_swedish_ci' +ENGINE=InnoDB +; + +CREATE TABLE `character_expedition_lockouts` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `character_id` INT(10) UNSIGNED NOT NULL, + `expedition_name` VARCHAR(128) NOT NULL, + `event_name` VARCHAR(256) NOT NULL, + `expire_time` DATETIME NOT NULL DEFAULT current_timestamp(), + `duration` INT(10) UNSIGNED NOT NULL DEFAULT 0, + `from_expedition_uuid` VARCHAR(36) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `character_id_expedition_name_event_name` (`character_id`, `expedition_name`, `event_name`) +) +COLLATE='latin1_swedish_ci' +ENGINE=InnoDB +; + +CREATE TABLE `dynamic_zones` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `instance_id` INT(10) NOT NULL DEFAULT 0, + `type` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0, + `compass_zone_id` INT(10) UNSIGNED NOT NULL DEFAULT 0, + `compass_x` FLOAT NOT NULL DEFAULT 0, + `compass_y` FLOAT NOT NULL DEFAULT 0, + `compass_z` FLOAT NOT NULL DEFAULT 0, + `safe_return_zone_id` INT(10) UNSIGNED NOT NULL DEFAULT 0, + `safe_return_x` FLOAT NOT NULL DEFAULT 0, + `safe_return_y` FLOAT NOT NULL DEFAULT 0, + `safe_return_z` FLOAT NOT NULL DEFAULT 0, + `safe_return_heading` FLOAT NOT NULL DEFAULT 0, + `zone_in_x` FLOAT NOT NULL DEFAULT 0, + `zone_in_y` FLOAT NOT NULL DEFAULT 0, + `zone_in_z` FLOAT NOT NULL DEFAULT 0, + `zone_in_heading` FLOAT NOT NULL DEFAULT 0, + `has_zone_in` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + UNIQUE INDEX `instance_id` (`instance_id`) +) +COLLATE='utf8mb4_general_ci' +ENGINE=InnoDB +; + +)", + }, + ManifestEntry{ + .version = 9160, + .description = "2021_02_14_npc_exp_mod.sql", + .check = "SHOW COLUMNS from `npc_types` LIKE 'exp_mod'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` ADD COLUMN `exp_mod` INT NOT NULL DEFAULT '100' AFTER `always_aggro`; + +)", + }, + ManifestEntry{ + .version = 9161, + .description = "2021_02_15_npc_spell_entries_unsigned.sql", + .check = "SELECT * FROM db_version WHERE version >= 9161", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_spells_entries` MODIFY `spellid` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 0; + +)", + }, + ManifestEntry{ + .version = 9162, + .description = "2021_02_17_server_scheduled_events.sql", + .check = "SELECT * FROM db_version WHERE version >= 9162", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `server_scheduled_events` +( + `id` int(11) NOT NULL AUTO_INCREMENT, + `description` varchar(255) DEFAULT NULL, + `event_type` varchar(100) DEFAULT NULL, + `event_data` text DEFAULT NULL, + `minute_start` int(11) DEFAULT 0, + `hour_start` int(11) DEFAULT 0, + `day_start` int(11) DEFAULT 0, + `month_start` int(11) DEFAULT 0, + `year_start` int(11) DEFAULT 0, + `minute_end` int(11) DEFAULT 0, + `hour_end` int(11) DEFAULT 0, + `day_end` int(11) DEFAULT 0, + `month_end` int(11) DEFAULT 0, + `year_end` int(11) DEFAULT 0, + `cron_expression` varchar(100) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `deleted_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; + +)", + }, + ManifestEntry{ + .version = 9163, + .description = "2021_04_17_zone_safe_heading_changes.sql", + .check = "SHOW COLUMNS FROM `zone` LIKE 'safe_heading'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE zone ADD COLUMN safe_heading float NOT NULL DEFAULT 0 AFTER safe_z; + +)", + }, + ManifestEntry{ + .version = 9164, + .description = "2021_04_23_character_exp_modifiers.sql", + .check = "SHOW TABLES LIKE 'character_exp_modifiers'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `character_exp_modifiers` ( + `character_id` int NOT NULL, + `zone_id` int NOT NULL, + `aa_modifier` float NOT NULL, + `exp_modifier` float NOT NULL, + PRIMARY KEY (`character_id`, `zone_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +)", + }, + ManifestEntry{ + .version = 9165, + .description = "2021_04_28_idle_pathing.sql", + .check = "SHOW COLUMNS FROM `spawn2` LIKE 'path_when_zone_idle'", + .condition = "empty", + .match = "", + .sql = R"( +-- Add new path_when_zone_idle flag to allow some spawns to path in empty zones +ALTER TABLE spawn2 ADD COLUMN path_when_zone_idle tinyint(1) NOT NULL DEFAULT 0 AFTER pathgrid; + +-- Update spawns that used to path in empty zones because of their grid type +-- to behave the same using the new mechanism. The code that checked path grid +-- types has been removed as it was coincidentally coupled to idle movement. +-- The new flag path_when_zone_idle is the new mechanism, and allows any moving +-- mob, not just those on grids, to path while the zone is idle. +UPDATE spawn2 s +LEFT JOIN zone z ON z.short_name = s.zone +LEFT JOIN grid g ON g.id = s.pathgrid AND g.zoneid = z.zoneidnumber +SET path_when_zone_idle = 1 +WHERE pathgrid != 0 AND g.type IN (4, 6); + +)", + }, + ManifestEntry{ + .version = 9166, + .description = "2021_02_12_dynamic_zone_members.sql", + .check = "SHOW TABLES LIKE 'dynamic_zone_members'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `dynamic_zone_members` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `dynamic_zone_id` int(10) unsigned NOT NULL DEFAULT 0, + `character_id` int(10) unsigned NOT NULL DEFAULT 0, + `is_current_member` tinyint(3) unsigned NOT NULL DEFAULT 1, + PRIMARY KEY (`id`), + UNIQUE KEY `dynamic_zone_id_character_id` (`dynamic_zone_id`,`character_id`), + KEY `character_id` (`character_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +DROP TABLE `expedition_members`; + +)", + }, + ManifestEntry{ + .version = 9167, + .description = "2021_06_06_beastlord_pets.sql", + .check = "SHOW TABLES LIKE 'pets_beastlord_data'", + .condition = "empty", + .match = "", + .sql = R"( +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +DROP TABLE IF EXISTS `pets_beastlord_data`; +CREATE TABLE `pets_beastlord_data` ( + `player_race` int UNSIGNED NOT NULL DEFAULT 1, + `pet_race` int UNSIGNED NOT NULL DEFAULT 42, + `texture` tinyint UNSIGNED NOT NULL DEFAULT 0, + `helm_texture` tinyint UNSIGNED NOT NULL DEFAULT 0, + `gender` tinyint UNSIGNED NOT NULL DEFAULT 2, + `size_modifier` float UNSIGNED NULL DEFAULT 1, + `face` tinyint UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (`player_race`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +INSERT INTO `pets_beastlord_data` VALUES (2, 42, 2, 0, 2, 1, 0); -- Barbarian +INSERT INTO `pets_beastlord_data` VALUES (9, 91, 0, 0, 2, 2.5, 0); -- Troll +INSERT INTO `pets_beastlord_data` VALUES (10, 43, 3, 0, 2, 1, 0); -- Ogre +INSERT INTO `pets_beastlord_data` VALUES (128, 42, 0, 0, 1, 2, 0); -- Iksar +INSERT INTO `pets_beastlord_data` VALUES (130, 63, 0, 0, 2, 0.8, 0); -- Vah Shir + +SET FOREIGN_KEY_CHECKS = 1; +)", + }, + ManifestEntry{ + .version = 9168, + .description = "2021_08_31_pvp_duration.sql", + .check = "SHOW COLUMNS FROM `spells_new` LIKE 'pvp_duration'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `spells_new` CHANGE `field181` `pvp_duration` int(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field182` `pvp_duration_cap` int(11) NOT NULL DEFAULT '0'; + +)", + }, + ManifestEntry{ + .version = 9169, + .description = "2021_06_06_dynamic_zone_moved_columns.sql", + .check = "SELECT * FROM db_version WHERE version >= 9169", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `dynamic_zones` + ADD COLUMN `uuid` VARCHAR(36) NOT NULL COLLATE 'latin1_swedish_ci' AFTER `type`, + ADD COLUMN `name` VARCHAR(128) NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci' AFTER `uuid`, + ADD COLUMN `leader_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `name`, + ADD COLUMN `min_players` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `leader_id`, + ADD COLUMN `max_players` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `min_players`; + +-- migrate any currently active expeditions +UPDATE dynamic_zones +INNER JOIN expeditions ON expeditions.dynamic_zone_id = dynamic_zones.id +SET + dynamic_zones.uuid = expeditions.uuid, + dynamic_zones.name = expeditions.expedition_name, + dynamic_zones.leader_id = expeditions.leader_id, + dynamic_zones.min_players = expeditions.min_players, + dynamic_zones.max_players = expeditions.max_players; + +ALTER TABLE `expeditions` + DROP COLUMN `uuid`, + DROP COLUMN `expedition_name`, + DROP COLUMN `leader_id`, + DROP COLUMN `min_players`, + DROP COLUMN `max_players`; + +)", + }, + ManifestEntry{ + .version = 9170, + .description = "2021_03_03_instance_safereturns.sql", + .check = "SHOW TABLES LIKE 'character_instance_safereturns'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `character_instance_safereturns` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `character_id` int(10) unsigned NOT NULL, + `instance_zone_id` int(11) NOT NULL DEFAULT 0, + `instance_id` int(11) NOT NULL DEFAULT 0, + `safe_zone_id` int(11) NOT NULL DEFAULT 0, + `safe_x` float NOT NULL DEFAULT 0, + `safe_y` float NOT NULL DEFAULT 0, + `safe_z` float NOT NULL DEFAULT 0, + `safe_heading` float NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + UNIQUE KEY `character_id` (`character_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +)", + }, + ManifestEntry{ + .version = 9171, + .description = "2021_03_30_remove_dz_is_current_member.sql", + .check = "SHOW COLUMNS FROM `dynamic_zone_members` LIKE 'is_current_member'", + .condition = "not_empty", + .match = "", + .sql = R"( +-- remove any non-current members for new behavior +DELETE FROM `dynamic_zone_members` +WHERE is_current_member = 0; + +ALTER TABLE `dynamic_zone_members` + DROP COLUMN `is_current_member`; + +)", + }, + ManifestEntry{ + .version = 9172, + .description = "2021_05_21_shared_tasks.sql", + .check = "SHOW TABLES LIKE 'shared_tasks'", + .condition = "empty", + .match = "", + .sql = R"( +-- shared task tables +CREATE TABLE `shared_tasks` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `task_id` int(11) DEFAULT NULL, + `accepted_time` datetime DEFAULT NULL, + `expire_time` datetime DEFAULT NULL, + `completion_time` datetime DEFAULT NULL, + `is_locked` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; + +CREATE TABLE `shared_task_members` +( + `shared_task_id` bigint(20) NOT NULL, + `character_id` bigint(20) NOT NULL, + `is_leader` tinyint(4) DEFAULT NULL, + PRIMARY KEY (`shared_task_id`, `character_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +CREATE TABLE `shared_task_activity_state` +( + `shared_task_id` bigint(20) NOT NULL, + `activity_id` int(11) NOT NULL, + `done_count` int(11) DEFAULT NULL, + `updated_time` datetime DEFAULT NULL, + `completed_time` datetime DEFAULT NULL, + PRIMARY KEY (`shared_task_id`, `activity_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +CREATE TABLE `shared_task_dynamic_zones` +( + `shared_task_id` bigint(20) NOT NULL, + `dynamic_zone_id` int(10) unsigned NOT NULL, + PRIMARY KEY (`shared_task_id`, `dynamic_zone_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- completed shared task tables - simply stores completed for reporting and logging + +CREATE TABLE `completed_shared_tasks` +( + `id` bigint(20) NOT NULL, + `task_id` int(11) DEFAULT NULL, + `accepted_time` datetime DEFAULT NULL, + `expire_time` datetime DEFAULT NULL, + `completion_time` datetime DEFAULT NULL, + `is_locked` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +CREATE TABLE `completed_shared_task_members` +( + `shared_task_id` bigint(20) NOT NULL, + `character_id` bigint(20) NOT NULL, + `is_leader` tinyint(4) DEFAULT NULL, + PRIMARY KEY (`shared_task_id`, `character_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +CREATE TABLE `completed_shared_task_activity_state` +( + `shared_task_id` bigint(20) NOT NULL, + `activity_id` int(11) NOT NULL, + `done_count` int(11) DEFAULT NULL, + `updated_time` datetime DEFAULT NULL, + `completed_time` datetime DEFAULT NULL, + PRIMARY KEY (`shared_task_id`, `activity_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- tasks + +ALTER TABLE `tasks` + ADD COLUMN `level_spread` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `maxlevel`, + ADD COLUMN `min_players` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `level_spread`, + ADD COLUMN `max_players` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `min_players`, + ADD COLUMN `replay_timer_seconds` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `completion_emote`, + ADD COLUMN `request_timer_seconds` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `replay_timer_seconds`; + +-- character timers + +CREATE TABLE `character_task_timers` +( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `character_id` int(10) unsigned NOT NULL DEFAULT 0, + `task_id` int(10) unsigned NOT NULL DEFAULT 0, + `timer_type` int(11) NOT NULL DEFAULT 0, + `expire_time` datetime NOT NULL DEFAULT current_timestamp(), + PRIMARY KEY (`id`), + KEY `character_id` (`character_id`), + KEY `task_id` (`task_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +ALTER TABLE `tasks` + CHANGE COLUMN `completion_emote` `completion_emote` VARCHAR (512) NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci' AFTER `faction_reward`; + +ALTER TABLE `tasks` + ADD COLUMN `reward_radiant_crystals` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `rewardmethod`, + ADD COLUMN `reward_ebon_crystals` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `reward_radiant_crystals`; + +)", + }, + ManifestEntry{ + .version = 9173, + .description = "2021_09_14_zone_lava_damage.sql", + .check = "SHOW COLUMNS FROM `zone` LIKE 'lava_damage'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE zone ADD lava_damage INT(11) NULL DEFAULT '50' AFTER underworld_teleport_index, ADD min_lava_damage INT(11) NOT NULL DEFAULT '10' AFTER lava_damage; + +)", + }, + ManifestEntry{ + .version = 9174, + .description = "2021_10_09_not_null_door_columns.sql", + .check = "SELECT * FROM db_version WHERE version >= 9174", + .condition = "empty", + .match = "", + .sql = R"( +-- update any null columns to non-null value first to avoid data truncation errors +-- this will likely only affect the buffer column +update `doors` set `doors`.`dest_x` = 0 where `doors`.`dest_x` is null; +update `doors` set `doors`.`dest_y` = 0 where `doors`.`dest_y` is null; +update `doors` set `doors`.`dest_z` = 0 where `doors`.`dest_z` is null; +update `doors` set `doors`.`dest_heading` = 0 where `doors`.`dest_heading` is null; +update `doors` set `doors`.`invert_state` = 0 where `doors`.`invert_state` is null; +update `doors` set `doors`.`incline` = 0 where `doors`.`incline` is null; +update `doors` set `doors`.`buffer` = 0 where `doors`.`buffer` is null; + +ALTER TABLE `doors` + CHANGE COLUMN `dest_x` `dest_x` FLOAT NOT NULL DEFAULT '0' AFTER `dest_instance`, + CHANGE COLUMN `dest_y` `dest_y` FLOAT NOT NULL DEFAULT '0' AFTER `dest_x`, + CHANGE COLUMN `dest_z` `dest_z` FLOAT NOT NULL DEFAULT '0' AFTER `dest_y`, + CHANGE COLUMN `dest_heading` `dest_heading` FLOAT NOT NULL DEFAULT '0' AFTER `dest_z`, + CHANGE COLUMN `invert_state` `invert_state` INT(11) NOT NULL DEFAULT '0' AFTER `dest_heading`, + CHANGE COLUMN `incline` `incline` INT(11) NOT NULL DEFAULT '0' AFTER `invert_state`, + CHANGE COLUMN `buffer` `buffer` FLOAT NOT NULL DEFAULT '0' AFTER `size`; + +)", + }, + ManifestEntry{ + .version = 9175, + .description = "2022_01_02_expansion_default_value_all.sql", + .check = "SHOW COLUMNS FROM `forage` LIKE 'min_expansion'", + .condition = "contains", + .match = "unsigned", + .sql = R"( +-- forage + +ALTER TABLE `forage` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `forage` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE forage set min_expansion = -1 where min_expansion = 0; +UPDATE forage set max_expansion = -1 where max_expansion = 0; + +-- tradeskill_recipe + +ALTER TABLE `tradeskill_recipe` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `tradeskill_recipe` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE tradeskill_recipe set min_expansion = -1 where min_expansion = 0; +UPDATE tradeskill_recipe set max_expansion = -1 where max_expansion = 0; + +-- fishing + +ALTER TABLE `fishing` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `fishing` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE fishing set min_expansion = -1 where min_expansion = 0; +UPDATE fishing set max_expansion = -1 where max_expansion = 0; + +-- zone + +ALTER TABLE `zone` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `zone` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE zone set min_expansion = -1 where min_expansion = 0; +UPDATE zone set max_expansion = -1 where max_expansion = 0; + +-- traps + +ALTER TABLE `traps` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `traps` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE traps set min_expansion = -1 where min_expansion = 0; +UPDATE traps set max_expansion = -1 where max_expansion = 0; + +-- loottable + +ALTER TABLE `loottable` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `loottable` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE loottable set min_expansion = -1 where min_expansion = 0; +UPDATE loottable set max_expansion = -1 where max_expansion = 0; + +-- ground_spawns + +ALTER TABLE `ground_spawns` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `ground_spawns` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE ground_spawns set min_expansion = -1 where min_expansion = 0; +UPDATE ground_spawns set max_expansion = -1 where max_expansion = 0; + +-- starting_items + +ALTER TABLE `starting_items` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `starting_items` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE starting_items set min_expansion = -1 where min_expansion = 0; +UPDATE starting_items set max_expansion = -1 where max_expansion = 0; + +-- spawn2 + +ALTER TABLE `spawn2` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `spawn2` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE spawn2 set min_expansion = -1 where min_expansion = 0; +UPDATE spawn2 set max_expansion = -1 where max_expansion = 0; + +-- zone_points + +ALTER TABLE `zone_points` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `zone_points` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE zone_points set min_expansion = -1 where min_expansion = 0; +UPDATE zone_points set max_expansion = -1 where max_expansion = 0; + +-- lootdrop + +ALTER TABLE `lootdrop` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `lootdrop` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE lootdrop set min_expansion = -1 where min_expansion = 0; +UPDATE lootdrop set max_expansion = -1 where max_expansion = 0; + +-- global_loot + +ALTER TABLE `global_loot` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `global_loot` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE global_loot set min_expansion = -1 where min_expansion = 0; +UPDATE global_loot set max_expansion = -1 where max_expansion = 0; + +-- doors + +ALTER TABLE `doors` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `doors` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE doors set min_expansion = -1 where min_expansion = 0; +UPDATE doors set max_expansion = -1 where max_expansion = 0; + +-- object + +ALTER TABLE `object` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `object` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE object set min_expansion = -1 where min_expansion = 0; +UPDATE object set max_expansion = -1 where max_expansion = 0; + +-- start_zones + +ALTER TABLE `start_zones` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `start_zones` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE start_zones set min_expansion = -1 where min_expansion = 0; +UPDATE start_zones set max_expansion = -1 where max_expansion = 0; + +-- merchantlist + +ALTER TABLE `merchantlist` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +ALTER TABLE `merchantlist` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; +UPDATE merchantlist set min_expansion = -1 where min_expansion = 0; +UPDATE merchantlist set max_expansion = -1 where max_expansion = 0; + +-- spawnentry +ALTER TABLE `spawnentry` ADD `min_expansion` tinyint(4) NOT NULL DEFAULT -1; +ALTER TABLE `spawnentry` ADD `max_expansion` tinyint(4) NOT NULL DEFAULT -1; +ALTER TABLE `spawnentry` ADD `content_flags` varchar(100) NULL; +ALTER TABLE `spawnentry` ADD `content_flags_disabled` varchar(100) NULL; + +)", + }, + ManifestEntry{ + .version = 9176, + .description = "2022_01_10_checksum_verification.sql", + .check = "SHOW COLUMNS FROM `account` LIKE 'crc_eqgame'", + .condition = "empty", + .match = "", + .sql = R"( +INSERT INTO `variables` (`varname`, `value`, `information`, `ts`) VALUES ('crc_eqgame', '0', 'Client CRC64 Checksum on: eqgame.exe', '2021-09-23 14:16:27'); +INSERT INTO `variables` (`varname`, `value`, `information`, `ts`) VALUES ('crc_skillcaps', '0', 'Client CRC64 Checksum on: SkillCaps.txt', '2021-09-23 14:16:21'); +INSERT INTO `variables` (`varname`, `value`, `information`, `ts`) VALUES ('crc_basedata', '0', 'Client CRC64 Checksum on: BaseData.txt','2021-09-23 14:16:21'); + +ALTER TABLE `account` + ADD COLUMN `crc_eqgame` TEXT NULL AFTER `suspend_reason`, + ADD COLUMN `crc_skillcaps` TEXT NULL AFTER `crc_eqgame`, + ADD COLUMN `crc_basedata` TEXT NULL AFTER `crc_skillcaps`; + +ALTER TABLE `account` CHANGE `suspendeduntil` `suspendeduntil` datetime NULL COMMENT ''; + +)", + }, + ManifestEntry{ + .version = 9177, + .description = "2022_03_06_table_structure_changes.sql", + .check = "SHOW COLUMNS FROM `pets` LIKE 'id'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `pets` DROP PRIMARY KEY; +ALTER TABLE `pets` ADD `id` int(20) PRIMARY KEY NOT NULL AUTO_INCREMENT FIRST; +CREATE UNIQUE INDEX `type_petpower` ON pets (type, petpower); + +ALTER TABLE `horses` DROP PRIMARY KEY; +ALTER TABLE `horses` ADD `id` int(20) PRIMARY KEY NOT NULL AUTO_INCREMENT FIRST; +CREATE UNIQUE INDEX `filename` ON horses (filename); + +ALTER TABLE books DROP INDEX `id`; +ALTER TABLE `books` ADD `id` int(20) PRIMARY KEY NOT NULL AUTO_INCREMENT FIRST; +CREATE UNIQUE INDEX `filename` ON books (name); + +)", + }, + ManifestEntry{ + .version = 9178, + .description = "2022_03_07_saylink_collation.sql", + .check = "SELECT * FROM db_version WHERE version >= 9178", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE saylink CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; + +)", + }, + ManifestEntry{ + .version = 9179, + .description = "2022_04_30_hp_regen_per_second.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'hp_regen_per_second'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE npc_types ADD COLUMN hp_regen_per_second bigint DEFAULT 0 AFTER hp_regen_rate; + +)", + }, + ManifestEntry{ + .version = 9180, + .description = "2022_05_01_character_peqzone_flags.sql", + .check = "SHOW TABLES LIKE 'character_peqzone_flags'", + .condition = "empty", + .match = "", + .sql = R"( +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for character_peqzone_flags +-- ---------------------------- +DROP TABLE IF EXISTS `character_peqzone_flags`; +CREATE TABLE `character_peqzone_flags` ( + `id` int NOT NULL DEFAULT 0, + `zone_id` int NOT NULL DEFAULT 0, + PRIMARY KEY (`id`, `zone_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +SET FOREIGN_KEY_CHECKS = 1; + +)", + }, + ManifestEntry{ + .version = 9181, + .description = "2022_05_03_task_activity_goal_match_list.sql", + .check = "SHOW COLUMNS FROM `task_activities` LIKE 'goal_match_list'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE task_activities ADD goal_match_list text AFTER goalid; + +)", + }, + ManifestEntry{ + .version = 9182, + .description = "2022_05_02_npc_types_int64.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'hp'", + .condition = "missing", + .match = "bigint", + .sql = R"( +ALTER TABLE npc_types MODIFY COLUMN hp BIGINT NOT NULL DEFAULT 0; +ALTER TABLE npc_types MODIFY COLUMN mana BIGINT NOT NULL DEFAULT 0; +ALTER TABLE npc_types MODIFY COLUMN hp_regen_rate BIGINT NOT NULL DEFAULT 0; +ALTER TABLE npc_types MODIFY COLUMN mana_regen_rate BIGINT NOT NULL DEFAULT 0; + +)", + }, + ManifestEntry{ + .version = 9183, + .description = "2022_05_07_merchant_data_buckets.sql", + .check = "SHOW COLUMNS FROM `merchantlist` LIKE 'bucket_comparison'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `merchantlist` +ADD COLUMN `bucket_name` varchar(100) NOT NULL DEFAULT '' AFTER `probability`, +ADD COLUMN `bucket_value` varchar(100) NOT NULL DEFAULT '' AFTER `bucket_name`, +ADD COLUMN `bucket_comparison` tinyint UNSIGNED NULL DEFAULT 0 AFTER `bucket_value`; +)", + }, + ManifestEntry{ + .version = 9184, + .description = "2022_05_21_schema_consistency.sql", + .check = "SELECT * FROM db_version WHERE version >= 9184", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE npc_types MODIFY COLUMN hp BIGINT NOT NULL DEFAULT 0; +ALTER TABLE npc_types MODIFY COLUMN mana BIGINT NOT NULL DEFAULT 0; +ALTER TABLE npc_types MODIFY COLUMN hp_regen_rate BIGINT NOT NULL DEFAULT 0; +ALTER TABLE npc_types MODIFY COLUMN mana_regen_rate BIGINT NOT NULL DEFAULT 0; +ALTER TABLE npc_types MODIFY COLUMN hp_regen_per_second BIGINT NOT NULL DEFAULT 0; + +)", + }, + ManifestEntry{ + .version = 9185, + .description = "2022_05_07_discord_webhooks.sql", + .check = "SHOW TABLES LIKE 'discord_webhooks'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE discord_webhooks +( + id INT auto_increment primary key NULL, + webhook_name varchar(100) NULL, + webhook_url varchar(255) NULL, + created_at DATETIME NULL, + deleted_at DATETIME NULL +) ENGINE=InnoDB +DEFAULT CHARSET=utf8mb4 +COLLATE=utf8mb4_general_ci; + +ALTER TABLE logsys_categories + ADD log_to_discord smallint(11) default 0 AFTER log_to_gmsay; +ALTER TABLE logsys_categories + ADD discord_webhook_id int(11) default 0 AFTER log_to_discord; + +)", + }, + ManifestEntry{ + .version = 9186, + .description = "2022_07_09_zone_expansion_deprecate.sql", + .check = "SHOW COLUMNS FROM `zone` LIKE 'expansion'", + .condition = "not_empty", + .match = "", + .sql = R"( + +)", + }, + ManifestEntry{ + .version = 9187, + .description = "2022_07_09_task_zone_version_matching.sql", + .check = "SHOW COLUMNS FROM `task_activities` LIKE 'zone_version'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `task_activities` ADD COLUMN `zone_version` int(11) default -1 AFTER zones; + +)", + }, + ManifestEntry{ + .version = 9189, + .description = "2022_07_10_character_task_rewarded.sql", + .check = "SHOW COLUMNS FROM `character_tasks` LIKE 'was_rewarded'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `character_tasks` + ADD COLUMN `was_rewarded` TINYINT NOT NULL DEFAULT '0' AFTER `acceptedtime`; + +)", + }, + ManifestEntry{ + .version = 9190, + .description = "2022_07_13_task_reward_points.sql", + .check = "SHOW COLUMNS FROM `tasks` LIKE 'reward_points'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `tasks` + ADD COLUMN `reward_points` INT NOT NULL DEFAULT '0' AFTER `rewardmethod`, + ADD COLUMN `reward_point_type` INT NOT NULL DEFAULT '0' AFTER `reward_points`; + +-- convert don crystal points to new fields +UPDATE tasks SET reward_point_type = 4 WHERE reward_radiant_crystals > 0; +UPDATE tasks SET reward_point_type = 5 WHERE reward_ebon_crystals > 0; +UPDATE tasks SET reward_points = reward_radiant_crystals WHERE reward_radiant_crystals > 0; +UPDATE tasks SET reward_points = reward_ebon_crystals WHERE reward_ebon_crystals > 0; + +ALTER TABLE `tasks` + DROP COLUMN `reward_radiant_crystals`, + DROP COLUMN `reward_ebon_crystals`; + +)", + }, + ManifestEntry{ + .version = 9191, + .description = "2022_07_28_gm_state_changes.sql", + .check = "SHOW COLUMNS FROM `account` LIKE 'invulnerable'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `account` + ADD COLUMN `invulnerable` TINYINT(4) NULL DEFAULT '0' AFTER `gmspeed`, + ADD COLUMN `flymode` TINYINT(4) NULL DEFAULT '0' AFTER `invulnerable`, + ADD COLUMN `ignore_tells` TINYINT(4) NULL DEFAULT '0' AFTER `flymode`; + +)", + }, + ManifestEntry{ + .version = 9192, + .description = "2022_07_13_task_lock_activity.sql", + .check = "SHOW COLUMNS FROM `tasks` LIKE 'lock_activity_id'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `tasks` + ADD COLUMN `lock_activity_id` INT NOT NULL DEFAULT '-1' AFTER `request_timer_seconds`; + +)", + }, + ManifestEntry{ + .version = 9193, + .description = "2022_07_16_task_timer_groups.sql", + .check = "SHOW COLUMNS FROM `tasks` LIKE 'replay_timer_group'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `tasks` + ADD COLUMN `replay_timer_group` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `completion_emote`, + ADD COLUMN `request_timer_group` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `replay_timer_seconds`; + +ALTER TABLE `character_task_timers` + ADD COLUMN `timer_group` INT NOT NULL DEFAULT '0' AFTER `timer_type`; + +)", + }, + ManifestEntry{ + .version = 9194, + .description = "2022_07_23_dz_switch_id.sql", + .check = "SHOW COLUMNS FROM `doors` LIKE 'dz_switch_id'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `doors` + ADD COLUMN `dz_switch_id` INT NOT NULL DEFAULT '0' AFTER `is_ldon_door`; + +ALTER TABLE `dynamic_zones` + ADD COLUMN `dz_switch_id` INT NOT NULL DEFAULT '0' AFTER `max_players`; + +)", + }, + ManifestEntry{ + .version = 9195, + .description = "2022_07_23_dz_templates.sql", + .check = "SHOW TABLES like 'dynamic_zone_templates'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `dynamic_zone_templates` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `zone_id` int(11) NOT NULL DEFAULT 0, + `zone_version` int(11) NOT NULL DEFAULT 0, + `name` varchar(128) NOT NULL DEFAULT '', + `min_players` int(11) NOT NULL DEFAULT 0, + `max_players` int(11) NOT NULL DEFAULT 0, + `duration_seconds` int(11) NOT NULL DEFAULT 0, + `dz_switch_id` int(11) NOT NULL DEFAULT 0, + `compass_zone_id` int(11) NOT NULL DEFAULT 0, + `compass_x` float NOT NULL DEFAULT 0, + `compass_y` float NOT NULL DEFAULT 0, + `compass_z` float NOT NULL DEFAULT 0, + `return_zone_id` int(11) NOT NULL DEFAULT 0, + `return_x` float NOT NULL DEFAULT 0, + `return_y` float NOT NULL DEFAULT 0, + `return_z` float NOT NULL DEFAULT 0, + `return_h` float NOT NULL DEFAULT 0, + `override_zone_in` tinyint(4) NOT NULL DEFAULT 0, + `zone_in_x` float NOT NULL DEFAULT 0, + `zone_in_y` float NOT NULL DEFAULT 0, + `zone_in_z` float NOT NULL DEFAULT 0, + `zone_in_h` float NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +ALTER TABLE `tasks` + ADD COLUMN `dz_template_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `request_timer_seconds`; + +)", + }, + ManifestEntry{ + .version = 9196, + .description = "2022_07_30_merchantlist_temp.sql", + .check = "SHOW COLUMNS FROM `merchantlist_temp` LIKE 'zone_id'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `merchantlist_temp` ADD COLUMN `zone_id` INT(11) NOT NULL DEFAULT '0' AFTER `slot`; +ALTER TABLE `merchantlist_temp` ADD COLUMN `instance_id` INT(11) NOT NULL DEFAULT '0' AFTER `zone_id`; +ALTER TABLE `merchantlist_temp` DROP PRIMARY KEY, ADD PRIMARY KEY (`npcid`, `slot`, `zone_id`, `instance_id`); + +)", + }, + ManifestEntry{ + .version = 9197, + .description = "2022_08_01_drop_expansion_account.sql", + .check = "SHOW COLUMNS FROM `account` LIKE 'expansion'", + .condition = "not_empty", + .match = "", + .sql = R"( +ALTER TABLE `account` DROP `expansion`; + +)", + }, + ManifestEntry{ + .version = 9198, + .description = "2022_08_14_exp_modifier_instance_versions.sql", + .check = "SHOW COLUMNS FROM `character_exp_modifiers` LIKE 'instance_version'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE character_exp_modifiers +ADD COLUMN instance_version int NOT NULL DEFAULT -1 AFTER zone_id, +DROP PRIMARY KEY, +ADD PRIMARY KEY (character_id, zone_id, instance_version) USING BTREE; +)", + }, + ManifestEntry{ + .version = 9199, + .description = "2022_08_08_task_req_activity_id.sql", + .check = "SHOW COLUMNS FROM `task_activities` LIKE 'req_activity_id'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `task_activities` + ADD COLUMN `req_activity_id` INT SIGNED NOT NULL DEFAULT '-1' AFTER `activityid`; + +)", + }, + ManifestEntry{ + .version = 9200, + .description = "2022_08_19_zone_expansion_consistency.sql", + .check = "SELECT * FROM db_version WHERE version >= 9200", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `zone` + ADD COLUMN `bypass_expansion_check` tinyint(3) NOT NULL DEFAULT 0 AFTER `expansion`; + +UPDATE `zone` SET `bypass_expansion_check` = 1 WHERE `short_name` +IN ( + 'befallenb', + 'commonlands', + 'freeportacademy', + 'freeportarena', + 'freeportcityhall', + 'freeporteast', + 'freeporthall', + 'freeportmilitia', + 'freeportsewers', + 'freeportwest', + 'guildhall', + 'guildlobby', + 'highpasshold', + 'highpasskeep', + 'innothuleb', + 'kithforest', + 'mistythicket', + 'moors', + 'nektulosa', + 'northro', + 'oceanoftears', + 'southro', + 'steamfontmts', + 'toxxulia' +); + +)", + }, + ManifestEntry{ + .version = 9201, + .description = "2022_08_22_npc_types_heroic_strikethrough.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'heroic_strikethrough'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` +ADD COLUMN `heroic_strikethrough` INT NOT NULL DEFAULT 0 AFTER `exp_mod`; +)", + }, + ManifestEntry{ + .version = 9202, + .description = "2022_08_24_task_activities_step.sql", + .check = "SHOW COLUMNS FROM `task_activities` LIKE 'step'", + .condition = "contains", + .match = "unsigned", + .sql = R"( +ALTER TABLE `task_activities` MODIFY `step` INT(11) NOT NULL DEFAULT '0'; + +)", + }, + ManifestEntry{ + .version = 9203, + .description = "2022_08_07_replace_task_goals.sql", + .check = "SHOW COLUMNS FROM `task_activities` LIKE 'item_id'", + .condition = "empty", + .match = "", + .sql = R"( +-- backup original since this is a complex migration +CREATE TABLE `task_activities_backup_9203` LIKE `task_activities`; +INSERT INTO `task_activities_backup_9203` SELECT * FROM `task_activities`; + +ALTER TABLE `task_activities` + CHANGE COLUMN `description_override` `description_override` VARCHAR(128) NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci' AFTER `goalcount`, + ADD COLUMN `npc_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `description_override`, + ADD COLUMN `npc_goal_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `npc_id`, + ADD COLUMN `npc_match_list` TEXT NULL DEFAULT NULL AFTER `npc_goal_id`, + ADD COLUMN `item_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `npc_match_list`, + ADD COLUMN `item_goal_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `item_id`, + ADD COLUMN `item_id_list` TEXT NULL DEFAULT NULL AFTER `item_goal_id`, + CHANGE COLUMN `item_list` `item_list` VARCHAR(128) NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci' AFTER `item_id_list`, + ADD COLUMN `dz_switch_id` INT(11) NOT NULL DEFAULT '0' AFTER `delivertonpc`, + ADD COLUMN `min_x` FLOAT NOT NULL DEFAULT 0 AFTER `dz_switch_id`, + ADD COLUMN `min_y` FLOAT NOT NULL DEFAULT 0 AFTER `min_x`, + ADD COLUMN `min_z` FLOAT NOT NULL DEFAULT 0 AFTER `min_y`, + ADD COLUMN `max_x` FLOAT NOT NULL DEFAULT 0 AFTER `min_z`, + ADD COLUMN `max_y` FLOAT NOT NULL DEFAULT 0 AFTER `max_x`, + ADD COLUMN `max_z` FLOAT NOT NULL DEFAULT 0 AFTER `max_y`, + CHANGE COLUMN `skill_list` `skill_list` VARCHAR(64) NOT NULL DEFAULT '-1' COLLATE 'latin1_swedish_ci' AFTER `max_z`, + CHANGE COLUMN `spell_list` `spell_list` VARCHAR(64) NOT NULL DEFAULT '0' COLLATE 'latin1_swedish_ci' AFTER `skill_list`; + +-- move Explore (5) goalid proximities to the new location fields +-- does not migrate where zone was different and ignores lists (unsupported) +UPDATE `task_activities` +INNER JOIN `proximities` + ON `task_activities`.`goalid` = `proximities`.`exploreid` + AND CAST(`task_activities`.`zones` AS INT) = `proximities`.`zoneid` +SET + `task_activities`.`goalid` = 0, + `task_activities`.`min_x` = `proximities`.`minx`, + `task_activities`.`min_y` = `proximities`.`miny`, + `task_activities`.`min_z` = `proximities`.`minz`, + `task_activities`.`max_x` = `proximities`.`maxx`, + `task_activities`.`max_y` = `proximities`.`maxy`, + `task_activities`.`max_z` = `proximities`.`maxz` +WHERE + `task_activities`.`goalmethod` = 0 + AND `task_activities`.`activitytype` = 5; + +-- dz_switch_id for Touch (11) +UPDATE `task_activities` +SET `task_activities`.`dz_switch_id` = `task_activities`.`goalid` +WHERE `task_activities`.`goalmethod` = 0 + AND `task_activities`.`activitytype` = 11; + +-- single item ids for Deliver (1), Loot (3), TradeSkill (6), Fish (7), Forage (8) +UPDATE `task_activities` +SET `task_activities`.`item_id` = `task_activities`.`goalid` +WHERE `task_activities`.`goalmethod` = 0 + AND `task_activities`.`activitytype` IN (1, 3, 6, 7, 8); + +-- item goallist id +UPDATE `task_activities` +SET `task_activities`.`item_goal_id` = `task_activities`.`goalid` +WHERE `task_activities`.`goalmethod` = 1 + AND `task_activities`.`activitytype` IN (1, 3, 6, 7, 8); + +-- item id match list +UPDATE `task_activities` +SET `task_activities`.`item_id_list` = `task_activities`.`goal_match_list` +WHERE `task_activities`.`goalmethod` = 1 + AND `task_activities`.`activitytype` IN (1, 3, 6, 7, 8); + +-- single npc ids for Kill (2), SpeakWith (4) +UPDATE `task_activities` +SET `task_activities`.`npc_id` = `task_activities`.`goalid` +WHERE `task_activities`.`goalmethod` = 0 + AND `task_activities`.`activitytype` IN (2, 4); + +-- npc goallist id +UPDATE `task_activities` +SET `task_activities`.`npc_goal_id` = `task_activities`.`goalid` +WHERE `task_activities`.`goalmethod` = 1 + AND `task_activities`.`activitytype` IN (2, 4); + +-- npc match list +UPDATE `task_activities` +SET `task_activities`.`npc_match_list` = `task_activities`.`goal_match_list` +WHERE `task_activities`.`goalmethod` = 1 + AND `task_activities`.`activitytype` IN (2, 4); + +-- delivertonpc npc_ids for Deliver (1), GiveCash (100) +UPDATE `task_activities` +SET `task_activities`.`npc_id` = `task_activities`.`delivertonpc` +WHERE `task_activities`.`activitytype` IN (1, 100); + +ALTER TABLE `task_activities` + DROP COLUMN `goalid`, + DROP COLUMN `goal_match_list`, + DROP COLUMN `delivertonpc`; + +-- leave proximities table backup in case of regressions +ALTER TABLE `proximities` RENAME `proximities_backup_9203`; + +)", + }, + ManifestEntry{ + .version = 9204, + .description = "2022_09_02_faction_association.sql", + .check = "SHOW TABLES LIKE 'faction_association'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `faction_association` ( + `id` INT(10) NOT NULL, + `id_1` INT(10) NOT NULL DEFAULT 0, + `mod_1` FLOAT NOT NULL DEFAULT 0, + `id_2` INT(10) NOT NULL DEFAULT 0, + `mod_2` FLOAT NOT NULL DEFAULT 0, + `id_3` INT(10) NOT NULL DEFAULT 0, + `mod_3` FLOAT NOT NULL DEFAULT 0, + `id_4` INT(10) NOT NULL DEFAULT 0, + `mod_4` FLOAT NOT NULL DEFAULT 0, + `id_5` INT(10) NOT NULL DEFAULT 0, + `mod_5` FLOAT NOT NULL DEFAULT 0, + `id_6` INT(10) NOT NULL DEFAULT 0, + `mod_6` FLOAT NOT NULL DEFAULT 0, + `id_7` INT(10) NOT NULL DEFAULT 0, + `mod_7` FLOAT NOT NULL DEFAULT 0, + `id_8` INT(10) NOT NULL DEFAULT 0, + `mod_8` FLOAT NOT NULL DEFAULT 0, + `id_9` INT(10) NOT NULL DEFAULT 0, + `mod_9` FLOAT NOT NULL DEFAULT 0, + `id_10` INT(10) NOT NULL DEFAULT 0, + `mod_10` FLOAT NOT NULL DEFAULT 0, + PRIMARY KEY(`id`) +); + +ALTER TABLE `npc_types` ADD `faction_amount` INT(10) NOT NULL DEFAULT '0'; +ALTER TABLE `tasks` ADD `faction_amount` INT(10) NOT NULL DEFAULT '0'; + +)", + }, + ManifestEntry{ + .version = 9208, + .description = "2022_09_25_task_concat_matchlists.sql", + .check = "SHOW COLUMNS FROM `task_activities` LIKE 'npc_id'", + .condition = "not_empty", + .match = "", + .sql = R"( +SET SESSION group_concat_max_len = 1048576; +SET collation_connection = latin1_swedish_ci; + +-- backup original(s) +CREATE TABLE `goallists_backup_9_25_2022` LIKE `goallists`; +INSERT INTO `goallists_backup_9_25_2022` SELECT * FROM `goallists`; +CREATE TABLE `tasks_backup_9_25_2022` LIKE `tasks`; +INSERT INTO `tasks_backup_9_25_2022` SELECT * FROM `tasks`; + +-- npc id +UPDATE `task_activities` +SET `task_activities`.`npc_match_list` = CONCAT_WS('|', `npc_match_list`, `npc_id`) +WHERE npc_id != 0; + +-- npc_goal_id goallists +UPDATE `task_activities` +INNER JOIN +( + SELECT `goallists`.`listid`, GROUP_CONCAT(`goallists`.`entry` ORDER BY `goallists`.`entry` SEPARATOR '|') AS `goallist_ids` + FROM `goallists` + GROUP BY `goallists`.`listid` +) AS `goallist_group` + ON `task_activities`.`npc_goal_id` = `goallist_group`.`listid` +SET `task_activities`.`npc_match_list` = CONCAT_WS('|', `npc_match_list`, `goallist_ids`) +WHERE npc_goal_id != 0; + +-- item id +UPDATE `task_activities` +SET `task_activities`.`item_id_list` = CONCAT_WS('|', `item_id_list`, `item_id`) +WHERE item_id != 0; + +-- item_goal_id goallists +UPDATE `task_activities` +INNER JOIN +( + SELECT `goallists`.`listid`, GROUP_CONCAT(`goallists`.`entry` ORDER BY `goallists`.`entry` SEPARATOR '|') AS `goallist_ids` + FROM `goallists` + GROUP BY `goallists`.`listid` +) AS `goallist_group` + ON `task_activities`.`item_goal_id` = `goallist_group`.`listid` +SET `task_activities`.`item_id_list` = CONCAT_WS('|', `item_id_list`, `goallist_ids`) +WHERE item_goal_id != 0; + +ALTER TABLE `task_activities` + DROP COLUMN `npc_id`, + DROP COLUMN `npc_goal_id`, + DROP COLUMN `item_id`, + DROP COLUMN `item_goal_id`; + + +-- Reward cleanup and task table cleanup + +ALTER TABLE `tasks` + CHANGE COLUMN `reward` `reward_text` varchar(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT '' AFTER `description`, + CHANGE COLUMN `rewardid` `reward_id_list` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL AFTER `reward_text`, + CHANGE COLUMN `cashreward` `cash_reward` int(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `reward_id_list`, + CHANGE COLUMN `rewardmethod` `reward_method` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 AFTER `xpreward`, + CHANGE COLUMN `minlevel` `min_level` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 AFTER `reward_point_type`, + CHANGE COLUMN `maxlevel` `max_level` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 AFTER `min_level`; + +ALTER Table `tasks` CHANGE COLUMN `xpreward` `exp_reward` int(10) NOT NULL DEFAULT 0 AFTER `cash_reward`; + +UPDATE tasks SET reward_id_list = + ( + SELECT GROUP_CONCAT(`goallists`.`entry` ORDER BY `goallists`.`entry` SEPARATOR '|') AS `goallist_ids` FROM `goallists` WHERE listid = reward_id_list) +WHERE +reward_method = 1; + +-- deprecated table +DROP table goallists; + +)", + }, + ManifestEntry{ + .version = 9209, + .description = "2022_09_28_discord_webhooks.sql", + .check = "SHOW COLUMNS FROM `logsys_categories` LIKE 'log_to_discord'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE logsys_categories + ADD log_to_discord smallint(11) default 0 AFTER log_to_gmsay; +ALTER TABLE logsys_categories + ADD discord_webhook_id int(11) default 0 AFTER log_to_discord; + +)", + }, + ManifestEntry{ + .version = 9213, + .description = "2022_12_24_npc_keeps_sold_items.sql", + .check = "SHOW COLUMNS FROM `npc_types` LIKE 'keeps_sold_items'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_types` +ADD COLUMN `keeps_sold_items` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 AFTER `faction_amount`; +)", + }, + ManifestEntry{ + .version = 9214, + .description = "2022_12_24_character_exp_toggle.sql", + .check = "SHOW COLUMNS FROM `character_data` LIKE 'exp_enabled'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `character_data` +ADD COLUMN `exp_enabled` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 AFTER `exp`; + +)", + }, + ManifestEntry{ + .version = 9215, + .description = "2023_01_08_zone_max_level.sql", + .check = "SHOW COLUMNS FROM `zone` LIKE 'max_level'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `zone` +ADD COLUMN `max_level` tinyint(3) UNSIGNED NOT NULL DEFAULT 255 AFTER `min_level`; +)", + }, + ManifestEntry{ + .version = 9216, + .description = "2023_01_15_merc_data.sql", + .check = "SHOW TABLES LIKE 'mercs'", + .condition = "empty", + .match = "", + .sql = R"( +SET NAMES utf8; +SET +FOREIGN_KEY_CHECKS = 0; + +DROP TABLE IF EXISTS `merc_armorinfo`; +CREATE TABLE `merc_armorinfo` +( + `id` int(11) NOT NULL AUTO_INCREMENT, + `merc_npc_type_id` int(11) UNSIGNED NOT NULL, + `minlevel` tinyint(2) UNSIGNED NOT NULL DEFAULT 1, + `maxlevel` tinyint(2) UNSIGNED NOT NULL DEFAULT 255, + `texture` tinyint(2) UNSIGNED NOT NULL DEFAULT 0, + `helmtexture` tinyint(2) UNSIGNED NOT NULL DEFAULT 0, + `armortint_id` int(10) UNSIGNED NOT NULL DEFAULT 0, + `armortint_red` tinyint(3) UNSIGNED NOT NULL DEFAULT 0, + `armortint_green` tinyint(3) UNSIGNED NOT NULL DEFAULT 0, + `armortint_blue` tinyint(3) UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 41 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_buffs`; +CREATE TABLE `merc_buffs` +( + `MercBuffId` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `MercId` int(10) UNSIGNED NOT NULL DEFAULT 0, + `SpellId` int(10) UNSIGNED NOT NULL DEFAULT 0, + `CasterLevel` int(10) UNSIGNED NOT NULL DEFAULT 0, + `DurationFormula` int(10) UNSIGNED NOT NULL DEFAULT 0, + `TicsRemaining` int(11) NOT NULL DEFAULT 0, + `PoisonCounters` int(11) UNSIGNED NOT NULL DEFAULT 0, + `DiseaseCounters` int(11) UNSIGNED NOT NULL DEFAULT 0, + `CurseCounters` int(11) UNSIGNED NOT NULL DEFAULT 0, + `CorruptionCounters` int(11) UNSIGNED NOT NULL DEFAULT 0, + `HitCount` int(10) UNSIGNED NOT NULL DEFAULT 0, + `MeleeRune` int(10) UNSIGNED NOT NULL DEFAULT 0, + `MagicRune` int(10) UNSIGNED NOT NULL DEFAULT 0, + `dot_rune` int(10) NOT NULL DEFAULT 0, + `caston_x` int(10) NOT NULL DEFAULT 0, + `Persistent` tinyint(1) NOT NULL DEFAULT 0, + `caston_y` int(10) NOT NULL DEFAULT 0, + `caston_z` int(10) NOT NULL DEFAULT 0, + `ExtraDIChance` int(10) NOT NULL DEFAULT 0, + PRIMARY KEY (`MercBuffId`) USING BTREE, + INDEX `FK_mercbuff_1`(`MercId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_inventory`; +CREATE TABLE `merc_inventory` +( + `merc_inventory_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `merc_subtype_id` int(10) UNSIGNED NOT NULL DEFAULT 0, + `item_id` int(11) UNSIGNED NOT NULL DEFAULT 0, + `min_level` int(10) UNSIGNED NOT NULL DEFAULT 0, + `max_level` int(10) UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (`merc_inventory_id`) USING BTREE, + INDEX `FK_merc_inventory_1`(`merc_subtype_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 42 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_merchant_entries`; +CREATE TABLE `merc_merchant_entries` +( + `merc_merchant_entry_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `merc_merchant_template_id` int(10) UNSIGNED NOT NULL, + `merchant_id` int(11) UNSIGNED NOT NULL, + PRIMARY KEY (`merc_merchant_entry_id`) USING BTREE, + INDEX `FK_merc_merchant_entries_1`(`merc_merchant_template_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 57 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_merchant_template_entries`; +CREATE TABLE `merc_merchant_template_entries` +( + `merc_merchant_template_entry_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `merc_merchant_template_id` int(10) UNSIGNED NOT NULL, + `merc_template_id` int(10) UNSIGNED NOT NULL, + PRIMARY KEY (`merc_merchant_template_entry_id`) USING BTREE, + INDEX `FK_merc_merchant_template_entries_1`(`merc_merchant_template_id`) USING BTREE, + INDEX `FK_merc_merchant_template_entries_2`(`merc_template_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 554 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_merchant_templates`; +CREATE TABLE `merc_merchant_templates` +( + `merc_merchant_template_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, + `qglobal` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, + PRIMARY KEY (`merc_merchant_template_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 25 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_name_types`; +CREATE TABLE `merc_name_types` +( + `name_type_id` int(10) UNSIGNED NOT NULL, + `class_id` int(10) UNSIGNED NOT NULL, + `prefix` varchar(25) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, + `suffix` varchar(25) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, + PRIMARY KEY (`name_type_id`, `class_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_npc_types`; +CREATE TABLE `merc_npc_types` +( + `merc_npc_type_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `proficiency_id` tinyint(3) UNSIGNED NOT NULL, + `tier_id` tinyint(3) UNSIGNED NOT NULL, + `class_id` int(10) UNSIGNED NOT NULL, + `name` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, + PRIMARY KEY (`merc_npc_type_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 41 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_spell_list_entries`; +CREATE TABLE `merc_spell_list_entries` +( + `merc_spell_list_entry_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `merc_spell_list_id` int(10) UNSIGNED NOT NULL, + `spell_id` int(10) UNSIGNED NOT NULL, + `spell_type` int(10) UNSIGNED NOT NULL DEFAULT 0, + `stance_id` tinyint(3) UNSIGNED NOT NULL DEFAULT 0, + `minlevel` tinyint(3) UNSIGNED NOT NULL DEFAULT 1, + `maxlevel` tinyint(3) UNSIGNED NOT NULL DEFAULT 255, + `slot` tinyint(4) NOT NULL DEFAULT -1, + `procChance` tinyint(3) UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (`merc_spell_list_entry_id`) USING BTREE, + INDEX `FK_merc_spell_lists_1`(`merc_spell_list_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 730 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_spell_lists`; +CREATE TABLE `merc_spell_lists` +( + `merc_spell_list_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `class_id` int(10) UNSIGNED NOT NULL, + `proficiency_id` tinyint(3) UNSIGNED NOT NULL, + `name` varchar(50) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, + PRIMARY KEY (`merc_spell_list_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_stance_entries`; +CREATE TABLE `merc_stance_entries` +( + `merc_stance_entry_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `class_id` int(10) UNSIGNED NOT NULL, + `proficiency_id` tinyint(3) UNSIGNED NOT NULL, + `stance_id` tinyint(3) UNSIGNED NOT NULL, + `isdefault` tinyint(1) NOT NULL, + PRIMARY KEY (`merc_stance_entry_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_stats`; +CREATE TABLE `merc_stats` +( + `merc_npc_type_id` int(11) UNSIGNED NOT NULL, + `clientlevel` tinyint(2) UNSIGNED NOT NULL DEFAULT 1, + `level` tinyint(2) UNSIGNED NOT NULL DEFAULT 1, + `hp` int(11) NOT NULL DEFAULT 1, + `mana` int(11) NOT NULL DEFAULT 0, + `AC` smallint(5) NOT NULL DEFAULT 1, + `ATK` mediumint(9) NOT NULL DEFAULT 1, + `STR` mediumint(8) UNSIGNED NOT NULL DEFAULT 75, + `STA` mediumint(8) UNSIGNED NOT NULL DEFAULT 75, + `DEX` mediumint(8) UNSIGNED NOT NULL DEFAULT 75, + `AGI` mediumint(8) UNSIGNED NOT NULL DEFAULT 75, + `_INT` mediumint(8) UNSIGNED NOT NULL DEFAULT 80, + `WIS` mediumint(8) UNSIGNED NOT NULL DEFAULT 80, + `CHA` mediumint(8) UNSIGNED NOT NULL DEFAULT 75, + `MR` smallint(5) NOT NULL DEFAULT 15, + `CR` smallint(5) NOT NULL DEFAULT 15, + `DR` smallint(5) NOT NULL DEFAULT 15, + `FR` smallint(5) NOT NULL DEFAULT 15, + `PR` smallint(5) NOT NULL DEFAULT 15, + `Corrup` smallint(5) NOT NULL DEFAULT 15, + `mindmg` int(10) UNSIGNED NOT NULL DEFAULT 1, + `maxdmg` int(10) UNSIGNED NOT NULL DEFAULT 1, + `attack_count` smallint(6) NOT NULL DEFAULT 0, + `attack_speed` tinyint(3) NOT NULL DEFAULT 0, + `attack_delay` tinyint(3) UNSIGNED NOT NULL DEFAULT 30, + `special_abilities` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL, + `Accuracy` mediumint(9) NOT NULL DEFAULT 0, + `hp_regen_rate` int(11) UNSIGNED NOT NULL DEFAULT 1, + `mana_regen_rate` int(11) UNSIGNED NOT NULL DEFAULT 1, + `runspeed` float NOT NULL DEFAULT 0, + `statscale` int(11) NOT NULL DEFAULT 100, + `spellscale` float NOT NULL DEFAULT 100, + `healscale` float NOT NULL DEFAULT 100, + PRIMARY KEY (`merc_npc_type_id`, `clientlevel`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_subtypes`; +CREATE TABLE `merc_subtypes` +( + `merc_subtype_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `class_id` int(10) UNSIGNED NOT NULL, + `tier_id` tinyint(3) UNSIGNED NOT NULL, + `confidence_id` tinyint(3) UNSIGNED NOT NULL, + PRIMARY KEY (`merc_subtype_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_templates`; +CREATE TABLE `merc_templates` +( + `merc_template_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `merc_type_id` int(10) UNSIGNED NOT NULL, + `merc_subtype_id` int(10) UNSIGNED NOT NULL, + `merc_npc_type_id` int(11) UNSIGNED NOT NULL, + `dbstring` varchar(12) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, + `name_type_id` tinyint(4) NOT NULL DEFAULT 0, + `clientversion` int(10) UNSIGNED NOT NULL, + PRIMARY KEY (`merc_template_id`) USING BTREE, + INDEX `FK_merc_templates_1`(`merc_type_id`) USING BTREE, + INDEX `FK_merc_templates_2`(`merc_subtype_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 554 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_types`; +CREATE TABLE `merc_types` +( + `merc_type_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `race_id` int(10) UNSIGNED NOT NULL, + `proficiency_id` tinyint(3) UNSIGNED NOT NULL, + `dbstring` varchar(12) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, + `clientversion` int(10) UNSIGNED NOT NULL, + PRIMARY KEY (`merc_type_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 49 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `merc_weaponinfo`; +CREATE TABLE `merc_weaponinfo` +( + `id` int(11) NOT NULL AUTO_INCREMENT, + `merc_npc_type_id` int(11) NOT NULL, + `minlevel` tinyint(2) UNSIGNED NOT NULL DEFAULT 0, + `maxlevel` tinyint(2) UNSIGNED NOT NULL DEFAULT 0, + `d_melee_texture1` int(11) NOT NULL DEFAULT 0, + `d_melee_texture2` int(11) NOT NULL DEFAULT 0, + `prim_melee_type` tinyint(4) UNSIGNED NOT NULL DEFAULT 28, + `sec_melee_type` tinyint(4) UNSIGNED NOT NULL DEFAULT 28, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 61 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +DROP TABLE IF EXISTS `mercs`; +CREATE TABLE `mercs` +( + `MercID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `OwnerCharacterID` int(10) UNSIGNED NOT NULL, + `Slot` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `Name` varchar(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, + `TemplateID` int(10) UNSIGNED NOT NULL DEFAULT 0, + `SuspendedTime` int(11) UNSIGNED NOT NULL DEFAULT 0, + `IsSuspended` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `TimerRemaining` int(11) UNSIGNED NOT NULL DEFAULT 0, + `Gender` tinyint(3) UNSIGNED NOT NULL DEFAULT 0, + `MercSize` float NOT NULL DEFAULT 5, + `StanceID` tinyint(3) UNSIGNED NOT NULL DEFAULT 0, + `HP` int(11) UNSIGNED NOT NULL DEFAULT 0, + `Mana` int(11) UNSIGNED NOT NULL DEFAULT 0, + `Endurance` int(11) UNSIGNED NOT NULL DEFAULT 0, + `Face` int(10) UNSIGNED NOT NULL DEFAULT 1, + `LuclinHairStyle` int(10) UNSIGNED NOT NULL DEFAULT 1, + `LuclinHairColor` int(10) UNSIGNED NOT NULL DEFAULT 1, + `LuclinEyeColor` int(10) UNSIGNED NOT NULL DEFAULT 1, + `LuclinEyeColor2` int(10) UNSIGNED NOT NULL DEFAULT 1, + `LuclinBeardColor` int(10) UNSIGNED NOT NULL DEFAULT 1, + `LuclinBeard` int(10) UNSIGNED NOT NULL DEFAULT 0, + `DrakkinHeritage` int(10) UNSIGNED NOT NULL DEFAULT 0, + `DrakkinTattoo` int(10) UNSIGNED NOT NULL DEFAULT 0, + `DrakkinDetails` int(10) UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (`MercID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; + +SET +FOREIGN_KEY_CHECKS = 1; + +)", + }, + ManifestEntry{ + .version = 9217, + .description = "2023_01_15_chatchannel_reserved_names.sql", + .check = "SHOW TABLES LIKE 'chatchannel_reserved_names'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `chatchannel_reserved_names` +( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(64) NOT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +ALTER TABLE `chatchannels` + ADD COLUMN `id` int(11) NOT NULL AUTO_INCREMENT FIRST, +DROP PRIMARY KEY, +ADD PRIMARY KEY (`id`) USING BTREE, +ADD UNIQUE INDEX(`name`) + +)", + }, + ManifestEntry{ + .version = 9218, + .description = "2023_01_24_item_recast.sql", + .check = "show columns from character_item_recast like '%recast_type%'", + .condition = "contains", + .match = "smallint", + .sql = R"( +ALTER TABLE `character_item_recast` + CHANGE COLUMN `recast_type` `recast_type` INT(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `id`; +)", + }, + ManifestEntry{ + .version = 9219, + .description = "2023_01_29_merchant_status_requirements.sql", + .check = "SHOW COLUMNS FROM merchantlist LIKE 'min_status'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `merchantlist` +ADD COLUMN `min_status` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 AFTER `level_required`, +ADD COLUMN `max_status` tinyint(3) UNSIGNED NOT NULL DEFAULT 255 AFTER `min_status`; +)" + }, + ManifestEntry{ + .version = 9220, + .description = "2022_12_19_player_events_tables.sql", + .check = "SHOW TABLES LIKE 'player_event_logs'", + .condition = "empty", + .match = "", + .sql = R"( +CREATE TABLE `player_event_log_settings` +( + `id` bigint(20) NOT NULL, + `event_name` varchar(100) DEFAULT NULL, + `event_enabled` tinyint(1) DEFAULT NULL, + `retention_days` int(11) DEFAULT 0, + `discord_webhook_id` int(11) DEFAULT 0, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `player_event_logs` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `account_id` bigint(20) DEFAULT NULL, + `character_id` bigint(20) DEFAULT NULL, + `zone_id` int(11) DEFAULT NULL, + `instance_id` int(11) DEFAULT NULL, + `x` float DEFAULT NULL, + `y` float DEFAULT NULL, + `z` float DEFAULT NULL, + `heading` float DEFAULT NULL, + `event_type_id` int(11) DEFAULT NULL, + `event_type_name` varchar(255) DEFAULT NULL, + `event_data` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`event_data`)), + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `event_created_at` (`event_type_id`,`created_at`), + KEY `zone_id` (`zone_id`), + KEY `character_id` (`character_id`,`zone_id`) USING BTREE, + KEY `created_at` (`created_at`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; + +DROP TABLE `hackers`; +DROP TABLE `eventlog`; + +)" + }, + ManifestEntry{ + .version = 9221, + .description = "2023_02_24_npc_scaling_zone_id_instance_version.sql", + .check = "SHOW COLUMNS FROM `npc_scale_global_base` LIKE 'zone_id'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_scale_global_base` +ADD COLUMN `zone_id` int(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `level`, +ADD COLUMN `instance_version` int(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `zone_id`, +DROP PRIMARY KEY, +ADD PRIMARY KEY (`type`, `level`, `zone_id`, `instance_version`) USING BTREE; +)" + }, + ManifestEntry{ + .version = 9222, + .description = "2023_02_28_npc_scaling_zone_list_version_list.sql", + .check = "SHOW COLUMNS FROM `npc_scale_global_base` LIKE 'zone_id_list'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_scale_global_base` + CHANGE COLUMN `zone_id` `zone_id_list` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL AFTER `level`, + CHANGE COLUMN `instance_version` `instance_version_list` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL AFTER `zone_id_list`, + DROP PRIMARY KEY, + ADD PRIMARY KEY (`type`, `level`, `zone_id_list`(255), `instance_version_list`(255)) USING BTREE; +)" + }, ManifestEntry{ + .version = 9223, + .description = "2023_03_04_npc_scale_global_base_heroic_strikethrough.sql", + .check = "SHOW COLUMNS FROM `npc_scale_global_base` LIKE 'heroic_strikethrough'", + .condition = "empty", + .match = "", + .sql = R"( +UPDATE `npc_scale_global_base` SET ac = 0 WHERE ac IS NULL; +UPDATE `npc_scale_global_base` SET hp = 0 WHERE hp IS NULL; +UPDATE `npc_scale_global_base` SET accuracy = 0 WHERE accuracy IS NULL; +UPDATE `npc_scale_global_base` SET slow_mitigation = 0 WHERE slow_mitigation IS NULL; +UPDATE `npc_scale_global_base` SET attack = 0 WHERE attack IS NULL; +UPDATE `npc_scale_global_base` SET strength = 0 WHERE strength IS NULL; +UPDATE `npc_scale_global_base` SET stamina = 0 WHERE stamina IS NULL; +UPDATE `npc_scale_global_base` SET dexterity = 0 WHERE dexterity IS NULL; +UPDATE `npc_scale_global_base` SET agility = 0 WHERE agility IS NULL; +UPDATE `npc_scale_global_base` SET intelligence = 0 WHERE intelligence IS NULL; +UPDATE `npc_scale_global_base` SET wisdom = 0 WHERE wisdom IS NULL; +UPDATE `npc_scale_global_base` SET charisma = 0 WHERE charisma IS NULL; +UPDATE `npc_scale_global_base` SET magic_resist = 0 WHERE magic_resist IS NULL; +UPDATE `npc_scale_global_base` SET cold_resist = 0 WHERE cold_resist IS NULL; +UPDATE `npc_scale_global_base` SET fire_resist = 0 WHERE fire_resist IS NULL; +UPDATE `npc_scale_global_base` SET poison_resist = 0 WHERE poison_resist IS NULL; +UPDATE `npc_scale_global_base` SET disease_resist = 0 WHERE disease_resist IS NULL; +UPDATE `npc_scale_global_base` SET corruption_resist = 0 WHERE corruption_resist IS NULL; +UPDATE `npc_scale_global_base` SET physical_resist = 0 WHERE physical_resist IS NULL; +UPDATE `npc_scale_global_base` SET min_dmg = 0 WHERE min_dmg IS NULL; +UPDATE `npc_scale_global_base` SET max_dmg = 0 WHERE max_dmg IS NULL; +UPDATE `npc_scale_global_base` SET hp_regen_rate = 0 WHERE hp_regen_rate IS NULL; +UPDATE `npc_scale_global_base` SET attack_delay = 0 WHERE attack_delay IS NULL; +UPDATE `npc_scale_global_base` SET physical_resist = 0 WHERE physical_resist IS NULL; +UPDATE `npc_scale_global_base` SET spell_scale = 100 WHERE spell_scale IS NULL; +UPDATE `npc_scale_global_base` SET heal_scale = 100 WHERE heal_scale IS NULL; +UPDATE `npc_scale_global_base` SET special_abilities = '' WHERE special_abilities IS NULL; +ALTER TABLE `npc_scale_global_base` + MODIFY COLUMN `ac` int(11) NOT NULL DEFAULT 0 AFTER `instance_version_list`, + MODIFY COLUMN `hp` int(11) NOT NULL DEFAULT 0 AFTER `ac`, + MODIFY COLUMN `accuracy` int(11) NOT NULL DEFAULT 0 AFTER `hp`, + MODIFY COLUMN `slow_mitigation` int(11) NOT NULL DEFAULT 0 AFTER `accuracy`, + MODIFY COLUMN `attack` int(11) NOT NULL DEFAULT 0 AFTER `slow_mitigation`, + MODIFY COLUMN `strength` int(11) NOT NULL DEFAULT 0 AFTER `attack`, + MODIFY COLUMN `stamina` int(11) NOT NULL DEFAULT 0 AFTER `strength`, + MODIFY COLUMN `dexterity` int(11) NOT NULL DEFAULT 0 AFTER `stamina`, + MODIFY COLUMN `agility` int(11) NOT NULL DEFAULT 0 AFTER `dexterity`, + MODIFY COLUMN `intelligence` int(11) NOT NULL DEFAULT 0 AFTER `agility`, + MODIFY COLUMN `wisdom` int(11) NOT NULL DEFAULT 0 AFTER `intelligence`, + MODIFY COLUMN `charisma` int(11) NOT NULL DEFAULT 0 AFTER `wisdom`, + MODIFY COLUMN `magic_resist` int(11) NOT NULL DEFAULT 0 AFTER `charisma`, + MODIFY COLUMN `cold_resist` int(11) NOT NULL DEFAULT 0 AFTER `magic_resist`, + MODIFY COLUMN `fire_resist` int(11) NOT NULL DEFAULT 0 AFTER `cold_resist`, + MODIFY COLUMN `poison_resist` int(11) NOT NULL DEFAULT 0 AFTER `fire_resist`, + MODIFY COLUMN `disease_resist` int(11) NOT NULL DEFAULT 0 AFTER `poison_resist`, + MODIFY COLUMN `corruption_resist` int(11) NOT NULL DEFAULT 0 AFTER `disease_resist`, + MODIFY COLUMN `physical_resist` int(11) NOT NULL DEFAULT 0 AFTER `corruption_resist`, + MODIFY COLUMN `min_dmg` int(11) NOT NULL DEFAULT 0 AFTER `physical_resist`, + MODIFY COLUMN `max_dmg` int(11) NOT NULL DEFAULT 0 AFTER `min_dmg`, + MODIFY COLUMN `hp_regen_rate` int(11) NOT NULL DEFAULT 0 AFTER `max_dmg`, + MODIFY COLUMN `attack_delay` int(11) NOT NULL DEFAULT 0 AFTER `hp_regen_rate`, + MODIFY COLUMN `spell_scale` int(11) NOT NULL DEFAULT 100 AFTER `attack_delay`, + MODIFY COLUMN `heal_scale` int(11) NOT NULL DEFAULT 100 AFTER `spell_scale`, + MODIFY COLUMN special_abilities text CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL AFTER heal_scale, + ADD COLUMN `heroic_strikethrough` int(11) NOT NULL DEFAULT 0 AFTER `heal_scale`; + +)" + }, + ManifestEntry{ + .version = 9224, + .description = "2023_03_08_npc_scale_global_base_avoidance.sql", + .check = "SHOW COLUMNS FROM `npc_scale_global_base` LIKE 'hp_regen_per_second'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_scale_global_base` +MODIFY COLUMN `hp` bigint(20) NOT NULL DEFAULT 0 AFTER `ac`, +MODIFY COLUMN `hp_regen_rate` bigint(20) NOT NULL DEFAULT 0 AFTER `max_dmg`, +ADD COLUMN `hp_regen_per_second` bigint(20) NOT NULL DEFAULT 0 AFTER `hp_regen_rate`, +ADD COLUMN `avoidance` int(11) unsigned NOT NULL DEFAULT 0 AFTER `heal_scale`; + +)" + }, + ManifestEntry{ + .version = 9225, + .description = "2023_01_21_bots_raid_members.sql", + .check = "SHOW COLUMNS FROM `raid_members` LIKE 'bot_id'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `npc_scale_global_base` +MODIFY COLUMN `hp` bigint(20) NOT NULL DEFAULT 0 AFTER `ac`, +MODIFY COLUMN `hp_regen_rate` bigint(20) NOT NULL DEFAULT 0 AFTER `max_dmg`, +ADD COLUMN `hp_regen_per_second` bigint(20) NOT NULL DEFAULT 0 AFTER `hp_regen_rate`, +ADD COLUMN `avoidance` int(11) unsigned NOT NULL DEFAULT 0 AFTER `heal_scale`; + +)" + }, + ManifestEntry{ + .version = 9226, + .description = "2023_03_17_corpse_fields.sql", + .check = "SHOW COLUMNS FROM `character_corpse_items` LIKE 'custom_data'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `character_corpse_items` + ADD COLUMN `custom_data` TEXT NULL AFTER `attuned`, + ADD COLUMN `ornamenticon` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `custom_data`, + ADD COLUMN `ornamentidfile` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `ornamenticon`, + ADD COLUMN `ornament_hero_model` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `ornamentidfile`; + +)" + }, + ManifestEntry{ + .version = 9227, + .description = "2023_03_24_npc_scale_global_base_verify.sql", + .check = "SHOW COLUMNS FROM `npc_scale_global_base` LIKE 'heroic_strikethrough'", + .condition = "not_empty", + .match = "", + .sql = R"( +UPDATE `npc_scale_global_base` SET ac = 0 WHERE ac IS NULL; +UPDATE `npc_scale_global_base` SET hp = 0 WHERE hp IS NULL; +UPDATE `npc_scale_global_base` SET accuracy = 0 WHERE accuracy IS NULL; +UPDATE `npc_scale_global_base` SET slow_mitigation = 0 WHERE slow_mitigation IS NULL; +UPDATE `npc_scale_global_base` SET attack = 0 WHERE attack IS NULL; +UPDATE `npc_scale_global_base` SET strength = 0 WHERE strength IS NULL; +UPDATE `npc_scale_global_base` SET stamina = 0 WHERE stamina IS NULL; +UPDATE `npc_scale_global_base` SET dexterity = 0 WHERE dexterity IS NULL; +UPDATE `npc_scale_global_base` SET agility = 0 WHERE agility IS NULL; +UPDATE `npc_scale_global_base` SET intelligence = 0 WHERE intelligence IS NULL; +UPDATE `npc_scale_global_base` SET wisdom = 0 WHERE wisdom IS NULL; +UPDATE `npc_scale_global_base` SET charisma = 0 WHERE charisma IS NULL; +UPDATE `npc_scale_global_base` SET magic_resist = 0 WHERE magic_resist IS NULL; +UPDATE `npc_scale_global_base` SET cold_resist = 0 WHERE cold_resist IS NULL; +UPDATE `npc_scale_global_base` SET fire_resist = 0 WHERE fire_resist IS NULL; +UPDATE `npc_scale_global_base` SET poison_resist = 0 WHERE poison_resist IS NULL; +UPDATE `npc_scale_global_base` SET disease_resist = 0 WHERE disease_resist IS NULL; +UPDATE `npc_scale_global_base` SET corruption_resist = 0 WHERE corruption_resist IS NULL; +UPDATE `npc_scale_global_base` SET physical_resist = 0 WHERE physical_resist IS NULL; +UPDATE `npc_scale_global_base` SET min_dmg = 0 WHERE min_dmg IS NULL; +UPDATE `npc_scale_global_base` SET max_dmg = 0 WHERE max_dmg IS NULL; +UPDATE `npc_scale_global_base` SET hp_regen_rate = 0 WHERE hp_regen_rate IS NULL; +UPDATE `npc_scale_global_base` SET attack_delay = 0 WHERE attack_delay IS NULL; +UPDATE `npc_scale_global_base` SET physical_resist = 0 WHERE physical_resist IS NULL; +UPDATE `npc_scale_global_base` SET spell_scale = 100 WHERE spell_scale IS NULL; +UPDATE `npc_scale_global_base` SET heal_scale = 100 WHERE heal_scale IS NULL; +UPDATE `npc_scale_global_base` SET special_abilities = '' WHERE special_abilities IS NULL; +ALTER TABLE `npc_scale_global_base` + MODIFY COLUMN `ac` int(11) NOT NULL DEFAULT 0 AFTER `instance_version_list`, + MODIFY COLUMN `hp` bigint(20) NOT NULL DEFAULT 0 AFTER `ac`, + MODIFY COLUMN `accuracy` int(11) NOT NULL DEFAULT 0 AFTER `hp`, + MODIFY COLUMN `slow_mitigation` int(11) NOT NULL DEFAULT 0 AFTER `accuracy`, + MODIFY COLUMN `attack` int(11) NOT NULL DEFAULT 0 AFTER `slow_mitigation`, + MODIFY COLUMN `strength` int(11) NOT NULL DEFAULT 0 AFTER `attack`, + MODIFY COLUMN `stamina` int(11) NOT NULL DEFAULT 0 AFTER `strength`, + MODIFY COLUMN `dexterity` int(11) NOT NULL DEFAULT 0 AFTER `stamina`, + MODIFY COLUMN `agility` int(11) NOT NULL DEFAULT 0 AFTER `dexterity`, + MODIFY COLUMN `intelligence` int(11) NOT NULL DEFAULT 0 AFTER `agility`, + MODIFY COLUMN `wisdom` int(11) NOT NULL DEFAULT 0 AFTER `intelligence`, + MODIFY COLUMN `charisma` int(11) NOT NULL DEFAULT 0 AFTER `wisdom`, + MODIFY COLUMN `magic_resist` int(11) NOT NULL DEFAULT 0 AFTER `charisma`, + MODIFY COLUMN `cold_resist` int(11) NOT NULL DEFAULT 0 AFTER `magic_resist`, + MODIFY COLUMN `fire_resist` int(11) NOT NULL DEFAULT 0 AFTER `cold_resist`, + MODIFY COLUMN `poison_resist` int(11) NOT NULL DEFAULT 0 AFTER `fire_resist`, + MODIFY COLUMN `disease_resist` int(11) NOT NULL DEFAULT 0 AFTER `poison_resist`, + MODIFY COLUMN `corruption_resist` int(11) NOT NULL DEFAULT 0 AFTER `disease_resist`, + MODIFY COLUMN `physical_resist` int(11) NOT NULL DEFAULT 0 AFTER `corruption_resist`, + MODIFY COLUMN `min_dmg` int(11) NOT NULL DEFAULT 0 AFTER `physical_resist`, + MODIFY COLUMN `max_dmg` int(11) NOT NULL DEFAULT 0 AFTER `min_dmg`, + MODIFY COLUMN `hp_regen_rate` bigint(20) NOT NULL DEFAULT 0 AFTER `max_dmg`, + MODIFY COLUMN `attack_delay` int(11) NOT NULL DEFAULT 0 AFTER `hp_regen_rate`, + MODIFY COLUMN `hp_regen_per_second` bigint(20) NOT NULL DEFAULT 0 AFTER `hp_regen_rate`, + MODIFY COLUMN `spell_scale` int(11) NOT NULL DEFAULT 100 AFTER `attack_delay`, + MODIFY COLUMN `heal_scale` int(11) NOT NULL DEFAULT 100 AFTER `spell_scale`, + MODIFY COLUMN `heroic_strikethrough` int(11) NOT NULL DEFAULT 0 AFTER `avoidance`, + MODIFY COLUMN `avoidance` int(11) unsigned NOT NULL DEFAULT 0 AFTER `heal_scale`, + MODIFY COLUMN special_abilities text CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL AFTER heroic_strikethrough; + +)" + }, + ManifestEntry{ + .version = 9228, + .description = "2023_05_08_character_tribute_primary_key.sql", + .check = "SHOW COLUMNS FROM `character_tribute` LIKE 'character_id'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `character_tribute` +CHANGE COLUMN `id` `character_id` int(11) UNSIGNED NOT NULL DEFAULT 0, +ADD COLUMN `id` int(11) NOT NULL AUTO_INCREMENT FIRST, +ADD PRIMARY KEY (`id`); +)", + }, + +// -- template; copy/paste this when you need to create a new entry +// ManifestEntry{ +// .version = 9228, +// .description = "some_new_migration.sql", +// .check = "SHOW COLUMNS FROM `table_name` LIKE 'column_name'", +// .condition = "empty", +// .match = "", +// .sql = R"( +// +//)" + + // Used for testing +// ManifestEntry{ +// .version = 9229, +// .description = "new_database_check_test", +// .check = "SHOW TABLES LIKE 'new_table'", +// .condition = "empty", +// .match = "", +// .sql = R"( +//CREATE TABLE `new_table` ( +// `id` int NOT NULL AUTO_INCREMENT, +// PRIMARY KEY (`id`) +//); +//CREATE TABLE `new_table1` ( +// `id` int NOT NULL AUTO_INCREMENT, +// PRIMARY KEY (`id`) +//); +//CREATE TABLE `new_table2` ( +// `id` int NOT NULL AUTO_INCREMENT, +// PRIMARY KEY (`id`) +//); +//CREATE TABLE `new_table3` ( +// `id` int NOT NULL AUTO_INCREMENT, +// PRIMARY KEY (`id`) +//); +//)", +// } + +}; + +// see struct definitions for what each field does +// struct ManifestEntry { +// int version{}; // database version of the migration +// std::string description{}; // description of the migration ex: "add_new_table" or "add_index_to_table" +// std::string check{}; // query that checks against the condition +// std::string condition{}; // condition or "match_type" - Possible values [contains|match|missing|empty|not_empty] +// std::string match{}; // match field that is not always used, but works in conjunction with "condition" values [missing|match|contains] +// std::string sql{}; // the SQL DDL that gets ran when the condition is true +// }; diff --git a/common/database/database_update_manifest_bots.cpp b/common/database/database_update_manifest_bots.cpp new file mode 100644 index 000000000..27cc883c1 --- /dev/null +++ b/common/database/database_update_manifest_bots.cpp @@ -0,0 +1,84 @@ +#include "database_update.h" + +std::vector bot_manifest_entries = { + ManifestEntry{ + .version = 9035, + .description = "2022_12_04_bot_archery.sql", + .check = "SHOW COLUMNS FROM `bot_data` LIKE 'archery_setting'", + .condition = "empty", + .match = "", + .sql = R"( +ALTER TABLE `bot_data` +ADD COLUMN `archery_setting` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0' AFTER `enforce_spell_settings`; +)", + }, + ManifestEntry{ + .version = 9036, + .description = "2023_01_19_drop_bot_views.sql", + .check = "SHOW TABLES LIKE 'vw_groups'", + .condition = "not_empty", + .match = "", + .sql = R"( +DROP VIEW vw_bot_groups; +DROP VIEW vw_bot_character_mobs; +DROP VIEW vw_groups; +DROP VIEW vw_guild_members; +DROP TABLE bot_guild_members; + +)", + }, + ManifestEntry{ + .version = 9037, + .description = "2023_01_22_add_name_index.sql", + .check = "show index from bot_data WHERE key_name = 'name`", + .condition = "", + .match = "empty", + .sql = R"( +create index `name` on bot_data(`name`); +)", + }, + ManifestEntry{ + .version = 9038, + .description = "2023_02_16_add_caster_range.sql", + .check = "SHOW COLUMNS FROM `bot_data` LIKE 'caster_range'", + .condition = "", + .match = "empty", + .sql = R"( +ALTER TABLE `bot_data` +ADD COLUMN `caster_range` INT(11) UNSIGNED NOT NULL DEFAULT '300' AFTER `archery_setting`; +)", + }, + ManifestEntry{ + .version = 9039, + .description = "2023_03_31_remove_bot_groups.sql", + .check = "SHOW TABLES LIKE 'bot_groups'", + .condition = "", + .match = "not_empty", + .sql = R"( +SET FOREIGN_KEY_CHECKS = 0; +DROP TABLE IF EXISTS `bot_groups`; +DROP TABLE IF EXISTS `bot_group_members`; +SET FOREIGN_KEY_CHECKS = 1; +)", + }, +// -- template; copy/paste this when you need to create a new entry +// ManifestEntry{ +// .version = 9228, +// .description = "some_new_migration.sql", +// .check = "SHOW COLUMNS FROM `table_name` LIKE 'column_name'", +// .condition = "empty", +// .match = "", +// .sql = R"( +// +//)" +}; + +// see struct definitions for what each field does +// struct ManifestEntry { +// int version{}; // database version of the migration +// std::string description{}; // description of the migration ex: "add_new_table" or "add_index_to_table" +// std::string check{}; // query that checks against the condition +// std::string condition{}; // condition or "match_type" - Possible values [contains|match|missing|empty|not_empty] +// std::string match{}; // match field that is not always used, but works in conjunction with "condition" values [missing|match|contains] +// std::string sql{}; // the SQL DDL that gets ran when the condition is true +// }; diff --git a/common/database_conversions.cpp b/common/database_conversions.cpp index 69c432f99..80f195636 100644 --- a/common/database_conversions.cpp +++ b/common/database_conversions.cpp @@ -1,32 +1,10 @@ -/* 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 -*/ - #include "../common/global_define.h" #include "../common/rulesys.h" #include "../common/strings.h" -#include "../common/timer.h" #include "database.h" -#include "extprofile.h" -#include "path_manager.h" +#include "database/database_update.h" -#include -#include // Disgrace: for windows compile #ifdef _WINDOWS @@ -35,447 +13,19 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #define strncasecmp _strnicmp #define strcasecmp _stricmp #else + #include "unix.h" #include #include + #endif #pragma pack(1) -// all const/macro reference values should really be converted to a magic number for this -// process to ensure that the struct sizes and offsets match up to the corresponding blob - -/* Conversion Structs */ - -namespace Convert { - struct BindStruct { - /*000*/ uint32 zone_id; - /*004*/ float x; - /*008*/ float y; - /*012*/ float z; - /*016*/ float heading; - }; - struct Color_Struct - { - union - { - struct - { - uint8 blue; - uint8 green; - uint8 red; - uint8 use_tint; // if there's a tint this is FF - } rgb; - uint32 color; - }; - }; - struct AA_Array - { - uint32 AA; - uint32 value; - }; - struct SpellBuff_Struct - { - /*000*/ uint8 slotid; //badly named... seems to be 2 for a real buff, 0 otherwise - /*001*/ uint8 level; - /*002*/ uint8 bard_modifier; - /*003*/ uint8 effect; //not real - /*004*/ uint32 spellid; - /*008*/ uint32 duration; - /*012*/ uint32 counters; - /*016*/ uint32 player_id; //'global' ID of the caster, for wearoff messages - /*020*/ - }; - struct Tribute_Struct { - uint32 tribute; - uint32 tier; - }; - struct Disciplines_Struct { - uint32 values[MAX_PP_DISCIPLINES]; - }; - struct GroupLeadershipAA_Struct { - union { - struct { - uint32 groupAAMarkNPC; - uint32 groupAANPCHealth; - uint32 groupAADelegateMainAssist; - uint32 groupAADelegateMarkNPC; - uint32 groupAA4; - uint32 groupAA5; - uint32 groupAAInspectBuffs; - uint32 groupAA7; - uint32 groupAASpellAwareness; - uint32 groupAAOffenseEnhancement; - uint32 groupAAManaEnhancement; - uint32 groupAAHealthEnhancement; - uint32 groupAAHealthRegeneration; - uint32 groupAAFindPathToPC; - uint32 groupAAHealthOfTargetsTarget; - uint32 groupAA15; - }; - uint32 ranks[MAX_GROUP_LEADERSHIP_AA_ARRAY]; - }; - }; - - struct RaidLeadershipAA_Struct { - union { - struct { - uint32 raidAAMarkNPC; - uint32 raidAANPCHealth; - uint32 raidAADelegateMainAssist; - uint32 raidAADelegateMarkNPC; - uint32 raidAA4; - uint32 raidAA5; - uint32 raidAA6; - uint32 raidAASpellAwareness; - uint32 raidAAOffenseEnhancement; - uint32 raidAAManaEnhancement; - uint32 raidAAHealthEnhancement; - uint32 raidAAHealthRegeneration; - uint32 raidAAFindPathToPC; - uint32 raidAAHealthOfTargetsTarget; - uint32 raidAA14; - uint32 raidAA15; - }; - uint32 ranks[MAX_RAID_LEADERSHIP_AA_ARRAY]; - }; - }; - - struct LeadershipAA_Struct { - union { - struct { - Convert::GroupLeadershipAA_Struct group; - Convert::RaidLeadershipAA_Struct raid; - }; - uint32 ranks[MAX_LEADERSHIP_AA_ARRAY]; - }; - }; - typedef struct - { - /*00*/ char Name[64]; - /*64*/ uint32 Level; - /*68*/ uint32 Race; - /*72*/ uint32 Class; - /*76*/ uint32 Zone; - /*80*/ uint32 Time; - /*84*/ uint32 Points; - /*88*/ - } PVPStatsEntry_Struct; - - static const size_t BANDOLIERS_SIZE = 4; - static const size_t BANDOLIER_ITEM_COUNT = 4; - struct BandolierItem_Struct { - uint32 ID; - uint32 Icon; - char Name[64]; - }; - struct Bandolier_Struct { - char Name[32]; - Convert::BandolierItem_Struct Items[Convert::BANDOLIER_ITEM_COUNT]; - }; - - static const size_t POTION_BELT_ITEM_COUNT = 4; - struct PotionBeltItem_Struct { - uint32 ID; - uint32 Icon; - char Name[64]; - }; - struct PotionBelt_Struct { - Convert::PotionBeltItem_Struct Items[Convert::POTION_BELT_ITEM_COUNT]; - }; - - struct SuspendedMinion_Struct - { - /*000*/ uint16 SpellID; - /*002*/ uint32 HP; - /*006*/ uint32 Mana; - /*010*/ Convert::SpellBuff_Struct Buffs[BUFF_COUNT]; - /*510*/ uint32 Items[EQ::textures::materialCount]; - /*546*/ char Name[64]; - /*610*/ - }; - - struct PlayerProfile_Struct { - /*0000*/ uint32 checksum; // Checksum from CRC32::SetEQChecksum - /*0004*/ char name[64]; // Name of player sizes not right - /*0068*/ char last_name[32]; // Last name of player sizes not right - /*0100*/ uint32 gender; // Player Gender - 0 Male, 1 Female - /*0104*/ uint32 race; // Player race - /*0108*/ uint32 class_; // Player class - /*0112*/ uint32 unknown0112; // - /*0116*/ uint32 level; // Level of player (might be one byte) - /*0120*/ Convert::BindStruct binds[5]; // Bind points (primary is first, home city is fifth) - /*0220*/ uint32 deity; // deity - /*0224*/ uint32 guild_id; - /*0228*/ uint32 birthday; // characters bday - /*0232*/ uint32 lastlogin; // last login or zone time - /*0236*/ uint32 timePlayedMin; // in minutes - /*0240*/ uint8 pvp; - /*0241*/ uint8 level2; //no idea why this is here, but thats how it is on live - /*0242*/ uint8 anon; // 2=roleplay, 1=anon, 0=not anon - /*0243*/ uint8 gm; - /*0244*/ uint8 guildrank; - /*0245*/ uint8 guildbanker; - /*0246*/ uint8 unknown0246[6]; // - /*0252*/ uint32 intoxication; - /*0256*/ uint32 spellSlotRefresh[9]; //in ms - /*0292*/ uint32 abilitySlotRefresh; - /*0296*/ uint8 haircolor; // Player hair color - /*0297*/ uint8 beardcolor; // Player beard color - /*0298*/ uint8 eyecolor1; // Player left eye color - /*0299*/ uint8 eyecolor2; // Player right eye color - /*0300*/ uint8 hairstyle; // Player hair style - /*0301*/ uint8 beard; // Beard type - /*0302*/ uint8 ability_time_seconds; //The following four spots are unknown right now..... - /*0303*/ uint8 ability_number; //ability used - /*0304*/ uint8 ability_time_minutes; - /*0305*/ uint8 ability_time_hours; //place holder - /*0306*/ uint8 unknown0306[6]; // @bp Spacer/Flag? - /*0312*/ uint32 item_material[EQ::textures::materialCount]; // Item texture/material of worn/held items - /*0348*/ uint8 unknown0348[44]; - /*0392*/ Convert::Color_Struct item_tint[EQ::textures::materialCount]; - /*0428*/ Convert::AA_Array aa_array[MAX_PP_AA_ARRAY]; - /*2348*/ float unknown2384; //seen ~128, ~47 - /*2352*/ char servername[32]; // length probably not right - /*2384*/ char title[32]; // length might be wrong - /*2416*/ char suffix[32]; // length might be wrong - /*2448*/ uint32 guildid2; // - /*2452*/ uint32 exp; // Current Experience - /*2456*/ uint32 unknown2492; - /*2460*/ uint32 points; // Unspent Practice points - /*2464*/ uint32 mana; // current mana - /*2468*/ uint32 cur_hp; // current hp - /*2472*/ uint32 unknown2508; // 0x05 - /*2476*/ uint32 STR; // Strength - /*2480*/ uint32 STA; // Stamina - /*2484*/ uint32 CHA; // Charisma - /*2488*/ uint32 DEX; // Dexterity - /*2492*/ uint32 INT; // Intelligence - /*2496*/ uint32 AGI; // Agility - /*2500*/ uint32 WIS; // Wisdom - /*2504*/ uint8 face; // Player face - /*2505*/ uint8 unknown2541[47]; // ? - /*2552*/ uint8 languages[MAX_PP_LANGUAGE]; - /*2580*/ uint8 unknown2616[4]; - /*2584*/ uint32 spell_book[480]; - /*4504*/ uint8 unknown4540[128]; // Was [428] all 0xff - /*4632*/ uint32 mem_spells[9]; - /*4668*/ uint8 unknown4704[32]; // - /*4700*/ float y; // Player y position - /*4704*/ float x; // Player x position - /*4708*/ float z; // Player z position - /*4712*/ float heading; // Direction player is facing - /*4716*/ uint8 unknown4752[4]; // - /*4720*/ int32 platinum; // Platinum Pieces on player - /*4724*/ int32 gold; // Gold Pieces on player - /*4728*/ int32 silver; // Silver Pieces on player - /*4732*/ int32 copper; // Copper Pieces on player - /*4736*/ int32 platinum_bank; // Platinum Pieces in Bank - /*4740*/ int32 gold_bank; // Gold Pieces in Bank - /*4744*/ int32 silver_bank; // Silver Pieces in Bank - /*4748*/ int32 copper_bank; // Copper Pieces in Bank - /*4752*/ int32 platinum_cursor; // Platinum on cursor - /*4756*/ int32 gold_cursor; // Gold on cursor - /*4760*/ int32 silver_cursor; // Silver on cursor - /*4764*/ int32 copper_cursor; // Copper on cursor - /*4768*/ int32 platinum_shared; // Platinum shared between characters - /*4772*/ uint8 unknown4808[24]; - /*4796*/ uint32 skills[MAX_PP_SKILL]; // [400] List of skills // 100 dword buffer - /*5196*/ uint8 unknown5132[184]; - /*5380*/ uint32 pvp2; // - /*5384*/ uint32 unknown5420; // - /*5388*/ uint32 pvptype; // - /*5392*/ uint32 unknown5428; // - /*5396*/ uint32 ability_down; // Guessing - /*5400*/ uint8 unknown5436[8]; // - /*5408*/ uint32 autosplit; //not used right now - /*5412*/ uint8 unknown5448[8]; - /*5420*/ uint32 zone_change_count; // Number of times user has zoned in their career (guessing) - /*5424*/ uint8 unknown5460[16]; // - /*5440*/ uint32 drakkin_heritage; // - /*5444*/ uint32 drakkin_tattoo; // - /*5448*/ uint32 drakkin_details; // - /*5452*/ uint32 expansions; // expansion setting, bit field of expansions avaliable - /*5456*/ int32 toxicity; //from drinking potions, seems to increase by 3 each time you drink - /*5460*/ char unknown5496[16]; // - /*5476*/ int32 hunger_level; - /*5480*/ int32 thirst_level; - /*5484*/ uint32 ability_up; - /*5488*/ char unknown5524[16]; - /*5504*/ uint16 zone_id; // Current zone of the player - /*5506*/ uint16 zoneInstance; // Instance ID - /*5508*/ Convert::SpellBuff_Struct buffs[BUFF_COUNT]; // Buffs currently on the player - /*6008*/ char groupMembers[6][64];// - /*6392*/ char unknown6428[656]; - /*7048*/ uint32 entityid; - /*7052*/ uint32 leadAAActive; - /*7056*/ uint32 unknown7092; - /*7060*/ int32 ldon_points_guk; //client uses these as signed - /*7064*/ int32 ldon_points_mir; - /*7068*/ int32 ldon_points_mmc; - /*7072*/ int32 ldon_points_ruj; - /*7076*/ int32 ldon_points_tak; - /*7080*/ int32 ldon_points_available; - /*7084*/ int32 ldon_wins_guk; - /*7088*/ int32 ldon_wins_mir; - /*7092*/ int32 ldon_wins_mmc; - /*7096*/ int32 ldon_wins_ruj; - /*7100*/ int32 ldon_wins_tak; - /*7104*/ int32 ldon_losses_guk; - /*7108*/ int32 ldon_losses_mir; - /*7112*/ int32 ldon_losses_mmc; - /*7116*/ int32 ldon_losses_ruj; - /*7120*/ int32 ldon_losses_tak; - /*7124*/ uint8 unknown7160[72]; - /*7196*/ uint32 tribute_time_remaining; //in miliseconds - /*7200*/ uint32 showhelm; - /*7204*/ uint32 career_tribute_points; - /*7208*/ uint32 unknown7244; - /*7212*/ uint32 tribute_points; - /*7216*/ uint32 unknown7252; - /*7220*/ uint32 tribute_active; //1=active - /*7224*/ Convert::Tribute_Struct tributes[5]; - /*7264*/ Convert::Disciplines_Struct disciplines; - /*7664*/ uint32 recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use) - /*7744*/ char unknown7780[160]; - /*7904*/ uint32 endurance; - /*7908*/ uint32 group_leadership_exp; //0-1000 - /*7912*/ uint32 raid_leadership_exp; //0-2000 - /*7916*/ uint32 group_leadership_points; - /*7920*/ uint32 raid_leadership_points; - /*7924*/ Convert::LeadershipAA_Struct leader_abilities; - /*8052*/ uint8 unknown8088[132]; - /*8184*/ uint32 air_remaining; - /*8188*/ uint32 PVPKills; - /*8192*/ uint32 PVPDeaths; - /*8196*/ uint32 PVPCurrentPoints; - /*8200*/ uint32 PVPCareerPoints; - /*8204*/ uint32 PVPBestKillStreak; - /*8208*/ uint32 PVPWorstDeathStreak; - /*8212*/ uint32 PVPCurrentKillStreak; - /*8216*/ Convert::PVPStatsEntry_Struct PVPLastKill; - /*8304*/ Convert::PVPStatsEntry_Struct PVPLastDeath; - /*8392*/ uint32 PVPNumberOfKillsInLast24Hours; - /*8396*/ Convert::PVPStatsEntry_Struct PVPRecentKills[50]; - /*12796*/ uint32 aapoints_spent; - /*12800*/ uint32 expAA; - /*12804*/ uint32 aapoints; //avaliable, unspent - /*12808*/ uint8 unknown12844[36]; - /*12844*/ Convert::Bandolier_Struct bandoliers[Convert::BANDOLIERS_SIZE]; - /*14124*/ uint8 unknown14160[4506]; - /*18630*/ Convert::SuspendedMinion_Struct SuspendedMinion; // No longer in use - /*19240*/ uint32 timeentitledonaccount; - /*19244*/ Convert::PotionBelt_Struct potionbelt; //there should be 3 more of these - /*19532*/ uint8 unknown19568[8]; - /*19540*/ uint32 currentRadCrystals; // Current count of radiant crystals - /*19544*/ uint32 careerRadCrystals; // Total count of radiant crystals ever - /*19548*/ uint32 currentEbonCrystals;// Current count of ebon crystals - /*19552*/ uint32 careerEbonCrystals; // Total count of ebon crystals ever - /*19556*/ uint8 groupAutoconsent; // 0=off, 1=on - /*19557*/ uint8 raidAutoconsent; // 0=off, 1=on - /*19558*/ uint8 guildAutoconsent; // 0=off, 1=on - /*19559*/ uint8 unknown19595[5]; // ***Placeholder (6/29/2005) - /*19564*/ uint32 RestTimer; - /*19568*/ - }; - - - namespace player_lootitem_temp - { - struct ServerLootItem_Struct_temp { - uint32 item_id; - int16 equipSlot; - uint8 charges; - uint16 lootslot; - uint32 aug1; - uint32 aug2; - uint32 aug3; - uint32 aug4; - uint32 aug5; - uint32 aug6; - uint8 attuned; - }; - } - - struct DBPlayerCorpse_Struct_temp { - uint32 crc; - bool locked; - uint32 itemcount; - uint32 exp; - float size; - uint8 level; - uint8 race; - uint8 gender; - uint8 class_; - uint8 deity; - uint8 texture; - uint8 helmtexture; - uint32 copper; - uint32 silver; - uint32 gold; - uint32 plat; - Color_Struct item_tint[9]; - uint8 haircolor; - uint8 beardcolor; - uint8 eyecolor1; - uint8 eyecolor2; - uint8 hairstyle; - uint8 face; - uint8 beard; - uint32 drakkin_heritage; - uint32 drakkin_tattoo; - uint32 drakkin_details; - player_lootitem_temp::ServerLootItem_Struct_temp items[0]; - }; - - namespace classic_db_temp { - struct DBPlayerCorpse_Struct_temp { - uint32 crc; - bool locked; - uint32 itemcount; - uint32 exp; - float size; - uint8 level; - uint8 race; - uint8 gender; - uint8 class_; - uint8 deity; - uint8 texture; - uint8 helmtexture; - uint32 copper; - uint32 silver; - uint32 gold; - uint32 plat; - Color_Struct item_tint[9]; - uint8 haircolor; - uint8 beardcolor; - uint8 eyecolor1; - uint8 eyecolor2; - uint8 hairstyle; - uint8 face; - uint8 beard; - player_lootitem_temp::ServerLootItem_Struct_temp items[0]; - }; - } -} - -#pragma pack() - -static inline void loadbar(unsigned int x, unsigned int n, unsigned int w = 50) { - if ((x != n) && (x % (n / 100 + 1) != 0)) return; - float ratio = x / (float)n; - int c = ratio * w; - std::cout << std::setw(3) << (int)(ratio * 100) << "% ["; - for (int x = 0; x < c; x++) std::cout << "="; - for (int x = c; x < w; x++) std::cout << " "; - std::cout << "]\r" << std::flush; -} - - -bool Database::CheckDatabaseConversions() { - CheckDatabaseConvertPPDeblob(); - CheckDatabaseConvertCorpseDeblob(); +DatabaseUpdate database_update; +bool Database::CheckDatabaseConversions() +{ auto *r = RuleManager::Instance(); r->LoadRules(this, "default", false); if (!RuleB(Bots, Enabled) && DoesTableExist("bot_data")) { @@ -483,1349 +33,7 @@ bool Database::CheckDatabaseConversions() { r->SetRule("Bots:Enabled", "true", this, true, true); } - /* Run EQEmu Server script (Checks for database updates) */ - - const std::string file = fmt::format("{}/eqemu_server.pl", path.GetServerPath()); - system(fmt::format("perl {} ran_from_world", file).c_str()); + database_update.SetDatabase(this)->CheckDbUpdates(); return true; } - -bool Database::CheckDatabaseConvertPPDeblob(){ - unsigned int lengths; - unsigned int lengths_e; - std::string squery; - Convert::PlayerProfile_Struct* pp; - ExtendedProfile_Struct* e_pp; - uint32 pplen = 0; - uint32 i; - uint32 character_id = 0; - int account_id = 0; - int number_of_characters = 0; - int printppdebug = 0; /* Prints Player Profile */ - int runconvert = 0; - - /* Check For Legacy Storage Method */ - std::string rquery = StringFormat("SHOW TABLES LIKE 'character_'"); - auto results = QueryDatabase(rquery); - if (results.RowCount() == 1){ - runconvert = 1; - printf("\n\n::: Legacy Character Data Binary Blob Storage Detected... \n"); - printf("----------------------------------------------------------\n\n"); - printf(" Database currently has character data being stored via \n"); - printf(" the legacy character storage method and will proceed with converting...\n\n"); - printf(" It is recommended that you backup your database \n"); - printf(" before continuing the automatic conversion process...\n\n"); - printf("----------------------------------------------------------\n\n"); - std::cout << "Press ENTER to continue....." << std::endl << std::endl; - std::cin.ignore(1); - } - - // runconvert = 0; - // printppdebug = 1; - - if (runconvert == 1){ - printf("Running character binary blob to database conversion... \n"); - /* Get the number of characters */ - rquery = StringFormat("SELECT COUNT(`id`) FROM `character_`"); - results = QueryDatabase(rquery); - for (auto row = results.begin(); row != results.end(); ++row) { - number_of_characters = Strings::ToInt(row[0]); - printf("Number of Characters in Database: %i \n", number_of_characters); - } - - /* Check for table `character_data` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_data'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_data` doesn't exist... creating..."); - rquery = StringFormat( - "CREATE TABLE `character_data` ( " - "`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, " - "`account_id` int(11) NOT NULL DEFAULT '0', " - "`name` varchar(64) NOT NULL DEFAULT '', " - "`last_name` varchar(64) NOT NULL DEFAULT '', " - "`title` varchar(32) NOT NULL DEFAULT '', " - "`suffix` varchar(32) NOT NULL DEFAULT '', " - "`zone_id` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`zone_instance` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`y` float NOT NULL DEFAULT '0', " - "`x` float NOT NULL DEFAULT '0', " - "`z` float NOT NULL DEFAULT '0', " - "`heading` float NOT NULL DEFAULT '0', " - "`gender` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`race` smallint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`class` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`level` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`deity` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`birthday` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`last_login` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`time_played` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`level2` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`anon` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`gm` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`face` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`hair_color` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`hair_style` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`beard` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`beard_color` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`eye_color_1` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`eye_color_2` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`drakkin_heritage` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`drakkin_tattoo` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`drakkin_details` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`ability_time_seconds` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`ability_number` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`ability_time_minutes` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`ability_time_hours` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`exp` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`aa_points_spent` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`aa_exp` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`aa_points` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`group_leadership_exp` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`raid_leadership_exp` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`group_leadership_points` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`raid_leadership_points` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`points` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`cur_hp` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`mana` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`endurance` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`intoxication` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`str` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`sta` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`cha` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`dex` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`int` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`agi` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`wis` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`zone_change_count` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`toxicity` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`hunger_level` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`thirst_level` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`ability_up` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`ldon_points_guk` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`ldon_points_mir` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`ldon_points_mmc` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`ldon_points_ruj` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`ldon_points_tak` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`ldon_points_available` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`tribute_time_remaining` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`career_tribute_points` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`tribute_points` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`tribute_active` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`pvp_status` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`pvp_kills` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`pvp_deaths` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`pvp_current_points` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`pvp_career_points` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`pvp_best_kill_streak` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`pvp_worst_death_streak` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`pvp_current_kill_streak` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`pvp2` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`pvp_type` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`show_helm` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`group_auto_consent` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`raid_auto_consent` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`guild_auto_consent` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`leadership_exp_on` tinyint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`RestTimer` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`air_remaining` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`autosplit_enabled` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`lfp` tinyint(1) unsigned NOT NULL DEFAULT '0', " - "`lfg` tinyint(1) unsigned NOT NULL DEFAULT '0', " - "`mailkey` char(16) NOT NULL DEFAULT '', " - "`xtargets` tinyint(3) unsigned NOT NULL DEFAULT '5', " - "`firstlogon` tinyint(3) NOT NULL DEFAULT '0', " - "`e_aa_effects` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`e_percent_to_aa` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`e_expended_aa_spent` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "PRIMARY KEY(`id`), " - "UNIQUE KEY `name` (`name`), " - "KEY `account_id` (`account_id`) " - ") ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1; " - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_currency` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_currency'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_currency` doesn't exist... creating..."); - rquery = StringFormat( - " CREATE TABLE `character_currency` ( " - " `id` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `platinum` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `gold` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `silver` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `copper` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `platinum_bank` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `gold_bank` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `silver_bank` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `copper_bank` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `platinum_cursor` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `gold_cursor` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `silver_cursor` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `copper_cursor` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `radiant_crystals` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `career_radiant_crystals` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `ebon_crystals` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `career_ebon_crystals` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " PRIMARY KEY (`id`), " - " KEY `id` (`id`) " - " ) ENGINE=InnoDB DEFAULT CHARSET=latin1; " - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_alternate_abilities` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_alternate_abilities'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_alternate_abilities` doesn't exist... creating..."); - rquery = StringFormat( - " CREATE TABLE `character_alternate_abilities` ( " - " `id` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `slot` smallint(11) UNSIGNED NOT NULL DEFAULT 0, " - " `aa_id` smallint(11) UNSIGNED NOT NULL DEFAULT 0, " - " `aa_value` smallint(11) UNSIGNED NOT NULL DEFAULT 0, " - " PRIMARY KEY(`id`,`slot`), " - " KEY `id` (`id`) " - " ) ENGINE = InnoDB DEFAULT CHARSET = latin1; " - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_bind` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_bind'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_bind` doesn't exist... creating..."); - rquery = StringFormat( - "CREATE TABLE `character_bind` ( " - "`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, " - "`is_home` tinyint(11) UNSIGNED NOT NULL DEFAULT '0', " - "`zone_id` smallint(11) UNSIGNED NOT NULL DEFAULT '0', " - "`instance_id` mediumint(11) UNSIGNED NOT NULL DEFAULT '0', " - "`x` float NOT NULL DEFAULT '0', " - "`y` float NOT NULL DEFAULT '0', " - "`z` float NOT NULL DEFAULT '0', " - "`heading` float NOT NULL DEFAULT '0', " - "PRIMARY KEY(`id`, `is_home`), " - "KEY `id` (`id`) " - ") ENGINE = InnoDB DEFAULT CHARSET = latin1;" - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_languages` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_languages'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_languages` doesn't exist... creating..."); - rquery = StringFormat( - "CREATE TABLE `character_languages` ( " - "`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, " - "`lang_id` smallint(11) UNSIGNED NOT NULL DEFAULT '0', " - "`value` smallint(11) UNSIGNED NOT NULL DEFAULT '0', " - "PRIMARY KEY(`id`, `lang_id`), " - "KEY `id` (`id`) " - ") ENGINE = InnoDB DEFAULT CHARSET = latin1;" - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_skills` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_skills'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_skills` doesn't exist... creating..."); - rquery = StringFormat( - "CREATE TABLE `character_skills` ( " - "`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, " - "`skill_id` smallint(11) UNSIGNED NOT NULL DEFAULT '0', " - "`value` smallint(11) UNSIGNED NOT NULL DEFAULT '0', " - "PRIMARY KEY(`id`, `skill_id`), " - "KEY `id` (`id`) " - ") ENGINE = InnoDB DEFAULT CHARSET = latin1;" - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_spells` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_spells'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_spells` doesn't exist... creating..."); - rquery = StringFormat( - "CREATE TABLE `character_spells` ( " - "`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, " - "`slot_id` smallint(11) UNSIGNED NOT NULL DEFAULT '0', " - "`spell_id` smallint(11) UNSIGNED NOT NULL DEFAULT '0', " - "PRIMARY KEY(`id`, `slot_id`), " - "KEY `id` (`id`) " - ") ENGINE = InnoDB DEFAULT CHARSET = latin1;" - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_memmed_spells` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_memmed_spells'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_memmed_spells` doesn't exist... creating..."); - rquery = StringFormat( - "CREATE TABLE `character_memmed_spells` ( " - "`id` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`slot_id` smallint(11) UNSIGNED NOT NULL DEFAULT '0', " - "`spell_id` smallint(11) UNSIGNED NOT NULL DEFAULT '0', " - "PRIMARY KEY(`id`, `slot_id`), " - "KEY `id` (`id`) " - ") ENGINE = InnoDB DEFAULT CHARSET = latin1;" - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_disciplines` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_disciplines'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_disciplines` doesn't exist... creating..."); - rquery = StringFormat( - " CREATE TABLE `character_disciplines` ( " - " `id` int(11) UNSIGNED NOT NULL DEFAULT 0, " - " `slot_id` smallint(11) UNSIGNED NOT NULL DEFAULT '0', " - " `disc_id` smallint(11) UNSIGNED NOT NULL DEFAULT '0', " - " PRIMARY KEY(`id`, `slot_id`), " - " KEY `id` (`id`) " - " ) ENGINE = InnoDB DEFAULT CHARSET = latin1; " - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_material` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_material'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_material` doesn't exist... creating..."); - rquery = StringFormat( - "CREATE TABLE `character_material` ( " - "`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT," - "`slot` tinyint(11) UNSIGNED NOT NULL DEFAULT '0'," - "`blue` tinyint(11) UNSIGNED NOT NULL DEFAULT '0'," - "`green` tinyint(11) UNSIGNED NOT NULL DEFAULT '0'," - "`red` tinyint(11) UNSIGNED NOT NULL DEFAULT '0'," - "`use_tint` tinyint(11) UNSIGNED NOT NULL DEFAULT '0'," - "`color` int(11) UNSIGNED NOT NULL DEFAULT '0'," - "PRIMARY KEY(`id`, `slot`)," - "KEY `id` (`id`)" - ") ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1;" - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_tribute` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_tribute'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_tribute` doesn't exist... creating..."); - rquery = StringFormat( - "CREATE TABLE `character_tribute` ( " - "`id` int(11) unsigned NOT NULL DEFAULT 0, " - "`tier` tinyint(11) unsigned NOT NULL DEFAULT '0', " - "`tribute` int(11) UNSIGNED NOT NULL DEFAULT '0', " - "KEY `id` (`id`) " - ") ENGINE = InnoDB DEFAULT CHARSET = latin1;" - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_bandolier` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_bandolier'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_bandolier` doesn't exist... creating..."); - rquery = StringFormat( - "CREATE TABLE `character_bandolier` ( " - "`id` int(11) unsigned NOT NULL DEFAULT 0, " - "`bandolier_id` tinyint(11) unsigned NOT NULL DEFAULT '0', " - "`bandolier_slot` tinyint(11) unsigned NOT NULL DEFAULT '0', " - "`item_id` int(11) UNSIGNED NOT NULL DEFAULT '0', " - "`icon` int(11) UNSIGNED NOT NULL DEFAULT '0', " - "`bandolier_name` varchar(32) NOT NULL DEFAULT '0', " - "PRIMARY KEY(`id`,`bandolier_id`, `bandolier_slot`), " - "KEY `id` (`id`) " - ") ENGINE = InnoDB DEFAULT CHARSET = latin1; " - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_potionbelt` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_potionbelt'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_potionbelt` doesn't exist... creating..."); - rquery = StringFormat( - "CREATE TABLE `character_potionbelt` ( " - "`id` int(11) unsigned NOT NULL DEFAULT 0, " - "`potion_id` tinyint(11) unsigned NOT NULL DEFAULT '0', " - "`item_id` int(11) UNSIGNED NOT NULL DEFAULT '0', " - "`icon` int(11) UNSIGNED NOT NULL DEFAULT '0', " - "PRIMARY KEY(`id`,`potion_id`), " - "KEY `id` (`id`) " - ") ENGINE = InnoDB DEFAULT CHARSET = latin1;" - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_potionbelt` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_inspect_messages'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_inspect_messages` doesn't exist... creating..."); - rquery = StringFormat( - "CREATE TABLE `character_inspect_messages` ( " - "`id` int(11) unsigned NOT NULL DEFAULT 0, " - "`inspect_message` varchar(255) NOT NULL DEFAULT '', " - "PRIMARY KEY(`id`), " - "KEY `id` (`id`) " - ") ENGINE = InnoDB DEFAULT CHARSET = latin1;" - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - /* Check for table `character_leadership_abilities` */ - rquery = StringFormat("SHOW TABLES LIKE 'character_leadership_abilities'"); - results = QueryDatabase(rquery); - if (results.RowCount() == 0){ - printf("Table: `character_leadership_abilities` doesn't exist... creating..."); - rquery = StringFormat( - "CREATE TABLE `character_leadership_abilities` (" - "`id` int(11) UNSIGNED NOT NULL DEFAULT 0, " - "`slot` smallint(11) UNSIGNED NOT NULL DEFAULT 0, " - "`rank` smallint(11) UNSIGNED NOT NULL DEFAULT 0, " - "PRIMARY KEY(`id`,`slot`), " - "KEY `id` (`id`) " - ") ENGINE = InnoDB DEFAULT CHARSET = latin1; " - ); - auto results = QueryDatabase(rquery); - printf(" done...\n"); - } - - /* Done */ - printf("Starting conversion...\n\n"); - - - int char_iter_count = 0; - rquery = StringFormat("SELECT `id` FROM `character_`"); - results = QueryDatabase(rquery); - - uint8 firstlogon = 0; - uint8 lfg = 0; - uint8 lfp = 0; - std::string mailkey; - uint8 xtargets = 0; - std::string inspectmessage; - - for (auto row = results.begin(); row != results.end(); ++row) { - char_iter_count++; - squery = StringFormat("SELECT `id`, `profile`, `name`, `level`, `account_id`, `firstlogon`, `lfg`, `lfp`, `mailkey`, `xtargets`, `inspectmessage`, `extprofile` FROM `character_` WHERE `id` = %i", Strings::ToUnsignedInt(row[0])); - auto results2 = QueryDatabase(squery); - auto row2 = results2.begin(); - pp = (Convert::PlayerProfile_Struct*)row2[1]; - e_pp = (ExtendedProfile_Struct*)row2[11]; - character_id = Strings::ToUnsignedInt(row[0]); - account_id = Strings::ToInt(row2[4]); - /* Convert some data from the character_ table that is still relevant */ - firstlogon = Strings::ToUnsignedInt(row2[5]); - lfg = Strings::ToUnsignedInt(row2[6]); - lfp = Strings::ToUnsignedInt(row2[7]); - mailkey = row2[8]; - xtargets = Strings::ToUnsignedInt(row2[9]); - inspectmessage = row2[10]; - - /* Verify PP Integrity */ - lengths = results2.LengthOfColumn(1); - if (lengths == sizeof(Convert::PlayerProfile_Struct)) { /* If PP is the size it is expected to be */ - memcpy(pp, row2[1], sizeof(Convert::PlayerProfile_Struct)); - } - /* Continue of PP Size does not match (Usually a created character never logged in) */ - else { - std::cout << (row2[2] ? row2[2] : "Unknown") << " ID: " << character_id << " size mismatch. Expected Size: " << sizeof(Convert::PlayerProfile_Struct) << " Seen: " << lengths << std::endl; - continue; - } - - lengths_e = results2.LengthOfColumn(11); - if (lengths_e == sizeof(ExtendedProfile_Struct)) { - memcpy(e_pp, row2[11], sizeof(ExtendedProfile_Struct)); - } - if (e_pp->expended_aa > 4000000){ e_pp->expended_aa = 0; } - - /* Loading Status on conversion */ - if (runconvert == 1){ - std::cout << "\r" << char_iter_count << "/" << number_of_characters << " " << std::flush; - loadbar(char_iter_count, number_of_characters, 50); - - /* Run inspect message convert */ - if (inspectmessage != ""){ - std::string rquery = StringFormat("REPLACE INTO `character_inspect_messages` (id, inspect_message)" - "VALUES (%u, '%s')", - character_id, - Strings::Escape(inspectmessage).c_str() - ); - auto results = QueryDatabase(rquery); - } - - /* Run Currency Convert */ - std::string rquery = StringFormat("REPLACE INTO `character_currency` (id, platinum, gold, silver, copper," - "platinum_bank, gold_bank, silver_bank, copper_bank," - "platinum_cursor, gold_cursor, silver_cursor, copper_cursor, " - "radiant_crystals, career_radiant_crystals, ebon_crystals, career_ebon_crystals)" - "VALUES (%u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u)", - character_id, - pp->platinum, - pp->gold, - pp->silver, - pp->copper, - pp->platinum_bank, - pp->gold_bank, - pp->silver_bank, - pp->copper_bank, - pp->platinum_cursor, - pp->gold_cursor, - pp->silver_cursor, - pp->copper_cursor, - pp->currentRadCrystals, - pp->careerRadCrystals, - pp->currentEbonCrystals, - pp->careerEbonCrystals - ); - auto results = QueryDatabase(rquery); - - if (pp->tribute_time_remaining < 0 || pp->tribute_time_remaining == 4294967295){ pp->tribute_time_remaining = 0; } - - /* Run Character Data Convert */ - rquery = StringFormat( - "REPLACE INTO `character_data` (" - "id," - "account_id," - "`name`," - "last_name," - "gender," - "race," - "class," - "`level`," - "deity," - "birthday," - "last_login," - "time_played," - "pvp_status," - "level2," - "anon," - "gm," - "intoxication," - "hair_color," - "beard_color," - "eye_color_1," - "eye_color_2," - "hair_style," - "beard," - "ability_time_seconds," - "ability_number," - "ability_time_minutes," - "ability_time_hours," - "title," - "suffix," - "exp," - "points," - "mana," - "cur_hp," - "str," - "sta," - "cha," - "dex," - "`int`," - "agi," - "wis," - "face," - "y," - "x," - "z," - "heading," - "pvp2," - "pvp_type," - "autosplit_enabled," - "zone_change_count," - "drakkin_heritage," - "drakkin_tattoo," - "drakkin_details," - "toxicity," - "hunger_level," - "thirst_level," - "ability_up," - "zone_id," - "zone_instance," - "leadership_exp_on," - "ldon_points_guk," - "ldon_points_mir," - "ldon_points_mmc," - "ldon_points_ruj," - "ldon_points_tak," - "ldon_points_available," - "tribute_time_remaining," - "show_helm," - "career_tribute_points," - "tribute_points," - "tribute_active," - "endurance," - "group_leadership_exp," - "raid_leadership_exp," - "group_leadership_points," - "raid_leadership_points," - "air_remaining," - "pvp_kills," - "pvp_deaths," - "pvp_current_points," - "pvp_career_points," - "pvp_best_kill_streak," - "pvp_worst_death_streak," - "pvp_current_kill_streak," - "aa_points_spent," - "aa_exp," - "aa_points," - "group_auto_consent," - "raid_auto_consent," - "guild_auto_consent," - "RestTimer," - "firstlogon," - "lfg," - "lfp," - "mailkey," - "xtargets," - "e_aa_effects," - "e_percent_to_aa," - "e_expended_aa_spent" - ")" - "VALUES (" - "%u," // id - "%u," // account_id - "'%s'," // `name` - "'%s'," // last_name - "%u," // gender - "%u," // race - "%u," // class - "%u," // `level` - "%u," // deity - "%u," // birthday - "%u," // last_login - "%u," // time_played - "%u," // pvp_status - "%u," // level2 - "%u," // anon - "%u," // gm - "%u," // intoxication - "%u," // hair_color - "%u," // beard_color - "%u," // eye_color_1 - "%u," // eye_color_2 - "%u," // hair_style - "%u," // beard - "%u," // ability_time_seconds - "%u," // ability_number - "%u," // ability_time_minutes - "%u," // ability_time_hours - "'%s'," // title - "'%s'," // suffix - "%u," // exp - "%u," // points - "%u," // mana - "%u," // cur_hp - "%u," // str - "%u," // sta - "%u," // cha - "%u," // dex - "%u," // `int` - "%u," // agi - "%u," // wis - "%u," // face - "%f," // y - "%f," // x - "%f," // z - "%f," // heading - "%u," // pvp2 - "%u," // pvp_type - "%u," // autosplit_enabled - "%u," // zone_change_count - "%u," // drakkin_heritage - "%u," // drakkin_tattoo - "%u," // drakkin_details - "%i," // toxicity - "%u," // hunger_level - "%u," // thirst_level - "%u," // ability_up - "%u," // zone_id - "%u," // zone_instance - "%u," // leadership_exp_on - "%u," // ldon_points_guk - "%u," // ldon_points_mir - "%u," // ldon_points_mmc - "%u," // ldon_points_ruj - "%u," // ldon_points_tak - "%u," // ldon_points_available - "%u," // tribute_time_remaining - "%u," // show_helm - "%u," // career_tribute_points - "%u," // tribute_points - "%u," // tribute_active - "%u," // endurance - "%u," // group_leadership_exp - "%u," // raid_leadership_exp - "%u," // group_leadership_points - "%u," // raid_leadership_points - "%u," // air_remaining - "%u," // pvp_kills - "%u," // pvp_deaths - "%u," // pvp_current_points - "%u," // pvp_career_points - "%u," // pvp_best_kill_streak - "%u," // pvp_worst_death_streak - "%u," // pvp_current_kill_streak - "%u," // aa_points_spent - "%u," // aa_exp - "%u," // aa_points - "%u," // group_auto_consent - "%u," // raid_auto_consent - "%u," // guild_auto_consent - "%u," // RestTimer - "%u," // First Logon - References online status for EVENT_CONNECT/EVENT_DISCONNECt - "%u," // Looking for Group - "%u," // Looking for P? - "'%s'," // Mailkey - "%u," // X Targets - "%u," // AA Effects - "%u," // Percent to AA - "%u" // e_expended_aa_spent - ")", - character_id, - account_id, - Strings::Escape(pp->name).c_str(), - Strings::Escape(pp->last_name).c_str(), - pp->gender, - pp->race, - pp->class_, - pp->level, - pp->deity, - pp->birthday, - pp->lastlogin, - pp->timePlayedMin, - pp->pvp, - pp->level2, - pp->anon, - pp->gm, - pp->intoxication, - pp->haircolor, - pp->beardcolor, - pp->eyecolor1, - pp->eyecolor2, - pp->hairstyle, - pp->beard, - pp->ability_time_seconds, - pp->ability_number, - pp->ability_time_minutes, - pp->ability_time_hours, - Strings::Escape(pp->title).c_str(), - Strings::Escape(pp->suffix).c_str(), - pp->exp, - pp->points, - pp->mana, - pp->cur_hp, - pp->STR, - pp->STA, - pp->CHA, - pp->DEX, - pp->INT, - pp->AGI, - pp->WIS, - pp->face, - pp->y, - pp->x, - pp->z, - pp->heading, - pp->pvp2, - pp->pvptype, - pp->autosplit, - pp->zone_change_count, - pp->drakkin_heritage, - pp->drakkin_tattoo, - pp->drakkin_details, - pp->toxicity, - pp->hunger_level, - pp->thirst_level, - pp->ability_up, - pp->zone_id, - pp->zoneInstance, - pp->leadAAActive == 0 ? 0 : 1, - pp->ldon_points_guk, - pp->ldon_points_mir, - pp->ldon_points_mmc, - pp->ldon_points_ruj, - pp->ldon_points_tak, - pp->ldon_points_available, - pp->tribute_time_remaining, - pp->showhelm, - pp->career_tribute_points, - pp->tribute_points, - pp->tribute_active, - pp->endurance, - pp->group_leadership_exp, - pp->raid_leadership_exp, - pp->group_leadership_points, - pp->raid_leadership_points, - pp->air_remaining, - pp->PVPKills, - pp->PVPDeaths, - pp->PVPCurrentPoints, - pp->PVPCareerPoints, - pp->PVPBestKillStreak, - pp->PVPWorstDeathStreak, - pp->PVPCurrentKillStreak, - pp->aapoints_spent, - pp->expAA, - pp->aapoints, - pp->groupAutoconsent, - pp->raidAutoconsent, - pp->guildAutoconsent, - pp->RestTimer, - firstlogon, - lfg, - lfp, - mailkey.c_str(), - xtargets, - e_pp->aa_effects, - e_pp->perAA, - e_pp->expended_aa - ); - results = QueryDatabase(rquery); - - - /* - We set a first entry variable because we need the first initial piece of the query to be declared - This is to speed up the INSERTS and trim down the amount of individual sends during the process. - The speed difference is dramatic - */ - /* Run AA Convert */ - int first_entry = 0; rquery = ""; - for (i = 0; i < MAX_PP_AA_ARRAY; i++){ - if (pp->aa_array[i].AA > 0 && pp->aa_array[i].value > 0){ - if (first_entry != 1){ - rquery = StringFormat("REPLACE INTO `character_alternate_abilities` (id, slot, aa_id, aa_value)" - " VALUES (%u, %u, %u, %u)", character_id, i, pp->aa_array[i].AA, pp->aa_array[i].value); - first_entry = 1; - } - else { - rquery = rquery + StringFormat(", (%u, %u, %u, %u)", character_id, i, pp->aa_array[i].AA, pp->aa_array[i].value); - } - } - } - if (rquery != ""){ results = QueryDatabase(rquery); } - - /* Run Bind Home Convert */ - if (pp->binds[4].zone_id < 999 && !_ISNAN_(pp->binds[4].x) && !_ISNAN_(pp->binds[4].y) && !_ISNAN_(pp->binds[4].z) && !_ISNAN_(pp->binds[4].heading)) { - rquery = StringFormat("REPLACE INTO `character_bind` (id, zone_id, instance_id, x, y, z, heading, is_home)" - " VALUES (%u, %u, %u, %f, %f, %f, %f, 1)", - character_id, pp->binds[4].zone_id, 0, pp->binds[4].x, pp->binds[4].y, pp->binds[4].z, pp->binds[4].heading); - if (rquery != ""){ results = QueryDatabase(rquery); } - } - - /* Run Bind Convert */ - if (pp->binds[0].zone_id < 999 && !_ISNAN_(pp->binds[0].x) && !_ISNAN_(pp->binds[0].y) && !_ISNAN_(pp->binds[0].z) && !_ISNAN_(pp->binds[0].heading)) { - rquery = StringFormat("REPLACE INTO `character_bind` (id, zone_id, instance_id, x, y, z, heading, is_home)" - " VALUES (%u, %u, %u, %f, %f, %f, %f, 0)", - character_id, pp->binds[0].zone_id, 0, pp->binds[0].x, pp->binds[0].y, pp->binds[0].z, pp->binds[0].heading); - if (rquery != ""){ results = QueryDatabase(rquery); } - } - /* Run Language Convert */ - first_entry = 0; rquery = ""; - for (i = 0; i < MAX_PP_LANGUAGE; i++){ - if (pp->languages[i] > 0){ - if (first_entry != 1){ - rquery = StringFormat("REPLACE INTO `character_languages` (id, lang_id, value) VALUES (%u, %u, %u)", character_id, i, pp->languages[i]); - first_entry = 1; - } - rquery = rquery + StringFormat(", (%u, %u, %u)", character_id, i, pp->languages[i]); - } - } - if (rquery != ""){ results = QueryDatabase(rquery); } - /* Run Skill Convert */ - first_entry = 0; rquery = ""; - for (i = 0; i < MAX_PP_SKILL; i++){ - if (pp->skills[i] > 0){ - if (first_entry != 1){ - rquery = StringFormat("REPLACE INTO `character_skills` (id, skill_id, value) VALUES (%u, %u, %u)", character_id, i, pp->skills[i]); - first_entry = 1; - } - rquery = rquery + StringFormat(", (%u, %u, %u)", character_id, i, pp->skills[i]); - } - } - if (rquery != ""){ results = QueryDatabase(rquery); } - /* Run Spell Convert */ - first_entry = 0; rquery = ""; - for (i = 0; i < 480; i++){ - if (pp->spell_book[i] > 0 && pp->spell_book[i] != 4294967295 && pp->spell_book[i] < 40000 && pp->spell_book[i] != 1){ - if (first_entry != 1){ - rquery = StringFormat("REPLACE INTO `character_spells` (id, slot_id, spell_id) VALUES (%u, %u, %u)", character_id, i, pp->spell_book[i]); - first_entry = 1; - } - rquery = rquery + StringFormat(", (%u, %u, %u)", character_id, i, pp->spell_book[i]); - } - } - if (rquery != ""){ results = QueryDatabase(rquery); } - /* Run Max Memmed Spell Convert */ - first_entry = 0; rquery = ""; - for (i = 0; i < 9; i++){ - if (pp->mem_spells[i] > 0 && pp->mem_spells[i] != 65535 && pp->mem_spells[i] != 4294967295){ - if (first_entry != 1){ - rquery = StringFormat("REPLACE INTO `character_memmed_spells` (id, slot_id, spell_id) VALUES (%u, %u, %u)", character_id, i, pp->mem_spells[i]); - first_entry = 1; - } - rquery = rquery + StringFormat(", (%u, %u, %u)", character_id, i, pp->mem_spells[i]); - } - } - if (rquery != ""){ results = QueryDatabase(rquery); } - /* Run Discipline Convert */ - first_entry = 0; rquery = ""; - for (i = 0; i < MAX_PP_DISCIPLINES; i++){ - if (pp->disciplines.values[i] > 0 && pp->disciplines.values[i] < 60000){ - if (first_entry != 1){ - rquery = StringFormat("REPLACE INTO `character_disciplines` (id, slot_id, disc_id) VALUES (%u, %u, %u)", character_id, i, pp->disciplines.values[i]); - first_entry = 1; - } - rquery = rquery + StringFormat(", (%u, %u, %u)", character_id, i, pp->disciplines.values[i]); - } - } - if (rquery != ""){ results = QueryDatabase(rquery); } - /* Run Material Color Convert */ - first_entry = 0; rquery = ""; - for (i = EQ::textures::textureBegin; i < EQ::textures::materialCount; i++){ - if (pp->item_tint[i].color > 0){ - if (first_entry != 1){ - rquery = StringFormat("REPLACE INTO `character_material` (id, slot, blue, green, red, use_tint, color) VALUES (%u, %u, %u, %u, %u, %u, %u)", character_id, i, pp->item_tint[i].rgb.blue, pp->item_tint[i].rgb.green, pp->item_tint[i].rgb.red, pp->item_tint[i].rgb.use_tint, pp->item_tint[i].color); - first_entry = 1; - } - rquery = rquery + StringFormat(", (%u, %u, %u, %u, %u, %u, %u)", character_id, i, pp->item_tint[i].rgb.blue, pp->item_tint[i].rgb.green, pp->item_tint[i].rgb.red, pp->item_tint[i].rgb.use_tint, pp->item_tint[i].color); - } - } - if (rquery != ""){ results = QueryDatabase(rquery); } - /* Run Tribute Convert */ - first_entry = 0; rquery = ""; - for (i = 0; i < 5; i++){ - if (pp->tributes[i].tribute > 0 && pp->tributes[i].tribute != 4294967295){ - if (first_entry != 1){ - rquery = StringFormat("REPLACE INTO `character_tribute` (id, tier, tribute) VALUES (%u, %u, %u)", character_id, pp->tributes[i].tier, pp->tributes[i].tribute); - first_entry = 1; - } - rquery = rquery + StringFormat(", (%u, %u, %u)", character_id, pp->tributes[i].tier, pp->tributes[i].tribute); - } - } - if (rquery != ""){ results = QueryDatabase(rquery); } - /* Run Bandolier Convert */ - first_entry = 0; rquery = ""; - for (i = 0; i < Convert::BANDOLIERS_SIZE; i++){ - if (strlen(pp->bandoliers[i].Name) < 32) { - for (int si = 0; si < Convert::BANDOLIER_ITEM_COUNT; si++){ - if (pp->bandoliers[i].Items[si].ID > 0){ - if (first_entry != 1) { - rquery = StringFormat("REPLACE INTO `character_bandolier` (id, bandolier_id, bandolier_slot, item_id, icon, bandolier_name) VALUES (%i, %u, %i, %u, %u, '%s')", character_id, i, si, pp->bandoliers[i].Items[si].ID, pp->bandoliers[i].Items[si].Icon, pp->bandoliers[i].Name); - first_entry = 1; - } - rquery = rquery + StringFormat(", (%i, %u, %i, %u, %u, '%s')", character_id, i, si, pp->bandoliers[i].Items[si].ID, pp->bandoliers[i].Items[si].Icon, pp->bandoliers[i].Name); - } - } - } - } - if (rquery != ""){ results = QueryDatabase(rquery); } - /* Run Potion Belt Convert */ - first_entry = 0; rquery = ""; - for (i = 0; i < Convert::POTION_BELT_ITEM_COUNT; i++){ - if (pp->potionbelt.Items[i].ID > 0){ - if (first_entry != 1){ - rquery = StringFormat("REPLACE INTO `character_potionbelt` (id, potion_id, item_id, icon) VALUES (%i, %u, %u, %u)", character_id, i, pp->potionbelt.Items[i].ID, pp->potionbelt.Items[i].Icon); - first_entry = 1; - } - rquery = rquery + StringFormat(", (%i, %u, %u, %u)", character_id, i, pp->potionbelt.Items[i].ID, pp->potionbelt.Items[i].Icon); - - } - } - if (rquery != ""){ results = QueryDatabase(rquery); } - /* Run Leadership AA Convert */ - first_entry = 0; rquery = ""; - for (i = 0; i < MAX_LEADERSHIP_AA_ARRAY; i++){ - if (pp->leader_abilities.ranks[i] > 0 && pp->leader_abilities.ranks[i] < 6){ - if (first_entry != 1){ - rquery = StringFormat("REPLACE INTO `character_leadership_abilities` (id, slot, `rank`) VALUES (%i, %u, %u)", character_id, i, pp->leader_abilities.ranks[i]); - first_entry = 1; - } - rquery = rquery + StringFormat(", (%i, %u, %u)", character_id, i, pp->leader_abilities.ranks[i]); - } - } - if (rquery != ""){ results = QueryDatabase(rquery); } - } - } - if (runconvert == 1){ - std::string rquery = StringFormat("RENAME TABLE `character_` TO `character_old`"); QueryDatabase(rquery); - printf("\n\nRenaming `character_` table to `character_old`, this is a LARGE table so when you don't need it anymore, I would suggest deleting it yourself...\n"); - printf("\n\nCharacter blob conversion complete, continuing world bootup...\n"); - } - } - return true; -} - -bool Database::CheckDatabaseConvertCorpseDeblob(){ - Convert::DBPlayerCorpse_Struct_temp* dbpc; - Convert::classic_db_temp::DBPlayerCorpse_Struct_temp* dbpc_c; - uint32 in_datasize; - bool is_sof = false; - std::string c_type; - std::string scquery; - int8 first_entry = 0; - - std::string query = StringFormat("SHOW TABLES LIKE 'player_corpses'"); - auto results = QueryDatabase(query); - if (results.RowCount() != 0){ - query = StringFormat( - "CREATE TABLE `character_corpse_items` ( " - "`corpse_id` int(11) unsigned NOT NULL, " - "`equip_slot` int(11) unsigned NOT NULL, " - "`item_id` int(11) unsigned DEFAULT NULL, " - "`charges` int(11) unsigned DEFAULT NULL, " - "`aug_1` int(11) unsigned DEFAULT '0', " - "`aug_2` int(11) unsigned DEFAULT '0', " - "`aug_3` int(11) unsigned DEFAULT '0', " - "`aug_4` int(11) unsigned DEFAULT '0', " - "`aug_5` int(11) unsigned DEFAULT '0', " - "`aug_6` int(11) unsigned DEFAULT '0', " - "`attuned` smallint(5) NOT NULL DEFAULT '0', " - "PRIMARY KEY(`corpse_id`, `equip_slot`) " - ") ENGINE = InnoDB DEFAULT CHARSET = latin1; " - ); - results = QueryDatabase(query); - query = StringFormat("RENAME TABLE `player_corpses` TO `character_corpses`"); - results = QueryDatabase(query); - query = StringFormat( - " ALTER TABLE `character_corpses` \n" - " ADD COLUMN `is_locked` tinyint(11) NULL DEFAULT 0 AFTER `WasAtGraveyard`, \n" - " ADD COLUMN `exp` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `size` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `level` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `race` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `gender` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `class` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `deity` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `texture` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `helm_texture` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `copper` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `silver` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `gold` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `platinum` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `hair_color` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `beard_color` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `eye_color_1` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `eye_color_2` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `hair_style` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `face` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `beard` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `drakkin_heritage` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `drakkin_tattoo` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `drakkin_details` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `wc_1` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `wc_2` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `wc_3` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `wc_4` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `wc_5` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `wc_6` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `wc_7` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `wc_8` int(11) UNSIGNED NULL DEFAULT 0, \n" - " ADD COLUMN `wc_9` int(11) UNSIGNED NULL DEFAULT 0, \n" - " CHANGE COLUMN `zoneid` `zone_id` smallint(5) NOT NULL DEFAULT 0 AFTER `charname`, \n" - " CHANGE COLUMN `instanceid` `instance_id` smallint(5) UNSIGNED NOT NULL DEFAULT 0 AFTER `zone_id`, \n" - " CHANGE COLUMN `timeofdeath` `time_of_death` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `data`, \n" - " CHANGE COLUMN `rezzed` `is_rezzed` tinyint(3) UNSIGNED NULL DEFAULT 0 AFTER `time_of_death`, \n" - " CHANGE COLUMN `IsBurried` `is_buried` tinyint(3) NOT NULL DEFAULT 0 AFTER `is_rezzed`; \n" - - ); - results = QueryDatabase(query); - query = StringFormat( - " ALTER TABLE `character_corpses` \n" - " CHANGE COLUMN `WasAtGraveyard` `was_at_graveyard` tinyint(3) NOT NULL DEFAULT 0 AFTER `is_buried` \n" - ); - results = QueryDatabase(query); - } - - std::string rquery = StringFormat("SHOW COLUMNS FROM `character_corpses` LIKE 'data'"); - results = QueryDatabase(rquery); - if (results.RowCount() != 0){ - rquery = StringFormat("SELECT DISTINCT charid FROM character_corpses"); - results = QueryDatabase(rquery); - for (auto row = results.begin(); row != results.end(); ++row) { - std::string squery = StringFormat("SELECT id, charname, data, time_of_death, is_rezzed FROM character_corpses WHERE `charid` = %i", Strings::ToUnsignedInt(row[0])); - auto results2 = QueryDatabase(squery); - for (auto row2 = results2.begin(); row2 != results2.end(); ++row2) { - in_datasize = results2.LengthOfColumn(2); - dbpc = (Convert::DBPlayerCorpse_Struct_temp*)row2[2]; - dbpc_c = (Convert::classic_db_temp::DBPlayerCorpse_Struct_temp*)row2[2]; - - if (dbpc == nullptr) - continue; - if (dbpc_c == nullptr) - continue; - - - /* SoF+ */ - uint32 esize1 = (sizeof(Convert::DBPlayerCorpse_Struct_temp) + (dbpc->itemcount * sizeof(Convert::player_lootitem_temp::ServerLootItem_Struct_temp))); - uint32 esize2 = (sizeof(Convert::classic_db_temp::DBPlayerCorpse_Struct_temp) + (dbpc_c->itemcount * sizeof(Convert::player_lootitem_temp::ServerLootItem_Struct_temp))); - - /* SoF */ - if (in_datasize == esize1) { - is_sof = true; - c_type = "SOF"; - } - /* Classic */ - if (in_datasize == esize2) { - is_sof = false; - c_type = "Legacy"; - } - if (in_datasize != esize2 && in_datasize != esize1) { - is_sof = false; - c_type = "NULL"; - continue; - } - std::cout << "Converting Corpse: [OK] [" << c_type << "]: " << "ID: " << Strings::ToUnsignedInt(row2[0]) << std::endl; - - if (is_sof){ - scquery = StringFormat("UPDATE `character_corpses` SET \n" - "`is_locked` = %d,\n" - "`exp` = %u,\n" - "`size` = %f,\n" - "`level` = %u,\n" - "`race` = %u,\n" - "`gender` = %u,\n" - "`class` = %u,\n" - "`deity` = %u,\n" - "`texture` = %u,\n" - "`helm_texture` = %u,\n" - "`copper` = %u,\n" - "`silver` = %u,\n" - "`gold` = %u,\n" - "`platinum` = %u,\n" - "`hair_color` = %u,\n" - "`beard_color` = %u,\n" - "`eye_color_1` = %u,\n" - "`eye_color_2` = %u,\n" - "`hair_style` = %u,\n" - "`face` = %u,\n" - "`beard` = %u,\n" - "`drakkin_heritage` = %u,\n" - "`drakkin_tattoo` = %u,\n" - "`drakkin_details` = %u,\n" - "`wc_1` = %u,\n" - "`wc_2` = %u,\n" - "`wc_3` = %u,\n" - "`wc_4` = %u,\n" - "`wc_5` = %u,\n" - "`wc_6` = %u,\n" - "`wc_7` = %u,\n" - "`wc_8` = %u,\n" - "`wc_9` = %u \n" - "WHERE `id` = %u \n", - dbpc->locked, - dbpc->exp, - dbpc->size, - dbpc->level, - dbpc->race, - dbpc->gender, - dbpc->class_, - dbpc->deity, - dbpc->texture, - dbpc->helmtexture, - dbpc->copper, - dbpc->silver, - dbpc->gold, - dbpc->plat, - dbpc->haircolor, - dbpc->beardcolor, - dbpc->eyecolor1, - dbpc->eyecolor2, - dbpc->hairstyle, - dbpc->face, - dbpc->beard, - dbpc->drakkin_heritage, - dbpc->drakkin_tattoo, - dbpc->drakkin_details, - dbpc->item_tint[0].color, - dbpc->item_tint[1].color, - dbpc->item_tint[2].color, - dbpc->item_tint[3].color, - dbpc->item_tint[4].color, - dbpc->item_tint[5].color, - dbpc->item_tint[6].color, - dbpc->item_tint[7].color, - dbpc->item_tint[8].color, - Strings::ToUnsignedInt(row2[0]) - ); - if (scquery != ""){ auto sc_results = QueryDatabase(scquery); } - - first_entry = 0; - scquery = ""; - /* Print Items */ - for (unsigned int i = 0; i < dbpc->itemcount; i++) { - if (first_entry != 1){ - scquery = StringFormat("REPLACE INTO `character_corpse_items` \n" - " (corpse_id, equip_slot, item_id, charges, aug_1, aug_2, aug_3, aug_4, aug_5, aug_6, attuned) \n" - " VALUES (%u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u) \n", - Strings::ToUnsignedInt(row2[0]), - dbpc->items[i].equipSlot, - dbpc->items[i].item_id, - dbpc->items[i].charges, - dbpc->items[i].aug1, - dbpc->items[i].aug2, - dbpc->items[i].aug3, - dbpc->items[i].aug4, - dbpc->items[i].aug5, - dbpc->items[i].aug6, - dbpc->items[i].attuned - ); - first_entry = 1; - } - else{ - scquery = scquery + StringFormat(", (%u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u) \n", - Strings::ToUnsignedInt(row2[0]), - dbpc->items[i].equipSlot, - dbpc->items[i].item_id, - dbpc->items[i].charges, - dbpc->items[i].aug1, - dbpc->items[i].aug2, - dbpc->items[i].aug3, - dbpc->items[i].aug4, - dbpc->items[i].aug5, - dbpc->items[i].aug6, - dbpc->items[i].attuned - ); - } - } - if (scquery != ""){ auto sc_results = QueryDatabase(scquery); } - } - else{ - /* Classic Converter */ - scquery = StringFormat("UPDATE `character_corpses` SET \n" - "`is_locked` = %d,\n" - "`exp` = %u,\n" - "`size` = %f,\n" - "`level` = %u,\n" - "`race` = %u,\n" - "`gender` = %u,\n" - "`class` = %u,\n" - "`deity` = %u,\n" - "`texture` = %u,\n" - "`helm_texture` = %u,\n" - "`copper` = %u,\n" - "`silver` = %u,\n" - "`gold` = %u,\n" - "`platinum` = %u,\n" - "`hair_color` = %u,\n" - "`beard_color` = %u,\n" - "`eye_color_1` = %u,\n" - "`eye_color_2` = %u,\n" - "`hair_style` = %u,\n" - "`face` = %u,\n" - "`beard` = %u,\n" - "`wc_1` = %u,\n" - "`wc_2` = %u,\n" - "`wc_3` = %u,\n" - "`wc_4` = %u,\n" - "`wc_5` = %u,\n" - "`wc_6` = %u,\n" - "`wc_7` = %u,\n" - "`wc_8` = %u,\n" - "`wc_9` = %u \n" - "WHERE `id` = %u \n", - dbpc_c->locked, - dbpc_c->exp, - dbpc_c->size, - dbpc_c->level, - dbpc_c->race, - dbpc_c->gender, - dbpc_c->class_, - dbpc_c->deity, - dbpc_c->texture, - dbpc_c->helmtexture, - dbpc_c->copper, - dbpc_c->silver, - dbpc_c->gold, - dbpc_c->plat, - dbpc_c->haircolor, - dbpc_c->beardcolor, - dbpc_c->eyecolor1, - dbpc_c->eyecolor2, - dbpc_c->hairstyle, - dbpc_c->face, - dbpc_c->beard, - dbpc_c->item_tint[0].color, - dbpc_c->item_tint[1].color, - dbpc_c->item_tint[2].color, - dbpc_c->item_tint[3].color, - dbpc_c->item_tint[4].color, - dbpc_c->item_tint[5].color, - dbpc_c->item_tint[6].color, - dbpc_c->item_tint[7].color, - dbpc_c->item_tint[8].color, - Strings::ToUnsignedInt(row2[0]) - ); - if (scquery != ""){ auto sc_results = QueryDatabase(scquery); } - - first_entry = 0; - scquery = ""; - - /* Print Items */ - for (unsigned int i = 0; i < dbpc_c->itemcount; i++) { - if (first_entry != 1){ - scquery = StringFormat("REPLACE INTO `character_corpse_items` \n" - " (corpse_id, equip_slot, item_id, charges, aug_1, aug_2, aug_3, aug_4, aug_5, aug_6, attuned) \n" - " VALUES (%u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u) \n", - Strings::ToUnsignedInt(row2[0]), - dbpc_c->items[i].equipSlot, - dbpc_c->items[i].item_id, - dbpc_c->items[i].charges, - dbpc_c->items[i].aug1, - dbpc_c->items[i].aug2, - dbpc_c->items[i].aug3, - dbpc_c->items[i].aug4, - dbpc_c->items[i].aug5, - dbpc_c->items[i].aug6, - dbpc_c->items[i].attuned - ); - first_entry = 1; - } - else{ - scquery = scquery + StringFormat(", (%u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u) \n", - Strings::ToUnsignedInt(row2[0]), - dbpc_c->items[i].equipSlot, - dbpc_c->items[i].item_id, - dbpc_c->items[i].charges, - dbpc_c->items[i].aug1, - dbpc_c->items[i].aug2, - dbpc_c->items[i].aug3, - dbpc_c->items[i].aug4, - dbpc_c->items[i].aug5, - dbpc_c->items[i].aug6, - dbpc_c->items[i].attuned - ); - } - } - if (scquery != ""){ auto sc_results = QueryDatabase(scquery); } - } - } - } - QueryDatabase(StringFormat("ALTER TABLE `character_corpses` DROP COLUMN `data`")); - } - return true; -} diff --git a/common/database_instances.cpp b/common/database_instances.cpp index 36e6a7893..4b2992303 100644 --- a/common/database_instances.cpp +++ b/common/database_instances.cpp @@ -429,8 +429,6 @@ void Database::AssignRaidToInstance(uint32 raid_id, uint32 instance_id) void Database::DeleteInstance(uint16 instance_id) { - std::string query; - InstanceListPlayerRepository::DeleteWhere(*this, fmt::format("id = {}", instance_id)); RespawnTimesRepository::DeleteWhere(*this, fmt::format("instance_id = {}", instance_id)); diff --git a/common/database_schema.h b/common/database_schema.h index 3f6e7434e..43a95c77a 100644 --- a/common/database_schema.h +++ b/common/database_schema.h @@ -68,7 +68,7 @@ namespace DatabaseSchema { {"character_spells", "id"}, {"character_task_timers", "character_id"}, {"character_tasks", "charid"}, - {"character_tribute", "id"}, + {"character_tribute", "character_id"}, {"completed_tasks", "charid"}, {"data_buckets", "id"}, {"faction_values", "char_id"}, @@ -256,6 +256,7 @@ namespace DatabaseSchema { { return { "chatchannels", + "chatchannel_reserved_names", "command_settings", "content_flags", "db_str", @@ -392,9 +393,6 @@ namespace DatabaseSchema { "bot_command_settings", "bot_create_combinations", "bot_data", - "bot_group_members", - "bot_groups", - "bot_guild_members", "bot_heal_rotation_members", "bot_heal_rotation_targets", "bot_heal_rotations", diff --git a/common/dbcore.cpp b/common/dbcore.cpp index 9b9108f0c..1db87afac 100644 --- a/common/dbcore.cpp +++ b/common/dbcore.cpp @@ -13,6 +13,7 @@ #include #include #include +#include "strings.h" #ifdef _WINDOWS #define snprintf _snprintf @@ -74,13 +75,13 @@ void DBcore::ping() m_mutex->unlock(); } -MySQLRequestResult DBcore::QueryDatabase(std::string query, bool retryOnFailureOnce) +MySQLRequestResult DBcore::QueryDatabase(const std::string& query, bool retryOnFailureOnce) { auto r = QueryDatabase(query.c_str(), query.length(), retryOnFailureOnce); return r; } -bool DBcore::DoesTableExist(std::string table_name) +bool DBcore::DoesTableExist(const std::string& table_name) { auto results = QueryDatabase(fmt::format("SHOW TABLES LIKE '{}'", table_name)); @@ -136,7 +137,7 @@ MySQLRequestResult DBcore::QueryDatabase(const char *query, uint32 querylen, boo /** * Error logging */ - if (mysql_errno(mysql) > 0 && strlen(query) > 0) { + if (mysql_errno(mysql) > 0 && query[0] != '\0') { LogMySQLError("[{}] [{}]\n[{}]", mysql_errno(mysql), mysql_error(mysql), query); } @@ -305,3 +306,130 @@ void DBcore::SetMutex(Mutex *mutex) DBcore::m_mutex = mutex; } + +// executes multiple statements in one query +// do not use this in application logic +// this was built and maintained for database migrations only +MySQLRequestResult DBcore::QueryDatabaseMulti(const std::string &query) +{ + SetMultiStatementsOn(); + + BenchTimer timer; + timer.reset(); + + LockMutex lock(m_mutex); + + // Reconnect if we are not connected before hand. + if (pStatus != Connected) { + Open(); + } + auto r = MySQLRequestResult{}; + + int status = mysql_real_query(mysql, query.c_str(), query.length()); + + // process single result + if (status != 0) { + unsigned int error_number = mysql_errno(mysql); + + if (error_number == CR_SERVER_GONE_ERROR) { + pStatus = Error; + } + + // error logging + if (mysql_errno(mysql) > 0 && query.length() > 0 && mysql_errno(mysql) != 1065) { + std::string error_raw = fmt::format("{}", mysql_error(mysql)); + std::string mysql_err = Strings::Trim(error_raw); + std::string clean_query = Strings::Replace(query, "\n", ""); + LogMySQLError("[{}] ({}) query [{}]", mysql_err, mysql_errno(mysql), clean_query); + + MYSQL_RES *res = mysql_store_result(mysql); + + uint32 row_count = 0; + if (res) { + row_count = (uint32) mysql_num_rows(res); + } + + r = MySQLRequestResult( + res, + (uint32) mysql_affected_rows(mysql), + row_count, + (uint32) mysql_field_count(mysql), + (uint32) mysql_insert_id(mysql) + ); + + std::string error_message = mysql_error(mysql); + r.SetErrorMessage(error_message); + r.SetErrorNumber(mysql_errno(mysql)); + + if (res) { + mysql_free_result(res); + } + + return r; + } + } + + + int index = 0; + + // there could be a query with a semicolon in the actual data, this is best effort for + // logging / display purposes + // rare that we see this when this is only used in DDL statements + auto pieces = Strings::Split(query, ";"); + + // process each statement result + do { + uint32 row_count = 0; + MYSQL_RES *res = mysql_store_result(mysql); + + r = MySQLRequestResult( + res, + (uint32) mysql_affected_rows(mysql), + row_count, + (uint32) mysql_field_count(mysql), + (uint32) mysql_insert_id(mysql) + ); + + if (pieces.size() >= index) { + auto piece = pieces[index]; + LogMySQLQuery( + "{} -- ({} row{} affected) ({}s)", + piece, + r.RowsAffected(), + r.RowsAffected() == 1 ? "" : "s", + std::to_string(timer.elapsed()) + ); + } + + if (res) { + row_count = (uint32) mysql_num_rows(res); + } + + // more results? -1 = no, >0 = error, 0 = yes (keep looping) + if ((status = mysql_next_result(mysql)) > 0) { + if (mysql_errno(mysql) > 0) { + LogMySQLError("[{}] [{}]", mysql_errno(mysql), mysql_error(mysql)); + } + + mysql_free_result(res); + + // error logging + std::string error_message = mysql_error(mysql); + r.SetErrorMessage(error_message); + r.SetErrorNumber(mysql_errno(mysql)); + + // we handle errors elsewhere + return r; + } + + if (res) { + mysql_free_result(res); + } + + index++; + } while (status == 0); + + SetMultiStatementsOff(); + + return r; +} diff --git a/common/dbcore.h b/common/dbcore.h index c1e28bb42..30f5d1304 100644 --- a/common/dbcore.h +++ b/common/dbcore.h @@ -24,7 +24,8 @@ public: ~DBcore(); eStatus GetStatus() { return pStatus; } MySQLRequestResult QueryDatabase(const char *query, uint32 querylen, bool retryOnFailureOnce = true); - MySQLRequestResult QueryDatabase(std::string query, bool retryOnFailureOnce = true); + MySQLRequestResult QueryDatabase(const std::string& query, bool retryOnFailureOnce = true); + MySQLRequestResult QueryDatabaseMulti(const std::string &query); void TransactionBegin(); void TransactionCommit(); void TransactionRollback(); @@ -35,7 +36,7 @@ public: const std::string &GetOriginHost() const; void SetOriginHost(const std::string &origin_host); - bool DoesTableExist(std::string table_name); + bool DoesTableExist(const std::string& table_name); void SetMySQL(const DBcore &o) { @@ -77,8 +78,20 @@ private: uint32 pPort; bool pSSL; + // allows multiple queries to be executed within the same query + // do not use this under normal operation + // we use this during database migrations only currently + void SetMultiStatementsOn() + { + mysql_set_server_option(mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON); + } + + // disables multiple statements to be executed in one query + void SetMultiStatementsOff() + { + mysql_set_server_option(mysql, MYSQL_OPTION_MULTI_STATEMENTS_OFF); + } }; #endif - diff --git a/common/discord/discord.cpp b/common/discord/discord.cpp index e06311035..ec75e0560 100644 --- a/common/discord/discord.cpp +++ b/common/discord/discord.cpp @@ -27,9 +27,6 @@ void Discord::SendWebhookMessage(const std::string &message, const std::string & cli.set_connection_timeout(0, 15000000); // 15 sec cli.set_read_timeout(15, 0); // 15 seconds cli.set_write_timeout(15, 0); // 15 seconds - httplib::Headers headers = { - {"Content-Type", "application/json"} - }; // payload Json::Value p; @@ -96,9 +93,6 @@ void Discord::SendPlayerEventMessage( cli.set_connection_timeout(0, 15000000); // 15 sec cli.set_read_timeout(15, 0); // 15 seconds cli.set_write_timeout(15, 0); // 15 seconds - httplib::Headers headers = { - {"Content-Type", "application/json"} - }; std::string payload = PlayerEventLogs::GetDiscordPayloadFromEvent(e); if (payload.empty()) { diff --git a/common/discord/discord_manager.cpp b/common/discord/discord_manager.cpp index e8691e763..a425d4c34 100644 --- a/common/discord/discord_manager.cpp +++ b/common/discord/discord_manager.cpp @@ -37,7 +37,7 @@ void DiscordManager::ProcessMessageQueue() message, webhook.webhook_url ); - message = ""; + message.clear(); } message += m; @@ -51,7 +51,7 @@ void DiscordManager::ProcessMessageQueue() webhook.webhook_url ); } - message = ""; + message.clear(); } } // final flush diff --git a/common/emu_constants.cpp b/common/emu_constants.cpp index 4d60b4297..69fcb1a27 100644 --- a/common/emu_constants.cpp +++ b/common/emu_constants.cpp @@ -197,11 +197,11 @@ const std::map& EQ::constants::GetLanguageMap() std::string EQ::constants::GetLanguageName(int language_id) { - if (EQ::ValueWithin(language_id, LANG_COMMON_TONGUE, LANG_UNKNOWN)) { - return EQ::constants::GetLanguageMap().find(language_id)->second; + if (!EQ::ValueWithin(language_id, LANG_COMMON_TONGUE, LANG_UNKNOWN)) { + return std::string(); } - return std::string(); + return EQ::constants::GetLanguageMap().find(language_id)->second; } const std::map& EQ::constants::GetLDoNThemeMap() @@ -220,11 +220,11 @@ const std::map& EQ::constants::GetLDoNThemeMap() std::string EQ::constants::GetLDoNThemeName(uint32 theme_id) { - if (EQ::ValueWithin(theme_id, LDoNThemes::Unused, LDoNThemes::TAK)) { - return EQ::constants::GetLDoNThemeMap().find(theme_id)->second; + if (!EQ::ValueWithin(theme_id, LDoNThemes::Unused, LDoNThemes::TAK)) { + return std::string(); } - return std::string(); + return EQ::constants::GetLDoNThemeMap().find(theme_id)->second; } const std::map& EQ::constants::GetFlyModeMap() @@ -243,11 +243,11 @@ const std::map& EQ::constants::GetFlyModeMap() std::string EQ::constants::GetFlyModeName(int8 flymode_id) { - if (EQ::ValueWithin(flymode_id, GravityBehavior::Ground, GravityBehavior::LevitateWhileRunning)) { - return EQ::constants::GetFlyModeMap().find(flymode_id)->second; + if (!EQ::ValueWithin(flymode_id, GravityBehavior::Ground, GravityBehavior::LevitateWhileRunning)) { + return std::string(); } - return std::string(); + return EQ::constants::GetFlyModeMap().find(flymode_id)->second; } const std::map& EQ::constants::GetBodyTypeMap() @@ -365,11 +365,11 @@ const std::map& EQ::constants::GetConsiderLevelMap() std::string EQ::constants::GetConsiderLevelName(uint8 faction_consider_level) { - if (EQ::constants::GetConsiderLevelMap().find(faction_consider_level) != EQ::constants::GetConsiderLevelMap().end()) { - return EQ::constants::GetConsiderLevelMap().find(faction_consider_level)->second; + if (!EQ::ValueWithin(faction_consider_level, ConsiderLevel::Ally, ConsiderLevel::Scowls)) { + return std::string();; } - return std::string(); + return EQ::constants::GetConsiderLevelMap().find(faction_consider_level)->second; } const std::map& EQ::constants::GetEnvironmentalDamageMap() @@ -386,11 +386,11 @@ const std::map& EQ::constants::GetEnvironmentalDamageMap() std::string EQ::constants::GetEnvironmentalDamageName(uint8 damage_type) { - if (EQ::ValueWithin(damage_type, EnvironmentalDamage::Lava, EnvironmentalDamage::Trap)) { - return EQ::constants::GetEnvironmentalDamageMap().find(damage_type)->second; + if (!EQ::ValueWithin(damage_type, EnvironmentalDamage::Lava, EnvironmentalDamage::Trap)) { + return std::string(); } - return std::string(); + return EQ::constants::GetEnvironmentalDamageMap().find(damage_type)->second; } const std::map& EQ::constants::GetStuckBehaviorMap() @@ -407,11 +407,11 @@ const std::map& EQ::constants::GetStuckBehaviorMap() std::string EQ::constants::GetStuckBehaviorName(uint8 behavior_id) { - if (EQ::ValueWithin(behavior_id, StuckBehavior::RunToTarget, StuckBehavior::EvadeCombat)) { - return EQ::constants::GetStuckBehaviorMap().find(behavior_id)->second; + if (!EQ::ValueWithin(behavior_id, StuckBehavior::RunToTarget, StuckBehavior::EvadeCombat)) { + return std::string(); } - return std::string(); + return EQ::constants::GetStuckBehaviorMap().find(behavior_id)->second; } const std::map& EQ::constants::GetSpawnAnimationMap() @@ -429,11 +429,11 @@ const std::map& EQ::constants::GetSpawnAnimationMap() std::string EQ::constants::GetSpawnAnimationName(uint8 animation_id) { - if (EQ::ValueWithin(animation_id, SpawnAnimations::Standing, SpawnAnimations::Looting)) { - return EQ::constants::GetSpawnAnimationMap().find(animation_id)->second; + if (!EQ::ValueWithin(animation_id, SpawnAnimations::Standing, SpawnAnimations::Looting)) { + return std::string(); } - return std::string(); + return EQ::constants::GetSpawnAnimationMap().find(animation_id)->second; } const std::map& EQ::constants::GetObjectTypeMap() @@ -507,11 +507,12 @@ const std::map& EQ::constants::GetObjectTypeMap() std::string EQ::constants::GetObjectTypeName(int object_type) { - if (EQ::ValueWithin(object_type, ObjectTypes::SmallBag, ObjectTypes::NoDeposit)) { - return EQ::constants::GetObjectTypeMap().find(object_type)->second; + if (!EQ::ValueWithin(object_type, ObjectTypes::SmallBag, ObjectTypes::NoDeposit)) { + return std::string(); + } - return std::string(); + return EQ::constants::GetObjectTypeMap().find(object_type)->second; } const std::map &EQ::constants::GetWeatherTypeMap() @@ -527,11 +528,11 @@ const std::map &EQ::constants::GetWeatherTypeMap() std::string EQ::constants::GetWeatherTypeName(uint8 weather_type) { - if (EQ::ValueWithin(weather_type, WeatherTypes::None, WeatherTypes::Snowing)) { - return EQ::constants::GetWeatherTypeMap().find(weather_type)->second; + if (!EQ::ValueWithin(weather_type, WeatherTypes::None, WeatherTypes::Snowing)) { + return std::string(); } - return std::string(); + return EQ::constants::GetWeatherTypeMap().find(weather_type)->second; } const std::map &EQ::constants::GetEmoteEventTypeMap() @@ -553,11 +554,11 @@ const std::map &EQ::constants::GetEmoteEventTypeMap() std::string EQ::constants::GetEmoteEventTypeName(uint8 emote_event_type) { - if (EQ::ValueWithin(emote_event_type, EmoteEventTypes::LeaveCombat, EmoteEventTypes::OnDespawn)) { - return EQ::constants::GetEmoteEventTypeMap().find(emote_event_type)->second; + if (!EQ::ValueWithin(emote_event_type, EmoteEventTypes::LeaveCombat, EmoteEventTypes::OnDespawn)) { + return std::string(); } - return std::string(); + return EQ::constants::GetEmoteEventTypeMap().find(emote_event_type)->second; } const std::map &EQ::constants::GetEmoteTypeMap() @@ -573,9 +574,9 @@ const std::map &EQ::constants::GetEmoteTypeMap() std::string EQ::constants::GetEmoteTypeName(uint8 emote_type) { - if (EQ::ValueWithin(emote_type, EmoteTypes::Emote, EmoteTypes::Proximity)) { - return EQ::constants::GetEmoteTypeMap().find(emote_type)->second; + if (!EQ::ValueWithin(emote_type, EmoteTypes::Emote, EmoteTypes::Proximity)) { + return std::string(); } - return std::string(); + return EQ::constants::GetEmoteTypeMap().find(emote_type)->second; } diff --git a/common/eq_constants.h b/common/eq_constants.h index ae2cce84b..b266b3905 100644 --- a/common/eq_constants.h +++ b/common/eq_constants.h @@ -1045,4 +1045,11 @@ enum ResurrectionActions Accept }; +enum ScribeSpellActions +{ + Scribe, + Memorize, + Unmemorize +}; + #endif /*COMMON_EQ_CONSTANTS_H*/ diff --git a/common/eq_limits.h b/common/eq_limits.h index fe944c816..40b095b15 100644 --- a/common/eq_limits.h +++ b/common/eq_limits.h @@ -129,7 +129,7 @@ namespace EQ LookupEntry(const LookupEntry *lookup_entry) { } LookupEntry( - InventoryTypeSize_Struct InventoryTypeSize, + const InventoryTypeSize_Struct& InventoryTypeSize, uint64 EquipmentBitmask, uint64 GeneralBitmask, uint64 CursorBitmask, diff --git a/common/eq_packet.cpp b/common/eq_packet.cpp index f5c08a301..b2c3f6062 100644 --- a/common/eq_packet.cpp +++ b/common/eq_packet.cpp @@ -236,26 +236,6 @@ uint32 EQApplicationPacket::serialize(uint16 opcode, unsigned char *dest) const return size+OpCodeBytes; } -/*EQProtocolPacket::EQProtocolPacket(uint16 op, const unsigned char *buf, uint32 len) -: BasePacket(buf, len), - opcode(op) -{ - -uint32 offset; - opcode=ntohs(*(const uint16 *)buf); - offset=2; - - if (len-offset) { - pBuffer= new unsigned char[len-offset]; - memcpy(pBuffer,buf+offset,len-offset); - size=len-offset; - } else { - pBuffer=nullptr; - size=0; - } - OpMgr=&RawOpcodeManager; -}*/ - bool EQProtocolPacket::combine(const EQProtocolPacket *rhs) { bool result=false; @@ -287,74 +267,6 @@ bool result=false; } -/* -this is the code to do app-layer combining, instead of protocol layer. -this was taken out due to complex interactions with the opcode manager, -and will require a bit more thinking (likely moving into EQStream) to -get running again... but might be a good thing some day. - -bool EQApplicationPacket::combine(const EQApplicationPacket *rhs) -{ -uint32 newsize=0, offset=0; -unsigned char *tmpbuffer=nullptr; - - if (opcode!=OP_AppCombined) { - newsize=app_opcode_size+size+(size>254?3:1)+app_opcode_size+rhs->size+(rhs->size>254?3:1); - tmpbuffer=new unsigned char [newsize]; - offset=0; - if (size>254) { - tmpbuffer[offset++]=0xff; - *(uint16 *)(tmpbuffer+offset)=htons(size); - offset+=1; - } else { - tmpbuffer[offset++]=size; - } - offset+=serialize(tmpbuffer+offset); - } else { - newsize=size+app_opcode_size+rhs->size+(rhs->size>254?3:1); - tmpbuffer=new unsigned char [newsize]; - memcpy(tmpbuffer,pBuffer,size); - offset=size; - } - - if (rhs->size>254) { - tmpbuffer[offset++]=0xff; - *(uint16 *)(tmpbuffer+offset)=htons(rhs->size); - offset+=1; - } else { - tmpbuffer[offset++]=rhs->size; - } - offset+=rhs->serialize(tmpbuffer+offset); - - size=offset; - opcode=OP_AppCombined; - - delete[] pBuffer; - pBuffer=tmpbuffer; - - return true; -} -*/ - -bool EQProtocolPacket::ValidateCRC(const unsigned char *buffer, int length, uint32 Key) -{ -bool valid=false; - // OP_SessionRequest, OP_SessionResponse, OP_OutOfSession are not CRC'd - if (buffer[0]==0x00 && (buffer[1]==OP_SessionRequest || buffer[1]==OP_SessionResponse || buffer[1]==OP_OutOfSession)) { - valid=true; - } else { - uint16 comp_crc=CRC16(buffer,length-2,Key); - uint16 packet_crc=ntohs(*(const uint16 *)(buffer+length-2)); -#ifdef EQN_DEBUG - if (packet_crc && comp_crc != packet_crc) { - std::cout << "CRC mismatch: comp=" << std::hex << comp_crc << ", packet=" << packet_crc << std::dec << std::endl; - } -#endif - valid = (!packet_crc || comp_crc == packet_crc); - } - return valid; -} - uint32 EQProtocolPacket::Decompress(const unsigned char *buffer, const uint32 length, unsigned char *newbuf, uint32 newbufsize) { uint32 newlen=0; @@ -403,55 +315,6 @@ uint32 flag_offset=1,newlength; return newlength; } -void EQProtocolPacket::ChatDecode(unsigned char *buffer, int size, int DecodeKey) -{ - if ((size >= 2) && buffer[1]!=0x01 && buffer[0]!=0x02 && buffer[0]!=0x1d) { - int Key=DecodeKey; - unsigned char *test=(unsigned char *)malloc(size); - buffer+=2; - size-=2; - - int i; - for (i = 0 ; i+4 <= size ; i+=4) - { - int pt = (*(int*)&buffer[i])^(Key); - Key = (*(int*)&buffer[i]); - *(int*)&test[i]=pt; - } - unsigned char KC=Key&0xFF; - for ( ; i < size ; i++) - { - test[i]=buffer[i]^KC; - } - memcpy(buffer,test,size); - free(test); - } -} - -void EQProtocolPacket::ChatEncode(unsigned char *buffer, int size, int EncodeKey) -{ - if (buffer[1]!=0x01 && buffer[0]!=0x02 && buffer[0]!=0x1d) { - int Key=EncodeKey; - char *test=(char*)malloc(size); - int i; - buffer+=2; - size-=2; - for ( i = 0 ; i+4 <= size ; i+=4) - { - int pt = (*(int*)&buffer[i])^(Key); - Key = pt; - *(int*)&test[i]=pt; - } - unsigned char KC=Key&0xFF; - for ( ; i < size ; i++) - { - test[i]=buffer[i]^KC; - } - memcpy(buffer,test,size); - free(test); - } -} - EQApplicationPacket *EQApplicationPacket::Copy() const { return(new EQApplicationPacket(*this)); } @@ -515,4 +378,4 @@ std::string DumpPacketToString(const EQApplicationPacket* app){ std::ostringstream out; out << DumpPacketHexToString(app->pBuffer, app->size); return out.str(); -} \ No newline at end of file +} diff --git a/common/eq_packet.h b/common/eq_packet.h index 77b76b450..7eb79a75b 100644 --- a/common/eq_packet.h +++ b/common/eq_packet.h @@ -80,11 +80,8 @@ public: protected: - static bool ValidateCRC(const unsigned char *buffer, int length, uint32 Key); static uint32 Decompress(const unsigned char *buffer, const uint32 length, unsigned char *newbuf, uint32 newbufsize); static uint32 Compress(const unsigned char *buffer, const uint32 length, unsigned char *newbuf, uint32 newbufsize); - static void ChatDecode(unsigned char *buffer, int size, int DecodeKey); - static void ChatEncode(unsigned char *buffer, int size, int EncodeKey); uint16 GetRawOpcode() const { return(opcode); } diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index f152e4dc4..3e8f12694 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -1793,6 +1793,17 @@ struct GMSummon_Struct { /*104*/ uint32 unknown2; // E0 E0 56 00 }; +struct GMFind_Struct { + char charname[64]; + char gmname[64]; + uint32 success; + uint32 zoneID; + float x; + float y; + float z; + uint32 unknown2; +}; + struct GMGoto_Struct { // x,y is swapped as compared to summon and makes sense as own packet /* 0*/ char charname[64]; diff --git a/common/eq_stream_ident.cpp b/common/eq_stream_ident.cpp index 8222e471a..8668b7220 100644 --- a/common/eq_stream_ident.cpp +++ b/common/eq_stream_ident.cpp @@ -26,7 +26,7 @@ EQStreamIdentifier::~EQStreamIdentifier() { } } -void EQStreamIdentifier::RegisterPatch(const EQStreamInterface::Signature &sig, const char *name, OpcodeManager ** opcodes, const StructStrategy *structs) { +void EQStreamIdentifier::RegisterPatch(EQStreamInterface::Signature sig, const char *name, OpcodeManager ** opcodes, const StructStrategy *structs) { auto p = new Patch; p->signature = sig; p->name = name; @@ -145,7 +145,7 @@ void EQStreamIdentifier::Process() { } void EQStreamIdentifier::AddStream(std::shared_ptr eqs) { - m_streams.push_back(Record(eqs)); + m_streams.emplace_back(Record(eqs)); eqs = nullptr; } diff --git a/common/eq_stream_ident.h b/common/eq_stream_ident.h index 483d48372..e34db5879 100644 --- a/common/eq_stream_ident.h +++ b/common/eq_stream_ident.h @@ -18,7 +18,7 @@ public: ~EQStreamIdentifier(); //registration interface. - void RegisterPatch(const EQStreamInterface::Signature &sig, const char *name, OpcodeManager ** opcodes, const StructStrategy *structs); + void RegisterPatch(EQStreamInterface::Signature sig, const char *name, OpcodeManager ** opcodes, const StructStrategy *structs); //main processing interface void Process(); diff --git a/common/eqdb.cpp b/common/eqdb.cpp index a94be7768..74af89473 100644 --- a/common/eqdb.cpp +++ b/common/eqdb.cpp @@ -23,9 +23,6 @@ EQDB EQDB::s_EQDB; -EQDB::EQDB() { -} - unsigned int EQDB::field_count() { return mysql_field_count(mysql_ref); } diff --git a/common/eqdb.h b/common/eqdb.h index b07517b69..86000db8b 100644 --- a/common/eqdb.h +++ b/common/eqdb.h @@ -27,7 +27,7 @@ //this is the main object exported to perl. class EQDB { - EQDB(); + EQDB() = default; public: static EQDB *Singleton() { return(&s_EQDB); } diff --git a/common/eqemu_config.cpp b/common/eqemu_config.cpp index becae656e..c5c540f44 100644 --- a/common/eqemu_config.cpp +++ b/common/eqemu_config.cpp @@ -34,13 +34,13 @@ void EQEmuConfig::parse_config() LongName = _root["server"]["world"].get("longname", "").asString(); WorldAddress = _root["server"]["world"].get("address", "").asString(); LocalAddress = _root["server"]["world"].get("localaddress", "").asString(); - MaxClients = Strings::ToInt(_root["server"]["world"].get("maxclients", "-1").asString().c_str()); + MaxClients = Strings::ToInt(_root["server"]["world"].get("maxclients", "-1").asString()); SharedKey = _root["server"]["world"].get("key", "").asString(); LoginCount = 0; if (_root["server"]["world"]["loginserver"].isObject()) { LoginHost = _root["server"]["world"]["loginserver"].get("host", "login.eqemulator.net").asString(); - LoginPort = Strings::ToUnsignedInt(_root["server"]["world"]["loginserver"].get("port", "5998").asString().c_str()); + LoginPort = Strings::ToUnsignedInt(_root["server"]["world"]["loginserver"].get("port", "5998").asString()); LoginLegacy = false; if (_root["server"]["world"]["loginserver"].get("legacy", "0").asString() == "1") { LoginLegacy = true; } LoginAccount = _root["server"]["world"]["loginserver"].get("account", "").asString(); @@ -63,7 +63,7 @@ void EQEmuConfig::parse_config() auto loginconfig = new LoginConfig; loginconfig->LoginHost = _root["server"]["world"][str].get("host", "login.eqemulator.net").asString(); - loginconfig->LoginPort = Strings::ToUnsignedInt(_root["server"]["world"][str].get("port", "5998").asString().c_str()); + loginconfig->LoginPort = Strings::ToUnsignedInt(_root["server"]["world"][str].get("port", "5998").asString()); loginconfig->LoginAccount = _root["server"]["world"][str].get("account", "").asString(); loginconfig->LoginPassword = _root["server"]["world"][str].get("password", "").asString(); @@ -85,16 +85,22 @@ void EQEmuConfig::parse_config() //The only way to enable locked is by switching to true, meaning this value is always false until manually set true Locked = false; if (_root["server"]["world"].get("locked", "false").asString() == "true") { Locked = true; } + + auto_database_updates = false; + if (_root["server"].get("auto_database_updates", "true").asString() == "true") { + auto_database_updates = true; + } + WorldIP = _root["server"]["world"]["tcp"].get("host", "127.0.0.1").asString(); - WorldTCPPort = Strings::ToUnsignedInt(_root["server"]["world"]["tcp"].get("port", "9000").asString().c_str()); + WorldTCPPort = Strings::ToUnsignedInt(_root["server"]["world"]["tcp"].get("port", "9000").asString()); TelnetIP = _root["server"]["world"]["telnet"].get("ip", "127.0.0.1").asString(); - TelnetTCPPort = Strings::ToUnsignedInt(_root["server"]["world"]["telnet"].get("port", "9001").asString().c_str()); + TelnetTCPPort = Strings::ToUnsignedInt(_root["server"]["world"]["telnet"].get("port", "9001").asString()); TelnetEnabled = false; if (_root["server"]["world"]["telnet"].get("enabled", "false").asString() == "true") { TelnetEnabled = true; } WorldHTTPMimeFile = _root["server"]["world"]["http"].get("mimefile", "mime.types").asString(); - WorldHTTPPort = Strings::ToUnsignedInt(_root["server"]["world"]["http"].get("port", "9080").asString().c_str()); + WorldHTTPPort = Strings::ToUnsignedInt(_root["server"]["world"]["http"].get("port", "9080").asString()); WorldHTTPEnabled = false; if (_root["server"]["world"]["http"].get("enabled", "false").asString() == "true") { @@ -109,9 +115,9 @@ void EQEmuConfig::parse_config() * UCS */ ChatHost = _root["server"]["chatserver"].get("host", "eqchat.eqemulator.net").asString(); - ChatPort = Strings::ToUnsignedInt(_root["server"]["chatserver"].get("port", "7778").asString().c_str()); + ChatPort = Strings::ToUnsignedInt(_root["server"]["chatserver"].get("port", "7778").asString()); MailHost = _root["server"]["mailserver"].get("host", "eqmail.eqemulator.net").asString(); - MailPort = Strings::ToUnsignedInt(_root["server"]["mailserver"].get("port", "7778").asString().c_str()); + MailPort = Strings::ToUnsignedInt(_root["server"]["mailserver"].get("port", "7778").asString()); /** * Database @@ -119,7 +125,7 @@ void EQEmuConfig::parse_config() DatabaseUsername = _root["server"]["database"].get("username", "eq").asString(); DatabasePassword = _root["server"]["database"].get("password", "eq").asString(); DatabaseHost = _root["server"]["database"].get("host", "localhost").asString(); - DatabasePort = Strings::ToUnsignedInt(_root["server"]["database"].get("port", "3306").asString().c_str()); + DatabasePort = Strings::ToUnsignedInt(_root["server"]["database"].get("port", "3306").asString()); DatabaseDB = _root["server"]["database"].get("db", "eq").asString(); /** @@ -128,14 +134,14 @@ void EQEmuConfig::parse_config() ContentDbUsername = _root["server"]["content_database"].get("username", "").asString(); ContentDbPassword = _root["server"]["content_database"].get("password", "").asString(); ContentDbHost = _root["server"]["content_database"].get("host", "").asString(); - ContentDbPort = Strings::ToUnsignedInt(_root["server"]["content_database"].get("port", 0).asString().c_str()); + ContentDbPort = Strings::ToUnsignedInt(_root["server"]["content_database"].get("port", 0).asString()); ContentDbName = _root["server"]["content_database"].get("db", "").asString(); /** * QS */ QSDatabaseHost = _root["server"]["qsdatabase"].get("host", "localhost").asString(); - QSDatabasePort = Strings::ToUnsignedInt(_root["server"]["qsdatabase"].get("port", "3306").asString().c_str()); + QSDatabasePort = Strings::ToUnsignedInt(_root["server"]["qsdatabase"].get("port", "3306").asString()); QSDatabaseUsername = _root["server"]["qsdatabase"].get("username", "eq").asString(); QSDatabasePassword = _root["server"]["qsdatabase"].get("password", "eq").asString(); QSDatabaseDB = _root["server"]["qsdatabase"].get("db", "eq").asString(); @@ -143,9 +149,9 @@ void EQEmuConfig::parse_config() /** * Zones */ - DefaultStatus = Strings::ToUnsignedInt(_root["server"]["zones"].get("defaultstatus", 0).asString().c_str()); - ZonePortLow = Strings::ToUnsignedInt(_root["server"]["zones"]["ports"].get("low", "7000").asString().c_str()); - ZonePortHigh = Strings::ToUnsignedInt(_root["server"]["zones"]["ports"].get("high", "7999").asString().c_str()); + DefaultStatus = Strings::ToUnsignedInt(_root["server"]["zones"].get("defaultstatus", 0).asString()); + ZonePortLow = Strings::ToUnsignedInt(_root["server"]["zones"]["ports"].get("low", "7000").asString()); + ZonePortHigh = Strings::ToUnsignedInt(_root["server"]["zones"]["ports"].get("high", "7999").asString()); /** * Files @@ -175,10 +181,10 @@ void EQEmuConfig::parse_config() /** * Launcher */ - RestartWait = Strings::ToInt(_root["server"]["launcher"]["timers"].get("restart", "10000").asString().c_str()); - TerminateWait = Strings::ToInt(_root["server"]["launcher"]["timers"].get("reterminate", "10000").asString().c_str()); - InitialBootWait = Strings::ToInt(_root["server"]["launcher"]["timers"].get("initial", "20000").asString().c_str()); - ZoneBootInterval = Strings::ToInt(_root["server"]["launcher"]["timers"].get("interval", "2000").asString().c_str()); + RestartWait = Strings::ToInt(_root["server"]["launcher"]["timers"].get("restart", "10000").asString()); + TerminateWait = Strings::ToInt(_root["server"]["launcher"]["timers"].get("reterminate", "10000").asString()); + InitialBootWait = Strings::ToInt(_root["server"]["launcher"]["timers"].get("initial", "20000").asString()); + ZoneBootInterval = Strings::ToInt(_root["server"]["launcher"]["timers"].get("interval", "2000").asString()); #ifdef WIN32 ZoneExe = _root["server"]["launcher"].get("exe", "zone.exe").asString(); #else diff --git a/common/eqemu_config.h b/common/eqemu_config.h index d0434399a..ff8788f3e 100644 --- a/common/eqemu_config.h +++ b/common/eqemu_config.h @@ -120,6 +120,8 @@ class EQEmuConfig uint16 ZonePortHigh; uint8 DefaultStatus; + bool auto_database_updates; + // uint16 DynamicCount; // map StaticZones; @@ -147,12 +149,6 @@ class EQEmuConfig return (_config); } - // Allow the use to set the conf file to be used. - static void SetConfigFile(std::string file) - { - EQEmuConfig::ConfigFile = file; - } - // Load the config static bool LoadConfig(const std::string& path = "") { diff --git a/common/eqemu_logsys.cpp b/common/eqemu_logsys.cpp index 078c17455..e131932ca 100644 --- a/common/eqemu_logsys.cpp +++ b/common/eqemu_logsys.cpp @@ -104,9 +104,9 @@ EQEmuLogSys *EQEmuLogSys::LoadLogSettingsDefaults() /** * RFC 5424 */ - log_settings[Logs::Error].log_to_console = static_cast(Logs::General); - log_settings[Logs::Warning].log_to_console = static_cast(Logs::General); - log_settings[Logs::Info].log_to_console = static_cast(Logs::General); + log_settings[Logs::Error].log_to_console = static_cast(Logs::General); + log_settings[Logs::Warning].log_to_console = static_cast(Logs::General); + log_settings[Logs::Info].log_to_console = static_cast(Logs::General); /** * Set Category enabled status on defaults @@ -187,9 +187,10 @@ void EQEmuLogSys::ProcessLogWrite( uint16 EQEmuLogSys::GetGMSayColorFromCategory(uint16 log_category) { switch (log_category) { + case Logs::Crash: + case Logs::Error: case Logs::MySQLError: case Logs::QuestErrors: - case Logs::Error: return Chat::Red; case Logs::MySQLQuery: case Logs::Debug: @@ -199,8 +200,6 @@ uint16 EQEmuLogSys::GetGMSayColorFromCategory(uint16 log_category) case Logs::Commands: case Logs::Mercenaries: return Chat::Magenta; - case Logs::Crash: - return Chat::Red; default: return Chat::Yellow; } @@ -220,7 +219,7 @@ void EQEmuLogSys::ProcessConsoleMessage( int line ) { - bool is_error = ( + bool is_error = ( log_category == Logs::LogCategory::Error || log_category == Logs::LogCategory::MySQLError || log_category == Logs::LogCategory::Crash || @@ -262,7 +261,7 @@ void EQEmuLogSys::ProcessConsoleMessage( } if (log_category == Logs::LogCategory::MySQLQuery) { - auto s = Strings::Split(message, "--"); + auto s = Strings::Split(message, "--"); if (s.size() > 1) { std::string query = Strings::Trim(s[0]); std::string meta = Strings::Trim(s[1]); @@ -298,19 +297,76 @@ void EQEmuLogSys::ProcessConsoleMessage( } } - if (!is_upper) { - (!is_error ? std::cout : std::cerr) - << rang::fgB::gray - << "[" - << rang::style::bold - << rang::fgB::yellow - << e - << rang::fgB::gray - << "] " - ; + // color matching in [] + // ex: [variable] would produce [variable] with red inside brackets + std::map colors = { + {"", rang::fgB::black}, + {"", rang::fgB::green}, + {"", rang::fgB::yellow}, + {"", rang::fgB::blue}, + {"", rang::fgB::magenta}, + {"", rang::fgB::cyan}, + {"", rang::fgB::gray}, + {"", rang::fgB::red}, + }; + + bool match_color = false; + for (auto &c: colors) { + if (Strings::Contains(e, c.first)) { + e = Strings::Replace(e, c.first, ""); + (!is_error ? std::cout : std::cerr) + << rang::fgB::gray + << "[" + << rang::style::bold + << c.second + << e + << rang::style::reset + << rang::fgB::gray + << "] "; + match_color = true; + } } - else { - (!is_error ? std::cout : std::cerr) << rang::fgB::gray << "[" << e << "] "; + + // string match to colors + std::map matches = { + {"missing", rang::fgB::red}, + {"error", rang::fgB::red}, + {"ok", rang::fgB::green}, + }; + + for (auto &c: matches) { + if (Strings::Contains(e, c.first)) { + (!is_error ? std::cout : std::cerr) + << rang::fgB::gray + << "[" + << rang::style::bold + << c.second + << e + << rang::style::reset + << rang::fgB::gray + << "] "; + match_color = true; + } + } + + // if we don't match a color in either the string matching or + // the color tag matching, we default to yellow inside brackets + // if uppercase, does not get colored + if (!match_color) { + if (!is_upper) { + (!is_error ? std::cout : std::cerr) + << rang::fgB::gray + << "[" + << rang::style::bold + << rang::fgB::yellow + << e + << rang::style::reset + << rang::fgB::gray + << "] "; + } + else { + (!is_error ? std::cout : std::cerr) << rang::fgB::gray << "[" << e << "] "; + } } } else { @@ -524,6 +580,8 @@ void EQEmuLogSys::StartFileLogs(const std::string &log_name) */ void EQEmuLogSys::SilenceConsoleLogging() { + std::copy(std::begin(log_settings), std::end(log_settings), std::begin(pre_silence_settings)); + for (int log_index = Logs::AA; log_index != Logs::MaxCategoryID; log_index++) { log_settings[log_index].log_to_console = 0; log_settings[log_index].is_category_enabled = 0; @@ -537,10 +595,7 @@ void EQEmuLogSys::SilenceConsoleLogging() */ void EQEmuLogSys::EnableConsoleLogging() { - for (int log_index = Logs::AA; log_index != Logs::MaxCategoryID; log_index++) { - log_settings[log_index].log_to_console = Logs::General; - log_settings[log_index].is_category_enabled = 1; - } + std::copy(std::begin(pre_silence_settings), std::end(pre_silence_settings), std::begin(log_settings)); } EQEmuLogSys *EQEmuLogSys::LoadLogDatabaseSettings() @@ -742,3 +797,16 @@ EQEmuLogSys *EQEmuLogSys::SetLogPath(const std::string &log_path) return this; } +void EQEmuLogSys::DisableMySQLErrorLogs() +{ + log_settings[Logs::MySQLError].log_to_file = 0; + log_settings[Logs::MySQLError].log_to_console = 0; + log_settings[Logs::MySQLError].log_to_gmsay = 0; +} + +void EQEmuLogSys::EnableMySQLErrorLogs() +{ + log_settings[Logs::MySQLError].log_to_file = 1; + log_settings[Logs::MySQLError].log_to_console = 1; + log_settings[Logs::MySQLError].log_to_gmsay = 1; +} diff --git a/common/eqemu_logsys.h b/common/eqemu_logsys.h index bea481a29..9e8a6811e 100644 --- a/common/eqemu_logsys.h +++ b/common/eqemu_logsys.h @@ -324,6 +324,9 @@ public: */ LogSettings log_settings[Logs::LogCategory::MaxCategoryID]{}; + // temporary bucket to re-load after silencing + LogSettings pre_silence_settings[Logs::LogCategory::MaxCategoryID]{}; + struct LogEnabled { bool log_to_file_enabled; bool log_to_console_enabled; @@ -374,6 +377,9 @@ public: [[nodiscard]] const std::string &GetLogPath() const; EQEmuLogSys * SetLogPath(const std::string &log_path); + void DisableMySQLErrorLogs(); + void EnableMySQLErrorLogs(); + private: // reference to database diff --git a/common/eqtime.cpp b/common/eqtime.cpp index 8ece4ad69..eb11d89d8 100644 --- a/common/eqtime.cpp +++ b/common/eqtime.cpp @@ -58,10 +58,6 @@ EQTime::EQTime() SetCurrentEQTimeOfDay(start, time(0)); } -EQTime::~EQTime() -{ -} - //getEQTimeOfDay - Reads timeConvert and writes the result to eqTimeOfDay //This function was written by the ShowEQ Project. //Input: Current Time (as a time_t), a pointer to the TimeOfDay_Struct that will be written to. @@ -203,4 +199,4 @@ void EQTime::ToString(TimeOfDay_Struct *t, std::string &str) { t->month, t->day, t->year, t->hour, t->minute); buf[127] = '\0'; str = buf; -} \ No newline at end of file +} diff --git a/common/eqtime.h b/common/eqtime.h index f40b855f6..4f3a95fdd 100644 --- a/common/eqtime.h +++ b/common/eqtime.h @@ -18,7 +18,7 @@ public: //Constructor/destructor EQTime(TimeOfDay_Struct start_eq, time_t start_real); EQTime(); - ~EQTime(); + ~EQTime() = default; //Get functions int GetCurrentEQTimeOfDay( TimeOfDay_Struct *eqTimeOfDay ) { return(GetCurrentEQTimeOfDay(time(nullptr), eqTimeOfDay)); } diff --git a/common/event/task_scheduler.h b/common/event/task_scheduler.h index 26f45cfe9..7f4c0401b 100644 --- a/common/event/task_scheduler.h +++ b/common/event/task_scheduler.h @@ -38,7 +38,7 @@ namespace EQ _running = true; for (size_t i = 0; i < threads; ++i) { - _threads.push_back(std::thread(std::bind(&TaskScheduler::ProcessWork, this))); + _threads.emplace_back(std::thread(std::bind(&TaskScheduler::ProcessWork, this))); } } diff --git a/common/events/player_event_logs.cpp b/common/events/player_event_logs.cpp index 8f5cee5a7..e8ea69629 100644 --- a/common/events/player_event_logs.cpp +++ b/common/events/player_event_logs.cpp @@ -333,7 +333,10 @@ std::string PlayerEventLogs::GetDiscordPayloadFromEvent(const PlayerEvent::Playe payload = PlayerEventDiscordFormatter::FormatDroppedItemEvent(e, n); break; } - case PlayerEvent::FISH_FAILURE: { + case PlayerEvent::FISH_FAILURE: + case PlayerEvent::FORAGE_FAILURE: + case PlayerEvent::WENT_ONLINE: + case PlayerEvent::WENT_OFFLINE: { payload = PlayerEventDiscordFormatter::FormatWithNodata(e); break; } @@ -348,10 +351,6 @@ std::string PlayerEventLogs::GetDiscordPayloadFromEvent(const PlayerEvent::Playe payload = PlayerEventDiscordFormatter::FormatFishSuccessEvent(e, n); break; } - case PlayerEvent::FORAGE_FAILURE: { - payload = PlayerEventDiscordFormatter::FormatWithNodata(e); - break; - } case PlayerEvent::FORAGE_SUCCESS: { PlayerEvent::ForageSuccessEvent n{}; std::stringstream ss; @@ -550,11 +549,6 @@ std::string PlayerEventLogs::GetDiscordPayloadFromEvent(const PlayerEvent::Playe payload = PlayerEventDiscordFormatter::FormatResurrectAcceptEvent(e, n); break; } - case PlayerEvent::WENT_ONLINE: - case PlayerEvent::WENT_OFFLINE: { - payload = PlayerEventDiscordFormatter::FormatWithNodata(e); - break; - } case PlayerEvent::MERCHANT_PURCHASE: { PlayerEvent::MerchantPurchaseEvent n{}; std::stringstream ss; diff --git a/common/features.h b/common/features.h index 9d7a3ecee..082f18897 100644 --- a/common/features.h +++ b/common/features.h @@ -218,14 +218,14 @@ enum { //some random constants #define HARD_LEVEL_CAP 127 //the square of the maximum range at whihc you could possibly use NPC services (shop, tribute, etc) -#define USE_NPC_RANGE2 200*200 //arbitrary right now +#define USE_NPC_RANGE2 40000 //arbitrary right now // Squared range for rampage 75.0 * 75.0 for now #define NPC_RAMPAGE_RANGE2 5625.0f //the formula for experience for killing a mob. //level is the only valid variable to use -#define EXP_FORMULA level*level*75*35/10 +#define EXP_FORMULA (level * level * 75 * 35 / 10) #define HIGHEST_AA_VALUE 35 @@ -295,7 +295,7 @@ Developer configuration #define COMMON_PROFILE -#define PROFILE_DUMP_TIME 3*60 +#define PROFILE_DUMP_TIME 180 #endif //EQPROFILE diff --git a/common/file.cpp b/common/file.cpp index 2e478aa5b..3dc943927 100644 --- a/common/file.cpp +++ b/common/file.cpp @@ -37,6 +37,7 @@ #include #include +#include namespace fs = std::filesystem; @@ -80,3 +81,26 @@ std::string File::GetCwd() { return fs::current_path().string(); } + +FileContentsResult File::GetContents(const std::string &file_name) +{ + std::string error; + std::ifstream f; + f.open(file_name); + std::string line; + std::string lines; + if (f.is_open()) { + while (f) { + std::getline(f, line); + lines += line + "\n"; + } + } + else { + error = fmt::format("Couldn't open file [{}]", file_name); + } + + return FileContentsResult{ + .contents = lines, + .error = error, + }; +} diff --git a/common/file.h b/common/file.h index c420b4c78..7991101c4 100644 --- a/common/file.h +++ b/common/file.h @@ -25,10 +25,16 @@ namespace fs = std::filesystem; +struct FileContentsResult { + std::string contents; + std::string error; +}; + class File { public: static bool Exists(const std::string &name); static void Makedir(const std::string& directory_name); + static FileContentsResult GetContents(const std::string &file_name); static std::string FindEqemuConfigPath(); static std::string GetCwd(); }; diff --git a/common/http/httplib.h b/common/http/httplib.h index e212eb09e..3c024f9f0 100644 --- a/common/http/httplib.h +++ b/common/http/httplib.h @@ -6690,7 +6690,7 @@ static WSInit wsinit_; if (params.empty()) { return Get(path, headers); } std::string path_with_query = append_query_params(path, params); - return Get(path_with_query.c_str(), headers, progress); + return Get(path_with_query, headers, progress); } inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, @@ -6710,7 +6710,7 @@ static WSInit wsinit_; } std::string path_with_query = append_query_params(path, params); - return Get(path_with_query.c_str(), headers, response_handler, + return Get(path_with_query, headers, response_handler, content_receiver, progress); } @@ -6807,7 +6807,7 @@ static WSInit wsinit_; std::string content_type; const auto &body = detail::serialize_multipart_formdata( items, detail::make_multipart_data_boundary(), content_type); - return Post(path, headers, body, content_type.c_str()); + return Post(path, headers, body, content_type); } inline Result ClientImpl::Post(const std::string &path, const Headers &headers, @@ -6820,7 +6820,7 @@ static WSInit wsinit_; std::string content_type; const auto &body = detail::serialize_multipart_formdata(items, boundary, content_type); - return Post(path, headers, body, content_type.c_str()); + return Post(path, headers, body, content_type); } inline Result ClientImpl::Put(const std::string &path) { diff --git a/common/inventory_profile.cpp b/common/inventory_profile.cpp index eb1926304..f9c173a66 100644 --- a/common/inventory_profile.cpp +++ b/common/inventory_profile.cpp @@ -412,11 +412,12 @@ bool EQ::InventoryProfile::DeleteItem(int16 slot_id, int16 quantity) { // If there are no charges left on the item, if (item_to_delete->GetCharges() <= 0) { // If the item is stackable (e.g arrows), or - // the item is not stackable, and is not a charged item, or is expendable, delete it - if (item_to_delete->IsStackable() || - (!item_to_delete->IsStackable() && - ((item_to_delete->GetItem()->MaxCharges == 0) || item_to_delete->IsExpendable())) - ) { + // the item is not a charged item, or is expendable, delete it + if ( + item_to_delete->IsStackable() || + item_to_delete->GetItem()->MaxCharges == 0 || + item_to_delete->IsExpendable() + ) { // Item can now be destroyed InventoryProfile::MarkDirty(item_to_delete); return true; diff --git a/common/item_data.h b/common/item_data.h index 13b0f6d54..ff78ea11a 100644 --- a/common/item_data.h +++ b/common/item_data.h @@ -355,181 +355,186 @@ namespace EQ struct ItemData { // Non packet based fields - uint8 MinStatus; + uint8 MinStatus {}; // Packet based fields - uint8 ItemClass; // Item Type: 0=common, 1=container, 2=book - char Name[64]; // Name - char Lore[80]; // Lore Name: *=lore, &=summoned, #=artifact, ~=pending lore - char IDFile[30]; // Visible model - uint32 ID; // Unique ID (also PK for DB) - int32 Weight; // Item weight * 10 - uint8 NoRent; // No Rent: 0=norent, 255=not norent - uint8 NoDrop; // No Drop: 0=nodrop, 255=not nodrop - uint8 Size; // Size: 0=tiny, 1=small, 2=medium, 3=large, 4=giant - uint32 Slots; // Bitfield for which slots this item can be used in - uint32 Price; // Item cost (?) - uint32 Icon; // Icon Number - int32 LoreGroup; // Later items use LoreGroup instead of LoreFlag. we might want to see about changing this to int32 since it is commonly -1 and is constantly being cast from signed (-1) to unsigned (4294967295) - bool LoreFlag; // This will be true if LoreGroup is non-zero - bool PendingLoreFlag; - bool ArtifactFlag; - bool SummonedFlag; - uint8 FVNoDrop; // Firiona Vie nodrop flag - uint32 Favor; // Individual favor - uint32 GuildFavor; // Guild favor - uint32 PointType; + uint8 ItemClass {}; // Item Type: 0=common, 1=container, 2=book + char Name[64] {}; // Name + char Lore[80] {}; // Lore Name: *=lore, &=summoned, #=artifact, ~=pending lore + char IDFile[30] {}; // Visible model + uint32 ID {}; // Unique ID (also PK for DB) + int32 Weight {}; // Item weight * 10 + uint8 NoRent{} ; // No Rent: 0=norent, 255=not norent + uint8 NoDrop {}; // No Drop: 0=nodrop, 255=not nodrop + uint8 Size {}; // Size: 0=tiny, 1=small, 2=medium, 3=large, 4=giant + uint32 Slots {}; // Bitfield for which slots this item can be used in + uint32 Price {}; // Item cost (?) + uint32 Icon {}; // Icon Number + int32 LoreGroup {}; // Later items use LoreGroup instead of LoreFlag. we might want to see about changing this to int32 since it is commonly -1 and is constantly being cast from signed (-1) to unsigned (4294967295) + bool LoreFlag {}; // This will be true if LoreGroup is non-zero + bool PendingLoreFlag {}; + bool ArtifactFlag {}; + bool SummonedFlag {}; + uint8 FVNoDrop {}; // Firiona Vie nodrop flag + uint32 Favor {}; // Individual favor + uint32 GuildFavor {}; // Guild favor + uint32 PointType {}; //uint32 Unk117; //uint32 Unk118; //uint32 Unk121; //uint32 Unk124; - uint8 BagType; // 0:Small Bag, 1:Large Bag, 2:Quiver, 3:Belt Pouch ... there are 50 types - uint8 BagSlots; // Number of slots: can only be 2, 4, 6, 8, or 10 - uint8 BagSize; // 0:TINY, 1:SMALL, 2:MEDIUM, 3:LARGE, 4:GIANT - uint8 BagWR; // 0->100 + uint8 BagType {}; // 0:Small Bag, 1:Large Bag, 2:Quiver, 3:Belt Pouch ... there are 50 types + uint8 BagSlots {}; // Number of slots: can only be 2, 4, 6, 8, or 10 + uint8 BagSize {}; // 0:TINY, 1:SMALL, 2:MEDIUM, 3:LARGE, 4:GIANT + uint8 BagWR {}; // 0->100 - bool BenefitFlag; - bool Tradeskills; // Is this a tradeskill item? - int8 CR; // Save vs Cold - int8 DR; // Save vs Disease - int8 PR; // Save vs Poison - int8 MR; // Save vs Magic - int8 FR; // Save vs Fire - int8 AStr; // Strength - int8 ASta; // Stamina - int8 AAgi; // Agility - int8 ADex; // Dexterity - int8 ACha; // Charisma - int8 AInt; // Intelligence - int8 AWis; // Wisdom - int32 HP; // HP - int32 Mana; // Mana - int32 AC; // AC - uint32 Deity; // Bitmask of Deities that can equip this item + bool BenefitFlag {}; + bool Tradeskills {}; // Is this a tradeskill item? + int8 CR {}; // Save vs Cold + int8 DR {}; // Save vs Disease + int8 PR {}; // Save vs Poison + int8 MR {}; // Save vs Magic + int8 FR {}; // Save vs Fire + int8 AStr {}; // Strength + int8 ASta {}; // Stamina + int8 AAgi {}; // Agility + int8 ADex {}; // Dexterity + int8 ACha {}; // Charisma + int8 AInt {}; // Intelligence + int8 AWis {}; // Wisdom + int32 HP {}; // HP + int32 Mana {}; // Mana + int32 AC {}; // AC + uint32 Deity {}; // Bitmask of Deities that can equip this item //uint32 Unk033 - int32 SkillModValue; // % Mod to skill specified in SkillModType - int32 SkillModMax; // Max skill point modification - uint32 SkillModType; // Type of skill for SkillModValue to apply to - uint32 BaneDmgRace; // Bane Damage Race - int32 BaneDmgAmt; // Bane Damage Body Amount - uint32 BaneDmgBody; // Bane Damage Body - bool Magic; // True=Magic Item, False=not - int32 CastTime_; - uint8 ReqLevel; // Required Level to use item - uint32 BardType; // Bard Skill Type - int32 BardValue; // Bard Skill Amount - int8 Light; // Light - uint8 Delay; // Delay * 10 - uint8 RecLevel; // Recommended level to use item - uint8 RecSkill; // Recommended skill to use item (refers to primary skill of item) - uint8 ElemDmgType; // Elemental Damage Type (1=magic, 2=fire) - uint8 ElemDmgAmt; // Elemental Damage - uint8 Range; // Range of item - uint32 Damage; // Delay between item usage (in 0.1 sec increments) - uint32 Color; // RR GG BB 00 <-- as it appears in pc - uint32 Classes; // Bitfield of classes that can equip item (1 << class#) - uint32 Races; // Bitfield of races that can equip item (1 << race#) - //uint32 Unk054; - int16 MaxCharges; // Maximum charges items can hold: -1 if not a chargeable item - uint8 ItemType; // Item Type/Skill (itemClass* from above) - int32 SubType; // Some items have sub types that can be used for other things (unbreakable fishing poles, SE_FFItemClass) - uint8 Material; // Item material type - uint32 HerosForgeModel;// Hero's Forge Armor Model Type (2-13?) - float SellRate; // Sell rate - //uint32 Unk059; + int32 SkillModValue {}; // % Mod to skill specified in SkillModType + int32 SkillModMax {}; // Max skill point modification + uint32 SkillModType {}; // Type of skill for SkillModValue to apply to + uint32 BaneDmgRace {}; // Bane Damage Race + int32 BaneDmgAmt {}; // Bane Damage Body Amount + uint32 BaneDmgBody {}; // Bane Damage Body + bool Magic {}; // True=Magic Item, False=not + int32 CastTime_ {}; + uint8 ReqLevel {}; // Required Level to use item + uint32 BardType {}; // Bard Skill Type + int32 BardValue {}; // Bard Skill Amount + int8 Light {}; // Light + uint8 Delay {}; // Delay * 10 + uint8 RecLevel {}; // Recommended level to use item + uint8 RecSkill {}; // Recommended skill to use item (refers to primary skill of item) + uint8 ElemDmgType {}; // Elemental Damage Type (1=magic, 2=fire) + uint8 ElemDmgAmt {}; // Elemental Damage + uint8 Range {}; // Range of item + uint32 Damage {}; // Delay between item usage (in 0.1 sec increments) + uint32 Color {}; // RR GG BB 00 <-- as it appears in pc + uint32 Classes {}; // Bitfield of classes that can equip item (1 << class#) + uint32 Races {}; // Bitfield of races that can equip item (1 << race#) + //uint32 Unk054 {}; + int16 MaxCharges {}; // Maximum charges items can hold: -1 if not a chargeable item + uint8 ItemType {}; // Item Type/Skill (itemClass* from above) + int32 SubType {}; // Some items have sub types that can be used for other things (unbreakable fishing poles, SE_FFItemClass) + uint8 Material {}; // Item material type + uint32 HerosForgeModel {};// Hero's Forge Armor Model Type (2-13?) + float SellRate {}; // Sell rate + //uint32 Unk059 {}; union { uint32 Fulfilment; // Food fulfilment (How long it lasts) uint32 CastTime; // Cast Time for clicky effects, in milliseconds }; - uint32 EliteMaterial; - int32 ProcRate; - int8 CombatEffects; // PoP: Combat Effects + - int8 Shielding; // PoP: Shielding % - int8 StunResist; // PoP: Stun Resist % - int8 StrikeThrough; // PoP: Strike Through % - int32 ExtraDmgSkill; - int32 ExtraDmgAmt; - int8 SpellShield; // PoP: Spell Shield % - int8 Avoidance; // PoP: Avoidance + - int8 Accuracy; // PoP: Accuracy + - uint32 CharmFileID; - int32 FactionMod1; // Faction Mod 1 - int32 FactionMod2; // Faction Mod 2 - int32 FactionMod3; // Faction Mod 3 - int32 FactionMod4; // Faction Mod 4 - int32 FactionAmt1; // Faction Amt 1 - int32 FactionAmt2; // Faction Amt 2 - int32 FactionAmt3; // Faction Amt 3 - int32 FactionAmt4; // Faction Amt 4 - char CharmFile[32]; // ? - uint32 AugType; - uint8 AugSlotType[invaug::SOCKET_COUNT]; // RoF: Augment Slot 1-6 Type - uint8 AugSlotVisible[invaug::SOCKET_COUNT]; // RoF: Augment Slot 1-6 Visible - uint8 AugSlotUnk2[invaug::SOCKET_COUNT]; // RoF: Augment Slot 1-6 Unknown Most likely Powersource related - uint32 LDoNTheme; - uint32 LDoNPrice; - uint32 LDoNSold; - uint32 BaneDmgRaceAmt; - uint32 AugRestrict; - int32 Endur; - int32 DotShielding; - int32 Attack; - int32 Regen; - int32 ManaRegen; - int32 EnduranceRegen; - int32 Haste; - int32 DamageShield; - uint32 RecastDelay; - int RecastType; - uint32 AugDistiller; - bool Attuneable; - bool NoPet; - bool PotionBelt; - bool Stackable; - bool NoTransfer; - bool QuestItemFlag; - int16 StackSize; - uint8 PotionBeltSlots; - item::ItemEffect_Struct Click, Proc, Worn, Focus, Scroll, Bard; + uint32 EliteMaterial {}; + int32 ProcRate {}; + int8 CombatEffects {}; // PoP: Combat Effects + + int8 Shielding {}; // PoP: Shielding % + int8 StunResist {}; // PoP: Stun Resist % + int8 StrikeThrough {}; // PoP: Strike Through % + int32 ExtraDmgSkill {}; + int32 ExtraDmgAmt {}; + int8 SpellShield {}; // PoP: Spell Shield % + int8 Avoidance {}; // PoP: Avoidance + + int8 Accuracy {}; // PoP: Accuracy + + uint32 CharmFileID {}; + int32 FactionMod1 {}; // Faction Mod 1 + int32 FactionMod2 {}; // Faction Mod 2 + int32 FactionMod3 {}; // Faction Mod 3 + int32 FactionMod4 {}; // Faction Mod 4 + int32 FactionAmt1 {}; // Faction Amt 1 + int32 FactionAmt2 {}; // Faction Amt 2 + int32 FactionAmt3 {}; // Faction Amt 3 + int32 FactionAmt4 {}; // Faction Amt 4 + char CharmFile[32] {}; // ? + uint32 AugType {}; + uint8 AugSlotType[invaug::SOCKET_COUNT] {}; // RoF: Augment Slot 1-6 Type + uint8 AugSlotVisible[invaug::SOCKET_COUNT] {}; // RoF: Augment Slot 1-6 Visible + uint8 AugSlotUnk2[invaug::SOCKET_COUNT] {}; // RoF: Augment Slot 1-6 Unknown Most likely Powersource related + uint32 LDoNTheme {}; + uint32 LDoNPrice {}; + uint32 LDoNSold {}; + uint32 BaneDmgRaceAmt {}; + uint32 AugRestrict {}; + int32 Endur {}; + int32 DotShielding {}; + int32 Attack {}; + int32 Regen {}; + int32 ManaRegen {}; + int32 EnduranceRegen {}; + int32 Haste {}; + int32 DamageShield {}; + uint32 RecastDelay {}; + int RecastType {}; + uint32 AugDistiller {}; + bool Attuneable {}; + bool NoPet {}; + bool PotionBelt {}; + bool Stackable {}; + bool NoTransfer {}; + bool QuestItemFlag {}; + int16 StackSize {}; + uint8 PotionBeltSlots {}; + item::ItemEffect_Struct Click {}; + item::ItemEffect_Struct Proc {}; + item::ItemEffect_Struct Worn {}; + item::ItemEffect_Struct Focus {}; + item::ItemEffect_Struct Scroll {}; + item::ItemEffect_Struct Bard {}; - uint8 Book; // 0=Not book, 1=Book - uint32 BookType; - char Filename[33]; // Filename for book data + uint8 Book {}; // 0=Not book, 1=Book + uint32 BookType {}; + char Filename[33] {}; // Filename for book data // Begin SoF Fields - int32 SVCorruption; - uint32 Purity; - uint8 EvolvingItem; - uint32 EvolvingID; - uint8 EvolvingLevel; - uint8 EvolvingMax; - uint32 BackstabDmg; - uint32 DSMitigation; - int32 HeroicStr; - int32 HeroicInt; - int32 HeroicWis; - int32 HeroicAgi; - int32 HeroicDex; - int32 HeroicSta; - int32 HeroicCha; - int32 HeroicMR; - int32 HeroicFR; - int32 HeroicCR; - int32 HeroicDR; - int32 HeroicPR; - int32 HeroicSVCorrup; - int32 HealAmt; - int32 SpellDmg; - uint32 LDoNSellBackRate; - uint32 ScriptFileID; - uint16 ExpendableArrow; - uint32 Clairvoyance; - char ClickName[65]; - char ProcName[65]; - char WornName[65]; - char FocusName[65]; - char ScrollName[65]; + int32 SVCorruption {}; + uint32 Purity {}; + uint8 EvolvingItem {}; + uint32 EvolvingID {}; + uint8 EvolvingLevel {}; + uint8 EvolvingMax {}; + uint32 BackstabDmg {}; + uint32 DSMitigation {}; + int32 HeroicStr {}; + int32 HeroicInt {}; + int32 HeroicWis {}; + int32 HeroicAgi {}; + int32 HeroicDex {}; + int32 HeroicSta {}; + int32 HeroicCha {}; + int32 HeroicMR {}; + int32 HeroicFR {}; + int32 HeroicCR {}; + int32 HeroicDR {}; + int32 HeroicPR {}; + int32 HeroicSVCorrup {}; + int32 HealAmt {}; + int32 SpellDmg {}; + uint32 LDoNSellBackRate {}; + uint32 ScriptFileID {}; + uint16 ExpendableArrow {}; + uint32 Clairvoyance {}; + char ClickName[65] {}; + char ProcName[65] {}; + char WornName[65] {}; + char FocusName[65] {}; + char ScrollName[65] {}; //BardName bool IsEquipable(uint16 Race, uint16 Class) const; diff --git a/common/item_instance.cpp b/common/item_instance.cpp index 696a34b6f..897512a1d 100644 --- a/common/item_instance.cpp +++ b/common/item_instance.cpp @@ -17,6 +17,7 @@ */ #include "inventory_profile.h" +#include "../common/data_verification.h" //#include "classes.h" //#include "global_define.h" //#include "item_instance.h" @@ -57,108 +58,62 @@ static inline int32 GetNextItemInstSerialNumber() { // class EQ::ItemInstance // EQ::ItemInstance::ItemInstance(const ItemData* item, int16 charges) { - m_use_type = ItemInstNormal; - if(item) { - m_item = new ItemData(*item); - } else { - m_item = nullptr; - } - m_charges = charges; - m_price = 0; - m_attuned = false; - m_merchantslot = 0; - if (m_item && m_item->IsClassCommon()) - m_color = m_item->Color; - else - m_color = 0; - m_merchantcount = 1; - m_SerialNumber = GetNextItemInstSerialNumber(); - m_exp = 0; - m_evolveLvl = 0; - m_activated = false; - m_scaledItem = nullptr; - m_evolveInfo = nullptr; - m_scaling = false; - m_ornamenticon = 0; - m_ornamentidfile = 0; - m_ornament_hero_model = 0; - m_recast_timestamp = 0; - m_new_id_file = 0; + if (item) { + m_item = new ItemData(*item); + } + + m_charges = charges; + + if (m_item && m_item->IsClassCommon()) { + m_color = m_item->Color; + } + + m_SerialNumber = GetNextItemInstSerialNumber(); } EQ::ItemInstance::ItemInstance(SharedDatabase *db, uint32 item_id, int16 charges) { - m_use_type = ItemInstNormal; - m_item = db->GetItem(item_id); - if(m_item) { + + m_item = db->GetItem(item_id); + + if (m_item) { m_item = new ItemData(*m_item); } - else { - m_item = nullptr; - } m_charges = charges; - m_price = 0; - m_merchantslot = 0; - m_attuned=false; - if (m_item && m_item->IsClassCommon()) - m_color = m_item->Color; - else - m_color = 0; - m_merchantcount = 1; - m_SerialNumber = GetNextItemInstSerialNumber(); - m_exp = 0; - m_evolveLvl = 0; - m_activated = false; - m_scaledItem = nullptr; - m_evolveInfo = nullptr; - m_scaling = false; - m_ornamenticon = 0; - m_ornamentidfile = 0; - m_ornament_hero_model = 0; - m_recast_timestamp = 0; - m_new_id_file = 0; + if (m_item && m_item->IsClassCommon()) { + m_color = m_item->Color; + } else { + m_color = 0; + } + + m_SerialNumber = GetNextItemInstSerialNumber(); } EQ::ItemInstance::ItemInstance(ItemInstTypes use_type) { - m_use_type = use_type; - m_item = nullptr; - m_charges = 0; - m_price = 0; - m_attuned = false; - m_merchantslot = 0; - m_color = 0; - - m_exp = 0; - m_evolveLvl = 0; - m_activated = false; - m_scaledItem = nullptr; - m_evolveInfo = nullptr; - m_scaling = false; - m_ornamenticon = 0; - m_ornamentidfile = 0; - m_ornament_hero_model = 0; - m_recast_timestamp = 0; - m_new_id_file = 0; + m_use_type = use_type; } // Make a copy of an EQ::ItemInstance object EQ::ItemInstance::ItemInstance(const ItemInstance& copy) { - m_use_type=copy.m_use_type; - if(copy.m_item) - m_item = new ItemData(*copy.m_item); - else - m_item = nullptr; + m_use_type = copy.m_use_type; + + if (copy.m_item) { + m_item = new ItemData(*copy.m_item); + } else { + m_item = nullptr; + } + + m_charges = copy.m_charges; + m_price = copy.m_price; + m_color = copy.m_color; + m_merchantslot = copy.m_merchantslot; + m_currentslot = copy.m_currentslot; + m_attuned = copy.m_attuned; + m_merchantcount = copy.m_merchantcount; - m_charges=copy.m_charges; - m_price=copy.m_price; - m_color=copy.m_color; - m_merchantslot=copy.m_merchantslot; - m_currentslot=copy.m_currentslot; - m_attuned=copy.m_attuned; - m_merchantcount=copy.m_merchantcount; // Copy container contents for (auto it = copy.m_contents.begin(); it != copy.m_contents.end(); ++it) { ItemInstance* inst_old = it->second; @@ -168,37 +123,42 @@ EQ::ItemInstance::ItemInstance(const ItemInstance& copy) inst_new = inst_old->Clone(); } - if (inst_new != nullptr) { + if (inst_new) { m_contents[it->first] = inst_new; } } + std::map::const_iterator iter; for (iter = copy.m_custom_data.begin(); iter != copy.m_custom_data.end(); ++iter) { m_custom_data[iter->first] = iter->second; } - m_SerialNumber = copy.m_SerialNumber; - m_custom_data = copy.m_custom_data; - m_timers = copy.m_timers; - m_exp = copy.m_exp; + m_SerialNumber = copy.m_SerialNumber; + m_custom_data = copy.m_custom_data; + m_timers = copy.m_timers; + + m_exp = copy.m_exp; m_evolveLvl = copy.m_evolveLvl; m_activated = copy.m_activated; - if (copy.m_scaledItem) + + if (copy.m_scaledItem) { m_scaledItem = new ItemData(*copy.m_scaledItem); - else + } else { m_scaledItem = nullptr; + } - if(copy.m_evolveInfo) + if (copy.m_evolveInfo) { m_evolveInfo = new EvolveInfo(*copy.m_evolveInfo); - else + } else { m_evolveInfo = nullptr; + } - m_scaling = copy.m_scaling; - m_ornamenticon = copy.m_ornamenticon; - m_ornamentidfile = copy.m_ornamentidfile; + m_scaling = copy.m_scaling; + m_ornamenticon = copy.m_ornamenticon; + m_ornamentidfile = copy.m_ornamentidfile; m_ornament_hero_model = copy.m_ornament_hero_model; - m_recast_timestamp = copy.m_recast_timestamp; - m_new_id_file = copy.m_new_id_file; + m_recast_timestamp = copy.m_recast_timestamp; + m_new_id_file = copy.m_new_id_file; } // Clean up container contents @@ -216,11 +176,13 @@ bool EQ::ItemInstance::IsType(item::ItemClass item_class) const // IsType() does not protect against 'm_item = nullptr' // Check usage type - if ((m_use_type == ItemInstWorldContainer) && (item_class == item::ItemClassBag)) + if (m_use_type == ItemInstWorldContainer && item_class == item::ItemClassBag) { return true; + } - if (!m_item) + if (!m_item) { return false; + } return (m_item->ItemClass == item_class); } @@ -243,21 +205,20 @@ bool EQ::ItemInstance::IsClassBook() const // Is item stackable? bool EQ::ItemInstance::IsStackable() const { - if (!m_item) - return false; - - return m_item->Stackable; + return (m_item && m_item->Stackable); } bool EQ::ItemInstance::IsCharged() const { - if (!m_item) + if (!m_item) { return false; + } - if (m_item->MaxCharges > 1) + if (m_item->MaxCharges > 1) { return true; - else + } else { return false; + } } // Can item be equipped? @@ -306,26 +267,30 @@ bool EQ::ItemInstance::IsEquipable(int16 slot_id) const bool EQ::ItemInstance::IsAugmentable() const { - if (!m_item) + if (!m_item) { return false; + } for (int index = invaug::SOCKET_BEGIN; index <= invaug::SOCKET_END; ++index) { - if (m_item->AugSlotType[index] != 0) + if (m_item->AugSlotType[index] != 0) { return true; + } } return false; } bool EQ::ItemInstance::AvailableWearSlot(uint32 aug_wear_slots) const { - if (!m_item || !m_item->IsClassCommon()) + if (!m_item || !m_item->IsClassCommon()) { return false; + } int index = invslot::EQUIPMENT_BEGIN; for (; index <= invslot::EQUIPMENT_END; ++index) { if (m_item->Slots & (1 << index)) { - if (aug_wear_slots & (1 << index)) + if (aug_wear_slots & (1 << index)) { break; + } } } @@ -394,9 +359,10 @@ EQ::ItemInstance* EQ::ItemInstance::GetItem(uint8 index) const uint32 EQ::ItemInstance::GetItemID(uint8 slot) const { - ItemInstance *item = GetItem(slot); - if (item) + const auto item = GetItem(slot); + if (item) { return item->GetID(); + } return 0; } @@ -520,14 +486,21 @@ uint8 EQ::ItemInstance::FirstOpenSlot() const uint8 EQ::ItemInstance::GetTotalItemCount() const { - if (!m_item) + if (!m_item) { return 0; + } uint8 item_count = 1; - if (m_item && !m_item->IsClassBag()) { return item_count; } + if (!m_item->IsClassBag()) { + return item_count; + } - for (int index = invbag::SLOT_BEGIN; index < m_item->BagSlots; ++index) { if (GetItem(index)) { ++item_count; } } + for (int index = invbag::SLOT_BEGIN; index < m_item->BagSlots; ++index) { + if (GetItem(index)) { + ++item_count; + } + } return item_count; } @@ -555,78 +528,99 @@ EQ::ItemInstance* EQ::ItemInstance::GetAugment(uint8 augment_index) const return nullptr; } -EQ::ItemInstance* EQ::ItemInstance::GetOrnamentationAug(int32 ornamentationAugtype) const +bool EQ::ItemInstance::IsOrnamentationAugment(EQ::ItemInstance* augment) const { - if (!m_item || !m_item->IsClassCommon()) { return nullptr; } - if (ornamentationAugtype == 0) { return nullptr; } + if (!m_item || !m_item->IsClassCommon() || !augment) { + return false; + } - for (int i = invaug::SOCKET_BEGIN; i <= invaug::SOCKET_END; i++) - { - if (GetAugment(i) && m_item->AugSlotType[i] == ornamentationAugtype) - { - const char *item_IDFile = GetAugment(i)->GetItem()->IDFile; - if ( - (strncmp(item_IDFile, "IT64", strlen(item_IDFile)) == 0 - || strncmp(item_IDFile, "IT63", strlen(item_IDFile)) == 0) - && GetAugment(i)->GetItem()->HerosForgeModel == 0 - ) - { - continue; - } - return GetAugment(i); + const auto augment_item = augment->GetItem(); + if (!augment_item) { + return false; + } + + const std::string& idfile = augment_item->IDFile; + + if ( + EQ::ValueWithin( + augment->GetAugmentType(), + OrnamentationAugmentTypes::StandardOrnamentation, + OrnamentationAugmentTypes::SpecialOrnamentation + ) || + ( + idfile != "IT63" && + idfile != "IT64" + ) || + augment_item->HerosForgeModel + ) { + return true; + } + + return false; +} + +EQ::ItemInstance* EQ::ItemInstance::GetOrnamentationAugment() const +{ + if (!m_item || !m_item->IsClassCommon()) { + return nullptr; + } + + for (int i = invaug::SOCKET_BEGIN; i <= invaug::SOCKET_END; i++) { + const auto augment = GetAugment(i); + if (augment && IsOrnamentationAugment(augment)) { + return augment; } } return nullptr; } -uint32 EQ::ItemInstance::GetOrnamentHeroModel(int32 material_slot) const { +uint32 EQ::ItemInstance::GetOrnamentHeroModel(int32 material_slot) const +{ // Not a Hero Forge item. - if (m_ornament_hero_model == 0 || material_slot < 0) + if (m_ornament_hero_model == 0 || material_slot < 0) { return 0; + } // Item is using an explicit Hero Forge ID - if (m_ornament_hero_model >= 1000) + if (m_ornament_hero_model >= 1000) { return m_ornament_hero_model; + } // Item is using a shorthand ID return (m_ornament_hero_model * 100) + material_slot; } -bool EQ::ItemInstance::UpdateOrnamentationInfo() { - if (!m_item || !m_item->IsClassCommon()) +bool EQ::ItemInstance::UpdateOrnamentationInfo() +{ + if (!m_item || !m_item->IsClassCommon()) { return false; + } - bool ornamentSet = false; + const auto augment = GetOrnamentationAugment(); - int32 ornamentationAugtype = RuleI(Character, OrnamentationAugmentType); - if (GetOrnamentationAug(ornamentationAugtype)) - { - const ItemData* ornamentItem; - ornamentItem = GetOrnamentationAug(ornamentationAugtype)->GetItem(); - if (ornamentItem != nullptr) - { - SetOrnamentIcon(ornamentItem->Icon); - SetOrnamentHeroModel(ornamentItem->HerosForgeModel); - if (strlen(ornamentItem->IDFile) > 2) - { - SetOrnamentationIDFile(Strings::ToUnsignedInt(&ornamentItem->IDFile[2])); - } - else - { + if (augment) { + const auto augment_item = GetOrnamentationAugment()->GetItem(); + + if (augment_item) { + SetOrnamentIcon(augment_item->Icon); + SetOrnamentHeroModel(augment_item->HerosForgeModel); + + if (strlen(augment_item->IDFile) > 2) { + SetOrnamentationIDFile(Strings::ToUnsignedInt(&augment_item->IDFile[2])); + } else { SetOrnamentationIDFile(0); } - ornamentSet = true; + + return true; } } - else - { - SetOrnamentIcon(0); - SetOrnamentHeroModel(0); - SetOrnamentationIDFile(0); - } - return ornamentSet; + SetOrnamentIcon(0); + SetOrnamentHeroModel(0); + SetOrnamentationIDFile(0); + + return false; } bool EQ::ItemInstance::CanTransform(const ItemData *ItemToTry, const ItemData *Container, bool AllowAll) { @@ -940,8 +934,9 @@ bool EQ::ItemInstance::IsDroppable(bool recurse) const void EQ::ItemInstance::Initialize(SharedDatabase *db) { // if there's no actual item, don't do anything - if (!m_item) + if (!m_item) { return; + } // initialize scaling items if (m_item->CharmFileID != 0) { @@ -950,7 +945,7 @@ void EQ::ItemInstance::Initialize(SharedDatabase *db) { } // initialize evolving items - else if ((db) && m_item->LoreGroup >= 1000 && m_item->LoreGroup != -1) { + else if (db && m_item->LoreGroup >= 1000) { // not complete yet } } diff --git a/common/item_instance.h b/common/item_instance.h index d1a8e021e..f9ab558c2 100644 --- a/common/item_instance.h +++ b/common/item_instance.h @@ -51,6 +51,11 @@ typedef enum { byFlagNotSet //apply action if the flag is NOT set } byFlagSetting; +enum OrnamentationAugmentTypes { + StandardOrnamentation = 20, + SpecialOrnamentation = 21 +}; + class SharedDatabase; // ######################################## @@ -103,7 +108,8 @@ namespace EQ bool AvailableWearSlot(uint32 aug_wear_slots) const; int8 AvailableAugmentSlot(int32 augment_type) const; bool IsAugmentSlotAvailable(int32 augment_type, uint8 slot) const; - inline int32 GetAugmentType() const { return ((m_item) ? m_item->AugType : 0); } + inline int GetAugmentType() const { return m_item ? m_item->AugType : 0; } + inline uint32 GetAugmentRestriction() const { return m_item ? m_item->AugRestrict : 0; } inline bool IsExpendable() const { return ((m_item) ? ((m_item->Click.Type == item::ItemEffectExpendable) || (m_item->ItemType == item::ItemTypePotion)) : false); } @@ -136,7 +142,8 @@ namespace EQ bool IsAugmented(); bool ContainsAugmentByID(uint32 item_id); int CountAugmentByID(uint32 item_id); - ItemInstance* GetOrnamentationAug(int32 ornamentationAugtype) const; + bool IsOrnamentationAugment(EQ::ItemInstance* augment) const; + ItemInstance* GetOrnamentationAugment() const; bool UpdateOrnamentationInfo(); static bool CanTransform(const ItemData *ItemToTry, const ItemData *Container, bool AllowAll = false); @@ -304,34 +311,33 @@ namespace EQ void _PutItem(uint8 index, ItemInstance* inst) { m_contents[index] = inst; } - ItemInstTypes m_use_type; // Usage type for item - const ItemData* m_item; // Ptr to item data - int16 m_charges; // # of charges for chargeable items - uint32 m_price; // Bazaar /trader price - uint32 m_color; - uint32 m_merchantslot; - int16 m_currentslot; - bool m_attuned; - int32 m_merchantcount; //number avaliable on the merchant, -1=unlimited - int32 m_SerialNumber; // Unique identifier for this instance of an item. Needed for Bazaar. - uint32 m_exp; - int8 m_evolveLvl; - bool m_activated; - ItemData* m_scaledItem; - ::EvolveInfo* m_evolveInfo; - bool m_scaling; - uint32 m_ornamenticon; - uint32 m_ornamentidfile; - uint32 m_new_id_file; - uint32 m_ornament_hero_model; - uint32 m_recast_timestamp; - int m_task_delivered_count = 0; + ItemInstTypes m_use_type {ItemInstNormal}; // Usage type for item + const ItemData* m_item {nullptr}; // Ptr to item data + int16 m_charges {0}; // # of charges for chargeable items + uint32 m_price {0}; // Bazaar /trader price + uint32 m_color {0}; + uint32 m_merchantslot {0}; + int16 m_currentslot {0}; + bool m_attuned {false}; + int32 m_merchantcount {1}; //number avaliable on the merchant, -1=unlimited + int32 m_SerialNumber {0}; // Unique identifier for this instance of an item. Needed for Bazaar. + uint32 m_exp {0}; + int8 m_evolveLvl {0}; + bool m_activated {false}; + ItemData* m_scaledItem {nullptr}; + ::EvolveInfo* m_evolveInfo {nullptr}; + bool m_scaling {false}; + uint32 m_ornamenticon {0}; + uint32 m_ornamentidfile {0}; + uint32 m_new_id_file {0}; + uint32 m_ornament_hero_model {0}; + uint32 m_recast_timestamp {0}; + int m_task_delivered_count {0}; - // - // Items inside of this item (augs or contents); - std::map m_contents; // Zero-based index: min=0, max=9 - std::map m_custom_data; - std::map m_timers; + // Items inside of this item (augs or contents) {}; + std::map m_contents {}; // Zero-based index: min=0, max=9 + std::map m_custom_data {}; + std::map m_timers {}; }; } diff --git a/common/misc.cpp b/common/misc.cpp index 83f5e7827..f9c096acb 100644 --- a/common/misc.cpp +++ b/common/misc.cpp @@ -151,7 +151,7 @@ static char *temp=nullptr; return false; } ptr++; - uint32 id = Strings::ToUnsignedInt(field[id_pos].c_str()); + uint32 id = Strings::ToUnsignedInt(field[id_pos]); items[id]=field; for(i=0;i<10;i++) { diff --git a/common/mysql_request_result.cpp b/common/mysql_request_result.cpp index e7f147b51..fbe8fc758 100644 --- a/common/mysql_request_result.cpp +++ b/common/mysql_request_result.cpp @@ -51,6 +51,7 @@ void MySQLRequestResult::ZeroOut() m_RowCount = 0; m_RowsAffected = 0; m_LastInsertedID = 0; + m_error_message = ""; } MySQLRequestResult::~MySQLRequestResult() @@ -137,3 +138,23 @@ MySQLRequestResult& MySQLRequestResult::operator=(MySQLRequestResult&& other) other.ZeroOut(); return *this; } + +uint32 MySQLRequestResult::GetErrorNumber() const +{ + return m_ErrorNumber; +} + +void MySQLRequestResult::SetErrorNumber(uint32 m_error_number) +{ + m_ErrorNumber = m_error_number; +} + +const std::string &MySQLRequestResult::GetErrorMessage() const +{ + return m_error_message; +} + +void MySQLRequestResult::SetErrorMessage(const std::string &m_error_message) +{ + MySQLRequestResult::m_error_message = m_error_message; +} diff --git a/common/mysql_request_result.h b/common/mysql_request_result.h index ec9b3e57f..cb2a4e719 100644 --- a/common/mysql_request_result.h +++ b/common/mysql_request_result.h @@ -33,30 +33,42 @@ private: uint32 m_LastInsertedID; uint32 m_ErrorNumber; + std::string m_error_message; public: MySQLRequestResult(MYSQL_RES* result, uint32 rowsAffected = 0, uint32 rowCount = 0, uint32 columnCount = 0, uint32 lastInsertedID = 0, uint32 errorNumber = 0, char *errorBuffer = nullptr); - MySQLRequestResult(); + MySQLRequestResult(); MySQLRequestResult(MySQLRequestResult&& moveItem); ~MySQLRequestResult(); MySQLRequestResult& operator=(MySQLRequestResult&& other); bool Success() const { return m_Success;} - std::string ErrorMessage() const {return m_ErrorBuffer ? std::string(m_ErrorBuffer) : std::string("");} + std::string ErrorMessage() const { + if (!m_error_message.empty()) { + return m_error_message; + } + + return m_ErrorBuffer ? std::string(m_ErrorBuffer) : std::string(""); + } uint32 ErrorNumber() const {return m_ErrorNumber;} uint32 RowsAffected() const {return m_RowsAffected;} uint32 RowCount() const {return m_RowCount;} uint32 ColumnCount() const {return m_ColumnCount;} uint32 LastInsertedID() const {return m_LastInsertedID;} // default to 0 index since we mostly use it that way anyways. - uint32 LengthOfColumn(int columnIndex = 0); + uint32 LengthOfColumn(int columnIndex = 0); const std::string FieldName(int columnIndex); MySQLRequestRow& begin() { return m_CurrentRow; } MySQLRequestRow& end() { return m_OneBeyondRow; } + uint32 GetErrorNumber() const; + void SetErrorNumber(uint32 m_error_number); + const std::string &GetErrorMessage() const; + void SetErrorMessage(const std::string &m_error_message); + private: void FreeInternals(); void ZeroOut(); diff --git a/common/net/console_server.cpp b/common/net/console_server.cpp index 1b8e8af32..a5276f4cf 100644 --- a/common/net/console_server.cpp +++ b/common/net/console_server.cpp @@ -7,7 +7,7 @@ EQ::Net::ConsoleServer::ConsoleServer(const std::string &addr, int port) m_server = std::make_unique(); m_server->Listen(addr, port, false, [this](std::shared_ptr connection) { ConsoleServerConnection *c = new ConsoleServerConnection(this, connection); - m_connections.insert(std::make_pair(c->GetUUID(), std::unique_ptr(c))); + m_connections.emplace(std::make_pair(c->GetUUID(), std::unique_ptr(c))); }); } diff --git a/common/net/daybreak_connection.cpp b/common/net/daybreak_connection.cpp index 7edb41244..0fefc9982 100644 --- a/common/net/daybreak_connection.cpp +++ b/common/net/daybreak_connection.cpp @@ -97,7 +97,7 @@ void EQ::Net::DaybreakConnectionManager::Connect(const std::string &addr, int po m_on_new_connection(connection); } - m_connections.insert(std::make_pair(std::make_pair(addr, port), connection)); + m_connections.emplace(std::make_pair(std::make_pair(addr, port), connection)); } void EQ::Net::DaybreakConnectionManager::Process() @@ -234,7 +234,7 @@ void EQ::Net::DaybreakConnectionManager::ProcessPacket(const std::string &endpoi if (m_on_new_connection) { m_on_new_connection(connection); } - m_connections.insert(std::make_pair(std::make_pair(endpoint, port), connection)); + m_connections.emplace(std::make_pair(std::make_pair(endpoint, port), connection)); connection->ProcessPacket(p); } else if (data[1] != OP_OutOfSession) { @@ -527,7 +527,7 @@ void EQ::Net::DaybreakConnection::AddToQueue(int stream, uint16_t seq, const Pac DynamicPacket *out = new DynamicPacket(); out->PutPacket(0, p); - s->packet_queue.insert(std::make_pair(seq, out)); + s->packet_queue.emplace(std::make_pair(seq, out)); } } @@ -1427,7 +1427,7 @@ void EQ::Net::DaybreakConnection::InternalQueuePacket(Packet &p, int stream_id, static_cast((m_rolling_ping * m_owner->m_options.resend_delay_factor) + m_owner->m_options.resend_delay_ms), m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max); - stream->sent_packets.insert(std::make_pair(stream->sequence_out, sent)); + stream->sent_packets.emplace(std::make_pair(stream->sequence_out, sent)); stream->sequence_out++; InternalBufferedSend(first_packet); @@ -1459,7 +1459,7 @@ void EQ::Net::DaybreakConnection::InternalQueuePacket(Packet &p, int stream_id, static_cast((m_rolling_ping * m_owner->m_options.resend_delay_factor) + m_owner->m_options.resend_delay_ms), m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max); - stream->sent_packets.insert(std::make_pair(stream->sequence_out, sent)); + stream->sent_packets.emplace(std::make_pair(stream->sequence_out, sent)); stream->sequence_out++; InternalBufferedSend(packet); @@ -1483,7 +1483,7 @@ void EQ::Net::DaybreakConnection::InternalQueuePacket(Packet &p, int stream_id, static_cast((m_rolling_ping * m_owner->m_options.resend_delay_factor) + m_owner->m_options.resend_delay_ms), m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max); - stream->sent_packets.insert(std::make_pair(stream->sequence_out, sent)); + stream->sent_packets.emplace(std::make_pair(stream->sequence_out, sent)); stream->sequence_out++; InternalBufferedSend(packet); diff --git a/common/net/eqstream.cpp b/common/net/eqstream.cpp index c72ad1c4f..34ad10e41 100644 --- a/common/net/eqstream.cpp +++ b/common/net/eqstream.cpp @@ -22,7 +22,7 @@ void EQ::Net::EQStreamManager::SetOptions(const EQStreamManagerInterfaceOptions void EQ::Net::EQStreamManager::DaybreakNewConnection(std::shared_ptr connection) { std::shared_ptr stream(new EQStream(this, connection)); - m_streams.insert(std::make_pair(connection, stream)); + m_streams.emplace(std::make_pair(connection, stream)); if (m_on_new_connection) { m_on_new_connection(stream); } diff --git a/common/net/servertalk_client_connection.cpp b/common/net/servertalk_client_connection.cpp index 0c789330d..d873d43ca 100644 --- a/common/net/servertalk_client_connection.cpp +++ b/common/net/servertalk_client_connection.cpp @@ -45,7 +45,7 @@ void EQ::Net::ServertalkClient::SendPacket(ServerPacket *p) void EQ::Net::ServertalkClient::OnMessage(uint16_t opcode, std::function cb) { - m_message_callbacks.insert(std::make_pair(opcode, cb)); + m_message_callbacks.emplace(std::make_pair(opcode, cb)); } void EQ::Net::ServertalkClient::OnMessage(std::function cb) diff --git a/common/net/servertalk_legacy_client_connection.cpp b/common/net/servertalk_legacy_client_connection.cpp index 8be329e65..8f2260dd6 100644 --- a/common/net/servertalk_legacy_client_connection.cpp +++ b/common/net/servertalk_legacy_client_connection.cpp @@ -41,7 +41,7 @@ void EQ::Net::ServertalkLegacyClient::SendPacket(ServerPacket *p) void EQ::Net::ServertalkLegacyClient::OnMessage(uint16_t opcode, std::function cb) { - m_message_callbacks.insert(std::make_pair(opcode, cb)); + m_message_callbacks.emplace(std::make_pair(opcode, cb)); } void EQ::Net::ServertalkLegacyClient::OnMessage(std::function cb) diff --git a/common/net/servertalk_server.cpp b/common/net/servertalk_server.cpp index d362362d3..33e1293f9 100644 --- a/common/net/servertalk_server.cpp +++ b/common/net/servertalk_server.cpp @@ -19,12 +19,12 @@ void EQ::Net::ServertalkServer::Listen(const ServertalkServerOptions& opts) void EQ::Net::ServertalkServer::OnConnectionIdentified(const std::string &type, std::function)> cb) { - m_on_ident.insert(std::make_pair(type, cb)); + m_on_ident.emplace(std::make_pair(type, cb)); } void EQ::Net::ServertalkServer::OnConnectionRemoved(const std::string &type, std::function)> cb) { - m_on_disc.insert(std::make_pair(type, cb)); + m_on_disc.emplace(std::make_pair(type, cb)); } void EQ::Net::ServertalkServer::ConnectionDisconnected(ServertalkServerConnection *conn) @@ -75,7 +75,7 @@ void EQ::Net::ServertalkServer::ConnectionIdentified(ServertalkServerConnection else { std::vector> vec; vec.push_back(*iter); - m_ident_connections.insert(std::make_pair(conn->GetIdentifier(), vec)); + m_ident_connections.emplace(std::make_pair(conn->GetIdentifier(), vec)); } m_unident_connections.erase(iter); diff --git a/common/net/servertalk_server_connection.cpp b/common/net/servertalk_server_connection.cpp index 405f85f73..ad86727ef 100644 --- a/common/net/servertalk_server_connection.cpp +++ b/common/net/servertalk_server_connection.cpp @@ -100,7 +100,7 @@ void EQ::Net::ServertalkServerConnection::SendPacket(ServerPacket *p) void EQ::Net::ServertalkServerConnection::OnMessage(uint16_t opcode, std::function cb) { - m_message_callbacks.insert(std::make_pair(opcode, cb)); + m_message_callbacks.emplace(std::make_pair(opcode, cb)); } void EQ::Net::ServertalkServerConnection::OnMessage(std::function cb) diff --git a/common/net/tcp_connection.cpp b/common/net/tcp_connection.cpp index 372442c7d..0c2512dcc 100644 --- a/common/net/tcp_connection.cpp +++ b/common/net/tcp_connection.cpp @@ -142,7 +142,7 @@ void EQ::Net::TCPConnection::Write(const char *data, size_t count) WriteBaton *baton = new WriteBaton; baton->connection = this; - baton->buffer = new char[count];; + baton->buffer = new char[count]; uv_write_t *write_req = new uv_write_t; memset(write_req, 0, sizeof(uv_write_t)); diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index d6e0e2a17..318c50f62 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -5218,7 +5218,6 @@ namespace RoF /** * Ornamentation */ - int ornamentation_augment_type = RuleI(Character, OrnamentationAugmentType); uint32 ornamentation_icon = (inst->GetOrnamentationIcon() ? inst->GetOrnamentationIcon() : 0); uint32 hero_model = 0; diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index 3c34cd011..30b6ad70a 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -5477,7 +5477,6 @@ namespace RoF2 /** * Ornamentation */ - int ornamentation_augment_type = RuleI(Character, OrnamentationAugmentType); uint32 ornamentation_icon = (inst->GetOrnamentationIcon() ? inst->GetOrnamentationIcon() : 0); uint32 hero_model = 0; diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index b632cb7e3..b9c1d888a 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -3851,17 +3851,17 @@ namespace UF ob.write((const char*)&evotop, sizeof(UF::structs::EvolvingItem)); } - //ORNAMENT IDFILE / ICON - - int ornamentationAugtype = RuleI(Character, OrnamentationAugmentType); - uint16 ornaIcon = 0; - if (inst->GetOrnamentationAug(ornamentationAugtype)) { - const EQ::ItemData *aug_weap = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem(); - ornaIcon = aug_weap->Icon; + uint16 ornament_icon = 0; + const auto augment = inst->GetOrnamentationAugment(); - ob.write(aug_weap->IDFile, strlen(aug_weap->IDFile)); + if (augment) { + const auto augment_item = augment->GetItem(); + ornament_icon = augment_item->Icon; + + ob.write(augment_item->IDFile, strlen(augment_item->IDFile)); } else if (inst->GetOrnamentationIDFile() && inst->GetOrnamentationIcon()) { - ornaIcon = inst->GetOrnamentationIcon(); + ornament_icon = inst->GetOrnamentationIcon(); char tmp[30]; memset(tmp, 0x0, 30); sprintf(tmp, "IT%d", inst->GetOrnamentationIDFile()); ob.write(tmp, strlen(tmp)); @@ -3870,7 +3870,7 @@ namespace UF UF::structs::ItemSerializationHeaderFinish hdrf; - hdrf.ornamentIcon = ornaIcon; + hdrf.ornamentIcon = ornament_icon; hdrf.unknown060 = 0; //This is Always 0.. or it breaks shit.. hdrf.unknown061 = 0; //possibly ornament / special ornament hdrf.isCopied = 0; //Flag for item to be 'Copied' diff --git a/common/proc_launcher.cpp b/common/proc_launcher.cpp index b59f4e852..9f8757326 100644 --- a/common/proc_launcher.cpp +++ b/common/proc_launcher.cpp @@ -64,7 +64,7 @@ void ProcLauncher::Process() { if(GetExitCodeProcess(cur->second->proc_info.hProcess, &res)) { //got exit code, see if its still running... if(res == STILL_ACTIVE) { - cur++; + ++cur; continue; } //else, it died, handle properly @@ -76,7 +76,7 @@ void ProcLauncher::Process() { //if we get here, the current process died. tmp = cur; - tmp++; + ++tmp; ProcessTerminated(cur); cur = tmp; } @@ -174,7 +174,7 @@ ProcLauncher::ProcRef ProcLauncher::Launch(Spec *&to_launch) { std::vector::iterator cur, end; cur = it->args.begin(); end = it->args.end(); - for(; cur != end; cur++) { + for(; cur != end; ++cur) { args += " "; args += *cur; } @@ -306,7 +306,7 @@ void ProcLauncher::TerminateAll(bool final) { std::map::iterator cur, end; cur = m_running.begin(); end = m_running.end(); - for(; cur != end; cur++) { + for(; cur != end; ++cur) { Terminate(cur->first, true); } } else { @@ -317,7 +317,7 @@ void ProcLauncher::TerminateAll(bool final) { std::map::iterator cur, end; cur = running.begin(); end = running.end(); - for(; cur != end; cur++) { + for(; cur != end; ++cur) { Terminate(cur->first, true); safe_delete(cur->second); } diff --git a/common/process/process.cpp b/common/process/process.cpp index 926c9700b..badb0fe11 100644 --- a/common/process/process.cpp +++ b/common/process/process.cpp @@ -4,7 +4,8 @@ std::string Process::execute(const std::string &cmd) { - std::shared_ptr pipe(popen(cmd.c_str(), "r"), pclose); + std::string command = fmt::format("{} 2>&1", cmd); + std::shared_ptr pipe(popen(command.c_str(), "r"), pclose); if (!pipe) { return "ERROR"; } char buffer[128]; std::string result; diff --git a/common/profanity_manager.cpp b/common/profanity_manager.cpp index 98a9cc73c..e522681f6 100644 --- a/common/profanity_manager.cpp +++ b/common/profanity_manager.cpp @@ -258,7 +258,7 @@ bool EQ::ProfanityManager::clear_database_entries(DBcore *db) { return true; } -bool EQ::ProfanityManager::check_for_existing_entry(std::string profanity) { +bool EQ::ProfanityManager::check_for_existing_entry(const std::string& profanity) { if (profanity.empty()) { return false; } diff --git a/common/profanity_manager.h b/common/profanity_manager.h index 3f4291fd7..311ca19e0 100644 --- a/common/profanity_manager.h +++ b/common/profanity_manager.h @@ -53,7 +53,7 @@ namespace EQ private: static bool load_database_entries(DBcore *db); static bool clear_database_entries(DBcore *db); - static bool check_for_existing_entry(std::string profanity); + static bool check_for_existing_entry(const std::string& profanity); }; diff --git a/common/repositories/base/base_character_tribute_repository.h b/common/repositories/base/base_character_tribute_repository.h new file mode 100644 index 000000000..9b040f7fd --- /dev/null +++ b/common/repositories/base/base_character_tribute_repository.h @@ -0,0 +1,354 @@ +/** + * DO NOT MODIFY THIS FILE + * + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to the repository extending the base. + * Any modifications to base repositories are to be made by the generator only + * + * @generator ./utils/scripts/generators/repository-generator.pl + * @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories + */ + +#ifndef EQEMU_BASE_CHARACTER_TRIBUTE_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_TRIBUTE_REPOSITORY_H + +#include "../../database.h" +#include "../../strings.h" +#include + + +class BaseCharacterTributeRepository { +public: + struct CharacterTribute { + int32_t id; + uint32_t character_id; + uint8_t tier; + uint32_t tribute; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "character_id", + "tier", + "tribute", + }; + } + + static std::vector SelectColumns() + { + return { + "id", + "character_id", + "tier", + "tribute", + }; + } + + static std::string ColumnsRaw() + { + return std::string(Strings::Implode(", ", Columns())); + } + + static std::string SelectColumnsRaw() + { + return std::string(Strings::Implode(", ", SelectColumns())); + } + + static std::string TableName() + { + return std::string("character_tribute"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + SelectColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + ColumnsRaw() + ); + } + + static CharacterTribute NewEntity() + { + CharacterTribute e{}; + + e.id = 0; + e.character_id = 0; + e.tier = 0; + e.tribute = 0; + + return e; + } + + static CharacterTribute GetCharacterTribute( + const std::vector &character_tributes, + int character_tribute_id + ) + { + for (auto &character_tribute : character_tributes) { + if (character_tribute.id == character_tribute_id) { + return character_tribute; + } + } + + return NewEntity(); + } + + static CharacterTribute FindOne( + Database& db, + int character_tribute_id + ) + { + auto results = db.QueryDatabase( + fmt::format( + "{} WHERE {} = {} LIMIT 1", + BaseSelect(), + PrimaryKey(), + character_tribute_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterTribute e{}; + + e.id = static_cast(atoi(row[0])); + e.character_id = static_cast(strtoul(row[1], nullptr, 10)); + e.tier = static_cast(strtoul(row[2], nullptr, 10)); + e.tribute = static_cast(strtoul(row[3], nullptr, 10)); + + return e; + } + + return NewEntity(); + } + + static int DeleteOne( + Database& db, + int character_tribute_id + ) + { + auto results = db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_tribute_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Database& db, + const CharacterTribute &e + ) + { + std::vector v; + + auto columns = Columns(); + + v.push_back(columns[1] + " = " + std::to_string(e.character_id)); + v.push_back(columns[2] + " = " + std::to_string(e.tier)); + v.push_back(columns[3] + " = " + std::to_string(e.tribute)); + + auto results = db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + Strings::Implode(", ", v), + PrimaryKey(), + e.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterTribute InsertOne( + Database& db, + CharacterTribute e + ) + { + std::vector v; + + v.push_back(std::to_string(e.id)); + v.push_back(std::to_string(e.character_id)); + v.push_back(std::to_string(e.tier)); + v.push_back(std::to_string(e.tribute)); + + auto results = db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + Strings::Implode(",", v) + ) + ); + + if (results.Success()) { + e.id = results.LastInsertedID(); + return e; + } + + e = NewEntity(); + + return e; + } + + static int InsertMany( + Database& db, + const std::vector &entries + ) + { + std::vector insert_chunks; + + for (auto &e: entries) { + std::vector v; + + v.push_back(std::to_string(e.id)); + v.push_back(std::to_string(e.character_id)); + v.push_back(std::to_string(e.tier)); + v.push_back(std::to_string(e.tribute)); + + insert_chunks.push_back("(" + Strings::Implode(",", v) + ")"); + } + + std::vector v; + + auto results = db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + Strings::Implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All(Database& db) + { + std::vector all_entries; + + auto results = db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterTribute e{}; + + e.id = static_cast(atoi(row[0])); + e.character_id = static_cast(strtoul(row[1], nullptr, 10)); + e.tier = static_cast(strtoul(row[2], nullptr, 10)); + e.tribute = static_cast(strtoul(row[3], nullptr, 10)); + + all_entries.push_back(e); + } + + return all_entries; + } + + static std::vector GetWhere(Database& db, const std::string &where_filter) + { + std::vector all_entries; + + auto results = db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterTribute e{}; + + e.id = static_cast(atoi(row[0])); + e.character_id = static_cast(strtoul(row[1], nullptr, 10)); + e.tier = static_cast(strtoul(row[2], nullptr, 10)); + e.tribute = static_cast(strtoul(row[3], nullptr, 10)); + + all_entries.push_back(e); + } + + return all_entries; + } + + static int DeleteWhere(Database& db, const std::string &where_filter) + { + auto results = db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int Truncate(Database& db) + { + auto results = db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int64 GetMaxId(Database& db) + { + auto results = db.QueryDatabase( + fmt::format( + "SELECT COALESCE(MAX({}), 0) FROM {}", + PrimaryKey(), + TableName() + ) + ); + + return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); + } + + static int64 Count(Database& db, const std::string &where_filter = "") + { + auto results = db.QueryDatabase( + fmt::format( + "SELECT COUNT(*) FROM {} {}", + TableName(), + (where_filter.empty() ? "" : "WHERE " + where_filter) + ) + ); + + return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_TRIBUTE_REPOSITORY_H diff --git a/common/repositories/character_tribute_repository.h b/common/repositories/character_tribute_repository.h new file mode 100644 index 000000000..64fbb9012 --- /dev/null +++ b/common/repositories/character_tribute_repository.h @@ -0,0 +1,50 @@ +#ifndef EQEMU_CHARACTER_TRIBUTE_REPOSITORY_H +#define EQEMU_CHARACTER_TRIBUTE_REPOSITORY_H + +#include "../database.h" +#include "../strings.h" +#include "base/base_character_tribute_repository.h" + +class CharacterTributeRepository: public BaseCharacterTributeRepository { +public: + + /** + * This file was auto generated and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators. + * + * Base Methods (Subject to be expanded upon in time) + * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterTributeRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterTributeRepository::GetWhereNeverExpires() + * CharacterTributeRepository::GetWhereXAndY() + * CharacterTributeRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ + + // Custom extended repository methods here + +}; + +#endif //EQEMU_CHARACTER_TRIBUTE_REPOSITORY_H diff --git a/common/rulesys.cpp b/common/rulesys.cpp index 639df7e48..0fbd2fa89 100644 --- a/common/rulesys.cpp +++ b/common/rulesys.cpp @@ -141,11 +141,11 @@ bool RuleManager::SetRule(const std::string &rule_name, const std::string &rule_ switch (type) { case IntRule: - m_RuleIntValues[index] = Strings::ToInt(rule_value.c_str()); + m_RuleIntValues[index] = Strings::ToInt(rule_value); LogRules("Set rule [{}] to value [{}]", rule_name, m_RuleIntValues[index]); break; case RealRule: - m_RuleRealValues[index] = Strings::ToFloat(rule_value.c_str()); + m_RuleRealValues[index] = Strings::ToFloat(rule_value); LogRules("Set rule [{}] to value [{:.2f}]", rule_name, m_RuleRealValues[index]); break; case BoolRule: @@ -369,7 +369,7 @@ void RuleManager::_SaveRule(Database *db, RuleType type, uint16 index) { break; } - const auto rule_notes = _GetRuleNotes(type, index); + const auto& rule_notes = _GetRuleNotes(type, index); const auto& l = RuleValuesRepository::GetWhere( *db, diff --git a/common/ruletypes.h b/common/ruletypes.h index fdef35ecd..53f65b4c4 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -136,7 +136,6 @@ RULE_BOOL(Character, EnableFoodRequirement, true, "If disabled, food is no longe 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, "Multiplier for environmental damage like fall damage.") RULE_BOOL(Character, UnmemSpellsOnDeath, true, "Setting whether at death all memorized Spells are forgotten") RULE_REAL(Character, TradeskillUpAlchemy, 2.0, "Alchemy skillup rate adjustment. Lower is faster") @@ -274,7 +273,6 @@ RULE_BOOL(World, EnableTutorialButton, true, "Setting whether the Tutorial butto RULE_BOOL(World, EnableReturnHomeButton, true, "Setting whether the Return Home button should be active") RULE_INT(World, MaxLevelForTutorial, 10, "The highest level with which you can enter the tutorial") RULE_INT(World, TutorialZoneID, 189, "Zone ID of the tutorial") -RULE_INT(World, GuildBankZoneID, 345, "Zone ID of the guild bank") RULE_INT(World, MinOfflineTimeToReturnHome, 21600, "Minimum offline time to activate the Return Home button. 21600 seconds is 6 Hours") RULE_INT(World, MaxClientsPerIP, -1, "Maximum number of clients allowed to connect per IP address if account status is < AddMaxClientsStatus. Default value: -1 (feature disabled)") RULE_INT(World, ExemptMaxClientsStatus, -1, "Exempt accounts from the MaxClientsPerIP and AddMaxClientsStatus rules, if their status is >= this value. Default value: -1 (feature disabled)") @@ -299,6 +297,7 @@ RULE_BOOL(World, StartZoneSameAsBindOnCreation, true, "Should the start zone alw RULE_BOOL(World, EnforceCharacterLimitAtLogin, false, "Enforce the limit for characters that are online at login") RULE_BOOL(World, EnableDevTools, true, "Enable or Disable the Developer Tools globally (Most of the time you want this enabled)") RULE_BOOL(World, EnableChecksumVerification, false, "Enable or Disable the Checksum Verification for eqgame.exe and spells_us.txt") +RULE_INT(World, MaximumQuestErrors, 30, "Changes the maximum number of quest errors that can be displayed in #questerrors, default is 30") RULE_CATEGORY_END() RULE_CATEGORY(Zone) @@ -446,7 +445,8 @@ RULE_BOOL(Spells, IllusionsAlwaysPersist, false, "Allows Illusions to persist be RULE_BOOL(Spells, UseItemCastMessage, false, "Enable to use the \"item begins to glow\" messages when casting from an item.") RULE_BOOL(Spells, TargetsTargetRequiresCombatRange, true, "Disable to remove combat range requirement from Target's Target Spell Target Type") RULE_BOOL(Spells, NPCBuffLevelRestrictions, false, "Impose BuffLevelRestrictions on NPCs if true") -RULE_BOOL(Spells, ResurrectionEffectsBlock, true, "If enabled, resurrection effects cannot be overwritten.") +RULE_INT(Spells, ResurrectionEffectBlock, 2, "0 = allow overwrites/rule disabled. If set to 1 = Block all buffs that would overwrite Resurrection Effects. If set to 2 = Will not overwrite Resurrection Effects, instead moves new buff to an empty slot if available. Default is 2.") +RULE_BOOL(Spells, WaterMatchRequiredForLoS, true, "Enable/Disable the requirement of both the attacker/victim being both in or out of water for spells LoS to pass.") RULE_CATEGORY_END() RULE_CATEGORY(Combat) @@ -519,6 +519,8 @@ RULE_BOOL(Combat, HeadshotOnlyHumanoids, true, "Enable or disable Headshot only RULE_BOOL(Combat, EnableWarriorShielding, true, "Enable or disable Warrior Shielding Ability (/shield), true by default.") RULE_BOOL(Combat, BackstabIgnoresElemental, false, "Enable or disable Elemental weapon damage affecting backstab damage, false by default.") RULE_BOOL(Combat, BackstabIgnoresBane, false, "Enable or disable Bane weapon damage affecting backstab damage, false by default.") +RULE_BOOL(Combat, SummonMeleeRange, true, "Enable or disable summoning of a player when already in melee range of the summoner.") +RULE_BOOL(Combat, WaterMatchRequiredForAutoFireLoS, true, "Enable/Disable the requirement of both the attacker/victim being both in or out of water for AutoFire LoS to pass.") RULE_CATEGORY_END() RULE_CATEGORY(NPC) diff --git a/common/say_link.cpp b/common/say_link.cpp index fc9f61696..5ac7b7c94 100644 --- a/common/say_link.cpp +++ b/common/say_link.cpp @@ -294,7 +294,7 @@ void EQ::SayLinkEngine::generate_text() m_LinkText = "null"; } -std::string EQ::SayLinkEngine::GenerateQuestSaylink(std::string saylink_text, bool silent, std::string link_name) +std::string EQ::SayLinkEngine::GenerateQuestSaylink(const std::string& saylink_text, bool silent, const std::string& link_name) { uint32 saylink_id = 0; @@ -403,16 +403,14 @@ SaylinkRepository::Saylink EQ::SayLinkEngine::GetOrSaveSaylink(std::string sayli } // if not found in database - save - if (saylinks.empty()) { - auto new_saylink = SaylinkRepository::NewEntity(); - new_saylink.phrase = saylink_text; + auto new_saylink = SaylinkRepository::NewEntity(); + new_saylink.phrase = saylink_text; - // persist to database - auto link = SaylinkRepository::InsertOne(database, new_saylink); - if (link.id > 0) { - g_cached_saylinks.emplace_back(link); - return link; - } + // persist to database + auto link = SaylinkRepository::InsertOne(database, new_saylink); + if (link.id > 0) { + g_cached_saylinks.emplace_back(link); + return link; } return {}; diff --git a/common/say_link.h b/common/say_link.h index d31a10142..6470c1c64 100644 --- a/common/say_link.h +++ b/common/say_link.h @@ -101,7 +101,7 @@ namespace EQ const std::string& LinkBody() { return m_LinkBody; } // contains string format: '' const std::string& LinkText() { return m_LinkText; } // contains string format: '' - static std::string GenerateQuestSaylink(std::string saylink_text, bool silent, std::string link_name); + static std::string GenerateQuestSaylink(const std::string& saylink_text, bool silent, const std::string& link_name); void Reset(); diff --git a/common/servertalk.h b/common/servertalk.h index d26319911..7f14a1f6c 100644 --- a/common/servertalk.h +++ b/common/servertalk.h @@ -235,18 +235,19 @@ #define ServerOP_ReloadMerchants 0x4109 #define ServerOP_ReloadNPCEmotes 0x4110 #define ServerOP_ReloadObjects 0x4111 -#define ServerOP_ReloadPerlExportSettings 0x4112 -#define ServerOP_ReloadRules 0x4113 -#define ServerOP_ReloadStaticZoneData 0x4114 -#define ServerOP_ReloadTasks 0x4115 -#define ServerOP_ReloadTitles 0x4116 -#define ServerOP_ReloadTraps 0x4117 -#define ServerOP_ReloadVariables 0x4118 -#define ServerOP_ReloadVeteranRewards 0x4119 -#define ServerOP_ReloadWorld 0x4120 -#define ServerOP_ReloadZonePoints 0x4121 -#define ServerOP_ReloadDzTemplates 0x4122 -#define ServerOP_ReloadZoneData 0x4123 +#define ServerOP_ReloadOpcodes 0x4112 +#define ServerOP_ReloadPerlExportSettings 0x4113 +#define ServerOP_ReloadRules 0x4114 +#define ServerOP_ReloadStaticZoneData 0x4115 +#define ServerOP_ReloadTasks 0x4116 +#define ServerOP_ReloadTitles 0x4117 +#define ServerOP_ReloadTraps 0x4118 +#define ServerOP_ReloadVariables 0x4119 +#define ServerOP_ReloadVeteranRewards 0x4120 +#define ServerOP_ReloadWorld 0x4121 +#define ServerOP_ReloadZonePoints 0x4122 +#define ServerOP_ReloadDzTemplates 0x4123 +#define ServerOP_ReloadZoneData 0x4124 #define ServerOP_CZDialogueWindow 0x4500 #define ServerOP_CZLDoNUpdate 0x4501 diff --git a/common/shared_tasks.cpp b/common/shared_tasks.cpp index 049cc2f6a..844cf4cc7 100644 --- a/common/shared_tasks.cpp +++ b/common/shared_tasks.cpp @@ -47,9 +47,9 @@ const SharedTasksRepository::SharedTasks &SharedTask::GetDbSharedTask() const return m_db_shared_task; } -void SharedTask::SetDbSharedTask(const SharedTasksRepository::SharedTasks &m_db_shared_task) +void SharedTask::SetDbSharedTask(const SharedTasksRepository::SharedTasks &t) { - SharedTask::m_db_shared_task = m_db_shared_task; + SharedTask::m_db_shared_task = t; } SharedTaskRequest SharedTask::GetRequestCharacters(Database &db, uint32_t requested_character_id) diff --git a/common/shared_tasks.h b/common/shared_tasks.h index c11a0a74a..b9ee0c065 100644 --- a/common/shared_tasks.h +++ b/common/shared_tasks.h @@ -216,7 +216,7 @@ public: // active record of database shared task const SharedTasksRepository::SharedTasks &GetDbSharedTask() const; - void SetDbSharedTask(const SharedTasksRepository::SharedTasks &m_db_shared_task); + void SetDbSharedTask(const SharedTasksRepository::SharedTasks &t); std::vector m_shared_task_activity_state; std::vector m_members; diff --git a/common/shareddb.cpp b/common/shareddb.cpp index a22501009..d22de7056 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -133,55 +133,54 @@ uint32 SharedDatabase::GetTotalTimeEntitledOnAccount(uint32 AccountID) { void SharedDatabase::SetMailKey(int CharID, int IPAddress, int MailKey) { - char MailKeyString[17]; + char mail_key[17]; - if (RuleB(Chat, EnableMailKeyIPVerification) == true) - sprintf(MailKeyString, "%08X%08X", IPAddress, MailKey); - else - sprintf(MailKeyString, "%08X", MailKey); + if (RuleB(Chat, EnableMailKeyIPVerification) == true) { + sprintf(mail_key, "%08X%08X", IPAddress, MailKey); + } + else { + sprintf(mail_key, "%08X", MailKey); + } - const std::string query = StringFormat("UPDATE character_data SET mailkey = '%s' WHERE id = '%i'", - MailKeyString, CharID); - const auto results = QueryDatabase(query); - if (!results.Success()) - LogError("SharedDatabase::SetMailKey({}, {}) : {}", CharID, MailKeyString, results.ErrorMessage().c_str()); + const std::string query = StringFormat( + "UPDATE character_data SET mailkey = '%s' WHERE id = '%i'", + mail_key, CharID + ); + const auto results = QueryDatabase(query); + if (!results.Success()) { + LogError("SharedDatabase::SetMailKey({}, {}) : {}", CharID, mail_key, results.ErrorMessage().c_str()); + } } -std::string SharedDatabase::GetMailKey(int CharID, bool key_only) +SharedDatabase::MailKeys SharedDatabase::GetMailKey(int character_id) { - const std::string query = StringFormat("SELECT `mailkey` FROM `character_data` WHERE `id`='%i' LIMIT 1", CharID); - auto results = QueryDatabase(query); - + const std::string query = StringFormat("SELECT `mailkey` FROM `character_data` WHERE `id`='%i' LIMIT 1", character_id); + auto results = QueryDatabase(query); if (!results.Success()) { - - Log(Logs::Detail, Logs::MySQLError, "Error retrieving mailkey from database: %s", results.ErrorMessage().c_str()); - return std::string(); + return MailKeys{}; } if (!results.RowCount()) { - - Log(Logs::General, Logs::ClientLogin, "Error: Mailkey for character id [%i] does not exist or could not be found", CharID); - return std::string(); + Log(Logs::General, + Logs::ClientLogin, + "Error: Mailkey for character id [%i] does not exist or could not be found", + character_id + ); + return MailKeys{}; } - auto& row = results.begin(); + auto &row = results.begin(); if (row != results.end()) { - std::string mail_key = row[0]; - if (mail_key.length() > 8 && key_only) { - return mail_key.substr(8); - } - else { - return mail_key; - } + return MailKeys{ + .mail_key = mail_key.substr(8), + .mail_key_full = mail_key + }; } - else { - Log(Logs::General, Logs::MySQLError, "Internal MySQL error in SharedDatabase::GetMailKey(int, bool)"); - return std::string(); - } + return MailKeys{}; } bool SharedDatabase::SaveCursor(uint32 char_id, std::list::const_iterator &start, std::list::const_iterator &end) @@ -425,17 +424,13 @@ bool SharedDatabase::DeleteSharedBankSlot(uint32 char_id, int16 slot_id) { int32 SharedDatabase::GetSharedPlatinum(uint32 account_id) { - const std::string query = StringFormat("SELECT sharedplat FROM account WHERE id = '%i'", account_id); - auto results = QueryDatabase(query); - if (!results.Success()) { - return false; - } - - if (results.RowCount() != 1) - return 0; - - auto& row = results.begin(); + const auto query = fmt::format("SELECT sharedplat FROM account WHERE id = {}", account_id); + auto results = QueryDatabase(query); + if (!results.Success() || !results.RowCount()) { + return 0; + } + auto row = results.begin(); return Strings::ToInt(row[0]); } @@ -499,25 +494,32 @@ bool SharedDatabase::GetSharedBank(uint32 id, EQ::InventoryProfile *inv, bool is { std::string query; - if (is_charid) - query = StringFormat("SELECT sb.slotid, sb.itemid, sb.charges, " - "sb.augslot1, sb.augslot2, sb.augslot3, " - "sb.augslot4, sb.augslot5, sb.augslot6, sb.custom_data " - "FROM sharedbank sb INNER JOIN character_data ch " - "ON ch.account_id=sb.acctid WHERE ch.id = %i ORDER BY sb.slotid", - id); - else - query = StringFormat("SELECT slotid, itemid, charges, " - "augslot1, augslot2, augslot3, " - "augslot4, augslot5, augslot6, custom_data " - "FROM sharedbank WHERE acctid=%i ORDER BY slotid", - id); + if (is_charid) { + query = fmt::format( + "SELECT sb.slotid, sb.itemid, sb.charges, " + "sb.augslot1, sb.augslot2, sb.augslot3, " + "sb.augslot4, sb.augslot5, sb.augslot6, sb.custom_data " + "FROM sharedbank sb INNER JOIN character_data ch " + "ON ch.account_id = sb.acctid WHERE ch.id = {} ORDER BY sb.slotid", + id + ); + } else { + query = fmt::format( + "SELECT slotid, itemid, charges, " + "augslot1, augslot2, augslot3, " + "augslot4, augslot5, augslot6, custom_data " + "FROM sharedbank WHERE acctid = {} ORDER BY slotid", + id + ); + } + auto results = QueryDatabase(query); + // If we have no results we still need to return true if (!results.Success()) { return false; } - for (auto& row = results.begin(); row != results.end(); ++row) { + for (auto row : results) { int16 slot_id = static_cast(Strings::ToInt(row[0])); uint32 item_id = Strings::ToUnsignedInt(row[1]); const int16 charges = static_cast(Strings::ToInt(row[2])); @@ -533,16 +535,26 @@ bool SharedDatabase::GetSharedBank(uint32 id, EQ::InventoryProfile *inv, bool is const EQ::ItemData *item = GetItem(item_id); if (!item) { - LogError("Warning: [{}] [{}] has an invalid item_id [{}] in inventory slot [{}]", - ((is_charid == true) ? "charid" : "acctid"), id, item_id, slot_id); + LogError( + "Warning: [{}] [{}] has an invalid item_id [{}] in inventory slot [{}]", + is_charid ? "charid" : "acctid", + id, + item_id, + slot_id + ); + continue; + } + + auto inst = CreateBaseItem(item, charges); + if (!inst) { continue; } - EQ::ItemInstance *inst = CreateBaseItem(item, charges); if (inst && item->IsClassCommon()) { for (int i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { - if (aug[i]) + if (aug[i]) { inst->PutAugment(this, i, aug[i]); + } } } @@ -556,14 +568,21 @@ bool SharedDatabase::GetSharedBank(uint32 id, EQ::InventoryProfile *inv, bool is safe_delete(inst); // Save ptr to item in inventory - if (put_slot_id != INVALID_INDEX) + if (put_slot_id != INVALID_INDEX) { continue; + } - LogError("Warning: Invalid slot_id for item in shared bank inventory: [{}]=[{}], item_id=[{}], slot_id=[{}]", - ((is_charid == true) ? "charid" : "acctid"), id, item_id, slot_id); + LogError( + "Warning: Invalid slot_id for item in shared bank inventory: [{}]=[{}], item_id=[{}], slot_id=[{}]", + is_charid ? "charid" : "acctid", + id, + item_id, + slot_id + ); - if (is_charid) + if (is_charid) { SaveInventory(id, nullptr, slot_id); + } } return true; @@ -619,7 +638,7 @@ bool SharedDatabase::GetInventory(uint32 char_id, EQ::InventoryProfile *inv) } else if (slot_id <= EQ::invbag::BANK_BAGS_END && slot_id >= EQ::invbag::BANK_BAGS_BEGIN) { // Titanium check const auto parent_index = ((slot_id - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT); - if (parent_index < EQ::invslot::SLOT_BEGIN || parent_index >= bank_size) { + if (parent_index >= bank_size) { cv_conflict = true; continue; } @@ -1564,24 +1583,28 @@ EQ::ItemInstance* SharedDatabase::CreateBaseItem(const EQ::ItemData* item, int16 if (item) { // if maxcharges is -1 that means it is an unlimited use item. // set it to 1 charge so that it is usable on creation - if (charges == 0 && item->MaxCharges == -1) + if (charges == 0 && item->MaxCharges == -1) { charges = 1; + } + // Stackable items need a minimum charge of 1 to remain moveable. - if(charges <= 0 && item->Stackable) + if (charges <= 0 && item->Stackable) { charges = 1; + } inst = new EQ::ItemInstance(item, charges); - if (inst == nullptr) { + if (!inst) { LogError("Error: valid item data returned a null reference for EQ::ItemInstance creation in SharedDatabase::CreateBaseItem()"); LogError("Item Data = ID: {}, Name: {}, Charges: {}", item->ID, item->Name, charges); return nullptr; } - if(item->CharmFileID != 0 || (item->LoreGroup >= 1000 && item->LoreGroup != -1)) { + if (item->CharmFileID != 0 || item->LoreGroup >= 1000) { inst->Initialize(this); } } + return inst; } diff --git a/common/shareddb.h b/common/shareddb.h index 7139b17fd..2956fe9b2 100644 --- a/common/shareddb.h +++ b/common/shareddb.h @@ -81,7 +81,11 @@ public: bool SetGMInvul(uint32 account_id, bool gminvul); bool SetGMFlymode(uint32 account_id, uint8 flymode); void SetMailKey(int CharID, int IPAddress, int MailKey); - std::string GetMailKey(int CharID, bool key_only = false); + struct MailKeys { + std::string mail_key; + std::string mail_key_full; + }; + MailKeys GetMailKey(int character_id); bool SaveCursor( uint32 char_id, std::list::const_iterator &start, diff --git a/common/skills.cpp b/common/skills.cpp index 41f9b2841..41dabcd69 100644 --- a/common/skills.cpp +++ b/common/skills.cpp @@ -148,33 +148,6 @@ int32 EQ::skills::GetBaseDamage(SkillType skill) } } -bool EQ::skills::IsMeleeDmg(SkillType skill) -{ - switch (skill) { - case Skill1HBlunt: - case Skill1HSlashing: - case Skill2HBlunt: - case Skill2HSlashing: - case SkillBackstab: - case SkillBash: - case SkillDragonPunch: - case SkillEagleStrike: - case SkillFlyingKick: - case SkillHandtoHand: - case SkillKick: - case Skill1HPiercing: - case SkillRiposte: - case SkillRoundKick: - case SkillThrowing: - case SkillTigerClaw: - case SkillFrenzy: - case Skill2HPiercing: - return true; - default: - return false; - } -} - const std::map& EQ::skills::GetSkillTypeMap() { static const std::map skill_type_map = { diff --git a/common/skills.h b/common/skills.h index 6e40609b9..9b7dee8e8 100644 --- a/common/skills.h +++ b/common/skills.h @@ -168,7 +168,6 @@ namespace EQ bool IsBardInstrumentSkill(SkillType skill); bool IsCastingSkill(SkillType skill); int32 GetBaseDamage(SkillType skill); - bool IsMeleeDmg(SkillType skill); extern const std::map& GetSkillTypeMap(); extern const std::vector& GetExtraDamageSkills(); diff --git a/common/spdat.cpp b/common/spdat.cpp index 43cc191e2..bb146aa61 100644 --- a/common/spdat.cpp +++ b/common/spdat.cpp @@ -77,6 +77,7 @@ #include "classes.h" #include "spdat.h" #include "../common/rulesys.h" +#include "../common/strings.h" #ifndef WIN32 #include @@ -88,11 +89,11 @@ bool IsTargetableAESpell(uint16 spell_id) { - if (IsValidSpell(spell_id) && spells[spell_id].target_type == ST_AETarget) { - return true; + if (!IsValidSpell(spell_id)) { + return false; } - return false; + return spells[spell_id].target_type == ST_AETarget; } bool IsSacrificeSpell(uint16 spell_id) @@ -102,21 +103,24 @@ bool IsSacrificeSpell(uint16 spell_id) bool IsLifetapSpell(uint16 spell_id) { - if ( - IsValidSpell(spell_id) && - ( - spells[spell_id].target_type == ST_Tap || - spells[spell_id].target_type == ST_TargetAETap || - spell_id == SPELL_ANCIENT_LIFEBANE - ) - ) { - return true; - } + if (!IsValidSpell(spell_id)) { + return false; + } - return false; + const auto& spell = spells[spell_id]; + + if ( + spell.target_type == ST_Tap || + spell.target_type == ST_TargetAETap || + spell_id == SPELL_ANCIENT_LIFEBANE + ) { + return true; + } + + return false; } -bool IsMezSpell(uint16 spell_id) +bool IsMesmerizeSpell(uint16 spell_id) { return IsEffectInSpell(spell_id, SE_Mez); } @@ -126,32 +130,50 @@ bool IsStunSpell(uint16 spell_id) return IsEffectInSpell(spell_id, SE_Stun); } -bool IsSummonSpell(uint16 spellid) +bool IsSummonSpell(uint16 spell_id) { - for (int o = 0; o < EFFECT_COUNT; o++) { - uint32 tid = spells[spellid].effect_id[o]; - if (tid == SE_SummonPet || tid == SE_SummonItem || tid == SE_SummonPC) + if (!IsValidSpell(spell_id)) { + return false; + } + + const auto& spell = spells[spell_id]; + + for (int i = 0; i < EFFECT_COUNT; i++) { + const auto effect_id = spell.effect_id[i]; + if ( + effect_id == SE_SummonPet || + effect_id == SE_SummonItem || + effect_id == SE_SummonPC + ) { return true; + } } return false; } -bool IsEvacSpell(uint16 spellid) +bool IsDamageSpell(uint16 spell_id) { - return IsEffectInSpell(spellid, SE_Succor); -} - -bool IsDamageSpell(uint16 spellid) -{ - if (IsLifetapSpell(spellid)) + if (IsLifetapSpell(spell_id)) { return false; + } - for (int o = 0; o < EFFECT_COUNT; o++) { - uint32 tid = spells[spellid].effect_id[o]; - if (spells[spellid].base_value[o] < 0 && - ((tid == SE_CurrentHPOnce) || (tid == SE_CurrentHP && spells[spellid].buff_duration < 1))) + const auto& spell = spells[spell_id]; + + for (int i = 0; i < EFFECT_COUNT; i++) { + const auto effect_id = spell.effect_id[i]; + if ( + spell.base_value[i] < 0 && + ( + effect_id == SE_CurrentHPOnce || + ( + effect_id == SE_CurrentHP && + spell.buff_duration < 1 + ) + ) + ) { return true; + } } return false; @@ -165,49 +187,83 @@ bool IsFearSpell(uint16 spell_id) bool IsCureSpell(uint16 spell_id) { - const SPDat_Spell_Struct &sp = spells[spell_id]; - - bool CureEffect = false; - - for(int i = 0; i < EFFECT_COUNT; i++){ - if (sp.effect_id[i] == SE_DiseaseCounter || sp.effect_id[i] == SE_PoisonCounter - || sp.effect_id[i] == SE_CurseCounter || sp.effect_id[i] == SE_CorruptionCounter) - CureEffect = true; + if (!IsValidSpell(spell_id)) { + return false; } - if (CureEffect && IsBeneficialSpell(spell_id)) + auto has_cure_effect = false; + + const auto& spell = spells[spell_id]; + + for (int i = 0; i < EFFECT_COUNT; i++) { + if ( + spell.effect_id[i] == SE_DiseaseCounter || + spell.effect_id[i] == SE_PoisonCounter || + spell.effect_id[i] == SE_CurseCounter || + spell.effect_id[i] == SE_CorruptionCounter + ) { + has_cure_effect = true; + } + } + + if ( + has_cure_effect && + IsBeneficialSpell(spell_id) + ) { return true; + } return false; } bool IsSlowSpell(uint16 spell_id) { - const SPDat_Spell_Struct &sp = spells[spell_id]; + if (!IsValidSpell(spell_id)) { + return false; + } - for(int i = 0; i < EFFECT_COUNT; i++) - if ((sp.effect_id[i] == SE_AttackSpeed && sp.base_value[i] < 100) || - (sp.effect_id[i] == SE_AttackSpeed4)) + const auto& spell = spells[spell_id]; + + for (int i = 0; i < EFFECT_COUNT; i++) { + const auto effect_id = spell.effect_id[i]; + if ( + effect_id == SE_AttackSpeed4 || + ( + effect_id == SE_AttackSpeed && + spell.base_value[i] < 100 + ) + ) { return true; + } + } return false; } bool IsHasteSpell(uint16 spell_id) { - const SPDat_Spell_Struct &sp = spells[spell_id]; + if (!IsValidSpell(spell_id)) { + return false; + } - for(int i = 0; i < EFFECT_COUNT; i++) - if(sp.effect_id[i] == SE_AttackSpeed) - return (sp.base_value[i] < 100); + const auto& spell = spells[spell_id]; + + for (int i = 0; i < EFFECT_COUNT; i++) { + if (spell.effect_id[i] == SE_AttackSpeed) { + return (spell.base_value[i] < 100); + } + } return false; } bool IsHarmonySpell(uint16 spell_id) { - // IsEffectInSpell(spell_id, SE_Lull) - Lull is not calculated anywhere atm - return (IsEffectInSpell(spell_id, SE_Harmony) || IsEffectInSpell(spell_id, SE_ChangeFrenzyRad)); + return ( + IsEffectInSpell(spell_id, SE_ChangeFrenzyRad) || + IsEffectInSpell(spell_id, SE_Harmony) || + IsEffectInSpell(spell_id, SE_Lull) + ); } bool IsPercentalHealSpell(uint16 spell_id) @@ -217,49 +273,88 @@ bool IsPercentalHealSpell(uint16 spell_id) bool IsGroupOnlySpell(uint16 spell_id) { - return IsValidSpell(spell_id) && spells[spell_id].good_effect == 2; + if (!IsValidSpell(spell_id)) { + return false; + } + + return spells[spell_id].good_effect == BENEFICIAL_EFFECT_GROUP_ONLY; } bool IsBeneficialSpell(uint16 spell_id) { - if (!IsValidSpell(spell_id)) + if (!IsValidSpell(spell_id)) { return false; + } // You'd think just checking goodEffect flag would be enough? - if (spells[spell_id].good_effect == 1) { + if (spells[spell_id].good_effect == BENEFICIAL_EFFECT) { // If the target type is ST_Self or ST_Pet and is a SE_CancleMagic spell // it is not Beneficial - SpellTargetType tt = spells[spell_id].target_type; - if (tt != ST_Self && tt != ST_Pet && - IsEffectInSpell(spell_id, SE_CancelMagic)) + const auto target_type = spells[spell_id].target_type; + if ( + target_type != ST_Self && + target_type != ST_Pet && + IsEffectInSpell(spell_id, SE_CancelMagic) + ) { return false; + } - // When our targettype is ST_Target, ST_AETarget, ST_Aniaml, ST_Undead, or ST_Pet + // When our targetarget_typeype is ST_Target, ST_AETarget, ST_Aniaml, ST_Undead, or ST_Pet // We need to check more things! - if (tt == ST_Target || tt == ST_AETarget || tt == ST_Animal || - tt == ST_Undead || tt == ST_Pet) { - uint16 sai = spells[spell_id].spell_affect_index; + if ( + target_type == ST_Target || + target_type == ST_AETarget || + target_type == ST_Animal || + target_type == ST_Undead || + target_type == ST_Pet + ) { + const auto spell_affect_index = spells[spell_id].spell_affect_index; // If the resisttype is magic and SpellAffectIndex is Calm/memblur/dispell sight // it's not beneficial if (spells[spell_id].resist_type == RESIST_MAGIC) { // checking these SAI cause issues with the rng defensive proc line // So I guess instead of fixing it for real, just a quick hack :P - if (spells[spell_id].effect_id[0] != SE_DefensiveProc && - (sai == SAI_Calm || sai == SAI_Dispell_Sight || sai == SAI_Memory_Blur || - sai == SAI_Calm_Song)) + if ( + spells[spell_id].effect_id[0] != SE_DefensiveProc && + ( + spell_affect_index == SAI_Calm || + spell_affect_index == SAI_Dispell_Sight || + spell_affect_index == SAI_Memory_Blur || + spell_affect_index == SAI_Calm_Song + ) + ) { return false; + } } else { // If the resisttype is not magic and spell is Bind Sight or Cast Sight // It's not beneficial - if ((sai == SAI_Calm && IsEffectInSpell(spell_id, SE_Harmony)) || (sai == SAI_Calm_Song && IsEffectInSpell(spell_id, SE_BindSight)) || (sai == SAI_Dispell_Sight && spells[spell_id].skill == 18 && !IsEffectInSpell(spell_id, SE_VoiceGraft))) + if ( + ( + spell_affect_index == SAI_Calm && + IsEffectInSpell(spell_id, SE_Harmony) + ) || + ( + spell_affect_index == SAI_Calm_Song && + IsEffectInSpell(spell_id, SE_BindSight) + ) || + ( + spell_affect_index == SAI_Dispell_Sight && + spells[spell_id].skill == EQ::skills::SkillDivination && + !IsEffectInSpell(spell_id, SE_VoiceGraft) + ) + ) { return false; + } } } } // And finally, if goodEffect is not 0 or if it's a group spell it's beneficial - return spells[spell_id].good_effect != 0 || IsGroupSpell(spell_id); + return ( + spells[spell_id].good_effect != DETRIMENTAL_EFFECT || + IsGroupSpell(spell_id) + ); } bool IsDetrimentalSpell(uint16 spell_id) @@ -267,17 +362,16 @@ bool IsDetrimentalSpell(uint16 spell_id) return !IsBeneficialSpell(spell_id); } -bool IsInvisSpell(uint16 spell_id) +bool IsInvisibleSpell(uint16 spell_id) { - if (IsEffectInSpell(spell_id, SE_Invisibility) || + return ( + IsEffectInSpell(spell_id, SE_Invisibility) || IsEffectInSpell(spell_id, SE_Invisibility2) || IsEffectInSpell(spell_id, SE_InvisVsUndead) || IsEffectInSpell(spell_id, SE_InvisVsUndead2) || IsEffectInSpell(spell_id, SE_InvisVsAnimals) || - IsEffectInSpell(spell_id, SE_ImprovedInvisAnimals)) { - return true; - } - return false; + IsEffectInSpell(spell_id, SE_ImprovedInvisAnimals) + ); } bool IsInvulnerabilitySpell(uint16 spell_id) @@ -285,7 +379,7 @@ bool IsInvulnerabilitySpell(uint16 spell_id) return IsEffectInSpell(spell_id, SE_DivineAura); } -bool IsCHDurationSpell(uint16 spell_id) +bool IsCompleteHealDurationSpell(uint16 spell_id) { return IsEffectInSpell(spell_id, SE_CompleteHeal); } @@ -312,11 +406,19 @@ bool IsSummonSkeletonSpell(uint16 spell_id) bool IsSummonPetSpell(uint16 spell_id) { - if (IsEffectInSpell(spell_id, SE_SummonPet) || - IsEffectInSpell(spell_id, SE_SummonBSTPet)) - return true; + return ( + IsEffectInSpell(spell_id, SE_SummonPet) || + IsEffectInSpell(spell_id, SE_SummonBSTPet) || + IsEffectInSpell(spell_id, SE_Familiar) + ); +} - return false; +bool IsPetSpell(uint16 spell_id) +{ + return ( + IsSummonPetSpell(spell_id) || + IsSummonSkeletonSpell(spell_id) + ); } bool IsSummonPCSpell(uint16 spell_id) @@ -334,12 +436,12 @@ bool IsBlindSpell(uint16 spell_id) return IsEffectInSpell(spell_id, SE_Blind); } -bool IsEffectHitpointsSpell(uint16 spell_id) +bool IsHealthSpell(uint16 spell_id) { return IsEffectInSpell(spell_id, SE_CurrentHP); } -bool IsReduceCastTimeSpell(uint16 spell_id) +bool IsCastTimeReductionSpell(uint16 spell_id) { return IsEffectInSpell(spell_id, SE_IncreaseSpellHaste); } @@ -349,12 +451,12 @@ bool IsIncreaseDurationSpell(uint16 spell_id) return IsEffectInSpell(spell_id, SE_IncreaseSpellDuration); } -bool IsReduceManaSpell(uint16 spell_id) +bool IsManaCostReductionSpell(uint16 spell_id) { return IsEffectInSpell(spell_id, SE_ReduceManaCost); } -bool IsExtRangeSpell(uint16 spell_id) +bool IsIncreaseRangeSpell(uint16 spell_id) { return IsEffectInSpell(spell_id, SE_IncreaseRange); } @@ -371,18 +473,23 @@ bool IsImprovedDamageSpell(uint16 spell_id) bool IsAEDurationSpell(uint16 spell_id) { + if (!IsValidSpell(spell_id)) { + return false; + } + + const auto& spell = spells[spell_id]; + /* There are plenty of spells with aoe_duration set at single digit numbers, but these do not act as duration effects. */ if ( - IsValidSpell(spell_id) && - spells[spell_id].aoe_duration >= 2500 && + spell.aoe_duration >= 2500 && ( - spells[spell_id].target_type == ST_AETarget || - spells[spell_id].target_type == ST_UndeadAE || - spells[spell_id].target_type == ST_AECaster || - spells[spell_id].target_type == ST_Ring + spell.target_type == ST_AETarget || + spell.target_type == ST_UndeadAE || + spell.target_type == ST_AECaster || + spell.target_type == ST_Ring ) ) { return true; @@ -393,64 +500,114 @@ bool IsAEDurationSpell(uint16 spell_id) bool IsPureNukeSpell(uint16 spell_id) { - int i, effect_count = 0; - - if (!IsValidSpell(spell_id)) + if (!IsValidSpell(spell_id)) { return false; + } - for (i = 0; i < EFFECT_COUNT; i++) - if (!IsBlankSpellEffect(spell_id, i)) + auto effect_count = 0; + + for (int i = 0; i < EFFECT_COUNT; i++) { + if (!IsBlankSpellEffect(spell_id, i)) { effect_count++; + } + } - if (effect_count == 1 && IsEffectInSpell(spell_id, SE_CurrentHP) && - spells[spell_id].buff_duration == 0 && IsDamageSpell(spell_id)) + if ( + effect_count == 1 && + IsEffectInSpell(spell_id, SE_CurrentHP) && + spells[spell_id].buff_duration == 0 && + IsDamageSpell(spell_id) + ) { return true; + } return false; } bool IsAENukeSpell(uint16 spell_id) { - if (IsValidSpell(spell_id) && IsPureNukeSpell(spell_id) && - spells[spell_id].aoe_range > 0) + if (!IsValidSpell(spell_id)) { + return false; + } + + if ( + IsPureNukeSpell(spell_id) && + spells[spell_id].aoe_range > 0 + ) { return true; + } return false; } bool IsPBAENukeSpell(uint16 spell_id) { - if (IsValidSpell(spell_id) && IsPureNukeSpell(spell_id) && - spells[spell_id].aoe_range > 0 && spells[spell_id].target_type == ST_AECaster) + if (!IsValidSpell(spell_id)) { + return false; + } + + const auto& spell = spells[spell_id]; + + if ( + IsPureNukeSpell(spell_id) && + spell.aoe_range > 0 && + spell.target_type == ST_AECaster + ) { return true; + } return false; } bool IsAERainNukeSpell(uint16 spell_id) { - if (IsValidSpell(spell_id) && IsPureNukeSpell(spell_id) && - spells[spell_id].aoe_range > 0 && spells[spell_id].aoe_duration > 1000) + if (!IsValidSpell(spell_id)) { + return false; + } + + const auto& spell = spells[spell_id]; + + if ( + IsPureNukeSpell(spell_id) && + spell.aoe_range > 0 && + spell.aoe_duration > 1000 + ) { return true; + } return false; } -bool IsPartialCapableSpell(uint16 spell_id) +bool IsPartialResistableSpell(uint16 spell_id) { - if (spells[spell_id].no_partial_resist) + if (!IsValidSpell(spell_id)) { return false; + } + + const auto& spell = spells[spell_id]; + + if (spell.no_partial_resist) { + return false; + } // spell uses 600 (partial) scale if first effect is damage, else it uses 200 scale. // this includes DoTs. no_partial_resist excludes spells like necro snares for (int o = 0; o < EFFECT_COUNT; o++) { - auto tid = spells[spell_id].effect_id[o]; + const auto effect_id = spell.effect_id[o]; - if (IsBlankSpellEffect(spell_id, o)) + if (IsBlankSpellEffect(spell_id, o)) { continue; + } - if ((tid == SE_CurrentHPOnce || tid == SE_CurrentHP) && spells[spell_id].base_value[o] < 0) + if ( + spell.base_value[o] < 0 && + ( + effect_id == SE_CurrentHPOnce || + effect_id == SE_CurrentHP + ) + ) { return true; + } return false; } @@ -462,270 +619,320 @@ bool IsResistableSpell(uint16 spell_id) { // for now only detrimental spells are resistable. later on i will // add specific exceptions for the beneficial spells that are resistable - if (IsDetrimentalSpell(spell_id)) - return true; - - return false; + return IsDetrimentalSpell(spell_id); } // checks if this spell affects your group bool IsGroupSpell(uint16 spell_id) { - if (IsValidSpell(spell_id) && - (spells[spell_id].target_type == ST_AEBard || - spells[spell_id].target_type == ST_Group || - spells[spell_id].target_type == ST_GroupTeleport)) - return true; + if (!IsValidSpell(spell_id)) { + return false; + } - return false; + const auto& spell = spells[spell_id]; + + return ( + spell.target_type == ST_AEBard || + spell.target_type == ST_Group || + spell.target_type == ST_GroupTeleport + ); } // checks if this spell can be targeted bool IsTGBCompatibleSpell(uint16 spell_id) { - if (IsValidSpell(spell_id) && - (!IsDetrimentalSpell(spell_id) && spells[spell_id].buff_duration != 0 && - !IsBardSong(spell_id) && !IsEffectInSpell(spell_id, SE_Illusion))) + if (!IsValidSpell(spell_id)) { + return false; + } + + if ( + !IsDetrimentalSpell(spell_id) && + spells[spell_id].buff_duration != 0 && + !IsBardSong(spell_id) && + !IsEffectInSpell(spell_id, SE_Illusion) + ) { return true; + } return false; } bool IsBardSong(uint16 spell_id) { - if (IsValidSpell(spell_id) && spells[spell_id].classes[BARD - 1] < 255 && !spells[spell_id].is_discipline) - return true; - - return false; -} - -bool IsEffectInSpell(uint16 spellid, int effect) -{ - int j; - - if (!IsValidSpell(spellid)) + if (!IsValidSpell(spell_id)) { return false; + } - for (j = 0; j < EFFECT_COUNT; j++) - if (spells[spellid].effect_id[j] == effect) - return true; + const auto& spell = spells[spell_id]; + + if ( + spell.classes[BARD - 1] < UINT8_MAX && + !spell.is_discipline + ) { + return true; + } return false; } +bool IsEffectInSpell(uint16 spell_id, int effect_id) +{ + if (!IsValidSpell(spell_id)) { + return false; + } -uint16 GetTriggerSpellID(uint16 spell_id, uint32 effect) { + const auto& spell = spells[spell_id]; - for (int index = 0; index < EFFECT_COUNT; index++) { + for (int i = 0; i < EFFECT_COUNT; i++) { + if (spell.effect_id[i] == effect_id) { + return true; + } + } + + return false; +} + +uint16 GetSpellTriggerSpellID(uint16 spell_id, int effect_id) +{ + if (!IsValidSpell(spell_id)) { + return false; + } + + const auto& spell = spells[spell_id]; + + for (int i = 0; i < EFFECT_COUNT; i++) { if ( - spells[spell_id].effect_id[index] == SE_TriggerOnCast || - spells[spell_id].effect_id[index] == SE_SpellTrigger || - spells[spell_id].effect_id[index] == SE_ApplyEffect || - spells[spell_id].effect_id[index] == SE_Trigger_Spell_Non_Item + spell.effect_id[i] == SE_TriggerOnCast || + spell.effect_id[i] == SE_SpellTrigger || + spell.effect_id[i] == SE_ApplyEffect || + spell.effect_id[i] == SE_Trigger_Spell_Non_Item ) { - int apply_effect_spell_id = spells[spell_id].limit_value[index]; - if (IsEffectInSpell(apply_effect_spell_id, effect)) { - if (IsValidSpell(apply_effect_spell_id)) { - return apply_effect_spell_id; - } + const auto trigger_spell_id = spell.limit_value[i]; + if ( + IsValidSpell(trigger_spell_id) && + IsEffectInSpell(trigger_spell_id, effect_id) + ) { + return trigger_spell_id; } } } + return 0; } // arguments are spell id and the index of the effect to check. // this is used in loops that process effects inside a spell to skip // the blanks -bool IsBlankSpellEffect(uint16 spellid, int effect_index) +bool IsBlankSpellEffect(uint16 spell_id, int effect_index) { - int effect, base_value, formula; + if (!IsValidSpell(spell_id)) { + return false; + } - effect = spells[spellid].effect_id[effect_index]; - base_value = spells[spellid].base_value[effect_index]; - formula = spells[spellid].formula[effect_index]; + const auto& spell = spells[spell_id]; + + const auto effect = spell.effect_id[effect_index]; + const auto base_value = spell.base_value[effect_index]; + const auto formula = spell.formula[effect_index]; // SE_CHA is "spacer" // SE_Stacking* are also considered blank where this is used - if (effect == SE_Blank || (effect == SE_CHA && base_value == 0 && formula == 100) || - effect == SE_StackingCommand_Block || effect == SE_StackingCommand_Overwrite) + if ( + effect == SE_Blank || + ( + effect == SE_CHA && + base_value == 0 && + formula == 100 + ) || + effect == SE_StackingCommand_Block || + effect == SE_StackingCommand_Overwrite + ) { return true; + } return false; } // checks some things about a spell id, to see if we can proceed -bool IsValidSpell(uint32 spellid) +bool IsValidSpell(uint32 spell_id) { - if (SPDAT_RECORDS > 0 && spellid != 0 && spellid != 1 && - spellid != 0xFFFFFFFF && spellid < SPDAT_RECORDS && spells[spellid].player_1[0]) + if ( + SPDAT_RECORDS > 0 && + spell_id >= 2 && + spell_id != UINT32_MAX && + spell_id < SPDAT_RECORDS && + spells[spell_id].player_1[0] + ) { return true; + } return false; } // returns the lowest level of any caster which can use the spell -int GetMinLevel(uint16 spell_id) +uint8 GetSpellMinimumLevel(uint16 spell_id) { - int r, min = 255; - const SPDat_Spell_Struct &spell = spells[spell_id]; - for (r = 0; r < PLAYER_CLASS_COUNT; r++) - if (spell.classes[r] < min) - min = spell.classes[r]; + if (!IsValidSpell(spell_id)) { + return UINT8_MAX; + } + + uint8 minimum_level = UINT8_MAX; + + const auto& spell = spells[spell_id]; + + for (int i = 0; i < PLAYER_CLASS_COUNT; i++) { + if (spell.classes[i] < minimum_level) { + minimum_level = spell.classes[i]; + } + } // if we can't cast the spell return 0 // just so it wont screw up calculations used in other areas of the code // seen 127, 254, 255 - if (min >= 127) - return 0; - else - return min; + return minimum_level; } -int GetSpellLevel(uint16 spell_id, int classa) +uint8 GetSpellLevel(uint16 spell_id, uint8 class_id) { - if (classa >= PLAYER_CLASS_COUNT) - return 255; + if (!IsValidSpell(spell_id)) { + return UINT8_MAX; + } - const SPDat_Spell_Struct &spell = spells[spell_id]; - return spell.classes[classa - 1]; + if (class_id >= PLAYER_CLASS_COUNT) { + return UINT8_MAX; + } + + return spells[spell_id].classes[class_id - 1]; } // this will find the first occurrence of effect. this is handy // for spells like mez and charm, but if the effect appears more than once // in a spell this will just give back the first one. -int GetSpellEffectIndex(uint16 spell_id, int effect) +int GetSpellEffectIndex(uint16 spell_id, int effect_id) { - int i; - - if (!IsValidSpell(spell_id)) + if (!IsValidSpell(spell_id)) { return -1; + } - for (i = 0; i < EFFECT_COUNT; i++) - if (spells[spell_id].effect_id[i] == effect) + const auto& spell = spells[spell_id]; + + for (int i = 0; i < EFFECT_COUNT; i++) { + if (spell.effect_id[i] == effect_id) { return i; + } + } return -1; } -// returns the level required to use the spell if that class/level -// can use it, 0 otherwise -// note: this isn't used by anything right now -int CanUseSpell(uint16 spellid, int classa, int level) +int CalculatePoisonCounters(uint16 spell_id) { - int level_to_use; - - if (!IsValidSpell(spellid) || classa >= PLAYER_CLASS_COUNT) + if (!IsValidSpell(spell_id)) { return 0; - - level_to_use = spells[spellid].classes[classa - 1]; - - if (level_to_use && level_to_use != 255 && level >= level_to_use) - return level_to_use; - - return 0; -} - -bool BeneficialSpell(uint16 spell_id) -{ - if (spell_id <= 0 || spell_id >= SPDAT_RECORDS - /*|| spells[spell_id].stacking == 27*/ ) - return true; - - switch (spells[spell_id].good_effect) { - case 1: - case 3: - return true; } - return false; -} + const auto& spell = spells[spell_id]; -bool GroupOnlySpell(uint16 spell_id) -{ - switch (spells[spell_id].good_effect) { - case 2: - case 3: - return true; + auto counters = 0; + + for (int i = 0; i < EFFECT_COUNT; i++) { + if ( + spell.effect_id[i] == SE_PoisonCounter && + spell.base_value[i] > 0 + ) { + counters += spell.base_value[i]; + } } - switch (spell_id) { - case 1771: - return true; + return counters; +} + +int CalculateDiseaseCounters(uint16 spell_id) +{ + if (!IsValidSpell(spell_id)) { + return 0; } - return false; + const auto& spell = spells[spell_id]; + + auto counters = 0; + + for (int i = 0; i < EFFECT_COUNT; i++) { + if ( + spell.effect_id[i] == SE_DiseaseCounter && + spell.base_value[i] > 0 + ) { + counters += spell.base_value[i]; + } + } + + return counters; } -int32 CalculatePoisonCounters(uint16 spell_id) +int CalculateCurseCounters(uint16 spell_id) { - if (!IsValidSpell(spell_id)) + if (!IsValidSpell(spell_id)) { return 0; + } - int32 Counters = 0; - for (int i = 0; i < EFFECT_COUNT; i++) - if (spells[spell_id].effect_id[i] == SE_PoisonCounter && - spells[spell_id].base_value[i] > 0) - Counters += spells[spell_id].base_value[i]; + const auto& spell = spells[spell_id]; - return Counters; + auto counters = 0; + + for (int i = 0; i < EFFECT_COUNT; i++) { + if ( + spell.effect_id[i] == SE_CurseCounter && + spell.base_value[i] > 0 + ) { + counters += spell.base_value[i]; + } + } + + return counters; } -int32 CalculateDiseaseCounters(uint16 spell_id) +int CalculateCorruptionCounters(uint16 spell_id) { - if (!IsValidSpell(spell_id)) + if (!IsValidSpell(spell_id)) { return 0; + } - int32 Counters = 0; - for (int i = 0; i < EFFECT_COUNT; i++) - if(spells[spell_id].effect_id[i] == SE_DiseaseCounter && - spells[spell_id].base_value[i] > 0) - Counters += spells[spell_id].base_value[i]; + const auto& spell = spells[spell_id]; - return Counters; + auto counters = 0; + + for (int i = 0; i < EFFECT_COUNT; i++) { + if ( + spell.effect_id[i] == SE_CorruptionCounter && + spell.base_value[i] > 0) { + + counters += spell.base_value[i]; + } + } + + return counters; } -int32 CalculateCurseCounters(uint16 spell_id) +int CalculateCounters(uint16 spell_id) { - if (!IsValidSpell(spell_id)) + if (!IsValidSpell(spell_id)) { return 0; + } - int32 Counters = 0; - for (int i = 0; i < EFFECT_COUNT; i++) - if(spells[spell_id].effect_id[i] == SE_CurseCounter && - spells[spell_id].base_value[i] > 0) - Counters += spells[spell_id].base_value[i]; - - return Counters; -} - -int32 CalculateCorruptionCounters(uint16 spell_id) -{ - if (!IsValidSpell(spell_id)) - return 0; - - int32 Counters = 0; - for (int i = 0; i < EFFECT_COUNT; i++) - if (spells[spell_id].effect_id[i] == SE_CorruptionCounter && - spells[spell_id].base_value[i] > 0) - Counters += spells[spell_id].base_value[i]; - - return Counters; -} - -int32 CalculateCounters(uint16 spell_id) -{ - int32 counter = CalculatePoisonCounters(spell_id); - if (counter != 0) + auto counter = CalculatePoisonCounters(spell_id); + if (counter) { return counter; + } counter = CalculateDiseaseCounters(spell_id); - if (counter != 0) + if (counter) { return counter; + } counter = CalculateCurseCounters(spell_id); - if (counter != 0) + if (counter) { return counter; + } counter = CalculateCorruptionCounters(spell_id); return counter; @@ -733,106 +940,159 @@ int32 CalculateCounters(uint16 spell_id) bool IsDisciplineBuff(uint16 spell_id) { - if (!IsValidSpell(spell_id)) + if (!IsValidSpell(spell_id)) { return false; + } - if (spells[spell_id].is_discipline && spells[spell_id].target_type == ST_Self) - return true; + const auto& spell = spells[spell_id]; - return false; -} - -bool IsDiscipline(uint16 spell_id) -{ - if (!IsValidSpell(spell_id)) - return false; - - if (spells[spell_id].mana == 0 && - (spells[spell_id].endurance_cost || spells[spell_id].endurance_upkeep)) - return true; - - return false; -} - -bool IsCombatSkill(uint16 spell_id) -{ - if (!IsValidSpell(spell_id)) - return false; - - //Check if Discipline - if ((spells[spell_id].mana == 0 && (spells[spell_id].endurance_cost || spells[spell_id].endurance_upkeep))) - return true; - - return false; -} - -bool IsResurrectionEffects(uint16 spell_id) -{ - // spell id 756 is Resurrection Effects spell - if (IsValidSpell(spell_id) && (spell_id == RuleI(Character, ResurrectionSicknessSpellID) || spell_id == RuleI(Character, OldResurrectionSicknessSpellID))) { + if ( + spell.is_discipline && + spell.target_type == ST_Self + ) { return true; } return false; } -bool IsRuneSpell(uint16 spell_id) +bool IsDiscipline(uint16 spell_id) { - if (IsValidSpell(spell_id)) - for (int i = 0; i < EFFECT_COUNT; i++) - if (spells[spell_id].effect_id[i] == SE_Rune) - return true; + if (!IsValidSpell(spell_id)) { + return false; + } + + const auto& spell = spells[spell_id]; + + if ( + spell.mana == 0 && + ( + spell.endurance_cost || + spell.endurance_upkeep + ) + ) { + return true; + } return false; } +bool IsCombatSkill(uint16 spell_id) +{ + if (!IsValidSpell(spell_id)) { + return false; + } + + const auto& spell = spells[spell_id]; + + //Check if Discipline + if ( + spell.mana == 0 && + ( + spell.endurance_cost || + spell.endurance_upkeep + ) + ) { + return true; + } + + return false; +} + +bool IsResurrectionEffects(uint16 spell_id) +{ + if (!IsValidSpell(spell_id)) { + return false; + } + + // spell id 756 is Resurrection Effects spell + if ( + spell_id == RuleI(Character, ResurrectionSicknessSpellID) || + spell_id == RuleI(Character, OldResurrectionSicknessSpellID) + ) { + return true; + } + + return false; +} + +int8 GetSpellResurrectionSicknessCheck(uint16 spell_id_one, uint16 spell_id_two) +{ + if ( + !IsValidSpell(spell_id_one) || + !IsValidSpell(spell_id_two) + ) { + return RuleI(Spells, ResurrectionEffectBlock); + } + + const int8 rule_value = RuleI(Spells, ResurrectionEffectBlock); + const auto& spell_one = spells[spell_id_one]; + const auto& spell_two = spells[spell_id_two]; + + if (rule_value == RES_EFFECTS_BLOCK) { + LogSpells( + "[{}] is blocked by [{}]", + spell_two.name, + spell_one.name + ); + return RES_EFFECTS_CANNOT_STACK; + } else if (rule_value == RES_EFFECTS_BLOCK_WITH_BUFFS) { + LogSpells( + "[{}] is blocked by [{}], moving to empty slot if available", + spell_one.name, + spell_two.name + ); + return MOVE_NEW_SLOT; // move to empty slot if available + } + + return NO_RES_EFFECTS_BLOCK; +} + +bool IsRuneSpell(uint16 spell_id) +{ + return IsEffectInSpell(spell_id, SE_Rune); +} + bool IsMagicRuneSpell(uint16 spell_id) { - if(IsValidSpell(spell_id)) - for(int i = 0; i < EFFECT_COUNT; i++) - if(spells[spell_id].effect_id[i] == SE_AbsorbMagicAtt) - return true; - - return false; + return IsEffectInSpell(spell_id, SE_AbsorbMagicAtt); } bool IsManaTapSpell(uint16 spell_id) { - if (IsValidSpell(spell_id)) - for (int i = 0; i < EFFECT_COUNT; i++) - if (spells[spell_id].effect_id[i] == SE_CurrentMana && - spells[spell_id].target_type == ST_Tap) - return true; - - return false; + return ( + IsEffectInSpell(spell_id, SE_CurrentMana) && + spells[spell_id].target_type == ST_Tap + ); } -bool IsAllianceSpellLine(uint16 spell_id) +bool IsAllianceSpell(uint16 spell_id) { - if (IsEffectInSpell(spell_id, SE_AddFaction)) - return true; - - return false; + return IsEffectInSpell(spell_id, SE_AddFaction); } bool IsDeathSaveSpell(uint16 spell_id) { - if (IsEffectInSpell(spell_id, SE_DeathSave)) - return true; - - return false; + return IsEffectInSpell(spell_id, SE_DeathSave); } // Deathsave spells with base of 1 are partial bool IsPartialDeathSaveSpell(uint16 spell_id) { - if (!IsValidSpell(spell_id)) + if (!IsValidSpell(spell_id)) { return false; + } - for (int i = 0; i < EFFECT_COUNT; i++) - if (spells[spell_id].effect_id[i] == SE_DeathSave && - spells[spell_id].base_value[i] == 1) + const auto& spell = spells[spell_id]; + + for (int i = 0; i < EFFECT_COUNT; i++) { + if ( + spell.effect_id[i] == SE_DeathSave && + spell.base_value[i] == PARTIAL_DEATH_SAVE + ) { return true; + } + } return false; } @@ -840,121 +1100,122 @@ bool IsPartialDeathSaveSpell(uint16 spell_id) // Deathsave spells with base 2 are "full" bool IsFullDeathSaveSpell(uint16 spell_id) { - if (!IsValidSpell(spell_id)) + if (!IsValidSpell(spell_id)) { return false; + } - for (int i = 0; i < EFFECT_COUNT; i++) - if (spells[spell_id].effect_id[i] == SE_DeathSave && - spells[spell_id].base_value[i] == 2) + const auto& spell = spells[spell_id]; + + for (int i = 0; i < EFFECT_COUNT; i++) { + if ( + spell.effect_id[i] == SE_DeathSave && + spell.base_value[i] == FULL_DEATH_SAVE + ) { return true; + } + } return false; } bool IsShadowStepSpell(uint16 spell_id) { - if (IsEffectInSpell(spell_id, SE_ShadowStep)) - return true; - - return false; + return IsEffectInSpell(spell_id, SE_ShadowStep); } bool IsSuccorSpell(uint16 spell_id) { - if (IsEffectInSpell(spell_id, SE_Succor)) - return true; - - return false; + return IsEffectInSpell(spell_id, SE_Succor); } bool IsTeleportSpell(uint16 spell_id) { - if (IsEffectInSpell(spell_id, SE_Teleport)) - return true; - - return false; + return IsEffectInSpell(spell_id, SE_Teleport); } bool IsTranslocateSpell(uint16 spell_id) { - if (IsEffectInSpell(spell_id, SE_Translocate)) - return true; - - return false; + return IsEffectInSpell(spell_id, SE_Translocate); } bool IsGateSpell(uint16 spell_id) { - if (IsEffectInSpell(spell_id, SE_Gate)) - return true; - - return false; + return IsEffectInSpell(spell_id, SE_Gate); } -bool IsPlayerIllusionSpell(uint16 spell_id) +bool IsIllusionSpell(uint16 spell_id) { - if (IsEffectInSpell(spell_id, SE_Illusion) && - spells[spell_id].target_type == ST_Self) - return true; - - return false; + return ( + IsEffectInSpell(spell_id, SE_Illusion) && + spells[spell_id].target_type == ST_Self + ); } -int GetSpellEffectDescNum(uint16 spell_id) +int GetSpellEffectDescriptionNumber(uint16 spell_id) { - if (IsValidSpell(spell_id)) + if (IsValidSpell(spell_id)) { return spells[spell_id].effect_description_id; + } return -1; } -DmgShieldType GetDamageShieldType(uint16 spell_id, int32 DSType) +DmgShieldType GetDamageShieldType(uint16 spell_id, int damage_shield_type) { - // If we have a DamageShieldType for this spell from the damageshieldtypes table, return that, - // else, make a guess, based on the resist type. Default return value is DS_THORNS - if (IsValidSpell(spell_id)) { - LogSpells("DamageShieldType for spell [{}] ([{}]) is [{}]", spell_id, - spells[spell_id].name, spells[spell_id].damage_shield_type); - - if (spells[spell_id].damage_shield_type) - return (DmgShieldType) spells[spell_id].damage_shield_type; - - switch (spells[spell_id].resist_type) { - case RESIST_COLD: - return DS_TORMENT; - case RESIST_FIRE: - return DS_BURN; - case RESIST_DISEASE: - return DS_DECAY; - default: - return DS_THORNS; - } + if (!IsValidSpell(spell_id)) { + return DS_THORNS; } - else if (DSType) - return (DmgShieldType) DSType; + const auto& spell = spells[spell_id]; + + // If we have a DamageShieldType for this spell from the damageshieldtypes table, return that, + // else, make a guess, based on the resist type. Default return value is DS_THORNS + LogSpells( + "DamageShieldType for spell [{}] ([{}]) is [{}]", + spell_id, + spell.name, + spell.damage_shield_type + ); + + if (spell.damage_shield_type) { + return static_cast(spell.damage_shield_type); + } + + switch (spells[spell_id].resist_type) { + case RESIST_COLD: + return DS_TORMENT; + case RESIST_FIRE: + return DS_BURN; + case RESIST_DISEASE: + return DS_DECAY; + default: + return DS_THORNS; + } + + if (damage_shield_type) { + return static_cast(damage_shield_type); + } return DS_THORNS; } bool IsLDoNObjectSpell(uint16 spell_id) { - if (IsEffectInSpell(spell_id, SE_AppraiseLDonChest) || - IsEffectInSpell(spell_id, SE_DisarmLDoNTrap) || - IsEffectInSpell(spell_id, SE_UnlockLDoNChest)) - return true; - - return false; + return ( + IsEffectInSpell(spell_id, SE_AppraiseLDonChest) || + IsEffectInSpell(spell_id, SE_DisarmLDoNTrap) || + IsEffectInSpell(spell_id, SE_UnlockLDoNChest) + ); } -int32 GetSpellResistType(uint16 spell_id) +int GetSpellResistType(uint16 spell_id) { return spells[spell_id].resist_type; } -int32 GetSpellTargetType(uint16 spell_id) +int GetSpellTargetType(uint16 spell_id) { - return (int32)spells[spell_id].target_type; + return static_cast(spells[spell_id].target_type); } bool IsHealOverTimeSpell(uint16 spell_id) @@ -962,7 +1223,7 @@ bool IsHealOverTimeSpell(uint16 spell_id) if ( ( IsEffectInSpell(spell_id, SE_HealOverTime) || - GetTriggerSpellID(spell_id, SE_HealOverTime) + GetSpellTriggerSpellID(spell_id, SE_HealOverTime) ) && !IsGroupSpell(spell_id) ) { @@ -979,58 +1240,84 @@ bool IsCompleteHealSpell(uint16 spell_id) spell_id == SPELL_COMPLETE_HEAL || IsEffectInSpell(spell_id, SE_CompleteHeal) || IsPercentalHealSpell(spell_id) || - GetTriggerSpellID(spell_id, SE_CompleteHeal) + GetSpellTriggerSpellID(spell_id, SE_CompleteHeal) ) && !IsGroupSpell(spell_id) ) { return true; } + return false; } bool IsFastHealSpell(uint16 spell_id) { - const int MaxFastHealCastingTime = 2000; + spell_id = ( + IsEffectInSpell(spell_id, SE_CurrentHP) ? + spell_id : + GetSpellTriggerSpellID(spell_id, SE_CurrentHP) + ); - spell_id = (IsEffectInSpell(spell_id, SE_CurrentHP)) ? spell_id : GetTriggerSpellID(spell_id, SE_CurrentHP); if (!spell_id) { - spell_id = (IsEffectInSpell(spell_id, SE_CurrentHPOnce)) ? spell_id : GetTriggerSpellID(spell_id, SE_CurrentHPOnce); + spell_id = ( + IsEffectInSpell(spell_id, SE_CurrentHPOnce) ? + spell_id : + GetSpellTriggerSpellID(spell_id, SE_CurrentHPOnce) + ); } + if (spell_id) { - if (spells[spell_id].cast_time <= MaxFastHealCastingTime && spells[spell_id].good_effect && !IsGroupSpell(spell_id)) { + if ( + spells[spell_id].cast_time <= MAX_FAST_HEAL_CASTING_TIME && + spells[spell_id].good_effect && + !IsGroupSpell(spell_id) + ) { for (int i = 0; i < EFFECT_COUNT; i++) { if ( + spells[spell_id].base_value[i] > 0 && ( spells[spell_id].effect_id[i] == SE_CurrentHP || spells[spell_id].effect_id[i] == SE_CurrentHPOnce - ) && - spells[spell_id].base_value[i] > 0 + ) ) { return true; } } } } + return false; } bool IsVeryFastHealSpell(uint16 spell_id) { - const int MaxFastHealCastingTime = 1000; + spell_id = ( + IsEffectInSpell(spell_id, SE_CurrentHP) ? + spell_id : + GetSpellTriggerSpellID(spell_id, SE_CurrentHP) + ); - spell_id = (IsEffectInSpell(spell_id, SE_CurrentHP)) ? spell_id : GetTriggerSpellID(spell_id, SE_CurrentHP); if (!spell_id) { - spell_id = (IsEffectInSpell(spell_id, SE_CurrentHPOnce)) ? spell_id : GetTriggerSpellID(spell_id, SE_CurrentHPOnce); + spell_id = ( + IsEffectInSpell(spell_id, SE_CurrentHPOnce) ? + spell_id : + GetSpellTriggerSpellID(spell_id, SE_CurrentHPOnce) + ); } + if (spell_id) { - if (spells[spell_id].cast_time <= MaxFastHealCastingTime && spells[spell_id].good_effect && !IsGroupSpell(spell_id)) { + if ( + spells[spell_id].cast_time <= MAX_VERY_FAST_HEAL_CASTING_TIME && + spells[spell_id].good_effect && + !IsGroupSpell(spell_id) + ) { for (int i = 0; i < EFFECT_COUNT; i++) { if ( + spells[spell_id].base_value[i] > 0 && ( spells[spell_id].effect_id[i] == SE_CurrentHP || spells[spell_id].effect_id[i] == SE_CurrentHPOnce - ) && - spells[spell_id].base_value[i] > 0 + ) ) { return true; } @@ -1043,20 +1330,35 @@ bool IsVeryFastHealSpell(uint16 spell_id) bool IsRegularSingleTargetHealSpell(uint16 spell_id) { - spell_id = (IsEffectInSpell(spell_id, SE_CurrentHP)) ? spell_id : GetTriggerSpellID(spell_id, SE_CurrentHP); + spell_id = ( + IsEffectInSpell(spell_id, SE_CurrentHP) ? + spell_id : + GetSpellTriggerSpellID(spell_id, SE_CurrentHP) + ); + if (!spell_id) { - spell_id = (IsEffectInSpell(spell_id, SE_CurrentHPOnce)) ? spell_id : GetTriggerSpellID(spell_id, SE_CurrentHPOnce); + spell_id = ( + IsEffectInSpell(spell_id, SE_CurrentHPOnce) ? + spell_id : + GetSpellTriggerSpellID(spell_id, SE_CurrentHPOnce) + ); } + if (spell_id) { - if (spells[spell_id].target_type == ST_Target && !IsCompleteHealSpell(spell_id) && !IsHealOverTimeSpell(spell_id) && !IsGroupSpell(spell_id)) { + if ( + spells[spell_id].target_type == ST_Target && + !IsCompleteHealSpell(spell_id) && + !IsHealOverTimeSpell(spell_id) && + !IsGroupSpell(spell_id) + ) { for (int i = 0; i < EFFECT_COUNT; i++) { if ( + spells[spell_id].base_value[i] > 0 && + spells[spell_id].buff_duration == 0 && ( spells[spell_id].effect_id[i] == SE_CurrentHP || spells[spell_id].effect_id[i] == SE_CurrentHPOnce - ) && - spells[spell_id].base_value[i] > 0 && - spells[spell_id].buff_duration == 0 + ) ) { return true; } @@ -1069,437 +1371,551 @@ bool IsRegularSingleTargetHealSpell(uint16 spell_id) bool IsRegularGroupHealSpell(uint16 spell_id) { - spell_id = (IsEffectInSpell(spell_id, SE_CurrentHP)) ? spell_id : GetTriggerSpellID(spell_id, SE_CurrentHP); + spell_id = ( + IsEffectInSpell(spell_id, SE_CurrentHP) ? + spell_id : + GetSpellTriggerSpellID(spell_id, SE_CurrentHP) + ); + if (!spell_id) { - spell_id = (IsEffectInSpell(spell_id, SE_CurrentHPOnce)) ? spell_id : GetTriggerSpellID(spell_id, SE_CurrentHPOnce); + spell_id = ( + IsEffectInSpell(spell_id, SE_CurrentHPOnce) ? + spell_id : + GetSpellTriggerSpellID(spell_id, SE_CurrentHPOnce) + ); } + if (spell_id) { - if (IsGroupSpell(spell_id) && !IsCompleteHealSpell(spell_id) && !IsHealOverTimeSpell(spell_id)) { + if ( + IsGroupSpell(spell_id) && + !IsCompleteHealSpell(spell_id) && + !IsHealOverTimeSpell(spell_id) + ) { for (int i = 0; i < EFFECT_COUNT; i++) { if ( + spells[spell_id].base_value[i] > 0 && + spells[spell_id].buff_duration == 0 && ( spells[spell_id].effect_id[i] == SE_CurrentHP || spells[spell_id].effect_id[i] == SE_CurrentHPOnce - ) && - spells[spell_id].base_value[i] > 0 && - spells[spell_id].buff_duration == 0 + ) ) { return true; } } } } + return false; } bool IsGroupCompleteHealSpell(uint16 spell_id) { - if (IsGroupSpell(spell_id) && IsCompleteHealSpell(spell_id)) + if ( + IsGroupSpell(spell_id) && + IsCompleteHealSpell(spell_id) + ) { return true; + } return false; } bool IsGroupHealOverTimeSpell(uint16 spell_id) { - if( IsGroupSpell(spell_id) && IsHealOverTimeSpell(spell_id) && spells[spell_id].buff_duration < 10) + if ( + IsGroupSpell(spell_id) && + IsHealOverTimeSpell(spell_id) && + spells[spell_id].buff_duration < 10 + ) { return true; + } return false; } bool IsDebuffSpell(uint16 spell_id) { - if (IsBeneficialSpell(spell_id) || IsEffectHitpointsSpell(spell_id) || IsStunSpell(spell_id) || - IsMezSpell(spell_id) || IsCharmSpell(spell_id) || IsSlowSpell(spell_id) || - IsEffectInSpell(spell_id, SE_Root) || IsEffectInSpell(spell_id, SE_CancelMagic) || - IsEffectInSpell(spell_id, SE_MovementSpeed) || IsFearSpell(spell_id) || IsEffectInSpell(spell_id, SE_InstantHate)) + if ( + IsBeneficialSpell(spell_id) || + IsHealthSpell(spell_id) || + IsStunSpell(spell_id) || + IsMesmerizeSpell(spell_id) || + IsCharmSpell(spell_id) || + IsSlowSpell(spell_id) || + IsEffectInSpell(spell_id, SE_Root) || + IsEffectInSpell(spell_id, SE_CancelMagic) || + IsEffectInSpell(spell_id, SE_MovementSpeed) || + IsFearSpell(spell_id) || + IsEffectInSpell(spell_id, SE_InstantHate) + ) { return false; - else - return true; + } + + return true; } bool IsResistDebuffSpell(uint16 spell_id) { - if ((IsEffectInSpell(spell_id, SE_ResistFire) || IsEffectInSpell(spell_id, SE_ResistCold) || - IsEffectInSpell(spell_id, SE_ResistPoison) || IsEffectInSpell(spell_id, SE_ResistDisease) || - IsEffectInSpell(spell_id, SE_ResistMagic) || IsEffectInSpell(spell_id, SE_ResistAll) || - IsEffectInSpell(spell_id, SE_ResistCorruption)) && !IsBeneficialSpell(spell_id)) + if ( + !IsBeneficialSpell(spell_id) && + ( + IsEffectInSpell(spell_id, SE_ResistFire) || + IsEffectInSpell(spell_id, SE_ResistCold) || + IsEffectInSpell(spell_id, SE_ResistPoison) || + IsEffectInSpell(spell_id, SE_ResistDisease) || + IsEffectInSpell(spell_id, SE_ResistMagic) || + IsEffectInSpell(spell_id, SE_ResistAll) || + IsEffectInSpell(spell_id, SE_ResistCorruption) + ) + ) { return true; - else - return false; + } + + return false; } bool IsSelfConversionSpell(uint16 spell_id) { - if (GetSpellTargetType(spell_id) == ST_Self && IsEffectInSpell(spell_id, SE_CurrentMana) && - IsEffectInSpell(spell_id, SE_CurrentHP) && spells[spell_id].base_value[GetSpellEffectIndex(spell_id, SE_CurrentMana)] > 0 && - spells[spell_id].base_value[GetSpellEffectIndex(spell_id, SE_CurrentHP)] < 0) + if ( + GetSpellTargetType(spell_id) == ST_Self && + IsEffectInSpell(spell_id, SE_CurrentMana) && + IsEffectInSpell(spell_id, SE_CurrentHP) && + spells[spell_id].base_value[GetSpellEffectIndex(spell_id, SE_CurrentMana)] > 0 && + spells[spell_id].base_value[GetSpellEffectIndex(spell_id, SE_CurrentHP)] < 0 + ) { return true; - else - return false; + } + + return false; } // returns true for both detrimental and beneficial buffs bool IsBuffSpell(uint16 spell_id) { - if (IsValidSpell(spell_id) && (spells[spell_id].buff_duration || spells[spell_id].buff_duration_formula)) + if ( + IsValidSpell(spell_id) && + ( + spells[spell_id].buff_duration || + spells[spell_id].buff_duration_formula + ) + ) { return true; + } return false; } bool IsPersistDeathSpell(uint16 spell_id) { - if (IsValidSpell(spell_id) && spells[spell_id].persist_death) + if ( + IsValidSpell(spell_id) && + spells[spell_id].persist_death + ) { return true; + } return false; } bool IsSuspendableSpell(uint16 spell_id) { - if (IsValidSpell(spell_id) && spells[spell_id].suspendable) + if ( + IsValidSpell(spell_id) && + spells[spell_id].suspendable + ) { return true; + } return false; } -uint32 GetMorphTrigger(uint32 spell_id) -{ - for (int i = 0; i < EFFECT_COUNT; ++i) - if (spells[spell_id].effect_id[i] == SE_CastOnFadeEffect) - return spells[spell_id].base_value[i]; - - return 0; -} - -bool IsCastonFadeDurationSpell(uint16 spell_id) +bool IsCastOnFadeDurationSpell(uint16 spell_id) { for (int i = 0; i < EFFECT_COUNT; ++i) { - if (spells[spell_id].effect_id[i] == SE_CastOnFadeEffect - || spells[spell_id].effect_id[i] == SE_CastOnFadeEffectNPC - || spells[spell_id].effect_id[i] == SE_CastOnFadeEffectAlways){ - - return true; + if ( + spells[spell_id].effect_id[i] == SE_CastOnFadeEffect || + spells[spell_id].effect_id[i] == SE_CastOnFadeEffectNPC || + spells[spell_id].effect_id[i] == SE_CastOnFadeEffectAlways + ) { + return true; } } + return false; } -bool IsPowerDistModSpell(uint16 spell_id) +bool IsDistanceModifierSpell(uint16 spell_id) { - if (IsValidSpell(spell_id) && - (spells[spell_id].max_distance_mod || spells[spell_id].min_distance_mod) && spells[spell_id].max_distance > spells[spell_id].min_distance) + if ( + IsValidSpell(spell_id) && + spells[spell_id].max_distance > spells[spell_id].min_distance && + ( + spells[spell_id].max_distance_mod || + spells[spell_id].min_distance_mod + ) + ) { return true; + } return false; } -uint32 GetPartialMeleeRuneReduction(uint32 spell_id) +int GetSpellPartialMeleeRuneReduction(uint16 spell_id) { - for (int i = 0; i < EFFECT_COUNT; ++i) - if (spells[spell_id].effect_id[i] == SE_MitigateMeleeDamage) + for (int i = 0; i < EFFECT_COUNT; ++i) { + if (spells[spell_id].effect_id[i] == SE_MitigateMeleeDamage) { return spells[spell_id].base_value[i]; + } + } return 0; } -uint32 GetPartialMagicRuneReduction(uint32 spell_id) +int GetSpellPartialMagicRuneReduction(uint16 spell_id) { - for (int i = 0; i < EFFECT_COUNT; ++i) - if (spells[spell_id].effect_id[i] == SE_MitigateSpellDamage) + for (int i = 0; i < EFFECT_COUNT; ++i) { + if (spells[spell_id].effect_id[i] == SE_MitigateSpellDamage) { return spells[spell_id].base_value[i]; + } + } return 0; } -uint32 GetPartialMeleeRuneAmount(uint32 spell_id) +int GetSpellPartialMeleeRuneAmount(uint16 spell_id) { - for (int i = 0; i < EFFECT_COUNT; ++i) - if (spells[spell_id].effect_id[i] == SE_MitigateMeleeDamage) + for (int i = 0; i < EFFECT_COUNT; ++i) { + if (spells[spell_id].effect_id[i] == SE_MitigateMeleeDamage) { return spells[spell_id].max_value[i]; + } + } return 0; } -uint32 GetPartialMagicRuneAmount(uint32 spell_id) +int GetSpellPartialMagicRuneAmount(uint16 spell_id) { - for (int i = 0; i < EFFECT_COUNT; ++i) - if (spells[spell_id].effect_id[i] == SE_MitigateSpellDamage) + for (int i = 0; i < EFFECT_COUNT; ++i) { + if (spells[spell_id].effect_id[i] == SE_MitigateSpellDamage) { return spells[spell_id].max_value[i]; + } + } return 0; } - -bool DetrimentalSpellAllowsRest(uint16 spell_id) +bool IsRestAllowedSpell(uint16 spell_id) { - if (IsValidSpell(spell_id)) - return spells[spell_id].allow_rest; + if (!IsValidSpell(spell_id)) { + return false; + } - return false; + return spells[spell_id].allow_rest; } -bool NoDetrimentalSpellAggro(uint16 spell_id) +bool IsNoDetrimentalSpellAggroSpell(uint16 spell_id) { - if (IsValidSpell(spell_id)) - return spells[spell_id].no_detrimental_spell_aggro; + if (!IsValidSpell(spell_id)) { + return false; + } - return false; + return spells[spell_id].no_detrimental_spell_aggro; } -bool IsStackableDot(uint16 spell_id) +bool IsStackableDOT(uint16 spell_id) { // rules according to client - if (!IsValidSpell(spell_id)) + if (!IsValidSpell(spell_id)) { return false; + } + const auto &spell = spells[spell_id]; - if (spell.unstackable_dot || spell.good_effect || !spell.buff_duration_formula) + + if ( + spell.unstackable_dot || + spell.good_effect || + !spell.buff_duration_formula) { return false; - return IsEffectInSpell(spell_id, SE_CurrentHP) || IsEffectInSpell(spell_id, SE_GravityEffect); + } + + return ( + IsEffectInSpell(spell_id, SE_CurrentHP) || + IsEffectInSpell(spell_id, SE_GravityEffect) + ); } -bool IsBardOnlyStackEffect(int effect) +bool IsBardOnlyStackEffect(int effect_id) { - switch(effect) { - /*case SE_CurrentMana: - case SE_ManaRegen_v2: - case SE_CurrentHP: - case SE_HealOverTime:*/ - case SE_BardAEDot: - return true; - default: - return false; + switch (effect_id) { + case SE_BardAEDot: + return true; + default: + return false; } } -bool IsCastWhileInvis(uint16 spell_id) +bool IsCastWhileInvisibleSpell(uint16 spell_id) { - if (!IsValidSpell(spell_id)) + if (!IsValidSpell(spell_id)) { return false; + } + const auto &spell = spells[spell_id]; - if (spell.sneak || spell.cast_not_standing) + + if ( + spell.cast_not_standing || + spell.sneak + ) { return true; + } + return false; } -bool IsEffectIgnoredInStacking(int spa) +bool IsEffectIgnoredInStacking(int effect_id) { // this should match RoF2 - switch (spa) { - case SE_SeeInvis: - case SE_DiseaseCounter: - case SE_PoisonCounter: - case SE_Levitate: - case SE_InfraVision: - case SE_UltraVision: - case SE_CurrentHPOnce: - case SE_CurseCounter: - case SE_ImprovedDamage: - case SE_ImprovedHeal: - case SE_SpellResistReduction: - case SE_IncreaseSpellHaste: - case SE_IncreaseSpellDuration: - case SE_IncreaseRange: - case SE_SpellHateMod: - case SE_ReduceReagentCost: - case SE_ReduceManaCost: - case SE_FcStunTimeMod: - case SE_LimitMaxLevel: - case SE_LimitResist: - case SE_LimitTarget: - case SE_LimitEffect: - case SE_LimitSpellType: - case SE_LimitSpell: - case SE_LimitMinDur: - case SE_LimitInstant: - case SE_LimitMinLevel: - case SE_LimitCastTimeMin: - case SE_LimitCastTimeMax: - case SE_StackingCommand_Block: - case SE_StackingCommand_Overwrite: - case SE_PetPowerIncrease: - case SE_SkillDamageAmount: - case SE_ChannelChanceSpells: - case SE_Blank: - case SE_FcDamageAmt: - case SE_SpellDurationIncByTic: - case SE_FcSpellVulnerability: - case SE_FcDamageAmtIncoming: - case SE_FcDamagePctCrit: - case SE_FcDamageAmtCrit: - case SE_ReduceReuseTimer: - case SE_LimitCombatSkills: - case SE_BlockNextSpellFocus: - case SE_SpellTrigger: - case SE_LimitManaMin: - case SE_CorruptionCounter: - case SE_ApplyEffect: - case SE_NegateSpellEffect: - case SE_LimitSpellGroup: - case SE_LimitManaMax: - case SE_FcHealAmt: - case SE_FcHealPctIncoming: - case SE_FcHealAmtIncoming: - case SE_FcHealPctCritIncoming: - case SE_FcHealAmtCrit: - case SE_LimitClass: - case SE_LimitRace: - case SE_FcBaseEffects: - case SE_FFItemClass: - case SE_SkillDamageAmount2: - case SE_FcLimitUse: - case SE_FcIncreaseNumHits: - case SE_LimitUseMin: - case SE_LimitUseType: - case SE_GravityEffect: - case 425: - //Spell effects implemented after ROF2, following same pattern, lets assume these should go here. - case SE_Fc_Spell_Damage_Pct_IncomingPC: - case SE_Fc_Spell_Damage_Amt_IncomingPC: - case SE_Ff_CasterClass: - case SE_Ff_Same_Caster: - case SE_Proc_Timer_Modifier: - case SE_Weapon_Stance: - case SE_TwinCastBlocker: - case SE_Fc_CastTimeAmt: - case SE_Fc_CastTimeMod2: - case SE_Ff_DurationMax: - case SE_Ff_Endurance_Max: - case SE_Ff_Endurance_Min: - case SE_Ff_ReuseTimeMin: - case SE_Ff_ReuseTimeMax: - case SE_Ff_Value_Min: - case SE_Ff_Value_Max: - case SE_Ff_FocusTimerMin: - return true; - default: - return false; + switch (effect_id) { + case SE_SeeInvis: + case SE_DiseaseCounter: + case SE_PoisonCounter: + case SE_Levitate: + case SE_InfraVision: + case SE_UltraVision: + case SE_CurrentHPOnce: + case SE_CurseCounter: + case SE_ImprovedDamage: + case SE_ImprovedHeal: + case SE_SpellResistReduction: + case SE_IncreaseSpellHaste: + case SE_IncreaseSpellDuration: + case SE_IncreaseRange: + case SE_SpellHateMod: + case SE_ReduceReagentCost: + case SE_ReduceManaCost: + case SE_FcStunTimeMod: + case SE_LimitMaxLevel: + case SE_LimitResist: + case SE_LimitTarget: + case SE_LimitEffect: + case SE_LimitSpellType: + case SE_LimitSpell: + case SE_LimitMinDur: + case SE_LimitInstant: + case SE_LimitMinLevel: + case SE_LimitCastTimeMin: + case SE_LimitCastTimeMax: + case SE_StackingCommand_Block: + case SE_StackingCommand_Overwrite: + case SE_PetPowerIncrease: + case SE_SkillDamageAmount: + case SE_ChannelChanceSpells: + case SE_Blank: + case SE_FcDamageAmt: + case SE_SpellDurationIncByTic: + case SE_FcSpellVulnerability: + case SE_FcDamageAmtIncoming: + case SE_FcDamagePctCrit: + case SE_FcDamageAmtCrit: + case SE_ReduceReuseTimer: + case SE_LimitCombatSkills: + case SE_BlockNextSpellFocus: + case SE_SpellTrigger: + case SE_LimitManaMin: + case SE_CorruptionCounter: + case SE_ApplyEffect: + case SE_NegateSpellEffect: + case SE_LimitSpellGroup: + case SE_LimitManaMax: + case SE_FcHealAmt: + case SE_FcHealPctIncoming: + case SE_FcHealAmtIncoming: + case SE_FcHealPctCritIncoming: + case SE_FcHealAmtCrit: + case SE_LimitClass: + case SE_LimitRace: + case SE_FcBaseEffects: + case SE_FFItemClass: + case SE_SkillDamageAmount2: + case SE_FcLimitUse: + case SE_FcIncreaseNumHits: + case SE_LimitUseMin: + case SE_LimitUseType: + case SE_GravityEffect: + case SE_Display: + //Spell effects implemented after ROF2, following same pattern, lets assume these should go here. + case SE_Fc_Spell_Damage_Pct_IncomingPC: + case SE_Fc_Spell_Damage_Amt_IncomingPC: + case SE_Ff_CasterClass: + case SE_Ff_Same_Caster: + case SE_Proc_Timer_Modifier: + case SE_Weapon_Stance: + case SE_TwinCastBlocker: + case SE_Fc_CastTimeAmt: + case SE_Fc_CastTimeMod2: + case SE_Ff_DurationMax: + case SE_Ff_Endurance_Max: + case SE_Ff_Endurance_Min: + case SE_Ff_ReuseTimeMin: + case SE_Ff_ReuseTimeMax: + case SE_Ff_Value_Min: + case SE_Ff_Value_Max: + case SE_Ff_FocusTimerMin: + return true; + default: + return false; } } -bool IsFocusLimit(int spa) +bool IsFocusLimit(int effect_id) { - switch (spa) { - case SE_LimitMaxLevel: - case SE_LimitResist: - case SE_LimitTarget: - case SE_LimitEffect: - case SE_LimitSpellType: - case SE_LimitSpell: - case SE_LimitMinDur: - case SE_LimitInstant: - case SE_LimitMinLevel: - case SE_LimitCastTimeMin: - case SE_LimitCastTimeMax: - case SE_LimitCombatSkills: - case SE_LimitManaMin: - case SE_LimitSpellGroup: - case SE_LimitManaMax: - case SE_LimitSpellClass: - case SE_LimitSpellSubclass: - case SE_LimitClass: - case SE_LimitRace: - case SE_LimitCastingSkill: - case SE_LimitUseMin: - case SE_LimitUseType: - case SE_Ff_Override_NotFocusable: - case SE_Ff_CasterClass: - case SE_Ff_Same_Caster: - case SE_Ff_DurationMax: - case SE_Ff_Endurance_Max: - case SE_Ff_Endurance_Min: - case SE_Ff_ReuseTimeMin: - case SE_Ff_ReuseTimeMax: - case SE_Ff_Value_Min: - case SE_Ff_Value_Max: - case SE_Ff_FocusTimerMin: - case SE_FFItemClass: - return true; - default: - return false; + switch (effect_id) { + case SE_LimitMaxLevel: + case SE_LimitResist: + case SE_LimitTarget: + case SE_LimitEffect: + case SE_LimitSpellType: + case SE_LimitSpell: + case SE_LimitMinDur: + case SE_LimitInstant: + case SE_LimitMinLevel: + case SE_LimitCastTimeMin: + case SE_LimitCastTimeMax: + case SE_LimitCombatSkills: + case SE_LimitManaMin: + case SE_LimitSpellGroup: + case SE_LimitManaMax: + case SE_LimitSpellClass: + case SE_LimitSpellSubclass: + case SE_LimitClass: + case SE_LimitRace: + case SE_LimitCastingSkill: + case SE_LimitUseMin: + case SE_LimitUseType: + case SE_Ff_Override_NotFocusable: + case SE_Ff_CasterClass: + case SE_Ff_Same_Caster: + case SE_Ff_DurationMax: + case SE_Ff_Endurance_Max: + case SE_Ff_Endurance_Min: + case SE_Ff_ReuseTimeMin: + case SE_Ff_ReuseTimeMax: + case SE_Ff_Value_Min: + case SE_Ff_Value_Max: + case SE_Ff_FocusTimerMin: + case SE_FFItemClass: + return true; + default: + return false; } } -uint32 GetNimbusEffect(uint16 spell_id) +int GetSpellNimbusEffect(uint16 spell_id) { - if (IsValidSpell(spell_id)) - return (int32)spells[spell_id].nimbus_effect; - - return 0; -} - -int32 GetFuriousBash(uint16 spell_id) -{ - if (!IsValidSpell(spell_id)) + if (!IsValidSpell(spell_id)) { return 0; + } + + return spells[spell_id].nimbus_effect; +} + +int GetSpellFuriousBash(uint16 spell_id) +{ + if (!IsValidSpell(spell_id)) { + return 0; + } bool found_effect_limit = false; - int32 mod = 0; + auto mod = 0; - for (int i = 0; i < EFFECT_COUNT; ++i) - if (spells[spell_id].effect_id[i] == SE_SpellHateMod) + for (int i = 0; i < EFFECT_COUNT; ++i) { + if (spells[spell_id].effect_id[i] == SE_SpellHateMod) { mod = spells[spell_id].base_value[i]; - else if (spells[spell_id].effect_id[i] == SE_LimitEffect && spells[spell_id].base_value[i] == 999) + } else if ( + spells[spell_id].effect_id[i] == SE_LimitEffect && + spells[spell_id].base_value[i] == 999 + ) { found_effect_limit = true; + } + } - if (found_effect_limit) + if (found_effect_limit) { return mod; - else - return 0; + } + + return 0; } bool IsShortDurationBuff(uint16 spell_id) { - if (IsValidSpell(spell_id) && spells[spell_id].short_buff_box != 0) - return true; + if (!IsValidSpell(spell_id)) { + return false; + } - return false; + return spells[spell_id].short_buff_box != 0; } -bool IsSpellUsableThisZoneType(uint16 spell_id, uint8 zone_type) +bool IsSpellUsableInThisZoneType(uint16 spell_id, uint8 zone_type) { + if (!IsValidSpell(spell_id)) { + return false; + } + //check if spell can be cast in any zone (-1 or 255), then if spell zonetype matches zone's zonetype // || spells[spell_id].zonetype == 255 comparing signed 8 bit int to 255 is always false - if (IsValidSpell(spell_id) && (spells[spell_id].zone_type == -1 || - spells[spell_id].zone_type == zone_type)) + if ( + spells[spell_id].zone_type == -1 || + spells[spell_id].zone_type == zone_type + ) { return true; + } return false; } const char* GetSpellName(uint16 spell_id) { - return spells[spell_id].name; + if (!IsValidSpell(spell_id)) { + return "INVALID SPELL ID IN GETSPELLNAME"; + } + + return spells[spell_id].name; } -bool SpellRequiresTarget(int spell_id) +bool IsTargetRequiredForSpell(uint16 spell_id) { - if (spells[spell_id].target_type == ST_AEClientV1 || - spells[spell_id].target_type == ST_Self || - spells[spell_id].target_type == ST_AECaster || - spells[spell_id].target_type == ST_Ring || - spells[spell_id].target_type == ST_Beam) { + if (!IsValidSpell(spell_id)) { return false; } + + const auto& spell = spells[spell_id]; + + if ( + spell.target_type == ST_AEClientV1 || + spell.target_type == ST_Self || + spell.target_type == ST_AECaster || + spell.target_type == ST_Ring || + spell.target_type == ST_Beam + ) { + return false; + } + return true; } -bool IsInstrumentModAppliedToSpellEffect(int32 spell_id, int effect) +bool IsInstrumentModifierAppliedToSpellEffect(uint16 spell_id, int effect_id) { + if (!IsValidSpell(spell_id)) { + return false; + } //Effects that are verified modifiable by bard instrument/singing mods, or highly likely due to similiar type of effect. - switch (effect) { - + switch (effect_id) { //Only modify instant endurance or mana effects (Ie. Mana drain, Crescendo line) case SE_CurrentEndurance: case SE_CurrentMana: { - if (spells[spell_id].buff_duration == 0) { - return true; - } - //Mana regen is not modified. - return false; + return spells[spell_id].buff_duration == 0; } case SE_CurrentHP: @@ -1591,7 +2007,7 @@ bool IsInstrumentModAppliedToSpellEffect(int32 spell_id, int effect) //Allowing anything not confirmed to be restricted / allowed to receive modifiers, as to not inhbit anyone making custom bard songs. } -bool IsPulsingBardSong(int32 spell_id) +bool IsPulsingBardSong(uint16 spell_id) { if (!IsValidSpell(spell_id)) { return false; @@ -1610,22 +2026,22 @@ bool IsPulsingBardSong(int32 spell_id) return true; } -int GetSpellStatValue(uint32 spell_id, const char* stat_identifier, uint8 slot) +int GetSpellStatValue(uint16 spell_id, const char* stat_identifier, uint8 slot) { - if (!IsValidSpell(spell_id)) + if (!IsValidSpell(spell_id)) { return 0; - - if (!stat_identifier) - return 0; - - if (slot > 0) - slot -= 1; - - std::string id = stat_identifier; - for(uint32 i = 0; i < id.length(); ++i) { - id[i] = tolower(id[i]); } + if (!stat_identifier) { + return 0; + } + + if (slot > 0) { + slot -= 1; + } + + const auto id = Strings::ToLower(stat_identifier); + if (slot < 16) { if (id == "classes") { return spells[spell_id].classes[slot]; } else if (id == "deities") { return spells[spell_id].deities[slot]; } @@ -1724,41 +2140,62 @@ int GetSpellStatValue(uint32 spell_id, const char* stat_identifier, uint8 slot) return 0; } -bool IsVirusSpell(int32 spell_id) +bool IsVirusSpell(uint16 spell_id) { - if (GetViralMinSpreadTime(spell_id) && GetViralMaxSpreadTime(spell_id) && GetViralSpreadRange(spell_id)){ - return true; + if (!IsValidSpell(spell_id)) { + return false; } - return false; + + return ( + GetSpellViralMinimumSpreadTime(spell_id) && + GetSpellViralMaximumSpreadTime(spell_id) && + GetSpellViralSpreadRange(spell_id) + ); } -int32 GetViralMinSpreadTime(int32 spell_id) +int GetSpellViralMinimumSpreadTime(uint16 spell_id) { - return spells[spell_id].viral_targets; -} - -int32 GetViralMaxSpreadTime(int32 spell_id) -{ - return spells[spell_id].viral_timer; -} - -int32 GetViralSpreadRange(int32 spell_id) -{ - return spells[spell_id].viral_range; -} - -uint32 GetProcLimitTimer(int32 spell_id, int proc_type) { - - //This allows for support for effects that may have multiple different proc types and timers. if (!IsValidSpell(spell_id)) { return 0; } - bool use_next_timer = false; + return spells[spell_id].viral_targets; +} + +int GetSpellViralMaximumSpreadTime(uint16 spell_id) +{ + if (!IsValidSpell(spell_id)) { + return 0; + } + + return spells[spell_id].viral_timer; +} + +int GetSpellViralSpreadRange(uint16 spell_id) +{ + if (!IsValidSpell(spell_id)) { + return 0; + } + + return spells[spell_id].viral_range; +} + +int GetSpellProcLimitTimer(uint16 spell_id, int proc_type) +{ + if (!IsValidSpell(spell_id)) { + return 0; + } + + //This allows for support for effects that may have multiple different proc types and timers. + auto use_next_timer = false; + for (int i = 0; i < EFFECT_COUNT; ++i) { if (proc_type == ProcType::MELEE_PROC) { - if (spells[spell_id].effect_id[i] == SE_WeaponProc || spells[spell_id].effect_id[i] == SE_AddMeleeProc) { + if ( + spells[spell_id].effect_id[i] == SE_WeaponProc || + spells[spell_id].effect_id[i] == SE_AddMeleeProc + ) { use_next_timer = true; } } @@ -1775,16 +2212,24 @@ uint32 GetProcLimitTimer(int32 spell_id, int proc_type) { } } - if (use_next_timer && spells[spell_id].effect_id[i] == SE_Proc_Timer_Modifier) { + if ( + use_next_timer && + spells[spell_id].effect_id[i] == SE_Proc_Timer_Modifier + ) { return spells[spell_id].limit_value[i]; } } + return 0; } -bool CastRestrictedSpell(int spellid) +bool IsCastRestrictedSpell(uint16 spell_id) { - switch (spellid) { + if (!IsValidSpell(spell_id)) { + return false; + } + + switch (spell_id) { case SPELL_TOUCH_OF_VINITRAS: case SPELL_DESPERATE_HOPE: case SPELL_CHARM: @@ -1814,20 +2259,52 @@ bool CastRestrictedSpell(int spellid) case SPELL_SHAPECHANGE60: case SPELL_COMMAND_OF_DRUZZIL: case SPELL_SHAPECHANGE70: + case SPELL_GMHP25K: + case SPELL_GMHP50K: + case SPELL_GMHP100K: + case SPELL_GMHP225K: + case SPELL_GMHP475K: + case SPELL_GMHP925K: + case SPELL_GMHP2M: + case SPELL_GMHP3M: + case SPELL_GMHP5M: + case SPELL_GUIDE_ACTING_ONE: + case SPELL_GUIDE_ALLIANCE_ONE: + case SPELL_GUIDE_CANCEL_MAGIC_ONE: + case SPELL_GUIDE_JOURNEY_ONE: + case SPELL_GUIDE_VISION_ONE: + case SPELL_GUIDE_HEALTH_ONE: + case SPELL_GUIDE_INVULNERABILITY_ONE: + case SPELL_GUIDE_BOLT_ONE: + case SPELL_GUIDE_MEMORY_BLUR_ONE: + case SPELL_GUIDE_ACTING_TWO: + case SPELL_GUIDE_CANCEL_MAGIC_TWO: + case SPELL_GUIDE_JOURNEY_TWO: + case SPELL_GUIDE_VISION_TWO: + case SPELL_GUIDE_HEALTH_TWO: + case SPELL_GUIDE_INVULNERABILITY_TWO: + case SPELL_GUIDE_BOLT_TWO: + case SPELL_GUIDE_MEMORY_BLUR_TWO: + case SPELL_GUIDE_ALLIANCE_TWO: + case SPELL_GUIDE_EVACUATION: + case SPELL_GUIDE_LEVITATION: + case SPELL_GUIDE_SPELL_HASTE: + case SPELL_GUIDE_HASTE: return true; default: return false; } } -bool IgnoreCastingRestriction(int32 spell_id) { +bool IsCastNotStandingSpell(uint16 spell_id) { + if (!IsValidSpell(spell_id)) { + return false; + } + /* field 'cast_not_standing' allows casting when sitting, stunned, mezed, Divine Aura, through SPA 343 Interrupt casting Likely also allows for casting while feared, but need to confirm. Possibly also while charmed. This field also allows for damage to ignore DA immunity. */ - if (spells[spell_id].cast_not_standing) { - return true; - } - return false; + return spells[spell_id].cast_not_standing; } diff --git a/common/spdat.h b/common/spdat.h index 0a9ce18b9..2a7110420 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -171,6 +171,37 @@ #define SPELL_ILLUSION_MALE 1732 #define SPELL_UNSUMMON_SELF 892 #define SPELL_ANCIENT_LIFEBANE 2115 +#define SPELL_GMHP25K 6817 +#define SPELL_GMHP50K 6818 +#define SPELL_GMHP100K 6819 +#define SPELL_GMHP225K 6820 +#define SPELL_GMHP475K 6821 +#define SPELL_GMHP925K 6822 +#define SPELL_GMHP2M 6823 +#define SPELL_GMHP3M 6824 +#define SPELL_GMHP5M 39851 +#define SPELL_GUIDE_ACTING_ONE 778 +#define SPELL_GUIDE_ALLIANCE_ONE 810 +#define SPELL_GUIDE_CANCEL_MAGIC_ONE 811 +#define SPELL_GUIDE_JOURNEY_ONE 813 +#define SPELL_GUIDE_VISION_ONE 814 +#define SPELL_GUIDE_HEALTH_ONE 815 +#define SPELL_GUIDE_INVULNERABILITY_ONE 816 +#define SPELL_GUIDE_BOLT_ONE 817 +#define SPELL_GUIDE_MEMORY_BLUR_ONE 818 +#define SPELL_GUIDE_ACTING_TWO 1209 +#define SPELL_GUIDE_CANCEL_MAGIC_TWO 1211 +#define SPELL_GUIDE_JOURNEY_TWO 1212 +#define SPELL_GUIDE_VISION_TWO 1213 +#define SPELL_GUIDE_HEALTH_TWO 1214 +#define SPELL_GUIDE_INVULNERABILITY_TWO 1215 +#define SPELL_GUIDE_BOLT_TWO 1216 +#define SPELL_GUIDE_MEMORY_BLUR_TWO 1217 +#define SPELL_GUIDE_ALLIANCE_TWO 1219 +#define SPELL_GUIDE_EVACUATION 3921 +#define SPELL_GUIDE_LEVITATION 39852 +#define SPELL_GUIDE_SPELL_HASTE 39853 +#define SPELL_GUIDE_HASTE 39854 //spellgroup ids #define SPELLGROUP_FRENZIED_BURNOUT 2754 @@ -201,8 +232,22 @@ #define INSTRUMENT_LUTE 13011 #define INSTRUMENT_HORN 13012 +//option types for the rule Spells:ResurrectionEffectBlock +#define RES_EFFECTS_CANNOT_STACK -1 +#define NO_RES_EFFECTS_BLOCK 0 +#define RES_EFFECTS_BLOCK 1 +#define RES_EFFECTS_BLOCK_WITH_BUFFS 2 +#define MOVE_NEW_SLOT 2 -const int Z_AGGRO=10; +#define PARTIAL_DEATH_SAVE 1 +#define FULL_DEATH_SAVE 2 + +#define MAX_FAST_HEAL_CASTING_TIME 2000 +#define MAX_VERY_FAST_HEAL_CASTING_TIME 1000 + +#define DETRIMENTAL_EFFECT 0 +#define BENEFICIAL_EFFECT 1 +#define BENEFICIAL_EFFECT_GROUP_ONLY 2 const uint32 MobAISpellRange=100; // max range of buffs @@ -504,7 +549,7 @@ enum SpellRestriction HAS_NO_ILLUSIONS_OF_GRANDEUR_BUFF = 12519, // IS_HP_ABOVE_50_PCT = 16010, // IS_HP_UNDER_50_PCT = 16031, // - IS_OFF_HAND_EQUIPED = 27672, // You must be wielding a weapon or shield in your offhand to use this ability. + IS_OFF_HAND_EQUIPPED = 27672, // You must be wielding a weapon or shield in your offhand to use this ability. HAS_NO_PACT_OF_FATE_RECOURSE_BUFF = 29556, // This spell will not work while Pact of Fate Recourse is active. | caster restriction | HAS_NO_SHROUD_OF_PRAYER_BUFF = 32339, // Your target cannot receive another Quiet Prayer this soon. IS_MANA_BELOW_20_PCT = 38311, // This ability requires you to be at or below 20% of your maximum mana. @@ -1160,7 +1205,7 @@ typedef enum { #define SE_LimitUseMin 422 // implemented, @Ff Minium amount of numhits for a spell to be focused, base: numhit amt #define SE_LimitUseType 423 // implemented, @Ff Focus will only affect if has this numhits type, base: numhit 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_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_SkillProcAttempt 427 // implemented - chance to proc when using a skill(ie taunt) #define SE_LimitToSkill 428 // implemented, @Procs, limits what combat skills will effect a skill proc, base: skill value, limit: none, max: none @@ -1211,7 +1256,7 @@ typedef enum { #define SE_Double_Backstab_Front 473 // implemented - Chance to double backstab from front #define SE_Pet_Crit_Melee_Damage_Pct_Owner 474 // implemenetd - Critical damage mod applied to pets from owner #define SE_Trigger_Spell_Non_Item 475 // implemented - Trigger spell on cast only if not from item click. -#define SE_Weapon_Stance 476 // implemented, @Misc, Apply a specific spell buffs automatically depending 2Hander, Shield or Duel Wield is equiped, base: spellid, base: 0=2H 1=Shield 2=DW, max: none +#define SE_Weapon_Stance 476 // implemented, @Misc, Apply a specific spell buffs automatically depending 2Hander, Shield or Dual Wield is equipped, base: spellid, base: 0=2H 1=Shield 2=DW, max: none #define SE_Hatelist_To_Top_Index 477 // Implemented - Chance to be set to top of rampage list #define SE_Hatelist_To_Tail_Index 478 // Implemented - Chance to be set to bottom of rampage list #define SE_Ff_Value_Min 479 // implemented, @Ff, Minimum base value of a spell that can be focused, base: spells to be focused base1 value @@ -1443,7 +1488,7 @@ extern int32 SPDAT_RECORDS; bool IsTargetableAESpell(uint16 spell_id); bool IsSacrificeSpell(uint16 spell_id); bool IsLifetapSpell(uint16 spell_id); -bool IsMezSpell(uint16 spell_id); +bool IsMesmerizeSpell(uint16 spell_id); bool IsStunSpell(uint16 spell_id); bool IsSlowSpell(uint16 spell_id); bool IsHasteSpell(uint16 spell_id); @@ -1452,22 +1497,23 @@ bool IsPercentalHealSpell(uint16 spell_id); bool IsGroupOnlySpell(uint16 spell_id); bool IsBeneficialSpell(uint16 spell_id); bool IsDetrimentalSpell(uint16 spell_id); -bool IsInvisSpell(uint16 spell_id); +bool IsInvisibleSpell(uint16 spell_id); bool IsInvulnerabilitySpell(uint16 spell_id); -bool IsCHDurationSpell(uint16 spell_id); +bool IsCompleteHealDurationSpell(uint16 spell_id); bool IsPoisonCounterSpell(uint16 spell_id); bool IsDiseaseCounterSpell(uint16 spell_id); bool IsSummonItemSpell(uint16 spell_id); bool IsSummonSkeletonSpell(uint16 spell_id); bool IsSummonPetSpell(uint16 spell_id); bool IsSummonPCSpell(uint16 spell_id); +bool IsPetSpell(uint16 spell_id); bool IsCharmSpell(uint16 spell_id); bool IsBlindSpell(uint16 spell_id); -bool IsEffectHitpointsSpell(uint16 spell_id); -bool IsReduceCastTimeSpell(uint16 spell_id); +bool IsHealthSpell(uint16 spell_id); +bool IsCastTimeReductionSpell(uint16 spell_id); bool IsIncreaseDurationSpell(uint16 spell_id); -bool IsReduceManaSpell(uint16 spell_id); -bool IsExtRangeSpell(uint16 spell_id); +bool IsManaCostReductionSpell(uint16 spell_id); +bool IsIncreaseRangeSpell(uint16 spell_id); bool IsImprovedHealingSpell(uint16 spell_id); bool IsImprovedDamageSpell(uint16 spell_id); bool IsAEDurationSpell(uint16 spell_id); @@ -1475,26 +1521,22 @@ bool IsPureNukeSpell(uint16 spell_id); bool IsAENukeSpell(uint16 spell_id); bool IsPBAENukeSpell(uint16 spell_id); bool IsAERainNukeSpell(uint16 spell_id); -bool IsPartialCapableSpell(uint16 spell_id); +bool IsPartialResistableSpell(uint16 spell_id); bool IsResistableSpell(uint16 spell_id); bool IsGroupSpell(uint16 spell_id); bool IsTGBCompatibleSpell(uint16 spell_id); bool IsBardSong(uint16 spell_id); -bool IsEffectInSpell(uint16 spellid, int effect); -uint16 GetTriggerSpellID(uint16 spell_id, uint32 effect); -bool IsBlankSpellEffect(uint16 spellid, int effect_index); -bool IsValidSpell(uint32 spellid); -bool IsSummonSpell(uint16 spellid); -bool IsEvacSpell(uint16 spellid); -bool IsDamageSpell(uint16 spellid); -bool IsFearSpell(uint16 spellid); -bool IsCureSpell(uint16 spellid); -bool BeneficialSpell(uint16 spell_id); -bool GroupOnlySpell(uint16 spell_id); -int GetSpellEffectIndex(uint16 spell_id, int effect); -int CanUseSpell(uint16 spellid, int classa, int level); -int GetMinLevel(uint16 spell_id); -int GetSpellLevel(uint16 spell_id, int classa); +bool IsEffectInSpell(uint16 spell_id, int effect_id); +uint16 GetSpellTriggerSpellID(uint16 spell_id, int effect_id); +bool IsBlankSpellEffect(uint16 spell_id, int effect_index); +bool IsValidSpell(uint32 spell_id); +bool IsSummonSpell(uint16 spell_id); +bool IsDamageSpell(uint16 spell_id); +bool IsFearSpell(uint16 spell_id); +bool IsCureSpell(uint16 spell_id); +int GetSpellEffectIndex(uint16 spell_id, int effect_id); +uint8 GetSpellMinimumLevel(uint16 spell_id); +uint8 GetSpellLevel(uint16 spell_id, uint8 class_id); int CalcBuffDuration_formula(int level, int formula, int duration); int32 CalculatePoisonCounters(uint16 spell_id); int32 CalculateDiseaseCounters(uint16 spell_id); @@ -1505,10 +1547,11 @@ bool IsDisciplineBuff(uint16 spell_id); bool IsDiscipline(uint16 spell_id); bool IsCombatSkill(uint16 spell_id); bool IsResurrectionEffects(uint16 spell_id); +int8 GetSpellResurrectionSicknessCheck(uint16 spell_id_one, uint16 spell_id_two); bool IsRuneSpell(uint16 spell_id); bool IsMagicRuneSpell(uint16 spell_id); bool IsManaTapSpell(uint16 spell_id); -bool IsAllianceSpellLine(uint16 spell_id); +bool IsAllianceSpell(uint16 spell_id); bool IsDeathSaveSpell(uint16 spell_id); bool IsFullDeathSaveSpell(uint16 spell_id); bool IsPartialDeathSaveSpell(uint16 spell_id); @@ -1517,10 +1560,10 @@ bool IsSuccorSpell(uint16 spell_id); bool IsTeleportSpell(uint16 spell_id); bool IsTranslocateSpell(uint16 spell_id); bool IsGateSpell(uint16 spell_id); -bool IsPlayerIllusionSpell(uint16 spell_id); // seveian 2008-09-23 +bool IsIllusionSpell(uint16 spell_id); bool IsLDoNObjectSpell(uint16 spell_id); -int32 GetSpellResistType(uint16 spell_id); -int32 GetSpellTargetType(uint16 spell_id); +int GetSpellResistType(uint16 spell_id); +int GetSpellTargetType(uint16 spell_id); bool IsHealOverTimeSpell(uint16 spell_id); bool IsCompleteHealSpell(uint16 spell_id); bool IsFastHealSpell(uint16 spell_id); @@ -1535,38 +1578,36 @@ bool IsSelfConversionSpell(uint16 spell_id); bool IsBuffSpell(uint16 spell_id); bool IsPersistDeathSpell(uint16 spell_id); bool IsSuspendableSpell(uint16 spell_id); -uint32 GetMorphTrigger(uint32 spell_id); -bool IsCastonFadeDurationSpell(uint16 spell_id); -bool IsPowerDistModSpell(uint16 spell_id); -uint32 GetPartialMeleeRuneReduction(uint32 spell_id); -uint32 GetPartialMagicRuneReduction(uint32 spell_id); -uint32 GetPartialMeleeRuneAmount(uint32 spell_id); -uint32 GetPartialMagicRuneAmount(uint32 spell_id); -bool NoDetrimentalSpellAggro(uint16 spell_id); -bool IsStackableDot(uint16 spell_id); -bool IsBardOnlyStackEffect(int effect); -bool IsCastWhileInvis(uint16 spell_id); -bool IsEffectIgnoredInStacking(int spa); -bool IsFocusLimit(int spa); -bool SpellRequiresTarget(int target_type); -bool IsVirusSpell(int32 spell_id); -int GetViralMinSpreadTime(int32 spell_id); -int GetViralMaxSpreadTime(int32 spell_id); -int GetViralSpreadRange(int32 spell_id); -bool IsInstrumentModAppliedToSpellEffect(int32 spell_id, int effect); -bool IsPulsingBardSong(int32 spell_id); -uint32 GetProcLimitTimer(int32 spell_id, int proc_type); -bool IgnoreCastingRestriction(int32 spell_id); -int CalcPetHp(int levelb, int classb, int STA = 75); -int GetSpellEffectDescNum(uint16 spell_id); -DmgShieldType GetDamageShieldType(uint16 spell_id, int32 DSType = 0); -bool DetrimentalSpellAllowsRest(uint16 spell_id); -uint32 GetNimbusEffect(uint16 spell_id); -int32 GetFuriousBash(uint16 spell_id); +bool IsCastOnFadeDurationSpell(uint16 spell_id); +bool IsDistanceModifierSpell(uint16 spell_id); +int GetSpellPartialMeleeRuneReduction(uint16 spell_id); +int GetSpellPartialMagicRuneReduction(uint16 spell_id); +int GetSpellPartialMeleeRuneAmount(uint16 spell_id); +int GetSpellPartialMagicRuneAmount(uint16 spell_id); +bool IsNoDetrimentalSpellAggroSpell(uint16 spell_id); +bool IsStackableDOT(uint16 spell_id); +bool IsBardOnlyStackEffect(int effect_id); +bool IsCastWhileInvisibleSpell(uint16 spell_id); +bool IsEffectIgnoredInStacking(int effect_id); +bool IsFocusLimit(int effect_id); +bool IsTargetRequiredForSpell(uint16 spell_id); +bool IsVirusSpell(uint16 spell_id); +int GetSpellViralMinimumSpreadTime(uint16 spell_id); +int GetSpellViralMaximumSpreadTime(uint16 spell_id); +int GetSpellViralSpreadRange(uint16 spell_id); +bool IsInstrumentModifierAppliedToSpellEffect(uint16 spell_id, int effect_id); +bool IsPulsingBardSong(uint16 spell_id); +int GetSpellProcLimitTimer(uint16 spell_id, int proc_type); +bool IsCastNotStandingSpell(uint16 spell_id); +int GetSpellEffectDescriptionNumber(uint16 spell_id); +DmgShieldType GetDamageShieldType(uint16 spell_id, int damage_shield_type = 0); +bool IsRestAllowedSpell(uint16 spell_id); +int GetSpellNimbusEffect(uint16 spell_id); +int GetSpellFuriousBash(uint16 spell_id); bool IsShortDurationBuff(uint16 spell_id); -bool IsSpellUsableThisZoneType(uint16 spell_id, uint8 zone_type); +bool IsSpellUsableInThisZoneType(uint16 spell_id, uint8 zone_type); const char *GetSpellName(uint16 spell_id); -int GetSpellStatValue(uint32 spell_id, const char* stat_identifier, uint8 slot = 0); -bool CastRestrictedSpell(int spellid); +int GetSpellStatValue(uint16 spell_id, const char* stat_identifier, uint8 slot = 0); +bool IsCastRestrictedSpell(uint16 spell_id); #endif diff --git a/common/stacktrace/backward.hpp b/common/stacktrace/backward.hpp index c2a81628e..12771df08 100644 --- a/common/stacktrace/backward.hpp +++ b/common/stacktrace/backward.hpp @@ -658,11 +658,11 @@ typedef pdb_symbol current; size_t next = 0; size_t delimiter_size = sizeof(kBackwardPathDelimiter) - 1; while ((next = s.find(kBackwardPathDelimiter, last)) != std::string::npos) { - out.push_back(s.substr(last, next - last)); + out.emplace_back(s.substr(last, next - last)); last = next + delimiter_size; } if (last <= s.length()) { - out.push_back(s.substr(last)); + out.emplace_back(s.substr(last)); } return out; } @@ -3760,7 +3760,7 @@ private: continue; started = true; } - lines.push_back(make_pair(line_idx, line)); + lines.emplace_back(make_pair(line_idx, line)); } lines.erase( diff --git a/common/strings.cpp b/common/strings.cpp index dc50b0020..4ecb178ec 100644 --- a/common/strings.cpp +++ b/common/strings.cpp @@ -76,7 +76,7 @@ std::vector Strings::Split(const std::string& s, const std::string& res.push_back(token); } - res.push_back(s.substr(pos_start)); + res.emplace_back(s.substr(pos_start)); return res; } @@ -287,15 +287,12 @@ std::string Strings::Commify(const std::string &number) for (i = string_length - 3; i >= 0; i -= 3) { if (i > 0) { temp_string = "," + number.substr(static_cast(i), 3) + temp_string; - } - else { + } else { temp_string = number.substr(static_cast(i), 3) + temp_string; } } - if (i < 0) { - temp_string = number.substr(0, static_cast(3 + i)) + temp_string; - } + temp_string = number.substr(0, static_cast(3 + i)) + temp_string; return temp_string; } @@ -373,7 +370,8 @@ std::string Strings::NumberToWords(unsigned long long int n) return res; } -std::string Strings::Money(uint32 platinum, uint32 gold, uint32 silver, uint32 copper) + +std::string Strings::Money(uint64 platinum, uint64 gold, uint64 silver, uint64 copper) { std::string money_string = "Unknown"; if (copper && silver && gold && platinum) { // CSGP diff --git a/common/strings.h b/common/strings.h index f74da2407..3cf30cb31 100644 --- a/common/strings.h +++ b/common/strings.h @@ -114,7 +114,7 @@ public: static std::string Join(const std::vector &ar, const std::string &delim); static std::string Join(const std::vector &ar, const std::string &delim); static std::string MillisecondsToTime(int duration); - static std::string Money(uint32 platinum, uint32 gold = 0, uint32 silver = 0, uint32 copper = 0); + static std::string Money(uint64 platinum, uint64 gold = 0, uint64 silver = 0, uint64 copper = 0); static std::string NumberToWords(unsigned long long int n); static std::string Repeat(std::string s, int n); static std::string Replace(std::string subject, const std::string &search, const std::string &replace); @@ -219,7 +219,7 @@ std::vector join_pair( std::vector output; for (const std::pair &src_iter: src) { - output.push_back( + output.emplace_back( fmt::format( "{}{}{}{}{}{}{}", @@ -253,7 +253,7 @@ std::vector join_tuple( for (const std::tuple &src_iter: src) { - output.push_back( + output.emplace_back( fmt::format( "{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}", diff --git a/common/termcolor/rang.hpp b/common/termcolor/rang.hpp index 090c46d80..31d56e16c 100644 --- a/common/termcolor/rang.hpp +++ b/common/termcolor/rang.hpp @@ -220,6 +220,8 @@ inline bool isMsysPty(int fd) noexcept #endif +inline bool g_is_forced_tty = std::getenv("IS_TTY"); + inline bool isTerminal(const std::streambuf *osbuf) noexcept { if (g_is_forced_tty) { diff --git a/common/types.h b/common/types.h index b3be97d32..8124d9f3d 100644 --- a/common/types.h +++ b/common/types.h @@ -57,9 +57,6 @@ typedef const char Const_char; //for perl XS #define safe_delete(d) if(d) { delete d; d=nullptr; } #define safe_delete_array(d) if(d) { delete[] d; d=nullptr; } -#define L32(i) ((uint32) i) -#define H32(i) ((uint32) (i >> 32)) -#define L16(i) ((uint16) i) #ifndef WIN32 // More WIN32 compatability diff --git a/common/version.h b/common/version.h index 4a679a794..50d9af96c 100644 --- a/common/version.h +++ b/common/version.h @@ -25,7 +25,7 @@ // Build variables // these get injected during the build pipeline -#define CURRENT_VERSION "22.8.0-dev" // always append -dev to the current version for custom-builds +#define CURRENT_VERSION "22.15.3-dev" // always append -dev to the current version for custom-builds #define LOGIN_VERSION "0.8.0" #define COMPILE_DATE __DATE__ #define COMPILE_TIME __TIME__ @@ -42,9 +42,9 @@ * Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt */ -#define CURRENT_BINARY_DATABASE_VERSION 9227 +#define CURRENT_BINARY_DATABASE_VERSION 9228 -#define CURRENT_BINARY_BOTS_DATABASE_VERSION 9038 +#define CURRENT_BINARY_BOTS_DATABASE_VERSION 9039 #endif diff --git a/common/worldconn.cpp b/common/worldconn.cpp deleted file mode 100644 index 77bfa6162..000000000 --- a/common/worldconn.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* EQEMu: Everquest Server Emulator - Copyright (C) 2001-2006 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 -*/ - -#include "../common/global_define.h" -#include "../common/eqemu_logsys.h" -#include - -#include "worldconn.h" -#include "eqemu_config.h" -#include "md5.h" -#include "servertalk.h" - -WorldConnection::WorldConnection(EmuTCPConnection::ePacketMode mode, const char *password) -: m_password(password) -{ - tcpc.SetPacketMode(mode); - pTryReconnect = true; - pConnected = false; -} - -WorldConnection::~WorldConnection() { -} - -bool WorldConnection::SendPacket(ServerPacket* pack) { - if (!Connected()) - return false; - return tcpc.SendPacket(pack); -} - -void WorldConnection::OnConnected() { - const EQEmuConfig *Config=EQEmuConfig::get(); - LogNetcode("[WORLD] Connected to World: [{}]:[{}]", Config->WorldIP.c_str(), Config->WorldTCPPort); - - auto pack = new ServerPacket(ServerOP_ZAAuth, 16); - MD5::Generate((const uchar*) m_password.c_str(), m_password.length(), pack->pBuffer); - SendPacket(pack); - safe_delete(pack); -} - -void WorldConnection::Process() { - //persistent connection.... - if (!Connected()) { - pConnected = tcpc.Connected(); - if (pConnected) { - OnConnected(); - } - else - return; - } - -} - -void WorldConnection::AsyncConnect() { - const EQEmuConfig *Config=EQEmuConfig::get(); - tcpc.AsyncConnect(Config->WorldIP.c_str(), Config->WorldTCPPort); -} - -bool WorldConnection::Connect() { - const EQEmuConfig *Config=EQEmuConfig::get(); - char errbuf[TCPConnection_ErrorBufferSize]; - if (tcpc.Connect(Config->WorldIP.c_str(), Config->WorldTCPPort, errbuf)) { - return true; - } else { - LogNetcode("[WORLD] WorldConnection connect: Connecting to the server [{}]:[{}] failed: [{}]", Config->WorldIP.c_str(), Config->WorldTCPPort, errbuf); - } - return false; -} - -void WorldConnection::Disconnect() { - tcpc.Disconnect(); -} - diff --git a/common/zone_store.cpp b/common/zone_store.cpp index cbc232617..3e0e3ba18 100644 --- a/common/zone_store.cpp +++ b/common/zone_store.cpp @@ -18,6 +18,29 @@ * */ +#define DEFAULT_MINIMUM_CLIP 50.0f +#define DEFAULT_MAXIMUM_CLIP 175.0f +#define DEFAULT_ZONE_FAST_REGEN 180 +#define DEFAULT_ZONE_GRAVITY 0.4f +#define DEFAULT_ZONE_MIN_MAX_EXPANSION -1 +#define DEFAULT_ZONE_MAX_AGGRO_DISTANCE 600 +#define DEFAULT_ZONE_MAX_MOVEMENT_UPDATE_RANGE 600 +#define DEFAULT_ZONE_RUNSPEED 0.4f +#define DEFAULT_ZONE_SHUTDOWN_DELAY 3600000 +#define DEFAULT_ZONE_TYPE 1 +#define FOG_SLOT_ONE 1 +#define FOG_SLOT_TWO 2 +#define FOG_SLOT_THREE 3 +#define FOG_SLOT_FOUR 4 +#define RAIN_SLOT_ONE 1 +#define RAIN_SLOT_TWO 2 +#define RAIN_SLOT_THREE 3 +#define RAIN_SLOT_FOUR 4 +#define SNOW_SLOT_ONE 1 +#define SNOW_SLOT_TWO 2 +#define SNOW_SLOT_THREE 3 +#define SNOW_SLOT_FOUR 4 + #include "zone_store.h" #include "../common/content/world_content_service.h" #include "stacktrace/backward.hpp" @@ -174,7 +197,7 @@ ZoneRepository::Zone *ZoneStore::GetZone(const char *in_zone_name) return nullptr; } -ZoneRepository::Zone *ZoneStore::GetZone(std::string in_zone_name) +ZoneRepository::Zone *ZoneStore::GetZone(const std::string& in_zone_name) { for (auto &z: m_zones) { if (z.short_name == in_zone_name) { @@ -210,3 +233,1115 @@ ZoneRepository::Zone *ZoneStore::GetZoneWithFallback(uint32 zone_id, int version return nullptr; } + +glm::vec4 ZoneStore::GetZoneSafeCoordinates(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return glm::vec4(z.safe_x, z.safe_y, z.safe_z, z.safe_heading); + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return glm::vec4(z.safe_x, z.safe_y, z.safe_z, z.safe_heading); + } + } + + return glm::vec4(0.f); +} + +float ZoneStore::GetZoneGraveyardID(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.graveyard_id; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.graveyard_id; + } + } + + return 0; +} + +uint8 ZoneStore::GetZoneMinimumLevel(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.min_level; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.min_level; + } + } + + return 0; +} + +uint8 ZoneStore::GetZoneMaximumLevel(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.max_level; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.max_level; + } + } + + return UINT8_MAX; +} + +uint8 ZoneStore::GetZoneMinimumStatus(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.min_status; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.min_status; + } + } + + return 0; +} + +int ZoneStore::GetZoneTimeZone(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.min_status; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.min_status; + } + } + + return 0; +} + +int ZoneStore::GetZoneMaximumPlayers(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.maxclients; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.maxclients; + } + } + + return 0; +} + +uint32 ZoneStore::GetZoneRuleSet(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.ruleset; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.ruleset; + } + } + + return 0; +} + +const std::string& ZoneStore::GetZoneNote(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.note; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.note; + } + } + + const auto& note = std::string(); + return note; +} + +float ZoneStore::GetZoneUnderworld(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.underworld; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.underworld; + } + } + + return 0.0f; +} + +float ZoneStore::GetZoneMinimumClip(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.minclip; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.minclip; + } + } + + return DEFAULT_MINIMUM_CLIP; +} + +float ZoneStore::GetZoneMaximumClip(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.maxclip; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.maxclip; + } + } + + return DEFAULT_MAXIMUM_CLIP; +} + +float ZoneStore::GetZoneFogMinimumClip(uint32 zone_id, uint8 slot, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + switch (slot) { + case FOG_SLOT_ONE: + return z.fog_minclip1; + case FOG_SLOT_TWO: + return z.fog_minclip2; + case FOG_SLOT_THREE: + return z.fog_minclip3; + case FOG_SLOT_FOUR: + return z.fog_minclip4; + default: + return z.fog_minclip; + } + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + switch (slot) { + case FOG_SLOT_ONE: + return z.fog_minclip1; + case FOG_SLOT_TWO: + return z.fog_minclip2; + case FOG_SLOT_THREE: + return z.fog_minclip3; + case FOG_SLOT_FOUR: + return z.fog_minclip4; + default: + return z.fog_minclip; + } + } + } + + return DEFAULT_MINIMUM_CLIP; +} + +float ZoneStore::GetZoneFogMaximumClip(uint32 zone_id, uint8 slot, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + switch (slot) { + case FOG_SLOT_ONE: + return z.fog_maxclip1; + case FOG_SLOT_TWO: + return z.fog_maxclip2; + case FOG_SLOT_THREE: + return z.fog_maxclip3; + case FOG_SLOT_FOUR: + return z.fog_maxclip4; + default: + return z.fog_maxclip; + } + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + switch (slot) { + case FOG_SLOT_ONE: + return z.fog_maxclip1; + case FOG_SLOT_TWO: + return z.fog_maxclip2; + case FOG_SLOT_THREE: + return z.fog_maxclip3; + case FOG_SLOT_FOUR: + return z.fog_maxclip4; + default: + return z.fog_maxclip; + } + } + } + + return DEFAULT_MAXIMUM_CLIP; +} + +uint8 ZoneStore::GetZoneFogRed(uint32 zone_id, uint8 slot, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + switch (slot) { + case FOG_SLOT_ONE: + return z.fog_red1; + case FOG_SLOT_TWO: + return z.fog_red2; + case FOG_SLOT_THREE: + return z.fog_red3; + case FOG_SLOT_FOUR: + return z.fog_red4; + default: + return z.fog_red; + } + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + switch (slot) { + case FOG_SLOT_ONE: + return z.fog_red1; + case FOG_SLOT_TWO: + return z.fog_red2; + case FOG_SLOT_THREE: + return z.fog_red3; + case FOG_SLOT_FOUR: + return z.fog_red4; + default: + return z.fog_red; + } + } + } + + return 0; +} + +uint8 ZoneStore::GetZoneFogGreen(uint32 zone_id, uint8 slot, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + switch (slot) { + case FOG_SLOT_ONE: + return z.fog_green1; + case FOG_SLOT_TWO: + return z.fog_green2; + case FOG_SLOT_THREE: + return z.fog_green3; + case FOG_SLOT_FOUR: + return z.fog_green4; + default: + return z.fog_green; + } + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + switch (slot) { + case FOG_SLOT_ONE: + return z.fog_green1; + case FOG_SLOT_TWO: + return z.fog_green2; + case FOG_SLOT_THREE: + return z.fog_green3; + case FOG_SLOT_FOUR: + return z.fog_green4; + default: + return z.fog_green; + } + } + } + + return 0; +} + +uint8 ZoneStore::GetZoneFogBlue(uint32 zone_id, uint8 slot, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + switch (slot) { + case FOG_SLOT_ONE: + return z.fog_blue1; + case FOG_SLOT_TWO: + return z.fog_blue2; + case FOG_SLOT_THREE: + return z.fog_blue3; + case FOG_SLOT_FOUR: + return z.fog_blue4; + default: + return z.fog_blue; + } + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + switch (slot) { + case FOG_SLOT_ONE: + return z.fog_blue1; + case FOG_SLOT_TWO: + return z.fog_blue2; + case FOG_SLOT_THREE: + return z.fog_blue3; + case FOG_SLOT_FOUR: + return z.fog_blue4; + default: + return z.fog_blue; + } + } + } + + return 0; +} + +uint8 ZoneStore::GetZoneSky(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.sky; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.sky; + } + } + + return 0; +} + +uint8 ZoneStore::GetZoneZType(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.ztype; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.ztype; + } + } + + return 0; +} + +float ZoneStore::GetZoneExperienceMultiplier(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.zone_exp_multiplier; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.zone_exp_multiplier; + } + } + + return 1.0f; +} + +float ZoneStore::GetZoneWalkSpeed(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.walkspeed; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.walkspeed; + } + } + + return DEFAULT_ZONE_RUNSPEED; +} + +uint8 ZoneStore::GetZoneTimeType(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.time_type; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.time_type; + } + } + + return 0; +} + +float ZoneStore::GetZoneFogDensity(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.fog_density; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.fog_density; + } + } + + return 0.0f; +} + +const std::string& ZoneStore::GetZoneFlagNeeded(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.flag_needed; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.flag_needed; + } + } + + const auto& flag_needed = std::string(); + return flag_needed; +} + +int8 ZoneStore::GetZoneCanBind(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.canbind; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.canbind; + } + } + + return 0; +} + +int8 ZoneStore::GetZoneCanCombat(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.cancombat; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.cancombat; + } + } + + return 0; +} + +int8 ZoneStore::GetZoneCanLevitate(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.canlevitate; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.canlevitate; + } + } + + return 0; +} + +int8 ZoneStore::GetZoneCastOutdoor(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.castoutdoor; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.castoutdoor; + } + } + + return 0; +} + +uint8 ZoneStore::GetZoneHotzone(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.hotzone; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.hotzone; + } + } + + return 0; +} + +uint8 ZoneStore::GetZoneInstanceType(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.insttype; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.insttype; + } + } + + return 0; +} + +uint64 ZoneStore::GetZoneShutdownDelay(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.shutdowndelay; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.shutdowndelay; + } + } + + return DEFAULT_ZONE_SHUTDOWN_DELAY; +} + +int8 ZoneStore::GetZonePEQZone(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.peqzone; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.peqzone; + } + } + + return 0; +} + +int8 ZoneStore::GetZoneExpansion(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.expansion; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.expansion; + } + } + + return 0; +} + +int8 ZoneStore::GetZoneBypassExpansionCheck(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.bypass_expansion_check; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.bypass_expansion_check; + } + } + + return 0; +} + +uint8 ZoneStore::GetZoneSuspendBuffs(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.suspendbuffs; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.suspendbuffs; + } + } + + return 0; +} + +int ZoneStore::GetZoneRainChance(uint32 zone_id, uint8 slot, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + switch (slot) { + case RAIN_SLOT_TWO: + return z.rain_chance2; + case RAIN_SLOT_THREE: + return z.rain_chance3; + case RAIN_SLOT_FOUR: + return z.rain_chance4; + case RAIN_SLOT_ONE: + default: + return z.rain_chance1; + } + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + switch (slot) { + case RAIN_SLOT_TWO: + return z.rain_chance2; + case RAIN_SLOT_THREE: + return z.rain_chance3; + case RAIN_SLOT_FOUR: + return z.rain_chance4; + case RAIN_SLOT_ONE: + default: + return z.rain_chance1; + } + } + } + + return 0; +} + +int ZoneStore::GetZoneRainDuration(uint32 zone_id, uint8 slot, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + switch (slot) { + case RAIN_SLOT_TWO: + return z.rain_duration2; + case RAIN_SLOT_THREE: + return z.rain_duration3; + case RAIN_SLOT_FOUR: + return z.rain_duration4; + case RAIN_SLOT_ONE: + default: + return z.rain_duration1; + } + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + switch (slot) { + case RAIN_SLOT_TWO: + return z.rain_duration2; + case RAIN_SLOT_THREE: + return z.rain_duration3; + case RAIN_SLOT_FOUR: + return z.rain_duration4; + case RAIN_SLOT_ONE: + default: + return z.rain_duration1; + } + } + } + + return 0; +} + +int ZoneStore::GetZoneSnowChance(uint32 zone_id, uint8 slot, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + switch (slot) { + case SNOW_SLOT_TWO: + return z.snow_chance2; + case SNOW_SLOT_THREE: + return z.snow_chance3; + case SNOW_SLOT_FOUR: + return z.snow_chance4; + case SNOW_SLOT_ONE: + default: + return z.snow_chance1; + } + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + switch (slot) { + case SNOW_SLOT_TWO: + return z.snow_chance2; + case SNOW_SLOT_THREE: + return z.snow_chance3; + case SNOW_SLOT_FOUR: + return z.snow_chance4; + case SNOW_SLOT_ONE: + default: + return z.snow_chance1; + } + } + } + + return 0; +} + +int ZoneStore::GetZoneSnowDuration(uint32 zone_id, uint8 slot, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + switch (slot) { + case SNOW_SLOT_TWO: + return z.snow_duration2; + case SNOW_SLOT_THREE: + return z.snow_duration3; + case SNOW_SLOT_FOUR: + return z.snow_duration4; + case SNOW_SLOT_ONE: + default: + return z.snow_duration1; + } + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + switch (slot) { + case SNOW_SLOT_TWO: + return z.snow_duration2; + case SNOW_SLOT_THREE: + return z.snow_duration3; + case SNOW_SLOT_FOUR: + return z.snow_duration4; + case SNOW_SLOT_ONE: + default: + return z.snow_duration1; + } + } + } + + return 0; +} + +float ZoneStore::GetZoneGravity(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.gravity; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.gravity; + } + } + + return DEFAULT_ZONE_GRAVITY; +} + +int ZoneStore::GetZoneType(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.type; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.type; + } + } + + return DEFAULT_ZONE_TYPE; +} + +int8 ZoneStore::GetZoneSkyLock(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.skylock; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.skylock; + } + } + + return 0; +} + +int ZoneStore::GetZoneFastRegenHP(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.fast_regen_hp; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.fast_regen_hp; + } + } + + return DEFAULT_ZONE_FAST_REGEN; +} + +int ZoneStore::GetZoneFastRegenMana(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.fast_regen_mana; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.fast_regen_mana; + } + } + + return DEFAULT_ZONE_FAST_REGEN; +} + +int ZoneStore::GetZoneFastRegenEndurance(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.fast_regen_endurance; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.fast_regen_endurance; + } + } + + return DEFAULT_ZONE_FAST_REGEN; +} + +int ZoneStore::GetZoneNPCMaximumAggroDistance(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.npc_max_aggro_dist; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.npc_max_aggro_dist; + } + } + + return DEFAULT_ZONE_MAX_AGGRO_DISTANCE; +} + +uint32 ZoneStore::GetZoneMaximumMovementUpdateRange(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.max_movement_update_range; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.max_movement_update_range; + } + } + + return DEFAULT_ZONE_MAX_MOVEMENT_UPDATE_RANGE; +} + +int8 ZoneStore::GetZoneMinimumExpansion(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.min_expansion; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.min_expansion; + } + } + + return DEFAULT_ZONE_MIN_MAX_EXPANSION; +} + +int8 ZoneStore::GetZoneMaximumExpansion(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.max_expansion; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.max_expansion; + } + } + + return DEFAULT_ZONE_MIN_MAX_EXPANSION; +} + +const std::string& ZoneStore::GetZoneContentFlags(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.content_flags; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.content_flags; + } + } + + const auto& content_flags = std::string(); + return content_flags; +} + +const std::string& ZoneStore::GetZoneContentFlagsDisabled(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.content_flags_disabled; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.content_flags_disabled; + } + } + + const auto& content_flags_disabled = std::string(); + return content_flags_disabled; +} + +int ZoneStore::GetZoneUnderworldTeleportIndex(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.underworld_teleport_index; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.underworld_teleport_index; + } + } + + return 0; +} + +int ZoneStore::GetZoneLavaDamage(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.lava_damage; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.lava_damage; + } + } + + return 0; +} + +int ZoneStore::GetZoneMinimumLavaDamage(uint32 zone_id, int version) +{ + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z.min_lava_damage; + } + } + + for (auto &z: m_zones) { + if (z.zoneidnumber == zone_id && z.version == 0) { + return z.min_lava_damage; + } + } + + return 0; +} diff --git a/common/zone_store.h b/common/zone_store.h index e769d30d6..d1b72a802 100644 --- a/common/zone_store.h +++ b/common/zone_store.h @@ -24,6 +24,8 @@ #include "../common/repositories/zone_repository.h" #include "../common/repositories/base/base_content_flags_repository.h" +#include + class ZoneStore { public: ZoneStore(); @@ -35,7 +37,7 @@ public: ZoneRepository::Zone *GetZone(uint32 zone_id, int version = 0); ZoneRepository::Zone *GetZone(const char *in_zone_name); - ZoneRepository::Zone *GetZone(std::string in_zone_name); + ZoneRepository::Zone *GetZone(const std::string& in_zone_name); uint32 GetZoneID(const char *in_zone_name); uint32 GetZoneID(std::string zone_name); std::string GetZoneName(uint32 zone_id); @@ -43,6 +45,62 @@ public: const char *GetZoneName(uint32 zone_id, bool error_unknown = false); const char *GetZoneLongName(uint32 zone_id, bool error_unknown = false); ZoneRepository::Zone *GetZoneWithFallback(uint32 zone_id, int version = 0); + + glm::vec4 GetZoneSafeCoordinates(uint32 zone_id, int version = 0); + float GetZoneGraveyardID(uint32 zone_id, int version = 0); + uint8 GetZoneMinimumLevel(uint32 zone_id, int version = 0); + uint8 GetZoneMaximumLevel(uint32 zone_id, int version = 0); + uint8 GetZoneMinimumStatus(uint32 zone_id, int version = 0); + int GetZoneTimeZone(uint32 zone_id, int version = 0); + int GetZoneMaximumPlayers(uint32 zone_id, int version = 0); + uint32 GetZoneRuleSet(uint32 zone_id, int version = 0); + const std::string& GetZoneNote(uint32 zone_id, int version = 0); + float GetZoneUnderworld(uint32 zone_id, int version = 0); + float GetZoneMinimumClip(uint32 zone_id, int version = 0); + float GetZoneMaximumClip(uint32 zone_id, int version = 0); + float GetZoneFogMinimumClip(uint32 zone_id, uint8 slot = 0, int version = 0); + float GetZoneFogMaximumClip(uint32 zone_id, uint8 slot = 0, int version = 0); + uint8 GetZoneFogRed(uint32 zone_id, uint8 slot = 0, int version = 0); + uint8 GetZoneFogGreen(uint32 zone_id, uint8 slot = 0, int version = 0); + uint8 GetZoneFogBlue(uint32 zone_id, uint8 slot = 0, int version = 0); + uint8 GetZoneSky(uint32 zone_id, int version = 0); + uint8 GetZoneZType(uint32 zone_id, int version = 0); + float GetZoneExperienceMultiplier(uint32 zone_id, int version = 0); + float GetZoneWalkSpeed(uint32 zone_id, int version = 0); + uint8 GetZoneTimeType(uint32 zone_id, int version = 0); + float GetZoneFogDensity(uint32 zone_id, int version = 0); + const std::string& GetZoneFlagNeeded(uint32 zone_id, int version = 0); + int8 GetZoneCanBind(uint32 zone_id, int version = 0); + int8 GetZoneCanCombat(uint32 zone_id, int version = 0); + int8 GetZoneCanLevitate(uint32 zone_id, int version = 0); + int8 GetZoneCastOutdoor(uint32 zone_id, int version = 0); + uint8 GetZoneHotzone(uint32 zone_id, int version = 0); + uint8 GetZoneInstanceType(uint32 zone_id, int version = 0); + uint64 GetZoneShutdownDelay(uint32 zone_id, int version = 0); + int8 GetZonePEQZone(uint32 zone_id, int version = 0); + int8 GetZoneExpansion(uint32 zone_id, int version = 0); + int8 GetZoneBypassExpansionCheck(uint32 zone_id, int version = 0); + uint8 GetZoneSuspendBuffs(uint32 zone_id, int version = 0); + int GetZoneRainChance(uint32 zone_id, uint8 slot = 0, int version = 0); + int GetZoneRainDuration(uint32 zone_id, uint8 slot = 0, int version = 0); + int GetZoneSnowChance(uint32 zone_id, uint8 slot = 0, int version = 0); + int GetZoneSnowDuration(uint32 zone_id, uint8 slot = 0, int version = 0); + float GetZoneGravity(uint32 zone_id, int version = 0); + int GetZoneType(uint32 zone_id, int version = 0); + int8 GetZoneSkyLock(uint32 zone_id, int version = 0); + int GetZoneFastRegenHP(uint32 zone_id, int version = 0); + int GetZoneFastRegenMana(uint32 zone_id, int version = 0); + int GetZoneFastRegenEndurance(uint32 zone_id, int version = 0); + int GetZoneNPCMaximumAggroDistance(uint32 zone_id, int version = 0); + uint32 GetZoneMaximumMovementUpdateRange(uint32 zone_id, int version = 0); + int8 GetZoneMinimumExpansion(uint32 zone_id, int version = 0); + int8 GetZoneMaximumExpansion(uint32 zone_id, int version = 0); + const std::string& GetZoneContentFlags(uint32 zone_id, int version = 0); + const std::string& GetZoneContentFlagsDisabled(uint32 zone_id, int version = 0); + int GetZoneUnderworldTeleportIndex(uint32 zone_id, int version = 0); + int GetZoneLavaDamage(uint32 zone_id, int version = 0); + int GetZoneMinimumLavaDamage(uint32 zone_id, int version = 0); + private: std::vector m_zones; }; @@ -53,7 +111,7 @@ extern ZoneStore zone_store; * Global helpers */ inline uint32 ZoneID(const char *in_zone_name) { return zone_store.GetZoneID(in_zone_name); } -inline uint32 ZoneID(std::string zone_name) { return zone_store.GetZoneID(zone_name); } +inline uint32 ZoneID(const std::string& zone_name) { return zone_store.GetZoneID(zone_name); } inline const char *ZoneName(uint32 zone_id, bool error_unknown = false) { return zone_store.GetZoneName( diff --git a/loginserver/client.cpp b/loginserver/client.cpp index 06b1b6e3d..c62888cdd 100644 --- a/loginserver/client.cpp +++ b/loginserver/client.cpp @@ -489,7 +489,7 @@ bool Client::VerifyLoginHash( * @param db_loginserver */ void Client::DoSuccessfulLogin( - const std::string in_account_name, + const std::string& in_account_name, int db_account_id, const std::string &db_loginserver ) diff --git a/loginserver/client.h b/loginserver/client.h index 708e1582d..4c5ca2cb7 100644 --- a/loginserver/client.h +++ b/loginserver/client.h @@ -175,7 +175,7 @@ public: const std::string &password_hash ); - void DoSuccessfulLogin(const std::string in_account_name, int db_account_id, const std::string &db_loginserver); + void DoSuccessfulLogin(const std::string& in_account_name, int db_account_id, const std::string &db_loginserver); void CreateLocalAccount(const std::string &username, const std::string &password); void CreateEQEmuAccount(const std::string &in_account_name, const std::string &in_account_password, unsigned int loginserver_account_id); diff --git a/loginserver/loginserver_webserver.cpp b/loginserver/loginserver_webserver.cpp index e7f3f5a3b..f7c353181 100644 --- a/loginserver/loginserver_webserver.cpp +++ b/loginserver/loginserver_webserver.cpp @@ -490,7 +490,7 @@ namespace LoginserverWebserver { token_data.can_write ); - server.token_manager->loaded_api_tokens.insert( + server.token_manager->loaded_api_tokens.emplace( std::make_pair( token_data.token, token_data diff --git a/loginserver/options.h b/loginserver/options.h index 0171a6e7d..5d4546f81 100644 --- a/loginserver/options.h +++ b/loginserver/options.h @@ -71,10 +71,10 @@ public: inline void AutoLinkAccounts(bool b) { auto_link_accounts = b; } inline bool CanAutoLinkAccounts() const { return auto_link_accounts; } - inline void EQEmuLoginServerAddress(std::string v) { eqemu_loginserver_address = v; } + inline void EQEmuLoginServerAddress(const std::string& v) { eqemu_loginserver_address = v; } inline std::string GetEQEmuLoginServerAddress() const { return eqemu_loginserver_address; } - inline void DefaultLoginServerName(std::string v) { default_loginserver_name = v; } + inline void DefaultLoginServerName(const std::string& v) { default_loginserver_name = v; } inline std::string GetDefaultLoginServerName() const { return default_loginserver_name; } inline void UpdateInsecurePasswords(bool b) { update_insecure_passwords = b; } diff --git a/package.json b/package.json index 238e6489f..9dd484fae 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eqemu-server", - "version": "22.8.0", + "version": "22.15.3", "repository": { "type": "git", "url": "https://github.com/EQEmu/Server.git" diff --git a/tests/cppunit/config.h b/tests/cppunit/config.h new file mode 100644 index 000000000..9407512e0 --- /dev/null +++ b/tests/cppunit/config.h @@ -0,0 +1,6 @@ +#ifndef EQEMU_CONFIG_H +#define EQEMU_CONFIG_H + +// no-op + +#endif //EQEMU_CONFIG_H diff --git a/tests/string_util_test.h b/tests/string_util_test.h index 3a8b59c35..af88a5a03 100644 --- a/tests/string_util_test.h +++ b/tests/string_util_test.h @@ -93,6 +93,10 @@ public: TEST_ASSERT(Strings::SearchDelim(h, "air") == std::string::npos); TEST_ASSERT(Strings::SearchDelim(h, "bef") == std::string::npos); TEST_ASSERT(Strings::SearchDelim(h, "wwi") == std::string::npos); + TEST_ASSERT(Strings::SearchDelim(h, "bothunder,") == std::string::npos); + TEST_ASSERT(Strings::SearchDelim(h, "poair,") == std::string::npos); + TEST_ASSERT(Strings::SearchDelim(h, "befallen,") == std::string::npos); + TEST_ASSERT(Strings::SearchDelim(h, "wwi,") == std::string::npos); } void SplitStringTest() { @@ -126,6 +130,11 @@ public: TEST_ASSERT_EQUALS(Strings::IsFloat(".234234"), true); TEST_ASSERT_EQUALS(Strings::IsFloat(".234234f"), false); TEST_ASSERT_EQUALS(Strings::IsFloat("Johnson"), false); + TEST_ASSERT_EQUALS(Strings::IsFloat("12312312313f"), false); // character at end + TEST_ASSERT_EQUALS(Strings::IsFloat("18446744073709551616"), true); + TEST_ASSERT_EQUALS(Strings::IsFloat("-18"), true); + TEST_ASSERT_EQUALS(Strings::IsFloat("-f18"), false); + TEST_ASSERT_EQUALS(Strings::IsFloat("-18446744073709551616"), true); } void TestIsNumber() { @@ -137,6 +146,9 @@ public: TEST_ASSERT_EQUALS(Strings::IsNumber("-18"), true); TEST_ASSERT_EQUALS(Strings::IsNumber("-f18"), false); TEST_ASSERT_EQUALS(Strings::IsNumber("-18446744073709551616"), true); // 64 + TEST_ASSERT_EQUALS(Strings::IsNumber("18446744073709551616f"), false); // 64 + TEST_ASSERT_EQUALS(Strings::IsNumber("18446744073709551616.0"), false); // 64 + TEST_ASSERT_EQUALS(Strings::IsNumber("18446744073709551616.0f"), false); // 64 } }; diff --git a/ucs/chatchannel.cpp b/ucs/chatchannel.cpp index 312b2a311..a8a7cc797 100644 --- a/ucs/chatchannel.cpp +++ b/ucs/chatchannel.cpp @@ -32,7 +32,7 @@ void ServerToClient45SayLink(std::string& clientSayLink, const std::string& serv void ServerToClient50SayLink(std::string& clientSayLink, const std::string& serverSayLink); void ServerToClient55SayLink(std::string& clientSayLink, const std::string& serverSayLink); -ChatChannel::ChatChannel(std::string inName, std::string inOwner, std::string inPassword, bool inPermanent, int inMinimumStatus) : +ChatChannel::ChatChannel(const std::string& inName, const std::string& inOwner, const std::string& inPassword, bool inPermanent, int inMinimumStatus) : m_delete_timer(0) { m_name = inName; @@ -137,7 +137,7 @@ ChatChannel *ChatChannelList::CreateChannel( return new_channel; } -ChatChannel* ChatChannelList::FindChannel(std::string Name) { +ChatChannel* ChatChannelList::FindChannel(const std::string& Name) { std::string normalized_name = CapitaliseName(Name); @@ -283,7 +283,7 @@ void ChatChannel::SetPassword(const std::string& in_password) { } } -void ChatChannel::SetOwner(std::string& in_owner) { +void ChatChannel::SetOwner(const std::string& in_owner) { m_owner = in_owner; @@ -659,7 +659,7 @@ ChatChannel *ChatChannelList::RemoveClientFromChannel(const std::string& in_chan std::string channel_name = in_channel_name; if (in_channel_name.length() > 0 && isdigit(channel_name[0])) { - channel_name = c->ChannelSlotName(Strings::ToInt(in_channel_name.c_str())); + channel_name = c->ChannelSlotName(Strings::ToInt(in_channel_name)); } auto *required_channel = FindChannel(channel_name); @@ -701,11 +701,11 @@ void ChatChannelList::Process() { LogDebug("Empty temporary password protected channel [{}] being destroyed", CurrentChannel->GetName().c_str()); - RemoveChannel(CurrentChannel); + iterator.RemoveCurrent(); + } + else { + iterator.Advance(); } - - iterator.Advance(); - } } @@ -784,7 +784,7 @@ bool ChatChannel::HasVoice(std::string inVoiced) return std::find(std::begin(m_voiced), std::end(m_voiced), inVoiced) != std::end(m_voiced); } -std::string CapitaliseName(std::string inString) { +std::string CapitaliseName(const std::string& inString) { std::string NormalisedName = inString; diff --git a/ucs/chatchannel.h b/ucs/chatchannel.h index a5a7836fc..f9bba0c95 100644 --- a/ucs/chatchannel.h +++ b/ucs/chatchannel.h @@ -15,7 +15,7 @@ class ChatChannel { public: - ChatChannel(std::string inName, std::string inOwner, std::string inPassword, bool inPermanent, int inMinimumStatus = 0); + ChatChannel(const std::string& inName, const std::string& inOwner, const std::string& inPassword, bool inPermanent, int inMinimumStatus = 0); ~ChatChannel(); void AddClient(Client *c); @@ -29,7 +29,7 @@ public: void SetPassword(const std::string& in_password); bool IsOwner(const std::string& name) { return (m_owner == name); } const std::string& GetPassword() { return m_password; } - void SetOwner(std::string& inOwner); + void SetOwner(const std::string& in_owner); std::string& GetOwnerName(); void SetTemporary(); void SetPermanent(); @@ -76,7 +76,7 @@ class ChatChannelList { public: ChatChannel* CreateChannel(const std::string& name, const std::string& owner, const std::string& password, bool permanent, int minimum_status, bool save_to_database = false); - ChatChannel* FindChannel(std::string name); + ChatChannel* FindChannel(const std::string& name); ChatChannel* AddClientToChannel(std::string channel_name, Client* c, bool command_directed = false); ChatChannel* RemoveClientFromChannel(const std::string& in_channel_name, Client* c, bool command_directed = false); void RemoveChannel(ChatChannel *Channel); @@ -91,8 +91,8 @@ public: static void AddToFilteredNames(const std::string& name); static bool IsOnChannelBlockList(const std::string& channel_name); static bool IsOnFilteredNameList(const std::string& channel_name); - static inline void SetChannelBlockList(std::vector new_list) { m_blocked_channel_names = new_list; } - static inline void SetFilteredNameList(std::vector new_list) { m_filtered_names = new_list; } + static inline void SetChannelBlockList(const std::vector& new_list) { m_blocked_channel_names = new_list; } + static inline void SetFilteredNameList(const std::vector& new_list) { m_filtered_names = new_list; } private: LinkedList ChatChannels; @@ -101,6 +101,6 @@ private: }; -std::string CapitaliseName(std::string inString); +std::string CapitaliseName(const std::string& inString); #endif diff --git a/ucs/clientlist.cpp b/ucs/clientlist.cpp index fd2546941..cbb6e0910 100644 --- a/ucs/clientlist.cpp +++ b/ucs/clientlist.cpp @@ -122,11 +122,11 @@ std::vector ParseRecipients(std::string RecipientString) { if (Comma == std::string::npos) { - RecipientList.push_back(RecipientString.substr(CurrentPos)); + RecipientList.emplace_back(RecipientString.substr(CurrentPos)); break; } - RecipientList.push_back(RecipientString.substr(CurrentPos, Comma - CurrentPos)); + RecipientList.emplace_back(RecipientString.substr(CurrentPos, Comma - CurrentPos)); CurrentPos = Comma + 2; } @@ -348,7 +348,7 @@ static void ProcessMailTo(Client *c, std::string MailMessage) { } } -static void ProcessMailTo(Client *c, std::string from, std::string subject, std::string message) { +static void ProcessMailTo(Client *c, const std::string& from, const std::string& subject, const std::string& message) { } static void ProcessSetMessageStatus(std::string SetMessageCommand) { @@ -379,14 +379,14 @@ static void ProcessSetMessageStatus(std::string SetMessageCommand) { if (NumEnd == std::string::npos) { - MessageNumber = Strings::ToInt(SetMessageCommand.substr(NumStart).c_str()); + MessageNumber = Strings::ToInt(SetMessageCommand.substr(NumStart)); database.SetMessageStatus(MessageNumber, Status); break; } - MessageNumber = Strings::ToInt(SetMessageCommand.substr(NumStart, NumEnd - NumStart).c_str()); + MessageNumber = Strings::ToInt(SetMessageCommand.substr(NumStart, NumEnd - NumStart)); database.SetMessageStatus(MessageNumber, Status); @@ -878,7 +878,7 @@ void Clientlist::ProcessOPMailCommand(Client *c, std::string command_string, boo break; case CommandGetBody: - database.SendBody(c, Strings::ToInt(parameters.c_str())); + database.SendBody(c, Strings::ToInt(parameters)); break; case CommandMailTo: @@ -893,7 +893,7 @@ void Clientlist::ProcessOPMailCommand(Client *c, std::string command_string, boo case CommandSelectMailBox: { std::string::size_type NumStart = parameters.find_first_of("0123456789"); - c->ChangeMailBox(Strings::ToInt(parameters.substr(NumStart).c_str())); + c->ChangeMailBox(Strings::ToInt(parameters.substr(NumStart))); break; } case CommandSetMailForwarding: @@ -983,7 +983,7 @@ void Client::SendMailBoxes() { safe_delete(outapp); } -Client *Clientlist::FindCharacter(std::string CharacterName) { +Client *Clientlist::FindCharacter(const std::string& CharacterName) { std::list::iterator Iterator; @@ -1243,7 +1243,7 @@ void Client::LeaveAllChannels(bool send_updated_channel_list, bool command_direc } -void Client::ProcessChannelList(std::string Input) { +void Client::ProcessChannelList(const std::string& Input) { if (Input.length() == 0) { @@ -1255,7 +1255,7 @@ void Client::ProcessChannelList(std::string Input) { std::string ChannelName = Input; if (isdigit(ChannelName[0])) - ChannelName = ChannelSlotName(Strings::ToInt(ChannelName.c_str())); + ChannelName = ChannelSlotName(Strings::ToInt(ChannelName)); ChatChannel *RequiredChannel = ChannelList->FindChannel(ChannelName); @@ -1416,7 +1416,7 @@ void Client::SendChannelMessageByNumber(std::string Message) { if (MessageStart == std::string::npos) return; - int ChannelNumber = Strings::ToInt(Message.substr(0, MessageStart).c_str()); + int ChannelNumber = Strings::ToInt(Message.substr(0, MessageStart)); if ((ChannelNumber < 1) || (ChannelNumber > MAX_JOINED_CHANNELS)) { @@ -1521,7 +1521,7 @@ void Client::SendChannelMessageByNumber(std::string Message) { } -void Client::SendChannelMessage(std::string ChannelName, std::string Message, Client *Sender) { +void Client::SendChannelMessage(const std::string& ChannelName, const std::string& Message, Client *Sender) { if (!Sender) return; @@ -1548,7 +1548,7 @@ void Client::SendChannelMessage(std::string ChannelName, std::string Message, Cl safe_delete(outapp); } -void Client::ToggleAnnounce(std::string State) +void Client::ToggleAnnounce(const std::string& State) { if (State == "") Announce = !Announce; @@ -1615,7 +1615,7 @@ void Client::GeneralChannelMessage(const char *Characters) { } -void Client::GeneralChannelMessage(std::string Message) { +void Client::GeneralChannelMessage(const std::string& Message) { auto outapp = new EQApplicationPacket(OP_ChannelMessage, Message.length() + 3); char *PacketBuffer = (char *)outapp->pBuffer; @@ -1659,7 +1659,7 @@ void Client::SetChannelPassword(std::string ChannelPassword) { std::string ChannelName = ChannelPassword.substr(ChannelStart); if ((ChannelName.length() > 0) && isdigit(ChannelName[0])) - ChannelName = ChannelSlotName(Strings::ToInt(ChannelName.c_str())); + ChannelName = ChannelSlotName(Strings::ToInt(ChannelName)); std::string Message; @@ -1724,7 +1724,7 @@ void Client::SetChannelOwner(std::string CommandString) { std::string ChannelName = CapitaliseName(CommandString.substr(ChannelStart)); if ((ChannelName.length() > 0) && isdigit(ChannelName[0])) - ChannelName = ChannelSlotName(Strings::ToInt(ChannelName.c_str())); + ChannelName = ChannelSlotName(Strings::ToInt(ChannelName)); LogInfo("Set owner of channel [[{}]] to [[{}]]", ChannelName.c_str(), NewOwner.c_str()); @@ -1770,7 +1770,7 @@ void Client::OPList(std::string CommandString) { std::string ChannelName = CapitaliseName(CommandString.substr(ChannelStart)); if ((ChannelName.length() > 0) && isdigit(ChannelName[0])) - ChannelName = ChannelSlotName(Strings::ToInt(ChannelName.c_str())); + ChannelName = ChannelSlotName(Strings::ToInt(ChannelName)); ChatChannel *RequiredChannel = ChannelList->FindChannel(ChannelName); @@ -1813,7 +1813,7 @@ void Client::ChannelInvite(std::string CommandString) { std::string ChannelName = CapitaliseName(CommandString.substr(ChannelStart)); if ((ChannelName.length() > 0) && isdigit(ChannelName[0])) - ChannelName = ChannelSlotName(Strings::ToInt(ChannelName.c_str())); + ChannelName = ChannelSlotName(Strings::ToInt(ChannelName)); LogInfo("[[{}]] invites [[{}]] to channel [[{}]]", GetName().c_str(), Invitee.c_str(), ChannelName.c_str()); @@ -1883,7 +1883,7 @@ void Client::ChannelModerate(std::string CommandString) { std::string ChannelName = CapitaliseName(CommandString.substr(ChannelStart)); if ((ChannelName.length() > 0) && isdigit(ChannelName[0])) - ChannelName = ChannelSlotName(Strings::ToInt(ChannelName.c_str())); + ChannelName = ChannelSlotName(Strings::ToInt(ChannelName)); ChatChannel *RequiredChannel = ChannelList->FindChannel(ChannelName); @@ -1941,7 +1941,7 @@ void Client::ChannelGrantModerator(std::string CommandString) { std::string ChannelName = CapitaliseName(CommandString.substr(ChannelStart)); if ((ChannelName.length() > 0) && isdigit(ChannelName[0])) - ChannelName = ChannelSlotName(Strings::ToInt(ChannelName.c_str())); + ChannelName = ChannelSlotName(Strings::ToInt(ChannelName)); LogInfo("[[{}]] gives [[{}]] moderator rights to channel [[{}]]", GetName().c_str(), Moderator.c_str(), ChannelName.c_str()); @@ -2022,7 +2022,7 @@ void Client::ChannelGrantVoice(std::string CommandString) { std::string ChannelName = CapitaliseName(CommandString.substr(ChannelStart)); if ((ChannelName.length() > 0) && isdigit(ChannelName[0])) - ChannelName = ChannelSlotName(Strings::ToInt(ChannelName.c_str())); + ChannelName = ChannelSlotName(Strings::ToInt(ChannelName)); LogInfo("[[{}]] gives [[{}]] voice to channel [[{}]]", GetName().c_str(), Voicee.c_str(), ChannelName.c_str()); @@ -2110,7 +2110,7 @@ void Client::ChannelKick(std::string CommandString) { std::string ChannelName = CapitaliseName(CommandString.substr(ChannelStart)); if ((ChannelName.length() > 0) && isdigit(ChannelName[0])) - ChannelName = ChannelSlotName(Strings::ToInt(ChannelName.c_str())); + ChannelName = ChannelSlotName(Strings::ToInt(ChannelName)); LogInfo("[[{}]] kicks [[{}]] from channel [[{}]]", GetName().c_str(), Kickee.c_str(), ChannelName.c_str()); @@ -2279,7 +2279,7 @@ void Client::SetConnectionType(char c) { } } -Client *Clientlist::IsCharacterOnline(std::string CharacterName) { +Client *Clientlist::IsCharacterOnline(const std::string& CharacterName) { // This method is used to determine if the character we are a sending an email to is connected to the mailserver, // so we can send them a new email notification. @@ -2307,7 +2307,7 @@ Client *Clientlist::IsCharacterOnline(std::string CharacterName) { return nullptr; } -int Client::GetMailBoxNumber(std::string CharacterName) { +int Client::GetMailBoxNumber(const std::string& CharacterName) { for (unsigned int i = 0; i < Characters.size(); i++) if (Characters[i].Name == CharacterName) @@ -2316,7 +2316,7 @@ int Client::GetMailBoxNumber(std::string CharacterName) { return -1; } -void Client::SendNotification(int MailBoxNumber, std::string Subject, std::string From, int MessageID) { +void Client::SendNotification(int MailBoxNumber, const std::string& Subject, const std::string& From, int MessageID) { char TimeStamp[100]; diff --git a/ucs/clientlist.h b/ucs/clientlist.h index ac511176c..feb136e2b 100644 --- a/ucs/clientlist.h +++ b/ucs/clientlist.h @@ -98,18 +98,18 @@ public: void AddToChannelList(ChatChannel *JoinedChannel); void RemoveFromChannelList(ChatChannel *JoinedChannel); void SendChannelMessage(std::string Message); - void SendChannelMessage(std::string ChannelName, std::string Message, Client *Sender); + void SendChannelMessage(const std::string& ChannelName, const std::string& Message, Client *Sender); void SendChannelMessageByNumber(std::string Message); void SendChannelList(); void CloseConnection(); - void ToggleAnnounce(std::string State); + void ToggleAnnounce(const std::string& State); bool IsAnnounceOn() { return (Announce == true); } void AnnounceJoin(ChatChannel *Channel, Client *c); void AnnounceLeave(ChatChannel *Channel, Client *c); - void GeneralChannelMessage(std::string Message); + void GeneralChannelMessage(const std::string& Message); void GeneralChannelMessage(const char *Characters); void SetChannelPassword(std::string ChannelPassword); - void ProcessChannelList(std::string CommandString); + void ProcessChannelList(const std::string& Input); void AccountUpdate(); int ChannelCount(); std::string RemoveDuplicateChannels(std::string& in_channels); @@ -139,14 +139,14 @@ public: inline bool GetForceDisconnect() { return ForceDisconnect; } std::string MailBoxName(); int GetMailBoxNumber() { return CurrentMailBox; } - int GetMailBoxNumber(std::string CharacterName); + int GetMailBoxNumber(const std::string& CharacterName); void SetConnectionType(char c); ConnectionType GetConnectionType() { return TypeOfConnection; } EQ::versions::ClientVersion GetClientVersion() { return ClientVersion_; } inline bool IsMailConnection() { return (TypeOfConnection == ConnectionTypeMail) || (TypeOfConnection == ConnectionTypeCombined); } - void SendNotification(int MailBoxNumber, std::string From, std::string Subject, int MessageID); + void SendNotification(int MailBoxNumber, const std::string& Subject, const std::string& From, int MessageID); void ChangeMailBox(int NewMailBox); inline void SetMailBox(int NewMailBox) { CurrentMailBox = NewMailBox; } void SendFriends(); @@ -184,10 +184,10 @@ public: Clientlist(int MailPort); void Process(); void CloseAllConnections(); - Client *FindCharacter(std::string CharacterName); + Client *FindCharacter(const std::string& CharacterName); void CheckForStaleConnectionsAll(); void CheckForStaleConnections(Client *c); - Client *IsCharacterOnline(std::string CharacterName); + Client *IsCharacterOnline(const std::string& CharacterName); void ProcessOPMailCommand(Client* c, std::string command_string, bool command_directed = false); private: diff --git a/ucs/database.cpp b/ucs/database.cpp index f214486fd..edbfe3f4b 100644 --- a/ucs/database.cpp +++ b/ucs/database.cpp @@ -142,7 +142,7 @@ int UCSDatabase::FindAccount(const char *characterName, Client *client) return accountID; } -bool UCSDatabase::VerifyMailKey(std::string characterName, int IPAddress, std::string MailKey) +bool UCSDatabase::VerifyMailKey(const std::string& characterName, int IPAddress, const std::string& MailKey) { std::string query = StringFormat( diff --git a/ucs/database.h b/ucs/database.h index 68955c35a..3a5860348 100644 --- a/ucs/database.h +++ b/ucs/database.h @@ -40,7 +40,7 @@ class UCSDatabase : public Database { public: int FindAccount(const char *CharacterName, Client *c); int FindCharacter(const char *CharacterName); - bool VerifyMailKey(std::string CharacterName, int IPAddress, std::string MailKey); + bool VerifyMailKey(const std::string& characterName, int IPAddress, const std::string& MailKey); bool GetVariable(const char* varname, char* varvalue, uint16 varvalue_len); bool LoadChatChannels(); void LoadReservedNamesFromDB(); diff --git a/ucs/ucs.cpp b/ucs/ucs.cpp index 8b365b96d..992d5b3d0 100644 --- a/ucs/ucs.cpp +++ b/ucs/ucs.cpp @@ -144,6 +144,8 @@ int main() { ->LoadLogDatabaseSettings() ->StartFileLogs(); + player_event_logs.SetDatabase(&database)->Init(); + char tmp[64]; // ucs has no 'reload rules' handler diff --git a/ucs/worldserver.cpp b/ucs/worldserver.cpp index 0e9ff3a02..91439dbf5 100644 --- a/ucs/worldserver.cpp +++ b/ucs/worldserver.cpp @@ -43,7 +43,7 @@ extern const ucsconfig *Config; extern UCSDatabase database; extern DiscordManager discord_manager; -void ProcessMailTo(Client *c, std::string from, std::string subject, std::string message); +void ProcessMailTo(Client *c, const std::string& from, const std::string& subject, const std::string& message); void Client45ToServerSayLink(std::string& serverSayLink, const std::string& clientSayLink); void Client50ToServerSayLink(std::string& serverSayLink, const std::string& clientSayLink); diff --git a/utils/scripts/build/linux-build.sh b/utils/scripts/build/linux-build.sh index 6897c599e..6d13cb465 100755 --- a/utils/scripts/build/linux-build.sh +++ b/utils/scripts/build/linux-build.sh @@ -9,11 +9,13 @@ git submodule init && git submodule update perl utils/scripts/build/tag-version.pl -mkdir -p build && cd build && cmake -DEQEMU_BUILD_TESTS=ON -DEQEMU_BUILD_LOGIN=ON -DEQEMU_BUILD_LUA=ON -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING="-Os" -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -G 'Unix Makefiles' .. && make -j$((`nproc`-4)) +mkdir -p build && cd build && cmake -DEQEMU_BUILD_TESTS=ON -DEQEMU_BUILD_STATIC=ON -DEQEMU_BUILD_LOGIN=ON -DEQEMU_BUILD_LUA=ON -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING="-Os" -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -G 'Unix Makefiles' .. && make -j$((`nproc`-4)) curl https://raw.githubusercontent.com/Akkadius/eqemu-install-v2/master/eqemu_config.json --output eqemu_config.json ./bin/tests +ldd ./bin/zone + # shellcheck disable=SC2164 cd /drone/src/ diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index 633e5030c..d14341341 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -25,7 +25,6 @@ my $eqemu_repository_request_url = "https://raw.githubusercontent.com/EQEmu/Se my $opcodes_path = ""; my $patches_path = ""; my $time_stamp = strftime('%m-%d-%Y', gmtime()); -my $db_run_stage = 0; #::: Sets database run stage check my $bin_dir = ""; ############################################# @@ -88,23 +87,16 @@ if (-d "bin") { $bin_dir = "bin/"; } -my $world_path = get_world_path(); - ############################################# # run routines ############################################# get_windows_wget(); -check_xml_to_json_conversion() if $ARGV[0] eq "convert_xml"; do_self_update_check_routine() if !$skip_self_update_check; get_perl_version(); if (-e "eqemu_config.json") { read_eqemu_config_json(); } -else { - #::: This will need to stay for servers who simply haven't updated yet - # This script can still update without the server bins being updated - read_eqemu_config_xml(); -} + get_mysql_path(); #::: Remove old eqemu_update.pl @@ -115,22 +107,11 @@ if (-e "eqemu_update.pl") { print "[Info] For EQEmu Server management utilities - run eqemu_server.pl\n" if $ARGV[0] eq "ran_from_world"; my $skip_checks = 0; -if ($ARGV[0] && ($ARGV[0] eq "new_server" || $ARGV[0] eq "new_server_with_bots")) { +if ($ARGV[0] && ($ARGV[0] eq "new_server")) { $skip_checks = 1; } -if ($skip_checks == 0) { - check_db_version_table(); - - #::: Check if db_version table exists... - if (trim(get_mysql_result("SHOW COLUMNS FROM db_version LIKE 'Revision'")) ne "" && $db) { - print get_mysql_result("DROP TABLE db_version"); - print "[Database] Old db_version table present, dropping...\n\n"; - } -} - -check_for_world_bootup_database_update(); - +show_menu_prompt(); sub urlencode { @@ -343,9 +324,6 @@ sub new_server print `chmod 755 *.sh`; } - analytics_insertion("new_server::install_complete", - $database_name . " :: Binary DB Version / Local DB Version :: " . $binary_database_version . " / " . $local_database_version); - print "[New Server] New server folder install complete\n"; print "[New Server] Below is your installation info:\n"; @@ -365,64 +343,6 @@ sub new_server } } -sub check_xml_to_json_conversion -{ - if (-e "eqemu_config.xml" && !-e "eqemu_config.json") { - - if ($OS eq "Windows") { - get_remote_file("https://raw.githubusercontent.com/EQEmu/Server/master/utils/xmltojson/xmltojson-windows-x86.exe", - "xmltojson.exe"); - print "Converting eqemu_config.xml to eqemu_config.json\n"; - print `xmltojson eqemu_config.xml`; - } - if ($OS eq "Linux") { - get_remote_file("https://raw.githubusercontent.com/EQEmu/Server/master/utils/xmltojson/xmltojson-linux-x86", - "xmltojson"); - print "Converting eqemu_config.xml to eqemu_config.json\n"; - print `chmod 755 xmltojson`; - print `./xmltojson eqemu_config.xml`; - } - - #::: Prettify and alpha order the config - use JSON; - my $json = new JSON(); - - my $content; - open(my $fh, '<', "eqemu_config.json") or die "cannot open file $filename"; { - local $/; - $content = <$fh>; - } - close($fh); - - $result = $json->decode($content); - $json->canonical(1); - - print $json->pretty->utf8->encode($result), "\n"; - - open(my $fh, '>', 'eqemu_config.json'); - print $fh $json->pretty->utf8->encode($result); - close $fh; - - mkdir('backups'); - copy_file("eqemu_config.xml", "backups/eqemu_config.xml"); - unlink('eqemu_config.xml'); - unlink('db_dumper.pl'); - - print "[Server Maintenance] eqemu_config.xml is now DEPRECATED \n"; - print "[Server Maintenance] eqemu_config.json is now the new Server config format \n"; - print " A backup of this old config is located in the backups folder of your server directory\n"; - print " --- \n"; - print " You may have some plugins and/or applications that still require reference of this config file\n"; - print " Please update these plugins/applications to use the new configuration format if needed\n"; - print " --- \n"; - print " Thanks for your understanding\n"; - print " The EQEmulator Team\n\n"; - - exit; - } - -} - sub build_linux_source { $build_options = $_[0]; @@ -542,27 +462,9 @@ sub do_installer_routines print `"$path" --host $host --user $root_user --password="$root_password" -N -B -e "FLUSH PRIVILEGES"`; } - #::: Get Binary DB version - if ($OS eq "Windows") { - @db_version = split(': ', `"$world_path" db_version`); - } - if ($OS eq "Linux") { - @db_version = split(': ', `./$world_path db_version`); - } - - $binary_database_version = trim($db_version[1]); - - #::: Local DB Version - check_db_version_table(); - $local_database_version = trim(get_mysql_result("SELECT version FROM db_version LIMIT 1")); - #::: Download PEQ latest fetch_peq_db_full(); print "[Database] Fetching and Applying Latest Database Updates...\n"; - main_db_management(); - bots_db_management(); - - remove_duplicate_rule_values(); if ($OS eq "Windows") { check_windows_firewall_rules(); @@ -580,96 +482,6 @@ sub check_for_input chomp $input; } -sub check_for_world_bootup_database_update -{ - $binary_database_version = 0; - $local_database_version = 0; - - # Usually hit during installer when world hasn't been installed yet... - if (-e $world_path) { - if ($OS eq "Windows") { - @db_version = split(': ', `"$world_path" db_version`); - } - if ($OS eq "Linux") { - @db_version = split(': ', `./$world_path db_version`); - } - - $binary_database_version = trim($db_version[1]); - $local_database_version = get_main_db_version(); - } - - if ($binary_database_version == $local_database_version && $ARGV[0] eq "ran_from_world") { - print "[Update] Database up to date...\n"; - if (trim($db_version[2]) == 0) { - print "[Update] Continuing bootup\n"; - exit; - } - } - else { - #::: We ran world - Database needs to update, lets backup and run updates and continue world bootup - if ($local_database_version < $binary_database_version && $ARGV[0] eq "ran_from_world") { - print "[Update] Database not up to date with binaries... Automatically updating...\n"; - print "[Update] Issuing database backup first...\n"; - database_dump_compress(); - $db_already_backed_up = 1; - print "[Update] Updating database...\n"; - sleep(1); - main_db_management(); - - analytics_insertion("auto database upgrade world", - $db . " :: Binary DB Version / Local DB Version :: " . $binary_database_version . " / " . $local_database_version); - } - - #::: Make sure that we didn't pass any arugments to the script - else { - if ($local_database_version > $binary_database_version) { - print "[Update] Database version is ahead of current binaries...\n"; - } - - if (!$db) { print "[eqemu_server.pl] No database connection found... Running without\n"; } - show_menu_prompt(); - } - } - - #::: Bots - $binary_database_version = trim($db_version[2]); - if ($binary_database_version > 0) { - $local_database_version = get_bots_db_version(); - - #::: We ran world - Database needs to update, lets backup and run updates and continue world bootup - if ($binary_database_version == $local_database_version && $ARGV[0] eq "ran_from_world") { - print "[Update] Bots database up to date...\n"; - } - else { - if ($local_database_version < $binary_database_version && $ARGV[0] eq "ran_from_world") { - print "[Update] Bots Database not up to date with binaries... Automatically updating...\n"; - if (!$db_already_backed_up) { - print "[Update] Issuing database backup first...\n"; - database_dump_compress(); - } - print "[Update] Updating bots database...\n"; - sleep(1); - bots_db_management(); - - analytics_insertion("auto database bots upgrade world", - $db . " :: Binary DB Version / Local DB Version :: " . $binary_database_version . " / " . $local_database_version); - } - - #::: Make sure that we didn't pass any arugments to the script - else { - if ($local_database_version > $binary_database_version) { - print "[Update] Bots database version is ahead of current binaries...\n"; - } - - if (!$db) { print "[eqemu_server.pl] No database connection found... Running without\n"; } - show_menu_prompt(); - } - } - } - - print "[Update] Continuing bootup\n"; -} - sub check_internet_connection { if ($OS eq "Linux") { @@ -963,10 +775,8 @@ sub fetch_utility_scripts sub setup_bots { - if ($OS eq "Linux") { - build_linux_source("bots"); - } - bots_db_management(); + my $command = get_world_command(); + print `$command bots:enable`; print "Bots should be setup, run your server and the bot command should be available in-game (type '^help')\n"; } @@ -995,22 +805,13 @@ sub show_menu_prompt print " [check_db_updates] Checks for database updates manually\n"; print " [check_bot_db_updates] Checks for bot database updates\n"; print " \n"; - print " [aa_tables] Downloads and installs clean slate AA data from PEQ\n"; - print " [remove_duplicate_rules] Removes duplicate rules from rule_values table\n"; + print " \n"; print " [drop_bots_db_schema] Removes bot database schema\n"; print " \n> main - go back to main menu\n"; print "Enter a command #> "; $last_menu = trim($input); } - elsif ($input eq "conversions") { - print "\n>>> Conversions Menu\n\n"; - print " [quest_heading_convert] Converts old heading format in quest scripts to new (live format)\n"; - print " [quest_faction_convert] Converts to new faction values imported from client\n"; - print " \n> main - go back to main menu\n"; - print "Enter a command #> "; - $last_menu = trim($input); - } elsif ($input eq "assets") { print "\n>>> Server Assets Menu\n\n"; print " [maps] Download latest maps\n"; @@ -1023,7 +824,6 @@ sub show_menu_prompt print ">>> Windows\n"; print " [windows_server_download] Updates server via latest 'stable' code\n"; print " [windows_server_latest] Updates server via latest commit 'unstable'\n"; - print " [fetch_dlls] Grabs dll's needed to run windows binaries\n"; print " [setup_loginserver] Sets up loginserver for Windows\n"; } print " \n> main - go back to main menu\n"; @@ -1046,14 +846,6 @@ sub show_menu_prompt do_bots_db_schema_drop(); $dc = 1; } - elsif ($input eq "aa_tables") { - aa_fetch(); - $dc = 1; - } - elsif ($input eq "remove_duplicate_rules") { - remove_duplicate_rule_values(); - $dc = 1; - } elsif ($input eq "maps") { map_files_fetch_bulk(); $dc = 1; @@ -1082,20 +874,16 @@ sub show_menu_prompt fetch_latest_windows_appveyor(); $dc = 1; } - elsif ($input eq "fetch_dlls") { - fetch_server_dlls(); - $dc = 1; - } elsif ($input eq "utility_scripts") { fetch_utility_scripts(); $dc = 1; } elsif ($input eq "check_db_updates") { - main_db_management(); + db_update_check(); $dc = 1; } elsif ($input eq "check_bot_db_updates") { - bots_db_management(); + db_update_check(); $dc = 1; } elsif ($input eq "setup_loginserver") { @@ -1114,14 +902,6 @@ sub show_menu_prompt do_linux_login_server_setup(); $dc = 1; } - elsif ($input eq "quest_heading_convert") { - quest_heading_convert(); - $dc = 1; - } - elsif ($input eq "quest_faction_convert") { - quest_faction_convert(); - $dc = 1; - } elsif ($input eq "source_peq_db") { fetch_peq_db_full(); $dc = 1; @@ -1176,9 +956,7 @@ sub print_main_menu print " [database] Enter database management menu \n"; print " [assets] Manage server assets \n"; print " [new_server] New folder EQEmu/PEQ install - Assumes MySQL/Perl installed \n"; - print " [new_server_with_bots] New folder EQEmu/PEQ install with bots enabled - Assumes MySQL/Perl installed \n"; print " [setup_bots] Enables bots on server - builds code and database requirements \n"; - print " [conversions] Routines used for conversion of scripts/data \n"; print "\n"; print " exit \n"; print "\n"; @@ -1271,6 +1049,12 @@ sub database_dump print `$command database:dump --all`; } +sub db_update_check +{ + my $command = get_world_command(); + print `$command database:updates`; +} + sub database_dump_player_tables { print "[Database] Performing database backup of player tables....\n"; @@ -1292,18 +1076,6 @@ sub script_exit exit; } -sub check_db_version_table -{ - if (get_mysql_result("SHOW TABLES LIKE 'db_version'") eq "" && $db) { - print "[Database] Table 'db_version' does not exist.... Creating...\n\n"; - print get_mysql_result(" - CREATE TABLE db_version ( - version int(11) DEFAULT '0' - ) ENGINE=InnoDB DEFAULT CHARSET=latin1; - INSERT INTO db_version (version) VALUES ('1000');"); - } -} - #::: Returns Tab Delimited MySQL Result from Command Line sub get_mysql_result { @@ -1394,54 +1166,6 @@ sub trim return $string; } -sub read_eqemu_config_xml -{ - open(CONFIG, "eqemu_config.xml"); - while () { - chomp; - $o = $_; - - if ($o =~ /\<\!--/i) { - next; - } - - if ($o =~ /database/i && $o =~ /\<\//i) { - $in_database_tag = 0; - } - if ($o =~ //i) { - print "IN DATABASE TAG\n" if $debug; - $in_database_tag = 1; - } - if ($o =~ //i) { - ($long_name) = $o =~ /(.*)<\/longname>/; - print "Long Name: '" . $long_name . "'\n" if $debug; - } - if ($in_database_tag == 1) { - @left = split(">", $o); - @right = split("<", $left[1]); - $tag_data = trim($right[0]); - - if ($o =~ //i && $in_database_tag) { - $user = $tag_data; - print "Database User: '" . $user . "'\n" if $debug; - } - if ($o =~ //i && $in_database_tag) { - $pass = $tag_data; - print "Database Pass: '" . $pass . "'\n" if $debug; - } - if ($o =~ //i) { - $db = $tag_data; - print "Database Name: '" . $db . "'\n" if $debug; - } - if ($o =~ //i) { - $host = $tag_data; - print "Database Host: '" . $host . "'\n" if $debug; - } - } - } - close(CONFIG); -} - sub read_eqemu_config_json { use JSON; @@ -1464,22 +1188,6 @@ sub read_eqemu_config_json $patches_path = $config->{"server"}{"directories"}{"patches"}; } -#::: Fetch Latest PEQ AA's -sub aa_fetch -{ - if (!$db) { - print "No database present, check your eqemu_config.json for proper MySQL/MariaDB configuration...\n"; - return; - } - - print "[Install] Pulling down PEQ AA Tables...\n"; - get_remote_file($eqemu_repository_request_url . "utils/sql/peq_aa_tables_post_rework.sql", - "db_update/peq_aa_tables_post_rework.sql"); - print "[Install] Installing AA Tables...\n"; - print get_mysql_result_from_file("db_update/peq_aa_tables_post_rework.sql"); - print "[Install] Done...\n\n"; -} - #::: Fetch Latest Opcodes sub opcodes_fetch { @@ -1515,36 +1223,6 @@ sub opcodes_fetch print "[Update] Done...\n"; } -sub remove_duplicate_rule_values -{ - $ruleset_id = trim(get_mysql_result("SELECT `ruleset_id` FROM `rule_sets` WHERE `name` = 'default'")); - print "[Database] Default Ruleset ID: " . $ruleset_id . "\n"; - - $total_removed = 0; - - #::: Store Default values... - $mysql_result = get_mysql_result("SELECT * FROM `rule_values` WHERE `ruleset_id` = " . $ruleset_id); - my @lines = split("\n", $mysql_result); - foreach my $val (@lines) { - my @values = split("\t", $val); - $rule_set_values{$values[1]}[0] = $values[2]; - } - - #::: Compare default values against other rulesets to check for duplicates... - $mysql_result = get_mysql_result("SELECT * FROM `rule_values` WHERE `ruleset_id` != " . $ruleset_id); - my @lines = split("\n", $mysql_result); - foreach my $val (@lines) { - my @values = split("\t", $val); - if ($values[2] == $rule_set_values{$values[1]}[0]) { - print "[Database] Removing duplicate : " . $values[1] . " (Ruleset (" . $values[0] . ")) matches default value of : " . $values[2] . "\n"; - get_mysql_result("DELETE FROM `rule_values` WHERE `ruleset_id` = " . $values[0] . " AND `rule_name` = '" . $values[1] . "'"); - $total_removed++; - } - } - - print "[Database] Total duplicate rules removed... " . $total_removed . "\n"; -} - sub copy_file { $l_source_file = $_[0]; @@ -1768,15 +1446,6 @@ sub check_windows_firewall_rules } } -sub fetch_server_dlls -{ - # print "[Download] Fetching lua51.dll, zlib1.dll, zlib1.pdb, libmysql.dll...\n"; - # get_remote_file($install_repository_request_url . "lua51.dll", "lua51.dll", 1); - # get_remote_file($install_repository_request_url . "zlib1.dll", "zlib1.dll", 1); - # get_remote_file($install_repository_request_url . "zlib1.pdb", "zlib1.pdb", 1); - # get_remote_file($install_repository_request_url . "libmysql.dll", "libmysql.dll", 1); -} - sub fetch_peq_db_full { print "[Install] Downloading latest PEQ Database... Please wait...\n"; @@ -1801,23 +1470,9 @@ sub fetch_peq_db_full sub map_files_fetch_bulk { print "[Install] Fetching Latest Maps... (This could take a few minutes...)\n"; - get_remote_file("http://analytics.akkadius.com/maps.zip", "maps/maps.zip", 1); + get_remote_file("https://github.com/Akkadius/eqemu-maps/releases/latest/download/maps.zip", "maps/maps.zip", 1); unzip('maps/maps.zip', 'maps/'); - my @files; - my $start_dir = "maps/EQEmuMaps-master/"; - find( - sub { push @files, $File::Find::name unless -d; }, - $start_dir - ); - for my $file (@files) { - $destination_file = $file; - $destination_file =~ s/maps\/EQEmuMaps-master\///g; - print "[Install] Installing [" . $destination_file . "]\n"; - copy_file($file, "maps/" . $destination_file); - } print "[Install] Fetched Latest Maps\n"; - - rmtree('maps/EQEmuMaps-master'); unlink('maps/maps.zip'); } @@ -2042,225 +1697,9 @@ sub unzip } } -sub are_file_sizes_different -{ - $file_1 = $_[0]; - $file_2 = $_[1]; - my $file_1 = (stat $file_1)[7]; - my $file_2 = (stat $file_2)[7]; - # print $file_1 . " :: " . $file_2 . "\n"; - if ($file_1 != $file_2) { - return 1; - } - return; -} - sub do_bots_db_schema_drop { - #"drop_bots.sql" is run before reverting database back to 'normal' - print "[Database] Fetching drop_bots.sql...\n"; - get_remote_file($eqemu_repository_request_url . "utils/sql/git/bots/drop_bots.sql", "db_update/drop_bots.sql"); - print get_mysql_result_from_file("db_update/drop_bots.sql"); - - print "[Database] Removing bot database tables...\n"; - - if (get_mysql_result("SHOW KEYS FROM `group_id` WHERE `Key_name` LIKE 'PRIMARY'") ne "" && $db) { - print get_mysql_result("ALTER TABLE `group_id` DROP PRIMARY KEY;"); - } - print get_mysql_result("ALTER TABLE `group_id` ADD PRIMARY KEY (`groupid`, `charid`, `ismerc`);"); - - if (get_mysql_result("SHOW KEYS FROM `guild_members` WHERE `Key_name` LIKE 'PRIMARY'") ne "" && $db) { - print get_mysql_result("ALTER TABLE `guild_members` DROP PRIMARY KEY;"); - } - print get_mysql_result("ALTER TABLE `guild_members` ADD PRIMARY KEY (`char_id`);"); - - print get_mysql_result("UPDATE `spawn2` SET `enabled` = 0 WHERE `id` IN (59297,59298);"); - - if (get_mysql_result("SHOW COLUMNS FROM `db_version` LIKE 'bots_version'") ne "" && $db) { - print get_mysql_result("UPDATE `db_version` SET `bots_version` = 0;"); - } - print "[Database] Done...\n"; -} - -sub modify_db_for_bots -{ - #Called after the db bots schema (2015_09_30_bots.sql) has been loaded - print "[Database] Modifying database for bots...\n"; - print get_mysql_result("UPDATE `spawn2` SET `enabled` = 1 WHERE `id` IN (59297,59298);"); - - if (get_mysql_result("SHOW KEYS FROM `guild_members` WHERE `Key_name` LIKE 'PRIMARY'") ne "" && $db) { - print get_mysql_result("ALTER TABLE `guild_members` DROP PRIMARY KEY;"); - } - - if (get_mysql_result("SHOW KEYS FROM `group_id` WHERE `Key_name` LIKE 'PRIMARY'") ne "" && $db) { - print get_mysql_result("ALTER TABLE `group_id` DROP PRIMARY KEY;"); - } - print get_mysql_result("ALTER TABLE `group_id` ADD PRIMARY KEY USING BTREE(`groupid`, `charid`, `name`, `ismerc`);"); - - convert_existing_bot_data(); -} - -sub convert_existing_bot_data -{ - if (get_mysql_result("SHOW TABLES LIKE 'bots'") ne "" && $db) { - print "[Database] Converting existing bot data...\n"; - print get_mysql_result("INSERT INTO `bot_data` (`bot_id`, `owner_id`, `spells_id`, `name`, `last_name`, `zone_id`, `gender`, `race`, `class`, `level`, `creation_day`, `last_spawn`, `time_spawned`, `size`, `face`, `hair_color`, `hair_style`, `beard`, `beard_color`, `eye_color_1`, `eye_color_2`, `drakkin_heritage`, `drakkin_tattoo`, `drakkin_details`, `ac`, `atk`, `hp`, `mana`, `str`, `sta`, `cha`, `dex`, `int`, `agi`, `wis`, `fire`, `cold`, `magic`, `poison`, `disease`, `corruption`) SELECT `BotID`, `BotOwnerCharacterID`, `BotSpellsID`, `Name`, `LastName`, `LastZoneId`, `Gender`, `Race`, `Class`, `BotLevel`, UNIX_TIMESTAMP(`BotCreateDate`), UNIX_TIMESTAMP(`LastSpawnDate`), `TotalPlayTime`, `Size`, `Face`, `LuclinHairColor`, `LuclinHairStyle`, `LuclinBeard`, `LuclinBeardColor`, `LuclinEyeColor`, `LuclinEyeColor2`, `DrakkinHeritage`, `DrakkinTattoo`, `DrakkinDetails`, `AC`, `ATK`, `HP`, `Mana`, `STR`, `STA`, `CHA`, `DEX`, `_INT`, `AGI`, `WIS`, `FR`, `CR`, `MR`, `PR`, `DR`, `Corrup` FROM `bots`;"); - - print get_mysql_result("INSERT INTO `bot_inspect_messages` (`bot_id`, `inspect_message`) SELECT `BotID`, `BotInspectMessage` FROM `bots`;"); - - print get_mysql_result("RENAME TABLE `bots` TO `bots_old`;"); - } - - if (get_mysql_result("SHOW TABLES LIKE 'botstances'") ne "" && $db) { - print get_mysql_result("INSERT INTO `bot_stances` (`bot_id`, `stance_id`) SELECT bs.`BotID`, bs.`StanceID` FROM `botstances` bs INNER JOIN `bot_data` bd ON bs.`BotID` = bd.`bot_id`;"); - - print get_mysql_result("RENAME TABLE `botstances` TO `botstances_old`;"); - } - - if (get_mysql_result("SHOW TABLES LIKE 'bottimers'") ne "" && $db) { - print get_mysql_result("INSERT INTO `bot_timers` (`bot_id`, `timer_id`, `timer_value`) SELECT bt.`BotID`, bt.`TimerID`, bt.`Value` FROM `bottimers` bt INNER JOIN `bot_data` bd ON bt.`BotID` = bd.`bot_id`;"); - - print get_mysql_result("RENAME TABLE `bottimers` TO `bottimers_old`;"); - } - - if (get_mysql_result("SHOW TABLES LIKE 'botbuffs'") ne "" && $db) { - print get_mysql_result("INSERT INTO `bot_buffs` (`buffs_index`, `bot_id`, `spell_id`, `caster_level`, `duration_formula`, `tics_remaining`, `poison_counters`, `disease_counters`, `curse_counters`, `corruption_counters`, `numhits`, `melee_rune`, `magic_rune`, `persistent`) SELECT bb.`BotBuffId`, bb.`BotId`, bb.`SpellId`, bb.`CasterLevel`, bb.`DurationFormula`, bb.`TicsRemaining`, bb.`PoisonCounters`, bb.`DiseaseCounters`, bb.`CurseCounters`, bb.`CorruptionCounters`, bb.`HitCount`, bb.`MeleeRune`, bb.`MagicRune`, bb.`Persistent` FROM `botbuffs` bb INNER JOIN `bot_data` bd ON bb.`BotId` = bd.`bot_id`;"); - - if (get_mysql_result("SHOW COLUMNS FROM `botbuffs` LIKE 'dot_rune'") ne "" && $db) { - print get_mysql_result("UPDATE `bot_buffs` bb INNER JOIN `botbuffs` bbo ON bb.`buffs_index` = bbo.`BotBuffId` SET bb.`dot_rune` = bbo.`dot_rune` WHERE bb.`bot_id` = bbo.`BotID`;"); - } - - if (get_mysql_result("SHOW COLUMNS FROM `botbuffs` LIKE 'caston_x'") ne "" && $db) { - print get_mysql_result("UPDATE `bot_buffs` bb INNER JOIN `botbuffs` bbo ON bb.`buffs_index` = bbo.`BotBuffId` SET bb.`caston_x` = bbo.`caston_x` WHERE bb.`bot_id` = bbo.`BotID`;"); - } - - if (get_mysql_result("SHOW COLUMNS FROM `botbuffs` LIKE 'caston_y'") ne "" && $db) { - print get_mysql_result("UPDATE `bot_buffs` bb INNER JOIN `botbuffs` bbo ON bb.`buffs_index` = bbo.`BotBuffId` SET bb.`caston_y` = bbo.`caston_y` WHERE bb.`bot_id` = bbo.`BotID`;"); - } - - if (get_mysql_result("SHOW COLUMNS FROM `botbuffs` LIKE 'caston_z'") ne "" && $db) { - print get_mysql_result("UPDATE `bot_buffs` bb INNER JOIN `botbuffs` bbo ON bb.`buffs_index` = bbo.`BotBuffId` SET bb.`caston_z` = bbo.`caston_z` WHERE bb.`bot_id` = bbo.`BotID`;"); - } - - if (get_mysql_result("SHOW COLUMNS FROM `botbuffs` LIKE 'ExtraDIChance'") ne "" && $db) { - print get_mysql_result("UPDATE `bot_buffs` bb INNER JOIN `botbuffs` bbo ON bb.`buffs_index` = bbo.`BotBuffId` SET bb.`extra_di_chance` = bbo.`ExtraDIChance` WHERE bb.`bot_id` = bbo.`BotID`;"); - } - - print get_mysql_result("RENAME TABLE `botbuffs` TO `botbuffs_old`;"); - } - - if (get_mysql_result("SHOW TABLES LIKE 'botinventory'") ne "" && $db) { - print get_mysql_result("INSERT INTO `bot_inventories` (`inventories_index`, `bot_id`, `slot_id`, `item_id`, `inst_charges`, `inst_color`, `inst_no_drop`, `augment_1`, `augment_2`, `augment_3`, `augment_4`, `augment_5`) SELECT bi.`BotInventoryID`, bi.`BotID`, bi.`SlotID`, bi.`ItemID`, bi.`charges`, bi.`color`, bi.`instnodrop`, bi.`augslot1`, bi.`augslot2`, bi.`augslot3`, bi.`augslot4`, bi.`augslot5` FROM `botinventory` bi INNER JOIN `bot_data` bd ON bi.`BotID` = bd.`bot_id`;"); - - if (get_mysql_result("SHOW COLUMNS FROM `botinventory` LIKE 'augslot6'") ne "" && $db) { - print get_mysql_result("UPDATE `bot_inventories` bi INNER JOIN `botinventory` bio ON bi.`inventories_index` = bio.`BotInventoryID` SET bi.`augment_6` = bio.`augslot6` WHERE bi.`bot_id` = bio.`BotID`;"); - } - - print get_mysql_result("RENAME TABLE `botinventory` TO `botinventory_old`;"); - } - - if (get_mysql_result("SHOW TABLES LIKE 'botpets'") ne "" && $db) { - print get_mysql_result("INSERT INTO `bot_pets` (`pets_index`, `pet_id`, `bot_id`, `name`, `mana`, `hp`) SELECT bp.`BotPetsId`, bp.`PetId`, bp.`BotId`, bp.`Name`, bp.`Mana`, bp.`HitPoints` FROM `botpets` bp INNER JOIN `bot_data` bd ON bp.`BotId` = bd.`bot_id`;"); - - print get_mysql_result("RENAME TABLE `botpets` TO `botpets_old`;"); - } - - if (get_mysql_result("SHOW TABLES LIKE 'botpetbuffs'") ne "" && $db) { - print get_mysql_result("INSERT INTO `bot_pet_buffs` (`pet_buffs_index`, `pets_index`, `spell_id`, `caster_level`, `duration`) SELECT bpb.`BotPetBuffId`, bpb.`BotPetsId`, bpb.`SpellId`, bpb.`CasterLevel`, bpb.`Duration` FROM `botpetbuffs` bpb INNER JOIN `bot_pets` bp ON bpb.`BotPetsId` = bp.`pets_index`;"); - - print get_mysql_result("RENAME TABLE `botpetbuffs` TO `botpetbuffs_old`;"); - } - - if (get_mysql_result("SHOW TABLES LIKE 'botpetinventory'") ne "" && $db) { - print get_mysql_result("INSERT INTO `bot_pet_inventories` (`pet_inventories_index`, `pets_index`, `item_id`) SELECT bpi.`BotPetInventoryId`, bpi.`BotPetsId`, bpi.`ItemId` FROM `botpetinventory` bpi INNER JOIN `bot_pets` bp ON bpi.`BotPetsId` = bp.`pets_index`;"); - - print get_mysql_result("RENAME TABLE `botpetinventory` TO `botpetinventory_old`;"); - } - - if (get_mysql_result("SHOW TABLES LIKE 'botgroup'") ne "" && $db) { - print get_mysql_result("INSERT INTO `bot_groups` (`groups_index`, `group_leader_id`, `group_name`) SELECT bg.`BotGroupId`, bg.`BotGroupLeaderBotId`, bg.`BotGroupName` FROM `botgroup` bg INNER JOIN `bot_data` bd ON bg.`BotGroupLeaderBotId` = bd.`bot_id`;"); - - print get_mysql_result("RENAME TABLE `botgroup` TO `botgroup_old`;"); - } - - if (get_mysql_result("SHOW TABLES LIKE 'botgroupmembers'") ne "" && $db) { - print get_mysql_result("INSERT INTO `bot_group_members` (`group_members_index`, `groups_index`, `bot_id`) SELECT bgm.`BotGroupMemberId`, bgm.`BotGroupId`, bgm.`BotId` FROM `botgroupmembers` bgm INNER JOIN `bot_groups` bg ON bgm.`BotGroupId` = bg.`groups_index` INNER JOIN `bot_data` bd ON bgm.`BotId` = bd.`bot_id`;"); - - print get_mysql_result("RENAME TABLE `botgroupmembers` TO `botgroupmembers_old`;"); - } - - if (get_mysql_result("SHOW TABLES LIKE 'botguildmembers'") ne "" && $db) { - print get_mysql_result("INSERT INTO `bot_guild_members` (`bot_id`, `guild_id`, `rank`, `tribute_enable`, `total_tribute`, `last_tribute`, `banker`, `public_note`, `alt`) SELECT bgm.`char_id`, bgm.`guild_id`, bgm.`rank`, bgm.`tribute_enable`, bgm.`total_tribute`, bgm.`last_tribute`, bgm.`banker`, bgm.`public_note`, bgm.`alt` FROM `botguildmembers` bgm INNER JOIN `guilds` g ON bgm.`guild_id` = g.`id` INNER JOIN `bot_data` bd ON bgm.`char_id` = bd.`bot_id`;"); - - print get_mysql_result("RENAME TABLE `botguildmembers` TO `botguildmembers_old`;"); - } -} - -sub get_main_db_version -{ - $main_local_db_version = trim(get_mysql_result("SELECT version FROM db_version LIMIT 1")); - return $main_local_db_version; -} - -sub get_bots_db_version -{ - #::: Check if bots_version column exists... - if (get_mysql_result("SHOW COLUMNS FROM db_version LIKE 'bots_version'") eq "" && $db) { - print get_mysql_result("ALTER TABLE db_version ADD bots_version int(11) DEFAULT '0' AFTER version;"); - print "[Database] Column 'bots_version' does not exists.... Adding to 'db_version' table...\n\n"; - } - - $bots_local_db_version = trim(get_mysql_result("SELECT bots_version FROM db_version LIMIT 1")); - return $bots_local_db_version; -} - -#::: Safe for call from world startup or menu option -sub bots_db_management -{ - #::: If we have stale data from main db run - if ($db_run_stage > 0 && $bots_db_management == 0) { - clear_database_runs(); - } - - #::: Main Binary Database version - $binary_database_version = trim($db_version[2]); - if ($binary_database_version == 0) { - print "[Database] Your server binaries (world/zone) are not compiled for bots...\n\n"; - return; - } - $local_database_version = get_bots_db_version(); - - #::: Set on flag for running bot updates... - $bots_db_management = 1; - - if ($local_database_version > $binary_database_version) { - print "[Update] Bots database version is ahead of current binaries...\n"; - return; - } - - run_database_check(); -} - -#::: Safe for call from world startup or menu option -sub main_db_management -{ - #::: If we have stale data from bots db run - if ($db_run_stage > 0 && $bots_db_management == 1) { - clear_database_runs(); - } - - #::: Main Binary Database version - $binary_database_version = trim($db_version[1]); - $local_database_version = get_main_db_version(); - - $bots_db_management = 0; - - if ($local_database_version > $binary_database_version) { - print "[Update] Database version is ahead of current binaries...\n"; - return; - } - - run_database_check(); + print `$command bots:disable`; } sub clear_database_runs @@ -2272,195 +1711,6 @@ sub clear_database_runs @total_updates = (); } -#::: Responsible for Database Upgrade Routines -sub run_database_check -{ - - if (!$db) { - print "No database present, check your eqemu_config.json for proper MySQL/MariaDB configuration...\n"; - return; - } - - #::: Pull down bots database manifest - if ($bots_db_management == 1) { - print "[Database] Retrieving latest bots database manifest...\n"; - get_remote_file($eqemu_repository_request_url . "utils/sql/git/bots/bots_db_update_manifest.txt", - "db_update/db_update_manifest.txt"); - } - #::: Pull down mainstream database manifest - else { - print "[Database] Retrieving latest database manifest...\n"; - get_remote_file($eqemu_repository_request_url . "utils/sql/db_update_manifest.txt", - "db_update/db_update_manifest.txt"); - } - - #::: Parse manifest - print "[Database] Reading manifest...\n"; - - use Data::Dumper; - open(FILE, "db_update/db_update_manifest.txt"); - while () { - chomp; - $o = $_; - if ($o =~ /#/i) { - next; - } - - @manifest = split('\|', $o); - $m_d{$manifest[0]} = [ @manifest ]; - } - - #::: This is where we set checkpoints for where a database might be so we don't check so far back in the manifest... - if ($local_database_version >= 9000) { - $revision_check = $local_database_version + 1; - } - else { - #::: This does not negatively affect bots - $revision_check = 1000; - if (get_mysql_result("SHOW TABLES LIKE 'character_data'") ne "") { - $revision_check = 8999; - } - } - - @total_updates = (); - - #::: Fetch and register sqls for this database update cycle - for ($i = $revision_check; $i <= $binary_database_version; $i++) { - if (!defined($m_d{$i}[0])) { - next; - } - - $file_name = trim($m_d{$i}[1]); - print "[Database] fetching update: " . $i . " '" . $file_name . "' \n"; - fetch_missing_db_update($i, $file_name); - push(@total_updates, $i); - } - - if (scalar(@total_updates) == 0) { - print "[Database] No updates need to be run...\n"; - if ($bots_db_management == 1) { - print "[Database] Setting Database to Bots Binary Version (" . $binary_database_version . ") if not already...\n\n"; - get_mysql_result("UPDATE db_version SET bots_version = $binary_database_version "); - } - else { - print "[Database] Setting Database to Binary Version (" . $binary_database_version . ") if not already...\n\n"; - get_mysql_result("UPDATE db_version SET version = $binary_database_version "); - } - - clear_database_runs(); - return; - } - - #::: Execute pending updates - @total_updates = sort @total_updates; - foreach my $val (@total_updates) { - $file_name = trim($m_d{$val}[1]); - $query_check = trim($m_d{$val}[2]); - $match_type = trim($m_d{$val}[3]); - $match_text = trim($m_d{$val}[4]); - - #::: Match type update - if ($match_type eq "contains") { - if (trim(get_mysql_result($query_check)) =~ /$match_text/i) { - print "[Database] Applying update [" . $val . "]:[" . $file_name . "]\n"; - print get_mysql_result_from_file("db_update/$file_name"); - } - else { - print "[Database] Has update [" . $val . "]:[" . $file_name . "]\n"; - } - print_match_debug(); - print_break(); - } - if ($match_type eq "missing") { - if (get_mysql_result($query_check) =~ /$match_text/i) { - print "[Database] Has update [" . $val . "]:[" . $file_name . "]\n"; - } - else { - print "[Database] Applying update [" . $val . "]:[" . $file_name . "]\n"; - print get_mysql_result_from_file("db_update/$file_name"); - } - print_match_debug(); - print_break(); - } - if ($match_type eq "empty") { - if (get_mysql_result($query_check) eq "") { - print "[Database] Applying update [" . $val . "]:[" . $file_name . "]\n"; - print get_mysql_result_from_file("db_update/$file_name"); - } - else { - print "[Database] Has update [" . $val . "]:[" . $file_name . "' \n"; - } - print_match_debug(); - print_break(); - } - if ($match_type eq "not_empty") { - if (get_mysql_result($query_check) ne "") { - print "[Database] Applying update [" . $val . "]:[" . $file_name . "]\n"; - print get_mysql_result_from_file("db_update/$file_name"); - } - else { - print "[Database] Has update [" . $val . "]:[" . $file_name . "]\n"; - } - print_match_debug(); - print_break(); - } - - if ($bots_db_management == 1) { - print get_mysql_result("UPDATE db_version SET bots_version = $val WHERE bots_version < $val"); - - if ($val == 9000) { - modify_db_for_bots(); - } - } - else { - print get_mysql_result("UPDATE db_version SET version = $val WHERE version < $val"); - - if ($val == 9138) { - fix_quest_factions(); - } - } - } - - if ($bots_db_management == 1) { - print "[Database] Bots database update cycle complete at version [" . get_bots_db_version() . "]\n"; - } - else { - print "[Database] Mainstream database update cycle complete at version [" . get_main_db_version() . "]\n"; - } -} - -sub fetch_missing_db_update -{ - $db_update = $_[0]; - $update_file = $_[1]; - - if ($bots_db_management == 1) { - if ($db_update >= 9000) { - get_remote_file($eqemu_repository_request_url . "utils/sql/git/bots/required/" . $update_file, - "db_update/" . $update_file . ""); - } - } - else { - if ($db_update >= 9000) { - get_remote_file($eqemu_repository_request_url . "utils/sql/git/required/" . $update_file, - "db_update/" . $update_file . ""); - } - elsif ($db_update >= 5000 && $db_update <= 9000) { - get_remote_file($eqemu_repository_request_url . "utils/sql/svn/" . $update_file, - "db_update/" . $update_file . ""); - } - } -} - -sub print_match_debug -{ - if (!$debug) { return; } - print " Match Type: '" . $match_type . "'\n"; - print " Match Text: '" . $match_text . "'\n"; - print " Query Check: '" . $query_check . "'\n"; - print " Result: '" . trim(get_mysql_result($query_check)) . "'\n"; -} - sub print_break { if (!$debug) { return; } @@ -2476,263 +1726,3 @@ sub generate_random_password return $randpassword; } - -sub quest_heading_convert -{ - - if (trim(get_mysql_result("SELECT value FROM variables WHERE varname = 'new_heading_conversion'")) eq "true") { - print "Conversion script has already ran... doing this again would skew proper heading values in function calls...\n"; - exit; - } - - %matches = ( - 0 => [ "quest::spawn2", 6 ], - 1 => [ "eq.spawn2", 6 ], - 2 => [ "eq.unique_spawn", 6 ], - 3 => [ "quest::unique_spawn", 6 ], - 4 => [ "GMMove", 3 ], - 5 => [ "MovePCInstance", 5 ], - 6 => [ "MovePC", 4 ], - 7 => [ "moveto", 3 ], - ); - - $total_matches = 0; - - use Scalar::Util qw(looks_like_number); - - my @files; - my $start_dir = "quests/."; - find( - sub { push @files, $File::Find::name unless -d; }, - $start_dir - ); - for my $file (@files) { - - #::: Skip non script files - if ($file !~ /lua|pl/i) { next; } - - if ($file =~ /lua|pl/i) { - $print_buffer = ""; - - $changes_made = 0; - - #::: Open and read line by line - open(FILE, $file); - while () { - chomp; - $line = $_; - - #::: Loop through matches - foreach my $key (sort(keys %matches)) { - $argument_position = $matches{$key}[1]; - $match = $matches{$key}[0]; - - if ($line =~ /$match/i) { - $line_temp = $line; - $line_temp =~ s/$match\(//g; - $line_temp =~ s/\(.*?\)//gs; - $line_temp =~ s/\);.*//; - $line_temp =~ s/\).*//; - $line_temp =~ s/\):.*//; - $line_temp =~ s/\);//g; - - @line_data = split(",", $line_temp); - - # use Data::Dumper; - # print Dumper(\@line_data); - - $heading_value = $line_data[$argument_position]; - $heading_value_clean = trim($heading_value); - $heading_value_raw = $line_data[$argument_position]; - $heading_value_before = $line_data[$argument_position - 1]; - - if (looks_like_number($heading_value) && $heading_value != 0 && ($heading_value * 2) <= 512) { - $heading_value_new = $heading_value * 2; - - $heading_value =~ s/$heading_value_clean/$heading_value_new/g; - - $heading_value_search = quotemeta($heading_value_before . "," . $heading_value_raw); - $heading_value_replace = $heading_value_before . "," . $heading_value; - - print $file . "\n"; - print $line . "\n"; - $line =~ s/$heading_value_search/$heading_value_replace/g; - print $line . "\n"; - print "\n"; - - $changes_made = 1; - } - elsif ($heading_value == 0) {} #::: Do nothing - elsif ($heading_value =~ /GetHeading|heading|\$h/i) {} #::: Do nothing - else { - if ($file =~ /\.pl/i) { - if ($line_temp =~ /#/i) { - $line .= " - needs_heading_validation"; - } - else { - $line .= " # needs_heading_validation"; - } - } - elsif ($file =~ /\.lua/i) { - if ($line_temp =~ /--/i) { - $line .= " - needs_heading_validation"; - } - else { - $line .= " -- needs_heading_validation"; - } - } - - $changes_made = 1; - - print $line . "\n"; - } - - $total_matches++; - } - } - - $print_buffer .= $line . "\n"; - } - close(FILE); - - if ($changes_made == 1) { - #::: Write changes - open(NEW_FILE, '>', $file); - print NEW_FILE $print_buffer; - close NEW_FILE; - } - } - } - - #::: Mark conversion as ran - print get_mysql_result("INSERT INTO `variables` (varname, value, information, ts) VALUES ('new_heading_conversion', 'true', 'Script ran against quests folder to convert new heading values', NOW())"); - - print "Total matches: " . $total_matches . "\n"; -} - -sub quest_faction_convert -{ - - if (trim(get_mysql_result("SELECT value FROM variables WHERE varname = 'new_faction_conversion'")) eq "true") { - print "Conversion script has already ran... doing this again would skew proper faction values in function calls...\n"; - exit; - } - - %matches = ( - 0 => [ "GetCharacterFactionLevel", 0 ], - 1 => [ "GetModCharacterFactionLevel", 0 ], - 2 => [ "SetFactionLevel2", 1 ], - 3 => [ "GetFactionLevel", 5 ], - 4 => [ "CheckNPCFactionAlly", 0 ], - 5 => [ ":Faction", 0 ], - ); - - $total_matches = 0; - - use Scalar::Util qw(looks_like_number); - - my @files; - my $start_dir = "quests/."; - find( - sub { push @files, $File::Find::name unless -d; }, - $start_dir - ); - for my $file (@files) { - - #::: Skip non script files - if ($file !~ /lua|pl/i) { - next; - } - - if ($file =~ /lua|pl/i) { - $print_buffer = ""; - $changes_made = 0; - - #::: Open and read line by line - open(FILE, $file); - while () { - chomp; - $line = $_; - - #::: Loop through matches - foreach my $key (sort(keys %matches)) { - $argument_position = $matches{$key}[1]; - $match = $matches{$key}[0]; - - if ($line =~ /$match\(/i || $line =~ /$match \(/i) { - $line_temp = $line; - $line_temp =~ s/^.*$match\(//gi; - $line_temp =~ s/^.*$match \(//gi; - $line_temp =~ s/"//g; - $line_temp =~ s/\);.*//; - - @line_data = split(",", $line_temp); - - $faction_value = $line_data[$argument_position]; - $faction_value_clean = trim($faction_value); - - if (looks_like_number($faction_value_clean)) { - $new_faction = - get_mysql_result("select clientid from client_server_faction_map where serverid = $faction_value_clean"); - chomp $new_faction; - if ($new_faction == 0) { - $new_faction = - get_mysql_result("select new_faction from custom_faction_mappings where old_faction = $faction_value_clean"); - chomp $new_faction; - } - if ($new_faction > 0) { - print "BEFORE: " . $line . "\n"; - $line =~ s/$faction_value_clean/$new_faction/g; - print "AFTER: " . $line . "\n"; - $changes_made = 1; - } - else { - print "Unknown Faction: '$match' FACTION VALUE: '" . $faction_value_clean . "'\n"; - } - } - - $total_matches++; - } - } - - $print_buffer .= $line . "\n"; - } - close(FILE); - - #::: Write changes - if ($changes_made == 1) { - open(NEW_FILE, '>', $file); - print NEW_FILE $print_buffer; - close NEW_FILE; - } - } - } - - #::: Mark conversion as ran - print get_mysql_result("INSERT INTO `variables` (varname, value, information, ts) VALUES ('new_faction_conversion', 'true', 'Script ran against quests folder to convert new faction values', NOW())"); - - print "Total matches: " . $total_matches . "\n"; -} - -sub fix_quest_factions -{ - # Backup the quests - mkdir('backups'); - my @files; - my $start_dir = "quests/"; - find( - sub { push @files, $File::Find::name unless -d; }, - $start_dir - ); - for my $file (@files) { - $destination_file = $file; - my $date = strftime "%m-%d-%Y", localtime; - $destination_file =~ s/quests/quests-$date/; - print "Backing up :: " . $destination_file . "\n"; - # unlink($destination_file); - copy_file($file, 'backups/' . $destination_file); - } - - # Fix the factions - quest_faction_convert(); -} diff --git a/utils/sql/bot_tables_bootstrap.sql b/utils/sql/bot_tables_bootstrap.sql new file mode 100644 index 000000000..40a1def2e --- /dev/null +++ b/utils/sql/bot_tables_bootstrap.sql @@ -0,0 +1,597 @@ +SET FOREIGN_KEY_CHECKS = 0; + +-- +-- Table structure for table `bot_buffs` +-- + +DROP TABLE IF EXISTS `bot_buffs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_buffs` ( + `buffs_index` int(11) unsigned NOT NULL AUTO_INCREMENT, + `bot_id` int(11) unsigned NOT NULL DEFAULT '0', + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `caster_level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `duration_formula` int(10) unsigned NOT NULL DEFAULT '0', + `tics_remaining` int(11) unsigned NOT NULL DEFAULT '0', + `poison_counters` int(11) unsigned NOT NULL DEFAULT '0', + `disease_counters` int(11) unsigned NOT NULL DEFAULT '0', + `curse_counters` int(11) unsigned NOT NULL DEFAULT '0', + `corruption_counters` int(11) unsigned NOT NULL DEFAULT '0', + `numhits` int(10) unsigned NOT NULL DEFAULT '0', + `melee_rune` int(10) unsigned NOT NULL DEFAULT '0', + `magic_rune` int(10) unsigned NOT NULL DEFAULT '0', + `dot_rune` int(10) unsigned NOT NULL DEFAULT '0', + `persistent` tinyint(1) NOT NULL DEFAULT '0', + `caston_x` int(10) NOT NULL DEFAULT '0', + `caston_y` int(10) NOT NULL DEFAULT '0', + `caston_z` int(10) NOT NULL DEFAULT '0', + `extra_di_chance` int(10) unsigned NOT NULL DEFAULT '0', + `instrument_mod` int(10) NOT NULL DEFAULT '10', + PRIMARY KEY (`buffs_index`), + KEY `FK_bot_buffs_1` (`bot_id`), + CONSTRAINT `FK_bot_buffs_1` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_buffs` +-- + +LOCK TABLES `bot_buffs` WRITE; +/*!40000 ALTER TABLE `bot_buffs` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_buffs` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_command_settings` +-- + +DROP TABLE IF EXISTS `bot_command_settings`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_command_settings` ( + `bot_command` varchar(128) NOT NULL DEFAULT '', + `access` int(11) NOT NULL DEFAULT '0', + `aliases` varchar(256) NOT NULL DEFAULT '', + PRIMARY KEY (`bot_command`), + UNIQUE KEY `UK_bot_command_settings_1` (`bot_command`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_command_settings` +-- + +LOCK TABLES `bot_command_settings` WRITE; +/*!40000 ALTER TABLE `bot_command_settings` DISABLE KEYS */; +INSERT INTO `bot_command_settings` VALUES ('actionable',0,''),('aggressive',0,'agg'),('attack',0,'atk'),('bindaffinity',0,'bind'),('bot',0,'b'),('botappearance',0,'app|appearance'),('botbeardcolor',0,'bc|beardcolor'),('botbeardstyle',0,'bs|beardstyle'),('botcamp',0,'camp'),('botclone',200,'clone'),('botcreate',0,'create'),('botdelete',0,'delete'),('botdetails',0,'details'),('botdyearmor',0,'dyearmor'),('boteyes',0,'eyes'),('botface',0,'face'),('botfollowdistance',0,'followd'),('botgroup',0,'bg'),('botgroupaddmember',0,'bgadd'),('botgroupcreate',0,'bgcreate'),('botgroupdelete',0,'bgdelete'),('botgrouplist',0,'bglist'),('botgroupload',0,'bgload'),('botgroupremovemember',0,'bgremove'),('bothaircolor',0,'hc|haircolor'),('bothairstyle',0,'hs|hairstyle'),('botheritage',0,'her|heritage'),('botinspectmessage',0,'inspect'),('botlist',0,'list'),('botoutofcombat',0,'ooc|outofcombat'),('botreport',0,'report|health|mana'),('botspawn',0,'spawn'),('botstance',0,'stance'),('botstopmeleelevel',0,'sml'),('botsummon',0,'summon'),('bottattoo',0,'tattoo'),('bottogglearcher',0,'archer|togglearcher'),('bottogglehelm',0,'helm|togglehelm'),('botupdate',0,'update'),('botwoad',0,'woad'),('charm',0,''),('circle',0,'cir'),('cure',0,''),('defensive',0,'def'),('depart',0,'dep'),('escape',0,'evac|succor'),('findaliases',0,'alias'),('follow',0,''),('guard',0,''),('healrotation',0,'hr'),('healrotationadaptivetargeting',0,'hradapt'),('healrotationaddmember',0,'hraddm'),('healrotationaddtarget',0,'hraddt'),('healrotationadjustcritical',0,'hrcrit'),('healrotationadjustsafe',0,'hrsafe'),('healrotationcastingoverride',0,'hroverride'),('healrotationchangeinterval',0,'hrinterval'),('healrotationclearhot',0,'hrclearhot'),('healrotationcleartargets',0,'hrclear'),('healrotationcreate',0,'hrcreate'),('healrotationdelete',0,'hrdelete'),('healrotationfastheals',0,'hrfastheals'),('healrotationlist',0,'hrlist'),('healrotationremovemember',0,'hrremm'),('healrotationremovetarget',0,'hrremt'),('healrotationresetlimits',0,'hrreset'),('healrotationsave',0,'hrsave'),('healrotationsethot',0,'hrsethot'),('healrotationstart',0,'hrstart'),('healrotationstop',0,'hrstop'),('help',0,'?'),('hold',0,''),('identify',0,'lore'),('inventory',0,'inv'),('inventorygive',0,'invgive'),('inventorylist',0,'invlist'),('inventoryremove',0,'invremove'),('inventorywindow',0,'invwindow'),('invisibility',0,'invis'),('levitation',0,'lev'),('lull',0,'calm|pacify'),('mesmerize',0,'mez'),('movementspeed',0,'sow'),('owneroption',0,'oo'),('pet',0,'p'),('petgetlost',0,'pgl'),('petremove',0,'prem'),('petsettype',0,'pset'),('picklock',0,'pl'),('portal',0,'port'),('pull',0,''),('release',0,''),('resistance',0,'resist'),('resurrect',0,'revive'),('rune',0,''),('sendhome',0,'gate'),('size',0,''),('summoncorpse',0,'scorpse'),('taunt',0,''),('track',0,''),('waterbreathing',0,'wb|eb'); +/*!40000 ALTER TABLE `bot_command_settings` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_create_combinations` +-- + +DROP TABLE IF EXISTS `bot_create_combinations`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_create_combinations` ( + `race` int(10) unsigned NOT NULL DEFAULT '0', + `classes` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`race`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_create_combinations` +-- + +LOCK TABLES `bot_create_combinations` WRITE; +/*!40000 ALTER TABLE `bot_create_combinations` DISABLE KEYS */; +INSERT INTO `bot_create_combinations` VALUES (1,15871),(2,49921),(3,15382),(4,425),(5,14342),(6,15635),(7,429),(8,33031),(9,49681),(10,49681),(11,303),(12,15639),(128,18001),(130,50049),(330,3863),(522,15871); +/*!40000 ALTER TABLE `bot_create_combinations` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_data` +-- + +DROP TABLE IF EXISTS `bot_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_data` ( + `bot_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `owner_id` int(11) unsigned NOT NULL, + `spells_id` int(11) unsigned NOT NULL DEFAULT '0', + `name` varchar(64) NOT NULL DEFAULT '', + `last_name` varchar(64) NOT NULL DEFAULT '', + `title` varchar(32) NOT NULL DEFAULT '', + `suffix` varchar(32) NOT NULL DEFAULT '', + `zone_id` smallint(6) NOT NULL DEFAULT '0', + `gender` tinyint(2) NOT NULL DEFAULT '0', + `race` smallint(5) NOT NULL DEFAULT '0', + `class` tinyint(2) NOT NULL DEFAULT '0', + `level` tinyint(2) unsigned NOT NULL DEFAULT '0', + `deity` int(11) unsigned NOT NULL DEFAULT '0', + `creation_day` int(11) unsigned NOT NULL DEFAULT '0', + `last_spawn` int(11) unsigned NOT NULL DEFAULT '0', + `time_spawned` int(11) unsigned NOT NULL DEFAULT '0', + `size` float NOT NULL DEFAULT '0', + `face` int(10) NOT NULL DEFAULT '1', + `hair_color` int(10) NOT NULL DEFAULT '1', + `hair_style` int(10) NOT NULL DEFAULT '1', + `beard` int(10) NOT NULL DEFAULT '0', + `beard_color` int(10) NOT NULL DEFAULT '1', + `eye_color_1` int(10) NOT NULL DEFAULT '1', + `eye_color_2` int(10) NOT NULL DEFAULT '1', + `drakkin_heritage` int(10) NOT NULL DEFAULT '0', + `drakkin_tattoo` int(10) NOT NULL DEFAULT '0', + `drakkin_details` int(10) NOT NULL DEFAULT '0', + `ac` smallint(5) NOT NULL DEFAULT '0', + `atk` mediumint(9) NOT NULL DEFAULT '0', + `hp` int(11) NOT NULL DEFAULT '0', + `mana` int(11) NOT NULL DEFAULT '0', + `str` mediumint(8) NOT NULL DEFAULT '75', + `sta` mediumint(8) NOT NULL DEFAULT '75', + `cha` mediumint(8) NOT NULL DEFAULT '75', + `dex` mediumint(8) NOT NULL DEFAULT '75', + `int` mediumint(8) NOT NULL DEFAULT '75', + `agi` mediumint(8) NOT NULL DEFAULT '75', + `wis` mediumint(8) NOT NULL DEFAULT '75', + `fire` smallint(5) NOT NULL DEFAULT '0', + `cold` smallint(5) NOT NULL DEFAULT '0', + `magic` smallint(5) NOT NULL DEFAULT '0', + `poison` smallint(5) NOT NULL DEFAULT '0', + `disease` smallint(5) NOT NULL DEFAULT '0', + `corruption` smallint(5) NOT NULL DEFAULT '0', + `show_helm` int(11) unsigned NOT NULL DEFAULT '0', + `follow_distance` int(11) unsigned NOT NULL DEFAULT '200', + `stop_melee_level` tinyint(3) unsigned NOT NULL DEFAULT '255', + `expansion_bitmask` int(11) NOT NULL DEFAULT '-1', + `enforce_spell_settings` tinyint(2) unsigned NOT NULL DEFAULT '0', + `archery_setting` tinyint(2) unsigned NOT NULL DEFAULT '0', + `caster_range` int(11) unsigned NOT NULL DEFAULT '300', + PRIMARY KEY (`bot_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_data` +-- + +LOCK TABLES `bot_data` WRITE; +/*!40000 ALTER TABLE `bot_data` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_data` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_heal_rotation_members` +-- + +DROP TABLE IF EXISTS `bot_heal_rotation_members`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_heal_rotation_members` ( + `member_index` int(11) unsigned NOT NULL AUTO_INCREMENT, + `heal_rotation_index` int(11) unsigned NOT NULL DEFAULT '0', + `bot_id` int(11) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`member_index`), + KEY `FK_bot_heal_rotation_members_1` (`heal_rotation_index`), + KEY `FK_bot_heal_rotation_members_2` (`bot_id`), + CONSTRAINT `FK_bot_heal_rotation_members_1` FOREIGN KEY (`heal_rotation_index`) REFERENCES `bot_heal_rotations` (`heal_rotation_index`), + CONSTRAINT `FK_bot_heal_rotation_members_2` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_heal_rotation_members` +-- + +LOCK TABLES `bot_heal_rotation_members` WRITE; +/*!40000 ALTER TABLE `bot_heal_rotation_members` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_heal_rotation_members` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_heal_rotation_targets` +-- + +DROP TABLE IF EXISTS `bot_heal_rotation_targets`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_heal_rotation_targets` ( + `target_index` int(11) unsigned NOT NULL AUTO_INCREMENT, + `heal_rotation_index` int(11) unsigned NOT NULL DEFAULT '0', + `target_name` varchar(64) NOT NULL DEFAULT '', + PRIMARY KEY (`target_index`), + KEY `FK_bot_heal_rotation_targets` (`heal_rotation_index`), + CONSTRAINT `FK_bot_heal_rotation_targets` FOREIGN KEY (`heal_rotation_index`) REFERENCES `bot_heal_rotations` (`heal_rotation_index`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_heal_rotation_targets` +-- + +LOCK TABLES `bot_heal_rotation_targets` WRITE; +/*!40000 ALTER TABLE `bot_heal_rotation_targets` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_heal_rotation_targets` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_heal_rotations` +-- + +DROP TABLE IF EXISTS `bot_heal_rotations`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_heal_rotations` ( + `heal_rotation_index` int(11) unsigned NOT NULL AUTO_INCREMENT, + `bot_id` int(11) unsigned NOT NULL DEFAULT '0', + `interval` int(11) unsigned NOT NULL DEFAULT '0', + `fast_heals` int(3) unsigned NOT NULL DEFAULT '0', + `adaptive_targeting` int(3) unsigned NOT NULL DEFAULT '0', + `casting_override` int(3) unsigned NOT NULL DEFAULT '0', + `safe_hp_base` float unsigned NOT NULL DEFAULT '0', + `safe_hp_cloth` float unsigned NOT NULL DEFAULT '0', + `safe_hp_leather` float unsigned NOT NULL DEFAULT '0', + `safe_hp_chain` float unsigned NOT NULL DEFAULT '0', + `safe_hp_plate` float unsigned NOT NULL DEFAULT '0', + `critical_hp_base` float unsigned NOT NULL DEFAULT '0', + `critical_hp_cloth` float unsigned NOT NULL DEFAULT '0', + `critical_hp_leather` float unsigned NOT NULL DEFAULT '0', + `critical_hp_chain` float unsigned NOT NULL DEFAULT '0', + `critical_hp_plate` float unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`heal_rotation_index`), + KEY `FK_bot_heal_rotations` (`bot_id`), + CONSTRAINT `FK_bot_heal_rotations` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_heal_rotations` +-- + +LOCK TABLES `bot_heal_rotations` WRITE; +/*!40000 ALTER TABLE `bot_heal_rotations` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_heal_rotations` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_inspect_messages` +-- + +DROP TABLE IF EXISTS `bot_inspect_messages`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_inspect_messages` ( + `bot_id` int(11) unsigned NOT NULL, + `inspect_message` varchar(256) NOT NULL DEFAULT '', + PRIMARY KEY (`bot_id`), + KEY `bot_id` (`bot_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_inspect_messages` +-- + +LOCK TABLES `bot_inspect_messages` WRITE; +/*!40000 ALTER TABLE `bot_inspect_messages` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_inspect_messages` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_inventories` +-- + +DROP TABLE IF EXISTS `bot_inventories`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_inventories` ( + `inventories_index` int(10) unsigned NOT NULL AUTO_INCREMENT, + `bot_id` int(11) unsigned NOT NULL DEFAULT '0', + `slot_id` mediumint(7) unsigned NOT NULL DEFAULT '0', + `item_id` int(11) unsigned DEFAULT '0', + `inst_charges` smallint(3) unsigned DEFAULT '0', + `inst_color` int(11) unsigned NOT NULL DEFAULT '0', + `inst_no_drop` tinyint(1) unsigned NOT NULL DEFAULT '0', + `inst_custom_data` text, + `ornament_icon` int(11) unsigned NOT NULL DEFAULT '0', + `ornament_id_file` int(11) unsigned NOT NULL DEFAULT '0', + `ornament_hero_model` int(11) NOT NULL DEFAULT '0', + `augment_1` mediumint(7) unsigned NOT NULL DEFAULT '0', + `augment_2` mediumint(7) unsigned NOT NULL DEFAULT '0', + `augment_3` mediumint(7) unsigned NOT NULL DEFAULT '0', + `augment_4` mediumint(7) unsigned NOT NULL DEFAULT '0', + `augment_5` mediumint(7) unsigned NOT NULL DEFAULT '0', + `augment_6` mediumint(7) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`inventories_index`), + KEY `FK_bot_inventories_1` (`bot_id`), + CONSTRAINT `FK_bot_inventories_1` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_inventories` +-- + +LOCK TABLES `bot_inventories` WRITE; +/*!40000 ALTER TABLE `bot_inventories` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_inventories` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_owner_options` +-- + +DROP TABLE IF EXISTS `bot_owner_options`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_owner_options` ( + `owner_id` int(11) unsigned NOT NULL, + `option_type` smallint(3) unsigned NOT NULL, + `option_value` smallint(3) unsigned DEFAULT '0', + PRIMARY KEY (`owner_id`,`option_type`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_owner_options` +-- + +LOCK TABLES `bot_owner_options` WRITE; +/*!40000 ALTER TABLE `bot_owner_options` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_owner_options` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_pet_buffs` +-- + +DROP TABLE IF EXISTS `bot_pet_buffs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_pet_buffs` ( + `pet_buffs_index` int(10) unsigned NOT NULL AUTO_INCREMENT, + `pets_index` int(10) unsigned NOT NULL DEFAULT '0', + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `caster_level` int(10) unsigned NOT NULL DEFAULT '0', + `duration` int(11) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`pet_buffs_index`), + KEY `FK_bot_pet_buffs_1` (`pets_index`), + CONSTRAINT `FK_bot_pet_buffs_1` FOREIGN KEY (`pets_index`) REFERENCES `bot_pets` (`pets_index`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_pet_buffs` +-- + +LOCK TABLES `bot_pet_buffs` WRITE; +/*!40000 ALTER TABLE `bot_pet_buffs` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_pet_buffs` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_pet_inventories` +-- + +DROP TABLE IF EXISTS `bot_pet_inventories`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_pet_inventories` ( + `pet_inventories_index` int(10) unsigned NOT NULL AUTO_INCREMENT, + `pets_index` int(10) unsigned NOT NULL DEFAULT '0', + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`pet_inventories_index`), + KEY `FK_bot_pet_inventories_1` (`pets_index`), + CONSTRAINT `FK_bot_pet_inventories_1` FOREIGN KEY (`pets_index`) REFERENCES `bot_pets` (`pets_index`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_pet_inventories` +-- + +LOCK TABLES `bot_pet_inventories` WRITE; +/*!40000 ALTER TABLE `bot_pet_inventories` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_pet_inventories` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_pets` +-- + +DROP TABLE IF EXISTS `bot_pets`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_pets` ( + `pets_index` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `bot_id` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(64) DEFAULT NULL, + `mana` int(11) NOT NULL DEFAULT '0', + `hp` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`pets_index`), + UNIQUE KEY `U_bot_pets_1` (`bot_id`), + KEY `FK_bot_pets_1` (`bot_id`), + CONSTRAINT `FK_bot_pets_1` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_pets` +-- + +LOCK TABLES `bot_pets` WRITE; +/*!40000 ALTER TABLE `bot_pets` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_pets` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_spell_casting_chances` +-- + +DROP TABLE IF EXISTS `bot_spell_casting_chances`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_spell_casting_chances` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `spell_type_index` tinyint(3) unsigned NOT NULL DEFAULT '0', + `class_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + `stance_index` tinyint(3) unsigned NOT NULL DEFAULT '0', + `nHSND_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pH_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pS_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pHS_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pN_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pHN_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pSN_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pHSN_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pD_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pHD_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pSD_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pHSD_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pND_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pHND_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pSND_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `pHSND_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `spelltype_class_stance` (`spell_type_index`,`class_id`,`stance_index`) +) ENGINE=InnoDB AUTO_INCREMENT=2466 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_spell_casting_chances` +-- + +LOCK TABLES `bot_spell_casting_chances` WRITE; +/*!40000 ALTER TABLE `bot_spell_casting_chances` DISABLE KEYS */; +INSERT INTO `bot_spell_casting_chances` VALUES (1,255,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(3,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(4,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(5,0,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(6,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(7,0,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(8,0,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(9,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(10,0,2,1,25,15,25,15,0,0,0,0,0,0,0,0,0,0,0,0),(11,0,2,2,15,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0),(12,0,2,3,25,15,25,15,0,0,0,0,0,0,0,0,0,0,0,0),(13,0,2,4,50,15,50,15,0,0,0,0,0,0,0,0,0,0,0,0),(14,0,2,6,50,25,50,25,0,0,0,0,0,0,0,0,0,0,0,0),(15,0,2,8,50,25,50,25,0,0,0,0,0,0,0,0,0,0,0,0),(16,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(17,0,3,1,25,15,25,15,0,0,0,0,0,0,0,0,0,0,0,0),(18,0,3,2,15,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0),(19,0,3,3,25,15,25,15,0,0,0,0,0,0,0,0,0,0,0,0),(20,0,3,4,50,15,50,15,0,0,0,0,0,0,0,0,0,0,0,0),(21,0,3,6,50,25,50,25,0,0,0,0,0,0,0,0,0,0,0,0),(22,0,3,8,50,25,50,25,0,0,0,0,0,0,0,0,0,0,0,0),(23,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(24,0,4,1,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(25,0,4,2,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0),(26,0,4,3,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(27,0,4,4,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(28,0,4,6,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(29,0,4,8,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(30,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(31,0,5,1,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(32,0,5,2,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0),(33,0,5,3,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(34,0,5,4,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(35,0,5,6,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(36,0,5,8,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(37,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(38,0,6,1,25,15,25,15,0,0,0,0,0,0,0,0,0,0,0,0),(39,0,6,2,15,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0),(40,0,6,3,25,15,25,15,0,0,0,0,0,0,0,0,0,0,0,0),(41,0,6,4,50,15,50,15,0,0,0,0,0,0,0,0,0,0,0,0),(42,0,6,6,50,25,50,25,0,0,0,0,0,0,0,0,0,0,0,0),(43,0,6,8,50,25,50,25,0,0,0,0,0,0,0,0,0,0,0,0),(44,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(45,0,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(46,0,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(47,0,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(48,0,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(49,0,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(50,0,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(51,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(52,0,8,1,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(53,0,8,2,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(54,0,8,3,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(55,0,8,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(56,0,8,6,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(57,0,8,8,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(58,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(59,0,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(60,0,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(61,0,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(62,0,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(63,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(64,0,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(65,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(66,0,10,1,15,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0),(67,0,10,2,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(68,0,10,3,15,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0),(69,0,10,4,25,15,15,5,0,0,0,0,0,0,0,0,0,0,0,0),(70,0,10,6,50,25,25,15,0,0,0,0,0,0,0,0,0,0,0,0),(71,0,10,8,50,25,25,15,0,0,0,0,0,0,0,0,0,0,0,0),(72,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(73,0,11,1,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(74,0,11,2,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0),(75,0,11,3,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(76,0,11,4,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(77,0,11,6,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(78,0,11,8,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(79,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(80,0,12,1,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(81,0,12,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(82,0,12,3,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(83,0,12,4,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(84,0,12,6,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(85,0,12,8,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(86,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(87,0,13,1,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(88,0,13,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(89,0,13,3,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(90,0,13,4,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(91,0,13,6,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(92,0,13,8,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(93,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(94,0,14,1,25,25,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(95,0,14,2,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(96,0,14,3,25,25,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(97,0,14,4,50,50,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(98,0,14,6,50,50,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(99,0,14,8,50,50,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(100,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(101,0,15,1,15,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0),(102,0,15,2,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(103,0,15,3,15,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0),(104,0,15,4,25,15,15,5,0,0,0,0,0,0,0,0,0,0,0,0),(105,0,15,6,50,25,25,15,0,0,0,0,0,0,0,0,0,0,0,0),(106,0,15,8,50,25,25,15,0,0,0,0,0,0,0,0,0,0,0,0),(107,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(108,0,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(109,0,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(110,0,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(111,0,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(112,0,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(113,0,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(114,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(115,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(116,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(117,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(118,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(119,1,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(120,1,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(121,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(122,1,2,1,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(123,1,2,2,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(124,1,2,3,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(125,1,2,4,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(126,1,2,6,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(127,1,2,8,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(128,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(129,1,3,1,25,100,25,100,0,0,0,0,0,0,0,0,0,0,0,0),(130,1,3,2,15,75,15,75,0,0,0,0,0,0,0,0,0,0,0,0),(131,1,3,3,25,100,25,100,0,0,0,0,0,0,0,0,0,0,0,0),(132,1,3,4,15,75,15,75,0,0,0,0,0,0,0,0,0,0,0,0),(133,1,3,6,0,50,0,50,0,0,0,0,0,0,0,0,0,0,0,0),(134,1,3,8,0,50,0,50,0,0,0,0,0,0,0,0,0,0,0,0),(135,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(136,1,4,1,25,100,25,100,0,0,0,0,0,0,0,0,0,0,0,0),(137,1,4,2,15,75,15,75,0,0,0,0,0,0,0,0,0,0,0,0),(138,1,4,3,25,100,25,100,0,0,0,0,0,0,0,0,0,0,0,0),(139,1,4,4,15,75,15,75,0,0,0,0,0,0,0,0,0,0,0,0),(140,1,4,6,0,50,0,50,0,0,0,0,0,0,0,0,0,0,0,0),(141,1,4,8,0,50,0,50,0,0,0,0,0,0,0,0,0,0,0,0),(142,1,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(143,1,5,1,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(144,1,5,2,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(145,1,5,3,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(146,1,5,4,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(147,1,5,6,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(148,1,5,8,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(149,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(150,1,6,1,25,100,25,100,0,0,0,0,0,0,0,0,0,0,0,0),(151,1,6,2,15,100,15,100,0,0,0,0,0,0,0,0,0,0,0,0),(152,1,6,3,25,100,25,100,0,0,0,0,0,0,0,0,0,0,0,0),(153,1,6,4,25,75,25,75,0,0,0,0,0,0,0,0,0,0,0,0),(154,1,6,6,10,50,10,50,0,0,0,0,0,0,0,0,0,0,0,0),(155,1,6,8,10,50,10,50,0,0,0,0,0,0,0,0,0,0,0,0),(156,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(157,1,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(158,1,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(159,1,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(160,1,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(161,1,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(162,1,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(163,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(164,1,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(165,1,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(166,1,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(167,1,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(168,1,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(169,1,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(170,1,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(171,1,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(172,1,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(173,1,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(174,1,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(175,1,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(176,1,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(177,1,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(178,1,10,1,25,100,25,100,0,0,0,0,0,0,0,0,0,0,0,0),(179,1,10,2,15,100,15,100,0,0,0,0,0,0,0,0,0,0,0,0),(180,1,10,3,25,100,25,100,0,0,0,0,0,0,0,0,0,0,0,0),(181,1,10,4,25,75,25,75,0,0,0,0,0,0,0,0,0,0,0,0),(182,1,10,6,10,50,10,50,0,0,0,0,0,0,0,0,0,0,0,0),(183,1,10,8,10,50,10,50,0,0,0,0,0,0,0,0,0,0,0,0),(184,1,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(185,1,11,1,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(186,1,11,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(187,1,11,3,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(188,1,11,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(189,1,11,6,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(190,1,11,8,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(191,1,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(192,1,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(193,1,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(194,1,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(195,1,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(196,1,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(197,1,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(198,1,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(199,1,13,1,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(200,1,13,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(201,1,13,3,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(202,1,13,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(203,1,13,6,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(204,1,13,8,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(205,1,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(206,1,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(207,1,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(208,1,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(209,1,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(210,1,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(211,1,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(212,1,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(213,1,15,1,25,100,25,100,0,0,0,0,0,0,0,0,0,0,0,0),(214,1,15,2,15,75,15,75,0,0,0,0,0,0,0,0,0,0,0,0),(215,1,15,3,25,100,25,100,0,0,0,0,0,0,0,0,0,0,0,0),(216,1,15,4,15,75,15,75,0,0,0,0,0,0,0,0,0,0,0,0),(217,1,15,6,0,50,0,50,0,0,0,0,0,0,0,0,0,0,0,0),(218,1,15,8,0,50,0,50,0,0,0,0,0,0,0,0,0,0,0,0),(219,1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(220,1,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(221,1,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(222,1,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(223,1,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(224,1,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(225,1,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(226,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(227,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(228,2,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(229,2,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(230,2,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(231,2,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(232,2,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(233,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(234,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(235,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(236,2,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(237,2,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(238,2,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(239,2,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(240,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(241,2,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(242,2,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(243,2,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(244,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(245,2,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(246,2,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(247,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(248,2,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(249,2,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(250,2,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(251,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(252,2,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(253,2,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(254,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(255,2,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(256,2,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(257,2,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(258,2,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(259,2,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(260,2,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(261,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(262,2,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(263,2,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(264,2,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(265,2,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(266,2,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(267,2,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(268,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(269,2,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(270,2,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(271,2,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(272,2,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(273,2,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(274,2,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(275,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(276,2,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(277,2,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(278,2,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(279,2,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(280,2,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(281,2,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(282,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(283,2,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(284,2,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(285,2,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(286,2,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(287,2,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(288,2,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(289,2,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(290,2,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(291,2,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(292,2,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(293,2,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(294,2,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(295,2,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(296,2,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(297,2,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(298,2,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(299,2,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(300,2,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(301,2,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(302,2,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(303,2,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(304,2,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(305,2,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(306,2,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(307,2,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(308,2,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(309,2,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(310,2,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(311,2,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(312,2,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(313,2,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(314,2,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(315,2,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(316,2,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(317,2,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(318,2,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(319,2,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(320,2,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(321,2,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(322,2,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(323,2,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(324,2,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(325,2,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(326,2,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(327,2,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(328,2,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(329,2,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(330,2,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(331,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(332,2,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(333,2,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(334,2,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(335,2,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(336,2,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(337,2,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(338,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(339,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(340,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(341,3,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(342,3,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(343,3,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(344,3,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(345,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(346,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(347,3,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(348,3,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(349,3,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(350,3,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(351,3,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(352,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(353,3,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(354,3,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(355,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(356,3,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(357,3,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(358,3,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(359,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(360,3,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(361,3,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(362,3,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(363,3,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(364,3,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(365,3,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(366,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(367,3,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(368,3,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(369,3,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(370,3,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(371,3,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(372,3,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(373,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(374,3,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(375,3,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(376,3,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(377,3,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(378,3,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(379,3,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(380,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(381,3,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(382,3,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(383,3,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(384,3,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(385,3,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(386,3,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(387,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(388,3,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(389,3,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(390,3,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(391,3,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(392,3,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(393,3,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(394,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(395,3,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(396,3,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(397,3,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(398,3,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(399,3,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(400,3,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(401,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(402,3,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(403,3,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(404,3,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(405,3,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(406,3,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(407,3,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(408,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(409,3,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(410,3,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(411,3,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(412,3,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(413,3,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(414,3,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(415,3,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(416,3,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(417,3,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(418,3,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(419,3,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(420,3,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(421,3,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(422,3,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(423,3,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(424,3,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(425,3,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(426,3,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(427,3,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(428,3,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(429,3,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(430,3,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(431,3,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(432,3,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(433,3,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(434,3,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(435,3,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(436,3,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(437,3,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(438,3,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(439,3,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(440,3,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(441,3,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(442,3,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(443,3,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(444,3,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(445,3,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(446,3,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(447,3,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(448,3,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(449,3,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(450,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(451,4,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(452,4,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(453,4,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(454,4,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(455,4,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(456,4,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(457,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(458,4,2,1,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(459,4,2,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(460,4,2,3,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(461,4,2,4,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(462,4,2,6,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(463,4,2,8,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(464,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(465,4,3,1,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(466,4,3,2,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(467,4,3,3,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(468,4,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(469,4,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(470,4,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(471,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(472,4,4,1,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(473,4,4,2,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(474,4,4,3,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(475,4,4,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(476,4,4,6,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(477,4,4,8,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(478,4,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(479,4,5,1,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(480,4,5,2,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(481,4,5,3,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(482,4,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(483,4,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(484,4,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(485,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(486,4,6,1,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(487,4,6,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(488,4,6,3,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(489,4,6,4,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(490,4,6,6,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(491,4,6,8,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(492,4,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(493,4,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(494,4,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(495,4,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(496,4,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(497,4,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(498,4,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(499,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(500,4,8,1,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(501,4,8,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(502,4,8,3,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(503,4,8,4,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(504,4,8,6,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(505,4,8,8,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(506,4,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(507,4,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(508,4,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(509,4,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(510,4,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(511,4,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(512,4,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(513,4,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(514,4,10,1,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(515,4,10,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(516,4,10,3,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(517,4,10,4,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(518,4,10,6,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(519,4,10,8,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(520,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(521,4,11,1,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(522,4,11,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(523,4,11,3,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(524,4,11,4,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(525,4,11,6,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(526,4,11,8,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(527,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(528,4,12,1,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(529,4,12,2,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(530,4,12,3,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(531,4,12,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(532,4,12,6,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(533,4,12,8,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(534,4,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(535,4,13,1,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(536,4,13,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(537,4,13,3,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(538,4,13,4,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(539,4,13,6,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(540,4,13,8,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(541,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(542,4,14,1,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(543,4,14,2,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(544,4,14,3,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(545,4,14,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(546,4,14,6,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(547,4,14,8,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(548,4,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(549,4,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(550,4,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(551,4,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(552,4,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(553,4,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(554,4,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(555,4,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(556,4,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(557,4,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(558,4,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(559,4,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(560,4,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(561,4,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(562,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(563,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(564,5,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(565,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(566,5,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(567,5,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(568,5,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(569,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(570,5,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(571,5,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(572,5,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(573,5,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(574,5,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(575,5,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(576,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(577,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(578,5,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(579,5,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(580,5,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(581,5,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(582,5,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(583,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(584,5,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(585,5,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(586,5,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(587,5,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(588,5,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(589,5,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(590,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(591,5,5,1,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(592,5,5,2,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(593,5,5,3,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(594,5,5,4,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(595,5,5,6,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(596,5,5,8,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(597,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(598,5,6,1,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(599,5,6,2,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(600,5,6,3,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(601,5,6,4,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(602,5,6,6,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(603,5,6,8,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(604,5,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(605,5,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(606,5,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(607,5,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(608,5,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(609,5,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(610,5,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(611,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(612,5,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(613,5,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(614,5,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(615,5,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(616,5,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(617,5,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(618,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(619,5,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(620,5,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(621,5,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(622,5,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(623,5,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(624,5,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(625,5,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(626,5,10,1,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(627,5,10,2,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(628,5,10,3,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(629,5,10,4,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(630,5,10,6,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(631,5,10,8,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(632,5,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(633,5,11,1,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(634,5,11,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(635,5,11,3,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(636,5,11,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(637,5,11,6,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(638,5,11,8,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(639,5,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(640,5,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(641,5,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(642,5,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(643,5,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(644,5,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(645,5,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(646,5,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(647,5,13,1,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(648,5,13,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(649,5,13,3,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(650,5,13,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(651,5,13,6,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(652,5,13,8,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(653,5,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(654,5,14,1,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(655,5,14,2,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(656,5,14,3,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(657,5,14,4,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(658,5,14,6,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(659,5,14,8,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(660,5,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(661,5,15,1,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(662,5,15,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(663,5,15,3,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(664,5,15,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(665,5,15,6,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(666,5,15,8,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(667,5,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(668,5,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(669,5,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(670,5,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(671,5,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(672,5,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(673,5,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(674,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(675,6,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(676,6,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(677,6,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `bot_spell_casting_chances` VALUES (678,6,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(679,6,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(680,6,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(681,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(682,6,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(683,6,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(684,6,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(685,6,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(686,6,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(687,6,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(688,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(689,6,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(690,6,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(691,6,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(692,6,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(693,6,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(694,6,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(695,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(696,6,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(697,6,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(698,6,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(699,6,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(700,6,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(701,6,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(702,6,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(703,6,5,1,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(704,6,5,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(705,6,5,3,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(706,6,5,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(707,6,5,6,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(708,6,5,8,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(709,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(710,6,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(711,6,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(712,6,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(713,6,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(714,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(715,6,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(716,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(717,6,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(718,6,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(719,6,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(720,6,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(721,6,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(722,6,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(723,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(724,6,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(725,6,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(726,6,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(727,6,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(728,6,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(729,6,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(730,6,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(731,6,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(732,6,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(733,6,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(734,6,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(735,6,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(736,6,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(737,6,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(738,6,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(739,6,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(740,6,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(741,6,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(742,6,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(743,6,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(744,6,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(745,6,11,1,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(746,6,11,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(747,6,11,3,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(748,6,11,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(749,6,11,6,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(750,6,11,8,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(751,6,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(752,6,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(753,6,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(754,6,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(755,6,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(756,6,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(757,6,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(758,6,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(759,6,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(760,6,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(761,6,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(762,6,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(763,6,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(764,6,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(765,6,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(766,6,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(767,6,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(768,6,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(769,6,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(770,6,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(771,6,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(772,6,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(773,6,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(774,6,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(775,6,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(776,6,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(777,6,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(778,6,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(779,6,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(780,6,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(781,6,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(782,6,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(783,6,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(784,6,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(785,6,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(786,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(787,7,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(788,7,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(789,7,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(790,7,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(791,7,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(792,7,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(793,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(794,7,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(795,7,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(796,7,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(797,7,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(798,7,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(799,7,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(800,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(801,7,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(802,7,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(803,7,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(804,7,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(805,7,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(806,7,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(807,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(808,7,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(809,7,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(810,7,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(811,7,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(812,7,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(813,7,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(814,7,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(815,7,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(816,7,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(817,7,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(818,7,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(819,7,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(820,7,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(821,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(822,7,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(823,7,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(824,7,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(825,7,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(826,7,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(827,7,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(828,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(829,7,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(830,7,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(831,7,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(832,7,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(833,7,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(834,7,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(835,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(836,7,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(837,7,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(838,7,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(839,7,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(840,7,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(841,7,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(842,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(843,7,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(844,7,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(845,7,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(846,7,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(847,7,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(848,7,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(849,7,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(850,7,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(851,7,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(852,7,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(853,7,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(854,7,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(855,7,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(856,7,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(857,7,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(858,7,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(859,7,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(860,7,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(861,7,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(862,7,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(863,7,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(864,7,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(865,7,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(866,7,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(867,7,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(868,7,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(869,7,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(870,7,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(871,7,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(872,7,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(873,7,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(874,7,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(875,7,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(876,7,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(877,7,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(878,7,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(879,7,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(880,7,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(881,7,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(882,7,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(883,7,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(884,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(885,7,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(886,7,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(887,7,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(888,7,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(889,7,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(890,7,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(891,7,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(892,7,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(893,7,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(894,7,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(895,7,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(896,7,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(897,7,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(898,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(899,8,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(900,8,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(901,8,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(902,8,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(903,8,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(904,8,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(905,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(906,8,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(907,8,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(908,8,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(909,8,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(910,8,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(911,8,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(912,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(913,8,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(914,8,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(915,8,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(916,8,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(917,8,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(918,8,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(919,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(920,8,4,1,15,15,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(921,8,4,2,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(922,8,4,3,15,15,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(923,8,4,4,50,50,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(924,8,4,6,50,50,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(925,8,4,8,50,50,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(926,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(927,8,5,1,15,15,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(928,8,5,2,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(929,8,5,3,15,15,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(930,8,5,4,50,50,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(931,8,5,6,50,50,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(932,8,5,8,50,50,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(933,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(934,8,6,1,50,15,50,15,0,0,0,0,0,0,0,0,0,0,0,0),(935,8,6,2,25,10,25,10,0,0,0,0,0,0,0,0,0,0,0,0),(936,8,6,3,50,15,50,15,0,0,0,0,0,0,0,0,0,0,0,0),(937,8,6,4,50,25,50,25,0,0,0,0,0,0,0,0,0,0,0,0),(938,8,6,6,50,25,50,25,0,0,0,0,0,0,0,0,0,0,0,0),(939,8,6,8,50,25,50,25,0,0,0,0,0,0,0,0,0,0,0,0),(940,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(941,8,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(942,8,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(943,8,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(944,8,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(945,8,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(946,8,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(947,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(948,8,8,1,50,50,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(949,8,8,2,25,25,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(950,8,8,3,50,50,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(951,8,8,4,100,100,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(952,8,8,6,100,100,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(953,8,8,8,100,100,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(954,8,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(955,8,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(956,8,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(957,8,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(958,8,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(959,8,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(960,8,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(961,8,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(962,8,10,1,25,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0),(963,8,10,2,15,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0),(964,8,10,3,25,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0),(965,8,10,4,50,25,50,15,0,0,0,0,0,0,0,0,0,0,0,0),(966,8,10,6,50,25,50,15,0,0,0,0,0,0,0,0,0,0,0,0),(967,8,10,8,50,25,50,15,0,0,0,0,0,0,0,0,0,0,0,0),(968,8,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(969,8,11,1,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(970,8,11,2,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(971,8,11,3,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(972,8,11,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(973,8,11,6,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(974,8,11,8,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(975,8,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(976,8,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(977,8,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(978,8,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(979,8,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(980,8,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(981,8,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(982,8,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(983,8,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(984,8,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(985,8,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(986,8,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(987,8,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(988,8,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(989,8,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(990,8,14,1,50,50,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(991,8,14,2,25,25,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(992,8,14,3,50,50,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(993,8,14,4,15,15,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(994,8,14,6,15,15,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(995,8,14,8,15,15,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(996,8,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(997,8,15,1,15,15,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(998,8,15,2,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(999,8,15,3,15,15,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(1000,8,15,4,50,50,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1001,8,15,6,50,50,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1002,8,15,8,50,50,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1003,8,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1004,8,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1005,8,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1006,8,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1007,8,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1008,8,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1009,8,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1010,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1011,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1012,9,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1013,9,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1014,9,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1015,9,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1016,9,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1017,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1018,9,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1019,9,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1020,9,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1021,9,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1022,9,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1023,9,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1024,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1025,9,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1026,9,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1027,9,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1028,9,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1029,9,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1030,9,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1031,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1032,9,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1033,9,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1034,9,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1035,9,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1036,9,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1037,9,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1038,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1039,9,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1040,9,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1041,9,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1042,9,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1043,9,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1044,9,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1045,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1046,9,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1047,9,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1048,9,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1049,9,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1050,9,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1051,9,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1052,9,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1053,9,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1054,9,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1055,9,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1056,9,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1057,9,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1058,9,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1059,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1060,9,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1061,9,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1062,9,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1063,9,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1064,9,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1065,9,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1066,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1067,9,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1068,9,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1069,9,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1070,9,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1071,9,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1072,9,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1073,9,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1074,9,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1075,9,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1076,9,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1077,9,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1078,9,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1079,9,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1080,9,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1081,9,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1082,9,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1083,9,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1084,9,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1085,9,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1086,9,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1087,9,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1088,9,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1089,9,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1090,9,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1091,9,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1092,9,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1093,9,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1094,9,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1095,9,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1096,9,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1097,9,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1098,9,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1099,9,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1100,9,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1101,9,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1102,9,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1103,9,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1104,9,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1105,9,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1106,9,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1107,9,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1108,9,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1109,9,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1110,9,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1111,9,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1112,9,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1113,9,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1114,9,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1115,9,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1116,9,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1117,9,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1118,9,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1119,9,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1120,9,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1121,9,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1122,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1123,10,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1124,10,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1125,10,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1126,10,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1127,10,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1128,10,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1129,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1130,10,2,1,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1131,10,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1132,10,2,3,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1133,10,2,4,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1134,10,2,6,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1135,10,2,8,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1136,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1137,10,3,1,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1138,10,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1139,10,3,3,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1140,10,3,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1141,10,3,6,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1142,10,3,8,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1143,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1144,10,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1145,10,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1146,10,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1147,10,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1148,10,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1149,10,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1150,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1151,10,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1152,10,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1153,10,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1154,10,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1155,10,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1156,10,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1157,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1158,10,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1159,10,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1160,10,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1161,10,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1162,10,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1163,10,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1164,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1165,10,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1166,10,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1167,10,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1168,10,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1169,10,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1170,10,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1171,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1172,10,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1173,10,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1174,10,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1175,10,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1176,10,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1177,10,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1178,10,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1179,10,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1180,10,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1181,10,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1182,10,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1183,10,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1184,10,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1185,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1186,10,10,1,50,75,50,75,0,0,0,0,0,0,0,0,0,0,0,0),(1187,10,10,2,25,50,25,50,0,0,0,0,0,0,0,0,0,0,0,0),(1188,10,10,3,50,75,50,75,0,0,0,0,0,0,0,0,0,0,0,0),(1189,10,10,4,75,100,75,100,0,0,0,0,0,0,0,0,0,0,0,0),(1190,10,10,6,75,100,75,100,0,0,0,0,0,0,0,0,0,0,0,0),(1191,10,10,8,75,100,75,100,0,0,0,0,0,0,0,0,0,0,0,0),(1192,10,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1193,10,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1194,10,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1195,10,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1196,10,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1197,10,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1198,10,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1199,10,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1200,10,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1201,10,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1202,10,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1203,10,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1204,10,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1205,10,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1206,10,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1207,10,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1208,10,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1209,10,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1210,10,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1211,10,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1212,10,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1213,10,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1214,10,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1215,10,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1216,10,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1217,10,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1218,10,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1219,10,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1220,10,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1221,10,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1222,10,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1223,10,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1224,10,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1225,10,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1226,10,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1227,10,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1228,10,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1229,10,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1230,10,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1231,10,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1232,10,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1233,10,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1234,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1235,11,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1236,11,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1237,11,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1238,11,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1239,11,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1240,11,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1241,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1242,11,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1243,11,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1244,11,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1245,11,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1246,11,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1247,11,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1248,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1249,11,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1250,11,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1251,11,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1252,11,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1253,11,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1254,11,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1255,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1256,11,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1257,11,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1258,11,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1259,11,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1260,11,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1261,11,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1262,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1263,11,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1264,11,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1265,11,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1266,11,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1267,11,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1268,11,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1269,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1270,11,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1271,11,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1272,11,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1273,11,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1274,11,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1275,11,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1276,11,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1277,11,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1278,11,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1279,11,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1280,11,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1281,11,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1282,11,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1283,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1284,11,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1285,11,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1286,11,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1287,11,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1288,11,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1289,11,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1290,11,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1291,11,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1292,11,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1293,11,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1294,11,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1295,11,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1296,11,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1297,11,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1298,11,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1299,11,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1300,11,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1301,11,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1302,11,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1303,11,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1304,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1305,11,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1306,11,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1307,11,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1308,11,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1309,11,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1310,11,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1311,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1312,11,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1313,11,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1314,11,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1315,11,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1316,11,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1317,11,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1318,11,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1319,11,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1320,11,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1321,11,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1322,11,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1323,11,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1324,11,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1325,11,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1326,11,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1327,11,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1328,11,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1329,11,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1330,11,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1331,11,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1332,11,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1333,11,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1334,11,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1335,11,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1336,11,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1337,11,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1338,11,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1339,11,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1340,11,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1341,11,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1342,11,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1343,11,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1344,11,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1345,11,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1346,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1347,12,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1348,12,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1349,12,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1350,12,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1351,12,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1352,12,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1353,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1354,12,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `bot_spell_casting_chances` VALUES (1355,12,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1356,12,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1357,12,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1358,12,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1359,12,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1360,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1361,12,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1362,12,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1363,12,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1364,12,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1365,12,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1366,12,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1367,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1368,12,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1369,12,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1370,12,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1371,12,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1372,12,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1373,12,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1374,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1375,12,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1376,12,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1377,12,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1378,12,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1379,12,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1380,12,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1381,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1382,12,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1383,12,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1384,12,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1385,12,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1386,12,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1387,12,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1388,12,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1389,12,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1390,12,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1391,12,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1392,12,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1393,12,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1394,12,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1395,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1396,12,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1397,12,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1398,12,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1399,12,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1400,12,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1401,12,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1402,12,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1403,12,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1404,12,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1405,12,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1406,12,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1407,12,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1408,12,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1409,12,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1410,12,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1411,12,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1412,12,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1413,12,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1414,12,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1415,12,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1416,12,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1417,12,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1418,12,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1419,12,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1420,12,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1421,12,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1422,12,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1423,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1424,12,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1425,12,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1426,12,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1427,12,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1428,12,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1429,12,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1430,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1431,12,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1432,12,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1433,12,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1434,12,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1435,12,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1436,12,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1437,12,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1438,12,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1439,12,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1440,12,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1441,12,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1442,12,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1443,12,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1444,12,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1445,12,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1446,12,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1447,12,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1448,12,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1449,12,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1450,12,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1451,12,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1452,12,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1453,12,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1454,12,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1455,12,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1456,12,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1457,12,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1458,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1459,13,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1460,13,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1461,13,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1462,13,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1463,13,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1464,13,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1465,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1466,13,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1467,13,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1468,13,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1469,13,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1470,13,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1471,13,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1472,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1473,13,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1474,13,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1475,13,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1476,13,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1477,13,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1478,13,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1479,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1480,13,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1481,13,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1482,13,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1483,13,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1484,13,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1485,13,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1486,13,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1487,13,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1488,13,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1489,13,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1490,13,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1491,13,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1492,13,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1493,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1494,13,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1495,13,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1496,13,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1497,13,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1498,13,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1499,13,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1500,13,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1501,13,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1502,13,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1503,13,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1504,13,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1505,13,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1506,13,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1507,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1508,13,8,1,25,25,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1509,13,8,2,15,15,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1510,13,8,3,25,25,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1511,13,8,4,0,0,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1512,13,8,6,0,0,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1513,13,8,8,0,0,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1514,13,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1515,13,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1516,13,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1517,13,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1518,13,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1519,13,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1520,13,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1521,13,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1522,13,10,1,50,50,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1523,13,10,2,25,25,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1524,13,10,3,50,50,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1525,13,10,4,15,15,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1526,13,10,6,15,15,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1527,13,10,8,15,15,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1528,13,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1529,13,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1530,13,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1531,13,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1532,13,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1533,13,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1534,13,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1535,13,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1536,13,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1537,13,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1538,13,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1539,13,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1540,13,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1541,13,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1542,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1543,13,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1544,13,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1545,13,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1546,13,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1547,13,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1548,13,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1549,13,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1550,13,14,1,50,50,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1551,13,14,2,25,25,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1552,13,14,3,50,50,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1553,13,14,4,15,15,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1554,13,14,6,15,15,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1555,13,14,8,15,15,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1556,13,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1557,13,15,1,25,25,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1558,13,15,2,15,15,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1559,13,15,3,25,25,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1560,13,15,4,0,0,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1561,13,15,6,0,0,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1562,13,15,8,0,0,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1563,13,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1564,13,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1565,13,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1566,13,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1567,13,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1568,13,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1569,13,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1570,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1571,14,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1572,14,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1573,14,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1574,14,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1575,14,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1576,14,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1577,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1578,14,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1579,14,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1580,14,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1581,14,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1582,14,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1583,14,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1584,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1585,14,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1586,14,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1587,14,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1588,14,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1589,14,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1590,14,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1591,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1592,14,4,1,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1593,14,4,2,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(1594,14,4,3,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1595,14,4,4,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(1596,14,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1597,14,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1598,14,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1599,14,5,1,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1600,14,5,2,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(1601,14,5,3,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1602,14,5,4,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(1603,14,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1604,14,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1605,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1606,14,6,1,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1607,14,6,2,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1608,14,6,3,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1609,14,6,4,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1610,14,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1611,14,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1612,14,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1613,14,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1614,14,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1615,14,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1616,14,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1617,14,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1618,14,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1619,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1620,14,8,1,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1621,14,8,2,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1622,14,8,3,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1623,14,8,4,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(1624,14,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1625,14,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1626,14,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1627,14,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1628,14,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1629,14,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1630,14,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1631,14,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1632,14,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1633,14,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1634,14,10,1,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1635,14,10,2,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1636,14,10,3,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1637,14,10,4,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1638,14,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1639,14,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1640,14,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1641,14,11,1,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1642,14,11,2,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1643,14,11,3,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1644,14,11,4,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1645,14,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1646,14,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1647,14,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1648,14,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1649,14,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1650,14,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1651,14,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1652,14,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1653,14,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1654,14,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1655,14,13,1,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1656,14,13,2,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1657,14,13,3,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1658,14,13,4,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1659,14,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1660,14,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1661,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1662,14,14,1,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1663,14,14,2,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1664,14,14,3,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0),(1665,14,14,4,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1666,14,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1667,14,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1668,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1669,14,15,1,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1670,14,15,2,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(1671,14,15,3,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0),(1672,14,15,4,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0),(1673,14,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1674,14,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1675,14,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1676,14,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1677,14,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1678,14,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1679,14,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1680,14,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1681,14,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1682,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1683,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1684,15,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1685,15,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1686,15,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1687,15,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1688,15,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1689,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1690,15,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1691,15,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1692,15,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1693,15,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1694,15,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1695,15,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1696,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1697,15,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1698,15,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1699,15,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1700,15,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1701,15,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1702,15,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1703,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1704,15,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1705,15,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1706,15,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1707,15,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1708,15,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1709,15,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1710,15,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1711,15,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1712,15,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1713,15,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1714,15,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1715,15,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1716,15,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1717,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1718,15,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1719,15,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1720,15,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1721,15,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1722,15,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1723,15,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1724,15,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1725,15,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1726,15,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1727,15,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1728,15,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1729,15,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1730,15,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1731,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1732,15,8,1,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(1733,15,8,2,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(1734,15,8,3,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1735,15,8,4,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1736,15,8,6,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1737,15,8,8,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(1738,15,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1739,15,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1740,15,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1741,15,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1742,15,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1743,15,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1744,15,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1745,15,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1746,15,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1747,15,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1748,15,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1749,15,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1750,15,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1751,15,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1752,15,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1753,15,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1754,15,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1755,15,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1756,15,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1757,15,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1758,15,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1759,15,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1760,15,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1761,15,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1762,15,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1763,15,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1764,15,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1765,15,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1766,15,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1767,15,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1768,15,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1769,15,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1770,15,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1771,15,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1772,15,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1773,15,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1774,15,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1775,15,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1776,15,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1777,15,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1778,15,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1779,15,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1780,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1781,15,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1782,15,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1783,15,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1784,15,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1785,15,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1786,15,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1787,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1788,15,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1789,15,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1790,15,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1791,15,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1792,15,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1793,15,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1794,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1795,16,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1796,16,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1797,16,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1798,16,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1799,16,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1800,16,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1801,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1802,16,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1803,16,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1804,16,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1805,16,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1806,16,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1807,16,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1808,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1809,16,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1810,16,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1811,16,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1812,16,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1813,16,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1814,16,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1815,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1816,16,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1817,16,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1818,16,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1819,16,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1820,16,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1821,16,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1822,16,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1823,16,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1824,16,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1825,16,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1826,16,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1827,16,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1828,16,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1829,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1830,16,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1831,16,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1832,16,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1833,16,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1834,16,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1835,16,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1836,16,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1837,16,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1838,16,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1839,16,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1840,16,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1841,16,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1842,16,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1843,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1844,16,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1845,16,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1846,16,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1847,16,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1848,16,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1849,16,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1850,16,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1851,16,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1852,16,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1853,16,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1854,16,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1855,16,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1856,16,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1857,16,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1858,16,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1859,16,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1860,16,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1861,16,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1862,16,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1863,16,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1864,16,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1865,16,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1866,16,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1867,16,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1868,16,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1869,16,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1870,16,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1871,16,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1872,16,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1873,16,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1874,16,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1875,16,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1876,16,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1877,16,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1878,16,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1879,16,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1880,16,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1881,16,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1882,16,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1883,16,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1884,16,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1885,16,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1886,16,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1887,16,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1888,16,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1889,16,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1890,16,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1891,16,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1892,16,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1893,16,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1894,16,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1895,16,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1896,16,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1897,16,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1898,16,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1899,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1900,16,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1901,16,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1902,16,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1903,16,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1904,16,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1905,16,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1906,17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1907,17,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1908,17,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1909,17,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1910,17,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1911,17,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1912,17,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1913,17,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1914,17,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1915,17,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1916,17,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1917,17,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1918,17,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1919,17,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1920,17,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1921,17,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1922,17,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1923,17,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1924,17,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1925,17,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1926,17,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1927,17,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1928,17,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1929,17,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1930,17,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1931,17,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1932,17,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1933,17,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1934,17,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1935,17,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1936,17,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1937,17,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1938,17,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1939,17,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1940,17,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1941,17,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1942,17,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1943,17,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1944,17,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1945,17,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1946,17,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1947,17,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1948,17,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1949,17,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1950,17,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1951,17,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1952,17,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1953,17,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1954,17,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1955,17,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1956,17,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1957,17,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1958,17,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1959,17,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1960,17,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1961,17,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1962,17,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1963,17,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1964,17,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1965,17,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1966,17,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1967,17,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1968,17,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1969,17,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1970,17,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1971,17,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1972,17,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1973,17,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1974,17,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1975,17,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1976,17,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1977,17,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1978,17,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1979,17,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1980,17,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1981,17,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1982,17,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1983,17,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1984,17,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1985,17,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1986,17,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1987,17,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1988,17,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1989,17,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1990,17,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1991,17,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1992,17,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1993,17,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1994,17,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1995,17,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1996,17,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1997,17,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1998,17,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1999,17,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2000,17,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2001,17,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2002,17,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2003,17,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2004,17,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2005,17,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2006,17,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2007,17,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2008,17,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2009,17,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2010,17,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2011,17,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2012,17,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2013,17,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2014,17,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2015,17,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `bot_spell_casting_chances` VALUES (2016,17,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2017,17,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2018,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2019,18,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2020,18,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2021,18,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2022,18,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2023,18,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2024,18,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2025,18,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2026,18,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2027,18,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2028,18,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2029,18,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2030,18,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2031,18,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2032,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2033,18,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2034,18,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2035,18,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2036,18,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2037,18,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2038,18,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2039,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2040,18,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2041,18,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2042,18,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2043,18,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2044,18,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2045,18,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2046,18,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2047,18,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2048,18,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2049,18,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2050,18,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2051,18,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2052,18,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2053,18,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2054,18,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2055,18,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2056,18,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2057,18,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2058,18,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2059,18,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2060,18,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2061,18,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2062,18,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2063,18,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2064,18,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2065,18,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2066,18,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2067,18,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2068,18,8,1,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(2069,18,8,2,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(2070,18,8,3,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(2071,18,8,4,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(2072,18,8,6,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(2073,18,8,8,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(2074,18,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2075,18,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2076,18,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2077,18,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2078,18,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2079,18,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2080,18,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2081,18,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2082,18,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2083,18,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2084,18,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2085,18,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2086,18,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2087,18,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2088,18,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2089,18,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2090,18,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2091,18,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2092,18,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2093,18,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2094,18,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2095,18,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2096,18,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2097,18,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2098,18,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2099,18,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2100,18,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2101,18,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2102,18,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2103,18,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2104,18,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2105,18,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2106,18,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2107,18,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2108,18,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2109,18,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2110,18,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2111,18,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2112,18,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2113,18,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2114,18,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2115,18,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2116,18,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2117,18,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2118,18,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2119,18,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2120,18,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2121,18,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2122,18,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2123,18,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2124,18,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2125,18,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2126,18,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2127,18,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2128,18,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2129,18,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2130,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2131,19,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2132,19,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2133,19,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2134,19,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2135,19,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2136,19,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2137,19,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2138,19,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2139,19,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2140,19,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2141,19,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2142,19,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2143,19,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2144,19,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2145,19,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2146,19,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2147,19,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2148,19,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2149,19,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2150,19,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2151,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2152,19,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2153,19,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2154,19,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2155,19,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2156,19,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2157,19,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2158,19,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2159,19,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2160,19,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2161,19,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2162,19,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2163,19,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2164,19,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2165,19,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2166,19,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2167,19,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2168,19,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2169,19,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2170,19,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2171,19,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2172,19,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2173,19,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2174,19,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2175,19,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2176,19,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2177,19,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2178,19,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2179,19,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2180,19,8,1,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(2181,19,8,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(2182,19,8,3,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(2183,19,8,4,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(2184,19,8,6,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(2185,19,8,8,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(2186,19,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2187,19,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2188,19,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2189,19,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2190,19,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2191,19,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2192,19,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2193,19,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2194,19,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2195,19,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2196,19,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2197,19,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2198,19,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2199,19,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2200,19,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2201,19,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2202,19,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2203,19,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2204,19,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2205,19,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2206,19,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2207,19,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2208,19,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2209,19,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2210,19,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2211,19,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2212,19,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2213,19,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2214,19,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2215,19,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2216,19,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2217,19,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2218,19,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2219,19,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2220,19,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2221,19,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2222,19,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2223,19,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2224,19,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2225,19,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2226,19,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2227,19,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2228,19,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2229,19,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2230,19,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2231,19,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2232,19,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2233,19,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2234,19,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2235,19,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2236,19,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2237,19,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2238,19,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2239,19,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2240,19,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2241,19,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2242,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2243,20,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2244,20,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2245,20,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2246,20,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2247,20,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2248,20,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2249,20,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2250,20,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2251,20,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2252,20,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2253,20,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2254,20,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2255,20,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2256,20,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2257,20,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2258,20,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2259,20,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2260,20,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2261,20,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2262,20,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2263,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2264,20,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2265,20,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2266,20,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2267,20,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2268,20,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2269,20,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2270,20,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2271,20,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2272,20,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2273,20,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2274,20,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2275,20,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2276,20,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2277,20,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2278,20,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2279,20,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2280,20,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2281,20,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2282,20,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2283,20,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2284,20,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2285,20,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2286,20,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2287,20,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2288,20,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2289,20,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2290,20,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2291,20,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2292,20,8,1,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(2293,20,8,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(2294,20,8,3,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(2295,20,8,4,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(2296,20,8,6,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(2297,20,8,8,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(2298,20,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2299,20,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2300,20,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2301,20,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2302,20,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2303,20,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2304,20,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2305,20,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2306,20,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2307,20,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2308,20,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2309,20,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2310,20,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2311,20,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2312,20,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2313,20,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2314,20,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2315,20,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2316,20,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2317,20,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2318,20,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2319,20,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2320,20,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2321,20,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2322,20,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2323,20,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2324,20,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2325,20,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2326,20,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2327,20,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2328,20,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2329,20,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2330,20,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2331,20,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2332,20,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2333,20,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2334,20,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2335,20,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2336,20,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2337,20,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2338,20,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2339,20,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2340,20,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2341,20,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2342,20,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2343,20,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2344,20,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2345,20,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2346,20,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2347,20,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2348,20,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2349,20,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2350,20,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2351,20,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2352,20,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2353,20,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2354,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2355,21,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2356,21,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2357,21,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2358,21,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2359,21,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2360,21,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2361,21,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2362,21,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2363,21,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2364,21,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2365,21,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2366,21,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2367,21,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2368,21,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2369,21,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2370,21,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2371,21,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2372,21,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2373,21,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2374,21,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2375,21,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2376,21,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2377,21,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2378,21,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2379,21,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2380,21,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2381,21,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2382,21,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2383,21,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2384,21,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2385,21,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2386,21,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2387,21,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2388,21,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2389,21,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2390,21,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2391,21,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2392,21,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2393,21,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2394,21,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2395,21,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2396,21,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2397,21,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2398,21,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2399,21,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2400,21,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2401,21,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2402,21,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2403,21,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2404,21,8,1,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(2405,21,8,2,50,50,50,50,0,0,0,0,0,0,0,0,0,0,0,0),(2406,21,8,3,75,75,75,75,0,0,0,0,0,0,0,0,0,0,0,0),(2407,21,8,4,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(2408,21,8,6,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(2409,21,8,8,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0),(2410,21,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2411,21,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2412,21,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2413,21,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2414,21,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2415,21,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2416,21,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2417,21,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2418,21,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2419,21,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2420,21,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2421,21,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2422,21,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2423,21,10,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2424,21,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2425,21,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2426,21,11,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2427,21,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2428,21,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2429,21,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2430,21,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2431,21,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2432,21,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2433,21,12,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2434,21,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2435,21,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2436,21,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2437,21,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2438,21,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2439,21,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2440,21,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2441,21,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2442,21,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2443,21,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2444,21,13,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2445,21,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2446,21,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2447,21,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2448,21,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2449,21,14,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2450,21,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2451,21,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2452,21,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2453,21,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2454,21,15,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2455,21,15,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2456,21,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2457,21,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2458,21,15,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2459,21,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2460,21,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2461,21,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2462,21,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2463,21,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2464,21,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(2465,21,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +/*!40000 ALTER TABLE `bot_spell_casting_chances` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_spell_settings` +-- + +DROP TABLE IF EXISTS `bot_spell_settings`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_spell_settings` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `bot_id` int(11) NOT NULL DEFAULT '0', + `spell_id` smallint(5) NOT NULL DEFAULT '0', + `priority` smallint(5) NOT NULL DEFAULT '0', + `min_hp` smallint(5) NOT NULL DEFAULT '0', + `max_hp` smallint(5) NOT NULL DEFAULT '0', + `is_enabled` tinyint(1) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_spell_settings` +-- + +LOCK TABLES `bot_spell_settings` WRITE; +/*!40000 ALTER TABLE `bot_spell_settings` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_spell_settings` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_spells_entries` +-- + +DROP TABLE IF EXISTS `bot_spells_entries`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_spells_entries` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `npc_spells_id` int(11) NOT NULL DEFAULT '0', + `spellid` smallint(5) NOT NULL DEFAULT '0', + `type` int(10) unsigned NOT NULL DEFAULT '0', + `minlevel` tinyint(3) unsigned NOT NULL DEFAULT '0', + `maxlevel` tinyint(3) unsigned NOT NULL DEFAULT '255', + `manacost` smallint(5) NOT NULL DEFAULT '-1', + `recast_delay` int(11) NOT NULL DEFAULT '-1', + `priority` smallint(5) NOT NULL DEFAULT '0', + `resist_adjust` int(11) NOT NULL DEFAULT '0', + `min_hp` smallint(5) NOT NULL DEFAULT '0', + `max_hp` smallint(5) NOT NULL DEFAULT '0', + `bucket_name` varchar(100) NOT NULL DEFAULT '', + `bucket_value` varchar(100) NOT NULL DEFAULT '', + `bucket_comparison` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2180 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_spells_entries` +-- + +LOCK TABLES `bot_spells_entries` WRITE; +/*!40000 ALTER TABLE `bot_spells_entries` DISABLE KEYS */; +INSERT INTO `bot_spells_entries` VALUES (1,3002,200,2,1,3,-1,-1,1,0,0,0,'','',0),(2,3002,14,1,1,4,-1,-1,1,0,0,0,'','',0),(3,3002,201,1,1,1,-1,-1,1,0,0,0,'','',0),(4,3002,202,8,1,6,-1,-1,10,0,0,0,'','',0),(5,3002,11,8,1,14,-1,-1,8,0,0,0,'','',0),(6,3002,207,16,1,28,-1,-1,1,0,0,0,'','',0),(7,3002,216,1,2,15,-1,-1,1,0,0,0,'','',0),(8,3002,17,2,4,9,-1,-1,1,0,0,0,'','',0),(9,3002,560,1,5,13,-1,-1,1,0,0,0,'','',0),(10,3002,219,8,7,16,-1,-1,10,0,0,0,'','',0),(11,3002,12,2,10,19,-1,-1,2,0,0,0,'','',0),(12,3002,485,8,11,16,-1,-1,7,0,0,0,'','',0),(13,3002,16,1,14,28,-1,-1,1,0,0,0,'','',0),(14,3002,3575,8,15,34,-1,-1,6,0,0,0,'','',0),(15,3002,368,8,15,24,-1,-1,8,0,0,0,'','',0),(16,3002,123,1,16,30,-1,-1,1,0,0,0,'','',0),(17,3002,89,8,17,20,-1,-1,10,0,0,0,'','',0),(18,3002,2502,2,19,28,-1,-1,1,0,0,0,'','',0),(19,3002,15,2,20,29,-1,-1,2,0,0,0,'','',0),(20,3002,4088,8,20,39,-1,-1,6,0,0,0,'','',0),(21,3002,486,8,21,30,-1,-1,10,0,0,0,'','',0),(22,3002,18,8,25,34,-1,-1,9,0,0,0,'','',0),(23,3002,130,16,29,255,-1,-1,1,0,0,0,'','',0),(24,3002,2175,2,29,43,-1,-1,1,0,0,0,'','',0),(25,3002,329,1,29,43,-1,-1,1,0,0,0,'','',0),(26,3002,9,2,30,38,-1,-1,2,0,0,0,'','',0),(27,3002,124,1,31,45,-1,-1,1,0,0,0,'','',0),(28,3002,487,8,31,39,-1,-1,10,0,0,0,'','',0),(29,3002,3576,8,35,61,-1,-1,7,0,0,0,'','',0),(30,3002,19,8,35,39,-1,-1,8,0,0,0,'','',0),(31,3002,13,2,39,69,-1,-1,2,0,0,0,'','',0),(32,3002,3692,8,40,44,-1,-1,10,0,0,0,'','',0),(33,3002,4089,8,40,53,-1,-1,6,0,0,0,'','',0),(34,3002,1445,8,40,48,-1,-1,11,0,0,0,'','',0),(35,3002,1444,2,44,58,-1,-1,1,0,0,0,'','',0),(36,3002,672,1,44,53,-1,-1,1,0,0,0,'','',0),(37,3002,4053,8,45,59,-1,-1,10,0,0,0,'','',0),(38,3002,125,1,46,57,-1,-1,1,0,0,0,'','',0),(39,3002,2505,8,49,57,-1,-1,11,0,0,0,'','',0),(40,3002,1547,8,51,59,-1,-1,9,0,0,0,'','',0),(41,3002,1543,1,54,55,-1,-1,1,0,0,0,'','',0),(42,3002,4090,8,54,61,-1,-1,6,0,0,0,'','',0),(43,3002,2508,1,56,61,-1,-1,1,0,0,0,'','',0),(44,3002,1544,1,58,60,-1,-1,1,0,0,0,'','',0),(45,3002,2509,8,58,59,-1,-1,11,0,0,0,'','',0),(46,3002,1522,2,59,59,-1,-1,1,0,0,0,'','',0),(47,3002,1546,8,60,255,-1,-1,9,0,0,0,'','',0),(48,3002,2109,8,60,64,-1,-1,11,0,0,0,'','',0),(49,3002,2122,8,60,61,-1,-1,10,0,0,0,'','',0),(50,3002,2180,2,60,61,-1,-1,1,0,0,0,'','',0),(51,3002,3481,1,61,62,-1,-1,1,0,0,0,'','',0),(52,3002,3467,8,62,64,-1,-1,10,0,0,0,'','',0),(53,3002,3472,8,62,63,-1,-1,7,0,0,0,'','',0),(54,3002,3475,2,62,64,-1,-1,1,0,0,0,'','',0),(55,3002,3476,1,62,64,-1,-1,1,0,0,0,'','',0),(56,3002,4091,8,62,66,-1,-1,6,0,0,0,'','',0),(57,3002,3482,1,63,65,-1,-1,1,0,0,0,'','',0),(58,3002,4108,8,64,66,-1,-1,7,0,0,0,'','',0),(59,3002,3474,8,65,69,-1,-1,11,0,0,0,'','',0),(60,3002,3479,8,65,66,-1,-1,10,0,0,0,'','',0),(61,3002,4882,2,65,66,-1,-1,1,0,0,0,'','',0),(62,3002,4973,1,65,66,-1,-1,1,0,0,0,'','',0),(63,3002,5254,1,66,67,-1,-1,1,0,0,0,'','',0),(64,3002,5257,8,67,69,-1,-1,10,0,0,0,'','',0),(65,3002,5258,8,67,68,-1,-1,7,0,0,0,'','',0),(66,3002,5259,2,67,255,-1,-1,1,0,0,0,'','',0),(67,3002,5260,1,67,68,-1,-1,1,0,0,0,'','',0),(68,3002,5261,8,67,255,-1,-1,6,0,0,0,'','',0),(69,3002,5266,1,68,255,-1,-1,1,0,0,0,'','',0),(70,3002,5272,8,69,255,-1,-1,7,0,0,0,'','',0),(71,3002,8006,1,69,69,-1,-1,1,0,0,0,'','',0),(72,3002,5276,8,70,255,-1,-1,11,0,0,0,'','',0),(73,3002,5278,8,70,255,-1,-1,10,0,0,0,'','',0),(74,3002,5279,1,70,255,-1,-1,1,0,0,0,'','',0),(75,3002,6140,2,70,255,-1,-1,2,0,0,0,'','',0),(76,3012,288,8,1,5,-1,-1,1,0,0,0,'','',0),(77,3012,372,1,1,7,-1,-1,3,0,0,0,'','',0),(78,3012,378,8,2,9,-1,-1,2,0,0,0,'','',0),(79,3012,230,4,3,16,-1,-1,2,0,0,0,'','',0),(80,3012,376,1,4,4,-1,-1,3,0,0,0,'','',0),(81,3012,477,1,5,14,-1,-1,3,0,0,0,'','',0),(82,3012,246,8,6,14,-1,-1,1,0,0,0,'','',0),(83,3012,656,1,8,23,-1,-1,3,0,0,0,'','',0),(84,3012,381,8,9,60,-1,-1,4,0,0,0,'','',0),(85,3012,2551,8,10,30,-1,-1,2,0,0,0,'','',0),(86,3012,383,1,10,15,-1,-1,3,0,0,0,'','',0),(87,3012,48,512,11,33,-1,-1,1,0,0,0,'','',0),(88,3012,236,8,13,20,-1,-1,5,0,0,0,'','',0),(89,3012,309,8,15,22,-1,-1,1,0,0,0,'','',0),(90,3012,657,1,15,25,-1,-1,3,0,0,0,'','',0),(91,3012,38,1,16,36,-1,-1,3,0,0,0,'','',0),(92,3012,131,4,17,38,-1,-1,2,0,0,0,'','',0),(93,3012,22,1,17,17,-1,-1,3,0,0,0,'','',0),(94,3012,2552,1,18,27,-1,-1,3,0,0,0,'','',0),(95,3012,503,1,19,46,-1,-1,2,0,0,0,'','',0),(96,3012,108,8,20,41,-1,-1,6,0,0,0,'','',0),(97,3012,387,8,21,29,-1,-1,5,0,0,0,'','',0),(98,3012,65,8,23,32,-1,-1,1,0,0,0,'','',0),(99,3012,464,1,24,33,-1,-1,3,0,0,0,'','',0),(100,3012,2553,32,25,44,-1,-1,0,0,0,0,'','',0),(101,3012,465,1,26,42,-1,-1,3,0,0,0,'','',0),(102,3012,470,1,28,40,-1,-1,3,0,0,0,'','',0),(103,3012,393,8,30,39,-1,-1,5,0,0,0,'','',0),(104,3012,1419,8,31,48,-1,-1,2,0,0,0,'','',0),(105,3012,66,8,33,43,-1,-1,1,0,0,0,'','',0),(106,3012,49,512,34,52,-1,-1,1,0,0,0,'','',0),(107,3012,658,1,34,48,-1,-1,3,0,0,0,'','',0),(108,3012,466,1,37,57,-1,-1,3,0,0,0,'','',0),(109,3012,752,16,37,59,-1,-1,1,0,0,0,'','',0),(110,3012,132,4,39,47,-1,-1,2,0,0,0,'','',0),(111,3012,3811,8,40,57,-1,-1,3,0,0,0,'','',0),(112,3012,394,8,40,51,-1,-1,5,0,0,0,'','',0),(113,3012,23,1,41,46,-1,-1,3,0,0,0,'','',0),(114,3012,109,8,42,53,-1,-1,6,0,0,0,'','',0),(115,3012,659,1,43,59,-1,-1,3,0,0,0,'','',0),(116,3012,67,8,44,53,-1,-1,1,0,0,0,'','',0),(117,3012,2555,32,45,53,-1,-1,0,0,0,0,'','',0),(118,3012,612,1,47,50,-1,-1,2,0,0,0,'','',0),(119,3012,755,1,47,59,-1,-1,3,0,0,0,'','',0),(120,3012,133,4,48,50,-1,-1,2,0,0,0,'','',0),(121,3012,4067,8,49,56,-1,-1,2,0,0,0,'','',0),(122,3012,732,1,49,59,-1,-1,3,0,0,0,'','',0),(123,3012,1631,128,51,57,-1,-1,2,0,0,0,'','',0),(124,3012,1634,1,51,55,-1,-1,2,0,0,0,'','',0),(125,3012,1609,8,52,62,-1,-1,5,0,0,0,'','',0),(126,3012,1526,512,53,255,-1,-1,1,0,0,0,'','',0),(127,3012,1610,8,54,60,-1,-1,1,0,0,0,'','',0),(128,3012,2557,32,54,59,-1,-1,0,0,0,0,'','',0),(129,3012,3582,8,54,61,-1,-1,6,0,0,0,'','',0),(130,3012,1635,1,56,63,-1,-1,2,0,0,0,'','',0),(131,3012,4068,8,57,63,-1,-1,2,0,0,0,'','',0),(132,3012,1633,4,58,60,-1,-1,2,0,0,0,'','',0),(133,3012,1640,1,58,60,-1,-1,3,0,0,0,'','',0),(134,3012,2559,8,58,255,-1,-1,3,0,0,0,'','',0),(135,3012,2884,1,60,64,-1,-1,3,0,0,0,'','',0),(136,3012,2116,1,60,63,-1,-1,3,0,0,0,'','',0),(137,3012,2117,16,60,255,-1,-1,1,0,0,0,'','',0),(138,3012,2560,32,60,255,-1,-1,0,0,0,0,'','',0),(139,3012,2883,1,60,62,-1,-1,3,0,0,0,'','',0),(140,3012,3194,4,61,255,-1,-1,2,0,0,0,'','',0),(141,3012,3300,8,61,63,-1,-1,1,0,0,0,'','',0),(142,3012,3326,8,61,255,-1,-1,4,0,0,0,'','',0),(143,3012,3328,1,61,66,-1,-1,3,0,0,0,'','',0),(144,3012,3329,8,62,255,-1,-1,6,0,0,0,'','',0),(145,3012,3301,8,63,67,-1,-1,5,0,0,0,'','',0),(146,3012,3335,1,63,64,-1,-1,3,0,0,0,'','',0),(147,3012,3302,8,64,65,-1,-1,1,0,0,0,'','',0),(148,3012,4069,8,64,69,-1,-1,2,0,0,0,'','',0),(149,3012,4066,1,64,68,-1,-1,3,0,0,0,'','',0),(150,3012,3333,1,64,69,-1,-1,2,0,0,0,'','',0),(151,3012,4981,1,65,69,-1,-1,3,0,0,0,'','',0),(152,3012,3191,1,65,255,-1,-1,3,0,0,0,'','',0),(153,3012,5443,8,66,255,-1,-1,1,0,0,0,'','',0),(154,3012,5445,1,67,67,-1,-1,3,0,0,0,'','',0),(155,3012,5448,8,68,255,-1,-1,5,0,0,0,'','',0),(156,3012,5450,1,68,255,-1,-1,3,0,0,0,'','',0),(157,3012,5458,1,69,255,-1,-1,3,0,0,0,'','',0),(158,3012,5459,8,70,255,-1,-1,2,0,0,0,'','',0),(159,3012,8043,1,70,255,-1,-1,3,0,0,0,'','',0),(160,3012,5456,1,70,255,-1,-1,3,0,0,0,'','',0),(161,3011,288,8,1,7,-1,-1,1,0,0,0,'','',0),(162,3011,340,256,1,14,-1,-1,2,0,0,0,'','',0),(163,3011,341,64,1,2,-1,-1,3,0,0,0,'','',0),(164,3011,338,32,1,3,-1,-1,0,0,0,0,'','',0),(165,3011,346,8,3,15,-1,-1,3,0,0,0,'','',0),(166,3011,502,64,3,11,-1,-1,3,0,0,0,'','',0),(167,3011,344,128,4,10,-1,-1,1,0,0,0,'','',0),(168,3011,229,1,4,29,-1,45,6,0,0,0,'','',0),(169,3011,348,256,4,33,-1,-1,3,0,0,0,'','',0),(170,3011,491,32,4,7,-1,-1,0,0,0,0,'','',0),(171,3011,641,8,6,17,-1,-1,4,0,0,0,'','',0),(172,3011,359,8,7,19,-1,-1,5,0,0,0,'','',0),(173,3011,246,8,8,15,-1,-1,1,0,0,0,'','',0),(174,3011,351,32,8,11,-1,-1,0,0,0,0,'','',0),(175,3011,1509,256,9,28,-1,-1,3,0,0,0,'','',0),(176,3011,360,256,10,27,-1,-1,3,0,0,0,'','',0),(177,3011,2541,8,11,22,-1,-1,6,0,0,0,'','',0),(178,3011,355,128,11,26,-1,-1,1,0,0,0,'','',0),(179,3011,362,32,12,15,-1,-1,0,0,0,0,'','',0),(180,3011,445,64,12,19,-1,-1,3,0,0,0,'','',0),(181,3011,367,256,13,38,-1,-1,3,0,0,0,'','',0),(182,3011,236,8,14,21,-1,-1,2,0,0,0,'','',0),(183,3011,365,256,15,34,-1,-1,3,0,0,0,'','',0),(184,3011,309,8,16,20,-1,-1,1,0,0,0,'','',0),(185,3011,492,32,16,19,-1,-1,0,0,0,0,'','',0),(186,3011,2542,1,17,37,-1,-1,2,0,0,0,'','',0),(187,3011,642,8,18,30,-1,-1,4,0,0,0,'','',0),(188,3011,199,16,20,57,-1,-1,1,0,0,0,'','',0),(189,3011,440,32,20,23,-1,-1,0,0,0,0,'','',0),(190,3011,446,64,20,25,-1,-1,3,0,0,0,'','',0),(191,3011,204,1,21,31,-1,-1,5,0,0,0,'','',0),(192,3011,387,8,22,31,-1,-1,2,0,0,0,'','',0),(193,3011,449,8,23,34,-1,-1,6,0,0,0,'','',0),(194,3011,493,32,24,28,-1,-1,0,0,0,0,'','',0),(195,3011,524,64,26,38,-1,-1,3,0,0,0,'','',0),(196,3011,452,128,27,46,-1,-1,1,0,0,0,'','',0),(197,3011,451,256,28,46,-1,-1,3,0,0,0,'','',0),(198,3011,441,32,29,32,-1,-1,0,0,0,0,'','',0),(199,3011,454,256,29,44,-1,-1,3,0,0,0,'','',0),(200,3011,127,1,30,55,-1,45,6,0,0,0,'','',0),(201,3011,643,8,31,47,-1,-1,4,0,0,0,'','',0),(202,3011,1415,1,32,48,-1,-1,5,0,0,0,'','',0),(203,3011,393,8,32,42,-1,-1,2,0,0,0,'','',0),(204,3011,494,32,33,38,-1,-1,0,0,0,0,'','',0),(205,3011,435,256,34,49,-1,-1,3,0,0,0,'','',0),(206,3011,31,256,35,39,-1,-1,3,0,0,0,'','',0),(207,3011,661,8,35,54,-1,-1,6,0,0,0,'','',0),(208,3011,2544,1,38,255,-1,-1,2,0,0,0,'','',0),(209,3011,442,32,39,43,-1,-1,0,0,0,0,'','',0),(210,3011,525,64,39,47,-1,-1,3,0,0,0,'','',0),(211,3011,4096,256,39,53,-1,-1,3,0,0,0,'','',0),(212,3011,1508,256,40,51,-1,-1,3,0,0,0,'','',0),(213,3011,394,8,43,51,-1,-1,2,0,0,0,'','',0),(214,3011,495,32,44,47,-1,-1,0,0,0,0,'','',0),(215,3011,3702,256,45,48,-1,-1,3,0,0,0,'','',0),(216,3011,453,128,47,58,-1,-1,1,0,0,0,'','',0),(217,3011,6,256,47,57,-1,-1,3,0,0,0,'','',0),(218,3011,443,32,48,52,-1,-1,0,0,0,0,'','',0),(219,3011,447,64,48,53,-1,-1,3,0,0,0,'','',0),(220,3011,644,8,48,55,-1,-1,4,0,0,0,'','',0),(221,3011,3571,1,49,53,-1,-1,5,0,0,0,'','',0),(222,3011,456,256,49,56,-1,-1,3,0,0,0,'','',0),(223,3011,436,256,50,64,-1,-1,3,0,0,0,'','',0),(224,3011,1609,8,52,62,-1,-1,2,0,0,0,'','',0),(225,3011,32,256,52,55,-1,-1,3,0,0,0,'','',0),(226,3011,1621,32,53,55,-1,-1,0,0,0,0,'','',0),(227,3011,3572,1,54,59,-1,-1,5,0,0,0,'','',0),(228,3011,1613,64,54,58,-1,-1,3,0,0,0,'','',0),(229,3011,4097,256,54,62,-1,-1,3,0,0,0,'','',0),(230,3011,1414,8,55,61,-1,-1,6,0,0,0,'','',0),(231,3011,1527,1,56,56,-1,45,6,0,0,0,'','',0),(232,3011,1611,8,56,59,-1,-1,4,0,0,0,'','',0),(233,3011,1615,256,56,66,-1,-1,3,0,0,0,'','',0),(234,3011,1622,32,56,58,-1,-1,0,0,0,0,'','',0),(235,3011,1616,256,57,59,-1,-1,3,0,0,0,'','',0),(236,3011,6980,1,57,61,-1,-1,6,0,0,0,'','',0),(237,3011,1612,16,58,255,-1,-1,1,0,0,0,'','',0),(238,3011,1617,256,58,59,-1,-1,3,0,0,0,'','',0),(239,3011,1619,128,59,62,-1,-1,1,0,0,0,'','',0),(240,3011,1623,32,59,60,-1,-1,0,0,0,0,'','',0),(241,3011,1618,64,59,59,-1,-1,3,0,0,0,'','',0),(242,3011,1393,64,60,60,-1,-1,3,0,0,0,'','',0),(243,3011,2114,8,60,63,-1,-1,4,0,0,0,'','',0),(244,3011,2115,1,60,60,-1,-1,5,0,0,0,'','',0),(245,3011,2550,256,60,64,-1,-1,3,0,0,0,'','',0),(246,3011,2885,256,60,64,-1,-1,3,0,0,0,'','',0),(247,3011,3032,64,61,66,-1,-1,3,0,0,0,'','',0),(248,3011,3035,1,61,65,-1,-1,5,0,0,0,'','',0),(249,3011,3304,32,61,62,-1,-1,0,0,0,0,'','',0),(250,3011,3305,8,62,66,-1,-1,6,0,0,0,'','',0),(251,3011,6981,1,62,66,-1,-1,6,0,0,0,'','',0),(252,3011,3301,8,63,68,-1,-1,2,0,0,0,'','',0),(253,3011,3309,128,63,67,-1,-1,1,0,0,0,'','',0),(254,3011,3310,32,63,64,-1,-1,0,0,0,0,'','',0),(255,3011,4098,256,63,66,-1,-1,3,0,0,0,'','',0),(256,3011,3311,8,64,64,-1,-1,4,0,0,0,'','',0),(257,3011,3303,256,65,68,-1,-1,3,0,0,0,'','',0),(258,3011,3314,32,65,66,-1,-1,0,0,0,0,'','',0),(259,3011,4889,256,65,255,-1,-1,3,0,0,0,'','',0),(260,3011,4890,256,65,68,-1,-1,3,0,0,0,'','',0),(261,3011,4978,8,65,69,-1,-1,4,0,0,0,'','',0),(262,3011,5420,1,66,255,-1,-1,5,0,0,0,'','',0),(263,3011,5419,64,67,69,-1,-1,3,0,0,0,'','',0),(264,3011,5424,256,67,255,-1,-1,3,0,0,0,'','',0),(265,3011,5425,8,67,255,-1,-1,6,0,0,0,'','',0),(266,3011,5431,32,67,69,-1,-1,0,0,0,0,'','',0),(267,3011,5432,256,67,69,-1,-1,3,0,0,0,'','',0),(268,3011,6982,1,67,255,-1,-1,6,0,0,0,'','',0),(269,3011,5430,128,68,255,-1,-1,1,0,0,0,'','',0),(270,3011,5428,8,69,255,-1,-1,2,0,0,0,'','',0),(271,3011,5437,256,69,69,-1,-1,3,0,0,0,'','',0),(272,3011,7999,256,69,255,-1,-1,3,0,0,0,'','',0),(273,3011,5438,32,70,255,-1,-1,0,0,0,0,'','',0),(274,3011,5441,256,70,255,-1,-1,3,0,0,0,'','',0),(275,3011,6143,64,70,255,-1,-1,3,0,0,0,'','',0),(276,3011,7994,256,70,255,-1,-1,3,0,0,0,'','',0),(277,3011,5434,8,70,255,-1,-1,4,0,0,0,'','',0),(278,3013,288,8,1,4,-1,-1,1,0,0,0,'','',0),(279,3013,93,1,1,3,-1,-1,5,0,0,0,'','',0),(280,3013,315,32,2,5,-1,-1,0,0,0,0,'','',0),(281,3013,316,32,3,6,-1,-1,0,0,0,0,'','',0),(282,3013,317,32,4,7,-1,-1,0,0,0,0,'','',0),(283,3013,94,1,4,4,-1,-1,5,0,0,0,'','',0),(284,3013,58,32,5,8,-1,-1,0,0,0,0,'','',0),(285,3013,246,8,5,15,-1,-1,1,0,0,0,'','',0),(286,3013,322,1,5,14,-1,-1,5,0,0,0,'','',0),(287,3013,398,32,6,9,-1,-1,0,0,0,0,'','',0),(288,3013,399,32,7,10,-1,-1,0,0,0,0,'','',0),(289,3013,324,1,7,22,-1,-1,6,0,0,0,'','',0),(290,3013,332,8,7,18,-1,-1,2,0,0,0,'','',0),(291,3013,400,32,8,11,-1,-1,0,0,0,0,'','',0),(292,3013,397,32,9,12,-1,-1,0,0,0,0,'','',0),(293,3013,248,1,9,17,-1,-1,3,0,0,0,'','',0),(294,3013,402,32,10,13,-1,-1,0,0,0,0,'','',0),(295,3013,403,32,11,14,-1,-1,0,0,0,0,'','',0),(296,3013,327,8,11,28,-1,-1,3,0,0,0,'','',0),(297,3013,404,32,12,15,-1,-1,0,0,0,0,'','',0),(298,3013,333,8,12,24,-1,-1,4,0,0,0,'','',0),(299,3013,401,32,13,16,-1,-1,0,0,0,0,'','',0),(300,3013,336,32,14,17,-1,-1,0,0,0,0,'','',0),(301,3013,395,32,15,18,-1,-1,0,0,0,0,'','',0),(302,3013,334,1,15,17,-1,-1,5,0,0,0,'','',0),(303,3013,396,32,16,19,-1,-1,0,0,0,0,'','',0),(304,3013,309,8,16,23,-1,-1,1,0,0,0,'','',0),(305,3013,335,32,17,20,-1,-1,0,0,0,0,'','',0),(306,3013,497,32,18,21,-1,-1,0,0,0,0,'','',0),(307,3013,68,1,18,30,-1,-1,5,0,0,0,'','',0),(308,3013,663,1,18,24,-1,-1,3,0,0,0,'','',0),(309,3013,498,32,19,22,-1,-1,0,0,0,0,'','',0),(310,3013,411,8,19,27,-1,-1,2,0,0,0,'','',0),(311,3013,499,32,20,23,-1,-1,0,0,0,0,'','',0),(312,3013,496,32,21,24,-1,-1,0,0,0,0,'','',0),(313,3013,570,32,22,25,-1,-1,0,0,0,0,'','',0),(314,3013,571,32,23,26,-1,-1,0,0,0,0,'','',0),(315,3013,113,1,23,40,-1,-1,6,0,0,0,'','',0),(316,3013,572,32,24,27,-1,-1,0,0,0,0,'','',0),(317,3013,65,8,24,31,-1,-1,1,0,0,0,'','',0),(318,3013,569,32,25,28,-1,-1,0,0,0,0,'','',0),(319,3013,115,1,25,27,-1,-1,3,0,0,0,'','',0),(320,3013,81,8,25,40,-1,-1,4,0,0,0,'','',0),(321,3013,574,32,26,30,-1,-1,0,0,0,0,'','',0),(322,3013,575,32,27,31,-1,-1,0,0,0,0,'','',0),(323,3013,576,32,28,32,-1,-1,0,0,0,0,'','',0),(324,3013,479,8,28,37,-1,-1,2,0,0,0,'','',0),(325,3013,664,1,28,47,-1,-1,3,0,0,0,'','',0),(326,3013,106,8,28,46,-1,-1,3,0,0,0,'','',0),(327,3013,573,32,29,33,-1,-1,0,0,0,0,'','',0),(328,3013,1400,32,30,49,-1,-1,0,0,0,0,'','',0),(329,3013,621,32,31,35,-1,-1,0,0,0,0,'','',0),(330,3013,120,1,31,32,-1,-1,5,0,0,0,'','',0),(331,3013,622,32,32,36,-1,-1,0,0,0,0,'','',0),(332,3013,49,512,32,52,-1,-1,3,0,0,0,'','',0),(333,3013,66,8,32,42,-1,-1,1,0,0,0,'','',0),(334,3013,623,32,33,37,-1,-1,0,0,0,0,'','',0),(335,3013,69,1,33,46,-1,-1,5,0,0,0,'','',0),(336,3013,620,32,34,38,-1,-1,0,0,0,0,'','',0),(337,3013,625,32,36,40,-1,-1,0,0,0,0,'','',0),(338,3013,626,32,37,41,-1,-1,0,0,0,0,'','',0),(339,3013,627,32,38,42,-1,-1,0,0,0,0,'','',0),(340,3013,680,8,38,44,-1,-1,2,0,0,0,'','',0),(341,3013,624,32,39,43,-1,-1,0,0,0,0,'','',0),(342,3013,629,32,41,48,-1,-1,0,0,0,0,'','',0),(343,3013,114,1,41,56,-1,-1,6,0,0,0,'','',0),(344,3013,82,8,41,51,-1,-1,4,0,0,0,'','',0),(345,3013,630,32,42,46,-1,-1,0,0,0,0,'','',0),(346,3013,631,32,43,47,-1,-1,0,0,0,0,'','',0),(347,3013,1403,1,43,54,-1,-1,4,0,0,0,'','',0),(348,3013,67,8,43,53,-1,-1,1,0,0,0,'','',0),(349,3013,628,32,44,45,-1,-1,0,0,0,0,'','',0),(350,3013,412,8,45,52,-1,-1,2,0,0,0,'','',0),(351,3013,632,32,46,50,-1,-1,0,0,0,0,'','',0),(352,3013,4079,8,46,57,-1,-1,5,0,0,0,'','',0),(353,3013,634,32,47,51,-1,-1,0,0,0,0,'','',0),(354,3013,107,8,47,51,-1,-1,3,0,0,0,'','',0),(355,3013,70,1,47,51,-1,-1,5,0,0,0,'','',0),(356,3013,635,32,48,52,-1,-1,0,0,0,0,'','',0),(357,3013,116,1,48,55,-1,-1,3,0,0,0,'','',0),(358,3013,633,32,49,53,-1,-1,0,0,0,0,'','',0),(359,3013,1402,32,50,59,-1,-1,0,0,0,0,'','',0),(360,3013,1671,32,51,56,-1,-1,0,0,0,0,'','',0),(361,3013,1673,32,52,57,-1,-1,0,0,0,0,'','',0),(362,3013,1660,1,52,58,-1,-1,5,0,0,0,'','',0),(363,3013,1666,8,52,53,-1,-1,4,0,0,0,'','',0),(364,3013,3700,8,52,54,-1,-1,3,0,0,0,'','',0),(365,3013,1674,32,53,58,-1,-1,0,0,0,0,'','',0),(366,3013,1526,512,53,255,-1,-1,3,0,0,0,'','',0),(367,3013,1668,8,53,55,-1,-1,2,0,0,0,'','',0),(368,3013,1672,32,54,59,-1,-1,0,0,0,0,'','',0),(369,3013,1610,8,54,60,-1,-1,1,0,0,0,'','',0),(370,3013,2879,8,54,57,-1,-1,4,0,0,0,'','',0),(371,3013,1405,1,55,255,-1,-1,4,0,0,0,'','',0),(372,3013,1472,8,55,59,-1,-1,3,0,0,0,'','',0),(373,3013,1529,1,56,63,-1,-1,3,0,0,0,'','',0),(374,3013,1667,8,56,59,-1,-1,2,0,0,0,'','',0),(375,3013,1675,32,57,64,-1,-1,0,0,0,0,'','',0),(376,3013,1663,1,57,62,-1,-1,6,0,0,0,'','',0),(377,3013,1677,32,58,62,-1,-1,0,0,0,0,'','',0),(378,3013,2539,8,58,61,-1,-1,4,0,0,0,'','',0),(379,3013,4080,8,58,63,-1,-1,5,0,0,0,'','',0),(380,3013,1678,32,59,60,-1,-1,0,0,0,0,'','',0),(381,3013,1664,1,59,60,-1,-1,5,0,0,0,'','',0),(382,3013,1404,32,60,64,-1,-1,0,0,0,0,'','',0),(383,3013,1676,32,60,61,-1,-1,0,0,0,0,'','',0),(384,3013,1669,8,60,60,-1,-1,2,0,0,0,'','',0),(385,3013,2119,8,60,61,-1,-1,3,0,0,0,'','',0),(386,3013,3317,32,61,65,-1,-1,0,0,0,0,'','',0),(387,3013,3198,8,61,62,-1,-1,2,0,0,0,'','',0),(388,3013,3300,8,61,63,-1,-1,1,0,0,0,'','',0),(389,3013,3318,1,61,65,-1,-1,5,0,0,0,'','',0),(390,3013,3320,32,62,66,-1,-1,0,0,0,0,'','',0),(391,3013,3031,8,62,67,-1,-1,4,0,0,0,'','',0),(392,3013,3237,8,62,68,-1,-1,3,0,0,0,'','',0),(393,3013,3322,32,63,67,-1,-1,0,0,0,0,'','',0),(394,3013,3486,8,63,65,-1,-1,2,0,0,0,'','',0),(395,3013,3321,1,63,67,-1,-1,6,0,0,0,'','',0),(396,3013,3238,1,64,68,-1,-1,3,0,0,0,'','',0),(397,3013,3302,8,64,65,-1,-1,1,0,0,0,'','',0),(398,3013,4081,8,64,68,-1,-1,5,0,0,0,'','',0),(399,3013,4888,32,65,255,-1,-1,0,0,0,0,'','',0),(400,3013,3324,32,65,69,-1,-1,0,0,0,0,'','',0),(401,3013,5473,32,66,255,-1,-1,0,0,0,0,'','',0),(402,3013,5466,8,66,69,-1,-1,2,0,0,0,'','',0),(403,3013,5472,8,66,255,-1,-1,1,0,0,0,'','',0),(404,3013,5474,1,66,255,-1,-1,5,0,0,0,'','',0),(405,3013,5480,32,67,255,-1,-1,0,0,0,0,'','',0),(406,3013,5485,32,68,255,-1,-1,0,0,0,0,'','',0),(407,3013,5476,8,68,255,-1,-1,4,0,0,0,'','',0),(408,3013,5484,1,68,255,-1,-1,6,0,0,0,'','',0),(409,3013,5478,8,69,255,-1,-1,3,0,0,0,'','',0),(410,3013,5490,1,69,255,-1,-1,3,0,0,0,'','',0),(411,3013,5494,8,69,255,-1,-1,5,0,0,0,'','',0),(412,3013,5495,32,70,255,-1,-1,0,0,0,0,'','',0),(413,3013,5488,8,70,255,-1,-1,2,0,0,0,'','',0),(414,3014,288,8,1,5,-1,-1,1,0,0,0,'','',0),(415,3014,40,8,1,18,-1,-1,2,0,0,0,'','',0),(416,3014,289,1,1,6,-1,-1,7,0,0,0,'','',0),(417,3014,286,1,1,3,-1,-1,6,0,0,0,'','',0),(418,3014,285,32,1,1,-1,-1,0,0,0,0,'','',0),(419,3014,681,32,2,6,-1,-1,0,0,0,0,'','',0),(420,3014,294,1,4,10,-1,-1,6,0,0,0,'','',0),(421,3014,246,8,6,15,-1,-1,1,0,0,0,'','',0),(422,3014,295,32,7,8,-1,-1,0,0,0,0,'','',0),(423,3014,296,1,7,15,-1,-1,7,0,0,0,'','',0),(424,3014,48,512,7,21,-1,-1,7,0,0,0,'','',0),(425,3014,302,1,9,22,-1,-1,2,0,0,0,'','',0),(426,3014,303,1,9,27,-1,-1,5,0,0,0,'','',0),(427,3014,682,32,9,13,-1,-1,0,0,0,0,'','',0),(428,3014,2561,8,11,16,-1,-1,4,0,0,0,'','',0),(429,3014,521,1,11,25,-1,-1,6,0,0,0,'','',0),(430,3014,683,32,14,16,-1,-1,0,0,0,0,'','',0),(431,3014,697,8,14,25,-1,-1,5,0,0,0,'','',0),(432,3014,39,8,15,20,-1,-1,6,0,0,0,'','',0),(433,3014,309,8,16,22,-1,-1,1,0,0,0,'','',0),(434,3014,306,1,16,20,-1,-1,7,0,0,0,'','',0),(435,3014,2562,8,17,29,-1,-1,4,0,0,0,'','',0),(436,3014,684,32,17,21,-1,-1,0,0,0,0,'','',0),(437,3014,170,8,21,38,-1,-1,6,0,0,0,'','',0),(438,3014,350,1,21,31,-1,-1,7,0,0,0,'','',0),(439,3014,24,512,22,27,-1,-1,7,0,0,0,'','',0),(440,3014,685,32,22,28,-1,-1,0,0,0,0,'','',0),(441,3014,185,1,23,40,-1,-1,2,0,0,0,'','',0),(442,3014,65,8,23,30,-1,-1,1,0,0,0,'','',0),(443,3014,174,8,26,41,-1,-1,5,0,0,0,'','',0),(444,3014,450,1,26,46,-1,-1,6,0,0,0,'','',0),(445,3014,49,512,28,41,-1,-1,7,0,0,0,'','',0),(446,3014,619,1,28,60,-1,-1,5,0,0,0,'','',0),(447,3014,4073,8,29,43,-1,-1,2,0,0,0,'','',0),(448,3014,686,32,29,30,-1,-1,0,0,0,0,'','',0),(449,3014,74,1,30,49,-1,-1,7,0,0,0,'','',0),(450,3014,66,8,31,39,-1,-1,1,0,0,0,'','',0),(451,3014,687,32,31,36,-1,-1,0,0,0,0,'','',0),(452,3014,71,1,32,42,-1,-1,7,0,0,0,'','',0),(453,3014,1408,8,34,54,-1,-1,3,0,0,0,'','',0),(454,3014,688,32,37,40,-1,-1,0,0,0,0,'','',0),(455,3014,171,8,39,46,-1,-1,7,0,0,0,'','',0),(456,3014,1474,8,40,62,-1,-1,1,0,0,0,'','',0),(457,3014,186,1,41,56,-1,-1,2,0,0,0,'','',0),(458,3014,689,32,41,47,-1,-1,0,0,0,0,'','',0),(459,3014,1694,8,42,51,-1,-1,5,0,0,0,'','',0),(460,3014,25,512,42,52,-1,-1,7,0,0,0,'','',0),(461,3014,673,1,43,53,-1,-1,7,0,0,0,'','',0),(462,3014,4074,1,44,54,-1,-1,2,0,0,0,'','',0),(463,3014,172,8,47,52,-1,-1,6,0,0,0,'','',0),(464,3014,195,1,47,58,-1,-1,6,0,0,0,'','',0),(465,3014,690,32,48,54,-1,-1,0,0,0,0,'','',0),(466,3014,1686,1,50,255,-1,-1,7,0,0,0,'','',0),(467,3014,1693,8,52,55,-1,-1,5,0,0,0,'','',0),(468,3014,1697,512,53,255,-1,-1,7,0,0,0,'','',0),(469,3014,1708,8,53,57,-1,-1,6,0,0,0,'','',0),(470,3014,1698,1,54,255,-1,-1,7,0,0,0,'','',0),(471,3014,1723,32,55,61,-1,-1,0,0,0,0,'','',0),(472,3014,4075,8,55,62,-1,-1,2,0,0,0,'','',0),(473,3014,1409,8,55,59,-1,-1,3,0,0,0,'','',0),(474,3014,1695,8,56,59,-1,-1,5,0,0,0,'','',0),(475,3014,1712,1,57,68,-1,-1,2,0,0,0,'','',0),(476,3014,1709,8,58,59,-1,-1,6,0,0,0,'','',0),(477,3014,1703,1,59,61,-1,-1,6,0,0,0,'','',0),(478,3014,1710,8,60,61,-1,-1,6,0,0,0,'','',0),(479,3014,2570,8,60,62,-1,-1,5,0,0,0,'','',0),(480,3014,6739,8,61,66,-1,-1,4,0,0,0,'','',0),(481,3014,3199,8,61,65,-1,-1,3,0,0,0,'','',0),(482,3014,3229,16,61,255,-1,-1,1,0,0,0,'','',0),(483,3014,3034,32,62,65,-1,-1,0,0,0,0,'','',0),(484,3014,3240,8,62,64,-1,-1,6,0,0,0,'','',0),(485,3014,3345,1,62,68,-1,-1,6,0,0,0,'','',0),(486,3014,3350,8,63,64,-1,-1,5,0,0,0,'','',0),(487,3014,4076,8,63,67,-1,-1,2,0,0,0,'','',0),(488,3014,3241,8,63,255,-1,-1,1,0,0,0,'','',0),(489,3014,3178,8,65,66,-1,-1,6,0,0,0,'','',0),(490,3014,3360,8,65,67,-1,-1,5,0,0,0,'','',0),(491,3014,5500,8,66,255,-1,-1,3,0,0,0,'','',0),(492,3014,5505,32,66,255,-1,-1,0,0,0,0,'','',0),(493,3014,5504,8,67,68,-1,-1,4,0,0,0,'','',0),(494,3014,5507,8,67,69,-1,-1,6,0,0,0,'','',0),(495,3014,5513,8,68,69,-1,-1,5,0,0,0,'','',0),(496,3014,5515,8,68,69,-1,-1,2,0,0,0,'','',0),(497,3014,5509,1,69,255,-1,-1,6,0,0,0,'','',0),(498,3014,6671,8,69,255,-1,-1,4,0,0,0,'','',0),(499,3014,6826,1,69,255,-1,-1,2,0,0,0,'','',0),(500,3014,5517,8,70,255,-1,-1,2,0,0,0,'','',0),(501,3014,5521,8,70,255,-1,-1,6,0,0,0,'','',0),(502,3014,5522,8,70,255,-1,-1,5,0,0,0,'','',0),(503,3010,266,8,1,20,-1,-1,1,0,0,0,'','',0),(504,3010,40,8,1,7,-1,-1,2,0,0,0,'','',0),(505,3010,267,8,1,31,-1,-1,3,0,0,0,'','',0),(506,3010,93,1,1,3,-1,-1,1,0,0,0,'','',0),(507,3010,200,2,1,18,-1,-1,2,0,0,0,'','',0),(508,3010,274,8,3,10,-1,-1,9,0,0,0,'','',0),(509,3010,269,8,3,17,-1,-1,10,0,0,0,'','',0),(510,3010,275,1,4,13,-1,-1,5,0,0,0,'','',0),(511,3010,75,256,4,14,-1,-1,4,0,0,0,'','',0),(512,3010,270,256,5,12,-1,-1,2,0,0,0,'','',0),(513,3010,279,8,6,21,-1,-1,11,0,0,0,'','',0),(514,3010,2521,8,8,17,-1,-1,2,0,0,0,'','',0),(515,3010,277,256,8,23,-1,-1,4,0,0,0,'','',0),(516,3010,17,2,9,18,-1,-1,2,0,0,0,'','',0),(517,3010,283,8,11,19,-1,-1,9,0,0,0,'','',0),(518,3010,281,1,12,28,-1,-1,3,0,0,0,'','',0),(519,3010,505,1,13,26,-1,-1,2,0,0,0,'','',0),(520,3010,365,256,15,18,-1,-1,4,0,0,0,'','',0),(521,3010,282,1,14,22,-1,-1,5,0,0,0,'','',0),(522,3010,526,1,17,37,-1,-1,4,0,0,0,'','',0),(523,3010,110,1,18,31,-1,-1,1,0,0,0,'','',0),(524,3010,147,8,18,27,-1,-1,2,0,0,0,'','',0),(525,3010,148,8,18,30,-1,-1,10,0,0,0,'','',0),(526,3010,12,2,19,28,-1,-1,2,0,0,0,'','',0),(527,3010,511,256,19,30,-1,-1,4,0,0,0,'','',0),(528,3010,649,8,20,25,-1,-1,9,0,0,0,'','',0),(529,3010,146,8,21,24,-1,-1,1,0,0,0,'','',0),(530,3010,149,8,21,29,-1,-1,11,0,0,0,'','',0),(531,3010,144,8,23,38,-1,-1,12,0,0,0,'','',0),(532,3010,508,1,23,32,-1,-1,5,0,0,0,'','',0),(533,3010,434,256,24,36,-1,-1,4,0,0,0,'','',0),(534,3010,349,8,25,38,-1,-1,1,0,0,0,'','',0),(535,3010,39,8,26,41,-1,-1,9,0,0,0,'','',0),(536,3010,506,1,27,37,-1,-1,2,0,0,0,'','',0),(537,3010,151,8,28,34,-1,-1,2,0,0,0,'','',0),(538,3010,15,2,29,50,-1,-1,2,0,0,0,'','',0),(539,3010,162,1,29,40,-1,-1,3,0,0,0,'','',0),(540,3010,161,8,30,42,-1,-1,11,0,0,0,'','',0),(541,3010,160,8,31,40,-1,-1,10,0,0,0,'','',0),(542,3010,31,256,31,48,-1,-1,4,0,0,0,'','',0),(543,3010,111,1,32,47,-1,-1,1,0,0,0,'','',0),(544,3010,164,32,32,36,-1,-1,0,0,0,0,'','',0),(545,3010,1428,8,35,38,-1,-1,2,0,0,0,'','',0),(546,3010,435,256,37,48,-1,-1,4,0,0,0,'','',0),(547,3010,577,32,37,40,-1,-1,0,0,0,0,'','',0),(548,3010,507,1,38,50,-1,-1,2,0,0,0,'','',0),(549,3010,527,1,38,51,-1,-1,4,0,0,0,'','',0),(550,3010,145,8,39,51,-1,-1,12,0,0,0,'','',0),(551,3010,152,8,39,47,-1,-1,1,0,0,0,'','',0),(552,3010,153,8,39,45,-1,-1,2,0,0,0,'','',0),(553,3010,154,8,41,52,-1,-1,10,0,0,0,'','',0),(554,3010,163,1,41,52,-1,-1,3,0,0,0,'','',0),(555,3010,165,32,41,44,-1,-1,0,0,0,0,'','',0),(556,3010,170,8,42,55,-1,-1,9,0,0,0,'','',0),(557,3010,158,8,43,53,-1,-1,11,0,0,0,'','',0),(558,3010,3694,1024,44,59,-1,-1,5,0,0,0,'','',0),(559,3010,754,1024,44,53,-1,-1,6,0,0,0,'','',0),(560,3010,166,32,45,54,-1,-1,0,0,0,0,'','',0),(561,3010,159,8,46,56,-1,-1,2,0,0,0,'','',0),(562,3010,112,1,48,56,-1,-1,1,0,0,0,'','',0),(563,3010,157,8,48,57,-1,-1,1,0,0,0,'','',0),(564,3010,32,256,49,58,-1,-1,4,0,0,0,'','',0),(565,3010,436,256,49,55,-1,-1,4,0,0,0,'','',0),(566,3010,1588,1,51,64,-1,-1,2,0,0,0,'','',0),(567,3010,9,2,51,54,-1,-1,2,0,0,0,'','',0),(568,3010,1568,8,52,55,-1,-1,12,0,0,0,'','',0),(569,3010,1573,1,52,62,-1,-1,4,0,0,0,'','',0),(570,3010,1592,1,53,65,-1,-1,3,0,0,0,'','',0),(571,3010,1594,8,53,56,-1,-1,10,0,0,0,'','',0),(572,3010,1595,8,54,56,-1,-1,11,0,0,0,'','',0),(573,3010,1572,1024,54,57,-1,-1,6,0,0,0,'','',0),(574,3010,1290,2,55,57,-1,-1,3,0,0,0,'','',0),(575,3010,1574,32,55,60,-1,-1,0,0,0,0,'','',0),(576,3010,171,8,56,62,-1,-1,9,0,0,0,'','',0),(577,3010,2528,8,56,60,-1,-1,12,0,0,0,'','',0),(578,3010,1590,256,56,59,-1,-1,4,0,0,0,'','',0),(579,3010,1580,8,57,61,-1,-1,11,0,0,0,'','',0),(580,3010,1577,1,57,59,-1,-1,1,0,0,0,'','',0),(581,3010,1593,8,57,57,-1,-1,2,0,0,0,'','',0),(582,3010,1579,8,57,60,-1,-1,10,0,0,0,'','',0),(583,3010,1596,8,58,58,-1,-1,1,0,0,0,'','',0),(584,3010,1581,8,58,59,-1,-1,2,0,0,0,'','',0),(585,3010,1332,1024,58,64,-1,-1,6,0,0,0,'','',0),(586,3010,1583,8,59,59,-1,-1,1,0,0,0,'','',0),(587,3010,1591,256,59,63,-1,-1,4,0,0,0,'','',0),(588,3010,2112,8,60,64,-1,-1,2,0,0,0,'','',0),(589,3010,2530,8,60,61,-1,-1,1,0,0,0,'','',0),(590,3010,2113,256,60,64,-1,-1,4,0,0,0,'','',0),(591,3010,1578,1,60,62,-1,-1,1,0,0,0,'','',0),(592,3010,1576,1024,60,64,-1,-1,5,0,0,0,'','',0),(593,3010,3378,8,61,61,-1,-1,10,0,0,0,'','',0),(594,3010,3433,8,61,62,-1,-1,12,0,0,0,'','',0),(595,3010,3377,32,61,66,-1,-1,0,0,0,0,'','',0),(596,3010,3235,8,62,64,-1,-1,1,0,0,0,'','',0),(597,3010,3383,8,62,67,-1,-1,10,0,0,0,'','',0),(598,3010,3382,8,62,62,-1,-1,11,0,0,0,'','',0),(599,3010,3233,2,62,64,-1,-1,2,0,0,0,'','',0),(600,3010,172,8,63,63,-1,-1,9,0,0,0,'','',0),(601,3010,3389,8,63,67,-1,-1,11,0,0,0,'','',0),(602,3010,3441,8,63,65,-1,-1,12,0,0,0,'','',0),(603,3010,3386,1,63,65,-1,-1,4,0,0,0,'','',0),(604,3010,3387,1,63,64,-1,-1,1,0,0,0,'','',0),(605,3010,3391,8,64,255,-1,-1,9,0,0,0,'','',0),(606,3010,3394,256,64,66,-1,-1,4,0,0,0,'','',0),(607,3010,3397,8,65,67,-1,-1,1,0,0,0,'','',0),(608,3010,3399,8,65,69,-1,-1,2,0,0,0,'','',0),(609,3010,3396,256,65,69,-1,-1,4,0,0,0,'','',0),(610,3010,4900,1,65,68,-1,-1,2,0,0,0,'','',0),(611,3010,3395,1,65,255,-1,-1,1,0,0,0,'','',0),(612,3010,4901,2,65,67,-1,-1,2,0,0,0,'','',0),(613,3010,4899,1024,65,69,-1,-1,5,0,0,0,'','',0),(614,3010,4979,1024,65,69,-1,-1,6,0,0,0,'','',0),(615,3010,5393,8,66,68,-1,-1,12,0,0,0,'','',0),(616,3010,5394,1,66,255,-1,-1,3,0,0,0,'','',0),(617,3010,5392,1,66,255,-1,-1,4,0,0,0,'','',0),(618,3010,5411,256,67,255,-1,-1,4,0,0,0,'','',0),(619,3010,5389,32,67,255,-1,-1,0,0,0,0,'','',0),(620,3010,5396,8,68,69,-1,-1,1,0,0,0,'','',0),(621,3010,5398,8,68,68,-1,-1,11,0,0,0,'','',0),(622,3010,5395,2,68,69,-1,-1,2,0,0,0,'','',0),(623,3010,5399,8,68,255,-1,-1,10,0,0,0,'','',0),(624,3010,5405,8,69,255,-1,-1,11,0,0,0,'','',0),(625,3010,5406,8,69,255,-1,-1,12,0,0,0,'','',0),(626,3010,6827,1,69,255,-1,-1,2,0,0,0,'','',0),(627,3010,5416,1024,70,255,-1,-1,5,0,0,0,'','',0),(628,3010,5418,1024,70,255,-1,-1,6,0,0,0,'','',0),(629,3010,5415,8,70,255,-1,-1,1,0,0,0,'','',0),(630,3010,5417,8,70,255,-1,-1,2,0,0,0,'','',0),(631,3010,5414,256,70,255,-1,-1,4,0,0,0,'','',0),(632,3010,6142,2,70,255,-1,-1,2,0,0,0,'','',0),(633,3006,239,256,1,24,-1,-1,2,0,0,0,'','',0),(634,3006,242,128,1,25,-1,-1,1,0,0,0,'','',0),(635,3006,93,1,1,2,-1,-1,3,0,0,0,'','',0),(636,3006,200,2,1,8,-1,-1,2,0,0,0,'','',0),(637,3006,248,1,2,12,-1,-1,2,0,0,0,'','',0),(638,3006,253,1,3,15,-1,-1,3,0,0,0,'','',0),(639,3006,92,1,3,7,-1,-1,3,0,0,0,'','',0),(640,3006,256,8,7,16,-1,-1,1,0,0,0,'','',0),(641,3006,515,8,7,16,-1,-1,8,0,0,0,'','',0),(642,3006,91,1,8,27,-1,-1,3,0,0,0,'','',0),(643,3006,17,2,9,18,-1,-1,2,0,0,0,'','',0),(644,3006,264,256,10,31,-1,-1,2,0,0,0,'','',0),(645,3006,663,1,13,22,-1,-1,2,0,0,0,'','',0),(646,3006,520,1,16,29,-1,-1,3,0,0,0,'','',0),(647,3006,273,8,17,26,-1,-1,1,0,0,0,'','',0),(648,3006,516,8,17,26,-1,-1,8,0,0,0,'','',0),(649,3006,12,2,19,28,-1,-1,2,0,0,0,'','',0),(650,3006,115,1,23,32,-1,-1,2,0,0,0,'','',0),(651,3006,99,256,24,33,-1,-1,2,0,0,0,'','',0),(652,3006,78,256,25,36,-1,-1,2,0,0,0,'','',0),(653,3006,512,128,26,60,-1,-1,1,0,0,0,'','',0),(654,3006,129,8,27,36,-1,-1,1,0,0,0,'','',0),(655,3006,517,8,27,36,-1,-1,8,0,0,0,'','',0),(656,3006,217,1,28,37,-1,-1,3,0,0,0,'','',0),(657,3006,15,2,29,43,-1,-1,2,0,0,0,'','',0),(658,3006,1439,1,30,55,-1,-1,3,0,0,0,'','',0),(659,3006,259,256,32,39,-1,-1,2,0,0,0,'','',0),(660,3006,664,1,33,42,-1,-1,2,0,0,0,'','',0),(661,3006,144,8,34,38,-1,-1,7,0,0,0,'','',0),(662,3006,1437,256,37,60,-1,-1,2,0,0,0,'','',0),(663,3006,432,8,37,46,-1,-1,1,0,0,0,'','',0),(664,3006,518,8,37,46,-1,-1,8,0,0,0,'','',0),(665,3006,57,1,38,47,-1,-1,3,0,0,0,'','',0),(666,3006,137,8,39,41,-1,-1,7,0,0,0,'','',0),(667,3006,665,256,40,52,-1,-1,2,0,0,0,'','',0),(668,3006,427,8,40,53,-1,-1,9,0,0,0,'','',0),(669,3006,1436,256,42,61,-1,-1,2,0,0,0,'','',0),(670,3006,145,8,42,44,-1,-1,7,0,0,0,'','',0),(671,3006,116,1,43,54,-1,-1,2,0,0,0,'','',0),(672,3006,3834,2,44,50,-1,-1,2,0,0,0,'','',0),(673,3006,138,8,45,53,-1,-1,7,0,0,0,'','',0),(674,3006,29,1,47,54,-1,-1,3,0,0,0,'','',0),(675,3006,356,8,47,48,-1,-1,1,0,0,0,'','',0),(676,3006,519,8,47,55,-1,-1,8,0,0,0,'','',0),(677,3006,671,1,48,53,-1,-1,3,0,0,0,'','',0),(678,3006,1727,8,49,57,-1,-1,1,0,0,0,'','',0); +INSERT INTO `bot_spells_entries` VALUES (679,3006,4104,256,49,255,-1,-1,2,0,0,0,'','',0),(680,3006,1562,8,54,59,-1,-1,9,0,0,0,'','',0),(681,3006,9,2,51,54,-1,-1,2,0,0,0,'','',0),(682,3006,1600,256,52,61,-1,-1,2,0,0,0,'','',0),(683,3006,1601,256,53,62,-1,-1,2,0,0,0,'','',0),(684,3006,1568,8,54,57,-1,-1,7,0,0,0,'','',0),(685,3006,1603,1,54,58,-1,-1,3,0,0,0,'','',0),(686,3006,1290,2,55,59,-1,-1,2,0,0,0,'','',0),(687,3006,1529,1,55,64,-1,-1,2,0,0,0,'','',0),(688,3006,1605,1,55,59,-1,-1,3,0,0,0,'','',0),(689,3006,4105,256,55,255,-1,-1,2,0,0,0,'','',0),(690,3006,1558,8,56,63,-1,-1,8,0,0,0,'','',0),(691,3006,1604,1,56,60,-1,-1,3,0,0,0,'','',0),(692,3006,1560,8,58,58,-1,-1,1,0,0,0,'','',0),(693,3006,1569,8,58,59,-1,-1,7,0,0,0,'','',0),(694,3006,1561,8,59,59,-1,-1,1,0,0,0,'','',0),(695,3006,1607,1,59,59,-1,-1,3,0,0,0,'','',0),(696,3006,1563,8,60,255,-1,-1,9,0,0,0,'','',0),(697,3006,1291,2,60,62,-1,-1,2,0,0,0,'','',0),(698,3006,2125,8,60,62,-1,-1,1,0,0,0,'','',0),(699,3006,2126,1,60,63,-1,-1,3,0,0,0,'','',0),(700,3006,2520,8,60,60,-1,-1,7,0,0,0,'','',0),(701,3006,2877,1,60,64,-1,-1,3,0,0,0,'','',0),(702,3006,3433,8,61,62,-1,-1,7,0,0,0,'','',0),(703,3006,3434,1,61,65,-1,-1,3,0,0,0,'','',0),(704,3006,5572,128,61,68,-1,-1,1,0,0,0,'','',0),(705,3006,3437,256,62,63,-1,-1,2,0,0,0,'','',0),(706,3006,3440,256,62,64,-1,-1,2,0,0,0,'','',0),(707,3006,3441,8,63,65,-1,-1,7,0,0,0,'','',0),(708,3006,3443,2,63,65,-1,-1,2,0,0,0,'','',0),(709,3006,3446,256,63,67,-1,-1,2,0,0,0,'','',0),(710,3006,3448,8,63,64,-1,-1,1,0,0,0,'','',0),(711,3006,3444,8,64,255,-1,-1,8,0,0,0,'','',0),(712,3006,3449,1,64,64,-1,-1,3,0,0,0,'','',0),(713,3006,4106,256,64,255,-1,-1,2,0,0,0,'','',0),(714,3006,3238,1,65,67,-1,-1,2,0,0,0,'','',0),(715,3006,3295,8,65,66,-1,-1,1,0,0,0,'','',0),(716,3006,4974,1,65,66,-1,-1,3,0,0,0,'','',0),(717,3006,4883,2,65,67,-1,-1,2,0,0,0,'','',0),(718,3006,4884,1,65,68,-1,-1,3,0,0,0,'','',0),(719,3006,4885,256,65,66,-1,-1,2,0,0,0,'','',0),(720,3006,5342,8,66,68,-1,-1,7,0,0,0,'','',0),(721,3006,5343,1,66,255,-1,-1,3,0,0,0,'','',0),(722,3006,5348,1,67,255,-1,-1,3,0,0,0,'','',0),(723,3006,5358,8,67,69,-1,-1,1,0,0,0,'','',0),(724,3006,5355,2,68,69,-1,-1,2,0,0,0,'','',0),(725,3006,5357,256,68,255,-1,-1,2,0,0,0,'','',0),(726,3006,8008,1,68,255,-1,-1,1,0,0,0,'','',0),(727,3006,5353,8,69,255,-1,-1,7,0,0,0,'','',0),(728,3006,5361,1,69,255,-1,-1,3,0,0,0,'','',0),(729,3006,6665,128,69,255,-1,-1,1,0,0,0,'','',0),(730,3006,5365,8,70,255,-1,-1,1,0,0,0,'','',0),(731,3006,6141,2,70,255,-1,-1,2,0,0,0,'','',0),(732,3003,5011,2,1,5,-1,-1,2,0,0,0,'','',0),(733,3003,200,2,6,11,-1,-1,2,0,0,0,'','',0),(734,3003,2581,1,7,12,-1,-1,3,0,0,0,'','',0),(735,3003,202,8,8,19,-1,-1,1,0,0,0,'','',0),(736,3003,17,2,12,26,-1,-1,2,0,0,0,'','',0),(737,3003,2582,1,13,27,-1,-1,3,0,0,0,'','',0),(738,3003,218,1,14,29,-1,-1,2,0,0,0,'','',0),(739,3003,11,8,15,29,-1,-1,2,0,0,0,'','',0),(740,3003,219,8,20,36,-1,-1,1,0,0,0,'','',0),(741,3003,485,8,24,32,-1,-1,3,0,0,0,'','',0),(742,3003,2583,8,26,62,-1,-1,5,0,0,0,'','',0),(743,3003,12,2,27,35,-1,-1,2,0,0,0,'','',0),(744,3003,216,1,28,41,-1,-1,3,0,0,0,'','',0),(745,3003,233,1,30,45,-1,-1,2,0,0,0,'','',0),(746,3003,368,8,30,38,-1,-1,2,0,0,0,'','',0),(747,3003,486,8,33,45,-1,-1,3,0,0,0,'','',0),(748,3003,2584,8,35,48,-1,-1,4,0,0,0,'','',0),(749,3003,15,2,36,51,-1,-1,2,0,0,0,'','',0),(750,3003,89,8,37,46,-1,-1,1,0,0,0,'','',0),(751,3003,18,8,39,47,-1,-1,2,0,0,0,'','',0),(752,3003,123,1,42,51,-1,-1,3,0,0,0,'','',0),(753,3003,2585,8,44,255,-1,-1,7,0,0,0,'','',0),(754,3003,3683,2,44,58,-1,-1,1,0,0,0,'','',0),(755,3003,117,1,46,53,-1,-1,2,0,0,0,'','',0),(756,3003,487,8,46,57,-1,-1,3,0,0,0,'','',0),(757,3003,312,8,47,59,-1,-1,1,0,0,0,'','',0),(758,3003,19,8,48,59,-1,-1,2,0,0,0,'','',0),(759,3003,207,16,48,255,-1,-1,1,0,0,0,'','',0),(760,3003,3578,8,49,52,-1,-1,4,0,0,0,'','',0),(761,3003,124,1,52,52,-1,-1,3,0,0,0,'','',0),(762,3003,3684,2,52,56,-1,-1,2,0,0,0,'','',0),(763,3003,1288,8,53,59,-1,-1,4,0,0,0,'','',0),(764,3003,3975,1,53,53,-1,-1,3,0,0,0,'','',0),(765,3003,2587,1,54,61,-1,-1,3,0,0,0,'','',0),(766,3003,662,1,54,61,-1,-1,2,0,0,0,'','',0),(767,3003,1743,8,55,255,-1,-1,2,0,0,0,'','',0),(768,3003,9,2,57,60,-1,-1,2,0,0,0,'','',0),(769,3003,488,8,58,62,-1,-1,3,0,0,0,'','',0),(770,3003,1283,2,59,63,-1,-1,1,0,0,0,'','',0),(771,3003,2590,8,60,64,-1,-1,4,0,0,0,'','',0),(772,3003,314,8,60,60,-1,-1,1,0,0,0,'','',0),(773,3003,20,8,60,64,-1,-1,2,0,0,0,'','',0),(774,3003,1533,8,61,63,-1,-1,1,0,0,0,'','',0),(775,3003,3429,2,61,62,-1,-1,2,0,0,0,'','',0),(776,3003,3245,1,62,63,-1,-1,3,0,0,0,'','',0),(777,3003,3428,1,62,66,-1,-1,2,0,0,0,'','',0),(778,3003,3430,2,63,64,-1,-1,2,0,0,0,'','',0),(779,3003,1535,8,63,64,-1,-1,3,0,0,0,'','',0),(780,3003,3424,8,63,64,-1,-1,5,0,0,0,'','',0),(781,3003,1538,8,64,64,-1,-1,1,0,0,0,'','',0),(782,3003,3426,1,64,64,-1,-1,3,0,0,0,'','',0),(783,3003,3247,8,64,68,-1,-1,9,0,0,0,'','',0),(784,3003,2589,2,64,255,-1,-1,2,0,0,0,'','',0),(785,3003,4894,2,65,67,-1,-1,2,0,0,0,'','',0),(786,3003,3432,8,65,69,-1,-1,4,0,0,0,'','',0),(787,3003,4109,8,65,69,-1,-1,2,0,0,0,'','',0),(788,3003,4895,8,65,67,-1,-1,5,0,0,0,'','',0),(789,3003,4977,1,65,65,-1,-1,3,0,0,0,'','',0),(790,3003,5284,1,66,67,-1,-1,3,0,0,0,'','',0),(791,3003,5286,1,67,67,-1,-1,2,0,0,0,'','',0),(792,3003,5289,2,68,255,-1,-1,2,0,0,0,'','',0),(793,3003,8027,1,68,255,-1,-1,2,0,0,0,'','',0),(794,3003,5288,8,68,255,-1,-1,5,0,0,0,'','',0),(795,3003,5292,1,68,69,-1,-1,3,0,0,0,'','',0),(796,3003,5291,8,69,255,-1,-1,9,0,0,0,'','',0),(797,3003,8029,8,69,255,-1,-1,10,0,0,0,'','',0),(798,3003,5298,8,70,255,-1,-1,2,0,0,0,'','',0),(799,3003,5297,8,70,255,-1,-1,4,0,0,0,'','',0),(800,3003,5299,1,70,255,-1,-1,3,0,0,0,'','',0),(801,3005,5012,1,1,33,-1,-1,5,0,0,0,'','',0),(802,3005,340,256,5,56,-1,-1,3,0,0,0,'','',0),(803,3005,491,32,7,13,-1,-1,0,0,0,0,'','',0),(804,3005,341,64,8,14,-1,-1,3,0,0,0,'','',0),(805,3005,2571,1,9,49,-1,-1,2,0,0,0,'','',0),(806,3005,344,128,11,19,-1,-1,1,0,0,0,'','',0),(807,3005,229,1,12,42,-1,45,4,0,0,0,'','',0),(808,3005,351,32,14,21,-1,-1,0,0,0,0,'','',0),(809,3005,502,64,15,28,-1,-1,3,0,0,0,'','',0),(810,3005,346,8,16,57,-1,-1,1,0,0,0,'','',0),(811,3005,355,128,20,43,-1,-1,1,0,0,0,'','',0),(812,3005,359,8,22,36,-1,-1,2,0,0,0,'','',0),(813,3005,362,32,22,29,-1,-1,0,0,0,0,'','',0),(814,3005,360,256,28,40,-1,-1,3,0,0,0,'','',0),(815,3005,1289,8,29,59,-1,-1,9,0,0,0,'','',0),(816,3005,445,64,29,46,-1,-1,3,0,0,0,'','',0),(817,3005,492,32,30,37,-1,-1,0,0,0,0,'','',0),(818,3005,236,8,31,55,-1,-1,8,0,0,0,'','',0),(819,3005,3561,1,34,47,-1,-1,5,0,0,0,'','',0),(820,3005,367,256,36,59,-1,-1,3,0,0,0,'','',0),(821,3005,2574,8,37,54,-1,-1,2,0,0,0,'','',0),(822,3005,370,1,37,49,-1,-1,2,0,0,0,'','',0),(823,3005,440,32,38,45,-1,-1,0,0,0,0,'','',0),(824,3005,3686,256,41,52,-1,-1,3,0,0,0,'','',0),(825,3005,127,1,43,56,-1,45,4,0,0,0,'','',0),(826,3005,452,128,44,58,-1,-1,1,0,0,0,'','',0),(827,3005,441,32,46,51,-1,-1,0,0,0,0,'','',0),(828,3005,692,64,47,56,-1,-1,3,0,0,0,'','',0),(829,3005,3560,1,48,53,-1,-1,5,0,0,0,'','',0),(830,3005,199,16,50,255,-1,-1,1,0,0,0,'','',0),(831,3005,442,32,52,57,-1,-1,0,0,0,0,'','',0),(832,3005,451,256,53,60,-1,-1,3,0,0,0,'','',0),(833,3005,3562,1,54,63,-1,-1,5,0,0,0,'','',0),(834,3005,1376,8,55,62,-1,-1,2,0,0,0,'','',0),(835,3005,393,8,56,58,-1,-1,8,0,0,0,'','',0),(836,3005,454,256,57,61,-1,-1,3,0,0,0,'','',0),(837,3005,525,64,57,59,-1,-1,3,0,0,0,'','',0),(838,3005,6986,1,57,61,-1,-1,4,0,0,0,'','',0),(839,3005,495,32,58,63,-1,-1,0,0,0,0,'','',0),(840,3005,394,8,59,255,-1,-1,8,0,0,0,'','',0),(841,3005,453,128,59,60,-1,-1,1,0,0,0,'','',0),(842,3005,661,8,60,63,-1,-1,9,0,0,0,'','',0),(843,3005,1508,256,60,65,-1,-1,3,0,0,0,'','',0),(844,3005,447,64,60,61,-1,-1,3,0,0,0,'','',0),(845,3005,3400,128,61,255,-1,-1,1,0,0,0,'','',0),(846,3005,6,256,61,62,-1,-1,3,0,0,0,'','',0),(847,3005,456,256,62,65,-1,-1,3,0,0,0,'','',0),(848,3005,3401,64,62,64,-1,-1,3,0,0,0,'','',0),(849,3005,3227,8,63,64,-1,-1,2,0,0,0,'','',0),(850,3005,3489,256,63,65,-1,-1,3,0,0,0,'','',0),(851,3005,6987,1,62,66,-1,-1,4,0,0,0,'','',0),(852,3005,1414,8,64,68,-1,-1,9,0,0,0,'','',0),(853,3005,3491,1,64,64,-1,-1,5,0,0,0,'','',0),(854,3005,443,32,64,67,-1,-1,0,0,0,0,'','',0),(855,3005,3413,64,65,66,-1,-1,3,0,0,0,'','',0),(856,3005,4904,1,65,68,-1,-1,5,0,0,0,'','',0),(857,3005,5323,256,66,255,-1,-1,3,0,0,0,'','',0),(858,3005,5320,256,66,67,-1,-1,3,0,0,0,'','',0),(859,3005,5322,256,66,255,-1,-1,3,0,0,0,'','',0),(860,3005,5327,8,67,255,-1,-1,2,0,0,0,'','',0),(861,3005,5324,64,67,69,-1,-1,3,0,0,0,'','',0),(862,3005,6988,1,67,255,-1,-1,4,0,0,0,'','',0),(863,3005,5330,256,68,255,-1,-1,3,0,0,0,'','',0),(864,3005,5331,32,68,255,-1,-1,0,0,0,0,'','',0),(865,3005,5332,8,69,255,-1,-1,9,0,0,0,'','',0),(866,3005,5334,1,69,255,-1,-1,5,0,0,0,'','',0),(867,3005,5338,64,70,255,-1,-1,3,0,0,0,'','',0),(868,3004,5011,2,1,7,-1,-1,2,0,0,0,'','',0),(869,3004,239,256,3,43,-1,-1,3,0,0,0,'','',0),(870,3004,2591,128,5,5,-1,-1,1,0,0,0,'','',0),(871,3004,242,128,6,50,-1,-1,1,0,0,0,'','',0),(872,3004,26,8,7,20,-1,-1,1,0,0,0,'','',0),(873,3004,200,2,8,20,-1,-1,2,0,0,0,'','',0),(874,3004,2592,8,11,51,-1,-1,9,0,0,0,'','',0),(875,3004,269,8,12,54,-1,-1,8,0,0,0,'','',0),(876,3004,515,8,13,29,-1,-1,7,0,0,0,'','',0),(877,3004,92,1,14,18,-1,-1,4,0,0,0,'','',0),(878,3004,254,8,17,36,-1,-1,6,0,0,0,'','',0),(879,3004,91,1,19,28,-1,-1,4,0,0,0,'','',0),(880,3004,17,2,21,37,-1,-1,2,0,0,0,'','',0),(881,3004,263,8,21,37,-1,-1,1,0,0,0,'','',0),(882,3004,256,8,24,42,-1,-1,5,0,0,0,'','',0),(883,3004,264,256,25,39,-1,-1,3,0,0,0,'','',0),(884,3004,268,8,26,52,-1,-1,4,0,0,0,'','',0),(885,3004,2593,8,29,47,-1,-1,2,0,0,0,'','',0),(886,3004,3565,1,29,38,-1,-1,4,0,0,0,'','',0),(887,3004,516,8,30,33,-1,-1,7,0,0,0,'','',0),(888,3004,517,8,34,41,-1,-1,7,0,0,0,'','',0),(889,3004,1461,8,36,54,-1,-1,10,0,0,0,'','',0),(890,3004,2594,8,37,50,-1,-1,6,0,0,0,'','',0),(891,3004,12,2,38,56,-1,-1,2,0,0,0,'','',0),(892,3004,421,8,38,53,-1,-1,1,0,0,0,'','',0),(893,3004,3564,1,39,48,-1,-1,4,0,0,0,'','',0),(894,3004,3687,256,40,53,-1,-1,3,0,0,0,'','',0),(895,3004,518,8,42,59,-1,-1,7,0,0,0,'','',0),(896,3004,129,8,43,57,-1,-1,5,0,0,0,'','',0),(897,3004,78,256,44,255,-1,-1,3,0,0,0,'','',0),(898,3004,2595,8,48,49,-1,-1,2,0,0,0,'','',0),(899,3004,691,1,49,51,-1,-1,4,0,0,0,'','',0),(900,3004,1462,8,50,61,-1,-1,2,0,0,0,'','',0),(901,3004,1741,16,50,54,-1,-1,1,0,0,0,'','',0),(902,3004,1397,8,51,61,-1,-1,6,0,0,0,'','',0),(903,3004,512,128,51,60,-1,-1,1,0,0,0,'','',0),(904,3004,2596,8,52,57,-1,-1,9,0,0,0,'','',0),(905,3004,57,1,52,58,-1,-1,4,0,0,0,'','',0),(906,3004,430,8,53,255,-1,-1,4,0,0,0,'','',0),(907,3004,259,256,54,61,-1,-1,3,0,0,0,'','',0),(908,3004,422,8,54,58,-1,-1,1,0,0,0,'','',0),(909,3004,1296,16,55,255,-1,-1,1,0,0,0,'','',0),(910,3004,145,8,55,63,-1,-1,8,0,0,0,'','',0),(911,3004,1463,8,55,57,-1,-1,10,0,0,0,'','',0),(912,3004,15,2,57,61,-1,-1,2,0,0,0,'','',0),(913,3004,432,8,58,61,-1,-1,5,0,0,0,'','',0),(914,3004,4059,8,58,63,-1,-1,10,0,0,0,'','',0),(915,3004,2599,8,58,255,-1,-1,9,0,0,0,'','',0),(916,3004,423,8,59,64,-1,-1,1,0,0,0,'','',0),(917,3004,1740,1,59,63,-1,-1,4,0,0,0,'','',0),(918,3004,519,8,60,62,-1,-1,7,0,0,0,'','',0),(919,3004,6732,128,61,68,-1,-1,1,0,0,0,'','',0),(920,3004,3419,8,62,66,-1,-1,2,0,0,0,'','',0),(921,3004,356,8,62,65,-1,-1,5,0,0,0,'','',0),(922,3004,3487,8,62,66,-1,-1,6,0,0,0,'','',0),(923,3004,665,256,62,66,-1,-1,3,0,0,0,'','',0),(924,3004,1290,2,62,64,-1,-1,2,0,0,0,'','',0),(925,3004,1558,8,63,67,-1,-1,7,0,0,0,'','',0),(926,3004,1568,8,64,67,-1,-1,8,0,0,0,'','',0),(927,3004,3415,8,64,64,-1,-1,10,0,0,0,'','',0),(928,3004,3431,1,64,64,-1,-1,4,0,0,0,'','',0),(929,3004,1559,8,65,69,-1,-1,1,0,0,0,'','',0),(930,3004,4898,8,65,68,-1,-1,10,0,0,0,'','',0),(931,3004,4980,1,65,68,-1,-1,4,0,0,0,'','',0),(932,3004,4896,2,65,66,-1,-1,2,0,0,0,'','',0),(933,3004,5302,8,66,255,-1,-1,5,0,0,0,'','',0),(934,3004,5305,8,66,255,-1,-1,2,0,0,0,'','',0),(935,3004,5306,8,67,255,-1,-1,6,0,0,0,'','',0),(936,3004,5303,256,67,255,-1,-1,3,0,0,0,'','',0),(937,3004,5304,2,67,255,-1,-1,2,0,0,0,'','',0),(938,3004,5307,8,68,255,-1,-1,7,0,0,0,'','',0),(939,3004,5310,8,68,255,-1,-1,8,0,0,0,'','',0),(940,3004,5311,8,69,255,-1,-1,10,0,0,0,'','',0),(941,3004,6664,128,69,255,-1,-1,1,0,0,0,'','',0),(942,3004,5313,1,69,69,-1,-1,4,0,0,0,'','',0),(943,3004,5315,8,70,255,-1,-1,1,0,0,0,'','',0),(944,3004,5319,1,70,255,-1,-1,4,0,0,0,'','',0),(992,3015,5011,2,1,5,-1,-1,2,0,0,0,'','',0),(993,3015,200,2,6,19,-1,-1,2,0,0,0,'','',0),(994,3015,267,8,7,19,-1,-1,9,0,0,0,'','',0),(995,3015,2612,32,8,14,-1,-1,0,0,0,0,'','',0),(996,3015,2611,2,9,14,-1,-1,2,0,0,0,'','',0),(997,3015,274,8,10,25,-1,-1,8,0,0,0,'','',0),(998,3015,2068,1,12,25,-1,-1,4,0,0,0,'','',0),(999,3015,2635,8,13,17,-1,-1,6,0,0,0,'','',0),(1000,3015,40,8,14,27,-1,-1,5,0,0,0,'','',0),(1001,3015,75,256,14,39,-1,-1,3,0,0,0,'','',0),(1002,3015,2613,2,15,26,-1,-1,2,0,0,0,'','',0),(1003,3015,2633,32,15,20,-1,-1,0,0,0,0,'','',0),(1004,3015,279,8,17,36,-1,-1,4,0,0,0,'','',0),(1005,3015,2636,8,18,27,-1,-1,6,0,0,0,'','',0),(1006,3015,277,256,19,34,-1,-1,3,0,0,0,'','',0),(1007,3015,270,1,20,49,-1,-1,3,0,0,0,'','',0),(1008,3015,17,2,20,35,-1,-1,2,0,0,0,'','',0),(1009,3015,2614,32,21,29,-1,-1,0,0,0,0,'','',0),(1010,3015,282,1,26,32,-1,-1,4,0,0,0,'','',0),(1011,3015,283,8,26,36,-1,-1,8,0,0,0,'','',0),(1012,3015,2615,2,27,35,-1,-1,2,0,0,0,'','',0),(1013,3015,147,8,28,40,-1,-1,5,0,0,0,'','',0),(1014,3015,2637,8,28,37,-1,-1,6,0,0,0,'','',0),(1015,3015,2616,32,30,38,-1,-1,0,0,0,0,'','',0),(1016,3015,3568,1,33,46,-1,-1,4,0,0,0,'','',0),(1017,3015,434,256,35,51,-1,-1,3,0,0,0,'','',0),(1018,3015,48,512,35,57,-1,-1,6,0,0,0,'','',0),(1019,3015,12,2,36,56,-1,-1,2,0,0,0,'','',0),(1020,3015,2617,2,36,48,-1,-1,2,0,0,0,'','',0),(1021,3015,2619,8,37,51,-1,-1,8,0,0,0,'','',0),(1022,3015,149,8,37,51,-1,-1,3,0,0,0,'','',0),(1023,3015,2638,8,38,45,-1,-1,6,0,0,0,'','',0),(1024,3015,2618,32,39,45,-1,-1,0,0,0,0,'','',0),(1025,3015,3689,256,40,64,-1,-1,3,0,0,0,'','',0),(1026,3015,151,8,41,53,-1,-1,5,0,0,0,'','',0),(1027,3015,2176,8,41,51,-1,-1,4,0,0,0,'','',0),(1028,3015,2178,8,42,59,-1,-1,2,0,0,0,'','',0),(1029,3015,2621,32,46,53,-1,-1,0,0,0,0,'','',0),(1030,3015,2639,8,46,50,-1,-1,6,0,0,0,'','',0),(1031,3015,308,8,47,255,-1,-1,7,0,0,0,'','',0),(1032,3015,3569,1,47,53,-1,-1,4,0,0,0,'','',0),(1033,3015,2620,2,49,51,-1,-1,2,0,0,0,'','',0),(1034,3015,2634,1,50,59,-1,-1,3,0,0,0,'','',0),(1035,3015,2640,8,51,52,-1,-1,6,0,0,0,'','',0),(1036,3015,161,8,52,56,-1,-1,3,0,0,0,'','',0),(1037,3015,2177,8,52,58,-1,-1,4,0,0,0,'','',0),(1038,3015,2622,2,52,54,-1,-1,2,0,0,0,'','',0),(1039,3015,3690,8,52,54,-1,-1,8,0,0,0,'','',0),(1040,3015,435,256,52,60,-1,-1,3,0,0,0,'','',0),(1041,3015,167,8,53,57,-1,-1,6,0,0,0,'','',0),(1042,3015,153,8,54,255,-1,-1,5,0,0,0,'','',0),(1043,3015,2623,32,54,55,-1,-1,0,0,0,0,'','',0),(1044,3015,3570,1,54,58,-1,-1,4,0,0,0,'','',0),(1045,3015,2625,8,55,58,-1,-1,8,0,0,0,'','',0),(1046,3015,145,8,55,63,-1,-1,1,0,0,0,'','',0),(1047,3015,2626,32,56,57,-1,-1,0,0,0,0,'','',0),(1048,3015,15,2,57,61,-1,-1,2,0,0,0,'','',0),(1049,3015,158,8,57,255,-1,-1,3,0,0,0,'','',0),(1050,3015,168,8,58,61,-1,-1,6,0,0,0,'','',0),(1051,3015,2627,32,58,59,-1,-1,0,0,0,0,'','',0),(1052,3015,49,512,58,59,-1,-1,6,0,0,0,'','',0),(1053,3015,2628,8,59,62,-1,-1,8,0,0,0,'','',0),(1054,3015,2629,8,59,63,-1,-1,4,0,0,0,'','',0),(1055,3015,510,1,59,62,-1,-1,4,0,0,0,'','',0),(1056,3015,2941,8,60,64,-1,-1,10,0,0,0,'','',0),(1057,3015,2630,8,60,61,-1,-1,2,0,0,0,'','',0),(1058,3015,2631,32,60,61,-1,-1,0,0,0,0,'','',0),(1059,3015,2942,1,60,64,-1,-1,3,0,0,0,'','',0),(1060,3015,3492,256,61,65,-1,-1,3,0,0,0,'','',0),(1061,3015,3456,8,62,66,-1,-1,2,0,0,0,'','',0),(1062,3015,1585,8,62,66,-1,-1,6,0,0,0,'','',0),(1063,3015,1290,2,62,64,-1,-1,2,0,0,0,'','',0),(1064,3015,3457,32,62,63,-1,-1,0,0,0,0,'','',0),(1065,3015,3458,8,63,67,-1,-1,8,0,0,0,'','',0),(1066,3015,3493,1,63,64,-1,-1,4,0,0,0,'','',0),(1067,3015,1568,8,64,68,-1,-1,1,0,0,0,'','',0),(1068,3015,3460,8,64,68,-1,-1,4,0,0,0,'','',0),(1069,3015,3461,32,64,67,-1,-1,0,0,0,0,'','',0),(1070,3015,3463,8,65,69,-1,-1,10,0,0,0,'','',0),(1071,3015,32,256,65,69,-1,-1,3,0,0,0,'','',0),(1072,3015,3462,1,65,69,-1,-1,3,0,0,0,'','',0),(1073,3015,4972,1,65,68,-1,-1,4,0,0,0,'','',0),(1074,3015,4875,2,65,66,-1,-1,2,0,0,0,'','',0),(1075,3015,5527,256,66,255,-1,-1,3,0,0,0,'','',0),(1076,3015,5530,8,67,255,-1,-1,2,0,0,0,'','',0),(1077,3015,5529,8,67,255,-1,-1,6,0,0,0,'','',0),(1078,3015,5528,2,67,255,-1,-1,2,0,0,0,'','',0),(1079,3015,5533,8,68,255,-1,-1,8,0,0,0,'','',0),(1080,3015,5531,32,68,69,-1,-1,0,0,0,0,'','',0),(1081,3015,5536,8,69,255,-1,-1,1,0,0,0,'','',0),(1082,3015,5537,8,69,255,-1,-1,4,0,0,0,'','',0),(1083,3015,5535,1,69,69,-1,-1,4,0,0,0,'','',0),(1084,3015,5542,8,70,255,-1,-1,10,0,0,0,'','',0),(1085,3015,5540,256,70,255,-1,-1,3,0,0,0,'','',0),(1086,3015,6828,1,70,255,-1,-1,3,0,0,0,'','',0),(1087,3015,5543,1,70,255,-1,-1,4,0,0,0,'','',0),(1088,3015,5538,32,70,255,-1,-1,0,0,0,0,'','',0),(1089,3006,425,8,20,255,-1,-1,0,0,0,0,'','',0),(1090,3014,190,2048,47,55,-1,-1,0,0,0,0,'','',0),(1091,3014,292,2048,2,12,-1,-1,0,0,0,0,'','',0),(1092,3014,187,2048,13,29,-1,-1,0,0,0,0,'','',0),(1093,3014,188,2048,30,46,-1,-1,0,0,0,0,'','',0),(1094,3014,1691,2048,54,58,-1,-1,0,0,0,0,'','',0),(1095,3014,1692,2048,59,59,-1,-1,0,0,0,0,'','',0),(1096,3014,2120,2048,60,60,-1,-1,0,0,0,0,'','',0),(1097,3014,3341,2048,61,62,-1,-1,0,0,0,0,'','',0),(1098,3014,3354,2048,63,63,-1,-1,0,0,0,0,'','',0),(1099,3014,3358,2048,64,66,-1,-1,0,0,0,0,'','',0),(1100,3014,5503,2048,67,67,-1,-1,0,0,0,0,'','',0),(1101,3014,8035,2048,68,68,-1,-1,0,0,0,0,'','',0),(1102,3014,5520,2048,69,255,-1,-1,0,0,0,0,'','',0),(1103,3005,343,16384,6,51,-1,-1,3,0,0,0,'','',0),(1104,3005,2572,16384,15,34,-1,-1,3,0,0,0,'','',0),(1105,3005,2573,16384,23,49,-1,-1,3,0,0,0,'','',0),(1106,3005,1457,16384,35,53,-1,-1,3,0,0,0,'','',0),(1107,3005,1458,16384,50,55,-1,-1,3,0,0,0,'','',0),(1108,3005,2575,16384,52,59,-1,-1,3,0,0,0,'','',0),(1109,3005,2577,16384,54,64,-1,-1,3,0,0,0,'','',0),(1110,3005,2578,16384,56,62,-1,-1,3,0,0,0,'','',0),(1111,3005,2579,16384,58,65,-1,-1,3,0,0,0,'','',0),(1112,3005,3406,16384,61,70,-1,-1,2,0,0,0,'','',0),(1113,3006,3435,16384,61,85,-1,-1,2,0,0,0,'','',0),(1114,3006,5351,16384,67,73,-1,-1,2,0,0,0,'','',0),(1115,3006,5354,16384,67,71,-1,-1,2,0,0,0,'','',0),(1116,3011,343,16384,1,12,-1,-1,3,0,0,0,'','',0),(1117,3011,1511,16384,10,20,-1,-1,3,0,0,0,'','',0),(1118,3011,1512,16384,21,36,-1,-1,3,0,0,0,'','',0),(1119,3011,1513,16384,37,51,-1,-1,3,0,0,0,'','',0),(1120,3011,1716,16384,52,67,-1,-1,3,0,0,0,'','',0),(1121,3011,2546,16384,52,65,-1,-1,3,0,0,0,'','',0),(1122,3011,5427,16384,68,71,-1,-1,3,0,0,0,'','',0),(1123,3013,110,16384,22,43,-1,-1,2,0,0,0,'','',0),(1124,3013,111,16384,44,50,-1,-1,2,0,0,0,'','',0),(1125,3013,112,16384,51,57,-1,-1,2,0,0,0,'','',0),(1126,3013,1577,16384,58,59,-1,-1,2,0,0,0,'','',0),(1127,3013,1772,16384,60,255,-1,-1,1,0,0,0,'','',0),(1128,3013,3387,16384,63,70,-1,-1,2,0,0,0,'','',0),(1129,3014,41,16384,1,3,-1,-1,3,0,0,0,'','',0),(1130,3014,676,16384,2,17,-1,-1,1,0,0,0,'','',0),(1131,3014,291,16384,4,8,-1,-1,3,0,0,0,'','',0),(1132,3014,645,16384,9,18,-1,-1,3,0,0,0,'','',0),(1133,3014,281,16384,16,24,-1,-1,3,0,0,0,'','',0),(1134,3014,677,16384,18,40,-1,-1,1,0,0,0,'','',0),(1135,3014,179,16384,19,33,-1,-1,4,0,0,0,'','',0),(1136,3014,162,16384,25,39,-1,-1,3,0,0,0,'','',0),(1137,3014,180,16384,34,41,-1,-1,4,0,0,0,'','',0),(1138,3014,163,16384,40,52,-1,-1,3,0,0,0,'','',0),(1139,3014,678,16384,41,56,-1,-1,1,0,0,0,'','',0),(1140,3014,181,16384,42,52,-1,-1,4,0,0,0,'','',0),(1141,3014,1592,16384,53,65,-1,-1,3,0,0,0,'','',0),(1142,3014,1702,16384,57,60,-1,-1,1,0,0,0,'','',0),(1143,3014,3342,16384,61,71,-1,-1,1,0,0,0,'','',0),(1144,3014,5499,16384,66,70,-1,-1,3,0,0,0,'','',0),(1145,3015,162,16384,44,55,-1,-1,2,0,0,0,'','',0),(1146,3015,163,16384,56,65,-1,-1,2,0,0,0,'','',0),(1147,3006,14312,16384,71,75,-1,-1,3,0,0,0,'','',0),(1148,3006,14313,16384,71,75,-1,-1,3,0,0,0,'','',0),(1149,3006,14314,16384,71,75,-1,-1,3,0,0,0,'','',0),(1150,3006,0,16384,76,80,-1,-1,2,0,0,0,'','',0),(1151,3006,18392,16384,81,85,-1,-1,2,0,0,0,'','',0),(1152,3006,18393,16384,81,85,-1,-1,2,0,0,0,'','',0),(1153,3006,18394,16384,81,85,-1,-1,2,0,0,0,'','',0),(1154,3011,10516,16384,72,76,-1,-1,3,0,0,0,'','',0),(1155,3011,10517,16384,72,76,-1,-1,3,0,0,0,'','',0),(1156,3011,10518,16384,72,76,-1,-1,3,0,0,0,'','',0),(1157,3011,0,16384,77,81,-1,-1,3,0,0,0,'','',0),(1158,3011,18970,16384,82,86,-1,-1,3,0,0,0,'','',0),(1159,3011,18971,16384,82,86,-1,-1,3,0,0,0,'','',0),(1160,3011,18972,16384,82,86,-1,-1,3,0,0,0,'','',0),(1161,3013,15186,16384,76,80,-1,-1,2,0,0,0,'','',0),(1162,3013,15187,16384,76,80,-1,-1,2,0,0,0,'','',0),(1163,3013,15188,16384,76,80,-1,-1,2,0,0,0,'','',0),(1164,3013,18726,16384,81,85,-1,-1,2,0,0,0,'','',0),(1165,3013,18727,16384,81,85,-1,-1,2,0,0,0,'','',0),(1166,3013,18728,16384,81,85,-1,-1,2,0,0,0,'','',0),(1167,3014,14446,16384,71,75,-1,-1,3,0,0,0,'','',0),(1168,3014,14447,16384,71,75,-1,-1,3,0,0,0,'','',0),(1169,3014,14467,16384,72,76,-1,-1,1,0,0,0,'','',0),(1170,3014,14468,16384,72,76,-1,-1,1,0,0,0,'','',0),(1171,3014,14469,16384,72,76,-1,-1,1,0,0,0,'','',0),(1172,3014,0,16384,77,81,-1,-1,1,0,0,0,'','',0),(1173,3014,18552,16384,81,85,-1,-1,3,0,0,0,'','',0),(1174,3014,18553,16384,81,85,-1,-1,3,0,0,0,'','',0),(1175,3014,18554,16384,81,85,-1,-1,3,0,0,0,'','',0),(1176,3014,18573,16384,82,86,-1,-1,1,0,0,0,'','',0),(1177,3014,18574,16384,82,86,-1,-1,1,0,0,0,'','',0),(1178,3014,18575,16384,82,86,-1,-1,1,0,0,0,'','',0),(1179,3002,203,32768,1,21,-1,-1,2,0,0,0,'','',0),(1180,3002,213,32768,4,27,-1,-1,2,0,0,0,'','',0),(1181,3002,4056,32768,8,22,-1,-1,2,0,0,0,'','',0),(1182,3002,95,32768,22,47,-1,-1,2,0,0,0,'','',0),(1183,3002,4057,32768,23,37,-1,-1,2,0,0,0,'','',0),(1184,3002,96,32768,28,50,-1,-1,2,0,0,0,'','',0),(1185,3002,2946,32768,38,53,-1,-1,2,0,0,0,'','',0),(1186,3002,97,32768,48,57,-1,-1,2,0,0,0,'','',0),(1187,3002,3693,32768,51,83,-1,-1,3,0,0,0,'','',0),(1188,3002,2880,32768,54,255,-1,-1,2,0,0,0,'','',0),(1189,3002,1525,32768,58,83,-1,-1,2,0,0,0,'','',0),(1190,3003,203,32768,5,33,-1,-1,2,0,0,0,'','',0),(1191,3003,213,32768,11,55,-1,-1,2,0,0,0,'','',0),(1192,3003,4056,32768,19,33,-1,-1,2,0,0,0,'','',0),(1193,3003,95,32768,34,61,-1,-1,2,0,0,0,'','',0),(1194,3003,4057,32768,34,44,-1,-1,2,0,0,0,'','',0),(1195,3003,2946,32768,45,59,-1,-1,2,0,0,0,'','',0),(1196,3003,96,32768,56,61,-1,-1,2,0,0,0,'','',0),(1197,3003,2880,32768,60,255,-1,-1,2,0,0,0,'','',0),(1198,3003,3190,32768,62,66,-1,-1,2,0,0,0,'','',0),(1199,3003,5283,32768,67,80,-1,-1,2,0,0,0,'','',0),(1200,3004,203,32768,13,60,-1,-1,2,0,0,0,'','',0),(1201,3004,213,32768,22,60,-1,-1,2,0,0,0,'','',0),(1202,3004,95,32768,61,72,-1,-1,2,0,0,0,'','',0),(1203,3004,96,32768,61,72,-1,-1,2,0,0,0,'','',0),(1204,3005,213,32768,19,255,-1,-1,2,0,0,0,'','',0),(1205,3006,213,32768,4,27,-1,-1,2,0,0,0,'','',0),(1206,3006,203,32768,5,27,-1,-1,2,0,0,0,'','',0),(1207,3006,95,32768,28,51,-1,-1,2,0,0,0,'','',0),(1208,3006,96,32768,28,51,-1,-1,2,0,0,0,'','',0),(1209,3006,3693,32768,52,83,-1,-1,2,0,0,0,'','',0),(1212,3010,213,32768,1,21,-1,-1,2,0,0,0,'','',0),(1213,3010,203,32768,2,25,-1,-1,2,0,0,0,'','',0),(1214,3010,4056,32768,9,23,-1,-1,2,0,0,0,'','',0),(1215,3010,96,32768,22,47,-1,-1,2,0,0,0,'','',0),(1216,3010,4057,32768,24,37,-1,-1,2,0,0,0,'','',0),(1217,3010,95,32768,26,51,-1,-1,2,0,0,0,'','',0),(1218,3010,2946,32768,38,53,-1,-1,2,0,0,0,'','',0),(1219,3010,98,32768,48,51,-1,-1,2,0,0,0,'','',0),(1220,3010,2526,32768,52,84,-1,-1,2,0,0,0,'','',0),(1221,3010,3842,32768,52,84,-1,-1,2,0,0,0,'','',0),(1222,3010,2880,32768,54,255,-1,-1,2,0,0,0,'','',0),(1223,3015,213,32768,4,44,-1,-1,2,0,0,0,'','',0),(1224,3015,203,32768,13,60,-1,-1,2,0,0,0,'','',0),(1225,3015,96,32768,45,62,-1,-1,2,0,0,0,'','',0),(1226,3015,95,32768,61,255,-1,-1,2,0,0,0,'','',0),(1227,3015,98,32768,63,255,-1,-1,2,0,0,0,'','',0),(1228,3002,14267,32768,74,78,-1,-1,2,0,0,0,'','',0),(1229,3002,14268,32768,74,78,-1,-1,2,0,0,0,'','',0),(1230,3002,14269,32768,74,78,-1,-1,2,0,0,0,'','',0),(1231,3002,18306,32768,84,255,-1,-1,2,0,0,0,'','',0),(1232,3002,18307,32768,84,255,-1,-1,2,0,0,0,'','',0),(1233,3002,18308,32768,84,255,-1,-1,2,0,0,0,'','',0),(1234,3002,18389,32768,84,255,-1,-1,2,0,0,0,'','',0),(1235,3002,18390,32768,84,255,-1,-1,2,0,0,0,'','',0),(1236,3002,18391,32768,84,255,-1,-1,2,0,0,0,'','',0),(1237,3003,19128,32768,81,255,-1,-1,2,0,0,0,'','',0),(1238,3003,19129,32768,81,255,-1,-1,2,0,0,0,'','',0),(1239,3003,19130,32768,81,255,-1,-1,2,0,0,0,'','',0),(1240,3004,14955,32768,73,77,-1,-1,2,0,0,0,'','',0),(1241,3004,14956,32768,73,77,-1,-1,2,0,0,0,'','',0),(1242,3004,0,32768,78,82,-1,-1,2,0,0,0,'','',0),(1243,3004,19146,32768,83,87,-1,-1,2,0,0,0,'','',0),(1244,3004,19147,32768,83,87,-1,-1,2,0,0,0,'','',0),(1245,3004,19148,32768,83,87,-1,-1,2,0,0,0,'','',0),(1246,3006,9700,32768,71,83,-1,-1,2,0,0,0,'','',0),(1247,3006,9701,32768,71,83,-1,-1,2,0,0,0,'','',0),(1248,3006,9702,32768,71,83,-1,-1,2,0,0,0,'','',0),(1249,3006,18389,32768,84,88,-1,-1,2,0,0,0,'','',0),(1250,3006,18390,32768,84,88,-1,-1,2,0,0,0,'','',0),(1251,3006,18391,32768,84,88,-1,-1,2,0,0,0,'','',0),(1258,3010,9700,32768,72,73,-1,-1,2,0,0,0,'','',0),(1259,3010,9701,32768,72,73,-1,-1,2,0,0,0,'','',0),(1260,3010,9702,32768,72,73,-1,-1,2,0,0,0,'','',0),(1261,3010,14387,32768,74,78,-1,-1,2,0,0,0,'','',0),(1262,3010,14388,32768,74,78,-1,-1,2,0,0,0,'','',0),(1263,3010,14389,32768,74,78,-1,-1,2,0,0,0,'','',0),(1264,3010,0,32768,79,83,-1,-1,2,0,0,0,'','',0),(1265,3010,18467,32768,84,88,-1,-1,2,0,0,0,'','',0),(1266,3010,18468,32768,84,88,-1,-1,2,0,0,0,'','',0),(1267,3010,18469,32768,84,88,-1,-1,2,0,0,0,'','',0),(1268,3010,19513,32768,85,89,-1,-1,2,0,0,0,'','',0),(1269,3010,19514,32768,85,89,-1,-1,2,0,0,0,'','',0),(1270,3010,19515,32768,85,89,-1,-1,2,0,0,0,'','',0),(2048,3008,0,4294901760,0,0,-1,-1,0,0,0,0,'','',0),(2049,3008,704,1,12,54,-1,-1,1,0,0,0,'','',0),(2050,3008,1747,1,55,127,-1,-1,1,0,0,0,'','',0),(2051,3008,1749,16,60,127,-1,-1,1,0,0,0,'','',0),(2052,3008,743,256,38,64,-1,-1,1,0,0,0,'','',0),(2053,3008,3367,256,65,69,-1,-1,1,0,0,0,'','',0),(2054,3008,5385,256,70,79,-1,-1,1,0,0,0,'','',0),(2055,3008,14074,256,80,84,-1,-1,1,0,0,0,'','',0),(2056,3008,18059,256,85,89,-1,-1,1,0,0,0,'','',0),(2057,3008,26084,256,90,94,-1,-1,1,0,0,0,'','',0),(2058,3008,29182,256,95,127,-1,-1,1,0,0,0,'','',0),(2059,3008,3566,256,50,62,-1,-1,2,0,0,0,'','',0),(2060,3008,3370,256,63,67,-1,-1,2,0,0,0,'','',0),(2061,3008,5378,256,68,77,-1,-1,2,0,0,0,'','',0),(2062,3008,14071,256,78,82,-1,-1,2,0,0,0,'','',0),(2063,3008,18056,256,83,87,-1,-1,2,0,0,0,'','',0),(2064,3008,26033,256,88,92,-1,-1,2,0,0,0,'','',0),(2065,3008,29128,256,93,127,-1,-1,2,0,0,0,'','',0),(2066,3008,744,256,46,62,-1,-1,3,0,0,0,'','',0),(2067,3008,3373,256,63,66,-1,-1,3,0,0,0,'','',0),(2068,3008,5379,256,67,76,-1,-1,3,0,0,0,'','',0),(2069,3008,14068,256,77,81,-1,-1,3,0,0,0,'','',0),(2070,3008,18053,256,82,86,-1,-1,3,0,0,0,'','',0),(2071,3008,26003,256,87,91,-1,-1,3,0,0,0,'','',0),(2072,3008,29101,256,92,127,-1,-1,3,0,0,0,'','',0),(2073,3008,3567,256,42,60,-1,-1,4,0,0,0,'','',0),(2074,3008,3363,256,61,65,-1,-1,4,0,0,0,'','',0),(2075,3008,5371,256,66,75,-1,-1,4,0,0,0,'','',0),(2076,3008,14065,256,76,80,-1,-1,4,0,0,0,'','',0),(2077,3008,18050,256,81,85,-1,-1,4,0,0,0,'','',0),(2078,3008,25976,256,86,90,-1,-1,4,0,0,0,'','',0),(2079,3008,29077,256,91,127,-1,-1,4,0,0,0,'','',0),(2080,3008,707,256,30,59,-1,-1,5,0,0,0,'','',0),(2081,3008,4210,256,60,127,-1,-1,5,0,0,0,'','',0),(2082,3008,738,8192,23,50,-1,-1,1,0,0,0,'','',0),(2083,3008,1751,8192,51,59,-1,-1,1,0,0,0,'','',0),(2084,3008,1748,8192,60,63,-1,-1,1,0,0,0,'','',0),(2085,3008,3066,8192,64,127,-1,-1,1,0,0,0,'','',0),(2086,3008,738,8192,51,63,-1,-1,2,0,0,0,'','',0),(2087,3008,1751,8192,64,127,-1,-1,2,0,0,0,'','',0),(2088,3008,738,8192,64,127,-1,-1,3,0,0,0,'','',0),(2089,3008,3682,32768,45,85,-1,-1,1,0,0,0,'','',0),(2090,3008,25958,32768,86,90,-1,-1,1,0,0,0,'','',0),(2091,3008,29059,32768,91,127,-1,-1,1,0,0,0,'','',0),(2092,3008,3681,32768,52,127,-1,-1,2,0,0,0,'','',0),(2093,3008,10448,32768,74,78,-1,-1,3,0,0,0,'','',0),(2094,3008,14029,32768,79,83,-1,-1,3,0,0,0,'','',0),(2095,3008,18023,32768,84,127,-1,-1,3,0,0,0,'','',0),(2096,3008,1754,131072,53,127,-1,-1,1,0,0,0,'','',0),(2097,3008,10436,131072,73,127,-1,-1,2,0,0,0,'','',0),(2098,3008,2606,262144,52,59,-1,-1,1,0,0,0,'','',0),(2099,3008,2610,262144,60,127,-1,-1,1,0,0,0,'','',0),(2100,3008,700,262144,1,9,-1,-1,2,0,0,0,'','',0),(2101,3008,701,262144,10,35,-1,-1,2,0,0,0,'','',0),(2102,3008,740,262144,36,41,-1,-1,2,0,0,0,'','',0),(2103,3008,702,262144,42,49,-1,-1,2,0,0,0,'','',0),(2104,3008,747,262144,50,61,-1,-1,2,0,0,0,'','',0),(2105,3008,3374,262144,62,64,-1,-1,2,0,0,0,'','',0),(2106,3008,4871,262144,65,67,-1,-1,2,0,0,0,'','',0),(2107,3008,5376,262144,68,78,-1,-1,2,0,0,0,'','',0),(2108,3008,14080,262144,79,83,-1,-1,2,0,0,0,'','',0),(2109,3008,18065,262144,84,88,-1,-1,2,0,0,0,'','',0),(2110,3008,26042,262144,89,93,-1,-1,2,0,0,0,'','',0),(2111,3008,29143,262144,94,127,-1,-1,2,0,0,0,'','',0),(2112,3008,7,262144,6,19,-1,-1,2,0,0,0,'','',0),(2113,3008,1287,262144,20,31,-1,-1,3,0,0,0,'','',0),(2114,3008,723,262144,32,33,-1,-1,3,0,0,0,'','',0),(2115,3008,1448,262144,34,54,-1,-1,3,0,0,0,'','',0),(2116,3008,1759,262144,55,61,-1,-1,3,0,0,0,'','',0),(2117,3008,3651,262144,62,66,-1,-1,3,0,0,0,'','',0),(2118,3008,5377,262144,67,70,-1,-1,3,0,0,0,'','',0),(2119,3008,10421,262144,71,75,-1,-1,3,0,0,0,'','',0),(2120,3008,14008,262144,76,80,-1,-1,3,0,0,0,'','',0),(2121,3008,18008,262144,81,87,-1,-1,3,0,0,0,'','',0),(2122,3008,26015,262144,88,92,-1,-1,3,0,0,0,'','',0),(2123,3008,29107,262144,93,127,-1,-1,3,0,0,0,'','',0),(2124,3008,734,262144,7,8,-1,-1,4,0,0,0,'','',0),(2125,3008,710,262144,9,12,-1,-1,4,0,0,0,'','',0),(2126,3008,711,262144,13,16,-1,-1,4,0,0,0,'','',0),(2127,3008,709,262144,17,40,-1,-1,4,0,0,0,'','',0),(2128,3008,714,262144,41,46,-1,-1,4,0,0,0,'','',0),(2129,3008,748,262144,47,57,-1,-1,4,0,0,0,'','',0),(2130,3008,1763,262144,58,72,-1,-1,4,0,0,0,'','',0),(2131,3008,11881,262144,73,77,-1,-1,4,0,0,0,'','',0),(2132,3008,14056,262144,78,82,-1,-1,4,0,0,0,'','',0),(2133,3008,18041,262144,83,87,-1,-1,4,0,0,0,'','',0),(2134,3008,26027,262144,88,92,-1,-1,4,0,0,0,'','',0),(2135,3008,29122,262144,93,127,-1,-1,4,0,0,0,'','',0),(2136,3008,734,262144,9,24,-1,-1,5,0,0,0,'','',0),(2137,3008,712,262144,25,28,-1,-1,5,0,0,0,'','',0),(2138,3008,715,262144,29,32,-1,-1,5,0,0,0,'','',0),(2139,3008,713,262144,33,36,-1,-1,5,0,0,0,'','',0),(2140,3008,716,262144,37,44,-1,-1,5,0,0,0,'','',0),(2141,3008,4083,262144,45,52,-1,-1,5,0,0,0,'','',0),(2142,3008,4084,262144,53,63,-1,-1,5,0,0,0,'','',0),(2143,3008,3362,262144,64,64,-1,-1,5,0,0,0,'','',0),(2144,3008,4872,262144,65,68,-1,-1,5,0,0,0,'','',0),(2145,3008,5382,262144,69,75,-1,-1,5,0,0,0,'','',0),(2146,3008,14062,262144,76,80,-1,-1,5,0,0,0,'','',0),(2147,3008,18047,262144,81,85,-1,-1,5,0,0,0,'','',0),(2148,3008,25961,262144,86,90,-1,-1,5,0,0,0,'','',0),(2149,3008,29062,262144,91,127,-1,-1,5,0,0,0,'','',0),(2150,3008,734,262144,25,43,-1,-1,6,0,0,0,'','',0),(2151,3008,4085,262144,44,51,-1,-1,6,0,0,0,'','',0),(2152,3008,4086,262144,52,62,-1,-1,6,0,0,0,'','',0); +INSERT INTO `bot_spells_entries` VALUES (2153,3008,4087,262144,63,68,-1,-1,6,0,0,0,'','',0),(2154,3008,5374,262144,69,71,-1,-1,6,0,0,0,'','',0),(2155,3008,10439,262144,72,76,-1,-1,6,0,0,0,'','',0),(2156,3008,14020,262144,77,81,-1,-1,6,0,0,0,'','',0),(2157,3008,18014,262144,82,86,-1,-1,6,0,0,0,'','',0),(2158,3008,25991,262144,87,127,-1,-1,6,0,0,0,'','',0),(2159,3008,734,262144,30,82,-1,-1,7,0,0,0,'','',0),(2160,3008,18020,262144,83,127,-1,-1,7,0,0,0,'','',0),(2161,3008,734,262144,83,127,-1,-1,8,0,0,0,'','',0),(2162,3008,2603,262144,30,127,-1,-1,9,0,0,0,'','',0),(2163,3008,7,524288,6,19,-1,-1,1,0,0,0,'','',0),(2164,3008,1287,524288,20,31,-1,-1,1,0,0,0,'','',0),(2165,3008,723,524288,32,33,-1,-1,1,0,0,0,'','',0),(2166,3008,1448,524288,34,54,-1,-1,1,0,0,0,'','',0),(2167,3008,1759,524288,55,61,-1,-1,1,0,0,0,'','',0),(2168,3008,3651,524288,62,66,-1,-1,1,0,0,0,'','',0),(2169,3008,5377,524288,67,70,-1,-1,1,0,0,0,'','',0),(2170,3008,10421,524288,71,75,-1,-1,1,0,0,0,'','',0),(2171,3008,14008,524288,76,80,-1,-1,1,0,0,0,'','',0),(2172,3008,18008,524288,81,87,-1,-1,1,0,0,0,'','',0),(2173,3008,26015,524288,88,92,-1,-1,1,0,0,0,'','',0),(2174,3008,29107,524288,93,127,-1,-1,1,0,0,0,'','',0),(2175,3008,717,524288,5,29,-1,-1,2,0,0,0,'','',0),(2176,3008,2603,524288,30,127,-1,-1,2,0,0,0,'','',0),(2177,3008,717,524288,30,48,-1,-1,3,0,0,0,'','',0),(2178,3008,2605,524288,49,127,-1,-1,3,0,0,0,'','',0),(2179,3008,2602,524288,15,127,-1,-1,4,0,0,0,'','',0); +/*!40000 ALTER TABLE `bot_spells_entries` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_stances` +-- + +DROP TABLE IF EXISTS `bot_stances`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_stances` ( + `bot_id` int(11) unsigned NOT NULL DEFAULT '0', + `stance_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`bot_id`), + CONSTRAINT `FK_bot_stances_1` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_stances` +-- + +LOCK TABLES `bot_stances` WRITE; +/*!40000 ALTER TABLE `bot_stances` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_stances` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bot_timers` +-- + +DROP TABLE IF EXISTS `bot_timers`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bot_timers` ( + `bot_id` int(11) unsigned NOT NULL DEFAULT '0', + `timer_id` int(11) unsigned NOT NULL DEFAULT '0', + `timer_value` int(11) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`bot_id`), + CONSTRAINT `FK_bot_timers_1` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bot_timers` +-- + +LOCK TABLES `bot_timers` WRITE; +/*!40000 ALTER TABLE `bot_timers` DISABLE KEYS */; +/*!40000 ALTER TABLE `bot_timers` ENABLE KEYS */; +UNLOCK TABLES; + +-- Dump completed on 2023-04-06 18:35:53 + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/utils/sql/db_update_manifest.txt b/utils/sql/db_update_manifest.txt deleted file mode 100644 index 40cd1527a..000000000 --- a/utils/sql/db_update_manifest.txt +++ /dev/null @@ -1,502 +0,0 @@ -5001|1_task_system.sql|SHOW TABLES LIKE 'tasks'|empty| -# 5002|2_optional_maxclients.sql -# 5003|14_optional_merchantlist.sql -5004|35_task_stepped.sql|SHOW COLUMNS FROM `tasks` LIKE 'stepped'|not_empty| -5005|42_task_min_maxlevel.sql|SHOW COLUMNS FROM `tasks` LIKE 'minlevel'|empty| -5006|55_zone_shutdowndeleay.sql|SHOW COLUMNS FROM `zone` LIKE 'shutdowndelay'|empty| -# 5007|68_optional_character_maxexplevel.sql -# 5008|103_optional_chat_rules.sql -5009|104_traps.sql|SHOW COLUMNS FROM `traps` LIKE 'respawn_time'|empty| -# 5010|106_optional_proc_rules.sql -5011|120_damageshieldtypes.sql|SHOW TABLES LIKE 'damageshieldtypes'|empty| -# 5012|125_aggrozone.sql -# 5013|127_optional_spell_rules.sql -# 5014|129_optional_shared_plat_rule.sql -# 5015|131_optional_combat_rules.sql -5016|133_task_repeatable.sql|SHOW COLUMNS FROM `tasks` LIKE 'repeatable'|empty| -5017|142_deathpeace_and_lifetap_aas.sql|SELECT * FROM db_version WHERE version > 5016|empty| -# 5018|158_optional_death_exp_loss.sql -# 5019|176_melody.sql -5020|189_character_.sql|SELECT * FROM db_version WHERE version >= 5020|empty| -5021|196_trader.sql|SHOW TABLES LIKE 'trader'|empty| -# 5022|210_undyeme.sql -5023|222_buyer.sql|SHOW TABLES LIKE 'buyer'|empty| -# 5024|226_account_limiting.sql -5025|230_spells_table.sql|SHOW TABLES LIKE 'spells_new'|empty| -5026|235_horses_table.sql|SHOW TABLES LIKE 'horses'|empty| -5027|243_spawn_timers.sql|SHOW TABLES LIKE 'respawn_times'|empty| -5028|247_mail.sql|SHOW TABLES LIKE 'mail'|empty| -5029|249_chatchannels.sql|SHOW TABLES LIKE 'chatchannels'|empty| -# 5030|250_bot_spell_update.sql -# 5031|250_optional_bot_spell_update.sql -# 5032|285_optional_bot_spell_update.sql -# 5033|292_augslots.sql|SELECT * FROM db_version WHERE version >= 5033|empty| -5034|294_merchant_logging.sql|SHOW COLUMNS FROM `eventlog` LIKE 'event_nid'|empty| -5035|304_faction_list.sql|SELECT * FROM db_version WHERE version >= 5035|empty| -5036|326_aas.sql|SELECT * FROM db_version WHERE version > 5035|empty| -# 5037|328_bot_management.sql -# 5038|328_optional_bot_management.sql -5039|340_gm_ips.sql|SHOW TABLES LIKE 'gm_ips'|empty| -# 5040|356_combat.sql -# 5041|360_peqzone.sql -# 5042|364_ranged_dist_rule.sql -# 5043|386_bot_save_raid.sql -# 5044|434_optional_rest_state_rules.sql -# 5045|447_sof_startzone_rule.sql -# 5046|463_altadv_vars.sql -# 5047|475_aa_actions.sql -5048|500_spawn2_optimization.sql|SELECT * FROM db_version WHERE version >= 5048|empty| -5049|503_bugs.sql|SHOW TABLES LIKE 'bugs'|empty| -5050|518_drakkin_npc_type_features.sql|SHOW TABLES LIKE 'bugs'|empty| -5051|524_rule_values_notes.sql|SELECT * FROM db_version WHERE version >= 5051|empty| -5052|527_npc_armor_tint.sql|SELECT * FROM db_version WHERE version >= 5052|empty| -5053|553_saylink_table.sql|SHOW TABLES LIKE 'saylink'|empty| -5054|564_nokeyring.sql|SHOW COLUMNS FROM `doors` LIKE 'nokeyring'|empty| -5055|600_group_leadership.sql|SELECT * FROM db_version WHERE version >= 5055|empty| -5056|612_instance_changes.sql|SELECT * FROM db_version WHERE version >= 5056|empty| -5057|615_adventure_assassination.sql|SELECT * FROM db_version WHERE version >= 5057|empty| -5058|619_Adventure_Recruiter_Flavor.sql|SELECT * FROM db_version WHERE version >= 5058|empty| -5059|621_LDoNTraps.sql|SHOW TABLES LIKE 'ldon_trap_templates'|empty| -5060|633_ucs.sql|SHOW TABLES LIKE 'friends'|empty| -5061|634_TrapTemplateDefaultValue.sql|SHOW COLUMNS FROM `npc_types` LIKE 'trap_template'|empty| -# 5062|643_BotsTable.sql -# 5063|646_archery_penalty_rule.sql -5064|665_heroic_resists.sql|SELECT * FROM db_version WHERE version >= 5064|empty| -5065|667_titles.sql|SHOW TABLES LIKE 'titles'|empty| -5066|687_aa_table_changes.sql|SELECT * FROM db_version WHERE version >= 5066|empty| -# 5067|699_peqzone_rule.sql -5068|702_aashieldblock_tint_table.sql|SHOW TABLES LIKE 'npc_types_tint'|empty| -# 5069|703_peqzone_rule.sql -# 5070|704_rules.sql -5071|710_tint_set_naming.sql|SELECT * FROM db_version WHERE version >= 5071|empty| -5072|721_pathing_rules.sql|SELECT * FROM db_version WHERE version >= 5072|empty| -# 5073|730_smart_delay_moving.sql -# 5074|731_rule_assist_notarget_self.sql -# 5075|732_sacrifice_rules.sql -5076|745_slow_mitigation.sql|SELECT * FROM db_version WHERE version >= 5076|empty| -# 5077|754_archery_base_damage_rule.sql -5078|755_sof_altadv_vars_updates.sql|SELECT * FROM db_version WHERE version >= 5078|empty| -# 5079|773_monk_rules.sql -# 5080|853_optional_rule_aaexp.sql -# 5081|858_optional_rule_ip_limit_by_status.sql -# 5082|892_optional_bots_table_mod.sql -# 5083|893_optional_bots_table_mod.sql -5084|898_npc_maxlevel_scalerate.sql|SHOW COLUMNS FROM `npc_types` LIKE 'maxlevel'|empty| -# 5085|902_optional_rule_snareflee.sql -5086|923_spawn2_enabled.sql|SHOW COLUMNS FROM `spawn2` LIKE 'enabled'|empty| -5087|962_hot_zone.sql|SHOW COLUMNS FROM `zone` LIKE 'hotzone'|empty| -5088|964_reports.sql|SHOW TABLES LIKE 'reports'|empty| -5089|971_veteran_rewards.sql|SHOW TABLES LIKE 'veteran_reward_templates'|empty| -5090|977_raid_npc_private_corpses.sql|SELECT * FROM db_version WHERE version >= 5090|empty| -5091|979_unique_spawn_by_name.sql|SHOW COLUMNS FROM `npc_types` LIKE 'unique_spawn_by_name'|empty| -5092|980_account_ip.sql|SHOW TABLES LIKE 'account_ip'|empty| -# 5093|1022_botadventuring.sql -# 5094|1027_botactives.sql -# 5095|1030_botzoningsupport.sql -# 5096|1036_botbuffs.sql -# 5097|1038_botpetstatepersists.sql -5098|1038_grouptablesuniquecolumndefinitions.sql|SELECT * FROM db_version WHERE version >= 5098|empty| -# 5099|1039_botguilds.sql -# 5100|1040_DeprecatedBotRaidsSystems.sql -5101|1057_titles.sql|SHOW TABLES LIKE 'player_titlesets'|empty| -# 5102|1077_botgroups.sql -5103|1136_spell_globals.sql|SHOW TABLES LIKE 'spell_globals'|empty| -# 5104|1144_optional_rule_return_nodrop.sql -5105|1195_account_suspendeduntil.sql|SELECT * FROM db_version WHERE version >= 5105|empty| -5106|1259_npc_skill_types.sql|SHOW COLUMNS FROM `npc_types` LIKE 'prim_melee_type'|empty| -# 5107|1280_bot_augs.sql -# 5108|1290_optional_exp_loss_rule.sql -5109|1293_guild_bank.sql|SHOW TABLES LIKE 'guild_bank'|empty| -# 5110|1379_loginserver_trusted_server.sql -5111|1392_recipe_learning.sql|SELECT * FROM db_version WHERE version >= 5111|empty| -# 5112|1394_optional_rule_sod_hp_mana_end.sql -5113|1404_faction_list.sql|SELECT * FROM db_version WHERE version >= 5113|empty| -# 5114|1410_optional_sod_aas_ht_and_loh.sql -# 5115|1436_login_server_table_fix.sql -# 5116|1446_allowrest_optional.sql -5117|1446_allowrest_required.sql|SELECT * FROM db_version WHERE version >= 5117|empty| -# 5118|1450_cvs.sql -5119|1451_guilds.sql|SELECT * FROM db_version WHERE version >= 5119|empty| -5120|1498_instance_adventure.sql|SELECT * FROM db_version WHERE version >= 5120|empty| -5121|1510_global_instances.sql|SELECT * FROM db_version WHERE version >= 5121|empty| -5122|1511_map_path_loading.sql|SHOW COLUMNS FROM `zone` LIKE 'map_file_name'|empty| -5123|1513_zone_points.sql|SELECT * FROM db_version WHERE version >= 5123|empty| -5124|1519_zone_primary_key_id.sql|SELECT * FROM db_version WHERE version >= 5124|empty| -5125|1542_items_table_cleanup.sql|SELECT * FROM db_version WHERE version >= 5125|empty| -5126|1548_nimbuseffect_required.sql|SELECT * FROM db_version WHERE version >= 5126|empty| -5127|1562_instanced_spawnconditions.sql|SHOW TABLES LIKE 'spawn_condition_values'|empty| -# 5128|1586_waypoints_optional.sql -5129|1610_tradeskill_required.sql|SELECT * FROM db_version WHERE version >= 5129|empty| -5130|1618_zone.sql|SELECT * FROM db_version WHERE version >= 5130|empty| -# 5131|1625_optional_rule_class_race_exp_bonus.sql -# 5132|1672_optional_rules_respawn_window.sql -# 5133|1679_optional_rules_blocked_buffs.sql -5134|1696_modify_zone_and_object_tables.sql|SELECT * FROM db_version WHERE version >= 5134|empty| -5135|1711_account_restricted_aa.sql|SHOW COLUMNS FROM `account` LIKE 'time_creation'|empty| -# 5136|1717_optional_rule_bash_stun_chance.sql -# 5137|1718_optional_rules_mod3s.sql -# 5138|1719_optional_triggerOnCastAAs.sql -# 5139|1720_optional_sql_AAs.sql -# 5140|1720_required_sql_AA_effects_update.sql -# 5141|1721_optional_sql_drakkin_breath_update.sql -# 5142|1721_required_sql_altadv_vars_update.sql -# 5143|1723_optional_sql_new_stats_window_rule.sql -5144|1723_required_sql_corruption.sql|SELECT * FROM db_version WHERE version >= 5144|empty| -# 5145|1736_optional_sql_feral_swipe.sql -# 5146|1737_required_sql_rule_and_aa_update.sql -# 5147|1746_optional_sql_bot_manaregen.sql -# 5148|1747_optional_HoT_zone_and_zonepoints.sql -# 5149|1750_optional_sql_reflect_rule.sql -# 5150|1753_optional_haste_cap_rule.sql -# 5151|1753_required_sql_healing_adept_aa.sql -# 5152|1754_required_sql_healing_adept_aa_fix.sql -# 5153|1755_required_sql_fear_resist_aas.sql -# 5154|1784_optional_corpsedrag_rules.sql -# 5155|1786_required_update_to_aas.sql -# 5156|1790_required_aa_required_level_cost.sql -5157|1793_resist_adjust.sql|SHOW COLUMNS FROM `npc_spells_entries` LIKE 'resist_adjust'|empty| -# 5158|1799_optional_rest_regen_endurance_rule.sql -5159|1802_required_doppelganger.sql|SELECT * FROM db_version WHERE version >= 5159|empty| -5160|1803_required_tasks_xpreward_signed.sql|SELECT * FROM db_version WHERE version >= 5160|empty| -5161|1804_required_ae_melee_updates.sql|SELECT * FROM db_version WHERE version >= 5161|empty| -# 5162|1809_optional_rules.sql -5163|1813_required_doppelganger_npcid_change.sql|SELECT * FROM db_version WHERE version >= 5163|empty| -# 5164|1817_optional_npc_archery_bonus_rule.sql -# 5165|1823_optional_delay_death.sql -5166|1847_required_doors_dest_zone_size_32.sql|SELECT * FROM db_version WHERE version >= 5166|empty| -# 5167|1859_optional_item_casts_use_focus_rule.sql -# 5168|1884_optional_bot_spells_update.sql -# 5169|1885_optional_rules_fv_pvp_expansions.sql -# 5170|1889_optional_skill_cap_rule.sql -5171|1908_required_npc_types_definitions.sql|SHOW COLUMNS FROM `npc_types` LIKE 'attack_count'|empty| -# 5172|1926_optional_stat_cap.sql -5173|1944_spawn2.sql|SHOW COLUMNS FROM `spawn2` LIKE 'animation'|empty| -5174|1946_doors.sql|SELECT * FROM db_version WHERE version >= 5166|empty| -# 5175|1960_optional_console_timeout_rule.sql -# 5176|1962_optional_guild_creation_window_rules.sql -# 5177|1963_optional_rule_live_like_focuses.sql -# 5178|1968_optional_enrage_rules.sql -# 5179|1972_optional_extradmg_item_cap.sql -# 5180|1974_required_bot_spells_update.sql -5181|1977_underwater.sql|SHOW COLUMNS FROM `npc_types` LIKE 'underwater'|empty| -# 5182|1998_optional_intoxication_and_looting_rules.sql -5183|2004_charges_alt_currency.sql|SHOW TABLES LIKE 'alternate_currency'|empty| -# 5184|2015_optional_specialization_training_rule.sql -# 5185|2016_optional_rule_bot_aa_expansion.sql -# 5186|2023_optional_mysqlcli.sql -# 5187|2024_optional_update_crystals.sql -5188|2024_required_update.sql|SHOW TABLES LIKE 'char_create_combinations'|empty| -5189|2057_required_discovered_items.sql|SHOW TABLES LIKE 'discovered_items'|empty| -# 5190|2058_optional_rule_discovered_items.sql -5191|2062_required_version_changes.sql|SELECT * FROM db_version WHERE version >= 5191|empty| -5192|2069_required_pets.sql|SHOW TABLES LIKE 'pets_equipmentset'|empty| -# 5193|2079_player_speech.sql -# 5194|2087_required_bots_hp_and_mana_and_spell_updates.sql -5195|2098_required_zonepoint_version_changes.sql|SELECT * FROM db_version WHERE version >= 5195|empty| -5196|2099_required_discovered_items_account_status.sql|SELECT * FROM db_version WHERE version >= 5196|empty| -5197|2104_required_group_roles.sql|SELECT * FROM db_version WHERE version >= 5197|empty| -# 5198|2107_required_bot_stances.sql -5199|2129_required_lfguild.sql|SHOW TABLES LIKE 'lfguild'|empty| -5200|2133_required_faction_loot_despawn.sql|SELECT * FROM db_version WHERE version >= 5200|empty| -5201|2136_extended_targets.sql|SELECT * FROM db_version WHERE version >= 5201|empty| -5202|2142_emotes.sql|SELECT * FROM db_version WHERE version >= 5202|empty| -# 5203|2154_optional_rule_spell_procs_resists_falloff.sql -# 5204|2156_optional_charm_break_rule.sql -# 5205|2159_optional_defensiveproc_rules.sql -# 5206|2164_require_bots_bottimers.sql -# 5207|2171_optional_SpecialAttackACBonus_rule.sql -# 5208|2176_optional_aa_expansion_SOF_fix.sql -# 5209|2176_optional_FrenzyBonus_rule.sql -5210|2176_required_aa_updates.sql|SELECT * FROM db_version WHERE version >= 5210|empty| -5211|2178_required_aa_updates.sql|SELECT * FROM db_version WHERE version >= 5211|empty| -# 5212|2183_optional_bot_xp_rule.sql -# 5213|2185_optional_NPCFlurryChacne_rule -# 5214|2185_optional_NPCFlurryChacne_rule.sql -# 5215|2185_optional_NPCFlurryChance_rule.sql -5216|2185_required_aa_updates|SELECT * FROM db_version WHERE version >= 5216|empty| -5217|2185_required_aa_updates.sql|SELECT * FROM db_version WHERE version >= 5217|empty| -# 5218|2188_optional_miscspelleffect_rules -# 5219|2188_optional_miscspelleffect_rules.sql -# 5220|2188_required_aa_updates -5221|2188_required_aa_updates.sql|SELECT * FROM db_version WHERE version >= 5221|empty| -# 5222|2189_optional_taunt_rules -# 5223|2189_optional_taunt_rules.sql -5224|2195_required_sharedplatupdates.sql|SELECT * FROM db_version WHERE version >= 5224|empty| -# 5225|2208_optional_aa_stacking_rule.sql -# 5226|2208_optional_EnableSoulAbrasionAA.sql -5227|2208_required_aa_updates.sql|SELECT * FROM db_version WHERE version >= 5227|empty| -# 5228|2209_optional_additive_bonus_rule.sql -5229|2213_loot_changes.sql|SELECT * FROM db_version WHERE version >= 5229|empty| -5230|2214_faction_list_mod.sql|SHOW TABLES LIKE 'faction_list_mod'|empty| -5231|2215_required_aa_updates.sql|SELECT * FROM db_version WHERE version >= 5231|empty| -# 5232|2243_optional_char_max_level_rule.sql -# 5233|2260_probability.sql -5234|2262_required_pet_discipline_update.sql|SELECT * FROM db_version WHERE version >= 5234|empty| -5235|2264_required_aa_updates.sql|SELECT * FROM db_version WHERE version >= 5235|empty| -# 5236|2268_QueryServ.sql -5237|2268_required_updates.sql|SELECT * FROM db_version WHERE version >= 5237|empty| -# 5238|2274_optional_rule_iplimitdisconnectall.sql -# 5239|2278_optional_rule_targetableswarmpet.sql -# 5240|2280_optional_rule_targetableswarmpet-rename.sql -5241|2283_required_npc_changes.sql|SHOW COLUMNS FROM `npc_types` LIKE 'spellscale'|empty| -5242|2299_required_inspectmessage_fields.sql|SELECT * FROM db_version WHERE version >= 5242|empty| -# 5243|2300_optional_loot_changes.sql -# 5244|2304_QueryServ.sql -# 5245|2340_required_maxbuffslotspet.sql -# 5246|2361_QueryServ.sql -# 5247|2361_required_qs_rule_values.sql -5248|2370_required_aa_updates.sql|SELECT * FROM db_version WHERE version >= 5248|empty| -5249|2376_required_aa_updates.sql|SELECT * FROM db_version WHERE version >= 5249|empty| -5250|2380_optional_merc_data.sql|SELECT * FROM db_version WHERE version >= 5250|empty| -5251|2380_optional_merc_merchant_npctypes_update.sql|SELECT * FROM db_version WHERE version >= 5251|empty| -5252|2380_optional_merc_rules.sql|SELECT * FROM db_version WHERE version >= 5252|empty| -5253|2383_required_group_ismerc.sql|SELECT * FROM db_version WHERE version >= 5253|empty| -# 5254|2428_optional_levelbasedexpmods.sql -# 5255|2448_optional_stun_proc_aggro_rule.sql -5256|2471_required_aa_updates.sql|SELECT * FROM db_version WHERE version >= 5256|empty| -5257|2482_required_start_zones.sql|SELECT * FROM db_version WHERE version >= 5257|empty| -5258|2504_required_aa_updates.sql|SELECT * FROM db_version WHERE version >= 5258|empty| -8000|mercs.sql|SHOW TABLES LIKE 'merc_stats'|empty| -9000|2013_02_18_Merc_Rules_and_Tables.sql|SELECT * FROM `rule_values` WHERE `rule_name` LIKE '%Mercs:ResurrectRadius%'|empty| -9001|2013_02_25_Impr_HT_LT.sql|SHOW TABLES LIKE 'merc_inventory'|empty| -9002|2013_03_1_Merc_Rules_and_Equipment.sql|SHOW TABLES LIKE 'merc_inventory'|empty| -# 9003|2013_03_23_Escape_FadingMemories.sql -# 9004|2013_04_04_NaturesBounty.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '1230' AND `slot` = '1' AND `effectid` = '313' AND `base1` = '15' AND `base2` = '0'|empty| -9005|2013_04_08_Salvage.sql|SHOW COLUMNS FROM `tradeskill_recipe_entries` LIKE 'salvagecount'|empty| -9006|2013_05_05_Account_Flags.sql|SHOW TABLES LIKE 'account_flags'|empty| -9007|2013_05_05_Item_Tick.sql|SHOW TABLES LIKE 'item_tick'|empty| -9008|2013_07_11_NPC_Special_Abilities.sql|SHOW COLUMNS FROM `npc_types` LIKE 'special_abilities'|empty| -9009|2013_10_12_Merc_Special_Abilities.sql|SHOW COLUMNS FROM `merc_stats` LIKE 'special_abilities'|empty| -# 9010|2013_10_12_Merc_vwMercNpcTypes.sql -9011|2013_10_31_Recipe_disabling.sql|SHOW COLUMNS FROM `tradeskill_recipe` LIKE 'enabled'|empty| -9012|2013_11_07_BaseData.sql|SHOW TABLES LIKE 'base_data'|empty| -# 9013|2013_11_13_Instrument_Singing_Mastery.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '213' AND `slot` = '1' AND `effectid` = '260' AND `base1` = '2' AND `base2` = '23'|empty| -9014|2013_11_18_AssistRadius.sql|SHOW COLUMNS FROM `npc_types` LIKE 'assistradius'|empty| -9015|2013_12_26_MerchantList_Class_Required.sql|SHOW COLUMNS FROM `merchantlist` LIKE 'classes_required'|empty| -# 9016|2014_01_04_SongModCapAAs.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '571' AND `slot` = '1' AND `effectid` = '261'|empty| -9017|2014_01_08_SpellsNewAdditions.sql|SHOW COLUMNS FROM `spells_new` LIKE 'persistdeath'|empty| -9018|2014_01_09_PreservePetSize.sql|SHOW COLUMNS FROM `character_pet_info` LIKE 'size'|empty| -# 9019|2014_01_20_MezMastery.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '781' AND `slot` = '1' AND `effectid` = '287'|empty| -9020|2014_01_20_Not_Extendable.sql|SHOW COLUMNS FROM `spells_new` LIKE 'not_extendable'|empty| -# 9021|2014_01_20_SpellCastingReinforcement.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '86' AND `slot` = '1' AND `effectid` = '128'|empty| -9022|2014_01_20_Weather.sql|SHOW COLUMNS FROM `zone` LIKE 'rain_chance1'|empty| -# 9023|2014_01_27_CritcalMendAA.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '230' AND `slot` = '1' AND `effectid` = '275'|empty -# 9024|2014_02_02_SpellCriticalsAA.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '4755' AND `slot` = '1' AND `effectid` = '294'|empty -9025|2014_02_13_Rename_instance_lockout_tables.sql|SHOW TABLES LIKE 'instance_list'|empty| -9026|2014_02_13_spells_new_update.sql|SHOW COLUMNS FROM `spells_new` LIKE 'ConeStartAngle'|empty| -9027|2014_02_20_buff_update.sql|SHOW COLUMNS FROM `character_buffs` LIKE 'caston_y'|empty| -9028|2014_02_26_roambox_update.sql|SHOW COLUMNS FROM `spawngroup` LIKE 'mindelay'|empty| -# 9029|2014_02_26_virulentvenomAA.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '888' AND `slot` = '1' AND `effectid` = '250'|empty| -9030|2014_04_04_PhysicalResist.sql|SHOW COLUMNS FROM `npc_types` LIKE 'PhR'|empty| -9031|2014_04_10_No_Target_With_Hotkey.sql|SHOW COLUMNS FROM `npc_types` LIKE 'no_target_hotkey'|empty| -9032|2014_04_12_SlowMitigation.sql|SHOW COLUMNS FROM `npc_types` LIKE 'slow_mitigation'|contains|float -9034|2014_04_25_spawn_events.sql|SHOW COLUMNS FROM `spawn_events` LIKE 'strict'|empty| -9035|2014_04_27_AISpellEffects.sql|SHOW COLUMNS FROM `npc_types` LIKE 'npc_spells_effects_id'|empty| -9036|2014_05_04_SlowMitigationFix.sql|SHOW COLUMNS FROM `npc_types` LIKE 'slow_mitigation'|contains|float -# 9038|2014_06_25_AA_Updates.sql|SELECT * FROM `altadv_vars` WHERE `skill_id` = '1604'|empty -# 9039|2014_07_04_AA_Updates.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '158' AND `slot` = '1' AND `effectid` = '238'|empty -9040|2014_07_10_npc_spells.sql|SHOW COLUMNS FROM `npc_spells` LIKE 'engaged_no_sp_recast_min'|empty| -9041|2014_08_02_spells_new.sql|SHOW COLUMNS FROM `spells_new` LIKE 'viral_range'|empty| -9042|2014_08_12_NPC_raid_targets.sql|SHOW COLUMNS FROM `npc_types` LIKE 'raid_target'|empty| -9043|2014_08_18_spells_new_update.sql|SHOW COLUMNS FROM `spells_new` LIKE 'viral_targets'|empty| -9044|2014_08_20_merchantlist_probability.sql|SHOW COLUMNS FROM `merchantlist` LIKE 'probability'|empty| -9045|2014_08_23_Complete_QueryServ_Table_Structures.sql|SHOW TABLES LIKE 'qs_player_aa_rate_hourly'|empty| -9046|2014_08_23_player_events_and_player_aa_rate_hourly.sql|SHOW TABLES LIKE 'qs_player_events'|empty| -9048|2014_09_09_attack_delay.sql|SHOW COLUMNS FROM `npc_types` LIKE 'attack_delay'|empty| -9050|2014_09_20_ban_messages.sql|SHOW COLUMNS FROM `account` LIKE 'ban_reason'|empty| -9051|2014_10_11_RaidMOTD.sql|SHOW COLUMNS FROM `raid_details` LIKE 'motd'|empty| -9052|2014_10_13_RaidLeadership.sql|SHOW TABLES LIKE 'raid_leaders'|empty| -9053|2014_10_18_group_mentor.sql|SHOW COLUMNS FROM `group_leaders` LIKE 'mentoree'|empty| -9054|2014_10_19_raid_group_mentor.sql|SHOW COLUMNS FROM `raid_leaders` LIKE 'mentoree'|empty| -9055|2014_10_30_special_abilities_null.sql|SHOW COLUMNS FROM `npc_types` LIKE 'special_abilities'|contains|NO -9056|2014_11_08_RaidMembers.sql|SHOW COLUMNS FROM `raid_members` LIKE 'groupid'|missing|unsigned -9057|2014_11_13_spells_new_updates.sql|SHOW COLUMNS FROM `spells_new` LIKE 'disallow_sit'|empty| -9058|2014_11_26_InventoryTableUpdate.sql|SHOW COLUMNS FROM `inventory` LIKE 'ornamenticon'|empty| -9059|2014_12_01_mercs_table_update.sql|SHOW COLUMNS FROM `mercs` LIKE 'MercSize'|empty| -9060|2014_12_09_items_table_update.sql|SHOW COLUMNS FROM `items` LIKE 'herosforgemodel'|empty| -9061|2014_12_13_inventory_table_update.sql|SHOW COLUMNS FROM `inventory` LIKE 'ornament_hero_model'|empty| -9062|2014_12_15_multiple_table_updates.sql|SHOW COLUMNS FROM `items` LIKE 'augslot6type'|empty| -9063|2014_12_24_npc_types_update.sql|SHOW COLUMNS FROM `npc_types` LIKE 'd_melee_texture1'|empty| -9064|2014_12_24_npc_types_table_update.sql|SHOW COLUMNS FROM `npc_types` LIKE 'herosforgemodel'|empty| -9065|2014_12_26_merc_weaponinfo_table_update.sql|SHOW COLUMNS FROM `vwMercNpcTypes` LIKE 'd_melee_texture1'|empty| -9066|2014_12_31_npc_types_default_values_update.sql|SHOW COLUMNS FROM `npc_types` LIKE 'bodytype'|contains|YES -9067|2015_01_21_npc_types_update.sql|SHOW COLUMNS FROM `npc_types` LIKE 'light'|empty| -9068|2015_01_15_logsys_categories_table.sql|SHOW TABLES LIKE 'logsys_categories'|empty| -9069|2015_01_25_logsys_Mercenaries_category.sql|SELECT * FROM `logsys_categories` WHERE `log_category_description` LIKE 'Mercenaries'|empty| -9070|2015_01_28_quest_debug_log_category.sql|SELECT * FROM `logsys_categories` WHERE `log_category_description` LIKE 'Quest Debug'|empty| -9071|2015_01_29_merc_stats_table_update.sql|SHOW COLUMNS FROM `merc_stats` LIKE 'statscale'|empty| -9072|2015_01_30_merc_attack_delay.sql|SHOW COLUMNS FROM `merc_stats` LIKE 'attack_delay'|empty| -9073|2015_01_31_character_item_recast.sql|SHOW TABLES LIKE 'character_item_recast'|empty| -9074|2015_02_01_logsys_packet_logs.sql|SELECT * FROM `logsys_categories` WHERE `log_category_description` LIKE 'Packet: Server -> Client'|empty| -9075|2015_02_02_logsys_packet_logs_with_dump.sql|SELECT * FROM `logsys_categories` WHERE `log_category_description` LIKE 'Packet: Server -> Client With Dump'|empty| -9076|2015_02_04_average_coin.sql|SHOW COLUMNS FROM `loottable` WHERE Field = 'avgcoin'|contains|smallint -9077|2015_02_12_zone_gravity.sql|SHOW COLUMNS FROM `zone` LIKE 'gravity'|empty| -9078|2015_05_20_BuffInstrumentMod.sql|SHOW COLUMNS FROM `character_buffs` LIKE 'instrument_mod'|empty| -9079|2015_05_23_BuffDurations.sql|SHOW COLUMNS FROM `character_buffs` LIKE 'ticsremaining'|contains|unsigned| -9080|2015_05_23_PetBuffInstrumentMod.sql|SHOW COLUMNS FROM `character_pet_buffs` LIKE 'instrument_mod'|empty| -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_06_30_runspeed_adjustments.sql|SELECT `runspeed` FROM `npc_types` WHERE `runspeed` > 3|not_empty| -9085|2015_07_01_Marquee_Rule.sql|SELECT * FROM `rule_values` WHERE `rule_name` LIKE '%Character:MarqueeHPUpdates%'|empty| -9086|2015_07_02_aa_rework.sql|SHOW TABLES LIKE 'aa_ranks'|empty| -9087|2015_09_25_inventory_snapshots.sql|SHOW TABLES LIKE 'inventory_snapshots'|empty| -9088|2015_11_01_perl_event_export_settings.sql|SHOW TABLES LIKE 'perl_event_export_settings'|empty| -9089|2015_11_02_ai_idle_no_spell_recast_default_changes.sql|SELECT * FROM `rule_values` WHERE `rule_name` LIKE '%Spells:AI_IdleNoSpellMinRecast%' AND `rule_value` = '500'|not_empty| -9090|2015_12_01_spell_scribe_restriction_rule.sql|SELECT `rule_name` FROM `rule_values` WHERE `rule_name` LIKE 'Character:RestrictSpellScribing'|empty| -9091|2015_12_07_command_settings.sql|SHOW TABLES LIKE 'command_settings'|empty| -9092|2015_12_17_eqtime.sql|SHOW TABLES LIKE 'eqtime'|empty| -9093|2015_12_21_items_updates_evoitem.sql|SHOW COLUMNS FROM `items` LIKE 'evoitem'|empty| -9094|2015_12_29_quest_zone_events.sql|SELECT * FROM perl_event_export_settings WHERE event_description = 'EVENT_SPAWN_ZONE'|empty| -9095|2016_01_08_command_find_aliases.sql|SELECT * FROM `command_settings` WHERE `command` LIKE 'findaliases'|empty| -9096|2016_03_05_secondary_recall.sql|SHOW COLUMNS FROM `character_bind` LIKE 'slot'|empty| -9097|2016_07_03_npc_class_as_last_name.sql|SELECT `rule_name` FROM `rule_values` WHERE `rule_name` LIKE 'NPC:UseClassAsLastName'|empty| -9098|2016_08_26_object_size_tilt.sql|SHOW COLUMNS FROM `object` LIKE 'size'|empty| -9099|2016_08_27_ip_exemptions.sql|SHOW TABLES LIKE 'ip_exemptions'|empty| -9100|2016_08_27_object_display_name.sql|SHOW COLUMNS FROM `object` LIKE 'display_name'|empty| -9101|2016_12_01_pcnpc_only.sql|SHOW COLUMNS FROM `spells_new` LIKE 'pcnpc_only_flag'|empty| -9102|2017_01_10_book_languages.sql|SHOW COLUMNS FROM `books` LIKE 'language'|empty| -9103|2017_01_30_book_languages_fix.sql|SELECT `language` from `books` WHERE `language` IS NULL|not_empty| -9104|2017_02_09_npc_spells_entries_type_update.sql|SHOW COLUMNS IN `npc_spells_entries` LIKE 'type'|contains|smallint(5) unsigned -9105|2017_02_15_bot_spells_entries.sql|SELECT `id` FROM `npc_spells_entries` WHERE `npc_spells_id` >= 701 AND `npc_spells_id` <= 712|not_empty| -9106|2017_02_26_npc_spells_update_for_bots.sql|SELECT * FROM `npc_spells` WHERE `id` = '701' AND `name` = 'Cleric Bot'|not_empty| -9107|2017_03_09_inventory_version.sql|SHOW TABLES LIKE 'inventory_version'|empty| -9108|2017_04_07_ignore_despawn.sql|SHOW COLUMNS FROM `npc_types` LIKE 'ignore_despawn'|empty| -9109|2017_04_08_doors_disable_timer.sql|SHOW COLUMNS FROM `doors` LIKE 'disable_timer'|empty| -9110|2017_04_10_graveyard.sql|show index from graveyard WHERE key_name = 'zone_id_nonunique'|empty| -9111|2017_06_24_saylink_index.sql|SHOW INDEX FROM `saylink` WHERE `key_name` = 'phrase_index'|empty| -9112|2017_06_24_rule_values_expand.sql|SHOW COLUMNS FROM rule_values WHERE Field = 'rule_value' and Type = 'varchar(30)'|empty| -9113|2017_07_19_show_name.sql|SHOW COLUMNS FROM `npc_types` LIKE 'show_name'|empty| -9114|2017_07_22_aura.sql|SHOW TABLES LIKE 'auras'|empty| -9115|2017_10_28_traps.sql|SHOW COLUMNS FROM `traps` LIKE 'triggered_number'|empty| -9116|2017_12_16_GroundSpawn_Respawn_Timer.sql|SHOW COLUMNS FROM `ground_spawns` WHERE Field = 'respawn_timer' AND Type = 'int(11) unsigned'|empty| -9117|2018_02_01_NPC_Spells_Min_Max_HP.sql|SHOW COLUMNS FROM `npc_spells_entries` LIKE 'min_hp'|empty| -9118|2018_02_04_Charm_Stats.sql|SHOW COLUMNS FROM `npc_types` LIKE 'charm_ac'|empty| -9119|2018_02_10_GlobalLoot.sql|SHOW TABLES LIKE 'global_loot'|empty| -9120|2018_02_13_Heading.sql|SELECT value FROM variables WHERE varname = 'fixed_heading'|empty| -9121|2018_02_18_bug_reports.sql|SHOW TABLES LIKE 'bug_reports'|empty| -9122|2018_03_07_ucs_command.sql|SELECT * FROM `command_settings` WHERE `command` LIKE 'ucs'|empty| -9123|2018_07_07_data_buckets.sql|SHOW TABLES LIKE 'data_buckets'|empty| -9124|2018_07_09_tasks.sql|SHOW COLUMNS FROM `tasks` LIKE 'type'|empty| -9125|2018_07_20_task_emote.sql|SHOW COLUMNS FROM `tasks` LIKE 'completion_emote'|empty| -9126|2018_09_07_FastRegen.sql|SHOW COLUMNS FROM `zone` LIKE 'fast_regen_hp'|empty| -9127|2018_09_07_NPCMaxAggroDist.sql|SHOW COLUMNS FROM `zone` LIKE 'npc_max_aggro_dist'|empty| -9128|2018_08_13_inventory_version_update.sql|SHOW TABLES LIKE 'inventory_version'|not_empty| -9129|2018_08_13_inventory_update.sql|SHOW TABLES LIKE 'inventory_versions'|empty| -9130|2018_11_25_name_filter_update.sql|SHOW COLUMNS FROM `name_filter` LIKE 'id'|empty| -9131|2018_12_13_spell_buckets.sql|SHOW TABLES LIKE 'spell_buckets'|empty| -9132|2018_12_16_global_base_scaling.sql|SHOW TABLES LIKE 'npc_scale_global_base'|empty| -9133|2018_11_25_StuckBehavior.sql|SHOW COLUMNS FROM `npc_types` LIKE 'stuck_behavior'|empty| -9134|2019_01_04_update_global_base_scaling.sql|SELECT * FROM db_version WHERE version >= 9134|empty| -9135|2019_01_10_multi_version_spawns.sql|SHOW COLUMNS FROM `spawn2` LIKE 'version'|contains|unsigned| -9136|2019_02_04_profanity_command.sql|SHOW TABLES LIKE 'profanity_list'|empty| -9137|2018_12_12_client_faction_tables.sql|SHOW TABLES LIKE 'faction_base_data'|empty| -9138|2018_12_12_convert_to_client_functions.sql|SELECT `id` FROM `faction_list` WHERE `id` > 4999|empty| -9139|2019_03_25_optional_npc_model.sql|SHOW COLUMNS FROM `npc_types` LIKE 'model'|empty| -9140|2019_07_03_update_range.sql|SHOW COLUMNS FROM `zone` LIKE 'max_movement_update_range'|empty| -9141|2019_07_10_npc_flymode.sql|SHOW COLUMNS FROM `npc_types` LIKE 'flymode'|empty| -9142|2019_09_02_required_spawn_filter.sql|SHOW COLUMNS FROM `spawnentry` LIKE 'condition_value_filter'|empty| -9143|2019_09_16_account_table_changes.sql|SHOW COLUMNS FROM `account` LIKE 'ls_id'|empty| -9144|2019_11_09_logsys_description_update.sql|SELECT * FROM db_version WHERE version >= 9143|empty| -9145|2019_12_24_banned_ips_update.sql|SHOW TABLES LIKE 'Banned_IPs'|not_empty| -9146|2020_01_10_character_soft_deletes.sql|SHOW COLUMNS FROM `character_data` LIKE 'deleted_at'|empty| -9147|2020_01_24_grid_centerpoint_wp.sql|SHOW COLUMNS FROM `grid_entries` LIKE 'centerpoint'|empty| -9148|2020_01_28_corpse_guild_consent_id.sql|SHOW COLUMNS FROM `character_corpses` LIKE 'guild_consent_id'|empty| -9149|2020_02_06_globalloot.sql|SHOW COLUMNS FROM `global_loot` LIKE 'hot_zone'|empty| -9150|2020_02_06_aa_reset_on_death.sql|SHOW COLUMNS FROM `aa_ability` LIKE 'reset_on_death'|empty| -9151|2020_03_05_npc_always_aggro.sql|SHOW COLUMNS FROM `npc_types` LIKE 'always_aggro'|empty| -9152|2020_03_09_convert_myisam_to_innodb.sql|SELECT * FROM db_version WHERE version >= 9152|empty| -9153|2020_05_09_items_subtype.sql|SHOW COLUMNS from `items` LIKE 'UNK219'|not_empty| -9154|2020_04_11_expansions_content_filters.sql|SHOW COLUMNS from `zone` LIKE 'min_expansion'|empty| -9155|2020_08_15_lootdrop_level_filtering.sql|SHOW COLUMNS from `lootdrop_entries` LIKE 'trivial_min_level'|empty| -9156|2020_08_16_virtual_zonepoints.sql|SHOW COLUMNS from `zone_points` LIKE 'is_virtual'|empty| -9157|2020_09_02_pet_taunting.sql|SHOW COLUMNS from `character_pet_info` LIKE 'taunting'|empty| -9158|2020_12_09_underworld.sql|SHOW COLUMNS from `zone` LIKE 'underworld_teleport_index'|empty| -9159|2020_12_22_expedition_system.sql|SELECT * FROM db_version WHERE version >= 9159|empty| -9160|2021_02_14_npc_exp_mod.sql|SHOW COLUMNS from `npc_types` LIKE 'exp_mod'|empty| -9161|2021_02_15_npc_spell_entries_unsigned.sql|SELECT * FROM db_version WHERE version >= 9161|empty| -9162|2021_02_17_server_scheduled_events.sql|SELECT * FROM db_version WHERE version >= 9162|empty| -9163|2021_04_17_zone_safe_heading_changes.sql|SHOW COLUMNS FROM `zone` LIKE 'safe_heading'|empty| -9164|2021_04_23_character_exp_modifiers.sql|SHOW TABLES LIKE 'character_exp_modifiers'|empty| -9165|2021_04_28_idle_pathing.sql|SHOW COLUMNS FROM `spawn2` LIKE 'path_when_zone_idle'|empty| -9166|2021_02_12_dynamic_zone_members.sql|SHOW TABLES LIKE 'dynamic_zone_members'|empty| -9167|2021_06_06_beastlord_pets.sql|SHOW TABLES LIKE 'pets_beastlord_data'|empty| -9168|2021_08_31_pvp_duration.sql|SHOW COLUMNS FROM `spells_new` LIKE 'pvp_duration'|empty| -9169|2021_06_06_dynamic_zone_moved_columns.sql|SELECT * FROM db_version WHERE version >= 9169|empty| -9170|2021_03_03_instance_safereturns.sql|SHOW TABLES LIKE 'character_instance_safereturns'|empty| -9171|2021_03_30_remove_dz_is_current_member.sql|SHOW COLUMNS FROM `dynamic_zone_members` LIKE 'is_current_member'|not_empty| -9172|2021_05_21_shared_tasks.sql|SHOW TABLES LIKE 'shared_tasks'|empty| -9173|2021_09_14_zone_lava_damage.sql|SHOW COLUMNS FROM `zone` LIKE 'lava_damage'|empty| -9174|2021_10_09_not_null_door_columns.sql|SELECT * FROM db_version WHERE version >= 9174|empty| -9175|2022_01_02_expansion_default_value_all.sql|SHOW COLUMNS FROM `forage` LIKE 'min_expansion'|contains|unsigned -9176|2022_01_10_checksum_verification.sql|SHOW COLUMNS FROM `account` LIKE 'crc_eqgame'|empty| -9177|2022_03_06_table_structure_changes.sql|SHOW COLUMNS FROM `pets` LIKE 'id'|empty| -9178|2022_03_07_saylink_collation.sql|SELECT * FROM db_version WHERE version >= 9178|empty| -9179|2022_04_30_hp_regen_per_second.sql|SHOW COLUMNS FROM `npc_types` LIKE 'hp_regen_per_second'|empty| -9180|2022_05_01_character_peqzone_flags.sql|SHOW TABLES LIKE 'character_peqzone_flags'|empty| -9181|2022_05_03_task_activity_goal_match_list.sql|SHOW COLUMNS FROM `task_activities` LIKE 'goal_match_list'|empty| -9182|2022_05_02_npc_types_int64.sql|SHOW COLUMNS FROM `npc_types` LIKE 'hp'|missing|bigint -9183|2022_05_07_merchant_data_buckets.sql|SHOW COLUMNS FROM `merchantlist` LIKE 'bucket_comparison'|empty -9184|2022_05_21_schema_consistency.sql|SELECT * FROM db_version WHERE version >= 9184|empty| -9185|2022_05_07_discord_webhooks.sql|SHOW TABLES LIKE 'discord_webhooks'|empty| -9186|2022_07_09_zone_expansion_deprecate.sql|SHOW COLUMNS FROM `zone` LIKE 'expansion'|not_empty| -9187|2022_07_09_task_zone_version_matching.sql|SHOW COLUMNS FROM `task_activities` LIKE 'zone_version'|empty| -9188|2022_07_14_zone_expansion_revert.sql|SHOW COLUMNS FROM `zone` LIKE 'expansion'|empty| -9189|2022_07_10_character_task_rewarded.sql|SHOW COLUMNS FROM `character_tasks` LIKE 'was_rewarded'|empty| -9190|2022_07_13_task_reward_points.sql|SHOW COLUMNS FROM `tasks` LIKE 'reward_points'|empty| -9191|2022_07_28_gm_state_changes.sql|SHOW COLUMNS FROM `account` LIKE 'invulnerable'|empty| -9192|2022_07_13_task_lock_activity.sql|SHOW COLUMNS FROM `tasks` LIKE 'lock_activity_id'|empty| -9193|2022_07_16_task_timer_groups.sql|SHOW COLUMNS FROM `tasks` LIKE 'replay_timer_group'|empty| -9194|2022_07_23_dz_switch_id.sql|SHOW COLUMNS FROM `doors` LIKE 'dz_switch_id'|empty| -9195|2022_07_23_dz_templates.sql|SHOW TABLES like 'dynamic_zone_templates'|empty| -9196|2022_07_30_merchantlist_temp.sql|SHOW COLUMNS FROM `merchantlist_temp` LIKE 'zone_id'|empty| -9197|2022_08_01_drop_expansion_account.sql|SHOW COLUMNS FROM `account` LIKE 'expansion'|not_empty| -9198|2022_08_14_exp_modifier_instance_versions.sql|SHOW COLUMNS FROM `character_exp_modifiers` LIKE 'instance_version'|empty| -9199|2022_08_08_task_req_activity_id.sql|SHOW COLUMNS FROM `task_activities` LIKE 'req_activity_id'|empty| -9200|2022_08_19_zone_expansion_consistency.sql|SELECT * FROM db_version WHERE version >= 9200|empty| -9201|2022_08_22_npc_types_heroic_strikethrough.sql|SHOW COLUMNS FROM `npc_types` LIKE 'heroic_strikethrough'|empty| -9202|2022_08_24_task_activities_step.sql|SHOW COLUMNS FROM `task_activities` LIKE 'step'|contains|unsigned -9203|2022_08_07_replace_task_goals.sql|SHOW COLUMNS FROM `task_activities` LIKE 'item_id'|empty| -9204|2022_09_02_faction_association.sql|SHOW TABLES LIKE 'faction_association'|empty| -9205|2022_09_03_fix_starting_point_heading.sql|SELECT * FROM db_version WHERE version >= 9205|empty| -9206|2022_09_03_fix_door_destination_headings.sql|SELECT * FROM db_version WHERE version >= 9206|empty| -9207|2022_09_03_fix_zone_point_heading_data.sql|SELECT * FROM db_version WHERE version >= 9207|empty| -9208|2022_09_25_task_concat_matchlists.sql|SHOW COLUMNS FROM `task_activities` LIKE 'npc_id'|not_empty| -9209|2022_09_28_discord_webhooks.sql|SHOW COLUMNS FROM `logsys_categories` LIKE 'log_to_discord'|empty| -9210|2022_10_11_fix_misty_pok_stone.sql|select * from doors where id = 2040 and `name` = 'POKRVPORT500' and client_version_mask = 4294967232|empty| -9211|2022_10_14_fix_neriak_pok_stone.sql|select * from doors where id = 2057 and `name` = 'POKNRKPORT500' and client_version_mask = 4294967232|empty| -9212|2022_10_14_fix_misty_pok_stone.sql|select * from doors where id = 2040 and `name` = 'POKRVPORT500' and dest_zone = 'misty'|empty| -9213|2022_12_24_npc_keeps_sold_items.sql|SHOW COLUMNS FROM `npc_types` LIKE 'keeps_sold_items'|empty| -9214|2022_12_24_character_exp_toggle.sql|SHOW COLUMNS FROM `character_data` LIKE 'exp_enabled'|empty| -9215|2023_01_08_zone_max_level.sql|SHOW COLUMNS FROM `zone` LIKE 'max_level'|empty| -9216|2023_01_15_merc_data.sql|SHOW TABLES LIKE 'mercs'|empty| -9217|2023_01_15_chatchannel_reserved_names.sql|SHOW TABLES LIKE 'chatchannel_reserved_names'|empty| -9218|2023_01_24_item_recast.sql|show columns from character_item_recast like '%recast_type%'|contains|smallint -9219|2023_01_29_merchant_status_requirements.sql|SHOW COLUMNS FROM merchantlist LIKE 'min_status'|empty| -9220|2022_12_19_player_events_tables.sql|SHOW TABLES LIKE 'player_event_logs'|empty| -9221|2023_02_24_npc_scaling_zone_id_instance_version.sql|SHOW COLUMNS FROM `npc_scale_global_base` LIKE 'zone_id'|empty| -9222|2023_02_28_npc_scaling_zone_list_version_list.sql|SHOW COLUMNS FROM `npc_scale_global_base` LIKE 'zone_id_list'|empty| -9223|2023_03_04_npc_scale_global_base_heroic_strikethrough.sql|SHOW COLUMNS FROM `npc_scale_global_base` LIKE 'heroic_strikethrough'|empty| -9224|2023_03_08_npc_scale_global_base_avoidance.sql|SHOW COLUMNS FROM `npc_scale_global_base` LIKE 'hp_regen_per_second'|empty| -9225|2023_01_21_bots_raid_members.sql|SHOW COLUMNS FROM `raid_members` LIKE 'bot_id'|empty| -9226|2023_03_17_corpse_fields.sql|SHOW COLUMNS FROM `character_corpse_items` LIKE 'custom_data'|empty| -9227|2023_03_24_npc_scale_global_base_verify.sql|SHOW COLUMNS FROM `npc_scale_global_base` LIKE 'heroic_strikethrough'|not_empty| - -# Upgrade conditions: -# This won't be needed after this system is implemented, but it is used database that are not -# yet using the versioning system to figure out where the database is schema wise to determine -# which updates are necessary to run -# -# Example: Version|Filename.sql|Query_to_Check_Condition_For_Needed_Update|match type|text to match -# 0 = Database Version -# 1 = Filename.sql -# 2 = Query_to_Check_Condition_For_Needed_Update -# 3 = Match Type - If condition from match type to Value 4 is true, update will flag for needing to be ran -# contains = If query results contains text from 4th value -# match = If query results matches text from 4th value -# missing = If query result is missing text from 4th value -# empty = If the query results in no results -# not_empty = If the query is not empty -# 4 = Text to match -# -# diff --git a/utils/sql/git/README b/utils/sql/git/README index 9b433f638..fc03720de 100644 --- a/utils/sql/git/README +++ b/utils/sql/git/README @@ -1,15 +1,4 @@ -On the move from svn -> git we lost the ability to track revision numbers on the repo. +Database updates have been migrated into native code as of #2857. -No big deal! - -What we'll do instead as follows: - --Optional SQL updates go in optional/ --Required SQL updates go in required/ -All updates will follow a specific format of YYYY_MM_DD_Desc.sql, this is so it's easy to sort. - -So the following is a good example of what I expect to see -2013_02_16_GitConversion.sql - - -The new bots/ folder contains two sub-folders named optional/ and required/ for updates. \ No newline at end of file +Main updates: https://github.com/EQEmu/Server/tree/master/common/database/database_update_manifest.cpp +Bot updates: https://github.com/EQEmu/Server/tree/master/common/database/database_update_manifest_bots.cpp diff --git a/utils/sql/git/bots/bots_db_update_manifest.txt b/utils/sql/git/bots/bots_db_update_manifest.txt deleted file mode 100644 index 32191b95a..000000000 --- a/utils/sql/git/bots/bots_db_update_manifest.txt +++ /dev/null @@ -1,58 +0,0 @@ -9000|2015_09_30_bots.sql|SHOW TABLES LIKE 'bot_data'|empty| -9001|2016_03_24_bots_command_settings.sql|SHOW TABLES LIKE 'bot_command_settings'|empty| -9002|2016_03_24_bots_command_rules.sql|SELECT * FROM `rule_values` WHERE `rule_name` LIKE 'Bots:CommandSpellRank'|empty| -9003|2016_04_05_bots_pet_spell_id_field.sql|SHOW COLUMNS FROM `bot_pets` LIKE 'pet_id'|not_empty| -9004|2016_04_07_bots_heal_override_target.sql|SELECT `bot_command` FROM `bot_command_settings` WHERE `bot_command` LIKE 'healrotationclearhot'|empty| -9005|2016_04_08_bots_heal_rotations.sql|SHOW TABLES LIKE 'bot_heal_rotations'|empty| -9006|2016_04_12_bots_inventory_window.sql|SELECT `bot_command` FROM `bot_command_settings` WHERE `bot_command` LIKE 'inventorywindow'|empty| -9007|2016_06_23_bots_camel_case_name_rule.sql|SELECT * FROM `rule_values` WHERE `rule_name` LIKE 'Bots:AllowCamelCaseNames'|empty| -9008|2016_06_28_bots_inventory_charges_update.sql|SELECT * FROM `information_schema`.`COLUMNS` isc WHERE isc.`TABLE_SCHEMA` = DATABASE() AND isc.`TABLE_NAME` = 'bot_inventories' AND isc.`COLUMN_NAME` = 'inst_charges' AND isc.`DATA_TYPE` = 'tinyint'|not_empty| -9009|2017_02_15_bots_bot_spells_entries.sql|SELECT `id` FROM `npc_spells_entries` WHERE `npc_spells_id` >= 701 AND `npc_spells_id` <= 712|not_empty| -9010|2017_02_20_bots_bard_spell_update.sql|SELECT * FROM `bot_spells_entries` WHERE (`npc_spells_id` = 711 OR `npc_spells_id` = 3008) AND `type` >= 0xFFFF0000|empty| -9011|2017_02_23_bots_spell_casting_chances.sql|SHOW TABLES LIKE 'bot_spell_casting_chances'|empty| -9012|2017_02_26_bots_npc_spells_update_for_bots.sql|SELECT * FROM `npc_spells` WHERE `id` = '701' AND `name` = 'Cleric Bot'|not_empty| -9013|2017_02_26_bots_spells_id_update_for_saved_bots.sql|SELECT * FROM `bot_data` WHERE `spells_id` >= '701' AND `spells_id` <= '712'|not_empty| -9014|2017_02_26_bots_spells_id_update_for_bot_spells_entries.sql|SELECT * FROM `bot_spells_entries` WHERE `npc_spells_id` >= '701' AND `npc_spells_id` <= '712'|not_empty| -9015|2017_02_26_bots_spell_casting_chances_update.sql|SHOW COLUMNS FROM `bot_spell_casting_chances` LIKE 'value'|not_empty| -9016|2017_02_26_bots_spell_casting_chances_update.sql|SHOW TABLES LIKE 'bot_spell_casting_chances'|empty| -9017|2017_03_26_bots_spells_id_fix_for_saved_shadowknight_bots.sql|SELECT * FROM `bot_data` WHERE `class` = '5' AND `spells_id` = '3004'|not_empty| -9018|2018_02_02_Bot_Spells_Min_Max_HP.sql|SHOW COLUMNS FROM `bot_spells_entries` LIKE 'min_hp'|empty| -9019|2018_04_12_bots_stop_melee_level.sql|SHOW COLUMNS FROM `bot_data` LIKE 'stop_melee_level'|empty| -9020|2018_08_13_bots_inventory_update.sql|SELECT * FROM `inventory_versions` WHERE `version` = 2 and `bot_step` = 0|not_empty| -9021|2018_10_09_bots_owner_options.sql|SHOW TABLES LIKE 'bot_owner_options'|empty| -9022|2019_02_07_bots_stance_type_update.sql|SELECT * FROM `bot_spell_casting_chances` WHERE `spell_type_index` = '255' AND `class_id` = '255' AND `stance_index` = '0'|not_empty| -9023|2019_06_22_bots_owner_option_stats_update.sql|SELECT * FROM db_version WHERE bots_version >= 9023|empty| -9024|2019_06_27_bots_pet_get_lost.sql|SELECT `bot_command` FROM `bot_command_settings` WHERE `bot_command` LIKE 'petgetlost'|empty| -9025|2019_08_26_bots_owner_option_spawn_message.sql|SELECT * FROM db_version WHERE bots_version >= 9025|empty| -9026|2019_09_09_bots_owner_options_rework.sql|SHOW COLUMNS FROM `bot_owner_options` LIKE 'option_type'|empty| -9027|2020_03_30_bots_view_update.sql|SELECT * FROM db_version WHERE bots_version >= 9027|empty| -9028|2021_06_04_bot_create_combinations.sql|SHOW TABLES LIKE 'bot_create_combinations'|empty| -9029|2022_06_21_bot_groups_auto_spawn.sql|SHOW COLUMNS from `bot_groups` LIKE 'auto_spawm'|empty| -9030|2022_10_27_bot_data_buckets.sql|SHOW COLUMNS FROM `bot_spells_entries` LIKE 'bucket_name'|empty| -9031|2022_11_13_bot_spells_entries.sql|SELECT * FROM db_version WHERE bots_version >= 9031|empty| -9032|2022_11_07_bot_expansion_bitmask.sql|SHOW COLUMNS FROM `bot_data` LIKE 'expansion_bitmask'|empty| -9033|2022_11_19_bot_spell_settings.sql|SHOW TABLES LIKE 'bot_spell_settings'|empty| -9034|2022_12_02_bot_spell_settings.sql|SHOW COLUMNS FROM `bot_data` LIKE 'enforce_spell_settings'|empty| -9035|2022_12_04_bot_archery.sql|SHOW COLUMNS FROM `bot_data` LIKE 'archery_setting'|empty| -9036|2023_01_19_drop_bot_views.sql|SHOW TABLES LIKE 'vw_groups'|not_empty| -9037|2023_01_22_add_name_index.sql||show index from bot_data WHERE key_name = 'name`|empty| -9038|2023_02_16_add_caster_range.sql|SHOW COLUMNS FROM `bot_data` LIKE 'caster_range'|empty| - -# Upgrade conditions: -# This won't be needed after this system is implemented, but it is used database that are not -# yet using the versioning system to figure out where the database is schema wise to determine -# which updates are necessary to run -# -# Example: Version|Filename.sql|Query_to_Check_Condition_For_Needed_Update|match type|text to match -# 0 = Database Version -# 1 = Filename.sql -# 2 = Query_to_Check_Condition_For_Needed_Update -# 3 = Match Type - If condition from match type to Value 4 is true, update will flag for needing to be ran -# contains = If query results contains text from 4th value -# match = If query results matches text from 4th value -# missing = If query result is missing text from 4th value -# empty = If the query results in no results -# not_empty = If the query is not empty -# 4 = Text to match -# -# diff --git a/utils/sql/git/bots/deprecated/2014_03_22_BotGuildMember_ScriptFailureFix.sql b/utils/sql/git/bots/deprecated/2014_03_22_BotGuildMember_ScriptFailureFix.sql deleted file mode 100644 index 47b735045..000000000 --- a/utils/sql/git/bots/deprecated/2014_03_22_BotGuildMember_ScriptFailureFix.sql +++ /dev/null @@ -1,27 +0,0 @@ -ALTER TABLE `botguildmembers` ADD `alt` TINYINT UNSIGNED NOT NULL DEFAULT '0' AFTER `public_note`; - -DROP VIEW IF EXISTS `vwGuildMembers`; -CREATE VIEW `vwGuildMembers` AS - select 'C' as mobtype, -cm.char_id, -cm.guild_id, -cm.rank, -cm.tribute_enable, -cm.total_tribute, -cm.last_tribute, -cm.banker, -cm.public_note, -cm.alt -from guild_members as cm -union all -select 'B' as mobtype, -bm.char_id, -bm.guild_id, -bm.rank, -bm.tribute_enable, -bm.total_tribute, -bm.last_tribute, -bm.banker, -bm.public_note, -bm.alt -from botguildmembers as bm; \ No newline at end of file diff --git a/utils/sql/git/bots/deprecated/2014_10_16_Lower_Case_View_Fix.sql b/utils/sql/git/bots/deprecated/2014_10_16_Lower_Case_View_Fix.sql deleted file mode 100644 index eb53c9ade..000000000 --- a/utils/sql/git/bots/deprecated/2014_10_16_Lower_Case_View_Fix.sql +++ /dev/null @@ -1,74 +0,0 @@ --- A fix for the auto-conversion view renaming issue - - -DROP VIEW IF EXISTS `vwbotcharactermobs`; -DROP VIEW IF EXISTS `vwbotgroups`; -DROP VIEW IF EXISTS `vwgroups`; -DROP VIEW IF EXISTS `vwguildmembers`; - - -CREATE VIEW `vwBotCharacterMobs` AS -SELECT _utf8'C' AS mobtype, -c.`id`, -c.`name`, -c.`class`, -c.`level`, -c.`last_login`, -c.`zone_id` -FROM `character_data` AS c -UNION ALL -SELECT _utf8'B' AS mobtype, -b.`BotID` AS id, -b.`Name` AS name, -b.`Class` AS class, -b.`BotLevel` AS level, -0 AS timelaston, -0 AS zoneid -FROM bots AS b; - -CREATE VIEW `vwGroups` AS -SELECT g.`groupid` AS groupid, -GetMobType(g.`name`) AS mobtype, -g.`name` AS name, -g.`charid` AS mobid, -IFNULL(c.`level`, b.`BotLevel`) AS level -FROM `group_id` AS g -LEFT JOIN `character_data` AS c ON g.`name` = c.`name` -LEFT JOIN `bots` AS b ON g.`name` = b.`Name`; - -CREATE VIEW `vwBotGroups` AS -SELECT g.`BotGroupId`, -g.`BotGroupName`, -g.`BotGroupLeaderBotId`, -b.`Name` AS BotGroupLeaderName, -b.`BotOwnerCharacterId`, -c.`name` AS BotOwnerCharacterName -FROM `botgroup` AS g -JOIN `bots` AS b ON g.`BotGroupLeaderBotId` = b.`BotID` -JOIN `character_data` AS c ON b.`BotOwnerCharacterID` = c.`id` -ORDER BY b.`BotOwnerCharacterId`, g.`BotGroupName`; - -CREATE VIEW `vwGuildMembers` AS -SELECT 'C' AS mobtype, -cm.`char_id`, -cm.`guild_id`, -cm.`rank`, -cm.`tribute_enable`, -cm.`total_tribute`, -cm.`last_tribute`, -cm.`banker`, -cm.`public_note`, -cm.`alt` -FROM `guild_members` AS cm -UNION ALL -SELECT 'B' AS mobtype, -bm.`char_id`, -bm.`guild_id`, -bm.`rank`, -bm.`tribute_enable`, -bm.`total_tribute`, -bm.`last_tribute`, -bm.`banker`, -bm.`public_note`, -bm.`alt` -FROM `botguildmembers` AS bm; diff --git a/utils/sql/git/bots/deprecated/2015_09_30_bots_supplemental.sql b/utils/sql/git/bots/deprecated/2015_09_30_bots_supplemental.sql deleted file mode 100644 index aab94aff3..000000000 --- a/utils/sql/git/bots/deprecated/2015_09_30_bots_supplemental.sql +++ /dev/null @@ -1,1305 +0,0 @@ --- -------------------------------------------------------- --- Host: 127.0.0.1 --- Server version: 10.0.22-MariaDB - mariadb.org binary distribution --- Server OS: Win64 --- HeidiSQL Version: 9.3.0.4984 --- -------------------------------------------------------- - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET NAMES utf8mb4 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; - --- Dumping structure for table peq_raw.bot_spells_entries -DROP TABLE IF EXISTS `bot_spells_entries`; -CREATE TABLE IF NOT EXISTS `bot_spells_entries` ( - `id` int(11) unsigned NOT NULL AUTO_INCREMENT, - `npc_spells_id` int(11) NOT NULL DEFAULT '0', - `spellid` smallint(5) NOT NULL DEFAULT '0', - `type` int(10) unsigned NOT NULL DEFAULT '0', - `minlevel` tinyint(3) unsigned NOT NULL DEFAULT '0', - `maxlevel` tinyint(3) unsigned NOT NULL DEFAULT '255', - `manacost` smallint(5) NOT NULL DEFAULT '-1', - `recast_delay` int(11) NOT NULL DEFAULT '-1', - `priority` smallint(5) NOT NULL DEFAULT '0', - `resist_adjust` int(11) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=2048 DEFAULT CHARSET=latin1; - --- Dumping data for table peq_raw.bot_spells_entries: ~1,270 rows (approximately) -/*!40000 ALTER TABLE `bot_spells_entries` DISABLE KEYS */; -INSERT INTO `bot_spells_entries` (`id`, `npc_spells_id`, `spellid`, `type`, `minlevel`, `maxlevel`, `manacost`, `recast_delay`, `priority`, `resist_adjust`) VALUES - (1, 701, 200, 2, 1, 3, -1, -1, 1, NULL), - (2, 701, 14, 1, 1, 4, -1, -1, 1, NULL), - (3, 701, 201, 1, 1, 1, -1, -1, 1, NULL), - (4, 701, 202, 8, 1, 6, -1, -1, 10, NULL), - (5, 701, 11, 8, 1, 14, -1, -1, 8, NULL), - (6, 701, 207, 16, 1, 28, -1, -1, 1, NULL), - (7, 701, 216, 1, 2, 15, -1, -1, 1, NULL), - (8, 701, 17, 2, 4, 9, -1, -1, 1, NULL), - (9, 701, 560, 1, 5, 13, -1, -1, 1, NULL), - (10, 701, 219, 8, 7, 16, -1, -1, 10, NULL), - (11, 701, 12, 2, 10, 19, -1, -1, 2, NULL), - (12, 701, 485, 8, 11, 16, -1, -1, 7, NULL), - (13, 701, 16, 1, 14, 28, -1, -1, 1, NULL), - (14, 701, 3575, 8, 15, 34, -1, -1, 6, NULL), - (15, 701, 368, 8, 15, 24, -1, -1, 8, NULL), - (16, 701, 123, 1, 16, 30, -1, -1, 1, NULL), - (17, 701, 89, 8, 17, 20, -1, -1, 10, NULL), - (18, 701, 2502, 2, 19, 28, -1, -1, 1, NULL), - (19, 701, 15, 2, 20, 29, -1, -1, 2, NULL), - (20, 701, 4088, 8, 20, 39, -1, -1, 6, NULL), - (21, 701, 486, 8, 21, 30, -1, -1, 10, NULL), - (22, 701, 18, 8, 25, 34, -1, -1, 9, NULL), - (23, 701, 130, 16, 29, 255, -1, -1, 1, NULL), - (24, 701, 2175, 2, 29, 43, -1, -1, 1, NULL), - (25, 701, 329, 1, 29, 43, -1, -1, 1, NULL), - (26, 701, 9, 2, 30, 38, -1, -1, 2, NULL), - (27, 701, 124, 1, 31, 45, -1, -1, 1, NULL), - (28, 701, 487, 8, 31, 39, -1, -1, 10, NULL), - (29, 701, 3576, 8, 35, 61, -1, -1, 7, NULL), - (30, 701, 19, 8, 35, 39, -1, -1, 8, NULL), - (31, 701, 13, 2, 39, 69, -1, -1, 2, NULL), - (32, 701, 3692, 8, 40, 44, -1, -1, 10, NULL), - (33, 701, 4089, 8, 40, 53, -1, -1, 6, NULL), - (34, 701, 1445, 8, 40, 48, -1, -1, 11, NULL), - (35, 701, 1444, 2, 44, 58, -1, -1, 1, NULL), - (36, 701, 672, 1, 44, 53, -1, -1, 1, NULL), - (37, 701, 4053, 8, 45, 59, -1, -1, 10, NULL), - (38, 701, 125, 1, 46, 57, -1, -1, 1, NULL), - (39, 701, 2505, 8, 49, 57, -1, -1, 11, NULL), - (40, 701, 1547, 8, 51, 59, -1, -1, 9, NULL), - (41, 701, 1543, 1, 54, 55, -1, -1, 1, NULL), - (42, 701, 4090, 8, 54, 61, -1, -1, 6, NULL), - (43, 701, 2508, 1, 56, 61, -1, -1, 1, NULL), - (44, 701, 1544, 1, 58, 60, -1, -1, 1, NULL), - (45, 701, 2509, 8, 58, 59, -1, -1, 11, NULL), - (46, 701, 1522, 2, 59, 59, -1, -1, 1, NULL), - (47, 701, 1546, 8, 60, 255, -1, -1, 9, NULL), - (48, 701, 2109, 8, 60, 64, -1, -1, 11, NULL), - (49, 701, 2122, 8, 60, 61, -1, -1, 10, NULL), - (50, 701, 2180, 2, 60, 61, -1, -1, 1, NULL), - (51, 701, 3481, 1, 61, 62, -1, -1, 1, NULL), - (52, 701, 3467, 8, 62, 64, -1, -1, 10, NULL), - (53, 701, 3472, 8, 62, 63, -1, -1, 7, NULL), - (54, 701, 3475, 2, 62, 64, -1, -1, 1, NULL), - (55, 701, 3476, 1, 62, 64, -1, -1, 1, NULL), - (56, 701, 4091, 8, 62, 66, -1, -1, 6, NULL), - (57, 701, 3482, 1, 63, 65, -1, -1, 1, NULL), - (58, 701, 4108, 8, 64, 66, -1, -1, 7, NULL), - (59, 701, 3474, 8, 65, 69, -1, -1, 11, NULL), - (60, 701, 3479, 8, 65, 66, -1, -1, 10, NULL), - (61, 701, 4882, 2, 65, 66, -1, -1, 1, NULL), - (62, 701, 4973, 1, 65, 66, -1, -1, 1, NULL), - (63, 701, 5254, 1, 66, 67, -1, -1, 1, NULL), - (64, 701, 5257, 8, 67, 69, -1, -1, 10, NULL), - (65, 701, 5258, 8, 67, 68, -1, -1, 7, NULL), - (66, 701, 5259, 2, 67, 255, -1, -1, 1, NULL), - (67, 701, 5260, 1, 67, 68, -1, -1, 1, NULL), - (68, 701, 5261, 8, 67, 255, -1, -1, 6, NULL), - (69, 701, 5266, 1, 68, 255, -1, -1, 1, NULL), - (70, 701, 5272, 8, 69, 255, -1, -1, 7, NULL), - (71, 701, 8006, 1, 69, 69, -1, -1, 1, NULL), - (72, 701, 5276, 8, 70, 255, -1, -1, 11, NULL), - (73, 701, 5278, 8, 70, 255, -1, -1, 10, NULL), - (74, 701, 5279, 1, 70, 255, -1, -1, 1, NULL), - (75, 701, 6140, 2, 70, 255, -1, -1, 2, NULL), - (76, 702, 288, 8, 1, 5, -1, -1, 1, NULL), - (77, 702, 372, 1, 1, 7, -1, -1, 3, NULL), - (78, 702, 378, 8, 2, 9, -1, -1, 2, NULL), - (79, 702, 230, 4, 3, 16, -1, -1, 2, NULL), - (80, 702, 376, 1, 4, 4, -1, -1, 3, NULL), - (81, 702, 477, 1, 5, 14, -1, -1, 3, NULL), - (82, 702, 246, 8, 6, 14, -1, -1, 1, NULL), - (83, 702, 656, 1, 8, 23, -1, -1, 3, NULL), - (84, 702, 381, 8, 9, 60, -1, -1, 4, NULL), - (85, 702, 2551, 8, 10, 30, -1, -1, 2, NULL), - (86, 702, 383, 1, 10, 15, -1, -1, 3, NULL), - (87, 702, 48, 512, 11, 33, -1, -1, 1, NULL), - (88, 702, 236, 8, 13, 20, -1, -1, 5, NULL), - (89, 702, 309, 8, 15, 22, -1, -1, 1, NULL), - (90, 702, 657, 1, 15, 25, -1, -1, 3, NULL), - (91, 702, 38, 1, 16, 36, -1, -1, 3, NULL), - (92, 702, 131, 4, 17, 38, -1, -1, 2, NULL), - (93, 702, 22, 1, 17, 17, -1, -1, 3, NULL), - (94, 702, 2552, 1, 18, 27, -1, -1, 3, NULL), - (95, 702, 503, 1, 19, 46, -1, -1, 2, NULL), - (96, 702, 108, 8, 20, 41, -1, -1, 6, NULL), - (97, 702, 387, 8, 21, 29, -1, -1, 5, NULL), - (98, 702, 65, 8, 23, 32, -1, -1, 1, NULL), - (99, 702, 464, 1, 24, 33, -1, -1, 3, NULL), - (100, 702, 2553, 32, 25, 44, -1, -1, 0, NULL), - (101, 702, 465, 1, 26, 42, -1, -1, 3, NULL), - (102, 702, 470, 1, 28, 40, -1, -1, 3, NULL), - (103, 702, 393, 8, 30, 39, -1, -1, 5, NULL), - (104, 702, 1419, 8, 31, 48, -1, -1, 2, NULL), - (105, 702, 66, 8, 33, 43, -1, -1, 1, NULL), - (106, 702, 49, 512, 34, 52, -1, -1, 1, NULL), - (107, 702, 658, 1, 34, 48, -1, -1, 3, NULL), - (108, 702, 466, 1, 37, 57, -1, -1, 3, NULL), - (109, 702, 752, 16, 37, 59, -1, -1, 1, NULL), - (110, 702, 132, 4, 39, 47, -1, -1, 2, NULL), - (111, 702, 3811, 8, 40, 57, -1, -1, 3, NULL), - (112, 702, 394, 8, 40, 51, -1, -1, 5, NULL), - (113, 702, 23, 1, 41, 46, -1, -1, 3, NULL), - (114, 702, 109, 8, 42, 53, -1, -1, 6, NULL), - (115, 702, 659, 1, 43, 59, -1, -1, 3, NULL), - (116, 702, 67, 8, 44, 53, -1, -1, 1, NULL), - (117, 702, 2555, 32, 45, 53, -1, -1, 0, NULL), - (118, 702, 612, 1, 47, 50, -1, -1, 2, NULL), - (119, 702, 755, 1, 47, 59, -1, -1, 3, NULL), - (120, 702, 133, 4, 48, 50, -1, -1, 2, NULL), - (121, 702, 4067, 8, 49, 56, -1, -1, 2, NULL), - (122, 702, 732, 1, 49, 59, -1, -1, 3, NULL), - (123, 702, 1631, 128, 51, 57, -1, -1, 2, NULL), - (124, 702, 1634, 1, 51, 55, -1, -1, 2, NULL), - (125, 702, 1609, 8, 52, 62, -1, -1, 5, NULL), - (126, 702, 1526, 512, 53, 255, -1, -1, 1, NULL), - (127, 702, 1610, 8, 54, 60, -1, -1, 1, NULL), - (128, 702, 2557, 32, 54, 59, -1, -1, 0, NULL), - (129, 702, 3582, 8, 54, 61, -1, -1, 6, NULL), - (130, 702, 1635, 1, 56, 63, -1, -1, 2, NULL), - (131, 702, 4068, 8, 57, 63, -1, -1, 2, NULL), - (132, 702, 1633, 4, 58, 60, -1, -1, 2, NULL), - (133, 702, 1640, 1, 58, 60, -1, -1, 3, NULL), - (134, 702, 2559, 8, 58, 255, -1, -1, 3, NULL), - (135, 702, 2884, 1, 60, 64, -1, -1, 3, NULL), - (136, 702, 2116, 1, 60, 63, -1, -1, 3, NULL), - (137, 702, 2117, 16, 60, 255, -1, -1, 1, NULL), - (138, 702, 2560, 32, 60, 255, -1, -1, 0, NULL), - (139, 702, 2883, 1, 60, 62, -1, -1, 3, NULL), - (140, 702, 3194, 4, 61, 255, -1, -1, 2, NULL), - (141, 702, 3300, 8, 61, 63, -1, -1, 1, NULL), - (142, 702, 3326, 8, 61, 255, -1, -1, 4, NULL), - (143, 702, 3328, 1, 61, 66, -1, -1, 3, NULL), - (144, 702, 3329, 8, 62, 255, -1, -1, 6, NULL), - (145, 702, 3301, 8, 63, 67, -1, -1, 5, NULL), - (146, 702, 3335, 1, 63, 64, -1, -1, 3, NULL), - (147, 702, 3302, 8, 64, 65, -1, -1, 1, NULL), - (148, 702, 4069, 8, 64, 69, -1, -1, 2, NULL), - (149, 702, 4066, 1, 64, 68, -1, -1, 3, NULL), - (150, 702, 3333, 1, 64, 69, -1, -1, 2, NULL), - (151, 702, 4981, 1, 65, 69, -1, -1, 3, NULL), - (152, 702, 3191, 1, 65, 255, -1, -1, 3, NULL), - (153, 702, 5443, 8, 66, 255, -1, -1, 1, NULL), - (154, 702, 5445, 1, 67, 67, -1, -1, 3, NULL), - (155, 702, 5448, 8, 68, 255, -1, -1, 5, NULL), - (156, 702, 5450, 1, 68, 255, -1, -1, 3, NULL), - (157, 702, 5458, 1, 69, 255, -1, -1, 3, NULL), - (158, 702, 5459, 8, 70, 255, -1, -1, 2, NULL), - (159, 702, 8043, 1, 70, 255, -1, -1, 3, NULL), - (160, 702, 5456, 1, 70, 255, -1, -1, 3, NULL), - (161, 703, 288, 8, 1, 7, -1, -1, 1, NULL), - (162, 703, 340, 256, 1, 14, -1, -1, 2, NULL), - (163, 703, 341, 64, 1, 2, -1, -1, 3, NULL), - (164, 703, 338, 32, 1, 3, -1, -1, 0, NULL), - (165, 703, 346, 8, 3, 15, -1, -1, 3, NULL), - (166, 703, 502, 64, 3, 11, -1, -1, 3, NULL), - (167, 703, 344, 128, 4, 10, -1, -1, 1, NULL), - (168, 703, 229, 1, 4, 29, -1, 45, 6, NULL), - (169, 703, 348, 256, 4, 33, -1, -1, 3, NULL), - (170, 703, 491, 32, 4, 7, -1, -1, 0, NULL), - (171, 703, 641, 8, 6, 17, -1, -1, 4, NULL), - (172, 703, 359, 8, 7, 19, -1, -1, 5, NULL), - (173, 703, 246, 8, 8, 15, -1, -1, 1, NULL), - (174, 703, 351, 32, 8, 11, -1, -1, 0, NULL), - (175, 703, 1509, 256, 9, 28, -1, -1, 3, NULL), - (176, 703, 360, 256, 10, 27, -1, -1, 3, NULL), - (177, 703, 2541, 8, 11, 22, -1, -1, 6, NULL), - (178, 703, 355, 128, 11, 26, -1, -1, 1, NULL), - (179, 703, 362, 32, 12, 15, -1, -1, 0, NULL), - (180, 703, 445, 64, 12, 19, -1, -1, 3, NULL), - (181, 703, 367, 256, 13, 38, -1, -1, 3, NULL), - (182, 703, 236, 8, 14, 21, -1, -1, 2, NULL), - (183, 703, 365, 256, 15, 34, -1, -1, 3, NULL), - (184, 703, 309, 8, 16, 20, -1, -1, 1, NULL), - (185, 703, 492, 32, 16, 19, -1, -1, 0, NULL), - (186, 703, 2542, 1, 17, 37, -1, -1, 2, NULL), - (187, 703, 642, 8, 18, 30, -1, -1, 4, NULL), - (188, 703, 199, 16, 20, 57, -1, -1, 1, NULL), - (189, 703, 440, 32, 20, 23, -1, -1, 0, NULL), - (190, 703, 446, 64, 20, 25, -1, -1, 3, NULL), - (191, 703, 204, 1, 21, 31, -1, -1, 5, NULL), - (192, 703, 387, 8, 22, 31, -1, -1, 2, NULL), - (193, 703, 449, 8, 23, 34, -1, -1, 6, NULL), - (194, 703, 493, 32, 24, 28, -1, -1, 0, NULL), - (195, 703, 524, 64, 26, 38, -1, -1, 3, NULL), - (196, 703, 452, 128, 27, 46, -1, -1, 1, NULL), - (197, 703, 451, 256, 28, 46, -1, -1, 3, NULL), - (198, 703, 441, 32, 29, 32, -1, -1, 0, NULL), - (199, 703, 454, 256, 29, 44, -1, -1, 3, NULL), - (200, 703, 127, 1, 30, 55, -1, 45, 6, NULL), - (201, 703, 643, 8, 31, 47, -1, -1, 4, NULL), - (202, 703, 1415, 1, 32, 48, -1, -1, 5, NULL), - (203, 703, 393, 8, 32, 42, -1, -1, 2, NULL), - (204, 703, 494, 32, 33, 38, -1, -1, 0, NULL), - (205, 703, 435, 256, 34, 49, -1, -1, 3, NULL), - (206, 703, 31, 256, 35, 39, -1, -1, 3, NULL), - (207, 703, 661, 8, 35, 54, -1, -1, 6, NULL), - (208, 703, 2544, 1, 38, 255, -1, -1, 2, NULL), - (209, 703, 442, 32, 39, 43, -1, -1, 0, NULL), - (210, 703, 525, 64, 39, 47, -1, -1, 3, NULL), - (211, 703, 4096, 256, 39, 53, -1, -1, 3, NULL), - (212, 703, 1508, 256, 40, 51, -1, -1, 3, NULL), - (213, 703, 394, 8, 43, 51, -1, -1, 2, NULL), - (214, 703, 495, 32, 44, 47, -1, -1, 0, NULL), - (215, 703, 3702, 256, 45, 48, -1, -1, 3, NULL), - (216, 703, 453, 128, 47, 58, -1, -1, 1, NULL), - (217, 703, 6, 256, 47, 57, -1, -1, 3, NULL), - (218, 703, 443, 32, 48, 52, -1, -1, 0, NULL), - (219, 703, 447, 64, 48, 53, -1, -1, 3, NULL), - (220, 703, 644, 8, 48, 55, -1, -1, 4, NULL), - (221, 703, 3571, 1, 49, 53, -1, -1, 5, NULL), - (222, 703, 456, 256, 49, 56, -1, -1, 3, NULL), - (223, 703, 436, 256, 50, 64, -1, -1, 3, NULL), - (224, 703, 1609, 8, 52, 62, -1, -1, 2, NULL), - (225, 703, 32, 256, 52, 55, -1, -1, 3, NULL), - (226, 703, 1621, 32, 53, 55, -1, -1, 0, NULL), - (227, 703, 3572, 1, 54, 59, -1, -1, 5, NULL), - (228, 703, 1613, 64, 54, 58, -1, -1, 3, NULL), - (229, 703, 4097, 256, 54, 62, -1, -1, 3, NULL), - (230, 703, 1414, 8, 55, 61, -1, -1, 6, NULL), - (231, 703, 1527, 1, 56, 56, -1, 45, 6, NULL), - (232, 703, 1611, 8, 56, 59, -1, -1, 4, NULL), - (233, 703, 1615, 256, 56, 66, -1, -1, 3, NULL), - (234, 703, 1622, 32, 56, 58, -1, -1, 0, NULL), - (235, 703, 1616, 256, 57, 59, -1, -1, 3, NULL), - (236, 703, 6980, 1, 57, 61, -1, -1, 6, NULL), - (237, 703, 1612, 16, 58, 255, -1, -1, 1, NULL), - (238, 703, 1617, 256, 58, 59, -1, -1, 3, NULL), - (239, 703, 1619, 128, 59, 62, -1, -1, 1, NULL), - (240, 703, 1623, 32, 59, 60, -1, -1, 0, NULL), - (241, 703, 1618, 64, 59, 59, -1, -1, 3, NULL), - (242, 703, 1393, 64, 60, 60, -1, -1, 3, NULL), - (243, 703, 2114, 8, 60, 63, -1, -1, 4, NULL), - (244, 703, 2115, 1, 60, 60, -1, -1, 5, NULL), - (245, 703, 2550, 256, 60, 64, -1, -1, 3, NULL), - (246, 703, 2885, 256, 60, 64, -1, -1, 3, NULL), - (247, 703, 3032, 64, 61, 66, -1, -1, 3, NULL), - (248, 703, 3035, 1, 61, 65, -1, -1, 5, NULL), - (249, 703, 3304, 32, 61, 62, -1, -1, 0, NULL), - (250, 703, 3305, 8, 62, 66, -1, -1, 6, NULL), - (251, 703, 6981, 1, 62, 66, -1, -1, 6, NULL), - (252, 703, 3301, 8, 63, 68, -1, -1, 2, NULL), - (253, 703, 3309, 128, 63, 67, -1, -1, 1, NULL), - (254, 703, 3310, 32, 63, 64, -1, -1, 0, NULL), - (255, 703, 4098, 256, 63, 66, -1, -1, 3, NULL), - (256, 703, 3311, 8, 64, 64, -1, -1, 4, NULL), - (257, 703, 3303, 256, 65, 68, -1, -1, 3, NULL), - (258, 703, 3314, 32, 65, 66, -1, -1, 0, NULL), - (259, 703, 4889, 256, 65, 255, -1, -1, 3, NULL), - (260, 703, 4890, 256, 65, 68, -1, -1, 3, NULL), - (261, 703, 4978, 8, 65, 69, -1, -1, 4, NULL), - (262, 703, 5420, 1, 66, 255, -1, -1, 5, NULL), - (263, 703, 5419, 64, 67, 69, -1, -1, 3, NULL), - (264, 703, 5424, 256, 67, 255, -1, -1, 3, NULL), - (265, 703, 5425, 8, 67, 255, -1, -1, 6, NULL), - (266, 703, 5431, 32, 67, 69, -1, -1, 0, NULL), - (267, 703, 5432, 256, 67, 69, -1, -1, 3, NULL), - (268, 703, 6982, 1, 67, 255, -1, -1, 6, NULL), - (269, 703, 5430, 128, 68, 255, -1, -1, 1, NULL), - (270, 703, 5428, 8, 69, 255, -1, -1, 2, NULL), - (271, 703, 5437, 256, 69, 69, -1, -1, 3, NULL), - (272, 703, 7999, 256, 69, 255, -1, -1, 3, NULL), - (273, 703, 5438, 32, 70, 255, -1, -1, 0, NULL), - (274, 703, 5441, 256, 70, 255, -1, -1, 3, NULL), - (275, 703, 6143, 64, 70, 255, -1, -1, 3, NULL), - (276, 703, 7994, 256, 70, 255, -1, -1, 3, NULL), - (277, 703, 5434, 8, 70, 255, -1, -1, 4, NULL), - (278, 704, 288, 8, 1, 4, -1, -1, 1, NULL), - (279, 704, 93, 1, 1, 3, -1, -1, 5, NULL), - (280, 704, 315, 32, 2, 5, -1, -1, 0, NULL), - (281, 704, 316, 32, 3, 6, -1, -1, 0, NULL), - (282, 704, 317, 32, 4, 7, -1, -1, 0, NULL), - (283, 704, 94, 1, 4, 4, -1, -1, 5, NULL), - (284, 704, 58, 32, 5, 8, -1, -1, 0, NULL), - (285, 704, 246, 8, 5, 15, -1, -1, 1, NULL), - (286, 704, 322, 1, 5, 14, -1, -1, 5, NULL), - (287, 704, 398, 32, 6, 9, -1, -1, 0, NULL), - (288, 704, 399, 32, 7, 10, -1, -1, 0, NULL), - (289, 704, 324, 1, 7, 22, -1, -1, 6, NULL), - (290, 704, 332, 8, 7, 18, -1, -1, 2, NULL), - (291, 704, 400, 32, 8, 11, -1, -1, 0, NULL), - (292, 704, 397, 32, 9, 12, -1, -1, 0, NULL), - (293, 704, 248, 1, 9, 17, -1, -1, 3, NULL), - (294, 704, 402, 32, 10, 13, -1, -1, 0, NULL), - (295, 704, 403, 32, 11, 14, -1, -1, 0, NULL), - (296, 704, 327, 8, 11, 28, -1, -1, 3, NULL), - (297, 704, 404, 32, 12, 15, -1, -1, 0, NULL), - (298, 704, 333, 8, 12, 24, -1, -1, 4, NULL), - (299, 704, 401, 32, 13, 16, -1, -1, 0, NULL), - (300, 704, 336, 32, 14, 17, -1, -1, 0, NULL), - (301, 704, 395, 32, 15, 18, -1, -1, 0, NULL), - (302, 704, 334, 1, 15, 17, -1, -1, 5, NULL), - (303, 704, 396, 32, 16, 19, -1, -1, 0, NULL), - (304, 704, 309, 8, 16, 23, -1, -1, 1, NULL), - (305, 704, 335, 32, 17, 20, -1, -1, 0, NULL), - (306, 704, 497, 32, 18, 21, -1, -1, 0, NULL), - (307, 704, 68, 1, 18, 30, -1, -1, 5, NULL), - (308, 704, 663, 1, 18, 24, -1, -1, 3, NULL), - (309, 704, 498, 32, 19, 22, -1, -1, 0, NULL), - (310, 704, 411, 8, 19, 27, -1, -1, 2, NULL), - (311, 704, 499, 32, 20, 23, -1, -1, 0, NULL), - (312, 704, 496, 32, 21, 24, -1, -1, 0, NULL), - (313, 704, 570, 32, 22, 25, -1, -1, 0, NULL), - (314, 704, 571, 32, 23, 26, -1, -1, 0, NULL), - (315, 704, 113, 1, 23, 40, -1, -1, 6, NULL), - (316, 704, 572, 32, 24, 27, -1, -1, 0, NULL), - (317, 704, 65, 8, 24, 31, -1, -1, 1, NULL), - (318, 704, 569, 32, 25, 28, -1, -1, 0, NULL), - (319, 704, 115, 1, 25, 27, -1, -1, 3, NULL), - (320, 704, 81, 8, 25, 40, -1, -1, 4, NULL), - (321, 704, 574, 32, 26, 30, -1, -1, 0, NULL), - (322, 704, 575, 32, 27, 31, -1, -1, 0, NULL), - (323, 704, 576, 32, 28, 32, -1, -1, 0, NULL), - (324, 704, 479, 8, 28, 37, -1, -1, 2, NULL), - (325, 704, 664, 1, 28, 47, -1, -1, 3, NULL), - (326, 704, 106, 8, 28, 46, -1, -1, 3, NULL), - (327, 704, 573, 32, 29, 33, -1, -1, 0, NULL), - (328, 704, 1400, 32, 30, 49, -1, -1, 0, NULL), - (329, 704, 621, 32, 31, 35, -1, -1, 0, NULL), - (330, 704, 120, 1, 31, 32, -1, -1, 5, NULL), - (331, 704, 622, 32, 32, 36, -1, -1, 0, NULL), - (332, 704, 49, 512, 32, 52, -1, -1, 3, NULL), - (333, 704, 66, 8, 32, 42, -1, -1, 1, NULL), - (334, 704, 623, 32, 33, 37, -1, -1, 0, NULL), - (335, 704, 69, 1, 33, 46, -1, -1, 5, NULL), - (336, 704, 620, 32, 34, 38, -1, -1, 0, NULL), - (337, 704, 625, 32, 36, 40, -1, -1, 0, NULL), - (338, 704, 626, 32, 37, 41, -1, -1, 0, NULL), - (339, 704, 627, 32, 38, 42, -1, -1, 0, NULL), - (340, 704, 680, 8, 38, 44, -1, -1, 2, NULL), - (341, 704, 624, 32, 39, 43, -1, -1, 0, NULL), - (342, 704, 629, 32, 41, 48, -1, -1, 0, NULL), - (343, 704, 114, 1, 41, 56, -1, -1, 6, NULL), - (344, 704, 82, 8, 41, 51, -1, -1, 4, NULL), - (345, 704, 630, 32, 42, 46, -1, -1, 0, NULL), - (346, 704, 631, 32, 43, 47, -1, -1, 0, NULL), - (347, 704, 1403, 1, 43, 54, -1, -1, 4, NULL), - (348, 704, 67, 8, 43, 53, -1, -1, 1, NULL), - (349, 704, 628, 32, 44, 45, -1, -1, 0, NULL), - (350, 704, 412, 8, 45, 52, -1, -1, 2, NULL), - (351, 704, 632, 32, 46, 50, -1, -1, 0, NULL), - (352, 704, 4079, 8, 46, 57, -1, -1, 5, NULL), - (353, 704, 634, 32, 47, 51, -1, -1, 0, NULL), - (354, 704, 107, 8, 47, 51, -1, -1, 3, NULL), - (355, 704, 70, 1, 47, 51, -1, -1, 5, NULL), - (356, 704, 635, 32, 48, 52, -1, -1, 0, NULL), - (357, 704, 116, 1, 48, 55, -1, -1, 3, NULL), - (358, 704, 633, 32, 49, 53, -1, -1, 0, NULL), - (359, 704, 1402, 32, 50, 59, -1, -1, 0, NULL), - (360, 704, 1671, 32, 51, 56, -1, -1, 0, NULL), - (361, 704, 1673, 32, 52, 57, -1, -1, 0, NULL), - (362, 704, 1660, 1, 52, 58, -1, -1, 5, NULL), - (363, 704, 1666, 8, 52, 53, -1, -1, 4, NULL), - (364, 704, 3700, 8, 52, 54, -1, -1, 3, NULL), - (365, 704, 1674, 32, 53, 58, -1, -1, 0, NULL), - (366, 704, 1526, 512, 53, 255, -1, -1, 3, NULL), - (367, 704, 1668, 8, 53, 55, -1, -1, 2, NULL), - (368, 704, 1672, 32, 54, 59, -1, -1, 0, NULL), - (369, 704, 1610, 8, 54, 60, -1, -1, 1, NULL), - (370, 704, 2879, 8, 54, 57, -1, -1, 4, NULL), - (371, 704, 1405, 1, 55, 255, -1, -1, 4, NULL), - (372, 704, 1472, 8, 55, 59, -1, -1, 3, NULL), - (373, 704, 1529, 1, 56, 63, -1, -1, 3, NULL), - (374, 704, 1667, 8, 56, 59, -1, -1, 2, NULL), - (375, 704, 1675, 32, 57, 64, -1, -1, 0, NULL), - (376, 704, 1663, 1, 57, 62, -1, -1, 6, NULL), - (377, 704, 1677, 32, 58, 62, -1, -1, 0, NULL), - (378, 704, 2539, 8, 58, 61, -1, -1, 4, NULL), - (379, 704, 4080, 8, 58, 63, -1, -1, 5, NULL), - (380, 704, 1678, 32, 59, 60, -1, -1, 0, NULL), - (381, 704, 1664, 1, 59, 60, -1, -1, 5, NULL), - (382, 704, 1404, 32, 60, 64, -1, -1, 0, NULL), - (383, 704, 1676, 32, 60, 61, -1, -1, 0, NULL), - (384, 704, 1669, 8, 60, 60, -1, -1, 2, NULL), - (385, 704, 2119, 8, 60, 61, -1, -1, 3, NULL), - (386, 704, 3317, 32, 61, 65, -1, -1, 0, NULL), - (387, 704, 3198, 8, 61, 62, -1, -1, 2, NULL), - (388, 704, 3300, 8, 61, 63, -1, -1, 1, NULL), - (389, 704, 3318, 1, 61, 65, -1, -1, 5, NULL), - (390, 704, 3320, 32, 62, 66, -1, -1, 0, NULL), - (391, 704, 3031, 8, 62, 67, -1, -1, 4, NULL), - (392, 704, 3237, 8, 62, 68, -1, -1, 3, NULL), - (393, 704, 3322, 32, 63, 67, -1, -1, 0, NULL), - (394, 704, 3486, 8, 63, 65, -1, -1, 2, NULL), - (395, 704, 3321, 1, 63, 67, -1, -1, 6, NULL), - (396, 704, 3238, 1, 64, 68, -1, -1, 3, NULL), - (397, 704, 3302, 8, 64, 65, -1, -1, 1, NULL), - (398, 704, 4081, 8, 64, 68, -1, -1, 5, NULL), - (399, 704, 4888, 32, 65, 255, -1, -1, 0, NULL), - (400, 704, 3324, 32, 65, 69, -1, -1, 0, NULL), - (401, 704, 5473, 32, 66, 255, -1, -1, 0, NULL), - (402, 704, 5466, 8, 66, 69, -1, -1, 2, NULL), - (403, 704, 5472, 8, 66, 255, -1, -1, 1, NULL), - (404, 704, 5474, 1, 66, 255, -1, -1, 5, NULL), - (405, 704, 5480, 32, 67, 255, -1, -1, 0, NULL), - (406, 704, 5485, 32, 68, 255, -1, -1, 0, NULL), - (407, 704, 5476, 8, 68, 255, -1, -1, 4, NULL), - (408, 704, 5484, 1, 68, 255, -1, -1, 6, NULL), - (409, 704, 5478, 8, 69, 255, -1, -1, 3, NULL), - (410, 704, 5490, 1, 69, 255, -1, -1, 3, NULL), - (411, 704, 5494, 8, 69, 255, -1, -1, 5, NULL), - (412, 704, 5495, 32, 70, 255, -1, -1, 0, NULL), - (413, 704, 5488, 8, 70, 255, -1, -1, 2, NULL), - (414, 705, 288, 8, 1, 5, -1, -1, 1, NULL), - (415, 705, 40, 8, 1, 18, -1, -1, 2, NULL), - (416, 705, 289, 1, 1, 6, -1, -1, 7, NULL), - (417, 705, 286, 1, 1, 3, -1, -1, 6, NULL), - (418, 705, 285, 32, 1, 1, -1, -1, 0, NULL), - (419, 705, 681, 32, 2, 6, -1, -1, 0, NULL), - (420, 705, 294, 1, 4, 10, -1, -1, 6, NULL), - (421, 705, 246, 8, 6, 15, -1, -1, 1, NULL), - (422, 705, 295, 32, 7, 8, -1, -1, 0, NULL), - (423, 705, 296, 1, 7, 15, -1, -1, 7, NULL), - (424, 705, 48, 512, 7, 21, -1, -1, 7, NULL), - (425, 705, 302, 1, 9, 22, -1, -1, 2, NULL), - (426, 705, 303, 1, 9, 27, -1, -1, 5, NULL), - (427, 705, 682, 32, 9, 13, -1, -1, 0, NULL), - (428, 705, 2561, 8, 11, 16, -1, -1, 4, NULL), - (429, 705, 521, 1, 11, 25, -1, -1, 6, NULL), - (430, 705, 683, 32, 14, 16, -1, -1, 0, NULL), - (431, 705, 697, 8, 14, 25, -1, -1, 5, NULL), - (432, 705, 39, 8, 15, 20, -1, -1, 6, NULL), - (433, 705, 309, 8, 16, 22, -1, -1, 1, NULL), - (434, 705, 306, 1, 16, 20, -1, -1, 7, NULL), - (435, 705, 2562, 8, 17, 29, -1, -1, 4, NULL), - (436, 705, 684, 32, 17, 21, -1, -1, 0, NULL), - (437, 705, 170, 8, 21, 38, -1, -1, 6, NULL), - (438, 705, 350, 1, 21, 31, -1, -1, 7, NULL), - (439, 705, 24, 512, 22, 27, -1, -1, 7, NULL), - (440, 705, 685, 32, 22, 28, -1, -1, 0, NULL), - (441, 705, 185, 1, 23, 40, -1, -1, 2, NULL), - (442, 705, 65, 8, 23, 30, -1, -1, 1, NULL), - (443, 705, 174, 8, 26, 41, -1, -1, 5, NULL), - (444, 705, 450, 1, 26, 46, -1, -1, 6, NULL), - (445, 705, 49, 512, 28, 41, -1, -1, 7, NULL), - (446, 705, 619, 1, 28, 60, -1, -1, 5, NULL), - (447, 705, 4073, 8, 29, 43, -1, -1, 2, NULL), - (448, 705, 686, 32, 29, 30, -1, -1, 0, NULL), - (449, 705, 74, 1, 30, 49, -1, -1, 7, NULL), - (450, 705, 66, 8, 31, 39, -1, -1, 1, NULL), - (451, 705, 687, 32, 31, 36, -1, -1, 0, NULL), - (452, 705, 71, 1, 32, 42, -1, -1, 7, NULL), - (453, 705, 1408, 8, 34, 54, -1, -1, 3, NULL), - (454, 705, 688, 32, 37, 40, -1, -1, 0, NULL), - (455, 705, 171, 8, 39, 46, -1, -1, 7, NULL), - (456, 705, 1474, 8, 40, 62, -1, -1, 1, NULL), - (457, 705, 186, 1, 41, 56, -1, -1, 2, NULL), - (458, 705, 689, 32, 41, 47, -1, -1, 0, NULL), - (459, 705, 1694, 8, 42, 51, -1, -1, 5, NULL), - (460, 705, 25, 512, 42, 52, -1, -1, 7, NULL), - (461, 705, 673, 1, 43, 53, -1, -1, 7, NULL), - (462, 705, 4074, 1, 44, 54, -1, -1, 2, NULL), - (463, 705, 172, 8, 47, 52, -1, -1, 6, NULL), - (464, 705, 195, 1, 47, 58, -1, -1, 6, NULL), - (465, 705, 690, 32, 48, 54, -1, -1, 0, NULL), - (466, 705, 1686, 1, 50, 255, -1, -1, 7, NULL), - (467, 705, 1693, 8, 52, 55, -1, -1, 5, NULL), - (468, 705, 1697, 512, 53, 255, -1, -1, 7, NULL), - (469, 705, 1708, 8, 53, 57, -1, -1, 6, NULL), - (470, 705, 1698, 1, 54, 255, -1, -1, 7, NULL), - (471, 705, 1723, 32, 55, 61, -1, -1, 0, NULL), - (472, 705, 4075, 8, 55, 62, -1, -1, 2, NULL), - (473, 705, 1409, 8, 55, 59, -1, -1, 3, NULL), - (474, 705, 1695, 8, 56, 59, -1, -1, 5, NULL), - (475, 705, 1712, 1, 57, 68, -1, -1, 2, NULL), - (476, 705, 1709, 8, 58, 59, -1, -1, 6, NULL), - (477, 705, 1703, 1, 59, 61, -1, -1, 6, NULL), - (478, 705, 1710, 8, 60, 61, -1, -1, 6, NULL), - (479, 705, 2570, 8, 60, 62, -1, -1, 5, NULL), - (480, 705, 6739, 8, 61, 66, -1, -1, 4, NULL), - (481, 705, 3199, 8, 61, 65, -1, -1, 3, NULL), - (482, 705, 3229, 16, 61, 255, -1, -1, 1, NULL), - (483, 705, 3034, 32, 62, 65, -1, -1, 0, NULL), - (484, 705, 3240, 8, 62, 64, -1, -1, 6, NULL), - (485, 705, 3345, 1, 62, 68, -1, -1, 6, NULL), - (486, 705, 3350, 8, 63, 64, -1, -1, 5, NULL), - (487, 705, 4076, 8, 63, 67, -1, -1, 2, NULL), - (488, 705, 3241, 8, 63, 255, -1, -1, 1, NULL), - (489, 705, 3178, 8, 65, 66, -1, -1, 6, NULL), - (490, 705, 3360, 8, 65, 67, -1, -1, 5, NULL), - (491, 705, 5500, 8, 66, 255, -1, -1, 3, NULL), - (492, 705, 5505, 32, 66, 255, -1, -1, 0, NULL), - (493, 705, 5504, 8, 67, 68, -1, -1, 4, NULL), - (494, 705, 5507, 8, 67, 69, -1, -1, 6, NULL), - (495, 705, 5513, 8, 68, 69, -1, -1, 5, NULL), - (496, 705, 5515, 8, 68, 69, -1, -1, 2, NULL), - (497, 705, 5509, 1, 69, 255, -1, -1, 6, NULL), - (498, 705, 6671, 8, 69, 255, -1, -1, 4, NULL), - (499, 705, 6826, 1, 69, 255, -1, -1, 2, NULL), - (500, 705, 5517, 8, 70, 255, -1, -1, 2, NULL), - (501, 705, 5521, 8, 70, 255, -1, -1, 6, NULL), - (502, 705, 5522, 8, 70, 255, -1, -1, 5, NULL), - (503, 706, 266, 8, 1, 20, -1, -1, 1, NULL), - (504, 706, 40, 8, 1, 7, -1, -1, 2, NULL), - (505, 706, 267, 8, 1, 31, -1, -1, 3, NULL), - (506, 706, 93, 1, 1, 3, -1, -1, 1, NULL), - (507, 706, 200, 2, 1, 18, -1, -1, 2, NULL), - (508, 706, 274, 8, 3, 10, -1, -1, 9, NULL), - (509, 706, 269, 8, 3, 17, -1, -1, 10, NULL), - (510, 706, 275, 1, 4, 13, -1, -1, 5, NULL), - (511, 706, 75, 256, 4, 14, -1, -1, 4, NULL), - (512, 706, 270, 256, 5, 12, -1, -1, 2, NULL), - (513, 706, 279, 8, 6, 21, -1, -1, 11, NULL), - (514, 706, 2521, 8, 8, 17, -1, -1, 2, NULL), - (515, 706, 277, 256, 8, 23, -1, -1, 4, NULL), - (516, 706, 17, 2, 9, 18, -1, -1, 2, NULL), - (517, 706, 283, 8, 11, 19, -1, -1, 9, NULL), - (518, 706, 281, 1, 12, 28, -1, -1, 3, NULL), - (519, 706, 505, 1, 13, 26, -1, -1, 2, NULL), - (520, 706, 365, 256, 15, 18, -1, -1, 4, NULL), - (521, 706, 282, 1, 14, 22, -1, -1, 5, NULL), - (522, 706, 526, 1, 17, 37, -1, -1, 4, NULL), - (523, 706, 110, 1, 18, 31, -1, -1, 1, NULL), - (524, 706, 147, 8, 18, 27, -1, -1, 2, NULL), - (525, 706, 148, 8, 18, 30, -1, -1, 10, NULL), - (526, 706, 12, 2, 19, 28, -1, -1, 2, NULL), - (527, 706, 511, 256, 19, 30, -1, -1, 4, NULL), - (528, 706, 649, 8, 20, 25, -1, -1, 9, NULL), - (529, 706, 146, 8, 21, 24, -1, -1, 1, NULL), - (530, 706, 149, 8, 21, 29, -1, -1, 11, NULL), - (531, 706, 144, 8, 23, 38, -1, -1, 12, NULL), - (532, 706, 508, 1, 23, 32, -1, -1, 5, NULL), - (533, 706, 434, 256, 24, 36, -1, -1, 4, NULL), - (534, 706, 349, 8, 25, 38, -1, -1, 1, NULL), - (535, 706, 39, 8, 26, 41, -1, -1, 9, NULL), - (536, 706, 506, 1, 27, 37, -1, -1, 2, NULL), - (537, 706, 151, 8, 28, 34, -1, -1, 2, NULL), - (538, 706, 15, 2, 29, 50, -1, -1, 2, NULL), - (539, 706, 162, 1, 29, 40, -1, -1, 3, NULL), - (540, 706, 161, 8, 30, 42, -1, -1, 11, NULL), - (541, 706, 160, 8, 31, 40, -1, -1, 10, NULL), - (542, 706, 31, 256, 31, 48, -1, -1, 4, NULL), - (543, 706, 111, 1, 32, 47, -1, -1, 1, NULL), - (544, 706, 164, 32, 32, 36, -1, -1, 0, NULL), - (545, 706, 1428, 8, 35, 38, -1, -1, 2, NULL), - (546, 706, 435, 256, 37, 48, -1, -1, 4, NULL), - (547, 706, 577, 32, 37, 40, -1, -1, 0, NULL), - (548, 706, 507, 1, 38, 50, -1, -1, 2, NULL), - (549, 706, 527, 1, 38, 51, -1, -1, 4, NULL), - (550, 706, 145, 8, 39, 51, -1, -1, 12, NULL), - (551, 706, 152, 8, 39, 47, -1, -1, 1, NULL), - (552, 706, 153, 8, 39, 45, -1, -1, 2, NULL), - (553, 706, 154, 8, 41, 52, -1, -1, 10, NULL), - (554, 706, 163, 1, 41, 52, -1, -1, 3, NULL), - (555, 706, 165, 32, 41, 44, -1, -1, 0, NULL), - (556, 706, 170, 8, 42, 55, -1, -1, 9, NULL), - (557, 706, 158, 8, 43, 53, -1, -1, 11, NULL), - (558, 706, 3694, 1024, 44, 59, -1, -1, 5, NULL), - (559, 706, 754, 1024, 44, 53, -1, -1, 6, NULL), - (560, 706, 166, 32, 45, 54, -1, -1, 0, NULL), - (561, 706, 159, 8, 46, 56, -1, -1, 2, NULL), - (562, 706, 112, 1, 48, 56, -1, -1, 1, NULL), - (563, 706, 157, 8, 48, 57, -1, -1, 1, NULL), - (564, 706, 32, 256, 49, 58, -1, -1, 4, NULL), - (565, 706, 436, 256, 49, 55, -1, -1, 4, NULL), - (566, 706, 1588, 1, 51, 64, -1, -1, 2, NULL), - (567, 706, 9, 2, 51, 54, -1, -1, 2, NULL), - (568, 706, 1568, 8, 52, 55, -1, -1, 12, NULL), - (569, 706, 1573, 1, 52, 62, -1, -1, 4, NULL), - (570, 706, 1592, 1, 53, 65, -1, -1, 3, NULL), - (571, 706, 1594, 8, 53, 56, -1, -1, 10, NULL), - (572, 706, 1595, 8, 54, 56, -1, -1, 11, NULL), - (573, 706, 1572, 1024, 54, 57, -1, -1, 6, NULL), - (574, 706, 1290, 2, 55, 57, -1, -1, 3, NULL), - (575, 706, 1574, 32, 55, 60, -1, -1, 0, NULL), - (576, 706, 171, 8, 56, 62, -1, -1, 9, NULL), - (577, 706, 2528, 8, 56, 60, -1, -1, 12, NULL), - (578, 706, 1590, 256, 56, 59, -1, -1, 4, NULL), - (579, 706, 1580, 8, 57, 61, -1, -1, 11, NULL), - (580, 706, 1577, 1, 57, 59, -1, -1, 1, NULL), - (581, 706, 1593, 8, 57, 57, -1, -1, 2, NULL), - (582, 706, 1579, 8, 57, 60, -1, -1, 10, NULL), - (583, 706, 1596, 8, 58, 58, -1, -1, 1, NULL), - (584, 706, 1581, 8, 58, 59, -1, -1, 2, NULL), - (585, 706, 1332, 1024, 58, 64, -1, -1, 6, NULL), - (586, 706, 1583, 8, 59, 59, -1, -1, 1, NULL), - (587, 706, 1591, 256, 59, 63, -1, -1, 4, NULL), - (588, 706, 2112, 8, 60, 64, -1, -1, 2, NULL), - (589, 706, 2530, 8, 60, 61, -1, -1, 1, NULL), - (590, 706, 2113, 256, 60, 64, -1, -1, 4, NULL), - (591, 706, 1578, 1, 60, 62, -1, -1, 1, NULL), - (592, 706, 1576, 1024, 60, 64, -1, -1, 5, NULL), - (593, 706, 3378, 8, 61, 61, -1, -1, 10, NULL), - (594, 706, 3433, 8, 61, 62, -1, -1, 12, NULL), - (595, 706, 3377, 32, 61, 66, -1, -1, 0, NULL), - (596, 706, 3235, 8, 62, 64, -1, -1, 1, NULL), - (597, 706, 3383, 8, 62, 67, -1, -1, 10, NULL), - (598, 706, 3382, 8, 62, 62, -1, -1, 11, NULL), - (599, 706, 3233, 2, 62, 64, -1, -1, 2, NULL), - (600, 706, 172, 8, 63, 63, -1, -1, 9, NULL), - (601, 706, 3389, 8, 63, 67, -1, -1, 11, NULL), - (602, 706, 3441, 8, 63, 65, -1, -1, 12, NULL), - (603, 706, 3386, 1, 63, 65, -1, -1, 4, NULL), - (604, 706, 3387, 1, 63, 64, -1, -1, 1, NULL), - (605, 706, 3391, 8, 64, 255, -1, -1, 9, NULL), - (606, 706, 3394, 256, 64, 66, -1, -1, 4, NULL), - (607, 706, 3397, 8, 65, 67, -1, -1, 1, NULL), - (608, 706, 3399, 8, 65, 69, -1, -1, 2, NULL), - (609, 706, 3396, 256, 65, 69, -1, -1, 4, NULL), - (610, 706, 4900, 1, 65, 68, -1, -1, 2, NULL), - (611, 706, 3395, 1, 65, 255, -1, -1, 1, NULL), - (612, 706, 4901, 2, 65, 67, -1, -1, 2, NULL), - (613, 706, 4899, 1024, 65, 69, -1, -1, 5, NULL), - (614, 706, 4979, 1024, 65, 69, -1, -1, 6, NULL), - (615, 706, 5393, 8, 66, 68, -1, -1, 12, NULL), - (616, 706, 5394, 1, 66, 255, -1, -1, 3, NULL), - (617, 706, 5392, 1, 66, 255, -1, -1, 4, NULL), - (618, 706, 5411, 256, 67, 255, -1, -1, 4, NULL), - (619, 706, 5389, 32, 67, 255, -1, -1, 0, NULL), - (620, 706, 5396, 8, 68, 69, -1, -1, 1, NULL), - (621, 706, 5398, 8, 68, 68, -1, -1, 11, NULL), - (622, 706, 5395, 2, 68, 69, -1, -1, 2, NULL), - (623, 706, 5399, 8, 68, 255, -1, -1, 10, NULL), - (624, 706, 5405, 8, 69, 255, -1, -1, 11, NULL), - (625, 706, 5406, 8, 69, 255, -1, -1, 12, NULL), - (626, 706, 6827, 1, 69, 255, -1, -1, 2, NULL), - (627, 706, 5416, 1024, 70, 255, -1, -1, 5, NULL), - (628, 706, 5418, 1024, 70, 255, -1, -1, 6, NULL), - (629, 706, 5415, 8, 70, 255, -1, -1, 1, NULL), - (630, 706, 5417, 8, 70, 255, -1, -1, 2, NULL), - (631, 706, 5414, 256, 70, 255, -1, -1, 4, NULL), - (632, 706, 6142, 2, 70, 255, -1, -1, 2, NULL), - (633, 707, 239, 256, 1, 24, -1, -1, 2, NULL), - (634, 707, 242, 128, 1, 25, -1, -1, 1, NULL), - (635, 707, 93, 1, 1, 2, -1, -1, 3, NULL), - (636, 707, 200, 2, 1, 8, -1, -1, 2, NULL), - (637, 707, 248, 1, 2, 12, -1, -1, 2, NULL), - (638, 707, 253, 1, 3, 15, -1, -1, 3, NULL), - (639, 707, 92, 1, 3, 7, -1, -1, 3, NULL), - (640, 707, 256, 8, 7, 16, -1, -1, 1, NULL), - (641, 707, 515, 8, 7, 16, -1, -1, 8, NULL), - (642, 707, 91, 1, 8, 27, -1, -1, 3, NULL), - (643, 707, 17, 2, 9, 18, -1, -1, 2, NULL), - (644, 707, 264, 256, 10, 31, -1, -1, 2, NULL), - (645, 707, 663, 1, 13, 22, -1, -1, 2, NULL), - (646, 707, 520, 1, 16, 29, -1, -1, 3, NULL), - (647, 707, 273, 8, 17, 26, -1, -1, 1, NULL), - (648, 707, 516, 8, 17, 26, -1, -1, 8, NULL), - (649, 707, 12, 2, 19, 28, -1, -1, 2, NULL), - (650, 707, 115, 1, 23, 32, -1, -1, 2, NULL), - (651, 707, 99, 256, 24, 33, -1, -1, 2, NULL), - (652, 707, 78, 256, 25, 36, -1, -1, 2, NULL), - (653, 707, 512, 128, 26, 60, -1, -1, 1, NULL), - (654, 707, 129, 8, 27, 36, -1, -1, 1, NULL), - (655, 707, 517, 8, 27, 36, -1, -1, 8, NULL), - (656, 707, 217, 1, 28, 37, -1, -1, 3, NULL), - (657, 707, 15, 2, 29, 43, -1, -1, 2, NULL), - (658, 707, 1439, 1, 30, 55, -1, -1, 3, NULL), - (659, 707, 259, 256, 32, 39, -1, -1, 2, NULL), - (660, 707, 664, 1, 33, 42, -1, -1, 2, NULL), - (661, 707, 144, 8, 34, 38, -1, -1, 7, NULL), - (662, 707, 1437, 256, 37, 60, -1, -1, 2, NULL), - (663, 707, 432, 8, 37, 46, -1, -1, 1, NULL), - (664, 707, 518, 8, 37, 46, -1, -1, 8, NULL), - (665, 707, 57, 1, 38, 47, -1, -1, 3, NULL), - (666, 707, 137, 8, 39, 41, -1, -1, 7, NULL), - (667, 707, 665, 256, 40, 52, -1, -1, 2, NULL), - (668, 707, 427, 8, 40, 53, -1, -1, 9, NULL), - (669, 707, 1436, 256, 42, 61, -1, -1, 2, NULL), - (670, 707, 145, 8, 42, 44, -1, -1, 7, NULL), - (671, 707, 116, 1, 43, 54, -1, -1, 2, NULL), - (672, 707, 3834, 2, 44, 50, -1, -1, 2, NULL), - (673, 707, 138, 8, 45, 53, -1, -1, 7, NULL), - (674, 707, 29, 1, 47, 54, -1, -1, 3, NULL), - (675, 707, 356, 8, 47, 48, -1, -1, 1, NULL), - (676, 707, 519, 8, 47, 55, -1, -1, 8, NULL), - (677, 707, 671, 1, 48, 53, -1, -1, 3, NULL), - (678, 707, 1727, 8, 49, 57, -1, -1, 1, NULL), - (679, 707, 4104, 256, 49, 255, -1, -1, 2, NULL), - (680, 707, 1562, 8, 54, 59, -1, -1, 9, NULL), - (681, 707, 9, 2, 51, 54, -1, -1, 2, NULL), - (682, 707, 1600, 256, 52, 61, -1, -1, 2, NULL), - (683, 707, 1601, 256, 53, 62, -1, -1, 2, NULL), - (684, 707, 1568, 8, 54, 57, -1, -1, 7, NULL), - (685, 707, 1603, 1, 54, 58, -1, -1, 3, NULL), - (686, 707, 1290, 2, 55, 59, -1, -1, 2, NULL), - (687, 707, 1529, 1, 55, 64, -1, -1, 2, NULL), - (688, 707, 1605, 1, 55, 59, -1, -1, 3, NULL), - (689, 707, 4105, 256, 55, 255, -1, -1, 2, NULL), - (690, 707, 1558, 8, 56, 63, -1, -1, 8, NULL), - (691, 707, 1604, 1, 56, 60, -1, -1, 3, NULL), - (692, 707, 1560, 8, 58, 58, -1, -1, 1, NULL), - (693, 707, 1569, 8, 58, 59, -1, -1, 7, NULL), - (694, 707, 1561, 8, 59, 59, -1, -1, 1, NULL), - (695, 707, 1607, 1, 59, 59, -1, -1, 3, NULL), - (696, 707, 1563, 8, 60, 255, -1, -1, 9, NULL), - (697, 707, 1291, 2, 60, 62, -1, -1, 2, NULL), - (698, 707, 2125, 8, 60, 62, -1, -1, 1, NULL), - (699, 707, 2126, 1, 60, 63, -1, -1, 3, NULL), - (700, 707, 2520, 8, 60, 60, -1, -1, 7, NULL), - (701, 707, 2877, 1, 60, 64, -1, -1, 3, NULL), - (702, 707, 3433, 8, 61, 62, -1, -1, 7, NULL), - (703, 707, 3434, 1, 61, 65, -1, -1, 3, NULL), - (704, 707, 5572, 128, 61, 68, -1, -1, 1, NULL), - (705, 707, 3437, 256, 62, 63, -1, -1, 2, NULL), - (706, 707, 3440, 256, 62, 64, -1, -1, 2, NULL), - (707, 707, 3441, 8, 63, 65, -1, -1, 7, NULL), - (708, 707, 3443, 2, 63, 65, -1, -1, 2, NULL), - (709, 707, 3446, 256, 63, 67, -1, -1, 2, NULL), - (710, 707, 3448, 8, 63, 64, -1, -1, 1, NULL), - (711, 707, 3444, 8, 64, 255, -1, -1, 8, NULL), - (712, 707, 3449, 1, 64, 64, -1, -1, 3, NULL), - (713, 707, 4106, 256, 64, 255, -1, -1, 2, NULL), - (714, 707, 3238, 1, 65, 67, -1, -1, 2, NULL), - (715, 707, 3295, 8, 65, 66, -1, -1, 1, NULL), - (716, 707, 4974, 1, 65, 66, -1, -1, 3, NULL), - (717, 707, 4883, 2, 65, 67, -1, -1, 2, NULL), - (718, 707, 4884, 1, 65, 68, -1, -1, 3, NULL), - (719, 707, 4885, 256, 65, 66, -1, -1, 2, NULL), - (720, 707, 5342, 8, 66, 68, -1, -1, 7, NULL), - (721, 707, 5343, 1, 66, 255, -1, -1, 3, NULL), - (722, 707, 5348, 1, 67, 255, -1, -1, 3, NULL), - (723, 707, 5358, 8, 67, 69, -1, -1, 1, NULL), - (724, 707, 5355, 2, 68, 69, -1, -1, 2, NULL), - (725, 707, 5357, 256, 68, 255, -1, -1, 2, NULL), - (726, 707, 8008, 1, 68, 255, -1, -1, 1, NULL), - (727, 707, 5353, 8, 69, 255, -1, -1, 7, NULL), - (728, 707, 5361, 1, 69, 255, -1, -1, 3, NULL), - (729, 707, 6665, 128, 69, 255, -1, -1, 1, NULL), - (730, 707, 5365, 8, 70, 255, -1, -1, 1, NULL), - (731, 707, 6141, 2, 70, 255, -1, -1, 2, NULL), - (732, 708, 5011, 2, 1, 5, -1, -1, 2, NULL), - (733, 708, 200, 2, 6, 11, -1, -1, 2, NULL), - (734, 708, 2581, 1, 7, 12, -1, -1, 3, NULL), - (735, 708, 202, 8, 8, 19, -1, -1, 1, NULL), - (736, 708, 17, 2, 12, 26, -1, -1, 2, NULL), - (737, 708, 2582, 1, 13, 27, -1, -1, 3, NULL), - (738, 708, 218, 1, 14, 29, -1, -1, 2, NULL), - (739, 708, 11, 8, 15, 29, -1, -1, 2, NULL), - (740, 708, 219, 8, 20, 36, -1, -1, 1, NULL), - (741, 708, 485, 8, 24, 32, -1, -1, 3, NULL), - (742, 708, 2583, 8, 26, 62, -1, -1, 5, NULL), - (743, 708, 12, 2, 27, 35, -1, -1, 2, NULL), - (744, 708, 216, 1, 28, 41, -1, -1, 3, NULL), - (745, 708, 233, 1, 30, 45, -1, -1, 2, NULL), - (746, 708, 368, 8, 30, 38, -1, -1, 2, NULL), - (747, 708, 486, 8, 33, 45, -1, -1, 3, NULL), - (748, 708, 2584, 8, 35, 48, -1, -1, 4, NULL), - (749, 708, 15, 2, 36, 51, -1, -1, 2, NULL), - (750, 708, 89, 8, 37, 46, -1, -1, 1, NULL), - (751, 708, 18, 8, 39, 47, -1, -1, 2, NULL), - (752, 708, 123, 1, 42, 51, -1, -1, 3, NULL), - (753, 708, 2585, 8, 44, 255, -1, -1, 7, NULL), - (754, 708, 3683, 2, 44, 58, -1, -1, 1, NULL), - (755, 708, 117, 1, 46, 53, -1, -1, 2, NULL), - (756, 708, 487, 8, 46, 57, -1, -1, 3, NULL), - (757, 708, 312, 8, 47, 59, -1, -1, 1, NULL), - (758, 708, 19, 8, 48, 59, -1, -1, 2, NULL), - (759, 708, 207, 16, 48, 255, -1, -1, 1, NULL), - (760, 708, 3578, 8, 49, 52, -1, -1, 4, NULL), - (761, 708, 124, 1, 52, 52, -1, -1, 3, NULL), - (762, 708, 3684, 2, 52, 56, -1, -1, 2, NULL), - (763, 708, 1288, 8, 53, 59, -1, -1, 4, NULL), - (764, 708, 3975, 1, 53, 53, -1, -1, 3, NULL), - (765, 708, 2587, 1, 54, 61, -1, -1, 3, NULL), - (766, 708, 662, 1, 54, 61, -1, -1, 2, NULL), - (767, 708, 1743, 8, 55, 255, -1, -1, 2, NULL), - (768, 708, 9, 2, 57, 60, -1, -1, 2, NULL), - (769, 708, 488, 8, 58, 62, -1, -1, 3, NULL), - (770, 708, 1283, 2, 59, 63, -1, -1, 1, NULL), - (771, 708, 2590, 8, 60, 64, -1, -1, 4, NULL), - (772, 708, 314, 8, 60, 60, -1, -1, 1, NULL), - (773, 708, 20, 8, 60, 64, -1, -1, 2, NULL), - (774, 708, 1533, 8, 61, 63, -1, -1, 1, NULL), - (775, 708, 3429, 2, 61, 62, -1, -1, 2, NULL), - (776, 708, 3245, 1, 62, 63, -1, -1, 3, NULL), - (777, 708, 3428, 1, 62, 66, -1, -1, 2, NULL), - (778, 708, 3430, 2, 63, 64, -1, -1, 2, NULL), - (779, 708, 1535, 8, 63, 64, -1, -1, 3, NULL), - (780, 708, 3424, 8, 63, 64, -1, -1, 5, NULL), - (781, 708, 1538, 8, 64, 64, -1, -1, 1, NULL), - (782, 708, 3426, 1, 64, 64, -1, -1, 3, NULL), - (783, 708, 3247, 8, 64, 68, -1, -1, 9, NULL), - (784, 708, 2589, 2, 64, 255, -1, -1, 2, NULL), - (785, 708, 4894, 2, 65, 67, -1, -1, 2, NULL), - (786, 708, 3432, 8, 65, 69, -1, -1, 4, NULL), - (787, 708, 4109, 8, 65, 69, -1, -1, 2, NULL), - (788, 708, 4895, 8, 65, 67, -1, -1, 5, NULL), - (789, 708, 4977, 1, 65, 65, -1, -1, 3, NULL), - (790, 708, 5284, 1, 66, 67, -1, -1, 3, NULL), - (791, 708, 5286, 1, 67, 67, -1, -1, 2, NULL), - (792, 708, 5289, 2, 68, 255, -1, -1, 2, NULL), - (793, 708, 8027, 1, 68, 255, -1, -1, 2, NULL), - (794, 708, 5288, 8, 68, 255, -1, -1, 5, NULL), - (795, 708, 5292, 1, 68, 69, -1, -1, 3, NULL), - (796, 708, 5291, 8, 69, 255, -1, -1, 9, NULL), - (797, 708, 8029, 8, 69, 255, -1, -1, 10, NULL), - (798, 708, 5298, 8, 70, 255, -1, -1, 2, NULL), - (799, 708, 5297, 8, 70, 255, -1, -1, 4, NULL), - (800, 708, 5299, 1, 70, 255, -1, -1, 3, NULL), - (801, 709, 5012, 1, 1, 33, -1, -1, 5, NULL), - (802, 709, 340, 256, 5, 56, -1, -1, 3, NULL), - (803, 709, 491, 32, 7, 13, -1, -1, 0, NULL), - (804, 709, 341, 64, 8, 14, -1, -1, 3, NULL), - (805, 709, 2571, 1, 9, 49, -1, -1, 2, NULL), - (806, 709, 344, 128, 11, 19, -1, -1, 1, NULL), - (807, 709, 229, 1, 12, 42, -1, 45, 4, NULL), - (808, 709, 351, 32, 14, 21, -1, -1, 0, NULL), - (809, 709, 502, 64, 15, 28, -1, -1, 3, NULL), - (810, 709, 346, 8, 16, 57, -1, -1, 1, NULL), - (811, 709, 355, 128, 20, 43, -1, -1, 1, NULL), - (812, 709, 359, 8, 22, 36, -1, -1, 2, NULL), - (813, 709, 362, 32, 22, 29, -1, -1, 0, NULL), - (814, 709, 360, 256, 28, 40, -1, -1, 3, NULL), - (815, 709, 1289, 8, 29, 59, -1, -1, 9, NULL), - (816, 709, 445, 64, 29, 46, -1, -1, 3, NULL), - (817, 709, 492, 32, 30, 37, -1, -1, 0, NULL), - (818, 709, 236, 8, 31, 55, -1, -1, 8, NULL), - (819, 709, 3561, 1, 34, 47, -1, -1, 5, NULL), - (820, 709, 367, 256, 36, 59, -1, -1, 3, NULL), - (821, 709, 2574, 8, 37, 54, -1, -1, 2, NULL), - (822, 709, 370, 1, 37, 49, -1, -1, 2, NULL), - (823, 709, 440, 32, 38, 45, -1, -1, 0, NULL), - (824, 709, 3686, 256, 41, 52, -1, -1, 3, NULL), - (825, 709, 127, 1, 43, 56, -1, 45, 4, NULL), - (826, 709, 452, 128, 44, 58, -1, -1, 1, NULL), - (827, 709, 441, 32, 46, 51, -1, -1, 0, NULL), - (828, 709, 692, 64, 47, 56, -1, -1, 3, NULL), - (829, 709, 3560, 1, 48, 53, -1, -1, 5, NULL), - (830, 709, 199, 16, 50, 255, -1, -1, 1, NULL), - (831, 709, 442, 32, 52, 57, -1, -1, 0, NULL), - (832, 709, 451, 256, 53, 60, -1, -1, 3, NULL), - (833, 709, 3562, 1, 54, 63, -1, -1, 5, NULL), - (834, 709, 1376, 8, 55, 62, -1, -1, 2, NULL), - (835, 709, 393, 8, 56, 58, -1, -1, 8, NULL), - (836, 709, 454, 256, 57, 61, -1, -1, 3, NULL), - (837, 709, 525, 64, 57, 59, -1, -1, 3, NULL), - (838, 709, 6986, 1, 57, 61, -1, -1, 4, NULL), - (839, 709, 495, 32, 58, 63, -1, -1, 0, NULL), - (840, 709, 394, 8, 59, 255, -1, -1, 8, NULL), - (841, 709, 453, 128, 59, 60, -1, -1, 1, NULL), - (842, 709, 661, 8, 60, 63, -1, -1, 9, NULL), - (843, 709, 1508, 256, 60, 65, -1, -1, 3, NULL), - (844, 709, 447, 64, 60, 61, -1, -1, 3, NULL), - (845, 709, 3400, 128, 61, 255, -1, -1, 1, NULL), - (846, 709, 6, 256, 61, 62, -1, -1, 3, NULL), - (847, 709, 456, 256, 62, 65, -1, -1, 3, NULL), - (848, 709, 3401, 64, 62, 64, -1, -1, 3, NULL), - (849, 709, 3227, 8, 63, 64, -1, -1, 2, NULL), - (850, 709, 3489, 256, 63, 65, -1, -1, 3, NULL), - (851, 709, 6987, 1, 62, 66, -1, -1, 4, NULL), - (852, 709, 1414, 8, 64, 68, -1, -1, 9, NULL), - (853, 709, 3491, 1, 64, 64, -1, -1, 5, NULL), - (854, 709, 443, 32, 64, 67, -1, -1, 0, NULL), - (855, 709, 3413, 64, 65, 66, -1, -1, 3, NULL), - (856, 709, 4904, 1, 65, 68, -1, -1, 5, NULL), - (857, 709, 5323, 256, 66, 255, -1, -1, 3, NULL), - (858, 709, 5320, 256, 66, 67, -1, -1, 3, NULL), - (859, 709, 5322, 256, 66, 255, -1, -1, 3, NULL), - (860, 709, 5327, 8, 67, 255, -1, -1, 2, NULL), - (861, 709, 5324, 64, 67, 69, -1, -1, 3, NULL), - (862, 709, 6988, 1, 67, 255, -1, -1, 4, NULL), - (863, 709, 5330, 256, 68, 255, -1, -1, 3, NULL), - (864, 709, 5331, 32, 68, 255, -1, -1, 0, NULL), - (865, 709, 5332, 8, 69, 255, -1, -1, 9, NULL), - (866, 709, 5334, 1, 69, 255, -1, -1, 5, NULL), - (867, 709, 5338, 64, 70, 255, -1, -1, 3, NULL), - (868, 710, 5011, 2, 1, 7, -1, -1, 2, NULL), - (869, 710, 239, 256, 3, 43, -1, -1, 3, NULL), - (870, 710, 2591, 128, 5, 5, -1, -1, 1, NULL), - (871, 710, 242, 128, 6, 50, -1, -1, 1, NULL), - (872, 710, 26, 8, 7, 20, -1, -1, 1, NULL), - (873, 710, 200, 2, 8, 20, -1, -1, 2, NULL), - (874, 710, 2592, 8, 11, 51, -1, -1, 9, NULL), - (875, 710, 269, 8, 12, 54, -1, -1, 8, NULL), - (876, 710, 515, 8, 13, 29, -1, -1, 7, NULL), - (877, 710, 92, 1, 14, 18, -1, -1, 4, NULL), - (878, 710, 254, 8, 17, 36, -1, -1, 6, NULL), - (879, 710, 91, 1, 19, 28, -1, -1, 4, NULL), - (880, 710, 17, 2, 21, 37, -1, -1, 2, NULL), - (881, 710, 263, 8, 21, 37, -1, -1, 1, NULL), - (882, 710, 256, 8, 24, 42, -1, -1, 5, NULL), - (883, 710, 264, 256, 25, 39, -1, -1, 3, NULL), - (884, 710, 268, 8, 26, 52, -1, -1, 4, NULL), - (885, 710, 2593, 8, 29, 47, -1, -1, 2, NULL), - (886, 710, 3565, 1, 29, 38, -1, -1, 4, NULL), - (887, 710, 516, 8, 30, 33, -1, -1, 7, NULL), - (888, 710, 517, 8, 34, 41, -1, -1, 7, NULL), - (889, 710, 1461, 8, 36, 54, -1, -1, 10, NULL), - (890, 710, 2594, 8, 37, 50, -1, -1, 6, NULL), - (891, 710, 12, 2, 38, 56, -1, -1, 2, NULL), - (892, 710, 421, 8, 38, 53, -1, -1, 1, NULL), - (893, 710, 3564, 1, 39, 48, -1, -1, 4, NULL), - (894, 710, 3687, 256, 40, 53, -1, -1, 3, NULL), - (895, 710, 518, 8, 42, 59, -1, -1, 7, NULL), - (896, 710, 129, 8, 43, 57, -1, -1, 5, NULL), - (897, 710, 78, 256, 44, 255, -1, -1, 3, NULL), - (898, 710, 2595, 8, 48, 49, -1, -1, 2, NULL), - (899, 710, 691, 1, 49, 51, -1, -1, 4, NULL), - (900, 710, 1462, 8, 50, 61, -1, -1, 2, NULL), - (901, 710, 1741, 16, 50, 54, -1, -1, 1, NULL), - (902, 710, 1397, 8, 51, 61, -1, -1, 6, NULL), - (903, 710, 512, 128, 51, 60, -1, -1, 1, NULL), - (904, 710, 2596, 8, 52, 57, -1, -1, 9, NULL), - (905, 710, 57, 1, 52, 58, -1, -1, 4, NULL), - (906, 710, 430, 8, 53, 255, -1, -1, 4, NULL), - (907, 710, 259, 256, 54, 61, -1, -1, 3, NULL), - (908, 710, 422, 8, 54, 58, -1, -1, 1, NULL), - (909, 710, 1296, 16, 55, 255, -1, -1, 1, NULL), - (910, 710, 145, 8, 55, 63, -1, -1, 8, NULL), - (911, 710, 1463, 8, 55, 57, -1, -1, 10, NULL), - (912, 710, 15, 2, 57, 61, -1, -1, 2, NULL), - (913, 710, 432, 8, 58, 61, -1, -1, 5, NULL), - (914, 710, 4059, 8, 58, 63, -1, -1, 10, NULL), - (915, 710, 2599, 8, 58, 255, -1, -1, 9, NULL), - (916, 710, 423, 8, 59, 64, -1, -1, 1, NULL), - (917, 710, 1740, 1, 59, 63, -1, -1, 4, NULL), - (918, 710, 519, 8, 60, 62, -1, -1, 7, NULL), - (919, 710, 6732, 128, 61, 68, -1, -1, 1, NULL), - (920, 710, 3419, 8, 62, 66, -1, -1, 2, NULL), - (921, 710, 356, 8, 62, 65, -1, -1, 5, NULL), - (922, 710, 3487, 8, 62, 66, -1, -1, 6, NULL), - (923, 710, 665, 256, 62, 66, -1, -1, 3, NULL), - (924, 710, 1290, 2, 62, 64, -1, -1, 2, NULL), - (925, 710, 1558, 8, 63, 67, -1, -1, 7, NULL), - (926, 710, 1568, 8, 64, 67, -1, -1, 8, NULL), - (927, 710, 3415, 8, 64, 64, -1, -1, 10, NULL), - (928, 710, 3431, 1, 64, 64, -1, -1, 4, NULL), - (929, 710, 1559, 8, 65, 69, -1, -1, 1, NULL), - (930, 710, 4898, 8, 65, 68, -1, -1, 10, NULL), - (931, 710, 4980, 1, 65, 68, -1, -1, 4, NULL), - (932, 710, 4896, 2, 65, 66, -1, -1, 2, NULL), - (933, 710, 5302, 8, 66, 255, -1, -1, 5, NULL), - (934, 710, 5305, 8, 66, 255, -1, -1, 2, NULL), - (935, 710, 5306, 8, 67, 255, -1, -1, 6, NULL), - (936, 710, 5303, 256, 67, 255, -1, -1, 3, NULL), - (937, 710, 5304, 2, 67, 255, -1, -1, 2, NULL), - (938, 710, 5307, 8, 68, 255, -1, -1, 7, NULL), - (939, 710, 5310, 8, 68, 255, -1, -1, 8, NULL), - (940, 710, 5311, 8, 69, 255, -1, -1, 10, NULL), - (941, 710, 6664, 128, 69, 255, -1, -1, 1, NULL), - (942, 710, 5313, 1, 69, 69, -1, -1, 4, NULL), - (943, 710, 5315, 8, 70, 255, -1, -1, 1, NULL), - (944, 710, 5319, 1, 70, 255, -1, -1, 4, NULL), - (945, 711, 700, 8, 1, 9, -1, -1, 1, NULL), - (946, 711, 7, 2, 6, 33, -1, -1, 2, NULL), - (947, 711, 710, 8, 9, 12, -1, -1, 2, NULL), - (948, 711, 701, 8, 10, 35, -1, -1, 1, NULL), - (949, 711, 711, 8, 13, 24, -1, -1, 2, NULL), - (950, 711, 709, 8, 17, 51, -1, -1, 3, NULL), - (951, 711, 1287, 2, 20, 31, -1, -1, 2, NULL), - (952, 711, 738, 1, 23, 255, -1, -1, 3, NULL), - (953, 711, 712, 8, 25, 28, -1, -1, 2, NULL), - (954, 711, 715, 8, 29, 32, -1, -1, 3, NULL), - (955, 711, 707, 1, 30, 37, -1, -1, 2, NULL), - (956, 711, 723, 2, 32, 33, -1, -1, 3, NULL), - (957, 711, 713, 8, 33, 36, -1, -1, 2, NULL), - (958, 711, 1448, 2, 34, 54, -1, -1, 2, NULL), - (959, 711, 740, 8, 36, 41, -1, -1, 1, NULL), - (960, 711, 716, 8, 37, 40, -1, -1, 2, NULL), - (961, 711, 743, 1, 38, 41, -1, -1, 4, NULL), - (962, 711, 714, 8, 41, 46, -1, -1, 2, NULL), - (963, 711, 3567, 1, 42, 45, -1, -1, 5, NULL), - (964, 711, 702, 8, 42, 49, -1, -1, 1, NULL), - (965, 711, 744, 1, 46, 49, -1, -1, 6, NULL), - (966, 711, 748, 8, 47, 53, -1, -1, 2, NULL), - (967, 711, 3566, 1, 50, 62, -1, -1, 2, NULL), - (968, 711, 747, 8, 50, 53, -1, -1, 1, NULL), - (969, 711, 1751, 1, 51, 255, -1, -1, 4, NULL), - (970, 711, 2606, 8, 52, 59, -1, -1, 3, NULL), - (971, 711, 1754, 16, 53, 59, -1, -1, 1, NULL), - (972, 711, 2607, 8, 54, 255, -1, -1, 2, NULL), - (973, 711, 1759, 2, 55, 57, -1, -1, 2, NULL), - (974, 711, 2609, 2, 58, 59, -1, -1, 2, NULL), - (975, 711, 1196, 2, 60, 61, -1, -1, 2, NULL), - (976, 711, 1749, 16, 60, 255, -1, -1, 1, NULL), - (977, 711, 2610, 8, 60, 63, -1, -1, 3, NULL), - (978, 711, 3374, 8, 62, 64, -1, -1, 1, NULL), - (979, 711, 3651, 2, 62, 63, -1, -1, 2, NULL), - (980, 711, 3370, 1, 63, 63, -1, -1, 2, NULL), - (981, 711, 3066, 1, 64, 255, -1, -1, 2, NULL), - (982, 711, 3362, 8, 64, 64, -1, -1, 3, NULL), - (983, 711, 3372, 2, 64, 66, -1, -1, 2, NULL), - (984, 711, 4871, 8, 65, 67, -1, -1, 1, NULL), - (985, 711, 4872, 8, 65, 67, -1, -1, 3, NULL), - (986, 711, 5377, 2, 67, 68, -1, -1, 2, NULL), - (987, 711, 5376, 8, 68, 255, -1, -1, 1, NULL), - (988, 711, 5380, 8, 68, 68, -1, -1, 3, NULL), - (989, 711, 5382, 8, 69, 69, -1, -1, 3, NULL), - (990, 711, 5384, 2, 69, 255, -1, -1, 2, NULL), - (991, 711, 5388, 8, 70, 255, -1, -1, 3, NULL), - (992, 712, 5011, 2, 1, 5, -1, -1, 2, NULL), - (993, 712, 200, 2, 6, 19, -1, -1, 2, NULL), - (994, 712, 267, 8, 7, 19, -1, -1, 9, NULL), - (995, 712, 2612, 32, 8, 14, -1, -1, 0, NULL), - (996, 712, 2611, 2, 9, 14, -1, -1, 2, NULL), - (997, 712, 274, 8, 10, 25, -1, -1, 8, NULL), - (998, 712, 2068, 1, 12, 25, -1, -1, 4, NULL), - (999, 712, 2635, 8, 13, 17, -1, -1, 6, NULL), - (1000, 712, 40, 8, 14, 27, -1, -1, 5, NULL), - (1001, 712, 75, 256, 14, 39, -1, -1, 3, NULL), - (1002, 712, 2613, 2, 15, 26, -1, -1, 2, NULL), - (1003, 712, 2633, 32, 15, 20, -1, -1, 0, NULL), - (1004, 712, 279, 8, 17, 36, -1, -1, 4, NULL), - (1005, 712, 2636, 8, 18, 27, -1, -1, 6, NULL), - (1006, 712, 277, 256, 19, 34, -1, -1, 3, NULL), - (1007, 712, 270, 1, 20, 49, -1, -1, 3, NULL), - (1008, 712, 17, 2, 20, 35, -1, -1, 2, NULL), - (1009, 712, 2614, 32, 21, 29, -1, -1, 0, NULL), - (1010, 712, 282, 1, 26, 32, -1, -1, 4, NULL), - (1011, 712, 283, 8, 26, 36, -1, -1, 8, NULL), - (1012, 712, 2615, 2, 27, 35, -1, -1, 2, NULL), - (1013, 712, 147, 8, 28, 40, -1, -1, 5, NULL), - (1014, 712, 2637, 8, 28, 37, -1, -1, 6, NULL), - (1015, 712, 2616, 32, 30, 38, -1, -1, 0, NULL), - (1016, 712, 3568, 1, 33, 46, -1, -1, 4, NULL), - (1017, 712, 434, 256, 35, 51, -1, -1, 3, NULL), - (1018, 712, 48, 512, 35, 57, -1, -1, 6, NULL), - (1019, 712, 12, 2, 36, 56, -1, -1, 2, NULL), - (1020, 712, 2617, 2, 36, 48, -1, -1, 2, NULL), - (1021, 712, 2619, 8, 37, 51, -1, -1, 8, NULL), - (1022, 712, 149, 8, 37, 51, -1, -1, 3, NULL), - (1023, 712, 2638, 8, 38, 45, -1, -1, 6, NULL), - (1024, 712, 2618, 32, 39, 45, -1, -1, 0, NULL), - (1025, 712, 3689, 256, 40, 64, -1, -1, 3, NULL), - (1026, 712, 151, 8, 41, 53, -1, -1, 5, NULL), - (1027, 712, 2176, 8, 41, 51, -1, -1, 4, NULL), - (1028, 712, 2178, 8, 42, 59, -1, -1, 2, NULL), - (1029, 712, 2621, 32, 46, 53, -1, -1, 0, NULL), - (1030, 712, 2639, 8, 46, 50, -1, -1, 6, NULL), - (1031, 712, 308, 8, 47, 255, -1, -1, 7, NULL), - (1032, 712, 3569, 1, 47, 53, -1, -1, 4, NULL), - (1033, 712, 2620, 2, 49, 51, -1, -1, 2, NULL), - (1034, 712, 2634, 1, 50, 59, -1, -1, 3, NULL), - (1035, 712, 2640, 8, 51, 52, -1, -1, 6, NULL), - (1036, 712, 161, 8, 52, 56, -1, -1, 3, NULL), - (1037, 712, 2177, 8, 52, 58, -1, -1, 4, NULL), - (1038, 712, 2622, 2, 52, 54, -1, -1, 2, NULL), - (1039, 712, 3690, 8, 52, 54, -1, -1, 8, NULL), - (1040, 712, 435, 256, 52, 60, -1, -1, 3, NULL), - (1041, 712, 167, 8, 53, 57, -1, -1, 6, NULL), - (1042, 712, 153, 8, 54, 255, -1, -1, 5, NULL), - (1043, 712, 2623, 32, 54, 55, -1, -1, 0, NULL), - (1044, 712, 3570, 1, 54, 58, -1, -1, 4, NULL), - (1045, 712, 2625, 8, 55, 58, -1, -1, 8, NULL), - (1046, 712, 145, 8, 55, 63, -1, -1, 1, NULL), - (1047, 712, 2626, 32, 56, 57, -1, -1, 0, NULL), - (1048, 712, 15, 2, 57, 61, -1, -1, 2, NULL), - (1049, 712, 158, 8, 57, 255, -1, -1, 3, NULL), - (1050, 712, 168, 8, 58, 61, -1, -1, 6, NULL), - (1051, 712, 2627, 32, 58, 59, -1, -1, 0, NULL), - (1052, 712, 49, 512, 58, 59, -1, -1, 6, NULL), - (1053, 712, 2628, 8, 59, 62, -1, -1, 8, NULL), - (1054, 712, 2629, 8, 59, 63, -1, -1, 4, NULL), - (1055, 712, 510, 1, 59, 62, -1, -1, 4, NULL), - (1056, 712, 2941, 8, 60, 64, -1, -1, 10, NULL), - (1057, 712, 2630, 8, 60, 61, -1, -1, 2, NULL), - (1058, 712, 2631, 32, 60, 61, -1, -1, 0, NULL), - (1059, 712, 2942, 1, 60, 64, -1, -1, 3, NULL), - (1060, 712, 3492, 256, 61, 65, -1, -1, 3, NULL), - (1061, 712, 3456, 8, 62, 66, -1, -1, 2, NULL), - (1062, 712, 1585, 8, 62, 66, -1, -1, 6, NULL), - (1063, 712, 1290, 2, 62, 64, -1, -1, 2, NULL), - (1064, 712, 3457, 32, 62, 63, -1, -1, 0, NULL), - (1065, 712, 3458, 8, 63, 67, -1, -1, 8, NULL), - (1066, 712, 3493, 1, 63, 64, -1, -1, 4, NULL), - (1067, 712, 1568, 8, 64, 68, -1, -1, 1, NULL), - (1068, 712, 3460, 8, 64, 68, -1, -1, 4, NULL), - (1069, 712, 3461, 32, 64, 67, -1, -1, 0, NULL), - (1070, 712, 3463, 8, 65, 69, -1, -1, 10, NULL), - (1071, 712, 32, 256, 65, 69, -1, -1, 3, NULL), - (1072, 712, 3462, 1, 65, 69, -1, -1, 3, NULL), - (1073, 712, 4972, 1, 65, 68, -1, -1, 4, NULL), - (1074, 712, 4875, 2, 65, 66, -1, -1, 2, NULL), - (1075, 712, 5527, 256, 66, 255, -1, -1, 3, NULL), - (1076, 712, 5530, 8, 67, 255, -1, -1, 2, NULL), - (1077, 712, 5529, 8, 67, 255, -1, -1, 6, NULL), - (1078, 712, 5528, 2, 67, 255, -1, -1, 2, NULL), - (1079, 712, 5533, 8, 68, 255, -1, -1, 8, NULL), - (1080, 712, 5531, 32, 68, 69, -1, -1, 0, NULL), - (1081, 712, 5536, 8, 69, 255, -1, -1, 1, NULL), - (1082, 712, 5537, 8, 69, 255, -1, -1, 4, NULL), - (1083, 712, 5535, 1, 69, 69, -1, -1, 4, NULL), - (1084, 712, 5542, 8, 70, 255, -1, -1, 10, NULL), - (1085, 712, 5540, 256, 70, 255, -1, -1, 3, NULL), - (1086, 712, 6828, 1, 70, 255, -1, -1, 3, NULL), - (1087, 712, 5543, 1, 70, 255, -1, -1, 4, NULL), - (1088, 712, 5538, 32, 70, 255, -1, -1, 0, NULL), - (1089, 707, 425, 8, 20, 255, -1, -1, 0, NULL), - (1090, 705, 190, 2048, 47, 55, -1, -1, 0, NULL), - (1091, 705, 292, 2048, 2, 12, -1, -1, 0, NULL), - (1092, 705, 187, 2048, 13, 29, -1, -1, 0, NULL), - (1093, 705, 188, 2048, 30, 46, -1, -1, 0, NULL), - (1094, 705, 1691, 2048, 54, 58, -1, -1, 0, NULL), - (1095, 705, 1692, 2048, 59, 59, -1, -1, 0, NULL), - (1096, 705, 2120, 2048, 60, 60, -1, -1, 0, NULL), - (1097, 705, 3341, 2048, 61, 62, -1, -1, 0, NULL), - (1098, 705, 3354, 2048, 63, 63, -1, -1, 0, NULL), - (1099, 705, 3358, 2048, 64, 66, -1, -1, 0, NULL), - (1100, 705, 5503, 2048, 67, 67, -1, -1, 0, NULL), - (1101, 705, 8035, 2048, 68, 68, -1, -1, 0, NULL), - (1102, 705, 5520, 2048, 69, 255, -1, -1, 0, NULL), - (1103, 709, 343, 16384, 6, 51, -1, -1, 3, NULL), - (1104, 709, 2572, 16384, 15, 34, -1, -1, 3, NULL), - (1105, 709, 2573, 16384, 23, 49, -1, -1, 3, NULL), - (1106, 709, 1457, 16384, 35, 53, -1, -1, 3, NULL), - (1107, 709, 1458, 16384, 50, 55, -1, -1, 3, NULL), - (1108, 709, 2575, 16384, 52, 59, -1, -1, 3, NULL), - (1109, 709, 2577, 16384, 54, 64, -1, -1, 3, NULL), - (1110, 709, 2578, 16384, 56, 62, -1, -1, 3, NULL), - (1111, 709, 2579, 16384, 58, 65, -1, -1, 3, NULL), - (1112, 709, 3406, 16384, 61, 70, -1, -1, 2, NULL), - (1113, 707, 3435, 16384, 61, 85, -1, -1, 2, NULL), - (1114, 707, 5351, 16384, 67, 73, -1, -1, 2, NULL), - (1115, 707, 5354, 16384, 67, 71, -1, -1, 2, NULL), - (1116, 703, 343, 16384, 1, 12, -1, -1, 3, NULL), - (1117, 703, 1511, 16384, 10, 20, -1, -1, 3, NULL), - (1118, 703, 1512, 16384, 21, 36, -1, -1, 3, NULL), - (1119, 703, 1513, 16384, 37, 51, -1, -1, 3, NULL), - (1120, 703, 1716, 16384, 52, 67, -1, -1, 3, NULL), - (1121, 703, 2546, 16384, 52, 65, -1, -1, 3, NULL), - (1122, 703, 5427, 16384, 68, 71, -1, -1, 3, NULL), - (1123, 704, 110, 16384, 22, 43, -1, -1, 2, NULL), - (1124, 704, 111, 16384, 44, 50, -1, -1, 2, NULL), - (1125, 704, 112, 16384, 51, 57, -1, -1, 2, NULL), - (1126, 704, 1577, 16384, 58, 59, -1, -1, 2, NULL), - (1127, 704, 1772, 16384, 60, 255, -1, -1, 1, NULL), - (1128, 704, 3387, 16384, 63, 70, -1, -1, 2, NULL), - (1129, 705, 41, 16384, 1, 3, -1, -1, 3, NULL), - (1130, 705, 676, 16384, 2, 17, -1, -1, 1, NULL), - (1131, 705, 291, 16384, 4, 8, -1, -1, 3, NULL), - (1132, 705, 645, 16384, 9, 18, -1, -1, 3, NULL), - (1133, 705, 281, 16384, 16, 24, -1, -1, 3, NULL), - (1134, 705, 677, 16384, 18, 40, -1, -1, 1, NULL), - (1135, 705, 179, 16384, 19, 33, -1, -1, 4, NULL), - (1136, 705, 162, 16384, 25, 39, -1, -1, 3, NULL), - (1137, 705, 180, 16384, 34, 41, -1, -1, 4, NULL), - (1138, 705, 163, 16384, 40, 52, -1, -1, 3, NULL), - (1139, 705, 678, 16384, 41, 56, -1, -1, 1, NULL), - (1140, 705, 181, 16384, 42, 52, -1, -1, 4, NULL), - (1141, 705, 1592, 16384, 53, 65, -1, -1, 3, NULL), - (1142, 705, 1702, 16384, 57, 60, -1, -1, 1, NULL), - (1143, 705, 3342, 16384, 61, 71, -1, -1, 1, NULL), - (1144, 705, 5499, 16384, 66, 70, -1, -1, 3, NULL), - (1145, 712, 162, 16384, 44, 55, -1, -1, 2, NULL), - (1146, 712, 163, 16384, 56, 65, -1, -1, 2, NULL), - (1147, 707, 14312, 16384, 71, 75, -1, -1, 3, NULL), - (1148, 707, 14313, 16384, 71, 75, -1, -1, 3, NULL), - (1149, 707, 14314, 16384, 71, 75, -1, -1, 3, NULL), - (1150, 707, 0, 16384, 76, 80, -1, -1, 2, NULL), - (1151, 707, 18392, 16384, 81, 85, -1, -1, 2, NULL), - (1152, 707, 18393, 16384, 81, 85, -1, -1, 2, NULL), - (1153, 707, 18394, 16384, 81, 85, -1, -1, 2, NULL), - (1154, 703, 10516, 16384, 72, 76, -1, -1, 3, NULL), - (1155, 703, 10517, 16384, 72, 76, -1, -1, 3, NULL), - (1156, 703, 10518, 16384, 72, 76, -1, -1, 3, NULL), - (1157, 703, 0, 16384, 77, 81, -1, -1, 3, NULL), - (1158, 703, 18970, 16384, 82, 86, -1, -1, 3, NULL), - (1159, 703, 18971, 16384, 82, 86, -1, -1, 3, NULL), - (1160, 703, 18972, 16384, 82, 86, -1, -1, 3, NULL), - (1161, 704, 15186, 16384, 76, 80, -1, -1, 2, NULL), - (1162, 704, 15187, 16384, 76, 80, -1, -1, 2, NULL), - (1163, 704, 15188, 16384, 76, 80, -1, -1, 2, NULL), - (1164, 704, 18726, 16384, 81, 85, -1, -1, 2, NULL), - (1165, 704, 18727, 16384, 81, 85, -1, -1, 2, NULL), - (1166, 704, 18728, 16384, 81, 85, -1, -1, 2, NULL), - (1167, 705, 14446, 16384, 71, 75, -1, -1, 3, NULL), - (1168, 705, 14447, 16384, 71, 75, -1, -1, 3, NULL), - (1169, 705, 14467, 16384, 72, 76, -1, -1, 1, NULL), - (1170, 705, 14468, 16384, 72, 76, -1, -1, 1, NULL), - (1171, 705, 14469, 16384, 72, 76, -1, -1, 1, NULL), - (1172, 705, 0, 16384, 77, 81, -1, -1, 1, NULL), - (1173, 705, 18552, 16384, 81, 85, -1, -1, 3, NULL), - (1174, 705, 18553, 16384, 81, 85, -1, -1, 3, NULL), - (1175, 705, 18554, 16384, 81, 85, -1, -1, 3, NULL), - (1176, 705, 18573, 16384, 82, 86, -1, -1, 1, NULL), - (1177, 705, 18574, 16384, 82, 86, -1, -1, 1, NULL), - (1178, 705, 18575, 16384, 82, 86, -1, -1, 1, NULL), - (1179, 701, 203, 32768, 1, 21, -1, -1, 2, NULL), - (1180, 701, 213, 32768, 4, 27, -1, -1, 2, NULL), - (1181, 701, 4056, 32768, 8, 22, -1, -1, 2, NULL), - (1182, 701, 95, 32768, 22, 47, -1, -1, 2, NULL), - (1183, 701, 4057, 32768, 23, 37, -1, -1, 2, NULL), - (1184, 701, 96, 32768, 28, 50, -1, -1, 2, NULL), - (1185, 701, 2946, 32768, 38, 53, -1, -1, 2, NULL), - (1186, 701, 97, 32768, 48, 57, -1, -1, 2, NULL), - (1187, 701, 3693, 32768, 51, 83, -1, -1, 3, NULL), - (1188, 701, 2880, 32768, 54, 255, -1, -1, 2, NULL), - (1189, 701, 1525, 32768, 58, 83, -1, -1, 2, NULL), - (1190, 708, 203, 32768, 5, 33, -1, -1, 2, NULL), - (1191, 708, 213, 32768, 11, 55, -1, -1, 2, NULL), - (1192, 708, 4056, 32768, 19, 33, -1, -1, 2, NULL), - (1193, 708, 95, 32768, 34, 61, -1, -1, 2, NULL), - (1194, 708, 4057, 32768, 34, 44, -1, -1, 2, NULL), - (1195, 708, 2946, 32768, 45, 59, -1, -1, 2, NULL), - (1196, 708, 96, 32768, 56, 61, -1, -1, 2, NULL), - (1197, 708, 2880, 32768, 60, 255, -1, -1, 2, NULL), - (1198, 708, 3190, 32768, 62, 66, -1, -1, 2, NULL), - (1199, 708, 5283, 32768, 67, 80, -1, -1, 2, NULL), - (1200, 710, 203, 32768, 13, 60, -1, -1, 2, NULL), - (1201, 710, 213, 32768, 22, 60, -1, -1, 2, NULL), - (1202, 710, 95, 32768, 61, 72, -1, -1, 2, NULL), - (1203, 710, 96, 32768, 61, 72, -1, -1, 2, NULL), - (1204, 709, 213, 32768, 19, 255, -1, -1, 2, NULL), - (1205, 707, 213, 32768, 4, 27, -1, -1, 2, NULL), - (1206, 707, 203, 32768, 5, 27, -1, -1, 2, NULL), - (1207, 707, 95, 32768, 28, 51, -1, -1, 2, NULL), - (1208, 707, 96, 32768, 28, 51, -1, -1, 2, NULL), - (1209, 707, 3693, 32768, 52, 83, -1, -1, 2, NULL), - (1210, 711, 3682, 32768, 45, 85, -1, -1, 2, NULL), - (1211, 711, 3681, 32768, 52, 85, -1, -1, 2, NULL), - (1212, 706, 213, 32768, 1, 21, -1, -1, 2, NULL), - (1213, 706, 203, 32768, 2, 25, -1, -1, 2, NULL), - (1214, 706, 4056, 32768, 9, 23, -1, -1, 2, NULL), - (1215, 706, 96, 32768, 22, 47, -1, -1, 2, NULL), - (1216, 706, 4057, 32768, 24, 37, -1, -1, 2, NULL), - (1217, 706, 95, 32768, 26, 51, -1, -1, 2, NULL), - (1218, 706, 2946, 32768, 38, 53, -1, -1, 2, NULL), - (1219, 706, 98, 32768, 48, 51, -1, -1, 2, NULL), - (1220, 706, 2526, 32768, 52, 84, -1, -1, 2, NULL), - (1221, 706, 3842, 32768, 52, 84, -1, -1, 2, NULL), - (1222, 706, 2880, 32768, 54, 255, -1, -1, 2, NULL), - (1223, 712, 213, 32768, 4, 44, -1, -1, 2, NULL), - (1224, 712, 203, 32768, 13, 60, -1, -1, 2, NULL), - (1225, 712, 96, 32768, 45, 62, -1, -1, 2, NULL), - (1226, 712, 95, 32768, 61, 255, -1, -1, 2, NULL), - (1227, 712, 98, 32768, 63, 255, -1, -1, 2, NULL), - (1228, 701, 14267, 32768, 74, 78, -1, -1, 2, NULL), - (1229, 701, 14268, 32768, 74, 78, -1, -1, 2, NULL), - (1230, 701, 14269, 32768, 74, 78, -1, -1, 2, NULL), - (1231, 701, 18306, 32768, 84, 255, -1, -1, 2, NULL), - (1232, 701, 18307, 32768, 84, 255, -1, -1, 2, NULL), - (1233, 701, 18308, 32768, 84, 255, -1, -1, 2, NULL), - (1234, 701, 18389, 32768, 84, 255, -1, -1, 2, NULL), - (1235, 701, 18390, 32768, 84, 255, -1, -1, 2, NULL), - (1236, 701, 18391, 32768, 84, 255, -1, -1, 2, NULL), - (1237, 708, 19128, 32768, 81, 255, -1, -1, 2, NULL), - (1238, 708, 19129, 32768, 81, 255, -1, -1, 2, NULL), - (1239, 708, 19130, 32768, 81, 255, -1, -1, 2, NULL), - (1240, 710, 14955, 32768, 73, 77, -1, -1, 2, NULL), - (1241, 710, 14956, 32768, 73, 77, -1, -1, 2, NULL), - (1242, 710, 0, 32768, 78, 82, -1, -1, 2, NULL), - (1243, 710, 19146, 32768, 83, 87, -1, -1, 2, NULL), - (1244, 710, 19147, 32768, 83, 87, -1, -1, 2, NULL), - (1245, 710, 19148, 32768, 83, 87, -1, -1, 2, NULL), - (1246, 707, 9700, 32768, 71, 83, -1, -1, 2, NULL), - (1247, 707, 9701, 32768, 71, 83, -1, -1, 2, NULL), - (1248, 707, 9702, 32768, 71, 83, -1, -1, 2, NULL), - (1249, 707, 18389, 32768, 84, 88, -1, -1, 2, NULL), - (1250, 707, 18390, 32768, 84, 88, -1, -1, 2, NULL), - (1251, 707, 18391, 32768, 84, 88, -1, -1, 2, NULL), - (1252, 711, 14027, 32768, 79, 83, -1, -1, 2, NULL), - (1253, 711, 14028, 32768, 79, 83, -1, -1, 2, NULL), - (1254, 711, 14029, 32768, 79, 83, -1, -1, 2, NULL), - (1255, 711, 18021, 32768, 84, 85, -1, -1, 2, NULL), - (1256, 711, 18022, 32768, 84, 85, -1, -1, 2, NULL), - (1257, 711, 18023, 32768, 84, 85, -1, -1, 2, NULL), - (1258, 706, 9700, 32768, 72, 73, -1, -1, 2, NULL), - (1259, 706, 9701, 32768, 72, 73, -1, -1, 2, NULL), - (1260, 706, 9702, 32768, 72, 73, -1, -1, 2, NULL), - (1261, 706, 14387, 32768, 74, 78, -1, -1, 2, NULL), - (1262, 706, 14388, 32768, 74, 78, -1, -1, 2, NULL), - (1263, 706, 14389, 32768, 74, 78, -1, -1, 2, NULL), - (1264, 706, 0, 32768, 79, 83, -1, -1, 2, NULL), - (1265, 706, 18467, 32768, 84, 88, -1, -1, 2, NULL), - (1266, 706, 18468, 32768, 84, 88, -1, -1, 2, NULL), - (1267, 706, 18469, 32768, 84, 88, -1, -1, 2, NULL), - (1268, 706, 19513, 32768, 85, 89, -1, -1, 2, NULL), - (1269, 706, 19514, 32768, 85, 89, -1, -1, 2, NULL), - (1270, 706, 19515, 32768, 85, 89, -1, -1, 2, NULL); -/*!40000 ALTER TABLE `bot_spells_entries` ENABLE KEYS */; -/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; -/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; diff --git a/utils/sql/git/bots/deprecated/drop_bots (pre-update script).sql b/utils/sql/git/bots/deprecated/drop_bots (pre-update script).sql deleted file mode 100644 index 24dcccb02..000000000 --- a/utils/sql/git/bots/deprecated/drop_bots (pre-update script).sql +++ /dev/null @@ -1,85 +0,0 @@ --- 'drop_bots (pre-update script)' sql script file --- current as of 11/30/2015 --- --- Note: This file will remove bot schema loaded by 'load_bots' sql scripts. --- There may still be remnants of bot activity in tables `guild_members` and --- `group_id`. If these entries are causing issues, you may need to manually --- remove them. - - -SELECT "dropping views..."; -DROP VIEW IF EXISTS `vwGuildMembers`; -DROP VIEW IF EXISTS `vwGroups`; -DROP VIEW IF EXISTS `vwBotGroups`; -DROP VIEW IF EXISTS `vwBotCharacterMobs`; - - -SELECT "dropping functions..."; -DROP FUNCTION IF EXISTS `GetMobTypeByName`; -DROP FUNCTION IF EXISTS `GetMobTypeByID`; -DROP FUNCTION IF EXISTS `GetMobType`; - - -SELECT "dropping tables..."; -DROP TABLE IF EXISTS `botguildmembers`; -DROP TABLE IF EXISTS `botgroupmembers`; -DROP TABLE IF EXISTS `botgroup`; -DROP TABLE IF EXISTS `botgroups`; -- this table is not a part of 'load_bots.sql' -DROP TABLE IF EXISTS `botpetinventory`; -DROP TABLE IF EXISTS `botpetbuffs`; -DROP TABLE IF EXISTS `botpets`; -DROP TABLE IF EXISTS `botinventory`; -DROP TABLE IF EXISTS `botbuffs`; -DROP TABLE IF EXISTS `bottimers`; -DROP TABLE IF EXISTS `botstances`; -DROP TABLE IF EXISTS `bots`; - -DROP PROCEDURE IF EXISTS `DropBotsSchema`; - - -DELIMITER $$ - -CREATE PROCEDURE `DropBotsSchema` () -BEGIN - SELECT "deleting rules..."; - DELETE FROM `rule_values` WHERE `rule_name` LIKE 'Bots%'; - - - SELECT "deleting command..."; - DELETE FROM `commands` WHERE `command` LIKE 'bot'; - - - SELECT "restoring keys..."; - IF (EXISTS(SELECT `CONSTRAINT_NAME` FROM `information_schema`.`KEY_COLUMN_USAGE` WHERE `TABLE_SCHEMA` = DATABASE() AND `TABLE_NAME` = 'group_id' AND `CONSTRAINT_NAME` = 'PRIMARY')) THEN - ALTER TABLE `group_id` DROP PRIMARY KEY; - END IF; - ALTER TABLE `group_id` ADD PRIMARY KEY (`groupid`, `charid`, `ismerc`); - - IF (EXISTS(SELECT `CONSTRAINT_NAME` FROM `information_schema`.`KEY_COLUMN_USAGE` WHERE `TABLE_SCHEMA` = DATABASE() AND `TABLE_NAME` = 'guild_members' AND `CONSTRAINT_NAME` = 'PRIMARY')) THEN - ALTER TABLE `guild_members` DROP PRIMARY KEY; - END IF; - ALTER TABLE `guild_members` ADD PRIMARY KEY (`char_id`); - - - SELECT "de-activating spawns..."; - UPDATE `spawn2` SET `enabled` = 0 WHERE `id` IN (59297,59298); - - - SELECT "clearing database version..."; - IF (EXISTS(SELECT `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE `TABLE_SCHEMA` = DATABASE() AND `TABLE_NAME` = 'db_version' AND `COLUMN_NAME` = 'bots_version')) THEN - UPDATE `db_version` - SET `bots_version` = 0; - END IF; - -END$$ - -DELIMITER ; - - -CALL `DropBotsSchema`(); - -SELECT "dropping procedure..."; -DROP PROCEDURE IF EXISTS `DropBotsSchema`; - - --- End of File diff --git a/utils/sql/git/bots/deprecated/load_bots.sql b/utils/sql/git/bots/deprecated/load_bots.sql deleted file mode 100644 index 0dd030545..000000000 --- a/utils/sql/git/bots/deprecated/load_bots.sql +++ /dev/null @@ -1,280 +0,0 @@ --- 'load_bots' sql script file --- current as of 10/15/2014 --- --- Use this file on databases where the player profile blob has been converted. --- --- Note: This file assumes a database free of bot remnants. If you have a prior --- bot installation and wish to reload the default schema and entries, then --- source 'drop_bots.sql' before sourcing this file. - - -ALTER TABLE `guild_members` DROP PRIMARY KEY; -ALTER TABLE `group_id` DROP PRIMARY KEY, ADD PRIMARY KEY USING BTREE(`groupid`, `charid`, `name`, `ismerc`); - -UPDATE `spawn2` SET `enabled` = 1 WHERE `id` IN (59297,59298); - --- old command kept for reference (`commands` now only has 2 columns - `command` and `access`) --- INSERT INTO `commands` VALUES ('bot', '0', 'Type \"#bot help\" to the see the list of available commands for bots.'); -INSERT INTO `commands` VALUES ('bot', '0'); - -INSERT INTO `rule_values` VALUES - ('1', 'Bots:BotAAExpansion', '8', 'The expansion through which bots will obtain AAs'), - ('1', 'Bots:BotFinishBuffing', 'false', 'Allow for buffs to complete even if the bot caster is out of mana. Only affects buffing out of combat.'), - ('1', 'Bots:BotGroupBuffing', 'false', 'Bots will cast single target buffs as group buffs, default is false for single. Does not make single target buffs work for MGB.'), - ('1', 'Bots:BotManaRegen', '3.0', 'Adjust mana regen for bots, 1 is fast and higher numbers slow it down 3 is about the same as players.'), - ('1', 'Bots:BotQuest', 'false', 'Optional quest method to manage bot spawn limits using the quest_globals name bot_spawn_limit, see: /bazaar/Aediles_Thrall.pl'), - ('1', 'Bots:BotSpellQuest', 'false', 'Anita Thrall\'s (Anita_Thrall.pl) Bot Spell Scriber quests.'), - ('1', 'Bots:CreateBotCount', '150', 'Number of bots that each account can create'), - ('1', 'Bots:SpawnBotCount', '71', 'Number of bots a character can have spawned at one time, You + 71 bots is a 12 group raid'); - -CREATE TABLE `bots` ( - `BotID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `BotOwnerCharacterID` INT(10) UNSIGNED NOT NULL, - `BotSpellsID` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `Name` VARCHAR(64) NOT NULL, - `LastName` VARCHAR(32) DEFAULT NULL, - `BotLevel` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0', - `Race` SMALLINT(5) NOT NULL DEFAULT '0', - `Class` TINYINT(2) NOT NULL DEFAULT '0', - `Gender` TINYINT(2) NOT NULL DEFAULT '0', - `Size` FLOAT NOT NULL DEFAULT '0', - `Face` INT(10) NOT NULL DEFAULT '1', - `LuclinHairStyle` INT(10) NOT NULL DEFAULT '1', - `LuclinHairColor` INT(10) NOT NULL DEFAULT '1', - `LuclinEyeColor` INT(10) NOT NULL DEFAULT '1', - `LuclinEyeColor2` INT(10) NOT NULL DEFAULT '1', - `LuclinBeardColor` INT(10) NOT NULL DEFAULT '1', - `LuclinBeard` INT(10) NOT NULL DEFAULT '0', - `DrakkinHeritage` INT(10) NOT NULL DEFAULT '0', - `DrakkinTattoo` INT(10) NOT NULL DEFAULT '0', - `DrakkinDetails` INT(10) NOT NULL DEFAULT '0', - `HP` INTEGER NOT NULL DEFAULT '0', - `Mana` INTEGER NOT NULL DEFAULT '0', - `MR` SMALLINT(5) NOT NULL DEFAULT '0', - `CR` SMALLINT(5) NOT NULL DEFAULT '0', - `DR` SMALLINT(5) NOT NULL DEFAULT '0', - `FR` SMALLINT(5) NOT NULL DEFAULT '0', - `PR` SMALLINT(5) NOT NULL DEFAULT '0', - `Corrup` SMALLINT(5) NOT NULL DEFAULT '0', - `AC` SMALLINT(5) NOT NULL DEFAULT '0', - `STR` MEDIUMINT(8) NOT NULL DEFAULT '75', - `STA` MEDIUMINT(8) NOT NULL DEFAULT '75', - `DEX` MEDIUMINT(8) NOT NULL DEFAULT '75', - `AGI` MEDIUMINT(8) NOT NULL DEFAULT '75', - `_INT` MEDIUMINT(8) NOT NULL DEFAULT '80', - `WIS` MEDIUMINT(8) NOT NULL DEFAULT '75', - `CHA` MEDIUMINT(8) NOT NULL DEFAULT '75', - `ATK` MEDIUMINT(9) NOT NULL DEFAULT '0', - `BotCreateDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - `LastSpawnDate` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `TotalPlayTime` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `LastZoneId` SMALLINT(6) NOT NULL DEFAULT '0', - `BotInspectMessage` VARCHAR(256) NOT NULL DEFAULT '', - PRIMARY KEY (`BotID`) -) ENGINE=InnoDB; - -CREATE TABLE `botstances` ( - `BotID` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `StanceID` TINYINT UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`BotID`), - CONSTRAINT `FK_botstances_1` FOREIGN KEY (`BotID`) REFERENCES `bots` (`BotID`) -); - -CREATE TABLE `bottimers` ( - `BotID` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `TimerID` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `Value` INT(10) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`BotID`), - CONSTRAINT `FK_bottimers_1` FOREIGN KEY (`BotID`) REFERENCES `bots` (`BotID`) -); - -CREATE TABLE `botbuffs` ( - `BotBuffId` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `BotId` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `SpellId` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `CasterLevel` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `DurationFormula` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `TicsRemaining` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `PoisonCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `DiseaseCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `CurseCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `CorruptionCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `HitCount` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `MeleeRune` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `MagicRune` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `DeathSaveSuccessChance` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `CasterAARank` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `Persistent` TINYINT(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`BotBuffId`), - KEY `FK_botbuff_1` (`BotId`), - CONSTRAINT `FK_botbuff_1` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; - -CREATE TABLE `botinventory` ( - `BotInventoryID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `BotID` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `SlotID` INTEGER SIGNED NOT NULL DEFAULT '0', - `ItemID` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `charges` TINYINT(3) UNSIGNED DEFAULT 0, - `color` INTEGER UNSIGNED NOT NULL DEFAULT 0, - `augslot1` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0, - `augslot2` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0, - `augslot3` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0, - `augslot4` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0, - `augslot5` MEDIUMINT(7) UNSIGNED DEFAULT 0, - `instnodrop` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0, - PRIMARY KEY (`BotInventoryID`), - KEY `FK_botinventory_1` (`BotID`), - CONSTRAINT `FK_botinventory_1` FOREIGN KEY (`BotID`) REFERENCES `bots` (`BotID`) -) ENGINE=InnoDB; - -CREATE TABLE `botpets` ( - `BotPetsId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `PetId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `BotId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `Name` VARCHAR(64) NULL, - `Mana` INTEGER NOT NULL DEFAULT '0', - `HitPoints` INTEGER NOT NULL DEFAULT '0', - PRIMARY KEY (`BotPetsId`), - KEY `FK_botpets_1` (`BotId`), - CONSTRAINT `FK_botpets_1` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`), - CONSTRAINT `U_botpets_1` UNIQUE (`BotId`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; - -CREATE TABLE `botpetbuffs` ( - `BotPetBuffId` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `BotPetsId` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `SpellId` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `CasterLevel` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `Duration` INT(11) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`BotPetBuffId`), - KEY `FK_botpetbuffs_1` (`BotPetsId`), - CONSTRAINT `FK_botpetbuffs_1` FOREIGN KEY (`BotPetsId`) REFERENCES `botpets` (`BotPetsID`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; - -CREATE TABLE `botpetinventory` ( - `BotPetInventoryId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `BotPetsId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `ItemId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`BotPetInventoryId`), - KEY `FK_botpetinventory_1` (`BotPetsId`), - CONSTRAINT `FK_botpetinventory_1` FOREIGN KEY (`BotPetsId`) REFERENCES `botpets` (`BotPetsID`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; - -CREATE TABLE `botgroup` ( - `BotGroupId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `BotGroupLeaderBotId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `BotGroupName` VARCHAR(64) NOT NULL, - PRIMARY KEY (`BotGroupId`), - KEY `FK_botgroup_1` (`BotGroupLeaderBotId`), - CONSTRAINT `FK_botgroup_1` FOREIGN KEY (`BotGroupLeaderBotId`) REFERENCES `bots` (`BotID`) -) ENGINE=InnoDB; - -CREATE TABLE `botgroupmembers` ( - `BotGroupMemberId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `BotGroupId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `BotId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`BotGroupMemberId`), - KEY `FK_botgroupmembers_1` (`BotGroupId`), - CONSTRAINT `FK_botgroupmembers_1` FOREIGN KEY (`BotGroupId`) REFERENCES `botgroup` (`BotGroupId`), - KEY `FK_botgroupmembers_2` (`BotId`), - CONSTRAINT `FK_botgroupmembers_2` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`) -) ENGINE=InnoDB; - -CREATE TABLE `botguildmembers` ( - `char_id` INT(11) NOT NULL DEFAULT '0', - `guild_id` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0', - `rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `tribute_enable` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `total_tribute` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `last_tribute` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `banker` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `public_note` TEXT NULL, - `alt` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`char_id`) -) ENGINE=InnoDB; - -DELIMITER $$ - -CREATE FUNCTION `GetMobType` (mobname VARCHAR(64)) RETURNS CHAR(1) -BEGIN - DECLARE Result CHAR(1); - - SET Result = NULL; - - IF (SELECT COUNT(*) FROM `character_data` WHERE `name` = mobname) > 0 THEN - SET Result = 'C'; - ELSEIF (SELECT COUNT(*) FROM `bots` WHERE `Name` = mobname) > 0 THEN - SET Result = 'B'; - END IF; - - RETURN Result; -END$$ - -DELIMITER ; - -CREATE VIEW `vwBotCharacterMobs` AS -SELECT _utf8'C' AS mobtype, -c.`id`, -c.`name`, -c.`class`, -c.`level`, -c.`last_login`, -c.`zone_id` -FROM `character_data` AS c -UNION ALL -SELECT _utf8'B' AS mobtype, -b.`BotID` AS id, -b.`Name` AS name, -b.`Class` AS class, -b.`BotLevel` AS level, -0 AS timelaston, -0 AS zoneid -FROM bots AS b; - -CREATE VIEW `vwGroups` AS -SELECT g.`groupid` AS groupid, -GetMobType(g.`name`) AS mobtype, -g.`name` AS name, -g.`charid` AS mobid, -IFNULL(c.`level`, b.`BotLevel`) AS level -FROM `group_id` AS g -LEFT JOIN `character_data` AS c ON g.`name` = c.`name` -LEFT JOIN `bots` AS b ON g.`name` = b.`Name`; - -CREATE VIEW `vwBotGroups` AS -SELECT g.`BotGroupId`, -g.`BotGroupName`, -g.`BotGroupLeaderBotId`, -b.`Name` AS BotGroupLeaderName, -b.`BotOwnerCharacterId`, -c.`name` AS BotOwnerCharacterName -FROM `botgroup` AS g -JOIN `bots` AS b ON g.`BotGroupLeaderBotId` = b.`BotID` -JOIN `character_data` AS c ON b.`BotOwnerCharacterID` = c.`id` -ORDER BY b.`BotOwnerCharacterId`, g.`BotGroupName`; - -CREATE VIEW `vwGuildMembers` AS -SELECT 'C' AS mobtype, -cm.`char_id`, -cm.`guild_id`, -cm.`rank`, -cm.`tribute_enable`, -cm.`total_tribute`, -cm.`last_tribute`, -cm.`banker`, -cm.`public_note`, -cm.`alt` -FROM `guild_members` AS cm -UNION ALL -SELECT 'B' AS mobtype, -bm.`char_id`, -bm.`guild_id`, -bm.`rank`, -bm.`tribute_enable`, -bm.`total_tribute`, -bm.`last_tribute`, -bm.`banker`, -bm.`public_note`, -bm.`alt` -FROM `botguildmembers` AS bm; diff --git a/utils/sql/git/bots/deprecated/load_bots_old.sql b/utils/sql/git/bots/deprecated/load_bots_old.sql deleted file mode 100644 index 5d88a8088..000000000 --- a/utils/sql/git/bots/deprecated/load_bots_old.sql +++ /dev/null @@ -1,280 +0,0 @@ --- 'load_bots_old' sql script file --- current as of 10/15/2014 --- --- Use this file on databases where the player profile blob has not been converted --- --- Note: This file assumes a database free of bot remnants. If you have a prior --- bot installation and wish to reload the default schema and entries, then --- source 'drop_bots.sql' before sourcing this file. - - -ALTER TABLE `guild_members` DROP PRIMARY KEY; -ALTER TABLE `group_id` DROP PRIMARY KEY, ADD PRIMARY KEY USING BTREE(`groupid`, `charid`, `name`, `ismerc`); - -UPDATE `spawn2` SET `enabled` = 1 WHERE `id` IN (59297,59298); - --- old command kept for reference (`commands` now only has 2 columns - `command` and `access`) --- INSERT INTO `commands` VALUES ('bot', '0', 'Type \"#bot help\" to the see the list of available commands for bots.'); -INSERT INTO `commands` VALUES ('bot', '0'); - -INSERT INTO `rule_values` VALUES - ('1', 'Bots:BotAAExpansion', '8', 'The expansion through which bots will obtain AAs'), - ('1', 'Bots:BotFinishBuffing', 'false', 'Allow for buffs to complete even if the bot caster is out of mana. Only affects buffing out of combat.'), - ('1', 'Bots:BotGroupBuffing', 'false', 'Bots will cast single target buffs as group buffs, default is false for single. Does not make single target buffs work for MGB.'), - ('1', 'Bots:BotManaRegen', '3.0', 'Adjust mana regen for bots, 1 is fast and higher numbers slow it down 3 is about the same as players.'), - ('1', 'Bots:BotQuest', 'false', 'Optional quest method to manage bot spawn limits using the quest_globals name bot_spawn_limit, see: /bazaar/Aediles_Thrall.pl'), - ('1', 'Bots:BotSpellQuest', 'false', 'Anita Thrall\'s (Anita_Thrall.pl) Bot Spell Scriber quests.'), - ('1', 'Bots:CreateBotCount', '150', 'Number of bots that each account can create'), - ('1', 'Bots:SpawnBotCount', '71', 'Number of bots a character can have spawned at one time, You + 71 bots is a 12 group raid'); - -CREATE TABLE `bots` ( - `BotID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `BotOwnerCharacterID` INT(10) UNSIGNED NOT NULL, - `BotSpellsID` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `Name` VARCHAR(64) NOT NULL, - `LastName` VARCHAR(32) DEFAULT NULL, - `BotLevel` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0', - `Race` SMALLINT(5) NOT NULL DEFAULT '0', - `Class` TINYINT(2) NOT NULL DEFAULT '0', - `Gender` TINYINT(2) NOT NULL DEFAULT '0', - `Size` FLOAT NOT NULL DEFAULT '0', - `Face` INT(10) NOT NULL DEFAULT '1', - `LuclinHairStyle` INT(10) NOT NULL DEFAULT '1', - `LuclinHairColor` INT(10) NOT NULL DEFAULT '1', - `LuclinEyeColor` INT(10) NOT NULL DEFAULT '1', - `LuclinEyeColor2` INT(10) NOT NULL DEFAULT '1', - `LuclinBeardColor` INT(10) NOT NULL DEFAULT '1', - `LuclinBeard` INT(10) NOT NULL DEFAULT '0', - `DrakkinHeritage` INT(10) NOT NULL DEFAULT '0', - `DrakkinTattoo` INT(10) NOT NULL DEFAULT '0', - `DrakkinDetails` INT(10) NOT NULL DEFAULT '0', - `HP` INTEGER NOT NULL DEFAULT '0', - `Mana` INTEGER NOT NULL DEFAULT '0', - `MR` SMALLINT(5) NOT NULL DEFAULT '0', - `CR` SMALLINT(5) NOT NULL DEFAULT '0', - `DR` SMALLINT(5) NOT NULL DEFAULT '0', - `FR` SMALLINT(5) NOT NULL DEFAULT '0', - `PR` SMALLINT(5) NOT NULL DEFAULT '0', - `Corrup` SMALLINT(5) NOT NULL DEFAULT '0', - `AC` SMALLINT(5) NOT NULL DEFAULT '0', - `STR` MEDIUMINT(8) NOT NULL DEFAULT '75', - `STA` MEDIUMINT(8) NOT NULL DEFAULT '75', - `DEX` MEDIUMINT(8) NOT NULL DEFAULT '75', - `AGI` MEDIUMINT(8) NOT NULL DEFAULT '75', - `_INT` MEDIUMINT(8) NOT NULL DEFAULT '80', - `WIS` MEDIUMINT(8) NOT NULL DEFAULT '75', - `CHA` MEDIUMINT(8) NOT NULL DEFAULT '75', - `ATK` MEDIUMINT(9) NOT NULL DEFAULT '0', - `BotCreateDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - `LastSpawnDate` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `TotalPlayTime` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `LastZoneId` SMALLINT(6) NOT NULL DEFAULT '0', - `BotInspectMessage` VARCHAR(256) NOT NULL DEFAULT '', - PRIMARY KEY (`BotID`) -) ENGINE=InnoDB; - -CREATE TABLE `botstances` ( - `BotID` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `StanceID` TINYINT UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`BotID`), - CONSTRAINT `FK_botstances_1` FOREIGN KEY (`BotID`) REFERENCES `bots` (`BotID`) -); - -CREATE TABLE `bottimers` ( - `BotID` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `TimerID` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `Value` INT(10) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`BotID`), - CONSTRAINT `FK_bottimers_1` FOREIGN KEY (`BotID`) REFERENCES `bots` (`BotID`) -); - -CREATE TABLE `botbuffs` ( - `BotBuffId` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `BotId` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `SpellId` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `CasterLevel` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `DurationFormula` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `TicsRemaining` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `PoisonCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `DiseaseCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `CurseCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `CorruptionCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `HitCount` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `MeleeRune` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `MagicRune` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `DeathSaveSuccessChance` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `CasterAARank` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `Persistent` TINYINT(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`BotBuffId`), - KEY `FK_botbuff_1` (`BotId`), - CONSTRAINT `FK_botbuff_1` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; - -CREATE TABLE `botinventory` ( - `BotInventoryID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `BotID` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `SlotID` INTEGER SIGNED NOT NULL DEFAULT '0', - `ItemID` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `charges` TINYINT(3) UNSIGNED DEFAULT 0, - `color` INTEGER UNSIGNED NOT NULL DEFAULT 0, - `augslot1` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0, - `augslot2` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0, - `augslot3` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0, - `augslot4` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0, - `augslot5` MEDIUMINT(7) UNSIGNED DEFAULT 0, - `instnodrop` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0, - PRIMARY KEY (`BotInventoryID`), - KEY `FK_botinventory_1` (`BotID`), - CONSTRAINT `FK_botinventory_1` FOREIGN KEY (`BotID`) REFERENCES `bots` (`BotID`) -) ENGINE=InnoDB; - -CREATE TABLE `botpets` ( - `BotPetsId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `PetId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `BotId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `Name` VARCHAR(64) NULL, - `Mana` INTEGER NOT NULL DEFAULT '0', - `HitPoints` INTEGER NOT NULL DEFAULT '0', - PRIMARY KEY (`BotPetsId`), - KEY `FK_botpets_1` (`BotId`), - CONSTRAINT `FK_botpets_1` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`), - CONSTRAINT `U_botpets_1` UNIQUE (`BotId`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; - -CREATE TABLE `botpetbuffs` ( - `BotPetBuffId` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `BotPetsId` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `SpellId` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `CasterLevel` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `Duration` INT(11) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`BotPetBuffId`), - KEY `FK_botpetbuffs_1` (`BotPetsId`), - CONSTRAINT `FK_botpetbuffs_1` FOREIGN KEY (`BotPetsId`) REFERENCES `botpets` (`BotPetsID`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; - -CREATE TABLE `botpetinventory` ( - `BotPetInventoryId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `BotPetsId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `ItemId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`BotPetInventoryId`), - KEY `FK_botpetinventory_1` (`BotPetsId`), - CONSTRAINT `FK_botpetinventory_1` FOREIGN KEY (`BotPetsId`) REFERENCES `botpets` (`BotPetsID`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; - -CREATE TABLE `botgroup` ( - `BotGroupId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `BotGroupLeaderBotId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `BotGroupName` VARCHAR(64) NOT NULL, - PRIMARY KEY (`BotGroupId`), - KEY `FK_botgroup_1` (`BotGroupLeaderBotId`), - CONSTRAINT `FK_botgroup_1` FOREIGN KEY (`BotGroupLeaderBotId`) REFERENCES `bots` (`BotID`) -) ENGINE=InnoDB; - -CREATE TABLE `botgroupmembers` ( - `BotGroupMemberId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `BotGroupId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `BotId` INTEGER UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`BotGroupMemberId`), - KEY `FK_botgroupmembers_1` (`BotGroupId`), - CONSTRAINT `FK_botgroupmembers_1` FOREIGN KEY (`BotGroupId`) REFERENCES `botgroup` (`BotGroupId`), - KEY `FK_botgroupmembers_2` (`BotId`), - CONSTRAINT `FK_botgroupmembers_2` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`) -) ENGINE=InnoDB; - -CREATE TABLE `botguildmembers` ( - `char_id` INT(11) NOT NULL DEFAULT '0', - `guild_id` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0', - `rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `tribute_enable` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `total_tribute` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `last_tribute` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `banker` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `public_note` TEXT NULL, - `alt` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`char_id`) -) ENGINE=InnoDB; - -DELIMITER $$ - -CREATE FUNCTION `GetMobType` (mobname VARCHAR(64)) RETURNS CHAR(1) -BEGIN - DECLARE Result CHAR(1); - - SET Result = NULL; - - IF (SELECT COUNT(*) FROM `character_` WHERE `name` = mobname) > 0 THEN - SET Result = 'C'; - ELSEIF (SELECT COUNT(*) FROM `bots` WHERE `Name` = mobname) > 0 THEN - SET Result = 'B'; - END IF; - -RETURN Result; -END$$ - -DELIMITER ; - -CREATE VIEW `vwBotCharacterMobs` AS -SELECT _utf8'C' AS mobtype, -c.`id`, -c.`name`, -c.`class`, -c.`level`, -c.`timelaston`, -c.`zoneid` -FROM `character_` AS c -UNION ALL -SELECT _utf8'B' AS mobtype, -b.`BotID` AS id, -b.`Name` AS name, -b.`Class` AS class, -b.`BotLevel` AS level, -0 AS timelaston, -0 AS zoneid -FROM bots AS b; - -CREATE VIEW `vwGroups` AS -SELECT g.`groupid` AS groupid, -GetMobType(g.`name`) AS mobtype, -g.`name` AS name, -g.`charid` AS mobid, -IFNULL(c.`level`, b.`BotLevel`) AS level -FROM `group_id` AS g -LEFT JOIN `character_` AS c ON g.`name` = c.`name` -LEFT JOIN `bots` AS b ON g.`name` = b.`Name`; - -CREATE VIEW `vwBotGroups` AS -SELECT g.`BotGroupId`, -g.`BotGroupName`, -g.`BotGroupLeaderBotId`, -b.`Name` AS BotGroupLeaderName, -b.`BotOwnerCharacterId`, -c.`name` AS BotOwnerCharacterName -FROM `botgroup` AS g -JOIN `bots` AS b ON g.`BotGroupLeaderBotId` = b.`BotID` -JOIN `character_` AS c ON b.`BotOwnerCharacterID` = c.`id` -ORDER BY b.`BotOwnerCharacterId`, g.`BotGroupName`; - -CREATE VIEW `vwGuildMembers` AS -SELECT 'C' AS mobtype, -cm.`char_id`, -cm.`guild_id`, -cm.`rank`, -cm.`tribute_enable`, -cm.`total_tribute`, -cm.`last_tribute`, -cm.`banker`, -cm.`public_note`, -cm.`alt` -FROM `guild_members` AS cm -UNION ALL -SELECT 'B' AS mobtype, -bm.`char_id`, -bm.`guild_id`, -bm.`rank`, -bm.`tribute_enable`, -bm.`total_tribute`, -bm.`last_tribute`, -bm.`banker`, -bm.`public_note`, -bm.`alt` -FROM `botguildmembers` AS bm; diff --git a/utils/sql/git/bots/drop_bots.sql b/utils/sql/git/bots/drop_bots.sql deleted file mode 100644 index 1e31003bd..000000000 --- a/utils/sql/git/bots/drop_bots.sql +++ /dev/null @@ -1,74 +0,0 @@ --- 'drop_bots' sql script file --- current as of 12/11/2015 --- --- Note: This file will remove bot schema loaded by 'load_bots' sql scripts. --- There may still be remnants of bot activity in tables `guild_members` and --- `group_id`. If these entries are causing issues, you may need to manually --- remove them. --- --- Use eqemu_update.pl to administer this script - - -DROP VIEW IF EXISTS `vwguildmembers`; -DROP VIEW IF EXISTS `vwgroups`; -DROP VIEW IF EXISTS `vwbotgroups`; -DROP VIEW IF EXISTS `vwbotcharactermobs`; - -DROP VIEW IF EXISTS `vwGuildMembers`; -DROP VIEW IF EXISTS `vwGroups`; -DROP VIEW IF EXISTS `vwBotGroups`; -DROP VIEW IF EXISTS `vwBotCharacterMobs`; - -DROP VIEW IF EXISTS `vw_guild_members`; -DROP VIEW IF EXISTS `vw_groups`; -DROP VIEW IF EXISTS `vw_bot_groups`; -DROP VIEW IF EXISTS `vw_bot_character_mobs`; - -DROP FUNCTION IF EXISTS `GetMobTypeByName`; -DROP FUNCTION IF EXISTS `GetMobTypeByID`; -DROP FUNCTION IF EXISTS `GetMobType`; - -DROP TABLE IF EXISTS `botguildmembers`; -DROP TABLE IF EXISTS `botgroupmembers`; -DROP TABLE IF EXISTS `botgroup`; -DROP TABLE IF EXISTS `botpetinventory`; -DROP TABLE IF EXISTS `botpetbuffs`; -DROP TABLE IF EXISTS `botpets`; -DROP TABLE IF EXISTS `botinventory`; -DROP TABLE IF EXISTS `botbuffs`; -DROP TABLE IF EXISTS `bottimers`; -DROP TABLE IF EXISTS `botstances`; -DROP TABLE IF EXISTS `bots`; - -DROP TABLE IF EXISTS `botgroups`; -- this table is not a part of 'load_bots.sql' - -DROP TABLE IF EXISTS `botguildmembers_old`; -DROP TABLE IF EXISTS `botgroupmembers_old`; -DROP TABLE IF EXISTS `botgroup_old`; -DROP TABLE IF EXISTS `botpetinventory_old`; -DROP TABLE IF EXISTS `botpetbuffs_old`; -DROP TABLE IF EXISTS `botpets_old`; -DROP TABLE IF EXISTS `botinventory_old`; -DROP TABLE IF EXISTS `botbuffs_old`; -DROP TABLE IF EXISTS `bottimers_old`; -DROP TABLE IF EXISTS `botstances_old`; -DROP TABLE IF EXISTS `bots_old`; - -DROP TABLE IF EXISTS `bot_guild_members`; -DROP TABLE IF EXISTS `bot_group_members`; -DROP TABLE IF EXISTS `bot_groups`; -DROP TABLE IF EXISTS `bot_pet_inventories`; -DROP TABLE IF EXISTS `bot_pet_buffs`; -DROP TABLE IF EXISTS `bot_pets`; -DROP TABLE IF EXISTS `bot_inventories`; -DROP TABLE IF EXISTS `bot_buffs`; -DROP TABLE IF EXISTS `bot_timers`; -DROP TABLE IF EXISTS `bot_stances`; -DROP TABLE IF EXISTS `bot_inspect_messages`; -DROP TABLE IF EXISTS `bot_data`; - -DROP PROCEDURE IF EXISTS `LoadBotsSchema`; -DROP PROCEDURE IF EXISTS `DropBotsSchema`; - - --- End of File diff --git a/utils/sql/git/bots/required/2015_09_30_bots.sql b/utils/sql/git/bots/required/2015_09_30_bots.sql deleted file mode 100644 index d3cd66132..000000000 --- a/utils/sql/git/bots/required/2015_09_30_bots.sql +++ /dev/null @@ -1,1655 +0,0 @@ --- '2015_09_30_bots' sql script file --- current as of 12/11/2015 --- --- Use eqemu_update.pl to administer this script - - --- Clean-up -DROP VIEW IF EXISTS `vwbotcharactermobs`; -DROP VIEW IF EXISTS `vwbotgroups`; -DROP VIEW IF EXISTS `vwgroups`; -DROP VIEW IF EXISTS `vwguildmembers`; - -DROP VIEW IF EXISTS `vwBotCharacterMobs`; -DROP VIEW IF EXISTS `vwBotGroups`; -DROP VIEW IF EXISTS `vwGroups`; -DROP VIEW IF EXISTS `vwGuildMembers`; - -DROP VIEW IF EXISTS `vw_bot_character_mobs`; -DROP VIEW IF EXISTS `vw_bot_groups`; -DROP VIEW IF EXISTS `vw_groups`; -DROP VIEW IF EXISTS `vw_guild_members`; - -DROP FUNCTION IF EXISTS `GetMobType`; -DROP FUNCTION IF EXISTS `GetMobTypeByName`; -DROP FUNCTION IF EXISTS `GetMobTypeByID`; - -DROP PROCEDURE IF EXISTS `LoadBotsSchema`; - - --- Tables -CREATE TABLE `bot_data` ( - `bot_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, - `owner_id` INT(11) UNSIGNED NOT NULL, - `spells_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `name` VARCHAR(64) NOT NULL DEFAULT '', - `last_name` VARCHAR(64) NOT NULL DEFAULT '', - `title` VARCHAR(32) NOT NULL DEFAULT '', -- Unused - `suffix` VARCHAR(32) NOT NULL DEFAULT '', -- Unused - `zone_id` SMALLINT(6) NOT NULL DEFAULT '0', - `gender` TINYINT(2) NOT NULL DEFAULT '0', - `race` SMALLINT(5) NOT NULL DEFAULT '0', - `class` TINYINT(2) NOT NULL DEFAULT '0', - `level` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0', - `deity` INT(11) UNSIGNED NOT NULL DEFAULT '0', -- Unused - `creation_day` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `last_spawn` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `time_spawned` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `size` FLOAT NOT NULL DEFAULT '0', - `face` INT(10) NOT NULL DEFAULT '1', - `hair_color` INT(10) NOT NULL DEFAULT '1', - `hair_style` INT(10) NOT NULL DEFAULT '1', - `beard` INT(10) NOT NULL DEFAULT '0', - `beard_color` INT(10) NOT NULL DEFAULT '1', - `eye_color_1` INT(10) NOT NULL DEFAULT '1', - `eye_color_2` INT(10) NOT NULL DEFAULT '1', - `drakkin_heritage` INT(10) NOT NULL DEFAULT '0', - `drakkin_tattoo` INT(10) NOT NULL DEFAULT '0', - `drakkin_details` INT(10) NOT NULL DEFAULT '0', - `ac` SMALLINT(5) NOT NULL DEFAULT '0', - `atk` MEDIUMINT(9) NOT NULL DEFAULT '0', - `hp` INTEGER NOT NULL DEFAULT '0', - `mana` INTEGER NOT NULL DEFAULT '0', - `str` MEDIUMINT(8) NOT NULL DEFAULT '75', - `sta` MEDIUMINT(8) NOT NULL DEFAULT '75', - `cha` MEDIUMINT(8) NOT NULL DEFAULT '75', - `dex` MEDIUMINT(8) NOT NULL DEFAULT '75', - `int` MEDIUMINT(8) NOT NULL DEFAULT '75', - `agi` MEDIUMINT(8) NOT NULL DEFAULT '75', - `wis` MEDIUMINT(8) NOT NULL DEFAULT '75', - `fire` SMALLINT(5) NOT NULL DEFAULT '0', - `cold` SMALLINT(5) NOT NULL DEFAULT '0', - `magic` SMALLINT(5) NOT NULL DEFAULT '0', - `poison` SMALLINT(5) NOT NULL DEFAULT '0', - `disease` SMALLINT(5) NOT NULL DEFAULT '0', - `corruption` SMALLINT(5) NOT NULL DEFAULT '0', - `show_helm` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `follow_distance` INT(11) UNSIGNED NOT NULL DEFAULT '200', - PRIMARY KEY (`bot_id`) -) ENGINE=InnoDB; - -CREATE TABLE `bot_inspect_messages` ( - `bot_id` INT(11) UNSIGNED NOT NULL, - `inspect_message` VARCHAR(256) NOT NULL DEFAULT '', - PRIMARY KEY (`bot_id`), - INDEX `bot_id` (`bot_id`) -) ENGINE=InnoDB; - -CREATE TABLE `bot_stances` ( - `bot_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `stance_id` TINYINT UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`bot_id`), - CONSTRAINT `FK_bot_stances_1` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) -); - -CREATE TABLE `bot_timers` ( - `bot_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `timer_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `timer_value` INT(11) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`bot_id`), - CONSTRAINT `FK_bot_timers_1` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) -); - -CREATE TABLE `bot_buffs` ( - `buffs_index` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, - `bot_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `caster_level` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `duration_formula` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `tics_remaining` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `poison_counters` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `disease_counters` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `curse_counters` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `corruption_counters` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `numhits` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `melee_rune` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `magic_rune` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `dot_rune` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `persistent` TINYINT(1) NOT NULL DEFAULT '0', - `caston_x` INT(10) NOT NULL DEFAULT '0', - `caston_y` INT(10) NOT NULL DEFAULT '0', - `caston_z` INT(10) NOT NULL DEFAULT '0', - `extra_di_chance` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `instrument_mod` INT(10) NOT NULL DEFAULT '10', -- Unused - PRIMARY KEY (`buffs_index`), - KEY `FK_bot_buffs_1` (`bot_id`), - CONSTRAINT `FK_bot_buffs_1` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; - -CREATE TABLE `bot_inventories` ( - `inventories_index` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `bot_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `slot_id` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `item_id` INT(11) UNSIGNED NULL DEFAULT '0', - `inst_charges` TINYINT(3) UNSIGNED DEFAULT 0, - `inst_color` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `inst_no_drop` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', - `inst_custom_data` TEXT NULL, - `ornament_icon` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `ornament_id_file` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `ornament_hero_model` INT(11) NOT NULL DEFAULT '0', - `augment_1` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augment_2` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augment_3` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augment_4` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augment_5` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augment_6` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`inventories_index`), - KEY `FK_bot_inventories_1` (`bot_id`), - CONSTRAINT `FK_bot_inventories_1` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) -) ENGINE=InnoDB; - -CREATE TABLE `bot_pets` ( - `pets_index` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `pet_id` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `bot_id` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `name` VARCHAR(64) NULL, - `mana` INTEGER NOT NULL DEFAULT '0', - `hp` INTEGER NOT NULL DEFAULT '0', - PRIMARY KEY (`pets_index`), - KEY `FK_bot_pets_1` (`bot_id`), - CONSTRAINT `FK_bot_pets_1` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`), - CONSTRAINT `U_bot_pets_1` UNIQUE (`bot_id`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; - -CREATE TABLE `bot_pet_buffs` ( - `pet_buffs_index` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `pets_index` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `caster_level` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `duration` INT(11) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`pet_buffs_index`), - KEY `FK_bot_pet_buffs_1` (`pets_index`), - CONSTRAINT `FK_bot_pet_buffs_1` FOREIGN KEY (`pets_index`) REFERENCES `bot_pets` (`pets_index`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; - -CREATE TABLE `bot_pet_inventories` ( - `pet_inventories_index` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `pets_index` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `item_id` INTEGER UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`pet_inventories_index`), - KEY `FK_bot_pet_inventories_1` (`pets_index`), - CONSTRAINT `FK_bot_pet_inventories_1` FOREIGN KEY (`pets_index`) REFERENCES `bot_pets` (`pets_index`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; - -CREATE TABLE `bot_groups` ( - `groups_index` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `group_leader_id` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `group_name` VARCHAR(64) NOT NULL, - PRIMARY KEY (`groups_index`), - KEY `FK_bot_groups_1` (`group_leader_id`), - CONSTRAINT `FK_bot_groups_1` FOREIGN KEY (`group_leader_id`) REFERENCES `bot_data` (`bot_id`) -) ENGINE=InnoDB; - -CREATE TABLE `bot_group_members` ( - `group_members_index` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - `groups_index` INTEGER UNSIGNED NOT NULL DEFAULT '0', - `bot_id` INTEGER UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`group_members_index`), - KEY `FK_bot_group_members_1` (`groups_index`), - CONSTRAINT `FK_bot_group_members_1` FOREIGN KEY (`groups_index`) REFERENCES `bot_groups` (`groups_index`), - KEY `FK_bot_group_members_2` (`bot_id`), - CONSTRAINT `FK_bot_group_members_2` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) -) ENGINE=InnoDB; - -CREATE TABLE `bot_guild_members` ( - `bot_id` INT(11) NOT NULL DEFAULT '0', - `guild_id` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0', - `rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `tribute_enable` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `total_tribute` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `last_tribute` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `banker` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `public_note` TEXT NULL, - `alt` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`bot_id`) -) ENGINE=InnoDB; - - --- Functions -DELIMITER $$ - --- (no code references - see `vw_groups` below) -CREATE FUNCTION `GetMobType` (mob_name VARCHAR(64)) RETURNS CHAR(1) -BEGIN - DECLARE Result CHAR(1); - - SET Result = NULL; - - IF ((SELECT COUNT(*) FROM `character_data` WHERE `name` = mob_name) > 0) THEN - SET Result = 'C'; - ELSEIF ((SELECT COUNT(*) FROM `bot_data` WHERE `name` = mob_name) > 0) THEN - SET Result = 'B'; - END IF; - - RETURN Result; -END$$ - --- (one code reference in /common/database.cpp) -CREATE FUNCTION `GetMobTypeById` (mob_id INTEGER UNSIGNED) RETURNS CHAR(1) -BEGIN - DECLARE Result CHAR(1); - - SET Result = NULL; - - IF ((select `id` from `character_data` where `id` = mob_id) > 0) THEN - SET Result = 'C'; - ELSEIF ((select `bot_id` from `bot_data` where `bot_id` = mob_id) > 0) THEN - SET Result = 'B'; - END IF; - - RETURN Result; -END$$ - --- (for reference only) --- CREATE FUNCTION `GetMobTypeByName` (mob_name VARCHAR(64)) RETURNS CHAR(1) --- BEGIN --- DECLARE Result CHAR(1); --- --- SET Result = NULL; --- --- IF (select `id` from `character_data` where `name` = mob_name) > 0 THEN --- SET Result = 'C'; --- ELSEIF (select `bot_id` from `bot_data` where `name` = mob_name) > 0 THEN --- SET Result = 'B'; --- END IF; --- --- RETURN Result; --- END $$ - -DELIMITER ; - - --- Views -CREATE VIEW `vw_bot_character_mobs` AS -SELECT -_utf8'C' AS mob_type, -c.`id`, -c.`name`, -c.`class`, -c.`level`, -c.`last_login`, -c.`zone_id` -FROM `character_data` AS c -UNION ALL -SELECT _utf8'B' AS mob_type, -b.`bot_id` AS id, -b.`name`, -b.`class`, -b.`level`, -b.`last_spawn` AS last_login, -b.`zone_id` -FROM `bot_data` AS b; - -CREATE VIEW `vw_bot_groups` AS -SELECT -g.`groups_index`, -g.`group_name`, -g.`group_leader_id`, -b.`name` AS group_leader_name, -b.`owner_id`, -c.`name` AS owner_name -FROM `bot_groups` AS g -JOIN `bot_data` AS b ON g.`group_leader_id` = b.`bot_id` -JOIN `character_data` AS c ON b.`owner_id` = c.`id` -ORDER BY b.`owner_id`, g.`group_name`; - -CREATE VIEW `vw_groups` AS -SELECT -g.`groupid` AS group_id, -GetMobType(g.`name`) AS mob_type, -g.`name` AS name, -g.`charid` AS mob_id, -IFNULL(c.`level`, b.`level`) AS level -FROM `group_id` AS g -LEFT JOIN `character_data` AS c ON g.`name` = c.`name` -LEFT JOIN `bot_data` AS b ON g.`name` = b.`name`; - -CREATE VIEW `vw_guild_members` AS -SELECT -'C' AS mob_type, -cm.`char_id`, -cm.`guild_id`, -cm.`rank`, -cm.`tribute_enable`, -cm.`total_tribute`, -cm.`last_tribute`, -cm.`banker`, -cm.`public_note`, -cm.`alt` -FROM `guild_members` AS cm -UNION ALL -SELECT -'B' AS mob_type, -bm.`bot_id` AS char_id, -bm.`guild_id`, -bm.`rank`, -bm.`tribute_enable`, -bm.`total_tribute`, -bm.`last_tribute`, -bm.`banker`, -bm.`public_note`, -bm.`alt` -FROM `bot_guild_members` AS bm; - - --- Supplemental INSERT - --- -------------------------------------------------------- --- Host: 127.0.0.1 --- Server version: 10.0.22-MariaDB - mariadb.org binary distribution --- Server OS: Win64 --- HeidiSQL Version: 9.3.0.4984 --- -------------------------------------------------------- - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET NAMES utf8mb4 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; - --- Dumping structure for table peq_raw.bot_spells_entries -DROP TABLE IF EXISTS `bot_spells_entries`; -CREATE TABLE IF NOT EXISTS `bot_spells_entries` ( - `id` int(11) unsigned NOT NULL AUTO_INCREMENT, - `npc_spells_id` int(11) NOT NULL DEFAULT '0', - `spellid` smallint(5) NOT NULL DEFAULT '0', - `type` int(10) unsigned NOT NULL DEFAULT '0', - `minlevel` tinyint(3) unsigned NOT NULL DEFAULT '0', - `maxlevel` tinyint(3) unsigned NOT NULL DEFAULT '255', - `manacost` smallint(5) NOT NULL DEFAULT '-1', - `recast_delay` int(11) NOT NULL DEFAULT '-1', - `priority` smallint(5) NOT NULL DEFAULT '0', - `resist_adjust` int(11) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=2048 DEFAULT CHARSET=latin1; - --- Dumping data for table peq_raw.bot_spells_entries: ~1,270 rows (approximately) -/*!40000 ALTER TABLE `bot_spells_entries` DISABLE KEYS */; -INSERT INTO `bot_spells_entries` (`id`, `npc_spells_id`, `spellid`, `type`, `minlevel`, `maxlevel`, `manacost`, `recast_delay`, `priority`, `resist_adjust`) VALUES - (1, 701, 200, 2, 1, 3, -1, -1, 1, NULL), - (2, 701, 14, 1, 1, 4, -1, -1, 1, NULL), - (3, 701, 201, 1, 1, 1, -1, -1, 1, NULL), - (4, 701, 202, 8, 1, 6, -1, -1, 10, NULL), - (5, 701, 11, 8, 1, 14, -1, -1, 8, NULL), - (6, 701, 207, 16, 1, 28, -1, -1, 1, NULL), - (7, 701, 216, 1, 2, 15, -1, -1, 1, NULL), - (8, 701, 17, 2, 4, 9, -1, -1, 1, NULL), - (9, 701, 560, 1, 5, 13, -1, -1, 1, NULL), - (10, 701, 219, 8, 7, 16, -1, -1, 10, NULL), - (11, 701, 12, 2, 10, 19, -1, -1, 2, NULL), - (12, 701, 485, 8, 11, 16, -1, -1, 7, NULL), - (13, 701, 16, 1, 14, 28, -1, -1, 1, NULL), - (14, 701, 3575, 8, 15, 34, -1, -1, 6, NULL), - (15, 701, 368, 8, 15, 24, -1, -1, 8, NULL), - (16, 701, 123, 1, 16, 30, -1, -1, 1, NULL), - (17, 701, 89, 8, 17, 20, -1, -1, 10, NULL), - (18, 701, 2502, 2, 19, 28, -1, -1, 1, NULL), - (19, 701, 15, 2, 20, 29, -1, -1, 2, NULL), - (20, 701, 4088, 8, 20, 39, -1, -1, 6, NULL), - (21, 701, 486, 8, 21, 30, -1, -1, 10, NULL), - (22, 701, 18, 8, 25, 34, -1, -1, 9, NULL), - (23, 701, 130, 16, 29, 255, -1, -1, 1, NULL), - (24, 701, 2175, 2, 29, 43, -1, -1, 1, NULL), - (25, 701, 329, 1, 29, 43, -1, -1, 1, NULL), - (26, 701, 9, 2, 30, 38, -1, -1, 2, NULL), - (27, 701, 124, 1, 31, 45, -1, -1, 1, NULL), - (28, 701, 487, 8, 31, 39, -1, -1, 10, NULL), - (29, 701, 3576, 8, 35, 61, -1, -1, 7, NULL), - (30, 701, 19, 8, 35, 39, -1, -1, 8, NULL), - (31, 701, 13, 2, 39, 69, -1, -1, 2, NULL), - (32, 701, 3692, 8, 40, 44, -1, -1, 10, NULL), - (33, 701, 4089, 8, 40, 53, -1, -1, 6, NULL), - (34, 701, 1445, 8, 40, 48, -1, -1, 11, NULL), - (35, 701, 1444, 2, 44, 58, -1, -1, 1, NULL), - (36, 701, 672, 1, 44, 53, -1, -1, 1, NULL), - (37, 701, 4053, 8, 45, 59, -1, -1, 10, NULL), - (38, 701, 125, 1, 46, 57, -1, -1, 1, NULL), - (39, 701, 2505, 8, 49, 57, -1, -1, 11, NULL), - (40, 701, 1547, 8, 51, 59, -1, -1, 9, NULL), - (41, 701, 1543, 1, 54, 55, -1, -1, 1, NULL), - (42, 701, 4090, 8, 54, 61, -1, -1, 6, NULL), - (43, 701, 2508, 1, 56, 61, -1, -1, 1, NULL), - (44, 701, 1544, 1, 58, 60, -1, -1, 1, NULL), - (45, 701, 2509, 8, 58, 59, -1, -1, 11, NULL), - (46, 701, 1522, 2, 59, 59, -1, -1, 1, NULL), - (47, 701, 1546, 8, 60, 255, -1, -1, 9, NULL), - (48, 701, 2109, 8, 60, 64, -1, -1, 11, NULL), - (49, 701, 2122, 8, 60, 61, -1, -1, 10, NULL), - (50, 701, 2180, 2, 60, 61, -1, -1, 1, NULL), - (51, 701, 3481, 1, 61, 62, -1, -1, 1, NULL), - (52, 701, 3467, 8, 62, 64, -1, -1, 10, NULL), - (53, 701, 3472, 8, 62, 63, -1, -1, 7, NULL), - (54, 701, 3475, 2, 62, 64, -1, -1, 1, NULL), - (55, 701, 3476, 1, 62, 64, -1, -1, 1, NULL), - (56, 701, 4091, 8, 62, 66, -1, -1, 6, NULL), - (57, 701, 3482, 1, 63, 65, -1, -1, 1, NULL), - (58, 701, 4108, 8, 64, 66, -1, -1, 7, NULL), - (59, 701, 3474, 8, 65, 69, -1, -1, 11, NULL), - (60, 701, 3479, 8, 65, 66, -1, -1, 10, NULL), - (61, 701, 4882, 2, 65, 66, -1, -1, 1, NULL), - (62, 701, 4973, 1, 65, 66, -1, -1, 1, NULL), - (63, 701, 5254, 1, 66, 67, -1, -1, 1, NULL), - (64, 701, 5257, 8, 67, 69, -1, -1, 10, NULL), - (65, 701, 5258, 8, 67, 68, -1, -1, 7, NULL), - (66, 701, 5259, 2, 67, 255, -1, -1, 1, NULL), - (67, 701, 5260, 1, 67, 68, -1, -1, 1, NULL), - (68, 701, 5261, 8, 67, 255, -1, -1, 6, NULL), - (69, 701, 5266, 1, 68, 255, -1, -1, 1, NULL), - (70, 701, 5272, 8, 69, 255, -1, -1, 7, NULL), - (71, 701, 8006, 1, 69, 69, -1, -1, 1, NULL), - (72, 701, 5276, 8, 70, 255, -1, -1, 11, NULL), - (73, 701, 5278, 8, 70, 255, -1, -1, 10, NULL), - (74, 701, 5279, 1, 70, 255, -1, -1, 1, NULL), - (75, 701, 6140, 2, 70, 255, -1, -1, 2, NULL), - (76, 702, 288, 8, 1, 5, -1, -1, 1, NULL), - (77, 702, 372, 1, 1, 7, -1, -1, 3, NULL), - (78, 702, 378, 8, 2, 9, -1, -1, 2, NULL), - (79, 702, 230, 4, 3, 16, -1, -1, 2, NULL), - (80, 702, 376, 1, 4, 4, -1, -1, 3, NULL), - (81, 702, 477, 1, 5, 14, -1, -1, 3, NULL), - (82, 702, 246, 8, 6, 14, -1, -1, 1, NULL), - (83, 702, 656, 1, 8, 23, -1, -1, 3, NULL), - (84, 702, 381, 8, 9, 60, -1, -1, 4, NULL), - (85, 702, 2551, 8, 10, 30, -1, -1, 2, NULL), - (86, 702, 383, 1, 10, 15, -1, -1, 3, NULL), - (87, 702, 48, 512, 11, 33, -1, -1, 1, NULL), - (88, 702, 236, 8, 13, 20, -1, -1, 5, NULL), - (89, 702, 309, 8, 15, 22, -1, -1, 1, NULL), - (90, 702, 657, 1, 15, 25, -1, -1, 3, NULL), - (91, 702, 38, 1, 16, 36, -1, -1, 3, NULL), - (92, 702, 131, 4, 17, 38, -1, -1, 2, NULL), - (93, 702, 22, 1, 17, 17, -1, -1, 3, NULL), - (94, 702, 2552, 1, 18, 27, -1, -1, 3, NULL), - (95, 702, 503, 1, 19, 46, -1, -1, 2, NULL), - (96, 702, 108, 8, 20, 41, -1, -1, 6, NULL), - (97, 702, 387, 8, 21, 29, -1, -1, 5, NULL), - (98, 702, 65, 8, 23, 32, -1, -1, 1, NULL), - (99, 702, 464, 1, 24, 33, -1, -1, 3, NULL), - (100, 702, 2553, 32, 25, 44, -1, -1, 0, NULL), - (101, 702, 465, 1, 26, 42, -1, -1, 3, NULL), - (102, 702, 470, 1, 28, 40, -1, -1, 3, NULL), - (103, 702, 393, 8, 30, 39, -1, -1, 5, NULL), - (104, 702, 1419, 8, 31, 48, -1, -1, 2, NULL), - (105, 702, 66, 8, 33, 43, -1, -1, 1, NULL), - (106, 702, 49, 512, 34, 52, -1, -1, 1, NULL), - (107, 702, 658, 1, 34, 48, -1, -1, 3, NULL), - (108, 702, 466, 1, 37, 57, -1, -1, 3, NULL), - (109, 702, 752, 16, 37, 59, -1, -1, 1, NULL), - (110, 702, 132, 4, 39, 47, -1, -1, 2, NULL), - (111, 702, 3811, 8, 40, 57, -1, -1, 3, NULL), - (112, 702, 394, 8, 40, 51, -1, -1, 5, NULL), - (113, 702, 23, 1, 41, 46, -1, -1, 3, NULL), - (114, 702, 109, 8, 42, 53, -1, -1, 6, NULL), - (115, 702, 659, 1, 43, 59, -1, -1, 3, NULL), - (116, 702, 67, 8, 44, 53, -1, -1, 1, NULL), - (117, 702, 2555, 32, 45, 53, -1, -1, 0, NULL), - (118, 702, 612, 1, 47, 50, -1, -1, 2, NULL), - (119, 702, 755, 1, 47, 59, -1, -1, 3, NULL), - (120, 702, 133, 4, 48, 50, -1, -1, 2, NULL), - (121, 702, 4067, 8, 49, 56, -1, -1, 2, NULL), - (122, 702, 732, 1, 49, 59, -1, -1, 3, NULL), - (123, 702, 1631, 128, 51, 57, -1, -1, 2, NULL), - (124, 702, 1634, 1, 51, 55, -1, -1, 2, NULL), - (125, 702, 1609, 8, 52, 62, -1, -1, 5, NULL), - (126, 702, 1526, 512, 53, 255, -1, -1, 1, NULL), - (127, 702, 1610, 8, 54, 60, -1, -1, 1, NULL), - (128, 702, 2557, 32, 54, 59, -1, -1, 0, NULL), - (129, 702, 3582, 8, 54, 61, -1, -1, 6, NULL), - (130, 702, 1635, 1, 56, 63, -1, -1, 2, NULL), - (131, 702, 4068, 8, 57, 63, -1, -1, 2, NULL), - (132, 702, 1633, 4, 58, 60, -1, -1, 2, NULL), - (133, 702, 1640, 1, 58, 60, -1, -1, 3, NULL), - (134, 702, 2559, 8, 58, 255, -1, -1, 3, NULL), - (135, 702, 2884, 1, 60, 64, -1, -1, 3, NULL), - (136, 702, 2116, 1, 60, 63, -1, -1, 3, NULL), - (137, 702, 2117, 16, 60, 255, -1, -1, 1, NULL), - (138, 702, 2560, 32, 60, 255, -1, -1, 0, NULL), - (139, 702, 2883, 1, 60, 62, -1, -1, 3, NULL), - (140, 702, 3194, 4, 61, 255, -1, -1, 2, NULL), - (141, 702, 3300, 8, 61, 63, -1, -1, 1, NULL), - (142, 702, 3326, 8, 61, 255, -1, -1, 4, NULL), - (143, 702, 3328, 1, 61, 66, -1, -1, 3, NULL), - (144, 702, 3329, 8, 62, 255, -1, -1, 6, NULL), - (145, 702, 3301, 8, 63, 67, -1, -1, 5, NULL), - (146, 702, 3335, 1, 63, 64, -1, -1, 3, NULL), - (147, 702, 3302, 8, 64, 65, -1, -1, 1, NULL), - (148, 702, 4069, 8, 64, 69, -1, -1, 2, NULL), - (149, 702, 4066, 1, 64, 68, -1, -1, 3, NULL), - (150, 702, 3333, 1, 64, 69, -1, -1, 2, NULL), - (151, 702, 4981, 1, 65, 69, -1, -1, 3, NULL), - (152, 702, 3191, 1, 65, 255, -1, -1, 3, NULL), - (153, 702, 5443, 8, 66, 255, -1, -1, 1, NULL), - (154, 702, 5445, 1, 67, 67, -1, -1, 3, NULL), - (155, 702, 5448, 8, 68, 255, -1, -1, 5, NULL), - (156, 702, 5450, 1, 68, 255, -1, -1, 3, NULL), - (157, 702, 5458, 1, 69, 255, -1, -1, 3, NULL), - (158, 702, 5459, 8, 70, 255, -1, -1, 2, NULL), - (159, 702, 8043, 1, 70, 255, -1, -1, 3, NULL), - (160, 702, 5456, 1, 70, 255, -1, -1, 3, NULL), - (161, 703, 288, 8, 1, 7, -1, -1, 1, NULL), - (162, 703, 340, 256, 1, 14, -1, -1, 2, NULL), - (163, 703, 341, 64, 1, 2, -1, -1, 3, NULL), - (164, 703, 338, 32, 1, 3, -1, -1, 0, NULL), - (165, 703, 346, 8, 3, 15, -1, -1, 3, NULL), - (166, 703, 502, 64, 3, 11, -1, -1, 3, NULL), - (167, 703, 344, 128, 4, 10, -1, -1, 1, NULL), - (168, 703, 229, 1, 4, 29, -1, 45, 6, NULL), - (169, 703, 348, 256, 4, 33, -1, -1, 3, NULL), - (170, 703, 491, 32, 4, 7, -1, -1, 0, NULL), - (171, 703, 641, 8, 6, 17, -1, -1, 4, NULL), - (172, 703, 359, 8, 7, 19, -1, -1, 5, NULL), - (173, 703, 246, 8, 8, 15, -1, -1, 1, NULL), - (174, 703, 351, 32, 8, 11, -1, -1, 0, NULL), - (175, 703, 1509, 256, 9, 28, -1, -1, 3, NULL), - (176, 703, 360, 256, 10, 27, -1, -1, 3, NULL), - (177, 703, 2541, 8, 11, 22, -1, -1, 6, NULL), - (178, 703, 355, 128, 11, 26, -1, -1, 1, NULL), - (179, 703, 362, 32, 12, 15, -1, -1, 0, NULL), - (180, 703, 445, 64, 12, 19, -1, -1, 3, NULL), - (181, 703, 367, 256, 13, 38, -1, -1, 3, NULL), - (182, 703, 236, 8, 14, 21, -1, -1, 2, NULL), - (183, 703, 365, 256, 15, 34, -1, -1, 3, NULL), - (184, 703, 309, 8, 16, 20, -1, -1, 1, NULL), - (185, 703, 492, 32, 16, 19, -1, -1, 0, NULL), - (186, 703, 2542, 1, 17, 37, -1, -1, 2, NULL), - (187, 703, 642, 8, 18, 30, -1, -1, 4, NULL), - (188, 703, 199, 16, 20, 57, -1, -1, 1, NULL), - (189, 703, 440, 32, 20, 23, -1, -1, 0, NULL), - (190, 703, 446, 64, 20, 25, -1, -1, 3, NULL), - (191, 703, 204, 1, 21, 31, -1, -1, 5, NULL), - (192, 703, 387, 8, 22, 31, -1, -1, 2, NULL), - (193, 703, 449, 8, 23, 34, -1, -1, 6, NULL), - (194, 703, 493, 32, 24, 28, -1, -1, 0, NULL), - (195, 703, 524, 64, 26, 38, -1, -1, 3, NULL), - (196, 703, 452, 128, 27, 46, -1, -1, 1, NULL), - (197, 703, 451, 256, 28, 46, -1, -1, 3, NULL), - (198, 703, 441, 32, 29, 32, -1, -1, 0, NULL), - (199, 703, 454, 256, 29, 44, -1, -1, 3, NULL), - (200, 703, 127, 1, 30, 55, -1, 45, 6, NULL), - (201, 703, 643, 8, 31, 47, -1, -1, 4, NULL), - (202, 703, 1415, 1, 32, 48, -1, -1, 5, NULL), - (203, 703, 393, 8, 32, 42, -1, -1, 2, NULL), - (204, 703, 494, 32, 33, 38, -1, -1, 0, NULL), - (205, 703, 435, 256, 34, 49, -1, -1, 3, NULL), - (206, 703, 31, 256, 35, 39, -1, -1, 3, NULL), - (207, 703, 661, 8, 35, 54, -1, -1, 6, NULL), - (208, 703, 2544, 1, 38, 255, -1, -1, 2, NULL), - (209, 703, 442, 32, 39, 43, -1, -1, 0, NULL), - (210, 703, 525, 64, 39, 47, -1, -1, 3, NULL), - (211, 703, 4096, 256, 39, 53, -1, -1, 3, NULL), - (212, 703, 1508, 256, 40, 51, -1, -1, 3, NULL), - (213, 703, 394, 8, 43, 51, -1, -1, 2, NULL), - (214, 703, 495, 32, 44, 47, -1, -1, 0, NULL), - (215, 703, 3702, 256, 45, 48, -1, -1, 3, NULL), - (216, 703, 453, 128, 47, 58, -1, -1, 1, NULL), - (217, 703, 6, 256, 47, 57, -1, -1, 3, NULL), - (218, 703, 443, 32, 48, 52, -1, -1, 0, NULL), - (219, 703, 447, 64, 48, 53, -1, -1, 3, NULL), - (220, 703, 644, 8, 48, 55, -1, -1, 4, NULL), - (221, 703, 3571, 1, 49, 53, -1, -1, 5, NULL), - (222, 703, 456, 256, 49, 56, -1, -1, 3, NULL), - (223, 703, 436, 256, 50, 64, -1, -1, 3, NULL), - (224, 703, 1609, 8, 52, 62, -1, -1, 2, NULL), - (225, 703, 32, 256, 52, 55, -1, -1, 3, NULL), - (226, 703, 1621, 32, 53, 55, -1, -1, 0, NULL), - (227, 703, 3572, 1, 54, 59, -1, -1, 5, NULL), - (228, 703, 1613, 64, 54, 58, -1, -1, 3, NULL), - (229, 703, 4097, 256, 54, 62, -1, -1, 3, NULL), - (230, 703, 1414, 8, 55, 61, -1, -1, 6, NULL), - (231, 703, 1527, 1, 56, 56, -1, 45, 6, NULL), - (232, 703, 1611, 8, 56, 59, -1, -1, 4, NULL), - (233, 703, 1615, 256, 56, 66, -1, -1, 3, NULL), - (234, 703, 1622, 32, 56, 58, -1, -1, 0, NULL), - (235, 703, 1616, 256, 57, 59, -1, -1, 3, NULL), - (236, 703, 6980, 1, 57, 61, -1, -1, 6, NULL), - (237, 703, 1612, 16, 58, 255, -1, -1, 1, NULL), - (238, 703, 1617, 256, 58, 59, -1, -1, 3, NULL), - (239, 703, 1619, 128, 59, 62, -1, -1, 1, NULL), - (240, 703, 1623, 32, 59, 60, -1, -1, 0, NULL), - (241, 703, 1618, 64, 59, 59, -1, -1, 3, NULL), - (242, 703, 1393, 64, 60, 60, -1, -1, 3, NULL), - (243, 703, 2114, 8, 60, 63, -1, -1, 4, NULL), - (244, 703, 2115, 1, 60, 60, -1, -1, 5, NULL), - (245, 703, 2550, 256, 60, 64, -1, -1, 3, NULL), - (246, 703, 2885, 256, 60, 64, -1, -1, 3, NULL), - (247, 703, 3032, 64, 61, 66, -1, -1, 3, NULL), - (248, 703, 3035, 1, 61, 65, -1, -1, 5, NULL), - (249, 703, 3304, 32, 61, 62, -1, -1, 0, NULL), - (250, 703, 3305, 8, 62, 66, -1, -1, 6, NULL), - (251, 703, 6981, 1, 62, 66, -1, -1, 6, NULL), - (252, 703, 3301, 8, 63, 68, -1, -1, 2, NULL), - (253, 703, 3309, 128, 63, 67, -1, -1, 1, NULL), - (254, 703, 3310, 32, 63, 64, -1, -1, 0, NULL), - (255, 703, 4098, 256, 63, 66, -1, -1, 3, NULL), - (256, 703, 3311, 8, 64, 64, -1, -1, 4, NULL), - (257, 703, 3303, 256, 65, 68, -1, -1, 3, NULL), - (258, 703, 3314, 32, 65, 66, -1, -1, 0, NULL), - (259, 703, 4889, 256, 65, 255, -1, -1, 3, NULL), - (260, 703, 4890, 256, 65, 68, -1, -1, 3, NULL), - (261, 703, 4978, 8, 65, 69, -1, -1, 4, NULL), - (262, 703, 5420, 1, 66, 255, -1, -1, 5, NULL), - (263, 703, 5419, 64, 67, 69, -1, -1, 3, NULL), - (264, 703, 5424, 256, 67, 255, -1, -1, 3, NULL), - (265, 703, 5425, 8, 67, 255, -1, -1, 6, NULL), - (266, 703, 5431, 32, 67, 69, -1, -1, 0, NULL), - (267, 703, 5432, 256, 67, 69, -1, -1, 3, NULL), - (268, 703, 6982, 1, 67, 255, -1, -1, 6, NULL), - (269, 703, 5430, 128, 68, 255, -1, -1, 1, NULL), - (270, 703, 5428, 8, 69, 255, -1, -1, 2, NULL), - (271, 703, 5437, 256, 69, 69, -1, -1, 3, NULL), - (272, 703, 7999, 256, 69, 255, -1, -1, 3, NULL), - (273, 703, 5438, 32, 70, 255, -1, -1, 0, NULL), - (274, 703, 5441, 256, 70, 255, -1, -1, 3, NULL), - (275, 703, 6143, 64, 70, 255, -1, -1, 3, NULL), - (276, 703, 7994, 256, 70, 255, -1, -1, 3, NULL), - (277, 703, 5434, 8, 70, 255, -1, -1, 4, NULL), - (278, 704, 288, 8, 1, 4, -1, -1, 1, NULL), - (279, 704, 93, 1, 1, 3, -1, -1, 5, NULL), - (280, 704, 315, 32, 2, 5, -1, -1, 0, NULL), - (281, 704, 316, 32, 3, 6, -1, -1, 0, NULL), - (282, 704, 317, 32, 4, 7, -1, -1, 0, NULL), - (283, 704, 94, 1, 4, 4, -1, -1, 5, NULL), - (284, 704, 58, 32, 5, 8, -1, -1, 0, NULL), - (285, 704, 246, 8, 5, 15, -1, -1, 1, NULL), - (286, 704, 322, 1, 5, 14, -1, -1, 5, NULL), - (287, 704, 398, 32, 6, 9, -1, -1, 0, NULL), - (288, 704, 399, 32, 7, 10, -1, -1, 0, NULL), - (289, 704, 324, 1, 7, 22, -1, -1, 6, NULL), - (290, 704, 332, 8, 7, 18, -1, -1, 2, NULL), - (291, 704, 400, 32, 8, 11, -1, -1, 0, NULL), - (292, 704, 397, 32, 9, 12, -1, -1, 0, NULL), - (293, 704, 248, 1, 9, 17, -1, -1, 3, NULL), - (294, 704, 402, 32, 10, 13, -1, -1, 0, NULL), - (295, 704, 403, 32, 11, 14, -1, -1, 0, NULL), - (296, 704, 327, 8, 11, 28, -1, -1, 3, NULL), - (297, 704, 404, 32, 12, 15, -1, -1, 0, NULL), - (298, 704, 333, 8, 12, 24, -1, -1, 4, NULL), - (299, 704, 401, 32, 13, 16, -1, -1, 0, NULL), - (300, 704, 336, 32, 14, 17, -1, -1, 0, NULL), - (301, 704, 395, 32, 15, 18, -1, -1, 0, NULL), - (302, 704, 334, 1, 15, 17, -1, -1, 5, NULL), - (303, 704, 396, 32, 16, 19, -1, -1, 0, NULL), - (304, 704, 309, 8, 16, 23, -1, -1, 1, NULL), - (305, 704, 335, 32, 17, 20, -1, -1, 0, NULL), - (306, 704, 497, 32, 18, 21, -1, -1, 0, NULL), - (307, 704, 68, 1, 18, 30, -1, -1, 5, NULL), - (308, 704, 663, 1, 18, 24, -1, -1, 3, NULL), - (309, 704, 498, 32, 19, 22, -1, -1, 0, NULL), - (310, 704, 411, 8, 19, 27, -1, -1, 2, NULL), - (311, 704, 499, 32, 20, 23, -1, -1, 0, NULL), - (312, 704, 496, 32, 21, 24, -1, -1, 0, NULL), - (313, 704, 570, 32, 22, 25, -1, -1, 0, NULL), - (314, 704, 571, 32, 23, 26, -1, -1, 0, NULL), - (315, 704, 113, 1, 23, 40, -1, -1, 6, NULL), - (316, 704, 572, 32, 24, 27, -1, -1, 0, NULL), - (317, 704, 65, 8, 24, 31, -1, -1, 1, NULL), - (318, 704, 569, 32, 25, 28, -1, -1, 0, NULL), - (319, 704, 115, 1, 25, 27, -1, -1, 3, NULL), - (320, 704, 81, 8, 25, 40, -1, -1, 4, NULL), - (321, 704, 574, 32, 26, 30, -1, -1, 0, NULL), - (322, 704, 575, 32, 27, 31, -1, -1, 0, NULL), - (323, 704, 576, 32, 28, 32, -1, -1, 0, NULL), - (324, 704, 479, 8, 28, 37, -1, -1, 2, NULL), - (325, 704, 664, 1, 28, 47, -1, -1, 3, NULL), - (326, 704, 106, 8, 28, 46, -1, -1, 3, NULL), - (327, 704, 573, 32, 29, 33, -1, -1, 0, NULL), - (328, 704, 1400, 32, 30, 49, -1, -1, 0, NULL), - (329, 704, 621, 32, 31, 35, -1, -1, 0, NULL), - (330, 704, 120, 1, 31, 32, -1, -1, 5, NULL), - (331, 704, 622, 32, 32, 36, -1, -1, 0, NULL), - (332, 704, 49, 512, 32, 52, -1, -1, 3, NULL), - (333, 704, 66, 8, 32, 42, -1, -1, 1, NULL), - (334, 704, 623, 32, 33, 37, -1, -1, 0, NULL), - (335, 704, 69, 1, 33, 46, -1, -1, 5, NULL), - (336, 704, 620, 32, 34, 38, -1, -1, 0, NULL), - (337, 704, 625, 32, 36, 40, -1, -1, 0, NULL), - (338, 704, 626, 32, 37, 41, -1, -1, 0, NULL), - (339, 704, 627, 32, 38, 42, -1, -1, 0, NULL), - (340, 704, 680, 8, 38, 44, -1, -1, 2, NULL), - (341, 704, 624, 32, 39, 43, -1, -1, 0, NULL), - (342, 704, 629, 32, 41, 48, -1, -1, 0, NULL), - (343, 704, 114, 1, 41, 56, -1, -1, 6, NULL), - (344, 704, 82, 8, 41, 51, -1, -1, 4, NULL), - (345, 704, 630, 32, 42, 46, -1, -1, 0, NULL), - (346, 704, 631, 32, 43, 47, -1, -1, 0, NULL), - (347, 704, 1403, 1, 43, 54, -1, -1, 4, NULL), - (348, 704, 67, 8, 43, 53, -1, -1, 1, NULL), - (349, 704, 628, 32, 44, 45, -1, -1, 0, NULL), - (350, 704, 412, 8, 45, 52, -1, -1, 2, NULL), - (351, 704, 632, 32, 46, 50, -1, -1, 0, NULL), - (352, 704, 4079, 8, 46, 57, -1, -1, 5, NULL), - (353, 704, 634, 32, 47, 51, -1, -1, 0, NULL), - (354, 704, 107, 8, 47, 51, -1, -1, 3, NULL), - (355, 704, 70, 1, 47, 51, -1, -1, 5, NULL), - (356, 704, 635, 32, 48, 52, -1, -1, 0, NULL), - (357, 704, 116, 1, 48, 55, -1, -1, 3, NULL), - (358, 704, 633, 32, 49, 53, -1, -1, 0, NULL), - (359, 704, 1402, 32, 50, 59, -1, -1, 0, NULL), - (360, 704, 1671, 32, 51, 56, -1, -1, 0, NULL), - (361, 704, 1673, 32, 52, 57, -1, -1, 0, NULL), - (362, 704, 1660, 1, 52, 58, -1, -1, 5, NULL), - (363, 704, 1666, 8, 52, 53, -1, -1, 4, NULL), - (364, 704, 3700, 8, 52, 54, -1, -1, 3, NULL), - (365, 704, 1674, 32, 53, 58, -1, -1, 0, NULL), - (366, 704, 1526, 512, 53, 255, -1, -1, 3, NULL), - (367, 704, 1668, 8, 53, 55, -1, -1, 2, NULL), - (368, 704, 1672, 32, 54, 59, -1, -1, 0, NULL), - (369, 704, 1610, 8, 54, 60, -1, -1, 1, NULL), - (370, 704, 2879, 8, 54, 57, -1, -1, 4, NULL), - (371, 704, 1405, 1, 55, 255, -1, -1, 4, NULL), - (372, 704, 1472, 8, 55, 59, -1, -1, 3, NULL), - (373, 704, 1529, 1, 56, 63, -1, -1, 3, NULL), - (374, 704, 1667, 8, 56, 59, -1, -1, 2, NULL), - (375, 704, 1675, 32, 57, 64, -1, -1, 0, NULL), - (376, 704, 1663, 1, 57, 62, -1, -1, 6, NULL), - (377, 704, 1677, 32, 58, 62, -1, -1, 0, NULL), - (378, 704, 2539, 8, 58, 61, -1, -1, 4, NULL), - (379, 704, 4080, 8, 58, 63, -1, -1, 5, NULL), - (380, 704, 1678, 32, 59, 60, -1, -1, 0, NULL), - (381, 704, 1664, 1, 59, 60, -1, -1, 5, NULL), - (382, 704, 1404, 32, 60, 64, -1, -1, 0, NULL), - (383, 704, 1676, 32, 60, 61, -1, -1, 0, NULL), - (384, 704, 1669, 8, 60, 60, -1, -1, 2, NULL), - (385, 704, 2119, 8, 60, 61, -1, -1, 3, NULL), - (386, 704, 3317, 32, 61, 65, -1, -1, 0, NULL), - (387, 704, 3198, 8, 61, 62, -1, -1, 2, NULL), - (388, 704, 3300, 8, 61, 63, -1, -1, 1, NULL), - (389, 704, 3318, 1, 61, 65, -1, -1, 5, NULL), - (390, 704, 3320, 32, 62, 66, -1, -1, 0, NULL), - (391, 704, 3031, 8, 62, 67, -1, -1, 4, NULL), - (392, 704, 3237, 8, 62, 68, -1, -1, 3, NULL), - (393, 704, 3322, 32, 63, 67, -1, -1, 0, NULL), - (394, 704, 3486, 8, 63, 65, -1, -1, 2, NULL), - (395, 704, 3321, 1, 63, 67, -1, -1, 6, NULL), - (396, 704, 3238, 1, 64, 68, -1, -1, 3, NULL), - (397, 704, 3302, 8, 64, 65, -1, -1, 1, NULL), - (398, 704, 4081, 8, 64, 68, -1, -1, 5, NULL), - (399, 704, 4888, 32, 65, 255, -1, -1, 0, NULL), - (400, 704, 3324, 32, 65, 69, -1, -1, 0, NULL), - (401, 704, 5473, 32, 66, 255, -1, -1, 0, NULL), - (402, 704, 5466, 8, 66, 69, -1, -1, 2, NULL), - (403, 704, 5472, 8, 66, 255, -1, -1, 1, NULL), - (404, 704, 5474, 1, 66, 255, -1, -1, 5, NULL), - (405, 704, 5480, 32, 67, 255, -1, -1, 0, NULL), - (406, 704, 5485, 32, 68, 255, -1, -1, 0, NULL), - (407, 704, 5476, 8, 68, 255, -1, -1, 4, NULL), - (408, 704, 5484, 1, 68, 255, -1, -1, 6, NULL), - (409, 704, 5478, 8, 69, 255, -1, -1, 3, NULL), - (410, 704, 5490, 1, 69, 255, -1, -1, 3, NULL), - (411, 704, 5494, 8, 69, 255, -1, -1, 5, NULL), - (412, 704, 5495, 32, 70, 255, -1, -1, 0, NULL), - (413, 704, 5488, 8, 70, 255, -1, -1, 2, NULL), - (414, 705, 288, 8, 1, 5, -1, -1, 1, NULL), - (415, 705, 40, 8, 1, 18, -1, -1, 2, NULL), - (416, 705, 289, 1, 1, 6, -1, -1, 7, NULL), - (417, 705, 286, 1, 1, 3, -1, -1, 6, NULL), - (418, 705, 285, 32, 1, 1, -1, -1, 0, NULL), - (419, 705, 681, 32, 2, 6, -1, -1, 0, NULL), - (420, 705, 294, 1, 4, 10, -1, -1, 6, NULL), - (421, 705, 246, 8, 6, 15, -1, -1, 1, NULL), - (422, 705, 295, 32, 7, 8, -1, -1, 0, NULL), - (423, 705, 296, 1, 7, 15, -1, -1, 7, NULL), - (424, 705, 48, 512, 7, 21, -1, -1, 7, NULL), - (425, 705, 302, 1, 9, 22, -1, -1, 2, NULL), - (426, 705, 303, 1, 9, 27, -1, -1, 5, NULL), - (427, 705, 682, 32, 9, 13, -1, -1, 0, NULL), - (428, 705, 2561, 8, 11, 16, -1, -1, 4, NULL), - (429, 705, 521, 1, 11, 25, -1, -1, 6, NULL), - (430, 705, 683, 32, 14, 16, -1, -1, 0, NULL), - (431, 705, 697, 8, 14, 25, -1, -1, 5, NULL), - (432, 705, 39, 8, 15, 20, -1, -1, 6, NULL), - (433, 705, 309, 8, 16, 22, -1, -1, 1, NULL), - (434, 705, 306, 1, 16, 20, -1, -1, 7, NULL), - (435, 705, 2562, 8, 17, 29, -1, -1, 4, NULL), - (436, 705, 684, 32, 17, 21, -1, -1, 0, NULL), - (437, 705, 170, 8, 21, 38, -1, -1, 6, NULL), - (438, 705, 350, 1, 21, 31, -1, -1, 7, NULL), - (439, 705, 24, 512, 22, 27, -1, -1, 7, NULL), - (440, 705, 685, 32, 22, 28, -1, -1, 0, NULL), - (441, 705, 185, 1, 23, 40, -1, -1, 2, NULL), - (442, 705, 65, 8, 23, 30, -1, -1, 1, NULL), - (443, 705, 174, 8, 26, 41, -1, -1, 5, NULL), - (444, 705, 450, 1, 26, 46, -1, -1, 6, NULL), - (445, 705, 49, 512, 28, 41, -1, -1, 7, NULL), - (446, 705, 619, 1, 28, 60, -1, -1, 5, NULL), - (447, 705, 4073, 8, 29, 43, -1, -1, 2, NULL), - (448, 705, 686, 32, 29, 30, -1, -1, 0, NULL), - (449, 705, 74, 1, 30, 49, -1, -1, 7, NULL), - (450, 705, 66, 8, 31, 39, -1, -1, 1, NULL), - (451, 705, 687, 32, 31, 36, -1, -1, 0, NULL), - (452, 705, 71, 1, 32, 42, -1, -1, 7, NULL), - (453, 705, 1408, 8, 34, 54, -1, -1, 3, NULL), - (454, 705, 688, 32, 37, 40, -1, -1, 0, NULL), - (455, 705, 171, 8, 39, 46, -1, -1, 7, NULL), - (456, 705, 1474, 8, 40, 62, -1, -1, 1, NULL), - (457, 705, 186, 1, 41, 56, -1, -1, 2, NULL), - (458, 705, 689, 32, 41, 47, -1, -1, 0, NULL), - (459, 705, 1694, 8, 42, 51, -1, -1, 5, NULL), - (460, 705, 25, 512, 42, 52, -1, -1, 7, NULL), - (461, 705, 673, 1, 43, 53, -1, -1, 7, NULL), - (462, 705, 4074, 1, 44, 54, -1, -1, 2, NULL), - (463, 705, 172, 8, 47, 52, -1, -1, 6, NULL), - (464, 705, 195, 1, 47, 58, -1, -1, 6, NULL), - (465, 705, 690, 32, 48, 54, -1, -1, 0, NULL), - (466, 705, 1686, 1, 50, 255, -1, -1, 7, NULL), - (467, 705, 1693, 8, 52, 55, -1, -1, 5, NULL), - (468, 705, 1697, 512, 53, 255, -1, -1, 7, NULL), - (469, 705, 1708, 8, 53, 57, -1, -1, 6, NULL), - (470, 705, 1698, 1, 54, 255, -1, -1, 7, NULL), - (471, 705, 1723, 32, 55, 61, -1, -1, 0, NULL), - (472, 705, 4075, 8, 55, 62, -1, -1, 2, NULL), - (473, 705, 1409, 8, 55, 59, -1, -1, 3, NULL), - (474, 705, 1695, 8, 56, 59, -1, -1, 5, NULL), - (475, 705, 1712, 1, 57, 68, -1, -1, 2, NULL), - (476, 705, 1709, 8, 58, 59, -1, -1, 6, NULL), - (477, 705, 1703, 1, 59, 61, -1, -1, 6, NULL), - (478, 705, 1710, 8, 60, 61, -1, -1, 6, NULL), - (479, 705, 2570, 8, 60, 62, -1, -1, 5, NULL), - (480, 705, 6739, 8, 61, 66, -1, -1, 4, NULL), - (481, 705, 3199, 8, 61, 65, -1, -1, 3, NULL), - (482, 705, 3229, 16, 61, 255, -1, -1, 1, NULL), - (483, 705, 3034, 32, 62, 65, -1, -1, 0, NULL), - (484, 705, 3240, 8, 62, 64, -1, -1, 6, NULL), - (485, 705, 3345, 1, 62, 68, -1, -1, 6, NULL), - (486, 705, 3350, 8, 63, 64, -1, -1, 5, NULL), - (487, 705, 4076, 8, 63, 67, -1, -1, 2, NULL), - (488, 705, 3241, 8, 63, 255, -1, -1, 1, NULL), - (489, 705, 3178, 8, 65, 66, -1, -1, 6, NULL), - (490, 705, 3360, 8, 65, 67, -1, -1, 5, NULL), - (491, 705, 5500, 8, 66, 255, -1, -1, 3, NULL), - (492, 705, 5505, 32, 66, 255, -1, -1, 0, NULL), - (493, 705, 5504, 8, 67, 68, -1, -1, 4, NULL), - (494, 705, 5507, 8, 67, 69, -1, -1, 6, NULL), - (495, 705, 5513, 8, 68, 69, -1, -1, 5, NULL), - (496, 705, 5515, 8, 68, 69, -1, -1, 2, NULL), - (497, 705, 5509, 1, 69, 255, -1, -1, 6, NULL), - (498, 705, 6671, 8, 69, 255, -1, -1, 4, NULL), - (499, 705, 6826, 1, 69, 255, -1, -1, 2, NULL), - (500, 705, 5517, 8, 70, 255, -1, -1, 2, NULL), - (501, 705, 5521, 8, 70, 255, -1, -1, 6, NULL), - (502, 705, 5522, 8, 70, 255, -1, -1, 5, NULL), - (503, 706, 266, 8, 1, 20, -1, -1, 1, NULL), - (504, 706, 40, 8, 1, 7, -1, -1, 2, NULL), - (505, 706, 267, 8, 1, 31, -1, -1, 3, NULL), - (506, 706, 93, 1, 1, 3, -1, -1, 1, NULL), - (507, 706, 200, 2, 1, 18, -1, -1, 2, NULL), - (508, 706, 274, 8, 3, 10, -1, -1, 9, NULL), - (509, 706, 269, 8, 3, 17, -1, -1, 10, NULL), - (510, 706, 275, 1, 4, 13, -1, -1, 5, NULL), - (511, 706, 75, 256, 4, 14, -1, -1, 4, NULL), - (512, 706, 270, 256, 5, 12, -1, -1, 2, NULL), - (513, 706, 279, 8, 6, 21, -1, -1, 11, NULL), - (514, 706, 2521, 8, 8, 17, -1, -1, 2, NULL), - (515, 706, 277, 256, 8, 23, -1, -1, 4, NULL), - (516, 706, 17, 2, 9, 18, -1, -1, 2, NULL), - (517, 706, 283, 8, 11, 19, -1, -1, 9, NULL), - (518, 706, 281, 1, 12, 28, -1, -1, 3, NULL), - (519, 706, 505, 1, 13, 26, -1, -1, 2, NULL), - (520, 706, 365, 256, 15, 18, -1, -1, 4, NULL), - (521, 706, 282, 1, 14, 22, -1, -1, 5, NULL), - (522, 706, 526, 1, 17, 37, -1, -1, 4, NULL), - (523, 706, 110, 1, 18, 31, -1, -1, 1, NULL), - (524, 706, 147, 8, 18, 27, -1, -1, 2, NULL), - (525, 706, 148, 8, 18, 30, -1, -1, 10, NULL), - (526, 706, 12, 2, 19, 28, -1, -1, 2, NULL), - (527, 706, 511, 256, 19, 30, -1, -1, 4, NULL), - (528, 706, 649, 8, 20, 25, -1, -1, 9, NULL), - (529, 706, 146, 8, 21, 24, -1, -1, 1, NULL), - (530, 706, 149, 8, 21, 29, -1, -1, 11, NULL), - (531, 706, 144, 8, 23, 38, -1, -1, 12, NULL), - (532, 706, 508, 1, 23, 32, -1, -1, 5, NULL), - (533, 706, 434, 256, 24, 36, -1, -1, 4, NULL), - (534, 706, 349, 8, 25, 38, -1, -1, 1, NULL), - (535, 706, 39, 8, 26, 41, -1, -1, 9, NULL), - (536, 706, 506, 1, 27, 37, -1, -1, 2, NULL), - (537, 706, 151, 8, 28, 34, -1, -1, 2, NULL), - (538, 706, 15, 2, 29, 50, -1, -1, 2, NULL), - (539, 706, 162, 1, 29, 40, -1, -1, 3, NULL), - (540, 706, 161, 8, 30, 42, -1, -1, 11, NULL), - (541, 706, 160, 8, 31, 40, -1, -1, 10, NULL), - (542, 706, 31, 256, 31, 48, -1, -1, 4, NULL), - (543, 706, 111, 1, 32, 47, -1, -1, 1, NULL), - (544, 706, 164, 32, 32, 36, -1, -1, 0, NULL), - (545, 706, 1428, 8, 35, 38, -1, -1, 2, NULL), - (546, 706, 435, 256, 37, 48, -1, -1, 4, NULL), - (547, 706, 577, 32, 37, 40, -1, -1, 0, NULL), - (548, 706, 507, 1, 38, 50, -1, -1, 2, NULL), - (549, 706, 527, 1, 38, 51, -1, -1, 4, NULL), - (550, 706, 145, 8, 39, 51, -1, -1, 12, NULL), - (551, 706, 152, 8, 39, 47, -1, -1, 1, NULL), - (552, 706, 153, 8, 39, 45, -1, -1, 2, NULL), - (553, 706, 154, 8, 41, 52, -1, -1, 10, NULL), - (554, 706, 163, 1, 41, 52, -1, -1, 3, NULL), - (555, 706, 165, 32, 41, 44, -1, -1, 0, NULL), - (556, 706, 170, 8, 42, 55, -1, -1, 9, NULL), - (557, 706, 158, 8, 43, 53, -1, -1, 11, NULL), - (558, 706, 3694, 1024, 44, 59, -1, -1, 5, NULL), - (559, 706, 754, 1024, 44, 53, -1, -1, 6, NULL), - (560, 706, 166, 32, 45, 54, -1, -1, 0, NULL), - (561, 706, 159, 8, 46, 56, -1, -1, 2, NULL), - (562, 706, 112, 1, 48, 56, -1, -1, 1, NULL), - (563, 706, 157, 8, 48, 57, -1, -1, 1, NULL), - (564, 706, 32, 256, 49, 58, -1, -1, 4, NULL), - (565, 706, 436, 256, 49, 55, -1, -1, 4, NULL), - (566, 706, 1588, 1, 51, 64, -1, -1, 2, NULL), - (567, 706, 9, 2, 51, 54, -1, -1, 2, NULL), - (568, 706, 1568, 8, 52, 55, -1, -1, 12, NULL), - (569, 706, 1573, 1, 52, 62, -1, -1, 4, NULL), - (570, 706, 1592, 1, 53, 65, -1, -1, 3, NULL), - (571, 706, 1594, 8, 53, 56, -1, -1, 10, NULL), - (572, 706, 1595, 8, 54, 56, -1, -1, 11, NULL), - (573, 706, 1572, 1024, 54, 57, -1, -1, 6, NULL), - (574, 706, 1290, 2, 55, 57, -1, -1, 3, NULL), - (575, 706, 1574, 32, 55, 60, -1, -1, 0, NULL), - (576, 706, 171, 8, 56, 62, -1, -1, 9, NULL), - (577, 706, 2528, 8, 56, 60, -1, -1, 12, NULL), - (578, 706, 1590, 256, 56, 59, -1, -1, 4, NULL), - (579, 706, 1580, 8, 57, 61, -1, -1, 11, NULL), - (580, 706, 1577, 1, 57, 59, -1, -1, 1, NULL), - (581, 706, 1593, 8, 57, 57, -1, -1, 2, NULL), - (582, 706, 1579, 8, 57, 60, -1, -1, 10, NULL), - (583, 706, 1596, 8, 58, 58, -1, -1, 1, NULL), - (584, 706, 1581, 8, 58, 59, -1, -1, 2, NULL), - (585, 706, 1332, 1024, 58, 64, -1, -1, 6, NULL), - (586, 706, 1583, 8, 59, 59, -1, -1, 1, NULL), - (587, 706, 1591, 256, 59, 63, -1, -1, 4, NULL), - (588, 706, 2112, 8, 60, 64, -1, -1, 2, NULL), - (589, 706, 2530, 8, 60, 61, -1, -1, 1, NULL), - (590, 706, 2113, 256, 60, 64, -1, -1, 4, NULL), - (591, 706, 1578, 1, 60, 62, -1, -1, 1, NULL), - (592, 706, 1576, 1024, 60, 64, -1, -1, 5, NULL), - (593, 706, 3378, 8, 61, 61, -1, -1, 10, NULL), - (594, 706, 3433, 8, 61, 62, -1, -1, 12, NULL), - (595, 706, 3377, 32, 61, 66, -1, -1, 0, NULL), - (596, 706, 3235, 8, 62, 64, -1, -1, 1, NULL), - (597, 706, 3383, 8, 62, 67, -1, -1, 10, NULL), - (598, 706, 3382, 8, 62, 62, -1, -1, 11, NULL), - (599, 706, 3233, 2, 62, 64, -1, -1, 2, NULL), - (600, 706, 172, 8, 63, 63, -1, -1, 9, NULL), - (601, 706, 3389, 8, 63, 67, -1, -1, 11, NULL), - (602, 706, 3441, 8, 63, 65, -1, -1, 12, NULL), - (603, 706, 3386, 1, 63, 65, -1, -1, 4, NULL), - (604, 706, 3387, 1, 63, 64, -1, -1, 1, NULL), - (605, 706, 3391, 8, 64, 255, -1, -1, 9, NULL), - (606, 706, 3394, 256, 64, 66, -1, -1, 4, NULL), - (607, 706, 3397, 8, 65, 67, -1, -1, 1, NULL), - (608, 706, 3399, 8, 65, 69, -1, -1, 2, NULL), - (609, 706, 3396, 256, 65, 69, -1, -1, 4, NULL), - (610, 706, 4900, 1, 65, 68, -1, -1, 2, NULL), - (611, 706, 3395, 1, 65, 255, -1, -1, 1, NULL), - (612, 706, 4901, 2, 65, 67, -1, -1, 2, NULL), - (613, 706, 4899, 1024, 65, 69, -1, -1, 5, NULL), - (614, 706, 4979, 1024, 65, 69, -1, -1, 6, NULL), - (615, 706, 5393, 8, 66, 68, -1, -1, 12, NULL), - (616, 706, 5394, 1, 66, 255, -1, -1, 3, NULL), - (617, 706, 5392, 1, 66, 255, -1, -1, 4, NULL), - (618, 706, 5411, 256, 67, 255, -1, -1, 4, NULL), - (619, 706, 5389, 32, 67, 255, -1, -1, 0, NULL), - (620, 706, 5396, 8, 68, 69, -1, -1, 1, NULL), - (621, 706, 5398, 8, 68, 68, -1, -1, 11, NULL), - (622, 706, 5395, 2, 68, 69, -1, -1, 2, NULL), - (623, 706, 5399, 8, 68, 255, -1, -1, 10, NULL), - (624, 706, 5405, 8, 69, 255, -1, -1, 11, NULL), - (625, 706, 5406, 8, 69, 255, -1, -1, 12, NULL), - (626, 706, 6827, 1, 69, 255, -1, -1, 2, NULL), - (627, 706, 5416, 1024, 70, 255, -1, -1, 5, NULL), - (628, 706, 5418, 1024, 70, 255, -1, -1, 6, NULL), - (629, 706, 5415, 8, 70, 255, -1, -1, 1, NULL), - (630, 706, 5417, 8, 70, 255, -1, -1, 2, NULL), - (631, 706, 5414, 256, 70, 255, -1, -1, 4, NULL), - (632, 706, 6142, 2, 70, 255, -1, -1, 2, NULL), - (633, 707, 239, 256, 1, 24, -1, -1, 2, NULL), - (634, 707, 242, 128, 1, 25, -1, -1, 1, NULL), - (635, 707, 93, 1, 1, 2, -1, -1, 3, NULL), - (636, 707, 200, 2, 1, 8, -1, -1, 2, NULL), - (637, 707, 248, 1, 2, 12, -1, -1, 2, NULL), - (638, 707, 253, 1, 3, 15, -1, -1, 3, NULL), - (639, 707, 92, 1, 3, 7, -1, -1, 3, NULL), - (640, 707, 256, 8, 7, 16, -1, -1, 1, NULL), - (641, 707, 515, 8, 7, 16, -1, -1, 8, NULL), - (642, 707, 91, 1, 8, 27, -1, -1, 3, NULL), - (643, 707, 17, 2, 9, 18, -1, -1, 2, NULL), - (644, 707, 264, 256, 10, 31, -1, -1, 2, NULL), - (645, 707, 663, 1, 13, 22, -1, -1, 2, NULL), - (646, 707, 520, 1, 16, 29, -1, -1, 3, NULL), - (647, 707, 273, 8, 17, 26, -1, -1, 1, NULL), - (648, 707, 516, 8, 17, 26, -1, -1, 8, NULL), - (649, 707, 12, 2, 19, 28, -1, -1, 2, NULL), - (650, 707, 115, 1, 23, 32, -1, -1, 2, NULL), - (651, 707, 99, 256, 24, 33, -1, -1, 2, NULL), - (652, 707, 78, 256, 25, 36, -1, -1, 2, NULL), - (653, 707, 512, 128, 26, 60, -1, -1, 1, NULL), - (654, 707, 129, 8, 27, 36, -1, -1, 1, NULL), - (655, 707, 517, 8, 27, 36, -1, -1, 8, NULL), - (656, 707, 217, 1, 28, 37, -1, -1, 3, NULL), - (657, 707, 15, 2, 29, 43, -1, -1, 2, NULL), - (658, 707, 1439, 1, 30, 55, -1, -1, 3, NULL), - (659, 707, 259, 256, 32, 39, -1, -1, 2, NULL), - (660, 707, 664, 1, 33, 42, -1, -1, 2, NULL), - (661, 707, 144, 8, 34, 38, -1, -1, 7, NULL), - (662, 707, 1437, 256, 37, 60, -1, -1, 2, NULL), - (663, 707, 432, 8, 37, 46, -1, -1, 1, NULL), - (664, 707, 518, 8, 37, 46, -1, -1, 8, NULL), - (665, 707, 57, 1, 38, 47, -1, -1, 3, NULL), - (666, 707, 137, 8, 39, 41, -1, -1, 7, NULL), - (667, 707, 665, 256, 40, 52, -1, -1, 2, NULL), - (668, 707, 427, 8, 40, 53, -1, -1, 9, NULL), - (669, 707, 1436, 256, 42, 61, -1, -1, 2, NULL), - (670, 707, 145, 8, 42, 44, -1, -1, 7, NULL), - (671, 707, 116, 1, 43, 54, -1, -1, 2, NULL), - (672, 707, 3834, 2, 44, 50, -1, -1, 2, NULL), - (673, 707, 138, 8, 45, 53, -1, -1, 7, NULL), - (674, 707, 29, 1, 47, 54, -1, -1, 3, NULL), - (675, 707, 356, 8, 47, 48, -1, -1, 1, NULL), - (676, 707, 519, 8, 47, 55, -1, -1, 8, NULL), - (677, 707, 671, 1, 48, 53, -1, -1, 3, NULL), - (678, 707, 1727, 8, 49, 57, -1, -1, 1, NULL), - (679, 707, 4104, 256, 49, 255, -1, -1, 2, NULL), - (680, 707, 1562, 8, 54, 59, -1, -1, 9, NULL), - (681, 707, 9, 2, 51, 54, -1, -1, 2, NULL), - (682, 707, 1600, 256, 52, 61, -1, -1, 2, NULL), - (683, 707, 1601, 256, 53, 62, -1, -1, 2, NULL), - (684, 707, 1568, 8, 54, 57, -1, -1, 7, NULL), - (685, 707, 1603, 1, 54, 58, -1, -1, 3, NULL), - (686, 707, 1290, 2, 55, 59, -1, -1, 2, NULL), - (687, 707, 1529, 1, 55, 64, -1, -1, 2, NULL), - (688, 707, 1605, 1, 55, 59, -1, -1, 3, NULL), - (689, 707, 4105, 256, 55, 255, -1, -1, 2, NULL), - (690, 707, 1558, 8, 56, 63, -1, -1, 8, NULL), - (691, 707, 1604, 1, 56, 60, -1, -1, 3, NULL), - (692, 707, 1560, 8, 58, 58, -1, -1, 1, NULL), - (693, 707, 1569, 8, 58, 59, -1, -1, 7, NULL), - (694, 707, 1561, 8, 59, 59, -1, -1, 1, NULL), - (695, 707, 1607, 1, 59, 59, -1, -1, 3, NULL), - (696, 707, 1563, 8, 60, 255, -1, -1, 9, NULL), - (697, 707, 1291, 2, 60, 62, -1, -1, 2, NULL), - (698, 707, 2125, 8, 60, 62, -1, -1, 1, NULL), - (699, 707, 2126, 1, 60, 63, -1, -1, 3, NULL), - (700, 707, 2520, 8, 60, 60, -1, -1, 7, NULL), - (701, 707, 2877, 1, 60, 64, -1, -1, 3, NULL), - (702, 707, 3433, 8, 61, 62, -1, -1, 7, NULL), - (703, 707, 3434, 1, 61, 65, -1, -1, 3, NULL), - (704, 707, 5572, 128, 61, 68, -1, -1, 1, NULL), - (705, 707, 3437, 256, 62, 63, -1, -1, 2, NULL), - (706, 707, 3440, 256, 62, 64, -1, -1, 2, NULL), - (707, 707, 3441, 8, 63, 65, -1, -1, 7, NULL), - (708, 707, 3443, 2, 63, 65, -1, -1, 2, NULL), - (709, 707, 3446, 256, 63, 67, -1, -1, 2, NULL), - (710, 707, 3448, 8, 63, 64, -1, -1, 1, NULL), - (711, 707, 3444, 8, 64, 255, -1, -1, 8, NULL), - (712, 707, 3449, 1, 64, 64, -1, -1, 3, NULL), - (713, 707, 4106, 256, 64, 255, -1, -1, 2, NULL), - (714, 707, 3238, 1, 65, 67, -1, -1, 2, NULL), - (715, 707, 3295, 8, 65, 66, -1, -1, 1, NULL), - (716, 707, 4974, 1, 65, 66, -1, -1, 3, NULL), - (717, 707, 4883, 2, 65, 67, -1, -1, 2, NULL), - (718, 707, 4884, 1, 65, 68, -1, -1, 3, NULL), - (719, 707, 4885, 256, 65, 66, -1, -1, 2, NULL), - (720, 707, 5342, 8, 66, 68, -1, -1, 7, NULL), - (721, 707, 5343, 1, 66, 255, -1, -1, 3, NULL), - (722, 707, 5348, 1, 67, 255, -1, -1, 3, NULL), - (723, 707, 5358, 8, 67, 69, -1, -1, 1, NULL), - (724, 707, 5355, 2, 68, 69, -1, -1, 2, NULL), - (725, 707, 5357, 256, 68, 255, -1, -1, 2, NULL), - (726, 707, 8008, 1, 68, 255, -1, -1, 1, NULL), - (727, 707, 5353, 8, 69, 255, -1, -1, 7, NULL), - (728, 707, 5361, 1, 69, 255, -1, -1, 3, NULL), - (729, 707, 6665, 128, 69, 255, -1, -1, 1, NULL), - (730, 707, 5365, 8, 70, 255, -1, -1, 1, NULL), - (731, 707, 6141, 2, 70, 255, -1, -1, 2, NULL), - (732, 708, 5011, 2, 1, 5, -1, -1, 2, NULL), - (733, 708, 200, 2, 6, 11, -1, -1, 2, NULL), - (734, 708, 2581, 1, 7, 12, -1, -1, 3, NULL), - (735, 708, 202, 8, 8, 19, -1, -1, 1, NULL), - (736, 708, 17, 2, 12, 26, -1, -1, 2, NULL), - (737, 708, 2582, 1, 13, 27, -1, -1, 3, NULL), - (738, 708, 218, 1, 14, 29, -1, -1, 2, NULL), - (739, 708, 11, 8, 15, 29, -1, -1, 2, NULL), - (740, 708, 219, 8, 20, 36, -1, -1, 1, NULL), - (741, 708, 485, 8, 24, 32, -1, -1, 3, NULL), - (742, 708, 2583, 8, 26, 62, -1, -1, 5, NULL), - (743, 708, 12, 2, 27, 35, -1, -1, 2, NULL), - (744, 708, 216, 1, 28, 41, -1, -1, 3, NULL), - (745, 708, 233, 1, 30, 45, -1, -1, 2, NULL), - (746, 708, 368, 8, 30, 38, -1, -1, 2, NULL), - (747, 708, 486, 8, 33, 45, -1, -1, 3, NULL), - (748, 708, 2584, 8, 35, 48, -1, -1, 4, NULL), - (749, 708, 15, 2, 36, 51, -1, -1, 2, NULL), - (750, 708, 89, 8, 37, 46, -1, -1, 1, NULL), - (751, 708, 18, 8, 39, 47, -1, -1, 2, NULL), - (752, 708, 123, 1, 42, 51, -1, -1, 3, NULL), - (753, 708, 2585, 8, 44, 255, -1, -1, 7, NULL), - (754, 708, 3683, 2, 44, 58, -1, -1, 1, NULL), - (755, 708, 117, 1, 46, 53, -1, -1, 2, NULL), - (756, 708, 487, 8, 46, 57, -1, -1, 3, NULL), - (757, 708, 312, 8, 47, 59, -1, -1, 1, NULL), - (758, 708, 19, 8, 48, 59, -1, -1, 2, NULL), - (759, 708, 207, 16, 48, 255, -1, -1, 1, NULL), - (760, 708, 3578, 8, 49, 52, -1, -1, 4, NULL), - (761, 708, 124, 1, 52, 52, -1, -1, 3, NULL), - (762, 708, 3684, 2, 52, 56, -1, -1, 2, NULL), - (763, 708, 1288, 8, 53, 59, -1, -1, 4, NULL), - (764, 708, 3975, 1, 53, 53, -1, -1, 3, NULL), - (765, 708, 2587, 1, 54, 61, -1, -1, 3, NULL), - (766, 708, 662, 1, 54, 61, -1, -1, 2, NULL), - (767, 708, 1743, 8, 55, 255, -1, -1, 2, NULL), - (768, 708, 9, 2, 57, 60, -1, -1, 2, NULL), - (769, 708, 488, 8, 58, 62, -1, -1, 3, NULL), - (770, 708, 1283, 2, 59, 63, -1, -1, 1, NULL), - (771, 708, 2590, 8, 60, 64, -1, -1, 4, NULL), - (772, 708, 314, 8, 60, 60, -1, -1, 1, NULL), - (773, 708, 20, 8, 60, 64, -1, -1, 2, NULL), - (774, 708, 1533, 8, 61, 63, -1, -1, 1, NULL), - (775, 708, 3429, 2, 61, 62, -1, -1, 2, NULL), - (776, 708, 3245, 1, 62, 63, -1, -1, 3, NULL), - (777, 708, 3428, 1, 62, 66, -1, -1, 2, NULL), - (778, 708, 3430, 2, 63, 64, -1, -1, 2, NULL), - (779, 708, 1535, 8, 63, 64, -1, -1, 3, NULL), - (780, 708, 3424, 8, 63, 64, -1, -1, 5, NULL), - (781, 708, 1538, 8, 64, 64, -1, -1, 1, NULL), - (782, 708, 3426, 1, 64, 64, -1, -1, 3, NULL), - (783, 708, 3247, 8, 64, 68, -1, -1, 9, NULL), - (784, 708, 2589, 2, 64, 255, -1, -1, 2, NULL), - (785, 708, 4894, 2, 65, 67, -1, -1, 2, NULL), - (786, 708, 3432, 8, 65, 69, -1, -1, 4, NULL), - (787, 708, 4109, 8, 65, 69, -1, -1, 2, NULL), - (788, 708, 4895, 8, 65, 67, -1, -1, 5, NULL), - (789, 708, 4977, 1, 65, 65, -1, -1, 3, NULL), - (790, 708, 5284, 1, 66, 67, -1, -1, 3, NULL), - (791, 708, 5286, 1, 67, 67, -1, -1, 2, NULL), - (792, 708, 5289, 2, 68, 255, -1, -1, 2, NULL), - (793, 708, 8027, 1, 68, 255, -1, -1, 2, NULL), - (794, 708, 5288, 8, 68, 255, -1, -1, 5, NULL), - (795, 708, 5292, 1, 68, 69, -1, -1, 3, NULL), - (796, 708, 5291, 8, 69, 255, -1, -1, 9, NULL), - (797, 708, 8029, 8, 69, 255, -1, -1, 10, NULL), - (798, 708, 5298, 8, 70, 255, -1, -1, 2, NULL), - (799, 708, 5297, 8, 70, 255, -1, -1, 4, NULL), - (800, 708, 5299, 1, 70, 255, -1, -1, 3, NULL), - (801, 709, 5012, 1, 1, 33, -1, -1, 5, NULL), - (802, 709, 340, 256, 5, 56, -1, -1, 3, NULL), - (803, 709, 491, 32, 7, 13, -1, -1, 0, NULL), - (804, 709, 341, 64, 8, 14, -1, -1, 3, NULL), - (805, 709, 2571, 1, 9, 49, -1, -1, 2, NULL), - (806, 709, 344, 128, 11, 19, -1, -1, 1, NULL), - (807, 709, 229, 1, 12, 42, -1, 45, 4, NULL), - (808, 709, 351, 32, 14, 21, -1, -1, 0, NULL), - (809, 709, 502, 64, 15, 28, -1, -1, 3, NULL), - (810, 709, 346, 8, 16, 57, -1, -1, 1, NULL), - (811, 709, 355, 128, 20, 43, -1, -1, 1, NULL), - (812, 709, 359, 8, 22, 36, -1, -1, 2, NULL), - (813, 709, 362, 32, 22, 29, -1, -1, 0, NULL), - (814, 709, 360, 256, 28, 40, -1, -1, 3, NULL), - (815, 709, 1289, 8, 29, 59, -1, -1, 9, NULL), - (816, 709, 445, 64, 29, 46, -1, -1, 3, NULL), - (817, 709, 492, 32, 30, 37, -1, -1, 0, NULL), - (818, 709, 236, 8, 31, 55, -1, -1, 8, NULL), - (819, 709, 3561, 1, 34, 47, -1, -1, 5, NULL), - (820, 709, 367, 256, 36, 59, -1, -1, 3, NULL), - (821, 709, 2574, 8, 37, 54, -1, -1, 2, NULL), - (822, 709, 370, 1, 37, 49, -1, -1, 2, NULL), - (823, 709, 440, 32, 38, 45, -1, -1, 0, NULL), - (824, 709, 3686, 256, 41, 52, -1, -1, 3, NULL), - (825, 709, 127, 1, 43, 56, -1, 45, 4, NULL), - (826, 709, 452, 128, 44, 58, -1, -1, 1, NULL), - (827, 709, 441, 32, 46, 51, -1, -1, 0, NULL), - (828, 709, 692, 64, 47, 56, -1, -1, 3, NULL), - (829, 709, 3560, 1, 48, 53, -1, -1, 5, NULL), - (830, 709, 199, 16, 50, 255, -1, -1, 1, NULL), - (831, 709, 442, 32, 52, 57, -1, -1, 0, NULL), - (832, 709, 451, 256, 53, 60, -1, -1, 3, NULL), - (833, 709, 3562, 1, 54, 63, -1, -1, 5, NULL), - (834, 709, 1376, 8, 55, 62, -1, -1, 2, NULL), - (835, 709, 393, 8, 56, 58, -1, -1, 8, NULL), - (836, 709, 454, 256, 57, 61, -1, -1, 3, NULL), - (837, 709, 525, 64, 57, 59, -1, -1, 3, NULL), - (838, 709, 6986, 1, 57, 61, -1, -1, 4, NULL), - (839, 709, 495, 32, 58, 63, -1, -1, 0, NULL), - (840, 709, 394, 8, 59, 255, -1, -1, 8, NULL), - (841, 709, 453, 128, 59, 60, -1, -1, 1, NULL), - (842, 709, 661, 8, 60, 63, -1, -1, 9, NULL), - (843, 709, 1508, 256, 60, 65, -1, -1, 3, NULL), - (844, 709, 447, 64, 60, 61, -1, -1, 3, NULL), - (845, 709, 3400, 128, 61, 255, -1, -1, 1, NULL), - (846, 709, 6, 256, 61, 62, -1, -1, 3, NULL), - (847, 709, 456, 256, 62, 65, -1, -1, 3, NULL), - (848, 709, 3401, 64, 62, 64, -1, -1, 3, NULL), - (849, 709, 3227, 8, 63, 64, -1, -1, 2, NULL), - (850, 709, 3489, 256, 63, 65, -1, -1, 3, NULL), - (851, 709, 6987, 1, 62, 66, -1, -1, 4, NULL), - (852, 709, 1414, 8, 64, 68, -1, -1, 9, NULL), - (853, 709, 3491, 1, 64, 64, -1, -1, 5, NULL), - (854, 709, 443, 32, 64, 67, -1, -1, 0, NULL), - (855, 709, 3413, 64, 65, 66, -1, -1, 3, NULL), - (856, 709, 4904, 1, 65, 68, -1, -1, 5, NULL), - (857, 709, 5323, 256, 66, 255, -1, -1, 3, NULL), - (858, 709, 5320, 256, 66, 67, -1, -1, 3, NULL), - (859, 709, 5322, 256, 66, 255, -1, -1, 3, NULL), - (860, 709, 5327, 8, 67, 255, -1, -1, 2, NULL), - (861, 709, 5324, 64, 67, 69, -1, -1, 3, NULL), - (862, 709, 6988, 1, 67, 255, -1, -1, 4, NULL), - (863, 709, 5330, 256, 68, 255, -1, -1, 3, NULL), - (864, 709, 5331, 32, 68, 255, -1, -1, 0, NULL), - (865, 709, 5332, 8, 69, 255, -1, -1, 9, NULL), - (866, 709, 5334, 1, 69, 255, -1, -1, 5, NULL), - (867, 709, 5338, 64, 70, 255, -1, -1, 3, NULL), - (868, 710, 5011, 2, 1, 7, -1, -1, 2, NULL), - (869, 710, 239, 256, 3, 43, -1, -1, 3, NULL), - (870, 710, 2591, 128, 5, 5, -1, -1, 1, NULL), - (871, 710, 242, 128, 6, 50, -1, -1, 1, NULL), - (872, 710, 26, 8, 7, 20, -1, -1, 1, NULL), - (873, 710, 200, 2, 8, 20, -1, -1, 2, NULL), - (874, 710, 2592, 8, 11, 51, -1, -1, 9, NULL), - (875, 710, 269, 8, 12, 54, -1, -1, 8, NULL), - (876, 710, 515, 8, 13, 29, -1, -1, 7, NULL), - (877, 710, 92, 1, 14, 18, -1, -1, 4, NULL), - (878, 710, 254, 8, 17, 36, -1, -1, 6, NULL), - (879, 710, 91, 1, 19, 28, -1, -1, 4, NULL), - (880, 710, 17, 2, 21, 37, -1, -1, 2, NULL), - (881, 710, 263, 8, 21, 37, -1, -1, 1, NULL), - (882, 710, 256, 8, 24, 42, -1, -1, 5, NULL), - (883, 710, 264, 256, 25, 39, -1, -1, 3, NULL), - (884, 710, 268, 8, 26, 52, -1, -1, 4, NULL), - (885, 710, 2593, 8, 29, 47, -1, -1, 2, NULL), - (886, 710, 3565, 1, 29, 38, -1, -1, 4, NULL), - (887, 710, 516, 8, 30, 33, -1, -1, 7, NULL), - (888, 710, 517, 8, 34, 41, -1, -1, 7, NULL), - (889, 710, 1461, 8, 36, 54, -1, -1, 10, NULL), - (890, 710, 2594, 8, 37, 50, -1, -1, 6, NULL), - (891, 710, 12, 2, 38, 56, -1, -1, 2, NULL), - (892, 710, 421, 8, 38, 53, -1, -1, 1, NULL), - (893, 710, 3564, 1, 39, 48, -1, -1, 4, NULL), - (894, 710, 3687, 256, 40, 53, -1, -1, 3, NULL), - (895, 710, 518, 8, 42, 59, -1, -1, 7, NULL), - (896, 710, 129, 8, 43, 57, -1, -1, 5, NULL), - (897, 710, 78, 256, 44, 255, -1, -1, 3, NULL), - (898, 710, 2595, 8, 48, 49, -1, -1, 2, NULL), - (899, 710, 691, 1, 49, 51, -1, -1, 4, NULL), - (900, 710, 1462, 8, 50, 61, -1, -1, 2, NULL), - (901, 710, 1741, 16, 50, 54, -1, -1, 1, NULL), - (902, 710, 1397, 8, 51, 61, -1, -1, 6, NULL), - (903, 710, 512, 128, 51, 60, -1, -1, 1, NULL), - (904, 710, 2596, 8, 52, 57, -1, -1, 9, NULL), - (905, 710, 57, 1, 52, 58, -1, -1, 4, NULL), - (906, 710, 430, 8, 53, 255, -1, -1, 4, NULL), - (907, 710, 259, 256, 54, 61, -1, -1, 3, NULL), - (908, 710, 422, 8, 54, 58, -1, -1, 1, NULL), - (909, 710, 1296, 16, 55, 255, -1, -1, 1, NULL), - (910, 710, 145, 8, 55, 63, -1, -1, 8, NULL), - (911, 710, 1463, 8, 55, 57, -1, -1, 10, NULL), - (912, 710, 15, 2, 57, 61, -1, -1, 2, NULL), - (913, 710, 432, 8, 58, 61, -1, -1, 5, NULL), - (914, 710, 4059, 8, 58, 63, -1, -1, 10, NULL), - (915, 710, 2599, 8, 58, 255, -1, -1, 9, NULL), - (916, 710, 423, 8, 59, 64, -1, -1, 1, NULL), - (917, 710, 1740, 1, 59, 63, -1, -1, 4, NULL), - (918, 710, 519, 8, 60, 62, -1, -1, 7, NULL), - (919, 710, 6732, 128, 61, 68, -1, -1, 1, NULL), - (920, 710, 3419, 8, 62, 66, -1, -1, 2, NULL), - (921, 710, 356, 8, 62, 65, -1, -1, 5, NULL), - (922, 710, 3487, 8, 62, 66, -1, -1, 6, NULL), - (923, 710, 665, 256, 62, 66, -1, -1, 3, NULL), - (924, 710, 1290, 2, 62, 64, -1, -1, 2, NULL), - (925, 710, 1558, 8, 63, 67, -1, -1, 7, NULL), - (926, 710, 1568, 8, 64, 67, -1, -1, 8, NULL), - (927, 710, 3415, 8, 64, 64, -1, -1, 10, NULL), - (928, 710, 3431, 1, 64, 64, -1, -1, 4, NULL), - (929, 710, 1559, 8, 65, 69, -1, -1, 1, NULL), - (930, 710, 4898, 8, 65, 68, -1, -1, 10, NULL), - (931, 710, 4980, 1, 65, 68, -1, -1, 4, NULL), - (932, 710, 4896, 2, 65, 66, -1, -1, 2, NULL), - (933, 710, 5302, 8, 66, 255, -1, -1, 5, NULL), - (934, 710, 5305, 8, 66, 255, -1, -1, 2, NULL), - (935, 710, 5306, 8, 67, 255, -1, -1, 6, NULL), - (936, 710, 5303, 256, 67, 255, -1, -1, 3, NULL), - (937, 710, 5304, 2, 67, 255, -1, -1, 2, NULL), - (938, 710, 5307, 8, 68, 255, -1, -1, 7, NULL), - (939, 710, 5310, 8, 68, 255, -1, -1, 8, NULL), - (940, 710, 5311, 8, 69, 255, -1, -1, 10, NULL), - (941, 710, 6664, 128, 69, 255, -1, -1, 1, NULL), - (942, 710, 5313, 1, 69, 69, -1, -1, 4, NULL), - (943, 710, 5315, 8, 70, 255, -1, -1, 1, NULL), - (944, 710, 5319, 1, 70, 255, -1, -1, 4, NULL), - (945, 711, 700, 8, 1, 9, -1, -1, 1, NULL), - (946, 711, 7, 2, 6, 33, -1, -1, 2, NULL), - (947, 711, 710, 8, 9, 12, -1, -1, 2, NULL), - (948, 711, 701, 8, 10, 35, -1, -1, 1, NULL), - (949, 711, 711, 8, 13, 24, -1, -1, 2, NULL), - (950, 711, 709, 8, 17, 51, -1, -1, 3, NULL), - (951, 711, 1287, 2, 20, 31, -1, -1, 2, NULL), - (952, 711, 738, 1, 23, 255, -1, -1, 3, NULL), - (953, 711, 712, 8, 25, 28, -1, -1, 2, NULL), - (954, 711, 715, 8, 29, 32, -1, -1, 3, NULL), - (955, 711, 707, 1, 30, 37, -1, -1, 2, NULL), - (956, 711, 723, 2, 32, 33, -1, -1, 3, NULL), - (957, 711, 713, 8, 33, 36, -1, -1, 2, NULL), - (958, 711, 1448, 2, 34, 54, -1, -1, 2, NULL), - (959, 711, 740, 8, 36, 41, -1, -1, 1, NULL), - (960, 711, 716, 8, 37, 40, -1, -1, 2, NULL), - (961, 711, 743, 1, 38, 41, -1, -1, 4, NULL), - (962, 711, 714, 8, 41, 46, -1, -1, 2, NULL), - (963, 711, 3567, 1, 42, 45, -1, -1, 5, NULL), - (964, 711, 702, 8, 42, 49, -1, -1, 1, NULL), - (965, 711, 744, 1, 46, 49, -1, -1, 6, NULL), - (966, 711, 748, 8, 47, 53, -1, -1, 2, NULL), - (967, 711, 3566, 1, 50, 62, -1, -1, 2, NULL), - (968, 711, 747, 8, 50, 53, -1, -1, 1, NULL), - (969, 711, 1751, 1, 51, 255, -1, -1, 4, NULL), - (970, 711, 2606, 8, 52, 59, -1, -1, 3, NULL), - (971, 711, 1754, 16, 53, 59, -1, -1, 1, NULL), - (972, 711, 2607, 8, 54, 255, -1, -1, 2, NULL), - (973, 711, 1759, 2, 55, 57, -1, -1, 2, NULL), - (974, 711, 2609, 2, 58, 59, -1, -1, 2, NULL), - (975, 711, 1196, 2, 60, 61, -1, -1, 2, NULL), - (976, 711, 1749, 16, 60, 255, -1, -1, 1, NULL), - (977, 711, 2610, 8, 60, 63, -1, -1, 3, NULL), - (978, 711, 3374, 8, 62, 64, -1, -1, 1, NULL), - (979, 711, 3651, 2, 62, 63, -1, -1, 2, NULL), - (980, 711, 3370, 1, 63, 63, -1, -1, 2, NULL), - (981, 711, 3066, 1, 64, 255, -1, -1, 2, NULL), - (982, 711, 3362, 8, 64, 64, -1, -1, 3, NULL), - (983, 711, 3372, 2, 64, 66, -1, -1, 2, NULL), - (984, 711, 4871, 8, 65, 67, -1, -1, 1, NULL), - (985, 711, 4872, 8, 65, 67, -1, -1, 3, NULL), - (986, 711, 5377, 2, 67, 68, -1, -1, 2, NULL), - (987, 711, 5376, 8, 68, 255, -1, -1, 1, NULL), - (988, 711, 5380, 8, 68, 68, -1, -1, 3, NULL), - (989, 711, 5382, 8, 69, 69, -1, -1, 3, NULL), - (990, 711, 5384, 2, 69, 255, -1, -1, 2, NULL), - (991, 711, 5388, 8, 70, 255, -1, -1, 3, NULL), - (992, 712, 5011, 2, 1, 5, -1, -1, 2, NULL), - (993, 712, 200, 2, 6, 19, -1, -1, 2, NULL), - (994, 712, 267, 8, 7, 19, -1, -1, 9, NULL), - (995, 712, 2612, 32, 8, 14, -1, -1, 0, NULL), - (996, 712, 2611, 2, 9, 14, -1, -1, 2, NULL), - (997, 712, 274, 8, 10, 25, -1, -1, 8, NULL), - (998, 712, 2068, 1, 12, 25, -1, -1, 4, NULL), - (999, 712, 2635, 8, 13, 17, -1, -1, 6, NULL), - (1000, 712, 40, 8, 14, 27, -1, -1, 5, NULL), - (1001, 712, 75, 256, 14, 39, -1, -1, 3, NULL), - (1002, 712, 2613, 2, 15, 26, -1, -1, 2, NULL), - (1003, 712, 2633, 32, 15, 20, -1, -1, 0, NULL), - (1004, 712, 279, 8, 17, 36, -1, -1, 4, NULL), - (1005, 712, 2636, 8, 18, 27, -1, -1, 6, NULL), - (1006, 712, 277, 256, 19, 34, -1, -1, 3, NULL), - (1007, 712, 270, 1, 20, 49, -1, -1, 3, NULL), - (1008, 712, 17, 2, 20, 35, -1, -1, 2, NULL), - (1009, 712, 2614, 32, 21, 29, -1, -1, 0, NULL), - (1010, 712, 282, 1, 26, 32, -1, -1, 4, NULL), - (1011, 712, 283, 8, 26, 36, -1, -1, 8, NULL), - (1012, 712, 2615, 2, 27, 35, -1, -1, 2, NULL), - (1013, 712, 147, 8, 28, 40, -1, -1, 5, NULL), - (1014, 712, 2637, 8, 28, 37, -1, -1, 6, NULL), - (1015, 712, 2616, 32, 30, 38, -1, -1, 0, NULL), - (1016, 712, 3568, 1, 33, 46, -1, -1, 4, NULL), - (1017, 712, 434, 256, 35, 51, -1, -1, 3, NULL), - (1018, 712, 48, 512, 35, 57, -1, -1, 6, NULL), - (1019, 712, 12, 2, 36, 56, -1, -1, 2, NULL), - (1020, 712, 2617, 2, 36, 48, -1, -1, 2, NULL), - (1021, 712, 2619, 8, 37, 51, -1, -1, 8, NULL), - (1022, 712, 149, 8, 37, 51, -1, -1, 3, NULL), - (1023, 712, 2638, 8, 38, 45, -1, -1, 6, NULL), - (1024, 712, 2618, 32, 39, 45, -1, -1, 0, NULL), - (1025, 712, 3689, 256, 40, 64, -1, -1, 3, NULL), - (1026, 712, 151, 8, 41, 53, -1, -1, 5, NULL), - (1027, 712, 2176, 8, 41, 51, -1, -1, 4, NULL), - (1028, 712, 2178, 8, 42, 59, -1, -1, 2, NULL), - (1029, 712, 2621, 32, 46, 53, -1, -1, 0, NULL), - (1030, 712, 2639, 8, 46, 50, -1, -1, 6, NULL), - (1031, 712, 308, 8, 47, 255, -1, -1, 7, NULL), - (1032, 712, 3569, 1, 47, 53, -1, -1, 4, NULL), - (1033, 712, 2620, 2, 49, 51, -1, -1, 2, NULL), - (1034, 712, 2634, 1, 50, 59, -1, -1, 3, NULL), - (1035, 712, 2640, 8, 51, 52, -1, -1, 6, NULL), - (1036, 712, 161, 8, 52, 56, -1, -1, 3, NULL), - (1037, 712, 2177, 8, 52, 58, -1, -1, 4, NULL), - (1038, 712, 2622, 2, 52, 54, -1, -1, 2, NULL), - (1039, 712, 3690, 8, 52, 54, -1, -1, 8, NULL), - (1040, 712, 435, 256, 52, 60, -1, -1, 3, NULL), - (1041, 712, 167, 8, 53, 57, -1, -1, 6, NULL), - (1042, 712, 153, 8, 54, 255, -1, -1, 5, NULL), - (1043, 712, 2623, 32, 54, 55, -1, -1, 0, NULL), - (1044, 712, 3570, 1, 54, 58, -1, -1, 4, NULL), - (1045, 712, 2625, 8, 55, 58, -1, -1, 8, NULL), - (1046, 712, 145, 8, 55, 63, -1, -1, 1, NULL), - (1047, 712, 2626, 32, 56, 57, -1, -1, 0, NULL), - (1048, 712, 15, 2, 57, 61, -1, -1, 2, NULL), - (1049, 712, 158, 8, 57, 255, -1, -1, 3, NULL), - (1050, 712, 168, 8, 58, 61, -1, -1, 6, NULL), - (1051, 712, 2627, 32, 58, 59, -1, -1, 0, NULL), - (1052, 712, 49, 512, 58, 59, -1, -1, 6, NULL), - (1053, 712, 2628, 8, 59, 62, -1, -1, 8, NULL), - (1054, 712, 2629, 8, 59, 63, -1, -1, 4, NULL), - (1055, 712, 510, 1, 59, 62, -1, -1, 4, NULL), - (1056, 712, 2941, 8, 60, 64, -1, -1, 10, NULL), - (1057, 712, 2630, 8, 60, 61, -1, -1, 2, NULL), - (1058, 712, 2631, 32, 60, 61, -1, -1, 0, NULL), - (1059, 712, 2942, 1, 60, 64, -1, -1, 3, NULL), - (1060, 712, 3492, 256, 61, 65, -1, -1, 3, NULL), - (1061, 712, 3456, 8, 62, 66, -1, -1, 2, NULL), - (1062, 712, 1585, 8, 62, 66, -1, -1, 6, NULL), - (1063, 712, 1290, 2, 62, 64, -1, -1, 2, NULL), - (1064, 712, 3457, 32, 62, 63, -1, -1, 0, NULL), - (1065, 712, 3458, 8, 63, 67, -1, -1, 8, NULL), - (1066, 712, 3493, 1, 63, 64, -1, -1, 4, NULL), - (1067, 712, 1568, 8, 64, 68, -1, -1, 1, NULL), - (1068, 712, 3460, 8, 64, 68, -1, -1, 4, NULL), - (1069, 712, 3461, 32, 64, 67, -1, -1, 0, NULL), - (1070, 712, 3463, 8, 65, 69, -1, -1, 10, NULL), - (1071, 712, 32, 256, 65, 69, -1, -1, 3, NULL), - (1072, 712, 3462, 1, 65, 69, -1, -1, 3, NULL), - (1073, 712, 4972, 1, 65, 68, -1, -1, 4, NULL), - (1074, 712, 4875, 2, 65, 66, -1, -1, 2, NULL), - (1075, 712, 5527, 256, 66, 255, -1, -1, 3, NULL), - (1076, 712, 5530, 8, 67, 255, -1, -1, 2, NULL), - (1077, 712, 5529, 8, 67, 255, -1, -1, 6, NULL), - (1078, 712, 5528, 2, 67, 255, -1, -1, 2, NULL), - (1079, 712, 5533, 8, 68, 255, -1, -1, 8, NULL), - (1080, 712, 5531, 32, 68, 69, -1, -1, 0, NULL), - (1081, 712, 5536, 8, 69, 255, -1, -1, 1, NULL), - (1082, 712, 5537, 8, 69, 255, -1, -1, 4, NULL), - (1083, 712, 5535, 1, 69, 69, -1, -1, 4, NULL), - (1084, 712, 5542, 8, 70, 255, -1, -1, 10, NULL), - (1085, 712, 5540, 256, 70, 255, -1, -1, 3, NULL), - (1086, 712, 6828, 1, 70, 255, -1, -1, 3, NULL), - (1087, 712, 5543, 1, 70, 255, -1, -1, 4, NULL), - (1088, 712, 5538, 32, 70, 255, -1, -1, 0, NULL), - (1089, 707, 425, 8, 20, 255, -1, -1, 0, NULL), - (1090, 705, 190, 2048, 47, 55, -1, -1, 0, NULL), - (1091, 705, 292, 2048, 2, 12, -1, -1, 0, NULL), - (1092, 705, 187, 2048, 13, 29, -1, -1, 0, NULL), - (1093, 705, 188, 2048, 30, 46, -1, -1, 0, NULL), - (1094, 705, 1691, 2048, 54, 58, -1, -1, 0, NULL), - (1095, 705, 1692, 2048, 59, 59, -1, -1, 0, NULL), - (1096, 705, 2120, 2048, 60, 60, -1, -1, 0, NULL), - (1097, 705, 3341, 2048, 61, 62, -1, -1, 0, NULL), - (1098, 705, 3354, 2048, 63, 63, -1, -1, 0, NULL), - (1099, 705, 3358, 2048, 64, 66, -1, -1, 0, NULL), - (1100, 705, 5503, 2048, 67, 67, -1, -1, 0, NULL), - (1101, 705, 8035, 2048, 68, 68, -1, -1, 0, NULL), - (1102, 705, 5520, 2048, 69, 255, -1, -1, 0, NULL), - (1103, 709, 343, 16384, 6, 51, -1, -1, 3, NULL), - (1104, 709, 2572, 16384, 15, 34, -1, -1, 3, NULL), - (1105, 709, 2573, 16384, 23, 49, -1, -1, 3, NULL), - (1106, 709, 1457, 16384, 35, 53, -1, -1, 3, NULL), - (1107, 709, 1458, 16384, 50, 55, -1, -1, 3, NULL), - (1108, 709, 2575, 16384, 52, 59, -1, -1, 3, NULL), - (1109, 709, 2577, 16384, 54, 64, -1, -1, 3, NULL), - (1110, 709, 2578, 16384, 56, 62, -1, -1, 3, NULL), - (1111, 709, 2579, 16384, 58, 65, -1, -1, 3, NULL), - (1112, 709, 3406, 16384, 61, 70, -1, -1, 2, NULL), - (1113, 707, 3435, 16384, 61, 85, -1, -1, 2, NULL), - (1114, 707, 5351, 16384, 67, 73, -1, -1, 2, NULL), - (1115, 707, 5354, 16384, 67, 71, -1, -1, 2, NULL), - (1116, 703, 343, 16384, 1, 12, -1, -1, 3, NULL), - (1117, 703, 1511, 16384, 10, 20, -1, -1, 3, NULL), - (1118, 703, 1512, 16384, 21, 36, -1, -1, 3, NULL), - (1119, 703, 1513, 16384, 37, 51, -1, -1, 3, NULL), - (1120, 703, 1716, 16384, 52, 67, -1, -1, 3, NULL), - (1121, 703, 2546, 16384, 52, 65, -1, -1, 3, NULL), - (1122, 703, 5427, 16384, 68, 71, -1, -1, 3, NULL), - (1123, 704, 110, 16384, 22, 43, -1, -1, 2, NULL), - (1124, 704, 111, 16384, 44, 50, -1, -1, 2, NULL), - (1125, 704, 112, 16384, 51, 57, -1, -1, 2, NULL), - (1126, 704, 1577, 16384, 58, 59, -1, -1, 2, NULL), - (1127, 704, 1772, 16384, 60, 255, -1, -1, 1, NULL), - (1128, 704, 3387, 16384, 63, 70, -1, -1, 2, NULL), - (1129, 705, 41, 16384, 1, 3, -1, -1, 3, NULL), - (1130, 705, 676, 16384, 2, 17, -1, -1, 1, NULL), - (1131, 705, 291, 16384, 4, 8, -1, -1, 3, NULL), - (1132, 705, 645, 16384, 9, 18, -1, -1, 3, NULL), - (1133, 705, 281, 16384, 16, 24, -1, -1, 3, NULL), - (1134, 705, 677, 16384, 18, 40, -1, -1, 1, NULL), - (1135, 705, 179, 16384, 19, 33, -1, -1, 4, NULL), - (1136, 705, 162, 16384, 25, 39, -1, -1, 3, NULL), - (1137, 705, 180, 16384, 34, 41, -1, -1, 4, NULL), - (1138, 705, 163, 16384, 40, 52, -1, -1, 3, NULL), - (1139, 705, 678, 16384, 41, 56, -1, -1, 1, NULL), - (1140, 705, 181, 16384, 42, 52, -1, -1, 4, NULL), - (1141, 705, 1592, 16384, 53, 65, -1, -1, 3, NULL), - (1142, 705, 1702, 16384, 57, 60, -1, -1, 1, NULL), - (1143, 705, 3342, 16384, 61, 71, -1, -1, 1, NULL), - (1144, 705, 5499, 16384, 66, 70, -1, -1, 3, NULL), - (1145, 712, 162, 16384, 44, 55, -1, -1, 2, NULL), - (1146, 712, 163, 16384, 56, 65, -1, -1, 2, NULL), - (1147, 707, 14312, 16384, 71, 75, -1, -1, 3, NULL), - (1148, 707, 14313, 16384, 71, 75, -1, -1, 3, NULL), - (1149, 707, 14314, 16384, 71, 75, -1, -1, 3, NULL), - (1150, 707, 0, 16384, 76, 80, -1, -1, 2, NULL), - (1151, 707, 18392, 16384, 81, 85, -1, -1, 2, NULL), - (1152, 707, 18393, 16384, 81, 85, -1, -1, 2, NULL), - (1153, 707, 18394, 16384, 81, 85, -1, -1, 2, NULL), - (1154, 703, 10516, 16384, 72, 76, -1, -1, 3, NULL), - (1155, 703, 10517, 16384, 72, 76, -1, -1, 3, NULL), - (1156, 703, 10518, 16384, 72, 76, -1, -1, 3, NULL), - (1157, 703, 0, 16384, 77, 81, -1, -1, 3, NULL), - (1158, 703, 18970, 16384, 82, 86, -1, -1, 3, NULL), - (1159, 703, 18971, 16384, 82, 86, -1, -1, 3, NULL), - (1160, 703, 18972, 16384, 82, 86, -1, -1, 3, NULL), - (1161, 704, 15186, 16384, 76, 80, -1, -1, 2, NULL), - (1162, 704, 15187, 16384, 76, 80, -1, -1, 2, NULL), - (1163, 704, 15188, 16384, 76, 80, -1, -1, 2, NULL), - (1164, 704, 18726, 16384, 81, 85, -1, -1, 2, NULL), - (1165, 704, 18727, 16384, 81, 85, -1, -1, 2, NULL), - (1166, 704, 18728, 16384, 81, 85, -1, -1, 2, NULL), - (1167, 705, 14446, 16384, 71, 75, -1, -1, 3, NULL), - (1168, 705, 14447, 16384, 71, 75, -1, -1, 3, NULL), - (1169, 705, 14467, 16384, 72, 76, -1, -1, 1, NULL), - (1170, 705, 14468, 16384, 72, 76, -1, -1, 1, NULL), - (1171, 705, 14469, 16384, 72, 76, -1, -1, 1, NULL), - (1172, 705, 0, 16384, 77, 81, -1, -1, 1, NULL), - (1173, 705, 18552, 16384, 81, 85, -1, -1, 3, NULL), - (1174, 705, 18553, 16384, 81, 85, -1, -1, 3, NULL), - (1175, 705, 18554, 16384, 81, 85, -1, -1, 3, NULL), - (1176, 705, 18573, 16384, 82, 86, -1, -1, 1, NULL), - (1177, 705, 18574, 16384, 82, 86, -1, -1, 1, NULL), - (1178, 705, 18575, 16384, 82, 86, -1, -1, 1, NULL), - (1179, 701, 203, 32768, 1, 21, -1, -1, 2, NULL), - (1180, 701, 213, 32768, 4, 27, -1, -1, 2, NULL), - (1181, 701, 4056, 32768, 8, 22, -1, -1, 2, NULL), - (1182, 701, 95, 32768, 22, 47, -1, -1, 2, NULL), - (1183, 701, 4057, 32768, 23, 37, -1, -1, 2, NULL), - (1184, 701, 96, 32768, 28, 50, -1, -1, 2, NULL), - (1185, 701, 2946, 32768, 38, 53, -1, -1, 2, NULL), - (1186, 701, 97, 32768, 48, 57, -1, -1, 2, NULL), - (1187, 701, 3693, 32768, 51, 83, -1, -1, 3, NULL), - (1188, 701, 2880, 32768, 54, 255, -1, -1, 2, NULL), - (1189, 701, 1525, 32768, 58, 83, -1, -1, 2, NULL), - (1190, 708, 203, 32768, 5, 33, -1, -1, 2, NULL), - (1191, 708, 213, 32768, 11, 55, -1, -1, 2, NULL), - (1192, 708, 4056, 32768, 19, 33, -1, -1, 2, NULL), - (1193, 708, 95, 32768, 34, 61, -1, -1, 2, NULL), - (1194, 708, 4057, 32768, 34, 44, -1, -1, 2, NULL), - (1195, 708, 2946, 32768, 45, 59, -1, -1, 2, NULL), - (1196, 708, 96, 32768, 56, 61, -1, -1, 2, NULL), - (1197, 708, 2880, 32768, 60, 255, -1, -1, 2, NULL), - (1198, 708, 3190, 32768, 62, 66, -1, -1, 2, NULL), - (1199, 708, 5283, 32768, 67, 80, -1, -1, 2, NULL), - (1200, 710, 203, 32768, 13, 60, -1, -1, 2, NULL), - (1201, 710, 213, 32768, 22, 60, -1, -1, 2, NULL), - (1202, 710, 95, 32768, 61, 72, -1, -1, 2, NULL), - (1203, 710, 96, 32768, 61, 72, -1, -1, 2, NULL), - (1204, 709, 213, 32768, 19, 255, -1, -1, 2, NULL), - (1205, 707, 213, 32768, 4, 27, -1, -1, 2, NULL), - (1206, 707, 203, 32768, 5, 27, -1, -1, 2, NULL), - (1207, 707, 95, 32768, 28, 51, -1, -1, 2, NULL), - (1208, 707, 96, 32768, 28, 51, -1, -1, 2, NULL), - (1209, 707, 3693, 32768, 52, 83, -1, -1, 2, NULL), - (1210, 711, 3682, 32768, 45, 85, -1, -1, 2, NULL), - (1211, 711, 3681, 32768, 52, 85, -1, -1, 2, NULL), - (1212, 706, 213, 32768, 1, 21, -1, -1, 2, NULL), - (1213, 706, 203, 32768, 2, 25, -1, -1, 2, NULL), - (1214, 706, 4056, 32768, 9, 23, -1, -1, 2, NULL), - (1215, 706, 96, 32768, 22, 47, -1, -1, 2, NULL), - (1216, 706, 4057, 32768, 24, 37, -1, -1, 2, NULL), - (1217, 706, 95, 32768, 26, 51, -1, -1, 2, NULL), - (1218, 706, 2946, 32768, 38, 53, -1, -1, 2, NULL), - (1219, 706, 98, 32768, 48, 51, -1, -1, 2, NULL), - (1220, 706, 2526, 32768, 52, 84, -1, -1, 2, NULL), - (1221, 706, 3842, 32768, 52, 84, -1, -1, 2, NULL), - (1222, 706, 2880, 32768, 54, 255, -1, -1, 2, NULL), - (1223, 712, 213, 32768, 4, 44, -1, -1, 2, NULL), - (1224, 712, 203, 32768, 13, 60, -1, -1, 2, NULL), - (1225, 712, 96, 32768, 45, 62, -1, -1, 2, NULL), - (1226, 712, 95, 32768, 61, 255, -1, -1, 2, NULL), - (1227, 712, 98, 32768, 63, 255, -1, -1, 2, NULL), - (1228, 701, 14267, 32768, 74, 78, -1, -1, 2, NULL), - (1229, 701, 14268, 32768, 74, 78, -1, -1, 2, NULL), - (1230, 701, 14269, 32768, 74, 78, -1, -1, 2, NULL), - (1231, 701, 18306, 32768, 84, 255, -1, -1, 2, NULL), - (1232, 701, 18307, 32768, 84, 255, -1, -1, 2, NULL), - (1233, 701, 18308, 32768, 84, 255, -1, -1, 2, NULL), - (1234, 701, 18389, 32768, 84, 255, -1, -1, 2, NULL), - (1235, 701, 18390, 32768, 84, 255, -1, -1, 2, NULL), - (1236, 701, 18391, 32768, 84, 255, -1, -1, 2, NULL), - (1237, 708, 19128, 32768, 81, 255, -1, -1, 2, NULL), - (1238, 708, 19129, 32768, 81, 255, -1, -1, 2, NULL), - (1239, 708, 19130, 32768, 81, 255, -1, -1, 2, NULL), - (1240, 710, 14955, 32768, 73, 77, -1, -1, 2, NULL), - (1241, 710, 14956, 32768, 73, 77, -1, -1, 2, NULL), - (1242, 710, 0, 32768, 78, 82, -1, -1, 2, NULL), - (1243, 710, 19146, 32768, 83, 87, -1, -1, 2, NULL), - (1244, 710, 19147, 32768, 83, 87, -1, -1, 2, NULL), - (1245, 710, 19148, 32768, 83, 87, -1, -1, 2, NULL), - (1246, 707, 9700, 32768, 71, 83, -1, -1, 2, NULL), - (1247, 707, 9701, 32768, 71, 83, -1, -1, 2, NULL), - (1248, 707, 9702, 32768, 71, 83, -1, -1, 2, NULL), - (1249, 707, 18389, 32768, 84, 88, -1, -1, 2, NULL), - (1250, 707, 18390, 32768, 84, 88, -1, -1, 2, NULL), - (1251, 707, 18391, 32768, 84, 88, -1, -1, 2, NULL), - (1252, 711, 14027, 32768, 79, 83, -1, -1, 2, NULL), - (1253, 711, 14028, 32768, 79, 83, -1, -1, 2, NULL), - (1254, 711, 14029, 32768, 79, 83, -1, -1, 2, NULL), - (1255, 711, 18021, 32768, 84, 85, -1, -1, 2, NULL), - (1256, 711, 18022, 32768, 84, 85, -1, -1, 2, NULL), - (1257, 711, 18023, 32768, 84, 85, -1, -1, 2, NULL), - (1258, 706, 9700, 32768, 72, 73, -1, -1, 2, NULL), - (1259, 706, 9701, 32768, 72, 73, -1, -1, 2, NULL), - (1260, 706, 9702, 32768, 72, 73, -1, -1, 2, NULL), - (1261, 706, 14387, 32768, 74, 78, -1, -1, 2, NULL), - (1262, 706, 14388, 32768, 74, 78, -1, -1, 2, NULL), - (1263, 706, 14389, 32768, 74, 78, -1, -1, 2, NULL), - (1264, 706, 0, 32768, 79, 83, -1, -1, 2, NULL), - (1265, 706, 18467, 32768, 84, 88, -1, -1, 2, NULL), - (1266, 706, 18468, 32768, 84, 88, -1, -1, 2, NULL), - (1267, 706, 18469, 32768, 84, 88, -1, -1, 2, NULL), - (1268, 706, 19513, 32768, 85, 89, -1, -1, 2, NULL), - (1269, 706, 19514, 32768, 85, 89, -1, -1, 2, NULL), - (1270, 706, 19515, 32768, 85, 89, -1, -1, 2, NULL); -/*!40000 ALTER TABLE `bot_spells_entries` ENABLE KEYS */; -/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; -/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; - - --- End of File diff --git a/utils/sql/git/bots/required/2016_03_24_bots_command_rules.sql b/utils/sql/git/bots/required/2016_03_24_bots_command_rules.sql deleted file mode 100644 index be3009944..000000000 --- a/utils/sql/git/bots/required/2016_03_24_bots_command_rules.sql +++ /dev/null @@ -1,5 +0,0 @@ -INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES -(1, 'Bots:CommandSpellRank', '1', 'Filters bot command spells by rank (1, 2 and 3 are valid filters - any other number allows all ranks)'), -(1, 'Bots:HealRotationMaxMembers', '24', 'Maximum number of heal rotation members'), -(1, 'Bots:HealRotationMaxTargets', '12', 'Maximum number of heal rotation targets'), -(1, 'Bots:PreferNoManaCommandSpells', 'true', 'Give sorting priority to newer no-mana spells (i.e., \'Bind Affinity\')'); diff --git a/utils/sql/git/bots/required/2016_03_24_bots_command_settings.sql b/utils/sql/git/bots/required/2016_03_24_bots_command_settings.sql deleted file mode 100644 index 7b37e466f..000000000 --- a/utils/sql/git/bots/required/2016_03_24_bots_command_settings.sql +++ /dev/null @@ -1,102 +0,0 @@ -CREATE TABLE `bot_command_settings` ( - `bot_command` varchar(128) NOT NULL DEFAULT '', - `access` int(11) NOT NULL DEFAULT '0', - `aliases` varchar(256) NOT NULL DEFAULT '', - PRIMARY KEY (`bot_command`), - UNIQUE KEY `UK_bot_command_settings_1` (`bot_command`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -INSERT INTO `bot_command_settings` VALUES -('actionable', 0, ''), -('aggressive', 0, 'agg'), -('attack', 0, 'atk'), -('bindaffinity', 0, 'bind'), -('bot', 0, 'b'), -('botappearance', 0, 'app|appearance'), -('botbeardcolor', 0, 'bc|beardcolor'), -('botbeardstyle', 0, 'bs|beardstyle'), -('botcamp', 0, 'camp'), -('botclone', 200, 'clone'), -('botcreate', 0, 'create'), -('botdelete', 0, 'delete'), -('botdetails', 0, 'details'), -('botdyearmor', 0, 'dyearmor'), -('boteyes', 0, 'eyes'), -('botface', 0, 'face'), -('botfollowdistance', 0, 'followd'), -('botgroup', 0, 'bg'), -('botgroupaddmember', 0, 'bgadd'), -('botgroupcreate', 0, 'bgcreate'), -('botgroupdelete', 0, 'bgdelete'), -('botgrouplist', 0, 'bglist'), -('botgroupload', 0, 'bgload'), -('botgroupremovemember', 0, 'bgremove'), -('bothaircolor', 0, 'hc|haircolor'), -('bothairstyle', 0, 'hs|hairstyle'), -('botheritage', 0, 'her|heritage'), -('botinspectmessage', 0, 'inspect'), -('botlist', 0, 'list'), -('botoutofcombat', 0, 'ooc|outofcombat'), -('botreport', 0, 'report|health|mana'), -('botspawn', 0, 'spawn'), -('botstance', 0, 'stance'), -('botsummon', 0, 'summon'), -('bottattoo', 0, 'tattoo'), -('bottogglearcher', 0, 'archer|togglearcher'), -('bottogglehelm', 0, 'helm|togglehelm'), -('botupdate', 0, 'update'), -('botwoad', 0, 'woad'), -('charm', 0, ''), -('circle', 0, 'cir'), -('cure', 0, ''), -('defensive', 0, 'def'), -('depart', 0, 'dep'), -('escape', 0, 'evac|succor'), -('findaliases', 0, 'alias'), -('follow', 0, ''), -('guard', 0, ''), -('healrotation', 0, 'hr'), -('healrotationadaptivetargeting', 0, 'hradapt'), -('healrotationaddmember', 0, 'hraddm'), -('healrotationaddtarget', 0, 'hraddt'), -('healrotationadjustcritical', 0, 'hrcrit'), -('healrotationadjustsafe', 0, 'hrsafe'), -('healrotationcastingoverride', 0, 'hroverride'), -('healrotationchangeinterval', 0, 'hrinterval'), -('healrotationcleartargets', 0, 'hrclear'), -('healrotationcreate', 0, 'hrcreate'), -('healrotationfastheals', 0, 'hrfastheals'), -('healrotationlist', 0, 'hrlist'), -('healrotationremovemember', 0, 'hrremm'), -('healrotationremovetarget', 0, 'hrremt'), -('healrotationresetlimits', 0, 'hrreset'), -('healrotationstart', 0, 'hrstart'), -('healrotationstop', 0, 'hrstop'), -('help', 0, '?'), -('hold', 0, ''), -('identify', 0, 'lore'), -('inventory', 0, 'inv'), -('inventorygive', 0, 'invgive'), -('inventorylist', 0, 'invlist'), -('inventoryremove', 0, 'invremove'), -('invisibility', 0, 'invis'), -('levitation', 0, 'lev'), -('lull', 0, 'calm|pacify'), -('mesmerize', 0, 'mez'), -('movementspeed', 0, 'sow'), -('pet', 0, 'p'), -('petremove', 0, 'prem'), -('petsettype', 0, 'pset'), -('picklock', 0, 'pl'), -('portal', 0, 'port'), -('pull', 0, ''), -('release', 0, ''), -('resistance', 0, 'resist'), -('resurrect', 0, 'revive'), -('rune', 0, ''), -('sendhome', 0, 'gate'), -('size', 0, ''), -('summoncorpse', 0, 'scorpse'), -('taunt', 0, ''), -('track', 0, ''), -('waterbreathing', 0, 'wb|eb'); diff --git a/utils/sql/git/bots/required/2016_04_05_bots_pet_spell_id_field.sql b/utils/sql/git/bots/required/2016_04_05_bots_pet_spell_id_field.sql deleted file mode 100644 index d2d930160..000000000 --- a/utils/sql/git/bots/required/2016_04_05_bots_pet_spell_id_field.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `bot_pets` CHANGE COLUMN `pet_id` `spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `pets_index`; diff --git a/utils/sql/git/bots/required/2016_04_07_bots_heal_override_target.sql b/utils/sql/git/bots/required/2016_04_07_bots_heal_override_target.sql deleted file mode 100644 index 02cc4083e..000000000 --- a/utils/sql/git/bots/required/2016_04_07_bots_heal_override_target.sql +++ /dev/null @@ -1,3 +0,0 @@ -INSERT INTO `bot_command_settings` VALUES -('healrotationclearhot', 0, 'hrclearhot'), -('healrotationsethot', 0, 'hrsethot'); diff --git a/utils/sql/git/bots/required/2016_04_08_bots_heal_rotations.sql b/utils/sql/git/bots/required/2016_04_08_bots_heal_rotations.sql deleted file mode 100644 index 71e0f5af4..000000000 --- a/utils/sql/git/bots/required/2016_04_08_bots_heal_rotations.sql +++ /dev/null @@ -1,41 +0,0 @@ -CREATE TABLE `bot_heal_rotations` ( - `heal_rotation_index` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, - `bot_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `interval` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `fast_heals` INT(3) UNSIGNED NOT NULL DEFAULT '0', - `adaptive_targeting` INT(3) UNSIGNED NOT NULL DEFAULT '0', - `casting_override` INT(3) UNSIGNED NOT NULL DEFAULT '0', - `safe_hp_base` FLOAT(11) UNSIGNED NOT NULL DEFAULT '0', - `safe_hp_cloth` FLOAT(11) UNSIGNED NOT NULL DEFAULT '0', - `safe_hp_leather` FLOAT(11) UNSIGNED NOT NULL DEFAULT '0', - `safe_hp_chain` FLOAT(11) UNSIGNED NOT NULL DEFAULT '0', - `safe_hp_plate` FLOAT(11) UNSIGNED NOT NULL DEFAULT '0', - `critical_hp_base` FLOAT(11) UNSIGNED NOT NULL DEFAULT '0', - `critical_hp_cloth` FLOAT(11) UNSIGNED NOT NULL DEFAULT '0', - `critical_hp_leather` FLOAT(11) UNSIGNED NOT NULL DEFAULT '0', - `critical_hp_chain` FLOAT(11) UNSIGNED NOT NULL DEFAULT '0', - `critical_hp_plate` FLOAT(11) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`heal_rotation_index`), - CONSTRAINT `FK_bot_heal_rotations` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -CREATE TABLE `bot_heal_rotation_members` ( - `member_index` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, - `heal_rotation_index` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `bot_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`member_index`), - CONSTRAINT `FK_bot_heal_rotation_members_1` FOREIGN KEY (`heal_rotation_index`) REFERENCES `bot_heal_rotations` (`heal_rotation_index`), - CONSTRAINT `FK_bot_heal_rotation_members_2` FOREIGN KEY (`bot_id`) REFERENCES `bot_data` (`bot_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -CREATE TABLE `bot_heal_rotation_targets` ( - `target_index` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, - `heal_rotation_index` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `target_name` varchar(64) NOT NULL DEFAULT '', - PRIMARY KEY (`target_index`), - CONSTRAINT `FK_bot_heal_rotation_targets` FOREIGN KEY (`heal_rotation_index`) REFERENCES `bot_heal_rotations` (`heal_rotation_index`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -INSERT INTO `bot_command_settings` VALUES -('healrotationdelete', 0, 'hrdelete'), -('healrotationsave', 0, 'hrsave'); diff --git a/utils/sql/git/bots/required/2016_04_12_bots_inventory_window.sql b/utils/sql/git/bots/required/2016_04_12_bots_inventory_window.sql deleted file mode 100644 index b0269559d..000000000 --- a/utils/sql/git/bots/required/2016_04_12_bots_inventory_window.sql +++ /dev/null @@ -1,2 +0,0 @@ -INSERT INTO `bot_command_settings` VALUES -('inventorywindow', 0, 'invwindow'); diff --git a/utils/sql/git/bots/required/2016_06_23_bots_camel_case_name_rule.sql b/utils/sql/git/bots/required/2016_06_23_bots_camel_case_name_rule.sql deleted file mode 100644 index 6a758f28a..000000000 --- a/utils/sql/git/bots/required/2016_06_23_bots_camel_case_name_rule.sql +++ /dev/null @@ -1,2 +0,0 @@ -INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES -(1, 'Bots:AllowCamelCaseNames', 'false', 'Allows the use of \'MyBot\' type names'); diff --git a/utils/sql/git/bots/required/2016_06_28_bots_inventory_charges_update.sql b/utils/sql/git/bots/required/2016_06_28_bots_inventory_charges_update.sql deleted file mode 100644 index 1315c3e9e..000000000 --- a/utils/sql/git/bots/required/2016_06_28_bots_inventory_charges_update.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `bot_inventories` MODIFY COLUMN `inst_charges` SMALLINT(3) UNSIGNED NULL DEFAULT '0'; diff --git a/utils/sql/git/bots/required/2017_02_15_bots_bot_spells_entries.sql b/utils/sql/git/bots/required/2017_02_15_bots_bot_spells_entries.sql deleted file mode 100644 index c7d5087e6..000000000 --- a/utils/sql/git/bots/required/2017_02_15_bots_bot_spells_entries.sql +++ /dev/null @@ -1,29 +0,0 @@ --- Delete any existing `bots_spells_entries` table -DROP TABLE IF EXISTS `bots_spells_entries`; - --- Create new bot spells entries table (new table does not have spells_id_spellid constraint) -CREATE TABLE `bot_spells_entries` ( - `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, - `npc_spells_id` INT(11) NOT NULL DEFAULT '0', - `spellid` SMALLINT(5) NOT NULL DEFAULT '0', - `type` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `minlevel` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `maxlevel` TINYINT(3) UNSIGNED NOT NULL DEFAULT '255', - `manacost` SMALLINT(5) NOT NULL DEFAULT '-1', - `recast_delay` INT(11) NOT NULL DEFAULT '-1', - `priority` SMALLINT(5) NOT NULL DEFAULT '0', - `resist_adjust` INT(11) NULL DEFAULT NULL, - PRIMARY KEY (`id`) -) -COLLATE='latin1_swedish_ci' -ENGINE=InnoDB -AUTO_INCREMENT=1 -; - --- Copy bots spells into new table -INSERT INTO `bot_spells_entries` (`npc_spells_id`, `spellid`, `type`, `minlevel`, `maxlevel`, `manacost`, `recast_delay`, `priority`, `resist_adjust`) -SELECT `npc_spells_id`, `spellid`, `type`, `minlevel`, `maxlevel`, `manacost`, `recast_delay`, `priority`, `resist_adjust` -FROM `npc_spells_entries` WHERE `npc_spells_id` >= '701' AND `npc_spells_id` <= '712'; - --- Delete bot spells from old table -DELETE FROM `npc_spells_entries` WHERE `npc_spells_id` >= '701' AND `npc_spells_id` <= '712'; diff --git a/utils/sql/git/bots/required/2017_02_20_bots_bard_spell_update.sql b/utils/sql/git/bots/required/2017_02_20_bots_bard_spell_update.sql deleted file mode 100644 index b0161209a..000000000 --- a/utils/sql/git/bots/required/2017_02_20_bots_bard_spell_update.sql +++ /dev/null @@ -1,153 +0,0 @@ -DELETE FROM `bot_spells_entries` WHERE `npc_spells_id` = '711'; - -INSERT INTO `bot_spells_entries`(`npc_spells_id`,`spellid`,`type`,`minlevel`,`maxlevel`,`manacost`,`recast_delay`,`priority`,`resist_adjust`) VALUES - --- versioning entry -('711', '0', '4294901760', '0', '0', '-1', '-1', '0', NULL), -- 0xFFFF0000 - --- nuke -('711', '704', '1', '12', '54', '-1', '-1', '1', NULL), -('711', '1747', '1', '55', '127', '-1', '-1', '1', NULL), - --- escape -('711', '1749', '16', '60', '127', '-1', '-1', '1', NULL), - --- dot -('711', '743', '256', '38', '64', '-1', '-1', '1', NULL), -('711', '3367', '256', '65', '69', '-1', '-1', '1', NULL), -('711', '5385', '256', '70', '79', '-1', '-1', '1', NULL), -('711', '14074', '256', '80', '84', '-1', '-1', '1', NULL), -('711', '18059', '256', '85', '89', '-1', '-1', '1', NULL), -('711', '26084', '256', '90', '94', '-1', '-1', '1', NULL), -('711', '29182', '256', '95', '127', '-1', '-1', '1', NULL), -('711', '3566', '256', '50', '62', '-1', '-1', '2', NULL), -('711', '3370', '256', '63', '67', '-1', '-1', '2', NULL), -('711', '5378', '256', '68', '77', '-1', '-1', '2', NULL), -('711', '14071', '256', '78', '82', '-1', '-1', '2', NULL), -('711', '18056', '256', '83', '87', '-1', '-1', '2', NULL), -('711', '26033', '256', '88', '92', '-1', '-1', '2', NULL), -('711', '29128', '256', '93', '127', '-1', '-1', '2', NULL), -('711', '744', '256', '46', '62', '-1', '-1', '3', NULL), -('711', '3373', '256', '63', '66', '-1', '-1', '3', NULL), -('711', '5379', '256', '67', '76', '-1', '-1', '3', NULL), -('711', '14068', '256', '77', '81', '-1', '-1', '3', NULL), -('711', '18053', '256', '82', '86', '-1', '-1', '3', NULL), -('711', '26003', '256', '87', '91', '-1', '-1', '3', NULL), -('711', '29101', '256', '92', '127', '-1', '-1', '3', NULL), -('711', '3567', '256', '42', '60', '-1', '-1', '4', NULL), -('711', '3363', '256', '61', '65', '-1', '-1', '4', NULL), -('711', '5371', '256', '66', '75', '-1', '-1', '4', NULL), -('711', '14065', '256', '76', '80', '-1', '-1', '4', NULL), -('711', '18050', '256', '81', '85', '-1', '-1', '4', NULL), -('711', '25976', '256', '86', '90', '-1', '-1', '4', NULL), -('711', '29077', '256', '91', '127', '-1', '-1', '4', NULL), -('711', '707', '256', '30', '59', '-1', '-1', '5', NULL), -('711', '4210', '256', '60', '127', '-1', '-1', '5', NULL), - --- slow -('711', '738', '8192', '23', '50', '-1', '-1', '1', NULL), -('711', '1751', '8192', '51', '59', '-1', '-1', '1', NULL), -('711', '1748', '8192', '60', '63', '-1', '-1', '1', NULL), -('711', '3066', '8192', '64', '127', '-1', '-1', '1', NULL), -('711', '738', '8192', '51', '63', '-1', '-1', '2', NULL), -('711', '1751', '8192', '64', '127', '-1', '-1', '2', NULL), -('711', '738', '8192', '64', '127', '-1', '-1', '3', NULL), - --- cure -('711', '3682', '32768', '45', '85', '-1', '-1', '1', NULL), -('711', '25958', '32768', '86', '90', '-1', '-1', '1', NULL), -('711', '29059', '32768', '91', '127', '-1', '-1', '1', NULL), -('711', '3681', '32768', '52', '127', '-1', '-1', '2', NULL), -('711', '10448', '32768', '74', '78', '-1', '-1', '3', NULL), -('711', '14029', '32768', '79', '83', '-1', '-1', '3', NULL), -('711', '18023', '32768', '84', '127', '-1', '-1', '3', NULL), - --- hate redux -('711', '1754', '131072', '53', '127', '-1', '-1', '1', NULL), -('711', '10436', '131072', '73', '127', '-1', '-1', '2', NULL), - --- in-combat buff songs -('711', '2606', '262144', '52', '59', '-1', '-1', '1', NULL), -('711', '2610', '262144', '60', '127', '-1', '-1', '1', NULL), -('711', '700', '262144', '1', '9', '-1', '-1', '2', NULL), -('711', '701', '262144', '10', '35', '-1', '-1', '2', NULL), -('711', '740', '262144', '36', '41', '-1', '-1', '2', NULL), -('711', '702', '262144', '42', '49', '-1', '-1', '2', NULL), -('711', '747', '262144', '50', '61', '-1', '-1', '2', NULL), -('711', '3374', '262144', '62', '64', '-1', '-1', '2', NULL), -('711', '4871', '262144', '65', '67', '-1', '-1', '2', NULL), -('711', '5376', '262144', '68', '78', '-1', '-1', '2', NULL), -('711', '14080', '262144', '79', '83', '-1', '-1', '2', NULL), -('711', '18065', '262144', '84', '88', '-1', '-1', '2', NULL), -('711', '26042', '262144', '89', '93', '-1', '-1', '2', NULL), -('711', '29143', '262144', '94', '127', '-1', '-1', '2', NULL), -('711', '7', '262144', '6', '19', '-1', '-1', '2', NULL), -('711', '1287', '262144', '20', '31', '-1', '-1', '3', NULL), -('711', '723', '262144', '32', '33', '-1', '-1', '3', NULL), -('711', '1448', '262144', '34', '54', '-1', '-1', '3', NULL), -('711', '1759', '262144', '55', '61', '-1', '-1', '3', NULL), -('711', '3651', '262144', '62', '66', '-1', '-1', '3', NULL), -('711', '5377', '262144', '67', '70', '-1', '-1', '3', NULL), -('711', '10421', '262144', '71', '75', '-1', '-1', '3', NULL), -('711', '14008', '262144', '76', '80', '-1', '-1', '3', NULL), -('711', '18008', '262144', '81', '87', '-1', '-1', '3', NULL), -('711', '26015', '262144', '88', '92', '-1', '-1', '3', NULL), -('711', '29107', '262144', '93', '127', '-1', '-1', '3', NULL), -('711', '734', '262144', '7', '8', '-1', '-1', '4', NULL), -('711', '710', '262144', '9', '12', '-1', '-1', '4', NULL), -('711', '711', '262144', '13', '16', '-1', '-1', '4', NULL), -('711', '709', '262144', '17', '40', '-1', '-1', '4', NULL), -('711', '714', '262144', '41', '46', '-1', '-1', '4', NULL), -('711', '748', '262144', '47', '57', '-1', '-1', '4', NULL), -('711', '1763', '262144', '58', '72', '-1', '-1', '4', NULL), -('711', '11881', '262144', '73', '77', '-1', '-1', '4', NULL), -('711', '14056', '262144', '78', '82', '-1', '-1', '4', NULL), -('711', '18041', '262144', '83', '87', '-1', '-1', '4', NULL), -('711', '26027', '262144', '88', '92', '-1', '-1', '4', NULL), -('711', '29122', '262144', '93', '127', '-1', '-1', '4', NULL), -('711', '734', '262144', '9', '24', '-1', '-1', '5', NULL), -('711', '712', '262144', '25', '28', '-1', '-1', '5', NULL), -('711', '715', '262144', '29', '32', '-1', '-1', '5', NULL), -('711', '713', '262144', '33', '36', '-1', '-1', '5', NULL), -('711', '716', '262144', '37', '44', '-1', '-1', '5', NULL), -('711', '4083', '262144', '45', '52', '-1', '-1', '5', NULL), -('711', '4084', '262144', '53', '63', '-1', '-1', '5', NULL), -('711', '3362', '262144', '64', '64', '-1', '-1', '5', NULL), -('711', '4872', '262144', '65', '68', '-1', '-1', '5', NULL), -('711', '5382', '262144', '69', '75', '-1', '-1', '5', NULL), -('711', '14062', '262144', '76', '80', '-1', '-1', '5', NULL), -('711', '18047', '262144', '81', '85', '-1', '-1', '5', NULL), -('711', '25961', '262144', '86', '90', '-1', '-1', '5', NULL), -('711', '29062', '262144', '91', '127', '-1', '-1', '5', NULL), -('711', '734', '262144', '25', '43', '-1', '-1', '6', NULL), -('711', '4085', '262144', '44', '51', '-1', '-1', '6', NULL), -('711', '4086', '262144', '52', '62', '-1', '-1', '6', NULL), -('711', '4087', '262144', '63', '68', '-1', '-1', '6', NULL), -('711', '5374', '262144', '69', '71', '-1', '-1', '6', NULL), -('711', '10439', '262144', '72', '76', '-1', '-1', '6', NULL), -('711', '14020', '262144', '77', '81', '-1', '-1', '6', NULL), -('711', '18014', '262144', '82', '86', '-1', '-1', '6', NULL), -('711', '25991', '262144', '87', '127', '-1', '-1', '6', NULL), -('711', '734', '262144', '30', '82', '-1', '-1', '7', NULL), -('711', '18020', '262144', '83', '127', '-1', '-1', '7', NULL), -('711', '734', '262144', '83', '127', '-1', '-1', '8', NULL), -('711', '2603', '262144', '30', '127', '-1', '-1', '9', NULL), - --- out-of-combat buff songs -('711', '7', '524288', '6', '19', '-1', '-1', '1', NULL), -('711', '1287', '524288', '20', '31', '-1', '-1', '1', NULL), -('711', '723', '524288', '32', '33', '-1', '-1', '1', NULL), -('711', '1448', '524288', '34', '54', '-1', '-1', '1', NULL), -('711', '1759', '524288', '55', '61', '-1', '-1', '1', NULL), -('711', '3651', '524288', '62', '66', '-1', '-1', '1', NULL), -('711', '5377', '524288', '67', '70', '-1', '-1', '1', NULL), -('711', '10421', '524288', '71', '75', '-1', '-1', '1', NULL), -('711', '14008', '524288', '76', '80', '-1', '-1', '1', NULL), -('711', '18008', '524288', '81', '87', '-1', '-1', '1', NULL), -('711', '26015', '524288', '88', '92', '-1', '-1', '1', NULL), -('711', '29107', '524288', '93', '127', '-1', '-1', '1', NULL), -('711', '717', '524288', '5', '29', '-1', '-1','2', NULL), -('711', '2603', '524288', '30', '127', '-1', '-1','2', NULL), -('711', '717', '524288', '30', '48', '-1', '-1','3', NULL), -('711', '2605', '524288', '49', '127', '-1', '-1','3', NULL), -('711', '2602', '524288', '15', '127', '-1', '-1','4', NULL); diff --git a/utils/sql/git/bots/required/2017_02_23_bots_spell_casting_chances.sql b/utils/sql/git/bots/required/2017_02_23_bots_spell_casting_chances.sql deleted file mode 100644 index 951824e13..000000000 --- a/utils/sql/git/bots/required/2017_02_23_bots_spell_casting_chances.sql +++ /dev/null @@ -1,11257 +0,0 @@ -DROP TABLE IF EXISTS `bot_spell_casting_chances`; - -CREATE TABLE `bot_spell_casting_chances` ( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `spell_type_index` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `class_index` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `stance_index` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `conditional_index` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`id`), - INDEX `Index 2` (`spell_type_index`, `class_index`, `stance_index`, `conditional_index`) -) -ENGINE=InnoDB -; - --- Initial migration entries based on coded values - -INSERT INTO `bot_spell_casting_chances`(`spell_type_index`, `class_index`, `stance_index`, `conditional_index`, `value`) VALUES --- SpellType_NukeIndex - -('0', '0', '0', '0', '0'), -('0', '0', '0', '1', '0'), -('0', '0', '0', '2', '0'), -('0', '0', '0', '3', '0'), - -('0', '0', '1', '0', '0'), -('0', '0', '1', '1', '0'), -('0', '0', '1', '2', '0'), -('0', '0', '1', '3', '0'), - -('0', '0', '2', '0', '0'), -('0', '0', '2', '1', '0'), -('0', '0', '2', '2', '0'), -('0', '0', '2', '3', '0'), - -('0', '0', '3', '0', '0'), -('0', '0', '3', '1', '0'), -('0', '0', '3', '2', '0'), -('0', '0', '3', '3', '0'), - -('0', '0', '4', '0', '0'), -('0', '0', '4', '1', '0'), -('0', '0', '4', '2', '0'), -('0', '0', '4', '3', '0'), - -('0', '0', '5', '0', '0'), -('0', '0', '5', '1', '0'), -('0', '0', '5', '2', '0'), -('0', '0', '5', '3', '0'), - -('0', '0', '6', '0', '0'), -('0', '0', '6', '1', '0'), -('0', '0', '6', '2', '0'), -('0', '0', '6', '3', '0'), - -('0', '1', '0', '0', '0'), -('0', '1', '0', '1', '0'), -('0', '1', '0', '2', '0'), -('0', '1', '0', '3', '0'), - -('0', '1', '1', '0', '25'), -('0', '1', '1', '1', '15'), -('0', '1', '1', '2', '25'), -('0', '1', '1', '3', '15'), - -('0', '1', '2', '0', '15'), -('0', '1', '2', '1', '0'), -('0', '1', '2', '2', '15'), -('0', '1', '2', '3', '0'), - -('0', '1', '3', '0', '25'), -('0', '1', '3', '1', '15'), -('0', '1', '3', '2', '25'), -('0', '1', '3', '3', '15'), - -('0', '1', '4', '0', '50'), -('0', '1', '4', '1', '15'), -('0', '1', '4', '2', '50'), -('0', '1', '4', '3', '15'), - -('0', '1', '5', '0', '50'), -('0', '1', '5', '1', '25'), -('0', '1', '5', '2', '50'), -('0', '1', '5', '3', '25'), - -('0', '1', '6', '0', '50'), -('0', '1', '6', '1', '25'), -('0', '1', '6', '2', '50'), -('0', '1', '6', '3', '25'), - -('0', '2', '0', '0', '0'), -('0', '2', '0', '1', '0'), -('0', '2', '0', '2', '0'), -('0', '2', '0', '3', '0'), - -('0', '2', '1', '0', '25'), -('0', '2', '1', '1', '15'), -('0', '2', '1', '2', '25'), -('0', '2', '1', '3', '15'), - -('0', '2', '2', '0', '15'), -('0', '2', '2', '1', '0'), -('0', '2', '2', '2', '15'), -('0', '2', '2', '3', '0'), - -('0', '2', '3', '0', '25'), -('0', '2', '3', '1', '15'), -('0', '2', '3', '2', '25'), -('0', '2', '3', '3', '15'), - -('0', '2', '4', '0', '50'), -('0', '2', '4', '1', '15'), -('0', '2', '4', '2', '50'), -('0', '2', '4', '3', '15'), - -('0', '2', '5', '0', '50'), -('0', '2', '5', '1', '25'), -('0', '2', '5', '2', '50'), -('0', '2', '5', '3', '25'), - -('0', '2', '6', '0', '50'), -('0', '2', '6', '1', '25'), -('0', '2', '6', '2', '50'), -('0', '2', '6', '3', '25'), - -('0', '3', '0', '0', '0'), -('0', '3', '0', '1', '0'), -('0', '3', '0', '2', '0'), -('0', '3', '0', '3', '0'), - -('0', '3', '1', '0', '15'), -('0', '3', '1', '1', '15'), -('0', '3', '1', '2', '15'), -('0', '3', '1', '3', '15'), - -('0', '3', '2', '0', '5'), -('0', '3', '2', '1', '5'), -('0', '3', '2', '2', '5'), -('0', '3', '2', '3', '5'), - -('0', '3', '3', '0', '15'), -('0', '3', '3', '1', '15'), -('0', '3', '3', '2', '15'), -('0', '3', '3', '3', '15'), - -('0', '3', '4', '0', '15'), -('0', '3', '4', '1', '15'), -('0', '3', '4', '2', '15'), -('0', '3', '4', '3', '15'), - -('0', '3', '5', '0', '50'), -('0', '3', '5', '1', '50'), -('0', '3', '5', '2', '50'), -('0', '3', '5', '3', '50'), - -('0', '3', '6', '0', '50'), -('0', '3', '6', '1', '50'), -('0', '3', '6', '2', '50'), -('0', '3', '6', '3', '50'), - -('0', '4', '0', '0', '0'), -('0', '4', '0', '1', '0'), -('0', '4', '0', '2', '0'), -('0', '4', '0', '3', '0'), - -('0', '4', '1', '0', '15'), -('0', '4', '1', '1', '15'), -('0', '4', '1', '2', '15'), -('0', '4', '1', '3', '15'), - -('0', '4', '2', '0', '5'), -('0', '4', '2', '1', '5'), -('0', '4', '2', '2', '5'), -('0', '4', '2', '3', '5'), - -('0', '4', '3', '0', '15'), -('0', '4', '3', '1', '15'), -('0', '4', '3', '2', '15'), -('0', '4', '3', '3', '15'), - -('0', '4', '4', '0', '15'), -('0', '4', '4', '1', '15'), -('0', '4', '4', '2', '15'), -('0', '4', '4', '3', '15'), - -('0', '4', '5', '0', '50'), -('0', '4', '5', '1', '50'), -('0', '4', '5', '2', '50'), -('0', '4', '5', '3', '50'), - -('0', '4', '6', '0', '50'), -('0', '4', '6', '1', '50'), -('0', '4', '6', '2', '50'), -('0', '4', '6', '3', '50'), - -('0', '5', '0', '0', '0'), -('0', '5', '0', '1', '0'), -('0', '5', '0', '2', '0'), -('0', '5', '0', '3', '0'), - -('0', '5', '1', '0', '25'), -('0', '5', '1', '1', '15'), -('0', '5', '1', '2', '25'), -('0', '5', '1', '3', '15'), - -('0', '5', '2', '0', '15'), -('0', '5', '2', '1', '0'), -('0', '5', '2', '2', '15'), -('0', '5', '2', '3', '0'), - -('0', '5', '3', '0', '25'), -('0', '5', '3', '1', '15'), -('0', '5', '3', '2', '25'), -('0', '5', '3', '3', '15'), - -('0', '5', '4', '0', '50'), -('0', '5', '4', '1', '15'), -('0', '5', '4', '2', '50'), -('0', '5', '4', '3', '15'), - -('0', '5', '5', '0', '50'), -('0', '5', '5', '1', '25'), -('0', '5', '5', '2', '50'), -('0', '5', '5', '3', '25'), - -('0', '5', '6', '0', '50'), -('0', '5', '6', '1', '25'), -('0', '5', '6', '2', '50'), -('0', '5', '6', '3', '25'), - -('0', '6', '0', '0', '0'), -('0', '6', '0', '1', '0'), -('0', '6', '0', '2', '0'), -('0', '6', '0', '3', '0'), - -('0', '6', '1', '0', '0'), -('0', '6', '1', '1', '0'), -('0', '6', '1', '2', '0'), -('0', '6', '1', '3', '0'), - -('0', '6', '2', '0', '0'), -('0', '6', '2', '1', '0'), -('0', '6', '2', '2', '0'), -('0', '6', '2', '3', '0'), - -('0', '6', '3', '0', '0'), -('0', '6', '3', '1', '0'), -('0', '6', '3', '2', '0'), -('0', '6', '3', '3', '0'), - -('0', '6', '4', '0', '0'), -('0', '6', '4', '1', '0'), -('0', '6', '4', '2', '0'), -('0', '6', '4', '3', '0'), - -('0', '6', '5', '0', '0'), -('0', '6', '5', '1', '0'), -('0', '6', '5', '2', '0'), -('0', '6', '5', '3', '0'), - -('0', '6', '6', '0', '0'), -('0', '6', '6', '1', '0'), -('0', '6', '6', '2', '0'), -('0', '6', '6', '3', '0'), - -('0', '7', '0', '0', '0'), -('0', '7', '0', '1', '0'), -('0', '7', '0', '2', '0'), -('0', '7', '0', '3', '0'), - -('0', '7', '1', '0', '50'), -('0', '7', '1', '1', '50'), -('0', '7', '1', '2', '50'), -('0', '7', '1', '3', '50'), - -('0', '7', '2', '0', '25'), -('0', '7', '2', '1', '25'), -('0', '7', '2', '2', '25'), -('0', '7', '2', '3', '25'), - -('0', '7', '3', '0', '50'), -('0', '7', '3', '1', '50'), -('0', '7', '3', '2', '50'), -('0', '7', '3', '3', '50'), - -('0', '7', '4', '0', '50'), -('0', '7', '4', '1', '50'), -('0', '7', '4', '2', '50'), -('0', '7', '4', '3', '50'), - -('0', '7', '5', '0', '100'), -('0', '7', '5', '1', '100'), -('0', '7', '5', '2', '100'), -('0', '7', '5', '3', '100'), - -('0', '7', '6', '0', '100'), -('0', '7', '6', '1', '100'), -('0', '7', '6', '2', '100'), -('0', '7', '6', '3', '100'), - -('0', '8', '0', '0', '0'), -('0', '8', '0', '1', '0'), -('0', '8', '0', '2', '0'), -('0', '8', '0', '3', '0'), - -('0', '8', '1', '0', '0'), -('0', '8', '1', '1', '0'), -('0', '8', '1', '2', '0'), -('0', '8', '1', '3', '0'), - -('0', '8', '2', '0', '0'), -('0', '8', '2', '1', '0'), -('0', '8', '2', '2', '0'), -('0', '8', '2', '3', '0'), - -('0', '8', '3', '0', '0'), -('0', '8', '3', '1', '0'), -('0', '8', '3', '2', '0'), -('0', '8', '3', '3', '0'), - -('0', '8', '4', '0', '0'), -('0', '8', '4', '1', '0'), -('0', '8', '4', '2', '0'), -('0', '8', '4', '3', '0'), - -('0', '8', '5', '0', '0'), -('0', '8', '5', '1', '0'), -('0', '8', '5', '2', '0'), -('0', '8', '5', '3', '0'), - -('0', '8', '6', '0', '0'), -('0', '8', '6', '1', '0'), -('0', '8', '6', '2', '0'), -('0', '8', '6', '3', '0'), - -('0', '9', '0', '0', '0'), -('0', '9', '0', '1', '0'), -('0', '9', '0', '2', '0'), -('0', '9', '0', '3', '0'), - -('0', '9', '1', '0', '15'), -('0', '9', '1', '1', '10'), -('0', '9', '1', '2', '5'), -('0', '9', '1', '3', '0'), - -('0', '9', '2', '0', '10'), -('0', '9', '2', '1', '5'), -('0', '9', '2', '2', '0'), -('0', '9', '2', '3', '0'), - -('0', '9', '3', '0', '15'), -('0', '9', '3', '1', '10'), -('0', '9', '3', '2', '5'), -('0', '9', '3', '3', '0'), - -('0', '9', '4', '0', '25'), -('0', '9', '4', '1', '15'), -('0', '9', '4', '2', '15'), -('0', '9', '4', '3', '5'), - -('0', '9', '5', '0', '50'), -('0', '9', '5', '1', '25'), -('0', '9', '5', '2', '25'), -('0', '9', '5', '3', '15'), - -('0', '9', '6', '0', '50'), -('0', '9', '6', '1', '25'), -('0', '9', '6', '2', '25'), -('0', '9', '6', '3', '15'), - -('0', '10', '0', '0', '0'), -('0', '10', '0', '1', '0'), -('0', '10', '0', '2', '0'), -('0', '10', '0', '3', '0'), - -('0', '10', '1', '0', '15'), -('0', '10', '1', '1', '15'), -('0', '10', '1', '2', '15'), -('0', '10', '1', '3', '15'), - -('0', '10', '2', '0', '5'), -('0', '10', '2', '1', '5'), -('0', '10', '2', '2', '5'), -('0', '10', '2', '3', '5'), - -('0', '10', '3', '0', '15'), -('0', '10', '3', '1', '15'), -('0', '10', '3', '2', '15'), -('0', '10', '3', '3', '15'), - -('0', '10', '4', '0', '15'), -('0', '10', '4', '1', '15'), -('0', '10', '4', '2', '15'), -('0', '10', '4', '3', '15'), - -('0', '10', '5', '0', '50'), -('0', '10', '5', '1', '50'), -('0', '10', '5', '2', '50'), -('0', '10', '5', '3', '50'), - -('0', '10', '6', '0', '50'), -('0', '10', '6', '1', '50'), -('0', '10', '6', '2', '50'), -('0', '10', '6', '3', '50'), - -('0', '11', '0', '0', '0'), -('0', '11', '0', '1', '0'), -('0', '11', '0', '2', '0'), -('0', '11', '0', '3', '0'), - -('0', '11', '1', '0', '75'), -('0', '11', '1', '1', '75'), -('0', '11', '1', '2', '75'), -('0', '11', '1', '3', '75'), - -('0', '11', '2', '0', '50'), -('0', '11', '2', '1', '50'), -('0', '11', '2', '2', '50'), -('0', '11', '2', '3', '50'), - -('0', '11', '3', '0', '75'), -('0', '11', '3', '1', '75'), -('0', '11', '3', '2', '75'), -('0', '11', '3', '3', '75'), - -('0', '11', '4', '0', '75'), -('0', '11', '4', '1', '75'), -('0', '11', '4', '2', '75'), -('0', '11', '4', '3', '75'), - -('0', '11', '5', '0', '100'), -('0', '11', '5', '1', '100'), -('0', '11', '5', '2', '100'), -('0', '11', '5', '3', '100'), - -('0', '11', '6', '0', '100'), -('0', '11', '6', '1', '100'), -('0', '11', '6', '2', '100'), -('0', '11', '6', '3', '100'), - -('0', '12', '0', '0', '0'), -('0', '12', '0', '1', '0'), -('0', '12', '0', '2', '0'), -('0', '12', '0', '3', '0'), - -('0', '12', '1', '0', '75'), -('0', '12', '1', '1', '75'), -('0', '12', '1', '2', '75'), -('0', '12', '1', '3', '75'), - -('0', '12', '2', '0', '50'), -('0', '12', '2', '1', '50'), -('0', '12', '2', '2', '50'), -('0', '12', '2', '3', '50'), - -('0', '12', '3', '0', '75'), -('0', '12', '3', '1', '75'), -('0', '12', '3', '2', '75'), -('0', '12', '3', '3', '75'), - -('0', '12', '4', '0', '75'), -('0', '12', '4', '1', '75'), -('0', '12', '4', '2', '75'), -('0', '12', '4', '3', '75'), - -('0', '12', '5', '0', '100'), -('0', '12', '5', '1', '100'), -('0', '12', '5', '2', '100'), -('0', '12', '5', '3', '100'), - -('0', '12', '6', '0', '100'), -('0', '12', '6', '1', '100'), -('0', '12', '6', '2', '100'), -('0', '12', '6', '3', '100'), - -('0', '13', '0', '0', '0'), -('0', '13', '0', '1', '0'), -('0', '13', '0', '2', '0'), -('0', '13', '0', '3', '0'), - -('0', '13', '1', '0', '25'), -('0', '13', '1', '1', '25'), -('0', '13', '1', '2', '15'), -('0', '13', '1', '3', '15'), - -('0', '13', '2', '0', '15'), -('0', '13', '2', '1', '15'), -('0', '13', '2', '2', '0'), -('0', '13', '2', '3', '0'), - -('0', '13', '3', '0', '25'), -('0', '13', '3', '1', '25'), -('0', '13', '3', '2', '15'), -('0', '13', '3', '3', '15'), - -('0', '13', '4', '0', '50'), -('0', '13', '4', '1', '50'), -('0', '13', '4', '2', '15'), -('0', '13', '4', '3', '15'), - -('0', '13', '5', '0', '50'), -('0', '13', '5', '1', '50'), -('0', '13', '5', '2', '25'), -('0', '13', '5', '3', '25'), - -('0', '13', '6', '0', '50'), -('0', '13', '6', '1', '50'), -('0', '13', '6', '2', '25'), -('0', '13', '6', '3', '25'), - -('0', '14', '0', '0', '0'), -('0', '14', '0', '1', '0'), -('0', '14', '0', '2', '0'), -('0', '14', '0', '3', '0'), - -('0', '14', '1', '0', '15'), -('0', '14', '1', '1', '10'), -('0', '14', '1', '2', '5'), -('0', '14', '1', '3', '0'), - -('0', '14', '2', '0', '10'), -('0', '14', '2', '1', '5'), -('0', '14', '2', '2', '0'), -('0', '14', '2', '3', '0'), - -('0', '14', '3', '0', '15'), -('0', '14', '3', '1', '10'), -('0', '14', '3', '2', '5'), -('0', '14', '3', '3', '0'), - -('0', '14', '4', '0', '25'), -('0', '14', '4', '1', '15'), -('0', '14', '4', '2', '15'), -('0', '14', '4', '3', '5'), - -('0', '14', '5', '0', '50'), -('0', '14', '5', '1', '25'), -('0', '14', '5', '2', '25'), -('0', '14', '5', '3', '15'), - -('0', '14', '6', '0', '50'), -('0', '14', '6', '1', '25'), -('0', '14', '6', '2', '25'), -('0', '14', '6', '3', '15'), - -('0', '15', '0', '0', '0'), -('0', '15', '0', '1', '0'), -('0', '15', '0', '2', '0'), -('0', '15', '0', '3', '0'), - -('0', '15', '1', '0', '0'), -('0', '15', '1', '1', '0'), -('0', '15', '1', '2', '0'), -('0', '15', '1', '3', '0'), - -('0', '15', '2', '0', '0'), -('0', '15', '2', '1', '0'), -('0', '15', '2', '2', '0'), -('0', '15', '2', '3', '0'), - -('0', '15', '3', '0', '0'), -('0', '15', '3', '1', '0'), -('0', '15', '3', '2', '0'), -('0', '15', '3', '3', '0'), - -('0', '15', '4', '0', '0'), -('0', '15', '4', '1', '0'), -('0', '15', '4', '2', '0'), -('0', '15', '4', '3', '0'), - -('0', '15', '5', '0', '0'), -('0', '15', '5', '1', '0'), -('0', '15', '5', '2', '0'), -('0', '15', '5', '3', '0'), - -('0', '15', '6', '0', '0'), -('0', '15', '6', '1', '0'), -('0', '15', '6', '2', '0'), -('0', '15', '6', '3', '0'), - --- SpellType_HealIndex - -('1', '0', '0', '0', '0'), -('1', '0', '0', '1', '0'), -('1', '0', '0', '2', '0'), -('1', '0', '0', '3', '0'), - -('1', '0', '1', '0', '0'), -('1', '0', '1', '1', '0'), -('1', '0', '1', '2', '0'), -('1', '0', '1', '3', '0'), - -('1', '0', '2', '0', '0'), -('1', '0', '2', '1', '0'), -('1', '0', '2', '2', '0'), -('1', '0', '2', '3', '0'), - -('1', '0', '3', '0', '0'), -('1', '0', '3', '1', '0'), -('1', '0', '3', '2', '0'), -('1', '0', '3', '3', '0'), - -('1', '0', '4', '0', '0'), -('1', '0', '4', '1', '0'), -('1', '0', '4', '2', '0'), -('1', '0', '4', '3', '0'), - -('1', '0', '5', '0', '0'), -('1', '0', '5', '1', '0'), -('1', '0', '5', '2', '0'), -('1', '0', '5', '3', '0'), - -('1', '0', '6', '0', '0'), -('1', '0', '6', '1', '0'), -('1', '0', '6', '2', '0'), -('1', '0', '6', '3', '0'), - -('1', '1', '0', '0', '0'), -('1', '1', '0', '1', '0'), -('1', '1', '0', '2', '0'), -('1', '1', '0', '3', '0'), - -('1', '1', '1', '0', '100'), -('1', '1', '1', '1', '100'), -('1', '1', '1', '2', '100'), -('1', '1', '1', '3', '100'), - -('1', '1', '2', '0', '100'), -('1', '1', '2', '1', '100'), -('1', '1', '2', '2', '100'), -('1', '1', '2', '3', '100'), - -('1', '1', '3', '0', '100'), -('1', '1', '3', '1', '100'), -('1', '1', '3', '2', '100'), -('1', '1', '3', '3', '100'), - -('1', '1', '4', '0', '75'), -('1', '1', '4', '1', '75'), -('1', '1', '4', '2', '75'), -('1', '1', '4', '3', '75'), - -('1', '1', '5', '0', '50'), -('1', '1', '5', '1', '50'), -('1', '1', '5', '2', '50'), -('1', '1', '5', '3', '50'), - -('1', '1', '6', '0', '50'), -('1', '1', '6', '1', '50'), -('1', '1', '6', '2', '50'), -('1', '1', '6', '3', '50'), - -('1', '2', '0', '0', '0'), -('1', '2', '0', '1', '0'), -('1', '2', '0', '2', '0'), -('1', '2', '0', '3', '0'), - -('1', '2', '1', '0', '25'), -('1', '2', '1', '1', '100'), -('1', '2', '1', '2', '25'), -('1', '2', '1', '3', '100'), - -('1', '2', '2', '0', '15'), -('1', '2', '2', '1', '75'), -('1', '2', '2', '2', '15'), -('1', '2', '2', '3', '75'), - -('1', '2', '3', '0', '25'), -('1', '2', '3', '1', '100'), -('1', '2', '3', '2', '25'), -('1', '2', '3', '3', '100'), - -('1', '2', '4', '0', '15'), -('1', '2', '4', '1', '75'), -('1', '2', '4', '2', '15'), -('1', '2', '4', '3', '75'), - -('1', '2', '5', '0', '0'), -('1', '2', '5', '1', '50'), -('1', '2', '5', '2', '0'), -('1', '2', '5', '3', '50'), - -('1', '2', '6', '0', '0'), -('1', '2', '6', '1', '50'), -('1', '2', '6', '2', '0'), -('1', '2', '6', '3', '50'), - -('1', '3', '0', '0', '0'), -('1', '3', '0', '1', '0'), -('1', '3', '0', '2', '0'), -('1', '3', '0', '3', '0'), - -('1', '3', '1', '0', '25'), -('1', '3', '1', '1', '100'), -('1', '3', '1', '2', '25'), -('1', '3', '1', '3', '100'), - -('1', '3', '2', '0', '15'), -('1', '3', '2', '1', '75'), -('1', '3', '2', '2', '15'), -('1', '3', '2', '3', '75'), - -('1', '3', '3', '0', '25'), -('1', '3', '3', '1', '100'), -('1', '3', '3', '2', '25'), -('1', '3', '3', '3', '100'), - -('1', '3', '4', '0', '15'), -('1', '3', '4', '1', '75'), -('1', '3', '4', '2', '15'), -('1', '3', '4', '3', '75'), - -('1', '3', '5', '0', '0'), -('1', '3', '5', '1', '50'), -('1', '3', '5', '2', '0'), -('1', '3', '5', '3', '50'), - -('1', '3', '6', '0', '0'), -('1', '3', '6', '1', '50'), -('1', '3', '6', '2', '0'), -('1', '3', '6', '3', '50'), - -('1', '4', '0', '0', '0'), -('1', '4', '0', '1', '0'), -('1', '4', '0', '2', '0'), -('1', '4', '0', '3', '0'), - -('1', '4', '1', '0', '50'), -('1', '4', '1', '1', '50'), -('1', '4', '1', '2', '50'), -('1', '4', '1', '3', '50'), - -('1', '4', '2', '0', '25'), -('1', '4', '2', '1', '25'), -('1', '4', '2', '2', '25'), -('1', '4', '2', '3', '25'), - -('1', '4', '3', '0', '50'), -('1', '4', '3', '1', '50'), -('1', '4', '3', '2', '50'), -('1', '4', '3', '3', '50'), - -('1', '4', '4', '0', '25'), -('1', '4', '4', '1', '25'), -('1', '4', '4', '2', '25'), -('1', '4', '4', '3', '25'), - -('1', '4', '5', '0', '15'), -('1', '4', '5', '1', '15'), -('1', '4', '5', '2', '15'), -('1', '4', '5', '3', '15'), - -('1', '4', '6', '0', '15'), -('1', '4', '6', '1', '15'), -('1', '4', '6', '2', '15'), -('1', '4', '6', '3', '15'), - -('1', '5', '0', '0', '0'), -('1', '5', '0', '1', '0'), -('1', '5', '0', '2', '0'), -('1', '5', '0', '3', '0'), - -('1', '5', '1', '0', '25'), -('1', '5', '1', '1', '100'), -('1', '5', '1', '2', '25'), -('1', '5', '1', '3', '100'), - -('1', '5', '2', '0', '15'), -('1', '5', '2', '1', '100'), -('1', '5', '2', '2', '15'), -('1', '5', '2', '3', '100'), - -('1', '5', '3', '0', '25'), -('1', '5', '3', '1', '100'), -('1', '5', '3', '2', '25'), -('1', '5', '3', '3', '100'), - -('1', '5', '4', '0', '25'), -('1', '5', '4', '1', '75'), -('1', '5', '4', '2', '25'), -('1', '5', '4', '3', '75'), - -('1', '5', '5', '0', '10'), -('1', '5', '5', '1', '50'), -('1', '5', '5', '2', '10'), -('1', '5', '5', '3', '50'), - -('1', '5', '6', '0', '10'), -('1', '5', '6', '1', '50'), -('1', '5', '6', '2', '10'), -('1', '5', '6', '3', '50'), - -('1', '6', '0', '0', '0'), -('1', '6', '0', '1', '0'), -('1', '6', '0', '2', '0'), -('1', '6', '0', '3', '0'), - -('1', '6', '1', '0', '0'), -('1', '6', '1', '1', '0'), -('1', '6', '1', '2', '0'), -('1', '6', '1', '3', '0'), - -('1', '6', '2', '0', '0'), -('1', '6', '2', '1', '0'), -('1', '6', '2', '2', '0'), -('1', '6', '2', '3', '0'), - -('1', '6', '3', '0', '0'), -('1', '6', '3', '1', '0'), -('1', '6', '3', '2', '0'), -('1', '6', '3', '3', '0'), - -('1', '6', '4', '0', '0'), -('1', '6', '4', '1', '0'), -('1', '6', '4', '2', '0'), -('1', '6', '4', '3', '0'), - -('1', '6', '5', '0', '0'), -('1', '6', '5', '1', '0'), -('1', '6', '5', '2', '0'), -('1', '6', '5', '3', '0'), - -('1', '6', '6', '0', '0'), -('1', '6', '6', '1', '0'), -('1', '6', '6', '2', '0'), -('1', '6', '6', '3', '0'), - -('1', '7', '0', '0', '0'), -('1', '7', '0', '1', '0'), -('1', '7', '0', '2', '0'), -('1', '7', '0', '3', '0'), - -('1', '7', '1', '0', '0'), -('1', '7', '1', '1', '0'), -('1', '7', '1', '2', '0'), -('1', '7', '1', '3', '0'), - -('1', '7', '2', '0', '0'), -('1', '7', '2', '1', '0'), -('1', '7', '2', '2', '0'), -('1', '7', '2', '3', '0'), - -('1', '7', '3', '0', '0'), -('1', '7', '3', '1', '0'), -('1', '7', '3', '2', '0'), -('1', '7', '3', '3', '0'), - -('1', '7', '4', '0', '0'), -('1', '7', '4', '1', '0'), -('1', '7', '4', '2', '0'), -('1', '7', '4', '3', '0'), - -('1', '7', '5', '0', '0'), -('1', '7', '5', '1', '0'), -('1', '7', '5', '2', '0'), -('1', '7', '5', '3', '0'), - -('1', '7', '6', '0', '0'), -('1', '7', '6', '1', '0'), -('1', '7', '6', '2', '0'), -('1', '7', '6', '3', '0'), - -('1', '8', '0', '0', '0'), -('1', '8', '0', '1', '0'), -('1', '8', '0', '2', '0'), -('1', '8', '0', '3', '0'), - -('1', '8', '1', '0', '0'), -('1', '8', '1', '1', '0'), -('1', '8', '1', '2', '0'), -('1', '8', '1', '3', '0'), - -('1', '8', '2', '0', '0'), -('1', '8', '2', '1', '0'), -('1', '8', '2', '2', '0'), -('1', '8', '2', '3', '0'), - -('1', '8', '3', '0', '0'), -('1', '8', '3', '1', '0'), -('1', '8', '3', '2', '0'), -('1', '8', '3', '3', '0'), - -('1', '8', '4', '0', '0'), -('1', '8', '4', '1', '0'), -('1', '8', '4', '2', '0'), -('1', '8', '4', '3', '0'), - -('1', '8', '5', '0', '0'), -('1', '8', '5', '1', '0'), -('1', '8', '5', '2', '0'), -('1', '8', '5', '3', '0'), - -('1', '8', '6', '0', '0'), -('1', '8', '6', '1', '0'), -('1', '8', '6', '2', '0'), -('1', '8', '6', '3', '0'), - -('1', '9', '0', '0', '0'), -('1', '9', '0', '1', '0'), -('1', '9', '0', '2', '0'), -('1', '9', '0', '3', '0'), - -('1', '9', '1', '0', '25'), -('1', '9', '1', '1', '100'), -('1', '9', '1', '2', '25'), -('1', '9', '1', '3', '100'), - -('1', '9', '2', '0', '15'), -('1', '9', '2', '1', '100'), -('1', '9', '2', '2', '15'), -('1', '9', '2', '3', '100'), - -('1', '9', '3', '0', '25'), -('1', '9', '3', '1', '100'), -('1', '9', '3', '2', '25'), -('1', '9', '3', '3', '100'), - -('1', '9', '4', '0', '25'), -('1', '9', '4', '1', '75'), -('1', '9', '4', '2', '25'), -('1', '9', '4', '3', '75'), - -('1', '9', '5', '0', '10'), -('1', '9', '5', '1', '50'), -('1', '9', '5', '2', '10'), -('1', '9', '5', '3', '50'), - -('1', '9', '6', '0', '10'), -('1', '9', '6', '1', '50'), -('1', '9', '6', '2', '10'), -('1', '9', '6', '3', '50'), - -('1', '10', '0', '0', '0'), -('1', '10', '0', '1', '0'), -('1', '10', '0', '2', '0'), -('1', '10', '0', '3', '0'), - -('1', '10', '1', '0', '100'), -('1', '10', '1', '1', '100'), -('1', '10', '1', '2', '100'), -('1', '10', '1', '3', '100'), - -('1', '10', '2', '0', '50'), -('1', '10', '2', '1', '50'), -('1', '10', '2', '2', '50'), -('1', '10', '2', '3', '50'), - -('1', '10', '3', '0', '100'), -('1', '10', '3', '1', '100'), -('1', '10', '3', '2', '100'), -('1', '10', '3', '3', '100'), - -('1', '10', '4', '0', '50'), -('1', '10', '4', '1', '50'), -('1', '10', '4', '2', '50'), -('1', '10', '4', '3', '50'), - -('1', '10', '5', '0', '25'), -('1', '10', '5', '1', '25'), -('1', '10', '5', '2', '25'), -('1', '10', '5', '3', '25'), - -('1', '10', '6', '0', '25'), -('1', '10', '6', '1', '25'), -('1', '10', '6', '2', '25'), -('1', '10', '6', '3', '25'), - -('1', '11', '0', '0', '0'), -('1', '11', '0', '1', '0'), -('1', '11', '0', '2', '0'), -('1', '11', '0', '3', '0'), - -('1', '11', '1', '0', '0'), -('1', '11', '1', '1', '0'), -('1', '11', '1', '2', '0'), -('1', '11', '1', '3', '0'), - -('1', '11', '2', '0', '0'), -('1', '11', '2', '1', '0'), -('1', '11', '2', '2', '0'), -('1', '11', '2', '3', '0'), - -('1', '11', '3', '0', '0'), -('1', '11', '3', '1', '0'), -('1', '11', '3', '2', '0'), -('1', '11', '3', '3', '0'), - -('1', '11', '4', '0', '0'), -('1', '11', '4', '1', '0'), -('1', '11', '4', '2', '0'), -('1', '11', '4', '3', '0'), - -('1', '11', '5', '0', '0'), -('1', '11', '5', '1', '0'), -('1', '11', '5', '2', '0'), -('1', '11', '5', '3', '0'), - -('1', '11', '6', '0', '0'), -('1', '11', '6', '1', '0'), -('1', '11', '6', '2', '0'), -('1', '11', '6', '3', '0'), - -('1', '12', '0', '0', '0'), -('1', '12', '0', '1', '0'), -('1', '12', '0', '2', '0'), -('1', '12', '0', '3', '0'), - -('1', '12', '1', '0', '100'), -('1', '12', '1', '1', '100'), -('1', '12', '1', '2', '100'), -('1', '12', '1', '3', '100'), - -('1', '12', '2', '0', '50'), -('1', '12', '2', '1', '50'), -('1', '12', '2', '2', '50'), -('1', '12', '2', '3', '50'), - -('1', '12', '3', '0', '100'), -('1', '12', '3', '1', '100'), -('1', '12', '3', '2', '100'), -('1', '12', '3', '3', '100'), - -('1', '12', '4', '0', '50'), -('1', '12', '4', '1', '50'), -('1', '12', '4', '2', '50'), -('1', '12', '4', '3', '50'), - -('1', '12', '5', '0', '25'), -('1', '12', '5', '1', '25'), -('1', '12', '5', '2', '25'), -('1', '12', '5', '3', '25'), - -('1', '12', '6', '0', '25'), -('1', '12', '6', '1', '25'), -('1', '12', '6', '2', '25'), -('1', '12', '6', '3', '25'), - -('1', '13', '0', '0', '0'), -('1', '13', '0', '1', '0'), -('1', '13', '0', '2', '0'), -('1', '13', '0', '3', '0'), - -('1', '13', '1', '0', '0'), -('1', '13', '1', '1', '0'), -('1', '13', '1', '2', '0'), -('1', '13', '1', '3', '0'), - -('1', '13', '2', '0', '0'), -('1', '13', '2', '1', '0'), -('1', '13', '2', '2', '0'), -('1', '13', '2', '3', '0'), - -('1', '13', '3', '0', '0'), -('1', '13', '3', '1', '0'), -('1', '13', '3', '2', '0'), -('1', '13', '3', '3', '0'), - -('1', '13', '4', '0', '0'), -('1', '13', '4', '1', '0'), -('1', '13', '4', '2', '0'), -('1', '13', '4', '3', '0'), - -('1', '13', '5', '0', '0'), -('1', '13', '5', '1', '0'), -('1', '13', '5', '2', '0'), -('1', '13', '5', '3', '0'), - -('1', '13', '6', '0', '0'), -('1', '13', '6', '1', '0'), -('1', '13', '6', '2', '0'), -('1', '13', '6', '3', '0'), - -('1', '14', '0', '0', '0'), -('1', '14', '0', '1', '0'), -('1', '14', '0', '2', '0'), -('1', '14', '0', '3', '0'), - -('1', '14', '1', '0', '25'), -('1', '14', '1', '1', '100'), -('1', '14', '1', '2', '25'), -('1', '14', '1', '3', '100'), - -('1', '14', '2', '0', '15'), -('1', '14', '2', '1', '75'), -('1', '14', '2', '2', '15'), -('1', '14', '2', '3', '75'), - -('1', '14', '3', '0', '25'), -('1', '14', '3', '1', '100'), -('1', '14', '3', '2', '25'), -('1', '14', '3', '3', '100'), - -('1', '14', '4', '0', '15'), -('1', '14', '4', '1', '75'), -('1', '14', '4', '2', '15'), -('1', '14', '4', '3', '75'), - -('1', '14', '5', '0', '0'), -('1', '14', '5', '1', '50'), -('1', '14', '5', '2', '0'), -('1', '14', '5', '3', '50'), - -('1', '14', '6', '0', '0'), -('1', '14', '6', '1', '50'), -('1', '14', '6', '2', '0'), -('1', '14', '6', '3', '50'), - -('1', '15', '0', '0', '0'), -('1', '15', '0', '1', '0'), -('1', '15', '0', '2', '0'), -('1', '15', '0', '3', '0'), - -('1', '15', '1', '0', '0'), -('1', '15', '1', '1', '0'), -('1', '15', '1', '2', '0'), -('1', '15', '1', '3', '0'), - -('1', '15', '2', '0', '0'), -('1', '15', '2', '1', '0'), -('1', '15', '2', '2', '0'), -('1', '15', '2', '3', '0'), - -('1', '15', '3', '0', '0'), -('1', '15', '3', '1', '0'), -('1', '15', '3', '2', '0'), -('1', '15', '3', '3', '0'), - -('1', '15', '4', '0', '0'), -('1', '15', '4', '1', '0'), -('1', '15', '4', '2', '0'), -('1', '15', '4', '3', '0'), - -('1', '15', '5', '0', '0'), -('1', '15', '5', '1', '0'), -('1', '15', '5', '2', '0'), -('1', '15', '5', '3', '0'), - -('1', '15', '6', '0', '0'), -('1', '15', '6', '1', '0'), -('1', '15', '6', '2', '0'), -('1', '15', '6', '3', '0'), - --- SpellType_RootIndex - -('2', '0', '0', '0', '0'), -('2', '0', '0', '1', '0'), -('2', '0', '0', '2', '0'), -('2', '0', '0', '3', '0'), - -('2', '0', '1', '0', '0'), -('2', '0', '1', '1', '0'), -('2', '0', '1', '2', '0'), -('2', '0', '1', '3', '0'), - -('2', '0', '2', '0', '0'), -('2', '0', '2', '1', '0'), -('2', '0', '2', '2', '0'), -('2', '0', '2', '3', '0'), - -('2', '0', '3', '0', '0'), -('2', '0', '3', '1', '0'), -('2', '0', '3', '2', '0'), -('2', '0', '3', '3', '0'), - -('2', '0', '4', '0', '0'), -('2', '0', '4', '1', '0'), -('2', '0', '4', '2', '0'), -('2', '0', '4', '3', '0'), - -('2', '0', '5', '0', '0'), -('2', '0', '5', '1', '0'), -('2', '0', '5', '2', '0'), -('2', '0', '5', '3', '0'), - -('2', '0', '6', '0', '0'), -('2', '0', '6', '1', '0'), -('2', '0', '6', '2', '0'), -('2', '0', '6', '3', '0'), - -('2', '1', '0', '0', '0'), -('2', '1', '0', '1', '0'), -('2', '1', '0', '2', '0'), -('2', '1', '0', '3', '0'), - -('2', '1', '1', '0', '0'), -('2', '1', '1', '1', '0'), -('2', '1', '1', '2', '0'), -('2', '1', '1', '3', '0'), - -('2', '1', '2', '0', '0'), -('2', '1', '2', '1', '0'), -('2', '1', '2', '2', '0'), -('2', '1', '2', '3', '0'), - -('2', '1', '3', '0', '0'), -('2', '1', '3', '1', '0'), -('2', '1', '3', '2', '0'), -('2', '1', '3', '3', '0'), - -('2', '1', '4', '0', '0'), -('2', '1', '4', '1', '0'), -('2', '1', '4', '2', '0'), -('2', '1', '4', '3', '0'), - -('2', '1', '5', '0', '0'), -('2', '1', '5', '1', '0'), -('2', '1', '5', '2', '0'), -('2', '1', '5', '3', '0'), - -('2', '1', '6', '0', '0'), -('2', '1', '6', '1', '0'), -('2', '1', '6', '2', '0'), -('2', '1', '6', '3', '0'), - -('2', '2', '0', '0', '0'), -('2', '2', '0', '1', '0'), -('2', '2', '0', '2', '0'), -('2', '2', '0', '3', '0'), - -('2', '2', '1', '0', '0'), -('2', '2', '1', '1', '0'), -('2', '2', '1', '2', '0'), -('2', '2', '1', '3', '0'), - -('2', '2', '2', '0', '0'), -('2', '2', '2', '1', '0'), -('2', '2', '2', '2', '0'), -('2', '2', '2', '3', '0'), - -('2', '2', '3', '0', '0'), -('2', '2', '3', '1', '0'), -('2', '2', '3', '2', '0'), -('2', '2', '3', '3', '0'), - -('2', '2', '4', '0', '0'), -('2', '2', '4', '1', '0'), -('2', '2', '4', '2', '0'), -('2', '2', '4', '3', '0'), - -('2', '2', '5', '0', '0'), -('2', '2', '5', '1', '0'), -('2', '2', '5', '2', '0'), -('2', '2', '5', '3', '0'), - -('2', '2', '6', '0', '0'), -('2', '2', '6', '1', '0'), -('2', '2', '6', '2', '0'), -('2', '2', '6', '3', '0'), - -('2', '3', '0', '0', '0'), -('2', '3', '0', '1', '0'), -('2', '3', '0', '2', '0'), -('2', '3', '0', '3', '0'), - -('2', '3', '1', '0', '0'), -('2', '3', '1', '1', '0'), -('2', '3', '1', '2', '0'), -('2', '3', '1', '3', '0'), - -('2', '3', '2', '0', '0'), -('2', '3', '2', '1', '0'), -('2', '3', '2', '2', '0'), -('2', '3', '2', '3', '0'), - -('2', '3', '3', '0', '0'), -('2', '3', '3', '1', '0'), -('2', '3', '3', '2', '0'), -('2', '3', '3', '3', '0'), - -('2', '3', '4', '0', '0'), -('2', '3', '4', '1', '0'), -('2', '3', '4', '2', '0'), -('2', '3', '4', '3', '0'), - -('2', '3', '5', '0', '0'), -('2', '3', '5', '1', '0'), -('2', '3', '5', '2', '0'), -('2', '3', '5', '3', '0'), - -('2', '3', '6', '0', '0'), -('2', '3', '6', '1', '0'), -('2', '3', '6', '2', '0'), -('2', '3', '6', '3', '0'), - -('2', '4', '0', '0', '0'), -('2', '4', '0', '1', '0'), -('2', '4', '0', '2', '0'), -('2', '4', '0', '3', '0'), - -('2', '4', '1', '0', '0'), -('2', '4', '1', '1', '0'), -('2', '4', '1', '2', '0'), -('2', '4', '1', '3', '0'), - -('2', '4', '2', '0', '0'), -('2', '4', '2', '1', '0'), -('2', '4', '2', '2', '0'), -('2', '4', '2', '3', '0'), - -('2', '4', '3', '0', '0'), -('2', '4', '3', '1', '0'), -('2', '4', '3', '2', '0'), -('2', '4', '3', '3', '0'), - -('2', '4', '4', '0', '0'), -('2', '4', '4', '1', '0'), -('2', '4', '4', '2', '0'), -('2', '4', '4', '3', '0'), - -('2', '4', '5', '0', '0'), -('2', '4', '5', '1', '0'), -('2', '4', '5', '2', '0'), -('2', '4', '5', '3', '0'), - -('2', '4', '6', '0', '0'), -('2', '4', '6', '1', '0'), -('2', '4', '6', '2', '0'), -('2', '4', '6', '3', '0'), - -('2', '5', '0', '0', '0'), -('2', '5', '0', '1', '0'), -('2', '5', '0', '2', '0'), -('2', '5', '0', '3', '0'), - -('2', '5', '1', '0', '0'), -('2', '5', '1', '1', '0'), -('2', '5', '1', '2', '0'), -('2', '5', '1', '3', '0'), - -('2', '5', '2', '0', '0'), -('2', '5', '2', '1', '0'), -('2', '5', '2', '2', '0'), -('2', '5', '2', '3', '0'), - -('2', '5', '3', '0', '0'), -('2', '5', '3', '1', '0'), -('2', '5', '3', '2', '0'), -('2', '5', '3', '3', '0'), - -('2', '5', '4', '0', '0'), -('2', '5', '4', '1', '0'), -('2', '5', '4', '2', '0'), -('2', '5', '4', '3', '0'), - -('2', '5', '5', '0', '0'), -('2', '5', '5', '1', '0'), -('2', '5', '5', '2', '0'), -('2', '5', '5', '3', '0'), - -('2', '5', '6', '0', '0'), -('2', '5', '6', '1', '0'), -('2', '5', '6', '2', '0'), -('2', '5', '6', '3', '0'), - -('2', '6', '0', '0', '0'), -('2', '6', '0', '1', '0'), -('2', '6', '0', '2', '0'), -('2', '6', '0', '3', '0'), - -('2', '6', '1', '0', '0'), -('2', '6', '1', '1', '0'), -('2', '6', '1', '2', '0'), -('2', '6', '1', '3', '0'), - -('2', '6', '2', '0', '0'), -('2', '6', '2', '1', '0'), -('2', '6', '2', '2', '0'), -('2', '6', '2', '3', '0'), - -('2', '6', '3', '0', '0'), -('2', '6', '3', '1', '0'), -('2', '6', '3', '2', '0'), -('2', '6', '3', '3', '0'), - -('2', '6', '4', '0', '0'), -('2', '6', '4', '1', '0'), -('2', '6', '4', '2', '0'), -('2', '6', '4', '3', '0'), - -('2', '6', '5', '0', '0'), -('2', '6', '5', '1', '0'), -('2', '6', '5', '2', '0'), -('2', '6', '5', '3', '0'), - -('2', '6', '6', '0', '0'), -('2', '6', '6', '1', '0'), -('2', '6', '6', '2', '0'), -('2', '6', '6', '3', '0'), - -('2', '7', '0', '0', '0'), -('2', '7', '0', '1', '0'), -('2', '7', '0', '2', '0'), -('2', '7', '0', '3', '0'), - -('2', '7', '1', '0', '0'), -('2', '7', '1', '1', '0'), -('2', '7', '1', '2', '0'), -('2', '7', '1', '3', '0'), - -('2', '7', '2', '0', '0'), -('2', '7', '2', '1', '0'), -('2', '7', '2', '2', '0'), -('2', '7', '2', '3', '0'), - -('2', '7', '3', '0', '0'), -('2', '7', '3', '1', '0'), -('2', '7', '3', '2', '0'), -('2', '7', '3', '3', '0'), - -('2', '7', '4', '0', '0'), -('2', '7', '4', '1', '0'), -('2', '7', '4', '2', '0'), -('2', '7', '4', '3', '0'), - -('2', '7', '5', '0', '0'), -('2', '7', '5', '1', '0'), -('2', '7', '5', '2', '0'), -('2', '7', '5', '3', '0'), - -('2', '7', '6', '0', '0'), -('2', '7', '6', '1', '0'), -('2', '7', '6', '2', '0'), -('2', '7', '6', '3', '0'), - -('2', '8', '0', '0', '0'), -('2', '8', '0', '1', '0'), -('2', '8', '0', '2', '0'), -('2', '8', '0', '3', '0'), - -('2', '8', '1', '0', '0'), -('2', '8', '1', '1', '0'), -('2', '8', '1', '2', '0'), -('2', '8', '1', '3', '0'), - -('2', '8', '2', '0', '0'), -('2', '8', '2', '1', '0'), -('2', '8', '2', '2', '0'), -('2', '8', '2', '3', '0'), - -('2', '8', '3', '0', '0'), -('2', '8', '3', '1', '0'), -('2', '8', '3', '2', '0'), -('2', '8', '3', '3', '0'), - -('2', '8', '4', '0', '0'), -('2', '8', '4', '1', '0'), -('2', '8', '4', '2', '0'), -('2', '8', '4', '3', '0'), - -('2', '8', '5', '0', '0'), -('2', '8', '5', '1', '0'), -('2', '8', '5', '2', '0'), -('2', '8', '5', '3', '0'), - -('2', '8', '6', '0', '0'), -('2', '8', '6', '1', '0'), -('2', '8', '6', '2', '0'), -('2', '8', '6', '3', '0'), - -('2', '9', '0', '0', '0'), -('2', '9', '0', '1', '0'), -('2', '9', '0', '2', '0'), -('2', '9', '0', '3', '0'), - -('2', '9', '1', '0', '0'), -('2', '9', '1', '1', '0'), -('2', '9', '1', '2', '0'), -('2', '9', '1', '3', '0'), - -('2', '9', '2', '0', '0'), -('2', '9', '2', '1', '0'), -('2', '9', '2', '2', '0'), -('2', '9', '2', '3', '0'), - -('2', '9', '3', '0', '0'), -('2', '9', '3', '1', '0'), -('2', '9', '3', '2', '0'), -('2', '9', '3', '3', '0'), - -('2', '9', '4', '0', '0'), -('2', '9', '4', '1', '0'), -('2', '9', '4', '2', '0'), -('2', '9', '4', '3', '0'), - -('2', '9', '5', '0', '0'), -('2', '9', '5', '1', '0'), -('2', '9', '5', '2', '0'), -('2', '9', '5', '3', '0'), - -('2', '9', '6', '0', '0'), -('2', '9', '6', '1', '0'), -('2', '9', '6', '2', '0'), -('2', '9', '6', '3', '0'), - -('2', '10', '0', '0', '0'), -('2', '10', '0', '1', '0'), -('2', '10', '0', '2', '0'), -('2', '10', '0', '3', '0'), - -('2', '10', '1', '0', '0'), -('2', '10', '1', '1', '0'), -('2', '10', '1', '2', '0'), -('2', '10', '1', '3', '0'), - -('2', '10', '2', '0', '0'), -('2', '10', '2', '1', '0'), -('2', '10', '2', '2', '0'), -('2', '10', '2', '3', '0'), - -('2', '10', '3', '0', '0'), -('2', '10', '3', '1', '0'), -('2', '10', '3', '2', '0'), -('2', '10', '3', '3', '0'), - -('2', '10', '4', '0', '0'), -('2', '10', '4', '1', '0'), -('2', '10', '4', '2', '0'), -('2', '10', '4', '3', '0'), - -('2', '10', '5', '0', '0'), -('2', '10', '5', '1', '0'), -('2', '10', '5', '2', '0'), -('2', '10', '5', '3', '0'), - -('2', '10', '6', '0', '0'), -('2', '10', '6', '1', '0'), -('2', '10', '6', '2', '0'), -('2', '10', '6', '3', '0'), - -('2', '11', '0', '0', '0'), -('2', '11', '0', '1', '0'), -('2', '11', '0', '2', '0'), -('2', '11', '0', '3', '0'), - -('2', '11', '1', '0', '0'), -('2', '11', '1', '1', '0'), -('2', '11', '1', '2', '0'), -('2', '11', '1', '3', '0'), - -('2', '11', '2', '0', '0'), -('2', '11', '2', '1', '0'), -('2', '11', '2', '2', '0'), -('2', '11', '2', '3', '0'), - -('2', '11', '3', '0', '0'), -('2', '11', '3', '1', '0'), -('2', '11', '3', '2', '0'), -('2', '11', '3', '3', '0'), - -('2', '11', '4', '0', '0'), -('2', '11', '4', '1', '0'), -('2', '11', '4', '2', '0'), -('2', '11', '4', '3', '0'), - -('2', '11', '5', '0', '0'), -('2', '11', '5', '1', '0'), -('2', '11', '5', '2', '0'), -('2', '11', '5', '3', '0'), - -('2', '11', '6', '0', '0'), -('2', '11', '6', '1', '0'), -('2', '11', '6', '2', '0'), -('2', '11', '6', '3', '0'), - -('2', '12', '0', '0', '0'), -('2', '12', '0', '1', '0'), -('2', '12', '0', '2', '0'), -('2', '12', '0', '3', '0'), - -('2', '12', '1', '0', '0'), -('2', '12', '1', '1', '0'), -('2', '12', '1', '2', '0'), -('2', '12', '1', '3', '0'), - -('2', '12', '2', '0', '0'), -('2', '12', '2', '1', '0'), -('2', '12', '2', '2', '0'), -('2', '12', '2', '3', '0'), - -('2', '12', '3', '0', '0'), -('2', '12', '3', '1', '0'), -('2', '12', '3', '2', '0'), -('2', '12', '3', '3', '0'), - -('2', '12', '4', '0', '0'), -('2', '12', '4', '1', '0'), -('2', '12', '4', '2', '0'), -('2', '12', '4', '3', '0'), - -('2', '12', '5', '0', '0'), -('2', '12', '5', '1', '0'), -('2', '12', '5', '2', '0'), -('2', '12', '5', '3', '0'), - -('2', '12', '6', '0', '0'), -('2', '12', '6', '1', '0'), -('2', '12', '6', '2', '0'), -('2', '12', '6', '3', '0'), - -('2', '13', '0', '0', '0'), -('2', '13', '0', '1', '0'), -('2', '13', '0', '2', '0'), -('2', '13', '0', '3', '0'), - -('2', '13', '1', '0', '0'), -('2', '13', '1', '1', '0'), -('2', '13', '1', '2', '0'), -('2', '13', '1', '3', '0'), - -('2', '13', '2', '0', '0'), -('2', '13', '2', '1', '0'), -('2', '13', '2', '2', '0'), -('2', '13', '2', '3', '0'), - -('2', '13', '3', '0', '0'), -('2', '13', '3', '1', '0'), -('2', '13', '3', '2', '0'), -('2', '13', '3', '3', '0'), - -('2', '13', '4', '0', '0'), -('2', '13', '4', '1', '0'), -('2', '13', '4', '2', '0'), -('2', '13', '4', '3', '0'), - -('2', '13', '5', '0', '0'), -('2', '13', '5', '1', '0'), -('2', '13', '5', '2', '0'), -('2', '13', '5', '3', '0'), - -('2', '13', '6', '0', '0'), -('2', '13', '6', '1', '0'), -('2', '13', '6', '2', '0'), -('2', '13', '6', '3', '0'), - -('2', '14', '0', '0', '0'), -('2', '14', '0', '1', '0'), -('2', '14', '0', '2', '0'), -('2', '14', '0', '3', '0'), - -('2', '14', '1', '0', '0'), -('2', '14', '1', '1', '0'), -('2', '14', '1', '2', '0'), -('2', '14', '1', '3', '0'), - -('2', '14', '2', '0', '0'), -('2', '14', '2', '1', '0'), -('2', '14', '2', '2', '0'), -('2', '14', '2', '3', '0'), - -('2', '14', '3', '0', '0'), -('2', '14', '3', '1', '0'), -('2', '14', '3', '2', '0'), -('2', '14', '3', '3', '0'), - -('2', '14', '4', '0', '0'), -('2', '14', '4', '1', '0'), -('2', '14', '4', '2', '0'), -('2', '14', '4', '3', '0'), - -('2', '14', '5', '0', '0'), -('2', '14', '5', '1', '0'), -('2', '14', '5', '2', '0'), -('2', '14', '5', '3', '0'), - -('2', '14', '6', '0', '0'), -('2', '14', '6', '1', '0'), -('2', '14', '6', '2', '0'), -('2', '14', '6', '3', '0'), - -('2', '15', '0', '0', '0'), -('2', '15', '0', '1', '0'), -('2', '15', '0', '2', '0'), -('2', '15', '0', '3', '0'), - -('2', '15', '1', '0', '0'), -('2', '15', '1', '1', '0'), -('2', '15', '1', '2', '0'), -('2', '15', '1', '3', '0'), - -('2', '15', '2', '0', '0'), -('2', '15', '2', '1', '0'), -('2', '15', '2', '2', '0'), -('2', '15', '2', '3', '0'), - -('2', '15', '3', '0', '0'), -('2', '15', '3', '1', '0'), -('2', '15', '3', '2', '0'), -('2', '15', '3', '3', '0'), - -('2', '15', '4', '0', '0'), -('2', '15', '4', '1', '0'), -('2', '15', '4', '2', '0'), -('2', '15', '4', '3', '0'), - -('2', '15', '5', '0', '0'), -('2', '15', '5', '1', '0'), -('2', '15', '5', '2', '0'), -('2', '15', '5', '3', '0'), - -('2', '15', '6', '0', '0'), -('2', '15', '6', '1', '0'), -('2', '15', '6', '2', '0'), -('2', '15', '6', '3', '0'), - --- SpellType_BuffIndex - -('3', '0', '0', '0', '0'), -('3', '0', '0', '1', '0'), -('3', '0', '0', '2', '0'), -('3', '0', '0', '3', '0'), - -('3', '0', '1', '0', '0'), -('3', '0', '1', '1', '0'), -('3', '0', '1', '2', '0'), -('3', '0', '1', '3', '0'), - -('3', '0', '2', '0', '0'), -('3', '0', '2', '1', '0'), -('3', '0', '2', '2', '0'), -('3', '0', '2', '3', '0'), - -('3', '0', '3', '0', '0'), -('3', '0', '3', '1', '0'), -('3', '0', '3', '2', '0'), -('3', '0', '3', '3', '0'), - -('3', '0', '4', '0', '0'), -('3', '0', '4', '1', '0'), -('3', '0', '4', '2', '0'), -('3', '0', '4', '3', '0'), - -('3', '0', '5', '0', '0'), -('3', '0', '5', '1', '0'), -('3', '0', '5', '2', '0'), -('3', '0', '5', '3', '0'), - -('3', '0', '6', '0', '0'), -('3', '0', '6', '1', '0'), -('3', '0', '6', '2', '0'), -('3', '0', '6', '3', '0'), - -('3', '1', '0', '0', '0'), -('3', '1', '0', '1', '0'), -('3', '1', '0', '2', '0'), -('3', '1', '0', '3', '0'), - -('3', '1', '1', '0', '0'), -('3', '1', '1', '1', '0'), -('3', '1', '1', '2', '0'), -('3', '1', '1', '3', '0'), - -('3', '1', '2', '0', '0'), -('3', '1', '2', '1', '0'), -('3', '1', '2', '2', '0'), -('3', '1', '2', '3', '0'), - -('3', '1', '3', '0', '0'), -('3', '1', '3', '1', '0'), -('3', '1', '3', '2', '0'), -('3', '1', '3', '3', '0'), - -('3', '1', '4', '0', '0'), -('3', '1', '4', '1', '0'), -('3', '1', '4', '2', '0'), -('3', '1', '4', '3', '0'), - -('3', '1', '5', '0', '0'), -('3', '1', '5', '1', '0'), -('3', '1', '5', '2', '0'), -('3', '1', '5', '3', '0'), - -('3', '1', '6', '0', '0'), -('3', '1', '6', '1', '0'), -('3', '1', '6', '2', '0'), -('3', '1', '6', '3', '0'), - -('3', '2', '0', '0', '0'), -('3', '2', '0', '1', '0'), -('3', '2', '0', '2', '0'), -('3', '2', '0', '3', '0'), - -('3', '2', '1', '0', '0'), -('3', '2', '1', '1', '0'), -('3', '2', '1', '2', '0'), -('3', '2', '1', '3', '0'), - -('3', '2', '2', '0', '0'), -('3', '2', '2', '1', '0'), -('3', '2', '2', '2', '0'), -('3', '2', '2', '3', '0'), - -('3', '2', '3', '0', '0'), -('3', '2', '3', '1', '0'), -('3', '2', '3', '2', '0'), -('3', '2', '3', '3', '0'), - -('3', '2', '4', '0', '0'), -('3', '2', '4', '1', '0'), -('3', '2', '4', '2', '0'), -('3', '2', '4', '3', '0'), - -('3', '2', '5', '0', '0'), -('3', '2', '5', '1', '0'), -('3', '2', '5', '2', '0'), -('3', '2', '5', '3', '0'), - -('3', '2', '6', '0', '0'), -('3', '2', '6', '1', '0'), -('3', '2', '6', '2', '0'), -('3', '2', '6', '3', '0'), - -('3', '3', '0', '0', '0'), -('3', '3', '0', '1', '0'), -('3', '3', '0', '2', '0'), -('3', '3', '0', '3', '0'), - -('3', '3', '1', '0', '0'), -('3', '3', '1', '1', '0'), -('3', '3', '1', '2', '0'), -('3', '3', '1', '3', '0'), - -('3', '3', '2', '0', '0'), -('3', '3', '2', '1', '0'), -('3', '3', '2', '2', '0'), -('3', '3', '2', '3', '0'), - -('3', '3', '3', '0', '0'), -('3', '3', '3', '1', '0'), -('3', '3', '3', '2', '0'), -('3', '3', '3', '3', '0'), - -('3', '3', '4', '0', '0'), -('3', '3', '4', '1', '0'), -('3', '3', '4', '2', '0'), -('3', '3', '4', '3', '0'), - -('3', '3', '5', '0', '0'), -('3', '3', '5', '1', '0'), -('3', '3', '5', '2', '0'), -('3', '3', '5', '3', '0'), - -('3', '3', '6', '0', '0'), -('3', '3', '6', '1', '0'), -('3', '3', '6', '2', '0'), -('3', '3', '6', '3', '0'), - -('3', '4', '0', '0', '0'), -('3', '4', '0', '1', '0'), -('3', '4', '0', '2', '0'), -('3', '4', '0', '3', '0'), - -('3', '4', '1', '0', '0'), -('3', '4', '1', '1', '0'), -('3', '4', '1', '2', '0'), -('3', '4', '1', '3', '0'), - -('3', '4', '2', '0', '0'), -('3', '4', '2', '1', '0'), -('3', '4', '2', '2', '0'), -('3', '4', '2', '3', '0'), - -('3', '4', '3', '0', '0'), -('3', '4', '3', '1', '0'), -('3', '4', '3', '2', '0'), -('3', '4', '3', '3', '0'), - -('3', '4', '4', '0', '0'), -('3', '4', '4', '1', '0'), -('3', '4', '4', '2', '0'), -('3', '4', '4', '3', '0'), - -('3', '4', '5', '0', '0'), -('3', '4', '5', '1', '0'), -('3', '4', '5', '2', '0'), -('3', '4', '5', '3', '0'), - -('3', '4', '6', '0', '0'), -('3', '4', '6', '1', '0'), -('3', '4', '6', '2', '0'), -('3', '4', '6', '3', '0'), - -('3', '5', '0', '0', '0'), -('3', '5', '0', '1', '0'), -('3', '5', '0', '2', '0'), -('3', '5', '0', '3', '0'), - -('3', '5', '1', '0', '0'), -('3', '5', '1', '1', '0'), -('3', '5', '1', '2', '0'), -('3', '5', '1', '3', '0'), - -('3', '5', '2', '0', '0'), -('3', '5', '2', '1', '0'), -('3', '5', '2', '2', '0'), -('3', '5', '2', '3', '0'), - -('3', '5', '3', '0', '0'), -('3', '5', '3', '1', '0'), -('3', '5', '3', '2', '0'), -('3', '5', '3', '3', '0'), - -('3', '5', '4', '0', '0'), -('3', '5', '4', '1', '0'), -('3', '5', '4', '2', '0'), -('3', '5', '4', '3', '0'), - -('3', '5', '5', '0', '0'), -('3', '5', '5', '1', '0'), -('3', '5', '5', '2', '0'), -('3', '5', '5', '3', '0'), - -('3', '5', '6', '0', '0'), -('3', '5', '6', '1', '0'), -('3', '5', '6', '2', '0'), -('3', '5', '6', '3', '0'), - -('3', '6', '0', '0', '0'), -('3', '6', '0', '1', '0'), -('3', '6', '0', '2', '0'), -('3', '6', '0', '3', '0'), - -('3', '6', '1', '0', '0'), -('3', '6', '1', '1', '0'), -('3', '6', '1', '2', '0'), -('3', '6', '1', '3', '0'), - -('3', '6', '2', '0', '0'), -('3', '6', '2', '1', '0'), -('3', '6', '2', '2', '0'), -('3', '6', '2', '3', '0'), - -('3', '6', '3', '0', '0'), -('3', '6', '3', '1', '0'), -('3', '6', '3', '2', '0'), -('3', '6', '3', '3', '0'), - -('3', '6', '4', '0', '0'), -('3', '6', '4', '1', '0'), -('3', '6', '4', '2', '0'), -('3', '6', '4', '3', '0'), - -('3', '6', '5', '0', '0'), -('3', '6', '5', '1', '0'), -('3', '6', '5', '2', '0'), -('3', '6', '5', '3', '0'), - -('3', '6', '6', '0', '0'), -('3', '6', '6', '1', '0'), -('3', '6', '6', '2', '0'), -('3', '6', '6', '3', '0'), - -('3', '7', '0', '0', '0'), -('3', '7', '0', '1', '0'), -('3', '7', '0', '2', '0'), -('3', '7', '0', '3', '0'), - -('3', '7', '1', '0', '0'), -('3', '7', '1', '1', '0'), -('3', '7', '1', '2', '0'), -('3', '7', '1', '3', '0'), - -('3', '7', '2', '0', '0'), -('3', '7', '2', '1', '0'), -('3', '7', '2', '2', '0'), -('3', '7', '2', '3', '0'), - -('3', '7', '3', '0', '0'), -('3', '7', '3', '1', '0'), -('3', '7', '3', '2', '0'), -('3', '7', '3', '3', '0'), - -('3', '7', '4', '0', '0'), -('3', '7', '4', '1', '0'), -('3', '7', '4', '2', '0'), -('3', '7', '4', '3', '0'), - -('3', '7', '5', '0', '0'), -('3', '7', '5', '1', '0'), -('3', '7', '5', '2', '0'), -('3', '7', '5', '3', '0'), - -('3', '7', '6', '0', '0'), -('3', '7', '6', '1', '0'), -('3', '7', '6', '2', '0'), -('3', '7', '6', '3', '0'), - -('3', '8', '0', '0', '0'), -('3', '8', '0', '1', '0'), -('3', '8', '0', '2', '0'), -('3', '8', '0', '3', '0'), - -('3', '8', '1', '0', '0'), -('3', '8', '1', '1', '0'), -('3', '8', '1', '2', '0'), -('3', '8', '1', '3', '0'), - -('3', '8', '2', '0', '0'), -('3', '8', '2', '1', '0'), -('3', '8', '2', '2', '0'), -('3', '8', '2', '3', '0'), - -('3', '8', '3', '0', '0'), -('3', '8', '3', '1', '0'), -('3', '8', '3', '2', '0'), -('3', '8', '3', '3', '0'), - -('3', '8', '4', '0', '0'), -('3', '8', '4', '1', '0'), -('3', '8', '4', '2', '0'), -('3', '8', '4', '3', '0'), - -('3', '8', '5', '0', '0'), -('3', '8', '5', '1', '0'), -('3', '8', '5', '2', '0'), -('3', '8', '5', '3', '0'), - -('3', '8', '6', '0', '0'), -('3', '8', '6', '1', '0'), -('3', '8', '6', '2', '0'), -('3', '8', '6', '3', '0'), - -('3', '9', '0', '0', '0'), -('3', '9', '0', '1', '0'), -('3', '9', '0', '2', '0'), -('3', '9', '0', '3', '0'), - -('3', '9', '1', '0', '0'), -('3', '9', '1', '1', '0'), -('3', '9', '1', '2', '0'), -('3', '9', '1', '3', '0'), - -('3', '9', '2', '0', '0'), -('3', '9', '2', '1', '0'), -('3', '9', '2', '2', '0'), -('3', '9', '2', '3', '0'), - -('3', '9', '3', '0', '0'), -('3', '9', '3', '1', '0'), -('3', '9', '3', '2', '0'), -('3', '9', '3', '3', '0'), - -('3', '9', '4', '0', '0'), -('3', '9', '4', '1', '0'), -('3', '9', '4', '2', '0'), -('3', '9', '4', '3', '0'), - -('3', '9', '5', '0', '0'), -('3', '9', '5', '1', '0'), -('3', '9', '5', '2', '0'), -('3', '9', '5', '3', '0'), - -('3', '9', '6', '0', '0'), -('3', '9', '6', '1', '0'), -('3', '9', '6', '2', '0'), -('3', '9', '6', '3', '0'), - -('3', '10', '0', '0', '0'), -('3', '10', '0', '1', '0'), -('3', '10', '0', '2', '0'), -('3', '10', '0', '3', '0'), - -('3', '10', '1', '0', '0'), -('3', '10', '1', '1', '0'), -('3', '10', '1', '2', '0'), -('3', '10', '1', '3', '0'), - -('3', '10', '2', '0', '0'), -('3', '10', '2', '1', '0'), -('3', '10', '2', '2', '0'), -('3', '10', '2', '3', '0'), - -('3', '10', '3', '0', '0'), -('3', '10', '3', '1', '0'), -('3', '10', '3', '2', '0'), -('3', '10', '3', '3', '0'), - -('3', '10', '4', '0', '0'), -('3', '10', '4', '1', '0'), -('3', '10', '4', '2', '0'), -('3', '10', '4', '3', '0'), - -('3', '10', '5', '0', '0'), -('3', '10', '5', '1', '0'), -('3', '10', '5', '2', '0'), -('3', '10', '5', '3', '0'), - -('3', '10', '6', '0', '0'), -('3', '10', '6', '1', '0'), -('3', '10', '6', '2', '0'), -('3', '10', '6', '3', '0'), - -('3', '11', '0', '0', '0'), -('3', '11', '0', '1', '0'), -('3', '11', '0', '2', '0'), -('3', '11', '0', '3', '0'), - -('3', '11', '1', '0', '0'), -('3', '11', '1', '1', '0'), -('3', '11', '1', '2', '0'), -('3', '11', '1', '3', '0'), - -('3', '11', '2', '0', '0'), -('3', '11', '2', '1', '0'), -('3', '11', '2', '2', '0'), -('3', '11', '2', '3', '0'), - -('3', '11', '3', '0', '0'), -('3', '11', '3', '1', '0'), -('3', '11', '3', '2', '0'), -('3', '11', '3', '3', '0'), - -('3', '11', '4', '0', '0'), -('3', '11', '4', '1', '0'), -('3', '11', '4', '2', '0'), -('3', '11', '4', '3', '0'), - -('3', '11', '5', '0', '0'), -('3', '11', '5', '1', '0'), -('3', '11', '5', '2', '0'), -('3', '11', '5', '3', '0'), - -('3', '11', '6', '0', '0'), -('3', '11', '6', '1', '0'), -('3', '11', '6', '2', '0'), -('3', '11', '6', '3', '0'), - -('3', '12', '0', '0', '0'), -('3', '12', '0', '1', '0'), -('3', '12', '0', '2', '0'), -('3', '12', '0', '3', '0'), - -('3', '12', '1', '0', '0'), -('3', '12', '1', '1', '0'), -('3', '12', '1', '2', '0'), -('3', '12', '1', '3', '0'), - -('3', '12', '2', '0', '0'), -('3', '12', '2', '1', '0'), -('3', '12', '2', '2', '0'), -('3', '12', '2', '3', '0'), - -('3', '12', '3', '0', '0'), -('3', '12', '3', '1', '0'), -('3', '12', '3', '2', '0'), -('3', '12', '3', '3', '0'), - -('3', '12', '4', '0', '0'), -('3', '12', '4', '1', '0'), -('3', '12', '4', '2', '0'), -('3', '12', '4', '3', '0'), - -('3', '12', '5', '0', '0'), -('3', '12', '5', '1', '0'), -('3', '12', '5', '2', '0'), -('3', '12', '5', '3', '0'), - -('3', '12', '6', '0', '0'), -('3', '12', '6', '1', '0'), -('3', '12', '6', '2', '0'), -('3', '12', '6', '3', '0'), - -('3', '13', '0', '0', '0'), -('3', '13', '0', '1', '0'), -('3', '13', '0', '2', '0'), -('3', '13', '0', '3', '0'), - -('3', '13', '1', '0', '0'), -('3', '13', '1', '1', '0'), -('3', '13', '1', '2', '0'), -('3', '13', '1', '3', '0'), - -('3', '13', '2', '0', '0'), -('3', '13', '2', '1', '0'), -('3', '13', '2', '2', '0'), -('3', '13', '2', '3', '0'), - -('3', '13', '3', '0', '0'), -('3', '13', '3', '1', '0'), -('3', '13', '3', '2', '0'), -('3', '13', '3', '3', '0'), - -('3', '13', '4', '0', '0'), -('3', '13', '4', '1', '0'), -('3', '13', '4', '2', '0'), -('3', '13', '4', '3', '0'), - -('3', '13', '5', '0', '0'), -('3', '13', '5', '1', '0'), -('3', '13', '5', '2', '0'), -('3', '13', '5', '3', '0'), - -('3', '13', '6', '0', '0'), -('3', '13', '6', '1', '0'), -('3', '13', '6', '2', '0'), -('3', '13', '6', '3', '0'), - -('3', '14', '0', '0', '0'), -('3', '14', '0', '1', '0'), -('3', '14', '0', '2', '0'), -('3', '14', '0', '3', '0'), - -('3', '14', '1', '0', '0'), -('3', '14', '1', '1', '0'), -('3', '14', '1', '2', '0'), -('3', '14', '1', '3', '0'), - -('3', '14', '2', '0', '0'), -('3', '14', '2', '1', '0'), -('3', '14', '2', '2', '0'), -('3', '14', '2', '3', '0'), - -('3', '14', '3', '0', '0'), -('3', '14', '3', '1', '0'), -('3', '14', '3', '2', '0'), -('3', '14', '3', '3', '0'), - -('3', '14', '4', '0', '0'), -('3', '14', '4', '1', '0'), -('3', '14', '4', '2', '0'), -('3', '14', '4', '3', '0'), - -('3', '14', '5', '0', '0'), -('3', '14', '5', '1', '0'), -('3', '14', '5', '2', '0'), -('3', '14', '5', '3', '0'), - -('3', '14', '6', '0', '0'), -('3', '14', '6', '1', '0'), -('3', '14', '6', '2', '0'), -('3', '14', '6', '3', '0'), - -('3', '15', '0', '0', '0'), -('3', '15', '0', '1', '0'), -('3', '15', '0', '2', '0'), -('3', '15', '0', '3', '0'), - -('3', '15', '1', '0', '0'), -('3', '15', '1', '1', '0'), -('3', '15', '1', '2', '0'), -('3', '15', '1', '3', '0'), - -('3', '15', '2', '0', '0'), -('3', '15', '2', '1', '0'), -('3', '15', '2', '2', '0'), -('3', '15', '2', '3', '0'), - -('3', '15', '3', '0', '0'), -('3', '15', '3', '1', '0'), -('3', '15', '3', '2', '0'), -('3', '15', '3', '3', '0'), - -('3', '15', '4', '0', '0'), -('3', '15', '4', '1', '0'), -('3', '15', '4', '2', '0'), -('3', '15', '4', '3', '0'), - -('3', '15', '5', '0', '0'), -('3', '15', '5', '1', '0'), -('3', '15', '5', '2', '0'), -('3', '15', '5', '3', '0'), - -('3', '15', '6', '0', '0'), -('3', '15', '6', '1', '0'), -('3', '15', '6', '2', '0'), -('3', '15', '6', '3', '0'), - --- SpellType_EscapeIndex - -('4', '0', '0', '0', '0'), -('4', '0', '0', '1', '0'), -('4', '0', '0', '2', '0'), -('4', '0', '0', '3', '0'), - -('4', '0', '1', '0', '0'), -('4', '0', '1', '1', '0'), -('4', '0', '1', '2', '0'), -('4', '0', '1', '3', '0'), - -('4', '0', '2', '0', '0'), -('4', '0', '2', '1', '0'), -('4', '0', '2', '2', '0'), -('4', '0', '2', '3', '0'), - -('4', '0', '3', '0', '0'), -('4', '0', '3', '1', '0'), -('4', '0', '3', '2', '0'), -('4', '0', '3', '3', '0'), - -('4', '0', '4', '0', '0'), -('4', '0', '4', '1', '0'), -('4', '0', '4', '2', '0'), -('4', '0', '4', '3', '0'), - -('4', '0', '5', '0', '0'), -('4', '0', '5', '1', '0'), -('4', '0', '5', '2', '0'), -('4', '0', '5', '3', '0'), - -('4', '0', '6', '0', '0'), -('4', '0', '6', '1', '0'), -('4', '0', '6', '2', '0'), -('4', '0', '6', '3', '0'), - -('4', '1', '0', '0', '0'), -('4', '1', '0', '1', '0'), -('4', '1', '0', '2', '0'), -('4', '1', '0', '3', '0'), - -('4', '1', '1', '0', '50'), -('4', '1', '1', '1', '50'), -('4', '1', '1', '2', '50'), -('4', '1', '1', '3', '50'), - -('4', '1', '2', '0', '50'), -('4', '1', '2', '1', '50'), -('4', '1', '2', '2', '50'), -('4', '1', '2', '3', '50'), - -('4', '1', '3', '0', '50'), -('4', '1', '3', '1', '50'), -('4', '1', '3', '2', '50'), -('4', '1', '3', '3', '50'), - -('4', '1', '4', '0', '25'), -('4', '1', '4', '1', '25'), -('4', '1', '4', '2', '25'), -('4', '1', '4', '3', '25'), - -('4', '1', '5', '0', '15'), -('4', '1', '5', '1', '15'), -('4', '1', '5', '2', '15'), -('4', '1', '5', '3', '15'), - -('4', '1', '6', '0', '15'), -('4', '1', '6', '1', '15'), -('4', '1', '6', '2', '15'), -('4', '1', '6', '3', '15'), - -('4', '2', '0', '0', '0'), -('4', '2', '0', '1', '0'), -('4', '2', '0', '2', '0'), -('4', '2', '0', '3', '0'), - -('4', '2', '1', '0', '25'), -('4', '2', '1', '1', '25'), -('4', '2', '1', '2', '25'), -('4', '2', '1', '3', '25'), - -('4', '2', '2', '0', '15'), -('4', '2', '2', '1', '15'), -('4', '2', '2', '2', '15'), -('4', '2', '2', '3', '15'), - -('4', '2', '3', '0', '25'), -('4', '2', '3', '1', '25'), -('4', '2', '3', '2', '25'), -('4', '2', '3', '3', '25'), - -('4', '2', '4', '0', '0'), -('4', '2', '4', '1', '0'), -('4', '2', '4', '2', '0'), -('4', '2', '4', '3', '0'), - -('4', '2', '5', '0', '0'), -('4', '2', '5', '1', '0'), -('4', '2', '5', '2', '0'), -('4', '2', '5', '3', '0'), - -('4', '2', '6', '0', '0'), -('4', '2', '6', '1', '0'), -('4', '2', '6', '2', '0'), -('4', '2', '6', '3', '0'), - -('4', '3', '0', '0', '0'), -('4', '3', '0', '1', '0'), -('4', '3', '0', '2', '0'), -('4', '3', '0', '3', '0'), - -('4', '3', '1', '0', '100'), -('4', '3', '1', '1', '100'), -('4', '3', '1', '2', '100'), -('4', '3', '1', '3', '100'), - -('4', '3', '2', '0', '100'), -('4', '3', '2', '1', '100'), -('4', '3', '2', '2', '100'), -('4', '3', '2', '3', '100'), - -('4', '3', '3', '0', '100'), -('4', '3', '3', '1', '100'), -('4', '3', '3', '2', '100'), -('4', '3', '3', '3', '100'), - -('4', '3', '4', '0', '50'), -('4', '3', '4', '1', '50'), -('4', '3', '4', '2', '50'), -('4', '3', '4', '3', '50'), - -('4', '3', '5', '0', '25'), -('4', '3', '5', '1', '25'), -('4', '3', '5', '2', '25'), -('4', '3', '5', '3', '25'), - -('4', '3', '6', '0', '25'), -('4', '3', '6', '1', '25'), -('4', '3', '6', '2', '25'), -('4', '3', '6', '3', '25'), - -('4', '4', '0', '0', '0'), -('4', '4', '0', '1', '0'), -('4', '4', '0', '2', '0'), -('4', '4', '0', '3', '0'), - -('4', '4', '1', '0', '25'), -('4', '4', '1', '1', '25'), -('4', '4', '1', '2', '25'), -('4', '4', '1', '3', '25'), - -('4', '4', '2', '0', '15'), -('4', '4', '2', '1', '15'), -('4', '4', '2', '2', '15'), -('4', '4', '2', '3', '15'), - -('4', '4', '3', '0', '25'), -('4', '4', '3', '1', '25'), -('4', '4', '3', '2', '25'), -('4', '4', '3', '3', '25'), - -('4', '4', '4', '0', '0'), -('4', '4', '4', '1', '0'), -('4', '4', '4', '2', '0'), -('4', '4', '4', '3', '0'), - -('4', '4', '5', '0', '0'), -('4', '4', '5', '1', '0'), -('4', '4', '5', '2', '0'), -('4', '4', '5', '3', '0'), - -('4', '4', '6', '0', '0'), -('4', '4', '6', '1', '0'), -('4', '4', '6', '2', '0'), -('4', '4', '6', '3', '0'), - -('4', '5', '0', '0', '0'), -('4', '5', '0', '1', '0'), -('4', '5', '0', '2', '0'), -('4', '5', '0', '3', '0'), - -('4', '5', '1', '0', '50'), -('4', '5', '1', '1', '50'), -('4', '5', '1', '2', '50'), -('4', '5', '1', '3', '50'), - -('4', '5', '2', '0', '50'), -('4', '5', '2', '1', '50'), -('4', '5', '2', '2', '50'), -('4', '5', '2', '3', '50'), - -('4', '5', '3', '0', '50'), -('4', '5', '3', '1', '50'), -('4', '5', '3', '2', '50'), -('4', '5', '3', '3', '50'), - -('4', '5', '4', '0', '25'), -('4', '5', '4', '1', '25'), -('4', '5', '4', '2', '25'), -('4', '5', '4', '3', '25'), - -('4', '5', '5', '0', '15'), -('4', '5', '5', '1', '15'), -('4', '5', '5', '2', '15'), -('4', '5', '5', '3', '15'), - -('4', '5', '6', '0', '15'), -('4', '5', '6', '1', '15'), -('4', '5', '6', '2', '15'), -('4', '5', '6', '3', '15'), - -('4', '6', '0', '0', '0'), -('4', '6', '0', '1', '0'), -('4', '6', '0', '2', '0'), -('4', '6', '0', '3', '0'), - -('4', '6', '1', '0', '0'), -('4', '6', '1', '1', '0'), -('4', '6', '1', '2', '0'), -('4', '6', '1', '3', '0'), - -('4', '6', '2', '0', '0'), -('4', '6', '2', '1', '0'), -('4', '6', '2', '2', '0'), -('4', '6', '2', '3', '0'), - -('4', '6', '3', '0', '0'), -('4', '6', '3', '1', '0'), -('4', '6', '3', '2', '0'), -('4', '6', '3', '3', '0'), - -('4', '6', '4', '0', '0'), -('4', '6', '4', '1', '0'), -('4', '6', '4', '2', '0'), -('4', '6', '4', '3', '0'), - -('4', '6', '5', '0', '0'), -('4', '6', '5', '1', '0'), -('4', '6', '5', '2', '0'), -('4', '6', '5', '3', '0'), - -('4', '6', '6', '0', '0'), -('4', '6', '6', '1', '0'), -('4', '6', '6', '2', '0'), -('4', '6', '6', '3', '0'), - -('4', '7', '0', '0', '0'), -('4', '7', '0', '1', '0'), -('4', '7', '0', '2', '0'), -('4', '7', '0', '3', '0'), - -('4', '7', '1', '0', '50'), -('4', '7', '1', '1', '50'), -('4', '7', '1', '2', '50'), -('4', '7', '1', '3', '50'), - -('4', '7', '2', '0', '50'), -('4', '7', '2', '1', '50'), -('4', '7', '2', '2', '50'), -('4', '7', '2', '3', '50'), - -('4', '7', '3', '0', '50'), -('4', '7', '3', '1', '50'), -('4', '7', '3', '2', '50'), -('4', '7', '3', '3', '50'), - -('4', '7', '4', '0', '25'), -('4', '7', '4', '1', '25'), -('4', '7', '4', '2', '25'), -('4', '7', '4', '3', '25'), - -('4', '7', '5', '0', '15'), -('4', '7', '5', '1', '15'), -('4', '7', '5', '2', '15'), -('4', '7', '5', '3', '15'), - -('4', '7', '6', '0', '15'), -('4', '7', '6', '1', '15'), -('4', '7', '6', '2', '15'), -('4', '7', '6', '3', '15'), - -('4', '8', '0', '0', '0'), -('4', '8', '0', '1', '0'), -('4', '8', '0', '2', '0'), -('4', '8', '0', '3', '0'), - -('4', '8', '1', '0', '0'), -('4', '8', '1', '1', '0'), -('4', '8', '1', '2', '0'), -('4', '8', '1', '3', '0'), - -('4', '8', '2', '0', '0'), -('4', '8', '2', '1', '0'), -('4', '8', '2', '2', '0'), -('4', '8', '2', '3', '0'), - -('4', '8', '3', '0', '0'), -('4', '8', '3', '1', '0'), -('4', '8', '3', '2', '0'), -('4', '8', '3', '3', '0'), - -('4', '8', '4', '0', '0'), -('4', '8', '4', '1', '0'), -('4', '8', '4', '2', '0'), -('4', '8', '4', '3', '0'), - -('4', '8', '5', '0', '0'), -('4', '8', '5', '1', '0'), -('4', '8', '5', '2', '0'), -('4', '8', '5', '3', '0'), - -('4', '8', '6', '0', '0'), -('4', '8', '6', '1', '0'), -('4', '8', '6', '2', '0'), -('4', '8', '6', '3', '0'), - -('4', '9', '0', '0', '0'), -('4', '9', '0', '1', '0'), -('4', '9', '0', '2', '0'), -('4', '9', '0', '3', '0'), - -('4', '9', '1', '0', '50'), -('4', '9', '1', '1', '50'), -('4', '9', '1', '2', '50'), -('4', '9', '1', '3', '50'), - -('4', '9', '2', '0', '50'), -('4', '9', '2', '1', '50'), -('4', '9', '2', '2', '50'), -('4', '9', '2', '3', '50'), - -('4', '9', '3', '0', '50'), -('4', '9', '3', '1', '50'), -('4', '9', '3', '2', '50'), -('4', '9', '3', '3', '50'), - -('4', '9', '4', '0', '25'), -('4', '9', '4', '1', '25'), -('4', '9', '4', '2', '25'), -('4', '9', '4', '3', '25'), - -('4', '9', '5', '0', '15'), -('4', '9', '5', '1', '15'), -('4', '9', '5', '2', '15'), -('4', '9', '5', '3', '15'), - -('4', '9', '6', '0', '15'), -('4', '9', '6', '1', '15'), -('4', '9', '6', '2', '15'), -('4', '9', '6', '3', '15'), - -('4', '10', '0', '0', '0'), -('4', '10', '0', '1', '0'), -('4', '10', '0', '2', '0'), -('4', '10', '0', '3', '0'), - -('4', '10', '1', '0', '50'), -('4', '10', '1', '1', '50'), -('4', '10', '1', '2', '50'), -('4', '10', '1', '3', '50'), - -('4', '10', '2', '0', '50'), -('4', '10', '2', '1', '50'), -('4', '10', '2', '2', '50'), -('4', '10', '2', '3', '50'), - -('4', '10', '3', '0', '50'), -('4', '10', '3', '1', '50'), -('4', '10', '3', '2', '50'), -('4', '10', '3', '3', '50'), - -('4', '10', '4', '0', '25'), -('4', '10', '4', '1', '25'), -('4', '10', '4', '2', '25'), -('4', '10', '4', '3', '25'), - -('4', '10', '5', '0', '15'), -('4', '10', '5', '1', '15'), -('4', '10', '5', '2', '15'), -('4', '10', '5', '3', '15'), - -('4', '10', '6', '0', '15'), -('4', '10', '6', '1', '15'), -('4', '10', '6', '2', '15'), -('4', '10', '6', '3', '15'), - -('4', '11', '0', '0', '0'), -('4', '11', '0', '1', '0'), -('4', '11', '0', '2', '0'), -('4', '11', '0', '3', '0'), - -('4', '11', '1', '0', '100'), -('4', '11', '1', '1', '100'), -('4', '11', '1', '2', '100'), -('4', '11', '1', '3', '100'), - -('4', '11', '2', '0', '100'), -('4', '11', '2', '1', '100'), -('4', '11', '2', '2', '100'), -('4', '11', '2', '3', '100'), - -('4', '11', '3', '0', '100'), -('4', '11', '3', '1', '100'), -('4', '11', '3', '2', '100'), -('4', '11', '3', '3', '100'), - -('4', '11', '4', '0', '50'), -('4', '11', '4', '1', '50'), -('4', '11', '4', '2', '50'), -('4', '11', '4', '3', '50'), - -('4', '11', '5', '0', '25'), -('4', '11', '5', '1', '25'), -('4', '11', '5', '2', '25'), -('4', '11', '5', '3', '25'), - -('4', '11', '6', '0', '25'), -('4', '11', '6', '1', '25'), -('4', '11', '6', '2', '25'), -('4', '11', '6', '3', '25'), - -('4', '12', '0', '0', '0'), -('4', '12', '0', '1', '0'), -('4', '12', '0', '2', '0'), -('4', '12', '0', '3', '0'), - -('4', '12', '1', '0', '50'), -('4', '12', '1', '1', '50'), -('4', '12', '1', '2', '50'), -('4', '12', '1', '3', '50'), - -('4', '12', '2', '0', '50'), -('4', '12', '2', '1', '50'), -('4', '12', '2', '2', '50'), -('4', '12', '2', '3', '50'), - -('4', '12', '3', '0', '50'), -('4', '12', '3', '1', '50'), -('4', '12', '3', '2', '50'), -('4', '12', '3', '3', '50'), - -('4', '12', '4', '0', '25'), -('4', '12', '4', '1', '25'), -('4', '12', '4', '2', '25'), -('4', '12', '4', '3', '25'), - -('4', '12', '5', '0', '15'), -('4', '12', '5', '1', '15'), -('4', '12', '5', '2', '15'), -('4', '12', '5', '3', '15'), - -('4', '12', '6', '0', '15'), -('4', '12', '6', '1', '15'), -('4', '12', '6', '2', '15'), -('4', '12', '6', '3', '15'), - -('4', '13', '0', '0', '0'), -('4', '13', '0', '1', '0'), -('4', '13', '0', '2', '0'), -('4', '13', '0', '3', '0'), - -('4', '13', '1', '0', '100'), -('4', '13', '1', '1', '100'), -('4', '13', '1', '2', '100'), -('4', '13', '1', '3', '100'), - -('4', '13', '2', '0', '100'), -('4', '13', '2', '1', '100'), -('4', '13', '2', '2', '100'), -('4', '13', '2', '3', '100'), - -('4', '13', '3', '0', '100'), -('4', '13', '3', '1', '100'), -('4', '13', '3', '2', '100'), -('4', '13', '3', '3', '100'), - -('4', '13', '4', '0', '50'), -('4', '13', '4', '1', '50'), -('4', '13', '4', '2', '50'), -('4', '13', '4', '3', '50'), - -('4', '13', '5', '0', '25'), -('4', '13', '5', '1', '25'), -('4', '13', '5', '2', '25'), -('4', '13', '5', '3', '25'), - -('4', '13', '6', '0', '25'), -('4', '13', '6', '1', '25'), -('4', '13', '6', '2', '25'), -('4', '13', '6', '3', '25'), - -('4', '14', '0', '0', '0'), -('4', '14', '0', '1', '0'), -('4', '14', '0', '2', '0'), -('4', '14', '0', '3', '0'), - -('4', '14', '1', '0', '0'), -('4', '14', '1', '1', '0'), -('4', '14', '1', '2', '0'), -('4', '14', '1', '3', '0'), - -('4', '14', '2', '0', '0'), -('4', '14', '2', '1', '0'), -('4', '14', '2', '2', '0'), -('4', '14', '2', '3', '0'), - -('4', '14', '3', '0', '0'), -('4', '14', '3', '1', '0'), -('4', '14', '3', '2', '0'), -('4', '14', '3', '3', '0'), - -('4', '14', '4', '0', '0'), -('4', '14', '4', '1', '0'), -('4', '14', '4', '2', '0'), -('4', '14', '4', '3', '0'), - -('4', '14', '5', '0', '0'), -('4', '14', '5', '1', '0'), -('4', '14', '5', '2', '0'), -('4', '14', '5', '3', '0'), - -('4', '14', '6', '0', '0'), -('4', '14', '6', '1', '0'), -('4', '14', '6', '2', '0'), -('4', '14', '6', '3', '0'), - -('4', '15', '0', '0', '0'), -('4', '15', '0', '1', '0'), -('4', '15', '0', '2', '0'), -('4', '15', '0', '3', '0'), - -('4', '15', '1', '0', '0'), -('4', '15', '1', '1', '0'), -('4', '15', '1', '2', '0'), -('4', '15', '1', '3', '0'), - -('4', '15', '2', '0', '0'), -('4', '15', '2', '1', '0'), -('4', '15', '2', '2', '0'), -('4', '15', '2', '3', '0'), - -('4', '15', '3', '0', '0'), -('4', '15', '3', '1', '0'), -('4', '15', '3', '2', '0'), -('4', '15', '3', '3', '0'), - -('4', '15', '4', '0', '0'), -('4', '15', '4', '1', '0'), -('4', '15', '4', '2', '0'), -('4', '15', '4', '3', '0'), - -('4', '15', '5', '0', '0'), -('4', '15', '5', '1', '0'), -('4', '15', '5', '2', '0'), -('4', '15', '5', '3', '0'), - -('4', '15', '6', '0', '0'), -('4', '15', '6', '1', '0'), -('4', '15', '6', '2', '0'), -('4', '15', '6', '3', '0'), - --- SpellType_PetIndex - -('5', '0', '0', '0', '0'), -('5', '0', '0', '1', '0'), -('5', '0', '0', '2', '0'), -('5', '0', '0', '3', '0'), - -('5', '0', '1', '0', '0'), -('5', '0', '1', '1', '0'), -('5', '0', '1', '2', '0'), -('5', '0', '1', '3', '0'), - -('5', '0', '2', '0', '0'), -('5', '0', '2', '1', '0'), -('5', '0', '2', '2', '0'), -('5', '0', '2', '3', '0'), - -('5', '0', '3', '0', '0'), -('5', '0', '3', '1', '0'), -('5', '0', '3', '2', '0'), -('5', '0', '3', '3', '0'), - -('5', '0', '4', '0', '0'), -('5', '0', '4', '1', '0'), -('5', '0', '4', '2', '0'), -('5', '0', '4', '3', '0'), - -('5', '0', '5', '0', '0'), -('5', '0', '5', '1', '0'), -('5', '0', '5', '2', '0'), -('5', '0', '5', '3', '0'), - -('5', '0', '6', '0', '0'), -('5', '0', '6', '1', '0'), -('5', '0', '6', '2', '0'), -('5', '0', '6', '3', '0'), - -('5', '1', '0', '0', '0'), -('5', '1', '0', '1', '0'), -('5', '1', '0', '2', '0'), -('5', '1', '0', '3', '0'), - -('5', '1', '1', '0', '0'), -('5', '1', '1', '1', '0'), -('5', '1', '1', '2', '0'), -('5', '1', '1', '3', '0'), - -('5', '1', '2', '0', '0'), -('5', '1', '2', '1', '0'), -('5', '1', '2', '2', '0'), -('5', '1', '2', '3', '0'), - -('5', '1', '3', '0', '0'), -('5', '1', '3', '1', '0'), -('5', '1', '3', '2', '0'), -('5', '1', '3', '3', '0'), - -('5', '1', '4', '0', '0'), -('5', '1', '4', '1', '0'), -('5', '1', '4', '2', '0'), -('5', '1', '4', '3', '0'), - -('5', '1', '5', '0', '0'), -('5', '1', '5', '1', '0'), -('5', '1', '5', '2', '0'), -('5', '1', '5', '3', '0'), - -('5', '1', '6', '0', '0'), -('5', '1', '6', '1', '0'), -('5', '1', '6', '2', '0'), -('5', '1', '6', '3', '0'), - -('5', '2', '0', '0', '0'), -('5', '2', '0', '1', '0'), -('5', '2', '0', '2', '0'), -('5', '2', '0', '3', '0'), - -('5', '2', '1', '0', '0'), -('5', '2', '1', '1', '0'), -('5', '2', '1', '2', '0'), -('5', '2', '1', '3', '0'), - -('5', '2', '2', '0', '0'), -('5', '2', '2', '1', '0'), -('5', '2', '2', '2', '0'), -('5', '2', '2', '3', '0'), - -('5', '2', '3', '0', '0'), -('5', '2', '3', '1', '0'), -('5', '2', '3', '2', '0'), -('5', '2', '3', '3', '0'), - -('5', '2', '4', '0', '0'), -('5', '2', '4', '1', '0'), -('5', '2', '4', '2', '0'), -('5', '2', '4', '3', '0'), - -('5', '2', '5', '0', '0'), -('5', '2', '5', '1', '0'), -('5', '2', '5', '2', '0'), -('5', '2', '5', '3', '0'), - -('5', '2', '6', '0', '0'), -('5', '2', '6', '1', '0'), -('5', '2', '6', '2', '0'), -('5', '2', '6', '3', '0'), - -('5', '3', '0', '0', '0'), -('5', '3', '0', '1', '0'), -('5', '3', '0', '2', '0'), -('5', '3', '0', '3', '0'), - -('5', '3', '1', '0', '0'), -('5', '3', '1', '1', '0'), -('5', '3', '1', '2', '0'), -('5', '3', '1', '3', '0'), - -('5', '3', '2', '0', '0'), -('5', '3', '2', '1', '0'), -('5', '3', '2', '2', '0'), -('5', '3', '2', '3', '0'), - -('5', '3', '3', '0', '0'), -('5', '3', '3', '1', '0'), -('5', '3', '3', '2', '0'), -('5', '3', '3', '3', '0'), - -('5', '3', '4', '0', '0'), -('5', '3', '4', '1', '0'), -('5', '3', '4', '2', '0'), -('5', '3', '4', '3', '0'), - -('5', '3', '5', '0', '0'), -('5', '3', '5', '1', '0'), -('5', '3', '5', '2', '0'), -('5', '3', '5', '3', '0'), - -('5', '3', '6', '0', '0'), -('5', '3', '6', '1', '0'), -('5', '3', '6', '2', '0'), -('5', '3', '6', '3', '0'), - -('5', '4', '0', '0', '0'), -('5', '4', '0', '1', '0'), -('5', '4', '0', '2', '0'), -('5', '4', '0', '3', '0'), - -('5', '4', '1', '0', '25'), -('5', '4', '1', '1', '25'), -('5', '4', '1', '2', '25'), -('5', '4', '1', '3', '25'), - -('5', '4', '2', '0', '10'), -('5', '4', '2', '1', '10'), -('5', '4', '2', '2', '10'), -('5', '4', '2', '3', '10'), - -('5', '4', '3', '0', '25'), -('5', '4', '3', '1', '25'), -('5', '4', '3', '2', '25'), -('5', '4', '3', '3', '25'), - -('5', '4', '4', '0', '10'), -('5', '4', '4', '1', '10'), -('5', '4', '4', '2', '10'), -('5', '4', '4', '3', '10'), - -('5', '4', '5', '0', '10'), -('5', '4', '5', '1', '10'), -('5', '4', '5', '2', '10'), -('5', '4', '5', '3', '10'), - -('5', '4', '6', '0', '10'), -('5', '4', '6', '1', '10'), -('5', '4', '6', '2', '10'), -('5', '4', '6', '3', '10'), - -('5', '5', '0', '0', '0'), -('5', '5', '0', '1', '0'), -('5', '5', '0', '2', '0'), -('5', '5', '0', '3', '0'), - -('5', '5', '1', '0', '25'), -('5', '5', '1', '1', '25'), -('5', '5', '1', '2', '25'), -('5', '5', '1', '3', '25'), - -('5', '5', '2', '0', '10'), -('5', '5', '2', '1', '10'), -('5', '5', '2', '2', '10'), -('5', '5', '2', '3', '10'), - -('5', '5', '3', '0', '25'), -('5', '5', '3', '1', '25'), -('5', '5', '3', '2', '25'), -('5', '5', '3', '3', '25'), - -('5', '5', '4', '0', '10'), -('5', '5', '4', '1', '10'), -('5', '5', '4', '2', '10'), -('5', '5', '4', '3', '10'), - -('5', '5', '5', '0', '10'), -('5', '5', '5', '1', '10'), -('5', '5', '5', '2', '10'), -('5', '5', '5', '3', '10'), - -('5', '5', '6', '0', '10'), -('5', '5', '6', '1', '10'), -('5', '5', '6', '2', '10'), -('5', '5', '6', '3', '10'), - -('5', '6', '0', '0', '0'), -('5', '6', '0', '1', '0'), -('5', '6', '0', '2', '0'), -('5', '6', '0', '3', '0'), - -('5', '6', '1', '0', '0'), -('5', '6', '1', '1', '0'), -('5', '6', '1', '2', '0'), -('5', '6', '1', '3', '0'), - -('5', '6', '2', '0', '0'), -('5', '6', '2', '1', '0'), -('5', '6', '2', '2', '0'), -('5', '6', '2', '3', '0'), - -('5', '6', '3', '0', '0'), -('5', '6', '3', '1', '0'), -('5', '6', '3', '2', '0'), -('5', '6', '3', '3', '0'), - -('5', '6', '4', '0', '0'), -('5', '6', '4', '1', '0'), -('5', '6', '4', '2', '0'), -('5', '6', '4', '3', '0'), - -('5', '6', '5', '0', '0'), -('5', '6', '5', '1', '0'), -('5', '6', '5', '2', '0'), -('5', '6', '5', '3', '0'), - -('5', '6', '6', '0', '0'), -('5', '6', '6', '1', '0'), -('5', '6', '6', '2', '0'), -('5', '6', '6', '3', '0'), - -('5', '7', '0', '0', '0'), -('5', '7', '0', '1', '0'), -('5', '7', '0', '2', '0'), -('5', '7', '0', '3', '0'), - -('5', '7', '1', '0', '0'), -('5', '7', '1', '1', '0'), -('5', '7', '1', '2', '0'), -('5', '7', '1', '3', '0'), - -('5', '7', '2', '0', '0'), -('5', '7', '2', '1', '0'), -('5', '7', '2', '2', '0'), -('5', '7', '2', '3', '0'), - -('5', '7', '3', '0', '0'), -('5', '7', '3', '1', '0'), -('5', '7', '3', '2', '0'), -('5', '7', '3', '3', '0'), - -('5', '7', '4', '0', '0'), -('5', '7', '4', '1', '0'), -('5', '7', '4', '2', '0'), -('5', '7', '4', '3', '0'), - -('5', '7', '5', '0', '0'), -('5', '7', '5', '1', '0'), -('5', '7', '5', '2', '0'), -('5', '7', '5', '3', '0'), - -('5', '7', '6', '0', '0'), -('5', '7', '6', '1', '0'), -('5', '7', '6', '2', '0'), -('5', '7', '6', '3', '0'), - -('5', '8', '0', '0', '0'), -('5', '8', '0', '1', '0'), -('5', '8', '0', '2', '0'), -('5', '8', '0', '3', '0'), - -('5', '8', '1', '0', '0'), -('5', '8', '1', '1', '0'), -('5', '8', '1', '2', '0'), -('5', '8', '1', '3', '0'), - -('5', '8', '2', '0', '0'), -('5', '8', '2', '1', '0'), -('5', '8', '2', '2', '0'), -('5', '8', '2', '3', '0'), - -('5', '8', '3', '0', '0'), -('5', '8', '3', '1', '0'), -('5', '8', '3', '2', '0'), -('5', '8', '3', '3', '0'), - -('5', '8', '4', '0', '0'), -('5', '8', '4', '1', '0'), -('5', '8', '4', '2', '0'), -('5', '8', '4', '3', '0'), - -('5', '8', '5', '0', '0'), -('5', '8', '5', '1', '0'), -('5', '8', '5', '2', '0'), -('5', '8', '5', '3', '0'), - -('5', '8', '6', '0', '0'), -('5', '8', '6', '1', '0'), -('5', '8', '6', '2', '0'), -('5', '8', '6', '3', '0'), - -('5', '9', '0', '0', '0'), -('5', '9', '0', '1', '0'), -('5', '9', '0', '2', '0'), -('5', '9', '0', '3', '0'), - -('5', '9', '1', '0', '25'), -('5', '9', '1', '1', '25'), -('5', '9', '1', '2', '25'), -('5', '9', '1', '3', '25'), - -('5', '9', '2', '0', '10'), -('5', '9', '2', '1', '10'), -('5', '9', '2', '2', '10'), -('5', '9', '2', '3', '10'), - -('5', '9', '3', '0', '25'), -('5', '9', '3', '1', '25'), -('5', '9', '3', '2', '25'), -('5', '9', '3', '3', '25'), - -('5', '9', '4', '0', '10'), -('5', '9', '4', '1', '10'), -('5', '9', '4', '2', '10'), -('5', '9', '4', '3', '10'), - -('5', '9', '5', '0', '10'), -('5', '9', '5', '1', '10'), -('5', '9', '5', '2', '10'), -('5', '9', '5', '3', '10'), - -('5', '9', '6', '0', '10'), -('5', '9', '6', '1', '10'), -('5', '9', '6', '2', '10'), -('5', '9', '6', '3', '10'), - -('5', '10', '0', '0', '0'), -('5', '10', '0', '1', '0'), -('5', '10', '0', '2', '0'), -('5', '10', '0', '3', '0'), - -('5', '10', '1', '0', '100'), -('5', '10', '1', '1', '100'), -('5', '10', '1', '2', '100'), -('5', '10', '1', '3', '100'), - -('5', '10', '2', '0', '50'), -('5', '10', '2', '1', '50'), -('5', '10', '2', '2', '50'), -('5', '10', '2', '3', '50'), - -('5', '10', '3', '0', '100'), -('5', '10', '3', '1', '100'), -('5', '10', '3', '2', '100'), -('5', '10', '3', '3', '100'), - -('5', '10', '4', '0', '50'), -('5', '10', '4', '1', '50'), -('5', '10', '4', '2', '50'), -('5', '10', '4', '3', '50'), - -('5', '10', '5', '0', '25'), -('5', '10', '5', '1', '25'), -('5', '10', '5', '2', '25'), -('5', '10', '5', '3', '25'), - -('5', '10', '6', '0', '25'), -('5', '10', '6', '1', '25'), -('5', '10', '6', '2', '25'), -('5', '10', '6', '3', '25'), - -('5', '11', '0', '0', '0'), -('5', '11', '0', '1', '0'), -('5', '11', '0', '2', '0'), -('5', '11', '0', '3', '0'), - -('5', '11', '1', '0', '0'), -('5', '11', '1', '1', '0'), -('5', '11', '1', '2', '0'), -('5', '11', '1', '3', '0'), - -('5', '11', '2', '0', '0'), -('5', '11', '2', '1', '0'), -('5', '11', '2', '2', '0'), -('5', '11', '2', '3', '0'), - -('5', '11', '3', '0', '0'), -('5', '11', '3', '1', '0'), -('5', '11', '3', '2', '0'), -('5', '11', '3', '3', '0'), - -('5', '11', '4', '0', '0'), -('5', '11', '4', '1', '0'), -('5', '11', '4', '2', '0'), -('5', '11', '4', '3', '0'), - -('5', '11', '5', '0', '0'), -('5', '11', '5', '1', '0'), -('5', '11', '5', '2', '0'), -('5', '11', '5', '3', '0'), - -('5', '11', '6', '0', '0'), -('5', '11', '6', '1', '0'), -('5', '11', '6', '2', '0'), -('5', '11', '6', '3', '0'), - -('5', '12', '0', '0', '0'), -('5', '12', '0', '1', '0'), -('5', '12', '0', '2', '0'), -('5', '12', '0', '3', '0'), - -('5', '12', '1', '0', '100'), -('5', '12', '1', '1', '100'), -('5', '12', '1', '2', '100'), -('5', '12', '1', '3', '100'), - -('5', '12', '2', '0', '50'), -('5', '12', '2', '1', '50'), -('5', '12', '2', '2', '50'), -('5', '12', '2', '3', '50'), - -('5', '12', '3', '0', '100'), -('5', '12', '3', '1', '100'), -('5', '12', '3', '2', '100'), -('5', '12', '3', '3', '100'), - -('5', '12', '4', '0', '50'), -('5', '12', '4', '1', '50'), -('5', '12', '4', '2', '50'), -('5', '12', '4', '3', '50'), - -('5', '12', '5', '0', '25'), -('5', '12', '5', '1', '25'), -('5', '12', '5', '2', '25'), -('5', '12', '5', '3', '25'), - -('5', '12', '6', '0', '25'), -('5', '12', '6', '1', '25'), -('5', '12', '6', '2', '25'), -('5', '12', '6', '3', '25'), - -('5', '13', '0', '0', '0'), -('5', '13', '0', '1', '0'), -('5', '13', '0', '2', '0'), -('5', '13', '0', '3', '0'), - -('5', '13', '1', '0', '25'), -('5', '13', '1', '1', '25'), -('5', '13', '1', '2', '25'), -('5', '13', '1', '3', '25'), - -('5', '13', '2', '0', '10'), -('5', '13', '2', '1', '10'), -('5', '13', '2', '2', '10'), -('5', '13', '2', '3', '10'), - -('5', '13', '3', '0', '25'), -('5', '13', '3', '1', '25'), -('5', '13', '3', '2', '25'), -('5', '13', '3', '3', '25'), - -('5', '13', '4', '0', '10'), -('5', '13', '4', '1', '10'), -('5', '13', '4', '2', '10'), -('5', '13', '4', '3', '10'), - -('5', '13', '5', '0', '10'), -('5', '13', '5', '1', '10'), -('5', '13', '5', '2', '10'), -('5', '13', '5', '3', '10'), - -('5', '13', '6', '0', '10'), -('5', '13', '6', '1', '10'), -('5', '13', '6', '2', '10'), -('5', '13', '6', '3', '10'), - -('5', '14', '0', '0', '0'), -('5', '14', '0', '1', '0'), -('5', '14', '0', '2', '0'), -('5', '14', '0', '3', '0'), - -('5', '14', '1', '0', '100'), -('5', '14', '1', '1', '100'), -('5', '14', '1', '2', '100'), -('5', '14', '1', '3', '100'), - -('5', '14', '2', '0', '50'), -('5', '14', '2', '1', '50'), -('5', '14', '2', '2', '50'), -('5', '14', '2', '3', '50'), - -('5', '14', '3', '0', '100'), -('5', '14', '3', '1', '100'), -('5', '14', '3', '2', '100'), -('5', '14', '3', '3', '100'), - -('5', '14', '4', '0', '50'), -('5', '14', '4', '1', '50'), -('5', '14', '4', '2', '50'), -('5', '14', '4', '3', '50'), - -('5', '14', '5', '0', '25'), -('5', '14', '5', '1', '25'), -('5', '14', '5', '2', '25'), -('5', '14', '5', '3', '25'), - -('5', '14', '6', '0', '25'), -('5', '14', '6', '1', '25'), -('5', '14', '6', '2', '25'), -('5', '14', '6', '3', '25'), - -('5', '15', '0', '0', '0'), -('5', '15', '0', '1', '0'), -('5', '15', '0', '2', '0'), -('5', '15', '0', '3', '0'), - -('5', '15', '1', '0', '0'), -('5', '15', '1', '1', '0'), -('5', '15', '1', '2', '0'), -('5', '15', '1', '3', '0'), - -('5', '15', '2', '0', '0'), -('5', '15', '2', '1', '0'), -('5', '15', '2', '2', '0'), -('5', '15', '2', '3', '0'), - -('5', '15', '3', '0', '0'), -('5', '15', '3', '1', '0'), -('5', '15', '3', '2', '0'), -('5', '15', '3', '3', '0'), - -('5', '15', '4', '0', '0'), -('5', '15', '4', '1', '0'), -('5', '15', '4', '2', '0'), -('5', '15', '4', '3', '0'), - -('5', '15', '5', '0', '0'), -('5', '15', '5', '1', '0'), -('5', '15', '5', '2', '0'), -('5', '15', '5', '3', '0'), - -('5', '15', '6', '0', '0'), -('5', '15', '6', '1', '0'), -('5', '15', '6', '2', '0'), -('5', '15', '6', '3', '0'), - --- SpellType_LifetapIndex - -('6', '0', '0', '0', '0'), -('6', '0', '0', '1', '0'), -('6', '0', '0', '2', '0'), -('6', '0', '0', '3', '0'), - -('6', '0', '1', '0', '0'), -('6', '0', '1', '1', '0'), -('6', '0', '1', '2', '0'), -('6', '0', '1', '3', '0'), - -('6', '0', '2', '0', '0'), -('6', '0', '2', '1', '0'), -('6', '0', '2', '2', '0'), -('6', '0', '2', '3', '0'), - -('6', '0', '3', '0', '0'), -('6', '0', '3', '1', '0'), -('6', '0', '3', '2', '0'), -('6', '0', '3', '3', '0'), - -('6', '0', '4', '0', '0'), -('6', '0', '4', '1', '0'), -('6', '0', '4', '2', '0'), -('6', '0', '4', '3', '0'), - -('6', '0', '5', '0', '0'), -('6', '0', '5', '1', '0'), -('6', '0', '5', '2', '0'), -('6', '0', '5', '3', '0'), - -('6', '0', '6', '0', '0'), -('6', '0', '6', '1', '0'), -('6', '0', '6', '2', '0'), -('6', '0', '6', '3', '0'), - -('6', '1', '0', '0', '0'), -('6', '1', '0', '1', '0'), -('6', '1', '0', '2', '0'), -('6', '1', '0', '3', '0'), - -('6', '1', '1', '0', '0'), -('6', '1', '1', '1', '0'), -('6', '1', '1', '2', '0'), -('6', '1', '1', '3', '0'), - -('6', '1', '2', '0', '0'), -('6', '1', '2', '1', '0'), -('6', '1', '2', '2', '0'), -('6', '1', '2', '3', '0'), - -('6', '1', '3', '0', '0'), -('6', '1', '3', '1', '0'), -('6', '1', '3', '2', '0'), -('6', '1', '3', '3', '0'), - -('6', '1', '4', '0', '0'), -('6', '1', '4', '1', '0'), -('6', '1', '4', '2', '0'), -('6', '1', '4', '3', '0'), - -('6', '1', '5', '0', '0'), -('6', '1', '5', '1', '0'), -('6', '1', '5', '2', '0'), -('6', '1', '5', '3', '0'), - -('6', '1', '6', '0', '0'), -('6', '1', '6', '1', '0'), -('6', '1', '6', '2', '0'), -('6', '1', '6', '3', '0'), - -('6', '2', '0', '0', '0'), -('6', '2', '0', '1', '0'), -('6', '2', '0', '2', '0'), -('6', '2', '0', '3', '0'), - -('6', '2', '1', '0', '0'), -('6', '2', '1', '1', '0'), -('6', '2', '1', '2', '0'), -('6', '2', '1', '3', '0'), - -('6', '2', '2', '0', '0'), -('6', '2', '2', '1', '0'), -('6', '2', '2', '2', '0'), -('6', '2', '2', '3', '0'), - -('6', '2', '3', '0', '0'), -('6', '2', '3', '1', '0'), -('6', '2', '3', '2', '0'), -('6', '2', '3', '3', '0'), - -('6', '2', '4', '0', '0'), -('6', '2', '4', '1', '0'), -('6', '2', '4', '2', '0'), -('6', '2', '4', '3', '0'), - -('6', '2', '5', '0', '0'), -('6', '2', '5', '1', '0'), -('6', '2', '5', '2', '0'), -('6', '2', '5', '3', '0'), - -('6', '2', '6', '0', '0'), -('6', '2', '6', '1', '0'), -('6', '2', '6', '2', '0'), -('6', '2', '6', '3', '0'), - -('6', '3', '0', '0', '0'), -('6', '3', '0', '1', '0'), -('6', '3', '0', '2', '0'), -('6', '3', '0', '3', '0'), - -('6', '3', '1', '0', '0'), -('6', '3', '1', '1', '0'), -('6', '3', '1', '2', '0'), -('6', '3', '1', '3', '0'), - -('6', '3', '2', '0', '0'), -('6', '3', '2', '1', '0'), -('6', '3', '2', '2', '0'), -('6', '3', '2', '3', '0'), - -('6', '3', '3', '0', '0'), -('6', '3', '3', '1', '0'), -('6', '3', '3', '2', '0'), -('6', '3', '3', '3', '0'), - -('6', '3', '4', '0', '0'), -('6', '3', '4', '1', '0'), -('6', '3', '4', '2', '0'), -('6', '3', '4', '3', '0'), - -('6', '3', '5', '0', '0'), -('6', '3', '5', '1', '0'), -('6', '3', '5', '2', '0'), -('6', '3', '5', '3', '0'), - -('6', '3', '6', '0', '0'), -('6', '3', '6', '1', '0'), -('6', '3', '6', '2', '0'), -('6', '3', '6', '3', '0'), - -('6', '4', '0', '0', '0'), -('6', '4', '0', '1', '0'), -('6', '4', '0', '2', '0'), -('6', '4', '0', '3', '0'), - -('6', '4', '1', '0', '50'), -('6', '4', '1', '1', '50'), -('6', '4', '1', '2', '50'), -('6', '4', '1', '3', '50'), - -('6', '4', '2', '0', '50'), -('6', '4', '2', '1', '50'), -('6', '4', '2', '2', '50'), -('6', '4', '2', '3', '50'), - -('6', '4', '3', '0', '50'), -('6', '4', '3', '1', '50'), -('6', '4', '3', '2', '50'), -('6', '4', '3', '3', '50'), - -('6', '4', '4', '0', '50'), -('6', '4', '4', '1', '50'), -('6', '4', '4', '2', '50'), -('6', '4', '4', '3', '50'), - -('6', '4', '5', '0', '100'), -('6', '4', '5', '1', '100'), -('6', '4', '5', '2', '100'), -('6', '4', '5', '3', '100'), - -('6', '4', '6', '0', '100'), -('6', '4', '6', '1', '100'), -('6', '4', '6', '2', '100'), -('6', '4', '6', '3', '100'), - -('6', '5', '0', '0', '0'), -('6', '5', '0', '1', '0'), -('6', '5', '0', '2', '0'), -('6', '5', '0', '3', '0'), - -('6', '5', '1', '0', '0'), -('6', '5', '1', '1', '0'), -('6', '5', '1', '2', '0'), -('6', '5', '1', '3', '0'), - -('6', '5', '2', '0', '0'), -('6', '5', '2', '1', '0'), -('6', '5', '2', '2', '0'), -('6', '5', '2', '3', '0'), - -('6', '5', '3', '0', '0'), -('6', '5', '3', '1', '0'), -('6', '5', '3', '2', '0'), -('6', '5', '3', '3', '0'), - -('6', '5', '4', '0', '0'), -('6', '5', '4', '1', '0'), -('6', '5', '4', '2', '0'), -('6', '5', '4', '3', '0'), - -('6', '5', '5', '0', '0'), -('6', '5', '5', '1', '0'), -('6', '5', '5', '2', '0'), -('6', '5', '5', '3', '0'), - -('6', '5', '6', '0', '0'), -('6', '5', '6', '1', '0'), -('6', '5', '6', '2', '0'), -('6', '5', '6', '3', '0'), - -('6', '6', '0', '0', '0'), -('6', '6', '0', '1', '0'), -('6', '6', '0', '2', '0'), -('6', '6', '0', '3', '0'), - -('6', '6', '1', '0', '0'), -('6', '6', '1', '1', '0'), -('6', '6', '1', '2', '0'), -('6', '6', '1', '3', '0'), - -('6', '6', '2', '0', '0'), -('6', '6', '2', '1', '0'), -('6', '6', '2', '2', '0'), -('6', '6', '2', '3', '0'), - -('6', '6', '3', '0', '0'), -('6', '6', '3', '1', '0'), -('6', '6', '3', '2', '0'), -('6', '6', '3', '3', '0'), - -('6', '6', '4', '0', '0'), -('6', '6', '4', '1', '0'), -('6', '6', '4', '2', '0'), -('6', '6', '4', '3', '0'), - -('6', '6', '5', '0', '0'), -('6', '6', '5', '1', '0'), -('6', '6', '5', '2', '0'), -('6', '6', '5', '3', '0'), - -('6', '6', '6', '0', '0'), -('6', '6', '6', '1', '0'), -('6', '6', '6', '2', '0'), -('6', '6', '6', '3', '0'), - -('6', '7', '0', '0', '0'), -('6', '7', '0', '1', '0'), -('6', '7', '0', '2', '0'), -('6', '7', '0', '3', '0'), - -('6', '7', '1', '0', '0'), -('6', '7', '1', '1', '0'), -('6', '7', '1', '2', '0'), -('6', '7', '1', '3', '0'), - -('6', '7', '2', '0', '0'), -('6', '7', '2', '1', '0'), -('6', '7', '2', '2', '0'), -('6', '7', '2', '3', '0'), - -('6', '7', '3', '0', '0'), -('6', '7', '3', '1', '0'), -('6', '7', '3', '2', '0'), -('6', '7', '3', '3', '0'), - -('6', '7', '4', '0', '0'), -('6', '7', '4', '1', '0'), -('6', '7', '4', '2', '0'), -('6', '7', '4', '3', '0'), - -('6', '7', '5', '0', '0'), -('6', '7', '5', '1', '0'), -('6', '7', '5', '2', '0'), -('6', '7', '5', '3', '0'), - -('6', '7', '6', '0', '0'), -('6', '7', '6', '1', '0'), -('6', '7', '6', '2', '0'), -('6', '7', '6', '3', '0'), - -('6', '8', '0', '0', '0'), -('6', '8', '0', '1', '0'), -('6', '8', '0', '2', '0'), -('6', '8', '0', '3', '0'), - -('6', '8', '1', '0', '0'), -('6', '8', '1', '1', '0'), -('6', '8', '1', '2', '0'), -('6', '8', '1', '3', '0'), - -('6', '8', '2', '0', '0'), -('6', '8', '2', '1', '0'), -('6', '8', '2', '2', '0'), -('6', '8', '2', '3', '0'), - -('6', '8', '3', '0', '0'), -('6', '8', '3', '1', '0'), -('6', '8', '3', '2', '0'), -('6', '8', '3', '3', '0'), - -('6', '8', '4', '0', '0'), -('6', '8', '4', '1', '0'), -('6', '8', '4', '2', '0'), -('6', '8', '4', '3', '0'), - -('6', '8', '5', '0', '0'), -('6', '8', '5', '1', '0'), -('6', '8', '5', '2', '0'), -('6', '8', '5', '3', '0'), - -('6', '8', '6', '0', '0'), -('6', '8', '6', '1', '0'), -('6', '8', '6', '2', '0'), -('6', '8', '6', '3', '0'), - -('6', '9', '0', '0', '0'), -('6', '9', '0', '1', '0'), -('6', '9', '0', '2', '0'), -('6', '9', '0', '3', '0'), - -('6', '9', '1', '0', '0'), -('6', '9', '1', '1', '0'), -('6', '9', '1', '2', '0'), -('6', '9', '1', '3', '0'), - -('6', '9', '2', '0', '0'), -('6', '9', '2', '1', '0'), -('6', '9', '2', '2', '0'), -('6', '9', '2', '3', '0'), - -('6', '9', '3', '0', '0'), -('6', '9', '3', '1', '0'), -('6', '9', '3', '2', '0'), -('6', '9', '3', '3', '0'), - -('6', '9', '4', '0', '0'), -('6', '9', '4', '1', '0'), -('6', '9', '4', '2', '0'), -('6', '9', '4', '3', '0'), - -('6', '9', '5', '0', '0'), -('6', '9', '5', '1', '0'), -('6', '9', '5', '2', '0'), -('6', '9', '5', '3', '0'), - -('6', '9', '6', '0', '0'), -('6', '9', '6', '1', '0'), -('6', '9', '6', '2', '0'), -('6', '9', '6', '3', '0'), - -('6', '10', '0', '0', '0'), -('6', '10', '0', '1', '0'), -('6', '10', '0', '2', '0'), -('6', '10', '0', '3', '0'), - -('6', '10', '1', '0', '50'), -('6', '10', '1', '1', '50'), -('6', '10', '1', '2', '50'), -('6', '10', '1', '3', '50'), - -('6', '10', '2', '0', '50'), -('6', '10', '2', '1', '50'), -('6', '10', '2', '2', '50'), -('6', '10', '2', '3', '50'), - -('6', '10', '3', '0', '50'), -('6', '10', '3', '1', '50'), -('6', '10', '3', '2', '50'), -('6', '10', '3', '3', '50'), - -('6', '10', '4', '0', '50'), -('6', '10', '4', '1', '50'), -('6', '10', '4', '2', '50'), -('6', '10', '4', '3', '50'), - -('6', '10', '5', '0', '100'), -('6', '10', '5', '1', '100'), -('6', '10', '5', '2', '100'), -('6', '10', '5', '3', '100'), - -('6', '10', '6', '0', '100'), -('6', '10', '6', '1', '100'), -('6', '10', '6', '2', '100'), -('6', '10', '6', '3', '100'), - -('6', '11', '0', '0', '0'), -('6', '11', '0', '1', '0'), -('6', '11', '0', '2', '0'), -('6', '11', '0', '3', '0'), - -('6', '11', '1', '0', '0'), -('6', '11', '1', '1', '0'), -('6', '11', '1', '2', '0'), -('6', '11', '1', '3', '0'), - -('6', '11', '2', '0', '0'), -('6', '11', '2', '1', '0'), -('6', '11', '2', '2', '0'), -('6', '11', '2', '3', '0'), - -('6', '11', '3', '0', '0'), -('6', '11', '3', '1', '0'), -('6', '11', '3', '2', '0'), -('6', '11', '3', '3', '0'), - -('6', '11', '4', '0', '0'), -('6', '11', '4', '1', '0'), -('6', '11', '4', '2', '0'), -('6', '11', '4', '3', '0'), - -('6', '11', '5', '0', '0'), -('6', '11', '5', '1', '0'), -('6', '11', '5', '2', '0'), -('6', '11', '5', '3', '0'), - -('6', '11', '6', '0', '0'), -('6', '11', '6', '1', '0'), -('6', '11', '6', '2', '0'), -('6', '11', '6', '3', '0'), - -('6', '12', '0', '0', '0'), -('6', '12', '0', '1', '0'), -('6', '12', '0', '2', '0'), -('6', '12', '0', '3', '0'), - -('6', '12', '1', '0', '0'), -('6', '12', '1', '1', '0'), -('6', '12', '1', '2', '0'), -('6', '12', '1', '3', '0'), - -('6', '12', '2', '0', '0'), -('6', '12', '2', '1', '0'), -('6', '12', '2', '2', '0'), -('6', '12', '2', '3', '0'), - -('6', '12', '3', '0', '0'), -('6', '12', '3', '1', '0'), -('6', '12', '3', '2', '0'), -('6', '12', '3', '3', '0'), - -('6', '12', '4', '0', '0'), -('6', '12', '4', '1', '0'), -('6', '12', '4', '2', '0'), -('6', '12', '4', '3', '0'), - -('6', '12', '5', '0', '0'), -('6', '12', '5', '1', '0'), -('6', '12', '5', '2', '0'), -('6', '12', '5', '3', '0'), - -('6', '12', '6', '0', '0'), -('6', '12', '6', '1', '0'), -('6', '12', '6', '2', '0'), -('6', '12', '6', '3', '0'), - -('6', '13', '0', '0', '0'), -('6', '13', '0', '1', '0'), -('6', '13', '0', '2', '0'), -('6', '13', '0', '3', '0'), - -('6', '13', '1', '0', '0'), -('6', '13', '1', '1', '0'), -('6', '13', '1', '2', '0'), -('6', '13', '1', '3', '0'), - -('6', '13', '2', '0', '0'), -('6', '13', '2', '1', '0'), -('6', '13', '2', '2', '0'), -('6', '13', '2', '3', '0'), - -('6', '13', '3', '0', '0'), -('6', '13', '3', '1', '0'), -('6', '13', '3', '2', '0'), -('6', '13', '3', '3', '0'), - -('6', '13', '4', '0', '0'), -('6', '13', '4', '1', '0'), -('6', '13', '4', '2', '0'), -('6', '13', '4', '3', '0'), - -('6', '13', '5', '0', '0'), -('6', '13', '5', '1', '0'), -('6', '13', '5', '2', '0'), -('6', '13', '5', '3', '0'), - -('6', '13', '6', '0', '0'), -('6', '13', '6', '1', '0'), -('6', '13', '6', '2', '0'), -('6', '13', '6', '3', '0'), - -('6', '14', '0', '0', '0'), -('6', '14', '0', '1', '0'), -('6', '14', '0', '2', '0'), -('6', '14', '0', '3', '0'), - -('6', '14', '1', '0', '0'), -('6', '14', '1', '1', '0'), -('6', '14', '1', '2', '0'), -('6', '14', '1', '3', '0'), - -('6', '14', '2', '0', '0'), -('6', '14', '2', '1', '0'), -('6', '14', '2', '2', '0'), -('6', '14', '2', '3', '0'), - -('6', '14', '3', '0', '0'), -('6', '14', '3', '1', '0'), -('6', '14', '3', '2', '0'), -('6', '14', '3', '3', '0'), - -('6', '14', '4', '0', '0'), -('6', '14', '4', '1', '0'), -('6', '14', '4', '2', '0'), -('6', '14', '4', '3', '0'), - -('6', '14', '5', '0', '0'), -('6', '14', '5', '1', '0'), -('6', '14', '5', '2', '0'), -('6', '14', '5', '3', '0'), - -('6', '14', '6', '0', '0'), -('6', '14', '6', '1', '0'), -('6', '14', '6', '2', '0'), -('6', '14', '6', '3', '0'), - -('6', '15', '0', '0', '0'), -('6', '15', '0', '1', '0'), -('6', '15', '0', '2', '0'), -('6', '15', '0', '3', '0'), - -('6', '15', '1', '0', '0'), -('6', '15', '1', '1', '0'), -('6', '15', '1', '2', '0'), -('6', '15', '1', '3', '0'), - -('6', '15', '2', '0', '0'), -('6', '15', '2', '1', '0'), -('6', '15', '2', '2', '0'), -('6', '15', '2', '3', '0'), - -('6', '15', '3', '0', '0'), -('6', '15', '3', '1', '0'), -('6', '15', '3', '2', '0'), -('6', '15', '3', '3', '0'), - -('6', '15', '4', '0', '0'), -('6', '15', '4', '1', '0'), -('6', '15', '4', '2', '0'), -('6', '15', '4', '3', '0'), - -('6', '15', '5', '0', '0'), -('6', '15', '5', '1', '0'), -('6', '15', '5', '2', '0'), -('6', '15', '5', '3', '0'), - -('6', '15', '6', '0', '0'), -('6', '15', '6', '1', '0'), -('6', '15', '6', '2', '0'), -('6', '15', '6', '3', '0'), - --- SpellType_SnareIndex - -('7', '0', '0', '0', '0'), -('7', '0', '0', '1', '0'), -('7', '0', '0', '2', '0'), -('7', '0', '0', '3', '0'), - -('7', '0', '1', '0', '0'), -('7', '0', '1', '1', '0'), -('7', '0', '1', '2', '0'), -('7', '0', '1', '3', '0'), - -('7', '0', '2', '0', '0'), -('7', '0', '2', '1', '0'), -('7', '0', '2', '2', '0'), -('7', '0', '2', '3', '0'), - -('7', '0', '3', '0', '0'), -('7', '0', '3', '1', '0'), -('7', '0', '3', '2', '0'), -('7', '0', '3', '3', '0'), - -('7', '0', '4', '0', '0'), -('7', '0', '4', '1', '0'), -('7', '0', '4', '2', '0'), -('7', '0', '4', '3', '0'), - -('7', '0', '5', '0', '0'), -('7', '0', '5', '1', '0'), -('7', '0', '5', '2', '0'), -('7', '0', '5', '3', '0'), - -('7', '0', '6', '0', '0'), -('7', '0', '6', '1', '0'), -('7', '0', '6', '2', '0'), -('7', '0', '6', '3', '0'), - -('7', '1', '0', '0', '0'), -('7', '1', '0', '1', '0'), -('7', '1', '0', '2', '0'), -('7', '1', '0', '3', '0'), - -('7', '1', '1', '0', '0'), -('7', '1', '1', '1', '0'), -('7', '1', '1', '2', '0'), -('7', '1', '1', '3', '0'), - -('7', '1', '2', '0', '0'), -('7', '1', '2', '1', '0'), -('7', '1', '2', '2', '0'), -('7', '1', '2', '3', '0'), - -('7', '1', '3', '0', '0'), -('7', '1', '3', '1', '0'), -('7', '1', '3', '2', '0'), -('7', '1', '3', '3', '0'), - -('7', '1', '4', '0', '0'), -('7', '1', '4', '1', '0'), -('7', '1', '4', '2', '0'), -('7', '1', '4', '3', '0'), - -('7', '1', '5', '0', '0'), -('7', '1', '5', '1', '0'), -('7', '1', '5', '2', '0'), -('7', '1', '5', '3', '0'), - -('7', '1', '6', '0', '0'), -('7', '1', '6', '1', '0'), -('7', '1', '6', '2', '0'), -('7', '1', '6', '3', '0'), - -('7', '2', '0', '0', '0'), -('7', '2', '0', '1', '0'), -('7', '2', '0', '2', '0'), -('7', '2', '0', '3', '0'), - -('7', '2', '1', '0', '0'), -('7', '2', '1', '1', '0'), -('7', '2', '1', '2', '0'), -('7', '2', '1', '3', '0'), - -('7', '2', '2', '0', '0'), -('7', '2', '2', '1', '0'), -('7', '2', '2', '2', '0'), -('7', '2', '2', '3', '0'), - -('7', '2', '3', '0', '0'), -('7', '2', '3', '1', '0'), -('7', '2', '3', '2', '0'), -('7', '2', '3', '3', '0'), - -('7', '2', '4', '0', '0'), -('7', '2', '4', '1', '0'), -('7', '2', '4', '2', '0'), -('7', '2', '4', '3', '0'), - -('7', '2', '5', '0', '0'), -('7', '2', '5', '1', '0'), -('7', '2', '5', '2', '0'), -('7', '2', '5', '3', '0'), - -('7', '2', '6', '0', '0'), -('7', '2', '6', '1', '0'), -('7', '2', '6', '2', '0'), -('7', '2', '6', '3', '0'), - -('7', '3', '0', '0', '0'), -('7', '3', '0', '1', '0'), -('7', '3', '0', '2', '0'), -('7', '3', '0', '3', '0'), - -('7', '3', '1', '0', '0'), -('7', '3', '1', '1', '0'), -('7', '3', '1', '2', '0'), -('7', '3', '1', '3', '0'), - -('7', '3', '2', '0', '0'), -('7', '3', '2', '1', '0'), -('7', '3', '2', '2', '0'), -('7', '3', '2', '3', '0'), - -('7', '3', '3', '0', '0'), -('7', '3', '3', '1', '0'), -('7', '3', '3', '2', '0'), -('7', '3', '3', '3', '0'), - -('7', '3', '4', '0', '0'), -('7', '3', '4', '1', '0'), -('7', '3', '4', '2', '0'), -('7', '3', '4', '3', '0'), - -('7', '3', '5', '0', '0'), -('7', '3', '5', '1', '0'), -('7', '3', '5', '2', '0'), -('7', '3', '5', '3', '0'), - -('7', '3', '6', '0', '0'), -('7', '3', '6', '1', '0'), -('7', '3', '6', '2', '0'), -('7', '3', '6', '3', '0'), - -('7', '4', '0', '0', '0'), -('7', '4', '0', '1', '0'), -('7', '4', '0', '2', '0'), -('7', '4', '0', '3', '0'), - -('7', '4', '1', '0', '0'), -('7', '4', '1', '1', '0'), -('7', '4', '1', '2', '0'), -('7', '4', '1', '3', '0'), - -('7', '4', '2', '0', '0'), -('7', '4', '2', '1', '0'), -('7', '4', '2', '2', '0'), -('7', '4', '2', '3', '0'), - -('7', '4', '3', '0', '0'), -('7', '4', '3', '1', '0'), -('7', '4', '3', '2', '0'), -('7', '4', '3', '3', '0'), - -('7', '4', '4', '0', '0'), -('7', '4', '4', '1', '0'), -('7', '4', '4', '2', '0'), -('7', '4', '4', '3', '0'), - -('7', '4', '5', '0', '0'), -('7', '4', '5', '1', '0'), -('7', '4', '5', '2', '0'), -('7', '4', '5', '3', '0'), - -('7', '4', '6', '0', '0'), -('7', '4', '6', '1', '0'), -('7', '4', '6', '2', '0'), -('7', '4', '6', '3', '0'), - -('7', '5', '0', '0', '0'), -('7', '5', '0', '1', '0'), -('7', '5', '0', '2', '0'), -('7', '5', '0', '3', '0'), - -('7', '5', '1', '0', '0'), -('7', '5', '1', '1', '0'), -('7', '5', '1', '2', '0'), -('7', '5', '1', '3', '0'), - -('7', '5', '2', '0', '0'), -('7', '5', '2', '1', '0'), -('7', '5', '2', '2', '0'), -('7', '5', '2', '3', '0'), - -('7', '5', '3', '0', '0'), -('7', '5', '3', '1', '0'), -('7', '5', '3', '2', '0'), -('7', '5', '3', '3', '0'), - -('7', '5', '4', '0', '0'), -('7', '5', '4', '1', '0'), -('7', '5', '4', '2', '0'), -('7', '5', '4', '3', '0'), - -('7', '5', '5', '0', '0'), -('7', '5', '5', '1', '0'), -('7', '5', '5', '2', '0'), -('7', '5', '5', '3', '0'), - -('7', '5', '6', '0', '0'), -('7', '5', '6', '1', '0'), -('7', '5', '6', '2', '0'), -('7', '5', '6', '3', '0'), - -('7', '6', '0', '0', '0'), -('7', '6', '0', '1', '0'), -('7', '6', '0', '2', '0'), -('7', '6', '0', '3', '0'), - -('7', '6', '1', '0', '0'), -('7', '6', '1', '1', '0'), -('7', '6', '1', '2', '0'), -('7', '6', '1', '3', '0'), - -('7', '6', '2', '0', '0'), -('7', '6', '2', '1', '0'), -('7', '6', '2', '2', '0'), -('7', '6', '2', '3', '0'), - -('7', '6', '3', '0', '0'), -('7', '6', '3', '1', '0'), -('7', '6', '3', '2', '0'), -('7', '6', '3', '3', '0'), - -('7', '6', '4', '0', '0'), -('7', '6', '4', '1', '0'), -('7', '6', '4', '2', '0'), -('7', '6', '4', '3', '0'), - -('7', '6', '5', '0', '0'), -('7', '6', '5', '1', '0'), -('7', '6', '5', '2', '0'), -('7', '6', '5', '3', '0'), - -('7', '6', '6', '0', '0'), -('7', '6', '6', '1', '0'), -('7', '6', '6', '2', '0'), -('7', '6', '6', '3', '0'), - -('7', '7', '0', '0', '0'), -('7', '7', '0', '1', '0'), -('7', '7', '0', '2', '0'), -('7', '7', '0', '3', '0'), - -('7', '7', '1', '0', '0'), -('7', '7', '1', '1', '0'), -('7', '7', '1', '2', '0'), -('7', '7', '1', '3', '0'), - -('7', '7', '2', '0', '0'), -('7', '7', '2', '1', '0'), -('7', '7', '2', '2', '0'), -('7', '7', '2', '3', '0'), - -('7', '7', '3', '0', '0'), -('7', '7', '3', '1', '0'), -('7', '7', '3', '2', '0'), -('7', '7', '3', '3', '0'), - -('7', '7', '4', '0', '0'), -('7', '7', '4', '1', '0'), -('7', '7', '4', '2', '0'), -('7', '7', '4', '3', '0'), - -('7', '7', '5', '0', '0'), -('7', '7', '5', '1', '0'), -('7', '7', '5', '2', '0'), -('7', '7', '5', '3', '0'), - -('7', '7', '6', '0', '0'), -('7', '7', '6', '1', '0'), -('7', '7', '6', '2', '0'), -('7', '7', '6', '3', '0'), - -('7', '8', '0', '0', '0'), -('7', '8', '0', '1', '0'), -('7', '8', '0', '2', '0'), -('7', '8', '0', '3', '0'), - -('7', '8', '1', '0', '0'), -('7', '8', '1', '1', '0'), -('7', '8', '1', '2', '0'), -('7', '8', '1', '3', '0'), - -('7', '8', '2', '0', '0'), -('7', '8', '2', '1', '0'), -('7', '8', '2', '2', '0'), -('7', '8', '2', '3', '0'), - -('7', '8', '3', '0', '0'), -('7', '8', '3', '1', '0'), -('7', '8', '3', '2', '0'), -('7', '8', '3', '3', '0'), - -('7', '8', '4', '0', '0'), -('7', '8', '4', '1', '0'), -('7', '8', '4', '2', '0'), -('7', '8', '4', '3', '0'), - -('7', '8', '5', '0', '0'), -('7', '8', '5', '1', '0'), -('7', '8', '5', '2', '0'), -('7', '8', '5', '3', '0'), - -('7', '8', '6', '0', '0'), -('7', '8', '6', '1', '0'), -('7', '8', '6', '2', '0'), -('7', '8', '6', '3', '0'), - -('7', '9', '0', '0', '0'), -('7', '9', '0', '1', '0'), -('7', '9', '0', '2', '0'), -('7', '9', '0', '3', '0'), - -('7', '9', '1', '0', '0'), -('7', '9', '1', '1', '0'), -('7', '9', '1', '2', '0'), -('7', '9', '1', '3', '0'), - -('7', '9', '2', '0', '0'), -('7', '9', '2', '1', '0'), -('7', '9', '2', '2', '0'), -('7', '9', '2', '3', '0'), - -('7', '9', '3', '0', '0'), -('7', '9', '3', '1', '0'), -('7', '9', '3', '2', '0'), -('7', '9', '3', '3', '0'), - -('7', '9', '4', '0', '0'), -('7', '9', '4', '1', '0'), -('7', '9', '4', '2', '0'), -('7', '9', '4', '3', '0'), - -('7', '9', '5', '0', '0'), -('7', '9', '5', '1', '0'), -('7', '9', '5', '2', '0'), -('7', '9', '5', '3', '0'), - -('7', '9', '6', '0', '0'), -('7', '9', '6', '1', '0'), -('7', '9', '6', '2', '0'), -('7', '9', '6', '3', '0'), - -('7', '10', '0', '0', '0'), -('7', '10', '0', '1', '0'), -('7', '10', '0', '2', '0'), -('7', '10', '0', '3', '0'), - -('7', '10', '1', '0', '0'), -('7', '10', '1', '1', '0'), -('7', '10', '1', '2', '0'), -('7', '10', '1', '3', '0'), - -('7', '10', '2', '0', '0'), -('7', '10', '2', '1', '0'), -('7', '10', '2', '2', '0'), -('7', '10', '2', '3', '0'), - -('7', '10', '3', '0', '0'), -('7', '10', '3', '1', '0'), -('7', '10', '3', '2', '0'), -('7', '10', '3', '3', '0'), - -('7', '10', '4', '0', '0'), -('7', '10', '4', '1', '0'), -('7', '10', '4', '2', '0'), -('7', '10', '4', '3', '0'), - -('7', '10', '5', '0', '0'), -('7', '10', '5', '1', '0'), -('7', '10', '5', '2', '0'), -('7', '10', '5', '3', '0'), - -('7', '10', '6', '0', '0'), -('7', '10', '6', '1', '0'), -('7', '10', '6', '2', '0'), -('7', '10', '6', '3', '0'), - -('7', '11', '0', '0', '0'), -('7', '11', '0', '1', '0'), -('7', '11', '0', '2', '0'), -('7', '11', '0', '3', '0'), - -('7', '11', '1', '0', '0'), -('7', '11', '1', '1', '0'), -('7', '11', '1', '2', '0'), -('7', '11', '1', '3', '0'), - -('7', '11', '2', '0', '0'), -('7', '11', '2', '1', '0'), -('7', '11', '2', '2', '0'), -('7', '11', '2', '3', '0'), - -('7', '11', '3', '0', '0'), -('7', '11', '3', '1', '0'), -('7', '11', '3', '2', '0'), -('7', '11', '3', '3', '0'), - -('7', '11', '4', '0', '0'), -('7', '11', '4', '1', '0'), -('7', '11', '4', '2', '0'), -('7', '11', '4', '3', '0'), - -('7', '11', '5', '0', '0'), -('7', '11', '5', '1', '0'), -('7', '11', '5', '2', '0'), -('7', '11', '5', '3', '0'), - -('7', '11', '6', '0', '0'), -('7', '11', '6', '1', '0'), -('7', '11', '6', '2', '0'), -('7', '11', '6', '3', '0'), - -('7', '12', '0', '0', '0'), -('7', '12', '0', '1', '0'), -('7', '12', '0', '2', '0'), -('7', '12', '0', '3', '0'), - -('7', '12', '1', '0', '0'), -('7', '12', '1', '1', '0'), -('7', '12', '1', '2', '0'), -('7', '12', '1', '3', '0'), - -('7', '12', '2', '0', '0'), -('7', '12', '2', '1', '0'), -('7', '12', '2', '2', '0'), -('7', '12', '2', '3', '0'), - -('7', '12', '3', '0', '0'), -('7', '12', '3', '1', '0'), -('7', '12', '3', '2', '0'), -('7', '12', '3', '3', '0'), - -('7', '12', '4', '0', '0'), -('7', '12', '4', '1', '0'), -('7', '12', '4', '2', '0'), -('7', '12', '4', '3', '0'), - -('7', '12', '5', '0', '0'), -('7', '12', '5', '1', '0'), -('7', '12', '5', '2', '0'), -('7', '12', '5', '3', '0'), - -('7', '12', '6', '0', '0'), -('7', '12', '6', '1', '0'), -('7', '12', '6', '2', '0'), -('7', '12', '6', '3', '0'), - -('7', '13', '0', '0', '0'), -('7', '13', '0', '1', '0'), -('7', '13', '0', '2', '0'), -('7', '13', '0', '3', '0'), - -('7', '13', '1', '0', '0'), -('7', '13', '1', '1', '0'), -('7', '13', '1', '2', '0'), -('7', '13', '1', '3', '0'), - -('7', '13', '2', '0', '0'), -('7', '13', '2', '1', '0'), -('7', '13', '2', '2', '0'), -('7', '13', '2', '3', '0'), - -('7', '13', '3', '0', '0'), -('7', '13', '3', '1', '0'), -('7', '13', '3', '2', '0'), -('7', '13', '3', '3', '0'), - -('7', '13', '4', '0', '0'), -('7', '13', '4', '1', '0'), -('7', '13', '4', '2', '0'), -('7', '13', '4', '3', '0'), - -('7', '13', '5', '0', '0'), -('7', '13', '5', '1', '0'), -('7', '13', '5', '2', '0'), -('7', '13', '5', '3', '0'), - -('7', '13', '6', '0', '0'), -('7', '13', '6', '1', '0'), -('7', '13', '6', '2', '0'), -('7', '13', '6', '3', '0'), - -('7', '14', '0', '0', '0'), -('7', '14', '0', '1', '0'), -('7', '14', '0', '2', '0'), -('7', '14', '0', '3', '0'), - -('7', '14', '1', '0', '0'), -('7', '14', '1', '1', '0'), -('7', '14', '1', '2', '0'), -('7', '14', '1', '3', '0'), - -('7', '14', '2', '0', '0'), -('7', '14', '2', '1', '0'), -('7', '14', '2', '2', '0'), -('7', '14', '2', '3', '0'), - -('7', '14', '3', '0', '0'), -('7', '14', '3', '1', '0'), -('7', '14', '3', '2', '0'), -('7', '14', '3', '3', '0'), - -('7', '14', '4', '0', '0'), -('7', '14', '4', '1', '0'), -('7', '14', '4', '2', '0'), -('7', '14', '4', '3', '0'), - -('7', '14', '5', '0', '0'), -('7', '14', '5', '1', '0'), -('7', '14', '5', '2', '0'), -('7', '14', '5', '3', '0'), - -('7', '14', '6', '0', '0'), -('7', '14', '6', '1', '0'), -('7', '14', '6', '2', '0'), -('7', '14', '6', '3', '0'), - -('7', '15', '0', '0', '0'), -('7', '15', '0', '1', '0'), -('7', '15', '0', '2', '0'), -('7', '15', '0', '3', '0'), - -('7', '15', '1', '0', '0'), -('7', '15', '1', '1', '0'), -('7', '15', '1', '2', '0'), -('7', '15', '1', '3', '0'), - -('7', '15', '2', '0', '0'), -('7', '15', '2', '1', '0'), -('7', '15', '2', '2', '0'), -('7', '15', '2', '3', '0'), - -('7', '15', '3', '0', '0'), -('7', '15', '3', '1', '0'), -('7', '15', '3', '2', '0'), -('7', '15', '3', '3', '0'), - -('7', '15', '4', '0', '0'), -('7', '15', '4', '1', '0'), -('7', '15', '4', '2', '0'), -('7', '15', '4', '3', '0'), - -('7', '15', '5', '0', '0'), -('7', '15', '5', '1', '0'), -('7', '15', '5', '2', '0'), -('7', '15', '5', '3', '0'), - -('7', '15', '6', '0', '0'), -('7', '15', '6', '1', '0'), -('7', '15', '6', '2', '0'), -('7', '15', '6', '3', '0'), - --- SpellType_DOTIndex - -('8', '0', '0', '0', '0'), -('8', '0', '0', '1', '0'), -('8', '0', '0', '2', '0'), -('8', '0', '0', '3', '0'), - -('8', '0', '1', '0', '0'), -('8', '0', '1', '1', '0'), -('8', '0', '1', '2', '0'), -('8', '0', '1', '3', '0'), - -('8', '0', '2', '0', '0'), -('8', '0', '2', '1', '0'), -('8', '0', '2', '2', '0'), -('8', '0', '2', '3', '0'), - -('8', '0', '3', '0', '0'), -('8', '0', '3', '1', '0'), -('8', '0', '3', '2', '0'), -('8', '0', '3', '3', '0'), - -('8', '0', '4', '0', '0'), -('8', '0', '4', '1', '0'), -('8', '0', '4', '2', '0'), -('8', '0', '4', '3', '0'), - -('8', '0', '5', '0', '0'), -('8', '0', '5', '1', '0'), -('8', '0', '5', '2', '0'), -('8', '0', '5', '3', '0'), - -('8', '0', '6', '0', '0'), -('8', '0', '6', '1', '0'), -('8', '0', '6', '2', '0'), -('8', '0', '6', '3', '0'), - -('8', '1', '0', '0', '0'), -('8', '1', '0', '1', '0'), -('8', '1', '0', '2', '0'), -('8', '1', '0', '3', '0'), - -('8', '1', '1', '0', '0'), -('8', '1', '1', '1', '0'), -('8', '1', '1', '2', '0'), -('8', '1', '1', '3', '0'), - -('8', '1', '2', '0', '0'), -('8', '1', '2', '1', '0'), -('8', '1', '2', '2', '0'), -('8', '1', '2', '3', '0'), - -('8', '1', '3', '0', '0'), -('8', '1', '3', '1', '0'), -('8', '1', '3', '2', '0'), -('8', '1', '3', '3', '0'), - -('8', '1', '4', '0', '0'), -('8', '1', '4', '1', '0'), -('8', '1', '4', '2', '0'), -('8', '1', '4', '3', '0'), - -('8', '1', '5', '0', '0'), -('8', '1', '5', '1', '0'), -('8', '1', '5', '2', '0'), -('8', '1', '5', '3', '0'), - -('8', '1', '6', '0', '0'), -('8', '1', '6', '1', '0'), -('8', '1', '6', '2', '0'), -('8', '1', '6', '3', '0'), - -('8', '2', '0', '0', '0'), -('8', '2', '0', '1', '0'), -('8', '2', '0', '2', '0'), -('8', '2', '0', '3', '0'), - -('8', '2', '1', '0', '0'), -('8', '2', '1', '1', '0'), -('8', '2', '1', '2', '0'), -('8', '2', '1', '3', '0'), - -('8', '2', '2', '0', '0'), -('8', '2', '2', '1', '0'), -('8', '2', '2', '2', '0'), -('8', '2', '2', '3', '0'), - -('8', '2', '3', '0', '0'), -('8', '2', '3', '1', '0'), -('8', '2', '3', '2', '0'), -('8', '2', '3', '3', '0'), - -('8', '2', '4', '0', '0'), -('8', '2', '4', '1', '0'), -('8', '2', '4', '2', '0'), -('8', '2', '4', '3', '0'), - -('8', '2', '5', '0', '0'), -('8', '2', '5', '1', '0'), -('8', '2', '5', '2', '0'), -('8', '2', '5', '3', '0'), - -('8', '2', '6', '0', '0'), -('8', '2', '6', '1', '0'), -('8', '2', '6', '2', '0'), -('8', '2', '6', '3', '0'), - -('8', '3', '0', '0', '0'), -('8', '3', '0', '1', '0'), -('8', '3', '0', '2', '0'), -('8', '3', '0', '3', '0'), - -('8', '3', '1', '0', '15'), -('8', '3', '1', '1', '15'), -('8', '3', '1', '2', '10'), -('8', '3', '1', '3', '10'), - -('8', '3', '2', '0', '10'), -('8', '3', '2', '1', '10'), -('8', '3', '2', '2', '0'), -('8', '3', '2', '3', '0'), - -('8', '3', '3', '0', '15'), -('8', '3', '3', '1', '15'), -('8', '3', '3', '2', '10'), -('8', '3', '3', '3', '10'), - -('8', '3', '4', '0', '50'), -('8', '3', '4', '1', '50'), -('8', '3', '4', '2', '25'), -('8', '3', '4', '3', '25'), - -('8', '3', '5', '0', '50'), -('8', '3', '5', '1', '50'), -('8', '3', '5', '2', '25'), -('8', '3', '5', '3', '25'), - -('8', '3', '6', '0', '50'), -('8', '3', '6', '1', '50'), -('8', '3', '6', '2', '25'), -('8', '3', '6', '3', '25'), - -('8', '4', '0', '0', '0'), -('8', '4', '0', '1', '0'), -('8', '4', '0', '2', '0'), -('8', '4', '0', '3', '0'), - -('8', '4', '1', '0', '15'), -('8', '4', '1', '1', '15'), -('8', '4', '1', '2', '10'), -('8', '4', '1', '3', '10'), - -('8', '4', '2', '0', '10'), -('8', '4', '2', '1', '10'), -('8', '4', '2', '2', '0'), -('8', '4', '2', '3', '0'), - -('8', '4', '3', '0', '15'), -('8', '4', '3', '1', '15'), -('8', '4', '3', '2', '10'), -('8', '4', '3', '3', '10'), - -('8', '4', '4', '0', '50'), -('8', '4', '4', '1', '50'), -('8', '4', '4', '2', '25'), -('8', '4', '4', '3', '25'), - -('8', '4', '5', '0', '50'), -('8', '4', '5', '1', '50'), -('8', '4', '5', '2', '25'), -('8', '4', '5', '3', '25'), - -('8', '4', '6', '0', '50'), -('8', '4', '6', '1', '50'), -('8', '4', '6', '2', '25'), -('8', '4', '6', '3', '25'), - -('8', '5', '0', '0', '0'), -('8', '5', '0', '1', '0'), -('8', '5', '0', '2', '0'), -('8', '5', '0', '3', '0'), - -('8', '5', '1', '0', '50'), -('8', '5', '1', '1', '15'), -('8', '5', '1', '2', '50'), -('8', '5', '1', '3', '15'), - -('8', '5', '2', '0', '25'), -('8', '5', '2', '1', '10'), -('8', '5', '2', '2', '25'), -('8', '5', '2', '3', '10'), - -('8', '5', '3', '0', '50'), -('8', '5', '3', '1', '15'), -('8', '5', '3', '2', '50'), -('8', '5', '3', '3', '15'), - -('8', '5', '4', '0', '50'), -('8', '5', '4', '1', '25'), -('8', '5', '4', '2', '50'), -('8', '5', '4', '3', '25'), - -('8', '5', '5', '0', '50'), -('8', '5', '5', '1', '25'), -('8', '5', '5', '2', '50'), -('8', '5', '5', '3', '25'), - -('8', '5', '6', '0', '50'), -('8', '5', '6', '1', '25'), -('8', '5', '6', '2', '50'), -('8', '5', '6', '3', '25'), - -('8', '6', '0', '0', '0'), -('8', '6', '0', '1', '0'), -('8', '6', '0', '2', '0'), -('8', '6', '0', '3', '0'), - -('8', '6', '1', '0', '0'), -('8', '6', '1', '1', '0'), -('8', '6', '1', '2', '0'), -('8', '6', '1', '3', '0'), - -('8', '6', '2', '0', '0'), -('8', '6', '2', '1', '0'), -('8', '6', '2', '2', '0'), -('8', '6', '2', '3', '0'), - -('8', '6', '3', '0', '0'), -('8', '6', '3', '1', '0'), -('8', '6', '3', '2', '0'), -('8', '6', '3', '3', '0'), - -('8', '6', '4', '0', '0'), -('8', '6', '4', '1', '0'), -('8', '6', '4', '2', '0'), -('8', '6', '4', '3', '0'), - -('8', '6', '5', '0', '0'), -('8', '6', '5', '1', '0'), -('8', '6', '5', '2', '0'), -('8', '6', '5', '3', '0'), - -('8', '6', '6', '0', '0'), -('8', '6', '6', '1', '0'), -('8', '6', '6', '2', '0'), -('8', '6', '6', '3', '0'), - -('8', '7', '0', '0', '0'), -('8', '7', '0', '1', '0'), -('8', '7', '0', '2', '0'), -('8', '7', '0', '3', '0'), - -('8', '7', '1', '0', '50'), -('8', '7', '1', '1', '50'), -('8', '7', '1', '2', '25'), -('8', '7', '1', '3', '25'), - -('8', '7', '2', '0', '25'), -('8', '7', '2', '1', '25'), -('8', '7', '2', '2', '15'), -('8', '7', '2', '3', '15'), - -('8', '7', '3', '0', '50'), -('8', '7', '3', '1', '50'), -('8', '7', '3', '2', '25'), -('8', '7', '3', '3', '25'), - -('8', '7', '4', '0', '100'), -('8', '7', '4', '1', '100'), -('8', '7', '4', '2', '50'), -('8', '7', '4', '3', '50'), - -('8', '7', '5', '0', '100'), -('8', '7', '5', '1', '100'), -('8', '7', '5', '2', '50'), -('8', '7', '5', '3', '50'), - -('8', '7', '6', '0', '100'), -('8', '7', '6', '1', '100'), -('8', '7', '6', '2', '50'), -('8', '7', '6', '3', '50'), - -('8', '8', '0', '0', '0'), -('8', '8', '0', '1', '0'), -('8', '8', '0', '2', '0'), -('8', '8', '0', '3', '0'), - -('8', '8', '1', '0', '0'), -('8', '8', '1', '1', '0'), -('8', '8', '1', '2', '0'), -('8', '8', '1', '3', '0'), - -('8', '8', '2', '0', '0'), -('8', '8', '2', '1', '0'), -('8', '8', '2', '2', '0'), -('8', '8', '2', '3', '0'), - -('8', '8', '3', '0', '0'), -('8', '8', '3', '1', '0'), -('8', '8', '3', '2', '0'), -('8', '8', '3', '3', '0'), - -('8', '8', '4', '0', '0'), -('8', '8', '4', '1', '0'), -('8', '8', '4', '2', '0'), -('8', '8', '4', '3', '0'), - -('8', '8', '5', '0', '0'), -('8', '8', '5', '1', '0'), -('8', '8', '5', '2', '0'), -('8', '8', '5', '3', '0'), - -('8', '8', '6', '0', '0'), -('8', '8', '6', '1', '0'), -('8', '8', '6', '2', '0'), -('8', '8', '6', '3', '0'), - -('8', '9', '0', '0', '0'), -('8', '9', '0', '1', '0'), -('8', '9', '0', '2', '0'), -('8', '9', '0', '3', '0'), - -('8', '9', '1', '0', '25'), -('8', '9', '1', '1', '15'), -('8', '9', '1', '2', '15'), -('8', '9', '1', '3', '0'), - -('8', '9', '2', '0', '15'), -('8', '9', '2', '1', '10'), -('8', '9', '2', '2', '10'), -('8', '9', '2', '3', '0'), - -('8', '9', '3', '0', '25'), -('8', '9', '3', '1', '15'), -('8', '9', '3', '2', '15'), -('8', '9', '3', '3', '0'), - -('8', '9', '4', '0', '50'), -('8', '9', '4', '1', '25'), -('8', '9', '4', '2', '50'), -('8', '9', '4', '3', '15'), - -('8', '9', '5', '0', '50'), -('8', '9', '5', '1', '25'), -('8', '9', '5', '2', '50'), -('8', '9', '5', '3', '15'), - -('8', '9', '6', '0', '50'), -('8', '9', '6', '1', '25'), -('8', '9', '6', '2', '50'), -('8', '9', '6', '3', '15'), - -('8', '10', '0', '0', '0'), -('8', '10', '0', '1', '0'), -('8', '10', '0', '2', '0'), -('8', '10', '0', '3', '0'), - -('8', '10', '1', '0', '50'), -('8', '10', '1', '1', '50'), -('8', '10', '1', '2', '50'), -('8', '10', '1', '3', '50'), - -('8', '10', '2', '0', '25'), -('8', '10', '2', '1', '25'), -('8', '10', '2', '2', '25'), -('8', '10', '2', '3', '25'), - -('8', '10', '3', '0', '50'), -('8', '10', '3', '1', '50'), -('8', '10', '3', '2', '50'), -('8', '10', '3', '3', '50'), - -('8', '10', '4', '0', '50'), -('8', '10', '4', '1', '50'), -('8', '10', '4', '2', '50'), -('8', '10', '4', '3', '50'), - -('8', '10', '5', '0', '75'), -('8', '10', '5', '1', '75'), -('8', '10', '5', '2', '75'), -('8', '10', '5', '3', '75'), - -('8', '10', '6', '0', '75'), -('8', '10', '6', '1', '75'), -('8', '10', '6', '2', '75'), -('8', '10', '6', '3', '75'), - -('8', '11', '0', '0', '0'), -('8', '11', '0', '1', '0'), -('8', '11', '0', '2', '0'), -('8', '11', '0', '3', '0'), - -('8', '11', '1', '0', '0'), -('8', '11', '1', '1', '0'), -('8', '11', '1', '2', '0'), -('8', '11', '1', '3', '0'), - -('8', '11', '2', '0', '0'), -('8', '11', '2', '1', '0'), -('8', '11', '2', '2', '0'), -('8', '11', '2', '3', '0'), - -('8', '11', '3', '0', '0'), -('8', '11', '3', '1', '0'), -('8', '11', '3', '2', '0'), -('8', '11', '3', '3', '0'), - -('8', '11', '4', '0', '0'), -('8', '11', '4', '1', '0'), -('8', '11', '4', '2', '0'), -('8', '11', '4', '3', '0'), - -('8', '11', '5', '0', '0'), -('8', '11', '5', '1', '0'), -('8', '11', '5', '2', '0'), -('8', '11', '5', '3', '0'), - -('8', '11', '6', '0', '0'), -('8', '11', '6', '1', '0'), -('8', '11', '6', '2', '0'), -('8', '11', '6', '3', '0'), - -('8', '12', '0', '0', '0'), -('8', '12', '0', '1', '0'), -('8', '12', '0', '2', '0'), -('8', '12', '0', '3', '0'), - -('8', '12', '1', '0', '0'), -('8', '12', '1', '1', '0'), -('8', '12', '1', '2', '0'), -('8', '12', '1', '3', '0'), - -('8', '12', '2', '0', '0'), -('8', '12', '2', '1', '0'), -('8', '12', '2', '2', '0'), -('8', '12', '2', '3', '0'), - -('8', '12', '3', '0', '0'), -('8', '12', '3', '1', '0'), -('8', '12', '3', '2', '0'), -('8', '12', '3', '3', '0'), - -('8', '12', '4', '0', '0'), -('8', '12', '4', '1', '0'), -('8', '12', '4', '2', '0'), -('8', '12', '4', '3', '0'), - -('8', '12', '5', '0', '0'), -('8', '12', '5', '1', '0'), -('8', '12', '5', '2', '0'), -('8', '12', '5', '3', '0'), - -('8', '12', '6', '0', '0'), -('8', '12', '6', '1', '0'), -('8', '12', '6', '2', '0'), -('8', '12', '6', '3', '0'), - -('8', '13', '0', '0', '0'), -('8', '13', '0', '1', '0'), -('8', '13', '0', '2', '0'), -('8', '13', '0', '3', '0'), - -('8', '13', '1', '0', '50'), -('8', '13', '1', '1', '50'), -('8', '13', '1', '2', '15'), -('8', '13', '1', '3', '15'), - -('8', '13', '2', '0', '25'), -('8', '13', '2', '1', '25'), -('8', '13', '2', '2', '10'), -('8', '13', '2', '3', '10'), - -('8', '13', '3', '0', '50'), -('8', '13', '3', '1', '50'), -('8', '13', '3', '2', '15'), -('8', '13', '3', '3', '15'), - -('8', '13', '4', '0', '15'), -('8', '13', '4', '1', '15'), -('8', '13', '4', '2', '25'), -('8', '13', '4', '3', '25'), - -('8', '13', '5', '0', '15'), -('8', '13', '5', '1', '15'), -('8', '13', '5', '2', '25'), -('8', '13', '5', '3', '25'), - -('8', '13', '6', '0', '15'), -('8', '13', '6', '1', '15'), -('8', '13', '6', '2', '25'), -('8', '13', '6', '3', '25'), - -('8', '14', '0', '0', '0'), -('8', '14', '0', '1', '0'), -('8', '14', '0', '2', '0'), -('8', '14', '0', '3', '0'), - -('8', '14', '1', '0', '15'), -('8', '14', '1', '1', '15'), -('8', '14', '1', '2', '10'), -('8', '14', '1', '3', '10'), - -('8', '14', '2', '0', '10'), -('8', '14', '2', '1', '10'), -('8', '14', '2', '2', '0'), -('8', '14', '2', '3', '0'), - -('8', '14', '3', '0', '15'), -('8', '14', '3', '1', '15'), -('8', '14', '3', '2', '10'), -('8', '14', '3', '3', '10'), - -('8', '14', '4', '0', '50'), -('8', '14', '4', '1', '50'), -('8', '14', '4', '2', '25'), -('8', '14', '4', '3', '25'), - -('8', '14', '5', '0', '50'), -('8', '14', '5', '1', '50'), -('8', '14', '5', '2', '25'), -('8', '14', '5', '3', '25'), - -('8', '14', '6', '0', '50'), -('8', '14', '6', '1', '50'), -('8', '14', '6', '2', '25'), -('8', '14', '6', '3', '25'), - -('8', '15', '0', '0', '0'), -('8', '15', '0', '1', '0'), -('8', '15', '0', '2', '0'), -('8', '15', '0', '3', '0'), - -('8', '15', '1', '0', '0'), -('8', '15', '1', '1', '0'), -('8', '15', '1', '2', '0'), -('8', '15', '1', '3', '0'), - -('8', '15', '2', '0', '0'), -('8', '15', '2', '1', '0'), -('8', '15', '2', '2', '0'), -('8', '15', '2', '3', '0'), - -('8', '15', '3', '0', '0'), -('8', '15', '3', '1', '0'), -('8', '15', '3', '2', '0'), -('8', '15', '3', '3', '0'), - -('8', '15', '4', '0', '0'), -('8', '15', '4', '1', '0'), -('8', '15', '4', '2', '0'), -('8', '15', '4', '3', '0'), - -('8', '15', '5', '0', '0'), -('8', '15', '5', '1', '0'), -('8', '15', '5', '2', '0'), -('8', '15', '5', '3', '0'), - -('8', '15', '6', '0', '0'), -('8', '15', '6', '1', '0'), -('8', '15', '6', '2', '0'), -('8', '15', '6', '3', '0'), - --- SpellType_DispelIndex - -('9', '0', '0', '0', '0'), -('9', '0', '0', '1', '0'), -('9', '0', '0', '2', '0'), -('9', '0', '0', '3', '0'), - -('9', '0', '1', '0', '0'), -('9', '0', '1', '1', '0'), -('9', '0', '1', '2', '0'), -('9', '0', '1', '3', '0'), - -('9', '0', '2', '0', '0'), -('9', '0', '2', '1', '0'), -('9', '0', '2', '2', '0'), -('9', '0', '2', '3', '0'), - -('9', '0', '3', '0', '0'), -('9', '0', '3', '1', '0'), -('9', '0', '3', '2', '0'), -('9', '0', '3', '3', '0'), - -('9', '0', '4', '0', '0'), -('9', '0', '4', '1', '0'), -('9', '0', '4', '2', '0'), -('9', '0', '4', '3', '0'), - -('9', '0', '5', '0', '0'), -('9', '0', '5', '1', '0'), -('9', '0', '5', '2', '0'), -('9', '0', '5', '3', '0'), - -('9', '0', '6', '0', '0'), -('9', '0', '6', '1', '0'), -('9', '0', '6', '2', '0'), -('9', '0', '6', '3', '0'), - -('9', '1', '0', '0', '0'), -('9', '1', '0', '1', '0'), -('9', '1', '0', '2', '0'), -('9', '1', '0', '3', '0'), - -('9', '1', '1', '0', '0'), -('9', '1', '1', '1', '0'), -('9', '1', '1', '2', '0'), -('9', '1', '1', '3', '0'), - -('9', '1', '2', '0', '0'), -('9', '1', '2', '1', '0'), -('9', '1', '2', '2', '0'), -('9', '1', '2', '3', '0'), - -('9', '1', '3', '0', '0'), -('9', '1', '3', '1', '0'), -('9', '1', '3', '2', '0'), -('9', '1', '3', '3', '0'), - -('9', '1', '4', '0', '0'), -('9', '1', '4', '1', '0'), -('9', '1', '4', '2', '0'), -('9', '1', '4', '3', '0'), - -('9', '1', '5', '0', '0'), -('9', '1', '5', '1', '0'), -('9', '1', '5', '2', '0'), -('9', '1', '5', '3', '0'), - -('9', '1', '6', '0', '0'), -('9', '1', '6', '1', '0'), -('9', '1', '6', '2', '0'), -('9', '1', '6', '3', '0'), - -('9', '2', '0', '0', '0'), -('9', '2', '0', '1', '0'), -('9', '2', '0', '2', '0'), -('9', '2', '0', '3', '0'), - -('9', '2', '1', '0', '0'), -('9', '2', '1', '1', '0'), -('9', '2', '1', '2', '0'), -('9', '2', '1', '3', '0'), - -('9', '2', '2', '0', '0'), -('9', '2', '2', '1', '0'), -('9', '2', '2', '2', '0'), -('9', '2', '2', '3', '0'), - -('9', '2', '3', '0', '0'), -('9', '2', '3', '1', '0'), -('9', '2', '3', '2', '0'), -('9', '2', '3', '3', '0'), - -('9', '2', '4', '0', '0'), -('9', '2', '4', '1', '0'), -('9', '2', '4', '2', '0'), -('9', '2', '4', '3', '0'), - -('9', '2', '5', '0', '0'), -('9', '2', '5', '1', '0'), -('9', '2', '5', '2', '0'), -('9', '2', '5', '3', '0'), - -('9', '2', '6', '0', '0'), -('9', '2', '6', '1', '0'), -('9', '2', '6', '2', '0'), -('9', '2', '6', '3', '0'), - -('9', '3', '0', '0', '0'), -('9', '3', '0', '1', '0'), -('9', '3', '0', '2', '0'), -('9', '3', '0', '3', '0'), - -('9', '3', '1', '0', '0'), -('9', '3', '1', '1', '0'), -('9', '3', '1', '2', '0'), -('9', '3', '1', '3', '0'), - -('9', '3', '2', '0', '0'), -('9', '3', '2', '1', '0'), -('9', '3', '2', '2', '0'), -('9', '3', '2', '3', '0'), - -('9', '3', '3', '0', '0'), -('9', '3', '3', '1', '0'), -('9', '3', '3', '2', '0'), -('9', '3', '3', '3', '0'), - -('9', '3', '4', '0', '0'), -('9', '3', '4', '1', '0'), -('9', '3', '4', '2', '0'), -('9', '3', '4', '3', '0'), - -('9', '3', '5', '0', '0'), -('9', '3', '5', '1', '0'), -('9', '3', '5', '2', '0'), -('9', '3', '5', '3', '0'), - -('9', '3', '6', '0', '0'), -('9', '3', '6', '1', '0'), -('9', '3', '6', '2', '0'), -('9', '3', '6', '3', '0'), - -('9', '4', '0', '0', '0'), -('9', '4', '0', '1', '0'), -('9', '4', '0', '2', '0'), -('9', '4', '0', '3', '0'), - -('9', '4', '1', '0', '0'), -('9', '4', '1', '1', '0'), -('9', '4', '1', '2', '0'), -('9', '4', '1', '3', '0'), - -('9', '4', '2', '0', '0'), -('9', '4', '2', '1', '0'), -('9', '4', '2', '2', '0'), -('9', '4', '2', '3', '0'), - -('9', '4', '3', '0', '0'), -('9', '4', '3', '1', '0'), -('9', '4', '3', '2', '0'), -('9', '4', '3', '3', '0'), - -('9', '4', '4', '0', '0'), -('9', '4', '4', '1', '0'), -('9', '4', '4', '2', '0'), -('9', '4', '4', '3', '0'), - -('9', '4', '5', '0', '0'), -('9', '4', '5', '1', '0'), -('9', '4', '5', '2', '0'), -('9', '4', '5', '3', '0'), - -('9', '4', '6', '0', '0'), -('9', '4', '6', '1', '0'), -('9', '4', '6', '2', '0'), -('9', '4', '6', '3', '0'), - -('9', '5', '0', '0', '0'), -('9', '5', '0', '1', '0'), -('9', '5', '0', '2', '0'), -('9', '5', '0', '3', '0'), - -('9', '5', '1', '0', '0'), -('9', '5', '1', '1', '0'), -('9', '5', '1', '2', '0'), -('9', '5', '1', '3', '0'), - -('9', '5', '2', '0', '0'), -('9', '5', '2', '1', '0'), -('9', '5', '2', '2', '0'), -('9', '5', '2', '3', '0'), - -('9', '5', '3', '0', '0'), -('9', '5', '3', '1', '0'), -('9', '5', '3', '2', '0'), -('9', '5', '3', '3', '0'), - -('9', '5', '4', '0', '0'), -('9', '5', '4', '1', '0'), -('9', '5', '4', '2', '0'), -('9', '5', '4', '3', '0'), - -('9', '5', '5', '0', '0'), -('9', '5', '5', '1', '0'), -('9', '5', '5', '2', '0'), -('9', '5', '5', '3', '0'), - -('9', '5', '6', '0', '0'), -('9', '5', '6', '1', '0'), -('9', '5', '6', '2', '0'), -('9', '5', '6', '3', '0'), - -('9', '6', '0', '0', '0'), -('9', '6', '0', '1', '0'), -('9', '6', '0', '2', '0'), -('9', '6', '0', '3', '0'), - -('9', '6', '1', '0', '0'), -('9', '6', '1', '1', '0'), -('9', '6', '1', '2', '0'), -('9', '6', '1', '3', '0'), - -('9', '6', '2', '0', '0'), -('9', '6', '2', '1', '0'), -('9', '6', '2', '2', '0'), -('9', '6', '2', '3', '0'), - -('9', '6', '3', '0', '0'), -('9', '6', '3', '1', '0'), -('9', '6', '3', '2', '0'), -('9', '6', '3', '3', '0'), - -('9', '6', '4', '0', '0'), -('9', '6', '4', '1', '0'), -('9', '6', '4', '2', '0'), -('9', '6', '4', '3', '0'), - -('9', '6', '5', '0', '0'), -('9', '6', '5', '1', '0'), -('9', '6', '5', '2', '0'), -('9', '6', '5', '3', '0'), - -('9', '6', '6', '0', '0'), -('9', '6', '6', '1', '0'), -('9', '6', '6', '2', '0'), -('9', '6', '6', '3', '0'), - -('9', '7', '0', '0', '0'), -('9', '7', '0', '1', '0'), -('9', '7', '0', '2', '0'), -('9', '7', '0', '3', '0'), - -('9', '7', '1', '0', '0'), -('9', '7', '1', '1', '0'), -('9', '7', '1', '2', '0'), -('9', '7', '1', '3', '0'), - -('9', '7', '2', '0', '0'), -('9', '7', '2', '1', '0'), -('9', '7', '2', '2', '0'), -('9', '7', '2', '3', '0'), - -('9', '7', '3', '0', '0'), -('9', '7', '3', '1', '0'), -('9', '7', '3', '2', '0'), -('9', '7', '3', '3', '0'), - -('9', '7', '4', '0', '0'), -('9', '7', '4', '1', '0'), -('9', '7', '4', '2', '0'), -('9', '7', '4', '3', '0'), - -('9', '7', '5', '0', '0'), -('9', '7', '5', '1', '0'), -('9', '7', '5', '2', '0'), -('9', '7', '5', '3', '0'), - -('9', '7', '6', '0', '0'), -('9', '7', '6', '1', '0'), -('9', '7', '6', '2', '0'), -('9', '7', '6', '3', '0'), - -('9', '8', '0', '0', '0'), -('9', '8', '0', '1', '0'), -('9', '8', '0', '2', '0'), -('9', '8', '0', '3', '0'), - -('9', '8', '1', '0', '0'), -('9', '8', '1', '1', '0'), -('9', '8', '1', '2', '0'), -('9', '8', '1', '3', '0'), - -('9', '8', '2', '0', '0'), -('9', '8', '2', '1', '0'), -('9', '8', '2', '2', '0'), -('9', '8', '2', '3', '0'), - -('9', '8', '3', '0', '0'), -('9', '8', '3', '1', '0'), -('9', '8', '3', '2', '0'), -('9', '8', '3', '3', '0'), - -('9', '8', '4', '0', '0'), -('9', '8', '4', '1', '0'), -('9', '8', '4', '2', '0'), -('9', '8', '4', '3', '0'), - -('9', '8', '5', '0', '0'), -('9', '8', '5', '1', '0'), -('9', '8', '5', '2', '0'), -('9', '8', '5', '3', '0'), - -('9', '8', '6', '0', '0'), -('9', '8', '6', '1', '0'), -('9', '8', '6', '2', '0'), -('9', '8', '6', '3', '0'), - -('9', '9', '0', '0', '0'), -('9', '9', '0', '1', '0'), -('9', '9', '0', '2', '0'), -('9', '9', '0', '3', '0'), - -('9', '9', '1', '0', '0'), -('9', '9', '1', '1', '0'), -('9', '9', '1', '2', '0'), -('9', '9', '1', '3', '0'), - -('9', '9', '2', '0', '0'), -('9', '9', '2', '1', '0'), -('9', '9', '2', '2', '0'), -('9', '9', '2', '3', '0'), - -('9', '9', '3', '0', '0'), -('9', '9', '3', '1', '0'), -('9', '9', '3', '2', '0'), -('9', '9', '3', '3', '0'), - -('9', '9', '4', '0', '0'), -('9', '9', '4', '1', '0'), -('9', '9', '4', '2', '0'), -('9', '9', '4', '3', '0'), - -('9', '9', '5', '0', '0'), -('9', '9', '5', '1', '0'), -('9', '9', '5', '2', '0'), -('9', '9', '5', '3', '0'), - -('9', '9', '6', '0', '0'), -('9', '9', '6', '1', '0'), -('9', '9', '6', '2', '0'), -('9', '9', '6', '3', '0'), - -('9', '10', '0', '0', '0'), -('9', '10', '0', '1', '0'), -('9', '10', '0', '2', '0'), -('9', '10', '0', '3', '0'), - -('9', '10', '1', '0', '0'), -('9', '10', '1', '1', '0'), -('9', '10', '1', '2', '0'), -('9', '10', '1', '3', '0'), - -('9', '10', '2', '0', '0'), -('9', '10', '2', '1', '0'), -('9', '10', '2', '2', '0'), -('9', '10', '2', '3', '0'), - -('9', '10', '3', '0', '0'), -('9', '10', '3', '1', '0'), -('9', '10', '3', '2', '0'), -('9', '10', '3', '3', '0'), - -('9', '10', '4', '0', '0'), -('9', '10', '4', '1', '0'), -('9', '10', '4', '2', '0'), -('9', '10', '4', '3', '0'), - -('9', '10', '5', '0', '0'), -('9', '10', '5', '1', '0'), -('9', '10', '5', '2', '0'), -('9', '10', '5', '3', '0'), - -('9', '10', '6', '0', '0'), -('9', '10', '6', '1', '0'), -('9', '10', '6', '2', '0'), -('9', '10', '6', '3', '0'), - -('9', '11', '0', '0', '0'), -('9', '11', '0', '1', '0'), -('9', '11', '0', '2', '0'), -('9', '11', '0', '3', '0'), - -('9', '11', '1', '0', '0'), -('9', '11', '1', '1', '0'), -('9', '11', '1', '2', '0'), -('9', '11', '1', '3', '0'), - -('9', '11', '2', '0', '0'), -('9', '11', '2', '1', '0'), -('9', '11', '2', '2', '0'), -('9', '11', '2', '3', '0'), - -('9', '11', '3', '0', '0'), -('9', '11', '3', '1', '0'), -('9', '11', '3', '2', '0'), -('9', '11', '3', '3', '0'), - -('9', '11', '4', '0', '0'), -('9', '11', '4', '1', '0'), -('9', '11', '4', '2', '0'), -('9', '11', '4', '3', '0'), - -('9', '11', '5', '0', '0'), -('9', '11', '5', '1', '0'), -('9', '11', '5', '2', '0'), -('9', '11', '5', '3', '0'), - -('9', '11', '6', '0', '0'), -('9', '11', '6', '1', '0'), -('9', '11', '6', '2', '0'), -('9', '11', '6', '3', '0'), - -('9', '12', '0', '0', '0'), -('9', '12', '0', '1', '0'), -('9', '12', '0', '2', '0'), -('9', '12', '0', '3', '0'), - -('9', '12', '1', '0', '0'), -('9', '12', '1', '1', '0'), -('9', '12', '1', '2', '0'), -('9', '12', '1', '3', '0'), - -('9', '12', '2', '0', '0'), -('9', '12', '2', '1', '0'), -('9', '12', '2', '2', '0'), -('9', '12', '2', '3', '0'), - -('9', '12', '3', '0', '0'), -('9', '12', '3', '1', '0'), -('9', '12', '3', '2', '0'), -('9', '12', '3', '3', '0'), - -('9', '12', '4', '0', '0'), -('9', '12', '4', '1', '0'), -('9', '12', '4', '2', '0'), -('9', '12', '4', '3', '0'), - -('9', '12', '5', '0', '0'), -('9', '12', '5', '1', '0'), -('9', '12', '5', '2', '0'), -('9', '12', '5', '3', '0'), - -('9', '12', '6', '0', '0'), -('9', '12', '6', '1', '0'), -('9', '12', '6', '2', '0'), -('9', '12', '6', '3', '0'), - -('9', '13', '0', '0', '0'), -('9', '13', '0', '1', '0'), -('9', '13', '0', '2', '0'), -('9', '13', '0', '3', '0'), - -('9', '13', '1', '0', '0'), -('9', '13', '1', '1', '0'), -('9', '13', '1', '2', '0'), -('9', '13', '1', '3', '0'), - -('9', '13', '2', '0', '0'), -('9', '13', '2', '1', '0'), -('9', '13', '2', '2', '0'), -('9', '13', '2', '3', '0'), - -('9', '13', '3', '0', '0'), -('9', '13', '3', '1', '0'), -('9', '13', '3', '2', '0'), -('9', '13', '3', '3', '0'), - -('9', '13', '4', '0', '0'), -('9', '13', '4', '1', '0'), -('9', '13', '4', '2', '0'), -('9', '13', '4', '3', '0'), - -('9', '13', '5', '0', '0'), -('9', '13', '5', '1', '0'), -('9', '13', '5', '2', '0'), -('9', '13', '5', '3', '0'), - -('9', '13', '6', '0', '0'), -('9', '13', '6', '1', '0'), -('9', '13', '6', '2', '0'), -('9', '13', '6', '3', '0'), - -('9', '14', '0', '0', '0'), -('9', '14', '0', '1', '0'), -('9', '14', '0', '2', '0'), -('9', '14', '0', '3', '0'), - -('9', '14', '1', '0', '0'), -('9', '14', '1', '1', '0'), -('9', '14', '1', '2', '0'), -('9', '14', '1', '3', '0'), - -('9', '14', '2', '0', '0'), -('9', '14', '2', '1', '0'), -('9', '14', '2', '2', '0'), -('9', '14', '2', '3', '0'), - -('9', '14', '3', '0', '0'), -('9', '14', '3', '1', '0'), -('9', '14', '3', '2', '0'), -('9', '14', '3', '3', '0'), - -('9', '14', '4', '0', '0'), -('9', '14', '4', '1', '0'), -('9', '14', '4', '2', '0'), -('9', '14', '4', '3', '0'), - -('9', '14', '5', '0', '0'), -('9', '14', '5', '1', '0'), -('9', '14', '5', '2', '0'), -('9', '14', '5', '3', '0'), - -('9', '14', '6', '0', '0'), -('9', '14', '6', '1', '0'), -('9', '14', '6', '2', '0'), -('9', '14', '6', '3', '0'), - -('9', '15', '0', '0', '0'), -('9', '15', '0', '1', '0'), -('9', '15', '0', '2', '0'), -('9', '15', '0', '3', '0'), - -('9', '15', '1', '0', '0'), -('9', '15', '1', '1', '0'), -('9', '15', '1', '2', '0'), -('9', '15', '1', '3', '0'), - -('9', '15', '2', '0', '0'), -('9', '15', '2', '1', '0'), -('9', '15', '2', '2', '0'), -('9', '15', '2', '3', '0'), - -('9', '15', '3', '0', '0'), -('9', '15', '3', '1', '0'), -('9', '15', '3', '2', '0'), -('9', '15', '3', '3', '0'), - -('9', '15', '4', '0', '0'), -('9', '15', '4', '1', '0'), -('9', '15', '4', '2', '0'), -('9', '15', '4', '3', '0'), - -('9', '15', '5', '0', '0'), -('9', '15', '5', '1', '0'), -('9', '15', '5', '2', '0'), -('9', '15', '5', '3', '0'), - -('9', '15', '6', '0', '0'), -('9', '15', '6', '1', '0'), -('9', '15', '6', '2', '0'), -('9', '15', '6', '3', '0'), - --- SpellType_InCombatBuffIndex - -('10', '0', '0', '0', '0'), -('10', '0', '0', '1', '0'), -('10', '0', '0', '2', '0'), -('10', '0', '0', '3', '0'), - -('10', '0', '1', '0', '0'), -('10', '0', '1', '1', '0'), -('10', '0', '1', '2', '0'), -('10', '0', '1', '3', '0'), - -('10', '0', '2', '0', '0'), -('10', '0', '2', '1', '0'), -('10', '0', '2', '2', '0'), -('10', '0', '2', '3', '0'), - -('10', '0', '3', '0', '0'), -('10', '0', '3', '1', '0'), -('10', '0', '3', '2', '0'), -('10', '0', '3', '3', '0'), - -('10', '0', '4', '0', '0'), -('10', '0', '4', '1', '0'), -('10', '0', '4', '2', '0'), -('10', '0', '4', '3', '0'), - -('10', '0', '5', '0', '0'), -('10', '0', '5', '1', '0'), -('10', '0', '5', '2', '0'), -('10', '0', '5', '3', '0'), - -('10', '0', '6', '0', '0'), -('10', '0', '6', '1', '0'), -('10', '0', '6', '2', '0'), -('10', '0', '6', '3', '0'), - -('10', '1', '0', '0', '0'), -('10', '1', '0', '1', '0'), -('10', '1', '0', '2', '0'), -('10', '1', '0', '3', '0'), - -('10', '1', '1', '0', '15'), -('10', '1', '1', '1', '15'), -('10', '1', '1', '2', '15'), -('10', '1', '1', '3', '15'), - -('10', '1', '2', '0', '0'), -('10', '1', '2', '1', '0'), -('10', '1', '2', '2', '0'), -('10', '1', '2', '3', '0'), - -('10', '1', '3', '0', '15'), -('10', '1', '3', '1', '15'), -('10', '1', '3', '2', '15'), -('10', '1', '3', '3', '15'), - -('10', '1', '4', '0', '25'), -('10', '1', '4', '1', '25'), -('10', '1', '4', '2', '25'), -('10', '1', '4', '3', '25'), - -('10', '1', '5', '0', '25'), -('10', '1', '5', '1', '25'), -('10', '1', '5', '2', '25'), -('10', '1', '5', '3', '25'), - -('10', '1', '6', '0', '25'), -('10', '1', '6', '1', '25'), -('10', '1', '6', '2', '25'), -('10', '1', '6', '3', '25'), - -('10', '2', '0', '0', '0'), -('10', '2', '0', '1', '0'), -('10', '2', '0', '2', '0'), -('10', '2', '0', '3', '0'), - -('10', '2', '1', '0', '25'), -('10', '2', '1', '1', '25'), -('10', '2', '1', '2', '25'), -('10', '2', '1', '3', '25'), - -('10', '2', '2', '0', '0'), -('10', '2', '2', '1', '0'), -('10', '2', '2', '2', '0'), -('10', '2', '2', '3', '0'), - -('10', '2', '3', '0', '25'), -('10', '2', '3', '1', '25'), -('10', '2', '3', '2', '25'), -('10', '2', '3', '3', '25'), - -('10', '2', '4', '0', '50'), -('10', '2', '4', '1', '50'), -('10', '2', '4', '2', '50'), -('10', '2', '4', '3', '50'), - -('10', '2', '5', '0', '50'), -('10', '2', '5', '1', '50'), -('10', '2', '5', '2', '50'), -('10', '2', '5', '3', '50'), - -('10', '2', '6', '0', '50'), -('10', '2', '6', '1', '50'), -('10', '2', '6', '2', '50'), -('10', '2', '6', '3', '50'), - -('10', '3', '0', '0', '0'), -('10', '3', '0', '1', '0'), -('10', '3', '0', '2', '0'), -('10', '3', '0', '3', '0'), - -('10', '3', '1', '0', '0'), -('10', '3', '1', '1', '0'), -('10', '3', '1', '2', '0'), -('10', '3', '1', '3', '0'), - -('10', '3', '2', '0', '0'), -('10', '3', '2', '1', '0'), -('10', '3', '2', '2', '0'), -('10', '3', '2', '3', '0'), - -('10', '3', '3', '0', '0'), -('10', '3', '3', '1', '0'), -('10', '3', '3', '2', '0'), -('10', '3', '3', '3', '0'), - -('10', '3', '4', '0', '0'), -('10', '3', '4', '1', '0'), -('10', '3', '4', '2', '0'), -('10', '3', '4', '3', '0'), - -('10', '3', '5', '0', '0'), -('10', '3', '5', '1', '0'), -('10', '3', '5', '2', '0'), -('10', '3', '5', '3', '0'), - -('10', '3', '6', '0', '0'), -('10', '3', '6', '1', '0'), -('10', '3', '6', '2', '0'), -('10', '3', '6', '3', '0'), - -('10', '4', '0', '0', '0'), -('10', '4', '0', '1', '0'), -('10', '4', '0', '2', '0'), -('10', '4', '0', '3', '0'), - -('10', '4', '1', '0', '0'), -('10', '4', '1', '1', '0'), -('10', '4', '1', '2', '0'), -('10', '4', '1', '3', '0'), - -('10', '4', '2', '0', '0'), -('10', '4', '2', '1', '0'), -('10', '4', '2', '2', '0'), -('10', '4', '2', '3', '0'), - -('10', '4', '3', '0', '0'), -('10', '4', '3', '1', '0'), -('10', '4', '3', '2', '0'), -('10', '4', '3', '3', '0'), - -('10', '4', '4', '0', '0'), -('10', '4', '4', '1', '0'), -('10', '4', '4', '2', '0'), -('10', '4', '4', '3', '0'), - -('10', '4', '5', '0', '0'), -('10', '4', '5', '1', '0'), -('10', '4', '5', '2', '0'), -('10', '4', '5', '3', '0'), - -('10', '4', '6', '0', '0'), -('10', '4', '6', '1', '0'), -('10', '4', '6', '2', '0'), -('10', '4', '6', '3', '0'), - -('10', '5', '0', '0', '0'), -('10', '5', '0', '1', '0'), -('10', '5', '0', '2', '0'), -('10', '5', '0', '3', '0'), - -('10', '5', '1', '0', '0'), -('10', '5', '1', '1', '0'), -('10', '5', '1', '2', '0'), -('10', '5', '1', '3', '0'), - -('10', '5', '2', '0', '0'), -('10', '5', '2', '1', '0'), -('10', '5', '2', '2', '0'), -('10', '5', '2', '3', '0'), - -('10', '5', '3', '0', '0'), -('10', '5', '3', '1', '0'), -('10', '5', '3', '2', '0'), -('10', '5', '3', '3', '0'), - -('10', '5', '4', '0', '0'), -('10', '5', '4', '1', '0'), -('10', '5', '4', '2', '0'), -('10', '5', '4', '3', '0'), - -('10', '5', '5', '0', '0'), -('10', '5', '5', '1', '0'), -('10', '5', '5', '2', '0'), -('10', '5', '5', '3', '0'), - -('10', '5', '6', '0', '0'), -('10', '5', '6', '1', '0'), -('10', '5', '6', '2', '0'), -('10', '5', '6', '3', '0'), - -('10', '6', '0', '0', '0'), -('10', '6', '0', '1', '0'), -('10', '6', '0', '2', '0'), -('10', '6', '0', '3', '0'), - -('10', '6', '1', '0', '0'), -('10', '6', '1', '1', '0'), -('10', '6', '1', '2', '0'), -('10', '6', '1', '3', '0'), - -('10', '6', '2', '0', '0'), -('10', '6', '2', '1', '0'), -('10', '6', '2', '2', '0'), -('10', '6', '2', '3', '0'), - -('10', '6', '3', '0', '0'), -('10', '6', '3', '1', '0'), -('10', '6', '3', '2', '0'), -('10', '6', '3', '3', '0'), - -('10', '6', '4', '0', '0'), -('10', '6', '4', '1', '0'), -('10', '6', '4', '2', '0'), -('10', '6', '4', '3', '0'), - -('10', '6', '5', '0', '0'), -('10', '6', '5', '1', '0'), -('10', '6', '5', '2', '0'), -('10', '6', '5', '3', '0'), - -('10', '6', '6', '0', '0'), -('10', '6', '6', '1', '0'), -('10', '6', '6', '2', '0'), -('10', '6', '6', '3', '0'), - -('10', '7', '0', '0', '0'), -('10', '7', '0', '1', '0'), -('10', '7', '0', '2', '0'), -('10', '7', '0', '3', '0'), - -('10', '7', '1', '0', '0'), -('10', '7', '1', '1', '0'), -('10', '7', '1', '2', '0'), -('10', '7', '1', '3', '0'), - -('10', '7', '2', '0', '0'), -('10', '7', '2', '1', '0'), -('10', '7', '2', '2', '0'), -('10', '7', '2', '3', '0'), - -('10', '7', '3', '0', '0'), -('10', '7', '3', '1', '0'), -('10', '7', '3', '2', '0'), -('10', '7', '3', '3', '0'), - -('10', '7', '4', '0', '0'), -('10', '7', '4', '1', '0'), -('10', '7', '4', '2', '0'), -('10', '7', '4', '3', '0'), - -('10', '7', '5', '0', '0'), -('10', '7', '5', '1', '0'), -('10', '7', '5', '2', '0'), -('10', '7', '5', '3', '0'), - -('10', '7', '6', '0', '0'), -('10', '7', '6', '1', '0'), -('10', '7', '6', '2', '0'), -('10', '7', '6', '3', '0'), - -('10', '8', '0', '0', '0'), -('10', '8', '0', '1', '0'), -('10', '8', '0', '2', '0'), -('10', '8', '0', '3', '0'), - -('10', '8', '1', '0', '0'), -('10', '8', '1', '1', '0'), -('10', '8', '1', '2', '0'), -('10', '8', '1', '3', '0'), - -('10', '8', '2', '0', '0'), -('10', '8', '2', '1', '0'), -('10', '8', '2', '2', '0'), -('10', '8', '2', '3', '0'), - -('10', '8', '3', '0', '0'), -('10', '8', '3', '1', '0'), -('10', '8', '3', '2', '0'), -('10', '8', '3', '3', '0'), - -('10', '8', '4', '0', '0'), -('10', '8', '4', '1', '0'), -('10', '8', '4', '2', '0'), -('10', '8', '4', '3', '0'), - -('10', '8', '5', '0', '0'), -('10', '8', '5', '1', '0'), -('10', '8', '5', '2', '0'), -('10', '8', '5', '3', '0'), - -('10', '8', '6', '0', '0'), -('10', '8', '6', '1', '0'), -('10', '8', '6', '2', '0'), -('10', '8', '6', '3', '0'), - -('10', '9', '0', '0', '0'), -('10', '9', '0', '1', '0'), -('10', '9', '0', '2', '0'), -('10', '9', '0', '3', '0'), - -('10', '9', '1', '0', '50'), -('10', '9', '1', '1', '75'), -('10', '9', '1', '2', '50'), -('10', '9', '1', '3', '75'), - -('10', '9', '2', '0', '25'), -('10', '9', '2', '1', '50'), -('10', '9', '2', '2', '25'), -('10', '9', '2', '3', '50'), - -('10', '9', '3', '0', '50'), -('10', '9', '3', '1', '75'), -('10', '9', '3', '2', '50'), -('10', '9', '3', '3', '75'), - -('10', '9', '4', '0', '75'), -('10', '9', '4', '1', '100'), -('10', '9', '4', '2', '75'), -('10', '9', '4', '3', '100'), - -('10', '9', '5', '0', '75'), -('10', '9', '5', '1', '100'), -('10', '9', '5', '2', '75'), -('10', '9', '5', '3', '100'), - -('10', '9', '6', '0', '75'), -('10', '9', '6', '1', '100'), -('10', '9', '6', '2', '75'), -('10', '9', '6', '3', '100'), - -('10', '10', '0', '0', '0'), -('10', '10', '0', '1', '0'), -('10', '10', '0', '2', '0'), -('10', '10', '0', '3', '0'), - -('10', '10', '1', '0', '0'), -('10', '10', '1', '1', '0'), -('10', '10', '1', '2', '0'), -('10', '10', '1', '3', '0'), - -('10', '10', '2', '0', '0'), -('10', '10', '2', '1', '0'), -('10', '10', '2', '2', '0'), -('10', '10', '2', '3', '0'), - -('10', '10', '3', '0', '0'), -('10', '10', '3', '1', '0'), -('10', '10', '3', '2', '0'), -('10', '10', '3', '3', '0'), - -('10', '10', '4', '0', '0'), -('10', '10', '4', '1', '0'), -('10', '10', '4', '2', '0'), -('10', '10', '4', '3', '0'), - -('10', '10', '5', '0', '0'), -('10', '10', '5', '1', '0'), -('10', '10', '5', '2', '0'), -('10', '10', '5', '3', '0'), - -('10', '10', '6', '0', '0'), -('10', '10', '6', '1', '0'), -('10', '10', '6', '2', '0'), -('10', '10', '6', '3', '0'), - -('10', '11', '0', '0', '0'), -('10', '11', '0', '1', '0'), -('10', '11', '0', '2', '0'), -('10', '11', '0', '3', '0'), - -('10', '11', '1', '0', '0'), -('10', '11', '1', '1', '0'), -('10', '11', '1', '2', '0'), -('10', '11', '1', '3', '0'), - -('10', '11', '2', '0', '0'), -('10', '11', '2', '1', '0'), -('10', '11', '2', '2', '0'), -('10', '11', '2', '3', '0'), - -('10', '11', '3', '0', '0'), -('10', '11', '3', '1', '0'), -('10', '11', '3', '2', '0'), -('10', '11', '3', '3', '0'), - -('10', '11', '4', '0', '0'), -('10', '11', '4', '1', '0'), -('10', '11', '4', '2', '0'), -('10', '11', '4', '3', '0'), - -('10', '11', '5', '0', '0'), -('10', '11', '5', '1', '0'), -('10', '11', '5', '2', '0'), -('10', '11', '5', '3', '0'), - -('10', '11', '6', '0', '0'), -('10', '11', '6', '1', '0'), -('10', '11', '6', '2', '0'), -('10', '11', '6', '3', '0'), - -('10', '12', '0', '0', '0'), -('10', '12', '0', '1', '0'), -('10', '12', '0', '2', '0'), -('10', '12', '0', '3', '0'), - -('10', '12', '1', '0', '0'), -('10', '12', '1', '1', '0'), -('10', '12', '1', '2', '0'), -('10', '12', '1', '3', '0'), - -('10', '12', '2', '0', '0'), -('10', '12', '2', '1', '0'), -('10', '12', '2', '2', '0'), -('10', '12', '2', '3', '0'), - -('10', '12', '3', '0', '0'), -('10', '12', '3', '1', '0'), -('10', '12', '3', '2', '0'), -('10', '12', '3', '3', '0'), - -('10', '12', '4', '0', '0'), -('10', '12', '4', '1', '0'), -('10', '12', '4', '2', '0'), -('10', '12', '4', '3', '0'), - -('10', '12', '5', '0', '0'), -('10', '12', '5', '1', '0'), -('10', '12', '5', '2', '0'), -('10', '12', '5', '3', '0'), - -('10', '12', '6', '0', '0'), -('10', '12', '6', '1', '0'), -('10', '12', '6', '2', '0'), -('10', '12', '6', '3', '0'), - -('10', '13', '0', '0', '0'), -('10', '13', '0', '1', '0'), -('10', '13', '0', '2', '0'), -('10', '13', '0', '3', '0'), - -('10', '13', '1', '0', '0'), -('10', '13', '1', '1', '0'), -('10', '13', '1', '2', '0'), -('10', '13', '1', '3', '0'), - -('10', '13', '2', '0', '0'), -('10', '13', '2', '1', '0'), -('10', '13', '2', '2', '0'), -('10', '13', '2', '3', '0'), - -('10', '13', '3', '0', '0'), -('10', '13', '3', '1', '0'), -('10', '13', '3', '2', '0'), -('10', '13', '3', '3', '0'), - -('10', '13', '4', '0', '0'), -('10', '13', '4', '1', '0'), -('10', '13', '4', '2', '0'), -('10', '13', '4', '3', '0'), - -('10', '13', '5', '0', '0'), -('10', '13', '5', '1', '0'), -('10', '13', '5', '2', '0'), -('10', '13', '5', '3', '0'), - -('10', '13', '6', '0', '0'), -('10', '13', '6', '1', '0'), -('10', '13', '6', '2', '0'), -('10', '13', '6', '3', '0'), - -('10', '14', '0', '0', '0'), -('10', '14', '0', '1', '0'), -('10', '14', '0', '2', '0'), -('10', '14', '0', '3', '0'), - -('10', '14', '1', '0', '0'), -('10', '14', '1', '1', '0'), -('10', '14', '1', '2', '0'), -('10', '14', '1', '3', '0'), - -('10', '14', '2', '0', '0'), -('10', '14', '2', '1', '0'), -('10', '14', '2', '2', '0'), -('10', '14', '2', '3', '0'), - -('10', '14', '3', '0', '0'), -('10', '14', '3', '1', '0'), -('10', '14', '3', '2', '0'), -('10', '14', '3', '3', '0'), - -('10', '14', '4', '0', '0'), -('10', '14', '4', '1', '0'), -('10', '14', '4', '2', '0'), -('10', '14', '4', '3', '0'), - -('10', '14', '5', '0', '0'), -('10', '14', '5', '1', '0'), -('10', '14', '5', '2', '0'), -('10', '14', '5', '3', '0'), - -('10', '14', '6', '0', '0'), -('10', '14', '6', '1', '0'), -('10', '14', '6', '2', '0'), -('10', '14', '6', '3', '0'), - -('10', '15', '0', '0', '0'), -('10', '15', '0', '1', '0'), -('10', '15', '0', '2', '0'), -('10', '15', '0', '3', '0'), - -('10', '15', '1', '0', '0'), -('10', '15', '1', '1', '0'), -('10', '15', '1', '2', '0'), -('10', '15', '1', '3', '0'), - -('10', '15', '2', '0', '0'), -('10', '15', '2', '1', '0'), -('10', '15', '2', '2', '0'), -('10', '15', '2', '3', '0'), - -('10', '15', '3', '0', '0'), -('10', '15', '3', '1', '0'), -('10', '15', '3', '2', '0'), -('10', '15', '3', '3', '0'), - -('10', '15', '4', '0', '0'), -('10', '15', '4', '1', '0'), -('10', '15', '4', '2', '0'), -('10', '15', '4', '3', '0'), - -('10', '15', '5', '0', '0'), -('10', '15', '5', '1', '0'), -('10', '15', '5', '2', '0'), -('10', '15', '5', '3', '0'), - -('10', '15', '6', '0', '0'), -('10', '15', '6', '1', '0'), -('10', '15', '6', '2', '0'), -('10', '15', '6', '3', '0'), - --- SpellType_MezIndex - -('11', '0', '0', '0', '0'), -('11', '0', '0', '1', '0'), -('11', '0', '0', '2', '0'), -('11', '0', '0', '3', '0'), - -('11', '0', '1', '0', '0'), -('11', '0', '1', '1', '0'), -('11', '0', '1', '2', '0'), -('11', '0', '1', '3', '0'), - -('11', '0', '2', '0', '0'), -('11', '0', '2', '1', '0'), -('11', '0', '2', '2', '0'), -('11', '0', '2', '3', '0'), - -('11', '0', '3', '0', '0'), -('11', '0', '3', '1', '0'), -('11', '0', '3', '2', '0'), -('11', '0', '3', '3', '0'), - -('11', '0', '4', '0', '0'), -('11', '0', '4', '1', '0'), -('11', '0', '4', '2', '0'), -('11', '0', '4', '3', '0'), - -('11', '0', '5', '0', '0'), -('11', '0', '5', '1', '0'), -('11', '0', '5', '2', '0'), -('11', '0', '5', '3', '0'), - -('11', '0', '6', '0', '0'), -('11', '0', '6', '1', '0'), -('11', '0', '6', '2', '0'), -('11', '0', '6', '3', '0'), - -('11', '1', '0', '0', '0'), -('11', '1', '0', '1', '0'), -('11', '1', '0', '2', '0'), -('11', '1', '0', '3', '0'), - -('11', '1', '1', '0', '0'), -('11', '1', '1', '1', '0'), -('11', '1', '1', '2', '0'), -('11', '1', '1', '3', '0'), - -('11', '1', '2', '0', '0'), -('11', '1', '2', '1', '0'), -('11', '1', '2', '2', '0'), -('11', '1', '2', '3', '0'), - -('11', '1', '3', '0', '0'), -('11', '1', '3', '1', '0'), -('11', '1', '3', '2', '0'), -('11', '1', '3', '3', '0'), - -('11', '1', '4', '0', '0'), -('11', '1', '4', '1', '0'), -('11', '1', '4', '2', '0'), -('11', '1', '4', '3', '0'), - -('11', '1', '5', '0', '0'), -('11', '1', '5', '1', '0'), -('11', '1', '5', '2', '0'), -('11', '1', '5', '3', '0'), - -('11', '1', '6', '0', '0'), -('11', '1', '6', '1', '0'), -('11', '1', '6', '2', '0'), -('11', '1', '6', '3', '0'), - -('11', '2', '0', '0', '0'), -('11', '2', '0', '1', '0'), -('11', '2', '0', '2', '0'), -('11', '2', '0', '3', '0'), - -('11', '2', '1', '0', '0'), -('11', '2', '1', '1', '0'), -('11', '2', '1', '2', '0'), -('11', '2', '1', '3', '0'), - -('11', '2', '2', '0', '0'), -('11', '2', '2', '1', '0'), -('11', '2', '2', '2', '0'), -('11', '2', '2', '3', '0'), - -('11', '2', '3', '0', '0'), -('11', '2', '3', '1', '0'), -('11', '2', '3', '2', '0'), -('11', '2', '3', '3', '0'), - -('11', '2', '4', '0', '0'), -('11', '2', '4', '1', '0'), -('11', '2', '4', '2', '0'), -('11', '2', '4', '3', '0'), - -('11', '2', '5', '0', '0'), -('11', '2', '5', '1', '0'), -('11', '2', '5', '2', '0'), -('11', '2', '5', '3', '0'), - -('11', '2', '6', '0', '0'), -('11', '2', '6', '1', '0'), -('11', '2', '6', '2', '0'), -('11', '2', '6', '3', '0'), - -('11', '3', '0', '0', '0'), -('11', '3', '0', '1', '0'), -('11', '3', '0', '2', '0'), -('11', '3', '0', '3', '0'), - -('11', '3', '1', '0', '0'), -('11', '3', '1', '1', '0'), -('11', '3', '1', '2', '0'), -('11', '3', '1', '3', '0'), - -('11', '3', '2', '0', '0'), -('11', '3', '2', '1', '0'), -('11', '3', '2', '2', '0'), -('11', '3', '2', '3', '0'), - -('11', '3', '3', '0', '0'), -('11', '3', '3', '1', '0'), -('11', '3', '3', '2', '0'), -('11', '3', '3', '3', '0'), - -('11', '3', '4', '0', '0'), -('11', '3', '4', '1', '0'), -('11', '3', '4', '2', '0'), -('11', '3', '4', '3', '0'), - -('11', '3', '5', '0', '0'), -('11', '3', '5', '1', '0'), -('11', '3', '5', '2', '0'), -('11', '3', '5', '3', '0'), - -('11', '3', '6', '0', '0'), -('11', '3', '6', '1', '0'), -('11', '3', '6', '2', '0'), -('11', '3', '6', '3', '0'), - -('11', '4', '0', '0', '0'), -('11', '4', '0', '1', '0'), -('11', '4', '0', '2', '0'), -('11', '4', '0', '3', '0'), - -('11', '4', '1', '0', '0'), -('11', '4', '1', '1', '0'), -('11', '4', '1', '2', '0'), -('11', '4', '1', '3', '0'), - -('11', '4', '2', '0', '0'), -('11', '4', '2', '1', '0'), -('11', '4', '2', '2', '0'), -('11', '4', '2', '3', '0'), - -('11', '4', '3', '0', '0'), -('11', '4', '3', '1', '0'), -('11', '4', '3', '2', '0'), -('11', '4', '3', '3', '0'), - -('11', '4', '4', '0', '0'), -('11', '4', '4', '1', '0'), -('11', '4', '4', '2', '0'), -('11', '4', '4', '3', '0'), - -('11', '4', '5', '0', '0'), -('11', '4', '5', '1', '0'), -('11', '4', '5', '2', '0'), -('11', '4', '5', '3', '0'), - -('11', '4', '6', '0', '0'), -('11', '4', '6', '1', '0'), -('11', '4', '6', '2', '0'), -('11', '4', '6', '3', '0'), - -('11', '5', '0', '0', '0'), -('11', '5', '0', '1', '0'), -('11', '5', '0', '2', '0'), -('11', '5', '0', '3', '0'), - -('11', '5', '1', '0', '0'), -('11', '5', '1', '1', '0'), -('11', '5', '1', '2', '0'), -('11', '5', '1', '3', '0'), - -('11', '5', '2', '0', '0'), -('11', '5', '2', '1', '0'), -('11', '5', '2', '2', '0'), -('11', '5', '2', '3', '0'), - -('11', '5', '3', '0', '0'), -('11', '5', '3', '1', '0'), -('11', '5', '3', '2', '0'), -('11', '5', '3', '3', '0'), - -('11', '5', '4', '0', '0'), -('11', '5', '4', '1', '0'), -('11', '5', '4', '2', '0'), -('11', '5', '4', '3', '0'), - -('11', '5', '5', '0', '0'), -('11', '5', '5', '1', '0'), -('11', '5', '5', '2', '0'), -('11', '5', '5', '3', '0'), - -('11', '5', '6', '0', '0'), -('11', '5', '6', '1', '0'), -('11', '5', '6', '2', '0'), -('11', '5', '6', '3', '0'), - -('11', '6', '0', '0', '0'), -('11', '6', '0', '1', '0'), -('11', '6', '0', '2', '0'), -('11', '6', '0', '3', '0'), - -('11', '6', '1', '0', '0'), -('11', '6', '1', '1', '0'), -('11', '6', '1', '2', '0'), -('11', '6', '1', '3', '0'), - -('11', '6', '2', '0', '0'), -('11', '6', '2', '1', '0'), -('11', '6', '2', '2', '0'), -('11', '6', '2', '3', '0'), - -('11', '6', '3', '0', '0'), -('11', '6', '3', '1', '0'), -('11', '6', '3', '2', '0'), -('11', '6', '3', '3', '0'), - -('11', '6', '4', '0', '0'), -('11', '6', '4', '1', '0'), -('11', '6', '4', '2', '0'), -('11', '6', '4', '3', '0'), - -('11', '6', '5', '0', '0'), -('11', '6', '5', '1', '0'), -('11', '6', '5', '2', '0'), -('11', '6', '5', '3', '0'), - -('11', '6', '6', '0', '0'), -('11', '6', '6', '1', '0'), -('11', '6', '6', '2', '0'), -('11', '6', '6', '3', '0'), - -('11', '7', '0', '0', '0'), -('11', '7', '0', '1', '0'), -('11', '7', '0', '2', '0'), -('11', '7', '0', '3', '0'), - -('11', '7', '1', '0', '0'), -('11', '7', '1', '1', '0'), -('11', '7', '1', '2', '0'), -('11', '7', '1', '3', '0'), - -('11', '7', '2', '0', '0'), -('11', '7', '2', '1', '0'), -('11', '7', '2', '2', '0'), -('11', '7', '2', '3', '0'), - -('11', '7', '3', '0', '0'), -('11', '7', '3', '1', '0'), -('11', '7', '3', '2', '0'), -('11', '7', '3', '3', '0'), - -('11', '7', '4', '0', '0'), -('11', '7', '4', '1', '0'), -('11', '7', '4', '2', '0'), -('11', '7', '4', '3', '0'), - -('11', '7', '5', '0', '0'), -('11', '7', '5', '1', '0'), -('11', '7', '5', '2', '0'), -('11', '7', '5', '3', '0'), - -('11', '7', '6', '0', '0'), -('11', '7', '6', '1', '0'), -('11', '7', '6', '2', '0'), -('11', '7', '6', '3', '0'), - -('11', '8', '0', '0', '0'), -('11', '8', '0', '1', '0'), -('11', '8', '0', '2', '0'), -('11', '8', '0', '3', '0'), - -('11', '8', '1', '0', '0'), -('11', '8', '1', '1', '0'), -('11', '8', '1', '2', '0'), -('11', '8', '1', '3', '0'), - -('11', '8', '2', '0', '0'), -('11', '8', '2', '1', '0'), -('11', '8', '2', '2', '0'), -('11', '8', '2', '3', '0'), - -('11', '8', '3', '0', '0'), -('11', '8', '3', '1', '0'), -('11', '8', '3', '2', '0'), -('11', '8', '3', '3', '0'), - -('11', '8', '4', '0', '0'), -('11', '8', '4', '1', '0'), -('11', '8', '4', '2', '0'), -('11', '8', '4', '3', '0'), - -('11', '8', '5', '0', '0'), -('11', '8', '5', '1', '0'), -('11', '8', '5', '2', '0'), -('11', '8', '5', '3', '0'), - -('11', '8', '6', '0', '0'), -('11', '8', '6', '1', '0'), -('11', '8', '6', '2', '0'), -('11', '8', '6', '3', '0'), - -('11', '9', '0', '0', '0'), -('11', '9', '0', '1', '0'), -('11', '9', '0', '2', '0'), -('11', '9', '0', '3', '0'), - -('11', '9', '1', '0', '0'), -('11', '9', '1', '1', '0'), -('11', '9', '1', '2', '0'), -('11', '9', '1', '3', '0'), - -('11', '9', '2', '0', '0'), -('11', '9', '2', '1', '0'), -('11', '9', '2', '2', '0'), -('11', '9', '2', '3', '0'), - -('11', '9', '3', '0', '0'), -('11', '9', '3', '1', '0'), -('11', '9', '3', '2', '0'), -('11', '9', '3', '3', '0'), - -('11', '9', '4', '0', '0'), -('11', '9', '4', '1', '0'), -('11', '9', '4', '2', '0'), -('11', '9', '4', '3', '0'), - -('11', '9', '5', '0', '0'), -('11', '9', '5', '1', '0'), -('11', '9', '5', '2', '0'), -('11', '9', '5', '3', '0'), - -('11', '9', '6', '0', '0'), -('11', '9', '6', '1', '0'), -('11', '9', '6', '2', '0'), -('11', '9', '6', '3', '0'), - -('11', '10', '0', '0', '0'), -('11', '10', '0', '1', '0'), -('11', '10', '0', '2', '0'), -('11', '10', '0', '3', '0'), - -('11', '10', '1', '0', '0'), -('11', '10', '1', '1', '0'), -('11', '10', '1', '2', '0'), -('11', '10', '1', '3', '0'), - -('11', '10', '2', '0', '0'), -('11', '10', '2', '1', '0'), -('11', '10', '2', '2', '0'), -('11', '10', '2', '3', '0'), - -('11', '10', '3', '0', '0'), -('11', '10', '3', '1', '0'), -('11', '10', '3', '2', '0'), -('11', '10', '3', '3', '0'), - -('11', '10', '4', '0', '0'), -('11', '10', '4', '1', '0'), -('11', '10', '4', '2', '0'), -('11', '10', '4', '3', '0'), - -('11', '10', '5', '0', '0'), -('11', '10', '5', '1', '0'), -('11', '10', '5', '2', '0'), -('11', '10', '5', '3', '0'), - -('11', '10', '6', '0', '0'), -('11', '10', '6', '1', '0'), -('11', '10', '6', '2', '0'), -('11', '10', '6', '3', '0'), - -('11', '11', '0', '0', '0'), -('11', '11', '0', '1', '0'), -('11', '11', '0', '2', '0'), -('11', '11', '0', '3', '0'), - -('11', '11', '1', '0', '0'), -('11', '11', '1', '1', '0'), -('11', '11', '1', '2', '0'), -('11', '11', '1', '3', '0'), - -('11', '11', '2', '0', '0'), -('11', '11', '2', '1', '0'), -('11', '11', '2', '2', '0'), -('11', '11', '2', '3', '0'), - -('11', '11', '3', '0', '0'), -('11', '11', '3', '1', '0'), -('11', '11', '3', '2', '0'), -('11', '11', '3', '3', '0'), - -('11', '11', '4', '0', '0'), -('11', '11', '4', '1', '0'), -('11', '11', '4', '2', '0'), -('11', '11', '4', '3', '0'), - -('11', '11', '5', '0', '0'), -('11', '11', '5', '1', '0'), -('11', '11', '5', '2', '0'), -('11', '11', '5', '3', '0'), - -('11', '11', '6', '0', '0'), -('11', '11', '6', '1', '0'), -('11', '11', '6', '2', '0'), -('11', '11', '6', '3', '0'), - -('11', '12', '0', '0', '0'), -('11', '12', '0', '1', '0'), -('11', '12', '0', '2', '0'), -('11', '12', '0', '3', '0'), - -('11', '12', '1', '0', '0'), -('11', '12', '1', '1', '0'), -('11', '12', '1', '2', '0'), -('11', '12', '1', '3', '0'), - -('11', '12', '2', '0', '0'), -('11', '12', '2', '1', '0'), -('11', '12', '2', '2', '0'), -('11', '12', '2', '3', '0'), - -('11', '12', '3', '0', '0'), -('11', '12', '3', '1', '0'), -('11', '12', '3', '2', '0'), -('11', '12', '3', '3', '0'), - -('11', '12', '4', '0', '0'), -('11', '12', '4', '1', '0'), -('11', '12', '4', '2', '0'), -('11', '12', '4', '3', '0'), - -('11', '12', '5', '0', '0'), -('11', '12', '5', '1', '0'), -('11', '12', '5', '2', '0'), -('11', '12', '5', '3', '0'), - -('11', '12', '6', '0', '0'), -('11', '12', '6', '1', '0'), -('11', '12', '6', '2', '0'), -('11', '12', '6', '3', '0'), - -('11', '13', '0', '0', '0'), -('11', '13', '0', '1', '0'), -('11', '13', '0', '2', '0'), -('11', '13', '0', '3', '0'), - -('11', '13', '1', '0', '0'), -('11', '13', '1', '1', '0'), -('11', '13', '1', '2', '0'), -('11', '13', '1', '3', '0'), - -('11', '13', '2', '0', '0'), -('11', '13', '2', '1', '0'), -('11', '13', '2', '2', '0'), -('11', '13', '2', '3', '0'), - -('11', '13', '3', '0', '0'), -('11', '13', '3', '1', '0'), -('11', '13', '3', '2', '0'), -('11', '13', '3', '3', '0'), - -('11', '13', '4', '0', '0'), -('11', '13', '4', '1', '0'), -('11', '13', '4', '2', '0'), -('11', '13', '4', '3', '0'), - -('11', '13', '5', '0', '0'), -('11', '13', '5', '1', '0'), -('11', '13', '5', '2', '0'), -('11', '13', '5', '3', '0'), - -('11', '13', '6', '0', '0'), -('11', '13', '6', '1', '0'), -('11', '13', '6', '2', '0'), -('11', '13', '6', '3', '0'), - -('11', '14', '0', '0', '0'), -('11', '14', '0', '1', '0'), -('11', '14', '0', '2', '0'), -('11', '14', '0', '3', '0'), - -('11', '14', '1', '0', '0'), -('11', '14', '1', '1', '0'), -('11', '14', '1', '2', '0'), -('11', '14', '1', '3', '0'), - -('11', '14', '2', '0', '0'), -('11', '14', '2', '1', '0'), -('11', '14', '2', '2', '0'), -('11', '14', '2', '3', '0'), - -('11', '14', '3', '0', '0'), -('11', '14', '3', '1', '0'), -('11', '14', '3', '2', '0'), -('11', '14', '3', '3', '0'), - -('11', '14', '4', '0', '0'), -('11', '14', '4', '1', '0'), -('11', '14', '4', '2', '0'), -('11', '14', '4', '3', '0'), - -('11', '14', '5', '0', '0'), -('11', '14', '5', '1', '0'), -('11', '14', '5', '2', '0'), -('11', '14', '5', '3', '0'), - -('11', '14', '6', '0', '0'), -('11', '14', '6', '1', '0'), -('11', '14', '6', '2', '0'), -('11', '14', '6', '3', '0'), - -('11', '15', '0', '0', '0'), -('11', '15', '0', '1', '0'), -('11', '15', '0', '2', '0'), -('11', '15', '0', '3', '0'), - -('11', '15', '1', '0', '0'), -('11', '15', '1', '1', '0'), -('11', '15', '1', '2', '0'), -('11', '15', '1', '3', '0'), - -('11', '15', '2', '0', '0'), -('11', '15', '2', '1', '0'), -('11', '15', '2', '2', '0'), -('11', '15', '2', '3', '0'), - -('11', '15', '3', '0', '0'), -('11', '15', '3', '1', '0'), -('11', '15', '3', '2', '0'), -('11', '15', '3', '3', '0'), - -('11', '15', '4', '0', '0'), -('11', '15', '4', '1', '0'), -('11', '15', '4', '2', '0'), -('11', '15', '4', '3', '0'), - -('11', '15', '5', '0', '0'), -('11', '15', '5', '1', '0'), -('11', '15', '5', '2', '0'), -('11', '15', '5', '3', '0'), - -('11', '15', '6', '0', '0'), -('11', '15', '6', '1', '0'), -('11', '15', '6', '2', '0'), -('11', '15', '6', '3', '0'), - --- SpellType_CharmIndex - -('12', '0', '0', '0', '0'), -('12', '0', '0', '1', '0'), -('12', '0', '0', '2', '0'), -('12', '0', '0', '3', '0'), - -('12', '0', '1', '0', '0'), -('12', '0', '1', '1', '0'), -('12', '0', '1', '2', '0'), -('12', '0', '1', '3', '0'), - -('12', '0', '2', '0', '0'), -('12', '0', '2', '1', '0'), -('12', '0', '2', '2', '0'), -('12', '0', '2', '3', '0'), - -('12', '0', '3', '0', '0'), -('12', '0', '3', '1', '0'), -('12', '0', '3', '2', '0'), -('12', '0', '3', '3', '0'), - -('12', '0', '4', '0', '0'), -('12', '0', '4', '1', '0'), -('12', '0', '4', '2', '0'), -('12', '0', '4', '3', '0'), - -('12', '0', '5', '0', '0'), -('12', '0', '5', '1', '0'), -('12', '0', '5', '2', '0'), -('12', '0', '5', '3', '0'), - -('12', '0', '6', '0', '0'), -('12', '0', '6', '1', '0'), -('12', '0', '6', '2', '0'), -('12', '0', '6', '3', '0'), - -('12', '1', '0', '0', '0'), -('12', '1', '0', '1', '0'), -('12', '1', '0', '2', '0'), -('12', '1', '0', '3', '0'), - -('12', '1', '1', '0', '0'), -('12', '1', '1', '1', '0'), -('12', '1', '1', '2', '0'), -('12', '1', '1', '3', '0'), - -('12', '1', '2', '0', '0'), -('12', '1', '2', '1', '0'), -('12', '1', '2', '2', '0'), -('12', '1', '2', '3', '0'), - -('12', '1', '3', '0', '0'), -('12', '1', '3', '1', '0'), -('12', '1', '3', '2', '0'), -('12', '1', '3', '3', '0'), - -('12', '1', '4', '0', '0'), -('12', '1', '4', '1', '0'), -('12', '1', '4', '2', '0'), -('12', '1', '4', '3', '0'), - -('12', '1', '5', '0', '0'), -('12', '1', '5', '1', '0'), -('12', '1', '5', '2', '0'), -('12', '1', '5', '3', '0'), - -('12', '1', '6', '0', '0'), -('12', '1', '6', '1', '0'), -('12', '1', '6', '2', '0'), -('12', '1', '6', '3', '0'), - -('12', '2', '0', '0', '0'), -('12', '2', '0', '1', '0'), -('12', '2', '0', '2', '0'), -('12', '2', '0', '3', '0'), - -('12', '2', '1', '0', '0'), -('12', '2', '1', '1', '0'), -('12', '2', '1', '2', '0'), -('12', '2', '1', '3', '0'), - -('12', '2', '2', '0', '0'), -('12', '2', '2', '1', '0'), -('12', '2', '2', '2', '0'), -('12', '2', '2', '3', '0'), - -('12', '2', '3', '0', '0'), -('12', '2', '3', '1', '0'), -('12', '2', '3', '2', '0'), -('12', '2', '3', '3', '0'), - -('12', '2', '4', '0', '0'), -('12', '2', '4', '1', '0'), -('12', '2', '4', '2', '0'), -('12', '2', '4', '3', '0'), - -('12', '2', '5', '0', '0'), -('12', '2', '5', '1', '0'), -('12', '2', '5', '2', '0'), -('12', '2', '5', '3', '0'), - -('12', '2', '6', '0', '0'), -('12', '2', '6', '1', '0'), -('12', '2', '6', '2', '0'), -('12', '2', '6', '3', '0'), - -('12', '3', '0', '0', '0'), -('12', '3', '0', '1', '0'), -('12', '3', '0', '2', '0'), -('12', '3', '0', '3', '0'), - -('12', '3', '1', '0', '0'), -('12', '3', '1', '1', '0'), -('12', '3', '1', '2', '0'), -('12', '3', '1', '3', '0'), - -('12', '3', '2', '0', '0'), -('12', '3', '2', '1', '0'), -('12', '3', '2', '2', '0'), -('12', '3', '2', '3', '0'), - -('12', '3', '3', '0', '0'), -('12', '3', '3', '1', '0'), -('12', '3', '3', '2', '0'), -('12', '3', '3', '3', '0'), - -('12', '3', '4', '0', '0'), -('12', '3', '4', '1', '0'), -('12', '3', '4', '2', '0'), -('12', '3', '4', '3', '0'), - -('12', '3', '5', '0', '0'), -('12', '3', '5', '1', '0'), -('12', '3', '5', '2', '0'), -('12', '3', '5', '3', '0'), - -('12', '3', '6', '0', '0'), -('12', '3', '6', '1', '0'), -('12', '3', '6', '2', '0'), -('12', '3', '6', '3', '0'), - -('12', '4', '0', '0', '0'), -('12', '4', '0', '1', '0'), -('12', '4', '0', '2', '0'), -('12', '4', '0', '3', '0'), - -('12', '4', '1', '0', '0'), -('12', '4', '1', '1', '0'), -('12', '4', '1', '2', '0'), -('12', '4', '1', '3', '0'), - -('12', '4', '2', '0', '0'), -('12', '4', '2', '1', '0'), -('12', '4', '2', '2', '0'), -('12', '4', '2', '3', '0'), - -('12', '4', '3', '0', '0'), -('12', '4', '3', '1', '0'), -('12', '4', '3', '2', '0'), -('12', '4', '3', '3', '0'), - -('12', '4', '4', '0', '0'), -('12', '4', '4', '1', '0'), -('12', '4', '4', '2', '0'), -('12', '4', '4', '3', '0'), - -('12', '4', '5', '0', '0'), -('12', '4', '5', '1', '0'), -('12', '4', '5', '2', '0'), -('12', '4', '5', '3', '0'), - -('12', '4', '6', '0', '0'), -('12', '4', '6', '1', '0'), -('12', '4', '6', '2', '0'), -('12', '4', '6', '3', '0'), - -('12', '5', '0', '0', '0'), -('12', '5', '0', '1', '0'), -('12', '5', '0', '2', '0'), -('12', '5', '0', '3', '0'), - -('12', '5', '1', '0', '0'), -('12', '5', '1', '1', '0'), -('12', '5', '1', '2', '0'), -('12', '5', '1', '3', '0'), - -('12', '5', '2', '0', '0'), -('12', '5', '2', '1', '0'), -('12', '5', '2', '2', '0'), -('12', '5', '2', '3', '0'), - -('12', '5', '3', '0', '0'), -('12', '5', '3', '1', '0'), -('12', '5', '3', '2', '0'), -('12', '5', '3', '3', '0'), - -('12', '5', '4', '0', '0'), -('12', '5', '4', '1', '0'), -('12', '5', '4', '2', '0'), -('12', '5', '4', '3', '0'), - -('12', '5', '5', '0', '0'), -('12', '5', '5', '1', '0'), -('12', '5', '5', '2', '0'), -('12', '5', '5', '3', '0'), - -('12', '5', '6', '0', '0'), -('12', '5', '6', '1', '0'), -('12', '5', '6', '2', '0'), -('12', '5', '6', '3', '0'), - -('12', '6', '0', '0', '0'), -('12', '6', '0', '1', '0'), -('12', '6', '0', '2', '0'), -('12', '6', '0', '3', '0'), - -('12', '6', '1', '0', '0'), -('12', '6', '1', '1', '0'), -('12', '6', '1', '2', '0'), -('12', '6', '1', '3', '0'), - -('12', '6', '2', '0', '0'), -('12', '6', '2', '1', '0'), -('12', '6', '2', '2', '0'), -('12', '6', '2', '3', '0'), - -('12', '6', '3', '0', '0'), -('12', '6', '3', '1', '0'), -('12', '6', '3', '2', '0'), -('12', '6', '3', '3', '0'), - -('12', '6', '4', '0', '0'), -('12', '6', '4', '1', '0'), -('12', '6', '4', '2', '0'), -('12', '6', '4', '3', '0'), - -('12', '6', '5', '0', '0'), -('12', '6', '5', '1', '0'), -('12', '6', '5', '2', '0'), -('12', '6', '5', '3', '0'), - -('12', '6', '6', '0', '0'), -('12', '6', '6', '1', '0'), -('12', '6', '6', '2', '0'), -('12', '6', '6', '3', '0'), - -('12', '7', '0', '0', '0'), -('12', '7', '0', '1', '0'), -('12', '7', '0', '2', '0'), -('12', '7', '0', '3', '0'), - -('12', '7', '1', '0', '0'), -('12', '7', '1', '1', '0'), -('12', '7', '1', '2', '0'), -('12', '7', '1', '3', '0'), - -('12', '7', '2', '0', '0'), -('12', '7', '2', '1', '0'), -('12', '7', '2', '2', '0'), -('12', '7', '2', '3', '0'), - -('12', '7', '3', '0', '0'), -('12', '7', '3', '1', '0'), -('12', '7', '3', '2', '0'), -('12', '7', '3', '3', '0'), - -('12', '7', '4', '0', '0'), -('12', '7', '4', '1', '0'), -('12', '7', '4', '2', '0'), -('12', '7', '4', '3', '0'), - -('12', '7', '5', '0', '0'), -('12', '7', '5', '1', '0'), -('12', '7', '5', '2', '0'), -('12', '7', '5', '3', '0'), - -('12', '7', '6', '0', '0'), -('12', '7', '6', '1', '0'), -('12', '7', '6', '2', '0'), -('12', '7', '6', '3', '0'), - -('12', '8', '0', '0', '0'), -('12', '8', '0', '1', '0'), -('12', '8', '0', '2', '0'), -('12', '8', '0', '3', '0'), - -('12', '8', '1', '0', '0'), -('12', '8', '1', '1', '0'), -('12', '8', '1', '2', '0'), -('12', '8', '1', '3', '0'), - -('12', '8', '2', '0', '0'), -('12', '8', '2', '1', '0'), -('12', '8', '2', '2', '0'), -('12', '8', '2', '3', '0'), - -('12', '8', '3', '0', '0'), -('12', '8', '3', '1', '0'), -('12', '8', '3', '2', '0'), -('12', '8', '3', '3', '0'), - -('12', '8', '4', '0', '0'), -('12', '8', '4', '1', '0'), -('12', '8', '4', '2', '0'), -('12', '8', '4', '3', '0'), - -('12', '8', '5', '0', '0'), -('12', '8', '5', '1', '0'), -('12', '8', '5', '2', '0'), -('12', '8', '5', '3', '0'), - -('12', '8', '6', '0', '0'), -('12', '8', '6', '1', '0'), -('12', '8', '6', '2', '0'), -('12', '8', '6', '3', '0'), - -('12', '9', '0', '0', '0'), -('12', '9', '0', '1', '0'), -('12', '9', '0', '2', '0'), -('12', '9', '0', '3', '0'), - -('12', '9', '1', '0', '0'), -('12', '9', '1', '1', '0'), -('12', '9', '1', '2', '0'), -('12', '9', '1', '3', '0'), - -('12', '9', '2', '0', '0'), -('12', '9', '2', '1', '0'), -('12', '9', '2', '2', '0'), -('12', '9', '2', '3', '0'), - -('12', '9', '3', '0', '0'), -('12', '9', '3', '1', '0'), -('12', '9', '3', '2', '0'), -('12', '9', '3', '3', '0'), - -('12', '9', '4', '0', '0'), -('12', '9', '4', '1', '0'), -('12', '9', '4', '2', '0'), -('12', '9', '4', '3', '0'), - -('12', '9', '5', '0', '0'), -('12', '9', '5', '1', '0'), -('12', '9', '5', '2', '0'), -('12', '9', '5', '3', '0'), - -('12', '9', '6', '0', '0'), -('12', '9', '6', '1', '0'), -('12', '9', '6', '2', '0'), -('12', '9', '6', '3', '0'), - -('12', '10', '0', '0', '0'), -('12', '10', '0', '1', '0'), -('12', '10', '0', '2', '0'), -('12', '10', '0', '3', '0'), - -('12', '10', '1', '0', '0'), -('12', '10', '1', '1', '0'), -('12', '10', '1', '2', '0'), -('12', '10', '1', '3', '0'), - -('12', '10', '2', '0', '0'), -('12', '10', '2', '1', '0'), -('12', '10', '2', '2', '0'), -('12', '10', '2', '3', '0'), - -('12', '10', '3', '0', '0'), -('12', '10', '3', '1', '0'), -('12', '10', '3', '2', '0'), -('12', '10', '3', '3', '0'), - -('12', '10', '4', '0', '0'), -('12', '10', '4', '1', '0'), -('12', '10', '4', '2', '0'), -('12', '10', '4', '3', '0'), - -('12', '10', '5', '0', '0'), -('12', '10', '5', '1', '0'), -('12', '10', '5', '2', '0'), -('12', '10', '5', '3', '0'), - -('12', '10', '6', '0', '0'), -('12', '10', '6', '1', '0'), -('12', '10', '6', '2', '0'), -('12', '10', '6', '3', '0'), - -('12', '11', '0', '0', '0'), -('12', '11', '0', '1', '0'), -('12', '11', '0', '2', '0'), -('12', '11', '0', '3', '0'), - -('12', '11', '1', '0', '0'), -('12', '11', '1', '1', '0'), -('12', '11', '1', '2', '0'), -('12', '11', '1', '3', '0'), - -('12', '11', '2', '0', '0'), -('12', '11', '2', '1', '0'), -('12', '11', '2', '2', '0'), -('12', '11', '2', '3', '0'), - -('12', '11', '3', '0', '0'), -('12', '11', '3', '1', '0'), -('12', '11', '3', '2', '0'), -('12', '11', '3', '3', '0'), - -('12', '11', '4', '0', '0'), -('12', '11', '4', '1', '0'), -('12', '11', '4', '2', '0'), -('12', '11', '4', '3', '0'), - -('12', '11', '5', '0', '0'), -('12', '11', '5', '1', '0'), -('12', '11', '5', '2', '0'), -('12', '11', '5', '3', '0'), - -('12', '11', '6', '0', '0'), -('12', '11', '6', '1', '0'), -('12', '11', '6', '2', '0'), -('12', '11', '6', '3', '0'), - -('12', '12', '0', '0', '0'), -('12', '12', '0', '1', '0'), -('12', '12', '0', '2', '0'), -('12', '12', '0', '3', '0'), - -('12', '12', '1', '0', '0'), -('12', '12', '1', '1', '0'), -('12', '12', '1', '2', '0'), -('12', '12', '1', '3', '0'), - -('12', '12', '2', '0', '0'), -('12', '12', '2', '1', '0'), -('12', '12', '2', '2', '0'), -('12', '12', '2', '3', '0'), - -('12', '12', '3', '0', '0'), -('12', '12', '3', '1', '0'), -('12', '12', '3', '2', '0'), -('12', '12', '3', '3', '0'), - -('12', '12', '4', '0', '0'), -('12', '12', '4', '1', '0'), -('12', '12', '4', '2', '0'), -('12', '12', '4', '3', '0'), - -('12', '12', '5', '0', '0'), -('12', '12', '5', '1', '0'), -('12', '12', '5', '2', '0'), -('12', '12', '5', '3', '0'), - -('12', '12', '6', '0', '0'), -('12', '12', '6', '1', '0'), -('12', '12', '6', '2', '0'), -('12', '12', '6', '3', '0'), - -('12', '13', '0', '0', '0'), -('12', '13', '0', '1', '0'), -('12', '13', '0', '2', '0'), -('12', '13', '0', '3', '0'), - -('12', '13', '1', '0', '0'), -('12', '13', '1', '1', '0'), -('12', '13', '1', '2', '0'), -('12', '13', '1', '3', '0'), - -('12', '13', '2', '0', '0'), -('12', '13', '2', '1', '0'), -('12', '13', '2', '2', '0'), -('12', '13', '2', '3', '0'), - -('12', '13', '3', '0', '0'), -('12', '13', '3', '1', '0'), -('12', '13', '3', '2', '0'), -('12', '13', '3', '3', '0'), - -('12', '13', '4', '0', '0'), -('12', '13', '4', '1', '0'), -('12', '13', '4', '2', '0'), -('12', '13', '4', '3', '0'), - -('12', '13', '5', '0', '0'), -('12', '13', '5', '1', '0'), -('12', '13', '5', '2', '0'), -('12', '13', '5', '3', '0'), - -('12', '13', '6', '0', '0'), -('12', '13', '6', '1', '0'), -('12', '13', '6', '2', '0'), -('12', '13', '6', '3', '0'), - -('12', '14', '0', '0', '0'), -('12', '14', '0', '1', '0'), -('12', '14', '0', '2', '0'), -('12', '14', '0', '3', '0'), - -('12', '14', '1', '0', '0'), -('12', '14', '1', '1', '0'), -('12', '14', '1', '2', '0'), -('12', '14', '1', '3', '0'), - -('12', '14', '2', '0', '0'), -('12', '14', '2', '1', '0'), -('12', '14', '2', '2', '0'), -('12', '14', '2', '3', '0'), - -('12', '14', '3', '0', '0'), -('12', '14', '3', '1', '0'), -('12', '14', '3', '2', '0'), -('12', '14', '3', '3', '0'), - -('12', '14', '4', '0', '0'), -('12', '14', '4', '1', '0'), -('12', '14', '4', '2', '0'), -('12', '14', '4', '3', '0'), - -('12', '14', '5', '0', '0'), -('12', '14', '5', '1', '0'), -('12', '14', '5', '2', '0'), -('12', '14', '5', '3', '0'), - -('12', '14', '6', '0', '0'), -('12', '14', '6', '1', '0'), -('12', '14', '6', '2', '0'), -('12', '14', '6', '3', '0'), - -('12', '15', '0', '0', '0'), -('12', '15', '0', '1', '0'), -('12', '15', '0', '2', '0'), -('12', '15', '0', '3', '0'), - -('12', '15', '1', '0', '0'), -('12', '15', '1', '1', '0'), -('12', '15', '1', '2', '0'), -('12', '15', '1', '3', '0'), - -('12', '15', '2', '0', '0'), -('12', '15', '2', '1', '0'), -('12', '15', '2', '2', '0'), -('12', '15', '2', '3', '0'), - -('12', '15', '3', '0', '0'), -('12', '15', '3', '1', '0'), -('12', '15', '3', '2', '0'), -('12', '15', '3', '3', '0'), - -('12', '15', '4', '0', '0'), -('12', '15', '4', '1', '0'), -('12', '15', '4', '2', '0'), -('12', '15', '4', '3', '0'), - -('12', '15', '5', '0', '0'), -('12', '15', '5', '1', '0'), -('12', '15', '5', '2', '0'), -('12', '15', '5', '3', '0'), - -('12', '15', '6', '0', '0'), -('12', '15', '6', '1', '0'), -('12', '15', '6', '2', '0'), -('12', '15', '6', '3', '0'), - --- SpellType_SlowIndex - -('13', '0', '0', '0', '0'), -('13', '0', '0', '1', '0'), -('13', '0', '0', '2', '0'), -('13', '0', '0', '3', '0'), - -('13', '0', '1', '0', '0'), -('13', '0', '1', '1', '0'), -('13', '0', '1', '2', '0'), -('13', '0', '1', '3', '0'), - -('13', '0', '2', '0', '0'), -('13', '0', '2', '1', '0'), -('13', '0', '2', '2', '0'), -('13', '0', '2', '3', '0'), - -('13', '0', '3', '0', '0'), -('13', '0', '3', '1', '0'), -('13', '0', '3', '2', '0'), -('13', '0', '3', '3', '0'), - -('13', '0', '4', '0', '0'), -('13', '0', '4', '1', '0'), -('13', '0', '4', '2', '0'), -('13', '0', '4', '3', '0'), - -('13', '0', '5', '0', '0'), -('13', '0', '5', '1', '0'), -('13', '0', '5', '2', '0'), -('13', '0', '5', '3', '0'), - -('13', '0', '6', '0', '0'), -('13', '0', '6', '1', '0'), -('13', '0', '6', '2', '0'), -('13', '0', '6', '3', '0'), - -('13', '1', '0', '0', '0'), -('13', '1', '0', '1', '0'), -('13', '1', '0', '2', '0'), -('13', '1', '0', '3', '0'), - -('13', '1', '1', '0', '0'), -('13', '1', '1', '1', '0'), -('13', '1', '1', '2', '0'), -('13', '1', '1', '3', '0'), - -('13', '1', '2', '0', '0'), -('13', '1', '2', '1', '0'), -('13', '1', '2', '2', '0'), -('13', '1', '2', '3', '0'), - -('13', '1', '3', '0', '0'), -('13', '1', '3', '1', '0'), -('13', '1', '3', '2', '0'), -('13', '1', '3', '3', '0'), - -('13', '1', '4', '0', '0'), -('13', '1', '4', '1', '0'), -('13', '1', '4', '2', '0'), -('13', '1', '4', '3', '0'), - -('13', '1', '5', '0', '0'), -('13', '1', '5', '1', '0'), -('13', '1', '5', '2', '0'), -('13', '1', '5', '3', '0'), - -('13', '1', '6', '0', '0'), -('13', '1', '6', '1', '0'), -('13', '1', '6', '2', '0'), -('13', '1', '6', '3', '0'), - -('13', '2', '0', '0', '0'), -('13', '2', '0', '1', '0'), -('13', '2', '0', '2', '0'), -('13', '2', '0', '3', '0'), - -('13', '2', '1', '0', '0'), -('13', '2', '1', '1', '0'), -('13', '2', '1', '2', '0'), -('13', '2', '1', '3', '0'), - -('13', '2', '2', '0', '0'), -('13', '2', '2', '1', '0'), -('13', '2', '2', '2', '0'), -('13', '2', '2', '3', '0'), - -('13', '2', '3', '0', '0'), -('13', '2', '3', '1', '0'), -('13', '2', '3', '2', '0'), -('13', '2', '3', '3', '0'), - -('13', '2', '4', '0', '0'), -('13', '2', '4', '1', '0'), -('13', '2', '4', '2', '0'), -('13', '2', '4', '3', '0'), - -('13', '2', '5', '0', '0'), -('13', '2', '5', '1', '0'), -('13', '2', '5', '2', '0'), -('13', '2', '5', '3', '0'), - -('13', '2', '6', '0', '0'), -('13', '2', '6', '1', '0'), -('13', '2', '6', '2', '0'), -('13', '2', '6', '3', '0'), - -('13', '3', '0', '0', '0'), -('13', '3', '0', '1', '0'), -('13', '3', '0', '2', '0'), -('13', '3', '0', '3', '0'), - -('13', '3', '1', '0', '0'), -('13', '3', '1', '1', '0'), -('13', '3', '1', '2', '0'), -('13', '3', '1', '3', '0'), - -('13', '3', '2', '0', '0'), -('13', '3', '2', '1', '0'), -('13', '3', '2', '2', '0'), -('13', '3', '2', '3', '0'), - -('13', '3', '3', '0', '0'), -('13', '3', '3', '1', '0'), -('13', '3', '3', '2', '0'), -('13', '3', '3', '3', '0'), - -('13', '3', '4', '0', '0'), -('13', '3', '4', '1', '0'), -('13', '3', '4', '2', '0'), -('13', '3', '4', '3', '0'), - -('13', '3', '5', '0', '0'), -('13', '3', '5', '1', '0'), -('13', '3', '5', '2', '0'), -('13', '3', '5', '3', '0'), - -('13', '3', '6', '0', '0'), -('13', '3', '6', '1', '0'), -('13', '3', '6', '2', '0'), -('13', '3', '6', '3', '0'), - -('13', '4', '0', '0', '0'), -('13', '4', '0', '1', '0'), -('13', '4', '0', '2', '0'), -('13', '4', '0', '3', '0'), - -('13', '4', '1', '0', '0'), -('13', '4', '1', '1', '0'), -('13', '4', '1', '2', '0'), -('13', '4', '1', '3', '0'), - -('13', '4', '2', '0', '0'), -('13', '4', '2', '1', '0'), -('13', '4', '2', '2', '0'), -('13', '4', '2', '3', '0'), - -('13', '4', '3', '0', '0'), -('13', '4', '3', '1', '0'), -('13', '4', '3', '2', '0'), -('13', '4', '3', '3', '0'), - -('13', '4', '4', '0', '0'), -('13', '4', '4', '1', '0'), -('13', '4', '4', '2', '0'), -('13', '4', '4', '3', '0'), - -('13', '4', '5', '0', '0'), -('13', '4', '5', '1', '0'), -('13', '4', '5', '2', '0'), -('13', '4', '5', '3', '0'), - -('13', '4', '6', '0', '0'), -('13', '4', '6', '1', '0'), -('13', '4', '6', '2', '0'), -('13', '4', '6', '3', '0'), - -('13', '5', '0', '0', '0'), -('13', '5', '0', '1', '0'), -('13', '5', '0', '2', '0'), -('13', '5', '0', '3', '0'), - -('13', '5', '1', '0', '0'), -('13', '5', '1', '1', '0'), -('13', '5', '1', '2', '0'), -('13', '5', '1', '3', '0'), - -('13', '5', '2', '0', '0'), -('13', '5', '2', '1', '0'), -('13', '5', '2', '2', '0'), -('13', '5', '2', '3', '0'), - -('13', '5', '3', '0', '0'), -('13', '5', '3', '1', '0'), -('13', '5', '3', '2', '0'), -('13', '5', '3', '3', '0'), - -('13', '5', '4', '0', '0'), -('13', '5', '4', '1', '0'), -('13', '5', '4', '2', '0'), -('13', '5', '4', '3', '0'), - -('13', '5', '5', '0', '0'), -('13', '5', '5', '1', '0'), -('13', '5', '5', '2', '0'), -('13', '5', '5', '3', '0'), - -('13', '5', '6', '0', '0'), -('13', '5', '6', '1', '0'), -('13', '5', '6', '2', '0'), -('13', '5', '6', '3', '0'), - -('13', '6', '0', '0', '0'), -('13', '6', '0', '1', '0'), -('13', '6', '0', '2', '0'), -('13', '6', '0', '3', '0'), - -('13', '6', '1', '0', '0'), -('13', '6', '1', '1', '0'), -('13', '6', '1', '2', '0'), -('13', '6', '1', '3', '0'), - -('13', '6', '2', '0', '0'), -('13', '6', '2', '1', '0'), -('13', '6', '2', '2', '0'), -('13', '6', '2', '3', '0'), - -('13', '6', '3', '0', '0'), -('13', '6', '3', '1', '0'), -('13', '6', '3', '2', '0'), -('13', '6', '3', '3', '0'), - -('13', '6', '4', '0', '0'), -('13', '6', '4', '1', '0'), -('13', '6', '4', '2', '0'), -('13', '6', '4', '3', '0'), - -('13', '6', '5', '0', '0'), -('13', '6', '5', '1', '0'), -('13', '6', '5', '2', '0'), -('13', '6', '5', '3', '0'), - -('13', '6', '6', '0', '0'), -('13', '6', '6', '1', '0'), -('13', '6', '6', '2', '0'), -('13', '6', '6', '3', '0'), - -('13', '7', '0', '0', '0'), -('13', '7', '0', '1', '0'), -('13', '7', '0', '2', '0'), -('13', '7', '0', '3', '0'), - -('13', '7', '1', '0', '25'), -('13', '7', '1', '1', '25'), -('13', '7', '1', '2', '100'), -('13', '7', '1', '3', '100'), - -('13', '7', '2', '0', '15'), -('13', '7', '2', '1', '15'), -('13', '7', '2', '2', '100'), -('13', '7', '2', '3', '100'), - -('13', '7', '3', '0', '25'), -('13', '7', '3', '1', '25'), -('13', '7', '3', '2', '100'), -('13', '7', '3', '3', '100'), - -('13', '7', '4', '0', '0'), -('13', '7', '4', '1', '0'), -('13', '7', '4', '2', '50'), -('13', '7', '4', '3', '50'), - -('13', '7', '5', '0', '0'), -('13', '7', '5', '1', '0'), -('13', '7', '5', '2', '50'), -('13', '7', '5', '3', '50'), - -('13', '7', '6', '0', '0'), -('13', '7', '6', '1', '0'), -('13', '7', '6', '2', '50'), -('13', '7', '6', '3', '50'), - -('13', '8', '0', '0', '0'), -('13', '8', '0', '1', '0'), -('13', '8', '0', '2', '0'), -('13', '8', '0', '3', '0'), - -('13', '8', '1', '0', '0'), -('13', '8', '1', '1', '0'), -('13', '8', '1', '2', '0'), -('13', '8', '1', '3', '0'), - -('13', '8', '2', '0', '0'), -('13', '8', '2', '1', '0'), -('13', '8', '2', '2', '0'), -('13', '8', '2', '3', '0'), - -('13', '8', '3', '0', '0'), -('13', '8', '3', '1', '0'), -('13', '8', '3', '2', '0'), -('13', '8', '3', '3', '0'), - -('13', '8', '4', '0', '0'), -('13', '8', '4', '1', '0'), -('13', '8', '4', '2', '0'), -('13', '8', '4', '3', '0'), - -('13', '8', '5', '0', '0'), -('13', '8', '5', '1', '0'), -('13', '8', '5', '2', '0'), -('13', '8', '5', '3', '0'), - -('13', '8', '6', '0', '0'), -('13', '8', '6', '1', '0'), -('13', '8', '6', '2', '0'), -('13', '8', '6', '3', '0'), - -('13', '9', '0', '0', '0'), -('13', '9', '0', '1', '0'), -('13', '9', '0', '2', '0'), -('13', '9', '0', '3', '0'), - -('13', '9', '1', '0', '50'), -('13', '9', '1', '1', '50'), -('13', '9', '1', '2', '100'), -('13', '9', '1', '3', '100'), - -('13', '9', '2', '0', '25'), -('13', '9', '2', '1', '25'), -('13', '9', '2', '2', '100'), -('13', '9', '2', '3', '100'), - -('13', '9', '3', '0', '50'), -('13', '9', '3', '1', '50'), -('13', '9', '3', '2', '100'), -('13', '9', '3', '3', '100'), - -('13', '9', '4', '0', '15'), -('13', '9', '4', '1', '15'), -('13', '9', '4', '2', '50'), -('13', '9', '4', '3', '50'), - -('13', '9', '5', '0', '15'), -('13', '9', '5', '1', '15'), -('13', '9', '5', '2', '50'), -('13', '9', '5', '3', '50'), - -('13', '9', '6', '0', '15'), -('13', '9', '6', '1', '15'), -('13', '9', '6', '2', '50'), -('13', '9', '6', '3', '50'), - -('13', '10', '0', '0', '0'), -('13', '10', '0', '1', '0'), -('13', '10', '0', '2', '0'), -('13', '10', '0', '3', '0'), - -('13', '10', '1', '0', '0'), -('13', '10', '1', '1', '0'), -('13', '10', '1', '2', '0'), -('13', '10', '1', '3', '0'), - -('13', '10', '2', '0', '0'), -('13', '10', '2', '1', '0'), -('13', '10', '2', '2', '0'), -('13', '10', '2', '3', '0'), - -('13', '10', '3', '0', '0'), -('13', '10', '3', '1', '0'), -('13', '10', '3', '2', '0'), -('13', '10', '3', '3', '0'), - -('13', '10', '4', '0', '0'), -('13', '10', '4', '1', '0'), -('13', '10', '4', '2', '0'), -('13', '10', '4', '3', '0'), - -('13', '10', '5', '0', '0'), -('13', '10', '5', '1', '0'), -('13', '10', '5', '2', '0'), -('13', '10', '5', '3', '0'), - -('13', '10', '6', '0', '0'), -('13', '10', '6', '1', '0'), -('13', '10', '6', '2', '0'), -('13', '10', '6', '3', '0'), - -('13', '11', '0', '0', '0'), -('13', '11', '0', '1', '0'), -('13', '11', '0', '2', '0'), -('13', '11', '0', '3', '0'), - -('13', '11', '1', '0', '0'), -('13', '11', '1', '1', '0'), -('13', '11', '1', '2', '0'), -('13', '11', '1', '3', '0'), - -('13', '11', '2', '0', '0'), -('13', '11', '2', '1', '0'), -('13', '11', '2', '2', '0'), -('13', '11', '2', '3', '0'), - -('13', '11', '3', '0', '0'), -('13', '11', '3', '1', '0'), -('13', '11', '3', '2', '0'), -('13', '11', '3', '3', '0'), - -('13', '11', '4', '0', '0'), -('13', '11', '4', '1', '0'), -('13', '11', '4', '2', '0'), -('13', '11', '4', '3', '0'), - -('13', '11', '5', '0', '0'), -('13', '11', '5', '1', '0'), -('13', '11', '5', '2', '0'), -('13', '11', '5', '3', '0'), - -('13', '11', '6', '0', '0'), -('13', '11', '6', '1', '0'), -('13', '11', '6', '2', '0'), -('13', '11', '6', '3', '0'), - -('13', '12', '0', '0', '0'), -('13', '12', '0', '1', '0'), -('13', '12', '0', '2', '0'), -('13', '12', '0', '3', '0'), - -('13', '12', '1', '0', '0'), -('13', '12', '1', '1', '0'), -('13', '12', '1', '2', '0'), -('13', '12', '1', '3', '0'), - -('13', '12', '2', '0', '0'), -('13', '12', '2', '1', '0'), -('13', '12', '2', '2', '0'), -('13', '12', '2', '3', '0'), - -('13', '12', '3', '0', '0'), -('13', '12', '3', '1', '0'), -('13', '12', '3', '2', '0'), -('13', '12', '3', '3', '0'), - -('13', '12', '4', '0', '0'), -('13', '12', '4', '1', '0'), -('13', '12', '4', '2', '0'), -('13', '12', '4', '3', '0'), - -('13', '12', '5', '0', '0'), -('13', '12', '5', '1', '0'), -('13', '12', '5', '2', '0'), -('13', '12', '5', '3', '0'), - -('13', '12', '6', '0', '0'), -('13', '12', '6', '1', '0'), -('13', '12', '6', '2', '0'), -('13', '12', '6', '3', '0'), - -('13', '13', '0', '0', '0'), -('13', '13', '0', '1', '0'), -('13', '13', '0', '2', '0'), -('13', '13', '0', '3', '0'), - -('13', '13', '1', '0', '50'), -('13', '13', '1', '1', '50'), -('13', '13', '1', '2', '100'), -('13', '13', '1', '3', '100'), - -('13', '13', '2', '0', '25'), -('13', '13', '2', '1', '25'), -('13', '13', '2', '2', '100'), -('13', '13', '2', '3', '100'), - -('13', '13', '3', '0', '50'), -('13', '13', '3', '1', '50'), -('13', '13', '3', '2', '100'), -('13', '13', '3', '3', '100'), - -('13', '13', '4', '0', '15'), -('13', '13', '4', '1', '15'), -('13', '13', '4', '2', '50'), -('13', '13', '4', '3', '50'), - -('13', '13', '5', '0', '15'), -('13', '13', '5', '1', '15'), -('13', '13', '5', '2', '50'), -('13', '13', '5', '3', '50'), - -('13', '13', '6', '0', '15'), -('13', '13', '6', '1', '15'), -('13', '13', '6', '2', '50'), -('13', '13', '6', '3', '50'), - -('13', '14', '0', '0', '0'), -('13', '14', '0', '1', '0'), -('13', '14', '0', '2', '0'), -('13', '14', '0', '3', '0'), - -('13', '14', '1', '0', '25'), -('13', '14', '1', '1', '25'), -('13', '14', '1', '2', '100'), -('13', '14', '1', '3', '100'), - -('13', '14', '2', '0', '15'), -('13', '14', '2', '1', '15'), -('13', '14', '2', '2', '100'), -('13', '14', '2', '3', '100'), - -('13', '14', '3', '0', '25'), -('13', '14', '3', '1', '25'), -('13', '14', '3', '2', '100'), -('13', '14', '3', '3', '100'), - -('13', '14', '4', '0', '0'), -('13', '14', '4', '1', '0'), -('13', '14', '4', '2', '50'), -('13', '14', '4', '3', '50'), - -('13', '14', '5', '0', '0'), -('13', '14', '5', '1', '0'), -('13', '14', '5', '2', '50'), -('13', '14', '5', '3', '50'), - -('13', '14', '6', '0', '0'), -('13', '14', '6', '1', '0'), -('13', '14', '6', '2', '50'), -('13', '14', '6', '3', '50'), - -('13', '15', '0', '0', '0'), -('13', '15', '0', '1', '0'), -('13', '15', '0', '2', '0'), -('13', '15', '0', '3', '0'), - -('13', '15', '1', '0', '0'), -('13', '15', '1', '1', '0'), -('13', '15', '1', '2', '0'), -('13', '15', '1', '3', '0'), - -('13', '15', '2', '0', '0'), -('13', '15', '2', '1', '0'), -('13', '15', '2', '2', '0'), -('13', '15', '2', '3', '0'), - -('13', '15', '3', '0', '0'), -('13', '15', '3', '1', '0'), -('13', '15', '3', '2', '0'), -('13', '15', '3', '3', '0'), - -('13', '15', '4', '0', '0'), -('13', '15', '4', '1', '0'), -('13', '15', '4', '2', '0'), -('13', '15', '4', '3', '0'), - -('13', '15', '5', '0', '0'), -('13', '15', '5', '1', '0'), -('13', '15', '5', '2', '0'), -('13', '15', '5', '3', '0'), - -('13', '15', '6', '0', '0'), -('13', '15', '6', '1', '0'), -('13', '15', '6', '2', '0'), -('13', '15', '6', '3', '0'), - --- SpellType_DebuffIndex - -('14', '0', '0', '0', '0'), -('14', '0', '0', '1', '0'), -('14', '0', '0', '2', '0'), -('14', '0', '0', '3', '0'), - -('14', '0', '1', '0', '0'), -('14', '0', '1', '1', '0'), -('14', '0', '1', '2', '0'), -('14', '0', '1', '3', '0'), - -('14', '0', '2', '0', '0'), -('14', '0', '2', '1', '0'), -('14', '0', '2', '2', '0'), -('14', '0', '2', '3', '0'), - -('14', '0', '3', '0', '0'), -('14', '0', '3', '1', '0'), -('14', '0', '3', '2', '0'), -('14', '0', '3', '3', '0'), - -('14', '0', '4', '0', '0'), -('14', '0', '4', '1', '0'), -('14', '0', '4', '2', '0'), -('14', '0', '4', '3', '0'), - -('14', '0', '5', '0', '0'), -('14', '0', '5', '1', '0'), -('14', '0', '5', '2', '0'), -('14', '0', '5', '3', '0'), - -('14', '0', '6', '0', '0'), -('14', '0', '6', '1', '0'), -('14', '0', '6', '2', '0'), -('14', '0', '6', '3', '0'), - -('14', '1', '0', '0', '0'), -('14', '1', '0', '1', '0'), -('14', '1', '0', '2', '0'), -('14', '1', '0', '3', '0'), - -('14', '1', '1', '0', '0'), -('14', '1', '1', '1', '0'), -('14', '1', '1', '2', '0'), -('14', '1', '1', '3', '0'), - -('14', '1', '2', '0', '0'), -('14', '1', '2', '1', '0'), -('14', '1', '2', '2', '0'), -('14', '1', '2', '3', '0'), - -('14', '1', '3', '0', '0'), -('14', '1', '3', '1', '0'), -('14', '1', '3', '2', '0'), -('14', '1', '3', '3', '0'), - -('14', '1', '4', '0', '0'), -('14', '1', '4', '1', '0'), -('14', '1', '4', '2', '0'), -('14', '1', '4', '3', '0'), - -('14', '1', '5', '0', '0'), -('14', '1', '5', '1', '0'), -('14', '1', '5', '2', '0'), -('14', '1', '5', '3', '0'), - -('14', '1', '6', '0', '0'), -('14', '1', '6', '1', '0'), -('14', '1', '6', '2', '0'), -('14', '1', '6', '3', '0'), - -('14', '2', '0', '0', '0'), -('14', '2', '0', '1', '0'), -('14', '2', '0', '2', '0'), -('14', '2', '0', '3', '0'), - -('14', '2', '1', '0', '0'), -('14', '2', '1', '1', '0'), -('14', '2', '1', '2', '0'), -('14', '2', '1', '3', '0'), - -('14', '2', '2', '0', '0'), -('14', '2', '2', '1', '0'), -('14', '2', '2', '2', '0'), -('14', '2', '2', '3', '0'), - -('14', '2', '3', '0', '0'), -('14', '2', '3', '1', '0'), -('14', '2', '3', '2', '0'), -('14', '2', '3', '3', '0'), - -('14', '2', '4', '0', '0'), -('14', '2', '4', '1', '0'), -('14', '2', '4', '2', '0'), -('14', '2', '4', '3', '0'), - -('14', '2', '5', '0', '0'), -('14', '2', '5', '1', '0'), -('14', '2', '5', '2', '0'), -('14', '2', '5', '3', '0'), - -('14', '2', '6', '0', '0'), -('14', '2', '6', '1', '0'), -('14', '2', '6', '2', '0'), -('14', '2', '6', '3', '0'), - -('14', '3', '0', '0', '0'), -('14', '3', '0', '1', '0'), -('14', '3', '0', '2', '0'), -('14', '3', '0', '3', '0'), - -('14', '3', '1', '0', '15'), -('14', '3', '1', '1', '15'), -('14', '3', '1', '2', '15'), -('14', '3', '1', '3', '15'), - -('14', '3', '2', '0', '10'), -('14', '3', '2', '1', '10'), -('14', '3', '2', '2', '10'), -('14', '3', '2', '3', '10'), - -('14', '3', '3', '0', '15'), -('14', '3', '3', '1', '15'), -('14', '3', '3', '2', '15'), -('14', '3', '3', '3', '15'), - -('14', '3', '4', '0', '10'), -('14', '3', '4', '1', '10'), -('14', '3', '4', '2', '10'), -('14', '3', '4', '3', '10'), - -('14', '3', '5', '0', '0'), -('14', '3', '5', '1', '0'), -('14', '3', '5', '2', '0'), -('14', '3', '5', '3', '0'), - -('14', '3', '6', '0', '0'), -('14', '3', '6', '1', '0'), -('14', '3', '6', '2', '0'), -('14', '3', '6', '3', '0'), - -('14', '4', '0', '0', '0'), -('14', '4', '0', '1', '0'), -('14', '4', '0', '2', '0'), -('14', '4', '0', '3', '0'), - -('14', '4', '1', '0', '15'), -('14', '4', '1', '1', '15'), -('14', '4', '1', '2', '15'), -('14', '4', '1', '3', '15'), - -('14', '4', '2', '0', '10'), -('14', '4', '2', '1', '10'), -('14', '4', '2', '2', '10'), -('14', '4', '2', '3', '10'), - -('14', '4', '3', '0', '15'), -('14', '4', '3', '1', '15'), -('14', '4', '3', '2', '15'), -('14', '4', '3', '3', '15'), - -('14', '4', '4', '0', '10'), -('14', '4', '4', '1', '10'), -('14', '4', '4', '2', '10'), -('14', '4', '4', '3', '10'), - -('14', '4', '5', '0', '0'), -('14', '4', '5', '1', '0'), -('14', '4', '5', '2', '0'), -('14', '4', '5', '3', '0'), - -('14', '4', '6', '0', '0'), -('14', '4', '6', '1', '0'), -('14', '4', '6', '2', '0'), -('14', '4', '6', '3', '0'), - -('14', '5', '0', '0', '0'), -('14', '5', '0', '1', '0'), -('14', '5', '0', '2', '0'), -('14', '5', '0', '3', '0'), - -('14', '5', '1', '0', '25'), -('14', '5', '1', '1', '25'), -('14', '5', '1', '2', '25'), -('14', '5', '1', '3', '25'), - -('14', '5', '2', '0', '15'), -('14', '5', '2', '1', '15'), -('14', '5', '2', '2', '15'), -('14', '5', '2', '3', '15'), - -('14', '5', '3', '0', '25'), -('14', '5', '3', '1', '25'), -('14', '5', '3', '2', '25'), -('14', '5', '3', '3', '25'), - -('14', '5', '4', '0', '15'), -('14', '5', '4', '1', '15'), -('14', '5', '4', '2', '15'), -('14', '5', '4', '3', '15'), - -('14', '5', '5', '0', '0'), -('14', '5', '5', '1', '0'), -('14', '5', '5', '2', '0'), -('14', '5', '5', '3', '0'), - -('14', '5', '6', '0', '0'), -('14', '5', '6', '1', '0'), -('14', '5', '6', '2', '0'), -('14', '5', '6', '3', '0'), - -('14', '6', '0', '0', '0'), -('14', '6', '0', '1', '0'), -('14', '6', '0', '2', '0'), -('14', '6', '0', '3', '0'), - -('14', '6', '1', '0', '0'), -('14', '6', '1', '1', '0'), -('14', '6', '1', '2', '0'), -('14', '6', '1', '3', '0'), - -('14', '6', '2', '0', '0'), -('14', '6', '2', '1', '0'), -('14', '6', '2', '2', '0'), -('14', '6', '2', '3', '0'), - -('14', '6', '3', '0', '0'), -('14', '6', '3', '1', '0'), -('14', '6', '3', '2', '0'), -('14', '6', '3', '3', '0'), - -('14', '6', '4', '0', '0'), -('14', '6', '4', '1', '0'), -('14', '6', '4', '2', '0'), -('14', '6', '4', '3', '0'), - -('14', '6', '5', '0', '0'), -('14', '6', '5', '1', '0'), -('14', '6', '5', '2', '0'), -('14', '6', '5', '3', '0'), - -('14', '6', '6', '0', '0'), -('14', '6', '6', '1', '0'), -('14', '6', '6', '2', '0'), -('14', '6', '6', '3', '0'), - -('14', '7', '0', '0', '0'), -('14', '7', '0', '1', '0'), -('14', '7', '0', '2', '0'), -('14', '7', '0', '3', '0'), - -('14', '7', '1', '0', '25'), -('14', '7', '1', '1', '25'), -('14', '7', '1', '2', '25'), -('14', '7', '1', '3', '25'), - -('14', '7', '2', '0', '25'), -('14', '7', '2', '1', '25'), -('14', '7', '2', '2', '25'), -('14', '7', '2', '3', '25'), - -('14', '7', '3', '0', '50'), -('14', '7', '3', '1', '50'), -('14', '7', '3', '2', '50'), -('14', '7', '3', '3', '50'), - -('14', '7', '4', '0', '50'), -('14', '7', '4', '1', '50'), -('14', '7', '4', '2', '50'), -('14', '7', '4', '3', '50'), - -('14', '7', '5', '0', '0'), -('14', '7', '5', '1', '0'), -('14', '7', '5', '2', '0'), -('14', '7', '5', '3', '0'), - -('14', '7', '6', '0', '0'), -('14', '7', '6', '1', '0'), -('14', '7', '6', '2', '0'), -('14', '7', '6', '3', '0'), - -('14', '8', '0', '0', '0'), -('14', '8', '0', '1', '0'), -('14', '8', '0', '2', '0'), -('14', '8', '0', '3', '0'), - -('14', '8', '1', '0', '0'), -('14', '8', '1', '1', '0'), -('14', '8', '1', '2', '0'), -('14', '8', '1', '3', '0'), - -('14', '8', '2', '0', '0'), -('14', '8', '2', '1', '0'), -('14', '8', '2', '2', '0'), -('14', '8', '2', '3', '0'), - -('14', '8', '3', '0', '0'), -('14', '8', '3', '1', '0'), -('14', '8', '3', '2', '0'), -('14', '8', '3', '3', '0'), - -('14', '8', '4', '0', '0'), -('14', '8', '4', '1', '0'), -('14', '8', '4', '2', '0'), -('14', '8', '4', '3', '0'), - -('14', '8', '5', '0', '0'), -('14', '8', '5', '1', '0'), -('14', '8', '5', '2', '0'), -('14', '8', '5', '3', '0'), - -('14', '8', '6', '0', '0'), -('14', '8', '6', '1', '0'), -('14', '8', '6', '2', '0'), -('14', '8', '6', '3', '0'), - -('14', '9', '0', '0', '0'), -('14', '9', '0', '1', '0'), -('14', '9', '0', '2', '0'), -('14', '9', '0', '3', '0'), - -('14', '9', '1', '0', '25'), -('14', '9', '1', '1', '25'), -('14', '9', '1', '2', '25'), -('14', '9', '1', '3', '25'), - -('14', '9', '2', '0', '15'), -('14', '9', '2', '1', '15'), -('14', '9', '2', '2', '15'), -('14', '9', '2', '3', '15'), - -('14', '9', '3', '0', '25'), -('14', '9', '3', '1', '25'), -('14', '9', '3', '2', '25'), -('14', '9', '3', '3', '25'), - -('14', '9', '4', '0', '15'), -('14', '9', '4', '1', '15'), -('14', '9', '4', '2', '15'), -('14', '9', '4', '3', '15'), - -('14', '9', '5', '0', '0'), -('14', '9', '5', '1', '0'), -('14', '9', '5', '2', '0'), -('14', '9', '5', '3', '0'), - -('14', '9', '6', '0', '0'), -('14', '9', '6', '1', '0'), -('14', '9', '6', '2', '0'), -('14', '9', '6', '3', '0'), - -('14', '10', '0', '0', '0'), -('14', '10', '0', '1', '0'), -('14', '10', '0', '2', '0'), -('14', '10', '0', '3', '0'), - -('14', '10', '1', '0', '25'), -('14', '10', '1', '1', '25'), -('14', '10', '1', '2', '25'), -('14', '10', '1', '3', '25'), - -('14', '10', '2', '0', '15'), -('14', '10', '2', '1', '15'), -('14', '10', '2', '2', '15'), -('14', '10', '2', '3', '15'), - -('14', '10', '3', '0', '25'), -('14', '10', '3', '1', '25'), -('14', '10', '3', '2', '25'), -('14', '10', '3', '3', '25'), - -('14', '10', '4', '0', '15'), -('14', '10', '4', '1', '15'), -('14', '10', '4', '2', '15'), -('14', '10', '4', '3', '15'), - -('14', '10', '5', '0', '0'), -('14', '10', '5', '1', '0'), -('14', '10', '5', '2', '0'), -('14', '10', '5', '3', '0'), - -('14', '10', '6', '0', '0'), -('14', '10', '6', '1', '0'), -('14', '10', '6', '2', '0'), -('14', '10', '6', '3', '0'), - -('14', '11', '0', '0', '0'), -('14', '11', '0', '1', '0'), -('14', '11', '0', '2', '0'), -('14', '11', '0', '3', '0'), - -('14', '11', '1', '0', '0'), -('14', '11', '1', '1', '0'), -('14', '11', '1', '2', '0'), -('14', '11', '1', '3', '0'), - -('14', '11', '2', '0', '0'), -('14', '11', '2', '1', '0'), -('14', '11', '2', '2', '0'), -('14', '11', '2', '3', '0'), - -('14', '11', '3', '0', '0'), -('14', '11', '3', '1', '0'), -('14', '11', '3', '2', '0'), -('14', '11', '3', '3', '0'), - -('14', '11', '4', '0', '0'), -('14', '11', '4', '1', '0'), -('14', '11', '4', '2', '0'), -('14', '11', '4', '3', '0'), - -('14', '11', '5', '0', '0'), -('14', '11', '5', '1', '0'), -('14', '11', '5', '2', '0'), -('14', '11', '5', '3', '0'), - -('14', '11', '6', '0', '0'), -('14', '11', '6', '1', '0'), -('14', '11', '6', '2', '0'), -('14', '11', '6', '3', '0'), - -('14', '12', '0', '0', '0'), -('14', '12', '0', '1', '0'), -('14', '12', '0', '2', '0'), -('14', '12', '0', '3', '0'), - -('14', '12', '1', '0', '25'), -('14', '12', '1', '1', '25'), -('14', '12', '1', '2', '25'), -('14', '12', '1', '3', '25'), - -('14', '12', '2', '0', '15'), -('14', '12', '2', '1', '15'), -('14', '12', '2', '2', '15'), -('14', '12', '2', '3', '15'), - -('14', '12', '3', '0', '25'), -('14', '12', '3', '1', '25'), -('14', '12', '3', '2', '25'), -('14', '12', '3', '3', '25'), - -('14', '12', '4', '0', '15'), -('14', '12', '4', '1', '15'), -('14', '12', '4', '2', '15'), -('14', '12', '4', '3', '15'), - -('14', '12', '5', '0', '0'), -('14', '12', '5', '1', '0'), -('14', '12', '5', '2', '0'), -('14', '12', '5', '3', '0'), - -('14', '12', '6', '0', '0'), -('14', '12', '6', '1', '0'), -('14', '12', '6', '2', '0'), -('14', '12', '6', '3', '0'), - -('14', '13', '0', '0', '0'), -('14', '13', '0', '1', '0'), -('14', '13', '0', '2', '0'), -('14', '13', '0', '3', '0'), - -('14', '13', '1', '0', '25'), -('14', '13', '1', '1', '25'), -('14', '13', '1', '2', '25'), -('14', '13', '1', '3', '25'), - -('14', '13', '2', '0', '15'), -('14', '13', '2', '1', '15'), -('14', '13', '2', '2', '15'), -('14', '13', '2', '3', '15'), - -('14', '13', '3', '0', '25'), -('14', '13', '3', '1', '25'), -('14', '13', '3', '2', '25'), -('14', '13', '3', '3', '25'), - -('14', '13', '4', '0', '15'), -('14', '13', '4', '1', '15'), -('14', '13', '4', '2', '15'), -('14', '13', '4', '3', '15'), - -('14', '13', '5', '0', '0'), -('14', '13', '5', '1', '0'), -('14', '13', '5', '2', '0'), -('14', '13', '5', '3', '0'), - -('14', '13', '6', '0', '0'), -('14', '13', '6', '1', '0'), -('14', '13', '6', '2', '0'), -('14', '13', '6', '3', '0'), - -('14', '14', '0', '0', '0'), -('14', '14', '0', '1', '0'), -('14', '14', '0', '2', '0'), -('14', '14', '0', '3', '0'), - -('14', '14', '1', '0', '15'), -('14', '14', '1', '1', '15'), -('14', '14', '1', '2', '15'), -('14', '14', '1', '3', '15'), - -('14', '14', '2', '0', '10'), -('14', '14', '2', '1', '10'), -('14', '14', '2', '2', '10'), -('14', '14', '2', '3', '10'), - -('14', '14', '3', '0', '15'), -('14', '14', '3', '1', '15'), -('14', '14', '3', '2', '15'), -('14', '14', '3', '3', '15'), - -('14', '14', '4', '0', '10'), -('14', '14', '4', '1', '10'), -('14', '14', '4', '2', '10'), -('14', '14', '4', '3', '10'), - -('14', '14', '5', '0', '0'), -('14', '14', '5', '1', '0'), -('14', '14', '5', '2', '0'), -('14', '14', '5', '3', '0'), - -('14', '14', '6', '0', '0'), -('14', '14', '6', '1', '0'), -('14', '14', '6', '2', '0'), -('14', '14', '6', '3', '0'), - -('14', '15', '0', '0', '0'), -('14', '15', '0', '1', '0'), -('14', '15', '0', '2', '0'), -('14', '15', '0', '3', '0'), - -('14', '15', '1', '0', '0'), -('14', '15', '1', '1', '0'), -('14', '15', '1', '2', '0'), -('14', '15', '1', '3', '0'), - -('14', '15', '2', '0', '0'), -('14', '15', '2', '1', '0'), -('14', '15', '2', '2', '0'), -('14', '15', '2', '3', '0'), - -('14', '15', '3', '0', '0'), -('14', '15', '3', '1', '0'), -('14', '15', '3', '2', '0'), -('14', '15', '3', '3', '0'), - -('14', '15', '4', '0', '0'), -('14', '15', '4', '1', '0'), -('14', '15', '4', '2', '0'), -('14', '15', '4', '3', '0'), - -('14', '15', '5', '0', '0'), -('14', '15', '5', '1', '0'), -('14', '15', '5', '2', '0'), -('14', '15', '5', '3', '0'), - -('14', '15', '6', '0', '0'), -('14', '15', '6', '1', '0'), -('14', '15', '6', '2', '0'), -('14', '15', '6', '3', '0'), - --- SpellType_CureIndex - -('15', '0', '0', '0', '0'), -('15', '0', '0', '1', '0'), -('15', '0', '0', '2', '0'), -('15', '0', '0', '3', '0'), - -('15', '0', '1', '0', '0'), -('15', '0', '1', '1', '0'), -('15', '0', '1', '2', '0'), -('15', '0', '1', '3', '0'), - -('15', '0', '2', '0', '0'), -('15', '0', '2', '1', '0'), -('15', '0', '2', '2', '0'), -('15', '0', '2', '3', '0'), - -('15', '0', '3', '0', '0'), -('15', '0', '3', '1', '0'), -('15', '0', '3', '2', '0'), -('15', '0', '3', '3', '0'), - -('15', '0', '4', '0', '0'), -('15', '0', '4', '1', '0'), -('15', '0', '4', '2', '0'), -('15', '0', '4', '3', '0'), - -('15', '0', '5', '0', '0'), -('15', '0', '5', '1', '0'), -('15', '0', '5', '2', '0'), -('15', '0', '5', '3', '0'), - -('15', '0', '6', '0', '0'), -('15', '0', '6', '1', '0'), -('15', '0', '6', '2', '0'), -('15', '0', '6', '3', '0'), - -('15', '1', '0', '0', '0'), -('15', '1', '0', '1', '0'), -('15', '1', '0', '2', '0'), -('15', '1', '0', '3', '0'), - -('15', '1', '1', '0', '0'), -('15', '1', '1', '1', '0'), -('15', '1', '1', '2', '0'), -('15', '1', '1', '3', '0'), - -('15', '1', '2', '0', '0'), -('15', '1', '2', '1', '0'), -('15', '1', '2', '2', '0'), -('15', '1', '2', '3', '0'), - -('15', '1', '3', '0', '0'), -('15', '1', '3', '1', '0'), -('15', '1', '3', '2', '0'), -('15', '1', '3', '3', '0'), - -('15', '1', '4', '0', '0'), -('15', '1', '4', '1', '0'), -('15', '1', '4', '2', '0'), -('15', '1', '4', '3', '0'), - -('15', '1', '5', '0', '0'), -('15', '1', '5', '1', '0'), -('15', '1', '5', '2', '0'), -('15', '1', '5', '3', '0'), - -('15', '1', '6', '0', '0'), -('15', '1', '6', '1', '0'), -('15', '1', '6', '2', '0'), -('15', '1', '6', '3', '0'), - -('15', '2', '0', '0', '0'), -('15', '2', '0', '1', '0'), -('15', '2', '0', '2', '0'), -('15', '2', '0', '3', '0'), - -('15', '2', '1', '0', '0'), -('15', '2', '1', '1', '0'), -('15', '2', '1', '2', '0'), -('15', '2', '1', '3', '0'), - -('15', '2', '2', '0', '0'), -('15', '2', '2', '1', '0'), -('15', '2', '2', '2', '0'), -('15', '2', '2', '3', '0'), - -('15', '2', '3', '0', '0'), -('15', '2', '3', '1', '0'), -('15', '2', '3', '2', '0'), -('15', '2', '3', '3', '0'), - -('15', '2', '4', '0', '0'), -('15', '2', '4', '1', '0'), -('15', '2', '4', '2', '0'), -('15', '2', '4', '3', '0'), - -('15', '2', '5', '0', '0'), -('15', '2', '5', '1', '0'), -('15', '2', '5', '2', '0'), -('15', '2', '5', '3', '0'), - -('15', '2', '6', '0', '0'), -('15', '2', '6', '1', '0'), -('15', '2', '6', '2', '0'), -('15', '2', '6', '3', '0'), - -('15', '3', '0', '0', '0'), -('15', '3', '0', '1', '0'), -('15', '3', '0', '2', '0'), -('15', '3', '0', '3', '0'), - -('15', '3', '1', '0', '0'), -('15', '3', '1', '1', '0'), -('15', '3', '1', '2', '0'), -('15', '3', '1', '3', '0'), - -('15', '3', '2', '0', '0'), -('15', '3', '2', '1', '0'), -('15', '3', '2', '2', '0'), -('15', '3', '2', '3', '0'), - -('15', '3', '3', '0', '0'), -('15', '3', '3', '1', '0'), -('15', '3', '3', '2', '0'), -('15', '3', '3', '3', '0'), - -('15', '3', '4', '0', '0'), -('15', '3', '4', '1', '0'), -('15', '3', '4', '2', '0'), -('15', '3', '4', '3', '0'), - -('15', '3', '5', '0', '0'), -('15', '3', '5', '1', '0'), -('15', '3', '5', '2', '0'), -('15', '3', '5', '3', '0'), - -('15', '3', '6', '0', '0'), -('15', '3', '6', '1', '0'), -('15', '3', '6', '2', '0'), -('15', '3', '6', '3', '0'), - -('15', '4', '0', '0', '0'), -('15', '4', '0', '1', '0'), -('15', '4', '0', '2', '0'), -('15', '4', '0', '3', '0'), - -('15', '4', '1', '0', '0'), -('15', '4', '1', '1', '0'), -('15', '4', '1', '2', '0'), -('15', '4', '1', '3', '0'), - -('15', '4', '2', '0', '0'), -('15', '4', '2', '1', '0'), -('15', '4', '2', '2', '0'), -('15', '4', '2', '3', '0'), - -('15', '4', '3', '0', '0'), -('15', '4', '3', '1', '0'), -('15', '4', '3', '2', '0'), -('15', '4', '3', '3', '0'), - -('15', '4', '4', '0', '0'), -('15', '4', '4', '1', '0'), -('15', '4', '4', '2', '0'), -('15', '4', '4', '3', '0'), - -('15', '4', '5', '0', '0'), -('15', '4', '5', '1', '0'), -('15', '4', '5', '2', '0'), -('15', '4', '5', '3', '0'), - -('15', '4', '6', '0', '0'), -('15', '4', '6', '1', '0'), -('15', '4', '6', '2', '0'), -('15', '4', '6', '3', '0'), - -('15', '5', '0', '0', '0'), -('15', '5', '0', '1', '0'), -('15', '5', '0', '2', '0'), -('15', '5', '0', '3', '0'), - -('15', '5', '1', '0', '0'), -('15', '5', '1', '1', '0'), -('15', '5', '1', '2', '0'), -('15', '5', '1', '3', '0'), - -('15', '5', '2', '0', '0'), -('15', '5', '2', '1', '0'), -('15', '5', '2', '2', '0'), -('15', '5', '2', '3', '0'), - -('15', '5', '3', '0', '0'), -('15', '5', '3', '1', '0'), -('15', '5', '3', '2', '0'), -('15', '5', '3', '3', '0'), - -('15', '5', '4', '0', '0'), -('15', '5', '4', '1', '0'), -('15', '5', '4', '2', '0'), -('15', '5', '4', '3', '0'), - -('15', '5', '5', '0', '0'), -('15', '5', '5', '1', '0'), -('15', '5', '5', '2', '0'), -('15', '5', '5', '3', '0'), - -('15', '5', '6', '0', '0'), -('15', '5', '6', '1', '0'), -('15', '5', '6', '2', '0'), -('15', '5', '6', '3', '0'), - -('15', '6', '0', '0', '0'), -('15', '6', '0', '1', '0'), -('15', '6', '0', '2', '0'), -('15', '6', '0', '3', '0'), - -('15', '6', '1', '0', '0'), -('15', '6', '1', '1', '0'), -('15', '6', '1', '2', '0'), -('15', '6', '1', '3', '0'), - -('15', '6', '2', '0', '0'), -('15', '6', '2', '1', '0'), -('15', '6', '2', '2', '0'), -('15', '6', '2', '3', '0'), - -('15', '6', '3', '0', '0'), -('15', '6', '3', '1', '0'), -('15', '6', '3', '2', '0'), -('15', '6', '3', '3', '0'), - -('15', '6', '4', '0', '0'), -('15', '6', '4', '1', '0'), -('15', '6', '4', '2', '0'), -('15', '6', '4', '3', '0'), - -('15', '6', '5', '0', '0'), -('15', '6', '5', '1', '0'), -('15', '6', '5', '2', '0'), -('15', '6', '5', '3', '0'), - -('15', '6', '6', '0', '0'), -('15', '6', '6', '1', '0'), -('15', '6', '6', '2', '0'), -('15', '6', '6', '3', '0'), - -('15', '7', '0', '0', '0'), -('15', '7', '0', '1', '0'), -('15', '7', '0', '2', '0'), -('15', '7', '0', '3', '0'), - -('15', '7', '1', '0', '75'), -('15', '7', '1', '1', '75'), -('15', '7', '1', '2', '75'), -('15', '7', '1', '3', '75'), - -('15', '7', '2', '0', '75'), -('15', '7', '2', '1', '75'), -('15', '7', '2', '2', '75'), -('15', '7', '2', '3', '75'), - -('15', '7', '3', '0', '100'), -('15', '7', '3', '1', '100'), -('15', '7', '3', '2', '100'), -('15', '7', '3', '3', '100'), - -('15', '7', '4', '0', '100'), -('15', '7', '4', '1', '100'), -('15', '7', '4', '2', '100'), -('15', '7', '4', '3', '100'), - -('15', '7', '5', '0', '100'), -('15', '7', '5', '1', '100'), -('15', '7', '5', '2', '100'), -('15', '7', '5', '3', '100'), - -('15', '7', '6', '0', '100'), -('15', '7', '6', '1', '100'), -('15', '7', '6', '2', '100'), -('15', '7', '6', '3', '100'), - -('15', '8', '0', '0', '0'), -('15', '8', '0', '1', '0'), -('15', '8', '0', '2', '0'), -('15', '8', '0', '3', '0'), - -('15', '8', '1', '0', '0'), -('15', '8', '1', '1', '0'), -('15', '8', '1', '2', '0'), -('15', '8', '1', '3', '0'), - -('15', '8', '2', '0', '0'), -('15', '8', '2', '1', '0'), -('15', '8', '2', '2', '0'), -('15', '8', '2', '3', '0'), - -('15', '8', '3', '0', '0'), -('15', '8', '3', '1', '0'), -('15', '8', '3', '2', '0'), -('15', '8', '3', '3', '0'), - -('15', '8', '4', '0', '0'), -('15', '8', '4', '1', '0'), -('15', '8', '4', '2', '0'), -('15', '8', '4', '3', '0'), - -('15', '8', '5', '0', '0'), -('15', '8', '5', '1', '0'), -('15', '8', '5', '2', '0'), -('15', '8', '5', '3', '0'), - -('15', '8', '6', '0', '0'), -('15', '8', '6', '1', '0'), -('15', '8', '6', '2', '0'), -('15', '8', '6', '3', '0'), - -('15', '9', '0', '0', '0'), -('15', '9', '0', '1', '0'), -('15', '9', '0', '2', '0'), -('15', '9', '0', '3', '0'), - -('15', '9', '1', '0', '0'), -('15', '9', '1', '1', '0'), -('15', '9', '1', '2', '0'), -('15', '9', '1', '3', '0'), - -('15', '9', '2', '0', '0'), -('15', '9', '2', '1', '0'), -('15', '9', '2', '2', '0'), -('15', '9', '2', '3', '0'), - -('15', '9', '3', '0', '0'), -('15', '9', '3', '1', '0'), -('15', '9', '3', '2', '0'), -('15', '9', '3', '3', '0'), - -('15', '9', '4', '0', '0'), -('15', '9', '4', '1', '0'), -('15', '9', '4', '2', '0'), -('15', '9', '4', '3', '0'), - -('15', '9', '5', '0', '0'), -('15', '9', '5', '1', '0'), -('15', '9', '5', '2', '0'), -('15', '9', '5', '3', '0'), - -('15', '9', '6', '0', '0'), -('15', '9', '6', '1', '0'), -('15', '9', '6', '2', '0'), -('15', '9', '6', '3', '0'), - -('15', '10', '0', '0', '0'), -('15', '10', '0', '1', '0'), -('15', '10', '0', '2', '0'), -('15', '10', '0', '3', '0'), - -('15', '10', '1', '0', '0'), -('15', '10', '1', '1', '0'), -('15', '10', '1', '2', '0'), -('15', '10', '1', '3', '0'), - -('15', '10', '2', '0', '0'), -('15', '10', '2', '1', '0'), -('15', '10', '2', '2', '0'), -('15', '10', '2', '3', '0'), - -('15', '10', '3', '0', '0'), -('15', '10', '3', '1', '0'), -('15', '10', '3', '2', '0'), -('15', '10', '3', '3', '0'), - -('15', '10', '4', '0', '0'), -('15', '10', '4', '1', '0'), -('15', '10', '4', '2', '0'), -('15', '10', '4', '3', '0'), - -('15', '10', '5', '0', '0'), -('15', '10', '5', '1', '0'), -('15', '10', '5', '2', '0'), -('15', '10', '5', '3', '0'), - -('15', '10', '6', '0', '0'), -('15', '10', '6', '1', '0'), -('15', '10', '6', '2', '0'), -('15', '10', '6', '3', '0'), - -('15', '11', '0', '0', '0'), -('15', '11', '0', '1', '0'), -('15', '11', '0', '2', '0'), -('15', '11', '0', '3', '0'), - -('15', '11', '1', '0', '0'), -('15', '11', '1', '1', '0'), -('15', '11', '1', '2', '0'), -('15', '11', '1', '3', '0'), - -('15', '11', '2', '0', '0'), -('15', '11', '2', '1', '0'), -('15', '11', '2', '2', '0'), -('15', '11', '2', '3', '0'), - -('15', '11', '3', '0', '0'), -('15', '11', '3', '1', '0'), -('15', '11', '3', '2', '0'), -('15', '11', '3', '3', '0'), - -('15', '11', '4', '0', '0'), -('15', '11', '4', '1', '0'), -('15', '11', '4', '2', '0'), -('15', '11', '4', '3', '0'), - -('15', '11', '5', '0', '0'), -('15', '11', '5', '1', '0'), -('15', '11', '5', '2', '0'), -('15', '11', '5', '3', '0'), - -('15', '11', '6', '0', '0'), -('15', '11', '6', '1', '0'), -('15', '11', '6', '2', '0'), -('15', '11', '6', '3', '0'), - -('15', '12', '0', '0', '0'), -('15', '12', '0', '1', '0'), -('15', '12', '0', '2', '0'), -('15', '12', '0', '3', '0'), - -('15', '12', '1', '0', '0'), -('15', '12', '1', '1', '0'), -('15', '12', '1', '2', '0'), -('15', '12', '1', '3', '0'), - -('15', '12', '2', '0', '0'), -('15', '12', '2', '1', '0'), -('15', '12', '2', '2', '0'), -('15', '12', '2', '3', '0'), - -('15', '12', '3', '0', '0'), -('15', '12', '3', '1', '0'), -('15', '12', '3', '2', '0'), -('15', '12', '3', '3', '0'), - -('15', '12', '4', '0', '0'), -('15', '12', '4', '1', '0'), -('15', '12', '4', '2', '0'), -('15', '12', '4', '3', '0'), - -('15', '12', '5', '0', '0'), -('15', '12', '5', '1', '0'), -('15', '12', '5', '2', '0'), -('15', '12', '5', '3', '0'), - -('15', '12', '6', '0', '0'), -('15', '12', '6', '1', '0'), -('15', '12', '6', '2', '0'), -('15', '12', '6', '3', '0'), - -('15', '13', '0', '0', '0'), -('15', '13', '0', '1', '0'), -('15', '13', '0', '2', '0'), -('15', '13', '0', '3', '0'), - -('15', '13', '1', '0', '0'), -('15', '13', '1', '1', '0'), -('15', '13', '1', '2', '0'), -('15', '13', '1', '3', '0'), - -('15', '13', '2', '0', '0'), -('15', '13', '2', '1', '0'), -('15', '13', '2', '2', '0'), -('15', '13', '2', '3', '0'), - -('15', '13', '3', '0', '0'), -('15', '13', '3', '1', '0'), -('15', '13', '3', '2', '0'), -('15', '13', '3', '3', '0'), - -('15', '13', '4', '0', '0'), -('15', '13', '4', '1', '0'), -('15', '13', '4', '2', '0'), -('15', '13', '4', '3', '0'), - -('15', '13', '5', '0', '0'), -('15', '13', '5', '1', '0'), -('15', '13', '5', '2', '0'), -('15', '13', '5', '3', '0'), - -('15', '13', '6', '0', '0'), -('15', '13', '6', '1', '0'), -('15', '13', '6', '2', '0'), -('15', '13', '6', '3', '0'), - -('15', '14', '0', '0', '0'), -('15', '14', '0', '1', '0'), -('15', '14', '0', '2', '0'), -('15', '14', '0', '3', '0'), - -('15', '14', '1', '0', '0'), -('15', '14', '1', '1', '0'), -('15', '14', '1', '2', '0'), -('15', '14', '1', '3', '0'), - -('15', '14', '2', '0', '0'), -('15', '14', '2', '1', '0'), -('15', '14', '2', '2', '0'), -('15', '14', '2', '3', '0'), - -('15', '14', '3', '0', '0'), -('15', '14', '3', '1', '0'), -('15', '14', '3', '2', '0'), -('15', '14', '3', '3', '0'), - -('15', '14', '4', '0', '0'), -('15', '14', '4', '1', '0'), -('15', '14', '4', '2', '0'), -('15', '14', '4', '3', '0'), - -('15', '14', '5', '0', '0'), -('15', '14', '5', '1', '0'), -('15', '14', '5', '2', '0'), -('15', '14', '5', '3', '0'), - -('15', '14', '6', '0', '0'), -('15', '14', '6', '1', '0'), -('15', '14', '6', '2', '0'), -('15', '14', '6', '3', '0'), - -('15', '15', '0', '0', '0'), -('15', '15', '0', '1', '0'), -('15', '15', '0', '2', '0'), -('15', '15', '0', '3', '0'), - -('15', '15', '1', '0', '0'), -('15', '15', '1', '1', '0'), -('15', '15', '1', '2', '0'), -('15', '15', '1', '3', '0'), - -('15', '15', '2', '0', '0'), -('15', '15', '2', '1', '0'), -('15', '15', '2', '2', '0'), -('15', '15', '2', '3', '0'), - -('15', '15', '3', '0', '0'), -('15', '15', '3', '1', '0'), -('15', '15', '3', '2', '0'), -('15', '15', '3', '3', '0'), - -('15', '15', '4', '0', '0'), -('15', '15', '4', '1', '0'), -('15', '15', '4', '2', '0'), -('15', '15', '4', '3', '0'), - -('15', '15', '5', '0', '0'), -('15', '15', '5', '1', '0'), -('15', '15', '5', '2', '0'), -('15', '15', '5', '3', '0'), - -('15', '15', '6', '0', '0'), -('15', '15', '6', '1', '0'), -('15', '15', '6', '2', '0'), -('15', '15', '6', '3', '0'), - --- SpellType_ResurrectIndex - -('16', '0', '0', '0', '0'), -('16', '0', '0', '1', '0'), -('16', '0', '0', '2', '0'), -('16', '0', '0', '3', '0'), - -('16', '0', '1', '0', '0'), -('16', '0', '1', '1', '0'), -('16', '0', '1', '2', '0'), -('16', '0', '1', '3', '0'), - -('16', '0', '2', '0', '0'), -('16', '0', '2', '1', '0'), -('16', '0', '2', '2', '0'), -('16', '0', '2', '3', '0'), - -('16', '0', '3', '0', '0'), -('16', '0', '3', '1', '0'), -('16', '0', '3', '2', '0'), -('16', '0', '3', '3', '0'), - -('16', '0', '4', '0', '0'), -('16', '0', '4', '1', '0'), -('16', '0', '4', '2', '0'), -('16', '0', '4', '3', '0'), - -('16', '0', '5', '0', '0'), -('16', '0', '5', '1', '0'), -('16', '0', '5', '2', '0'), -('16', '0', '5', '3', '0'), - -('16', '0', '6', '0', '0'), -('16', '0', '6', '1', '0'), -('16', '0', '6', '2', '0'), -('16', '0', '6', '3', '0'), - -('16', '1', '0', '0', '0'), -('16', '1', '0', '1', '0'), -('16', '1', '0', '2', '0'), -('16', '1', '0', '3', '0'), - -('16', '1', '1', '0', '0'), -('16', '1', '1', '1', '0'), -('16', '1', '1', '2', '0'), -('16', '1', '1', '3', '0'), - -('16', '1', '2', '0', '0'), -('16', '1', '2', '1', '0'), -('16', '1', '2', '2', '0'), -('16', '1', '2', '3', '0'), - -('16', '1', '3', '0', '0'), -('16', '1', '3', '1', '0'), -('16', '1', '3', '2', '0'), -('16', '1', '3', '3', '0'), - -('16', '1', '4', '0', '0'), -('16', '1', '4', '1', '0'), -('16', '1', '4', '2', '0'), -('16', '1', '4', '3', '0'), - -('16', '1', '5', '0', '0'), -('16', '1', '5', '1', '0'), -('16', '1', '5', '2', '0'), -('16', '1', '5', '3', '0'), - -('16', '1', '6', '0', '0'), -('16', '1', '6', '1', '0'), -('16', '1', '6', '2', '0'), -('16', '1', '6', '3', '0'), - -('16', '2', '0', '0', '0'), -('16', '2', '0', '1', '0'), -('16', '2', '0', '2', '0'), -('16', '2', '0', '3', '0'), - -('16', '2', '1', '0', '0'), -('16', '2', '1', '1', '0'), -('16', '2', '1', '2', '0'), -('16', '2', '1', '3', '0'), - -('16', '2', '2', '0', '0'), -('16', '2', '2', '1', '0'), -('16', '2', '2', '2', '0'), -('16', '2', '2', '3', '0'), - -('16', '2', '3', '0', '0'), -('16', '2', '3', '1', '0'), -('16', '2', '3', '2', '0'), -('16', '2', '3', '3', '0'), - -('16', '2', '4', '0', '0'), -('16', '2', '4', '1', '0'), -('16', '2', '4', '2', '0'), -('16', '2', '4', '3', '0'), - -('16', '2', '5', '0', '0'), -('16', '2', '5', '1', '0'), -('16', '2', '5', '2', '0'), -('16', '2', '5', '3', '0'), - -('16', '2', '6', '0', '0'), -('16', '2', '6', '1', '0'), -('16', '2', '6', '2', '0'), -('16', '2', '6', '3', '0'), - -('16', '3', '0', '0', '0'), -('16', '3', '0', '1', '0'), -('16', '3', '0', '2', '0'), -('16', '3', '0', '3', '0'), - -('16', '3', '1', '0', '0'), -('16', '3', '1', '1', '0'), -('16', '3', '1', '2', '0'), -('16', '3', '1', '3', '0'), - -('16', '3', '2', '0', '0'), -('16', '3', '2', '1', '0'), -('16', '3', '2', '2', '0'), -('16', '3', '2', '3', '0'), - -('16', '3', '3', '0', '0'), -('16', '3', '3', '1', '0'), -('16', '3', '3', '2', '0'), -('16', '3', '3', '3', '0'), - -('16', '3', '4', '0', '0'), -('16', '3', '4', '1', '0'), -('16', '3', '4', '2', '0'), -('16', '3', '4', '3', '0'), - -('16', '3', '5', '0', '0'), -('16', '3', '5', '1', '0'), -('16', '3', '5', '2', '0'), -('16', '3', '5', '3', '0'), - -('16', '3', '6', '0', '0'), -('16', '3', '6', '1', '0'), -('16', '3', '6', '2', '0'), -('16', '3', '6', '3', '0'), - -('16', '4', '0', '0', '0'), -('16', '4', '0', '1', '0'), -('16', '4', '0', '2', '0'), -('16', '4', '0', '3', '0'), - -('16', '4', '1', '0', '0'), -('16', '4', '1', '1', '0'), -('16', '4', '1', '2', '0'), -('16', '4', '1', '3', '0'), - -('16', '4', '2', '0', '0'), -('16', '4', '2', '1', '0'), -('16', '4', '2', '2', '0'), -('16', '4', '2', '3', '0'), - -('16', '4', '3', '0', '0'), -('16', '4', '3', '1', '0'), -('16', '4', '3', '2', '0'), -('16', '4', '3', '3', '0'), - -('16', '4', '4', '0', '0'), -('16', '4', '4', '1', '0'), -('16', '4', '4', '2', '0'), -('16', '4', '4', '3', '0'), - -('16', '4', '5', '0', '0'), -('16', '4', '5', '1', '0'), -('16', '4', '5', '2', '0'), -('16', '4', '5', '3', '0'), - -('16', '4', '6', '0', '0'), -('16', '4', '6', '1', '0'), -('16', '4', '6', '2', '0'), -('16', '4', '6', '3', '0'), - -('16', '5', '0', '0', '0'), -('16', '5', '0', '1', '0'), -('16', '5', '0', '2', '0'), -('16', '5', '0', '3', '0'), - -('16', '5', '1', '0', '0'), -('16', '5', '1', '1', '0'), -('16', '5', '1', '2', '0'), -('16', '5', '1', '3', '0'), - -('16', '5', '2', '0', '0'), -('16', '5', '2', '1', '0'), -('16', '5', '2', '2', '0'), -('16', '5', '2', '3', '0'), - -('16', '5', '3', '0', '0'), -('16', '5', '3', '1', '0'), -('16', '5', '3', '2', '0'), -('16', '5', '3', '3', '0'), - -('16', '5', '4', '0', '0'), -('16', '5', '4', '1', '0'), -('16', '5', '4', '2', '0'), -('16', '5', '4', '3', '0'), - -('16', '5', '5', '0', '0'), -('16', '5', '5', '1', '0'), -('16', '5', '5', '2', '0'), -('16', '5', '5', '3', '0'), - -('16', '5', '6', '0', '0'), -('16', '5', '6', '1', '0'), -('16', '5', '6', '2', '0'), -('16', '5', '6', '3', '0'), - -('16', '6', '0', '0', '0'), -('16', '6', '0', '1', '0'), -('16', '6', '0', '2', '0'), -('16', '6', '0', '3', '0'), - -('16', '6', '1', '0', '0'), -('16', '6', '1', '1', '0'), -('16', '6', '1', '2', '0'), -('16', '6', '1', '3', '0'), - -('16', '6', '2', '0', '0'), -('16', '6', '2', '1', '0'), -('16', '6', '2', '2', '0'), -('16', '6', '2', '3', '0'), - -('16', '6', '3', '0', '0'), -('16', '6', '3', '1', '0'), -('16', '6', '3', '2', '0'), -('16', '6', '3', '3', '0'), - -('16', '6', '4', '0', '0'), -('16', '6', '4', '1', '0'), -('16', '6', '4', '2', '0'), -('16', '6', '4', '3', '0'), - -('16', '6', '5', '0', '0'), -('16', '6', '5', '1', '0'), -('16', '6', '5', '2', '0'), -('16', '6', '5', '3', '0'), - -('16', '6', '6', '0', '0'), -('16', '6', '6', '1', '0'), -('16', '6', '6', '2', '0'), -('16', '6', '6', '3', '0'), - -('16', '7', '0', '0', '0'), -('16', '7', '0', '1', '0'), -('16', '7', '0', '2', '0'), -('16', '7', '0', '3', '0'), - -('16', '7', '1', '0', '0'), -('16', '7', '1', '1', '0'), -('16', '7', '1', '2', '0'), -('16', '7', '1', '3', '0'), - -('16', '7', '2', '0', '0'), -('16', '7', '2', '1', '0'), -('16', '7', '2', '2', '0'), -('16', '7', '2', '3', '0'), - -('16', '7', '3', '0', '0'), -('16', '7', '3', '1', '0'), -('16', '7', '3', '2', '0'), -('16', '7', '3', '3', '0'), - -('16', '7', '4', '0', '0'), -('16', '7', '4', '1', '0'), -('16', '7', '4', '2', '0'), -('16', '7', '4', '3', '0'), - -('16', '7', '5', '0', '0'), -('16', '7', '5', '1', '0'), -('16', '7', '5', '2', '0'), -('16', '7', '5', '3', '0'), - -('16', '7', '6', '0', '0'), -('16', '7', '6', '1', '0'), -('16', '7', '6', '2', '0'), -('16', '7', '6', '3', '0'), - -('16', '8', '0', '0', '0'), -('16', '8', '0', '1', '0'), -('16', '8', '0', '2', '0'), -('16', '8', '0', '3', '0'), - -('16', '8', '1', '0', '0'), -('16', '8', '1', '1', '0'), -('16', '8', '1', '2', '0'), -('16', '8', '1', '3', '0'), - -('16', '8', '2', '0', '0'), -('16', '8', '2', '1', '0'), -('16', '8', '2', '2', '0'), -('16', '8', '2', '3', '0'), - -('16', '8', '3', '0', '0'), -('16', '8', '3', '1', '0'), -('16', '8', '3', '2', '0'), -('16', '8', '3', '3', '0'), - -('16', '8', '4', '0', '0'), -('16', '8', '4', '1', '0'), -('16', '8', '4', '2', '0'), -('16', '8', '4', '3', '0'), - -('16', '8', '5', '0', '0'), -('16', '8', '5', '1', '0'), -('16', '8', '5', '2', '0'), -('16', '8', '5', '3', '0'), - -('16', '8', '6', '0', '0'), -('16', '8', '6', '1', '0'), -('16', '8', '6', '2', '0'), -('16', '8', '6', '3', '0'), - -('16', '9', '0', '0', '0'), -('16', '9', '0', '1', '0'), -('16', '9', '0', '2', '0'), -('16', '9', '0', '3', '0'), - -('16', '9', '1', '0', '0'), -('16', '9', '1', '1', '0'), -('16', '9', '1', '2', '0'), -('16', '9', '1', '3', '0'), - -('16', '9', '2', '0', '0'), -('16', '9', '2', '1', '0'), -('16', '9', '2', '2', '0'), -('16', '9', '2', '3', '0'), - -('16', '9', '3', '0', '0'), -('16', '9', '3', '1', '0'), -('16', '9', '3', '2', '0'), -('16', '9', '3', '3', '0'), - -('16', '9', '4', '0', '0'), -('16', '9', '4', '1', '0'), -('16', '9', '4', '2', '0'), -('16', '9', '4', '3', '0'), - -('16', '9', '5', '0', '0'), -('16', '9', '5', '1', '0'), -('16', '9', '5', '2', '0'), -('16', '9', '5', '3', '0'), - -('16', '9', '6', '0', '0'), -('16', '9', '6', '1', '0'), -('16', '9', '6', '2', '0'), -('16', '9', '6', '3', '0'), - -('16', '10', '0', '0', '0'), -('16', '10', '0', '1', '0'), -('16', '10', '0', '2', '0'), -('16', '10', '0', '3', '0'), - -('16', '10', '1', '0', '0'), -('16', '10', '1', '1', '0'), -('16', '10', '1', '2', '0'), -('16', '10', '1', '3', '0'), - -('16', '10', '2', '0', '0'), -('16', '10', '2', '1', '0'), -('16', '10', '2', '2', '0'), -('16', '10', '2', '3', '0'), - -('16', '10', '3', '0', '0'), -('16', '10', '3', '1', '0'), -('16', '10', '3', '2', '0'), -('16', '10', '3', '3', '0'), - -('16', '10', '4', '0', '0'), -('16', '10', '4', '1', '0'), -('16', '10', '4', '2', '0'), -('16', '10', '4', '3', '0'), - -('16', '10', '5', '0', '0'), -('16', '10', '5', '1', '0'), -('16', '10', '5', '2', '0'), -('16', '10', '5', '3', '0'), - -('16', '10', '6', '0', '0'), -('16', '10', '6', '1', '0'), -('16', '10', '6', '2', '0'), -('16', '10', '6', '3', '0'), - -('16', '11', '0', '0', '0'), -('16', '11', '0', '1', '0'), -('16', '11', '0', '2', '0'), -('16', '11', '0', '3', '0'), - -('16', '11', '1', '0', '0'), -('16', '11', '1', '1', '0'), -('16', '11', '1', '2', '0'), -('16', '11', '1', '3', '0'), - -('16', '11', '2', '0', '0'), -('16', '11', '2', '1', '0'), -('16', '11', '2', '2', '0'), -('16', '11', '2', '3', '0'), - -('16', '11', '3', '0', '0'), -('16', '11', '3', '1', '0'), -('16', '11', '3', '2', '0'), -('16', '11', '3', '3', '0'), - -('16', '11', '4', '0', '0'), -('16', '11', '4', '1', '0'), -('16', '11', '4', '2', '0'), -('16', '11', '4', '3', '0'), - -('16', '11', '5', '0', '0'), -('16', '11', '5', '1', '0'), -('16', '11', '5', '2', '0'), -('16', '11', '5', '3', '0'), - -('16', '11', '6', '0', '0'), -('16', '11', '6', '1', '0'), -('16', '11', '6', '2', '0'), -('16', '11', '6', '3', '0'), - -('16', '12', '0', '0', '0'), -('16', '12', '0', '1', '0'), -('16', '12', '0', '2', '0'), -('16', '12', '0', '3', '0'), - -('16', '12', '1', '0', '0'), -('16', '12', '1', '1', '0'), -('16', '12', '1', '2', '0'), -('16', '12', '1', '3', '0'), - -('16', '12', '2', '0', '0'), -('16', '12', '2', '1', '0'), -('16', '12', '2', '2', '0'), -('16', '12', '2', '3', '0'), - -('16', '12', '3', '0', '0'), -('16', '12', '3', '1', '0'), -('16', '12', '3', '2', '0'), -('16', '12', '3', '3', '0'), - -('16', '12', '4', '0', '0'), -('16', '12', '4', '1', '0'), -('16', '12', '4', '2', '0'), -('16', '12', '4', '3', '0'), - -('16', '12', '5', '0', '0'), -('16', '12', '5', '1', '0'), -('16', '12', '5', '2', '0'), -('16', '12', '5', '3', '0'), - -('16', '12', '6', '0', '0'), -('16', '12', '6', '1', '0'), -('16', '12', '6', '2', '0'), -('16', '12', '6', '3', '0'), - -('16', '13', '0', '0', '0'), -('16', '13', '0', '1', '0'), -('16', '13', '0', '2', '0'), -('16', '13', '0', '3', '0'), - -('16', '13', '1', '0', '0'), -('16', '13', '1', '1', '0'), -('16', '13', '1', '2', '0'), -('16', '13', '1', '3', '0'), - -('16', '13', '2', '0', '0'), -('16', '13', '2', '1', '0'), -('16', '13', '2', '2', '0'), -('16', '13', '2', '3', '0'), - -('16', '13', '3', '0', '0'), -('16', '13', '3', '1', '0'), -('16', '13', '3', '2', '0'), -('16', '13', '3', '3', '0'), - -('16', '13', '4', '0', '0'), -('16', '13', '4', '1', '0'), -('16', '13', '4', '2', '0'), -('16', '13', '4', '3', '0'), - -('16', '13', '5', '0', '0'), -('16', '13', '5', '1', '0'), -('16', '13', '5', '2', '0'), -('16', '13', '5', '3', '0'), - -('16', '13', '6', '0', '0'), -('16', '13', '6', '1', '0'), -('16', '13', '6', '2', '0'), -('16', '13', '6', '3', '0'), - -('16', '14', '0', '0', '0'), -('16', '14', '0', '1', '0'), -('16', '14', '0', '2', '0'), -('16', '14', '0', '3', '0'), - -('16', '14', '1', '0', '0'), -('16', '14', '1', '1', '0'), -('16', '14', '1', '2', '0'), -('16', '14', '1', '3', '0'), - -('16', '14', '2', '0', '0'), -('16', '14', '2', '1', '0'), -('16', '14', '2', '2', '0'), -('16', '14', '2', '3', '0'), - -('16', '14', '3', '0', '0'), -('16', '14', '3', '1', '0'), -('16', '14', '3', '2', '0'), -('16', '14', '3', '3', '0'), - -('16', '14', '4', '0', '0'), -('16', '14', '4', '1', '0'), -('16', '14', '4', '2', '0'), -('16', '14', '4', '3', '0'), - -('16', '14', '5', '0', '0'), -('16', '14', '5', '1', '0'), -('16', '14', '5', '2', '0'), -('16', '14', '5', '3', '0'), - -('16', '14', '6', '0', '0'), -('16', '14', '6', '1', '0'), -('16', '14', '6', '2', '0'), -('16', '14', '6', '3', '0'), - -('16', '15', '0', '0', '0'), -('16', '15', '0', '1', '0'), -('16', '15', '0', '2', '0'), -('16', '15', '0', '3', '0'), - -('16', '15', '1', '0', '0'), -('16', '15', '1', '1', '0'), -('16', '15', '1', '2', '0'), -('16', '15', '1', '3', '0'), - -('16', '15', '2', '0', '0'), -('16', '15', '2', '1', '0'), -('16', '15', '2', '2', '0'), -('16', '15', '2', '3', '0'), - -('16', '15', '3', '0', '0'), -('16', '15', '3', '1', '0'), -('16', '15', '3', '2', '0'), -('16', '15', '3', '3', '0'), - -('16', '15', '4', '0', '0'), -('16', '15', '4', '1', '0'), -('16', '15', '4', '2', '0'), -('16', '15', '4', '3', '0'), - -('16', '15', '5', '0', '0'), -('16', '15', '5', '1', '0'), -('16', '15', '5', '2', '0'), -('16', '15', '5', '3', '0'), - -('16', '15', '6', '0', '0'), -('16', '15', '6', '1', '0'), -('16', '15', '6', '2', '0'), -('16', '15', '6', '3', '0'), - --- SpellType_HateReduxIndex - -('17', '0', '0', '0', '0'), -('17', '0', '0', '1', '0'), -('17', '0', '0', '2', '0'), -('17', '0', '0', '3', '0'), - -('17', '0', '1', '0', '0'), -('17', '0', '1', '1', '0'), -('17', '0', '1', '2', '0'), -('17', '0', '1', '3', '0'), - -('17', '0', '2', '0', '0'), -('17', '0', '2', '1', '0'), -('17', '0', '2', '2', '0'), -('17', '0', '2', '3', '0'), - -('17', '0', '3', '0', '0'), -('17', '0', '3', '1', '0'), -('17', '0', '3', '2', '0'), -('17', '0', '3', '3', '0'), - -('17', '0', '4', '0', '0'), -('17', '0', '4', '1', '0'), -('17', '0', '4', '2', '0'), -('17', '0', '4', '3', '0'), - -('17', '0', '5', '0', '0'), -('17', '0', '5', '1', '0'), -('17', '0', '5', '2', '0'), -('17', '0', '5', '3', '0'), - -('17', '0', '6', '0', '0'), -('17', '0', '6', '1', '0'), -('17', '0', '6', '2', '0'), -('17', '0', '6', '3', '0'), - -('17', '1', '0', '0', '0'), -('17', '1', '0', '1', '0'), -('17', '1', '0', '2', '0'), -('17', '1', '0', '3', '0'), - -('17', '1', '1', '0', '0'), -('17', '1', '1', '1', '0'), -('17', '1', '1', '2', '0'), -('17', '1', '1', '3', '0'), - -('17', '1', '2', '0', '0'), -('17', '1', '2', '1', '0'), -('17', '1', '2', '2', '0'), -('17', '1', '2', '3', '0'), - -('17', '1', '3', '0', '0'), -('17', '1', '3', '1', '0'), -('17', '1', '3', '2', '0'), -('17', '1', '3', '3', '0'), - -('17', '1', '4', '0', '0'), -('17', '1', '4', '1', '0'), -('17', '1', '4', '2', '0'), -('17', '1', '4', '3', '0'), - -('17', '1', '5', '0', '0'), -('17', '1', '5', '1', '0'), -('17', '1', '5', '2', '0'), -('17', '1', '5', '3', '0'), - -('17', '1', '6', '0', '0'), -('17', '1', '6', '1', '0'), -('17', '1', '6', '2', '0'), -('17', '1', '6', '3', '0'), - -('17', '2', '0', '0', '0'), -('17', '2', '0', '1', '0'), -('17', '2', '0', '2', '0'), -('17', '2', '0', '3', '0'), - -('17', '2', '1', '0', '0'), -('17', '2', '1', '1', '0'), -('17', '2', '1', '2', '0'), -('17', '2', '1', '3', '0'), - -('17', '2', '2', '0', '0'), -('17', '2', '2', '1', '0'), -('17', '2', '2', '2', '0'), -('17', '2', '2', '3', '0'), - -('17', '2', '3', '0', '0'), -('17', '2', '3', '1', '0'), -('17', '2', '3', '2', '0'), -('17', '2', '3', '3', '0'), - -('17', '2', '4', '0', '0'), -('17', '2', '4', '1', '0'), -('17', '2', '4', '2', '0'), -('17', '2', '4', '3', '0'), - -('17', '2', '5', '0', '0'), -('17', '2', '5', '1', '0'), -('17', '2', '5', '2', '0'), -('17', '2', '5', '3', '0'), - -('17', '2', '6', '0', '0'), -('17', '2', '6', '1', '0'), -('17', '2', '6', '2', '0'), -('17', '2', '6', '3', '0'), - -('17', '3', '0', '0', '0'), -('17', '3', '0', '1', '0'), -('17', '3', '0', '2', '0'), -('17', '3', '0', '3', '0'), - -('17', '3', '1', '0', '0'), -('17', '3', '1', '1', '0'), -('17', '3', '1', '2', '0'), -('17', '3', '1', '3', '0'), - -('17', '3', '2', '0', '0'), -('17', '3', '2', '1', '0'), -('17', '3', '2', '2', '0'), -('17', '3', '2', '3', '0'), - -('17', '3', '3', '0', '0'), -('17', '3', '3', '1', '0'), -('17', '3', '3', '2', '0'), -('17', '3', '3', '3', '0'), - -('17', '3', '4', '0', '0'), -('17', '3', '4', '1', '0'), -('17', '3', '4', '2', '0'), -('17', '3', '4', '3', '0'), - -('17', '3', '5', '0', '0'), -('17', '3', '5', '1', '0'), -('17', '3', '5', '2', '0'), -('17', '3', '5', '3', '0'), - -('17', '3', '6', '0', '0'), -('17', '3', '6', '1', '0'), -('17', '3', '6', '2', '0'), -('17', '3', '6', '3', '0'), - -('17', '4', '0', '0', '0'), -('17', '4', '0', '1', '0'), -('17', '4', '0', '2', '0'), -('17', '4', '0', '3', '0'), - -('17', '4', '1', '0', '0'), -('17', '4', '1', '1', '0'), -('17', '4', '1', '2', '0'), -('17', '4', '1', '3', '0'), - -('17', '4', '2', '0', '0'), -('17', '4', '2', '1', '0'), -('17', '4', '2', '2', '0'), -('17', '4', '2', '3', '0'), - -('17', '4', '3', '0', '0'), -('17', '4', '3', '1', '0'), -('17', '4', '3', '2', '0'), -('17', '4', '3', '3', '0'), - -('17', '4', '4', '0', '0'), -('17', '4', '4', '1', '0'), -('17', '4', '4', '2', '0'), -('17', '4', '4', '3', '0'), - -('17', '4', '5', '0', '0'), -('17', '4', '5', '1', '0'), -('17', '4', '5', '2', '0'), -('17', '4', '5', '3', '0'), - -('17', '4', '6', '0', '0'), -('17', '4', '6', '1', '0'), -('17', '4', '6', '2', '0'), -('17', '4', '6', '3', '0'), - -('17', '5', '0', '0', '0'), -('17', '5', '0', '1', '0'), -('17', '5', '0', '2', '0'), -('17', '5', '0', '3', '0'), - -('17', '5', '1', '0', '0'), -('17', '5', '1', '1', '0'), -('17', '5', '1', '2', '0'), -('17', '5', '1', '3', '0'), - -('17', '5', '2', '0', '0'), -('17', '5', '2', '1', '0'), -('17', '5', '2', '2', '0'), -('17', '5', '2', '3', '0'), - -('17', '5', '3', '0', '0'), -('17', '5', '3', '1', '0'), -('17', '5', '3', '2', '0'), -('17', '5', '3', '3', '0'), - -('17', '5', '4', '0', '0'), -('17', '5', '4', '1', '0'), -('17', '5', '4', '2', '0'), -('17', '5', '4', '3', '0'), - -('17', '5', '5', '0', '0'), -('17', '5', '5', '1', '0'), -('17', '5', '5', '2', '0'), -('17', '5', '5', '3', '0'), - -('17', '5', '6', '0', '0'), -('17', '5', '6', '1', '0'), -('17', '5', '6', '2', '0'), -('17', '5', '6', '3', '0'), - -('17', '6', '0', '0', '0'), -('17', '6', '0', '1', '0'), -('17', '6', '0', '2', '0'), -('17', '6', '0', '3', '0'), - -('17', '6', '1', '0', '0'), -('17', '6', '1', '1', '0'), -('17', '6', '1', '2', '0'), -('17', '6', '1', '3', '0'), - -('17', '6', '2', '0', '0'), -('17', '6', '2', '1', '0'), -('17', '6', '2', '2', '0'), -('17', '6', '2', '3', '0'), - -('17', '6', '3', '0', '0'), -('17', '6', '3', '1', '0'), -('17', '6', '3', '2', '0'), -('17', '6', '3', '3', '0'), - -('17', '6', '4', '0', '0'), -('17', '6', '4', '1', '0'), -('17', '6', '4', '2', '0'), -('17', '6', '4', '3', '0'), - -('17', '6', '5', '0', '0'), -('17', '6', '5', '1', '0'), -('17', '6', '5', '2', '0'), -('17', '6', '5', '3', '0'), - -('17', '6', '6', '0', '0'), -('17', '6', '6', '1', '0'), -('17', '6', '6', '2', '0'), -('17', '6', '6', '3', '0'), - -('17', '7', '0', '0', '0'), -('17', '7', '0', '1', '0'), -('17', '7', '0', '2', '0'), -('17', '7', '0', '3', '0'), - -('17', '7', '1', '0', '0'), -('17', '7', '1', '1', '0'), -('17', '7', '1', '2', '0'), -('17', '7', '1', '3', '0'), - -('17', '7', '2', '0', '0'), -('17', '7', '2', '1', '0'), -('17', '7', '2', '2', '0'), -('17', '7', '2', '3', '0'), - -('17', '7', '3', '0', '0'), -('17', '7', '3', '1', '0'), -('17', '7', '3', '2', '0'), -('17', '7', '3', '3', '0'), - -('17', '7', '4', '0', '0'), -('17', '7', '4', '1', '0'), -('17', '7', '4', '2', '0'), -('17', '7', '4', '3', '0'), - -('17', '7', '5', '0', '0'), -('17', '7', '5', '1', '0'), -('17', '7', '5', '2', '0'), -('17', '7', '5', '3', '0'), - -('17', '7', '6', '0', '0'), -('17', '7', '6', '1', '0'), -('17', '7', '6', '2', '0'), -('17', '7', '6', '3', '0'), - -('17', '8', '0', '0', '0'), -('17', '8', '0', '1', '0'), -('17', '8', '0', '2', '0'), -('17', '8', '0', '3', '0'), - -('17', '8', '1', '0', '0'), -('17', '8', '1', '1', '0'), -('17', '8', '1', '2', '0'), -('17', '8', '1', '3', '0'), - -('17', '8', '2', '0', '0'), -('17', '8', '2', '1', '0'), -('17', '8', '2', '2', '0'), -('17', '8', '2', '3', '0'), - -('17', '8', '3', '0', '0'), -('17', '8', '3', '1', '0'), -('17', '8', '3', '2', '0'), -('17', '8', '3', '3', '0'), - -('17', '8', '4', '0', '0'), -('17', '8', '4', '1', '0'), -('17', '8', '4', '2', '0'), -('17', '8', '4', '3', '0'), - -('17', '8', '5', '0', '0'), -('17', '8', '5', '1', '0'), -('17', '8', '5', '2', '0'), -('17', '8', '5', '3', '0'), - -('17', '8', '6', '0', '0'), -('17', '8', '6', '1', '0'), -('17', '8', '6', '2', '0'), -('17', '8', '6', '3', '0'), - -('17', '9', '0', '0', '0'), -('17', '9', '0', '1', '0'), -('17', '9', '0', '2', '0'), -('17', '9', '0', '3', '0'), - -('17', '9', '1', '0', '0'), -('17', '9', '1', '1', '0'), -('17', '9', '1', '2', '0'), -('17', '9', '1', '3', '0'), - -('17', '9', '2', '0', '0'), -('17', '9', '2', '1', '0'), -('17', '9', '2', '2', '0'), -('17', '9', '2', '3', '0'), - -('17', '9', '3', '0', '0'), -('17', '9', '3', '1', '0'), -('17', '9', '3', '2', '0'), -('17', '9', '3', '3', '0'), - -('17', '9', '4', '0', '0'), -('17', '9', '4', '1', '0'), -('17', '9', '4', '2', '0'), -('17', '9', '4', '3', '0'), - -('17', '9', '5', '0', '0'), -('17', '9', '5', '1', '0'), -('17', '9', '5', '2', '0'), -('17', '9', '5', '3', '0'), - -('17', '9', '6', '0', '0'), -('17', '9', '6', '1', '0'), -('17', '9', '6', '2', '0'), -('17', '9', '6', '3', '0'), - -('17', '10', '0', '0', '0'), -('17', '10', '0', '1', '0'), -('17', '10', '0', '2', '0'), -('17', '10', '0', '3', '0'), - -('17', '10', '1', '0', '0'), -('17', '10', '1', '1', '0'), -('17', '10', '1', '2', '0'), -('17', '10', '1', '3', '0'), - -('17', '10', '2', '0', '0'), -('17', '10', '2', '1', '0'), -('17', '10', '2', '2', '0'), -('17', '10', '2', '3', '0'), - -('17', '10', '3', '0', '0'), -('17', '10', '3', '1', '0'), -('17', '10', '3', '2', '0'), -('17', '10', '3', '3', '0'), - -('17', '10', '4', '0', '0'), -('17', '10', '4', '1', '0'), -('17', '10', '4', '2', '0'), -('17', '10', '4', '3', '0'), - -('17', '10', '5', '0', '0'), -('17', '10', '5', '1', '0'), -('17', '10', '5', '2', '0'), -('17', '10', '5', '3', '0'), - -('17', '10', '6', '0', '0'), -('17', '10', '6', '1', '0'), -('17', '10', '6', '2', '0'), -('17', '10', '6', '3', '0'), - -('17', '11', '0', '0', '0'), -('17', '11', '0', '1', '0'), -('17', '11', '0', '2', '0'), -('17', '11', '0', '3', '0'), - -('17', '11', '1', '0', '0'), -('17', '11', '1', '1', '0'), -('17', '11', '1', '2', '0'), -('17', '11', '1', '3', '0'), - -('17', '11', '2', '0', '0'), -('17', '11', '2', '1', '0'), -('17', '11', '2', '2', '0'), -('17', '11', '2', '3', '0'), - -('17', '11', '3', '0', '0'), -('17', '11', '3', '1', '0'), -('17', '11', '3', '2', '0'), -('17', '11', '3', '3', '0'), - -('17', '11', '4', '0', '0'), -('17', '11', '4', '1', '0'), -('17', '11', '4', '2', '0'), -('17', '11', '4', '3', '0'), - -('17', '11', '5', '0', '0'), -('17', '11', '5', '1', '0'), -('17', '11', '5', '2', '0'), -('17', '11', '5', '3', '0'), - -('17', '11', '6', '0', '0'), -('17', '11', '6', '1', '0'), -('17', '11', '6', '2', '0'), -('17', '11', '6', '3', '0'), - -('17', '12', '0', '0', '0'), -('17', '12', '0', '1', '0'), -('17', '12', '0', '2', '0'), -('17', '12', '0', '3', '0'), - -('17', '12', '1', '0', '0'), -('17', '12', '1', '1', '0'), -('17', '12', '1', '2', '0'), -('17', '12', '1', '3', '0'), - -('17', '12', '2', '0', '0'), -('17', '12', '2', '1', '0'), -('17', '12', '2', '2', '0'), -('17', '12', '2', '3', '0'), - -('17', '12', '3', '0', '0'), -('17', '12', '3', '1', '0'), -('17', '12', '3', '2', '0'), -('17', '12', '3', '3', '0'), - -('17', '12', '4', '0', '0'), -('17', '12', '4', '1', '0'), -('17', '12', '4', '2', '0'), -('17', '12', '4', '3', '0'), - -('17', '12', '5', '0', '0'), -('17', '12', '5', '1', '0'), -('17', '12', '5', '2', '0'), -('17', '12', '5', '3', '0'), - -('17', '12', '6', '0', '0'), -('17', '12', '6', '1', '0'), -('17', '12', '6', '2', '0'), -('17', '12', '6', '3', '0'), - -('17', '13', '0', '0', '0'), -('17', '13', '0', '1', '0'), -('17', '13', '0', '2', '0'), -('17', '13', '0', '3', '0'), - -('17', '13', '1', '0', '0'), -('17', '13', '1', '1', '0'), -('17', '13', '1', '2', '0'), -('17', '13', '1', '3', '0'), - -('17', '13', '2', '0', '0'), -('17', '13', '2', '1', '0'), -('17', '13', '2', '2', '0'), -('17', '13', '2', '3', '0'), - -('17', '13', '3', '0', '0'), -('17', '13', '3', '1', '0'), -('17', '13', '3', '2', '0'), -('17', '13', '3', '3', '0'), - -('17', '13', '4', '0', '0'), -('17', '13', '4', '1', '0'), -('17', '13', '4', '2', '0'), -('17', '13', '4', '3', '0'), - -('17', '13', '5', '0', '0'), -('17', '13', '5', '1', '0'), -('17', '13', '5', '2', '0'), -('17', '13', '5', '3', '0'), - -('17', '13', '6', '0', '0'), -('17', '13', '6', '1', '0'), -('17', '13', '6', '2', '0'), -('17', '13', '6', '3', '0'), - -('17', '14', '0', '0', '0'), -('17', '14', '0', '1', '0'), -('17', '14', '0', '2', '0'), -('17', '14', '0', '3', '0'), - -('17', '14', '1', '0', '0'), -('17', '14', '1', '1', '0'), -('17', '14', '1', '2', '0'), -('17', '14', '1', '3', '0'), - -('17', '14', '2', '0', '0'), -('17', '14', '2', '1', '0'), -('17', '14', '2', '2', '0'), -('17', '14', '2', '3', '0'), - -('17', '14', '3', '0', '0'), -('17', '14', '3', '1', '0'), -('17', '14', '3', '2', '0'), -('17', '14', '3', '3', '0'), - -('17', '14', '4', '0', '0'), -('17', '14', '4', '1', '0'), -('17', '14', '4', '2', '0'), -('17', '14', '4', '3', '0'), - -('17', '14', '5', '0', '0'), -('17', '14', '5', '1', '0'), -('17', '14', '5', '2', '0'), -('17', '14', '5', '3', '0'), - -('17', '14', '6', '0', '0'), -('17', '14', '6', '1', '0'), -('17', '14', '6', '2', '0'), -('17', '14', '6', '3', '0'), - -('17', '15', '0', '0', '0'), -('17', '15', '0', '1', '0'), -('17', '15', '0', '2', '0'), -('17', '15', '0', '3', '0'), - -('17', '15', '1', '0', '0'), -('17', '15', '1', '1', '0'), -('17', '15', '1', '2', '0'), -('17', '15', '1', '3', '0'), - -('17', '15', '2', '0', '0'), -('17', '15', '2', '1', '0'), -('17', '15', '2', '2', '0'), -('17', '15', '2', '3', '0'), - -('17', '15', '3', '0', '0'), -('17', '15', '3', '1', '0'), -('17', '15', '3', '2', '0'), -('17', '15', '3', '3', '0'), - -('17', '15', '4', '0', '0'), -('17', '15', '4', '1', '0'), -('17', '15', '4', '2', '0'), -('17', '15', '4', '3', '0'), - -('17', '15', '5', '0', '0'), -('17', '15', '5', '1', '0'), -('17', '15', '5', '2', '0'), -('17', '15', '5', '3', '0'), - -('17', '15', '6', '0', '0'), -('17', '15', '6', '1', '0'), -('17', '15', '6', '2', '0'), -('17', '15', '6', '3', '0'), - --- SpellType_InCombatBuffSongIndex - -('18', '0', '0', '0', '0'), -('18', '0', '0', '1', '0'), -('18', '0', '0', '2', '0'), -('18', '0', '0', '3', '0'), - -('18', '0', '1', '0', '0'), -('18', '0', '1', '1', '0'), -('18', '0', '1', '2', '0'), -('18', '0', '1', '3', '0'), - -('18', '0', '2', '0', '0'), -('18', '0', '2', '1', '0'), -('18', '0', '2', '2', '0'), -('18', '0', '2', '3', '0'), - -('18', '0', '3', '0', '0'), -('18', '0', '3', '1', '0'), -('18', '0', '3', '2', '0'), -('18', '0', '3', '3', '0'), - -('18', '0', '4', '0', '0'), -('18', '0', '4', '1', '0'), -('18', '0', '4', '2', '0'), -('18', '0', '4', '3', '0'), - -('18', '0', '5', '0', '0'), -('18', '0', '5', '1', '0'), -('18', '0', '5', '2', '0'), -('18', '0', '5', '3', '0'), - -('18', '0', '6', '0', '0'), -('18', '0', '6', '1', '0'), -('18', '0', '6', '2', '0'), -('18', '0', '6', '3', '0'), - -('18', '1', '0', '0', '0'), -('18', '1', '0', '1', '0'), -('18', '1', '0', '2', '0'), -('18', '1', '0', '3', '0'), - -('18', '1', '1', '0', '0'), -('18', '1', '1', '1', '0'), -('18', '1', '1', '2', '0'), -('18', '1', '1', '3', '0'), - -('18', '1', '2', '0', '0'), -('18', '1', '2', '1', '0'), -('18', '1', '2', '2', '0'), -('18', '1', '2', '3', '0'), - -('18', '1', '3', '0', '0'), -('18', '1', '3', '1', '0'), -('18', '1', '3', '2', '0'), -('18', '1', '3', '3', '0'), - -('18', '1', '4', '0', '0'), -('18', '1', '4', '1', '0'), -('18', '1', '4', '2', '0'), -('18', '1', '4', '3', '0'), - -('18', '1', '5', '0', '0'), -('18', '1', '5', '1', '0'), -('18', '1', '5', '2', '0'), -('18', '1', '5', '3', '0'), - -('18', '1', '6', '0', '0'), -('18', '1', '6', '1', '0'), -('18', '1', '6', '2', '0'), -('18', '1', '6', '3', '0'), - -('18', '2', '0', '0', '0'), -('18', '2', '0', '1', '0'), -('18', '2', '0', '2', '0'), -('18', '2', '0', '3', '0'), - -('18', '2', '1', '0', '0'), -('18', '2', '1', '1', '0'), -('18', '2', '1', '2', '0'), -('18', '2', '1', '3', '0'), - -('18', '2', '2', '0', '0'), -('18', '2', '2', '1', '0'), -('18', '2', '2', '2', '0'), -('18', '2', '2', '3', '0'), - -('18', '2', '3', '0', '0'), -('18', '2', '3', '1', '0'), -('18', '2', '3', '2', '0'), -('18', '2', '3', '3', '0'), - -('18', '2', '4', '0', '0'), -('18', '2', '4', '1', '0'), -('18', '2', '4', '2', '0'), -('18', '2', '4', '3', '0'), - -('18', '2', '5', '0', '0'), -('18', '2', '5', '1', '0'), -('18', '2', '5', '2', '0'), -('18', '2', '5', '3', '0'), - -('18', '2', '6', '0', '0'), -('18', '2', '6', '1', '0'), -('18', '2', '6', '2', '0'), -('18', '2', '6', '3', '0'), - -('18', '3', '0', '0', '0'), -('18', '3', '0', '1', '0'), -('18', '3', '0', '2', '0'), -('18', '3', '0', '3', '0'), - -('18', '3', '1', '0', '0'), -('18', '3', '1', '1', '0'), -('18', '3', '1', '2', '0'), -('18', '3', '1', '3', '0'), - -('18', '3', '2', '0', '0'), -('18', '3', '2', '1', '0'), -('18', '3', '2', '2', '0'), -('18', '3', '2', '3', '0'), - -('18', '3', '3', '0', '0'), -('18', '3', '3', '1', '0'), -('18', '3', '3', '2', '0'), -('18', '3', '3', '3', '0'), - -('18', '3', '4', '0', '0'), -('18', '3', '4', '1', '0'), -('18', '3', '4', '2', '0'), -('18', '3', '4', '3', '0'), - -('18', '3', '5', '0', '0'), -('18', '3', '5', '1', '0'), -('18', '3', '5', '2', '0'), -('18', '3', '5', '3', '0'), - -('18', '3', '6', '0', '0'), -('18', '3', '6', '1', '0'), -('18', '3', '6', '2', '0'), -('18', '3', '6', '3', '0'), - -('18', '4', '0', '0', '0'), -('18', '4', '0', '1', '0'), -('18', '4', '0', '2', '0'), -('18', '4', '0', '3', '0'), - -('18', '4', '1', '0', '0'), -('18', '4', '1', '1', '0'), -('18', '4', '1', '2', '0'), -('18', '4', '1', '3', '0'), - -('18', '4', '2', '0', '0'), -('18', '4', '2', '1', '0'), -('18', '4', '2', '2', '0'), -('18', '4', '2', '3', '0'), - -('18', '4', '3', '0', '0'), -('18', '4', '3', '1', '0'), -('18', '4', '3', '2', '0'), -('18', '4', '3', '3', '0'), - -('18', '4', '4', '0', '0'), -('18', '4', '4', '1', '0'), -('18', '4', '4', '2', '0'), -('18', '4', '4', '3', '0'), - -('18', '4', '5', '0', '0'), -('18', '4', '5', '1', '0'), -('18', '4', '5', '2', '0'), -('18', '4', '5', '3', '0'), - -('18', '4', '6', '0', '0'), -('18', '4', '6', '1', '0'), -('18', '4', '6', '2', '0'), -('18', '4', '6', '3', '0'), - -('18', '5', '0', '0', '0'), -('18', '5', '0', '1', '0'), -('18', '5', '0', '2', '0'), -('18', '5', '0', '3', '0'), - -('18', '5', '1', '0', '0'), -('18', '5', '1', '1', '0'), -('18', '5', '1', '2', '0'), -('18', '5', '1', '3', '0'), - -('18', '5', '2', '0', '0'), -('18', '5', '2', '1', '0'), -('18', '5', '2', '2', '0'), -('18', '5', '2', '3', '0'), - -('18', '5', '3', '0', '0'), -('18', '5', '3', '1', '0'), -('18', '5', '3', '2', '0'), -('18', '5', '3', '3', '0'), - -('18', '5', '4', '0', '0'), -('18', '5', '4', '1', '0'), -('18', '5', '4', '2', '0'), -('18', '5', '4', '3', '0'), - -('18', '5', '5', '0', '0'), -('18', '5', '5', '1', '0'), -('18', '5', '5', '2', '0'), -('18', '5', '5', '3', '0'), - -('18', '5', '6', '0', '0'), -('18', '5', '6', '1', '0'), -('18', '5', '6', '2', '0'), -('18', '5', '6', '3', '0'), - -('18', '6', '0', '0', '0'), -('18', '6', '0', '1', '0'), -('18', '6', '0', '2', '0'), -('18', '6', '0', '3', '0'), - -('18', '6', '1', '0', '0'), -('18', '6', '1', '1', '0'), -('18', '6', '1', '2', '0'), -('18', '6', '1', '3', '0'), - -('18', '6', '2', '0', '0'), -('18', '6', '2', '1', '0'), -('18', '6', '2', '2', '0'), -('18', '6', '2', '3', '0'), - -('18', '6', '3', '0', '0'), -('18', '6', '3', '1', '0'), -('18', '6', '3', '2', '0'), -('18', '6', '3', '3', '0'), - -('18', '6', '4', '0', '0'), -('18', '6', '4', '1', '0'), -('18', '6', '4', '2', '0'), -('18', '6', '4', '3', '0'), - -('18', '6', '5', '0', '0'), -('18', '6', '5', '1', '0'), -('18', '6', '5', '2', '0'), -('18', '6', '5', '3', '0'), - -('18', '6', '6', '0', '0'), -('18', '6', '6', '1', '0'), -('18', '6', '6', '2', '0'), -('18', '6', '6', '3', '0'), - -('18', '7', '0', '0', '0'), -('18', '7', '0', '1', '0'), -('18', '7', '0', '2', '0'), -('18', '7', '0', '3', '0'), - -('18', '7', '1', '0', '100'), -('18', '7', '1', '1', '100'), -('18', '7', '1', '2', '100'), -('18', '7', '1', '3', '100'), - -('18', '7', '2', '0', '75'), -('18', '7', '2', '1', '75'), -('18', '7', '2', '2', '75'), -('18', '7', '2', '3', '75'), - -('18', '7', '3', '0', '75'), -('18', '7', '3', '1', '75'), -('18', '7', '3', '2', '75'), -('18', '7', '3', '3', '75'), - -('18', '7', '4', '0', '100'), -('18', '7', '4', '1', '100'), -('18', '7', '4', '2', '100'), -('18', '7', '4', '3', '100'), - -('18', '7', '5', '0', '100'), -('18', '7', '5', '1', '100'), -('18', '7', '5', '2', '100'), -('18', '7', '5', '3', '100'), - -('18', '7', '6', '0', '100'), -('18', '7', '6', '1', '100'), -('18', '7', '6', '2', '100'), -('18', '7', '6', '3', '100'), - -('18', '8', '0', '0', '0'), -('18', '8', '0', '1', '0'), -('18', '8', '0', '2', '0'), -('18', '8', '0', '3', '0'), - -('18', '8', '1', '0', '0'), -('18', '8', '1', '1', '0'), -('18', '8', '1', '2', '0'), -('18', '8', '1', '3', '0'), - -('18', '8', '2', '0', '0'), -('18', '8', '2', '1', '0'), -('18', '8', '2', '2', '0'), -('18', '8', '2', '3', '0'), - -('18', '8', '3', '0', '0'), -('18', '8', '3', '1', '0'), -('18', '8', '3', '2', '0'), -('18', '8', '3', '3', '0'), - -('18', '8', '4', '0', '0'), -('18', '8', '4', '1', '0'), -('18', '8', '4', '2', '0'), -('18', '8', '4', '3', '0'), - -('18', '8', '5', '0', '0'), -('18', '8', '5', '1', '0'), -('18', '8', '5', '2', '0'), -('18', '8', '5', '3', '0'), - -('18', '8', '6', '0', '0'), -('18', '8', '6', '1', '0'), -('18', '8', '6', '2', '0'), -('18', '8', '6', '3', '0'), - -('18', '9', '0', '0', '0'), -('18', '9', '0', '1', '0'), -('18', '9', '0', '2', '0'), -('18', '9', '0', '3', '0'), - -('18', '9', '1', '0', '0'), -('18', '9', '1', '1', '0'), -('18', '9', '1', '2', '0'), -('18', '9', '1', '3', '0'), - -('18', '9', '2', '0', '0'), -('18', '9', '2', '1', '0'), -('18', '9', '2', '2', '0'), -('18', '9', '2', '3', '0'), - -('18', '9', '3', '0', '0'), -('18', '9', '3', '1', '0'), -('18', '9', '3', '2', '0'), -('18', '9', '3', '3', '0'), - -('18', '9', '4', '0', '0'), -('18', '9', '4', '1', '0'), -('18', '9', '4', '2', '0'), -('18', '9', '4', '3', '0'), - -('18', '9', '5', '0', '0'), -('18', '9', '5', '1', '0'), -('18', '9', '5', '2', '0'), -('18', '9', '5', '3', '0'), - -('18', '9', '6', '0', '0'), -('18', '9', '6', '1', '0'), -('18', '9', '6', '2', '0'), -('18', '9', '6', '3', '0'), - -('18', '10', '0', '0', '0'), -('18', '10', '0', '1', '0'), -('18', '10', '0', '2', '0'), -('18', '10', '0', '3', '0'), - -('18', '10', '1', '0', '0'), -('18', '10', '1', '1', '0'), -('18', '10', '1', '2', '0'), -('18', '10', '1', '3', '0'), - -('18', '10', '2', '0', '0'), -('18', '10', '2', '1', '0'), -('18', '10', '2', '2', '0'), -('18', '10', '2', '3', '0'), - -('18', '10', '3', '0', '0'), -('18', '10', '3', '1', '0'), -('18', '10', '3', '2', '0'), -('18', '10', '3', '3', '0'), - -('18', '10', '4', '0', '0'), -('18', '10', '4', '1', '0'), -('18', '10', '4', '2', '0'), -('18', '10', '4', '3', '0'), - -('18', '10', '5', '0', '0'), -('18', '10', '5', '1', '0'), -('18', '10', '5', '2', '0'), -('18', '10', '5', '3', '0'), - -('18', '10', '6', '0', '0'), -('18', '10', '6', '1', '0'), -('18', '10', '6', '2', '0'), -('18', '10', '6', '3', '0'), - -('18', '11', '0', '0', '0'), -('18', '11', '0', '1', '0'), -('18', '11', '0', '2', '0'), -('18', '11', '0', '3', '0'), - -('18', '11', '1', '0', '0'), -('18', '11', '1', '1', '0'), -('18', '11', '1', '2', '0'), -('18', '11', '1', '3', '0'), - -('18', '11', '2', '0', '0'), -('18', '11', '2', '1', '0'), -('18', '11', '2', '2', '0'), -('18', '11', '2', '3', '0'), - -('18', '11', '3', '0', '0'), -('18', '11', '3', '1', '0'), -('18', '11', '3', '2', '0'), -('18', '11', '3', '3', '0'), - -('18', '11', '4', '0', '0'), -('18', '11', '4', '1', '0'), -('18', '11', '4', '2', '0'), -('18', '11', '4', '3', '0'), - -('18', '11', '5', '0', '0'), -('18', '11', '5', '1', '0'), -('18', '11', '5', '2', '0'), -('18', '11', '5', '3', '0'), - -('18', '11', '6', '0', '0'), -('18', '11', '6', '1', '0'), -('18', '11', '6', '2', '0'), -('18', '11', '6', '3', '0'), - -('18', '12', '0', '0', '0'), -('18', '12', '0', '1', '0'), -('18', '12', '0', '2', '0'), -('18', '12', '0', '3', '0'), - -('18', '12', '1', '0', '0'), -('18', '12', '1', '1', '0'), -('18', '12', '1', '2', '0'), -('18', '12', '1', '3', '0'), - -('18', '12', '2', '0', '0'), -('18', '12', '2', '1', '0'), -('18', '12', '2', '2', '0'), -('18', '12', '2', '3', '0'), - -('18', '12', '3', '0', '0'), -('18', '12', '3', '1', '0'), -('18', '12', '3', '2', '0'), -('18', '12', '3', '3', '0'), - -('18', '12', '4', '0', '0'), -('18', '12', '4', '1', '0'), -('18', '12', '4', '2', '0'), -('18', '12', '4', '3', '0'), - -('18', '12', '5', '0', '0'), -('18', '12', '5', '1', '0'), -('18', '12', '5', '2', '0'), -('18', '12', '5', '3', '0'), - -('18', '12', '6', '0', '0'), -('18', '12', '6', '1', '0'), -('18', '12', '6', '2', '0'), -('18', '12', '6', '3', '0'), - -('18', '13', '0', '0', '0'), -('18', '13', '0', '1', '0'), -('18', '13', '0', '2', '0'), -('18', '13', '0', '3', '0'), - -('18', '13', '1', '0', '0'), -('18', '13', '1', '1', '0'), -('18', '13', '1', '2', '0'), -('18', '13', '1', '3', '0'), - -('18', '13', '2', '0', '0'), -('18', '13', '2', '1', '0'), -('18', '13', '2', '2', '0'), -('18', '13', '2', '3', '0'), - -('18', '13', '3', '0', '0'), -('18', '13', '3', '1', '0'), -('18', '13', '3', '2', '0'), -('18', '13', '3', '3', '0'), - -('18', '13', '4', '0', '0'), -('18', '13', '4', '1', '0'), -('18', '13', '4', '2', '0'), -('18', '13', '4', '3', '0'), - -('18', '13', '5', '0', '0'), -('18', '13', '5', '1', '0'), -('18', '13', '5', '2', '0'), -('18', '13', '5', '3', '0'), - -('18', '13', '6', '0', '0'), -('18', '13', '6', '1', '0'), -('18', '13', '6', '2', '0'), -('18', '13', '6', '3', '0'), - -('18', '14', '0', '0', '0'), -('18', '14', '0', '1', '0'), -('18', '14', '0', '2', '0'), -('18', '14', '0', '3', '0'), - -('18', '14', '1', '0', '0'), -('18', '14', '1', '1', '0'), -('18', '14', '1', '2', '0'), -('18', '14', '1', '3', '0'), - -('18', '14', '2', '0', '0'), -('18', '14', '2', '1', '0'), -('18', '14', '2', '2', '0'), -('18', '14', '2', '3', '0'), - -('18', '14', '3', '0', '0'), -('18', '14', '3', '1', '0'), -('18', '14', '3', '2', '0'), -('18', '14', '3', '3', '0'), - -('18', '14', '4', '0', '0'), -('18', '14', '4', '1', '0'), -('18', '14', '4', '2', '0'), -('18', '14', '4', '3', '0'), - -('18', '14', '5', '0', '0'), -('18', '14', '5', '1', '0'), -('18', '14', '5', '2', '0'), -('18', '14', '5', '3', '0'), - -('18', '14', '6', '0', '0'), -('18', '14', '6', '1', '0'), -('18', '14', '6', '2', '0'), -('18', '14', '6', '3', '0'), - -('18', '15', '0', '0', '0'), -('18', '15', '0', '1', '0'), -('18', '15', '0', '2', '0'), -('18', '15', '0', '3', '0'), - -('18', '15', '1', '0', '0'), -('18', '15', '1', '1', '0'), -('18', '15', '1', '2', '0'), -('18', '15', '1', '3', '0'), - -('18', '15', '2', '0', '0'), -('18', '15', '2', '1', '0'), -('18', '15', '2', '2', '0'), -('18', '15', '2', '3', '0'), - -('18', '15', '3', '0', '0'), -('18', '15', '3', '1', '0'), -('18', '15', '3', '2', '0'), -('18', '15', '3', '3', '0'), - -('18', '15', '4', '0', '0'), -('18', '15', '4', '1', '0'), -('18', '15', '4', '2', '0'), -('18', '15', '4', '3', '0'), - -('18', '15', '5', '0', '0'), -('18', '15', '5', '1', '0'), -('18', '15', '5', '2', '0'), -('18', '15', '5', '3', '0'), - -('18', '15', '6', '0', '0'), -('18', '15', '6', '1', '0'), -('18', '15', '6', '2', '0'), -('18', '15', '6', '3', '0'), - --- SpellType_OutOfCombatBuffSongIndex - -('19', '0', '0', '0', '0'), -('19', '0', '0', '1', '0'), -('19', '0', '0', '2', '0'), -('19', '0', '0', '3', '0'), - -('19', '0', '1', '0', '0'), -('19', '0', '1', '1', '0'), -('19', '0', '1', '2', '0'), -('19', '0', '1', '3', '0'), - -('19', '0', '2', '0', '0'), -('19', '0', '2', '1', '0'), -('19', '0', '2', '2', '0'), -('19', '0', '2', '3', '0'), - -('19', '0', '3', '0', '0'), -('19', '0', '3', '1', '0'), -('19', '0', '3', '2', '0'), -('19', '0', '3', '3', '0'), - -('19', '0', '4', '0', '0'), -('19', '0', '4', '1', '0'), -('19', '0', '4', '2', '0'), -('19', '0', '4', '3', '0'), - -('19', '0', '5', '0', '0'), -('19', '0', '5', '1', '0'), -('19', '0', '5', '2', '0'), -('19', '0', '5', '3', '0'), - -('19', '0', '6', '0', '0'), -('19', '0', '6', '1', '0'), -('19', '0', '6', '2', '0'), -('19', '0', '6', '3', '0'), - -('19', '1', '0', '0', '0'), -('19', '1', '0', '1', '0'), -('19', '1', '0', '2', '0'), -('19', '1', '0', '3', '0'), - -('19', '1', '1', '0', '0'), -('19', '1', '1', '1', '0'), -('19', '1', '1', '2', '0'), -('19', '1', '1', '3', '0'), - -('19', '1', '2', '0', '0'), -('19', '1', '2', '1', '0'), -('19', '1', '2', '2', '0'), -('19', '1', '2', '3', '0'), - -('19', '1', '3', '0', '0'), -('19', '1', '3', '1', '0'), -('19', '1', '3', '2', '0'), -('19', '1', '3', '3', '0'), - -('19', '1', '4', '0', '0'), -('19', '1', '4', '1', '0'), -('19', '1', '4', '2', '0'), -('19', '1', '4', '3', '0'), - -('19', '1', '5', '0', '0'), -('19', '1', '5', '1', '0'), -('19', '1', '5', '2', '0'), -('19', '1', '5', '3', '0'), - -('19', '1', '6', '0', '0'), -('19', '1', '6', '1', '0'), -('19', '1', '6', '2', '0'), -('19', '1', '6', '3', '0'), - -('19', '2', '0', '0', '0'), -('19', '2', '0', '1', '0'), -('19', '2', '0', '2', '0'), -('19', '2', '0', '3', '0'), - -('19', '2', '1', '0', '0'), -('19', '2', '1', '1', '0'), -('19', '2', '1', '2', '0'), -('19', '2', '1', '3', '0'), - -('19', '2', '2', '0', '0'), -('19', '2', '2', '1', '0'), -('19', '2', '2', '2', '0'), -('19', '2', '2', '3', '0'), - -('19', '2', '3', '0', '0'), -('19', '2', '3', '1', '0'), -('19', '2', '3', '2', '0'), -('19', '2', '3', '3', '0'), - -('19', '2', '4', '0', '0'), -('19', '2', '4', '1', '0'), -('19', '2', '4', '2', '0'), -('19', '2', '4', '3', '0'), - -('19', '2', '5', '0', '0'), -('19', '2', '5', '1', '0'), -('19', '2', '5', '2', '0'), -('19', '2', '5', '3', '0'), - -('19', '2', '6', '0', '0'), -('19', '2', '6', '1', '0'), -('19', '2', '6', '2', '0'), -('19', '2', '6', '3', '0'), - -('19', '3', '0', '0', '0'), -('19', '3', '0', '1', '0'), -('19', '3', '0', '2', '0'), -('19', '3', '0', '3', '0'), - -('19', '3', '1', '0', '0'), -('19', '3', '1', '1', '0'), -('19', '3', '1', '2', '0'), -('19', '3', '1', '3', '0'), - -('19', '3', '2', '0', '0'), -('19', '3', '2', '1', '0'), -('19', '3', '2', '2', '0'), -('19', '3', '2', '3', '0'), - -('19', '3', '3', '0', '0'), -('19', '3', '3', '1', '0'), -('19', '3', '3', '2', '0'), -('19', '3', '3', '3', '0'), - -('19', '3', '4', '0', '0'), -('19', '3', '4', '1', '0'), -('19', '3', '4', '2', '0'), -('19', '3', '4', '3', '0'), - -('19', '3', '5', '0', '0'), -('19', '3', '5', '1', '0'), -('19', '3', '5', '2', '0'), -('19', '3', '5', '3', '0'), - -('19', '3', '6', '0', '0'), -('19', '3', '6', '1', '0'), -('19', '3', '6', '2', '0'), -('19', '3', '6', '3', '0'), - -('19', '4', '0', '0', '0'), -('19', '4', '0', '1', '0'), -('19', '4', '0', '2', '0'), -('19', '4', '0', '3', '0'), - -('19', '4', '1', '0', '0'), -('19', '4', '1', '1', '0'), -('19', '4', '1', '2', '0'), -('19', '4', '1', '3', '0'), - -('19', '4', '2', '0', '0'), -('19', '4', '2', '1', '0'), -('19', '4', '2', '2', '0'), -('19', '4', '2', '3', '0'), - -('19', '4', '3', '0', '0'), -('19', '4', '3', '1', '0'), -('19', '4', '3', '2', '0'), -('19', '4', '3', '3', '0'), - -('19', '4', '4', '0', '0'), -('19', '4', '4', '1', '0'), -('19', '4', '4', '2', '0'), -('19', '4', '4', '3', '0'), - -('19', '4', '5', '0', '0'), -('19', '4', '5', '1', '0'), -('19', '4', '5', '2', '0'), -('19', '4', '5', '3', '0'), - -('19', '4', '6', '0', '0'), -('19', '4', '6', '1', '0'), -('19', '4', '6', '2', '0'), -('19', '4', '6', '3', '0'), - -('19', '5', '0', '0', '0'), -('19', '5', '0', '1', '0'), -('19', '5', '0', '2', '0'), -('19', '5', '0', '3', '0'), - -('19', '5', '1', '0', '0'), -('19', '5', '1', '1', '0'), -('19', '5', '1', '2', '0'), -('19', '5', '1', '3', '0'), - -('19', '5', '2', '0', '0'), -('19', '5', '2', '1', '0'), -('19', '5', '2', '2', '0'), -('19', '5', '2', '3', '0'), - -('19', '5', '3', '0', '0'), -('19', '5', '3', '1', '0'), -('19', '5', '3', '2', '0'), -('19', '5', '3', '3', '0'), - -('19', '5', '4', '0', '0'), -('19', '5', '4', '1', '0'), -('19', '5', '4', '2', '0'), -('19', '5', '4', '3', '0'), - -('19', '5', '5', '0', '0'), -('19', '5', '5', '1', '0'), -('19', '5', '5', '2', '0'), -('19', '5', '5', '3', '0'), - -('19', '5', '6', '0', '0'), -('19', '5', '6', '1', '0'), -('19', '5', '6', '2', '0'), -('19', '5', '6', '3', '0'), - -('19', '6', '0', '0', '0'), -('19', '6', '0', '1', '0'), -('19', '6', '0', '2', '0'), -('19', '6', '0', '3', '0'), - -('19', '6', '1', '0', '0'), -('19', '6', '1', '1', '0'), -('19', '6', '1', '2', '0'), -('19', '6', '1', '3', '0'), - -('19', '6', '2', '0', '0'), -('19', '6', '2', '1', '0'), -('19', '6', '2', '2', '0'), -('19', '6', '2', '3', '0'), - -('19', '6', '3', '0', '0'), -('19', '6', '3', '1', '0'), -('19', '6', '3', '2', '0'), -('19', '6', '3', '3', '0'), - -('19', '6', '4', '0', '0'), -('19', '6', '4', '1', '0'), -('19', '6', '4', '2', '0'), -('19', '6', '4', '3', '0'), - -('19', '6', '5', '0', '0'), -('19', '6', '5', '1', '0'), -('19', '6', '5', '2', '0'), -('19', '6', '5', '3', '0'), - -('19', '6', '6', '0', '0'), -('19', '6', '6', '1', '0'), -('19', '6', '6', '2', '0'), -('19', '6', '6', '3', '0'), - -('19', '7', '0', '0', '0'), -('19', '7', '0', '1', '0'), -('19', '7', '0', '2', '0'), -('19', '7', '0', '3', '0'), - -('19', '7', '1', '0', '75'), -('19', '7', '1', '1', '75'), -('19', '7', '1', '2', '75'), -('19', '7', '1', '3', '75'), - -('19', '7', '2', '0', '50'), -('19', '7', '2', '1', '50'), -('19', '7', '2', '2', '50'), -('19', '7', '2', '3', '50'), - -('19', '7', '3', '0', '75'), -('19', '7', '3', '1', '75'), -('19', '7', '3', '2', '75'), -('19', '7', '3', '3', '75'), - -('19', '7', '4', '0', '100'), -('19', '7', '4', '1', '100'), -('19', '7', '4', '2', '100'), -('19', '7', '4', '3', '100'), - -('19', '7', '5', '0', '100'), -('19', '7', '5', '1', '100'), -('19', '7', '5', '2', '100'), -('19', '7', '5', '3', '100'), - -('19', '7', '6', '0', '100'), -('19', '7', '6', '1', '100'), -('19', '7', '6', '2', '100'), -('19', '7', '6', '3', '100'), - -('19', '8', '0', '0', '0'), -('19', '8', '0', '1', '0'), -('19', '8', '0', '2', '0'), -('19', '8', '0', '3', '0'), - -('19', '8', '1', '0', '0'), -('19', '8', '1', '1', '0'), -('19', '8', '1', '2', '0'), -('19', '8', '1', '3', '0'), - -('19', '8', '2', '0', '0'), -('19', '8', '2', '1', '0'), -('19', '8', '2', '2', '0'), -('19', '8', '2', '3', '0'), - -('19', '8', '3', '0', '0'), -('19', '8', '3', '1', '0'), -('19', '8', '3', '2', '0'), -('19', '8', '3', '3', '0'), - -('19', '8', '4', '0', '0'), -('19', '8', '4', '1', '0'), -('19', '8', '4', '2', '0'), -('19', '8', '4', '3', '0'), - -('19', '8', '5', '0', '0'), -('19', '8', '5', '1', '0'), -('19', '8', '5', '2', '0'), -('19', '8', '5', '3', '0'), - -('19', '8', '6', '0', '0'), -('19', '8', '6', '1', '0'), -('19', '8', '6', '2', '0'), -('19', '8', '6', '3', '0'), - -('19', '9', '0', '0', '0'), -('19', '9', '0', '1', '0'), -('19', '9', '0', '2', '0'), -('19', '9', '0', '3', '0'), - -('19', '9', '1', '0', '0'), -('19', '9', '1', '1', '0'), -('19', '9', '1', '2', '0'), -('19', '9', '1', '3', '0'), - -('19', '9', '2', '0', '0'), -('19', '9', '2', '1', '0'), -('19', '9', '2', '2', '0'), -('19', '9', '2', '3', '0'), - -('19', '9', '3', '0', '0'), -('19', '9', '3', '1', '0'), -('19', '9', '3', '2', '0'), -('19', '9', '3', '3', '0'), - -('19', '9', '4', '0', '0'), -('19', '9', '4', '1', '0'), -('19', '9', '4', '2', '0'), -('19', '9', '4', '3', '0'), - -('19', '9', '5', '0', '0'), -('19', '9', '5', '1', '0'), -('19', '9', '5', '2', '0'), -('19', '9', '5', '3', '0'), - -('19', '9', '6', '0', '0'), -('19', '9', '6', '1', '0'), -('19', '9', '6', '2', '0'), -('19', '9', '6', '3', '0'), - -('19', '10', '0', '0', '0'), -('19', '10', '0', '1', '0'), -('19', '10', '0', '2', '0'), -('19', '10', '0', '3', '0'), - -('19', '10', '1', '0', '0'), -('19', '10', '1', '1', '0'), -('19', '10', '1', '2', '0'), -('19', '10', '1', '3', '0'), - -('19', '10', '2', '0', '0'), -('19', '10', '2', '1', '0'), -('19', '10', '2', '2', '0'), -('19', '10', '2', '3', '0'), - -('19', '10', '3', '0', '0'), -('19', '10', '3', '1', '0'), -('19', '10', '3', '2', '0'), -('19', '10', '3', '3', '0'), - -('19', '10', '4', '0', '0'), -('19', '10', '4', '1', '0'), -('19', '10', '4', '2', '0'), -('19', '10', '4', '3', '0'), - -('19', '10', '5', '0', '0'), -('19', '10', '5', '1', '0'), -('19', '10', '5', '2', '0'), -('19', '10', '5', '3', '0'), - -('19', '10', '6', '0', '0'), -('19', '10', '6', '1', '0'), -('19', '10', '6', '2', '0'), -('19', '10', '6', '3', '0'), - -('19', '11', '0', '0', '0'), -('19', '11', '0', '1', '0'), -('19', '11', '0', '2', '0'), -('19', '11', '0', '3', '0'), - -('19', '11', '1', '0', '0'), -('19', '11', '1', '1', '0'), -('19', '11', '1', '2', '0'), -('19', '11', '1', '3', '0'), - -('19', '11', '2', '0', '0'), -('19', '11', '2', '1', '0'), -('19', '11', '2', '2', '0'), -('19', '11', '2', '3', '0'), - -('19', '11', '3', '0', '0'), -('19', '11', '3', '1', '0'), -('19', '11', '3', '2', '0'), -('19', '11', '3', '3', '0'), - -('19', '11', '4', '0', '0'), -('19', '11', '4', '1', '0'), -('19', '11', '4', '2', '0'), -('19', '11', '4', '3', '0'), - -('19', '11', '5', '0', '0'), -('19', '11', '5', '1', '0'), -('19', '11', '5', '2', '0'), -('19', '11', '5', '3', '0'), - -('19', '11', '6', '0', '0'), -('19', '11', '6', '1', '0'), -('19', '11', '6', '2', '0'), -('19', '11', '6', '3', '0'), - -('19', '12', '0', '0', '0'), -('19', '12', '0', '1', '0'), -('19', '12', '0', '2', '0'), -('19', '12', '0', '3', '0'), - -('19', '12', '1', '0', '0'), -('19', '12', '1', '1', '0'), -('19', '12', '1', '2', '0'), -('19', '12', '1', '3', '0'), - -('19', '12', '2', '0', '0'), -('19', '12', '2', '1', '0'), -('19', '12', '2', '2', '0'), -('19', '12', '2', '3', '0'), - -('19', '12', '3', '0', '0'), -('19', '12', '3', '1', '0'), -('19', '12', '3', '2', '0'), -('19', '12', '3', '3', '0'), - -('19', '12', '4', '0', '0'), -('19', '12', '4', '1', '0'), -('19', '12', '4', '2', '0'), -('19', '12', '4', '3', '0'), - -('19', '12', '5', '0', '0'), -('19', '12', '5', '1', '0'), -('19', '12', '5', '2', '0'), -('19', '12', '5', '3', '0'), - -('19', '12', '6', '0', '0'), -('19', '12', '6', '1', '0'), -('19', '12', '6', '2', '0'), -('19', '12', '6', '3', '0'), - -('19', '13', '0', '0', '0'), -('19', '13', '0', '1', '0'), -('19', '13', '0', '2', '0'), -('19', '13', '0', '3', '0'), - -('19', '13', '1', '0', '0'), -('19', '13', '1', '1', '0'), -('19', '13', '1', '2', '0'), -('19', '13', '1', '3', '0'), - -('19', '13', '2', '0', '0'), -('19', '13', '2', '1', '0'), -('19', '13', '2', '2', '0'), -('19', '13', '2', '3', '0'), - -('19', '13', '3', '0', '0'), -('19', '13', '3', '1', '0'), -('19', '13', '3', '2', '0'), -('19', '13', '3', '3', '0'), - -('19', '13', '4', '0', '0'), -('19', '13', '4', '1', '0'), -('19', '13', '4', '2', '0'), -('19', '13', '4', '3', '0'), - -('19', '13', '5', '0', '0'), -('19', '13', '5', '1', '0'), -('19', '13', '5', '2', '0'), -('19', '13', '5', '3', '0'), - -('19', '13', '6', '0', '0'), -('19', '13', '6', '1', '0'), -('19', '13', '6', '2', '0'), -('19', '13', '6', '3', '0'), - -('19', '14', '0', '0', '0'), -('19', '14', '0', '1', '0'), -('19', '14', '0', '2', '0'), -('19', '14', '0', '3', '0'), - -('19', '14', '1', '0', '0'), -('19', '14', '1', '1', '0'), -('19', '14', '1', '2', '0'), -('19', '14', '1', '3', '0'), - -('19', '14', '2', '0', '0'), -('19', '14', '2', '1', '0'), -('19', '14', '2', '2', '0'), -('19', '14', '2', '3', '0'), - -('19', '14', '3', '0', '0'), -('19', '14', '3', '1', '0'), -('19', '14', '3', '2', '0'), -('19', '14', '3', '3', '0'), - -('19', '14', '4', '0', '0'), -('19', '14', '4', '1', '0'), -('19', '14', '4', '2', '0'), -('19', '14', '4', '3', '0'), - -('19', '14', '5', '0', '0'), -('19', '14', '5', '1', '0'), -('19', '14', '5', '2', '0'), -('19', '14', '5', '3', '0'), - -('19', '14', '6', '0', '0'), -('19', '14', '6', '1', '0'), -('19', '14', '6', '2', '0'), -('19', '14', '6', '3', '0'), - -('19', '15', '0', '0', '0'), -('19', '15', '0', '1', '0'), -('19', '15', '0', '2', '0'), -('19', '15', '0', '3', '0'), - -('19', '15', '1', '0', '0'), -('19', '15', '1', '1', '0'), -('19', '15', '1', '2', '0'), -('19', '15', '1', '3', '0'), - -('19', '15', '2', '0', '0'), -('19', '15', '2', '1', '0'), -('19', '15', '2', '2', '0'), -('19', '15', '2', '3', '0'), - -('19', '15', '3', '0', '0'), -('19', '15', '3', '1', '0'), -('19', '15', '3', '2', '0'), -('19', '15', '3', '3', '0'), - -('19', '15', '4', '0', '0'), -('19', '15', '4', '1', '0'), -('19', '15', '4', '2', '0'), -('19', '15', '4', '3', '0'), - -('19', '15', '5', '0', '0'), -('19', '15', '5', '1', '0'), -('19', '15', '5', '2', '0'), -('19', '15', '5', '3', '0'), - -('19', '15', '6', '0', '0'), -('19', '15', '6', '1', '0'), -('19', '15', '6', '2', '0'), -('19', '15', '6', '3', '0'); diff --git a/utils/sql/git/bots/required/2017_02_26_bots_npc_spells_update_for_bots.sql b/utils/sql/git/bots/required/2017_02_26_bots_npc_spells_update_for_bots.sql deleted file mode 100644 index 7632a7e1a..000000000 --- a/utils/sql/git/bots/required/2017_02_26_bots_npc_spells_update_for_bots.sql +++ /dev/null @@ -1,19 +0,0 @@ --- Re-ordered entries according to actual class values and added melee types (for future expansion) -DELETE FROM `npc_spells` WHERE `id` >= '701' AND `id` <= '712'; - -INSERT INTO `npc_spells` VALUES (3001, 'Warrior Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3002, 'Cleric Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3003, 'Paladin Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3004, 'Ranger Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3005, 'Shadowknight Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3006, 'Druid Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3007, 'Monk Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3008, 'Bard Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3009, 'Rogue Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3010, 'Shaman Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3011, 'Necromancer Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3012, 'Wizard Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3013, 'Magician Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3014, 'Enchanter Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3015, 'Beastlord Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3016, 'Berserker Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); diff --git a/utils/sql/git/bots/required/2017_02_26_bots_spell_casting_chances_update.sql b/utils/sql/git/bots/required/2017_02_26_bots_spell_casting_chances_update.sql deleted file mode 100644 index 318f68d5b..000000000 --- a/utils/sql/git/bots/required/2017_02_26_bots_spell_casting_chances_update.sql +++ /dev/null @@ -1,2922 +0,0 @@ -DROP TABLE IF EXISTS `bot_spell_casting_chances`; - -CREATE TABLE `bot_spell_casting_chances` ( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `spell_type_index` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `class_id` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `stance_index` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `nHSND_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pH_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pS_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pHS_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pN_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pHN_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pSN_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pHSN_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pD_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pHD_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pSD_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pHSD_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pND_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pHND_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pSND_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `pHSND_value` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`id`), - INDEX `spelltype_class_stance` (`spell_type_index`, `class_id`, `stance_index`) -) -ENGINE=InnoDB -; - --- Updated table schema - --- This contents of this file are auto-generated – Do not make adjustments within this file. - - --- Sheet Enumeration Validation --- SpellType_NukeIndex = 0 : SpellType_NukeIndex --- SpellType_HealIndex = 1 : SpellType_HealIndex --- SpellType_RootIndex = 2 : SpellType_RootIndex --- SpellType_BuffIndex = 3 : SpellType_BuffIndex --- SpellType_EscapeIndex = 4 : SpellType_EscapeIndex --- SpellType_PetIndex = 5 : SpellType_PetIndex --- SpellType_LifetapIndex = 6 : SpellType_LifetapIndex --- SpellType_SnareIndex = 7 : SpellType_SnareIndex --- SpellType_DOTIndex, = 8 : SpellType_DOTIndex --- SpellType_DispelIndex = 9 : SpellType_DispelIndex --- SpellType_InCombatBuffIndex = 10 : SpellType_InCombatBuffIndex --- SpellType_MezIndex = 11 : SpellType_MezIndex --- SpellType_CharmIndex = 12 : SpellType_CharmIndex --- SpellType_SlowIndex = 13 : SpellType_SlowIndex --- SpellType_DebuffIndex = 14 : SpellType_DebuffIndex --- SpellType_CureIndex = 15 : SpellType_CureIndex --- SpellType_ResurrectIndex = 16 : SpellType_ResurrectIndex --- SpellType_HateReduxIndex = 17 : SpellType_HateReduxIndex --- SpellType_InCombatBuffSongIndex = 18 : SpellType_InCombatBuffSongIndex --- SpellType_OutOfCombatBuffSongIndex = 19 : SpellType_OutOfCombatBuffSongIndex --- SpellType_PreCombatBuffIndex = 20 : SpellType_PreCombatBuffIndex --- SpellType_PreCombatBuffSongIndex = 21 : SpellType_PreCombatBuffSongIndex - - -INSERT INTO `bot_spell_casting_chances` (`spell_type_index`, `class_id`, `stance_index`, `nHSND_value`, `pH_value`, `pS_value`, `pHS_value`, `pN_value`, `pHN_value`, `pSN_value`, `pHSN_value`, `pD_value`, `pHD_value`, `pSD_value`, `pHSD_value`, `pND_value`, `pHND_value`, `pSND_value`, `pHSND_value`) VALUES --- Versioning -('255', '255', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_NukeIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '2', '1', '25', '15', '25', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '2', '2', '15', '0', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '2', '3', '25', '15', '25', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '2', '4', '50', '15', '50', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '2', '5', '50', '25', '50', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '2', '6', '50', '25', '50', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '3', '1', '25', '15', '25', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '3', '2', '15', '0', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '3', '3', '25', '15', '25', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '3', '4', '50', '15', '50', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '3', '5', '50', '25', '50', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '3', '6', '50', '25', '50', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '4', '1', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '4', '2', '5', '5', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '4', '3', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '4', '4', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '4', '5', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '4', '6', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '5', '1', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '5', '2', '5', '5', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '5', '3', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '5', '4', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '5', '5', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '5', '6', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '6', '1', '25', '15', '25', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '6', '2', '15', '0', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '6', '3', '25', '15', '25', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '6', '4', '50', '15', '50', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '6', '5', '50', '25', '50', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '6', '6', '50', '25', '50', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '8', '1', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '8', '2', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '8', '3', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '8', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '8', '5', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '8', '6', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '10', '1', '15', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '10', '2', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '10', '3', '15', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '10', '4', '25', '15', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '10', '5', '50', '25', '25', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '10', '6', '50', '25', '25', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '11', '1', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '11', '2', '5', '5', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '11', '3', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '11', '4', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '11', '5', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '11', '6', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '12', '1', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '12', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '12', '3', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '12', '4', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '12', '5', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '12', '6', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '13', '1', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '13', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '13', '3', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '13', '4', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '13', '5', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '13', '6', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '14', '1', '25', '25', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '14', '2', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '14', '3', '25', '25', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '14', '4', '50', '50', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '14', '5', '50', '50', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '14', '6', '50', '50', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '15', '1', '15', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '15', '2', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '15', '3', '15', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '15', '4', '25', '15', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '15', '5', '50', '25', '25', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '15', '6', '50', '25', '25', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('0', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('0', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_HealIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '2', '1', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '2', '2', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '2', '3', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '2', '4', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '2', '5', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '2', '6', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '3', '1', '25', '100', '25', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '3', '2', '15', '75', '15', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '3', '3', '25', '100', '25', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '3', '4', '15', '75', '15', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '3', '5', '0', '50', '0', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '3', '6', '0', '50', '0', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '4', '1', '25', '100', '25', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '4', '2', '15', '75', '15', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '4', '3', '25', '100', '25', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '4', '4', '15', '75', '15', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '4', '5', '0', '50', '0', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '4', '6', '0', '50', '0', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '5', '1', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '5', '2', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '5', '3', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '5', '4', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '5', '5', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '5', '6', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '6', '1', '25', '100', '25', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '6', '2', '15', '100', '15', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '6', '3', '25', '100', '25', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '6', '4', '25', '75', '25', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '6', '5', '10', '50', '10', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '6', '6', '10', '50', '10', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '8', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '8', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '8', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '8', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '10', '1', '25', '100', '25', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '10', '2', '15', '100', '15', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '10', '3', '25', '100', '25', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '10', '4', '25', '75', '25', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '10', '5', '10', '50', '10', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '10', '6', '10', '50', '10', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '11', '1', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '11', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '11', '3', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '11', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '11', '5', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '11', '6', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '13', '1', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '13', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '13', '3', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '13', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '13', '5', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '13', '6', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '15', '1', '25', '100', '25', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '15', '2', '15', '75', '15', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '15', '3', '25', '100', '25', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '15', '4', '15', '75', '15', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '15', '5', '0', '50', '0', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '15', '6', '0', '50', '0', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('1', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('1', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_RootIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '8', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '8', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '8', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '8', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('2', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('2', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_BuffIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '8', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '8', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '8', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '8', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('3', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('3', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_EscapeIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '2', '1', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '2', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '2', '3', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '2', '4', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '2', '5', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '2', '6', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '3', '1', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '3', '2', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '3', '3', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '4', '1', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '4', '2', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '4', '3', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '4', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '4', '5', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '4', '6', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '5', '1', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '5', '2', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '5', '3', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '6', '1', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '6', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '6', '3', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '6', '4', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '6', '5', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '6', '6', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '8', '1', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '8', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '8', '3', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '8', '4', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '8', '5', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '8', '6', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '10', '1', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '10', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '10', '3', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '10', '4', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '10', '5', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '10', '6', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '11', '1', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '11', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '11', '3', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '11', '4', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '11', '5', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '11', '6', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '12', '1', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '12', '2', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '12', '3', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '12', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '12', '5', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '12', '6', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '13', '1', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '13', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '13', '3', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '13', '4', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '13', '5', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '13', '6', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '14', '1', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '14', '2', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '14', '3', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '14', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '14', '5', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '14', '6', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('4', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('4', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_PetIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '5', '1', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '5', '2', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '5', '3', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '5', '4', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '5', '5', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '5', '6', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '6', '1', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '6', '2', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '6', '3', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '6', '4', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '6', '5', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '6', '6', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '8', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '8', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '8', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '8', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '10', '1', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '10', '2', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '10', '3', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '10', '4', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '10', '5', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '10', '6', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '11', '1', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '11', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '11', '3', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '11', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '11', '5', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '11', '6', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '13', '1', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '13', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '13', '3', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '13', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '13', '5', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '13', '6', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '14', '1', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '14', '2', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '14', '3', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '14', '4', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '14', '5', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '14', '6', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '15', '1', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '15', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '15', '3', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '15', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '15', '5', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '15', '6', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('5', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('5', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_LifetapIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '5', '1', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '5', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '5', '3', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '5', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '5', '5', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '5', '6', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '8', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '8', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '8', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '8', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '11', '1', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '11', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '11', '3', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '11', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '11', '5', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '11', '6', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('6', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('6', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_SnareIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '8', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '8', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '8', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '8', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('7', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('7', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_DOTIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '4', '1', '15', '15', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '4', '2', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '4', '3', '15', '15', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '4', '4', '50', '50', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '4', '5', '50', '50', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '4', '6', '50', '50', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '5', '1', '15', '15', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '5', '2', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '5', '3', '15', '15', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '5', '4', '50', '50', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '5', '5', '50', '50', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '5', '6', '50', '50', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '6', '1', '50', '15', '50', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '6', '2', '25', '10', '25', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '6', '3', '50', '15', '50', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '6', '4', '50', '25', '50', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '6', '5', '50', '25', '50', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '6', '6', '50', '25', '50', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '8', '1', '50', '50', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '8', '2', '25', '25', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '8', '3', '50', '50', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '8', '4', '100', '100', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '8', '5', '100', '100', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '8', '6', '100', '100', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '10', '1', '25', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '10', '2', '15', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '10', '3', '25', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '10', '4', '50', '25', '50', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '10', '5', '50', '25', '50', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '10', '6', '50', '25', '50', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '11', '1', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '11', '2', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '11', '3', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '11', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '11', '5', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '11', '6', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '14', '1', '50', '50', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '14', '2', '25', '25', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '14', '3', '50', '50', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '14', '4', '15', '15', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '14', '5', '15', '15', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '14', '6', '15', '15', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '15', '1', '15', '15', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '15', '2', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '15', '3', '15', '15', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '15', '4', '50', '50', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '15', '5', '50', '50', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '15', '6', '50', '50', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('8', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('8', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_DispelIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '8', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '8', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '8', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '8', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('9', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('9', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_InCombatBuffIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '2', '1', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '2', '3', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '2', '4', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '2', '5', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '2', '6', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '3', '1', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '3', '3', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '3', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '3', '5', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '3', '6', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '8', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '8', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '8', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '8', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '10', '1', '50', '75', '50', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '10', '2', '25', '50', '25', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '10', '3', '50', '75', '50', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '10', '4', '75', '100', '75', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '10', '5', '75', '100', '75', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '10', '6', '75', '100', '75', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('10', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('10', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_MezIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '8', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '8', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '8', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '8', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('11', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('11', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_CharmIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '8', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '8', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '8', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '8', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('12', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('12', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_SlowIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '8', '1', '25', '25', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '8', '2', '15', '15', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '8', '3', '25', '25', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '8', '4', '0', '0', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '8', '5', '0', '0', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '8', '6', '0', '0', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '10', '1', '50', '50', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '10', '2', '25', '25', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '10', '3', '50', '50', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '10', '4', '15', '15', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '10', '5', '15', '15', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '10', '6', '15', '15', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '14', '1', '50', '50', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '14', '2', '25', '25', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '14', '3', '50', '50', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '14', '4', '15', '15', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '14', '5', '15', '15', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '14', '6', '15', '15', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '15', '1', '25', '25', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '15', '2', '15', '15', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '15', '3', '25', '25', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '15', '4', '0', '0', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '15', '5', '0', '0', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '15', '6', '0', '0', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('13', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('13', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_DebuffIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '4', '1', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '4', '2', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '4', '3', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '4', '4', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '5', '1', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '5', '2', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '5', '3', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '5', '4', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '6', '1', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '6', '2', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '6', '3', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '6', '4', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '8', '1', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '8', '2', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '8', '3', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '8', '4', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '10', '1', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '10', '2', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '10', '3', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '10', '4', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '11', '1', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '11', '2', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '11', '3', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '11', '4', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '13', '1', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '13', '2', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '13', '3', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '13', '4', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '14', '1', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '14', '2', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '14', '3', '25', '25', '25', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '14', '4', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '15', '1', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '15', '2', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '15', '3', '15', '15', '15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '15', '4', '10', '10', '10', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('14', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('14', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_CureIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '8', '1', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '8', '2', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '8', '3', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '8', '4', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '8', '5', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '8', '6', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('15', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('15', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_ResurrectIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '8', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '8', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '8', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '8', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('16', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('16', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_HateReduxIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '8', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '8', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '8', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '8', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '8', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '8', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('17', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('17', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_InCombatBuffSongIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '8', '1', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '8', '2', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '8', '3', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '8', '4', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '8', '5', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '8', '6', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('18', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('18', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_OutOfCombatBuffSongIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '8', '1', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '8', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '8', '3', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '8', '4', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '8', '5', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '8', '6', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('19', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('19', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_PreCombatBuffIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '8', '1', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '8', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '8', '3', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '8', '4', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '8', '5', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '8', '6', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('20', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('20', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), - --- SpellType_PreCombatBuffSongIndex --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '1', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '1', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '1', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '1', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '1', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '2', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '2', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '2', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '2', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '3', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '3', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '3', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '3', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '3', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '3', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '4', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '4', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '4', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '4', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '4', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '5', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '5', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '5', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '5', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '5', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '5', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '6', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '6', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '6', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '6', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '6', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '6', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '7', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '7', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '7', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '7', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '7', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '7', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '8', '1', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '8', '2', '50', '50', '50', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '8', '3', '75', '75', '75', '75', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '8', '4', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '8', '5', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '8', '6', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '9', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '9', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '9', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '9', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '9', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '9', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '10', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '10', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '10', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '10', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '10', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '10', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '11', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '11', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '11', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '11', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '11', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '11', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '11', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '12', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '12', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '12', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '12', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '12', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '13', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '13', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '13', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '13', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '13', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '13', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '14', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '14', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '14', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '14', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '14', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '14', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '15', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '15', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '15', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '15', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '15', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '15', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), --- nHSND pH pS pHS pN pHN pSN pHSN pD pHD pSD pHSD pND pHND pSND pHSND -('21', '16', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '16', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '16', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '16', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '16', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '16', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'), -('21', '16', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'); diff --git a/utils/sql/git/bots/required/2017_02_26_bots_spells_id_update_for_bot_spells_entries.sql b/utils/sql/git/bots/required/2017_02_26_bots_spells_id_update_for_bot_spells_entries.sql deleted file mode 100644 index d8b23b8e7..000000000 --- a/utils/sql/git/bots/required/2017_02_26_bots_spells_id_update_for_bot_spells_entries.sql +++ /dev/null @@ -1,13 +0,0 @@ --- Update npc_spells_id to new values -UPDATE `bot_spells_entries` SET `npc_spells_id` = '3002' WHERE `npc_spells_id` = '701'; -UPDATE `bot_spells_entries` SET `npc_spells_id` = '3012' WHERE `npc_spells_id` = '702'; -UPDATE `bot_spells_entries` SET `npc_spells_id` = '3011' WHERE `npc_spells_id` = '703'; -UPDATE `bot_spells_entries` SET `npc_spells_id` = '3013' WHERE `npc_spells_id` = '704'; -UPDATE `bot_spells_entries` SET `npc_spells_id` = '3014' WHERE `npc_spells_id` = '705'; -UPDATE `bot_spells_entries` SET `npc_spells_id` = '3010' WHERE `npc_spells_id` = '706'; -UPDATE `bot_spells_entries` SET `npc_spells_id` = '3006' WHERE `npc_spells_id` = '707'; -UPDATE `bot_spells_entries` SET `npc_spells_id` = '3003' WHERE `npc_spells_id` = '708'; -UPDATE `bot_spells_entries` SET `npc_spells_id` = '3005' WHERE `npc_spells_id` = '709'; -UPDATE `bot_spells_entries` SET `npc_spells_id` = '3004' WHERE `npc_spells_id` = '710'; -UPDATE `bot_spells_entries` SET `npc_spells_id` = '3008' WHERE `npc_spells_id` = '711'; -UPDATE `bot_spells_entries` SET `npc_spells_id` = '3015' WHERE `npc_spells_id` = '712'; diff --git a/utils/sql/git/bots/required/2017_02_26_bots_spells_id_update_for_saved_bots.sql b/utils/sql/git/bots/required/2017_02_26_bots_spells_id_update_for_saved_bots.sql deleted file mode 100644 index 78ca8cb98..000000000 --- a/utils/sql/git/bots/required/2017_02_26_bots_spells_id_update_for_saved_bots.sql +++ /dev/null @@ -1,17 +0,0 @@ --- Update spells_id to new values -UPDATE `bot_data` SET `spells_id` = '3001' WHERE `class` = '1'; -UPDATE `bot_data` SET `spells_id` = '3002' WHERE `class` = '2'; -UPDATE `bot_data` SET `spells_id` = '3003' WHERE `class` = '3'; -UPDATE `bot_data` SET `spells_id` = '3004' WHERE `class` = '4'; -UPDATE `bot_data` SET `spells_id` = '3005' WHERE `class` = '5'; -UPDATE `bot_data` SET `spells_id` = '3006' WHERE `class` = '6'; -UPDATE `bot_data` SET `spells_id` = '3007' WHERE `class` = '7'; -UPDATE `bot_data` SET `spells_id` = '3008' WHERE `class` = '8'; -UPDATE `bot_data` SET `spells_id` = '3009' WHERE `class` = '9'; -UPDATE `bot_data` SET `spells_id` = '3010' WHERE `class` = '10'; -UPDATE `bot_data` SET `spells_id` = '3011' WHERE `class` = '11'; -UPDATE `bot_data` SET `spells_id` = '3012' WHERE `class` = '12'; -UPDATE `bot_data` SET `spells_id` = '3013' WHERE `class` = '13'; -UPDATE `bot_data` SET `spells_id` = '3014' WHERE `class` = '14'; -UPDATE `bot_data` SET `spells_id` = '3015' WHERE `class` = '15'; -UPDATE `bot_data` SET `spells_id` = '3016' WHERE `class` = '16'; diff --git a/utils/sql/git/bots/required/2017_03_26_bots_spells_id_fix_for_saved_shadowknight_bots.sql b/utils/sql/git/bots/required/2017_03_26_bots_spells_id_fix_for_saved_shadowknight_bots.sql deleted file mode 100644 index b7268c065..000000000 --- a/utils/sql/git/bots/required/2017_03_26_bots_spells_id_fix_for_saved_shadowknight_bots.sql +++ /dev/null @@ -1,2 +0,0 @@ --- Fix spells_id for existing Shadowknight entries -UPDATE `bot_data` SET `spells_id` = '3005' WHERE `class` = '5'; diff --git a/utils/sql/git/bots/required/2018_02_02_Bot_Spells_Min_Max_HP.sql b/utils/sql/git/bots/required/2018_02_02_Bot_Spells_Min_Max_HP.sql deleted file mode 100644 index 95108afac..000000000 --- a/utils/sql/git/bots/required/2018_02_02_Bot_Spells_Min_Max_HP.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `bot_spells_entries` ADD `min_hp` SMALLINT(5) DEFAULT '0'; -ALTER TABLE `bot_spells_entries` ADD `max_hp` SMALLINT(5) DEFAULT '0'; diff --git a/utils/sql/git/bots/required/2018_04_12_bots_stop_melee_level.sql b/utils/sql/git/bots/required/2018_04_12_bots_stop_melee_level.sql deleted file mode 100644 index b294b29bf..000000000 --- a/utils/sql/git/bots/required/2018_04_12_bots_stop_melee_level.sql +++ /dev/null @@ -1,8 +0,0 @@ -ALTER TABLE `bot_data` ADD COLUMN `stop_melee_level` TINYINT(3) UNSIGNED NOT NULL DEFAULT '255' AFTER `follow_distance`; - -INSERT INTO `bot_command_settings`(`bot_command`, `access`, `aliases`) VALUES ('botstopmeleelevel', '0', 'sml'); - -SELECT @csml_raw := (SELECT `rule_value` FROM `rule_values` WHERE `rule_name` LIKE 'Bots:CasterStopMeleeLevel' LIMIT 1); -SELECT @csml_value := IF((SELECT @csml_raw REGEXP '^[0-9]+$') = '1', @csml_raw, '13'); - -UPDATE `bot_data` SET `stop_melee_level` = @csml_value WHERE `class` IN ('2', '6', '10', '11', '12', '13', '14'); diff --git a/utils/sql/git/bots/required/2018_08_13_bots_inventory_update.sql b/utils/sql/git/bots/required/2018_08_13_bots_inventory_update.sql deleted file mode 100644 index 94ca630c2..000000000 --- a/utils/sql/git/bots/required/2018_08_13_bots_inventory_update.sql +++ /dev/null @@ -1,5 +0,0 @@ --- update `bot_inventories` slots -UPDATE `bot_inventories` SET `slot_id` = 22 WHERE `slot_id` = 21; -- adjust ammo slot -UPDATE `bot_inventories` SET `slot_id` = 21 WHERE `slot_id` = 9999; -- adjust powersource slot - -UPDATE `inventory_versions` SET `bot_step` = 1 WHERE `version` = 2; \ No newline at end of file diff --git a/utils/sql/git/bots/required/2018_10_09_bots_owner_options.sql b/utils/sql/git/bots/required/2018_10_09_bots_owner_options.sql deleted file mode 100644 index ec1a7bebe..000000000 --- a/utils/sql/git/bots/required/2018_10_09_bots_owner_options.sql +++ /dev/null @@ -1,11 +0,0 @@ -DROP TABLE IF EXISTS `bot_owner_options`; - -CREATE TABLE `bot_owner_options` ( - `owner_id` INT(11) UNSIGNED NOT NULL, - `death_marquee` SMALLINT(3) UNSIGNED NULL DEFAULT '0', - PRIMARY KEY (`owner_id`) -) -COLLATE='latin1_swedish_ci' -ENGINE=MyISAM; - -INSERT INTO `bot_command_settings`(`bot_command`, `access`, `aliases`) VALUES ('owneroption', '0', 'oo'); diff --git a/utils/sql/git/bots/required/2019_02_07_bots_stance_type_update.sql b/utils/sql/git/bots/required/2019_02_07_bots_stance_type_update.sql deleted file mode 100644 index d2e3169fa..000000000 --- a/utils/sql/git/bots/required/2019_02_07_bots_stance_type_update.sql +++ /dev/null @@ -1,11 +0,0 @@ --- Update `bot_stances`.`stance_id` to new values -UPDATE `bot_stances` SET `stance_id` = '9' WHERE `stance_id` = '6'; -UPDATE `bot_stances` SET `stance_id` = '7' WHERE `stance_id` = '5'; -UPDATE `bot_stances` SET `stance_id` = (`stance_id` + 1) WHERE `stance_id` in (0,1,2,3,4); - --- Update `bot_spell_casting_chances`.`stance_index` to new values -UPDATE `bot_spell_casting_chances` SET `stance_index` = '8' WHERE `stance_index` = '6'; -UPDATE `bot_spell_casting_chances` SET `stance_index` = '6' WHERE `stance_index` = '5'; - --- Update `bot_spell_casting_chances` implicit versioning -UPDATE `bot_spell_casting_chances` SET `stance_index` = '1' WHERE `spell_type_index` = '255' AND `class_id` = '255'; diff --git a/utils/sql/git/bots/required/2019_06_22_bots_owner_option_stats_update.sql b/utils/sql/git/bots/required/2019_06_22_bots_owner_option_stats_update.sql deleted file mode 100644 index 15b09020f..000000000 --- a/utils/sql/git/bots/required/2019_06_22_bots_owner_option_stats_update.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `bot_owner_options` ADD COLUMN `stats_update` SMALLINT(3) UNSIGNED NULL DEFAULT '0' AFTER `death_marquee`; diff --git a/utils/sql/git/bots/required/2019_06_27_bots_pet_get_lost.sql b/utils/sql/git/bots/required/2019_06_27_bots_pet_get_lost.sql deleted file mode 100644 index 7d0c36624..000000000 --- a/utils/sql/git/bots/required/2019_06_27_bots_pet_get_lost.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO `bot_command_settings`(`bot_command`, `access`, `aliases`) VALUES ('petgetlost', '0', 'pgl'); diff --git a/utils/sql/git/bots/required/2019_08_26_bots_owner_option_spawn_message.sql b/utils/sql/git/bots/required/2019_08_26_bots_owner_option_spawn_message.sql deleted file mode 100644 index 04910cd10..000000000 --- a/utils/sql/git/bots/required/2019_08_26_bots_owner_option_spawn_message.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `bot_owner_options` ADD COLUMN `spawn_message_enabled` SMALLINT(3) UNSIGNED NULL DEFAULT '1' AFTER `stats_update`; -ALTER TABLE `bot_owner_options` ADD COLUMN `spawn_message_type` SMALLINT(3) UNSIGNED NULL DEFAULT '1' AFTER `spawn_message_enabled`; diff --git a/utils/sql/git/bots/required/2019_09_09_bots_owner_options_rework.sql b/utils/sql/git/bots/required/2019_09_09_bots_owner_options_rework.sql deleted file mode 100644 index 6240e9366..000000000 --- a/utils/sql/git/bots/required/2019_09_09_bots_owner_options_rework.sql +++ /dev/null @@ -1,10 +0,0 @@ -DROP TABLE IF EXISTS `bot_owner_options`; - -CREATE TABLE `bot_owner_options` ( - `owner_id` INT(11) UNSIGNED NOT NULL, - `option_type` SMALLINT(3) UNSIGNED NOT NULL, - `option_value` SMALLINT(3) UNSIGNED NULL DEFAULT '0', - PRIMARY KEY (`owner_id`, `option_type`) -) -COLLATE='latin1_swedish_ci' -ENGINE=InnoDB; diff --git a/utils/sql/git/bots/required/2020_03_30_bots_view_update.sql b/utils/sql/git/bots/required/2020_03_30_bots_view_update.sql deleted file mode 100644 index d4948efed..000000000 --- a/utils/sql/git/bots/required/2020_03_30_bots_view_update.sql +++ /dev/null @@ -1,24 +0,0 @@ -DROP VIEW IF EXISTS `vw_bot_character_mobs`; - --- Views -CREATE VIEW `vw_bot_character_mobs` AS -SELECT -_utf8'C' AS mob_type, -c.`id`, -c.`name`, -c.`class`, -c.`level`, -c.`last_login`, -c.`zone_id`, -c.`deleted_at` -FROM `character_data` AS c -UNION ALL -SELECT _utf8'B' AS mob_type, -b.`bot_id` AS id, -b.`name`, -b.`class`, -b.`level`, -b.`last_spawn` AS last_login, -b.`zone_id`, -NULL AS `deleted_at` -FROM `bot_data` AS b; diff --git a/utils/sql/git/bots/required/2021_06_04_bot_create_combinations.sql b/utils/sql/git/bots/required/2021_06_04_bot_create_combinations.sql deleted file mode 100644 index 00974fcda..000000000 --- a/utils/sql/git/bots/required/2021_06_04_bot_create_combinations.sql +++ /dev/null @@ -1,34 +0,0 @@ -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for bot_create_combinations --- ---------------------------- -DROP TABLE IF EXISTS `bot_create_combinations`; -CREATE TABLE `bot_create_combinations` ( - `race` int UNSIGNED NOT NULL DEFAULT 0, - `classes` int UNSIGNED NOT NULL DEFAULT 0, - PRIMARY KEY (`race`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; - --- ---------------------------- --- Records of bot_create_combinations --- ---------------------------- -INSERT INTO `bot_create_combinations` VALUES (1, 15871); -- Human -INSERT INTO `bot_create_combinations` VALUES (2, 49921); -- Barbarian -INSERT INTO `bot_create_combinations` VALUES (3, 15382); -- Erudite -INSERT INTO `bot_create_combinations` VALUES (4, 425); -- Wood Elf -INSERT INTO `bot_create_combinations` VALUES (5, 14342); -- High Elf -INSERT INTO `bot_create_combinations` VALUES (6, 15635); -- Dark Elf -INSERT INTO `bot_create_combinations` VALUES (7, 429); -- Half Elf -INSERT INTO `bot_create_combinations` VALUES (8, 33031); -- Dwarf -INSERT INTO `bot_create_combinations` VALUES (9, 49681); -- Troll -INSERT INTO `bot_create_combinations` VALUES (10, 49681); -- Ogre -INSERT INTO `bot_create_combinations` VALUES (11, 303); -- Halfling -INSERT INTO `bot_create_combinations` VALUES (12, 15639); -- Gnome -INSERT INTO `bot_create_combinations` VALUES (128, 18001); -- Iksar -INSERT INTO `bot_create_combinations` VALUES (130, 50049); -- Vah Shir -INSERT INTO `bot_create_combinations` VALUES (330, 3863); -- Froglok -INSERT INTO `bot_create_combinations` VALUES (522, 15871); -- Drakkin - -SET FOREIGN_KEY_CHECKS = 1; diff --git a/utils/sql/git/bots/required/2022_06_21_bot_groups_auto_spawn.sql b/utils/sql/git/bots/required/2022_06_21_bot_groups_auto_spawn.sql deleted file mode 100644 index 4b320e368..000000000 --- a/utils/sql/git/bots/required/2022_06_21_bot_groups_auto_spawn.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `bot_groups` ADD COLUMN `auto_spawn` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 AFTER `group_name`; \ No newline at end of file diff --git a/utils/sql/git/bots/required/2022_10_27_bot_data_buckets.sql b/utils/sql/git/bots/required/2022_10_27_bot_data_buckets.sql deleted file mode 100644 index a46efa902..000000000 --- a/utils/sql/git/bots/required/2022_10_27_bot_data_buckets.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE `bot_spells_entries` -ADD COLUMN `bucket_name` varchar(100) NOT NULL DEFAULT '' AFTER `max_hp`, -ADD COLUMN `bucket_value` varchar(100) NOT NULL DEFAULT '' AFTER `bucket_name`, -ADD COLUMN `bucket_comparison` tinyint UNSIGNED NULL DEFAULT 0 AFTER `bucket_value`; \ No newline at end of file diff --git a/utils/sql/git/bots/required/2022_11_07_bot_expansion_bitmask.sql b/utils/sql/git/bots/required/2022_11_07_bot_expansion_bitmask.sql deleted file mode 100644 index c46686bb4..000000000 --- a/utils/sql/git/bots/required/2022_11_07_bot_expansion_bitmask.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `bot_data` -ADD COLUMN `expansion_bitmask` int(11) NOT NULL DEFAULT -1 AFTER `stop_melee_level`; diff --git a/utils/sql/git/bots/required/2022_11_13_bot_spells_entries.sql b/utils/sql/git/bots/required/2022_11_13_bot_spells_entries.sql deleted file mode 100644 index 6d60e216f..000000000 --- a/utils/sql/git/bots/required/2022_11_13_bot_spells_entries.sql +++ /dev/null @@ -1,10 +0,0 @@ -UPDATE bot_spells_entries SET bucket_comparison = 0 WHERE bucket_comparison IS NULL; -UPDATE bot_spells_entries SET min_hp = 0 WHERE min_hp IS NULL; -UPDATE bot_spells_entries SET max_hp = 0 WHERE max_hp IS NULL; -UPDATE bot_spells_entries SET resist_adjust = 0 WHERE resist_adjust IS NULL; - -ALTER TABLE `bot_spells_entries` -MODIFY COLUMN `resist_adjust` int(11) NOT NULL DEFAULT 0 AFTER `priority`, -MODIFY COLUMN `min_hp` smallint(5) NOT NULL DEFAULT 0 AFTER `resist_adjust`, -MODIFY COLUMN `max_hp` smallint(5) NOT NULL DEFAULT 0 AFTER `min_hp`, -MODIFY COLUMN `bucket_comparison` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 AFTER `bucket_value`; diff --git a/utils/sql/git/bots/required/2022_11_19_bot_spell_settings.sql b/utils/sql/git/bots/required/2022_11_19_bot_spell_settings.sql deleted file mode 100644 index 0224034aa..000000000 --- a/utils/sql/git/bots/required/2022_11_19_bot_spell_settings.sql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE TABLE `bot_spell_settings` ( - `id` int(11) unsigned NOT NULL AUTO_INCREMENT, - `bot_id` int(11) NOT NULL DEFAULT 0, - `spell_id` smallint(5) NOT NULL DEFAULT 0, - `priority` smallint(5) NOT NULL DEFAULT 0, - `min_level` smallint(5) unsigned NOT NULL DEFAULT 0, - `max_level` smallint(5) unsigned NOT NULL DEFAULT 255, - `min_hp` smallint(5) NOT NULL DEFAULT 0, - `max_hp` smallint(5) NOT NULL DEFAULT 0, - `is_enabled` tinyint(1) unsigned NOT NULL DEFAULT 1, - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/utils/sql/git/bots/required/2022_12_02_bot_spell_settings.sql b/utils/sql/git/bots/required/2022_12_02_bot_spell_settings.sql deleted file mode 100644 index 28e825da6..000000000 --- a/utils/sql/git/bots/required/2022_12_02_bot_spell_settings.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE `bot_data` -ADD COLUMN `enforce_spell_settings` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0' AFTER `expansion_bitmask`; - -ALTER TABLE `bot_spell_settings` DROP `min_level`; -ALTER TABLE `bot_spell_settings` DROP `max_level`; diff --git a/utils/sql/git/bots/required/2022_12_04_bot_archery.sql b/utils/sql/git/bots/required/2022_12_04_bot_archery.sql deleted file mode 100644 index ae05f4132..000000000 --- a/utils/sql/git/bots/required/2022_12_04_bot_archery.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `bot_data` -ADD COLUMN `archery_setting` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0' AFTER `enforce_spell_settings`; \ No newline at end of file diff --git a/utils/sql/git/bots/required/2023_01_19_drop_bot_views.sql b/utils/sql/git/bots/required/2023_01_19_drop_bot_views.sql deleted file mode 100644 index 7ca7cbf3b..000000000 --- a/utils/sql/git/bots/required/2023_01_19_drop_bot_views.sql +++ /dev/null @@ -1,6 +0,0 @@ -DROP VIEW vw_bot_groups; -DROP VIEW vw_bot_character_mobs; -DROP VIEW vw_groups; -DROP VIEW vw_guild_members; - -DROP TABLE bot_guild_members; diff --git a/utils/sql/git/bots/required/2023_01_22_add_name_index.sql b/utils/sql/git/bots/required/2023_01_22_add_name_index.sql deleted file mode 100644 index d4e3cca14..000000000 --- a/utils/sql/git/bots/required/2023_01_22_add_name_index.sql +++ /dev/null @@ -1 +0,0 @@ -create index `name` on bot_data(`name`); \ No newline at end of file diff --git a/utils/sql/git/bots/required/2023_02_16_add_caster_range.sql b/utils/sql/git/bots/required/2023_02_16_add_caster_range.sql deleted file mode 100644 index 0a2946164..000000000 --- a/utils/sql/git/bots/required/2023_02_16_add_caster_range.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `bot_data` -ADD COLUMN `caster_range` INT(11) UNSIGNED NOT NULL DEFAULT '300' AFTER `archery_setting`; \ No newline at end of file diff --git a/utils/sql/git/required/2022_09_03_fix_door_destination_headings.sql b/utils/sql/git/optional/2022_09_03_fix_door_destination_headings.sql similarity index 100% rename from utils/sql/git/required/2022_09_03_fix_door_destination_headings.sql rename to utils/sql/git/optional/2022_09_03_fix_door_destination_headings.sql diff --git a/utils/sql/git/required/2022_09_03_fix_starting_point_heading.sql b/utils/sql/git/optional/2022_09_03_fix_starting_point_heading.sql similarity index 100% rename from utils/sql/git/required/2022_09_03_fix_starting_point_heading.sql rename to utils/sql/git/optional/2022_09_03_fix_starting_point_heading.sql diff --git a/utils/sql/git/required/2022_09_03_fix_zone_point_heading_data.sql b/utils/sql/git/optional/2022_09_03_fix_zone_point_heading_data.sql similarity index 100% rename from utils/sql/git/required/2022_09_03_fix_zone_point_heading_data.sql rename to utils/sql/git/optional/2022_09_03_fix_zone_point_heading_data.sql diff --git a/utils/sql/git/required/2022_10_11_fix_misty_pok_stone.sql b/utils/sql/git/optional/2022_10_11_fix_misty_pok_stone.sql similarity index 100% rename from utils/sql/git/required/2022_10_11_fix_misty_pok_stone.sql rename to utils/sql/git/optional/2022_10_11_fix_misty_pok_stone.sql diff --git a/utils/sql/git/required/2022_10_14_fix_misty_pok_stone.sql b/utils/sql/git/optional/2022_10_14_fix_misty_pok_stone.sql similarity index 100% rename from utils/sql/git/required/2022_10_14_fix_misty_pok_stone.sql rename to utils/sql/git/optional/2022_10_14_fix_misty_pok_stone.sql diff --git a/utils/sql/git/required/2022_10_14_fix_neriak_pok_stone.sql b/utils/sql/git/optional/2022_10_14_fix_neriak_pok_stone.sql similarity index 100% rename from utils/sql/git/required/2022_10_14_fix_neriak_pok_stone.sql rename to utils/sql/git/optional/2022_10_14_fix_neriak_pok_stone.sql diff --git a/utils/sql/git/required/.gitignore b/utils/sql/git/required/.gitignore deleted file mode 100644 index e69de29bb..000000000 diff --git a/utils/sql/git/required/2013_02_18_Merc_Rules_and_Tables.sql b/utils/sql/git/required/2013_02_18_Merc_Rules_and_Tables.sql deleted file mode 100644 index 66065bfab..000000000 --- a/utils/sql/git/required/2013_02_18_Merc_Rules_and_Tables.sql +++ /dev/null @@ -1,53 +0,0 @@ -INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Mercs:ResurrectRadius', '50', 'Determines the distance from which a healer merc will attempt to resurrect a corpse'); - -DROP TABLE IF EXISTS mercsbuffs; -DROP TABLE IF EXISTS mercs; - -CREATE TABLE mercs ( - MercID int(10) unsigned NOT NULL AUTO_INCREMENT, - OwnerCharacterID int(10) unsigned NOT NULL, - Slot tinyint(1) unsigned NOT NULL DEFAULT '0', - Name varchar(64) NOT NULL, - TemplateID int(10) unsigned NOT NULL DEFAULT '0', - SuspendedTime int(11) unsigned NOT NULL DEFAULT '0', - IsSuspended tinyint(1) unsigned NOT NULL default '0', - TimerRemaining int(11) unsigned NOT NULL DEFAULT '0', - Gender tinyint unsigned NOT NULL DEFAULT '0', - StanceID tinyint unsigned NOT NULL DEFAULT '0', - HP int(11) unsigned NOT NULL DEFAULT '0', - Mana int(11) unsigned NOT NULL DEFAULT '0', - Endurance int(11) unsigned NOT NULL DEFAULT '0', - Face int(10) unsigned NOT NULL DEFAULT '1', - LuclinHairStyle int(10) unsigned NOT NULL DEFAULT '1', - LuclinHairColor int(10) unsigned NOT NULL DEFAULT '1', - LuclinEyeColor int(10) unsigned NOT NULL DEFAULT '1', - LuclinEyeColor2 int(10) unsigned NOT NULL DEFAULT '1', - LuclinBeardColor int(10) unsigned NOT NULL DEFAULT '1', - LuclinBeard int(10) unsigned NOT NULL DEFAULT '0', - DrakkinHeritage int(10) unsigned NOT NULL DEFAULT '0', - DrakkinTattoo int(10) unsigned NOT NULL DEFAULT '0', - DrakkinDetails int(10) unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (MercID) -); - -CREATE TABLE mercbuffs ( - MercBuffId int(10) unsigned NOT NULL auto_increment, - MercId int(10) unsigned NOT NULL default '0', - SpellId int(10) unsigned NOT NULL default '0', - CasterLevel int(10) unsigned NOT NULL default '0', - DurationFormula int(10) unsigned NOT NULL default '0', - TicsRemaining int(11) unsigned NOT NULL default '0', - PoisonCounters int(11) unsigned NOT NULL default '0', - DiseaseCounters int(11) unsigned NOT NULL default '0', - CurseCounters int(11) unsigned NOT NULL default '0', - CorruptionCounters int(11) unsigned NOT NULL default '0', - HitCount int(10) unsigned NOT NULL default '0', - MeleeRune int(10) unsigned NOT NULL default '0', - MagicRune int(10) unsigned NOT NULL default '0', - DeathSaveSuccessChance int(10) unsigned NOT NULL default '0', - CasterAARank int(10) unsigned NOT NULL default '0', - Persistent tinyint(1) NOT NULL default '0', - PRIMARY KEY (MercBuffId), - KEY FK_mercbuff_1 (MercId), - CONSTRAINT FK_mercbuff_1 FOREIGN KEY (MercId) REFERENCES mercs (MercID) -); \ No newline at end of file diff --git a/utils/sql/git/required/2013_02_25_Impr_HT_LT.sql b/utils/sql/git/required/2013_02_25_Impr_HT_LT.sql deleted file mode 100644 index 09f1e695c..000000000 --- a/utils/sql/git/required/2013_02_25_Impr_HT_LT.sql +++ /dev/null @@ -1,4 +0,0 @@ -/* SK AA Touch of the Wicked should reduce reuse timers for */ -/* Improved Harm Touch & Leech Touch as well as regular HT */ -update aa_actions set redux_aa=596, redux_rate=17 where aaid=207; -update aa_actions set redux_aa=596, redux_rate=17 where aaid=208; diff --git a/utils/sql/git/required/2013_03_1_Merc_Rules_and_Equipment.sql b/utils/sql/git/required/2013_03_1_Merc_Rules_and_Equipment.sql deleted file mode 100644 index 178d5fbf0..000000000 --- a/utils/sql/git/required/2013_03_1_Merc_Rules_and_Equipment.sql +++ /dev/null @@ -1,88 +0,0 @@ -INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Mercs:ChargeMercPurchaseCost', 'false', 'Turns Mercenary purchase costs on or off.'); -INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Mercs:ChargeMercUpkeepCost', 'false', 'Turns Mercenary upkeep costs on or off.'); - -UPDATE merc_stats SET spellscale = 100, healscale = 100; - -REPLACE INTO items (`id`, `minstatus`, `Name`, `aagi`, `ac`, `accuracy`, `acha`, `adex`, `aint`, `artifactflag`, `asta`, `astr`, `attack`, `augrestrict`, `augslot1type`, `augslot1visible`, `augslot2type`, `augslot2visible`, `augslot3type`, `augslot3visible`, `augslot4type`, `augslot4visible`, `augslot5type`, `augslot5visible`, `augtype`, `avoidance`, `awis`, `bagsize`, `bagslots`, `bagtype`, `bagwr`, `banedmgamt`, `banedmgraceamt`, `banedmgbody`, `banedmgrace`, `bardtype`, `bardvalue`, `book`, `casttime`, `casttime_`, `charmfile`, `charmfileid`, `classes`, `color`, `combateffects`, `extradmgskill`, `extradmgamt`, `price`, `cr`, `damage`, `damageshield`, `deity`, `delay`, `augdistiller`, `dotshielding`, `dr`, `clicktype`, `clicklevel2`, `elemdmgtype`, `elemdmgamt`, `endur`, `factionamt1`, `factionamt2`, `factionamt3`, `factionamt4`, `factionmod1`, `factionmod2`, `factionmod3`, `factionmod4`, `filename`, `focuseffect`, `fr`, `fvnodrop`, `haste`, `clicklevel`, `hp`, `regen`, `icon`, `idfile`, `itemclass`, `itemtype`, `ldonprice`, `ldontheme`, `ldonsold`, `light`, `lore`, `loregroup`, `magic`, `mana`, `manaregen`, `enduranceregen`, `material`, `maxcharges`, `mr`, `nodrop`, `norent`, `pendingloreflag`, `pr`, `procrate`, `races`, `range`, `reclevel`, `recskill`, `reqlevel`, `sellrate`, `shielding`, `size`, `skillmodtype`, `skillmodvalue`, `slots`, `clickeffect`, `spellshield`, `strikethrough`, `stunresist`, `summonedflag`, `tradeskills`, `favor`, `weight`, `UNK012`, `UNK013`, `benefitflag`, `UNK054`, `UNK059`, `booktype`, `recastdelay`, `recasttype`, `guildfavor`, `UNK123`, `UNK124`, `attuneable`, `nopet`, `updated`, `comment`, `UNK127`, `pointtype`, `potionbelt`, `potionbeltslots`, `stacksize`, `notransfer`, `stackable`, `UNK134`, `UNK137`, `proceffect`, `proctype`, `proclevel2`, `proclevel`, `UNK142`, `worneffect`, `worntype`, `wornlevel2`, `wornlevel`, `UNK147`, `focustype`, `focuslevel2`, `focuslevel`, `UNK152`, `scrolleffect`, `scrolltype`, `scrolllevel2`, `scrolllevel`, `UNK157`, `serialized`, `verified`, `serialization`, `source`, `UNK033`, `lorefile`, `UNK014`, `svcorruption`, `UNK038`, `UNK060`, `augslot1unk2`, `augslot2unk2`, `augslot3unk2`, `augslot4unk2`, `augslot5unk2`, `UNK120`, `UNK121`, `questitemflag`, `UNK132`, `clickunk5`, `clickunk6`, `clickunk7`, `procunk1`, `procunk2`, `procunk3`, `procunk4`, `procunk6`, `procunk7`, `wornunk1`, `wornunk2`, `wornunk3`, `wornunk4`, `wornunk5`, `wornunk6`, `wornunk7`, `focusunk1`, `focusunk2`, `focusunk3`, `focusunk4`, `focusunk5`, `focusunk6`, `focusunk7`, `scrollunk1`, `scrollunk2`, `scrollunk3`, `scrollunk4`, `scrollunk5`, `scrollunk6`, `scrollunk7`, `UNK193`, `purity`, `evolvinglevel`, `clickname`, `procname`, `wornname`, `focusname`, `scrollname`, `dsmitigation`, `heroic_str`, `heroic_int`, `heroic_wis`, `heroic_agi`, `heroic_dex`, `heroic_sta`, `heroic_cha`, `heroic_pr`, `heroic_dr`, `heroic_fr`, `heroic_cr`, `heroic_mr`, `heroic_svcorrup`, `healamt`, `spelldmg`, `clairvoyance`, `backstabdmg`, `created`, `elitematerial`, `ldonsellbackrate`, `scriptfileid`, `expendablearrow`, `powersourcecapacity`, `bardeffect`, `bardeffecttype`, `bardlevel2`, `bardlevel`, `bardunk1`, `bardunk2`, `bardunk3`, `bardunk4`, `bardunk5`, `bardname`, `bardunk7`, `UNK214`, `UNK219`, `UNK220`, `UNK221`, `UNK222`, `UNK223`, `UNK224`, `UNK225`, `UNK226`, `UNK227`, `UNK228`, `UNK229`, `UNK230`, `UNK231`, `UNK232`, `UNK233`, `UNK234`, `UNK235`, `UNK236`, `UNK237`, `UNK238`, `UNK239`, `UNK240`, `UNK241`, `UNK242`) -VALUES - (51735, 0, 'MRC - CT Focus - Tier I - 5%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17158, 0, 1, 0, 0, 0, 0, 1983, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51736, 0, 'MRC - CT Focus - Tier II - 10%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17159, 0, 1, 0, 0, 0, 0, 1983, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51737, 0, 'MRC - CT Focus - Tier III - 15%', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17160, 0, 1, 0, 0, 0, 0, 1983, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51738, 0, 'MRC - CT Focus - Tier IV - 20%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17161, 0, 1, 0, 0, 0, 0, 1983, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51739, 0, 'MRC - CT Focus - Tier V - 25%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17162, 0, 1, 0, 0, 0, 0, 2001, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-09 18:53:11', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - - (51740, 0, 'MRC - ID Focus - Tier I - 10%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17163, 0, 1, 0, 0, 0, 0, 1989, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51741, 0, 'MRC - ID Focus - Tier II - 20%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17164, 0, 1, 0, 0, 0, 0, 1989, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51742, 0, 'MRC - ID Focus - Tier III - 30%', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17165, 0, 1, 0, 0, 0, 0, 1989, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51743, 0, 'MRC - ID Focus - Tier IV - 40%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17166, 0, 1, 0, 0, 0, 0, 1989, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51744, 0, 'MRC - ID Focus - Tier V - 50%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17167, 0, 1, 0, 0, 0, 0, 2002, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - - (51745, 0, 'MRC - IH Focus - Tier I - 15%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17168, 0, 1, 0, 0, 0, 0, 1941, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51746, 0, 'MRC - IH Focus - Tier II - 30%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17169, 0, 1, 0, 0, 0, 0, 1941, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51747, 0, 'MRC - IH Focus - Tier III - 45%', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17170, 0, 1, 0, 0, 0, 0, 1941, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51748, 0, 'MRC - IH Focus - Tier IV - 60%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17171, 0, 1, 0, 0, 0, 0, 1941, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51749, 0, 'MRC - IH Focus - Tier V - 75%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17172, 0, 1, 0, 0, 0, 0, 1994, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - - (51750, 0, 'MRC - MC Focus - Tier I - 5%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17173, 0, 1, 0, 0, 0, 0, 1965, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51751, 0, 'MRC - MC Focus - Tier II - 10%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17174, 0, 1, 0, 0, 0, 0, 1965, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51752, 0, 'MRC - MC Focus - Tier III - 15%', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17175, 0, 1, 0, 0, 0, 0, 1965, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51753, 0, 'MRC - MC Focus - Tier IV - 20%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17176, 0, 1, 0, 0, 0, 0, 1965, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - (51754, 0, 'MRC - MC Focus - Tier V - 25%' , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '0', 65535, 4278190080, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 17177, 0, 1, 0, 0, 0, 0, 1998, 'IT63', 0, 10, 0, 0, 0, 0, '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 65535, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2011-10-03 10:49:31', '', 0, 0, 0, 0, 1, 1, 0, '', 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 6, 0, 0, 0, -1, 0, 0, 0, 0, '', '2009-05-03 03:13:17', '', '13THFLOOR', 0, '', 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, '0000000000000000000', 0, '', -1, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2008-11-23 02:58:34', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, '', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - -ALTER TABLE mercbuffs RENAME TO merc_buffs; - -DROP TABLE IF EXISTS merc_inventory; - -CREATE TABLE merc_inventory ( - merc_inventory_id int(10) unsigned NOT NULL auto_increment, - merc_subtype_id int(10) unsigned NOT NULL default '0', - item_id int(11) unsigned NOT NULL default '0', - min_level int(10) unsigned NOT NULL default '0', - max_level int(10) unsigned NOT NULL default '0', - PRIMARY KEY (merc_inventory_id), - KEY FK_merc_inventory_1 (merc_subtype_id), - CONSTRAINT FK_merc_inventory_1 FOREIGN KEY (merc_subtype_id) REFERENCES merc_subtypes (merc_subtype_id) -); - -INSERT INTO merc_inventory (merc_subtype_id, item_id, min_level, max_level) VALUES -(6, 51735, 1, 85), -(7, 51736, 1, 85), -(8, 51737, 1, 85), -(9, 51738, 1, 85), -(10, 51739, 1, 85), -(6, 51740, 1, 85), -(7, 51741, 1, 85), -(8, 51742, 1, 85), -(9, 51743, 1, 85), -(10, 51744, 1, 85), -(6, 51745, 1, 85), -(7, 51746, 1, 85), -(8, 51747, 1, 85), -(9, 51748, 1, 85), -(10, 51749, 1, 85), -(6, 51750, 1, 85), -(7, 51751, 1, 85), -(8, 51752, 1, 85), -(9, 51753, 1, 85), -(10, 51754, 1, 85), -(16, 51735, 1, 85), -(17, 51736, 1, 85), -(18, 51737, 1, 85), -(19, 51738, 1, 85), -(20, 51739, 1, 85), -(10, 51739, 1, 85), -(16, 51740, 1, 85), -(17, 51741, 1, 85), -(18, 51742, 1, 85), -(19, 51743, 1, 85), -(20, 51744, 1, 85), -(16, 51745, 1, 85), -(17, 51746, 1, 85), -(18, 51747, 1, 85), -(19, 51748, 1, 85), -(20, 51749, 1, 85), -(16, 51750, 1, 85), -(17, 51751, 1, 85), -(18, 51752, 1, 85), -(19, 51753, 1, 85), -(20, 51754, 1, 85); \ No newline at end of file diff --git a/utils/sql/git/required/2013_03_23_Escape_FadingMemories.sql b/utils/sql/git/required/2013_03_23_Escape_FadingMemories.sql deleted file mode 100644 index e18d2ae6e..000000000 --- a/utils/sql/git/required/2013_03_23_Escape_FadingMemories.sql +++ /dev/null @@ -1,2 +0,0 @@ -UPDATE `aa_actions` SET `spell_id` = '5244', `nonspell_action` = '0' WHERE `aaid` = '243'; -UPDATE `altadv_vars` SET `spellid` = '5244' WHERE `skill_id` = '243'; diff --git a/utils/sql/git/required/2013_04_04_NaturesBounty.sql b/utils/sql/git/required/2013_04_04_NaturesBounty.sql deleted file mode 100644 index fd6a904d1..000000000 --- a/utils/sql/git/required/2013_04_04_NaturesBounty.sql +++ /dev/null @@ -1,12 +0,0 @@ --- Nature's Bounty -INSERT INTO `altadv_vars` (`skill_id`, `name`, `cost`, `max_level`, `hotkey_sid`, `hotkey_sid2`, `title_sid`, `desc_sid`, `type`, `spellid`, `prereq_skill`, `prereq_minpoints`, `spell_type`, `spell_refresh`, `classes`, `berserker`, `class_type`, `cost_inc`, `aa_expansion`, `special_category`, `sof_type`, `sof_cost_inc`, `sof_max_level`, `sof_next_skill`, `clientver`, `account_time_required`, `sof_current_level`, `sof_next_id`, `level_inc`) VALUES ('1230', 'Nature''s Bounty', '1', '3', '4294967295', '4294967295', '1230', '1230', '7', '0', '0', '0', '0', '0', '80', '0', '51', '1', '8', '4294967295', '3', '0', '6', '1230', '1', '0', '0', '5000', '2'); -INSERT INTO `aa_effects` (`id`, `aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('2368', '1230', '1', '313', '15', '0'); -INSERT INTO `aa_effects` (`id`, `aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('2369', '1231', '1', '313', '20', '0'); -INSERT INTO `aa_effects` (`id`, `aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('2370', '1232', '1', '313', '25', '0'); - --- Survivalist -INSERT INTO `altadv_vars` (`skill_id`, `name`, `cost`, `max_level`, `hotkey_sid`, `hotkey_sid2`, `title_sid`, `desc_sid`, `type`, `spellid`, `prereq_skill`, `prereq_minpoints`, `spell_type`, `spell_refresh`, `classes`, `berserker`, `class_type`, `cost_inc`, `aa_expansion`, `special_category`, `sof_type`, `sof_cost_inc`, `sof_max_level`, `sof_next_skill`, `clientver`, `account_time_required`, `sof_current_level`, `sof_next_id`, `level_inc`) VALUES ('5000', 'Survivalist', '2', '3', '4294967295', '4294967295', '5000', '5000', '7', '4294967295', '1230', '3', '0', '0', '80', '0', '71', '0', '12', '4294967295', '3', '0', '6', '1230', '1', '0', '3', '0', '2'); -INSERT INTO `aa_effects` (`id`, `aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('2371', '5000', '1', '313', '50', '0'); -INSERT INTO `aa_effects` (`id`, `aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('2372', '5001', '1', '313', '75', '0'); -INSERT INTO `aa_effects` (`id`, `aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('2373', '5002', '1', '313', '100', '0'); - diff --git a/utils/sql/git/required/2013_04_08_Salvage.sql b/utils/sql/git/required/2013_04_08_Salvage.sql deleted file mode 100644 index a98aad2f3..000000000 --- a/utils/sql/git/required/2013_04_08_Salvage.sql +++ /dev/null @@ -1,11 +0,0 @@ --- Add row to tre -ALTER TABLE `tradeskill_recipe_entries` ADD `salvagecount` tinyint(2) DEFAULT '0' NOT NULL AFTER `componentcount`; - --- Fix level req on Salvage -UPDATE `altadv_vars` SET `level_inc` = '5' WHERE `skill_id` = '997'; - --- Set aa_effects for Salvage -INSERT INTO `aa_effects` (`id`, `aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('2374', '997', '1', '313', '5', '0'); -INSERT INTO `aa_effects` (`id`, `aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('2375', '998', '1', '313', '15', '0'); -INSERT INTO `aa_effects` (`id`, `aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('2376', '999', '1', '313', '25', '0'); - diff --git a/utils/sql/git/required/2013_05_05_Account_Flags.sql b/utils/sql/git/required/2013_05_05_Account_Flags.sql deleted file mode 100644 index 522a9fa49..000000000 --- a/utils/sql/git/required/2013_05_05_Account_Flags.sql +++ /dev/null @@ -1,11 +0,0 @@ --- --- Table structure for table `account_flags` --- - -CREATE TABLE IF NOT EXISTS `account_flags` ( - `p_accid` int(10) unsigned NOT NULL, - `p_flag` varchar(50) NOT NULL, - `p_value` varchar(80) NOT NULL, - PRIMARY KEY (`p_accid`,`p_flag`), - KEY `p_accid` (`p_accid`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1; diff --git a/utils/sql/git/required/2013_05_05_Item_Tick.sql b/utils/sql/git/required/2013_05_05_Item_Tick.sql deleted file mode 100644 index 4e3e1c41d..000000000 --- a/utils/sql/git/required/2013_05_05_Item_Tick.sql +++ /dev/null @@ -1,13 +0,0 @@ --- --- Table structure for table `item_tick` --- - -CREATE TABLE IF NOT EXISTS `item_tick` ( - `it_itemid` int(11) NOT NULL, - `it_chance` int(11) NOT NULL, - `it_level` int(11) NOT NULL, - `it_id` int(11) NOT NULL AUTO_INCREMENT, - `it_qglobal` varchar(50) NOT NULL, - `it_bagslot` tinyint(4) NOT NULL, - PRIMARY KEY (`it_id`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1; diff --git a/utils/sql/git/required/2013_07_11_NPC_Special_Abilities.sql b/utils/sql/git/required/2013_07_11_NPC_Special_Abilities.sql deleted file mode 100644 index e93989777..000000000 --- a/utils/sql/git/required/2013_07_11_NPC_Special_Abilities.sql +++ /dev/null @@ -1,41 +0,0 @@ -ALTER TABLE `npc_types` ADD COLUMN `special_abilities` TEXT NULL AFTER `npcspecialattks`; -ALTER TABLE `npc_types` MODIFY COLUMN `special_abilities` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL; - -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "1,1^") WHERE npcspecialattks LIKE BINARY '%S%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "2,1^") WHERE npcspecialattks LIKE BINARY '%E%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "3,1^") WHERE npcspecialattks LIKE BINARY '%R%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "4,1^") WHERE npcspecialattks LIKE BINARY '%r%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "5,1^") WHERE npcspecialattks LIKE BINARY '%F%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "6,1^") WHERE npcspecialattks LIKE BINARY '%T%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "7,1^") WHERE npcspecialattks LIKE BINARY '%Q%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "8,1^") WHERE npcspecialattks LIKE BINARY '%L%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "9,1^") WHERE npcspecialattks LIKE BINARY '%b%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "10,1^") WHERE npcspecialattks LIKE BINARY '%m%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "11,1^") WHERE npcspecialattks LIKE BINARY '%Y%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "12,1^") WHERE npcspecialattks LIKE BINARY '%U%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "13,1^") WHERE npcspecialattks LIKE BINARY '%M%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "14,1^") WHERE npcspecialattks LIKE BINARY '%C%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "15,1^") WHERE npcspecialattks LIKE BINARY '%N%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "16,1^") WHERE npcspecialattks LIKE BINARY '%I%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "17,1^") WHERE npcspecialattks LIKE BINARY '%D%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "18,1^") WHERE npcspecialattks LIKE BINARY '%K%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "19,1^") WHERE npcspecialattks LIKE BINARY '%A%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "20,1^") WHERE npcspecialattks LIKE BINARY '%B%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "21,1^") WHERE npcspecialattks LIKE BINARY '%f%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "22,1^") WHERE npcspecialattks LIKE BINARY '%O%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "23,1^") WHERE npcspecialattks LIKE BINARY '%W%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "24,1^") WHERE npcspecialattks LIKE BINARY '%H%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "25,1^") WHERE npcspecialattks LIKE BINARY '%G%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "26,1^") WHERE npcspecialattks LIKE BINARY '%g%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "27,1^") WHERE npcspecialattks LIKE BINARY '%d%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "28,1^") WHERE npcspecialattks LIKE BINARY '%i%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "29,1^") WHERE npcspecialattks LIKE BINARY '%t%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "30,1^") WHERE npcspecialattks LIKE BINARY '%n%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "31,1^") WHERE npcspecialattks LIKE BINARY '%p%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "32,1^") WHERE npcspecialattks LIKE BINARY '%J%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "33,1^") WHERE npcspecialattks LIKE BINARY '%j%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "34,1^") WHERE npcspecialattks LIKE BINARY '%o%'; -UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "35,1^") WHERE npcspecialattks LIKE BINARY '%Z%'; -UPDATE npc_types SET special_abilities = TRIM(TRAILING '^' FROM special_abilities); - -ALTER TABLE `npc_types` DROP COLUMN `npcspecialattks`; \ No newline at end of file diff --git a/utils/sql/git/required/2013_10_12_Merc_Special_Abilities.sql b/utils/sql/git/required/2013_10_12_Merc_Special_Abilities.sql deleted file mode 100644 index cf63625da..000000000 --- a/utils/sql/git/required/2013_10_12_Merc_Special_Abilities.sql +++ /dev/null @@ -1,41 +0,0 @@ -ALTER TABLE `merc_stats` ADD COLUMN `special_abilities` TEXT NULL AFTER `specialattks`; -ALTER TABLE `merc_stats` MODIFY COLUMN `special_abilities` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL; - -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "1,1^") WHERE specialattks LIKE BINARY '%S%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "2,1^") WHERE specialattks LIKE BINARY '%E%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "3,1^") WHERE specialattks LIKE BINARY '%R%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "4,1^") WHERE specialattks LIKE BINARY '%r%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "5,1^") WHERE specialattks LIKE BINARY '%F%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "6,1^") WHERE specialattks LIKE BINARY '%T%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "7,1^") WHERE specialattks LIKE BINARY '%Q%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "8,1^") WHERE specialattks LIKE BINARY '%L%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "9,1^") WHERE specialattks LIKE BINARY '%b%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "10,1^") WHERE specialattks LIKE BINARY '%m%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "11,1^") WHERE specialattks LIKE BINARY '%Y%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "12,1^") WHERE specialattks LIKE BINARY '%U%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "13,1^") WHERE specialattks LIKE BINARY '%M%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "14,1^") WHERE specialattks LIKE BINARY '%C%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "15,1^") WHERE specialattks LIKE BINARY '%N%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "16,1^") WHERE specialattks LIKE BINARY '%I%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "17,1^") WHERE specialattks LIKE BINARY '%D%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "18,1^") WHERE specialattks LIKE BINARY '%K%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "19,1^") WHERE specialattks LIKE BINARY '%A%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "20,1^") WHERE specialattks LIKE BINARY '%B%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "21,1^") WHERE specialattks LIKE BINARY '%f%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "22,1^") WHERE specialattks LIKE BINARY '%O%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "23,1^") WHERE specialattks LIKE BINARY '%W%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "24,1^") WHERE specialattks LIKE BINARY '%H%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "25,1^") WHERE specialattks LIKE BINARY '%G%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "26,1^") WHERE specialattks LIKE BINARY '%g%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "27,1^") WHERE specialattks LIKE BINARY '%d%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "28,1^") WHERE specialattks LIKE BINARY '%i%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "29,1^") WHERE specialattks LIKE BINARY '%t%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "30,1^") WHERE specialattks LIKE BINARY '%n%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "31,1^") WHERE specialattks LIKE BINARY '%p%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "32,1^") WHERE specialattks LIKE BINARY '%J%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "33,1^") WHERE specialattks LIKE BINARY '%j%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "34,1^") WHERE specialattks LIKE BINARY '%o%'; -UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "35,1^") WHERE specialattks LIKE BINARY '%Z%'; -UPDATE merc_stats SET special_abilities = TRIM(TRAILING '^' FROM special_abilities); - -ALTER TABLE `merc_stats` DROP COLUMN `specialattks`; \ No newline at end of file diff --git a/utils/sql/git/required/2013_10_12_Merc_vwMercNpcTypes.sql b/utils/sql/git/required/2013_10_12_Merc_vwMercNpcTypes.sql deleted file mode 100644 index 75d7d75e1..000000000 --- a/utils/sql/git/required/2013_10_12_Merc_vwMercNpcTypes.sql +++ /dev/null @@ -1,62 +0,0 @@ -DROP VIEW IF EXISTS vwMercNpcTypes; -CREATE VIEW vwMercNpcTypes AS -SELECT - ms.merc_npc_type_id, - '' AS name, - ms.clientlevel, - ms.level, - mtyp.race_id, - mstyp.class_id, - ms.hp, - ms.mana, - 0 AS gender, - mai.texture, - mai.helmtexture, - ms.attack_speed, - ms.STR, - ms.STA, - ms.DEX, - ms.AGI, - ms._INT, - ms.WIS, - ms.CHA, - ms.MR, - ms.CR, - ms.DR, - ms.FR, - ms.PR, - ms.Corrup, - ms.mindmg, - ms.maxdmg, - ms.attack_count, - ms.special_abilities, - mwi.d_meele_texture1, - mwi.d_meele_texture2, - mwi.prim_melee_type, - mwi.sec_melee_type, - ms.runspeed, - ms.hp_regen_rate, - ms.mana_regen_rate, - 1 AS bodytype, - mai.armortint_id, - mai.armortint_red, - mai.armortint_green, - mai.armortint_blue, - ms.AC, - ms.ATK, - ms.Accuracy, - ms.spellscale, - ms.healscale - FROM merc_stats ms - INNER JOIN merc_armorinfo mai - ON ms.merc_npc_type_id = mai.merc_npc_type_id - AND mai.minlevel <= ms.level AND mai.maxlevel >= ms.level - INNER JOIN merc_weaponinfo mwi - ON ms.merc_npc_type_id = mwi.merc_npc_type_id - AND mwi.minlevel <= ms.level AND mwi.maxlevel >= ms.level - INNER JOIN merc_templates mtem - ON mtem.merc_npc_type_id = ms.merc_npc_type_id - INNER JOIN merc_types mtyp - ON mtem.merc_type_id = mtyp.merc_type_id - INNER JOIN merc_subtypes mstyp - ON mtem.merc_subtype_id = mstyp.merc_subtype_id; \ No newline at end of file diff --git a/utils/sql/git/required/2013_10_31_Recipe_disabling.sql b/utils/sql/git/required/2013_10_31_Recipe_disabling.sql deleted file mode 100644 index 14bd7d7ff..000000000 --- a/utils/sql/git/required/2013_10_31_Recipe_disabling.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `tradeskill_recipe` ADD `enabled` tinyint(1) NOT NULL DEFAULT '1'; diff --git a/utils/sql/git/required/2013_11_07_BaseData.sql b/utils/sql/git/required/2013_11_07_BaseData.sql deleted file mode 100644 index 47d3e622e..000000000 --- a/utils/sql/git/required/2013_11_07_BaseData.sql +++ /dev/null @@ -1,1374 +0,0 @@ -CREATE TABLE IF NOT EXISTS `base_data` ( - `level` INT(10) UNSIGNED NOT NULL, - `class` INT(10) UNSIGNED NOT NULL, - `hp` DOUBLE NOT NULL, - `mana` DOUBLE NOT NULL, - `end` DOUBLE NOT NULL, - `unk1` DOUBLE NOT NULL, - `unk2` DOUBLE NOT NULL, - `hp_fac` DOUBLE NOT NULL, - `mana_fac` DOUBLE NOT NULL, - `end_fac` DOUBLE NOT NULL, - PRIMARY KEY (`level`, `class`) -); - -INSERT INTO base_data VALUES(1, 1, 25, 0, 15, 2, 5, 0.083, 0, 0.075); -INSERT INTO base_data VALUES(1, 2, 22, 15, 15, 2, 5, 0.073, 0.075, 0.075); -INSERT INTO base_data VALUES(1, 3, 24, 15, 15, 2, 5, 0.08, 0.075, 0.075); -INSERT INTO base_data VALUES(1, 4, 23, 15, 15, 2, 5, 0.077, 0.075, 0.075); -INSERT INTO base_data VALUES(1, 5, 24, 15, 15, 2, 5, 0.08, 0.075, 0.075); -INSERT INTO base_data VALUES(1, 6, 20, 15, 15, 2, 5, 0.067, 0.075, 0.075); -INSERT INTO base_data VALUES(1, 7, 21.3, 0, 15, 2, 5, 0.071, 0, 0.075); -INSERT INTO base_data VALUES(1, 8, 22, 15, 15, 2, 5, 0.073, 0.075, 0.075); -INSERT INTO base_data VALUES(1, 9, 21.3, 0, 15, 2, 5, 0.071, 0, 0.075); -INSERT INTO base_data VALUES(1, 10, 21.3, 15, 15, 2, 5, 0.071, 0.075, 0.075); -INSERT INTO base_data VALUES(1, 11, 20, 15, 15, 2, 5, 0.067, 0.075, 0.075); -INSERT INTO base_data VALUES(1, 12, 20, 15, 15, 2, 5, 0.067, 0.075, 0.075); -INSERT INTO base_data VALUES(1, 13, 20, 15, 15, 2, 5, 0.067, 0.075, 0.075); -INSERT INTO base_data VALUES(1, 14, 20, 15, 15, 2, 5, 0.067, 0.075, 0.075); -INSERT INTO base_data VALUES(1, 15, 21.3, 15, 15, 2, 5, 0.071, 0.075, 0.075); -INSERT INTO base_data VALUES(1, 16, 21.3, 0, 15, 2, 5, 0.071, 0, 0.075); -INSERT INTO base_data VALUES(2, 1, 50, 0, 30, 2, 5, 0.167, 0, 0.15); -INSERT INTO base_data VALUES(2, 2, 44, 30, 30, 2, 5, 0.147, 0.15, 0.15); -INSERT INTO base_data VALUES(2, 3, 48, 30, 30, 2, 5, 0.16, 0.15, 0.15); -INSERT INTO base_data VALUES(2, 4, 46, 30, 30, 2, 5, 0.153, 0.15, 0.15); -INSERT INTO base_data VALUES(2, 5, 48, 30, 30, 2, 5, 0.16, 0.15, 0.15); -INSERT INTO base_data VALUES(2, 6, 40, 30, 30, 2, 5, 0.133, 0.15, 0.15); -INSERT INTO base_data VALUES(2, 7, 42.5, 0, 30, 2, 5, 0.142, 0, 0.15); -INSERT INTO base_data VALUES(2, 8, 44, 30, 30, 2, 5, 0.147, 0.15, 0.15); -INSERT INTO base_data VALUES(2, 9, 42.5, 0, 30, 2, 5, 0.142, 0, 0.15); -INSERT INTO base_data VALUES(2, 10, 42.5, 30, 30, 2, 5, 0.142, 0.15, 0.15); -INSERT INTO base_data VALUES(2, 11, 40, 30, 30, 2, 5, 0.133, 0.15, 0.15); -INSERT INTO base_data VALUES(2, 12, 40, 30, 30, 2, 5, 0.133, 0.15, 0.15); -INSERT INTO base_data VALUES(2, 13, 40, 30, 30, 2, 5, 0.133, 0.15, 0.15); -INSERT INTO base_data VALUES(2, 14, 40, 30, 30, 2, 5, 0.133, 0.15, 0.15); -INSERT INTO base_data VALUES(2, 15, 42.5, 30, 30, 2, 5, 0.142, 0.15, 0.15); -INSERT INTO base_data VALUES(2, 16, 42.5, 0, 30, 2, 5, 0.142, 0, 0.15); -INSERT INTO base_data VALUES(3, 1, 75, 0, 45, 2, 5, 0.25, 0, 0.225); -INSERT INTO base_data VALUES(3, 2, 66, 45, 45, 2, 5, 0.22, 0.225, 0.225); -INSERT INTO base_data VALUES(3, 3, 72, 45, 45, 2, 5, 0.24, 0.225, 0.225); -INSERT INTO base_data VALUES(3, 4, 69, 45, 45, 2, 5, 0.23, 0.225, 0.225); -INSERT INTO base_data VALUES(3, 5, 72, 45, 45, 2, 5, 0.24, 0.225, 0.225); -INSERT INTO base_data VALUES(3, 6, 60, 45, 45, 2, 5, 0.2, 0.225, 0.225); -INSERT INTO base_data VALUES(3, 7, 63.75, 0, 45, 2, 5, 0.213, 0, 0.225); -INSERT INTO base_data VALUES(3, 8, 66, 45, 45, 2, 5, 0.22, 0.225, 0.225); -INSERT INTO base_data VALUES(3, 9, 63.75, 0, 45, 2, 5, 0.213, 0, 0.225); -INSERT INTO base_data VALUES(3, 10, 63.75, 45, 45, 2, 5, 0.213, 0.225, 0.225); -INSERT INTO base_data VALUES(3, 11, 60, 45, 45, 2, 5, 0.2, 0.225, 0.225); -INSERT INTO base_data VALUES(3, 12, 60, 45, 45, 2, 5, 0.2, 0.225, 0.225); -INSERT INTO base_data VALUES(3, 13, 60, 45, 45, 2, 5, 0.2, 0.225, 0.225); -INSERT INTO base_data VALUES(3, 14, 60, 45, 45, 2, 5, 0.2, 0.225, 0.225); -INSERT INTO base_data VALUES(3, 15, 63.75, 45, 45, 2, 5, 0.213, 0.225, 0.225); -INSERT INTO base_data VALUES(3, 16, 63.75, 0, 45, 2, 5, 0.213, 0, 0.225); -INSERT INTO base_data VALUES(4, 1, 100, 0, 60, 2, 5, 0.333, 0, 0.3); -INSERT INTO base_data VALUES(4, 2, 88, 60, 60, 2, 5, 0.293, 0.3, 0.3); -INSERT INTO base_data VALUES(4, 3, 96, 60, 60, 2, 5, 0.32, 0.3, 0.3); -INSERT INTO base_data VALUES(4, 4, 92, 60, 60, 2, 5, 0.307, 0.3, 0.3); -INSERT INTO base_data VALUES(4, 5, 96, 60, 60, 2, 5, 0.32, 0.3, 0.3); -INSERT INTO base_data VALUES(4, 6, 80, 60, 60, 2, 5, 0.267, 0.3, 0.3); -INSERT INTO base_data VALUES(4, 7, 85, 0, 60, 2, 5, 0.283, 0, 0.3); -INSERT INTO base_data VALUES(4, 8, 88, 60, 60, 2, 5, 0.293, 0.3, 0.3); -INSERT INTO base_data VALUES(4, 9, 85, 0, 60, 2, 5, 0.283, 0, 0.3); -INSERT INTO base_data VALUES(4, 10, 85, 60, 60, 2, 5, 0.283, 0.3, 0.3); -INSERT INTO base_data VALUES(4, 11, 80, 60, 60, 2, 5, 0.267, 0.3, 0.3); -INSERT INTO base_data VALUES(4, 12, 80, 60, 60, 2, 5, 0.267, 0.3, 0.3); -INSERT INTO base_data VALUES(4, 13, 80, 60, 60, 2, 5, 0.267, 0.3, 0.3); -INSERT INTO base_data VALUES(4, 14, 80, 60, 60, 2, 5, 0.267, 0.3, 0.3); -INSERT INTO base_data VALUES(4, 15, 85, 60, 60, 2, 5, 0.283, 0.3, 0.3); -INSERT INTO base_data VALUES(4, 16, 85, 0, 60, 2, 5, 0.283, 0, 0.3); -INSERT INTO base_data VALUES(5, 1, 125, 0, 75, 2, 5, 0.417, 0, 0.375); -INSERT INTO base_data VALUES(5, 2, 110, 75, 75, 2, 5, 0.367, 0.375, 0.375); -INSERT INTO base_data VALUES(5, 3, 120, 75, 75, 2, 5, 0.4, 0.375, 0.375); -INSERT INTO base_data VALUES(5, 4, 115, 75, 75, 2, 5, 0.383, 0.375, 0.375); -INSERT INTO base_data VALUES(5, 5, 120, 75, 75, 2, 5, 0.4, 0.375, 0.375); -INSERT INTO base_data VALUES(5, 6, 100, 75, 75, 2, 5, 0.333, 0.375, 0.375); -INSERT INTO base_data VALUES(5, 7, 106.25, 0, 75, 2, 5, 0.354, 0, 0.375); -INSERT INTO base_data VALUES(5, 8, 110, 75, 75, 2, 5, 0.367, 0.375, 0.375); -INSERT INTO base_data VALUES(5, 9, 106.25, 0, 75, 2, 5, 0.354, 0, 0.375); -INSERT INTO base_data VALUES(5, 10, 106.25, 75, 75, 2, 5, 0.354, 0.375, 0.375); -INSERT INTO base_data VALUES(5, 11, 100, 75, 75, 2, 5, 0.333, 0.375, 0.375); -INSERT INTO base_data VALUES(5, 12, 100, 75, 75, 2, 5, 0.333, 0.375, 0.375); -INSERT INTO base_data VALUES(5, 13, 100, 75, 75, 2, 5, 0.333, 0.375, 0.375); -INSERT INTO base_data VALUES(5, 14, 100, 75, 75, 2, 5, 0.333, 0.375, 0.375); -INSERT INTO base_data VALUES(5, 15, 106.25, 75, 75, 2, 5, 0.354, 0.375, 0.375); -INSERT INTO base_data VALUES(5, 16, 106.25, 0, 75, 2, 5, 0.354, 0, 0.375); -INSERT INTO base_data VALUES(6, 1, 150, 0, 90, 2, 5, 0.5, 0, 0.45); -INSERT INTO base_data VALUES(6, 2, 132, 90, 90, 2, 5, 0.44, 0.45, 0.45); -INSERT INTO base_data VALUES(6, 3, 144, 90, 90, 2, 5, 0.48, 0.45, 0.45); -INSERT INTO base_data VALUES(6, 4, 138, 90, 90, 2, 5, 0.46, 0.45, 0.45); -INSERT INTO base_data VALUES(6, 5, 144, 90, 90, 2, 5, 0.48, 0.45, 0.45); -INSERT INTO base_data VALUES(6, 6, 120, 90, 90, 2, 5, 0.4, 0.45, 0.45); -INSERT INTO base_data VALUES(6, 7, 127.5, 0, 90, 2, 5, 0.425, 0, 0.45); -INSERT INTO base_data VALUES(6, 8, 132, 90, 90, 2, 5, 0.44, 0.45, 0.45); -INSERT INTO base_data VALUES(6, 9, 127.5, 0, 90, 2, 5, 0.425, 0, 0.45); -INSERT INTO base_data VALUES(6, 10, 127.5, 90, 90, 2, 5, 0.425, 0.45, 0.45); -INSERT INTO base_data VALUES(6, 11, 120, 90, 90, 2, 5, 0.4, 0.45, 0.45); -INSERT INTO base_data VALUES(6, 12, 120, 90, 90, 2, 5, 0.4, 0.45, 0.45); -INSERT INTO base_data VALUES(6, 13, 120, 90, 90, 2, 5, 0.4, 0.45, 0.45); -INSERT INTO base_data VALUES(6, 14, 120, 90, 90, 2, 5, 0.4, 0.45, 0.45); -INSERT INTO base_data VALUES(6, 15, 127.5, 90, 90, 2, 5, 0.425, 0.45, 0.45); -INSERT INTO base_data VALUES(6, 16, 127.5, 0, 90, 2, 5, 0.425, 0, 0.45); -INSERT INTO base_data VALUES(7, 1, 175, 0, 105, 2, 5, 0.583, 0, 0.525); -INSERT INTO base_data VALUES(7, 2, 154, 105, 105, 2, 5, 0.513, 0.525, 0.525); -INSERT INTO base_data VALUES(7, 3, 168, 105, 105, 2, 5, 0.56, 0.525, 0.525); -INSERT INTO base_data VALUES(7, 4, 161, 105, 105, 2, 5, 0.537, 0.525, 0.525); -INSERT INTO base_data VALUES(7, 5, 168, 105, 105, 2, 5, 0.56, 0.525, 0.525); -INSERT INTO base_data VALUES(7, 6, 140, 105, 105, 2, 5, 0.467, 0.525, 0.525); -INSERT INTO base_data VALUES(7, 7, 148.75, 0, 105, 2, 5, 0.496, 0, 0.525); -INSERT INTO base_data VALUES(7, 8, 154, 105, 105, 2, 5, 0.513, 0.525, 0.525); -INSERT INTO base_data VALUES(7, 9, 148.75, 0, 105, 2, 5, 0.496, 0, 0.525); -INSERT INTO base_data VALUES(7, 10, 148.75, 105, 105, 2, 5, 0.496, 0.525, 0.525); -INSERT INTO base_data VALUES(7, 11, 140, 105, 105, 2, 5, 0.467, 0.525, 0.525); -INSERT INTO base_data VALUES(7, 12, 140, 105, 105, 2, 5, 0.467, 0.525, 0.525); -INSERT INTO base_data VALUES(7, 13, 140, 105, 105, 2, 5, 0.467, 0.525, 0.525); -INSERT INTO base_data VALUES(7, 14, 140, 105, 105, 2, 5, 0.467, 0.525, 0.525); -INSERT INTO base_data VALUES(7, 15, 148.75, 105, 105, 2, 5, 0.496, 0.525, 0.525); -INSERT INTO base_data VALUES(7, 16, 148.75, 0, 105, 2, 5, 0.496, 0, 0.525); -INSERT INTO base_data VALUES(8, 1, 200, 0, 120, 2, 5, 0.667, 0, 0.6); -INSERT INTO base_data VALUES(8, 2, 176, 120, 120, 2, 5, 0.587, 0.6, 0.6); -INSERT INTO base_data VALUES(8, 3, 192, 120, 120, 2, 5, 0.64, 0.6, 0.6); -INSERT INTO base_data VALUES(8, 4, 184, 120, 120, 2, 5, 0.613, 0.6, 0.6); -INSERT INTO base_data VALUES(8, 5, 192, 120, 120, 2, 5, 0.64, 0.6, 0.6); -INSERT INTO base_data VALUES(8, 6, 160, 120, 120, 2, 5, 0.533, 0.6, 0.6); -INSERT INTO base_data VALUES(8, 7, 170, 0, 120, 2, 5, 0.567, 0, 0.6); -INSERT INTO base_data VALUES(8, 8, 176, 120, 120, 2, 5, 0.587, 0.6, 0.6); -INSERT INTO base_data VALUES(8, 9, 170, 0, 120, 2, 5, 0.567, 0, 0.6); -INSERT INTO base_data VALUES(8, 10, 170, 120, 120, 2, 5, 0.567, 0.6, 0.6); -INSERT INTO base_data VALUES(8, 11, 160, 120, 120, 2, 5, 0.533, 0.6, 0.6); -INSERT INTO base_data VALUES(8, 12, 160, 120, 120, 2, 5, 0.533, 0.6, 0.6); -INSERT INTO base_data VALUES(8, 13, 160, 120, 120, 2, 5, 0.533, 0.6, 0.6); -INSERT INTO base_data VALUES(8, 14, 160, 120, 120, 2, 5, 0.533, 0.6, 0.6); -INSERT INTO base_data VALUES(8, 15, 170, 120, 120, 2, 5, 0.567, 0.6, 0.6); -INSERT INTO base_data VALUES(8, 16, 170, 0, 120, 2, 5, 0.567, 0, 0.6); -INSERT INTO base_data VALUES(9, 1, 225, 0, 135, 2, 5, 0.75, 0, 0.675); -INSERT INTO base_data VALUES(9, 2, 198, 135, 135, 2, 5, 0.66, 0.675, 0.675); -INSERT INTO base_data VALUES(9, 3, 216, 135, 135, 2, 5, 0.72, 0.675, 0.675); -INSERT INTO base_data VALUES(9, 4, 207, 135, 135, 2, 5, 0.69, 0.675, 0.675); -INSERT INTO base_data VALUES(9, 5, 216, 135, 135, 2, 5, 0.72, 0.675, 0.675); -INSERT INTO base_data VALUES(9, 6, 180, 135, 135, 2, 5, 0.6, 0.675, 0.675); -INSERT INTO base_data VALUES(9, 7, 191.25, 0, 135, 2, 5, 0.638, 0, 0.675); -INSERT INTO base_data VALUES(9, 8, 198, 135, 135, 2, 5, 0.66, 0.675, 0.675); -INSERT INTO base_data VALUES(9, 9, 191.25, 0, 135, 2, 5, 0.638, 0, 0.675); -INSERT INTO base_data VALUES(9, 10, 191.25, 135, 135, 2, 5, 0.638, 0.675, 0.675); -INSERT INTO base_data VALUES(9, 11, 180, 135, 135, 2, 5, 0.6, 0.675, 0.675); -INSERT INTO base_data VALUES(9, 12, 180, 135, 135, 2, 5, 0.6, 0.675, 0.675); -INSERT INTO base_data VALUES(9, 13, 180, 135, 135, 2, 5, 0.6, 0.675, 0.675); -INSERT INTO base_data VALUES(9, 14, 180, 135, 135, 2, 5, 0.6, 0.675, 0.675); -INSERT INTO base_data VALUES(9, 15, 191.25, 135, 135, 2, 5, 0.638, 0.675, 0.675); -INSERT INTO base_data VALUES(9, 16, 191.25, 0, 135, 2, 5, 0.638, 0, 0.675); -INSERT INTO base_data VALUES(10, 1, 250, 0, 150, 3, 5, 0.833, 0, 0.75); -INSERT INTO base_data VALUES(10, 2, 220, 150, 150, 3, 5, 0.733, 0.75, 0.75); -INSERT INTO base_data VALUES(10, 3, 240, 150, 150, 3, 5, 0.8, 0.75, 0.75); -INSERT INTO base_data VALUES(10, 4, 230, 150, 150, 3, 5, 0.767, 0.75, 0.75); -INSERT INTO base_data VALUES(10, 5, 240, 150, 150, 3, 5, 0.8, 0.75, 0.75); -INSERT INTO base_data VALUES(10, 6, 200, 150, 150, 3, 5, 0.667, 0.75, 0.75); -INSERT INTO base_data VALUES(10, 7, 212.5, 0, 150, 3, 5, 0.708, 0, 0.75); -INSERT INTO base_data VALUES(10, 8, 220, 150, 150, 3, 5, 0.733, 0.75, 0.75); -INSERT INTO base_data VALUES(10, 9, 212.5, 0, 150, 3, 5, 0.708, 0, 0.75); -INSERT INTO base_data VALUES(10, 10, 212.5, 150, 150, 3, 5, 0.708, 0.75, 0.75); -INSERT INTO base_data VALUES(10, 11, 200, 150, 150, 3, 5, 0.667, 0.75, 0.75); -INSERT INTO base_data VALUES(10, 12, 200, 150, 150, 3, 5, 0.667, 0.75, 0.75); -INSERT INTO base_data VALUES(10, 13, 200, 150, 150, 3, 5, 0.667, 0.75, 0.75); -INSERT INTO base_data VALUES(10, 14, 200, 150, 150, 3, 5, 0.667, 0.75, 0.75); -INSERT INTO base_data VALUES(10, 15, 212.5, 150, 150, 3, 5, 0.708, 0.75, 0.75); -INSERT INTO base_data VALUES(10, 16, 212.5, 0, 150, 3, 5, 0.708, 0, 0.75); -INSERT INTO base_data VALUES(11, 1, 275, 0, 165, 3, 5, 0.917, 0, 0.825); -INSERT INTO base_data VALUES(11, 2, 242, 165, 165, 3, 5, 0.807, 0.825, 0.825); -INSERT INTO base_data VALUES(11, 3, 264, 165, 165, 3, 5, 0.88, 0.825, 0.825); -INSERT INTO base_data VALUES(11, 4, 253, 165, 165, 3, 5, 0.843, 0.825, 0.825); -INSERT INTO base_data VALUES(11, 5, 264, 165, 165, 3, 5, 0.88, 0.825, 0.825); -INSERT INTO base_data VALUES(11, 6, 220, 165, 165, 3, 5, 0.733, 0.825, 0.825); -INSERT INTO base_data VALUES(11, 7, 233.75, 0, 165, 3, 5, 0.779, 0, 0.825); -INSERT INTO base_data VALUES(11, 8, 242, 165, 165, 3, 5, 0.807, 0.825, 0.825); -INSERT INTO base_data VALUES(11, 9, 233.75, 0, 165, 3, 5, 0.779, 0, 0.825); -INSERT INTO base_data VALUES(11, 10, 233.75, 165, 165, 3, 5, 0.779, 0.825, 0.825); -INSERT INTO base_data VALUES(11, 11, 220, 165, 165, 3, 5, 0.733, 0.825, 0.825); -INSERT INTO base_data VALUES(11, 12, 220, 165, 165, 3, 5, 0.733, 0.825, 0.825); -INSERT INTO base_data VALUES(11, 13, 220, 165, 165, 3, 5, 0.733, 0.825, 0.825); -INSERT INTO base_data VALUES(11, 14, 220, 165, 165, 3, 5, 0.733, 0.825, 0.825); -INSERT INTO base_data VALUES(11, 15, 233.75, 165, 165, 3, 5, 0.779, 0.825, 0.825); -INSERT INTO base_data VALUES(11, 16, 233.75, 0, 165, 3, 5, 0.779, 0, 0.825); -INSERT INTO base_data VALUES(12, 1, 300, 0, 180, 3, 5, 1, 0, 0.9); -INSERT INTO base_data VALUES(12, 2, 264, 180, 180, 3, 5, 0.88, 0.9, 0.9); -INSERT INTO base_data VALUES(12, 3, 288, 180, 180, 3, 5, 0.96, 0.9, 0.9); -INSERT INTO base_data VALUES(12, 4, 276, 180, 180, 3, 5, 0.92, 0.9, 0.9); -INSERT INTO base_data VALUES(12, 5, 288, 180, 180, 3, 5, 0.96, 0.9, 0.9); -INSERT INTO base_data VALUES(12, 6, 240, 180, 180, 3, 5, 0.8, 0.9, 0.9); -INSERT INTO base_data VALUES(12, 7, 255, 0, 180, 3, 5, 0.85, 0, 0.9); -INSERT INTO base_data VALUES(12, 8, 264, 180, 180, 3, 5, 0.88, 0.9, 0.9); -INSERT INTO base_data VALUES(12, 9, 255, 0, 180, 3, 5, 0.85, 0, 0.9); -INSERT INTO base_data VALUES(12, 10, 255, 180, 180, 3, 5, 0.85, 0.9, 0.9); -INSERT INTO base_data VALUES(12, 11, 240, 180, 180, 3, 5, 0.8, 0.9, 0.9); -INSERT INTO base_data VALUES(12, 12, 240, 180, 180, 3, 5, 0.8, 0.9, 0.9); -INSERT INTO base_data VALUES(12, 13, 240, 180, 180, 3, 5, 0.8, 0.9, 0.9); -INSERT INTO base_data VALUES(12, 14, 240, 180, 180, 3, 5, 0.8, 0.9, 0.9); -INSERT INTO base_data VALUES(12, 15, 255, 180, 180, 3, 5, 0.85, 0.9, 0.9); -INSERT INTO base_data VALUES(12, 16, 255, 0, 180, 3, 5, 0.85, 0, 0.9); -INSERT INTO base_data VALUES(13, 1, 325, 0, 195, 3, 5, 1.083, 0, 0.975); -INSERT INTO base_data VALUES(13, 2, 286, 195, 195, 3, 5, 0.953, 0.975, 0.975); -INSERT INTO base_data VALUES(13, 3, 312, 195, 195, 3, 5, 1.04, 0.975, 0.975); -INSERT INTO base_data VALUES(13, 4, 299, 195, 195, 3, 5, 0.997, 0.975, 0.975); -INSERT INTO base_data VALUES(13, 5, 312, 195, 195, 3, 5, 1.04, 0.975, 0.975); -INSERT INTO base_data VALUES(13, 6, 260, 195, 195, 3, 5, 0.867, 0.975, 0.975); -INSERT INTO base_data VALUES(13, 7, 276.25, 0, 195, 3, 5, 0.921, 0, 0.975); -INSERT INTO base_data VALUES(13, 8, 286, 195, 195, 3, 5, 0.953, 0.975, 0.975); -INSERT INTO base_data VALUES(13, 9, 276.25, 0, 195, 3, 5, 0.921, 0, 0.975); -INSERT INTO base_data VALUES(13, 10, 276.25, 195, 195, 3, 5, 0.921, 0.975, 0.975); -INSERT INTO base_data VALUES(13, 11, 260, 195, 195, 3, 5, 0.867, 0.975, 0.975); -INSERT INTO base_data VALUES(13, 12, 260, 195, 195, 3, 5, 0.867, 0.975, 0.975); -INSERT INTO base_data VALUES(13, 13, 260, 195, 195, 3, 5, 0.867, 0.975, 0.975); -INSERT INTO base_data VALUES(13, 14, 260, 195, 195, 3, 5, 0.867, 0.975, 0.975); -INSERT INTO base_data VALUES(13, 15, 276.25, 195, 195, 3, 5, 0.921, 0.975, 0.975); -INSERT INTO base_data VALUES(13, 16, 276.25, 0, 195, 3, 5, 0.921, 0, 0.975); -INSERT INTO base_data VALUES(14, 1, 350, 0, 210, 3, 5, 1.167, 0, 1.05); -INSERT INTO base_data VALUES(14, 2, 308, 210, 210, 3, 5, 1.027, 1.05, 1.05); -INSERT INTO base_data VALUES(14, 3, 336, 210, 210, 3, 5, 1.12, 1.05, 1.05); -INSERT INTO base_data VALUES(14, 4, 322, 210, 210, 3, 5, 1.073, 1.05, 1.05); -INSERT INTO base_data VALUES(14, 5, 336, 210, 210, 3, 5, 1.12, 1.05, 1.05); -INSERT INTO base_data VALUES(14, 6, 280, 210, 210, 3, 5, 0.933, 1.05, 1.05); -INSERT INTO base_data VALUES(14, 7, 297.5, 0, 210, 3, 5, 0.992, 0, 1.05); -INSERT INTO base_data VALUES(14, 8, 308, 210, 210, 3, 5, 1.027, 1.05, 1.05); -INSERT INTO base_data VALUES(14, 9, 297.5, 0, 210, 3, 5, 0.992, 0, 1.05); -INSERT INTO base_data VALUES(14, 10, 297.5, 210, 210, 3, 5, 0.992, 1.05, 1.05); -INSERT INTO base_data VALUES(14, 11, 280, 210, 210, 3, 5, 0.933, 1.05, 1.05); -INSERT INTO base_data VALUES(14, 12, 280, 210, 210, 3, 5, 0.933, 1.05, 1.05); -INSERT INTO base_data VALUES(14, 13, 280, 210, 210, 3, 5, 0.933, 1.05, 1.05); -INSERT INTO base_data VALUES(14, 14, 280, 210, 210, 3, 5, 0.933, 1.05, 1.05); -INSERT INTO base_data VALUES(14, 15, 297.5, 210, 210, 3, 5, 0.992, 1.05, 1.05); -INSERT INTO base_data VALUES(14, 16, 297.5, 0, 210, 3, 5, 0.992, 0, 1.05); -INSERT INTO base_data VALUES(15, 1, 375, 0, 225, 3, 5, 1.25, 0, 1.125); -INSERT INTO base_data VALUES(15, 2, 330, 225, 225, 3, 5, 1.1, 1.125, 1.125); -INSERT INTO base_data VALUES(15, 3, 360, 225, 225, 3, 5, 1.2, 1.125, 1.125); -INSERT INTO base_data VALUES(15, 4, 345, 225, 225, 3, 5, 1.15, 1.125, 1.125); -INSERT INTO base_data VALUES(15, 5, 360, 225, 225, 3, 5, 1.2, 1.125, 1.125); -INSERT INTO base_data VALUES(15, 6, 300, 225, 225, 3, 5, 1, 1.125, 1.125); -INSERT INTO base_data VALUES(15, 7, 318.75, 0, 225, 3, 5, 1.063, 0, 1.125); -INSERT INTO base_data VALUES(15, 8, 330, 225, 225, 3, 5, 1.1, 1.125, 1.125); -INSERT INTO base_data VALUES(15, 9, 318.75, 0, 225, 3, 5, 1.063, 0, 1.125); -INSERT INTO base_data VALUES(15, 10, 318.75, 225, 225, 3, 5, 1.063, 1.125, 1.125); -INSERT INTO base_data VALUES(15, 11, 300, 225, 225, 3, 5, 1, 1.125, 1.125); -INSERT INTO base_data VALUES(15, 12, 300, 225, 225, 3, 5, 1, 1.125, 1.125); -INSERT INTO base_data VALUES(15, 13, 300, 225, 225, 3, 5, 1, 1.125, 1.125); -INSERT INTO base_data VALUES(15, 14, 300, 225, 225, 3, 5, 1, 1.125, 1.125); -INSERT INTO base_data VALUES(15, 15, 318.75, 225, 225, 3, 5, 1.063, 1.125, 1.125); -INSERT INTO base_data VALUES(15, 16, 318.75, 0, 225, 3, 5, 1.063, 0, 1.125); -INSERT INTO base_data VALUES(16, 1, 400, 0, 240, 3, 5, 1.333, 0, 1.2); -INSERT INTO base_data VALUES(16, 2, 352, 240, 240, 3, 5, 1.173, 1.2, 1.2); -INSERT INTO base_data VALUES(16, 3, 384, 240, 240, 3, 5, 1.28, 1.2, 1.2); -INSERT INTO base_data VALUES(16, 4, 368, 240, 240, 3, 5, 1.227, 1.2, 1.2); -INSERT INTO base_data VALUES(16, 5, 384, 240, 240, 3, 5, 1.28, 1.2, 1.2); -INSERT INTO base_data VALUES(16, 6, 320, 240, 240, 3, 5, 1.067, 1.2, 1.2); -INSERT INTO base_data VALUES(16, 7, 340, 0, 240, 3, 5, 1.133, 0, 1.2); -INSERT INTO base_data VALUES(16, 8, 352, 240, 240, 3, 5, 1.173, 1.2, 1.2); -INSERT INTO base_data VALUES(16, 9, 340, 0, 240, 3, 5, 1.133, 0, 1.2); -INSERT INTO base_data VALUES(16, 10, 340, 240, 240, 3, 5, 1.133, 1.2, 1.2); -INSERT INTO base_data VALUES(16, 11, 320, 240, 240, 3, 5, 1.067, 1.2, 1.2); -INSERT INTO base_data VALUES(16, 12, 320, 240, 240, 3, 5, 1.067, 1.2, 1.2); -INSERT INTO base_data VALUES(16, 13, 320, 240, 240, 3, 5, 1.067, 1.2, 1.2); -INSERT INTO base_data VALUES(16, 14, 320, 240, 240, 3, 5, 1.067, 1.2, 1.2); -INSERT INTO base_data VALUES(16, 15, 340, 240, 240, 3, 5, 1.133, 1.2, 1.2); -INSERT INTO base_data VALUES(16, 16, 340, 0, 240, 3, 5, 1.133, 0, 1.2); -INSERT INTO base_data VALUES(17, 1, 425, 0, 255, 3, 5, 1.417, 0, 1.275); -INSERT INTO base_data VALUES(17, 2, 374, 255, 255, 3, 5, 1.247, 1.275, 1.275); -INSERT INTO base_data VALUES(17, 3, 408, 255, 255, 3, 5, 1.36, 1.275, 1.275); -INSERT INTO base_data VALUES(17, 4, 391, 255, 255, 3, 5, 1.303, 1.275, 1.275); -INSERT INTO base_data VALUES(17, 5, 408, 255, 255, 3, 5, 1.36, 1.275, 1.275); -INSERT INTO base_data VALUES(17, 6, 340, 255, 255, 3, 5, 1.133, 1.275, 1.275); -INSERT INTO base_data VALUES(17, 7, 361.25, 0, 255, 3, 5, 1.204, 0, 1.275); -INSERT INTO base_data VALUES(17, 8, 374, 255, 255, 3, 5, 1.247, 1.275, 1.275); -INSERT INTO base_data VALUES(17, 9, 361.25, 0, 255, 3, 5, 1.204, 0, 1.275); -INSERT INTO base_data VALUES(17, 10, 361.25, 255, 255, 3, 5, 1.204, 1.275, 1.275); -INSERT INTO base_data VALUES(17, 11, 340, 255, 255, 3, 5, 1.133, 1.275, 1.275); -INSERT INTO base_data VALUES(17, 12, 340, 255, 255, 3, 5, 1.133, 1.275, 1.275); -INSERT INTO base_data VALUES(17, 13, 340, 255, 255, 3, 5, 1.133, 1.275, 1.275); -INSERT INTO base_data VALUES(17, 14, 340, 255, 255, 3, 5, 1.133, 1.275, 1.275); -INSERT INTO base_data VALUES(17, 15, 361.25, 255, 255, 3, 5, 1.204, 1.275, 1.275); -INSERT INTO base_data VALUES(17, 16, 361.25, 0, 255, 3, 5, 1.204, 0, 1.275); -INSERT INTO base_data VALUES(18, 1, 450, 0, 270, 3, 5, 1.5, 0, 1.35); -INSERT INTO base_data VALUES(18, 2, 396, 270, 270, 3, 5, 1.32, 1.35, 1.35); -INSERT INTO base_data VALUES(18, 3, 432, 270, 270, 3, 5, 1.44, 1.35, 1.35); -INSERT INTO base_data VALUES(18, 4, 414, 270, 270, 3, 5, 1.38, 1.35, 1.35); -INSERT INTO base_data VALUES(18, 5, 432, 270, 270, 3, 5, 1.44, 1.35, 1.35); -INSERT INTO base_data VALUES(18, 6, 360, 270, 270, 3, 5, 1.2, 1.35, 1.35); -INSERT INTO base_data VALUES(18, 7, 382.5, 0, 270, 3, 5, 1.275, 0, 1.35); -INSERT INTO base_data VALUES(18, 8, 396, 270, 270, 3, 5, 1.32, 1.35, 1.35); -INSERT INTO base_data VALUES(18, 9, 382.5, 0, 270, 3, 5, 1.275, 0, 1.35); -INSERT INTO base_data VALUES(18, 10, 382.5, 270, 270, 3, 5, 1.275, 1.35, 1.35); -INSERT INTO base_data VALUES(18, 11, 360, 270, 270, 3, 5, 1.2, 1.35, 1.35); -INSERT INTO base_data VALUES(18, 12, 360, 270, 270, 3, 5, 1.2, 1.35, 1.35); -INSERT INTO base_data VALUES(18, 13, 360, 270, 270, 3, 5, 1.2, 1.35, 1.35); -INSERT INTO base_data VALUES(18, 14, 360, 270, 270, 3, 5, 1.2, 1.35, 1.35); -INSERT INTO base_data VALUES(18, 15, 382.5, 270, 270, 3, 5, 1.275, 1.35, 1.35); -INSERT INTO base_data VALUES(18, 16, 382.5, 0, 270, 3, 5, 1.275, 0, 1.35); -INSERT INTO base_data VALUES(19, 1, 475, 0, 285, 3, 5, 1.583, 0, 1.425); -INSERT INTO base_data VALUES(19, 2, 418, 285, 285, 3, 5, 1.393, 1.425, 1.425); -INSERT INTO base_data VALUES(19, 3, 456, 285, 285, 3, 5, 1.52, 1.425, 1.425); -INSERT INTO base_data VALUES(19, 4, 437, 285, 285, 3, 5, 1.457, 1.425, 1.425); -INSERT INTO base_data VALUES(19, 5, 456, 285, 285, 3, 5, 1.52, 1.425, 1.425); -INSERT INTO base_data VALUES(19, 6, 380, 285, 285, 3, 5, 1.267, 1.425, 1.425); -INSERT INTO base_data VALUES(19, 7, 403.75, 0, 285, 3, 5, 1.346, 0, 1.425); -INSERT INTO base_data VALUES(19, 8, 418, 285, 285, 3, 5, 1.393, 1.425, 1.425); -INSERT INTO base_data VALUES(19, 9, 403.75, 0, 285, 3, 5, 1.346, 0, 1.425); -INSERT INTO base_data VALUES(19, 10, 403.75, 285, 285, 3, 5, 1.346, 1.425, 1.425); -INSERT INTO base_data VALUES(19, 11, 380, 285, 285, 3, 5, 1.267, 1.425, 1.425); -INSERT INTO base_data VALUES(19, 12, 380, 285, 285, 3, 5, 1.267, 1.425, 1.425); -INSERT INTO base_data VALUES(19, 13, 380, 285, 285, 3, 5, 1.267, 1.425, 1.425); -INSERT INTO base_data VALUES(19, 14, 380, 285, 285, 3, 5, 1.267, 1.425, 1.425); -INSERT INTO base_data VALUES(19, 15, 403.75, 285, 285, 3, 5, 1.346, 1.425, 1.425); -INSERT INTO base_data VALUES(19, 16, 403.75, 0, 285, 3, 5, 1.346, 0, 1.425); -INSERT INTO base_data VALUES(20, 1, 500, 0, 300, 4, 6, 1.667, 0, 1.5); -INSERT INTO base_data VALUES(20, 2, 440, 300, 300, 4, 6, 1.467, 1.5, 1.5); -INSERT INTO base_data VALUES(20, 3, 480, 300, 300, 4, 6, 1.6, 1.5, 1.5); -INSERT INTO base_data VALUES(20, 4, 460, 300, 300, 4, 6, 1.533, 1.5, 1.5); -INSERT INTO base_data VALUES(20, 5, 480, 300, 300, 4, 6, 1.6, 1.5, 1.5); -INSERT INTO base_data VALUES(20, 6, 400, 300, 300, 4, 6, 1.333, 1.5, 1.5); -INSERT INTO base_data VALUES(20, 7, 425, 0, 300, 4, 6, 1.417, 0, 1.5); -INSERT INTO base_data VALUES(20, 8, 440, 300, 300, 4, 6, 1.467, 1.5, 1.5); -INSERT INTO base_data VALUES(20, 9, 425, 0, 300, 4, 6, 1.417, 0, 1.5); -INSERT INTO base_data VALUES(20, 10, 425, 300, 300, 4, 6, 1.417, 1.5, 1.5); -INSERT INTO base_data VALUES(20, 11, 400, 300, 300, 4, 6, 1.333, 1.5, 1.5); -INSERT INTO base_data VALUES(20, 12, 400, 300, 300, 4, 6, 1.333, 1.5, 1.5); -INSERT INTO base_data VALUES(20, 13, 400, 300, 300, 4, 6, 1.333, 1.5, 1.5); -INSERT INTO base_data VALUES(20, 14, 400, 300, 300, 4, 6, 1.333, 1.5, 1.5); -INSERT INTO base_data VALUES(20, 15, 425, 300, 300, 4, 6, 1.417, 1.5, 1.5); -INSERT INTO base_data VALUES(20, 16, 425, 0, 300, 4, 6, 1.417, 0, 1.5); -INSERT INTO base_data VALUES(21, 1, 525, 0, 315, 4, 6, 1.75, 0, 1.575); -INSERT INTO base_data VALUES(21, 2, 462, 315, 315, 4, 6, 1.54, 1.575, 1.575); -INSERT INTO base_data VALUES(21, 3, 504, 315, 315, 4, 6, 1.68, 1.575, 1.575); -INSERT INTO base_data VALUES(21, 4, 483, 315, 315, 4, 6, 1.61, 1.575, 1.575); -INSERT INTO base_data VALUES(21, 5, 504, 315, 315, 4, 6, 1.68, 1.575, 1.575); -INSERT INTO base_data VALUES(21, 6, 420, 315, 315, 4, 6, 1.4, 1.575, 1.575); -INSERT INTO base_data VALUES(21, 7, 446.25, 0, 315, 4, 6, 1.488, 0, 1.575); -INSERT INTO base_data VALUES(21, 8, 462, 315, 315, 4, 6, 1.54, 1.575, 1.575); -INSERT INTO base_data VALUES(21, 9, 446.25, 0, 315, 4, 6, 1.488, 0, 1.575); -INSERT INTO base_data VALUES(21, 10, 446.25, 315, 315, 4, 6, 1.488, 1.575, 1.575); -INSERT INTO base_data VALUES(21, 11, 420, 315, 315, 4, 6, 1.4, 1.575, 1.575); -INSERT INTO base_data VALUES(21, 12, 420, 315, 315, 4, 6, 1.4, 1.575, 1.575); -INSERT INTO base_data VALUES(21, 13, 420, 315, 315, 4, 6, 1.4, 1.575, 1.575); -INSERT INTO base_data VALUES(21, 14, 420, 315, 315, 4, 6, 1.4, 1.575, 1.575); -INSERT INTO base_data VALUES(21, 15, 446.25, 315, 315, 4, 6, 1.488, 1.575, 1.575); -INSERT INTO base_data VALUES(21, 16, 446.25, 0, 315, 4, 6, 1.488, 0, 1.575); -INSERT INTO base_data VALUES(22, 1, 550, 0, 330, 4, 6, 1.833, 0, 1.65); -INSERT INTO base_data VALUES(22, 2, 484, 330, 330, 4, 6, 1.613, 1.65, 1.65); -INSERT INTO base_data VALUES(22, 3, 528, 330, 330, 4, 6, 1.76, 1.65, 1.65); -INSERT INTO base_data VALUES(22, 4, 506, 330, 330, 4, 6, 1.687, 1.65, 1.65); -INSERT INTO base_data VALUES(22, 5, 528, 330, 330, 4, 6, 1.76, 1.65, 1.65); -INSERT INTO base_data VALUES(22, 6, 440, 330, 330, 4, 6, 1.467, 1.65, 1.65); -INSERT INTO base_data VALUES(22, 7, 467.5, 0, 330, 4, 6, 1.558, 0, 1.65); -INSERT INTO base_data VALUES(22, 8, 484, 330, 330, 4, 6, 1.613, 1.65, 1.65); -INSERT INTO base_data VALUES(22, 9, 467.5, 0, 330, 4, 6, 1.558, 0, 1.65); -INSERT INTO base_data VALUES(22, 10, 467.5, 330, 330, 4, 6, 1.558, 1.65, 1.65); -INSERT INTO base_data VALUES(22, 11, 440, 330, 330, 4, 6, 1.467, 1.65, 1.65); -INSERT INTO base_data VALUES(22, 12, 440, 330, 330, 4, 6, 1.467, 1.65, 1.65); -INSERT INTO base_data VALUES(22, 13, 440, 330, 330, 4, 6, 1.467, 1.65, 1.65); -INSERT INTO base_data VALUES(22, 14, 440, 330, 330, 4, 6, 1.467, 1.65, 1.65); -INSERT INTO base_data VALUES(22, 15, 467.5, 330, 330, 4, 6, 1.558, 1.65, 1.65); -INSERT INTO base_data VALUES(22, 16, 467.5, 0, 330, 4, 6, 1.558, 0, 1.65); -INSERT INTO base_data VALUES(23, 1, 575, 0, 345, 4, 6, 1.917, 0, 1.725); -INSERT INTO base_data VALUES(23, 2, 506, 345, 345, 4, 6, 1.687, 1.725, 1.725); -INSERT INTO base_data VALUES(23, 3, 552, 345, 345, 4, 6, 1.84, 1.725, 1.725); -INSERT INTO base_data VALUES(23, 4, 529, 345, 345, 4, 6, 1.763, 1.725, 1.725); -INSERT INTO base_data VALUES(23, 5, 552, 345, 345, 4, 6, 1.84, 1.725, 1.725); -INSERT INTO base_data VALUES(23, 6, 460, 345, 345, 4, 6, 1.533, 1.725, 1.725); -INSERT INTO base_data VALUES(23, 7, 488.75, 0, 345, 4, 6, 1.629, 0, 1.725); -INSERT INTO base_data VALUES(23, 8, 506, 345, 345, 4, 6, 1.687, 1.725, 1.725); -INSERT INTO base_data VALUES(23, 9, 488.75, 0, 345, 4, 6, 1.629, 0, 1.725); -INSERT INTO base_data VALUES(23, 10, 488.75, 345, 345, 4, 6, 1.629, 1.725, 1.725); -INSERT INTO base_data VALUES(23, 11, 460, 345, 345, 4, 6, 1.533, 1.725, 1.725); -INSERT INTO base_data VALUES(23, 12, 460, 345, 345, 4, 6, 1.533, 1.725, 1.725); -INSERT INTO base_data VALUES(23, 13, 460, 345, 345, 4, 6, 1.533, 1.725, 1.725); -INSERT INTO base_data VALUES(23, 14, 460, 345, 345, 4, 6, 1.533, 1.725, 1.725); -INSERT INTO base_data VALUES(23, 15, 488.75, 345, 345, 4, 6, 1.629, 1.725, 1.725); -INSERT INTO base_data VALUES(23, 16, 488.75, 0, 345, 4, 6, 1.629, 0, 1.725); -INSERT INTO base_data VALUES(24, 1, 600, 0, 360, 4, 7, 2, 0, 1.8); -INSERT INTO base_data VALUES(24, 2, 528, 360, 360, 4, 7, 1.76, 1.8, 1.8); -INSERT INTO base_data VALUES(24, 3, 576, 360, 360, 4, 7, 1.92, 1.8, 1.8); -INSERT INTO base_data VALUES(24, 4, 552, 360, 360, 4, 7, 1.84, 1.8, 1.8); -INSERT INTO base_data VALUES(24, 5, 576, 360, 360, 4, 7, 1.92, 1.8, 1.8); -INSERT INTO base_data VALUES(24, 6, 480, 360, 360, 4, 7, 1.6, 1.8, 1.8); -INSERT INTO base_data VALUES(24, 7, 510, 0, 360, 4, 7, 1.7, 0, 1.8); -INSERT INTO base_data VALUES(24, 8, 528, 360, 360, 4, 7, 1.76, 1.8, 1.8); -INSERT INTO base_data VALUES(24, 9, 510, 0, 360, 4, 7, 1.7, 0, 1.8); -INSERT INTO base_data VALUES(24, 10, 510, 360, 360, 4, 7, 1.7, 1.8, 1.8); -INSERT INTO base_data VALUES(24, 11, 480, 360, 360, 4, 7, 1.6, 1.8, 1.8); -INSERT INTO base_data VALUES(24, 12, 480, 360, 360, 4, 7, 1.6, 1.8, 1.8); -INSERT INTO base_data VALUES(24, 13, 480, 360, 360, 4, 7, 1.6, 1.8, 1.8); -INSERT INTO base_data VALUES(24, 14, 480, 360, 360, 4, 7, 1.6, 1.8, 1.8); -INSERT INTO base_data VALUES(24, 15, 510, 360, 360, 4, 7, 1.7, 1.8, 1.8); -INSERT INTO base_data VALUES(24, 16, 510, 0, 360, 4, 7, 1.7, 0, 1.8); -INSERT INTO base_data VALUES(25, 1, 625, 0, 375, 4, 7, 2.083, 0, 1.875); -INSERT INTO base_data VALUES(25, 2, 550, 375, 375, 4, 7, 1.833, 1.875, 1.875); -INSERT INTO base_data VALUES(25, 3, 600, 375, 375, 4, 7, 2, 1.875, 1.875); -INSERT INTO base_data VALUES(25, 4, 575, 375, 375, 4, 7, 1.917, 1.875, 1.875); -INSERT INTO base_data VALUES(25, 5, 600, 375, 375, 4, 7, 2, 1.875, 1.875); -INSERT INTO base_data VALUES(25, 6, 500, 375, 375, 4, 7, 1.667, 1.875, 1.875); -INSERT INTO base_data VALUES(25, 7, 531.25, 0, 375, 4, 7, 1.771, 0, 1.875); -INSERT INTO base_data VALUES(25, 8, 550, 375, 375, 4, 7, 1.833, 1.875, 1.875); -INSERT INTO base_data VALUES(25, 9, 531.25, 0, 375, 4, 7, 1.771, 0, 1.875); -INSERT INTO base_data VALUES(25, 10, 531.25, 375, 375, 4, 7, 1.771, 1.875, 1.875); -INSERT INTO base_data VALUES(25, 11, 500, 375, 375, 4, 7, 1.667, 1.875, 1.875); -INSERT INTO base_data VALUES(25, 12, 500, 375, 375, 4, 7, 1.667, 1.875, 1.875); -INSERT INTO base_data VALUES(25, 13, 500, 375, 375, 4, 7, 1.667, 1.875, 1.875); -INSERT INTO base_data VALUES(25, 14, 500, 375, 375, 4, 7, 1.667, 1.875, 1.875); -INSERT INTO base_data VALUES(25, 15, 531.25, 375, 375, 4, 7, 1.771, 1.875, 1.875); -INSERT INTO base_data VALUES(25, 16, 531.25, 0, 375, 4, 7, 1.771, 0, 1.875); -INSERT INTO base_data VALUES(26, 1, 650, 0, 390, 4, 7, 2.167, 0, 1.95); -INSERT INTO base_data VALUES(26, 2, 572, 390, 390, 4, 7, 1.907, 1.95, 1.95); -INSERT INTO base_data VALUES(26, 3, 624, 390, 390, 4, 7, 2.08, 1.95, 1.95); -INSERT INTO base_data VALUES(26, 4, 598, 390, 390, 4, 7, 1.993, 1.95, 1.95); -INSERT INTO base_data VALUES(26, 5, 624, 390, 390, 4, 7, 2.08, 1.95, 1.95); -INSERT INTO base_data VALUES(26, 6, 520, 390, 390, 4, 7, 1.733, 1.95, 1.95); -INSERT INTO base_data VALUES(26, 7, 552.5, 0, 390, 4, 7, 1.842, 0, 1.95); -INSERT INTO base_data VALUES(26, 8, 572, 390, 390, 4, 7, 1.907, 1.95, 1.95); -INSERT INTO base_data VALUES(26, 9, 552.5, 0, 390, 4, 7, 1.842, 0, 1.95); -INSERT INTO base_data VALUES(26, 10, 552.5, 390, 390, 4, 7, 1.842, 1.95, 1.95); -INSERT INTO base_data VALUES(26, 11, 520, 390, 390, 4, 7, 1.733, 1.95, 1.95); -INSERT INTO base_data VALUES(26, 12, 520, 390, 390, 4, 7, 1.733, 1.95, 1.95); -INSERT INTO base_data VALUES(26, 13, 520, 390, 390, 4, 7, 1.733, 1.95, 1.95); -INSERT INTO base_data VALUES(26, 14, 520, 390, 390, 4, 7, 1.733, 1.95, 1.95); -INSERT INTO base_data VALUES(26, 15, 552.5, 390, 390, 4, 7, 1.842, 1.95, 1.95); -INSERT INTO base_data VALUES(26, 16, 552.5, 0, 390, 4, 7, 1.842, 0, 1.95); -INSERT INTO base_data VALUES(27, 1, 675, 0, 405, 4, 7, 2.25, 0, 2.025); -INSERT INTO base_data VALUES(27, 2, 594, 405, 405, 4, 7, 1.98, 2.025, 2.025); -INSERT INTO base_data VALUES(27, 3, 648, 405, 405, 4, 7, 2.16, 2.025, 2.025); -INSERT INTO base_data VALUES(27, 4, 621, 405, 405, 4, 7, 2.07, 2.025, 2.025); -INSERT INTO base_data VALUES(27, 5, 648, 405, 405, 4, 7, 2.16, 2.025, 2.025); -INSERT INTO base_data VALUES(27, 6, 540, 405, 405, 4, 7, 1.8, 2.025, 2.025); -INSERT INTO base_data VALUES(27, 7, 573.75, 0, 405, 4, 7, 1.913, 0, 2.025); -INSERT INTO base_data VALUES(27, 8, 594, 405, 405, 4, 7, 1.98, 2.025, 2.025); -INSERT INTO base_data VALUES(27, 9, 573.75, 0, 405, 4, 7, 1.913, 0, 2.025); -INSERT INTO base_data VALUES(27, 10, 573.75, 405, 405, 4, 7, 1.913, 2.025, 2.025); -INSERT INTO base_data VALUES(27, 11, 540, 405, 405, 4, 7, 1.8, 2.025, 2.025); -INSERT INTO base_data VALUES(27, 12, 540, 405, 405, 4, 7, 1.8, 2.025, 2.025); -INSERT INTO base_data VALUES(27, 13, 540, 405, 405, 4, 7, 1.8, 2.025, 2.025); -INSERT INTO base_data VALUES(27, 14, 540, 405, 405, 4, 7, 1.8, 2.025, 2.025); -INSERT INTO base_data VALUES(27, 15, 573.75, 405, 405, 4, 7, 1.913, 2.025, 2.025); -INSERT INTO base_data VALUES(27, 16, 573.75, 0, 405, 4, 7, 1.913, 0, 2.025); -INSERT INTO base_data VALUES(28, 1, 700, 0, 420, 4, 8, 2.333, 0, 2.1); -INSERT INTO base_data VALUES(28, 2, 616, 420, 420, 4, 8, 2.053, 2.1, 2.1); -INSERT INTO base_data VALUES(28, 3, 672, 420, 420, 4, 8, 2.24, 2.1, 2.1); -INSERT INTO base_data VALUES(28, 4, 644, 420, 420, 4, 8, 2.147, 2.1, 2.1); -INSERT INTO base_data VALUES(28, 5, 672, 420, 420, 4, 8, 2.24, 2.1, 2.1); -INSERT INTO base_data VALUES(28, 6, 560, 420, 420, 4, 8, 1.867, 2.1, 2.1); -INSERT INTO base_data VALUES(28, 7, 595, 0, 420, 4, 8, 1.983, 0, 2.1); -INSERT INTO base_data VALUES(28, 8, 616, 420, 420, 4, 8, 2.053, 2.1, 2.1); -INSERT INTO base_data VALUES(28, 9, 595, 0, 420, 4, 8, 1.983, 0, 2.1); -INSERT INTO base_data VALUES(28, 10, 595, 420, 420, 4, 8, 1.983, 2.1, 2.1); -INSERT INTO base_data VALUES(28, 11, 560, 420, 420, 4, 8, 1.867, 2.1, 2.1); -INSERT INTO base_data VALUES(28, 12, 560, 420, 420, 4, 8, 1.867, 2.1, 2.1); -INSERT INTO base_data VALUES(28, 13, 560, 420, 420, 4, 8, 1.867, 2.1, 2.1); -INSERT INTO base_data VALUES(28, 14, 560, 420, 420, 4, 8, 1.867, 2.1, 2.1); -INSERT INTO base_data VALUES(28, 15, 595, 420, 420, 4, 8, 1.983, 2.1, 2.1); -INSERT INTO base_data VALUES(28, 16, 595, 0, 420, 4, 8, 1.983, 0, 2.1); -INSERT INTO base_data VALUES(29, 1, 725, 0, 435, 4, 8, 2.417, 0, 2.175); -INSERT INTO base_data VALUES(29, 2, 638, 435, 435, 4, 8, 2.127, 2.175, 2.175); -INSERT INTO base_data VALUES(29, 3, 696, 435, 435, 4, 8, 2.32, 2.175, 2.175); -INSERT INTO base_data VALUES(29, 4, 667, 435, 435, 4, 8, 2.223, 2.175, 2.175); -INSERT INTO base_data VALUES(29, 5, 696, 435, 435, 4, 8, 2.32, 2.175, 2.175); -INSERT INTO base_data VALUES(29, 6, 580, 435, 435, 4, 8, 1.933, 2.175, 2.175); -INSERT INTO base_data VALUES(29, 7, 616.25, 0, 435, 4, 8, 2.054, 0, 2.175); -INSERT INTO base_data VALUES(29, 8, 638, 435, 435, 4, 8, 2.127, 2.175, 2.175); -INSERT INTO base_data VALUES(29, 9, 616.25, 0, 435, 4, 8, 2.054, 0, 2.175); -INSERT INTO base_data VALUES(29, 10, 616.25, 435, 435, 4, 8, 2.054, 2.175, 2.175); -INSERT INTO base_data VALUES(29, 11, 580, 435, 435, 4, 8, 1.933, 2.175, 2.175); -INSERT INTO base_data VALUES(29, 12, 580, 435, 435, 4, 8, 1.933, 2.175, 2.175); -INSERT INTO base_data VALUES(29, 13, 580, 435, 435, 4, 8, 1.933, 2.175, 2.175); -INSERT INTO base_data VALUES(29, 14, 580, 435, 435, 4, 8, 1.933, 2.175, 2.175); -INSERT INTO base_data VALUES(29, 15, 616.25, 435, 435, 4, 8, 2.054, 2.175, 2.175); -INSERT INTO base_data VALUES(29, 16, 616.25, 0, 435, 4, 8, 2.054, 0, 2.175); -INSERT INTO base_data VALUES(30, 1, 750, 0, 450, 5, 8, 2.5, 0, 2.25); -INSERT INTO base_data VALUES(30, 2, 660, 450, 450, 5, 8, 2.2, 2.25, 2.25); -INSERT INTO base_data VALUES(30, 3, 720, 450, 450, 5, 8, 2.4, 2.25, 2.25); -INSERT INTO base_data VALUES(30, 4, 690, 450, 450, 5, 8, 2.3, 2.25, 2.25); -INSERT INTO base_data VALUES(30, 5, 720, 450, 450, 5, 8, 2.4, 2.25, 2.25); -INSERT INTO base_data VALUES(30, 6, 600, 450, 450, 5, 8, 2, 2.25, 2.25); -INSERT INTO base_data VALUES(30, 7, 637.5, 0, 450, 5, 8, 2.125, 0, 2.25); -INSERT INTO base_data VALUES(30, 8, 660, 450, 450, 5, 8, 2.2, 2.25, 2.25); -INSERT INTO base_data VALUES(30, 9, 637.5, 0, 450, 5, 8, 2.125, 0, 2.25); -INSERT INTO base_data VALUES(30, 10, 637.5, 450, 450, 5, 8, 2.125, 2.25, 2.25); -INSERT INTO base_data VALUES(30, 11, 600, 450, 450, 5, 8, 2, 2.25, 2.25); -INSERT INTO base_data VALUES(30, 12, 600, 450, 450, 5, 8, 2, 2.25, 2.25); -INSERT INTO base_data VALUES(30, 13, 600, 450, 450, 5, 8, 2, 2.25, 2.25); -INSERT INTO base_data VALUES(30, 14, 600, 450, 450, 5, 8, 2, 2.25, 2.25); -INSERT INTO base_data VALUES(30, 15, 637.5, 450, 450, 5, 8, 2.125, 2.25, 2.25); -INSERT INTO base_data VALUES(30, 16, 637.5, 0, 450, 5, 8, 2.125, 0, 2.25); -INSERT INTO base_data VALUES(31, 1, 775, 0, 465, 5, 8, 2.583, 0, 2.325); -INSERT INTO base_data VALUES(31, 2, 682, 465, 465, 5, 8, 2.273, 2.325, 2.325); -INSERT INTO base_data VALUES(31, 3, 744, 465, 465, 5, 8, 2.48, 2.325, 2.325); -INSERT INTO base_data VALUES(31, 4, 713, 465, 465, 5, 8, 2.377, 2.325, 2.325); -INSERT INTO base_data VALUES(31, 5, 744, 465, 465, 5, 8, 2.48, 2.325, 2.325); -INSERT INTO base_data VALUES(31, 6, 620, 465, 465, 5, 8, 2.067, 2.325, 2.325); -INSERT INTO base_data VALUES(31, 7, 658.75, 0, 465, 5, 8, 2.196, 0, 2.325); -INSERT INTO base_data VALUES(31, 8, 682, 465, 465, 5, 8, 2.273, 2.325, 2.325); -INSERT INTO base_data VALUES(31, 9, 658.75, 0, 465, 5, 8, 2.196, 0, 2.325); -INSERT INTO base_data VALUES(31, 10, 658.75, 465, 465, 5, 8, 2.196, 2.325, 2.325); -INSERT INTO base_data VALUES(31, 11, 620, 465, 465, 5, 8, 2.067, 2.325, 2.325); -INSERT INTO base_data VALUES(31, 12, 620, 465, 465, 5, 8, 2.067, 2.325, 2.325); -INSERT INTO base_data VALUES(31, 13, 620, 465, 465, 5, 8, 2.067, 2.325, 2.325); -INSERT INTO base_data VALUES(31, 14, 620, 465, 465, 5, 8, 2.067, 2.325, 2.325); -INSERT INTO base_data VALUES(31, 15, 658.75, 465, 465, 5, 8, 2.196, 2.325, 2.325); -INSERT INTO base_data VALUES(31, 16, 658.75, 0, 465, 5, 8, 2.196, 0, 2.325); -INSERT INTO base_data VALUES(32, 1, 800, 0, 480, 5, 9, 2.667, 0, 2.4); -INSERT INTO base_data VALUES(32, 2, 704, 480, 480, 5, 9, 2.347, 2.4, 2.4); -INSERT INTO base_data VALUES(32, 3, 768, 480, 480, 5, 9, 2.56, 2.4, 2.4); -INSERT INTO base_data VALUES(32, 4, 736, 480, 480, 5, 9, 2.453, 2.4, 2.4); -INSERT INTO base_data VALUES(32, 5, 768, 480, 480, 5, 9, 2.56, 2.4, 2.4); -INSERT INTO base_data VALUES(32, 6, 640, 480, 480, 5, 9, 2.133, 2.4, 2.4); -INSERT INTO base_data VALUES(32, 7, 680, 0, 480, 5, 9, 2.267, 0, 2.4); -INSERT INTO base_data VALUES(32, 8, 704, 480, 480, 5, 9, 2.347, 2.4, 2.4); -INSERT INTO base_data VALUES(32, 9, 680, 0, 480, 5, 9, 2.267, 0, 2.4); -INSERT INTO base_data VALUES(32, 10, 680, 480, 480, 5, 9, 2.267, 2.4, 2.4); -INSERT INTO base_data VALUES(32, 11, 640, 480, 480, 5, 9, 2.133, 2.4, 2.4); -INSERT INTO base_data VALUES(32, 12, 640, 480, 480, 5, 9, 2.133, 2.4, 2.4); -INSERT INTO base_data VALUES(32, 13, 640, 480, 480, 5, 9, 2.133, 2.4, 2.4); -INSERT INTO base_data VALUES(32, 14, 640, 480, 480, 5, 9, 2.133, 2.4, 2.4); -INSERT INTO base_data VALUES(32, 15, 680, 480, 480, 5, 9, 2.267, 2.4, 2.4); -INSERT INTO base_data VALUES(32, 16, 680, 0, 480, 5, 9, 2.267, 0, 2.4); -INSERT INTO base_data VALUES(33, 1, 825, 0, 495, 5, 9, 2.75, 0, 2.475); -INSERT INTO base_data VALUES(33, 2, 726, 495, 495, 5, 9, 2.42, 2.475, 2.475); -INSERT INTO base_data VALUES(33, 3, 792, 495, 495, 5, 9, 2.64, 2.475, 2.475); -INSERT INTO base_data VALUES(33, 4, 759, 495, 495, 5, 9, 2.53, 2.475, 2.475); -INSERT INTO base_data VALUES(33, 5, 792, 495, 495, 5, 9, 2.64, 2.475, 2.475); -INSERT INTO base_data VALUES(33, 6, 660, 495, 495, 5, 9, 2.2, 2.475, 2.475); -INSERT INTO base_data VALUES(33, 7, 701.25, 0, 495, 5, 9, 2.338, 0, 2.475); -INSERT INTO base_data VALUES(33, 8, 726, 495, 495, 5, 9, 2.42, 2.475, 2.475); -INSERT INTO base_data VALUES(33, 9, 701.25, 0, 495, 5, 9, 2.338, 0, 2.475); -INSERT INTO base_data VALUES(33, 10, 701.25, 495, 495, 5, 9, 2.338, 2.475, 2.475); -INSERT INTO base_data VALUES(33, 11, 660, 495, 495, 5, 9, 2.2, 2.475, 2.475); -INSERT INTO base_data VALUES(33, 12, 660, 495, 495, 5, 9, 2.2, 2.475, 2.475); -INSERT INTO base_data VALUES(33, 13, 660, 495, 495, 5, 9, 2.2, 2.475, 2.475); -INSERT INTO base_data VALUES(33, 14, 660, 495, 495, 5, 9, 2.2, 2.475, 2.475); -INSERT INTO base_data VALUES(33, 15, 701.25, 495, 495, 5, 9, 2.338, 2.475, 2.475); -INSERT INTO base_data VALUES(33, 16, 701.25, 0, 495, 5, 9, 2.338, 0, 2.475); -INSERT INTO base_data VALUES(34, 1, 850, 0, 510, 5, 9, 2.833, 0, 2.55); -INSERT INTO base_data VALUES(34, 2, 748, 510, 510, 5, 9, 2.493, 2.55, 2.55); -INSERT INTO base_data VALUES(34, 3, 816, 510, 510, 5, 9, 2.72, 2.55, 2.55); -INSERT INTO base_data VALUES(34, 4, 782, 510, 510, 5, 9, 2.607, 2.55, 2.55); -INSERT INTO base_data VALUES(34, 5, 816, 510, 510, 5, 9, 2.72, 2.55, 2.55); -INSERT INTO base_data VALUES(34, 6, 680, 510, 510, 5, 9, 2.267, 2.55, 2.55); -INSERT INTO base_data VALUES(34, 7, 722.5, 0, 510, 5, 9, 2.408, 0, 2.55); -INSERT INTO base_data VALUES(34, 8, 748, 510, 510, 5, 9, 2.493, 2.55, 2.55); -INSERT INTO base_data VALUES(34, 9, 722.5, 0, 510, 5, 9, 2.408, 0, 2.55); -INSERT INTO base_data VALUES(34, 10, 722.5, 510, 510, 5, 9, 2.408, 2.55, 2.55); -INSERT INTO base_data VALUES(34, 11, 680, 510, 510, 5, 9, 2.267, 2.55, 2.55); -INSERT INTO base_data VALUES(34, 12, 680, 510, 510, 5, 9, 2.267, 2.55, 2.55); -INSERT INTO base_data VALUES(34, 13, 680, 510, 510, 5, 9, 2.267, 2.55, 2.55); -INSERT INTO base_data VALUES(34, 14, 680, 510, 510, 5, 9, 2.267, 2.55, 2.55); -INSERT INTO base_data VALUES(34, 15, 722.5, 510, 510, 5, 9, 2.408, 2.55, 2.55); -INSERT INTO base_data VALUES(34, 16, 722.5, 0, 510, 5, 9, 2.408, 0, 2.55); -INSERT INTO base_data VALUES(35, 1, 875, 0, 525, 5, 9, 2.917, 0, 2.625); -INSERT INTO base_data VALUES(35, 2, 770, 525, 525, 5, 9, 2.567, 2.625, 2.625); -INSERT INTO base_data VALUES(35, 3, 840, 525, 525, 5, 9, 2.8, 2.625, 2.625); -INSERT INTO base_data VALUES(35, 4, 805, 525, 525, 5, 9, 2.683, 2.625, 2.625); -INSERT INTO base_data VALUES(35, 5, 840, 525, 525, 5, 9, 2.8, 2.625, 2.625); -INSERT INTO base_data VALUES(35, 6, 700, 525, 525, 5, 9, 2.333, 2.625, 2.625); -INSERT INTO base_data VALUES(35, 7, 743.75, 0, 525, 5, 9, 2.479, 0, 2.625); -INSERT INTO base_data VALUES(35, 8, 770, 525, 525, 5, 9, 2.567, 2.625, 2.625); -INSERT INTO base_data VALUES(35, 9, 743.75, 0, 525, 5, 9, 2.479, 0, 2.625); -INSERT INTO base_data VALUES(35, 10, 743.75, 525, 525, 5, 9, 2.479, 2.625, 2.625); -INSERT INTO base_data VALUES(35, 11, 700, 525, 525, 5, 9, 2.333, 2.625, 2.625); -INSERT INTO base_data VALUES(35, 12, 700, 525, 525, 5, 9, 2.333, 2.625, 2.625); -INSERT INTO base_data VALUES(35, 13, 700, 525, 525, 5, 9, 2.333, 2.625, 2.625); -INSERT INTO base_data VALUES(35, 14, 700, 525, 525, 5, 9, 2.333, 2.625, 2.625); -INSERT INTO base_data VALUES(35, 15, 743.75, 525, 525, 5, 9, 2.479, 2.625, 2.625); -INSERT INTO base_data VALUES(35, 16, 743.75, 0, 525, 5, 9, 2.479, 0, 2.625); -INSERT INTO base_data VALUES(36, 1, 900, 0, 540, 5, 10, 3, 0, 2.7); -INSERT INTO base_data VALUES(36, 2, 792, 540, 540, 5, 10, 2.64, 2.7, 2.7); -INSERT INTO base_data VALUES(36, 3, 864, 540, 540, 5, 10, 2.88, 2.7, 2.7); -INSERT INTO base_data VALUES(36, 4, 828, 540, 540, 5, 10, 2.76, 2.7, 2.7); -INSERT INTO base_data VALUES(36, 5, 864, 540, 540, 5, 10, 2.88, 2.7, 2.7); -INSERT INTO base_data VALUES(36, 6, 720, 540, 540, 5, 10, 2.4, 2.7, 2.7); -INSERT INTO base_data VALUES(36, 7, 765, 0, 540, 5, 10, 2.55, 0, 2.7); -INSERT INTO base_data VALUES(36, 8, 792, 540, 540, 5, 10, 2.64, 2.7, 2.7); -INSERT INTO base_data VALUES(36, 9, 765, 0, 540, 5, 10, 2.55, 0, 2.7); -INSERT INTO base_data VALUES(36, 10, 765, 540, 540, 5, 10, 2.55, 2.7, 2.7); -INSERT INTO base_data VALUES(36, 11, 720, 540, 540, 5, 10, 2.4, 2.7, 2.7); -INSERT INTO base_data VALUES(36, 12, 720, 540, 540, 5, 10, 2.4, 2.7, 2.7); -INSERT INTO base_data VALUES(36, 13, 720, 540, 540, 5, 10, 2.4, 2.7, 2.7); -INSERT INTO base_data VALUES(36, 14, 720, 540, 540, 5, 10, 2.4, 2.7, 2.7); -INSERT INTO base_data VALUES(36, 15, 765, 540, 540, 5, 10, 2.55, 2.7, 2.7); -INSERT INTO base_data VALUES(36, 16, 765, 0, 540, 5, 10, 2.55, 0, 2.7); -INSERT INTO base_data VALUES(37, 1, 925, 0, 555, 5, 10, 3.083, 0, 2.775); -INSERT INTO base_data VALUES(37, 2, 814, 555, 555, 5, 10, 2.713, 2.775, 2.775); -INSERT INTO base_data VALUES(37, 3, 888, 555, 555, 5, 10, 2.96, 2.775, 2.775); -INSERT INTO base_data VALUES(37, 4, 851, 555, 555, 5, 10, 2.837, 2.775, 2.775); -INSERT INTO base_data VALUES(37, 5, 888, 555, 555, 5, 10, 2.96, 2.775, 2.775); -INSERT INTO base_data VALUES(37, 6, 740, 555, 555, 5, 10, 2.467, 2.775, 2.775); -INSERT INTO base_data VALUES(37, 7, 786.25, 0, 555, 5, 10, 2.621, 0, 2.775); -INSERT INTO base_data VALUES(37, 8, 814, 555, 555, 5, 10, 2.713, 2.775, 2.775); -INSERT INTO base_data VALUES(37, 9, 786.25, 0, 555, 5, 10, 2.621, 0, 2.775); -INSERT INTO base_data VALUES(37, 10, 786.25, 555, 555, 5, 10, 2.621, 2.775, 2.775); -INSERT INTO base_data VALUES(37, 11, 740, 555, 555, 5, 10, 2.467, 2.775, 2.775); -INSERT INTO base_data VALUES(37, 12, 740, 555, 555, 5, 10, 2.467, 2.775, 2.775); -INSERT INTO base_data VALUES(37, 13, 740, 555, 555, 5, 10, 2.467, 2.775, 2.775); -INSERT INTO base_data VALUES(37, 14, 740, 555, 555, 5, 10, 2.467, 2.775, 2.775); -INSERT INTO base_data VALUES(37, 15, 786.25, 555, 555, 5, 10, 2.621, 2.775, 2.775); -INSERT INTO base_data VALUES(37, 16, 786.25, 0, 555, 5, 10, 2.621, 0, 2.775); -INSERT INTO base_data VALUES(38, 1, 950, 0, 570, 5, 10, 3.167, 0, 2.85); -INSERT INTO base_data VALUES(38, 2, 836, 570, 570, 5, 10, 2.787, 2.85, 2.85); -INSERT INTO base_data VALUES(38, 3, 912, 570, 570, 5, 10, 3.04, 2.85, 2.85); -INSERT INTO base_data VALUES(38, 4, 874, 570, 570, 5, 10, 2.913, 2.85, 2.85); -INSERT INTO base_data VALUES(38, 5, 912, 570, 570, 5, 10, 3.04, 2.85, 2.85); -INSERT INTO base_data VALUES(38, 6, 760, 570, 570, 5, 10, 2.533, 2.85, 2.85); -INSERT INTO base_data VALUES(38, 7, 807.5, 0, 570, 5, 10, 2.692, 0, 2.85); -INSERT INTO base_data VALUES(38, 8, 836, 570, 570, 5, 10, 2.787, 2.85, 2.85); -INSERT INTO base_data VALUES(38, 9, 807.5, 0, 570, 5, 10, 2.692, 0, 2.85); -INSERT INTO base_data VALUES(38, 10, 807.5, 570, 570, 5, 10, 2.692, 2.85, 2.85); -INSERT INTO base_data VALUES(38, 11, 760, 570, 570, 5, 10, 2.533, 2.85, 2.85); -INSERT INTO base_data VALUES(38, 12, 760, 570, 570, 5, 10, 2.533, 2.85, 2.85); -INSERT INTO base_data VALUES(38, 13, 760, 570, 570, 5, 10, 2.533, 2.85, 2.85); -INSERT INTO base_data VALUES(38, 14, 760, 570, 570, 5, 10, 2.533, 2.85, 2.85); -INSERT INTO base_data VALUES(38, 15, 807.5, 570, 570, 5, 10, 2.692, 2.85, 2.85); -INSERT INTO base_data VALUES(38, 16, 807.5, 0, 570, 5, 10, 2.692, 0, 2.85); -INSERT INTO base_data VALUES(39, 1, 975, 0, 585, 5, 10, 3.25, 0, 2.925); -INSERT INTO base_data VALUES(39, 2, 858, 585, 585, 5, 10, 2.86, 2.925, 2.925); -INSERT INTO base_data VALUES(39, 3, 936, 585, 585, 5, 10, 3.12, 2.925, 2.925); -INSERT INTO base_data VALUES(39, 4, 897, 585, 585, 5, 10, 2.99, 2.925, 2.925); -INSERT INTO base_data VALUES(39, 5, 936, 585, 585, 5, 10, 3.12, 2.925, 2.925); -INSERT INTO base_data VALUES(39, 6, 780, 585, 585, 5, 10, 2.6, 2.925, 2.925); -INSERT INTO base_data VALUES(39, 7, 828.75, 0, 585, 5, 10, 2.763, 0, 2.925); -INSERT INTO base_data VALUES(39, 8, 858, 585, 585, 5, 10, 2.86, 2.925, 2.925); -INSERT INTO base_data VALUES(39, 9, 828.75, 0, 585, 5, 10, 2.763, 0, 2.925); -INSERT INTO base_data VALUES(39, 10, 828.75, 585, 585, 5, 10, 2.763, 2.925, 2.925); -INSERT INTO base_data VALUES(39, 11, 780, 585, 585, 5, 10, 2.6, 2.925, 2.925); -INSERT INTO base_data VALUES(39, 12, 780, 585, 585, 5, 10, 2.6, 2.925, 2.925); -INSERT INTO base_data VALUES(39, 13, 780, 585, 585, 5, 10, 2.6, 2.925, 2.925); -INSERT INTO base_data VALUES(39, 14, 780, 585, 585, 5, 10, 2.6, 2.925, 2.925); -INSERT INTO base_data VALUES(39, 15, 828.75, 585, 585, 5, 10, 2.763, 2.925, 2.925); -INSERT INTO base_data VALUES(39, 16, 828.75, 0, 585, 5, 10, 2.763, 0, 2.925); -INSERT INTO base_data VALUES(40, 1, 1000, 0, 600, 6, 11, 3.333, 0, 3); -INSERT INTO base_data VALUES(40, 2, 880, 600, 600, 6, 11, 2.933, 3, 3); -INSERT INTO base_data VALUES(40, 3, 960, 600, 600, 6, 11, 3.2, 3, 3); -INSERT INTO base_data VALUES(40, 4, 920, 600, 600, 6, 11, 3.067, 3, 3); -INSERT INTO base_data VALUES(40, 5, 960, 600, 600, 6, 11, 3.2, 3, 3); -INSERT INTO base_data VALUES(40, 6, 800, 600, 600, 6, 11, 2.667, 3, 3); -INSERT INTO base_data VALUES(40, 7, 850, 0, 600, 6, 11, 2.833, 0, 3); -INSERT INTO base_data VALUES(40, 8, 880, 600, 600, 6, 11, 2.933, 3, 3); -INSERT INTO base_data VALUES(40, 9, 850, 0, 600, 6, 11, 2.833, 0, 3); -INSERT INTO base_data VALUES(40, 10, 850, 600, 600, 6, 11, 2.833, 3, 3); -INSERT INTO base_data VALUES(40, 11, 800, 600, 600, 6, 11, 2.667, 3, 3); -INSERT INTO base_data VALUES(40, 12, 800, 600, 600, 6, 11, 2.667, 3, 3); -INSERT INTO base_data VALUES(40, 13, 800, 600, 600, 6, 11, 2.667, 3, 3); -INSERT INTO base_data VALUES(40, 14, 800, 600, 600, 6, 11, 2.667, 3, 3); -INSERT INTO base_data VALUES(40, 15, 850, 600, 600, 6, 11, 2.833, 3, 3); -INSERT INTO base_data VALUES(40, 16, 850, 0, 600, 6, 11, 2.833, 0, 3); -INSERT INTO base_data VALUES(41, 1, 1050, 0, 630, 6, 11, 3.5, 0, 3.15); -INSERT INTO base_data VALUES(41, 2, 924, 630, 630, 6, 11, 3.08, 3.15, 3.15); -INSERT INTO base_data VALUES(41, 3, 1008, 630, 630, 6, 11, 3.36, 3.15, 3.15); -INSERT INTO base_data VALUES(41, 4, 966, 630, 630, 6, 11, 3.22, 3.15, 3.15); -INSERT INTO base_data VALUES(41, 5, 1008, 630, 630, 6, 11, 3.36, 3.15, 3.15); -INSERT INTO base_data VALUES(41, 6, 840, 630, 630, 6, 11, 2.8, 3.15, 3.15); -INSERT INTO base_data VALUES(41, 7, 892.5, 0, 630, 6, 11, 2.975, 0, 3.15); -INSERT INTO base_data VALUES(41, 8, 924, 630, 630, 6, 11, 3.08, 3.15, 3.15); -INSERT INTO base_data VALUES(41, 9, 892.5, 0, 630, 6, 11, 2.975, 0, 3.15); -INSERT INTO base_data VALUES(41, 10, 892.5, 630, 630, 6, 11, 2.975, 3.15, 3.15); -INSERT INTO base_data VALUES(41, 11, 840, 630, 630, 6, 11, 2.8, 3.15, 3.15); -INSERT INTO base_data VALUES(41, 12, 840, 630, 630, 6, 11, 2.8, 3.15, 3.15); -INSERT INTO base_data VALUES(41, 13, 840, 630, 630, 6, 11, 2.8, 3.15, 3.15); -INSERT INTO base_data VALUES(41, 14, 840, 630, 630, 6, 11, 2.8, 3.15, 3.15); -INSERT INTO base_data VALUES(41, 15, 892.5, 630, 630, 6, 11, 2.975, 3.15, 3.15); -INSERT INTO base_data VALUES(41, 16, 892.5, 0, 630, 6, 11, 2.975, 0, 3.15); -INSERT INTO base_data VALUES(42, 1, 1100, 0, 660, 6, 11, 3.667, 0, 3.3); -INSERT INTO base_data VALUES(42, 2, 968, 660, 660, 6, 11, 3.227, 3.3, 3.3); -INSERT INTO base_data VALUES(42, 3, 1056, 660, 660, 6, 11, 3.52, 3.3, 3.3); -INSERT INTO base_data VALUES(42, 4, 1012, 660, 660, 6, 11, 3.373, 3.3, 3.3); -INSERT INTO base_data VALUES(42, 5, 1056, 660, 660, 6, 11, 3.52, 3.3, 3.3); -INSERT INTO base_data VALUES(42, 6, 880, 660, 660, 6, 11, 2.933, 3.3, 3.3); -INSERT INTO base_data VALUES(42, 7, 935, 0, 660, 6, 11, 3.117, 0, 3.3); -INSERT INTO base_data VALUES(42, 8, 968, 660, 660, 6, 11, 3.227, 3.3, 3.3); -INSERT INTO base_data VALUES(42, 9, 935, 0, 660, 6, 11, 3.117, 0, 3.3); -INSERT INTO base_data VALUES(42, 10, 935, 660, 660, 6, 11, 3.117, 3.3, 3.3); -INSERT INTO base_data VALUES(42, 11, 880, 660, 660, 6, 11, 2.933, 3.3, 3.3); -INSERT INTO base_data VALUES(42, 12, 880, 660, 660, 6, 11, 2.933, 3.3, 3.3); -INSERT INTO base_data VALUES(42, 13, 880, 660, 660, 6, 11, 2.933, 3.3, 3.3); -INSERT INTO base_data VALUES(42, 14, 880, 660, 660, 6, 11, 2.933, 3.3, 3.3); -INSERT INTO base_data VALUES(42, 15, 935, 660, 660, 6, 11, 3.117, 3.3, 3.3); -INSERT INTO base_data VALUES(42, 16, 935, 0, 660, 6, 11, 3.117, 0, 3.3); -INSERT INTO base_data VALUES(43, 1, 1150, 0, 690, 6, 11, 3.833, 0, 3.45); -INSERT INTO base_data VALUES(43, 2, 1012, 690, 690, 6, 11, 3.373, 3.45, 3.45); -INSERT INTO base_data VALUES(43, 3, 1104, 690, 690, 6, 11, 3.68, 3.45, 3.45); -INSERT INTO base_data VALUES(43, 4, 1058, 690, 690, 6, 11, 3.527, 3.45, 3.45); -INSERT INTO base_data VALUES(43, 5, 1104, 690, 690, 6, 11, 3.68, 3.45, 3.45); -INSERT INTO base_data VALUES(43, 6, 920, 690, 690, 6, 11, 3.067, 3.45, 3.45); -INSERT INTO base_data VALUES(43, 7, 977.5, 0, 690, 6, 11, 3.258, 0, 3.45); -INSERT INTO base_data VALUES(43, 8, 1012, 690, 690, 6, 11, 3.373, 3.45, 3.45); -INSERT INTO base_data VALUES(43, 9, 977.5, 0, 690, 6, 11, 3.258, 0, 3.45); -INSERT INTO base_data VALUES(43, 10, 977.5, 690, 690, 6, 11, 3.258, 3.45, 3.45); -INSERT INTO base_data VALUES(43, 11, 920, 690, 690, 6, 11, 3.067, 3.45, 3.45); -INSERT INTO base_data VALUES(43, 12, 920, 690, 690, 6, 11, 3.067, 3.45, 3.45); -INSERT INTO base_data VALUES(43, 13, 920, 690, 690, 6, 11, 3.067, 3.45, 3.45); -INSERT INTO base_data VALUES(43, 14, 920, 690, 690, 6, 11, 3.067, 3.45, 3.45); -INSERT INTO base_data VALUES(43, 15, 977.5, 690, 690, 6, 11, 3.258, 3.45, 3.45); -INSERT INTO base_data VALUES(43, 16, 977.5, 0, 690, 6, 11, 3.258, 0, 3.45); -INSERT INTO base_data VALUES(44, 1, 1200, 0, 720, 6, 12, 4, 0, 3.6); -INSERT INTO base_data VALUES(44, 2, 1056, 720, 720, 6, 12, 3.52, 3.6, 3.6); -INSERT INTO base_data VALUES(44, 3, 1152, 720, 720, 6, 12, 3.84, 3.6, 3.6); -INSERT INTO base_data VALUES(44, 4, 1104, 720, 720, 6, 12, 3.68, 3.6, 3.6); -INSERT INTO base_data VALUES(44, 5, 1152, 720, 720, 6, 12, 3.84, 3.6, 3.6); -INSERT INTO base_data VALUES(44, 6, 960, 720, 720, 6, 12, 3.2, 3.6, 3.6); -INSERT INTO base_data VALUES(44, 7, 1020, 0, 720, 6, 12, 3.4, 0, 3.6); -INSERT INTO base_data VALUES(44, 8, 1056, 720, 720, 6, 12, 3.52, 3.6, 3.6); -INSERT INTO base_data VALUES(44, 9, 1020, 0, 720, 6, 12, 3.4, 0, 3.6); -INSERT INTO base_data VALUES(44, 10, 1020, 720, 720, 6, 12, 3.4, 3.6, 3.6); -INSERT INTO base_data VALUES(44, 11, 960, 720, 720, 6, 12, 3.2, 3.6, 3.6); -INSERT INTO base_data VALUES(44, 12, 960, 720, 720, 6, 12, 3.2, 3.6, 3.6); -INSERT INTO base_data VALUES(44, 13, 960, 720, 720, 6, 12, 3.2, 3.6, 3.6); -INSERT INTO base_data VALUES(44, 14, 960, 720, 720, 6, 12, 3.2, 3.6, 3.6); -INSERT INTO base_data VALUES(44, 15, 1020, 720, 720, 6, 12, 3.4, 3.6, 3.6); -INSERT INTO base_data VALUES(44, 16, 1020, 0, 720, 6, 12, 3.4, 0, 3.6); -INSERT INTO base_data VALUES(45, 1, 1250, 0, 750, 6, 12, 4.167, 0, 3.75); -INSERT INTO base_data VALUES(45, 2, 1100, 750, 750, 6, 12, 3.667, 3.75, 3.75); -INSERT INTO base_data VALUES(45, 3, 1200, 750, 750, 6, 12, 4, 3.75, 3.75); -INSERT INTO base_data VALUES(45, 4, 1150, 750, 750, 6, 12, 3.833, 3.75, 3.75); -INSERT INTO base_data VALUES(45, 5, 1200, 750, 750, 6, 12, 4, 3.75, 3.75); -INSERT INTO base_data VALUES(45, 6, 1000, 750, 750, 6, 12, 3.333, 3.75, 3.75); -INSERT INTO base_data VALUES(45, 7, 1062.5, 0, 750, 6, 12, 3.542, 0, 3.75); -INSERT INTO base_data VALUES(45, 8, 1100, 750, 750, 6, 12, 3.667, 3.75, 3.75); -INSERT INTO base_data VALUES(45, 9, 1062.5, 0, 750, 6, 12, 3.542, 0, 3.75); -INSERT INTO base_data VALUES(45, 10, 1062.5, 750, 750, 6, 12, 3.542, 3.75, 3.75); -INSERT INTO base_data VALUES(45, 11, 1000, 750, 750, 6, 12, 3.333, 3.75, 3.75); -INSERT INTO base_data VALUES(45, 12, 1000, 750, 750, 6, 12, 3.333, 3.75, 3.75); -INSERT INTO base_data VALUES(45, 13, 1000, 750, 750, 6, 12, 3.333, 3.75, 3.75); -INSERT INTO base_data VALUES(45, 14, 1000, 750, 750, 6, 12, 3.333, 3.75, 3.75); -INSERT INTO base_data VALUES(45, 15, 1062.5, 750, 750, 6, 12, 3.542, 3.75, 3.75); -INSERT INTO base_data VALUES(45, 16, 1062.5, 0, 750, 6, 12, 3.542, 0, 3.75); -INSERT INTO base_data VALUES(46, 1, 1300, 0, 780, 6, 12, 4.333, 0, 3.9); -INSERT INTO base_data VALUES(46, 2, 1144, 780, 780, 6, 12, 3.813, 3.9, 3.9); -INSERT INTO base_data VALUES(46, 3, 1248, 780, 780, 6, 12, 4.16, 3.9, 3.9); -INSERT INTO base_data VALUES(46, 4, 1196, 780, 780, 6, 12, 3.987, 3.9, 3.9); -INSERT INTO base_data VALUES(46, 5, 1248, 780, 780, 6, 12, 4.16, 3.9, 3.9); -INSERT INTO base_data VALUES(46, 6, 1040, 780, 780, 6, 12, 3.467, 3.9, 3.9); -INSERT INTO base_data VALUES(46, 7, 1105, 0, 780, 6, 12, 3.683, 0, 3.9); -INSERT INTO base_data VALUES(46, 8, 1144, 780, 780, 6, 12, 3.813, 3.9, 3.9); -INSERT INTO base_data VALUES(46, 9, 1105, 0, 780, 6, 12, 3.683, 0, 3.9); -INSERT INTO base_data VALUES(46, 10, 1105, 780, 780, 6, 12, 3.683, 3.9, 3.9); -INSERT INTO base_data VALUES(46, 11, 1040, 780, 780, 6, 12, 3.467, 3.9, 3.9); -INSERT INTO base_data VALUES(46, 12, 1040, 780, 780, 6, 12, 3.467, 3.9, 3.9); -INSERT INTO base_data VALUES(46, 13, 1040, 780, 780, 6, 12, 3.467, 3.9, 3.9); -INSERT INTO base_data VALUES(46, 14, 1040, 780, 780, 6, 12, 3.467, 3.9, 3.9); -INSERT INTO base_data VALUES(46, 15, 1105, 780, 780, 6, 12, 3.683, 3.9, 3.9); -INSERT INTO base_data VALUES(46, 16, 1105, 0, 780, 6, 12, 3.683, 0, 3.9); -INSERT INTO base_data VALUES(47, 1, 1350, 0, 810, 6, 12, 4.5, 0, 4.05); -INSERT INTO base_data VALUES(47, 2, 1188, 810, 810, 6, 12, 3.96, 4.05, 4.05); -INSERT INTO base_data VALUES(47, 3, 1296, 810, 810, 6, 12, 4.32, 4.05, 4.05); -INSERT INTO base_data VALUES(47, 4, 1242, 810, 810, 6, 12, 4.14, 4.05, 4.05); -INSERT INTO base_data VALUES(47, 5, 1296, 810, 810, 6, 12, 4.32, 4.05, 4.05); -INSERT INTO base_data VALUES(47, 6, 1080, 810, 810, 6, 12, 3.6, 4.05, 4.05); -INSERT INTO base_data VALUES(47, 7, 1147.5, 0, 810, 6, 12, 3.825, 0, 4.05); -INSERT INTO base_data VALUES(47, 8, 1188, 810, 810, 6, 12, 3.96, 4.05, 4.05); -INSERT INTO base_data VALUES(47, 9, 1147.5, 0, 810, 6, 12, 3.825, 0, 4.05); -INSERT INTO base_data VALUES(47, 10, 1147.5, 810, 810, 6, 12, 3.825, 4.05, 4.05); -INSERT INTO base_data VALUES(47, 11, 1080, 810, 810, 6, 12, 3.6, 4.05, 4.05); -INSERT INTO base_data VALUES(47, 12, 1080, 810, 810, 6, 12, 3.6, 4.05, 4.05); -INSERT INTO base_data VALUES(47, 13, 1080, 810, 810, 6, 12, 3.6, 4.05, 4.05); -INSERT INTO base_data VALUES(47, 14, 1080, 810, 810, 6, 12, 3.6, 4.05, 4.05); -INSERT INTO base_data VALUES(47, 15, 1147.5, 810, 810, 6, 12, 3.825, 4.05, 4.05); -INSERT INTO base_data VALUES(47, 16, 1147.5, 0, 810, 6, 12, 3.825, 0, 4.05); -INSERT INTO base_data VALUES(48, 1, 1400, 0, 840, 6, 13, 4.667, 0, 4.2); -INSERT INTO base_data VALUES(48, 2, 1232, 840, 840, 6, 13, 4.107, 4.2, 4.2); -INSERT INTO base_data VALUES(48, 3, 1344, 840, 840, 6, 13, 4.48, 4.2, 4.2); -INSERT INTO base_data VALUES(48, 4, 1288, 840, 840, 6, 13, 4.293, 4.2, 4.2); -INSERT INTO base_data VALUES(48, 5, 1344, 840, 840, 6, 13, 4.48, 4.2, 4.2); -INSERT INTO base_data VALUES(48, 6, 1120, 840, 840, 6, 13, 3.733, 4.2, 4.2); -INSERT INTO base_data VALUES(48, 7, 1190, 0, 840, 6, 13, 3.967, 0, 4.2); -INSERT INTO base_data VALUES(48, 8, 1232, 840, 840, 6, 13, 4.107, 4.2, 4.2); -INSERT INTO base_data VALUES(48, 9, 1190, 0, 840, 6, 13, 3.967, 0, 4.2); -INSERT INTO base_data VALUES(48, 10, 1190, 840, 840, 6, 13, 3.967, 4.2, 4.2); -INSERT INTO base_data VALUES(48, 11, 1120, 840, 840, 6, 13, 3.733, 4.2, 4.2); -INSERT INTO base_data VALUES(48, 12, 1120, 840, 840, 6, 13, 3.733, 4.2, 4.2); -INSERT INTO base_data VALUES(48, 13, 1120, 840, 840, 6, 13, 3.733, 4.2, 4.2); -INSERT INTO base_data VALUES(48, 14, 1120, 840, 840, 6, 13, 3.733, 4.2, 4.2); -INSERT INTO base_data VALUES(48, 15, 1190, 840, 840, 6, 13, 3.967, 4.2, 4.2); -INSERT INTO base_data VALUES(48, 16, 1190, 0, 840, 6, 13, 3.967, 0, 4.2); -INSERT INTO base_data VALUES(49, 1, 1450, 0, 870, 6, 13, 4.833, 0, 4.35); -INSERT INTO base_data VALUES(49, 2, 1276, 870, 870, 6, 13, 4.253, 4.35, 4.35); -INSERT INTO base_data VALUES(49, 3, 1392, 870, 870, 6, 13, 4.64, 4.35, 4.35); -INSERT INTO base_data VALUES(49, 4, 1334, 870, 870, 6, 13, 4.447, 4.35, 4.35); -INSERT INTO base_data VALUES(49, 5, 1392, 870, 870, 6, 13, 4.64, 4.35, 4.35); -INSERT INTO base_data VALUES(49, 6, 1160, 870, 870, 6, 13, 3.867, 4.35, 4.35); -INSERT INTO base_data VALUES(49, 7, 1232.5, 0, 870, 6, 13, 4.108, 0, 4.35); -INSERT INTO base_data VALUES(49, 8, 1276, 870, 870, 6, 13, 4.253, 4.35, 4.35); -INSERT INTO base_data VALUES(49, 9, 1232.5, 0, 870, 6, 13, 4.108, 0, 4.35); -INSERT INTO base_data VALUES(49, 10, 1232.5, 870, 870, 6, 13, 4.108, 4.35, 4.35); -INSERT INTO base_data VALUES(49, 11, 1160, 870, 870, 6, 13, 3.867, 4.35, 4.35); -INSERT INTO base_data VALUES(49, 12, 1160, 870, 870, 6, 13, 3.867, 4.35, 4.35); -INSERT INTO base_data VALUES(49, 13, 1160, 870, 870, 6, 13, 3.867, 4.35, 4.35); -INSERT INTO base_data VALUES(49, 14, 1160, 870, 870, 6, 13, 3.867, 4.35, 4.35); -INSERT INTO base_data VALUES(49, 15, 1232.5, 870, 870, 6, 13, 4.108, 4.35, 4.35); -INSERT INTO base_data VALUES(49, 16, 1232.5, 0, 870, 6, 13, 4.108, 0, 4.35); -INSERT INTO base_data VALUES(50, 1, 1500, 0, 900, 7, 13, 5, 0, 4.5); -INSERT INTO base_data VALUES(50, 2, 1320, 900, 900, 7, 13, 4.4, 4.5, 4.5); -INSERT INTO base_data VALUES(50, 3, 1440, 900, 900, 7, 13, 4.8, 4.5, 4.5); -INSERT INTO base_data VALUES(50, 4, 1380, 900, 900, 7, 13, 4.6, 4.5, 4.5); -INSERT INTO base_data VALUES(50, 5, 1440, 900, 900, 7, 13, 4.8, 4.5, 4.5); -INSERT INTO base_data VALUES(50, 6, 1200, 900, 900, 7, 13, 4, 4.5, 4.5); -INSERT INTO base_data VALUES(50, 7, 1275, 0, 900, 7, 13, 4.25, 0, 4.5); -INSERT INTO base_data VALUES(50, 8, 1320, 900, 900, 7, 13, 4.4, 4.5, 4.5); -INSERT INTO base_data VALUES(50, 9, 1275, 0, 900, 7, 13, 4.25, 0, 4.5); -INSERT INTO base_data VALUES(50, 10, 1275, 900, 900, 7, 13, 4.25, 4.5, 4.5); -INSERT INTO base_data VALUES(50, 11, 1200, 900, 900, 7, 13, 4, 4.5, 4.5); -INSERT INTO base_data VALUES(50, 12, 1200, 900, 900, 7, 13, 4, 4.5, 4.5); -INSERT INTO base_data VALUES(50, 13, 1200, 900, 900, 7, 13, 4, 4.5, 4.5); -INSERT INTO base_data VALUES(50, 14, 1200, 900, 900, 7, 13, 4, 4.5, 4.5); -INSERT INTO base_data VALUES(50, 15, 1275, 900, 900, 7, 13, 4.25, 4.5, 4.5); -INSERT INTO base_data VALUES(50, 16, 1275, 0, 900, 7, 13, 4.25, 0, 4.5); -INSERT INTO base_data VALUES(51, 1, 1550, 0, 930, 7, 14, 5.167, 0, 4.65); -INSERT INTO base_data VALUES(51, 2, 1364, 930, 930, 7, 14, 4.547, 4.65, 4.65); -INSERT INTO base_data VALUES(51, 3, 1488, 930, 930, 7, 14, 4.96, 4.65, 4.65); -INSERT INTO base_data VALUES(51, 4, 1426, 930, 930, 7, 14, 4.753, 4.65, 4.65); -INSERT INTO base_data VALUES(51, 5, 1488, 930, 930, 7, 14, 4.96, 4.65, 4.65); -INSERT INTO base_data VALUES(51, 6, 1240, 930, 930, 7, 14, 4.133, 4.65, 4.65); -INSERT INTO base_data VALUES(51, 7, 1317.5, 0, 930, 7, 14, 4.392, 0, 4.65); -INSERT INTO base_data VALUES(51, 8, 1364, 930, 930, 7, 14, 4.547, 4.65, 4.65); -INSERT INTO base_data VALUES(51, 9, 1317.5, 0, 930, 7, 14, 4.392, 0, 4.65); -INSERT INTO base_data VALUES(51, 10, 1317.5, 930, 930, 7, 14, 4.392, 4.65, 4.65); -INSERT INTO base_data VALUES(51, 11, 1240, 930, 930, 7, 14, 4.133, 4.65, 4.65); -INSERT INTO base_data VALUES(51, 12, 1240, 930, 930, 7, 14, 4.133, 4.65, 4.65); -INSERT INTO base_data VALUES(51, 13, 1240, 930, 930, 7, 14, 4.133, 4.65, 4.65); -INSERT INTO base_data VALUES(51, 14, 1240, 930, 930, 7, 14, 4.133, 4.65, 4.65); -INSERT INTO base_data VALUES(51, 15, 1317.5, 930, 930, 7, 14, 4.392, 4.65, 4.65); -INSERT INTO base_data VALUES(51, 16, 1317.5, 0, 930, 7, 14, 4.392, 0, 4.65); -INSERT INTO base_data VALUES(52, 1, 1600, 0, 960, 7, 15, 5.333, 0, 4.8); -INSERT INTO base_data VALUES(52, 2, 1408, 960, 960, 7, 15, 4.693, 4.8, 4.8); -INSERT INTO base_data VALUES(52, 3, 1536, 960, 960, 7, 15, 5.12, 4.8, 4.8); -INSERT INTO base_data VALUES(52, 4, 1472, 960, 960, 7, 15, 4.907, 4.8, 4.8); -INSERT INTO base_data VALUES(52, 5, 1536, 960, 960, 7, 15, 5.12, 4.8, 4.8); -INSERT INTO base_data VALUES(52, 6, 1280, 960, 960, 7, 15, 4.267, 4.8, 4.8); -INSERT INTO base_data VALUES(52, 7, 1360, 0, 960, 7, 15, 4.533, 0, 4.8); -INSERT INTO base_data VALUES(52, 8, 1408, 960, 960, 7, 15, 4.693, 4.8, 4.8); -INSERT INTO base_data VALUES(52, 9, 1360, 0, 960, 7, 15, 4.533, 0, 4.8); -INSERT INTO base_data VALUES(52, 10, 1360, 960, 960, 7, 15, 4.533, 4.8, 4.8); -INSERT INTO base_data VALUES(52, 11, 1280, 960, 960, 7, 15, 4.267, 4.8, 4.8); -INSERT INTO base_data VALUES(52, 12, 1280, 960, 960, 7, 15, 4.267, 4.8, 4.8); -INSERT INTO base_data VALUES(52, 13, 1280, 960, 960, 7, 15, 4.267, 4.8, 4.8); -INSERT INTO base_data VALUES(52, 14, 1280, 960, 960, 7, 15, 4.267, 4.8, 4.8); -INSERT INTO base_data VALUES(52, 15, 1360, 960, 960, 7, 15, 4.533, 4.8, 4.8); -INSERT INTO base_data VALUES(52, 16, 1360, 0, 960, 7, 15, 4.533, 0, 4.8); -INSERT INTO base_data VALUES(53, 1, 1650, 0, 990, 7, 15, 5.5, 0, 4.95); -INSERT INTO base_data VALUES(53, 2, 1452, 990, 990, 7, 15, 4.84, 4.95, 4.95); -INSERT INTO base_data VALUES(53, 3, 1584, 990, 990, 7, 15, 5.28, 4.95, 4.95); -INSERT INTO base_data VALUES(53, 4, 1518, 990, 990, 7, 15, 5.06, 4.95, 4.95); -INSERT INTO base_data VALUES(53, 5, 1584, 990, 990, 7, 15, 5.28, 4.95, 4.95); -INSERT INTO base_data VALUES(53, 6, 1320, 990, 990, 7, 15, 4.4, 4.95, 4.95); -INSERT INTO base_data VALUES(53, 7, 1402.5, 0, 990, 7, 15, 4.675, 0, 4.95); -INSERT INTO base_data VALUES(53, 8, 1452, 990, 990, 7, 15, 4.84, 4.95, 4.95); -INSERT INTO base_data VALUES(53, 9, 1402.5, 0, 990, 7, 15, 4.675, 0, 4.95); -INSERT INTO base_data VALUES(53, 10, 1402.5, 990, 990, 7, 15, 4.675, 4.95, 4.95); -INSERT INTO base_data VALUES(53, 11, 1320, 990, 990, 7, 15, 4.4, 4.95, 4.95); -INSERT INTO base_data VALUES(53, 12, 1320, 990, 990, 7, 15, 4.4, 4.95, 4.95); -INSERT INTO base_data VALUES(53, 13, 1320, 990, 990, 7, 15, 4.4, 4.95, 4.95); -INSERT INTO base_data VALUES(53, 14, 1320, 990, 990, 7, 15, 4.4, 4.95, 4.95); -INSERT INTO base_data VALUES(53, 15, 1402.5, 990, 990, 7, 15, 4.675, 4.95, 4.95); -INSERT INTO base_data VALUES(53, 16, 1402.5, 0, 990, 7, 15, 4.675, 0, 4.95); -INSERT INTO base_data VALUES(54, 1, 1700, 0, 1020, 7, 15, 5.667, 0, 5.1); -INSERT INTO base_data VALUES(54, 2, 1496, 1020, 1020, 7, 15, 4.987, 5.1, 5.1); -INSERT INTO base_data VALUES(54, 3, 1632, 1020, 1020, 7, 15, 5.44, 5.1, 5.1); -INSERT INTO base_data VALUES(54, 4, 1564, 1020, 1020, 7, 15, 5.213, 5.1, 5.1); -INSERT INTO base_data VALUES(54, 5, 1632, 1020, 1020, 7, 15, 5.44, 5.1, 5.1); -INSERT INTO base_data VALUES(54, 6, 1360, 1020, 1020, 7, 15, 4.533, 5.1, 5.1); -INSERT INTO base_data VALUES(54, 7, 1445, 0, 1020, 7, 15, 4.817, 0, 5.1); -INSERT INTO base_data VALUES(54, 8, 1496, 1020, 1020, 7, 15, 4.987, 5.1, 5.1); -INSERT INTO base_data VALUES(54, 9, 1445, 0, 1020, 7, 15, 4.817, 0, 5.1); -INSERT INTO base_data VALUES(54, 10, 1445, 1020, 1020, 7, 15, 4.817, 5.1, 5.1); -INSERT INTO base_data VALUES(54, 11, 1360, 1020, 1020, 7, 15, 4.533, 5.1, 5.1); -INSERT INTO base_data VALUES(54, 12, 1360, 1020, 1020, 7, 15, 4.533, 5.1, 5.1); -INSERT INTO base_data VALUES(54, 13, 1360, 1020, 1020, 7, 15, 4.533, 5.1, 5.1); -INSERT INTO base_data VALUES(54, 14, 1360, 1020, 1020, 7, 15, 4.533, 5.1, 5.1); -INSERT INTO base_data VALUES(54, 15, 1445, 1020, 1020, 7, 15, 4.817, 5.1, 5.1); -INSERT INTO base_data VALUES(54, 16, 1445, 0, 1020, 7, 15, 4.817, 0, 5.1); -INSERT INTO base_data VALUES(55, 1, 1750, 0, 1050, 7, 15, 5.833, 0, 5.25); -INSERT INTO base_data VALUES(55, 2, 1540, 1050, 1050, 7, 15, 5.133, 5.25, 5.25); -INSERT INTO base_data VALUES(55, 3, 1680, 1050, 1050, 7, 15, 5.6, 5.25, 5.25); -INSERT INTO base_data VALUES(55, 4, 1610, 1050, 1050, 7, 15, 5.367, 5.25, 5.25); -INSERT INTO base_data VALUES(55, 5, 1680, 1050, 1050, 7, 15, 5.6, 5.25, 5.25); -INSERT INTO base_data VALUES(55, 6, 1400, 1050, 1050, 7, 15, 4.667, 5.25, 5.25); -INSERT INTO base_data VALUES(55, 7, 1487.5, 0, 1050, 7, 15, 4.958, 0, 5.25); -INSERT INTO base_data VALUES(55, 8, 1540, 1050, 1050, 7, 15, 5.133, 5.25, 5.25); -INSERT INTO base_data VALUES(55, 9, 1487.5, 0, 1050, 7, 15, 4.958, 0, 5.25); -INSERT INTO base_data VALUES(55, 10, 1487.5, 1050, 1050, 7, 15, 4.958, 5.25, 5.25); -INSERT INTO base_data VALUES(55, 11, 1400, 1050, 1050, 7, 15, 4.667, 5.25, 5.25); -INSERT INTO base_data VALUES(55, 12, 1400, 1050, 1050, 7, 15, 4.667, 5.25, 5.25); -INSERT INTO base_data VALUES(55, 13, 1400, 1050, 1050, 7, 15, 4.667, 5.25, 5.25); -INSERT INTO base_data VALUES(55, 14, 1400, 1050, 1050, 7, 15, 4.667, 5.25, 5.25); -INSERT INTO base_data VALUES(55, 15, 1487.5, 1050, 1050, 7, 15, 4.958, 5.25, 5.25); -INSERT INTO base_data VALUES(55, 16, 1487.5, 0, 1050, 7, 15, 4.958, 0, 5.25); -INSERT INTO base_data VALUES(56, 1, 1800, 0, 1080, 7, 17, 6, 0, 5.4); -INSERT INTO base_data VALUES(56, 2, 1584, 1080, 1080, 7, 17, 5.28, 5.4, 5.4); -INSERT INTO base_data VALUES(56, 3, 1728, 1080, 1080, 7, 17, 5.76, 5.4, 5.4); -INSERT INTO base_data VALUES(56, 4, 1656, 1080, 1080, 7, 17, 5.52, 5.4, 5.4); -INSERT INTO base_data VALUES(56, 5, 1728, 1080, 1080, 7, 17, 5.76, 5.4, 5.4); -INSERT INTO base_data VALUES(56, 6, 1440, 1080, 1080, 7, 17, 4.8, 5.4, 5.4); -INSERT INTO base_data VALUES(56, 7, 1530, 0, 1080, 7, 17, 5.1, 0, 5.4); -INSERT INTO base_data VALUES(56, 8, 1584, 1080, 1080, 7, 17, 5.28, 5.4, 5.4); -INSERT INTO base_data VALUES(56, 9, 1530, 0, 1080, 7, 17, 5.1, 0, 5.4); -INSERT INTO base_data VALUES(56, 10, 1530, 1080, 1080, 7, 17, 5.1, 5.4, 5.4); -INSERT INTO base_data VALUES(56, 11, 1440, 1080, 1080, 7, 17, 4.8, 5.4, 5.4); -INSERT INTO base_data VALUES(56, 12, 1440, 1080, 1080, 7, 17, 4.8, 5.4, 5.4); -INSERT INTO base_data VALUES(56, 13, 1440, 1080, 1080, 7, 17, 4.8, 5.4, 5.4); -INSERT INTO base_data VALUES(56, 14, 1440, 1080, 1080, 7, 17, 4.8, 5.4, 5.4); -INSERT INTO base_data VALUES(56, 15, 1530, 1080, 1080, 7, 17, 5.1, 5.4, 5.4); -INSERT INTO base_data VALUES(56, 16, 1530, 0, 1080, 7, 17, 5.1, 0, 5.4); -INSERT INTO base_data VALUES(57, 1, 1850, 0, 1110, 7, 18, 6.167, 0, 5.55); -INSERT INTO base_data VALUES(57, 2, 1628, 1110, 1110, 7, 18, 5.427, 5.55, 5.55); -INSERT INTO base_data VALUES(57, 3, 1776, 1110, 1110, 7, 18, 5.92, 5.55, 5.55); -INSERT INTO base_data VALUES(57, 4, 1702, 1110, 1110, 7, 18, 5.673, 5.55, 5.55); -INSERT INTO base_data VALUES(57, 5, 1776, 1110, 1110, 7, 18, 5.92, 5.55, 5.55); -INSERT INTO base_data VALUES(57, 6, 1480, 1110, 1110, 7, 18, 4.933, 5.55, 5.55); -INSERT INTO base_data VALUES(57, 7, 1572.5, 0, 1110, 7, 18, 5.242, 0, 5.55); -INSERT INTO base_data VALUES(57, 8, 1628, 1110, 1110, 7, 18, 5.427, 5.55, 5.55); -INSERT INTO base_data VALUES(57, 9, 1572.5, 0, 1110, 7, 18, 5.242, 0, 5.55); -INSERT INTO base_data VALUES(57, 10, 1572.5, 1110, 1110, 7, 18, 5.242, 5.55, 5.55); -INSERT INTO base_data VALUES(57, 11, 1480, 1110, 1110, 7, 18, 4.933, 5.55, 5.55); -INSERT INTO base_data VALUES(57, 12, 1480, 1110, 1110, 7, 18, 4.933, 5.55, 5.55); -INSERT INTO base_data VALUES(57, 13, 1480, 1110, 1110, 7, 18, 4.933, 5.55, 5.55); -INSERT INTO base_data VALUES(57, 14, 1480, 1110, 1110, 7, 18, 4.933, 5.55, 5.55); -INSERT INTO base_data VALUES(57, 15, 1572.5, 1110, 1110, 7, 18, 5.242, 5.55, 5.55); -INSERT INTO base_data VALUES(57, 16, 1572.5, 0, 1110, 7, 18, 5.242, 0, 5.55); -INSERT INTO base_data VALUES(58, 1, 1900, 0, 1140, 7, 18, 6.333, 0, 5.7); -INSERT INTO base_data VALUES(58, 2, 1672, 1140, 1140, 7, 18, 5.573, 5.7, 5.7); -INSERT INTO base_data VALUES(58, 3, 1824, 1140, 1140, 7, 18, 6.08, 5.7, 5.7); -INSERT INTO base_data VALUES(58, 4, 1748, 1140, 1140, 7, 18, 5.827, 5.7, 5.7); -INSERT INTO base_data VALUES(58, 5, 1824, 1140, 1140, 7, 18, 6.08, 5.7, 5.7); -INSERT INTO base_data VALUES(58, 6, 1520, 1140, 1140, 7, 18, 5.067, 5.7, 5.7); -INSERT INTO base_data VALUES(58, 7, 1615, 0, 1140, 7, 18, 5.383, 0, 5.7); -INSERT INTO base_data VALUES(58, 8, 1672, 1140, 1140, 7, 18, 5.573, 5.7, 5.7); -INSERT INTO base_data VALUES(58, 9, 1615, 0, 1140, 7, 18, 5.383, 0, 5.7); -INSERT INTO base_data VALUES(58, 10, 1615, 1140, 1140, 7, 18, 5.383, 5.7, 5.7); -INSERT INTO base_data VALUES(58, 11, 1520, 1140, 1140, 7, 18, 5.067, 5.7, 5.7); -INSERT INTO base_data VALUES(58, 12, 1520, 1140, 1140, 7, 18, 5.067, 5.7, 5.7); -INSERT INTO base_data VALUES(58, 13, 1520, 1140, 1140, 7, 18, 5.067, 5.7, 5.7); -INSERT INTO base_data VALUES(58, 14, 1520, 1140, 1140, 7, 18, 5.067, 5.7, 5.7); -INSERT INTO base_data VALUES(58, 15, 1615, 1140, 1140, 7, 18, 5.383, 5.7, 5.7); -INSERT INTO base_data VALUES(58, 16, 1615, 0, 1140, 7, 18, 5.383, 0, 5.7); -INSERT INTO base_data VALUES(59, 1, 1950, 0, 1170, 7, 18, 6.5, 0, 5.85); -INSERT INTO base_data VALUES(59, 2, 1716, 1170, 1170, 7, 18, 5.72, 5.85, 5.85); -INSERT INTO base_data VALUES(59, 3, 1872, 1170, 1170, 7, 18, 6.24, 5.85, 5.85); -INSERT INTO base_data VALUES(59, 4, 1794, 1170, 1170, 7, 18, 5.98, 5.85, 5.85); -INSERT INTO base_data VALUES(59, 5, 1872, 1170, 1170, 7, 18, 6.24, 5.85, 5.85); -INSERT INTO base_data VALUES(59, 6, 1560, 1170, 1170, 7, 18, 5.2, 5.85, 5.85); -INSERT INTO base_data VALUES(59, 7, 1657.5, 0, 1170, 7, 18, 5.525, 0, 5.85); -INSERT INTO base_data VALUES(59, 8, 1716, 1170, 1170, 7, 18, 5.72, 5.85, 5.85); -INSERT INTO base_data VALUES(59, 9, 1657.5, 0, 1170, 7, 18, 5.525, 0, 5.85); -INSERT INTO base_data VALUES(59, 10, 1657.5, 1170, 1170, 7, 18, 5.525, 5.85, 5.85); -INSERT INTO base_data VALUES(59, 11, 1560, 1170, 1170, 7, 18, 5.2, 5.85, 5.85); -INSERT INTO base_data VALUES(59, 12, 1560, 1170, 1170, 7, 18, 5.2, 5.85, 5.85); -INSERT INTO base_data VALUES(59, 13, 1560, 1170, 1170, 7, 18, 5.2, 5.85, 5.85); -INSERT INTO base_data VALUES(59, 14, 1560, 1170, 1170, 7, 18, 5.2, 5.85, 5.85); -INSERT INTO base_data VALUES(59, 15, 1657.5, 1170, 1170, 7, 18, 5.525, 5.85, 5.85); -INSERT INTO base_data VALUES(59, 16, 1657.5, 0, 1170, 7, 18, 5.525, 0, 5.85); -INSERT INTO base_data VALUES(60, 1, 2000, 0, 1200, 8, 19, 6.667, 0, 6); -INSERT INTO base_data VALUES(60, 2, 1760, 1200, 1200, 8, 19, 5.867, 6, 6); -INSERT INTO base_data VALUES(60, 3, 1920, 1200, 1200, 8, 19, 6.4, 6, 6); -INSERT INTO base_data VALUES(60, 4, 1840, 1200, 1200, 8, 19, 6.133, 6, 6); -INSERT INTO base_data VALUES(60, 5, 1920, 1200, 1200, 8, 19, 6.4, 6, 6); -INSERT INTO base_data VALUES(60, 6, 1600, 1200, 1200, 8, 19, 5.333, 6, 6); -INSERT INTO base_data VALUES(60, 7, 1700, 0, 1200, 8, 19, 5.667, 0, 6); -INSERT INTO base_data VALUES(60, 8, 1760, 1200, 1200, 8, 19, 5.867, 6, 6); -INSERT INTO base_data VALUES(60, 9, 1700, 0, 1200, 8, 19, 5.667, 0, 6); -INSERT INTO base_data VALUES(60, 10, 1700, 1200, 1200, 8, 19, 5.667, 6, 6); -INSERT INTO base_data VALUES(60, 11, 1600, 1200, 1200, 8, 19, 5.333, 6, 6); -INSERT INTO base_data VALUES(60, 12, 1600, 1200, 1200, 8, 19, 5.333, 6, 6); -INSERT INTO base_data VALUES(60, 13, 1600, 1200, 1200, 8, 19, 5.333, 6, 6); -INSERT INTO base_data VALUES(60, 14, 1600, 1200, 1200, 8, 19, 5.333, 6, 6); -INSERT INTO base_data VALUES(60, 15, 1700, 1200, 1200, 8, 19, 5.667, 6, 6); -INSERT INTO base_data VALUES(60, 16, 1700, 0, 1200, 8, 19, 5.667, 0, 6); -INSERT INTO base_data VALUES(61, 1, 2050, 0, 1230, 8, 19, 6.833, 0, 6.15); -INSERT INTO base_data VALUES(61, 2, 1804, 1230, 1230, 8, 19, 6.013, 6.15, 6.15); -INSERT INTO base_data VALUES(61, 3, 1968, 1230, 1230, 8, 19, 6.56, 6.15, 6.15); -INSERT INTO base_data VALUES(61, 4, 1886, 1230, 1230, 8, 19, 6.287, 6.15, 6.15); -INSERT INTO base_data VALUES(61, 5, 1968, 1230, 1230, 8, 19, 6.56, 6.15, 6.15); -INSERT INTO base_data VALUES(61, 6, 1640, 1230, 1230, 8, 19, 5.467, 6.15, 6.15); -INSERT INTO base_data VALUES(61, 7, 1742.5, 0, 1230, 8, 19, 5.808, 0, 6.15); -INSERT INTO base_data VALUES(61, 8, 1804, 1230, 1230, 8, 19, 6.013, 6.15, 6.15); -INSERT INTO base_data VALUES(61, 9, 1742.5, 0, 1230, 8, 19, 5.808, 0, 6.15); -INSERT INTO base_data VALUES(61, 10, 1742.5, 1230, 1230, 8, 19, 5.808, 6.15, 6.15); -INSERT INTO base_data VALUES(61, 11, 1640, 1230, 1230, 8, 19, 5.467, 6.15, 6.15); -INSERT INTO base_data VALUES(61, 12, 1640, 1230, 1230, 8, 19, 5.467, 6.15, 6.15); -INSERT INTO base_data VALUES(61, 13, 1640, 1230, 1230, 8, 19, 5.467, 6.15, 6.15); -INSERT INTO base_data VALUES(61, 14, 1640, 1230, 1230, 8, 19, 5.467, 6.15, 6.15); -INSERT INTO base_data VALUES(61, 15, 1742.5, 1230, 1230, 8, 19, 5.808, 6.15, 6.15); -INSERT INTO base_data VALUES(61, 16, 1742.5, 0, 1230, 8, 19, 5.808, 0, 6.15); -INSERT INTO base_data VALUES(62, 1, 2100, 0, 1260, 8, 19, 7, 0, 6.3); -INSERT INTO base_data VALUES(62, 2, 1848, 1260, 1260, 8, 19, 6.16, 6.3, 6.3); -INSERT INTO base_data VALUES(62, 3, 2016, 1260, 1260, 8, 19, 6.72, 6.3, 6.3); -INSERT INTO base_data VALUES(62, 4, 1932, 1260, 1260, 8, 19, 6.44, 6.3, 6.3); -INSERT INTO base_data VALUES(62, 5, 2016, 1260, 1260, 8, 19, 6.72, 6.3, 6.3); -INSERT INTO base_data VALUES(62, 6, 1680, 1260, 1260, 8, 19, 5.6, 6.3, 6.3); -INSERT INTO base_data VALUES(62, 7, 1785, 0, 1260, 8, 19, 5.95, 0, 6.3); -INSERT INTO base_data VALUES(62, 8, 1848, 1260, 1260, 8, 19, 6.16, 6.3, 6.3); -INSERT INTO base_data VALUES(62, 9, 1785, 0, 1260, 8, 19, 5.95, 0, 6.3); -INSERT INTO base_data VALUES(62, 10, 1785, 1260, 1260, 8, 19, 5.95, 6.3, 6.3); -INSERT INTO base_data VALUES(62, 11, 1680, 1260, 1260, 8, 19, 5.6, 6.3, 6.3); -INSERT INTO base_data VALUES(62, 12, 1680, 1260, 1260, 8, 19, 5.6, 6.3, 6.3); -INSERT INTO base_data VALUES(62, 13, 1680, 1260, 1260, 8, 19, 5.6, 6.3, 6.3); -INSERT INTO base_data VALUES(62, 14, 1680, 1260, 1260, 8, 19, 5.6, 6.3, 6.3); -INSERT INTO base_data VALUES(62, 15, 1785, 1260, 1260, 8, 19, 5.95, 6.3, 6.3); -INSERT INTO base_data VALUES(62, 16, 1785, 0, 1260, 8, 19, 5.95, 0, 6.3); -INSERT INTO base_data VALUES(63, 1, 2150, 0, 1290, 8, 19, 7.167, 0, 6.45); -INSERT INTO base_data VALUES(63, 2, 1892, 1290, 1290, 8, 19, 6.307, 6.45, 6.45); -INSERT INTO base_data VALUES(63, 3, 2064, 1290, 1290, 8, 19, 6.88, 6.45, 6.45); -INSERT INTO base_data VALUES(63, 4, 1978, 1290, 1290, 8, 19, 6.593, 6.45, 6.45); -INSERT INTO base_data VALUES(63, 5, 2064, 1290, 1290, 8, 19, 6.88, 6.45, 6.45); -INSERT INTO base_data VALUES(63, 6, 1720, 1290, 1290, 8, 19, 5.733, 6.45, 6.45); -INSERT INTO base_data VALUES(63, 7, 1827.5, 0, 1290, 8, 19, 6.092, 0, 6.45); -INSERT INTO base_data VALUES(63, 8, 1892, 1290, 1290, 8, 19, 6.307, 6.45, 6.45); -INSERT INTO base_data VALUES(63, 9, 1827.5, 0, 1290, 8, 19, 6.092, 0, 6.45); -INSERT INTO base_data VALUES(63, 10, 1827.5, 1290, 1290, 8, 19, 6.092, 6.45, 6.45); -INSERT INTO base_data VALUES(63, 11, 1720, 1290, 1290, 8, 19, 5.733, 6.45, 6.45); -INSERT INTO base_data VALUES(63, 12, 1720, 1290, 1290, 8, 19, 5.733, 6.45, 6.45); -INSERT INTO base_data VALUES(63, 13, 1720, 1290, 1290, 8, 19, 5.733, 6.45, 6.45); -INSERT INTO base_data VALUES(63, 14, 1720, 1290, 1290, 8, 19, 5.733, 6.45, 6.45); -INSERT INTO base_data VALUES(63, 15, 1827.5, 1290, 1290, 8, 19, 6.092, 6.45, 6.45); -INSERT INTO base_data VALUES(63, 16, 1827.5, 0, 1290, 8, 19, 6.092, 0, 6.45); -INSERT INTO base_data VALUES(64, 1, 2200, 0, 1320, 8, 20, 7.333, 0, 6.6); -INSERT INTO base_data VALUES(64, 2, 1936, 1320, 1320, 8, 20, 6.453, 6.6, 6.6); -INSERT INTO base_data VALUES(64, 3, 2112, 1320, 1320, 8, 20, 7.04, 6.6, 6.6); -INSERT INTO base_data VALUES(64, 4, 2024, 1320, 1320, 8, 20, 6.747, 6.6, 6.6); -INSERT INTO base_data VALUES(64, 5, 2112, 1320, 1320, 8, 20, 7.04, 6.6, 6.6); -INSERT INTO base_data VALUES(64, 6, 1760, 1320, 1320, 8, 20, 5.867, 6.6, 6.6); -INSERT INTO base_data VALUES(64, 7, 1870, 0, 1320, 8, 20, 6.233, 0, 6.6); -INSERT INTO base_data VALUES(64, 8, 1936, 1320, 1320, 8, 20, 6.453, 6.6, 6.6); -INSERT INTO base_data VALUES(64, 9, 1870, 0, 1320, 8, 20, 6.233, 0, 6.6); -INSERT INTO base_data VALUES(64, 10, 1870, 1320, 1320, 8, 20, 6.233, 6.6, 6.6); -INSERT INTO base_data VALUES(64, 11, 1760, 1320, 1320, 8, 20, 5.867, 6.6, 6.6); -INSERT INTO base_data VALUES(64, 12, 1760, 1320, 1320, 8, 20, 5.867, 6.6, 6.6); -INSERT INTO base_data VALUES(64, 13, 1760, 1320, 1320, 8, 20, 5.867, 6.6, 6.6); -INSERT INTO base_data VALUES(64, 14, 1760, 1320, 1320, 8, 20, 5.867, 6.6, 6.6); -INSERT INTO base_data VALUES(64, 15, 1870, 1320, 1320, 8, 20, 6.233, 6.6, 6.6); -INSERT INTO base_data VALUES(64, 16, 1870, 0, 1320, 8, 20, 6.233, 0, 6.6); -INSERT INTO base_data VALUES(65, 1, 2250, 0, 1350, 8, 20, 7.5, 0, 6.75); -INSERT INTO base_data VALUES(65, 2, 1980, 1350, 1350, 8, 20, 6.6, 6.75, 6.75); -INSERT INTO base_data VALUES(65, 3, 2160, 1350, 1350, 8, 20, 7.2, 6.75, 6.75); -INSERT INTO base_data VALUES(65, 4, 2070, 1350, 1350, 8, 20, 6.9, 6.75, 6.75); -INSERT INTO base_data VALUES(65, 5, 2160, 1350, 1350, 8, 20, 7.2, 6.75, 6.75); -INSERT INTO base_data VALUES(65, 6, 1800, 1350, 1350, 8, 20, 6, 6.75, 6.75); -INSERT INTO base_data VALUES(65, 7, 1912.5, 0, 1350, 8, 20, 6.375, 0, 6.75); -INSERT INTO base_data VALUES(65, 8, 1980, 1350, 1350, 8, 20, 6.6, 6.75, 6.75); -INSERT INTO base_data VALUES(65, 9, 1912.5, 0, 1350, 8, 20, 6.375, 0, 6.75); -INSERT INTO base_data VALUES(65, 10, 1912.5, 1350, 1350, 8, 20, 6.375, 6.75, 6.75); -INSERT INTO base_data VALUES(65, 11, 1800, 1350, 1350, 8, 20, 6, 6.75, 6.75); -INSERT INTO base_data VALUES(65, 12, 1800, 1350, 1350, 8, 20, 6, 6.75, 6.75); -INSERT INTO base_data VALUES(65, 13, 1800, 1350, 1350, 8, 20, 6, 6.75, 6.75); -INSERT INTO base_data VALUES(65, 14, 1800, 1350, 1350, 8, 20, 6, 6.75, 6.75); -INSERT INTO base_data VALUES(65, 15, 1912.5, 1350, 1350, 8, 20, 6.375, 6.75, 6.75); -INSERT INTO base_data VALUES(65, 16, 1912.5, 0, 1350, 8, 20, 6.375, 0, 6.75); -INSERT INTO base_data VALUES(66, 1, 2300, 0, 1380, 8, 20, 7.667, 0, 6.9); -INSERT INTO base_data VALUES(66, 2, 2024, 1380, 1380, 8, 20, 6.747, 6.9, 6.9); -INSERT INTO base_data VALUES(66, 3, 2208, 1380, 1380, 8, 20, 7.36, 6.9, 6.9); -INSERT INTO base_data VALUES(66, 4, 2116, 1380, 1380, 8, 20, 7.053, 6.9, 6.9); -INSERT INTO base_data VALUES(66, 5, 2208, 1380, 1380, 8, 20, 7.36, 6.9, 6.9); -INSERT INTO base_data VALUES(66, 6, 1840, 1380, 1380, 8, 20, 6.133, 6.9, 6.9); -INSERT INTO base_data VALUES(66, 7, 1955, 0, 1380, 8, 20, 6.517, 0, 6.9); -INSERT INTO base_data VALUES(66, 8, 2024, 1380, 1380, 8, 20, 6.747, 6.9, 6.9); -INSERT INTO base_data VALUES(66, 9, 1955, 0, 1380, 8, 20, 6.517, 0, 6.9); -INSERT INTO base_data VALUES(66, 10, 1955, 1380, 1380, 8, 20, 6.517, 6.9, 6.9); -INSERT INTO base_data VALUES(66, 11, 1840, 1380, 1380, 8, 20, 6.133, 6.9, 6.9); -INSERT INTO base_data VALUES(66, 12, 1840, 1380, 1380, 8, 20, 6.133, 6.9, 6.9); -INSERT INTO base_data VALUES(66, 13, 1840, 1380, 1380, 8, 20, 6.133, 6.9, 6.9); -INSERT INTO base_data VALUES(66, 14, 1840, 1380, 1380, 8, 20, 6.133, 6.9, 6.9); -INSERT INTO base_data VALUES(66, 15, 1955, 1380, 1380, 8, 20, 6.517, 6.9, 6.9); -INSERT INTO base_data VALUES(66, 16, 1955, 0, 1380, 8, 20, 6.517, 0, 6.9); -INSERT INTO base_data VALUES(67, 1, 2350, 0, 1410, 8, 20, 7.833, 0, 7.05); -INSERT INTO base_data VALUES(67, 2, 2068, 1410, 1410, 8, 20, 6.893, 7.05, 7.05); -INSERT INTO base_data VALUES(67, 3, 2256, 1410, 1410, 8, 20, 7.52, 7.05, 7.05); -INSERT INTO base_data VALUES(67, 4, 2162, 1410, 1410, 8, 20, 7.207, 7.05, 7.05); -INSERT INTO base_data VALUES(67, 5, 2256, 1410, 1410, 8, 20, 7.52, 7.05, 7.05); -INSERT INTO base_data VALUES(67, 6, 1880, 1410, 1410, 8, 20, 6.267, 7.05, 7.05); -INSERT INTO base_data VALUES(67, 7, 1997.5, 0, 1410, 8, 20, 6.658, 0, 7.05); -INSERT INTO base_data VALUES(67, 8, 2068, 1410, 1410, 8, 20, 6.893, 7.05, 7.05); -INSERT INTO base_data VALUES(67, 9, 1997.5, 0, 1410, 8, 20, 6.658, 0, 7.05); -INSERT INTO base_data VALUES(67, 10, 1997.5, 1410, 1410, 8, 20, 6.658, 7.05, 7.05); -INSERT INTO base_data VALUES(67, 11, 1880, 1410, 1410, 8, 20, 6.267, 7.05, 7.05); -INSERT INTO base_data VALUES(67, 12, 1880, 1410, 1410, 8, 20, 6.267, 7.05, 7.05); -INSERT INTO base_data VALUES(67, 13, 1880, 1410, 1410, 8, 20, 6.267, 7.05, 7.05); -INSERT INTO base_data VALUES(67, 14, 1880, 1410, 1410, 8, 20, 6.267, 7.05, 7.05); -INSERT INTO base_data VALUES(67, 15, 1997.5, 1410, 1410, 8, 20, 6.658, 7.05, 7.05); -INSERT INTO base_data VALUES(67, 16, 1997.5, 0, 1410, 8, 20, 6.658, 0, 7.05); -INSERT INTO base_data VALUES(68, 1, 2400, 0, 1440, 8, 20, 8, 0, 7.2); -INSERT INTO base_data VALUES(68, 2, 2112, 1440, 1440, 8, 20, 7.04, 7.2, 7.2); -INSERT INTO base_data VALUES(68, 3, 2304, 1440, 1440, 8, 20, 7.68, 7.2, 7.2); -INSERT INTO base_data VALUES(68, 4, 2208, 1440, 1440, 8, 20, 7.36, 7.2, 7.2); -INSERT INTO base_data VALUES(68, 5, 2304, 1440, 1440, 8, 20, 7.68, 7.2, 7.2); -INSERT INTO base_data VALUES(68, 6, 1920, 1440, 1440, 8, 20, 6.4, 7.2, 7.2); -INSERT INTO base_data VALUES(68, 7, 2040, 0, 1440, 8, 20, 6.8, 0, 7.2); -INSERT INTO base_data VALUES(68, 8, 2112, 1440, 1440, 8, 20, 7.04, 7.2, 7.2); -INSERT INTO base_data VALUES(68, 9, 2040, 0, 1440, 8, 20, 6.8, 0, 7.2); -INSERT INTO base_data VALUES(68, 10, 2040, 1440, 1440, 8, 20, 6.8, 7.2, 7.2); -INSERT INTO base_data VALUES(68, 11, 1920, 1440, 1440, 8, 20, 6.4, 7.2, 7.2); -INSERT INTO base_data VALUES(68, 12, 1920, 1440, 1440, 8, 20, 6.4, 7.2, 7.2); -INSERT INTO base_data VALUES(68, 13, 1920, 1440, 1440, 8, 20, 6.4, 7.2, 7.2); -INSERT INTO base_data VALUES(68, 14, 1920, 1440, 1440, 8, 20, 6.4, 7.2, 7.2); -INSERT INTO base_data VALUES(68, 15, 2040, 1440, 1440, 8, 20, 6.8, 7.2, 7.2); -INSERT INTO base_data VALUES(68, 16, 2040, 0, 1440, 8, 20, 6.8, 0, 7.2); -INSERT INTO base_data VALUES(69, 1, 2450, 0, 1470, 8, 20, 8.167, 0, 7.35); -INSERT INTO base_data VALUES(69, 2, 2156, 1470, 1470, 8, 20, 7.187, 7.35, 7.35); -INSERT INTO base_data VALUES(69, 3, 2352, 1470, 1470, 8, 20, 7.84, 7.35, 7.35); -INSERT INTO base_data VALUES(69, 4, 2254, 1470, 1470, 8, 20, 7.513, 7.35, 7.35); -INSERT INTO base_data VALUES(69, 5, 2352, 1470, 1470, 8, 20, 7.84, 7.35, 7.35); -INSERT INTO base_data VALUES(69, 6, 1960, 1470, 1470, 8, 20, 6.533, 7.35, 7.35); -INSERT INTO base_data VALUES(69, 7, 2082.5, 0, 1470, 8, 20, 6.942, 0, 7.35); -INSERT INTO base_data VALUES(69, 8, 2156, 1470, 1470, 8, 20, 7.187, 7.35, 7.35); -INSERT INTO base_data VALUES(69, 9, 2082.5, 0, 1470, 8, 20, 6.942, 0, 7.35); -INSERT INTO base_data VALUES(69, 10, 2082.5, 1470, 1470, 8, 20, 6.942, 7.35, 7.35); -INSERT INTO base_data VALUES(69, 11, 1960, 1470, 1470, 8, 20, 6.533, 7.35, 7.35); -INSERT INTO base_data VALUES(69, 12, 1960, 1470, 1470, 8, 20, 6.533, 7.35, 7.35); -INSERT INTO base_data VALUES(69, 13, 1960, 1470, 1470, 8, 20, 6.533, 7.35, 7.35); -INSERT INTO base_data VALUES(69, 14, 1960, 1470, 1470, 8, 20, 6.533, 7.35, 7.35); -INSERT INTO base_data VALUES(69, 15, 2082.5, 1470, 1470, 8, 20, 6.942, 7.35, 7.35); -INSERT INTO base_data VALUES(69, 16, 2082.5, 0, 1470, 8, 20, 6.942, 0, 7.35); -INSERT INTO base_data VALUES(70, 1, 2500, 0, 1500, 9, 20, 8.333, 0, 7.5); -INSERT INTO base_data VALUES(70, 2, 2200, 1500, 1500, 9, 20, 7.333, 7.5, 7.5); -INSERT INTO base_data VALUES(70, 3, 2400, 1500, 1500, 9, 20, 8, 7.5, 7.5); -INSERT INTO base_data VALUES(70, 4, 2300, 1500, 1500, 9, 20, 7.667, 7.5, 7.5); -INSERT INTO base_data VALUES(70, 5, 2400, 1500, 1500, 9, 20, 8, 7.5, 7.5); -INSERT INTO base_data VALUES(70, 6, 2000, 1500, 1500, 9, 20, 6.667, 7.5, 7.5); -INSERT INTO base_data VALUES(70, 7, 2125, 0, 1500, 9, 20, 7.083, 0, 7.5); -INSERT INTO base_data VALUES(70, 8, 2200, 1500, 1500, 9, 20, 7.333, 7.5, 7.5); -INSERT INTO base_data VALUES(70, 9, 2125, 0, 1500, 9, 20, 7.083, 0, 7.5); -INSERT INTO base_data VALUES(70, 10, 2125, 1500, 1500, 9, 20, 7.083, 7.5, 7.5); -INSERT INTO base_data VALUES(70, 11, 2000, 1500, 1500, 9, 20, 6.667, 7.5, 7.5); -INSERT INTO base_data VALUES(70, 12, 2000, 1500, 1500, 9, 20, 6.667, 7.5, 7.5); -INSERT INTO base_data VALUES(70, 13, 2000, 1500, 1500, 9, 20, 6.667, 7.5, 7.5); -INSERT INTO base_data VALUES(70, 14, 2000, 1500, 1500, 9, 20, 6.667, 7.5, 7.5); -INSERT INTO base_data VALUES(70, 15, 2125, 1500, 1500, 9, 20, 7.083, 7.5, 7.5); -INSERT INTO base_data VALUES(70, 16, 2125, 0, 1500, 9, 20, 7.083, 0, 7.5); -INSERT INTO base_data VALUES(71, 1, 2550, 0, 1530, 9, 20, 8.5, 0, 7.65); -INSERT INTO base_data VALUES(71, 2, 2244, 1530, 1530, 9, 20, 7.48, 7.65, 7.65); -INSERT INTO base_data VALUES(71, 3, 2448, 1530, 1530, 9, 20, 8.16, 7.65, 7.65); -INSERT INTO base_data VALUES(71, 4, 2346, 1530, 1530, 9, 20, 7.82, 7.65, 7.65); -INSERT INTO base_data VALUES(71, 5, 2448, 1530, 1530, 9, 20, 8.16, 7.65, 7.65); -INSERT INTO base_data VALUES(71, 6, 2040, 1530, 1530, 9, 20, 6.8, 7.65, 7.65); -INSERT INTO base_data VALUES(71, 7, 2167.5, 0, 1530, 9, 20, 7.225, 0, 7.65); -INSERT INTO base_data VALUES(71, 8, 2244, 1530, 1530, 9, 20, 7.48, 7.65, 7.65); -INSERT INTO base_data VALUES(71, 9, 2167.5, 0, 1530, 9, 20, 7.225, 0, 7.65); -INSERT INTO base_data VALUES(71, 10, 2167.5, 1530, 1530, 9, 20, 7.225, 7.65, 7.65); -INSERT INTO base_data VALUES(71, 11, 2040, 1530, 1530, 9, 20, 6.8, 7.65, 7.65); -INSERT INTO base_data VALUES(71, 12, 2040, 1530, 1530, 9, 20, 6.8, 7.65, 7.65); -INSERT INTO base_data VALUES(71, 13, 2040, 1530, 1530, 9, 20, 6.8, 7.65, 7.65); -INSERT INTO base_data VALUES(71, 14, 2040, 1530, 1530, 9, 20, 6.8, 7.65, 7.65); -INSERT INTO base_data VALUES(71, 15, 2167.5, 1530, 1530, 9, 20, 7.225, 7.65, 7.65); -INSERT INTO base_data VALUES(71, 16, 2167.5, 0, 1530, 9, 20, 7.225, 0, 7.65); -INSERT INTO base_data VALUES(72, 1, 2600, 0, 1560, 9, 20, 8.667, 0, 7.8); -INSERT INTO base_data VALUES(72, 2, 2288, 1560, 1560, 9, 20, 7.627, 7.8, 7.8); -INSERT INTO base_data VALUES(72, 3, 2496, 1560, 1560, 9, 20, 8.32, 7.8, 7.8); -INSERT INTO base_data VALUES(72, 4, 2392, 1560, 1560, 9, 20, 7.973, 7.8, 7.8); -INSERT INTO base_data VALUES(72, 5, 2496, 1560, 1560, 9, 20, 8.32, 7.8, 7.8); -INSERT INTO base_data VALUES(72, 6, 2080, 1560, 1560, 9, 20, 6.933, 7.8, 7.8); -INSERT INTO base_data VALUES(72, 7, 2210, 0, 1560, 9, 20, 7.367, 0, 7.8); -INSERT INTO base_data VALUES(72, 8, 2288, 1560, 1560, 9, 20, 7.627, 7.8, 7.8); -INSERT INTO base_data VALUES(72, 9, 2210, 0, 1560, 9, 20, 7.367, 0, 7.8); -INSERT INTO base_data VALUES(72, 10, 2210, 1560, 1560, 9, 20, 7.367, 7.8, 7.8); -INSERT INTO base_data VALUES(72, 11, 2080, 1560, 1560, 9, 20, 6.933, 7.8, 7.8); -INSERT INTO base_data VALUES(72, 12, 2080, 1560, 1560, 9, 20, 6.933, 7.8, 7.8); -INSERT INTO base_data VALUES(72, 13, 2080, 1560, 1560, 9, 20, 6.933, 7.8, 7.8); -INSERT INTO base_data VALUES(72, 14, 2080, 1560, 1560, 9, 20, 6.933, 7.8, 7.8); -INSERT INTO base_data VALUES(72, 15, 2210, 1560, 1560, 9, 20, 7.367, 7.8, 7.8); -INSERT INTO base_data VALUES(72, 16, 2210, 0, 1560, 9, 20, 7.367, 0, 7.8); -INSERT INTO base_data VALUES(73, 1, 2650, 0, 1590, 9, 20, 8.833, 0, 7.95); -INSERT INTO base_data VALUES(73, 2, 2332, 1590, 1590, 9, 20, 7.773, 7.95, 7.95); -INSERT INTO base_data VALUES(73, 3, 2544, 1590, 1590, 9, 20, 8.48, 7.95, 7.95); -INSERT INTO base_data VALUES(73, 4, 2438, 1590, 1590, 9, 20, 8.127, 7.95, 7.95); -INSERT INTO base_data VALUES(73, 5, 2544, 1590, 1590, 9, 20, 8.48, 7.95, 7.95); -INSERT INTO base_data VALUES(73, 6, 2120, 1590, 1590, 9, 20, 7.067, 7.95, 7.95); -INSERT INTO base_data VALUES(73, 7, 2252.5, 0, 1590, 9, 20, 7.508, 0, 7.95); -INSERT INTO base_data VALUES(73, 8, 2332, 1590, 1590, 9, 20, 7.773, 7.95, 7.95); -INSERT INTO base_data VALUES(73, 9, 2252.5, 0, 1590, 9, 20, 7.508, 0, 7.95); -INSERT INTO base_data VALUES(73, 10, 2252.5, 1590, 1590, 9, 20, 7.508, 7.95, 7.95); -INSERT INTO base_data VALUES(73, 11, 2120, 1590, 1590, 9, 20, 7.067, 7.95, 7.95); -INSERT INTO base_data VALUES(73, 12, 2120, 1590, 1590, 9, 20, 7.067, 7.95, 7.95); -INSERT INTO base_data VALUES(73, 13, 2120, 1590, 1590, 9, 20, 7.067, 7.95, 7.95); -INSERT INTO base_data VALUES(73, 14, 2120, 1590, 1590, 9, 20, 7.067, 7.95, 7.95); -INSERT INTO base_data VALUES(73, 15, 2252.5, 1590, 1590, 9, 20, 7.508, 7.95, 7.95); -INSERT INTO base_data VALUES(73, 16, 2252.5, 0, 1590, 9, 20, 7.508, 0, 7.95); -INSERT INTO base_data VALUES(74, 1, 2700, 0, 1620, 9, 20, 9, 0, 8.1); -INSERT INTO base_data VALUES(74, 2, 2376, 1620, 1620, 9, 20, 7.92, 8.1, 8.1); -INSERT INTO base_data VALUES(74, 3, 2592, 1620, 1620, 9, 20, 8.64, 8.1, 8.1); -INSERT INTO base_data VALUES(74, 4, 2484, 1620, 1620, 9, 20, 8.28, 8.1, 8.1); -INSERT INTO base_data VALUES(74, 5, 2592, 1620, 1620, 9, 20, 8.64, 8.1, 8.1); -INSERT INTO base_data VALUES(74, 6, 2160, 1620, 1620, 9, 20, 7.2, 8.1, 8.1); -INSERT INTO base_data VALUES(74, 7, 2295, 0, 1620, 9, 20, 7.65, 0, 8.1); -INSERT INTO base_data VALUES(74, 8, 2376, 1620, 1620, 9, 20, 7.92, 8.1, 8.1); -INSERT INTO base_data VALUES(74, 9, 2295, 0, 1620, 9, 20, 7.65, 0, 8.1); -INSERT INTO base_data VALUES(74, 10, 2295, 1620, 1620, 9, 20, 7.65, 8.1, 8.1); -INSERT INTO base_data VALUES(74, 11, 2160, 1620, 1620, 9, 20, 7.2, 8.1, 8.1); -INSERT INTO base_data VALUES(74, 12, 2160, 1620, 1620, 9, 20, 7.2, 8.1, 8.1); -INSERT INTO base_data VALUES(74, 13, 2160, 1620, 1620, 9, 20, 7.2, 8.1, 8.1); -INSERT INTO base_data VALUES(74, 14, 2160, 1620, 1620, 9, 20, 7.2, 8.1, 8.1); -INSERT INTO base_data VALUES(74, 15, 2295, 1620, 1620, 9, 20, 7.65, 8.1, 8.1); -INSERT INTO base_data VALUES(74, 16, 2295, 0, 1620, 9, 20, 7.65, 0, 8.1); -INSERT INTO base_data VALUES(75, 1, 2750, 0, 1650, 9, 20, 9.167, 0, 8.25); -INSERT INTO base_data VALUES(75, 2, 2420, 1650, 1650, 9, 20, 8.067, 8.25, 8.25); -INSERT INTO base_data VALUES(75, 3, 2640, 1650, 1650, 9, 20, 8.8, 8.25, 8.25); -INSERT INTO base_data VALUES(75, 4, 2530, 1650, 1650, 9, 20, 8.433, 8.25, 8.25); -INSERT INTO base_data VALUES(75, 5, 2640, 1650, 1650, 9, 20, 8.8, 8.25, 8.25); -INSERT INTO base_data VALUES(75, 6, 2200, 1650, 1650, 9, 20, 7.333, 8.25, 8.25); -INSERT INTO base_data VALUES(75, 7, 2337.5, 0, 1650, 9, 20, 7.792, 0, 8.25); -INSERT INTO base_data VALUES(75, 8, 2420, 1650, 1650, 9, 20, 8.067, 8.25, 8.25); -INSERT INTO base_data VALUES(75, 9, 2337.5, 0, 1650, 9, 20, 7.792, 0, 8.25); -INSERT INTO base_data VALUES(75, 10, 2337.5, 1650, 1650, 9, 20, 7.792, 8.25, 8.25); -INSERT INTO base_data VALUES(75, 11, 2200, 1650, 1650, 9, 20, 7.333, 8.25, 8.25); -INSERT INTO base_data VALUES(75, 12, 2200, 1650, 1650, 9, 20, 7.333, 8.25, 8.25); -INSERT INTO base_data VALUES(75, 13, 2200, 1650, 1650, 9, 20, 7.333, 8.25, 8.25); -INSERT INTO base_data VALUES(75, 14, 2200, 1650, 1650, 9, 20, 7.333, 8.25, 8.25); -INSERT INTO base_data VALUES(75, 15, 2337.5, 1650, 1650, 9, 20, 7.792, 8.25, 8.25); -INSERT INTO base_data VALUES(75, 16, 2337.5, 0, 1650, 9, 20, 7.792, 0, 8.25); -INSERT INTO base_data VALUES(76, 1, 2800, 0, 1680, 9, 20, 9.333, 0, 8.4); -INSERT INTO base_data VALUES(76, 2, 2464, 1680, 1680, 9, 20, 8.213, 8.4, 8.4); -INSERT INTO base_data VALUES(76, 3, 2688, 1680, 1680, 9, 20, 8.96, 8.4, 8.4); -INSERT INTO base_data VALUES(76, 4, 2576, 1680, 1680, 9, 20, 8.587, 8.4, 8.4); -INSERT INTO base_data VALUES(76, 5, 2688, 1680, 1680, 9, 20, 8.96, 8.4, 8.4); -INSERT INTO base_data VALUES(76, 6, 2240, 1680, 1680, 9, 20, 7.467, 8.4, 8.4); -INSERT INTO base_data VALUES(76, 7, 2380, 0, 1680, 9, 20, 7.933, 0, 8.4); -INSERT INTO base_data VALUES(76, 8, 2464, 1680, 1680, 9, 20, 8.213, 8.4, 8.4); -INSERT INTO base_data VALUES(76, 9, 2380, 0, 1680, 9, 20, 7.933, 0, 8.4); -INSERT INTO base_data VALUES(76, 10, 2380, 1680, 1680, 9, 20, 7.933, 8.4, 8.4); -INSERT INTO base_data VALUES(76, 11, 2240, 1680, 1680, 9, 20, 7.467, 8.4, 8.4); -INSERT INTO base_data VALUES(76, 12, 2240, 1680, 1680, 9, 20, 7.467, 8.4, 8.4); -INSERT INTO base_data VALUES(76, 13, 2240, 1680, 1680, 9, 20, 7.467, 8.4, 8.4); -INSERT INTO base_data VALUES(76, 14, 2240, 1680, 1680, 9, 20, 7.467, 8.4, 8.4); -INSERT INTO base_data VALUES(76, 15, 2380, 1680, 1680, 9, 20, 7.933, 8.4, 8.4); -INSERT INTO base_data VALUES(76, 16, 2380, 0, 1680, 9, 20, 7.933, 0, 8.4); -INSERT INTO base_data VALUES(77, 1, 2850, 0, 1710, 9, 20, 9.5, 0, 8.55); -INSERT INTO base_data VALUES(77, 2, 2508, 1710, 1710, 9, 20, 8.36, 8.55, 8.55); -INSERT INTO base_data VALUES(77, 3, 2736, 1710, 1710, 9, 20, 9.12, 8.55, 8.55); -INSERT INTO base_data VALUES(77, 4, 2622, 1710, 1710, 9, 20, 8.74, 8.55, 8.55); -INSERT INTO base_data VALUES(77, 5, 2736, 1710, 1710, 9, 20, 9.12, 8.55, 8.55); -INSERT INTO base_data VALUES(77, 6, 2280, 1710, 1710, 9, 20, 7.6, 8.55, 8.55); -INSERT INTO base_data VALUES(77, 7, 2422.5, 0, 1710, 9, 20, 8.075, 0, 8.55); -INSERT INTO base_data VALUES(77, 8, 2508, 1710, 1710, 9, 20, 8.36, 8.55, 8.55); -INSERT INTO base_data VALUES(77, 9, 2422.5, 0, 1710, 9, 20, 8.075, 0, 8.55); -INSERT INTO base_data VALUES(77, 10, 2422.5, 1710, 1710, 9, 20, 8.075, 8.55, 8.55); -INSERT INTO base_data VALUES(77, 11, 2280, 1710, 1710, 9, 20, 7.6, 8.55, 8.55); -INSERT INTO base_data VALUES(77, 12, 2280, 1710, 1710, 9, 20, 7.6, 8.55, 8.55); -INSERT INTO base_data VALUES(77, 13, 2280, 1710, 1710, 9, 20, 7.6, 8.55, 8.55); -INSERT INTO base_data VALUES(77, 14, 2280, 1710, 1710, 9, 20, 7.6, 8.55, 8.55); -INSERT INTO base_data VALUES(77, 15, 2422.5, 1710, 1710, 9, 20, 8.075, 8.55, 8.55); -INSERT INTO base_data VALUES(77, 16, 2422.5, 0, 1710, 9, 20, 8.075, 0, 8.55); -INSERT INTO base_data VALUES(78, 1, 2900, 0, 1740, 9, 20, 9.667, 0, 8.7); -INSERT INTO base_data VALUES(78, 2, 2552, 1740, 1740, 9, 20, 8.507, 8.7, 8.7); -INSERT INTO base_data VALUES(78, 3, 2784, 1740, 1740, 9, 20, 9.28, 8.7, 8.7); -INSERT INTO base_data VALUES(78, 4, 2668, 1740, 1740, 9, 20, 8.893, 8.7, 8.7); -INSERT INTO base_data VALUES(78, 5, 2784, 1740, 1740, 9, 20, 9.28, 8.7, 8.7); -INSERT INTO base_data VALUES(78, 6, 2320, 1740, 1740, 9, 20, 7.733, 8.7, 8.7); -INSERT INTO base_data VALUES(78, 7, 2465, 0, 1740, 9, 20, 8.217, 0, 8.7); -INSERT INTO base_data VALUES(78, 8, 2552, 1740, 1740, 9, 20, 8.507, 8.7, 8.7); -INSERT INTO base_data VALUES(78, 9, 2465, 0, 1740, 9, 20, 8.217, 0, 8.7); -INSERT INTO base_data VALUES(78, 10, 2465, 1740, 1740, 9, 20, 8.217, 8.7, 8.7); -INSERT INTO base_data VALUES(78, 11, 2320, 1740, 1740, 9, 20, 7.733, 8.7, 8.7); -INSERT INTO base_data VALUES(78, 12, 2320, 1740, 1740, 9, 20, 7.733, 8.7, 8.7); -INSERT INTO base_data VALUES(78, 13, 2320, 1740, 1740, 9, 20, 7.733, 8.7, 8.7); -INSERT INTO base_data VALUES(78, 14, 2320, 1740, 1740, 9, 20, 7.733, 8.7, 8.7); -INSERT INTO base_data VALUES(78, 15, 2465, 1740, 1740, 9, 20, 8.217, 8.7, 8.7); -INSERT INTO base_data VALUES(78, 16, 2465, 0, 1740, 9, 20, 8.217, 0, 8.7); -INSERT INTO base_data VALUES(79, 1, 2950, 0, 1770, 9, 20, 9.833, 0, 8.85); -INSERT INTO base_data VALUES(79, 2, 2596, 1770, 1770, 9, 20, 8.653, 8.85, 8.85); -INSERT INTO base_data VALUES(79, 3, 2832, 1770, 1770, 9, 20, 9.44, 8.85, 8.85); -INSERT INTO base_data VALUES(79, 4, 2714, 1770, 1770, 9, 20, 9.047, 8.85, 8.85); -INSERT INTO base_data VALUES(79, 5, 2832, 1770, 1770, 9, 20, 9.44, 8.85, 8.85); -INSERT INTO base_data VALUES(79, 6, 2360, 1770, 1770, 9, 20, 7.867, 8.85, 8.85); -INSERT INTO base_data VALUES(79, 7, 2507.5, 0, 1770, 9, 20, 8.358, 0, 8.85); -INSERT INTO base_data VALUES(79, 8, 2596, 1770, 1770, 9, 20, 8.653, 8.85, 8.85); -INSERT INTO base_data VALUES(79, 9, 2507.5, 0, 1770, 9, 20, 8.358, 0, 8.85); -INSERT INTO base_data VALUES(79, 10, 2507.5, 1770, 1770, 9, 20, 8.358, 8.85, 8.85); -INSERT INTO base_data VALUES(79, 11, 2360, 1770, 1770, 9, 20, 7.867, 8.85, 8.85); -INSERT INTO base_data VALUES(79, 12, 2360, 1770, 1770, 9, 20, 7.867, 8.85, 8.85); -INSERT INTO base_data VALUES(79, 13, 2360, 1770, 1770, 9, 20, 7.867, 8.85, 8.85); -INSERT INTO base_data VALUES(79, 14, 2360, 1770, 1770, 9, 20, 7.867, 8.85, 8.85); -INSERT INTO base_data VALUES(79, 15, 2507.5, 1770, 1770, 9, 20, 8.358, 8.85, 8.85); -INSERT INTO base_data VALUES(79, 16, 2507.5, 0, 1770, 9, 20, 8.358, 0, 8.85); -INSERT INTO base_data VALUES(80, 1, 3000, 0, 1800, 10, 20, 10, 0, 9); -INSERT INTO base_data VALUES(80, 2, 2640, 1800, 1800, 10, 20, 8.8, 9, 9); -INSERT INTO base_data VALUES(80, 3, 2880, 1800, 1800, 10, 20, 9.6, 9, 9); -INSERT INTO base_data VALUES(80, 4, 2760, 1800, 1800, 10, 20, 9.2, 9, 9); -INSERT INTO base_data VALUES(80, 5, 2880, 1800, 1800, 10, 20, 9.6, 9, 9); -INSERT INTO base_data VALUES(80, 6, 2400, 1800, 1800, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(80, 7, 2550, 0, 1800, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(80, 8, 2640, 1800, 1800, 10, 20, 8.8, 9, 9); -INSERT INTO base_data VALUES(80, 9, 2550, 0, 1800, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(80, 10, 2550, 1800, 1800, 10, 20, 8.5, 9, 9); -INSERT INTO base_data VALUES(80, 11, 2400, 1800, 1800, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(80, 12, 2400, 1800, 1800, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(80, 13, 2400, 1800, 1800, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(80, 14, 2400, 1800, 1800, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(80, 15, 2550, 1800, 1800, 10, 20, 8.5, 9, 9); -INSERT INTO base_data VALUES(80, 16, 2550, 0, 1800, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(81, 1, 3030, 0, 1818, 10, 20, 10, 0, 9); -INSERT INTO base_data VALUES(81, 2, 2666.4, 1818, 1818, 10, 20, 8.8, 9, 9); -INSERT INTO base_data VALUES(81, 3, 2908.8, 1818, 1818, 10, 20, 9.6, 9, 9); -INSERT INTO base_data VALUES(81, 4, 2787.6, 1818, 1818, 10, 20, 9.2, 9, 9); -INSERT INTO base_data VALUES(81, 5, 2908.8, 1818, 1818, 10, 20, 9.6, 9, 9); -INSERT INTO base_data VALUES(81, 6, 2424, 1818, 1818, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(81, 7, 2575.5, 0, 1818, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(81, 8, 2666.4, 1818, 1818, 10, 20, 8.8, 9, 9); -INSERT INTO base_data VALUES(81, 9, 2575.5, 0, 1818, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(81, 10, 2575.5, 1818, 1818, 10, 20, 8.5, 9, 9); -INSERT INTO base_data VALUES(81, 11, 2424, 1818, 1818, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(81, 12, 2424, 1818, 1818, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(81, 13, 2424, 1818, 1818, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(81, 14, 2424, 1818, 1818, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(81, 15, 2575.5, 1818, 1818, 10, 20, 8.5, 9, 9); -INSERT INTO base_data VALUES(81, 16, 2575.5, 0, 1818, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(82, 1, 3060.3, 0, 1836.18, 10, 20, 10, 0, 9); -INSERT INTO base_data VALUES(82, 2, 2693.06, 1836.18, 1836.18, 10, 20, 8.8, 9, 9); -INSERT INTO base_data VALUES(82, 3, 2937.89, 1836.18, 1836.18, 10, 20, 9.6, 9, 9); -INSERT INTO base_data VALUES(82, 4, 2815.48, 1836.18, 1836.18, 10, 20, 9.2, 9, 9); -INSERT INTO base_data VALUES(82, 5, 2937.89, 1836.18, 1836.18, 10, 20, 9.6, 9, 9); -INSERT INTO base_data VALUES(82, 6, 2448.24, 1836.18, 1836.18, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(82, 7, 2601.26, 0, 1836.18, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(82, 8, 2693.06, 1836.18, 1836.18, 10, 20, 8.8, 9, 9); -INSERT INTO base_data VALUES(82, 9, 2601.26, 0, 1836.18, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(82, 10, 2601.26, 1836.18, 1836.18, 10, 20, 8.5, 9, 9); -INSERT INTO base_data VALUES(82, 11, 2448.24, 1836.18, 1836.18, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(82, 12, 2448.24, 1836.18, 1836.18, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(82, 13, 2448.24, 1836.18, 1836.18, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(82, 14, 2448.24, 1836.18, 1836.18, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(82, 15, 2601.26, 1836.18, 1836.18, 10, 20, 8.5, 9, 9); -INSERT INTO base_data VALUES(82, 16, 2601.26, 0, 1836.18, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(83, 1, 3090.9, 0, 1854.54, 10, 20, 10, 0, 9); -INSERT INTO base_data VALUES(83, 2, 2719.99, 1854.54, 1854.54, 10, 20, 8.8, 9, 9); -INSERT INTO base_data VALUES(83, 3, 2967.27, 1854.54, 1854.54, 10, 20, 9.6, 9, 9); -INSERT INTO base_data VALUES(83, 4, 2843.63, 1854.54, 1854.54, 10, 20, 9.2, 9, 9); -INSERT INTO base_data VALUES(83, 5, 2967.27, 1854.54, 1854.54, 10, 20, 9.6, 9, 9); -INSERT INTO base_data VALUES(83, 6, 2472.72, 1854.54, 1854.54, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(83, 7, 2627.27, 0, 1854.54, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(83, 8, 2719.99, 1854.54, 1854.54, 10, 20, 8.8, 9, 9); -INSERT INTO base_data VALUES(83, 9, 2627.27, 0, 1854.54, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(83, 10, 2627.27, 1854.54, 1854.54, 10, 20, 8.5, 9, 9); -INSERT INTO base_data VALUES(83, 11, 2472.72, 1854.54, 1854.54, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(83, 12, 2472.72, 1854.54, 1854.54, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(83, 13, 2472.72, 1854.54, 1854.54, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(83, 14, 2472.72, 1854.54, 1854.54, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(83, 15, 2627.27, 1854.54, 1854.54, 10, 20, 8.5, 9, 9); -INSERT INTO base_data VALUES(83, 16, 2627.27, 0, 1854.54, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(84, 1, 3121.81, 0, 1873.09, 10, 20, 10, 0, 9); -INSERT INTO base_data VALUES(84, 2, 2747.19, 1873.09, 1873.09, 10, 20, 8.8, 9, 9); -INSERT INTO base_data VALUES(84, 3, 2996.94, 1873.09, 1873.09, 10, 20, 9.6, 9, 9); -INSERT INTO base_data VALUES(84, 4, 2872.07, 1873.09, 1873.09, 10, 20, 9.2, 9, 9); -INSERT INTO base_data VALUES(84, 5, 2996.94, 1873.09, 1873.09, 10, 20, 9.6, 9, 9); -INSERT INTO base_data VALUES(84, 6, 2497.45, 1873.09, 1873.09, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(84, 7, 2653.54, 0, 1873.09, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(84, 8, 2747.19, 1873.09, 1873.09, 10, 20, 8.8, 9, 9); -INSERT INTO base_data VALUES(84, 9, 2653.54, 0, 1873.09, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(84, 10, 2653.54, 1873.09, 1873.09, 10, 20, 8.5, 9, 9); -INSERT INTO base_data VALUES(84, 11, 2497.45, 1873.09, 1873.09, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(84, 12, 2497.45, 1873.09, 1873.09, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(84, 13, 2497.45, 1873.09, 1873.09, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(84, 14, 2497.45, 1873.09, 1873.09, 10, 20, 8, 9, 9); -INSERT INTO base_data VALUES(84, 15, 2653.54, 1873.09, 1873.09, 10, 20, 8.5, 9, 9); -INSERT INTO base_data VALUES(84, 16, 2653.54, 0, 1873.09, 10, 20, 8.5, 0, 9); -INSERT INTO base_data VALUES(85, 1, 3153.03, 0, 1891.82, 11, 21, 10, 0, 9); -INSERT INTO base_data VALUES(85, 2, 2774.66, 1891.82, 1891.82, 11, 21, 8.8, 9, 9); -INSERT INTO base_data VALUES(85, 3, 3026.91, 1891.82, 1891.82, 11, 21, 9.6, 9, 9); -INSERT INTO base_data VALUES(85, 4, 2900.79, 1891.82, 1891.82, 11, 21, 9.2, 9, 9); -INSERT INTO base_data VALUES(85, 5, 3026.91, 1891.82, 1891.82, 11, 21, 9.6, 9, 9); -INSERT INTO base_data VALUES(85, 6, 2522.42, 1891.82, 1891.82, 11, 21, 8, 9, 9); -INSERT INTO base_data VALUES(85, 7, 2680.08, 0, 1891.82, 11, 21, 8.5, 0, 9); -INSERT INTO base_data VALUES(85, 8, 2774.66, 1891.82, 1891.82, 11, 21, 8.8, 9, 9); -INSERT INTO base_data VALUES(85, 9, 2680.08, 0, 1891.82, 11, 21, 8.5, 0, 9); -INSERT INTO base_data VALUES(85, 10, 2680.08, 1891.82, 1891.82, 11, 21, 8.5, 9, 9); -INSERT INTO base_data VALUES(85, 11, 2522.42, 1891.82, 1891.82, 11, 21, 8, 9, 9); -INSERT INTO base_data VALUES(85, 12, 2522.42, 1891.82, 1891.82, 11, 21, 8, 9, 9); -INSERT INTO base_data VALUES(85, 13, 2522.42, 1891.82, 1891.82, 11, 21, 8, 9, 9); -INSERT INTO base_data VALUES(85, 14, 2522.42, 1891.82, 1891.82, 11, 21, 8, 9, 9); -INSERT INTO base_data VALUES(85, 15, 2680.08, 1891.82, 1891.82, 11, 21, 8.5, 9, 9); -INSERT INTO base_data VALUES(85, 16, 2680.08, 0, 1891.82, 11, 21, 8.5, 0, 9); diff --git a/utils/sql/git/required/2013_11_13_Instrument_Singing_Mastery.sql b/utils/sql/git/required/2013_11_13_Instrument_Singing_Mastery.sql deleted file mode 100644 index 7c946184c..000000000 --- a/utils/sql/git/required/2013_11_13_Instrument_Singing_Mastery.sql +++ /dev/null @@ -1,30 +0,0 @@ --- Instrument Mastery -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (213, 1, 260, 2, 23); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (213, 2, 260, 2, 24); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (213, 3, 260, 2, 25); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (213, 4, 260, 2, 26); - -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (214, 1, 260, 4, 23); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (214, 2, 260, 4, 24); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (214, 3, 260, 4, 25); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (214, 4, 260, 4, 26); - -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (215, 1, 260, 6, 23); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (215, 2, 260, 6, 24); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (215, 3, 260, 6, 25); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (215, 4, 260, 6, 26); - --- Improved Instrument Mastery -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (700, 1, 260, 2, 23); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (700, 2, 260, 2, 24); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (700, 3, 260, 2, 25); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (700, 4, 260, 2, 26); - --- Singing Mastery -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (275, 1, 260, 2, 50); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (276, 1, 260, 4, 50); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (277, 1, 260, 6, 50); - --- Improved Singing Mastery -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES (701, 1, 260, 2, 50); - diff --git a/utils/sql/git/required/2013_11_18_AssistRadius.sql b/utils/sql/git/required/2013_11_18_AssistRadius.sql deleted file mode 100644 index d42ba77fc..000000000 --- a/utils/sql/git/required/2013_11_18_AssistRadius.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `npc_types` ADD `assistradius` INT( 10 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `aggroradius`; diff --git a/utils/sql/git/required/2013_12_26_MerchantList_Class_Required.sql b/utils/sql/git/required/2013_12_26_MerchantList_Class_Required.sql deleted file mode 100644 index ab1bbe68d..000000000 --- a/utils/sql/git/required/2013_12_26_MerchantList_Class_Required.sql +++ /dev/null @@ -1,2 +0,0 @@ - ALTER TABLE `merchantlist` ADD COLUMN `classes_required` INT(11) NOT NULL DEFAULT '65535'; - diff --git a/utils/sql/git/required/2014_01_04_SongModCapAAs.sql b/utils/sql/git/required/2014_01_04_SongModCapAAs.sql deleted file mode 100644 index 791061b1b..000000000 --- a/utils/sql/git/required/2014_01_04_SongModCapAAs.sql +++ /dev/null @@ -1,9 +0,0 @@ --- Ayonaes Tutelage -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('571', '1', '261', '1', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('572', '1', '261', '2', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('573', '1', '261', '3', '0'); --- Echo of Taelosia -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('707', '1', '261', '1', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('708', '1', '261', '2', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('709', '1', '261', '3', '0'); - diff --git a/utils/sql/git/required/2014_01_08_SpellsNewAdditions.sql b/utils/sql/git/required/2014_01_08_SpellsNewAdditions.sql deleted file mode 100644 index cfd05e7be..000000000 --- a/utils/sql/git/required/2014_01_08_SpellsNewAdditions.sql +++ /dev/null @@ -1,12 +0,0 @@ -ALTER TABLE `spells_new` CHANGE `field200` `suspendable` INT(11) DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field202` `songcap` INT(11) DEFAULT '0'; -ALTER TABLE `spells_new` ADD `field215` INT(11) DEFAULT '0'; -ALTER TABLE `spells_new` ADD `field216` INT(11) DEFAULT '0'; -ALTER TABLE `spells_new` ADD `field217` INT(11) DEFAULT '0'; -ALTER TABLE `spells_new` ADD `field218` INT(11) DEFAULT '0'; -ALTER TABLE `spells_new` ADD `maxtargets` INT(11) DEFAULT '0'; -ALTER TABLE `spells_new` ADD `field220` INT(11) DEFAULT '0'; -ALTER TABLE `spells_new` ADD `field221` INT(11) DEFAULT '0'; -ALTER TABLE `spells_new` ADD `field222` INT(11) DEFAULT '0'; -ALTER TABLE `spells_new` ADD `field223` INT(11) DEFAULT '0'; -ALTER TABLE `spells_new` ADD `persistdeath` INT(11) DEFAULT '0'; diff --git a/utils/sql/git/required/2014_01_09_PreservePetSize.sql b/utils/sql/git/required/2014_01_09_PreservePetSize.sql deleted file mode 100644 index f056a0550..000000000 --- a/utils/sql/git/required/2014_01_09_PreservePetSize.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `character_pet_info` ADD `size` FLOAT NOT NULL DEFAULT '0'; diff --git a/utils/sql/git/required/2014_01_20_MezMastery.sql b/utils/sql/git/required/2014_01_20_MezMastery.sql deleted file mode 100644 index 4d9d5ec20..000000000 --- a/utils/sql/git/required/2014_01_20_MezMastery.sql +++ /dev/null @@ -1,5 +0,0 @@ --- Mesmerization Mastery -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('781', '1', '287', '1', '1'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('781', '2', '137', '31', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('781', '3', '136', '5', '0'); - diff --git a/utils/sql/git/required/2014_01_20_Not_Extendable.sql b/utils/sql/git/required/2014_01_20_Not_Extendable.sql deleted file mode 100644 index 886db4b57..000000000 --- a/utils/sql/git/required/2014_01_20_Not_Extendable.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `spells_new` CHANGE `field197` `not_extendable` INT(11) NOT NULL DEFAULT '0'; diff --git a/utils/sql/git/required/2014_01_20_SpellCastingReinforcement.sql b/utils/sql/git/required/2014_01_20_SpellCastingReinforcement.sql deleted file mode 100644 index 0d7385433..000000000 --- a/utils/sql/git/required/2014_01_20_SpellCastingReinforcement.sql +++ /dev/null @@ -1,27 +0,0 @@ --- Spell Casting Reinforcement -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('86', '1', '128', '5', '5'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('86', '2', '138', '1', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('86', '3', '140', '1', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('86', '4', '139', '-2741', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('86', '5', '139', '-16843', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('86', '6', '385', '-16192', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('87', '1', '128', '15', '15'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('87', '2', '138', '1', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('87', '3', '140', '1', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('87', '4', '139', '-2741', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('87', '5', '139', '-16843', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('87', '6', '385', '-16192', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('88', '1', '128', '30', '30'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('88', '2', '138', '1', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('88', '3', '140', '1', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('88', '4', '139', '-2741', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('88', '5', '139', '-16843', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('88', '6', '385', '-16192', '0'); --- Spell Casting Reinforcement Mastery -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('266', '1', '128', '50', '50'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('266', '2', '138', '1', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('266', '3', '140', '1', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('266', '4', '139', '-2741', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('266', '5', '139', '-16843', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('266', '6', '385', '-16192', '0'); - diff --git a/utils/sql/git/required/2014_01_20_Weather.sql b/utils/sql/git/required/2014_01_20_Weather.sql deleted file mode 100644 index 86ecb729a..000000000 --- a/utils/sql/git/required/2014_01_20_Weather.sql +++ /dev/null @@ -1,140 +0,0 @@ -alter table zone drop column `weather`; -alter table zone add column `rain_chance1` int(4) not null default 0; -alter table zone add column `rain_chance2` int(4) not null default 0; -alter table zone add column `rain_chance3` int(4) not null default 0; -alter table zone add column `rain_chance4` int(4) not null default 0; -alter table zone add column `rain_duration1` int(4) not null default 0; -alter table zone add column `rain_duration2` int(4) not null default 0; -alter table zone add column `rain_duration3` int(4) not null default 0; -alter table zone add column `rain_duration4` int(4) not null default 0; -alter table zone add column `snow_chance1` int(4) not null default 0; -alter table zone add column `snow_chance2` int(4) not null default 0; -alter table zone add column `snow_chance3` int(4) not null default 0; -alter table zone add column `snow_chance4` int(4) not null default 0; -alter table zone add column `snow_duration1` int(4) not null default 0; -alter table zone add column `snow_duration2` int(4) not null default 0; -alter table zone add column `snow_duration3` int(4) not null default 0; -alter table zone add column `snow_duration4` int(4) not null default 0; - -UPDATE `zone` SET `snow_chance1`=25, `snow_chance2`=20, `snow_chance3`=10, `snow_chance4`=20, `snow_duration1`=10, `snow_duration2`=8, `snow_duration3`=5, `snow_duration4`=10 WHERE `id`=160; -UPDATE `zone` SET `rain_chance1`=5, `rain_chance2`=5 WHERE `id`=202; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=306; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=304; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=23; -UPDATE `zone` SET `snow_chance1`=50, `snow_chance2`=25, `snow_chance3`=10, `snow_chance4`=25, `snow_duration1`=24, `snow_duration2`=24, `snow_duration3`=24, `snow_duration4`=24 WHERE `id`=112; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=303; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=302; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_duration1`=10, `rain_duration2`=10 WHERE `id`=133; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_duration1`=10, `rain_duration2`=10 WHERE `id`=132; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_duration1`=10, `rain_duration2`=10 WHERE `id`=131; -UPDATE `zone` SET `rain_chance1`=5, `rain_chance2`=2 WHERE `id`=257; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=104; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=5, `rain_chance4`=5, `rain_duration1`=2, `rain_duration2`=3, `rain_duration3`=1, `rain_duration4`=2 WHERE `id`=439; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=365; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=4; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=204; -UPDATE `zone` SET `rain_chance1`=100, `rain_chance2`=100, `rain_chance3`=100, `rain_chance4`=100, `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=224; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=138; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=56; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=31; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=34; -UPDATE `zone` SET `rain_chance1`=100, `rain_chance2`=100, `rain_chance3`=100, `rain_chance4`=100, `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=419; -UPDATE `zone` SET `rain_chance1`=15, `rain_chance2`=15, `rain_chance3`=5, `rain_chance4`=5 WHERE `id`=116; -UPDATE `zone` SET `rain_chance1`=15, `rain_chance2`=15, `rain_chance3`=5, `rain_chance4`=5 WHERE `id`=115; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=188; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=189; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=410; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=75, `rain_chance3`=75, `rain_chance4`=25, `rain_duration1`=16, `rain_duration2`=12, `rain_duration3`=12, `rain_duration4`=16 WHERE `id`=276; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1, `snow_duration2`=1, `snow_duration3`=1, `snow_duration4`=1 WHERE `id`=430; -UPDATE `zone` SET `rain_chance2`=19, `rain_chance3`=14, `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_chance1`=20, `snow_chance4`=20, `snow_duration1`=2, `snow_duration4`=1 WHERE `id`=370; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=194; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=108; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=110; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=51; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=196; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=5, `rain_chance4`=10 WHERE `id`=316; -UPDATE `zone` SET `rain_chance1`=20, `rain_chance3`=10, `rain_chance4`=20, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=166; -UPDATE `zone` SET `rain_chance1`=20, `rain_chance3`=10, `rain_chance4`=20, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_duration1`=12 WHERE `id`=165; -UPDATE `zone` SET `rain_chance1`=20, `rain_chance2`=20, `rain_chance3`=5, `rain_chance4`=10 WHERE `id`=225; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=329; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=21; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=99; -UPDATE `zone` SET `rain_chance1`=30, `rain_chance2`=30, `rain_chance3`=20, `rain_chance4`=30, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=255; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=301; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=359; -UPDATE `zone` SET `rain_chance1`=20, `rain_chance2`=20, `rain_chance3`=15, `rain_chance4`=20, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=201; -UPDATE `zone` SET `rain_chance1`=35, `rain_chance2`=45, `rain_chance3`=15, `rain_chance4`=20, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=312; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=75, `rain_chance3`=50, `rain_chance4`=5, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=114; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=263; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=36; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=182; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_duration1`=12 WHERE `id`=142; -UPDATE `zone` SET `rain_chance1`=5, `rain_chance2`=3 WHERE `id`=361; -UPDATE `zone` SET `rain_chance1`=8, `rain_chance2`=5 WHERE `id`=259; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=357; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=156; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=149; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_chance1`=10, `snow_duration1`=10 WHERE `id`=406; -UPDATE `zone` SET `rain_chance1`=30, `rain_chance2`=40, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=119; -UPDATE `zone` SET `rain_chance1`=3, `rain_chance2`=3, `rain_chance3`=3, `rain_chance4`=3, `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=32; -UPDATE `zone` SET `rain_chance1`=3, `rain_chance2`=3, `rain_chance3`=3, `rain_chance4`=3, `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=33; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=374; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_duration1`=12 WHERE `id`=412; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=331; -UPDATE `zone` SET `rain_chance1`=5, `rain_chance2`=5 WHERE `id`=345; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_duration1`=12 WHERE `id`=30; -UPDATE `zone` SET `rain_chance1`=35, `rain_chance2`=45, `rain_chance3`=15, `rain_chance4`=20, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=107; -UPDATE `zone` SET `rain_chance1`=70, `rain_chance2`=70, `rain_chance3`=70, `rain_chance4`=70, `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=46; -UPDATE `zone` SET `rain_duration1`=15, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_chance1`=25, `snow_chance2`=15, `snow_chance3`=5, `snow_chance4`=15, `snow_duration1`=24, `snow_duration2`=12, `snow_duration3`=6, `snow_duration4`=12 WHERE `id`=95; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=190; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_duration1`=12 WHERE `id`=275; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=43; -UPDATE `zone` SET `rain_chance1`=35, `rain_chance2`=45, `rain_chance3`=15, `rain_chance4`=20, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=134; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1, `snow_duration2`=1, `snow_duration3`=1, `snow_duration4`=1 WHERE `id`=97; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1, `snow_duration2`=1, `snow_duration3`=1, `snow_duration4`=1 WHERE `id`=258; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=199; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=431; -UPDATE `zone` SET `rain_chance1`=30, `rain_chance2`=40, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=200; -UPDATE `zone` SET `rain_chance4`=25 WHERE `id`=113; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_chance1`=15, `snow_chance2`=15, `snow_chance3`=15, `snow_chance4`=15, `snow_duration1`=24, `snow_duration2`=6, `snow_duration3`=2, `snow_duration4`=10 WHERE `id`=48; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_chance1`=50, `snow_chance2`=40, `snow_chance3`=35, `snow_chance4`=40, `snow_duration1`=15, `snow_duration2`=10, `snow_duration3`=4, `snow_duration4`=12 WHERE `id`=436; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=243; -UPDATE `zone` SET `rain_chance1`=30, `rain_chance2`=30, `rain_chance3`=30, `rain_chance4`=30, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=428; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_chance1`=50, `snow_chance2`=15, `snow_chance3`=15, `snow_chance4`=15, `snow_duration1`=24, `snow_duration2`=6, `snow_duration3`=2, `snow_duration4`=10 WHERE `id`=102; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_chance1`=15, `snow_chance2`=15, `snow_chance3`=15, `snow_chance4`=15, `snow_duration1`=24, `snow_duration2`=6, `snow_duration3`=2, `snow_duration4`=10 WHERE `id`=174; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=136; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_chance1`=50, `snow_chance2`=15, `snow_chance3`=15, `snow_chance4`=15, `snow_duration1`=24, `snow_duration2`=6, `snow_duration3`=2, `snow_duration4`=10 WHERE `id`=139; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=404; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=405; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=143; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=394; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=416; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=253; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=252; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_duration1`=12 WHERE `id`=362; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=140; -UPDATE `zone` SET `rain_chance1`=30, `rain_chance2`=30, `rain_chance3`=30, `rain_chance4`=30, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_chance1`=5, `snow_chance2`=5, `snow_chance3`=5, `snow_duration1`=1, `snow_duration2`=1, `snow_duration3`=1 WHERE `id`=418; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=333; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=140; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=277; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1, `snow_duration2`=1, `snow_duration3`=1, `snow_duration4`=1 WHERE `id`=103; -UPDATE `zone` SET `rain_chance1`=2, `rain_chance2`=2, `rain_chance3`=2, `rain_chance4`=2, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=332; -UPDATE `zone` SET `rain_chance1`=5, `rain_chance2`=5, `rain_chance3`=5, `rain_chance4`=5, `rain_duration1`=10, `rain_duration2`=10, `rain_duration3`=10, `rain_duration4`=10 WHERE `id`=336; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=173; -UPDATE `zone` SET `rain_chance1`=2, `rain_chance2`=8, `rain_chance3`=10, `rain_chance4`=3, `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=141; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_chance1`=25, `snow_duration1`=24 WHERE `id`=389; -UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=191; -UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=223; -UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=49; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=281; -UPDATE `zone` SET `rain_chance1`=6, `rain_chance2`=6, `rain_chance3`=6, `rain_chance4`=6, `rain_duration1`=12, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=288; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=290; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=170; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=27; -UPDATE `zone` SET `rain_chance2`=100, `rain_chance3`=100, `rain_chance4`=50, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24, `snow_chance1`=100, `snow_chance4`=50, `snow_duration1`=24, `snow_duration4`=24 WHERE `id`=289; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=285; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=171; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=282; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=283; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=280; -UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=12, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=254; \ No newline at end of file diff --git a/utils/sql/git/required/2014_01_27_CritcalMendAA.sql b/utils/sql/git/required/2014_01_27_CritcalMendAA.sql deleted file mode 100644 index 6761b3479..000000000 --- a/utils/sql/git/required/2014_01_27_CritcalMendAA.sql +++ /dev/null @@ -1,9 +0,0 @@ --- Critical Mend -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('230', '1', '275', '10', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('231', '1', '275', '25', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('232', '1', '275', '50', '0'); --- Mending of the Tranquil -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('539', '1', '275', '15', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('540', '1', '275', '25', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('541', '1', '275', '35', '0'); - diff --git a/utils/sql/git/required/2014_02_02_SpellCriticalsAA.sql b/utils/sql/git/required/2014_02_02_SpellCriticalsAA.sql deleted file mode 100644 index 33244febc..000000000 --- a/utils/sql/git/required/2014_02_02_SpellCriticalsAA.sql +++ /dev/null @@ -1,24 +0,0 @@ --- Destructive Fury II -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('4755', '1', '294', '0', '130'); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('4756', '1', '294', '0', '135'); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('4757', '1', '294', '0', '140'); - --- Set correct base2 values for effect 294 -UPDATE aa_effects SET base2 = 100 WHERE effectid = 294 AND base2 = 0; - --- Consumption of Soul (Need live values - These are what had hard coded, but using spell effect) -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('559', '1', '303', '200', '0'); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('559', '2', '139', '2766', '0'); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('560', '1', '303', '400', '0'); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('560', '2', '139', '2766', '0'); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('561', '1', '303', '600', '0'); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('561', '2', '139', '2766', '0'); - -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('893', '1', '303', '800', '0'); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('893', '2', '139', '2766', '0'); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('894', '1', '303', '1000', '0'); -REPLACE INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('894', '2', '139', '2766', '0'); - - - - diff --git a/utils/sql/git/required/2014_02_13_Rename_instance_lockout_tables.sql b/utils/sql/git/required/2014_02_13_Rename_instance_lockout_tables.sql deleted file mode 100644 index fcb083904..000000000 --- a/utils/sql/git/required/2014_02_13_Rename_instance_lockout_tables.sql +++ /dev/null @@ -1,3 +0,0 @@ --- rename the instance_lockout tables to instance_list. They have nothing to do with lockouts. -ALTER TABLE `instance_lockout` RENAME TO `instance_list` ; -ALTER TABLE `instance_lockout_player` RENAME TO `instance_list_player` ; \ No newline at end of file diff --git a/utils/sql/git/required/2014_02_13_spells_new_update.sql b/utils/sql/git/required/2014_02_13_spells_new_update.sql deleted file mode 100644 index 3c3675587..000000000 --- a/utils/sql/git/required/2014_02_13_spells_new_update.sql +++ /dev/null @@ -1,17 +0,0 @@ -ALTER TABLE `spells_new` CHANGE `field161` `not_reflectable` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field151` `no_partial_resist` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field189` `MinResist` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field190` `MaxResist` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field194` `ConeStartAngle` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field195` `ConeStopAngle` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field208` `rank` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field159` `npc_no_los` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field213` `NotOutofCombat` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field214` `NotInCombat` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field168` `IsDiscipline` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field211` `CastRestriction` INT(11) NOT NULL DEFAULT '0'; - -UPDATE altadv_vars SET sof_next_id = 8261 WHERE skill_id = 8232; -UPDATE altadv_vars SET sof_next_id = 0 WHERE skill_id = 8261; -UPDATE altadv_vars SET sof_current_level = 3 WHERE skill_id = 8261; - diff --git a/utils/sql/git/required/2014_02_20_buff_update.sql b/utils/sql/git/required/2014_02_20_buff_update.sql deleted file mode 100644 index 636fa0221..000000000 --- a/utils/sql/git/required/2014_02_20_buff_update.sql +++ /dev/null @@ -1,22 +0,0 @@ --- UPDATE BUFF TABLES -ALTER TABLE `character_buffs` CHANGE `death_save_chance` `dot_rune` INT(10) NOT NULL DEFAULT '0'; -ALTER TABLE `merc_buffs` CHANGE `DeathSaveSuccessChance` `dot_rune` INT(10) NOT NULL DEFAULT '0'; -ALTER TABLE `botbuffs` CHANGE `DeathSaveSuccessChance` `dot_rune` INT(10) NOT NULL DEFAULT '0'; - -ALTER TABLE `character_buffs` CHANGE `death_save_aa_chance` `caston_x` INT(10) NOT NULL DEFAULT '0'; -ALTER TABLE `merc_buffs` CHANGE `CasterAARank` `caston_x` INT(10) NOT NULL DEFAULT '0'; -ALTER TABLE `botbuffs` CHANGE `CasterAARank` `caston_x` INT(10) NOT NULL DEFAULT '0'; - -ALTER TABLE `character_buffs` ADD `caston_y` INT(10) NOT NULL DEFAULT '0'; -ALTER TABLE `merc_buffs` ADD `caston_y` INT(10) NOT NULL DEFAULT '0'; -ALTER TABLE `botbuffs` ADD `caston_y` INT(10) NOT NULL DEFAULT '0'; - -ALTER TABLE `character_buffs` ADD `caston_z` INT(10) NOT NULL DEFAULT '0'; -ALTER TABLE `merc_buffs` ADD `caston_z` INT(10) NOT NULL DEFAULT '0'; -ALTER TABLE `botbuffs` ADD `caston_z` INT(10) NOT NULL DEFAULT '0'; - -ALTER TABLE `character_buffs` ADD `ExtraDIChance` INT(10) NOT NULL DEFAULT '0'; -ALTER TABLE `merc_buffs` ADD `ExtraDIChance` INT(10) NOT NULL DEFAULT '0'; -ALTER TABLE `botbuffs` ADD `ExtraDIChance` INT(10) NOT NULL DEFAULT '0'; - -ALTER TABLE `spells_new` CHANGE `not_reflectable` `reflectable` INT(11) NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/utils/sql/git/required/2014_02_26_roambox_update.sql b/utils/sql/git/required/2014_02_26_roambox_update.sql deleted file mode 100644 index 5b099983f..000000000 --- a/utils/sql/git/required/2014_02_26_roambox_update.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table `spawngroup` add column `mindelay` int(11) not null default 15000 AFTER delay; -alter table `spawngroup` change `delay` `delay` int(11) not null default 45000; \ No newline at end of file diff --git a/utils/sql/git/required/2014_02_26_virulentvenomAA.sql b/utils/sql/git/required/2014_02_26_virulentvenomAA.sql deleted file mode 100644 index 0a0520c7b..000000000 --- a/utils/sql/git/required/2014_02_26_virulentvenomAA.sql +++ /dev/null @@ -1,8 +0,0 @@ --- Virulent Venom -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('888', '1', '250', '10', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('889', '1', '250', '20', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('890', '1', '250', '30', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('891', '1', '250', '40', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('892', '1', '250', '50', '0'); - - diff --git a/utils/sql/git/required/2014_04_04_PhysicalResist.sql b/utils/sql/git/required/2014_04_04_PhysicalResist.sql deleted file mode 100644 index f748f0b9f..000000000 --- a/utils/sql/git/required/2014_04_04_PhysicalResist.sql +++ /dev/null @@ -1,7 +0,0 @@ -ALTER TABLE `npc_types` ADD `PhR` smallint( 5 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `Corrup`; - --- Approximate baseline live npc values based on extensive parsing. -UPDATE npc_types SET PhR = 10 WHERE PhR = 0 AND level <= 50; -UPDATE npc_types SET PhR = (10 + (level - 50)) WHERE PhR = 0 AND (level > 50 AND level <= 60); -UPDATE npc_types SET PhR = (20 + ((level - 60)*4)) WHERE PhR = 0 AND level > 60; - diff --git a/utils/sql/git/required/2014_04_10_No_Target_With_Hotkey.sql b/utils/sql/git/required/2014_04_10_No_Target_With_Hotkey.sql deleted file mode 100644 index 1ca4981f2..000000000 --- a/utils/sql/git/required/2014_04_10_No_Target_With_Hotkey.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `npc_types` ADD `no_target_hotkey` tinyint( 1 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `healscale`; diff --git a/utils/sql/git/required/2014_04_12_SlowMitigation.sql b/utils/sql/git/required/2014_04_12_SlowMitigation.sql deleted file mode 100644 index a497a525b..000000000 --- a/utils/sql/git/required/2014_04_12_SlowMitigation.sql +++ /dev/null @@ -1,7 +0,0 @@ --- Convert all values from FLOAT to INT -UPDATE npc_types SET slow_mitigation = slow_mitigation * 100; - --- Change variable type from FLOAT TO INT -ALTER TABLE npc_types MODIFY slow_mitigation smallint(4) NOT NULL DEFAULT '0'; - - diff --git a/utils/sql/git/required/2014_04_18_Suppress_Command_Error.sql b/utils/sql/git/required/2014_04_18_Suppress_Command_Error.sql deleted file mode 100644 index 2d10ea458..000000000 --- a/utils/sql/git/required/2014_04_18_Suppress_Command_Error.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO `rule_values` VALUES ('0', 'Chat:SuppressCommandErrors', 'true', 'This will suppress "Command is not recognized"'); \ No newline at end of file diff --git a/utils/sql/git/required/2014_04_25_spawn_events.sql b/utils/sql/git/required/2014_04_25_spawn_events.sql deleted file mode 100644 index 6a96444e9..000000000 --- a/utils/sql/git/required/2014_04_25_spawn_events.sql +++ /dev/null @@ -1 +0,0 @@ -alter table spawn_events add column `strict` tinyint(4) not null default 0; \ No newline at end of file diff --git a/utils/sql/git/required/2014_04_27_AISpellEffects.sql b/utils/sql/git/required/2014_04_27_AISpellEffects.sql deleted file mode 100644 index 2ff0c49bd..000000000 --- a/utils/sql/git/required/2014_04_27_AISpellEffects.sql +++ /dev/null @@ -1,104 +0,0 @@ --- Note: The data entered into the new table are only examples and can be deleted/modified as needed. - -ALTER TABLE `npc_types` ADD `npc_spells_effects_id` int( 11 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `npc_spells_id`; - -SET FOREIGN_KEY_CHECKS=0; - --- ---------------------------- --- Table structure for `npc_spells_effects` --- ---------------------------- -DROP TABLE IF EXISTS `npc_spells_effects`; -CREATE TABLE `npc_spells_effects` ( - `id` int(11) unsigned NOT NULL AUTO_INCREMENT, - `name` tinytext, - `parent_list` int(11) unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=1080 DEFAULT CHARSET=latin1; - --- ---------------------------- --- Records of npc_spells_effects --- ---------------------------- -INSERT INTO `npc_spells_effects` VALUES ('1', 'Critical Melee [All Skills]', '0'); -INSERT INTO `npc_spells_effects` VALUES ('2', 'Damage Shield', '0'); -INSERT INTO `npc_spells_effects` VALUES ('3', 'Melee Haste', '0'); -INSERT INTO `npc_spells_effects` VALUES ('4', 'Resist Spell Chance', '0'); -INSERT INTO `npc_spells_effects` VALUES ('5', 'Resist Direct Dmg Spell Chance', '0'); -INSERT INTO `npc_spells_effects` VALUES ('6', 'Reflect Spell Chance', '0'); -INSERT INTO `npc_spells_effects` VALUES ('7', 'Spell Damage Shield', '0'); -INSERT INTO `npc_spells_effects` VALUES ('8', 'Melee Mitigation [All]', '0'); -INSERT INTO `npc_spells_effects` VALUES ('9', 'Avoid Melee', '0'); -INSERT INTO `npc_spells_effects` VALUES ('10', 'Riposte Chance', '0'); -INSERT INTO `npc_spells_effects` VALUES ('11', 'Dodge Chance', '0'); -INSERT INTO `npc_spells_effects` VALUES ('12', 'Parry Chance', '0'); -INSERT INTO `npc_spells_effects` VALUES ('13', 'Decrease Dmg Taken [2HS]', '0'); -INSERT INTO `npc_spells_effects` VALUES ('14', 'Increase Dmg Taken [1HS]', '0'); -INSERT INTO `npc_spells_effects` VALUES ('15', 'Block Chance', '0'); -INSERT INTO `npc_spells_effects` VALUES ('16', 'Melee Lifetap', '0'); -INSERT INTO `npc_spells_effects` VALUES ('17', 'Hit Chance', '0'); -INSERT INTO `npc_spells_effects` VALUES ('18', 'Increase Dmg [1HS]', '0'); -INSERT INTO `npc_spells_effects` VALUES ('19', 'Increase Archery Dmg', '0'); -INSERT INTO `npc_spells_effects` VALUES ('20', 'Flurry Chance', '0'); -INSERT INTO `npc_spells_effects` VALUES ('21', 'Add Damage [2HS]', '0'); -INSERT INTO `npc_spells_effects` VALUES ('22', 'Divine Aura', '0'); -INSERT INTO `npc_spells_effects` VALUES ('23', 'Cast CH on Kill', '0'); -INSERT INTO `npc_spells_effects` VALUES ('24', 'Critical Heal', '0'); -INSERT INTO `npc_spells_effects` VALUES ('25', 'Critical Direct Dmg', '0'); -INSERT INTO `npc_spells_effects` VALUES ('26', 'Heal Rate', '0'); -INSERT INTO `npc_spells_effects` VALUES ('27', 'Negate Damage Shield', '0'); -INSERT INTO `npc_spells_effects` VALUES ('28', 'Increase Spell Vulnerability [All]', '0'); -INSERT INTO `npc_spells_effects` VALUES ('29', 'Decrease Spell Vulnerability [FR]', '0'); -INSERT INTO `npc_spells_effects` VALUES ('30', 'Movement Speed', '0'); - - -SET FOREIGN_KEY_CHECKS=0; - --- ---------------------------- --- Table structure for `npc_spells_effects_entries` --- ---------------------------- -DROP TABLE IF EXISTS `npc_spells_effects_entries`; -CREATE TABLE `npc_spells_effects_entries` ( - `id` int(11) unsigned NOT NULL AUTO_INCREMENT, - `npc_spells_effects_id` int(11) NOT NULL DEFAULT '0', - `spell_effect_id` smallint(5) NOT NULL DEFAULT '0', - `minlevel` tinyint(3) unsigned NOT NULL DEFAULT '0', - `maxlevel` tinyint(3) unsigned NOT NULL DEFAULT '255', - `se_base` int(11) NOT NULL DEFAULT '0', - `se_limit` int(11) NOT NULL DEFAULT '0', - `se_max` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`), - UNIQUE KEY `spellsid_spellid` (`npc_spells_effects_id`,`spell_effect_id`) -) ENGINE=InnoDB AUTO_INCREMENT=18374 DEFAULT CHARSET=latin1; - --- ---------------------------- --- Records of npc_spells_effects_entries --- ---------------------------- -INSERT INTO `npc_spells_effects_entries` VALUES ('1', '1', '169', '0', '255', '10000', '-1', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('2', '2', '59', '0', '255', '-60', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('3', '3', '11', '0', '255', '150', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('4', '4', '180', '0', '255', '50', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('5', '5', '378', '0', '255', '85', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('6', '6', '158', '0', '255', '50', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('7', '7', '157', '0', '255', '-300', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('8', '8', '168', '0', '255', '-50', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('9', '9', '172', '0', '255', '10000', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('10', '10', '173', '0', '255', '10000', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('11', '11', '174', '0', '255', '10000', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('12', '12', '175', '0', '255', '10000', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('13', '13', '197', '0', '255', '-80', '3', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('14', '14', '197', '0', '255', '80', '1', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('15', '15', '188', '0', '255', '10000', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('16', '16', '178', '0', '255', '90', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('17', '17', '184', '0', '255', '10000', '-1', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('18', '18', '185', '0', '255', '100', '1', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('19', '19', '301', '0', '255', '100', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('20', '20', '279', '0', '255', '50', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('21', '21', '220', '0', '255', '2000', '1', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('22', '22', '40', '0', '255', '1', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('23', '23', '360', '0', '255', '100', '13', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('24', '24', '274', '0', '255', '90', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('25', '25', '294', '0', '255', '100', '200', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('26', '26', '120', '0', '255', '50', '0', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('27', '27', '382', '0', '255', '0', '55', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('28', '28', '296', '0', '255', '1000', '-1', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('29', '29', '296', '0', '255', '-50', '2', '0'); -INSERT INTO `npc_spells_effects_entries` VALUES ('30', '30', '3', '0', '255', '60', '0', '0'); diff --git a/utils/sql/git/required/2014_05_04_SlowMitigationFix.sql b/utils/sql/git/required/2014_05_04_SlowMitigationFix.sql deleted file mode 100644 index bf657023c..000000000 --- a/utils/sql/git/required/2014_05_04_SlowMitigationFix.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE npc_types MODIFY slow_mitigation smallint(4) NOT NULL DEFAULT '0'; - - diff --git a/utils/sql/git/required/2014_06_25_AA_Updates.sql b/utils/sql/git/required/2014_06_25_AA_Updates.sql deleted file mode 100644 index 3d7a048b6..000000000 --- a/utils/sql/git/required/2014_06_25_AA_Updates.sql +++ /dev/null @@ -1,34 +0,0 @@ --- AA MGB update -UPDATE altadv_vars SET spellid = 5228 WHERE skill_id = 128; -UPDATE aa_actions SET spell_id = 5228, nonspell_action = 0 WHERE aaid = 128; - --- AA Project Illusion update -UPDATE altadv_vars SET spellid = 5227 WHERE skill_id = 643; -UPDATE aa_actions SET spell_id = 5227, nonspell_action = 0 WHERE aaid = 643; - --- AA Improved Reclaim Energy -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('180', '1', '241', '95', '0'); - --- AA Headshot -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('644', '1', '217', '0', '32000'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('644', '2', '346', '46', '0'); - --- AA Anatomy (Rogue Assassinate) -INSERT INTO `altadv_vars` (`skill_id`, `name`, `cost`, `max_level`, `hotkey_sid`, `hotkey_sid2`, `title_sid`, `desc_sid`, `type`, `spellid`, `prereq_skill`, `prereq_minpoints`, `spell_type`, `spell_refresh`, `classes`, `berserker`, `class_type`, `cost_inc`, `aa_expansion`, `special_category`, `sof_type`, `sof_cost_inc`, `sof_max_level`, `sof_next_skill`, `clientver`, `account_time_required`, `sof_current_level`,`sof_next_id`,`level_inc`) VALUES ('1604', 'Anatomy', '5', '3', '4294967295', '4294967295', '1604', '1604', '1', '4294967295', '0', '0', '0', '0', '512', '0', '60', '1', '10', '4294967295', '3', '0', '3', '1604', '1', '0', '0', '0', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('1604', '1', '439', '0', '32000'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('1604', '2', '345', '48', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('1605', '1', '439', '0', '32000'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('1605', '2', '345', '51', '0'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('1606', '1', '439', '0', '32000'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('1606', '2', '345', '53', '0'); - --- AA Finishing Blow Fix -DELETE FROM aa_effects WHERE aaid = 199 AND slot = 2; -DELETE FROM aa_effects WHERE aaid = 200 AND slot = 2; -DELETE FROM aa_effects WHERE aaid = 201 AND slot = 2; -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('119', '1', '278', '500', '32000'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('119', '2', '440', '50', '200'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('120', '1', '278', '500', '32000'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('120', '2', '440', '52', '200'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('121', '1', '278', '500', '32000'); -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('121', '2', '440', '54', '200'); \ No newline at end of file diff --git a/utils/sql/git/required/2014_07_04_AA_Updates.sql b/utils/sql/git/required/2014_07_04_AA_Updates.sql deleted file mode 100644 index a943e8c15..000000000 --- a/utils/sql/git/required/2014_07_04_AA_Updates.sql +++ /dev/null @@ -1,6 +0,0 @@ --- AA Permanent Illusion -INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('158', '1', '238', '1', '0'); - --- AA Sanctuary -INSERT INTO `altadv_vars` (`skill_id`, `name`, `cost`, `max_level`, `hotkey_sid`, `hotkey_sid2`, `title_sid`, `desc_sid`, `type`, `spellid`, `prereq_skill`, `prereq_minpoints`, `spell_type`, `spell_refresh`, `classes`, `berserker`, `class_type`, `cost_inc`, `aa_expansion`, `special_category`, `sof_type`, `sof_cost_inc`, `sof_max_level`, `sof_next_skill`, `clientver`, `account_time_required`, `sof_current_level`,`sof_next_id`,`level_inc`) VALUES ('1209', 'Sanctuary', '12', '1', '1209', '4294967295', '1209', '1209', '3', '5912', '0', '0', '14', '4320', '4', '0', '70', '0', '8', '4294967295', '3', '0', '1', '1209', '1', '0', '0', '0', '0'); -INSERT INTO `aa_actions` (`aaid`, `rank`, `reuse_time`, `spell_id`, `target`, `nonspell_action`, `nonspell_mana`, `nonspell_duration`, `redux_aa`, `redux_rate`, `redux_aa2`, `redux_rate2`) VALUES ('1209', '0', '4320', '5912', '1', '0', '0', '0', '0', '0', '0', '0'); diff --git a/utils/sql/git/required/2014_07_10_npc_spells.sql b/utils/sql/git/required/2014_07_10_npc_spells.sql deleted file mode 100644 index 1060efdd5..000000000 --- a/utils/sql/git/required/2014_07_10_npc_spells.sql +++ /dev/null @@ -1,22 +0,0 @@ --- npc_types -ALTER TABLE `npc_types` ADD `ammo_idfile` varchar( 30 ) NOT NULL DEFAULT 'IT10' AFTER `d_meele_texture2`; -ALTER TABLE `npc_types` ADD `ranged_type` tinyint( 4 ) UNSIGNED NOT NULL DEFAULT '7' AFTER `sec_melee_type`; -ALTER TABLE `npc_types` ADD `Avoidance` mediumint(9) UNSIGNED NOT NULL DEFAULT '0' AFTER `Accuracy`; - --- npc spells -ALTER TABLE `npc_spells` ADD `range_proc` smallint(5) NOT NULL DEFAULT '-1'; -ALTER TABLE `npc_spells` ADD `rproc_chance` smallint(5) NOT NULL DEFAULT '0'; -ALTER TABLE `npc_spells` ADD `defensive_proc` smallint(5) NOT NULL DEFAULT '-1'; -ALTER TABLE `npc_spells` ADD `dproc_chance` smallint(5) NOT NULL DEFAULT '0'; -ALTER TABLE `npc_spells` ADD `fail_recast` int(11) unsigned NOT NULL DEFAULT '0'; -ALTER TABLE `npc_spells` ADD `engaged_no_sp_recast_min` int(11) unsigned NOT NULL DEFAULT '0'; -ALTER TABLE `npc_spells` ADD `engaged_no_sp_recast_max` int(11) unsigned NOT NULL DEFAULT '0'; -ALTER TABLE `npc_spells` ADD `engaged_b_self_chance` tinyint(3) unsigned NOT NULL DEFAULT '0'; -ALTER TABLE `npc_spells` ADD `engaged_b_other_chance` tinyint(3) unsigned NOT NULL DEFAULT '0'; -ALTER TABLE `npc_spells` ADD `engaged_d_chance` tinyint(3) unsigned NOT NULL DEFAULT '0'; -ALTER TABLE `npc_spells` ADD `pursue_no_sp_recast_min` int(3) unsigned NOT NULL DEFAULT '0'; -ALTER TABLE `npc_spells` ADD `pursue_no_sp_recast_max` int(11) unsigned NOT NULL DEFAULT '0'; -ALTER TABLE `npc_spells` ADD `pursue_d_chance` tinyint(3) unsigned NOT NULL DEFAULT '0'; -ALTER TABLE `npc_spells` ADD `idle_no_sp_recast_min` int(11) unsigned NOT NULL DEFAULT '0'; -ALTER TABLE `npc_spells` ADD `idle_no_sp_recast_max` int(11) unsigned NOT NULL DEFAULT '0'; -ALTER TABLE `npc_spells` ADD `idle_b_chance` tinyint(11) unsigned NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/utils/sql/git/required/2014_08_02_spells_new.sql b/utils/sql/git/required/2014_08_02_spells_new.sql deleted file mode 100644 index f4e74158a..000000000 --- a/utils/sql/git/required/2014_08_02_spells_new.sql +++ /dev/null @@ -1,18 +0,0 @@ --- spells new talbe update -ALTER TABLE `spells_new` CHANGE `NotOutofCombat` `InCombat` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `NotInCombat` `OutofCombat` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field201` `viral_range` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field218` `aemaxtargets` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` ADD `field225` int( 11 ) NOT NULL DEFAULT '0' AFTER `persistdeath`; -ALTER TABLE `spells_new` ADD `field226` int( 11 ) NOT NULL DEFAULT '0' AFTER `field225`; -ALTER TABLE `spells_new` ADD `min_dist` float( 0 ) NOT NULL DEFAULT '0' AFTER `field226`; -ALTER TABLE `spells_new` ADD `min_dist_mod` float( 0 ) NOT NULL DEFAULT '0' AFTER `min_dist`; -ALTER TABLE `spells_new` ADD `max_dist` float( 0 ) NOT NULL DEFAULT '0' AFTER `min_dist_mod`; -ALTER TABLE `spells_new` ADD `max_dist_mod` float( 0 ) NOT NULL DEFAULT '0' AFTER `max_dist`; -ALTER TABLE `spells_new` ADD `min_range` int( 11 ) NOT NULL DEFAULT '0' AFTER `max_dist_mod`; -ALTER TABLE `spells_new` ADD `field232` int( 11 ) NOT NULL DEFAULT '0' AFTER `min_range`; -ALTER TABLE `spells_new` ADD `field233` int( 11 ) NOT NULL DEFAULT '0' AFTER `field232`; -ALTER TABLE `spells_new` ADD `field234` int( 11 ) NOT NULL DEFAULT '0' AFTER `field233`; -ALTER TABLE `spells_new` ADD `field235` int( 11 ) NOT NULL DEFAULT '0' AFTER `field234`; -ALTER TABLE `spells_new` ADD `field236` int( 11 ) NOT NULL DEFAULT '0' AFTER `field235`; - diff --git a/utils/sql/git/required/2014_08_12_NPC_raid_targets.sql b/utils/sql/git/required/2014_08_12_NPC_raid_targets.sql deleted file mode 100644 index a91a02815..000000000 --- a/utils/sql/git/required/2014_08_12_NPC_raid_targets.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `npc_types` ADD `raid_target` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `no_target_hotkey`; diff --git a/utils/sql/git/required/2014_08_18_spells_new_update.sql b/utils/sql/git/required/2014_08_18_spells_new_update.sql deleted file mode 100644 index bda3a55a4..000000000 --- a/utils/sql/git/required/2014_08_18_spells_new_update.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `spells_new` CHANGE `field191` `viral_targets` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field192` `viral_timer` INT(11) NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/utils/sql/git/required/2014_08_20_merchantlist_probability.sql b/utils/sql/git/required/2014_08_20_merchantlist_probability.sql deleted file mode 100644 index 9ceedbb30..000000000 --- a/utils/sql/git/required/2014_08_20_merchantlist_probability.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `merchantlist` ADD `probability` INT(3) NOT NULL DEFAULT '100' AFTER `classes_required`; \ No newline at end of file diff --git a/utils/sql/git/required/2014_08_23_Complete_QueryServ_Table_Structures.sql b/utils/sql/git/required/2014_08_23_Complete_QueryServ_Table_Structures.sql deleted file mode 100644 index 40dc41377..000000000 --- a/utils/sql/git/required/2014_08_23_Complete_QueryServ_Table_Structures.sql +++ /dev/null @@ -1,247 +0,0 @@ --- QS Table Structures -- - -SET FOREIGN_KEY_CHECKS=0; - --- ---------------------------- --- Table structure for qs_merchant_transaction_record --- ---------------------------- -DROP TABLE IF EXISTS `qs_merchant_transaction_record`; -CREATE TABLE `qs_merchant_transaction_record` ( - `transaction_id` int(11) NOT NULL AUTO_INCREMENT, - `time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, - `zone_id` int(11) DEFAULT '0', - `merchant_id` int(11) DEFAULT '0', - `merchant_pp` int(11) DEFAULT '0', - `merchant_gp` int(11) DEFAULT '0', - `merchant_sp` int(11) DEFAULT '0', - `merchant_cp` int(11) DEFAULT '0', - `merchant_items` mediumint(7) DEFAULT '0', - `char_id` int(11) DEFAULT '0', - `char_pp` int(11) DEFAULT '0', - `char_gp` int(11) DEFAULT '0', - `char_sp` int(11) DEFAULT '0', - `char_cp` int(11) DEFAULT '0', - `char_items` mediumint(7) DEFAULT '0', - PRIMARY KEY (`transaction_id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; - --- ---------------------------- --- Table structure for qs_merchant_transaction_record_entries --- ---------------------------- -DROP TABLE IF EXISTS `qs_merchant_transaction_record_entries`; -CREATE TABLE `qs_merchant_transaction_record_entries` ( - `event_id` int(11) DEFAULT '0', - `char_slot` mediumint(7) DEFAULT '0', - `item_id` int(11) DEFAULT '0', - `charges` mediumint(7) DEFAULT '0', - `aug_1` int(11) DEFAULT '0', - `aug_2` int(11) DEFAULT '0', - `aug_3` int(11) DEFAULT '0', - `aug_4` int(11) DEFAULT '0', - `aug_5` int(11) DEFAULT '0' -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- ---------------------------- --- Table structure for qs_player_aa_rate_hourly --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_aa_rate_hourly`; -CREATE TABLE `qs_player_aa_rate_hourly` ( - `char_id` int(11) NOT NULL DEFAULT '0', - `hour_time` int(11) NOT NULL, - `aa_count` varchar(11) DEFAULT NULL, - PRIMARY KEY (`char_id`,`hour_time`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- ---------------------------- --- Table structure for qs_player_delete_record --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_delete_record`; -CREATE TABLE `qs_player_delete_record` ( - `delete_id` int(11) NOT NULL AUTO_INCREMENT, - `time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, - `char_id` int(11) DEFAULT '0', - `stack_size` mediumint(7) DEFAULT '0', - `char_items` mediumint(7) DEFAULT '0', - PRIMARY KEY (`delete_id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; - --- ---------------------------- --- Table structure for qs_player_delete_record_entries --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_delete_record_entries`; -CREATE TABLE `qs_player_delete_record_entries` ( - `event_id` int(11) DEFAULT '0', - `char_slot` mediumint(7) DEFAULT '0', - `item_id` int(11) DEFAULT '0', - `charges` mediumint(7) DEFAULT '0', - `aug_1` int(11) DEFAULT '0', - `aug_2` int(11) DEFAULT '0', - `aug_3` int(11) DEFAULT '0', - `aug_4` int(11) DEFAULT '0', - `aug_5` int(11) DEFAULT '0' -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- ---------------------------- --- Table structure for qs_player_events --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_events`; -CREATE TABLE `qs_player_events` ( - `id` int(11) unsigned NOT NULL AUTO_INCREMENT, - `char_id` int(11) DEFAULT '0', - `event` int(11) unsigned DEFAULT '0', - `event_desc` varchar(255) DEFAULT NULL, - `time` int(11) unsigned DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; - --- ---------------------------- --- Table structure for qs_player_handin_record --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_handin_record`; -CREATE TABLE `qs_player_handin_record` ( - `handin_id` int(11) NOT NULL AUTO_INCREMENT, - `time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, - `quest_id` int(11) DEFAULT '0', - `char_id` int(11) DEFAULT '0', - `char_pp` int(11) DEFAULT '0', - `char_gp` int(11) DEFAULT '0', - `char_sp` int(11) DEFAULT '0', - `char_cp` int(11) DEFAULT '0', - `char_items` mediumint(7) DEFAULT '0', - `npc_id` int(11) DEFAULT '0', - `npc_pp` int(11) DEFAULT '0', - `npc_gp` int(11) DEFAULT '0', - `npc_sp` int(11) DEFAULT '0', - `npc_cp` int(11) DEFAULT '0', - `npc_items` mediumint(7) DEFAULT '0', - PRIMARY KEY (`handin_id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; - --- ---------------------------- --- Table structure for qs_player_handin_record_entries --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_handin_record_entries`; -CREATE TABLE `qs_player_handin_record_entries` ( - `event_id` int(11) DEFAULT '0', - `action_type` char(6) DEFAULT 'action', - `char_slot` mediumint(7) DEFAULT '0', - `item_id` int(11) DEFAULT '0', - `charges` mediumint(7) DEFAULT '0', - `aug_1` int(11) DEFAULT '0', - `aug_2` int(11) DEFAULT '0', - `aug_3` int(11) DEFAULT '0', - `aug_4` int(11) DEFAULT '0', - `aug_5` int(11) DEFAULT '0' -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- ---------------------------- --- Table structure for qs_player_move_record --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_move_record`; -CREATE TABLE `qs_player_move_record` ( - `move_id` int(11) NOT NULL AUTO_INCREMENT, - `time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, - `char_id` int(11) DEFAULT '0', - `from_slot` mediumint(7) DEFAULT '0', - `to_slot` mediumint(7) DEFAULT '0', - `stack_size` mediumint(7) DEFAULT '0', - `char_items` mediumint(7) DEFAULT '0', - `postaction` tinyint(1) DEFAULT '0', - PRIMARY KEY (`move_id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; - --- ---------------------------- --- Table structure for qs_player_move_record_entries --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_move_record_entries`; -CREATE TABLE `qs_player_move_record_entries` ( - `event_id` int(11) DEFAULT '0', - `from_slot` mediumint(7) DEFAULT '0', - `to_slot` mediumint(7) DEFAULT '0', - `item_id` int(11) DEFAULT '0', - `charges` mediumint(7) DEFAULT '0', - `aug_1` int(11) DEFAULT '0', - `aug_2` int(11) DEFAULT '0', - `aug_3` int(11) DEFAULT '0', - `aug_4` int(11) DEFAULT '0', - `aug_5` int(11) DEFAULT '0' -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- ---------------------------- --- Table structure for qs_player_npc_kill_record --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_npc_kill_record`; -CREATE TABLE `qs_player_npc_kill_record` ( - `fight_id` int(11) NOT NULL AUTO_INCREMENT, - `npc_id` int(11) DEFAULT NULL, - `type` int(11) DEFAULT NULL, - `zone_id` int(11) DEFAULT NULL, - `time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`fight_id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; - --- ---------------------------- --- Table structure for qs_player_npc_kill_record_entries --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_npc_kill_record_entries`; -CREATE TABLE `qs_player_npc_kill_record_entries` ( - `event_id` int(11) DEFAULT '0', - `char_id` int(11) DEFAULT '0' -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- ---------------------------- --- Table structure for qs_player_speech --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_speech`; -CREATE TABLE `qs_player_speech` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `from` varchar(64) NOT NULL, - `to` varchar(64) NOT NULL, - `message` varchar(256) NOT NULL, - `minstatus` smallint(5) NOT NULL, - `guilddbid` int(11) NOT NULL, - `type` tinyint(3) NOT NULL, - `timerecorded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; - --- ---------------------------- --- Table structure for qs_player_trade_record --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_trade_record`; -CREATE TABLE `qs_player_trade_record` ( - `trade_id` int(11) NOT NULL AUTO_INCREMENT, - `time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, - `char1_id` int(11) DEFAULT '0', - `char1_pp` int(11) DEFAULT '0', - `char1_gp` int(11) DEFAULT '0', - `char1_sp` int(11) DEFAULT '0', - `char1_cp` int(11) DEFAULT '0', - `char1_items` mediumint(7) DEFAULT '0', - `char2_id` int(11) DEFAULT '0', - `char2_pp` int(11) DEFAULT '0', - `char2_gp` int(11) DEFAULT '0', - `char2_sp` int(11) DEFAULT '0', - `char2_cp` int(11) DEFAULT '0', - `char2_items` mediumint(7) DEFAULT '0', - PRIMARY KEY (`trade_id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; - --- ---------------------------- --- Table structure for qs_player_trade_record_entries --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_trade_record_entries`; -CREATE TABLE `qs_player_trade_record_entries` ( - `event_id` int(11) DEFAULT '0', - `from_id` int(11) DEFAULT '0', - `from_slot` mediumint(7) DEFAULT '0', - `to_id` int(11) DEFAULT '0', - `to_slot` mediumint(7) DEFAULT '0', - `item_id` int(11) DEFAULT '0', - `charges` mediumint(7) DEFAULT '0', - `aug_1` int(11) DEFAULT '0', - `aug_2` int(11) DEFAULT '0', - `aug_3` int(11) DEFAULT '0', - `aug_4` int(11) DEFAULT '0', - `aug_5` int(11) DEFAULT '0' -) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/utils/sql/git/required/2014_08_23_player_events_and_player_aa_rate_hourly.sql b/utils/sql/git/required/2014_08_23_player_events_and_player_aa_rate_hourly.sql deleted file mode 100644 index 2d5cbfa17..000000000 --- a/utils/sql/git/required/2014_08_23_player_events_and_player_aa_rate_hourly.sql +++ /dev/null @@ -1,23 +0,0 @@ --- ---------------------------- --- Table structure for qs_player_events --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_events`; -CREATE TABLE `qs_player_events` ( - `id` int(11) unsigned NOT NULL AUTO_INCREMENT, - `char_id` int(11) DEFAULT '0', - `event` int(11) unsigned DEFAULT '0', - `event_desc` varchar(255) DEFAULT NULL, - `time` int(11) unsigned DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; - --- ---------------------------- --- Table structure for qs_player_aa_rate_hourly --- ---------------------------- -DROP TABLE IF EXISTS `qs_player_aa_rate_hourly`; -CREATE TABLE `qs_player_aa_rate_hourly` ( - `char_id` int(11) NOT NULL DEFAULT '0', - `hour_time` int(11) NOT NULL, - `aa_count` varchar(11) DEFAULT NULL, - PRIMARY KEY (`char_id`,`hour_time`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; \ No newline at end of file diff --git a/utils/sql/git/required/2014_08_24_character_lookup.sql b/utils/sql/git/required/2014_08_24_character_lookup.sql deleted file mode 100644 index 414dbbdcb..000000000 --- a/utils/sql/git/required/2014_08_24_character_lookup.sql +++ /dev/null @@ -1,33 +0,0 @@ --- chracter_lookup table structure -- - -CREATE TABLE `character_lookup` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `account_id` int(11) NOT NULL DEFAULT '0', - `name` varchar(64) NOT NULL DEFAULT '', - `timelaston` int(11) unsigned DEFAULT '0', - `x` float NOT NULL DEFAULT '0', - `y` float NOT NULL DEFAULT '0', - `z` float NOT NULL DEFAULT '0', - `zonename` varchar(30) NOT NULL DEFAULT '', - `zoneid` smallint(6) NOT NULL DEFAULT '0', - `instanceid` smallint(5) unsigned NOT NULL DEFAULT '0', - `pktime` int(8) NOT NULL DEFAULT '0', - `groupid` int(10) unsigned NOT NULL DEFAULT '0', - `class` tinyint(4) NOT NULL DEFAULT '0', - `level` mediumint(8) unsigned NOT NULL DEFAULT '0', - `lfp` tinyint(1) unsigned NOT NULL DEFAULT '0', - `lfg` tinyint(1) unsigned NOT NULL DEFAULT '0', - `mailkey` char(16) NOT NULL, - `xtargets` tinyint(3) unsigned NOT NULL DEFAULT '5', - `firstlogon` tinyint(3) NOT NULL DEFAULT '0', - `inspectmessage` varchar(256) NOT NULL DEFAULT '', - PRIMARY KEY (`id`), - UNIQUE KEY `name` (`name`), - KEY `account_id` (`account_id`) -) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; - --- Initial population of the character_lookup table -- - -INSERT INTO `character_lookup` (id, account_id, `name`, timelaston, x, y, z, zonename, zoneid, instanceid, pktime, groupid, class, `level`, lfp, lfg, mailkey, xtargets, firstlogon, inspectmessage) -SELECT id, account_id, `name`, timelaston, x, y, z, zonename, zoneid, instanceid, pktime, groupid, class, `level`, lfp, lfg, mailkey, xtargets, firstlogon, inspectmessage -FROM `character_`; \ No newline at end of file diff --git a/utils/sql/git/required/2014_09_09_attack_delay.sql b/utils/sql/git/required/2014_09_09_attack_delay.sql deleted file mode 100644 index 87efa043a..000000000 --- a/utils/sql/git/required/2014_09_09_attack_delay.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE `npc_types` ADD `attack_delay` TINYINT(3) UNSIGNED DEFAULT '30' NOT NULL AFTER `attack_speed`; -UPDATE `npc_types` SET `attack_delay` = 36 + 36 * (`attack_speed` / 100); -UPDATE `npc_types` SET `attack_delay` = 30 WHERE `attack_speed` = 0; diff --git a/utils/sql/git/required/2014_09_18_tellqueuesclean.sql b/utils/sql/git/required/2014_09_18_tellqueuesclean.sql deleted file mode 100644 index 04d9b38d1..000000000 --- a/utils/sql/git/required/2014_09_18_tellqueuesclean.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE `tellque`; diff --git a/utils/sql/git/required/2014_09_20_ban_messages.sql b/utils/sql/git/required/2014_09_20_ban_messages.sql deleted file mode 100644 index 229f08776..000000000 --- a/utils/sql/git/required/2014_09_20_ban_messages.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `account` ADD COLUMN `ban_reason` TEXT NULL DEFAULT NULL, ADD COLUMN `suspend_reason` TEXT NULL DEFAULT NULL AFTER `ban_reason`; diff --git a/utils/sql/git/required/2014_10_11_RaidMOTD.sql b/utils/sql/git/required/2014_10_11_RaidMOTD.sql deleted file mode 100644 index 39fccd311..000000000 --- a/utils/sql/git/required/2014_10_11_RaidMOTD.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `raid_details` ADD `motd` varchar(1024); diff --git a/utils/sql/git/required/2014_10_13_RaidLeadership.sql b/utils/sql/git/required/2014_10_13_RaidLeadership.sql deleted file mode 100644 index 972e09ed5..000000000 --- a/utils/sql/git/required/2014_10_13_RaidLeadership.sql +++ /dev/null @@ -1,9 +0,0 @@ -CREATE TABLE `raid_leaders` ( - `gid` int(4) unsigned NOT NULL, - `rid` int(4) unsigned NOT NULL, - `marknpc` varchar(64) NOT NULL, - `maintank` varchar(64) NOT NULL, - `assist` varchar(64) NOT NULL, - `puller` varchar(64) NOT NULL, - `leadershipaa` tinyblob NOT NULL -); diff --git a/utils/sql/git/required/2014_10_18_group_mentor.sql b/utils/sql/git/required/2014_10_18_group_mentor.sql deleted file mode 100644 index bd139f076..000000000 --- a/utils/sql/git/required/2014_10_18_group_mentor.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `group_leaders` ADD `mentoree` VARCHAR(64) NOT NULL; -ALTER TABLE `group_leaders` ADD `mentor_percent` INT(4) DEFAULT 0 NOT NULL; diff --git a/utils/sql/git/required/2014_10_19_raid_group_mentor.sql b/utils/sql/git/required/2014_10_19_raid_group_mentor.sql deleted file mode 100644 index 4cb8d5613..000000000 --- a/utils/sql/git/required/2014_10_19_raid_group_mentor.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `raid_leaders` ADD `mentoree` VARCHAR(64) NOT NULL; -ALTER TABLE `raid_leaders` ADD `mentor_percent` INT(4) DEFAULT 0 NOT NULL; diff --git a/utils/sql/git/required/2014_10_30_special_abilities_null.sql b/utils/sql/git/required/2014_10_30_special_abilities_null.sql deleted file mode 100644 index c9e52011d..000000000 --- a/utils/sql/git/required/2014_10_30_special_abilities_null.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE `merc_stats` MODIFY COLUMN `special_abilities` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL; - -ALTER TABLE `npc_types` MODIFY COLUMN `special_abilities` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL; - diff --git a/utils/sql/git/required/2014_11_08_RaidMembers.sql b/utils/sql/git/required/2014_11_08_RaidMembers.sql deleted file mode 100644 index 79e1bb17a..000000000 --- a/utils/sql/git/required/2014_11_08_RaidMembers.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `raid_members` CHANGE COLUMN `groupid` `groupid` INT(4) UNSIGNED NOT NULL DEFAULT '0' AFTER `charid`; \ No newline at end of file diff --git a/utils/sql/git/required/2014_11_13_spells_new_updates.sql b/utils/sql/git/required/2014_11_13_spells_new_updates.sql deleted file mode 100644 index a3863cbd8..000000000 --- a/utils/sql/git/required/2014_11_13_spells_new_updates.sql +++ /dev/null @@ -1,9 +0,0 @@ --- spells new table update -ALTER TABLE `spells_new` CHANGE `field124` `disallow_sit` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field125` `deities0` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field196` `sneaking` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field158` `effectdescnum2` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field165` `ldon_trap` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field205` `no_block` INT(11) NOT NULL DEFAULT '0'; - - diff --git a/utils/sql/git/required/2014_11_26_InventoryTableUpdate.sql b/utils/sql/git/required/2014_11_26_InventoryTableUpdate.sql deleted file mode 100644 index 27a6d6c37..000000000 --- a/utils/sql/git/required/2014_11_26_InventoryTableUpdate.sql +++ /dev/null @@ -1,4 +0,0 @@ --- Inventory table update -ALTER TABLE `inventory` - ADD COLUMN `ornamenticon` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `custom_data`, - ADD COLUMN `ornamentidfile` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `ornamenticon`; diff --git a/utils/sql/git/required/2014_12_01_mercs_table_update.sql b/utils/sql/git/required/2014_12_01_mercs_table_update.sql deleted file mode 100644 index e5dc895f9..000000000 --- a/utils/sql/git/required/2014_12_01_mercs_table_update.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `mercs` ADD `MercSize` float( 0 ) NOT NULL DEFAULT '5' AFTER `Gender`; diff --git a/utils/sql/git/required/2014_12_09_items_table_update.sql b/utils/sql/git/required/2014_12_09_items_table_update.sql deleted file mode 100644 index 82866a3a3..000000000 --- a/utils/sql/git/required/2014_12_09_items_table_update.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `items` ADD `herosforgemodel` int( 11 ) NOT NULL DEFAULT '0' AFTER `material`; diff --git a/utils/sql/git/required/2014_12_13_inventory_table_update.sql b/utils/sql/git/required/2014_12_13_inventory_table_update.sql deleted file mode 100644 index 97a07b6ee..000000000 --- a/utils/sql/git/required/2014_12_13_inventory_table_update.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `inventory` ADD `ornament_hero_model` int( 11 ) NOT NULL DEFAULT '0' AFTER `ornamentidfile`; \ No newline at end of file diff --git a/utils/sql/git/required/2014_12_15_multiple_table_updates.sql b/utils/sql/git/required/2014_12_15_multiple_table_updates.sql deleted file mode 100644 index de652e570..000000000 --- a/utils/sql/git/required/2014_12_15_multiple_table_updates.sql +++ /dev/null @@ -1,16 +0,0 @@ -/* Add the new Aug Slot 6 Fields to the items table */ -ALTER TABLE `items` ADD `augslot6type` tinyint( 3 ) NOT NULL DEFAULT '0' AFTER `augslot5visible`; -ALTER TABLE `items` ADD `augslot6visible` tinyint( 3 ) NOT NULL DEFAULT '0' AFTER `augslot6type`; -ALTER TABLE `items` ADD `augslot6unk2` int( 11 ) NOT NULL DEFAULT '0' AFTER `augslot5unk2`; - -/* Add the new Aug Slot 6 Field to the inventory table */ -ALTER TABLE `inventory` ADD `augslot6` mediumint( 7 ) NOT NULL DEFAULT '0' AFTER `augslot5`; - -/* Add the new Aug Slot 6 Field to the sharedbank table */ -ALTER TABLE `sharedbank` ADD `augslot6` mediumint( 7 ) NOT NULL DEFAULT '0' AFTER `augslot5`; - -/* Add the new Aug Slot 6 Field to the object_contents table */ -ALTER TABLE `object_contents` ADD `augslot6` mediumint( 7 ) NOT NULL DEFAULT '0' AFTER `augslot5`; - -/* Add the new Aug Slot 6 Field to the sharedbank table */ -ALTER TABLE `character_corpse_items` ADD `aug_6` int( 11 ) NOT NULL DEFAULT '0' AFTER `aug_5`; \ No newline at end of file diff --git a/utils/sql/git/required/2014_12_24_npc_types_table_update.sql b/utils/sql/git/required/2014_12_24_npc_types_table_update.sql deleted file mode 100644 index c65749b36..000000000 --- a/utils/sql/git/required/2014_12_24_npc_types_table_update.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `npc_types` ADD `herosforgemodel` int( 11 ) NOT NULL DEFAULT '0' AFTER `helmtexture`; \ No newline at end of file diff --git a/utils/sql/git/required/2014_12_24_npc_types_update.sql b/utils/sql/git/required/2014_12_24_npc_types_update.sql deleted file mode 100644 index a44d15c2d..000000000 --- a/utils/sql/git/required/2014_12_24_npc_types_update.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `npc_types` CHANGE `d_meele_texture1` `d_melee_texture1` INT(11) DEFAULT NULL; -ALTER TABLE `npc_types` CHANGE `d_meele_texture2` `d_melee_texture2` INT(11) DEFAULT NULL; \ No newline at end of file diff --git a/utils/sql/git/required/2014_12_26_merc_weaponinfo_table_update.sql b/utils/sql/git/required/2014_12_26_merc_weaponinfo_table_update.sql deleted file mode 100644 index 3c8d291bb..000000000 --- a/utils/sql/git/required/2014_12_26_merc_weaponinfo_table_update.sql +++ /dev/null @@ -1,69 +0,0 @@ -/* Drop the current Merc View */ -DROP VIEW vwMercNpcTypes; - -/* Rename fields to match the source changes */ -ALTER TABLE `merc_weaponinfo` CHANGE `d_meele_texture1` `d_melee_texture1` INT(11) NOT NULL DEFAULT 0; -ALTER TABLE `merc_weaponinfo` CHANGE `d_meele_texture2` `d_melee_texture2` INT(11) NOT NULL DEFAULT 0; - -/* Re-Create the Merc View with new field names */ -CREATE VIEW vwMercNpcTypes AS -SELECT - ms.merc_npc_type_id, - '' AS name, - ms.clientlevel, - ms.level, - mtyp.race_id, - mstyp.class_id, - ms.hp, - ms.mana, - 0 AS gender, - mai.texture, - mai.helmtexture, - ms.attack_speed, - ms.STR, - ms.STA, - ms.DEX, - ms.AGI, - ms._INT, - ms.WIS, - ms.CHA, - ms.MR, - ms.CR, - ms.DR, - ms.FR, - ms.PR, - ms.Corrup, - ms.mindmg, - ms.maxdmg, - ms.attack_count, - ms.special_abilities AS special_abilities, - mwi.d_melee_texture1, - mwi.d_melee_texture2, - mwi.prim_melee_type, - mwi.sec_melee_type, - ms.runspeed, - ms.hp_regen_rate, - ms.mana_regen_rate, - 1 AS bodytype, - mai.armortint_id, - mai.armortint_red, - mai.armortint_green, - mai.armortint_blue, - ms.AC, - ms.ATK, - ms.Accuracy, - ms.spellscale, - ms.healscale -FROM merc_stats ms -INNER JOIN merc_armorinfo mai -ON ms.merc_npc_type_id = mai.merc_npc_type_id -AND mai.minlevel <= ms.level AND mai.maxlevel >= ms.level -INNER JOIN merc_weaponinfo mwi -ON ms.merc_npc_type_id = mwi.merc_npc_type_id -AND mwi.minlevel <= ms.level AND mwi.maxlevel >= ms.level -INNER JOIN merc_templates mtem -ON mtem.merc_npc_type_id = ms.merc_npc_type_id -INNER JOIN merc_types mtyp -ON mtem.merc_type_id = mtyp.merc_type_id -INNER JOIN merc_subtypes mstyp -ON mtem.merc_subtype_id = mstyp.merc_subtype_id; \ No newline at end of file diff --git a/utils/sql/git/required/2014_12_31_npc_types_default_values_update.sql b/utils/sql/git/required/2014_12_31_npc_types_default_values_update.sql deleted file mode 100644 index d06f3f74c..000000000 --- a/utils/sql/git/required/2014_12_31_npc_types_default_values_update.sql +++ /dev/null @@ -1,6 +0,0 @@ -UPDATE `npc_types` SET `bodytype` = 0 WHERE `bodytype` IS NULL; -ALTER TABLE `npc_types` MODIFY `bodytype` INT(11) NOT NULL DEFAULT '1'; -UPDATE `npc_types` SET `d_melee_texture1` = 0 WHERE `d_melee_texture1` IS NULL; -ALTER TABLE `npc_types` MODIFY `d_melee_texture1` INT(11) NOT NULL DEFAULT '0'; -UPDATE `npc_types` SET `d_melee_texture2` = 0 WHERE `d_melee_texture2` IS NULL; -ALTER TABLE `npc_types` MODIFY `d_melee_texture2` INT(11) NOT NULL DEFAULT '0'; diff --git a/utils/sql/git/required/2015_01_15_logsys_categories_table.sql b/utils/sql/git/required/2015_01_15_logsys_categories_table.sql deleted file mode 100644 index fc4c8ca3a..000000000 --- a/utils/sql/git/required/2015_01_15_logsys_categories_table.sql +++ /dev/null @@ -1,54 +0,0 @@ -SET FOREIGN_KEY_CHECKS=0; - --- ---------------------------- --- Table structure for logsys_categories --- ---------------------------- -DROP TABLE IF EXISTS `logsys_categories`; -CREATE TABLE `logsys_categories` ( - `log_category_id` int(11) NOT NULL, - `log_category_description` varchar(150) DEFAULT NULL, - `log_to_console` smallint(11) DEFAULT '0', - `log_to_file` smallint(11) DEFAULT '0', - `log_to_gmsay` smallint(11) DEFAULT '0', - PRIMARY KEY (`log_category_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- ---------------------------- --- Records of logsys_categories --- ---------------------------- -INSERT INTO `logsys_categories` VALUES ('1', 'AA', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('2', 'AI', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('3', 'Aggro', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('4', 'Attack', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('5', 'Client_Server_Packet', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('6', 'Combat', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('7', 'Commands', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('8', 'Crash', '1', '1', '0'); -INSERT INTO `logsys_categories` VALUES ('9', 'Debug', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('10', 'Doors', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('11', 'Error', '1', '1', '0'); -INSERT INTO `logsys_categories` VALUES ('12', 'Guilds', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('13', 'Inventory', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('14', 'Launcher', '1', '1', '0'); -INSERT INTO `logsys_categories` VALUES ('15', 'Netcode', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('16', 'Normal', '1', '1', '0'); -INSERT INTO `logsys_categories` VALUES ('17', 'Object', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('18', 'Pathing', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('19', 'QS_Server', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('20', 'Quests', '1', '1', '0'); -INSERT INTO `logsys_categories` VALUES ('21', 'Rules', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('22', 'Skills', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('23', 'Spawns', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('24', 'Spells', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('25', 'Status', '1', '1', '0'); -INSERT INTO `logsys_categories` VALUES ('26', 'TCP_Connection', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('27', 'Tasks', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('28', 'Tradeskills', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('29', 'Trading', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('30', 'Tribute', '0', '0', '0'); -INSERT INTO `logsys_categories` VALUES ('31', 'UCS_Server', '1', '1', '0'); -INSERT INTO `logsys_categories` VALUES ('32', 'WebInterface_Server', '1', '1', '0'); -INSERT INTO `logsys_categories` VALUES ('33', 'World_Server', '1', '1', '0'); -INSERT INTO `logsys_categories` VALUES ('34', 'Zone Server', '1', '1', '0'); -INSERT INTO `logsys_categories` VALUES ('35', 'MySQL Error', '1', '1', '1'); -INSERT INTO `logsys_categories` VALUES ('36', 'MySQL Queries', '0', '0', '0'); diff --git a/utils/sql/git/required/2015_01_21_npc_types_update.sql b/utils/sql/git/required/2015_01_21_npc_types_update.sql deleted file mode 100644 index a73df42c8..000000000 --- a/utils/sql/git/required/2015_01_21_npc_types_update.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `npc_types` ADD `light` tinyint( 2 ) NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/utils/sql/git/required/2015_01_25_logsys_Mercenaries_category.sql b/utils/sql/git/required/2015_01_25_logsys_Mercenaries_category.sql deleted file mode 100644 index 960f187bb..000000000 --- a/utils/sql/git/required/2015_01_25_logsys_Mercenaries_category.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO `logsys_categories` (`log_category_id`,`log_category_description`,`log_to_console`,`log_to_file`,`log_to_gmsay`) VALUES ('37', 'Mercenaries', '0', '0', '0'); \ No newline at end of file diff --git a/utils/sql/git/required/2015_01_28_quest_debug_log_category.sql b/utils/sql/git/required/2015_01_28_quest_debug_log_category.sql deleted file mode 100644 index 98f030dff..000000000 --- a/utils/sql/git/required/2015_01_28_quest_debug_log_category.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO `logsys_categories` (`log_category_id`, `log_category_description`, `log_to_gmsay`) VALUES ('38', 'Quest Debug', '1'); diff --git a/utils/sql/git/required/2015_01_29_merc_stats_table_update.sql b/utils/sql/git/required/2015_01_29_merc_stats_table_update.sql deleted file mode 100644 index 9c149b825..000000000 --- a/utils/sql/git/required/2015_01_29_merc_stats_table_update.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `merc_stats` ADD `statscale` int( 11 ) NOT NULL DEFAULT '100' AFTER `runspeed`; \ No newline at end of file diff --git a/utils/sql/git/required/2015_01_30_merc_attack_delay.sql b/utils/sql/git/required/2015_01_30_merc_attack_delay.sql deleted file mode 100644 index 6aa63e61f..000000000 --- a/utils/sql/git/required/2015_01_30_merc_attack_delay.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE `merc_stats` ADD `attack_delay` TINYINT(3) UNSIGNED DEFAULT '30' NOT NULL AFTER `attack_speed`; -UPDATE `merc_stats` SET `attack_delay` = 36 + 36 * (`attack_speed` / 100); -UPDATE `merc_stats` SET `attack_delay` = 30 WHERE `attack_speed` = 0; diff --git a/utils/sql/git/required/2015_01_31_character_item_recast.sql b/utils/sql/git/required/2015_01_31_character_item_recast.sql deleted file mode 100644 index fbc222608..000000000 --- a/utils/sql/git/required/2015_01_31_character_item_recast.sql +++ /dev/null @@ -1,7 +0,0 @@ -CREATE TABLE `character_item_recast` ( - `id` int(11) UNSIGNED NOT NULL DEFAULT 0, - `recast_type` smallint(11) UNSIGNED NOT NULL DEFAULT 0, - `timestamp` int(11) UNSIGNED NOT NULL DEFAULT 0, - PRIMARY KEY(`id`, `recast_type`), - KEY `id` (`id`) -) ENGINE = InnoDB DEFAULT CHARSET = latin1; diff --git a/utils/sql/git/required/2015_02_01_logsys_packet_logs.sql b/utils/sql/git/required/2015_02_01_logsys_packet_logs.sql deleted file mode 100644 index ba00ee607..000000000 --- a/utils/sql/git/required/2015_02_01_logsys_packet_logs.sql +++ /dev/null @@ -1,3 +0,0 @@ -REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('39', 'Packet: Server -> Client'); -REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('5', 'Packet: Client -> Server'); -REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('40', 'Packet: Client -> Server Unhandled'); \ No newline at end of file diff --git a/utils/sql/git/required/2015_02_02_logsys_packet_logs_with_dump.sql b/utils/sql/git/required/2015_02_02_logsys_packet_logs_with_dump.sql deleted file mode 100644 index d0d4e78c8..000000000 --- a/utils/sql/git/required/2015_02_02_logsys_packet_logs_with_dump.sql +++ /dev/null @@ -1,2 +0,0 @@ -REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('41', 'Packet: Server -> Client With Dump'); -REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('42', 'Packet: Client -> Server With Dump'); diff --git a/utils/sql/git/required/2015_02_04_average_coin.sql b/utils/sql/git/required/2015_02_04_average_coin.sql deleted file mode 100644 index 9ebff6d67..000000000 --- a/utils/sql/git/required/2015_02_04_average_coin.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `loottable` CHANGE COLUMN `avgcoin` `avgcoin` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `maxcash`; -UPDATE `loottable` SET avgcoin = 0; diff --git a/utils/sql/git/required/2015_02_12_zone_gravity.sql b/utils/sql/git/required/2015_02_12_zone_gravity.sql deleted file mode 100644 index cb475dfe5..000000000 --- a/utils/sql/git/required/2015_02_12_zone_gravity.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `zone` -ADD COLUMN `gravity` float NOT NULL DEFAULT .4 AFTER `snow_duration4`; \ No newline at end of file diff --git a/utils/sql/git/required/2015_05_20_BuffInstrumentMod.sql b/utils/sql/git/required/2015_05_20_BuffInstrumentMod.sql deleted file mode 100644 index 140fe5b66..000000000 --- a/utils/sql/git/required/2015_05_20_BuffInstrumentMod.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `character_buffs` ADD COLUMN `instrument_mod` int(10) DEFAULT 10 NOT NULL; diff --git a/utils/sql/git/required/2015_05_23_BuffDurations.sql b/utils/sql/git/required/2015_05_23_BuffDurations.sql deleted file mode 100644 index 5f03039a6..000000000 --- a/utils/sql/git/required/2015_05_23_BuffDurations.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `character_buffs` CHANGE COLUMN `ticsremaining` `ticsremaining` INT(11) SIGNED NOT NULL; -ALTER TABLE `merc_buffs` CHANGE COLUMN `TicsRemaining` `TicsRemaining` INT(11) SIGNED NOT NULL DEFAULT 0; diff --git a/utils/sql/git/required/2015_05_23_PetBuffInstrumentMod.sql b/utils/sql/git/required/2015_05_23_PetBuffInstrumentMod.sql deleted file mode 100644 index 40cc453dc..000000000 --- a/utils/sql/git/required/2015_05_23_PetBuffInstrumentMod.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `character_pet_buffs` ADD COLUMN `instrument_mod` tinyint UNSIGNED DEFAULT 10 NOT NULL; diff --git a/utils/sql/git/required/2015_05_23_dbstr_us.sql b/utils/sql/git/required/2015_05_23_dbstr_us.sql deleted file mode 100644 index 1eba0afa6..000000000 --- a/utils/sql/git/required/2015_05_23_dbstr_us.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE `db_str` ( - `id` INT(10) NOT NULL, - `type` INT(10) NOT NULL, - `value` TEXT NOT NULL, - PRIMARY KEY (`id`, `type`) -); diff --git a/utils/sql/git/required/2015_05_25_npc_types_texture_fields.sql b/utils/sql/git/required/2015_05_25_npc_types_texture_fields.sql deleted file mode 100644 index acd8d26b6..000000000 --- a/utils/sql/git/required/2015_05_25_npc_types_texture_fields.sql +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE npc_types -ADD COLUMN `armtexture` tinyint(2) NOT NULL DEFAULT '0' AFTER `raid_target`, -ADD COLUMN `bracertexture` tinyint(2) NOT NULL DEFAULT '0' AFTER `armtexture`, -ADD COLUMN `handtexture` tinyint(2) NOT NULL DEFAULT '0' AFTER `bracertexture`, -ADD COLUMN `legtexture` tinyint(2) NOT NULL DEFAULT '0' AFTER `handtexture`, -ADD COLUMN `feettexture` tinyint(2) NOT NULL DEFAULT '0' AFTER `legtexture`; \ No newline at end of file diff --git a/utils/sql/git/required/2015_06_07_aa_update.sql b/utils/sql/git/required/2015_06_07_aa_update.sql deleted file mode 100644 index a888a75ea..000000000 --- a/utils/sql/git/required/2015_06_07_aa_update.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE character_alternate_abilities ADD COLUMN charges SMALLINT(11) UNSIGNED NOT NULL DEFAULT 0; diff --git a/utils/sql/git/required/2015_06_30_runspeed_adjustments.sql b/utils/sql/git/required/2015_06_30_runspeed_adjustments.sql deleted file mode 100644 index f3feaec1a..000000000 --- a/utils/sql/git/required/2015_06_30_runspeed_adjustments.sql +++ /dev/null @@ -1,7 +0,0 @@ -/* This rescales the old peq runspeeds which were about 80 percent too high to new values */ -/* This section should only ever be run once */ -UPDATE npc_types SET npc_types.runspeed = 1.050 WHERE (npc_types.runspeed > 0 and npc_types.runspeed < 1.2); -UPDATE npc_types SET npc_types.runspeed = 1.325 WHERE (npc_types.runspeed > 1.19 and npc_types.runspeed < 1.75 and race != 73 and race != 72); -UPDATE npc_types SET npc_types.runspeed = 1.575 WHERE (npc_types.runspeed > 1.69 and npc_types.runspeed < 2.2); -UPDATE npc_types SET npc_types.runspeed = 1.850 WHERE (npc_types.runspeed > 2.19 and npc_types.runspeed < 3); -UPDATE npc_types SET npc_types.runspeed = 3 WHERE npc_types.runspeed > 3; \ No newline at end of file diff --git a/utils/sql/git/required/2015_07_01_Marquee_Rule.sql b/utils/sql/git/required/2015_07_01_Marquee_Rule.sql deleted file mode 100644 index 039a34412..000000000 --- a/utils/sql/git/required/2015_07_01_Marquee_Rule.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO `rule_values` (`rule_name`, `rule_value`, `notes`) VALUES ('Character:MarqueeHPUpdates', 'false', 'Will show Health % in center of screen < 100%'); \ No newline at end of file diff --git a/utils/sql/git/required/2015_07_02_aa_rework.sql b/utils/sql/git/required/2015_07_02_aa_rework.sql deleted file mode 100644 index 77dde6b86..000000000 --- a/utils/sql/git/required/2015_07_02_aa_rework.sql +++ /dev/null @@ -1,20679 +0,0 @@ -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 '65535', - `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); - -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', - `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; - -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; diff --git a/utils/sql/git/required/2015_09_25_inventory_snapshots.sql b/utils/sql/git/required/2015_09_25_inventory_snapshots.sql deleted file mode 100644 index 12b167e8b..000000000 --- a/utils/sql/git/required/2015_09_25_inventory_snapshots.sql +++ /dev/null @@ -1,46 +0,0 @@ -CREATE TABLE `inventory_snapshots` ( - `time_index` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `charid` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `slotid` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `itemid` INT(11) UNSIGNED NULL DEFAULT '0', - `charges` SMALLINT(3) UNSIGNED NULL DEFAULT '0', - `color` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `augslot1` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augslot2` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augslot3` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augslot4` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augslot5` MEDIUMINT(7) UNSIGNED NULL DEFAULT '0', - `augslot6` MEDIUMINT(7) NOT NULL DEFAULT '0', - `instnodrop` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', - `custom_data` TEXT NULL, - `ornamenticon` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `ornamentidfile` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `ornament_hero_model` INT(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`time_index`, `charid`, `slotid`) -) -COLLATE='latin1_swedish_ci' -ENGINE=InnoDB; - -ALTER TABLE `character_data` ADD COLUMN `e_last_invsnapshot` INT(11) UNSIGNED NOT NULL DEFAULT '0'; - -INSERT INTO `rule_values` VALUES -(1, 'Character:ActiveInvSnapshots', 'false', 'Takes a periodic snapshot of inventory contents from online players'), -(2, 'Character:ActiveInvSnapshots', 'false', 'Takes a periodic snapshot of inventory contents from online players'), -(4, 'Character:ActiveInvSnapshots', 'false', 'Takes a periodic snapshot of inventory contents from online players'), -(5, 'Character:ActiveInvSnapshots', 'false', 'Takes a periodic snapshot of inventory contents from online players'), -(10, 'Character:ActiveInvSnapshots', 'false', 'Takes a periodic snapshot of inventory contents from online players'), -(1, 'Character:InvSnapshotMinIntervalM', '180', 'Minimum time (in minutes) between inventory snapshots'), -(2, 'Character:InvSnapshotMinIntervalM', '180', 'Minimum time (in minutes) between inventory snapshots'), -(4, 'Character:InvSnapshotMinIntervalM', '180', 'Minimum time (in minutes) between inventory snapshots'), -(5, 'Character:InvSnapshotMinIntervalM', '180', 'Minimum time (in minutes) between inventory snapshots'), -(10, 'Character:InvSnapshotMinIntervalM', '180', 'Minimum time (in minutes) between inventory snapshots'), -(1, 'Character:InvSnapshotMinRetryM', '30', 'Time (in minutes) to re-attempt an inventory snapshot after a failure'), -(2, 'Character:InvSnapshotMinRetryM', '30', 'Time (in minutes) to re-attempt an inventory snapshot after a failure'), -(4, 'Character:InvSnapshotMinRetryM', '30', 'Time (in minutes) to re-attempt an inventory snapshot after a failure'), -(5, 'Character:InvSnapshotMinRetryM', '30', 'Time (in minutes) to re-attempt an inventory snapshot after a failure'), -(10, 'Character:InvSnapshotMinRetryM', '30', 'Time (in minutes) to re-attempt an inventory snapshot after a failure'), -(1, 'Character:InvSnapshotHistoryD', '30', 'Time (in days) to keep snapshot entries'), -(2, 'Character:InvSnapshotHistoryD', '30', 'Time (in days) to keep snapshot entries'), -(4, 'Character:InvSnapshotHistoryD', '30', 'Time (in days) to keep snapshot entries'), -(5, 'Character:InvSnapshotHistoryD', '30', 'Time (in days) to keep snapshot entries'), -(10, 'Character:InvSnapshotHistoryD', '30', 'Time (in days) to keep snapshot entries'); diff --git a/utils/sql/git/required/2015_11_01_perl_event_export_settings.sql b/utils/sql/git/required/2015_11_01_perl_event_export_settings.sql deleted file mode 100644 index 14efd90a5..000000000 --- a/utils/sql/git/required/2015_11_01_perl_event_export_settings.sql +++ /dev/null @@ -1,95 +0,0 @@ -CREATE TABLE `perl_event_export_settings` ( - `event_id` int(11) NOT NULL, - `event_description` varchar(150) DEFAULT NULL, - `export_qglobals` smallint(11) DEFAULT '0', - `export_mob` smallint(11) DEFAULT '0', - `export_zone` smallint(11) DEFAULT '0', - `export_item` smallint(11) DEFAULT '0', - `export_event` smallint(11) DEFAULT '0', - PRIMARY KEY (`event_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- ---------------------------- --- Records of perl_event_export_settings --- ---------------------------- -INSERT INTO `perl_event_export_settings` VALUES ('0', 'EVENT_SAY', '1', '1', '1', '1', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('1', 'EVENT_ITEM', '1', '1', '1', '1', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('2', 'EVENT_DEATH', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('3', 'EVENT_SPAWN', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('4', 'EVENT_ATTACK', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('5', 'EVENT_COMBAT', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('6', 'EVENT_AGGRO', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('7', 'EVENT_SLAY', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('8', 'EVENT_NPC_SLAY', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('9', 'EVENT_WAYPOINT_ARRIVE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('10', 'EVENT_WAYPOINT_DEPART', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('11', 'EVENT_TIMER', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('12', 'EVENT_SIGNAL', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('13', 'EVENT_HP', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('14', 'EVENT_ENTER', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('15', 'EVENT_EXIT', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('16', 'EVENT_ENTERZONE', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('17', 'EVENT_CLICKDOOR', '1', '1', '1', '1', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('18', 'EVENT_LOOT', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('19', 'EVENT_ZONE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('20', 'EVENT_LEVEL_UP', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('21', 'EVENT_KILLED_MERIT', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('22', 'EVENT_CAST_ON', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('23', 'EVENT_TASKACCEPTED', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('24', 'EVENT_TASK_STAGE_COMPLETE', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('25', 'EVENT_TASK_UPDATE', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('26', 'EVENT_TASK_COMPLETE', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('27', 'EVENT_TASK_FAIL', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('28', 'EVENT_AGGRO_SAY', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('29', 'EVENT_PLAYER_PICKUP', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('30', 'EVENT_POPUPRESPONSE', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('31', 'EVENT_ENVIRONMENTAL_DAMAGE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('32', 'EVENT_PROXIMITY_SAY', '1', '1', '1', '1', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('33', 'EVENT_CAST', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('34', 'EVENT_CAST_BEGIN', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('35', 'EVENT_SCALE_CALC', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('36', 'EVENT_ITEM_ENTER_ZONE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('37', 'EVENT_TARGET_CHANGE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('38', 'EVENT_HATE_LIST', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('39', 'EVENT_SPELL_EFFECT_CLIENT', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('40', 'EVENT_SPELL_EFFECT_NPC', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('41', 'EVENT_SPELL_EFFECT_BUFF_TIC_CLIENT', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('42', 'EVENT_SPELL_EFFECT_BUFF_TIC_NPC', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('43', 'EVENT_SPELL_FADE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('44', 'EVENT_SPELL_EFFECT_TRANSLOCATE_COMPLETE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('45', 'EVENT_COMBINE_SUCCESS', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('46', 'EVENT_COMBINE_FAILURE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('47', 'EVENT_ITEM_CLICK', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('48', 'EVENT_ITEM_CLICK_CAST', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('49', 'EVENT_GROUP_CHANGE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('50', 'EVENT_FORAGE_SUCCESS', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('51', 'EVENT_FORAGE_FAILURE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('52', 'EVENT_FISH_START', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('53', 'EVENT_FISH_SUCCESS', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('54', 'EVENT_FISH_FAILURE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('55', 'EVENT_CLICK_OBJECT', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('56', 'EVENT_DISCOVER_ITEM', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('57', 'EVENT_DISCONNECT', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('58', 'EVENT_CONNECT', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('59', 'EVENT_ITEM_TICK', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('60', 'EVENT_DUEL_WIN', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('61', 'EVENT_DUEL_LOSE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('62', 'EVENT_ENCOUNTER_LOAD', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('63', 'EVENT_ENCOUNTER_UNLOAD', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('64', 'EVENT_SAY', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('65', 'EVENT_DROP_ITEM', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('66', 'EVENT_DESTROY_ITEM', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('67', 'EVENT_FEIGN_DEATH', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('68', 'EVENT_WEAPON_PROC', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('69', 'EVENT_EQUIP_ITEM', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('70', 'EVENT_UNEQUIP_ITEM', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('71', 'EVENT_AUGMENT_ITEM', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('72', 'EVENT_UNAUGMENT_ITEM', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('73', 'EVENT_AUGMENT_INSERT', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('74', 'EVENT_AUGMENT_REMOVE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('75', 'EVENT_ENTER_AREA', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('76', 'EVENT_LEAVE_AREA', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('77', 'EVENT_RESPAWN', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('78', 'EVENT_DEATH_COMPLETE', '1', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('79', 'EVENT_UNHANDLED_OPCODE', '0', '1', '1', '0', '1'); -INSERT INTO `perl_event_export_settings` VALUES ('80', 'EVENT_TICK', '0', '1', '1', '0', '1'); diff --git a/utils/sql/git/required/2015_11_02_ai_idle_no_spell_recast_default_changes.sql b/utils/sql/git/required/2015_11_02_ai_idle_no_spell_recast_default_changes.sql deleted file mode 100644 index fe09523c7..000000000 --- a/utils/sql/git/required/2015_11_02_ai_idle_no_spell_recast_default_changes.sql +++ /dev/null @@ -1,2 +0,0 @@ -UPDATE `rule_values` SET `rule_value` = '6000' WHERE `rule_value` = '500' AND `rule_name` = 'Spells:AI_IdleNoSpellMinRecast'; -UPDATE `rule_values` SET `rule_value` = '60000' WHERE `rule_value` = '2000' AND `rule_name` = 'Spells:AI_IdleNoSpellMaxRecast'; \ No newline at end of file diff --git a/utils/sql/git/required/2015_12_01_spell_scribe_restriction_rule.sql b/utils/sql/git/required/2015_12_01_spell_scribe_restriction_rule.sql deleted file mode 100644 index 277e66882..000000000 --- a/utils/sql/git/required/2015_12_01_spell_scribe_restriction_rule.sql +++ /dev/null @@ -1,7 +0,0 @@ -INSERT INTO `rule_values` VALUES ('0', 'Character:RestrictSpellScribing', 'false', 'Restricts spell scribing to allowable races/classes of spell scroll, if true'); -INSERT INTO `rule_values` VALUES ('1', 'Character:RestrictSpellScribing', 'false', 'Restricts spell scribing to allowable races/classes of spell scroll, if true'); -INSERT INTO `rule_values` VALUES ('2', 'Character:RestrictSpellScribing', 'false', 'Restricts spell scribing to allowable races/classes of spell scroll, if true'); -INSERT INTO `rule_values` VALUES ('3', 'Character:RestrictSpellScribing', 'false', 'Restricts spell scribing to allowable races/classes of spell scroll, if true'); -INSERT INTO `rule_values` VALUES ('4', 'Character:RestrictSpellScribing', 'false', 'Restricts spell scribing to allowable races/classes of spell scroll, if true'); -INSERT INTO `rule_values` VALUES ('5', 'Character:RestrictSpellScribing', 'false', 'Restricts spell scribing to allowable races/classes of spell scroll, if true'); -INSERT INTO `rule_values` VALUES ('10', 'Character:RestrictSpellScribing', 'false', 'Restricts spell scribing to allowable races/classes of spell scroll, if true'); diff --git a/utils/sql/git/required/2015_12_07_command_settings.sql b/utils/sql/git/required/2015_12_07_command_settings.sql deleted file mode 100644 index 470525d4c..000000000 --- a/utils/sql/git/required/2015_12_07_command_settings.sql +++ /dev/null @@ -1,11 +0,0 @@ -RENAME TABLE `commands` to `commands_old`; - -CREATE TABLE `command_settings` ( - `command` varchar(128) NOT NULL DEFAULT '', - `access` int(11) NOT NULL DEFAULT '0', - `aliases` varchar(256) NOT NULL DEFAULT '', - PRIMARY KEY (`command`), - UNIQUE KEY `UK_command_settings_1` (`command`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -INSERT INTO `command_settings` VALUES ('acceptrules', '90', ''),('advnpcspawn', '150', 'advnpc'),('aggro', '80', ''),('aggrozone', '200', ''),('ai', '100', ''),('appearance', '150', ''),('apply_shared_memory', '250', ''),('attack', '150', ''),('augmentitem', '250', 'aug'),('ban', '200', ''),('beard', '80', ''),('beardcolor', '80', ''),('bestz', '80', ''),('bind', '80', ''),('camerashake', '80', ''),('castspell', '90', 'cast'),('chat', '200', ''),('checklos', '50', 'los'),('clearinvsnapshots', '200', ''),('connectworldserver', '200', 'connectworld'),('corpse', '90', ''),('crashtest', '201', ''),('cvs', '80', ''),('damage', '150', ''),('date', '150', ''),('dbspawn2', '100', ''),('delacct', '200', ''),('deletegraveyard', '200', ''),('delpetition', '80', ''),('depop', '100', ''),('depopzone', '100', ''),('details', '80', ''),('disablerecipe', '80', ''),('disarmtrap', '80', ''),('distance', '80', ''),('doanim', '50', ''),('emote', '150', ''),('emotesearch', '80', ''),('emoteview', '80', ''),('enablerecipe', '80', ''),('equipitem', '50', ''),('face', '80', ''),('findnpctype', '90', 'fn'),('findspell', '90', 'fs|spfind'),('findzone', '1', 'fz'),('fixmob', '150', ''),('flag', '201', ''),('flagedit', '150', ''),('flags', '80', ''),('flymode', '80', ''),('fov', '80', ''),('freeze', '100', ''),('gassign', '150', ''),('gender', '90', ''),('getplayerburiedcorpsecount', '100', ''),('getvariable', '200', ''),('ginfo', '20', ''),('giveitem', '150', 'gi'),('givemoney', '150', ''),('globalview', '80', ''),('gm', '80', ''),('gmspeed', '80', ''),('goto', '80', ''),('grid', '150', ''),('guild', '80', 'guilds'),('guildapprove', '0', ''),('guildcreate', '0', ''),('guildlist', '0', ''),('hair', '80', ''),('haircolor', '80', ''),('haste', '100', ''),('hatelist', '80', ''),('heal', '100', ''),('helm', '80', ''),('help', '0', ''),('heritage', '80', ''),('heromodel', '200', 'hm'),('hideme', '80', 'gmhideme'),('hotfix', '250', ''),('hp', '90', ''),('incstat', '200', ''),('instance', '80', ''),('interrogateinv', '0', ''),('interrupt', '50', ''),('invsnapshot', '80', ''),('invul', '80', 'invulnerable'),('ipban', '201', ''),('iplookup', '200', ''),('iteminfo', '10', ''),('itemsearch', '90', 'fi|finditem|search'),('kick', '80', ''),('kill', '80', ''),('lastname', '80', ''),('level', '150', ''),('listnpcs', '90', ''),('listpetition', '80', ''),('load_shared_memory', '250', ''),('loc', '0', ''),('lock', '200', ''),('logs', '250', ''),('logtest', '250', ''),('makepet', '150', ''),('mana', '100', ''),('maxskills', '90', ''),('memspell', '100', ''),('merchant_close_shop', '100', 'close_shop'),('merchant_open_shop', '100', 'open_shop'),('modifynpcstat', '150', ''),('motd', '200', ''),('movechar', '80', ''),('myskills', '0', ''),('mysqltest', '250', ''),('mysql', '255', ''),('mystats', '50', ''),('name', '100', ''),('netstats', '200', ''),('npccast', '90', ''),('npcedit', '150', ''),('npcemote', '80', ''),('npcloot', '150', ''),('npcsay', '80', ''),('npcshout', '90', ''),('npcspawn', '100', ''),('npcspecialattk', '150', 'npcspecialatk|npcspecialattack'),('npcstats', '90', ''),('npctype_cache', '250', ''),('npctypespawn', '90', 'dbspawn'),('nukebuffs', '100', ''),('nukeitem', '150', ''),('object', '100', ''),('oocmute', '200', ''),('opcode', '250', ''),('path', '200', ''),('peekinv', '80', ''),('peqzone', '2', ''),('permaclass', '150', ''),('permagender', '150', ''),('permarace', '150', ''),('petitioninfo', '20', ''),('pf', '0', ''),('picklock', '0', ''),('pvp', '80', ''),('qglobal', '150', ''),('questerrors', '0', ''),('race', '90', ''),('raidloot', '0', ''),('randomfeatures', '90', ''),('refreshgroup', '0', ''),('reloadaa', '200', ''),('reloadallrules', '80', ''),('reloademote', '80', ''),('reloadlevelmods', '255', ''),('reloadperlexportsettings', '255', ''),('reloadqst', '80', 'reloadquest|rq'),('reloadrulesworld', '80', ''),('reloadstatic', '150', ''),('reloadtitles', '150', ''),('reloadworld', '255', ''),('reloadzps', '150', 'reloadzonepoints'),('repop', '90', ''),('repopclose', '100', ''),('resetaa', '100', ''),('resetaa_timer', '200', ''),('revoke', '80', ''),('rules', '200', ''),('save', '80', ''),('scribespell', '90', ''),('scribespells', '100', ''),('sendzonespawns', '200', ''),('sensetrap', '0', ''),('serverinfo', '201', ''),('serverrules', '90', ''),('setaapts', '100', 'setaapoints'),('setaaxp', '100', 'setaaexp'),('setadventurepoints', '200', ''),('setanim', '200', ''),('setcrystals', '100', ''),('setfaction', '170', ''),('setgraveyard', '200', ''),('setlanguage', '50', ''),('setlsinfo', '0', ''),('setpass', '150', ''),('setpvppoints', '100', ''),('setskill', '90', ''),('setskillall', '100', 'setallskill|setallskills'),('setstartzone', '80', ''),('setstat', '255', ''),('setxp', '100', 'setexp'),('showbonusstats', '50', ''),('showbuffs', '80', ''),('shownumhits', '0', ''),('showskills', '50', ''),('showspellslist', '100', ''),('showstats', '80', ''),('shutdown', '200', ''),('size', '90', ''),('spawn', '150', ''),('spawnfix', '80', ''),('spawnstatus', '150', ''),('spellinfo', '10', ''),('spoff', '0', ''),('spon', '0', ''),('stun', '100', ''),('summon', '80', ''),('summonburiedplayercorpse', '100', ''),('summonitem', '150', 'si'),('suspend', '100', ''),('task', '150', ''),('tattoo', '80', ''),('tempname', '100', ''),('texture', '150', ''),('time', '90', ''),('timers', '200', ''),('timezone', '90', ''),('title', '100', ''),('titlesuffix', '50', ''),('traindisc', '100', ''),('tune', '100', ''),('undyeme', '0', ''),('unfreeze', '100', ''),('unlock', '150', ''),('unscribespell', '90', ''),('unscribespells', '100', ''),('untraindisc', '180', ''),('untraindiscs', '180', ''),('uptime', '10', ''),('version', '0', ''),('viewnpctype', '100', ''),('viewpetition', '80', ''),('wc', '200', ''),('weather', '90', ''),('worldshutdown', '200', ''),('wp', '150', ''),('wpadd', '150', ''),('wpinfo', '150', ''),('xtargets', '250', ''),('zclip', '150', ''),('zcolor', '150', ''),('zheader', '150', ''),('zone', '80', ''),('zonebootup', '100', ''),('zoneinstance', '80', ''),('zonelock', '200', ''),('zoneshutdown', '200', ''),('zonespawn', '250', ''),('zonestatus', '150', ''),('zopp', '250', ''),('zsafecoords', '150', ''),('zsave', '200', ''), ('zsky', '150', ''),('zstats', '80', ''),('zunderworld', '80', ''),('zuwcoords', '80', ''); diff --git a/utils/sql/git/required/2015_12_17_eqtime.sql b/utils/sql/git/required/2015_12_17_eqtime.sql deleted file mode 100644 index c264edf27..000000000 --- a/utils/sql/git/required/2015_12_17_eqtime.sql +++ /dev/null @@ -1,11 +0,0 @@ -DROP TABLE IF EXISTS `eqtime`; -CREATE TABLE `eqtime` ( - `minute` tinyint(4) not null default 0, - `hour` tinyint(4) not null default 0, - `day` tinyint(4) not null default 0, - `month` tinyint(4) not null default 0, - `year` int(4) not null default 0, - `realtime` int(11) not null default 0 -) ENGINE=MyISAM DEFAULT CHARSET=latin1; - -INSERT INTO eqtime values (0,1,28,12,3766,1444035661); \ No newline at end of file diff --git a/utils/sql/git/required/2015_12_21_items_updates_evoitem.sql b/utils/sql/git/required/2015_12_21_items_updates_evoitem.sql deleted file mode 100644 index 195df8a87..000000000 --- a/utils/sql/git/required/2015_12_21_items_updates_evoitem.sql +++ /dev/null @@ -1,8 +0,0 @@ -ALTER TABLE `items` - ADD COLUMN `evoitem` INT(11) NOT NULL DEFAULT '0' AFTER `purity`, - ADD COLUMN `evoid` INT(11) NOT NULL DEFAULT '0' AFTER `evoitem`, - ADD COLUMN `evomax` INT(11) NOT NULL DEFAULT '0' AFTER `evolvinglevel`, - CHANGE `UNK038` `skillmodmax` INT(11) NOT NULL DEFAULT '0', - CHANGE `UNK222` `heirloom` INT(11) NOT NULL DEFAULT '0', - CHANGE `UNK235` `placeable` INT(11) NOT NULL DEFAULT '0', - CHANGE `UNK242` `epicitem` INT(11) NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/utils/sql/git/required/2015_12_29_quest_zone_events.sql b/utils/sql/git/required/2015_12_29_quest_zone_events.sql deleted file mode 100644 index 783cb477e..000000000 --- a/utils/sql/git/required/2015_12_29_quest_zone_events.sql +++ /dev/null @@ -1,4 +0,0 @@ -INSERT INTO `perl_event_export_settings` (`event_id`, `event_description`, `export_qglobals`, `export_mob`, `export_zone`, `export_item`, `export_event`) VALUES (81, 'EVENT_SPAWN_ZONE', 0, 0, 0, 0, 1); -INSERT INTO `perl_event_export_settings` (`event_id`, `event_description`, `export_qglobals`, `export_mob`, `export_zone`, `export_item`, `export_event`) VALUES (82, 'EVENT_DEATH_ZONE', 0, 0, 0, 0, 1); -ALTER TABLE `rule_values` -MODIFY COLUMN `notes` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL AFTER `rule_value`; \ No newline at end of file diff --git a/utils/sql/git/required/2016_01_08_command_find_aliases.sql b/utils/sql/git/required/2016_01_08_command_find_aliases.sql deleted file mode 100644 index ad798dd6a..000000000 --- a/utils/sql/git/required/2016_01_08_command_find_aliases.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO `command_settings` VALUES ('findaliases', 0, 'fa'); diff --git a/utils/sql/git/required/2016_03_05_secondary_recall.sql b/utils/sql/git/required/2016_03_05_secondary_recall.sql deleted file mode 100644 index 7b0f02754..000000000 --- a/utils/sql/git/required/2016_03_05_secondary_recall.sql +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE `character_bind` ADD `slot` int(4) AFTER `id`; -UPDATE `character_bind` SET `slot`='0' WHERE `is_home`=0; -UPDATE `character_bind` SET `slot`='4' WHERE `is_home`=1; -ALTER TABLE `character_bind` DROP PRIMARY KEY, ADD PRIMARY KEY(`id`, `slot`); -ALTER TABLE `character_bind` DROP COLUMN `is_home`; - diff --git a/utils/sql/git/required/2016_07_03_npc_class_as_last_name.sql b/utils/sql/git/required/2016_07_03_npc_class_as_last_name.sql deleted file mode 100644 index 75f4b5296..000000000 --- a/utils/sql/git/required/2016_07_03_npc_class_as_last_name.sql +++ /dev/null @@ -1,2 +0,0 @@ -INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES -(1, 'NPC:UseClassAsLastName', 'true', 'Uses class archetype as LastName for npcs with none'); diff --git a/utils/sql/git/required/2016_08_26_object_size_tilt.sql b/utils/sql/git/required/2016_08_26_object_size_tilt.sql deleted file mode 100644 index ded4d841d..000000000 --- a/utils/sql/git/required/2016_08_26_object_size_tilt.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE `object` - ADD COLUMN `size` FLOAT NOT NULL DEFAULT '100' AFTER `unknown84`, - ADD COLUMN `tilt_x` FLOAT NOT NULL DEFAULT '0' AFTER `size`, - ADD COLUMN `tilt_y` FLOAT NOT NULL DEFAULT '0' AFTER `tilt_x`; \ No newline at end of file diff --git a/utils/sql/git/required/2016_08_27_ip_exemptions.sql b/utils/sql/git/required/2016_08_27_ip_exemptions.sql deleted file mode 100644 index 511dcd336..000000000 --- a/utils/sql/git/required/2016_08_27_ip_exemptions.sql +++ /dev/null @@ -1,14 +0,0 @@ --- IP Exemptions table structure -DROP TABLE IF EXISTS `ip_exemptions`; -CREATE TABLE `ip_exemptions` ( - `exemption_id` int(11) NOT NULL AUTO_INCREMENT, - `exemption_ip` varchar(255) DEFAULT NULL, - `exemption_amount` int(11) DEFAULT NULL, - PRIMARY KEY (`exemption_id`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; - --- Rule Value Entry, Default to false -INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES ('1', 'World:EnableIPExemptions', 'false', 'notation'); - --- Logging Category Entry -INSERT INTO `logsys_categories` (`log_category_id`, `log_category_description`, `log_to_console`, `log_to_file`, `log_to_gmsay`) VALUES ('44', 'Client Login', '1', '1', '1'); \ No newline at end of file diff --git a/utils/sql/git/required/2016_08_27_object_display_name.sql b/utils/sql/git/required/2016_08_27_object_display_name.sql deleted file mode 100644 index fbc3e90cd..000000000 --- a/utils/sql/git/required/2016_08_27_object_display_name.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `object` ADD COLUMN `display_name` VARCHAR(64); diff --git a/utils/sql/git/required/2016_12_01_pcnpc_only.sql b/utils/sql/git/required/2016_12_01_pcnpc_only.sql deleted file mode 100644 index 836730e57..000000000 --- a/utils/sql/git/required/2016_12_01_pcnpc_only.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `spells_new` CHANGE `field183` `pcnpc_only_flag` INT(11) DEFAULT 0; -ALTER TABLE `spells_new` CHANGE `field184` `cast_not_standing` INT(11) DEFAULT 0; diff --git a/utils/sql/git/required/2017_01_10_book_languages.sql b/utils/sql/git/required/2017_01_10_book_languages.sql deleted file mode 100644 index 1f51325a9..000000000 --- a/utils/sql/git/required/2017_01_10_book_languages.sql +++ /dev/null @@ -1,15 +0,0 @@ -alter table books add language int not null default 0; - -drop table if exists reading_is_fundamental; - -create table reading_is_fundamental -( -filename varchar(32), -language int -); - -insert into reading_is_fundamental (select items.filename, items.booktype from items where items.filename != "" group by filename); - -update books set books.language = (select language from reading_is_fundamental r where r.filename = books.name); - -drop table reading_is_fundamental; diff --git a/utils/sql/git/required/2017_01_30_book_languages_fix.sql b/utils/sql/git/required/2017_01_30_book_languages_fix.sql deleted file mode 100644 index 3d913b19c..000000000 --- a/utils/sql/git/required/2017_01_30_book_languages_fix.sql +++ /dev/null @@ -1,4 +0,0 @@ -UPDATE `books` SET `language` = '0' WHERE `language` IS NULL; - -ALTER TABLE `books` MODIFY COLUMN `language` INT NOT NULL DEFAULT '0'; - diff --git a/utils/sql/git/required/2017_02_09_npc_spells_entries_type_update.sql b/utils/sql/git/required/2017_02_09_npc_spells_entries_type_update.sql deleted file mode 100644 index faa46e86e..000000000 --- a/utils/sql/git/required/2017_02_09_npc_spells_entries_type_update.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `npc_spells_entries` MODIFY COLUMN `type` INT(10) UNSIGNED NOT NULL DEFAULT '0'; diff --git a/utils/sql/git/required/2017_02_15_bot_spells_entries.sql b/utils/sql/git/required/2017_02_15_bot_spells_entries.sql deleted file mode 100644 index 7f3a73d98..000000000 --- a/utils/sql/git/required/2017_02_15_bot_spells_entries.sql +++ /dev/null @@ -1,31 +0,0 @@ --- Delete any existing `bots_spells_entries` table -DROP TABLE IF EXISTS `bots_spells_entries`; - --- Create new bot spells entries table (new table does not have spells_id_spellid constraint) -CREATE TABLE `bot_spells_entries` ( - `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, - `npc_spells_id` INT(11) NOT NULL DEFAULT '0', - `spellid` SMALLINT(5) NOT NULL DEFAULT '0', - `type` INT(10) UNSIGNED NOT NULL DEFAULT '0', - `minlevel` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `maxlevel` TINYINT(3) UNSIGNED NOT NULL DEFAULT '255', - `manacost` SMALLINT(5) NOT NULL DEFAULT '-1', - `recast_delay` INT(11) NOT NULL DEFAULT '-1', - `priority` SMALLINT(5) NOT NULL DEFAULT '0', - `resist_adjust` INT(11) NULL DEFAULT NULL, - PRIMARY KEY (`id`) -) -COLLATE='latin1_swedish_ci' -ENGINE=InnoDB -AUTO_INCREMENT=1 -; - --- Copy bots spells into new table -INSERT INTO `bot_spells_entries` (`npc_spells_id`, `spellid`, `type`, `minlevel`, `maxlevel`, `manacost`, `recast_delay`, `priority`, `resist_adjust`) -SELECT `npc_spells_id`, `spellid`, `type`, `minlevel`, `maxlevel`, `manacost`, `recast_delay`, `priority`, `resist_adjust` -FROM `npc_spells_entries` WHERE `npc_spells_id` >= '701' AND `npc_spells_id` <= '712'; - --- Delete bot spells from old table -DELETE FROM `npc_spells_entries` WHERE `npc_spells_id` >= '701' AND `npc_spells_id` <= '712'; - --- Admins can remove this new table if they are 100% certain they will never use bots diff --git a/utils/sql/git/required/2017_02_26_npc_spells_update_for_bots.sql b/utils/sql/git/required/2017_02_26_npc_spells_update_for_bots.sql deleted file mode 100644 index 7632a7e1a..000000000 --- a/utils/sql/git/required/2017_02_26_npc_spells_update_for_bots.sql +++ /dev/null @@ -1,19 +0,0 @@ --- Re-ordered entries according to actual class values and added melee types (for future expansion) -DELETE FROM `npc_spells` WHERE `id` >= '701' AND `id` <= '712'; - -INSERT INTO `npc_spells` VALUES (3001, 'Warrior Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3002, 'Cleric Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3003, 'Paladin Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3004, 'Ranger Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3005, 'Shadowknight Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3006, 'Druid Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3007, 'Monk Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3008, 'Bard Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3009, 'Rogue Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3010, 'Shaman Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3011, 'Necromancer Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3012, 'Wizard Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3013, 'Magician Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3014, 'Enchanter Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3015, 'Beastlord Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO `npc_spells` VALUES (3016, 'Berserker Bot', 0, -1, 3, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); diff --git a/utils/sql/git/required/2017_03_09_inventory_version.sql b/utils/sql/git/required/2017_03_09_inventory_version.sql deleted file mode 100644 index 37ef38548..000000000 --- a/utils/sql/git/required/2017_03_09_inventory_version.sql +++ /dev/null @@ -1,11 +0,0 @@ -DROP TABLE IF EXISTS `inventory_version`; - -CREATE TABLE `inventory_version` ( - `version` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `step` INT(11) UNSIGNED NOT NULL DEFAULT '0' -) -COLLATE='latin1_swedish_ci' -ENGINE=MyISAM -; - -INSERT INTO `inventory_version` VALUES (2, 0); diff --git a/utils/sql/git/required/2017_04_07_ignore_despawn.sql b/utils/sql/git/required/2017_04_07_ignore_despawn.sql deleted file mode 100644 index 0cf264d34..000000000 --- a/utils/sql/git/required/2017_04_07_ignore_despawn.sql +++ /dev/null @@ -1 +0,0 @@ -alter table npc_types add column `ignore_despawn` tinyint(2) not null default 0; \ No newline at end of file diff --git a/utils/sql/git/required/2017_04_08_doors_disable_timer.sql b/utils/sql/git/required/2017_04_08_doors_disable_timer.sql deleted file mode 100644 index d28e13fd6..000000000 --- a/utils/sql/git/required/2017_04_08_doors_disable_timer.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `doors` ADD COLUMN `disable_timer` TINYINT(2) NOT NULL DEFAULT '0' AFTER `triggertype`; \ No newline at end of file diff --git a/utils/sql/git/required/2017_04_10_graveyard.sql b/utils/sql/git/required/2017_04_10_graveyard.sql deleted file mode 100644 index 704797b3b..000000000 --- a/utils/sql/git/required/2017_04_10_graveyard.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table graveyard drop index zone_id; -create index zone_id_nonunique on graveyard(zone_id); diff --git a/utils/sql/git/required/2017_06_24_rule_values_expand.sql b/utils/sql/git/required/2017_06_24_rule_values_expand.sql deleted file mode 100644 index 2d4720007..000000000 --- a/utils/sql/git/required/2017_06_24_rule_values_expand.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `rule_values` -MODIFY COLUMN `rule_value` varchar(30) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT '' AFTER `rule_name`; diff --git a/utils/sql/git/required/2017_06_24_saylink_index.sql b/utils/sql/git/required/2017_06_24_saylink_index.sql deleted file mode 100644 index 3dfb5c9ef..000000000 --- a/utils/sql/git/required/2017_06_24_saylink_index.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `saylink` -ADD INDEX `phrase_index` (`phrase`) USING BTREE ; \ No newline at end of file diff --git a/utils/sql/git/required/2017_07_19_show_name.sql b/utils/sql/git/required/2017_07_19_show_name.sql deleted file mode 100644 index e5bda11cf..000000000 --- a/utils/sql/git/required/2017_07_19_show_name.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE `npc_types` ADD COLUMN `show_name` TINYINT(2) NOT NULL DEFAULT 1; -ALTER TABLE `npc_types` ADD COLUMN `untargetable` TINYINT(2) NOT NULL DEFAULT 0; -UPDATE `npc_types` SET `show_name` = 0, `untargetable` = 1 WHERE `bodytype` >= 66; diff --git a/utils/sql/git/required/2017_07_22_aura.sql b/utils/sql/git/required/2017_07_22_aura.sql deleted file mode 100644 index 5ab461eaa..000000000 --- a/utils/sql/git/required/2017_07_22_aura.sql +++ /dev/null @@ -1,127 +0,0 @@ -CREATE TABLE `auras` ( - `type` INT(10) NOT NULL, - `npc_type` INT(10) NOT NULL, - `name` VARCHAR(64) NOT NULL, - `spell_id` INT(10) NOT NULL, - `distance` INT(10) NOT NULL DEFAULT 60, - `aura_type` INT(10) NOT NULL DEFAULT 1, - `spawn_type` INT(10) NOT NULL DEFAULT 0, - `movement` INT(10) NOT NULL DEFAULT 0, - `duration` INT(10) NOT NULL DEFAULT 5400, - `icon` INT(10) NOT NULL DEFAULT -1, - `cast_time` INT(10) NOT NULL DEFAULT 0, - PRIMARY KEY(`type`) -); - -CREATE TABLE `character_auras` ( - `id` INT(10) NOT NULL, - `slot` TINYINT(10) NOT NULL, - `spell_id` INT(10) NOT NULL, - PRIMARY KEY (`id`, `slot`) -); - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOAuraOfTheMuse55", lastname="", level="55", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8926, npc_type=@suggestedid, name="Aura_of_Insight", spell_id=8939, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=99, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOAuraOfTheMuse", lastname="", level="70", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8488, npc_type=@suggestedid, name="Aura_of_the_Muse", spell_id=8489, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOChampionsAura55", lastname="", level="55", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8921, npc_type=@suggestedid, name="Myrmidon's_Aura", spell_id=8935, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOChampionsAura", lastname="", level="70", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8468, npc_type=@suggestedid, name="Champion's_Aura", spell_id=8469, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOBlessedAura55", lastname="", level="55", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8925, npc_type=@suggestedid, name="Holy_Aura", spell_id=8938, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOBlessedAura", lastname="", level="70", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8481, npc_type=@suggestedid, name="Blessed_Aura", spell_id=8482, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOMastersAura55", lastname="", level="55", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8923, npc_type=@suggestedid, name="Disciples_Aura", spell_id=8937, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOMastersAura", lastname="", level="70", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8474, npc_type=@suggestedid, name="Master's_Aura", spell_id=8475, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOQuicksandTrap55", lastname="", level="55", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8933, npc_type=@suggestedid, name="Earthen_Strength", spell_id=8948, distance=60, aura_type=2, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOQuicksandTrap", lastname="", level="70", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8518, npc_type=@suggestedid, name="Rathe's_Strength", spell_id=8519, distance=60, aura_type=2, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOIllusionistsAura55", lastname="", level="55", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8931, npc_type=@suggestedid, name="Beguiler's_Aura", spell_id=8946, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOIllusionistsAura", lastname="", level="70", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8509, npc_type=@suggestedid, name="Illusionist's_Aura", spell_id=8510, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOLivingVineTrap55", lastname="", level="55", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8929, npc_type=@suggestedid, name="Aura_of_the_Grove", spell_id=8943, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=1, cast_time=12; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOLivingVineTrap", lastname="", level="70", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8499, npc_type=@suggestedid, name="Aura_of_Life", spell_id=8500, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=1, cast_time=12; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOAuraOfThePious55", lastname="", level="55", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8928, npc_type=@suggestedid, name="Aura_of_the_Zealot", spell_id=8940, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOAuraOfThePious", lastname="", level="70", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8495, npc_type=@suggestedid, name="Aura_of_the_Pious", spell_id=8496, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOBloodlustAura55", lastname="", level="55", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8924, npc_type=@suggestedid, name="Aura_of_Rage", spell_id=8959, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOBloodlustAura", lastname="", level="70", race="127", class="62", bodytype="11", hp="4027.6216", mana="0.0000", gender="0", texture="0", helmtexture="0", herosforgemodel="0", size="2", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8477, npc_type=@suggestedid, name="Bloodlust_Aura", spell_id=8478, distance=60, aura_type=1, spawn_type=0, movement=0, duration=5400, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOIdolOfMalaTrap55", lastname="", level="55", race="514", class="62", bodytype="5", hp="4027.6216", mana="0.0000", gender="2", texture="0", helmtexture="0", herosforgemodel="0", size="2.5", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8930, npc_type=@suggestedid, name="Soul_Idol", spell_id=8945, distance=60, aura_type=3, spawn_type=1, movement=1, duration=120, icon=-1, cast_time=12; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOIdolOfMalaTrap", lastname="", level="70", race="514", class="62", bodytype="5", hp="4027.6216", mana="0.0000", gender="2", texture="0", helmtexture="0", herosforgemodel="0", size="2.5", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8504, npc_type=@suggestedid, name="Spirit_Idol", spell_id=8505, distance=60, aura_type=3, spawn_type=1, movement=1, duration=120, icon=-1, cast_time=12; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IODeathRuneTrap55", lastname="", level="55", race="510", class="62", bodytype="5", hp="4027.6216", mana="0.0000", gender="2", texture="0", helmtexture="0", herosforgemodel="0", size="3", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8934, npc_type=@suggestedid, name="a_dark_rune", spell_id=8949, distance=25, aura_type=4, spawn_type=1, movement=1, duration=120, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IODeathRuneTrap", lastname="", level="70", race="510", class="62", bodytype="5", hp="4027.6216", mana="0.0000", gender="2", texture="0", helmtexture="0", herosforgemodel="0", size="3", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8523, npc_type=@suggestedid, name="a_death_rune", spell_id=8524, distance=25, aura_type=4, spawn_type=1, movement=1, duration=120, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOFireRuneTrap55", lastname="", level="55", race="510", class="62", bodytype="5", hp="4027.6216", mana="0.0000", gender="2", texture="0", helmtexture="0", herosforgemodel="0", size="3", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8932, npc_type=@suggestedid, name="a_fiery_rune", spell_id=8947, distance=25, aura_type=4, spawn_type=1, movement=1, duration=120, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOFireRuneTrap", lastname="", level="70", race="510", class="62", bodytype="5", hp="4027.6216", mana="0.0000", gender="2", texture="0", helmtexture="0", herosforgemodel="0", size="3", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8513, npc_type=@suggestedid, name="a_fire_rune", spell_id=8514, distance=25, aura_type=4, spawn_type=1, movement=1, duration=120, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOPoisonSpikesTrap55", lastname="", level="55", race="513", class="62", bodytype="5", hp="4027.6216", mana="0.0000", gender="2", texture="0", helmtexture="0", herosforgemodel="0", size="3", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8922, npc_type=@suggestedid, name="poison_spurs", spell_id=8936, distance=25, aura_type=4, spawn_type=1, movement=1, duration=120, icon=-1, cast_time=-1; - -SELECT IFNULL((MAX(id) + 1), 2000000) INTO @suggestedid FROM npc_types where id LIKE '2000___'; -INSERT INTO npc_types SET id=@suggestedid, name="IOPoisonSpikesTrap", lastname="", level="70", race="513", class="62", bodytype="5", hp="4027.6216", mana="0.0000", gender="2", texture="0", helmtexture="0", herosforgemodel="0", size="3", hp_regen_rate="0", mana_regen_rate="0", loottable_id="0", npc_spells_id="0", mindmg="52.7514", maxdmg="166.8270", attack_count="-1", special_abilities="12,1^13,1^14,1^15,1^16,1^17,1^18,1^19,1^20,1^21,1^22,1^23,1^24,1^25,1^28,1^31,1^35,1^", aggroradius="70", assistradius="0", face="0", luclin_hairstyle="0", luclin_haircolor="0", luclin_eyecolor="0", luclin_eyecolor2="0", luclin_beardcolor="0", luclin_beard="0", drakkin_heritage="0", drakkin_tattoo="0", drakkin_details="0", armortint_red="0", armortint_green="0", armortint_blue="0", d_melee_texture1="0", d_melee_texture2="0", prim_melee_type="28", sec_melee_type="28", runspeed="1.25", MR="21.1027", CR="21.1027", DR="21.1027", FR="21.1027", PR="21.1027", Corrup="21.1027", PhR="48.3333", see_invis="0", see_invis_undead="0", qglobal="0", AC="257.3784", npc_aggro="0", spawn_limit="0", attack_delay="29.4486", findable="0", STR="205.0000", STA="205.0000", DEX="205.0000", AGI="205.0000", _INT="205.0000", WIS="205.0000", CHA="205.0000", see_hide="0", see_improved_hide="0", trackable="0", ATK="0", Accuracy="0", Avoidance="0", slow_mitigation="0", version="0", maxlevel="0", scalerate="100", private_corpse="0", unique_spawn_by_name="0", underwater="0", emoteid="0", spellscale="100", healscale="100", no_target_hotkey="0", raid_target="0", light="0", ignore_despawn="0", show_name="0"; -INSERT INTO auras SET type=8471, npc_type=@suggestedid, name="Poison Spikes", spell_id=8472, distance=25, aura_type=4, spawn_type=1, movement=1, duration=120, icon=-1, cast_time=-1; -UPDATE npc_types SET special_abilities = TRIM(TRAILING '^' FROM special_abilities); - diff --git a/utils/sql/git/required/2017_10_28_traps.sql b/utils/sql/git/required/2017_10_28_traps.sql deleted file mode 100644 index dddc00d1b..000000000 --- a/utils/sql/git/required/2017_10_28_traps.sql +++ /dev/null @@ -1,4 +0,0 @@ -alter table `traps` add column `triggered_number` tinyint(4) not null default 0; -alter table `traps` add column `group` tinyint(4) not null default 0; -alter table `traps` add column `despawn_when_triggered` tinyint(4) not null default 0; -alter table `traps` add column `undetectable` tinyint(4) not null default 0; diff --git a/utils/sql/git/required/2017_12_16_GroundSpawn_Respawn_Timer.sql b/utils/sql/git/required/2017_12_16_GroundSpawn_Respawn_Timer.sql deleted file mode 100644 index f7c8b6a31..000000000 --- a/utils/sql/git/required/2017_12_16_GroundSpawn_Respawn_Timer.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `ground_spawns` MODIFY `respawn_timer` int(11) unsigned NOT NULL default 300; -UPDATE `ground_spawns` SET `respawn_timer` = `respawn_timer` / 1000; diff --git a/utils/sql/git/required/2018_02_01_NPC_Spells_Min_Max_HP.sql b/utils/sql/git/required/2018_02_01_NPC_Spells_Min_Max_HP.sql deleted file mode 100644 index b0535e25f..000000000 --- a/utils/sql/git/required/2018_02_01_NPC_Spells_Min_Max_HP.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `npc_spells_entries` ADD `min_hp` SMALLINT(5) DEFAULT '0'; -ALTER TABLE `npc_spells_entries` ADD `max_hp` SMALLINT(5) DEFAULT '0'; diff --git a/utils/sql/git/required/2018_02_04_Charm_Stats.sql b/utils/sql/git/required/2018_02_04_Charm_Stats.sql deleted file mode 100644 index 3a9164f40..000000000 --- a/utils/sql/git/required/2018_02_04_Charm_Stats.sql +++ /dev/null @@ -1,7 +0,0 @@ -ALTER TABLE `npc_types` ADD `charm_ac` SMALLINT(5) DEFAULT '0'; -ALTER TABLE `npc_types` ADD `charm_min_dmg` INT(10) DEFAULT '0'; -ALTER TABLE `npc_types` ADD `charm_max_dmg` INT(10) DEFAULT '0'; -ALTER TABLE `npc_types` ADD `charm_attack_delay` TINYINT(3) DEFAULT '0'; -ALTER TABLE `npc_types` ADD `charm_accuracy_rating` MEDIUMINT(9) DEFAULT '0'; -ALTER TABLE `npc_types` ADD `charm_avoidance_rating` MEDIUMINT(9) DEFAULT '0'; -ALTER TABLE `npc_types` ADD `charm_atk` MEDIUMINT(9) DEFAULT '0'; diff --git a/utils/sql/git/required/2018_02_10_GlobalLoot.sql b/utils/sql/git/required/2018_02_10_GlobalLoot.sql deleted file mode 100644 index 573ab8f71..000000000 --- a/utils/sql/git/required/2018_02_10_GlobalLoot.sql +++ /dev/null @@ -1,19 +0,0 @@ -ALTER TABLE `npc_types` ADD `skip_global_loot` TINYINT DEFAULT '0'; -ALTER TABLE `npc_types` ADD `rare_spawn` TINYINT DEFAULT '0'; - -CREATE TABLE global_loot ( - id INT NOT NULL AUTO_INCREMENT, - description varchar(255), - loottable_id INT NOT NULL, - enabled TINYINT NOT NULL DEFAULT 1, - min_level INT NOT NULL DEFAULT 0, - max_level INT NOT NULL DEFAULT 0, - rare TINYINT NULL, - raid TINYINT NULL, - race MEDIUMTEXT NULL, - class MEDIUMTEXT NULL, - bodytype MEDIUMTEXT NULL, - zone MEDIUMTEXT NULL, - PRIMARY KEY (id) -); - diff --git a/utils/sql/git/required/2018_02_13_Heading.sql b/utils/sql/git/required/2018_02_13_Heading.sql deleted file mode 100644 index e7869b575..000000000 --- a/utils/sql/git/required/2018_02_13_Heading.sql +++ /dev/null @@ -1,3 +0,0 @@ -UPDATE spawn2 SET heading = heading * 8.0 / 4.0; -UPDATE grid_entries SET heading = heading * 8.0 / 4.0 WHERE heading <> -1; -INSERT INTO variables (varname, value, information) VALUES ('fixed_heading', 1, 'manifest heading fix hack'); -- hack diff --git a/utils/sql/git/required/2018_02_18_bug_reports.sql b/utils/sql/git/required/2018_02_18_bug_reports.sql deleted file mode 100644 index 92afbd7c9..000000000 --- a/utils/sql/git/required/2018_02_18_bug_reports.sql +++ /dev/null @@ -1,44 +0,0 @@ -CREATE TABLE `bug_reports` ( - `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, - `zone` VARCHAR(32) NOT NULL DEFAULT 'Unknown', - `client_version_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `client_version_name` VARCHAR(24) NOT NULL DEFAULT 'Unknown', - `account_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `character_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `character_name` VARCHAR(64) NOT NULL DEFAULT 'Unknown', - `reporter_spoof` TINYINT(1) NOT NULL DEFAULT '1', - `category_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `category_name` VARCHAR(64) NOT NULL DEFAULT 'Other', - `reporter_name` VARCHAR(64) NOT NULL DEFAULT 'Unknown', - `ui_path` VARCHAR(128) NOT NULL DEFAULT 'Unknown', - `pos_x` FLOAT NOT NULL DEFAULT '0', - `pos_y` FLOAT NOT NULL DEFAULT '0', - `pos_z` FLOAT NOT NULL DEFAULT '0', - `heading` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `time_played` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `target_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `target_name` VARCHAR(64) NOT NULL DEFAULT 'Unknown', - `optional_info_mask` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `_can_duplicate` TINYINT(1) NOT NULL DEFAULT '0', - `_crash_bug` TINYINT(1) NOT NULL DEFAULT '0', - `_target_info` TINYINT(1) NOT NULL DEFAULT '0', - `_character_flags` TINYINT(1) NOT NULL DEFAULT '0', - `_unknown_value` TINYINT(1) NOT NULL DEFAULT '0', - `bug_report` VARCHAR(1024) NOT NULL DEFAULT '', - `system_info` VARCHAR(1024) NOT NULL DEFAULT '', - `report_datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - `bug_status` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', - `last_review` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `last_reviewer` VARCHAR(64) NOT NULL DEFAULT 'None', - `reviewer_notes` VARCHAR(1024) NOT NULL DEFAULT '', - PRIMARY KEY (`id`), - UNIQUE INDEX `id` (`id`) -) -COLLATE='utf8_general_ci' -ENGINE=InnoDB -; - -INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES -(1, 'Bugs:ReportingSystemActive', 'true', 'Activates bug reporting'), -(1, 'Bugs:UseOldReportingMethod', 'true', 'Forces the use of the old bug reporting system'), -(1, 'Bugs:DumpTargetEntity', 'false', 'Dumps the target entity, if one is provided'); diff --git a/utils/sql/git/required/2018_03_07_ucs_command.sql b/utils/sql/git/required/2018_03_07_ucs_command.sql deleted file mode 100644 index fdad0dda1..000000000 --- a/utils/sql/git/required/2018_03_07_ucs_command.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO `command_settings` VALUES ('ucs', '0', ''); diff --git a/utils/sql/git/required/2018_07_07_data_buckets.sql b/utils/sql/git/required/2018_07_07_data_buckets.sql deleted file mode 100644 index d2a842f64..000000000 --- a/utils/sql/git/required/2018_07_07_data_buckets.sql +++ /dev/null @@ -1,8 +0,0 @@ -CREATE TABLE `data_buckets` ( - `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT, - `key` varchar(100) DEFAULT NULL, - `value` text, - `expires` int(11) unsigned DEFAULT '0', - PRIMARY KEY (`id`), - KEY `key_index` (`key`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; \ No newline at end of file diff --git a/utils/sql/git/required/2018_07_09_tasks.sql b/utils/sql/git/required/2018_07_09_tasks.sql deleted file mode 100644 index fdc9daada..000000000 --- a/utils/sql/git/required/2018_07_09_tasks.sql +++ /dev/null @@ -1,22 +0,0 @@ -ALTER TABLE `tasks` ADD `type` TINYINT NOT NULL DEFAULT '0' AFTER `id`; -ALTER TABLE `tasks` ADD `duration_code` TINYINT NOT NULL DEFAULT '0' AFTER `duration`; -UPDATE `tasks` SET `type` = '2'; -- we were treating them all as quests -ALTER TABLE `character_tasks` ADD `type` TINYINT NOT NULL DEFAULT '0' AFTER `slot`; -UPDATE `character_tasks` SET `type` = '2'; -- we were treating them all as quests -ALTER TABLE `activities` ADD `target_name` VARCHAR(64) NOT NULL DEFAULT '' AFTER `activitytype`; -ALTER TABLE `activities` ADD `item_list` VARCHAR(128) NOT NULL DEFAULT '' AFTER `target_name`; -ALTER TABLE `activities` ADD `skill_list` VARCHAR(64) NOT NULL DEFAULT '-1' AFTER `item_list`; -ALTER TABLE `activities` ADD `spell_list` VARCHAR(64) NOT NULL DEFAULT '0' AFTER `skill_list`; -ALTER TABLE `activities` ADD `description_override` VARCHAR(128) NOT NULL DEFAULT '' AFTER `spell_list`; -ALTER TABLE `activities` ADD `zones` VARCHAR(64) NOT NULL DEFAULT '' AFTER `zoneid`; -UPDATE `activities` SET `description_override` = `text3`; -UPDATE `activities` SET `target_name` = `text1`; -UPDATE `activities` SET `item_list` = `text2`; -UPDATE `activities` SET `zones` = `zoneid`; -- should be safe for us ... -ALTER TABLE `activities` DROP COLUMN `text1`; -ALTER TABLE `activities` DROP COLUMN `text2`; -ALTER TABLE `activities` DROP COLUMN `text3`; -ALTER TABLE `activities` DROP COLUMN `zoneid`; -ALTER TABLE `tasks` DROP COLUMN `startzone`; -ALTER TABLE `tasks` ADD `faction_reward` INT(10) NOT NULL DEFAULT '0'; -RENAME TABLE `activities` TO `task_activities`; \ No newline at end of file diff --git a/utils/sql/git/required/2018_07_20_task_emote.sql b/utils/sql/git/required/2018_07_20_task_emote.sql deleted file mode 100644 index 1bccf105e..000000000 --- a/utils/sql/git/required/2018_07_20_task_emote.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `tasks` ADD `completion_emote` VARCHAR(128) NOT NULL DEFAULT ''; diff --git a/utils/sql/git/required/2018_08_13_inventory_update.sql b/utils/sql/git/required/2018_08_13_inventory_update.sql deleted file mode 100644 index 4aeee6806..000000000 --- a/utils/sql/git/required/2018_08_13_inventory_update.sql +++ /dev/null @@ -1,135 +0,0 @@ -DROP TABLE IF EXISTS `inventory_versions`; -DROP TABLE IF EXISTS `inventory_snapshots`; - - -CREATE TABLE `inventory_versions` ( - `version` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `step` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `bot_step` INT(11) UNSIGNED NOT NULL DEFAULT '0' -) -COLLATE='latin1_swedish_ci' -ENGINE=MyISAM; - -INSERT INTO `inventory_versions` VALUES (2, 0, 0); - - -CREATE TABLE `inventory_snapshots` ( - `time_index` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `charid` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `slotid` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `itemid` INT(11) UNSIGNED NULL DEFAULT '0', - `charges` SMALLINT(3) UNSIGNED NULL DEFAULT '0', - `color` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `augslot1` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augslot2` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augslot3` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augslot4` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augslot5` MEDIUMINT(7) UNSIGNED NULL DEFAULT '0', - `augslot6` MEDIUMINT(7) NOT NULL DEFAULT '0', - `instnodrop` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', - `custom_data` TEXT NULL, - `ornamenticon` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `ornamentidfile` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `ornament_hero_model` INT(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`time_index`, `charid`, `slotid`) -) -COLLATE='latin1_swedish_ci' -ENGINE=InnoDB; - - -CREATE TABLE `inventory_snapshots_v1_bak` ( - `time_index` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `charid` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `slotid` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `itemid` INT(11) UNSIGNED NULL DEFAULT '0', - `charges` SMALLINT(3) UNSIGNED NULL DEFAULT '0', - `color` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `augslot1` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augslot2` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augslot3` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augslot4` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT '0', - `augslot5` MEDIUMINT(7) UNSIGNED NULL DEFAULT '0', - `augslot6` MEDIUMINT(7) NOT NULL DEFAULT '0', - `instnodrop` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', - `custom_data` TEXT NULL, - `ornamenticon` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `ornamentidfile` INT(11) UNSIGNED NOT NULL DEFAULT '0', - `ornament_hero_model` INT(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`time_index`, `charid`, `slotid`) -) -COLLATE='latin1_swedish_ci' -ENGINE=InnoDB; - - --- create inventory v1 backup -SELECT @pre_timestamp := UNIX_TIMESTAMP(NOW()); -INSERT INTO `inventory_snapshots_v1_bak` - (`time_index`,`charid`,`slotid`,`itemid`,`charges`,`color`,`augslot1`,`augslot2`,`augslot3`,`augslot4`, - `augslot5`,`augslot6`,`instnodrop`,`custom_data`,`ornamenticon`,`ornamentidfile`,`ornament_hero_model`) -SELECT - @pre_timestamp, `charid`, `slotid`, `itemid`, `charges`, `color`, `augslot1`, `augslot2`, `augslot3`, `augslot4`, - `augslot5`,`augslot6`,`instnodrop`,`custom_data`,`ornamenticon`,`ornamentidfile`,`ornament_hero_model` -FROM `inventory`; - - --- update equipable slots in `items` table -SELECT 'pre-transform count..', -(SELECT COUNT(id) FROM `items` WHERE `slots` & (3 << 21)) total, -(SELECT COUNT(id) FROM `items` WHERE `slots` & (1 << 21)) bit21, -(SELECT COUNT(id) FROM `items` WHERE `slots` & (1 << 22)) bit22; - -UPDATE `items` SET `slots` = (`slots` ^ (3 << 21)) WHERE (`slots` & (3 << 21)) IN ((1 << 21), (1 << 22)); -- transform - -SELECT 'post-transform count..', -(SELECT COUNT(id) FROM `items` WHERE `slots` & (3 << 21)) total, -(SELECT COUNT(id) FROM `items` WHERE `slots` & (1 << 21)) bit21, -(SELECT COUNT(id) FROM `items` WHERE `slots` & (1 << 22)) bit22; - - --- update `inventory` slots -UPDATE `inventory` SET `slotid` = 33 WHERE `slotid` = 30; -- adjust cursor -UPDATE `inventory` SET `slotid` = (`slotid` + 20) WHERE `slotid` >= 331 AND `slotid` <= 340; -- adjust cursor bags -UPDATE `inventory` SET `slotid` = 30 WHERE `slotid` = 29; -- adjust general8 slot -UPDATE `inventory` SET `slotid` = 29 WHERE `slotid` = 28; -- adjust general7 slot -UPDATE `inventory` SET `slotid` = 28 WHERE `slotid` = 27; -- adjust general6 slot -UPDATE `inventory` SET `slotid` = 27 WHERE `slotid` = 26; -- adjust general5 slot -UPDATE `inventory` SET `slotid` = 26 WHERE `slotid` = 25; -- adjust general4 slot -UPDATE `inventory` SET `slotid` = 25 WHERE `slotid` = 24; -- adjust general3 slot -UPDATE `inventory` SET `slotid` = 24 WHERE `slotid` = 23; -- adjust general2 slot -UPDATE `inventory` SET `slotid` = 23 WHERE `slotid` = 22; -- adjust general1 slot --- current general bags remain the same -UPDATE `inventory` SET `slotid` = 22 WHERE `slotid` = 21; -- adjust ammo slot -UPDATE `inventory` SET `slotid` = 21 WHERE `slotid` = 9999; -- adjust powersource slot - - --- update `character_corpse_items` slots -UPDATE `character_corpse_items` SET `equip_slot` = 33 WHERE `equip_slot` = 30; -- adjust cursor -UPDATE `character_corpse_items` SET `equip_slot` = (`equip_slot` + 20) WHERE `equip_slot` >= 331 AND `equip_slot` <= 340; -- adjust cursor bags -UPDATE `character_corpse_items` SET `equip_slot` = 30 WHERE `equip_slot` = 29; -- adjust general8 slot -UPDATE `character_corpse_items` SET `equip_slot` = 29 WHERE `equip_slot` = 28; -- adjust general7 slot -UPDATE `character_corpse_items` SET `equip_slot` = 28 WHERE `equip_slot` = 27; -- adjust general6 slot -UPDATE `character_corpse_items` SET `equip_slot` = 27 WHERE `equip_slot` = 26; -- adjust general5 slot -UPDATE `character_corpse_items` SET `equip_slot` = 26 WHERE `equip_slot` = 25; -- adjust general4 slot -UPDATE `character_corpse_items` SET `equip_slot` = 25 WHERE `equip_slot` = 24; -- adjust general3 slot -UPDATE `character_corpse_items` SET `equip_slot` = 24 WHERE `equip_slot` = 23; -- adjust general2 slot -UPDATE `character_corpse_items` SET `equip_slot` = 23 WHERE `equip_slot` = 22; -- adjust general1 slot --- current general bags remain the same -UPDATE `character_corpse_items` SET `equip_slot` = 22 WHERE `equip_slot` = 21; -- adjust ammo slot -UPDATE `character_corpse_items` SET `equip_slot` = 21 WHERE `equip_slot` = 9999; -- adjust powersource slot - - --- update `character_pet_inventory` slots -UPDATE `character_pet_inventory` SET `slot` = 22 WHERE `slot` = 21; -- adjust ammo slot - -UPDATE `inventory_versions` SET `step` = 1 WHERE `version` = 2; - - --- create initial inventory v2 snapshots -SELECT @post_timestamp := UNIX_TIMESTAMP(NOW()); -INSERT INTO `inventory_snapshots` - (`time_index`,`charid`,`slotid`,`itemid`,`charges`,`color`,`augslot1`,`augslot2`,`augslot3`,`augslot4`, - `augslot5`,`augslot6`,`instnodrop`,`custom_data`,`ornamenticon`,`ornamentidfile`,`ornament_hero_model`) -SELECT - @post_timestamp, `charid`, `slotid`, `itemid`, `charges`, `color`, `augslot1`, `augslot2`, `augslot3`, `augslot4`, - `augslot5`,`augslot6`,`instnodrop`,`custom_data`,`ornamenticon`,`ornamentidfile`,`ornament_hero_model` -FROM `inventory`; diff --git a/utils/sql/git/required/2018_08_13_inventory_version_update.sql b/utils/sql/git/required/2018_08_13_inventory_version_update.sql deleted file mode 100644 index 942544544..000000000 --- a/utils/sql/git/required/2018_08_13_inventory_version_update.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS `inventory_version`; diff --git a/utils/sql/git/required/2018_09_07_FastRegen.sql b/utils/sql/git/required/2018_09_07_FastRegen.sql deleted file mode 100644 index d9c52acf7..000000000 --- a/utils/sql/git/required/2018_09_07_FastRegen.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE `zone` ADD `fast_regen_hp` INT NOT NULL DEFAULT '180'; -ALTER TABLE `zone` ADD `fast_regen_mana` INT NOT NULL DEFAULT '180'; -ALTER TABLE `zone` ADD `fast_regen_endurance` INT NOT NULL DEFAULT '180'; diff --git a/utils/sql/git/required/2018_09_07_NPCMaxAggroDist.sql b/utils/sql/git/required/2018_09_07_NPCMaxAggroDist.sql deleted file mode 100644 index 239a483a5..000000000 --- a/utils/sql/git/required/2018_09_07_NPCMaxAggroDist.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `zone` ADD `npc_max_aggro_dist` INT NOT NULL DEFAULT '600'; diff --git a/utils/sql/git/required/2018_11_25_StuckBehavior.sql b/utils/sql/git/required/2018_11_25_StuckBehavior.sql deleted file mode 100644 index 9d2e30e29..000000000 --- a/utils/sql/git/required/2018_11_25_StuckBehavior.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `npc_types` ADD COLUMN `stuck_behavior` TINYINT(4) NOT NULL DEFAULT '0' AFTER `rare_spawn`; -UPDATE `npc_types` SET `stuck_behavior`=2 WHERE `underwater`=1; diff --git a/utils/sql/git/required/2018_11_25_name_filter_update.sql b/utils/sql/git/required/2018_11_25_name_filter_update.sql deleted file mode 100644 index 51a6ca86d..000000000 --- a/utils/sql/git/required/2018_11_25_name_filter_update.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE `name_filter` -ADD COLUMN `id` INT(11) NULL AUTO_INCREMENT FIRST, -DROP PRIMARY KEY, -ADD PRIMARY KEY (`id`) USING BTREE, -ADD INDEX `name_search_index`(`name`); diff --git a/utils/sql/git/required/2018_12_12_client_faction_tables.sql b/utils/sql/git/required/2018_12_12_client_faction_tables.sql deleted file mode 100644 index 7483795be..000000000 --- a/utils/sql/git/required/2018_12_12_client_faction_tables.sql +++ /dev/null @@ -1,82 +0,0 @@ --- --- Table structure for table `client_faction_associations` --- - -DROP TABLE IF EXISTS `client_faction_associations`; - -CREATE TABLE `client_faction_associations` ( - `faction_id` int(11) NOT NULL, - `other_faction_id` int(11) NOT NULL, - `mod` int(11) DEFAULT NULL, - PRIMARY KEY (`faction_id`,`other_faction_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- --- Dumping data for table `client_faction_associations` --- - -LOCK TABLES `client_faction_associations` WRITE; -INSERT INTO `client_faction_associations` VALUES (65,51,-600),(65,52,-600),(65,53,-600),(65,54,-600),(65,55,-600),(65,56,-700),(65,57,-600),(65,58,-600),(65,59,-750),(65,60,-750),(65,61,-600),(65,62,-600),(65,178,-1000),(65,180,-600),(65,661,-600),(65,1106,-600),(106,51,-50),(106,52,-50),(106,56,-500),(106,57,-50),(106,59,-750),(106,60,-750),(106,62,-50),(106,178,-750),(106,180,-50),(106,661,-50),(106,1106,-50),(121,9,-200),(121,56,-200),(121,59,-625),(121,60,-625),(121,178,-725),(217,51,-500),(217,52,-500),(217,53,-500),(217,54,-500),(217,55,-500),(217,56,-500),(217,57,-500),(217,58,-500),(217,59,-500),(217,60,-500),(217,61,-500),(217,62,-500),(217,180,-500),(217,203,-500),(217,661,-500),(217,1106,-500),(218,51,-1000),(218,52,-1000),(218,53,-1000),(218,54,-1000),(218,55,-1000),(218,56,-1000),(218,57,-1000),(218,58,-1000),(218,59,-1000),(218,60,-1000),(218,61,-1000),(218,62,-1000),(218,178,-1000),(218,180,-1000),(218,201,-1000),(218,202,-1000),(218,204,-1000),(218,205,-1000),(218,206,-1000),(218,207,-1000),(218,208,-1000),(218,209,-1000),(218,210,-1000),(218,211,-1000),(218,212,-1000),(218,213,-1000),(218,214,-1000),(218,215,-1000),(218,216,-1000),(218,661,-1000),(218,1106,-1000),(219,56,-200),(219,59,-375),(219,60,-375),(219,178,-375),(220,5,-200),(220,11,-200),(220,12,50),(220,13,50),(220,14,50),(220,51,50),(220,52,-50),(220,54,-50),(220,56,-300),(220,57,50),(220,58,-150),(220,59,-750),(220,60,-750),(220,61,-50),(220,178,-1000),(220,180,-50),(220,201,-200),(220,202,-50),(220,203,-300),(220,205,-50),(220,206,-200),(220,211,-300),(220,213,25),(220,216,-300),(220,661,50),(220,1106,50),(221,3,-750),(221,4,-300),(221,5,50),(221,6,-200),(221,9,-25),(221,11,50),(221,51,50),(221,52,-300),(221,53,-25),(221,54,-300),(221,55,-300),(221,56,-50),(221,57,50),(221,58,-300),(221,59,-300),(221,60,-250),(221,61,-300),(221,62,-25),(221,178,-300),(221,180,-300),(221,201,100),(221,202,-750),(221,203,-15),(221,204,-750),(221,205,-750),(221,206,-15),(221,207,-750),(221,208,-750),(221,209,-750),(221,210,-750),(221,211,-750),(221,212,-750),(221,213,-750),(221,214,-750),(221,215,-750),(221,216,-750),(221,661,50),(221,1106,50),(222,51,-750),(222,52,-750),(222,53,-750),(222,54,-750),(222,55,-750),(222,56,-400),(222,57,-750),(222,58,-750),(222,59,50),(222,60,-200),(222,61,-750),(222,62,-750),(222,178,-750),(222,180,-750),(222,201,50),(222,203,50),(222,206,50),(222,661,-750),(222,1106,-750),(223,3,-100),(223,4,-100),(223,5,-50),(223,6,-100),(223,7,-100),(223,8,-25),(223,9,50),(223,10,-100),(223,11,-50),(223,12,-100),(223,13,-100),(223,14,-100),(223,15,-100),(223,51,50),(223,52,-25),(223,53,-75),(223,54,-50),(223,55,-300),(223,56,-50),(223,57,50),(223,58,-150),(223,59,-750),(223,60,-500),(223,61,-50),(223,62,-75),(223,178,-750),(223,180,-25),(223,202,-100),(223,203,-300),(223,204,-100),(223,205,50),(223,206,-200),(223,208,-100),(223,209,-100),(223,210,-100),(223,211,-100),(223,213,-100),(223,214,-200),(223,215,-100),(223,216,-200),(223,661,50),(223,1106,50),(225,51,-875),(225,52,-875),(225,53,-875),(225,54,-875),(225,55,-875),(225,56,-875),(225,57,-875),(225,58,-875),(225,59,-625),(225,60,-625),(225,61,-875),(225,62,-875),(225,178,-875),(225,180,-875),(225,661,-875),(225,1106,-875),(226,5,-200),(226,11,-200),(226,56,-50),(226,59,-100),(226,60,-100),(226,62,-10),(226,178,-200),(226,201,-200),(226,203,-200),(226,206,-200),(226,207,10),(226,215,100),(226,216,-100),(227,5,-200),(227,11,-200),(227,51,-10),(227,52,-10),(227,54,-10),(227,55,-10),(227,56,-100),(227,57,-10),(227,59,-100),(227,60,-100),(227,178,-200),(227,180,-10),(227,201,-200),(227,202,100),(227,203,-200),(227,205,10),(227,206,-200),(227,216,-200),(227,661,-10),(227,1106,-10),(228,51,-750),(228,52,-750),(228,54,-750),(228,55,-750),(228,56,-25),(228,57,-750),(228,59,-1000),(228,61,-750),(228,62,-750),(228,178,-1000),(228,180,-750),(228,661,-750),(228,1106,-750),(229,9,-200),(229,56,-200),(229,59,-375),(229,60,-375),(229,178,-375),(230,3,-100),(230,4,-100),(230,6,-100),(230,7,-100),(230,9,-10),(230,10,-100),(230,11,-50),(230,15,-100),(230,51,50),(230,52,-50),(230,53,-150),(230,54,-200),(230,55,-200),(230,56,-150),(230,58,-200),(230,59,-850),(230,60,-750),(230,61,-150),(230,62,-50),(230,178,-1000),(230,180,-50),(230,201,50),(230,202,-25),(230,203,-25),(230,204,-25),(230,205,-25),(230,207,-25),(230,208,-25),(230,209,-25),(230,210,-25),(230,211,-25),(230,212,-25),(230,213,-25),(230,214,-100),(230,215,-25),(230,661,50),(230,1106,50),(231,1,-50),(231,4,-50),(231,5,-200),(231,6,-50),(231,7,-50),(231,8,-50),(231,9,-50),(231,10,-50),(231,11,-200),(231,14,50),(231,15,-50),(231,16,-50),(231,51,-100),(231,52,-100),(231,53,50),(231,54,-100),(231,55,-50),(231,56,-300),(231,57,-100),(231,58,-150),(231,59,-750),(231,60,-750),(231,61,-100),(231,62,-100),(231,178,-750),(231,180,-100),(231,201,-200),(231,202,-100),(231,203,-300),(231,204,-50),(231,205,-100),(231,206,-200),(231,207,-50),(231,208,-50),(231,211,-300),(231,212,-50),(231,213,-50),(231,214,-50),(231,215,-50),(231,216,-300),(231,661,-100),(231,1106,-100),(232,1,50),(232,5,-50),(232,51,-501),(232,52,-750),(232,53,-501),(232,54,-750),(232,55,-750),(232,56,-10),(232,57,-750),(232,58,-1000),(232,59,-499),(232,60,50),(232,61,-750),(232,62,-501),(232,178,-750),(232,180,-750),(232,201,-50),(232,202,-500),(232,203,50),(232,204,-500),(232,205,-500),(232,207,-500),(232,208,-500),(232,209,-500),(232,210,-500),(232,211,50),(232,212,-500),(232,213,-500),(232,214,-100),(232,215,-500),(232,661,-501),(232,1106,-501),(233,1,-50),(233,4,-50),(233,5,-200),(233,6,-50),(233,7,-50),(233,8,-50),(233,9,-50),(233,10,-50),(233,11,-200),(233,12,50),(233,15,-50),(233,16,-50),(233,51,-100),(233,52,-100),(233,53,50),(233,54,-100),(233,55,-25),(233,56,-300),(233,57,-100),(233,58,-150),(233,59,-750),(233,60,-750),(233,61,-100),(233,62,-15),(233,178,-750),(233,180,-100),(233,201,-200),(233,202,-50),(233,203,-300),(233,204,-50),(233,205,-50),(233,206,-200),(233,207,-50),(233,208,-50),(233,211,-50),(233,212,-50),(233,214,-50),(233,215,-50),(233,216,-300),(233,661,-100),(233,1106,-100),(234,51,-750),(234,52,-750),(234,53,-750),(234,54,-1000),(234,55,-1000),(234,56,-490),(234,57,-750),(234,58,-750),(234,59,-750),(234,60,-750),(234,61,-750),(234,62,-750),(234,178,-750),(234,180,-750),(234,661,-750),(234,1106,-750),(235,1,50),(235,5,-200),(235,51,-1000),(235,52,-1000),(235,53,-1000),(235,54,-1000),(235,55,-1000),(235,56,-250),(235,57,-1000),(235,58,-1000),(235,59,50),(235,60,-200),(235,61,-1000),(235,62,-1000),(235,178,-1000),(235,180,-1000),(235,201,-100),(235,202,-200),(235,203,50),(235,204,-100),(235,205,-100),(235,206,50),(235,207,-100),(235,208,-100),(235,209,-100),(235,210,-100),(235,211,100),(235,212,-100),(235,213,-100),(235,214,-50),(235,215,-200),(235,661,-1000),(235,1106,-1000),(236,3,-600),(236,4,-600),(236,5,50),(236,6,-600),(236,7,-10),(236,8,-10),(236,9,-25),(236,10,-10),(236,11,50),(236,15,-10),(236,16,-10),(236,51,-50),(236,52,-50),(236,53,-10),(236,54,-90),(236,55,-99),(236,56,50),(236,57,-75),(236,58,-50),(236,59,-50),(236,60,-50),(236,61,-50),(236,62,-50),(236,178,-50),(236,180,-50),(236,202,-200),(236,204,-200),(236,205,-10),(236,206,50),(236,207,-200),(236,208,-200),(236,209,-50),(236,210,-300),(236,212,-50),(236,214,-200),(236,215,-300),(236,661,-50),(236,1106,-50),(237,3,-1000),(237,4,-1000),(237,5,50),(237,6,-1000),(237,11,25),(237,51,-500),(237,52,-750),(237,53,-500),(237,54,-750),(237,55,-750),(237,56,-50),(237,57,-750),(237,58,-750),(237,59,50),(237,60,-500),(237,61,-750),(237,62,-500),(237,178,-750),(237,180,-750),(237,201,-50),(237,202,-600),(237,203,50),(237,204,-600),(237,205,-600),(237,206,50),(237,207,-600),(237,208,-600),(237,209,-600),(237,210,-600),(237,211,-50),(237,212,-600),(237,213,-600),(237,214,-600),(237,215,-600),(237,216,-300),(237,661,-500),(237,1106,-500),(238,3,-200),(238,4,-200),(238,5,50),(238,9,50),(238,11,50),(238,12,50),(238,13,50),(238,14,50),(238,51,-25),(238,52,-50),(238,53,-10),(238,54,-50),(238,55,-100),(238,57,-75),(238,58,-100),(238,59,-75),(238,60,-50),(238,61,-100),(238,62,50),(238,178,-150),(238,180,-50),(238,201,100),(238,202,-100),(238,203,25),(238,204,-100),(238,205,-100),(238,206,25),(238,207,-100),(238,208,-100),(238,209,-100),(238,210,-200),(238,212,-450),(238,213,-50),(238,214,-200),(238,215,-300),(238,216,25),(238,661,-25),(238,1106,-25),(239,3,-750),(239,4,-500),(239,5,50),(239,6,-500),(239,11,50),(239,12,-200),(239,13,-200),(239,14,-200),(239,51,-50),(239,52,-100),(239,53,-25),(239,54,-500),(239,55,-500),(239,56,50),(239,57,-500),(239,58,-500),(239,59,-400),(239,60,-450),(239,61,-100),(239,62,-100),(239,178,-500),(239,180,-100),(239,201,-25),(239,202,-200),(239,203,-25),(239,204,-200),(239,205,-200),(239,206,50),(239,207,-200),(239,208,-200),(239,209,-200),(239,210,-200),(239,211,-100),(239,212,-200),(239,213,-200),(239,214,-200),(239,215,-750),(239,216,-200),(239,661,-50),(239,1106,-50),(240,1,50),(240,2,50),(240,3,50),(240,5,-200),(240,9,50),(240,11,-200),(240,16,50),(240,51,-50),(240,52,-50),(240,53,-50),(240,55,-50),(240,56,-250),(240,59,-500),(240,60,-450),(240,62,50),(240,178,-500),(240,180,-50),(240,201,-200),(240,202,100),(240,205,100),(240,206,-200),(240,209,50),(240,216,50),(240,661,-50),(240,1106,-50),(241,3,-50),(241,5,-50),(241,9,50),(241,11,-25),(241,51,-50),(241,52,-50),(241,53,-75),(241,54,-25),(241,55,-75),(241,56,-200),(241,57,-50),(241,58,-50),(241,59,-800),(241,60,-600),(241,61,50),(241,62,-25),(241,178,-800),(241,180,-50),(241,201,-50),(241,205,25),(241,206,-100),(241,208,-25),(241,210,10),(241,214,-100),(241,216,-75),(241,661,-50),(241,1106,-50),(242,3,50),(242,5,-200),(242,9,-50),(242,11,-200),(242,51,-150),(242,52,-200),(242,53,50),(242,54,-50),(242,55,-30),(242,56,-500),(242,57,-140),(242,58,-300),(242,59,-750),(242,60,-750),(242,61,-150),(242,62,-40),(242,178,-1000),(242,180,-200),(242,201,-200),(242,203,-200),(242,206,-200),(242,209,100),(242,661,-150),(242,1106,-150),(243,5,-200),(243,11,-200),(243,56,-100),(243,59,-100),(243,60,-100),(243,178,-100),(244,3,-500),(244,4,-200),(244,6,-200),(244,7,-200),(244,9,50),(244,11,50),(244,51,-200),(244,52,-300),(244,53,-300),(244,54,-600),(244,55,-600),(244,56,50),(244,57,-600),(244,58,-600),(244,59,-100),(244,60,-150),(244,61,-600),(244,62,-150),(244,178,-600),(244,180,-300),(244,201,25),(244,202,-150),(244,203,25),(244,204,-600),(244,205,25),(244,206,50),(244,207,-600),(244,208,-600),(244,209,-600),(244,210,-600),(244,212,-300),(244,213,-25),(244,214,-600),(244,215,-600),(244,216,-25),(244,661,-200),(244,1106,-200),(245,1,-25),(245,2,-25),(245,3,-25),(245,4,-25),(245,5,-200),(245,6,-25),(245,7,-25),(245,8,-25),(245,9,-100),(245,10,-25),(245,11,-50),(245,12,50),(245,13,50),(245,14,50),(245,15,-25),(245,16,-25),(245,51,-25),(245,52,-50),(245,53,-25),(245,54,-25),(245,55,-25),(245,56,-500),(245,57,-25),(245,58,-25),(245,59,-800),(245,60,-750),(245,61,-10),(245,62,50),(245,178,-800),(245,180,-50),(245,201,-200),(245,202,50),(245,203,-300),(245,206,-300),(245,213,50),(245,661,-25),(245,1106,-25),(246,4,50),(246,5,-200),(246,11,-200),(246,51,-10),(246,52,-10),(246,54,50),(246,55,50),(246,56,-750),(246,57,50),(246,58,-25),(246,59,-750),(246,60,-750),(246,61,-10),(246,62,-10),(246,178,-750),(246,180,-10),(246,201,-300),(246,203,-400),(246,206,-600),(246,215,50),(246,661,-10),(246,1106,-10),(247,3,-1000),(247,4,-1000),(247,6,-1000),(247,51,-1000),(247,52,-1000),(247,53,-1000),(247,54,-1000),(247,55,-1000),(247,56,-1000),(247,57,-1000),(247,58,-1000),(247,59,-1000),(247,60,-1000),(247,61,-1000),(247,62,-1000),(247,178,-1000),(247,180,-1000),(247,661,-1000),(247,1106,-1000),(248,5,-1000),(248,11,-1000),(248,51,-25),(248,52,-50),(248,53,-50),(248,56,-1000),(248,58,-25),(248,59,-1000),(248,60,-1000),(248,61,-10),(248,62,-10),(248,178,-1000),(248,180,-50),(248,201,-1000),(248,203,-1000),(248,206,-1000),(248,209,50),(248,211,-25),(248,215,50),(248,216,-25),(248,661,-25),(248,1106,-25),(249,51,-2000),(249,52,-2000),(249,53,-2000),(249,54,-2000),(249,55,-2000),(249,56,-2000),(249,57,-2000),(249,58,-2000),(249,59,-2000),(249,60,-2000),(249,61,-2000),(249,62,-2000),(249,178,-1000),(249,180,-2000),(249,661,-2000),(249,1106,-2000),(250,51,-1000),(250,52,-1000),(250,53,-1000),(250,54,-1000),(250,55,-1000),(250,56,-1000),(250,57,-1000),(250,58,-1000),(250,59,-1000),(250,60,-1000),(250,61,-1000),(250,62,-1000),(250,178,-1000),(250,180,-1000),(250,661,-1000),(250,1106,-1000),(251,51,-499),(251,52,-499),(251,53,-499),(251,54,-499),(251,55,-499),(251,56,-650),(251,57,-499),(251,58,-499),(251,59,-1000),(251,60,-750),(251,61,-499),(251,62,-499),(251,178,-1000),(251,180,-499),(251,201,-1000),(251,203,-1000),(251,206,-1000),(251,211,-250),(251,661,-499),(251,1106,-499),(252,51,-1000),(252,52,-1000),(252,53,-1000),(252,54,-1000),(252,55,-1000),(252,56,-1000),(252,57,-1000),(252,58,-1000),(252,59,-1000),(252,60,-1000),(252,61,-1000),(252,62,-1000),(252,178,-1000),(252,180,-1000),(252,661,-1000),(252,1106,-1000),(253,51,-1000),(253,52,-1000),(253,53,-1000),(253,54,-1000),(253,55,-1000),(253,56,-1000),(253,57,-1000),(253,58,-1000),(253,59,-1000),(253,60,-1000),(253,61,-1000),(253,62,-1000),(253,178,-1000),(253,180,-1000),(253,661,-1000),(253,1106,-1000),(254,1,-50),(254,2,-50),(254,3,-50),(254,4,-50),(254,5,-200),(254,6,-50),(254,7,-50),(254,8,-50),(254,9,-50),(254,10,-50),(254,11,-200),(254,13,50),(254,15,-50),(254,16,-50),(254,51,-50),(254,52,-100),(254,53,50),(254,54,-50),(254,55,-10),(254,56,-500),(254,57,-25),(254,58,-150),(254,59,-750),(254,60,-750),(254,61,-100),(254,62,-25),(254,178,-750),(254,180,-100),(254,201,-200),(254,202,-50),(254,203,-300),(254,204,-50),(254,205,-50),(254,206,-200),(254,207,-50),(254,208,-50),(254,211,-50),(254,212,-50),(254,213,-50),(254,214,-50),(254,215,-50),(254,216,-150),(254,661,-50),(254,1106,-50),(255,1,50),(255,3,50),(255,4,50),(255,5,-200),(255,6,50),(255,11,-200),(255,16,50),(255,51,-50),(255,52,-100),(255,53,-50),(255,54,-25),(255,55,-50),(255,56,-500),(255,57,-50),(255,58,-25),(255,59,-850),(255,60,-750),(255,61,-10),(255,62,50),(255,178,-1000),(255,180,-100),(255,201,-200),(255,202,50),(255,203,-400),(255,204,-10),(255,205,50),(255,206,-400),(255,207,-10),(255,208,-10),(255,209,-10),(255,210,-10),(255,211,50),(255,212,-10),(255,213,-10),(255,214,-10),(255,215,-10),(255,216,-10),(255,661,-50),(255,1106,-50),(256,51,-1000),(256,52,-1000),(256,53,-1000),(256,54,-1000),(256,55,-1000),(256,56,-1000),(256,57,-1000),(256,58,-1000),(256,59,-1000),(256,60,-1000),(256,61,-1000),(256,62,-1000),(256,178,-1000),(256,180,-1000),(256,661,-1000),(256,1106,-1000),(257,51,-1000),(257,52,-1000),(257,53,-1000),(257,54,-1000),(257,55,-1000),(257,56,-1000),(257,57,-1000),(257,58,-1000),(257,59,-1000),(257,60,-1000),(257,61,-1000),(257,62,-1000),(257,178,-1000),(257,180,-1000),(257,661,-1000),(257,1106,-1000),(258,51,-1000),(258,52,-1000),(258,53,-1000),(258,54,-1000),(258,55,-1000),(258,56,-1000),(258,57,-1000),(258,58,-1000),(258,59,-1000),(258,60,-1000),(258,61,-1000),(258,62,-1000),(258,178,-1000),(258,180,-1000),(258,661,-1000),(258,1106,-1000),(259,51,-1000),(259,52,-1000),(259,53,-1000),(259,54,-1000),(259,55,-1000),(259,56,-1000),(259,57,-1000),(259,58,-1000),(259,59,-1000),(259,60,-1000),(259,61,-1000),(259,62,-1000),(259,178,-1000),(259,180,-1000),(259,661,-1000),(259,1106,-1000),(261,1,-25),(261,5,50),(261,51,-750),(261,52,-750),(261,53,-900),(261,54,-750),(261,55,-750),(261,56,-250),(261,57,-750),(261,58,-1000),(261,59,-350),(261,60,50),(261,61,-750),(261,62,-750),(261,178,-750),(261,180,-750),(261,203,50),(261,211,75),(261,661,-750),(261,1106,-750),(262,3,25),(262,4,10),(262,5,-200),(262,6,10),(262,7,10),(262,9,-50),(262,11,-200),(262,52,-75),(262,53,-100),(262,54,-50),(262,55,-50),(262,56,-300),(262,57,-25),(262,58,-75),(262,59,-1000),(262,60,-750),(262,61,-25),(262,62,-50),(262,178,-1000),(262,180,-75),(262,201,-200),(262,203,-300),(262,205,-100),(262,206,-200),(262,207,50),(262,212,50),(262,214,50),(262,216,-150),(263,1,50),(263,3,25),(263,4,25),(263,5,-300),(263,6,50),(263,11,-300),(263,16,50),(263,51,-15),(263,52,-25),(263,53,-25),(263,55,-25),(263,56,-300),(263,57,-10),(263,58,-5),(263,59,-750),(263,60,-700),(263,61,50),(263,178,-1000),(263,180,-25),(263,201,-400),(263,202,25),(263,203,-300),(263,205,25),(263,206,-300),(263,207,25),(263,210,25),(263,211,50),(263,212,15),(263,215,15),(263,661,-15),(263,1106,-15),(264,5,-1000),(264,7,50),(264,11,-1000),(264,51,-50),(264,52,-50),(264,53,-50),(264,54,-50),(264,55,-50),(264,56,-1000),(264,57,-50),(264,58,-50),(264,59,-1000),(264,60,-1000),(264,61,-50),(264,62,-50),(264,178,-1000),(264,180,-50),(264,201,-1000),(264,203,-1000),(264,206,-1000),(264,211,-25),(264,216,-10),(264,661,-50),(264,1106,-50),(265,3,-200),(265,4,-200),(265,6,-200),(265,7,-100),(265,8,-100),(265,12,-200),(265,13,-200),(265,14,-200),(265,51,-500),(265,52,-500),(265,54,-500),(265,55,-500),(265,56,-50),(265,57,-500),(265,58,-500),(265,59,-800),(265,60,-800),(265,61,-500),(265,62,-500),(265,178,-800),(265,180,-500),(265,201,-50),(265,202,-475),(265,203,100),(265,204,-475),(265,205,-475),(265,206,-475),(265,207,-475),(265,208,-475),(265,209,-475),(265,210,-475),(265,211,-25),(265,212,-475),(265,213,-475),(265,214,-475),(265,215,-475),(265,216,-475),(265,661,-500),(265,1106,-500),(266,5,-200),(266,9,-50),(266,11,-200),(266,51,-1),(266,52,-1),(266,54,-1),(266,55,-1),(266,56,-500),(266,57,-1),(266,59,-500),(266,60,-500),(266,61,-1),(266,62,-1),(266,178,-600),(266,180,-1),(266,201,-100),(266,203,-100),(266,206,-200),(266,661,-1),(266,1106,-1),(267,5,-200),(267,9,-50),(267,11,-200),(267,51,-25),(267,52,-50),(267,53,50),(267,54,-25),(267,55,-25),(267,56,-500),(267,57,-25),(267,58,-200),(267,59,-625),(267,60,-625),(267,61,-50),(267,62,-25),(267,178,-725),(267,180,-50),(267,201,-100),(267,203,-100),(267,206,-200),(267,661,-25),(267,1106,-25),(269,4,50),(269,5,-550),(269,11,-550),(269,56,-450),(269,59,-1000),(269,60,-750),(269,178,-1000),(269,201,-450),(269,203,-450),(269,206,-450),(269,207,50),(269,211,-150),(269,215,50),(270,1,50),(270,3,-600),(270,4,-600),(270,5,-50),(270,6,-600),(270,16,50),(270,51,-500),(270,52,-500),(270,53,-125),(270,54,-750),(270,55,-750),(270,56,50),(270,57,-50),(270,58,-500),(270,59,-250),(270,60,-350),(270,61,-500),(270,62,-150),(270,178,-1000),(270,180,-500),(270,201,25),(270,202,-300),(270,203,25),(270,204,-600),(270,205,-150),(270,206,50),(270,207,-400),(270,208,-400),(270,209,-100),(270,210,-300),(270,211,50),(270,212,-200),(270,213,-50),(270,214,-500),(270,215,-600),(270,216,25),(270,661,-500),(270,1106,-500),(271,3,-200),(271,4,-200),(271,5,50),(271,6,-200),(271,11,50),(271,51,50),(271,52,-30),(271,53,25),(271,54,-175),(271,55,-200),(271,56,25),(271,57,50),(271,58,-150),(271,59,-75),(271,60,-25),(271,61,-175),(271,62,-25),(271,178,-375),(271,180,-30),(271,201,50),(271,202,-100),(271,203,25),(271,204,-100),(271,205,-100),(271,206,100),(271,207,-100),(271,208,-100),(271,209,-200),(271,210,-200),(271,211,-25),(271,212,-100),(271,213,-50),(271,214,-300),(271,215,-200),(271,216,25),(271,661,50),(271,1106,50),(272,5,-200),(272,6,50),(272,9,-100),(272,11,-200),(272,51,50),(272,52,-200),(272,53,-200),(272,54,25),(272,55,-50),(272,56,-400),(272,57,50),(272,58,-200),(272,59,-850),(272,60,-750),(272,62,-100),(272,178,-1000),(272,180,-200),(272,201,-550),(272,202,-50),(272,203,-400),(272,204,-50),(272,205,-50),(272,206,-400),(272,207,100),(272,208,-50),(272,209,-50),(272,210,-50),(272,211,-150),(272,212,-50),(272,213,-50),(272,214,-50),(272,215,100),(272,216,-200),(272,661,50),(272,1106,50),(273,56,-200),(273,59,-375),(273,60,-375),(273,178,-275),(274,5,-200),(274,11,-200),(274,51,-10),(274,52,-5),(274,54,-10),(274,55,-10),(274,56,-500),(274,57,-10),(274,59,-750),(274,60,-750),(274,61,-10),(274,62,-10),(274,178,-1000),(274,180,-5),(274,661,-10),(274,1106,-10),(275,5,-200),(275,11,-200),(275,12,50),(275,13,50),(275,14,50),(275,51,-10),(275,52,-75),(275,55,50),(275,56,-1000),(275,57,-10),(275,58,-75),(275,59,-750),(275,60,-750),(275,61,-10),(275,62,-25),(275,178,-1000),(275,180,-75),(275,201,-200),(275,203,-200),(275,204,25),(275,206,-400),(275,207,25),(275,208,25),(275,213,50),(275,214,75),(275,661,-10),(275,1106,-10),(276,3,20),(276,4,30),(276,5,-200),(276,6,30),(276,9,-10),(276,11,-200),(276,51,-50),(276,52,-75),(276,53,-20),(276,54,100),(276,55,80),(276,56,-750),(276,58,-75),(276,59,-750),(276,60,-750),(276,61,-25),(276,62,-50),(276,178,-750),(276,180,-75),(276,201,-100),(276,203,-100),(276,204,10),(276,206,-100),(276,208,10),(276,210,20),(276,212,25),(276,215,50),(276,216,-50),(276,661,-50),(276,1106,-50),(277,4,50),(277,5,-200),(277,6,50),(277,11,-200),(277,51,-450),(277,52,-450),(277,53,-600),(277,54,-300),(277,55,-300),(277,56,-500),(277,57,-300),(277,58,-450),(277,59,-850),(277,60,-500),(277,61,-300),(277,62,-500),(277,178,-1000),(277,180,-450),(277,201,-200),(277,203,-200),(277,205,50),(277,206,-200),(277,209,-200),(277,213,-200),(277,215,50),(277,661,-450),(277,1106,-450),(278,3,-200),(278,4,-200),(278,51,-500),(278,52,-500),(278,54,-750),(278,55,-750),(278,57,-500),(278,59,-1),(278,60,-1),(278,61,-500),(278,62,-500),(278,178,-750),(278,180,-500),(278,661,-500),(278,1106,-500),(279,5,-200),(279,11,-200),(279,51,-1),(279,52,-1),(279,56,-1000),(279,57,-1),(279,59,-750),(279,60,-750),(279,61,-1),(279,62,-1),(279,178,-1000),(279,180,-1),(279,661,-1),(279,1106,-1),(280,3,50),(280,5,-200),(280,9,-50),(280,11,-200),(280,51,50),(280,56,-300),(280,57,50),(280,59,-1000),(280,60,-700),(280,178,-1000),(280,201,-200),(280,203,-200),(280,206,-200),(280,207,100),(280,212,25),(280,215,10),(280,216,-25),(280,661,50),(280,1106,50),(281,3,50),(281,4,25),(281,5,-200),(281,6,25),(281,7,10),(281,9,-100),(281,11,-200),(281,52,-10),(281,56,-350),(281,58,-10),(281,59,-750),(281,60,-750),(281,178,-1000),(281,180,-10),(281,201,-200),(281,203,-200),(281,204,50),(281,206,-200),(281,207,10),(281,208,100),(281,212,25),(281,214,50),(281,216,-100),(282,51,-1000),(282,52,-1000),(282,53,-1000),(282,54,-1000),(282,55,-1000),(282,56,-1000),(282,57,-1000),(282,58,-1000),(282,59,-1000),(282,60,-1000),(282,61,-1000),(282,62,-1000),(282,178,-1000),(282,180,-1000),(282,661,-1000),(282,1106,-1000),(283,51,-1000),(283,52,-1000),(283,53,-1000),(283,54,-1000),(283,55,-1000),(283,56,-1000),(283,57,-1000),(283,58,-1000),(283,59,-1000),(283,60,-1000),(283,61,-1000),(283,62,-1000),(283,178,-1000),(283,180,-1000),(283,661,-1000),(283,1106,-1000),(284,5,-25),(284,8,100),(284,9,25),(284,11,-25),(284,51,50),(284,52,-25),(284,54,25),(284,56,-50),(284,57,50),(284,58,-25),(284,59,-600),(284,60,-550),(284,178,-600),(284,180,-25),(284,201,-200),(284,203,-200),(284,204,50),(284,205,50),(284,206,-200),(284,207,50),(284,209,50),(284,211,-25),(284,215,50),(284,216,-50),(284,661,50),(284,1106,50),(285,51,-2000),(285,52,-2000),(285,53,-2000),(285,54,-2000),(285,55,-2000),(285,56,-2000),(285,57,-2000),(285,58,-2000),(285,59,-2000),(285,60,-2000),(285,61,-2000),(285,62,-2000),(285,178,-1000),(285,180,-2000),(285,661,-2000),(285,1106,-2000),(286,61,375),(286,201,-100),(286,203,-100),(286,206,-200),(287,51,-1000),(287,52,-1000),(287,54,-1000),(287,55,-1000),(287,56,-1000),(287,57,-1000),(287,59,-1000),(287,60,-1000),(287,61,-1000),(287,62,-1000),(287,178,-1000),(287,180,-1000),(287,661,-1000),(287,1106,-1000),(288,5,-50),(288,9,-50),(288,11,-50),(288,51,-50),(288,52,-50),(288,53,-25),(288,54,-50),(288,55,-50),(288,56,-99),(288,57,-50),(288,58,-75),(288,59,-750),(288,60,-750),(288,61,-10),(288,62,50),(288,178,-750),(288,180,-50),(288,201,-25),(288,203,-25),(288,206,-25),(288,211,-25),(288,661,-50),(288,1106,-50),(289,3,10),(289,5,-200),(289,9,-50),(289,11,-200),(289,51,-50),(289,52,-75),(289,54,-60),(289,55,-25),(289,56,-99),(289,57,-60),(289,59,-750),(289,60,-500),(289,61,-60),(289,62,-60),(289,178,-750),(289,180,-75),(289,661,-50),(289,1106,-50),(290,3,10),(290,5,-200),(290,9,-50),(290,11,-200),(290,12,-10),(290,13,-10),(290,14,-10),(290,51,-50),(290,52,50),(290,53,-80),(290,54,-75),(290,55,-80),(290,56,-750),(290,57,-75),(290,58,100),(290,59,-800),(290,60,-900),(290,61,-20),(290,62,-15),(290,178,-800),(290,180,50),(290,201,-300),(290,202,75),(290,203,-300),(290,206,-300),(290,209,-25),(290,211,-100),(290,213,-50),(290,214,50),(290,216,-50),(290,661,-50),(290,1106,-50),(291,3,50),(291,5,-25),(291,9,-25),(291,11,-25),(291,51,50),(291,52,-25),(291,53,-25),(291,54,-50),(291,55,-50),(291,56,-250),(291,57,50),(291,58,-50),(291,59,-750),(291,60,-500),(291,61,-10),(291,62,-10),(291,178,-750),(291,180,-25),(291,201,-50),(291,203,-50),(291,206,-50),(291,207,50),(291,212,50),(291,216,-50),(291,661,50),(291,1106,50),(292,5,-200),(292,9,-10),(292,11,-200),(292,51,-25),(292,52,-30),(292,53,-40),(292,54,-10),(292,55,-20),(292,56,-450),(292,58,-30),(292,59,-900),(292,60,-900),(292,61,100),(292,62,-5),(292,178,-900),(292,180,-30),(292,661,-25),(292,1106,-25),(293,5,-200),(293,9,-10),(293,11,-200),(293,51,-1),(293,54,-50),(293,55,-50),(293,56,-500),(293,57,-50),(293,59,-750),(293,60,-750),(293,61,-5),(293,62,-1),(293,178,-750),(293,661,-1),(293,1106,-1),(295,51,-1000),(295,52,-1000),(295,53,-1000),(295,54,-1000),(295,55,-1000),(295,56,-1000),(295,57,-1000),(295,58,-1000),(295,59,-1000),(295,60,-1000),(295,61,-1000),(295,62,-1000),(295,178,-1000),(295,180,-1000),(295,661,-1000),(295,1106,-1000),(296,3,-200),(296,5,50),(296,11,50),(296,12,50),(296,13,50),(296,14,50),(296,54,-500),(296,55,-500),(296,56,50),(296,58,-500),(296,61,-500),(296,178,-500),(296,201,25),(296,202,-150),(296,203,25),(296,204,-150),(296,205,-150),(296,206,100),(296,207,-150),(296,208,-150),(296,209,-150),(296,210,-150),(296,211,-150),(296,212,-150),(296,213,-150),(296,214,-150),(296,215,-450),(297,5,-200),(297,11,-200),(297,51,-1),(297,54,-1),(297,55,-1),(297,56,-750),(297,57,-1),(297,59,-750),(297,60,-750),(297,178,-1000),(297,201,-200),(297,202,1000),(297,203,-200),(297,206,-200),(297,661,-1),(297,1106,-1),(298,3,50),(298,5,-200),(298,9,-50),(298,11,-200),(298,53,50),(298,56,-750),(298,59,-750),(298,60,-750),(298,178,-750),(298,210,100),(298,211,-500),(299,51,-1000),(299,52,-1000),(299,53,-1000),(299,54,-1000),(299,55,-1000),(299,56,-1000),(299,57,-1000),(299,58,-1000),(299,59,-1000),(299,60,-1000),(299,61,-1000),(299,62,-1000),(299,178,-1000),(299,180,-1000),(299,201,-1000),(299,202,-1000),(299,203,-1000),(299,204,-1000),(299,205,-1000),(299,206,-1000),(299,207,-1000),(299,208,-1000),(299,209,-1000),(299,210,-1000),(299,211,-1000),(299,212,-1000),(299,213,-1000),(299,214,-1000),(299,215,-1000),(299,216,-1000),(299,661,-1000),(299,1106,-1000),(300,5,-200),(300,11,-200),(300,53,-25),(300,54,25),(300,56,-675),(300,58,-25),(300,59,-800),(300,60,-800),(300,61,50),(300,62,10),(300,178,-800),(300,201,-600),(300,203,-600),(300,205,100),(300,206,-600),(300,207,50),(300,208,-100),(300,209,25),(300,210,25),(300,214,-100),(300,215,25),(302,4,50),(302,5,-200),(302,6,25),(302,9,-50),(302,11,-200),(302,51,50),(302,52,-50),(302,53,-150),(302,55,-100),(302,56,-400),(302,57,50),(302,58,-125),(302,59,-850),(302,60,-750),(302,61,-50),(302,62,-100),(302,178,-850),(302,180,-50),(302,201,-450),(302,202,-25),(302,203,-300),(302,205,-25),(302,206,-300),(302,207,100),(302,209,25),(302,211,-25),(302,213,-50),(302,215,100),(302,216,-200),(302,661,50),(302,1106,50),(304,51,-75),(304,52,-75),(304,53,-50),(304,54,-75),(304,55,-25),(304,56,-25),(304,57,-75),(304,58,-75),(304,59,-75),(304,60,-75),(304,61,-75),(304,62,-75),(304,178,-75),(304,180,-75),(304,202,-25),(304,205,-10),(304,214,-10),(304,216,25),(304,661,-75),(304,1106,-75),(305,2,-1),(305,3,-1),(305,4,-1),(305,5,-200),(305,6,-1),(305,7,-1),(305,8,-1),(305,9,50),(305,10,-1),(305,11,-200),(305,12,-1),(305,13,-1),(305,14,-1),(305,15,-1),(305,16,-1),(305,51,-99),(305,52,50),(305,54,-99),(305,55,-99),(305,56,-750),(305,57,-99),(305,59,-750),(305,60,-750),(305,61,-99),(305,62,-99),(305,178,-750),(305,180,50),(305,201,-350),(305,203,-750),(305,205,50),(305,206,-350),(305,207,25),(305,209,25),(305,211,25),(305,214,50),(305,661,-99),(305,1106,-99),(306,51,-1000),(306,52,-1000),(306,53,-1000),(306,54,-1000),(306,55,-1000),(306,56,-1000),(306,57,-1000),(306,58,-1000),(306,59,-1000),(306,60,-1000),(306,61,-1000),(306,62,-1000),(306,178,-1000),(306,180,-1000),(306,661,-1000),(306,1106,-1000),(307,51,-1000),(307,52,-1000),(307,53,-1000),(307,54,-1000),(307,55,-1000),(307,56,-1000),(307,57,-1000),(307,58,-1000),(307,59,-1000),(307,60,-1000),(307,61,-1000),(307,62,-1000),(307,178,-1000),(307,180,-1000),(307,661,-1000),(307,1106,-1000),(308,1,-200),(308,2,-200),(308,3,-1000),(308,4,-200),(308,5,50),(308,6,-200),(308,7,-200),(308,8,-200),(308,9,-100),(308,11,-50),(308,12,-200),(308,13,-200),(308,14,-200),(308,16,-200),(308,51,-750),(308,52,-750),(308,53,-750),(308,54,-750),(308,55,-750),(308,56,-200),(308,57,-750),(308,58,-750),(308,59,50),(308,60,-250),(308,61,-750),(308,62,-750),(308,178,-750),(308,180,-750),(308,202,-200),(308,203,50),(308,204,-200),(308,205,-200),(308,206,50),(308,207,-200),(308,208,-200),(308,209,-200),(308,210,-200),(308,211,-50),(308,212,-200),(308,213,-200),(308,214,-200),(308,215,-200),(308,216,-200),(308,661,-750),(308,1106,-750),(309,1,-25),(309,2,-25),(309,3,-25),(309,4,-25),(309,5,-200),(309,6,-25),(309,7,50),(309,8,-25),(309,9,-50),(309,10,-25),(309,11,-200),(309,12,-25),(309,13,-25),(309,14,-25),(309,15,-25),(309,16,-25),(309,51,50),(309,56,-50),(309,57,50),(309,59,-700),(309,60,-650),(309,178,-1000),(309,201,-200),(309,203,-200),(309,206,-200),(309,210,50),(309,211,-25),(309,214,25),(309,216,-25),(309,661,50),(309,1106,50),(310,5,-200),(310,6,50),(310,11,-200),(310,51,-25),(310,52,-25),(310,53,-25),(310,54,50),(310,55,25),(310,56,-1000),(310,57,50),(310,58,-25),(310,59,-800),(310,60,-600),(310,178,-1000),(310,180,-25),(310,201,-200),(310,203,-200),(310,206,-400),(310,207,10),(310,209,10),(310,215,100),(310,661,-25),(310,1106,-25),(311,1,50),(311,5,-200),(311,11,-200),(311,51,50),(311,53,-50),(311,54,-50),(311,55,-50),(311,56,-200),(311,57,50),(311,58,-25),(311,59,-300),(311,60,-200),(311,61,-50),(311,62,-50),(311,178,-400),(311,201,-50),(311,203,-200),(311,206,-50),(311,211,50),(311,661,50),(311,1106,50),(312,1,50),(312,5,-200),(312,9,-25),(312,11,-200),(312,12,-25),(312,13,-25),(312,14,-25),(312,16,50),(312,51,-75),(312,52,50),(312,53,-150),(312,54,-100),(312,55,-150),(312,56,-750),(312,57,-80),(312,58,50),(312,59,-900),(312,60,-1000),(312,61,-25),(312,62,-15),(312,178,-750),(312,180,50),(312,201,-500),(312,202,50),(312,203,-500),(312,206,-500),(312,210,-10),(312,211,-500),(312,215,-50),(312,216,-100),(312,661,-75),(312,1106,-75),(313,3,-1000),(313,4,-1000),(313,5,-1000),(313,10,-1000),(313,11,-1000),(313,12,-1000),(313,13,-1000),(313,14,-1000),(313,15,-1000),(313,51,-1000),(313,52,-1000),(313,53,-1000),(313,54,-1000),(313,55,-1000),(313,56,-1000),(313,57,-1000),(313,58,-1000),(313,59,-1000),(313,60,-1000),(313,61,-1000),(313,62,-1000),(313,178,-1000),(313,180,-1000),(313,209,50),(313,661,-1000),(313,1106,-1000),(315,51,-1000),(315,52,-1000),(315,53,-1000),(315,54,-1000),(315,55,-1000),(315,56,-1000),(315,57,-1000),(315,58,-1000),(315,59,-1000),(315,60,-1000),(315,61,-1000),(315,62,-1000),(315,178,-1000),(315,180,-1000),(315,216,-20),(315,661,-1000),(315,1106,-1000),(316,5,-200),(316,9,50),(316,11,-200),(316,51,-1),(316,52,-1),(316,54,100),(316,55,50),(316,56,-750),(316,57,50),(316,59,-750),(316,60,-750),(316,62,-1),(316,178,-750),(316,180,-1),(316,201,-200),(316,203,-200),(316,205,50),(316,206,-800),(316,207,50),(316,209,100),(316,215,100),(316,661,-1),(316,1106,-1),(317,3,-200),(317,51,-1000),(317,52,-1000),(317,53,-1000),(317,54,-1000),(317,55,-1000),(317,56,-1000),(317,57,-1000),(317,58,-1000),(317,59,-1000),(317,60,-1000),(317,61,-1000),(317,62,-1000),(317,178,-1000),(317,180,-1000),(317,661,-1000),(317,1106,-1000),(318,51,-75),(318,52,-1000),(318,53,-75),(318,54,-1000),(318,55,-1000),(318,56,-75),(318,57,-1000),(318,58,-1000),(318,59,-75),(318,60,-75),(318,61,-1000),(318,62,-75),(318,178,-1000),(318,180,-1000),(318,202,-1000),(318,204,-1000),(318,205,-5),(318,207,-1000),(318,208,-1000),(318,209,-1000),(318,210,-1000),(318,212,-1000),(318,213,-5),(318,214,-1000),(318,215,-1000),(318,216,-1000),(318,661,-75),(318,1106,-75),(319,51,-1000),(319,52,-1000),(319,53,-1000),(319,54,-1000),(319,55,-1000),(319,56,-1000),(319,57,-1000),(319,58,-1000),(319,59,-1000),(319,60,-1000),(319,61,-1000),(319,62,-1000),(319,178,-1000),(319,180,-1000),(319,661,-1000),(319,1106,-1000),(320,1,50),(320,5,-200),(320,8,25),(320,9,-10),(320,11,-400),(320,12,-50),(320,13,-50),(320,14,-50),(320,16,50),(320,51,-50),(320,52,50),(320,53,-100),(320,54,-100),(320,55,-150),(320,56,-750),(320,57,-75),(320,58,25),(320,59,-900),(320,60,-600),(320,61,-25),(320,62,-25),(320,178,-1000),(320,180,50),(320,201,-500),(320,203,-500),(320,204,25),(320,206,-500),(320,208,25),(320,211,50),(320,213,-25),(320,214,75),(320,661,-50),(320,1106,-50),(321,4,-200),(321,6,-200),(321,51,-875),(321,52,-875),(321,53,-875),(321,54,-875),(321,55,-875),(321,56,-875),(321,57,-875),(321,58,-875),(321,59,-625),(321,60,-625),(321,61,-875),(321,62,-875),(321,178,-875),(321,180,-875),(321,661,-875),(321,1106,-875),(322,2,-10),(322,3,-10),(322,4,-10),(322,5,-200),(322,6,-10),(322,7,-10),(322,8,-10),(322,9,50),(322,10,-10),(322,11,-200),(322,12,-10),(322,13,-10),(322,14,-10),(322,15,-10),(322,16,-10),(322,54,-50),(322,55,-50),(322,56,-550),(322,57,-50),(322,58,50),(322,59,-750),(322,60,-750),(322,178,-750),(322,201,-300),(322,202,50),(322,203,-300),(322,205,50),(322,206,-300),(322,211,-200),(322,214,-50),(323,1,50),(323,5,-600),(323,9,-25),(323,11,-200),(323,16,50),(323,51,-75),(323,52,-75),(323,53,-80),(323,54,-50),(323,55,-80),(323,56,-750),(323,57,-25),(323,58,-25),(323,59,-750),(323,60,-750),(323,61,-25),(323,62,50),(323,178,-1000),(323,180,-75),(323,201,-200),(323,202,50),(323,203,-200),(323,206,-200),(323,215,25),(323,216,-200),(323,661,-75),(323,1106,-75),(324,6,375),(324,11,-200),(324,52,-200),(324,53,-200),(324,55,-200),(324,56,-200),(324,58,-200),(324,59,-200),(324,60,-200),(324,62,-200),(324,178,-250),(324,180,-200),(324,201,-200),(324,203,-200),(324,206,-200),(324,207,100),(324,209,100),(324,211,-100),(324,213,-100),(324,215,500),(325,5,-200),(325,9,-50),(325,11,-200),(325,51,-30),(325,52,-30),(325,54,-5),(325,56,-750),(325,57,-20),(325,59,-750),(325,60,-750),(325,61,-10),(325,62,-10),(325,178,-750),(325,180,-30),(325,661,-30),(325,1106,-30),(326,1,50),(326,5,-200),(326,11,-200),(326,51,-50),(326,52,-50),(326,53,-50),(326,54,50),(326,55,50),(326,56,-750),(326,57,50),(326,58,-50),(326,59,-750),(326,60,-750),(326,61,-10),(326,62,-25),(326,178,-1000),(326,180,-50),(326,201,-200),(326,202,-50),(326,203,-200),(326,205,-25),(326,206,-200),(326,213,-50),(326,215,50),(326,216,-50),(326,661,-50),(326,1106,-50),(327,5,-200),(327,9,-200),(327,10,50),(327,11,-200),(327,15,50),(327,51,-25),(327,52,50),(327,53,-100),(327,54,-100),(327,55,-100),(327,56,-750),(327,57,-25),(327,59,-900),(327,60,-750),(327,61,-25),(327,62,-25),(327,178,-1000),(327,180,50),(327,201,-200),(327,203,-200),(327,205,-100),(327,206,-200),(327,214,100),(327,661,-25),(327,1106,-25),(328,5,-200),(328,9,-10),(328,11,-200),(328,51,-50),(328,54,-99),(328,55,-99),(328,56,-750),(328,57,-99),(328,59,-750),(328,60,-750),(328,61,-20),(328,62,-30),(328,178,-750),(328,661,-50),(328,1106,-50),(329,56,-200),(329,59,-375),(329,60,-375),(329,178,-475),(329,201,-100),(329,203,-100),(329,206,-100),(329,216,-200),(330,3,-50),(330,4,-25),(330,9,25),(330,52,-25),(330,53,-25),(330,54,-25),(330,55,-50),(330,56,-150),(330,58,-25),(330,59,-600),(330,60,-550),(330,61,-25),(330,62,-25),(330,178,-600),(330,180,-25),(330,201,-25),(330,203,-50),(330,204,-100),(330,205,25),(330,206,-25),(330,208,-100),(330,211,25),(330,212,-25),(330,214,-100),(330,215,-25),(331,9,-180),(332,3,-50),(332,4,-25),(332,5,-200),(332,9,50),(332,11,-300),(332,12,-50),(332,13,-50),(332,14,-50),(332,52,-50),(332,53,-50),(332,54,-200),(332,55,-200),(332,56,-300),(332,57,-75),(332,58,-150),(332,59,-750),(332,60,-500),(332,61,-25),(332,62,-100),(332,178,-750),(332,180,-50),(332,201,-200),(332,202,-50),(332,203,-300),(332,206,-300),(332,208,-50),(332,209,-50),(332,210,-50),(332,211,-75),(332,212,-30),(332,213,-50),(332,214,-200),(332,215,-10),(332,216,-300),(333,5,-200),(333,11,-200),(333,51,-10),(333,52,-10),(333,53,-10),(333,54,-10),(333,55,-10),(333,56,-750),(333,57,-10),(333,58,-10),(333,59,-750),(333,60,-750),(333,61,-10),(333,62,50),(333,178,-750),(333,180,-10),(333,201,-200),(333,204,-100),(333,206,-200),(333,661,-10),(333,1106,-10),(334,3,-750),(334,4,-750),(334,5,50),(334,6,-750),(334,7,-100),(334,8,-50),(334,10,-50),(334,11,50),(334,15,-50),(334,51,-500),(334,52,-750),(334,53,-400),(334,54,-750),(334,55,-750),(334,56,50),(334,57,-750),(334,58,-750),(334,59,-200),(334,60,-200),(334,61,-750),(334,62,-500),(334,178,-750),(334,180,-750),(334,201,-25),(334,202,-500),(334,203,-25),(334,204,-500),(334,205,-500),(334,206,50),(334,207,-500),(334,208,-500),(334,209,-500),(334,210,-500),(334,211,-50),(334,212,-500),(334,213,-25),(334,214,-500),(334,215,-500),(334,216,-25),(334,661,-500),(334,1106,-500),(336,3,-50),(336,4,-25),(336,9,50),(336,51,50),(336,53,-50),(336,55,-50),(336,56,-75),(336,57,50),(336,58,-50),(336,59,-300),(336,60,-200),(336,61,-50),(336,62,-50),(336,178,-400),(336,201,-25),(336,203,-50),(336,204,-5),(336,205,50),(336,206,25),(336,208,-10),(336,214,-25),(336,661,50),(336,1106,50),(337,3,-200),(337,4,-200),(337,9,-50),(337,12,-200),(337,13,-200),(337,14,-200),(337,51,-875),(337,52,-875),(337,53,-875),(337,54,-875),(337,55,-875),(337,57,-875),(337,58,-875),(337,60,875),(337,61,-875),(337,62,-875),(337,178,-875),(337,180,-875),(337,661,-875),(337,1106,-875),(338,3,-200),(338,4,-200),(338,9,-50),(338,12,-200),(338,13,-200),(338,14,-200),(338,51,-750),(338,52,-750),(338,54,-750),(338,55,-750),(338,56,-50),(338,57,-750),(338,59,-50),(338,60,1000),(338,61,-750),(338,62,-750),(338,178,-1000),(338,180,-750),(338,661,-750),(338,1106,-750),(340,3,-200),(340,4,-200),(340,5,50),(340,6,-200),(340,11,25),(340,51,-250),(340,52,-500),(340,53,-200),(340,54,-600),(340,55,-800),(340,56,50),(340,57,-50),(340,58,-500),(340,59,-200),(340,60,-250),(340,61,-600),(340,62,-250),(340,178,-600),(340,180,-500),(340,201,-200),(340,202,-200),(340,203,-100),(340,204,-600),(340,205,-200),(340,206,100),(340,207,-200),(340,208,-200),(340,209,-200),(340,210,-200),(340,211,-200),(340,212,-200),(340,213,-200),(340,214,-200),(340,215,-600),(340,216,-200),(340,661,-250),(340,1106,-250),(341,5,-200),(341,11,-200),(341,52,-25),(341,53,-25),(341,54,-25),(341,55,-25),(341,56,-200),(341,58,-25),(341,59,-850),(341,60,-750),(341,61,-25),(341,62,-25),(341,178,-850),(341,180,-25),(341,201,-200),(341,202,-50),(341,203,-200),(341,204,-25),(341,205,-50),(341,206,-200),(341,208,-25),(341,209,-25),(341,211,-200),(341,212,100),(341,213,-100),(341,214,-25),(341,216,-100),(342,5,-200),(342,11,-200),(342,12,50),(342,13,50),(342,14,50),(342,51,50),(342,52,-200),(342,53,-25),(342,54,-200),(342,56,-400),(342,57,50),(342,58,-200),(342,59,-850),(342,60,-750),(342,61,-50),(342,62,-50),(342,178,-850),(342,180,-200),(342,201,-200),(342,202,-100),(342,203,-300),(342,205,-100),(342,206,-200),(342,207,50),(342,209,-100),(342,210,-100),(342,211,-200),(342,212,50),(342,213,50),(342,214,-25),(342,216,-300),(342,661,50),(342,1106,50),(343,4,750),(343,6,750),(343,51,-600),(343,52,-600),(343,53,-600),(343,54,-600),(343,55,-600),(343,56,-600),(343,57,-600),(343,58,-600),(343,59,-600),(343,60,-600),(343,61,-600),(343,62,-600),(343,178,-600),(343,180,-600),(343,215,750),(343,661,-600),(343,1106,-600),(345,5,-400),(345,9,-25),(345,11,-400),(345,12,-50),(345,13,-50),(345,14,-50),(345,52,-25),(345,53,-70),(345,54,-50),(345,55,-50),(345,56,-500),(345,57,-10),(345,58,-60),(345,59,-750),(345,60,-750),(345,61,-10),(345,62,-50),(345,178,-750),(345,180,-25),(345,201,-750),(345,202,-5),(345,203,-500),(345,205,-20),(345,206,-500),(345,209,-3),(345,211,-50),(345,213,-20),(345,215,-5),(345,216,-80),(346,5,-300),(346,9,-50),(346,11,-300),(346,51,50),(346,56,-300),(346,59,-750),(346,60,-750),(346,178,-750),(346,201,-300),(346,203,-300),(346,204,50),(346,206,-200),(346,207,100),(346,208,75),(346,212,75),(346,214,50),(346,661,50),(346,1106,50),(355,3,50),(355,4,50),(355,5,-200),(355,6,50),(355,9,-25),(355,11,-200),(355,53,-10),(355,54,25),(355,56,-200),(355,57,25),(355,59,-800),(355,60,-700),(355,61,50),(355,178,-750),(355,201,-200),(355,203,-200),(355,206,-200),(355,207,50),(355,209,25),(355,210,25),(355,212,25),(355,215,25),(355,216,-25),(361,5,-200),(361,7,100),(361,9,-100),(361,11,-200),(361,56,-1000),(361,59,-1000),(361,60,-1000),(361,178,-1000),(362,3,50),(362,5,-200),(362,11,-200),(362,51,50),(362,56,-200),(362,57,50),(362,59,-800),(362,60,-600),(362,178,-800),(362,201,-200),(362,203,-100),(362,204,100),(362,206,-200),(362,208,75),(362,211,-100),(362,661,50),(362,1106,50),(363,3,-350),(363,4,-350),(363,6,-350),(363,11,-50),(363,12,50),(363,13,50),(363,14,50),(363,51,-250),(363,52,-500),(363,53,-150),(363,54,-600),(363,55,-700),(363,56,50),(363,57,-25),(363,58,-500),(363,59,-250),(363,60,-300),(363,61,-550),(363,62,-150),(363,178,-350),(363,180,-500),(363,201,25),(363,202,-200),(363,203,25),(363,204,-200),(363,205,-200),(363,206,50),(363,207,-200),(363,208,-200),(363,209,-200),(363,210,-200),(363,211,-200),(363,212,-200),(363,213,50),(363,214,-150),(363,215,-600),(363,216,-150),(363,661,-250),(363,1106,-250),(364,3,-100),(364,51,-1000),(364,52,-1000),(364,53,-1000),(364,54,-1000),(364,55,-1000),(364,56,-1000),(364,57,-1000),(364,58,-1000),(364,59,-1000),(364,60,-1000),(364,61,-1000),(364,62,-1000),(364,178,-1000),(364,180,-1000),(364,201,-1000),(364,202,-1000),(364,203,-1000),(364,204,-1000),(364,205,-1000),(364,206,-1000),(364,207,-1000),(364,208,-1000),(364,209,-1000),(364,210,-1000),(364,211,50),(364,212,-1000),(364,213,-1000),(364,214,-1000),(364,215,-1000),(364,216,-1000),(364,661,-1000),(364,1106,-1000),(366,1,-550),(366,2,-550),(366,3,-600),(366,4,-550),(366,5,-600),(366,6,-600),(366,7,-550),(366,8,-550),(366,9,-400),(366,10,-550),(366,11,-550),(366,12,-550),(366,13,-550),(366,14,-550),(366,15,-550),(366,16,-550),(366,52,-200),(366,53,-200),(366,54,-300),(366,55,-300),(366,56,-200),(366,58,-200),(366,59,-750),(366,60,-550),(366,62,-300),(366,178,-750),(366,180,-200),(366,201,-750),(366,202,-200),(366,203,-750),(366,204,-750),(366,206,-750),(366,208,-750),(366,209,-750),(366,210,-750),(366,211,-750),(366,212,-200),(366,213,-750),(366,214,-1000),(366,215,-200),(366,216,-750),(370,3,-750),(370,4,-750),(370,5,50),(370,6,-750),(370,7,-300),(370,9,25),(370,11,50),(370,51,-200),(370,52,-875),(370,53,-200),(370,54,-875),(370,55,-875),(370,56,50),(370,57,-875),(370,58,-875),(370,59,-400),(370,60,-450),(370,61,-875),(370,62,-200),(370,178,-875),(370,180,-875),(370,201,-25),(370,202,-750),(370,203,-25),(370,204,-750),(370,205,-75),(370,206,50),(370,207,-750),(370,208,-750),(370,209,-750),(370,210,-750),(370,211,-50),(370,212,-750),(370,213,-75),(370,214,-750),(370,215,-750),(370,216,-150),(370,661,-200),(370,1106,-200),(371,51,-875),(371,52,-875),(371,53,-875),(371,54,-875),(371,55,-875),(371,56,1000),(371,57,-875),(371,58,-875),(371,59,1000),(371,60,1000),(371,61,-875),(371,62,-875),(371,178,-875),(371,180,-875),(371,661,-875),(371,1106,-875),(372,51,-875),(372,52,-875),(372,53,-875),(372,54,-875),(372,55,-875),(372,56,-875),(372,57,-875),(372,58,-875),(372,59,-875),(372,60,-875),(372,61,-875),(372,62,-875),(372,178,-875),(372,180,-875),(372,661,-875),(372,1106,-875),(373,51,-750),(373,52,-750),(373,53,-750),(373,54,-750),(373,55,-750),(373,56,-750),(373,57,-750),(373,58,-750),(373,59,-750),(373,60,-750),(373,61,-750),(373,62,-750),(373,178,-750),(373,180,-750),(373,661,-750),(373,1106,-750),(375,51,-1000),(375,52,-1000),(375,53,-1000),(375,54,-1000),(375,55,-1000),(375,56,-1000),(375,57,-1000),(375,58,-1000),(375,59,-1000),(375,60,-1000),(375,61,-1000),(375,62,-1000),(375,178,-1000),(375,180,-1000),(375,661,-1000),(375,1106,-1000),(376,59,1000),(377,5,-200),(377,51,-875),(377,52,-875),(377,53,-875),(377,54,-875),(377,55,-875),(377,56,-250),(377,57,-875),(377,58,-875),(377,59,50),(377,60,-200),(377,61,-875),(377,62,-875),(377,178,-875),(377,180,-875),(377,661,-875),(377,1106,-875),(378,5,-500),(378,11,-500),(378,51,-1600),(378,52,-1700),(378,53,-1700),(378,54,-700),(378,55,-1200),(378,56,-1500),(378,57,-1000),(378,58,-1300),(378,59,-2000),(378,60,-2000),(378,61,-525),(378,62,-1000),(378,178,-2000),(378,180,-1700),(378,661,-1600),(378,1106,-1600),(379,9,50),(379,51,-550),(379,52,-550),(379,53,-550),(379,54,-700),(379,55,-700),(379,56,-550),(379,57,-550),(379,58,-500),(379,59,-700),(379,60,-800),(379,61,-550),(379,62,-550),(379,178,-800),(379,180,-550),(379,201,-100),(379,202,25),(379,203,-50),(379,205,25),(379,206,-200),(379,214,-50),(379,661,-550),(379,1106,-550),(382,5,-1000),(382,11,-1000),(382,51,-50),(382,52,-50),(382,53,-1000),(382,55,-25),(382,56,-1000),(382,57,-50),(382,58,-50),(382,59,-1000),(382,60,-1000),(382,61,-50),(382,62,-50),(382,178,-1000),(382,180,-50),(382,201,-1000),(382,203,-1000),(382,206,-1000),(382,215,25),(382,661,-50),(382,1106,-50),(387,51,-1000),(387,52,-1000),(387,53,-1000),(387,54,-1000),(387,55,-1000),(387,56,-1000),(387,57,-1000),(387,58,-1000),(387,59,-1000),(387,60,-1000),(387,61,-1000),(387,62,-1000),(387,178,-1000),(387,180,-1000),(387,661,-1000),(387,1106,-1000),(388,56,-750),(388,59,-1000),(388,60,-850),(388,178,-1000),(390,51,-100),(390,52,-100),(390,53,-100),(390,54,-100),(390,55,-100),(390,56,-100),(390,57,-100),(390,58,-100),(390,59,-100),(390,60,-100),(390,61,-100),(390,62,-100),(390,178,-100),(390,180,-100),(390,661,-100),(390,1106,-100),(391,51,-100),(391,52,-100),(391,53,-100),(391,54,-100),(391,55,-100),(391,56,-100),(391,57,-100),(391,58,-100),(391,59,-100),(391,60,-100),(391,61,-100),(391,62,-100),(391,178,-100),(391,180,-100),(391,661,-100),(391,1106,-100),(394,1,25),(394,3,-750),(394,4,-750),(394,5,25),(394,6,-750),(394,10,50),(394,11,25),(394,15,50),(394,16,25),(394,51,-500),(394,52,-400),(394,53,-600),(394,54,-600),(394,55,-600),(394,56,-50),(394,57,-600),(394,58,-600),(394,59,-500),(394,60,50),(394,61,-600),(394,62,-400),(394,178,-600),(394,180,-400),(394,201,-50),(394,202,-600),(394,203,50),(394,204,-600),(394,205,-600),(394,206,-50),(394,207,-600),(394,208,-600),(394,209,-600),(394,210,-600),(394,211,100),(394,212,-600),(394,213,-600),(394,214,-600),(394,215,-600),(394,661,-500),(394,1106,-500),(398,51,-1000),(398,52,-1000),(398,53,-1000),(398,54,-1000),(398,55,-1000),(398,56,-1000),(398,57,-1000),(398,58,-1000),(398,59,-1000),(398,60,-1000),(398,61,-1000),(398,62,-1000),(398,178,-1000),(398,180,-1000),(398,661,-1000),(398,1106,-1000),(401,5,-300),(401,8,50),(401,11,-200),(401,51,-25),(401,52,-25),(401,54,50),(401,55,50),(401,56,-1000),(401,57,50),(401,58,-25),(401,59,-800),(401,60,-600),(401,178,-1000),(401,180,-25),(401,661,-25),(401,1106,-25),(404,1,-100),(404,2,-100),(404,3,-100),(404,4,-100),(404,5,-100),(404,6,-100),(404,7,-100),(404,8,-100),(404,9,-100),(404,11,-100),(404,12,-100),(404,13,-100),(404,14,-100),(404,16,-100),(405,51,-200),(405,52,-200),(405,53,-200),(405,54,-200),(405,55,-200),(405,56,-200),(405,57,-200),(405,58,-200),(405,59,-200),(405,60,-200),(405,61,-200),(405,62,-200),(405,178,-200),(405,180,-200),(405,661,-200),(405,1106,-200),(406,51,-100),(406,52,-100),(406,53,-100),(406,54,-100),(406,55,-100),(406,56,-100),(406,57,-100),(406,58,-50),(406,59,-100),(406,60,-100),(406,61,-100),(406,62,-100),(406,178,-100),(406,180,-100),(406,202,100),(406,661,-100),(406,1106,-100),(407,51,-800),(407,52,-800),(407,53,-800),(407,54,-800),(407,55,-800),(407,56,-800),(407,57,-800),(407,58,-800),(407,59,-800),(407,60,-800),(407,61,-800),(407,62,-800),(407,178,-800),(407,180,-800),(407,661,-800),(407,1106,-800),(409,51,-625),(409,52,-625),(409,53,-625),(409,54,-625),(409,55,-625),(409,56,-625),(409,57,-625),(409,58,-625),(409,59,-625),(409,60,-625),(409,61,-625),(409,62,-625),(409,178,-625),(409,180,-625),(409,661,-625),(409,1106,-625),(412,5,-200),(412,11,-200),(412,51,-475),(412,52,-475),(412,53,-475),(412,54,-475),(412,55,-475),(412,56,-475),(412,57,-475),(412,58,-475),(412,59,-1000),(412,60,-1000),(412,61,-475),(412,62,-475),(412,178,-1000),(412,180,-475),(412,201,-500),(412,203,-500),(412,206,-500),(412,211,-75),(412,215,25),(412,216,-100),(412,661,-475),(412,1106,-475),(415,12,50),(415,51,50),(415,213,50),(415,661,50),(415,1106,50),(416,12,-25),(416,51,-400),(416,52,-400),(416,53,-400),(416,54,-400),(416,55,-400),(416,56,-400),(416,57,-400),(416,58,-400),(416,59,-400),(416,60,-400),(416,61,-400),(416,62,-400),(416,178,-400),(416,180,-400),(416,213,-25),(416,661,-400),(416,1106,-400),(417,56,-750),(417,59,-750),(417,60,-750),(417,201,-750),(417,203,-750),(417,206,-750),(417,211,-750),(418,51,-750),(418,52,-750),(418,53,-750),(418,54,-750),(418,55,-750),(418,57,-750),(418,58,-750),(418,61,-750),(418,62,-750),(418,180,-750),(418,202,-750),(418,204,-750),(418,205,-750),(418,207,-750),(418,208,-750),(418,209,-750),(418,210,-750),(418,212,-750),(418,213,-750),(418,214,-750),(418,215,-750),(418,216,-750),(418,661,-750),(418,1106,-750),(419,51,-550),(419,52,-550),(419,53,-550),(419,54,-550),(419,55,-550),(419,56,-550),(419,57,-550),(419,58,-550),(419,59,-550),(419,60,-450),(419,61,-550),(419,62,-550),(419,178,-550),(419,180,-550),(419,211,100),(419,661,-550),(419,1106,-550),(420,51,-1000),(420,52,-1000),(420,53,-1000),(420,54,-1000),(420,55,-1000),(420,56,-1000),(420,57,-1000),(420,58,-1000),(420,59,-1000),(420,60,-1000),(420,61,-1000),(420,62,-1000),(420,178,-1000),(420,180,-1000),(420,201,-1000),(420,202,-1000),(420,203,-1000),(420,204,-1000),(420,205,-1000),(420,207,-1000),(420,208,-1000),(420,209,-1000),(420,210,-1000),(420,211,-1000),(420,212,-1000),(420,213,-1000),(420,214,-1000),(420,215,-1000),(420,216,-1000),(420,661,-1000),(420,1106,-1000),(421,3,-500),(421,4,-500),(421,5,50),(421,6,-500),(421,11,50),(421,51,-600),(421,52,-1000),(421,53,-600),(421,54,-1000),(421,55,-1000),(421,56,150),(421,57,-1000),(421,58,-1000),(421,59,-200),(421,60,-200),(421,61,-1000),(421,62,-600),(421,178,-1000),(421,180,-1000),(421,202,-1000),(421,204,-1000),(421,205,-1000),(421,206,150),(421,207,-1000),(421,208,-1000),(421,209,-1000),(421,210,-1000),(421,212,-1000),(421,213,-1000),(421,214,-1000),(421,215,-1000),(421,216,-1000),(421,661,-600),(421,1106,-600),(422,3,100),(422,4,100),(422,5,-1000),(422,6,100),(422,11,-1000),(422,56,-1000),(422,59,-1000),(422,60,-1000),(422,178,-1000),(422,201,-1000),(422,202,100),(422,203,-1000),(422,204,100),(422,206,-1000),(422,207,100),(422,211,-250),(422,212,100),(422,215,100),(423,51,-1000),(423,52,-1000),(423,53,-1000),(423,54,-1000),(423,55,-1000),(423,56,-1000),(423,57,-1000),(423,58,-1000),(423,59,-1000),(423,60,-1000),(423,61,-1000),(423,62,-1000),(423,178,-1000),(423,180,-1000),(423,661,-1000),(423,1106,-1000),(425,51,-1000),(425,52,-1000),(425,53,-1000),(425,54,-1000),(425,55,-1000),(425,56,-1100),(425,57,-1000),(425,58,-1000),(425,59,-1000),(425,60,-1000),(425,61,-1000),(425,62,-1000),(425,178,-1000),(425,180,-1000),(425,201,-1000),(425,202,-1000),(425,203,-1000),(425,204,-1000),(425,205,-1000),(425,206,-1100),(425,207,-1000),(425,208,-1000),(425,209,-1000),(425,210,-1000),(425,211,-1000),(425,212,-1000),(425,213,-1000),(425,214,-1000),(425,215,-1000),(425,216,-1000),(425,661,-1000),(425,1106,-1000),(426,51,-1000),(426,52,-1000),(426,53,-1000),(426,54,-1000),(426,55,-1000),(426,56,-1000),(426,57,-1000),(426,58,-1000),(426,59,-1000),(426,60,-1000),(426,61,-1000),(426,62,-1000),(426,178,-1000),(426,180,-1000),(426,661,-1000),(426,1106,-1000),(427,51,-400),(427,52,-400),(427,53,-400),(427,54,-400),(427,55,-400),(427,56,-400),(427,57,-400),(427,58,-400),(427,59,-400),(427,60,-400),(427,61,-400),(427,62,-400),(427,178,-400),(427,180,-400),(427,215,200),(427,661,-400),(427,1106,-400),(428,51,-600),(428,52,-600),(428,53,-1000),(428,54,-600),(428,55,-600),(428,56,-600),(428,57,-600),(428,58,-600),(428,59,-600),(428,60,-600),(428,61,-600),(428,62,-600),(428,178,-600),(428,180,-600),(428,202,200),(428,216,-1000),(428,661,-600),(428,1106,-600),(429,51,-800),(429,52,-800),(429,53,-800),(429,54,-800),(429,55,-800),(429,56,-800),(429,57,-800),(429,58,-800),(429,59,-800),(429,60,-800),(429,61,-800),(429,62,-800),(429,178,-800),(429,180,-800),(429,661,-800),(429,1106,-800),(430,51,-800),(430,52,-800),(430,53,-800),(430,54,-800),(430,55,-800),(430,56,-800),(430,57,-800),(430,58,-800),(430,59,-800),(430,60,-800),(430,61,-800),(430,62,-800),(430,178,-800),(430,180,-800),(430,216,200),(430,661,-800),(430,1106,-800),(431,51,-800),(431,52,-800),(431,53,-800),(431,54,-800),(431,55,-800),(431,56,-800),(431,57,-800),(431,58,-800),(431,59,-800),(431,60,-800),(431,61,-800),(431,62,-800),(431,178,-800),(431,180,-800),(431,661,-800),(431,1106,-800),(434,51,-1000),(434,52,-1000),(434,53,-1000),(434,54,-1000),(434,55,-1000),(434,56,-1000),(434,57,-1000),(434,58,-1000),(434,59,-1000),(434,60,-1000),(434,61,-1000),(434,62,-1000),(434,178,-1000),(434,180,-1000),(434,661,-1000),(434,1106,-1000),(435,51,-1000),(435,52,-1000),(435,53,-1000),(435,54,-1000),(435,55,-1000),(435,56,-1000),(435,57,-1000),(435,58,-1000),(435,59,-1000),(435,60,-1000),(435,61,-1000),(435,62,-1000),(435,178,-1000),(435,180,-1000),(435,661,-1000),(435,1106,-1000),(436,51,-800),(436,52,-800),(436,53,-800),(436,54,-800),(436,55,-800),(436,56,-800),(436,57,-800),(436,58,-800),(436,59,-800),(436,60,-800),(436,61,-800),(436,62,-800),(436,178,-800),(436,180,-800),(436,216,200),(436,661,-800),(436,1106,-800),(437,205,100),(438,5,-1000),(438,11,-1000),(438,56,-1000),(438,59,-1000),(438,60,-1000),(438,178,-400),(438,201,-1000),(438,202,-100),(438,203,-1000),(438,204,-100),(438,205,-100),(438,206,-1000),(438,208,-100),(438,209,-100),(438,210,-100),(438,211,-1000),(438,212,-100),(438,213,-1000),(438,214,-100),(438,215,100),(438,216,-1000),(440,51,-1000),(440,52,-1000),(440,53,-1000),(440,54,-1000),(440,55,-1000),(440,56,-1000),(440,57,-1000),(440,58,-1000),(440,59,-1000),(440,60,-1000),(440,61,-1000),(440,62,-1000),(440,178,50),(440,180,-1000),(440,201,-1000),(440,202,-1000),(440,204,-1000),(440,205,-1000),(440,206,-1000),(440,207,-1000),(440,208,-1000),(440,209,-1000),(440,210,-1000),(440,211,-1000),(440,212,-1000),(440,213,-1000),(440,214,-1000),(440,215,-1000),(440,216,-1200),(440,661,-1000),(440,1106,-1000),(441,1,50),(441,51,-1000),(441,52,-1000),(441,53,-1000),(441,54,-1000),(441,55,-1000),(441,56,-1000),(441,57,-1000),(441,58,-1000),(441,59,-1000),(441,60,-1000),(441,61,-1000),(441,62,-1000),(441,178,50),(441,180,-1000),(441,201,-50),(441,202,-1000),(441,204,-1000),(441,205,-1000),(441,206,-50),(441,207,-1000),(441,208,-1000),(441,209,-1000),(441,210,-1000),(441,211,-1000),(441,212,-1000),(441,213,-1000),(441,214,-1000),(441,215,-1000),(441,216,-1500),(441,661,-1000),(441,1106,-1000),(442,5,25),(442,51,-1000),(442,52,-1000),(442,53,-1000),(442,54,-1000),(442,55,-1000),(442,56,-1000),(442,57,-1000),(442,58,-1000),(442,59,-1000),(442,60,-1000),(442,61,-1000),(442,62,-1000),(442,178,50),(442,180,-1000),(442,201,-250),(442,202,-1000),(442,203,25),(442,204,-1000),(442,205,-1000),(442,206,-250),(442,207,-1000),(442,208,-1000),(442,209,-1000),(442,210,-1000),(442,211,-1000),(442,212,-1000),(442,213,-1000),(442,214,-1000),(442,215,-1000),(442,216,-1200),(442,661,-1000),(442,1106,-1000),(443,3,-1000),(443,4,-1000),(443,6,-1000),(443,11,50),(443,51,-1000),(443,52,-1000),(443,53,-1000),(443,54,-1000),(443,55,-1000),(443,56,-1000),(443,57,-1000),(443,58,-1000),(443,59,-1000),(443,60,-1000),(443,61,-1000),(443,62,-1000),(443,178,50),(443,180,-1000),(443,202,-1000),(443,203,50),(443,204,-1000),(443,205,-1000),(443,207,-1000),(443,208,-1000),(443,209,-1000),(443,210,-1000),(443,211,-1000),(443,212,-1000),(443,213,-1000),(443,214,-1000),(443,215,-1000),(443,216,-1200),(443,661,-1000),(443,1106,-1000),(444,7,50),(444,51,-1000),(444,52,-1000),(444,53,-1000),(444,54,-1000),(444,55,-1000),(444,56,-1000),(444,57,-1000),(444,58,-1000),(444,59,-1000),(444,60,-1000),(444,61,-1000),(444,62,-1000),(444,178,50),(444,180,-1000),(444,202,-1000),(444,204,-1000),(444,205,-1000),(444,207,-1000),(444,208,-1000),(444,209,-1000),(444,210,-1000),(444,211,-1000),(444,212,-1000),(444,213,-1000),(444,214,-1000),(444,215,-1000),(444,216,-1200),(444,661,-1000),(444,1106,-1000),(445,3,-1000),(445,4,-1000),(445,6,-1000),(445,8,-1000),(445,10,50),(445,12,-1000),(445,13,-1000),(445,14,-1000),(445,15,50),(445,51,-1000),(445,52,-1000),(445,53,-1000),(445,54,-1000),(445,55,-1000),(445,56,-1000),(445,57,-1000),(445,58,-1000),(445,59,-1000),(445,60,-1000),(445,61,-1000),(445,62,-1000),(445,178,50),(445,180,-1000),(445,202,-1000),(445,203,50),(445,204,-1000),(445,205,-1000),(445,207,-1000),(445,208,-1000),(445,209,-1000),(445,210,-1000),(445,211,-1000),(445,212,-1000),(445,213,-1000),(445,214,-1000),(445,215,-1000),(445,216,-1500),(445,661,-1000),(445,1106,-1000),(446,51,-1000),(446,52,-1000),(446,53,-1000),(446,54,-1000),(446,55,-1000),(446,56,-1000),(446,57,-1000),(446,58,-1000),(446,59,-1000),(446,60,-1000),(446,61,-1000),(446,62,-1000),(446,178,-1000),(446,180,-1000),(446,201,-1000),(446,202,-1000),(446,203,-1000),(446,204,-1000),(446,205,-1000),(446,206,-1000),(446,207,-1000),(446,208,-1000),(446,209,-1000),(446,210,-1000),(446,211,-1000),(446,212,-1000),(446,213,-1000),(446,214,-1000),(446,215,-1000),(446,216,-1000),(446,661,-1000),(446,1106,-1000),(447,51,200),(447,52,200),(447,53,200),(447,54,200),(447,55,200),(447,56,200),(447,57,200),(447,58,200),(447,59,200),(447,60,200),(447,61,200),(447,62,500),(447,178,200),(447,180,200),(447,661,200),(447,1106,200),(448,51,-550),(448,52,-550),(448,53,-550),(448,54,-550),(448,55,-550),(448,56,-550),(448,57,-550),(448,58,-550),(448,59,-550),(448,60,-550),(448,61,-550),(448,62,-550),(448,178,-550),(448,180,-550),(448,211,100),(448,661,-550),(448,1106,-550),(449,5,-400),(449,11,-400),(449,56,-400),(449,59,-400),(449,60,-400),(449,178,-400),(449,201,-400),(449,203,-400),(449,206,-400),(450,51,-1000),(450,52,-1000),(450,53,-1000),(450,54,-1000),(450,55,-1000),(450,56,-1000),(450,57,-1000),(450,58,-1000),(450,59,-1000),(450,60,-1000),(450,61,-1000),(450,62,-1000),(450,178,-1000),(450,180,-1000),(450,661,-1000),(450,1106,-1000),(451,51,-800),(451,52,-800),(451,53,-800),(451,54,-800),(451,55,-800),(451,56,-800),(451,57,-800),(451,58,-800),(451,59,-800),(451,60,-800),(451,61,-800),(451,62,-800),(451,178,-800),(451,180,-800),(451,661,-800),(451,1106,-800),(452,6,150),(452,51,-600),(452,52,-1000),(452,53,-1000),(452,54,-600),(452,55,-600),(452,56,-1000),(452,57,-600),(452,58,-1000),(452,59,-1000),(452,60,-1000),(452,61,-600),(452,62,-1000),(452,178,-1000),(452,180,-1000),(452,215,150),(452,661,-600),(452,1106,-600),(454,51,-1000),(454,52,-1000),(454,53,-1000),(454,54,-1000),(454,55,-1000),(454,56,-1000),(454,57,-1000),(454,58,-1000),(454,59,-1000),(454,60,-1000),(454,61,-1000),(454,62,-1000),(454,178,-1000),(454,180,-1000),(454,201,-1000),(454,202,-1000),(454,203,-1000),(454,204,-1000),(454,205,-1000),(454,206,-1000),(454,207,-1000),(454,208,-1000),(454,209,-1000),(454,210,-1000),(454,211,-1000),(454,212,-1000),(454,213,-1000),(454,214,-1000),(454,215,-1000),(454,216,-1000),(454,661,-1000),(454,1106,-1000),(455,2,-1000),(455,3,-1000),(455,4,-1000),(455,5,-1000),(455,6,-1000),(455,8,-1000),(455,10,-1000),(455,11,-1000),(455,12,-1000),(455,13,-1000),(455,14,-1000),(455,15,-1000),(455,16,-1000),(455,51,-1000),(455,52,-1000),(455,53,-1000),(455,54,-1000),(455,55,-1000),(455,56,-1000),(455,57,-1000),(455,58,-1000),(455,59,-1000),(455,60,-1000),(455,61,-1000),(455,62,-1000),(455,178,-1000),(455,180,-1000),(455,201,-1000),(455,202,-1000),(455,203,-1000),(455,204,-1000),(455,205,-1000),(455,206,-1000),(455,207,-1000),(455,208,-1000),(455,209,-1000),(455,210,-1000),(455,211,-1000),(455,212,-1000),(455,213,-1000),(455,214,-1000),(455,215,-1000),(455,216,100),(455,661,-1000),(455,1106,-1000),(457,51,-800),(457,52,-800),(457,53,-800),(457,54,-800),(457,55,-800),(457,56,-800),(457,57,-800),(457,58,-800),(457,59,-800),(457,60,-800),(457,61,-800),(457,62,-800),(457,178,-800),(457,180,-800),(457,661,-800),(457,1106,-800),(459,205,200),(460,51,-200),(460,52,-200),(460,53,-200),(460,54,-200),(460,55,-200),(460,56,-200),(460,57,-200),(460,58,-150),(460,59,-200),(460,60,-200),(460,61,-200),(460,62,-200),(460,178,-200),(460,180,-200),(460,202,100),(460,661,-200),(460,1106,-200),(461,51,-1000),(461,52,-1000),(461,53,-1000),(461,54,-1000),(461,55,-1000),(461,56,-1000),(461,57,-1000),(461,58,-1000),(461,59,-1000),(461,60,-1000),(461,61,-1000),(461,62,-1000),(461,178,-1000),(461,180,-1000),(461,661,-1000),(461,1106,-1000),(462,51,-800),(462,52,-800),(462,53,-800),(462,54,-800),(462,55,-800),(462,56,-800),(462,57,-800),(462,58,-800),(462,59,-800),(462,60,-800),(462,61,-800),(462,62,-800),(462,178,-800),(462,180,-800),(462,661,-800),(462,1106,-800),(463,51,-200),(463,52,-200),(463,53,-200),(463,54,-200),(463,55,-200),(463,56,-200),(463,57,-200),(463,58,-200),(463,59,-200),(463,60,-200),(463,61,-200),(463,62,-200),(463,178,-200),(463,180,-200),(463,661,-200),(463,1106,-200),(467,51,-1000),(467,52,-1000),(467,53,-1000),(467,54,-1000),(467,55,-1000),(467,56,-1000),(467,57,-1000),(467,58,-1000),(467,59,-1000),(467,60,-1000),(467,61,-1000),(467,62,-1000),(467,178,-1000),(467,180,-1000),(467,661,-1000),(467,1106,-1000),(468,51,-1000),(468,52,-1000),(468,53,-1000),(468,54,-1000),(468,55,-1000),(468,56,-1000),(468,57,-1000),(468,58,-1000),(468,59,-1000),(468,60,-1000),(468,61,-1000),(468,62,-1000),(468,178,-1000),(468,180,-1000),(468,661,-1000),(468,1106,-1000),(469,5,-1000),(469,11,-1000),(469,56,-1000),(469,59,-1000),(469,60,-1000),(469,178,-400),(469,201,-1000),(469,202,-100),(469,203,-1000),(469,204,-100),(469,205,-100),(469,206,-1000),(469,208,-100),(469,209,-100),(469,210,-100),(469,211,-1000),(469,212,-100),(469,213,-1000),(469,214,-100),(469,215,100),(469,216,-1000),(471,51,-800),(471,52,-800),(471,53,-800),(471,54,-800),(471,55,-800),(471,56,-800),(471,57,-800),(471,58,-800),(471,59,-800),(471,60,-800),(471,61,-800),(471,62,-800),(471,178,-800),(471,180,-800),(471,211,200),(471,661,-800),(471,1106,-800),(472,51,-1000),(472,52,-1000),(472,53,-1000),(472,54,-1000),(472,55,-1000),(472,56,-1000),(472,57,-1000),(472,58,-1000),(472,59,-1000),(472,60,-1000),(472,61,-1000),(472,62,-1000),(472,178,-1000),(472,180,-1000),(472,661,-1000),(472,1106,-1000),(473,5,-300),(473,11,-300),(473,56,-500),(473,59,-500),(473,60,-500),(473,178,-500),(474,51,-99),(474,52,-99),(474,53,-99),(474,54,-99),(474,55,-99),(474,56,-99),(474,57,-99),(474,58,-99),(474,59,-99),(474,60,-99),(474,61,-99),(474,62,-99),(474,178,-99),(474,180,-99),(474,661,-99),(474,1106,-99),(475,51,-875),(475,52,-875),(475,53,-875),(475,54,-875),(475,55,-875),(475,56,-875),(475,57,-875),(475,58,-875),(475,59,-875),(475,60,-875),(475,61,-875),(475,62,-875),(475,178,-875),(475,180,-875),(475,661,-875),(475,1106,-875),(548,51,-1000),(548,52,-1000),(548,53,-1000),(548,54,-1000),(548,55,-1000),(548,56,-1000),(548,57,-1000),(548,58,-1000),(548,59,-1000),(548,60,-1000),(548,61,-1000),(548,62,-1000),(548,178,-1000),(548,180,-1000),(548,661,-1000),(548,1106,-1000),(680,51,-100),(680,52,-100),(680,53,-100),(680,54,-100),(680,55,-100),(680,56,-100),(680,57,-100),(680,58,-100),(680,59,-100),(680,60,-100),(680,61,-100),(680,62,-100),(680,178,-100),(680,180,-100),(680,661,-100),(680,1106,-100),(711,51,-750),(711,52,-750),(711,53,-750),(711,54,-750),(711,55,-750),(711,56,-750),(711,57,-750),(711,58,-750),(711,59,-750),(711,60,-750),(711,61,-750),(711,62,-750),(711,178,-750),(711,180,-750),(711,661,-750),(711,1106,-750),(712,51,-750),(712,52,-750),(712,53,-750),(712,54,-750),(712,55,-750),(712,56,-750),(712,57,-750),(712,58,-750),(712,59,-750),(712,60,-750),(712,61,-750),(712,62,-750),(712,178,-750),(712,180,-750),(712,661,-750),(712,1106,-750),(713,51,-1000),(713,52,-1000),(713,53,-1000),(713,54,-1000),(713,55,-1000),(713,56,-1000),(713,57,-1000),(713,58,-1000),(713,59,-1000),(713,60,-1000),(713,61,-1000),(713,62,-1000),(713,178,-1000),(713,180,-1000),(713,661,-1000),(713,1106,-1000),(714,51,-1000),(714,52,-1000),(714,53,-1000),(714,54,-1000),(714,55,-1000),(714,56,-1000),(714,57,-1000),(714,58,-1000),(714,59,-1000),(714,60,-1000),(714,61,-1000),(714,62,-1000),(714,178,-1000),(714,180,-1000),(714,661,-1000),(714,1106,-1000),(715,51,-1000),(715,52,-1000),(715,53,-1000),(715,54,-1000),(715,55,-1000),(715,56,-1000),(715,57,-1000),(715,58,-1000),(715,59,-1000),(715,60,-1000),(715,61,-1000),(715,62,-1000),(715,178,-1000),(715,180,-1000),(715,661,-1000),(715,1106,-1000),(716,51,-1000),(716,52,-1000),(716,53,-1000),(716,54,-1000),(716,55,-1000),(716,56,-1000),(716,57,-1000),(716,58,-1000),(716,59,-1000),(716,60,-1000),(716,61,-1000),(716,62,-1000),(716,178,-1000),(716,180,-1000),(716,661,-1000),(716,1106,-1000),(720,51,375),(720,52,375),(720,54,375),(720,55,375),(720,56,0),(720,58,375),(720,59,0),(720,60,0),(720,61,375),(720,180,375),(720,661,375),(720,1106,375),(721,51,375),(721,52,375),(721,54,375),(721,55,375),(721,56,0),(721,58,375),(721,59,0),(721,60,0),(721,61,375),(721,180,375),(721,661,375),(721,1106,375),(1007,51,-2000),(1007,52,-2000),(1007,53,-2000),(1007,54,-2000),(1007,55,-2000),(1007,56,-2000),(1007,57,-2000),(1007,58,-2000),(1007,59,-2000),(1007,60,-2000),(1007,61,-2000),(1007,62,-2000),(1007,178,-2000),(1007,180,-2000),(1007,661,-2000),(1007,1106,-2000),(1010,51,-2000),(1010,52,-2000),(1010,53,-2000),(1010,54,-2000),(1010,55,-2000),(1010,56,-2000),(1010,57,-2000),(1010,58,-2000),(1010,59,-2000),(1010,60,-2000),(1010,61,-2000),(1010,62,-2000),(1010,178,-2000),(1010,180,-2000),(1010,661,-2000),(1010,1106,-2000),(1013,51,-2000),(1013,52,-2000),(1013,53,-2000),(1013,54,-2000),(1013,55,-2000),(1013,56,-2000),(1013,57,-2000),(1013,58,-2000),(1013,59,-2000),(1013,60,-2000),(1013,61,-2000),(1013,62,-2000),(1013,178,-2000),(1013,180,-2000),(1013,661,-2000),(1013,1106,-2000),(1016,51,-800),(1016,52,-800),(1016,53,-800),(1016,54,-800),(1016,55,-800),(1016,56,-800),(1016,57,-800),(1016,58,-800),(1016,59,-800),(1016,60,-800),(1016,61,-800),(1016,62,-800),(1016,178,-800),(1016,180,-800),(1016,661,-800),(1016,1106,-800),(1021,201,-100),(1021,202,-100),(1021,203,-100),(1021,204,-600),(1021,205,-100),(1021,206,-100),(1021,207,-100),(1021,208,-600),(1021,209,-100),(1021,210,-600),(1021,211,-100),(1021,212,-600),(1021,213,-100),(1021,214,-100),(1021,215,-600),(1021,216,-100),(1021,396,-100),(1022,201,-1000),(1022,203,-1000),(1022,206,-1000),(1022,211,-1000),(1022,213,-500),(1023,201,-600),(1023,202,-100),(1023,203,-600),(1023,204,-100),(1023,205,-100),(1023,206,-600),(1023,207,-100),(1023,208,-100),(1023,209,-100),(1023,210,-100),(1023,211,-600),(1023,212,-100),(1023,213,-100),(1023,214,-100),(1023,215,-100),(1023,216,-100),(1023,396,-100),(1024,51,-2000),(1024,52,-2000),(1024,53,-2000),(1024,54,-2000),(1024,55,-2000),(1024,56,-2000),(1024,57,-2000),(1024,58,-2000),(1024,59,-2000),(1024,60,-2000),(1024,61,-2000),(1024,62,-2000),(1024,178,-2000),(1024,180,-2000),(1024,661,-2000),(1024,1106,-2000),(1025,51,-2000),(1025,52,-2000),(1025,53,-2000),(1025,54,-2000),(1025,55,-2000),(1025,56,-2000),(1025,57,-2000),(1025,58,-2000),(1025,59,-2000),(1025,60,-2000),(1025,61,-2000),(1025,62,-2000),(1025,178,-2000),(1025,180,-2000),(1025,661,-2000),(1025,1106,-2000),(1026,51,-2000),(1026,52,-2000),(1026,53,-2000),(1026,54,-2000),(1026,55,-2000),(1026,56,-2000),(1026,57,-2000),(1026,58,-2000),(1026,59,-2000),(1026,60,-2000),(1026,61,-2000),(1026,62,-2000),(1026,178,-2000),(1026,180,-2000),(1026,661,-2000),(1026,1106,-2000),(1027,51,-2000),(1027,52,-2000),(1027,53,-2000),(1027,54,-2000),(1027,55,-2000),(1027,56,-2000),(1027,57,-2000),(1027,58,-2000),(1027,59,-2000),(1027,60,-2000),(1027,61,-2000),(1027,62,-2000),(1027,178,-2000),(1027,180,-2000),(1027,661,-2000),(1027,1106,-2000),(1028,51,-2000),(1028,52,-2000),(1028,53,-2000),(1028,54,-2000),(1028,55,-2000),(1028,56,-2000),(1028,57,-2000),(1028,58,-2000),(1028,59,-2000),(1028,60,-2000),(1028,61,-2000),(1028,62,-2000),(1028,178,-2000),(1028,180,-2000),(1028,661,-2000),(1028,1106,-2000),(1029,51,-2000),(1029,52,-2000),(1029,53,-2000),(1029,54,-2000),(1029,55,-2000),(1029,56,-2000),(1029,57,-2000),(1029,58,-2000),(1029,59,-2000),(1029,60,-2000),(1029,61,-2000),(1029,62,-2000),(1029,178,-2000),(1029,180,-2000),(1029,661,-2000),(1029,1106,-2000),(1030,51,-2000),(1030,52,-2000),(1030,53,-2000),(1030,54,-2000),(1030,55,-2000),(1030,56,-2000),(1030,57,-2000),(1030,58,-2000),(1030,59,-2000),(1030,60,-2000),(1030,61,-2000),(1030,62,-2000),(1030,178,-2000),(1030,180,-2000),(1030,661,-2000),(1030,1106,-2000),(1031,51,-2000),(1031,52,-2000),(1031,53,-2000),(1031,54,-2000),(1031,55,-2000),(1031,56,-2000),(1031,57,-2000),(1031,58,-2000),(1031,59,-2000),(1031,60,-2000),(1031,61,-2000),(1031,62,-2000),(1031,178,-2000),(1031,180,-2000),(1031,661,-2000),(1031,1106,-2000),(1032,51,-2000),(1032,52,-2000),(1032,53,-2000),(1032,54,-2000),(1032,55,-2000),(1032,56,-2000),(1032,57,-2000),(1032,58,-2000),(1032,59,-2000),(1032,60,-2000),(1032,61,-2000),(1032,62,-2000),(1032,178,-2000),(1032,180,-2000),(1032,661,-2000),(1032,1106,-2000),(1033,51,-2000),(1033,52,-2000),(1033,53,-2000),(1033,54,-2000),(1033,55,-2000),(1033,56,-2000),(1033,57,-2000),(1033,58,-2000),(1033,59,-2000),(1033,60,-2000),(1033,61,-2000),(1033,62,-2000),(1033,178,-2000),(1033,180,-2000),(1033,661,-2000),(1033,1106,-2000),(1034,51,-2000),(1034,52,-2000),(1034,53,-2000),(1034,54,-2000),(1034,55,-2000),(1034,56,-2000),(1034,57,-2000),(1034,58,-2000),(1034,59,-2000),(1034,60,-2000),(1034,61,-2000),(1034,62,-2000),(1034,178,-2000),(1034,180,-2000),(1034,661,-2000),(1034,1106,-2000),(1035,51,-2000),(1035,52,-2000),(1035,53,-2000),(1035,54,-2000),(1035,55,-2000),(1035,56,-2000),(1035,57,-2000),(1035,58,-2000),(1035,59,-2000),(1035,60,-2000),(1035,61,-2000),(1035,62,-2000),(1035,178,-2000),(1035,180,-2000),(1035,661,-2000),(1035,1106,-2000),(1049,51,-2000),(1049,52,-2000),(1049,53,-2000),(1049,54,-2000),(1049,55,-2000),(1049,56,-2000),(1049,57,-2000),(1049,58,-2000),(1049,59,-2000),(1049,60,-2000),(1049,61,-2000),(1049,62,-2000),(1049,178,-2000),(1049,180,-2000),(1049,661,-2000),(1049,1106,-2000),(1051,51,-2000),(1051,52,-2000),(1051,53,-2000),(1051,54,-2000),(1051,55,-2000),(1051,56,-2000),(1051,57,-2000),(1051,58,-2000),(1051,59,-2000),(1051,60,-2000),(1051,61,-2000),(1051,62,-2000),(1051,178,-2000),(1051,180,-2000),(1051,661,-2000),(1051,1106,-2000),(1052,51,-2000),(1052,52,-2000),(1052,53,-2000),(1052,54,-2000),(1052,55,-2000),(1052,56,-2000),(1052,57,-2000),(1052,58,-2000),(1052,59,-2000),(1052,60,-2000),(1052,61,-2000),(1052,62,-2000),(1052,178,-2000),(1052,180,-2000),(1052,661,-2000),(1052,1106,-2000),(1053,51,-2000),(1053,52,-2000),(1053,53,-2000),(1053,54,-2000),(1053,55,-2000),(1053,56,-2000),(1053,57,-2000),(1053,58,-2000),(1053,59,-2000),(1053,60,-2000),(1053,61,-2000),(1053,62,-2000),(1053,178,-2000),(1053,180,-2000),(1053,661,-2000),(1053,1106,-2000),(1054,51,-2000),(1054,52,-2000),(1054,53,-2000),(1054,54,-2000),(1054,55,-2000),(1054,56,-2000),(1054,57,-2000),(1054,58,-2000),(1054,59,-2000),(1054,60,-2000),(1054,61,-2000),(1054,62,-2000),(1054,178,-2000),(1054,180,-2000),(1054,661,-2000),(1054,1106,-2000),(1055,51,-500),(1055,52,-500),(1055,53,-500),(1055,54,-500),(1055,55,-500),(1055,56,-500),(1055,57,-500),(1055,58,-500),(1055,59,-500),(1055,60,-500),(1055,61,-500),(1055,62,-500),(1055,178,-500),(1055,180,-500),(1055,661,-500),(1055,1106,-500),(1056,51,-2000),(1056,52,-2000),(1056,53,-2000),(1056,54,-2000),(1056,55,-2000),(1056,56,-2000),(1056,57,-2000),(1056,58,-2000),(1056,59,-2000),(1056,60,-2000),(1056,61,-2000),(1056,62,-2000),(1056,178,-2000),(1056,180,-2000),(1056,661,-2000),(1056,1106,-2000),(1058,51,-2000),(1058,52,-2000),(1058,53,-2000),(1058,54,-2000),(1058,55,-2000),(1058,56,-2000),(1058,57,-2000),(1058,58,-2000),(1058,59,-2000),(1058,60,-2000),(1058,61,-2000),(1058,62,-2000),(1058,178,-2000),(1058,180,-2000),(1058,661,-2000),(1058,1106,-2000),(1059,51,-1000),(1059,52,-1000),(1059,53,-1000),(1059,54,-1000),(1059,55,-1000),(1059,56,-1000),(1059,57,-1000),(1059,58,-1000),(1059,59,-1000),(1059,60,-1000),(1059,61,-1000),(1059,62,-1000),(1059,178,-1000),(1059,180,-1000),(1059,661,-1000),(1059,1106,-1000),(1062,51,-500),(1062,52,-500),(1062,53,-500),(1062,54,-500),(1062,55,-500),(1062,56,-500),(1062,57,-500),(1062,58,-500),(1062,59,-500),(1062,60,-500),(1062,61,-500),(1062,62,-500),(1062,178,-500),(1062,180,-500),(1062,661,-500),(1062,1106,-500),(1066,51,-1000),(1066,52,-1000),(1066,53,-1000),(1066,54,-1000),(1066,55,-1000),(1066,56,-1000),(1066,57,-1000),(1066,58,-1000),(1066,59,-1000),(1066,60,-1000),(1066,61,-1000),(1066,62,-1000),(1066,178,-1000),(1066,180,-1000),(1066,661,-1000),(1066,1106,-1000),(1068,51,-1000),(1068,52,-1000),(1068,53,-1000),(1068,54,-1000),(1068,55,-1000),(1068,56,-1000),(1068,57,-1000),(1068,58,-1000),(1068,59,-1000),(1068,60,-1000),(1068,61,-1000),(1068,62,-1000),(1068,178,-1000),(1068,180,-1000),(1068,661,-1000),(1068,1106,-1000),(1069,51,-1000),(1069,52,-1000),(1069,53,-1000),(1069,54,-1000),(1069,55,-1000),(1069,56,-1000),(1069,57,-1000),(1069,58,-1000),(1069,59,-1000),(1069,60,-1000),(1069,61,-1000),(1069,62,-1000),(1069,178,-1000),(1069,180,-1000),(1069,661,-1000),(1069,1106,-1000),(1070,51,-1000),(1070,52,-1000),(1070,53,-1000),(1070,54,-1000),(1070,55,-1000),(1070,56,-1000),(1070,57,-1000),(1070,58,-1000),(1070,59,-1000),(1070,60,-1000),(1070,61,-1000),(1070,62,-1000),(1070,178,-1000),(1070,180,-1000),(1070,661,-1000),(1070,1106,-1000),(1071,51,-1000),(1071,52,-1000),(1071,53,-1000),(1071,54,-1000),(1071,55,-1000),(1071,56,-1000),(1071,57,-1000),(1071,58,-1000),(1071,59,-1000),(1071,60,-1000),(1071,61,-1000),(1071,62,-1000),(1071,178,-1000),(1071,180,-1000),(1071,661,-1000),(1071,1106,-1000),(1072,51,-1000),(1072,52,-1000),(1072,53,-1000),(1072,54,-1000),(1072,55,-1000),(1072,56,-1000),(1072,57,-1000),(1072,58,-1000),(1072,59,-1000),(1072,60,-1000),(1072,61,-1000),(1072,62,-1000),(1072,178,-1000),(1072,180,-1000),(1072,661,-1000),(1072,1106,-1000),(1073,51,-1000),(1073,52,-1000),(1073,53,-1000),(1073,54,-1000),(1073,55,-1000),(1073,56,-1000),(1073,57,-1000),(1073,58,-1000),(1073,59,-1000),(1073,60,-1000),(1073,61,-1000),(1073,62,-1000),(1073,178,-1000),(1073,180,-1000),(1073,661,-1000),(1073,1106,-1000),(1074,51,-1000),(1074,52,-1000),(1074,53,-1000),(1074,54,-1000),(1074,55,-1000),(1074,56,-1000),(1074,57,-1000),(1074,58,-1000),(1074,59,-1000),(1074,60,-1000),(1074,61,-1000),(1074,62,-1000),(1074,178,-1000),(1074,180,-1000),(1074,661,-1000),(1074,1106,-1000),(1075,51,-1000),(1075,52,-1000),(1075,53,-1000),(1075,54,-1000),(1075,55,-1000),(1075,56,-1000),(1075,57,-1000),(1075,58,-1000),(1075,59,-1000),(1075,60,-1000),(1075,61,-1000),(1075,62,-1000),(1075,178,-1000),(1075,180,-1000),(1075,661,-1000),(1075,1106,-1000),(1076,51,-1000),(1076,52,-1000),(1076,53,-1000),(1076,54,-1000),(1076,55,-1000),(1076,56,-1000),(1076,57,-1000),(1076,58,-1000),(1076,59,-1000),(1076,60,-1000),(1076,61,-1000),(1076,62,-1000),(1076,178,-1000),(1076,180,-1000),(1076,661,-1000),(1076,1106,-1000),(1077,51,-1000),(1077,52,-1000),(1077,53,-1000),(1077,54,-1000),(1077,55,-1000),(1077,56,-1000),(1077,57,-1000),(1077,58,-1000),(1077,59,-1000),(1077,60,-1000),(1077,61,-1000),(1077,62,-1000),(1077,178,-1000),(1077,180,-1000),(1077,661,-1000),(1077,1106,-1000),(1078,51,-1000),(1078,52,-1000),(1078,53,-1000),(1078,54,-1000),(1078,55,-1000),(1078,56,-1000),(1078,57,-1000),(1078,58,-1000),(1078,59,-1000),(1078,60,-1000),(1078,61,-1000),(1078,62,-1000),(1078,178,-1000),(1078,180,-1000),(1078,661,-1000),(1078,1106,-1000),(1079,51,-1000),(1079,52,-1000),(1079,53,-1000),(1079,54,-1000),(1079,55,-1000),(1079,56,-1000),(1079,57,-1000),(1079,58,-1000),(1079,59,-1000),(1079,60,-1000),(1079,61,-1000),(1079,62,-1000),(1079,178,-1000),(1079,180,-1000),(1079,661,-1000),(1079,1106,-1000),(1080,51,-1000),(1080,52,-1000),(1080,53,-1000),(1080,54,-1000),(1080,55,-1000),(1080,56,-1000),(1080,57,-1000),(1080,58,-1000),(1080,59,-1000),(1080,60,-1000),(1080,61,-1000),(1080,62,-1000),(1080,178,-1000),(1080,180,-1000),(1080,661,-1000),(1080,1106,-1000),(1086,51,-2000),(1086,52,-2000),(1086,53,-2000),(1086,54,-2000),(1086,55,-2000),(1086,56,-2000),(1086,57,-2000),(1086,58,-2000),(1086,59,-2000),(1086,60,-2000),(1086,61,-2000),(1086,62,-2000),(1086,178,-2000),(1086,180,-2000),(1086,661,-2000),(1086,1106,-2000),(1088,51,-1000),(1088,52,-1000),(1088,53,-1000),(1088,54,-1000),(1088,55,-1000),(1088,56,-1000),(1088,57,-1000),(1088,58,-1000),(1088,59,-1000),(1088,60,-1000),(1088,61,-1000),(1088,62,-1000),(1088,178,-1000),(1088,180,-1000),(1088,661,-1000),(1088,1106,-1000),(1089,51,-1000),(1089,52,-1000),(1089,53,-1000),(1089,54,-1000),(1089,55,-1000),(1089,56,-1000),(1089,57,-1000),(1089,58,-1000),(1089,59,-1000),(1089,60,-1000),(1089,61,-1000),(1089,62,-1000),(1089,178,-1000),(1089,180,-1000),(1089,661,-1000),(1089,1106,-1000),(1090,51,-1000),(1090,52,-1000),(1090,53,-1000),(1090,54,-1000),(1090,55,-1000),(1090,56,-1000),(1090,57,-1000),(1090,58,-1000),(1090,59,-1000),(1090,60,-1000),(1090,61,-1000),(1090,62,-1000),(1090,178,-1000),(1090,180,-1000),(1090,661,-1000),(1090,1106,-1000),(1091,51,-1000),(1091,52,-1000),(1091,53,-1000),(1091,54,-1000),(1091,55,-1000),(1091,56,-1000),(1091,57,-1000),(1091,58,-1000),(1091,59,-1000),(1091,60,-1000),(1091,61,-1000),(1091,62,-1000),(1091,178,-1000),(1091,180,-1000),(1091,661,-1000),(1091,1106,-1000),(1092,51,-1000),(1092,52,-1000),(1092,53,-1000),(1092,54,-1000),(1092,55,-1000),(1092,56,-1000),(1092,57,-1000),(1092,58,-1000),(1092,59,-1000),(1092,60,-1000),(1092,61,-1000),(1092,62,-1000),(1092,178,-1000),(1092,180,-1000),(1092,661,-1000),(1092,1106,-1000),(1093,51,-1000),(1093,52,-1000),(1093,53,-1000),(1093,54,-1000),(1093,55,-1000),(1093,56,-1000),(1093,57,-1000),(1093,58,-1000),(1093,59,-1000),(1093,60,-1000),(1093,61,-1000),(1093,62,-1000),(1093,178,-1000),(1093,180,-1000),(1093,661,-1000),(1093,1106,-1000),(1094,51,-1000),(1094,52,-1000),(1094,53,-1000),(1094,54,-1000),(1094,55,-1000),(1094,56,-1000),(1094,57,-1000),(1094,58,-1000),(1094,59,-1000),(1094,60,-1000),(1094,61,-1000),(1094,62,-1000),(1094,178,-1000),(1094,180,-1000),(1094,661,-1000),(1094,1106,-1000),(1100,51,-1000),(1100,52,-1000),(1100,53,-1000),(1100,54,-1000),(1100,55,-1000),(1100,56,-1000),(1100,57,-1000),(1100,58,-1000),(1100,59,-1000),(1100,60,-1000),(1100,61,-1000),(1100,62,-1000),(1100,178,-1000),(1100,180,-1000),(1100,661,-1000),(1100,1106,-1000),(1101,51,-1000),(1101,52,-1000),(1101,53,-1000),(1101,54,-1000),(1101,55,-1000),(1101,56,-1000),(1101,57,-1000),(1101,58,-1000),(1101,59,-1000),(1101,60,-1000),(1101,61,-1000),(1101,62,-1000),(1101,178,-1000),(1101,180,-1000),(1101,661,-1000),(1101,1106,-1000),(1103,51,-1000),(1103,52,-1000),(1103,53,-1000),(1103,54,-1000),(1103,55,-1000),(1103,56,-1000),(1103,57,-1000),(1103,58,-1000),(1103,59,-1000),(1103,60,-1000),(1103,61,-1000),(1103,62,-1000),(1103,178,-1000),(1103,180,-1000),(1103,661,-1000),(1103,1106,-1000),(1104,51,-500),(1104,52,-500),(1104,53,-500),(1104,54,-500),(1104,55,-500),(1104,56,-500),(1104,57,-500),(1104,58,-500),(1104,59,-500),(1104,60,-500),(1104,61,-500),(1104,62,-500),(1104,178,-500),(1104,180,-500),(1104,661,-500),(1104,1106,-500),(1105,51,-200),(1105,52,-200),(1105,53,-200),(1105,54,-200),(1105,55,-200),(1105,56,-200),(1105,57,-200),(1105,58,-200),(1105,59,-200),(1105,60,-200),(1105,61,-200),(1105,62,-200),(1105,178,-200),(1105,180,-200),(1105,661,-200),(1105,1106,-200),(1107,51,-700),(1107,52,-700),(1107,53,-700),(1107,54,-700),(1107,55,-700),(1107,56,-700),(1107,57,-700),(1107,58,-700),(1107,59,-700),(1107,60,-700),(1107,61,-700),(1107,62,-700),(1107,178,-700),(1107,180,-700),(1107,661,-700),(1107,1106,-700),(1111,51,-1000),(1111,52,-1000),(1111,53,-1000),(1111,54,-1000),(1111,55,-1000),(1111,56,-1000),(1111,57,-1000),(1111,58,-1000),(1111,59,-1000),(1111,60,-1000),(1111,61,-1000),(1111,62,-1000),(1111,178,-1000),(1111,180,-1000),(1111,661,-1000),(1111,1106,-1000),(1112,51,-1000),(1112,52,-1000),(1112,53,-1000),(1112,54,-1000),(1112,55,-1000),(1112,56,-1000),(1112,57,-1000),(1112,58,-1000),(1112,59,-1000),(1112,60,-1000),(1112,61,-1000),(1112,62,-1000),(1112,178,-1000),(1112,180,-1000),(1112,661,-1000),(1112,1106,-1000),(1113,51,-1000),(1113,52,-1000),(1113,53,-1000),(1113,54,-1000),(1113,55,-1000),(1113,56,-1000),(1113,57,-1000),(1113,58,-1000),(1113,59,-1000),(1113,60,-1000),(1113,61,-1000),(1113,62,-1000),(1113,178,-1000),(1113,180,-1000),(1113,661,-1000),(1113,1106,-1000),(1114,51,-1000),(1114,52,-1000),(1114,53,-1000),(1114,54,-1000),(1114,55,-1000),(1114,56,-1000),(1114,57,-1000),(1114,58,-1000),(1114,59,-1000),(1114,60,-1000),(1114,61,-1000),(1114,62,-1000),(1114,178,-1000),(1114,180,-1000),(1114,661,-1000),(1114,1106,-1000),(1115,51,-1000),(1115,52,-1000),(1115,53,-1000),(1115,54,-1000),(1115,55,-1000),(1115,56,-1000),(1115,57,-1000),(1115,58,-1000),(1115,59,-1000),(1115,60,-1000),(1115,61,-1000),(1115,62,-1000),(1115,178,-1000),(1115,180,-1000),(1115,661,-1000),(1115,1106,-1000),(1120,51,-1000),(1120,52,-1000),(1120,53,-1000),(1120,54,-1000),(1120,55,-1000),(1120,56,-1000),(1120,57,-1000),(1120,58,-1000),(1120,59,-1000),(1120,60,-1000),(1120,61,-1000),(1120,62,-1000),(1120,178,-1000),(1120,180,-1000),(1120,661,-1000),(1120,1106,-1000),(1121,51,-1000),(1121,52,-1000),(1121,53,-1000),(1121,54,-1000),(1121,55,-1000),(1121,56,-1000),(1121,57,-1000),(1121,58,-1000),(1121,59,-1000),(1121,60,-1000),(1121,61,-1000),(1121,62,-1000),(1121,178,-1000),(1121,180,-1000),(1121,661,-1000),(1121,1106,-1000),(1123,51,-100),(1123,52,-100),(1123,53,-100),(1123,54,-100),(1123,55,-100),(1123,56,-100),(1123,57,-100),(1123,58,-100),(1123,59,-100),(1123,60,-100),(1123,61,-100),(1123,62,-100),(1123,178,-100),(1123,180,-100),(1123,661,-100),(1123,1106,-100),(1124,51,-1000),(1124,52,-1000),(1124,53,-1000),(1124,54,-1000),(1124,55,-1000),(1124,56,-1000),(1124,57,-1000),(1124,58,-1000),(1124,59,-1000),(1124,60,-1000),(1124,61,-1000),(1124,62,-1000),(1124,178,-1000),(1124,180,-1000),(1124,661,-1000),(1124,1106,-1000),(1125,51,-1000),(1125,52,-1000),(1125,53,-1000),(1125,54,-1000),(1125,55,-1000),(1125,56,-1000),(1125,57,-1000),(1125,58,-1000),(1125,59,-1000),(1125,60,-1000),(1125,61,-1000),(1125,62,-1000),(1125,178,-1000),(1125,180,-1000),(1125,661,-1000),(1125,1106,-1000),(1134,51,-50),(1134,52,-50),(1134,53,-50),(1134,54,-50),(1134,55,-50),(1134,56,-50),(1134,57,-50),(1134,58,-50),(1134,59,-50),(1134,60,-50),(1134,61,-50),(1134,62,-50),(1134,178,-50),(1134,180,-50),(1134,661,-50),(1134,1106,-50),(1135,51,-150),(1135,52,-150),(1135,53,-150),(1135,54,-150),(1135,55,-150),(1135,56,-150),(1135,57,-150),(1135,58,-150),(1135,59,-150),(1135,60,-150),(1135,61,-150),(1135,62,-150),(1135,178,-150),(1135,180,-150),(1135,661,-150),(1135,1106,-150),(1137,1106,100),(1140,51,-1000),(1140,52,-1000),(1140,53,-1000),(1140,54,-1000),(1140,55,-1000),(1140,56,-1000),(1140,57,-1000),(1140,58,-1000),(1140,59,-1000),(1140,60,-1000),(1140,61,-1000),(1140,62,-1000),(1140,178,-1000),(1140,180,-1000),(1140,661,-1000),(1140,1106,-1000),(1141,51,-1000),(1141,52,-1000),(1141,53,-1000),(1141,54,-1000),(1141,55,-1000),(1141,56,-1000),(1141,57,-1000),(1141,58,-1000),(1141,59,-1000),(1141,60,-1000),(1141,61,-1000),(1141,62,-1000),(1141,178,-1000),(1141,180,-1000),(1141,661,-1000),(1141,1106,-1000),(1142,51,-1000),(1142,52,-1000),(1142,53,-1000),(1142,54,-1000),(1142,55,-1000),(1142,56,-1000),(1142,57,-1000),(1142,58,-1000),(1142,59,-1000),(1142,60,-1000),(1142,61,-1000),(1142,62,-1000),(1142,178,-1000),(1142,180,-1000),(1142,661,-1000),(1142,1106,-1000),(1143,51,-500),(1143,52,-500),(1143,53,-500),(1143,54,-500),(1143,55,-500),(1143,56,-500),(1143,57,-500),(1143,58,-500),(1143,59,-500),(1143,60,-500),(1143,61,-500),(1143,62,-500),(1143,178,-500),(1143,180,-500),(1143,661,-500),(1143,1106,-500),(1144,51,-250),(1144,52,-250),(1144,53,-250),(1144,54,-250),(1144,55,-250),(1144,56,-250),(1144,57,-250),(1144,58,-250),(1144,59,-250),(1144,60,-250),(1144,61,-250),(1144,62,-250),(1144,178,-250),(1144,180,-250),(1144,661,-250),(1144,1106,-250),(1145,51,-500),(1145,52,-500),(1145,53,-500),(1145,54,-500),(1145,55,-500),(1145,56,-500),(1145,57,-500),(1145,58,-500),(1145,59,-500),(1145,60,-500),(1145,61,-500),(1145,62,-500),(1145,178,-500),(1145,180,-500),(1145,661,-500),(1145,1106,-500),(1146,51,-800),(1146,52,-800),(1146,53,-800),(1146,54,-800),(1146,55,-800),(1146,56,-800),(1146,57,-800),(1146,58,-800),(1146,59,-800),(1146,60,-800),(1146,61,-800),(1146,62,-800),(1146,178,-800),(1146,180,-800),(1146,661,-800),(1146,1106,-800),(1147,51,-800),(1147,52,-800),(1147,53,-800),(1147,54,-800),(1147,55,-800),(1147,56,-800),(1147,57,-800),(1147,58,-800),(1147,59,-800),(1147,60,-800),(1147,61,-800),(1147,62,-800),(1147,178,-800),(1147,180,-800),(1147,661,-800),(1147,1106,-800),(1148,51,-800),(1148,52,-800),(1148,53,-800),(1148,54,-800),(1148,55,-800),(1148,56,-800),(1148,57,-800),(1148,58,-800),(1148,59,-800),(1148,60,-800),(1148,61,-800),(1148,62,-800),(1148,178,-800),(1148,180,-800),(1148,661,-800),(1148,1106,-800),(1149,51,-800),(1149,52,-800),(1149,53,-800),(1149,54,-800),(1149,55,-800),(1149,56,-800),(1149,57,-800),(1149,58,-800),(1149,59,-800),(1149,60,-800),(1149,61,-800),(1149,62,-800),(1149,178,-800),(1149,180,-800),(1149,661,-800),(1149,1106,-800),(1166,51,-1000),(1166,52,-1000),(1166,53,-1000),(1166,54,-1000),(1166,55,-1000),(1166,56,-1000),(1166,57,-1000),(1166,58,-1000),(1166,59,-1000),(1166,60,-1000),(1166,61,-1000),(1166,62,-1000),(1166,178,-1000),(1166,180,-1000),(1166,661,-1000),(1166,1106,-1000),(1169,51,-100),(1169,52,-100),(1169,53,-100),(1169,54,-100),(1169,55,-100),(1169,56,-100),(1169,57,-100),(1169,58,-100),(1169,59,-100),(1169,60,-100),(1169,61,-100),(1169,62,-100),(1169,178,-100),(1169,180,-100),(1169,661,-100),(1169,1106,-100),(1170,51,-100),(1170,52,-100),(1170,53,-100),(1170,54,-100),(1170,55,-100),(1170,56,-100),(1170,57,-100),(1170,58,-100),(1170,59,-100),(1170,60,-100),(1170,61,-100),(1170,62,-100),(1170,178,-100),(1170,180,-100),(1170,661,-100),(1170,1106,-100),(1175,51,-1000),(1175,52,-1000),(1175,53,-1000),(1175,54,-1000),(1175,55,-1000),(1175,56,-1000),(1175,57,-1000),(1175,58,-1000),(1175,59,-1000),(1175,60,-1000),(1175,61,-1000),(1175,62,-1000),(1175,178,-1000),(1175,180,-1000),(1175,661,-1000),(1175,1106,-1000),(1176,51,-1000),(1176,52,-1000),(1176,53,-1000),(1176,54,-1000),(1176,55,-1000),(1176,56,-1000),(1176,57,-1000),(1176,58,-1000),(1176,59,-1000),(1176,60,-1000),(1176,61,-1000),(1176,62,-1000),(1176,178,-1000),(1176,180,-1000),(1176,661,-1000),(1176,1106,-1000),(1181,51,-1000),(1181,52,-1000),(1181,53,-1000),(1181,54,-1000),(1181,55,-1000),(1181,56,-1000),(1181,57,-1000),(1181,58,-1000),(1181,59,-1000),(1181,60,-1000),(1181,61,-1000),(1181,62,-1000),(1181,178,-1000),(1181,180,-1000),(1181,661,-1000),(1181,1106,-1000),(1182,51,-1000),(1182,52,-1000),(1182,53,-1000),(1182,54,-1000),(1182,55,-1000),(1182,56,-1000),(1182,57,-1000),(1182,58,-1000),(1182,59,-1000),(1182,60,-1000),(1182,61,-1000),(1182,62,-1000),(1182,178,-1000),(1182,180,-1000),(1182,661,-1000),(1182,1106,-1000),(1183,51,-500),(1183,52,-500),(1183,53,-500),(1183,54,-500),(1183,55,-500),(1183,56,-500),(1183,57,-500),(1183,58,-500),(1183,59,-500),(1183,60,-500),(1183,61,-500),(1183,62,-500),(1183,178,-500),(1183,180,-500),(1183,661,-500),(1183,1106,-500),(1184,51,-500),(1184,52,-500),(1184,53,-500),(1184,54,-500),(1184,55,-500),(1184,56,-500),(1184,57,-500),(1184,58,-500),(1184,59,-500),(1184,60,-500),(1184,61,-500),(1184,62,-500),(1184,178,-500),(1184,180,-500),(1184,661,-500),(1184,1106,-500),(1185,51,-500),(1185,52,-500),(1185,53,-500),(1185,54,-500),(1185,55,-500),(1185,56,-500),(1185,57,-500),(1185,58,-500),(1185,59,-500),(1185,60,-500),(1185,61,-500),(1185,62,-500),(1185,178,-500),(1185,180,-500),(1185,661,-500),(1185,1106,-500),(1186,51,-1000),(1186,52,-1000),(1186,53,-1000),(1186,54,-1000),(1186,55,-1000),(1186,56,-1000),(1186,57,-1000),(1186,58,-1000),(1186,59,-1000),(1186,60,-1000),(1186,61,-1000),(1186,62,-1000),(1186,178,-1000),(1186,180,-1000),(1186,661,-1000),(1186,1106,-1000),(1188,51,-500),(1188,52,-500),(1188,53,-500),(1188,54,-500),(1188,55,-500),(1188,56,-500),(1188,57,-500),(1188,58,-500),(1188,59,-500),(1188,60,-500),(1188,61,-500),(1188,62,-500),(1188,178,-500),(1188,180,-500),(1188,661,-500),(1188,1106,-500),(1189,51,-500),(1189,52,-500),(1189,53,-500),(1189,54,-500),(1189,55,-500),(1189,56,-500),(1189,57,-500),(1189,58,-500),(1189,59,-500),(1189,60,-500),(1189,61,-500),(1189,62,-500),(1189,178,-500),(1189,180,-500),(1189,661,-500),(1189,1106,-500),(1190,51,-500),(1190,52,-500),(1190,53,-500),(1190,54,-500),(1190,55,-500),(1190,56,-500),(1190,57,-500),(1190,58,-500),(1190,59,-500),(1190,60,-500),(1190,61,-500),(1190,62,-500),(1190,178,-500),(1190,180,-500),(1190,661,-500),(1190,1106,-500),(1191,51,-500),(1191,52,-500),(1191,53,-500),(1191,54,-500),(1191,55,-500),(1191,56,-500),(1191,57,-500),(1191,58,-500),(1191,59,-500),(1191,60,-500),(1191,61,-500),(1191,62,-500),(1191,178,-500),(1191,180,-500),(1191,661,-500),(1191,1106,-500),(1192,51,-1000),(1192,52,-1000),(1192,53,-1000),(1192,54,-1000),(1192,55,-1000),(1192,56,-1000),(1192,57,-1000),(1192,58,-1000),(1192,59,-1000),(1192,60,-1000),(1192,61,-1000),(1192,62,-1000),(1192,178,-1000),(1192,180,-1000),(1192,661,-1000),(1192,1106,-1000),(1193,51,-1000),(1193,52,-1000),(1193,53,-1000),(1193,54,-1000),(1193,55,-1000),(1193,56,-1000),(1193,57,-1000),(1193,58,-1000),(1193,59,-1000),(1193,60,-1000),(1193,61,-1000),(1193,62,-1000),(1193,178,-1000),(1193,180,-1000),(1193,661,-1000),(1193,1106,-1000),(1194,51,-1000),(1194,52,-1000),(1194,53,-1000),(1194,54,-1000),(1194,55,-1000),(1194,56,-1000),(1194,57,-1000),(1194,58,-1000),(1194,59,-1000),(1194,60,-1000),(1194,61,-1000),(1194,62,-1000),(1194,178,-1000),(1194,180,-1000),(1194,661,-1000),(1194,1106,-1000),(1195,51,-1000),(1195,52,-1000),(1195,53,-1000),(1195,54,-1000),(1195,55,-1000),(1195,56,-1000),(1195,57,-1000),(1195,58,-1000),(1195,59,-1000),(1195,60,-1000),(1195,61,-1000),(1195,62,-1000),(1195,178,-1000),(1195,180,-1000),(1195,661,-1000),(1195,1106,-1000),(1196,51,-1000),(1196,52,-1000),(1196,53,-1000),(1196,54,-1000),(1196,55,-1000),(1196,56,-1000),(1196,57,-1000),(1196,58,-1000),(1196,59,-1000),(1196,60,-1000),(1196,61,-1000),(1196,62,-1000),(1196,178,-1000),(1196,180,-1000),(1196,661,-1000),(1196,1106,-1000),(1197,51,-1000),(1197,52,-1000),(1197,53,-1000),(1197,54,-1000),(1197,55,-1000),(1197,56,-1000),(1197,57,-1000),(1197,58,-1000),(1197,59,-1000),(1197,60,-1000),(1197,61,-1000),(1197,62,-1000),(1197,178,-1000),(1197,180,-1000),(1197,661,-1000),(1197,1106,-1000),(1198,51,-1000),(1198,52,-1000),(1198,53,-1000),(1198,54,-1000),(1198,55,-1000),(1198,56,-1000),(1198,57,-1000),(1198,58,-1000),(1198,59,-1000),(1198,60,-1000),(1198,61,-1000),(1198,62,-1000),(1198,178,-1000),(1198,180,-1000),(1198,661,-1000),(1198,1106,-1000),(1199,51,-100),(1199,52,-100),(1199,53,-100),(1199,54,-100),(1199,55,-100),(1199,56,-100),(1199,57,-100),(1199,58,-100),(1199,59,-100),(1199,60,-100),(1199,61,-100),(1199,62,-100),(1199,178,-100),(1199,180,-100),(1199,661,-100),(1199,1106,-100),(1200,51,-100),(1200,52,-100),(1200,53,-100),(1200,54,-100),(1200,55,-100),(1200,56,-100),(1200,57,-100),(1200,58,-100),(1200,59,-100),(1200,60,-100),(1200,61,-100),(1200,62,-100),(1200,178,-100),(1200,180,-100),(1200,661,-100),(1200,1106,-100),(1201,51,-1000),(1201,52,-1000),(1201,53,-1000),(1201,54,-1000),(1201,55,-1000),(1201,56,-1000),(1201,57,-1000),(1201,58,-1000),(1201,59,-1000),(1201,60,-1000),(1201,61,-1000),(1201,62,-1000),(1201,178,-1000),(1201,180,-1000),(1201,661,-1000),(1201,1106,-1000),(1202,51,-1000),(1202,52,-1000),(1202,53,-1000),(1202,54,-1000),(1202,55,-1000),(1202,56,-1000),(1202,57,-1000),(1202,58,-1000),(1202,59,-1000),(1202,60,-1000),(1202,61,-1000),(1202,62,-1000),(1202,178,-1000),(1202,180,-1000),(1202,661,-1000),(1202,1106,-1000),(1203,51,-300),(1203,52,-300),(1203,53,-300),(1203,54,-300),(1203,55,-300),(1203,56,-300),(1203,57,-300),(1203,58,-300),(1203,59,-300),(1203,60,-300),(1203,61,-300),(1203,62,-300),(1203,178,-300),(1203,180,-300),(1203,661,-300),(1203,1106,-300),(1204,51,-300),(1204,52,-300),(1204,53,-300),(1204,54,-300),(1204,55,-300),(1204,56,-300),(1204,57,-300),(1204,58,-300),(1204,59,-300),(1204,60,-300),(1204,61,-300),(1204,62,-300),(1204,178,-300),(1204,180,-300),(1204,661,-300),(1204,1106,-300),(1205,51,-300),(1205,52,-300),(1205,53,-300),(1205,54,-300),(1205,55,-300),(1205,56,-300),(1205,57,-300),(1205,58,-300),(1205,59,-300),(1205,60,-300),(1205,61,-300),(1205,62,-300),(1205,178,-300),(1205,180,-300),(1205,661,-300),(1205,1106,-300),(1209,51,-500),(1209,52,-500),(1209,53,-500),(1209,54,-500),(1209,55,-500),(1209,56,-500),(1209,57,-500),(1209,58,-500),(1209,59,-500),(1209,60,-500),(1209,61,-500),(1209,62,-500),(1209,178,-500),(1209,180,-500),(1209,661,-500),(1209,1106,-500),(1210,51,-1000),(1210,52,-1000),(1210,53,-1000),(1210,54,-1000),(1210,55,-1000),(1210,56,-1000),(1210,57,-1000),(1210,58,-1000),(1210,59,-1000),(1210,60,-1000),(1210,61,-1000),(1210,62,-1000),(1210,178,-1000),(1210,180,-1000),(1210,661,-1000),(1210,1106,-1000),(1211,51,100),(1211,52,100),(1211,53,100),(1211,54,100),(1211,55,100),(1211,56,100),(1211,57,100),(1211,58,100),(1211,59,100),(1211,60,100),(1211,61,100),(1211,62,100),(1211,178,100),(1211,180,100),(1211,661,100),(1211,1106,100),(1212,51,-100),(1212,52,-100),(1212,53,-100),(1212,54,-100),(1212,55,-100),(1212,56,-100),(1212,57,-100),(1212,58,-100),(1212,59,-100),(1212,60,-100),(1212,61,-100),(1212,62,-100),(1212,178,-100),(1212,180,-100),(1212,661,-100),(1212,1106,-100),(1213,51,-1000),(1213,52,-1000),(1213,53,-1000),(1213,54,-1000),(1213,55,-1000),(1213,56,-1000),(1213,57,-1000),(1213,58,-1000),(1213,59,-1000),(1213,60,-1000),(1213,61,-1000),(1213,62,-1000),(1213,178,-1000),(1213,180,-1000),(1213,661,-1000),(1213,1106,-1000),(1216,51,-1000),(1216,52,-1000),(1216,53,-1000),(1216,54,-1000),(1216,55,-1000),(1216,56,-1000),(1216,57,-1000),(1216,58,-1000),(1216,59,-1000),(1216,60,-1000),(1216,61,-1000),(1216,62,-1000),(1216,178,-1000),(1216,180,-1000),(1216,661,-1000),(1216,1106,-1000),(1220,51,-1000),(1220,52,-1000),(1220,53,-1000),(1220,54,-1000),(1220,55,-1000),(1220,56,-1000),(1220,57,-1000),(1220,58,-1000),(1220,59,-1000),(1220,60,-1000),(1220,61,-1000),(1220,62,-1000),(1220,178,-1000),(1220,180,-1000),(1220,661,-1000),(1220,1106,-1000),(1222,51,-500),(1222,52,-500),(1222,53,-500),(1222,54,-500),(1222,55,-500),(1222,56,-500),(1222,57,-500),(1222,58,-500),(1222,59,-500),(1222,60,-500),(1222,61,-500),(1222,62,-500),(1222,178,-500),(1222,180,-500),(1222,661,-500),(1222,1106,-500),(1223,51,-500),(1223,52,-500),(1223,53,-500),(1223,54,-500),(1223,55,-500),(1223,56,-500),(1223,57,-500),(1223,58,-500),(1223,59,-500),(1223,60,-500),(1223,61,-500),(1223,62,-500),(1223,178,-500),(1223,180,-500),(1223,661,-500),(1223,1106,-500),(1224,51,-500),(1224,52,-500),(1224,53,-500),(1224,54,-500),(1224,55,-500),(1224,56,-500),(1224,57,-500),(1224,58,-500),(1224,59,-500),(1224,60,-500),(1224,61,-500),(1224,62,-500),(1224,178,-500),(1224,180,-500),(1224,661,-500),(1224,1106,-500),(1225,51,-500),(1225,52,-500),(1225,53,-500),(1225,54,-500),(1225,55,-500),(1225,56,-500),(1225,57,-500),(1225,58,-500),(1225,59,-500),(1225,60,-500),(1225,61,-500),(1225,62,-500),(1225,178,-500),(1225,180,-500),(1225,661,-500),(1225,1106,-500),(1226,51,-500),(1226,52,-500),(1226,53,-500),(1226,54,-500),(1226,55,-500),(1226,56,-500),(1226,57,-500),(1226,58,-500),(1226,59,-500),(1226,60,-500),(1226,61,-500),(1226,62,-500),(1226,178,-500),(1226,180,-500),(1226,661,-500),(1226,1106,-500),(1227,51,-500),(1227,52,-500),(1227,53,-500),(1227,54,-500),(1227,55,-500),(1227,56,-500),(1227,57,-500),(1227,58,-500),(1227,59,-500),(1227,60,-500),(1227,61,-500),(1227,62,-500),(1227,178,-500),(1227,180,-500),(1227,661,-500),(1227,1106,-500),(1229,51,-1000),(1229,52,-1000),(1229,53,-1000),(1229,54,-1000),(1229,55,-1000),(1229,56,-1000),(1229,57,-1000),(1229,58,-1000),(1229,59,-1000),(1229,60,-1000),(1229,61,-1000),(1229,62,-1000),(1229,178,-1000),(1229,180,-1000),(1229,661,-1000),(1229,1106,-1000),(1230,51,-1000),(1230,52,-1000),(1230,53,-1000),(1230,54,-1000),(1230,55,-1000),(1230,56,-1000),(1230,57,-1000),(1230,58,-1000),(1230,59,-1000),(1230,60,-1000),(1230,61,-1000),(1230,62,-1000),(1230,178,-1000),(1230,180,-1000),(1230,661,-1000),(1230,1106,-1000),(1232,51,1),(1232,52,1),(1232,53,1),(1232,54,1),(1232,55,1),(1232,56,1),(1232,57,1),(1232,58,1),(1232,59,1),(1232,60,1),(1232,61,1),(1232,62,1),(1232,178,1),(1232,180,1),(1232,661,1),(1232,1106,1),(1233,51,-1000),(1233,52,-1000),(1233,53,-1000),(1233,54,-1000),(1233,55,-1000),(1233,56,-1000),(1233,57,-1000),(1233,58,-1000),(1233,59,-1000),(1233,60,-1000),(1233,61,-1000),(1233,62,-1000),(1233,178,-1000),(1233,180,-1000),(1233,661,-1000),(1233,1106,-1000),(1234,51,1),(1234,52,1),(1234,53,1),(1234,54,1),(1234,55,1),(1234,56,1),(1234,57,1),(1234,58,1),(1234,59,1),(1234,60,1),(1234,61,1),(1234,62,1),(1234,178,1),(1234,180,1),(1234,661,1),(1234,1106,1),(1235,51,-2000),(1235,52,-2000),(1235,53,-2000),(1235,54,-2000),(1235,55,-2000),(1235,56,-2000),(1235,57,-2000),(1235,58,-2000),(1235,59,-2000),(1235,60,-2000),(1235,61,-2000),(1235,62,-2000),(1235,178,-2000),(1235,180,-2000),(1235,661,-2000),(1235,1106,-2000),(1237,51,-2000),(1237,52,-2000),(1237,53,-2000),(1237,54,-2000),(1237,55,-2000),(1237,56,-2000),(1237,57,-2000),(1237,58,-2000),(1237,59,-2000),(1237,60,-2000),(1237,61,-2000),(1237,62,-2000),(1237,178,-2000),(1237,180,-2000),(1237,661,-2000),(1237,1106,-2000),(1238,51,-100),(1238,52,-100),(1238,53,-100),(1238,54,-100),(1238,55,-100),(1238,56,-100),(1238,57,-100),(1238,58,-100),(1238,59,-100),(1238,60,-100),(1238,61,-100),(1238,62,-100),(1238,178,-100),(1238,180,-100),(1238,661,-100),(1238,1106,-100),(1241,51,-750),(1241,52,-750),(1241,53,-750),(1241,54,-750),(1241,55,-750),(1241,56,-750),(1241,57,-750),(1241,58,-750),(1241,59,-750),(1241,60,-750),(1241,61,-750),(1241,62,-750),(1241,178,-750),(1241,180,-750),(1241,661,-750),(1241,1106,-750),(1242,51,-500),(1242,52,-500),(1242,53,-500),(1242,54,-500),(1242,55,-500),(1242,56,-500),(1242,57,-500),(1242,58,-500),(1242,59,-500),(1242,60,-500),(1242,61,-500),(1242,62,-500),(1242,178,-500),(1242,180,-500),(1242,661,-500),(1242,1106,-500),(1243,51,-2000),(1243,52,-2000),(1243,53,-2000),(1243,54,-2000),(1243,55,-2000),(1243,56,-2000),(1243,57,-2000),(1243,58,-2000),(1243,59,-2000),(1243,60,-2000),(1243,61,-2000),(1243,62,-2000),(1243,178,-2000),(1243,180,-2000),(1243,661,-2000),(1243,1106,-2000),(1244,51,-50),(1244,52,-50),(1244,53,-50),(1244,54,-50),(1244,55,-50),(1244,56,-50),(1244,57,-50),(1244,58,-50),(1244,59,-50),(1244,60,-50),(1244,61,-50),(1244,62,-50),(1244,178,-50),(1244,180,-50),(1244,661,-50),(1244,1106,-50),(1483,5,-800),(1483,11,-800),(1483,51,-1000),(1483,52,-1000),(1483,53,-1000),(1483,54,-1000),(1483,55,-1000),(1483,56,-1000),(1483,57,-1000),(1483,58,-1000),(1483,59,-1000),(1483,60,-1000),(1483,61,-1000),(1483,62,-1000),(1483,178,-1000),(1483,180,-1000),(1483,201,-800),(1483,203,-800),(1483,206,-800),(1483,661,-1000),(1483,1106,-1000),(1484,5,-800),(1484,11,-800),(1484,56,-800),(1484,59,-800),(1484,60,-800),(1484,178,-800),(1484,201,-800),(1484,203,-800),(1484,206,-800),(1485,5,-800),(1485,11,-800),(1485,51,-400),(1485,52,-400),(1485,53,-400),(1485,54,-400),(1485,55,-400),(1485,56,-800),(1485,57,-400),(1485,58,-400),(1485,59,-800),(1485,60,-800),(1485,61,-400),(1485,62,-400),(1485,178,-800),(1485,661,-400),(1485,1106,-400),(1486,5,-800),(1486,11,-800),(1486,51,-250),(1486,52,-250),(1486,53,-250),(1486,54,-250),(1486,55,-250),(1486,56,-800),(1486,57,-250),(1486,58,-250),(1486,59,-800),(1486,60,-800),(1486,61,-250),(1486,62,-250),(1486,178,-800),(1486,661,-250),(1486,1106,-250),(1487,5,-800),(1487,11,-800),(1487,56,-800),(1487,59,-800),(1487,60,-800),(1487,178,-800),(1490,51,-1000),(1490,52,-1000),(1490,53,-1000),(1490,54,-1000),(1490,55,-1000),(1490,56,-1000),(1490,57,-1000),(1490,58,-1000),(1490,59,-1000),(1490,60,-1000),(1490,61,-1000),(1490,62,-1000),(1490,178,-1000),(1490,180,-1000),(1490,661,-1000),(1490,1106,-1000),(1491,51,-1000),(1491,52,-1000),(1491,53,-1000),(1491,54,-1000),(1491,55,-1000),(1491,56,-1000),(1491,57,-1000),(1491,58,-1000),(1491,59,-1000),(1491,60,-1000),(1491,61,-1000),(1491,62,-1000),(1491,178,-1000),(1491,180,-1000),(1491,661,-1000),(1491,1106,-1000),(1500,51,-250),(1500,52,-250),(1500,53,-250),(1500,54,-250),(1500,55,-250),(1500,56,-250),(1500,57,-250),(1500,58,-250),(1500,59,-250),(1500,60,-250),(1500,61,-250),(1500,62,-250),(1500,178,-250),(1500,180,-250),(1500,661,-250),(1500,1106,-250),(1501,3,-800),(1501,51,-550),(1501,52,-550),(1501,53,-550),(1501,54,-550),(1501,55,-550),(1501,56,-550),(1501,57,-550),(1501,58,-550),(1501,59,-550),(1501,60,-550),(1501,61,-550),(1501,62,-550),(1501,178,-550),(1501,180,-550),(1501,661,-550),(1501,1106,-550),(1502,5,-550),(1502,11,-550),(1502,56,-400),(1502,59,-400),(1502,60,-400),(1502,178,-400),(1502,201,-550),(1502,203,-550),(1502,206,-550),(1503,5,-550),(1503,11,-550),(1503,56,-400),(1503,59,-400),(1503,60,-400),(1503,178,-400),(1503,201,-550),(1503,203,-550),(1503,206,-550),(1504,5,-550),(1504,11,-550),(1504,56,-400),(1504,59,-400),(1504,60,-400),(1504,178,-400),(1504,201,-550),(1504,203,-550),(1504,206,-550),(1505,1,-200),(1505,2,-400),(1505,3,-400),(1505,4,-200),(1505,5,-200),(1505,6,-200),(1505,7,-200),(1505,8,-200),(1505,9,-200),(1505,10,-200),(1505,11,-200),(1505,12,-200),(1505,13,-200),(1505,14,-200),(1505,15,-200),(1505,16,-200),(1506,1,-800),(1506,2,-800),(1506,3,-800),(1506,4,-800),(1506,5,-500),(1506,6,-800),(1506,7,-800),(1506,8,-800),(1506,9,-800),(1506,10,-800),(1506,11,-500),(1506,12,-800),(1506,13,-800),(1506,14,-800),(1506,15,-800),(1506,16,-800),(1507,1,-800),(1507,2,-800),(1507,3,-800),(1507,4,-800),(1507,5,-500),(1507,6,-800),(1507,7,-800),(1507,8,-800),(1507,9,-800),(1507,10,-800),(1507,11,-500),(1507,12,-800),(1507,13,-800),(1507,14,-800),(1507,15,-800),(1507,16,-800),(1508,51,-50),(1508,52,-50),(1508,53,-50),(1508,54,-50),(1508,55,-50),(1508,56,-100),(1508,57,-50),(1508,58,-50),(1508,59,-100),(1508,60,-100),(1508,61,-50),(1508,62,-50),(1508,178,-100),(1508,180,-50),(1508,661,-50),(1508,1106,-50),(1509,51,-50),(1509,52,-50),(1509,53,-50),(1509,54,-50),(1509,55,-50),(1509,56,-50),(1509,57,-50),(1509,58,-50),(1509,59,-50),(1509,60,-50),(1509,61,-50),(1509,62,-50),(1509,178,-50),(1509,180,-50),(1509,661,-50),(1509,1106,-50),(1510,51,-99),(1510,52,-200),(1510,53,-200),(1510,54,-200),(1510,55,-200),(1510,56,-250),(1510,57,-200),(1510,58,-200),(1510,59,-250),(1510,60,-250),(1510,61,-200),(1510,62,-200),(1510,178,-250),(1510,180,-200),(1510,661,-99),(1510,1106,-99),(1511,7,101),(1511,12,101),(1511,13,101),(1511,14,101),(1511,51,-200),(1511,52,-200),(1511,53,-200),(1511,54,-200),(1511,55,-200),(1511,56,-250),(1511,57,-200),(1511,58,-200),(1511,59,-250),(1511,60,-250),(1511,61,-200),(1511,62,-200),(1511,178,-250),(1511,180,-200),(1511,661,-200),(1511,1106,-200),(1512,51,-200),(1512,52,-200),(1512,53,-200),(1512,54,-200),(1512,55,-200),(1512,56,-250),(1512,57,-200),(1512,58,-99),(1512,59,-250),(1512,60,-250),(1512,61,-99),(1512,62,-99),(1512,178,-250),(1512,180,-200),(1512,661,-200),(1512,1106,-200),(1513,180,1000),(1516,51,-1000),(1516,52,-1000),(1516,53,-1000),(1516,54,-1000),(1516,55,-1000),(1516,56,-1000),(1516,57,-1000),(1516,58,-1000),(1516,59,-1000),(1516,60,-1000),(1516,61,-1000),(1516,62,-1000),(1516,178,-1000),(1516,180,-1000),(1516,661,-1000),(1516,1106,-1000),(1519,51,-1000),(1519,52,-1000),(1519,53,-1000),(1519,54,-1000),(1519,55,-1000),(1519,56,-1000),(1519,57,-1000),(1519,58,-1000),(1519,59,-1000),(1519,60,-1000),(1519,61,-1000),(1519,62,-1000),(1519,178,-1000),(1519,180,-1000),(1519,661,-1000),(1519,1106,-1000),(1520,51,-100),(1520,52,-100),(1520,53,-100),(1520,54,-100),(1520,55,-100),(1520,56,-100),(1520,57,-100),(1520,58,-100),(1520,59,-100),(1520,60,-100),(1520,61,-100),(1520,62,-100),(1520,178,-100),(1520,180,-100),(1520,661,-100),(1520,1106,-100),(1521,51,-2000),(1521,52,-2000),(1521,53,-2000),(1521,54,-2000),(1521,55,-2000),(1521,56,-2000),(1521,57,-2000),(1521,58,-2000),(1521,59,-2000),(1521,60,-2000),(1521,61,-2000),(1521,62,-2000),(1521,178,-2000),(1521,180,-2000),(1521,201,-2000),(1521,202,-2000),(1521,203,-2000),(1521,204,-2000),(1521,205,-2000),(1521,206,-2000),(1521,207,-2000),(1521,208,-2000),(1521,209,-2000),(1521,210,-2000),(1521,211,-2000),(1521,212,-2000),(1521,213,-2000),(1521,214,-2000),(1521,215,-2000),(1521,216,-2000),(1521,661,-2000),(1521,1106,-2000),(1522,1,-50),(1522,2,-50),(1522,3,-800),(1522,4,-800),(1522,5,-50),(1522,6,-800),(1522,7,-800),(1522,8,-50),(1522,9,-50),(1522,10,-50),(1522,11,-50),(1522,12,-50),(1522,13,-50),(1522,14,-50),(1522,15,-50),(1522,16,-50),(1522,51,-50),(1522,52,-50),(1522,53,-50),(1522,54,-800),(1522,55,-800),(1522,56,-50),(1522,57,-50),(1522,58,-800),(1522,59,-50),(1522,60,-50),(1522,61,-800),(1522,62,-50),(1522,178,-50),(1522,180,-50),(1522,201,-50),(1522,202,-800),(1522,203,-50),(1522,204,-800),(1522,205,-50),(1522,206,-50),(1522,207,-800),(1522,208,-800),(1522,209,-800),(1522,210,-800),(1522,211,-50),(1522,212,-800),(1522,213,-50),(1522,214,-800),(1522,215,-800),(1522,216,-50),(1522,661,-50),(1522,1106,-50),(1524,5,-550),(1524,11,-550),(1524,56,-400),(1524,59,-400),(1524,60,-400),(1524,178,-400),(1524,201,-550),(1524,203,-550),(1524,206,-550),(1525,1,-800),(1525,2,-800),(1525,3,-800),(1525,4,-800),(1525,5,-500),(1525,6,-800),(1525,7,-800),(1525,8,-800),(1525,9,-800),(1525,10,-800),(1525,11,-500),(1525,12,-800),(1525,13,-800),(1525,14,-800),(1525,15,-800),(1525,16,-800),(1527,51,-1000),(1527,52,-1000),(1527,53,-1000),(1527,54,-1000),(1527,55,-1000),(1527,56,-1000),(1527,57,-1000),(1527,58,-1000),(1527,59,-1000),(1527,60,-1000),(1527,61,-1000),(1527,62,-1000),(1527,178,-1000),(1527,180,-1000),(1527,661,-1000),(1527,1106,-1000),(1528,51,-1000),(1528,52,-1000),(1528,53,-1000),(1528,54,-1000),(1528,55,-1000),(1528,56,-1000),(1528,57,-1000),(1528,58,-1000),(1528,59,-1000),(1528,60,-1000),(1528,61,-1000),(1528,62,-1000),(1528,178,-1000),(1528,180,-1000),(1528,661,-1000),(1528,1106,-1000),(1529,1,750),(1530,9,750),(1531,8,750),(1532,15,750),(1533,10,750),(1535,51,-1000),(1535,52,-1000),(1535,53,-1000),(1535,54,-1000),(1535,55,-1000),(1535,56,-1000),(1535,57,-1000),(1535,58,-1000),(1535,59,-1000),(1535,60,-1000),(1535,61,-1000),(1535,62,-1000),(1535,178,-1000),(1535,180,-1000),(1535,661,-1000),(1535,1106,-1000),(1537,51,-1),(1537,52,-1),(1537,53,-1),(1537,54,-1),(1537,55,-1),(1537,56,-1),(1537,57,-1),(1537,58,-1),(1537,59,-1),(1537,60,-1),(1537,61,-1),(1537,62,-1),(1537,178,1101),(1537,180,-1),(1537,661,-1),(1537,1106,-1),(1538,5,-450),(1538,11,-450),(1541,54,-450),(1541,56,-450),(1541,59,-450),(1541,60,-450),(1541,178,-450),(1542,1,350),(1542,5,350),(1542,8,450),(1542,9,550),(1542,11,350),(1542,16,350),(1542,51,-350),(1542,52,-350),(1542,53,-350),(1542,54,-350),(1542,55,-350),(1542,56,-99),(1542,57,-350),(1542,58,-350),(1542,59,-99),(1542,60,-99),(1542,61,-350),(1542,62,-350),(1542,178,-99),(1542,180,-350),(1542,201,300),(1542,203,300),(1542,206,300),(1542,661,-350),(1542,1106,-350),(1543,216,450),(1544,202,450),(1545,213,450),(1546,209,450),(1547,51,-250),(1547,52,-250),(1547,53,-250),(1547,54,-250),(1547,55,-250),(1547,56,-250),(1547,57,-250),(1547,58,-250),(1547,59,-250),(1547,60,-250),(1547,61,-250),(1547,62,-250),(1547,178,-250),(1547,180,-250),(1547,661,-250),(1547,1106,-250),(1552,180,250),(1555,51,-550),(1555,52,-550),(1555,53,-550),(1555,54,-550),(1555,55,-550),(1555,56,-550),(1555,57,-550),(1555,58,-550),(1555,59,-550),(1555,60,-550),(1555,61,-550),(1555,62,-550),(1555,178,-550),(1555,180,-550),(1555,661,-550),(1555,1106,-550),(1556,51,-400),(1556,52,-400),(1556,53,-400),(1556,54,-400),(1556,55,-400),(1556,56,-400),(1556,57,-400),(1556,58,-400),(1556,59,-400),(1556,60,-400),(1556,61,-400),(1556,62,-400),(1556,178,-400),(1556,180,-400),(1556,661,-400),(1556,1106,-400),(1559,1,-800),(1559,2,-800),(1559,3,-800),(1559,4,-800),(1559,5,-800),(1559,6,-800),(1559,7,-800),(1559,8,-450),(1559,9,-50),(1559,10,-800),(1559,11,-800),(1559,12,-800),(1559,13,-800),(1559,14,-800),(1559,15,-800),(1559,16,-800),(1561,5,-550),(1561,11,-550),(1561,56,-400),(1561,59,-400),(1561,60,-400),(1561,178,-400),(1561,201,-550),(1561,203,-550),(1561,206,-550),(1562,51,-1000),(1562,52,-1000),(1562,53,-1000),(1562,54,-1000),(1562,55,-1000),(1562,56,-1000),(1562,57,-1000),(1562,58,-1000),(1562,59,-1000),(1562,60,-1000),(1562,61,-1000),(1562,62,-1000),(1562,178,-1000),(1562,180,-1000),(1562,661,-1000),(1562,1106,-1000),(1563,51,-99),(1563,52,-99),(1563,53,-99),(1563,54,-99),(1563,55,-99),(1563,56,-99),(1563,57,-99),(1563,58,-99),(1563,59,-99),(1563,60,-99),(1563,61,-99),(1563,62,-99),(1563,178,-99),(1563,180,-99),(1563,661,-99),(1563,1106,-99),(1564,51,-1000),(1564,52,-1000),(1564,53,-1000),(1564,54,-1000),(1564,55,-1000),(1564,56,-1000),(1564,57,-1000),(1564,58,-1000),(1564,59,-1000),(1564,60,-1000),(1564,61,-1000),(1564,62,-1000),(1564,178,-1000),(1564,180,-1000),(1564,661,-1000),(1564,1106,-1000),(1565,51,-99),(1565,52,-99),(1565,53,-99),(1565,54,-99),(1565,55,-99),(1565,56,-99),(1565,57,-99),(1565,58,-99),(1565,59,-99),(1565,60,-99),(1565,61,-99),(1565,62,-99),(1565,178,-99),(1565,180,-99),(1565,661,-99),(1565,1106,-99),(1568,51,-1000),(1568,52,-1000),(1568,53,-1000),(1568,54,-1000),(1568,55,-1000),(1568,56,-1000),(1568,57,-1000),(1568,58,-1000),(1568,59,-1000),(1568,60,-1000),(1568,61,-1000),(1568,62,-1000),(1568,178,-1000),(1568,180,-1000),(1568,661,-1000),(1568,1106,-1000),(1570,5,350),(1570,11,350),(1570,51,-800),(1570,52,-800),(1570,53,-800),(1570,54,-800),(1570,55,-800),(1570,56,-800),(1570,57,-800),(1570,58,-800),(1570,59,-800),(1570,60,-800),(1570,61,-800),(1570,62,-800),(1570,178,-800),(1570,180,-800),(1570,661,-800),(1570,1106,-800),(1571,51,-1000),(1571,52,-1000),(1571,53,-1000),(1571,54,-1000),(1571,55,-1000),(1571,56,-1000),(1571,57,-1000),(1571,58,-1000),(1571,59,-1000),(1571,60,-1000),(1571,61,-1000),(1571,62,-1000),(1571,178,-1000),(1571,180,-1000),(1571,661,-1000),(1571,1106,-1000),(1573,51,-250),(1573,52,-250),(1573,53,-250),(1573,54,-250),(1573,55,-250),(1573,56,-250),(1573,57,-250),(1573,58,-250),(1573,59,-250),(1573,60,-250),(1573,61,-250),(1573,62,-250),(1573,178,-250),(1573,180,-250),(1573,661,-250),(1573,1106,-250),(1574,51,-800),(1574,52,-800),(1574,53,-800),(1574,54,-800),(1574,55,-800),(1574,56,-800),(1574,57,-800),(1574,58,-800),(1574,59,-800),(1574,60,-800),(1574,61,-800),(1574,62,-800),(1574,178,-800),(1574,180,-800),(1574,201,550),(1574,203,550),(1574,206,550),(1574,211,550),(1574,661,-800),(1574,1106,-800),(1582,1,-550),(1582,2,500),(1582,5,-550),(1582,6,200),(1582,7,-550),(1582,9,-550),(1582,10,200),(1582,11,-550),(1582,12,-550),(1582,13,-550),(1582,14,-550),(1582,16,-550),(1583,51,-800),(1583,52,-800),(1583,53,-800),(1583,54,-800),(1583,55,-800),(1583,56,-800),(1583,57,-800),(1583,58,-800),(1583,59,-800),(1583,60,-800),(1583,61,-800),(1583,62,-800),(1583,178,-800),(1583,180,-800),(1583,661,-800),(1583,1106,-800),(1584,180,751),(1587,51,-1000),(1587,52,-1000),(1587,53,-1000),(1587,54,-1000),(1587,55,-1000),(1587,56,-1000),(1587,57,-1000),(1587,58,-1000),(1587,59,-1000),(1587,60,-1000),(1587,61,-1000),(1587,62,-1000),(1587,178,-1000),(1587,180,-1000),(1587,661,-1000),(1587,1106,-1000),(1593,56,-450),(1593,59,-450),(1593,60,-450),(1593,178,-800),(1593,201,-1000),(1593,203,-1000),(1593,206,-1000),(1593,211,-450),(1597,52,-20),(1597,56,-350),(1597,59,-750),(1597,60,-750),(1597,178,-750),(1597,180,-50),(1597,201,-350),(1597,203,-350),(1597,206,-350),(1597,207,100),(1597,209,50),(1597,211,-80),(1597,215,50),(1598,51,-50),(1598,52,-50),(1598,53,-50),(1598,54,-50),(1598,55,-50),(1598,56,-50),(1598,57,-50),(1598,58,-50),(1598,59,-50),(1598,60,-50),(1598,61,-50),(1598,62,-50),(1598,178,-50),(1598,180,-50),(1598,202,100),(1598,661,-50),(1598,1106,-50),(1599,51,-1000),(1599,52,-1000),(1599,53,-1000),(1599,54,-1000),(1599,55,-1000),(1599,56,-1000),(1599,57,-1000),(1599,58,-1000),(1599,59,-1000),(1599,60,-1000),(1599,61,-1000),(1599,62,-1000),(1599,178,-1000),(1599,180,-1000),(1599,661,-1000),(1599,1106,-1000),(1600,51,-1000),(1600,52,-1000),(1600,53,-1000),(1600,54,-1000),(1600,55,-1000),(1600,56,-1000),(1600,57,-1000),(1600,58,-1000),(1600,59,-1000),(1600,60,-1000),(1600,61,-1000),(1600,62,-1000),(1600,178,-1000),(1600,180,-1000),(1600,661,-1000),(1600,1106,-1000),(1601,9,100),(1601,51,-475),(1601,52,-475),(1601,53,-475),(1601,54,-475),(1601,55,-475),(1601,56,-475),(1601,57,-475),(1601,58,-475),(1601,59,-475),(1601,60,-475),(1601,61,-475),(1601,62,-475),(1601,178,-475),(1601,180,-475),(1601,661,-475),(1601,1106,-475),(1603,51,-75),(1603,52,-75),(1603,53,-75),(1603,54,-75),(1603,55,-75),(1603,56,-75),(1603,57,-75),(1603,58,-75),(1603,59,-75),(1603,60,-75),(1603,61,-75),(1603,62,-75),(1603,178,-75),(1603,180,-75),(1603,201,-400),(1603,203,-400),(1603,206,-400),(1603,207,75),(1603,209,75),(1603,215,75),(1603,661,-75),(1603,1106,-75),(1605,51,50),(1605,52,50),(1605,53,50),(1605,54,50),(1605,55,50),(1605,56,50),(1605,57,50),(1605,58,50),(1605,59,50),(1605,60,50),(1605,61,50),(1605,62,50),(1605,178,50),(1605,180,50),(1605,661,50),(1605,1106,50),(1607,51,-1000),(1607,52,-1000),(1607,53,-1000),(1607,54,-1000),(1607,55,-1000),(1607,56,-1000),(1607,57,-1000),(1607,58,-1000),(1607,59,-1000),(1607,60,-1000),(1607,61,-1000),(1607,62,-1000),(1607,178,-1000),(1607,180,-1000),(1607,661,-1000),(1607,1106,-1000),(1609,207,200),(1610,51,-1000),(1610,52,-1000),(1610,53,-1000),(1610,54,-1000),(1610,55,-1000),(1610,56,-1000),(1610,57,-1000),(1610,58,-1000),(1610,59,-1000),(1610,60,-1000),(1610,61,-1000),(1610,62,-1000),(1610,178,-1000),(1610,180,-1000),(1610,661,-1000),(1610,1106,-1000),(1611,51,-1000),(1611,52,-1000),(1611,53,-1000),(1611,54,-1000),(1611,55,-1000),(1611,56,-1000),(1611,57,-1000),(1611,58,-1000),(1611,59,-1000),(1611,60,-1000),(1611,61,-1000),(1611,62,-1000),(1611,178,-1000),(1611,180,-1000),(1611,661,-1000),(1611,1106,-1000),(1612,51,-1000),(1612,52,-1000),(1612,53,-1000),(1612,54,-1000),(1612,55,-1000),(1612,56,-1000),(1612,57,-1000),(1612,58,-1000),(1612,59,-1000),(1612,60,-1000),(1612,61,-1000),(1612,62,-1000),(1612,178,-1000),(1612,180,-1000),(1612,661,-1000),(1612,1106,-1000),(1613,51,-1000),(1613,52,-1000),(1613,53,-1000),(1613,54,-1000),(1613,55,-1000),(1613,56,-1000),(1613,57,-1000),(1613,58,-1000),(1613,59,-1000),(1613,60,-1000),(1613,61,-1000),(1613,62,-1000),(1613,178,-1000),(1613,180,-1000),(1613,661,-1000),(1613,1106,-1000),(1618,51,-1000),(1618,52,-1000),(1618,53,-1000),(1618,54,-1000),(1618,55,-1000),(1618,56,-1000),(1618,57,-1000),(1618,58,-1000),(1618,59,-1000),(1618,60,-1000),(1618,61,-1000),(1618,62,-1000),(1618,178,-1000),(1618,180,-1000),(1618,661,-1000),(1618,1106,-1000),(1620,51,-250),(1620,52,-450),(1620,53,-250),(1620,55,-50),(1620,56,-500),(1620,57,-250),(1620,58,-250),(1620,59,-500),(1620,60,-500),(1620,61,-50),(1620,62,-250),(1620,178,-500),(1620,180,-250),(1620,661,-250),(1620,1106,-250),(1621,51,-1000),(1621,52,-1000),(1621,53,-1000),(1621,54,-1000),(1621,55,-1000),(1621,56,-1000),(1621,57,-1000),(1621,58,-1000),(1621,59,-1000),(1621,60,-1000),(1621,61,-1000),(1621,62,-1000),(1621,178,-1000),(1621,180,-1000),(1621,661,-1000),(1621,1106,-1000),(1622,51,-480),(1622,52,-480),(1622,53,-480),(1622,54,-480),(1622,55,-480),(1622,56,-480),(1622,57,-480),(1622,58,-480),(1622,59,-480),(1622,60,-480),(1622,61,-480),(1622,62,-480),(1622,178,-480),(1622,180,-480),(1622,661,-480),(1622,1106,-480),(1623,51,-1000),(1623,52,-1000),(1623,53,-1000),(1623,54,-1000),(1623,55,-1000),(1623,56,-1000),(1623,57,-1000),(1623,58,-1000),(1623,59,-1000),(1623,60,-1000),(1623,61,-1000),(1623,62,-1000),(1623,178,-1000),(1623,180,-1000),(1623,661,-1000),(1623,1106,-1000),(1624,51,-1000),(1624,52,-1000),(1624,53,-1000),(1624,54,-1000),(1624,55,-1000),(1624,56,-1000),(1624,57,-1000),(1624,58,-1000),(1624,59,-1000),(1624,60,-1000),(1624,61,-1000),(1624,62,-1000),(1624,178,-1000),(1624,180,-1000),(1624,661,-1000),(1624,1106,-1000),(1627,51,-95),(1627,52,-95),(1627,53,-95),(1627,54,-95),(1627,55,-95),(1627,56,-95),(1627,57,-95),(1627,58,-95),(1627,59,-95),(1627,60,-95),(1627,61,-95),(1627,62,-95),(1627,178,-95),(1627,180,-95),(1627,661,-95),(1627,1106,-95),(1628,51,-700),(1628,52,-700),(1628,53,-700),(1628,54,-700),(1628,55,-700),(1628,56,-700),(1628,57,-700),(1628,58,-700),(1628,59,-700),(1628,60,-700),(1628,61,-700),(1628,62,-700),(1628,178,-700),(1628,180,-700),(1628,661,-700),(1628,1106,-700),(1629,51,-1000),(1629,52,-1000),(1629,53,-1000),(1629,54,-1000),(1629,55,-1000),(1629,56,-1000),(1629,57,-1000),(1629,58,-1000),(1629,59,-1000),(1629,60,-1000),(1629,61,-1000),(1629,62,-1000),(1629,178,-1000),(1629,180,-1000),(1629,661,-1000),(1629,1106,-1000),(1630,1,-600),(1630,2,-600),(1630,3,-600),(1630,4,-600),(1630,5,-500),(1630,6,-600),(1630,7,-600),(1630,8,-600),(1630,9,-600),(1630,10,-600),(1630,11,-500),(1630,12,-600),(1630,13,-600),(1630,14,-600),(1630,15,-600),(1630,16,-600),(1630,213,100),(1633,51,-1000),(1633,52,-1000),(1633,53,-1000),(1633,54,-1000),(1633,55,-1000),(1633,56,-1000),(1633,57,-1000),(1633,58,-1000),(1633,59,-1000),(1633,60,-1000),(1633,61,-1000),(1633,62,-1000),(1633,178,-1000),(1633,180,-1000),(1633,661,-1000),(1633,1106,-1000),(1643,51,-1000),(1643,52,-1000),(1643,53,-1000),(1643,54,-1000),(1643,55,-1000),(1643,56,-1000),(1643,57,-1000),(1643,58,-1000),(1643,59,-1000),(1643,60,-1000),(1643,61,-1000),(1643,62,-1000),(1643,178,-1000),(1643,180,-1000),(1643,211,450),(1643,661,-1000),(1643,1106,-1000),(1659,51,-1000),(1659,52,-1000),(1659,53,-1000),(1659,54,-1000),(1659,55,-1000),(1659,56,-1000),(1659,57,-1000),(1659,58,-1000),(1659,59,-1000),(1659,60,-1000),(1659,61,-1000),(1659,62,-1000),(1659,178,-1000),(1659,180,-1000),(1659,661,-1000),(1659,1106,-1000),(1660,51,-1000),(1660,52,-1000),(1660,53,-1000),(1660,54,-1000),(1660,55,-1000),(1660,56,-1000),(1660,57,-1000),(1660,58,-1000),(1660,59,-1000),(1660,60,-1000),(1660,61,-1000),(1660,62,-1000),(1660,178,-1000),(1660,180,-1000),(1660,661,-1000),(1660,1106,-1000),(1665,51,-1000),(1665,52,-1000),(1665,53,-1000),(1665,54,-1000),(1665,55,-1000),(1665,56,-1000),(1665,57,-1000),(1665,58,-1000),(1665,59,-1000),(1665,60,-1000),(1665,61,-1000),(1665,62,-1000),(1665,178,-1000),(1665,180,-1000),(1665,201,-500),(1665,202,-500),(1665,203,-500),(1665,204,-500),(1665,205,-500),(1665,206,-500),(1665,207,-500),(1665,208,-500),(1665,209,-500),(1665,210,-500),(1665,211,-500),(1665,212,-500),(1665,213,-500),(1665,214,-500),(1665,215,-500),(1665,216,-500),(1665,661,-1000),(1665,1106,-1000),(1671,51,-400),(1671,52,-400),(1671,53,-400),(1671,54,-400),(1671,55,-400),(1671,56,-400),(1671,57,-400),(1671,58,-400),(1671,59,-400),(1671,60,-400),(1671,61,-400),(1671,62,-400),(1671,178,-400),(1671,180,-400),(1671,661,-400),(1671,1106,-400),(1674,51,-1000),(1674,52,-1000),(1674,53,-1000),(1674,54,-1000),(1674,55,-1000),(1674,56,-1000),(1674,57,-1000),(1674,58,-1000),(1674,59,-1000),(1674,60,-1000),(1674,61,-1000),(1674,62,-1000),(1674,178,-1000),(1674,180,-1000),(1674,661,-1000),(1674,1106,-1000),(1675,51,-1000),(1675,52,-1000),(1675,53,-1000),(1675,54,-1000),(1675,55,-1000),(1675,56,-1000),(1675,57,-1000),(1675,58,-1000),(1675,59,-1000),(1675,60,-1000),(1675,61,-1000),(1675,62,-1000),(1675,178,-1000),(1675,180,-1000),(1675,661,-1000),(1675,1106,-1000),(1676,51,-1000),(1676,52,-1000),(1676,53,-1000),(1676,54,-1000),(1676,55,-1000),(1676,56,-1000),(1676,57,-1000),(1676,58,-1000),(1676,59,-1000),(1676,60,-1000),(1676,61,-1000),(1676,62,-1000),(1676,178,-1000),(1676,180,-1000),(1676,661,-1000),(1676,1106,-1000),(1677,51,-100),(1677,52,-100),(1677,53,-100),(1677,54,-100),(1677,55,-100),(1677,56,-100),(1677,57,-100),(1677,58,-100),(1677,59,-100),(1677,60,-100),(1677,61,-100),(1677,62,-100),(1677,178,-100),(1677,180,-100),(1677,661,-100),(1677,1106,-100),(1679,51,-100),(1679,52,-100),(1679,53,-100),(1679,54,-100),(1679,55,-100),(1679,56,-100),(1679,57,-100),(1679,58,-100),(1679,59,-100),(1679,60,-100),(1679,61,-100),(1679,62,-100),(1679,178,-100),(1679,180,-100),(1679,661,-100),(1679,1106,-100),(1680,51,-300),(1680,52,-300),(1680,53,-300),(1680,54,-300),(1680,55,-300),(1680,56,-300),(1680,57,-300),(1680,58,-300),(1680,59,-300),(1680,60,-300),(1680,61,-300),(1680,62,-300),(1680,178,-300),(1680,180,-300),(1680,661,-300),(1680,1106,-300),(1681,51,-300),(1681,52,-300),(1681,53,-300),(1681,54,-300),(1681,55,-300),(1681,56,-300),(1681,57,-300),(1681,58,-300),(1681,59,-300),(1681,60,-300),(1681,61,-300),(1681,62,-300),(1681,178,-300),(1681,180,-300),(1681,661,-300),(1681,1106,-300),(1701,51,-1000),(1701,52,-1000),(1701,53,-1000),(1701,54,-1000),(1701,55,-1000),(1701,56,-1000),(1701,57,-1000),(1701,58,-1000),(1701,59,-1000),(1701,60,-1000),(1701,61,-1000),(1701,62,-1000),(1701,178,-1000),(1701,180,-1000),(1701,661,-1000),(1701,1106,-1000),(1703,51,-1000),(1703,52,-1000),(1703,53,-1000),(1703,54,-1000),(1703,55,-1000),(1703,56,-1000),(1703,57,-1000),(1703,58,-1000),(1703,59,-1000),(1703,60,-1000),(1703,61,-1000),(1703,62,-1000),(1703,178,-1000),(1703,180,-1000),(1703,661,-1000),(1703,1106,-1000),(1704,56,-1000),(1704,59,-1000),(1704,60,-1000),(1704,178,-1000),(1704,208,100),(1709,56,-1000),(1709,59,-1000),(1709,60,-1000),(1709,178,-1000),(1711,56,-1000),(1711,59,-1000),(1711,60,-1000),(1711,178,-1000),(1712,56,-1000),(1712,59,-1000),(1712,60,-1000),(1712,178,-1000),(1713,56,-1000),(1713,59,-1000),(1713,60,-1000),(1713,178,-1000),(1714,56,-1000),(1714,59,-1000),(1714,60,-1000),(1714,178,-1000),(1715,56,-1000),(1715,59,-1000),(1715,60,-1000),(1715,178,-1000),(1716,56,-1000),(1716,59,-1000),(1716,60,-1000),(1716,178,-1000),(1716,661,100),(1717,56,-1000),(1717,59,-1000),(1717,60,-1000),(1717,178,-1000),(1717,661,100),(1718,56,-1000),(1718,59,-1000),(1718,60,-1000),(1718,178,-1000),(1718,661,100),(1719,56,-1000),(1719,59,-1000),(1719,60,-1000),(1719,178,-1000),(1720,56,-1000),(1720,59,-1000),(1720,60,-1000),(1720,178,-1000),(1720,208,50),(1720,661,100),(1722,51,-1000),(1722,52,-1000),(1722,53,-1000),(1722,54,-1000),(1722,55,-1000),(1722,56,-1000),(1722,57,-1000),(1722,58,-1000),(1722,59,-1000),(1722,60,-1000),(1722,61,-1000),(1722,62,-1000),(1722,178,-1000),(1722,180,-1000),(1722,661,-1000),(1722,1106,-1000),(1728,51,-1000),(1728,52,-1000),(1728,53,-1000),(1728,54,-1000),(1728,55,-1000),(1728,56,-1000),(1728,57,-1000),(1728,58,-1000),(1728,59,-1000),(1728,60,-1000),(1728,61,-1000),(1728,62,-1000),(1728,178,-1000),(1728,180,-1000),(1728,661,-1000),(1728,1106,-1000),(1729,51,-1000),(1729,52,-1000),(1729,53,-1000),(1729,54,-1000),(1729,55,-1000),(1729,56,-1000),(1729,57,-1000),(1729,58,-1000),(1729,59,-1000),(1729,60,-1000),(1729,61,-1000),(1729,62,-1000),(1729,178,-1000),(1729,180,-1000),(1729,661,-1000),(1729,1106,-1000),(1732,51,-1000),(1732,52,-1000),(1732,53,-1000),(1732,54,-1000),(1732,55,-1000),(1732,56,-1000),(1732,57,-1000),(1732,58,-1000),(1732,59,-1000),(1732,60,-1000),(1732,61,-1000),(1732,62,-1000),(1732,178,-1000),(1732,180,-1000),(1732,661,-1000),(1732,1106,-1000),(1733,51,-1000),(1733,52,-1000),(1733,53,-1000),(1733,54,-1000),(1733,55,-1000),(1733,56,-1000),(1733,57,-1000),(1733,58,-1000),(1733,59,-1000),(1733,60,-1000),(1733,61,-1000),(1733,62,-1000),(1733,178,-1000),(1733,180,-1000),(1733,661,-1000),(1733,1106,-1000),(1734,51,-1000),(1734,52,-1000),(1734,53,-1000),(1734,54,-1000),(1734,55,-1000),(1734,56,-1000),(1734,57,-1000),(1734,58,-1000),(1734,59,-1000),(1734,60,-1000),(1734,61,-1000),(1734,62,-1000),(1734,178,-1000),(1734,180,-1000),(1734,661,-1000),(1734,1106,-1000),(1735,51,-1000),(1735,52,-1000),(1735,53,-1000),(1735,54,-1000),(1735,55,-1000),(1735,56,-1000),(1735,57,-1000),(1735,58,-1000),(1735,59,-1000),(1735,60,-1000),(1735,61,-1000),(1735,62,-1000),(1735,178,-1000),(1735,180,-1000),(1735,661,-1000),(1735,1106,-1000),(1736,51,-1000),(1736,52,-1000),(1736,53,-1000),(1736,54,-1000),(1736,55,-1000),(1736,56,-1000),(1736,57,-1000),(1736,58,-1000),(1736,59,-1000),(1736,60,-1000),(1736,61,-1000),(1736,62,-1000),(1736,178,-1000),(1736,180,-1000),(1736,661,-1000),(1736,1106,-1000),(1737,51,-1000),(1737,52,-1000),(1737,53,-1000),(1737,54,-1000),(1737,55,-1000),(1737,56,-1000),(1737,57,-1000),(1737,58,-1000),(1737,59,-1000),(1737,60,-1000),(1737,61,-1000),(1737,62,-1000),(1737,178,-1000),(1737,180,-1000),(1737,661,-1000),(1737,1106,-1000),(1738,51,-1000),(1738,52,-1000),(1738,53,-1000),(1738,54,-1000),(1738,55,-1000),(1738,56,-1000),(1738,57,-1000),(1738,58,-1000),(1738,59,-1000),(1738,60,-1000),(1738,61,-1000),(1738,62,-1000),(1738,178,-1000),(1738,180,-1000),(1738,661,-1000),(1738,1106,-1000),(1741,51,-1000),(1741,52,-1000),(1741,53,-1000),(1741,54,-1000),(1741,55,-1000),(1741,56,-1000),(1741,57,-1000),(1741,58,-1000),(1741,59,-1000),(1741,60,-1000),(1741,61,-1000),(1741,62,-1000),(1741,178,-1000),(1741,180,-1000),(1741,661,-1000),(1741,1106,-1000),(1742,51,-1000),(1742,52,-1000),(1742,53,-1000),(1742,54,-1000),(1742,55,-1000),(1742,56,-1000),(1742,57,-1000),(1742,58,-1000),(1742,59,-1000),(1742,60,-1000),(1742,61,-1000),(1742,62,-1000),(1742,178,-1000),(1742,180,-1000),(1742,661,-1000),(1742,1106,-1000),(1743,51,-1000),(1743,52,-1000),(1743,53,-1000),(1743,54,-1000),(1743,55,-1000),(1743,56,-1000),(1743,57,-1000),(1743,58,-1000),(1743,59,-1000),(1743,60,-1000),(1743,61,-1000),(1743,62,-1000),(1743,178,-1000),(1743,180,-1000),(1743,661,-1000),(1743,1106,-1000),(1744,51,-1000),(1744,52,-1000),(1744,53,-1000),(1744,54,-1000),(1744,55,-1000),(1744,56,-1000),(1744,57,-1000),(1744,58,-1000),(1744,59,-1000),(1744,60,-1000),(1744,61,-1000),(1744,62,-1000),(1744,178,-1000),(1744,180,-1000),(1744,661,-1000),(1744,1106,-1000),(1745,51,-1000),(1745,52,-1000),(1745,53,-1000),(1745,54,-1000),(1745,55,-1000),(1745,56,-1000),(1745,57,-1000),(1745,58,-1000),(1745,59,-1000),(1745,60,-1000),(1745,61,-1000),(1745,62,-1000),(1745,178,-1000),(1745,180,-1000),(1745,661,-1000),(1745,1106,-1000),(1746,51,-1000),(1746,52,-1000),(1746,53,-1000),(1746,54,-1000),(1746,55,-1000),(1746,56,-1000),(1746,57,-1000),(1746,58,-1000),(1746,59,-1000),(1746,60,-1000),(1746,61,-1000),(1746,62,-1000),(1746,178,-1000),(1746,180,-1000),(1746,661,-1000),(1746,1106,-1000),(1747,51,-1000),(1747,52,-1000),(1747,53,-1000),(1747,54,-1000),(1747,55,-1000),(1747,56,-1000),(1747,57,-1000),(1747,58,-1000),(1747,59,-1000),(1747,60,-1000),(1747,61,-1000),(1747,62,-1000),(1747,178,-1000),(1747,180,-1000),(1747,661,-1000),(1747,1106,-1000),(1748,51,-1000),(1748,52,-1000),(1748,53,-1000),(1748,54,-1000),(1748,55,-1000),(1748,56,-1000),(1748,57,-1000),(1748,58,-1000),(1748,59,-1000),(1748,60,-1000),(1748,61,-1000),(1748,62,-1000),(1748,178,-1000),(1748,180,-1000),(1748,661,-1000),(1748,1106,-1000),(1749,51,-1000),(1749,52,-1000),(1749,53,-1000),(1749,54,-1000),(1749,55,-1000),(1749,56,-1000),(1749,57,-1000),(1749,58,-1000),(1749,59,-1000),(1749,60,-1000),(1749,61,-1000),(1749,62,-1000),(1749,178,-1000),(1749,180,-1000),(1749,661,-1000),(1749,1106,-1000),(1750,51,-1000),(1750,52,-1000),(1750,53,-1000),(1750,54,-1000),(1750,55,-1000),(1750,56,-1000),(1750,57,-1000),(1750,58,-1000),(1750,59,-1000),(1750,60,-1000),(1750,61,-1000),(1750,62,-1000),(1750,178,-1000),(1750,180,-1000),(1750,661,-1000),(1750,1106,-1000),(1755,51,-1000),(1755,52,-1000),(1755,53,-1000),(1755,54,-1000),(1755,55,-1000),(1755,56,-1000),(1755,57,-1000),(1755,58,-1000),(1755,59,-1000),(1755,60,-1000),(1755,61,-1000),(1755,62,-1000),(1755,178,-1000),(1755,180,-1000),(1755,661,-1000),(1755,1106,-1000),(1758,51,100),(1758,52,100),(1758,53,100),(1758,54,100),(1758,55,100),(1758,56,100),(1758,57,100),(1758,58,100),(1758,59,100),(1758,60,100),(1758,61,100),(1758,62,100),(1758,178,100),(1758,180,100),(1758,661,100),(1758,1106,100),(1759,51,-100),(1759,52,-100),(1759,53,-100),(1759,54,-100),(1759,55,-100),(1759,56,-100),(1759,57,-100),(1759,58,-100),(1759,59,-100),(1759,60,-100),(1759,61,-100),(1759,62,-100),(1759,178,-100),(1759,180,-100),(1759,661,-100),(1759,1106,-100),(1761,51,-100),(1761,52,-100),(1761,53,-100),(1761,54,-100),(1761,55,-100),(1761,56,-100),(1761,57,-100),(1761,58,-100),(1761,59,-100),(1761,60,-100),(1761,61,-100),(1761,62,-100),(1761,178,-100),(1761,180,-100),(1761,661,-100),(1761,1106,-100),(1762,51,-1000),(1762,52,-1000),(1762,53,-1000),(1762,54,-1000),(1762,55,-1000),(1762,56,-1000),(1762,57,-1000),(1762,58,-1000),(1762,59,-1000),(1762,60,-1000),(1762,61,-1000),(1762,62,-1000),(1762,178,-1000),(1762,180,-1000),(1762,661,-1000),(1762,1106,-1000),(1763,51,-1001),(1763,52,-1001),(1763,53,-1001),(1763,54,-1001),(1763,55,-1001),(1763,56,-1001),(1763,57,-1001),(1763,58,-1001),(1763,59,-1001),(1763,60,-1001),(1763,61,-1001),(1763,62,-1001),(1763,178,-1001),(1763,180,-1001),(1763,661,-1001),(1763,1106,-1001),(1764,51,-1000),(1764,52,-1000),(1764,53,-1000),(1764,54,-1000),(1764,55,-1000),(1764,56,-1000),(1764,57,-1000),(1764,58,-1000),(1764,59,-1000),(1764,60,-1000),(1764,61,-1000),(1764,62,-1000),(1764,178,-1000),(1764,180,-1000),(1764,661,-1000),(1764,1106,-1000),(1765,51,-1000),(1765,52,-1000),(1765,53,-1000),(1765,54,-1000),(1765,55,-1000),(1765,56,-1000),(1765,57,-1000),(1765,58,-1000),(1765,59,-1000),(1765,60,-1000),(1765,61,-1000),(1765,62,-1000),(1765,178,-1000),(1765,180,-1000),(1765,661,-1000),(1765,1106,-1000),(1766,51,-1000),(1766,52,-1000),(1766,53,-1000),(1766,54,-1000),(1766,55,-1000),(1766,56,-1000),(1766,57,-1000),(1766,58,-1000),(1766,59,-1000),(1766,60,-1000),(1766,61,-1000),(1766,62,-1000),(1766,178,-1000),(1766,180,-1000),(1766,661,-1000),(1766,1106,-1000),(1767,51,-1000),(1767,52,-1000),(1767,53,-1000),(1767,54,-1000),(1767,55,-1000),(1767,56,-1000),(1767,57,-1000),(1767,58,-1000),(1767,59,-1000),(1767,60,-1000),(1767,61,-1000),(1767,62,-1000),(1767,178,-1000),(1767,180,-1000),(1767,661,-1000),(1767,1106,-1000),(1768,51,-1000),(1768,52,-1000),(1768,53,-1000),(1768,54,-1000),(1768,55,-1000),(1768,56,-1000),(1768,57,-1000),(1768,58,-1000),(1768,59,-1000),(1768,60,-1000),(1768,61,-1000),(1768,62,-1000),(1768,178,-1000),(1768,180,-1000),(1768,661,-1000),(1768,1106,-1000),(1770,51,-400),(1770,52,-400),(1770,53,-400),(1770,54,-400),(1770,55,-400),(1770,56,-400),(1770,57,-400),(1770,58,-400),(1770,59,-400),(1770,60,-400),(1770,61,-400),(1770,62,-400),(1770,178,-400),(1770,180,-400),(1770,661,-400),(1770,1106,-400),(1771,51,-750),(1771,52,-750),(1771,53,-750),(1771,54,-750),(1771,55,-750),(1771,56,-750),(1771,57,-750),(1771,58,-750),(1771,59,-750),(1771,60,-750),(1771,61,-750),(1771,62,-750),(1771,178,-750),(1771,180,-750),(1771,661,-750),(1771,1106,-750),(1775,51,50),(1775,52,50),(1775,53,50),(1775,54,50),(1775,55,50),(1775,56,50),(1775,57,50),(1775,58,50),(1775,59,50),(1775,60,50),(1775,61,50),(1775,62,50),(1775,178,50),(1775,180,50),(1775,661,50),(1775,1106,50),(1777,51,-2000),(1777,52,-2000),(1777,53,-2000),(1777,54,-2000),(1777,55,-2000),(1777,56,-2000),(1777,57,-2000),(1777,58,-2000),(1777,59,-2000),(1777,60,-2000),(1777,61,-2000),(1777,62,-2000),(1777,178,-2000),(1777,180,-2000),(1777,661,-2000),(1777,1106,-2000),(1778,51,10),(1778,52,10),(1778,53,10),(1778,54,10),(1778,55,10),(1778,56,10),(1778,57,10),(1778,58,10),(1778,59,10),(1778,60,10),(1778,61,10),(1778,62,10),(1778,178,10),(1778,180,10),(1778,661,10),(1778,1106,10),(1779,51,30),(1779,52,30),(1779,53,30),(1779,54,30),(1779,55,30),(1779,56,30),(1779,57,30),(1779,58,30),(1779,59,30),(1779,60,30),(1779,61,30),(1779,62,30),(1779,178,30),(1779,180,30),(1779,661,30),(1779,1106,30),(1780,51,90),(1780,52,90),(1780,53,90),(1780,54,90),(1780,55,90),(1780,56,90),(1780,57,90),(1780,58,90),(1780,59,90),(1780,60,90),(1780,61,90),(1780,62,90),(1780,178,90),(1780,180,90),(1780,661,90),(1780,1106,90),(1781,51,90),(1781,52,90),(1781,53,90),(1781,54,90),(1781,55,90),(1781,56,90),(1781,57,90),(1781,58,90),(1781,59,90),(1781,60,90),(1781,61,90),(1781,62,90),(1781,178,90),(1781,180,90),(1781,661,90),(1781,1106,90),(1783,51,10),(1783,52,10),(1783,53,10),(1783,54,10),(1783,55,10),(1783,56,10),(1783,57,10),(1783,58,10),(1783,59,10),(1783,60,10),(1783,61,10),(1783,62,10),(1783,178,10),(1783,180,10),(1783,661,10),(1783,1106,10),(1784,51,-1000),(1784,52,-1000),(1784,53,-1000),(1784,54,-1000),(1784,55,-1000),(1784,56,-1000),(1784,57,-1000),(1784,58,-1000),(1784,59,-1000),(1784,60,-1000),(1784,61,-1000),(1784,62,-1000),(1784,178,-1000),(1784,180,-1000),(1784,661,-1000),(1784,1106,-1000),(1785,51,90),(1785,52,90),(1785,53,90),(1785,54,90),(1785,55,90),(1785,56,90),(1785,57,90),(1785,58,90),(1785,59,90),(1785,60,90),(1785,61,90),(1785,62,90),(1785,178,90),(1785,180,90),(1785,661,90),(1785,1106,90),(1786,51,10),(1786,52,10),(1786,53,10),(1786,54,10),(1786,55,10),(1786,56,10),(1786,57,10),(1786,58,10),(1786,59,10),(1786,60,10),(1786,61,10),(1786,62,10),(1786,178,10),(1786,180,10),(1786,661,10),(1786,1106,10),(1787,51,-2000),(1787,52,-2000),(1787,53,-2000),(1787,54,-2000),(1787,55,-2000),(1787,56,-2000),(1787,57,-2000),(1787,58,-2000),(1787,59,-2000),(1787,60,-2000),(1787,61,-2000),(1787,62,-2000),(1787,178,-2000),(1787,180,-2000),(1787,661,-2000),(1787,1106,-2000),(1788,51,-2000),(1788,52,-2000),(1788,53,-2000),(1788,54,-2000),(1788,55,-2000),(1788,56,-2000),(1788,57,-2000),(1788,58,-2000),(1788,59,-2000),(1788,60,-2000),(1788,61,-2000),(1788,62,-2000),(1788,178,-2000),(1788,180,-2000),(1788,661,-2000),(1788,1106,-2000),(1789,51,-110),(1789,52,-110),(1789,53,-110),(1789,54,-110),(1789,55,-110),(1789,56,-110),(1789,57,-110),(1789,58,-110),(1789,59,-110),(1789,60,-110),(1789,61,-110),(1789,62,-110),(1789,178,-110),(1789,180,-110),(1789,661,-110),(1789,1106,-110),(1790,51,-1000),(1790,52,-1000),(1790,53,-1000),(1790,54,-1000),(1790,55,-1000),(1790,56,-1000),(1790,57,-1000),(1790,58,-1000),(1790,59,-1000),(1790,60,-1000),(1790,61,-1000),(1790,62,-1000),(1790,178,-1000),(1790,180,-1000),(1790,661,-1000),(1790,1106,-1000),(1791,51,-110),(1791,52,-110),(1791,53,-110),(1791,54,-110),(1791,55,-110),(1791,56,-110),(1791,57,-110),(1791,58,-110),(1791,59,-110),(1791,60,-110),(1791,61,-110),(1791,62,-110),(1791,178,-110),(1791,180,-110),(1791,661,-110),(1791,1106,-110),(1792,51,-1000),(1792,52,-1000),(1792,53,-1000),(1792,54,-1000),(1792,55,-1000),(1792,56,-1000),(1792,57,-1000),(1792,58,-1000),(1792,59,-1000),(1792,60,-1000),(1792,61,-1000),(1792,62,-1000),(1792,178,-1000),(1792,180,-1000),(1792,661,-1000),(1792,1106,-1000),(1793,51,-110),(1793,52,-110),(1793,53,-110),(1793,54,-110),(1793,55,-110),(1793,56,-110),(1793,57,-110),(1793,58,-110),(1793,59,-110),(1793,60,-110),(1793,61,-110),(1793,62,-110),(1793,178,-110),(1793,180,-110),(1793,661,-110),(1793,1106,-110),(1794,51,-1000),(1794,52,-1000),(1794,53,-1000),(1794,54,-1000),(1794,55,-1000),(1794,56,-1000),(1794,57,-1000),(1794,58,-1000),(1794,59,-1000),(1794,60,-1000),(1794,61,-1000),(1794,62,-1000),(1794,178,-1000),(1794,180,-1000),(1794,661,-1000),(1794,1106,-1000),(1795,51,-110),(1795,52,-110),(1795,53,-110),(1795,54,-110),(1795,55,-110),(1795,56,-110),(1795,57,-110),(1795,58,-110),(1795,59,-110),(1795,60,-110),(1795,61,-110),(1795,62,-110),(1795,178,-110),(1795,180,-110),(1795,661,-110),(1795,1106,-110),(1796,51,-1000),(1796,52,-1000),(1796,53,-1000),(1796,54,-1000),(1796,55,-1000),(1796,56,-1000),(1796,57,-1000),(1796,58,-1000),(1796,59,-1000),(1796,60,-1000),(1796,61,-1000),(1796,62,-1000),(1796,178,-1000),(1796,180,-1000),(1796,661,-1000),(1796,1106,-1000),(1798,51,-110),(1798,52,-110),(1798,53,-110),(1798,54,-110),(1798,55,-110),(1798,56,-110),(1798,57,-110),(1798,58,-110),(1798,59,-110),(1798,60,-110),(1798,61,-110),(1798,62,-110),(1798,178,-110),(1798,180,-110),(1798,661,-110),(1798,1106,-110),(1799,51,-1000),(1799,52,-1000),(1799,53,-1000),(1799,54,-1000),(1799,55,-1000),(1799,56,-1000),(1799,57,-1000),(1799,58,-1000),(1799,59,-1000),(1799,60,-1000),(1799,61,-1000),(1799,62,-1000),(1799,178,-1000),(1799,180,-1000),(1799,661,-1000),(1799,1106,-1000),(1801,51,0),(1801,52,0),(1801,53,0),(1801,54,0),(1801,55,0),(1801,56,0),(1801,57,0),(1801,58,0),(1801,59,0),(1801,60,100),(1801,61,0),(1801,62,0),(1801,178,0),(1801,180,0),(1801,211,100),(1801,661,0),(1801,1106,0),(1802,51,-1000),(1802,52,-1000),(1802,53,-1000),(1802,54,-1000),(1802,55,-1000),(1802,56,-1000),(1802,57,-1000),(1802,58,-1000),(1802,59,-1000),(1802,60,-1000),(1802,61,-1000),(1802,62,-1000),(1802,178,-1000),(1802,180,-1000),(1802,211,100),(1802,661,-1000),(1802,1106,-1000),(1817,51,-500),(1817,52,-500),(1817,53,-500),(1817,54,-500),(1817,55,-500),(1817,56,-500),(1817,57,-500),(1817,58,-500),(1817,59,-500),(1817,60,-500),(1817,61,-500),(1817,62,-500),(1817,178,-500),(1817,180,-500),(1817,661,-500),(1817,1106,-500),(1818,51,-1000),(1818,52,-1000),(1818,53,-1000),(1818,54,-1000),(1818,55,-1000),(1818,56,-1000),(1818,57,-1000),(1818,58,-1000),(1818,59,-1000),(1818,60,-1000),(1818,61,-1000),(1818,62,-1000),(1818,178,-1000),(1818,180,-1000),(1818,661,-1000),(1818,1106,-1000),(1819,51,-100),(1819,52,-100),(1819,53,-100),(1819,54,-100),(1819,55,-100),(1819,56,-100),(1819,57,-100),(1819,58,-100),(1819,59,-100),(1819,60,-100),(1819,61,-100),(1819,62,-100),(1819,178,-100),(1819,180,-100),(1819,661,-100),(1819,1106,-100),(1820,51,100),(1820,52,100),(1820,53,100),(1820,54,100),(1820,55,100),(1820,56,100),(1820,57,100),(1820,58,100),(1820,59,100),(1820,60,100),(1820,61,100),(1820,62,100),(1820,178,100),(1820,180,100),(1820,661,100),(1820,1106,100),(1821,51,-101),(1821,52,-101),(1821,53,-101),(1821,54,-101),(1821,55,-101),(1821,56,-101),(1821,57,-101),(1821,58,-101),(1821,59,-101),(1821,60,-101),(1821,61,-101),(1821,62,-101),(1821,178,-101),(1821,180,-101),(1821,661,-101),(1821,1106,-101),(1822,203,200),(1823,51,-1000),(1823,52,-1000),(1823,53,-1000),(1823,54,-1000),(1823,55,-1000),(1823,56,-1000),(1823,57,-1000),(1823,58,-1000),(1823,59,-1000),(1823,60,-1000),(1823,61,-1000),(1823,62,-1000),(1823,178,-1000),(1823,180,-1000),(1823,661,-1000),(1823,1106,-1000),(1824,51,-1000),(1824,52,-1000),(1824,53,-1000),(1824,54,-1000),(1824,55,-1000),(1824,56,-1000),(1824,57,-1000),(1824,58,-1000),(1824,59,-1000),(1824,60,-1000),(1824,61,-1000),(1824,62,-1000),(1824,178,-1000),(1824,180,-1000),(1824,661,-1000),(1824,1106,-1000),(1828,51,-1000),(1828,52,-1000),(1828,53,-1000),(1828,54,-1000),(1828,55,-1000),(1828,56,-1000),(1828,57,-1000),(1828,58,-1000),(1828,59,-1000),(1828,60,-1000),(1828,61,-1000),(1828,62,-1000),(1828,178,-1000),(1828,180,-1000),(1828,661,-1000),(1828,1106,-1000),(1829,51,-1000),(1829,52,-1000),(1829,53,-1000),(1829,54,-1000),(1829,55,-1000),(1829,56,-1000),(1829,57,-1000),(1829,58,-1000),(1829,59,-1000),(1829,60,-1000),(1829,61,-1000),(1829,62,-1000),(1829,178,-1000),(1829,180,-1000),(1829,661,-1000),(1829,1106,-1000),(1830,51,-800),(1830,52,-800),(1830,53,-800),(1830,54,-800),(1830,55,-800),(1830,56,-800),(1830,57,-800),(1830,58,-800),(1830,59,-800),(1830,60,-800),(1830,61,-800),(1830,62,-800),(1830,178,-800),(1830,180,-800),(1830,661,-800),(1830,1106,-800),(1831,51,-800),(1831,52,-800),(1831,53,-800),(1831,54,-800),(1831,55,-800),(1831,56,-800),(1831,57,-800),(1831,58,-800),(1831,59,-800),(1831,60,-800),(1831,61,-800),(1831,62,-800),(1831,178,-800),(1831,180,-800),(1831,661,-800),(1831,1106,-800),(1846,1,100),(1846,5,-100),(1846,11,-100),(1846,12,100),(1846,13,100),(1846,14,100),(1846,16,100),(1846,51,-2000),(1846,52,-2000),(1846,53,-2000),(1846,54,-2000),(1846,55,-2000),(1846,57,-2000),(1846,58,-2000),(1846,59,-2000),(1846,60,-2000),(1846,61,-2000),(1846,62,-2000),(1846,178,-2000),(1846,180,-2000),(1846,206,50),(1846,661,-2000),(1846,1106,-2000),(1847,1,-100),(1847,5,100),(1847,11,100),(1847,12,-100),(1847,13,-100),(1847,14,-100),(1847,16,-100),(1847,51,-2000),(1847,52,-2000),(1847,53,-2000),(1847,54,-2000),(1847,55,-2000),(1847,57,-2000),(1847,58,-2000),(1847,59,-2000),(1847,60,-2000),(1847,61,-2000),(1847,62,-2000),(1847,178,-2000),(1847,180,-2000),(1847,206,50),(1847,661,-2000),(1847,1106,-2000),(1852,51,-2000),(1852,52,-2000),(1852,53,-2000),(1852,54,-2000),(1852,55,-2000),(1852,56,-2000),(1852,57,-2000),(1852,58,-2000),(1852,59,-2000),(1852,60,-2000),(1852,61,-2000),(1852,62,-2000),(1852,178,-2000),(1852,180,-2000),(1852,661,-2000),(1852,1106,-2000),(1853,51,-1000),(1853,52,-1000),(1853,53,-1000),(1853,54,-1000),(1853,55,-1000),(1853,56,-1000),(1853,57,-1000),(1853,58,-1000),(1853,59,-1000),(1853,60,-1000),(1853,61,-1000),(1853,62,-1000),(1853,178,-1000),(1853,180,-1000),(1853,661,-1000),(1853,1106,-1000),(1854,51,-1000),(1854,52,-1000),(1854,53,-1000),(1854,54,-1000),(1854,55,-1000),(1854,56,-1000),(1854,57,-1000),(1854,58,-1000),(1854,59,-1000),(1854,60,-1000),(1854,61,-1000),(1854,62,-1000),(1854,178,-1000),(1854,180,-1000),(1854,661,-1000),(1854,1106,-1000),(1855,51,-1000),(1855,52,-1000),(1855,53,-1000),(1855,54,-1000),(1855,55,-1000),(1855,56,-1000),(1855,57,-1000),(1855,58,-1000),(1855,59,-1000),(1855,60,-1000),(1855,61,-1000),(1855,62,-1000),(1855,178,-800),(1855,180,-800),(1855,661,-800),(1855,1106,-800),(1856,51,-75),(1856,52,-75),(1856,53,-50),(1856,54,-75),(1856,55,-25),(1856,56,-25),(1856,57,-75),(1856,58,-75),(1856,59,-75),(1856,60,-75),(1856,61,-75),(1856,62,-75),(1856,178,-75),(1856,180,-75),(1856,202,-25),(1856,205,-10),(1856,214,-10),(1856,216,25),(1856,661,-75),(1856,1106,-75),(1857,51,-1000),(1857,52,-1000),(1857,53,-1000),(1857,54,-1000),(1857,55,-1000),(1857,56,-1000),(1857,57,-1000),(1857,58,-1000),(1857,59,-1000),(1857,60,-1000),(1857,61,-1000),(1857,62,-1000),(1857,178,-1000),(1857,180,-1000),(1857,661,-1000),(1857,1106,-1000),(1858,51,-1000),(1858,52,-1000),(1858,53,-1000),(1858,54,-1000),(1858,55,-1000),(1858,56,-1000),(1858,57,-1000),(1858,58,-1000),(1858,59,-1000),(1858,60,-1000),(1858,61,-1000),(1858,62,-1000),(1858,178,-1000),(1858,180,-1000),(1858,661,-1000),(1858,1106,-1000),(1859,1,1),(1859,2,1),(1859,3,100),(1859,4,250),(1859,5,1),(1859,6,250),(1859,7,1),(1859,8,100),(1859,9,1),(1859,10,100),(1859,11,1),(1859,12,1),(1859,13,1),(1859,14,100),(1859,15,100),(1859,16,1),(1859,51,-100),(1859,52,100),(1859,53,-100),(1859,54,250),(1859,55,250),(1859,56,-250),(1859,57,250),(1859,58,-250),(1859,59,-100),(1859,60,-100),(1859,61,250),(1859,62,-250),(1859,178,-100),(1859,180,150),(1859,201,-300),(1859,202,-500),(1859,203,-300),(1859,204,500),(1859,205,-500),(1859,206,-300),(1859,207,500),(1859,208,200),(1859,209,200),(1859,210,200),(1859,211,-200),(1859,212,200),(1859,213,-500),(1859,214,200),(1859,215,500),(1859,216,100),(1859,661,250),(1859,1106,-250),(1860,1,250),(1860,2,250),(1860,3,1),(1860,4,1),(1860,5,100),(1860,6,1),(1860,7,100),(1860,8,1),(1860,9,100),(1860,10,1),(1860,11,100),(1860,12,100),(1860,13,100),(1860,14,1),(1860,15,1),(1860,16,100),(1860,51,100),(1860,52,-100),(1860,53,100),(1860,54,-250),(1860,55,-250),(1860,56,250),(1860,57,-250),(1860,58,250),(1860,59,100),(1860,60,100),(1860,61,-250),(1860,62,250),(1860,178,100),(1860,180,-150),(1860,201,300),(1860,202,500),(1860,203,300),(1860,204,-500),(1860,205,500),(1860,206,300),(1860,207,-500),(1860,208,-200),(1860,209,-200),(1860,210,-200),(1860,211,200),(1860,212,-200),(1860,213,500),(1860,214,-200),(1860,215,-500),(1860,216,-100),(1860,661,-250),(1860,1106,250),(1862,51,-75),(1862,52,-75),(1862,53,-50),(1862,54,-75),(1862,55,-25),(1862,56,-25),(1862,57,-75),(1862,58,-75),(1862,59,-75),(1862,60,-75),(1862,61,-75),(1862,62,-75),(1862,178,-75),(1862,180,-75),(1862,202,-25),(1862,205,-10),(1862,214,-10),(1862,216,25),(1862,661,-75),(1862,1106,-75),(1863,51,-600),(1863,52,-600),(1863,53,-600),(1863,54,-600),(1863,55,-600),(1863,56,-600),(1863,57,-600),(1863,58,-600),(1863,59,-600),(1863,60,-600),(1863,61,-600),(1863,62,-600),(1863,178,-600),(1863,180,-600),(1863,661,-600),(1863,1106,-600),(1864,51,-600),(1864,52,-600),(1864,53,-600),(1864,54,-600),(1864,55,-600),(1864,56,-600),(1864,57,-600),(1864,58,-600),(1864,59,-600),(1864,60,-600),(1864,61,-600),(1864,62,-600),(1864,178,-600),(1864,180,-600),(1864,661,-600),(1864,1106,-600),(1865,51,-600),(1865,52,-600),(1865,53,-600),(1865,54,-600),(1865,55,-600),(1865,56,-600),(1865,57,-600),(1865,58,-600),(1865,59,-600),(1865,60,-600),(1865,61,-600),(1865,62,-600),(1865,178,-600),(1865,180,-600),(1865,661,-600),(1865,1106,-600),(1866,51,-600),(1866,52,-600),(1866,53,-600),(1866,54,-600),(1866,55,-600),(1866,56,-600),(1866,57,-600),(1866,58,-600),(1866,59,-600),(1866,60,-600),(1866,61,-600),(1866,62,-600),(1866,178,-600),(1866,180,-600),(1866,661,-600),(1866,1106,-600),(1867,51,1),(1867,52,1),(1867,53,1),(1867,54,1),(1867,55,1),(1867,56,1),(1867,57,1),(1867,58,1),(1867,59,1),(1867,60,1),(1867,61,1),(1867,62,1),(1867,178,1),(1867,180,1),(1867,661,1),(1867,1106,1),(1868,51,1),(1868,52,1),(1868,53,1),(1868,54,1),(1868,55,1),(1868,56,1),(1868,57,1),(1868,58,1),(1868,59,1),(1868,60,1),(1868,61,1),(1868,62,1),(1868,178,1),(1868,180,1),(1868,661,1),(1868,1106,1),(1869,51,1),(1869,52,1),(1869,53,1),(1869,54,1),(1869,55,1),(1869,56,1),(1869,57,1),(1869,58,1),(1869,59,1),(1869,60,1),(1869,61,1),(1869,62,1),(1869,178,1),(1869,180,1),(1869,661,1),(1869,1106,1),(1870,51,1),(1870,52,1),(1870,53,1),(1870,54,1),(1870,55,1),(1870,56,1),(1870,57,1),(1870,58,1),(1870,59,1),(1870,60,1),(1870,61,1),(1870,62,1),(1870,178,1),(1870,180,1),(1870,661,1),(1870,1106,1),(1872,51,1),(1872,52,1),(1872,53,1),(1872,54,1),(1872,55,1),(1872,56,1),(1872,57,1),(1872,58,1),(1872,59,1),(1872,60,1),(1872,61,1),(1872,62,1),(1872,178,1),(1872,180,1),(1872,661,1),(1872,1106,1); -UNLOCK TABLES; - --- --- Table structure for table `client_faction_names` --- - -DROP TABLE IF EXISTS `client_faction_names`; -CREATE TABLE `client_faction_names` ( - `id` int(11) NOT NULL, - `name` varchar(45) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- --- Dumping data for table `client_faction_names` --- - -LOCK TABLES `client_faction_names` WRITE; -INSERT INTO `client_faction_names` VALUES (0,'NoFaction'),(1,'Warrior'),(2,'Cleric'),(3,'Paladin'),(4,'Ranger'),(5,'ShadowKnight'),(6,'Druid'),(7,'Monk'),(8,'Bard'),(9,'Rogue'),(10,'Shaman'),(11,'Necromancer'),(12,'Wizard'),(13,'Magician'),(14,'Enchanter'),(15,'Beastlord'),(16,'Berserker'),(17,'GUILDMASTERWARRIOR'),(18,'GUILDMASTERCLERIC'),(19,'GUILDMASTERPALADIN'),(20,'GUILDMASTERRANGER'),(21,'GUILDMASTERSK'),(22,'GUILDMASTERDRUID'),(23,'GUILDMASTERMONK'),(24,'GUILDMASTERBARD'),(25,'GUILDMASTERROGUE'),(26,'GUILDMASTERSHAMAN'),(27,'GUILDMASTERNECRO'),(28,'GUILDMASTERWIZARD'),(29,'GUILDMASTERMAGICIAN'),(30,'GUILDMASTERENCHANTER'),(31,'Class31'),(32,'Merchant'),(33,'Class33'),(34,'Class34'),(35,'Class35'),(36,'Class36'),(37,'Class37'),(38,'Class38'),(39,'Class39'),(40,'Class40'),(41,'Class41'),(42,'Class42'),(43,'Class43'),(44,'Class44'),(45,'Class45'),(46,'Class46'),(47,'Class47'),(48,'Class48'),(49,'Class49'),(50,'Class50'),(51,'Human'),(52,'Barbarian'),(53,'Erudite'),(54,'Wood Elf'),(55,'High Elf'),(56,'Dark Elf'),(57,'Half Elf'),(58,'Dwarf'),(59,'Troll'),(60,'Ogre'),(61,'Halfling'),(62,'Gnome'),(63,'Aviak'),(64,'Werewolf'),(65,'Brownies of Faydwer'),(66,'Centaur'),(67,'Clay Golem'),(68,'Cyclops'),(69,'Trakanon (Race)'),(70,'Venril Sathir (Race)'),(71,'Evil Eye'),(72,'Fire Beetle'),(73,'Kerran (Race)'),(74,'Fish'),(75,'Fairy (Race)'),(76,'Froglok'),(77,'Froglok Ghoul'),(78,'Fungus Man'),(79,'Gargoyle'),(80,'Race Faction (80)'),(81,'Gelatinous Cube'),(82,'Ghost'),(83,'Ghoul'),(84,'Giant Bat'),(85,'Beta KOS Copy 9'),(86,'Giant Rat'),(87,'Giant Snake'),(88,'Giant Spider'),(89,'Gnoll'),(90,'Goblin'),(91,'Gorilla'),(92,'Wolf'),(93,'Bear'),(94,'Human Guard (Race)'),(95,'Demi Lich (Race)'),(96,'Imp'),(97,'Griffon'),(98,'Kobold'),(99,'Lava Dragon'),(100,'Lion'),(101,'Lizard Man'),(102,'Mimic'),(103,'Minotaur'),(104,'Orc'),(105,'Human Beggar'),(106,'Pixies of Faydwer'),(107,'Drachnid (Race)'),(108,'Solusek Ro (Race)'),(109,'Kunark Goblin (Race)'),(110,'Skeleton'),(111,'Shark (Race)'),(112,'Tunare (Race)'),(113,'Tiger'),(114,'Treant'),(115,'Vampire'),(116,'Rallos Zek (Race)'),(117,'High Hold Citizen'),(118,'Tentacle'),(119,'Will-O-Wisp'),(120,'Zombie'),(121,'Qeynos Citizens'),(122,'Ship'),(123,'Launch'),(124,'Piranha'),(125,'Elemental'),(126,'Puma'),(127,'Neriak Citizen'),(128,'Erudin Citizens'),(129,'Bixie'),(130,'Reanimated Hand'),(131,'Rivervale Guard'),(132,'Scarecrow'),(133,'Skunk'),(134,'Snake Elemental'),(135,'Spectre'),(136,'Sphinx'),(137,'Armadillo'),(138,'Clockworks of Ak`Anon'),(139,'Drake'),(140,'Halas Citizen'),(141,'Alligator'),(142,'Grobb Citizen'),(143,'Oggok Citizen'),(144,'Kaladim Citizens'),(145,'Cazic-Thule (Race)'),(146,'Cockatrice'),(147,'Diasy Men'),(148,'Elf Vampire'),(149,'Amygdalan'),(150,'Dervish'),(151,'Efreeti'),(152,'Froglok Tadpole'),(153,'Kedge'),(154,'Leech'),(155,'Sword Fish'),(156,'Fel Guard'),(157,'Mammoth'),(158,'Eye of Zomm'),(159,'Wasp'),(160,'Mermaid'),(161,'Harpie'),(162,'Fayguard'),(163,'Drixie'),(164,'Ghost Ship'),(165,'Clam'),(166,'Sea Horse'),(167,'Ghost Dwarf'),(168,'Erudite Ghost'),(169,'Saber-toothed Cat'),(170,'SpiritWolf'),(171,'Gorgon'),(172,'Dragon Skeleton'),(173,'Innoruuk (Race)'),(174,'Unicorn Nightmare'),(175,'Pegasus'),(176,'Djinn (Race)'),(177,'Invisible Man'),(178,'Iksar'),(179,'Scorpion'),(180,'Vah Shir'),(181,'Sarnak'),(182,'Draglok Invalid Race'),(183,'Lycanthrope'),(184,'Mosquito'),(185,'Rhino'),(186,'Xalgoz Race'),(187,'Kunark Goblin'),(188,'Yeti'),(189,'Iksar Citizen'),(190,'Forest Giant'),(191,'Boat'),(192,'Race Faction (192)'),(193,'Race Faction (193)'),(194,'Burynai'),(195,'Goo'),(196,'Spectral Sarnak'),(197,'Spectral Iksar'),(198,'Kunark Fish'),(199,'Iksar Scorpion'),(200,'Erollisi Marr (Race)'),(201,'Bertoxxulous'),(202,'Brell Serilis'),(203,'Cazic-Thule'),(204,'Erollisi Marr'),(205,'Fizzlethorp'),(206,'Innoruuk'),(207,'Karana'),(208,'Mithaniel Marr'),(209,'Prexus'),(210,'Quellious'),(211,'Rallos Zek'),(212,'Rodcet Nife'),(213,'Solusek Ro'),(214,'Tribunal'),(215,'Tunare'),(216,'Veeshan'),(217,'Allize Volew'),(218,'Allize Taeew'),(219,'Antonius Bayle'),(220,'Arcane Scientists'),(221,'Bloodsabers'),(222,'Broken Skull Clan'),(223,'Circle of Unseen Hands'),(224,'Clan Drippycan'),(225,'Clan Runnyeye'),(226,'Clerics of Tunare'),(227,'Clerics of Underfoot'),(228,'Clurg'),(229,'Coalition of Tradefolk'),(230,'Corrupt Qeynos Guards'),(231,'Craftkeepers'),(232,'Craknek Warriors'),(233,'Crimson Hands'),(234,'Crushbone Orcs'),(235,'DaBashers'),(236,'Dark Bargainers'),(237,'Dark Ones'),(238,'Dark Reflection'),(239,'The Dead'),(240,'Deepmuses'),(241,'Deeppockets'),(242,'Deepwater Knights'),(243,'Drafling'),(244,'Ebon Mask'),(245,'Eldritch Collective'),(246,'Faydarks Champions'),(247,'Horde of Xalgoz'),(248,'Inhabitants of Firiona Vie'),(249,'Nagafen'),(250,'The Kromdul'),(251,'Frogloks of Guk'),(252,'Frogloks of Kunark'),(253,'Burynai Legion'),(254,'Gate Callers'),(255,'Gem Choppers'),(256,'Bloodgills'),(257,'Goblins of Cleaving Tooth'),(258,'Goblins of Fire Peak'),(259,'Goblins of Mountain Death'),(260,'Gnarled Fist'),(261,'Green Blood Knights'),(262,'Guards of Qeynos'),(263,'Guardians of the Vale'),(264,'Whistling Fist Brotherhood'),(265,'Heretics'),(266,'High Council of Erudin'),(267,'High Guard of Erudin'),(268,'Combine Empire'),(269,'Kithicor Residents'),(270,'Indigo Brotherhood'),(271,'Dismal Rage'),(272,'Jaggedpine Treefolk'),(273,'Kane Bayle'),(274,'Kazon Stormhammer'),(275,'Keepers of the Art'),(276,'Kelethin Merchants'),(277,'Kerra of Barren Coast'),(278,'King Naythox Thex'),(279,'King Tearis Thex'),(280,'Knights of Thunder'),(281,'Knights of Truth'),(282,'Kobolds of Fire Pit'),(283,'Pack of Tomar'),(284,'League of Antonican Bards'),(285,'Mayong Mistmoore'),(286,'Mayor Gubbin'),(287,'Meldrath'),(288,'Merchants of Ak`Anon'),(289,'Merchants of Erudin'),(290,'Merchants of Kaladim'),(291,'Merchants of Qeynos'),(292,'Merchants of Rivervale'),(293,'Miners Guild 249'),(294,'Miragul'),(295,'The Kromdek'),(296,'Opal Darkbriar'),(297,'Paladins of Underfoot'),(298,'Peace Keepers'),(299,'Phinigel Autropos'),(300,'Priests of Mischief'),(301,'Priests of Nagafen'),(302,'Protectors of Pine'),(303,'Queen Cristanos Thex'),(304,'Ring of Scale'),(305,'Rogues of the White Rose'),(306,'Sabertooths of Blackburrow'),(307,'Sarnak Collective'),(308,'Shadowknights of Night Keep'),(309,'Silent Fist Clan'),(310,'Soldiers of Tunare'),(311,'Steel Warriors'),(312,'Storm Guard'),(313,'Pirates of Gunthak'),(314,'Syth of Permafrost'),(315,'Trakanon'),(316,'Tunare\'s Scouts'),(317,'Undead Frogloks of Guk'),(318,'Venril Sathir'),(319,'Vox'),(320,'Wolves of the North'),(321,'Split Paw Clan'),(322,'Miners Guild 628'),(323,'Solusek Mining Co.'),(324,'Unkempt Druids'),(325,'Merchants of Felwithe'),(326,'Emerald Warriors'),(327,'Shamen of Justice'),(328,'Merchants of Halas'),(329,'Carson McCabe'),(330,'The Freeport Militia'),(331,'Merchants of Highpass'),(332,'Highpass Guards'),(333,'King Ak`Anon'),(334,'Dreadguard Outer'),(335,'Thoughtbleeders of Fear'),(336,'Coalition of Tradefolk Underground'),(337,'Oggok Guards'),(338,'Merchants of Oggok'),(339,'Bonethrowers'),(340,'Priests of Innoruuk'),(341,'Priests of Life'),(342,'Order of Three'),(343,'Surefall Protected Animals'),(344,'Beta Neutral'),(345,'Karana Residents'),(346,'Commons Residents'),(347,'Shark'),(348,'Runnyeye A'),(349,'Runnyeye B'),(350,'Runnyeye C'),(351,'Neriak Outer'),(352,'Neriak Inner'),(353,'Neriak Ogre'),(354,'Neriak Troll'),(355,'Storm Reapers'),(356,'Diseased Animal'),(357,'Akhevan (Plane of Shadow)'),(358,'Corrupt Akhevan'),(359,'Defenders of Luclin'),(360,'Iskar'),(361,'Ashen Order'),(362,'Priests of Marr'),(363,'The Spurned'),(364,'Shralok Orcs'),(365,'Pickclaw Goblins'),(366,'Karana Bandits'),(367,'Donovon'),(368,'Dervish Cutthroats'),(369,'Timmerain Darkbrow'),(370,'Dreadguard Inner'),(371,'Neriak Ghoul'),(372,'Najena'),(373,'Mucktail Gnolls'),(374,'Oggok Resident'),(375,'Death Fist Orcs (good)'),(376,'Grobb Merchants'),(377,'Grobb Guard'),(378,'Stone Hive Bixies'),(379,'Butcherblock Bandits'),(380,'Wood Elf Bards'),(381,'Tunare\'s Martyrs 2'),(382,'Kerra Isle'),(383,'Thunder Hooves'),(384,'Fay Scout'),(385,'Defective Clockwork'),(386,'Unrest Inhabitants'),(387,'Befallen Inhabitants'),(388,'Fairie'),(389,'Golem'),(390,'New Combine Guards'),(391,'New Combine'),(392,'Faction392'),(393,'Djinn'),(394,'Shamen of War'),(395,'Morawk'),(396,'Agnostic'),(397,'Sky Talons (good)'),(398,'Riptide Goblins'),(399,'Sea Furies'),(400,'Cult of Fear'),(401,'Song Weavers'),(402,'Oracle of K`Arnon'),(403,'Oracle of Marud'),(404,'Truespirit'),(405,'Dain Frostreaver IV'),(406,'Coldain'),(407,'Ry`Gorr Clan Snow Orcs'),(408,'Faction408'),(409,'Tserrina Syl`Tor'),(410,'Guide1'),(411,'Guide2'),(412,'Krag'),(413,'Guide3'),(414,'Residents of Fear'),(415,'Temple of Solusek Ro'),(416,'Shadowed Men'),(417,'Ankhefenmut'),(418,'Zazamoukh'),(419,'Kromrif'),(420,'Fallen of Bloody Kithicor'),(421,'Aggressors of Kithicor'),(422,'Defenders of Kithicor'),(423,'Verish Mal'),(424,'Inhabitants of Sky'),(425,'Inhabitants of Hate'),(426,'Agents of Mistmoore'),(427,'Spirocs of Timorous'),(428,'Minions of Underfoot'),(429,'King Tormax'),(430,'Claws of Veeshan'),(431,'Ulthork'),(432,'Othmir'),(433,'Jaled Dar'),(434,'Sirens of the Grotto'),(435,'Velketor'),(436,'Yelinak'),(437,'Denizens of Mischief'),(438,'Servants of Tunare'),(439,'Snowfang Gnolls'),(440,'Cabilis Residents'),(441,'Legion of Cabilis'),(442,'Crusaders of Greenmist'),(443,'Brood of Kotiz'),(444,'Swift Tails'),(445,'Scaled Mystics'),(446,'The Forsaken'),(447,'Pirates of Iceclad'),(448,'Kromzek'),(449,'Tunarean Court'),(450,'Thrall of Kly'),(451,'Brood of Di`Zok'),(452,'The Hotwingz'),(453,'Citizens of Torsis'),(454,'Drusella Sathir'),(455,'Minions of Scale'),(456,'Gelistial'),(457,'Holgresh'),(458,'Geonid Collective'),(459,'Lithiniath'),(460,'Citizens of Froststone'),(461,'Crystal Denizens'),(462,'Chetari'),(463,'Paebala'),(464,'Zlandicar'),(465,'Tizmak Clan'),(466,'Guardians of the Shrine'),(467,'Guardians of Veeshan'),(468,'The Sleeper'),(469,'Protectors of Growth'),(470,'Peoples Republic of Thurgadin'),(471,'Clan Kolbok'),(472,'Warders of The Claw'),(473,'Kejek Village'),(474,'Sporali'),(475,'King Xorbb'),(476,'Beta Good'),(477,'Beta Evil'),(478,'Beta Warmly'),(479,'Beta KOS'),(480,'Faction480'),(481,'Faction481'),(482,'Tribunal (Race)'),(483,'Bertoxxulous (Race)'),(484,'Bristlebane (Race)'),(485,'Faydrake'),(486,'Sarnak Skeleton'),(487,'Ratman'),(488,'Wyvern'),(489,'Wurm'),(490,'Devourer'),(491,'Iksar Golem'),(492,'Iksar Skeleton'),(493,'Man-Eating Plant'),(494,'Raptor'),(495,'Sarnak Golem'),(496,'Water Dragon'),(497,'Iksar Hand'),(498,'Cactus Man'),(499,'Flying Monkey'),(500,'Brontotherium'),(501,'Snow Dervish'),(502,'Dire Wolf'),(503,'Manticore'),(504,'Totem Man'),(505,'Cold Spectre'),(506,'Enchanted Armor'),(507,'Snow Bunny'),(508,'Walrus'),(509,'Rock Gem Man'),(510,'Race Faction (510)'),(511,'Race Faction (511)'),(512,'Yakman'),(513,'Faun'),(514,'Coldain (Race)'),(515,'Velious Dragon'),(516,'Hag'),(517,'Hippogriff'),(518,'Siren'),(519,'Frost Giant'),(520,'Storm Giant'),(521,'Otter Man'),(522,'Walrus Man'),(523,'Clockwork Dragon'),(524,'Abhorrent'),(525,'Sea Turtle'),(526,'BandWdragons'),(527,'Ghost Dragon'),(528,'Race Faction (528)'),(529,'Prismatic Dragon'),(530,'Shik Nar of Fungus Grove'),(531,'Rockhopper'),(532,'Underbulk'),(533,'Grimling'),(534,'Vacuum Worm'),(535,'Race Faction (535)'),(536,'Kahli Shah'),(537,'Owlbear'),(538,'Rhino Beetle'),(539,'Vampyre'),(540,'Earth Elemental (Race)'),(541,'Air Elemental (Race)'),(542,'Water Elemental (Race)'),(543,'Fire Elemental (Race)'),(544,'Wetfang Minnow'),(545,'Thought Horror'),(546,'Tegi'),(547,'Horse'),(548,'Shissar of Chelsith'),(549,'Fungal Fiend'),(550,'Vampire Volatalis'),(551,'Stonegrabber'),(552,'Scarlet Cheetah'),(553,'Zelniak'),(554,'Lightcrawler'),(555,'Shade'),(556,'Sunflower'),(557,'Sun Revenant'),(558,'Shrieker'),(559,'Galorian'),(560,'Netherbian'),(561,'Akheva (Race Type)'),(562,'Spire Spirit'),(563,'Sonic Wolf'),(564,'Ground Shaker'),(565,'Vah Shir Skeleton'),(566,'Mutant Humanoid'),(567,'Seru Race'),(568,'Recuso'),(569,'Vah Shir King (Race)'),(570,'Vah Shir Guard (Race)'),(571,'Portal Man (Race)'),(572,'Lujein'),(573,'Potamide'),(574,'Dryad'),(575,'Evil Treant'),(576,'Mutant Fly'),(577,'Tarew Marr'),(578,'Solusek Ro New'),(579,'Clockwork Golem'),(580,'Clockwork Brain'),(581,'Spectral Banshee'),(582,'Guard of Justice Race'),(583,'Mischief Castle'),(584,'Disease Boss'),(585,'Sol Ro Guard'),(586,'Bertoxxulous Race'),(587,'Tribunal Race'),(588,'Terris-Thule'),(589,'Vegerog'),(590,'Crocodile'),(591,'POP Bat'),(592,'Slarghilug'),(593,'Tranquilion'),(594,'Tin Soldier'),(595,'Nightmare Wraith'),(596,'Malarian'),(597,'Knight of Pestilence'),(598,'Lepertoloth'),(599,'Bubonian Boss'),(600,'Bubonian Underling'),(601,'Pusling'),(602,'Mephit'),(603,'Stormrider'),(604,'Junk Beast'),(605,'Broken Clockwork'),(606,'Giant Clockwork'),(607,'Clockwork Beetle'),(608,'Nightmare Goblin'),(609,'Karana Race'),(610,'Blood Raven'),(611,'Nightmare Gargoyle'),(612,'Mouths of Insanity'),(613,'Skeletal Horse'),(614,'Saryrn Race'),(615,'Fennin Ro'),(616,'Tormentor'),(617,'Necromancer Priest'),(618,'Nightmare, Planar'),(619,'Rallos Zek Race Faction'),(620,'Vallon Zek Race Faction'),(621,'Tallon Zek Race Faction'),(622,'Air Mephit'),(623,'Earth Mephit'),(624,'Fire Mephit'),(625,'Nightmare Mephit'),(626,'Zebuxoruk'),(627,'Mithaniel Marr (Race)'),(628,'Undead Knight'),(629,'The Rathe'),(630,'Xegony'),(631,'Greater Fiend'),(632,'Race Faction (632)'),(633,'Crab'),(634,'Phoenix'),(635,'Quarm (Race)'),(636,'Bear PoP'),(637,'Storm Taarid'),(638,'Storm Satuur'),(639,'Storm Kuraaln'),(640,'Storm Volaas'),(641,'Storm Mana'),(642,'Storm Fire'),(643,'Storm Celestial'),(644,'War Wraith'),(645,'Wrulon'),(646,'Kraken'),(647,'Poison Frog'),(648,'Queztocoatal'),(649,'Valorian (War Soldier)'),(650,'War Boar'),(651,'Efreeti PoP'),(652,'War Boar Unarmored'),(653,'Black Knight'),(654,'Animated Armor'),(655,'Undead Footman'),(656,'Rallos Zek Minion'),(657,'Arachnid - PoP'),(658,'Crystal Spider (Race)'),(659,'Zebuxoruk\'s Cage (Race)'),(660,'Bastion of Thunder Portal (Race)'),(661,'Guktan'),(662,'Troll Buccaneer'),(663,'Troll Freebooter'),(664,'Troll Sea Rover'),(665,'Spectre Pirate Boss'),(666,'Pirate Boss'),(667,'Pirate Dark Shaman'),(668,'Pirate Officer'),(669,'Gnome Pirate'),(670,'Dark Elf Pirate'),(671,'Ogre Pirate'),(672,'Human Pirate'),(673,'Erudite Pirate'),(674,'Poison Arrow Frog'),(675,'Troll Zombie'),(676,'Luggald'),(677,'Luggald Armored'),(678,'Luggald Robed'),(679,'Drogmor (Race)'),(680,'Dream Delvers'),(681,'Beta Ally'),(682,'Beta Warmly'),(683,'Beta Kindly'),(684,'Beta Amiable'),(685,'Beta Apprehensive'),(686,'Beta Dubious'),(687,'Beta Threatening'),(688,'Shissar (Race)'),(689,'Shik Nar (Race)'),(690,'Shik Nar of Mons Letalis'),(691,'Brownie (Race)'),(692,'Pixie (Race)'),(693,'Qeynos Citizen (Race)'),(694,'Erudite Citizen (Race)'),(695,'Clockwork Gnome (Race)'),(696,'Kaladim Citizen (Race)'),(697,'Faction697'),(698,'Faction698'),(699,'Faction699'),(700,'Mercenary Coalition'),(701,'Beta KOS Copy 1'),(702,'Beta KOS Copy 2'),(703,'Beta KOS Copy 3'),(704,'Beta KOS Copy 4'),(705,'Beta KOS Copy 5'),(706,'Beta KOS Copy 6'),(707,'Beta KOS Copy 7'),(708,'Beta KOS Copy 8'),(709,'The Yendan'),(710,'Guardians of War'),(711,'Castle Rulnavis'),(712,'Castle Tamrel'),(713,'Soldiers of Tallon'),(714,'Soldiers of Vallon'),(715,'Inhabitants of Rulnavis'),(716,'Inhabitants of Tamrel'),(717,'Keepers of Narikor'),(718,'The Disgraced'),(719,'Minions of Rot'),(720,'Memorial Gnomelike'),(721,'Iron Legion'),(722,'Faction722'),(723,'Faction723'),(724,'Faction724'),(725,'Faction725'),(726,'Faction726'),(727,'Faction727'),(728,'Faction728'),(729,'Faction729'),(730,'Faction730'),(731,'Faction731'),(732,'Faction732'),(733,'Faction733'),(734,'Faction734'),(735,'Faction735'),(736,'Faction736'),(737,'Faction737'),(738,'Faction738'),(739,'Faction739'),(740,'Faction740'),(741,'Faction741'),(742,'Faction742'),(743,'Faction743'),(744,'Faction744'),(745,'Faction745'),(746,'Faction746'),(747,'Faction747'),(748,'Faction748'),(749,'Faction749'),(750,'Faction750'),(751,'Faction751'),(752,'Faction752'),(753,'Faction753'),(754,'Faction754'),(755,'Faction755'),(756,'Faction756'),(757,'Faction757'),(758,'Faction758'),(759,'Faction759'),(760,'Faction760'),(761,'Faction761'),(762,'Faction762'),(763,'Faction763'),(764,'Faction764'),(765,'Faction765'),(766,'Faction766'),(767,'Faction767'),(768,'Faction768'),(769,'Faction769'),(770,'Faction770'),(771,'Faction771'),(772,'Faction772'),(773,'Faction773'),(774,'Faction774'),(775,'Faction775'),(776,'Faction776'),(777,'Faction777'),(778,'Faction778'),(779,'Faction779'),(780,'Faction780'),(781,'Faction781'),(782,'Faction782'),(783,'Faction783'),(784,'Faction784'),(785,'Faction785'),(786,'Faction786'),(787,'Faction787'),(788,'Faction788'),(789,'Faction789'),(790,'Faction790'),(791,'Faction791'),(792,'Faction792'),(793,'Faction793'),(794,'Faction794'),(795,'Faction795'),(796,'Faction796'),(797,'Faction797'),(798,'Faction798'),(799,'Faction799'),(800,'Faction800'),(801,'Faction801'),(802,'Faction802'),(803,'Faction803'),(804,'Faction804'),(805,'Faction805'),(806,'Faction806'),(807,'Faction807'),(808,'Faction808'),(809,'Faction809'),(810,'Faction810'),(811,'Faction811'),(812,'Faction812'),(813,'Faction813'),(814,'Faction814'),(815,'Faction815'),(816,'Faction816'),(817,'Faction817'),(818,'Faction818'),(819,'Faction819'),(820,'Faction820'),(821,'Faction821'),(822,'Faction822'),(823,'Faction823'),(824,'Faction824'),(825,'Faction825'),(826,'Faction826'),(827,'Faction827'),(828,'Faction828'),(829,'Faction829'),(830,'Faction830'),(831,'Faction831'),(832,'Faction832'),(833,'Faction833'),(834,'Faction834'),(835,'Faction835'),(836,'Faction836'),(837,'Faction837'),(838,'Faction838'),(839,'Faction839'),(840,'Faction840'),(841,'Faction841'),(842,'Faction842'),(843,'Faction843'),(844,'Faction844'),(845,'Faction845'),(846,'Faction846'),(847,'Faction847'),(848,'Faction848'),(849,'Faction849'),(850,'Faction850'),(851,'Faction851'),(852,'Faction852'),(853,'Faction853'),(854,'Faction854'),(855,'Faction855'),(856,'Faction856'),(857,'Faction857'),(858,'Faction858'),(859,'Faction859'),(860,'Faction860'),(861,'Faction861'),(862,'Faction862'),(863,'Faction863'),(864,'Faction864'),(865,'Faction865'),(866,'Faction866'),(867,'Faction867'),(868,'Faction868'),(869,'Faction869'),(870,'Faction870'),(871,'Faction871'),(872,'Faction872'),(873,'Faction873'),(874,'Faction874'),(875,'Faction875'),(876,'Faction876'),(877,'Faction877'),(878,'Faction878'),(879,'Faction879'),(880,'Faction880'),(881,'Faction881'),(882,'Faction882'),(883,'Faction883'),(884,'Faction884'),(885,'Faction885'),(886,'Faction886'),(887,'Faction887'),(888,'Faction888'),(889,'Faction889'),(890,'Faction890'),(891,'Faction891'),(892,'Faction892'),(893,'Faction893'),(894,'Faction894'),(895,'Faction895'),(896,'Faction896'),(897,'Faction897'),(898,'Faction898'),(899,'Faction899'),(900,'Faction900'),(901,'Faction901'),(902,'Faction902'),(903,'Faction903'),(904,'Faction904'),(905,'Faction905'),(906,'Faction906'),(907,'Faction907'),(908,'Faction908'),(909,'Faction909'),(910,'Faction910'),(911,'Faction911'),(912,'Faction912'),(913,'Faction913'),(914,'Faction914'),(915,'Faction915'),(916,'Faction916'),(917,'Faction917'),(918,'Faction918'),(919,'Faction919'),(920,'Faction920'),(921,'Faction921'),(922,'Faction922'),(923,'Faction923'),(924,'Faction924'),(925,'Faction925'),(926,'Faction926'),(927,'Faction927'),(928,'Faction928'),(929,'Faction929'),(930,'Faction930'),(931,'Faction931'),(932,'Faction932'),(933,'Faction933'),(934,'Faction934'),(935,'Faction935'),(936,'Faction936'),(937,'Faction937'),(938,'Faction938'),(939,'Faction939'),(940,'Faction940'),(941,'Faction941'),(942,'Faction942'),(943,'Faction943'),(944,'Faction944'),(945,'Faction945'),(946,'Faction946'),(947,'Faction947'),(948,'Faction948'),(949,'Faction949'),(950,'Faction950'),(951,'Faction951'),(952,'Faction952'),(953,'Faction953'),(954,'Faction954'),(955,'Faction955'),(956,'Faction956'),(957,'Faction957'),(958,'Faction958'),(959,'Faction959'),(960,'Faction960'),(961,'Faction961'),(962,'Faction962'),(963,'Faction963'),(964,'Faction964'),(965,'Faction965'),(966,'Faction966'),(967,'Faction967'),(968,'Faction968'),(969,'Faction969'),(970,'Faction970'),(971,'Faction971'),(972,'Faction972'),(973,'Faction973'),(974,'Faction974'),(975,'Faction975'),(976,'Faction976'),(977,'Faction977'),(978,'Faction978'),(979,'Faction979'),(980,'Faction980'),(981,'Faction981'),(982,'Faction982'),(983,'Faction983'),(984,'Faction984'),(985,'Faction985'),(986,'Faction986'),(987,'Faction987'),(988,'Faction988'),(989,'Faction989'),(990,'Faction990'),(991,'Faction991'),(992,'Faction992'),(993,'Faction993'),(994,'Faction994'),(995,'Faction995'),(996,'Faction996'),(997,'Faction997'),(998,'Faction998'),(999,'Faction999'),(1000,'Slaves of Gloomingdeep'),(1001,'Kobolds of Gloomingdeep'),(1002,'Creatures of Gloomingdeep'),(1003,'Guards of Gloomingdeep'),(1004,'Animals of Taelosia'),(1005,'Qeynos Elite Watch'),(1006,'Troupe of Free Speakers'),(1007,'Riftseekers'),(1008,'Discordant Creatures of Kuua'),(1009,'Denizens of Discord'),(1010,'Children of Dranik'),(1011,'Followers of Mekvidarsh'),(1012,'Followers of Loschryre'),(1013,'Overlord Mata Muram'),(1014,'BetaOmensNPCKOS'),(1015,'Creatures of Kuua'),(1016,'Dranik Loyalists'),(1017,'Senior Guides of Norrath'),(1018,'Children of Mistmoore'),(1019,'Elemental Invaders'),(1020,'Lanys T`Vyl'),(1021,'Dark Reign'),(1022,'Firiona Vie'),(1023,'Norrath\'s Keepers'),(1024,'Tirranun'),(1025,'Minions of Tirranun'),(1026,'Volkara'),(1027,'Volkara\'s Brood'),(1028,'Yar`lir'),(1029,'Thunder Guardians'),(1030,'Kessdona'),(1031,'Rikkukin'),(1032,'Stillmoon Acolytes'),(1033,'Vishimtar'),(1034,'Nest Guardians'),(1035,'Cursed Drakes'),(1036,'Scorchclaw Goblins'),(1037,'Frostflake Goblins'),(1038,'Whitecap Goblins'),(1039,'Dirtdigger Goblins'),(1040,'Greenfoot Goblins'),(1041,'Grel'),(1042,'Defenders of the Broodlands'),(1043,'BetaNPCKOS-PC'),(1044,'The Guardians'),(1045,'The Guardian\'s Alliance'),(1046,'The Dark Alliance'),(1047,'The Dark Suppliers'),(1048,'Sporali Collective'),(1049,'Deep Sporali'),(1050,'Expedition 328'),(1051,'Creep Reapers'),(1052,'Shadowmane'),(1053,'Ragepaw'),(1054,'Shiliskin Empire'),(1055,'Free Traders of Malgrinnor'),(1056,'Fallen Guard of Illsalin'),(1057,'Disciples of Jarzarrad'),(1058,'Scions of Dreadspire'),(1059,'Agents of Dreadspire'),(1060,'Creatures of Darkhollow'),(1061,'BetaNPCKOS-NPC'),(1062,'Assistants of the Scribe'),(1063,'Citizens of Freeport'),(1064,'Spirits of Arcstone'),(1065,'Fledgling Scrykin'),(1066,'Elder Scrykin'),(1067,'Constructs of Relic'),(1068,'Legions of Sverag'),(1069,'Ravenous Undead'),(1070,'Wildfang'),(1071,'Redfist Legionnaires'),(1072,'The Irebound'),(1073,'Ragefang'),(1074,'The Venom Swarm'),(1075,'Deathshed Legion'),(1076,'Blood Furies'),(1077,'Furies of the North'),(1078,'Stormbreaker Furies'),(1079,'Bonecracker Furies'),(1080,'Furies of Shir'),(1081,'The Wall-Borne'),(1082,'Legion of Rage'),(1083,'The Wretched'),(1084,'Trueblood Coven'),(1085,'Citizens of Takish-Hiz'),(1086,'Insurgents of Ro'),(1087,'Creatures of Elddar'),(1088,'Clan Vorzek'),(1089,'Tribe of the Nogdha'),(1090,'Servants of the Compact'),(1091,'Creatures of Sandflow'),(1092,'Blood of Ro'),(1093,'Direwind Gnolls'),(1094,'Forces of Dyn\'leth'),(1095,'Crusade of the Scale'),(1096,'Blackfeather Harpies'),(1097,'Blackfeather Royalty'),(1098,'Blackfeather Animals'),(1099,'Blackfeather Spiders'),(1100,'Shades of Zek'),(1101,'Ancestors of Valdeholm'),(1102,'Converts of Valdeholm'),(1103,'Valdeholm Citizens'),(1104,'Wraithguard'),(1105,'Wraithguard Leadership'),(1106,'Drakkin'),(1107,'Tuffein'),(1108,'Tuffein Leadership'),(1109,'Minohten'),(1110,'Nymphs of the Windwillow'),(1111,'Nymphs of the Darkwater'),(1112,'Blackfeather Raiders'),(1113,'Dromrek'),(1114,'Lost of the Windwillow'),(1115,'Foulblood Fieldstrider Centaur'),(1116,'Fieldstrider Centaur'),(1117,'Stonemight Goblins'),(1118,'Darkfell Clan'),(1119,'Guardians of the Grove'),(1120,'Coldeye Clan'),(1121,'Nightmoon Kobolds'),(1122,'Frostbite Clan'),(1123,'Drones of Stonehive'),(1124,'Legion of Stonehive'),(1125,'Spirits of Nokk'),(1126,'Guardians of the Dark Tower'),(1127,'The Blightfire Tainted'),(1128,'Madcaps - Mushroom Men'),(1129,'Circle of the Crystalwing'),(1130,'Selay'),(1131,'Dyn`leth'),(1132,'Lethar'),(1133,'Vergalid'),(1134,'Scholars of Solusek'),(1135,'Infiltrators and Traitors of Ashengate'),(1136,'Nature Animal'),(1137,'Crescent Reach Guards'),(1138,'Greater Shades of Zek'),(1139,'Newbie Guard'),(1140,'Drowned Dead'),(1141,'Sharpeye\'s Reef Runners'),(1142,'Blacksail Pirates'),(1143,'Stormscape Aviaks'),(1144,'Galigaba'),(1145,'King Peleke'),(1146,'Sunstone Goblins'),(1147,'King Vigdos'),(1148,'Tidewater Goblins'),(1149,'King Tondra'),(1150,'Platinum Efreeti'),(1151,'Sphinx of Atiiki'),(1152,'Nature Animal - Snake'),(1153,'Nature Animal - Crocodile'),(1154,'Nature Animal - Basilisk'),(1155,'Nature Animal - Shark'),(1156,'Nature Animal - Spider'),(1157,'Nature Animal - Wolf'),(1158,'Nature Animal - Bear'),(1159,'Nature Animal - Beetle'),(1160,'Nature Animal - Fish'),(1161,'Combine Citizens'),(1162,'Disciples of Zhisza'),(1163,'Brood of Vaakiszh'),(1164,'Fangs of Saarisz'),(1165,'Katta Elementals'),(1166,'Sirens of Maiden\'s Grave'),(1167,'The Cursed of Monkey Rock'),(1168,'Minions of Solusek Ro'),(1169,'Blacksail Smugglers'),(1170,'Combine Empire Merchants'),(1171,'Beta Enemy'),(1172,'Beta Friend'),(1173,'Beta Neutral 2'),(1174,'The Cursed of Monkey Rock (Instance)'),(1175,'Captains of Dyn`leth'),(1176,'Blood of Solusek'),(1177,'Guardian '),(1178,'Workshop Workers Union'),(1179,'Blackwater'),(1180,'Kirathas'),(1181,'The Borrowers'),(1182,'Erollisi\'s Scorned'),(1183,'Bertoxxulous\' Chosen'),(1184,'Camp Valor'),(1185,'Ladies of the Light'),(1186,'Loyalists of Kerafyrm'),(1187,'Emissaries of Claws of Veeshan'),(1188,'Crusaders of Veeshan'),(1189,'Brownie Rebels'),(1190,'Ak`Anon Strike Force V'),(1191,'Fang Breakers'),(1192,'The Fallen'),(1193,'Ancestors of the Crypt'),(1194,'Minions of Meldrath'),(1195,'Bloodmoon Were-Orcs'),(1196,'Darkvine Villagers'),(1197,'Wind Nymphs'),(1198,'Guardian Defense Forces'),(1199,'Residents of the Glade'),(1200,'Bayle\'s Irregulars'),(1201,'Plaguebringer Parishioners'),(1202,'Blackburrow Gnolls'),(1203,'Darkpaw Gnolls'),(1204,'Army of Light '),(1205,'Thaulen Teir\'Duuren'),(1206,'Kithicor Irregulars'),(1207,'Prisoners of the Dark Elves'),(1208,'Discordant Agents'),(1209,'Dragorn Forces'),(1210,'Discordant Army'),(1211,'Toskirakk Slaves'),(1212,'Toskirakk Slavers'),(1213,'Rallosian Guards'),(1214,'Toskirakk Merchants'),(1215,'Rathe Council'),(1216,'Rallosian Invaders'),(1217,'Rathe Living Heaps'),(1218,'Rathe Council Defenders'),(1219,'Darkhammer Dwarves'),(1220,'Primal Crystallines'),(1221,'Oceangreen Residents'),(1222,'Cirtan, Bayle\'s Herald'),(1223,'Silla Herald'),(1224,'Tynoc, Herald of Scale'),(1225,'Mitius, Herald of Change'),(1226,'Herald Argoth'),(1227,'Herald of Druzzil Ro'),(1228,'Ancient Blackburrow Gnolls'),(1229,'Sebilisian Empire'),(1230,'Discordant Armies'),(1231,'Tanglefuse\'s Clockworks'),(1232,'Underfoot Citizens'),(1233,'Underfoot Autarchs'),(1234,'Underfoot Denizens'),(1235,'Underfoot Protectors'),(1236,'Underfoot Devout'),(1237,'Cliknar'),(1238,'Underfoot Subversionists'),(1239,'Clockwork Magma Meter'),(1240,'Morell-Thule'),(1241,'Degmar\'s Loyalists'),(1242,'Degmar\'s Commoners'),(1243,'Degmar\'s Haunts'),(1244,'Brother Island Residents'),(1245,'Brother Island Animal'),(1246,'Sirens of the Endless Cavern'),(1247,'Faction1247'),(1248,'Faction1248'),(1249,'Faction1249'),(1250,'Faction1250'),(1251,'Faction1251'),(1252,'Faction1252'),(1253,'Faction1253'),(1254,'Faction1254'),(1255,'Faction1255'),(1256,'Faction1256'),(1257,'Faction1257'),(1258,'Faction1258'),(1259,'Faction1259'),(1260,'Faction1260'),(1261,'Faction1261'),(1262,'Faction1262'),(1263,'Faction1263'),(1264,'Faction1264'),(1265,'Faction1265'),(1266,'Faction1266'),(1267,'Faction1267'),(1268,'Faction1268'),(1269,'Faction1269'),(1270,'Faction1270'),(1271,'Faction1271'),(1272,'Faction1272'),(1273,'Faction1273'),(1274,'Faction1274'),(1275,'Faction1275'),(1276,'Faction1276'),(1277,'Faction1277'),(1278,'Faction1278'),(1279,'Faction1279'),(1280,'Faction1280'),(1281,'Faction1281'),(1282,'Faction1282'),(1283,'Faction1283'),(1284,'Faction1284'),(1285,'Faction1285'),(1286,'Faction1286'),(1287,'Faction1287'),(1288,'Faction1288'),(1289,'Faction1289'),(1290,'Faction1290'),(1291,'Faction1291'),(1292,'Faction1292'),(1293,'Faction1293'),(1294,'Faction1294'),(1295,'Faction1295'),(1296,'Faction1296'),(1297,'Faction1297'),(1298,'Faction1298'),(1299,'Faction1299'),(1300,'Faction1300'),(1301,'Faction1301'),(1302,'Faction1302'),(1303,'Faction1303'),(1304,'Faction1304'),(1305,'Faction1305'),(1306,'Faction1306'),(1307,'Faction1307'),(1308,'Faction1308'),(1309,'Faction1309'),(1310,'Faction1310'),(1311,'Faction1311'),(1312,'Faction1312'),(1313,'Faction1313'),(1314,'Faction1314'),(1315,'Faction1315'),(1316,'Faction1316'),(1317,'Faction1317'),(1318,'Faction1318'),(1319,'Faction1319'),(1320,'Faction1320'),(1321,'Faction1321'),(1322,'Faction1322'),(1323,'Faction1323'),(1324,'Faction1324'),(1325,'Faction1325'),(1326,'Faction1326'),(1327,'Faction1327'),(1328,'Faction1328'),(1329,'Faction1329'),(1330,'Faction1330'),(1331,'Faction1331'),(1332,'Faction1332'),(1333,'Faction1333'),(1334,'Faction1334'),(1335,'Faction1335'),(1336,'Faction1336'),(1337,'Faction1337'),(1338,'Faction1338'),(1339,'Faction1339'),(1340,'Faction1340'),(1341,'Faction1341'),(1342,'Faction1342'),(1343,'Faction1343'),(1344,'Faction1344'),(1345,'Faction1345'),(1346,'Faction1346'),(1347,'Faction1347'),(1348,'Faction1348'),(1349,'Faction1349'),(1350,'Faction1350'),(1351,'Faction1351'),(1352,'Faction1352'),(1353,'Faction1353'),(1354,'Faction1354'),(1355,'Faction1355'),(1356,'Faction1356'),(1357,'Faction1357'),(1358,'Faction1358'),(1359,'Faction1359'),(1360,'Faction1360'),(1361,'Faction1361'),(1362,'Faction1362'),(1363,'Faction1363'),(1364,'Faction1364'),(1365,'Faction1365'),(1366,'Faction1366'),(1367,'Faction1367'),(1368,'Faction1368'),(1369,'Faction1369'),(1370,'Faction1370'),(1371,'Faction1371'),(1372,'Faction1372'),(1373,'Faction1373'),(1374,'Faction1374'),(1375,'Faction1375'),(1376,'Faction1376'),(1377,'Faction1377'),(1378,'Faction1378'),(1379,'Faction1379'),(1380,'Faction1380'),(1381,'Faction1381'),(1382,'Faction1382'),(1383,'Faction1383'),(1384,'Faction1384'),(1385,'Faction1385'),(1386,'Faction1386'),(1387,'Faction1387'),(1388,'Faction1388'),(1389,'Faction1389'),(1390,'Faction1390'),(1391,'Faction1391'),(1392,'Faction1392'),(1393,'Faction1393'),(1394,'Faction1394'),(1395,'Faction1395'),(1396,'Faction1396'),(1397,'Faction1397'),(1398,'Faction1398'),(1399,'Faction1399'),(1400,'Faction1400'),(1401,'Faction1401'),(1402,'Faction1402'),(1403,'Faction1403'),(1404,'Faction1404'),(1405,'Faction1405'),(1406,'Faction1406'),(1407,'Faction1407'),(1408,'Faction1408'),(1409,'Faction1409'),(1410,'Faction1410'),(1411,'Faction1411'),(1412,'Faction1412'),(1413,'Faction1413'),(1414,'Faction1414'),(1415,'Faction1415'),(1416,'Faction1416'),(1417,'Faction1417'),(1418,'Faction1418'),(1419,'Faction1419'),(1420,'Faction1420'),(1421,'Faction1421'),(1422,'Faction1422'),(1423,'Faction1423'),(1424,'Faction1424'),(1425,'Faction1425'),(1426,'Faction1426'),(1427,'Faction1427'),(1428,'Faction1428'),(1429,'Faction1429'),(1430,'Faction1430'),(1431,'Faction1431'),(1432,'Faction1432'),(1433,'Faction1433'),(1434,'Faction1434'),(1435,'Faction1435'),(1436,'Faction1436'),(1437,'Faction1437'),(1438,'Faction1438'),(1439,'Faction1439'),(1440,'Faction1440'),(1441,'Faction1441'),(1442,'Faction1442'),(1443,'Faction1443'),(1444,'Faction1444'),(1445,'Faction1445'),(1446,'Faction1446'),(1447,'Faction1447'),(1448,'Faction1448'),(1449,'Faction1449'),(1450,'Faction1450'),(1451,'Faction1451'),(1452,'Faction1452'),(1453,'Faction1453'),(1454,'Faction1454'),(1455,'Faction1455'),(1456,'Faction1456'),(1457,'Faction1457'),(1458,'Faction1458'),(1459,'Faction1459'),(1460,'Faction1460'),(1461,'Faction1461'),(1462,'Faction1462'),(1463,'Faction1463'),(1464,'Faction1464'),(1465,'Faction1465'),(1466,'Faction1466'),(1467,'Faction1467'),(1468,'Faction1468'),(1469,'Faction1469'),(1470,'Faction1470'),(1471,'Faction1471'),(1472,'Faction1472'),(1473,'Faction1473'),(1474,'Faction1474'),(1475,'Faction1475'),(1476,'Faction1476'),(1477,'Faction1477'),(1478,'Faction1478'),(1479,'Faction1479'),(1480,'Faction1480'),(1481,'Faction1481'),(1482,'Faction1482'),(1483,'Seru'),(1484,'Hand of Seru'),(1485,'Eye of Seru'),(1486,'Heart of Seru'),(1487,'Shoulders of Seru'),(1488,'The Recuso'),(1489,'Gladiators and Slaves of Sanctus Seru'),(1490,'Grimlings of the Moor'),(1491,'Sonic Wolves of the Moor'),(1492,'Owlbears of the Moor'),(1493,'Grimling Invaders'),(1494,'Owlbear Invaders'),(1495,'Sonic Wolf Invaders'),(1496,'Grimling Defenders'),(1497,'Owlbear Defenders'),(1498,'Sonic Wolf Defenders'),(1499,'Citizens of Seru'),(1500,'Gor Taku'),(1501,'Shak Dratha'),(1502,'Katta Castellum Citizens'),(1503,'Validus Custodus'),(1504,'Magus Conlegium'),(1505,'Nathyn Illuminious'),(1506,'Coterie of the Eternal Night'),(1507,'Valdanov Zevfeer'),(1508,'Traders of the Haven'),(1509,'Haven Defenders'),(1510,'House of Fordel'),(1511,'House of Midst'),(1512,'House of Stout'),(1513,'Guardians of Shar Vahl'),(1514,'Testfaction'),(1515,'Dark Forest Denizens'),(1516,'Grimlings of the Forest'),(1517,'Deepwood Owlbears'),(1518,'Pack of the Great Moon'),(1519,'Lodikai'),(1520,'Whisperling'),(1521,'Akheva'),(1522,'Primordial Malice'),(1523,'Feast of the Burrowers'),(1524,'Johanius Barleou'),(1525,'Coterie Elite'),(1526,'Old Disciples of Kerafyrm'),(1527,'Spire Spirits'),(1528,'Thought Leeches'),(1529,'Khala Dun'),(1530,'Taruun'),(1531,'Jharin'),(1532,'Khati Sha'),(1533,'Dar Khura'),(1534,'Luclin Monsters'),(1535,'Brood of Ssraeshza'),(1536,'Emperor Ssraeshza'),(1537,'Iksar Temple Slaves'),(1538,'Spirits of Katta Castellum'),(1539,'Netherbians'),(1540,'Troglodytes'),(1541,'Hand Legionnaries'),(1542,'Haven Smugglers'),(1543,'Servants of Aero'),(1544,'Servants of Terra'),(1545,'Servants of Inferno'),(1546,'Servants of Hydro'),(1547,'Vornol Transon'),(1548,'The Vas Ren Clan'),(1549,'The Grol Baku Clan'),(1550,'The Cral Ligi Clan'),(1551,'The Tro Jeg Clan'),(1552,'Vah Shir Crusaders'),(1553,'Netherbian Ambush'),(1554,'Netherbian Caravan'),(1555,'Grieg'),(1556,'Luclin'),(1557,'Dark Sendings'),(1558,'Grimling Captives'),(1559,'Lake Recondite Bandits'),(1560,'Kanaad'),(1561,'Concilium Universus'),(1562,'Disciples of Rhag`Zadune'),(1563,'The Sambata Tribe'),(1564,'Dawnhoppers'),(1565,'Tarmok Tribe'),(1566,'Netok Tribe'),(1567,'Katta Traitors'),(1568,'Deepshade Collective'),(1569,'Deklean Korgad'),(1570,'Order of Autarkic Umbrage'),(1571,'Shei Vinitras'),(1572,'Anti Vinitras'),(1573,'The Bloodtribe'),(1574,'Minions of the Sunlord'),(1575,'Imps'),(1576,'Kingdom of Above and Below'),(1577,'The Truth'),(1578,'Deklean Korgad'),(1579,'Droga Goblins'),(1580,'Nurga Goblins'),(1581,'Luclin Friendly Monsters'),(1582,'Outcasts and Mutants'),(1583,'Cult of the Great Saprophyte'),(1584,'Citizens of Shar Vahl'),(1585,'Fiends of the Grove'),(1586,'Savage Spirit'),(1587,'Zordak Ragefire'),(1588,'Captain Cruikshanks'),(1589,'Scourge'),(1590,'Captain Stottal'),(1591,'Captain Smythe'),(1592,'Captain Dorian Dulein'),(1593,'Frogloks of Krup'),(1594,'Cult of the Arisen'),(1595,'New Alliance of Stone'),(1596,'Idelia the Serene'),(1597,'Residents of Jaggedpine'),(1598,'Anchorites of Brell Serilis'),(1599,'Darkpaws of Jaggedpine'),(1600,'Guardians of the Hatchling'),(1601,'Pirates of the Pine'),(1602,'Critters of Jaggedpine'),(1603,'Dryads of the Grove'),(1604,'Clan Grikbar'),(1605,'Haven Smuggler Associates'),(1606,'KOS to Beta Neutral'),(1607,'Plague Bringer'),(1608,'Spirits of Lxanvom'),(1609,'Askr the Lost'),(1610,'Greater Jord Giants'),(1611,'Greater Brann Giants'),(1612,'Greater Vind Giants'),(1613,'Greater Vann Giants'),(1614,'Lesser Jord Giants'),(1615,'Lesser Brann Giants'),(1616,'Lesser Vind Giants'),(1617,'Lesser Vann Giants'),(1618,'Storm Guardians'),(1619,'The Rainkeeper'),(1620,'Treants of Jaggedpine'),(1621,'Agnarr'),(1622,'Arboreans of the Faydark'),(1623,'Disciples of Kerafyrm'),(1624,'Servants of Saryrn'),(1625,'Guardians of Justice'),(1626,'Jacosh Steldenn'),(1627,'Prisoners of Justice'),(1628,'Creatures of Justice'),(1629,'Gralloks'),(1630,'Burning Dead'),(1631,'KOS All PC And Beta Neutral'),(1632,'Denizens of Water'),(1633,'Minions of Coirnav'),(1634,'Fish Lords'),(1635,'Dwellers of the Deep'),(1636,'Inhabitants of Tanaan'),(1637,'Truespirit Companion'),(1638,'Rallos Zek, The Warlord'),(1639,'Tallon Zek'),(1640,'Vallon Zek'),(1641,'Eriak'),(1642,'The Damned of Narikor'),(1643,'The Diaku'),(1644,'The Gindan'),(1645,'The Hendin'),(1646,'The Decorus'),(1647,'Gladiators of Drunder'),(1648,'Denizens of Fire'),(1649,'Minions of Fennin Ro'),(1650,'Inhabitants of Tranquility'),(1651,'Victim of Torment'),(1652,'Stampeding War Boar'),(1653,'War Boar Piglet'),(1654,'Inhabitants of Disease'),(1655,'Inhabitants of Valor'),(1656,'Battalion of Marr'),(1657,'Rats of Justice'),(1658,'Denizens of Storm'),(1659,'Lost Kingdom of Lok'),(1660,'Koka\'Vor Tribe'),(1661,'Inhabitants of Air'),(1662,'Guardians of the Living Earth'),(1663,'The Protectorate of the Twelve'),(1664,'Eino'),(1665,'Frogloks of Sebilis'),(1666,'Frogloks of Ykesha'),(1667,'Fallen Follies of Mischief'),(1668,'Lhranc the Disgraced'),(1669,'Minions of Enmity'),(1670,'Minions of Hope'),(1671,'Agents of the Pillars'),(1672,'Friends of Zordak Ragefire'),(1673,'Enemies of Zordak Ragefire'),(1674,'Kyle Bayle'),(1675,'Kyle Bayle\'s Royal Guard'),(1676,'Hills Revenant'),(1677,'Dead Hills Archaeologists'),(1678,'Xulous of the Dead Hills'),(1679,'The Kromtus'),(1680,'Bloodfeather Aviaks'),(1681,'The Thaell Ew'),(1682,'Faction1682'),(1683,'Faction1683'),(1684,'Faction1684'),(1685,'Faction1685'),(1686,'Faction1686'),(1687,'Faction1687'),(1688,'Faction1688'),(1689,'Faction1689'),(1690,'Faction1690'),(1691,'Faction1691'),(1692,'Faction1692'),(1693,'Faction1693'),(1694,'Faction1694'),(1695,'Faction1695'),(1696,'Faction1696'),(1697,'Faction1697'),(1698,'Faction1698'),(1699,'Faction1699'),(1700,'Torgiran'),(1701,'Warlord Ngrub'),(1702,'Resistance Miners'),(1703,'Nadox Initiate'),(1704,'Cursed Frogloks of Gukta'),(1705,'Creatures of Gunthak'),(1706,'Undead of Gunthak'),(1707,'Residents of Gunthak'),(1708,'Crew of the Scorned Maiden'),(1709,'Protectors of Gukta'),(1710,'Innothule Monster'),(1711,'Clerics of Gutka'),(1712,'Warriors of Gukta'),(1713,'Paladins of Gukta'),(1714,'Wizards of Gukta'),(1715,'Shaman of Gukta'),(1716,'High Council of Gukta'),(1717,'Lorekeepers of Gukta'),(1718,'Guktan Elders'),(1719,'Citizens of Gukta'),(1720,'Guktan Suppliers'),(1721,'Troll Raiders'),(1722,'Exiled Frogloks'),(1723,'Grimling Bandits'),(1724,'Newbie Monster'),(1725,'Syrik Iceblood'),(1726,'Inhabitants of Time'),(1727,'City Vermin'),(1728,'Betrayers of Di`Zok'),(1729,'Followers of Korucust'),(1730,'LDoNGood'),(1731,'LDoNEvil'),(1732,'Tribe Vrodak'),(1733,'Witnesses of Hate'),(1734,'Forgotten Guktan Spirits'),(1735,'Innoruuk\'s Curse of the Cauldron'),(1736,'Frostfoot Goblins'),(1737,'Lost Minions of Miragul'),(1738,'Planar Collective'),(1739,'Synarcana'),(1740,'Agents of the Synarcana'),(1741,'Orphans'),(1742,'Sustainers'),(1743,'Loyals'),(1744,'Progeny'),(1745,'Rujarkian Slavers'),(1746,'The Broken'),(1747,'Steelcrown'),(1748,'Spiritbound'),(1749,'Steelslaves'),(1750,'Citizens of Takish-Hiz'),(1751,'Geomantic Compact'),(1752,'Royal Attendants'),(1753,'Flowkeepers'),(1754,'Architects of Sand'),(1755,'Sandworkers'),(1756,'LDoN Hostages'),(1757,'Servants of the First Witness'),(1758,'Guktan Scouts'),(1759,'Wayfarers Brotherhood'),(1760,'Minions of Mischief'),(1761,'Nihil'),(1762,'Trusik Tribe'),(1763,'Legion of Mata Muram'),(1764,'Tunat`Muram'),(1765,'Zun`Muram'),(1766,'Pixtt'),(1767,'Hexxt'),(1768,'Rav'),(1769,'Creatures of Taelosia'),(1770,'Yunjo Slave Resistance'),(1771,'Gladiators of Mata Muram'),(1772,'The Sun'),(1773,'The Moon'),(1774,'Orcakar Players'),(1775,'Citizens of Argath'),(1776,'Living Steel'),(1777,'Argathian Looters'),(1778,'Citizens of Arelis'),(1779,'Farmers of the Lunanyn'),(1780,'Minions of War'),(1781,'Minions of the Sun'),(1782,'Dominion of Beasts'),(1783,'Citizens of Sarith'),(1784,'Devout of Oseka'),(1785,'Minions of Prexus'),(1786,'Seekers of Splendor'),(1787,'Order of Radiance'),(1788,'Devotees of Decay'),(1789,'Purity of Alra'),(1790,'Paragons of Purity'),(1791,'Shades of Alra'),(1792,'Paragons of Shadows'),(1793,'Arcanists of Alra'),(1794,'Paragons of the Arcane'),(1795,'Living Will of Alra'),(1796,'Paragons of Will'),(1797,'Servants of the Song'),(1798,'Citizens of Erillion'),(1799,'Disciples of Order'),(1800,'The Godblooded'),(1801,'Iceshard Manor'),(1802,'Dragon Death Keep'),(1803,'Apparitions of Fear'),(1804,'Beetles of Shard\'s Landing'),(1805,'Oashim of Shard\'s Landing'),(1806,'Pests of Shard\'s Landing'),(1807,'Scavengers of Shard\'s Landing'),(1808,'Kangon of Shard\'s Landing'),(1809,'Braxi of Shard\'s Landing'),(1810,'Wyverns of Shard\'s Landing'),(1811,'Selyrah of Shard\'s Landing'),(1812,'Goral of Shard\'s Landing'),(1813,'Snakes of Shard\'s Landing'),(1814,'Pumas of Shard\'s Landing'),(1815,'Grendlaen of Shard\'s Landing'),(1816,'Wolves of Shard\'s Landing'),(1817,'Hunters of Shard\'s Landing'),(1818,'Forsaken Believers'),(1819,'The Believers'),(1820,'The Conscripted'),(1821,'Heralds of the Unspoken'),(1822,'Harbingers of Thule'),(1823,'Va`Ker'),(1824,'Terrorwing'),(1825,'Crystal Circle Builders'),(1826,'The Unearthers'),(1827,'The Displaced'),(1828,'The Sol\'Dal'),(1829,'The Ember'),(1830,'Defenders of Decay'),(1831,'Warriors of Rodcet'),(1832,'Faction1832'),(1833,'Faction1833'),(1834,'Faction1834'),(1835,'Harrowing Horde'),(1836,'Western Plains Bandits'),(1837,'Ursarachnids'),(1838,'Doomscale Cultists'),(1839,'Nature Soul - Fire'),(1840,'Nature Soul - Water'),(1841,'Nature Soul - Earth'),(1842,'Nature Soul - Wood'),(1843,'Flaming Jacks'),(1844,'Ethernere Revenants'),(1845,'Ethernere Spirits'),(1846,'King Naythox Thex Loyalists'),(1847,'Queen Cristanos Thex Loyalists'),(1848,'Neriak Fourth Gate Residents'),(1849,'Qeynos Guards of West Karana'),(1850,'Fellowship of the Peacock'),(1851,'Damsel of Decay\'s Denizens'),(1852,'Enemies of Tranquility'),(1853,'Legion of the Overking'),(1854,'Empire of the Di`Zok'),(1855,'Kar`Zok'),(1856,'Flamescale Legion'),(1857,'Guardians of Konikor'),(1858,'Clan Droga'),(1859,'Majestic Centurion Alliance'),(1860,'The Clawdigger Clan'),(1861,'Scorpiki'),(1862,'Denizens of Veeshan\'s Peak'),(1863,'Servants of Esianti'),(1864,'Servants of Aalishai'),(1865,'Servants of Mearatas'),(1866,'Servants of Loruella'),(1867,'Contingent of the Alabaster Owl'),(1868,'Brass Phoenix Brigade'),(1869,'Company of the Alabaster Owl'),(1870,'Brass Phoenix Legion'),(1871,'Lords of Esianti'),(1872,'Lords of Aalishai'),(1873,'Bloodmoon Night-Orcs'),(1874,'Faction1874'),(1875,'Faction1875'),(1876,'Faction1876'),(1877,'Faction1877'),(1878,'Faction1878'),(1879,'Faction1879'),(1880,'Faction1880'),(1881,'Faction1881'),(1882,'Faction1882'),(1883,'Faction1883'),(1884,'Faction1884'),(1885,'Faction1885'),(1886,'Faction1886'),(1887,'Faction1887'),(1888,'Faction1888'),(1889,'Faction1889'),(1890,'Faction1890'),(1891,'Faction1891'),(1892,'Faction1892'),(1893,'Faction1893'),(1894,'Faction1894'),(1895,'Faction1895'),(1896,'Faction1896'),(1897,'Faction1897'),(1898,'Faction1898'),(1899,'Faction1899'),(1900,'Faction1900'),(1901,'Faction1901'),(1902,'Faction1902'),(1903,'Faction1903'),(1904,'Faction1904'),(1905,'Faction1905'),(1906,'Faction1906'),(1907,'Faction1907'),(1908,'Faction1908'),(1909,'Faction1909'),(1910,'Faction1910'),(1911,'Faction1911'),(1912,'Faction1912'),(1913,'Faction1913'),(1914,'Faction1914'),(1915,'Faction1915'),(1916,'Faction1916'),(1917,'Faction1917'),(1918,'Faction1918'),(1919,'Faction1919'),(1920,'Faction1920'),(1921,'Faction1921'),(1922,'Faction1922'),(1923,'Faction1923'),(1924,'Faction1924'),(1925,'Faction1925'),(1926,'Faction1926'),(1927,'Faction1927'),(1928,'Faction1928'),(1929,'Faction1929'),(1930,'Faction1930'),(1931,'Faction1931'),(1932,'Faction1932'),(1933,'Faction1933'),(1934,'Faction1934'),(1935,'Faction1935'),(1936,'Faction1936'),(1937,'Faction1937'),(1938,'Faction1938'),(1939,'Faction1939'),(1940,'Faction1940'),(1941,'Faction1941'),(1942,'Faction1942'),(1943,'Faction1943'),(1944,'Faction1944'),(1945,'Faction1945'),(1946,'Faction1946'),(1947,'Faction1947'),(1948,'Faction1948'),(1949,'Faction1949'),(1950,'Faction1950'),(1951,'Faction1951'),(1952,'Faction1952'),(1953,'Faction1953'),(1954,'Faction1954'),(1955,'Faction1955'),(1956,'Faction1956'),(1957,'Faction1957'),(1958,'Faction1958'),(1959,'Faction1959'),(1960,'Faction1960'),(1961,'Faction1961'),(1962,'Faction1962'),(1963,'Faction1963'),(1964,'Faction1964'),(1965,'Faction1965'),(1966,'Faction1966'),(1967,'Faction1967'),(1968,'Faction1968'),(1969,'Faction1969'),(1970,'Faction1970'),(1971,'Faction1971'),(1972,'Faction1972'),(1973,'Faction1973'),(1974,'Faction1974'),(1975,'Faction1975'),(1976,'Faction1976'),(1977,'Faction1977'),(1978,'Faction1978'),(1979,'Faction1979'),(1980,'Faction1980'),(1981,'Faction1981'),(1982,'Faction1982'),(1983,'Faction1983'),(1984,'Faction1984'),(1985,'Faction1985'),(1986,'Faction1986'),(1987,'Faction1987'),(1988,'Faction1988'),(1989,'Faction1989'),(1990,'Faction1990'),(1991,'Faction1991'),(1992,'Faction1992'),(1993,'Faction1993'),(1994,'Faction1994'),(1995,'Faction1995'),(1996,'Faction1996'),(1997,'Faction1997'),(1998,'Faction1998'),(1999,'Faction1999'),(2000,'Faction2000'),(2001,'Faction2001'),(2002,'Faction2002'),(2003,'Faction2003'),(2004,'Faction2004'),(2005,'Faction2005'),(2006,'Faction2006'),(2007,'Faction2007'),(2008,'Faction2008'),(2009,'Faction2009'),(2010,'Faction2010'),(2011,'Faction2011'),(2012,'Faction2012'),(2013,'Faction2013'),(2014,'Faction2014'),(2015,'Faction2015'),(2016,'Faction2016'),(2017,'Faction2017'),(2018,'Faction2018'),(2019,'Faction2019'),(2020,'Faction2020'),(2021,'Faction2021'),(2022,'Faction2022'),(2023,'Faction2023'),(2024,'Faction2024'),(2025,'Faction2025'),(2026,'Faction2026'),(2027,'Faction2027'),(2028,'Faction2028'),(2029,'Faction2029'),(2030,'Faction2030'),(2031,'Faction2031'),(2032,'Faction2032'),(2033,'Faction2033'),(2034,'Faction2034'),(2035,'Faction2035'),(2036,'Faction2036'),(2037,'Faction2037'),(2038,'Faction2038'),(2039,'Faction2039'),(2040,'Faction2040'),(2041,'Faction2041'),(2042,'Faction2042'),(2043,'Faction2043'),(2044,'Faction2044'),(2045,'Faction2045'),(2046,'Faction2046'),(2047,'Faction2047'); -UNLOCK TABLES; - --- --- Table structure for table `client_server_faction_map` --- - -DROP TABLE IF EXISTS `client_server_faction_map`; -CREATE TABLE `client_server_faction_map` ( - `clientid` int(11) NOT NULL, - `serverid` int(11) NOT NULL, - PRIMARY KEY (`clientid`,`serverid`), - INDEX serverid (`serverid`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- --- Dumping data for table `client_server_faction_map` --- - -LOCK TABLES `client_server_faction_map` WRITE; -INSERT INTO `client_server_faction_map` VALUES (41,377),(51,506),(60,431),(63,14),(64,357),(65,26),(68,481),(71,94),(73,421),(78,111),(88,386),(90,118),(98,185),(101,200),(104,238),(112,113),(117,148),(119,462),(121,434),(125,374),(143,368),(144,162),(153,420),(156,100),(160,426),(178,371),(201,382),(205,414),(207,165),(209,255),(211,269),(216,351),(217,5),(218,4),(219,9),(220,11),(221,21),(222,22),(223,33),(225,41),(226,43),(227,44),(228,46),(229,47),(230,53),(231,56),(232,57),(233,60),(234,63),(235,66),(236,69),(237,70),(238,71),(239,322),(240,76),(241,77),(242,79),(244,90),(245,91),(246,99),(247,151),(248,418),(249,226),(250,327),(251,106),(252,108),(253,28),(254,112),(255,115),(256,20),(257,119),(258,120),(259,121),(261,128),(262,135),(263,133),(264,359),(265,143),(266,145),(267,147),(268,50),(269,182),(270,155),(271,86),(272,159),(273,164),(274,169),(275,170),(276,174),(278,177),(279,178),(280,183),(281,184),(282,186),(283,243),(284,192),(285,207),(286,208),(287,209),(288,210),(289,211),(290,215),(291,217),(292,218),(293,219),(295,326),(296,235),(297,246),(298,247),(299,248),(300,259),(302,265),(303,268),(304,273),(305,275),(306,279),(307,281),(308,292),(309,300),(310,304),(311,311),(312,314),(313,250),(315,339),(316,283),(317,346),(318,353),(319,355),(320,361),(321,309),(322,220),(323,305),(324,347),(325,212),(326,92),(327,294),(328,213),(329,31),(330,105),(331,214),(332,149),(333,176),(334,88),(336,48),(337,232),(338,216),(340,256),(341,257),(342,240),(343,267),(344,18),(345,167),(346,51),(353,378),(354,229),(355,316),(361,12),(362,258),(363,331),(364,299),(365,249),(366,166),(367,507),(368,83),(370,87),(371,117),(372,227),(373,224),(374,233),(375,75),(376,131),(378,313),(379,29),(382,175),(385,80),(386,376),(387,17),(388,97),(394,295),(397,302),(398,274),(401,306),(402,236),(403,237),(404,342),(405,67),(406,49),(407,278),(409,343),(412,187),(415,320),(416,291),(417,397),(418,364),(419,188),(420,98),(423,456),(424,465),(425,156),(426,1),(427,308),(428,223),(429,179),(430,42),(431,345),(432,241),(433,160),(434,301),(435,352),(436,362),(437,391),(438,290),(439,303),(440,30),(441,193),(442,62),(443,24),(444,317),(445,282),(446,323),(447,251),(448,189),(449,344),(450,336),(451,23),(452,325),(454,89),(455,221),(456,114),(457,150),(458,116),(459,199),(460,399),(461,395),(462,32),(463,244),(464,365),(465,337),(467,134),(469,263),(471,40),(473,172),(474,310),(475,180),(532,461),(689,297),(692,253),(693,36),(694,380),(695,45),(1001,424),(1002,401),(1003,475),(1007,435),(1009,409),(1010,398),(1013,432),(1014,487),(1016,410),(1020,425),(1021,404),(1022,101),(1023,429),(1024,446),(1025,427),(1026,449),(1027,450),(1028,451),(1029,445),(1030,422),(1031,436),(1032,441),(1033,448),(1034,428),(1035,403),(1036,438),(1039,515),(1040,417),(1042,407),(1044,444),(1046,443),(1048,440),(1049,406),(1050,411),(1051,402),(1055,415),(1056,412),(1058,437),(1059,396),(1060,400),(1101,498),(1156,500),(1159,457),(1190,497),(1193,499),(1204,494),(1223,496),(1483,284),(1484,139),(1485,96),(1486,142),(1487,298),(1488,329),(1490,130),(1491,504),(1492,505),(1499,37),(1500,122),(1501,293),(1502,168),(1503,350),(1504,206),(1505,228),(1506,55),(1507,349),(1508,338),(1509,140),(1510,152),(1511,153),(1512,154),(1513,132),(1516,392),(1519,201),(1520,358),(1521,3),(1522,260),(1524,161),(1525,54),(1527,388),(1528,335),(1530,319),(1532,423),(1533,68),(1535,25),(1536,93),(1538,307),(1541,138),(1542,141),(1543,285),(1544,289),(1545,287),(1546,286),(1547,354),(1548,334),(1549,324),(1550,321),(1551,332),(1552,348),(1555,129),(1556,205),(1557,72),(1559,191),(1561,52),(1562,85),(1563,330),(1564,74),(1565,390),(1568,78),(1569,408),(1570,239),(1571,296),(1573,389),(1574,222),(1576,181),(1577,333),(1582,242),(1583,65),(1584,483),(1587,385),(1593,107),(1594,64),(1595,230),(1597,271),(1598,6),(1599,73),(1601,252),(1602,61),(1604,39),(1607,516),(1608,517),(1609,13),(1610,125),(1611,124),(1612,127),(1613,126),(1614,196),(1615,195),(1616,198),(1617,197),(1618,315),(1619,328),(1620,340),(1621,2),(1622,10),(1623,84),(1624,288),(1627,261),(1628,58),(1629,123),(1630,27),(1634,512),(1636,157),(1654,466),(1656,16),(1659,203),(1660,501),(1661,464),(1665,109),(1701,473),(1703,225),(1707,458),(1709,264),(1713,245),(1714,360),(1716,146),(1717,202),(1718,136),(1719,35),(1720,484),(1722,95),(1725,318),(1726,469),(1728,19),(1729,103),(1732,341),(1733,393),(1734,104),(1735,158),(1736,110),(1737,204),(1738,455),(1741,452),(1742,453),(1743,454),(1744,262),(1745,277),(1749,312),(1750,38),(1755,280),(1757,508),(1759,356),(1761,231),(1762,447),(1763,194),(1765,502),(1766,254),(1767,144),(1768,270),(1769,59),(1770,363),(1771,416),(1822,373); -UNLOCK TABLES; - --- --- Table structure for table `faction_base_data` --- - -DROP TABLE IF EXISTS `faction_base_data`; -CREATE TABLE `faction_base_data` ( - `client_faction_id` smallint(6) NOT NULL, - `min` smallint(6) DEFAULT '-2000', - `max` smallint(6) DEFAULT '2000', - `unk_hero1` smallint(6) DEFAULT NULL, - `unk_hero2` smallint(6) DEFAULT NULL, - `unk_hero3` smallint(6) DEFAULT NULL, - PRIMARY KEY (`client_faction_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- --- Dumping data for table `faction_base_data` --- - -LOCK TABLES `faction_base_data` WRITE; -INSERT INTO `faction_base_data` VALUES (65,-2000,2000,0,0,0),(106,-2000,2000,0,0,0),(121,-2000,2000,0,0,0),(128,-2000,2000,0,0,0),(138,-2000,2000,0,0,0),(144,-2000,2000,0,0,0),(217,-2000,2000,0,0,0),(218,-2000,2000,0,0,0),(219,-2000,2000,0,0,0),(220,-2000,2000,0,0,0),(221,-2000,2000,0,0,0),(222,-2000,2000,0,0,0),(223,-2000,2000,0,0,0),(225,-2000,2000,0,0,0),(226,-2000,2000,0,0,0),(227,-2000,2000,0,0,0),(228,-2000,2000,0,0,0),(229,-2000,2000,0,0,0),(230,-2000,2000,0,0,0),(231,-2000,2000,0,0,0),(232,-2000,2000,0,0,0),(233,-2000,2000,0,0,0),(234,-2000,2000,0,0,0),(235,-2000,2000,0,0,0),(236,-2000,2000,0,0,0),(237,-2000,2000,0,0,0),(238,-2000,2000,0,0,0),(239,-2000,2000,0,0,0),(240,-2000,2000,0,0,0),(241,-2000,2000,0,0,0),(242,-2000,2000,0,0,0),(243,-2000,2000,0,0,0),(244,-2000,2000,0,0,0),(245,-2000,2000,0,0,0),(246,-2000,2000,0,0,0),(247,-2000,2000,0,0,0),(248,-2000,2000,0,0,0),(249,-2000,2000,0,0,0),(250,-2000,2000,0,0,0),(251,-2000,2000,0,0,0),(252,-2000,2000,0,0,0),(253,-2000,2000,0,0,0),(254,-2000,2000,0,0,0),(255,-2000,2000,0,0,0),(256,-2000,2000,0,0,0),(257,-2000,2000,0,0,0),(258,-2000,2000,0,0,0),(259,-2000,2000,0,0,0),(261,-2000,2000,0,0,0),(262,-2000,2000,0,0,0),(263,-2000,2000,0,0,0),(264,-2000,2000,0,0,0),(265,-2000,2000,0,0,0),(266,-2000,2000,0,0,0),(267,-2000,2000,0,0,0),(269,-2000,2000,0,0,0),(270,-2000,2000,0,0,0),(271,-2000,2000,0,0,0),(272,-2000,2000,0,0,0),(273,-2000,2000,0,0,0),(274,-2000,2000,0,0,0),(275,-2000,2000,0,0,0),(276,-2000,2000,0,0,0),(277,-2000,2000,0,0,0),(278,-2000,2000,0,0,0),(279,-2000,2000,0,0,0),(280,-2000,2000,0,0,0),(281,-2000,2000,0,0,0),(282,-2000,2000,0,0,0),(283,-2000,2000,0,0,0),(284,-2000,2000,0,0,0),(285,-2000,2000,0,0,0),(286,-2000,2000,0,0,0),(287,-2000,2000,0,0,0),(288,-2000,2000,0,0,0),(289,-2000,2000,0,0,0),(290,-2000,2000,0,0,0),(291,-2000,2000,0,0,0),(292,-2000,2000,0,0,0),(293,-2000,2000,0,0,0),(295,-2000,2000,0,0,0),(296,-2000,2000,0,0,0),(297,-2000,2000,0,0,0),(298,-2000,2000,0,0,0),(299,-2000,2000,0,0,0),(300,-2000,2000,0,0,0),(302,-2000,2000,0,0,0),(304,-2000,2000,0,0,0),(305,-2000,2000,0,0,0),(306,-2000,2000,0,0,0),(307,-2000,2000,0,0,0),(308,-2000,2000,0,0,0),(309,-2000,2000,0,0,0),(310,-2000,2000,0,0,0),(311,-2000,2000,0,0,0),(312,-2000,2000,0,0,0),(313,-2000,2000,0,0,0),(315,-2000,2000,0,0,0),(316,-2000,2000,0,0,0),(317,-2000,2000,0,0,0),(318,-2000,2000,0,0,0),(319,-2000,2000,0,0,0),(320,-2000,2000,0,0,0),(321,-2000,2000,0,0,0),(322,-2000,2000,0,0,0),(323,-2000,2000,0,0,0),(324,-2000,2000,0,0,0),(325,-2000,2000,0,0,0),(326,-2000,2000,0,0,0),(327,-2000,2000,0,0,0),(328,-2000,2000,0,0,0),(329,-2000,2000,0,0,0),(330,-2000,2000,0,0,0),(331,-2000,2000,0,0,0),(332,-2000,2000,0,0,0),(333,-2000,2000,0,0,0),(334,-2000,2000,0,0,0),(336,-2000,2000,0,0,0),(337,-2000,2000,0,0,0),(338,-2000,2000,0,0,0),(340,-2000,2000,0,0,0),(341,-2000,2000,0,0,0),(342,-2000,2000,0,0,0),(343,-2000,2000,0,0,0),(345,-2000,2000,0,0,0),(346,-2000,2000,0,0,0),(353,-2000,2000,0,0,0),(354,-2000,2000,0,0,0),(355,-2000,2000,0,0,0),(361,-2000,2000,0,0,0),(362,-2000,2000,0,0,0),(363,-2000,2000,0,0,0),(364,-2000,2000,0,0,0),(365,-2000,2000,0,0,0),(366,-2000,2000,0,0,0),(367,-2000,2000,0,0,0),(368,-2000,2000,0,0,0),(370,-2000,2000,0,0,0),(371,-2000,2000,0,0,0),(372,-2000,2000,0,0,0),(373,-2000,2000,0,0,0),(374,-2000,2000,0,0,0),(375,-2000,2000,0,0,0),(376,-2000,2000,0,0,0),(377,-2000,2000,0,0,0),(378,-2000,2000,0,0,0),(379,-2000,2000,0,0,0),(382,-2000,2000,0,0,0),(385,-2000,2000,0,0,0),(387,-2000,2000,0,0,0),(388,-2000,2000,0,0,0),(390,-2000,2000,0,0,0),(391,-2000,2000,0,0,0),(394,-2000,2000,0,0,0),(397,-2000,2000,0,0,0),(398,-2000,2000,0,0,0),(401,-2000,2000,0,0,0),(402,-2000,2000,0,0,0),(404,0,2000,0,0,0),(405,-2000,2000,0,0,0),(406,-2000,2000,0,0,0),(407,-2000,2000,0,0,0),(409,-2000,2000,0,0,0),(412,-2000,2000,0,0,0),(415,-2000,2000,0,0,0),(416,-2000,2000,0,0,0),(417,-2000,2000,0,0,0),(418,-2000,2000,0,0,0),(419,-2000,2000,0,0,0),(420,-2000,2000,0,0,0),(421,-2000,2000,0,0,0),(422,-2000,2000,0,0,0),(423,-2000,2000,0,0,0),(425,-2000,2000,0,0,0),(426,-2000,2000,0,0,0),(427,-2000,2000,0,0,0),(428,-2000,2000,0,0,0),(429,-2000,2000,0,0,0),(430,-2000,2000,0,0,0),(431,-2000,2000,0,0,0),(432,-2000,2000,0,0,0),(433,-2000,2000,0,0,0),(434,-2000,2000,0,0,0),(435,-2000,2000,0,0,0),(436,-2000,2000,0,0,0),(437,-2000,2000,0,0,0),(438,-2000,2000,0,0,0),(439,-2000,2000,0,0,0),(440,-2000,2000,0,0,0),(441,-2000,2000,0,0,0),(442,-2000,2000,0,0,0),(443,-2000,2000,0,0,0),(444,-2000,2000,0,0,0),(445,-2000,2000,0,0,0),(446,-2000,2000,0,0,0),(447,-2000,2000,0,0,0),(448,-2000,2000,0,0,0),(449,-2000,2000,0,0,0),(450,-2000,2000,0,0,0),(451,-2000,2000,0,0,0),(452,-2000,2000,0,0,0),(453,-2000,2000,0,0,0),(454,-2000,2000,0,0,0),(455,-2000,2000,0,0,0),(456,-2000,2000,0,0,0),(457,-2000,2000,0,0,0),(458,-2000,2000,0,0,0),(459,-2000,2000,0,0,0),(460,-2000,2000,0,0,0),(461,-2000,2000,0,0,0),(462,-2000,2000,0,0,0),(463,-2000,2000,0,0,0),(464,-2000,2000,0,0,0),(465,-2000,2000,0,0,0),(467,-2000,2000,0,0,0),(468,-2000,2000,0,0,0),(469,-2000,2000,0,0,0),(471,-2000,2000,0,0,0),(472,-2000,2000,0,0,0),(473,-2000,2000,0,0,0),(474,-2000,2000,0,0,0),(475,-2000,2000,0,0,0),(530,-2000,2000,0,0,0),(548,-2000,2000,0,0,0),(680,-2000,2000,0,0,0),(690,-2000,2000,0,0,0),(711,0,5000,0,0,0),(712,0,5000,0,0,0),(713,-5000,0,0,0,0),(714,-5000,0,0,0,0),(715,-5000,0,0,0,0),(716,-5000,0,0,0,0),(720,-2000,2000,0,0,0),(721,-2000,2000,0,0,0),(1005,-2000,2000,0,0,0),(1007,-2000,0,0,0,0),(1010,-2000,0,0,0,0),(1013,-2000,0,0,0,0),(1016,-2000,2000,0,0,0),(1021,-2000,2000,0,0,0),(1022,-2000,2000,0,0,0),(1023,-2000,2000,0,0,0),(1024,-2000,0,0,0,0),(1025,-2000,0,0,0,0),(1026,-2000,0,0,0,0),(1027,-2000,0,0,0,0),(1028,-2000,0,0,0,0),(1029,-2000,0,0,0,0),(1030,-2000,0,0,0,0),(1031,-2000,0,0,0,0),(1032,-2000,0,0,0,0),(1033,-2000,0,0,0,0),(1034,-2000,0,0,0,0),(1035,-2000,0,0,0,0),(1048,-2000,2000,0,0,0),(1049,-2000,0,0,0,0),(1050,-2000,2000,0,0,0),(1051,-2000,0,0,0,0),(1052,-2000,0,0,0,0),(1053,-2000,0,0,0,0),(1054,-2000,0,0,0,0),(1055,-2000,2000,0,0,0),(1056,-2000,0,0,0,0),(1057,-2000,2000,0,0,0),(1058,-2000,0,0,0,0),(1059,-2000,2000,0,0,0),(1062,-2000,2000,0,0,0),(1063,-2000,2000,0,0,0),(1065,-2000,2000,0,0,0),(1066,-2000,2000,0,0,0),(1068,-2000,900,0,0,0),(1069,-2000,900,0,0,0),(1070,-2000,900,0,0,0),(1071,-2000,900,0,0,0),(1072,-2000,900,0,0,0),(1073,-2000,900,0,0,0),(1074,-2000,900,0,0,0),(1075,-2000,900,0,0,0),(1076,-2000,900,0,0,0),(1077,-2000,900,0,0,0),(1078,-2000,900,0,0,0),(1079,-2000,900,0,0,0),(1080,-2000,900,0,0,0),(1085,-2000,2000,0,0,0),(1086,-2000,0,0,0,0),(1088,-2000,2000,0,0,0),(1089,-2000,2000,0,0,0),(1090,-2000,2000,0,0,0),(1091,-2000,2000,0,0,0),(1092,-2000,2000,0,0,0),(1093,-2000,0,0,0,0),(1094,-2000,0,0,0,0),(1095,-2000,2000,0,0,0),(1100,-2000,0,0,0,0),(1101,-2000,0,0,0,0),(1103,-2000,0,0,0,0),(1104,-2000,2000,0,0,0),(1105,-2000,2000,0,0,0),(1107,-2000,2000,0,0,0),(1108,-2000,2000,0,0,0),(1109,-2000,2000,0,0,0),(1110,-2000,2000,0,0,0),(1111,-2000,0,0,0,0),(1112,-2000,0,0,0,0),(1113,-2000,0,0,0,0),(1114,-2000,0,0,0,0),(1115,-2000,0,0,0,0),(1116,-2000,2000,0,0,0),(1119,-2000,2000,0,0,0),(1120,-2000,1000,0,0,0),(1121,-2000,1000,0,0,0),(1123,-2000,0,0,0,0),(1124,-2000,0,0,0,0),(1125,-2000,0,0,0,0),(1129,-2000,2000,0,0,0),(1134,-2000,2000,0,0,0),(1135,-2000,2000,0,0,0),(1137,-2000,2000,0,0,0),(1140,-2000,2000,0,0,0),(1141,-2000,2000,0,0,0),(1142,-2000,2000,0,0,0),(1143,-2000,2000,0,0,0),(1144,-2000,2000,0,0,0),(1145,-2000,2000,0,0,0),(1146,-2000,2000,0,0,0),(1147,-2000,2000,0,0,0),(1148,-2000,2000,0,0,0),(1149,-2000,2000,0,0,0),(1166,-2000,2000,0,0,0),(1169,-2000,2000,0,0,0),(1170,-2000,2000,0,0,0),(1175,-2000,2000,0,0,0),(1176,-2000,2000,0,0,0),(1181,-2000,2000,100,20,100),(1182,-2000,2000,0,0,0),(1183,-2000,2000,0,0,0),(1184,-2000,2000,0,0,0),(1185,-2000,2000,0,0,0),(1186,-2000,2000,100,20,100),(1188,-2000,2000,0,0,0),(1189,-2000,2000,0,0,0),(1190,-2000,2000,0,0,0),(1191,-2000,2000,0,0,0),(1192,-2000,2000,100,20,100),(1193,-2000,2000,100,20,100),(1194,-2000,2000,100,20,100),(1195,-2000,2000,100,20,100),(1196,-2000,2000,100,20,100),(1197,-2000,2000,100,20,100),(1198,-2000,2000,100,20,100),(1199,-2000,2000,100,20,100),(1200,-2000,2000,100,20,100),(1201,-2000,2000,100,20,100),(1202,-2000,2000,100,20,100),(1203,-2000,2000,100,20,100),(1204,-200,2000,100,20,100),(1205,-200,2000,100,20,100),(1209,-2000,2000,100,20,100),(1210,-2000,2000,100,20,100),(1211,-2000,2000,100,20,100),(1212,-2000,2000,100,20,100),(1213,-2000,2000,100,20,100),(1214,-2000,2000,100,20,100),(1215,-2000,2000,100,20,100),(1216,-2000,2000,100,20,100),(1219,-2000,2000,100,20,100),(1220,-2000,2000,100,20,100),(1221,-2000,2000,100,20,100),(1222,-2000,2000,0,0,0),(1223,-2000,2000,0,0,0),(1224,-2000,2000,0,0,0),(1225,-2000,2000,0,0,0),(1226,-2000,2000,0,0,0),(1227,-2000,2000,0,0,0),(1229,0,2000,100,20,100),(1230,-2000,2000,100,20,100),(1232,-500,2000,0,0,0),(1233,-3000,0,0,0,0),(1234,-500,2000,0,0,0),(1235,-2000,0,0,0,0),(1237,-2000,0,0,0,0),(1238,-400,0,0,0,0),(1241,-2000,249,0,0,0),(1242,-2000,2000,0,0,0),(1243,-2000,0,0,0,0),(1244,-499,2000,0,0,0),(1483,-4000,2000,0,0,0),(1484,-2000,2000,0,0,0),(1485,-2000,500,0,0,0),(1486,-2000,2000,0,0,0),(1487,-2000,2000,0,0,0),(1488,-2000,2000,0,0,0),(1489,-2000,2000,0,0,0),(1490,-2000,2000,0,0,0),(1491,-2000,2000,0,0,0),(1499,-2000,2000,0,0,0),(1500,-2000,2000,0,0,0),(1501,-2000,2000,0,0,0),(1502,-2000,2000,0,0,0),(1503,-2000,2000,0,0,0),(1504,-2000,2000,0,0,0),(1505,-2000,2000,0,0,0),(1506,-2000,2000,0,0,0),(1507,-2000,2000,0,0,0),(1508,-500,2000,0,0,0),(1509,-749,2000,0,0,0),(1510,-500,2000,0,0,0),(1511,-500,2000,0,0,0),(1512,-500,2000,0,0,0),(1513,-2000,2000,0,0,0),(1516,-2000,2000,0,0,0),(1519,-2000,2000,0,0,0),(1520,-2000,2000,0,0,0),(1521,-2000,0,0,0,0),(1522,-2000,2000,0,0,0),(1524,-2000,2000,0,0,0),(1525,-2000,2000,0,0,0),(1526,-2000,2000,0,0,0),(1527,-2000,2000,0,0,0),(1528,-2000,2000,0,0,0),(1529,-2000,2000,0,0,0),(1530,-2000,2000,0,0,0),(1531,-2000,2000,0,0,0),(1532,-2000,2000,0,0,0),(1533,-2000,2000,0,0,0),(1535,-2000,2000,0,0,0),(1537,-2000,2000,0,0,0),(1538,-2000,2000,0,0,0),(1541,-2000,2000,0,0,0),(1542,-2000,2000,0,0,0),(1543,-2000,2000,0,0,0),(1544,-2000,2000,0,0,0),(1545,-2000,2000,0,0,0),(1546,-2000,2000,0,0,0),(1547,-2000,2000,0,0,0),(1548,-2000,2000,0,0,0),(1549,-2000,2000,0,0,0),(1550,-2000,2000,0,0,0),(1551,-2000,2000,0,0,0),(1552,-2000,2000,0,0,0),(1555,-2000,2000,0,0,0),(1556,-2000,2000,0,0,0),(1559,-2000,2000,0,0,0),(1560,-2000,2000,0,0,0),(1561,-2000,2000,0,0,0),(1562,-2000,2000,0,0,0),(1563,-2000,2000,0,0,0),(1564,-2000,2000,0,0,0),(1565,-2000,2000,0,0,0),(1566,-2000,2000,0,0,0),(1568,-2000,2000,0,0,0),(1569,-2000,2000,0,0,0),(1570,-2000,2000,0,0,0),(1571,-2000,2000,0,0,0),(1573,-2000,2000,0,0,0),(1574,-2000,2000,0,0,0),(1576,-2000,2000,0,0,0),(1577,-2000,2000,0,0,0),(1578,-2000,2000,0,0,0),(1582,-2000,2000,0,0,0),(1583,-2000,2000,0,0,0),(1584,-2000,2000,0,0,0),(1587,-2000,2000,0,0,0),(1593,-2000,2000,0,0,0),(1597,-1550,2000,0,0,0),(1598,-850,2000,0,0,0),(1599,-2050,2000,0,0,0),(1600,-2050,2000,0,0,0),(1601,-1550,2000,0,0,0),(1603,-2050,2000,0,0,0),(1605,-2000,2000,0,0,0),(1607,-2000,2000,0,0,0),(1609,-2000,2000,0,0,0),(1610,-2000,2000,0,0,0),(1611,-2000,2000,0,0,0),(1612,-2000,2000,0,0,0),(1613,-2000,2000,0,0,0),(1618,-2000,2000,0,0,0),(1620,-2000,2000,0,0,0),(1621,-2000,2000,0,0,0),(1622,-2000,2000,0,0,0),(1623,-2000,2000,0,0,0),(1624,-2000,2000,0,0,0),(1625,-2000,2000,0,0,0),(1626,-2000,2000,0,0,0),(1627,-2000,2000,0,0,0),(1628,-2000,2000,0,0,0),(1629,-2000,2000,0,0,0),(1630,-2000,2000,0,0,0),(1633,-2000,2000,0,0,0),(1636,-2000,2000,0,0,0),(1643,-2000,2000,0,0,0),(1656,-2000,2000,0,0,0),(1659,-2000,2000,0,0,0),(1660,-2000,2000,0,0,0),(1665,-2000,2000,0,0,0),(1671,-2000,0,0,0,0),(1674,-2000,0,0,0,0),(1675,-2000,0,0,0,0),(1676,-2000,0,0,0,0),(1677,-2000,2000,0,0,0),(1679,-350,400,0,0,0),(1680,-100,800,0,0,0),(1681,-150,800,0,0,0),(1701,-2000,2000,0,0,0),(1703,-2000,2000,0,0,0),(1704,-2000,2000,0,0,0),(1709,-2000,2000,0,0,0),(1711,-2000,2000,0,0,0),(1712,-2000,2000,0,0,0),(1713,-2000,2000,0,0,0),(1714,-2000,2000,0,0,0),(1715,-2000,2000,0,0,0),(1716,-2000,2000,0,0,0),(1717,-2000,2000,0,0,0),(1718,-2000,2000,0,0,0),(1719,-2000,2000,0,0,0),(1720,-2000,2000,0,0,0),(1722,-2000,2000,0,0,0),(1725,-2000,2000,0,0,0),(1728,-2000,2000,0,0,0),(1729,-2000,2000,0,0,0),(1732,-2000,2000,0,0,0),(1733,-2000,2000,0,0,0),(1734,-2000,2000,0,0,0),(1735,-2000,2000,0,0,0),(1736,-2000,2000,0,0,0),(1737,-2000,2000,0,0,0),(1738,-2000,2000,0,0,0),(1741,-2000,2000,0,0,0),(1742,-2000,2000,0,0,0),(1743,-2000,2000,0,0,0),(1744,-2000,2000,0,0,0),(1745,-2000,2000,0,0,0),(1746,-2000,2000,0,0,0),(1747,-2000,2000,0,0,0),(1748,-2000,2000,0,0,0),(1749,-2000,2000,0,0,0),(1750,-2000,2000,0,0,0),(1755,-2000,2000,0,0,0),(1758,-2000,2000,0,0,0),(1759,-2000,2000,0,0,0),(1761,-2000,2000,0,0,0),(1762,-2000,2000,0,0,0),(1763,-2000,2000,0,0,0),(1764,-2000,2000,0,0,0),(1765,-2000,2000,0,0,0),(1766,-2000,2000,0,0,0),(1767,-2000,2000,0,0,0),(1768,-2000,2000,0,0,0),(1770,-2000,2000,0,0,0),(1771,-2000,2000,0,0,0),(1775,-800,1500,0,0,0),(1777,-1000,0,0,0,0),(1778,-800,1500,0,0,0),(1779,-800,1500,0,0,0),(1780,-800,1500,0,0,0),(1781,-800,1500,0,0,0),(1783,-1000,1000,0,0,0),(1784,-1000,0,0,0,0),(1785,-800,1500,0,0,0),(1786,-1000,1000,0,0,0),(1787,-1000,0,0,0,0),(1788,-1000,0,0,0,0),(1789,-1000,99,0,0,0),(1790,-1000,0,0,0,0),(1791,-1000,99,0,0,0),(1792,-1000,0,0,0,0),(1793,-1000,99,0,0,0),(1794,-1000,0,0,0,0),(1795,-1000,99,0,0,0),(1796,-1000,0,0,0,0),(1798,-1000,1000,0,0,0),(1799,-1000,99,0,0,0),(1801,-2000,2000,0,0,0),(1802,-2000,2000,0,0,0),(1817,-500,7000,0,0,0),(1818,-1000,899,0,0,0),(1819,-2000,99,0,0,0),(1820,-2000,2000,0,0,0),(1821,-2000,0,0,0,0),(1822,0,4000,0,0,0),(1823,-1000,950,0,0,0),(1824,-2000,0,0,0,0),(1825,-2000,2000,0,0,0),(1828,-2000,2000,0,0,0),(1829,-2000,2000,0,0,0),(1830,-900,900,0,0,0),(1831,-900,900,0,0,0),(1846,-501,499,100,20,100),(1847,-501,499,100,20,100),(1852,-2000,-1000,0,0,0),(1853,-2000,2000,0,0,0),(1854,-2000,2000,0,0,0),(1855,-2000,2000,0,0,0),(1856,-2000,2000,0,0,0),(1857,-2000,2000,0,0,0),(1858,-2000,2000,0,0,0),(1859,-751,2000,100,20,100),(1860,-751,2000,100,20,100),(1862,-2000,2000,0,0,0),(1863,-600,800,0,0,0),(1864,-600,800,0,0,0),(1865,-600,800,0,0,0),(1866,-600,800,0,0,0),(1867,-2000,2000,0,0,0),(1868,-2000,2000,0,0,0),(1869,-2000,2000,0,0,0),(1870,-2000,2000,0,0,0),(1872,-2000,2000,0,0,0); -UNLOCK TABLES; diff --git a/utils/sql/git/required/2018_12_12_convert_to_client_functions.sql b/utils/sql/git/required/2018_12_12_convert_to_client_functions.sql deleted file mode 100755 index 05ae8cf54..000000000 --- a/utils/sql/git/required/2018_12_12_convert_to_client_functions.sql +++ /dev/null @@ -1,173 +0,0 @@ -/* -This SQL update utilizes the new raw faction data from the client - -First we create a temporary table - which we will use to map any -custom factions in the eqemu db, that are either: - - eqemu utility factions - - obsoleted factions with no new mapping to the client - -This is done so that we can keep these factions while server owners either -stay with them, or migrate. They are moved to the 5000+ range, to not conflict -with client faction_ids. -*/ - -/* Create the temp table and start mappings at 5000 */ -CREATE TABLE custom_faction_mappings (old_faction int, new_faction int, primary key (old_faction)) engine=INNODB; - -select "Moving custom factions to safe range, well above known client values" ``; -select @startcustom:=5000; - -/* Insert the custom/obsolete factions into the temp mapping table */ -insert into custom_faction_mappings (select id, @startcustom := @startcustom +1 from faction_list where id not in (select serverid from client_server_faction_map) and id < 5000); - -CREATE TABLE IF NOT EXISTS faction_list_mod_prefix AS SELECT * from faction_list_mod; - -/* Now we update all the tables for these custom factions */ - -update faction_list_mod set faction_id = (select new_faction from custom_faction_mappings where old_faction = faction_id) where faction_id < 5000 and faction_id in (select old_faction from custom_faction_mappings); - -CREATE TABLE IF NOT EXISTS faction_list_prefix AS SELECT * from faction_list; - -DROP TABLE faction_list; - -CREATE TABLE `faction_list` ( - `id` int(11) NOT NULL, - `name` varchar(50) NOT NULL DEFAULT '', - `base` smallint(6) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`), - UNIQUE KEY `id` (`id`) -) ENGINE=MyISAM AUTO_INCREMENT=486 DEFAULT CHARSET=utf8 as select id, name, base from faction_list_prefix; - -update faction_list set id = -(select new_faction from custom_faction_mappings where old_faction = id) where id < 5000 and id in (select old_faction from custom_faction_mappings); - -/* At this point all faction_mods for unmapped factions will be ids 5000+ */ -/* So we can delete all the old ones still under 5000 - making room for the */ -/* new faction ids */ - -delete from faction_list_mod where faction_id < 5000; - -delete from faction_list where id < 5000; - -/* Make an entry for each faction */ -/* No base on client factions */ - -insert into faction_list (id, name, base) (select id, name, 0 from client_faction_names); - -/* Now restore any base for factions for which the client has no mods (social factions) */ - -DROP TABLE IF EXISTS oldbases; - -CREATE TABLE `oldbases` ( - `id` int(11) DEFAULT 0, - `name` varchar(50) NOT NULL DEFAULT '', - `base` smallint(6) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 as -(select m.clientid as id, p.name, p.base from faction_list_prefix p -join client_server_faction_map m on m.serverid = p.id where p.base <> 0 -&& m.clientid in (select id from faction_list where id not in (SELECT faction_id from client_faction_associations group by faction_id))); - -update faction_list f -INNER JOIN oldbases o on o.id = f.id -set f.base = o.base; - -/* Adjust for the big change in the dubious range */ -update faction_list set base = base + 200 where base between -900 and -501; - -DROP TABLE IF EXISTS oldbases; - -/* Create mods based on the client_faction_associations */ -/* No code changes required */ - -insert into faction_list_mod -(select null, faction_id, `mod`, concat("r", other_faction_id-50) -from client_faction_associations a -join client_faction_names n on n.id = a.other_faction_id -where other_faction_id between 51 and 180); - -insert into faction_list_mod -(select null, faction_id, `mod`, concat("c", other_faction_id) -from client_faction_associations a -join client_faction_names n on n.id = a.other_faction_id -where other_faction_id between 1 and 50); - -insert into faction_list_mod -(select null, faction_id, `mod`, concat("d", other_faction_id) -from client_faction_associations a -join client_faction_names n on n.id = a.other_faction_id -where other_faction_id between 201 and 216); - -/* And now we need to fix all the other faction tables to point to the new factions. */ - -CREATE TABLE IF NOT EXISTS npc_faction_prefix AS SELECT * from npc_faction; - -update npc_faction set primaryfaction = (select new_faction from custom_faction_mappings where old_faction = primaryfaction) -where primaryfaction in (select old_faction from custom_faction_mappings); - -update npc_faction set primaryfaction = (select clientid from client_server_faction_map where serverid = primaryfaction) -where primaryfaction in (select serverid from client_server_faction_map); - -update npc_faction_entries set faction_id = (select new_faction from custom_faction_mappings where old_faction = faction_id) -where faction_id in (select old_faction from custom_faction_mappings); - -CREATE TABLE IF NOT EXISTS npc_faction_entries_prefix AS SELECT * from npc_faction_entries; - -/* Move existing factions out of wat - the following replace would create key */ -/* duplicates along the way, but none when complete. */ - -update npc_faction_entries set faction_id = faction_id + 20000 -where faction_id in (select serverid from client_server_faction_map); - -update npc_faction_entries set faction_id = (select clientid from client_server_faction_map where faction_id > 20000 && serverid = (faction_id-20000)) -where faction_id > 20000 && (faction_id-20000) in (select serverid from client_server_faction_map); - -/* Removes any duplicates from the use of factions that are obsoleted */ -/* These are entries that have no new mapping whatsoever */ -delete from npc_faction_entries where faction_id > 20000; - - -/* -Update the faction_values now. -*/ - -CREATE TABLE IF NOT EXISTS faction_values_prefix AS SELECT * from faction_values; - -delete from faction_values - where faction_id not in (select old_faction from custom_faction_mappings) and faction_id not in (select serverid from client_server_faction_map); - -/* Custom faction mappings dont have to worry about range collision */ - -select "Updating faction_values for custom factions" ``; - -update faction_values set faction_id = (select new_faction from custom_faction_mappings where old_faction = faction_id) -where faction_id in (select old_faction from custom_faction_mappings); - -/* -There are so many of these, Im going to update in place to save time. -To do this we must remove the unique keys, as these will be violated until -the update is complete -*/ - -select "Updating core faction_values to use new faction ids...." ``; - -alter table faction_values drop primary key; - -update faction_values v -join client_server_faction_map m on v.faction_id = m.serverid -set faction_id = m.clientid; - -ALTER TABLE `faction_values` ADD PRIMARY KEY `lookup` (`char_id`,`faction_id`); - -/* - * The following to be deleted in a future update, once everyone is - * happy with the conversion - -DROP TABLE IF EXISTS custom_faction_mappings; -DROP TABLE IF EXISTS faction_list_mod_prefix; -DROP TABLE IF EXISTS faction_list_prefix; -DROP TABLE IF EXISTS npc_faction_prefix; -DROP TABLE IF EXISTS npc_faction_entries_prefix; -DROP TABLE IF EXISTS faction_values_prefix; - - */ diff --git a/utils/sql/git/required/2018_12_13_spell_buckets.sql b/utils/sql/git/required/2018_12_13_spell_buckets.sql deleted file mode 100644 index 1c56799f0..000000000 --- a/utils/sql/git/required/2018_12_13_spell_buckets.sql +++ /dev/null @@ -1,10 +0,0 @@ -CREATE TABLE `spell_buckets` ( - `spellid` bigint(11) unsigned NOT NULL, - `key` varchar(100) DEFAULT NULL, - `value` text, - PRIMARY KEY (`spellid`), - KEY `key_index` (`key`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Spells:EnableSpellBuckets', 'false', 'Enables spell buckets'); -INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Character:PerCharacterBucketMaxLevel', 'false', 'Enables data bucket-based max level.'); \ No newline at end of file diff --git a/utils/sql/git/required/2018_12_16_global_base_scaling.sql b/utils/sql/git/required/2018_12_16_global_base_scaling.sql deleted file mode 100644 index 2c07d1fb6..000000000 --- a/utils/sql/git/required/2018_12_16_global_base_scaling.sql +++ /dev/null @@ -1,314 +0,0 @@ --- INSERT #devtools / #dev command - -INSERT INTO `command_settings` (`command`, `access`, `aliases`) -VALUES - ('devtools', 200, 'dev'); - --- CREATE 'npc_scale_global_base' - -CREATE TABLE `npc_scale_global_base` ( - `type` int(11) NOT NULL DEFAULT '0', - `level` int(11) NOT NULL, - `ac` int(11) DEFAULT NULL, - `hp` int(11) DEFAULT NULL, - `accuracy` int(11) DEFAULT NULL, - `slow_mitigation` int(11) DEFAULT NULL, - `attack` int(11) DEFAULT NULL, - `strength` int(11) DEFAULT NULL, - `stamina` int(11) DEFAULT NULL, - `dexterity` int(11) DEFAULT NULL, - `agility` int(11) DEFAULT NULL, - `intelligence` int(11) DEFAULT NULL, - `wisdom` int(11) DEFAULT NULL, - `charisma` int(11) DEFAULT NULL, - `magic_resist` int(11) DEFAULT NULL, - `cold_resist` int(11) DEFAULT NULL, - `fire_resist` int(11) DEFAULT NULL, - `poison_resist` int(11) DEFAULT NULL, - `disease_resist` int(11) DEFAULT NULL, - `corruption_resist` int(11) DEFAULT NULL, - `physical_resist` int(11) DEFAULT NULL, - `min_dmg` int(11) DEFAULT NULL, - `max_dmg` int(11) DEFAULT NULL, - `hp_regen_rate` int(11) DEFAULT NULL, - `attack_delay` int(11) DEFAULT NULL, - `spell_scale` int(11) DEFAULT '100', - `heal_scale` int(11) DEFAULT '100', - `special_abilities` text, - PRIMARY KEY (`type`,`level`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - --- INSERT 'npc_scale_global_base' - -INSERT INTO `npc_scale_global_base` (`type`, `level`, `ac`, `hp`, `accuracy`, `slow_mitigation`, `attack`, `strength`, `stamina`, `dexterity`, `agility`, `intelligence`, `wisdom`, `charisma`, `magic_resist`, `cold_resist`, `fire_resist`, `poison_resist`, `disease_resist`, `corruption_resist`, `physical_resist`, `min_dmg`, `max_dmg`, `hp_regen_rate`, `attack_delay`, `spell_scale`, `heal_scale`, `special_abilities`) -VALUES - (0,1,8,11,0,0,0,8,8,8,8,8,8,8,1,1,1,1,1,1,10,1,6,1,30,100,100,''), - (0,2,11,27,0,0,0,11,11,11,11,11,11,11,1,1,1,1,1,2,10,1,8,2,30,100,100,''), - (0,3,14,43,0,0,0,14,14,14,14,14,14,14,2,2,2,2,2,2,10,1,10,3,30,100,100,''), - (0,4,16,59,0,0,0,17,17,17,17,17,17,17,2,2,2,2,2,3,10,1,12,4,30,100,100,''), - (0,5,19,75,0,0,0,20,20,20,20,20,20,20,2,2,2,2,2,3,10,1,14,5,30,100,100,''), - (0,6,22,100,0,0,0,23,23,23,23,23,23,23,2,2,2,2,2,4,10,1,16,6,30,100,100,''), - (0,7,25,125,0,0,0,26,26,26,26,26,26,26,3,3,3,3,3,4,10,1,18,7,30,100,100,''), - (0,8,28,150,0,0,0,29,29,29,29,29,29,29,3,3,3,3,3,5,10,1,20,8,30,100,100,''), - (0,9,31,175,0,0,0,32,32,32,32,32,32,32,4,4,4,4,4,5,10,1,22,9,30,100,100,''), - (0,10,34,200,0,0,0,35,35,35,35,35,35,35,4,4,4,4,4,6,10,1,24,10,30,100,100,''), - (0,11,37,234,0,0,0,38,38,38,38,38,38,38,5,5,5,5,5,7,10,3,27,11,30,100,100,''), - (0,12,40,268,0,0,0,42,42,42,42,42,42,42,5,5,5,5,5,8,10,4,30,12,30,100,100,''), - (0,13,43,302,0,0,0,45,45,45,45,45,45,45,6,6,6,6,6,8,10,6,32,13,30,100,100,''), - (0,14,46,336,0,0,0,48,48,48,48,48,48,48,6,6,6,6,6,9,10,7,35,14,30,100,100,''), - (0,15,52,381,0,0,0,51,51,51,51,51,51,51,6,6,6,6,6,10,10,7,37,15,30,100,100,''), - (0,16,59,426,0,0,0,54,54,54,54,54,54,54,7,7,7,7,7,10,10,8,39,16,30,100,100,''), - (0,17,65,471,0,0,0,57,57,57,57,57,57,57,7,7,7,7,7,11,10,8,41,17,30,100,100,''), - (0,18,72,516,0,0,0,60,60,60,60,60,60,60,7,7,7,7,7,11,10,9,42,18,30,100,100,''), - (0,19,78,561,0,0,0,63,63,63,63,63,63,63,7,7,7,7,7,12,10,9,44,19,30,100,100,''), - (0,20,85,606,0,0,0,66,66,66,66,66,66,66,8,8,8,8,8,12,10,10,46,20,30,100,100,''), - (0,21,91,651,0,0,0,69,69,69,69,69,69,69,8,8,8,8,8,13,10,10,48,21,30,100,100,''), - (0,22,95,712,0,0,0,72,72,72,72,72,72,72,8,8,8,8,8,14,10,10,50,22,30,100,100,''), - (0,23,99,773,0,0,0,75,75,75,75,75,75,75,9,9,9,9,9,14,10,10,52,23,30,100,100,''), - (0,24,103,834,0,0,0,78,78,78,78,78,78,78,9,9,9,9,9,15,10,11,55,24,30,100,100,''), - (0,25,107,895,0,0,0,81,81,81,81,81,81,81,10,10,10,10,10,16,10,11,57,25,30,100,100,''), - (0,26,111,956,0,0,0,85,85,85,85,85,85,85,10,10,10,10,10,16,10,11,59,26,30,100,100,''), - (0,27,115,1017,0,0,0,88,88,88,88,88,88,88,11,11,11,11,11,17,10,11,61,27,30,100,100,''), - (0,28,119,1078,0,0,0,91,91,91,91,91,91,91,11,11,11,11,11,18,10,12,64,28,30,100,100,''), - (0,29,123,1139,0,0,0,94,94,94,94,94,94,94,12,12,12,12,12,18,10,12,66,29,30,100,100,''), - (0,30,127,1200,0,0,0,97,97,97,97,97,97,97,12,12,12,12,12,19,10,12,68,30,30,100,100,''), - (0,31,135,1580,4,0,4,104,104,104,104,104,104,104,13,13,13,13,13,20,10,14,74,31,30,100,100,''), - (0,32,142,1960,8,0,8,110,110,110,110,110,110,110,14,14,14,14,14,22,10,16,79,32,30,100,100,''), - (0,33,150,2340,12,0,12,117,117,117,117,117,117,117,15,15,15,15,15,23,10,18,85,33,29,100,100,''), - (0,34,158,2720,16,0,16,123,123,123,123,123,123,123,16,16,16,16,16,25,10,20,90,34,28,100,100,''), - (0,35,166,3100,20,0,20,130,130,130,130,130,130,130,17,17,17,17,17,26,10,22,96,35,27,100,100,''), - (0,36,173,3480,24,0,24,137,137,137,137,137,137,137,17,17,17,17,17,27,10,24,102,36,25,100,100,''), - (0,37,181,3860,28,0,28,143,143,143,143,143,143,143,18,18,18,18,18,29,10,26,107,37,24,100,100,''), - (0,38,189,4240,32,0,32,150,150,150,150,150,150,150,19,19,19,19,19,30,10,28,113,38,23,100,100,''), - (0,39,196,4620,36,0,36,156,156,156,156,156,156,156,20,20,20,20,20,32,10,30,118,39,22,100,100,''), - (0,40,204,5000,40,0,40,163,163,163,163,163,163,163,21,21,21,21,21,33,10,32,124,40,21,100,100,''), - (0,41,208,5300,42,0,42,166,166,166,166,166,166,166,22,22,22,22,22,34,10,33,127,41,21,100,100,''), - (0,42,212,5600,44,0,44,169,169,169,169,169,169,169,22,22,22,22,22,35,10,34,130,42,21,100,100,''), - (0,43,217,5900,46,0,46,173,173,173,173,173,173,173,23,23,23,23,23,35,10,34,133,43,21,100,100,''), - (0,44,221,6200,48,0,48,176,176,176,176,176,176,176,23,23,23,23,23,36,10,35,136,44,21,100,100,''), - (0,45,225,6500,50,0,50,179,179,179,179,179,179,179,24,24,24,24,24,37,10,36,139,45,21,100,100,''), - (0,46,229,7200,50,0,50,182,182,182,182,182,182,182,24,24,24,24,24,38,10,44,152,46,21,100,100,''), - (0,47,233,7900,50,0,50,185,185,185,185,185,185,185,25,25,25,25,25,39,10,51,165,47,21,100,100,''), - (0,48,237,8600,50,0,50,188,188,188,188,188,188,188,25,25,25,25,25,39,10,59,178,48,21,100,100,''), - (0,49,241,9300,50,0,50,191,191,191,191,191,191,191,26,26,26,26,26,40,10,66,191,49,21,100,100,''), - (0,50,245,10000,50,0,50,194,194,194,194,194,194,194,26,26,26,26,26,41,10,74,204,50,21,100,100,''), - (0,51,249,11700,53,0,53,197,197,197,197,197,197,197,27,27,27,27,27,42,11,78,231,51,20,100,100,''), - (0,52,253,13400,56,0,56,200,200,200,200,200,200,200,27,27,27,27,27,43,12,81,258,52,20,100,100,''), - (0,53,257,15100,59,0,59,203,203,203,203,203,203,203,28,28,28,28,28,43,13,85,284,53,20,100,100,''), - (0,54,261,16800,62,10,62,206,206,206,206,206,206,206,28,28,28,28,28,44,14,89,311,54,20,100,100,''), - (0,55,266,18500,65,10,65,210,210,210,210,210,210,210,29,29,29,29,29,45,15,93,338,55,20,100,100,''), - (0,56,270,20200,68,10,68,213,213,213,213,213,213,213,29,29,29,29,29,46,16,96,365,56,20,100,100,''), - (0,57,274,21900,71,10,71,216,216,216,216,216,216,216,30,30,30,30,30,47,17,100,392,57,19,100,100,''), - (0,58,278,23600,74,10,74,219,219,219,219,219,219,219,30,30,30,30,30,47,18,104,418,58,19,100,100,'8,1'), - (0,59,282,25300,77,10,77,222,222,222,222,222,222,222,31,31,31,31,31,48,19,107,445,59,19,100,100,'8,1'), - (0,60,286,27000,80,20,80,225,225,225,225,225,225,225,31,31,31,31,31,49,20,111,472,60,19,100,100,'8,1^21,1'), - (0,61,290,28909,85,20,84,228,228,228,228,228,228,228,32,32,32,32,32,50,24,128,536,61,19,100,100,'8,1^21,1'), - (0,62,294,30818,91,20,87,231,231,231,231,231,231,231,32,32,32,32,32,51,28,145,599,62,18,100,100,'8,1^21,1'), - (0,63,299,32727,96,20,91,234,234,234,234,234,234,234,33,33,33,33,33,51,32,162,663,63,18,100,100,'8,1^21,1'), - (0,64,303,34636,102,20,95,237,237,237,237,237,237,237,33,33,33,33,33,52,36,179,727,64,18,100,100,'8,1^21,1'), - (0,65,307,36545,107,25,98,240,240,240,240,240,240,240,34,34,34,34,34,53,40,196,790,65,18,100,100,'8,1^21,1'), - (0,66,311,38455,113,25,102,244,244,244,244,244,244,244,34,34,34,34,34,54,44,213,854,66,18,100,100,'8,1^21,1'), - (0,67,315,40364,118,25,105,247,247,247,247,247,247,247,35,35,35,35,35,55,48,230,917,67,17,100,100,'8,1^21,1'), - (0,68,319,42273,124,25,109,250,250,250,250,250,250,250,35,35,35,35,35,56,52,247,981,68,17,100,100,'8,1^21,1'), - (0,69,324,44182,129,25,113,253,253,253,253,253,253,253,36,36,36,36,36,56,56,264,1045,69,17,100,100,'8,1^21,1'), - (0,70,328,46091,135,30,116,256,256,256,256,256,256,256,36,36,36,36,36,57,60,281,1108,70,17,100,100,'8,1^21,1'), - (0,71,332,48000,140,30,120,259,259,259,259,259,259,259,37,37,37,37,37,58,64,298,1172,71,17,100,100,'8,1^21,1'), - (0,72,336,49909,143,30,128,262,262,262,262,262,262,262,38,38,38,38,38,59,68,305,1193,72,17,100,100,'8,1^21,1'), - (0,73,340,51818,145,30,135,265,265,265,265,265,265,265,39,39,39,39,39,60,72,312,1214,73,17,100,100,'8,1^21,1'), - (0,74,344,53727,148,30,143,268,268,268,268,268,268,268,39,39,39,39,39,61,76,318,1235,74,17,100,100,'8,1^21,1'), - (0,75,348,55636,150,30,150,271,271,271,271,271,271,271,40,40,40,40,40,62,80,325,1256,75,17,100,100,'8,1^21,1'), - (0,76,352,75000,160,30,160,274,274,274,274,274,274,274,41,41,41,41,41,63,84,400,1600,76,17,100,100,'8,1^21,1'), - (0,77,356,90000,170,30,170,277,277,277,277,277,277,277,42,42,42,42,42,64,88,500,2050,77,17,100,100,'8,1^21,1'), - (0,78,360,113000,180,30,180,280,280,280,280,280,280,280,43,43,43,43,43,65,92,594,2323,120,17,100,100,'8,1^21,1'), - (0,79,364,130000,190,30,190,283,283,283,283,283,283,283,44,44,44,44,44,66,96,650,2500,130,17,100,100,'8,1^21,1'), - (0,80,368,140000,200,30,200,286,286,286,286,286,286,286,45,45,45,45,45,67,100,720,2799,140,16,100,100,'8,1^21,1'), - (0,81,372,240000,300,30,300,289,289,289,289,289,289,289,46,46,46,46,46,68,104,800,3599,240,16,100,100,'8,1^21,1'), - (0,82,376,340000,400,30,400,292,292,292,292,292,292,292,47,47,47,47,47,69,108,900,4599,340,16,100,100,'8,1^21,1'), - (0,83,380,440000,410,30,410,295,295,295,295,295,295,295,48,48,48,48,48,70,112,1275,4904,440,16,100,100,'8,1^21,1'), - (0,84,384,445000,420,30,420,298,298,298,298,298,298,298,49,49,49,49,49,71,116,1300,5100,445,16,100,100,'8,1^21,1'), - (0,85,388,450000,430,30,430,301,301,301,301,301,301,301,50,50,50,50,50,72,120,1359,5292,450,16,100,100,'8,1^21,1'), - (0,86,392,455000,440,30,440,304,304,304,304,304,304,304,51,51,51,51,51,73,124,1475,5578,455,16,100,100,'8,1^21,1'), - (0,87,396,460000,450,30,450,307,307,307,307,307,307,307,52,52,52,52,52,74,128,1510,5918,460,16,100,100,'8,1^21,1'), - (0,88,400,465000,460,30,460,310,310,310,310,310,310,310,53,53,53,53,53,75,132,1610,6200,465,16,100,100,'8,1^21,1'), - (0,89,404,470000,470,30,470,313,313,313,313,313,313,313,54,54,54,54,54,76,136,1650,6275,470,16,100,100,'8,1^21,1'), - (0,90,408,475000,480,30,480,316,316,316,316,316,316,316,55,55,55,55,55,77,140,1700,6350,475,16,100,100,'8,1^21,1'), - (1,1,10,13,0,0,0,10,10,10,10,10,10,10,1,1,1,1,1,1,12,1,7,1,30,100,100,'13,1^14,1^21,1'), - (1,2,13,32,0,0,0,13,13,13,13,13,13,13,1,1,1,1,1,2,12,1,10,2,30,100,100,'13,1^14,1^21,1'), - (1,3,17,52,0,0,0,17,17,17,17,17,17,17,2,2,2,2,2,2,12,1,12,4,30,100,100,'13,1^14,1^21,1'), - (1,4,19,71,0,0,0,20,20,20,20,20,20,20,2,2,2,2,2,4,12,1,14,5,30,100,100,'13,1^14,1^21,1'), - (1,5,23,90,0,0,0,24,24,24,24,24,24,24,2,2,2,2,2,4,12,1,17,6,30,100,100,'13,1^14,1^21,1'), - (1,6,26,120,0,0,0,28,28,28,28,28,28,28,2,2,2,2,2,5,12,1,19,7,30,100,100,'13,1^14,1^21,1'), - (1,7,30,150,0,0,0,31,31,31,31,31,31,31,4,4,4,4,4,5,12,1,22,8,30,100,100,'13,1^14,1^21,1'), - (1,8,34,180,0,0,0,35,35,35,35,35,35,35,4,4,4,4,4,6,12,1,24,10,30,100,100,'13,1^14,1^21,1'), - (1,9,37,210,0,0,0,38,38,38,38,38,38,38,5,5,5,5,5,6,12,1,26,11,30,100,100,'13,1^14,1^21,1'), - (1,10,41,240,0,0,0,42,42,42,42,42,42,42,5,5,5,5,5,7,12,1,29,12,30,100,100,'13,1^14,1^21,1'), - (1,11,44,281,0,0,0,46,46,46,46,46,46,46,6,6,6,6,6,8,12,4,32,13,30,100,100,'13,1^14,1^21,1'), - (1,12,48,322,0,0,0,50,50,50,50,50,50,50,6,6,6,6,6,10,12,5,36,14,30,100,100,'13,1^14,1^21,1'), - (1,13,52,362,0,0,0,54,54,54,54,54,54,54,7,7,7,7,7,10,12,7,38,16,30,100,100,'13,1^14,1^21,1'), - (1,14,55,403,0,0,0,58,58,58,58,58,58,58,7,7,7,7,7,11,12,8,42,17,30,100,100,'13,1^14,1^21,1'), - (1,15,62,457,0,0,0,61,61,61,61,61,61,61,7,7,7,7,7,12,12,8,44,18,30,100,100,'13,1^14,1^21,1'), - (1,16,71,511,0,0,0,65,65,65,65,65,65,65,8,8,8,8,8,12,12,10,47,19,30,100,100,'13,1^14,1^21,1'), - (1,17,78,565,0,0,0,68,68,68,68,68,68,68,8,8,8,8,8,13,12,10,49,20,30,100,100,'13,1^14,1^21,1'), - (1,18,86,619,0,0,0,72,72,72,72,72,72,72,8,8,8,8,8,13,12,11,50,22,30,100,100,'13,1^14,1^21,1'), - (1,19,94,673,0,0,0,76,76,76,76,76,76,76,8,8,8,8,8,14,12,11,53,23,30,100,100,'13,1^14,1^21,1'), - (1,20,102,727,0,0,0,79,79,79,79,79,79,79,10,10,10,10,10,14,12,12,55,24,30,100,100,'13,1^14,1^21,1'), - (1,21,109,781,0,0,0,83,83,83,83,83,83,83,10,10,10,10,10,16,12,12,58,25,30,100,100,'13,1^14,1^21,1'), - (1,22,114,854,0,0,0,86,86,86,86,86,86,86,10,10,10,10,10,17,12,12,60,26,30,100,100,'13,1^14,1^21,1'), - (1,23,119,928,0,0,0,90,90,90,90,90,90,90,11,11,11,11,11,17,12,12,62,28,30,100,100,'13,1^14,1^21,1'), - (1,24,124,1001,0,0,0,94,94,94,94,94,94,94,11,11,11,11,11,18,12,13,66,29,30,100,100,'13,1^14,1^21,1'), - (1,25,128,1074,0,0,0,97,97,97,97,97,97,97,12,12,12,12,12,19,12,13,68,30,30,100,100,'13,1^14,1^21,1'), - (1,26,133,1147,0,0,0,102,102,102,102,102,102,102,12,12,12,12,12,19,12,13,71,31,30,100,100,'13,1^14,1^21,1'), - (1,27,138,1220,0,0,0,106,106,106,106,106,106,106,13,13,13,13,13,20,12,13,73,32,30,100,100,'13,1^14,1^21,1'), - (1,28,143,1294,0,0,0,109,109,109,109,109,109,109,13,13,13,13,13,22,12,14,77,34,30,100,100,'13,1^14,1^21,1'), - (1,29,148,1367,0,0,0,113,113,113,113,113,113,113,14,14,14,14,14,22,12,14,79,35,30,100,100,'13,1^14,1^21,1'), - (1,30,152,1440,0,0,0,116,116,116,116,116,116,116,14,14,14,14,14,23,12,14,82,36,30,100,100,'13,1^14,1^21,1'), - (1,31,162,1896,5,0,5,125,125,125,125,125,125,125,16,16,16,16,16,24,12,17,89,37,30,100,100,'13,1^14,1^21,1'), - (1,32,170,2352,10,0,10,132,132,132,132,132,132,132,17,17,17,17,17,26,12,19,95,38,30,100,100,'13,1^14,1^21,1'), - (1,33,180,2808,14,0,14,140,140,140,140,140,140,140,18,18,18,18,18,28,12,22,102,40,29,100,100,'13,1^14,1^21,1'), - (1,34,190,3264,19,0,19,148,148,148,148,148,148,148,19,19,19,19,19,30,12,24,108,41,28,100,100,'13,1^14,1^21,1'), - (1,35,199,3720,24,0,24,156,156,156,156,156,156,156,20,20,20,20,20,31,12,26,115,42,27,100,100,'13,1^14,1^21,1'), - (1,36,208,4176,29,0,29,164,164,164,164,164,164,164,20,20,20,20,20,32,12,29,122,43,25,100,100,'13,1^14,1^21,1'), - (1,37,217,4632,34,0,34,172,172,172,172,172,172,172,22,22,22,22,22,35,12,31,128,44,24,100,100,'13,1^14,1^21,1'), - (1,38,227,5088,38,0,38,180,180,180,180,180,180,180,23,23,23,23,23,36,12,34,136,46,23,100,100,'13,1^14,1^21,1'), - (1,39,235,5544,43,0,43,187,187,187,187,187,187,187,24,24,24,24,24,38,12,36,142,47,22,100,100,'13,1^14,1^21,1'), - (1,40,245,6000,48,0,48,196,196,196,196,196,196,196,25,25,25,25,25,40,12,38,149,48,21,100,100,'13,1^14,1^21,1'), - (1,41,250,6360,50,0,50,199,199,199,199,199,199,199,26,26,26,26,26,41,12,40,152,49,21,100,100,'13,1^14,1^21,1'), - (1,42,254,6720,53,0,53,203,203,203,203,203,203,203,26,26,26,26,26,42,12,41,156,50,21,100,100,'13,1^14,1^21,1'), - (1,43,260,7080,55,0,55,208,208,208,208,208,208,208,28,28,28,28,28,42,12,41,160,52,21,100,100,'13,1^14,1^21,1'), - (1,44,265,7440,58,0,58,211,211,211,211,211,211,211,28,28,28,28,28,43,12,42,163,53,21,100,100,'13,1^14,1^21,1'), - (1,45,270,7800,60,0,60,215,215,215,215,215,215,215,29,29,29,29,29,44,12,43,167,54,21,100,100,'13,1^14,1^21,1'), - (1,46,275,8640,60,0,60,218,218,218,218,218,218,218,29,29,29,29,29,46,12,53,182,55,21,100,100,'13,1^14,1^21,1'), - (1,47,280,9480,60,0,60,222,222,222,222,222,222,222,30,30,30,30,30,47,12,61,198,56,21,100,100,'13,1^14,1^21,1'), - (1,48,284,10320,60,0,60,226,226,226,226,226,226,226,30,30,30,30,30,47,12,71,214,58,21,100,100,'13,1^14,1^21,1'), - (1,49,289,11160,60,0,60,229,229,229,229,229,229,229,31,31,31,31,31,48,12,79,229,59,21,100,100,'13,1^14,1^21,1'), - (1,50,294,12000,60,0,60,233,233,233,233,233,233,233,31,31,31,31,31,49,12,89,245,60,21,100,100,'13,1^14,1^21,1'), - (1,51,299,14040,64,0,64,236,236,236,236,236,236,236,32,32,32,32,32,50,13,94,277,61,20,100,100,'13,1^14,1^21,1'), - (1,52,304,16080,67,0,67,240,240,240,240,240,240,240,32,32,32,32,32,52,14,97,310,62,20,100,100,'13,1^14,1^21,1'), - (1,53,308,18120,71,0,71,244,244,244,244,244,244,244,34,34,34,34,34,52,16,102,341,64,20,100,100,'13,1^14,1^21,1'), - (1,54,313,20160,74,0,74,247,247,247,247,247,247,247,34,34,34,34,34,53,17,107,373,65,20,100,100,'13,1^14,1^21,1'), - (1,55,319,22200,78,0,78,252,252,252,252,252,252,252,35,35,35,35,35,54,18,112,406,66,20,100,100,'13,1^14,1^21,1'), - (1,56,324,24240,82,0,82,256,256,256,256,256,256,256,35,35,35,35,35,55,19,115,438,67,20,100,100,'13,1^14,1^21,1'), - (1,57,329,26280,85,0,85,259,259,259,259,259,259,259,36,36,36,36,36,56,20,120,470,68,19,100,100,'13,1^14,1^21,1'), - (1,58,334,28320,89,0,89,263,263,263,263,263,263,263,36,36,36,36,36,56,22,125,502,70,19,100,100,'13,1^14,1^21,1'), - (1,59,338,30360,92,0,92,266,266,266,266,266,266,266,37,37,37,37,37,58,23,128,534,71,19,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,60,343,32400,96,30,96,270,270,270,270,270,270,270,37,37,37,37,37,59,24,133,566,72,19,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,61,348,34691,102,30,101,274,274,274,274,274,274,274,38,38,38,38,38,60,29,154,643,73,19,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,62,353,36982,109,30,104,277,277,277,277,277,277,277,38,38,38,38,38,61,34,174,719,74,18,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,63,359,39272,115,30,109,281,281,281,281,281,281,281,40,40,40,40,40,61,38,194,796,76,18,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,64,364,41563,122,30,114,284,284,284,284,284,284,284,40,40,40,40,40,62,43,215,872,77,18,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,65,368,43854,128,35,118,288,288,288,288,288,288,288,41,41,41,41,41,64,48,235,948,78,18,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,66,373,46146,136,35,122,293,293,293,293,293,293,293,41,41,41,41,41,65,53,256,1025,79,18,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,67,378,48437,142,35,126,296,296,296,296,296,296,296,42,42,42,42,42,66,58,276,1100,80,17,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,68,383,50728,149,35,131,300,300,300,300,300,300,300,42,42,42,42,42,67,62,296,1177,82,17,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,69,389,53018,155,35,136,304,304,304,304,304,304,304,43,43,43,43,43,67,67,317,1254,83,17,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,70,394,55309,162,40,139,307,307,307,307,307,307,307,43,43,43,43,43,68,72,337,1330,84,17,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,71,398,57600,168,40,144,311,311,311,311,311,311,311,44,44,44,44,44,70,77,358,1406,85,17,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,72,403,57600,172,40,154,314,314,314,314,314,314,314,46,46,46,46,46,71,82,366,1432,86,17,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,73,408,57600,174,40,162,318,318,318,318,318,318,318,47,47,47,47,47,72,86,374,1457,88,17,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,74,413,57600,178,40,172,322,322,322,322,322,322,322,47,47,47,47,47,73,91,382,1482,89,17,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,75,418,57600,180,40,180,325,325,325,325,325,325,325,48,48,48,48,48,74,96,390,1507,90,17,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,76,423,90000,192,45,192,329,329,329,329,329,329,329,49,49,49,49,49,76,101,480,1920,91,17,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,77,428,108000,204,45,204,332,332,332,332,332,332,332,50,50,50,50,50,77,106,600,2460,92,17,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,78,433,135600,216,45,216,336,336,336,336,336,336,336,52,52,52,52,52,78,110,713,2788,144,17,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,79,438,156000,228,45,228,340,340,340,340,340,340,340,53,53,53,53,53,79,115,780,3000,156,17,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,80,443,168000,240,45,240,343,343,343,343,343,343,343,54,54,54,54,54,80,120,864,3359,168,16,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,81,448,288000,360,45,360,347,347,347,347,347,347,347,55,55,55,55,55,82,125,960,4319,288,16,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,82,453,408000,480,45,480,350,350,350,350,350,350,350,56,56,56,56,56,83,130,1080,5519,408,16,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,83,458,528000,492,45,492,354,354,354,354,354,354,354,58,58,58,58,58,84,134,1530,5885,528,16,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,84,463,534000,504,45,504,358,358,358,358,358,358,358,59,59,59,59,59,85,139,1560,6120,534,16,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,85,468,540000,516,45,516,361,361,361,361,361,361,361,60,60,60,60,60,86,144,1631,6350,540,16,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,86,473,546000,528,45,528,365,365,365,365,365,365,365,61,61,61,61,61,88,149,1770,6694,546,16,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,87,478,552000,540,45,540,368,368,368,368,368,368,368,62,62,62,62,62,89,154,1812,7102,552,16,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,88,483,558000,552,45,552,372,372,372,372,372,372,372,64,64,64,64,64,90,158,1932,7440,558,16,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,89,488,564000,564,45,564,376,376,376,376,376,376,376,65,65,65,65,65,91,163,1980,7530,564,16,100,100,'1,1^8,1^13,1^14,1^21,1'), - (1,90,490,570000,576,45,576,379,379,379,379,379,379,379,66,66,66,66,66,92,168,2040,7620,570,16,100,100,'1,1^8,1^13,1^14,1^21,1'), - (2,1,12,17,0,0,0,12,12,12,12,12,12,12,2,2,2,2,2,2,15,2,9,2,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,2,17,41,0,0,0,17,17,17,17,17,17,17,4,4,4,4,4,4,15,2,12,3,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,3,21,65,0,0,0,21,21,21,21,21,21,21,6,6,6,6,6,6,15,2,15,5,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,4,24,89,0,0,0,26,26,26,26,26,26,26,8,8,8,8,8,8,15,2,18,6,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,5,29,113,0,0,0,30,30,30,30,30,30,30,10,10,10,10,10,10,15,2,21,8,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,6,33,150,0,0,0,35,35,35,35,35,35,35,12,12,12,12,12,12,15,2,24,9,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,7,38,188,0,0,0,39,39,39,39,39,39,39,14,14,14,14,14,14,15,2,27,11,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,8,42,225,0,0,0,44,44,44,44,44,44,44,16,16,16,16,16,16,15,2,30,12,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,9,47,263,0,0,0,48,48,48,48,48,48,48,18,18,18,18,18,18,15,2,33,14,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,10,51,300,0,0,0,53,53,53,53,53,53,53,20,20,20,20,20,20,15,2,36,15,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,11,56,351,0,0,0,57,57,57,57,57,57,57,22,22,22,22,22,22,15,5,41,17,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,12,60,402,0,0,0,63,63,63,63,63,63,63,24,24,24,24,24,24,15,6,45,18,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,13,65,453,0,0,0,68,68,68,68,68,68,68,26,26,26,26,26,26,15,9,48,20,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,14,69,504,0,0,0,72,72,72,72,72,72,72,28,28,28,28,28,28,15,11,53,21,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,15,78,572,0,0,0,77,77,77,77,77,77,77,30,30,30,30,30,30,15,11,56,23,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,16,89,639,0,0,0,81,81,81,81,81,81,81,32,32,32,32,32,32,15,12,59,24,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,17,98,707,0,0,0,86,86,86,86,86,86,86,34,34,34,34,34,34,15,12,62,26,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,18,108,774,0,0,0,90,90,90,90,90,90,90,36,36,36,36,36,36,15,14,63,27,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,19,117,842,0,0,0,95,95,95,95,95,95,95,38,38,38,38,38,38,15,14,66,29,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,20,128,909,0,0,0,99,99,99,99,99,99,99,40,40,40,40,40,40,15,15,69,30,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,21,137,977,0,0,0,104,104,104,104,104,104,104,42,42,42,42,42,42,15,15,72,32,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,22,143,1068,0,0,0,108,108,108,108,108,108,108,44,44,44,44,44,44,15,15,75,33,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,23,149,1160,0,0,0,113,113,113,113,113,113,113,46,46,46,46,46,46,15,15,78,35,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,24,155,1251,0,0,0,117,117,117,117,117,117,117,48,48,48,48,48,48,15,17,83,36,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,25,161,1343,0,0,0,122,122,122,122,122,122,122,50,50,50,50,50,50,15,17,86,38,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,26,167,1434,0,0,0,128,128,128,128,128,128,128,52,52,52,52,52,52,15,17,89,39,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,27,173,1526,0,0,0,132,132,132,132,132,132,132,54,54,54,54,54,54,15,17,92,41,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,28,179,1617,0,0,0,137,137,137,137,137,137,137,56,56,56,56,56,56,15,18,96,42,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,29,185,1709,0,0,0,141,141,141,141,141,141,141,58,58,58,58,58,58,15,18,99,44,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,30,191,1800,0,0,0,146,146,146,146,146,146,146,60,60,60,60,60,60,15,18,102,45,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,31,203,2370,6,0,6,156,156,156,156,156,156,156,62,62,62,62,62,62,15,21,111,47,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,32,213,2940,12,0,12,165,165,165,165,165,165,165,64,64,64,64,64,64,15,24,119,48,30,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,33,225,3510,18,0,18,176,176,176,176,176,176,176,66,66,66,66,66,66,15,27,128,50,29,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,34,237,4080,24,0,24,185,185,185,185,185,185,185,68,68,68,68,68,68,15,30,135,51,28,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,35,249,4650,30,0,30,195,195,195,195,195,195,195,70,70,70,70,70,70,15,33,144,53,27,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,36,260,5220,36,0,36,206,206,206,206,206,206,206,72,72,72,72,72,72,15,36,153,54,25,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,37,272,5790,42,0,42,215,215,215,215,215,215,215,74,74,74,74,74,74,15,39,161,56,24,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,38,284,6360,48,0,48,225,225,225,225,225,225,225,76,76,76,76,76,76,15,42,170,57,23,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,39,294,6930,54,0,54,234,234,234,234,234,234,234,78,78,78,78,78,78,15,45,177,59,22,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,40,306,7500,60,0,60,245,245,245,245,245,245,245,80,80,80,80,80,80,15,48,186,60,21,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,41,312,7950,63,0,63,249,249,249,249,249,249,249,82,82,82,82,82,82,15,50,191,62,21,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,42,318,8400,66,0,66,254,254,254,254,254,254,254,84,84,84,84,84,84,15,51,195,63,21,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,43,326,11000,69,0,69,260,260,260,260,260,260,260,86,86,86,86,86,86,15,51,200,65,21,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,44,332,25000,72,0,72,264,264,264,264,264,264,264,88,88,88,88,88,88,15,53,204,66,21,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,45,338,35000,75,0,75,269,269,269,269,269,269,269,90,90,90,90,90,90,15,54,209,68,21,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,46,344,45000,75,0,75,273,273,273,273,273,273,273,92,92,92,92,92,92,15,66,228,69,21,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,47,350,55000,75,0,75,278,278,278,278,278,278,278,94,94,94,94,94,94,15,77,248,71,21,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,48,356,70000,75,0,75,282,282,282,282,282,282,282,96,96,96,96,96,96,15,89,267,72,21,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,49,362,85000,75,0,75,287,287,287,287,287,287,287,98,98,98,98,98,98,15,99,287,74,21,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,50,368,100000,75,0,75,291,291,291,291,291,291,291,100,100,100,100,100,100,15,111,306,75,21,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,51,374,130000,80,0,80,296,296,296,296,296,296,296,102,102,102,102,102,102,17,117,347,77,20,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,52,380,140000,84,0,84,300,300,300,300,300,300,300,104,104,104,104,104,104,18,122,387,78,20,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,53,386,150000,89,0,89,305,305,305,305,305,305,305,106,106,106,106,106,106,20,128,426,80,19,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,54,392,160000,93,0,93,309,309,309,309,309,309,309,108,108,108,108,108,108,21,134,467,81,19,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,55,399,170000,98,0,98,315,315,315,315,315,315,315,110,110,110,110,110,110,23,140,507,83,18,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,56,405,180000,102,0,102,320,320,320,320,320,320,320,112,112,112,112,112,112,24,144,548,84,17,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,57,411,190000,107,0,107,324,324,324,324,324,324,324,114,114,114,114,114,114,26,150,588,86,17,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,58,417,200000,111,0,111,329,329,329,329,329,329,329,116,116,116,116,116,116,27,156,627,87,16,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,59,434,400750,130,0,125,253,253,253,253,253,253,253,118,118,118,118,118,118,19,170,700,141,16,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,60,476,450813,140,0,129,258,258,258,258,258,258,258,120,120,120,120,120,120,22,185,740,194,15,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,61,517,500875,145,0,130,263,263,263,263,263,263,263,122,122,122,122,122,122,26,195,780,246,15,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,62,559,550938,150,0,140,268,268,268,268,268,268,268,124,124,124,124,124,124,29,210,800,299,15,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,63,600,601000,155,0,160,273,273,273,273,273,273,273,126,126,126,126,126,126,32,220,825,351,15,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,64,563,734167,160,0,170,277,277,277,277,277,277,277,128,128,128,128,128,128,50,241,850,401,15,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,65,525,867333,165,0,180,281,281,281,281,281,281,281,130,130,130,130,130,130,67,262,875,450,14,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,66,488,1000500,170,0,190,285,285,285,285,285,285,285,132,132,132,132,132,132,85,283,904,500,14,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,67,498,1013841,175,10,200,292,292,292,292,292,292,292,134,134,134,134,134,134,81,312,1071,600,14,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,68,508,1027182,180,20,225,300,300,300,300,300,300,300,136,136,136,136,136,136,77,341,1238,700,14,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,69,519,1040522,185,30,239,307,307,307,307,307,307,307,138,138,138,138,138,138,72,369,1404,800,14,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,70,529,1053863,190,40,245,315,315,315,315,315,315,315,140,140,140,140,140,140,68,398,1571,900,14,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,71,539,1067204,200,50,255,322,322,322,322,322,322,322,142,142,142,142,142,142,64,427,1738,1000,14,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,72,547,1262903,220,56,265,327,327,327,327,327,327,327,144,144,144,144,144,144,68,520,1979,1125,14,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,73,556,1458602,253,63,285,332,332,332,332,332,332,332,146,146,146,146,146,146,72,614,2219,1250,13,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,74,564,1654301,306,69,300,337,337,337,337,337,337,337,148,148,148,148,148,148,76,707,2460,1375,13,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,75,572,1850000,330,75,310,342,342,342,342,342,342,342,150,150,150,150,150,150,80,725,2700,1500,13,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,76,579,1900000,348,77,320,346,346,346,346,346,346,346,152,152,152,152,152,152,84,750,2960,1600,13,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,77,586,1950000,355,79,330,350,350,350,350,350,350,350,154,154,154,154,154,154,88,775,3000,1700,13,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,78,594,2000000,365,81,340,354,354,354,354,354,354,354,156,156,156,156,156,156,92,800,3100,1800,13,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,79,601,2050000,375,83,350,358,358,358,358,358,358,358,158,158,158,158,158,158,96,825,3200,1900,13,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,80,608,2100000,380,85,360,362,362,362,362,362,362,362,160,160,160,160,160,160,100,850,3300,2000,13,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,81,615,2480000,385,83,370,366,366,366,366,366,366,366,162,162,162,162,162,162,104,875,3350,3000,13,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,82,622,2860000,390,81,380,370,370,370,370,370,370,370,164,164,164,164,164,164,108,900,3400,4000,13,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,83,629,3240000,395,79,390,375,375,375,375,375,375,375,166,166,166,166,166,166,112,925,3450,5000,13,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,84,636,3620000,400,77,400,379,379,379,379,379,379,379,168,168,168,168,168,168,116,940,3500,6000,13,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,85,643,4000000,405,75,410,383,383,383,383,383,383,383,170,170,170,170,170,170,120,960,3550,7000,12,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,86,650,4800000,410,77,420,387,387,387,387,387,387,387,172,172,172,172,172,172,124,980,3600,8000,12,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,87,657,5600000,415,79,430,391,391,391,391,391,391,391,174,174,174,174,174,174,128,1000,3650,9000,12,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,88,665,6400000,420,81,440,395,395,395,395,395,395,395,176,176,176,176,176,176,132,1010,3700,10000,12,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,89,672,7200000,420,83,445,399,399,399,399,399,399,399,178,178,178,178,178,178,136,1018,3800,11000,12,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2,90,679,8000000,420,85,450,403,403,403,403,403,403,403,180,180,180,180,180,180,140,1050,3900,12000,12,100,100,'1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'); diff --git a/utils/sql/git/required/2019_01_04_update_global_base_scaling.sql b/utils/sql/git/required/2019_01_04_update_global_base_scaling.sql deleted file mode 100644 index 1aeb321d1..000000000 --- a/utils/sql/git/required/2019_01_04_update_global_base_scaling.sql +++ /dev/null @@ -1,272 +0,0 @@ -REPLACE INTO `npc_scale_global_base` (`type`, `level`, `ac`, `hp`, `accuracy`, `slow_mitigation`, `attack`, `strength`, `stamina`, `dexterity`, `agility`, `intelligence`, `wisdom`, `charisma`, `magic_resist`, `cold_resist`, `fire_resist`, `poison_resist`, `disease_resist`, `corruption_resist`, `physical_resist`, `min_dmg`, `max_dmg`, `hp_regen_rate`, `attack_delay`, `spell_scale`, `heal_scale`, `special_abilities`) -VALUES - (0, 1, 8, 11, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 10, 1, 6, 1, 30, 100, 100, ''), - (0, 2, 11, 27, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 1, 1, 1, 1, 1, 2, 10, 1, 8, 1, 30, 100, 100, ''), - (0, 3, 14, 43, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 2, 2, 2, 2, 2, 2, 10, 1, 10, 1, 30, 100, 100, ''), - (0, 4, 16, 59, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 2, 2, 2, 2, 2, 3, 10, 1, 12, 1, 30, 100, 100, ''), - (0, 5, 19, 75, 0, 0, 0, 20, 20, 20, 20, 20, 20, 20, 2, 2, 2, 2, 2, 3, 10, 1, 14, 1, 30, 100, 100, ''), - (0, 6, 22, 100, 0, 0, 0, 23, 23, 23, 23, 23, 23, 23, 2, 2, 2, 2, 2, 4, 10, 1, 16, 1, 30, 100, 100, ''), - (0, 7, 25, 125, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 3, 3, 3, 3, 3, 4, 10, 1, 18, 2, 30, 100, 100, ''), - (0, 8, 28, 150, 0, 0, 0, 29, 29, 29, 29, 29, 29, 29, 3, 3, 3, 3, 3, 5, 10, 1, 20, 2, 30, 100, 100, ''), - (0, 9, 31, 175, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 4, 4, 4, 4, 4, 5, 10, 1, 22, 2, 30, 100, 100, ''), - (0, 10, 34, 200, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 4, 4, 4, 4, 4, 6, 10, 1, 24, 2, 30, 100, 100, ''), - (0, 11, 37, 234, 0, 0, 0, 38, 38, 38, 38, 38, 38, 38, 5, 5, 5, 5, 5, 7, 10, 3, 27, 2, 30, 100, 100, ''), - (0, 12, 40, 268, 0, 0, 0, 42, 42, 42, 42, 42, 42, 42, 5, 5, 5, 5, 5, 8, 10, 4, 30, 3, 30, 100, 100, ''), - (0, 13, 43, 302, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 6, 6, 6, 6, 6, 8, 10, 6, 32, 3, 30, 100, 100, ''), - (0, 14, 46, 336, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 6, 6, 6, 6, 6, 9, 10, 7, 35, 3, 30, 100, 100, ''), - (0, 15, 52, 381, 0, 0, 0, 51, 51, 51, 51, 51, 51, 51, 6, 6, 6, 6, 6, 10, 10, 7, 37, 4, 30, 100, 100, ''), - (0, 16, 59, 426, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 7, 7, 7, 7, 7, 10, 10, 8, 39, 4, 30, 100, 100, ''), - (0, 17, 65, 471, 0, 0, 0, 57, 57, 57, 57, 57, 57, 57, 7, 7, 7, 7, 7, 11, 10, 8, 41, 5, 30, 100, 100, ''), - (0, 18, 72, 516, 0, 0, 0, 60, 60, 60, 60, 60, 60, 60, 7, 7, 7, 7, 7, 11, 10, 9, 42, 5, 30, 100, 100, ''), - (0, 19, 78, 561, 0, 0, 0, 63, 63, 63, 63, 63, 63, 63, 7, 7, 7, 7, 7, 12, 10, 9, 44, 6, 30, 100, 100, ''), - (0, 20, 85, 606, 0, 0, 0, 66, 66, 66, 66, 66, 66, 66, 8, 8, 8, 8, 8, 12, 10, 10, 46, 6, 30, 100, 100, ''), - (0, 21, 91, 651, 0, 0, 0, 69, 69, 69, 69, 69, 69, 69, 8, 8, 8, 8, 8, 13, 10, 10, 48, 7, 30, 100, 100, ''), - (0, 22, 95, 712, 0, 0, 0, 72, 72, 72, 72, 72, 72, 72, 8, 8, 8, 8, 8, 14, 10, 10, 50, 7, 30, 100, 100, ''), - (0, 23, 99, 800, 0, 0, 0, 75, 75, 75, 75, 75, 75, 75, 9, 9, 9, 9, 9, 14, 10, 10, 52, 8, 30, 100, 100, ''), - (0, 24, 103, 845, 0, 0, 0, 78, 78, 78, 78, 78, 78, 78, 9, 9, 9, 9, 9, 15, 10, 11, 55, 8, 30, 100, 100, ''), - (0, 25, 107, 895, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 10, 10, 10, 10, 10, 16, 10, 11, 57, 9, 30, 100, 100, ''), - (0, 26, 111, 956, 0, 0, 0, 85, 85, 85, 85, 85, 85, 85, 10, 10, 10, 10, 10, 16, 10, 11, 59, 10, 30, 100, 100, ''), - (0, 27, 115, 1100, 0, 0, 0, 88, 88, 88, 88, 88, 88, 88, 11, 11, 11, 11, 11, 17, 10, 11, 61, 10, 30, 100, 100, ''), - (0, 28, 119, 1140, 0, 0, 0, 91, 91, 91, 91, 91, 91, 91, 11, 11, 11, 11, 11, 18, 10, 12, 64, 11, 30, 100, 100, ''), - (0, 29, 123, 1240, 0, 0, 0, 94, 94, 94, 94, 94, 94, 94, 12, 12, 12, 12, 12, 18, 10, 12, 66, 12, 30, 100, 100, ''), - (0, 30, 127, 1350, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 12, 12, 12, 12, 12, 19, 10, 12, 68, 13, 30, 100, 100, ''), - (0, 31, 135, 1450, 4, 0, 4, 104, 104, 104, 104, 104, 104, 104, 13, 13, 13, 13, 13, 20, 10, 14, 74, 14, 30, 100, 100, ''), - (0, 32, 142, 1550, 8, 0, 8, 110, 110, 110, 110, 110, 110, 110, 14, 14, 14, 14, 14, 22, 10, 16, 79, 15, 30, 100, 100, ''), - (0, 33, 150, 1650, 12, 0, 12, 117, 117, 117, 117, 117, 117, 117, 15, 15, 15, 15, 15, 23, 10, 18, 85, 16, 29, 100, 100, ''), - (0, 34, 158, 1750, 16, 0, 16, 123, 123, 123, 123, 123, 123, 123, 16, 16, 16, 16, 16, 25, 10, 20, 90, 17, 28, 100, 100, ''), - (0, 35, 166, 1850, 20, 0, 20, 130, 130, 130, 130, 130, 130, 130, 17, 17, 17, 17, 17, 26, 10, 22, 96, 18, 27, 100, 100, ''), - (0, 36, 173, 1950, 24, 0, 24, 137, 137, 137, 137, 137, 137, 137, 17, 17, 17, 17, 17, 27, 10, 24, 102, 19, 25, 100, 100, ''), - (0, 37, 181, 2100, 28, 0, 28, 143, 143, 143, 143, 143, 143, 143, 18, 18, 18, 18, 18, 29, 10, 26, 107, 21, 24, 100, 100, ''), - (0, 38, 189, 2350, 32, 0, 32, 150, 150, 150, 150, 150, 150, 150, 19, 19, 19, 19, 19, 30, 10, 28, 113, 23, 23, 100, 100, ''), - (0, 39, 196, 2650, 36, 0, 36, 156, 156, 156, 156, 156, 156, 156, 20, 20, 20, 20, 20, 32, 10, 30, 118, 26, 22, 100, 100, ''), - (0, 40, 204, 2900, 40, 0, 40, 163, 163, 163, 163, 163, 163, 163, 21, 21, 21, 21, 21, 33, 10, 32, 124, 29, 21, 100, 100, ''), - (0, 41, 208, 3250, 42, 0, 42, 166, 166, 166, 166, 166, 166, 166, 22, 22, 22, 22, 22, 34, 10, 33, 127, 32, 21, 100, 100, ''), - (0, 42, 212, 3750, 44, 0, 44, 169, 169, 169, 169, 169, 169, 169, 22, 22, 22, 22, 22, 35, 10, 34, 130, 37, 21, 100, 100, ''), - (0, 43, 217, 4250, 46, 0, 46, 173, 173, 173, 173, 173, 173, 173, 23, 23, 23, 23, 23, 35, 10, 34, 133, 42, 21, 100, 100, ''), - (0, 44, 221, 5000, 48, 0, 48, 176, 176, 176, 176, 176, 176, 176, 23, 23, 23, 23, 23, 36, 10, 35, 136, 50, 21, 100, 100, ''), - (0, 45, 225, 5600, 50, 0, 50, 179, 179, 179, 179, 179, 179, 179, 24, 24, 24, 24, 24, 37, 10, 36, 139, 56, 21, 100, 100, ''), - (0, 46, 229, 6000, 50, 0, 50, 182, 182, 182, 182, 182, 182, 182, 24, 24, 24, 24, 24, 38, 10, 44, 152, 60, 21, 100, 100, ''), - (0, 47, 233, 6500, 50, 0, 50, 185, 185, 185, 185, 185, 185, 185, 25, 25, 25, 25, 25, 39, 10, 51, 165, 65, 21, 100, 100, ''), - (0, 48, 237, 7500, 50, 0, 50, 188, 188, 188, 188, 188, 188, 188, 25, 25, 25, 25, 25, 39, 10, 59, 178, 75, 21, 100, 100, ''), - (0, 49, 241, 8500, 50, 0, 50, 191, 191, 191, 191, 191, 191, 191, 26, 26, 26, 26, 26, 40, 10, 66, 191, 85, 21, 100, 100, ''), - (0, 50, 245, 10000, 50, 0, 50, 194, 194, 194, 194, 194, 194, 194, 26, 26, 26, 26, 26, 41, 10, 74, 204, 100, 21, 100, 100, ''), - (0, 51, 249, 11700, 53, 0, 53, 197, 197, 197, 197, 197, 197, 197, 27, 27, 27, 27, 27, 42, 11, 78, 231, 117, 20, 100, 100, ''), - (0, 52, 253, 13400, 56, 0, 56, 200, 200, 200, 200, 200, 200, 200, 27, 27, 27, 27, 27, 43, 12, 81, 258, 134, 20, 100, 100, ''), - (0, 53, 257, 15100, 59, 0, 59, 203, 203, 203, 203, 203, 203, 203, 28, 28, 28, 28, 28, 43, 13, 85, 284, 151, 20, 100, 100, ''), - (0, 54, 261, 16800, 62, 10, 62, 206, 206, 206, 206, 206, 206, 206, 28, 28, 28, 28, 28, 44, 14, 89, 311, 168, 20, 100, 100, ''), - (0, 55, 266, 18500, 65, 10, 65, 210, 210, 210, 210, 210, 210, 210, 29, 29, 29, 29, 29, 45, 15, 93, 338, 185, 20, 100, 100, ''), - (0, 56, 270, 20200, 68, 10, 68, 213, 213, 213, 213, 213, 213, 213, 29, 29, 29, 29, 29, 46, 16, 96, 365, 202, 20, 100, 100, ''), - (0, 57, 274, 21900, 71, 10, 71, 216, 216, 216, 216, 216, 216, 216, 30, 30, 30, 30, 30, 47, 17, 100, 392, 219, 19, 100, 100, ''), - (0, 58, 278, 23600, 74, 10, 74, 219, 219, 219, 219, 219, 219, 219, 30, 30, 30, 30, 30, 47, 18, 104, 418, 236, 19, 100, 100, '8,1'), - (0, 59, 282, 25300, 77, 10, 77, 222, 222, 222, 222, 222, 222, 222, 31, 31, 31, 31, 31, 48, 19, 107, 445, 253, 19, 100, 100, '8,1'), - (0, 60, 286, 27000, 80, 20, 80, 225, 225, 225, 225, 225, 225, 225, 31, 31, 31, 31, 31, 49, 20, 111, 472, 270, 19, 100, 100, '8,1^21,1'), - (0, 61, 290, 28909, 85, 20, 84, 228, 228, 228, 228, 228, 228, 228, 32, 32, 32, 32, 32, 50, 24, 128, 536, 289, 19, 100, 100, '8,1^21,1'), - (0, 62, 294, 30818, 91, 20, 87, 231, 231, 231, 231, 231, 231, 231, 32, 32, 32, 32, 32, 51, 28, 145, 599, 308, 18, 100, 100, '8,1^21,1'), - (0, 63, 299, 32727, 96, 20, 91, 234, 234, 234, 234, 234, 234, 234, 33, 33, 33, 33, 33, 51, 32, 162, 663, 327, 18, 100, 100, '8,1^21,1'), - (0, 64, 303, 34636, 102, 20, 95, 237, 237, 237, 237, 237, 237, 237, 33, 33, 33, 33, 33, 52, 36, 179, 727, 346, 18, 100, 100, '8,1^21,1'), - (0, 65, 307, 36545, 107, 25, 98, 240, 240, 240, 240, 240, 240, 240, 34, 34, 34, 34, 34, 53, 40, 196, 790, 365, 18, 100, 100, '8,1^21,1'), - (0, 66, 311, 38455, 113, 25, 102, 244, 244, 244, 244, 244, 244, 244, 34, 34, 34, 34, 34, 54, 44, 213, 854, 384, 18, 100, 100, '8,1^21,1'), - (0, 67, 315, 40364, 118, 25, 105, 247, 247, 247, 247, 247, 247, 247, 35, 35, 35, 35, 35, 55, 48, 230, 917, 403, 17, 100, 100, '8,1^21,1'), - (0, 68, 319, 42273, 124, 25, 109, 250, 250, 250, 250, 250, 250, 250, 35, 35, 35, 35, 35, 56, 52, 247, 981, 422, 17, 100, 100, '8,1^21,1'), - (0, 69, 324, 44182, 129, 25, 113, 253, 253, 253, 253, 253, 253, 253, 36, 36, 36, 36, 36, 56, 56, 264, 1045, 441, 17, 100, 100, '8,1^21,1'), - (0, 70, 328, 46091, 135, 30, 116, 256, 256, 256, 256, 256, 256, 256, 36, 36, 36, 36, 36, 57, 60, 281, 1108, 460, 17, 100, 100, '8,1^21,1'), - (0, 71, 332, 48000, 140, 30, 120, 259, 259, 259, 259, 259, 259, 259, 37, 37, 37, 37, 37, 58, 64, 298, 1172, 480, 17, 100, 100, '8,1^21,1'), - (0, 72, 336, 49909, 143, 30, 128, 262, 262, 262, 262, 262, 262, 262, 38, 38, 38, 38, 38, 59, 68, 305, 1193, 499, 17, 100, 100, '8,1^21,1'), - (0, 73, 340, 51818, 145, 30, 135, 265, 265, 265, 265, 265, 265, 265, 39, 39, 39, 39, 39, 60, 72, 312, 1214, 518, 17, 100, 100, '8,1^21,1'), - (0, 74, 344, 53727, 148, 30, 143, 268, 268, 268, 268, 268, 268, 268, 39, 39, 39, 39, 39, 61, 76, 318, 1235, 537, 17, 100, 100, '8,1^21,1'), - (0, 75, 348, 55636, 150, 30, 150, 271, 271, 271, 271, 271, 271, 271, 40, 40, 40, 40, 40, 62, 80, 325, 1256, 556, 17, 100, 100, '8,1^21,1'), - (0, 76, 352, 75000, 160, 30, 160, 274, 274, 274, 274, 274, 274, 274, 41, 41, 41, 41, 41, 63, 84, 400, 1600, 750, 17, 100, 100, '8,1^21,1'), - (0, 77, 356, 90000, 170, 30, 170, 277, 277, 277, 277, 277, 277, 277, 42, 42, 42, 42, 42, 64, 88, 500, 2050, 900, 17, 100, 100, '8,1^21,1'), - (0, 78, 360, 113000, 180, 30, 180, 280, 280, 280, 280, 280, 280, 280, 43, 43, 43, 43, 43, 65, 92, 594, 2323, 1130, 17, 100, 100, '8,1^21,1'), - (0, 79, 364, 130000, 190, 30, 190, 283, 283, 283, 283, 283, 283, 283, 44, 44, 44, 44, 44, 66, 96, 650, 2500, 1300, 17, 100, 100, '8,1^21,1'), - (0, 80, 368, 140000, 200, 30, 200, 286, 286, 286, 286, 286, 286, 286, 45, 45, 45, 45, 45, 67, 100, 720, 2799, 1140, 16, 100, 100, '8,1^21,1'), - (0, 81, 372, 240000, 300, 30, 300, 289, 289, 289, 289, 289, 289, 289, 46, 46, 46, 46, 46, 68, 104, 800, 3599, 2400, 16, 100, 100, '8,1^21,1'), - (0, 82, 376, 340000, 400, 30, 400, 292, 292, 292, 292, 292, 292, 292, 47, 47, 47, 47, 47, 69, 108, 900, 4599, 3400, 16, 100, 100, '8,1^21,1'), - (0, 83, 380, 440000, 410, 30, 410, 295, 295, 295, 295, 295, 295, 295, 48, 48, 48, 48, 48, 70, 112, 1275, 4904, 4400, 16, 100, 100, '8,1^21,1'), - (0, 84, 384, 445000, 420, 30, 420, 298, 298, 298, 298, 298, 298, 298, 49, 49, 49, 49, 49, 71, 116, 1300, 5100, 4450, 16, 100, 100, '8,1^21,1'), - (0, 85, 388, 450000, 430, 30, 430, 301, 301, 301, 301, 301, 301, 301, 50, 50, 50, 50, 50, 72, 120, 1359, 5292, 4500, 16, 100, 100, '8,1^21,1'), - (0, 86, 392, 455000, 440, 30, 440, 304, 304, 304, 304, 304, 304, 304, 51, 51, 51, 51, 51, 73, 124, 1475, 5578, 4550, 16, 100, 100, '8,1^21,1'), - (0, 87, 396, 460000, 450, 30, 450, 307, 307, 307, 307, 307, 307, 307, 52, 52, 52, 52, 52, 74, 128, 1510, 5918, 4600, 16, 100, 100, '8,1^21,1'), - (0, 88, 400, 465000, 460, 30, 460, 310, 310, 310, 310, 310, 310, 310, 53, 53, 53, 53, 53, 75, 132, 1610, 6200, 4650, 16, 100, 100, '8,1^21,1'), - (0, 89, 404, 470000, 470, 30, 470, 313, 313, 313, 313, 313, 313, 313, 54, 54, 54, 54, 54, 76, 136, 1650, 6275, 4700, 16, 100, 100, '8,1^21,1'), - (0, 90, 408, 475000, 480, 30, 480, 316, 316, 316, 316, 316, 316, 316, 55, 55, 55, 55, 55, 77, 140, 1700, 6350, 4750, 16, 100, 100, '8,1^21,1'), - (1, 1, 10, 13, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 1, 1, 1, 1, 1, 1, 12, 1, 7, 0, 30, 100, 100, '13,1^14,1^21,1'), - (1, 2, 13, 32, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 1, 1, 1, 1, 1, 2, 12, 1, 10, 0, 30, 100, 100, '13,1^14,1^21,1'), - (1, 3, 17, 52, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 2, 2, 2, 2, 2, 2, 12, 1, 12, 1, 30, 100, 100, '13,1^14,1^21,1'), - (1, 4, 19, 71, 0, 0, 0, 20, 20, 20, 20, 20, 20, 20, 2, 2, 2, 2, 2, 4, 12, 1, 14, 1, 30, 100, 100, '13,1^14,1^21,1'), - (1, 5, 23, 90, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 2, 2, 2, 2, 2, 4, 12, 1, 17, 1, 30, 100, 100, '13,1^14,1^21,1'), - (1, 6, 26, 120, 0, 0, 0, 28, 28, 28, 28, 28, 28, 28, 2, 2, 2, 2, 2, 5, 12, 1, 19, 1, 30, 100, 100, '13,1^14,1^21,1'), - (1, 7, 30, 150, 0, 0, 0, 31, 31, 31, 31, 31, 31, 31, 4, 4, 4, 4, 4, 5, 12, 1, 22, 2, 30, 100, 100, '13,1^14,1^21,1'), - (1, 8, 34, 180, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 4, 4, 4, 4, 4, 6, 12, 1, 24, 2, 30, 100, 100, '13,1^14,1^21,1'), - (1, 9, 37, 210, 0, 0, 0, 38, 38, 38, 38, 38, 38, 38, 5, 5, 5, 5, 5, 6, 12, 1, 26, 2, 30, 100, 100, '13,1^14,1^21,1'), - (1, 10, 41, 240, 0, 0, 0, 42, 42, 42, 42, 42, 42, 42, 5, 5, 5, 5, 5, 7, 12, 1, 29, 2, 30, 100, 100, '13,1^14,1^21,1'), - (1, 11, 44, 281, 0, 0, 0, 46, 46, 46, 46, 46, 46, 46, 6, 6, 6, 6, 6, 8, 12, 4, 32, 3, 30, 100, 100, '13,1^14,1^21,1'), - (1, 12, 48, 322, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 6, 6, 6, 6, 6, 10, 12, 5, 36, 3, 30, 100, 100, '13,1^14,1^21,1'), - (1, 13, 52, 362, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 7, 7, 7, 7, 7, 10, 12, 7, 38, 4, 30, 100, 100, '13,1^14,1^21,1'), - (1, 14, 55, 403, 0, 0, 0, 58, 58, 58, 58, 58, 58, 58, 7, 7, 7, 7, 7, 11, 12, 8, 42, 4, 30, 100, 100, '13,1^14,1^21,1'), - (1, 15, 62, 457, 0, 0, 0, 61, 61, 61, 61, 61, 61, 61, 7, 7, 7, 7, 7, 12, 12, 8, 44, 5, 30, 100, 100, '13,1^14,1^21,1'), - (1, 16, 71, 511, 0, 0, 0, 65, 65, 65, 65, 65, 65, 65, 8, 8, 8, 8, 8, 12, 12, 10, 47, 5, 30, 100, 100, '13,1^14,1^21,1'), - (1, 17, 78, 565, 0, 0, 0, 68, 68, 68, 68, 68, 68, 68, 8, 8, 8, 8, 8, 13, 12, 10, 49, 6, 30, 100, 100, '13,1^14,1^21,1'), - (1, 18, 86, 619, 0, 0, 0, 72, 72, 72, 72, 72, 72, 72, 8, 8, 8, 8, 8, 13, 12, 11, 50, 6, 30, 100, 100, '13,1^14,1^21,1'), - (1, 19, 94, 673, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 8, 8, 8, 8, 8, 14, 12, 11, 53, 7, 30, 100, 100, '13,1^14,1^21,1'), - (1, 20, 102, 727, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 10, 10, 10, 10, 10, 14, 12, 12, 55, 7, 30, 100, 100, '13,1^14,1^21,1'), - (1, 21, 109, 781, 0, 0, 0, 83, 83, 83, 83, 83, 83, 83, 10, 10, 10, 10, 10, 16, 12, 12, 58, 8, 30, 100, 100, '13,1^14,1^21,1'), - (1, 22, 114, 854, 0, 0, 0, 86, 86, 86, 86, 86, 86, 86, 10, 10, 10, 10, 10, 17, 12, 12, 60, 9, 30, 100, 100, '13,1^14,1^21,1'), - (1, 23, 119, 928, 0, 0, 0, 90, 90, 90, 90, 90, 90, 90, 11, 11, 11, 11, 11, 17, 12, 12, 62, 9, 30, 100, 100, '13,1^14,1^21,1'), - (1, 24, 124, 1001, 0, 0, 0, 94, 94, 94, 94, 94, 94, 94, 11, 11, 11, 11, 11, 18, 12, 13, 66, 10, 30, 100, 100, '13,1^14,1^21,1'), - (1, 25, 128, 1074, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 12, 12, 12, 12, 12, 19, 12, 13, 68, 11, 30, 100, 100, '13,1^14,1^21,1'), - (1, 26, 133, 1147, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 12, 12, 12, 12, 12, 19, 12, 13, 71, 11, 30, 100, 100, '13,1^14,1^21,1'), - (1, 27, 138, 1220, 0, 0, 0, 106, 106, 106, 106, 106, 106, 106, 13, 13, 13, 13, 13, 20, 12, 13, 73, 12, 30, 100, 100, '13,1^14,1^21,1'), - (1, 28, 143, 1294, 0, 0, 0, 109, 109, 109, 109, 109, 109, 109, 13, 13, 13, 13, 13, 22, 12, 14, 77, 13, 30, 100, 100, '13,1^14,1^21,1'), - (1, 29, 148, 1367, 0, 0, 0, 113, 113, 113, 113, 113, 113, 113, 14, 14, 14, 14, 14, 22, 12, 14, 79, 14, 30, 100, 100, '13,1^14,1^21,1'), - (1, 30, 152, 1440, 0, 0, 0, 116, 116, 116, 116, 116, 116, 116, 14, 14, 14, 14, 14, 23, 12, 14, 82, 14, 30, 100, 100, '13,1^14,1^21,1'), - (1, 31, 162, 1896, 5, 0, 5, 125, 125, 125, 125, 125, 125, 125, 16, 16, 16, 16, 16, 24, 12, 17, 89, 19, 30, 100, 100, '13,1^14,1^21,1'), - (1, 32, 170, 2352, 10, 0, 10, 132, 132, 132, 132, 132, 132, 132, 17, 17, 17, 17, 17, 26, 12, 19, 95, 24, 30, 100, 100, '13,1^14,1^21,1'), - (1, 33, 180, 2808, 14, 0, 14, 140, 140, 140, 140, 140, 140, 140, 18, 18, 18, 18, 18, 28, 12, 22, 102, 28, 29, 100, 100, '13,1^14,1^21,1'), - (1, 34, 190, 3264, 19, 0, 19, 148, 148, 148, 148, 148, 148, 148, 19, 19, 19, 19, 19, 30, 12, 24, 108, 33, 28, 100, 100, '13,1^14,1^21,1'), - (1, 35, 199, 3720, 24, 0, 24, 156, 156, 156, 156, 156, 156, 156, 20, 20, 20, 20, 20, 31, 12, 26, 115, 37, 27, 100, 100, '13,1^14,1^21,1'), - (1, 36, 208, 4176, 29, 0, 29, 164, 164, 164, 164, 164, 164, 164, 20, 20, 20, 20, 20, 32, 12, 29, 122, 42, 25, 100, 100, '13,1^14,1^21,1'), - (1, 37, 217, 4632, 34, 0, 34, 172, 172, 172, 172, 172, 172, 172, 22, 22, 22, 22, 22, 35, 12, 31, 128, 46, 24, 100, 100, '13,1^14,1^21,1'), - (1, 38, 227, 5088, 38, 0, 38, 180, 180, 180, 180, 180, 180, 180, 23, 23, 23, 23, 23, 36, 12, 34, 136, 51, 23, 100, 100, '13,1^14,1^21,1'), - (1, 39, 235, 5544, 43, 0, 43, 187, 187, 187, 187, 187, 187, 187, 24, 24, 24, 24, 24, 38, 12, 36, 142, 55, 22, 100, 100, '13,1^14,1^21,1'), - (1, 40, 245, 6000, 48, 0, 48, 196, 196, 196, 196, 196, 196, 196, 25, 25, 25, 25, 25, 40, 12, 38, 149, 60, 21, 100, 100, '13,1^14,1^21,1'), - (1, 41, 250, 6360, 50, 0, 50, 199, 199, 199, 199, 199, 199, 199, 26, 26, 26, 26, 26, 41, 12, 40, 152, 64, 21, 100, 100, '13,1^14,1^21,1'), - (1, 42, 254, 6720, 53, 0, 53, 203, 203, 203, 203, 203, 203, 203, 26, 26, 26, 26, 26, 42, 12, 41, 156, 67, 21, 100, 100, '13,1^14,1^21,1'), - (1, 43, 260, 7080, 55, 0, 55, 208, 208, 208, 208, 208, 208, 208, 28, 28, 28, 28, 28, 42, 12, 41, 160, 71, 21, 100, 100, '13,1^14,1^21,1'), - (1, 44, 265, 7440, 58, 0, 58, 211, 211, 211, 211, 211, 211, 211, 28, 28, 28, 28, 28, 43, 12, 42, 163, 74, 21, 100, 100, '13,1^14,1^21,1'), - (1, 45, 270, 7800, 60, 0, 60, 215, 215, 215, 215, 215, 215, 215, 29, 29, 29, 29, 29, 44, 12, 43, 167, 78, 21, 100, 100, '13,1^14,1^21,1'), - (1, 46, 275, 8640, 60, 0, 60, 218, 218, 218, 218, 218, 218, 218, 29, 29, 29, 29, 29, 46, 12, 53, 182, 86, 21, 100, 100, '13,1^14,1^21,1'), - (1, 47, 280, 9480, 60, 0, 60, 222, 222, 222, 222, 222, 222, 222, 30, 30, 30, 30, 30, 47, 12, 61, 198, 95, 21, 100, 100, '13,1^14,1^21,1'), - (1, 48, 284, 10320, 60, 0, 60, 226, 226, 226, 226, 226, 226, 226, 30, 30, 30, 30, 30, 47, 12, 71, 214, 103, 21, 100, 100, '13,1^14,1^21,1'), - (1, 49, 289, 11160, 60, 0, 60, 229, 229, 229, 229, 229, 229, 229, 31, 31, 31, 31, 31, 48, 12, 79, 229, 112, 21, 100, 100, '13,1^14,1^21,1'), - (1, 50, 294, 12000, 60, 0, 60, 233, 233, 233, 233, 233, 233, 233, 31, 31, 31, 31, 31, 49, 12, 89, 245, 120, 21, 100, 100, '13,1^14,1^21,1'), - (1, 51, 299, 14040, 64, 0, 64, 236, 236, 236, 236, 236, 236, 236, 32, 32, 32, 32, 32, 50, 13, 94, 277, 140, 20, 100, 100, '13,1^14,1^21,1'), - (1, 52, 304, 16080, 67, 0, 67, 240, 240, 240, 240, 240, 240, 240, 32, 32, 32, 32, 32, 52, 14, 97, 310, 161, 20, 100, 100, '13,1^14,1^21,1'), - (1, 53, 308, 18120, 71, 0, 71, 244, 244, 244, 244, 244, 244, 244, 34, 34, 34, 34, 34, 52, 16, 102, 341, 181, 20, 100, 100, '13,1^14,1^21,1'), - (1, 54, 313, 20160, 74, 0, 74, 247, 247, 247, 247, 247, 247, 247, 34, 34, 34, 34, 34, 53, 17, 107, 373, 202, 20, 100, 100, '13,1^14,1^21,1'), - (1, 55, 319, 22200, 78, 0, 78, 252, 252, 252, 252, 252, 252, 252, 35, 35, 35, 35, 35, 54, 18, 112, 406, 222, 20, 100, 100, '13,1^14,1^21,1'), - (1, 56, 324, 24240, 82, 0, 82, 256, 256, 256, 256, 256, 256, 256, 35, 35, 35, 35, 35, 55, 19, 115, 438, 242, 20, 100, 100, '13,1^14,1^21,1'), - (1, 57, 329, 26280, 85, 0, 85, 259, 259, 259, 259, 259, 259, 259, 36, 36, 36, 36, 36, 56, 20, 120, 470, 263, 19, 100, 100, '13,1^14,1^21,1'), - (1, 58, 334, 28320, 89, 0, 89, 263, 263, 263, 263, 263, 263, 263, 36, 36, 36, 36, 36, 56, 22, 125, 502, 283, 19, 100, 100, '13,1^14,1^21,1'), - (1, 59, 338, 30360, 92, 0, 92, 266, 266, 266, 266, 266, 266, 266, 37, 37, 37, 37, 37, 58, 23, 128, 534, 304, 19, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 60, 343, 32400, 96, 30, 96, 270, 270, 270, 270, 270, 270, 270, 37, 37, 37, 37, 37, 59, 24, 133, 566, 324, 19, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 61, 348, 34691, 102, 30, 101, 274, 274, 274, 274, 274, 274, 274, 38, 38, 38, 38, 38, 60, 29, 154, 643, 347, 19, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 62, 353, 36982, 109, 30, 104, 277, 277, 277, 277, 277, 277, 277, 38, 38, 38, 38, 38, 61, 34, 174, 719, 370, 18, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 63, 359, 39272, 115, 30, 109, 281, 281, 281, 281, 281, 281, 281, 40, 40, 40, 40, 40, 61, 38, 194, 796, 393, 18, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 64, 364, 41563, 122, 30, 114, 284, 284, 284, 284, 284, 284, 284, 40, 40, 40, 40, 40, 62, 43, 215, 872, 416, 18, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 65, 368, 43854, 128, 35, 118, 288, 288, 288, 288, 288, 288, 288, 41, 41, 41, 41, 41, 64, 48, 235, 948, 439, 18, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 66, 373, 46146, 136, 35, 122, 293, 293, 293, 293, 293, 293, 293, 41, 41, 41, 41, 41, 65, 53, 256, 1025, 461, 18, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 67, 378, 48437, 142, 35, 126, 296, 296, 296, 296, 296, 296, 296, 42, 42, 42, 42, 42, 66, 58, 276, 1100, 484, 17, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 68, 383, 50728, 149, 35, 131, 300, 300, 300, 300, 300, 300, 300, 42, 42, 42, 42, 42, 67, 62, 296, 1177, 507, 17, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 69, 389, 53018, 155, 35, 136, 304, 304, 304, 304, 304, 304, 304, 43, 43, 43, 43, 43, 67, 67, 317, 1254, 530, 17, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 70, 394, 55309, 162, 40, 139, 307, 307, 307, 307, 307, 307, 307, 43, 43, 43, 43, 43, 68, 72, 337, 1330, 553, 17, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 71, 398, 57600, 168, 40, 144, 311, 311, 311, 311, 311, 311, 311, 44, 44, 44, 44, 44, 70, 77, 358, 1406, 576, 17, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 72, 403, 57600, 172, 40, 154, 314, 314, 314, 314, 314, 314, 314, 46, 46, 46, 46, 46, 71, 82, 366, 1432, 576, 17, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 73, 408, 57600, 174, 40, 162, 318, 318, 318, 318, 318, 318, 318, 47, 47, 47, 47, 47, 72, 86, 374, 1457, 576, 17, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 74, 413, 57600, 178, 40, 172, 322, 322, 322, 322, 322, 322, 322, 47, 47, 47, 47, 47, 73, 91, 382, 1482, 576, 17, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 75, 418, 57600, 180, 40, 180, 325, 325, 325, 325, 325, 325, 325, 48, 48, 48, 48, 48, 74, 96, 390, 1507, 576, 17, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 76, 423, 90000, 192, 45, 192, 329, 329, 329, 329, 329, 329, 329, 49, 49, 49, 49, 49, 76, 101, 480, 1920, 900, 17, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 77, 428, 108000, 204, 45, 204, 332, 332, 332, 332, 332, 332, 332, 50, 50, 50, 50, 50, 77, 106, 600, 2460, 1080, 17, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 78, 433, 135600, 216, 45, 216, 336, 336, 336, 336, 336, 336, 336, 52, 52, 52, 52, 52, 78, 110, 713, 2788, 1356, 17, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 79, 438, 156000, 228, 45, 228, 340, 340, 340, 340, 340, 340, 340, 53, 53, 53, 53, 53, 79, 115, 780, 3000, 1560, 17, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 80, 443, 168000, 240, 45, 240, 343, 343, 343, 343, 343, 343, 343, 54, 54, 54, 54, 54, 80, 120, 864, 3359, 1680, 16, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 81, 448, 288000, 360, 45, 360, 347, 347, 347, 347, 347, 347, 347, 55, 55, 55, 55, 55, 82, 125, 960, 4319, 2880, 16, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 82, 453, 408000, 480, 45, 480, 350, 350, 350, 350, 350, 350, 350, 56, 56, 56, 56, 56, 83, 130, 1080, 5519, 4080, 16, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 83, 458, 528000, 492, 45, 492, 354, 354, 354, 354, 354, 354, 354, 58, 58, 58, 58, 58, 84, 134, 1530, 5885, 5280, 16, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 84, 463, 534000, 504, 45, 504, 358, 358, 358, 358, 358, 358, 358, 59, 59, 59, 59, 59, 85, 139, 1560, 6120, 5340, 16, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 85, 468, 540000, 516, 45, 516, 361, 361, 361, 361, 361, 361, 361, 60, 60, 60, 60, 60, 86, 144, 1631, 6350, 5400, 16, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 86, 473, 546000, 528, 45, 528, 365, 365, 365, 365, 365, 365, 365, 61, 61, 61, 61, 61, 88, 149, 1770, 6694, 5460, 16, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 87, 478, 552000, 540, 45, 540, 368, 368, 368, 368, 368, 368, 368, 62, 62, 62, 62, 62, 89, 154, 1812, 7102, 5520, 16, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 88, 483, 558000, 552, 45, 552, 372, 372, 372, 372, 372, 372, 372, 64, 64, 64, 64, 64, 90, 158, 1932, 7440, 5580, 16, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 89, 488, 564000, 564, 45, 564, 376, 376, 376, 376, 376, 376, 376, 65, 65, 65, 65, 65, 91, 163, 1980, 7530, 5640, 16, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (1, 90, 490, 570000, 576, 45, 576, 379, 379, 379, 379, 379, 379, 379, 66, 66, 66, 66, 66, 92, 168, 2040, 7620, 5700, 16, 100, 100, '1,1^8,1^13,1^14,1^21,1'), - (2, 1, 12, 17, 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 2, 2, 2, 2, 2, 2, 15, 2, 9, 0, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 2, 17, 41, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 4, 4, 4, 4, 4, 4, 15, 2, 12, 0, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 3, 21, 65, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 6, 6, 6, 6, 6, 6, 15, 2, 15, 1, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 4, 24, 89, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 8, 8, 8, 8, 8, 8, 15, 2, 18, 1, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 5, 29, 113, 0, 0, 0, 30, 30, 30, 30, 30, 30, 30, 10, 10, 10, 10, 10, 10, 15, 2, 21, 1, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 6, 33, 150, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 12, 12, 12, 12, 12, 12, 15, 2, 24, 2, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 7, 38, 188, 0, 0, 0, 39, 39, 39, 39, 39, 39, 39, 14, 14, 14, 14, 14, 14, 15, 2, 27, 2, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 8, 42, 225, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 16, 16, 16, 16, 16, 16, 15, 2, 30, 2, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 9, 47, 263, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 18, 18, 18, 18, 18, 18, 15, 2, 33, 3, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 10, 51, 300, 0, 0, 0, 53, 53, 53, 53, 53, 53, 53, 20, 20, 20, 20, 20, 20, 15, 2, 36, 3, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 11, 56, 351, 0, 0, 0, 57, 57, 57, 57, 57, 57, 57, 22, 22, 22, 22, 22, 22, 15, 5, 41, 4, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 12, 60, 402, 0, 0, 0, 63, 63, 63, 63, 63, 63, 63, 24, 24, 24, 24, 24, 24, 15, 6, 45, 4, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 13, 65, 453, 0, 0, 0, 68, 68, 68, 68, 68, 68, 68, 26, 26, 26, 26, 26, 26, 15, 9, 48, 5, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 14, 69, 504, 0, 0, 0, 72, 72, 72, 72, 72, 72, 72, 28, 28, 28, 28, 28, 28, 15, 11, 53, 5, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 15, 78, 572, 0, 0, 0, 77, 77, 77, 77, 77, 77, 77, 30, 30, 30, 30, 30, 30, 15, 11, 56, 6, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 16, 89, 639, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 32, 32, 32, 32, 32, 32, 15, 12, 59, 6, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 17, 98, 707, 0, 0, 0, 86, 86, 86, 86, 86, 86, 86, 34, 34, 34, 34, 34, 34, 15, 12, 62, 7, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 18, 108, 774, 0, 0, 0, 90, 90, 90, 90, 90, 90, 90, 36, 36, 36, 36, 36, 36, 15, 14, 63, 8, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 19, 117, 842, 0, 0, 0, 95, 95, 95, 95, 95, 95, 95, 38, 38, 38, 38, 38, 38, 15, 14, 66, 8, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 20, 128, 909, 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 40, 40, 40, 40, 40, 40, 15, 15, 69, 9, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 21, 137, 977, 0, 0, 0, 104, 104, 104, 104, 104, 104, 104, 42, 42, 42, 42, 42, 42, 15, 15, 72, 10, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 22, 143, 1068, 0, 0, 0, 108, 108, 108, 108, 108, 108, 108, 44, 44, 44, 44, 44, 44, 15, 15, 75, 11, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 23, 149, 1160, 0, 0, 0, 113, 113, 113, 113, 113, 113, 113, 46, 46, 46, 46, 46, 46, 15, 15, 78, 12, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 24, 155, 1251, 0, 0, 0, 117, 117, 117, 117, 117, 117, 117, 48, 48, 48, 48, 48, 48, 15, 17, 83, 13, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 25, 161, 1343, 0, 0, 0, 122, 122, 122, 122, 122, 122, 122, 50, 50, 50, 50, 50, 50, 15, 17, 86, 13, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 26, 167, 1434, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 52, 52, 52, 52, 52, 52, 15, 17, 89, 14, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 27, 173, 1526, 0, 0, 0, 132, 132, 132, 132, 132, 132, 132, 54, 54, 54, 54, 54, 54, 15, 17, 92, 15, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 28, 179, 1617, 0, 0, 0, 137, 137, 137, 137, 137, 137, 137, 56, 56, 56, 56, 56, 56, 15, 18, 96, 16, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 29, 185, 1709, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 58, 58, 58, 58, 58, 58, 15, 18, 99, 17, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 30, 191, 1800, 0, 0, 0, 146, 146, 146, 146, 146, 146, 146, 60, 60, 60, 60, 60, 60, 15, 18, 102, 18, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 31, 203, 2370, 6, 0, 6, 156, 156, 156, 156, 156, 156, 156, 62, 62, 62, 62, 62, 62, 15, 21, 111, 24, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 32, 213, 2940, 12, 0, 12, 165, 165, 165, 165, 165, 165, 165, 64, 64, 64, 64, 64, 64, 15, 24, 119, 29, 30, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 33, 225, 3510, 18, 0, 18, 176, 176, 176, 176, 176, 176, 176, 66, 66, 66, 66, 66, 66, 15, 27, 128, 35, 29, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 34, 237, 4080, 24, 0, 24, 185, 185, 185, 185, 185, 185, 185, 68, 68, 68, 68, 68, 68, 15, 30, 135, 41, 28, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 35, 249, 4650, 30, 0, 30, 195, 195, 195, 195, 195, 195, 195, 70, 70, 70, 70, 70, 70, 15, 33, 144, 47, 27, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 36, 260, 5220, 36, 0, 36, 206, 206, 206, 206, 206, 206, 206, 72, 72, 72, 72, 72, 72, 15, 36, 153, 52, 25, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 37, 272, 5790, 42, 0, 42, 215, 215, 215, 215, 215, 215, 215, 74, 74, 74, 74, 74, 74, 15, 39, 161, 58, 24, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 38, 284, 6360, 48, 0, 48, 225, 225, 225, 225, 225, 225, 225, 76, 76, 76, 76, 76, 76, 15, 42, 170, 64, 23, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 39, 294, 6930, 54, 0, 54, 234, 234, 234, 234, 234, 234, 234, 78, 78, 78, 78, 78, 78, 15, 45, 177, 69, 22, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 40, 306, 7500, 60, 0, 60, 245, 245, 245, 245, 245, 245, 245, 80, 80, 80, 80, 80, 80, 15, 48, 186, 75, 21, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 41, 312, 7950, 63, 0, 63, 249, 249, 249, 249, 249, 249, 249, 82, 82, 82, 82, 82, 82, 15, 50, 191, 80, 21, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 42, 318, 8400, 66, 0, 66, 254, 254, 254, 254, 254, 254, 254, 84, 84, 84, 84, 84, 84, 15, 51, 195, 84, 21, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 43, 326, 11000, 69, 0, 69, 260, 260, 260, 260, 260, 260, 260, 86, 86, 86, 86, 86, 86, 15, 51, 200, 110, 21, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 44, 332, 25000, 72, 0, 72, 264, 264, 264, 264, 264, 264, 264, 88, 88, 88, 88, 88, 88, 15, 53, 204, 250, 21, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 45, 338, 35000, 75, 0, 75, 269, 269, 269, 269, 269, 269, 269, 90, 90, 90, 90, 90, 90, 15, 54, 209, 350, 21, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 46, 344, 45000, 75, 0, 75, 273, 273, 273, 273, 273, 273, 273, 92, 92, 92, 92, 92, 92, 15, 66, 228, 450, 21, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 47, 350, 55000, 75, 0, 75, 278, 278, 278, 278, 278, 278, 278, 94, 94, 94, 94, 94, 94, 15, 77, 248, 550, 21, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 48, 356, 70000, 75, 0, 75, 282, 282, 282, 282, 282, 282, 282, 96, 96, 96, 96, 96, 96, 15, 89, 267, 700, 21, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 49, 362, 85000, 75, 0, 75, 287, 287, 287, 287, 287, 287, 287, 98, 98, 98, 98, 98, 98, 15, 99, 287, 850, 21, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 50, 368, 100000, 75, 0, 75, 291, 291, 291, 291, 291, 291, 291, 100, 100, 100, 100, 100, 100, 15, 111, 306, 1000, 21, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 51, 374, 130000, 80, 0, 80, 296, 296, 296, 296, 296, 296, 296, 102, 102, 102, 102, 102, 102, 17, 117, 347, 1300, 20, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 52, 380, 140000, 84, 0, 84, 300, 300, 300, 300, 300, 300, 300, 104, 104, 104, 104, 104, 104, 18, 122, 387, 1400, 20, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 53, 386, 150000, 89, 0, 89, 305, 305, 305, 305, 305, 305, 305, 106, 106, 106, 106, 106, 106, 20, 128, 426, 1500, 19, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 54, 392, 160000, 93, 0, 93, 309, 309, 309, 309, 309, 309, 309, 108, 108, 108, 108, 108, 108, 21, 134, 467, 1600, 19, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 55, 399, 170000, 98, 0, 98, 315, 315, 315, 315, 315, 315, 315, 110, 110, 110, 110, 110, 110, 23, 140, 507, 1700, 18, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 56, 405, 180000, 102, 0, 102, 320, 320, 320, 320, 320, 320, 320, 112, 112, 112, 112, 112, 112, 24, 144, 548, 1800, 17, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 57, 411, 190000, 107, 0, 107, 324, 324, 324, 324, 324, 324, 324, 114, 114, 114, 114, 114, 114, 26, 150, 588, 1900, 17, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 58, 417, 200000, 111, 0, 111, 329, 329, 329, 329, 329, 329, 329, 116, 116, 116, 116, 116, 116, 27, 156, 627, 2000, 16, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 59, 434, 400750, 130, 0, 125, 253, 253, 253, 253, 253, 253, 253, 118, 118, 118, 118, 118, 118, 19, 170, 700, 4008, 16, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 60, 476, 450813, 140, 0, 129, 258, 258, 258, 258, 258, 258, 258, 120, 120, 120, 120, 120, 120, 22, 185, 740, 4508, 15, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 61, 517, 500875, 145, 0, 130, 263, 263, 263, 263, 263, 263, 263, 122, 122, 122, 122, 122, 122, 26, 195, 780, 5009, 15, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 62, 559, 550938, 150, 0, 140, 268, 268, 268, 268, 268, 268, 268, 124, 124, 124, 124, 124, 124, 29, 210, 800, 5509, 15, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 63, 600, 601000, 155, 0, 160, 273, 273, 273, 273, 273, 273, 273, 126, 126, 126, 126, 126, 126, 32, 220, 825, 6010, 15, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 64, 563, 734167, 160, 0, 170, 277, 277, 277, 277, 277, 277, 277, 128, 128, 128, 128, 128, 128, 50, 241, 850, 7342, 15, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 65, 525, 867333, 165, 0, 180, 281, 281, 281, 281, 281, 281, 281, 130, 130, 130, 130, 130, 130, 67, 262, 875, 8673, 14, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 66, 488, 1000500, 170, 0, 190, 285, 285, 285, 285, 285, 285, 285, 132, 132, 132, 132, 132, 132, 85, 283, 904, 10005, 14, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 67, 498, 1013841, 175, 10, 200, 292, 292, 292, 292, 292, 292, 292, 134, 134, 134, 134, 134, 134, 81, 312, 1071, 10138, 14, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 68, 508, 1027182, 180, 20, 225, 300, 300, 300, 300, 300, 300, 300, 136, 136, 136, 136, 136, 136, 77, 341, 1238, 10272, 14, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 69, 519, 1040522, 185, 30, 239, 307, 307, 307, 307, 307, 307, 307, 138, 138, 138, 138, 138, 138, 72, 369, 1404, 10405, 14, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 70, 529, 1053863, 190, 40, 245, 315, 315, 315, 315, 315, 315, 315, 140, 140, 140, 140, 140, 140, 68, 398, 1571, 10539, 14, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 71, 539, 1067204, 200, 50, 255, 322, 322, 322, 322, 322, 322, 322, 142, 142, 142, 142, 142, 142, 64, 427, 1738, 10672, 14, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 72, 547, 1262903, 220, 56, 265, 327, 327, 327, 327, 327, 327, 327, 144, 144, 144, 144, 144, 144, 68, 520, 1979, 12629, 14, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 73, 556, 1458602, 253, 63, 285, 332, 332, 332, 332, 332, 332, 332, 146, 146, 146, 146, 146, 146, 72, 614, 2219, 14586, 13, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 74, 564, 1654301, 306, 69, 300, 337, 337, 337, 337, 337, 337, 337, 148, 148, 148, 148, 148, 148, 76, 707, 2460, 16543, 13, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 75, 572, 1850000, 330, 75, 310, 342, 342, 342, 342, 342, 342, 342, 150, 150, 150, 150, 150, 150, 80, 725, 2700, 18500, 13, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 76, 579, 1900000, 348, 77, 320, 346, 346, 346, 346, 346, 346, 346, 152, 152, 152, 152, 152, 152, 84, 750, 2960, 19000, 13, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 77, 586, 1950000, 355, 79, 330, 350, 350, 350, 350, 350, 350, 350, 154, 154, 154, 154, 154, 154, 88, 775, 3000, 19500, 13, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 78, 594, 2000000, 365, 81, 340, 354, 354, 354, 354, 354, 354, 354, 156, 156, 156, 156, 156, 156, 92, 800, 3100, 20000, 13, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 79, 601, 2050000, 375, 83, 350, 358, 358, 358, 358, 358, 358, 358, 158, 158, 158, 158, 158, 158, 96, 825, 3200, 20500, 13, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 80, 608, 2100000, 380, 85, 360, 362, 362, 362, 362, 362, 362, 362, 160, 160, 160, 160, 160, 160, 100, 850, 3300, 21000, 13, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 81, 615, 2480000, 385, 83, 370, 366, 366, 366, 366, 366, 366, 366, 162, 162, 162, 162, 162, 162, 104, 875, 3350, 24800, 13, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 82, 622, 2860000, 390, 81, 380, 370, 370, 370, 370, 370, 370, 370, 164, 164, 164, 164, 164, 164, 108, 900, 3400, 28600, 13, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 83, 629, 3240000, 395, 79, 390, 375, 375, 375, 375, 375, 375, 375, 166, 166, 166, 166, 166, 166, 112, 925, 3450, 32400, 13, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 84, 636, 3620000, 400, 77, 400, 379, 379, 379, 379, 379, 379, 379, 168, 168, 168, 168, 168, 168, 116, 940, 3500, 36200, 13, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 85, 643, 4000000, 405, 75, 410, 383, 383, 383, 383, 383, 383, 383, 170, 170, 170, 170, 170, 170, 120, 960, 3550, 40000, 12, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 86, 650, 4800000, 410, 77, 420, 387, 387, 387, 387, 387, 387, 387, 172, 172, 172, 172, 172, 172, 124, 980, 3600, 48000, 12, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 87, 657, 5600000, 415, 79, 430, 391, 391, 391, 391, 391, 391, 391, 174, 174, 174, 174, 174, 174, 128, 1000, 3650, 56000, 12, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 88, 665, 6400000, 420, 81, 440, 395, 395, 395, 395, 395, 395, 395, 176, 176, 176, 176, 176, 176, 132, 1010, 3700, 64000, 12, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 89, 672, 7200000, 420, 83, 445, 399, 399, 399, 399, 399, 399, 399, 178, 178, 178, 178, 178, 178, 136, 1018, 3800, 72000, 12, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'), - (2, 90, 679, 8000000, 420, 85, 450, 403, 403, 403, 403, 403, 403, 403, 180, 180, 180, 180, 180, 180, 140, 1050, 3900, 80000, 12, 100, 100, '1,1^2,1^8,1^13,1^14,1^15,1^16,1^17,1^21,1^31,1'); \ No newline at end of file diff --git a/utils/sql/git/required/2019_01_10_multi_version_spawns.sql b/utils/sql/git/required/2019_01_10_multi_version_spawns.sql deleted file mode 100644 index c15bd0146..000000000 --- a/utils/sql/git/required/2019_01_10_multi_version_spawns.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `spawn2` MODIFY `version` SMALLINT(5) SIGNED NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/utils/sql/git/required/2019_02_04_profanity_command.sql b/utils/sql/git/required/2019_02_04_profanity_command.sql deleted file mode 100644 index 33562fe75..000000000 --- a/utils/sql/git/required/2019_02_04_profanity_command.sql +++ /dev/null @@ -1,10 +0,0 @@ -DROP TABLE IF EXISTS `profanity_list`; - -CREATE TABLE `profanity_list` ( - `word` VARCHAR(16) NOT NULL -) -COLLATE='latin1_swedish_ci' -ENGINE=InnoDB -; - -REPLACE INTO `command_settings` VALUES ('profanity', 150, 'prof'); diff --git a/utils/sql/git/required/2019_03_25_optional_npc_model.sql b/utils/sql/git/required/2019_03_25_optional_npc_model.sql deleted file mode 100644 index 0f82bd62e..000000000 --- a/utils/sql/git/required/2019_03_25_optional_npc_model.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `npc_types` ADD COLUMN `model` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `stuck_behavior`; diff --git a/utils/sql/git/required/2019_07_03_update_range.sql b/utils/sql/git/required/2019_07_03_update_range.sql deleted file mode 100644 index c420d418d..000000000 --- a/utils/sql/git/required/2019_07_03_update_range.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `zone` ADD COLUMN `max_movement_update_range` INT(11) UNSIGNED NOT NULL DEFAULT '600' AFTER `npc_max_aggro_dist`; \ No newline at end of file diff --git a/utils/sql/git/required/2019_07_10_npc_flymode.sql b/utils/sql/git/required/2019_07_10_npc_flymode.sql deleted file mode 100644 index aacc5ad00..000000000 --- a/utils/sql/git/required/2019_07_10_npc_flymode.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `npc_types` ADD COLUMN `flymode` tinyint(4) NOT NULL DEFAULT -1; \ No newline at end of file diff --git a/utils/sql/git/required/2019_09_02_required_spawn_filter.sql b/utils/sql/git/required/2019_09_02_required_spawn_filter.sql deleted file mode 100644 index d89cdfa4a..000000000 --- a/utils/sql/git/required/2019_09_02_required_spawn_filter.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `spawnentry` ADD COLUMN `condition_value_filter` MEDIUMINT(9) NOT NULL DEFAULT '1' AFTER `chance`; diff --git a/utils/sql/git/required/2019_09_16_account_table_changes.sql b/utils/sql/git/required/2019_09_16_account_table_changes.sql deleted file mode 100644 index e4393d29d..000000000 --- a/utils/sql/git/required/2019_09_16_account_table_changes.sql +++ /dev/null @@ -1,11 +0,0 @@ -ALTER TABLE `account` - DROP INDEX `name`, - DROP INDEX `lsaccount_id`; - -ALTER TABLE `account` - ADD COLUMN `ls_id` VARCHAR(64) NULL DEFAULT 'eqemu' AFTER `status`; - -ALTER TABLE `account` - ADD UNIQUE INDEX `name_ls_id` (`name`, `ls_id`), - ADD UNIQUE INDEX `ls_id_lsaccount_id` (`ls_id`, `lsaccount_id`); - \ No newline at end of file diff --git a/utils/sql/git/required/2019_11_09_logsys_description_update.sql b/utils/sql/git/required/2019_11_09_logsys_description_update.sql deleted file mode 100644 index df6c50ce2..000000000 --- a/utils/sql/git/required/2019_11_09_logsys_description_update.sql +++ /dev/null @@ -1,11 +0,0 @@ -UPDATE `logsys_categories` SET `log_category_description` = 'Packet :: Client -> Server' WHERE `log_category_id` = '5'; -UPDATE `logsys_categories` SET `log_category_description` = 'QS Server' WHERE `log_category_id` = '19'; -UPDATE `logsys_categories` SET `log_category_description` = 'TCP Connection' WHERE `log_category_id` = '26'; -UPDATE `logsys_categories` SET `log_category_description` = 'UCS Server' WHERE `log_category_id` = '31'; -UPDATE `logsys_categories` SET `log_category_description` = 'WebInterface Server' WHERE `log_category_id` = '32'; -UPDATE `logsys_categories` SET `log_category_description` = 'World Server' WHERE `log_category_id` = '33'; -UPDATE `logsys_categories` SET `log_category_description` = 'MySQL Query' WHERE `log_category_id` = '36'; -UPDATE `logsys_categories` SET `log_category_description` = 'Packet :: Server -> Client' WHERE `log_category_id` = '39'; -UPDATE `logsys_categories` SET `log_category_description` = 'Packet :: Client -> Server Unhandled' WHERE `log_category_id` = '40'; -UPDATE `logsys_categories` SET `log_category_description` = 'Packet :: Server -> Client (Dump)' WHERE `log_category_id` = '41'; -UPDATE `logsys_categories` SET `log_category_description` = 'Packet :: Client -> Server (Dump)' WHERE `log_category_id` = '42'; diff --git a/utils/sql/git/required/2019_12_24_banned_ips_update.sql b/utils/sql/git/required/2019_12_24_banned_ips_update.sql deleted file mode 100644 index b05bd682b..000000000 --- a/utils/sql/git/required/2019_12_24_banned_ips_update.sql +++ /dev/null @@ -1,5 +0,0 @@ -RENAME TABLE `Banned_IPs` TO `Banned_IPs_`; - -CREATE TABLE `banned_ips` (PRIMARY KEY (`ip_address`)) SELECT `ip_address`, `notes` FROM `Banned_IPs_`; - -DROP TABLE IF EXISTS `Banned_IPs_`; diff --git a/utils/sql/git/required/2020_01_10_character_soft_deletes.sql b/utils/sql/git/required/2020_01_10_character_soft_deletes.sql deleted file mode 100644 index 17496b141..000000000 --- a/utils/sql/git/required/2020_01_10_character_soft_deletes.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `character_data` ADD COLUMN `deleted_at` datetime NULL DEFAULT NULL; \ No newline at end of file diff --git a/utils/sql/git/required/2020_01_24_grid_centerpoint_wp.sql b/utils/sql/git/required/2020_01_24_grid_centerpoint_wp.sql deleted file mode 100644 index b4a118242..000000000 --- a/utils/sql/git/required/2020_01_24_grid_centerpoint_wp.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table grid_entries add column `centerpoint` tinyint(4) not null default 0; -alter table spawngroup add column `wp_spawns` tinyint(1) unsigned not null default 0; \ No newline at end of file diff --git a/utils/sql/git/required/2020_01_28_corpse_guild_consent_id.sql b/utils/sql/git/required/2020_01_28_corpse_guild_consent_id.sql deleted file mode 100644 index b42f257ea..000000000 --- a/utils/sql/git/required/2020_01_28_corpse_guild_consent_id.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `character_corpses` ADD COLUMN `guild_consent_id` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `time_of_death`; diff --git a/utils/sql/git/required/2020_02_06_aa_reset_on_death.sql b/utils/sql/git/required/2020_02_06_aa_reset_on_death.sql deleted file mode 100644 index 91edb5d4a..000000000 --- a/utils/sql/git/required/2020_02_06_aa_reset_on_death.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `aa_ability` ADD `reset_on_death` TINYINT(4) NOT NULL DEFAULT '0'; -UPDATE `aa_ability` SET `reset_on_death` = '1' WHERE `id` = 6001; diff --git a/utils/sql/git/required/2020_02_06_globalloot.sql b/utils/sql/git/required/2020_02_06_globalloot.sql deleted file mode 100644 index 83144bbb8..000000000 --- a/utils/sql/git/required/2020_02_06_globalloot.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `global_loot` ADD `hot_zone` TINYINT NULL; - diff --git a/utils/sql/git/required/2020_03_05_npc_always_aggro.sql b/utils/sql/git/required/2020_03_05_npc_always_aggro.sql deleted file mode 100644 index 83641998c..000000000 --- a/utils/sql/git/required/2020_03_05_npc_always_aggro.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `npc_types` ADD COLUMN `always_aggro` tinyint(1) NOT NULL DEFAULT 0; diff --git a/utils/sql/git/required/2020_03_09_convert_myisam_to_innodb.sql b/utils/sql/git/required/2020_03_09_convert_myisam_to_innodb.sql deleted file mode 100644 index 31ccf1094..000000000 --- a/utils/sql/git/required/2020_03_09_convert_myisam_to_innodb.sql +++ /dev/null @@ -1,95 +0,0 @@ -ALTER TABLE `account_flags` ENGINE=InnoDB; -ALTER TABLE `account_ip` ENGINE=InnoDB; -ALTER TABLE `account` ENGINE=InnoDB; -ALTER TABLE `adventure_template_entry_flavor` ENGINE=InnoDB; -ALTER TABLE `adventure_template_entry` ENGINE=InnoDB; -ALTER TABLE `altadv_vars` ENGINE=InnoDB; -ALTER TABLE `alternate_currency` ENGINE=InnoDB; -ALTER TABLE `banned_ips` ENGINE=InnoDB; -ALTER TABLE `base_data` ENGINE=InnoDB; -ALTER TABLE `blocked_spells` ENGINE=InnoDB; -ALTER TABLE `buyer` ENGINE=InnoDB; -ALTER TABLE `char_create_combinations` ENGINE=InnoDB; -ALTER TABLE `char_create_point_allocations` ENGINE=InnoDB; -ALTER TABLE `character_activities` ENGINE=InnoDB; -ALTER TABLE `character_enabledtasks` ENGINE=InnoDB; -ALTER TABLE `character_tasks` ENGINE=InnoDB; -ALTER TABLE `chatchannels` ENGINE=InnoDB; -ALTER TABLE `completed_tasks` ENGINE=InnoDB; -ALTER TABLE `damageshieldtypes` ENGINE=InnoDB; -ALTER TABLE `discovered_items` ENGINE=InnoDB; -ALTER TABLE `eqtime` ENGINE=InnoDB; -ALTER TABLE `eventlog` ENGINE=InnoDB; -ALTER TABLE `faction_list_mod` ENGINE=InnoDB; -ALTER TABLE `faction_list` ENGINE=InnoDB; -ALTER TABLE `faction_values` ENGINE=InnoDB; -ALTER TABLE `friends` ENGINE=InnoDB; -ALTER TABLE `goallists` ENGINE=InnoDB; -ALTER TABLE `guild_bank` ENGINE=InnoDB; -ALTER TABLE `guild_members` ENGINE=InnoDB; -ALTER TABLE `guild_ranks` ENGINE=InnoDB; -ALTER TABLE `guild_relations` ENGINE=InnoDB; -ALTER TABLE `guilds` ENGINE=InnoDB; -ALTER TABLE `hackers` ENGINE=InnoDB; -ALTER TABLE `horses` ENGINE=InnoDB; -ALTER TABLE `inventory_versions` ENGINE=InnoDB; -ALTER TABLE `item_tick` ENGINE=InnoDB; -ALTER TABLE `items` ENGINE=InnoDB; -ALTER TABLE `keyring` ENGINE=InnoDB; -ALTER TABLE `launcher_zones` ENGINE=InnoDB; -ALTER TABLE `launcher` ENGINE=InnoDB; -ALTER TABLE `ldon_trap_entries` ENGINE=InnoDB; -ALTER TABLE `ldon_trap_templates` ENGINE=InnoDB; -ALTER TABLE `lfguild` ENGINE=InnoDB; -ALTER TABLE `lootdrop_entries` ENGINE=InnoDB; -ALTER TABLE `lootdrop` ENGINE=InnoDB; -ALTER TABLE `loottable_entries` ENGINE=InnoDB; -ALTER TABLE `loottable` ENGINE=InnoDB; -ALTER TABLE `mail` ENGINE=InnoDB; -ALTER TABLE `merc_armorinfo` ENGINE=InnoDB; -ALTER TABLE `merc_buffs` ENGINE=InnoDB; -ALTER TABLE `merc_inventory` ENGINE=InnoDB; -ALTER TABLE `merc_merchant_entries` ENGINE=InnoDB; -ALTER TABLE `merc_merchant_template_entries` ENGINE=InnoDB; -ALTER TABLE `merc_merchant_templates` ENGINE=InnoDB; -ALTER TABLE `merc_name_types` ENGINE=InnoDB; -ALTER TABLE `merc_npc_types` ENGINE=InnoDB; -ALTER TABLE `merc_spell_list_entries` ENGINE=InnoDB; -ALTER TABLE `merc_spell_lists` ENGINE=InnoDB; -ALTER TABLE `merc_stance_entries` ENGINE=InnoDB; -ALTER TABLE `merc_stats` ENGINE=InnoDB; -ALTER TABLE `merc_subtypes` ENGINE=InnoDB; -ALTER TABLE `merc_templates` ENGINE=InnoDB; -ALTER TABLE `merc_types` ENGINE=InnoDB; -ALTER TABLE `merc_weaponinfo` ENGINE=InnoDB; -ALTER TABLE `mercs` ENGINE=InnoDB; -ALTER TABLE `name_filter` ENGINE=InnoDB; -ALTER TABLE `npc_types` ENGINE=InnoDB; -ALTER TABLE `object_contents` ENGINE=InnoDB; -ALTER TABLE `petitions` ENGINE=InnoDB; -ALTER TABLE `pets_equipmentset_entries` ENGINE=InnoDB; -ALTER TABLE `pets_equipmentset` ENGINE=InnoDB; -ALTER TABLE `player_titlesets` ENGINE=InnoDB; -ALTER TABLE `proximities` ENGINE=InnoDB; -ALTER TABLE `races` ENGINE=InnoDB; -ALTER TABLE `raid_details` ENGINE=InnoDB; -ALTER TABLE `raid_leaders` ENGINE=InnoDB; -ALTER TABLE `raid_members` ENGINE=InnoDB; -ALTER TABLE `rule_sets` ENGINE=InnoDB; -ALTER TABLE `rule_values` ENGINE=InnoDB; -ALTER TABLE `saylink` ENGINE=InnoDB; -ALTER TABLE `sharedbank` ENGINE=InnoDB; -ALTER TABLE `skill_caps` ENGINE=InnoDB; -ALTER TABLE `spell_globals` ENGINE=InnoDB; -ALTER TABLE `spells_new` ENGINE=InnoDB; -ALTER TABLE `task_activities` ENGINE=InnoDB; -ALTER TABLE `tasks` ENGINE=InnoDB; -ALTER TABLE `tasksets` ENGINE=InnoDB; -ALTER TABLE `timers` ENGINE=InnoDB; -ALTER TABLE `titles` ENGINE=InnoDB; -ALTER TABLE `trader_audit` ENGINE=InnoDB; -ALTER TABLE `trader` ENGINE=InnoDB; -ALTER TABLE `tradeskill_recipe_entries` ENGINE=InnoDB; -ALTER TABLE `tradeskill_recipe` ENGINE=InnoDB; -ALTER TABLE `variables` ENGINE=InnoDB; -ALTER TABLE `veteran_reward_templates` ENGINE=InnoDB; \ No newline at end of file diff --git a/utils/sql/git/required/2020_04_11_expansions_content_filters.sql b/utils/sql/git/required/2020_04_11_expansions_content_filters.sql deleted file mode 100644 index 3c3171ff2..000000000 --- a/utils/sql/git/required/2020_04_11_expansions_content_filters.sql +++ /dev/null @@ -1,104 +0,0 @@ --- zone -ALTER TABLE `zone` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `zone` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `zone` ADD `content_flags` varchar(100) NULL; - --- doors -ALTER TABLE `doors` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `doors` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `doors` ADD `content_flags` varchar(100) NULL; - --- object -ALTER TABLE `object` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `object` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `object` ADD `content_flags` varchar(100) NULL; - --- spawn2 -ALTER TABLE `spawn2` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `spawn2` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `spawn2` ADD `content_flags` varchar(100) NULL; - --- tradeskill_recipe -ALTER TABLE `tradeskill_recipe` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `tradeskill_recipe` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `tradeskill_recipe` ADD `content_flags` varchar(100) NULL; - --- merchantlist -ALTER TABLE `merchantlist` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `merchantlist` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `merchantlist` ADD `content_flags` varchar(100) NULL; - --- global_loot -ALTER TABLE `global_loot` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `global_loot` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `global_loot` ADD `content_flags` varchar(100) NULL; - --- fishing -ALTER TABLE `fishing` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `fishing` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `fishing` ADD `content_flags` varchar(100) NULL; - --- forage -ALTER TABLE `forage` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `forage` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `forage` ADD `content_flags` varchar(100) NULL; - --- ground_spawns -ALTER TABLE `ground_spawns` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `ground_spawns` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `ground_spawns` ADD `content_flags` varchar(100) NULL; - --- loottable -ALTER TABLE `loottable` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `loottable` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `loottable` ADD `content_flags` varchar(100) NULL; - --- lootdrop -ALTER TABLE `lootdrop` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `lootdrop` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `lootdrop` ADD `content_flags` varchar(100) NULL; - --- starting_items -ALTER TABLE `starting_items` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `starting_items` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `starting_items` ADD `content_flags` varchar(100) NULL; - --- start_zones -ALTER TABLE `start_zones` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `start_zones` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `start_zones` ADD `content_flags` varchar(100) NULL; - --- traps -ALTER TABLE `traps` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `traps` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `traps` ADD `content_flags` varchar(100) NULL; - --- zone_points -ALTER TABLE `zone_points` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `zone_points` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; -ALTER TABLE `zone_points` ADD `content_flags` varchar(100) NULL; - --- pok books -update doors set min_expansion = 4 where name like '%POKTELE%'; - --- content flags -CREATE TABLE `content_flags` (`id` int AUTO_INCREMENT,`flag_name` varchar(75),`enabled` tinyint,`notes` text, PRIMARY KEY (id)); - --- content flags disabled - -ALTER TABLE `doors` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `fishing` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `forage` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `global_loot` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `ground_spawns` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `lootdrop` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `loottable` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `merchantlist` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `object` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `spawn2` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `start_zones` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `starting_items` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `tradeskill_recipe` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `traps` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `zone` ADD `content_flags_disabled` varchar(100) NULL; -ALTER TABLE `zone_points` ADD `content_flags_disabled` varchar(100) NULL; \ No newline at end of file diff --git a/utils/sql/git/required/2020_05_09_items_subtype.sql b/utils/sql/git/required/2020_05_09_items_subtype.sql deleted file mode 100644 index 43b38d14f..000000000 --- a/utils/sql/git/required/2020_05_09_items_subtype.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `items` CHANGE `UNK219` `subtype` int(11) not null default '0'; diff --git a/utils/sql/git/required/2020_08_15_lootdrop_level_filtering.sql b/utils/sql/git/required/2020_08_15_lootdrop_level_filtering.sql deleted file mode 100644 index 00084a59f..000000000 --- a/utils/sql/git/required/2020_08_15_lootdrop_level_filtering.sql +++ /dev/null @@ -1,7 +0,0 @@ -ALTER TABLE `lootdrop_entries` CHANGE `minlevel` `trivial_min_level` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT ''; -ALTER TABLE `lootdrop_entries` CHANGE `maxlevel` `trivial_max_level` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT ''; -ALTER TABLE `lootdrop_entries` ADD COLUMN `npc_min_level` smallint unsigned NOT NULL DEFAULT '0' COMMENT ''; -ALTER TABLE `lootdrop_entries` ADD COLUMN `npc_max_level` smallint unsigned NOT NULL DEFAULT '0' COMMENT ''; -ALTER TABLE `lootdrop_entries` CHANGE `trivial_min_level` `trivial_min_level` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT ''; -ALTER TABLE `lootdrop_entries` CHANGE `trivial_max_level` `trivial_max_level` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT ''; -UPDATE `lootdrop_entries` SET `trivial_max_level` = 0 WHERE `trivial_max_level` = 127; \ No newline at end of file diff --git a/utils/sql/git/required/2020_08_16_virtual_zonepoints.sql b/utils/sql/git/required/2020_08_16_virtual_zonepoints.sql deleted file mode 100644 index 3fb21cd0a..000000000 --- a/utils/sql/git/required/2020_08_16_virtual_zonepoints.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE `zone_points` ADD COLUMN `is_virtual` tinyint NOT NULL DEFAULT '0' COMMENT '' AFTER `content_flags_disabled`; -ALTER TABLE `zone_points` ADD COLUMN `height` int NOT NULL DEFAULT '0' COMMENT ''; -ALTER TABLE `zone_points` ADD COLUMN `width` int NOT NULL DEFAULT '0' COMMENT ''; \ No newline at end of file diff --git a/utils/sql/git/required/2020_09_02_pet_taunting.sql b/utils/sql/git/required/2020_09_02_pet_taunting.sql deleted file mode 100644 index f4de1138f..000000000 --- a/utils/sql/git/required/2020_09_02_pet_taunting.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `character_pet_info` ADD COLUMN `taunting` tinyint(1) NOT NULL DEFAULT '1' COMMENT ''; diff --git a/utils/sql/git/required/2020_12_09_underworld.sql b/utils/sql/git/required/2020_12_09_underworld.sql deleted file mode 100644 index f2f2ba032..000000000 --- a/utils/sql/git/required/2020_12_09_underworld.sql +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE `zone` ADD COLUMN `underworld_teleport_index` INT(4) NOT NULL DEFAULT '0'; -UPDATE `zone` SET `underworld` = '-2030' WHERE `zoneidnumber` = '71'; -UPDATE `zone` SET `underworld_teleport_index` = '11' WHERE `zoneidnumber` = '71'; -UPDATE `zone` SET `underworld_teleport_index` = '-1' WHERE `zoneidnumber` = '75'; -UPDATE `zone` SET `underworld_teleport_index` = '-1' WHERE `zoneidnumber` = '150'; - diff --git a/utils/sql/git/required/2020_12_22_expedition_system.sql b/utils/sql/git/required/2020_12_22_expedition_system.sql deleted file mode 100644 index 820940500..000000000 --- a/utils/sql/git/required/2020_12_22_expedition_system.sql +++ /dev/null @@ -1,82 +0,0 @@ -CREATE TABLE `expeditions` ( - `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `uuid` VARCHAR(36) NOT NULL, - `dynamic_zone_id` INT(10) UNSIGNED NOT NULL DEFAULT 0, - `expedition_name` VARCHAR(128) NOT NULL, - `leader_id` INT(10) UNSIGNED NOT NULL DEFAULT 0, - `min_players` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0, - `max_players` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0, - `add_replay_on_join` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1, - `is_locked` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0, - PRIMARY KEY (`id`), - UNIQUE INDEX `dynamic_zone_id` (`dynamic_zone_id`) -) -COLLATE='latin1_swedish_ci' -ENGINE=InnoDB -; - -CREATE TABLE `expedition_lockouts` ( - `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `expedition_id` INT(10) UNSIGNED NOT NULL, - `event_name` VARCHAR(256) NOT NULL, - `expire_time` DATETIME NOT NULL DEFAULT current_timestamp(), - `duration` INT(10) UNSIGNED NOT NULL DEFAULT 0, - `from_expedition_uuid` VARCHAR(36) NOT NULL, - PRIMARY KEY (`id`), - UNIQUE INDEX `expedition_id_event_name` (`expedition_id`, `event_name`) -) -COLLATE='latin1_swedish_ci' -ENGINE=InnoDB -; - -CREATE TABLE `expedition_members` ( - `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `expedition_id` INT(10) UNSIGNED NOT NULL DEFAULT 0, - `character_id` INT(10) UNSIGNED NOT NULL DEFAULT 0, - `is_current_member` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1, - PRIMARY KEY (`id`), - UNIQUE INDEX `expedition_id_character_id` (`expedition_id`, `character_id`) -) -COLLATE='latin1_swedish_ci' -ENGINE=InnoDB -; - -CREATE TABLE `character_expedition_lockouts` ( - `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `character_id` INT(10) UNSIGNED NOT NULL, - `expedition_name` VARCHAR(128) NOT NULL, - `event_name` VARCHAR(256) NOT NULL, - `expire_time` DATETIME NOT NULL DEFAULT current_timestamp(), - `duration` INT(10) UNSIGNED NOT NULL DEFAULT 0, - `from_expedition_uuid` VARCHAR(36) NOT NULL, - PRIMARY KEY (`id`), - UNIQUE INDEX `character_id_expedition_name_event_name` (`character_id`, `expedition_name`, `event_name`) -) -COLLATE='latin1_swedish_ci' -ENGINE=InnoDB -; - -CREATE TABLE `dynamic_zones` ( - `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `instance_id` INT(10) NOT NULL DEFAULT 0, - `type` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0, - `compass_zone_id` INT(10) UNSIGNED NOT NULL DEFAULT 0, - `compass_x` FLOAT NOT NULL DEFAULT 0, - `compass_y` FLOAT NOT NULL DEFAULT 0, - `compass_z` FLOAT NOT NULL DEFAULT 0, - `safe_return_zone_id` INT(10) UNSIGNED NOT NULL DEFAULT 0, - `safe_return_x` FLOAT NOT NULL DEFAULT 0, - `safe_return_y` FLOAT NOT NULL DEFAULT 0, - `safe_return_z` FLOAT NOT NULL DEFAULT 0, - `safe_return_heading` FLOAT NOT NULL DEFAULT 0, - `zone_in_x` FLOAT NOT NULL DEFAULT 0, - `zone_in_y` FLOAT NOT NULL DEFAULT 0, - `zone_in_z` FLOAT NOT NULL DEFAULT 0, - `zone_in_heading` FLOAT NOT NULL DEFAULT 0, - `has_zone_in` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0, - PRIMARY KEY (`id`), - UNIQUE INDEX `instance_id` (`instance_id`) -) -COLLATE='utf8mb4_general_ci' -ENGINE=InnoDB -; diff --git a/utils/sql/git/required/2021_02_12_dynamic_zone_members.sql b/utils/sql/git/required/2021_02_12_dynamic_zone_members.sql deleted file mode 100644 index 767f65012..000000000 --- a/utils/sql/git/required/2021_02_12_dynamic_zone_members.sql +++ /dev/null @@ -1,11 +0,0 @@ -CREATE TABLE `dynamic_zone_members` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `dynamic_zone_id` int(10) unsigned NOT NULL DEFAULT 0, - `character_id` int(10) unsigned NOT NULL DEFAULT 0, - `is_current_member` tinyint(3) unsigned NOT NULL DEFAULT 1, - PRIMARY KEY (`id`), - UNIQUE KEY `dynamic_zone_id_character_id` (`dynamic_zone_id`,`character_id`), - KEY `character_id` (`character_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -DROP TABLE `expedition_members`; diff --git a/utils/sql/git/required/2021_02_14_npc_exp_mod.sql b/utils/sql/git/required/2021_02_14_npc_exp_mod.sql deleted file mode 100644 index 8cd8372e2..000000000 --- a/utils/sql/git/required/2021_02_14_npc_exp_mod.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `npc_types` ADD COLUMN `exp_mod` INT NOT NULL DEFAULT '100' AFTER `always_aggro`; diff --git a/utils/sql/git/required/2021_02_15_npc_spell_entries_unsigned.sql b/utils/sql/git/required/2021_02_15_npc_spell_entries_unsigned.sql deleted file mode 100644 index cc03b8daa..000000000 --- a/utils/sql/git/required/2021_02_15_npc_spell_entries_unsigned.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `npc_spells_entries` MODIFY `spellid` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 0; diff --git a/utils/sql/git/required/2021_02_17_server_scheduled_events.sql b/utils/sql/git/required/2021_02_17_server_scheduled_events.sql deleted file mode 100644 index deb69423f..000000000 --- a/utils/sql/git/required/2021_02_17_server_scheduled_events.sql +++ /dev/null @@ -1,21 +0,0 @@ -CREATE TABLE `server_scheduled_events` -( - `id` int(11) NOT NULL AUTO_INCREMENT, - `description` varchar(255) DEFAULT NULL, - `event_type` varchar(100) DEFAULT NULL, - `event_data` text DEFAULT NULL, - `minute_start` int(11) DEFAULT 0, - `hour_start` int(11) DEFAULT 0, - `day_start` int(11) DEFAULT 0, - `month_start` int(11) DEFAULT 0, - `year_start` int(11) DEFAULT 0, - `minute_end` int(11) DEFAULT 0, - `hour_end` int(11) DEFAULT 0, - `day_end` int(11) DEFAULT 0, - `month_end` int(11) DEFAULT 0, - `year_end` int(11) DEFAULT 0, - `cron_expression` varchar(100) DEFAULT NULL, - `created_at` datetime DEFAULT NULL, - `deleted_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; diff --git a/utils/sql/git/required/2021_03_03_instance_safereturns.sql b/utils/sql/git/required/2021_03_03_instance_safereturns.sql deleted file mode 100644 index 73c522234..000000000 --- a/utils/sql/git/required/2021_03_03_instance_safereturns.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE `character_instance_safereturns` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `character_id` int(10) unsigned NOT NULL, - `instance_zone_id` int(11) NOT NULL DEFAULT 0, - `instance_id` int(11) NOT NULL DEFAULT 0, - `safe_zone_id` int(11) NOT NULL DEFAULT 0, - `safe_x` float NOT NULL DEFAULT 0, - `safe_y` float NOT NULL DEFAULT 0, - `safe_z` float NOT NULL DEFAULT 0, - `safe_heading` float NOT NULL DEFAULT 0, - PRIMARY KEY (`id`), - UNIQUE KEY `character_id` (`character_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; diff --git a/utils/sql/git/required/2021_03_30_remove_dz_is_current_member.sql b/utils/sql/git/required/2021_03_30_remove_dz_is_current_member.sql deleted file mode 100644 index c3293ac2d..000000000 --- a/utils/sql/git/required/2021_03_30_remove_dz_is_current_member.sql +++ /dev/null @@ -1,6 +0,0 @@ --- remove any non-current members for new behavior -DELETE FROM `dynamic_zone_members` -WHERE is_current_member = 0; - -ALTER TABLE `dynamic_zone_members` - DROP COLUMN `is_current_member`; diff --git a/utils/sql/git/required/2021_04_17_zone_safe_heading_changes.sql b/utils/sql/git/required/2021_04_17_zone_safe_heading_changes.sql deleted file mode 100644 index c10a5c6ff..000000000 --- a/utils/sql/git/required/2021_04_17_zone_safe_heading_changes.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE zone ADD COLUMN safe_heading float NOT NULL DEFAULT 0 AFTER safe_z; diff --git a/utils/sql/git/required/2021_04_23_character_exp_modifiers.sql b/utils/sql/git/required/2021_04_23_character_exp_modifiers.sql deleted file mode 100644 index 4a1bcb5de..000000000 --- a/utils/sql/git/required/2021_04_23_character_exp_modifiers.sql +++ /dev/null @@ -1,7 +0,0 @@ -CREATE TABLE `character_exp_modifiers` ( - `character_id` int NOT NULL, - `zone_id` int NOT NULL, - `aa_modifier` float NOT NULL, - `exp_modifier` float NOT NULL, - PRIMARY KEY (`character_id`, `zone_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; diff --git a/utils/sql/git/required/2021_04_28_idle_pathing.sql b/utils/sql/git/required/2021_04_28_idle_pathing.sql deleted file mode 100644 index 2249163fc..000000000 --- a/utils/sql/git/required/2021_04_28_idle_pathing.sql +++ /dev/null @@ -1,13 +0,0 @@ --- Add new path_when_zone_idle flag to allow some spawns to path in empty zones -ALTER TABLE spawn2 ADD COLUMN path_when_zone_idle tinyint(1) NOT NULL DEFAULT 0 AFTER pathgrid; - --- Update spawns that used to path in empty zones because of their grid type --- to behave the same using the new mechanism. The code that checked path grid --- types has been removed as it was coincidentally coupled to idle movement. --- The new flag path_when_zone_idle is the new mechanism, and allows any moving --- mob, not just those on grids, to path while the zone is idle. -UPDATE spawn2 s -LEFT JOIN zone z ON z.short_name = s.zone -LEFT JOIN grid g ON g.id = s.pathgrid AND g.zoneid = z.zoneidnumber -SET path_when_zone_idle = 1 -WHERE pathgrid != 0 AND g.type IN (4, 6); diff --git a/utils/sql/git/required/2021_05_21_shared_tasks.sql b/utils/sql/git/required/2021_05_21_shared_tasks.sql deleted file mode 100644 index 351cb5ba8..000000000 --- a/utils/sql/git/required/2021_05_21_shared_tasks.sql +++ /dev/null @@ -1,97 +0,0 @@ --- shared task tables -CREATE TABLE `shared_tasks` -( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `task_id` int(11) DEFAULT NULL, - `accepted_time` datetime DEFAULT NULL, - `expire_time` datetime DEFAULT NULL, - `completion_time` datetime DEFAULT NULL, - `is_locked` tinyint(1) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; - -CREATE TABLE `shared_task_members` -( - `shared_task_id` bigint(20) NOT NULL, - `character_id` bigint(20) NOT NULL, - `is_leader` tinyint(4) DEFAULT NULL, - PRIMARY KEY (`shared_task_id`, `character_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -CREATE TABLE `shared_task_activity_state` -( - `shared_task_id` bigint(20) NOT NULL, - `activity_id` int(11) NOT NULL, - `done_count` int(11) DEFAULT NULL, - `updated_time` datetime DEFAULT NULL, - `completed_time` datetime DEFAULT NULL, - PRIMARY KEY (`shared_task_id`, `activity_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -CREATE TABLE `shared_task_dynamic_zones` -( - `shared_task_id` bigint(20) NOT NULL, - `dynamic_zone_id` int(10) unsigned NOT NULL, - PRIMARY KEY (`shared_task_id`, `dynamic_zone_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- completed shared task tables - simply stores completed for reporting and logging - -CREATE TABLE `completed_shared_tasks` -( - `id` bigint(20) NOT NULL, - `task_id` int(11) DEFAULT NULL, - `accepted_time` datetime DEFAULT NULL, - `expire_time` datetime DEFAULT NULL, - `completion_time` datetime DEFAULT NULL, - `is_locked` tinyint(1) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -CREATE TABLE `completed_shared_task_members` -( - `shared_task_id` bigint(20) NOT NULL, - `character_id` bigint(20) NOT NULL, - `is_leader` tinyint(4) DEFAULT NULL, - PRIMARY KEY (`shared_task_id`, `character_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -CREATE TABLE `completed_shared_task_activity_state` -( - `shared_task_id` bigint(20) NOT NULL, - `activity_id` int(11) NOT NULL, - `done_count` int(11) DEFAULT NULL, - `updated_time` datetime DEFAULT NULL, - `completed_time` datetime DEFAULT NULL, - PRIMARY KEY (`shared_task_id`, `activity_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- tasks - -ALTER TABLE `tasks` - ADD COLUMN `level_spread` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `maxlevel`, - ADD COLUMN `min_players` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `level_spread`, - ADD COLUMN `max_players` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `min_players`, - ADD COLUMN `replay_timer_seconds` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `completion_emote`, - ADD COLUMN `request_timer_seconds` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `replay_timer_seconds`; - --- character timers - -CREATE TABLE `character_task_timers` -( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `character_id` int(10) unsigned NOT NULL DEFAULT 0, - `task_id` int(10) unsigned NOT NULL DEFAULT 0, - `timer_type` int(11) NOT NULL DEFAULT 0, - `expire_time` datetime NOT NULL DEFAULT current_timestamp(), - PRIMARY KEY (`id`), - KEY `character_id` (`character_id`), - KEY `task_id` (`task_id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -ALTER TABLE `tasks` - CHANGE COLUMN `completion_emote` `completion_emote` VARCHAR (512) NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci' AFTER `faction_reward`; - -ALTER TABLE `tasks` - ADD COLUMN `reward_radiant_crystals` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `rewardmethod`, - ADD COLUMN `reward_ebon_crystals` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `reward_radiant_crystals`; diff --git a/utils/sql/git/required/2021_06_06_beastlord_pets.sql b/utils/sql/git/required/2021_06_06_beastlord_pets.sql deleted file mode 100644 index afa9229c0..000000000 --- a/utils/sql/git/required/2021_06_06_beastlord_pets.sql +++ /dev/null @@ -1,28 +0,0 @@ -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for pets_beastlord_data --- ---------------------------- -DROP TABLE IF EXISTS `pets_beastlord_data`; -CREATE TABLE `pets_beastlord_data` ( - `player_race` int UNSIGNED NOT NULL DEFAULT 1, - `pet_race` int UNSIGNED NOT NULL DEFAULT 42, - `texture` tinyint UNSIGNED NOT NULL DEFAULT 0, - `helm_texture` tinyint UNSIGNED NOT NULL DEFAULT 0, - `gender` tinyint UNSIGNED NOT NULL DEFAULT 2, - `size_modifier` float UNSIGNED NULL DEFAULT 1, - `face` tinyint UNSIGNED NOT NULL DEFAULT 0, - PRIMARY KEY (`player_race`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; - --- ---------------------------- --- Records of pets_beastlord_data --- ---------------------------- -INSERT INTO `pets_beastlord_data` VALUES (2, 42, 2, 0, 2, 1, 0); -- Barbarian -INSERT INTO `pets_beastlord_data` VALUES (9, 91, 0, 0, 2, 2.5, 0); -- Troll -INSERT INTO `pets_beastlord_data` VALUES (10, 43, 3, 0, 2, 1, 0); -- Ogre -INSERT INTO `pets_beastlord_data` VALUES (128, 42, 0, 0, 1, 2, 0); -- Iksar -INSERT INTO `pets_beastlord_data` VALUES (130, 63, 0, 0, 2, 0.8, 0); -- Vah Shir - -SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/utils/sql/git/required/2021_06_06_dynamic_zone_moved_columns.sql b/utils/sql/git/required/2021_06_06_dynamic_zone_moved_columns.sql deleted file mode 100644 index 29635e8af..000000000 --- a/utils/sql/git/required/2021_06_06_dynamic_zone_moved_columns.sql +++ /dev/null @@ -1,23 +0,0 @@ -ALTER TABLE `dynamic_zones` - ADD COLUMN `uuid` VARCHAR(36) NOT NULL COLLATE 'latin1_swedish_ci' AFTER `type`, - ADD COLUMN `name` VARCHAR(128) NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci' AFTER `uuid`, - ADD COLUMN `leader_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `name`, - ADD COLUMN `min_players` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `leader_id`, - ADD COLUMN `max_players` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `min_players`; - --- migrate any currently active expeditions -UPDATE dynamic_zones -INNER JOIN expeditions ON expeditions.dynamic_zone_id = dynamic_zones.id -SET - dynamic_zones.uuid = expeditions.uuid, - dynamic_zones.name = expeditions.expedition_name, - dynamic_zones.leader_id = expeditions.leader_id, - dynamic_zones.min_players = expeditions.min_players, - dynamic_zones.max_players = expeditions.max_players; - -ALTER TABLE `expeditions` - DROP COLUMN `uuid`, - DROP COLUMN `expedition_name`, - DROP COLUMN `leader_id`, - DROP COLUMN `min_players`, - DROP COLUMN `max_players`; diff --git a/utils/sql/git/required/2021_08_31_pvp_duration.sql b/utils/sql/git/required/2021_08_31_pvp_duration.sql deleted file mode 100644 index e0fe00bfc..000000000 --- a/utils/sql/git/required/2021_08_31_pvp_duration.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `spells_new` CHANGE `field181` `pvp_duration` int(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field182` `pvp_duration_cap` int(11) NOT NULL DEFAULT '0'; diff --git a/utils/sql/git/required/2021_09_14_zone_lava_damage.sql b/utils/sql/git/required/2021_09_14_zone_lava_damage.sql deleted file mode 100644 index f6a5d00d1..000000000 --- a/utils/sql/git/required/2021_09_14_zone_lava_damage.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE zone ADD lava_damage INT(11) NULL DEFAULT '50' AFTER underworld_teleport_index, ADD min_lava_damage INT(11) NOT NULL DEFAULT '10' AFTER lava_damage; diff --git a/utils/sql/git/required/2021_10_09_not_null_door_columns.sql b/utils/sql/git/required/2021_10_09_not_null_door_columns.sql deleted file mode 100644 index 7aed58b6f..000000000 --- a/utils/sql/git/required/2021_10_09_not_null_door_columns.sql +++ /dev/null @@ -1,18 +0,0 @@ --- update any null columns to non-null value first to avoid data truncation errors --- this will likely only affect the buffer column -update `doors` set `doors`.`dest_x` = 0 where `doors`.`dest_x` is null; -update `doors` set `doors`.`dest_y` = 0 where `doors`.`dest_y` is null; -update `doors` set `doors`.`dest_z` = 0 where `doors`.`dest_z` is null; -update `doors` set `doors`.`dest_heading` = 0 where `doors`.`dest_heading` is null; -update `doors` set `doors`.`invert_state` = 0 where `doors`.`invert_state` is null; -update `doors` set `doors`.`incline` = 0 where `doors`.`incline` is null; -update `doors` set `doors`.`buffer` = 0 where `doors`.`buffer` is null; - -ALTER TABLE `doors` - CHANGE COLUMN `dest_x` `dest_x` FLOAT NOT NULL DEFAULT '0' AFTER `dest_instance`, - CHANGE COLUMN `dest_y` `dest_y` FLOAT NOT NULL DEFAULT '0' AFTER `dest_x`, - CHANGE COLUMN `dest_z` `dest_z` FLOAT NOT NULL DEFAULT '0' AFTER `dest_y`, - CHANGE COLUMN `dest_heading` `dest_heading` FLOAT NOT NULL DEFAULT '0' AFTER `dest_z`, - CHANGE COLUMN `invert_state` `invert_state` INT(11) NOT NULL DEFAULT '0' AFTER `dest_heading`, - CHANGE COLUMN `incline` `incline` INT(11) NOT NULL DEFAULT '0' AFTER `invert_state`, - CHANGE COLUMN `buffer` `buffer` FLOAT NOT NULL DEFAULT '0' AFTER `size`; diff --git a/utils/sql/git/required/2022_01_02_expansion_default_value_all.sql b/utils/sql/git/required/2022_01_02_expansion_default_value_all.sql deleted file mode 100644 index 3b2261014..000000000 --- a/utils/sql/git/required/2022_01_02_expansion_default_value_all.sql +++ /dev/null @@ -1,117 +0,0 @@ --- forage - -ALTER TABLE `forage` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `forage` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE forage set min_expansion = -1 where min_expansion = 0; -UPDATE forage set max_expansion = -1 where max_expansion = 0; - --- tradeskill_recipe - -ALTER TABLE `tradeskill_recipe` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `tradeskill_recipe` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE tradeskill_recipe set min_expansion = -1 where min_expansion = 0; -UPDATE tradeskill_recipe set max_expansion = -1 where max_expansion = 0; - --- fishing - -ALTER TABLE `fishing` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `fishing` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE fishing set min_expansion = -1 where min_expansion = 0; -UPDATE fishing set max_expansion = -1 where max_expansion = 0; - --- zone - -ALTER TABLE `zone` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `zone` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE zone set min_expansion = -1 where min_expansion = 0; -UPDATE zone set max_expansion = -1 where max_expansion = 0; - --- traps - -ALTER TABLE `traps` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `traps` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE traps set min_expansion = -1 where min_expansion = 0; -UPDATE traps set max_expansion = -1 where max_expansion = 0; - --- loottable - -ALTER TABLE `loottable` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `loottable` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE loottable set min_expansion = -1 where min_expansion = 0; -UPDATE loottable set max_expansion = -1 where max_expansion = 0; - --- ground_spawns - -ALTER TABLE `ground_spawns` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `ground_spawns` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE ground_spawns set min_expansion = -1 where min_expansion = 0; -UPDATE ground_spawns set max_expansion = -1 where max_expansion = 0; - --- starting_items - -ALTER TABLE `starting_items` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `starting_items` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE starting_items set min_expansion = -1 where min_expansion = 0; -UPDATE starting_items set max_expansion = -1 where max_expansion = 0; - --- spawn2 - -ALTER TABLE `spawn2` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `spawn2` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE spawn2 set min_expansion = -1 where min_expansion = 0; -UPDATE spawn2 set max_expansion = -1 where max_expansion = 0; - --- zone_points - -ALTER TABLE `zone_points` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `zone_points` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE zone_points set min_expansion = -1 where min_expansion = 0; -UPDATE zone_points set max_expansion = -1 where max_expansion = 0; - --- lootdrop - -ALTER TABLE `lootdrop` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `lootdrop` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE lootdrop set min_expansion = -1 where min_expansion = 0; -UPDATE lootdrop set max_expansion = -1 where max_expansion = 0; - --- global_loot - -ALTER TABLE `global_loot` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `global_loot` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE global_loot set min_expansion = -1 where min_expansion = 0; -UPDATE global_loot set max_expansion = -1 where max_expansion = 0; - --- doors - -ALTER TABLE `doors` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `doors` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE doors set min_expansion = -1 where min_expansion = 0; -UPDATE doors set max_expansion = -1 where max_expansion = 0; - --- object - -ALTER TABLE `object` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `object` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE object set min_expansion = -1 where min_expansion = 0; -UPDATE object set max_expansion = -1 where max_expansion = 0; - --- start_zones - -ALTER TABLE `start_zones` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `start_zones` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE start_zones set min_expansion = -1 where min_expansion = 0; -UPDATE start_zones set max_expansion = -1 where max_expansion = 0; - --- merchantlist - -ALTER TABLE `merchantlist` CHANGE `max_expansion` `max_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -ALTER TABLE `merchantlist` CHANGE `min_expansion` `min_expansion` tinyint(4) NOT NULL DEFAULT -1 COMMENT ''; -UPDATE merchantlist set min_expansion = -1 where min_expansion = 0; -UPDATE merchantlist set max_expansion = -1 where max_expansion = 0; - --- spawnentry -ALTER TABLE `spawnentry` ADD `min_expansion` tinyint(4) NOT NULL DEFAULT -1; -ALTER TABLE `spawnentry` ADD `max_expansion` tinyint(4) NOT NULL DEFAULT -1; -ALTER TABLE `spawnentry` ADD `content_flags` varchar(100) NULL; -ALTER TABLE `spawnentry` ADD `content_flags_disabled` varchar(100) NULL; diff --git a/utils/sql/git/required/2022_01_10_checksum_verification.sql b/utils/sql/git/required/2022_01_10_checksum_verification.sql deleted file mode 100644 index ce70b75bb..000000000 --- a/utils/sql/git/required/2022_01_10_checksum_verification.sql +++ /dev/null @@ -1,10 +0,0 @@ -INSERT INTO `variables` (`varname`, `value`, `information`, `ts`) VALUES ('crc_eqgame', '0', 'Client CRC64 Checksum on: eqgame.exe', '2021-09-23 14:16:27'); -INSERT INTO `variables` (`varname`, `value`, `information`, `ts`) VALUES ('crc_skillcaps', '0', 'Client CRC64 Checksum on: SkillCaps.txt', '2021-09-23 14:16:21'); -INSERT INTO `variables` (`varname`, `value`, `information`, `ts`) VALUES ('crc_basedata', '0', 'Client CRC64 Checksum on: BaseData.txt','2021-09-23 14:16:21'); - -ALTER TABLE `account` - ADD COLUMN `crc_eqgame` TEXT NULL AFTER `suspend_reason`, - ADD COLUMN `crc_skillcaps` TEXT NULL AFTER `crc_eqgame`, - ADD COLUMN `crc_basedata` TEXT NULL AFTER `crc_skillcaps`; - -ALTER TABLE `account` CHANGE `suspendeduntil` `suspendeduntil` datetime NULL COMMENT ''; diff --git a/utils/sql/git/required/2022_03_06_table_structure_changes.sql b/utils/sql/git/required/2022_03_06_table_structure_changes.sql deleted file mode 100644 index b6fa3eff4..000000000 --- a/utils/sql/git/required/2022_03_06_table_structure_changes.sql +++ /dev/null @@ -1,11 +0,0 @@ -ALTER TABLE `pets` DROP PRIMARY KEY; -ALTER TABLE `pets` ADD `id` int(20) PRIMARY KEY NOT NULL AUTO_INCREMENT FIRST; -CREATE UNIQUE INDEX `type_petpower` ON pets (type, petpower); - -ALTER TABLE `horses` DROP PRIMARY KEY; -ALTER TABLE `horses` ADD `id` int(20) PRIMARY KEY NOT NULL AUTO_INCREMENT FIRST; -CREATE UNIQUE INDEX `filename` ON horses (filename); - -ALTER TABLE books DROP INDEX `id`; -ALTER TABLE `books` ADD `id` int(20) PRIMARY KEY NOT NULL AUTO_INCREMENT FIRST; -CREATE UNIQUE INDEX `filename` ON books (name); diff --git a/utils/sql/git/required/2022_03_07_saylink_collation.sql b/utils/sql/git/required/2022_03_07_saylink_collation.sql deleted file mode 100644 index 7ccc932f4..000000000 --- a/utils/sql/git/required/2022_03_07_saylink_collation.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE saylink CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; diff --git a/utils/sql/git/required/2022_04_30_hp_regen_per_second.sql b/utils/sql/git/required/2022_04_30_hp_regen_per_second.sql deleted file mode 100644 index 6f61ae838..000000000 --- a/utils/sql/git/required/2022_04_30_hp_regen_per_second.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE npc_types ADD COLUMN hp_regen_per_second bigint DEFAULT 0 AFTER hp_regen_rate; diff --git a/utils/sql/git/required/2022_05_01_character_peqzone_flags.sql b/utils/sql/git/required/2022_05_01_character_peqzone_flags.sql deleted file mode 100644 index 9e4436ada..000000000 --- a/utils/sql/git/required/2022_05_01_character_peqzone_flags.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for character_peqzone_flags --- ---------------------------- -DROP TABLE IF EXISTS `character_peqzone_flags`; -CREATE TABLE `character_peqzone_flags` ( - `id` int NOT NULL DEFAULT 0, - `zone_id` int NOT NULL DEFAULT 0, - PRIMARY KEY (`id`, `zone_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; - -SET FOREIGN_KEY_CHECKS = 1; diff --git a/utils/sql/git/required/2022_05_02_npc_types_int64.sql b/utils/sql/git/required/2022_05_02_npc_types_int64.sql deleted file mode 100644 index fb52824ee..000000000 --- a/utils/sql/git/required/2022_05_02_npc_types_int64.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE npc_types MODIFY COLUMN hp BIGINT NOT NULL DEFAULT 0; -ALTER TABLE npc_types MODIFY COLUMN mana BIGINT NOT NULL DEFAULT 0; -ALTER TABLE npc_types MODIFY COLUMN hp_regen_rate BIGINT NOT NULL DEFAULT 0; -ALTER TABLE npc_types MODIFY COLUMN mana_regen_rate BIGINT NOT NULL DEFAULT 0; diff --git a/utils/sql/git/required/2022_05_03_task_activity_goal_match_list.sql b/utils/sql/git/required/2022_05_03_task_activity_goal_match_list.sql deleted file mode 100644 index ab4a486de..000000000 --- a/utils/sql/git/required/2022_05_03_task_activity_goal_match_list.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE task_activities ADD goal_match_list text AFTER goalid; diff --git a/utils/sql/git/required/2022_05_07_discord_webhooks.sql b/utils/sql/git/required/2022_05_07_discord_webhooks.sql deleted file mode 100644 index 9f368c13e..000000000 --- a/utils/sql/git/required/2022_05_07_discord_webhooks.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE discord_webhooks -( - id INT auto_increment primary key NULL, - webhook_name varchar(100) NULL, - webhook_url varchar(255) NULL, - created_at DATETIME NULL, - deleted_at DATETIME NULL -) ENGINE=InnoDB -DEFAULT CHARSET=utf8mb4 -COLLATE=utf8mb4_general_ci; - -ALTER TABLE logsys_categories - ADD log_to_discord smallint(11) default 0 AFTER log_to_gmsay; -ALTER TABLE logsys_categories - ADD discord_webhook_id int(11) default 0 AFTER log_to_discord; diff --git a/utils/sql/git/required/2022_05_07_merchant_data_buckets.sql b/utils/sql/git/required/2022_05_07_merchant_data_buckets.sql deleted file mode 100644 index 5b2ff8ec5..000000000 --- a/utils/sql/git/required/2022_05_07_merchant_data_buckets.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE `merchantlist` -ADD COLUMN `bucket_name` varchar(100) NOT NULL DEFAULT '' AFTER `probability`, -ADD COLUMN `bucket_value` varchar(100) NOT NULL DEFAULT '' AFTER `bucket_name`, -ADD COLUMN `bucket_comparison` tinyint UNSIGNED NULL DEFAULT 0 AFTER `bucket_value`; \ No newline at end of file diff --git a/utils/sql/git/required/2022_05_21_schema_consistency.sql b/utils/sql/git/required/2022_05_21_schema_consistency.sql deleted file mode 100644 index 5f8004f15..000000000 --- a/utils/sql/git/required/2022_05_21_schema_consistency.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE npc_types MODIFY COLUMN hp BIGINT NOT NULL DEFAULT 0; -ALTER TABLE npc_types MODIFY COLUMN mana BIGINT NOT NULL DEFAULT 0; -ALTER TABLE npc_types MODIFY COLUMN hp_regen_rate BIGINT NOT NULL DEFAULT 0; -ALTER TABLE npc_types MODIFY COLUMN mana_regen_rate BIGINT NOT NULL DEFAULT 0; -ALTER TABLE npc_types MODIFY COLUMN hp_regen_per_second BIGINT NOT NULL DEFAULT 0; diff --git a/utils/sql/git/required/2022_07_09_task_zone_version_matching.sql b/utils/sql/git/required/2022_07_09_task_zone_version_matching.sql deleted file mode 100644 index 8421ab418..000000000 --- a/utils/sql/git/required/2022_07_09_task_zone_version_matching.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `task_activities` ADD COLUMN `zone_version` int(11) default -1 AFTER zones; diff --git a/utils/sql/git/required/2022_07_09_zone_expansion_deprecate.sql b/utils/sql/git/required/2022_07_09_zone_expansion_deprecate.sql deleted file mode 100644 index e69de29bb..000000000 diff --git a/utils/sql/git/required/2022_07_10_character_task_rewarded.sql b/utils/sql/git/required/2022_07_10_character_task_rewarded.sql deleted file mode 100644 index 3e70ef199..000000000 --- a/utils/sql/git/required/2022_07_10_character_task_rewarded.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `character_tasks` - ADD COLUMN `was_rewarded` TINYINT NOT NULL DEFAULT '0' AFTER `acceptedtime`; diff --git a/utils/sql/git/required/2022_07_13_task_lock_activity.sql b/utils/sql/git/required/2022_07_13_task_lock_activity.sql deleted file mode 100644 index 2c4f15321..000000000 --- a/utils/sql/git/required/2022_07_13_task_lock_activity.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `tasks` - ADD COLUMN `lock_activity_id` INT NOT NULL DEFAULT '-1' AFTER `request_timer_seconds`; diff --git a/utils/sql/git/required/2022_07_13_task_reward_points.sql b/utils/sql/git/required/2022_07_13_task_reward_points.sql deleted file mode 100644 index a27b8c20e..000000000 --- a/utils/sql/git/required/2022_07_13_task_reward_points.sql +++ /dev/null @@ -1,13 +0,0 @@ -ALTER TABLE `tasks` - ADD COLUMN `reward_points` INT NOT NULL DEFAULT '0' AFTER `rewardmethod`, - ADD COLUMN `reward_point_type` INT NOT NULL DEFAULT '0' AFTER `reward_points`; - --- convert don crystal points to new fields -UPDATE tasks SET reward_point_type = 4 WHERE reward_radiant_crystals > 0; -UPDATE tasks SET reward_point_type = 5 WHERE reward_ebon_crystals > 0; -UPDATE tasks SET reward_points = reward_radiant_crystals WHERE reward_radiant_crystals > 0; -UPDATE tasks SET reward_points = reward_ebon_crystals WHERE reward_ebon_crystals > 0; - -ALTER TABLE `tasks` - DROP COLUMN `reward_radiant_crystals`, - DROP COLUMN `reward_ebon_crystals`; diff --git a/utils/sql/git/required/2022_07_14_zone_expansion_revert.sql b/utils/sql/git/required/2022_07_14_zone_expansion_revert.sql deleted file mode 100644 index 8c94d9f91..000000000 --- a/utils/sql/git/required/2022_07_14_zone_expansion_revert.sql +++ /dev/null @@ -1,593 +0,0 @@ -ALTER table zone ADD `expansion` tinyint(3) NOT NULL DEFAULT 0; - -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 160; -- halas -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 146; -- guildlobby -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 145; -- guildhall -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 144; -- guardian -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 143; -- growthplane -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 142; -- grobb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 141; -- grimling -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 140; -- griegsend -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 139; -- greatdivide -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 138; -- gfaydark -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 137; -- fungusgrove -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 147; -- guka -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 148; -- gukb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 149; -- gukbottom -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 159; -- gyrospirez -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 158; -- gyrospireb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 6 WHERE `id` = 157; -- gunthak -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 156; -- guktop -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 155; -- gukh -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 154; -- gukg -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 153; -- gukf -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 152; -- guke -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 151; -- gukd -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 150; -- gukc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 136; -- frozenshadow -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 135; -- frostcrypt -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 134; -- frontiermtns -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 120; -- firiona -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 119; -- fieldofbone -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 118; -- fhalls -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 117; -- ferubi -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 116; -- felwitheb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 115; -- felwithea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 114; -- feerrott -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 113; -- fearplane -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 112; -- everfrost -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 99 WHERE `id` = 111; -- erudsxing2 -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 121; -- freeportacademy -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 122; -- freeportarena -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 123; -- freeportcityhall -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 133; -- freportw -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 132; -- freportn -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 131; -- freporte -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 130; -- freeportwest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 129; -- freeporttheater -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 128; -- freeporttemple -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 127; -- freeportsewers -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 126; -- freeportmilitia -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 125; -- freeporthall -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 124; -- freeporteast -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 110; -- erudsxing -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 211; -- mechanotus -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 197; -- kodtaz -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 196; -- kithicor -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 195; -- kithforest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 194; -- kerraridge -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 193; -- kedge -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 192; -- kattacastrum -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 191; -- katta -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 190; -- karnor -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 189; -- kaladimb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 188; -- kaladima -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 198; -- korascian -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 199; -- kurn -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 200; -- lakeofillomen -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 210; -- mansion -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 209; -- maidensgrave -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 208; -- maiden -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 207; -- lopingplains -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 99 WHERE `id` = 206; -- load2 -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 99 WHERE `id` = 205; -- load -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 204; -- lfaydark -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 203; -- letalis -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 202; -- lavastorm -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 201; -- lakerathe -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 187; -- kaesora -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 186; -- kael -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 185; -- jardelshook -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 171; -- hohonorb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 170; -- hohonora -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 169; -- hillsofshade -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 168; -- highpasskeep -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 167; -- highpasshold -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 166; -- highpass -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 165; -- highkeep -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 6 WHERE `id` = 164; -- hatesfury -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 163; -- hateplaneb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 162; -- hateplane -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 172; -- hole -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 173; -- hollowshade -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 174; -- iceclad -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 184; -- jaggedpine -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 183; -- innothuleb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 182; -- innothule -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 181; -- inktuta -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 180; -- illsalinc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 179; -- illsalinb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 178; -- illsalina -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 177; -- illsalin -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 176; -- ikkinz -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 175; -- icefall -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 161; -- harbingers -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 51; -- commons -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 37; -- chambersa -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 36; -- cazicthule -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 35; -- causeway -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 34; -- cauldron -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 33; -- cabwest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 32; -- cabeast -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 31; -- butcher -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 30; -- burningwood -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 29; -- buriedsea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 28; -- broodlands -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 38; -- chambersb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 39; -- chambersc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 40; -- chambersd -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 50; -- commonlands -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 49; -- codecay -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 48; -- cobaltscar -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 99 WHERE `id` = 47; -- clz -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 46; -- citymist -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 6 WHERE `id` = 45; -- chardokb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 44; -- chardok -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 43; -- charasis -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 42; -- chambersf -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 41; -- chamberse -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 27; -- bothunder -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 26; -- bloodmoon -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 25; -- bloodfields -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 99 WHERE `id` = 11; -- arttest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 99 WHERE `id` = 10; -- arena2 -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 9; -- arena -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 8; -- arcstone -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 99 WHERE `id` = 7; -- apprentice -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 6; -- anguish -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 5; -- akheva -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 4; -- akanon -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 3; -- airplane -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 2; -- acrylia -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 12; -- ashengate -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 13; -- atiiki -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 99 WHERE `id` = 14; -- aviak -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 24; -- blacksail -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 23; -- blackburrow -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 22; -- bertoxtemple -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 21; -- beholder -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 20; -- befallenb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 19; -- befallen -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 18; -- bazaar -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 17; -- barter -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 16; -- barren -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 15; -- barindu -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 1; -- abysmal -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 109; -- erudnint -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 95; -- dreadlands -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 94; -- draniksscar -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 93; -- draniksewersc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 92; -- draniksewersb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 91; -- draniksewersa -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 83; -- dranikhollowsc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 82; -- dranikhollowsb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 81; -- dranikhollowsa -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 80; -- dranikcatacombsc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 79; -- dranikcatacombsb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 96; -- dreadspire -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 97; -- droga -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 6 WHERE `id` = 98; -- dulak -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 108; -- erudnext -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 107; -- emeraldjungle -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 106; -- elddara -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 105; -- elddar -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 104; -- ecommons -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 103; -- echo -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 102; -- eastwastes -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 101; -- eastkorlacha -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 100; -- eastkorlach -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 99; -- eastkarana -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 78; -- dranikcatacombsa -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 77; -- dranik -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 76; -- dragonscaleb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 62; -- dawnshroud -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 61; -- dalnir -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 60; -- cshome -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 59; -- crystallos -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 58; -- crystal -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 57; -- cryptofshade -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 56; -- crushbone -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 55; -- crescent -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 54; -- corathusb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 53; -- corathusa -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 63; -- deadbone -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 64; -- delvea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 65; -- delveb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 75; -- dragonscale -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 74; -- drachnidhivec -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 73; -- drachnidhiveb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 72; -- drachnidhivea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 71; -- drachnidhive -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 70; -- discordtower -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 69; -- discord -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 68; -- direwind -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 67; -- devastation -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 66; -- devastationa -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 52; -- corathus -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5975; -- westkorlachb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5957; -- delveb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5956; -- delveb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5954; -- delveb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5953; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5952; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5951; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5949; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5946; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5958; -- delvea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5959; -- delveb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5961; -- delvea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 5974; -- rujj -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 5970; -- taka -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 5967; -- mirc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 5966; -- gukc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5965; -- delveb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5964; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5963; -- delvea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5962; -- delvea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5945; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5944; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5943; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5929; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5928; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5927; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5926; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5925; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5924; -- stillmoonb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5923; -- stillmoona -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5921; -- stillmoona -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5930; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5933; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5934; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5942; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5941; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5940; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5939; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5938; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5937; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5936; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5935; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5920; -- stillmoona -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5976; -- westkorlacha -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 6019; -- gukg -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6007; -- drachnidhive -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6006; -- drachnidhive -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6005; -- drachnidhivea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6004; -- drachnidhivea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6003; -- drachnidhivea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6002; -- drachnidhiveb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6001; -- illsalinb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6000; -- illsalinb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6008; -- drachnidhive -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6009; -- drachnidhive -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6010; -- drachnidhive -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 6018; -- take -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6017; -- eastkorlach -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6016; -- illsalinc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6015; -- illsalinc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6014; -- illsalinc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6013; -- illsalinc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6012; -- westkorlacha -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 6011; -- corathusb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5999; -- illsalinb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5998; -- illsalinb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5997; -- westkorlach -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5985; -- westkorlachc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5984; -- westkorlachc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5983; -- westkorlachc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5982; -- westkorlachc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5981; -- illsalina -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5980; -- dreadspire -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5979; -- corathusb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5978; -- corathusb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5986; -- westkorlachc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5987; -- westkorlachc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5988; -- drachnidhivec -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5996; -- westkorlach -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5995; -- westkorlach -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5994; -- corathusa -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5993; -- corathusa -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5992; -- eastkorlacha -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5991; -- eastkorlacha -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5990; -- eastkorlacha -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5989; -- shadowspine -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 5977; -- westkorlacha -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 19 WHERE `id` = 5873; -- cityofbronze -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 18 WHERE `id` = 5565; -- thulehouse1 -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 18 WHERE `id` = 5564; -- thuledream -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 18 WHERE `id` = 5563; -- somnium -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 18 WHERE `id` = 5562; -- miragulmare -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 18 WHERE `id` = 5561; -- housegarden -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 18 WHERE `id` = 5560; -- feerrott2 -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 18 WHERE `id` = 5559; -- fallen -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 18 WHERE `id` = 5558; -- alkabormare -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 18 WHERE `id` = 5566; -- thulehouse2 -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 18 WHERE `id` = 5567; -- well -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 18 WHERE `id` = 5568; -- neighborhood -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 19 WHERE `id` = 5872; -- windsong -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 19 WHERE `id` = 5871; -- pillarsalra -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 19 WHERE `id` = 5870; -- resplendent -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 19 WHERE `id` = 5869; -- beastdomain -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 19 WHERE `id` = 5868; -- rubak -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 19 WHERE `id` = 5867; -- sarithcity -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 19 WHERE `id` = 5866; -- arelis -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 19 WHERE `id` = 5865; -- argath -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 18 WHERE `id` = 5557; -- morellcastle -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 18 WHERE `id` = 5556; -- thulelibrary -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 448; -- convorteum -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 435; -- westkorlachc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 434; -- westkorlachb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 433; -- westkorlacha -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 432; -- westkorlach -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 431; -- warslikswood -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 430; -- warrens -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 429; -- wallofslaughter -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 428; -- wakening -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 436; -- westwastes -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 437; -- yxtta -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 438; -- zhisza -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 447; -- stonesnake -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 446; -- brellsarena -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 445; -- underquarry -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 444; -- foundation -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 443; -- arthicrex -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 442; -- pellucid -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 441; -- coolingchamber -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 440; -- brellsrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 427; -- vxed -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5919; -- stillmoona -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5907; -- stillmoonb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5906; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5905; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5904; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5903; -- delveb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5902; -- delvea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5900; -- stillmoona -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5899; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5908; -- delvea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5909; -- delvea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5910; -- delvea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5918; -- stillmoona -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5917; -- stillmoona -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5916; -- stillmoona -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5915; -- stillmoona -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5914; -- stillmoonb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5913; -- stillmoonb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5912; -- stillmoonb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5911; -- delvea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5898; -- thundercrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5896; -- stillmoonb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 5895; -- stillmoonb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 5883; -- lichencreep -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 5882; -- fungalforest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 5881; -- brellstemple -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 5880; -- bazaar -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 5879; -- dragoncrypt -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 5878; -- weddingchapeldark -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 5877; -- weddingchapel -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 19 WHERE `id` = 5876; -- westsepulcher -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 19 WHERE `id` = 5875; -- eastsepulcher -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 17 WHERE `id` = 5884; -- shiningcity -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 20 WHERE `id` = 5886; -- breedinggrounds -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 20 WHERE `id` = 5894; -- xorbb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 20 WHERE `id` = 5893; -- shardslanding -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 20 WHERE `id` = 5892; -- kaelshard -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 20 WHERE `id` = 5891; -- grelleth -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 20 WHERE `id` = 5890; -- eviltree -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 20 WHERE `id` = 5889; -- eastwastesshard -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 20 WHERE `id` = 5888; -- crystalshard -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 20 WHERE `id` = 5887; -- chapterhouse -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 19 WHERE `id` = 5874; -- sepulcher -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 371; -- stonehive -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 357; -- soltemple -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 356; -- solrotower -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 6 WHERE `id` = 355; -- soldungc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 354; -- soldungb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 353; -- soldunga -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 352; -- snpool -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 351; -- snplant -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 350; -- snlair -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 349; -- sncrematory -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 348; -- sleeper -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 347; -- skyshrine -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 358; -- solteris -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 359; -- southkarana -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 370; -- stonebrunt -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 369; -- stillmoonb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 368; -- stillmoona -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 367; -- steppes -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 366; -- steamfontmts -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 365; -- steamfont -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 364; -- steamfactory -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 363; -- ssratemple -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 362; -- sseru -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 361; -- sro -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 360; -- southro -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 346; -- skylance -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 345; -- skyfire -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 344; -- sirens -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 330; -- scarlet -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 329; -- runnyeye -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 328; -- rujj -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 327; -- ruji -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 326; -- rujh -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 325; -- rujg -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 324; -- rujf -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 323; -- ruje -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 322; -- rujd -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 321; -- rujc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 320; -- rujb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 331; -- sebilis -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 332; -- shadeweaver -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 343; -- silyssar -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 15 WHERE `id` = 342; -- shipworkshop -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 341; -- shipuvu -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 340; -- shippvu -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 339; -- shipmvu -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 338; -- shipmvp -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 337; -- shipmvm -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 336; -- sharvahl -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 335; -- shadowspine -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 334; -- shadowrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 333; -- shadowhaven -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 319; -- ruja -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 426; -- vexthal -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 412; -- trakanon -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 411; -- toxxulia -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 410; -- tox -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 409; -- toskirakk -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 6 WHERE `id` = 408; -- torgiran -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 407; -- tipt -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 406; -- timorous -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 405; -- thurgadinb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 404; -- thurgadina -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 402; -- thevoidg -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 401; -- thevoidf -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 99 WHERE `id` = 413; -- tutorial -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 414; -- tutoriala -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 425; -- vergalid -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 424; -- velketor -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 423; -- veksar -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 422; -- veeshan -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 421; -- valdeholm -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 420; -- uqua -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 419; -- unrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 418; -- umbral -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 417; -- txevu -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 416; -- twilight -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 415; -- tutorialb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 400; -- thevoide -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 399; -- thevoidd -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 398; -- thevoidc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 384; -- taki -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 383; -- takh -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 382; -- takg -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 381; -- takf -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 380; -- take -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 379; -- takd -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 378; -- takc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 377; -- takb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 375; -- tacvi -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 374; -- swampofnohope -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 373; -- sunderock -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 385; -- takishruins -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 386; -- takishruinsa -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 397; -- thevoidb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 396; -- thevoida -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 10 WHERE `id` = 395; -- thenest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 394; -- thegrey -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 393; -- thedeep -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 392; -- theatera -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 391; -- theater -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 390; -- thalassius -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 389; -- tenebrous -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 388; -- templeveeshan -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 387; -- takj -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 372; -- suncrest -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 318; -- roost -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 264; -- oldblackburrow -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 250; -- neriakc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 249; -- neriakb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 248; -- neriaka -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 11 WHERE `id` = 247; -- nektulosa -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = 10, `expansion` = 1 WHERE `id` = 246; -- nektulos -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 99 WHERE `id` = 245; -- nektropos -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 244; -- nedaria -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 243; -- necropolis -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 242; -- natimbi -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 241; -- najena -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 6 WHERE `id` = 240; -- nadox -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 99 WHERE `id` = 251; -- neriakd -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 252; -- netherbian -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 263; -- oggok -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 262; -- oceanoftears -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 261; -- oceangreenvillage -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 260; -- oceangreenhills -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 259; -- oasis -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 258; -- nurga -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 257; -- nro -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 256; -- northro -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 255; -- northkarana -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 254; -- nightmareb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 253; -- nexus -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 239; -- mseru -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 238; -- moors -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 237; -- monkeyrock -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 3 WHERE `id` = 223; -- mischiefplane -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 222; -- mirj -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 221; -- miri -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 220; -- mirh -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 219; -- mirg -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 218; -- mirf -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 217; -- mire -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 216; -- mird -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 215; -- mirc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 214; -- mirb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 213; -- mira -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 224; -- mistmoore -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 225; -- misty -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 236; -- mmcj -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 235; -- mmci -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 234; -- mmch -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 233; -- mmcg -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 232; -- mmcf -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 231; -- mmce -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 230; -- mmcd -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 229; -- mmcc -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 228; -- mmcb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 7 WHERE `id` = 227; -- mmca -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 226; -- mistythicket -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 13 WHERE `id` = 212; -- mesa -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 317; -- riwwi -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 303; -- qeynos2 -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 302; -- qeynos -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 301; -- qey2hh1 -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 300; -- qcat -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 299; -- provinggrounds -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 298; -- precipiceofwar -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 297; -- powater -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 296; -- powar -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 295; -- povalor -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 294; -- potranquility -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 293; -- potorment -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 304; -- qeytoqrg -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 305; -- qinimi -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 316; -- rivervale -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 9 WHERE `id` = 315; -- riftseekers -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 314; -- relic -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 14 WHERE `id` = 313; -- redfeather -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 312; -- rathemtn -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 311; -- rathechamber -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 310; -- ragea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 12 WHERE `id` = 309; -- rage -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 308; -- qvicb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 8 WHERE `id` = 307; -- qvic -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 306; -- qrg -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 292; -- potimeb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 291; -- potimea -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 290; -- potactics -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 276; -- paineel -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 2 WHERE `id` = 275; -- overthere -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 274; -- oot -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 273; -- oldkurn -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 272; -- oldkithicor -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 271; -- oldkaesorab -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 270; -- oldkaesoraa -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 269; -- oldhighpass -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 268; -- oldfieldofbone -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 267; -- olddranik -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 266; -- oldcommons -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 4 WHERE `id` = 277; -- paludal -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 278; -- paw -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 289; -- postorms -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 288; -- ponightmare -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 287; -- poknowledge -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 286; -- pojustice -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 285; -- poinnovation -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 284; -- pofire -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 283; -- poearthb -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 282; -- poeartha -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 281; -- podisease -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 5 WHERE `id` = 280; -- poair -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 279; -- permafrost -UPDATE `zone` SET `min_expansion` = -1, `max_expansion` = -1, `expansion` = 16 WHERE `id` = 265; -- oldbloodfield -UPDATE `zone` SET `min_expansion` = 10, `max_expansion` = -1, `expansion` = 1 WHERE `id` = 439; -- nektulos diff --git a/utils/sql/git/required/2022_07_16_task_timer_groups.sql b/utils/sql/git/required/2022_07_16_task_timer_groups.sql deleted file mode 100644 index 1dcb96516..000000000 --- a/utils/sql/git/required/2022_07_16_task_timer_groups.sql +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE `tasks` - ADD COLUMN `replay_timer_group` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `completion_emote`, - ADD COLUMN `request_timer_group` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `replay_timer_seconds`; - -ALTER TABLE `character_task_timers` - ADD COLUMN `timer_group` INT NOT NULL DEFAULT '0' AFTER `timer_type`; diff --git a/utils/sql/git/required/2022_07_23_dz_switch_id.sql b/utils/sql/git/required/2022_07_23_dz_switch_id.sql deleted file mode 100644 index 55ecdce71..000000000 --- a/utils/sql/git/required/2022_07_23_dz_switch_id.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE `doors` - ADD COLUMN `dz_switch_id` INT NOT NULL DEFAULT '0' AFTER `is_ldon_door`; - -ALTER TABLE `dynamic_zones` - ADD COLUMN `dz_switch_id` INT NOT NULL DEFAULT '0' AFTER `max_players`; diff --git a/utils/sql/git/required/2022_07_23_dz_templates.sql b/utils/sql/git/required/2022_07_23_dz_templates.sql deleted file mode 100644 index 82759ad6e..000000000 --- a/utils/sql/git/required/2022_07_23_dz_templates.sql +++ /dev/null @@ -1,28 +0,0 @@ -CREATE TABLE `dynamic_zone_templates` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `zone_id` int(11) NOT NULL DEFAULT 0, - `zone_version` int(11) NOT NULL DEFAULT 0, - `name` varchar(128) NOT NULL DEFAULT '', - `min_players` int(11) NOT NULL DEFAULT 0, - `max_players` int(11) NOT NULL DEFAULT 0, - `duration_seconds` int(11) NOT NULL DEFAULT 0, - `dz_switch_id` int(11) NOT NULL DEFAULT 0, - `compass_zone_id` int(11) NOT NULL DEFAULT 0, - `compass_x` float NOT NULL DEFAULT 0, - `compass_y` float NOT NULL DEFAULT 0, - `compass_z` float NOT NULL DEFAULT 0, - `return_zone_id` int(11) NOT NULL DEFAULT 0, - `return_x` float NOT NULL DEFAULT 0, - `return_y` float NOT NULL DEFAULT 0, - `return_z` float NOT NULL DEFAULT 0, - `return_h` float NOT NULL DEFAULT 0, - `override_zone_in` tinyint(4) NOT NULL DEFAULT 0, - `zone_in_x` float NOT NULL DEFAULT 0, - `zone_in_y` float NOT NULL DEFAULT 0, - `zone_in_z` float NOT NULL DEFAULT 0, - `zone_in_h` float NOT NULL DEFAULT 0, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -ALTER TABLE `tasks` - ADD COLUMN `dz_template_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `request_timer_seconds`; diff --git a/utils/sql/git/required/2022_07_28_gm_state_changes.sql b/utils/sql/git/required/2022_07_28_gm_state_changes.sql deleted file mode 100644 index ef61477d6..000000000 --- a/utils/sql/git/required/2022_07_28_gm_state_changes.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE `account` - ADD COLUMN `invulnerable` TINYINT(4) NULL DEFAULT '0' AFTER `gmspeed`, - ADD COLUMN `flymode` TINYINT(4) NULL DEFAULT '0' AFTER `invulnerable`, - ADD COLUMN `ignore_tells` TINYINT(4) NULL DEFAULT '0' AFTER `flymode`; diff --git a/utils/sql/git/required/2022_07_30_merchantlist_temp.sql b/utils/sql/git/required/2022_07_30_merchantlist_temp.sql deleted file mode 100644 index b02c9ac63..000000000 --- a/utils/sql/git/required/2022_07_30_merchantlist_temp.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE `merchantlist_temp` ADD COLUMN `zone_id` INT(11) NOT NULL DEFAULT '0' AFTER `slot`; -ALTER TABLE `merchantlist_temp` ADD COLUMN `instance_id` INT(11) NOT NULL DEFAULT '0' AFTER `zone_id`; -ALTER TABLE `merchantlist_temp` DROP PRIMARY KEY, ADD PRIMARY KEY (`npcid`, `slot`, `zone_id`, `instance_id`); diff --git a/utils/sql/git/required/2022_08_01_drop_expansion_account.sql b/utils/sql/git/required/2022_08_01_drop_expansion_account.sql deleted file mode 100644 index 8a4f7eecb..000000000 --- a/utils/sql/git/required/2022_08_01_drop_expansion_account.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `account` DROP `expansion`; diff --git a/utils/sql/git/required/2022_08_07_replace_task_goals.sql b/utils/sql/git/required/2022_08_07_replace_task_goals.sql deleted file mode 100644 index 023fa6ffa..000000000 --- a/utils/sql/git/required/2022_08_07_replace_task_goals.sql +++ /dev/null @@ -1,95 +0,0 @@ --- backup original since this is a complex migration -CREATE TABLE `task_activities_backup_9203` LIKE `task_activities`; -INSERT INTO `task_activities_backup_9203` SELECT * FROM `task_activities`; - -ALTER TABLE `task_activities` - CHANGE COLUMN `description_override` `description_override` VARCHAR(128) NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci' AFTER `goalcount`, - ADD COLUMN `npc_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `description_override`, - ADD COLUMN `npc_goal_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `npc_id`, - ADD COLUMN `npc_match_list` TEXT NULL DEFAULT NULL AFTER `npc_goal_id`, - ADD COLUMN `item_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `npc_match_list`, - ADD COLUMN `item_goal_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `item_id`, - ADD COLUMN `item_id_list` TEXT NULL DEFAULT NULL AFTER `item_goal_id`, - CHANGE COLUMN `item_list` `item_list` VARCHAR(128) NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci' AFTER `item_id_list`, - ADD COLUMN `dz_switch_id` INT(11) NOT NULL DEFAULT '0' AFTER `delivertonpc`, - ADD COLUMN `min_x` FLOAT NOT NULL DEFAULT 0 AFTER `dz_switch_id`, - ADD COLUMN `min_y` FLOAT NOT NULL DEFAULT 0 AFTER `min_x`, - ADD COLUMN `min_z` FLOAT NOT NULL DEFAULT 0 AFTER `min_y`, - ADD COLUMN `max_x` FLOAT NOT NULL DEFAULT 0 AFTER `min_z`, - ADD COLUMN `max_y` FLOAT NOT NULL DEFAULT 0 AFTER `max_x`, - ADD COLUMN `max_z` FLOAT NOT NULL DEFAULT 0 AFTER `max_y`, - CHANGE COLUMN `skill_list` `skill_list` VARCHAR(64) NOT NULL DEFAULT '-1' COLLATE 'latin1_swedish_ci' AFTER `max_z`, - CHANGE COLUMN `spell_list` `spell_list` VARCHAR(64) NOT NULL DEFAULT '0' COLLATE 'latin1_swedish_ci' AFTER `skill_list`; - --- move Explore (5) goalid proximities to the new location fields --- does not migrate where zone was different and ignores lists (unsupported) -UPDATE `task_activities` -INNER JOIN `proximities` - ON `task_activities`.`goalid` = `proximities`.`exploreid` - AND CAST(`task_activities`.`zones` AS INT) = `proximities`.`zoneid` -SET - `task_activities`.`goalid` = 0, - `task_activities`.`min_x` = `proximities`.`minx`, - `task_activities`.`min_y` = `proximities`.`miny`, - `task_activities`.`min_z` = `proximities`.`minz`, - `task_activities`.`max_x` = `proximities`.`maxx`, - `task_activities`.`max_y` = `proximities`.`maxy`, - `task_activities`.`max_z` = `proximities`.`maxz` -WHERE - `task_activities`.`goalmethod` = 0 - AND `task_activities`.`activitytype` = 5; - --- dz_switch_id for Touch (11) -UPDATE `task_activities` -SET `task_activities`.`dz_switch_id` = `task_activities`.`goalid` -WHERE `task_activities`.`goalmethod` = 0 - AND `task_activities`.`activitytype` = 11; - --- single item ids for Deliver (1), Loot (3), TradeSkill (6), Fish (7), Forage (8) -UPDATE `task_activities` -SET `task_activities`.`item_id` = `task_activities`.`goalid` -WHERE `task_activities`.`goalmethod` = 0 - AND `task_activities`.`activitytype` IN (1, 3, 6, 7, 8); - --- item goallist id -UPDATE `task_activities` -SET `task_activities`.`item_goal_id` = `task_activities`.`goalid` -WHERE `task_activities`.`goalmethod` = 1 - AND `task_activities`.`activitytype` IN (1, 3, 6, 7, 8); - --- item id match list -UPDATE `task_activities` -SET `task_activities`.`item_id_list` = `task_activities`.`goal_match_list` -WHERE `task_activities`.`goalmethod` = 1 - AND `task_activities`.`activitytype` IN (1, 3, 6, 7, 8); - --- single npc ids for Kill (2), SpeakWith (4) -UPDATE `task_activities` -SET `task_activities`.`npc_id` = `task_activities`.`goalid` -WHERE `task_activities`.`goalmethod` = 0 - AND `task_activities`.`activitytype` IN (2, 4); - --- npc goallist id -UPDATE `task_activities` -SET `task_activities`.`npc_goal_id` = `task_activities`.`goalid` -WHERE `task_activities`.`goalmethod` = 1 - AND `task_activities`.`activitytype` IN (2, 4); - --- npc match list -UPDATE `task_activities` -SET `task_activities`.`npc_match_list` = `task_activities`.`goal_match_list` -WHERE `task_activities`.`goalmethod` = 1 - AND `task_activities`.`activitytype` IN (2, 4); - --- delivertonpc npc_ids for Deliver (1), GiveCash (100) -UPDATE `task_activities` -SET `task_activities`.`npc_id` = `task_activities`.`delivertonpc` -WHERE `task_activities`.`activitytype` IN (1, 100); - -ALTER TABLE `task_activities` - DROP COLUMN `goalid`, - DROP COLUMN `goal_match_list`, - DROP COLUMN `delivertonpc`; - --- leave proximities table backup in case of regressions -ALTER TABLE `proximities` RENAME `proximities_backup_9203`; diff --git a/utils/sql/git/required/2022_08_08_task_req_activity_id.sql b/utils/sql/git/required/2022_08_08_task_req_activity_id.sql deleted file mode 100644 index 3f8e127ec..000000000 --- a/utils/sql/git/required/2022_08_08_task_req_activity_id.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `task_activities` - ADD COLUMN `req_activity_id` INT SIGNED NOT NULL DEFAULT '-1' AFTER `activityid`; diff --git a/utils/sql/git/required/2022_08_14_exp_modifier_instance_versions.sql b/utils/sql/git/required/2022_08_14_exp_modifier_instance_versions.sql deleted file mode 100644 index 441dfe8d9..000000000 --- a/utils/sql/git/required/2022_08_14_exp_modifier_instance_versions.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE character_exp_modifiers -ADD COLUMN instance_version int NOT NULL DEFAULT -1 AFTER zone_id, -DROP PRIMARY KEY, -ADD PRIMARY KEY (character_id, zone_id, instance_version) USING BTREE; \ No newline at end of file diff --git a/utils/sql/git/required/2022_08_19_zone_expansion_consistency.sql b/utils/sql/git/required/2022_08_19_zone_expansion_consistency.sql deleted file mode 100644 index cad2a1385..000000000 --- a/utils/sql/git/required/2022_08_19_zone_expansion_consistency.sql +++ /dev/null @@ -1,609 +0,0 @@ -ALTER TABLE `zone` - ADD COLUMN `bypass_expansion_check` tinyint(3) NOT NULL DEFAULT 0 AFTER `expansion`; - -UPDATE `zone` SET `bypass_expansion_check` = 1 WHERE `short_name` -IN ( - 'befallenb', - 'commonlands', - 'freeportacademy', - 'freeportarena', - 'freeportcityhall', - 'freeporteast', - 'freeporthall', - 'freeportmilitia', - 'freeportsewers', - 'freeportwest', - 'guildhall', - 'guildlobby', - 'highpasshold', - 'highpasskeep', - 'innothuleb', - 'kithforest', - 'mistythicket', - 'moors', - 'nektulosa', - 'northro', - 'oceanoftears', - 'southro', - 'steamfontmts', - 'toxxulia' -); - -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 244; -- nedaria -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 132; -- freportn -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 131; -- freporte -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 257; -- nro -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 60; -- cshome -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 259; -- oasis -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 439; -- nektulosnektulos -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 334; -- shadowrest -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 263; -- oggok -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 56; -- crushbone -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 133; -- freportw -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 255; -- northkarana -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 149; -- gukbottom -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 248; -- neriaka -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 249; -- neriakb -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 250; -- neriakc -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 142; -- grobb -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 51; -- commons -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 138; -- gfaydark -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 274; -- oot -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 276; -- paineel -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 99; -- eastkarana -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 116; -- felwitheb -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 115; -- felwithea -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 114; -- feerrott -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 113; -- fearplane -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 112; -- everfrost -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 109; -- erudnint -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 108; -- erudnext -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 279; -- permafrost -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 300; -- qcat -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 301; -- qey2hh1 -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 329; -- runnyeye -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 316; -- rivervale -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 278; -- paw -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 312; -- rathemtn -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 306; -- qrg -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 304; -- qeytoqrg -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 303; -- qeynos2 -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 302; -- qeynos -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 104; -- ecommons -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 241; -- najena -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 353; -- soldunga -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 193; -- kedge -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 194; -- kerraridge -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 196; -- kithicor -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 172; -- hole -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 19; -- befallen -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 21; -- beholder -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 419; -- unrest -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 23; -- blackburrow -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 415; -- tutorialb -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 414; -- tutoriala -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 3; -- airplane -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 4; -- akanon -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 184; -- jaggedpine -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 188; -- kaladima -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 410; -- tox -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 182; -- innothule -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 9; -- arena -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 189; -- kaladimb -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 201; -- lakerathe -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 202; -- lavastorm -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 162; -- hateplane -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 160; -- halas -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 156; -- guktop -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 34; -- cauldron -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 224; -- mistmoore -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 36; -- cazicthule -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 361; -- sro -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 225; -- misty -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 31; -- butcher -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 163; -- hateplaneb -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 204; -- lfaydark -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 354; -- soldungb -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 166; -- highpass -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 359; -- southkarana -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 365; -- steamfont -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 165; -- highkeep -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 107; -- emeraldjungle -UPDATE `zone` SET `expansion` = 0 WHERE `id` = 110; -- erudsxing -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 370; -- stonebrunt -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 187; -- kaesora -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 190; -- karnor -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 134; -- frontiermtns -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 199; -- kurn -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 200; -- lakeofillomen -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 275; -- overthere -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 258; -- nurga -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 120; -- firiona -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 44; -- chardok -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 33; -- cabwest -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 374; -- swampofnohope -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 422; -- veeshan -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 423; -- veksar -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 30; -- burningwood -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 345; -- skyfire -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 431; -- warslikswood -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 119; -- fieldofbone -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 331; -- sebilis -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 32; -- cabeast -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 61; -- dalnir -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 430; -- warrens -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 97; -- droga -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 412; -- trakanon -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 46; -- citymist -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 43; -- charasis -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 95; -- dreadlands -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 357; -- soltemple -UPDATE `zone` SET `expansion` = 1 WHERE `id` = 406; -- timorous -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 436; -- westwastes -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 58; -- crystal -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 405; -- thurgadinb -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 243; -- necropolis -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 344; -- sirens -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 348; -- sleeper -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 48; -- cobaltscar -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 136; -- frozenshadow -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 404; -- thurgadina -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 428; -- wakening -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 139; -- greatdivide -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 223; -- mischiefplane -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 143; -- growthplane -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 388; -- templeveeshan -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 174; -- iceclad -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 347; -- skyshrine -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 102; -- eastwastes -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 186; -- kael -UPDATE `zone` SET `expansion` = 2 WHERE `id` = 424; -- velketor -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 5; -- akheva -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 2; -- acrylia -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 393; -- thedeep -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 394; -- thegrey -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 191; -- katta -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 239; -- mseru -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 416; -- twilight -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 208; -- maiden -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 389; -- tenebrous -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 173; -- hollowshade -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 18; -- bazaar -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 203; -- letalis -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 426; -- vexthal -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 363; -- ssratemple -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 362; -- sseru -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 252; -- netherbian -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 103; -- echo -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 330; -- scarlet -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 277; -- paludal -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 332; -- shadeweaver -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 333; -- shadowhaven -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 62; -- dawnshroud -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 336; -- sharvahl -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 137; -- fungusgrove -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 140; -- griegsend -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 141; -- grimling -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 418; -- umbral -UPDATE `zone` SET `expansion` = 3 WHERE `id` = 253; -- nexus -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 288; -- ponightmare -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 289; -- postorms -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 282; -- poeartha -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 283; -- poearthb -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 284; -- pofire -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 287; -- poknowledge -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 285; -- poinnovation -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 286; -- pojustice -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 291; -- potimea -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 290; -- potactics -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 356; -- solrotower -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 297; -- powater -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 296; -- powar -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 280; -- poair -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 281; -- podisease -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 295; -- povalor -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 294; -- potranquility -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 293; -- potorment -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 292; -- potimeb -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 254; -- nightmareb -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 27; -- bothunder -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 170; -- hohonora -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 171; -- hohonorb -UPDATE `zone` SET `expansion` = 4 WHERE `id` = 49; -- codecay -UPDATE `zone` SET `expansion` = 5 WHERE `id` = 408; -- torgiran -UPDATE `zone` SET `expansion` = 5 WHERE `id` = 45; -- chardokb -UPDATE `zone` SET `expansion` = 5 WHERE `id` = 240; -- nadox -UPDATE `zone` SET `expansion` = 5 WHERE `id` = 164; -- hatesfury -UPDATE `zone` SET `expansion` = 5 WHERE `id` = 157; -- gunthak -UPDATE `zone` SET `expansion` = 5 WHERE `id` = 355; -- soldungc -UPDATE `zone` SET `expansion` = 5 WHERE `id` = 98; -- dulak -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 234; -- mmch -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 153; -- gukf -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 230; -- mmcd -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 231; -- mmce -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 328; -- rujj -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 217; -- mire -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 236; -- mmcj -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 232; -- mmcf -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 233; -- mmcg -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 235; -- mmci -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 229; -- mmcc -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 228; -- mmcb -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 327; -- ruji -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 5967; -- mirc -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 5970; -- taka -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 5974; -- rujj -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 320; -- rujb -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 319; -- ruja -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 321; -- rujc -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 322; -- rujd -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 323; -- ruje -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 147; -- guka -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 148; -- gukb -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 324; -- rujf -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 150; -- gukc -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 325; -- rujg -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 151; -- gukd -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 326; -- rujh -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 227; -- mmca -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 155; -- gukh -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 154; -- gukg -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 377; -- takb -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 378; -- takc -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 379; -- takd -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 380; -- take -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 381; -- takf -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 382; -- takg -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 383; -- takh -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 384; -- taki -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 387; -- takj -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 152; -- guke -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 5966; -- gukc -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 219; -- mirg -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 221; -- miri -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 220; -- mirh -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 218; -- mirf -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 216; -- mird -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 215; -- mirc -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 214; -- mirb -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 213; -- mira -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 222; -- mirj -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 6019; -- gukg -UPDATE `zone` SET `expansion` = 6 WHERE `id` = 6018; -- take -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 407; -- tipt -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 15; -- barindu -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 349; -- sncrematory -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 375; -- tacvi -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 351; -- snplant -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 352; -- snpool -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 117; -- ferubi -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 118; -- fhalls -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 305; -- qinimi -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 1; -- abysmal -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 350; -- snlair -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 308; -- qvicb -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 317; -- riwwi -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 417; -- txevu -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 420; -- uqua -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 437; -- yxtta -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 427; -- vxed -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 307; -- qvic -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 176; -- ikkinz -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 197; -- kodtaz -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 181; -- inktuta -UPDATE `zone` SET `expansion` = 7 WHERE `id` = 242; -- natimbi -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 41; -- chamberse -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 81; -- dranikhollowsa -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 83; -- dranikhollowsc -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 91; -- draniksewersa -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 92; -- draniksewersb -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 93; -- draniksewersc -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 299; -- provinggrounds -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 79; -- dranikcatacombsb -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 40; -- chambersd -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 429; -- wallofslaughter -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 78; -- dranikcatacombsa -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 77; -- dranik -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 39; -- chambersc -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 161; -- harbingers -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 35; -- causeway -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 37; -- chambersa -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 94; -- draniksscar -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 25; -- bloodfields -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 42; -- chambersf -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 6; -- anguish -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 80; -- dranikcatacombsc -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 38; -- chambersb -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 315; -- riftseekers -UPDATE `zone` SET `expansion` = 8 WHERE `id` = 82; -- dranikhollowsb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5926; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5949; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5935; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 65; -- delveb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5925; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 64; -- delvea -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5919; -- stillmoona -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5923; -- stillmoona -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5946; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5945; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5921; -- stillmoona -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5920; -- stillmoona -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 28; -- broodlands -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5937; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5938; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 395; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5939; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5940; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 17; -- barter -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5933; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5930; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5941; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5942; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5943; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5944; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5928; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 369; -- stillmoonb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5934; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 368; -- stillmoona -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5927; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5936; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5913; -- stillmoonb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5953; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5915; -- stillmoona -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5952; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5899; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5896; -- stillmoonb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5962; -- delvea -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5895; -- stillmoonb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5961; -- delvea -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5959; -- delveb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5954; -- delveb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5963; -- delvea -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5964; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5914; -- stillmoonb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5912; -- stillmoonb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5957; -- delveb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5956; -- delveb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5900; -- stillmoona -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5908; -- delvea -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5965; -- delveb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5911; -- delvea -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5910; -- delvea -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5929; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5924; -- stillmoonb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5918; -- stillmoona -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5903; -- delveb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5909; -- delvea -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 145; -- guildhall -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5916; -- stillmoona -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5904; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5905; -- thenest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5906; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 146; -- guildlobby -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5917; -- stillmoona -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5907; -- stillmoonb -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5951; -- thundercrest -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5902; -- delvea -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5958; -- delvea -UPDATE `zone` SET `expansion` = 9 WHERE `id` = 5898; -- thundercrest -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6007; -- drachnidhive -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6004; -- drachnidhivea -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6001; -- illsalinb -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6003; -- drachnidhivea -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6002; -- drachnidhiveb -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5986; -- westkorlachc -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6005; -- drachnidhivea -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6006; -- drachnidhive -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6000; -- illsalinb -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5999; -- illsalinb -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5998; -- illsalinb -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5990; -- eastkorlacha -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5989; -- shadowspine -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 432; -- westkorlach -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 433; -- westkorlacha -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 434; -- westkorlachb -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 435; -- westkorlachc -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5988; -- drachnidhivec -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5987; -- westkorlachc -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5985; -- westkorlachc -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5984; -- westkorlachc -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5983; -- westkorlachc -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5991; -- eastkorlacha -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5992; -- eastkorlacha -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5994; -- corathusa -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5997; -- westkorlach -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5975; -- westkorlachb -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5996; -- westkorlach -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5993; -- corathusa -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5976; -- westkorlacha -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5977; -- westkorlacha -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5995; -- westkorlach -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5978; -- corathusb -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5979; -- corathusb -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5980; -- dreadspire -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5981; -- illsalina -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 5982; -- westkorlachc -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 247; -- nektulosa -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 335; -- shadowspine -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 101; -- eastkorlacha -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 100; -- eastkorlach -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 96; -- dreadspire -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 72; -- drachnidhivea -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 71; -- drachnidhive -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 54; -- corathusb -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 53; -- corathusa -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 52; -- corathus -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 74; -- drachnidhivec -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 73; -- drachnidhiveb -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6008; -- drachnidhive -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 177; -- illsalin -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 178; -- illsalina -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 180; -- illsalinc -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 179; -- illsalinb -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6017; -- eastkorlach -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6016; -- illsalinc -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6015; -- illsalinc -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6014; -- illsalinc -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6013; -- illsalinc -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6012; -- westkorlacha -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6011; -- corathusb -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6010; -- drachnidhive -UPDATE `zone` SET `expansion` = 10 WHERE `id` = 6009; -- drachnidhive -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 386; -- takishruinsa -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 130; -- freeportwest -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 67; -- devastation -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 310; -- ragea -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 309; -- rage -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 256; -- northro -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 105; -- elddar -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 106; -- elddara -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 129; -- freeporttheater -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 314; -- relic -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 128; -- freeporttemple -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 127; -- freeportsewers -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 126; -- freeportmilitia -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 124; -- freeporteast -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 123; -- freeportcityhall -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 122; -- freeportarena -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 121; -- freeportacademy -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 125; -- freeporthall -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 391; -- theater -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 392; -- theatera -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 346; -- skylance -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 385; -- takishruins -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 66; -- devastationa -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 8; -- arcstone -UPDATE `zone` SET `expansion` = 11 WHERE `id` = 360; -- southro -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 20; -- befallenb -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 183; -- innothuleb -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 411; -- toxxulia -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 425; -- vergalid -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 262; -- oceanoftears -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 175; -- icefall -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 371; -- stonehive -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 421; -- valdeholm -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 168; -- highpasskeep -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 373; -- sunderock -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 135; -- frostcrypt -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 167; -- highpasshold -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 50; -- commonlands -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 238; -- moors -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 55; -- crescent -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 318; -- roost -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 212; -- mesa -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 367; -- steppes -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 226; -- mistythicket -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 195; -- kithforest -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 68; -- direwind -UPDATE `zone` SET `expansion` = 12 WHERE `id` = 12; -- ashengate -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 209; -- maidensgrave -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 192; -- kattacastrum -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 24; -- blacksail -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 16; -- barren -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 237; -- monkeyrock -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 13; -- atiiki -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 185; -- jardelshook -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 343; -- silyssar -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 63; -- deadbone -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 340; -- shippvu -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 29; -- buriedsea -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 341; -- shipuvu -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 372; -- suncrest -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 390; -- thalassius -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 339; -- shipmvu -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 338; -- shipmvp -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 337; -- shipmvm -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 313; -- redfeather -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 438; -- zhisza -UPDATE `zone` SET `expansion` = 13 WHERE `id` = 358; -- solteris -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 59; -- crystallos -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 211; -- mechanotus -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 57; -- cryptofshade -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 342; -- shipworkshop -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 207; -- lopingplains -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 144; -- guardian -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 26; -- bloodmoon -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 158; -- gyrospireb -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 159; -- gyrospirez -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 169; -- hillsofshade -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 366; -- steamfontmts -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 210; -- mansion -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 364; -- steamfactory -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 76; -- dragonscaleb -UPDATE `zone` SET `expansion` = 14 WHERE `id` = 75; -- dragonscale -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 402; -- thevoidg -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 198; -- korascian -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 69; -- discord -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 70; -- discordtower -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 22; -- bertoxtemple -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 260; -- oceangreenhills -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 261; -- oceangreenvillage -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 399; -- thevoidd -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 398; -- thevoidc -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 272; -- oldkithicor -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 273; -- oldkurn -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 311; -- rathechamber -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 409; -- toskirakk -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 396; -- thevoida -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 298; -- precipiceofwar -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 397; -- thevoidb -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 400; -- thevoide -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 271; -- oldkaesorab -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 264; -- oldblackburrow -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 401; -- thevoidf -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 265; -- oldbloodfield -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 266; -- oldcommons -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 267; -- olddranik -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 268; -- oldfieldofbone -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 269; -- oldhighpass -UPDATE `zone` SET `expansion` = 15 WHERE `id` = 270; -- oldkaesoraa -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 446; -- brellsarena -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 448; -- convorteum -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 447; -- stonesnake -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 445; -- underquarry -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 444; -- foundation -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 443; -- arthicrex -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 442; -- pellucid -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 441; -- coolingchamber -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 440; -- brellsrest -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 5878; -- weddingchapeldark -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 5879; -- dragoncrypt -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 5881; -- brellstemple -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 5882; -- fungalforest -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 5883; -- lichencreep -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 5884; -- shiningcity -UPDATE `zone` SET `expansion` = 16 WHERE `id` = 5877; -- weddingchapel -UPDATE `zone` SET `expansion` = 17 WHERE `id` = 5563; -- somnium -UPDATE `zone` SET `expansion` = 17 WHERE `id` = 5565; -- thulehouse1 -UPDATE `zone` SET `expansion` = 17 WHERE `id` = 5566; -- thulehouse2 -UPDATE `zone` SET `expansion` = 17 WHERE `id` = 5567; -- well -UPDATE `zone` SET `expansion` = 17 WHERE `id` = 5568; -- neighborhood -UPDATE `zone` SET `expansion` = 17 WHERE `id` = 5557; -- morellcastle -UPDATE `zone` SET `expansion` = 17 WHERE `id` = 5562; -- miragulmare -UPDATE `zone` SET `expansion` = 17 WHERE `id` = 5561; -- housegarden -UPDATE `zone` SET `expansion` = 17 WHERE `id` = 5560; -- feerrott2 -UPDATE `zone` SET `expansion` = 17 WHERE `id` = 5559; -- fallen -UPDATE `zone` SET `expansion` = 17 WHERE `id` = 5558; -- alkabormare -UPDATE `zone` SET `expansion` = 17 WHERE `id` = 5556; -- thulelibrary -UPDATE `zone` SET `expansion` = 17 WHERE `id` = 5564; -- thuledream -UPDATE `zone` SET `expansion` = 18 WHERE `id` = 5868; -- rubak -UPDATE `zone` SET `expansion` = 18 WHERE `id` = 5865; -- argath -UPDATE `zone` SET `expansion` = 18 WHERE `id` = 5875; -- eastsepulcher -UPDATE `zone` SET `expansion` = 18 WHERE `id` = 5874; -- sepulcher -UPDATE `zone` SET `expansion` = 18 WHERE `id` = 5873; -- cityofbronze -UPDATE `zone` SET `expansion` = 18 WHERE `id` = 5872; -- windsong -UPDATE `zone` SET `expansion` = 18 WHERE `id` = 5871; -- pillarsalra -UPDATE `zone` SET `expansion` = 18 WHERE `id` = 5870; -- resplendent -UPDATE `zone` SET `expansion` = 18 WHERE `id` = 5869; -- beastdomain -UPDATE `zone` SET `expansion` = 18 WHERE `id` = 5867; -- sarithcity -UPDATE `zone` SET `expansion` = 18 WHERE `id` = 5876; -- westsepulcher -UPDATE `zone` SET `expansion` = 18 WHERE `id` = 5866; -- arelis -UPDATE `zone` SET `expansion` = 19 WHERE `id` = 5894; -- xorbb -UPDATE `zone` SET `expansion` = 19 WHERE `id` = 5893; -- shardslanding -UPDATE `zone` SET `expansion` = 19 WHERE `id` = 5892; -- kaelshard -UPDATE `zone` SET `expansion` = 19 WHERE `id` = 5891; -- grelleth -UPDATE `zone` SET `expansion` = 19 WHERE `id` = 5890; -- eviltree -UPDATE `zone` SET `expansion` = 19 WHERE `id` = 5886; -- breedinggrounds -UPDATE `zone` SET `expansion` = 19 WHERE `id` = 5887; -- chapterhouse -UPDATE `zone` SET `expansion` = 19 WHERE `id` = 5888; -- crystalshard -UPDATE `zone` SET `expansion` = 19 WHERE `id` = 5889; -- eastwastesshard diff --git a/utils/sql/git/required/2022_08_22_npc_types_heroic_strikethrough.sql b/utils/sql/git/required/2022_08_22_npc_types_heroic_strikethrough.sql deleted file mode 100644 index cf5abb1fe..000000000 --- a/utils/sql/git/required/2022_08_22_npc_types_heroic_strikethrough.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `npc_types` -ADD COLUMN `heroic_strikethrough` INT NOT NULL DEFAULT 0 AFTER `exp_mod`; \ No newline at end of file diff --git a/utils/sql/git/required/2022_08_24_task_activities_step.sql b/utils/sql/git/required/2022_08_24_task_activities_step.sql deleted file mode 100644 index b0d5019ef..000000000 --- a/utils/sql/git/required/2022_08_24_task_activities_step.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `task_activities` MODIFY `step` INT(11) NOT NULL DEFAULT '0'; diff --git a/utils/sql/git/required/2022_09_02_faction_association.sql b/utils/sql/git/required/2022_09_02_faction_association.sql deleted file mode 100644 index 333562c74..000000000 --- a/utils/sql/git/required/2022_09_02_faction_association.sql +++ /dev/null @@ -1,27 +0,0 @@ -CREATE TABLE `faction_association` ( - `id` INT(10) NOT NULL, - `id_1` INT(10) NOT NULL DEFAULT 0, - `mod_1` FLOAT NOT NULL DEFAULT 0, - `id_2` INT(10) NOT NULL DEFAULT 0, - `mod_2` FLOAT NOT NULL DEFAULT 0, - `id_3` INT(10) NOT NULL DEFAULT 0, - `mod_3` FLOAT NOT NULL DEFAULT 0, - `id_4` INT(10) NOT NULL DEFAULT 0, - `mod_4` FLOAT NOT NULL DEFAULT 0, - `id_5` INT(10) NOT NULL DEFAULT 0, - `mod_5` FLOAT NOT NULL DEFAULT 0, - `id_6` INT(10) NOT NULL DEFAULT 0, - `mod_6` FLOAT NOT NULL DEFAULT 0, - `id_7` INT(10) NOT NULL DEFAULT 0, - `mod_7` FLOAT NOT NULL DEFAULT 0, - `id_8` INT(10) NOT NULL DEFAULT 0, - `mod_8` FLOAT NOT NULL DEFAULT 0, - `id_9` INT(10) NOT NULL DEFAULT 0, - `mod_9` FLOAT NOT NULL DEFAULT 0, - `id_10` INT(10) NOT NULL DEFAULT 0, - `mod_10` FLOAT NOT NULL DEFAULT 0, - PRIMARY KEY(`id`) -); - -ALTER TABLE `npc_types` ADD `faction_amount` INT(10) NOT NULL DEFAULT '0'; -ALTER TABLE `tasks` ADD `faction_amount` INT(10) NOT NULL DEFAULT '0'; diff --git a/utils/sql/git/required/2022_09_25_task_concat_matchlists.sql b/utils/sql/git/required/2022_09_25_task_concat_matchlists.sql deleted file mode 100644 index 05588cfcc..000000000 --- a/utils/sql/git/required/2022_09_25_task_concat_matchlists.sql +++ /dev/null @@ -1,70 +0,0 @@ -SET SESSION group_concat_max_len = 1048576; -SET collation_connection = latin1_swedish_ci; - --- backup original(s) -CREATE TABLE `goallists_backup_9_25_2022` LIKE `goallists`; -INSERT INTO `goallists_backup_9_25_2022` SELECT * FROM `goallists`; -CREATE TABLE `tasks_backup_9_25_2022` LIKE `tasks`; -INSERT INTO `tasks_backup_9_25_2022` SELECT * FROM `tasks`; - --- npc id -UPDATE `task_activities` -SET `task_activities`.`npc_match_list` = CONCAT_WS('|', `npc_match_list`, `npc_id`) -WHERE npc_id != 0; - --- npc_goal_id goallists -UPDATE `task_activities` -INNER JOIN -( - SELECT `goallists`.`listid`, GROUP_CONCAT(`goallists`.`entry` ORDER BY `goallists`.`entry` SEPARATOR '|') AS `goallist_ids` - FROM `goallists` - GROUP BY `goallists`.`listid` -) AS `goallist_group` - ON `task_activities`.`npc_goal_id` = `goallist_group`.`listid` -SET `task_activities`.`npc_match_list` = CONCAT_WS('|', `npc_match_list`, `goallist_ids`) -WHERE npc_goal_id != 0; - --- item id -UPDATE `task_activities` -SET `task_activities`.`item_id_list` = CONCAT_WS('|', `item_id_list`, `item_id`) -WHERE item_id != 0; - --- item_goal_id goallists -UPDATE `task_activities` -INNER JOIN -( - SELECT `goallists`.`listid`, GROUP_CONCAT(`goallists`.`entry` ORDER BY `goallists`.`entry` SEPARATOR '|') AS `goallist_ids` - FROM `goallists` - GROUP BY `goallists`.`listid` -) AS `goallist_group` - ON `task_activities`.`item_goal_id` = `goallist_group`.`listid` -SET `task_activities`.`item_id_list` = CONCAT_WS('|', `item_id_list`, `goallist_ids`) -WHERE item_goal_id != 0; - -ALTER TABLE `task_activities` - DROP COLUMN `npc_id`, - DROP COLUMN `npc_goal_id`, - DROP COLUMN `item_id`, - DROP COLUMN `item_goal_id`; - - --- Reward cleanup and task table cleanup - -ALTER TABLE `tasks` - CHANGE COLUMN `reward` `reward_text` varchar(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT '' AFTER `description`, - CHANGE COLUMN `rewardid` `reward_id_list` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL AFTER `reward_text`, - CHANGE COLUMN `cashreward` `cash_reward` int(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `reward_id_list`, - CHANGE COLUMN `rewardmethod` `reward_method` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 AFTER `xpreward`, - CHANGE COLUMN `minlevel` `min_level` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 AFTER `reward_point_type`, - CHANGE COLUMN `maxlevel` `max_level` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 AFTER `min_level`; - -ALTER Table `tasks` CHANGE COLUMN `xpreward` `exp_reward` int(10) NOT NULL DEFAULT 0 AFTER `cash_reward`; - -UPDATE tasks SET reward_id_list = - ( - SELECT GROUP_CONCAT(`goallists`.`entry` ORDER BY `goallists`.`entry` SEPARATOR '|') AS `goallist_ids` FROM `goallists` WHERE listid = reward_id_list) -WHERE -reward_method = 1; - --- deprecated table -DROP table goallists; diff --git a/utils/sql/git/required/2022_09_28_discord_webhooks.sql b/utils/sql/git/required/2022_09_28_discord_webhooks.sql deleted file mode 100644 index b118c56fd..000000000 --- a/utils/sql/git/required/2022_09_28_discord_webhooks.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE logsys_categories - ADD log_to_discord smallint(11) default 0 AFTER log_to_gmsay; -ALTER TABLE logsys_categories - ADD discord_webhook_id int(11) default 0 AFTER log_to_discord; diff --git a/utils/sql/git/required/2022_12_19_player_events_tables.sql b/utils/sql/git/required/2022_12_19_player_events_tables.sql deleted file mode 100644 index df27b01c9..000000000 --- a/utils/sql/git/required/2022_12_19_player_events_tables.sql +++ /dev/null @@ -1,34 +0,0 @@ -CREATE TABLE `player_event_log_settings` -( - `id` bigint(20) NOT NULL, - `event_name` varchar(100) DEFAULT NULL, - `event_enabled` tinyint(1) DEFAULT NULL, - `retention_days` int(11) DEFAULT 0, - `discord_webhook_id` int(11) DEFAULT 0, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -CREATE TABLE `player_event_logs` -( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `account_id` bigint(20) DEFAULT NULL, - `character_id` bigint(20) DEFAULT NULL, - `zone_id` int(11) DEFAULT NULL, - `instance_id` int(11) DEFAULT NULL, - `x` float DEFAULT NULL, - `y` float DEFAULT NULL, - `z` float DEFAULT NULL, - `heading` float DEFAULT NULL, - `event_type_id` int(11) DEFAULT NULL, - `event_type_name` varchar(255) DEFAULT NULL, - `event_data` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`event_data`)), - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `event_created_at` (`event_type_id`,`created_at`), - KEY `zone_id` (`zone_id`), - KEY `character_id` (`character_id`,`zone_id`) USING BTREE, - KEY `created_at` (`created_at`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; - -DROP TABLE `hackers`; -DROP TABLE `eventlog`; diff --git a/utils/sql/git/required/2022_12_24_character_exp_toggle.sql b/utils/sql/git/required/2022_12_24_character_exp_toggle.sql deleted file mode 100644 index 9ed26ef8f..000000000 --- a/utils/sql/git/required/2022_12_24_character_exp_toggle.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `character_data` -ADD COLUMN `exp_enabled` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 AFTER `exp`; diff --git a/utils/sql/git/required/2022_12_24_npc_keeps_sold_items.sql b/utils/sql/git/required/2022_12_24_npc_keeps_sold_items.sql deleted file mode 100644 index 33d530203..000000000 --- a/utils/sql/git/required/2022_12_24_npc_keeps_sold_items.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `npc_types` -ADD COLUMN `keeps_sold_items` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 AFTER `faction_amount`; \ No newline at end of file diff --git a/utils/sql/git/required/2023_01_08_zone_max_level.sql b/utils/sql/git/required/2023_01_08_zone_max_level.sql deleted file mode 100644 index 4538e5fd1..000000000 --- a/utils/sql/git/required/2023_01_08_zone_max_level.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `zone` -ADD COLUMN `max_level` tinyint(3) UNSIGNED NOT NULL DEFAULT 255 AFTER `min_level`; \ No newline at end of file diff --git a/utils/sql/git/required/2023_01_15_chatchannel_reserved_names.sql b/utils/sql/git/required/2023_01_15_chatchannel_reserved_names.sql deleted file mode 100644 index c39424d8f..000000000 --- a/utils/sql/git/required/2023_01_15_chatchannel_reserved_names.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE `chatchannel_reserved_names` -( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(64) NOT NULL, - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `name` (`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -ALTER TABLE `chatchannels` - ADD COLUMN `id` int(11) NOT NULL AUTO_INCREMENT FIRST, -DROP PRIMARY KEY, -ADD PRIMARY KEY (`id`) USING BTREE, -ADD UNIQUE INDEX(`name`) diff --git a/utils/sql/git/required/2023_01_21_bots_raid_members.sql b/utils/sql/git/required/2023_01_21_bots_raid_members.sql deleted file mode 100644 index 45cfbf2ec..000000000 --- a/utils/sql/git/required/2023_01_21_bots_raid_members.sql +++ /dev/null @@ -1,4 +0,0 @@ -DROP INDEX IF EXISTS `PRIMARY` ON `raid_members`; -CREATE UNIQUE INDEX IF NOT EXISTS `UNIQUE` ON `raid_members`(`name`); -ALTER TABLE `raid_members` ADD COLUMN `bot_id` int(4) NOT NULL DEFAULT 0 AFTER `charid`; -ALTER TABLE `raid_members` ADD COLUMN `id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST; diff --git a/utils/sql/git/required/2023_01_24_item_recast.sql b/utils/sql/git/required/2023_01_24_item_recast.sql deleted file mode 100644 index f2722af1c..000000000 --- a/utils/sql/git/required/2023_01_24_item_recast.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `character_item_recast` - CHANGE COLUMN `recast_type` `recast_type` INT(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `id`; \ No newline at end of file diff --git a/utils/sql/git/required/2023_01_29_merchant_status_requirements.sql b/utils/sql/git/required/2023_01_29_merchant_status_requirements.sql deleted file mode 100644 index caedaa638..000000000 --- a/utils/sql/git/required/2023_01_29_merchant_status_requirements.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE `merchantlist` -ADD COLUMN `min_status` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 AFTER `level_required`, -ADD COLUMN `max_status` tinyint(3) UNSIGNED NOT NULL DEFAULT 255 AFTER `min_status`; \ No newline at end of file diff --git a/utils/sql/git/required/2023_02_24_npc_scaling_zone_id_instance_version.sql b/utils/sql/git/required/2023_02_24_npc_scaling_zone_id_instance_version.sql deleted file mode 100644 index 560aa4961..000000000 --- a/utils/sql/git/required/2023_02_24_npc_scaling_zone_id_instance_version.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE `npc_scale_global_base` -ADD COLUMN `zone_id` int(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `level`, -ADD COLUMN `instance_version` int(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `zone_id`, -DROP PRIMARY KEY, -ADD PRIMARY KEY (`type`, `level`, `zone_id`, `instance_version`) USING BTREE; diff --git a/utils/sql/git/required/2023_02_28_npc_scaling_zone_list_version_list.sql b/utils/sql/git/required/2023_02_28_npc_scaling_zone_list_version_list.sql deleted file mode 100644 index a25d123fd..000000000 --- a/utils/sql/git/required/2023_02_28_npc_scaling_zone_list_version_list.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE `npc_scale_global_base` - CHANGE COLUMN `zone_id` `zone_id_list` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL AFTER `level`, - CHANGE COLUMN `instance_version` `instance_version_list` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL AFTER `zone_id_list`, - DROP PRIMARY KEY, - ADD PRIMARY KEY (`type`, `level`, `zone_id_list`(255), `instance_version_list`(255)) USING BTREE; diff --git a/utils/sql/git/required/2023_03_04_npc_scale_global_base_heroic_strikethrough.sql b/utils/sql/git/required/2023_03_04_npc_scale_global_base_heroic_strikethrough.sql deleted file mode 100644 index b2fd1cade..000000000 --- a/utils/sql/git/required/2023_03_04_npc_scale_global_base_heroic_strikethrough.sql +++ /dev/null @@ -1,55 +0,0 @@ -UPDATE `npc_scale_global_base` SET ac = 0 WHERE ac IS NULL; -UPDATE `npc_scale_global_base` SET hp = 0 WHERE hp IS NULL; -UPDATE `npc_scale_global_base` SET accuracy = 0 WHERE accuracy IS NULL; -UPDATE `npc_scale_global_base` SET slow_mitigation = 0 WHERE slow_mitigation IS NULL; -UPDATE `npc_scale_global_base` SET attack = 0 WHERE attack IS NULL; -UPDATE `npc_scale_global_base` SET strength = 0 WHERE strength IS NULL; -UPDATE `npc_scale_global_base` SET stamina = 0 WHERE stamina IS NULL; -UPDATE `npc_scale_global_base` SET dexterity = 0 WHERE dexterity IS NULL; -UPDATE `npc_scale_global_base` SET agility = 0 WHERE agility IS NULL; -UPDATE `npc_scale_global_base` SET intelligence = 0 WHERE intelligence IS NULL; -UPDATE `npc_scale_global_base` SET wisdom = 0 WHERE wisdom IS NULL; -UPDATE `npc_scale_global_base` SET charisma = 0 WHERE charisma IS NULL; -UPDATE `npc_scale_global_base` SET magic_resist = 0 WHERE magic_resist IS NULL; -UPDATE `npc_scale_global_base` SET cold_resist = 0 WHERE cold_resist IS NULL; -UPDATE `npc_scale_global_base` SET fire_resist = 0 WHERE fire_resist IS NULL; -UPDATE `npc_scale_global_base` SET poison_resist = 0 WHERE poison_resist IS NULL; -UPDATE `npc_scale_global_base` SET disease_resist = 0 WHERE disease_resist IS NULL; -UPDATE `npc_scale_global_base` SET corruption_resist = 0 WHERE corruption_resist IS NULL; -UPDATE `npc_scale_global_base` SET physical_resist = 0 WHERE physical_resist IS NULL; -UPDATE `npc_scale_global_base` SET min_dmg = 0 WHERE min_dmg IS NULL; -UPDATE `npc_scale_global_base` SET max_dmg = 0 WHERE max_dmg IS NULL; -UPDATE `npc_scale_global_base` SET hp_regen_rate = 0 WHERE hp_regen_rate IS NULL; -UPDATE `npc_scale_global_base` SET attack_delay = 0 WHERE attack_delay IS NULL; -UPDATE `npc_scale_global_base` SET physical_resist = 0 WHERE physical_resist IS NULL; -UPDATE `npc_scale_global_base` SET spell_scale = 100 WHERE spell_scale IS NULL; -UPDATE `npc_scale_global_base` SET heal_scale = 100 WHERE heal_scale IS NULL; -UPDATE `npc_scale_global_base` SET special_abilities = '' WHERE special_abilities IS NULL; -ALTER TABLE `npc_scale_global_base` - MODIFY COLUMN `ac` int(11) NOT NULL DEFAULT 0 AFTER `instance_version_list`, - MODIFY COLUMN `hp` int(11) NOT NULL DEFAULT 0 AFTER `ac`, - MODIFY COLUMN `accuracy` int(11) NOT NULL DEFAULT 0 AFTER `hp`, - MODIFY COLUMN `slow_mitigation` int(11) NOT NULL DEFAULT 0 AFTER `accuracy`, - MODIFY COLUMN `attack` int(11) NOT NULL DEFAULT 0 AFTER `slow_mitigation`, - MODIFY COLUMN `strength` int(11) NOT NULL DEFAULT 0 AFTER `attack`, - MODIFY COLUMN `stamina` int(11) NOT NULL DEFAULT 0 AFTER `strength`, - MODIFY COLUMN `dexterity` int(11) NOT NULL DEFAULT 0 AFTER `stamina`, - MODIFY COLUMN `agility` int(11) NOT NULL DEFAULT 0 AFTER `dexterity`, - MODIFY COLUMN `intelligence` int(11) NOT NULL DEFAULT 0 AFTER `agility`, - MODIFY COLUMN `wisdom` int(11) NOT NULL DEFAULT 0 AFTER `intelligence`, - MODIFY COLUMN `charisma` int(11) NOT NULL DEFAULT 0 AFTER `wisdom`, - MODIFY COLUMN `magic_resist` int(11) NOT NULL DEFAULT 0 AFTER `charisma`, - MODIFY COLUMN `cold_resist` int(11) NOT NULL DEFAULT 0 AFTER `magic_resist`, - MODIFY COLUMN `fire_resist` int(11) NOT NULL DEFAULT 0 AFTER `cold_resist`, - MODIFY COLUMN `poison_resist` int(11) NOT NULL DEFAULT 0 AFTER `fire_resist`, - MODIFY COLUMN `disease_resist` int(11) NOT NULL DEFAULT 0 AFTER `poison_resist`, - MODIFY COLUMN `corruption_resist` int(11) NOT NULL DEFAULT 0 AFTER `disease_resist`, - MODIFY COLUMN `physical_resist` int(11) NOT NULL DEFAULT 0 AFTER `corruption_resist`, - MODIFY COLUMN `min_dmg` int(11) NOT NULL DEFAULT 0 AFTER `physical_resist`, - MODIFY COLUMN `max_dmg` int(11) NOT NULL DEFAULT 0 AFTER `min_dmg`, - MODIFY COLUMN `hp_regen_rate` int(11) NOT NULL DEFAULT 0 AFTER `max_dmg`, - MODIFY COLUMN `attack_delay` int(11) NOT NULL DEFAULT 0 AFTER `hp_regen_rate`, - MODIFY COLUMN `spell_scale` int(11) NOT NULL DEFAULT 100 AFTER `attack_delay`, - MODIFY COLUMN `heal_scale` int(11) NOT NULL DEFAULT 100 AFTER `spell_scale`, - MODIFY COLUMN special_abilities text CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL AFTER heal_scale, - ADD COLUMN `heroic_strikethrough` int(11) NOT NULL DEFAULT 0 AFTER `heal_scale`; diff --git a/utils/sql/git/required/2023_03_08_npc_scale_global_base_avoidance.sql b/utils/sql/git/required/2023_03_08_npc_scale_global_base_avoidance.sql deleted file mode 100644 index 64755da49..000000000 --- a/utils/sql/git/required/2023_03_08_npc_scale_global_base_avoidance.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE `npc_scale_global_base` -MODIFY COLUMN `hp` bigint(20) NOT NULL DEFAULT 0 AFTER `ac`, -MODIFY COLUMN `hp_regen_rate` bigint(20) NOT NULL DEFAULT 0 AFTER `max_dmg`, -ADD COLUMN `hp_regen_per_second` bigint(20) NOT NULL DEFAULT 0 AFTER `hp_regen_rate`, -ADD COLUMN `avoidance` int(11) unsigned NOT NULL DEFAULT 0 AFTER `heal_scale`; diff --git a/utils/sql/git/required/2023_03_17_corpse_fields.sql b/utils/sql/git/required/2023_03_17_corpse_fields.sql deleted file mode 100644 index 0552deb9b..000000000 --- a/utils/sql/git/required/2023_03_17_corpse_fields.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE `character_corpse_items` - ADD COLUMN `custom_data` TEXT NULL AFTER `attuned`, - ADD COLUMN `ornamenticon` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `custom_data`, - ADD COLUMN `ornamentidfile` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `ornamenticon`, - ADD COLUMN `ornament_hero_model` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `ornamentidfile`; diff --git a/utils/sql/git/required/2023_03_24_npc_scale_global_base_verify.sql b/utils/sql/git/required/2023_03_24_npc_scale_global_base_verify.sql deleted file mode 100644 index 2036f918d..000000000 --- a/utils/sql/git/required/2023_03_24_npc_scale_global_base_verify.sql +++ /dev/null @@ -1,57 +0,0 @@ -UPDATE `npc_scale_global_base` SET ac = 0 WHERE ac IS NULL; -UPDATE `npc_scale_global_base` SET hp = 0 WHERE hp IS NULL; -UPDATE `npc_scale_global_base` SET accuracy = 0 WHERE accuracy IS NULL; -UPDATE `npc_scale_global_base` SET slow_mitigation = 0 WHERE slow_mitigation IS NULL; -UPDATE `npc_scale_global_base` SET attack = 0 WHERE attack IS NULL; -UPDATE `npc_scale_global_base` SET strength = 0 WHERE strength IS NULL; -UPDATE `npc_scale_global_base` SET stamina = 0 WHERE stamina IS NULL; -UPDATE `npc_scale_global_base` SET dexterity = 0 WHERE dexterity IS NULL; -UPDATE `npc_scale_global_base` SET agility = 0 WHERE agility IS NULL; -UPDATE `npc_scale_global_base` SET intelligence = 0 WHERE intelligence IS NULL; -UPDATE `npc_scale_global_base` SET wisdom = 0 WHERE wisdom IS NULL; -UPDATE `npc_scale_global_base` SET charisma = 0 WHERE charisma IS NULL; -UPDATE `npc_scale_global_base` SET magic_resist = 0 WHERE magic_resist IS NULL; -UPDATE `npc_scale_global_base` SET cold_resist = 0 WHERE cold_resist IS NULL; -UPDATE `npc_scale_global_base` SET fire_resist = 0 WHERE fire_resist IS NULL; -UPDATE `npc_scale_global_base` SET poison_resist = 0 WHERE poison_resist IS NULL; -UPDATE `npc_scale_global_base` SET disease_resist = 0 WHERE disease_resist IS NULL; -UPDATE `npc_scale_global_base` SET corruption_resist = 0 WHERE corruption_resist IS NULL; -UPDATE `npc_scale_global_base` SET physical_resist = 0 WHERE physical_resist IS NULL; -UPDATE `npc_scale_global_base` SET min_dmg = 0 WHERE min_dmg IS NULL; -UPDATE `npc_scale_global_base` SET max_dmg = 0 WHERE max_dmg IS NULL; -UPDATE `npc_scale_global_base` SET hp_regen_rate = 0 WHERE hp_regen_rate IS NULL; -UPDATE `npc_scale_global_base` SET attack_delay = 0 WHERE attack_delay IS NULL; -UPDATE `npc_scale_global_base` SET physical_resist = 0 WHERE physical_resist IS NULL; -UPDATE `npc_scale_global_base` SET spell_scale = 100 WHERE spell_scale IS NULL; -UPDATE `npc_scale_global_base` SET heal_scale = 100 WHERE heal_scale IS NULL; -UPDATE `npc_scale_global_base` SET special_abilities = '' WHERE special_abilities IS NULL; -ALTER TABLE `npc_scale_global_base` - MODIFY COLUMN `ac` int(11) NOT NULL DEFAULT 0 AFTER `instance_version_list`, - MODIFY COLUMN `hp` bigint(20) NOT NULL DEFAULT 0 AFTER `ac`, - MODIFY COLUMN `accuracy` int(11) NOT NULL DEFAULT 0 AFTER `hp`, - MODIFY COLUMN `slow_mitigation` int(11) NOT NULL DEFAULT 0 AFTER `accuracy`, - MODIFY COLUMN `attack` int(11) NOT NULL DEFAULT 0 AFTER `slow_mitigation`, - MODIFY COLUMN `strength` int(11) NOT NULL DEFAULT 0 AFTER `attack`, - MODIFY COLUMN `stamina` int(11) NOT NULL DEFAULT 0 AFTER `strength`, - MODIFY COLUMN `dexterity` int(11) NOT NULL DEFAULT 0 AFTER `stamina`, - MODIFY COLUMN `agility` int(11) NOT NULL DEFAULT 0 AFTER `dexterity`, - MODIFY COLUMN `intelligence` int(11) NOT NULL DEFAULT 0 AFTER `agility`, - MODIFY COLUMN `wisdom` int(11) NOT NULL DEFAULT 0 AFTER `intelligence`, - MODIFY COLUMN `charisma` int(11) NOT NULL DEFAULT 0 AFTER `wisdom`, - MODIFY COLUMN `magic_resist` int(11) NOT NULL DEFAULT 0 AFTER `charisma`, - MODIFY COLUMN `cold_resist` int(11) NOT NULL DEFAULT 0 AFTER `magic_resist`, - MODIFY COLUMN `fire_resist` int(11) NOT NULL DEFAULT 0 AFTER `cold_resist`, - MODIFY COLUMN `poison_resist` int(11) NOT NULL DEFAULT 0 AFTER `fire_resist`, - MODIFY COLUMN `disease_resist` int(11) NOT NULL DEFAULT 0 AFTER `poison_resist`, - MODIFY COLUMN `corruption_resist` int(11) NOT NULL DEFAULT 0 AFTER `disease_resist`, - MODIFY COLUMN `physical_resist` int(11) NOT NULL DEFAULT 0 AFTER `corruption_resist`, - MODIFY COLUMN `min_dmg` int(11) NOT NULL DEFAULT 0 AFTER `physical_resist`, - MODIFY COLUMN `max_dmg` int(11) NOT NULL DEFAULT 0 AFTER `min_dmg`, - MODIFY COLUMN `hp_regen_rate` bigint(20) NOT NULL DEFAULT 0 AFTER `max_dmg`, - MODIFY COLUMN `attack_delay` int(11) NOT NULL DEFAULT 0 AFTER `hp_regen_rate`, - MODIFY COLUMN `hp_regen_per_second` bigint(20) NOT NULL DEFAULT 0 AFTER `hp_regen_rate`, - MODIFY COLUMN `spell_scale` int(11) NOT NULL DEFAULT 100 AFTER `attack_delay`, - MODIFY COLUMN `heal_scale` int(11) NOT NULL DEFAULT 100 AFTER `spell_scale`, - MODIFY COLUMN `heroic_strikethrough` int(11) NOT NULL DEFAULT 0 AFTER `avoidance`, - MODIFY COLUMN `avoidance` int(11) unsigned NOT NULL DEFAULT 0 AFTER `heal_scale`, - MODIFY COLUMN special_abilities text CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL AFTER heroic_strikethrough; \ No newline at end of file diff --git a/utils/sql/git/required/2023_01_15_merc_data.sql b/utils/sql/merc_tables_bootstrap.sql similarity index 99% rename from utils/sql/git/required/2023_01_15_merc_data.sql rename to utils/sql/merc_tables_bootstrap.sql index c262dc43e..a527df283 100644 --- a/utils/sql/git/required/2023_01_15_merc_data.sql +++ b/utils/sql/merc_tables_bootstrap.sql @@ -1,6 +1,5 @@ SET NAMES utf8; -SET -FOREIGN_KEY_CHECKS = 0; +SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for merc_armorinfo @@ -7065,5 +7064,4 @@ CREATE TABLE `mercs` PRIMARY KEY (`MercID`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -SET -FOREIGN_KEY_CHECKS = 1; +SET FOREIGN_KEY_CHECKS = 1; diff --git a/world/adventure.cpp b/world/adventure.cpp index bc72d8cf4..457118b3d 100644 --- a/world/adventure.cpp +++ b/world/adventure.cpp @@ -82,7 +82,7 @@ void Adventure::RemovePlayer(std::string character_name) } } -bool Adventure::PlayerExists(std::string character_name) +bool Adventure::PlayerExists(const std::string& character_name) { auto iter = players.begin(); while(iter != players.end()) diff --git a/world/adventure.h b/world/adventure.h index ffc9afd9f..8f7e4c418 100644 --- a/world/adventure.h +++ b/world/adventure.h @@ -71,7 +71,7 @@ public: bool IsActive(); void AddPlayer(std::string character_name, bool add_client_to_instance = true); void RemovePlayer(std::string character_name); - bool PlayerExists(std::string character_name); + bool PlayerExists(const std::string& character_name); bool CreateInstance(); void IncrementCount(); void IncrementAssassinationCount(); diff --git a/world/cli/bots_disable.cpp b/world/cli/bots_disable.cpp new file mode 100644 index 000000000..b8b36dcc7 --- /dev/null +++ b/world/cli/bots_disable.cpp @@ -0,0 +1,36 @@ +#include "../worlddb.h" +#include "../../common/database_schema.h" + +void WorldserverCLI::BotsDisable(int argc, char **argv, argh::parser &cmd, std::string &description) +{ + description = "Disables bots and drops tables"; + + if (cmd[{"-h", "--help"}]) { + return; + } + + std::string input; + std::cout << "Warning! This will drop all bot tables, are you sure? [y/n]"; + std::getline(std::cin, input); + + if (Strings::ToLower(input) != "y") { + LogInfo("Aborting"); + return; + } + + // drop bot tables + std::string sql = "SET FOREIGN_KEY_CHECKS = 0;"; + for (auto &t: DatabaseSchema::GetBotTables()) { + sql += fmt::format("DROP TABLE IF EXISTS {};", t); + LogInfo("Dropping table [{}]", t); + } + + sql += "SET FOREIGN_KEY_CHECKS = 1;"; + + database.QueryDatabaseMulti(sql); + + // disable bots + LogInfo("Setting rule Bots:Enabled to false"); + RuleManager::Instance()->SetRule("Bots:Enabled", "false", &database, true, true); + LogInfo("Bots disabled"); +} diff --git a/world/cli/bots_enable.cpp b/world/cli/bots_enable.cpp new file mode 100644 index 000000000..f02950742 --- /dev/null +++ b/world/cli/bots_enable.cpp @@ -0,0 +1,26 @@ +#include "../worlddb.h" +#include "../../common/rulesys.h" + +void WorldserverCLI::BotsEnable(int argc, char **argv, argh::parser &cmd, std::string &description) +{ + description = "Bootstraps bot tables and enables bots"; + + if (cmd[{"-h", "--help"}]) { + return; + } + + // bootstrap bot tables if they don't exist + if (!database.DoesTableExist("bot_data")) { + LogInfo("Bootstrapping bot tables"); + database.SourceSqlFromUrl( + "https://raw.githubusercontent.com/EQEmu/Server/master/utils/sql/bot_tables_bootstrap.sql" + ); + } + else { + LogInfo("Bot tables already exist, skipping bootstrap"); + } + + LogInfo("Enabling bots"); + LogInfo("Setting rule Bots:Enabled to true"); + RuleManager::Instance()->SetRule("Bots:Enabled", "true", &database, true, true); +} diff --git a/world/cli/database_dump.cpp b/world/cli/database_dump.cpp index b15edeb12..18bd661c0 100644 --- a/world/cli/database_dump.cpp +++ b/world/cli/database_dump.cpp @@ -23,12 +23,12 @@ void WorldserverCLI::DatabaseDump(int argc, char **argv, argh::parser &cmd, std: "--compress" }; + EQEmuCommand::ValidateCmdInput(arguments, options, cmd, argc, argv); + if (cmd[{"-h", "--help"}]) { return; } - EQEmuCommand::ValidateCmdInput(arguments, options, cmd, argc, argv); - auto s = new DatabaseDumpService(); bool dump_all = cmd[{"-a", "--all"}]; @@ -36,9 +36,7 @@ void WorldserverCLI::DatabaseDump(int argc, char **argv, argh::parser &cmd, std: s->SetDumpPath(cmd("--dump-path").str()); } - /** - * Set Option - */ + // options s->SetDumpContentTables(cmd[{"--content-tables"}] || dump_all); s->SetDumpLoginServerTables(cmd[{"--login-tables"}] || dump_all); s->SetDumpPlayerTables(cmd[{"--player-tables"}] || dump_all); @@ -48,15 +46,11 @@ void WorldserverCLI::DatabaseDump(int argc, char **argv, argh::parser &cmd, std: s->SetDumpSystemTables(cmd[{"--system-tables"}] || dump_all); s->SetDumpQueryServerTables(cmd[{"--query-serv-tables"}] || dump_all); s->SetDumpAllTables(dump_all); - s->SetDumpWithNoData(cmd[{"--table-structure-only"}]); s->SetDumpTableLock(cmd[{"--table-lock"}]); s->SetDumpWithCompression(cmd[{"--compress"}]); s->SetDumpOutputToConsole(cmd[{"--dump-output-to-console"}]); s->SetDumpDropTableSyntaxOnly(cmd[{"--drop-table-syntax-only"}]); - /** - * Dump - */ - s->Dump(); + s->DatabaseDump(); } diff --git a/world/cli/database_updates.cpp b/world/cli/database_updates.cpp new file mode 100644 index 000000000..6ec99b6fd --- /dev/null +++ b/world/cli/database_updates.cpp @@ -0,0 +1,13 @@ +#include "../../common/database/database_update.h" + +void WorldserverCLI::DatabaseUpdates(int argc, char **argv, argh::parser &cmd, std::string &description) +{ + description = "Runs database updates manually"; + + if (cmd[{"-h", "--help"}]) { + return; + } + + DatabaseUpdate update; + update.SetDatabase(&database)->CheckDbUpdates(); +} diff --git a/world/cli/mercs_disable.cpp b/world/cli/mercs_disable.cpp new file mode 100644 index 000000000..0af5d4b0e --- /dev/null +++ b/world/cli/mercs_disable.cpp @@ -0,0 +1,33 @@ +#include "../worlddb.h" +#include "../../common/database_schema.h" + +void WorldserverCLI::MercsDisable(int argc, char **argv, argh::parser &cmd, std::string &description) +{ + description = "Disables mercenaries"; + + if (cmd[{"-h", "--help"}]) { + return; + } + + std::string input; + std::cout << "Warning! This will drop all merc tables, are you sure? [y/n]"; + std::getline(std::cin, input); + + if (Strings::ToLower(input) != "y") { + LogInfo("Aborting"); + return; + } + + std::string sql = "SET FOREIGN_KEY_CHECKS = 0;"; + for (auto &t: DatabaseSchema::GetMercTables()) { + sql += fmt::format("DROP TABLE IF EXISTS {};", t); + LogInfo("Dropping table [{}]", t); + } + + sql += "SET FOREIGN_KEY_CHECKS = 1;"; + + database.QueryDatabaseMulti(sql); + LogInfo("Setting rule Mercs:AllowMercs to false"); + RuleManager::Instance()->SetRule("Mercs:AllowMercs", "false", &database, true, true); + LogInfo("Disabled mercs and dropped tables"); +} diff --git a/world/cli/mercs_enable.cpp b/world/cli/mercs_enable.cpp new file mode 100644 index 000000000..2970f835d --- /dev/null +++ b/world/cli/mercs_enable.cpp @@ -0,0 +1,27 @@ +#include "../worlddb.h" +#include "../../common/database_schema.h" + +void WorldserverCLI::MercsEnable(int argc, char **argv, argh::parser &cmd, std::string &description) +{ + description = "Enables mercenaries"; + + if (cmd[{"-h", "--help"}]) { + return; + } + + // bootstrap merc tables if they don't exist + if (!database.DoesTableExist("merc_types")) { + LogInfo("Bootstrapping merc tables"); + database.SourceSqlFromUrl( + "https://raw.githubusercontent.com/EQEmu/Server/master/utils/sql/merc_tables_bootstrap.sql" + ); + } + else { + LogInfo("Merc tables already exist, skipping bootstrap"); + } + + LogInfo("Enabling mercs"); + LogInfo("Setting rule Mercs:AllowMercs to true"); + RuleManager::Instance()->SetRule("Mercs:AllowMercs", "true", &database, true, true); + LogInfo("Mercs enabled"); +} diff --git a/world/client.cpp b/world/client.cpp index 5d60d727b..1c6b88f93 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -1258,7 +1258,7 @@ bool Client::ChecksumVerificationCRCEQGame(uint64 checksum) std::string checksumvar; uint64_t checksumint; if (database.GetVariable("crc_eqgame", checksumvar)) { - checksumint = Strings::ToBigInt(checksumvar.c_str()); + checksumint = Strings::ToBigInt(checksumvar); } else { LogChecksumVerification("variable not set in variables table."); @@ -1281,7 +1281,7 @@ bool Client::ChecksumVerificationCRCSkillCaps(uint64 checksum) std::string checksumvar; uint64_t checksumint; if (database.GetVariable("crc_skillcaps", checksumvar)) { - checksumint = Strings::ToBigInt(checksumvar.c_str()); + checksumint = Strings::ToBigInt(checksumvar); } else { LogChecksumVerification("[checksum_crc2_skillcaps] variable not set in variables table."); @@ -1304,7 +1304,7 @@ bool Client::ChecksumVerificationCRCBaseData(uint64 checksum) std::string checksumvar; uint64_t checksumint; if (database.GetVariable("crc_basedata", checksumvar)) { - checksumint = Strings::ToBigInt(checksumvar.c_str()); + checksumint = Strings::ToBigInt(checksumvar); } else { LogChecksumVerification("variable not set in variables table."); diff --git a/world/cliententry.cpp b/world/cliententry.cpp index 142887b26..e8af366f2 100644 --- a/world/cliententry.cpp +++ b/world/cliententry.cpp @@ -360,7 +360,7 @@ bool ClientListEntry::CheckAuth(uint32 loginserver_account_id, const char *key_p } std::string lsworldadmin; if (database.GetVariable("honorlsworldadmin", lsworldadmin)) { - if (Strings::ToInt(lsworldadmin.c_str()) == 1 && pworldadmin != 0 && (padmin < pworldadmin || padmin == AccountStatus::Player)) { + if (Strings::ToInt(lsworldadmin) == 1 && pworldadmin != 0 && (padmin < pworldadmin || padmin == AccountStatus::Player)) { padmin = pworldadmin; } } diff --git a/world/clientlist.cpp b/world/clientlist.cpp index 225069e9b..57b2c8f98 100644 --- a/world/clientlist.cpp +++ b/world/clientlist.cpp @@ -268,8 +268,8 @@ void ClientList::SendCLEList(const int16& admin, const char* to, WorldTCPConnect strcpy(newline, "\r\n"); else strcpy(newline, "^"); - std::vector out; + auto out = fmt::memory_buffer(); iterator.Reset(); while(iterator.MoreElements()) { ClientListEntry* cle = iterator.GetData(); @@ -1008,7 +1008,7 @@ void ClientList::ConsoleSendWhoAll(const char* to, int16 admin, Who_All_Struct* if (whom) whomlen = strlen(whom->whom); - std::vector out; + auto out = fmt::memory_buffer(); fmt::format_to(std::back_inserter(out), "Players on server:"); if (connection->IsConsole()) fmt::format_to(std::back_inserter(out), "\r\n"); diff --git a/world/console.cpp b/world/console.cpp index a843dee67..43fa55c63 100644 --- a/world/console.cpp +++ b/world/console.cpp @@ -166,14 +166,14 @@ void ConsoleWho( } else if (Strings::IsNumber(arg)) { if (whom.lvllow == 0xFFFF) { - whom.lvllow = Strings::ToInt(arg.c_str()); + whom.lvllow = Strings::ToInt(arg); whom.lvlhigh = whom.lvllow; } - else if (Strings::ToInt(arg.c_str()) > int(whom.lvllow)) { - whom.lvlhigh = Strings::ToInt(arg.c_str()); + else if (Strings::ToInt(arg) > int(whom.lvllow)) { + whom.lvlhigh = Strings::ToInt(arg); } else { - whom.lvllow = Strings::ToInt(arg.c_str()); + whom.lvllow = Strings::ToInt(arg); } } else { @@ -200,11 +200,11 @@ void ConsoleUptime( return; } - if (Strings::IsNumber(args[0]) && Strings::ToInt(args[0].c_str()) > 0) { + if (Strings::IsNumber(args[0]) && Strings::ToInt(args[0]) > 0) { auto pack = new ServerPacket(ServerOP_Uptime, sizeof(ServerUptime_Struct)); ServerUptime_Struct *sus = (ServerUptime_Struct *) pack->pBuffer; snprintf(sus->adminname, sizeof(sus->adminname), "*%s", connection->UserName().c_str()); - sus->zoneserverid = Strings::ToInt(args[0].c_str()); + sus->zoneserverid = Strings::ToInt(args[0]); ZoneServer *zs = zoneserver_list.FindByID(sus->zoneserverid); if (zs) { zs->SendPacket(pack); @@ -284,7 +284,7 @@ void ConsoleEmote( 0, 0, AccountStatus::Player, - Strings::ToInt(args[1].c_str()), + Strings::ToInt(args[1]), Strings::Join(join_args, " ").c_str() ); } @@ -295,7 +295,7 @@ void ConsoleEmote( 0, 0, AccountStatus::Player, - Strings::ToInt(args[1].c_str()), + Strings::ToInt(args[1]), Strings::Join(join_args, " ").c_str() ); } @@ -304,7 +304,7 @@ void ConsoleEmote( args[0].c_str(), 0, AccountStatus::Player, - Strings::ToInt(args[1].c_str()), + Strings::ToInt(args[1]), Strings::Join(join_args, " ").c_str() ); } @@ -361,7 +361,7 @@ void ConsoleTell( auto join_args = args; join_args.erase(join_args.begin(), join_args.begin() + 1); - zoneserver_list.SendChannelMessage(tmpname, to.c_str(), 7, 0, Strings::Join(join_args, " ").c_str()); + zoneserver_list.SendChannelMessage(tmpname, to.c_str(), ChatChannel_Tell, 0, Strings::Join(join_args, " ").c_str()); } /** @@ -382,7 +382,7 @@ void ConsoleBroadcast( char tmpname[64]; tmpname[0] = '*'; strcpy(&tmpname[1], connection->UserName().c_str()); - zoneserver_list.SendChannelMessage(tmpname, 0, 6, 0, Strings::Join(args, " ").c_str()); + zoneserver_list.SendChannelMessage(tmpname, 0, ChatChannel_Broadcast, 0, Strings::Join(args, " ").c_str()); } /** @@ -403,7 +403,7 @@ void ConsoleGMSay( char tmpname[64]; tmpname[0] = '*'; strcpy(&tmpname[1], connection->UserName().c_str()); - zoneserver_list.SendChannelMessage(tmpname, 0, 11, 0, Strings::Join(args, " ").c_str()); + zoneserver_list.SendChannelMessage(tmpname, 0, ChatChannel_GMSAY, 0, Strings::Join(args, " ").c_str()); } /** @@ -457,7 +457,7 @@ void ConsoleOOC( char tmpname[64]; tmpname[0] = '*'; strcpy(&tmpname[1], connection->UserName().c_str()); - zoneserver_list.SendChannelMessage(tmpname, 0, 5, 0, Strings::Join(args, " ").c_str()); + zoneserver_list.SendChannelMessage(tmpname, 0, ChatChannel_OOC, 0, Strings::Join(args, " ").c_str()); } /** @@ -478,7 +478,7 @@ void ConsoleAuction( char tmpname[64]; tmpname[0] = '*'; strcpy(&tmpname[1], connection->UserName().c_str()); - zoneserver_list.SendChannelMessage(tmpname, 0, 4, 0, Strings::Join(args, " ").c_str()); + zoneserver_list.SendChannelMessage(tmpname, 0, ChatChannel_Auction, 0, Strings::Join(args, " ").c_str()); } /** @@ -585,7 +585,7 @@ void ConsoleZoneShutdown( pack->opcode = ServerOP_ZoneShutdown; strcpy(s->adminname, tmpname); if (Strings::IsNumber(args[0])) { - s->ZoneServerID = Strings::ToInt(args[0].c_str()); + s->ZoneServerID = Strings::ToInt(args[0]); } else { s->zoneid = ZoneID(args[0].c_str()); @@ -639,12 +639,12 @@ void ConsoleZoneBootup( if (args.size() > 2) { zoneserver_list.SOPZoneBootup( tmpname, - Strings::ToInt(args[0].c_str()), + Strings::ToInt(args[0]), args[1].c_str(), (bool) (strcasecmp(args[1].c_str(), "static") == 0)); } else { - zoneserver_list.SOPZoneBootup(tmpname, Strings::ToInt(args[0].c_str()), args[1].c_str(), false); + zoneserver_list.SOPZoneBootup(tmpname, Strings::ToInt(args[0]), args[1].c_str(), false); } } } @@ -751,10 +751,10 @@ void ConsoleFlag( connection->SendLine("Usage: flag [status] [accountname]"); } else { - if (Strings::ToInt(args[0].c_str()) > connection->Admin()) { + if (Strings::ToInt(args[0]) > connection->Admin()) { connection->SendLine("You cannot set people's status to higher than your own"); } - else if (!database.SetAccountStatus(args[1].c_str(), Strings::ToInt(args[0].c_str()))) { + else if (!database.SetAccountStatus(args[1].c_str(), Strings::ToInt(args[0]))) { connection->SendLine("Unable to flag account!"); } else { @@ -821,8 +821,8 @@ void ConsoleWorldShutdown( { if (args.size() == 2) { int32 time, interval; - if (Strings::IsNumber(args[0]) && Strings::IsNumber(args[1]) && ((time = Strings::ToInt(args[0].c_str())) > 0) && - ((interval = Strings::ToInt(args[1].c_str())) > 0)) { + if (Strings::IsNumber(args[0]) && Strings::IsNumber(args[1]) && ((time = Strings::ToInt(args[0])) > 0) && + ((interval = Strings::ToInt(args[1])) > 0)) { zoneserver_list.WorldShutDown(time, interval); } else { @@ -886,7 +886,7 @@ void ConsoleSignalCharByName( return; } - connection->SendLine(StringFormat("Signal Sent to %s with ID %i", (char *) args[0].c_str(), Strings::ToInt(args[1].c_str()))); + connection->SendLine(StringFormat("Signal Sent to %s with ID %i", (char *) args[0].c_str(), Strings::ToInt(args[1]))); uint32 message_len = strlen((char *) args[0].c_str()) + 1; auto pack = new ServerPacket(ServerOP_CZSignal, sizeof(CZSignal_Struct) + message_len); CZSignal_Struct* CZS = (CZSignal_Struct*) pack->pBuffer; @@ -894,7 +894,7 @@ void ConsoleSignalCharByName( int update_identifier = 0; CZS->update_type = update_type; CZS->update_identifier = update_identifier; - CZS->signal_id = Strings::ToInt(args[1].c_str()); + CZS->signal_id = Strings::ToInt(args[1]); strn0cpy(CZS->client_name, (char *) args[0].c_str(), 64); zoneserver_list.SendPacket(pack); safe_delete(pack); @@ -962,6 +962,352 @@ void ConsoleQuit( connection->Close(); } +void ConsoleCrossZoneCastSpell( + EQ::Net::ConsoleServerConnection *connection, + const std::string &command, + const std::vector &args +) { + if (args.size() < 3) { + connection->SendLine("czcast character [character_id] [spell_id]"); + connection->SendLine("czcast expedition [expedition_id] [spell_id]"); + connection->SendLine("czcast group [group_id] [spell_id]"); + connection->SendLine("czcast guild [guild_id] [spell_id]"); + connection->SendLine("czcast name [character_name] [spell_id]"); + connection->SendLine("czcast raid [raid_id] [spell_id]"); + return; + } + + const auto& type = Strings::ToLower(args[0]); + + const auto is_character = type == "character"; + const auto is_expedition = type == "expedition"; + const auto is_group = type == "group"; + const auto is_guild = type == "guild"; + const auto is_name = type == "name"; + const auto is_raid = type == "raid"; + + if ( + !is_character && + !is_expedition && + !is_group && + !is_guild && + !is_name & + !is_raid + ) { + connection->SendLine("czcast character [character_id] [spell_id]"); + connection->SendLine("czcast expedition [expedition_id] [spell_id]"); + connection->SendLine("czcast group [group_id] [spell_id]"); + connection->SendLine("czcast guild [guild_id] [spell_id]"); + connection->SendLine("czcast name [character_name] [spell_id]"); + connection->SendLine("czcast raid [raid_id] [spell_id]"); + return; + } + + std::string name; + int update_identifier = 0; + + if (!is_name) { + if (Strings::IsNumber(args[1])) { + update_identifier = Strings::ToInt(args[1]); + } + + if (!update_identifier) { + connection->SendLine(fmt::format("Identifier is invalid for '{}'.", type)); + return; + } + } else if (is_name) { + if (!Strings::IsNumber(args[1])) { + name = Strings::UcFirst(Strings::ToLower(args[1])); + } + + if (name.empty()) { + connection->SendLine("Empty name is invalid."); + return; + } + } + + const auto spell_id = Strings::IsNumber(args[2]) ? Strings::ToUnsignedInt(args[2]) : 0; + + if (!spell_id) { + connection->SendLine("Spell ID is invalid."); + return; + } + + uint8 update_type; + + if (is_character) { + update_type = CZUpdateType_Character; + } else if (is_expedition) { + update_type = CZUpdateType_Expedition; + } else if (is_group) { + update_type = CZUpdateType_Group; + } else if (is_guild) { + update_type = CZUpdateType_Guild; + } else if (is_name) { + update_type = CZUpdateType_ClientName; + } else if (is_raid) { + update_type = CZUpdateType_Raid; + } + + auto pack = new ServerPacket(ServerOP_CZSpell, sizeof(CZSpell_Struct)); + auto* CZS = (CZSpell_Struct*) pack->pBuffer; + + CZS->update_type = update_type; + CZS->update_subtype = CZSpellUpdateSubtype_Cast; + CZS->update_identifier = update_identifier; + CZS->spell_id = spell_id; + + strn0cpy(CZS->client_name, name.c_str(), sizeof(CZS->client_name)); + + zoneserver_list.SendPacket(pack); + safe_delete(pack); + + connection->SendLine( + fmt::format( + "Casting spell ID {} across zones by {} with an identifier of {}.", + spell_id, + type, + !is_name ? std::to_string(update_identifier) : name + ) + ); +} + +void ConsoleWorldWideCastSpell( + EQ::Net::ConsoleServerConnection *connection, + const std::string &command, + const std::vector &args +) { + if (args.size() < 1) { + connection->SendLine("wwcast [spell_id]"); + connection->SendLine("wwcast [spell_id] [min_status]"); + connection->SendLine("wwcast [spell_id] [min_status] [max_status]"); + return; + } + + const auto spell_id = Strings::IsNumber(args[0]) ? Strings::ToUnsignedInt(args[0]) : 0; + + if (!spell_id) { + connection->SendLine("Spell ID 0 is invalid."); + return; + } + + uint8 min_status = AccountStatus::Player; + uint8 max_status = AccountStatus::Player; + + if (args.size() >= 2 && Strings::IsNumber(args[1])) { + min_status = static_cast(Strings::ToUnsignedInt(args[1])); + } + + if (args.size() >= 3 && Strings::IsNumber(args[2])) { + max_status = static_cast(Strings::ToUnsignedInt(args[2])); + } + + auto pack = new ServerPacket(ServerOP_WWSpell, sizeof(WWSpell_Struct)); + auto* WWS = (WWSpell_Struct*) pack->pBuffer; + + WWS->update_type = WWSpellUpdateType_Cast; + WWS->spell_id = spell_id; + WWS->min_status = min_status; + WWS->max_status = max_status; + + zoneserver_list.SendPacket(pack); + safe_delete(pack); + + connection->SendLine( + fmt::format( + "Casting spell ID {} world wide for players with a status between {} and {}.", + spell_id, + min_status, + max_status + ) + ); +} + +void ConsoleCrossZoneMove( + EQ::Net::ConsoleServerConnection *connection, + const std::string &command, + const std::vector &args +) { + if (args.size() < 3) { + connection->SendLine("czmove character [character_id] [instance_id]"); + connection->SendLine("czmove character [character_id] [zone_short_name]"); + connection->SendLine("czmove expedition [expedition_id] [instance_id]"); + connection->SendLine("czmove expedition [expedition_id] [zone_short_name]"); + connection->SendLine("czmove group [group_id] [instance_id]"); + connection->SendLine("czmove group [group_id] [zone_short_name]"); + connection->SendLine("czmove guild [guild_id] [instance_id]"); + connection->SendLine("czmove guild [guild_id] [zone_short_name]"); + connection->SendLine("czmove name [character_name] [instance_id]"); + connection->SendLine("czmove name [character_name] [zone_short_name]"); + connection->SendLine("czmove raid [raid_id] [instance_id]"); + connection->SendLine("czmove raid [raid_id] [zone_short_name]"); + return; + } + + const auto& type = Strings::ToLower(args[0]); + + const auto is_character = type == "character"; + const auto is_expedition = type == "expedition"; + const auto is_group = type == "group"; + const auto is_guild = type == "guild"; + const auto is_name = type == "name"; + const auto is_raid = type == "raid"; + + if ( + !is_character && + !is_expedition && + !is_group && + !is_guild && + !is_name & + !is_raid + ) { + connection->SendLine("czmove character [character_id] [instance_id]"); + connection->SendLine("czmove character [character_id] [zone_short_name]"); + connection->SendLine("czmove expedition [expedition_id] [instance_id]"); + connection->SendLine("czmove expedition [expedition_id] [zone_short_name]"); + connection->SendLine("czmove group [group_id] [instance_id]"); + connection->SendLine("czmove group [group_id] [zone_short_name]"); + connection->SendLine("czmove guild [guild_id] [instance_id]"); + connection->SendLine("czmove guild [guild_id] [zone_short_name]"); + connection->SendLine("czmove name [character_name] [instance_id]"); + connection->SendLine("czmove name [character_name] [zone_short_name]"); + connection->SendLine("czmove raid [raid_id] [instance_id]"); + connection->SendLine("czmove raid [raid_id] [zone_short_name]"); + return; + } + + std::string name; + int update_identifier = 0; + + if (!is_name) { + if (Strings::IsNumber(args[1])) { + update_identifier = Strings::ToInt(args[1]); + } + + if (!update_identifier) { + connection->SendLine(fmt::format("Identifier invalid for '{}'.", type)); + return; + } + } else if (is_name) { + if (!Strings::IsNumber(args[1])) { + name = Strings::UcFirst(Strings::ToLower(args[1])); + } + + if (name.empty()) { + connection->SendLine("Empty name is invalid."); + return; + } + } + + const auto& zone_short_name = !Strings::IsNumber(args[2]) ? args[2] : ""; + const uint16 instance_id = Strings::IsNumber(args[2]) ? static_cast(Strings::ToUnsignedInt(args[2])) : 0; + + const auto& z = !zone_short_name.empty() ? zone_store.GetZone(zone_short_name) : nullptr; + + if (z && !z->id) { + connection->SendLine(fmt::format("No zone with the short name '{}' exists.", zone_short_name)); + return; + } + + uint8 update_type; + + if (is_character) { + update_type = CZUpdateType_Character; + } else if (is_expedition) { + update_type = CZUpdateType_Expedition; + } else if (is_group) { + update_type = CZUpdateType_Group; + } else if (is_guild) { + update_type = CZUpdateType_Guild; + } else if (is_name) { + update_type = CZUpdateType_ClientName; + } else if (is_raid) { + update_type = CZUpdateType_Raid; + } + + auto pack = new ServerPacket(ServerOP_CZMove, sizeof(CZMove_Struct)); + auto* CZM = (CZMove_Struct*) pack->pBuffer; + + CZM->update_type = update_type; + CZM->update_subtype = !instance_id ? CZMoveUpdateSubtype_MoveZone : CZMoveUpdateSubtype_MoveZoneInstance; + CZM->update_identifier = update_identifier; + CZM->instance_id = instance_id; + + strn0cpy(CZM->zone_short_name, zone_short_name.c_str(), sizeof(CZM->zone_short_name)); + strn0cpy(CZM->client_name, name.c_str(), sizeof(CZM->client_name)); + + zoneserver_list.SendPacket(pack); + safe_delete(pack); + + connection->SendLine( + fmt::format( + "Moving player(s) to {} by {} with an identifier of {}.", + !instance_id ? fmt::format("{} ({})", z->long_name, z->short_name) : fmt::format("Instance ID {}", instance_id), + type, + !is_name ? std::to_string(update_identifier) : name + ) + ); +} + +void ConsoleWorldWideMove( + EQ::Net::ConsoleServerConnection *connection, + const std::string &command, + const std::vector &args +) { + if (args.size() < 1) { + connection->SendLine("wwmove [instance_id]"); + connection->SendLine("wwmove [instance_id] [min_status]"); + connection->SendLine("wwmove [instance_id] [min_status] [max_status]"); + connection->SendLine("wwmove [zone_short_name]"); + connection->SendLine("wwmove [zone_short_name] [min_status]"); + connection->SendLine("wwmove [zone_short_name] [min_status] [max_status]"); + return; + } +\ + const auto& zone_short_name = !Strings::IsNumber(args[2]) ? args[2] : ""; + const uint16 instance_id = Strings::IsNumber(args[2]) ? static_cast(Strings::ToUnsignedInt(args[2])) : 0; + + const auto& z = !zone_short_name.empty() ? zone_store.GetZone(zone_short_name) : nullptr; + + if (z && !z->id) { + connection->SendLine(fmt::format("No zone with the short name '{}' exists.", zone_short_name)); + return; + } + + uint8 min_status = AccountStatus::Player; + uint8 max_status = AccountStatus::Player; + + if (args.size() >= 2 && Strings::IsNumber(args[1])) { + min_status = static_cast(Strings::ToUnsignedInt(args[1])); + } + + if (args.size() >= 3 && Strings::IsNumber(args[2])) { + max_status = static_cast(Strings::ToUnsignedInt(args[2])); + } + + auto pack = new ServerPacket(ServerOP_WWMove, sizeof(WWMove_Struct)); + auto* WWM = (WWMove_Struct*) pack->pBuffer; + + WWM->update_type = !instance_id ? WWMoveUpdateType_MoveZone : WWMoveUpdateType_MoveZoneInstance; + WWM->instance_id = instance_id; + WWM->min_status = min_status; + WWM->max_status = max_status; + + strn0cpy(WWM->zone_short_name, zone_short_name.c_str(), sizeof(WWM->zone_short_name)); + + zoneserver_list.SendPacket(pack); + safe_delete(pack); + + connection->SendLine( + fmt::format( + "Moving player(s) to {} for players with a status between {} and {}.", + !instance_id ? fmt::format("{} ({})", z->long_name, z->short_name) : fmt::format("Instance ID {}", instance_id), + min_status, + max_status + ) + ); +} + /** * @param console @@ -973,17 +1319,20 @@ void RegisterConsoleFunctions(std::unique_ptr& console) console->RegisterCall("api", 200, "api", std::bind(ConsoleApi, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("auction", 50, "auction [message]", std::bind(ConsoleAuction, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("broadcast", 50, "broadcast [message]", std::bind(ConsoleBroadcast, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + console->RegisterCall("czcast", 50, "czcast [type] [identifier] [spell_id]", std::bind(ConsoleCrossZoneCastSpell, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + console->RegisterCall("czmove", 50, "czmove [type] [identifier] [instance_id|zone_short_name] - instance_id and zone_short_name are interchangeable", std::bind(ConsoleCrossZoneMove, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("echo", 50, "echo [on/off]", std::bind(ConsoleNull, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("emote", 50, "emote [zonename or charname or world] [type] [message]", std::bind(ConsoleEmote, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("flag", 200, "flag [status] [accountname]", std::bind(ConsoleFlag, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("gmsay", 50, "gmsay [message]", std::bind(ConsoleGMSay, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("guildsay", 50, "guildsay [Character Name] [Guild ID] [Message]", std::bind(ConsoleGuildSay, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); - console->RegisterCall("iplookup", 50, "IPLookup [name]", std::bind(ConsoleIpLookup, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + console->RegisterCall("iplookup", 50, "iplookup [name]", std::bind(ConsoleIpLookup, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("kick", 150, "kick [charname]", std::bind(ConsoleKick, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("lock", 150, "lock", std::bind(ConsoleLock, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("lsreconnect", 50, "LSReconnect", std::bind(ConsoleNull, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("md5", 50, "md5", std::bind(ConsoleMd5, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("ooc", 50, "ooc [message]", std::bind(ConsoleOOC, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + console->RegisterCall("ping", 50, "ping", std::bind(ConsoleNull, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("reloadworld", 200, "reloadworld", std::bind(ConsoleReloadWorld, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("reloadzonequests", 200, "reloadzonequests [zone_short_name]", std::bind(ConsoleReloadZoneQuests, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("setpass", 200, "setpass [account_name] [new_password]", std::bind(ConsoleSetPass, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); @@ -995,10 +1344,12 @@ void RegisterConsoleFunctions(std::unique_ptr& console) console->RegisterCall("who", 50, "who", std::bind(ConsoleWho, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("whoami", 50, "whoami", std::bind(ConsoleWhoami, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("worldshutdown", 200, "worldshutdown", std::bind(ConsoleWorldShutdown, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + console->RegisterCall("wwcast", 50, "wwcast [spell_id] [min_status] [max_status] - min_status and max_status are optional", std::bind(ConsoleWorldWideCastSpell, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + console->RegisterCall("wwmove", 50, "wwmove [instance_id|zone_short_name] [min_status] [max_status] - min_status and max_status are optional, instance_id and zone_short_name are interchangeable", std::bind(ConsoleWorldWideMove, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("zonebootup", 150, "zonebootup [zone_server_id] [zone_short_name]", std::bind(ConsoleZoneBootup, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("zonelock", 150, "zonelock [list|lock|unlock] [zone_short_name]", std::bind(ConsoleZoneLock, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("zoneshutdown", 150, "zoneshutdown [zone_short_name or zone_server_id]", std::bind(ConsoleZoneShutdown, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); - console->RegisterCall("zonestatus", 50, "zonestatus", std::bind(ConsoleZoneStatus, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));console->RegisterCall("ping", 50, "ping", std::bind(ConsoleNull, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + console->RegisterCall("zonestatus", 50, "zonestatus", std::bind(ConsoleZoneStatus, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("quit", 50, "quit", std::bind(ConsoleQuit, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("exit", 50, "exit", std::bind(ConsoleQuit, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); } diff --git a/world/eqemu_api_world_data_service.cpp b/world/eqemu_api_world_data_service.cpp index c9e257a64..1fff092c8 100644 --- a/world/eqemu_api_world_data_service.cpp +++ b/world/eqemu_api_world_data_service.cpp @@ -146,6 +146,7 @@ std::vector reload_types = { Reload{.command = "merchants", .opcode = ServerOP_ReloadMerchants, .desc = "Merchants"}, Reload{.command = "npc_emotes", .opcode = ServerOP_ReloadNPCEmotes, .desc = "NPC Emotes"}, Reload{.command = "objects", .opcode = ServerOP_ReloadObjects, .desc = "Objects"}, + Reload{.command = "opcodes", .opcode = ServerOP_ReloadOpcodes, .desc = "Opcodes"}, Reload{.command = "perl_export", .opcode = ServerOP_ReloadPerlExportSettings, .desc = "Perl Event Export Settings"}, Reload{.command = "rules", .opcode = ServerOP_ReloadRules, .desc = "Rules"}, Reload{.command = "static", .opcode = ServerOP_ReloadStaticZoneData, .desc = "Static Zone Data"}, diff --git a/world/launcher_link.cpp b/world/launcher_link.cpp index ae856c8b8..3b1a3fc05 100644 --- a/world/launcher_link.cpp +++ b/world/launcher_link.cpp @@ -106,7 +106,7 @@ void LauncherLink::ProcessMessage(uint16 opcode, EQ::Net::Packet &p) cur = result.begin(); end = result.end(); ZoneState zs; - for (; cur != end; cur++) { + for (; cur != end; ++cur) { zs.port = cur->port; zs.up = false; zs.starts = 0; @@ -232,7 +232,7 @@ void LauncherLink::BootDynamics(uint8 new_count) { std::map::iterator cur, end; cur = m_states.begin(); end = m_states.end(); - for (; cur != end; cur++) { + for (; cur != end; ++cur) { StopZone(cur->first.c_str()); } } @@ -244,7 +244,7 @@ void LauncherLink::BootDynamics(uint8 new_count) { std::map::iterator cur, end; cur = m_states.begin(); end = m_states.end(); - for (; cur != end; cur++) { + for (; cur != end; ++cur) { if (cur->first.find("dynamic_") == 0) { if (found >= new_count) { //this zone exceeds the number of allowed booted zones. @@ -266,7 +266,7 @@ void LauncherLink::GetZoneList(std::vector &l) { std::map::iterator cur, end; cur = m_states.begin(); end = m_states.end(); - for (; cur != end; cur++) { + for (; cur != end; ++cur) { l.push_back(cur->first.c_str()); } } diff --git a/world/login_server_list.cpp b/world/login_server_list.cpp index efd9c1d91..30285c72a 100644 --- a/world/login_server_list.cpp +++ b/world/login_server_list.cpp @@ -52,7 +52,7 @@ LoginServerList::~LoginServerList() { void LoginServerList::Add(const char* iAddress, uint16 iPort, const char* Account, const char* Password, bool Legacy) { auto loginserver = new LoginServer(iAddress, iPort, Account, Password, Legacy); - m_list.push_back(std::unique_ptr(loginserver)); + m_list.emplace_back(std::unique_ptr(loginserver)); } bool LoginServerList::SendStatus() { diff --git a/world/queryserv.cpp b/world/queryserv.cpp index 8708b6c31..0611e7d50 100644 --- a/world/queryserv.cpp +++ b/world/queryserv.cpp @@ -21,7 +21,7 @@ void QueryServConnection::AddConnection(std::shared_ptrOnMessage(ServerOP_QueryServGeneric, std::bind(&QueryServConnection::HandleGenericMessage, this, std::placeholders::_1, std::placeholders::_2)); connection->OnMessage(ServerOP_LFGuildUpdate, std::bind(&QueryServConnection::HandleLFGuildUpdateMessage, this, std::placeholders::_1, std::placeholders::_2)); - m_streams.insert(std::make_pair(connection->GetUUID(), connection)); + m_streams.emplace(std::make_pair(connection->GetUUID(), connection)); m_keepalive = std::make_unique(1000, true, std::bind(&QueryServConnection::OnKeepAlive, this, std::placeholders::_1)); } diff --git a/world/shared_task_manager.cpp b/world/shared_task_manager.cpp index 50a3f5b1d..42e0a41fa 100644 --- a/world/shared_task_manager.cpp +++ b/world/shared_task_manager.cpp @@ -1545,7 +1545,7 @@ bool SharedTaskManager::CanAddPlayer(SharedTask *s, uint32_t character_id, std:: void SharedTaskManager::RecordSharedTaskCompletion(SharedTask *s) { // shared task - auto t = s->GetDbSharedTask(); + auto& t = s->GetDbSharedTask(); auto ct = CompletedSharedTasksRepository::NewEntity(); ct.id = t.id; diff --git a/world/ucs.h b/world/ucs.h index 679229736..d226e4dc9 100644 --- a/world/ucs.h +++ b/world/ucs.h @@ -17,6 +17,7 @@ public: void Disconnect() { if(connection && connection->Handle()) connection->Handle()->Disconnect(); } void SendMessage(const char *From, const char *Message); const std::shared_ptr &GetConnection() const; + inline bool IsConnected() const { return connection->Handle() ? connection->Handle()->IsConnected() : false; } private: inline std::string GetIP() const { return (connection && connection->Handle()) ? connection->Handle()->RemoteIP() : 0; } diff --git a/world/web_interface.cpp b/world/web_interface.cpp index 234031770..1de21b4e4 100644 --- a/world/web_interface.cpp +++ b/world/web_interface.cpp @@ -123,7 +123,7 @@ void WebInterface::SendEvent(const Json::Value &value) void WebInterface::AddCall(const std::string &method, WebInterfaceCall call) { - m_calls.insert(std::make_pair(method, call)); + m_calls.emplace(std::make_pair(method, call)); } void WebInterface::SendResponse(const std::string &id, const Json::Value &response) @@ -146,7 +146,7 @@ WebInterfaceList::~WebInterfaceList() void WebInterfaceList::AddConnection(std::shared_ptr connection) { - m_interfaces.insert(std::make_pair(connection->GetUUID(), std::make_unique(connection))); + m_interfaces.emplace(std::make_pair(connection->GetUUID(), std::make_unique(connection))); } void WebInterfaceList::RemoveConnection(std::shared_ptr connection) diff --git a/world/world_boot.cpp b/world/world_boot.cpp index 286d689eb..5025dca46 100644 --- a/world/world_boot.cpp +++ b/world/world_boot.cpp @@ -204,7 +204,7 @@ void WorldBoot::CheckForServerScript(bool force_download) r.set_read_timeout(1, 0); r.set_write_timeout(1, 0); - if (auto res = r.Get(u.get_path().c_str())) { + if (auto res = r.Get(u.get_path())) { if (res->status == 200) { // write file @@ -283,24 +283,15 @@ extern WorldEventScheduler event_scheduler; bool WorldBoot::DatabaseLoadRoutines(int argc, char **argv) { - // ignore - bool ignore_db = false; - if (argc >= 2) { - if (strcasecmp(argv[1], "ignore_db") == 0) { - ignore_db = true; - } - else { - std::cerr << "Error, unknown command line option" << std::endl; - return false; - } - } - // logging system init auto logging = LogSys.SetDatabase(&database) ->SetLogPath(path.GetLogPath()) ->LoadLogDatabaseSettings(); - if (!ignore_db) { + LogSys.SetDiscordHandler(&WorldBoot::DiscordWebhookMessageHandler); + + const auto c = EQEmuConfig::get(); + if (c->auto_database_updates) { LogInfo("Checking Database Conversions"); database.CheckDatabaseConversions(); } @@ -369,7 +360,7 @@ bool WorldBoot::DatabaseLoadRoutines(int argc, char **argv) if (database.GetVariable("RuleSet", tmp)) { LogInfo("Loading rule set [{}]", tmp.c_str()); - if (!RuleManager::Instance()->LoadRules(&database, tmp.c_str(), false)) { + if (!RuleManager::Instance()->LoadRules(&database, tmp, false)) { LogInfo("Failed to load ruleset [{}], falling back to defaults", tmp.c_str()); } } @@ -662,3 +653,18 @@ void WorldBoot::Shutdown() safe_delete(mutex); } +void WorldBoot::SendDiscordMessage(int webhook_id, const std::string &message) +{ + if (UCSLink.IsConnected()) { + auto pack = new ServerPacket(ServerOP_DiscordWebhookMessage, sizeof(DiscordWebhookMessage_Struct) + 1); + auto *q = (DiscordWebhookMessage_Struct *) pack->pBuffer; + + strn0cpy(q->message, message.c_str(), 2000); + q->webhook_id = webhook_id; + + UCSLink.SendPacket(pack); + + safe_delete(pack); + } +} + diff --git a/world/world_boot.h b/world/world_boot.h index 19af9bba7..de3b4db6f 100644 --- a/world/world_boot.h +++ b/world/world_boot.h @@ -3,6 +3,9 @@ #include #include "../common/types.h" +#include "../common/discord/discord.h" + +extern UCSConnection UCSLink; class WorldBoot { public: @@ -16,6 +19,16 @@ public: static bool DatabaseLoadRoutines(int argc, char **argv); static void CheckForPossibleConfigurationIssues(); static void Shutdown(); + static void SendDiscordMessage(int webhook_id, const std::string& message); + static void DiscordWebhookMessageHandler(uint16 log_category, int webhook_id, const std::string &message) + { + std::string message_prefix = fmt::format( + "[**{}**] **World** ", + Logs::LogCategoryName[log_category] + ); + + SendDiscordMessage(webhook_id, message_prefix + Discord::FormatDiscordMessage(log_category, message)); + }; }; diff --git a/world/world_config.h b/world/world_config.h index ee28f4344..bcea602d3 100644 --- a/world/world_config.h +++ b/world/world_config.h @@ -59,8 +59,8 @@ public: static void LockWorld() { if (_world_config) _world_config->Locked=true; } static void UnlockWorld() { if (_world_config) _world_config->Locked=false; } - static void SetWorldAddress(std::string addr) { if (_world_config) _world_config->WorldAddress=addr; } - static void SetLocalAddress(std::string addr) { if (_world_config) _world_config->LocalAddress=addr; } + static void SetWorldAddress(const std::string& addr) { if (_world_config) _world_config->WorldAddress=addr; } + static void SetLocalAddress(const std::string& addr) { if (_world_config) _world_config->LocalAddress=addr; } void Dump() const; }; diff --git a/world/world_server_cli.cpp b/world/world_server_cli.cpp index 58d022ed4..973374c01 100644 --- a/world/world_server_cli.cpp +++ b/world/world_server_cli.cpp @@ -12,20 +12,21 @@ void WorldserverCLI::CommandHandler(int argc, char **argv) cmd.parse(argc, argv, argh::parser::PREFER_PARAM_FOR_UNREG_OPTION); EQEmuCommand::DisplayDebug(cmd); - /** - * Declare command mapping - */ + // Declare command mapping auto function_map = EQEmuCommand::function_map; - /** - * Register commands - */ + // Register commands + function_map["bots:enable"] = &WorldserverCLI::BotsEnable; + function_map["bots:disable"] = &WorldserverCLI::BotsDisable; + function_map["mercs:enable"] = &WorldserverCLI::MercsEnable; + function_map["mercs:disable"] = &WorldserverCLI::MercsDisable; function_map["world:version"] = &WorldserverCLI::Version; function_map["character:copy-character"] = &WorldserverCLI::CopyCharacter; function_map["database:version"] = &WorldserverCLI::DatabaseVersion; function_map["database:set-account-status"] = &WorldserverCLI::DatabaseSetAccountStatus; function_map["database:schema"] = &WorldserverCLI::DatabaseGetSchema; function_map["database:dump"] = &WorldserverCLI::DatabaseDump; + function_map["database:updates"] = &WorldserverCLI::DatabaseUpdates; function_map["test:test"] = &WorldserverCLI::TestCommand; function_map["test:colors"] = &WorldserverCLI::TestColors; function_map["test:expansion"] = &WorldserverCLI::ExpansionTestCommand; @@ -38,7 +39,12 @@ void WorldserverCLI::CommandHandler(int argc, char **argv) } #include "cli/database_concurrency.cpp" +#include "cli/bots_enable.cpp" +#include "cli/bots_disable.cpp" +#include "cli/mercs_enable.cpp" +#include "cli/mercs_disable.cpp" #include "cli/copy_character.cpp" +#include "cli/database_updates.cpp" #include "cli/database_dump.cpp" #include "cli/database_get_schema.cpp" #include "cli/database_set_account_status.cpp" diff --git a/world/world_server_cli.h b/world/world_server_cli.h index 154de6441..0edebd261 100644 --- a/world/world_server_cli.h +++ b/world/world_server_cli.h @@ -7,12 +7,17 @@ class WorldserverCLI { public: static void CommandHandler(int argc, char **argv); + static void BotsEnable(int argc, char **argv, argh::parser &cmd, std::string &description); + static void BotsDisable(int argc, char **argv, argh::parser &cmd, std::string &description); + static void MercsEnable(int argc, char **argv, argh::parser &cmd, std::string &description); + static void MercsDisable(int argc, char **argv, argh::parser &cmd, std::string &description); static void Version(int argc, char **argv, argh::parser &cmd, std::string &description); static void CopyCharacter(int argc, char **argv, argh::parser &cmd, std::string &description); static void DatabaseVersion(int argc, char **argv, argh::parser &cmd, std::string &description); static void DatabaseSetAccountStatus(int argc, char **argv, argh::parser &cmd, std::string &description); static void DatabaseGetSchema(int argc, char **argv, argh::parser &cmd, std::string &description); static void DatabaseDump(int argc, char **argv, argh::parser &cmd, std::string &description); + static void DatabaseUpdates(int argc, char **argv, argh::parser &cmd, std::string &description); static void TestCommand(int argc, char **argv, argh::parser &cmd, std::string &description); static void TestColors(int argc, char **argv, argh::parser &cmd, std::string &description); static void ExpansionTestCommand(int argc, char **argv, argh::parser &cmd, std::string &description); diff --git a/world/zonelist.cpp b/world/zonelist.cpp index 7ba848929..c2db3676e 100644 --- a/world/zonelist.cpp +++ b/world/zonelist.cpp @@ -64,7 +64,7 @@ void ZSList::ShowUpTime(WorldTCPConnection* con, const char* adminname) { } void ZSList::Add(ZoneServer* zoneserver) { - zone_server_list.push_back(std::unique_ptr(zoneserver)); + zone_server_list.emplace_back(std::unique_ptr(zoneserver)); zoneserver->SendGroupIDs(); } @@ -311,7 +311,7 @@ void ZSList::SendZoneStatus(const char* to, int16 admin, WorldTCPConnection* con strcpy(locked, "No"); } - std::vector out; + auto out = fmt::memory_buffer(); if (connection->IsConsole()) { fmt::format_to(std::back_inserter(out), "World Locked: {}\r\n", locked); diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index a23d0bec8..bfd8ecd6f 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -45,6 +45,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "../common/content/world_content_service.h" #include "../common/repositories/player_event_logs_repository.h" #include "../common/events/player_event_logs.h" +#include "../common/patches/patches.h" extern ClientList client_list; extern GroupLFPList LFPGroupList; @@ -1296,6 +1297,10 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { QSLink.SendPacket(pack); break; } + case ServerOP_ReloadOpcodes: { + ReloadAllPatches(); + break; + } case ServerOP_CZDialogueWindow: case ServerOP_CZLDoNUpdate: case ServerOP_CZMarquee: diff --git a/zone/CMakeLists.txt b/zone/CMakeLists.txt index d5ad9a67e..3c5cc266e 100644 --- a/zone/CMakeLists.txt +++ b/zone/CMakeLists.txt @@ -32,7 +32,6 @@ SET(zone_sources embparser.cpp embparser_api.cpp embperl.cpp - embxs.cpp encounter.cpp entity.cpp exp.cpp @@ -77,7 +76,6 @@ SET(zone_sources lua_spell.cpp lua_stat_bonuses.cpp embperl.cpp - embxs.cpp entity.cpp exp.cpp fearpath.cpp @@ -186,7 +184,6 @@ SET(zone_headers dynamic_zone.h embparser.h embperl.h - embxs.h encounter.h entity.h errmsg.h @@ -231,7 +228,6 @@ SET(zone_headers lua_stat_bonuses.h map.h masterentity.h - message.h merc.h mob.h mob_movement_manager.h diff --git a/zone/aa.cpp b/zone/aa.cpp index f147c78ed..0aaa524fa 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -35,7 +35,6 @@ Copyright (C) 2001-2016 EQEMu Development Team (http://eqemulator.net) #include "string_ids.h" #include "titles.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "worldserver.h" #include "bot.h" @@ -218,9 +217,6 @@ void Mob::TypesTemporaryPets(uint32 typesid, Mob *targ, const char *name_overrid int summon_count = 0; summon_count = pet.count; - if(summon_count > MAX_SWARM_PETS) - summon_count = MAX_SWARM_PETS; - static const glm::vec2 swarmPetLocations[MAX_SWARM_PETS] = { glm::vec2(5, 5), glm::vec2(-5, 5), glm::vec2(5, -5), glm::vec2(-5, -5), glm::vec2(10, 10), glm::vec2(-10, 10), glm::vec2(10, -10), glm::vec2(-10, -10), @@ -289,7 +285,7 @@ void Mob::TypesTemporaryPets(uint32 typesid, Mob *targ, const char *name_overrid delete made_npc; } -void Mob::WakeTheDead(uint16 spell_id, Corpse *corpse_to_use, Mob *target, uint32 duration) { +void Mob::WakeTheDead(uint16 spell_id, Corpse *corpse_to_use, Mob *tar, uint32 duration) { /* SPA 299 Wake The Dead, 'animateDead' should be temp pet, always spawns 1 pet from corpse, max value is duration @@ -453,7 +449,6 @@ void Mob::WakeTheDead(uint16 spell_id, Corpse *corpse_to_use, Mob *target, uint3 break; } - made_npc->loottable_id = 0; made_npc->merchanttype = 0; made_npc->d_melee_texture1 = 0; made_npc->d_melee_texture2 = 0; @@ -494,8 +489,8 @@ void Mob::WakeTheDead(uint16 spell_id, Corpse *corpse_to_use, Mob *target, uint3 swarm_pet_npc->GetSwarmInfo()->owner_id = GetID(); //give the pets somebody to "love" - if (target != nullptr) { - swarm_pet_npc->AddToHateList(target, 10000, 1000); + if (tar != nullptr) { + swarm_pet_npc->AddToHateList(tar, 10000, 1000); swarm_pet_npc->GetSwarmInfo()->target = 0; } @@ -508,8 +503,8 @@ void Mob::WakeTheDead(uint16 spell_id, Corpse *corpse_to_use, Mob *target, uint3 } //the target of these swarm pets will take offense to being cast on... - if (target != nullptr) - target->AddToHateList(this, 1, 0); + if (tar != nullptr) + tar->AddToHateList(this, 1, 0); // The other pointers we make are handled elsewhere. delete made_npc; @@ -1325,7 +1320,7 @@ void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) { timer_duration = 0; } - if (!IsCastWhileInvis(rank->spell)) + if (!IsCastWhileInvisibleSpell(rank->spell)) CommonBreakInvisible(); if (spells[rank->spell].sneak && (!hidden || (hidden && (Timer::GetCurrentTime() - tmHidden) < 4000))) { @@ -1338,7 +1333,7 @@ void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) { target_id = GetPetID(); // extra handling for cast_not_standing spells - if (!IgnoreCastingRestriction(rank->spell)) { + if (!IsCastNotStandingSpell(rank->spell)) { if (GetAppearance() == eaSitting) // we need to stand! SetAppearance(eaStanding, false); @@ -1403,27 +1398,28 @@ int Mob::GetAlternateAdvancementCooldownReduction(AA::Rank *rank_in) { void Mob::ExpendAlternateAdvancementCharge(uint32 aa_id) { for (auto &iter : aa_ranks) { - AA::Ability *ability = zone->GetAlternateAdvancementAbility(iter.first); + auto 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) { - if (IsClient()) { - AA::Rank *r = ability->GetRankByPointsSpent(iter.second.first); - if (r) { - CastToClient()->GetEPP().expended_aa += r->cost; - } - } if (IsClient()) { auto c = CastToClient(); + + auto r = ability->GetRankByPointsSpent(iter.second.first); + if (r) { + c->GetEPP().expended_aa += r->cost; + } + c->RemoveExpendedAA(ability->first_rank_id); } + aa_ranks.erase(iter.first); } if (IsClient()) { - Client *c = CastToClient(); + auto c = CastToClient(); c->SaveAA(); c->SendAlternateAdvancementPoints(); } @@ -1963,7 +1959,7 @@ void Client::TogglePassiveAlternativeAdvancement(const AA::Rank &rank, uint32 ab AA::Rank *rank_next = zone->GetAlternateAdvancementRank(rank.next_id); //Add checks for any special cases for toggle. - if (IsEffectinAlternateAdvancementRankEffects(*rank_next, SE_Weapon_Stance)) { + if (rank_next && IsEffectinAlternateAdvancementRankEffects(*rank_next, SE_Weapon_Stance)) { weaponstance.aabonus_enabled = true; ApplyWeaponsStance(); } @@ -2003,7 +1999,7 @@ bool Client::UseTogglePassiveHotkey(const AA::Rank &rank) { else if (rank.prev_id != -1) {//Check when effect is Enabled. AA::Rank *rank_prev = zone->GetAlternateAdvancementRank(rank.prev_id); - if (IsEffectInSpell(rank_prev->spell, SE_Buy_AA_Rank)) { + if (rank_prev && IsEffectInSpell(rank_prev->spell, SE_Buy_AA_Rank)) { return true; } } diff --git a/zone/aa_ability.cpp b/zone/aa_ability.cpp index 3612b00c7..96982b89e 100644 --- a/zone/aa_ability.cpp +++ b/zone/aa_ability.cpp @@ -21,22 +21,10 @@ #include "masterentity.h" #include "aa_ability.h" -AA::Rank *AA::Ability::GetMaxRank() { - if(!first) - return nullptr; - - Rank *current = first; - while(current->next) { - current = current->next; - } - - return current; -} - AA::Rank *AA::Ability::GetRankByPointsSpent(int current_level) { if(current_level == 0) return nullptr; - + if(!first) return nullptr; @@ -65,6 +53,6 @@ int AA::Ability::GetMaxLevel(Mob *who) { 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 af1bd752b..84c212dc2 100644 --- a/zone/aa_ability.h +++ b/zone/aa_ability.h @@ -37,7 +37,6 @@ public: Ability() { } ~Ability() { } - Rank *GetMaxRank(); Rank *GetRankByPointsSpent(int current_level); int GetMaxLevel(Mob *who); diff --git a/zone/aggro.cpp b/zone/aggro.cpp index 746a14dca..b79a95246 100644 --- a/zone/aggro.cpp +++ b/zone/aggro.cpp @@ -23,7 +23,6 @@ #include "../common/spdat.h" #include "client.h" -#include "corpse.h" #include "entity.h" #include "mob.h" @@ -904,8 +903,9 @@ bool Mob::IsBeneficialAllowed(Mob *target) { return false; } - else if(mob2->IsBot()) + else if (mob2 && mob2->IsBot()) { return true; + } } else if(_NPC(mob1)) { @@ -1161,7 +1161,7 @@ bool Mob::CheckLosFN(glm::vec3 posWatcher, float sizeWatcher, glm::vec3 posTarge //offensive spell aggro int32 Mob::CheckAggroAmount(uint16 spell_id, Mob *target, bool isproc) { - if (NoDetrimentalSpellAggro(spell_id)) + if (IsNoDetrimentalSpellAggroSpell(spell_id)) return 0; int32 AggroAmount = 0; @@ -1436,7 +1436,7 @@ void Mob::ClearFeignMemory() { while (remembered_feigned_mobid != feign_memory_list.end()) { Mob* remembered_mob = entity_list.GetMob(*remembered_feigned_mobid); - if (remembered_mob->IsClient() && remembered_mob != nullptr) { //Still in zone + if (remembered_mob && remembered_mob->IsClient()) { //Still in zone remembered_mob->CastToClient()->RemoveXTarget(this, false); } ++remembered_feigned_mobid; diff --git a/zone/api_service.cpp b/zone/api_service.cpp index 2b2119533..68251be0b 100644 --- a/zone/api_service.cpp +++ b/zone/api_service.cpp @@ -22,12 +22,10 @@ #include "../common/net/websocket_server.h" #include "../common/eqemu_logsys.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "client.h" #include "entity.h" #include "corpse.h" #include "api_service.h" -#include "npc.h" #include "object.h" #include "zone.h" #include "doors.h" @@ -402,177 +400,177 @@ Json::Value ApiGetMobListDetail(EQ::Net::WebsocketServerConnection *connection, /** * Rest */ - row["ac"] = mob->GetAC(); - row["ac_softcap"] = mob->GetACSoftcap(); - row["ac_sum"] = mob->ACSum(); - row["active_light_type"] = mob->GetActiveLightType(); - row["aggro_range"] = mob->GetAggroRange(); - row["allow_beneficial"] = mob->GetAllowBeneficial(); - row["animation"] = mob->GetAnimation(); - row["assist_range"] = mob->GetAssistRange(); - row["aura_slots"] = mob->GetAuraSlots(); - row["base_fear_speed"] = mob->GetBaseFearSpeed(); - row["base_runspeed"] = mob->GetBaseRunspeed(); - row["base_size"] = mob->GetBaseSize(); - row["base_walkspeed"] = mob->GetBaseWalkspeed(); - row["beard"] = mob->GetBeard(); - row["beard_color"] = mob->GetBeardColor(); - row["best_melee_skill"] = mob->GetBestMeleeSkill(); - row["calc_fear_resist_chance"] = mob->CalcFearResistChance(); - row["calc_resist_chance_bonus"] = mob->CalcResistChanceBonus(); - row["can_block_spell"] = mob->CanBlockSpell(); - row["can_facestab"] = mob->CanFacestab(); - row["casted_spell_inv_slot"] = mob->GetCastedSpellInvSlot(); - row["casting_spell_id"] = mob->CastingSpellID(); - row["charmed"] = mob->Charmed(); - row["check_last_los_state"] = mob->CheckLastLosState(); - row["class"] = mob->GetClass(); - row["class_level_factor"] = mob->GetClassLevelFactor(); - row["class_race_ac_bonus"] = mob->GetClassRaceACBonus(); - row["compute_defense"] = mob->compute_defense(); - row["count_dispellable_buffs"] = mob->CountDispellableBuffs(); - row["cripp_blow_chance"] = mob->GetCrippBlowChance(); - row["cur_wp"] = mob->GetCurWp(); - row["cwp"] = mob->GetCWP(); - row["cwpp"] = mob->GetCWPP(); - row["divine_aura"] = mob->DivineAura(); - row["dont_buff_me_before"] = mob->DontBuffMeBefore(); - row["dont_cure_me_before"] = mob->DontCureMeBefore(); - row["dont_dot_me_before"] = mob->DontDotMeBefore(); - row["dont_heal_me_before"] = mob->DontHealMeBefore(); - row["dont_root_me_before"] = mob->DontRootMeBefore(); - row["dont_snare_me_before"] = mob->DontSnareMeBefore(); - row["drakkin_details"] = mob->GetDrakkinDetails(); - row["drakkin_heritage"] = mob->GetDrakkinHeritage(); - row["drakkin_tattoo"] = mob->GetDrakkinTattoo(); - row["emote_id"] = mob->GetEmoteID(); - row["equipment_light_type"] = mob->GetEquipmentLightType(); - row["eye_color1"] = mob->GetEyeColor1(); - row["eye_color2"] = mob->GetEyeColor2(); - row["fear_speed"] = mob->GetFearSpeed(); - row["flurry_chance"] = mob->GetFlurryChance(); - row["follow_can_run"] = mob->GetFollowCanRun(); - row["follow_distance"] = mob->GetFollowDistance(); - row["follow_id"] = mob->GetFollowID(); - row["gender"] = mob->GetGender(); - row["hair_color"] = mob->GetHairColor(); - row["hair_style"] = mob->GetHairStyle(); - row["has_active_song"] = mob->HasActiveSong(); - row["has_assist_aggro"] = mob->HasAssistAggro(); - row["has_died"] = mob->HasDied(); - row["has_disc_buff"] = mob->HasDiscBuff(); - row["has_endur_upkeep"] = mob->HasEndurUpkeep(); - row["has_free_aura_slots"] = mob->HasFreeAuraSlots(); - row["has_free_trap_slots"] = mob->HasFreeTrapSlots(); - row["has_mgb"] = mob->HasMGB(); - row["has_numhits"] = mob->HasNumhits(); - row["has_pet"] = mob->HasPet(); - row["has_pet_affinity"] = mob->HasPetAffinity(); - row["has_primary_aggro"] = mob->HasPrimaryAggro(); - row["has_project_illusion"] = mob->HasProjectIllusion(); - row["has_projectile_attack"] = mob->HasProjectileAttack(); - row["has_shield_equiped"] = mob->HasShieldEquiped(); - row["has_special_abilities"] = mob->HasSpecialAbilities(); - row["has_tar_reflection"] = mob->HasTargetReflection(); - row["has_temp_pets_active"] = mob->HasTempPetsActive(); - row["has_two_hand_blunt_equiped"] = mob->HasTwoHandBluntEquiped(); - row["has_two_hander_equipped"] = mob->HasTwoHanderEquipped(); - row["hate_summon"] = mob->HateSummon(); - row["helm_texture"] = mob->GetHelmTexture(); - row["hp"] = mob->GetHP(); - row["improved_taunt"] = mob->ImprovedTaunt(); - row["innate_light_type"] = mob->GetInnateLightType(); - row["is_ai_controlled"] = mob->IsAIControlled(); - row["is_amnesiad"] = mob->IsAmnesiad(); - row["is_animation"] = mob->IsAnimation(); - row["is_blind"] = mob->IsBlind(); - row["is_casting"] = mob->IsCasting(); - row["is_charmed"] = mob->IsCharmed(); - row["is_destructible_object"] = mob->IsDestructibleObject(); - row["is_engaged"] = mob->IsEngaged(); - row["is_enraged"] = mob->IsEnraged(); - row["is_familiar"] = mob->IsFamiliar(); - row["is_feared"] = mob->IsFeared(); - row["is_findable"] = mob->IsFindable(); - row["is_focused"] = mob->IsFocused(); - row["is_g_held"] = mob->IsGHeld(); - row["is_grouped"] = mob->IsGrouped(); - row["is_held"] = mob->IsHeld(); - row["is_looting"] = mob->IsLooting(); - row["is_melee_disabled"] = mob->IsMeleeDisabled(); - row["is_mezzed"] = mob->IsMezzed(); - row["is_moved"] = mob->IsMoved(); - row["is_moving"] = mob->IsMoving(); - row["is_no_cast"] = mob->IsNoCast(); - row["is_off_hand_atk"] = mob->IsOffHandAtk(); - row["is_pet_owner_client"] = mob->IsPetOwnerClient(); - row["is_pet_regroup"] = mob->IsPetRegroup(); - row["is_pet_stop"] = mob->IsPetStop(); - row["is_pseudo_rooted"] = mob->IsPseudoRooted(); - row["is_raid_grouped"] = mob->IsRaidGrouped(); - row["is_rare_spawn"] = mob->IsRareSpawn(); - row["is_roamer"] = mob->IsRoamer(); - row["is_rooted"] = mob->IsRooted(); - row["is_running"] = mob->IsRunning(); - row["is_silenced"] = mob->IsSilenced(); - row["is_stunned"] = mob->IsStunned(); - row["is_tar_lock_pet"] = mob->IsTargetLockPet(); - row["is_tarable"] = mob->IsTargetable(); - row["is_tared"] = mob->IsTargeted(); - row["is_temp_pet"] = mob->IsTempPet(); - row["is_trackable"] = mob->IsTrackable(); - row["item_hp_bonuses"] = mob->GetItemHPBonuses(); - row["last_name"] = mob->GetLastName(); - row["level"] = mob->GetLevel(); - row["luclin_face"] = mob->GetLuclinFace(); - row["mana"] = mob->GetMana(); - row["mana_percent"] = mob->GetManaPercent(); - row["mana_ratio"] = mob->GetManaRatio(); - row["max_hp"] = mob->GetMaxHP(); - row["max_mana"] = mob->GetMaxMana(); - row["melee_mitigation"] = mob->GetMeleeMitigation(); - row["mitigation_ac"] = mob->GetMitigationAC(); - row["movespeed"] = mob->GetMovespeed(); - row["name"] = mob->GetName(); - row["next_hp_event"] = mob->GetNextHPEvent(); - row["next_inc_hp_event"] = mob->GetNextIncHPEvent(); - row["npc_assist_cap"] = mob->NPCAssistCap(); - row["npc_type_id"] = mob->GetNPCTypeID(); - row["orig_level"] = mob->GetOrigLevel(); - row["orig_name"] = mob->GetOrigName(); - row["owner_id"] = mob->GetOwnerID(); - row["pet_id"] = mob->GetPetID(); - row["pet_power"] = mob->GetPetPower(); - row["pet_tar_lock_id"] = mob->GetPetTargetLockID(); - row["qglobal"] = mob->GetQglobal(); - row["race"] = mob->GetRace(); - row["run_anim_speed"] = mob->GetRunAnimSpeed(); - row["sanctuary"] = mob->Sanctuary(); - row["see_hide"] = mob->SeeHide(); - row["see_improved_hide"] = mob->SeeImprovedHide(); - row["see_invisible"] = mob->SeeInvisible(); - row["see_invisible_undead"] = mob->SeeInvisibleUndead(); - row["size"] = mob->GetSize(); - row["slow_mitigation"] = mob->GetSlowMitigation(); - row["snared_amount"] = mob->GetSnaredAmount(); - row["spawned"] = mob->Spawned(); - row["spell_hp_bonuses"] = mob->GetSpellHPBonuses(); - row["spell_light_type"] = mob->GetSpellLightType(); - row["spell_power_distance_mod"] = mob->GetSpellPowerDistanceMod(); - row["spell_x"] = mob->GetSpellX(); - row["spell_y"] = mob->GetSpellY(); - row["spell_z"] = mob->GetSpellZ(); - row["tar_ring_x"] = mob->GetTargetRingX(); - row["tar_ring_y"] = mob->GetTargetRingY(); - row["tar_ring_z"] = mob->GetTargetRingZ(); - row["temp_pet_count"] = mob->GetTempPetCount(); - row["texture"] = mob->GetTexture(); - row["trap_slots"] = mob->GetTrapSlots(); - row["try_death_save"] = mob->TryDeathSave(); - row["try_divine_save"] = mob->TryDivineSave(); - row["try_spell_on_death"] = mob->TrySpellOnDeath(); - row["update_active_light"] = mob->UpdateActiveLight(); - row["wander_type"] = mob->GetWanderType(); + row["ac"] = mob->GetAC(); + row["ac_softcap"] = mob->GetACSoftcap(); + row["ac_sum"] = mob->ACSum(); + row["active_light_type"] = mob->GetActiveLightType(); + row["aggro_range"] = mob->GetAggroRange(); + row["allow_beneficial"] = mob->GetAllowBeneficial(); + row["animation"] = mob->GetAnimation(); + row["assist_range"] = mob->GetAssistRange(); + row["aura_slots"] = mob->GetAuraSlots(); + row["base_fear_speed"] = mob->GetBaseFearSpeed(); + row["base_runspeed"] = mob->GetBaseRunspeed(); + row["base_size"] = mob->GetBaseSize(); + row["base_walkspeed"] = mob->GetBaseWalkspeed(); + row["beard"] = mob->GetBeard(); + row["beard_color"] = mob->GetBeardColor(); + row["best_melee_skill"] = mob->GetBestMeleeSkill(); + row["calc_fear_resist_chance"] = mob->CalcFearResistChance(); + row["calc_resist_chance_bonus"] = mob->CalcResistChanceBonus(); + row["can_block_spell"] = mob->CanBlockSpell(); + row["can_facestab"] = mob->CanFacestab(); + row["casted_spell_inv_slot"] = mob->GetCastedSpellInvSlot(); + row["casting_spell_id"] = mob->CastingSpellID(); + row["charmed"] = mob->Charmed(); + row["check_last_los_state"] = mob->CheckLastLosState(); + row["class"] = mob->GetClass(); + row["class_level_factor"] = mob->GetClassLevelFactor(); + row["class_race_ac_bonus"] = mob->GetClassRaceACBonus(); + row["compute_defense"] = mob->compute_defense(); + row["count_dispellable_buffs"] = mob->CountDispellableBuffs(); + row["cripp_blow_chance"] = mob->GetCrippBlowChance(); + row["cur_wp"] = mob->GetCurWp(); + row["cwp"] = mob->GetCWP(); + row["cwpp"] = mob->GetCWPP(); + row["divine_aura"] = mob->DivineAura(); + row["dont_buff_me_before"] = mob->DontBuffMeBefore(); + row["dont_cure_me_before"] = mob->DontCureMeBefore(); + row["dont_dot_me_before"] = mob->DontDotMeBefore(); + row["dont_heal_me_before"] = mob->DontHealMeBefore(); + row["dont_root_me_before"] = mob->DontRootMeBefore(); + row["dont_snare_me_before"] = mob->DontSnareMeBefore(); + row["drakkin_details"] = mob->GetDrakkinDetails(); + row["drakkin_heritage"] = mob->GetDrakkinHeritage(); + row["drakkin_tattoo"] = mob->GetDrakkinTattoo(); + row["emote_id"] = mob->GetEmoteID(); + row["equipment_light_type"] = mob->GetEquipmentLightType(); + row["eye_color1"] = mob->GetEyeColor1(); + row["eye_color2"] = mob->GetEyeColor2(); + row["fear_speed"] = mob->GetFearSpeed(); + row["flurry_chance"] = mob->GetFlurryChance(); + row["follow_can_run"] = mob->GetFollowCanRun(); + row["follow_distance"] = mob->GetFollowDistance(); + row["follow_id"] = mob->GetFollowID(); + row["gender"] = mob->GetGender(); + row["hair_color"] = mob->GetHairColor(); + row["hair_style"] = mob->GetHairStyle(); + row["has_active_song"] = mob->HasActiveSong(); + row["has_assist_aggro"] = mob->HasAssistAggro(); + row["has_died"] = mob->HasDied(); + row["has_disc_buff"] = mob->HasDiscBuff(); + row["has_endur_upkeep"] = mob->HasEndurUpkeep(); + row["has_free_aura_slots"] = mob->HasFreeAuraSlots(); + row["has_free_trap_slots"] = mob->HasFreeTrapSlots(); + row["has_mgb"] = mob->HasMGB(); + row["has_numhits"] = mob->HasNumhits(); + row["has_pet"] = mob->HasPet(); + row["has_pet_affinity"] = mob->HasPetAffinity(); + row["has_primary_aggro"] = mob->HasPrimaryAggro(); + row["has_project_illusion"] = mob->HasProjectIllusion(); + row["has_projectile_attack"] = mob->HasProjectileAttack(); + row["has_shield_equipped"] = mob->HasShieldEquipped(); + row["has_special_abilities"] = mob->HasSpecialAbilities(); + row["has_tar_reflection"] = mob->HasTargetReflection(); + row["has_temp_pets_active"] = mob->HasTempPetsActive(); + row["has_two_hand_blunt_equipped"] = mob->HasTwoHandBluntEquipped(); + row["has_two_hander_equipped"] = mob->HasTwoHanderEquipped(); + row["hate_summon"] = mob->HateSummon(); + row["helm_texture"] = mob->GetHelmTexture(); + row["hp"] = mob->GetHP(); + row["improved_taunt"] = mob->ImprovedTaunt(); + row["innate_light_type"] = mob->GetInnateLightType(); + row["is_ai_controlled"] = mob->IsAIControlled(); + row["is_amnesiad"] = mob->IsAmnesiad(); + row["is_animation"] = mob->IsAnimation(); + row["is_blind"] = mob->IsBlind(); + row["is_casting"] = mob->IsCasting(); + row["is_charmed"] = mob->IsCharmed(); + row["is_destructible_object"] = mob->IsDestructibleObject(); + row["is_engaged"] = mob->IsEngaged(); + row["is_enraged"] = mob->IsEnraged(); + row["is_familiar"] = mob->IsFamiliar(); + row["is_feared"] = mob->IsFeared(); + row["is_findable"] = mob->IsFindable(); + row["is_focused"] = mob->IsFocused(); + row["is_g_held"] = mob->IsGHeld(); + row["is_grouped"] = mob->IsGrouped(); + row["is_held"] = mob->IsHeld(); + row["is_looting"] = mob->IsLooting(); + row["is_melee_disabled"] = mob->IsMeleeDisabled(); + row["is_mezzed"] = mob->IsMezzed(); + row["is_moved"] = mob->IsMoved(); + row["is_moving"] = mob->IsMoving(); + row["is_no_cast"] = mob->IsNoCast(); + row["is_off_hand_atk"] = mob->IsOffHandAtk(); + row["is_pet_owner_client"] = mob->IsPetOwnerClient(); + row["is_pet_regroup"] = mob->IsPetRegroup(); + row["is_pet_stop"] = mob->IsPetStop(); + row["is_pseudo_rooted"] = mob->IsPseudoRooted(); + row["is_raid_grouped"] = mob->IsRaidGrouped(); + row["is_rare_spawn"] = mob->IsRareSpawn(); + row["is_roamer"] = mob->IsRoamer(); + row["is_rooted"] = mob->IsRooted(); + row["is_running"] = mob->IsRunning(); + row["is_silenced"] = mob->IsSilenced(); + row["is_stunned"] = mob->IsStunned(); + row["is_tar_lock_pet"] = mob->IsTargetLockPet(); + row["is_tarable"] = mob->IsTargetable(); + row["is_tared"] = mob->IsTargeted(); + row["is_temp_pet"] = mob->IsTempPet(); + row["is_trackable"] = mob->IsTrackable(); + row["item_hp_bonuses"] = mob->GetItemHPBonuses(); + row["last_name"] = mob->GetLastName(); + row["level"] = mob->GetLevel(); + row["luclin_face"] = mob->GetLuclinFace(); + row["mana"] = mob->GetMana(); + row["mana_percent"] = mob->GetManaPercent(); + row["mana_ratio"] = mob->GetManaRatio(); + row["max_hp"] = mob->GetMaxHP(); + row["max_mana"] = mob->GetMaxMana(); + row["melee_mitigation"] = mob->GetMeleeMitigation(); + row["mitigation_ac"] = mob->GetMitigationAC(); + row["movespeed"] = mob->GetMovespeed(); + row["name"] = mob->GetName(); + row["next_hp_event"] = mob->GetNextHPEvent(); + row["next_inc_hp_event"] = mob->GetNextIncHPEvent(); + row["npc_assist_cap"] = mob->NPCAssistCap(); + row["npc_type_id"] = mob->GetNPCTypeID(); + row["orig_level"] = mob->GetOrigLevel(); + row["orig_name"] = mob->GetOrigName(); + row["owner_id"] = mob->GetOwnerID(); + row["pet_id"] = mob->GetPetID(); + row["pet_power"] = mob->GetPetPower(); + row["pet_tar_lock_id"] = mob->GetPetTargetLockID(); + row["qglobal"] = mob->GetQglobal(); + row["race"] = mob->GetRace(); + row["run_anim_speed"] = mob->GetRunAnimSpeed(); + row["sanctuary"] = mob->Sanctuary(); + row["see_hide"] = mob->SeeHide(); + row["see_improved_hide"] = mob->SeeImprovedHide(); + row["see_invisible"] = mob->SeeInvisible(); + row["see_invisible_undead"] = mob->SeeInvisibleUndead(); + row["size"] = mob->GetSize(); + row["slow_mitigation"] = mob->GetSlowMitigation(); + row["snared_amount"] = mob->GetSnaredAmount(); + row["spawned"] = mob->Spawned(); + row["spell_hp_bonuses"] = mob->GetSpellHPBonuses(); + row["spell_light_type"] = mob->GetSpellLightType(); + row["spell_power_distance_mod"] = mob->GetSpellPowerDistanceMod(); + row["spell_x"] = mob->GetSpellX(); + row["spell_y"] = mob->GetSpellY(); + row["spell_z"] = mob->GetSpellZ(); + row["tar_ring_x"] = mob->GetTargetRingX(); + row["tar_ring_y"] = mob->GetTargetRingY(); + row["tar_ring_z"] = mob->GetTargetRingZ(); + row["temp_pet_count"] = mob->GetTempPetCount(); + row["texture"] = mob->GetTexture(); + row["trap_slots"] = mob->GetTrapSlots(); + row["try_death_save"] = mob->TryDeathSave(); + row["try_divine_save"] = mob->TryDivineSave(); + row["try_spell_on_death"] = mob->TrySpellOnDeath(); + row["update_active_light"] = mob->UpdateActiveLight(); + row["wander_type"] = mob->GetWanderType(); response.append(row); } diff --git a/zone/attack.cpp b/zone/attack.cpp index a87862506..e1f490d02 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -20,7 +20,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "../common/eq_constants.h" #include "../common/eq_packet_structs.h" #include "../common/rulesys.h" -#include "../common/skills.h" #include "../common/spdat.h" #include "../common/strings.h" #include "../common/data_verification.h" @@ -37,8 +36,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "mob.h" #include "npc.h" -#include - #include "bot.h" extern QueryServ* QServ; @@ -104,30 +101,26 @@ EQ::skills::SkillType Mob::AttackAnimation(int Hand, const EQ::ItemInstance* wea } else if (IsNPC()) { switch (skillinuse) { - case EQ::skills::Skill1HSlashing: // 1H Slashing - type = anim1HWeapon; - break; - case EQ::skills::Skill2HSlashing: // 2H Slashing - type = anim2HSlashing; - break; - case EQ::skills::Skill1HPiercing: // Piercing - type = anim1HPiercing; - break; - case EQ::skills::Skill1HBlunt: // 1H Blunt - type = anim1HWeapon; - break; - case EQ::skills::Skill2HBlunt: // 2H Blunt - type = anim2HSlashing; //anim2HWeapon - break; - case EQ::skills::Skill2HPiercing: // 2H Piercing - type = anim2HWeapon; - break; - case EQ::skills::SkillHandtoHand: - type = animHand2Hand; - break; - default: - type = animHand2Hand; - break; + case EQ::skills::Skill1HBlunt: // 1H Blunt + case EQ::skills::Skill1HSlashing: // 1H Slashing + type = anim1HWeapon; + break; + case EQ::skills::Skill2HBlunt: // 2H Blunt + case EQ::skills::Skill2HSlashing: // 2H Slashing + type = anim2HSlashing; + break; + case EQ::skills::Skill1HPiercing: // Piercing + type = anim1HPiercing; + break; + case EQ::skills::Skill2HPiercing: // 2H Piercing + type = anim2HWeapon; + break; + case EQ::skills::SkillHandtoHand: + type = animHand2Hand; + break; + default: + type = animHand2Hand; + break; }// switch } else { @@ -167,7 +160,7 @@ int Mob::compute_tohit(EQ::skills::SkillType skillinuse) if (IsNPC()) tohit += CastToNPC()->GetAccuracyRating(); if (IsClient()) { - double reduction = CastToClient()->m_pp.intoxication / 2.0; + double reduction = CastToClient()->GetIntoxication() / 2.0; if (reduction > 20.0) { reduction = std::min((110 - reduction) / 100.0, 1.0); tohit = reduction * static_cast(tohit); @@ -263,7 +256,7 @@ int Mob::compute_defense() defense += CastToNPC()->GetAvoidanceRating(); if (IsClient()) { - double reduction = CastToClient()->m_pp.intoxication / 2.0; + double reduction = CastToClient()->GetIntoxication() / 2.0; if (reduction > 20.0) { reduction = std::min((110 - reduction) / 100.0, 1.0); defense = reduction * static_cast(defense); @@ -592,7 +585,7 @@ bool Mob::AvoidDamage(Mob *other, DamageHitInfo &hit) } // Try Shield Block OR TwoHandBluntBlockCheck - if (HasShieldEquiped() && (aabonuses.ShieldBlock || spellbonuses.ShieldBlock || itembonuses.ShieldBlock) && (InFront || bBlockFromRear)) { + if (HasShieldEquipped() && (aabonuses.ShieldBlock || spellbonuses.ShieldBlock || itembonuses.ShieldBlock) && (InFront || bBlockFromRear)) { int chance = aabonuses.ShieldBlock + spellbonuses.ShieldBlock + itembonuses.ShieldBlock; if (counter_block || counter_all) { float counter = (counter_block + counter_all) / 100.0f; @@ -604,7 +597,7 @@ bool Mob::AvoidDamage(Mob *other, DamageHitInfo &hit) } } - if (HasTwoHandBluntEquiped() && (aabonuses.TwoHandBluntBlock || spellbonuses.TwoHandBluntBlock || itembonuses.TwoHandBluntBlock) && (InFront || bBlockFromRear)) { + if (HasTwoHandBluntEquipped() && (aabonuses.TwoHandBluntBlock || spellbonuses.TwoHandBluntBlock || itembonuses.TwoHandBluntBlock) && (InFront || bBlockFromRear)) { int chance = aabonuses.TwoHandBluntBlock + itembonuses.TwoHandBluntBlock + spellbonuses.TwoHandBluntBlock; if (counter_block || counter_all) { float counter = (counter_block + counter_all) / 100.0f; @@ -874,7 +867,7 @@ int Mob::ACSum(bool skip_caps) int ac = 0; // this should be base AC whenever shrouds come around ac += itembonuses.AC; // items + food + tribute int shield_ac = 0; - if (HasShieldEquiped() && IsOfClientBot()) { + if (HasShieldEquipped() && IsOfClientBot()) { auto inst = (IsClient()) ? GetInv().GetItem(EQ::invslot::slotSecondary) : CastToBot()->GetBotItem(EQ::invslot::slotSecondary); if (inst) { if (inst->GetItemRecommendedLevel(true) <= GetLevel()) { @@ -1480,11 +1473,10 @@ bool Mob::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool SetTarget(other); } - LogCombatDetail("Attacking [{}] with hand [{}] [{}]", other ? other->GetName() : "nullptr", Hand, bRiposte ? "this is a riposte" : ""); + LogCombatDetail("Attacking [{}] with hand [{}] [{}]", other->GetName(), Hand, bRiposte ? "this is a riposte" : ""); if ( (IsCasting() && GetClass() != BARD && !IsFromSpell) - || other == nullptr || ((IsClient() && CastToClient()->dead) || (other->IsClient() && other->CastToClient()->dead)) || (GetHP() < 0) || (!IsAttackAllowed(other)) @@ -1555,7 +1547,7 @@ bool Mob::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool if (Hand == EQ::invslot::slotPrimary || Hand == EQ::invslot::slotSecondary) my_hit.base_damage = DoDamageCaps(my_hit.base_damage); auto shield_inc = spellbonuses.ShieldEquipDmgMod + itembonuses.ShieldEquipDmgMod + aabonuses.ShieldEquipDmgMod; - if (shield_inc > 0 && HasShieldEquiped() && Hand == EQ::invslot::slotPrimary) { + if (shield_inc > 0 && HasShieldEquipped() && Hand == EQ::invslot::slotPrimary) { my_hit.base_damage = my_hit.base_damage * (100 + shield_inc) / 100; hate = hate * (100 + shield_inc) / 100; } @@ -1979,10 +1971,10 @@ bool Client::Death(Mob* killerMob, int64 damage, uint16 spell, EQ::skills::Skill database.GetVariable("ServerType", tmp); if (tmp[0] == '1' && tmp[1] == '\0' && killerMob && killerMob->IsClient()) { database.GetVariable("PvPreward", tmp); - auto reward = Strings::ToInt(tmp.c_str()); + auto reward = Strings::ToInt(tmp); if (reward == 3) { database.GetVariable("PvPitem", tmp); - auto pvp_item_id = Strings::ToInt(tmp.c_str()); + auto pvp_item_id = Strings::ToInt(tmp); const auto* item = database.GetItem(pvp_item_id); if (item) { new_corpse->SetPlayerKillItemID(pvp_item_id); @@ -2118,14 +2110,16 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool //Check that we can attack before we calc heading and face our target if (!IsAttackAllowed(other)) { - if (GetOwnerID()) + if (GetOwnerID()) { SayString(NOT_LEGAL_TARGET); - if (other) { - if (other->IsClient()) - other->CastToClient()->RemoveXTarget(this, false); - RemoveFromHateList(other); - LogCombat("I am not allowed to attack [{}]", other->GetName()); } + + if (other->IsClient()) { + other->CastToClient()->RemoveXTarget(this, false); + } + + RemoveFromHateList(other); + LogCombat("I am not allowed to attack [{}]", other->GetName()); return false; } @@ -2139,17 +2133,19 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool my_hit.skill = static_cast(GetPrimSkill()); OffHandAtk(false); } + if (Hand == EQ::invslot::slotSecondary) { my_hit.skill = static_cast(GetSecSkill()); OffHandAtk(true); } //figure out what weapon they are using, if any - const EQ::ItemData* weapon = nullptr; - if (Hand == EQ::invslot::slotPrimary && equipment[EQ::invslot::slotPrimary] > 0) + const EQ::ItemData *weapon = nullptr; + if (Hand == EQ::invslot::slotPrimary && equipment[EQ::invslot::slotPrimary] > 0) { weapon = database.GetItem(equipment[EQ::invslot::slotPrimary]); - else if (equipment[EQ::invslot::slotSecondary]) + } else if (equipment[EQ::invslot::slotSecondary]) { weapon = database.GetItem(equipment[EQ::invslot::slotSecondary]); + } //We dont factor much from the weapon into the attack. //Just the skill type so it doesn't look silly using punching animations and stuff while wielding weapons @@ -2162,34 +2158,34 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool } switch (weapon->ItemType) { - case EQ::item::ItemType1HSlash: - my_hit.skill = EQ::skills::Skill1HSlashing; - break; - case EQ::item::ItemType2HSlash: - my_hit.skill = EQ::skills::Skill2HSlashing; - break; - case EQ::item::ItemType1HPiercing: - my_hit.skill = EQ::skills::Skill1HPiercing; - break; - case EQ::item::ItemType2HPiercing: - my_hit.skill = EQ::skills::Skill2HPiercing; - break; - case EQ::item::ItemType1HBlunt: - my_hit.skill = EQ::skills::Skill1HBlunt; - break; - case EQ::item::ItemType2HBlunt: - my_hit.skill = EQ::skills::Skill2HBlunt; - break; - case EQ::item::ItemTypeBow: - my_hit.skill = EQ::skills::SkillArchery; - break; - case EQ::item::ItemTypeLargeThrowing: - case EQ::item::ItemTypeSmallThrowing: - my_hit.skill = EQ::skills::SkillThrowing; - break; - default: - my_hit.skill = EQ::skills::SkillHandtoHand; - break; + case EQ::item::ItemType1HSlash: + my_hit.skill = EQ::skills::Skill1HSlashing; + break; + case EQ::item::ItemType2HSlash: + my_hit.skill = EQ::skills::Skill2HSlashing; + break; + case EQ::item::ItemType1HPiercing: + my_hit.skill = EQ::skills::Skill1HPiercing; + break; + case EQ::item::ItemType2HPiercing: + my_hit.skill = EQ::skills::Skill2HPiercing; + break; + case EQ::item::ItemType1HBlunt: + my_hit.skill = EQ::skills::Skill1HBlunt; + break; + case EQ::item::ItemType2HBlunt: + my_hit.skill = EQ::skills::Skill2HBlunt; + break; + case EQ::item::ItemTypeBow: + my_hit.skill = EQ::skills::SkillArchery; + break; + case EQ::item::ItemTypeLargeThrowing: + case EQ::item::ItemTypeSmallThrowing: + my_hit.skill = EQ::skills::SkillThrowing; + break; + default: + my_hit.skill = EQ::skills::SkillHandtoHand; + break; } } @@ -2202,6 +2198,7 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool if (!mob) { continue; } + if (mob->IsNPC() && mob->CastToNPC()->IsGuard()) { float distance = Distance(other->GetPosition(), mob->GetPosition()); if ((mob->CheckLosFN(other) || mob->CheckLosFN(this)) && distance <= 70) { @@ -2835,8 +2832,9 @@ bool NPC::Death(Mob* killer_mob, int64 damage, uint16 spell, EQ::skills::SkillTy if (emote_id) { oos->CastToNPC()->DoNPCEmote(EQ::constants::EmoteEventTypes::KilledNPC, emote_id); } - - killer_mob->TrySpellOnKill(killed_level, spell); + if (killer_mob) { + killer_mob->TrySpellOnKill(killed_level, spell); + } } } @@ -2917,19 +2915,17 @@ void Mob::AddToHateList(Mob* other, int64 hate /*= 0*/, int64 damage /*= 0*/, bo Mob* targetmob = GetTarget(); bool on_hatelist = CheckAggro(other); - if (other) { - AddRampage(other); - if (on_hatelist) { // odd reason, if you're not on the hate list, subtlety etc don't apply! - // Spell Casting Subtlety etc - int64 hatemod = 100 + other->spellbonuses.hatemod + other->itembonuses.hatemod + other->aabonuses.hatemod; + AddRampage(other); + if (on_hatelist) { // odd reason, if you're not on the hate list, subtlety etc don't apply! + // Spell Casting Subtlety etc + int64 hatemod = 100 + other->spellbonuses.hatemod + other->itembonuses.hatemod + other->aabonuses.hatemod; - if (hatemod < 1) - hatemod = 1; - hate = ((hate * (hatemod)) / 100); - } - else { - hate += 100; // 100 bonus initial aggro - } + if (hatemod < 1) + hatemod = 1; + hate = ((hate * (hatemod)) / 100); + } + else { + hate += 100; // 100 bonus initial aggro } // Pet that is /pet hold on will not add to their hate list if they're not engaged @@ -2962,7 +2958,7 @@ void Mob::AddToHateList(Mob* other, int64 hate /*= 0*/, int64 damage /*= 0*/, bo if (GetSpecialAbility(IMMUNE_AGGRO_CLIENT) && other->IsClient()) return; - if (IsValidSpell(spell_id) && NoDetrimentalSpellAggro(spell_id)) + if (IsValidSpell(spell_id) && IsNoDetrimentalSpellAggroSpell(spell_id)) return; if (other == myowner) @@ -3006,29 +3002,26 @@ void Mob::AddToHateList(Mob* other, int64 hate /*= 0*/, int64 damage /*= 0*/, bo // if other is a bot, add the bots client to the hate list if (RuleB(Bots, Enabled)) { - while (other->IsBot()) { - + if (other->IsBot()) { auto other_ = other->CastToBot(); + if (!other_ || !other_->GetBotOwner()) { - break; + return; } auto owner_ = other_->GetBotOwner()->CastToClient(); if (!owner_ || owner_->IsDead() || !owner_->InZone()) { // added isdead and inzone checks to avoid issues in AddAutoXTarget(...) below - break; + return; } if (owner_->GetFeigned()) { AddFeignMemory(owner_); } else if (!hate_list.IsEntOnHateList(owner_)) { - hate_list.AddEntToHateList(owner_, 0, 0, false, true); owner_->AddAutoXTarget(this); // this was being called on dead/out-of-zone clients } - - break; } } @@ -3890,9 +3883,7 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons damage = ReduceAllDamage(damage); TryTriggerThreshHold(damage, SE_TriggerMeleeThreshold, attacker); - if (skill_used) - CheckNumHitsRemaining(NumHit::IncomingHitSuccess); - + CheckNumHitsRemaining(NumHit::IncomingHitSuccess); } else { int64 origdmg = damage; @@ -4308,7 +4299,6 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons attacker->CastToClient()->QueuePacket(outapp, true, CLIENT_CONNECTED, filter); } } - skip = attacker; } //send damage to all clients around except the specified skip mob (attacker or the attacker's owner) and ourself @@ -4457,14 +4447,24 @@ void Mob::HealDamage(uint64 amount, Mob* caster, uint16 spell_id) } } else { // normal heals - FilteredMessageString(caster, Chat::NonMelee, FilterSpellDamage, - YOU_HEALED, caster->GetCleanName(), itoa(acthealed)); + // Message to caster + if (caster->IsClient()) { + caster->FilteredMessageString(caster, Chat::NonMelee, + FilterSpellDamage, YOU_HEAL, GetCleanName(), + itoa(acthealed)); + } - caster->FilteredMessageString(caster, Chat::NonMelee, FilterSpellDamage, - YOU_HEAL, GetCleanName(), itoa(acthealed)); + // Message to target + if (IsClient() && caster != this) { + FilteredMessageString(caster, Chat::NonMelee, + FilterSpellDamage, YOU_HEALED, caster->GetCleanName(), + itoa(acthealed)); + } } - } - else if (CastToClient()->GetFilter(FilterHealOverTime) != (FilterShowSelfOnly || FilterHide)) { + } else if ( + CastToClient()->GetFilter(FilterHealOverTime) != FilterShowSelfOnly || + CastToClient()->GetFilter(FilterHealOverTime) != FilterHide + ) { Message(Chat::NonMelee, "You have been healed for %d points of damage.", acthealed); } } @@ -5706,8 +5706,14 @@ void Mob::TryCastOnSkillUse(Mob *on, EQ::skills::SkillType skill) { if (spellbonuses.HasSkillAttackProc[skill]) { for (int i = 0; i < MAX_CAST_ON_SKILL_USE; i += 3) { - if (spellbonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID] && skill == spellbonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SKILL]) { - if (IsValidSpell(spellbonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID]) && zone->random.Int(1, 1000) <= spellbonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_CHANCE]) { + if ( + spellbonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID] && + skill == spellbonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SKILL] + ) { + if ( + IsValidSpell(spellbonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID]) && + zone->random.Int(1, 1000) <= spellbonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_CHANCE] + ) { SpellFinished(spellbonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID], on, EQ::spells::CastingSlot::Item, 0, -1, spells[spellbonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID]].resist_difficulty); } } @@ -5716,8 +5722,14 @@ void Mob::TryCastOnSkillUse(Mob *on, EQ::skills::SkillType skill) { if (itembonuses.HasSkillAttackProc[skill]) { for (int i = 0; i < MAX_CAST_ON_SKILL_USE; i += 3) { - if (itembonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID] && skill == itembonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SKILL]) { - if (IsValidSpell(itembonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID]) && zone->random.Int(1, 1000) <= spellbonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_CHANCE]) { + if ( + itembonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID] && + skill == itembonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SKILL] + ) { + if ( + IsValidSpell(itembonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID]) && + zone->random.Int(1, 1000) <= itembonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_CHANCE] + ) { SpellFinished(itembonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID], on, EQ::spells::CastingSlot::Item, 0, -1, spells[itembonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID]].resist_difficulty); } } @@ -5726,7 +5738,11 @@ void Mob::TryCastOnSkillUse(Mob *on, EQ::skills::SkillType skill) { if (aabonuses.HasSkillAttackProc[skill]) { for (int i = 0; i < MAX_CAST_ON_SKILL_USE; i += 3) { - if (IsValidSpell(aabonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID]) && aabonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID] && skill == aabonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SKILL]) { + if ( + IsValidSpell(aabonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID]) && + aabonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID] && + skill == aabonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SKILL] + ) { if (zone->random.Int(1, 1000) <= aabonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_CHANCE]) { SpellFinished(aabonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID], on, EQ::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SkillAttackProc[i + SBIndex::SKILLATK_PROC_SPELL_ID]].resist_difficulty); } @@ -5995,7 +6011,7 @@ void Mob::DoShieldDamageOnShielder(Mob *shield_target, int64 hit_damage_done, EQ } int mitigation = shielder->GetShielderMitigation(); //Default shielder mitigates 25 pct of damage taken, this can be increased up to max 50 by equipping a shield item - if (shielder->IsClient() && shielder->HasShieldEquiped()) { + if (shielder->IsClient() && shielder->HasShieldEquipped()) { EQ::ItemInstance* inst = shielder->CastToClient()->GetInv().GetItem(EQ::invslot::slotSecondary); if (inst) { const EQ::ItemData* shield = inst->GetItem(); diff --git a/zone/aura.cpp b/zone/aura.cpp index 14ca590f2..1f693ab04 100644 --- a/zone/aura.cpp +++ b/zone/aura.cpp @@ -963,6 +963,10 @@ bool ZoneDatabase::GetAuraEntry(uint16 spell_id, AuraRecord &record) void Mob::AddAura(Aura *aura, AuraRecord &record) { + if (!aura) { + return; + } + LogAura( "aura owner [{}] spawn_id [{}] aura_name [{}]", GetCleanName(), @@ -971,7 +975,6 @@ void Mob::AddAura(Aura *aura, AuraRecord &record) ); // this is called only when it's safe - assert(aura != nullptr); strn0cpy(aura_mgr.auras[aura_mgr.count].name, aura->GetCleanName(), 64); aura_mgr.auras[aura_mgr.count].spawn_id = aura->GetID(); aura_mgr.auras[aura_mgr.count].aura = aura; @@ -998,6 +1001,10 @@ void Mob::AddAura(Aura *aura, AuraRecord &record) void Mob::AddTrap(Aura *aura, AuraRecord &record) { + if (!aura) { + return; + } + LogAura( "aura owner [{}] spawn_id [{}] aura_name [{}]", GetCleanName(), @@ -1006,7 +1013,6 @@ void Mob::AddTrap(Aura *aura, AuraRecord &record) ); // this is called only when it's safe - assert(aura != nullptr); strn0cpy(trap_mgr.auras[trap_mgr.count].name, aura->GetCleanName(), 64); trap_mgr.auras[trap_mgr.count].spawn_id = aura->GetID(); trap_mgr.auras[trap_mgr.count].aura = aura; diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index b6921d108..438d0022f 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -20,7 +20,6 @@ #include "../common/global_define.h" #include "../common/item_instance.h" #include "../common/rulesys.h" -#include "../common/skills.h" #include "../common/spdat.h" #include "client.h" @@ -59,16 +58,10 @@ void Mob::CalcBonuses() void NPC::CalcBonuses() { memset(&itembonuses, 0, sizeof(StatBonuses)); - if (RuleB(NPC, UseItemBonusesForNonPets)) { - memset(&itembonuses, 0, sizeof(StatBonuses)); + + if (GetOwner() || RuleB(NPC, UseItemBonusesForNonPets)) { CalcItemBonuses(&itembonuses); } - else { - if (GetOwner()) { - memset(&itembonuses, 0, sizeof(StatBonuses)); - CalcItemBonuses(&itembonuses); - } - } // This has to happen last, so we actually take the item bonuses into account. Mob::CalcBonuses(); @@ -145,26 +138,15 @@ int Mob::CalcRecommendedLevelBonus(uint8 current_level, uint8 recommended_level, void Mob::CalcItemBonuses(StatBonuses* b) { ClearItemFactionBonuses(); - SetShieldEquiped(false); - SetTwoHandBluntEquiped(false); + SetShieldEquipped(false); + SetTwoHandBluntEquipped(false); SetTwoHanderEquipped(false); - SetDuelWeaponsEquiped(false); + SetDualWeaponsEquipped(false); int16 i; for (i = EQ::invslot::BONUS_BEGIN; i <= EQ::invslot::BONUS_SKILL_END; i++) { - const EQ::ItemInstance* inst = nullptr; - if (IsOfClientBotMerc()) { - inst = GetInv().GetItem(i); - } else { - const auto* item = CastToNPC()->GetItem(i); - if (!item) { - continue; - } - - inst = database.CreateItem(item->item_id); - } - + const EQ::ItemInstance* inst = GetInv().GetItem(i); if (!inst) { continue; } @@ -178,13 +160,13 @@ void Mob::CalcItemBonuses(StatBonuses* b) { item->ItemType == EQ::item::ItemTypeShield && i == EQ::invslot::slotSecondary ) { - SetShieldEquiped(true); + SetShieldEquipped(true); } else if ( item && item->ItemType == EQ::item::ItemType2HBlunt && i == EQ::invslot::slotPrimary ) { - SetTwoHandBluntEquiped(true); + SetTwoHandBluntEquipped(true); SetTwoHanderEquipped(true); } else if ( item && @@ -196,7 +178,7 @@ void Mob::CalcItemBonuses(StatBonuses* b) { } if (CanThisClassDualWield()) { - SetDuelWeaponsEquiped(true); + SetDualWeaponsEquipped(true); } if (IsOfClientBot()) { @@ -269,7 +251,7 @@ void Mob::AddItemBonuses(const EQ::ItemInstance* inst, StatBonuses* b, bool is_a return; } - if (!is_tribute && !inst->IsEquipable(GetBaseRace(), GetClass())) { + if (IsClient() && !is_tribute && !inst->IsEquipable(GetBaseRace(), GetClass())) { if (item->ItemType != EQ::item::ItemTypeFood && item->ItemType != EQ::item::ItemTypeDrink) { return; } @@ -277,14 +259,14 @@ void Mob::AddItemBonuses(const EQ::ItemInstance* inst, StatBonuses* b, bool is_a const auto current_level = GetLevel(); - if (current_level < inst->GetItemRequiredLevel(true)) { + if (IsClient() && current_level < inst->GetItemRequiredLevel(true)) { return; } if (!is_ammo_item) { const auto recommended_level = is_augment ? recommended_level_override : inst->GetItemRecommendedLevel(true); - if (current_level >= recommended_level) { + if (IsNPC() || current_level >= recommended_level) { b->HP += item->HP; b->Mana += item->Mana; b->Endurance += item->Endur; @@ -1226,6 +1208,7 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) newbon->HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] += base_value; else newbon->HitChanceEffect[limit_value] += base_value; + break; } case SE_ProcOnKillShot: @@ -1406,6 +1389,7 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) break; } } + break; } case SE_DamageModifier: { @@ -1442,9 +1426,10 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) } case SE_SlayUndead: { - if (newbon->SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] < base_value) + if (newbon->SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] < base_value) { newbon->SlayUndead[SBIndex::SLAYUNDEAD_RATE_MOD] = base_value; // Rate - newbon->SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] = limit_value; // Damage Modifier + newbon->SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] = limit_value; // Damage Modifier + } break; } @@ -1505,12 +1490,14 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_SpellEffectResistChance: { for (int e = 0; e < MAX_RESISTABLE_EFFECTS * 2; e += 2) { - if (newbon->SEResist[e + 1] && (newbon->SEResist[e] == limit_value) && - (newbon->SEResist[e + 1] < base_value)) { - newbon->SEResist[e] = limit_value; // Spell Effect ID - newbon->SEResist[e + 1] = base_value; // Resist Chance - break; - } else if (!newbon->SEResist[e + 1]) { + if ( + !newbon->SEResist[e + 1] || + ( + newbon->SEResist[e + 1] && + newbon->SEResist[e] == limit_value && + newbon->SEResist[e + 1] < base_value + ) + ) { newbon->SEResist[e] = limit_value; // Spell Effect ID newbon->SEResist[e + 1] = base_value; // Resist Chance break; @@ -1612,9 +1599,10 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) } case SE_HeadShotLevel: { - if (newbon->HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] < base_value) - newbon->HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = base_value; + if (newbon->HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] < base_value) { + newbon->HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = base_value; newbon->HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = limit_value; + } break; } @@ -1648,7 +1636,7 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) } case SE_Illusion: - newbon->Illusion = true; + newbon->Illusion = rank.spell; break; case SE_IllusionPersistence: @@ -1802,8 +1790,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_Damage_Taken_Position_Mod: { //Mitigate if damage taken from behind base2 = 0, from front base2 = 1 - if (limit_value < 0 || limit_value > 2) + if (limit_value < 0 || limit_value >= 2) { break; + } else if (base_value < 0 && newbon->Damage_Taken_Position_Mod[limit_value] > base_value) newbon->Damage_Taken_Position_Mod[limit_value] = base_value; else if (base_value > 0 && newbon->Damage_Taken_Position_Mod[limit_value] < base_value) @@ -1813,8 +1802,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_Melee_Damage_Position_Mod: { - if (limit_value < 0 || limit_value > 2) + if (limit_value < 0 || limit_value >= 2) { break; + } else if (base_value < 0 && newbon->Melee_Damage_Position_Mod[limit_value] > base_value) newbon->Melee_Damage_Position_Mod[limit_value] = base_value; else if (base_value > 0 && newbon->Melee_Damage_Position_Mod[limit_value] < base_value) @@ -1825,9 +1815,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_Damage_Taken_Position_Amt: { //Mitigate if damage taken from behind base2 = 0, from front base2 = 1 - if (limit_value < 0 || limit_value > 2) + if (limit_value < 0 || limit_value >= 2) { break; - + } newbon->Damage_Taken_Position_Amt[limit_value] += base_value; break; } @@ -1835,8 +1825,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_Melee_Damage_Position_Amt: { //Mitigate if damage taken from behind base2 = 0, from front base2 = 1 - if (limit_value < 0 || limit_value > 2) + if (limit_value < 0 || limit_value >= 2) { break; + } newbon->Melee_Damage_Position_Amt[limit_value] += base_value; break; @@ -2109,10 +2100,17 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne //Use AISpellEffects else { spell_effect_id = effect_id; - effect_value = se_base; - limit_value = se_limit; - max_value = se_max; - i = (EFFECT_COUNT - 1); // AISpellEffects do a single pass + effect_value = se_base; + limit_value = se_limit; + max_value = se_max; + + //Special custom cases for loading effects on to NPC from 'npc_spels_effects' table + //Non-Focused Effect to modify incoming spell damage by resist type. + if (spell_effect_id == SE_FcSpellVulnerability) { + ModVulnerability(limit_value, effect_value); + } + + break; } switch (spell_effect_id) @@ -2163,7 +2161,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne } else if ((effect_value - 100) < 0) { // Slow int real_slow_value = (100 - effect_value) * -1; - real_slow_value -= ((real_slow_value * GetSlowMitigation()/100)); + real_slow_value -= (real_slow_value * GetSlowMitigation()/100); if (real_slow_value < new_bonus->haste) new_bonus->haste = real_slow_value; } @@ -2180,7 +2178,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne } else if ((effect_value - 100) < 0) { // Slow int real_slow_value = (100 - effect_value) * -1; - real_slow_value -= ((real_slow_value * GetSlowMitigation()/100)); + real_slow_value -= (real_slow_value * GetSlowMitigation()/100); if (real_slow_value < new_bonus->hastetype2) new_bonus->hastetype2 = real_slow_value; } @@ -2190,7 +2188,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_AttackSpeed3: { if (effect_value < 0){ //Slow - effect_value -= ((effect_value * GetSlowMitigation()/100)); + effect_value -= (effect_value * GetSlowMitigation()/100); if (effect_value < new_bonus->hastetype3) new_bonus->hastetype3 = effect_value; } @@ -2214,7 +2212,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne effect_value = effect_value * -1; if (effect_value > 0 && effect_value > new_bonus->inhibitmelee) { - effect_value -= ((effect_value * GetSlowMitigation()/100)); + effect_value -= (effect_value * GetSlowMitigation()/100); if (effect_value > new_bonus->inhibitmelee) new_bonus->inhibitmelee = effect_value; } @@ -3175,8 +3173,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_HPToMana: { //Lower the ratio the more favorable - if((!new_bonus->HPToManaConvert) || (new_bonus->HPToManaConvert >= effect_value)) - new_bonus->HPToManaConvert = spells[spell_id].base_value[i]; + if ((!new_bonus->HPToManaConvert) || (new_bonus->HPToManaConvert >= effect_value)) { + new_bonus->HPToManaConvert = spells[spell_id].base_value[i]; + } break; } @@ -3194,8 +3193,13 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_NegateAttacks: { - if (!new_bonus->NegateAttacks[SBIndex::NEGATE_ATK_EXISTS] || - ((new_bonus->NegateAttacks[SBIndex::NEGATE_ATK_EXISTS] && new_bonus->NegateAttacks[SBIndex::NEGATE_ATK_MAX_DMG_ABSORB_PER_HIT]) && (new_bonus->NegateAttacks[SBIndex::NEGATE_ATK_MAX_DMG_ABSORB_PER_HIT] < max_value))){ + if ( + !new_bonus->NegateAttacks[SBIndex::NEGATE_ATK_EXISTS] || + ( + new_bonus->NegateAttacks[SBIndex::NEGATE_ATK_MAX_DMG_ABSORB_PER_HIT] && + new_bonus->NegateAttacks[SBIndex::NEGATE_ATK_MAX_DMG_ABSORB_PER_HIT] < max_value + ) + ) { new_bonus->NegateAttacks[SBIndex::NEGATE_ATK_EXISTS] = 1; new_bonus->NegateAttacks[SBIndex::NEGATE_ATK_BUFFSLOT] = buffslot; new_bonus->NegateAttacks[SBIndex::NEGATE_ATK_MAX_DMG_ABSORB_PER_HIT] = max_value; @@ -3487,14 +3491,16 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne { for(int e = 0; e < MAX_RESISTABLE_EFFECTS*2; e+=2) { - if(new_bonus->SEResist[e+1] && (new_bonus->SEResist[e] == limit_value) && (new_bonus->SEResist[e+1] < effect_value)){ - new_bonus->SEResist[e] = limit_value; //Spell Effect ID - new_bonus->SEResist[e+1] = effect_value; //Resist Chance - break; - } - else if (!new_bonus->SEResist[e+1]){ - new_bonus->SEResist[e] = limit_value; //Spell Effect ID - new_bonus->SEResist[e+1] = effect_value; //Resist Chance + if ( + !new_bonus->SEResist[e + 1] || + ( + new_bonus->SEResist[e + 1] && + new_bonus->SEResist[e] == limit_value && + new_bonus->SEResist[e + 1] < effect_value + ) + ) { + new_bonus->SEResist[e] = limit_value; //Spell Effect ID + new_bonus->SEResist[e + 1] = effect_value; //Resist Chance break; } } @@ -3511,6 +3517,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_DoubleRiposte: { new_bonus->DoubleRiposte += effect_value; + break; } case SE_GiveDoubleRiposte: @@ -3523,11 +3530,11 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne break; } - case SE_SlayUndead: - { - if(new_bonus->SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] < effect_value) + case SE_SlayUndead: { + if (new_bonus->SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] < effect_value) { new_bonus->SlayUndead[SBIndex::SLAYUNDEAD_RATE_MOD] = effect_value; // Rate - new_bonus->SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] = limit_value; // Damage Modifier + new_bonus->SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] = limit_value; // Damage Modifier + } break; } @@ -3669,9 +3676,8 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne break; } - case SE_HeadShotLevel: - { - if(new_bonus->HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] < effect_value) { + case SE_HeadShotLevel: { + if (new_bonus->HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] < effect_value) { new_bonus->HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; new_bonus->HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = limit_value; } @@ -3797,6 +3803,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne break; } } + break; } case SE_PC_Pet_Rampage: { @@ -3884,8 +3891,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_Damage_Taken_Position_Mod: { //Mitigate if damage taken from behind base2 = 0, from front base2 = 1 - if (limit_value < 0 || limit_value > 2) + if (limit_value < 0 || limit_value >= 2) { break; + } if (AdditiveWornBonus) new_bonus->Damage_Taken_Position_Mod[limit_value] += effect_value; else if (effect_value < 0 && new_bonus->Damage_Taken_Position_Mod[limit_value] > effect_value) @@ -3898,8 +3906,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_Melee_Damage_Position_Mod: { //Increase damage by percent from behind base2 = 0, from front base2 = 1 - if (limit_value < 0 || limit_value > 2) + if (limit_value < 0 || limit_value >= 2) { break; + } if (AdditiveWornBonus) new_bonus->Melee_Damage_Position_Mod[limit_value] += effect_value; else if (effect_value < 0 && new_bonus->Melee_Damage_Position_Mod[limit_value] > effect_value) @@ -3912,8 +3921,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_Damage_Taken_Position_Amt: { //Mitigate if damage taken from behind base2 = 0, from front base2 = 1 - if (limit_value < 0 || limit_value > 2) + if (limit_value < 0 || limit_value >= 2) { break; + } new_bonus->Damage_Taken_Position_Amt[limit_value] += effect_value; break; @@ -3922,8 +3932,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_Melee_Damage_Position_Amt: { //Mitigate if damage taken from behind base2 = 0, from front base2 = 1 - if (limit_value < 0 || limit_value > 2) + if (limit_value < 0 || limit_value >= 2) { break; + } new_bonus->Melee_Damage_Position_Amt[limit_value] += effect_value; break; @@ -4051,15 +4062,6 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_TrapCircumvention: new_bonus->TrapCircumvention += effect_value; break; - - //Special custom cases for loading effects on to NPC from 'npc_spels_effects' table - if (IsAISpellEffect) { - - //Non-Focused Effect to modify incoming spell damage by resist type. - case SE_FcSpellVulnerability: - ModVulnerability(limit_value, effect_value); - break; - } } } } @@ -4305,11 +4307,11 @@ uint8 Mob::IsFocusEffect(uint16 spell_id,int effect_index, bool AA,uint32 aa_eff case SE_SpellResistReduction: return focusResistRate; case SE_Fc_ResistIncoming: - focusFcResistIncoming; + return focusFcResistIncoming; case SE_Fc_Amplify_Mod: - focusFcAmplifyMod; + return focusFcAmplifyMod; case SE_Fc_Amplify_Amt: - focusFcAmplifyAmt; + return focusFcAmplifyAmt; case SE_SpellHateMod: return focusSpellHateMod; case SE_ReduceReuseTimer: @@ -4476,12 +4478,9 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) case SE_AttackSpeed3: { - if (effect_value > 0) { - if (negate_spellbonus) { spellbonuses.hastetype3 = effect_value; } - if (negate_aabonus) { aabonuses.hastetype3 = effect_value; } - if (negate_itembonus) { itembonuses.hastetype3 = effect_value; } - - } + if (negate_spellbonus) { spellbonuses.hastetype3 = effect_value; } + if (negate_aabonus) { aabonuses.hastetype3 = effect_value; } + if (negate_itembonus) { itembonuses.hastetype3 = effect_value; } break; } @@ -4573,29 +4572,36 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) case SE_AllStats: { - if (negate_spellbonus) { spellbonuses.STR = effect_value; } - if (negate_spellbonus) { spellbonuses.DEX = effect_value; } - if (negate_spellbonus) { spellbonuses.AGI = effect_value; } - if (negate_spellbonus) { spellbonuses.STA = effect_value; } - if (negate_spellbonus) { spellbonuses.INT = effect_value; } - if (negate_spellbonus) { spellbonuses.WIS = effect_value; } - if (negate_spellbonus) { spellbonuses.CHA = effect_value; } + if (negate_spellbonus) { + spellbonuses.STR = effect_value; + spellbonuses.DEX = effect_value; + spellbonuses.AGI = effect_value; + spellbonuses.STA = effect_value; + spellbonuses.INT = effect_value; + spellbonuses.WIS = effect_value; + spellbonuses.CHA = effect_value; + } - if (negate_itembonus) { itembonuses.STR = effect_value; } - if (negate_itembonus) { itembonuses.DEX = effect_value; } - if (negate_itembonus) { itembonuses.AGI = effect_value; } - if (negate_itembonus) { itembonuses.STA = effect_value; } - if (negate_itembonus) { itembonuses.INT = effect_value; } - if (negate_itembonus) { itembonuses.WIS = effect_value; } - if (negate_itembonus) { itembonuses.CHA = effect_value; } + if (negate_itembonus) { + itembonuses.STR = effect_value; + itembonuses.DEX = effect_value; + itembonuses.AGI = effect_value; + itembonuses.STA = effect_value; + itembonuses.INT = effect_value; + itembonuses.WIS = effect_value; + itembonuses.CHA = effect_value; + } + + if (negate_aabonus) { + aabonuses.STR = effect_value; + aabonuses.DEX = effect_value; + aabonuses.AGI = effect_value; + aabonuses.STA = effect_value; + aabonuses.INT = effect_value; + aabonuses.WIS = effect_value; + aabonuses.CHA = effect_value; + } - if (negate_aabonus) { aabonuses.STR = effect_value; } - if (negate_aabonus) { aabonuses.DEX = effect_value; } - if (negate_aabonus) { aabonuses.AGI = effect_value; } - if (negate_aabonus) { aabonuses.STA = effect_value; } - if (negate_aabonus) { aabonuses.INT = effect_value; } - if (negate_aabonus) { aabonuses.WIS = effect_value; } - if (negate_aabonus) { aabonuses.CHA = effect_value; } break; } @@ -4631,23 +4637,30 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) case SE_ResistAll: { - if (negate_spellbonus) { spellbonuses.MR = effect_value; } - if (negate_spellbonus) { spellbonuses.DR = effect_value; } - if (negate_spellbonus) { spellbonuses.PR = effect_value; } - if (negate_spellbonus) { spellbonuses.CR = effect_value; } - if (negate_spellbonus) { spellbonuses.FR = effect_value; } + if (negate_spellbonus) { + spellbonuses.MR = effect_value; + spellbonuses.DR = effect_value; + spellbonuses.PR = effect_value; + spellbonuses.CR = effect_value; + spellbonuses.FR = effect_value; + } - if (negate_aabonus) { aabonuses.MR = effect_value; } - if (negate_aabonus) { aabonuses.DR = effect_value; } - if (negate_aabonus) { aabonuses.PR = effect_value; } - if (negate_aabonus) { aabonuses.CR = effect_value; } - if (negate_aabonus) { aabonuses.FR = effect_value; } + if (negate_aabonus) { + aabonuses.MR = effect_value; + aabonuses.DR = effect_value; + aabonuses.PR = effect_value; + aabonuses.CR = effect_value; + aabonuses.FR = effect_value; + } + + if (negate_itembonus) { + itembonuses.MR = effect_value; + itembonuses.DR = effect_value; + itembonuses.PR = effect_value; + itembonuses.CR = effect_value; + itembonuses.FR = effect_value; + } - if (negate_itembonus) { itembonuses.MR = effect_value; } - if (negate_itembonus) { itembonuses.DR = effect_value; } - if (negate_itembonus) { itembonuses.PR = effect_value; } - if (negate_itembonus) { itembonuses.CR = effect_value; } - if (negate_itembonus) { itembonuses.FR = effect_value; } break; } @@ -4784,23 +4797,29 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) case SE_AllInstrumentMod: { - if (negate_spellbonus) { spellbonuses.singingMod = effect_value; } - if (negate_spellbonus) { spellbonuses.brassMod = effect_value; } - if (negate_spellbonus) { spellbonuses.percussionMod = effect_value; } - if (negate_spellbonus) { spellbonuses.windMod = effect_value; } - if (negate_spellbonus) { spellbonuses.stringedMod = effect_value; } + if (negate_spellbonus) { + spellbonuses.singingMod = effect_value; + spellbonuses.brassMod = effect_value; + spellbonuses.percussionMod = effect_value; + spellbonuses.windMod = effect_value; + spellbonuses.stringedMod = effect_value; + } - if (negate_itembonus) { itembonuses.singingMod = effect_value; } - if (negate_itembonus) { itembonuses.brassMod = effect_value; } - if (negate_itembonus) { itembonuses.percussionMod = effect_value; } - if (negate_itembonus) { itembonuses.windMod = effect_value; } - if (negate_itembonus) { itembonuses.stringedMod = effect_value; } + if (negate_itembonus) { + itembonuses.singingMod = effect_value; + itembonuses.brassMod = effect_value; + itembonuses.percussionMod = effect_value; + itembonuses.windMod = effect_value; + itembonuses.stringedMod = effect_value; + } - if (negate_aabonus) { aabonuses.singingMod = effect_value; } - if (negate_aabonus) { aabonuses.brassMod = effect_value; } - if (negate_aabonus) { aabonuses.percussionMod = effect_value; } - if (negate_aabonus) { aabonuses.windMod = effect_value; } - if (negate_aabonus) { aabonuses.stringedMod = effect_value; } + if (negate_aabonus) { + aabonuses.singingMod = effect_value; + aabonuses.brassMod = effect_value; + aabonuses.percussionMod = effect_value; + aabonuses.windMod = effect_value; + aabonuses.stringedMod = effect_value; + } break; } @@ -4811,8 +4830,11 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) break; case SE_ResistFearChance: - if (negate_spellbonus) { spellbonuses.Fearless = false; } - if (negate_spellbonus) { spellbonuses.ResistFearChance = effect_value; } + if (negate_spellbonus) { + spellbonuses.Fearless = false; + spellbonuses.ResistFearChance = effect_value; + } + if (negate_aabonus) { aabonuses.ResistFearChance = effect_value; } if (negate_itembonus) { itembonuses.ResistFearChance = effect_value; } break; @@ -4989,12 +5011,21 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) break; case SE_CriticalSpellChance: - if (negate_spellbonus) { spellbonuses.CriticalSpellChance = effect_value; } - if (negate_spellbonus) { spellbonuses.SpellCritDmgIncrease = effect_value; } - if (negate_aabonus) { aabonuses.CriticalSpellChance = effect_value; } - if (negate_aabonus) { aabonuses.SpellCritDmgIncrease = effect_value; } - if (negate_itembonus) { itembonuses.CriticalSpellChance = effect_value; } - if (negate_itembonus) { itembonuses.SpellCritDmgIncrease = effect_value; } + if (negate_spellbonus) { + spellbonuses.CriticalSpellChance = effect_value; + spellbonuses.SpellCritDmgIncrease = effect_value; + } + + if (negate_aabonus) { + aabonuses.CriticalSpellChance = effect_value; + aabonuses.SpellCritDmgIncrease = effect_value; + } + + if (negate_itembonus) { + itembonuses.CriticalSpellChance = effect_value; + itembonuses.SpellCritDmgIncrease = effect_value; + } + break; case SE_SpellCritDmgIncrease: @@ -5035,20 +5066,27 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) case SE_ProcOnKillShot: { - for (int e = 0; e < MAX_SPELL_TRIGGER * 3; e = 3) + for (int e = 0; e < MAX_SPELL_TRIGGER * 3; e += 3) { - if (negate_spellbonus) { spellbonuses.SpellOnKill[e] = effect_value; } - if (negate_spellbonus) { spellbonuses.SpellOnKill[e + 1] = effect_value; } - if (negate_spellbonus) { spellbonuses.SpellOnKill[e + 2] = effect_value; } + if (negate_spellbonus) { + spellbonuses.SpellOnKill[e] = effect_value; + spellbonuses.SpellOnKill[e + 1] = effect_value; + spellbonuses.SpellOnKill[e + 2] = effect_value; + } - if (negate_aabonus) { aabonuses.SpellOnKill[e] = effect_value; } - if (negate_aabonus) { aabonuses.SpellOnKill[e + 1] = effect_value; } - if (negate_aabonus) { aabonuses.SpellOnKill[e + 2] = effect_value; } + if (negate_aabonus) { + aabonuses.SpellOnKill[e] = effect_value; + aabonuses.SpellOnKill[e + 1] = effect_value; + aabonuses.SpellOnKill[e + 2] = effect_value; + } - if (negate_itembonus) { itembonuses.SpellOnKill[e] = effect_value; } - if (negate_itembonus) { itembonuses.SpellOnKill[e + 1] = effect_value; } - if (negate_itembonus) { itembonuses.SpellOnKill[e + 2] = effect_value; } + if (negate_itembonus) { + itembonuses.SpellOnKill[e] = effect_value; + itembonuses.SpellOnKill[e + 1] = effect_value; + itembonuses.SpellOnKill[e + 2] = effect_value; + } } + break; } @@ -5149,35 +5187,53 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) } case SE_NegateAttacks: - if (negate_spellbonus) { spellbonuses.NegateAttacks[SBIndex::NEGATE_ATK_EXISTS] = effect_value; } - if (negate_spellbonus) { spellbonuses.NegateAttacks[SBIndex::NEGATE_ATK_BUFFSLOT] = effect_value; } + if (negate_spellbonus) { + spellbonuses.NegateAttacks[SBIndex::NEGATE_ATK_EXISTS] = effect_value; + spellbonuses.NegateAttacks[SBIndex::NEGATE_ATK_BUFFSLOT] = effect_value; + } + break; case SE_MitigateMeleeDamage: - if (negate_spellbonus) { spellbonuses.MitigateMeleeRune[SBIndex::MITIGATION_RUNE_PERCENT] = effect_value; } - if (negate_spellbonus) { spellbonuses.MitigateMeleeRune[SBIndex::MITIGATION_RUNE_BUFFSLOT] = -1; } + if (negate_spellbonus) { + spellbonuses.MitigateMeleeRune[SBIndex::MITIGATION_RUNE_PERCENT] = effect_value; + spellbonuses.MitigateMeleeRune[SBIndex::MITIGATION_RUNE_BUFFSLOT] = -1; + } + break; case SE_MeleeThresholdGuard: - if (negate_spellbonus) { spellbonuses.MeleeThresholdGuard[SBIndex::THRESHOLDGUARD_MITIGATION_PERCENT] = effect_value; } - if (negate_spellbonus) { spellbonuses.MeleeThresholdGuard[SBIndex::THRESHOLDGUARD_BUFFSLOT] = -1; } - if (negate_spellbonus) { spellbonuses.MeleeThresholdGuard[SBIndex::THRESHOLDGUARD_BUFFSLOT] = effect_value; } + if (negate_spellbonus) { + spellbonuses.MeleeThresholdGuard[SBIndex::THRESHOLDGUARD_MITIGATION_PERCENT] = effect_value; + spellbonuses.MeleeThresholdGuard[SBIndex::THRESHOLDGUARD_BUFFSLOT] = -1; + spellbonuses.MeleeThresholdGuard[SBIndex::THRESHOLDGUARD_BUFFSLOT] = effect_value; + } + break; case SE_SpellThresholdGuard: - if (negate_spellbonus) { spellbonuses.SpellThresholdGuard[SBIndex::THRESHOLDGUARD_MITIGATION_PERCENT] = effect_value; } - if (negate_spellbonus) { spellbonuses.SpellThresholdGuard[SBIndex::THRESHOLDGUARD_BUFFSLOT] = -1; } - if (negate_spellbonus) { spellbonuses.SpellThresholdGuard[SBIndex::THRESHOLDGUARD_BUFFSLOT] = effect_value; } + if (negate_spellbonus) { + spellbonuses.SpellThresholdGuard[SBIndex::THRESHOLDGUARD_MITIGATION_PERCENT] = effect_value; + spellbonuses.SpellThresholdGuard[SBIndex::THRESHOLDGUARD_BUFFSLOT] = -1; + spellbonuses.SpellThresholdGuard[SBIndex::THRESHOLDGUARD_BUFFSLOT] = effect_value; + } + break; case SE_MitigateSpellDamage: - if (negate_spellbonus) { spellbonuses.MitigateSpellRune[SBIndex::MITIGATION_RUNE_PERCENT] = effect_value; } - if (negate_spellbonus) { spellbonuses.MitigateSpellRune[SBIndex::MITIGATION_RUNE_BUFFSLOT] = -1; } + if (negate_spellbonus) { + spellbonuses.MitigateSpellRune[SBIndex::MITIGATION_RUNE_PERCENT] = effect_value; + spellbonuses.MitigateSpellRune[SBIndex::MITIGATION_RUNE_BUFFSLOT] = -1; + } + break; case SE_MitigateDotDamage: - if (negate_spellbonus) { spellbonuses.MitigateDotRune[SBIndex::MITIGATION_RUNE_PERCENT] = effect_value; } - if (negate_spellbonus) { spellbonuses.MitigateDotRune[SBIndex::MITIGATION_RUNE_BUFFSLOT] = -1; } + if (negate_spellbonus) { + spellbonuses.MitigateDotRune[SBIndex::MITIGATION_RUNE_PERCENT] = effect_value; + spellbonuses.MitigateDotRune[SBIndex::MITIGATION_RUNE_BUFFSLOT] = -1; + } + break; case SE_ManaAbsorbPercentDamage: @@ -5185,8 +5241,11 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) break; case SE_Endurance_Absorb_Pct_Damage: - if (negate_spellbonus) { spellbonuses.EnduranceAbsorbPercentDamage[SBIndex::ENDURANCE_ABSORD_MITIGIATION] = effect_value; } - if (negate_spellbonus) { spellbonuses.EnduranceAbsorbPercentDamage[SBIndex::ENDURANCE_ABSORD_DRAIN_PER_HP] = effect_value; } + if (negate_spellbonus) { + spellbonuses.EnduranceAbsorbPercentDamage[SBIndex::ENDURANCE_ABSORD_MITIGIATION] = effect_value; + spellbonuses.EnduranceAbsorbPercentDamage[SBIndex::ENDURANCE_ABSORD_DRAIN_PER_HP] = effect_value; + } + break; case SE_ShieldBlock: @@ -5297,11 +5356,6 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) break; case SE_StrikeThrough: - if (negate_spellbonus) { spellbonuses.StrikeThrough = effect_value; } - if (negate_aabonus) { aabonuses.StrikeThrough = effect_value; } - if (negate_itembonus) { itembonuses.StrikeThrough = effect_value; } - break; - case SE_StrikeThrough2: if (negate_spellbonus) { spellbonuses.StrikeThrough = effect_value; } if (negate_aabonus) { aabonuses.StrikeThrough = effect_value; } @@ -5414,8 +5468,10 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) { for (int e = 0; e < MAX_RESISTABLE_EFFECTS * 2; e += 2) { - if (negate_spellbonus) { spellbonuses.SEResist[e] = effect_value; } - if (negate_spellbonus) { spellbonuses.SEResist[e + 1] = effect_value; } + if (negate_spellbonus) { + spellbonuses.SEResist[e] = effect_value; + spellbonuses.SEResist[e + 1] = effect_value; + } } break; } @@ -5439,12 +5495,21 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) break; case SE_SlayUndead: - if (negate_spellbonus) { spellbonuses.SlayUndead[SBIndex::SLAYUNDEAD_RATE_MOD] = effect_value; } - if (negate_spellbonus) { spellbonuses.SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] = effect_value; } - if (negate_itembonus) { itembonuses.SlayUndead[SBIndex::SLAYUNDEAD_RATE_MOD] = effect_value; } - if (negate_itembonus) { itembonuses.SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] = effect_value; } - if (negate_aabonus) { aabonuses.SlayUndead[SBIndex::SLAYUNDEAD_RATE_MOD] = effect_value; } - if (negate_aabonus) { aabonuses.SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] = effect_value; } + if (negate_spellbonus) { + spellbonuses.SlayUndead[SBIndex::SLAYUNDEAD_RATE_MOD] = effect_value; + spellbonuses.SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] = effect_value; + } + + if (negate_itembonus) { + itembonuses.SlayUndead[SBIndex::SLAYUNDEAD_RATE_MOD] = effect_value; + itembonuses.SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] = effect_value; + } + + if (negate_aabonus) { + aabonuses.SlayUndead[SBIndex::SLAYUNDEAD_RATE_MOD] = effect_value; + aabonuses.SlayUndead[SBIndex::SLAYUNDEAD_DMG_MOD] = effect_value; + } + break; case SE_DoubleRangedAttack: @@ -5494,9 +5559,12 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) break; case SE_ImprovedTaunt: - if (negate_spellbonus) { spellbonuses.ImprovedTaunt[SBIndex::IMPROVED_TAUNT_MAX_LVL] = effect_value; } - if (negate_spellbonus) { spellbonuses.ImprovedTaunt[SBIndex::IMPROVED_TAUNT_AGGRO_MOD] = effect_value; } - if (negate_spellbonus) { spellbonuses.ImprovedTaunt[SBIndex::IMPROVED_TAUNT_BUFFSLOT] = -1; } + if (negate_spellbonus) { + spellbonuses.ImprovedTaunt[SBIndex::IMPROVED_TAUNT_MAX_LVL] = effect_value; + spellbonuses.ImprovedTaunt[SBIndex::IMPROVED_TAUNT_AGGRO_MOD] = effect_value; + spellbonuses.ImprovedTaunt[SBIndex::IMPROVED_TAUNT_BUFFSLOT] = -1; + } + break; case SE_FrenziedDevastation: @@ -5506,18 +5574,27 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) break; case SE_Root: - if (negate_spellbonus) { spellbonuses.Root[SBIndex::ROOT_EXISTS] = effect_value; } - if (negate_spellbonus) { spellbonuses.Root[SBIndex::ROOT_BUFFSLOT] = -1; } + if (negate_spellbonus) { + spellbonuses.Root[SBIndex::ROOT_EXISTS] = effect_value; + spellbonuses.Root[SBIndex::ROOT_BUFFSLOT] = -1; + } + break; case SE_Rune: - if (negate_spellbonus) { spellbonuses.MeleeRune[SBIndex::RUNE_AMOUNT] = effect_value; } - if (negate_spellbonus) { spellbonuses.MeleeRune[SBIndex::RUNE_BUFFSLOT] = -1; } + if (negate_spellbonus) { + spellbonuses.MeleeRune[SBIndex::RUNE_AMOUNT] = effect_value; + spellbonuses.MeleeRune[SBIndex::RUNE_BUFFSLOT] = -1; + } + break; case SE_AbsorbMagicAtt: - if (negate_spellbonus) { spellbonuses.AbsorbMagicAtt[SBIndex::RUNE_AMOUNT] = effect_value; } - if (negate_spellbonus) { spellbonuses.AbsorbMagicAtt[SBIndex::RUNE_BUFFSLOT] = -1; } + if (negate_spellbonus) { + spellbonuses.AbsorbMagicAtt[SBIndex::RUNE_AMOUNT] = effect_value; + spellbonuses.AbsorbMagicAtt[SBIndex::RUNE_BUFFSLOT] = -1; + } + break; case SE_Berserk: @@ -5545,57 +5622,111 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) break; case SE_HeadShot: - if (negate_spellbonus) { spellbonuses.HeadShot[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; } - if (negate_aabonus) { aabonuses.HeadShot[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; } - if (negate_itembonus) { itembonuses.HeadShot[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; } - if (negate_spellbonus) { spellbonuses.HeadShot[SBIndex::FINISHING_EFFECT_DMG] = effect_value; } - if (negate_aabonus) { aabonuses.HeadShot[SBIndex::FINISHING_EFFECT_DMG] = effect_value; } - if (negate_itembonus) { itembonuses.HeadShot[SBIndex::FINISHING_EFFECT_DMG] = effect_value; } + if (negate_spellbonus) { + spellbonuses.HeadShot[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; + spellbonuses.HeadShot[SBIndex::FINISHING_EFFECT_DMG] = effect_value; + } + + if (negate_aabonus) { + aabonuses.HeadShot[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; + aabonuses.HeadShot[SBIndex::FINISHING_EFFECT_DMG] = effect_value; + } + + if (negate_itembonus) { + itembonuses.HeadShot[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; + itembonuses.HeadShot[SBIndex::FINISHING_EFFECT_DMG] = effect_value; + } + break; case SE_HeadShotLevel: - if (negate_spellbonus) { spellbonuses.HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; } - if (negate_aabonus) { aabonuses.HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; } - if (negate_itembonus) { itembonuses.HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; } - if (negate_spellbonus) { spellbonuses.HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = effect_value; } - if (negate_aabonus) { aabonuses.HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = effect_value; } - if (negate_itembonus) { itembonuses.HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = effect_value; } + if (negate_spellbonus) { + spellbonuses.HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; + spellbonuses.HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = effect_value; + } + + if (negate_aabonus) { + aabonuses.HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; + aabonuses.HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = effect_value; + } + + if (negate_itembonus) { + itembonuses.HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; + itembonuses.HSLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = effect_value; + } + break; case SE_Assassinate: - if (negate_spellbonus) { spellbonuses.Assassinate[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; } - if (negate_aabonus) { aabonuses.Assassinate[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; } - if (negate_itembonus) { itembonuses.Assassinate[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; } - if (negate_spellbonus) { spellbonuses.Assassinate[SBIndex::FINISHING_EFFECT_DMG] = effect_value; } - if (negate_aabonus) { aabonuses.Assassinate[SBIndex::FINISHING_EFFECT_DMG] = effect_value; } - if (negate_itembonus) { itembonuses.Assassinate[SBIndex::FINISHING_EFFECT_DMG] = effect_value; } + if (negate_spellbonus) { + spellbonuses.Assassinate[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; + spellbonuses.Assassinate[SBIndex::FINISHING_EFFECT_DMG] = effect_value; + } + + if (negate_aabonus) { + aabonuses.Assassinate[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; + aabonuses.Assassinate[SBIndex::FINISHING_EFFECT_DMG] = effect_value; + } + + if (negate_itembonus) { + itembonuses.Assassinate[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; + itembonuses.Assassinate[SBIndex::FINISHING_EFFECT_DMG] = effect_value; + } + break; case SE_AssassinateLevel: - if (negate_spellbonus) { spellbonuses.AssassinateLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; } - if (negate_aabonus) { aabonuses.AssassinateLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; } - if (negate_itembonus) { itembonuses.AssassinateLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; } - if (negate_spellbonus) { spellbonuses.AssassinateLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = effect_value; } - if (negate_aabonus) { aabonuses.AssassinateLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = effect_value; } - if (negate_itembonus) { itembonuses.AssassinateLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = effect_value; } + if (negate_spellbonus) { + spellbonuses.AssassinateLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; + spellbonuses.AssassinateLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = effect_value; + } + + if (negate_aabonus) { + aabonuses.AssassinateLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; + aabonuses.AssassinateLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = effect_value; + } + + if (negate_itembonus) { + itembonuses.AssassinateLevel[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; + itembonuses.AssassinateLevel[SBIndex::FINISHING_EFFECT_LEVEL_CHANCE_BONUS] = effect_value; + } + break; case SE_FinishingBlow: - if (negate_spellbonus) { spellbonuses.FinishingBlow[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; } - if (negate_aabonus) { aabonuses.FinishingBlow[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; } - if (negate_itembonus) { itembonuses.FinishingBlow[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; } - if (negate_spellbonus) { spellbonuses.FinishingBlow[SBIndex::FINISHING_EFFECT_DMG] = effect_value; } - if (negate_aabonus) { aabonuses.FinishingBlow[SBIndex::FINISHING_EFFECT_DMG] = effect_value; } - if (negate_itembonus) { itembonuses.FinishingBlow[SBIndex::FINISHING_EFFECT_DMG] = effect_value; } + if (negate_spellbonus) { + spellbonuses.FinishingBlow[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; + spellbonuses.FinishingBlow[SBIndex::FINISHING_EFFECT_DMG] = effect_value; + } + + if (negate_aabonus) { + aabonuses.FinishingBlow[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; + aabonuses.FinishingBlow[SBIndex::FINISHING_EFFECT_DMG] = effect_value; + } + + if (negate_itembonus) { + itembonuses.FinishingBlow[SBIndex::FINISHING_EFFECT_PROC_CHANCE] = effect_value; + itembonuses.FinishingBlow[SBIndex::FINISHING_EFFECT_DMG] = effect_value; + } + break; case SE_FinishingBlowLvl: - if (negate_spellbonus) { spellbonuses.FinishingBlowLvl[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; } - if (negate_aabonus) { aabonuses.FinishingBlowLvl[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; } - if (negate_itembonus) { itembonuses.FinishingBlowLvl[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; } - if (negate_spellbonus) { spellbonuses.FinishingBlowLvl[SBIndex::FINISHING_BLOW_LEVEL_HP_RATIO] = effect_value; } - if (negate_aabonus) { aabonuses.FinishingBlowLvl[SBIndex::FINISHING_BLOW_LEVEL_HP_RATIO] = effect_value; } - if (negate_itembonus) { itembonuses.FinishingBlowLvl[SBIndex::FINISHING_BLOW_LEVEL_HP_RATIO] = effect_value; } + if (negate_spellbonus) { + spellbonuses.FinishingBlowLvl[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; + spellbonuses.FinishingBlowLvl[SBIndex::FINISHING_BLOW_LEVEL_HP_RATIO] = effect_value; + } + + if (negate_aabonus) { + aabonuses.FinishingBlowLvl[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; + aabonuses.FinishingBlowLvl[SBIndex::FINISHING_BLOW_LEVEL_HP_RATIO] = effect_value; + } + + if (negate_itembonus) { + itembonuses.FinishingBlowLvl[SBIndex::FINISHING_EFFECT_LEVEL_MAX] = effect_value; + itembonuses.FinishingBlowLvl[SBIndex::FINISHING_BLOW_LEVEL_HP_RATIO] = effect_value; + } + break; case SE_Sanctuary: @@ -5634,41 +5765,76 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) break; case SE_Melee_Damage_Position_Mod: - if (negate_spellbonus) { spellbonuses.Melee_Damage_Position_Mod[SBIndex::POSITION_BACK] = effect_value; } - if (negate_aabonus) { aabonuses.Melee_Damage_Position_Mod[SBIndex::POSITION_BACK] = effect_value; } - if (negate_itembonus) { itembonuses.Melee_Damage_Position_Mod[SBIndex::POSITION_BACK] = effect_value; } - if (negate_spellbonus) { spellbonuses.Melee_Damage_Position_Mod[SBIndex::POSITION_FRONT] = effect_value; } - if (negate_aabonus) { aabonuses.Melee_Damage_Position_Mod[SBIndex::POSITION_FRONT] = effect_value; } - if (negate_itembonus) { itembonuses.Melee_Damage_Position_Mod[SBIndex::POSITION_FRONT] = effect_value; } + if (negate_spellbonus) { + spellbonuses.Melee_Damage_Position_Mod[SBIndex::POSITION_BACK] = effect_value; + spellbonuses.Melee_Damage_Position_Mod[SBIndex::POSITION_FRONT] = effect_value; + } + + if (negate_aabonus) { + aabonuses.Melee_Damage_Position_Mod[SBIndex::POSITION_BACK] = effect_value; + aabonuses.Melee_Damage_Position_Mod[SBIndex::POSITION_FRONT] = effect_value; + } + + if (negate_itembonus) { + itembonuses.Melee_Damage_Position_Mod[SBIndex::POSITION_BACK] = effect_value; + itembonuses.Melee_Damage_Position_Mod[SBIndex::POSITION_FRONT] = effect_value; + } + break; case SE_Damage_Taken_Position_Mod: - if (negate_spellbonus) { spellbonuses.Damage_Taken_Position_Mod[SBIndex::POSITION_BACK] = effect_value; } - if (negate_aabonus) { aabonuses.Damage_Taken_Position_Mod[SBIndex::POSITION_BACK] = effect_value; } - if (negate_itembonus) { itembonuses.Damage_Taken_Position_Mod[SBIndex::POSITION_BACK] = effect_value; } - if (negate_spellbonus) { spellbonuses.Damage_Taken_Position_Mod[SBIndex::POSITION_FRONT] = effect_value; } - if (negate_aabonus) { aabonuses.Damage_Taken_Position_Mod[SBIndex::POSITION_FRONT] = effect_value; } - if (negate_itembonus) { itembonuses.Damage_Taken_Position_Mod[SBIndex::POSITION_FRONT] = effect_value; } + if (negate_spellbonus) { + spellbonuses.Damage_Taken_Position_Mod[SBIndex::POSITION_BACK] = effect_value; + spellbonuses.Damage_Taken_Position_Mod[SBIndex::POSITION_FRONT] = effect_value; + } + + if (negate_aabonus) { + aabonuses.Damage_Taken_Position_Mod[SBIndex::POSITION_BACK] = effect_value; + aabonuses.Damage_Taken_Position_Mod[SBIndex::POSITION_FRONT] = effect_value; + } + + if (negate_itembonus) { + itembonuses.Damage_Taken_Position_Mod[SBIndex::POSITION_BACK] = effect_value; + itembonuses.Damage_Taken_Position_Mod[SBIndex::POSITION_FRONT] = effect_value; + } + break; case SE_Melee_Damage_Position_Amt: - if (negate_spellbonus) { spellbonuses.Melee_Damage_Position_Amt[SBIndex::POSITION_BACK] = effect_value; } - if (negate_aabonus) { aabonuses.Melee_Damage_Position_Amt[SBIndex::POSITION_BACK] = effect_value; } - if (negate_itembonus) { itembonuses.Melee_Damage_Position_Amt[SBIndex::POSITION_BACK] = effect_value; } - if (negate_spellbonus) { spellbonuses.Melee_Damage_Position_Amt[SBIndex::POSITION_FRONT] = effect_value; } - if (negate_aabonus) { aabonuses.Melee_Damage_Position_Amt[SBIndex::POSITION_FRONT] = effect_value; } - if (negate_itembonus) { itembonuses.Melee_Damage_Position_Amt[SBIndex::POSITION_FRONT] = effect_value; } + if (negate_spellbonus) { + spellbonuses.Melee_Damage_Position_Amt[SBIndex::POSITION_BACK] = effect_value; + spellbonuses.Melee_Damage_Position_Amt[SBIndex::POSITION_FRONT] = effect_value; + } + + if (negate_aabonus) { + aabonuses.Melee_Damage_Position_Amt[SBIndex::POSITION_BACK] = effect_value; + aabonuses.Melee_Damage_Position_Amt[SBIndex::POSITION_FRONT] = effect_value; + } + + if (negate_itembonus) { + itembonuses.Melee_Damage_Position_Amt[SBIndex::POSITION_BACK] = effect_value; + itembonuses.Melee_Damage_Position_Amt[SBIndex::POSITION_FRONT] = effect_value; + } + break; case SE_Damage_Taken_Position_Amt: - if (negate_spellbonus) { spellbonuses.Damage_Taken_Position_Amt[SBIndex::POSITION_BACK] = effect_value; } - if (negate_aabonus) { aabonuses.Damage_Taken_Position_Amt[SBIndex::POSITION_BACK] = effect_value; } - if (negate_itembonus) { itembonuses.Damage_Taken_Position_Amt[SBIndex::POSITION_BACK] = effect_value; } - if (negate_spellbonus) { spellbonuses.Damage_Taken_Position_Amt[SBIndex::POSITION_FRONT] = effect_value; } - if (negate_aabonus) { aabonuses.Damage_Taken_Position_Amt[SBIndex::POSITION_FRONT] = effect_value; } - if (negate_itembonus) { itembonuses.Damage_Taken_Position_Amt[SBIndex::POSITION_FRONT] = effect_value; } - break; + if (negate_spellbonus) { + spellbonuses.Damage_Taken_Position_Amt[SBIndex::POSITION_BACK] = effect_value; + spellbonuses.Damage_Taken_Position_Amt[SBIndex::POSITION_FRONT] = effect_value; + } + if (negate_aabonus) { + aabonuses.Damage_Taken_Position_Amt[SBIndex::POSITION_BACK] = effect_value; + aabonuses.Damage_Taken_Position_Amt[SBIndex::POSITION_FRONT] = effect_value; + } + + if (negate_itembonus) { + itembonuses.Damage_Taken_Position_Amt[SBIndex::POSITION_BACK] = effect_value; + itembonuses.Damage_Taken_Position_Amt[SBIndex::POSITION_FRONT] = effect_value; + } + + break; case SE_DS_Mitigation_Amount: if (negate_spellbonus) { spellbonuses.DS_Mitigation_Amount = effect_value; } @@ -5695,21 +5861,39 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id) break; case SE_PC_Pet_Rampage: - if (negate_spellbonus) { spellbonuses.PC_Pet_Rampage[SBIndex::PET_RAMPAGE_CHANCE] = effect_value; } - if (negate_itembonus) { itembonuses.PC_Pet_Rampage[SBIndex::PET_RAMPAGE_CHANCE] = effect_value; } - if (negate_aabonus) { aabonuses.PC_Pet_Rampage[SBIndex::PET_RAMPAGE_CHANCE] = effect_value; } - if (negate_spellbonus) { spellbonuses.PC_Pet_Rampage[SBIndex::PET_RAMPAGE_DMG_MOD] = effect_value; } - if (negate_itembonus) { itembonuses.PC_Pet_Rampage[SBIndex::PET_RAMPAGE_DMG_MOD] = effect_value; } - if (negate_aabonus) { aabonuses.PC_Pet_Rampage[SBIndex::PET_RAMPAGE_DMG_MOD] = effect_value; } + if (negate_spellbonus) { + spellbonuses.PC_Pet_Rampage[SBIndex::PET_RAMPAGE_CHANCE] = effect_value; + spellbonuses.PC_Pet_Rampage[SBIndex::PET_RAMPAGE_DMG_MOD] = effect_value; + } + + if (negate_itembonus) { + itembonuses.PC_Pet_Rampage[SBIndex::PET_RAMPAGE_CHANCE] = effect_value; + itembonuses.PC_Pet_Rampage[SBIndex::PET_RAMPAGE_DMG_MOD] = effect_value; + } + + if (negate_aabonus) { + aabonuses.PC_Pet_Rampage[SBIndex::PET_RAMPAGE_CHANCE] = effect_value; + aabonuses.PC_Pet_Rampage[SBIndex::PET_RAMPAGE_DMG_MOD] = effect_value; + } + break; case SE_PC_Pet_AE_Rampage: - if (negate_spellbonus) { spellbonuses.PC_Pet_AE_Rampage[SBIndex::PET_RAMPAGE_CHANCE] = effect_value; } - if (negate_itembonus) { itembonuses.PC_Pet_AE_Rampage[SBIndex::PET_RAMPAGE_CHANCE] = effect_value; } - if (negate_aabonus) { aabonuses.PC_Pet_AE_Rampage[SBIndex::PET_RAMPAGE_CHANCE] = effect_value; } - if (negate_spellbonus) { spellbonuses.PC_Pet_AE_Rampage[SBIndex::PET_RAMPAGE_DMG_MOD] = effect_value; } - if (negate_itembonus) { itembonuses.PC_Pet_AE_Rampage[SBIndex::PET_RAMPAGE_DMG_MOD] = effect_value; } - if (negate_aabonus) { aabonuses.PC_Pet_AE_Rampage[SBIndex::PET_RAMPAGE_DMG_MOD] = effect_value; } + if (negate_spellbonus) { + spellbonuses.PC_Pet_AE_Rampage[SBIndex::PET_RAMPAGE_CHANCE] = effect_value; + spellbonuses.PC_Pet_AE_Rampage[SBIndex::PET_RAMPAGE_DMG_MOD] = effect_value; + } + + if (negate_itembonus) { + itembonuses.PC_Pet_AE_Rampage[SBIndex::PET_RAMPAGE_CHANCE] = effect_value; + itembonuses.PC_Pet_AE_Rampage[SBIndex::PET_RAMPAGE_DMG_MOD] = effect_value; + } + + if (negate_aabonus) { + aabonuses.PC_Pet_AE_Rampage[SBIndex::PET_RAMPAGE_CHANCE] = effect_value; + aabonuses.PC_Pet_AE_Rampage[SBIndex::PET_RAMPAGE_DMG_MOD] = effect_value; + } + break; @@ -5764,26 +5948,26 @@ void Mob::CalcHeroicBonuses(StatBonuses* newbon) void Mob::SetHeroicWisBonuses(StatBonuses* n) { - n->heroic_max_mana += IsWISCasterClass(GetClass()) ? GetHeroicWIS() * RuleR(Character, HeroicWisdomMultiplier) * 10 : 0; - n->heroic_mana_regen += IsWISCasterClass(GetClass()) ? GetHeroicWIS() * RuleR(Character, HeroicWisdomMultiplier) / 25 : 0; + n->heroic_max_mana += IsHeroicWISCasterClass(GetClass()) ? GetHeroicWIS() * RuleR(Character, HeroicWisdomMultiplier) * 10 : 0; + n->heroic_mana_regen += IsHeroicWISCasterClass(GetClass()) ? GetHeroicWIS() * RuleR(Character, HeroicWisdomMultiplier) / 25 : 0; n->HealAmt += GetHeroicWIS() * RuleR(Character, HeroicWisdomIncreaseHealAmtMultiplier); if (RuleB(Character, HeroicStatsUseDataBucketsToScale)) { - n->heroic_max_mana += IsWISCasterClass(GetClass()) ? GetHeroicWIS() * CheckHeroicBonusesDataBuckets(HeroicBonusBucket::WisMaxMana) * 10 : 0; - n->heroic_mana_regen += IsWISCasterClass(GetClass()) ? GetHeroicWIS() * CheckHeroicBonusesDataBuckets(HeroicBonusBucket::WisManaRegen) / 25 : 0; + n->heroic_max_mana += IsHeroicWISCasterClass(GetClass()) ? GetHeroicWIS() * CheckHeroicBonusesDataBuckets(HeroicBonusBucket::WisMaxMana) * 10 : 0; + n->heroic_mana_regen += IsHeroicWISCasterClass(GetClass()) ? GetHeroicWIS() * CheckHeroicBonusesDataBuckets(HeroicBonusBucket::WisManaRegen) / 25 : 0; n->HealAmt += GetHeroicWIS() * CheckHeroicBonusesDataBuckets(HeroicBonusBucket::WisHealAmt); } } void Mob::SetHeroicIntBonuses(StatBonuses* n) { - n->heroic_max_mana += IsINTCasterClass(GetClass()) ? GetHeroicINT() * RuleR(Character, HeroicIntelligenceMultiplier) * 10 : 0; - n->heroic_mana_regen += IsINTCasterClass(GetClass()) ? GetHeroicINT() * RuleR(Character, HeroicIntelligenceMultiplier) / 25 : 0; + n->heroic_max_mana += IsHeroicINTCasterClass(GetClass()) ? GetHeroicINT() * RuleR(Character, HeroicIntelligenceMultiplier) * 10 : 0; + n->heroic_mana_regen += IsHeroicINTCasterClass(GetClass()) ? GetHeroicINT() * RuleR(Character, HeroicIntelligenceMultiplier) / 25 : 0; n->SpellDmg += GetHeroicINT() * RuleR(Character, HeroicIntelligenceIncreaseSpellDmgMultiplier); if (RuleB(Character, HeroicStatsUseDataBucketsToScale)) { - n->heroic_max_mana += IsINTCasterClass(GetClass()) ? GetHeroicINT() * CheckHeroicBonusesDataBuckets(HeroicBonusBucket::IntMaxMana) * 10 : 0; - n->heroic_mana_regen += IsINTCasterClass(GetClass()) ? GetHeroicINT() * CheckHeroicBonusesDataBuckets(HeroicBonusBucket::IntManaRegen) / 25 : 0; + n->heroic_max_mana += IsHeroicINTCasterClass(GetClass()) ? GetHeroicINT() * CheckHeroicBonusesDataBuckets(HeroicBonusBucket::IntMaxMana) * 10 : 0; + n->heroic_mana_regen += IsHeroicINTCasterClass(GetClass()) ? GetHeroicINT() * CheckHeroicBonusesDataBuckets(HeroicBonusBucket::IntManaRegen) / 25 : 0; n->SpellDmg += GetHeroicINT() * CheckHeroicBonusesDataBuckets(HeroicBonusBucket::IntSpellDmg); } } @@ -5864,4 +6048,4 @@ float Mob::CheckHeroicBonusesDataBuckets(std::string bucket_name) } return Strings::ToFloat(bucket_value); -} \ No newline at end of file +} diff --git a/zone/bot.cpp b/zone/bot.cpp index 1a742ec73..89f13a64c 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -22,8 +22,6 @@ #include "doors.h" #include "quest_parser_collection.h" #include "lua_parser.h" -#include "../common/strings.h" -#include "../common/say_link.h" #include "../common/repositories/bot_spell_settings_repository.h" #include "../common/data_verification.h" @@ -261,7 +259,7 @@ Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double to const SPDat_Spell_Struct& spell = spells[buffs[j1].spellid]; - if (int NimbusEffect = GetNimbusEffect(buffs[j1].spellid); NimbusEffect && !IsNimbusEffectActive(NimbusEffect)) { + if (int NimbusEffect = GetSpellNimbusEffect(buffs[j1].spellid); NimbusEffect && !IsNimbusEffectActive(NimbusEffect)) { SendSpellEffect(NimbusEffect, 500, 0, 1, 3000, true); } @@ -424,12 +422,6 @@ Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double to } cur_end = max_end; - - // Safety Check to confirm we have a valid raid - if (HasRaid() && !GetRaid()->IsRaidMember(GetBotOwner()->CastToClient())) { - Bot::RemoveBotFromRaid(this); - } - } Bot::~Bot() { @@ -1112,7 +1104,7 @@ void Bot::GenerateAppearance() { uint16 Bot::GetPrimarySkillValue() { EQ::skills::SkillType skill = EQ::skills::HIGHEST_SKILL; //because nullptr == 0, which is 1H Slashing, & we want it to return 0 from GetSkill - if (bool equiped = m_inv.GetItem(EQ::invslot::slotPrimary); !equiped) { + if (bool equipped = m_inv.GetItem(EQ::invslot::slotPrimary); !equipped) { skill = EQ::skills::SkillHandtoHand; } else { uint8 type = m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->ItemType; //is this the best way to do this? @@ -1186,9 +1178,9 @@ int32 Bot::GenerateBaseHitPoints() { if (GetOwner() && GetOwner()->CastToClient() && GetOwner()->CastToClient()->ClientVersion() >= EQ::versions::ClientVersion::SoD && RuleB(Character, SoDClientUseSoDHPManaEnd)) { float SoDPost255; if (((NormalSTA - 255) / 2) > 0) - SoDPost255 = ((NormalSTA - 255) / 2); + SoDPost255 = ((static_cast(NormalSTA) - 255.0f) / 2.0f); else - SoDPost255 = 0; + SoDPost255 = 0.0f; int hp_factor = GetClassHPFactor(); @@ -1376,17 +1368,6 @@ bool Bot::DeleteBot() std::string error_message; - if (!database.botdb.RemoveMemberFromBotGroup(GetBotID())) { - bot_owner->Message( - Chat::White, - fmt::format( - "Failed to remove {} from their bot-group.", - GetCleanName() - ).c_str() - ); - return false; - } - if (!database.botdb.DeleteItems(GetBotID())) { bot_owner->Message( Chat::White, @@ -1514,7 +1495,7 @@ bool Bot::LoadPet() } MakePet(pet_spell_id, spells[pet_spell_id].teleport_zone, pet_name.c_str()); - if (!GetPet() || !GetPet()->IsNPC()) { + if (!GetPet()->IsNPC()) { DeletePet(); return false; } @@ -1947,6 +1928,11 @@ void Bot::AI_Process() #define NOT_PASSIVE (GetBotStance() != EQ::constants::stancePassive) Client* bot_owner = (GetBotOwner() && GetBotOwner()->IsClient() ? GetBotOwner()->CastToClient() : nullptr); + + if (!bot_owner) { + return; + } + auto raid = entity_list.GetRaidByBotName(GetName()); uint32 r_group = RAID_GROUPLESS; if (raid) { @@ -2421,6 +2407,10 @@ bool Bot::TrySecondaryWeaponAttacks(Mob* tar, const EQ::ItemInstance* s_item) { s_itemdata = s_item->GetItem(); } + if (!s_itemdata) { + return false; + } + bool use_fist = true; if (s_itemdata) { use_fist = false; @@ -2440,10 +2430,10 @@ bool Bot::TrySecondaryWeaponAttacks(Mob* tar, const EQ::ItemInstance* s_item) { if (random < DualWieldProbability) { // Max 78% for DW chance Attack(tar, EQ::invslot::slotSecondary); // Single attack with offhand - if (!GetTarget() || GetAppearance() == eaDead) { return false; } + if (GetAppearance() == eaDead) { return false; } TryCombatProcs(s_item, tar, EQ::invslot::slotSecondary); - if (!GetTarget() || GetAppearance() == eaDead) { return false; } + if (GetAppearance() == eaDead) { return false; } if (CanThisClassDoubleAttack() && CheckBotDoubleAttack() && tar->GetHP() > -10) { Attack(tar, EQ::invslot::slotSecondary); // Single attack with offhand } @@ -2461,33 +2451,33 @@ bool Bot::TryPrimaryWeaponAttacks(Mob* tar, const EQ::ItemInstance* p_item) { Attack(tar, EQ::invslot::slotPrimary); - if (!GetTarget() || GetAppearance() == eaDead) { return false; } + if (GetAppearance() == eaDead) { return false; } TriggerDefensiveProcs(tar, EQ::invslot::slotPrimary, false); - if (!GetTarget() || GetAppearance() == eaDead) { return false; } + if (GetAppearance() == eaDead) { return false; } TryCombatProcs(p_item, tar, EQ::invslot::slotPrimary); - if (!GetTarget() || GetAppearance() == eaDead) { return false; } + if (GetAppearance() == eaDead) { return false; } if (CanThisClassDoubleAttack()) { if (CheckBotDoubleAttack()) { Attack(tar, EQ::invslot::slotPrimary, true); } - if (!GetTarget() || GetAppearance() == eaDead) { return false; } + if (GetAppearance() == eaDead) { return false; } if (GetSpecialAbility(SPECATK_TRIPLE) && CheckBotDoubleAttack(true)) { Attack(tar, EQ::invslot::slotPrimary, true); } - if (!GetTarget() || GetAppearance() == eaDead) { return false; } + if (GetAppearance() == eaDead) { return false; } // quad attack, does this belong here?? if (GetSpecialAbility(SPECATK_QUAD) && CheckBotDoubleAttack(true)) { Attack(tar, EQ::invslot::slotPrimary, true); } } - if (!GetTarget() || GetAppearance() == eaDead) { return false; } + if (GetAppearance() == eaDead) { return false; } // Live AA - Flurry, Rapid Strikes ect (Flurry does not require Triple Attack). if (int32 flurrychance = (aabonuses.FlurryChance + spellbonuses.FlurryChance + itembonuses.FlurryChance)) { @@ -2496,12 +2486,12 @@ bool Bot::TryPrimaryWeaponAttacks(Mob* tar, const EQ::ItemInstance* p_item) { MessageString(Chat::NPCFlurry, YOU_FLURRY); Attack(tar, EQ::invslot::slotPrimary, false); - if (!GetTarget() || GetAppearance() == eaDead) { return false; } + if (GetAppearance() == eaDead) { return false; } Attack(tar, EQ::invslot::slotPrimary, false); } } - if (!GetTarget() || GetAppearance() == eaDead) { return false; } + if (GetAppearance() == eaDead) { return false; } auto ExtraAttackChanceBonus = (spellbonuses.ExtraAttackChance[0] + itembonuses.ExtraAttackChance[0] + aabonuses.ExtraAttackChance[0]); @@ -2735,18 +2725,15 @@ void Bot::CalcMeleeDistances(const Mob* tar, const EQ::ItemInstance* const& p_it bool Bot::IsValidTarget(Client* bot_owner, Client* leash_owner, float lo_distance, float leash_distance, bool bo_alt_combat, Mob* tar, float tar_distance) { - if (HOLDING || - !tar->IsNPC() || - tar->IsMezzed() || - lo_distance > leash_distance || - tar_distance > leash_distance || - (!GetAttackingFlag() && !CheckLosFN(tar) && !leash_owner->CheckLosFN(tar)) || // This is suppose to keep bots from attacking things behind walls - !IsAttackAllowed(tar) || - (bo_alt_combat && - (!GetAttackingFlag() && NOT_PULLING_BOT && !leash_owner->AutoAttackEnabled() && !tar->GetHateAmount(this) && !tar->GetHateAmount(leash_owner)) - ) - ) - { + if (!tar || !bot_owner || !leash_owner) { + return false; + } + + bool valid_target_state = HOLDING || !tar->IsNPC() || tar->IsMezzed() || lo_distance > leash_distance || tar_distance > leash_distance; + bool valid_target = !GetAttackingFlag() && !CheckLosFN(tar) && !leash_owner->CheckLosFN(tar); + bool valid_bo_target = !GetAttackingFlag() && NOT_PULLING_BOT && !leash_owner->AutoAttackEnabled() && !tar->GetHateAmount(this) && !tar->GetHateAmount(leash_owner); + + if (valid_target_state || valid_target || !IsAttackAllowed(tar) || (bo_alt_combat && valid_bo_target)) { // Normally, we wouldn't want to do this without class checks..but, too many issues can arise if we let enchanter animation pets run rampant if (HasPet()) { GetPet()->RemoveFromHateList(tar); @@ -2810,12 +2797,13 @@ void Bot::AcquireBotTarget(Group* bot_group, Raid* raid, Client* leash_owner, fl Mob* assist_mob = nullptr; bool find_target = true; - if (bot_group) { - assist_mob = entity_list.GetMob(bot_group->GetMainAssistName()); - } - else if (raid) { + if (raid) { assist_mob = raid->GetRaidMainAssistOne(); } + else if (bot_group) { + assist_mob = entity_list.GetMob(bot_group->GetMainAssistName()); + } + if (assist_mob) { if (assist_mob->GetTarget()) { @@ -2947,24 +2935,10 @@ void Bot::SetBotTarget(Client* bot_owner, Raid* raid, Group* bot_group, Client* if (bo_alt_combat && m_alt_combat_hate_timer.Check(false)) { // Empty hate list - let's find some aggro - if (!IsEngaged() && NOT_HOLDING && NOT_PASSIVE && (!bot_owner->GetBotPulling() || NOT_PULLING_BOT)) { + if (bot_owner->IsEngaged() && !IsEngaged() && NOT_HOLDING && NOT_PASSIVE && (!bot_owner->GetBotPulling() || NOT_PULLING_BOT)) { SetLeashOwnerTarget(leash_owner, bot_owner, lo_distance, leash_distance); - } - - else if (bot_group) { - for (const auto& bg_member: bot_group->members) { - if (!bg_member) { - continue; - } - - auto bgm_target = bg_member->GetTarget(); - if (!bgm_target || !bgm_target->IsNPC()) { - continue; - } - SetBotGroupTarget(bot_owner, leash_owner, lo_distance, leash_distance, bg_member, bgm_target); - } } - else if (raid) { + else if (!IsEngaged() && raid) { for (const auto& raid_member : raid->members) { if (!raid_member.member) { continue; @@ -2977,6 +2951,19 @@ void Bot::SetBotTarget(Client* bot_owner, Raid* raid, Group* bot_group, Client* SetBotGroupTarget(bot_owner, leash_owner, lo_distance, leash_distance, raid_member.member, rm_target); } } + else if (!IsEngaged() && bot_group) { + for (const auto& bg_member: bot_group->members) { + if (!bg_member) { + continue; + } + + auto bgm_target = bg_member->GetTarget(); + if (!bgm_target || !bgm_target->IsNPC()) { + continue; + } + SetBotGroupTarget(bot_owner, leash_owner, lo_distance, leash_distance, bg_member, bgm_target); + } + } } } @@ -2997,7 +2984,7 @@ void Bot::HealRotationChecks() { bool Bot::IsAIProcessValid(const Client* bot_owner, const Group* bot_group, const Raid* raid) { - if (!bot_owner || !bot_group && !raid || !IsAIControlled()) { + if (!bot_owner || (!bot_group && !raid) || !IsAIControlled()) { return false; } @@ -3156,8 +3143,7 @@ void Bot::SetOwnerTarget(Client* bot_owner) { AddToHateList(attack_target, 1); SetTarget(attack_target); SetAttackingFlag(); - if (HasPet() && (GetClass() != ENCHANTER || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) { - + if (GetPet() && (GetClass() != ENCHANTER || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) { GetPet()->WipeHateList(); GetPet()->AddToHateList(attack_target, 1); GetPet()->SetTarget(attack_target); @@ -3314,15 +3300,17 @@ bool Bot::Spawn(Client* botCharacterOwner) { } } - Raid* raid = nullptr; - Group* group = nullptr; - - if (raid = entity_list.GetRaidByBotName(GetName())) { - raid->VerifyRaid(); - SetRaidGrouped(true); + if (auto raid = entity_list.GetRaidByBotName(GetName())) { + // Safety Check to confirm we have a valid raid + if (raid->IsRaidMember(GetBotOwner()->CastToClient())) { + Bot::RemoveBotFromRaid(this); + } else { + raid->LearnMembers(); + SetRaidGrouped(true); + } } - else if (group = entity_list.GetGroupByMobName(GetName())) { - group->VerifyGroup(); + else if (auto group = entity_list.GetGroupByMobName(GetName())) { + group->LearnMembers(); SetGrouped(true); } @@ -3497,92 +3485,71 @@ Bot* Bot::LoadBot(uint32 botID) // Load and spawn all zoned bots by bot owner character void Bot::LoadAndSpawnAllZonedBots(Client* bot_owner) { - if (bot_owner) { - std::list> auto_spawn_botgroups; - if (bot_owner->HasGroup()) { - std::vector bot_class_spawn_limits; - std::vector bot_class_spawned_count = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + if (bot_owner && bot_owner->HasGroup()) { + std::vector bot_class_spawn_limits; + std::vector bot_class_spawned_count = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - for (uint8 class_id = WARRIOR; class_id <= BERSERKER; class_id++) { - auto bot_class_limit = bot_owner->GetBotSpawnLimit(class_id); - bot_class_spawn_limits.push_back(bot_class_limit); - } + for (uint8 class_id = WARRIOR; class_id <= BERSERKER; class_id++) { + auto bot_class_limit = bot_owner->GetBotSpawnLimit(class_id); + bot_class_spawn_limits.push_back(bot_class_limit); + } - auto* g = bot_owner->GetGroup(); - if (g) { - uint32 group_id = g->GetID(); - std::list active_bots; + auto* g = bot_owner->GetGroup(); + if (g) { + uint32 group_id = g->GetID(); + std::list active_bots; - auto spawned_bots_count = 0; - auto bot_spawn_limit = bot_owner->GetBotSpawnLimit(); + auto spawned_bots_count = 0; + auto bot_spawn_limit = bot_owner->GetBotSpawnLimit(); - if (!database.botdb.LoadAutoSpawnBotGroupsByOwnerID(bot_owner->CharacterID(), auto_spawn_botgroups)) { - bot_owner->Message(Chat::White, "Failed to load auto spawn bot groups by group ID."); - return; - } - - for (const auto& botgroup : auto_spawn_botgroups) { - Bot::SpawnBotGroupByName(bot_owner, botgroup.second, botgroup.first); - } - - if (!database.botdb.LoadGroupedBotsByGroupID(bot_owner->CharacterID(), group_id, active_bots)) { - bot_owner->Message(Chat::White, "Failed to load grouped bots by group ID."); - return; - } - - if (!active_bots.empty()) { - for (const auto& bot_id : active_bots) { - auto* b = Bot::LoadBot(bot_id); - if (!b) { - continue; - } - - if (bot_spawn_limit >= 0 && spawned_bots_count >= bot_spawn_limit) { - database.SetGroupID(b->GetCleanName(), 0, b->GetBotID()); - g->UpdatePlayer(bot_owner); - continue; - } - - auto spawned_bot_count_class = bot_class_spawned_count[b->GetClass() - 1]; - - if ( - auto bot_spawn_limit_class = bot_class_spawn_limits[b->GetClass() - 1]; - bot_spawn_limit_class >= 0 && - spawned_bot_count_class >= bot_spawn_limit_class - ) { - database.SetGroupID(b->GetCleanName(), 0, b->GetBotID()); - g->UpdatePlayer(bot_owner); - continue; - } - - if (!b->Spawn(bot_owner)) { - safe_delete(b); - continue; - } - - spawned_bots_count++; - bot_class_spawned_count[b->GetClass() - 1]++; - - g->UpdatePlayer(b); - - if (g->IsGroupMember(bot_owner) && g->IsGroupMember(b)) { - b->SetFollowID(bot_owner->GetID()); - } - - if (!bot_owner->HasGroup()) { - database.SetGroupID(b->GetCleanName(), 0, b->GetBotID()); - } - } - } - } - } else { - if (!database.botdb.LoadAutoSpawnBotGroupsByOwnerID(bot_owner->CharacterID(), auto_spawn_botgroups)) { - bot_owner->Message(Chat::White, "Failed to load auto spawn bot groups by group ID."); + if (!database.botdb.LoadGroupedBotsByGroupID(bot_owner->CharacterID(), group_id, active_bots)) { + bot_owner->Message(Chat::White, "Failed to load grouped bots by group ID."); return; } - for (const auto& botgroup : auto_spawn_botgroups) { - Bot::SpawnBotGroupByName(bot_owner, botgroup.second, botgroup.first); + if (!active_bots.empty()) { + for (const auto& bot_id : active_bots) { + auto* b = Bot::LoadBot(bot_id); + if (!b) { + continue; + } + + if (bot_spawn_limit >= 0 && spawned_bots_count >= bot_spawn_limit) { + database.SetGroupID(b->GetCleanName(), 0, b->GetBotID()); + g->UpdatePlayer(bot_owner); + continue; + } + + auto spawned_bot_count_class = bot_class_spawned_count[b->GetClass() - 1]; + + if ( + auto bot_spawn_limit_class = bot_class_spawn_limits[b->GetClass() - 1]; + bot_spawn_limit_class >= 0 && + spawned_bot_count_class >= bot_spawn_limit_class + ) { + database.SetGroupID(b->GetCleanName(), 0, b->GetBotID()); + g->UpdatePlayer(bot_owner); + continue; + } + + if (!b->Spawn(bot_owner)) { + safe_delete(b); + continue; + } + + spawned_bots_count++; + bot_class_spawned_count[b->GetClass() - 1]++; + + g->UpdatePlayer(b); + + if (g->IsGroupMember(bot_owner) && g->IsGroupMember(b)) { + b->SetFollowID(bot_owner->GetID()); + } + + if (!bot_owner->HasGroup()) { + database.SetGroupID(b->GetCleanName(), 0, b->GetBotID()); + } + } } } } @@ -3638,19 +3605,6 @@ void Bot::LevelBotWithClient(Client* client, uint8 level, bool sendlvlapp) { } } -void Bot::SendBotArcheryWearChange(uint8 material_slot, uint32 material, uint32 color) { - auto outapp = new EQApplicationPacket(OP_WearChange, sizeof(WearChange_Struct)); - auto wc = (WearChange_Struct*)outapp->pBuffer; - - wc->spawn_id = GetID(); - wc->material = material; - wc->color.Color = color; - wc->wear_slot_id = material_slot; - - entity_list.QueueClients(this, outapp); - safe_delete(outapp); -} - // Returns the item id that is in the bot inventory collection for the specified slot. EQ::ItemInstance* Bot::GetBotItem(uint16 slot_id) { EQ::ItemInstance* item = m_inv.GetItem(slot_id); @@ -3702,6 +3656,10 @@ void Bot::BotRemoveEquipItem(uint16 slot_id) void Bot::BotTradeAddItem(const EQ::ItemInstance* inst, uint16 slot_id, std::string* error_message, bool save_to_database) { + if (!inst) { + return; + } + if (save_to_database) { if (!database.botdb.SaveItemBySlot(this, slot_id, inst)) { *error_message = BotDatabase::fail::SaveItemBySlot(); @@ -3840,6 +3798,7 @@ bool Bot::RemoveBotFromGroup(Bot* bot, Group* group) { if (!group->IsLeader(bot)) { bot->SetFollowID(0); if (group->DelMember(bot)) { + group->DelMemberOOZ(bot->GetName()); database.SetGroupID(bot->GetCleanName(), 0, bot->GetBotID()); if (group->GroupCount() < 1) { group->DisbandGroup(); @@ -3862,8 +3821,12 @@ bool Bot::RemoveBotFromGroup(Bot* bot, Group* group) { } bool Bot::AddBotToGroup(Bot* bot, Group* group) { - bool Result = false; - if (bot && group && group->AddMember(bot)) { + bool result = false; + if (!group || group->GroupCount() >= MAX_GROUP_MEMBERS) { + return result; + } + + if (bot && group->AddMember(bot)) { if (group->GetLeader()) { bot->SetFollowID(group->GetLeader()->GetID()); // Need to send this only once when a group is formed with a bot so the client knows it is also the group leader @@ -3874,9 +3837,10 @@ bool Bot::AddBotToGroup(Bot* bot, Group* group) { } } group->VerifyGroup(); - Result = true; + group->SendGroupJoinOOZ(bot); + result = true; } - return Result; + return result; } // Completes a trade with a client bot owner @@ -4432,6 +4396,10 @@ void Bot::PerformTradeWithClient(int16 begin_slot_id, int16 end_slot_id, Client* for (auto& trade_iterator : client_trade) { // TODO: code for stackables + if (!trade_iterator.trade_item_instance) { + continue; + } + if (!database.botdb.SaveItemBySlot(this, trade_iterator.to_bot_slot, trade_iterator.trade_item_instance)) { OwnerMessage( fmt::format( @@ -4559,59 +4527,70 @@ bool Bot::Death(Mob *killerMob, int64 damage, uint16 spell_id, EQ::skills::Skill give_exp_client = give_exp->CastToClient(); bool IsLdonTreasure = (GetClass() == LDON_TREASURE); - if (entity_list.GetCorpseByID(GetID())) - entity_list.GetCorpseByID(GetID())->Depop(); + const auto c = entity_list.GetCorpseByID(GetID()); + if (c) { + c->Depop(); + } - Group *g = GetGroup(); - if (g) { - for (int i = 0; i < MAX_GROUP_MEMBERS; i++) { - if (g->members[i]) { - if (g->members[i] == this) { - // If the leader dies, make the next bot the leader - // and reset all bots followid - if (g->IsLeader(g->members[i])) { - if (g->members[i + 1]) { - g->SetLeader(g->members[i + 1]); - g->members[i + 1]->SetFollowID(g->members[i]->GetFollowID()); - for (int j = 0; j < MAX_GROUP_MEMBERS; j++) { - if (g->members[j] && (g->members[j] != g->members[i + 1])) - g->members[j]->SetFollowID(g->members[i + 1]->GetID()); + if (HasRaid()) { + if (auto raid = entity_list.GetRaidByBotName(GetName()); raid) { + for (auto& m: raid->members) { + if (strcmp(m.member_name, GetName()) == 0) { + m.member = nullptr; + } + } + } + } + else if (HasGroup()) { + if (auto g = GetGroup()) { + for (int i = 0; i < MAX_GROUP_MEMBERS; i++) { + if (g->members[i]) { + if (g->members[i] == this) { + // If the leader dies, make the next bot the leader + // and reset all bots followid + if (g->IsLeader(g->members[i])) { + if (g->members[i + 1]) { + g->SetLeader(g->members[i + 1]); + g->members[i + 1]->SetFollowID(g->members[i]->GetFollowID()); + for (int j = 0; j < MAX_GROUP_MEMBERS; j++) { + if (g->members[j] && (g->members[j] != g->members[i + 1])) + g->members[j]->SetFollowID(g->members[i + 1]->GetID()); + } } } - } - // delete from group data - RemoveBotFromGroup(this, g); - //Make sure group still exists if it doesnt they were already updated in RemoveBotFromGroup - g = GetGroup(); - if (!g) - break; + // delete from group data + RemoveBotFromGroup(this, g); + //Make sure group still exists if it doesnt they were already updated in RemoveBotFromGroup + g = GetGroup(); + if (!g) + break; - // if group members exist below this one, move - // them all up one slot in the group list - int j = (i + 1); - for (; j < MAX_GROUP_MEMBERS; j++) { - if (g->members[j]) { - g->members[j-1] = g->members[j]; - strcpy(g->membername[j-1], g->members[j]->GetCleanName()); - g->membername[j][0] = '\0'; - memset(g->membername[j], 0, 64); - g->members[j] = nullptr; + // if group members exist below this one, move + // them all up one slot in the group list + int j = (i + 1); + for (; j < MAX_GROUP_MEMBERS; j++) { + if (g->members[j]) { + g->members[j - 1] = g->members[j]; + strcpy(g->membername[j - 1], g->members[j]->GetCleanName()); + g->membername[j][0] = '\0'; + memset(g->membername[j], 0, 64); + g->members[j] = nullptr; + } } - } - // update the client group - EQApplicationPacket* outapp = new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupJoin_Struct)); - GroupJoin_Struct* gu = (GroupJoin_Struct*)outapp->pBuffer; - gu->action = groupActLeave; - strcpy(gu->membername, GetCleanName()); - if (g) { + // update the client group + EQApplicationPacket* outapp = new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupJoin_Struct)); + GroupJoin_Struct* gu = (GroupJoin_Struct*) outapp->pBuffer; + gu->action = groupActLeave; + strcpy(gu->membername, GetCleanName()); for (int k = 0; k < MAX_GROUP_MEMBERS; k++) { - if (g->members[k] && g->members[k]->IsClient()) + if (g->members[k] && g->members[k]->IsClient()) { g->members[k]->CastToClient()->QueuePacket(outapp); + } } + safe_delete(outapp); } - safe_delete(outapp); } } } @@ -4623,18 +4602,6 @@ bool Bot::Death(Mob *killerMob, int64 damage, uint16 spell_id, EQ::skills::Skill my_owner->CastToClient()->SetBotPulling(false); } - if (auto raid = entity_list.GetRaidByBotName(GetName()); raid) - { - - for (auto& m : raid->members) - { - if (strcmp(m.member_name, GetName()) == 0) - { - m.member = nullptr; - } - } - } - if (parse->BotHasQuestSub(EVENT_DEATH_COMPLETE)) { const auto& export_string = fmt::format( "{} {} {} {}", @@ -4653,8 +4620,13 @@ return true; } void Bot::Damage(Mob *from, int64 damage, uint16 spell_id, EQ::skills::SkillType attack_skill, bool avoidable, int8 buffslot, bool iBuffTic, eSpecialAttacks special) { - if (spell_id == 0) + if (!from) { + return; + } + + if (spell_id == 0) { spell_id = SPELL_UNKNOWN; + } //handle EVENT_ATTACK. Resets after we have not been attacked for 12 seconds if (attacked_timer.Check()) { @@ -4671,7 +4643,9 @@ void Bot::Damage(Mob *from, int64 damage, uint16 spell_id, EQ::skills::SkillType int64 healed = GetActSpellHealing(spell_id, damage); LogCombatDetail("Applying lifetap heal of [{}] to [{}]", healed, GetCleanName()); HealDamage(healed); - entity_list.FilteredMessageClose(this, true, RuleI(Range, SpellMessages), Chat::Emote, FilterSocials, "%s beams a smile at %s", GetCleanName(), from->GetCleanName() ); + if (from) { + entity_list.FilteredMessageClose(this, true, RuleI(Range, SpellMessages), Chat::Emote, FilterSocials, "%s beams a smile at %s", GetCleanName(), from->GetCleanName()); + } } CommonDamage(from, damage, spell_id, attack_skill, avoidable, buffslot, iBuffTic, special); @@ -4870,7 +4844,7 @@ int Bot::GetBaseSkillDamage(EQ::skills::SkillType skill, Mob *target) float skill_bonus = skill_level / 10.0f; float ac_bonus = 0.0f; const EQ::ItemInstance *inst = nullptr; - if (HasShieldEquiped()) + if (HasShieldEquipped()) inst = GetBotItem(EQ::invslot::slotSecondary); else if (HasTwoHanderEquipped()) inst = GetBotItem(EQ::invslot::slotPrimary); @@ -4916,7 +4890,7 @@ void Bot::DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int32 max if (botweapon->ItemType == EQ::item::ItemTypeShield) hate += botweapon->AC; - hate = (hate * (100 + GetFuriousBash(botweapon->Focus.Effect)) / 100); + hate = (hate * (100 + GetSpellFuriousBash(botweapon->Focus.Effect)) / 100); } } @@ -5092,7 +5066,7 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { } } - if (taunting && target && target->IsNPC() && taunt_time) { + if (taunting && target->IsNPC() && taunt_time) { if (GetTarget() && GetTarget()->GetHateTop() && GetTarget()->GetHateTop() != this) { BotGroupSay( this, @@ -5169,12 +5143,12 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { float HasteModifier = (GetHaste() * 0.01f); uint16 skill_to_use = -1; - int level = GetLevel(); - int reuse = (TauntReuseTime * 1000); + int bot_level = GetLevel(); + int reuse = (TauntReuseTime * 1000); // Same as Bash and Kick bool did_attack = false; switch (GetClass()) { case WARRIOR: - if (level >= RuleI(Combat, NPCBashKickLevel)) { + if (bot_level >= RuleI(Combat, NPCBashKickLevel)) { bool canBash = false; if ((GetRace() == OGRE || GetRace() == TROLL || GetRace() == BARBARIAN) || (m_inv.GetItem(EQ::invslot::slotSecondary) && m_inv.GetItem(EQ::invslot::slotSecondary)->GetItem()->ItemType == EQ::item::ItemTypeShield) || (m_inv.GetItem(EQ::invslot::slotPrimary) && m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->IsType2HWeapon() && GetAA(aa2HandBash) >= 1)) canBash = true; @@ -5194,7 +5168,7 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { case CLERIC: case SHADOWKNIGHT: case PALADIN: - if (level >= RuleI(Combat, NPCBashKickLevel)) { + if (bot_level >= RuleI(Combat, NPCBashKickLevel)) { if ((GetRace() == OGRE || GetRace() == TROLL || GetRace() == BARBARIAN) || (m_inv.GetItem(EQ::invslot::slotSecondary) && m_inv.GetItem(EQ::invslot::slotSecondary)->GetItem()->ItemType == EQ::item::ItemTypeShield) || (m_inv.GetItem(EQ::invslot::slotPrimary) && m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->IsType2HWeapon() && GetAA(aa2HandBash) >= 1)) skill_to_use = EQ::skills::SkillBash; } @@ -5222,9 +5196,6 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { break; } - if (skill_to_use == -1) - return; - int64 dmg = GetBaseSkillDamage(static_cast(skill_to_use), GetTarget()); if (skill_to_use == EQ::skills::SkillBash) { @@ -5233,7 +5204,6 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { if (GetWeaponDamage(target, GetBotItem(EQ::invslot::slotSecondary)) <= 0 && GetWeaponDamage(target, GetBotItem(EQ::invslot::slotShoulders)) <= 0) dmg = DMG_INVULNERABLE; - reuse = (BashReuseTime * 1000); DoSpecialAttackDamage(target, EQ::skills::SkillBash, dmg, 0, -1, reuse); did_attack = true; } @@ -5260,7 +5230,6 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { if (GetWeaponDamage(target, GetBotItem(EQ::invslot::slotFeet)) <= 0) dmg = DMG_INVULNERABLE; - reuse = (KickReuseTime * 1000); DoSpecialAttackDamage(target, EQ::skills::SkillKick, dmg, 0, -1, reuse); did_attack = true; } @@ -5567,7 +5536,7 @@ int32 Bot::GetActSpellDuration(uint16 spell_id, int32 duration) { increase += 20; } - if (IsMezSpell(spell_id)) + if (IsMesmerizeSpell(spell_id)) tic_inc += GetAA(aaMesmerizationMastery); return (((duration * increase) / 100) + tic_inc); @@ -5885,16 +5854,6 @@ void Bot::GenerateSpecialAttacks() { SetSpecialAbility(SPECATK_TRIPLE, 1); } -bool Bot::DoFinishedSpellAETarget(uint16 spell_id, Mob* spellTarget, EQ::spells::CastingSlot slot, bool& stopLogic) { - if (GetClass() == BARD) { - if (!ApplyBardPulse(bardsong, this, bardsong_slot)) - InterruptSpell(SONG_ENDS_ABRUPTLY, 0x121, bardsong); - - stopLogic = true; - } - return true; -} - bool Bot::DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, EQ::spells::CastingSlot slot, bool& stopLogic) { if ( @@ -6367,7 +6326,7 @@ void Bot::CalcRestState() { for (unsigned int j = 0; j < buff_count; j++) { if (IsValidSpell(buffs[j].spellid)) { if (IsDetrimentalSpell(buffs[j].spellid) && (buffs[j].ticsremaining > 0)) - if (!DetrimentalSpellAllowsRest(buffs[j].spellid)) + if (!IsRestAllowedSpell(buffs[j].spellid)) return; } } @@ -6667,8 +6626,7 @@ void Bot::Camp(bool save_to_database) { } void Bot::Zone() { - Raid* raid = entity_list.GetRaidByBotName(GetName()); - if (raid) { + if (auto raid = entity_list.GetRaidByBotName(GetName())) { raid->MemberZoned(CastToClient()); } else if (HasGroup()) { @@ -6716,8 +6674,6 @@ void Bot::UpdateGroupCastingRoles(const Group* group, bool disband) Mob* healer = nullptr; Mob* slower = nullptr; - Mob* nuker = nullptr; - Mob* doter = nullptr; for (auto iter : group->members) { if (!iter) @@ -6833,10 +6789,6 @@ void Bot::UpdateGroupCastingRoles(const Group* group, bool disband) healer->CastToBot()->SetGroupHealer(); if (slower && slower->IsBot()) slower->CastToBot()->SetGroupSlower(); - if (nuker && nuker->IsBot()) - nuker->CastToBot()->SetGroupNuker(); - if (doter && doter->IsBot()) - doter->CastToBot()->SetGroupDoter(); } Bot* Bot::GetBotByBotClientOwnerAndBotName(Client* c, const std::string& botName) { @@ -6856,10 +6808,13 @@ Bot* Bot::GetBotByBotClientOwnerAndBotName(Client* c, const std::string& botName } void Bot::ProcessBotGroupInvite(Client* c, std::string const& botName) { - if (c) { + if (c && !c->HasRaid()) { Bot* invitedBot = GetBotByBotClientOwnerAndBotName(c, botName); + if (!invitedBot) { + return; + } - if (invitedBot && !invitedBot->HasGroup() && !invitedBot->HasRaid()) { + if (!invitedBot->HasGroup() && !invitedBot->HasRaid()) { if (!c->IsGrouped()) { auto g = new Group(c); if (AddBotToGroup(invitedBot, g)) { @@ -6872,13 +6827,8 @@ void Bot::ProcessBotGroupInvite(Client* c, std::string const& botName) { delete g; } } else { - AddBotToGroup(invitedBot, c->GetGroup()); - database.SetGroupID(invitedBot->GetCleanName(), c->GetGroup()->GetID(), invitedBot->GetBotID()); - } - if (c->HasRaid() && c->HasGroup()) { - Raid* raid = entity_list.GetRaidByClient(c); - if (raid) { - raid->AddBot(invitedBot, raid->GetGroup(c), false, false, false); + if (AddBotToGroup(invitedBot, c->GetGroup())) { + database.SetGroupID(invitedBot->GetCleanName(), c->GetGroup()->GetID(), invitedBot->GetBotID()); } } } else if (invitedBot->HasGroup()) { @@ -6932,7 +6882,7 @@ void Bot::ProcessClientZoneChange(Client* botOwner) { else if (tempBot->HasGroup()) { Group* g = tempBot->GetGroup(); if (g && g->IsGroupMember(botOwner)) { - if (botOwner && botOwner->IsClient()) { + if (botOwner->IsClient()) { // Modified to not only zone bots if you're the leader. // Also zone bots of the non-leader when they change zone. if (tempBot->GetBotOwnerCharacterID() == botOwner->CharacterID() && g->IsGroupMember(botOwner)) @@ -7106,46 +7056,13 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl uint8 botCasterClass = caster->GetClass(); if (iSpellTypes == SpellType_Heal) { - if ( botCasterClass == CLERIC || botCasterClass == DRUID || botCasterClass == SHAMAN) { - if (caster->HasGroup()) { - Group *g = caster->GetGroup(); - if (g) { - for (int i = 0; i < MAX_GROUP_MEMBERS; i++) { - if (g->members[i] && !g->members[i]->qglobal) { - if (g->members[i]->IsClient() && g->members[i]->GetHPRatio() < 90) { - if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) - return true; - } else if ((g->members[i]->GetClass() == WARRIOR || g->members[i]->GetClass() == PALADIN || g->members[i]->GetClass() == SHADOWKNIGHT) && g->members[i]->GetHPRatio() < 95) { - if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) - return true; - } else if (g->members[i]->GetClass() == ENCHANTER && g->members[i]->GetHPRatio() < 80) { - if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) - return true; - } else if (g->members[i]->GetHPRatio() < 70) { - if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) - return true; - } - } - - if (g->members[i] && !g->members[i]->qglobal && g->members[i]->HasPet() && g->members[i]->GetPet()->GetHPRatio() < 50) { - if (g->members[i]->GetPet()->GetOwner() != caster && caster->IsEngaged() && g->members[i]->IsCasting() && g->members[i]->GetClass() != ENCHANTER ) - continue; - - if (caster->AICastSpell(g->members[i]->GetPet(), 100, SpellType_Heal)) - return true; - } - } - } - } - else if (caster->IsRaidGrouped()) - { - //added raid check + if (botCasterClass == CLERIC || botCasterClass == DRUID || botCasterClass == SHAMAN) { + if (caster->IsRaidGrouped()) { Raid* raid = entity_list.GetRaidByBotName(caster->GetName()); uint32 gid = raid->GetGroup(caster->GetName()); if (gid < MAX_RAID_GROUPS) { std::vector raid_group_members = raid->GetRaidGroupMembers(gid); for (std::vector::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) { - //for (auto& iter : raid->GetRaidGroupMembers(g)) { if (iter->member && !iter->member->qglobal) { if (iter->member->IsClient() && iter->member->GetHPRatio() < 90) { if (caster->AICastSpell(iter->member, 100, SpellType_Heal)) @@ -7176,6 +7093,37 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl } } } + + else if (caster->HasGroup()) { + Group *g = caster->GetGroup(); + if (g) { + for (int i = 0; i < MAX_GROUP_MEMBERS; i++) { + if (g->members[i] && !g->members[i]->qglobal) { + if (g->members[i]->IsClient() && g->members[i]->GetHPRatio() < 90) { + if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) + return true; + } else if ((g->members[i]->GetClass() == WARRIOR || g->members[i]->GetClass() == PALADIN || g->members[i]->GetClass() == SHADOWKNIGHT) && g->members[i]->GetHPRatio() < 95) { + if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) + return true; + } else if (g->members[i]->GetClass() == ENCHANTER && g->members[i]->GetHPRatio() < 80) { + if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) + return true; + } else if (g->members[i]->GetHPRatio() < 70) { + if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) + return true; + } + } + + if (g->members[i] && !g->members[i]->qglobal && g->members[i]->HasPet() && g->members[i]->GetPet()->GetHPRatio() < 50) { + if (g->members[i]->GetPet()->GetOwner() != caster && caster->IsEngaged() && g->members[i]->IsCasting() && g->members[i]->GetClass() != ENCHANTER ) + continue; + + if (caster->AICastSpell(g->members[i]->GetPet(), 100, SpellType_Heal)) + return true; + } + } + } + } } if ((botCasterClass == PALADIN || botCasterClass == BEASTLORD || botCasterClass == RANGER) && (caster->HasGroup() || caster->IsRaidGrouped())) { @@ -7195,70 +7143,77 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl hpRatioToHeal = 25.0f; break; } - Group* g = caster->GetGroup(); - uint32 gid = RAID_GROUPLESS; - Raid* raid = entity_list.GetRaidByBotName(caster->GetName()); - if (raid) { - gid = raid->GetGroup(caster->GetName()); - } + if (caster->IsRaidGrouped()) { + if (auto raid = entity_list.GetRaidByBotName(caster->GetName())) { + uint32 gid = raid->GetGroup(caster->GetName()); + if (gid < MAX_RAID_GROUPS) { + std::vector raid_group_members = raid->GetRaidGroupMembers(gid); + for (std::vector::iterator iter = raid_group_members.begin(); + iter != raid_group_members.end(); ++iter) { + if (iter->member && !iter->member->qglobal) { + if (iter->member->IsClient() && iter->member->GetHPRatio() < hpRatioToHeal) { + if (caster->AICastSpell(iter->member, 100, SpellType_Heal)) + return true; + } else if ( + (iter->member->GetClass() == WARRIOR || iter->member->GetClass() == PALADIN || + iter->member->GetClass() == SHADOWKNIGHT) && + iter->member->GetHPRatio() < hpRatioToHeal) { + if (caster->AICastSpell(iter->member, 100, SpellType_Heal)) + return true; + } else if (iter->member->GetClass() == ENCHANTER && + iter->member->GetHPRatio() < hpRatioToHeal) { + if (caster->AICastSpell(iter->member, 100, SpellType_Heal)) + return true; + } else if (iter->member->GetHPRatio() < hpRatioToHeal / 2) { + if (caster->AICastSpell(iter->member, 100, SpellType_Heal)) + return true; + } + } - if (g) { - for (int i = 0; i < MAX_GROUP_MEMBERS; i++) { - if (g->members[i] && !g->members[i]->qglobal) { - if (g->members[i]->IsClient() && g->members[i]->GetHPRatio() < hpRatioToHeal) { - if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) - return true; - } else if ((g->members[i]->GetClass() == WARRIOR || g->members[i]->GetClass() == PALADIN || g->members[i]->GetClass() == SHADOWKNIGHT) && g->members[i]->GetHPRatio() < hpRatioToHeal) { - if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) - return true; - } else if (g->members[i]->GetClass() == ENCHANTER && g->members[i]->GetHPRatio() < hpRatioToHeal) { - if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) - return true; - } else if (g->members[i]->GetHPRatio() < hpRatioToHeal/2) { - if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) - return true; + if (iter->member && !iter->member->qglobal && iter->member->HasPet() && + iter->member->GetPet()->GetHPRatio() < 25) { + if (iter->member->GetPet()->GetOwner() != caster && caster->IsEngaged() && + iter->member->IsCasting() && iter->member->GetClass() != ENCHANTER) + continue; + + if (caster->AICastSpell(iter->member->GetPet(), 100, SpellType_Heal)) + return true; + } } } - - if (g->members[i] && !g->members[i]->qglobal && g->members[i]->HasPet() && g->members[i]->GetPet()->GetHPRatio() < 25) { - if (g->members[i]->GetPet()->GetOwner() != caster && caster->IsEngaged() && g->members[i]->IsCasting() && g->members[i]->GetClass() != ENCHANTER ) - continue; - - if (caster->AICastSpell(g->members[i]->GetPet(), 100, SpellType_Heal)) - return true; - } } } - else if (gid < MAX_RAID_GROUPS) - { - std::vector raid_group_members = raid->GetRaidGroupMembers(gid); - for (std::vector::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) { - //for (auto& iter : raid->GetRaidGroupMembers(gid)) { - if (iter->member && !iter->member->qglobal) { - if (iter->member->IsClient() && iter->member->GetHPRatio() < hpRatioToHeal) { - if (caster->AICastSpell(iter->member, 100, SpellType_Heal)) - return true; + else if (caster->HasGroup()) { + if (auto g = caster->GetGroup()) { + for (int i = 0; i < MAX_GROUP_MEMBERS; i++) { + if (g->members[i] && !g->members[i]->qglobal) { + if (g->members[i]->IsClient() && g->members[i]->GetHPRatio() < hpRatioToHeal) { + if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) + return true; + } else if ((g->members[i]->GetClass() == WARRIOR || g->members[i]->GetClass() == PALADIN || + g->members[i]->GetClass() == SHADOWKNIGHT) && + g->members[i]->GetHPRatio() < hpRatioToHeal) { + if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) + return true; + } else if (g->members[i]->GetClass() == ENCHANTER && + g->members[i]->GetHPRatio() < hpRatioToHeal) { + if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) + return true; + } else if (g->members[i]->GetHPRatio() < hpRatioToHeal / 2) { + if (caster->AICastSpell(g->members[i], 100, SpellType_Heal)) + return true; + } } - else if ((iter->member->GetClass() == WARRIOR || iter->member->GetClass() == PALADIN || iter->member->GetClass() == SHADOWKNIGHT) && iter->member->GetHPRatio() < hpRatioToHeal) { - if (caster->AICastSpell(iter->member, 100, SpellType_Heal)) - return true; - } - else if (iter->member->GetClass() == ENCHANTER && iter->member->GetHPRatio() < hpRatioToHeal) { - if (caster->AICastSpell(iter->member, 100, SpellType_Heal)) - return true; - } - else if (iter->member->GetHPRatio() < hpRatioToHeal / 2) { - if (caster->AICastSpell(iter->member, 100, SpellType_Heal)) - return true; - } - } - if (iter->member && !iter->member->qglobal && iter->member->HasPet() && iter->member->GetPet()->GetHPRatio() < 25) { - if (iter->member->GetPet()->GetOwner() != caster && caster->IsEngaged() && iter->member->IsCasting() && iter->member->GetClass() != ENCHANTER) - continue; + if (g->members[i] && !g->members[i]->qglobal && g->members[i]->HasPet() && + g->members[i]->GetPet()->GetHPRatio() < 25) { + if (g->members[i]->GetPet()->GetOwner() != caster && caster->IsEngaged() && + g->members[i]->IsCasting() && g->members[i]->GetClass() != ENCHANTER) + continue; - if (caster->AICastSpell(iter->member->GetPet(), 100, SpellType_Heal)) - return true; + if (caster->AICastSpell(g->members[i]->GetPet(), 100, SpellType_Heal)) + return true; + } } } } @@ -7300,8 +7255,29 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl } } - if ( iSpellTypes == SpellType_Cure) { - if (caster->HasGroup()) { + if (iSpellTypes == SpellType_Cure) { + if (caster->IsRaidGrouped()) { + Raid* raid = entity_list.GetRaidByBotName(caster->GetName()); + uint32 gid = raid->GetGroup(caster->GetName()); + if (gid < MAX_RAID_GROUPS) { + std::vector raid_group_members = raid->GetRaidGroupMembers(gid); + for (std::vector::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) { + if (iter->member && caster->GetNeedsCured(iter->member)) { + if (caster->AICastSpell(iter->member, caster->GetChanceToCastBySpellType(SpellType_Cure), SpellType_Cure)) + return true; + else if (botCasterClass == BARD) { + return false; + } + } + + if (iter->member && iter->member->GetPet() && caster->GetNeedsCured(iter->member->GetPet())) { + if (caster->AICastSpell(iter->member->GetPet(), (int)caster->GetChanceToCastBySpellType(SpellType_Cure) / 4, SpellType_Cure)) + return true; + } + } + } + } + else if (caster->HasGroup()) { Group *g = caster->GetGroup(); if (g) { for (int i = 0; i < MAX_GROUP_MEMBERS; i++) { @@ -7319,46 +7295,13 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl } } } - else if (caster->IsRaidGrouped()) - { - Raid* raid = entity_list.GetRaidByBotName(caster->GetName()); - uint32 gid = raid->GetGroup(caster->GetName()); - if (gid < MAX_RAID_GROUPS) { - std::vector raid_group_members = raid->GetRaidGroupMembers(gid); - for (std::vector::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) { - if (iter->member && caster->GetNeedsCured(iter->member)) { - if (caster->AICastSpell(iter->member, caster->GetChanceToCastBySpellType(SpellType_Cure), SpellType_Cure)) - return true; - else if (botCasterClass == BARD) - return false; - } - - if (iter->member && iter->member->GetPet() && caster->GetNeedsCured(iter->member->GetPet())) { - if (caster->AICastSpell(iter->member->GetPet(), (int)caster->GetChanceToCastBySpellType(SpellType_Cure) / 4, SpellType_Cure)) - return true; - } - } - } - } } if (iSpellTypes == SpellType_HateRedux) { if (!caster->IsEngaged()) return false; - if (caster->HasGroup()) { - Group *g = caster->GetGroup(); - if (g) { - for (int i = 0; i < MAX_GROUP_MEMBERS; i++) { - if (g->members[i] && caster->GetNeedsHateRedux(g->members[i])) { - if (caster->AICastSpell(g->members[i], caster->GetChanceToCastBySpellType(SpellType_HateRedux), SpellType_HateRedux)) - return true; - } - } - } - } - else if (caster->IsRaidGrouped()) - { + if (caster->IsRaidGrouped()) { Raid* raid = entity_list.GetRaidByBotName(caster->GetName()); uint32 gid = raid->GetGroup(caster->GetName()); if (gid < MAX_RAID_GROUPS) { @@ -7371,7 +7314,17 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl } } } - + else if (caster->HasGroup()) { + Group *g = caster->GetGroup(); + if (g) { + for (int i = 0; i < MAX_GROUP_MEMBERS; i++) { + if (g->members[i] && caster->GetNeedsHateRedux(g->members[i])) { + if (caster->AICastSpell(g->members[i], caster->GetChanceToCastBySpellType(SpellType_HateRedux), SpellType_HateRedux)) + return true; + } + } + } + } } if (iSpellTypes == SpellType_PreCombatBuff) { @@ -8202,173 +8155,6 @@ std::string Bot::CreateSayLink(Client* c, const char* message, const char* name) return saylink; } -void Bot::SpawnBotGroupByName(Client* c, const std::string& botgroup_name, uint32 leader_id) -{ - auto leader = Bot::LoadBot(leader_id); - if (!leader) { - c->Message( - Chat::White, - fmt::format( - "Could not load bot-group leader for '{}'.", - botgroup_name - ).c_str() - ); - safe_delete(leader); - return; - } - - if (!leader->spawned) { - if (!leader->Spawn(c)) { - c->Message( - Chat::White, - fmt::format( - "Could not spawn bot-group leader {} for '{}'.", - leader->GetName(), - botgroup_name - ).c_str() - ); - safe_delete(leader); - return; - } - } - - auto group = leader->GetGroupByLeaderName(); - auto raid = leader->GetRaid(); - - if (!raid && group) { - group->SetLeader(leader); - } - else if (!raid) { - group = new Group(leader); - entity_list.AddGroup(group); - database.SetGroupID(leader->GetCleanName(), group->GetID(), leader->GetBotID()); - database.SetGroupLeaderName(group->GetID(), leader->GetCleanName()); - } - - leader->SetFollowID(c->GetID()); - - uint32 botgroup_id = 0; - database.botdb.LoadBotGroupIDByBotGroupName(botgroup_name, botgroup_id); - - std::map> member_list; - if (!database.botdb.LoadBotGroup(botgroup_name, member_list)) { - c->Message( - Chat::White, - fmt::format( - "Failed to load bot-group '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - if (member_list.find(botgroup_id) == member_list.end() || member_list[botgroup_id].empty()) { - c->Message( - Chat::White, - fmt::format( - "Could not locate member list for bot-group '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - member_list[botgroup_id].remove(0); - member_list[botgroup_id].remove(leader->GetBotID()); - - auto bot_spawn_limit = c->GetBotSpawnLimit(); - auto spawned_bot_count = 0; - - std::vector bot_class_spawn_limits; - std::vector bot_class_spawned_count = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - - for (uint8 class_id = WARRIOR; class_id <= BERSERKER; class_id++) { - auto bot_class_limit = c->GetBotSpawnLimit(class_id); - bot_class_spawn_limits.push_back(bot_class_limit); - } - - for (const auto& member_iter : member_list[botgroup_id]) { - auto member = Bot::LoadBot(member_iter); - if (!member) { - c->Message( - Chat::White, - fmt::format( - "Could not load bot id {}.", - member_iter - ).c_str() - ); - safe_delete(member); - return; - } - - if (bot_spawn_limit >= 0 && spawned_bot_count >= bot_spawn_limit) { - c->Message( - Chat::White, - fmt::format( - "Failed to spawn {} because you have a max of {} bot{} spawned.", - member->GetCleanName(), - bot_spawn_limit, - bot_spawn_limit != 1 ? "s" : "" - ).c_str() - ); - return; - } - - auto spawned_bot_count_class = bot_class_spawned_count[member->GetClass() - 1]; - auto bot_spawn_limit_class = bot_class_spawn_limits[member->GetClass() - 1]; - - if (bot_spawn_limit_class >= 0 && spawned_bot_count_class >= bot_spawn_limit_class) { - c->Message( - Chat::White, - fmt::format( - "Failed to spawn {} because you have a max of {} {} bot{} spawned.", - member->GetCleanName(), - bot_spawn_limit_class, - GetClassIDName(member->GetClass()), - bot_spawn_limit_class != 1 ? "s" : "" - ).c_str() - ); - continue; - } - - if (!member->spawned) { - if (!member->Spawn(c)) { - c->Message( - Chat::White, - fmt::format( - "Could not spawn bot '{}' (ID {}).", - member->GetName(), - member_iter - ).c_str() - ); - safe_delete(member); - return; - } - - spawned_bot_count++; - bot_class_spawned_count[member->GetClass() - 1]++; - - if (group) { - Bot::AddBotToGroup(member, group); - } - } - } - - if (group) { - group->VerifyGroup(); - } else if (raid) { - raid->VerifyRaid(); - } - - c->Message( - Chat::White, - fmt::format( - "Successfully loaded bot-group {}.", - botgroup_name - ).c_str() - ); -} - void Bot::Signal(int signal_id) { if (parse->BotHasQuestSub(EVENT_SIGNAL)) { @@ -8755,22 +8541,25 @@ std::vector Bot::GetApplySpellList( if (apply_type == ApplySpellType::Raid && IsRaidGrouped()) { auto* r = GetRaid(); - auto group_id = r->GetGroup(GetCleanName()); - if (r && EQ::ValueWithin(group_id, 0, (MAX_RAID_GROUPS - 1))) { - for (const auto& m : r->members) { - if (m.is_bot) { - continue; - } - if (m.member && m.member->IsClient() && (!is_raid_group_only || r->GetGroup(m.member) == group_id)) { - l.push_back(m.member); - - if (allow_pets && m.member->HasPet()) { - l.push_back(m.member->GetPet()); + if (r) { + auto group_id = r->GetGroup(GetCleanName()); + if (EQ::ValueWithin(group_id, 0, (MAX_RAID_GROUPS - 1))) { + for (const auto& m: r->members) { + if (m.is_bot) { + continue; } + if (m.member && m.member->IsClient() && + (!is_raid_group_only || r->GetGroup(m.member) == group_id)) { + l.push_back(m.member); - const auto& sbl = entity_list.GetBotListByCharacterID(m.member->CharacterID()); - for (const auto& b : sbl) { - l.push_back(b); + if (allow_pets && m.member->HasPet()) { + l.push_back(m.member->GetPet()); + } + + const auto& sbl = entity_list.GetBotListByCharacterID(m.member->CharacterID()); + for (const auto& b: sbl) { + l.push_back(b); + } } } } @@ -8944,6 +8733,12 @@ bool Bot::CheckSpawnConditions(Client* c) { return false; } + Raid* raid = entity_list.GetRaidByClient(c); + if (raid && raid->IsEngaged()) { + c->Message(Chat::White, "You cannot spawn bots while your raid is engaged."); + return false; + } + auto* owner_group = c->GetGroup(); if (owner_group) { std::list member_list; @@ -8963,12 +8758,6 @@ bool Bot::CheckSpawnConditions(Client* c) { } } - Raid* raid = entity_list.GetRaidByClient(c); - if (raid && raid->IsEngaged()) { - c->Message(Chat::White, "You cannot spawn bots while your raid is engaged."); - return false; - } - return true; } diff --git a/zone/bot.h b/zone/bot.h index e36b19461..5cd5323a9 100644 --- a/zone/bot.h +++ b/zone/bot.h @@ -196,10 +196,8 @@ public: void SetAttackTimer() override; uint64 GetClassHPFactor(); int64 CalcMaxHP() override; - bool DoFinishedSpellAETarget(uint16 spell_id, Mob* spellTarget, EQ::spells::CastingSlot slot, bool &stopLogic); bool DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, EQ::spells::CastingSlot slot, bool &stopLogic); bool DoFinishedSpellGroupTarget(uint16 spell_id, Mob* spellTarget, EQ::spells::CastingSlot slot, bool &stopLogic); - void SendBotArcheryWearChange(uint8 material_slot, uint32 material, uint32 color); void Camp(bool save_to_database = true); void SetTarget(Mob* mob) override; void Zone(); @@ -645,8 +643,6 @@ public: void SetBotEnforceSpellSetting(bool enforcespellsettings, bool save = false); bool GetBotEnforceSpellSetting() const { return m_enforce_spell_settings; } - static void SpawnBotGroupByName(Client* c, const std::string& botgroup_name, uint32 leader_id); - std::string CreateSayLink(Client* botOwner, const char* message, const char* name); // Class Destructors diff --git a/zone/bot_command.cpp b/zone/bot_command.cpp index f0c4827ce..3ccd3a702 100644 --- a/zone/bot_command.cpp +++ b/zone/bot_command.cpp @@ -34,10 +34,8 @@ #include #include -#include #include #include -#include #ifdef _WINDOWS #define strcasecmp _stricmp @@ -47,21 +45,14 @@ #include "../common/global_define.h" #include "../common/eq_packet.h" #include "../common/features.h" -#include "../common/guilds.h" -#include "../common/patches/patches.h" #include "../common/ptimer.h" #include "../common/rulesys.h" #include "../common/serverinfo.h" #include "../common/strings.h" #include "../common/say_link.h" -#include "../common/eqemu_logsys.h" -#include "../common/emu_constants.h" - #include "bot_command.h" #include "zonedb.h" -#include "../common/zone_store.h" -#include "guild_mgr.h" #include "map.h" #include "doors.h" #include "qglobals.h" @@ -1361,14 +1352,6 @@ int bot_command_init(void) bot_command_add("boteyes", "Changes the eye colors of a bot", AccountStatus::Player, bot_subcommand_bot_eyes) || bot_command_add("botface", "Changes the facial appearance of your bot", AccountStatus::Player, bot_subcommand_bot_face) || bot_command_add("botfollowdistance", "Changes the follow distance(s) of a bot(s)", AccountStatus::Player, bot_subcommand_bot_follow_distance) || - bot_command_add("botgroup", "Lists the available bot-group [subcommands]", AccountStatus::Player, bot_command_botgroup) || - bot_command_add("botgroupaddmember", "Adds a member to a bot-group", AccountStatus::Player, bot_subcommand_botgroup_add_member) || - bot_command_add("botgroupautospawn", "Toggles auto spawning for a bot-group, spawning the bot group when you zone automatically", AccountStatus::Player, bot_subcommand_botgroup_auto_spawn) || - bot_command_add("botgroupcreate", "Creates a bot-group and designates a leader", AccountStatus::Player, bot_subcommand_botgroup_create) || - bot_command_add("botgroupdelete", "Deletes a bot-group and releases its members", AccountStatus::Player, bot_subcommand_botgroup_delete) || - bot_command_add("botgrouplist", "Lists all of your existing bot-groups", AccountStatus::Player, bot_subcommand_botgroup_list) || - bot_command_add("botgroupload", "Loads all members of a bot-group", AccountStatus::Player, bot_subcommand_botgroup_load) || - bot_command_add("botgroupremovemember", "Removes a bot from its bot-group", AccountStatus::Player, bot_subcommand_botgroup_remove_member) || bot_command_add("bothaircolor", "Changes the hair color of a bot", AccountStatus::Player, bot_subcommand_bot_hair_color) || bot_command_add("bothairstyle", "Changes the hairstyle of a bot", AccountStatus::Player, bot_subcommand_bot_hairstyle) || bot_command_add("botheritage", "Changes the Drakkin heritage of a bot", AccountStatus::Player, bot_subcommand_bot_heritage) || @@ -1498,7 +1481,7 @@ int bot_command_init(void) auto bcs_iter = bot_command_settings.find(working_bcl_iter.first); if (bcs_iter == bot_command_settings.end()) { - injected_bot_command_settings.push_back(std::pair(working_bcl_iter.first, working_bcl_iter.second->access)); + injected_bot_command_settings.emplace_back(std::pair(working_bcl_iter.first, working_bcl_iter.second->access)); LogInfo( "New Bot Command [{}] found... Adding to `bot_command_settings` table with access [{}]", working_bcl_iter.first.c_str(), @@ -1911,43 +1894,6 @@ namespace MyBots sbl.remove(nullptr); } - static void PopulateSBL_ByBotGroup(Client *bot_owner, std::list &sbl, const char* name, bool clear_list = true) { - if (clear_list) - sbl.clear(); - if (!bot_owner || !name) - return; - - std::string group_name = name; - - uint32 botgroup_id = 0; - if (!database.botdb.LoadBotGroupIDForLoadBotGroup(bot_owner->CharacterID(), group_name, botgroup_id) || !botgroup_id) - return; - - std::map> botgroup_list; - if (!database.botdb.LoadBotGroup(group_name, botgroup_list) || botgroup_list.find(botgroup_id) == botgroup_list.end() || !botgroup_list[botgroup_id].size()) - return; - - std::list selectable_bot_list; - PopulateSBL_BySpawnedBots(bot_owner, selectable_bot_list); - if (selectable_bot_list.empty()) - return; - - selectable_bot_list.remove(nullptr); - for (auto group_iter : botgroup_list[botgroup_id]) { - for (auto bot_iter : selectable_bot_list) { - if (bot_iter->GetBotID() != group_iter) - continue; - - if (IsMyBot(bot_owner, bot_iter)) { - sbl.push_back(bot_iter); - break; - } - } - } - - if (!clear_list) - UniquifySBL(sbl); - } } namespace ActionableTarget @@ -2166,7 +2112,6 @@ namespace ActionableBots ABM_Target = (1 << (ABT_Target - 1)), ABM_ByName = (1 << (ABT_ByName - 1)), ABM_OwnerGroup = (1 << (ABT_OwnerGroup - 1)), - ABM_BotGroup = (1 << (ABT_BotGroup - 1)), ABM_TargetGroup = (1 << (ABT_TargetGroup - 1)), ABM_NamesGroup = (1 << (ABT_NamesGroup - 1)), ABM_HealRotation = (1 << (ABT_HealRotation - 1)), @@ -2177,8 +2122,8 @@ namespace ActionableBots ABM_Spawned_All = (3 << (ABT_Spawned - 1)), ABM_NoFilter = ~0, // grouped values - ABM_Type1 = (ABM_Target | ABM_ByName | ABM_OwnerGroup | ABM_BotGroup | ABM_TargetGroup | ABM_NamesGroup | ABM_HealRotationTargets | ABM_Spawned), - ABM_Type2 = (ABM_ByName | ABM_OwnerGroup | ABM_BotGroup | ABM_NamesGroup | ABM_HealRotation | ABM_Spawned) + ABM_Type1 = (ABM_Target | ABM_ByName | ABM_OwnerGroup | ABM_TargetGroup | ABM_NamesGroup | ABM_HealRotationTargets | ABM_Spawned), + ABM_Type2 = (ABM_ByName | ABM_OwnerGroup | ABM_NamesGroup | ABM_HealRotation | ABM_Spawned) }; // Populates 'sbl' @@ -2195,8 +2140,6 @@ namespace ActionableBots ab_type = ABT_ByName; else if (!ab_type_arg.compare("ownergroup")) ab_type = ABT_OwnerGroup; - else if (!ab_type_arg.compare("botgroup")) - ab_type = ABT_BotGroup; else if (!ab_type_arg.compare("targetgroup")) ab_type = ABT_TargetGroup; else if (!ab_type_arg.compare("namesgroup")) @@ -2228,10 +2171,6 @@ namespace ActionableBots if (ab_mask & ABM_OwnerGroup) MyBots::PopulateSBL_ByMyGroupedBots(bot_owner, sbl, clear_list); break; - case ABT_BotGroup: - if (ab_mask & ABM_BotGroup) - MyBots::PopulateSBL_ByBotGroup(bot_owner, sbl, name, clear_list); - break; case ABT_TargetGroup: if (ab_mask & ABM_TargetGroup) MyBots::PopulateSBL_ByTargetsGroupedBots(bot_owner, sbl, clear_list); @@ -2587,9 +2526,17 @@ void bot_command_apply_poison(Client *c, const Seperator *sep) } Bot *my_rogue_bot = nullptr; - if (c->GetTarget() && c->GetTarget()->IsBot() && c->GetTarget()->CastToBot()->GetBotOwnerCharacterID() == c->CharacterID() && c->GetTarget()->CastToBot()->GetClass() == ROGUE) { - my_rogue_bot = c->GetTarget()->CastToBot(); + auto t = c->GetTarget(); + + if ( + t && + t->IsBot() && + t->CastToBot()->GetBotOwnerCharacterID() == c->CharacterID() && + t->GetClass() == ROGUE + ) { + my_rogue_bot = t->CastToBot(); } + if (!my_rogue_bot) { c->Message(Chat::White, "You must target a rogue bot that you own to use this command!"); @@ -2757,7 +2704,7 @@ void bot_command_attack(Client *c, const Seperator *sep) } std::list sbl; - if (ActionableBots::PopulateSBL(c, ab_arg.c_str(), sbl, ab_mask, sep->arg[2]) == ActionableBots::ABT_None) { + if (ActionableBots::PopulateSBL(c, ab_arg, sbl, ab_mask, sep->arg[2]) == ActionableBots::ABT_None) { return; } @@ -3643,14 +3590,13 @@ void bot_command_item_use(Client* c, const Seperator* sep) return; } - std::list equipable_slot_list; + std::vector equipable_slot_list; for (int16 equipable_slot = EQ::invslot::EQUIPMENT_BEGIN; equipable_slot <= EQ::invslot::EQUIPMENT_END; ++equipable_slot) { if (item_data->Slots & (1 << equipable_slot)) { - equipable_slot_list.push_back(equipable_slot); + equipable_slot_list.emplace_back(equipable_slot); } } - std::string msg; std::string text_link; EQ::SayLinkEngine linker; @@ -3677,7 +3623,7 @@ void bot_command_item_use(Client* c, const Seperator* sep) bot_iter->GetCleanName() ); - for (auto slot_iter : equipable_slot_list) { + for (const auto& slot_iter : equipable_slot_list) { // needs more failure criteria - this should cover the bulk for now if (slot_iter == EQ::invslot::slotSecondary && item_data->Damage && !bot_iter->CanThisClassDualWield()) { continue; @@ -5185,8 +5131,6 @@ void bot_subcommand_bot_clone(Client *c, const Seperator *sep) return; } - std::string error_message; - bool available_flag = false; if (!database.botdb.QueryNameAvailablity(bot_name, available_flag)) { c->Message( @@ -5620,8 +5564,6 @@ void bot_subcommand_bot_delete(Client *c, const Seperator *sep) return; } - std::string error_message; - if (!my_bot->DeleteBot()) { c->Message(Chat::White, "Failed to delete '%s' due to database error", my_bot->GetCleanName()); return; @@ -6468,19 +6410,20 @@ void bot_subcommand_bot_report(Client *c, const Seperator *sep) std::string ab_type_arg = sep->arg[1]; if (ab_type_arg.empty()) { - if (c->GetTarget()) { - if (c->GetTarget()->IsClient() && c->GetTarget()->CastToClient() == c) + auto t = c->GetTarget(); + if (t && t->IsClient()) { + if (t->CastToClient() == c) { ab_type_arg = "ownergroup"; - else if (c->GetTarget()->IsClient() && c->GetTarget()->CastToClient() != c) + } else { ab_type_arg = "targetgroup"; - } - else { + } + } else { ab_type_arg = "spawned"; } } std::list sbl; - if (ActionableBots::PopulateSBL(c, ab_type_arg.c_str(), sbl, ab_mask, sep->arg[2]) == ActionableBots::ABT_None) + if (ActionableBots::PopulateSBL(c, ab_type_arg, sbl, ab_mask, sep->arg[2]) == ActionableBots::ABT_None) return; for (auto bot_iter : sbl) { @@ -7020,7 +6963,6 @@ void bot_subcommand_bot_toggle_helm(Client *c, const Seperator *sep) } if (ab_type == ActionableBots::ABT_All) { - std::string query; if (toggle_helm) { if (!database.botdb.ToggleAllHelmAppearances(c->CharacterID())) c->Message(Chat::White, "%s", BotDatabase::fail::ToggleAllHelmAppearances()); @@ -7157,803 +7099,6 @@ void bot_subcommand_bot_woad(Client *c, const Seperator *sep) helper_bot_appearance_form_final(c, my_bot); } -void bot_subcommand_botgroup_add_member(Client *c, const Seperator *sep) -{ - if (helper_command_alias_fail(c, "bot_subcommand_botgroup_add_member", sep->arg[0], "botgroupaddmember")) { - return; - } - - if (helper_is_help_or_usage(sep->arg[1])) { - c->Message( - Chat::White, - fmt::format( - "Usage: () {} [member_name] ([leader_name])", - sep->arg[0] - ).c_str() - ); - return; - } - - std::list sbl; - MyBots::PopulateSBL_ByNamedBot(c, sbl, sep->arg[1]); - if (sbl.empty()) { - c->Message( - Chat::White, - fmt::format( - "Usage: () {} [member_name]", - sep->arg[0] - ).c_str() - ); - return; - } - - auto new_member = sbl.front(); - if (!new_member) { - c->Message(Chat::White, "Error: New member bot dereferenced to nullptr"); - return; - } - - if (new_member->HasGroup()) { - c->Message( - Chat::White, - fmt::format( - "{} is already member of a group.", - new_member->GetCleanName() - ).c_str() - ); - return; - } - - uint32 botgroup_id = 0; - if (!database.botdb.LoadBotGroupIDByMemberID(new_member->GetBotID(), botgroup_id)) { - c->Message( - Chat::White, - fmt::format( - "Failed to load bot-group id by member ID for '{}'.", - new_member->GetCleanName() - ).c_str() - ); - return; - } - - if (botgroup_id) { - c->Message( - Chat::White, - fmt::format( - "{} is already a member of a bot-group.", - new_member->GetCleanName() - ).c_str() - ); - return; - } - - MyBots::PopulateSBL_ByNamedBot(c, sbl, sep->arg[2]); - - if (sbl.empty()) { - MyBots::PopulateSBL_ByTargetedBot(c, sbl); - } - - if (sbl.empty()) { - c->Message(Chat::White, "You must target or name a group leader as a bot that you own to use this command."); - return; - } - - auto leader = sbl.front(); - if (!leader) { - c->Message(Chat::White, "Error: Group leader bot dereferenced to nullptr."); - return; - } - - auto* g = leader->GetGroup(); - if (!g || g->GetLeader() != leader) { - c->Message( - Chat::White, - fmt::format( - "{} is not the leader of a group.", - leader->GetCleanName() - ).c_str() - ); - return; - } - - botgroup_id = 0; - if (!database.botdb.LoadBotGroupIDByLeaderID(leader->GetBotID(), botgroup_id)) { - c->Message( - Chat::White, - fmt::format( - "Failed to load bot-group ID by leader ID for '{}'.", - leader->GetCleanName() - ).c_str() - ); - return; - } - - if (!botgroup_id) { - c->Message( - Chat::White, - fmt::format( - "{} is not the leader of a bot-group.", - leader->GetCleanName() - ).c_str() - ); - return; - } - - if (!Bot::AddBotToGroup(new_member, g)) { - c->Message( - Chat::White, - fmt::format( - "Could not add {} as a new member to a group with {}.", - new_member->GetCleanName(), - leader->GetCleanName() - ).c_str() - ); - return; - } - - database.SetGroupID(new_member->GetName(), g->GetID(), new_member->GetBotID()); - - if (!database.botdb.AddMemberToBotGroup(leader->GetBotID(), new_member->GetBotID())) { - c->Message( - Chat::White, - fmt::format( - "Failed to add member to bot-group, {} could not be added to a group with {}.", - new_member->GetCleanName(), - leader->GetCleanName() - ).c_str() - ); - Bot::RemoveBotFromGroup(new_member, leader->GetGroup()); - return; - } - - std::string botgroup_name; - if (!database.botdb.LoadBotGroupNameByLeaderID(leader->GetBotID(), botgroup_name)) { - c->Message( - Chat::White, - fmt::format( - "Failed to load bot-group name by leader ID for bot ID {}.", - leader->GetBotID() - ).c_str() - ); - } - - c->Message( - Chat::White, - fmt::format( - "Successfully added {} to bot-group {}.", - new_member->GetCleanName(), - botgroup_name - ).c_str() - ); -} - -void bot_subcommand_botgroup_auto_spawn(Client *c, const Seperator *sep) -{ - if (helper_command_alias_fail(c, "bot_subcommand_botgroup_auto_spawn", sep->arg[0], "botgroupautospawn")) { - return; - } - - if (helper_is_help_or_usage(sep->arg[1])) { - c->Message( - Chat::White, - fmt::format( - "Usage: () {} ([leader_name])", - sep->arg[0] - ).c_str() - ); - return; - } - - std::list sbl; - - if (sbl.empty()) { - MyBots::PopulateSBL_ByTargetedBot(c, sbl); - } - - if (sbl.empty()) { - c->Message(Chat::White, "You must target or name a group leader as a bot that you own to use this command."); - return; - } - - auto leader = sbl.front(); - if (!leader) { - c->Message(Chat::White, "Error: Group leader bot dereferenced to nullptr."); - return; - } - - auto* g = leader->GetGroup(); - if (!g || g->GetLeader() != leader) { - c->Message( - Chat::White, - fmt::format( - "{} is not the leader of a group.", - leader->GetCleanName() - ).c_str() - ); - return; - } - - uint32 botgroup_id = 0; - if (!database.botdb.LoadBotGroupIDByLeaderID(leader->GetBotID(), botgroup_id)) { - c->Message( - Chat::White, - fmt::format( - "Failed to load bot-group ID by leader ID for '{}'.", - leader->GetCleanName() - ).c_str() - ); - return; - } - - if (!botgroup_id) { - c->Message( - Chat::White, - fmt::format( - "{} is not the leader of a bot-group.", - leader->GetCleanName() - ).c_str() - ); - return; - } - - std::string botgroup_name; - if (!database.botdb.LoadBotGroupNameByLeaderID(leader->GetBotID(), botgroup_name)) { - c->Message(Chat::White, "Failed to load bot-group name by leader ID."); - return; - } - - if (!database.botdb.ToggleBotGroupAutoSpawn(botgroup_id)) { - c->Message( - Chat::White, - fmt::format( - "Failed to toggle auto spawn for bot-group '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - bool auto_spawn = database.botdb.IsBotGroupAutoSpawn(botgroup_name); - - c->Message( - Chat::White, - fmt::format( - "Auto spawn is now {}active bot-group '{}'.", - !auto_spawn ? "in" : "", - botgroup_name - ).c_str() - ); -} - -void bot_subcommand_botgroup_create(Client *c, const Seperator *sep) -{ - if (helper_command_alias_fail(c, "bot_subcommand_botgroup_create", sep->arg[0], "botgroupcreate")) { - return; - } - - if (helper_is_help_or_usage(sep->arg[1])) { - c->Message( - Chat::White, - fmt::format( - "Usage: () {} [group_name] ([leader_name])", - sep->arg[0] - ).c_str() - ); - return; - } - - std::string botgroup_name = sep->argplus[1]; - if (botgroup_name.empty()) { - c->Message(Chat::White, "You must specify a name for this bot-group to use this command."); - return; - } - - if (database.botdb.QueryBotGroupExistence(botgroup_name)) { - c->Message( - Chat::White, - fmt::format( - "The name '{}' already exists for a bot-group. Please choose another.", - botgroup_name - ).c_str() - ); - return; - } - - std::list sbl; - MyBots::PopulateSBL_ByNamedBot(c, sbl, sep->arg[2]); - - if (sbl.empty()) { - MyBots::PopulateSBL_ByTargetedBot(c, sbl); - } - - if (sbl.empty()) { - c->Message(Chat::White, "You must target or name a group leader as a bot that you own to use this command."); - return; - } - - auto leader = sbl.front(); - if (!leader) { - c->Message(Chat::White, "Error: Group leader bot dereferenced to nullptr."); - return; - } - - if (leader->HasGroup()) { - c->Message( - Chat::White, - fmt::format( - "{} is already a current member of a group.", - leader->GetCleanName() - ).c_str() - ); - return; - } - - uint32 botgroup_id = 0; - if (!database.botdb.LoadBotGroupIDByLeaderID(leader->GetBotID(), botgroup_id)) { - c->Message( - Chat::White, - fmt::format( - "Failed to load bot-group ID by leader ID for '{}'.", - leader->GetCleanName() - ).c_str() - ); - return; - } - - if (botgroup_id) { - c->Message( - Chat::White, - fmt::format( - "{} is already the current leader of a bot-group.", - leader->GetCleanName() - ).c_str() - ); - return; - } - - botgroup_id = 0; - if (!database.botdb.LoadBotGroupIDByMemberID(leader->GetBotID(), botgroup_id)) { - c->Message( - Chat::White, - fmt::format( - "Failed to load bot-group id by member ID for '{}'.", - leader->GetCleanName() - ).c_str() - ); - return; - } - - if (botgroup_id) { - c->Message( - Chat::White, - fmt::format( - "{} is already a current member of a bot-group.", - leader->GetCleanName() - ).c_str() - ); - return; - } - - auto* g = new Group(leader); - if (!g) { - c->Message(Chat::White, "Could not create a new group instance."); - return; - } - - if (!database.botdb.CreateBotGroup(botgroup_name, leader->GetBotID())) { - c->Message( - Chat::White, - fmt::format( - "Failed to create bot-group '{}'.", - botgroup_name - ).c_str() - ); - safe_delete(g); - return; - } - - entity_list.AddGroup(g); - database.SetGroupID(leader->GetCleanName(), g->GetID(), leader->GetBotID()); - database.SetGroupLeaderName(g->GetID(), leader->GetCleanName()); - leader->SetFollowID(c->GetID()); - - c->Message( - Chat::White, - fmt::format( - "Successfully created bot-group '{}' with '{}' as its leader.", - botgroup_name, - leader->GetCleanName() - ).c_str() - ); -} - -void bot_subcommand_botgroup_delete(Client *c, const Seperator *sep) -{ - if (helper_command_alias_fail(c, "bot_subcommand_botgroup_delete", sep->arg[0], "botgroupdelete")) { - return; - } - - if (helper_is_help_or_usage(sep->arg[1])) { - c->Message(Chat::White, "usage: %s [botgroup_name]", sep->arg[0]); - return; - } - - std::string botgroup_name = sep->argplus[1]; - if (botgroup_name.empty()) { - c->Message(Chat::White, "You must specify a [name] for this bot-group to use this command"); - return; - } - - uint32 botgroup_id = 0; - if (!database.botdb.LoadBotGroupIDForLoadBotGroup(c->CharacterID(), botgroup_name, botgroup_id)) { - c->Message( - Chat::White, - fmt::format( - "Failed to load bot-group ID for load bot-group for '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - if (!botgroup_id) { - c->Message( - Chat::White, - fmt::format( - "Could not locate group ID for '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - uint32 leader_id = 0; - if (!database.botdb.LoadLeaderIDByBotGroupID(botgroup_id, leader_id)) { - c->Message( - Chat::White, - fmt::format( - "Failed to load leader ID by bot-group ID for '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - if (!leader_id) { - c->Message( - Chat::White, - fmt::format( - "Could not locate leader ID for '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - std::list gbl; - std::list sbl; - MyBots::PopulateSBL_BySpawnedBots(c, sbl); - - std::map> member_list; - if (!database.botdb.LoadBotGroup(botgroup_name, member_list)) { - c->Message( - Chat::White, - fmt::format( - "Failed to load bot-group '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - if (member_list.find(botgroup_id) == member_list.end() || member_list[botgroup_id].empty()) { - c->Message( - Chat::White, - fmt::format( - "Could not locate member list for bot-group '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - for (auto bot_iter : sbl) { - for (auto group_iter : member_list[botgroup_id]) { - if (bot_iter->GetBotID() == group_iter) { - gbl.push_back(bot_iter); - break; - } - } - } - - gbl.unique(); - - for (auto group_member : gbl) { - if (group_member->HasGroup()) { - Bot::RemoveBotFromGroup(group_member, group_member->GetGroup()); - } - } - - if (!database.botdb.DeleteBotGroup(leader_id)) { - c->Message( - Chat::White, - fmt::format( - "Failed to delete bot-group '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - c->Message( - Chat::White, - fmt::format( - "Successfully deleted bot-group '{}'.", - botgroup_name - ).c_str() - ); -} - -void bot_subcommand_botgroup_list(Client *c, const Seperator *sep) -{ - if (helper_command_alias_fail(c, "bot_subcommand_botgroup_list", sep->arg[0], "botgrouplist")) { - return; - } - - if (helper_is_help_or_usage(sep->arg[1])) { - c->Message( - Chat::White, - fmt::format( - "Usage: {}", - sep->arg[0] - ).c_str() - ); - return; - } - - std::list> botgroups_list; - if (!database.botdb.LoadBotGroupsListByOwnerID(c->CharacterID(), botgroups_list)) { - c->Message(Chat::White, "Failed to load bot-group."); - return; - } - - if (botgroups_list.empty()) { - c->Message(Chat::White, "You have no saved bot-groups."); - return; - } - - uint32 botgroup_count = 0; - - for (const auto& [group_name, group_leader_id] : botgroups_list) { - c->Message( - Chat::White, - fmt::format( - "Bot-group {} | Name: {} | Leader: {}{} | {}", - (botgroup_count + 1), - group_name, - database.botdb.GetBotNameByID(group_leader_id), - database.botdb.IsBotGroupAutoSpawn(group_name) ? " (Auto Spawn)" : "", - Saylink::Silent( - fmt::format("^botgroupload {}", group_name), - "Load" - ) - ).c_str() - ); - - botgroup_count++; - } - - c->Message( - Chat::White, - fmt::format( - "{} Bot-group{} listed.", - botgroup_count, - botgroup_count != 1 ? "s" : "" - ).c_str() - ); -} - -void bot_subcommand_botgroup_load(Client *c, const Seperator *sep) -{ - if (helper_command_alias_fail(c, "bot_subcommand_botgroup_load", sep->arg[0], "botgroupload")) { - return; - } - - if (helper_is_help_or_usage(sep->arg[1])) { - c->Message( - Chat::White, - fmt::format( - "Usage: {} [botgroup_name]", - sep->arg[0] - ).c_str() - ); - return; - } - - std::string botgroup_name = sep->argplus[1]; - if (botgroup_name.empty()) { - c->Message(Chat::White, "You must specify the name of a bot-group to load to use this command."); - return; - } - - if (!database.botdb.QueryBotGroupExistence(botgroup_name)) { - c->Message( - Chat::White, - fmt::format( - "Failed to query bot-group existence for '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - if (!Bot::CheckSpawnConditions(c)) { - return; - } - - uint32 botgroup_id = 0; - if (!database.botdb.LoadBotGroupIDForLoadBotGroup(c->CharacterID(), botgroup_name, botgroup_id) || !botgroup_id) { - c->Message( - Chat::White, - fmt::format( - "Failed to load bot-group ID for load bot-group for '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - std::map> member_list; - if (!database.botdb.LoadBotGroup(botgroup_name, member_list)) { - c->Message( - Chat::White, - fmt::format( - "Failed to load bot-group for '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - if (member_list.find(botgroup_id) == member_list.end() || member_list[botgroup_id].empty()) { - c->Message( - Chat::White, - fmt::format( - "Database returned an empty list for bot-group '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - auto spawned_bot_count = Bot::SpawnedBotCount(c->CharacterID()); - - auto bot_spawn_limit = c->GetBotSpawnLimit(); - if ( - bot_spawn_limit >= 0 && - ( - spawned_bot_count >= bot_spawn_limit || - (spawned_bot_count + member_list.begin()->second.size()) > bot_spawn_limit - ) - ) { - std::string message; - if (bot_spawn_limit) { - message = fmt::format( - "You cannot have more than {} spawned bot{}.", - bot_spawn_limit, - bot_spawn_limit != 1 ? "s" : "" - ); - } else { - message = "You are not currently allowed to spawn any bots."; - } - - c->Message(Chat::White, message.c_str()); - return; - } - - uint32 leader_id = 0; - if (!database.botdb.LoadLeaderIDByBotGroupName(botgroup_name, leader_id)) { - c->Message( - Chat::White, - fmt::format( - "Failed to load leader ID by bot-group name for '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - if (!leader_id) { - c->Message( - Chat::White, - fmt::format( - "Cannot locate bot-group leader ID for '{}'.", - botgroup_name - ).c_str() - ); - return; - } - - Bot::SpawnBotGroupByName(c, botgroup_name, leader_id); -} - -void bot_subcommand_botgroup_remove_member(Client *c, const Seperator *sep) -{ - if (helper_command_alias_fail(c, "bot_subcommand_botgroup_remove_member", sep->arg[0], "botgroupremovemember")) { - return; - } - - if (helper_is_help_or_usage(sep->arg[1])) { - c->Message( - Chat::White, - fmt::format( - "Usage: () {} ([member_name])", - sep->arg[0] - ).c_str() - ); - return; - } - - std::list sbl; - MyBots::PopulateSBL_ByNamedBot(c, sbl, sep->arg[1]); - - if (sbl.empty()) { - MyBots::PopulateSBL_ByTargetedBot(c, sbl); - } - - if (sbl.empty()) { - c->Message(Chat::White, "You must target or name a group member as a bot that you own to use this command."); - return; - } - - auto group_member = sbl.front(); - if (!group_member) { - c->Message(Chat::White, "Error: Group member bot dereferenced to nullptr."); - return; - } - - if (!group_member->HasGroup()) { - c->Message( - Chat::White, - fmt::format( - "{} is not a current member of a group.", - group_member->GetCleanName() - ).c_str() - ); - return; - } - - if (!Bot::RemoveBotFromGroup(group_member, group_member->GetGroup())) { - c->Message( - Chat::White, - fmt::format( - "Could not remove {} from their group.", - group_member->GetCleanName() - ).c_str() - ); - return; - } - - if (!database.botdb.RemoveMemberFromBotGroup(group_member->GetBotID())) { - c->Message( - Chat::White, - fmt::format( - "Could not remove {} from their bot-group.", - group_member->GetCleanName() - ).c_str() - ); - return; - } - - c->Message( - Chat::White, - fmt::format( - "Successfully removed {} from their bot-group.", - group_member->GetCleanName() - ).c_str() - ); -} - void bot_subcommand_circle(Client *c, const Seperator *sep) { bcst_list* local_list = &bot_command_spells[BCEnum::SpT_Depart]; @@ -8185,7 +7330,7 @@ void bot_subcommand_heal_rotation_adjust_critical(Client *c, const Seperator *se uint8 armor_type_value = 255; if (sep->IsNumber(1)) - armor_type_value = Strings::ToInt(armor_type_arg.c_str()); + armor_type_value = Strings::ToInt(armor_type_arg); if (armor_type_value > ARMOR_TYPE_LAST) { c->Message(Chat::White, "You must specify a valid [armor_type: %u-%u] to use this command", ARMOR_TYPE_FIRST, ARMOR_TYPE_LAST); @@ -8214,7 +7359,7 @@ void bot_subcommand_heal_rotation_adjust_critical(Client *c, const Seperator *se float critical_ratio = CRITICAL_HP_RATIO_BASE; if (sep->IsNumber(2)) - critical_ratio = Strings::ToFloat(critical_arg.c_str()); + critical_ratio = Strings::ToFloat(critical_arg); else if (!critical_arg.compare("+")) critical_ratio = (*current_member->MemberOfHealRotation())->ArmorTypeCriticalHPRatio(armor_type_value) + HP_RATIO_DELTA; else if (!critical_arg.compare("-")) @@ -8251,7 +7396,7 @@ void bot_subcommand_heal_rotation_adjust_safe(Client *c, const Seperator *sep) uint8 armor_type_value = 255; if (sep->IsNumber(1)) - armor_type_value = Strings::ToInt(armor_type_arg.c_str()); + armor_type_value = Strings::ToInt(armor_type_arg); if (armor_type_value > ARMOR_TYPE_LAST) { c->Message(Chat::White, "You must specify a valid [armor_type: %u-%u] to use this command", ARMOR_TYPE_FIRST, ARMOR_TYPE_LAST); @@ -8280,7 +7425,7 @@ void bot_subcommand_heal_rotation_adjust_safe(Client *c, const Seperator *sep) float safe_ratio = SAFE_HP_RATIO_BASE; if (sep->IsNumber(2)) - safe_ratio = Strings::ToFloat(safe_arg.c_str()); + safe_ratio = Strings::ToFloat(safe_arg); else if (!safe_arg.compare("+")) safe_ratio = (*current_member->MemberOfHealRotation())->ArmorTypeSafeHPRatio(armor_type_value) + HP_RATIO_DELTA; else if (!safe_arg.compare("-")) @@ -8394,7 +7539,7 @@ void bot_subcommand_heal_rotation_change_interval(Client *c, const Seperator *se uint32 hr_change_interval_s = CASTING_CYCLE_DEFAULT_INTERVAL_S; if (!change_interval_arg.empty()) { - hr_change_interval_s = Strings::ToInt(change_interval_arg.c_str()); + hr_change_interval_s = Strings::ToInt(change_interval_arg); } else { hr_change_interval_s = (*current_member->MemberOfHealRotation())->IntervalS(); @@ -8542,14 +7687,14 @@ void bot_subcommand_heal_rotation_create(Client *c, const Seperator *sep) hr_adaptive_targeting = true; if (!fast_heals_arg.compare("on")) hr_fast_heals = true; - hr_interval_s = Strings::ToInt(interval_arg.c_str()); + hr_interval_s = Strings::ToInt(interval_arg); } else if (!casting_override_arg.compare("off")) { if (!adaptive_targeting_arg.compare("on")) hr_adaptive_targeting = true; if (!fast_heals_arg.compare("on")) hr_fast_heals = true; - hr_interval_s = Strings::ToInt(interval_arg.c_str()); + hr_interval_s = Strings::ToInt(interval_arg); } if (hr_interval_s < CASTING_CYCLE_MINIMUM_INTERVAL_S || hr_interval_s > CASTING_CYCLE_MAXIMUM_INTERVAL_S) @@ -9867,7 +9012,7 @@ uint32 helper_bot_create(Client *bot_owner, std::string bot_name, uint8 bot_clas } - auto my_bot = new Bot(Bot::CreateDefaultNPCTypeStructForBot(bot_name.c_str(), "", bot_owner->GetLevel(), bot_race, bot_class, bot_gender), bot_owner); + auto my_bot = new Bot(Bot::CreateDefaultNPCTypeStructForBot(bot_name, "", bot_owner->GetLevel(), bot_race, bot_class, bot_gender), bot_owner); if (!my_bot->Save()) { bot_owner->Message( @@ -10117,7 +9262,7 @@ void helper_command_depart_list(Client* bot_owner, Bot* druid_bot, Bot* wizard_b destination_number, local_entry->long_name, text_link - ).c_str() + ) ); destination_count++; @@ -10152,7 +9297,7 @@ void helper_command_depart_list(Client* bot_owner, Bot* druid_bot, Bot* wizard_b destination_number, local_entry->long_name, text_link - ).c_str() + ) ); destination_count++; diff --git a/zone/bot_command.h b/zone/bot_command.h index 723597df7..312038096 100644 --- a/zone/bot_command.h +++ b/zone/bot_command.h @@ -631,13 +631,7 @@ void bot_subcommand_bot_toggle_archer(Client *c, const Seperator *sep); void bot_subcommand_bot_toggle_helm(Client *c, const Seperator *sep); void bot_subcommand_bot_update(Client *c, const Seperator *sep); void bot_subcommand_bot_woad(Client *c, const Seperator *sep); -void bot_subcommand_botgroup_add_member(Client *c, const Seperator *sep); -void bot_subcommand_botgroup_auto_spawn(Client *c, const Seperator *sep); -void bot_subcommand_botgroup_create(Client *c, const Seperator *sep); -void bot_subcommand_botgroup_delete(Client *c, const Seperator *sep); -void bot_subcommand_botgroup_list(Client *c, const Seperator *sep); -void bot_subcommand_botgroup_load(Client *c, const Seperator *sep); -void bot_subcommand_botgroup_remove_member(Client *c, const Seperator *sep); + void bot_subcommand_circle(Client *c, const Seperator *sep); void bot_subcommand_heal_rotation_adaptive_targeting(Client *c, const Seperator *sep); void bot_subcommand_heal_rotation_add_member(Client *c, const Seperator *sep); diff --git a/zone/bot_database.cpp b/zone/bot_database.cpp index 6057ce8aa..e44bca40d 100644 --- a/zone/bot_database.cpp +++ b/zone/bot_database.cpp @@ -26,7 +26,6 @@ #include "../common/repositories/bot_inventories_repository.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "bot.h" #include "client.h" @@ -1174,7 +1173,7 @@ bool BotDatabase::LoadItemSlots(const uint32 bot_id, std::map& m if (!l.empty()) { for (const auto& e : l) { - m.insert(std::pair(e.slot_id, e.item_id)); + m.emplace(std::pair(e.slot_id, e.item_id)); } } @@ -2204,523 +2203,6 @@ bool BotDatabase::SaveOwnerOption(const uint32 owner_id, const std::pair>& member_list) -{ - if (group_name.empty()) { - return false; - } - - uint32 botgroup_id = 0; - if (!LoadBotGroupIDByBotGroupName(group_name, botgroup_id)) { - return false; - } - - if (!botgroup_id) { - return true; - } - - query = fmt::format( - "SELECT `bot_id` FROM `bot_group_members` WHERE `groups_index` = {} LIMIT 6", - botgroup_id - ); - - auto results = database.QueryDatabase(query); - if (!results.Success()) { - return false; - } - - if (!results.RowCount()) { - return true; - } - - for (auto row : results) { - member_list[botgroup_id].push_back(Strings::ToUnsignedInt(row[0])); - } - - return true; -} - -bool BotDatabase::LoadBotGroupsListByOwnerID(const uint32 owner_id, std::list>& botgroups_list) -{ - if (!owner_id) { - return false; - } - - - query = fmt::format( - "SELECT DISTINCT(group_name), group_leader_id FROM " - "bot_groups bg INNER JOIN bot_group_members bgm " - "ON bg.groups_index = bgm.groups_index " - "WHERE bgm.bot_id IN " - "(SELECT bot_id FROM bot_data WHERE owner_id = {})", - owner_id - ); - - auto results = database.QueryDatabase(query); - if (!results.Success()) { - return false; - } - - if (!results.RowCount()) { - return true; - } - - for (auto row : results) { - botgroups_list.push_back(std::pair(row[0], Strings::ToUnsignedInt(row[1]))); - } - - return true; -} - -bool BotDatabase::IsBotGroupAutoSpawn(const std::string& botgroup_name) -{ - if (botgroup_name.empty()) { - return false; - } - - query = fmt::format( - "SELECT group_name FROM bot_groups WHERE group_name = '{}' AND auto_spawn = 1", - botgroup_name - ); - - auto results = database.QueryDatabase(query); - if (!results.RowCount() || !results.Success()) { - return false; - } - - return true; -} - -bool BotDatabase::ToggleBotGroupAutoSpawn(const uint32 group_id) -{ - if (!group_id) { - return false; - } - - query = fmt::format( - "UPDATE bot_groups SET auto_spawn = 1 - auto_spawn WHERE groups_index = {}", - group_id - ); - - auto results = database.QueryDatabase(query); - if (!results.Success() || !results.RowsAffected()) { - return false; - } - - return true; -} - -bool BotDatabase::LoadAutoSpawnBotGroupsByOwnerID(const uint32 owner_id, std::list>& group_list) -{ - if (!owner_id) { - return false; - } - - query = fmt::format( - SQL( - SELECT group_leader_id, group_name FROM bot_groups WHERE groups_index IN ( - SELECT groups_index FROM bot_group_members WHERE bot_id IN ( - SELECT bot_id FROM bot_data WHERE owner_id = {} - ) - ) AND auto_spawn = 1 - ), - owner_id - ); - - auto results = database.QueryDatabase(query); - if (!results.Success()) { - return false; - } - - if (!results.RowCount()) { - return true; - } - - for (auto row : results) { - group_list.push_back( - std::pair(Strings::ToUnsignedInt(row[0]), row[1]) - ); - } - - return true; -} - /* Bot owner group functions */ // added owner ID to this function to fix groups with mulitple players grouped with bots. bool BotDatabase::LoadGroupedBotsByGroupID(const uint32 owner_id, const uint32 group_id, std::list& group_list) @@ -3238,3 +2720,4 @@ const char* BotDatabase::fail::DeleteAllHealRotations() { return "Failed to dele /* fail::Bot miscellaneous functions */ const char* BotDatabase::fail::GetBotNameByID() { return "Failed to get bot name by bot ID"; } +const char* BotDatabase::fail::LoadGroupedBotsByGroupID() { return "Failed to load grouped bots by group ID."; } diff --git a/zone/bot_database.h b/zone/bot_database.h index 8107c0ed2..fa4259325 100644 --- a/zone/bot_database.h +++ b/zone/bot_database.h @@ -148,36 +148,8 @@ public: bool SaveBotCasterRange(const uint32 owner_id, const uint32 bot_id, const uint32 bot_caster_range_value); - /* Bot bot-group functions */ - bool QueryBotGroupExistence(const std::string& botgroup_name); - - bool LoadBotGroupIDByBotGroupName(const std::string& botgroup_name, uint32& botgroup_id); - bool LoadBotGroupIDByLeaderID(const uint32 leader_id, uint32& botgroup_id); - bool LoadBotGroupIDByMemberID(const uint32 member_id, uint32& botgroup_id); - - bool LoadLeaderIDByBotGroupName(const std::string& botgroup_name, uint32& leader_id); - bool LoadLeaderIDByBotGroupID(const uint32 botgroup_id, uint32& leader_id); - - bool LoadBotGroupNameByBotGroupID(const uint32 botgroup_id, std::string& botgroup_name); - bool LoadBotGroupNameByLeaderID(const uint32 leader_id, std::string& botgroup_name); - - bool CreateBotGroup(const std::string& botgroup_name, const uint32 leader_id); - bool DeleteBotGroup(const uint32 leader_id); - bool AddMemberToBotGroup(const uint32 leader_id, const uint32 member_id); - bool RemoveMemberFromBotGroup(const uint32 member_id); - - bool LoadBotGroupIDForLoadBotGroup(const uint32 owner_id, std::string_view botgroup_name, uint32& botgroup_id); - bool LoadBotGroup(const std::string& botgroup_name, std::map>& member_list); - - bool LoadBotGroupsListByOwnerID(const uint32 owner_id, std::list>& botgroups_list); - - /* Bot group functions */ - bool IsBotGroupAutoSpawn(const std::string& botgroup_name); - bool LoadAutoSpawnBotGroupsByOwnerID(const uint32 owner_id, std::list>& group_list); bool LoadGroupedBotsByGroupID(const uint32 owner_id, const uint32 group_id, std::list& group_list); - bool ToggleBotGroupAutoSpawn(const uint32 group_id); - /* Bot heal rotation functions */ bool LoadHealRotationIDByBotID(const uint32 bot_id, uint32& hr_index); @@ -254,23 +226,6 @@ public: static const char* SaveStopMeleeLevel(); static const char* SaveBotCasterRange(); - /* fail::Bot bot-group functions */ - static const char* QueryBotGroupExistence(); - static const char* LoadBotGroupIDByBotGroupName(); - static const char* LoadBotGroupIDByLeaderID(); - static const char* LoadBotGroupIDByMemberID(); - static const char* LoadLeaderIDByBotGroupName(); - static const char* LoadLeaderIDByBotGroupID(); - static const char* LoadBotGroupNameByBotGroupID(); - static const char* LoadBotGroupNameByLeaderID(); - static const char* CreateBotGroup(); - static const char* DeleteBotGroup(); - static const char* AddMemberToBotGroup(); - static const char* RemoveMemberFromBotGroup(); - static const char* LoadBotGroupIDForLoadBotGroup(); - static const char* LoadBotGroup(); - static const char* LoadBotGroupsListByOwnerID(); - /* fail::Bot group functions */ static const char* LoadGroupedBotsByGroupID(); diff --git a/zone/bot_raid.cpp b/zone/bot_raid.cpp index a0ba2c8c6..fe596d1d1 100644 --- a/zone/bot_raid.cpp +++ b/zone/bot_raid.cpp @@ -17,6 +17,8 @@ */ #include "bot.h" +#include "bot_command.h" +#include "client.h" #include "object.h" #include "raids.h" #include "doors.h" @@ -186,6 +188,10 @@ void Bot::ProcessRaidInvite(Mob* invitee, Client* invitor, bool group_invite) { Raid* raid = entity_list.GetRaidByClient(invitor); + if (raid && raid->RaidCount() >= MAX_RAID_MEMBERS) { + invitor->MessageString(Chat::Red, RAID_IS_FULL); + return; + } Bot::CreateBotRaid(invitee, invitor, group_invite, raid); } @@ -296,4 +302,30 @@ void Bot::ProcessBotGroupAdd(Group* group, Raid* raid, Client* client, bool new_ raid->GroupUpdate(raid_free_group_id); } +void Client::SpawnRaidBotsOnConnect(Raid* raid) { + std::list bots_list; + if (!database.botdb.LoadBotsList(CharacterID(), bots_list) || bots_list.empty()) { + return; + } + + std::vector r_members = raid->GetMembers(); + for (const auto& m: r_members) { + if (strlen(m.member_name) != 0) { + + for (const auto& b: bots_list) { + if (strcmp(m.member_name, b.Name) == 0) { + std::string buffer = "^spawn "; + buffer.append(m.member_name); + bot_command_real_dispatch(this, buffer.c_str()); + auto bot = entity_list.GetBotByBotName(m.member_name); + + if (bot) { + bot->SetRaidGrouped(true); + bot->p_raid_instance = raid; + } + } + } + } + } +} diff --git a/zone/botspellsai.cpp b/zone/botspellsai.cpp index f5158fe35..17fbe4321 100644 --- a/zone/botspellsai.cpp +++ b/zone/botspellsai.cpp @@ -18,7 +18,6 @@ #include "bot.h" #include "../common/data_verification.h" -#include "../common/strings.h" #include "../common/repositories/bot_spells_entries_repository.h" #include "../common/repositories/npc_spells_repository.h" @@ -84,18 +83,15 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes) { return BotCastDebuff(tar, botLevel, botSpell, checked_los); case SpellType_Cure: return BotCastCure(tar, botClass, botSpell, raid); - case SpellType_Resurrect: - return false; case SpellType_HateRedux: return BotCastHateReduction(tar, botLevel, botSpell); case SpellType_InCombatBuffSong: return BotCastCombatSong(tar, botLevel); case SpellType_OutOfCombatBuffSong: return BotCastSong(tar, botLevel); + case SpellType_Resurrect: case SpellType_PreCombatBuff: - return false; case SpellType_PreCombatBuffSong: - return false; default: return false; } @@ -114,7 +110,7 @@ bool Bot::BotCastSong(Mob* tar, uint8 botLevel) { continue; if (!CheckSpellRecastTimers(this, iter.SpellIndex)) continue; - if (!IsSpellUsableThisZoneType(iter.SpellId, zone->GetZoneType())) + if (!IsSpellUsableInThisZoneType(iter.SpellId, zone->GetZoneType())) continue; switch (spells[iter.SpellId].target_type) { case ST_AEBard: @@ -148,7 +144,7 @@ bool Bot::BotCastCombatSong(Mob* tar, uint8 botLevel) { continue; if (!CheckSpellRecastTimers(this, iter.SpellIndex)) continue; - if (!IsSpellUsableThisZoneType(iter.SpellId, zone->GetZoneType())) + if (!IsSpellUsableInThisZoneType(iter.SpellId, zone->GetZoneType())) continue; switch (spells[iter.SpellId].target_type) { case ST_AEBard: @@ -180,7 +176,7 @@ bool Bot::BotCastHateReduction(Mob* tar, uint8 botLevel, const BotSpell& botSpel continue; if (!CheckSpellRecastTimers(this, iter.SpellIndex)) continue; - if (!IsSpellUsableThisZoneType(iter.SpellId, zone->GetZoneType())) + if (!IsSpellUsableInThisZoneType(iter.SpellId, zone->GetZoneType())) continue; if (spells[iter.SpellId].target_type != ST_Target) continue; @@ -243,7 +239,7 @@ bool Bot::BotCastCure(Mob* tar, uint8 botClass, BotSpell& botSpell, Raid* raid) uint32 r_group = raid->GetGroup(GetName()); if (r_group) { std::vector raid_group_members = raid->GetRaidGroupMembers(r_group); - for (auto iter: raid_group_members) { + for (auto& iter: raid_group_members) { if ( iter.member && !iter.member->qglobal && @@ -266,7 +262,7 @@ bool Bot::BotCastDebuff(Mob* tar, uint8 botLevel, BotSpell& botSpell, bool check bool casted_spell = false; if ((tar->GetHPRatio() <= 99.0f) && (tar->GetHPRatio() > 20.0f)) { - if (!checked_los && !CheckLosFN(tar)) { + if (!checked_los && (!CheckLosFN(tar) || !CheckWaterLoS(tar))) { return casted_spell; } @@ -300,7 +296,7 @@ bool Bot::BotCastSlow(Mob* tar, uint8 botLevel, uint8 botClass, BotSpell& botSpe bool casted_spell = false; if (tar->GetHPRatio() <= 99.0f) { - if (!checked_los && !CheckLosFN(tar)) { + if (!checked_los && (!CheckLosFN(tar) || !CheckWaterLoS(tar))) { return casted_spell; } @@ -320,7 +316,7 @@ bool Bot::BotCastSlow(Mob* tar, uint8 botLevel, uint8 botClass, BotSpell& botSpe continue; } - if (!IsSpellUsableThisZoneType(iter.SpellId, zone->GetZoneType())) { + if (!IsSpellUsableInThisZoneType(iter.SpellId, zone->GetZoneType())) { continue; } @@ -391,7 +387,7 @@ bool Bot::BotCastDOT(Mob* tar, uint8 botLevel, const BotSpell& botSpell, const b bool casted_spell = false; if ((tar->GetHPRatio() <= 98.0f) && (tar->DontDotMeBefore() < Timer::GetCurrentTime()) && (tar->GetHPRatio() > 15.0f)) { - if (!checked_los && !CheckLosFN(tar)) { + if (!checked_los && (!CheckLosFN(tar) || !CheckWaterLoS(tar))) { return casted_spell; } @@ -474,7 +470,7 @@ bool Bot::BotCastDOT(Mob* tar, uint8 botLevel, const BotSpell& botSpell, const b bool Bot::BotCastSnare(Mob* tar, uint8 botLevel, BotSpell& botSpell, const bool& checked_los, uint32 iSpellTypes) { bool casted_spell = false; if (tar->DontSnareMeBefore() < Timer::GetCurrentTime()) { - if (!checked_los && !CheckLosFN(tar)) { + if (!checked_los && (!CheckLosFN(tar) || !CheckWaterLoS(tar))) { return casted_spell; } @@ -505,7 +501,7 @@ bool Bot::BotCastSnare(Mob* tar, uint8 botLevel, BotSpell& botSpell, const bool& bool Bot::BotCastLifetap(Mob* tar, uint8 botLevel, BotSpell& botSpell, const bool& checked_los, uint32 iSpellTypes) { bool casted_spell = false; if (GetHPRatio() < 90.0f) { - if (!checked_los && !CheckLosFN(tar)) { + if (!checked_los && (!CheckLosFN(tar) || !CheckWaterLoS(tar))) { return casted_spell; } @@ -586,7 +582,7 @@ bool Bot::BotCastCombatBuff(Mob* tar, uint8 botLevel, uint8 botClass) { if ( ((IsEffectInSpell(s.SpellId, SE_Levitate) && !zone->CanLevitate()) || (IsEffectInSpell(s.SpellId, SE_MovementSpeed) && !zone->CanCastOutdoor())) && - (botClass != BARD || !IsSpellUsableThisZoneType(s.SpellId, zone->GetZoneType())) + (botClass != BARD || !IsSpellUsableInThisZoneType(s.SpellId, zone->GetZoneType())) ) { continue; } @@ -718,7 +714,7 @@ bool Bot::BotCastDispel(Mob* tar, BotSpell& botSpell, uint32 iSpellTypes, const bool casted_spell = false; if (tar->GetHPRatio() > 95.0f) { - if (!checked_los && !CheckLosFN(tar)) { + if (!checked_los && (!CheckLosFN(tar) || !CheckWaterLoS(tar))) { return casted_spell; } @@ -741,7 +737,7 @@ bool Bot::BotCastNuke(Mob* tar, uint8 botLevel, uint8 botClass, BotSpell& botSpe bool casted_spell = false; if ((tar->GetHPRatio() <= 95.0f) || ((botClass == BARD) || (botClass == SHAMAN) || (botClass == ENCHANTER) || (botClass == PALADIN) || (botClass == SHADOWKNIGHT) || (botClass == WARRIOR))) { - if (!checked_los && !CheckLosFN(tar)) { + if (!checked_los && (!CheckLosFN(tar) || !CheckWaterLoS(tar))) { return casted_spell; } @@ -896,7 +892,7 @@ bool Bot::BotCastBuff(Mob* tar, uint8 botLevel, uint8 botClass) { (IsEffectInSpell(s.SpellId, SE_Levitate) && !zone->CanLevitate()) || (IsEffectInSpell(s.SpellId, SE_MovementSpeed) && !zone->CanCastOutdoor()) ) && - (botClass != BARD || !IsSpellUsableThisZoneType(s.SpellId, zone->GetZoneType())) + (botClass != BARD || !IsSpellUsableInThisZoneType(s.SpellId, zone->GetZoneType())) ) { continue; } @@ -969,7 +965,7 @@ bool Bot::BotCastBuff(Mob* tar, uint8 botLevel, uint8 botClass) { bool Bot::BotCastRoot(Mob* tar, uint8 botLevel, uint32 iSpellTypes, BotSpell& botSpell, const bool& checked_los) { bool casted_spell = false; if (!tar->IsRooted() && tar->DontRootMeBefore() < Timer::GetCurrentTime()) { - if (!checked_los && !CheckLosFN(tar)) { + if (!checked_los && (!CheckLosFN(tar) || !CheckWaterLoS(tar))) { return casted_spell; } @@ -1007,7 +1003,7 @@ bool Bot::BotCastHeal(Mob* tar, uint8 botLevel, uint8 botClass, BotSpell& botSpe isPrimaryHealer = IsGroupHealer(); } - if (hpr < 95 || (tar->IsClient() && (hpr < 95)) || (botClass == BARD)) { + if (hpr < 95 || tar->IsClient() || botClass == BARD) { if (tar->GetClass() == NECROMANCER && hpr >= 40) { return false; } @@ -1025,7 +1021,7 @@ bool Bot::BotCastHeal(Mob* tar, uint8 botLevel, uint8 botClass, BotSpell& botSpe if (hpr < 35) { botSpell = GetBestBotSpellForFastHeal(this); } - else if (hpr >= 35 && hpr < 70) { + else if (hpr < 70) { if (GetNumberNeedingHealedInGroup(60, false, raid) >= 3) { botSpell = GetBestBotSpellForGroupHeal(this); } @@ -1034,7 +1030,7 @@ bool Bot::BotCastHeal(Mob* tar, uint8 botLevel, uint8 botClass, BotSpell& botSpe botSpell = GetBestBotSpellForPercentageHeal(this); } } - else if (hpr >= 70 && hpr < 95) { + else if (hpr < 95) { if (GetNumberNeedingHealedInGroup(80, false, raid) >= 3) { botSpell = GetBestBotSpellForGroupHealOverTime(this); } @@ -1079,7 +1075,7 @@ bool Bot::BotCastHeal(Mob* tar, uint8 botLevel, uint8 botClass, BotSpell& botSpe else if (hpr < 40) { botSpell = GetBestBotSpellForPercentageHeal(this); } - else if (hpr >= 40 && hpr < 75) { + else if (hpr < 75) { botSpell = GetBestBotSpellForRegularSingleTargetHeal(this); } else { @@ -1193,7 +1189,7 @@ bool Bot::BotCastHeal(Mob* tar, uint8 botLevel, uint8 botClass, BotSpell& botSpe bool Bot::BotCastMez(Mob* tar, uint8 botLevel, bool checked_los, BotSpell& botSpell, Raid* raid) { bool casted_spell = false; - if (!checked_los && !CheckLosFN(tar)) { + if (!checked_los && (!CheckLosFN(tar) || !CheckWaterLoS(tar))) { return false; } @@ -1888,11 +1884,15 @@ bool Bot::AIHealRotation(Mob* tar, bool useFastHeals) { std::list Bot::GetBotSpellsForSpellEffect(Bot* botCaster, int spellEffect) { std::list result; + if (!botCaster) { + return result; + } + if (auto bot_owner = botCaster->GetBotOwner(); !bot_owner) { return result; } - if (botCaster && botCaster->AI_HasSpells()) { + if (botCaster->AI_HasSpells()) { std::vector botSpellList = botCaster->AIBot_spells; for (int i = botSpellList.size() - 1; i >= 0; i--) { @@ -1902,7 +1902,7 @@ std::list Bot::GetBotSpellsForSpellEffect(Bot* botCaster, int spellEff continue; } - if (IsEffectInSpell(botSpellList[i].spellid, spellEffect) || GetTriggerSpellID(botSpellList[i].spellid, spellEffect)) { + if (IsEffectInSpell(botSpellList[i].spellid, spellEffect) || GetSpellTriggerSpellID(botSpellList[i].spellid, spellEffect)) { BotSpell botSpell; botSpell.SpellId = botSpellList[i].spellid; botSpell.SpellIndex = i; @@ -1919,11 +1919,15 @@ std::list Bot::GetBotSpellsForSpellEffect(Bot* botCaster, int spellEff std::list Bot::GetBotSpellsForSpellEffectAndTargetType(Bot* botCaster, int spellEffect, SpellTargetType targetType) { std::list result; + if (!botCaster) { + return result; + } + if (auto bot_owner = botCaster->GetBotOwner(); !bot_owner) { return result; } - if (botCaster && botCaster->AI_HasSpells()) { + if (botCaster->AI_HasSpells()) { std::vector botSpellList = botCaster->AIBot_spells; for (int i = botSpellList.size() - 1; i >= 0; i--) { @@ -1936,7 +1940,7 @@ std::list Bot::GetBotSpellsForSpellEffectAndTargetType(Bot* botCaster, if ( ( IsEffectInSpell(botSpellList[i].spellid, spellEffect) || - GetTriggerSpellID(botSpellList[i].spellid, spellEffect) + GetSpellTriggerSpellID(botSpellList[i].spellid, spellEffect) ) && spells[botSpellList[i].spellid].target_type == targetType ) { @@ -1955,11 +1959,15 @@ std::list Bot::GetBotSpellsForSpellEffectAndTargetType(Bot* botCaster, std::list Bot::GetBotSpellsBySpellType(Bot* botCaster, uint32 spellType) { std::list result; + if (!botCaster) { + return result; + } + if (auto bot_owner = botCaster->GetBotOwner(); !bot_owner) { return result; } - if (botCaster && botCaster->AI_HasSpells()) { + if (botCaster->AI_HasSpells()) { std::vector botSpellList = botCaster->AIBot_spells; for (int i = botSpellList.size() - 1; i >= 0; i--) { @@ -2305,7 +2313,7 @@ BotSpell Bot::GetBestBotSpellForMez(Bot* botCaster) { for (std::list::iterator botSpellListItr = botSpellList.begin(); botSpellListItr != botSpellList.end(); ++botSpellListItr) { // Assuming all the spells have been loaded into this list by level and in descending order if ( - IsMezSpell(botSpellListItr->SpellId) && + IsMesmerizeSpell(botSpellListItr->SpellId) && CheckSpellRecastTimers(botCaster, botSpellListItr->SpellIndex) ) { result.SpellId = botSpellListItr->SpellId; @@ -2380,7 +2388,7 @@ BotSpell Bot::GetBestBotSpellForDiseaseBasedSlow(Bot* botCaster) { Mob* Bot::GetFirstIncomingMobToMez(Bot* botCaster, BotSpell botSpell) { Mob* result = 0; - if (botCaster && IsMezSpell(botSpell.SpellId)) { + if (botCaster && IsMesmerizeSpell(botSpell.SpellId)) { std::list npc_list; entity_list.GetNPCList(npc_list); @@ -2661,7 +2669,7 @@ BotSpell Bot::GetDebuffBotSpell(Bot* botCaster, Mob *tar) { if (!tar || !botCaster) return result; - if (botCaster && botCaster->AI_HasSpells()) { + if (botCaster->AI_HasSpells()) { std::vector botSpellList = botCaster->AIBot_spells; for (int i = botSpellList.size() - 1; i >= 0; i--) { @@ -2694,21 +2702,22 @@ BotSpell Bot::GetBestBotSpellForResistDebuff(Bot* botCaster, Mob *tar) { result.SpellIndex = 0; result.ManaCost = 0; - if (!tar) + if (!tar || !botCaster) { return result; + } int level_mod = (tar->GetLevel() - botCaster->GetLevel())* (tar->GetLevel() - botCaster->GetLevel()) / 2; - if (tar->GetLevel() - botCaster->GetLevel() < 0) - { + if (tar->GetLevel() - botCaster->GetLevel() < 0) { level_mod = -level_mod; } + bool needsMagicResistDebuff = (tar->GetMR() + level_mod) > 100; bool needsColdResistDebuff = (tar->GetCR() + level_mod) > 100; bool needsFireResistDebuff = (tar->GetFR() + level_mod) > 100; bool needsPoisonResistDebuff = (tar->GetPR() + level_mod) > 100; bool needsDiseaseResistDebuff = (tar->GetDR() + level_mod) > 100; - if (botCaster && botCaster->AI_HasSpells()) { + if (botCaster->AI_HasSpells()) { std::vector botSpellList = botCaster->AIBot_spells; for (int i = botSpellList.size() - 1; i >= 0; i--) { @@ -2984,9 +2993,9 @@ uint8 Bot::GetChanceToCastBySpellType(uint32 spellType) spell_type_index = spellTypeIndexPreCombatBuffSong; break; default: - spell_type_index = SPELL_TYPE_COUNT; break; } + if (spell_type_index >= SPELL_TYPE_COUNT) return 0; @@ -3041,23 +3050,16 @@ bool Bot::AI_AddBotSpells(uint32 bot_spell_id) { GetLevel() ); - if (spell_list) { - debug_msg.append( - fmt::format( - " (found, {})", - spell_list->entries.size() - ) - ); + debug_msg.append( + fmt::format( + " (found, {})", + spell_list->entries.size() + ) + ); - LogAI("[{}]", debug_msg); - for (const auto &iter : spell_list->entries) { - LogAIDetail("([{}]) [{}]", iter.spellid, spells[iter.spellid].name); - } - } - else - { - debug_msg.append(" (not found)"); - LogAI("[{}]", debug_msg); + LogAI("[{}]", debug_msg); + for (const auto &iter: spell_list->entries) { + LogAIDetail("([{}]) [{}]", iter.spellid, spells[iter.spellid].name); } LogAI("fin (spell list)"); @@ -3173,20 +3175,14 @@ bool Bot::AI_AddBotSpells(uint32 bot_spell_id) { } } - if (spell_list->attack_proc >= 0) { - attack_proc_spell = spell_list->attack_proc; - proc_chance = spell_list->proc_chance; - } + attack_proc_spell = spell_list->attack_proc; + proc_chance = spell_list->proc_chance; - if (spell_list->range_proc >= 0) { - range_proc_spell = spell_list->range_proc; - rproc_chance = spell_list->rproc_chance; - } + range_proc_spell = spell_list->range_proc; + rproc_chance = spell_list->rproc_chance; - if (spell_list->defensive_proc >= 0) { - defensive_proc_spell = spell_list->defensive_proc; - dproc_chance = spell_list->dproc_chance; - } + defensive_proc_spell = spell_list->defensive_proc; + dproc_chance = spell_list->dproc_chance; //If any casting variables are defined in the current list, ignore those in the parent list. if ( @@ -3421,7 +3417,7 @@ DBbotspells_Struct* ZoneDatabase::GetBotSpells(uint32 bot_spell_id) } } - bot_spells_cache.insert(std::make_pair(bot_spell_id, spell_set)); + bot_spells_cache.emplace(std::make_pair(bot_spell_id, spell_set)); return &bot_spells_cache[bot_spell_id]; } @@ -3431,41 +3427,41 @@ DBbotspells_Struct* ZoneDatabase::GetBotSpells(uint32 bot_spell_id) // adds a spell to the list, taking into account priority and resorting list as needed. void Bot::AddSpellToBotList( - int16 iPriority, - uint16 iSpellID, - uint32 iType, - int16 iManaCost, - int32 iRecastDelay, - int16 iResistAdjust, - uint8 min_level, - uint8 max_level, - int8 min_hp, - int8 max_hp, - std::string bucket_name, - std::string bucket_value, - uint8 bucket_comparison + int16 in_priority, + uint16 in_spell_id, + uint32 in_type, + int16 in_mana_cost, + int32 in_recast_delay, + int16 in_resist_adjust, + uint8 in_min_level, + uint8 in_max_level, + int8 in_min_hp, + int8 in_max_hp, + std::string in_bucket_name, + std::string in_bucket_value, + uint8 in_bucket_comparison ) { - if (!IsValidSpell(iSpellID)) { + if (!IsValidSpell(in_spell_id)) { return; } HasAISpell = true; BotSpells_Struct t; - t.priority = iPriority; - t.spellid = iSpellID; - t.type = iType; - t.manacost = iManaCost; - t.recast_delay = iRecastDelay; - t.time_cancast = 0; - t.resist_adjust = iResistAdjust; - t.minlevel = min_level; - t.maxlevel = maxlevel; - t.min_hp = min_hp; - t.max_hp = max_hp; - t.bucket_name = bucket_name; - t.bucket_value = bucket_value; - t.bucket_comparison = bucket_comparison; + t.priority = in_priority; + t.spellid = in_spell_id; + t.type = in_type; + t.manacost = in_mana_cost; + t.recast_delay = in_recast_delay; + t.time_cancast = 0; + t.resist_adjust = in_resist_adjust; + t.minlevel = in_min_level; + t.maxlevel = in_max_level; + t.min_hp = in_min_hp; + t.max_hp = in_max_hp; + t.bucket_name = in_bucket_name; + t.bucket_value = in_bucket_value; + t.bucket_comparison = in_bucket_comparison; AIBot_spells.push_back(t); diff --git a/zone/client.cpp b/zone/client.cpp index 7b87af474..4f9a362bf 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -46,7 +46,6 @@ extern volatile bool RunLoops; #include "position.h" #include "worldserver.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "petitions.h" #include "command.h" #include "water_map.h" @@ -57,8 +56,6 @@ extern volatile bool RunLoops; #include "quest_parser_collection.h" #include "queryserv.h" #include "mob_movement_manager.h" -#include "../common/content/world_content_service.h" -#include "../common/expedition_lockout_timer.h" #include "cheat_manager.h" #include "../common/repositories/bug_reports_repository.h" @@ -69,6 +66,7 @@ extern volatile bool RunLoops; #include "../common/repositories/discovered_items_repository.h" #include "../common/events/player_events.h" #include "../common/events/player_event_logs.h" +#include "dialogue_window.h" extern QueryServ* QServ; @@ -240,7 +238,6 @@ Client::Client(EQStreamInterface *ieqs) : Mob( casting_spell_id = 0; npcflag = false; npclevel = 0; - position_update_same_count = 0; fishing_timer.Disable(); dead_timer.Disable(); camp_timer.Disable(); @@ -313,8 +310,6 @@ Client::Client(EQStreamInterface *ieqs) : Mob( HideCorpseMode = HideCorpseNone; PendingGuildInvitation = false; - current_endurance = 0; - InitializeBuffSlots(); adventure_request_timer = nullptr; @@ -662,10 +657,10 @@ bool Client::Save(uint8 iCommitNow) { /* Save Character Currency */ database.SaveCharacterCurrency(CharacterID(), &m_pp); - /* Save Current Bind Points */ - for (int i = 0; i < 5; i++) - if (m_pp.binds[i].zone_id) - database.SaveCharacterBindPoint(CharacterID(), m_pp.binds[i], i); + // save character binds + // this may not need to be called in Save() but it's here for now + // to maintain the current behavior + database.SaveCharacterBinds(this); /* Save Character Buffs */ database.SaveBuffs(this); @@ -719,7 +714,7 @@ bool Client::Save(uint8 iCommitNow) { p_timers.Store(&database); - database.SaveCharacterTribute(CharacterID(), &m_pp); + database.SaveCharacterTribute(this); SaveTaskState(); /* Save Character Task */ LogFood("Client::Save - hunger_level: [{}] thirst_level: [{}]", m_pp.hunger_level, m_pp.thirst_level); @@ -806,7 +801,7 @@ void Client::QueuePacket(const EQApplicationPacket* app, bool ack_req, CLIENT_CO AddPacket(app, ack_req); return; } - + // if the program doesnt care about the status or if the status isnt what we requested if (required_state != CLIENT_CONNECTINGALL && client_state != required_state) { // todo: save packets for later use @@ -825,7 +820,7 @@ void Client::FastQueuePacket(EQApplicationPacket** app, bool ack_req, CLIENT_CON return; } else { - if(eqs) + if(eqs) eqs->FastQueuePacket((EQApplicationPacket **)app, ack_req); else if (app && (*app)) delete *app; @@ -914,8 +909,8 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s } // Garble the message based on drunkness - if (m_pp.intoxication > 0 && !(RuleB(Chat, ServerWideOOC) && chan_num == ChatChannel_OOC) && !GetGM()) { - GarbleMessage(message, (int)(m_pp.intoxication / 3)); + if (GetIntoxication() > 0 && !(RuleB(Chat, ServerWideOOC) && chan_num == ChatChannel_OOC) && !GetGM()) { + GarbleMessage(message, (int)(GetIntoxication() / 3)); language = 0; // No need for language when drunk lang_skill = 100; } @@ -1068,7 +1063,7 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s if(!global_channel_timer.Check()) { if(strlen(targetname) == 0) - ChannelMessageReceived(7, language, lang_skill, message, "discard"); //Fast typer or spammer?? + ChannelMessageReceived(ChatChannel_Tell, language, lang_skill, message, "discard"); //Fast typer or spammer?? else return; } @@ -1328,7 +1323,7 @@ void Client::ChannelMessageSend(const char* from, const char* to, uint8 chan_num cm->chan_num = chan_num; strcpy(&cm->message[0], buffer); - + QueuePacket(&app); bool senderCanTrainSelf = RuleB(Client, SelfLanguageLearning); @@ -1799,83 +1794,90 @@ void Client::SetStats(uint8 type,int16 set_val){ safe_delete(outapp); } -void Client::IncStats(uint8 type,int16 increase_val){ - if(type>STAT_DISEASE){ - printf("Error in Client::IncStats, received invalid type of: %i\n",type); +void Client::IncStats(uint8 type, int16 increase_val) +{ + if (type > STAT_DISEASE) { + printf("Error in Client::IncStats, received invalid type of: %i\n", type); return; } - auto outapp = new EQApplicationPacket(OP_IncreaseStats, sizeof(IncreaseStat_Struct)); - IncreaseStat_Struct* iss=(IncreaseStat_Struct*)outapp->pBuffer; - switch(type){ + auto outapp = new EQApplicationPacket(OP_IncreaseStats, sizeof(IncreaseStat_Struct)); + IncreaseStat_Struct *iss = (IncreaseStat_Struct *) outapp->pBuffer; + switch (type) { case STAT_STR: - if(increase_val>0) - iss->str=increase_val; - if((m_pp.STR+increase_val*2)<0) - m_pp.STR=0; - else if((m_pp.STR+increase_val*2)>255) - m_pp.STR=255; - else - m_pp.STR+=increase_val*2; + if (increase_val > 0) { + iss->str = increase_val; + } + + if ((m_pp.STR + increase_val * 2) > 255) { + m_pp.STR = 255; + } else { + m_pp.STR += increase_val * 2; + } break; case STAT_STA: - if(increase_val>0) - iss->sta=increase_val; - if((m_pp.STA+increase_val*2)<0) - m_pp.STA=0; - else if((m_pp.STA+increase_val*2)>255) - m_pp.STA=255; - else - m_pp.STA+=increase_val*2; + if (increase_val > 0) { + iss->sta = increase_val; + } + + if ((m_pp.STA + increase_val * 2) > 255) { + m_pp.STA = 255; + } else { + m_pp.STA += increase_val * 2; + } break; case STAT_AGI: - if(increase_val>0) - iss->agi=increase_val; - if((m_pp.AGI+increase_val*2)<0) - m_pp.AGI=0; - else if((m_pp.AGI+increase_val*2)>255) - m_pp.AGI=255; - else - m_pp.AGI+=increase_val*2; + if (increase_val > 0) { + iss->agi = increase_val; + } + if ((m_pp.AGI + increase_val * 2) > 255) { + m_pp.AGI = 255; + } else { + m_pp.AGI += increase_val * 2; + } break; case STAT_DEX: - if(increase_val>0) - iss->dex=increase_val; - if((m_pp.DEX+increase_val*2)<0) - m_pp.DEX=0; - else if((m_pp.DEX+increase_val*2)>255) - m_pp.DEX=255; - else - m_pp.DEX+=increase_val*2; + if (increase_val > 0) { + iss->dex = increase_val; + } + + if ((m_pp.DEX + increase_val * 2) > 255) { + m_pp.DEX = 255; + } else { + m_pp.DEX += increase_val * 2; + } break; case STAT_INT: - if(increase_val>0) - iss->int_=increase_val; - if((m_pp.INT+increase_val*2)<0) - m_pp.INT=0; - else if((m_pp.INT+increase_val*2)>255) - m_pp.INT=255; - else - m_pp.INT+=increase_val*2; + if (increase_val > 0) { + iss->int_ = increase_val; + } + + if ((m_pp.INT + increase_val * 2) > 255) { + m_pp.INT = 255; + } else { + m_pp.INT += increase_val * 2; + } break; case STAT_WIS: - if(increase_val>0) - iss->wis=increase_val; - if((m_pp.WIS+increase_val*2)<0) - m_pp.WIS=0; - else if((m_pp.WIS+increase_val*2)>255) - m_pp.WIS=255; - else - m_pp.WIS+=increase_val*2; + if (increase_val > 0) { + iss->wis = increase_val; + } + + if ((m_pp.WIS + increase_val * 2) > 255) { + m_pp.WIS = 255; + } else { + m_pp.WIS += increase_val * 2; + } break; case STAT_CHA: - if(increase_val>0) - iss->cha=increase_val; - if((m_pp.CHA+increase_val*2)<0) - m_pp.CHA=0; - else if((m_pp.CHA+increase_val*2)>255) - m_pp.CHA=255; - else - m_pp.CHA+=increase_val*2; + if (increase_val > 0) { + iss->cha = increase_val; + } + + if ((m_pp.CHA + increase_val * 2) > 255) { + m_pp.CHA = 255; + } else { + m_pp.CHA += increase_val * 2; + } break; } QueuePacket(outapp); @@ -2225,7 +2227,7 @@ uint32 Client::GetCarriedPlatinum() { bool Client::TakePlatinum(uint32 platinum, bool update_client) { if (GetCarriedPlatinum() >= platinum) { - auto copper = static_cast(platinum * 1000); + const auto copper = static_cast(platinum) * 1000; return TakeMoneyFromPP(copper, update_client); } @@ -2319,7 +2321,7 @@ bool Client::TakeMoneyFromPP(uint64 copper, bool update_client) { } void Client::AddPlatinum(uint32 platinum, bool update_client) { - auto copper = static_cast(platinum * 1000); + const auto copper = static_cast(platinum) * 1000; AddMoneyToPP(copper, update_client); } @@ -2782,25 +2784,64 @@ void Client::GMKill() { safe_delete(outapp); } -bool Client::CheckAccess(int16 iDBLevel, int16 iDefaultLevel) { - if ((admin >= iDBLevel) || (iDBLevel == AccountStatus::Max && admin >= iDefaultLevel)) - return true; - else - return false; -} +void Client::MemorizeSpell(uint32 slot, uint32 spell_id, uint32 scribing, uint32 reduction){ + if ( + !EQ::ValueWithin( + slot, + 0, + (EQ::spells::DynamicLookup(ClientVersion(), GetGM())->SpellbookSize - 1) + ) + ) { + return; + } -void Client::MemorizeSpell(uint32 slot,uint32 spellid,uint32 scribing, uint32 reduction){ - if (slot < 0 || slot >= EQ::spells::DynamicLookup(ClientVersion(), GetGM())->SpellbookSize) - return; - if ((spellid < 3 || spellid > EQ::spells::DynamicLookup(ClientVersion(), GetGM())->SpellIdMax) && spellid != 0xFFFFFFFF) + if ( + !EQ::ValueWithin( + spell_id, + 3, + EQ::spells::DynamicLookup(ClientVersion(), GetGM())->SpellIdMax + ) && + spell_id != UINT32_MAX + ) { return; + } + auto outapp = new EQApplicationPacket(OP_MemorizeSpell, sizeof(MemorizeSpell_Struct)); - MemorizeSpell_Struct* mss=(MemorizeSpell_Struct*)outapp->pBuffer; - mss->scribing=scribing; - mss->slot=slot; - mss->spell_id=spellid; + + auto* mss = (MemorizeSpell_Struct*) outapp->pBuffer; + + mss->scribing = scribing; + mss->slot = slot; + mss->spell_id = spell_id; mss->reduction = reduction; + outapp->priority = 5; + + if ( + parse->PlayerHasQuestSub(EVENT_SCRIBE_SPELL) || + parse->PlayerHasQuestSub(EVENT_MEMORIZE_SPELL) || + parse->PlayerHasQuestSub(EVENT_UNMEMORIZE_SPELL) + ) { + const auto export_string = fmt::format("{} {}", slot, spell_id); + + if ( + scribing == ScribeSpellActions::Memorize && + parse->PlayerHasQuestSub(EVENT_MEMORIZE_SPELL) + ) { + parse->EventPlayer(EVENT_MEMORIZE_SPELL, this, export_string, 0); + } else if ( + scribing == ScribeSpellActions::Unmemorize && + parse->PlayerHasQuestSub(EVENT_UNMEMORIZE_SPELL) + ) { + parse->EventPlayer(EVENT_UNMEMORIZE_SPELL, this, export_string, 0); + } else if ( + scribing == ScribeSpellActions::Scribe && + parse->PlayerHasQuestSub(EVENT_SCRIBE_SPELL) + ) { + parse->EventPlayer(EVENT_SCRIBE_SPELL, this, export_string, 0); + } + } + QueuePacket(outapp); safe_delete(outapp); } @@ -3302,28 +3343,28 @@ bool Client::FilteredMessageCheck(Mob *sender, eqFilterType filter) { eqFilterMode mode = GetFilter(filter); // easy ones first - if (mode == FilterShow) + if (mode == FilterShow) { return true; - else if (mode == FilterHide) + } else if (mode == FilterHide) { return false; + } - if (sender != this && (mode == FilterHide || mode == FilterShowSelfOnly)) { + if (sender != this && mode == FilterShowSelfOnly) { return false; } else if (sender) { - if (this == sender) { - if (mode == FilterHide) // don't need to check others - return false; - } else if (mode == FilterShowGroupOnly) { - Group *g = GetGroup(); - Raid *r = GetRaid(); + if (mode == FilterShowGroupOnly) { + auto g = GetGroup(); + auto r = GetRaid(); if (g) { - if (g->IsGroupMember(sender)) + if (g->IsGroupMember(sender)) { return true; + } } else if (r && sender->IsClient()) { - uint32 rgid1 = r->GetGroup(this); - uint32 rgid2 = r->GetGroup(sender->CastToClient()); - if (rgid1 != 0xFFFFFFFF && rgid1 == rgid2) + auto rgid1 = r->GetGroup(this); + auto rgid2 = r->GetGroup(sender->CastToClient()); + if (rgid1 != RAID_GROUPLESS && rgid1 == rgid2) { return true; + } } else { return false; } @@ -3955,7 +3996,7 @@ void Client::SendWindow( case 1: { char name[64] = ""; strcpy(name, target->GetName()); - if (target->GetLastName()) { + if (strlen(target->GetLastName()) > 0) { char last_name[64] = ""; strcpy(last_name, target->GetLastName()); strcat(name, " "); @@ -4162,7 +4203,7 @@ bool Client::GroupFollow(Client* inviter) { if (iraid == raid) { //both in same raid uint32 ngid = raid->GetGroup(inviter->GetName()); - if (raid->GroupCount(ngid) < 6) { + if (raid->GroupCount(ngid) < MAX_GROUP_MEMBERS) { raid->MoveMember(GetName(), ngid); raid->SendGroupDisband(this); raid->GroupUpdate(ngid); @@ -4183,7 +4224,7 @@ bool Client::GroupFollow(Client* inviter) { if (!GetXTargetAutoMgr()->empty()) SetDirtyAutoHaters(); - if (raid->GroupCount(groupToUse) < 6) + if (raid->GroupCount(groupToUse) < MAX_GROUP_MEMBERS) { raid->SendRaidCreate(this); raid->SendMakeLeaderPacketTo(raid->leadername, this); @@ -4323,9 +4364,9 @@ bool Client::GroupFollow(Client* inviter) { uint16 Client::GetPrimarySkillValue() { EQ::skills::SkillType skill = EQ::skills::HIGHEST_SKILL; //because nullptr == 0, which is 1H Slashing, & we want it to return 0 from GetSkill - bool equiped = m_inv.GetItem(EQ::invslot::slotPrimary); + bool equipped = m_inv.GetItem(EQ::invslot::slotPrimary); - if (!equiped) + if (!equipped) skill = EQ::skills::SkillHandtoHand; else { @@ -5607,50 +5648,62 @@ void Client::SetRadiantCrystals(uint32 value) { } // Processes a client request to inspect a SoF+ client's equipment. -void Client::ProcessInspectRequest(Client* requestee, Client* requester) { - if(requestee && requester) { +void Client::ProcessInspectRequest(Client *requestee, Client *requester) +{ + if (requestee && requester) { auto outapp = new EQApplicationPacket(OP_InspectAnswer, sizeof(InspectResponse_Struct)); - InspectResponse_Struct* insr = (InspectResponse_Struct*) outapp->pBuffer; + auto insr = (InspectResponse_Struct *) outapp->pBuffer; + insr->TargetID = requester->GetID(); insr->playerid = requestee->GetID(); - const EQ::ItemData* item = nullptr; - const EQ::ItemInstance* inst = nullptr; - int ornamentationAugtype = RuleI(Character, OrnamentationAugmentType); - for(int16 L = EQ::invslot::EQUIPMENT_BEGIN; L <= EQ::invslot::EQUIPMENT_END; L++) { + const EQ::ItemData *item = nullptr; + const EQ::ItemInstance *inst = nullptr; + + for (int16 L = EQ::invslot::EQUIPMENT_BEGIN; L <= EQ::invslot::EQUIPMENT_END; L++) { inst = requestee->GetInv().GetItem(L); - if(inst) { + if (inst) { item = inst->GetItem(); - if(item) { + if (item) { strcpy(insr->itemnames[L], item->Name); - const EQ::ItemData *aug_item = nullptr; - if (inst->GetOrnamentationAug(ornamentationAugtype)) - inst->GetOrnamentationAug(ornamentationAugtype)->GetItem(); + const EQ::ItemData *augment_item = nullptr; + const auto augment = inst->GetOrnamentationAugment(); - if (aug_item) - insr->itemicons[L] = aug_item->Icon; - else if (inst->GetOrnamentationIcon()) + if (augment) { + augment_item = augment->GetItem(); + } + + if (augment_item) { + insr->itemicons[L] = augment_item->Icon; + } else if (inst->GetOrnamentationIcon()) { insr->itemicons[L] = inst->GetOrnamentationIcon(); - else + } else { insr->itemicons[L] = item->Icon; - } - else { + } + } else { insr->itemnames[L][0] = '\0'; - insr->itemicons[L] = 0xFFFFFFFF; + insr->itemicons[L] = 0xFFFFFFFF; } - } - else { + } else { insr->itemnames[L][0] = '\0'; - insr->itemicons[L] = 0xFFFFFFFF; + insr->itemicons[L] = 0xFFFFFFFF; } } strcpy(insr->text, requestee->GetInspectMessage().text); // There could be an OP for this..or not... (Ti clients are not processed here..this message is generated client-side) - if(requestee->IsClient() && (requestee != requester)) { requestee->Message(Chat::White, "%s is looking at your equipment...", requester->GetName()); } + if (requestee->IsClient() && requestee != requester) { + requestee->Message( + Chat::White, + fmt::format( + "{} is looking at your equipment...", + requester->GetName() + ).c_str() + ); + } requester->QueuePacket(outapp); // Send answer to requester safe_delete(outapp); @@ -6937,15 +6990,17 @@ void Client::SendAlternateCurrencyValues() void Client::SendAlternateCurrencyValue(uint32 currency_id, bool send_if_null) { - uint32 value = GetAlternateCurrencyValue(currency_id); - if(value > 0 || (value == 0 && send_if_null)) { + const auto value = GetAlternateCurrencyValue(currency_id); + if (value > 0 || send_if_null) { auto outapp = new EQApplicationPacket(OP_AltCurrency, sizeof(AltCurrencyUpdate_Struct)); - AltCurrencyUpdate_Struct *update = (AltCurrencyUpdate_Struct*)outapp->pBuffer; - update->opcode = 7; - strcpy(update->name, GetName()); + auto update = (AltCurrencyUpdate_Struct *) outapp->pBuffer; + update->opcode = 7; update->currency_number = currency_id; - update->amount = value; - update->unknown072 = 1; + update->amount = value; + update->unknown072 = 1; + + strn0cpy(update->name, GetName(), sizeof(update->name)); + FastQueuePacket(&outapp); } } @@ -7470,15 +7525,17 @@ const char* Client::GetClassPlural(Client* client) { void Client::SendWebLink(const char *website) { - size_t len = strlen(website) + 1; - if(website != 0 && len > 1) - { - auto outapp = new EQApplicationPacket(OP_Weblink, sizeof(Weblink_Struct) + len); - Weblink_Struct *wl = (Weblink_Struct*)outapp->pBuffer; - memcpy(wl->weblink, website, len); - wl->weblink[len] = '\0'; + if (website) { + size_t len = strlen(website) + 1; + if (len > 1) + { + auto outapp = new EQApplicationPacket(OP_Weblink, sizeof(Weblink_Struct) + len); + Weblink_Struct* wl = (Weblink_Struct*)outapp->pBuffer; + memcpy(wl->weblink, website, len); + wl->weblink[len] = '\0'; - FastQueuePacket(&outapp); + FastQueuePacket(&outapp); + } } } @@ -7500,106 +7557,96 @@ void Client::SendMercPersonalInfo() return; } - if(mercData) - { - if (ClientVersion() >= EQ::versions::ClientVersion::RoF) - { - if (mercCount > 0) - { - auto outapp = - new EQApplicationPacket(OP_MercenaryDataUpdate, sizeof(MercenaryDataUpdate_Struct)); - MercenaryDataUpdate_Struct* mdus = (MercenaryDataUpdate_Struct*)outapp->pBuffer; - mdus->MercStatus = 0; - mdus->MercCount = mercCount; - mdus->MercData[i].MercID = mercData->MercTemplateID; - mdus->MercData[i].MercType = mercData->MercType; - mdus->MercData[i].MercSubType = mercData->MercSubType; - mdus->MercData[i].PurchaseCost = Merc::CalcPurchaseCost(mercData->MercTemplateID, GetLevel(), 0); - mdus->MercData[i].UpkeepCost = Merc::CalcUpkeepCost(mercData->MercTemplateID, GetLevel(), 0); - mdus->MercData[i].Status = 0; - mdus->MercData[i].AltCurrencyCost = Merc::CalcPurchaseCost(mercData->MercTemplateID, GetLevel(), altCurrentType); - mdus->MercData[i].AltCurrencyUpkeep = Merc::CalcPurchaseCost(mercData->MercTemplateID, GetLevel(), altCurrentType); - mdus->MercData[i].AltCurrencyType = altCurrentType; - mdus->MercData[i].MercUnk01 = 0; - mdus->MercData[i].TimeLeft = GetMercInfo().MercTimerRemaining; //GetMercTimer().GetRemainingTime(); - mdus->MercData[i].MerchantSlot = i + 1; - mdus->MercData[i].MercUnk02 = 1; - mdus->MercData[i].StanceCount = zone->merc_stance_list[mercData->MercTemplateID].size(); - mdus->MercData[i].MercUnk03 = 0; - mdus->MercData[i].MercUnk04 = 1; - strn0cpy(mdus->MercData[i].MercName, GetMercInfo().merc_name , sizeof(mdus->MercData[i].MercName)); - uint32 stanceindex = 0; - if (mdus->MercData[i].StanceCount != 0) - { - auto iter = zone->merc_stance_list[mercData->MercTemplateID].begin(); - while(iter != zone->merc_stance_list[mercData->MercTemplateID].end()) - { - mdus->MercData[i].Stances[stanceindex].StanceIndex = stanceindex; - mdus->MercData[i].Stances[stanceindex].Stance = (iter->StanceID); - stanceindex++; - ++iter; - } - } + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { + auto outapp = new EQApplicationPacket(OP_MercenaryDataUpdate, sizeof(MercenaryDataUpdate_Struct)); + auto mdus = (MercenaryDataUpdate_Struct *) outapp->pBuffer; - mdus->MercData[i].MercUnk05 = 1; - FastQueuePacket(&outapp); - safe_delete(outapp); - return; + mdus->MercStatus = 0; + mdus->MercCount = mercCount; + mdus->MercData[i].MercID = mercData->MercTemplateID; + mdus->MercData[i].MercType = mercData->MercType; + mdus->MercData[i].MercSubType = mercData->MercSubType; + mdus->MercData[i].PurchaseCost = Merc::CalcPurchaseCost(mercData->MercTemplateID, GetLevel(), 0); + mdus->MercData[i].UpkeepCost = Merc::CalcUpkeepCost(mercData->MercTemplateID, GetLevel(), 0); + mdus->MercData[i].Status = 0; + mdus->MercData[i].AltCurrencyCost = Merc::CalcPurchaseCost( + mercData->MercTemplateID, + GetLevel(), + altCurrentType + ); + mdus->MercData[i].AltCurrencyUpkeep = Merc::CalcPurchaseCost( + mercData->MercTemplateID, + GetLevel(), + altCurrentType + ); + mdus->MercData[i].AltCurrencyType = altCurrentType; + mdus->MercData[i].MercUnk01 = 0; + mdus->MercData[i].TimeLeft = GetMercInfo().MercTimerRemaining; //GetMercTimer().GetRemainingTime(); + mdus->MercData[i].MerchantSlot = i + 1; + mdus->MercData[i].MercUnk02 = 1; + mdus->MercData[i].StanceCount = zone->merc_stance_list[mercData->MercTemplateID].size(); + mdus->MercData[i].MercUnk03 = 0; + mdus->MercData[i].MercUnk04 = 1; + + strn0cpy(mdus->MercData[i].MercName, GetMercInfo().merc_name, sizeof(mdus->MercData[i].MercName)); + + uint32 stanceindex = 0; + if (mdus->MercData[i].StanceCount != 0) { + auto iter = zone->merc_stance_list[mercData->MercTemplateID].begin(); + while (iter != zone->merc_stance_list[mercData->MercTemplateID].end()) { + mdus->MercData[i].Stances[stanceindex].StanceIndex = stanceindex; + mdus->MercData[i].Stances[stanceindex].Stance = (iter->StanceID); + stanceindex++; + ++iter; } } - else - { - if(mercTypeCount > 0 && mercCount > 0) - { - auto outapp = new EQApplicationPacket(OP_MercenaryDataResponse, - sizeof(MercenaryMerchantList_Struct)); - MercenaryMerchantList_Struct* mml = (MercenaryMerchantList_Struct*)outapp->pBuffer; - mml->MercTypeCount = mercTypeCount; //We should only have one merc entry. - mml->MercGrades[i] = 1; - mml->MercCount = mercCount; - mml->Mercs[i].MercID = mercData->MercTemplateID; - mml->Mercs[i].MercType = mercData->MercType; - mml->Mercs[i].MercSubType = mercData->MercSubType; - mml->Mercs[i].PurchaseCost = RuleB(Mercs, ChargeMercPurchaseCost) ? Merc::CalcPurchaseCost(mercData->MercTemplateID, GetLevel(), 0): 0; - mml->Mercs[i].UpkeepCost = RuleB(Mercs, ChargeMercUpkeepCost) ? Merc::CalcUpkeepCost(mercData->MercTemplateID, GetLevel(), 0): 0; - mml->Mercs[i].Status = 0; - mml->Mercs[i].AltCurrencyCost = RuleB(Mercs, ChargeMercPurchaseCost) ? Merc::CalcPurchaseCost(mercData->MercTemplateID, GetLevel(), altCurrentType): 0; - mml->Mercs[i].AltCurrencyUpkeep = RuleB(Mercs, ChargeMercUpkeepCost) ? Merc::CalcUpkeepCost(mercData->MercTemplateID, GetLevel(), altCurrentType): 0; - mml->Mercs[i].AltCurrencyType = altCurrentType; - mml->Mercs[i].MercUnk01 = 0; - mml->Mercs[i].TimeLeft = GetMercInfo().MercTimerRemaining; - mml->Mercs[i].MerchantSlot = i + 1; - mml->Mercs[i].MercUnk02 = 1; - mml->Mercs[i].StanceCount = zone->merc_stance_list[mercData->MercTemplateID].size(); - mml->Mercs[i].MercUnk03 = 0; - mml->Mercs[i].MercUnk04 = 1; - strn0cpy(mml->Mercs[i].MercName, GetMercInfo().merc_name , sizeof(mml->Mercs[i].MercName)); - int stanceindex = 0; - if(mml->Mercs[i].StanceCount != 0) - { - auto iter = zone->merc_stance_list[mercData->MercTemplateID].begin(); - while(iter != zone->merc_stance_list[mercData->MercTemplateID].end()) - { - mml->Mercs[i].Stances[stanceindex].StanceIndex = stanceindex; - mml->Mercs[i].Stances[stanceindex].Stance = (iter->StanceID); - stanceindex++; - ++iter; - } - } - FastQueuePacket(&outapp); - safe_delete(outapp); - return; + + mdus->MercData[i].MercUnk05 = 1; + FastQueuePacket(&outapp); + safe_delete(outapp); + return; + } else { + auto outapp = new EQApplicationPacket(OP_MercenaryDataResponse, sizeof(MercenaryMerchantList_Struct)); + auto mml = (MercenaryMerchantList_Struct *) outapp->pBuffer; + + mml->MercTypeCount = mercTypeCount; //We should only have one merc entry. + mml->MercGrades[i] = 1; + + mml->MercCount = mercCount; + mml->Mercs[i].MercID = mercData->MercTemplateID; + mml->Mercs[i].MercType = mercData->MercType; + mml->Mercs[i].MercSubType = mercData->MercSubType; + mml->Mercs[i].PurchaseCost = RuleB(Mercs, ChargeMercPurchaseCost) ? Merc::CalcPurchaseCost(mercData->MercTemplateID, GetLevel(), 0) : 0; + mml->Mercs[i].UpkeepCost = RuleB(Mercs, ChargeMercUpkeepCost) ? Merc::CalcUpkeepCost(mercData->MercTemplateID, GetLevel(), 0) : 0; + mml->Mercs[i].Status = 0; + mml->Mercs[i].AltCurrencyCost = RuleB(Mercs, ChargeMercPurchaseCost) ? Merc::CalcPurchaseCost(mercData->MercTemplateID, GetLevel(), altCurrentType) : 0; + mml->Mercs[i].AltCurrencyUpkeep = RuleB(Mercs, ChargeMercUpkeepCost) ? Merc::CalcUpkeepCost(mercData->MercTemplateID, GetLevel(), altCurrentType) : 0; + mml->Mercs[i].AltCurrencyType = altCurrentType; + mml->Mercs[i].MercUnk01 = 0; + mml->Mercs[i].TimeLeft = GetMercInfo().MercTimerRemaining; + mml->Mercs[i].MerchantSlot = i + 1; + mml->Mercs[i].MercUnk02 = 1; + mml->Mercs[i].StanceCount = zone->merc_stance_list[mercData->MercTemplateID].size(); + mml->Mercs[i].MercUnk03 = 0; + mml->Mercs[i].MercUnk04 = 1; + + strn0cpy(mml->Mercs[i].MercName, GetMercInfo().merc_name, sizeof(mml->Mercs[i].MercName)); + + int stanceindex = 0; + if (mml->Mercs[i].StanceCount != 0) { + auto iter = zone->merc_stance_list[mercData->MercTemplateID].begin(); + while (iter != zone->merc_stance_list[mercData->MercTemplateID].end()) { + mml->Mercs[i].Stances[stanceindex].StanceIndex = stanceindex; + mml->Mercs[i].Stances[stanceindex].Stance = (iter->StanceID); + stanceindex++; + ++iter; } } - Log(Logs::General, Logs::Mercenaries, "SendMercPersonalInfo Send Successful for %s.", GetName()); - SendMercMerchantResponsePacket(0); + FastQueuePacket(&outapp); + safe_delete(outapp); + return; } - else - { - Log(Logs::General, Logs::Mercenaries, "SendMercPersonalInfo Send Failed Due to no MercData (%i) for %s", GetMercInfo().MercTemplateID, GetName()); - } - } void Client::SendClearMercInfo() @@ -8006,7 +8053,7 @@ void Client::MerchantRejectMessage(Mob *merchant, int primaryfaction) //o-------------------------------------------------------------- void Client::SendFactionMessage(int32 tmpvalue, int32 faction_id, int32 faction_before_hit, int32 totalvalue, uint8 temp, int32 this_faction_min, int32 this_faction_max) { - char name[50]; + char name[50]; int32 faction_value; // If we're dropping from MAX or raising from MIN or repairing, @@ -8017,30 +8064,37 @@ void Client::SendFactionMessage(int32 tmpvalue, int32 faction_id, int32 faction_ // hit. For example, if we go from 1199 to 1200 which is the MAX // we still want to say faction got better this time around. - if ( (faction_before_hit >= this_faction_max) || - (faction_before_hit <= this_faction_min)) + if (!EQ::ValueWithin(faction_before_hit, this_faction_min, this_faction_max)) { faction_value = totalvalue; - else + } else { faction_value = faction_before_hit; + } // default to Faction# if we couldn't get the name from the ID - if (content_db.GetFactionName(faction_id, name, sizeof(name)) == false) + if (!content_db.GetFactionName(faction_id, name, sizeof(name))) { snprintf(name, sizeof(name), "Faction%i", faction_id); + } - if (tmpvalue == 0 || temp == 1 || temp == 2) + if (tmpvalue == 0 || temp == 1 || temp == 2) { return; - else if (faction_value >= this_faction_max) + } else if (faction_value >= this_faction_max) { MessageString(Chat::Yellow, FACTION_BEST, name); - else if (faction_value <= this_faction_min) + } else if (faction_value <= this_faction_min) { MessageString(Chat::Yellow, FACTION_WORST, name); - else if (tmpvalue > 0 && faction_value < this_faction_max && !RuleB(Client, UseLiveFactionMessage)) + } else if (tmpvalue > 0 && !RuleB(Client, UseLiveFactionMessage)) { MessageString(Chat::Yellow, FACTION_BETTER, name); - else if (tmpvalue < 0 && faction_value > this_faction_min && !RuleB(Client, UseLiveFactionMessage)) + } else if (tmpvalue < 0 && !RuleB(Client, UseLiveFactionMessage)) { MessageString(Chat::Yellow, FACTION_WORSE, name); - else if (RuleB(Client, UseLiveFactionMessage)) - Message(Chat::Yellow, "Your faction standing with %s has been adjusted by %i.", name, tmpvalue); //New Live faction message (14261) - - return; + } else if (RuleB(Client, UseLiveFactionMessage)) { + Message( + Chat::Yellow, + fmt::format( + "Your faction standing with {} has been adjusted by {}.", + name, + tmpvalue + ).c_str() + ); + } //New Live faction message (14261) } void Client::LoadAccountFlags() @@ -8181,7 +8235,7 @@ void Client::TryItemTimer(int slot) continue; } - auto item_timers = a_inst->GetTimers(); + auto& item_timers = a_inst->GetTimers(); auto it_iter = item_timers.begin(); while(it_iter != item_timers.end()) { if(it_iter->second.Check()) { @@ -8333,6 +8387,11 @@ void Client::SetThirst(int32 in_thirst) safe_delete(outapp); } +void Client::SetIntoxication(int32 in_intoxication) +{ + m_pp.intoxication = EQ::Clamp(in_intoxication, 0, 200); +} + void Client::SetConsumption(int32 in_hunger, int32 in_thirst) { EQApplicationPacket *outapp = nullptr; @@ -8361,9 +8420,6 @@ void Client::Consume(const EQ::ItemData *item, uint8 type, int16 slot, bool auto return; if (type == EQ::item::ItemTypeFood) { - if (increase < 0) - return; - m_pp.hunger_level += increase; LogFood("Consuming food, points added to hunger_level: [{}] - current_hunger: [{}]", increase, m_pp.hunger_level); @@ -8376,9 +8432,6 @@ void Client::Consume(const EQ::ItemData *item, uint8 type, int16 slot, bool auto LogFood("Eating from slot: [{}]", (int)slot); } else { - if (increase < 0) - return; - m_pp.thirst_level += increase; DeleteItemInInventory(slot, 1); @@ -8537,7 +8590,7 @@ void Client::QuestReward(Mob* target, uint32 copper, uint32 silver, uint32 gold, AddMoneyToPP(copper, silver, gold, platinum); if (itemid > 0) - SummonItem(itemid, -1, 0, 0, 0, 0, 0, false, EQ::invslot::slotCursor); + SummonItem(itemid, -1, 0, 0, 0, 0, 0, 0, false, EQ::invslot::slotCursor); if (faction) { @@ -8573,7 +8626,7 @@ void Client::QuestReward(Mob* target, const QuestReward_Struct &reward, bool fac for (int i = 0; i < QUESTREWARD_COUNT; ++i) if (reward.item_id[i] > 0) - SummonItem(reward.item_id[i], -1, 0, 0, 0, 0, 0, false, EQ::invslot::slotCursor); + SummonItem(reward.item_id[i], -1, 0, 0, 0, 0, 0, 0, false, EQ::invslot::slotCursor); // only process if both are valid // if we don't have a target here, we want to just reward, but if there is a target, need to check charm @@ -8644,15 +8697,17 @@ void Client::RewardFaction(int id, int amount) } void Client::SendHPUpdateMarquee(){ - if (!this || !IsClient() || !current_hp || !max_hp) + if (!IsClient() || !current_hp || !max_hp) { return; + } /* Health Update Marquee Display: Custom*/ - uint8 health_percentage = (uint8)(current_hp * 100 / max_hp); - if (health_percentage >= 100) + const auto health_percentage = static_cast(current_hp * 100 / max_hp); + if (health_percentage >= 100) { return; + } - std::string health_update_notification = StringFormat("Health: %u%%", health_percentage); + const auto health_update_notification = fmt::format("Health: {}%%", health_percentage); SendMarqueeMessage(Chat::Yellow, 510, 0, 3000, 3000, health_update_notification); } @@ -9011,120 +9066,119 @@ void Client::InitInnates() // The client calls this in a few places. When you remove a vision buff and in SetHeights, which is called in // illusions, mounts, and a bunch of other cases. All of the calls to InitInnates are wrapped in restoring regen // besides the call initializing the first time - auto race = GetRace(); + auto race = GetRace(); auto class_ = GetClass(); - for (int i = 0; i < InnateSkillMax; ++i) + for (int i = 0; i < InnateSkillMax; ++i) { m_pp.InnateSkills[i] = InnateDisabled; + } m_pp.InnateSkills[InnateInspect] = InnateEnabled; m_pp.InnateSkills[InnateOpen] = InnateEnabled; + if (race >= RT_FROGLOK_3) { - if (race == RT_SKELETON_2 || race == RT_FROGLOK_3) + if (race == RT_SKELETON_2 || race == RT_FROGLOK_3) { m_pp.InnateSkills[InnateUltraVision] = InnateEnabled; - else + } else { m_pp.InnateSkills[InnateInfravision] = InnateEnabled; + } } + switch (race) { - case RT_BARBARIAN: - case RT_BARBARIAN_2: - m_pp.InnateSkills[InnateSlam] = InnateEnabled; - break; - case RT_ERUDITE: - case RT_ERUDITE_2: - m_pp.InnateSkills[InnateLore] = InnateEnabled; - break; - case RT_WOOD_ELF: - case RT_GUARD_3: - m_pp.InnateSkills[InnateInfravision] = InnateEnabled; - break; - case RT_HIGH_ELF: - case RT_GUARD_2: - m_pp.InnateSkills[InnateInfravision] = InnateEnabled; - m_pp.InnateSkills[InnateLore] = InnateEnabled; - break; - case RT_DARK_ELF: - case RT_DARK_ELF_2: - case RT_VAMPIRE_2: - m_pp.InnateSkills[InnateUltraVision] = InnateEnabled; - break; - case RT_TROLL: - case RT_TROLL_2: - m_pp.InnateSkills[InnateRegen] = InnateEnabled; - m_pp.InnateSkills[InnateSlam] = InnateEnabled; - m_pp.InnateSkills[InnateInfravision] = InnateEnabled; - break; - case RT_DWARF: - case RT_DWARF_2: - m_pp.InnateSkills[InnateInfravision] = InnateEnabled; - break; - case RT_OGRE: - case RT_OGRE_2: - m_pp.InnateSkills[InnateInfravision] = InnateEnabled; - m_pp.InnateSkills[InnateSlam] = InnateEnabled; - m_pp.InnateSkills[InnateNoBash] = InnateEnabled; - m_pp.InnateSkills[InnateBashDoor] = InnateEnabled; - break; - case RT_HALFLING: - case RT_HALFLING_2: - m_pp.InnateSkills[InnateInfravision] = InnateEnabled; - break; - case RT_GNOME: - m_pp.InnateSkills[InnateInfravision] = InnateEnabled; - m_pp.InnateSkills[InnateLore] = InnateEnabled; - break; - case RT_IKSAR: - m_pp.InnateSkills[InnateRegen] = InnateEnabled; - m_pp.InnateSkills[InnateInfravision] = InnateEnabled; - break; - case RT_VAH_SHIR: - m_pp.InnateSkills[InnateInfravision] = InnateEnabled; - break; - case RT_FROGLOK_2: - case RT_GHOST: - case RT_GHOUL: - case RT_SKELETON: - case RT_VAMPIRE: - case RT_WILL_O_WISP: - case RT_ZOMBIE: - case RT_SPECTRE: - case RT_GHOST_2: - case RT_GHOST_3: - case RT_DRAGON_2: - case RT_INNORUUK: - m_pp.InnateSkills[InnateUltraVision] = InnateEnabled; - break; - case RT_HUMAN: - case RT_GUARD: - case RT_BEGGAR: - case RT_HUMAN_2: - case RT_HUMAN_3: - case RT_FROGLOK_3: // client does froglok weird, but this should work out fine - break; - default: - m_pp.InnateSkills[InnateInfravision] = InnateEnabled; - break; + case RT_BARBARIAN: + case RT_BARBARIAN_2: + m_pp.InnateSkills[InnateSlam] = InnateEnabled; + break; + case RT_ERUDITE: + case RT_ERUDITE_2: + m_pp.InnateSkills[InnateLore] = InnateEnabled; + break; + case RT_WOOD_ELF: + case RT_GUARD_3: + m_pp.InnateSkills[InnateInfravision] = InnateEnabled; + break; + case RT_GNOME: + case RT_HIGH_ELF: + case RT_GUARD_2: + m_pp.InnateSkills[InnateInfravision] = InnateEnabled; + m_pp.InnateSkills[InnateLore] = InnateEnabled; + break; + case RT_TROLL: + case RT_TROLL_2: + m_pp.InnateSkills[InnateRegen] = InnateEnabled; + m_pp.InnateSkills[InnateSlam] = InnateEnabled; + m_pp.InnateSkills[InnateInfravision] = InnateEnabled; + break; + case RT_DWARF: + case RT_DWARF_2: + m_pp.InnateSkills[InnateInfravision] = InnateEnabled; + break; + case RT_OGRE: + case RT_OGRE_2: + m_pp.InnateSkills[InnateInfravision] = InnateEnabled; + m_pp.InnateSkills[InnateSlam] = InnateEnabled; + m_pp.InnateSkills[InnateNoBash] = InnateEnabled; + m_pp.InnateSkills[InnateBashDoor] = InnateEnabled; + break; + case RT_HALFLING: + case RT_HALFLING_2: + m_pp.InnateSkills[InnateInfravision] = InnateEnabled; + break; + case RT_IKSAR: + m_pp.InnateSkills[InnateRegen] = InnateEnabled; + m_pp.InnateSkills[InnateInfravision] = InnateEnabled; + break; + case RT_VAH_SHIR: + m_pp.InnateSkills[InnateInfravision] = InnateEnabled; + break; + case RT_DARK_ELF: + case RT_DARK_ELF_2: + case RT_VAMPIRE_2: + case RT_FROGLOK_2: + case RT_GHOST: + case RT_GHOUL: + case RT_SKELETON: + case RT_VAMPIRE: + case RT_WILL_O_WISP: + case RT_ZOMBIE: + case RT_SPECTRE: + case RT_GHOST_2: + case RT_GHOST_3: + case RT_DRAGON_2: + case RT_INNORUUK: + m_pp.InnateSkills[InnateUltraVision] = InnateEnabled; + break; + case RT_HUMAN: + case RT_GUARD: + case RT_BEGGAR: + case RT_HUMAN_2: + case RT_HUMAN_3: + case RT_FROGLOK_3: // client does froglok weird, but this should work out fine + break; + default: + m_pp.InnateSkills[InnateInfravision] = InnateEnabled; + break; } switch (class_) { - case DRUID: - m_pp.InnateSkills[InnateHarmony] = InnateEnabled; - break; - case BARD: - m_pp.InnateSkills[InnateReveal] = InnateEnabled; - break; - case ROGUE: - m_pp.InnateSkills[InnateSurprise] = InnateEnabled; - m_pp.InnateSkills[InnateReveal] = InnateEnabled; - break; - case RANGER: - m_pp.InnateSkills[InnateAwareness] = InnateEnabled; - break; - case MONK: - m_pp.InnateSkills[InnateSurprise] = InnateEnabled; - m_pp.InnateSkills[InnateAwareness] = InnateEnabled; - default: - break; + case DRUID: + m_pp.InnateSkills[InnateHarmony] = InnateEnabled; + break; + case BARD: + m_pp.InnateSkills[InnateReveal] = InnateEnabled; + break; + case ROGUE: + m_pp.InnateSkills[InnateSurprise] = InnateEnabled; + m_pp.InnateSkills[InnateReveal] = InnateEnabled; + break; + case RANGER: + m_pp.InnateSkills[InnateAwareness] = InnateEnabled; + break; + case MONK: + m_pp.InnateSkills[InnateSurprise] = InnateEnabled; + m_pp.InnateSkills[InnateAwareness] = InnateEnabled; + default: + break; } } @@ -9228,27 +9282,29 @@ void Client::SetSecondaryWeaponOrnamentation(uint32 model_id) */ bool Client::GotoPlayer(std::string player_name) { - auto characters = CharacterDataRepository::GetWhere( + const auto& l = CharacterDataRepository::GetWhere( database, fmt::format("name = '{}' AND last_login > (UNIX_TIMESTAMP() - 600) LIMIT 1", player_name) ); - for (auto &c: characters) { - if (c.zone_instance > 0 && !database.CheckInstanceExists(c.zone_instance)) { - Message(Chat::Yellow, "Instance no longer exists..."); - return false; - } - - if (c.zone_instance > 0) { - database.AddClientToInstance(c.zone_instance, CharacterID()); - } - - MovePC(c.zone_id, c.zone_instance, c.x, c.y, c.z, c.heading); - - return true; + if (l.empty()) { + return false; } - return false; + const auto& c = l[0]; + + if (c.zone_instance > 0 && !database.CheckInstanceExists(c.zone_instance)) { + Message(Chat::Yellow, "Instance no longer exists..."); + return false; + } + + if (c.zone_instance > 0) { + database.AddClientToInstance(c.zone_instance, CharacterID()); + } + + MovePC(c.zone_id, c.zone_instance, c.x, c.y, c.z, c.heading); + + return true; } bool Client::GotoPlayerGroup(const std::string& player_name) @@ -9421,6 +9477,7 @@ void Client::ShowDevToolsMenu() menu_reload_five += Saylink::Silent("#reload merchants", "Merchants"); menu_reload_five += " | " + Saylink::Silent("#reload npc_emotes", "NPC Emotes"); menu_reload_five += " | " + Saylink::Silent("#reload objects", "Objects"); + menu_reload_five += " | " + Saylink::Silent("#reload opcodes", "Opcodes"); menu_reload_six += Saylink::Silent("#reload perl_export", "Perl Event Export Settings"); menu_reload_six += " | " + Saylink::Silent("#reload quest", "Quests"); @@ -9985,7 +10042,7 @@ void Client::SendDzCompassUpdate() for (const auto& client_dz : GetDynamicZones()) { - auto compass = client_dz->GetCompassLocation(); + auto& compass = client_dz->GetCompassLocation(); if (zone && zone->IsZone(compass.zone_id, 0)) { DynamicZoneCompassEntry_Struct entry{}; @@ -10444,7 +10501,7 @@ void Client::SendToInstance(std::string instance_type, std::string zone_short_na uint16 instance_id = 0; if (current_bucket_value.length() > 0) { - instance_id = Strings::ToInt(current_bucket_value.c_str()); + instance_id = Strings::ToInt(current_bucket_value); } else { if(!database.GetUnusedInstanceID(instance_id)) { Message(Chat::White, "Server was unable to find a free instance id."); @@ -10710,11 +10767,11 @@ void Client::ApplyWeaponsStance() FindBuff(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_2H])) { BuffFadeBySpellID(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_2H]); } - else if (!HasShieldEquiped() && IsBuffSpell(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD]) && + else if (!HasShieldEquipped() && IsBuffSpell(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD]) && FindBuff(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD])) { BuffFadeBySpellID(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD]); } - else if (!HasDualWeaponsEquiped() && + else if (!HasDualWeaponsEquipped() && IsBuffSpell(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD]) && FindBuff(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD])) { BuffFadeBySpellID(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD]); @@ -10726,14 +10783,14 @@ void Client::ApplyWeaponsStance() } weaponstance.spellbonus_buff_spell_id = spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_2H]; } - else if (HasShieldEquiped() && IsBuffSpell(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD])) { + else if (HasShieldEquipped() && IsBuffSpell(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD])) { if (!FindBuff(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD])) { SpellOnTarget(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD], this); } weaponstance.spellbonus_buff_spell_id = spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD]; } - else if (HasDualWeaponsEquiped() && IsBuffSpell(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD])) { + else if (HasDualWeaponsEquipped() && IsBuffSpell(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD])) { if (!FindBuff(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD])) { SpellOnTarget(spellbonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD], this); @@ -10776,11 +10833,11 @@ void Client::ApplyWeaponsStance() FindBuff(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_2H])) { BuffFadeBySpellID(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_2H]); } - else if (!HasShieldEquiped() && IsBuffSpell(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD]) && + else if (!HasShieldEquipped() && IsBuffSpell(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD]) && FindBuff(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD])) { BuffFadeBySpellID(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD]); } - else if (!HasDualWeaponsEquiped() && IsBuffSpell(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD]) && + else if (!HasDualWeaponsEquipped() && IsBuffSpell(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD]) && FindBuff(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD])) { BuffFadeBySpellID(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD]); } @@ -10793,14 +10850,14 @@ void Client::ApplyWeaponsStance() } weaponstance.itembonus_buff_spell_id = itembonuses.WeaponStance[WEAPON_STANCE_TYPE_2H]; } - else if (HasShieldEquiped() && IsBuffSpell(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD])) { + else if (HasShieldEquipped() && IsBuffSpell(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD])) { if (!FindBuff(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD])) { SpellOnTarget(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD], this); } weaponstance.itembonus_buff_spell_id = itembonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD]; } - else if (HasDualWeaponsEquiped() && IsBuffSpell(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD])) { + else if (HasDualWeaponsEquipped() && IsBuffSpell(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD])) { if (!FindBuff(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD])) { SpellOnTarget(itembonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD], this); } @@ -10833,12 +10890,12 @@ void Client::ApplyWeaponsStance() BuffFadeBySpellID(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_2H]); } - else if (!HasShieldEquiped() && IsBuffSpell(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD]) && + else if (!HasShieldEquipped() && IsBuffSpell(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD]) && FindBuff(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD])) { BuffFadeBySpellID(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD]); } - else if (!HasDualWeaponsEquiped() && IsBuffSpell(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD]) && + else if (!HasDualWeaponsEquipped() && IsBuffSpell(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD]) && FindBuff(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD])) { BuffFadeBySpellID(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD]); } @@ -10851,14 +10908,14 @@ void Client::ApplyWeaponsStance() weaponstance.aabonus_buff_spell_id = aabonuses.WeaponStance[WEAPON_STANCE_TYPE_2H]; } - else if (HasShieldEquiped() && IsBuffSpell(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD])) { + else if (HasShieldEquipped() && IsBuffSpell(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD])) { if (!FindBuff(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD])) { SpellOnTarget(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD], this); } weaponstance.aabonus_buff_spell_id = aabonuses.WeaponStance[WEAPON_STANCE_TYPE_SHIELD]; } - else if (HasDualWeaponsEquiped() && IsBuffSpell(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD])) { + else if (HasDualWeaponsEquipped() && IsBuffSpell(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD])) { if (!FindBuff(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD])) { SpellOnTarget(aabonuses.WeaponStance[WEAPON_STANCE_TYPE_DUAL_WIELD], this); @@ -11094,12 +11151,12 @@ void Client::SaveDisciplines() uint16 Client::ScribeSpells(uint8 min_level, uint8 max_level) { - int available_book_slot = GetNextAvailableSpellBookSlot(); - std::vector spell_ids = GetScribeableSpells(min_level, max_level); - uint16 spell_count = spell_ids.size(); - uint16 scribed_spells = 0; - if (spell_count > 0) { - for (auto spell_id : spell_ids) { + auto available_book_slot = GetNextAvailableSpellBookSlot(); + std::vector spell_ids = GetScribeableSpells(min_level, max_level); + uint16 scribed_spells = 0; + + if (!spell_ids.empty()) { + for (const auto& spell_id : spell_ids) { if (available_book_slot == -1) { Message( Chat::Red, @@ -11139,13 +11196,13 @@ uint16 Client::ScribeSpells(uint8 min_level, uint8 max_level) uint16 Client::LearnDisciplines(uint8 min_level, uint8 max_level) { - int available_discipline_slot = GetNextAvailableDisciplineSlot(); - int character_id = CharacterID(); - std::vector spell_ids = GetLearnableDisciplines(min_level, max_level); - uint16 discipline_count = spell_ids.size(); - uint16 learned_disciplines = 0; - if (discipline_count > 0) { - for (auto spell_id : spell_ids) { + auto available_discipline_slot = GetNextAvailableDisciplineSlot(); + auto character_id = CharacterID(); + std::vector spell_ids = GetLearnableDisciplines(min_level, max_level); + uint16 learned_disciplines = 0; + + if (!spell_ids.empty()) { + for (const auto& spell_id : spell_ids) { if (available_discipline_slot == -1) { Message( Chat::Red, @@ -11229,7 +11286,7 @@ void Client::ReconnectUCS() { EQApplicationPacket *outapp = nullptr; std::string buffer; - std::string mail_key = database.GetMailKey(CharacterID(), true); + std::string mail_key = m_mail_key; EQ::versions::UCSVersion connection_type = EQ::versions::ucsUnknown; // chat server packet @@ -11428,6 +11485,16 @@ void Client::SendReloadCommandMessages() { ).c_str() ); + auto opcodes_link = Saylink::Silent("#reload opcodes"); + + Message( + Chat::White, + fmt::format( + "Usage: {} - Reloads Opcodes globally", + opcodes_link + ).c_str() + ); + auto perl_export_link = Saylink::Silent("#reload perl_export"); Message( @@ -11734,20 +11801,22 @@ std::vector Client::GetApplySpellList( if (apply_type == ApplySpellType::Raid && IsRaidGrouped()) { auto* r = GetRaid(); - auto group_id = r->GetGroup(this); - if (r && EQ::ValueWithin(group_id, 0, (MAX_RAID_GROUPS - 1))) { - for (const auto& m : r->members) { - if (m.member && m.member->IsClient() && (!is_raid_group_only || r->GetGroup(m.member) == group_id)) { - l.push_back(m.member); + if (r) { + auto group_id = r->GetGroup(this); + if (EQ::ValueWithin(group_id, 0, (MAX_RAID_GROUPS - 1))) { + for (const auto& m : r->members) { + if (m.member && m.member->IsClient() && (!is_raid_group_only || r->GetGroup(m.member) == group_id)) { + l.push_back(m.member); - if (allow_pets && m.member->HasPet()) { - l.push_back(m.member->GetPet()); - } + if (allow_pets && m.member->HasPet()) { + l.push_back(m.member->GetPet()); + } - if (allow_bots) { - const auto& sbl = entity_list.GetBotListByCharacterID(m.member->CharacterID()); - for (const auto& b : sbl) { - l.push_back(b); + if (allow_bots) { + const auto& sbl = entity_list.GetBotListByCharacterID(m.member->CharacterID()); + for (const auto& b : sbl) { + l.push_back(b); + } } } } @@ -12174,4 +12243,102 @@ void Client::PlayerTradeEventLog(Trade *t, Trade *t2) RecordPlayerEventLogWithClient(trader, PlayerEvent::TRADE, e); RecordPlayerEventLogWithClient(trader2, PlayerEvent::TRADE, e); -} \ No newline at end of file +} + +void Client::ShowSpells(Client* c, ShowSpellType show_spell_type) +{ + std::string spell_string; + + switch (show_spell_type) { + case ShowSpellType::Disciplines: + spell_string = "Discipline"; + break; + case ShowSpellType::Spells: + spell_string = "Spell"; + break; + default: + return; + } + + std::string spell_table; + + // Headers + spell_table += DialogueWindow::TableRow( + fmt::format( + "{}{}{}", + DialogueWindow::TableCell("Slot"), + DialogueWindow::TableCell(spell_string), + DialogueWindow::TableCell("Spell ID") + ) + ); + + std::map m; + auto spell_count = 0; + + if (show_spell_type == ShowSpellType::Disciplines) { + for (auto index = 0; index < MAX_PP_DISCIPLINES; index++) { + if (IsValidSpell(m_pp.disciplines.values[index])) { + m[index] = static_cast(m_pp.disciplines.values[index]); + } + } + } else if (show_spell_type == ShowSpellType::Spells) { + for (auto index = 0; index < EQ::spells::SPELL_GEM_COUNT; index++) { + if (IsValidSpell(m_pp.mem_spells[index])) { + m[index] = static_cast(m_pp.mem_spells[index]); + } + } + } + + for (const auto& s : m) { + spell_table += DialogueWindow::TableRow( + fmt::format( + "{}{}{}", + DialogueWindow::TableCell(std::to_string(s.first)), + DialogueWindow::TableCell(GetSpellName(s.second)), + DialogueWindow::TableCell(Strings::Commify(s.second)) + ) + ); + + spell_count++; + } + + if (!spell_count) { + c->Message( + Chat::White, + fmt::format( + "{} {} not have any {}s {}.", + c->GetTargetDescription(this, TargetDescriptionType::UCYou), + c == this ? "do" : "does", + Strings::ToLower(spell_string), + show_spell_type == ShowSpellType::Disciplines ? "learned" : "memorized" + ).c_str() + ); + return; + } + + if (spell_table.size() >= 4096) { + for (const auto& [index, spell_id] : m) { + c->Message( + Chat::White, + fmt::format( + "{}. {} ({})", + index, + GetSpellName(spell_id), + Strings::Commify(spell_id) + ).c_str() + ); + } + return; + } + + spell_table = DialogueWindow::Table(spell_table); + + c->SendPopupToClient( + fmt::format( + "{}s for {}", + spell_string, + c->GetTargetDescription(this, TargetDescriptionType::UCSelf) + ).c_str(), + spell_table.c_str() + ); +} diff --git a/zone/client.h b/zone/client.h index db63a5b24..eb144e2c9 100644 --- a/zone/client.h +++ b/zone/client.h @@ -67,6 +67,7 @@ namespace EQ #include "task_client_state.h" #include "cheat_manager.h" #include "../common/events/player_events.h" +#include "../common/data_verification.h" #ifdef _WINDOWS // since windows defines these within windef.h (which windows.h include) @@ -130,6 +131,12 @@ enum { HideCorpseNPC = 5 }; +typedef enum +{ + Disciplines, + Spells +} ShowSpellType; + typedef enum { Empty = 0, @@ -203,8 +210,8 @@ enum eInnateSkill { InnateDisabled = 255 }; -const std::string DIAWIND_RESPONSE_ONE_KEY = "diawind_npc_response_one"; -const std::string DIAWIND_RESPONSE_TWO_KEY = "diawind_npc_response_two"; +inline const std::string DIAWIND_RESPONSE_ONE_KEY = "diawind_npc_response_one"; +inline const std::string DIAWIND_RESPONSE_TWO_KEY = "diawind_npc_response_two"; const uint32 POPUPID_DIAWIND_ONE = 99999; const uint32 POPUPID_DIAWIND_TWO = 100000; const uint32 POPUPID_UPDATE_SHOWSTATSWINDOW = 1000000; @@ -306,7 +313,6 @@ public: void ReturnTraderReq(const EQApplicationPacket* app,int16 traderitemcharges, uint32 itemid = 0); void TradeRequestFailed(const EQApplicationPacket* app); void BuyTraderItem(TraderBuy_Struct* tbs,Client* trader,const EQApplicationPacket* app); - void TraderUpdate(uint16 slot_id,uint32 trader_id); void FinishTrade(Mob* with, bool finalizer = false, void* event_entry = nullptr, std::list* event_details = nullptr); void SendZonePoints(); @@ -322,7 +328,6 @@ public: void FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho); bool ShouldISpawnFor(Client *c) { return !GMHideMe(c) && !IsHoveringForRespawn(); } virtual bool Process(); - void ProcessPackets(); void QueuePacket(const EQApplicationPacket* app, bool ack_req = true, CLIENT_CONN_STATUS = CLIENT_CONNECTINGALL, eqFilterType filter=FilterNone); void FastQueuePacket(EQApplicationPacket** app, bool ack_req = true, CLIENT_CONN_STATUS = CLIENT_CONNECTINGALL); void ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_skill, const char* orig_message, const char* targetname = nullptr, bool is_silent = false); @@ -379,12 +384,8 @@ public: void SetPetCommandState(int button, int state); - bool CheckAccess(int16 iDBLevel, int16 iDefaultLevel); - - void CheckQuests(const char* zonename, const char* message, uint32 npc_id, uint32 item_id, Mob* other); bool AutoAttackEnabled() const { return auto_attack; } bool AutoFireEnabled() const { return auto_fire; } - void MakeCorpse(uint32 exploss); bool ChangeFirstName(const char* in_firstname,const char* gmname); @@ -394,7 +395,6 @@ public: virtual void SetMaxHP(); int32 LevelRegen(); - void HPTick(); void SetGM(bool toggle); void SetPVP(bool toggle, bool message = true); @@ -588,7 +588,7 @@ public: //This calculates total Attack Rating to match very close to what the client should show uint32 GetTotalATK(); uint32 GetATKRating(); - //This gets the skill value of the item type equiped in the Primary Slot + //This gets the skill value of the item type equipped in the Primary Slot uint16 GetPrimarySkillValue(); bool Flurry(); @@ -675,6 +675,8 @@ public: inline const int32 GetInstanceID() const { return zone->GetInstanceID(); } void SetZoning(bool in) { bZoning = in; } + void ShowSpells(Client* c, ShowSpellType show_spell_type); + FACTION_VALUE GetReverseFactionCon(Mob* iOther); FACTION_VALUE GetFactionLevel(uint32 char_id, uint32 npc_id, uint32 p_race, uint32 p_class, uint32 p_deity, int32 pFaction, Mob* tnpc); bool ReloadCharacterFaction(Client *c, uint32 facid, uint32 charid); @@ -938,7 +940,7 @@ public: inline uint32 GetAAPercent() const { return m_epp.perAA; } void SetAATitle(std::string title); void SetTitleSuffix(std::string suffix); - void MemorizeSpell(uint32 slot, uint32 spellid, uint32 scribing, uint32 reduction = 0); + void MemorizeSpell(uint32 slot, uint32 spell_id, uint32 scribing, uint32 reduction = 0); // Item methods void UseAugmentContainer(int container_slot); @@ -972,6 +974,8 @@ public: void DropItem(int16 slot_id, bool recurse = true); void DropItemQS(EQ::ItemInstance* inst, bool pickup); + bool IsAugmentRestricted(uint8 item_type, uint32 augment_restriction); + int GetItemLinkHash(const EQ::ItemInstance* inst); // move to ItemData..or make use of the pre-calculated database field void SendItemLink(const EQ::ItemInstance* inst, bool sendtoall=false); @@ -999,6 +1003,7 @@ public: void SetThirst(int32 in_thirst); void SetConsumption(int32 in_hunger, int32 in_thirst); bool IsStarved() const { if (GetGM() || !RuleB(Character, EnableFoodRequirement) || !RuleB(Character, EnableHungerPenalties)) return false; return m_pp.hunger_level == 0 || m_pp.thirst_level == 0; } + int32 GetIntoxication() const { return m_pp.intoxication; } bool CheckTradeLoreConflict(Client* other); bool CheckTradeNonDroppable(); @@ -1506,6 +1511,8 @@ public: bool GroupFollow(Client* inviter); inline bool GetRunMode() const { return runmode; } + virtual bool CheckWaterAutoFireLoS(Mob* m); + void SendReloadCommandMessages(); void SendItemRecastTimer(int32 recast_type, uint32 recast_delay = 0, bool in_ignore_casting_requirement = false); @@ -1588,6 +1595,7 @@ public: void SetEnvironmentDamageModifier(int32 val) { environment_damage_modifier = val; } inline bool GetInvulnerableEnvironmentDamage() const { return invulnerable_environment_damage; } void SetInvulnerableEnvironmentDamage(bool val) { invulnerable_environment_damage = val; } + void SetIntoxication(int32 in_intoxication); void ShowNumHits(); // work around function for numhits not showing on buffs @@ -1643,6 +1651,7 @@ public: PlayerEvent::PlayerEvent GetPlayerEvent(); void RecordKilledNPCEvent(NPC *n); + uint32 GetEXPForLevel(uint16 check_level); protected: friend class Mob; void CalcEdibleBonuses(StatBonuses* newbon); @@ -1719,7 +1728,6 @@ private: int64 CalcHPRegen(bool bCombat = false); int64 CalcManaRegen(bool bCombat = false); int64 CalcBaseManaRegen(); - uint64 GetClassHPFactor(); void DoHPRegen(); void DoManaRegen(); void DoStaminaHungerUpdate(); @@ -1819,7 +1827,6 @@ private: bool temp_pvp; void NPCSpawn(const Seperator* sep); - uint32 GetEXPForLevel(uint16 level); void SendLogoutPackets(); void SendZoneInPackets(); @@ -1842,9 +1849,6 @@ private: WaterRegionType last_region_type; - // this is used to try to cut back on position update reflections - int position_update_same_count; - PTimerList p_timers; //persistent timers Timer hpupdate_timer; Timer camp_timer; @@ -2033,6 +2037,7 @@ public: void SetBotSpawnLimit(int new_spawn_limit, uint8 class_id = NO_CLASS); void CampAllBots(uint8 class_id = NO_CLASS); + void SpawnRaidBotsOnConnect(Raid* raid); private: bool bot_owner_options[_booCount]; @@ -2043,6 +2048,12 @@ private: void SendMobPositions(); void PlayerTradeEventLog(Trade *t, Trade *t2); + // full and partial mail key cache + std::string m_mail_key_full; + std::string m_mail_key; +public: + const std::string &GetMailKeyFull() const; + const std::string &GetMailKey() const; }; #endif diff --git a/zone/client_mods.cpp b/zone/client_mods.cpp index 4adaee619..267d2dfc5 100644 --- a/zone/client_mods.cpp +++ b/zone/client_mods.cpp @@ -22,8 +22,6 @@ #include "../common/rulesys.h" #include "../common/spdat.h" -#include "../common/data_verification.h" - #include "client.h" #include "mob.h" @@ -290,7 +288,7 @@ int64 Client::CalcHPRegen(bool bCombat) if (!bCombat && CanFastRegen() && (IsSitting() || CanMedOnHorse())) { auto max_hp = GetMaxHP(); - int fast_regen = 6 * (max_hp / zone->newzone_data.fast_regen_hp); + int64 fast_regen = 6 * (max_hp / (zone ? zone->newzone_data.fast_regen_hp : 180)); if (base < fast_regen) // weird, but what the client is doing base = fast_regen; } @@ -508,50 +506,6 @@ int64 Client::CalcBaseHP() return base_hp; } -// This is for calculating Base HPs + STA bonus for SoD or later clients. -uint64 Client::GetClassHPFactor() -{ - int factor; - // Note: Base HP factor under level 41 is equal to factor / 12, and from level 41 to 80 is factor / 6. - // Base HP over level 80 is factor / 10 - // HP per STA point per level is factor / 30 for level 80+ - // HP per STA under level 40 is the level 80 HP Per STA / 120, and for over 40 it is / 60. - switch (GetClass()) { - case DRUID: - case ENCHANTER: - case NECROMANCER: - case MAGICIAN: - case WIZARD: - factor = 240; - break; - case BEASTLORD: - case BERSERKER: - case MONK: - case ROGUE: - case SHAMAN: - factor = 255; - break; - case BARD: - case CLERIC: - factor = 264; - break; - case SHADOWKNIGHT: - case PALADIN: - factor = 288; - break; - case RANGER: - factor = 276; - break; - case WARRIOR: - factor = 300; - break; - default: - factor = 240; - break; - } - return factor; -} - // This should return the combined AC of all the items the player is wearing. int32 Client::GetRawItemAC() { @@ -843,10 +797,10 @@ uint32 Client::CalcCurrentWeight() int32 Client::CalcAlcoholPhysicalEffect() { - if (m_pp.intoxication <= 55) { + if (GetIntoxication() <= 55) { return 0; } - return (m_pp.intoxication - 40) / 16; + return (GetIntoxication() - 40) / 16; } int32 Client::CalcSTR() @@ -924,8 +878,8 @@ int32 Client::CalcINT() int32 val = m_pp.INT + itembonuses.INT + spellbonuses.INT; int32 mod = aabonuses.INT; INT = val + mod; - if (m_pp.intoxication) { - int32 AlcINT = INT - (int32)((float)m_pp.intoxication / 200.0f * (float)INT) - 1; + if (GetIntoxication()) { + int32 AlcINT = INT - (int32)((float)GetIntoxication() / 200.0f * (float)INT) - 1; if ((AlcINT < (int)(0.2 * INT))) { INT = (int)(0.2f * (float)INT); } @@ -948,8 +902,8 @@ int32 Client::CalcWIS() int32 val = m_pp.WIS + itembonuses.WIS + spellbonuses.WIS; int32 mod = aabonuses.WIS; WIS = val + mod; - if (m_pp.intoxication) { - int32 AlcWIS = WIS - (int32)((float)m_pp.intoxication / 200.0f * (float)WIS) - 1; + if (GetIntoxication()) { + int32 AlcWIS = WIS - (int32)((float)GetIntoxication() / 200.0f * (float)WIS) - 1; if ((AlcWIS < (int)(0.2 * WIS))) { WIS = (int)(0.2f * (float)WIS); } diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 85fb68804..97fb2c21e 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -26,7 +26,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include #include #include "bot.h" -#include "bot_command.h" #ifdef _WINDOWS #define snprintf _snprintf @@ -39,23 +38,14 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include #endif -#include "../common/crc32.h" #include "../common/data_verification.h" -#include "../common/faction.h" -#include "../common/guilds.h" #include "../common/rdtsc.h" -#include "../common/rulesys.h" -#include "../common/skills.h" -#include "../common/spdat.h" -#include "../common/strings.h" #include "data_bucket.h" #include "event_codes.h" #include "expedition.h" -#include "expedition_database.h" #include "guild_mgr.h" #include "merc.h" #include "petitions.h" -#include "pets.h" #include "queryserv.h" #include "quest_parser_collection.h" #include "string_ids.h" @@ -71,7 +61,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "client.h" #include "../common/repositories/account_repository.h" -#include "bot.h" #include "../common/events/player_event_logs.h" extern QueryServ* QServ; @@ -607,28 +596,8 @@ void Client::CompleteConnect() if (raid) { SetRaidGrouped(true); raid->LearnMembers(); - std::list bots_list; - database.botdb.LoadBotsList(this->CharacterID(), bots_list); - std::vector r_members = raid->GetMembers(); - for (const RaidMember& iter : r_members) { - if (iter.member_name) { - for (const BotsAvailableList& b_iter : bots_list) - { - if (strcmp(iter.member_name, b_iter.Name) == 0) - { - char buffer[71] = "^spawn "; - strcat(buffer, iter.member_name); - bot_command_real_dispatch(this, buffer); - Bot* b = entity_list.GetBotByBotName(iter.member_name); - if (b) - { - b->SetRaidGrouped(true); - b->p_raid_instance = raid; - //b->SetFollowID(this->GetID()); - } - } - } - } + if (RuleB(Bots, Enabled)) { + SpawnRaidBotsOnConnect(raid); } raid->VerifyRaid(); raid->GetRaidDetails(); @@ -687,7 +656,7 @@ void Client::CompleteConnect() const SPDat_Spell_Struct &spell = spells[buffs[j1].spellid]; - int NimbusEffect = GetNimbusEffect(buffs[j1].spellid); + int NimbusEffect = GetSpellNimbusEffect(buffs[j1].spellid); if (NimbusEffect) { if (!IsNimbusEffectActive(NimbusEffect)) SendSpellEffect(NimbusEffect, 500, 0, 1, 3000, true); @@ -752,17 +721,17 @@ void Client::CompleteConnect() case SE_AddMeleeProc: case SE_WeaponProc: { - AddProcToWeapon(GetProcID(buffs[j1].spellid, x1), false, 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, buffs[j1].casterlevel, GetProcLimitTimer(buffs[j1].spellid, ProcType::MELEE_PROC)); + AddProcToWeapon(GetProcID(buffs[j1].spellid, x1), false, 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, buffs[j1].casterlevel, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::MELEE_PROC)); break; } case SE_DefensiveProc: { - AddDefensiveProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetProcLimitTimer(buffs[j1].spellid, ProcType::DEFENSIVE_PROC)); + AddDefensiveProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::DEFENSIVE_PROC)); break; } case SE_RangedProc: { - AddRangedProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetProcLimitTimer(buffs[j1].spellid, ProcType::RANGED_PROC)); + AddRangedProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::RANGED_PROC)); break; } } @@ -867,7 +836,7 @@ void Client::CompleteConnect() CalcItemScale(); DoItemEnterZone(); - if (zone->GetZoneID() == RuleI(World, GuildBankZoneID) && GuildBanks) + if (zone->GetZoneID() == Zones::GUILDHALL && GuildBanks) GuildBanks->SendGuildBank(this); if (ClientVersion() >= EQ::versions::ClientVersion::SoD) @@ -1296,7 +1265,13 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) database.LoadCharacterDisciplines(cid, &m_pp); /* Load Character Disciplines */ database.LoadCharacterLanguages(cid, &m_pp); /* Load Character Languages */ database.LoadCharacterLeadershipAA(cid, &m_pp); /* Load Character Leadership AA's */ - database.LoadCharacterTribute(cid, &m_pp); /* Load CharacterTribute */ + database.LoadCharacterTribute(this); /* Load CharacterTribute */ + + // this pattern is strange + // this is remnants of the old way of doing things + auto mail_keys = database.GetMailKey(CharacterID()); + m_mail_key_full = mail_keys.mail_key_full; + m_mail_key = mail_keys.mail_key; /* Load AdventureStats */ AdventureStats_Struct as; @@ -1340,7 +1315,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) /* If we can maintain intoxication across zones, check for it */ if (!RuleB(Character, MaintainIntoxicationAcrossZones)) - m_pp.intoxication = 0; + SetIntoxication(0); strcpy(name, m_pp.name); strcpy(lastname, m_pp.last_name); @@ -1426,7 +1401,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) } } m_pp.guildrank = rank; - if (zone->GetZoneID() == RuleI(World, GuildBankZoneID)) + if (zone->GetZoneID() == Zones::GUILDHALL) GuildBanker = (guild_mgr.IsGuildLeader(GuildID(), CharacterID()) || guild_mgr.GetBankerFlag(CharacterID())); } m_pp.guildbanker = GuildBanker; @@ -1539,30 +1514,31 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) } if (group) { - // If the group leader is not set, pull the group leader infomrmation from the database. - if (!group->GetLeader()) { - char ln[64]; - char MainTankName[64]; - char AssistName[64]; - char PullerName[64]; - char NPCMarkerName[64]; - char mentoree_name[64]; - int mentor_percent; - GroupLeadershipAA_Struct GLAA; - memset(ln, 0, 64); - database.GetGroupLeadershipInfo(group->GetID(), ln, MainTankName, AssistName, PullerName, NPCMarkerName, mentoree_name, &mentor_percent, &GLAA); - Client *c = entity_list.GetClientByName(ln); - if (c) - group->SetLeader(c); - - group->SetMainTank(MainTankName); - group->SetMainAssist(AssistName); - group->SetPuller(PullerName); - group->SetNPCMarker(NPCMarkerName); - group->SetGroupAAs(&GLAA); - group->SetGroupMentor(mentor_percent, mentoree_name); - } + char ln[64]; + char MainTankName[64]; + char AssistName[64]; + char PullerName[64]; + char NPCMarkerName[64]; + char mentoree_name[64]; + int mentor_percent; + GroupLeadershipAA_Struct GLAA; + memset(ln, 0, 64); + database.GetGroupLeadershipInfo(group->GetID(), ln, MainTankName, AssistName, PullerName, NPCMarkerName, mentoree_name, &mentor_percent, &GLAA); group->LearnMembers(); + + if (!group->GetLeader()) { + Client *c = entity_list.GetClientByName(ln); + if (c) { + group->SetLeader(c); + } + } + + group->SetMainTank(MainTankName); + group->SetMainAssist(AssistName); + group->SetPuller(PullerName); + group->SetNPCMarker(NPCMarkerName); + group->SetGroupAAs(&GLAA); + group->SetGroupMentor(mentor_percent, mentoree_name); JoinGroupXTargets(group); group->UpdatePlayer(this); LFG = false; @@ -1751,7 +1727,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) auto dz = zone->GetDynamicZone(); if (dz && dz->GetSafeReturnLocation().zone_id != 0) { - auto safereturn = dz->GetSafeReturnLocation(); + auto& safereturn = dz->GetSafeReturnLocation(); auto safereturn_entry = CharacterInstanceSafereturnsRepository::NewEntity(); safereturn_entry.character_id = CharacterID(); @@ -2144,6 +2120,11 @@ void Client::Handle_OP_AdventureMerchantRequest(const EQApplicationPacket *app) (tmp->GetClass() != DISCORD_MERCHANT) && (tmp->GetClass() != NORRATHS_KEEPERS_MERCHANT) && (tmp->GetClass() != DARK_REIGN_MERCHANT))) return; + if (!tmp->CastToNPC()->IsMerchantOpen()) { + tmp->SayString(zone->random.Int(MERCHANT_CLOSED_ONE, MERCHANT_CLOSED_THREE)); + return; + } + //you have to be somewhat close to them to be properly using them if (DistanceSquared(m_Position, tmp->GetPosition()) > USE_NPC_RANGE2) return; @@ -5397,7 +5378,7 @@ void Client::Handle_OP_CorpseDrag(const EQApplicationPacket *app) if (!corpse->CastToCorpse()->Summon(this, false, true)) return; - DraggedCorpses.push_back(std::pair(cds->CorpseName, corpse->GetID())); + DraggedCorpses.emplace_back(std::pair(cds->CorpseName, corpse->GetID())); MessageString(Chat::DefaultText, CORPSEDRAG_BEGIN, cds->CorpseName); } @@ -5599,10 +5580,8 @@ void Client::Handle_OP_DeleteItem(const EQApplicationPacket *app) if (IntoxicationIncrease < 0) IntoxicationIncrease = 1; - m_pp.intoxication += IntoxicationIncrease; + SetIntoxication(GetIntoxication()+IntoxicationIncrease); - if (m_pp.intoxication > 200) - m_pp.intoxication = 200; } DeleteItemInInventory(alc->from_slot, 1); @@ -6497,27 +6476,28 @@ void Client::Handle_OP_GMFind(const EQApplicationPacket *app) RecordPlayerEventLog(PlayerEvent::POSSIBLE_HACK, PlayerEvent::PossibleHackEvent{.message = "Used /find"}); return; } - if (app->size != sizeof(GMSummon_Struct)) { - LogError("Wrong size: OP_GMFind, size=[{}], expected [{}]", app->size, sizeof(GMSummon_Struct)); + + if (app->size != sizeof(GMFind_Struct)) { + LogError("Wrong size: OP_GMFind, size=[{}], expected [{}]", app->size, sizeof(GMFind_Struct)); return; } + //Break down incoming - GMSummon_Struct* request = (GMSummon_Struct*)app->pBuffer; + auto* request = (GMFind_Struct*) app->pBuffer; //Create a new outgoing - auto outapp = new EQApplicationPacket(OP_GMFind, sizeof(GMSummon_Struct)); - GMSummon_Struct* foundplayer = (GMSummon_Struct*)outapp->pBuffer; + auto outapp = new EQApplicationPacket(OP_GMFind, sizeof(GMFind_Struct)); + auto* foundplayer = (GMFind_Struct*) outapp->pBuffer; //Copy the constants strcpy(foundplayer->charname, request->charname); strcpy(foundplayer->gmname, request->gmname); //Check if the NPC exits intrazone... - Mob* gt = entity_list.GetMob(request->charname); - if (gt != 0) { + auto* gt = entity_list.GetMob(request->charname); + if (gt) { foundplayer->success = 1; - foundplayer->x = (int32)gt->GetX(); - foundplayer->y = (int32)gt->GetY(); - - foundplayer->z = (int32)gt->GetZ(); - foundplayer->zoneID = zone->GetZoneID(); + foundplayer->x = gt->GetX(); + foundplayer->y = gt->GetY(); + foundplayer->z = gt->GetZ(); + foundplayer->zoneID = zone->GetZoneID(); } //Send the packet... FastQueuePacket(&outapp); @@ -7030,7 +7010,7 @@ void Client::Handle_OP_GroupDisband(const EQApplicationPacket *app) //we have a raid.. see if we're in a raid group uint32 grp = raid->GetGroup(memberToDisband->GetName()); bool wasGrpLdr = raid->members[raid->GetPlayerIndex(memberToDisband->GetName())].is_group_leader; - if (grp < 12) { + if (grp < MAX_RAID_GROUPS) { if (wasGrpLdr) { raid->SetGroupLeader(memberToDisband->GetName(), false); for (int x = 0; x < MAX_RAID_MEMBERS; x++) { @@ -7446,7 +7426,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app) if (!GuildBanks) return; - if ((int)zone->GetZoneID() != RuleI(World, GuildBankZoneID)) + if (zone->GetZoneID() != Zones::GUILDHALL) { Message(Chat::Red, "The Guild Bank is not available in this zone."); @@ -7796,7 +7776,7 @@ void Client::Handle_OP_GuildCreate(const EQApplicationPacket *app) { Message(Chat::Yellow, "You are now the leader of %s", GuildName); - if (zone->GetZoneID() == RuleI(World, GuildBankZoneID) && GuildBanks) + if (zone->GetZoneID() == Zones::GUILDHALL && GuildBanks) GuildBanks->SendGuildBank(this); SendGuildRanks(); } @@ -8126,7 +8106,7 @@ void Client::Handle_OP_GuildInviteAccept(const EQApplicationPacket *app) Message(Chat::Red, "There was an error during the invite, DB may now be inconsistent."); return; } - if (zone->GetZoneID() == RuleI(World, GuildBankZoneID) && GuildBanks) + if (zone->GetZoneID() == Zones::GUILDHALL && GuildBanks) GuildBanks->SendGuildBank(this); } } @@ -8644,47 +8624,51 @@ void Client::Handle_OP_Illusion(const EQApplicationPacket *app) void Client::Handle_OP_InspectAnswer(const EQApplicationPacket *app) { - if (app->size != sizeof(InspectResponse_Struct)) { LogError("Wrong size: OP_InspectAnswer, size=[{}], expected [{}]", app->size, sizeof(InspectResponse_Struct)); return; } //Fills the app sent from client. - EQApplicationPacket* outapp = app->Copy(); - InspectResponse_Struct* insr = (InspectResponse_Struct*)outapp->pBuffer; - Mob* tmp = entity_list.GetMob(insr->TargetID); - const EQ::ItemData* item = nullptr; + auto outapp = app->Copy(); + auto insr = (InspectResponse_Struct *) outapp->pBuffer; + auto tmp = entity_list.GetMob(insr->TargetID); + const EQ::ItemData *item = nullptr; - int ornamentationAugtype = RuleI(Character, OrnamentationAugmentType); - for (int16 L = EQ::invslot::EQUIPMENT_BEGIN; L <= EQ::invslot::EQUIPMENT_END; L++) { - const EQ::ItemInstance* inst = GetInv().GetItem(L); + for (int16 L = EQ::invslot::EQUIPMENT_BEGIN; L <= EQ::invslot::EQUIPMENT_END; L++) { + const auto inst = GetInv().GetItem(L); item = inst ? inst->GetItem() : nullptr; if (item) { strcpy(insr->itemnames[L], item->Name); - if (inst && inst->GetOrnamentationAug(ornamentationAugtype)) { - const EQ::ItemData *aug_item = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem(); - insr->itemicons[L] = aug_item->Icon; - } - else if (inst->GetOrnamentationIcon()) { - insr->itemicons[L] = inst->GetOrnamentationIcon(); - } - else { + if (inst) { + const auto augment = inst->GetOrnamentationAugment(); + + if (augment) { + insr->itemicons[L] = augment->GetItem()->Icon; + } else if (inst->GetOrnamentationIcon()) { + insr->itemicons[L] = inst->GetOrnamentationIcon(); + } + } else { insr->itemicons[L] = item->Icon; } + } else { + insr->itemicons[L] = 0xFFFFFFFF; } - else { insr->itemicons[L] = 0xFFFFFFFF; } } - InspectMessage_Struct* newmessage = (InspectMessage_Struct*)insr->text; - InspectMessage_Struct& playermessage = GetInspectMessage(); - memcpy(&playermessage, newmessage, sizeof(InspectMessage_Struct)); - database.SaveCharacterInspectMessage(CharacterID(), &playermessage); + auto message = (InspectMessage_Struct *) insr->text; + auto inspect_message = GetInspectMessage(); - if (tmp != 0 && tmp->IsClient()) { tmp->CastToClient()->QueuePacket(outapp); } // Send answer to requester + memcpy(&inspect_message, message, sizeof(InspectMessage_Struct)); + database.SaveCharacterInspectMessage(CharacterID(), &inspect_message); - return; + if ( + tmp && + tmp->IsClient() + ) { + tmp->CastToClient()->QueuePacket(outapp); + } // Send answer to requester } void Client::Handle_OP_InspectMessageUpdate(const EQApplicationPacket *app) @@ -9254,7 +9238,7 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app) return; } if (i == 0) { - if (!IsCastWhileInvis(item->Click.Effect)) { + if (!IsCastWhileInvisibleSpell(item->Click.Effect)) { CommonBreakInvisible(); // client can't do this for us :( } if (GetClass() == BARD){ @@ -9326,7 +9310,7 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app) } if (i == 0) { - if (!IsCastWhileInvis(augitem->Click.Effect)) { + if (!IsCastWhileInvisibleSpell(augitem->Click.Effect)) { CommonBreakInvisible(); // client can't do this for us :( } if (GetClass() == BARD) { @@ -11491,7 +11475,7 @@ void Client::Handle_OP_PopupResponse(const EQApplicationPacket *app) if (EntityVariableExists(DIAWIND_RESPONSE_ONE_KEY)) { response = GetEntityVariable(DIAWIND_RESPONSE_ONE_KEY); if (!response.empty()) { - ChannelMessageReceived(8, 0, 100, response.c_str(), nullptr, true); + ChannelMessageReceived(ChatChannel_Say, 0, 100, response.c_str(), nullptr, true); } } break; @@ -11500,7 +11484,7 @@ void Client::Handle_OP_PopupResponse(const EQApplicationPacket *app) if (EntityVariableExists(DIAWIND_RESPONSE_TWO_KEY)) { response = GetEntityVariable(DIAWIND_RESPONSE_TWO_KEY); if (!response.empty()) { - ChannelMessageReceived(8, 0, 100, response.c_str(), nullptr, true); + ChannelMessageReceived(ChatChannel_Say, 0, 100, response.c_str(), nullptr, true); } } break; @@ -11706,7 +11690,7 @@ void Client::Handle_OP_QueryUCSServerStatus(const EQApplicationPacket *app) EQApplicationPacket* outapp = nullptr; std::string buffer; - std::string MailKey = database.GetMailKey(CharacterID(), true); + std::string MailKey = GetMailKey(); EQ::versions::UCSVersion ConnectionType = EQ::versions::ucsUnknown; // chat server packet @@ -11791,17 +11775,14 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket* app) { case RaidCommandInviteIntoExisting: case RaidCommandInvite: { - - Bot* player_to_invite = nullptr; - if (RuleB(Bots, Enabled) && entity_list.GetBotByBotName(raid_command_packet->player_name)) { - Bot* player_to_invite = entity_list.GetBotByBotName(raid_command_packet->player_name); - Group* player_to_invite_group = player_to_invite->GetGroup(); + auto player_to_invite = entity_list.GetBotByBotName(raid_command_packet->player_name); if (!player_to_invite) { break; } + auto player_to_invite_group = player_to_invite->GetGroup(); if (player_to_invite_group && player_to_invite_group->IsGroupMember(this)) { MessageString(Chat::Red, ALREADY_IN_PARTY); break; @@ -14045,9 +14026,8 @@ void Client::Handle_OP_ShopRequest(const EQApplicationPacket *app) if (tmp->Charmed()) action = 0; - // 1199 I don't have time for that now. etc if (!tmp->CastToNPC()->IsMerchantOpen()) { - tmp->SayString(zone->random.Int(1199, 1202)); + tmp->SayString(zone->random.Int(MERCHANT_CLOSED_ONE, MERCHANT_CLOSED_THREE)); action = 0; } @@ -14438,6 +14418,46 @@ void Client::Handle_OP_SwapSpell(const EQApplicationPacket *app) } void Client::Handle_OP_TargetCommand(const EQApplicationPacket *app) +{ + if (app->size != sizeof(ClientTarget_Struct)) { + LogError("OP size error: OP_TargetCommand expected:[{}] got:[{}]", sizeof(ClientTarget_Struct), app->size); + return; + } + + // Locate and cache new target + ClientTarget_Struct* ct = (ClientTarget_Struct*)app->pBuffer; + + bool can_target=false; + Mob *nt = entity_list.GetMob(ct->new_target); + + if (nt) { + if (GetGM() || (!nt->IsInvisible(this) && (DistanceSquared(m_Position, nt->GetPosition()) <= TARGETING_RANGE*TARGETING_RANGE))) { + if (nt->GetBodyType() == BT_NoTarget2 || + nt->GetBodyType() == BT_Special || + nt->GetBodyType() == BT_NoTarget) { + can_target = false; + } + else { + can_target = true; + } + } + } + + if (can_target) { + QueuePacket(app); + } + else { + MessageString(Chat::Red, DONT_SEE_TARGET); + auto outapp = new EQApplicationPacket(OP_TargetReject, sizeof(TargetReject_Struct)); + outapp->pBuffer[0] = 0x2f; + outapp->pBuffer[1] = 0x01; + outapp->pBuffer[4] = 0x0d; + QueuePacket(outapp); + safe_delete(outapp); + } +} + +void Client::Handle_OP_TargetMouse(const EQApplicationPacket *app) { if (app->size != sizeof(ClientTarget_Struct)) { LogError("OP size error: OP_TargetMouse expected:[{}] got:[{}]", sizeof(ClientTarget_Struct), app->size); @@ -14534,157 +14554,108 @@ void Client::Handle_OP_TargetCommand(const EQApplicationPacket *app) if (g && g->HasRole(this, RolePuller)) g->SetGroupPullerTarget(GetTarget()); - // For /target, send reject or success packet - if (app->GetOpcode() == OP_TargetCommand) { - if (GetTarget() && !GetTarget()->CastToMob()->IsInvisible(this) && (DistanceSquared(m_Position, GetTarget()->GetPosition()) <= TARGETING_RANGE*TARGETING_RANGE || GetGM())) { - if (GetTarget()->GetBodyType() == BT_NoTarget2 || GetTarget()->GetBodyType() == BT_Special - || GetTarget()->GetBodyType() == BT_NoTarget) - { - //Targeting something we shouldn't with /target - //but the client allows this without MQ so you don't flag it - auto outapp = new EQApplicationPacket(OP_TargetReject, sizeof(TargetReject_Struct)); - outapp->pBuffer[0] = 0x2f; - outapp->pBuffer[1] = 0x01; - outapp->pBuffer[4] = 0x0d; - if (GetTarget()) - { - SetTarget(nullptr); - } - QueuePacket(outapp); - safe_delete(outapp); - return; - } - - QueuePacket(app); - - GetTarget()->IsTargeted(1); - SendHPUpdate(); - } - else - { - auto outapp = new EQApplicationPacket(OP_TargetReject, sizeof(TargetReject_Struct)); - outapp->pBuffer[0] = 0x2f; - outapp->pBuffer[1] = 0x01; - outapp->pBuffer[4] = 0x0d; - if (GetTarget()) - { - SetTarget(nullptr); - } - QueuePacket(outapp); - safe_delete(outapp); - } - } - else + if (GetTarget()) { - if (GetTarget()) + if (GetGM()) { - if (GetGM()) - { - GetTarget()->IsTargeted(1); - return; - } - else if (RuleB(Character, AllowMQTarget)) - { - GetTarget()->IsTargeted(1); - return; - } - else if (cheat_manager.GetExemptStatus(Assist)) { - GetTarget()->IsTargeted(1); - cheat_manager.SetExemptStatus(Assist, false); - return; - } - else if (GetTarget()->IsClient()) - { - //make sure this client is in our raid/group - GetTarget()->IsTargeted(1); - return; - } - else if (GetTarget()->GetBodyType() == BT_NoTarget2 || GetTarget()->GetBodyType() == BT_Special - || GetTarget()->GetBodyType() == BT_NoTarget) - { - auto message = fmt::format( - "[{}] attempting to target something untargetable [{}] bodytype [{}]", - GetName(), - GetTarget()->GetName(), - (int) GetTarget()->GetBodyType() - ); - RecordPlayerEventLog(PlayerEvent::POSSIBLE_HACK, PlayerEvent::PossibleHackEvent{.message = message}); + GetTarget()->IsTargeted(1); + return; + } + else if (RuleB(Character, AllowMQTarget)) + { + GetTarget()->IsTargeted(1); + return; + } + else if (cheat_manager.GetExemptStatus(Assist)) { + GetTarget()->IsTargeted(1); + cheat_manager.SetExemptStatus(Assist, false); + return; + } + else if (GetTarget()->IsClient()) + { + //make sure this client is in our raid/group + GetTarget()->IsTargeted(1); + return; + } + else if (GetTarget()->GetBodyType() == BT_NoTarget2 || GetTarget()->GetBodyType() == BT_Special + || GetTarget()->GetBodyType() == BT_NoTarget) + { + auto message = fmt::format( + "[{}] attempting to target something untargetable [{}] bodytype [{}]", + GetName(), + GetTarget()->GetName(), + (int) GetTarget()->GetBodyType() + ); + RecordPlayerEventLog(PlayerEvent::POSSIBLE_HACK, PlayerEvent::PossibleHackEvent{.message = message}); - SetTarget((Mob*)nullptr); - return; - } - else if (cheat_manager.GetExemptStatus(Port)) { - GetTarget()->IsTargeted(1); - return; - } - else if (cheat_manager.GetExemptStatus(Sense)) { - GetTarget()->IsTargeted(1); - cheat_manager.SetExemptStatus(Sense, false); - return; - } - else if (IsXTarget(GetTarget())) + SetTarget((Mob*)nullptr); + return; + } + else if (cheat_manager.GetExemptStatus(Port)) { + GetTarget()->IsTargeted(1); + return; + } + else if (cheat_manager.GetExemptStatus(Sense)) { + GetTarget()->IsTargeted(1); + cheat_manager.SetExemptStatus(Sense, false); + return; + } + else if (IsXTarget(GetTarget())) + { + GetTarget()->IsTargeted(1); + return; + } + else if (GetTarget()->IsPetOwnerClient()) + { + GetTarget()->IsTargeted(1); + return; + } + else if (GetBindSightTarget()) + { + if (DistanceSquared(GetBindSightTarget()->GetPosition(), GetTarget()->GetPosition()) > (zone->newzone_data.maxclip*zone->newzone_data.maxclip)) { - GetTarget()->IsTargeted(1); - return; - } - else if (GetTarget()->IsPetOwnerClient()) - { - GetTarget()->IsTargeted(1); - return; - } - else if (GetBindSightTarget()) - { - if (DistanceSquared(GetBindSightTarget()->GetPosition(), GetTarget()->GetPosition()) > (zone->newzone_data.maxclip*zone->newzone_data.maxclip)) + if (DistanceSquared(m_Position, GetTarget()->GetPosition()) > (zone->newzone_data.maxclip*zone->newzone_data.maxclip)) { - if (DistanceSquared(m_Position, GetTarget()->GetPosition()) > (zone->newzone_data.maxclip*zone->newzone_data.maxclip)) - { - auto message = fmt::format( - "[{}] attempting to target something beyond the clip plane of {:.2f} " - "units, from ({:.2f}, {:.2f}, {:.2f}) to {} ({:.2f}, {:.2f}, " - "{:.2f})", - GetName(), - (zone->newzone_data.maxclip * zone->newzone_data.maxclip), GetX(), - GetY(), GetZ(), GetTarget()->GetName(), GetTarget()->GetX(), - GetTarget()->GetY(), GetTarget()->GetZ()); + auto message = fmt::format( + "[{}] attempting to target something beyond the clip plane of {:.2f} " + "units, from ({:.2f}, {:.2f}, {:.2f}) to {} ({:.2f}, {:.2f}, " + "{:.2f})", + GetName(), + (zone->newzone_data.maxclip * zone->newzone_data.maxclip), GetX(), + GetY(), GetZ(), GetTarget()->GetName(), GetTarget()->GetX(), + GetTarget()->GetY(), GetTarget()->GetZ()); - RecordPlayerEventLog(PlayerEvent::POSSIBLE_HACK, PlayerEvent::PossibleHackEvent{.message = message}); - SetTarget(nullptr); - return; - } + RecordPlayerEventLog(PlayerEvent::POSSIBLE_HACK, PlayerEvent::PossibleHackEvent{.message = message}); + SetTarget(nullptr); + return; } } - else if (DistanceSquared(m_Position, GetTarget()->GetPosition()) > (zone->newzone_data.maxclip*zone->newzone_data.maxclip)) - { - auto message = fmt::format( - "{} attempting to target something beyond the clip plane of {:.2f} " - "units, from ({:.2f}, {:.2f}, {:.2f}) to {} ({:.2f}, {:.2f}, {:.2f})", - GetName(), - (zone->newzone_data.maxclip * zone->newzone_data.maxclip), - GetX(), - GetY(), - GetZ(), - GetTarget()->GetName(), - GetTarget()->GetX(), - GetTarget()->GetY(), - GetTarget()->GetZ() - ); - - RecordPlayerEventLog(PlayerEvent::POSSIBLE_HACK, PlayerEvent::PossibleHackEvent{.message = message}); - SetTarget(nullptr); - return; - } - - GetTarget()->IsTargeted(1); } + else if (DistanceSquared(m_Position, GetTarget()->GetPosition()) > (zone->newzone_data.maxclip*zone->newzone_data.maxclip)) + { + auto message = fmt::format( + "{} attempting to target something beyond the clip plane of {:.2f} " + "units, from ({:.2f}, {:.2f}, {:.2f}) to {} ({:.2f}, {:.2f}, {:.2f})", + GetName(), + (zone->newzone_data.maxclip * zone->newzone_data.maxclip), + GetX(), + GetY(), + GetZ(), + GetTarget()->GetName(), + GetTarget()->GetX(), + GetTarget()->GetY(), + GetTarget()->GetZ() + ); + + RecordPlayerEventLog(PlayerEvent::POSSIBLE_HACK, PlayerEvent::PossibleHackEvent{.message = message}); + SetTarget(nullptr); + return; + } + + GetTarget()->IsTargeted(1); } return; } - -void Client::Handle_OP_TargetMouse(const EQApplicationPacket *app) -{ - Handle_OP_TargetCommand(app); -} - void Client::Handle_OP_TaskHistoryRequest(const EQApplicationPacket *app) { diff --git a/zone/client_process.cpp b/zone/client_process.cpp index 748fd80f5..f53972b8f 100644 --- a/zone/client_process.cpp +++ b/zone/client_process.cpp @@ -22,12 +22,8 @@ #include "../common/eqemu_logsys.h" #include "../common/global_define.h" #include -#include -#include #ifdef _WINDOWS - #include - #include #define snprintf _snprintf #define strncasecmp _strnicmp #define strcasecmp _stricmp @@ -54,8 +50,8 @@ #include "worldserver.h" #include "zone.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "../common/events/player_event_logs.h" +#include "water_map.h" extern QueryServ* QServ; extern Zone* zone; @@ -194,9 +190,10 @@ bool Client::Process() { } if (camp_timer.Check()) { - Raid* raid = entity_list.GetRaidByClient(this); - if (raid) - raid->RemoveMember(this->GetName()); + Raid *myraid = entity_list.GetRaidByClient(this); + if (myraid) { + myraid->MemberZoned(this); + } LeaveGroup(); Save(); if (GetMerc()) @@ -340,7 +337,7 @@ bool Client::Process() { if (ranged_timer.Check(false)) { if (GetTarget() && (GetTarget()->IsNPC() || GetTarget()->IsClient()) && IsAttackAllowed(GetTarget())) { if (GetTarget()->InFrontMob(this, GetTarget()->GetX(), GetTarget()->GetY())) { - if (CheckLosFN(GetTarget())) { + if (CheckLosFN(GetTarget()) && CheckWaterAutoFireLoS(GetTarget())) { //client has built in los check, but auto fire does not.. done last. RangedAttack(GetTarget()); if (CheckDoubleRangedAttack()) @@ -360,7 +357,7 @@ bool Client::Process() { if (ranged_timer.Check(false)) { if (GetTarget() && (GetTarget()->IsNPC() || GetTarget()->IsClient()) && IsAttackAllowed(GetTarget())) { if (GetTarget()->InFrontMob(this, GetTarget()->GetX(), GetTarget()->GetY())) { - if (CheckLosFN(GetTarget())) { + if (CheckLosFN(GetTarget()) && CheckWaterAutoFireLoS(GetTarget())) { //client has built in los check, but auto fire does not.. done last. ThrowingAttack(GetTarget()); } @@ -522,9 +519,9 @@ bool Client::Process() { Save(0); } - if (m_pp.intoxication > 0) + if (GetIntoxication() > 0) { - --m_pp.intoxication; + SetIntoxication(GetIntoxication()-1); CalcBonuses(); } @@ -689,61 +686,61 @@ bool Client::Process() { /* Just a set of actions preformed all over in Client::Process */ void Client::OnDisconnect(bool hard_disconnect) { - if(hard_disconnect) - { + if (hard_disconnect) { LeaveGroup(); - if (GetMerc()) - { + + if (GetMerc()) { GetMerc()->Save(); GetMerc()->Depop(); } - Raid *MyRaid = entity_list.GetRaidByClient(this); - if (MyRaid) - MyRaid->MemberZoned(this); + auto* r = entity_list.GetRaidByClient(this); - RecordPlayerEventLog(PlayerEvent::WENT_OFFLINE, PlayerEvent::EmptyEvent{}); - - if (parse->PlayerHasQuestSub(EVENT_DISCONNECT)) { - parse->EventPlayer(EVENT_DISCONNECT, this, "", 0); + if (r) { + r->MemberZoned(this); } /* QS: PlayerLogConnectDisconnect */ - if (RuleB(QueryServ, PlayerLogConnectDisconnect)){ + if (RuleB(QueryServ, PlayerLogConnectDisconnect)) { std::string event_desc = StringFormat("Disconnect :: in zoneid:%i instid:%i", GetZoneID(), GetInstanceID()); QServ->PlayerLogEvent(Player_Log_Connect_State, CharacterID(), event_desc); } } - if (!bZoning) - { + if (!bZoning) { SetDynamicZoneMemberStatus(DynamicZoneMemberStatus::Offline); } RemoveAllAuras(); - Mob *Other = trade->With(); - if(Other) - { + auto* o = trade->With(); + if (o) { LogTrading("Client disconnected during a trade. Returning their items"); FinishTrade(this); - if(Other->IsClient()) - Other->CastToClient()->FinishTrade(Other); + if (o->IsClient()) { + o->CastToClient()->FinishTrade(o); + } /* Reset both sides of the trade */ trade->Reset(); - Other->trade->Reset(); + o->trade->Reset(); } database.SetFirstLogon(CharacterID(), 0); //We change firstlogon status regardless of if a player logs out to zone or not, because we only want to trigger it on their first login from world. - /* Remove ourself from all proximities */ + /* Remove from all proximities */ ClearAllProximities(); auto outapp = new EQApplicationPacket(OP_LogoutReply); FastQueuePacket(&outapp); + RecordPlayerEventLog(PlayerEvent::WENT_OFFLINE, PlayerEvent::EmptyEvent{}); + + if (parse->PlayerHasQuestSub(EVENT_DISCONNECT)) { + parse->EventPlayer(EVENT_DISCONNECT, this, "", 0); + } + Disconnect(); } @@ -1039,7 +1036,7 @@ void Client::OPRezzAnswer(uint32 Action, uint32 SpellID, uint16 ZoneID, uint16 I BuffFadeNonPersistDeath(); } - int SpellEffectDescNum = GetSpellEffectDescNum(SpellID); + int SpellEffectDescNum = GetSpellEffectDescriptionNumber(SpellID); // Rez spells with Rez effects have this DescNum (first is Titanium, second is 6.2 Client) if(RuleB(Character, UseResurrectionSickness) && SpellEffectDescNum == 82 || SpellEffectDescNum == 39067) { SetHP(GetMaxHP() / 5); @@ -1145,6 +1142,7 @@ void Client::OPMemorizeSpell(const EQApplicationPacket* app) const auto* item = inst->GetItem(); if ( + item && RuleB(Character, RestrictSpellScribing) && !item->IsEquipable(GetRace(), GetClass()) ) { @@ -1971,7 +1969,7 @@ void Client::CalcRestState() for (unsigned int j = 0; j < buff_count; j++) { if(IsValidSpell(buffs[j].spellid)) { if(IsDetrimentalSpell(buffs[j].spellid) && (buffs[j].ticsremaining > 0)) - if(!DetrimentalSpellAllowsRest(buffs[j].spellid)) + if(!IsRestAllowedSpell(buffs[j].spellid)) return; } } @@ -2404,3 +2402,18 @@ void Client::SendGuildLFGuildStatus() worldserver.SendPacket(pack); safe_delete(pack); } + +bool Client::CheckWaterAutoFireLoS(Mob* m) +{ + if ( + !RuleB(Combat, WaterMatchRequiredForAutoFireLoS) || + !zone->watermap + ) { + return true; + } + + return ( + zone->watermap->InLiquid(GetPosition()) == + zone->watermap->InLiquid(m->GetPosition()) + ); +} diff --git a/zone/combat_record.cpp b/zone/combat_record.cpp index 814c2d256..6ef20dd16 100644 --- a/zone/combat_record.cpp +++ b/zone/combat_record.cpp @@ -2,7 +2,7 @@ #include "../common/eqemu_logsys.h" #include "../common/strings.h" -void CombatRecord::Start(std::string in_mob_name) +void CombatRecord::Start(const std::string& in_mob_name) { m_start_time = std::time(nullptr); m_end_time = 0; @@ -71,13 +71,3 @@ float CombatRecord::GetHealedReceivedPerSecond() const double time_in_combat = TimeInCombat(); return time_in_combat > 0 ? (m_heal_received / time_in_combat) : m_heal_received; } - -int64 CombatRecord::GetDamageReceived() const -{ - return m_damage_received; -} - -int64 CombatRecord::GetHealReceived() const -{ - return m_heal_received; -} diff --git a/zone/combat_record.h b/zone/combat_record.h index eff98a42c..cddfb937d 100644 --- a/zone/combat_record.h +++ b/zone/combat_record.h @@ -7,13 +7,11 @@ class CombatRecord { public: - void Start(std::string in_mob_name); + void Start(const std::string& in_mob_name); void Stop(); bool InCombat() const; void ProcessHPEvent(int64 hp, int64 current_hp); double TimeInCombat() const; - int64 GetDamageReceived() const; - int64 GetHealReceived() const; float GetDamageReceivedPerSecond() const; float GetHealedReceivedPerSecond() const; private: diff --git a/zone/command.cpp b/zone/command.cpp index 086558b4b..2fea8458e 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -1,9 +1,6 @@ #include -#include -#include #include -#include #include #include @@ -26,8 +23,6 @@ #include "command.h" #include "dynamic_zone.h" #include "expedition.h" -#include "guild_mgr.h" -#include "qglobals.h" #include "queryserv.h" #include "quest_parser_collection.h" #include "titles.h" @@ -136,6 +131,7 @@ int command_init(void) command_add("emptyinventory", "Clears your or your target's entire inventory (Equipment, General, Bank, and Shared Bank)", AccountStatus::GMImpossible, command_emptyinventory) || command_add("enablerecipe", "[Recipe ID] - Enables a Recipe", AccountStatus::QuestTroupe, command_enablerecipe) || command_add("endurance", "Restores your or your target's endurance.", AccountStatus::Guide, command_endurance) || + command_add("entityvariable", "[clear|delete|set|view] - Modify entity variables for yourself or your target", AccountStatus::GMAdmin, command_entityvariable) || command_add("exptoggle", "[Toggle] - Toggle your or your target's experience gain.", AccountStatus::QuestTroupe, command_exptoggle) || command_add("faction", "[Find (criteria | all ) | Review (criteria | all) | Reset (id)] - Resets Player's Faction", AccountStatus::QuestTroupe, command_faction) || command_add("factionassociation", "[factionid] [amount] - triggers a faction hits via association", AccountStatus::GMLeadAdmin, command_faction_association) || @@ -145,6 +141,7 @@ int command_init(void) command_add("findaliases", "[Search Criteria]- Searches for available command aliases, by alias or command", AccountStatus::Player, command_findaliases) || command_add("findcharacter", "[Search Criteria] - Search for a character", AccountStatus::Guide, command_findcharacter) || command_add("findclass", "[Search Criteria] - Search for a class", AccountStatus::Guide, command_findclass) || + command_add("findcurrency", "[Search Criteria] - Search for an alternate currency", AccountStatus::Guide, command_findcurrency) || command_add("findfaction", "[Search Criteria] - Search for a faction", AccountStatus::Guide, command_findfaction) || command_add("findnpctype", "[Search Criteria] - Search database NPC types", AccountStatus::GMAdmin, command_findnpctype) || command_add("findrace", "[Search Criteria] - Search for a race", AccountStatus::Guide, command_findrace) || @@ -208,8 +205,7 @@ int command_init(void) command_add("mana", "Fill your or your target's mana", AccountStatus::Guide, command_mana) || command_add("maxskills", "Maxes skills for you or your player target.", AccountStatus::GMMgmt, command_max_all_skills) || command_add("memspell", "[Spell ID] [Spell Gem] - Memorize a Spell by ID to the specified Spell Gem for you or your target", AccountStatus::Guide, command_memspell) || - command_add("merchant_close_shop", "Closes a merchant shop", AccountStatus::GMAdmin, command_merchantcloseshop) || - command_add("merchant_open_shop", "Opens a merchants shop", AccountStatus::GMAdmin, command_merchantopenshop) || + command_add("merchantshop", "Closes or opens your target merchant's shop", AccountStatus::GMAdmin, command_merchantshop) || command_add("modifynpcstat", "[Stat] [Value] - Modifies an NPC's stats temporarily.", AccountStatus::GMLeadAdmin, command_modifynpcstat) || command_add("motd", "[Message of the Day] - Set Message of the Day (leave empty to have no Message of the Day)", AccountStatus::GMLeadAdmin, command_motd) || command_add("movechar", "[Character ID|Character Name] [Zone ID|Zone Short Name] - Move an offline character to the specified zone", AccountStatus::Guide, command_movechar) || @@ -235,7 +231,7 @@ int command_init(void) command_add("nukeitem", "[Item ID] - Removes the specified Item ID from you or your player target's inventory", AccountStatus::GMLeadAdmin, command_nukeitem) || command_add("object", "List|Add|Edit|Move|Rotate|Copy|Save|Undo|Delete - Manipulate static and tradeskill objects within the zone", AccountStatus::GMAdmin, command_object) || command_add("oocmute", "[0|1] - Enable or Disable Server OOC", AccountStatus::GMMgmt, command_oocmute) || - command_add("opcode", "Reloads all server patches", AccountStatus::GMImpossible, command_opcode) || + command_add("opcode", "Reloads all opcodes from server patch files", AccountStatus::GMMgmt, command_reload) || command_add("path", "view and edit pathing", AccountStatus::GMMgmt, command_path) || command_add("peekinv", "[equip/gen/cursor/poss/limbo/curlim/trib/bank/shbank/allbank/trade/world/all] - Print out contents of your player target's inventory", AccountStatus::GMAdmin, command_peekinv) || command_add("peqzone", "[Zone ID|Zone Short Name] - Teleports you to the specified zone if you meet the requirements.", AccountStatus::Player, command_peqzone) || @@ -296,11 +292,11 @@ int command_init(void) command_add("setstartzone", "[Zone ID|Zone Short Name] - Sets your or your target's starting zone (Use '0' or 'Reset' to allow the player use of /setstartcity)", AccountStatus::QuestTroupe, command_setstartzone) || command_add("setstat", "Sets the stats to a specific value.", AccountStatus::Max, command_setstat) || command_add("setxp", "[value] - Set your or your player target's experience", AccountStatus::GMAdmin, command_setxp) || - command_add("showbonusstats", "[item|spell|all] Shows bonus stats for target from items or spells. Shows both by default.", AccountStatus::Guide, command_showbonusstats) || command_add("showbuffs", "List buffs active on your target or you if no target", AccountStatus::Guide, command_showbuffs) || command_add("shownumhits", "Shows buffs numhits for yourself.", AccountStatus::Player, command_shownumhits) || command_add("shownpcgloballoot", "Show global loot entries for your target NPC", AccountStatus::Guide, command_shownpcgloballoot) || command_add("showskills", "[Start Skill ID] [All] - Show the values of your or your player target's skills in a popup 50 at a time, use 'all' as second argument to show non-usable skill's values", AccountStatus::Guide, command_showskills) || + command_add("showspells", "[disciplines|spells] - Show your or your target's memorized spells or learned disciplines", AccountStatus::GMAdmin, command_showspells) || command_add("showspellslist", "Shows spell list of targeted NPC", AccountStatus::GMAdmin, command_showspellslist) || command_add("showstats", "Show details about you or your target", AccountStatus::Guide, command_showstats) || command_add("showzonegloballoot", "Show global loot entries for your current zone", AccountStatus::Guide, command_showzonegloballoot) || @@ -310,7 +306,6 @@ int command_init(void) command_add("spawneditmass", "[Search Criteria] [Edit Option] [Edit Value] [Apply] Mass editing spawn command (Apply is optional, 0 = False, 1 = True, default is False)", AccountStatus::GMLeadAdmin, command_spawneditmass) || command_add("spawnfix", "Find targeted NPC in database based on its X/Y/heading and update the database to make it spawn at your current location/heading.", AccountStatus::GMAreas, command_spawnfix) || command_add("spawnstatus", "[All|Disabled|Enabled|Spawn ID] - Show respawn timer status", AccountStatus::GMAdmin, command_spawnstatus) || - command_add("spellinfo", "[spellid] - Get detailed info about a spell", AccountStatus::Steward, command_spellinfo) || command_add("stun", "[duration] - Stuns you or your target for duration", AccountStatus::GMAdmin, command_stun) || command_add("summon", "[Character Name] - Summons your corpse, NPC, or player target, or by character name if specified", AccountStatus::QuestTroupe, command_summon) || command_add("summonburiedplayercorpse", "Summons the target's oldest buried corpse, if any exist.", AccountStatus::GMAdmin, command_summonburiedplayercorpse) || @@ -401,7 +396,7 @@ int command_init(void) for (const auto& w : working_cl) { auto cs = command_settings.find(w.first); if (cs == command_settings.end()) { - injected_command_settings.push_back(std::pair(w.first, w.second->admin)); + injected_command_settings.emplace_back(std::pair(w.first, w.second->admin)); LogInfo( "New Command [{}] found... Adding to `command_settings` table with admin [{}]...", w.first, @@ -971,7 +966,6 @@ void command_bot(Client *c, const Seperator *sep) #include "gm_commands/doanim.cpp" #include "gm_commands/door.cpp" #include "gm_commands/door_manipulation.cpp" -#include "gm_commands/door_manipulation.h" #include "gm_commands/dye.cpp" #include "gm_commands/dz.cpp" #include "gm_commands/dzkickplayers.cpp" @@ -982,12 +976,14 @@ void command_bot(Client *c, const Seperator *sep) #include "gm_commands/emptyinventory.cpp" #include "gm_commands/enablerecipe.cpp" #include "gm_commands/endurance.cpp" +#include "gm_commands/entityvariable.cpp" #include "gm_commands/exptoggle.cpp" #include "gm_commands/faction.cpp" #include "gm_commands/feature.cpp" #include "gm_commands/findaa.cpp" #include "gm_commands/findcharacter.cpp" #include "gm_commands/findclass.cpp" +#include "gm_commands/findcurrency.cpp" #include "gm_commands/findfaction.cpp" #include "gm_commands/findnpctype.cpp" #include "gm_commands/findrace.cpp" @@ -1048,8 +1044,7 @@ void command_bot(Client *c, const Seperator *sep) #include "gm_commands/mana.cpp" #include "gm_commands/max_all_skills.cpp" #include "gm_commands/memspell.cpp" -#include "gm_commands/merchantcloseshop.cpp" -#include "gm_commands/merchantopenshop.cpp" +#include "gm_commands/merchantshop.cpp" #include "gm_commands/modifynpcstat.cpp" #include "gm_commands/motd.cpp" #include "gm_commands/movechar.cpp" @@ -1075,7 +1070,6 @@ void command_bot(Client *c, const Seperator *sep) #include "gm_commands/nukeitem.cpp" #include "gm_commands/object.cpp" #include "gm_commands/oocmute.cpp" -#include "gm_commands/opcode.cpp" #include "gm_commands/path.cpp" #include "gm_commands/peekinv.cpp" #include "gm_commands/peqzone.cpp" @@ -1135,11 +1129,11 @@ void command_bot(Client *c, const Seperator *sep) #include "gm_commands/setstartzone.cpp" #include "gm_commands/setstat.cpp" #include "gm_commands/setxp.cpp" -#include "gm_commands/showbonusstats.cpp" #include "gm_commands/showbuffs.cpp" #include "gm_commands/shownpcgloballoot.cpp" #include "gm_commands/shownumhits.cpp" #include "gm_commands/showskills.cpp" +#include "gm_commands/showspells.cpp" #include "gm_commands/showspellslist.cpp" #include "gm_commands/showstats.cpp" #include "gm_commands/showzonegloballoot.cpp" @@ -1149,7 +1143,6 @@ void command_bot(Client *c, const Seperator *sep) #include "gm_commands/spawneditmass.cpp" #include "gm_commands/spawnfix.cpp" #include "gm_commands/spawnstatus.cpp" -#include "gm_commands/spellinfo.cpp" #include "gm_commands/faction_association.cpp" #include "gm_commands/stun.cpp" #include "gm_commands/summon.cpp" diff --git a/zone/command.h b/zone/command.h index 51ce0572c..9e6e1229d 100644 --- a/zone/command.h +++ b/zone/command.h @@ -82,6 +82,7 @@ void command_emoteview(Client *c, const Seperator *sep); void command_emptyinventory(Client *c, const Seperator *sep); void command_enablerecipe(Client *c, const Seperator *sep); void command_endurance(Client *c, const Seperator *sep); +void command_entityvariable(Client *c, const Seperator *sep); void command_exptoggle(Client *c, const Seperator *sep); void command_faction(Client *c, const Seperator *sep); void command_faction_association(Client *c, const Seperator *sep); @@ -90,6 +91,7 @@ void command_findaa(Client *c, const Seperator *sep); void command_findaliases(Client *c, const Seperator *sep); void command_findcharacter(Client *c, const Seperator *sep); void command_findclass(Client *c, const Seperator *sep); +void command_findcurrency(Client *c, const Seperator *sep); void command_findfaction(Client *c, const Seperator *sep); void command_findnpctype(Client *c, const Seperator *sep); void command_findrace(Client *c, const Seperator *sep); @@ -153,8 +155,7 @@ void command_makepet(Client *c, const Seperator *sep); void command_mana(Client *c, const Seperator *sep); void command_max_all_skills(Client *c, const Seperator *sep); void command_memspell(Client *c, const Seperator *sep); -void command_merchantcloseshop(Client *c, const Seperator *sep); -void command_merchantopenshop(Client *c, const Seperator *sep); +void command_merchantshop(Client *c, const Seperator *sep); void command_modifynpcstat(Client *c, const Seperator *sep); void command_motd(Client *c, const Seperator *sep); void command_movechar(Client *c, const Seperator *sep); @@ -180,12 +181,6 @@ void command_nukebuffs(Client *c, const Seperator *sep); void command_nukeitem(Client *c, const Seperator *sep); void command_object(Client *c, const Seperator *sep); void command_oocmute(Client *c, const Seperator *sep); -void command_opcode(Client *c, const Seperator *sep); - -#ifdef PACKET_PROFILER -void command_packetprofile(Client *c, const Seperator *sep); -#endif - void command_path(Client *c, const Seperator *sep); void command_peekinv(Client *c, const Seperator *sep); void command_peqzone(Client *c, const Seperator *sep); @@ -197,7 +192,6 @@ void command_petitems(Client *c, const Seperator *sep); void command_petitioninfo(Client *c, const Seperator *sep); void command_picklock(Client *c, const Seperator *sep); void command_profanity(Client *c, const Seperator *sep); - void command_proximity(Client *c, const Seperator *sep); void command_push(Client *c, const Seperator *sep); void command_pvp(Client *c, const Seperator *sep); @@ -245,12 +239,11 @@ void command_setskillall(Client *c, const Seperator *sep); void command_setstartzone(Client *c, const Seperator *sep); void command_setstat(Client *c, const Seperator *sep); void command_setxp(Client *c, const Seperator *sep); -void command_showbonusstats(Client *c, const Seperator *sep); void command_showbuffs(Client *c, const Seperator *sep); void command_shownumhits(Client *c, const Seperator *sep); void command_shownpcgloballoot(Client *c, const Seperator *sep); -void command_showpetspell(Client *c, const Seperator *sep); void command_showskills(Client *c, const Seperator *sep); +void command_showspells(Client *c, const Seperator *sep); void command_showspellslist(Client *c, const Seperator *sep); void command_showstats(Client *c, const Seperator *sep); void command_showzonegloballoot(Client *c, const Seperator *sep); @@ -260,7 +253,6 @@ void command_spawn(Client *c, const Seperator *sep); void command_spawneditmass(Client *c, const Seperator *sep); void command_spawnfix(Client *c, const Seperator *sep); void command_spawnstatus(Client *c, const Seperator *sep); -void command_spellinfo(Client *c, const Seperator *sep); void command_stun(Client *c, const Seperator *sep); void command_summon(Client *c, const Seperator *sep); void command_summonburiedplayercorpse(Client *c, const Seperator *sep); @@ -281,7 +273,6 @@ void command_trapinfo(Client *c, const Seperator *sep); void command_tune(Client *c, const Seperator *sep); void command_undye(Client *c, const Seperator *sep); void command_unfreeze(Client *c, const Seperator *sep); -void command_unlock(Client *c, const Seperator *sep); void command_unmemspell(Client *c, const Seperator *sep); void command_unmemspells(Client *c, const Seperator *sep); void command_unscribespell(Client *c, const Seperator *sep); diff --git a/zone/common.h b/zone/common.h index f932da9da..c019d408a 100644 --- a/zone/common.h +++ b/zone/common.h @@ -14,13 +14,10 @@ #define _CLIENTCORPSE(x) (x && x->IsCorpse() && x->CastToCorpse()->IsPlayerCorpse() && !x->CastToCorpse()->IsBecomeNPCCorpse()) #define _NPCCORPSE(x) (x && x->IsCorpse() && (x->CastToCorpse()->IsNPCCorpse() || x->CastToCorpse()->IsBecomeNPCCorpse())) #define _CLIENTPET(x) (x && x->CastToMob()->GetOwner() && x->CastToMob()->GetOwner()->IsClient()) -#define _NPCPET(x) (x && x->IsNPC() && x->CastToMob()->GetOwner() && x->CastToMob()->GetOwner()->IsNPC()) -#define _BECOMENPCPET(x) (x && x->CastToMob()->GetOwner() && x->CastToMob()->GetOwner()->IsClient() && x->CastToMob()->GetOwner()->CastToClient()->IsBecomeNPC()) //LOS Parameters: #define HEAD_POSITION 0.9f //ratio of GetSize() where NPCs see from #define SEE_POSITION 0.5f //ratio of GetSize() where NPCs try to see for LOS -#define CHECK_LOS_STEP 1.0f #define ARCHETYPE_HYBRID 1 #define ARCHETYPE_CASTER 2 @@ -44,7 +41,6 @@ //Spell specialization parameters, not sure of a better place for them #define SPECIALIZE_FIZZLE 11 //% fizzle chance reduce at 200 specialized -#define SPECIALIZE_MANA_REDUCE 12 //% mana cost reduction at 200 specialized //these are large right now because the x,y,z coords of the zone //lines do not make a lot of sense @@ -232,7 +228,6 @@ enum GravityBehavior { LevitateWhileRunning }; -struct TradeEntity; class Trade; enum TradeState { TradeNone, @@ -846,7 +841,6 @@ public: virtual ~Trade(); void Reset(); - void SetTradeCash(uint32 in_pp, uint32 in_gp, uint32 in_sp, uint32 in_cp); // Initiate a trade with another mob // Also puts other mob into trader mode with this mob diff --git a/zone/corpse.cpp b/zone/corpse.cpp index 1dbf01640..ea6bd14de 100644 --- a/zone/corpse.cpp +++ b/zone/corpse.cpp @@ -392,8 +392,7 @@ Corpse::Corpse(Client* client, int32 in_rezexp) : Mob ( /* Check Rule to see if we can leave corpses */ if ( - !RuleB(Character, LeaveNakedCorpses) || - RuleB(Character, LeaveCorpses) && + (!RuleB(Character, LeaveNakedCorpses) || RuleB(Character, LeaveCorpses)) && GetLevel() >= RuleI(Character, DeathItemLossLevel) ) { // cash @@ -750,7 +749,7 @@ bool Corpse::Save() { e.ornamentidfile = item->ornamentidfile; e.ornament_hero_model = item->ornament_hero_model; - ce.items.push_back(std::move(e)); + ce.items.emplace_back(std::move(e)); } /* Create New Corpse*/ diff --git a/zone/data_bucket.cpp b/zone/data_bucket.cpp index c96d417b4..19011cd80 100644 --- a/zone/data_bucket.cpp +++ b/zone/data_bucket.cpp @@ -1,11 +1,7 @@ #include "data_bucket.h" -#include -#include "../common/strings.h" #include "zonedb.h" -#include "../common/zone_store.h" #include #include -#include /** * Persists data via bucket_name as key @@ -23,7 +19,7 @@ void DataBucket::SetData(const std::string& bucket_key, const std::string& bucke if (isalpha(expires_time[0]) || isalpha(expires_time[expires_time.length() - 1])) { expires_time_unix = (long long) std::time(nullptr) + Strings::TimeToSeconds(expires_time); } else { - expires_time_unix = (long long) std::time(nullptr) + Strings::ToInt(expires_time.c_str()); + expires_time_unix = (long long) std::time(nullptr) + Strings::ToInt(expires_time); } } diff --git a/zone/dialogue_window.cpp b/zone/dialogue_window.cpp index e5835794e..1b3d0203b 100644 --- a/zone/dialogue_window.cpp +++ b/zone/dialogue_window.cpp @@ -1,7 +1,6 @@ #include #include "dialogue_window.h" -#include "../common/strings.h" void DialogueWindow::Render(Client *c, std::string markdown) { @@ -199,7 +198,7 @@ void DialogueWindow::Render(Client *c, std::string markdown) // set the popup id if (!popupid.empty()) { - popup_id = (Strings::IsNumber(popupid) ? Strings::ToInt(popupid.c_str()) : 0); + popup_id = (Strings::IsNumber(popupid) ? Strings::ToInt(popupid) : 0); } } } @@ -231,7 +230,7 @@ void DialogueWindow::Render(Client *c, std::string markdown) Strings::FindReplace(output, fmt::format("secondresponseid:{}", secondresponseid), ""); if (!secondresponseid.empty()) { - negative_id = (Strings::IsNumber(secondresponseid) ? Strings::ToInt(secondresponseid.c_str()) : 0); + negative_id = (Strings::IsNumber(secondresponseid) ? Strings::ToInt(secondresponseid) : 0); } } } @@ -285,7 +284,7 @@ void DialogueWindow::Render(Client *c, std::string markdown) size_t link_open = bracket_message.find('\x12'); size_t link_close = bracket_message.find_last_of('\x12'); if (link_open != link_close && (bracket_message.length() - link_open) > EQ::constants::SAY_LINK_BODY_SIZE) { - replacements.insert( + replacements.emplace( std::pair( bracket_message, bracket_message.substr(EQ::constants::SAY_LINK_BODY_SIZE + 1) @@ -410,7 +409,7 @@ void DialogueWindow::Render(Client *c, std::string markdown) // click response // window type response - uint32 window_type = (Strings::IsNumber(wintype) ? Strings::ToInt(wintype.c_str()) : 0); + uint32 window_type = (Strings::IsNumber(wintype) ? Strings::ToInt(wintype) : 0); std::string click_response_button = (window_type == 1 ? "Yes" : "OK"); std::string click_response = fmt::format( "Click [{}] to continue...", diff --git a/zone/doors.cpp b/zone/doors.cpp index a21244c0b..8b7a227c7 100644 --- a/zone/doors.cpp +++ b/zone/doors.cpp @@ -30,10 +30,8 @@ #include "string_ids.h" #include "worldserver.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "../common/repositories/criteria/content_filter_criteria.h" -#include #include #define OPEN_DOOR 0x02 @@ -222,7 +220,7 @@ void Doors::HandleClick(Client *sender, uint8 trigger) } } - if (m_dz_switch_id != 0) { + if (sender && m_dz_switch_id != 0) { sender->UpdateTasksOnTouchSwitch(m_dz_switch_id); if (sender->TryMovePCDynamicZoneSwitch(m_dz_switch_id)) { safe_delete(outapp); @@ -625,13 +623,13 @@ void Doors::ForceOpen(Mob *sender, bool alt_mode) if (!alt_mode) { // original function if (!m_is_open) { if (!m_disable_timer) { - LogDoorsDetail("door_id [{}] starting timer", md->doorid); + LogDoorsDetail("door_id [{}] starting timer", m_door_id); m_close_timer.Start(); } m_is_open = true; } else { - LogDoorsDetail("door_id [{}] disable timer", md->doorid); + LogDoorsDetail("door_id [{}] disable timer", m_door_id); m_close_timer.Disable(); if (!m_disable_timer) { m_is_open = false; @@ -640,7 +638,7 @@ void Doors::ForceOpen(Mob *sender, bool alt_mode) } else { // alternative function if (!m_disable_timer) { - LogDoorsDetail("door_id [{}] alt starting timer", md->doorid); + LogDoorsDetail("door_id [{}] alt starting timer", m_door_id); m_close_timer.Start(); } m_is_open = true; diff --git a/zone/dynamic_zone.cpp b/zone/dynamic_zone.cpp index 4f01c737e..65087f9ac 100644 --- a/zone/dynamic_zone.cpp +++ b/zone/dynamic_zone.cpp @@ -23,7 +23,6 @@ #include "expedition.h" #include "string_ids.h" #include "worldserver.h" -#include "../common/eqemu_logsys.h" extern WorldServer worldserver; diff --git a/zone/effects.cpp b/zone/effects.cpp index 87374cf3b..06292b28e 100644 --- a/zone/effects.cpp +++ b/zone/effects.cpp @@ -28,7 +28,6 @@ #include "string_ids.h" #include "worldserver.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "position.h" float Mob::GetActSpellRange(uint16 spell_id, float range) @@ -811,9 +810,9 @@ void Client::SendDisciplineUpdate() { bool Client::UseDiscipline(uint32 spell_id, uint32 target) { // Dont let client waste a reuse timer if they can't use the disc - if ((IsStunned() && !IgnoreCastingRestriction(spell_id))|| + if ((IsStunned() && !IsCastNotStandingSpell(spell_id))|| IsFeared() || - (IsMezzed() && !IgnoreCastingRestriction(spell_id)) || + (IsMezzed() && !IsCastNotStandingSpell(spell_id)) || IsAmnesiad() || IsPet()) { @@ -838,7 +837,7 @@ bool Client::UseDiscipline(uint32 spell_id, uint32 target) { return false; } - if (DivineAura() && !IgnoreCastingRestriction(spell_id)) { + if (DivineAura() && !IsCastNotStandingSpell(spell_id)) { return false; } diff --git a/zone/embparser.cpp b/zone/embparser.cpp index 114766c36..6763b5fa7 100644 --- a/zone/embparser.cpp +++ b/zone/embparser.cpp @@ -179,6 +179,10 @@ const char *QuestEventSubroutines[_LargestEventID] = { "EVENT_ITEM_CLICK_CAST_CLIENT", "EVENT_DESTROY_ITEM_CLIENT", "EVENT_DROP_ITEM_CLIENT", + "EVENT_MEMORIZE_SPELL", + "EVENT_UNMEMORIZE_SPELL", + "EVENT_SCRIBE_SPELL", + "EVENT_UNSCRIBE_SPELL", // Add new events before these or Lua crashes "EVENT_SPELL_EFFECT_BOT", "EVENT_SPELL_EFFECT_BUFF_TIC_BOT" @@ -520,8 +524,6 @@ bool PerlembParser::SpellHasQuestSub(uint32 spell_id, QuestEventID evt) bool PerlembParser::ItemHasQuestSub(EQ::ItemInstance *itm, QuestEventID evt) { - std::stringstream package_name; - package_name << "qst_item_" << itm->GetID(); if (!perl) { return false; @@ -535,6 +537,9 @@ bool PerlembParser::ItemHasQuestSub(EQ::ItemInstance *itm, QuestEventID evt) return false; } + std::stringstream package_name; + package_name << "qst_item_" << itm->GetID(); + const char *subname = QuestEventSubroutines[evt]; auto iter = item_quest_status_.find(itm->GetID()); @@ -834,25 +839,6 @@ void PerlembParser::ExportVar(const char *pkgprefix, const char *varname, float } } -void PerlembParser::ExportVarComplex(const char *pkgprefix, const char *varname, const char *value) -{ - - if (!perl) { - return; - } - try { - perl->eval(std::string("$").append(pkgprefix).append("::").append(varname).append("=").append(value).append(";").c_str()); - } - catch (std::string e) { - AddError( - fmt::format( - "Error exporting Perl variable [{}]", - e - ) - ); - } -} - void PerlembParser::ExportVar(const char *pkgprefix, const char *varname, const char *value) { if (!perl) { @@ -2178,6 +2164,19 @@ void PerlembParser::ExportEventVariables( break; } + case EVENT_MEMORIZE_SPELL: + case EVENT_UNMEMORIZE_SPELL: + case EVENT_SCRIBE_SPELL: + case EVENT_UNSCRIBE_SPELL: { + Seperator sep(data); + ExportVar(package_name.c_str(), "slot_id", sep.arg[0]); + ExportVar(package_name.c_str(), "spell_id", sep.arg[1]); + if (IsValidSpell(Strings::ToUnsignedInt(sep.arg[1]))) { + ExportVar(package_name.c_str(), "spell", "Spell", (void*)&spells[Strings::ToUnsignedInt(sep.arg[1])]); + } + break; + } + default: { break; } diff --git a/zone/embparser.h b/zone/embparser.h index c22417a1b..6377e194a 100644 --- a/zone/embparser.h +++ b/zone/embparser.h @@ -145,7 +145,6 @@ private: void ExportVar(const char *pkgprefix, const char *varname, uint32 value); void ExportVar(const char *pkgprefix, const char *varname, float value); void ExportVar(const char* pkgprefix, const char* varname, const char* classname, void* value); - void ExportVarComplex(const char *pkgprefix, const char *varname, const char *value); int EventCommon( QuestEventID event, diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 1bd461fdf..6dc6ea70a 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -18,17 +18,16 @@ #include "../common/features.h" #include "../common/content/world_content_service.h" +#include "../common/zone_store.h" #ifdef EMBPERL #ifdef EMBPERL_XS #include "../common/global_define.h" #include "../common/misc_functions.h" -#include "../common/eqemu_logsys.h" #include "dialogue_window.h" #include "embperl.h" -#include "embxs.h" #include "entity.h" #include "expedition.h" #include "queryserv.h" @@ -529,10 +528,10 @@ std::string Perl__getspellname(uint32 spell_id) return quest_manager.getspellname(spell_id); } -int Perl__get_spell_level(uint32_t spell_id, int class_id) +uint8 Perl__get_spell_level(uint16 spell_id, uint8 class_id) { - int spell_level = IsValidSpell(spell_id) ? GetSpellLevel(spell_id, class_id) : 0; - return (spell_level > RuleI(Character, MaxLevel)) ? 0 : spell_level; + const auto spell_level = GetSpellLevel(spell_id, class_id); + return spell_level > RuleI(Character, MaxLevel) ? UINT8_MAX : spell_level; } std::string Perl__getskillname(int skill_id) @@ -850,11 +849,21 @@ void Perl__addldonwin(uint32 theme_id) quest_manager.addldonwin(theme_id); } +void Perl__removeldonwin(uint32 theme_id) +{ + quest_manager.removeldonwin(theme_id); +} + void Perl__addldonloss(uint32 theme_id) { quest_manager.addldonloss(theme_id); } +void Perl__removeldonloss(uint32 theme_id) +{ + quest_manager.removeldonloss(theme_id); +} + void Perl__setnexthpevent(int at_mob_percentage) { quest_manager.setnexthpevent(at_mob_percentage); @@ -1686,14 +1695,489 @@ bool Perl__IsRunning() return quest_manager.IsRunning(); } -bool Perl__IsEffectInSpell(uint32 spell_id, uint32 effect_id) +bool Perl__IsEffectInSpell(uint16 spell_id, int effect_id) { return IsEffectInSpell(spell_id, effect_id); } bool Perl__IsBeneficialSpell(uint16 spell_id) { - return BeneficialSpell(spell_id); + return IsBeneficialSpell(spell_id); +} + +bool Perl__IsDetrimentalSpell(uint16 spell_id) +{ + return IsDetrimentalSpell(spell_id); +} + +bool Perl__IsTargetableAESpell(uint16 spell_id) +{ + return IsTargetableAESpell(spell_id); +} + +bool Perl__IsSacrificeSpell(uint16 spell_id) +{ + return IsSacrificeSpell(spell_id); +} + +bool Perl__IsLifetapSpell(uint16 spell_id) +{ + return IsLifetapSpell(spell_id); +} + +bool Perl__IsMesmerizeSpell(uint16 spell_id) +{ + return IsMesmerizeSpell(spell_id); +} + +bool Perl__IsStunSpell(uint16 spell_id) +{ + return IsStunSpell(spell_id); +} + +bool Perl__IsSummonSpell(uint16 spell_id) +{ + return IsSummonSpell(spell_id); +} + +bool Perl__IsDamageSpell(uint16 spell_id) +{ + return IsDamageSpell(spell_id); +} + +bool Perl__IsFearSpell(uint16 spell_id) +{ + return IsFearSpell(spell_id); +} + +bool Perl__IsCureSpell(uint16 spell_id) +{ + return IsCureSpell(spell_id); +} + +bool Perl__IsHasteSpell(uint16 spell_id) +{ + return IsHasteSpell(spell_id); +} + +bool Perl__IsHarmonySpell(uint16 spell_id) +{ + return IsHarmonySpell(spell_id); +} + +bool Perl__IsPercentalHealSpell(uint16 spell_id) +{ + return IsPercentalHealSpell(spell_id); +} + +bool Perl__IsGroupOnlySpell(uint16 spell_id) +{ + return IsGroupOnlySpell(spell_id); +} + +bool Perl__IsInvisibleSpell(uint16 spell_id) +{ + return IsInvisibleSpell(spell_id); +} + +bool Perl__IsInvulnerabilitySpell(uint16 spell_id) +{ + return IsInvulnerabilitySpell(spell_id); +} + +bool Perl__IsCompleteHealDurationSpell(uint16 spell_id) +{ + return IsCompleteHealDurationSpell(spell_id); +} + +bool Perl__IsPoisonCounterSpell(uint16 spell_id) +{ + return IsPoisonCounterSpell(spell_id); +} + +bool Perl__IsDiseaseCounterSpell(uint16 spell_id) +{ + return IsDiseaseCounterSpell(spell_id); +} + +bool Perl__IsSummonItemSpell(uint16 spell_id) +{ + return IsSummonItemSpell(spell_id); +} + +bool Perl__IsSummonSkeletonSpell(uint16 spell_id) +{ + return IsSummonSkeletonSpell(spell_id); +} + +bool Perl__IsSummonPetSpell(uint16 spell_id) +{ + return IsSummonPetSpell(spell_id); +} + +bool Perl__IsPetSpell(uint16 spell_id) +{ + return IsPetSpell(spell_id); +} + +bool Perl__IsSummonPCSpell(uint16 spell_id) +{ + return IsSummonPCSpell(spell_id); +} + +bool Perl__IsCharmSpell(uint16 spell_id) +{ + return IsCharmSpell(spell_id); +} + +bool Perl__IsBlindSpell(uint16 spell_id) +{ + return IsBlindSpell(spell_id); +} + +bool Perl__IsHealthSpell(uint16 spell_id) +{ + return IsHealthSpell(spell_id); +} + +bool Perl__IsCastTimeReductionSpell(uint16 spell_id) +{ + return IsCastTimeReductionSpell(spell_id); +} + +bool Perl__IsIncreaseDurationSpell(uint16 spell_id) +{ + return IsIncreaseDurationSpell(spell_id); +} + +bool Perl__IsManaCostReductionSpell(uint16 spell_id) +{ + return IsManaCostReductionSpell(spell_id); +} + +bool Perl__IsIncreaseRangeSpell(uint16 spell_id) +{ + return IsIncreaseRangeSpell(spell_id); +} + +bool Perl__IsImprovedHealingSpell(uint16 spell_id) +{ + return IsImprovedHealingSpell(spell_id); +} + +bool Perl__IsImprovedDamageSpell(uint16 spell_id) +{ + return IsImprovedDamageSpell(spell_id); +} + +bool Perl__IsAEDurationSpell(uint16 spell_id) +{ + return IsAEDurationSpell(spell_id); +} + +bool Perl__IsPureNukeSpell(uint16 spell_id) +{ + return IsPureNukeSpell(spell_id); +} + +bool Perl__IsAENukeSpell(uint16 spell_id) +{ + return IsAENukeSpell(spell_id); +} + +bool Perl__IsPBAENukeSpell(uint16 spell_id) +{ + return IsPBAENukeSpell(spell_id); +} + +bool Perl__IsAERainNukeSpell(uint16 spell_id) +{ + return IsAERainNukeSpell(spell_id); +} + +bool Perl__IsPartialResistableSpell(uint16 spell_id) +{ + return IsPartialResistableSpell(spell_id); +} + +bool Perl__IsResistableSpell(uint16 spell_id) +{ + return IsResistableSpell(spell_id); +} + +bool Perl__IsGroupSpell(uint16 spell_id) +{ + return IsGroupSpell(spell_id); +} + +bool Perl__IsTGBCompatibleSpell(uint16 spell_id) +{ + return IsTGBCompatibleSpell(spell_id); +} + +bool Perl__IsBardSong(uint16 spell_id) +{ + return IsBardSong(spell_id); +} + +bool Perl__IsPulsingBardSong(uint16 spell_id) +{ + return IsPulsingBardSong(spell_id); +} + +bool Perl__IsDisciplineBuff(uint16 spell_id) +{ + return IsDisciplineBuff(spell_id); +} + +bool Perl__IsDiscipline(uint16 spell_id) +{ + return IsDiscipline(spell_id); +} + +bool Perl__IsCombatSkill(uint16 spell_id) +{ + return IsCombatSkill(spell_id); +} + +bool Perl__IsResurrectionEffects(uint16 spell_id) +{ + return IsResurrectionEffects(spell_id); +} + +bool Perl__IsRuneSpell(uint16 spell_id) +{ + return IsRuneSpell(spell_id); +} + +bool Perl__IsMagicRuneSpell(uint16 spell_id) +{ + return IsMagicRuneSpell(spell_id); +} + +bool Perl__IsManaTapSpell(uint16 spell_id) +{ + return IsManaTapSpell(spell_id); +} + +bool Perl__IsAllianceSpell(uint16 spell_id) +{ + return IsAllianceSpell(spell_id); +} + +bool Perl__IsDeathSaveSpell(uint16 spell_id) +{ + return IsDeathSaveSpell(spell_id); +} + +bool Perl__IsPartialDeathSaveSpell(uint16 spell_id) +{ + return IsPartialDeathSaveSpell(spell_id); +} + +bool Perl__IsFullDeathSaveSpell(uint16 spell_id) +{ + return IsFullDeathSaveSpell(spell_id); +} + +bool Perl__IsShadowStepSpell(uint16 spell_id) +{ + return IsShadowStepSpell(spell_id); +} + +bool Perl__IsSuccorSpell(uint16 spell_id) +{ + return IsSuccorSpell(spell_id); +} + +bool Perl__IsTeleportSpell(uint16 spell_id) +{ + return IsTeleportSpell(spell_id); +} + +bool Perl__IsTranslocateSpell(uint16 spell_id) +{ + return IsTranslocateSpell(spell_id); +} + +bool Perl__IsGateSpell(uint16 spell_id) +{ + return IsGateSpell(spell_id); +} + +bool Perl__IsIllusionSpell(uint16 spell_id) +{ + return IsIllusionSpell(spell_id); +} + +bool Perl__IsLDoNObjectSpell(uint16 spell_id) +{ + return IsLDoNObjectSpell(spell_id); +} + +bool Perl__IsHealOverTimeSpell(uint16 spell_id) +{ + return IsHealOverTimeSpell(spell_id); +} + +bool Perl__IsCompleteHealSpell(uint16 spell_id) +{ + return IsCompleteHealSpell(spell_id); +} + +bool Perl__IsFastHealSpell(uint16 spell_id) +{ + return IsFastHealSpell(spell_id); +} + +bool Perl__IsVeryFastHealSpell(uint16 spell_id) +{ + return IsVeryFastHealSpell(spell_id); +} + +bool Perl__IsRegularSingleTargetHealSpell(uint16 spell_id) +{ + return IsRegularSingleTargetHealSpell(spell_id); +} + +bool Perl__IsRegularGroupHealSpell(uint16 spell_id) +{ + return IsRegularGroupHealSpell(spell_id); +} + +bool Perl__IsGroupCompleteHealSpell(uint16 spell_id) +{ + return IsGroupCompleteHealSpell(spell_id); +} + +bool Perl__IsGroupHealOverTimeSpell(uint16 spell_id) +{ + return IsGroupHealOverTimeSpell(spell_id); +} + +bool Perl__IsDebuffSpell(uint16 spell_id) +{ + return IsDebuffSpell(spell_id); +} + +bool Perl__IsResistDebuffSpell(uint16 spell_id) +{ + return IsResistDebuffSpell(spell_id); +} + +bool Perl__IsSelfConversionSpell(uint16 spell_id) +{ + return IsSelfConversionSpell(spell_id); +} + +bool Perl__IsBuffSpell(uint16 spell_id) +{ + return IsBuffSpell(spell_id); +} + +bool Perl__IsPersistDeathSpell(uint16 spell_id) +{ + return IsPersistDeathSpell(spell_id); +} + +bool Perl__IsSuspendableSpell(uint16 spell_id) +{ + return IsSuspendableSpell(spell_id); +} + +bool Perl__IsCastOnFadeDurationSpell(uint16 spell_id) +{ + return IsCastOnFadeDurationSpell(spell_id); +} + +bool Perl__IsDistanceModifierSpell(uint16 spell_id) +{ + return IsDistanceModifierSpell(spell_id); +} + +bool Perl__IsRestAllowedSpell(uint16 spell_id) +{ + return IsRestAllowedSpell(spell_id); +} + +bool Perl__IsNoDetrimentalSpellAggroSpell(uint16 spell_id) +{ + return IsNoDetrimentalSpellAggroSpell(spell_id); +} + +bool Perl__IsStackableDOT(uint16 spell_id) +{ + return IsStackableDOT(spell_id); +} + +bool Perl__IsShortDurationBuff(uint16 spell_id) +{ + return IsShortDurationBuff(spell_id); +} + +bool Perl__IsTargetRequiredForSpell(uint16 spell_id) +{ + return IsTargetRequiredForSpell(spell_id); +} + +bool Perl__IsVirusSpell(uint16 spell_id) +{ + return IsVirusSpell(spell_id); +} + +bool Perl__IsValidSpell(uint16 spell_id) +{ + return IsValidSpell(spell_id); +} + +bool Perl__IsEffectIgnoredInStacking(int effect_id) +{ + return IsEffectIgnoredInStacking(effect_id); +} + +bool Perl__IsFocusLimit(int effect_id) +{ + return IsFocusLimit(effect_id); +} + +bool Perl__IsBardOnlyStackEffect(int effect_id) +{ + return IsBardOnlyStackEffect(effect_id); +} + +bool Perl__IsCastWhileInvisibleSpell(uint16 spell_id) +{ + return IsCastWhileInvisibleSpell(spell_id); +} + +bool Perl__IsCastRestrictedSpell(uint16 spell_id) +{ + return IsCastRestrictedSpell(spell_id); +} + +bool Perl__IsCastNotStandingSpell(uint16 spell_id) +{ + return IsCastNotStandingSpell(spell_id); +} + +bool Perl__IsInstrumentModifierAppliedToSpellEffect(uint16 spell_id, int effect_id) +{ + return IsInstrumentModifierAppliedToSpellEffect(spell_id, effect_id); +} + +bool Perl__IsBlankSpellEffect(uint16 spell_id, int effect_index) +{ + return IsBlankSpellEffect(spell_id, effect_index); +} + +uint16 Perl__GetSpellTriggerSpellID(uint16 spell_id, int effect_id) +{ + return GetSpellTriggerSpellID(spell_id, effect_id); +} + +uint8 Perl__GetSpellMinimumLevel(uint16 spell_id) +{ + return GetSpellMinimumLevel(spell_id); } int Perl__GetSpellResistType(uint16 spell_id) @@ -1706,6 +2190,106 @@ int Perl__GetSpellTargetType(uint16 spell_id) return GetSpellTargetType(spell_id); } +int Perl__GetSpellPartialMeleeRuneReduction(uint16 spell_id) +{ + return GetSpellPartialMeleeRuneReduction(spell_id); +} + +int Perl__GetSpellPartialMagicRuneReduction(uint16 spell_id) +{ + return GetSpellPartialMagicRuneReduction(spell_id); +} + +int Perl__GetSpellPartialMeleeRuneAmount(uint16 spell_id) +{ + return GetSpellPartialMeleeRuneAmount(spell_id); +} + +int Perl__GetSpellPartialMagicRuneAmount(uint16 spell_id) +{ + return GetSpellPartialMagicRuneAmount(spell_id); +} + +int Perl__GetSpellViralMinimumSpreadTime(uint16 spell_id) +{ + return GetSpellViralMinimumSpreadTime(spell_id); +} + +int Perl__GetSpellViralMaximumSpreadTime(uint16 spell_id) +{ + return GetSpellViralMaximumSpreadTime(spell_id); +} + +int Perl__GetSpellViralSpreadRange(uint16 spell_id) +{ + return GetSpellViralSpreadRange(spell_id); +} + +int Perl__GetSpellProcLimitTimer(uint16 spell_id, int proc_type) +{ + return GetSpellProcLimitTimer(spell_id, proc_type); +} + +int Perl__GetSpellEffectDescriptionNumber(uint16 spell_id) +{ + return GetSpellEffectDescriptionNumber(spell_id); +} + +int Perl__GetSpellFuriousBash(uint16 spell_id) +{ + return GetSpellFuriousBash(spell_id); +} + +bool Perl__IsSpellUsableInThisZoneType(uint16 spell_id) +{ + return IsSpellUsableInThisZoneType(spell_id, zone->GetZoneType()); +} + +bool Perl__IsSpellUsableInThisZoneType(uint16 spell_id, uint8 zone_type) +{ + return IsSpellUsableInThisZoneType(spell_id, zone_type); +} + +int Perl__GetSpellEffectIndex(uint16 spell_id, int effect_id) +{ + return GetSpellEffectIndex(spell_id, effect_id); +} + +int Perl__CalculatePoisonCounters(uint16 spell_id) +{ + return CalculatePoisonCounters(spell_id); +} + +int Perl__CalculateDiseaseCounters(uint16 spell_id) +{ + return CalculateDiseaseCounters(spell_id); +} + +int Perl__CalculateCurseCounters(uint16 spell_id) +{ + return CalculateCurseCounters(spell_id); +} + +int Perl__CalculateCorruptionCounters(uint16 spell_id) +{ + return CalculateCorruptionCounters(spell_id); +} + +int Perl__CalculateCounters(uint16 spell_id) +{ + return CalculateCounters(spell_id); +} + +int8 Perl__GetSpellResurrectionSicknessCheck(uint16 spell_id_one, uint16 spell_id_two) +{ + return GetSpellResurrectionSicknessCheck(spell_id_one, spell_id_two); +} + +int Perl__GetSpellNimbusEffect(uint16 spell_id) +{ + return GetSpellNimbusEffect(spell_id); +} + void Perl__FlyMode(GravityBehavior flymode) { quest_manager.FlyMode(flymode); @@ -4111,6 +4695,655 @@ void Perl__send_player_handin_event() quest_manager.SendPlayerHandinEvent(); } +float Perl__GetZoneSafeX(uint32 zone_id) +{ + return zone_store.GetZoneSafeCoordinates(zone_id).x; +} + +float Perl__GetZoneSafeX(uint32 zone_id, int version) +{ + return zone_store.GetZoneSafeCoordinates(zone_id, version).x; +} + +float Perl__GetZoneSafeY(uint32 zone_id) +{ + return zone_store.GetZoneSafeCoordinates(zone_id).y; +} + +float Perl__GetZoneSafeY(uint32 zone_id, int version) +{ + return zone_store.GetZoneSafeCoordinates(zone_id, version).y; +} + +float Perl__GetZoneSafeZ(uint32 zone_id) +{ + return zone_store.GetZoneSafeCoordinates(zone_id).z; +} + +float Perl__GetZoneSafeZ(uint32 zone_id, int version) +{ + return zone_store.GetZoneSafeCoordinates(zone_id, version).z; +} + +float Perl__GetZoneSafeHeading(uint32 zone_id) +{ + return zone_store.GetZoneSafeCoordinates(zone_id).w; +} + +float Perl__GetZoneSafeHeading(uint32 zone_id, int version) +{ + return zone_store.GetZoneSafeCoordinates(zone_id, version).w; +} + +float Perl__GetZoneGraveyardID(uint32 zone_id) +{ + return zone_store.GetZoneGraveyardID(zone_id); +} + +float Perl__GetZoneGraveyardID(uint32 zone_id, int version) +{ + return zone_store.GetZoneGraveyardID(zone_id, version); +} + +uint8 Perl__GetZoneMinimumLevel(uint32 zone_id) +{ + return zone_store.GetZoneMinimumLevel(zone_id); +} + +uint8 Perl__GetZoneMinimumLevel(uint32 zone_id, int version) +{ + return zone_store.GetZoneMinimumLevel(zone_id, version); +} + +uint8 Perl__GetZoneMaximumLevel(uint32 zone_id) +{ + return zone_store.GetZoneMaximumLevel(zone_id); +} + +uint8 Perl__GetZoneMaximumLevel(uint32 zone_id, int version) +{ + return zone_store.GetZoneMaximumLevel(zone_id, version); +} + +uint8 Perl__GetZoneMinimumStatus(uint32 zone_id) +{ + return zone_store.GetZoneMinimumStatus(zone_id); +} + +uint8 Perl__GetZoneMinimumStatus(uint32 zone_id, int version) +{ + return zone_store.GetZoneMinimumStatus(zone_id, version); +} + +int Perl__GetZoneTimeZone(uint32 zone_id) +{ + return zone_store.GetZoneTimeZone(zone_id); +} + +int Perl__GetZoneTimeZone(uint32 zone_id, int version) +{ + return zone_store.GetZoneTimeZone(zone_id, version); +} + +int Perl__GetZoneMaximumPlayers(uint32 zone_id) +{ + return zone_store.GetZoneMaximumPlayers(zone_id); +} + +int Perl__GetZoneMaximumPlayers(uint32 zone_id, int version) +{ + return zone_store.GetZoneMaximumPlayers(zone_id, version); +} + +uint32 Perl__GetZoneRuleSet(uint32 zone_id) +{ + return zone_store.GetZoneRuleSet(zone_id); +} + +uint32 Perl__GetZoneRuleSet(uint32 zone_id, int version) +{ + return zone_store.GetZoneRuleSet(zone_id, version); +} + +std::string Perl__GetZoneNote(uint32 zone_id) +{ + return zone_store.GetZoneNote(zone_id); +} + +std::string Perl__GetZoneNote(uint32 zone_id, int version) +{ + return zone_store.GetZoneNote(zone_id, version); +} + +float Perl__GetZoneUnderworld(uint32 zone_id) +{ + return zone_store.GetZoneUnderworld(zone_id); +} + +float Perl__GetZoneUnderworld(uint32 zone_id, int version) +{ + return zone_store.GetZoneUnderworld(zone_id, version); +} + +float Perl__GetZoneMinimumClip(uint32 zone_id) +{ + return zone_store.GetZoneMinimumClip(zone_id); +} + +float Perl__GetZoneMinimumClip(uint32 zone_id, int version) +{ + return zone_store.GetZoneMinimumClip(zone_id, version); +} + +float Perl__GetZoneMaximumClip(uint32 zone_id) +{ + return zone_store.GetZoneMaximumClip(zone_id); +} + +float Perl__GetZoneMaximumClip(uint32 zone_id, int version) +{ + return zone_store.GetZoneMaximumClip(zone_id, version); +} + +float Perl__GetZoneFogMinimumClip(uint32 zone_id) +{ + return zone_store.GetZoneFogMinimumClip(zone_id); +} + +float Perl__GetZoneFogMinimumClip(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneFogMinimumClip(zone_id, slot); +} + +float Perl__GetZoneFogMinimumClip(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneFogMinimumClip(zone_id, slot, version); +} + +float Perl__GetZoneFogMaximumClip(uint32 zone_id) +{ + return zone_store.GetZoneFogMaximumClip(zone_id); +} + +float Perl__GetZoneFogMaximumClip(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneFogMaximumClip(zone_id, slot); +} + +float Perl__GetZoneFogMaximumClip(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneFogMaximumClip(zone_id, slot, version); +} + +uint8 Perl__GetZoneFogRed(uint32 zone_id) +{ + return zone_store.GetZoneFogRed(zone_id); +} + +uint8 Perl__GetZoneFogRed(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneFogRed(zone_id, slot); +} + +uint8 Perl__GetZoneFogRed(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneFogRed(zone_id, slot, version); +} + +uint8 Perl__GetZoneFogGreen(uint32 zone_id) +{ + return zone_store.GetZoneFogGreen(zone_id); +} + +uint8 Perl__GetZoneFogGreen(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneFogGreen(zone_id, slot); +} + +uint8 Perl__GetZoneFogGreen(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneFogGreen(zone_id, slot, version); +} + +uint8 Perl__GetZoneFogBlue(uint32 zone_id) +{ + return zone_store.GetZoneFogBlue(zone_id); +} + +uint8 Perl__GetZoneFogBlue(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneFogBlue(zone_id, slot); +} + +uint8 Perl__GetZoneFogBlue(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneFogBlue(zone_id, slot, version); +} + +uint8 Perl__GetZoneSky(uint32 zone_id) +{ + return zone_store.GetZoneSky(zone_id); +} + +uint8 Perl__GetZoneSky(uint32 zone_id, int version) +{ + return zone_store.GetZoneSky(zone_id, version); +} + +uint8 Perl__GetZoneZType(uint32 zone_id) +{ + return zone_store.GetZoneZType(zone_id); +} + +uint8 Perl__GetZoneZType(uint32 zone_id, int version) +{ + return zone_store.GetZoneZType(zone_id, version); +} + +float Perl__GetZoneExperienceMultiplier(uint32 zone_id) +{ + return zone_store.GetZoneExperienceMultiplier(zone_id); +} + +float Perl__GetZoneExperienceMultiplier(uint32 zone_id, int version) +{ + return zone_store.GetZoneExperienceMultiplier(zone_id, version); +} + +float Perl__GetZoneWalkSpeed(uint32 zone_id) +{ + return zone_store.GetZoneWalkSpeed(zone_id); +} + +float Perl__GetZoneWalkSpeed(uint32 zone_id, int version) +{ + return zone_store.GetZoneWalkSpeed(zone_id, version); +} + +uint8 Perl__GetZoneTimeType(uint32 zone_id) +{ + return zone_store.GetZoneTimeType(zone_id); +} + +uint8 Perl__GetZoneTimeType(uint32 zone_id, int version) +{ + return zone_store.GetZoneTimeType(zone_id, version); +} + +float Perl__GetZoneFogDensity(uint32 zone_id) +{ + return zone_store.GetZoneFogDensity(zone_id); +} + +float Perl__GetZoneFogDensity(uint32 zone_id, int version) +{ + return zone_store.GetZoneFogDensity(zone_id, version); +} + +std::string Perl__GetZoneFlagNeeded(uint32 zone_id) +{ + return zone_store.GetZoneFlagNeeded(zone_id); +} + +std::string Perl__GetZoneFlagNeeded(uint32 zone_id, int version) +{ + return zone_store.GetZoneFlagNeeded(zone_id, version); +} + +int8 Perl__GetZoneCanBind(uint32 zone_id) +{ + return zone_store.GetZoneCanBind(zone_id); +} + +int8 Perl__GetZoneCanBind(uint32 zone_id, int version) +{ + return zone_store.GetZoneCanBind(zone_id, version); +} + +int8 Perl__GetZoneCanCombat(uint32 zone_id) +{ + return zone_store.GetZoneCanCombat(zone_id); +} + +int8 Perl__GetZoneCanCombat(uint32 zone_id, int version) +{ + return zone_store.GetZoneCanCombat(zone_id, version); +} + +int8 Perl__GetZoneCanLevitate(uint32 zone_id) +{ + return zone_store.GetZoneCanLevitate(zone_id); +} + +int8 Perl__GetZoneCanLevitate(uint32 zone_id, int version) +{ + return zone_store.GetZoneCanLevitate(zone_id, version); +} + +int8 Perl__GetZoneCastOutdoor(uint32 zone_id) +{ + return zone_store.GetZoneCastOutdoor(zone_id); +} + +int8 Perl__GetZoneCastOutdoor(uint32 zone_id, int version) +{ + return zone_store.GetZoneCastOutdoor(zone_id, version); +} + +uint8 Perl__GetZoneHotzone(uint32 zone_id) +{ + return zone_store.GetZoneHotzone(zone_id); +} + +uint8 Perl__GetZoneHotzone(uint32 zone_id, int version) +{ + return zone_store.GetZoneHotzone(zone_id, version); +} + +uint8 Perl__GetZoneInstanceType(uint32 zone_id) +{ + return zone_store.GetZoneInstanceType(zone_id); +} + +uint8 Perl__GetZoneInstanceType(uint32 zone_id, int version) +{ + return zone_store.GetZoneInstanceType(zone_id, version); +} + +uint64 Perl__GetZoneShutdownDelay(uint32 zone_id) +{ + return zone_store.GetZoneShutdownDelay(zone_id); +} + +uint64 Perl__GetZoneShutdownDelay(uint32 zone_id, int version) +{ + return zone_store.GetZoneShutdownDelay(zone_id, version); +} + +int8 Perl__GetZonePEQZone(uint32 zone_id) +{ + return zone_store.GetZonePEQZone(zone_id); +} + +int8 Perl__GetZonePEQZone(uint32 zone_id, int version) +{ + return zone_store.GetZonePEQZone(zone_id, version); +} + +int8 Perl__GetZoneExpansion(uint32 zone_id) +{ + return zone_store.GetZoneExpansion(zone_id); +} + +int8 Perl__GetZoneExpansion(uint32 zone_id, int version) +{ + return zone_store.GetZoneExpansion(zone_id, version); +} + +int8 Perl__GetZoneBypassExpansionCheck(uint32 zone_id) +{ + return zone_store.GetZoneBypassExpansionCheck(zone_id); +} + +int8 Perl__GetZoneBypassExpansionCheck(uint32 zone_id, int version) +{ + return zone_store.GetZoneBypassExpansionCheck(zone_id, version); +} + +uint8 Perl__GetZoneSuspendBuffs(uint32 zone_id) +{ + return zone_store.GetZoneSuspendBuffs(zone_id); +} + +uint8 Perl__GetZoneSuspendBuffs(uint32 zone_id, int version) +{ + return zone_store.GetZoneSuspendBuffs(zone_id, version); +} + +int Perl__GetZoneRainChance(uint32 zone_id) +{ + return zone_store.GetZoneRainChance(zone_id); +} + +int Perl__GetZoneRainChance(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneRainChance(zone_id, slot); +} + +int Perl__GetZoneRainChance(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneRainChance(zone_id, slot, version); +} + +int Perl__GetZoneRainDuration(uint32 zone_id) +{ + return zone_store.GetZoneRainDuration(zone_id); +} + +int Perl__GetZoneRainDuration(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneRainDuration(zone_id, slot); +} + +int Perl__GetZoneRainDuration(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneRainDuration(zone_id, slot, version); +} + +int Perl__GetZoneSnowChance(uint32 zone_id) +{ + return zone_store.GetZoneSnowChance(zone_id); +} + +int Perl__GetZoneSnowChance(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneSnowChance(zone_id, slot); +} + +int Perl__GetZoneSnowChance(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneSnowChance(zone_id, slot, version); +} + +int Perl__GetZoneSnowDuration(uint32 zone_id) +{ + return zone_store.GetZoneSnowDuration(zone_id); +} + +int Perl__GetZoneSnowDuration(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneSnowDuration(zone_id, slot); +} + +int Perl__GetZoneSnowDuration(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneSnowDuration(zone_id, slot, version); +} + +float Perl__GetZoneGravity(uint32 zone_id) +{ + return zone_store.GetZoneGravity(zone_id); +} + +float Perl__GetZoneGravity(uint32 zone_id, int version) +{ + return zone_store.GetZoneGravity(zone_id, version); +} + +int Perl__GetZoneType(uint32 zone_id) +{ + return zone_store.GetZoneType(zone_id); +} + +int Perl__GetZoneType(uint32 zone_id, int version) +{ + return zone_store.GetZoneType(zone_id, version); +} + +int8 Perl__GetZoneSkyLock(uint32 zone_id) +{ + return zone_store.GetZoneSkyLock(zone_id); +} + +int8 Perl__GetZoneSkyLock(uint32 zone_id, int version) +{ + return zone_store.GetZoneSkyLock(zone_id, version); +} + +int Perl__GetZoneFastRegenHP(uint32 zone_id) +{ + return zone_store.GetZoneFastRegenHP(zone_id); +} + +int Perl__GetZoneFastRegenHP(uint32 zone_id, int version) +{ + return zone_store.GetZoneFastRegenHP(zone_id, version); +} + +int Perl__GetZoneFastRegenMana(uint32 zone_id) +{ + return zone_store.GetZoneFastRegenMana(zone_id); +} + +int Perl__GetZoneFastRegenMana(uint32 zone_id, int version) +{ + return zone_store.GetZoneFastRegenMana(zone_id, version); +} + +int Perl__GetZoneFastRegenEndurance(uint32 zone_id) +{ + return zone_store.GetZoneFastRegenEndurance(zone_id); +} + +int Perl__GetZoneFastRegenEndurance(uint32 zone_id, int version) +{ + return zone_store.GetZoneFastRegenEndurance(zone_id, version); +} + +int Perl__GetZoneNPCMaximumAggroDistance(uint32 zone_id) +{ + return zone_store.GetZoneNPCMaximumAggroDistance(zone_id); +} + +int Perl__GetZoneNPCMaximumAggroDistance(uint32 zone_id, int version) +{ + return zone_store.GetZoneNPCMaximumAggroDistance(zone_id, version); +} + +uint32 Perl__GetZoneMaximumMovementUpdateRange(uint32 zone_id) +{ + return zone_store.GetZoneMaximumMovementUpdateRange(zone_id); +} + +uint32 Perl__GetZoneMaximumMovementUpdateRange(uint32 zone_id, int version) +{ + return zone_store.GetZoneMaximumMovementUpdateRange(zone_id, version); +} + +int8 Perl__GetZoneMinimumExpansion(uint32 zone_id) +{ + return zone_store.GetZoneMinimumExpansion(zone_id); +} + +int8 Perl__GetZoneMinimumExpansion(uint32 zone_id, int version) +{ + return zone_store.GetZoneMinimumExpansion(zone_id, version); +} + +int8 Perl__GetZoneMaximumExpansion(uint32 zone_id) +{ + return zone_store.GetZoneMaximumExpansion(zone_id); +} + +int8 Perl__GetZoneMaximumExpansion(uint32 zone_id, int version) +{ + return zone_store.GetZoneMaximumExpansion(zone_id, version); +} + +std::string Perl__GetZoneContentFlags(uint32 zone_id) +{ + return zone_store.GetZoneContentFlags(zone_id); +} + +std::string Perl__GetZoneContentFlags(uint32 zone_id, int version) +{ + return zone_store.GetZoneContentFlags(zone_id, version); +} + +std::string Perl__GetZoneContentFlagsDisabled(uint32 zone_id) +{ + return zone_store.GetZoneContentFlagsDisabled(zone_id); +} + +std::string Perl__GetZoneContentFlagsDisabled(uint32 zone_id, int version) +{ + return zone_store.GetZoneContentFlagsDisabled(zone_id, version); +} + +int Perl__GetZoneUnderworldTeleportIndex(uint32 zone_id) +{ + return zone_store.GetZoneUnderworldTeleportIndex(zone_id); +} + +int Perl__GetZoneUnderworldTeleportIndex(uint32 zone_id, int version) +{ + return zone_store.GetZoneUnderworldTeleportIndex(zone_id, version); +} + +int Perl__GetZoneLavaDamage(uint32 zone_id) +{ + return zone_store.GetZoneLavaDamage(zone_id); +} + +int Perl__GetZoneLavaDamage(uint32 zone_id, int version) +{ + return zone_store.GetZoneLavaDamage(zone_id, version); +} + +int Perl__GetZoneMinimumLavaDamage(uint32 zone_id) +{ + return zone_store.GetZoneMinimumLavaDamage(zone_id); +} + +int Perl__GetZoneMinimumLavaDamage(uint32 zone_id, int version) +{ + return zone_store.GetZoneMinimumLavaDamage(zone_id, version); +} + +void Perl__send_channel_message(uint8 channel_number, uint32 guild_id, uint8 language_id, uint8 language_skill, const char* message) +{ + quest_manager.SendChannelMessage(channel_number, guild_id, language_id, language_skill, message); +} + +void Perl__send_channel_message(Client* from, uint8 channel_number, uint32 guild_id, uint8 language_id, uint8 language_skill, const char* message) +{ + quest_manager.SendChannelMessage(from, channel_number, guild_id, language_id, language_skill, message); +} + +void Perl__send_channel_message(Client* from, const char* to, uint8 channel_number, uint32 guild_id, uint8 language_id, uint8 language_skill, const char* message) +{ + quest_manager.SendChannelMessage(from, to, channel_number, guild_id, language_id, language_skill, message); +} + +std::string Perl__convert_money_to_string(perl::hash table) +{ + uint64 platinum = table.exists("platinum") ? static_cast(table["platinum"]) : 0; + uint64 gold = table.exists("gold") ? static_cast(table["gold"]) : 0; + uint64 silver = table.exists("silver") ? static_cast(table["silver"]) : 0; + uint64 copper = table.exists("copper") ? static_cast(table["copper"]) : 0; + + if ( + !copper && + !silver && + !gold && + !platinum + ) { + return std::string(); + } + + return Strings::Money(platinum, gold, silver, copper); +} + void perl_register_quest() { perl::interpreter perl(PERL_GET_THX); @@ -4123,7 +5356,11 @@ void perl_register_quest() package.add("createbotcount", (int(*)())&Perl__createbotcount); package.add("createbotcount", (int(*)(uint8))&Perl__createbotcount); package.add("createBot", &Perl__createBot); - + package.add("CalculateCorruptionCounters", &Perl__CalculateCorruptionCounters); + package.add("CalculateCounters", &Perl__CalculateCounters); + package.add("CalculateCurseCounters", &Perl__CalculateCurseCounters); + package.add("CalculateDiseaseCounters", &Perl__CalculateDiseaseCounters); + package.add("CalculatePoisonCounters", &Perl__CalculatePoisonCounters); package.add("AssignGroupToInstance", &Perl__AssignGroupToInstance); package.add("AssignRaidToInstance", &Perl__AssignRaidToInstance); package.add("AssignToInstance", &Perl__AssignToInstance); @@ -4144,26 +5381,250 @@ void perl_register_quest() package.add("GetInstanceIDsByCharID", &Perl__GetInstanceIDsByCharID); package.add("GetInstanceVersionByID", &Perl__GetInstanceVersionByID); package.add("GetInstanceZoneIDByID", &Perl__GetInstanceZoneIDByID); + package.add("GetSpellPartialMagicRuneReduction", &Perl__GetSpellPartialMagicRuneReduction); + package.add("GetSpellPartialMagicRuneAmount", &Perl__GetSpellPartialMagicRuneAmount); + package.add("GetSpellPartialMeleeRuneReduction", &Perl__GetSpellPartialMeleeRuneReduction); + package.add("GetSpellPartialMeleeRuneAmount", &Perl__GetSpellPartialMeleeRuneAmount); + package.add("GetSpellProcLimitTimer", &Perl__GetSpellProcLimitTimer); + package.add("GetSpellResurrectionSicknessCheck", &Perl__GetSpellResurrectionSicknessCheck); + package.add("GetSpellEffectDescriptionNumber", &Perl__GetSpellEffectDescriptionNumber); + package.add("GetSpellEffectIndex", &Perl__GetSpellEffectIndex); + package.add("GetSpellFuriousBash", &Perl__GetSpellFuriousBash); + package.add("GetSpellMinimumLevel", &Perl__GetSpellMinimumLevel); + package.add("GetSpellNimbusEffect", &Perl__GetSpellNimbusEffect); package.add("GetSpellResistType", &Perl__GetSpellResistType); package.add("GetSpellTargetType", &Perl__GetSpellTargetType); + package.add("GetSpellTriggerSpellID", &Perl__GetSpellTriggerSpellID); + package.add("GetSpellViralMaximumSpreadTime", &Perl__GetSpellViralMaximumSpreadTime); + package.add("GetSpellViralMinimumSpreadTime", &Perl__GetSpellViralMinimumSpreadTime); + package.add("GetSpellViralSpreadRange", &Perl__GetSpellViralSpreadRange); package.add("GetTimeSeconds", &Perl__GetTimeSeconds); + package.add("GetZoneBypassExpansionCheck", (int8(*)(uint32))&Perl__GetZoneBypassExpansionCheck); + package.add("GetZoneBypassExpansionCheck", (int8(*)(uint32, int))&Perl__GetZoneBypassExpansionCheck); + package.add("GetZoneCanBind", (int8(*)(uint32))&Perl__GetZoneCanBind); + package.add("GetZoneCanBind", (int8(*)(uint32, int))&Perl__GetZoneCanBind); + package.add("GetZoneCanCombat", (int8(*)(uint32))&Perl__GetZoneCanCombat); + package.add("GetZoneCanCombat", (int8(*)(uint32, int))&Perl__GetZoneCanCombat); + package.add("GetZoneCanLevitate", (int8(*)(uint32))&Perl__GetZoneCanLevitate); + package.add("GetZoneCanLevitate", (int8(*)(uint32, int))&Perl__GetZoneCanLevitate); + package.add("GetZoneCastOutdoor", (int8(*)(uint32))&Perl__GetZoneCastOutdoor); + package.add("GetZoneCastOutdoor", (int8(*)(uint32, int))&Perl__GetZoneCastOutdoor); + package.add("GetZoneContentFlags", (std::string(*)(uint32))&Perl__GetZoneContentFlags); + package.add("GetZoneContentFlags", (std::string(*)(uint32, int))&Perl__GetZoneContentFlags); + package.add("GetZoneContentFlagsDisabled", (std::string(*)(uint32))&Perl__GetZoneContentFlagsDisabled); + package.add("GetZoneContentFlagsDisabled", (std::string(*)(uint32, int))&Perl__GetZoneContentFlagsDisabled); + package.add("GetZoneGraveyardID", (float(*)(uint32))&Perl__GetZoneGraveyardID); + package.add("GetZoneGraveyardID", (float(*)(uint32, int))&Perl__GetZoneGraveyardID); + package.add("GetZoneHotzone", (uint8(*)(uint32))&Perl__GetZoneHotzone); + package.add("GetZoneHotzone", (uint8(*)(uint32, int))&Perl__GetZoneHotzone); + package.add("GetZoneInstanceType", (uint8(*)(uint32))&Perl__GetZoneInstanceType); + package.add("GetZoneInstanceType", (uint8(*)(uint32, int))&Perl__GetZoneInstanceType); package.add("GetZoneID", &Perl__GetZoneID); + package.add("GetZoneExpansion", (int8(*)(uint32))&Perl__GetZoneExpansion); + package.add("GetZoneExpansion", (int8(*)(uint32, int))&Perl__GetZoneExpansion); + package.add("GetZoneExperienceMultiplier", (float(*)(uint32))&Perl__GetZoneExperienceMultiplier); + package.add("GetZoneExperienceMultiplier", (float(*)(uint32, int))&Perl__GetZoneExperienceMultiplier); + package.add("GetZoneFastRegenHP", (int(*)(uint32))&Perl__GetZoneFastRegenHP); + package.add("GetZoneFastRegenHP", (int(*)(uint32, int))&Perl__GetZoneFastRegenHP); + package.add("GetZoneFastRegenMana", (int(*)(uint32))&Perl__GetZoneFastRegenMana); + package.add("GetZoneFastRegenMana", (int(*)(uint32, int))&Perl__GetZoneFastRegenMana); + package.add("GetZoneFastRegenEndurance", (int(*)(uint32))&Perl__GetZoneFastRegenEndurance); + package.add("GetZoneFastRegenEndurance", (int(*)(uint32, int))&Perl__GetZoneFastRegenEndurance); + package.add("GetZoneFlagNeeded", (std::string(*)(uint32))&Perl__GetZoneFlagNeeded); + package.add("GetZoneFlagNeeded", (std::string(*)(uint32, int))&Perl__GetZoneFlagNeeded); + package.add("GetZoneFogMaximumClip", (float(*)(uint32))&Perl__GetZoneFogMaximumClip); + package.add("GetZoneFogMaximumClip", (float(*)(uint32, uint8))&Perl__GetZoneFogMaximumClip); + package.add("GetZoneFogMaximumClip", (float(*)(uint32, uint8, int))&Perl__GetZoneFogMaximumClip); + package.add("GetZoneFogMinimumClip", (float(*)(uint32))&Perl__GetZoneFogMinimumClip); + package.add("GetZoneFogMinimumClip", (float(*)(uint32, uint8))&Perl__GetZoneFogMinimumClip); + package.add("GetZoneFogMinimumClip", (float(*)(uint32, uint8, int))&Perl__GetZoneFogMinimumClip); + package.add("GetZoneFogBlue", (uint8(*)(uint32))&Perl__GetZoneFogBlue); + package.add("GetZoneFogBlue", (uint8(*)(uint32, uint8))&Perl__GetZoneFogBlue); + package.add("GetZoneFogBlue", (uint8(*)(uint32, uint8, int))&Perl__GetZoneFogBlue); + package.add("GetZoneFogDensity", (float(*)(uint32))&Perl__GetZoneFogDensity); + package.add("GetZoneFogDensity", (float(*)(uint32, int))&Perl__GetZoneFogDensity); + package.add("GetZoneFogGreen", (uint8(*)(uint32))&Perl__GetZoneFogGreen); + package.add("GetZoneFogGreen", (uint8(*)(uint32, uint8))&Perl__GetZoneFogGreen); + package.add("GetZoneFogGreen", (uint8(*)(uint32, uint8, int))&Perl__GetZoneFogGreen); + package.add("GetZoneFogRed", (uint8(*)(uint32))&Perl__GetZoneFogRed); + package.add("GetZoneFogRed", (uint8(*)(uint32, uint8))&Perl__GetZoneFogRed); + package.add("GetZoneFogRed", (uint8(*)(uint32, uint8, int))&Perl__GetZoneFogRed); + package.add("GetZoneGravity", (float(*)(uint32))&Perl__GetZoneMaximumClip); + package.add("GetZoneGravity", (float(*)(uint32, int))&Perl__GetZoneMaximumClip); + package.add("GetZoneMaximumClip", (float(*)(uint32))&Perl__GetZoneMaximumClip); + package.add("GetZoneMaximumClip", (float(*)(uint32, int))&Perl__GetZoneMaximumClip); + package.add("GetZoneMaximumExpansion", (int8(*)(uint32))&Perl__GetZoneMaximumExpansion); + package.add("GetZoneMaximumExpansion", (int8(*)(uint32, int))&Perl__GetZoneMaximumExpansion); + package.add("GetZoneMaximumLevel", (uint8(*)(uint32))&Perl__GetZoneMaximumLevel); + package.add("GetZoneMaximumLevel", (uint8(*)(uint32, int))&Perl__GetZoneMaximumLevel); + package.add("GetZoneMaximumMovementUpdateRange", (uint32(*)(uint32))&Perl__GetZoneMaximumMovementUpdateRange); + package.add("GetZoneMaximumMovementUpdateRange", (uint32(*)(uint32, int))&Perl__GetZoneMaximumMovementUpdateRange); + package.add("GetZoneMaximumPlayers", (int(*)(uint32))&Perl__GetZoneMaximumPlayers); + package.add("GetZoneMaximumPlayers", (int(*)(uint32, int))&Perl__GetZoneMaximumPlayers); + package.add("GetZoneMinimumClip", (float(*)(uint32))&Perl__GetZoneMinimumClip); + package.add("GetZoneMinimumClip", (float(*)(uint32, int))&Perl__GetZoneMinimumClip); + package.add("GetZoneMinimumExpansion", (int8(*)(uint32))&Perl__GetZoneMinimumExpansion); + package.add("GetZoneMinimumExpansion", (int8(*)(uint32, int))&Perl__GetZoneMinimumExpansion); + package.add("GetZoneMinimumLavaDamage", (int(*)(uint32))&Perl__GetZoneMinimumLavaDamage); + package.add("GetZoneMinimumLavaDamage", (int(*)(uint32, int))&Perl__GetZoneMinimumLavaDamage); + package.add("GetZoneMinimumLevel", (uint8(*)(uint32))&Perl__GetZoneMinimumLevel); + package.add("GetZoneMinimumLevel", (uint8(*)(uint32, int))&Perl__GetZoneMinimumLevel); + package.add("GetZoneMinimumStatus", (uint8(*)(uint32))&Perl__GetZoneMinimumStatus); + package.add("GetZoneMinimumStatus", (uint8(*)(uint32, int))&Perl__GetZoneMinimumStatus); + package.add("GetZoneNote", (std::string(*)(uint32))&Perl__GetZoneNote); + package.add("GetZoneNote", (std::string(*)(uint32, int))&Perl__GetZoneNote); + package.add("GetZoneNPCMaximumAggroDistance", (int(*)(uint32))&Perl__GetZoneNPCMaximumAggroDistance); + package.add("GetZoneNPCMaximumAggroDistance", (int(*)(uint32, int))&Perl__GetZoneNPCMaximumAggroDistance); + package.add("GetZoneLavaDamage", (int(*)(uint32))&Perl__GetZoneLavaDamage); + package.add("GetZoneLavaDamage", (int(*)(uint32, int))&Perl__GetZoneLavaDamage); package.add("GetZoneLongName", &Perl__GetZoneLongName); package.add("GetZoneLongNameByID", &Perl__GetZoneLongNameByID); + package.add("GetZonePEQZone", (int8(*)(uint32))&Perl__GetZonePEQZone); + package.add("GetZonePEQZone", (int8(*)(uint32, int))&Perl__GetZonePEQZone); + package.add("GetZoneRainChance", (int(*)(uint32))&Perl__GetZoneRainChance); + package.add("GetZoneRainChance", (int(*)(uint32, uint8))&Perl__GetZoneRainChance); + package.add("GetZoneRainChance", (int(*)(uint32, uint8, int))&Perl__GetZoneRainChance); + package.add("GetZoneRainDuration", (int(*)(uint32))&Perl__GetZoneRainDuration); + package.add("GetZoneRainDuration", (int(*)(uint32, uint8))&Perl__GetZoneRainDuration); + package.add("GetZoneRainDuration", (int(*)(uint32, uint8, int))&Perl__GetZoneRainDuration); + package.add("GetZoneRuleSet", (uint32(*)(uint32))&Perl__GetZoneRuleSet); + package.add("GetZoneRuleSet", (uint32(*)(uint32, int))&Perl__GetZoneRuleSet); + package.add("GetZoneSafeHeading", (float(*)(uint32))&Perl__GetZoneSafeHeading); + package.add("GetZoneSafeHeading", (float(*)(uint32, int))&Perl__GetZoneSafeHeading); + package.add("GetZoneSafeX", (float(*)(uint32))&Perl__GetZoneSafeX); + package.add("GetZoneSafeX", (float(*)(uint32, int))&Perl__GetZoneSafeX); + package.add("GetZoneSafeY", (float(*)(uint32))&Perl__GetZoneSafeY); + package.add("GetZoneSafeY", (float(*)(uint32, int))&Perl__GetZoneSafeY); + package.add("GetZoneSafeZ", (float(*)(uint32))&Perl__GetZoneSafeZ); + package.add("GetZoneSafeZ", (float(*)(uint32, int))&Perl__GetZoneSafeZ); + package.add("GetZoneShutdownDelay", (uint64(*)(uint32))&Perl__GetZoneShutdownDelay); + package.add("GetZoneShutdownDelay", (uint64(*)(uint32, int))&Perl__GetZoneShutdownDelay); + package.add("GetZoneSky", (uint8(*)(uint32))&Perl__GetZoneSky); + package.add("GetZoneSky", (uint8(*)(uint32, int))&Perl__GetZoneSky); + package.add("GetZoneSkyLock", (int8(*)(uint32))&Perl__GetZoneSkyLock); + package.add("GetZoneSkyLock", (int8(*)(uint32, int))&Perl__GetZoneSkyLock); + package.add("GetZoneSnowChance", (int(*)(uint32))&Perl__GetZoneSnowChance); + package.add("GetZoneSnowChance", (int(*)(uint32, uint8))&Perl__GetZoneSnowChance); + package.add("GetZoneSnowChance", (int(*)(uint32, uint8, int))&Perl__GetZoneSnowChance); + package.add("GetZoneSnowDuration", (int(*)(uint32))&Perl__GetZoneSnowDuration); + package.add("GetZoneSnowDuration", (int(*)(uint32, uint8))&Perl__GetZoneSnowDuration); + package.add("GetZoneSnowDuration", (int(*)(uint32, uint8, int))&Perl__GetZoneSnowDuration); + package.add("GetZoneSuspendBuffs", (uint8(*)(uint32))&Perl__GetZoneSuspendBuffs); + package.add("GetZoneSuspendBuffs", (uint8(*)(uint32, int))&Perl__GetZoneSuspendBuffs); + package.add("GetZoneZType", (uint8(*)(uint32))&Perl__GetZoneZType); + package.add("GetZoneZType", (uint8(*)(uint32, int))&Perl__GetZoneZType); package.add("GetZoneShortName", &Perl__GetZoneShortName); - package.add("set_rule", &Perl__set_rule); - package.add("get_rule", &Perl__get_rule); - package.add("get_data", &Perl__get_data); - package.add("get_data_expires", &Perl__get_data_expires); - package.add("get_data_remaining", &Perl__get_data_remaining); - package.add("set_data", (void(*)(std::string, std::string))&Perl__set_data); - package.add("set_data", (void(*)(std::string, std::string, std::string))&Perl__set_data); - package.add("delete_data", &Perl__delete_data); + package.add("GetZoneTimeType", (uint8(*)(uint32))&Perl__GetZoneTimeType); + package.add("GetZoneTimeType", (uint8(*)(uint32, int))&Perl__GetZoneTimeType); + package.add("GetZoneTimeZone", (int(*)(uint32))&Perl__GetZoneTimeZone); + package.add("GetZoneTimeZone", (int(*)(uint32, int))&Perl__GetZoneTimeZone); + package.add("GetZoneType", (int(*)(uint32))&Perl__GetZoneType); + package.add("GetZoneType", (int(*)(uint32, int))&Perl__GetZoneType); + package.add("GetZoneUnderworld", (float(*)(uint32))&Perl__GetZoneUnderworld); + package.add("GetZoneUnderworld", (float(*)(uint32, int))&Perl__GetZoneUnderworld); + package.add("GetZoneUnderworldTeleportIndex", (int(*)(uint32))&Perl__GetZoneUnderworldTeleportIndex); + package.add("GetZoneUnderworldTeleportIndex", (int(*)(uint32, int))&Perl__GetZoneUnderworldTeleportIndex); + package.add("GetZoneWalkSpeed", (float(*)(uint32))&Perl__GetZoneWalkSpeed); + package.add("GetZoneWalkSpeed", (float(*)(uint32, int))&Perl__GetZoneWalkSpeed); + package.add("IsAEDurationSpell", &Perl__IsAEDurationSpell); + package.add("IsAENukeSpell", &Perl__IsAENukeSpell); + package.add("IsAERainNukeSpell", &Perl__IsAERainNukeSpell); + package.add("IsAllianceSpell", &Perl__IsAllianceSpell); + package.add("IsBardOnlyStackEffect", &Perl__IsBardOnlyStackEffect); + package.add("IsBardSong", &Perl__IsBardSong); package.add("IsBeneficialSpell", &Perl__IsBeneficialSpell); + package.add("IsBlankSpellEffect", &Perl__IsBlankSpellEffect); + package.add("IsBlindSpell", &Perl__IsBlindSpell); + package.add("IsBuffSpell", &Perl__IsBuffSpell); + package.add("IsCastOnFadeDurationSpell", &Perl__IsCastOnFadeDurationSpell); + package.add("IsCastNotStandingSpell", &Perl__IsCastNotStandingSpell); + package.add("IsCastRestrictedSpell", &Perl__IsCastRestrictedSpell); + package.add("IsCastTimeReductionSpell", &Perl__IsCastTimeReductionSpell); + package.add("IsCastWhileInvisibleSpell", &Perl__IsCastWhileInvisibleSpell); + package.add("IsCharmSpell", &Perl__IsCharmSpell); + package.add("IsCombatSkill", &Perl__IsCombatSkill); + package.add("IsCompleteHealSpell", &Perl__IsCompleteHealSpell); + package.add("IsCompleteHealDurationSpell", &Perl__IsCompleteHealDurationSpell); + package.add("IsCureSpell", &Perl__IsCureSpell); + package.add("IsDamageSpell", &Perl__IsDamageSpell); + package.add("IsDeathSaveSpell", &Perl__IsDeathSaveSpell); + package.add("IsDebuffSpell", &Perl__IsDebuffSpell); + package.add("IsDetrimentalSpell", &Perl__IsDetrimentalSpell); + package.add("IsDiscipline", &Perl__IsDiscipline); + package.add("IsDisciplineBuff", &Perl__IsDisciplineBuff); + package.add("IsDiseaseCounterSpell", &Perl__IsDiseaseCounterSpell); + package.add("IsDistanceModifierSpell", &Perl__IsDistanceModifierSpell); + package.add("IsEffectIgnoredInStacking", &Perl__IsEffectIgnoredInStacking); package.add("IsEffectInSpell", &Perl__IsEffectInSpell); + package.add("IsFastHealSpell", &Perl__IsFastHealSpell); + package.add("IsFearSpell", &Perl__IsFearSpell); + package.add("IsFocusLimit", &Perl__IsFocusLimit); + package.add("IsFullDeathSaveSpell", &Perl__IsFullDeathSaveSpell); + package.add("IsGateSpell", &Perl__IsGateSpell); + package.add("IsGroupCompleteHealSpell", &Perl__IsGroupCompleteHealSpell); + package.add("IsGroupHealOverTimeSpell", &Perl__IsGroupHealOverTimeSpell); + package.add("IsGroupOnlySpell", &Perl__IsGroupOnlySpell); + package.add("IsGroupSpell", &Perl__IsGroupSpell); + package.add("IsHarmonySpell", &Perl__IsHarmonySpell); + package.add("IsHasteSpell", &Perl__IsHasteSpell); + package.add("IsHealOverTimeSpell", &Perl__IsHealOverTimeSpell); + package.add("IsHealthSpell", &Perl__IsHealthSpell); + package.add("IsIllusionSpell", &Perl__IsIllusionSpell); + package.add("IsImprovedDamageSpell", &Perl__IsImprovedDamageSpell); + package.add("IsImprovedHealingSpell", &Perl__IsImprovedHealingSpell); + package.add("IsIncreaseDurationSpell", &Perl__IsIncreaseDurationSpell); + package.add("IsIncreaseRangeSpell", &Perl__IsIncreaseRangeSpell); + package.add("IsInstrumentModifierAppliedToSpellEffect", &Perl__IsInstrumentModifierAppliedToSpellEffect); + package.add("IsInvisibleSpell", &Perl__IsInvisibleSpell); + package.add("IsInvulnerabilitySpell", &Perl__IsInvulnerabilitySpell); + package.add("IsLDoNObjectSpell", &Perl__IsLDoNObjectSpell); + package.add("IsLifetapSpell", &Perl__IsLifetapSpell); + package.add("IsMagicRuneSpell", &Perl__IsMagicRuneSpell); + package.add("IsManaCostReductionSpell", &Perl__IsManaCostReductionSpell); + package.add("IsManaTapSpell", &Perl__IsManaTapSpell); + package.add("IsMesmerizeSpell", &Perl__IsMesmerizeSpell); + package.add("IsNoDetrimentalSpellAggroSpell", &Perl__IsNoDetrimentalSpellAggroSpell); + package.add("IsPartialDeathSaveSpell", &Perl__IsPartialDeathSaveSpell); + package.add("IsPartialResistableSpell", &Perl__IsPartialResistableSpell); + package.add("IsPBAENukeSpell", &Perl__IsPBAENukeSpell); + package.add("IsPercentalHealSpell", &Perl__IsPercentalHealSpell); + package.add("IsPersistDeathSpell", &Perl__IsPersistDeathSpell); + package.add("IsPetSpell", &Perl__IsPetSpell); + package.add("IsPoisonCounterSpell", &Perl__IsPoisonCounterSpell); + package.add("IsPulsingBardSong", &Perl__IsPulsingBardSong); + package.add("IsPureNukeSpell", &Perl__IsPureNukeSpell); package.add("IsRaining", &Perl__IsRaining); - package.add("IsSnowing", &Perl__IsSnowing); + package.add("IsRegularGroupHealSpell", &Perl__IsRegularGroupHealSpell); + package.add("IsRegularSingleTargetHealSpell", &Perl__IsRegularSingleTargetHealSpell); + package.add("IsResistableSpell", &Perl__IsResistableSpell); + package.add("IsResistDebuffSpell", &Perl__IsResistDebuffSpell); + package.add("IsRestAllowedSpell", &Perl__IsRestAllowedSpell); + package.add("IsResurrectionEffects", &Perl__IsResurrectionEffects); + package.add("IsRuneSpell", &Perl__IsRuneSpell); package.add("IsRunning", &Perl__IsRunning); + package.add("IsSacrificeSpell", &Perl__IsSacrificeSpell); + package.add("IsSelfConversionSpell", &Perl__IsSelfConversionSpell); + package.add("IsShadowStepSpell", &Perl__IsShadowStepSpell); + package.add("IsShortDurationBuff", &Perl__IsShortDurationBuff); + package.add("IsSnowing", &Perl__IsSnowing); + package.add("IsSpellUsableInThisZoneType", (bool(*)(uint16))&Perl__IsSpellUsableInThisZoneType); + package.add("IsSpellUsableInThisZoneType", (bool(*)(uint16, uint8))&Perl__IsSpellUsableInThisZoneType); + package.add("IsStackableDOT", &Perl__IsStackableDOT); + package.add("IsStunSpell", &Perl__IsStunSpell); + package.add("IsSuccorSpell", &Perl__IsSuccorSpell); + package.add("IsSummonItemSpell", &Perl__IsSummonItemSpell); + package.add("IsSummonPCSpell", &Perl__IsSummonPCSpell); + package.add("IsSummonPetSpell", &Perl__IsSummonPetSpell); + package.add("IsSummonSkeletonSpell", &Perl__IsSummonSkeletonSpell); + package.add("IsSummonSpell", &Perl__IsSummonSpell); + package.add("IsSuspendableSpell", &Perl__IsSuspendableSpell); + package.add("IsTargetableAESpell", &Perl__IsTargetableAESpell); + package.add("IsTargetRequiredForSpell", &Perl__IsTargetRequiredForSpell); + package.add("IsTeleportSpell", &Perl__IsTeleportSpell); + package.add("IsTranslocateSpell", &Perl__IsTranslocateSpell); + package.add("IsVeryFastHealSpell", &Perl__IsVeryFastHealSpell); + package.add("IsVirusSpell", &Perl__IsVirusSpell); + package.add("IsValidSpell", &Perl__IsValidSpell); package.add("LearnRecipe", &Perl__LearnRecipe); package.add("MerchantCountItem", &Perl__MerchantCountItem); package.add("MerchantSetItem", (void(*)(uint32, uint32))&Perl__MerchantSetItem); @@ -4207,6 +5668,7 @@ void perl_register_quest() package.add("collectitems", &Perl__collectitems); package.add("commify", &Perl__commify); package.add("completedtasksinset", &Perl__completedtasksinset); + package.add("convert_money_to_string", &Perl__convert_money_to_string); package.add("countitem", &Perl__countitem); package.add("countspawnednpcs", &Perl__countspawnednpcs); package.add("createdoor", (uint16(*)(const char*, float, float, float, float))&Perl__CreateDoor); @@ -4437,6 +5899,7 @@ void perl_register_quest() package.add("worldwideupdateactivity", (void(*)(uint32, int, int, uint8, uint8))&Perl__worldwideupdateactivity); package.add("debug", (void(*)(const char*))&Perl__debug); package.add("debug", (void(*)(const char*, int))&Perl__debug); + package.add("delete_data", &Perl__delete_data); package.add("delglobal", &Perl__delglobal); package.add("depop", (void(*)())&Perl__depop); package.add("depop", (void(*)(int))&Perl__depop); @@ -4491,6 +5954,9 @@ void perl_register_quest() package.add("getconsiderlevelname", &Perl__getconsiderlevelname); package.add("gethexcolorcode", &Perl__gethexcolorcode); package.add("getcurrencyid", &Perl__getcurrencyid); + package.add("get_data", &Perl__get_data); + package.add("get_data_expires", &Perl__get_data_expires); + package.add("get_data_remaining", &Perl__get_data_remaining); package.add("get_dz_task_id", &Perl__get_dz_task_id); package.add("getexpmodifierbycharid", (double(*)(uint32, uint32))&Perl__getexpmodifierbycharid); package.add("getexpmodifierbycharid", (double(*)(uint32, uint32, int16))&Perl__getexpmodifierbycharid); @@ -4504,11 +5970,11 @@ void perl_register_quest() package.add("getfactionname", &Perl__getfactionname); package.add("getinventoryslotid", &Perl__getinventoryslotid); package.add("getitemname", &Perl__getitemname); - package.add("getItemName", &Perl__qc_getItemName); package.add("getitemstat", &Perl__getitemstat); package.add("getlanguagename", &Perl__getlanguagename); package.add("getldonthemename", &Perl__getldonthemename); package.add("getnpcnamebyid", &Perl__getnpcnamebyid); + package.add("get_rule", &Perl__get_rule); package.add("get_spawn_condition", (int(*)(const char*, uint16))&Perl__get_spawn_condition); package.add("get_spawn_condition", (int(*)(const char*, uint32, uint16))&Perl__get_spawn_condition); package.add("getcharnamebyid", &Perl__getcharnamebyid); @@ -4633,6 +6099,8 @@ void perl_register_quest() package.add("remove_expedition_lockout_by_char_id", &Perl__remove_expedition_lockout_by_char_id); package.add("removeitem", (void(*)(uint32_t))&Perl__removeitem); package.add("removeitem", (void(*)(uint32_t, int))&Perl__removeitem); + package.add("removeldonloss", &Perl__removeldonloss); + package.add("removeldonwin", &Perl__removeldonwin); package.add("removetitle", &Perl__removetitle); package.add("rename", &Perl__rename); package.add("repopzone", &Perl__repopzone); @@ -4656,14 +6124,20 @@ void perl_register_quest() package.add("secondstotime", &Perl__secondstotime); package.add("selfcast", &Perl__selfcast); package.add("send_player_handin_event", &Perl__send_player_handin_event); + package.add("send_channel_message", (void(*)(uint8, uint32, uint8, uint8, const char*))&Perl__send_channel_message); + package.add("send_channel_message", (void(*)(Client*, uint8, uint32, uint8, uint8, const char*))&Perl__send_channel_message); + package.add("send_channel_message", (void(*)(Client*, const char*, uint8, uint32, uint8, uint8, const char*))&Perl__send_channel_message); package.add("setaaexpmodifierbycharid", (void(*)(uint32, uint32, double))&Perl__setaaexpmodifierbycharid); package.add("setaaexpmodifierbycharid", (void(*)(uint32, uint32, double, int16))&Perl__setaaexpmodifierbycharid); + package.add("set_data", (void(*)(std::string, std::string))&Perl__set_data); + package.add("set_data", (void(*)(std::string, std::string, std::string))&Perl__set_data); package.add("set_proximity", (void(*)(float, float, float, float))&Perl__set_proximity); package.add("set_proximity", (void(*)(float, float, float, float, float, float))&Perl__set_proximity); package.add("set_proximity", (void(*)(float, float, float, float, float, float, bool))&Perl__set_proximity); package.add("set_proximity_range", (void(*)(float, float))&Perl__set_proximity_range); package.add("set_proximity_range", (void(*)(float, float, float))&Perl__set_proximity_range); package.add("set_proximity_range", (void(*)(float, float, float, bool))&Perl__set_proximity_range); + package.add("set_rule", &Perl__set_rule); package.add("set_zone_flag", &Perl__set_zone_flag); package.add("setallskill", &Perl__setallskill); package.add("setanim", &Perl__setanim); @@ -4777,7 +6251,7 @@ void perl_register_quest() package.add("is_veil_of_alaris_enabled", &Perl__IsVeilOfAlarisEnabled); package.add("is_rain_of_fear_enabled", &Perl__IsRainOfFearEnabled); package.add("is_call_of_the_forsaken_enabled", &Perl__IsCallOfTheForsakenEnabled); - package.add("is_the_darkend_sea_enabled", &Perl__IsTheDarkenedSeaEnabled); + package.add("is_the_darkened_sea_enabled", &Perl__IsTheDarkenedSeaEnabled); package.add("is_the_broken_mirror_enabled", &Perl__IsTheBrokenMirrorEnabled); package.add("is_empires_of_kunark_enabled", &Perl__IsEmpiresOfKunarkEnabled); package.add("is_ring_of_scale_enabled", &Perl__IsRingOfScaleEnabled); @@ -4804,7 +6278,7 @@ void perl_register_quest() package.add("is_current_expansion_veil_of_alaris", &Perl__IsCurrentExpansionVeilOfAlaris); package.add("is_current_expansion_rain_of_fear", &Perl__IsCurrentExpansionRainOfFear); package.add("is_current_expansion_call_of_the_forsaken", &Perl__IsCurrentExpansionCallOfTheForsaken); - package.add("is_current_expansion_the_darkend_sea", &Perl__IsCurrentExpansionTheDarkenedSea); + package.add("is_current_expansion_the_darkened_sea", &Perl__IsCurrentExpansionTheDarkenedSea); package.add("is_current_expansion_the_broken_mirror", &Perl__IsCurrentExpansionTheBrokenMirror); package.add("is_current_expansion_empires_of_kunark", &Perl__IsCurrentExpansionEmpiresOfKunark); package.add("is_current_expansion_ring_of_scale", &Perl__IsCurrentExpansionRingOfScale); diff --git a/zone/embperl.cpp b/zone/embperl.cpp index bdbe5d70e..497abfe1f 100644 --- a/zone/embperl.cpp +++ b/zone/embperl.cpp @@ -12,13 +12,9 @@ Eglin #include "../common/global_define.h" #include "../common/eqemu_logsys.h" -#include -#include #include #include "embperl.h" -#include "embxs.h" #include "../common/features.h" -#include "../common/path_manager.h" #include "../common/process/process.h" #include "../common/file.h" #include "../common/timer.h" @@ -102,7 +98,7 @@ void Embperl::DoInit() { try { init_eval_file(); } - catch(std::string e) + catch(std::string& e) { //remember... lasterr() is no good if we crap out here, in construction LogQuests("Perl Error [{}]", e); @@ -142,7 +138,7 @@ void Embperl::DoInit() { perl_command = "main::eval_file('plugin', '" + Config->PluginPlFile + "');"; eval_pv(perl_command.c_str(), FALSE); } - catch(std::string e) + catch(std::string& e) { LogQuests("Warning [{}]: [{}]", Config->PluginPlFile, e); } @@ -160,7 +156,7 @@ void Embperl::DoInit() { "}"; eval_pv(perl_command.c_str(),FALSE); } - catch(std::string e) + catch(std::string& e) { LogQuests("Warning [{}]", e); } @@ -318,14 +314,47 @@ bool Embperl::SubExists(const char *package, const char *sub) { return(hv_exists(stash, sub, len)); } -bool Embperl::VarExists(const char *package, const char *var) { - HV *stash = gv_stashpv(package, false); - if(!stash) - return(false); - int len = strlen(var); - return(hv_exists(stash, var, len)); +#ifdef EMBPERL_IO_CAPTURE + +XS(XS_EQEmuIO_PRINT); /* prototype to pass -Wmissing-prototypes */ +XS(XS_EQEmuIO_PRINT) +{ + dXSARGS; + if (items < 2) { + return; + } + + for (int r = 1; r < items; r++) { + char *str = SvPV_nolen(ST(r)); + char *cur = str; + + /* Strip newlines from log message 'str' */ + *std::remove(str, str + strlen(str), '\n') = '\0'; + + std::string log_string = str; + + if ( + log_string.find("did not return a true") != std::string::npos || + log_string.find("is experimental") != std::string::npos + ) { + return; + } + + for (int i = 0; *cur != '\0'; i++, cur++) { + if (*cur == '\n') { + LogQuests("{}", str); + } + } + + if (!log_string.empty()) { + LogQuests("{}", log_string); + } + } + + XSRETURN_EMPTY; } +#endif //EMBPERL_IO_CAPTURE #endif //EMBPERL diff --git a/zone/embperl.h b/zone/embperl.h index a728eecd6..e9a3f780a 100644 --- a/zone/embperl.h +++ b/zone/embperl.h @@ -73,13 +73,6 @@ class Embperl private: //if we fail inside a script evaluation, this will hold the croak msg (not much help if we die during construction, but that's our own fault) mutable std::string errmsg; - //kludgy workaround for the fact that we can't directly do something like SvIV(get_sv($big[0]{ass}->{struct})) - SV * my_get_sv(const char * varname) { - char buffer[256]; - snprintf(buffer, 256, "if(defined(%s)) { $scratch::temp = %s; } else { $scratch::temp = 'UNDEF'; }", varname, varname); - eval(buffer); - return get_sv("scratch::temp", false); - } //install a perl func void init_eval_file(void); @@ -97,25 +90,11 @@ public: void Reinit(); - //return the last error msg - std::string lasterr(void) const { return errmsg;}; //evaluate an expression. throws string errors on fail int eval(const char * code); //execute a subroutine. throws lasterr on failure int dosub(const char * subname, const std::vector * args = nullptr, int mode = G_SCALAR|G_EVAL); - //Access to perl variables - //all varnames here should be of the form package::name - //returns the contents of the perl variable named in varname as a c int - int geti(const char * varname) { return static_cast(SvIV(my_get_sv(varname))); }; - //returns the contents of the perl variable named in varname as a c float - float getd(const char * varname) { return static_cast(SvNV(my_get_sv(varname)));}; - //returns the contents of the perl variable named in varname as a string - std::string getstr(const char * varname) { - SV * temp = my_get_sv(varname); - return std::string(SvPV_nolen(temp),SvLEN(temp)); - } - //put an integer into a perl varable void seti(const char *varname, int val) const { SV *t = get_sv(varname, true); @@ -163,13 +142,8 @@ public: //idea borrowed from perlembed int eval_file(const char * packagename, const char * filename); - inline bool InUse() const { return(in_use); } - //check to see if a sub exists in package bool SubExists(const char *package, const char *sub); - - //check to see if a variable exists in package - bool VarExists(const char *package, const char *var); }; #endif //EMBPERL diff --git a/zone/embxs.cpp b/zone/embxs.cpp deleted file mode 100644 index 2481b330c..000000000 --- a/zone/embxs.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* EQEMu: Everquest Server Emulator - Copyright (C) 2001-2016 EQEMu Development Team (http://eqemulator.org) - - 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 -*/ - -#ifdef EMBPERL - -#include "../common/global_define.h" -#include "../common/eqemu_logsys.h" -#include "embxs.h" -#include "embperl.h" -#include "masterentity.h" -#include "command.h" -#include "bot_command.h" - -const char *getItemName(unsigned itemid) -{ - const EQ::ItemData* item = nullptr; - item = database.GetItem(itemid); - - if (item) - return item->Name; - else - return nullptr; -} - -const char* Perl__qc_getItemName(unsigned itemid) -{ - return getItemName(itemid); // possible nullptr return -} - -#ifdef EMBPERL_IO_CAPTURE - -XS(XS_EQEmuIO_PRINT); /* prototype to pass -Wmissing-prototypes */ -XS(XS_EQEmuIO_PRINT) -{ - dXSARGS; - if (items < 2) - return; -// Perl_croak(aTHX_ "Usage: EQEmuIO::PRINT(@strings)"); - - int r; - for (r = 1; r < items; r++) { - char *str = SvPV_nolen(ST(r)); - char *cur = str; - - /* Strip newlines from log message 'str' */ - *std::remove(str, str + strlen(str), '\n') = '\0'; - - std::string log_string = str; - - if (log_string.find("did not return a true") != std::string::npos) { - return; - } - - if (log_string.find("is experimental") != std::string::npos) { - return; - } - - int i; - int pos = 0; - int len = 0; - - for (i = 0; *cur != '\0'; i++, cur++) { - if (*cur == '\n') { - LogQuests("{}", str); - len = 0; - pos = i + 1; - } - else { - len++; - } - } - if (!log_string.empty()) { - LogQuests("{}", log_string); - } - } - - XSRETURN_EMPTY; -} -#endif //EMBPERL_IO_CAPTURE - -#endif // EMBPERL diff --git a/zone/embxs.h b/zone/embxs.h deleted file mode 100644 index 22f294ca6..000000000 --- a/zone/embxs.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef EMBXS_H -#define EMBXS_H - -const char *getItemName(unsigned itemid); -const char* Perl__qc_getItemName(unsigned itemid); - -#endif // EMBXS_H diff --git a/zone/entity.cpp b/zone/entity.cpp index 9ded585bf..052b0afc7 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -17,14 +17,12 @@ */ #include "../common/data_verification.h" #include "../common/global_define.h" -#include #include #include #include #include #ifdef _WINDOWS -#include #else #include #include "../common/unix.h" @@ -43,7 +41,6 @@ #include "worldserver.h" #include "water_map.h" #include "npc_scale_manager.h" -#include "../common/say_link.h" #include "dialogue_window.h" #ifdef _WINDOWS @@ -332,8 +329,8 @@ bool EntityList::CanAddHateForMob(Mob *p) void EntityList::AddClient(Client *client) { client->SetID(GetFreeID()); - client_list.insert(std::pair(client->GetID(), client)); - mob_list.insert(std::pair(client->GetID(), client)); + client_list.emplace(std::pair(client->GetID(), client)); + mob_list.emplace(std::pair(client->GetID(), client)); } @@ -655,7 +652,7 @@ void EntityList::AddCorpse(Corpse *corpse, uint32 in_id) corpse->SetID(in_id); corpse->CalcCorpseName(); - corpse_list.insert(std::pair(corpse->GetID(), corpse)); + corpse_list.emplace(std::pair(corpse->GetID(), corpse)); if (!corpse_timer.Enabled()) corpse_timer.Start(); @@ -674,8 +671,8 @@ void EntityList::AddNPC(NPC *npc, bool send_spawn_packet, bool dont_queue) } } - npc_list.insert(std::pair(npc->GetID(), npc)); - mob_list.insert(std::pair(npc->GetID(), npc)); + npc_list.emplace(std::pair(npc->GetID(), npc)); + mob_list.emplace(std::pair(npc->GetID(), npc)); if (parse->HasQuestSub(npc->GetNPCTypeID(), EVENT_SPAWN)) { parse->EventNPC(EVENT_SPAWN, npc, nullptr, "", 0); @@ -755,8 +752,8 @@ void EntityList::AddMerc(Merc *merc, bool SendSpawnPacket, bool dontqueue) } } - merc_list.insert(std::pair(merc->GetID(), merc)); - mob_list.insert(std::pair(merc->GetID(), merc)); + merc_list.emplace(std::pair(merc->GetID(), merc)); + mob_list.emplace(std::pair(merc->GetID(), merc)); } } @@ -773,7 +770,7 @@ void EntityList::AddObject(Object *obj, bool SendSpawnPacket) QueueClients(0, &app,false); } - object_list.insert(std::pair(obj->GetID(), obj)); + object_list.emplace(std::pair(obj->GetID(), obj)); if (!object_timer.Enabled()) object_timer.Start(); @@ -782,7 +779,7 @@ void EntityList::AddObject(Object *obj, bool SendSpawnPacket) void EntityList::AddDoor(Doors *door) { door->SetEntityID(GetFreeID()); - door_list.insert(std::pair(door->GetEntityID(), door)); + door_list.emplace(std::pair(door->GetEntityID(), door)); if (!door_timer.Enabled()) door_timer.Start(); @@ -791,7 +788,7 @@ void EntityList::AddDoor(Doors *door) void EntityList::AddTrap(Trap *trap) { trap->SetID(GetFreeID()); - trap_list.insert(std::pair(trap->GetID(), trap)); + trap_list.emplace(std::pair(trap->GetID(), trap)); if (!trap_timer.Enabled()) trap_timer.Start(); } @@ -799,13 +796,13 @@ void EntityList::AddTrap(Trap *trap) void EntityList::AddBeacon(Beacon *beacon) { beacon->SetID(GetFreeID()); - beacon_list.insert(std::pair(beacon->GetID(), beacon)); + beacon_list.emplace(std::pair(beacon->GetID(), beacon)); } void EntityList::AddEncounter(Encounter *encounter) { encounter->SetID(GetFreeID()); - encounter_list.insert(std::pair(encounter->GetID(), encounter)); + encounter_list.emplace(std::pair(encounter->GetID(), encounter)); } void EntityList::AddToSpawnQueue(uint16 entityid, NewSpawn_Struct **ns) @@ -1759,21 +1756,6 @@ void EntityList::QueueClients( } } -void EntityList::QueueManaged(Mob *sender, const EQApplicationPacket *app, - bool ignore_sender, bool ackreq) -{ - auto it = client_list.begin(); - while (it != client_list.end()) { - Client *ent = it->second; - - if ((!ignore_sender || ent != sender)) - ent->QueuePacket(app, ackreq, Client::CLIENT_CONNECTED); - - ++it; - } -} - - void EntityList::QueueClientsStatus(Mob *sender, const EQApplicationPacket *app, bool ignore_sender, uint8 minstatus, uint8 maxstatus) { @@ -2183,21 +2165,6 @@ Group *EntityList::GetGroupByClient(Client *client) return nullptr; } -Raid *EntityList::GetRaidByLeaderName(const char *leader) -{ - std::list::iterator iterator; - - iterator = raid_list.begin(); - - while (iterator != raid_list.end()) { - if ((*iterator)->GetLeader() && strcmp((*iterator)->GetLeader()->GetName(), leader) == 0) { - return *iterator; - } - ++iterator; - } - return nullptr; -} - Raid *EntityList::GetRaidByID(uint32 id) { std::list::iterator iterator; @@ -2277,26 +2244,6 @@ Raid* EntityList::GetRaidByBot(const Bot* bot) return nullptr; } - -Raid *EntityList::GetRaidByMob(Mob *mob) -{ - std::list::iterator iterator; - - iterator = raid_list.begin(); - - while (iterator != raid_list.end()) { - for(int x = 0; x < MAX_RAID_MEMBERS; x++) { - // TODO: Implement support for Mob objects in Raid class - /*if((*iterator)->members[x].member){ - if((*iterator)->members[x].member == mob) - return *iterator; - }*/ - } - ++iterator; - } - return nullptr; -} - Client *EntityList::GetClientByAccID(uint32 accid) { auto it = client_list.begin(); @@ -2836,31 +2783,6 @@ bool EntityList::RemoveMob(uint16 delete_id) return false; } -/** - * @param delete_mob - * @return - */ -bool EntityList::RemoveMob(Mob *delete_mob) -{ - if (delete_mob == 0) { - return true; - } - - auto it = mob_list.begin(); - while (it != mob_list.end()) { - if (it->second == delete_mob) { - safe_delete(it->second); - if (!corpse_list.count(it->first)) { - free_ids.push(it->first); - } - mob_list.erase(it); - return true; - } - ++it; - } - return false; -} - /** * @param delete_id * @return @@ -2987,7 +2909,7 @@ void EntityList::ScanCloseMobs( float distance = DistanceSquared(scanning_mob->GetPosition(), mob->GetPosition()); if (distance <= scan_range || mob->GetAggroRange() >= scan_range) { - close_mobs.insert(std::pair(mob->GetID(), mob)); + close_mobs.emplace(std::pair(mob->GetID(), mob)); if (add_self_to_other_lists && scanning_mob->GetID() > 0) { bool has_mob = false; @@ -3112,18 +3034,6 @@ bool EntityList::RemoveGroup(uint32 delete_id) return true; } -bool EntityList::RemoveRaid(uint32 delete_id) -{ - auto it = std::find_if(raid_list.begin(), raid_list.end(), - [delete_id](const Raid *a) { return a->GetID() == delete_id; }); - if (it == raid_list.end()) - return false; - auto raid = *it; - raid_list.erase(it); - safe_delete(raid); - return true; -} - void EntityList::Clear() { RemoveAllClients(); @@ -3208,21 +3118,6 @@ void EntityList::Process() CheckSpawnQueue(); } -void EntityList::CountNPC(uint32 *NPCCount, uint32 *NPCLootCount, uint32 *gmspawntype_count) -{ - *NPCCount = 0; - *NPCLootCount = 0; - - auto it = npc_list.begin(); - while (it != npc_list.end()) { - (*NPCCount)++; - (*NPCLootCount) += it->second->CountLoot(); - if (it->second->GetNPCTypeID() == 0) - (*gmspawntype_count)++; - ++it; - } -} - void EntityList::Depop(bool StartSpawnTimer) { for (auto it = npc_list.begin(); it != npc_list.end(); ++it) { @@ -3557,15 +3452,6 @@ void EntityList::ClearClientPetitionQueue() return; } -void EntityList::WriteEntityIDs() -{ - auto it = mob_list.begin(); - while (it != mob_list.end()) { - std::cout << "ID: " << it->first << " Name: " << it->second->GetName() << std::endl; - ++it; - } -} - BulkZoneSpawnPacket::BulkZoneSpawnPacket(Client *iSendTo, uint32 iMaxSpawnsPerPacket) { data = nullptr; @@ -3634,24 +3520,6 @@ void EntityList::HalveAggro(Mob *who) } } -void EntityList::Evade(Mob *who) -{ - uint32 flatval = who->GetLevel() * 13; - int amt = 0; - auto it = npc_list.begin(); - while (it != npc_list.end()) { - if (it->second->CastToNPC()->CheckAggro(who)) { - amt = it->second->CastToNPC()->GetHateAmount(who); - amt -= flatval; - if (amt > 0) - it->second->CastToNPC()->SetHateAmountOnEnt(who, amt); - else - it->second->CastToNPC()->SetHateAmountOnEnt(who, 0); - } - ++it; - } -} - //removes "targ" from all hate lists, including feigned, in the zone void EntityList::ClearAggro(Mob* targ) { @@ -4391,35 +4259,6 @@ bool EntityList::LimitCheckGroup(uint32 spawngroup_id, int count) return true; } -//check limits on an npc type in a given spawn group, and -//checks limits on the entire zone in one pass. -//returns true if neither limit has been reached -bool EntityList::LimitCheckBoth(uint32 npc_type, uint32 spawngroup_id, int group_count, int type_count) -{ - if (group_count < 1 && type_count < 1) - return true; - - std::map::iterator cur,end; - cur = npc_limit_list.begin(); - end = npc_limit_list.end(); - - for (; cur != end; ++cur) { - if (cur->second.npc_type == npc_type) { - type_count--; - if (type_count == 0) { - return false; - } - } - if (cur->second.spawngroup_id == spawngroup_id) { - group_count--; - if (group_count == 0) { - return false; - } - } - } - return true; -} - bool EntityList::LimitCheckName(const char *npc_name) { auto it = npc_list.begin(); @@ -4466,25 +4305,6 @@ void EntityList::DestroyTempPets(Mob *owner) } } -int16 EntityList::CountTempPets(Mob *owner) -{ - int16 count = 0; - auto it = npc_list.begin(); - while (it != npc_list.end()) { - NPC* n = it->second; - if (n->GetSwarmInfo()) { - if (n->GetSwarmInfo()->owner_id == owner->GetID()) { - count++; - } - } - ++it; - } - - owner->SetTempPetCount(count); - - return count; -} - void EntityList::AddTempPetsToHateList(Mob *owner, Mob* other, bool bFrenzy) { if (!other || !owner) @@ -4537,32 +4357,6 @@ void EntityList::AddTempPetsToHateListOnOwnerDamage(Mob *owner, Mob* attacker, i } } -bool Entity::CheckCoordLosNoZLeaps(float cur_x, float cur_y, float cur_z, - float trg_x, float trg_y, float trg_z, float perwalk) -{ - if (zone->zonemap == nullptr) - return true; - - glm::vec3 myloc; - glm::vec3 oloc; - glm::vec3 hit; - - myloc.x = cur_x; - myloc.y = cur_y; - myloc.z = cur_z+5; - - oloc.x = trg_x; - oloc.y = trg_y; - oloc.z = trg_z+5; - - if (myloc.x == oloc.x && myloc.y == oloc.y && myloc.z == oloc.z) - return true; - - if (!zone->zonemap->LineIntersectsZoneNoZLeaps(myloc,oloc,perwalk,&hit)) - return true; - return false; -} - void EntityList::QuestJournalledSayClose( Mob *sender, float dist, const char *mobname, const char *message, Journal::Options &opts @@ -5204,17 +4998,6 @@ uint32 EntityList::CheckNPCsClose(Mob *center) return count; } -void EntityList::GateAllClients() -{ - auto it = client_list.begin(); - while (it != client_list.end()) { - Client *c = it->second; - if (c) - c->GoToBind(); - ++it; - } -} - void EntityList::SignalAllClients(int signal_id) { for (const auto& c : client_list) { @@ -5224,20 +5007,6 @@ void EntityList::SignalAllClients(int signal_id) } } -uint16 EntityList::GetClientCount(){ - uint16 ClientCount = 0; - std::list client_list; - entity_list.GetClientList(client_list); - auto iter = client_list.begin(); - while (iter != client_list.end()) { - Client *entry = (*iter); - entry->GetCleanName(); - ClientCount++; - iter++; - } - return ClientCount; -} - void EntityList::GetMobList(std::list &m_list) { m_list.clear(); diff --git a/zone/entity.h b/zone/entity.h index 079a33a0a..a1de10ae7 100644 --- a/zone/entity.h +++ b/zone/entity.h @@ -50,7 +50,6 @@ class Raid; class Spawn2; class Trap; -struct DynamicZoneSafeReturn; struct GuildBankItemUpdate_Struct; struct NewSpawn_Struct; struct QGlobal; @@ -115,7 +114,6 @@ public: inline const time_t& GetSpawnTimeStamp() const { return spawn_timestamp; } virtual const char* GetName() { return ""; } - bool CheckCoordLosNoZLeaps(float cur_x, float cur_y, float cur_z, float trg_x, float trg_y, float trg_z, float perwalk=1); Bot* CastToBot(); const Bot* CastToBot() const; @@ -129,7 +127,6 @@ protected: initial_id = set_id; } } - uint32 pDBAsyncWorkID; private: uint16 id; uint16 initial_id; @@ -186,7 +183,6 @@ public: Client *GetClientByCharID(uint32 iCharID); Client *GetClientByWID(uint32 iWID); Client *GetClientByLSID(uint32 iLSID); - Client *GetClient(uint32 ip, uint16 port); Bot* GetRandomBot(const glm::vec3& location = glm::vec3(0.f), float distance = 0, Bot* exclude_bot = nullptr); Client* GetRandomClient(const glm::vec3& location = glm::vec3(0.f), float distance = 0, Client* exclude_client = nullptr); @@ -194,15 +190,12 @@ public: Mob* GetRandomMob(const glm::vec3& location = glm::vec3(0.f), float distance = 0, Mob* exclude_mob = nullptr); Group* GetGroupByMob(Mob* mob); Group* GetGroupByMobName(const char* name); - Group* GetGroupByBot(Bot* bot); bool IsInSameGroupOrRaidGroup(Client *client1, Client *client2); Group *GetGroupByClient(Client* client); Group *GetGroupByID(uint32 id); Group *GetGroupByLeaderName(const char* leader); - Raid *GetRaidByMob(Mob* mob); Raid *GetRaidByClient(Client* client); Raid *GetRaidByID(uint32 id); - Raid *GetRaidByLeaderName(const char *leader); Raid* GetRaidByBotName(const char* name); Raid* GetRaidByBot(const Bot* bot); @@ -268,7 +261,6 @@ public: void ClearAreas(); void ReloadMerchants(); void ProcessProximitySay(const char *message, Client *c, uint8 language = 0); - void SendAATimer(uint32 charid,UseAA_Struct* uaa); Doors *FindDoor(uint8 door_id); Object *FindObject(uint32 object_id); Object* FindNearbyObject(float x, float y, float z, float radius); @@ -291,13 +283,11 @@ public: void AddProximity(NPC *proximity_for); void Clear(); bool RemoveMob(uint16 delete_id); - bool RemoveMob(Mob* delete_mob); bool RemoveClient(uint16 delete_id); bool RemoveClient(Client* delete_client); bool RemoveNPC(uint16 delete_id); bool RemoveMerc(uint16 delete_id); bool RemoveGroup(uint32 delete_id); - bool RemoveRaid(uint32 delete_id); bool RemoveCorpse(uint16 delete_id); bool RemoveDoor(uint16 delete_id); bool RemoveTrap(uint16 delete_id); @@ -321,7 +311,6 @@ public: void RemoveAllRaids(); void RemoveAllEncounters(); void DestroyTempPets(Mob *owner); - int16 CountTempPets(Mob *owner); void AddTempPetsToHateList(Mob *owner, Mob* other, bool bFrenzy = false); void AddTempPetsToHateListOnOwnerDamage(Mob *owner, Mob* attacker, int32 spell_id); Entity *GetEntityMob(uint16 id); @@ -428,7 +417,6 @@ public: void QueueClientsByXTarget(Mob* sender, const EQApplicationPacket* app, bool iSendToSender = true, EQ::versions::ClientVersionBitmask client_version_bits = EQ::versions::ClientVersionBitmask::maskAllClients); void QueueToGroupsForNPCHealthAA(Mob* sender, const EQApplicationPacket* app); - void QueueManaged(Mob* sender, const EQApplicationPacket* app, bool ignore_sender=false, bool ackreq = true); void AEAttack( Mob *attacker, @@ -455,13 +443,11 @@ public: Trap* FindNearbyTrap(Mob* searcher, float max_dist, float &curdist, bool detected = false); void AddHealAggro(Mob* target, Mob* caster, uint16 hate); - Mob* FindDefenseNPC(uint32 npcid); void OpenDoorsNear(Mob* opener); void UpdateWho(bool iSendFullUpdate = false); char* MakeNameUnique(char* name); static char* RemoveNumbers(char* name); void SignalMobsByNPCID(uint32 npc_type, int signal_id); - void CountNPC(uint32* NPCCount, uint32* NPCLootCount, uint32* gmspawntype_count); void RemoveEntity(uint16 id); void SendPetitionToAdmins(Petition* pet); void SendPetitionToAdmins(); @@ -472,10 +458,8 @@ public: uint32 DeleteNPCCorpses(); uint32 DeletePlayerCorpses(); void CorpseFix(Client* c); - void WriteEntityIDs(); void HalveAggro(Mob* who); void DoubleAggro(Mob* who); - void Evade(Mob *who); void UpdateHoTT(Mob* target); void Process(); @@ -496,7 +480,6 @@ public: void LimitRemoveNPC(NPC *npc); bool LimitCheckType(uint32 npc_type, int count); bool LimitCheckGroup(uint32 spawngroup_id, int count); - bool LimitCheckBoth(uint32 npc_type, uint32 spawngroup_id, int group_count, int type_count); bool LimitCheckName(const char* npc_name); int GetHatedCount(Mob *attacker, Mob *exclude, bool inc_gray_con); @@ -521,7 +504,6 @@ public: void ZoneWho(Client *c, Who_All_Struct* Who); void UnMarkNPC(uint16 ID); - void GateAllClients(); void SignalAllClients(int signal_id); void UpdateQGlobal(uint32 qid, QGlobal newGlobal); void DeleteQGlobal(std::string name, uint32 npcID, uint32 charID, uint32 zoneID); @@ -531,7 +513,6 @@ public: void GateAllClientsToSafeReturn(); - uint16 GetClientCount(); void GetMobList(std::list &m_list); void GetNPCList(std::list &n_list); void GetMercList(std::list &n_list); diff --git a/zone/event_codes.h b/zone/event_codes.h index df54ba231..4de42a46d 100644 --- a/zone/event_codes.h +++ b/zone/event_codes.h @@ -124,6 +124,10 @@ typedef enum { EVENT_ITEM_CLICK_CAST_CLIENT, EVENT_DESTROY_ITEM_CLIENT, EVENT_DROP_ITEM_CLIENT, + EVENT_MEMORIZE_SPELL, + EVENT_UNMEMORIZE_SPELL, + EVENT_SCRIBE_SPELL, + EVENT_UNSCRIBE_SPELL, // Add new events before these or Lua crashes EVENT_SPELL_EFFECT_BOT, EVENT_SPELL_EFFECT_BUFF_TIC_BOT, diff --git a/zone/exp.cpp b/zone/exp.cpp index 92890ed1d..3a9bc0193 100644 --- a/zone/exp.cpp +++ b/zone/exp.cpp @@ -783,8 +783,6 @@ void Client::SetEXP(uint64 set_exp, uint64 set_aaxp, bool isrezzexp) { if (check_level == RuleI(Character, DeathExpLossLevel)) MessageString(Chat::Yellow, CORPSE_EXP_LOST); } - else - MessageString(Chat::Experience, LOSE_LEVEL, ConvertArray(check_level, val1)); uint8 myoldlevel = GetLevel(); @@ -1256,8 +1254,10 @@ uint8 Client::GetCharMaxLevelFromQGlobal() { std::list global_map; + const uint32 zone_id = zone ? zone->GetZoneID() : 0; + if (char_cache) { - QGlobalCache::Combine(global_map, char_cache->GetBucket(), 0, CharacterID(), zone->GetZoneID()); + QGlobalCache::Combine(global_map, char_cache->GetBucket(), 0, CharacterID(), zone_id); } for (const auto& global : global_map) { diff --git a/zone/expedition.cpp b/zone/expedition.cpp index f92284d8f..1537b2f06 100644 --- a/zone/expedition.cpp +++ b/zone/expedition.cpp @@ -25,9 +25,6 @@ #include "string_ids.h" #include "worldserver.h" #include "zonedb.h" -#include "../common/eqemu_logsys.h" -#include "../common/expedition_lockout_timer.h" -#include "../common/repositories/dynamic_zone_members_repository.h" #include "../common/repositories/expedition_lockouts_repository.h" extern WorldServer worldserver; diff --git a/zone/expedition_database.cpp b/zone/expedition_database.cpp index 1f49c917e..22d60a19d 100644 --- a/zone/expedition_database.cpp +++ b/zone/expedition_database.cpp @@ -21,9 +21,6 @@ #include "expedition_database.h" #include "expedition.h" #include "zonedb.h" -#include "../common/database.h" -#include "../common/expedition_lockout_timer.h" -#include "../common/strings.h" #include uint32_t ExpeditionDatabase::InsertExpedition(uint32_t dz_id) diff --git a/zone/expedition_request.cpp b/zone/expedition_request.cpp index 85e27e725..e74697144 100644 --- a/zone/expedition_request.cpp +++ b/zone/expedition_request.cpp @@ -24,9 +24,7 @@ #include "groups.h" #include "raids.h" #include "string_ids.h" -#include "../common/expedition_lockout_timer.h" #include "../common/repositories/character_expedition_lockouts_repository.h" -#include "../common/repositories/expeditions_repository.h" constexpr char SystemName[] = "expedition"; diff --git a/zone/forage.cpp b/zone/forage.cpp index eba72977d..71f8f9d53 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -30,15 +30,12 @@ #include "titles.h" #include "water_map.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "../common/repositories/criteria/content_filter_criteria.h" #include "../common/events/player_event_logs.h" #include "worldserver.h" extern WorldServer worldserver; -#include - #ifdef _WINDOWS #define snprintf _snprintf #endif diff --git a/zone/global_loot_manager.cpp b/zone/global_loot_manager.cpp index 0fea08aa8..ca6401874 100644 --- a/zone/global_loot_manager.cpp +++ b/zone/global_loot_manager.cpp @@ -2,6 +2,7 @@ #include "npc.h" #include "client.h" #include "zone.h" +#include "dialogue_window.h" extern Zone *zone; @@ -21,62 +22,77 @@ std::vector GlobalLootManager::GetGlobalLootTables(NPC *mob) const return tables; } -void GlobalLootManager::ShowZoneGlobalLoot(Client *to) const +void GlobalLootManager::ShowZoneGlobalLoot(Client *c) const { - int table_number = 1; + std::string global_loot_table; + + global_loot_table += DialogueWindow::TableRow( + fmt::format( + "{}{}{}", + DialogueWindow::TableCell("ID"), + DialogueWindow::TableCell("Table Name"), + DialogueWindow::TableCell("Loottable ID") + ) + ); for (auto &e : m_entries) { - to->Message( - Chat::White, + global_loot_table += DialogueWindow::TableRow( fmt::format( - "Table {} | Name: {}", - table_number, - e.GetDescription() - ).c_str() + "{}{}{}", + DialogueWindow::TableCell(Strings::Commify(e.GetID())), + DialogueWindow::TableCell(e.GetDescription()), + DialogueWindow::TableCell(Strings::Commify(e.GetLootTableID())) + ) ); - - to->Message( - Chat::White, - fmt::format( - "Table {} | Global Table ID: {} Loot Table ID: {}", - table_number, - e.GetID(), - e.GetLootTableID() - ).c_str() - ); - - table_number++; } + + global_loot_table = DialogueWindow::Table(global_loot_table); + + c->SendPopupToClient( + fmt::format( + "Global Loot for {} ({})", + zone->GetLongName(), + zone->GetZoneID() + ).c_str(), + global_loot_table.c_str() + ); } -void GlobalLootManager::ShowNPCGlobalLoot(Client *to, NPC *who) const +void GlobalLootManager::ShowNPCGlobalLoot(Client *c, NPC *t) const { - int table_number = 1; + std::string global_loot_table; + + global_loot_table += DialogueWindow::TableRow( + fmt::format( + "{}{}{}", + DialogueWindow::TableCell("ID"), + DialogueWindow::TableCell("Table Name"), + DialogueWindow::TableCell("Loottable ID") + ) + ); for (auto &e : m_entries) { - if (e.PassesRules(who)) { - to->Message( - Chat::White, + if (e.PassesRules(t)) { + global_loot_table += DialogueWindow::TableRow( fmt::format( - "Table {} | Name: {}", - table_number, - e.GetDescription() - ).c_str() + "{}{}{}", + DialogueWindow::TableCell(Strings::Commify(e.GetID())), + DialogueWindow::TableCell(e.GetDescription()), + DialogueWindow::TableCell(Strings::Commify(e.GetLootTableID())) + ) ); - - to->Message( - Chat::White, - fmt::format( - "Table {} | Global Table ID: {} Loot Table ID: {}", - table_number, - e.GetID(), - e.GetLootTableID() - ).c_str() - ); - - table_number++; } } + + global_loot_table = DialogueWindow::Table(global_loot_table); + + c->SendPopupToClient( + fmt::format( + "Global Loot for {}", + c->GetTargetDescription(t) + ).c_str(), + global_loot_table.c_str() + ); } bool GlobalLootEntry::PassesRules(NPC *mob) const diff --git a/zone/gm_commands/appearanceeffects.cpp b/zone/gm_commands/appearanceeffects.cpp index d978c527e..c019462af 100644 --- a/zone/gm_commands/appearanceeffects.cpp +++ b/zone/gm_commands/appearanceeffects.cpp @@ -62,7 +62,7 @@ void command_appearanceeffects(Client *c, const Seperator *sep) "Appearance Effect ID {} in slot ID {} has been set for {}.", effect_id, slot_id, - c->GetTargetDescription(t, TargetDescriptionType::LCSelf) + c->GetTargetDescription(t) ).c_str() ); } else if (is_remove) { @@ -90,7 +90,7 @@ void command_appearanceeffects(Client *c, const Seperator *sep) Chat::White, fmt::format( "Appearance Effects have been removed for {}.", - c->GetTargetDescription(t, TargetDescriptionType::LCSelf) + c->GetTargetDescription(t) ).c_str() ); } else if (is_view) { diff --git a/zone/gm_commands/castspell.cpp b/zone/gm_commands/castspell.cpp index bbe134f04..9d29bc79c 100755 --- a/zone/gm_commands/castspell.cpp +++ b/zone/gm_commands/castspell.cpp @@ -21,7 +21,7 @@ void command_castspell(Client *c, const Seperator *sep) else { uint16 spell_id = Strings::ToUnsignedInt(sep->arg[1]); - if (CastRestrictedSpell(spell_id) && c->Admin() < commandCastSpecials) { + if (IsCastRestrictedSpell(spell_id) && c->Admin() < commandCastSpecials) { c->Message(Chat::Red, "Unable to cast spell."); } else if (spell_id >= SPDAT_RECORDS) { diff --git a/zone/gm_commands/door_manipulation.cpp b/zone/gm_commands/door_manipulation.cpp index e9c6a4de2..0e3ae2e3d 100644 --- a/zone/gm_commands/door_manipulation.cpp +++ b/zone/gm_commands/door_manipulation.cpp @@ -55,23 +55,23 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep) float set_size = 0.0f; if (arg2 == move_x_action) { - x_move = Strings::ToFloat(arg3.c_str()); + x_move = Strings::ToFloat(arg3); } if (arg2 == move_y_action) { - y_move = Strings::ToFloat(arg3.c_str()); + y_move = Strings::ToFloat(arg3); } if (arg2 == move_z_action) { - z_move = Strings::ToFloat(arg3.c_str()); + z_move = Strings::ToFloat(arg3); } if (arg2 == move_h_action) { - h_move = Strings::ToFloat(arg3.c_str()); + h_move = Strings::ToFloat(arg3); } if (arg2 == set_size_action) { - set_size = Strings::ToFloat(arg3.c_str()); + set_size = Strings::ToFloat(arg3); } door->SetLocation( @@ -370,7 +370,7 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep) if (arg1 == "opentype" && !arg2.empty() && Strings::IsNumber(arg2)) { Doors *door = entity_list.GetDoorsByID(c->GetDoorToolEntityId()); if (door) { - door->SetOpenType(Strings::ToInt(arg2.c_str())); + door->SetOpenType(Strings::ToInt(arg2)); } } @@ -378,7 +378,7 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep) if (arg1 == "setincline" && !arg2.empty() && Strings::IsNumber(arg2)) { Doors *door = entity_list.GetDoorsByID(c->GetDoorToolEntityId()); if (door) { - door->SetIncline(Strings::ToInt(arg2.c_str())); + door->SetIncline(Strings::ToInt(arg2)); } } @@ -386,7 +386,7 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep) if (arg1 == "setinvertstate" && !arg2.empty() && Strings::IsNumber(arg2)) { Doors *door = entity_list.GetDoorsByID(c->GetDoorToolEntityId()); if (door) { - door->SetInvertState(Strings::ToInt(arg2.c_str())); + door->SetInvertState(Strings::ToInt(arg2)); } } @@ -403,7 +403,7 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep) if (arg1 == "setinclineinc" && !arg2.empty() && Strings::IsNumber(arg2)) { Doors *door = entity_list.GetDoorsByID(c->GetDoorToolEntityId()); if (door) { - door->SetIncline(door->GetIncline() + Strings::ToInt(arg2.c_str())); + door->SetIncline(door->GetIncline() + Strings::ToInt(arg2)); } } diff --git a/zone/gm_commands/dye.cpp b/zone/gm_commands/dye.cpp index 4f2d39c1d..7fa4c73a2 100755 --- a/zone/gm_commands/dye.cpp +++ b/zone/gm_commands/dye.cpp @@ -32,7 +32,7 @@ void command_dye(Client *c, const Seperator *sep) c->Message(Chat::White, "Red, Green, and Blue go from 0 to 255."); for (const auto &slot : dye_slots) { - slot_messages.push_back(fmt::format("({}) {}", slot_id, slot)); + slot_messages.emplace_back(fmt::format("({}) {}", slot_id, slot)); slot_id++; } diff --git a/zone/gm_commands/entityvariable.cpp b/zone/gm_commands/entityvariable.cpp new file mode 100644 index 000000000..d6e10d204 --- /dev/null +++ b/zone/gm_commands/entityvariable.cpp @@ -0,0 +1,190 @@ +#include "../client.h" + +void command_entityvariable(Client *c, const Seperator *sep) +{ + const auto arguments = sep->argnum; + + if (!arguments) { + c->Message(Chat::White, "Usage: #entityvariable clear - Clear all entity variables on yourself or your target"); + c->Message(Chat::White, "Usage: #entityvariable delete [Variable Name] - Delete an entity variable from yourself or your target"); + c->Message(Chat::White, "Usage: #entityvariable set [Variable Name] [Variable Value] - Set an entity variable for yourself or your target"); + c->Message(Chat::White, "Usage: #entityvariable view [Variable Name] - View an entity variable on yourself or your target"); + c->Message(Chat::White, "Note: You can have spaces in variable names and values by wrapping in double quotes like this"); + c->Message(Chat::White, "Example: #entityvariable set \"Test Variable\" \"Test Value\""); + c->Message(Chat::White, "Note: Variable Value is optional and can be set to empty by not providing a value"); + return; + } + + const bool is_clear = !strcasecmp(sep->arg[1], "clear"); + const bool is_delete = !strcasecmp(sep->arg[1], "delete"); + const bool is_set = !strcasecmp(sep->arg[1], "set"); + const bool is_view = !strcasecmp(sep->arg[1], "view"); + + if ( + !is_clear && + !is_delete && + !is_set && + !is_view + ) { + c->Message(Chat::White, "Usage: #entityvariable clear - Clear all entity variables on yourself or your target"); + c->Message(Chat::White, "Usage: #entityvariable delete [Variable Name] - Delete an entity variable from yourself or your target"); + c->Message(Chat::White, "Usage: #entityvariable set [Variable Name] [Variable Value] - Set an entity variable for yourself or your target"); + c->Message(Chat::White, "Usage: #entityvariable view [Variable Name] - View an entity variable on yourself or your target"); + c->Message(Chat::White, "Note: You can have spaces in variable names and values by wrapping in double quotes like this"); + c->Message(Chat::White, "Example: #entityvariable set \"Test Variable\" \"Test Value\""); + c->Message(Chat::White, "Note: Variable Value is optional and can be set to empty by not providing a value"); + return; + } + + Mob* t = c; + if (c->GetTarget()) { + t = c->GetTarget(); + } + + if (is_clear) { + const auto cleared = t->ClearEntityVariables(); + + if (!cleared) { + c->Message( + Chat::White, + fmt::format( + "{} {} not have any entity variables to clear.", + c->GetTargetDescription(t, TargetDescriptionType::UCYou), + c == t ? "do" : "does" + ).c_str() + ); + + return; + } + + c->Message( + Chat::White, + fmt::format( + "Cleared all entity variables for {}.", + c->GetTargetDescription(t) + ).c_str() + ); + } else if (is_delete) { + const std::string variable_name = sep->argplus[2]; + + if (!t->EntityVariableExists(variable_name)) { + c->Message( + Chat::White, + fmt::format( + "{} {} not have an entity variable named '{}'.", + c->GetTargetDescription(t, TargetDescriptionType::UCYou), + c == t ? "do" : "does", + variable_name + ).c_str() + ); + + return; + } + + t->DeleteEntityVariable(variable_name); + + c->Message( + Chat::White, + fmt::format( + "Deleted an entity variable named '{}' from {}.", + variable_name, + c->GetTargetDescription(t) + ).c_str() + ); + + return; + } else if (is_set) { + const std::string variable_name = sep->arg[2]; + const std::string variable_value = sep->arg[3]; + + t->SetEntityVariable(variable_name, variable_value); + + c->Message( + Chat::White, + fmt::format( + "Set an entity variable named '{}' to a value of '{}' for {}.", + variable_name, + variable_value, + c->GetTargetDescription(t) + ).c_str() + ); + } else if (is_view) { + const auto &l = t->GetEntityVariables(); + + uint32 variable_count = 0; + uint32 variable_number = 1; + const std::string search_criteria = arguments ? sep->argplus[2] : ""; + + for (const auto &e: l) { + if ( + search_criteria.empty() || + Strings::Contains(Strings::ToLower(e), Strings::ToLower(search_criteria)) + ) { + c->Message( + Chat::White, + fmt::format( + "Variable {} | Name: {} Value: {} | {}", + variable_number, + e, + t->GetEntityVariable(e), + Saylink::Silent( + fmt::format( + "#entityvariable delete {}", + e + ), + "Delete" + ) + ).c_str() + ); + + variable_count++; + variable_number++; + } + } + + if (!variable_count) { + c->Message( + Chat::White, + fmt::format( + "{} {} no entity variables{}.", + c->GetTargetDescription(t, TargetDescriptionType::UCYou), + c == t ? "have" : "has", + ( + !search_criteria.empty() ? + fmt::format( + " matching '{}'", + search_criteria + ) : + "" + ) + ).c_str() + ); + + return; + } + + c->Message( + Chat::White, + fmt::format( + "{} {} {} entity variable{}{}, would you like to {} all of {} entity variables?", + c->GetTargetDescription(t, TargetDescriptionType::UCYou), + c == t ? "have" : "has", + variable_count, + variable_count != 1 ? "s" : "", + ( + !search_criteria.empty() ? + fmt::format( + " matching '{}'", + search_criteria + ) : + "" + ), + Saylink::Silent( + "#entityvariable clear", + "clear" + ), + c == t ? "your" : "their" + ).c_str() + ); + } +} diff --git a/zone/gm_commands/exptoggle.cpp b/zone/gm_commands/exptoggle.cpp index b267b4f7e..abc1d2b92 100644 --- a/zone/gm_commands/exptoggle.cpp +++ b/zone/gm_commands/exptoggle.cpp @@ -21,7 +21,7 @@ void command_exptoggle(Client *c, const Seperator *sep) Chat::White, fmt::format( "Experience gain for {} is now {}abled.", - c->GetTargetDescription(t, TargetDescriptionType::LCSelf), + c->GetTargetDescription(t), is_exp_enabled ? "en" : "dis" ).c_str() ); diff --git a/zone/gm_commands/faction.cpp b/zone/gm_commands/faction.cpp index b7ca12a65..2e1dd726e 100755 --- a/zone/gm_commands/faction.cpp +++ b/zone/gm_commands/faction.cpp @@ -107,7 +107,7 @@ void command_faction(Client *c, const Seperator *sep) ) ) { uint32 character_id = target->CharacterID(); - uint32 faction_id = Strings::ToUnsignedInt(faction_filter.c_str()); + uint32 faction_id = Strings::ToUnsignedInt(faction_filter); if (target->ReloadCharacterFaction(target, faction_id, character_id)) { c->Message( Chat::White, diff --git a/zone/gm_commands/findcurrency.cpp b/zone/gm_commands/findcurrency.cpp new file mode 100755 index 000000000..b5ad64c5a --- /dev/null +++ b/zone/gm_commands/findcurrency.cpp @@ -0,0 +1,134 @@ +#include "../client.h" + +void command_findcurrency(Client *c, const Seperator *sep) +{ + const auto arguments = sep->argnum; + if (!arguments) { + c->Message(Chat::White, "Usage: #findcurrency [Search Criteria]"); + return; + } + + const auto can_summon_items = c->Admin() >= GetCommandStatus(c, "summonitem"); + + if (sep->IsNumber(1)) { + const auto item_id = Strings::ToUnsignedInt(sep->arg[1]); + const auto currency_id = zone->GetCurrencyID(item_id); + + if (!currency_id) { + c->Message( + Chat::White, + fmt::format( + "There is no currency with an item ID of {}.", + item_id + ).c_str() + ); + + return; + } + + const auto item_data = database.GetItem(item_id); + if (!item_data) { + c->Message( + Chat::White, + fmt::format( + "Item ID {} does not exist.", + item_id + ).c_str() + ); + + return; + } + + c->Message( + Chat::White, + fmt::format( + "Currency {} | {} ({}){}", + currency_id, + database.CreateItemLink(item_id), + item_id, + ( + can_summon_items ? + fmt::format( + " | {}", + Saylink::Silent( + fmt::format( + "#summonitem {} {}", + item_id, + item_data->StackSize + ), + "Summon" + ) + ) : + "" + ) + ).c_str() + ); + + return; + } + + const std::string search_criteria = sep->argplus[1]; + + uint32 found_count = 0; + + for (const auto& e : zone->AlternateCurrencies) { + const auto item_data = database.GetItem(e.item_id); + if (!item_data) { + continue; + } + + const std::string item_name = Strings::ToLower(item_data->Name); + + if (Strings::Contains(item_name, Strings::ToLower(search_criteria))) { + c->Message( + Chat::White, + fmt::format( + "Currency {} | {} ({}){}", + e.id, + database.CreateItemLink(e.item_id), + e.item_id, + ( + can_summon_items ? + fmt::format( + " | {}", + Saylink::Silent( + fmt::format( + "#summonitem {} {}", + e.item_id, + item_data->StackSize + ), + "Summon" + ) + ) : + "" + ) + ).c_str() + ); + + found_count++; + } + } + + if (!found_count) { + c->Message( + Chat::White, + fmt::format( + "No currencies were found matching '{}'.", + search_criteria + ).c_str() + ); + + return; + } + + c->Message( + Chat::White, + fmt::format( + "{} currenc{} found matching '{}'.", + found_count, + found_count != 1 ? "ies were" : "y was", + search_criteria + ).c_str() + ); +} + diff --git a/zone/gm_commands/merchantcloseshop.cpp b/zone/gm_commands/merchantcloseshop.cpp deleted file mode 100755 index 571d80d46..000000000 --- a/zone/gm_commands/merchantcloseshop.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "../client.h" - -void command_merchantcloseshop(Client *c, const Seperator *sep) -{ - Mob *merchant = c->GetTarget(); - if (!merchant || merchant->GetClass() != MERCHANT) { - c->Message(Chat::White, "You must target a merchant to close their shop."); - return; - } - - merchant->CastToNPC()->MerchantCloseShop(); -} - diff --git a/zone/gm_commands/merchantopenshop.cpp b/zone/gm_commands/merchantopenshop.cpp deleted file mode 100755 index cd05465ba..000000000 --- a/zone/gm_commands/merchantopenshop.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "../client.h" - -void command_merchantopenshop(Client *c, const Seperator *sep) -{ - Mob *merchant = c->GetTarget(); - if (!merchant || merchant->GetClass() != MERCHANT) { - c->Message(Chat::White, "You must target a merchant to open their shop."); - return; - } - - merchant->CastToNPC()->MerchantOpenShop(); -} - diff --git a/zone/gm_commands/merchantshop.cpp b/zone/gm_commands/merchantshop.cpp new file mode 100755 index 000000000..9a803f363 --- /dev/null +++ b/zone/gm_commands/merchantshop.cpp @@ -0,0 +1,52 @@ +#include "../client.h" + +void command_merchantshop(Client *c, const Seperator *sep) +{ + const auto m = c->GetTarget(); + if ( + !m || + !m->IsNPC() || + ( + m->GetClass() != MERCHANT && + m->GetClass() != DISCORD_MERCHANT && + m->GetClass() != ADVENTURE_MERCHANT && + m->GetClass() != NORRATHS_KEEPERS_MERCHANT && + m->GetClass() != DARK_REIGN_MERCHANT && + m->GetClass() != ALT_CURRENCY_MERCHANT + ) + ) { + c->Message(Chat::White, "You must target a merchant."); + return; + } + + const auto arguments = sep->argnum; + if (!arguments) { + c->Message(Chat::White, "#merchantshop close - Close your targeted merchant's shop"); + c->Message(Chat::White, "#merchantshop open - Open your targeted merchant's shop"); + return; + } + + const bool is_close = !strcasecmp(sep->arg[1], "close"); + const bool is_open = !strcasecmp(sep->arg[1], "open"); + if (!is_close && !is_open) { + c->Message(Chat::White, "#merchantshop close - Close your targeted merchant's shop"); + c->Message(Chat::White, "#merchantshop open - Open your targeted merchant's shop"); + return; + } + + if (is_close) { + m->CastToNPC()->MerchantCloseShop(); + } else if (is_open) { + m->CastToNPC()->MerchantOpenShop(); + } + + c->Message( + Chat::White, + fmt::format( + "{} shop for {}.", + is_close ? "Closed" : "Opened", + c->GetTargetDescription(m) + ).c_str() + ); +} + diff --git a/zone/gm_commands/mysql.cpp b/zone/gm_commands/mysql.cpp index 38cb60430..1b915f471 100755 --- a/zone/gm_commands/mysql.cpp +++ b/zone/gm_commands/mysql.cpp @@ -56,7 +56,7 @@ void command_mysql(Client *c, const Seperator *sep) row_index < results.ColumnCount(); row_index++ ) { - lines.push_back( + lines.emplace_back( fmt::format( "{} | {} ", results.FieldName(row_index), diff --git a/zone/gm_commands/npcedit.cpp b/zone/gm_commands/npcedit.cpp index 26e449498..c5aacda2b 100755 --- a/zone/gm_commands/npcedit.cpp +++ b/zone/gm_commands/npcedit.cpp @@ -420,24 +420,18 @@ void command_npcedit(Client *c, const Seperator *sep) } else if (!strcasecmp(sep->arg[1], "special_attacks")) { std::string special_attacks = sep->argplus[2]; n.npcspecialattks = special_attacks; - c->Message( - Chat::Yellow, - fmt::format( - "{} is now using the following Special Attacks '{}'.", - npc_id_string, - special_attacks - ).c_str() + d = fmt::format( + "{} is now using the following Special Attacks '{}'.", + npc_id_string, + special_attacks ); } else if (!strcasecmp(sep->arg[1], "special_abilities")) { std::string special_abilities = sep->argplus[2]; n.special_abilities = special_abilities; - c->Message( - Chat::Yellow, - fmt::format( - "{} is now using the following Special Abilities '{}'.", - npc_id_string, - special_abilities - ).c_str() + d = fmt::format( + "{} is now using the following Special Abilities '{}'.", + npc_id_string, + special_abilities ); } else if (!strcasecmp(sep->arg[1], "aggroradius")) { if (sep->IsNumber(2)) { @@ -536,14 +530,14 @@ void command_npcedit(Client *c, const Seperator *sep) } else if (!strcasecmp(sep->arg[1], "weapon")) { if (sep->IsNumber(2)) { auto primary_model = Strings::ToUnsignedInt(sep->arg[2]); - uint32_t secondary_model = sep->arg[3] && sep->IsNumber(3) ? Strings::ToUnsignedInt(sep->arg[3]) : 0; + uint32_t secondary_model = sep->IsNumber(3) ? Strings::ToUnsignedInt(sep->arg[3]) : 0; n.d_melee_texture1 = primary_model; n.d_melee_texture2 = secondary_model; d = fmt::format( "{} will have Model {} set to their Primary and Model {} set to their Secondary on repop.", npc_id_string, - Strings::Commify(sep->arg[2]), - sep->arg[3] && sep->IsNumber(3) ? Strings::Commify(sep->arg[3]) : 0 + Strings::Commify(primary_model), + Strings::Commify(secondary_model) ); } else { c->Message( @@ -555,7 +549,7 @@ void command_npcedit(Client *c, const Seperator *sep) } else if (!strcasecmp(sep->arg[1], "meleetype")) { if (sep->IsNumber(2)) { auto primary_type = Strings::ToUnsignedInt(sep->arg[2]); - uint32_t secondary_type = sep->IsNumber(3) ? Strings::ToUnsignedInt(sep->arg[3]) : 0; + uint32_t secondary_type = sep->IsNumber(3) ? Strings::ToUnsignedInt(sep->arg[3]) : EQ::skills::SkillHandtoHand; auto primary_skill = EQ::skills::GetSkillName(static_cast(primary_type)); auto secondary_skill = EQ::skills::GetSkillName(static_cast(secondary_type)); @@ -1430,6 +1424,27 @@ void command_npcedit(Client *c, const Seperator *sep) ); return; } + } else if (!strcasecmp(sep->arg[1], "model")) { + if (sep->IsNumber(2)) { + auto race_id = static_cast(Strings::ToUnsignedInt(sep->arg[2])); + n.model = race_id; + if (race_id) { + d = fmt::format( + "{} is now using a(n) {} ({}) as their race model.", + npc_id_string, + GetRaceIDName(race_id), + race_id + ); + } else { + d = fmt::format( + "{} is no longer using a race model.", + npc_id_string + ); + } + } else { + c->Message(Chat::White, "Usage: #npcedit model [Race ID] - Sets an NPC's Race Model"); + return; + } } else if (!strcasecmp(sep->arg[1], "flymode")) { if (sep->IsNumber(2)) { auto flymode_id = static_cast(Strings::ToInt(sep->arg[2])); @@ -1491,6 +1506,38 @@ void command_npcedit(Client *c, const Seperator *sep) ); return; } + } else if (!strcasecmp(sep->arg[1], "heroic_strikethrough")) { + if (sep->IsNumber(2)) { + auto heroic_strikethrough = Strings::ToInt(sep->arg[2]); + n.heroic_strikethrough = heroic_strikethrough; + d = fmt::format( + "{} now has {} Heroic Strikethrough.", + npc_id_string, + Strings::Commify(sep->arg[2]) + ); + } else { + c->Message( + Chat::White, + "Usage: #npcedit heroic_strikethrough [Heroic Strikethrough] - Sets an NPC's Heroic Strikethrough" + ); + return; + } + } else if (!strcasecmp(sep->arg[1], "faction_amount")) { + if (sep->IsNumber(2)) { + auto faction_amount = Strings::ToInt(sep->arg[2]); + n.faction_amount = faction_amount; + d = fmt::format( + "{} now has a Faction Amount of {}.", + npc_id_string, + Strings::Commify(sep->arg[2]) + ); + } else { + c->Message( + Chat::White, + "Usage: #npcedit faction_amount [Faction Amount] - Sets an NPC's Faction Amount" + ); + return; + } } else if (!strcasecmp(sep->arg[1], "keeps_sold_items")) { if (sep->IsNumber(2)) { auto keeps_sold_items = static_cast(Strings::ToUnsignedInt(sep->arg[2])); @@ -1611,20 +1658,11 @@ void SendNPCEditSubCommands(Client *c) c->Message(Chat::White, "Usage: #npcedit manaregen [Mana Regen] - Sets an NPC's Mana Regen Rate Per Tick"); c->Message(Chat::White, "Usage: #npcedit loottable [Loottable ID] - Sets an NPC's Loottable ID"); c->Message(Chat::White, "Usage: #npcedit merchantid [Merchant ID] - Sets an NPC's Merchant ID"); - c->Message( - Chat::White, - "Usage: #npcedit alt_currency_id [Alternate Currency ID] - Sets an NPC's Alternate Currency ID" - ); + c->Message(Chat::White, "Usage: #npcedit alt_currency_id [Alternate Currency ID] - Sets an NPC's Alternate Currency ID"); c->Message(Chat::White, "Usage: #npcedit spell [Spell List ID] - Sets an NPC's Spells List ID"); - c->Message( - Chat::White, - "Usage: #npcedit npc_spells_effects_id [Spell Effects ID] - Sets an NPC's Spell Effects ID" - ); + c->Message(Chat::White, "Usage: #npcedit npc_spells_effects_id [Spell Effects ID] - Sets an NPC's Spell Effects ID"); c->Message(Chat::White, "Usage: #npcedit faction [Faction ID] - Sets an NPC's Faction ID"); - c->Message( - Chat::White, - "Usage: #npcedit adventure_template_id [Template ID] - Sets an NPC's Adventure Template ID" - ); + c->Message(Chat::White, "Usage: #npcedit adventure_template_id [Template ID] - Sets an NPC's Adventure Template ID"); c->Message(Chat::White, "Usage: #npcedit trap_template [Template ID] - Sets an NPC's Trap Template ID"); c->Message(Chat::White, "Usage: #npcedit damage [Minimum] [Maximum] - Sets an NPC's Damage"); c->Message(Chat::White, "Usage: #npcedit attackcount [Attack Count] - Sets an NPC's Attack Count"); @@ -1634,19 +1672,10 @@ void SendNPCEditSubCommands(Client *c) c->Message(Chat::White, "Usage: #npcedit assistradius [Radius] - Sets an NPC's Assist Radius"); c->Message(Chat::White, "Usage: #npcedit featuresave - Saves an NPC's current facial features to the database"); c->Message(Chat::White, "Usage: #npcedit armortint_id [Armor Tint ID] - Sets an NPC's Armor Tint ID"); - c->Message( - Chat::White, - "Usage: #npcedit color [Red] [Green] [Blue] - Sets an NPC's Red, Green, and Blue armor tint" - ); + c->Message(Chat::White, "Usage: #npcedit color [Red] [Green] [Blue] - Sets an NPC's Red, Green, and Blue armor tint"); c->Message(Chat::White, "Usage: #npcedit ammoidfile [ID File] - Sets an NPC's Ammo ID File"); - c->Message( - Chat::White, - "Usage: #npcedit weapon [Primary Model] [Secondary Model] - Sets an NPC's Primary and Secondary Weapon Model" - ); - c->Message( - Chat::White, - "Usage: #npcedit meleetype [Primary Type] [Secondary Type] - Sets an NPC's Melee Skill Types" - ); + c->Message(Chat::White, "Usage: #npcedit weapon [Primary Model] [Secondary Model] - Sets an NPC's Primary and Secondary Weapon Model"); + c->Message(Chat::White, "Usage: #npcedit meleetype [Primary Type] [Secondary Type] - Sets an NPC's Melee Skill Types"); c->Message(Chat::White, "Usage: #npcedit rangedtype [Type] - Sets an NPC's Ranged Skill Type"); c->Message(Chat::White, "Usage: #npcedit runspeed [Run Speed] - Sets an NPC's Run Speed"); c->Message(Chat::White, "Usage: #npcedit mr [Resistance] - Sets an NPC's Magic Resistance"); @@ -1656,30 +1685,15 @@ void SendNPCEditSubCommands(Client *c) c->Message(Chat::White, "Usage: #npcedit cr [Resistance] - Sets an NPC's Cold Resistance"); c->Message(Chat::White, "Usage: #npcedit corrup [Resistance] - Sets an NPC's Corruption Resistance"); c->Message(Chat::White, "Usage: #npcedit phr [Resistance] - Sets and NPC's Physical Resistance"); - c->Message( - Chat::White, - "Usage: #npcedit seeinvis [Flag] - Sets an NPC's See Invisible Flag [0 = Cannot See Invisible, 1 = Can See Invisible]" - ); - c->Message( - Chat::White, - "Usage: #npcedit seeinvisundead [Flag] - Sets an NPC's See Invisible vs. Undead Flag [0 = Cannot See Invisible vs. Undead, 1 = Can See Invisible vs. Undead]" - ); - c->Message( - Chat::White, - "Usage: #npcedit qglobal [Flag] - Sets an NPC's Quest Global Flag [0 = Quest Globals Off, 1 = Quest Globals On]" - ); + c->Message(Chat::White, "Usage: #npcedit seeinvis [Flag] - Sets an NPC's See Invisible Flag [0 = Cannot See Invisible, 1 = Can See Invisible]"); + c->Message(Chat::White, "Usage: #npcedit seeinvisundead [Flag] - Sets an NPC's See Invisible vs. Undead Flag [0 = Cannot See Invisible vs. Undead, 1 = Can See Invisible vs. Undead]"); + c->Message(Chat::White, "Usage: #npcedit qglobal [Flag] - Sets an NPC's Quest Global Flag [0 = Quest Globals Off, 1 = Quest Globals On]"); c->Message(Chat::White, "Usage: #npcedit ac [Armor Class] - Sets an NPC's Armor Class"); - c->Message( - Chat::White, - "Usage: #npcedit npcaggro [Flag] - Sets an NPC's NPC Aggro Flag [0 = Aggro NPCs Off, 1 = Aggro NPCs On]" - ); + c->Message(Chat::White, "Usage: #npcedit npcaggro [Flag] - Sets an NPC's NPC Aggro Flag [0 = Aggro NPCs Off, 1 = Aggro NPCs On]"); c->Message(Chat::White, "Usage: #npcedit spawn_limit [Limit] - Sets an NPC's Spawn Limit Counter"); c->Message(Chat::White, "Usage: #npcedit attackspeed [Attack Speed] - Sets an NPC's Attack Speed Modifier"); c->Message(Chat::White, "Usage: #npcedit attackdelay [Attack Delay] - Sets an NPC's Attack Delay"); - c->Message( - Chat::White, - "Usage: #npcedit findable [Flag] - Sets an NPC's Findable Flag [0 = Not Findable, 1 = Findable]" - ); + c->Message(Chat::White, "Usage: #npcedit findable [Flag] - Sets an NPC's Findable Flag [0 = Not Findable, 1 = Findable]"); c->Message(Chat::White, "Usage: #npcedit str [Strength] - Sets an NPC's Strength"); c->Message(Chat::White, "Usage: #npcedit sta [Stamina] - Sets an NPC's Stamina"); c->Message(Chat::White, "Usage: #npcedit agi [Agility] - Sets an NPC's Agility"); @@ -1687,44 +1701,20 @@ void SendNPCEditSubCommands(Client *c) c->Message(Chat::White, "Usage: #npcedit int [Intelligence] - Sets an NPC's Intelligence"); c->Message(Chat::White, "Usage: #npcedit wis [Wisdom] - Sets an NPC's Wisdom"); c->Message(Chat::White, "Usage: #npcedit cha [Charisma] - Sets an NPC's Charisma"); - c->Message( - Chat::White, - "Usage: #npcedit seehide [Flag] - Sets an NPC's See Hide Flag [0 = Cannot See Hide, 1 = Can See Hide]" - ); - c->Message( - Chat::White, - "Usage: #npcedit seeimprovedhide [Flag] - Sets an NPC's See Improved Hide Flag [0 = Cannot See Improved Hide, 1 = Can See Improved Hide]" - ); - c->Message( - Chat::White, - "Usage: #npcedit trackable [Flag] - Sets an NPC's Trackable Flag [0 = Not Trackable, 1 = Trackable]" - ); + c->Message(Chat::White, "Usage: #npcedit seehide [Flag] - Sets an NPC's See Hide Flag [0 = Cannot See Hide, 1 = Can See Hide]"); + c->Message(Chat::White, "Usage: #npcedit seeimprovedhide [Flag] - Sets an NPC's See Improved Hide Flag [0 = Cannot See Improved Hide, 1 = Can See Improved Hide]"); + c->Message(Chat::White, "Usage: #npcedit trackable [Flag] - Sets an NPC's Trackable Flag [0 = Not Trackable, 1 = Trackable]"); c->Message(Chat::White, "Usage: #npcedit atk [Attack] - Sets an NPC's Attack"); c->Message(Chat::White, "Usage: #npcedit accuracy [Accuracy] - Sets an NPC's Accuracy"); c->Message(Chat::White, "Usage: #npcedit avoidance [Avoidance] - Sets an NPC's Avoidance"); c->Message(Chat::White, "Usage: #npcedit slow_mitigation [Slow Mitigation] - Sets an NPC's Slow Mitigation"); c->Message(Chat::White, "Usage: #npcedit version [Version] - Sets an NPC's Version"); c->Message(Chat::White, "Usage: #npcedit maxlevel [Max Level] - Sets an NPC's Maximum Level"); - c->Message( - Chat::White, - "Usage: #npcedit scalerate [Scale Rate] - Sets an NPC's Scaling Rate [50 = 50%, 100 = 100%, 200 = 200%]" - ); - c->Message( - Chat::White, - "Usage: #npcedit spellscale [Scale Rate] - Sets an NPC's Spell Scaling Rate [50 = 50%, 100 = 100%, 200 = 200%]" - ); - c->Message( - Chat::White, - "Usage: #npcedit healscale [Scale Rate] - Sets an NPC's Heal Scaling Rate [50 = 50%, 100 = 100%, 200 = 200%]" - ); - c->Message( - Chat::White, - "Usage: #npcedit no_target [Flag] - Sets an NPC's No Target Hotkey Flag [0 = Not Targetable with Target Hotkey, 1 = Targetable with Target Hotkey]" - ); - c->Message( - Chat::White, - "Usage: #npcedit raidtarget [Flag] - Sets an NPC's Raid Target Flag [0 = Not a Raid Target, 1 = Raid Target]" - ); + c->Message(Chat::White, "Usage: #npcedit scalerate [Scale Rate] - Sets an NPC's Scaling Rate [50 = 50%, 100 = 100%, 200 = 200%]"); + c->Message(Chat::White, "Usage: #npcedit spellscale [Scale Rate] - Sets an NPC's Spell Scaling Rate [50 = 50%, 100 = 100%, 200 = 200%]"); + c->Message(Chat::White, "Usage: #npcedit healscale [Scale Rate] - Sets an NPC's Heal Scaling Rate [50 = 50%, 100 = 100%, 200 = 200%]"); + c->Message(Chat::White, "Usage: #npcedit no_target [Flag] - Sets an NPC's No Target Hotkey Flag [0 = Not Targetable with Target Hotkey, 1 = Targetable with Target Hotkey]"); + c->Message(Chat::White, "Usage: #npcedit raidtarget [Flag] - Sets an NPC's Raid Target Flag [0 = Not a Raid Target, 1 = Raid Target]"); c->Message(Chat::White, "Usage: #npcedit armtexture [Texture] - Sets an NPC's Arm Texture"); c->Message(Chat::White, "Usage: #npcedit bracertexture [Texture] - Sets an NPC's Bracer Texture"); c->Message(Chat::White, "Usage: #npcedit handtexture [Texture] - Sets an NPC's Hand Texture"); @@ -1732,60 +1722,24 @@ void SendNPCEditSubCommands(Client *c) c->Message(Chat::White, "Usage: #npcedit feettexture [Texture] - Sets an NPC's Feet Texture"); c->Message(Chat::White, "Usage: #npcedit walkspeed [Walk Speed] - Sets an NPC's Walk Speed"); c->Message(Chat::White, "Usage: #npcedit show_name [Flag] - Sets an NPC's Show Name Flag [0 = Hidden, 1 = Shown]"); - c->Message( - Chat::White, - "Usage: #npcedit untargetable [Flag] - Sets an NPC's Untargetable Flag [0 = Targetable, 1 = Untargetable]" - ); + c->Message(Chat::White, "Usage: #npcedit untargetable [Flag] - Sets an NPC's Untargetable Flag [0 = Targetable, 1 = Untargetable]"); c->Message(Chat::White, "Usage: #npcedit charm_ac [Armor Class] - Sets an NPC's Armor Class while Charmed"); c->Message(Chat::White, "Usage: #npcedit charm_min_dmg [Damage] - Sets an NPC's Minimum Damage while Charmed"); c->Message(Chat::White, "Usage: #npcedit charm_max_dmg [Damage] - Sets an NPC's Maximum Damage while Charmed"); - c->Message( - Chat::White, - "Usage: #npcedit charm_attack_delay [Attack Delay] - Sets an NPC's Attack Delay while Charmed" - ); - c->Message( - Chat::White, - "Usage: #npcedit charm_accuracy_rating [Accuracy] - Sets an NPC's Accuracy Rating while Charmed" - ); - c->Message( - Chat::White, - "Usage: #npcedit charm_avoidance_rating [Avoidance] - Sets an NPC's Avoidance Rating while Charmed" - ); + c->Message(Chat::White, "Usage: #npcedit charm_attack_delay [Attack Delay] - Sets an NPC's Attack Delay while Charmed"); + c->Message(Chat::White, "Usage: #npcedit charm_accuracy_rating [Accuracy] - Sets an NPC's Accuracy Rating while Charmed"); + c->Message(Chat::White, "Usage: #npcedit charm_avoidance_rating [Avoidance] - Sets an NPC's Avoidance Rating while Charmed"); c->Message(Chat::White, "Usage: #npcedit charm_atk [Attack] - Sets an NPC's Attack while Charmed"); - c->Message( - Chat::White, - "Usage: #npcedit skip_global_loot [Flag] - Sets an NPC's Skip Global Loot Flag [0 = Don't Skip, 1 = Skip" - ); - c->Message( - Chat::White, - "Usage: #npcedit rarespawn [Flag] - Sets an NPC's Rare Spawn Flag [0 = Not a Rare Spawn, 1 = Rare Spawn]" - ); - c->Message( - Chat::White, - "Usage: #npcedit stuck_behavior [Stuck Behavior] - Sets an NPC's Stuck Behavior [0 = Run to Target, 1 = Warp to Target, 2 = Take No Action, 3 = Evade Combat]" - ); - c->Message( - Chat::White, - "Usage: #npcedit flymode [Fly Mode] - Sets an NPC's Fly Mode [0 = Ground, 1 = Flying, 2 = Levitating, 3 = Water, 4 = Floating, 5 = Levitating While Running]" - ); - c->Message( - Chat::White, - "Usage: #npcedit always_aggro [Flag] - Sets an NPC's Always Aggro Flag [0 = Does not Always Aggro, 1 = Always Aggro]" - ); - c->Message( - Chat::White, - "Usage: #npcedit exp_mod [Modifier] - Sets an NPC's Experience Modifier [50 = 50%, 100 = 100%, 200 = 200%]" - ); - c->Message( - Chat::White, - "Usage: #npcedit keeps_sold_items [Flag] - Sets an NPC's Keeps Sold Items Flag [0 = False, 1 = True]" - ); - c->Message( - Chat::White, - "Usage: #npcedit setanimation [Animation ID] - Sets an NPC's Animation on Spawn (Stored in spawn2 table)" - ); - c->Message( - Chat::White, - "Usage: #npcedit respawntime [Respawn Time] - Sets an NPC's Respawn Timer in Seconds (Stored in spawn2 table)" - ); + c->Message(Chat::White, "Usage: #npcedit skip_global_loot [Flag] - Sets an NPC's Skip Global Loot Flag [0 = Don't Skip, 1 = Skip"); + c->Message(Chat::White, "Usage: #npcedit rarespawn [Flag] - Sets an NPC's Rare Spawn Flag [0 = Not a Rare Spawn, 1 = Rare Spawn]"); + c->Message(Chat::White, "Usage: #npcedit stuck_behavior [Stuck Behavior] - Sets an NPC's Stuck Behavior [0 = Run to Target, 1 = Warp to Target, 2 = Take No Action, 3 = Evade Combat]"); + c->Message(Chat::White, "Usage: #npcedit model [Race ID] - Sets an NPC's Race Model"); + c->Message(Chat::White, "Usage: #npcedit flymode [Fly Mode] - Sets an NPC's Fly Mode [0 = Ground, 1 = Flying, 2 = Levitating, 3 = Water, 4 = Floating, 5 = Levitating While Running]"); + c->Message(Chat::White, "Usage: #npcedit always_aggro [Flag] - Sets an NPC's Always Aggro Flag [0 = Does not Always Aggro, 1 = Always Aggro]"); + c->Message(Chat::White, "Usage: #npcedit exp_mod [Modifier] - Sets an NPC's Experience Modifier [50 = 50%, 100 = 100%, 200 = 200%]"); + c->Message(Chat::White, "Usage: #npcedit heroic_strikethrough [Heroic Strikethrough] - Sets an NPC's Heroic Strikethrough"); + c->Message(Chat::White, "Usage: #npcedit faction_amount [Faction Amount] - Sets an NPC's Faction Amount"); + c->Message(Chat::White, "Usage: #npcedit keeps_sold_items [Flag] - Sets an NPC's Keeps Sold Items Flag [0 = False, 1 = True]"); + c->Message(Chat::White, "Usage: #npcedit setanimation [Animation ID] - Sets an NPC's Animation on Spawn (Stored in spawn2 table)"); + c->Message(Chat::White, "Usage: #npcedit respawntime [Respawn Time] - Sets an NPC's Respawn Timer in Seconds (Stored in spawn2 table)"); } diff --git a/zone/gm_commands/opcode.cpp b/zone/gm_commands/opcode.cpp deleted file mode 100755 index f98c39ef1..000000000 --- a/zone/gm_commands/opcode.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "../client.h" -#include "../../common/patches/patches.h" - -void command_opcode(Client *c, const Seperator *sep) -{ - ReloadAllPatches(); - c->Message(Chat::White, "Opcodes for all patches have been reloaded"); -} - diff --git a/zone/gm_commands/questerrors.cpp b/zone/gm_commands/questerrors.cpp index 70d7d2603..4be3b19a3 100755 --- a/zone/gm_commands/questerrors.cpp +++ b/zone/gm_commands/questerrors.cpp @@ -11,8 +11,15 @@ void command_questerrors(Client *c, const Seperator *sep) int error_index = 0; for (auto quest_error : quest_errors) { - if (error_index >= 30) { - c->Message(Chat::White, "Maximum of 30 errors shown."); + if (error_index >= RuleI(World, MaximumQuestErrors)) { + c->Message( + Chat::White, + fmt::format( + "Maximum of {} error{} shown.", + RuleI(World, MaximumQuestErrors), + RuleI(World, MaximumQuestErrors) != 1 ? "s" : "" + ).c_str() + ); break; } diff --git a/zone/gm_commands/reload.cpp b/zone/gm_commands/reload.cpp index 09db786ea..97e55d7cb 100644 --- a/zone/gm_commands/reload.cpp +++ b/zone/gm_commands/reload.cpp @@ -1,16 +1,18 @@ #include "../client.h" +#include "../../common/patches/patches.h" void command_reload(Client *c, const Seperator *sep) { std::string command = sep->arg[0] ? sep->arg[0] : ""; - int arguments = sep->argnum; + const auto arguments = sep->argnum; if (!arguments && Strings::Contains(command, "#reload")) { c->SendReloadCommandMessages(); return; } - bool is_rq_alias = sep->arg[0] && Strings::Contains(command, "#rq"); bool is_logs_reload_alias = sep->arg[0] && Strings::Contains(command, "#rl"); + bool is_opcodes_reload_alias = sep->arg[0] && Strings::Contains(command, "#opcode"); + bool is_rq_alias = sep->arg[0] && Strings::Contains(command, "#rq"); bool is_aa = !strcasecmp(sep->arg[1], "aa"); bool is_alternate_currencies = !strcasecmp(sep->arg[1], "alternate_currencies"); bool is_blocked_spells = !strcasecmp(sep->arg[1], "blocked_spells"); @@ -24,6 +26,7 @@ void command_reload(Client *c, const Seperator *sep) bool is_merchants = !strcasecmp(sep->arg[1], "merchants"); bool is_npc_emotes = !strcasecmp(sep->arg[1], "npc_emotes"); bool is_objects = !strcasecmp(sep->arg[1], "objects"); + bool is_opcodes = !strcasecmp(sep->arg[1], "opcodes") || is_opcodes_reload_alias; bool is_perl_export = !strcasecmp(sep->arg[1], "perl_export"); bool is_quest = !strcasecmp(sep->arg[1], "quest") || (is_rq_alias); bool is_rules = !strcasecmp(sep->arg[1], "rules"); @@ -51,6 +54,7 @@ void command_reload(Client *c, const Seperator *sep) !is_merchants && !is_npc_emotes && !is_objects && + !is_opcodes && !is_perl_export && !is_quest && !is_rules && @@ -63,7 +67,7 @@ void command_reload(Client *c, const Seperator *sep) !is_world && !is_zone && !is_zone_points - ) { + ) { c->SendReloadCommandMessages(); return; } @@ -73,36 +77,28 @@ void command_reload(Client *c, const Seperator *sep) if (is_aa) { c->Message(Chat::White, "Attempting to reload Alternate Advancement Data globally."); pack = new ServerPacket(ServerOP_ReloadAAData, 0); - } - else if (is_alternate_currencies) { + } else if (is_alternate_currencies) { c->Message(Chat::White, "Attempting to reload Alternate Currencies globally."); pack = new ServerPacket(ServerOP_ReloadAlternateCurrencies, 0); - } - else if (is_blocked_spells) { + } else if (is_blocked_spells) { c->Message(Chat::White, "Attempting to reload Blocked Spells globally."); pack = new ServerPacket(ServerOP_ReloadBlockedSpells, 0); - } - else if (is_commands) { + } else if (is_commands) { c->Message(Chat::White, "Attempting to reload Commands globally."); pack = new ServerPacket(ServerOP_ReloadCommands, 0); - } - else if (is_content_flags) { + } else if (is_content_flags) { c->Message(Chat::White, "Attempting to reload Content Flags globally."); pack = new ServerPacket(ServerOP_ReloadContentFlags, 0); - } - else if (is_doors) { + } else if (is_doors) { c->Message(Chat::White, "Attempting to reload Doors globally."); pack = new ServerPacket(ServerOP_ReloadDoors, 0); - } - else if (is_dztemplates) { + } else if (is_dztemplates) { c->Message(Chat::White, "Attempting to reload Dynamic Zone Templates globally."); pack = new ServerPacket(ServerOP_ReloadDzTemplates, 0); - } - else if (is_ground_spawns) { + } else if (is_ground_spawns) { c->Message(Chat::White, "Attempting to reload Ground Spawns globally."); pack = new ServerPacket(ServerOP_ReloadGroundSpawns, 0); - } - else if (is_level_mods) { + } else if (is_level_mods) { if (!RuleB(Zone, LevelBasedEXPMods)) { c->Message(Chat::White, "Level Based Experience Modifiers are disabled."); return; @@ -110,75 +106,60 @@ void command_reload(Client *c, const Seperator *sep) c->Message(Chat::White, "Attempting to reload Level Based Experience Modifiers globally."); pack = new ServerPacket(ServerOP_ReloadLevelEXPMods, 0); - } - else if (is_logs) { + } else if (is_logs) { c->Message(Chat::White, "Attempting to reload Log Settings globally."); pack = new ServerPacket(ServerOP_ReloadLogs, 0); - } - else if (is_merchants) { + } else if (is_merchants) { c->Message(Chat::White, "Attempting to reload Merchants globally."); pack = new ServerPacket(ServerOP_ReloadMerchants, 0); - } - else if (is_npc_emotes) { + } else if (is_npc_emotes) { c->Message(Chat::White, "Attempting to reload NPC Emotes globally."); pack = new ServerPacket(ServerOP_ReloadNPCEmotes, 0); - } - else if (is_objects) { + } else if (is_objects) { c->Message(Chat::White, "Attempting to reload Objects globally."); pack = new ServerPacket(ServerOP_ReloadObjects, 0); - } - else if (is_perl_export) { + } else if (is_opcodes) { + c->Message(Chat::White, "Attempting to reload Opcodes globally."); + pack = new ServerPacket(ServerOP_ReloadOpcodes, 0); + } else if (is_perl_export) { c->Message(Chat::White, "Attempting to reload Perl Event Export Settings globally."); pack = new ServerPacket(ServerOP_ReloadPerlExportSettings, 0); - } - else if (is_quest) { - bool stop_timers = false; - - if (sep->IsNumber(2)) { - stop_timers = Strings::ToInt(sep->arg[2]) != 0 ? true : false; - } - - std::string stop_timers_message = stop_timers ? " and timers stopped" : ""; + } else if (is_quest) { + const auto stop_timers = sep->IsNumber(2) ? Strings::ToBool(sep->arg[2]) : false; c->Message( Chat::Yellow, fmt::format( "Quests reloaded{} for {}.", - stop_timers_message, + stop_timers ? " and timers stopped" : "", zone->GetZoneDescription() ).c_str() ); entity_list.ClearAreas(); parse->ReloadQuests(stop_timers); - } - else if (is_rules) { + } else if (is_rules) { c->Message(Chat::White, "Attempting to reload Rules globally."); pack = new ServerPacket(ServerOP_ReloadRules, 0); - } - else if (is_static) { + } else if (is_static) { c->Message(Chat::White, "Attempting to reload Static Zone Data globally."); pack = new ServerPacket(ServerOP_ReloadStaticZoneData, 0); - } - else if (is_tasks) { + } else if (is_tasks) { uint32 task_id = 0; if (!sep->IsNumber(2)) { c->Message(Chat::White, "Attempting to reload Tasks globally."); pack = new ServerPacket(ServerOP_ReloadTasks, sizeof(ReloadTasks_Struct)); - } - else { + } else { task_id = Strings::ToUnsignedInt(sep->arg[2]); } auto rts = (ReloadTasks_Struct *) pack->pBuffer; rts->reload_type = RELOADTASKS; rts->task_id = task_id; - } - else if (is_titles) { + } else if (is_titles) { c->Message(Chat::White, "Attempting to reload Titles globally."); pack = new ServerPacket(ServerOP_ReloadTitles, 0); - } - else if (is_traps) { + } else if (is_traps) { if (arguments < 2 || !sep->IsNumber(2)) { entity_list.UpdateAllTraps(true, true); c->Message( @@ -191,7 +172,7 @@ void command_reload(Client *c, const Seperator *sep) return; } - bool global = Strings::ToInt(sep->arg[2]) ? true : false; + const auto global = Strings::ToBool(sep->arg[2]); if (!global) { entity_list.UpdateAllTraps(true, true); @@ -207,16 +188,13 @@ void command_reload(Client *c, const Seperator *sep) c->Message(Chat::White, "Attempting to reload Traps globally."); pack = new ServerPacket(ServerOP_ReloadTraps, 0); - } - else if (is_variables) { + } else if (is_variables) { c->Message(Chat::White, "Attempting to reload Variables globally."); pack = new ServerPacket(ServerOP_ReloadVariables, 0); - } - else if (is_veteran_rewards) { + } else if (is_veteran_rewards) { c->Message(Chat::White, "Attempting to reload Veteran Rewards globally."); pack = new ServerPacket(ServerOP_ReloadVeteranRewards, 0); - } - else if (is_world) { + } else if (is_world) { uint8 global_repop = ReloadWorld::NoRepop; if (sep->IsNumber(2)) { @@ -233,12 +211,12 @@ void command_reload(Client *c, const Seperator *sep) "Attempting to reload Quests {}worldwide.", ( global_repop ? - ( - global_repop == ReloadWorld::Repop ? - "and repop NPCs " : - "and forcefully repop NPCs " - ) : - "" + ( + global_repop == ReloadWorld::Repop ? + "and repop NPCs " : + "and forcefully repop NPCs " + ) : + "" ) ).c_str() ); @@ -246,8 +224,7 @@ void command_reload(Client *c, const Seperator *sep) pack = new ServerPacket(ServerOP_ReloadWorld, sizeof(ReloadWorld_Struct)); auto RW = (ReloadWorld_Struct *) pack->pBuffer; RW->global_repop = global_repop; - } - else if (is_zone) { + } else if (is_zone) { zone_store.LoadZones(content_db); if (arguments < 2) { @@ -257,8 +234,8 @@ void command_reload(Client *c, const Seperator *sep) "Zone Header Load {} | Zone: {}", ( zone->LoadZoneCFG(zone->GetShortName(), zone->GetInstanceVersion()) ? - "Succeeded" : - "Failed" + "Succeeded" : + "Failed" ), zone->GetZoneDescription() ).c_str() @@ -268,8 +245,8 @@ void command_reload(Client *c, const Seperator *sep) auto zone_id = ( sep->IsNumber(2) ? - Strings::ToUnsignedInt(sep->arg[2]) : - ZoneID(sep->arg[2]) + Strings::ToUnsignedInt(sep->arg[2]) : + ZoneID(sep->arg[2]) ); if (!zone_id) { c->Message( @@ -286,8 +263,8 @@ void command_reload(Client *c, const Seperator *sep) auto zone_long_name = ZoneLongName(zone_id); auto version = ( sep->IsNumber(3) ? - Strings::ToUnsignedInt(sep->arg[3]) : - 0 + Strings::ToUnsignedInt(sep->arg[3]) : + 0 ); auto outapp = new EQApplicationPacket(OP_NewZone, sizeof(NewZone_Struct)); @@ -301,23 +278,22 @@ void command_reload(Client *c, const Seperator *sep) "Zone Header Load {} | Zone: {} ({}){}", ( zone->LoadZoneCFG(zone_short_name, version) ? - "Succeeded" : - "Failed" + "Succeeded" : + "Failed" ), zone_long_name, zone_short_name, ( version ? - fmt::format( - " Version: {}", - version - ) : - "" + fmt::format( + " Version: {}", + version + ) : + "" ) ).c_str() ); - } - else if (is_zone_points) { + } else if (is_zone_points) { c->Message(Chat::White, "Attempting to reloading Zone Points globally."); pack = new ServerPacket(ServerOP_ReloadZonePoints, 0); } diff --git a/zone/gm_commands/set_adventure_points.cpp b/zone/gm_commands/set_adventure_points.cpp index 160344fd2..89a309b94 100755 --- a/zone/gm_commands/set_adventure_points.cpp +++ b/zone/gm_commands/set_adventure_points.cpp @@ -35,7 +35,7 @@ void command_set_adventure_points(Client *c, const Seperator *sep) auto theme_id = Strings::ToUnsignedInt(sep->arg[1]); if (!EQ::ValueWithin(theme_id, LDoNThemes::Unused, LDoNThemes::TAK)) { c->Message(Chat::White, "Valid themes are as follows."); - auto theme_map = EQ::constants::GetLDoNThemeMap(); + auto& theme_map = EQ::constants::GetLDoNThemeMap(); for (const auto& theme : theme_map) { c->Message( Chat::White, diff --git a/zone/gm_commands/setanim.cpp b/zone/gm_commands/setanim.cpp index 2a191aac2..72f16edc9 100755 --- a/zone/gm_commands/setanim.cpp +++ b/zone/gm_commands/setanim.cpp @@ -2,9 +2,24 @@ void command_setanim(Client *c, const Seperator *sep) { - int arguments = sep->argnum; + const auto arguments = sep->argnum; if (!arguments || !sep->IsNumber(1)) { - c->Message(Chat::White, "Usage: #setanim [Animation ID (IDs are 0 to 4)]"); + c->Message(Chat::White, "Usage: #setanim [Animation ID]"); + + uint32 animation_number = 1; + for (const auto& a : EQ::constants::GetSpawnAnimationMap()) { + c->Message( + Chat::White, + fmt::format( + "Animation {} | ID: {} Name: {}", + animation_number, + a.first, + a.second + ).c_str() + ); + + animation_number++; + } return; } @@ -13,29 +28,36 @@ void command_setanim(Client *c, const Seperator *sep) target = c->GetTarget(); } - - int animation_id = Strings::ToInt(sep->arg[1]); + const auto animation_id = static_cast(Strings::ToUnsignedInt(sep->arg[1])); if ( - animation_id < 0 || - animation_id > eaLooting + !EQ::ValueWithin( + animation_id, + static_cast(eaStanding), + static_cast(eaLooting) + ) ) { - c->Message(Chat::White, "Usage: #setanim [Animation ID (IDs are 0 to 4)]"); + c->Message(Chat::White, "Usage: #setanim [Animation ID]"); + + uint32 animation_number = 1; + for (const auto& a : EQ::constants::GetSpawnAnimationMap()) { + c->Message( + Chat::White, + fmt::format( + "Animation {} | ID: {} Name: {}", + animation_number, + a.first, + a.second + ).c_str() + ); + + animation_number++; + } return; } target->SetAppearance(static_cast(animation_id), false); - std::string animation_name; - if (animation_id == eaStanding) { - animation_name = "Standing"; - } else if (animation_id == eaSitting) { - animation_name = "Sitting"; - } else if (animation_id == eaCrouching) { - animation_name = "Crouching"; - } else if (animation_id == eaDead) { - animation_name = "Dead"; - } else if (animation_id == eaLooting) { - animation_name = "Looting"; - } + + const auto animation_name = EQ::constants::GetSpawnAnimationName(animation_id); c->Message( Chat::White, diff --git a/zone/gm_commands/setskill.cpp b/zone/gm_commands/setskill.cpp index 297b36688..428a9cc48 100755 --- a/zone/gm_commands/setskill.cpp +++ b/zone/gm_commands/setskill.cpp @@ -2,54 +2,45 @@ void command_setskill(Client *c, const Seperator *sep) { - Client *target = c; - if (c->GetTarget() && c->GetTarget()->IsClient()) { - target = c->GetTarget()->CastToClient(); - } + const auto arguments = sep->argnum; - auto skill_id = sep->IsNumber(1) ? Strings::ToInt(sep->arg[1]) : -1; - auto skill_value = sep->IsNumber(2) ? Strings::ToInt(sep->arg[2]) : -1; - if ( - skill_id < 0 || - skill_id > EQ::skills::HIGHEST_SKILL || - skill_value < 0 || - skill_value > HIGHEST_CAN_SET_SKILL - ) { + if (arguments < 2 || !sep->IsNumber(1) || !sep->IsNumber(2)) { c->Message(Chat::White, "Usage: #setskill [Skill ID] [Skill Value]"); - c->Message(Chat::White, fmt::format("Skill ID = 0 to {}", EQ::skills::HIGHEST_SKILL).c_str()); - c->Message(Chat::White, fmt::format("Skill Value = 0 to {}", HIGHEST_CAN_SET_SKILL).c_str()); + return; } - else { - LogInfo( - "Set skill request from [{}], Target: [{}] Skill ID: [{}] Skill Value: [{}]", - c->GetCleanName(), - c->GetTargetDescription(target), - skill_id, - skill_value + + auto t = c; + if (c->GetTarget() && c->GetTarget()->IsClient()) { + t = c->GetTarget()->CastToClient(); + } + + const auto skill_id = Strings::ToInt(sep->arg[1]); + const auto skill_value = Strings::ToInt(sep->arg[2]); + + if (!EQ::ValueWithin(skill_id, EQ::skills::Skill1HBlunt, EQ::skills::HIGHEST_SKILL)) { + c->Message(Chat::White, "Usage: #setskill [Skill ID] [Skill Value]"); + c->Message(Chat::White, fmt::format("Skill ID: 0 to {}", EQ::skills::HIGHEST_SKILL).c_str()); + return; + } + + const auto skill_type = static_cast(skill_id); + + t->SetSkill( + skill_type, + skill_value > t->MaxSkill(skill_type) ? t->MaxSkill(skill_type) : skill_value + ); + + if (c != t) { + c->Message( + Chat::White, + fmt::format( + "Set {} ({}) to {} for {}.", + EQ::skills::GetSkillName(skill_type), + skill_id, + skill_value > t->MaxSkill(skill_type) ? t->MaxSkill(skill_type) : skill_value, + c->GetTargetDescription(t) + ).c_str() ); - - if ( - skill_id >= EQ::skills::Skill1HBlunt && - skill_id <= EQ::skills::HIGHEST_SKILL - ) { - target->SetSkill( - (EQ::skills::SkillType) skill_id, - skill_value - ); - - if (c != target) { - c->Message( - Chat::White, - fmt::format( - "Set {} ({}) to {} for {}.", - EQ::skills::GetSkillName((EQ::skills::SkillType) skill_id), - skill_id, - skill_value, - c->GetTargetDescription(target) - ).c_str() - ); - } - } } } diff --git a/zone/gm_commands/setskillall.cpp b/zone/gm_commands/setskillall.cpp index e3652aef0..16f38a5ef 100755 --- a/zone/gm_commands/setskillall.cpp +++ b/zone/gm_commands/setskillall.cpp @@ -2,45 +2,42 @@ void command_setskillall(Client *c, const Seperator *sep) { - auto target = c; - if (c->GetTarget() && c->GetTarget()->IsClient()) { - target = c->GetTarget()->CastToClient(); + const auto arguments = sep->argnum; + + if (!arguments || !sep->IsNumber(1)) { + c->Message(Chat::White, "Usage: #setskillall [Skill Level] - Set all of your or your target's skills to the specified skill level"); + return; } - if (!sep->IsNumber(1)) { - c->Message(Chat::White, "Usage: #setskillall [Skill Level] - Set all of your or your target's skills to the specified skill level"); - c->Message( - Chat::White, - fmt::format( - "Note: Skill Level ranges from 0 to {}", - HIGHEST_CAN_SET_SKILL - ).c_str() - ); - } else { - if (c->Admin() >= commandSetSkillsOther || c->GetTarget() == c) { - LogInfo( - "Set ALL skill request from [{}], target:[{}]", - c->GetCleanName(), - c->GetTargetDescription(target) - ); + auto t = c; + if (c->GetTarget() && c->GetTarget()->IsClient()) { + t = c->GetTarget()->CastToClient(); + } - auto skill_level = static_cast(Strings::ToUnsignedInt(sep->arg[1])); + if (c->Admin() < commandSetSkillsOther && t != c) { + c->Message(Chat::White, "Your status is not high enough to set another player's skills."); + return; + } + auto skill_level = static_cast(Strings::ToUnsignedInt(sep->arg[1])); + + for (const auto& s : EQ::skills::GetSkillTypeMap()) { + if (c != t) { c->Message( Chat::White, fmt::format( - "Setting all skills to {} for {}.", - skill_level, - c->GetTargetDescription(target) + "Setting {} ({}) to {} for {}.", + s.second, + s.first, + skill_level > t->MaxSkill(s.first) ? t->MaxSkill(s.first) : skill_level, + c->GetTargetDescription(t) ).c_str() ); - - for (EQ::skills::SkillType skill_num = EQ::skills::Skill1HBlunt; skill_num <= EQ::skills::HIGHEST_SKILL; skill_num = (EQ::skills::SkillType) (skill_num + 1)) { - target->SetSkill(skill_num, skill_level); - } - } else { - c->Message(Chat::White, "Your status is not high enough to set another player's skills."); } + + t->SetSkill( + s.first, + skill_level > t->MaxSkill(s.first) ? t->MaxSkill(s.first) : skill_level + ); } } - diff --git a/zone/gm_commands/showbonusstats.cpp b/zone/gm_commands/showbonusstats.cpp deleted file mode 100755 index 2680b36f1..000000000 --- a/zone/gm_commands/showbonusstats.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include "../client.h" - -void command_showbonusstats(Client *c, const Seperator *sep) -{ - if (c->GetTarget() == 0) { - c->Message(Chat::White, "ERROR: No target!"); - } - else if (!c->GetTarget()->IsMob() && !c->GetTarget()->IsClient()) { - c->Message(Chat::White, "ERROR: Target is not a Mob or Player!"); - } - else { - bool bAll = false; - if (sep->arg[1][0] == '\0' || strcasecmp(sep->arg[1], "all") == 0) { - bAll = true; - } - if (bAll || (strcasecmp(sep->arg[1], "item") == 0)) { - c->Message(Chat::White, "Target Item Bonuses:"); - c->Message( - Chat::White, - " Accuracy: %i%% Divine Save: %i%%", - c->GetTarget()->GetItemBonuses().Accuracy, - c->GetTarget()->GetItemBonuses().DivineSaveChance - ); - c->Message( - Chat::White, - " Flurry: %i%% HitChance: %i%%", - c->GetTarget()->GetItemBonuses().FlurryChance, - c->GetTarget()->GetItemBonuses().HitChance / 15 - ); - } - if (bAll || (strcasecmp(sep->arg[1], "spell") == 0)) { - c->Message(Chat::White, " Target Spell Bonuses:"); - c->Message( - Chat::White, - " Accuracy: %i%% Divine Save: %i%%", - c->GetTarget()->GetSpellBonuses().Accuracy, - c->GetTarget()->GetSpellBonuses().DivineSaveChance - ); - c->Message( - Chat::White, - " Flurry: %i%% HitChance: %i%% ", - c->GetTarget()->GetSpellBonuses().FlurryChance, - c->GetTarget()->GetSpellBonuses().HitChance / 15 - ); - } - c->Message(Chat::White, " Effective Casting Level: %i", c->GetTarget()->GetCasterLevel(0)); - } -} - diff --git a/zone/gm_commands/shownpcgloballoot.cpp b/zone/gm_commands/shownpcgloballoot.cpp index 4ff39b6c7..e8c1026cd 100755 --- a/zone/gm_commands/shownpcgloballoot.cpp +++ b/zone/gm_commands/shownpcgloballoot.cpp @@ -7,17 +7,8 @@ void command_shownpcgloballoot(Client *c, const Seperator *sep) return; } - auto target = c->GetTarget()->CastToNPC(); + const auto t = c->GetTarget()->CastToNPC(); - c->Message( - Chat::White, - fmt::format( - "Global loot for {} ({}).", - target->GetCleanName(), - target->GetNPCTypeID() - ).c_str() - ); - - zone->ShowNPCGlobalLoot(c, target); + zone->ShowNPCGlobalLoot(c, t); } diff --git a/zone/gm_commands/showspells.cpp b/zone/gm_commands/showspells.cpp new file mode 100755 index 000000000..3cfbe8cd7 --- /dev/null +++ b/zone/gm_commands/showspells.cpp @@ -0,0 +1,37 @@ +#include "../client.h" + +void command_showspells(Client *c, const Seperator *sep) +{ + const auto arguments = sep->argnum; + if (!arguments) { + c->Message(Chat::White, "Usages: #showspells disciplines - Show your or your target's learned disciplines"); + c->Message(Chat::White, "Usages: #showspells spells - Show your or your target's memorized spells"); + return; + } + + auto t = c; + if (c->GetTarget() && c->GetTarget()->IsClient()) { + t = c->GetTarget()->CastToClient(); + } + + const auto is_disciplines = !strcasecmp(sep->arg[1], "disciplines"); + const auto is_spells = !strcasecmp(sep->arg[1], "spells"); + if ( + !is_disciplines && + !is_spells + ) { + c->Message(Chat::White, "Usages: #showspells disciplines - Show your or your target's learned disciplines"); + c->Message(Chat::White, "Usages: #showspells spells - Show your or your target's memorized spells"); + } + + ShowSpellType show_spell_type; + + if (is_disciplines) { + show_spell_type = ShowSpellType::Disciplines; + } else if (is_spells) { + show_spell_type = ShowSpellType::Spells; + } + + t->ShowSpells(c, show_spell_type); +} + diff --git a/zone/gm_commands/showzonegloballoot.cpp b/zone/gm_commands/showzonegloballoot.cpp index 570a9802e..95e364d24 100755 --- a/zone/gm_commands/showzonegloballoot.cpp +++ b/zone/gm_commands/showzonegloballoot.cpp @@ -2,15 +2,6 @@ void command_showzonegloballoot(Client *c, const Seperator *sep) { - c->Message( - Chat::White, - fmt::format( - "Global loot for {} ({}).", - zone->GetLongName(), - zone->GetZoneID() - ).c_str() - ); - zone->ShowZoneGlobalLoot(c); } diff --git a/zone/gm_commands/spawn.cpp b/zone/gm_commands/spawn.cpp index 2dd42ccd6..78ab443af 100755 --- a/zone/gm_commands/spawn.cpp +++ b/zone/gm_commands/spawn.cpp @@ -2,19 +2,36 @@ void command_spawn(Client *c, const Seperator *sep) { - if (sep->arg[1][0] != 0) { - Client *client = entity_list.GetClientByName(sep->arg[1]); - if (client) { - c->Message(Chat::White, "You cannot spawn a mob with the same name as a character!"); - return; - } - } - - NPC *npc = NPC::SpawnNPC(sep->argplus[1], c->GetPosition(), c); - if (!npc) { + const auto arguments = sep->argnum; + if (!arguments) { + c->Message(Chat::White, "Usage: #spawn [Name]"); c->Message( Chat::White, - "Format: #spawn name race level material hp gender class priweapon secweapon merchantid bodytype - spawns a npc those parameters." + "Optional Usage: #spawn [Name] [Race] [Level] [Texture] [Health] [Gender] [Class] [Primary Model] [Secondary Model] [Merchant ID] [Body Type]" + ); + c->Message( + Chat::White, + "Name Format: NPCFirstname_NPCLastname - All numbers in a name are stripped and \"_\" characters become a space." + ); + c->Message( + Chat::White, + "Note: Using \"-\" for gender will autoselect the gender for the race. Using \"-\" for HP will use the calculated maximum HP." + ); + return; + } + + const auto* m = entity_list.GetClientByName(sep->arg[1]); + if (m) { + c->Message(Chat::White, "You cannot spawn a mob with the same name as a character!"); + return; + } + + const auto* n = NPC::SpawnNPC(sep->argplus[1], c->GetPosition(), c); + if (!n) { + c->Message(Chat::White, "Usage: #spawn [Name]"); + c->Message( + Chat::White, + "Optional Usage: #spawn [Name] [Race] [Level] [Texture] [Health] [Gender] [Class] [Primary Model] [Secondary Model] [Merchant ID] [Body Type]" ); c->Message( Chat::White, diff --git a/zone/gm_commands/spellinfo.cpp b/zone/gm_commands/spellinfo.cpp deleted file mode 100755 index 83c6c5cfe..000000000 --- a/zone/gm_commands/spellinfo.cpp +++ /dev/null @@ -1,154 +0,0 @@ -#include "../client.h" - -void command_spellinfo(Client *c, const Seperator *sep) -{ - if (sep->arg[1][0] == 0) { - c->Message(Chat::White, "Usage: #spellinfo [spell_id]"); - } - else { - int32_t spell_id = Strings::ToInt(sep->arg[1]); - const struct SPDat_Spell_Struct *s = &spells[spell_id]; - c->Message(Chat::White, "Spell info for spell #%d:", spell_id); - c->Message(Chat::White, " name: %s", s->name); - c->Message(Chat::White, " player_1: %s", s->player_1); - c->Message(Chat::White, " teleport_zone: %s", s->teleport_zone); - c->Message(Chat::White, " you_cast: %s", s->you_cast); - c->Message(Chat::White, " other_casts: %s", s->other_casts); - c->Message(Chat::White, " cast_on_you: %s", s->cast_on_you); - c->Message(Chat::White, " spell_fades: %s", s->spell_fades); - c->Message(Chat::White, " range: %f", s->range); - c->Message(Chat::White, " aoe_range: %f", s->aoe_range); - c->Message(Chat::White, " push_back: %f", s->push_back); - c->Message(Chat::White, " push_up: %f", s->push_up); - c->Message(Chat::White, " cast_time: %d", s->cast_time); - c->Message(Chat::White, " recovery_time: %d", s->recovery_time); - c->Message(Chat::White, " recast_time: %d", s->recast_time); - c->Message(Chat::White, " buff_duration_formula: %d", s->buff_duration_formula); - c->Message(Chat::White, " buff_duration: %d", s->buff_duration); - c->Message(Chat::White, " AEDuration: %d", s->aoe_duration); - c->Message(Chat::White, " mana: %d", s->mana); - c->Message( - Chat::White, - " base[12]: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", - s->base_value[0], - s->base_value[1], - s->base_value[2], - s->base_value[3], - s->base_value[4], - s->base_value[5], - s->base_value[6], - s->base_value[7], - s->base_value[8], - s->base_value[9], - s->base_value[10], - s->base_value[11] - ); - c->Message( - Chat::White, - " base22[12]: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", - s->limit_value[0], - s->limit_value[1], - s->limit_value[2], - s->limit_value[3], - s->limit_value[4], - s->limit_value[5], - s->limit_value[6], - s->limit_value[7], - s->limit_value[8], - s->limit_value[9], - s->limit_value[10], - s->limit_value[11] - ); - c->Message( - Chat::White, - " max[12]: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", - s->max_value[0], - s->max_value[1], - s->max_value[2], - s->max_value[3], - s->max_value[4], - s->max_value[5], - s->max_value[6], - s->max_value[7], - s->max_value[8], - s->max_value[9], - s->max_value[10], - s->max_value[11] - ); - c->Message( - Chat::White, - " components[4]: %d, %d, %d, %d", - s->component[0], - s->component[1], - s->component[2], - s->component[3] - ); - c->Message( - Chat::White, - " component_counts[4]: %d, %d, %d, %d", - s->component_count[0], - s->component_count[1], - s->component_count[2], - s->component_count[3] - ); - c->Message( - Chat::White, - " NoexpendReagent[4]: %d, %d, %d, %d", - s->no_expend_reagent[0], - s->no_expend_reagent[1], - s->no_expend_reagent[2], - s->no_expend_reagent[3] - ); - c->Message( - Chat::White, - " formula[12]: 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x", - s->formula[0], - s->formula[1], - s->formula[2], - s->formula[3], - s->formula[4], - s->formula[5], - s->formula[6], - s->formula[7], - s->formula[8], - s->formula[9], - s->formula[10], - s->formula[11] - ); - c->Message(Chat::White, " goodEffect: %d", s->good_effect); - c->Message(Chat::White, " Activated: %d", s->activated); - c->Message(Chat::White, " resisttype: %d", s->resist_type); - c->Message( - Chat::White, - " effectid[12]: 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x", - s->effect_id[0], - s->effect_id[1], - s->effect_id[2], - s->effect_id[3], - s->effect_id[4], - s->effect_id[5], - s->effect_id[6], - s->effect_id[7], - s->effect_id[8], - s->effect_id[9], - s->effect_id[10], - s->effect_id[11] - ); - c->Message(Chat::White, " targettype: %d", s->target_type); - c->Message(Chat::White, " basediff: %d", s->base_difficulty); - c->Message(Chat::White, " skill: %d", s->skill); - c->Message(Chat::White, " zonetype: %d", s->zone_type); - c->Message(Chat::White, " EnvironmentType: %d", s->environment_type); - c->Message(Chat::White, " TimeOfDay: %d", s->time_of_day); - c->Message( - Chat::White, " classes[15]: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", - s->classes[0], s->classes[1], s->classes[2], s->classes[3], s->classes[4], - s->classes[5], s->classes[6], s->classes[7], s->classes[8], s->classes[9], - s->classes[10], s->classes[11], s->classes[12], s->classes[13], s->classes[14] - ); - c->Message(Chat::White, " CastingAnim: %d", s->casting_animation); - c->Message(Chat::White, " SpellAffectIndex: %d", s->spell_affect_index); - c->Message(Chat::White, " RecourseLink: %d", s->recourse_link); - } -} - diff --git a/zone/gm_commands/suspendmulti.cpp b/zone/gm_commands/suspendmulti.cpp index b2ff2fb1c..1d087b486 100755 --- a/zone/gm_commands/suspendmulti.cpp +++ b/zone/gm_commands/suspendmulti.cpp @@ -16,7 +16,7 @@ void command_suspendmulti(Client *c, const Seperator *sep) const auto& n = Strings::Split(sep->arg[1], "|"); std::vector v; for (const auto& c : n) { - v.push_back(fmt::format("'{}'", Strings::ToLower(c))); + v.emplace_back(fmt::format("'{}'", Strings::ToLower(c))); } auto days = Strings::ToUnsignedInt(sep->arg[2]); diff --git a/zone/gm_commands/unscribespell.cpp b/zone/gm_commands/unscribespell.cpp index 423288c3b..6965538c4 100755 --- a/zone/gm_commands/unscribespell.cpp +++ b/zone/gm_commands/unscribespell.cpp @@ -3,18 +3,18 @@ void command_unscribespell(Client *c, const Seperator *sep) { - int arguments = sep->argnum; + const auto arguments = sep->argnum; if (!arguments || !sep->IsNumber(1)) { c->Message(Chat::White, "Usage: #unscribespell [Spell ID] - Unscribe a spell from your or your target's spell book by Spell ID"); return; } - auto target = c; + auto t = c; if (c->GetTarget() && c->GetTarget()->IsClient() && c->GetGM()) { - target = c->GetTarget()->CastToClient(); + t = c->GetTarget()->CastToClient(); } - uint16 spell_id = EQ::Clamp(Strings::ToInt(sep->arg[1]), 0, 65535); + const uint16 spell_id = EQ::Clamp(Strings::ToInt(sep->arg[1]), 0, 65535); if (!IsValidSpell(spell_id)) { c->Message( @@ -29,16 +29,16 @@ void command_unscribespell(Client *c, const Seperator *sep) auto spell_name = GetSpellName(spell_id); - if (target->HasSpellScribed(spell_id)) { - target->UnscribeSpellBySpellID(spell_id); + if (t->HasSpellScribed(spell_id)) { + t->UnscribeSpellBySpellID(spell_id); c->Message( Chat::White, fmt::format( - "Unscribing {} ({}) for {}.", + "Unscribing {} ({}) from {}.", spell_name, spell_id, - c->GetTargetDescription(target) + c->GetTargetDescription(t, TargetDescriptionType::LCSelf) ).c_str() ); } else { @@ -46,8 +46,8 @@ void command_unscribespell(Client *c, const Seperator *sep) Chat::White, fmt::format( "{} {} not have {} ({}) scribed.", - c->GetTargetDescription(target), - c == target ? "do" : "does", + c->GetTargetDescription(t, TargetDescriptionType::UCYou), + c == t ? "do" : "does", spell_name, spell_id ).c_str() diff --git a/zone/gm_commands/xtargets.cpp b/zone/gm_commands/xtargets.cpp index e153c477c..3ae8a6236 100755 --- a/zone/gm_commands/xtargets.cpp +++ b/zone/gm_commands/xtargets.cpp @@ -34,7 +34,7 @@ void command_xtargets(Client *c, const Seperator *sep) fmt::format( "Max number of XTargets set to {} for {}.", new_max, - c->GetTargetDescription(t, TargetDescriptionType::LCSelf) + c->GetTargetDescription(t) ).c_str() ); } diff --git a/zone/gm_commands/zheader.cpp b/zone/gm_commands/zheader.cpp index 5d91fd9a2..2b486fb10 100755 --- a/zone/gm_commands/zheader.cpp +++ b/zone/gm_commands/zheader.cpp @@ -2,16 +2,16 @@ void command_zheader(Client *c, const Seperator *sep) { - int arguments = sep->argnum; + const auto arguments = sep->argnum; if (!arguments) { c->Message(Chat::White, "Usage: #zheader [Zone ID|Zone Short Name] [Version]"); return; } - auto zone_id = ( - sep->IsNumber(2) ? - Strings::ToUnsignedInt(sep->arg[2]) : - ZoneID(sep->arg[2]) + const auto zone_id = ( + sep->IsNumber(1) ? + Strings::ToUnsignedInt(sep->arg[1]) : + ZoneID(sep->arg[1]) ); if (!zone_id) { c->Message( @@ -26,9 +26,9 @@ void command_zheader(Client *c, const Seperator *sep) auto zone_short_name = ZoneName(zone_id); auto zone_long_name = ZoneLongName(zone_id); - auto version = ( - sep->IsNumber(3) ? - Strings::ToUnsignedInt(sep->arg[3]) : + const auto version = ( + sep->IsNumber(2) ? + Strings::ToUnsignedInt(sep->arg[2]) : 0 ); diff --git a/zone/groups.cpp b/zone/groups.cpp index 58db3edf9..73f4062f4 100644 --- a/zone/groups.cpp +++ b/zone/groups.cpp @@ -20,9 +20,6 @@ #include "../common/eqemu_logsys.h" #include "expedition.h" #include "masterentity.h" -#include "../common/packet_functions.h" -#include "../common/packet_dump.h" -#include "../common/strings.h" #include "worldserver.h" #include "string_ids.h" #include "../common/events/player_event_logs.h" @@ -298,7 +295,7 @@ bool Group::AddMember(Mob* newmember, const char *NewMemberName, uint32 Characte } //put existing group member(s) into the new member's list - if(InZone && newmember->IsClient()) + if(InZone && newmember && newmember->IsClient()) { if(IsLeader(members[i])) { @@ -307,13 +304,13 @@ bool Group::AddMember(Mob* newmember, const char *NewMemberName, uint32 Characte else { strcpy(newmember->CastToClient()->GetPP().groupMembers[x], members[i]->GetCleanName()); - x++; + ++x; } } } } - if(InZone) + if(InZone && newmember) { //put new member in his own list. newmember->SetGrouped(true); @@ -545,7 +542,6 @@ bool Group::UpdatePlayer(Mob* update) { } void Group::MemberZoned(Mob* removemob) { - uint32 i; if (!removemob) { return; @@ -557,21 +553,21 @@ void Group::MemberZoned(Mob* removemob) { //should NOT clear the name, it is used for world communication. for (auto & m : members) { - if (m && (m == removemob || m->IsBot() && m->CastToBot()->GetBotOwner() == removemob)) { + if (m && (m == removemob || (m->IsBot() && m->CastToBot()->GetBotOwner() == removemob))) { m = nullptr; } } if (removemob->IsClient() && HasRole(removemob, RoleAssist)) { - SetGroupAssistTarget(0); + SetGroupAssistTarget(nullptr); } if (removemob->IsClient() && HasRole(removemob, RoleTank)) { - SetGroupTankTarget(0); + SetGroupTankTarget(nullptr); } if (removemob->IsClient() && HasRole(removemob, RolePuller)) { - SetGroupPullerTarget(0); + SetGroupPullerTarget(nullptr); } if (removemob->IsClient() && removemob == mentoree) { @@ -1158,17 +1154,33 @@ bool Group::LearnMembers() { "Error getting group members for group [{}]", GetID() ); - return false; + } + + for(int i = 0; i < MAX_GROUP_MEMBERS; ++i) + { + members[i] = nullptr; + memset(membername[i],0,64); + MemberRoles[i] = 0; } int memberIndex = 0; for (const auto& member : rows) { - if (member.name.empty()) { - continue; + if (memberIndex >= MAX_GROUP_MEMBERS) { + LogError( + "Too many members in group [{}]", + GetID() + ); + break; } - members[memberIndex] = nullptr; - strn0cpy(membername[memberIndex], member.name.c_str(), 64); - memberIndex++; + + if (member.name.empty()) { + members[memberIndex] = nullptr; + membername[memberIndex][0] = '\0'; + } else { + members[memberIndex] = nullptr; + strn0cpy(membername[memberIndex], member.name.c_str(), 64); + } + ++memberIndex; } VerifyGroup(); @@ -1189,13 +1201,12 @@ void Group::VerifyGroup() { } Mob *them = entity_list.GetMob(membername[i]); - if(them == nullptr && members[i] != nullptr) { //they aren't in zone - membername[i][0] = '\0'; + if (!them && members[i]) { //they aren't in zone members[i] = nullptr; continue; } - if(them != nullptr && members[i] != them) { //our pointer is out of date... not so good. + if (them != nullptr && members[i] != them) { //our pointer is out of date... not so good. members[i] = them; continue; } @@ -2491,4 +2502,4 @@ bool Group::IsLeader(const char* name) { } return false; -} \ No newline at end of file +} diff --git a/zone/groups.h b/zone/groups.h index 51d9164c9..85a85ccae 100644 --- a/zone/groups.h +++ b/zone/groups.h @@ -153,11 +153,11 @@ public: bool DoesAnyMemberHaveExpeditionLockout(const std::string& expedition_name, const std::string& event_name, int max_check_count = 0); - Mob* members[MAX_GROUP_MEMBERS]; - char membername[MAX_GROUP_MEMBERS][64]; - uint8 MemberRoles[MAX_GROUP_MEMBERS]; - bool disbandcheck; - bool castspell; + Mob* members[MAX_GROUP_MEMBERS] {nullptr}; + char membername[MAX_GROUP_MEMBERS][64] {""}; + uint8 MemberRoles[MAX_GROUP_MEMBERS] {0}; + bool disbandcheck {false}; + bool castspell {false}; private: Mob* leader; diff --git a/zone/guild.cpp b/zone/guild.cpp index 82790811e..9a8a589c6 100644 --- a/zone/guild.cpp +++ b/zone/guild.cpp @@ -236,7 +236,7 @@ void Client::RefreshGuildInfo() guild_id = info.guild_id; GuildBanker = info.banker || guild_mgr.IsGuildLeader(GuildID(), CharacterID()); - if(((int)zone->GetZoneID() == RuleI(World, GuildBankZoneID))) + if(zone->GetZoneID() == Zones::GUILDHALL) { if(WasBanker != GuildBanker) { diff --git a/zone/guild_mgr.cpp b/zone/guild_mgr.cpp index 9756d1a0b..6058c873c 100644 --- a/zone/guild_mgr.cpp +++ b/zone/guild_mgr.cpp @@ -20,11 +20,9 @@ #include "../common/strings.h" #include "client.h" -#include "entity.h" #include "guild_mgr.h" #include "worldserver.h" #include "zonedb.h" -#include "../common/zone_store.h" ZoneGuildManager guild_mgr; GuildBankManager *GuildBanks; diff --git a/zone/hate_list.cpp b/zone/hate_list.cpp index e5452921d..9ef52765a 100644 --- a/zone/hate_list.cpp +++ b/zone/hate_list.cpp @@ -22,7 +22,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "mob.h" #include "raids.h" -#include "../common/rulesys.h" #include "../common/data_verification.h" #include "hate_list.h" @@ -30,7 +29,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "zone.h" #include "water_map.h" -#include #include extern Zone *zone; @@ -44,19 +42,6 @@ HateList::~HateList() { } -// added for frenzy support -// checks if target still is in frenzy mode -void HateList::IsEntityInFrenzyMode() -{ - auto iterator = list.begin(); - while (iterator != list.end()) - { - if ((*iterator)->entity_on_hatelist->GetHPRatio() >= 20) - (*iterator)->is_entity_frenzy = false; - ++iterator; - } -} - void HateList::WipeHateList() { auto iterator = list.begin(); @@ -157,28 +142,54 @@ Mob* HateList::GetDamageTopOnHateList(Mob* hater) return current; } -Mob* HateList::GetClosestEntOnHateList(Mob *hater, bool skip_mezzed) { +Mob* HateList::GetClosestEntOnHateList(Mob *hater, bool skip_mezzed, EntityFilterType entity_type) { Mob* close_entity = nullptr; float close_distance = 99999.9f; float this_distance; - auto iterator = list.begin(); - while (iterator != list.end()) { - if (skip_mezzed && (*iterator)->entity_on_hatelist->IsMezzed()) { - ++iterator; + for (const auto& e : list) { + if (!e->entity_on_hatelist) { continue; } - this_distance = DistanceSquaredNoZ((*iterator)->entity_on_hatelist->GetPosition(), hater->GetPosition()); - if ((*iterator)->entity_on_hatelist != nullptr && this_distance <= close_distance) { - close_distance = this_distance; - close_entity = (*iterator)->entity_on_hatelist; + if (skip_mezzed && e->entity_on_hatelist->IsMezzed()) { + continue; + } + + switch (entity_type) { + case EntityFilterType::Bots: + if (!e->entity_on_hatelist->IsBot()) { + continue; + } + break; + case EntityFilterType::Clients: + if (!e->entity_on_hatelist->IsClient()) { + continue; + } + break; + case EntityFilterType::NPCs: + if (!e->entity_on_hatelist->IsNPC()) { + continue; + } + break; + case EntityFilterType::All: + default: + break; + } + + this_distance = DistanceSquaredNoZ(e->entity_on_hatelist->GetPosition(), hater->GetPosition()); + if (this_distance <= close_distance) { + close_distance = this_distance; + close_entity = e->entity_on_hatelist; } - ++iterator; } - if ((!close_entity && hater->IsNPC()) || (close_entity && close_entity->DivineAura())) + if ( + (!close_entity && hater->IsNPC()) || + (close_entity && close_entity->DivineAura()) + ) { close_entity = hater->CastToNPC()->GetHateTop(); + } return close_entity; } @@ -483,20 +494,22 @@ Mob *HateList::GetEntWithMostHateOnList(Mob *center, Mob *skip, bool skip_mezzed while (iterator != list.end()) { struct_HateList *cur = (*iterator); - if (cur->entity_on_hatelist == skip) { - ++iterator; - continue; - } + if (cur) { + if (cur->entity_on_hatelist == skip) { + ++iterator; + continue; + } - if (skip_mezzed && cur->entity_on_hatelist->IsMezzed()) { - ++iterator; - continue; - } + if (skip_mezzed && cur->entity_on_hatelist->IsMezzed()) { + ++iterator; + continue; + } - if (cur->entity_on_hatelist != nullptr && ((cur->stored_hate_amount > hate) || cur->is_entity_frenzy)) - { - top_hate = cur->entity_on_hatelist; - hate = cur->stored_hate_amount; + if (cur->entity_on_hatelist != nullptr && ((cur->stored_hate_amount > hate) || cur->is_entity_frenzy)) + { + top_hate = cur->entity_on_hatelist; + hate = cur->stored_hate_amount; + } } ++iterator; } @@ -516,24 +529,27 @@ Mob *HateList::GetEntWithMostHateOnList(bool skip_mezzed){ while (iterator != list.end()) { struct_HateList *cur = (*iterator); - LogHateDetail( - "Looping GetEntWithMostHateOnList1 [{}] cur [{}] hate [{}] calc [{}]", - cur->entity_on_hatelist->GetMobDescription(), - cur->stored_hate_amount, - hate, - (cur->stored_hate_amount > hate) - ); - if (cur && cur->entity_on_hatelist != nullptr && (cur->stored_hate_amount > hate)) - { + if (cur) { LogHateDetail( - "Looping GetEntWithMostHateOnList2 [{}]", - cur->entity_on_hatelist->GetMobDescription() + "Looping GetEntWithMostHateOnList1 [{}] cur [{}] hate [{}] calc [{}]", + cur->entity_on_hatelist->GetMobDescription(), + cur->stored_hate_amount, + hate, + (cur->stored_hate_amount > hate) ); - if (!skip_mezzed || !cur->entity_on_hatelist->IsMezzed()) { - top = cur->entity_on_hatelist; - hate = cur->stored_hate_amount; + if (cur->entity_on_hatelist != nullptr && (cur->stored_hate_amount > hate)) + { + LogHateDetail( + "Looping GetEntWithMostHateOnList2 [{}]", + cur->entity_on_hatelist->GetMobDescription() + ); + + if (!skip_mezzed || !cur->entity_on_hatelist->IsMezzed()) { + top = cur->entity_on_hatelist; + hate = cur->stored_hate_amount; + } } } ++iterator; @@ -588,29 +604,6 @@ Mob *HateList::GetRandomEntOnHateList(bool skip_mezzed) return nullptr; } -Mob *HateList::GetEscapingEntOnHateList() { - // function is still in design stage - - for (auto iter : list) { - if (!iter->entity_on_hatelist) - continue; - - if (!iter->entity_on_hatelist->IsFeared()) - continue; - - if (iter->entity_on_hatelist->IsRooted()) - continue; - if (iter->entity_on_hatelist->IsMezzed()) - continue; - if (iter->entity_on_hatelist->IsStunned()) - continue; - - return iter->entity_on_hatelist; - } - - return nullptr; -} - Mob *HateList::GetEscapingEntOnHateList(Mob *center, float range, bool first) { // function is still in design stage diff --git a/zone/hate_list.h b/zone/hate_list.h index 9af5d27b0..ec1f7d634 100644 --- a/zone/hate_list.h +++ b/zone/hate_list.h @@ -41,12 +41,11 @@ public: HateList(); ~HateList(); - Mob *GetClosestEntOnHateList(Mob *hater, bool skip_mezzed = false); + Mob *GetClosestEntOnHateList(Mob *hater, bool skip_mezzed = false, EntityFilterType entity_type = EntityFilterType::All); Mob *GetDamageTopOnHateList(Mob *hater); // didn't add 'skip_mezzed' due to calls being in ::Death() Mob *GetEntWithMostHateOnList(Mob *center, Mob *skip = nullptr, bool skip_mezzed = false); Mob *GetRandomEntOnHateList(bool skip_mezzed = false); Mob *GetEntWithMostHateOnList(bool skip_mezzed = false); - Mob *GetEscapingEntOnHateList(); // returns first eligble entity Mob *GetEscapingEntOnHateList(Mob *center, float range = 0.0f, bool first = false); Bot* GetRandomBotOnHateList(bool skip_mezzed = false); @@ -85,7 +84,6 @@ public: bool add_to_hate_list_if_not_exist = true ); void DoFactionHits(int64 npc_faction_level_id, int32 faction_id, int32 faction_value); - void IsEntityInFrenzyMode(); void PrintHateListToClient(Client *c); void SetHateAmountOnEnt(Mob *other, int64 in_hate, uint64 in_damage); void SetHateOwner(Mob *new_hate_owner) { hate_owner = new_hate_owner; } diff --git a/zone/heal_rotation.cpp b/zone/heal_rotation.cpp index 3ca89b67f..ff5f2287a 100644 --- a/zone/heal_rotation.cpp +++ b/zone/heal_rotation.cpp @@ -170,7 +170,7 @@ bool HealRotation::ClearMemberPool() if (!ClearTargetPool()) LogError("failed to clear m_target_pool (size: [{}])", m_target_pool.size()); - auto clear_list = const_cast&>(m_member_pool); + auto& clear_list = const_cast&>(m_member_pool); for (auto member_iter : clear_list) member_iter->LeaveHealRotationMemberPool(); @@ -183,7 +183,7 @@ bool HealRotation::ClearTargetPool() m_hot_active = false; m_is_active = false; - auto clear_list = const_cast&>(m_target_pool); + auto& clear_list = const_cast&>(m_target_pool); for (auto target_iter : clear_list) target_iter->LeaveHealRotationTargetPool(); diff --git a/zone/inventory.cpp b/zone/inventory.cpp index f71b34fce..5db281eed 100644 --- a/zone/inventory.cpp +++ b/zone/inventory.cpp @@ -23,11 +23,8 @@ #include "quest_parser_collection.h" #include "worldserver.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "../common/events/player_event_logs.h" - #include "bot.h" -#include "../common/events/player_event_logs.h" extern WorldServer worldserver; @@ -418,173 +415,10 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, } // check for augment to item restriction - if(enforce_restrictions) { - bool is_restricted = false; - uint8 item_type = item->ItemType; - switch (augtest->AugRestrict) { - case EQ::item::AugRestrictionAny: - break; - case EQ::item::AugRestrictionArmor: - switch (item_type) { - case EQ::item::ItemTypeArmor: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestrictionWeapons: - switch (item_type) { - case EQ::item::ItemType1HSlash: - case EQ::item::ItemType1HBlunt: - case EQ::item::ItemType1HPiercing: - case EQ::item::ItemTypeMartial: - case EQ::item::ItemType2HSlash: - case EQ::item::ItemType2HBlunt: - case EQ::item::ItemType2HPiercing: - case EQ::item::ItemTypeBow: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestriction1HWeapons: - switch (item_type) { - case EQ::item::ItemType1HSlash: - case EQ::item::ItemType1HBlunt: - case EQ::item::ItemType1HPiercing: - case EQ::item::ItemTypeMartial: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestriction2HWeapons: - switch (item_type) { - case EQ::item::ItemType2HSlash: - case EQ::item::ItemType2HBlunt: - case EQ::item::ItemType2HPiercing: - case EQ::item::ItemTypeBow: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestriction1HSlash: - switch (item_type) { - case EQ::item::ItemType1HSlash: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestriction1HBlunt: - switch (item_type) { - case EQ::item::ItemType1HBlunt: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestrictionPiercing: - switch (item_type) { - case EQ::item::ItemType1HPiercing: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestrictionHandToHand: - switch (item_type) { - case EQ::item::ItemTypeMartial: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestriction2HSlash: - switch (item_type) { - case EQ::item::ItemType2HSlash: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestriction2HBlunt: - switch (item_type) { - case EQ::item::ItemType2HBlunt: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestriction2HPierce: - switch (item_type) { - case EQ::item::ItemType2HPiercing: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestrictionBows: - switch (item_type) { - case EQ::item::ItemTypeBow: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestrictionShields: - switch (item_type) { - case EQ::item::ItemTypeShield: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestriction1HSlash1HBluntOrHandToHand: - switch (item_type) { - case EQ::item::ItemType1HSlash: - case EQ::item::ItemType1HBlunt: - case EQ::item::ItemTypeMartial: - break; - default: - is_restricted = true; - break; - } - break; - case EQ::item::AugRestriction1HBluntOrHandToHand: - switch (item_type) { - case EQ::item::ItemType1HBlunt: - case EQ::item::ItemTypeMartial: - break; - default: - is_restricted = true; - break; - } - break; - // These 3 are in-work - case EQ::item::AugRestrictionUnknown1: - case EQ::item::AugRestrictionUnknown2: - case EQ::item::AugRestrictionUnknown3: - default: - is_restricted = true; - break; - } + if (enforce_restrictions) { + bool is_restricted = IsAugmentRestricted(item->ItemType, augtest->AugRestrict); - if(is_restricted) { + if (is_restricted) { Message( Chat::Red, fmt::format( @@ -717,12 +551,15 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, EQ::ItemInstance* inst = database.CreateItem(item, charges); auto timestamps = database.GetItemRecastTimestamps(CharacterID()); - const auto* d = inst->GetItem(); - if (d->RecastDelay) { - if (d->RecastType != RECAST_TYPE_UNLINKED_ITEM) { - inst->SetRecastTimestamp(timestamps.count(d->RecastType) ? timestamps.at(d->RecastType) : 0); - } else { - inst->SetRecastTimestamp(timestamps.count(d->ID) ? timestamps.at(d->ID) : 0); + if (inst) { + const auto* d = inst->GetItem(); + if (d->RecastDelay) { + if (d->RecastType != RECAST_TYPE_UNLINKED_ITEM) { + inst->SetRecastTimestamp(timestamps.count(d->RecastType) ? timestamps.at(d->RecastType) : 0); + } + else { + inst->SetRecastTimestamp(timestamps.count(d->ID) ? timestamps.at(d->ID) : 0); + } } } @@ -2043,8 +1880,8 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { } if ((srcbagid && srcbag->GetItem()->BagType == EQ::item::BagTypeTradersSatchel) || (dstbagid && dstbag->GetItem()->BagType == EQ::item::BagTypeTradersSatchel) || - (srcitemid && src_inst->GetItem()->BagType == EQ::item::BagTypeTradersSatchel) || - (dstitemid && dst_inst->GetItem()->BagType == EQ::item::BagTypeTradersSatchel)) { + (srcitemid && src_inst && src_inst->GetItem()->BagType == EQ::item::BagTypeTradersSatchel) || + (dstitemid && dst_inst && dst_inst->GetItem()->BagType == EQ::item::BagTypeTradersSatchel)) { Trader_EndTrader(); Message(Chat::Red,"You cannot move your Trader Satchels, or items inside them, while Trading."); } @@ -4766,3 +4603,154 @@ int32 Bot::GetAugmentIDAt(int16 slot_id, uint8 augslot) { // None found return INVALID_ID; } + +bool Client::IsAugmentRestricted(uint8 item_type, uint32 augment_restriction) +{ + switch (augment_restriction) { + case EQ::item::AugRestrictionAny: + break; + case EQ::item::AugRestrictionArmor: + switch (item_type) { + case EQ::item::ItemTypeArmor: + break; + default: + return true; + } + break; + case EQ::item::AugRestrictionWeapons: + switch (item_type) { + case EQ::item::ItemType1HSlash: + case EQ::item::ItemType1HBlunt: + case EQ::item::ItemType1HPiercing: + case EQ::item::ItemTypeMartial: + case EQ::item::ItemType2HSlash: + case EQ::item::ItemType2HBlunt: + case EQ::item::ItemType2HPiercing: + case EQ::item::ItemTypeBow: + break; + default: + return true; + } + break; + case EQ::item::AugRestriction1HWeapons: + switch (item_type) { + case EQ::item::ItemType1HSlash: + case EQ::item::ItemType1HBlunt: + case EQ::item::ItemType1HPiercing: + case EQ::item::ItemTypeMartial: + break; + default: + return true; + } + break; + case EQ::item::AugRestriction2HWeapons: + switch (item_type) { + case EQ::item::ItemType2HSlash: + case EQ::item::ItemType2HBlunt: + case EQ::item::ItemType2HPiercing: + case EQ::item::ItemTypeBow: + break; + default: + return true; + } + break; + case EQ::item::AugRestriction1HSlash: + switch (item_type) { + case EQ::item::ItemType1HSlash: + break; + default: + return true; + } + break; + case EQ::item::AugRestriction1HBlunt: + switch (item_type) { + case EQ::item::ItemType1HBlunt: + break; + default: + return true; + } + break; + case EQ::item::AugRestrictionPiercing: + switch (item_type) { + case EQ::item::ItemType1HPiercing: + break; + default: + return true; + } + break; + case EQ::item::AugRestrictionHandToHand: + switch (item_type) { + case EQ::item::ItemTypeMartial: + break; + default: + return true; + } + break; + case EQ::item::AugRestriction2HSlash: + switch (item_type) { + case EQ::item::ItemType2HSlash: + break; + default: + return true; + } + break; + case EQ::item::AugRestriction2HBlunt: + switch (item_type) { + case EQ::item::ItemType2HBlunt: + break; + default: + return true; + } + break; + case EQ::item::AugRestriction2HPierce: + switch (item_type) { + case EQ::item::ItemType2HPiercing: + break; + default: + return true; + } + break; + case EQ::item::AugRestrictionBows: + switch (item_type) { + case EQ::item::ItemTypeBow: + break; + default: + return true; + } + break; + case EQ::item::AugRestrictionShields: + switch (item_type) { + case EQ::item::ItemTypeShield: + break; + default: + return true; + } + break; + case EQ::item::AugRestriction1HSlash1HBluntOrHandToHand: + switch (item_type) { + case EQ::item::ItemType1HSlash: + case EQ::item::ItemType1HBlunt: + case EQ::item::ItemTypeMartial: + break; + default: + return true; + } + break; + case EQ::item::AugRestriction1HBluntOrHandToHand: + switch (item_type) { + case EQ::item::ItemType1HBlunt: + case EQ::item::ItemTypeMartial: + break; + default: + return true; + } + break; + case EQ::item::AugRestrictionUnknown1: + case EQ::item::AugRestrictionUnknown2: + case EQ::item::AugRestrictionUnknown3: + default: + return true; + } + + return false; +} diff --git a/zone/loottables.cpp b/zone/loottables.cpp index ed9c8e5cc..45b1017bf 100644 --- a/zone/loottables.cpp +++ b/zone/loottables.cpp @@ -18,7 +18,6 @@ #include "../common/global_define.h" #include "../common/loottable.h" -#include "../common/misc_functions.h" #include "../common/data_verification.h" #include "client.h" @@ -26,13 +25,8 @@ #include "mob.h" #include "npc.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "global_loot_manager.h" #include "../common/repositories/criteria/content_filter_criteria.h" -#include "../common/say_link.h" - -#include -#include #ifdef _WINDOWS #define snprintf _snprintf @@ -367,11 +361,12 @@ void NPC::AddLootDrop( SetArrowEquipped(true); } + bool found = false; // track if we found an empty slot we fit into + if (loot_drop.equip_item > 0) { uint8 eslot = 0xFF; char newid[20]; const EQ::ItemData* compitem = nullptr; - bool found = false; // track if we found an empty slot we fit into int32 foundslot = -1; // for multi-slot items // Equip rules are as follows: @@ -400,9 +395,15 @@ void NPC::AddLootDrop( foundslot = i; } else { + // Unequip old item + auto* olditem = GetItem(i); + + olditem->equip_slot = EQ::invslot::SLOT_INVALID; + equipment[i] = item2->ID; + foundslot = i; - found = true; + found = true; } } // end if ac } @@ -506,7 +507,6 @@ void NPC::AddLootDrop( } if (found) { - CalcBonuses(); // This is less than ideal for bulk adding of items item->equip_slot = foundslot; } } @@ -516,6 +516,10 @@ void NPC::AddLootDrop( } else safe_delete(item); + if (found) { + CalcBonuses(); + } + if (IsRecordLootStats()) { m_rolled_items.emplace_back(item->item_id); } diff --git a/zone/lua_bot.cpp b/zone/lua_bot.cpp index a5955d207..6ebf88836 100644 --- a/zone/lua_bot.cpp +++ b/zone/lua_bot.cpp @@ -175,6 +175,26 @@ void Lua_Bot::ApplySpellGroup(int spell_id, int duration, bool allow_pets) { self->ApplySpell(spell_id, duration, ApplySpellType::Group, allow_pets); } +void Lua_Bot::ApplySpellRaid(int spell_id) { + Lua_Safe_Call_Void(); + self->ApplySpell(spell_id, 0, ApplySpellType::Raid); +} + +void Lua_Bot::ApplySpellRaid(int spell_id, int duration) { + Lua_Safe_Call_Void(); + self->ApplySpell(spell_id, duration, ApplySpellType::Raid, true, true); +} + +void Lua_Bot::ApplySpellRaid(int spell_id, int duration, bool allow_pets) { + Lua_Safe_Call_Void(); + self->ApplySpell(spell_id, duration, ApplySpellType::Raid, allow_pets, true); +} + +void Lua_Bot::ApplySpellRaid(int spell_id, int duration, bool allow_pets, bool is_raid_group_only) { + Lua_Safe_Call_Void(); + self->ApplySpell(spell_id, duration, ApplySpellType::Raid, allow_pets, is_raid_group_only); +} + void Lua_Bot::SetSpellDuration(int spell_id) { Lua_Safe_Call_Void(); self->SetSpellDuration(spell_id); @@ -205,6 +225,26 @@ void Lua_Bot::SetSpellDurationGroup(int spell_id, int duration, bool allow_pets) self->SetSpellDuration(spell_id, duration, ApplySpellType::Group, allow_pets); } +void Lua_Bot::SetSpellDurationRaid(int spell_id) { + Lua_Safe_Call_Void(); + self->SetSpellDuration(spell_id, 0, ApplySpellType::Raid); +} + +void Lua_Bot::SetSpellDurationRaid(int spell_id, int duration) { + Lua_Safe_Call_Void(); + self->SetSpellDuration(spell_id, duration, ApplySpellType::Raid); +} + +void Lua_Bot::SetSpellDurationRaid(int spell_id, int duration, bool allow_pets) { + Lua_Safe_Call_Void(); + self->SetSpellDuration(spell_id, duration, ApplySpellType::Raid, allow_pets); +} + +void Lua_Bot::SetSpellDurationRaid(int spell_id, int duration, bool allow_pets, bool is_raid_group_only) { + Lua_Safe_Call_Void(); + self->SetSpellDuration(spell_id, duration, ApplySpellType::Raid, allow_pets, is_raid_group_only); +} + int Lua_Bot::CountAugmentEquippedByID(uint32 item_id) { Lua_Safe_Call_Int(); return self->GetInv().CountAugmentEquippedByID(item_id); @@ -473,6 +513,10 @@ luabind::scope lua_register_bot() { .def("ApplySpellGroup", (void(Lua_Bot::*)(int))&Lua_Bot::ApplySpellGroup) .def("ApplySpellGroup", (void(Lua_Bot::*)(int,int))&Lua_Bot::ApplySpellGroup) .def("ApplySpellGroup", (void(Lua_Bot::*)(int,int,bool))&Lua_Bot::ApplySpellGroup) + .def("ApplySpellRaid", (void(Lua_Bot::*)(int))&Lua_Bot::ApplySpellRaid) + .def("ApplySpellRaid", (void(Lua_Bot::*)(int,int))&Lua_Bot::ApplySpellRaid) + .def("ApplySpellRaid", (void(Lua_Bot::*)(int,int,bool))&Lua_Bot::ApplySpellRaid) + .def("ApplySpellRaid", (void(Lua_Bot::*)(int,int,bool,bool))&Lua_Bot::ApplySpellRaid) .def("Camp", (void(Lua_Bot::*)(void))&Lua_Bot::Camp) .def("Camp", (void(Lua_Bot::*)(bool))&Lua_Bot::Camp) .def("CountBotItem", (uint32(Lua_Bot::*)(uint32))&Lua_Bot::CountBotItem) @@ -528,6 +572,10 @@ luabind::scope lua_register_bot() { .def("SetSpellDurationGroup", (void(Lua_Bot::*)(int))&Lua_Bot::SetSpellDurationGroup) .def("SetSpellDurationGroup", (void(Lua_Bot::*)(int,int))&Lua_Bot::SetSpellDurationGroup) .def("SetSpellDurationGroup", (void(Lua_Bot::*)(int,int,bool))&Lua_Bot::SetSpellDurationGroup) + .def("SetSpellDurationRaid", (void(Lua_Bot::*)(int))&Lua_Bot::SetSpellDurationRaid) + .def("SetSpellDurationRaid", (void(Lua_Bot::*)(int,int))&Lua_Bot::SetSpellDurationRaid) + .def("SetSpellDurationRaid", (void(Lua_Bot::*)(int,int,bool))&Lua_Bot::SetSpellDurationRaid) + .def("SetSpellDurationRaid", (void(Lua_Bot::*)(int,int,bool,bool))&Lua_Bot::SetSpellDurationRaid) .def("SendPayload", (void(Lua_Bot::*)(int))&Lua_Bot::SendPayload) .def("SendPayload", (void(Lua_Bot::*)(int,std::string))&Lua_Bot::SendPayload) .def("Signal", (void(Lua_Bot::*)(int))&Lua_Bot::Signal) diff --git a/zone/lua_bot.h b/zone/lua_bot.h index 041745091..908ee5d86 100644 --- a/zone/lua_bot.h +++ b/zone/lua_bot.h @@ -74,6 +74,11 @@ public: void ApplySpellGroup(int spell_id, int duration); void ApplySpellGroup(int spell_id, int duration, bool allow_pets); + void ApplySpellRaid(int spell_id); + void ApplySpellRaid(int spell_id, int duration); + void ApplySpellRaid(int spell_id, int duration, bool allow_pets); + void ApplySpellRaid(int spell_id, int duration, bool allow_pets, bool is_raid_group_only); + void SetSpellDuration(int spell_id); void SetSpellDuration(int spell_id, int duration); void SetSpellDuration(int spell_id, int duration, bool allow_pets); diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 1540bceb4..60f0cdf3c 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -17,7 +17,6 @@ #include "lua_packet.h" #include "dialogue_window.h" #include "titles.h" -#include "../common/expedition_lockout_timer.h" struct InventoryWhere { }; @@ -2505,6 +2504,10 @@ int Lua_Client::GetSpellDamage() { Lua_Safe_Call_Int(); return self->GetSpellDmg(); } +int Lua_Client::GetIntoxication() { + Lua_Safe_Call_Int(); + return self->GetIntoxication(); +} void Lua_Client::TaskSelector(luabind::adl::object table) { TaskSelector(table, false); @@ -2828,7 +2831,7 @@ luabind::object Lua_Client::GetPEQZoneFlags(lua_State* L) { if (d_) { auto self = reinterpret_cast(d_); auto l = self->GetPEQZoneFlags(); - auto i = 0; + auto i = 1; for (const auto& f : l) { t[i] = f; i++; @@ -2843,7 +2846,7 @@ luabind::object Lua_Client::GetZoneFlags(lua_State* L) { if (d_) { auto self = reinterpret_cast(d_); auto l = self->GetZoneFlags(); - auto i = 0; + auto i = 1; for (const auto& f : l) { t[i] = f; i++; @@ -3051,6 +3054,12 @@ bool Lua_Client::ReloadDataBuckets() { return DataBucket::GetDataBuckets(self); } +uint32 Lua_Client::GetEXPForLevel(uint16 check_level) +{ + Lua_Safe_Call_Int(); + return self->GetEXPForLevel(check_level); +} + luabind::scope lua_register_client() { return luabind::class_("Client") .def(luabind::constructor<>()) @@ -3214,6 +3223,7 @@ luabind::scope lua_register_client() { .def("GetDisciplineTimer", (uint32(Lua_Client::*)(uint32))&Lua_Client::GetDisciplineTimer) .def("GetDuelTarget", (int(Lua_Client::*)(void))&Lua_Client::GetDuelTarget) .def("GetEXP", (uint32(Lua_Client::*)(void))&Lua_Client::GetEXP) + .def("GetEXPForLevel", (uint32(Lua_Client::*)(uint16))&Lua_Client::GetEXPForLevel) .def("GetEXPModifier", (double(Lua_Client::*)(uint32))&Lua_Client::GetEXPModifier) .def("GetEXPModifier", (double(Lua_Client::*)(uint32,int16))&Lua_Client::GetEXPModifier) .def("GetEbonCrystals", (uint32(Lua_Client::*)(void))&Lua_Client::GetEbonCrystals) @@ -3238,6 +3248,7 @@ luabind::scope lua_register_client() { .def("GetIPExemption", (int(Lua_Client::*)(void))&Lua_Client::GetIPExemption) .def("GetIPString", (std::string(Lua_Client::*)(void))&Lua_Client::GetIPString) .def("GetInstrumentMod", (int(Lua_Client::*)(int))&Lua_Client::GetInstrumentMod) + .def("GetIntoxication", (int(Lua_Client::*)(void))&Lua_Client::GetIntoxication) .def("GetInventory", (Lua_Inventory(Lua_Client::*)(void))&Lua_Client::GetInventory) .def("GetInvulnerableEnvironmentDamage", (bool(Lua_Client::*)(void))&Lua_Client::GetInvulnerableEnvironmentDamage) .def("GetItemIDAt", (int(Lua_Client::*)(int))&Lua_Client::GetItemIDAt) diff --git a/zone/lua_client.h b/zone/lua_client.h index 0d5c58bad..569a3124d 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -395,6 +395,7 @@ public: void QueuePacket(Lua_Packet app, bool ack_req, int client_connection_status, int filter); int GetHunger(); int GetThirst(); + int GetIntoxication(); void SetHunger(int in_hunger); void SetThirst(int in_thirst); void SetConsumption(int in_hunger, int in_thirst); @@ -467,6 +468,7 @@ public: void UseAugmentContainer(int container_slot); bool IsAutoAttackEnabled(); bool IsAutoFireEnabled(); + uint32 GetEXPForLevel(uint16 check_level); void ApplySpell(int spell_id); void ApplySpell(int spell_id, int duration); diff --git a/zone/lua_door.cpp b/zone/lua_door.cpp index a19ab8609..caa2203ab 100644 --- a/zone/lua_door.cpp +++ b/zone/lua_door.cpp @@ -1,6 +1,5 @@ #ifdef LUA_EQEMU -#include "lua.hpp" #include #include diff --git a/zone/lua_encounter.cpp b/zone/lua_encounter.cpp index 08a4f95d3..06e2f1d48 100644 --- a/zone/lua_encounter.cpp +++ b/zone/lua_encounter.cpp @@ -1,6 +1,5 @@ #ifdef LUA_EQEMU -#include "lua.hpp" #include #include "lua_encounter.h" #include "encounter.h" diff --git a/zone/lua_entity.cpp b/zone/lua_entity.cpp index d0ce95c7f..abff39b8f 100644 --- a/zone/lua_entity.cpp +++ b/zone/lua_entity.cpp @@ -1,6 +1,5 @@ #ifdef LUA_EQEMU -#include "lua.hpp" #include #include "entity.h" diff --git a/zone/lua_entity_list.cpp b/zone/lua_entity_list.cpp index a860131c5..0b9438fd3 100644 --- a/zone/lua_entity_list.cpp +++ b/zone/lua_entity_list.cpp @@ -1,12 +1,10 @@ #ifdef LUA_EQEMU -#include "lua.hpp" #include #include #include "masterentity.h" #include "lua_entity_list.h" -#include "lua_entity.h" #include "lua_mob.h" #include "lua_client.h" #include "lua_npc.h" @@ -349,7 +347,7 @@ Lua_Mob_List Lua_EntityList::GetMobList() { auto iter = t_list.begin(); while(iter != t_list.end()) { - ret.entries.push_back(Lua_Mob(iter->second)); + ret.entries.emplace_back(Lua_Mob(iter->second)); ++iter; } @@ -363,7 +361,7 @@ Lua_Client_List Lua_EntityList::GetClientList() { auto iter = t_list.begin(); while(iter != t_list.end()) { - ret.entries.push_back(Lua_Client(iter->second)); + ret.entries.emplace_back(Lua_Client(iter->second)); ++iter; } @@ -387,7 +385,7 @@ Lua_Bot_List Lua_EntityList::GetBotList() { if (bot_list.size()) { for (auto bot : bot_list) { - ret.entries.push_back(Lua_Bot(bot)); + ret.entries.emplace_back(Lua_Bot(bot)); } } @@ -411,7 +409,7 @@ Lua_Bot_List Lua_EntityList::GetBotListByCharacterID(uint32 character_id) { if (bot_list.size()) { for (auto bot : bot_list) { - ret.entries.push_back(Lua_Bot(bot)); + ret.entries.emplace_back(Lua_Bot(bot)); } } @@ -425,7 +423,7 @@ Lua_Bot_List Lua_EntityList::GetBotListByCharacterID(uint32 character_id, uint8 if (bot_list.size()) { for (auto bot : bot_list) { - ret.entries.push_back(Lua_Bot(bot)); + ret.entries.emplace_back(Lua_Bot(bot)); } } @@ -439,7 +437,7 @@ Lua_Bot_List Lua_EntityList::GetBotListByClientName(std::string client_name) { if (bot_list.size()) { for (auto bot : bot_list) { - ret.entries.push_back(Lua_Bot(bot)); + ret.entries.emplace_back(Lua_Bot(bot)); } } @@ -453,7 +451,7 @@ Lua_Bot_List Lua_EntityList::GetBotListByClientName(std::string client_name, uin if (bot_list.size()) { for (auto bot : bot_list) { - ret.entries.push_back(Lua_Bot(bot)); + ret.entries.emplace_back(Lua_Bot(bot)); } } @@ -487,7 +485,7 @@ Lua_Client_List Lua_EntityList::GetShuffledClientList() { auto iter = t_list.begin(); while(iter != t_list.end()) { - ret.entries.push_back(Lua_Client(iter->second)); + ret.entries.emplace_back(Lua_Client(iter->second)); ++iter; } @@ -503,7 +501,7 @@ Lua_NPC_List Lua_EntityList::GetNPCList() { auto iter = t_list.begin(); while(iter != t_list.end()) { - ret.entries.push_back(Lua_NPC(iter->second)); + ret.entries.emplace_back(Lua_NPC(iter->second)); ++iter; } @@ -517,7 +515,7 @@ Lua_Corpse_List Lua_EntityList::GetCorpseList() { auto iter = t_list.begin(); while(iter != t_list.end()) { - ret.entries.push_back(Lua_Corpse(iter->second)); + ret.entries.emplace_back(Lua_Corpse(iter->second)); ++iter; } @@ -531,7 +529,7 @@ Lua_Object_List Lua_EntityList::GetObjectList() { auto iter = t_list.begin(); while(iter != t_list.end()) { - ret.entries.push_back(Lua_Object(iter->second)); + ret.entries.emplace_back(Lua_Object(iter->second)); ++iter; } @@ -545,7 +543,7 @@ Lua_Doors_List Lua_EntityList::GetDoorsList() { auto iter = t_list.begin(); while(iter != t_list.end()) { - ret.entries.push_back(Lua_Door(iter->second)); + ret.entries.emplace_back(Lua_Door(iter->second)); ++iter; } @@ -560,7 +558,7 @@ Lua_Spawn_List Lua_EntityList::GetSpawnList() { auto iter = t_list.begin(); while(iter != t_list.end()) { - ret.entries.push_back(Lua_Spawn(*iter)); + ret.entries.emplace_back(Lua_Spawn(*iter)); ++iter; } diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 366195e2e..7d6c6e959 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -9,10 +9,8 @@ #include "../common/content/world_content_service.h" #include "../common/timer.h" -#include "../common/eqemu_logsys.h" #include "../common/classes.h" #include "../common/rulesys.h" -#include "lua_parser.h" #include "lua_item.h" #include "lua_iteminst.h" #include "lua_client.h" @@ -907,12 +905,12 @@ std::string lua_say_link(const char *phrase) { } void lua_set_rule(std::string rule_name, std::string rule_value) { - RuleManager::Instance()->SetRule(rule_name.c_str(), rule_value.c_str()); + RuleManager::Instance()->SetRule(rule_name, rule_value); } std::string lua_get_rule(std::string rule_name) { std::string rule_value; - RuleManager::Instance()->GetRule(rule_name.c_str(), rule_value); + RuleManager::Instance()->GetRule(rule_name, rule_value); return rule_value; } @@ -1017,7 +1015,7 @@ luabind::adl::object lua_get_instance_ids(lua_State* L, std::string zone_name) { auto instance_ids = quest_manager.GetInstanceIDs(zone_name); for (int i = 0; i < instance_ids.size(); i++) { - ret[i] = instance_ids[i]; + ret[i + 1] = instance_ids[i]; } return ret; @@ -1028,7 +1026,7 @@ luabind::adl::object lua_get_instance_ids_by_char_id(lua_State* L, std::string z auto instance_ids = quest_manager.GetInstanceIDs(zone_name, character_id); for (int i = 0; i < instance_ids.size(); i++) { - ret[i] = instance_ids[i]; + ret[i + 1] = instance_ids[i]; } return ret; @@ -1989,7 +1987,7 @@ void lua_remove_ldon_loss(uint32 theme_id) { } void lua_remove_ldon_win(uint32 theme_id) { - quest_manager.addldonwin(theme_id); + quest_manager.removeldonwin(theme_id); } std::string lua_get_clean_npc_name_by_id(uint32 npc_id) { @@ -3808,6 +3806,1240 @@ void lua_send_player_handin_event() quest_manager.SendPlayerHandinEvent(); } +float lua_get_zone_safe_x(uint32 zone_id) +{ + return zone_store.GetZoneSafeCoordinates(zone_id).x; +} + +float lua_get_zone_safe_x(uint32 zone_id, int version) +{ + return zone_store.GetZoneSafeCoordinates(zone_id, version).x; +} + +float lua_get_zone_safe_y(uint32 zone_id) +{ + return zone_store.GetZoneSafeCoordinates(zone_id).y; +} + +float lua_get_zone_safe_y(uint32 zone_id, int version) +{ + return zone_store.GetZoneSafeCoordinates(zone_id, version).y; +} + +float lua_get_zone_safe_z(uint32 zone_id) +{ + return zone_store.GetZoneSafeCoordinates(zone_id).z; +} + +float lua_get_zone_safe_z(uint32 zone_id, int version) +{ + return zone_store.GetZoneSafeCoordinates(zone_id, version).z; +} + +float lua_get_zone_safe_heading(uint32 zone_id) +{ + return zone_store.GetZoneSafeCoordinates(zone_id).w; +} + +float lua_get_zone_safe_heading(uint32 zone_id, int version) +{ + return zone_store.GetZoneSafeCoordinates(zone_id, version).w; +} + +float lua_get_zone_graveyard_id(uint32 zone_id) +{ + return zone_store.GetZoneGraveyardID(zone_id); +} + +float lua_get_zone_graveyard_id(uint32 zone_id, int version) +{ + return zone_store.GetZoneGraveyardID(zone_id, version); +} + +uint8 lua_get_zone_minimum_level(uint32 zone_id) +{ + return zone_store.GetZoneMinimumLevel(zone_id); +} + +uint8 lua_get_zone_minimum_level(uint32 zone_id, int version) +{ + return zone_store.GetZoneMinimumLevel(zone_id, version); +} + +uint8 lua_get_zone_maximum_level(uint32 zone_id) +{ + return zone_store.GetZoneMaximumLevel(zone_id); +} + +uint8 lua_get_zone_maximum_level(uint32 zone_id, int version) +{ + return zone_store.GetZoneMaximumLevel(zone_id, version); +} + +uint8 lua_get_zone_minimum_status(uint32 zone_id) +{ + return zone_store.GetZoneMinimumStatus(zone_id); +} + +uint8 lua_get_zone_minimum_status(uint32 zone_id, int version) +{ + return zone_store.GetZoneMinimumStatus(zone_id, version); +} + +int lua_get_zone_time_zone(uint32 zone_id) +{ + return zone_store.GetZoneTimeZone(zone_id); +} + +int lua_get_zone_time_zone(uint32 zone_id, int version) +{ + return zone_store.GetZoneTimeZone(zone_id, version); +} + +int lua_get_zone_maximum_players(uint32 zone_id) +{ + return zone_store.GetZoneMaximumPlayers(zone_id); +} + +int lua_get_zone_maximum_players(uint32 zone_id, int version) +{ + return zone_store.GetZoneMaximumPlayers(zone_id, version); +} + +uint32 lua_get_zone_rule_set(uint32 zone_id) +{ + return zone_store.GetZoneRuleSet(zone_id); +} + +uint32 lua_get_zone_rule_set(uint32 zone_id, int version) +{ + return zone_store.GetZoneRuleSet(zone_id, version); +} + +std::string lua_get_zone_note(uint32 zone_id) +{ + return zone_store.GetZoneNote(zone_id); +} + +std::string lua_get_zone_note(uint32 zone_id, int version) +{ + return zone_store.GetZoneNote(zone_id, version); +} + +float lua_get_zone_underworld(uint32 zone_id) +{ + return zone_store.GetZoneUnderworld(zone_id); +} + +float lua_get_zone_underworld(uint32 zone_id, int version) +{ + return zone_store.GetZoneUnderworld(zone_id, version); +} + +float lua_get_zone_minimum_clip(uint32 zone_id) +{ + return zone_store.GetZoneMinimumClip(zone_id); +} + +float lua_get_zone_minimum_clip(uint32 zone_id, int version) +{ + return zone_store.GetZoneMinimumClip(zone_id, version); +} + +float lua_get_zone_maximum_clip(uint32 zone_id) +{ + return zone_store.GetZoneMaximumClip(zone_id); +} + +float lua_get_zone_maximum_clip(uint32 zone_id, int version) +{ + return zone_store.GetZoneMaximumClip(zone_id, version); +} + +float lua_get_zone_fog_minimum_clip(uint32 zone_id) +{ + return zone_store.GetZoneFogMinimumClip(zone_id); +} + +float lua_get_zone_fog_minimum_clip(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneFogMinimumClip(zone_id, slot); +} + +float lua_get_zone_fog_minimum_clip(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneFogMinimumClip(zone_id, slot); +} + +float lua_get_zone_fog_maximum_clip(uint32 zone_id) +{ + return zone_store.GetZoneFogMaximumClip(zone_id); +} + +float lua_get_zone_fog_maximum_clip(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneFogMaximumClip(zone_id, slot); +} + +float lua_get_zone_fog_maximum_clip(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneFogMaximumClip(zone_id, slot, version); +} + +uint8 lua_get_zone_fog_red(uint32 zone_id) +{ + return zone_store.GetZoneFogRed(zone_id); +} + +uint8 lua_get_zone_fog_red(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneFogRed(zone_id, slot); +} + +uint8 lua_get_zone_fog_red(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneFogRed(zone_id, slot, version); +} + +uint8 lua_get_zone_fog_green(uint32 zone_id) +{ + return zone_store.GetZoneFogGreen(zone_id); +} + +uint8 lua_get_zone_fog_green(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneFogGreen(zone_id, slot); +} + +uint8 lua_get_zone_fog_green(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneFogGreen(zone_id, slot, version); +} + +uint8 lua_get_zone_fog_blue(uint32 zone_id) +{ + return zone_store.GetZoneFogBlue(zone_id); +} + +uint8 lua_get_zone_fog_blue(uint32 zone_id, uint8 slot) +{ + return zone_store.GetZoneFogBlue(zone_id, slot); +} + +uint8 lua_get_zone_fog_blue(uint32 zone_id, uint8 slot, int version) +{ + return zone_store.GetZoneFogBlue(zone_id, slot, version); +} + +uint8 lua_get_zone_sky(uint32 zone_id) +{ + return zone_store.GetZoneSky(zone_id); +} + +uint8 lua_get_zone_sky(uint32 zone_id, int version) +{ + return zone_store.GetZoneSky(zone_id, version); +} + +uint8 lua_get_zone_ztype(uint32 zone_id) +{ + return zone_store.GetZoneZType(zone_id); +} + +uint8 lua_get_zone_ztype(uint32 zone_id, int version) +{ + return zone_store.GetZoneZType(zone_id, version); +} + +float lua_get_zone_experience_multiplier(uint32 zone_id) +{ + return zone_store.GetZoneExperienceMultiplier(zone_id); +} + +float lua_get_zone_experience_multiplier(uint32 zone_id, int version) +{ + return zone_store.GetZoneExperienceMultiplier(zone_id, version); +} + +float lua_get_zone_walk_speed(uint32 zone_id) +{ + return zone_store.GetZoneWalkSpeed(zone_id); +} + +float lua_get_zone_walk_speed(uint32 zone_id, int version) +{ + return zone_store.GetZoneWalkSpeed(zone_id, version); +} + +uint8 lua_get_zone_time_type(uint32 zone_id) +{ + return zone_store.GetZoneTimeType(zone_id); +} + +uint8 lua_get_zone_time_type(uint32 zone_id, int version) +{ + return zone_store.GetZoneTimeType(zone_id, version); +} + +float lua_get_zone_fog_density(uint32 zone_id) +{ + return zone_store.GetZoneFogDensity(zone_id); +} + +float lua_get_zone_fog_density(uint32 zone_id, int version) +{ + return zone_store.GetZoneFogDensity(zone_id, version); +} + +std::string lua_get_zone_flag_needed(uint32 zone_id) +{ + return zone_store.GetZoneFlagNeeded(zone_id); +} + +std::string lua_get_zone_flag_needed(uint32 zone_id, int version) +{ + return zone_store.GetZoneFlagNeeded(zone_id, version); +} + +int8 lua_get_zone_can_bind(uint32 zone_id) +{ + return zone_store.GetZoneCanBind(zone_id); +} + +int8 lua_get_zone_can_bind(uint32 zone_id, int version) +{ + return zone_store.GetZoneCanBind(zone_id, version); +} + +int8 lua_get_zone_can_combat(uint32 zone_id) +{ + return zone_store.GetZoneCanCombat(zone_id); +} + +int8 lua_get_zone_can_combat(uint32 zone_id, int version) +{ + return zone_store.GetZoneCanCombat(zone_id, version); +} + +int8 lua_get_zone_can_levitate(uint32 zone_id) +{ + return zone_store.GetZoneCanLevitate(zone_id); +} + +int8 lua_get_zone_can_levitate(uint32 zone_id, int version) +{ + return zone_store.GetZoneCanLevitate(zone_id, version); +} + +int8 lua_get_zone_cast_outdoor(uint32 zone_id) +{ + return zone_store.GetZoneCastOutdoor(zone_id); +} + +int8 lua_get_zone_cast_outdoor(uint32 zone_id, int version) +{ + return zone_store.GetZoneCastOutdoor(zone_id, version); +} + +uint8 lua_get_zone_hotzone(uint32 zone_id) +{ + return zone_store.GetZoneHotzone(zone_id); +} + +uint8 lua_get_zone_hotzone(uint32 zone_id, int version) +{ + return zone_store.GetZoneHotzone(zone_id, version); +} + +uint8 lua_get_zone_instance_type(uint32 zone_id) +{ + return zone_store.GetZoneInstanceType(zone_id); +} + +uint8 lua_get_zone_instance_type(uint32 zone_id, int version) +{ + return zone_store.GetZoneInstanceType(zone_id, version); +} + +uint64 lua_get_zone_shutdown_delay(uint32 zone_id) +{ + return zone_store.GetZoneShutdownDelay(zone_id); +} + +uint64 lua_get_zone_shutdown_delay(uint32 zone_id, int version) +{ + return zone_store.GetZoneShutdownDelay(zone_id, version); +} + +int8 lua_get_zone_peqzone(uint32 zone_id) +{ + return zone_store.GetZonePEQZone(zone_id); +} + +int8 lua_get_zone_peqzone(uint32 zone_id, int version) +{ + return zone_store.GetZonePEQZone(zone_id, version); +} + +int8 lua_get_zone_expansion(uint32 zone_id) +{ + return zone_store.GetZoneExpansion(zone_id); +} + +int8 lua_get_zone_expansion(uint32 zone_id, int version) +{ + return zone_store.GetZoneExpansion(zone_id, version); +} + +int8 lua_get_zone_bypass_expansion_check(uint32 zone_id) +{ + return zone_store.GetZoneBypassExpansionCheck(zone_id); +} + +int8 lua_get_zone_bypass_expansion_check(uint32 zone_id, int version) +{ + return zone_store.GetZoneBypassExpansionCheck(zone_id, version); +} + +int8 lua_get_zone_suspend_buffs(uint32 zone_id) +{ + return zone_store.GetZoneSuspendBuffs(zone_id); +} + +int8 lua_get_zone_suspend_buffs(uint32 zone_id, int version) +{ + return zone_store.GetZoneSuspendBuffs(zone_id, version); +} + +int lua_get_zone_rain_chance(uint32 zone_id) +{ + return zone_store.GetZoneRainChance(zone_id); +} + +int lua_get_zone_rain_chance(uint32 zone_id, int version) +{ + return zone_store.GetZoneRainChance(zone_id, version); +} + +int lua_get_zone_rain_duration(uint32 zone_id) +{ + return zone_store.GetZoneRainDuration(zone_id); +} + +int lua_get_zone_rain_duration(uint32 zone_id, int version) +{ + return zone_store.GetZoneRainDuration(zone_id, version); +} + +int lua_get_zone_snow_chance(uint32 zone_id) +{ + return zone_store.GetZoneSnowChance(zone_id); +} + +int lua_get_zone_snow_chance(uint32 zone_id, int version) +{ + return zone_store.GetZoneSnowChance(zone_id, version); +} + +int lua_get_zone_snow_duration(uint32 zone_id) +{ + return zone_store.GetZoneSnowDuration(zone_id); +} + +int lua_get_zone_snow_duration(uint32 zone_id, int version) +{ + return zone_store.GetZoneSnowDuration(zone_id, version); +} + +float lua_get_zone_gravity(uint32 zone_id) +{ + return zone_store.GetZoneGravity(zone_id); +} + +float lua_get_zone_gravity(uint32 zone_id, int version) +{ + return zone_store.GetZoneGravity(zone_id, version); +} + +int lua_get_zone_type(uint32 zone_id) +{ + return zone_store.GetZoneType(zone_id); +} + +int lua_get_zone_type(uint32 zone_id, int version) +{ + return zone_store.GetZoneType(zone_id, version); +} + +int lua_get_zone_sky_lock(uint32 zone_id) +{ + return zone_store.GetZoneSkyLock(zone_id); +} + +int lua_get_zone_sky_lock(uint32 zone_id, int version) +{ + return zone_store.GetZoneSkyLock(zone_id, version); +} + +int lua_get_zone_fast_regen_hp(uint32 zone_id) +{ + return zone_store.GetZoneFastRegenHP(zone_id); +} + +int lua_get_zone_fast_regen_hp(uint32 zone_id, int version) +{ + return zone_store.GetZoneFastRegenHP(zone_id, version); +} + +int lua_get_zone_fast_regen_mana(uint32 zone_id) +{ + return zone_store.GetZoneFastRegenMana(zone_id); +} + +int lua_get_zone_fast_regen_mana(uint32 zone_id, int version) +{ + return zone_store.GetZoneFastRegenMana(zone_id, version); +} + +int lua_get_zone_fast_regen_endurance(uint32 zone_id) +{ + return zone_store.GetZoneFastRegenEndurance(zone_id); +} + +int lua_get_zone_fast_regen_endurance(uint32 zone_id, int version) +{ + return zone_store.GetZoneFastRegenEndurance(zone_id, version); +} + +int lua_get_zone_npc_maximum_aggro_distance(uint32 zone_id) +{ + return zone_store.GetZoneNPCMaximumAggroDistance(zone_id); +} + +int lua_get_zone_npc_maximum_aggro_distance(uint32 zone_id, int version) +{ + return zone_store.GetZoneNPCMaximumAggroDistance(zone_id, version); +} + +uint32 lua_get_zone_maximum_movement_update_range(uint32 zone_id) +{ + return zone_store.GetZoneMaximumMovementUpdateRange(zone_id); +} + +uint32 lua_get_zone_maximum_movement_update_range(uint32 zone_id, int version) +{ + return zone_store.GetZoneMaximumMovementUpdateRange(zone_id, version); +} + +int8 lua_get_zone_minimum_expansion(uint32 zone_id) +{ + return zone_store.GetZoneMinimumExpansion(zone_id); +} + +int8 lua_get_zone_minimum_expansion(uint32 zone_id, int version) +{ + return zone_store.GetZoneMinimumExpansion(zone_id, version); +} + +int8 lua_get_zone_maximum_expansion(uint32 zone_id) +{ + return zone_store.GetZoneMaximumExpansion(zone_id); +} + +int8 lua_get_zone_maximum_expansion(uint32 zone_id, int version) +{ + return zone_store.GetZoneMaximumExpansion(zone_id, version); +} + +std::string lua_get_zone_content_flags(uint32 zone_id) +{ + return zone_store.GetZoneContentFlags(zone_id); +} + +std::string lua_get_zone_content_flags(uint32 zone_id, int version) +{ + return zone_store.GetZoneContentFlags(zone_id, version); +} + +std::string lua_get_zone_content_flags_disabled(uint32 zone_id) +{ + return zone_store.GetZoneContentFlagsDisabled(zone_id); +} + +std::string lua_get_zone_content_flags_disabled(uint32 zone_id, int version) +{ + return zone_store.GetZoneContentFlagsDisabled(zone_id, version); +} + +int lua_get_zone_underworld_teleport_index(uint32 zone_id) +{ + return zone_store.GetZoneUnderworldTeleportIndex(zone_id); +} + +int lua_get_zone_underworld_teleport_index(uint32 zone_id, int version) +{ + return zone_store.GetZoneUnderworldTeleportIndex(zone_id, version); +} + +int lua_get_zone_lava_damage(uint32 zone_id) +{ + return zone_store.GetZoneLavaDamage(zone_id); +} + +int lua_get_zone_lava_damage(uint32 zone_id, int version) +{ + return zone_store.GetZoneLavaDamage(zone_id, version); +} + +int lua_get_zone_minimum_lava_damage(uint32 zone_id) +{ + return zone_store.GetZoneMinimumLavaDamage(zone_id); +} + +int lua_get_zone_minimum_lava_damage(uint32 zone_id, int version) +{ + return zone_store.GetZoneMinimumLavaDamage(zone_id, version); +} + +void lua_send_channel_message(uint8 channel_number, uint32 guild_id, uint8 language_id, uint8 language_skill, const char* message) +{ + quest_manager.SendChannelMessage(channel_number, guild_id, language_id, language_skill, message); +} + +void lua_send_channel_message(Lua_Client from, uint8 channel_number, uint32 guild_id, uint8 language_id, uint8 language_skill, const char* message) +{ + quest_manager.SendChannelMessage(from, channel_number, guild_id, language_id, language_skill, message); +} + +void lua_send_channel_message(Lua_Client from, const char* to, uint8 channel_number, uint32 guild_id, uint8 language_id, uint8 language_skill, const char* message) +{ + quest_manager.SendChannelMessage(from, to, channel_number, guild_id, language_id, language_skill, message); +} + +uint8 lua_get_spell_level(uint16 spell_id, uint8 class_id) +{ + const auto spell_level = GetSpellLevel(spell_id, class_id); + return spell_level > RuleI(Character, MaxLevel) ? UINT8_MAX : spell_level; +} + +bool lua_is_effect_in_spell(uint16 spell_id, int effect_id) +{ + return IsEffectInSpell(spell_id, effect_id); +} + +bool lua_is_beneficial_spell(uint16 spell_id) +{ + return IsBeneficialSpell(spell_id); +} + +bool lua_is_detrimental_spell(uint16 spell_id) +{ + return IsDetrimentalSpell(spell_id); +} + +bool lua_is_targetable_ae_spell(uint16 spell_id) +{ + return IsTargetableAESpell(spell_id); +} + +bool lua_is_sacrifice_spell(uint16 spell_id) +{ + return IsSacrificeSpell(spell_id); +} + +bool lua_is_lifetap_spell(uint16 spell_id) +{ + return IsLifetapSpell(spell_id); +} + +bool lua_is_mesmerize_spell(uint16 spell_id) +{ + return IsMesmerizeSpell(spell_id); +} + +bool lua_is_stun_spell(uint16 spell_id) +{ + return IsStunSpell(spell_id); +} + +bool lua_is_summon_spell(uint16 spell_id) +{ + return IsSummonSpell(spell_id); +} + +bool lua_is_damage_spell(uint16 spell_id) +{ + return IsDamageSpell(spell_id); +} + +bool lua_is_fear_spell(uint16 spell_id) +{ + return IsFearSpell(spell_id); +} + +bool lua_is_cure_spell(uint16 spell_id) +{ + return IsCureSpell(spell_id); +} + +bool lua_is_haste_spell(uint16 spell_id) +{ + return IsHasteSpell(spell_id); +} + +bool lua_is_harmony_spell(uint16 spell_id) +{ + return IsHarmonySpell(spell_id); +} + +bool lua_is_percental_heal_spell(uint16 spell_id) +{ + return IsPercentalHealSpell(spell_id); +} + +bool lua_is_group_only_spell(uint16 spell_id) +{ + return IsGroupOnlySpell(spell_id); +} + +bool lua_is_invisible_spell(uint16 spell_id) +{ + return IsInvisibleSpell(spell_id); +} + +bool lua_is_invulnerability_spell(uint16 spell_id) +{ + return IsInvulnerabilitySpell(spell_id); +} + +bool lua_is_complete_heal_duration_spell(uint16 spell_id) +{ + return IsCompleteHealDurationSpell(spell_id); +} + +bool lua_is_poison_counter_spell(uint16 spell_id) +{ + return IsPoisonCounterSpell(spell_id); +} + +bool lua_is_disease_counter_spell(uint16 spell_id) +{ + return IsDiseaseCounterSpell(spell_id); +} + +bool lua_is_summon_item_spell(uint16 spell_id) +{ + return IsSummonItemSpell(spell_id); +} + +bool lua_is_summon_skeleton_spell(uint16 spell_id) +{ + return IsSummonSkeletonSpell(spell_id); +} + +bool lua_is_summon_pet_spell(uint16 spell_id) +{ + return IsSummonPetSpell(spell_id); +} + +bool lua_is_pet_spell(uint16 spell_id) +{ + return IsPetSpell(spell_id); +} + +bool lua_is_summon_pc_spell(uint16 spell_id) +{ + return IsSummonPCSpell(spell_id); +} + +bool lua_is_charm_spell(uint16 spell_id) +{ + return IsCharmSpell(spell_id); +} + +bool lua_is_blind_spell(uint16 spell_id) +{ + return IsBlindSpell(spell_id); +} + +bool lua_is_health_spell(uint16 spell_id) +{ + return IsHealthSpell(spell_id); +} + +bool lua_is_cast_time_reduction_spell(uint16 spell_id) +{ + return IsCastTimeReductionSpell(spell_id); +} + +bool lua_is_increase_duration_spell(uint16 spell_id) +{ + return IsIncreaseDurationSpell(spell_id); +} + +bool lua_is_mana_cost_reduction_spell(uint16 spell_id) +{ + return IsManaCostReductionSpell(spell_id); +} + +bool lua_is_increase_range_spell(uint16 spell_id) +{ + return IsIncreaseRangeSpell(spell_id); +} + +bool lua_is_improved_healing_spell(uint16 spell_id) +{ + return IsImprovedHealingSpell(spell_id); +} + +bool lua_is_improved_damage_spell(uint16 spell_id) +{ + return IsImprovedDamageSpell(spell_id); +} + +bool lua_is_ae_duration_spell(uint16 spell_id) +{ + return IsAEDurationSpell(spell_id); +} + +bool lua_is_pure_nuke_spell(uint16 spell_id) +{ + return IsPureNukeSpell(spell_id); +} + +bool lua_is_ae_nuke_spell(uint16 spell_id) +{ + return IsAENukeSpell(spell_id); +} + +bool lua_is_pbae_nuke_spell(uint16 spell_id) +{ + return IsPBAENukeSpell(spell_id); +} + +bool lua_is_ae_rain_nuke_spell(uint16 spell_id) +{ + return IsAERainNukeSpell(spell_id); +} + +bool lua_is_partial_resistable_spell(uint16 spell_id) +{ + return IsPartialResistableSpell(spell_id); +} + +bool lua_is_resistable_spell(uint16 spell_id) +{ + return IsResistableSpell(spell_id); +} + +bool lua_is_group_spell(uint16 spell_id) +{ + return IsGroupSpell(spell_id); +} + +bool lua_is_tgb_compatible_spell(uint16 spell_id) +{ + return IsTGBCompatibleSpell(spell_id); +} + +bool lua_is_bard_song(uint16 spell_id) +{ + return IsBardSong(spell_id); +} + +bool lua_is_pulsing_bard_song(uint16 spell_id) +{ + return IsPulsingBardSong(spell_id); +} + +bool lua_is_discipline_buff(uint16 spell_id) +{ + return IsDisciplineBuff(spell_id); +} + +bool lua_is_discipline(uint16 spell_id) +{ + return IsDiscipline(spell_id); +} + +bool lua_is_combat_skill(uint16 spell_id) +{ + return IsCombatSkill(spell_id); +} + +bool lua_is_resurrection_effects(uint16 spell_id) +{ + return IsResurrectionEffects(spell_id); +} + +bool lua_is_rune_spell(uint16 spell_id) +{ + return IsRuneSpell(spell_id); +} + +bool lua_is_magic_rune_spell(uint16 spell_id) +{ + return IsMagicRuneSpell(spell_id); +} + +bool lua_is_mana_tap_spell(uint16 spell_id) +{ + return IsManaTapSpell(spell_id); +} + +bool lua_is_alliance_spell(uint16 spell_id) +{ + return IsAllianceSpell(spell_id); +} + +bool lua_is_death_save_spell(uint16 spell_id) +{ + return IsDeathSaveSpell(spell_id); +} + +bool lua_is_partial_death_save_spell(uint16 spell_id) +{ + return IsPartialDeathSaveSpell(spell_id); +} + +bool lua_is_full_death_save_spell(uint16 spell_id) +{ + return IsFullDeathSaveSpell(spell_id); +} + +bool lua_is_shadow_step_spell(uint16 spell_id) +{ + return IsShadowStepSpell(spell_id); +} + +bool lua_is_succor_spell(uint16 spell_id) +{ + return IsSuccorSpell(spell_id); +} + +bool lua_is_teleport_spell(uint16 spell_id) +{ + return IsTeleportSpell(spell_id); +} + +bool lua_is_translocate_spell(uint16 spell_id) +{ + return IsTranslocateSpell(spell_id); +} + +bool lua_is_gate_spell(uint16 spell_id) +{ + return IsGateSpell(spell_id); +} + +bool lua_is_illusion_spell(uint16 spell_id) +{ + return IsIllusionSpell(spell_id); +} + +bool lua_is_ldon_object_spell(uint16 spell_id) +{ + return IsLDoNObjectSpell(spell_id); +} + +bool lua_is_heal_over_time_spell(uint16 spell_id) +{ + return IsHealOverTimeSpell(spell_id); +} + +bool lua_is_complete_heal_spell(uint16 spell_id) +{ + return IsCompleteHealSpell(spell_id); +} + +bool lua_is_fast_heal_spell(uint16 spell_id) +{ + return IsFastHealSpell(spell_id); +} + +bool lua_is_very_fast_heal_spell(uint16 spell_id) +{ + return IsVeryFastHealSpell(spell_id); +} + +bool lua_is_regular_single_target_heal_spell(uint16 spell_id) +{ + return IsRegularSingleTargetHealSpell(spell_id); +} + +bool lua_is_regular_group_heal_spell(uint16 spell_id) +{ + return IsRegularGroupHealSpell(spell_id); +} + +bool lua_is_group_complete_heal_spell(uint16 spell_id) +{ + return IsGroupCompleteHealSpell(spell_id); +} + +bool lua_is_group_heal_over_time_spell(uint16 spell_id) +{ + return IsGroupHealOverTimeSpell(spell_id); +} + +bool lua_is_debuff_spell(uint16 spell_id) +{ + return IsDebuffSpell(spell_id); +} + +bool lua_is_resist_debuff_spell(uint16 spell_id) +{ + return IsResistDebuffSpell(spell_id); +} + +bool lua_is_self_conversion_spell(uint16 spell_id) +{ + return IsSelfConversionSpell(spell_id); +} + +bool lua_is_buff_spell(uint16 spell_id) +{ + return IsBuffSpell(spell_id); +} + +bool lua_is_persist_death_spell(uint16 spell_id) +{ + return IsPersistDeathSpell(spell_id); +} + +bool lua_is_suspendable_spell(uint16 spell_id) +{ + return IsSuspendableSpell(spell_id); +} + +bool lua_is_cast_on_fade_duration_spell(uint16 spell_id) +{ + return IsCastOnFadeDurationSpell(spell_id); +} + +bool lua_is_distance_modifier_spell(uint16 spell_id) +{ + return IsDistanceModifierSpell(spell_id); +} + +bool lua_is_rest_allowed_spell(uint16 spell_id) +{ + return IsRestAllowedSpell(spell_id); +} + +bool lua_is_no_detrimental_spell_aggro_spell(uint16 spell_id) +{ + return IsNoDetrimentalSpellAggroSpell(spell_id); +} + +bool lua_is_stackable_dot(uint16 spell_id) +{ + return IsStackableDOT(spell_id); +} + +bool lua_is_short_duration_buff(uint16 spell_id) +{ + return IsShortDurationBuff(spell_id); +} + +bool lua_is_target_required_for_spell(uint16 spell_id) +{ + return IsTargetRequiredForSpell(spell_id); +} + +bool lua_is_virus_spell(uint16 spell_id) +{ + return IsVirusSpell(spell_id); +} + +bool lua_is_valid_spell(uint16 spell_id) +{ + return IsValidSpell(spell_id); +} + +bool lua_is_effect_ignored_in_stacking(int effect_id) +{ + return IsEffectIgnoredInStacking(effect_id); +} + +bool lua_is_focus_limit(int effect_id) +{ + return IsFocusLimit(effect_id); +} + +bool lua_is_bard_only_stack_effect(int effect_id) +{ + return IsBardOnlyStackEffect(effect_id); +} + +bool lua_is_cast_while_invisible_spell(uint16 spell_id) +{ + return IsCastWhileInvisibleSpell(spell_id); +} + +bool lua_is_cast_restricted_spell(uint16 spell_id) +{ + return IsCastRestrictedSpell(spell_id); +} + +bool lua_is_cast_not_standing_spell(uint16 spell_id) +{ + return IsCastNotStandingSpell(spell_id); +} + +bool lua_is_instrument_modifier_applied_to_spell_effect(uint16 spell_id, int effect_id) +{ + return IsInstrumentModifierAppliedToSpellEffect(spell_id, effect_id); +} + +bool lua_is_blank_spell_effect(uint16 spell_id, int effect_index) +{ + return IsBlankSpellEffect(spell_id, effect_index); +} + +uint16 lua_get_spell_trigger_spell_id(uint16 spell_id, int effect_id) +{ + return GetSpellTriggerSpellID(spell_id, effect_id); +} + +uint8 lua_get_spell_minimum_level(uint16 spell_id) +{ + return GetSpellMinimumLevel(spell_id); +} + +int lua_get_spell_resist_type(uint16 spell_id) +{ + return GetSpellResistType(spell_id); +} + +int lua_get_spell_target_type(uint16 spell_id) +{ + return GetSpellTargetType(spell_id); +} + +int lua_get_spell_partial_melee_rune_reduction(uint16 spell_id) +{ + return GetSpellPartialMeleeRuneReduction(spell_id); +} + +int lua_get_spell_partial_magic_rune_reduction(uint16 spell_id) +{ + return GetSpellPartialMagicRuneReduction(spell_id); +} + +int lua_get_spell_partial_melee_rune_amount(uint16 spell_id) +{ + return GetSpellPartialMeleeRuneAmount(spell_id); +} + +int lua_get_spell_partial_magic_rune_amount(uint16 spell_id) +{ + return GetSpellPartialMagicRuneAmount(spell_id); +} + +int lua_get_spell_viral_minimum_spread_time(uint16 spell_id) +{ + return GetSpellViralMinimumSpreadTime(spell_id); +} + +int lua_get_spell_viral_maximum_spread_time(uint16 spell_id) +{ + return GetSpellViralMaximumSpreadTime(spell_id); +} + +int lua_get_spell_viral_spread_range(uint16 spell_id) +{ + return GetSpellViralSpreadRange(spell_id); +} + +int lua_get_spell_proc_limit_timer(uint16 spell_id, int proc_type) +{ + return GetSpellProcLimitTimer(spell_id, proc_type); +} + +int lua_get_spell_effect_description_number(uint16 spell_id) +{ + return GetSpellEffectDescriptionNumber(spell_id); +} + +int lua_get_spell_furious_bash(uint16 spell_id) +{ + return GetSpellFuriousBash(spell_id); +} + +bool lua_is_spell_usable_in_this_zone_type(uint16 spell_id) +{ + return IsSpellUsableInThisZoneType(spell_id, zone->GetZoneType()); +} + +bool lua_is_spell_usable_in_this_zone_type(uint16 spell_id, uint8 zone_type) +{ + return IsSpellUsableInThisZoneType(spell_id, zone_type); +} + +int lua_get_spell_effect_index(uint16 spell_id, int effect_id) +{ + return GetSpellEffectIndex(spell_id, effect_id); +} + +int lua_calculate_poison_counters(uint16 spell_id) +{ + return CalculatePoisonCounters(spell_id); +} + +int lua_calculate_disease_counters(uint16 spell_id) +{ + return CalculateDiseaseCounters(spell_id); +} + +int lua_calculate_curse_counters(uint16 spell_id) +{ + return CalculateCurseCounters(spell_id); +} + +int lua_calculate_corruption_counters(uint16 spell_id) +{ + return CalculateCorruptionCounters(spell_id); +} + +int lua_calculate_counters(uint16 spell_id) +{ + return CalculateCounters(spell_id); +} + +int8 lua_get_spell_resurrection_sickness_check(uint16 spell_id_one, uint16 spell_id_two) +{ + return GetSpellResurrectionSicknessCheck(spell_id_one, spell_id_two); +} + +int lua_get_spell_nimbus_effect(uint16 spell_id) +{ + return GetSpellNimbusEffect(spell_id); +} + +std::string lua_convert_money_to_string(luabind::adl::object table) +{ + if (luabind::type(table) != LUA_TTABLE) { + return std::string(); + } + + uint64 platinum = luabind::type(table["platinum"]) != LUA_TNIL ? luabind::object_cast(table["platinum"]) : 0; + uint64 gold = luabind::type(table["gold"]) != LUA_TNIL ? luabind::object_cast(table["gold"]) : 0; + uint64 silver = luabind::type(table["silver"]) != LUA_TNIL ? luabind::object_cast(table["silver"]) : 0; + uint64 copper = luabind::type(table["copper"]) != LUA_TNIL ? luabind::object_cast(table["copper"]) : 0; + + if ( + !copper && + !silver && + !gold && + !platinum + ) { + return std::string(); + } + + return Strings::Money(platinum, gold, silver, copper); +} + #define LuaCreateNPCParse(name, c_type, default_value) do { \ cur = table[#name]; \ if(luabind::type(cur) != LUA_TNIL) { \ @@ -4182,7 +5414,7 @@ luabind::scope lua_register_general() { luabind::def("get_instance_id", &lua_get_instance_id), luabind::def("get_instance_id_by_char_id", &lua_get_instance_id_by_char_id), luabind::def("get_instance_ids", &lua_get_instance_ids), - luabind::def("get_instance_ids_by_char_id", &lua_get_instance_id_by_char_id), + luabind::def("get_instance_ids_by_char_id", &lua_get_instance_ids_by_char_id), luabind::def("get_instance_timer", &lua_get_instance_timer), luabind::def("get_instance_timer_by_id", &lua_get_instance_timer_by_id), luabind::def("get_instance_version_by_id", &lua_get_instance_version_by_id), @@ -4269,6 +5501,8 @@ luabind::scope lua_register_general() { luabind::def("add_ldon_loss", &lua_add_ldon_loss), luabind::def("add_ldon_points", &lua_add_ldon_points), luabind::def("add_ldon_win", &lua_add_ldon_win), + luabind::def("remove_ldon_loss", &lua_remove_ldon_loss), + luabind::def("remove_ldon_win", &lua_remove_ldon_win), luabind::def("get_gender_name", &lua_get_gender_name), luabind::def("get_deity_name", &lua_get_deity_name), luabind::def("get_inventory_slot_name", &lua_get_inventory_slot_name), @@ -4337,6 +5571,249 @@ luabind::scope lua_register_general() { luabind::def("get_recipe_salvage_count", (int8(*)(uint32,uint32))&lua_get_recipe_salvage_count), luabind::def("get_recipe_success_count", (int8(*)(uint32,uint32))&lua_get_recipe_success_count), luabind::def("send_player_handin_event", (void(*)(void))&lua_send_player_handin_event), + luabind::def("get_zone_safe_x", (float(*)(uint32))&lua_get_zone_safe_x), + luabind::def("get_zone_safe_x", (float(*)(uint32,int))&lua_get_zone_safe_x), + luabind::def("get_zone_safe_y", (float(*)(uint32))&lua_get_zone_safe_y), + luabind::def("get_zone_safe_y", (float(*)(uint32,int))&lua_get_zone_safe_y), + luabind::def("get_zone_safe_z", (float(*)(uint32))&lua_get_zone_safe_z), + luabind::def("get_zone_safe_z", (float(*)(uint32,int))&lua_get_zone_safe_z), + luabind::def("get_zone_safe_heading", (float(*)(uint32))&lua_get_zone_safe_heading), + luabind::def("get_zone_safe_heading", (float(*)(uint32,int))&lua_get_zone_safe_heading), + luabind::def("get_zone_graveyard_id", (float(*)(uint32))&lua_get_zone_graveyard_id), + luabind::def("get_zone_graveyard_id", (float(*)(uint32,int))&lua_get_zone_graveyard_id), + luabind::def("get_zone_minimum_level", (uint8(*)(uint32))&lua_get_zone_minimum_level), + luabind::def("get_zone_minimum_level", (uint8(*)(uint32,int))&lua_get_zone_minimum_level), + luabind::def("get_zone_maximum_level", (uint8(*)(uint32))&lua_get_zone_maximum_level), + luabind::def("get_zone_maximum_level", (uint8(*)(uint32,int))&lua_get_zone_maximum_level), + luabind::def("get_zone_minimum_status", (uint8(*)(uint32))&lua_get_zone_minimum_status), + luabind::def("get_zone_minimum_status", (uint8(*)(uint32,int))&lua_get_zone_minimum_status), + luabind::def("get_zone_time_zone", (int(*)(uint32))&lua_get_zone_time_zone), + luabind::def("get_zone_time_zone", (int(*)(uint32,int))&lua_get_zone_time_zone), + luabind::def("get_zone_maximum_players", (int(*)(uint32))&lua_get_zone_maximum_players), + luabind::def("get_zone_maximum_players", (int(*)(uint32,int))&lua_get_zone_maximum_players), + luabind::def("get_zone_rule_set", (uint32(*)(uint32))&lua_get_zone_rule_set), + luabind::def("get_zone_rule_set", (uint32(*)(uint32,int))&lua_get_zone_rule_set), + luabind::def("get_zone_note", (std::string(*)(uint32))&lua_get_zone_note), + luabind::def("get_zone_note", (std::string(*)(uint32,int))&lua_get_zone_note), + luabind::def("get_zone_underworld", (float(*)(uint32))&lua_get_zone_underworld), + luabind::def("get_zone_underworld", (float(*)(uint32,int))&lua_get_zone_underworld), + luabind::def("get_zone_minimum_clip", (float(*)(uint32))&lua_get_zone_minimum_clip), + luabind::def("get_zone_minimum_clip", (float(*)(uint32,int))&lua_get_zone_minimum_clip), + luabind::def("get_zone_maximum_clip", (float(*)(uint32))&lua_get_zone_maximum_clip), + luabind::def("get_zone_maximum_clip", (float(*)(uint32,int))&lua_get_zone_maximum_clip), + luabind::def("get_zone_fog_minimum_clip", (float(*)(uint32))&lua_get_zone_fog_minimum_clip), + luabind::def("get_zone_fog_minimum_clip", (float(*)(uint32,uint8))&lua_get_zone_fog_minimum_clip), + luabind::def("get_zone_fog_minimum_clip", (float(*)(uint32,uint8,int))&lua_get_zone_fog_minimum_clip), + luabind::def("get_zone_fog_maximum_clip", (float(*)(uint32))&lua_get_zone_fog_maximum_clip), + luabind::def("get_zone_fog_maximum_clip", (float(*)(uint32,uint8))&lua_get_zone_fog_maximum_clip), + luabind::def("get_zone_fog_maximum_clip", (float(*)(uint32,uint8,int))&lua_get_zone_fog_maximum_clip), + luabind::def("get_zone_fog_red", (uint8(*)(uint32))&lua_get_zone_fog_red), + luabind::def("get_zone_fog_red", (uint8(*)(uint32,uint8))&lua_get_zone_fog_red), + luabind::def("get_zone_fog_red", (uint8(*)(uint32,uint8,int))&lua_get_zone_fog_red), + luabind::def("get_zone_fog_green", (uint8(*)(uint32))&lua_get_zone_fog_green), + luabind::def("get_zone_fog_green", (uint8(*)(uint32,uint8))&lua_get_zone_fog_green), + luabind::def("get_zone_fog_green", (uint8(*)(uint32,uint8,int))&lua_get_zone_fog_green), + luabind::def("get_zone_fog_blue", (uint8(*)(uint32))&lua_get_zone_fog_blue), + luabind::def("get_zone_fog_blue", (uint8(*)(uint32,uint8))&lua_get_zone_fog_blue), + luabind::def("get_zone_fog_blue", (uint8(*)(uint32,uint8,int))&lua_get_zone_fog_blue), + luabind::def("get_zone_sky", (uint8(*)(uint32))&lua_get_zone_sky), + luabind::def("get_zone_sky", (uint8(*)(uint32,int))&lua_get_zone_sky), + luabind::def("get_zone_ztype", (uint8(*)(uint32))&lua_get_zone_ztype), + luabind::def("get_zone_ztype", (uint8(*)(uint32,int))&lua_get_zone_ztype), + luabind::def("get_zone_experience_multiplier", (float(*)(uint32))&lua_get_zone_experience_multiplier), + luabind::def("get_zone_experience_multiplier", (float(*)(uint32,int))&lua_get_zone_experience_multiplier), + luabind::def("get_zone_walk_speed", (float(*)(uint32))&lua_get_zone_walk_speed), + luabind::def("get_zone_walk_speed", (float(*)(uint32,int))&lua_get_zone_walk_speed), + luabind::def("get_zone_time_type", (uint8(*)(uint32))&lua_get_zone_time_type), + luabind::def("get_zone_time_type", (uint8(*)(uint32,int))&lua_get_zone_time_type), + luabind::def("get_zone_fog_density", (float(*)(uint32))&lua_get_zone_fog_density), + luabind::def("get_zone_fog_density", (float(*)(uint32,int))&lua_get_zone_fog_density), + luabind::def("get_zone_flag_needed", (std::string(*)(uint32))&lua_get_zone_flag_needed), + luabind::def("get_zone_flag_needed", (std::string(*)(uint32,int))&lua_get_zone_flag_needed), + luabind::def("get_zone_can_bind", (int8(*)(uint32))&lua_get_zone_can_bind), + luabind::def("get_zone_can_bind", (int8(*)(uint32,int))&lua_get_zone_can_bind), + luabind::def("get_zone_can_combat", (int8(*)(uint32))&lua_get_zone_can_combat), + luabind::def("get_zone_can_combat", (int8(*)(uint32,int))&lua_get_zone_can_combat), + luabind::def("get_zone_can_levitate", (int8(*)(uint32))&lua_get_zone_can_levitate), + luabind::def("get_zone_can_levitate", (int8(*)(uint32,int))&lua_get_zone_can_levitate), + luabind::def("get_zone_cast_outdoor", (int8(*)(uint32))&lua_get_zone_cast_outdoor), + luabind::def("get_zone_cast_outdoor", (int8(*)(uint32,int))&lua_get_zone_cast_outdoor), + luabind::def("get_zone_hotzone", (uint8(*)(uint32))&lua_get_zone_hotzone), + luabind::def("get_zone_hotzone", (uint8(*)(uint32,int))&lua_get_zone_hotzone), + luabind::def("get_zone_instance_type", (uint8(*)(uint32))&lua_get_zone_instance_type), + luabind::def("get_zone_instance_type", (uint8(*)(uint32,int))&lua_get_zone_instance_type), + luabind::def("get_zone_shutdown_delay", (uint64(*)(uint32))&lua_get_zone_shutdown_delay), + luabind::def("get_zone_shutdown_delay", (uint64(*)(uint32,int))&lua_get_zone_shutdown_delay), + luabind::def("get_zone_peqzone", (int8(*)(uint32))&lua_get_zone_peqzone), + luabind::def("get_zone_peqzone", (int8(*)(uint32,int))&lua_get_zone_peqzone), + luabind::def("get_zone_expansion", (int8(*)(uint32))&lua_get_zone_expansion), + luabind::def("get_zone_expansion", (int8(*)(uint32,int))&lua_get_zone_expansion), + luabind::def("get_zone_bypass_expansion_check", (int8(*)(uint32))&lua_get_zone_bypass_expansion_check), + luabind::def("get_zone_bypass_expansion_check", (int8(*)(uint32,int))&lua_get_zone_bypass_expansion_check), + luabind::def("get_zone_suspend_buffs", (int8(*)(uint32))&lua_get_zone_suspend_buffs), + luabind::def("get_zone_suspend_buffs", (int8(*)(uint32,int))&lua_get_zone_suspend_buffs), + luabind::def("get_zone_rain_chance", (int(*)(uint32))&lua_get_zone_rain_chance), + luabind::def("get_zone_rain_chance", (int(*)(uint32,int))&lua_get_zone_rain_chance), + luabind::def("get_zone_rain_duration", (int(*)(uint32))&lua_get_zone_rain_duration), + luabind::def("get_zone_rain_duration", (int(*)(uint32,int))&lua_get_zone_rain_duration), + luabind::def("get_zone_snow_chance", (int(*)(uint32))&lua_get_zone_snow_chance), + luabind::def("get_zone_snow_chance", (int(*)(uint32,int))&lua_get_zone_snow_chance), + luabind::def("get_zone_snow_duration", (int(*)(uint32))&lua_get_zone_snow_duration), + luabind::def("get_zone_snow_duration", (int(*)(uint32,int))&lua_get_zone_snow_duration), + luabind::def("get_zone_gravity", (float(*)(uint32))&lua_get_zone_gravity), + luabind::def("get_zone_gravity", (float(*)(uint32,int))&lua_get_zone_gravity), + luabind::def("get_zone_type", (int(*)(uint32))&lua_get_zone_type), + luabind::def("get_zone_type", (int(*)(uint32,int))&lua_get_zone_type), + luabind::def("get_zone_sky_lock", (int(*)(uint32))&lua_get_zone_sky_lock), + luabind::def("get_zone_sky_lock", (int(*)(uint32,int))&lua_get_zone_sky_lock), + luabind::def("get_zone_fast_regen_hp", (int(*)(uint32))&lua_get_zone_fast_regen_hp), + luabind::def("get_zone_fast_regen_hp", (int(*)(uint32,int))&lua_get_zone_fast_regen_hp), + luabind::def("get_zone_fast_regen_mana", (int(*)(uint32))&lua_get_zone_fast_regen_mana), + luabind::def("get_zone_fast_regen_mana", (int(*)(uint32,int))&lua_get_zone_fast_regen_mana), + luabind::def("get_zone_fast_regen_endurance", (int(*)(uint32))&lua_get_zone_fast_regen_endurance), + luabind::def("get_zone_fast_regen_endurance", (int(*)(uint32,int))&lua_get_zone_fast_regen_endurance), + luabind::def("get_zone_npc_maximum_aggro_distance", (int(*)(uint32))&lua_get_zone_npc_maximum_aggro_distance), + luabind::def("get_zone_npc_maximum_aggro_distance", (int(*)(uint32,int))&lua_get_zone_npc_maximum_aggro_distance), + luabind::def("get_zone_npc_maximum_movement_update_range", (uint32(*)(uint32))&lua_get_zone_maximum_movement_update_range), + luabind::def("get_zone_npc_maximum_movement_update_range", (uint32(*)(uint32,int))&lua_get_zone_maximum_movement_update_range), + luabind::def("get_zone_minimum_expansion", (int8(*)(uint32))&lua_get_zone_minimum_expansion), + luabind::def("get_zone_minimum_expansion", (int8(*)(uint32,int))&lua_get_zone_minimum_expansion), + luabind::def("get_zone_maximum_expansion", (int8(*)(uint32))&lua_get_zone_maximum_expansion), + luabind::def("get_zone_maximum_expansion", (int8(*)(uint32,int))&lua_get_zone_maximum_expansion), + luabind::def("get_zone_content_flags", (std::string(*)(uint32))&lua_get_zone_content_flags), + luabind::def("get_zone_content_flags", (std::string(*)(uint32,int))&lua_get_zone_content_flags), + luabind::def("get_zone_content_flags_disabled", (std::string(*)(uint32))&lua_get_zone_content_flags_disabled), + luabind::def("get_zone_content_flags_disabled", (std::string(*)(uint32,int))&lua_get_zone_content_flags_disabled), + luabind::def("get_zone_underworld_teleport_index", (int(*)(uint32))&lua_get_zone_underworld_teleport_index), + luabind::def("get_zone_underworld_teleport_index", (int(*)(uint32,int))&lua_get_zone_underworld_teleport_index), + luabind::def("get_zone_lava_damage", (int(*)(uint32))&lua_get_zone_lava_damage), + luabind::def("get_zone_lava_damage", (int(*)(uint32,int))&lua_get_zone_lava_damage), + luabind::def("get_zone_minimum_lava_damage", (int(*)(uint32))&lua_get_zone_minimum_lava_damage), + luabind::def("get_zone_minimum_lava_damage", (int(*)(uint32,int))&lua_get_zone_minimum_lava_damage), + luabind::def("send_channel_message", (void(*)(uint8,uint32,uint8,uint8,const char*))&lua_send_channel_message), + luabind::def("send_channel_message", (void(*)(Lua_Client,uint8,uint32,uint8,uint8,const char*))&lua_send_channel_message), + luabind::def("send_channel_message", (void(*)(Lua_Client,const char*,uint8,uint32,uint8,uint8,const char*))&lua_send_channel_message), + luabind::def("get_spell_level", &lua_get_spell_level), + luabind::def("is_effect_in_spell", &lua_is_effect_in_spell), + luabind::def("is_beneficial_spell", &lua_is_beneficial_spell), + luabind::def("is_detrimental_spell", &lua_is_detrimental_spell), + luabind::def("is_targetable_ae_spell", &lua_is_targetable_ae_spell), + luabind::def("is_sacrifice_spell", &lua_is_sacrifice_spell), + luabind::def("is_lifetap_spell", &lua_is_lifetap_spell), + luabind::def("is_mesmerize_spell", &lua_is_mesmerize_spell), + luabind::def("is_stun_spell", &lua_is_stun_spell), + luabind::def("is_summon_spell", &lua_is_summon_spell), + luabind::def("is_damage_spell", &lua_is_damage_spell), + luabind::def("is_fear_spell", &lua_is_fear_spell), + luabind::def("is_cure_spell", &lua_is_cure_spell), + luabind::def("is_haste_spell", &lua_is_haste_spell), + luabind::def("is_harmony_spell", &lua_is_harmony_spell), + luabind::def("is_percental_heal_spell", &lua_is_percental_heal_spell), + luabind::def("is_group_only_spell", &lua_is_group_only_spell), + luabind::def("is_invisible_spell", &lua_is_invisible_spell), + luabind::def("is_invulnerability_spell", &lua_is_invulnerability_spell), + luabind::def("is_complete_heal_duration_spell", &lua_is_complete_heal_duration_spell), + luabind::def("is_poison_counter_spell", &lua_is_poison_counter_spell), + luabind::def("is_disease_counter_spell", &lua_is_disease_counter_spell), + luabind::def("is_summon_item_spell", &lua_is_summon_item_spell), + luabind::def("is_summon_skeleton_spell", &lua_is_summon_skeleton_spell), + luabind::def("is_summon_pet_spell", &lua_is_summon_pet_spell), + luabind::def("is_pet_spell", &lua_is_pet_spell), + luabind::def("is_summon_pc_spell", &lua_is_summon_pc_spell), + luabind::def("is_charm_spell", &lua_is_charm_spell), + luabind::def("is_blind_spell", &lua_is_blind_spell), + luabind::def("is_health_spell", &lua_is_health_spell), + luabind::def("is_cast_time_reduction_spell", &lua_is_cast_time_reduction_spell), + luabind::def("is_increase_duration_spell", &lua_is_increase_duration_spell), + luabind::def("is_mana_cost_reduction_spell", &lua_is_mana_cost_reduction_spell), + luabind::def("is_increase_range_spell", &lua_is_increase_range_spell), + luabind::def("is_improved_healing_spell", &lua_is_improved_healing_spell), + luabind::def("is_improved_damage_spell", &lua_is_improved_damage_spell), + luabind::def("is_ae_duration_spell", &lua_is_ae_duration_spell), + luabind::def("is_pure_nuke_spell", &lua_is_pure_nuke_spell), + luabind::def("is_ae_nuke_spell", &lua_is_ae_nuke_spell), + luabind::def("is_pbae_nuke_spell", &lua_is_pbae_nuke_spell), + luabind::def("is_ae_rain_nuke_spell", &lua_is_ae_rain_nuke_spell), + luabind::def("is_partial_resistable_spell", &lua_is_partial_resistable_spell), + luabind::def("is_resistable_spell", &lua_is_resistable_spell), + luabind::def("is_group_spell", &lua_is_group_spell), + luabind::def("is_tgb_compatible_spell", &lua_is_tgb_compatible_spell), + luabind::def("is_bard_song", &lua_is_bard_song), + luabind::def("is_pulsing_bard_song", &lua_is_pulsing_bard_song), + luabind::def("is_discipline_buff", &lua_is_discipline_buff), + luabind::def("is_discipline", &lua_is_discipline), + luabind::def("is_combat_skill", &lua_is_combat_skill), + luabind::def("is_resurrection_effects", &lua_is_resurrection_effects), + luabind::def("is_rune_spell", &lua_is_rune_spell), + luabind::def("is_magic_rune_spell", &lua_is_magic_rune_spell), + luabind::def("is_mana_tap_spell", &lua_is_mana_tap_spell), + luabind::def("is_alliance_spell", &lua_is_alliance_spell), + luabind::def("is_death_save_spell", &lua_is_death_save_spell), + luabind::def("is_partial_death_save_spell", &lua_is_partial_death_save_spell), + luabind::def("is_full_death_save_spell", &lua_is_full_death_save_spell), + luabind::def("is_shadow_step_spell", &lua_is_shadow_step_spell), + luabind::def("is_succor_spell", &lua_is_succor_spell), + luabind::def("is_teleport_spell", &lua_is_teleport_spell), + luabind::def("is_translocate_spell", &lua_is_translocate_spell), + luabind::def("is_gate_spell", &lua_is_gate_spell), + luabind::def("is_illusion_spell", &lua_is_illusion_spell), + luabind::def("is_ldon_object_spell", &lua_is_ldon_object_spell), + luabind::def("is_heal_over_time_spell", &lua_is_heal_over_time_spell), + luabind::def("is_complete_heal_spell", &lua_is_complete_heal_spell), + luabind::def("is_fast_heal_spell", &lua_is_fast_heal_spell), + luabind::def("is_very_fast_heal_spell", &lua_is_very_fast_heal_spell), + luabind::def("is_regular_single_target_heal_spell", &lua_is_regular_single_target_heal_spell), + luabind::def("is_regular_group_heal_spell", &lua_is_regular_group_heal_spell), + luabind::def("is_group_complete_heal_spell", &lua_is_group_complete_heal_spell), + luabind::def("is_group_heal_over_time_spell", &lua_is_group_heal_over_time_spell), + luabind::def("is_debuff_spell", &lua_is_debuff_spell), + luabind::def("is_resist_debuff_spell", &lua_is_resist_debuff_spell), + luabind::def("is_self_conversion_spell", &lua_is_self_conversion_spell), + luabind::def("is_buff_spell", &lua_is_buff_spell), + luabind::def("is_persist_death_spell", &lua_is_persist_death_spell), + luabind::def("is_suspendable_spell", &lua_is_suspendable_spell), + luabind::def("is_cast_on_fade_duration_spell", &lua_is_cast_on_fade_duration_spell), + luabind::def("is_distance_modifier_spell", &lua_is_distance_modifier_spell), + luabind::def("is_rest_allowed_spell", &lua_is_rest_allowed_spell), + luabind::def("is_no_detrimental_spell_aggro_spell", &lua_is_no_detrimental_spell_aggro_spell), + luabind::def("is_stackable_dot", &lua_is_stackable_dot), + luabind::def("is_short_duration_buff", &lua_is_short_duration_buff), + luabind::def("is_target_required_for_spell", &lua_is_target_required_for_spell), + luabind::def("is_virus_spell", &lua_is_virus_spell), + luabind::def("is_valid_spell", &lua_is_valid_spell), + luabind::def("is_effect_ignored_in_stacking", &lua_is_effect_ignored_in_stacking), + luabind::def("is_focus_limit", &lua_is_focus_limit), + luabind::def("is_bard_only_stack_effect", &lua_is_bard_only_stack_effect), + luabind::def("is_cast_while_invisible_spell", &lua_is_cast_while_invisible_spell), + luabind::def("is_cast_restricted_spell", &lua_is_cast_restricted_spell), + luabind::def("is_cast_not_standing_spell", &lua_is_cast_not_standing_spell), + luabind::def("is_instrument_modifier_applied_to_spell_effect", &lua_is_instrument_modifier_applied_to_spell_effect), + luabind::def("is_blank_spell_effect", &lua_is_blank_spell_effect), + luabind::def("get_spell_trigger_spell_id", &lua_get_spell_trigger_spell_id), + luabind::def("get_spell_minimum_level", &lua_get_spell_minimum_level), + luabind::def("get_spell_resist_type", &lua_get_spell_resist_type), + luabind::def("get_spell_target_type", &lua_get_spell_target_type), + luabind::def("get_spell_partial_melee_rune_reduction", &lua_get_spell_partial_melee_rune_reduction), + luabind::def("get_spell_partial_magic_rune_reduction", &lua_get_spell_partial_magic_rune_reduction), + luabind::def("get_spell_partial_melee_rune_amount", &lua_get_spell_partial_melee_rune_amount), + luabind::def("get_spell_partial_magic_rune_amount", &lua_get_spell_partial_magic_rune_amount), + luabind::def("get_spell_viral_minimum_spread_time", &lua_get_spell_viral_minimum_spread_time), + luabind::def("get_spell_viral_maximum_spread_time", &lua_get_spell_viral_maximum_spread_time), + luabind::def("get_spell_viral_spread_range", &lua_get_spell_viral_spread_range), + luabind::def("get_spell_proc_limit_timer", &lua_get_spell_proc_limit_timer), + luabind::def("get_spell_effect_description_number", &lua_get_spell_effect_description_number), + luabind::def("get_spell_furious_bash", &lua_get_spell_furious_bash), + luabind::def("is_spell_usable_in_this_zone_type", (bool(*)(uint16))&lua_is_spell_usable_in_this_zone_type), + luabind::def("is_spell_usable_in_this_zone_type", (bool(*)(uint16,uint8))&lua_is_spell_usable_in_this_zone_type), + luabind::def("get_spell_effect_index", &lua_get_spell_effect_index), + luabind::def("calculate_poison_counters", &lua_calculate_poison_counters), + luabind::def("calculate_disease_counters", &lua_calculate_disease_counters), + luabind::def("calculate_curse_counters", &lua_calculate_curse_counters), + luabind::def("calculate_corruption_counters", &lua_calculate_corruption_counters), + luabind::def("calculate_counters", &lua_calculate_counters), + luabind::def("get_spell_resurrection_sickness_check", &lua_get_spell_resurrection_sickness_check), + luabind::def("get_spell_nimbus_effect", &lua_get_spell_nimbus_effect), + luabind::def("convert_money_to_string", &lua_convert_money_to_string), /* Cross Zone */ @@ -4523,6 +6000,12 @@ luabind::scope lua_register_general() { luabind::def("world_wide_move_instance", (void(*)(uint16))&lua_world_wide_move_instance), luabind::def("world_wide_move_instance", (void(*)(uint16,uint8))&lua_world_wide_move_instance), luabind::def("world_wide_move_instance", (void(*)(uint16,uint8,uint8))&lua_world_wide_move_instance), + luabind::def("world_wide_remove_ldon_loss", (void(*)(uint32))&lua_world_wide_remove_ldon_loss), + luabind::def("world_wide_remove_ldon_loss", (void(*)(uint32,uint8))&lua_world_wide_remove_ldon_loss), + luabind::def("world_wide_remove_ldon_loss", (void(*)(uint32,uint8,uint8))&lua_world_wide_remove_ldon_loss), + luabind::def("world_wide_remove_ldon_win", (void(*)(uint32))&lua_world_wide_remove_ldon_win), + luabind::def("world_wide_remove_ldon_win", (void(*)(uint32,uint8))&lua_world_wide_remove_ldon_win), + luabind::def("world_wide_remove_ldon_win", (void(*)(uint32,uint8,uint8))&lua_world_wide_remove_ldon_win), luabind::def("world_wide_remove_spell", (void(*)(uint32))&lua_world_wide_remove_spell), luabind::def("world_wide_remove_spell", (void(*)(uint32,uint8))&lua_world_wide_remove_spell), luabind::def("world_wide_remove_spell", (void(*)(uint32,uint8,uint8))&lua_world_wide_remove_spell), @@ -4754,7 +6237,11 @@ luabind::scope lua_register_events() { luabind::value("item_click_client", static_cast(EVENT_ITEM_CLICK_CLIENT)), luabind::value("item_click_cast_client", static_cast(EVENT_ITEM_CLICK_CAST_CLIENT)), luabind::value("destroy_item_client", static_cast(EVENT_DESTROY_ITEM_CLIENT)), - luabind::value("drop_item_client", static_cast(EVENT_DROP_ITEM_CLIENT)) + luabind::value("drop_item_client", static_cast(EVENT_DROP_ITEM_CLIENT)), + luabind::value("memorize_spell", static_cast(EVENT_MEMORIZE_SPELL)), + luabind::value("unmemorize_spell", static_cast(EVENT_UNMEMORIZE_SPELL)), + luabind::value("scribe_spell", static_cast(EVENT_SCRIBE_SPELL)), + luabind::value("unscribe_spell", static_cast(EVENT_UNSCRIBE_SPELL)) )]; } diff --git a/zone/lua_group.cpp b/zone/lua_group.cpp index 4a3907960..387344571 100644 --- a/zone/lua_group.cpp +++ b/zone/lua_group.cpp @@ -2,14 +2,12 @@ #include "../common/data_verification.h" -#include "lua.hpp" #include #include #include "groups.h" #include "masterentity.h" #include "lua_group.h" -#include "lua_entity.h" #include "lua_mob.h" #include "lua_client.h" #include "lua_npc.h" diff --git a/zone/lua_item.cpp b/zone/lua_item.cpp index 57ae9083b..ac4f8a871 100644 --- a/zone/lua_item.cpp +++ b/zone/lua_item.cpp @@ -1,6 +1,5 @@ #ifdef LUA_EQEMU -#include "lua.hpp" #include #include "masterentity.h" diff --git a/zone/lua_iteminst.cpp b/zone/lua_iteminst.cpp index 180856f66..105e634b9 100644 --- a/zone/lua_iteminst.cpp +++ b/zone/lua_iteminst.cpp @@ -1,6 +1,5 @@ #ifdef LUA_EQEMU -#include "lua.hpp" #include #include @@ -18,6 +17,13 @@ Lua_ItemInst::Lua_ItemInst(int item_id, int charges) { cloned_ = true; } +Lua_ItemInst::~Lua_ItemInst() { + if (cloned_) { + EQ::ItemInstance *ptr = GetLuaPtrData(); + delete ptr; + } +} + Lua_ItemInst& Lua_ItemInst::operator=(const Lua_ItemInst& o) { if(o.cloned_) { cloned_ = true; diff --git a/zone/lua_iteminst.h b/zone/lua_iteminst.h index ea8e98e37..bf5bd1853 100644 --- a/zone/lua_iteminst.h +++ b/zone/lua_iteminst.h @@ -4,6 +4,7 @@ #include "lua_ptr.h" +// Forward declaration class Lua_Item; namespace EQ @@ -28,7 +29,7 @@ public: Lua_ItemInst(EQ::ItemInstance *d, bool cloned) : Lua_Ptr(d), cloned_(cloned) { } Lua_ItemInst& operator=(const Lua_ItemInst& o); Lua_ItemInst(const Lua_ItemInst& o); - virtual ~Lua_ItemInst() { if(cloned_) { EQ::ItemInstance *ptr = GetLuaPtrData(); if(ptr) { delete ptr; } } } + virtual ~Lua_ItemInst(); operator EQ::ItemInstance*() { return reinterpret_cast(GetLuaPtrData()); diff --git a/zone/lua_mob.cpp b/zone/lua_mob.cpp index 869c2e2dd..121948e89 100644 --- a/zone/lua_mob.cpp +++ b/zone/lua_mob.cpp @@ -2170,14 +2170,14 @@ bool Lua_Mob::IsTargetable() { return self->IsTargetable(); } -bool Lua_Mob::HasShieldEquiped() { +bool Lua_Mob::HasShieldEquipped() { Lua_Safe_Call_Bool(); - return self->HasShieldEquiped(); + return self->HasShieldEquipped(); } -bool Lua_Mob::HasTwoHandBluntEquiped() { +bool Lua_Mob::HasTwoHandBluntEquipped() { Lua_Safe_Call_Bool(); - return self->HasTwoHandBluntEquiped(); + return self->HasTwoHandBluntEquipped(); } bool Lua_Mob::HasTwoHanderEquipped() { @@ -2376,6 +2376,41 @@ Lua_Mob Lua_Mob::GetHateClosest() { return Lua_Mob(self->GetHateClosest()); } +Lua_Mob Lua_Mob::GetHateClosest(bool skip_mezzed) { + Lua_Safe_Call_Class(Lua_Mob); + return Lua_Mob(self->GetHateClosest(skip_mezzed)); +} + +Lua_Bot Lua_Mob::GetHateClosestBot() { + Lua_Safe_Call_Class(Lua_Bot); + return Lua_Bot(self->GetHateClosestBot()); +} + +Lua_Bot Lua_Mob::GetHateClosestBot(bool skip_mezzed) { + Lua_Safe_Call_Class(Lua_Bot); + return Lua_Bot(self->GetHateClosestBot()); +} + +Lua_Client Lua_Mob::GetHateClosestClient() { + Lua_Safe_Call_Class(Lua_Client); + return Lua_Client(self->GetHateClosestClient()); +} + +Lua_Client Lua_Mob::GetHateClosestClient(bool skip_mezzed) { + Lua_Safe_Call_Class(Lua_Client); + return Lua_Client(self->GetHateClosestClient(skip_mezzed)); +} + +Lua_NPC Lua_Mob::GetHateClosestNPC() { + Lua_Safe_Call_Class(Lua_NPC); + return Lua_NPC(self->GetHateClosestNPC()); +} + +Lua_NPC Lua_Mob::GetHateClosestNPC(bool skip_mezzed) { + Lua_Safe_Call_Class(Lua_NPC); + return Lua_NPC(self->GetHateClosestNPC(skip_mezzed)); +} + Lua_HateList Lua_Mob::GetHateListByDistance() { Lua_Safe_Call_Class(Lua_HateList); Lua_HateList ret; @@ -2709,7 +2744,7 @@ luabind::object Lua_Mob::GetEntityVariables(lua_State* L) { if (d_) { auto self = reinterpret_cast(d_); auto l = self->GetEntityVariables(); - auto i = 0; + auto i = 1; for (const auto& v : l) { t[i] = v; i++; @@ -2875,6 +2910,16 @@ float Lua_Mob::GetDefaultRaceSize() { return self->GetDefaultRaceSize(); } +float Lua_Mob::GetDefaultRaceSize(int race_id) { + Lua_Safe_Call_Real(); + return self->GetDefaultRaceSize(race_id); +} + +float Lua_Mob::GetDefaultRaceSize(int race_id, int gender_id) { + Lua_Safe_Call_Real(); + return self->GetDefaultRaceSize(race_id, gender_id); +} + float Lua_Mob::GetActSpellRange(uint16 spell_id, float range) { Lua_Safe_Call_Real(); return self->GetActSpellRange(spell_id, range); @@ -2985,6 +3030,26 @@ void Lua_Mob::StopTimer(const char* timer_name) { quest_manager.stoptimer(timer_name, self); } +luabind::object Lua_Mob::GetBuffSpellIDs(lua_State* L) { + auto t = luabind::newtable(L); + if (d_) { + auto self = reinterpret_cast(d_); + auto l = self->GetBuffSpellIDs(); + auto i = 1; + for (const auto& v : l) { + t[i] = v; + i++; + } + } + + return t; +} + +bool Lua_Mob::HasSpellEffect(int effect_id) { + Lua_Safe_Call_Bool(); + return self->HasSpellEffect(effect_id); +} + luabind::scope lua_register_mob() { return luabind::class_("Mob") .def(luabind::constructor<>()) @@ -3184,6 +3249,7 @@ luabind::scope lua_register_mob() { .def("GetBucketKey", (std::string(Lua_Mob::*)(void))&Lua_Mob::GetBucketKey) .def("GetBucketRemaining", (std::string(Lua_Mob::*)(std::string))&Lua_Mob::GetBucketRemaining) .def("GetBuffSlotFromType", &Lua_Mob::GetBuffSlotFromType) + .def("GetBuffSpellIDs", &Lua_Mob::GetBuffSpellIDs) .def("GetBuffStatValueBySlot", (void(Lua_Mob::*)(uint8, const char*))& Lua_Mob::GetBuffStatValueBySlot) .def("GetBuffStatValueBySpell", (void(Lua_Mob::*)(int, const char*))&Lua_Mob::GetBuffStatValueBySpell) .def("GetCHA", &Lua_Mob::GetCHA) @@ -3196,7 +3262,9 @@ luabind::scope lua_register_mob() { .def("GetDEX", &Lua_Mob::GetDEX) .def("GetDR", &Lua_Mob::GetDR) .def("GetDamageAmount", (uint32(Lua_Mob::*)(Lua_Mob))&Lua_Mob::GetDamageAmount) - .def("GetDefaultRaceSize", &Lua_Mob::GetDefaultRaceSize) + .def("GetDefaultRaceSize", (float(Lua_Mob::*)(void))&Lua_Mob::GetDefaultRaceSize) + .def("GetDefaultRaceSize", (float(Lua_Mob::*)(int))&Lua_Mob::GetDefaultRaceSize) + .def("GetDefaultRaceSize", (float(Lua_Mob::*)(int,int))&Lua_Mob::GetDefaultRaceSize) .def("GetDeity", &Lua_Mob::GetDeity) .def("GetDisplayAC", &Lua_Mob::GetDisplayAC) .def("GetDrakkinDetails", &Lua_Mob::GetDrakkinDetails) @@ -3220,7 +3288,14 @@ luabind::scope lua_register_mob() { .def("GetHaste", (int(Lua_Mob::*)(void))&Lua_Mob::GetHaste) .def("GetHateAmount", (int64(Lua_Mob::*)(Lua_Mob))&Lua_Mob::GetHateAmount) .def("GetHateAmount", (int64(Lua_Mob::*)(Lua_Mob,bool))&Lua_Mob::GetHateAmount) - .def("GetHateClosest", &Lua_Mob::GetHateClosest) + .def("GetHateClosest", (Lua_Mob(Lua_Mob::*)(void))&Lua_Mob::GetHateClosest) + .def("GetHateClosest", (Lua_Mob(Lua_Mob::*)(bool))&Lua_Mob::GetHateClosest) + .def("GetHateClosestBot", (Lua_Bot(Lua_Mob::*)(void))&Lua_Mob::GetHateClosestBot) + .def("GetHateClosestBot", (Lua_Bot(Lua_Mob::*)(bool))&Lua_Mob::GetHateClosestBot) + .def("GetHateClosestClient", (Lua_Client(Lua_Mob::*)(void))&Lua_Mob::GetHateClosestClient) + .def("GetHateClosestClient", (Lua_Client(Lua_Mob::*)(bool))&Lua_Mob::GetHateClosestClient) + .def("GetHateClosestNPC", (Lua_NPC(Lua_Mob::*)(void))&Lua_Mob::GetHateClosestNPC) + .def("GetHateClosestNPC", (Lua_NPC(Lua_Mob::*)(bool))&Lua_Mob::GetHateClosestNPC) .def("GetHateDamageTop", (Lua_Mob(Lua_Mob::*)(Lua_Mob))&Lua_Mob::GetHateDamageTop) .def("GetHateList", &Lua_Mob::GetHateList) .def("GetHateListBots", (Lua_HateList(Lua_Mob::*)(void))&Lua_Mob::GetHateListBots) @@ -3321,9 +3396,10 @@ luabind::scope lua_register_mob() { .def("HasOwner", (bool(Lua_Mob::*)(void))&Lua_Mob::HasOwner) .def("HasPet", (bool(Lua_Mob::*)(void))&Lua_Mob::HasPet) .def("HasProcs", &Lua_Mob::HasProcs) - .def("HasShieldEquiped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasShieldEquiped) + .def("HasShieldEquipped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasShieldEquipped) + .def("HasSpellEffect", &Lua_Mob::HasSpellEffect) .def("HasTimer", &Lua_Mob::HasTimer) - .def("HasTwoHandBluntEquiped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasTwoHandBluntEquiped) + .def("HasTwoHandBluntEquipped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasTwoHandBluntEquipped) .def("HasTwoHanderEquipped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasTwoHanderEquipped) .def("Heal", &Lua_Mob::Heal) .def("HealDamage", (void(Lua_Mob::*)(uint64))&Lua_Mob::HealDamage) diff --git a/zone/lua_mob.h b/zone/lua_mob.h index 832bc2ca2..954717869 100644 --- a/zone/lua_mob.h +++ b/zone/lua_mob.h @@ -227,6 +227,13 @@ public: Lua_Client GetHateRandomClient(); Lua_NPC GetHateRandomNPC(); Lua_Mob GetHateClosest(); + Lua_Mob GetHateClosest(bool skip_mezzed); + Lua_Bot GetHateClosestBot(); + Lua_Bot GetHateClosestBot(bool skip_mezzed); + Lua_Client GetHateClosestClient(); + Lua_Client GetHateClosestClient(bool skip_mezzed); + Lua_NPC GetHateClosestNPC(); + Lua_NPC GetHateClosestNPC(bool skip_mezzed); void AddToHateList(Lua_Mob other); void AddToHateList(Lua_Mob other, int64 hate); void AddToHateList(Lua_Mob other, int64 hate, int64 damage); @@ -431,8 +438,8 @@ public: uint8 GetNimbusEffect2(); uint8 GetNimbusEffect3(); bool IsTargetable(); - bool HasShieldEquiped(); - bool HasTwoHandBluntEquiped(); + bool HasShieldEquipped(); + bool HasTwoHandBluntEquipped(); bool HasTwoHanderEquipped(); uint32 GetHerosForgeModel(uint8 material_slot); uint32 IsEliteMaterialItem(uint8 material_slot); @@ -516,6 +523,8 @@ public: bool IsFindable(); bool IsTrackable(); float GetDefaultRaceSize(); + float GetDefaultRaceSize(int race_id); + float GetDefaultRaceSize(int race_id, int gender_id); int64 GetActDoTDamage(uint16 spell_id, int64 value, Lua_Mob target); int64 GetActDoTDamage(uint16 spell_id, int64 value, Lua_Mob target, bool from_buff_tic); int64 GetActReflectedSpellDamage(uint16 spell_id, int64 value, int effectiveness); @@ -538,6 +547,8 @@ public: void SetTimerMS(const char* timer_name, int milliseconds); void StopAllTimers(); void StopTimer(const char* timer_name); + luabind::object GetBuffSpellIDs(lua_State* L); + bool HasSpellEffect(int effect_id); }; #endif diff --git a/zone/lua_mod.cpp b/zone/lua_mod.cpp index 147a3a046..55d04e4f3 100644 --- a/zone/lua_mod.cpp +++ b/zone/lua_mod.cpp @@ -6,14 +6,10 @@ #include "../common/spdat.h" #include "masterentity.h" -#include "questmgr.h" #include "zone.h" -#include "zone_config.h" #include "lua_parser.h" #include "lua_mod.h" -#include "lua_bit.h" -#include "lua_entity.h" #include "lua_item.h" #include "lua_iteminst.h" #include "lua_mob.h" @@ -21,17 +17,12 @@ #include "lua_client.h" #include "lua_inventory.h" #include "lua_npc.h" -#include "lua_spell.h" -#include "lua_entity_list.h" #include "lua_group.h" #include "lua_raid.h" #include "lua_corpse.h" #include "lua_object.h" #include "lua_door.h" -#include "lua_spawn.h" #include "lua_packet.h" -#include "lua_general.h" -#include "lua_encounter.h" #include "lua_stat_bonuses.h" void LuaMod::Init() diff --git a/zone/lua_object.cpp b/zone/lua_object.cpp index d5870a800..6ebae11f3 100644 --- a/zone/lua_object.cpp +++ b/zone/lua_object.cpp @@ -173,7 +173,7 @@ luabind::object Lua_Object::GetEntityVariables(lua_State* L) { if (d_) { auto self = reinterpret_cast(d_); auto l = self->GetEntityVariables(); - auto i = 0; + auto i = 1; for (const auto& v : l) { t[i] = v; i++; diff --git a/zone/lua_packet.cpp b/zone/lua_packet.cpp index 1ebb3489e..46e3d0190 100644 --- a/zone/lua_packet.cpp +++ b/zone/lua_packet.cpp @@ -1,6 +1,5 @@ #ifdef LUA_EQEMU -#include "lua.hpp" #include #include diff --git a/zone/lua_parser.cpp b/zone/lua_parser.cpp index 97b29b1b0..bcb8cf0e7 100644 --- a/zone/lua_parser.cpp +++ b/zone/lua_parser.cpp @@ -39,7 +39,6 @@ #include "lua_general.h" #include "lua_encounter.h" #include "lua_stat_bonuses.h" -#include "../common/path_manager.h" #include "lua_bot.h" @@ -165,7 +164,11 @@ const char *LuaEvents[_LargestEventID] = { "event_item_click_client", "event_item_click_cast_client", "event_destroy_item_client", - "event_drop_item_client" + "event_drop_item_client", + "event_memorize_spell", + "event_unmemorize_spell", + "event_scribe_spell", + "event_unscribe_spell" }; extern Zone *zone; @@ -293,6 +296,10 @@ LuaParser::LuaParser() { PlayerArgumentDispatch[EVENT_DESTROY_ITEM_CLIENT] = handle_player_destroy_item; PlayerArgumentDispatch[EVENT_TARGET_CHANGE] = handle_player_target_change; PlayerArgumentDispatch[EVENT_DROP_ITEM_CLIENT] = handle_player_drop_item; + PlayerArgumentDispatch[EVENT_MEMORIZE_SPELL] = handle_player_memorize_scribe_spell; + PlayerArgumentDispatch[EVENT_UNMEMORIZE_SPELL] = handle_player_memorize_scribe_spell; + PlayerArgumentDispatch[EVENT_SCRIBE_SPELL] = handle_player_memorize_scribe_spell; + PlayerArgumentDispatch[EVENT_UNSCRIBE_SPELL] = handle_player_memorize_scribe_spell; ItemArgumentDispatch[EVENT_ITEM_CLICK] = handle_item_click; ItemArgumentDispatch[EVENT_ITEM_CLICK_CAST] = handle_item_click; diff --git a/zone/lua_parser_events.cpp b/zone/lua_parser_events.cpp index 88b45ff95..9954f4aff 100644 --- a/zone/lua_parser_events.cpp +++ b/zone/lua_parser_events.cpp @@ -9,11 +9,8 @@ #include "quest_interface.h" #include "masterentity.h" -#include "../common/seperator.h" -#include "../common/misc_functions.h" #include "lua_item.h" #include "lua_iteminst.h" -#include "lua_entity.h" #include "lua_mob.h" #include "lua_client.h" #include "lua_npc.h" @@ -1414,6 +1411,35 @@ void handle_player_target_change( } } +void handle_player_memorize_scribe_spell( + QuestInterface *parse, + lua_State* L, + Client* client, + std::string data, + uint32 extra_data, + std::vector *extra_pointers +) { + Seperator sep(data.c_str()); + + lua_pushnumber(L, Strings::ToUnsignedInt(sep.arg[0])); + lua_setfield(L, -2, "slot_id"); + + lua_pushnumber(L, Strings::ToUnsignedInt(sep.arg[1])); + lua_setfield(L, -2, "spell_id"); + + if (IsValidSpell(Strings::ToUnsignedInt(sep.arg[1]))) { + Lua_Spell l_spell(&spells[Strings::ToUnsignedInt(sep.arg[1])]); + luabind::adl::object l_spell_o = luabind::adl::object(L, l_spell); + l_spell_o.push(L); + lua_setfield(L, -2, "spell"); + } else { + Lua_Spell l_spell(nullptr); + luabind::adl::object l_spell_o = luabind::adl::object(L, l_spell); + l_spell_o.push(L); + lua_setfield(L, -2, "spell"); + } +} + // Item void handle_item_click( QuestInterface *parse, diff --git a/zone/lua_parser_events.h b/zone/lua_parser_events.h index a85dbffe5..b48fa2f03 100644 --- a/zone/lua_parser_events.h +++ b/zone/lua_parser_events.h @@ -734,6 +734,15 @@ void handle_player_drop_item( std::vector *extra_pointers ); +void handle_player_memorize_scribe_spell( + QuestInterface *parse, + lua_State* L, + Client* client, + std::string data, + uint32 extra_data, + std::vector *extra_pointers +); + // Item void handle_item_click( QuestInterface *parse, diff --git a/zone/lua_raid.cpp b/zone/lua_raid.cpp index 6cb6cdf7d..fee67c967 100644 --- a/zone/lua_raid.cpp +++ b/zone/lua_raid.cpp @@ -2,13 +2,11 @@ #include "../common/data_verification.h" -#include "lua.hpp" #include #include #include "masterentity.h" #include "lua_raid.h" -#include "lua_entity.h" #include "lua_mob.h" #include "lua_client.h" #include "lua_npc.h" diff --git a/zone/lua_spawn.cpp b/zone/lua_spawn.cpp index 117b4a6b4..d5d712757 100644 --- a/zone/lua_spawn.cpp +++ b/zone/lua_spawn.cpp @@ -1,6 +1,5 @@ #ifdef LUA_EQEMU -#include "lua.hpp" #include #include "spawn2.h" diff --git a/zone/lua_spell.cpp b/zone/lua_spell.cpp index c2a5e622d..6789cfd80 100644 --- a/zone/lua_spell.cpp +++ b/zone/lua_spell.cpp @@ -1,6 +1,5 @@ #ifdef LUA_EQEMU -#include "lua.hpp" #include #include "../common/spdat.h" diff --git a/zone/lua_stat_bonuses.cpp b/zone/lua_stat_bonuses.cpp index 8f50f7992..d5bd43094 100644 --- a/zone/lua_stat_bonuses.cpp +++ b/zone/lua_stat_bonuses.cpp @@ -2,7 +2,6 @@ #include "../common/data_verification.h" -#include "lua.hpp" #include #include "lua_stat_bonuses.h" diff --git a/zone/main.cpp b/zone/main.cpp index 083c2ff07..8d1e1d480 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -47,7 +47,6 @@ #include "command.h" #include "bot_command.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "titles.h" #include "guild_mgr.h" #include "task_manager.h" @@ -58,11 +57,8 @@ #include "npc_scale_manager.h" #include "../common/net/eqstream.h" -#include "../common/content/world_content_service.h" -#include #include -#include #include #ifdef _CRTDBG_MAP_ALLOC @@ -71,8 +67,6 @@ #endif #ifdef _WINDOWS -#include -#include #else #include #include "../common/unix.h" @@ -88,8 +82,9 @@ extern volatile bool is_zone_loaded; #include "zone_event_scheduler.h" #include "../common/file.h" -#include "../common/path_manager.h" #include "../common/events/player_event_logs.h" +#include "../common/path_manager.h" +#include "../common/database/database_update.h" EntityList entity_list; WorldServer worldserver; @@ -109,6 +104,7 @@ ZoneEventScheduler event_scheduler; WorldContentService content_service; PathManager path; PlayerEventLogs player_event_logs; +DatabaseUpdate database_update; const SPDat_Spell_Struct* spells; int32 SPDAT_RECORDS = -1; @@ -172,7 +168,7 @@ int main(int argc, char** argv) { if (zone_port.size() > 1) { std::string p_name = zone_port[1]; - Config->SetZonePort(Strings::ToInt(p_name.c_str())); + Config->SetZonePort(Strings::ToInt(p_name)); } worldserver.SetLaunchedName(z_name.c_str()); @@ -193,7 +189,7 @@ int main(int argc, char** argv) { if (zone_port.size() > 1) { std::string p_name = zone_port[1]; - Config->SetZonePort(Strings::ToInt(p_name.c_str())); + Config->SetZonePort(Strings::ToInt(p_name)); } worldserver.SetLaunchedName(z_name.c_str()); @@ -214,7 +210,7 @@ int main(int argc, char** argv) { if (zone_port.size() > 1) { std::string p_name = zone_port[1]; - Config->SetZonePort(Strings::ToInt(p_name.c_str())); + Config->SetZonePort(Strings::ToInt(p_name)); } worldserver.SetLaunchedName(z_name.c_str()); @@ -266,6 +262,24 @@ int main(int argc, char** argv) { content_db.SetMutex(mutex); } + //rules: + { + std::string tmp; + if (database.GetVariable("RuleSet", tmp)) { + LogInfo("Loading rule set [{}]", tmp.c_str()); + if (!RuleManager::Instance()->LoadRules(&database, tmp.c_str(), false)) { + LogError("Failed to load ruleset [{}], falling back to defaults", tmp.c_str()); + } + } + else { + if (!RuleManager::Instance()->LoadRules(&database, "default", false)) { + LogInfo("No rule set configured, using default rules"); + } + } + + EQ::InitializeDynamicLookups(); + } + /* Register Log System and Settings */ LogSys.SetDatabase(&database) ->SetLogPath(path.GetLogPath()) @@ -275,6 +289,16 @@ int main(int argc, char** argv) { player_event_logs.SetDatabase(&database)->Init(); + const auto c = EQEmuConfig::get(); + if (c->auto_database_updates) { + if (database_update.SetDatabase(&database)->HasPendingUpdates()) { + LogWarning("Database is not up to date [world] needs to be ran to apply updates, shutting down in 5 seconds"); + std::this_thread::sleep_for(std::chrono::milliseconds(5000)); + LogInfo("Exiting due to pending database updates"); + std::exit(0); + } + } + /* Guilds */ guild_mgr.SetDatabase(&database); GuildBanks = nullptr; @@ -375,24 +399,6 @@ int main(int argc, char** argv) { LogInfo("Loaded [{}] commands loaded", Strings::Commify(std::to_string(retval))); } - //rules: - { - std::string tmp; - if (database.GetVariable("RuleSet", tmp)) { - LogInfo("Loading rule set [{}]", tmp.c_str()); - if (!RuleManager::Instance()->LoadRules(&database, tmp.c_str(), false)) { - LogError("Failed to load ruleset [{}], falling back to defaults", tmp.c_str()); - } - } - else { - if (!RuleManager::Instance()->LoadRules(&database, "default", false)) { - LogInfo("No rule set configured, using default rules"); - } - } - - EQ::InitializeDynamicLookups(); - } - content_service.SetDatabase(&database) ->SetExpansionContext() ->ReloadContentFlags(); diff --git a/zone/map.cpp b/zone/map.cpp index c92710fa8..cda7d1ca1 100644 --- a/zone/map.cpp +++ b/zone/map.cpp @@ -6,7 +6,6 @@ #include "raycast_mesh.h" #include "zone.h" #include "../common/file.h" -#include "../common/path_manager.h" #include #include diff --git a/zone/merc.cpp b/zone/merc.cpp index e6634d8e6..55b4e9e1a 100644 --- a/zone/merc.cpp +++ b/zone/merc.cpp @@ -6,18 +6,9 @@ #include "groups.h" #include "mob.h" -#include "../common/eqemu_logsys.h" -#include "../common/eq_packet_structs.h" -#include "../common/eq_constants.h" -#include "../common/skills.h" -#include "../common/spdat.h" - #include "zone.h" #include "string_ids.h" -#include "../common/strings.h" -#include "../common/rulesys.h" - extern volatile bool is_zone_loaded; #if EQDEBUG >= 12 @@ -779,7 +770,7 @@ void Merc::CalcRestState() { for (unsigned int j = 0; j < buff_count; j++) { if(IsValidSpell(buffs[j].spellid)) { if(IsDetrimentalSpell(buffs[j].spellid) && (buffs[j].ticsremaining > 0)) - if(!DetrimentalSpellAllowsRest(buffs[j].spellid)) + if(!IsRestAllowedSpell(buffs[j].spellid)) return; } } @@ -3261,6 +3252,10 @@ MercSpell Merc::GetBestMercSpellForTargetedAENuke(Merc* caster, Mob* tar) { result.proc_chance = 0; result.time_cancast = 0; + if (!caster) { + return result; + } + switch(caster->GetStance()) { case EQ::constants::stanceBurnAE: @@ -3272,28 +3267,26 @@ MercSpell Merc::GetBestMercSpellForTargetedAENuke(Merc* caster, Mob* tar) { break; } - if(caster) { - std::list mercSpellList = GetMercSpellsBySpellType(caster, SpellType_Nuke); + std::list mercSpellList = GetMercSpellsBySpellType(caster, SpellType_Nuke); - for (auto mercSpellListItr = mercSpellList.begin(); mercSpellListItr != mercSpellList.end(); - ++mercSpellListItr) { - // Assuming all the spells have been loaded into this list by level and in descending order - if(IsAENukeSpell(mercSpellListItr->spellid) && !IsAERainNukeSpell(mercSpellListItr->spellid) - && !IsPBAENukeSpell(mercSpellListItr->spellid) && CheckSpellRecastTimers(caster, mercSpellListItr->spellid)) { - uint8 numTargets = 0; - if(CheckAENuke(caster, tar, mercSpellListItr->spellid, numTargets)) { - if(numTargets >= numTargetsCheck && zone->random.Roll(castChance)) { - result.spellid = mercSpellListItr->spellid; - result.stance = mercSpellListItr->stance; - result.type = mercSpellListItr->type; - result.slot = mercSpellListItr->slot; - result.proc_chance = mercSpellListItr->proc_chance; - result.time_cancast = mercSpellListItr->time_cancast; - } + for (auto mercSpellListItr = mercSpellList.begin(); mercSpellListItr != mercSpellList.end(); + ++mercSpellListItr) { + // Assuming all the spells have been loaded into this list by level and in descending order + if(IsAENukeSpell(mercSpellListItr->spellid) && !IsAERainNukeSpell(mercSpellListItr->spellid) + && !IsPBAENukeSpell(mercSpellListItr->spellid) && CheckSpellRecastTimers(caster, mercSpellListItr->spellid)) { + uint8 numTargets = 0; + if(CheckAENuke(caster, tar, mercSpellListItr->spellid, numTargets)) { + if(numTargets >= numTargetsCheck && zone->random.Roll(castChance)) { + result.spellid = mercSpellListItr->spellid; + result.stance = mercSpellListItr->stance; + result.type = mercSpellListItr->type; + result.slot = mercSpellListItr->slot; + result.proc_chance = mercSpellListItr->proc_chance; + result.time_cancast = mercSpellListItr->time_cancast; } + } - break; - } + break; } } @@ -3313,6 +3306,10 @@ MercSpell Merc::GetBestMercSpellForPBAENuke(Merc* caster, Mob* tar) { result.proc_chance = 0; result.time_cancast = 0; + if (!caster) { + return result; + } + switch(caster->GetStance()) { case EQ::constants::stanceBurnAE: @@ -3324,27 +3321,25 @@ MercSpell Merc::GetBestMercSpellForPBAENuke(Merc* caster, Mob* tar) { break; } - if(caster) { - std::list mercSpellList = GetMercSpellsBySpellType(caster, SpellType_Nuke); + std::list mercSpellList = GetMercSpellsBySpellType(caster, SpellType_Nuke); - for (auto mercSpellListItr = mercSpellList.begin(); mercSpellListItr != mercSpellList.end(); - ++mercSpellListItr) { - // Assuming all the spells have been loaded into this list by level and in descending order - if(IsPBAENukeSpell(mercSpellListItr->spellid) && CheckSpellRecastTimers(caster, mercSpellListItr->spellid)) { - uint8 numTargets = 0; - if(CheckAENuke(caster, caster, mercSpellListItr->spellid, numTargets)) { - if(numTargets >= numTargetsCheck && zone->random.Roll(castChance)) { - result.spellid = mercSpellListItr->spellid; - result.stance = mercSpellListItr->stance; - result.type = mercSpellListItr->type; - result.slot = mercSpellListItr->slot; - result.proc_chance = mercSpellListItr->proc_chance; - result.time_cancast = mercSpellListItr->time_cancast; - } + for (auto mercSpellListItr = mercSpellList.begin(); mercSpellListItr != mercSpellList.end(); + ++mercSpellListItr) { + // Assuming all the spells have been loaded into this list by level and in descending order + if(IsPBAENukeSpell(mercSpellListItr->spellid) && CheckSpellRecastTimers(caster, mercSpellListItr->spellid)) { + uint8 numTargets = 0; + if(CheckAENuke(caster, caster, mercSpellListItr->spellid, numTargets)) { + if(numTargets >= numTargetsCheck && zone->random.Roll(castChance)) { + result.spellid = mercSpellListItr->spellid; + result.stance = mercSpellListItr->stance; + result.type = mercSpellListItr->type; + result.slot = mercSpellListItr->slot; + result.proc_chance = mercSpellListItr->proc_chance; + result.time_cancast = mercSpellListItr->time_cancast; } - - break; } + + break; } } @@ -3364,6 +3359,10 @@ MercSpell Merc::GetBestMercSpellForAERainNuke(Merc* caster, Mob* tar) { result.proc_chance = 0; result.time_cancast = 0; + if (!caster) { + return result; + } + switch(caster->GetStance()) { case EQ::constants::stanceBurnAE: @@ -3375,27 +3374,25 @@ MercSpell Merc::GetBestMercSpellForAERainNuke(Merc* caster, Mob* tar) { break; } - if(caster) { - std::list mercSpellList = GetMercSpellsBySpellType(caster, SpellType_Nuke); + std::list mercSpellList = GetMercSpellsBySpellType(caster, SpellType_Nuke); - for (auto mercSpellListItr = mercSpellList.begin(); mercSpellListItr != mercSpellList.end(); - ++mercSpellListItr) { - // Assuming all the spells have been loaded into this list by level and in descending order - if(IsAERainNukeSpell(mercSpellListItr->spellid) && zone->random.Roll(castChance) && CheckSpellRecastTimers(caster, mercSpellListItr->spellid)) { - uint8 numTargets = 0; - if(CheckAENuke(caster, tar, mercSpellListItr->spellid, numTargets)) { - if(numTargets >= numTargetsCheck) { - result.spellid = mercSpellListItr->spellid; - result.stance = mercSpellListItr->stance; - result.type = mercSpellListItr->type; - result.slot = mercSpellListItr->slot; - result.proc_chance = mercSpellListItr->proc_chance; - result.time_cancast = mercSpellListItr->time_cancast; - } + for (auto mercSpellListItr = mercSpellList.begin(); mercSpellListItr != mercSpellList.end(); + ++mercSpellListItr) { + // Assuming all the spells have been loaded into this list by level and in descending order + if(IsAERainNukeSpell(mercSpellListItr->spellid) && zone->random.Roll(castChance) && CheckSpellRecastTimers(caster, mercSpellListItr->spellid)) { + uint8 numTargets = 0; + if(CheckAENuke(caster, tar, mercSpellListItr->spellid, numTargets)) { + if(numTargets >= numTargetsCheck) { + result.spellid = mercSpellListItr->spellid; + result.stance = mercSpellListItr->stance; + result.type = mercSpellListItr->type; + result.slot = mercSpellListItr->slot; + result.proc_chance = mercSpellListItr->proc_chance; + result.time_cancast = mercSpellListItr->time_cancast; } - - break; } + + break; } } @@ -4302,7 +4299,12 @@ Merc* Merc::LoadMerc(Client *c, MercTemplate* merc_template, uint32 merchant_id, if(merc_template) { //TODO: Maybe add a way of updating client merc stats in a seperate function? like, for example, on leveling up. - const NPCType* npc_type_to_copy = content_db.GetMercType(merc_template->MercNPCID, merc_template->RaceID, c->GetLevel()); + + const NPCType* npc_type_to_copy = nullptr; + if (c) { + npc_type_to_copy = content_db.GetMercType(merc_template->MercNPCID, merc_template->RaceID, c->GetLevel()); + } + if(npc_type_to_copy != nullptr) { //This is actually a very terrible method of assigning stats, and should be changed at some point. See the comment in merc's deconstructor. diff --git a/zone/merc.h b/zone/merc.h index 307eb340c..0c9983b5c 100644 --- a/zone/merc.h +++ b/zone/merc.h @@ -285,9 +285,7 @@ protected: private: int32 CalcAC(); - int32 GetACMit(); int32 GetACAvoid(); - int32 acmod(); int32 CalcATK(); //int CalcHaste(); @@ -307,7 +305,6 @@ private: int32 CalcCorrup(); int64 CalcMaxHP(); int64 CalcBaseHP(); - int64 GetClassHPFactor(); int64 CalcHPRegen(); int64 CalcHPRegenCap(); int64 CalcMaxMana(); diff --git a/zone/message.h b/zone/message.h deleted file mode 100644 index 8f8dd5c8f..000000000 --- a/zone/message.h +++ /dev/null @@ -1,7 +0,0 @@ -struct Msg { - int id; - char* Sender; - char* Subject; - char* Body; - char* Date; -}; diff --git a/zone/mob.cpp b/zone/mob.cpp index e80fcda27..e8220cf4b 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -131,36 +131,40 @@ Mob::Mob( mMovementManager = &MobMovementManager::Get(); mMovementManager->AddMob(this); - targeted = 0; + targeted = 0; currently_fleeing = false; AI_Init(); SetMoving(false); - moved = false; - turning = false; - m_RewindLocation = glm::vec3(); + + moved = false; + turning = false; + m_RewindLocation = glm::vec3(); m_RelativePosition = glm::vec4(); - name[0] = 0; + name[0] = 0; orig_name[0] = 0; clean_name[0] = 0; lastname[0] = 0; + if (in_name) { strn0cpy(name, in_name, 64); strn0cpy(orig_name, in_name, 64); } + if (in_lastname) { strn0cpy(lastname, in_lastname, 64); } - current_hp = in_cur_hp; + + current_hp = in_cur_hp; max_hp = in_max_hp; base_hp = in_max_hp; gender = in_gender; race = in_race; base_gender = in_gender; base_race = in_race; - use_model = in_usemodel; + use_model = in_usemodel; class_ = in_class; bodytype = in_bodytype; orig_bodytype = in_bodytype; @@ -185,8 +189,7 @@ Mob::Mob( fearspeed = 0.625f; base_fearspeed = 25; // npcs - } - else { + } else { base_walkspeed = base_runspeed * 100 / 265; walkspeed = ((float) base_walkspeed) * 0.025f; base_fearspeed = base_runspeed * 100 / 127; @@ -200,7 +203,6 @@ Mob::Mob( m_PlayerState = 0; - // sanity check if (runspeed < 0 || runspeed > 20) { runspeed = 1.25f; @@ -220,38 +222,33 @@ Mob::Mob( feettexture = in_feettexture; multitexture = (armtexture || bracertexture || handtexture || legtexture || feettexture); - haircolor = in_haircolor; - beardcolor = in_beardcolor; - eyecolor1 = in_eyecolor1; - eyecolor2 = in_eyecolor2; - hairstyle = in_hairstyle; - luclinface = in_luclinface; - beard = in_beard; - drakkin_heritage = in_drakkin_heritage; - drakkin_tattoo = in_drakkin_tattoo; - drakkin_details = in_drakkin_details; - attack_speed = 0; - attack_delay = 0; - slow_mitigation = 0; - findable = false; - trackable = true; - has_shieldequiped = false; - has_twohandbluntequiped = false; - has_twohanderequipped = false; - has_duelweaponsequiped = false; - can_facestab = false; - has_numhits = false; - has_MGB = false; - has_ProjectIllusion = false; - SpellPowerDistanceMod = 0; - last_los_check = false; + haircolor = in_haircolor; + beardcolor = in_beardcolor; + eyecolor1 = in_eyecolor1; + eyecolor2 = in_eyecolor2; + hairstyle = in_hairstyle; + luclinface = in_luclinface; + beard = in_beard; + drakkin_heritage = in_drakkin_heritage; + drakkin_tattoo = in_drakkin_tattoo; + drakkin_details = in_drakkin_details; + attack_speed = 0; + attack_delay = 0; + slow_mitigation = 0; + findable = false; + trackable = true; + has_shield_equipped = false; + has_two_hand_blunt_equipped = false; + has_two_hander_equipped = false; + has_dual_weapons_equipped = false; + can_facestab = false; + has_numhits = false; + has_MGB = false; + has_ProjectIllusion = false; + SpellPowerDistanceMod = 0; + last_los_check = false; - if (in_aa_title > 0) { - aa_title = in_aa_title; - } - else { - aa_title = 0xFF; - } + aa_title = in_aa_title > 0 ? in_aa_title : 0xFF; AC = in_ac; ATK = in_atk; @@ -280,7 +277,6 @@ Mob::Mob( hidden = false; improved_hidden = false; invulnerable = false; - IsFullHP = (current_hp == max_hp); qglobal = 0; spawned = false; rare_spawn = false; @@ -384,8 +380,8 @@ Mob::Mob( spellbonuses.AssistRange = -1; SetPetID(0); SetOwnerID(0); - typeofpet = petNone; // default to not a pet - petpower = 0; + SetPetType(petNone); // default to not a pet + SetPetPower(0); held = false; gheld = false; nocast = false; @@ -428,24 +424,24 @@ Mob::Mob( permarooted = (runspeed > 0) ? false : true; pause_timer_complete = false; - ForcedMovement = 0; - roamer = false; - rooted = false; - charmed = false; + ForcedMovement = 0; + roamer = false; + rooted = false; + charmed = false; - weaponstance.enabled = false; - weaponstance.spellbonus_enabled = false; //Set when bonus is applied - weaponstance.itembonus_enabled = false; //Set when bonus is applied - weaponstance.aabonus_enabled = false; //Controlled by function TogglePassiveAA + weaponstance.enabled = false; + weaponstance.spellbonus_enabled = false; //Set when bonus is applied + weaponstance.itembonus_enabled = false; //Set when bonus is applied + weaponstance.aabonus_enabled = false; //Controlled by function TogglePassiveAA weaponstance.spellbonus_buff_spell_id = 0; - weaponstance.itembonus_buff_spell_id = 0; - weaponstance.aabonus_buff_spell_id = 0; + weaponstance.itembonus_buff_spell_id = 0; + weaponstance.aabonus_buff_spell_id = 0; pStandingPetOrder = SPO_Follow; pseudo_rooted = false; nobuff_invisible = 0; - see_invis = 0; + see_invis = 0; innate_see_invis = GetSeeInvisibleLevelFromNPCStat(in_see_invis); see_invis_undead = GetSeeInvisibleLevelFromNPCStat(in_see_invis_undead); @@ -492,19 +488,19 @@ Mob::Mob( } for (int i = 0; i < MAX_APPEARANCE_EFFECTS; i++) { - appearance_effects_id[i] = 0; + appearance_effects_id[i] = 0; appearance_effects_slot[i] = 0; } emoteid = 0; endur_upkeep = false; degenerating_effects = false; - PrimaryAggro = false; - AssistAggro = false; - npc_assist_cap = 0; + PrimaryAggro = false; + AssistAggro = false; + npc_assist_cap = 0; use_double_melee_round_dmg_bonus = false; - dw_same_delay = 0; + dw_same_delay = 0; queue_wearchange_slot = -1; @@ -1138,7 +1134,6 @@ void Mob::SetSpawnLastNameByClass(NewSpawn_Struct* ns) strcpy(ns->spawn.lastName, "Mercenary Liaison"); break; default: - strcpy(ns->spawn.lastName, ns->spawn.lastName); break; } } @@ -1368,7 +1363,6 @@ void Mob::CreateDespawnPacket(EQApplicationPacket* app, bool Decay) void Mob::CreateHPPacket(EQApplicationPacket* app) { - IsFullHP=(current_hp>=max_hp); app->SetOpcode(OP_MobHealth); app->size = sizeof(SpawnHPUpdate_Struct2); safe_delete_array(app->pBuffer); @@ -2489,8 +2483,12 @@ void Mob::SendIllusionPacket( // update internal values for mob size = (in_size <= 0.0f) ? GetRaceGenderDefaultHeight(race, gender) : in_size; - texture = new_texture; - helmtexture = new_helmtexture; + if (new_texture != 0xFF) { + texture = new_texture; + } + if (new_helmtexture != 0xFF) { + helmtexture = new_helmtexture; + } haircolor = new_haircolor; beardcolor = new_beardcolor; eyecolor1 = new_eyecolor1; @@ -4397,7 +4395,7 @@ int Mob::CountDispellableBuffs() if(buffs[x].counters) continue; - if(spells[buffs[x].spellid].good_effect == 0) + if(spells[buffs[x].spellid].good_effect == DETRIMENTAL_EFFECT) continue; if(IsValidSpell(buffs[x].spellid) && spells[buffs[x].spellid].buff_duration_formula != DF_Permanent) { @@ -5113,6 +5111,10 @@ void Mob::TarGlobal(const char *varname, const char *value, const char *duration void Mob::DelGlobal(const char *varname) { + if (!zone) { + return; + } + int qgZoneid=zone->GetZoneID(); int qgCharid=0; int qgNpcid=0; @@ -5133,22 +5135,19 @@ void Mob::DelGlobal(const char *varname) { database.QueryDatabase(query); - if(zone) - { - auto pack = new ServerPacket(ServerOP_QGlobalDelete, sizeof(ServerQGlobalDelete_Struct)); - ServerQGlobalDelete_Struct *qgu = (ServerQGlobalDelete_Struct*)pack->pBuffer; + auto pack = new ServerPacket(ServerOP_QGlobalDelete, sizeof(ServerQGlobalDelete_Struct)); + ServerQGlobalDelete_Struct *qgu = (ServerQGlobalDelete_Struct*)pack->pBuffer; - qgu->npc_id = qgNpcid; - qgu->char_id = qgCharid; - qgu->zone_id = qgZoneid; - strcpy(qgu->name, varname); + qgu->npc_id = qgNpcid; + qgu->char_id = qgCharid; + qgu->zone_id = qgZoneid; + strcpy(qgu->name, varname); - entity_list.DeleteQGlobal(std::string((char*)qgu->name), qgu->npc_id, qgu->char_id, qgu->zone_id); - zone->DeleteQGlobal(std::string((char*)qgu->name), qgu->npc_id, qgu->char_id, qgu->zone_id); + entity_list.DeleteQGlobal(std::string((char*)qgu->name), qgu->npc_id, qgu->char_id, qgu->zone_id); + zone->DeleteQGlobal(std::string((char*)qgu->name), qgu->npc_id, qgu->char_id, qgu->zone_id); - worldserver.SendPacket(pack); - safe_delete(pack); - } + worldserver.SendPacket(pack); + safe_delete(pack); } // Inserts global variable into quest_globals table @@ -6055,14 +6054,14 @@ void Mob::AddFactionBonus(uint32 pFactionID,int32 bonus) { faction_bonus = faction_bonuses.find(pFactionID); if(faction_bonus == faction_bonuses.end()) { - faction_bonuses.insert(NewFactionBonus(pFactionID,bonus)); + faction_bonuses.emplace(NewFactionBonus(pFactionID,bonus)); } else { if(faction_bonus->second 0 && faction_bonus->second < bonus) || (bonus < 0 && faction_bonus->second > bonus)) { item_faction_bonuses.erase(pFactionID); - item_faction_bonuses.insert(NewFactionBonus(pFactionID,bonus)); + item_faction_bonuses.emplace(NewFactionBonus(pFactionID,bonus)); } } } @@ -6232,20 +6231,20 @@ FACTION_VALUE Mob::GetSpecialFactionCon(Mob* iOther) { bool Mob::HasSpellEffect(int effect_id) { - int i; + const auto buff_count = GetMaxTotalSlots(); + for (int i = 0; i < buff_count; i++) { + const auto spell_id = buffs[i].spellid; - int buff_count = GetMaxTotalSlots(); - for(i = 0; i < buff_count; i++) - { - if (!IsValidSpell(buffs[i].spellid)) { + if (!IsValidSpell(spell_id)) { continue; } - if (IsEffectInSpell(buffs[i].spellid, effect_id)) { - return(1); + if (IsEffectInSpell(spell_id, effect_id)) { + return true; } } - return(0); + + return false; } int Mob::GetSpecialAbility(int ability) @@ -6729,8 +6728,11 @@ void Mob::CommonBreakInvisible() CancelSneakHide(); } -float Mob::GetDefaultRaceSize() const { - return GetRaceGenderDefaultHeight(race, gender); +float Mob::GetDefaultRaceSize(int race_id, int gender_id) const { + return GetRaceGenderDefaultHeight( + race_id > 0 ? race_id : race, + gender_id >= 0 ? gender_id : gender + ); } bool Mob::ShieldAbility(uint32 target_id, int shielder_max_distance, int shield_duration, int shield_target_mitigation, int shielder_mitigation, bool use_aa, bool can_shield_npc) @@ -6979,9 +6981,9 @@ std::string Mob::GetBucketKey() { std::string Mob::GetBucketRemaining(std::string bucket_name) { std::string full_bucket_name = fmt::format("{}-{}", GetBucketKey(), bucket_name); std::string bucket_remaining = DataBucket::GetDataRemaining(full_bucket_name); - if (!bucket_remaining.empty() && Strings::ToInt(bucket_remaining.c_str()) > 0) { + if (!bucket_remaining.empty() && Strings::ToInt(bucket_remaining) > 0) { return bucket_remaining; - } else if (Strings::ToInt(bucket_remaining.c_str()) == 0) { + } else if (Strings::ToInt(bucket_remaining) == 0) { return "0"; } return std::string(); @@ -7141,4 +7143,4 @@ int Mob::DispatchZoneControllerEvent( } return ret; -} \ No newline at end of file +} diff --git a/zone/mob.h b/zone/mob.h index 9fc1cde6f..1762d913d 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -441,6 +441,7 @@ public: void DoGravityEffect(); void DamageShield(Mob* other, bool spell_ds = false); int32 RuneAbsorb(int64 damage, uint16 type); + std::vector GetBuffSpellIDs(); bool FindBuff(uint16 spell_id); uint16 FindBuffBySlot(int slot); uint32 BuffCount(bool is_beneficial = true, bool is_detrimental = true); @@ -484,19 +485,19 @@ public: void TempName(const char *newname = nullptr); void SetTargetable(bool on); bool IsTargetable() const { return m_targetable; } - bool HasShieldEquiped() const { return has_shieldequiped; } - inline void SetShieldEquiped(bool val) { has_shieldequiped = val; } - bool HasTwoHandBluntEquiped() const { return has_twohandbluntequiped; } - inline void SetTwoHandBluntEquiped(bool val) { has_twohandbluntequiped = val; } - bool HasTwoHanderEquipped() { return has_twohanderequipped; } - void SetTwoHanderEquipped(bool val) { has_twohanderequipped = val; } - bool HasDualWeaponsEquiped() const { return has_duelweaponsequiped; } + bool HasShieldEquipped() const { return has_shield_equipped; } + inline void SetShieldEquipped(bool val) { has_shield_equipped = val; } + bool HasTwoHandBluntEquipped() const { return has_two_hand_blunt_equipped; } + inline void SetTwoHandBluntEquipped(bool val) { has_two_hand_blunt_equipped = val; } + bool HasTwoHanderEquipped() { return has_two_hander_equipped; } + void SetTwoHanderEquipped(bool val) { has_two_hander_equipped = val; } + bool HasDualWeaponsEquipped() const { return has_dual_weapons_equipped; } bool HasBowEquipped() const { return has_bowequipped; } void SetBowEquipped(bool val) { has_bowequipped = val; } bool HasArrowEquipped() const { return has_arrowequipped; } void SetArrowEquipped(bool val) { has_arrowequipped = val; } bool HasBowAndArrowEquipped() const { return HasBowEquipped() && HasArrowEquipped(); } - inline void SetDuelWeaponsEquiped(bool val) { has_duelweaponsequiped = val; } + inline void SetDualWeaponsEquipped(bool val) { has_dual_weapons_equipped = val; } bool CanFacestab() { return can_facestab; } void SetFacestab(bool val) { can_facestab = val; } virtual uint8 ConvertItemTypeToSkillID(uint8 item_type); @@ -731,7 +732,10 @@ public: NPC* GetHateRandomNPC() { return hate_list.GetRandomNPCOnHateList(); } Bot* GetHateRandomBot() { return hate_list.GetRandomBotOnHateList(); } Mob* GetHateMost() { return hate_list.GetEntWithMostHateOnList();} - Mob* GetHateClosest() { return hate_list.GetClosestEntOnHateList(this); } + Mob* GetHateClosest(bool skip_mezzed = false) { return hate_list.GetClosestEntOnHateList(this, skip_mezzed); } + Bot* GetHateClosestBot(bool skip_mezzed = false) { return hate_list.GetClosestEntOnHateList(this, skip_mezzed, EntityFilterType::Bots)->CastToBot(); } + Client* GetHateClosestClient(bool skip_mezzed = false) { return hate_list.GetClosestEntOnHateList(this, skip_mezzed, EntityFilterType::Clients)->CastToClient(); } + NPC* GetHateClosestNPC(bool skip_mezzed = false) { return hate_list.GetClosestEntOnHateList(this, skip_mezzed, EntityFilterType::NPCs)->CastToNPC(); } bool IsEngaged() { return(!hate_list.IsHateListEmpty()); } bool HasPrimaryAggro() { return PrimaryAggro; } bool HasAssistAggro() { return AssistAggro; } @@ -749,6 +753,7 @@ public: bool CheckLosFN(Mob* other); bool CheckLosFN(float posX, float posY, float posZ, float mobSize); static bool CheckLosFN(glm::vec3 posWatcher, float sizeWatcher, glm::vec3 posTarget, float sizeTarget); + virtual bool CheckWaterLoS(Mob* m); inline void SetLastLosState(bool value) { last_los_check = value; } inline bool CheckLastLosState() const { return last_los_check; } std::string GetMobDescription(); @@ -1204,7 +1209,7 @@ public: void SendTo(float new_x, float new_y, float new_z); void SendToFixZ(float new_x, float new_y, float new_z); float GetZOffset() const; - float GetDefaultRaceSize() const; + float GetDefaultRaceSize(int race_id = -1, int gender_id = -1) const; void FixZ(int32 z_find_offset = 5, bool fix_client_z = false); float GetFixedZ(const glm::vec3 &destination, int32 z_find_offset = 5); virtual int GetStuckBehavior() const { return 0; } @@ -1439,7 +1444,6 @@ public: protected: void CommonDamage(Mob* other, int64 &damage, const uint16 spell_id, const EQ::skills::SkillType attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic, eSpecialAttacks specal = eSpecialAttacks::None); static uint16 GetProcID(uint16 spell_id, uint8 effect_index); - float _GetMovementSpeed(int mod) const; int _GetWalkSpeed() const; int _GetRunSpeed() const; int _GetFearSpeed() const; @@ -1450,7 +1454,6 @@ protected: virtual bool AI_PursueCastCheck() { return(false); } virtual bool AI_IdleCastCheck() { return(false); } - bool IsFullHP; bool moved; std::vector RampageArray; @@ -1463,7 +1466,6 @@ protected: bool isgrouped; bool israidgrouped; - bool pendinggroup; uint16 entity_id_being_looted; //the id of the entity being looted, 0 if not looting. uint8 texture; uint8 helmtexture; @@ -1699,10 +1701,10 @@ protected: bool silenced; bool amnesiad; bool offhand; - bool has_shieldequiped; - bool has_twohandbluntequiped; - bool has_twohanderequipped; - bool has_duelweaponsequiped; + bool has_shield_equipped; + bool has_two_hand_blunt_equipped; + bool has_two_hander_equipped; + bool has_dual_weapons_equipped; bool has_bowequipped = false; bool has_arrowequipped = false; bool use_double_melee_round_dmg_bonus; diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 325ab909c..c9a9c9aad 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -38,7 +38,6 @@ #include #include #include -#include extern EntityList entity_list; extern FastMath g_Math; @@ -654,7 +653,7 @@ void Client::AI_SpellCast() slot_to_use = static_cast(slots[idx]); } - if(IsMezSpell(spell_to_cast) || IsFearSpell(spell_to_cast)) + if(IsMesmerizeSpell(spell_to_cast) || IsFearSpell(spell_to_cast)) { Mob *tar = entity_list.GetTargetForMez(this); if(!tar) @@ -2920,7 +2919,7 @@ DBnpcspells_Struct *ZoneDatabase::GetNPCSpells(uint32 iDBSpellsID) spell_set.entries.push_back(entry); } - npc_spells_cache.insert(std::make_pair(iDBSpellsID, spell_set)); + npc_spells_cache.emplace(std::make_pair(iDBSpellsID, spell_set)); return &npc_spells_cache[iDBSpellsID]; } diff --git a/zone/mob_appearance.cpp b/zone/mob_appearance.cpp index 4441d840a..8608ee9da 100644 --- a/zone/mob_appearance.cpp +++ b/zone/mob_appearance.cpp @@ -21,14 +21,12 @@ #include "../common/data_verification.h" #include "../common/eqemu_logsys.h" #include "../common/item_data.h" -#include "../common/misc_functions.h" #include "../common/spdat.h" #include "../common/strings.h" #include "mob.h" #include "quest_parser_collection.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "bot.h" @@ -206,13 +204,11 @@ int32 Mob::GetTextureProfileHeroForgeModel(uint8 material_slot) const */ int32 Mob::GetEquipmentMaterial(uint8 material_slot) const { - uint32 equipment_material = 0; - int32 ornamentation_augment_type = RuleI(Character, OrnamentationAugmentType); + uint32 equipment_material = 0; + int32 texture_profile_material = GetTextureProfileMaterial(material_slot); - int32 texture_profile_material = GetTextureProfileMaterial(material_slot); - - Log(Logs::Detail, Logs::MobAppearance, - "[%s] material_slot: %u texture_profile_material: %i", + LogMobAppearance( + "[{}] material_slot: {} texture_profile_material: {}", clean_name, material_slot, texture_profile_material @@ -235,9 +231,12 @@ int32 Mob::GetEquipmentMaterial(uint8 material_slot) const } const auto* inst = CastToClient()->m_inv[inventory_slot]; + if (inst) { - if (inst->GetOrnamentationAug(ornamentation_augment_type)) { - item = inst->GetOrnamentationAug(ornamentation_augment_type)->GetItem(); + const auto augment = inst->GetOrnamentationAugment(); + + if (augment) { + item = augment->GetItem(); if (item && strlen(item->IDFile) > 2 && Strings::IsNumber(&item->IDFile[2])) { equipment_material = Strings::ToInt(&item->IDFile[2]); } @@ -312,21 +311,20 @@ uint32 Mob::GetEquipmentColor(uint8 material_slot) const int32 Mob::GetHerosForgeModel(uint8 material_slot) const { uint32 hero_model = 0; - if (material_slot >= 0 && material_slot < EQ::textures::weaponPrimary) { - uint32 ornamentation_aug_type = RuleI(Character, OrnamentationAugmentType); - + if (EQ::ValueWithin(material_slot, 0, EQ::textures::weaponPrimary)) { const EQ::ItemData *item = database.GetItem(GetEquippedItemFromTextureSlot(material_slot)); - int16 invslot = EQ::InventoryProfile::CalcSlotFromMaterial(material_slot); + const auto slot = EQ::InventoryProfile::CalcSlotFromMaterial(material_slot); - if (item != nullptr && invslot != INVALID_INDEX) { + if (item && slot != INVALID_INDEX) { if (IsClient()) { - const EQ::ItemInstance *inst = CastToClient()->m_inv[invslot]; + const auto inst = CastToClient()->m_inv[slot]; if (inst) { - if (inst->GetOrnamentationAug(ornamentation_aug_type)) { - item = inst->GetOrnamentationAug(ornamentation_aug_type)->GetItem(); + const auto augment = inst->GetOrnamentationAugment(); + + if (augment) { + item = augment->GetItem(); hero_model = item->HerosForgeModel; - } - else if (inst->GetOrnamentHeroModel()) { + } else if (inst->GetOrnamentHeroModel()) { hero_model = inst->GetOrnamentHeroModel(); } } @@ -343,8 +341,13 @@ int32 Mob::GetHerosForgeModel(uint8 material_slot) const /** * Robes require full model number, and should only be sent to chest, arms, wrists, and legs slots */ - if (hero_model > 1000 && material_slot != 1 && material_slot != 2 && material_slot != 3 && - material_slot != 5) { + if ( + hero_model > 1000 && + material_slot != EQ::textures::armorChest && + material_slot != EQ::textures::armorArms && + material_slot != EQ::textures::armorWrist && + material_slot != EQ::textures::armorLegs + ) { hero_model = 0; } } @@ -356,7 +359,7 @@ int32 Mob::GetHerosForgeModel(uint8 material_slot) const * Otherwise, use the exact Model if model is > 999 * Robes for example are 11607 to 12107 in RoF */ - if (hero_model > 0 && hero_model < 1000) { + if (EQ::ValueWithin(hero_model, 1, 999)) { hero_model *= 100; hero_model += material_slot; } diff --git a/zone/mob_info.cpp b/zone/mob_info.cpp index 69693a8b0..e8c5bb7d3 100644 --- a/zone/mob_info.cpp +++ b/zone/mob_info.cpp @@ -20,9 +20,6 @@ #include "client.h" #include "mob.h" -#include "../common/races.h" -#include "../common/say_link.h" -#include "../common/strings.h" #include "npc_scale_manager.h" inline std::string GetMobAttributeByString(Mob *mob, const std::string &attribute) diff --git a/zone/mob_movement_manager.cpp b/zone/mob_movement_manager.cpp index 530fd3f5a..1b4af7cd0 100644 --- a/zone/mob_movement_manager.cpp +++ b/zone/mob_movement_manager.cpp @@ -1395,7 +1395,7 @@ void MobMovementManager::UpdatePathBoat(Mob *who, float x, float y, float z, Mob */ void MobMovementManager::PushTeleportTo(MobMovementEntry &ent, float x, float y, float z, float heading) { - ent.Commands.push_back(std::unique_ptr(new TeleportToCommand(x, y, z, heading))); + ent.Commands.emplace_back(std::unique_ptr(new TeleportToCommand(x, y, z, heading))); } /** @@ -1407,7 +1407,7 @@ void MobMovementManager::PushTeleportTo(MobMovementEntry &ent, float x, float y, */ void MobMovementManager::PushMoveTo(MobMovementEntry &ent, float x, float y, float z, MobMovementMode mob_movement_mode) { - ent.Commands.push_back(std::unique_ptr(new MoveToCommand(x, y, z, mob_movement_mode))); + ent.Commands.emplace_back(std::unique_ptr(new MoveToCommand(x, y, z, mob_movement_mode))); } /** @@ -1419,7 +1419,7 @@ void MobMovementManager::PushMoveTo(MobMovementEntry &ent, float x, float y, flo */ void MobMovementManager::PushSwimTo(MobMovementEntry &ent, float x, float y, float z, MobMovementMode mob_movement_mode) { - ent.Commands.push_back(std::unique_ptr(new SwimToCommand(x, y, z, mob_movement_mode))); + ent.Commands.emplace_back(std::unique_ptr(new SwimToCommand(x, y, z, mob_movement_mode))); } /** @@ -1447,7 +1447,7 @@ void MobMovementManager::PushRotateTo(MobMovementEntry &ent, Mob *who, float to, diff -= 512.0; } - ent.Commands.push_back(std::unique_ptr(new RotateToCommand(to, diff > 0 ? 1.0 : -1.0, mob_movement_mode))); + ent.Commands.emplace_back(std::unique_ptr(new RotateToCommand(to, diff > 0 ? 1.0 : -1.0, mob_movement_mode))); } /** @@ -1459,7 +1459,7 @@ void MobMovementManager::PushRotateTo(MobMovementEntry &ent, Mob *who, float to, */ void MobMovementManager::PushFlyTo(MobMovementEntry &ent, float x, float y, float z, MobMovementMode mob_movement_mode) { - ent.Commands.push_back(std::unique_ptr(new FlyToCommand(x, y, z, mob_movement_mode))); + ent.Commands.emplace_back(std::unique_ptr(new FlyToCommand(x, y, z, mob_movement_mode))); } /** @@ -1467,7 +1467,7 @@ void MobMovementManager::PushFlyTo(MobMovementEntry &ent, float x, float y, floa */ void MobMovementManager::PushStopMoving(MobMovementEntry &mob_movement_entry) { - mob_movement_entry.Commands.push_back(std::unique_ptr(new StopMovingCommand())); + mob_movement_entry.Commands.emplace_back(std::unique_ptr(new StopMovingCommand())); } /** @@ -1475,7 +1475,7 @@ void MobMovementManager::PushStopMoving(MobMovementEntry &mob_movement_entry) */ void MobMovementManager::PushEvadeCombat(MobMovementEntry &mob_movement_entry) { - mob_movement_entry.Commands.push_back(std::unique_ptr(new EvadeCombatCommand())); + mob_movement_entry.Commands.emplace_back(std::unique_ptr(new EvadeCombatCommand())); } /** diff --git a/zone/npc.cpp b/zone/npc.cpp index 652017690..39783a73f 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -27,7 +27,6 @@ #include "../common/emu_versions.h" #include "../common/features.h" #include "../common/item_instance.h" -#include "../common/item_data.h" #include "../common/linked_list.h" #include "../common/servertalk.h" #include "../common/say_link.h" @@ -45,7 +44,6 @@ #include "bot.h" -#include #include #include #include @@ -164,7 +162,7 @@ NPC::NPC(const NPCType *npc_type_data, Spawn2 *in_respawn, const glm::vec4 &posi size = 15; } - taunting = false; + SetTaunting(false); proximity = nullptr; copper = 0; silver = 0; @@ -834,14 +832,6 @@ void NPC::AddCash(uint16 in_copper, uint16 in_silver, uint16 in_gold, uint16 in_ platinum = 0; } -void NPC::AddCash() -{ - copper = zone->random.Int(1, 100); - silver = zone->random.Int(1, 50); - gold = zone->random.Int(1, 10); - platinum = zone->random.Int(1, 5); -} - void NPC::RemoveCash() { copper = 0; silver = 0; @@ -1151,59 +1141,6 @@ void NPC::Depop(bool start_spawn_timer) { } } -bool NPC::DatabaseCastAccepted(int spell_id) { - for (int i=0; i < EFFECT_COUNT; i++) { - switch(spells[spell_id].effect_id[i]) { - case SE_Stamina: { - if(IsEngaged() && GetHPRatio() < 100) - return true; - else - return false; - break; - } - case SE_CurrentHPOnce: - case SE_CurrentHP: { - if(GetHPRatio() < 100 && spells[spell_id].buff_duration == 0) - return true; - else - return false; - break; - } - - case SE_HealOverTime: { - if(GetHPRatio() < 100) - return true; - else - return false; - break; - } - case SE_DamageShield: { - return true; - } - case SE_NecPet: - case SE_SummonPet: { - if(GetPet()){ -#ifdef SPELLQUEUE - printf("%s: Attempted to make a second pet, denied.\n",GetName()); -#endif - return false; - } - break; - } - case SE_LocateCorpse: - case SE_SummonCorpse: { - return false; //Pfft, npcs don't need to summon corpses/locate corpses! - break; - } - default: - if(spells[spell_id].good_effect == 1 && !(spells[spell_id].buff_duration == 0 && GetHPRatio() == 100) && !IsEngaged()) - return true; - return false; - } - } - return false; -} - bool NPC::SpawnZoneController() { @@ -1380,7 +1317,7 @@ NPC * NPC::SpawnNodeNPC(std::string name, std::string last_name, const glm::vec4 } NPC* NPC::SpawnNPC(const char* spawncommand, const glm::vec4& position, Client* client) { - if(spawncommand == 0 || spawncommand[0] == 0) { + if (spawncommand == 0 || spawncommand[0] == 0) { return 0; } else { @@ -1389,42 +1326,54 @@ NPC* NPC::SpawnNPC(const char* spawncommand, const glm::vec4& position, Client* if (!sep.IsNumber(1)) { sprintf(sep.arg[1], "1"); } + if (!sep.IsNumber(2)) { sprintf(sep.arg[2], "1"); } + if (!sep.IsNumber(3)) { sprintf(sep.arg[3], "0"); } + if (Strings::ToInt(sep.arg[4]) > 2100000000 || Strings::ToInt(sep.arg[4]) <= 0) { sprintf(sep.arg[4], " "); } + if (!strcmp(sep.arg[5], "-")) { sprintf(sep.arg[5], " "); } + if (!sep.IsNumber(5)) { sprintf(sep.arg[5], " "); } + if (!sep.IsNumber(6)) { sprintf(sep.arg[6], "1"); } + if (!sep.IsNumber(8)) { sprintf(sep.arg[8], "0"); } + if (!sep.IsNumber(9)) { sprintf(sep.arg[9], "0"); } + if (!sep.IsNumber(7)) { sprintf(sep.arg[7], "0"); } + if (!strcmp(sep.arg[4], "-")) { sprintf(sep.arg[4], " "); } + if (!sep.IsNumber(10)) { // bodytype sprintf(sep.arg[10], "0"); } + //Calc MaxHP if client neglected to enter it... if (sep.arg[4] && !sep.IsNumber(4)) { - sprintf(sep.arg[4], "0"); + sprintf(sep.arg[4], "1"); } // Autoselect NPC Gender @@ -1437,6 +1386,7 @@ NPC* NPC::SpawnNPC(const char* spawncommand, const glm::vec4& position, Client* memset(npc_type, 0, sizeof(NPCType)); strncpy(npc_type->name, sep.arg[0], 60); + npc_type->current_hp = Strings::ToInt(sep.arg[4]); npc_type->max_hp = Strings::ToInt(sep.arg[4]); npc_type->race = Strings::ToInt(sep.arg[1]); @@ -1447,8 +1397,8 @@ NPC* NPC::SpawnNPC(const char* spawncommand, const glm::vec4& position, Client* npc_type->npc_id = 0; npc_type->loottable_id = 0; npc_type->texture = Strings::ToInt(sep.arg[3]); - npc_type->light = 0; // spawncommand needs update - npc_type->runspeed = 1.25; + npc_type->light = 0; + npc_type->runspeed = 1.25f; npc_type->d_melee_texture1 = Strings::ToInt(sep.arg[7]); npc_type->d_melee_texture2 = Strings::ToInt(sep.arg[8]); npc_type->merchanttype = Strings::ToInt(sep.arg[9]); @@ -1464,8 +1414,8 @@ NPC* NPC::SpawnNPC(const char* spawncommand, const glm::vec4& position, Client* npc_type->attack_delay = 3000; - npc_type->prim_melee_type = 28; - npc_type->sec_melee_type = 28; + npc_type->prim_melee_type = static_cast(EQ::skills::SkillHandtoHand); + npc_type->sec_melee_type = static_cast(EQ::skills::SkillHandtoHand); auto npc = new NPC(npc_type, nullptr, position, GravityBehavior::Water); npc->GiveNPCTypeData(npc_type); @@ -1474,17 +1424,34 @@ NPC* NPC::SpawnNPC(const char* spawncommand, const glm::vec4& position, Client* if (client) { // Notify client of spawn data - client->Message(Chat::White, "New spawn:"); - client->Message(Chat::White, "Name: %s", npc->name); - client->Message(Chat::White, "Race: %u", npc->race); - client->Message(Chat::White, "Level: %u", npc->level); - client->Message(Chat::White, "Material: %u", npc->texture); - client->Message(Chat::White, "Current/Max HP: %i", npc->max_hp); - client->Message(Chat::White, "Gender: %u", npc->gender); - client->Message(Chat::White, "Class: %u", npc->class_); - client->Message(Chat::White, "Weapon Item Number: %u/%u", npc->d_melee_texture1, npc->d_melee_texture2); - client->Message(Chat::White, "MerchantID: %u", npc->MerchantType); - client->Message(Chat::White, "Bodytype: %u", npc->bodytype); + client->Message(Chat::White, fmt::format("Name | {}", npc->name).c_str()); + client->Message(Chat::White, fmt::format("Level | {}", npc->level).c_str()); + client->Message(Chat::White, fmt::format("Health | {}", npc->max_hp).c_str()); + client->Message(Chat::White, fmt::format("Race | {} ({})", GetRaceIDName(npc->race), npc->race).c_str()); + client->Message(Chat::White, fmt::format("Class | {} ({})", GetClassIDName(npc->class_), npc->class_).c_str()); + client->Message(Chat::White, fmt::format("Gender | {} ({})", GetGenderName(npc->gender), npc->gender).c_str()); + client->Message(Chat::White, fmt::format("Texture | {}", npc->texture).c_str()); + + if (npc->d_melee_texture1 || npc->d_melee_texture2) { + client->Message( + Chat::White, + fmt::format( + "Weapon Item Number | Primary: {} Secondary: {}", + npc->d_melee_texture1, + npc->d_melee_texture2 + ).c_str() + ); + } + + if (npc->MerchantType) { + client->Message(Chat::White, fmt::format("Merchant ID | {}", npc->MerchantType).c_str()); + } + + if (npc->bodytype) { + client->Message(Chat::White, fmt::format("Body Type | {} ({})", EQ::constants::GetBodyTypeName(npc->bodytype), npc->bodytype).c_str()); + } + + client->Message(Chat::White, "New NPC spawned!"); } return npc; @@ -1920,7 +1887,7 @@ void NPC::PickPocket(Client* thief) if (item_test->Magic || !item_test->NoDrop || item_test->IsClassBag() || thief->CheckLoreConflict(item_test) || item_iter->equip_slot != EQ::invslot::SLOT_INVALID) continue; - loot_selection.push_back(std::make_pair(item_test, ((item_test->Stackable) ? (1) : (item_iter->charges)))); + loot_selection.emplace_back(std::make_pair(item_test, ((item_test->Stackable) ? (1) : (item_iter->charges)))); } if (loot_selection.empty()) { steal_item = false; @@ -2613,15 +2580,31 @@ void NPC::ModifyNPCStat(const std::string& stat, const std::string& value) return; } else if (stat_lower == "min_hit") { - min_dmg = Strings::ToInt(value); + min_dmg = Strings::ToInt(value); + // TODO: fix DB + + if (min_dmg > max_dmg) { + const auto temporary_damage = max_dmg; + max_dmg = min_dmg; + min_dmg = temporary_damage; + } + base_damage = round((max_dmg - min_dmg) / 1.9); min_damage = min_dmg - round(base_damage / 10.0); return; } else if (stat_lower == "max_hit") { - max_dmg = Strings::ToInt(value); + max_dmg = Strings::ToInt(value); + // TODO: fix DB + + if (max_dmg < min_dmg) { + const auto temporary_damage = min_dmg; + min_dmg = max_dmg; + max_dmg = temporary_damage; + } + base_damage = round((max_dmg - min_dmg) / 1.9); min_damage = min_dmg - round(base_damage / 10.0); return; diff --git a/zone/npc.h b/zone/npc.h index 6c59b54fb..7aa791649 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -179,8 +179,6 @@ public: virtual void ThrowingAttack(Mob* other) { } int32 GetNumberOfAttacks() const { return attack_count; } void DoRangedAttackDmg(Mob* other, bool Launch = true, int16 damage_mod = 0, int16 chance_mod = 0, EQ::skills::SkillType skill = EQ::skills::SkillArchery, float speed = 4.0f, const char *IDFile = nullptr); - - bool DatabaseCastAccepted(int spell_id); bool IsFactionListAlly(uint32 other_faction); bool IsGuard(); FACTION_VALUE CheckNPCFactionAlly(int32 other_faction); @@ -191,8 +189,6 @@ public: void GetPetState(SpellBuff_Struct *buffs, uint32 *items, char *name); void SetPetState(SpellBuff_Struct *buffs, uint32 *items); - void InteractiveChat(uint8 chan_num, uint8 language, const char * message, const char* targetname,Mob* sender); - void TakenAction(uint8 action,Mob* actiontaker); virtual void SpellProcess(); virtual void FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho); @@ -208,7 +204,6 @@ public: inline const ItemList &GetItemList() { return itemlist; } ServerLootItem_Struct* GetItem(int slot_id); void AddCash(uint16 in_copper, uint16 in_silver, uint16 in_gold, uint16 in_platinum); - void AddCash(); void RemoveCash(); void QueryLoot(Client* to, bool is_pet_query = false); bool HasItem(uint32 item_id); @@ -584,7 +579,6 @@ protected: uint32 npc_spells_id; uint8 casting_spell_AIindex; - uint32* pDontCastBefore_casting_spell; std::vector AIspells; bool HasAISpell; virtual bool AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes, bool bInnates = false); @@ -641,7 +635,6 @@ protected: //waypoint crap: std::vector Waypoints; - void _ClearWaypints(); int max_wp; int save_wp; glm::vec4 m_GuardPoint; diff --git a/zone/npc_scale_manager.cpp b/zone/npc_scale_manager.cpp index 191c76694..4d04fd3c1 100644 --- a/zone/npc_scale_manager.cpp +++ b/zone/npc_scale_manager.cpp @@ -19,7 +19,6 @@ */ #include "npc_scale_manager.h" -#include "../common/strings.h" #include "../common/repositories/npc_scale_global_base_repository.h" #include "../common/repositories/npc_types_repository.h" @@ -136,6 +135,8 @@ void NpcScaleManager::ScaleNPC( npc->ModifyNPCStat("phr", std::to_string(scale_data.physical_resist)); } + auto min_damage_set = false; + if (always_scale || npc->GetMinDMG() == 0) { int64 min_dmg = scale_data.min_dmg; if (RuleB(Combat, UseNPCDamageClassLevelMods)) { @@ -146,9 +147,10 @@ void NpcScaleManager::ScaleNPC( } npc->ModifyNPCStat("min_hit", std::to_string(min_dmg)); + min_damage_set = true; } - if (always_scale || npc->GetMaxDMG() == 0) { + if (always_scale || npc->GetMaxDMG() == 0 || min_damage_set) { int64 max_dmg = scale_data.max_dmg; if (RuleB(Combat, UseNPCDamageClassLevelMods)) { uint32 class_level_damage_mod = GetClassLevelDamageMod(npc->GetLevel(), npc->GetClass()); @@ -279,7 +281,7 @@ bool NpcScaleManager::LoadScaleData() scale_data.zone_id = Strings::ToUnsignedInt(s.zone_id_list); scale_data.instance_version = static_cast(Strings::ToUnsignedInt(s.instance_version_list)); - npc_global_base_scaling_data.insert( + npc_global_base_scaling_data.emplace( std::make_pair( std::make_tuple( scale_data.type, @@ -298,7 +300,7 @@ bool NpcScaleManager::LoadScaleData() for (const auto &z : zones) { scale_data.zone_id = Strings::ToUnsignedInt(z); - npc_global_base_scaling_data.insert( + npc_global_base_scaling_data.emplace( std::make_pair( std::make_tuple( scale_data.type, @@ -318,7 +320,7 @@ bool NpcScaleManager::LoadScaleData() for (const auto &v : versions) { scale_data.instance_version = static_cast(Strings::ToUnsignedInt(v)); - npc_global_base_scaling_data.insert( + npc_global_base_scaling_data.emplace( std::make_pair( std::make_tuple( scale_data.type, @@ -340,7 +342,7 @@ bool NpcScaleManager::LoadScaleData() for (const auto &v : versions) { scale_data.instance_version = static_cast(Strings::ToUnsignedInt(v)); - npc_global_base_scaling_data.insert( + npc_global_base_scaling_data.emplace( std::make_pair( std::make_tuple( scale_data.type, diff --git a/zone/object.cpp b/zone/object.cpp index 4b78eff26..9f5bf7965 100644 --- a/zone/object.cpp +++ b/zone/object.cpp @@ -27,11 +27,9 @@ #include "quest_parser_collection.h" #include "worldserver.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "../common/repositories/criteria/content_filter_criteria.h" #include "../common/events/player_event_logs.h" -#include const char DEFAULT_OBJECT_NAME[] = "IT63_ACTORDEF"; const char DEFAULT_OBJECT_NAME_SUFFIX[] = "_ACTORDEF"; diff --git a/zone/object.h b/zone/object.h index 4cff5c397..23791af2c 100644 --- a/zone/object.h +++ b/zone/object.h @@ -112,8 +112,6 @@ public: static void HandleAugmentation(Client* user, const AugmentItem_Struct* in_augment, Object *worldo); static void HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac); - static EQ::skills::SkillType TypeToSkill(uint32 type); - // Packet functions void CreateSpawnPacket(EQApplicationPacket* app); void CreateDeSpawnPacket(EQApplicationPacket* app); diff --git a/zone/oriented_bounding_box.h b/zone/oriented_bounding_box.h index 4d8a77fb3..bbc3cc6c3 100644 --- a/zone/oriented_bounding_box.h +++ b/zone/oriented_bounding_box.h @@ -7,9 +7,9 @@ class OrientedBoundingBox { public: - OrientedBoundingBox() { } + OrientedBoundingBox() = default; OrientedBoundingBox(const glm::vec3 &pos, const glm::vec3 &rot, const glm::vec3 &scale, const glm::vec3 &extents); - ~OrientedBoundingBox() { } + ~OrientedBoundingBox() = default; bool ContainsPoint(const glm::vec3 &p) const; private: diff --git a/zone/pathfinder_interface.cpp b/zone/pathfinder_interface.cpp index 3a5c07506..74209703c 100644 --- a/zone/pathfinder_interface.cpp +++ b/zone/pathfinder_interface.cpp @@ -2,8 +2,6 @@ #include "client.h" #include "pathfinder_null.h" #include "pathfinder_nav_mesh.h" -#include "pathfinder_waypoint.h" -#include "../common/path_manager.h" #include #include diff --git a/zone/pathfinder_waypoint.cpp b/zone/pathfinder_waypoint.cpp index 19ad3b135..2418b5fad 100644 --- a/zone/pathfinder_waypoint.cpp +++ b/zone/pathfinder_waypoint.cpp @@ -11,9 +11,6 @@ #include "pathfinder_waypoint.h" #include "zone.h" #include "client.h" -#include "../common/eqemu_logsys.h" -#include "../common/strings.h" -#include "../common/rulesys.h" extern Zone *zone; diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index 16c57f321..9cb246a3a 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -1522,6 +1522,11 @@ int Perl_Client_GetThirst(Client* self) // @categories Account and Character, St return self->GetThirst(); } +int Perl_Client_GetIntoxication(Client* self) // @categories Account and Character, Stats and Attributes +{ + return self->GetIntoxication(); +} + void Perl_Client_SetHunger(Client* self, int in_hunger) // @categories Script Utility, Stats and Attributes { self->SetHunger(in_hunger); @@ -1550,7 +1555,7 @@ void Perl_Client_SilentMessage(Client* self, const char* message) // @categories if (self->GetTarget()->CastToNPC()->IsMoving() && !self->GetTarget()->CastToNPC()->IsOnHatelist(self->GetTarget())) self->GetTarget()->CastToNPC()->PauseWandering(RuleI(NPC, SayPauseTimeInSec)); - self->ChannelMessageReceived(8, 0, 100, message, nullptr, true); + self->ChannelMessageReceived(ChatChannel_Say, 0, 100, message, nullptr, true); } } } @@ -2907,6 +2912,11 @@ bool Perl_Client_ReloadDataBuckets(Client* self) return DataBucket::GetDataBuckets(self); } +uint32 Perl_Client_GetEXPForLevel(Client* self, uint16 check_level) +{ + return self->GetEXPForLevel(check_level); +} + void perl_register_client() { perl::interpreter perl(PERL_GET_THX); @@ -3070,6 +3080,7 @@ void perl_register_client() package.add("GetDuelTarget", &Perl_Client_GetDuelTarget); package.add("GetEnvironmentDamageModifier", &Perl_Client_GetEnvironmentDamageModifier); package.add("GetEXP", &Perl_Client_GetEXP); + package.add("GetEXPForLevel", &Perl_Client_GetEXPForLevel); package.add("GetEXPModifier", (double(*)(Client*, uint32))&Perl_Client_GetEXPModifier); package.add("GetEXPModifier", (double(*)(Client*, uint32, int16))&Perl_Client_GetEXPModifier); package.add("GetEbonCrystals", &Perl_Client_GetEbonCrystals); @@ -3093,6 +3104,7 @@ void perl_register_client() package.add("GetHorseId", &Perl_Client_GetHorseId); package.add("GetHealAmount", &Perl_Client_GetHealAmount); package.add("GetHunger", &Perl_Client_GetHunger); + package.add("GetIntoxication", &Perl_Client_GetIntoxication); package.add("GetIP", &Perl_Client_GetIP); package.add("GetIPExemption", &Perl_Client_GetIPExemption); package.add("GetIPString", &Perl_Client_GetIPString); diff --git a/zone/perl_entity.cpp b/zone/perl_entity.cpp index 83f7fb9e7..65bd2a2fa 100644 --- a/zone/perl_entity.cpp +++ b/zone/perl_entity.cpp @@ -7,7 +7,6 @@ #include "../common/global_define.h" #include "../common/rulesys.h" #include "../common/say_link.h" -#include "../common/strings.h" #include Mob* Perl_EntityList_GetMobID(EntityList* self, uint16_t mob_id) // @categories Script Utility diff --git a/zone/perl_hateentry.cpp b/zone/perl_hateentry.cpp index 8b8ec0ff8..0b44143f9 100644 --- a/zone/perl_hateentry.cpp +++ b/zone/perl_hateentry.cpp @@ -4,7 +4,6 @@ #ifdef EMBPERL_XS_CLASSES #include "../common/global_define.h" -#include "../common/linked_list.h" #include "embperl.h" #include "hate_list.h" diff --git a/zone/perl_inventory.cpp b/zone/perl_inventory.cpp index 39fd7665c..ba083e936 100644 --- a/zone/perl_inventory.cpp +++ b/zone/perl_inventory.cpp @@ -4,7 +4,6 @@ #ifdef EMBPERL_XS_CLASSES #include "../common/global_define.h" -#include "../common/inventory_profile.h" #include "embperl.h" bool Perl_Inventory_CanItemFitInContainer(EQ::InventoryProfile* self, EQ::ItemInstance* item_to_check, EQ::ItemInstance* container_to_check) diff --git a/zone/perl_mob.cpp b/zone/perl_mob.cpp index ae25aec8a..2316cf110 100644 --- a/zone/perl_mob.cpp +++ b/zone/perl_mob.cpp @@ -1054,6 +1054,11 @@ void Perl_Mob_SetPetID(Mob* self, uint16 new_pet_id) // @categories Pet self->SetPetID(new_pet_id); } +Mob* Perl_Mob_GetPet(Mob* self) // @categories Script Utility, Pet +{ + return self->GetPet(); +} + int Perl_Mob_GetPetID(Mob* self) // @categories Script Utility, Pet { return self->GetPetID(); @@ -2273,14 +2278,14 @@ bool Perl_Mob_IsTargetable(Mob* self) // @categories Stats and Attributes return self->IsTargetable(); } -bool Perl_Mob_HasShieldEquiped(Mob* self) // @categories Stats and Attributes +bool Perl_Mob_HasShieldEquipped(Mob* self) // @categories Stats and Attributes { - return self->HasShieldEquiped(); + return self->HasShieldEquipped(); } -bool Perl_Mob_HasTwoHandBluntEquiped(Mob* self) // @categories Stats and Attributes +bool Perl_Mob_HasTwoHandBluntEquipped(Mob* self) // @categories Stats and Attributes { - return self->HasTwoHandBluntEquiped(); + return self->HasTwoHandBluntEquipped(); } bool Perl_Mob_HasTwoHanderEquipped(Mob* self) // @categories Stats and Attributes @@ -2432,6 +2437,41 @@ Mob* Perl_Mob_GetHateClosest(Mob* self) // @categories Hate and Aggro return self->GetHateClosest(); } +Mob* Perl_Mob_GetHateClosest(Mob* self, bool skip_mezzed) // @categories Hate and Aggro +{ + return self->GetHateClosest(skip_mezzed); +} + +Bot* Perl_Mob_GetHateClosestBot(Mob* self) // @categories Hate and Aggro +{ + return self->GetHateClosestBot(); +} + +Bot* Perl_Mob_GetHateClosestBot(Mob* self, bool skip_mezzed) // @categories Hate and Aggro +{ + return self->GetHateClosestBot(skip_mezzed); +} + +Client* Perl_Mob_GetHateClosestClient(Mob* self) // @categories Hate and Aggro +{ + return self->GetHateClosestClient(); +} + +Client* Perl_Mob_GetHateClosestClient(Mob* self, bool skip_mezzed) // @categories Hate and Aggro +{ + return self->GetHateClosestClient(skip_mezzed); +} + +NPC* Perl_Mob_GetHateClosestNPC(Mob* self) // @categories Hate and Aggro +{ + return self->GetHateClosestNPC(); +} + +NPC* Perl_Mob_GetHateClosestNPC(Mob* self, bool skip_mezzed) // @categories Hate and Aggro +{ + return self->GetHateClosestNPC(skip_mezzed); +} + std::string Perl_Mob_GetLastName(Mob* self) // @categories Script Utility { return self->GetLastName(); @@ -2887,6 +2927,16 @@ float Perl_Mob_GetDefaultRaceSize(Mob* self) // @categories Script Utility return self->GetDefaultRaceSize(); } +float Perl_Mob_GetDefaultRaceSize(Mob* self, int race_id) // @categories Script Utility +{ + return self->GetDefaultRaceSize(race_id); +} + +float Perl_Mob_GetDefaultRaceSize(Mob* self, int race_id, int gender_id) // @categories Script Utility +{ + return self->GetDefaultRaceSize(race_id, gender_id); +} + uint32 Perl_Mob_GetRemainingTimeMS(Mob* self, const char* timer_name) { return quest_manager.getremainingtimeMS(timer_name, self); @@ -2937,6 +2987,24 @@ void Perl_Mob_StopTimer(Mob* self, const char* timer_name) quest_manager.stoptimer(timer_name, self); } +perl::array Perl_Mob_GetBuffSpellIDs(Mob* self) +{ + perl::array l; + + const auto& b = self->GetBuffSpellIDs(); + + for (const auto& e : b) { + l.push_back(e); + } + + return l; +} + +bool Perl_Mob_HasSpellEffect(Mob* self, int effect_id) +{ + return self->HasSpellEffect(effect_id); +} + void perl_register_mob() { perl::interpreter perl(PERL_GET_THX); @@ -3117,6 +3185,7 @@ void perl_register_mob() package.add("GetBucketKey", &Perl_Mob_GetBucketKey); package.add("GetBucketRemaining", &Perl_Mob_GetBucketRemaining); package.add("GetBuffSlotFromType", &Perl_Mob_GetBuffSlotFromType); + package.add("GetBuffSpellIDs", &Perl_Mob_GetBuffSpellIDs); package.add("GetBuffStatValueBySpell", &Perl_Mob_GetBuffStatValueBySpell); package.add("GetBuffStatValueBySlot", &Perl_Mob_GetBuffStatValueBySlot); package.add("GetCHA", &Perl_Mob_GetCHA); @@ -3127,7 +3196,9 @@ void perl_register_mob() package.add("GetClassName", &Perl_Mob_GetClassName); package.add("GetCleanName", &Perl_Mob_GetCleanName); package.add("GetCorruption", &Perl_Mob_GetCorruption); - package.add("GetDefaultRaceSize", &Perl_Mob_GetDefaultRaceSize); + package.add("GetDefaultRaceSize", (float(*)(Mob*))&Perl_Mob_GetDefaultRaceSize); + package.add("GetDefaultRaceSize", (float(*)(Mob*, int))&Perl_Mob_GetDefaultRaceSize); + package.add("GetDefaultRaceSize", (float(*)(Mob*, int, int))&Perl_Mob_GetDefaultRaceSize); package.add("GetDEX", &Perl_Mob_GetDEX); package.add("GetDR", &Perl_Mob_GetDR); package.add("GetDamageAmount", &Perl_Mob_GetDamageAmount); @@ -3157,7 +3228,14 @@ void perl_register_mob() package.add("GetHaste", &Perl_Mob_GetHaste); package.add("GetHateAmount", (int64_t(*)(Mob*, Mob*))&Perl_Mob_GetHateAmount); package.add("GetHateAmount", (int64_t(*)(Mob*, Mob*, bool))&Perl_Mob_GetHateAmount); - package.add("GetHateClosest", &Perl_Mob_GetHateClosest); + package.add("GetHateClosest", (Mob*(*)(Mob*))&Perl_Mob_GetHateClosest); + package.add("GetHateClosest", (Mob*(*)(Mob*, bool))&Perl_Mob_GetHateClosest); + package.add("GetHateClosestBot", (Bot*(*)(Mob*))&Perl_Mob_GetHateClosestBot); + package.add("GetHateClosestBot", (Bot*(*)(Mob*, bool))&Perl_Mob_GetHateClosestBot); + package.add("GetHateClosestClient", (Client*(*)(Mob*))&Perl_Mob_GetHateClosestClient); + package.add("GetHateClosestClient", (Client*(*)(Mob*, bool))&Perl_Mob_GetHateClosestClient); + package.add("GetHateClosestNPC", (NPC*(*)(Mob*))&Perl_Mob_GetHateClosestNPC); + package.add("GetHateClosestNPC", (NPC*(*)(Mob*, bool))&Perl_Mob_GetHateClosestNPC); package.add("GetHateDamageTop", &Perl_Mob_GetHateDamageTop); package.add("GetHateList", &Perl_Mob_GetHateList); package.add("GetHateListBots", (perl::array(*)(Mob*))&Perl_Mob_GetHateListBots); @@ -3211,6 +3289,7 @@ void perl_register_mob() package.add("GetOwner", &Perl_Mob_GetOwner); package.add("GetOwnerID", &Perl_Mob_GetOwnerID); package.add("GetPR", &Perl_Mob_GetPR); + package.add("GetPet", &Perl_Mob_GetPet); package.add("GetPetID", &Perl_Mob_GetPetID); package.add("GetPetOrder", &Perl_Mob_GetPetOrder); package.add("GetPetType", &Perl_Mob_GetPetType); @@ -3257,9 +3336,10 @@ void perl_register_mob() package.add("HasOwner", &Perl_Mob_HasOwner); package.add("HasPet", &Perl_Mob_HasPet); package.add("HasProcs", &Perl_Mob_HasProcs); - package.add("HasShieldEquiped", &Perl_Mob_HasShieldEquiped); + package.add("HasShieldEquipped", &Perl_Mob_HasShieldEquipped); + package.add("HasSpellEffect", &Perl_Mob_HasSpellEffect); package.add("HasTimer", &Perl_Mob_HasTimer); - package.add("HasTwoHandBluntEquiped", &Perl_Mob_HasTwoHandBluntEquiped); + package.add("HasTwoHandBluntEquipped", &Perl_Mob_HasTwoHandBluntEquipped); package.add("HasTwoHanderEquipped", &Perl_Mob_HasTwoHanderEquipped); package.add("HateSummon", &Perl_Mob_HateSummon); package.add("Heal", &Perl_Mob_Heal); diff --git a/zone/perl_questitem.cpp b/zone/perl_questitem.cpp index 9b102800a..15a9ddc3a 100644 --- a/zone/perl_questitem.cpp +++ b/zone/perl_questitem.cpp @@ -4,7 +4,6 @@ #ifdef EMBPERL_XS_CLASSES #include "../common/global_define.h" -#include "../common/item_instance.h" #include "embperl.h" std::string Perl_QuestItem_GetName(EQ::ItemInstance* self) // @categories Inventory and Items diff --git a/zone/perlpacket.cpp b/zone/perlpacket.cpp index 9f423f089..d0459ee3e 100644 --- a/zone/perlpacket.cpp +++ b/zone/perlpacket.cpp @@ -16,12 +16,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "../common/global_define.h" -#include #include "perlpacket.h" #include "client.h" -#include "entity.h" #include "../common/opcodemgr.h" -#include "../common/packet_dump.h" #include "../common/misc_functions.h" PerlPacket::PerlPacket(const char *opcode, uint32 length) { diff --git a/zone/petitions.cpp b/zone/petitions.cpp index 41c5e3e02..e3c04d637 100644 --- a/zone/petitions.cpp +++ b/zone/petitions.cpp @@ -19,7 +19,6 @@ Copyright (C) 2001-2002 EQEMu Development Team (http://eqemu.org) #include "../common/eqemu_logsys.h" #include #ifdef _WINDOWS -#include #else #include #endif diff --git a/zone/pets.cpp b/zone/pets.cpp index 8c5018518..319d2d9ec 100644 --- a/zone/pets.cpp +++ b/zone/pets.cpp @@ -19,7 +19,6 @@ #include "../common/global_define.h" #include "../common/spdat.h" #include "../common/strings.h" -#include "../common/types.h" #include "entity.h" #include "client.h" @@ -27,7 +26,6 @@ #include "pets.h" #include "zonedb.h" -#include "../common/zone_store.h" #include @@ -77,103 +75,6 @@ void GetRandPetName(char *name) strn0cpy(name, temp.c_str(), 64); } -//not used anymore -/*int CalcPetHp(int levelb, int classb, int STA) -{ - int multiplier = 0; - int base_hp = 0; - switch(classb) { - case WARRIOR:{ - if (levelb < 20) - multiplier = 22; - else if (levelb < 30) - multiplier = 23; - else if (levelb < 40) - multiplier = 25; - else if (levelb < 53) - multiplier = 27; - else if (levelb < 57) - multiplier = 28; - else - multiplier = 30; - break; - } - case DRUID: - case CLERIC: - case SHAMAN:{ - multiplier = 15; - break; - } - case PALADIN: - case SHADOWKNIGHT:{ - if (levelb < 35) - multiplier = 21; - else if (levelb < 45) - multiplier = 22; - else if (levelb < 51) - multiplier = 23; - else if (levelb < 56) - multiplier = 24; - else if (levelb < 60) - multiplier = 25; - else - multiplier = 26; - break; - } - case MONK: - case BARD: - case ROGUE: - case BEASTLORD:{ - if (levelb < 51) - multiplier = 18; - else if (levelb < 58) - multiplier = 19; - else - multiplier = 20; - break; - } - case RANGER:{ - if (levelb < 58) - multiplier = 20; - else - multiplier = 21; - break; - } - case MAGICIAN: - case WIZARD: - case NECROMANCER: - case ENCHANTER:{ - multiplier = 12; - break; - } - default:{ - if (levelb < 35) - multiplier = 21; - else if (levelb < 45) - multiplier = 22; - else if (levelb < 51) - multiplier = 23; - else if (levelb < 56) - multiplier = 24; - else if (levelb < 60) - multiplier = 25; - else - multiplier = 26; - break; - } - } - - if (multiplier == 0) - { - LogFile->write(EQEMuLog::Error, "Multiplier == 0 in CalcPetHp,using Generic....");; - multiplier=12; - } - - base_hp = 5 + (multiplier*levelb) + ((multiplier*levelb*STA) + 1)/300; - return base_hp; -} -*/ - void Mob::MakePet(uint16 spell_id, const char* pettype, const char *petname) { // petpower of -1 is used to get the petpower based on whichever focus is currently // equipped. This should replicate the old functionality for the most part. @@ -443,22 +344,24 @@ Pet::Pet(NPCType *type_data, Mob *owner, PetType type, uint16 spell_id, int16 po : NPC(type_data, 0, owner->GetPosition() + glm::vec4(2.0f, 2.0f, 0.0f, 0.0f), GravityBehavior::Water) { GiveNPCTypeData(type_data); - typeofpet = type; - petpower = power; - SetOwnerID(owner->GetID()); + SetPetType(type); + SetPetPower(power); + SetOwnerID(owner ? owner->GetID() : 0); SetPetSpellID(spell_id); // All pets start at false on newer clients. The client // turns it on and tracks the state. - taunting=false; + SetTaunting(false); // Older clients didn't track state, and default taunting is on (per @mackal) // Familiar and animation pets don't get taunt until an AA. if (owner && owner->IsClient()) { if (!(owner->CastToClient()->ClientVersionBit() & EQ::versions::maskUFAndLater)) { - if ((typeofpet != petFamiliar && typeofpet != petAnimation) || - aabonuses.PetCommands[PET_TAUNT]) { - taunting=true; + if ( + (GetPetType() != petFamiliar && GetPetType() != petAnimation) || + aabonuses.PetCommands[PET_TAUNT] + ) { + SetTaunting(true); } } } @@ -503,21 +406,22 @@ bool ZoneDatabase::GetPoweredPetEntry(const char *pet_type, int16 petpower, PetR } Mob* Mob::GetPet() { - if(GetPetID() == 0) - return(nullptr); - - Mob* tmp = entity_list.GetMob(GetPetID()); - if(tmp == nullptr) { - SetPetID(0); - return(nullptr); + if (!GetPetID()) { + return nullptr; } - if(tmp->GetOwnerID() != GetID()) { + const auto m = entity_list.GetMob(GetPetID()); + if (!m) { SetPetID(0); - return(nullptr); + return nullptr; } - return(tmp); + if (m->GetOwnerID() != GetID()) { + SetPetID(0); + return nullptr; + } + + return m; } bool Mob::HasPet() const { @@ -634,13 +538,13 @@ void NPC::SetPetState(SpellBuff_Struct *pet_buffs, uint32 *items) { case SE_WeaponProc: // We need to reapply buff based procs // We need to do this here so suspended pets also regain their procs. - AddProcToWeapon(GetProcID(buffs[j1].spellid,x1), false, 100+spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, buffs[j1].casterlevel, GetProcLimitTimer(buffs[j1].spellid, ProcType::MELEE_PROC)); + AddProcToWeapon(GetProcID(buffs[j1].spellid,x1), false, 100+spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, buffs[j1].casterlevel, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::MELEE_PROC)); break; case SE_DefensiveProc: - AddDefensiveProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetProcLimitTimer(buffs[j1].spellid, ProcType::DEFENSIVE_PROC)); + AddDefensiveProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::DEFENSIVE_PROC)); break; case SE_RangedProc: - AddRangedProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetProcLimitTimer(buffs[j1].spellid, ProcType::RANGED_PROC)); + AddRangedProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::RANGED_PROC)); break; case SE_Charm: case SE_Rune: diff --git a/zone/position.cpp b/zone/position.cpp index 18577afd8..fff3aa043 100644 --- a/zone/position.cpp +++ b/zone/position.cpp @@ -1,6 +1,5 @@ #include "position.h" -#include #include #include #include "../common/strings.h" diff --git a/zone/qglobals.cpp b/zone/qglobals.cpp index ce65598c3..64a9cf65c 100644 --- a/zone/qglobals.cpp +++ b/zone/qglobals.cpp @@ -102,22 +102,6 @@ void QGlobalCache::GetQGlobals(std::list &globals, NPC *n, Client *c, Z } } -bool QGlobalCache::GetQGlobal(QGlobal &g, std::string name, NPC *n, Client *c, Zone *z) { - std::list globals; - QGlobalCache::GetQGlobals(globals, n, c, z); - - auto iter = globals.begin(); - while(iter != globals.end()) { - if(iter->name.compare(name) == 0) { - g = (*iter); - return true; - } - ++iter; - } - - return false; -} - void QGlobalCache::PurgeExpiredGlobals() { if(!qGlobalBucket.size()) diff --git a/zone/qglobals.h b/zone/qglobals.h index a4dccd2d2..619f825de 100644 --- a/zone/qglobals.h +++ b/zone/qglobals.h @@ -31,7 +31,6 @@ public: //assumes cacheA is already a valid or empty list and doesn't check for valid items. static void Combine(std::list &cacheA, std::list cacheB, uint32 npcID, uint32 charID, uint32 zoneID); static void GetQGlobals(std::list &globals, NPC *n, Client *c, Zone *z); - static bool GetQGlobal(QGlobal &g, std::string name, NPC *n, Client *c, Zone *z); void PurgeExpiredGlobals(); void LoadByNPCID(uint32 npcID); //npc diff --git a/zone/quest_interface.h b/zone/quest_interface.h index cc0b45d2e..c614ea430 100644 --- a/zone/quest_interface.h +++ b/zone/quest_interface.h @@ -116,7 +116,6 @@ public: virtual uint32 GetIdentifier() = 0; virtual void RemoveEncounter(const std::string &name) { } - //TODO: Set maximum quest errors instead of hard coding it virtual void GetErrors(std::list &quest_errors) { quest_errors.insert(quest_errors.end(), errors_.begin(), errors_.end()); } @@ -126,7 +125,7 @@ public: LogQuestErrors("{}", Strings::Trim(error)); errors_.push_back(error); - if(errors_.size() > 30) { + if (errors_.size() > RuleI(World, MaximumQuestErrors)) { errors_.pop_front(); } } diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 57e074891..719154a90 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -17,6 +17,7 @@ */ #include "../common/classes.h" +#include "../common/data_verification.h" #include "../common/global_define.h" #include "../common/rulesys.h" #include "../common/skills.h" @@ -36,9 +37,7 @@ #include "worldserver.h" #include "zone.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "dialogue_window.h" -#include "string_ids.h" #include "../common/repositories/tradeskill_recipe_repository.h" @@ -76,7 +75,6 @@ QuestManager quest_manager; QuestManager::QuestManager() { HaveProximitySays = false; - item_timers = 0; } QuestManager::~QuestManager() { @@ -408,11 +406,26 @@ void QuestManager::selfcast(int spell_id) { initiator->SpellFinished(spell_id, initiator, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].resist_difficulty); } -void QuestManager::addloot(int item_id, int charges, bool equipitem, int aug1, int aug2, int aug3, int aug4, int aug5, int aug6) { +void QuestManager::addloot( + int item_id, + int charges, + bool equipitem, + int aug1, + int aug2, + int aug3, + int aug4, + int aug5, + int aug6 +) { QuestManagerCurrentQuestVars(); - if(item_id != 0){ - if(owner->IsNPC()) + if (!owner) { + return; + } + + if (item_id != 0) { + if (owner->IsNPC()) { owner->CastToNPC()->AddItem(item_id, charges, equipitem, aug1, aug2, aug3, aug4, aug5, aug6); + } } } @@ -485,7 +498,7 @@ void QuestManager::settimer(const char* timer_name, int seconds, Mob* mob) { ++cur; } - QTimerList.push_back(QuestTimer(seconds * 1000, owner, timer_name)); + QTimerList.emplace_back(QuestTimer(seconds * 1000, owner, timer_name)); } void QuestManager::settimerMS(const char* timer_name, int milliseconds) { @@ -509,7 +522,7 @@ void QuestManager::settimerMS(const char* timer_name, int milliseconds) { ++cur; } - QTimerList.push_back(QuestTimer(milliseconds, owner, timer_name)); + QTimerList.emplace_back(QuestTimer(milliseconds, owner, timer_name)); } void QuestManager::settimerMS(const char* timer_name, int milliseconds, EQ::ItemInstance *inst) { @@ -532,7 +545,7 @@ void QuestManager::settimerMS(const char* timer_name, int milliseconds, Mob *mob ++cur; } - QTimerList.push_back(QuestTimer(milliseconds, mob, timer_name)); + QTimerList.emplace_back(QuestTimer(milliseconds, mob, timer_name)); } void QuestManager::stoptimer(const char* timer_name) { @@ -614,6 +627,10 @@ void QuestManager::stopalltimers(Mob *mob) { void QuestManager::pausetimer(const char* timer_name, Mob* mob) { QuestManagerCurrentQuestVars(); + if (!mob && !owner) { + return; + } + std::list::iterator cur = QTimerList.begin(), end; std::list::iterator pcur = PTimerList.begin(), pend; PausedTimer pt; @@ -651,6 +668,10 @@ void QuestManager::pausetimer(const char* timer_name, Mob* mob) { void QuestManager::resumetimer(const char* timer_name, Mob* mob) { QuestManagerCurrentQuestVars(); + if (!mob && !owner) { + return; + } + std::list::iterator cur = QTimerList.begin(), end; std::list::iterator pcur = PTimerList.begin(), pend; PausedTimer pt; @@ -687,7 +708,7 @@ void QuestManager::resumetimer(const char* timer_name, Mob* mob) { ++cur; } - QTimerList.push_back(QuestTimer(milliseconds, m, timer_name)); + QTimerList.emplace_back(QuestTimer(milliseconds, m, timer_name)); LogQuests("Creating a new timer and resuming [{}] for [{}] with [{}] ms remaining", timer_name, owner->GetName(), milliseconds); } @@ -1136,7 +1157,11 @@ void QuestManager::surname(std::string last_name) { void QuestManager::permaclass(int class_id) { QuestManagerCurrentQuestVars(); - //Makes the client the class specified + + if (!initiator) { + return; + } + initiator->SetBaseClass(class_id); initiator->Save(2); initiator->Kick("Base class change by QuestManager"); @@ -1144,7 +1169,11 @@ void QuestManager::permaclass(int class_id) { void QuestManager::permarace(int race_id) { QuestManagerCurrentQuestVars(); - //Makes the client the race specified + + if (!initiator) { + return; + } + initiator->SetBaseRace(race_id); initiator->Save(2); initiator->Kick("Base race change by QuestManager"); @@ -1152,7 +1181,11 @@ void QuestManager::permarace(int race_id) { void QuestManager::permagender(int gender_id) { QuestManagerCurrentQuestVars(); - //Makes the client the gender specified + + if (!initiator) { + return; + } + initiator->SetBaseGender(gender_id); initiator->Save(2); initiator->Kick("Base gender change by QuestManager"); @@ -1160,21 +1193,41 @@ void QuestManager::permagender(int gender_id) { uint16 QuestManager::scribespells(uint8 max_level, uint8 min_level) { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return 0; + } + return initiator->ScribeSpells(min_level, max_level); } uint16 QuestManager::traindiscs(uint8 max_level, uint8 min_level) { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return 0; + } + return initiator->LearnDisciplines(min_level, max_level); } void QuestManager::unscribespells() { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return; + } + initiator->UnscribeSpellAll(); } void QuestManager::untraindiscs() { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return; + } + initiator->UntrainDiscAll(); } @@ -1182,7 +1235,6 @@ void QuestManager::givecash(uint32 copper, uint32 silver, uint32 gold, uint32 pl QuestManagerCurrentQuestVars(); if ( initiator && - initiator->IsClient() && ( copper || silver || @@ -1201,90 +1253,113 @@ void QuestManager::givecash(uint32 copper, uint32 silver, uint32 gold, uint32 pl void QuestManager::pvp(const char *mode) { QuestManagerCurrentQuestVars(); - if (!strcasecmp(mode,"on")) - { - if (initiator) - initiator->SetPVP(true); + + if (!initiator) { + return; } - else - if (initiator) - initiator->SetPVP(false); + + initiator->SetPVP(Strings::ToBool(mode)); } void QuestManager::movepc(int zone_id, float x, float y, float z, float heading) { QuestManagerCurrentQuestVars(); - if (initiator) - initiator->MovePC(zone_id, x, y, z, heading); + + if (!initiator) { + return; + } + + initiator->MovePC(zone_id, x, y, z, heading); } void QuestManager::gmmove(float x, float y, float z) { QuestManagerCurrentQuestVars(); - if (initiator) - initiator->GMMove(x, y, z); + + if (!initiator) { + return; + } + + initiator->GMMove(x, y, z); } void QuestManager::movegrp(int zoneid, float x, float y, float z) { QuestManagerCurrentQuestVars(); - if (initiator) - { - Group *g = entity_list.GetGroupByClient(initiator); - if (g != nullptr) { - g->TeleportGroup(owner, zoneid, 0, x, y, z, 0.0f); - } - else { - Raid *r = entity_list.GetRaidByClient(initiator); - if (r != nullptr) { - uint32 gid = r->GetGroup(initiator); - if (gid >= 0 && gid < 12) { - r->TeleportGroup(owner, zoneid, 0, x, y, z, 0.0f, gid); - } - else { - initiator->MovePC(zoneid, x, y, z, 0.0f); - } - } - else { + + if (!initiator) { + return; + } + + if (Group *g = entity_list.GetGroupByClient(initiator)) { + g->TeleportGroup(owner, zoneid, 0, x, y, z, 0.0f); + } else { + if (Raid *r = entity_list.GetRaidByClient(initiator)) { + const auto group_id = r->GetGroup(initiator); + if (EQ::ValueWithin(group_id, 0, MAX_RAID_GROUPS)) { + r->TeleportGroup(owner, zoneid, 0, x, y, z, 0.0f, group_id); + } else { initiator->MovePC(zoneid, x, y, z, 0.0f); } + } else { + initiator->MovePC(zoneid, x, y, z, 0.0f); } } } void QuestManager::doanim(int animation_id, int animation_speed, bool ackreq, eqFilterType filter) { QuestManagerCurrentQuestVars(); + + if (!owner) { + return; + } + owner->DoAnim(animation_id, animation_speed, ackreq, filter); } void QuestManager::addskill(int skill_id, int value) { QuestManagerCurrentQuestVars(); - if (skill_id < 0 || skill_id > EQ::skills::HIGHEST_SKILL) + + if (!initiator) { return; - if (initiator) - initiator->AddSkill((EQ::skills::SkillType) skill_id, value); + } + + if (!EQ::ValueWithin(skill_id, EQ::skills::Skill1HBlunt, EQ::skills::HIGHEST_SKILL)) { + return; + } + + initiator->AddSkill((EQ::skills::SkillType) skill_id, value); } void QuestManager::setlanguage(int skill_id, int value) { QuestManagerCurrentQuestVars(); - if (initiator) - initiator->SetLanguageSkill(skill_id, value); + + if (!initiator) { + return; + } + + initiator->SetLanguageSkill(skill_id, value); } void QuestManager::setskill(int skill_id, int value) { QuestManagerCurrentQuestVars(); - if (skill_id < 0 || skill_id > EQ::skills::HIGHEST_SKILL) + + if (!initiator) { return; - if (initiator) - initiator->SetSkill((EQ::skills::SkillType) skill_id, value); + } + + if (!EQ::ValueWithin(skill_id, EQ::skills::Skill1HBlunt, EQ::skills::HIGHEST_SKILL)) { + return; + } + + initiator->SetSkill((EQ::skills::SkillType) skill_id, value); } void QuestManager::setallskill(int value) { QuestManagerCurrentQuestVars(); - if (!initiator) + if (!initiator) { return; - if (initiator) { - EQ::skills::SkillType sk; - for (sk = EQ::skills::Skill1HBlunt; sk <= EQ::skills::HIGHEST_SKILL; sk = (EQ::skills::SkillType)(sk + 1)) { - initiator->SetSkill(sk, value); - } + } + + for (const auto& s : EQ::skills::GetSkillTypeMap()) { + initiator->SetSkill(s.first, value); } } @@ -1468,10 +1543,10 @@ void QuestManager::itemlink(int item_id) { void QuestManager::signalwith(int npc_id, int signal_id, int wait_ms) { if(wait_ms > 0) { - STimerList.push_back(SignalTimer(wait_ms, npc_id, signal_id)); + STimerList.emplace_back(SignalTimer(wait_ms, npc_id, signal_id)); return; } else { - STimerList.push_back(SignalTimer(0, npc_id, signal_id)); + STimerList.emplace_back(SignalTimer(0, npc_id, signal_id)); return; } } @@ -1765,36 +1840,42 @@ void QuestManager::resume() { owner->CastToNPC()->ResumeWandering(); } -void QuestManager::addldonpoints(uint32 theme_id, int points) { +void QuestManager::addldonpoints(uint32 theme_id, int points) +{ QuestManagerCurrentQuestVars(); - if(initiator) + if (initiator) { initiator->UpdateLDoNPoints(theme_id, points); + } } -void QuestManager::addldonloss(uint32 theme_id) { +void QuestManager::addldonloss(uint32 theme_id) +{ QuestManagerCurrentQuestVars(); - if(initiator) { + if (initiator) { initiator->UpdateLDoNWinLoss(theme_id); } } -void QuestManager::addldonwin(uint32 theme_id) { +void QuestManager::addldonwin(uint32 theme_id) +{ QuestManagerCurrentQuestVars(); - if(initiator) { + if (initiator) { initiator->UpdateLDoNWinLoss(theme_id, true); } } -void QuestManager::removeldonloss(uint32 theme_id) { +void QuestManager::removeldonloss(uint32 theme_id) +{ QuestManagerCurrentQuestVars(); - if(initiator) { + if (initiator) { initiator->UpdateLDoNWinLoss(theme_id, false, true); } } -void QuestManager::removeldonwin(uint32 theme_id) { +void QuestManager::removeldonwin(uint32 theme_id) +{ QuestManagerCurrentQuestVars(); - if(initiator) { + if (initiator) { initiator->UpdateLDoNWinLoss(theme_id, true, true); } } @@ -1954,21 +2035,41 @@ void QuestManager::toggle_spawn_event(int event_id, bool enable, bool strict, bo bool QuestManager::has_zone_flag(int zone_id) { QuestManagerCurrentQuestVars(); - return initiator ? initiator->HasZoneFlag(zone_id) : false; + + if (!initiator) { + return false; + } + + return initiator->HasZoneFlag(zone_id); } void QuestManager::set_zone_flag(int zone_id) { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return; + } + initiator->SetZoneFlag(zone_id); } void QuestManager::clear_zone_flag(int zone_id) { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return; + } + initiator->ClearZoneFlag(zone_id); } void QuestManager::sethp(int64 hpperc) { QuestManagerCurrentQuestVars(); + + if (!owner) { + return; + } + int64 newhp = (owner->GetMaxHP() * (100 - hpperc)) / 100; owner->Damage(owner, newhp, SPELL_UNKNOWN, EQ::skills::SkillHandtoHand, false, 0, false); } @@ -2085,171 +2186,260 @@ bool QuestManager::isdooropen(uint32 doorid) { } return false; } + void QuestManager::npcrace(int race_id) { QuestManagerCurrentQuestVars(); + + if (!owner) { + return; + } + owner->SendIllusionPacket(race_id); } void QuestManager::npcgender(int gender_id) { QuestManagerCurrentQuestVars(); + + if (!owner) { + return; + } + owner->SendIllusionPacket(owner->GetRace(), gender_id); } + void QuestManager::npcsize(int newsize) { QuestManagerCurrentQuestVars(); + + if (!owner) { + return; + } + owner->ChangeSize(newsize, true); } + void QuestManager::npctexture(int newtexture) { QuestManagerCurrentQuestVars(); + + if (!owner) { + return; + } + owner->SendIllusionPacket(owner->GetRace(), 0xFF, newtexture); } void QuestManager::playerrace(int race_id) { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return; + } + initiator->SendIllusionPacket(race_id); } void QuestManager::playergender(int gender_id) { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return; + } + initiator->SendIllusionPacket(initiator->GetRace(), gender_id); } void QuestManager::playersize(int newsize) { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return; + } + initiator->ChangeSize(newsize, true); } void QuestManager::playertexture(int newtexture) { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return; + } + initiator->SendIllusionPacket(initiator->GetRace(), 0xFF, newtexture); } void QuestManager::playerfeature(const char* feature, int setting) { QuestManagerCurrentQuestVars(); - uint16 Race = initiator->GetRace(); - uint8 Gender = initiator->GetGender(); - uint8 Texture = 0xFF; - uint8 HelmTexture = 0xFF; - uint8 HairColor = initiator->GetHairColor(); - uint8 BeardColor = initiator->GetBeardColor(); - uint8 EyeColor1 = initiator->GetEyeColor1(); - uint8 EyeColor2 = initiator->GetEyeColor2(); - uint8 HairStyle = initiator->GetHairStyle(); - uint8 LuclinFace = initiator->GetLuclinFace(); - uint8 Beard = initiator->GetBeard(); - uint32 DrakkinHeritage = initiator->GetDrakkinHeritage(); - uint32 DrakkinTattoo = initiator->GetDrakkinTattoo(); - uint32 DrakkinDetails = initiator->GetDrakkinDetails(); - float Size = initiator->GetSize(); - if (!strcasecmp(feature,"race")) - Race = setting; - else if (!strcasecmp(feature,"gender")) - Gender = setting; - else if (!strcasecmp(feature,"texture")) - Texture = setting; - else if (!strcasecmp(feature,"helm")) - HelmTexture = setting; - else if (!strcasecmp(feature,"haircolor")) - HairColor = setting; - else if (!strcasecmp(feature,"beardcolor")) - BeardColor = setting; - else if (!strcasecmp(feature,"eyecolor1")) - EyeColor1 = setting; - else if (!strcasecmp(feature,"eyecolor2")) - EyeColor2 = setting; - else if (!strcasecmp(feature,"hair")) - HairStyle = setting; - else if (!strcasecmp(feature,"face")) - LuclinFace = setting; - else if (!strcasecmp(feature,"beard")) - Beard = setting; - else if (!strcasecmp(feature,"heritage")) - DrakkinHeritage = setting; - else if (!strcasecmp(feature,"tattoo")) - DrakkinTattoo = setting; - else if (!strcasecmp(feature,"details")) - DrakkinDetails = setting; - else if (!strcasecmp(feature,"size")) - Size = (float)setting / 10; //dividing by 10 to allow 1 decimal place for adjusting size - else + if (!initiator) { return; + } - initiator->SendIllusionPacket(Race, Gender, Texture, HelmTexture, HairColor, BeardColor, - EyeColor1, EyeColor2, HairStyle, LuclinFace, Beard, 0xFF, - DrakkinHeritage, DrakkinTattoo, DrakkinDetails, Size); + uint16 Race = initiator->GetRace(); + uint8 Gender = initiator->GetGender(); + uint8 Texture = 0xFF; + uint8 HelmTexture = 0xFF; + uint8 HairColor = initiator->GetHairColor(); + uint8 BeardColor = initiator->GetBeardColor(); + uint8 EyeColor1 = initiator->GetEyeColor1(); + uint8 EyeColor2 = initiator->GetEyeColor2(); + uint8 HairStyle = initiator->GetHairStyle(); + uint8 LuclinFace = initiator->GetLuclinFace(); + uint8 Beard = initiator->GetBeard(); + uint32 DrakkinHeritage = initiator->GetDrakkinHeritage(); + uint32 DrakkinTattoo = initiator->GetDrakkinTattoo(); + uint32 DrakkinDetails = initiator->GetDrakkinDetails(); + float Size = initiator->GetSize(); + + if (!strcasecmp(feature, "race")) { + Race = setting; + } else if (!strcasecmp(feature, "gender")) { + Gender = setting; + } else if (!strcasecmp(feature, "texture")) { + Texture = setting; + } else if (!strcasecmp(feature, "helm")) { + HelmTexture = setting; + } else if (!strcasecmp(feature, "haircolor")) { + HairColor = setting; + } else if (!strcasecmp(feature, "beardcolor")) { + BeardColor = setting; + } else if (!strcasecmp(feature, "eyecolor1")) { + EyeColor1 = setting; + } else if (!strcasecmp(feature, "eyecolor2")) { + EyeColor2 = setting; + } else if (!strcasecmp(feature, "hair")) { + HairStyle = setting; + } else if (!strcasecmp(feature, "face")) { + LuclinFace = setting; + } else if (!strcasecmp(feature, "beard")) { + Beard = setting; + } else if (!strcasecmp(feature, "heritage")) { + DrakkinHeritage = setting; + } else if (!strcasecmp(feature, "tattoo")) { + DrakkinTattoo = setting; + } else if (!strcasecmp(feature, "details")) { + DrakkinDetails = setting; + } else if (!strcasecmp(feature, "size")) { + Size = (float) setting / 10; //dividing by 10 to allow 1 decimal place for adjusting size + } else { + return; + } + + initiator->SendIllusionPacket( + Race, + Gender, + Texture, + HelmTexture, + HairColor, + BeardColor, + EyeColor1, + EyeColor2, + HairStyle, + LuclinFace, + Beard, + 0xFF, + DrakkinHeritage, + DrakkinTattoo, + DrakkinDetails, + Size + ); } void QuestManager::npcfeature(const char* feature, int setting) { QuestManagerCurrentQuestVars(); - uint16 Race = owner->GetRace(); - uint8 Gender = owner->GetGender(); - uint8 Texture = owner->GetTexture(); - uint8 HelmTexture = owner->GetHelmTexture(); - uint8 HairColor = owner->GetHairColor(); - uint8 BeardColor = owner->GetBeardColor(); - uint8 EyeColor1 = owner->GetEyeColor1(); - uint8 EyeColor2 = owner->GetEyeColor2(); - uint8 HairStyle = owner->GetHairStyle(); - uint8 LuclinFace = owner->GetLuclinFace(); - uint8 Beard = owner->GetBeard(); - uint32 DrakkinHeritage = owner->GetDrakkinHeritage(); - uint32 DrakkinTattoo = owner->GetDrakkinTattoo(); - uint32 DrakkinDetails = owner->GetDrakkinDetails(); - float Size = owner->GetSize(); - if (!strcasecmp(feature,"race")) - Race = setting; - else if (!strcasecmp(feature,"gender")) - Gender = setting; - else if (!strcasecmp(feature,"texture")) - Texture = setting; - else if (!strcasecmp(feature,"helm")) - HelmTexture = setting; - else if (!strcasecmp(feature,"haircolor")) - HairColor = setting; - else if (!strcasecmp(feature,"beardcolor")) - BeardColor = setting; - else if (!strcasecmp(feature,"eyecolor1")) - EyeColor1 = setting; - else if (!strcasecmp(feature,"eyecolor2")) - EyeColor2 = setting; - else if (!strcasecmp(feature,"hair")) - HairStyle = setting; - else if (!strcasecmp(feature,"face")) - LuclinFace = setting; - else if (!strcasecmp(feature,"beard")) - Beard = setting; - else if (!strcasecmp(feature,"heritage")) - DrakkinHeritage = setting; - else if (!strcasecmp(feature,"tattoo")) - DrakkinTattoo = setting; - else if (!strcasecmp(feature,"details")) - DrakkinDetails = setting; - else if (!strcasecmp(feature,"size")) - Size = (float)setting / 10; //dividing by 10 to allow 1 decimal place for adjusting size - else + if (!owner) { return; + } - owner->SendIllusionPacket(Race, Gender, Texture, HelmTexture, HairColor, BeardColor, - EyeColor1, EyeColor2, HairStyle, LuclinFace, Beard, 0xFF, - DrakkinHeritage, DrakkinTattoo, DrakkinDetails, Size); + uint16 Race = owner->GetRace(); + uint8 Gender = owner->GetGender(); + uint8 Texture = owner->GetTexture(); + uint8 HelmTexture = owner->GetHelmTexture(); + uint8 HairColor = owner->GetHairColor(); + uint8 BeardColor = owner->GetBeardColor(); + uint8 EyeColor1 = owner->GetEyeColor1(); + uint8 EyeColor2 = owner->GetEyeColor2(); + uint8 HairStyle = owner->GetHairStyle(); + uint8 LuclinFace = owner->GetLuclinFace(); + uint8 Beard = owner->GetBeard(); + uint32 DrakkinHeritage = owner->GetDrakkinHeritage(); + uint32 DrakkinTattoo = owner->GetDrakkinTattoo(); + uint32 DrakkinDetails = owner->GetDrakkinDetails(); + float Size = owner->GetSize(); + + if (!strcasecmp(feature, "race")) { + Race = setting; + } else if (!strcasecmp(feature, "gender")) { + Gender = setting; + } else if (!strcasecmp(feature, "texture")) { + Texture = setting; + } else if (!strcasecmp(feature, "helm")) { + HelmTexture = setting; + } else if (!strcasecmp(feature, "haircolor")) { + HairColor = setting; + } else if (!strcasecmp(feature, "beardcolor")) { + BeardColor = setting; + } else if (!strcasecmp(feature, "eyecolor1")) { + EyeColor1 = setting; + } else if (!strcasecmp(feature, "eyecolor2")) { + EyeColor2 = setting; + } else if (!strcasecmp(feature, "hair")) { + HairStyle = setting; + } else if (!strcasecmp(feature, "face")) { + LuclinFace = setting; + } else if (!strcasecmp(feature, "beard")) { + Beard = setting; + } else if (!strcasecmp(feature, "heritage")) { + DrakkinHeritage = setting; + } else if (!strcasecmp(feature, "tattoo")) { + DrakkinTattoo = setting; + } else if (!strcasecmp(feature, "details")) { + DrakkinDetails = setting; + } else if (!strcasecmp(feature, "size")) { + Size = (float) setting / 10; //dividing by 10 to allow 1 decimal place for adjusting size + } else { + return; + } + + owner->SendIllusionPacket( + Race, + Gender, + Texture, + HelmTexture, + HairColor, + BeardColor, + EyeColor1, + EyeColor2, + HairStyle, + LuclinFace, + Beard, + 0xFF, + DrakkinHeritage, + DrakkinTattoo, + DrakkinDetails, + Size + ); } void QuestManager::popup(const char *title, const char *text, uint32 popupid, uint32 buttons, uint32 Duration) { QuestManagerCurrentQuestVars(); - if(initiator) - initiator->SendPopupToClient(title, text, popupid, buttons, Duration); + + if (!initiator) { + return; + } + + initiator->SendPopupToClient(title, text, popupid, buttons, Duration); } int QuestManager::createbotcount(uint8 class_id) { @@ -2404,57 +2594,55 @@ bool QuestManager::createBot(const char *name, const char *lastname, uint8 level Bot* new_bot = new Bot(Bot::CreateDefaultNPCTypeStructForBot(name, lastname, level, race, botclass, gender), initiator); - if (new_bot) { - if (!new_bot->IsValidRaceClassCombo()) { - initiator->Message(Chat::White, "That Race/Class combination cannot be created."); - return false; - } + if (!new_bot->IsValidRaceClassCombo()) { + initiator->Message(Chat::White, "That Race/Class combination cannot be created."); + return false; + } - if (!new_bot->IsValidName()) { - initiator->Message( - Chat::White, - fmt::format( - "{} has invalid characters. You can use only the A-Z, a-z and _ characters in a bot name.", - new_bot->GetCleanName() - ).c_str() - ); - return false; - } + if (!new_bot->IsValidName()) { + initiator->Message( + Chat::White, + fmt::format( + "{} has invalid characters. You can use only the A-Z, a-z and _ characters in a bot name.", + new_bot->GetCleanName() + ).c_str() + ); + return false; + } - // Now that all validation is complete, we can save our newly created bot - if (!new_bot->Save()) { - initiator->Message( - Chat::White, - fmt::format( - "Unable to save {} as a bot.", - new_bot->GetCleanName() - ).c_str() - ); - } else { - initiator->Message( - Chat::White, - fmt::format( - "{} saved as bot ID {}.", - new_bot->GetCleanName(), - new_bot->GetBotID() - ).c_str() + // Now that all validation is complete, we can save our newly created bot + if (!new_bot->Save()) { + initiator->Message( + Chat::White, + fmt::format( + "Unable to save {} as a bot.", + new_bot->GetCleanName() + ).c_str() + ); + } else { + initiator->Message( + Chat::White, + fmt::format( + "{} saved as bot ID {}.", + new_bot->GetCleanName(), + new_bot->GetBotID() + ).c_str() + ); + + if (parse->PlayerHasQuestSub(EVENT_BOT_CREATE)) { + const auto &export_string = fmt::format( + "{} {} {} {} {}", + name, + new_bot->GetBotID(), + race, + botclass, + gender ); - if (parse->PlayerHasQuestSub(EVENT_BOT_CREATE)) { - const auto& export_string = fmt::format( - "{} {} {} {} {}", - name, - new_bot->GetBotID(), - race, - botclass, - gender - ); - - parse->EventPlayer(EVENT_BOT_CREATE, initiator, export_string, 0); - } - - return true; + parse->EventPlayer(EVENT_BOT_CREATE, initiator, export_string, 0); } + + return true; } } return false; @@ -2699,6 +2887,21 @@ void QuestManager::we(int type, const char *str) { ); } +void QuestManager::SendChannelMessage(uint8 channel_number, uint32 guild_id, uint8 language_id, uint8 language_skill, const char* message) +{ + worldserver.SendChannelMessage(0, 0, channel_number, guild_id, language_id, language_skill, message); +} + +void QuestManager::SendChannelMessage(Client* from, uint8 channel_number, uint32 guild_id, uint8 language_id, uint8 language_skill, const char* message) +{ + worldserver.SendChannelMessage(from, 0, channel_number, guild_id, language_id, language_skill, message); +} + +void QuestManager::SendChannelMessage(Client* from, const char* to, uint8 channel_number, uint32 guild_id, uint8 language_id, uint8 language_skill, const char* message) +{ + worldserver.SendChannelMessage(from, to, channel_number, guild_id, language_id, language_skill, message); +} + void QuestManager::message(uint32 type, const char *message) { QuestManagerCurrentQuestVars(); if (!initiator) { @@ -2727,47 +2930,40 @@ void QuestManager::whisper(const char *message) { int QuestManager::getlevel(uint8 type) { QuestManagerCurrentQuestVars(); - if (type == 0) - { - return (initiator->GetLevel()); - } - else if(type == 1) - { - Group *g = entity_list.GetGroupByClient(initiator); - if (g != nullptr) - return (g->GetAvgLevel()); - else - return 0; - } - else if(type == 2) - { - Raid *r = entity_list.GetRaidByClient(initiator); - if (r != nullptr) - return (r->GetAvgLevel()); - else - return 0; - } - else if(type == 3) - { - Raid *r = entity_list.GetRaidByClient(initiator); - if(r != nullptr) - { - return (r->GetAvgLevel()); - } - Group *g = entity_list.GetGroupByClient(initiator); - if(g != nullptr) - { - return (g->GetAvgLevel()); - } - else - return (initiator->GetLevel()); - } - else if(type == 4) - { - return (initiator->CastToClient()->GetLevel2()); - } - else + + if (!initiator) { return 0; + } + + if (type == 0) { + return initiator->GetLevel(); + } else if (type == 1) { + if (Group *g = entity_list.GetGroupByClient(initiator)) { + return g->GetAvgLevel(); + } else { + return 0; + } + } else if (type == 2) { + if (Raid *r = entity_list.GetRaidByClient(initiator)) { + return r->GetAvgLevel(); + } else { + return 0; + } + } else if (type == 3) { + if (Raid *r = entity_list.GetRaidByClient(initiator)) { + return r->GetAvgLevel(); + } + + if (Group *g = entity_list.GetGroupByClient(initiator)) { + return g->GetAvgLevel(); + } else { + return initiator->GetLevel(); + } + } else if (type == 4) { + return initiator->CastToClient()->GetLevel2(); + } else { + return 0; + } } uint16 QuestManager::CreateGroundObject(uint32 itemid, const glm::vec4& position, uint32 decay_time) @@ -2792,36 +2988,33 @@ void QuestManager::ModifyNPCStat(std::string stat, std::string value) } } -int QuestManager::collectitems_processSlot(int16 slot_id, uint32 item_id, - bool remove) -{ +int QuestManager::collectitems_processSlot( + int16 slot_id, + uint32 item_id, + bool remove +) { QuestManagerCurrentQuestVars(); - EQ::ItemInstance *item = nullptr; - int quantity = 0; - item = initiator->GetInv().GetItem(slot_id); - - // If we have found matching item, add quantity - if (item && item->GetID() == item_id) - { - // If item is stackable, add its charges (quantity) - if (item->IsStackable()) - { - quantity = item->GetCharges(); - } - else - { - quantity = 1; - } - - // Remove item from inventory - if (remove) - { - initiator->DeleteItemInInventory(slot_id, 0, true); - } + if (!initiator) { + return 0; } - return quantity; + const auto item = initiator->GetInv().GetItem(slot_id); + + // If we have found matching item, add quantity + if (item && item->GetID() == item_id) { + // If item is stackable, add its charges (quantity) + const auto quantity = item->IsStackable() ? item->GetCharges() : 1; + + // Remove item from inventory + if (remove) { + initiator->DeleteItemInInventory(slot_id, 0, true); + } + + return quantity; + } + + return 0; } // Returns number of item_id that exist in inventory @@ -2831,13 +3024,11 @@ int QuestManager::collectitems(uint32 item_id, bool remove) int quantity = 0; int slot_id; - for (slot_id = EQ::invslot::GENERAL_BEGIN; slot_id <= EQ::invslot::GENERAL_END; ++slot_id) - { + for (slot_id = EQ::invslot::GENERAL_BEGIN; slot_id <= EQ::invslot::GENERAL_END; ++slot_id) { quantity += collectitems_processSlot(slot_id, item_id, remove); } - for (slot_id = EQ::invbag::GENERAL_BAGS_BEGIN; slot_id <= EQ::invbag::GENERAL_BAGS_END; ++slot_id) - { + for (slot_id = EQ::invbag::GENERAL_BAGS_BEGIN; slot_id <= EQ::invbag::GENERAL_BAGS_END; ++slot_id) { quantity += collectitems_processSlot(slot_id, item_id, remove); } @@ -2846,11 +3037,21 @@ int QuestManager::collectitems(uint32 item_id, bool remove) int QuestManager::countitem(uint32 item_id) { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return 0; + } + return initiator->CountItem(item_id); } void QuestManager::removeitem(uint32 item_id, uint32 quantity) { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return; + } + initiator->RemoveItem(item_id, quantity); } @@ -3295,9 +3496,17 @@ uint8 QuestManager::FactionValue() { QuestManagerCurrentQuestVars(); FACTION_VALUE oldfac; - uint8 newfac = 0; - if(initiator && owner->IsNPC()) { - oldfac = initiator->GetFactionLevel(initiator->GetID(), owner->GetID(), initiator->GetFactionRace(), initiator->GetClass(), initiator->GetDeity(), owner->GetPrimaryFaction(), owner); + uint8 newfac = 0; + if (initiator && owner && owner->IsNPC()) { + oldfac = initiator->GetFactionLevel( + initiator->GetID(), + owner->GetID(), + initiator->GetFactionRace(), + initiator->GetClass(), + initiator->GetDeity(), + owner->GetPrimaryFaction(), + owner + ); // now, reorder the faction to have it make sense (higher values are better) switch (oldfac) { @@ -3336,62 +3545,76 @@ uint8 QuestManager::FactionValue() void QuestManager::enabletitle(int titleset) { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return; + } + initiator->EnableTitle(titleset); } bool QuestManager::checktitle(int titleset) { QuestManagerCurrentQuestVars(); - return initiator ? initiator->CheckTitle(titleset) : false; + + if (!initiator) { + return false; + } + + return initiator->CheckTitle(titleset); } void QuestManager::removetitle(int titleset) { QuestManagerCurrentQuestVars(); + + if (!initiator) { + return; + } + initiator->RemoveTitle(titleset); } void QuestManager::wearchange(uint8 slot, uint16 texture, uint32 hero_forge_model /*= 0*/, uint32 elite_material /*= 0*/) { QuestManagerCurrentQuestVars(); - if(owner){ - owner->SendTextureWC(slot, texture, hero_forge_model, elite_material); - if(owner->IsNPC()) { - owner->CastToNPC()->NPCSlotTexture(slot, texture); - } + + if (!owner) { + return; + } + + owner->SendTextureWC(slot, texture, hero_forge_model, elite_material); + if (owner->IsNPC()) { + owner->CastToNPC()->NPCSlotTexture(slot, texture); } } void QuestManager::voicetell(const char *str, int macronum, int racenum, int gendernum) { QuestManagerCurrentQuestVars(); - if(owner && str) - { + + if (!owner) { + return; + } + + if (str) { Client *c = entity_list.GetClientByName(str); - if(c) - { + if (c) { auto outapp = new EQApplicationPacket(OP_VoiceMacroOut, sizeof(VoiceMacroOut_Struct)); - - VoiceMacroOut_Struct* vmo = (VoiceMacroOut_Struct*)outapp->pBuffer; - + auto* vmo = (VoiceMacroOut_Struct *) outapp->pBuffer; strn0cpy(vmo->From, owner->GetCleanName(), sizeof(vmo->From)); - - vmo->Type = 1; - - vmo->Voice = (racenum * 2) + gendernum; - + vmo->Type = 1; + vmo->Voice = (racenum * 2) + gendernum; vmo->MacroNumber = macronum; - c->QueuePacket(outapp); - safe_delete(outapp); - } - else + } else { LogQuests("from [{}]. Client [{}] not found", owner->GetName(), str); + } } } void QuestManager::SendMail(const char *to, const char *from, const char *subject, const char *message) { - if(to == nullptr || from == nullptr || subject == nullptr || message == nullptr) { + if (!to || !from || !subject || !message) { return; } @@ -3535,71 +3758,71 @@ std::string QuestManager::GetEncounter() const { void QuestManager::UpdateZoneHeader(std::string type, std::string value) { if (strcasecmp(type.c_str(), "ztype") == 0) - zone->newzone_data.ztype = Strings::ToInt(value.c_str()); + zone->newzone_data.ztype = Strings::ToInt(value); else if (strcasecmp(type.c_str(), "fog_red") == 0) { for (int i = 0; i < 4; i++) { - zone->newzone_data.fog_red[i] = Strings::ToInt(value.c_str()); + zone->newzone_data.fog_red[i] = Strings::ToInt(value); } } else if (strcasecmp(type.c_str(), "fog_green") == 0) { for (int i = 0; i < 4; i++) { - zone->newzone_data.fog_green[i] = Strings::ToInt(value.c_str()); + zone->newzone_data.fog_green[i] = Strings::ToInt(value); } } else if (strcasecmp(type.c_str(), "fog_blue") == 0) { for (int i = 0; i < 4; i++) { - zone->newzone_data.fog_blue[i] = Strings::ToInt(value.c_str()); + zone->newzone_data.fog_blue[i] = Strings::ToInt(value); } } else if (strcasecmp(type.c_str(), "fog_minclip") == 0) { for (int i = 0; i < 4; i++) { - zone->newzone_data.fog_minclip[i] = Strings::ToFloat(value.c_str()); + zone->newzone_data.fog_minclip[i] = Strings::ToFloat(value); } } else if (strcasecmp(type.c_str(), "fog_maxclip") == 0) { for (int i = 0; i < 4; i++) { - zone->newzone_data.fog_maxclip[i] = Strings::ToFloat(value.c_str()); + zone->newzone_data.fog_maxclip[i] = Strings::ToFloat(value); } } else if (strcasecmp(type.c_str(), "gravity") == 0) { - zone->newzone_data.gravity = Strings::ToFloat(value.c_str()); + zone->newzone_data.gravity = Strings::ToFloat(value); } else if (strcasecmp(type.c_str(), "time_type") == 0) { - zone->newzone_data.time_type = Strings::ToInt(value.c_str()); + zone->newzone_data.time_type = Strings::ToInt(value); } else if (strcasecmp(type.c_str(), "rain_chance") == 0) { for (int i = 0; i < 4; i++) { - zone->newzone_data.rain_chance[i] = Strings::ToInt(value.c_str()); + zone->newzone_data.rain_chance[i] = Strings::ToInt(value); } } else if (strcasecmp(type.c_str(), "rain_duration") == 0) { for (int i = 0; i < 4; i++) { - zone->newzone_data.rain_duration[i] = Strings::ToInt(value.c_str()); + zone->newzone_data.rain_duration[i] = Strings::ToInt(value); } } else if (strcasecmp(type.c_str(), "snow_chance") == 0) { for (int i = 0; i < 4; i++) { - zone->newzone_data.snow_chance[i] = Strings::ToInt(value.c_str()); + zone->newzone_data.snow_chance[i] = Strings::ToInt(value); } } else if (strcasecmp(type.c_str(), "snow_duration") == 0) { for (int i = 0; i < 4; i++) { - zone->newzone_data.snow_duration[i] = Strings::ToInt(value.c_str()); + zone->newzone_data.snow_duration[i] = Strings::ToInt(value); } } else if (strcasecmp(type.c_str(), "sky") == 0) { - zone->newzone_data.sky = Strings::ToInt(value.c_str()); + zone->newzone_data.sky = Strings::ToInt(value); } else if (strcasecmp(type.c_str(), "safe_x") == 0) { - zone->newzone_data.safe_x = Strings::ToFloat(value.c_str()); + zone->newzone_data.safe_x = Strings::ToFloat(value); } else if (strcasecmp(type.c_str(), "safe_y") == 0) { - zone->newzone_data.safe_y = Strings::ToFloat(value.c_str()); + zone->newzone_data.safe_y = Strings::ToFloat(value); } else if (strcasecmp(type.c_str(), "safe_z") == 0) { - zone->newzone_data.safe_z = Strings::ToFloat(value.c_str()); + zone->newzone_data.safe_z = Strings::ToFloat(value); } else if (strcasecmp(type.c_str(), "max_z") == 0) { - zone->newzone_data.max_z = Strings::ToFloat(value.c_str()); + zone->newzone_data.max_z = Strings::ToFloat(value); } else if (strcasecmp(type.c_str(), "underworld") == 0) { - zone->newzone_data.underworld = Strings::ToFloat(value.c_str()); + zone->newzone_data.underworld = Strings::ToFloat(value); } else if (strcasecmp(type.c_str(), "minclip") == 0) { - zone->newzone_data.minclip = Strings::ToFloat(value.c_str()); + zone->newzone_data.minclip = Strings::ToFloat(value); } else if (strcasecmp(type.c_str(), "maxclip") == 0) { - zone->newzone_data.maxclip = Strings::ToFloat(value.c_str()); + zone->newzone_data.maxclip = Strings::ToFloat(value); } else if (strcasecmp(type.c_str(), "fog_density") == 0) { - zone->newzone_data.fog_density = Strings::ToFloat(value.c_str()); + zone->newzone_data.fog_density = Strings::ToFloat(value); } else if (strcasecmp(type.c_str(), "suspendbuffs") == 0) { - zone->newzone_data.suspend_buffs = Strings::ToInt(value.c_str()); + zone->newzone_data.suspend_buffs = Strings::ToInt(value); } else if (strcasecmp(type.c_str(), "lavadamage") == 0) { - zone->newzone_data.lava_damage = Strings::ToInt(value.c_str()); + zone->newzone_data.lava_damage = Strings::ToInt(value); } else if (strcasecmp(type.c_str(), "minlavadamage") == 0) { - zone->newzone_data.min_lava_damage = Strings::ToInt(value.c_str()); + zone->newzone_data.min_lava_damage = Strings::ToInt(value); } auto outapp = new EQApplicationPacket(OP_NewZone, sizeof(NewZone_Struct)); @@ -3611,14 +3834,14 @@ void QuestManager::UpdateZoneHeader(std::string type, std::string value) { EQ::ItemInstance *QuestManager::CreateItem(uint32 item_id, int16 charges, uint32 augment_one, uint32 augment_two, uint32 augment_three, uint32 augment_four, uint32 augment_five, uint32 augment_six, bool attuned) const { if (database.GetItem(item_id)) { return database.CreateItem( - item_id, - charges, - augment_one, - augment_two, - augment_three, - augment_four, - augment_five, - augment_six, + item_id, + charges, + augment_one, + augment_two, + augment_three, + augment_four, + augment_five, + augment_six, attuned ); } diff --git a/zone/questmgr.h b/zone/questmgr.h index cdf1051f2..be31f4a65 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -348,6 +348,9 @@ public: bool DoAugmentSlotsMatch(uint32 item_one, uint32 item_two); int8 DoesAugmentFit(EQ::ItemInstance* inst, uint32 augment_id, uint8 augment_slot = 255); void SendPlayerHandinEvent(); + void SendChannelMessage(uint8 channel_number, uint32 guild_id, uint8 language_id, uint8 language_skill, const char* message); + void SendChannelMessage(Client* from, uint8 channel_number, uint32 guild_id, uint8 language_id, uint8 language_skill, const char* message); + void SendChannelMessage(Client* from, const char* to, uint8 channel_number, uint32 guild_id, uint8 language_id, uint8 language_skill, const char* message); Bot *GetBot() const; Client *GetInitiator() const; @@ -391,8 +394,6 @@ private: std::list QTimerList; std::list STimerList; std::list PTimerList; - size_t item_timers; - }; extern QuestManager quest_manager; diff --git a/zone/raids.cpp b/zone/raids.cpp index 43f27530d..869bb867f 100644 --- a/zone/raids.cpp +++ b/zone/raids.cpp @@ -631,7 +631,7 @@ uint32 Raid::GetPlayerIndex(Client *c) Client *Raid::GetClientByIndex(uint16 index) { - if (index > MAX_RAID_MEMBERS) { + if (index >= MAX_RAID_MEMBERS) { return nullptr; } @@ -1126,8 +1126,8 @@ void Raid::SendRaidAdd(const char *who, Client *to) auto ram = (RaidAddMember_Struct*)outapp->pBuffer; ram->raidGen.action = raidAdd; ram->raidGen.parameter = m.group_number; - strn0cpy(ram->raidGen.leader_name, m.member_name, 64); - strn0cpy(ram->raidGen.player_name, m.member_name, 64); + strn0cpy(ram->raidGen.leader_name, m.member_name, sizeof(ram->raidGen.leader_name)); + strn0cpy(ram->raidGen.player_name, m.member_name, sizeof(ram->raidGen.player_name)); ram->_class = m._class; ram->level = m.level; ram->isGroupLeader = m.is_group_leader; @@ -1148,8 +1148,8 @@ void Raid::SendRaidAddAll(const char *who) auto ram = (RaidAddMember_Struct*)outapp->pBuffer; ram->raidGen.action = raidAdd; ram->raidGen.parameter = m.group_number; - strcpy(ram->raidGen.leader_name, m.member_name); - strcpy(ram->raidGen.player_name, m.member_name); + strn0cpy(ram->raidGen.leader_name, m.member_name, sizeof(ram->raidGen.leader_name)); + strn0cpy(ram->raidGen.player_name, m.member_name, sizeof(ram->raidGen.player_name)); ram->isGroupLeader = m.is_group_leader; ram->_class = m._class; ram->level = m.level; @@ -1361,33 +1361,31 @@ void Raid::SendGroupUpdate(Client *to) auto outapp = new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupUpdate2_Struct)); auto gu = (GroupUpdate2_Struct*)outapp->pBuffer; gu->action = groupActUpdate; - int i = 0; uint32 grp = GetGroup(to->GetName()); if (grp >= MAX_RAID_GROUPS) { safe_delete(outapp); return; } + int i = 0; for (const auto& m : members) { if (m.group_number == grp && strlen(m.member_name) > 0) { if (m.is_group_leader) { - strn0cpy(gu->leadersname, m.member_name, 64); + strn0cpy(gu->leadersname, m.member_name, sizeof(gu->leadersname)); if (strcmp(to->GetName(), m.member_name) != 0) { - strn0cpy(gu->membername[i], m.member_name, 64); - i++; + strn0cpy(gu->membername[i], m.member_name, sizeof(gu->membername[i])); + ++i; } } - else { - if (strcmp(to->GetName(), m.member_name) != 0) { - strn0cpy(gu->membername[i], m.member_name, 64); - i++; - } + else if (strcmp(to->GetName(), m.member_name) != 0) { + strn0cpy(gu->membername[i], m.member_name, sizeof(gu->membername[i])); + ++i; } } } if (strlen(gu->leadersname) < 1) { - strn0cpy(gu->leadersname, to->GetName(), 64); + strn0cpy(gu->leadersname, to->GetName(), sizeof(gu->leadersname)); } strn0cpy(gu->yourname, to->GetName(), 64); @@ -1404,7 +1402,7 @@ void Raid::GroupUpdate(uint32 gid, bool initial) } for (const auto& m : members) { - if (strlen(m.member_name) > 0 && m.group_number == gid && m.member) { + if (m.member && m.group_number == gid && strlen(m.member_name) > 0) { SendGroupUpdate(m.member); SendGroupLeadershipAA(m.member, gid); } @@ -2204,4 +2202,4 @@ void Raid::SetNewRaidLeader(uint32 i) } } } -} \ No newline at end of file +} diff --git a/zone/raids.h b/zone/raids.h index d3fd1fe3c..5b73ce063 100644 --- a/zone/raids.h +++ b/zone/raids.h @@ -112,7 +112,6 @@ public: void SetRaidLeader(const char *wasLead, const char *name); bool Process(); - bool IsRaid() { return true; } void AddMember(Client *c, uint32 group = 0xFFFFFFFF, bool rleader=false, bool groupleader=false, bool looter=false); void AddBot(Bot* b, uint32 group = 0xFFFFFFFF, bool raid_leader=false, bool group_leader=false, bool looter=false); @@ -147,7 +146,7 @@ public: void AddRaidLooter(const char* looter); void RemoveRaidLooter(const char* looter); - inline void SetRaidMOTD(std::string in_motd) { motd = in_motd; }; + inline void SetRaidMOTD(const std::string& in_motd) { motd = in_motd; }; //util func //keeps me from having to keep iterating through the list @@ -263,7 +262,6 @@ public: protected: Client *leader; bool locked; - uint16 numMembers; uint32 LootType; bool disbandCheck; bool forceDisband; diff --git a/zone/raycast_mesh.cpp b/zone/raycast_mesh.cpp index 0fa411836..8873c293e 100644 --- a/zone/raycast_mesh.cpp +++ b/zone/raycast_mesh.cpp @@ -1,7 +1,6 @@ #include "raycast_mesh.h" #include #include -#include #include #include #include diff --git a/zone/shared_task_zone_messaging.cpp b/zone/shared_task_zone_messaging.cpp index 379b5d6f8..8009dc944 100644 --- a/zone/shared_task_zone_messaging.cpp +++ b/zone/shared_task_zone_messaging.cpp @@ -2,13 +2,8 @@ #include "../common/shared_tasks.h" #include "../common/servertalk.h" #include "client.h" -#include "../common/repositories/character_data_repository.h" -#include "../common/repositories/shared_task_members_repository.h" -#include #include -#include -#include #include void SharedTaskZoneMessaging::HandleWorldMessage(ServerPacket *pack) diff --git a/zone/spawn2.cpp b/zone/spawn2.cpp index 5c98fcd9a..42354603d 100644 --- a/zone/spawn2.cpp +++ b/zone/spawn2.cpp @@ -26,7 +26,6 @@ #include "worldserver.h" #include "zone.h" #include "zonedb.h" -#include "../common/zone_store.h" extern EntityList entity_list; extern Zone* zone; @@ -150,7 +149,7 @@ bool Spawn2::Process() { //grab our spawn group SpawnGroup *spawn_group = zone->spawn_group_list.GetSpawnGroup(spawngroup_id_); - if (NPCPointerValid() && (spawn_group->despawn == 0 || condition_id != 0)) { + if (NPCPointerValid() && (spawn_group && spawn_group->despawn == 0 || condition_id != 0)) { return true; } @@ -430,114 +429,6 @@ void Spawn2::DeathReset(bool realdeath) } } -bool ZoneDatabase::PopulateZoneSpawnListClose(uint32 zoneid, LinkedList &spawn2_list, int16 version, const glm::vec4& client_position, uint32 repop_distance) -{ - std::unordered_map spawn_times; - - float mob_distance = 0; - - timeval tv; - gettimeofday(&tv, nullptr); - - /* Bulk Load NPC Types Data into the cache */ - content_db.LoadNPCTypesData(0, true); - - std::string spawn_query = StringFormat( - "SELECT " - "respawn_times.id, " - "respawn_times.`start`, " - "respawn_times.duration " - "FROM " - "respawn_times " - "WHERE instance_id = %u", - zone->GetInstanceID() - ); - auto results = QueryDatabase(spawn_query); - for (auto row = results.begin(); row != results.end(); ++row) { - uint32 start_duration = Strings::ToInt(row[1]) > 0 ? Strings::ToInt(row[1]) : 0; - uint32 end_duration = Strings::ToInt(row[2]) > 0 ? Strings::ToInt(row[2]) : 0; - - /* Our current time was expired */ - if ((start_duration + end_duration) <= tv.tv_sec) { - spawn_times[Strings::ToInt(row[0])] = 0; - } - /* We still have time left on this timer */ - else { - spawn_times[Strings::ToInt(row[0])] = ((start_duration + end_duration) - tv.tv_sec) * 1000; - } - } - - const char *zone_name = ZoneName(zoneid); - std::string query = StringFormat( - "SELECT " - "id, " - "spawngroupID, " - "x, " - "y, " - "z, " - "heading, " - "respawntime, " - "variance, " - "pathgrid, " - "path_when_zone_idle, " - "_condition, " - "cond_value, " - "enabled, " - "animation " - "FROM " - "spawn2 " - "WHERE zone = '%s' AND (version = %u OR version = -1) ", - zone_name, - version - ); - results = database.QueryDatabase(query); - - if (!results.Success()) { - return false; - } - - for (auto row = results.begin(); row != results.end(); ++row) { - - uint32 spawn_time_left = 0; - Spawn2* new_spawn = 0; - bool perl_enabled = Strings::ToInt(row[12]) == 1 ? true : false; - - if (spawn_times.count(Strings::ToInt(row[0])) != 0) - spawn_time_left = spawn_times[Strings::ToInt(row[0])]; - - glm::vec4 point; - point.x = Strings::ToFloat(row[2]); - point.y = Strings::ToFloat(row[3]); - - mob_distance = DistanceNoZ(client_position, point); - - if (mob_distance > repop_distance) - continue; - - new_spawn = new Spawn2( - Strings::ToInt(row[0]), // uint32 in_spawn2_id - Strings::ToInt(row[1]), // uint32 spawngroup_id - Strings::ToFloat(row[2]), // float in_x - Strings::ToFloat(row[3]), // float in_y - Strings::ToFloat(row[4]), // float in_z - Strings::ToFloat(row[5]), // float in_heading - Strings::ToInt(row[6]), // uint32 respawn - Strings::ToInt(row[7]), // uint32 variance - spawn_time_left, // uint32 timeleft - Strings::ToInt(row[8]), // uint32 grid - (bool)Strings::ToInt(row[9]), // bool path_when_zone_idle - Strings::ToInt(row[10]), // uint16 in_cond_id - Strings::ToInt(row[11]), // int16 in_min_value - perl_enabled, // bool in_enabled - (EmuAppearance)Strings::ToInt(row[13]) // EmuAppearance anim - ); - - spawn2_list.Insert(new_spawn); - } - - return true; -} - bool ZoneDatabase::PopulateZoneSpawnList(uint32 zoneid, LinkedList &spawn2_list, int16 version) { std::unordered_map spawn_times; @@ -641,37 +532,6 @@ bool ZoneDatabase::PopulateZoneSpawnList(uint32 zoneid, LinkedList &spa return true; } - -Spawn2* ZoneDatabase::LoadSpawn2(LinkedList &spawn2_list, uint32 spawn2id, uint32 timeleft) { - - std::string query = StringFormat("SELECT id, spawngroupID, x, y, z, heading, " - "respawntime, variance, pathgrid, " - "path_when_zone_idle, _condition, " - "cond_value, enabled, animation FROM spawn2 " - "WHERE id = %i", spawn2id); - auto results = QueryDatabase(query); - if (!results.Success()) { - return nullptr; - } - - if (results.RowCount() != 1) { - return nullptr; - } - - auto row = results.begin(); - - bool perl_enabled = Strings::ToInt(row[12]) == 1 ? true : false; - - auto newSpawn = new Spawn2(Strings::ToInt(row[0]), Strings::ToInt(row[1]), Strings::ToFloat(row[2]), - Strings::ToFloat(row[3]), Strings::ToFloat(row[4]), Strings::ToFloat(row[5]), Strings::ToInt(row[6]), Strings::ToInt(row[7]), - timeleft, Strings::ToInt(row[8]), (bool) Strings::ToInt(row[9]), Strings::ToInt(row[10]), - Strings::ToInt(row[11]), perl_enabled, (EmuAppearance)Strings::ToInt(row[13])); - - spawn2_list.Insert(newSpawn); - - return newSpawn; -} - bool ZoneDatabase::CreateSpawn2(Client *client, uint32 spawngroup, const char* zone, const glm::vec4& position, uint32 respawn, uint32 variance, uint16 condition, int16 cond_value) { diff --git a/zone/spawngroup.cpp b/zone/spawngroup.cpp index 3763caf89..a25fbedfc 100644 --- a/zone/spawngroup.cpp +++ b/zone/spawngroup.cpp @@ -24,7 +24,6 @@ #include "spawngroup.h" #include "zone.h" #include "zonedb.h" -#include "../common/zone_store.h" #include "../common/repositories/criteria/content_filter_criteria.h" extern EntityList entity_list; diff --git a/zone/special_attacks.cpp b/zone/special_attacks.cpp index 59048c765..fd48b49d7 100644 --- a/zone/special_attacks.cpp +++ b/zone/special_attacks.cpp @@ -133,7 +133,7 @@ int Mob::GetBaseSkillDamage(EQ::skills::SkillType skill, Mob *target) float ac_bonus = 0.0f; const EQ::ItemInstance *inst = nullptr; if (IsClient()) { - if (HasShieldEquiped()) { + if (HasShieldEquipped()) { inst = CastToClient()->GetInv().GetItem(EQ::invslot::slotSecondary); } else if (HasTwoHanderEquipped()) { inst = CastToClient()->GetInv().GetItem(EQ::invslot::slotPrimary); @@ -241,7 +241,7 @@ void Mob::DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int32 bas hate += item->GetItem()->AC; } const EQ::ItemData *itm = item->GetItem(); - auto fbash = GetFuriousBash(itm->Focus.Effect); + auto fbash = GetSpellFuriousBash(itm->Focus.Effect); hate = hate * (100 + fbash) / 100; if (fbash) MessageString(Chat::FocusEffect, GLOWS_RED, itm->Name); @@ -1730,7 +1730,13 @@ void NPC::DoClassAttacks(Mob *target) { //general stuff, for all classes.... //only gets used when their primary ability get used too - if (taunting && HasOwner() && target->IsNPC() && target->GetBodyType() != BT_Undead && taunt_time) { + if ( + IsTaunting() && + HasOwner() && + target->IsNPC() && + target->GetBodyType() != BT_Undead && + taunt_time + ) { GetOwner()->MessageString(Chat::PetResponse, PET_TAUNTING); Taunt(target->CastToNPC(), false); } @@ -2341,7 +2347,7 @@ void Mob::DoMeleeSkillAttackDmg(Mob *other, int32 weapon_damage, EQ::skills::Ski hate += item->GetItem()->AC; } const EQ::ItemData *itm = item->GetItem(); - hate = hate * (100 + GetFuriousBash(itm->Focus.Effect)) / 100; + hate = hate * (100 + GetSpellFuriousBash(itm->Focus.Effect)) / 100; } } diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index a83240480..3940139a6 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -22,7 +22,6 @@ #include "../common/global_define.h" #include "../common/item_instance.h" #include "../common/rulesys.h" -#include "../common/skills.h" #include "../common/spdat.h" #include "../common/data_verification.h" #include "../common/misc_functions.h" @@ -147,9 +146,10 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove if (spells[spell_id].hit_number > 0) { int numhit = spells[spell_id].hit_number; - - numhit += numhit * caster->GetFocusEffect(focusFcLimitUse, spell_id) / 100; - numhit += caster->GetFocusEffect(focusIncreaseNumHits, spell_id); + if (caster) { + numhit += numhit * caster->GetFocusEffect(focusFcLimitUse, spell_id) / 100; + numhit += caster->GetFocusEffect(focusIncreaseNumHits, spell_id); + } buffs[buffslot].hit_number = numhit; } @@ -207,16 +207,16 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove } } - if(IsVirusSpell(spell_id)) { - + if (IsVirusSpell(spell_id) && buffslot > -1) { if (!viral_timer.Enabled()) { viral_timer.Start(1000); } - buffs[buffslot].virus_spread_time = zone->random.Int(GetViralMinSpreadTime(spell_id), GetViralMaxSpreadTime(spell_id)); + + buffs[buffslot].virus_spread_time = zone->random.Int(GetSpellViralMinimumSpreadTime(spell_id), GetSpellViralMaximumSpreadTime(spell_id)); } - if (!IsPowerDistModSpell(spell_id)) + if (!IsDistanceModifierSpell(spell_id)) SetSpellPowerDistanceMod(0); bool spell_trigger_cast_complete = false; //Used with SE_Spell_Trigger and SE_Chance_Best_in_Spell_Grp, true when spell has been triggered. @@ -262,7 +262,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove // SE_CurrentHP is calculated at first tick if its a dot/buff if (buffslot >= 0) { //This is here so dots with hit counters tic down on initial cast. - if (effect_value < 0) { + if (caster && effect_value < 0) { caster->GetActDoTDamage(spell_id, effect_value, this, false); } break; @@ -819,20 +819,20 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove // define spells with fixed duration // charm spells with -1 in field 209 are all of fixed duration, so lets use that instead of spell_ids - if(spells[spell_id].no_resist) + if (spells[spell_id].no_resist) { bBreak = true; - - if (!bBreak) - { - int resistMod = static_cast(partial) + (GetCHA()/25); - resistMod = resistMod > 100 ? 100 : resistMod; - buffs[buffslot].ticsremaining = resistMod * buffs[buffslot].ticsremaining / 100; } - if (IsClient() || IsBot()) - { - if(buffs[buffslot].ticsremaining > RuleI(Character, MaxCharmDurationForPlayerCharacter)) + if (buffslot > -1) { + if (!bBreak) { + int resistMod = static_cast(partial) + (GetCHA() / 25); + resistMod = resistMod > 100 ? 100 : resistMod; + buffs[buffslot].ticsremaining = resistMod * buffs[buffslot].ticsremaining / 100; + } + + if (IsOfClientBot() && buffs[buffslot].ticsremaining > RuleI(Character, MaxCharmDurationForPlayerCharacter)) { buffs[buffslot].ticsremaining = RuleI(Character, MaxCharmDurationForPlayerCharacter); + } } break; @@ -887,8 +887,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove #ifdef SPELL_EFFECT_SPAM snprintf(effect_desc, _EDLEN, "Fear: %+i", effect_value); #endif - if (IsClient() || IsBot()) - { + if (IsOfClientBot() && buffslot > -1) { if (buffs[buffslot].ticsremaining > RuleI(Character, MaxFearDurationForPlayerCharacter)) { buffs[buffslot].ticsremaining = RuleI(Character, MaxFearDurationForPlayerCharacter); } @@ -902,13 +901,11 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove } CalculateNewFearpoint(); - if (currently_fleeing) - { + if (currently_fleeing) { break; } } - else - { + else if (buffslot > -1) { Stun(buffs[buffslot].ticsremaining * 6000 - (6000 - tic_timer.GetRemainingTime())); } break; @@ -1307,8 +1304,9 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove #ifdef SPELL_EFFECT_SPAM snprintf(effect_desc, _EDLEN, "Invulnerability"); #endif - if(spell_id==4789) // Touch of the Divine - Divine Save - buffs[buffslot].ticsremaining = spells[spell_id].buff_duration; // Prevent focus/aa buff extension + if (spell_id == 4789 && buffslot > -1) { // Touch of the Divine - Divine Save + buffs[buffslot].ticsremaining = spells[spell_id].buff_duration; + } // Prevent focus/aa buff extension SetInvul(true); break; @@ -1333,7 +1331,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove snprintf(effect_desc, _EDLEN, "Blind: %+i", effect_value); #endif // 'cure blind' - if (BeneficialSpell(spell_id) && spells[spell_id].buff_duration == 0) { + if (IsBeneficialSpell(spell_id) && spells[spell_id].buff_duration == 0) { int buff_count = GetMaxBuffSlots(); for (int slot = 0; slot < buff_count; slot++) { if (IsValidSpell(buffs[slot].spellid) && IsEffectInSpell(buffs[slot].spellid, SE_Blind)) { @@ -1355,7 +1353,9 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove #ifdef SPELL_EFFECT_SPAM snprintf(effect_desc, _EDLEN, "Melee Absorb Rune: %+i", effect_value); #endif - buffs[buffslot].melee_rune = effect_value; + if (buffslot > -1) { + buffs[buffslot].melee_rune = effect_value; + } break; } @@ -1364,47 +1364,60 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove #ifdef SPELL_EFFECT_SPAM snprintf(effect_desc, _EDLEN, "Spell Absorb Rune: %+i", effect_value); #endif - if(effect_value > 0) + if (effect_value > 0 && buffslot > -1) { buffs[buffslot].magic_rune = effect_value; + } break; } case SE_MitigateMeleeDamage: { - buffs[buffslot].melee_rune = spells[spell_id].max_value[i]; + if (buffslot > -1) { + buffs[buffslot].melee_rune = spells[spell_id].max_value[i]; + } break; } case SE_MeleeThresholdGuard: { - buffs[buffslot].melee_rune = spells[spell_id].max_value[i]; + if (buffslot > -1) { + buffs[buffslot].melee_rune = spells[spell_id].max_value[i]; + } break; } case SE_SpellThresholdGuard: { - buffs[buffslot].magic_rune = spells[spell_id].max_value[i]; + if (buffslot > -1) { + buffs[buffslot].magic_rune = spells[spell_id].max_value[i]; + } break; } case SE_MitigateSpellDamage: { - buffs[buffslot].magic_rune = spells[spell_id].max_value[i]; + if (buffslot > -1) { + buffs[buffslot].magic_rune = spells[spell_id].max_value[i]; + } break; } case SE_MitigateDotDamage: { - buffs[buffslot].dot_rune = spells[spell_id].max_value[i]; + if (buffslot > -1) { + buffs[buffslot].dot_rune = spells[spell_id].max_value[i]; + } break; } case SE_DistanceRemoval: { - buffs[buffslot].caston_x = int(GetX()); - buffs[buffslot].caston_y = int(GetY()); - buffs[buffslot].caston_z = int(GetZ()); + if (buffslot > -1) { + buffs[buffslot].caston_x = int(GetX()); + buffs[buffslot].caston_y = int(GetY()); + buffs[buffslot].caston_z = int(GetZ()); + } break; } @@ -1434,7 +1447,9 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove caster->spellbonuses.UnfailingDivinity; } - buffs[buffslot].ExtraDIChance = mod; + if (buffslot > -1) { + buffs[buffslot].ExtraDIChance = mod; + } break; } @@ -1464,6 +1479,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove for (int x = EQ::textures::textureBegin; x <= EQ::textures::LastTintableTexture; x++) caster->SendWearChange(x); } + break; } case SE_WipeHateList: @@ -1694,7 +1710,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove #endif rooted = true; - if (caster){ + if (caster && buffslot > -1) { buffs[buffslot].RootBreakChance = caster->aabonuses.RootBreakChance + caster->itembonuses.RootBreakChance + caster->spellbonuses.RootBreakChance; @@ -1751,7 +1767,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove gid = r->GetGroup(caster->GetName()); if(gid < 11) { - if(r->GetGroup(TargetClient->GetName()) != gid) { + if (TargetClient && r->GetGroup(TargetClient->GetName()) != gid) { Message(Chat::Red, "Your target must be a group member for this spell."); break; } @@ -1802,7 +1818,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove { if (IsClient()) { Client* client_target = CastToClient(); - if (client_target->IsGrouped()) { + if (client_target && client_target->IsGrouped()) { Group* group = client_target->GetGroup(); if (!group->IsGroupMember(caster)) { if (caster != this) { @@ -1815,7 +1831,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove Raid *raid = caster->GetRaid(); uint32 group_id = raid->GetGroup(caster->GetName()); if (group_id > 0 && group_id < MAX_RAID_GROUPS) { - if (raid->GetGroup(client_target->GetName()) != group_id) { + if (client_target && raid->GetGroup(client_target->GetName()) != group_id) { caster->MessageString(Chat::Red, SUMMON_ONLY_GROUP_CORPSE); break; } @@ -1857,7 +1873,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove #ifdef SPELL_EFFECT_SPAM snprintf(effect_desc, _EDLEN, "Weapon Proc: %s (id %d)", spells[effect_value].name, procid); #endif - AddProcToWeapon(procid, false, 100 + spells[spell_id].limit_value[i], spell_id, caster_level, GetProcLimitTimer(spell_id, ProcType::MELEE_PROC)); + AddProcToWeapon(procid, false, 100 + spells[spell_id].limit_value[i], spell_id, caster_level, GetSpellProcLimitTimer(spell_id, ProcType::MELEE_PROC)); break; } @@ -1867,7 +1883,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove #ifdef SPELL_EFFECT_SPAM snprintf(effect_desc, _EDLEN, "Ranged Proc: %+i", effect_value); #endif - AddRangedProc(procid, 100 + spells[spell_id].limit_value[i], spell_id, GetProcLimitTimer(spell_id, ProcType::RANGED_PROC)); + AddRangedProc(procid, 100 + spells[spell_id].limit_value[i], spell_id, GetSpellProcLimitTimer(spell_id, ProcType::RANGED_PROC)); break; } @@ -1877,7 +1893,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove #ifdef SPELL_EFFECT_SPAM snprintf(effect_desc, _EDLEN, "Defensive Proc: %s (id %d)", spells[effect_value].name, procid); #endif - AddDefensiveProc(procid, 100 + spells[spell_id].limit_value[i], spell_id, GetProcLimitTimer(spell_id, ProcType::DEFENSIVE_PROC)); + AddDefensiveProc(procid, 100 + spells[spell_id].limit_value[i], spell_id, GetSpellProcLimitTimer(spell_id, ProcType::DEFENSIVE_PROC)); break; } @@ -2174,6 +2190,8 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove if (RuleR(Spells, CallOfTheHeroAggroClearDist) == 0 || caster->CalculateDistance(GetX(), GetY(), GetZ()) >= RuleR(Spells, CallOfTheHeroAggroClearDist)) { entity_list.ClearAggro(this); } + } else if (!RuleB(Combat, SummonMeleeRange) && caster->GetZoneID() == GetZoneID() && caster->CombatRange(this)) { + break; } CastToClient()->MovePC(zone->GetZoneID(), zone->GetInstanceID(), caster->GetX(), @@ -2948,10 +2966,10 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove if (caster && !caster->IsClient()) break; - if (zone->random.Roll(spells[spell_id].base_value[i])) { + if (caster && zone->random.Roll(spells[spell_id].base_value[i])) { uint32 best_spell_id = caster->CastToClient()->GetHighestScribedSpellinSpellGroup(spells[spell_id].limit_value[i]); - if (caster && IsValidSpell(best_spell_id)) + if (IsValidSpell(best_spell_id)) caster->SpellFinished(best_spell_id, this, EQ::spells::CastingSlot::Item, 0, -1, spells[best_spell_id].resist_difficulty); } break; @@ -3021,9 +3039,9 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove int shield_target_mitigation = spells[spell_id].limit_value[i] ? spells[spell_id].limit_value[i] : 50; int shielder_mitigation = spells[spell_id].max_value[i] ? spells[spell_id].limit_value[i] : 50; ShieldAbility(petowner->GetID(), 25, shield_duration, shield_target_mitigation, shielder_mitigation); - break; } } + break; } case SE_Weapon_Stance: { @@ -3382,7 +3400,7 @@ int64 Mob::CalcSpellEffectValue(uint16 spell_id, int effect_id, int caster_level // this doesn't actually need to be a song to get mods, just the right skill if (EQ::skills::IsBardInstrumentSkill(spells[spell_id].skill) - && IsInstrumentModAppliedToSpellEffect(spell_id, spells[spell_id].effect_id[effect_id])) { + && IsInstrumentModifierAppliedToSpellEffect(spell_id, spells[spell_id].effect_id[effect_id])) { oval = effect_value; effect_value = effect_value * static_cast(instrument_mod) / 10; LogSpells("Effect value [{}] altered with bard modifier of [{}] to yeild [{}]", @@ -3941,7 +3959,7 @@ void Mob::DoBuffTic(const Buffs_Struct &buff, int slot, Mob *caster) } case SE_WipeHateList: { - if (IsMezSpell(buff.spellid)) { + if (IsMesmerizeSpell(buff.spellid)) { break; } @@ -4036,7 +4054,7 @@ void Mob::DoBuffTic(const Buffs_Struct &buff, int slot, Mob *caster) case SE_InterruptCasting: { if (IsCasting()) { const auto &spell = spells[casting_spell_id]; - if (!IgnoreCastingRestriction(spell.id) && zone->random.Roll(spells[buff.spellid].base_value[i])) { + if (!IsCastNotStandingSpell(spell.id) && zone->random.Roll(spells[buff.spellid].base_value[i])) { InterruptSpell(); } } @@ -4345,7 +4363,7 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses) for (unsigned int j = 0; j < buff_count; j++) { if (IsValidSpell(tar->GetBuffs()[j].spellid)) { auto spell = spells[tar->GetBuffs()[j].spellid]; - if (spell.good_effect == 0 && IsEffectInSpell(spell.id, SE_CurrentHP) && tar->GetBuffs()[j].casterid == GetID()) { + if (spell.good_effect == DETRIMENTAL_EFFECT && IsEffectInSpell(spell.id, SE_CurrentHP) && tar->GetBuffs()[j].casterid == GetID()) { tar->BuffFadeBySpellID(spell.id); } } @@ -4359,7 +4377,7 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses) for (unsigned int j = 0; j < buff_count; j++) { if (IsValidSpell(GetBuffs()[j].spellid )) { auto spell = spells[GetBuffs()[j].spellid]; - if (spell.good_effect == 0 && IsEffectInSpell(spell.id, SE_CurrentHP)) { + if (spell.good_effect == DETRIMENTAL_EFFECT && IsEffectInSpell(spell.id, SE_CurrentHP)) { BuffFadeBySpellID(spell.id); } } @@ -4461,9 +4479,9 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses) if (flee_mode) { currently_fleeing = true; CheckFlee(); - break; } } + break; } case SE_BindSight: @@ -4502,6 +4520,7 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses) } CastToClient()->SetControlledMobId(0); } + break; } case SE_Weapon_Stance: @@ -4766,7 +4785,7 @@ int64 Mob::CalcAAFocus(focusType type, const AA::Rank &rank, uint16 spell_id) LimitInclude[IncludeExistsSELimitEffect] = true; // they use 33 here for all classes ... unsure if the type check is really needed if (base_value == SE_SummonPet && type == focusReagentCost) { - if (IsSummonPetSpell(spell_id) || IsSummonSkeletonSpell(spell_id)) { + if (IsPetSpell(spell_id)) { LimitInclude[IncludeFoundSELimitEffect] = true; } } @@ -5166,8 +5185,8 @@ int64 Mob::CalcAAFocus(focusType type, const AA::Rank &rank, uint16 spell_id) value = 0; LimitFailure = true; } - break; } + break; case SE_FcSpellVulnerability: if (type == focusSpellVulnerability) { @@ -6243,7 +6262,7 @@ bool Mob::TryTriggerOnCastProc(uint16 focusspellid, uint16 spell_id, uint16 proc return true; } // Edge cases where proc spell does not require a target such as PBAE, allows proc to still occur even if target potentially dead. Live spells exist with PBAE procs. - else if (!SpellRequiresTarget(proc_spellid)) { + else if (!IsTargetRequiredForSpell(proc_spellid)) { SpellFinished(proc_spellid, this, EQ::spells::CastingSlot::Item, 0, -1, spells[proc_spellid].resist_difficulty); return true; } @@ -8075,8 +8094,8 @@ bool Mob::PassCastRestriction(int value) return true; break; - case IS_OFF_HAND_EQUIPED: - if (HasShieldEquiped() || CanThisClassDualWield()) + case IS_OFF_HAND_EQUIPPED: + if (HasShieldEquipped() || CanThisClassDualWield()) return true; break; @@ -9284,7 +9303,7 @@ void Mob::SendCastRestrictionMessage(int requirement_id, bool target_requirement case IS_HP_UNDER_50_PCT: Message(Chat::Red, fmt::format("{} This target must be at oe below 50 pct of its maximum hit points.", msg).c_str()); break; - case IS_OFF_HAND_EQUIPED: + case IS_OFF_HAND_EQUIPPED: Message(Chat::Red, fmt::format("{} You must be wielding a weapon or shield in your offhand to use this ability.", msg).c_str()); break; case HAS_NO_PACT_OF_FATE_RECOURSE_BUFF: @@ -9589,7 +9608,7 @@ void Mob::CastSpellOnLand(Mob* caster, int32 spell_id) void Mob::CalcSpellPowerDistanceMod(uint16 spell_id, float range, Mob* caster) { - if (IsPowerDistModSpell(spell_id)){ + if (IsDistanceModifierSpell(spell_id)){ float distance = 0; @@ -9940,7 +9959,7 @@ void Mob::VirusEffectProcess() } if (buffs[buffs_i].virus_spread_time <= 0) { - buffs[buffs_i].virus_spread_time = zone->random.Int(GetViralMinSpreadTime(buffs[buffs_i].spellid), GetViralMaxSpreadTime(buffs[buffs_i].spellid)); + buffs[buffs_i].virus_spread_time = zone->random.Int(GetSpellViralMinimumSpreadTime(buffs[buffs_i].spellid), GetSpellViralMaximumSpreadTime(buffs[buffs_i].spellid)); SpreadVirusEffect(buffs[buffs_i].spellid, buffs[buffs_i].casterid, buffs[buffs_i].ticsremaining); stop_timer = false; } @@ -9963,7 +9982,7 @@ void Mob::SpreadVirusEffect(int32 spell_id, uint32 caster_id, int32 buff_tics_re std::vector targets_in_range = entity_list.GetTargetsForVirusEffect( this, caster, - GetViralSpreadRange(spell_id), + GetSpellViralSpreadRange(spell_id), spells[spell_id].pcnpc_only_flag, spell_id ); diff --git a/zone/spells.cpp b/zone/spells.cpp index 0a63370b8..840b1f28a 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -72,7 +72,6 @@ Copyright (C) 2001-2002 EQEMu Development Team (http://eqemu.org) #include "../common/eqemu_logsys.h" #include "../common/item_instance.h" #include "../common/rulesys.h" -#include "../common/skills.h" #include "../common/spdat.h" #include "../common/strings.h" #include "../common/data_verification.h" @@ -86,7 +85,6 @@ Copyright (C) 2001-2002 EQEMu Development Team (http://eqemu.org) #include "fastmath.h" #include -#include #include #ifndef WIN32 @@ -103,7 +101,7 @@ Copyright (C) 2001-2002 EQEMu Development Team (http://eqemu.org) #include "mob_movement_manager.h" #include "client.h" #include "mob.h" - +#include "water_map.h" extern Zone* zone; extern volatile bool is_zone_loaded; @@ -437,9 +435,10 @@ bool Mob::DoCastSpell(uint16 spell_id, uint16 target_id, CastingSlot slot, //this is a special case for NPCs with no mana... if (IsNPC() && my_curmana == my_maxmana) { mana_cost = 0; + } else { + DoSpellInterrupt(spell_id, mana_cost, my_curmana); + return false; } - DoSpellInterrupt(spell_id, mana_cost, my_curmana); - return false; } } @@ -546,7 +545,7 @@ bool Mob::DoCastingChecksOnCaster(int32 spell_id, CastingSlot slot) { /* Cannot cast if stunned or mezzed, unless spell has 'cast_not_standing' flag. */ - if ((IsStunned() || IsMezzed()) && !IgnoreCastingRestriction(spell_id)) { + if ((IsStunned() || IsMezzed()) && !IsCastNotStandingSpell(spell_id)) { LogSpells("Spell casting canceled [{}] : can not cast spell when stunned.", spell_id); return false; } @@ -576,7 +575,7 @@ bool Mob::DoCastingChecksOnCaster(int32 spell_id, CastingSlot slot) { /* Cannot cast under divine aura, unless spell has 'cast_not_standing' flag. */ - if (DivineAura() && !IgnoreCastingRestriction(spell_id)) { + if (DivineAura() && !IsCastNotStandingSpell(spell_id)) { LogSpells("Spell casting canceled [{}] : cannot cast while Divine Aura is in effect.", spell_id); InterruptSpell(173, 0x121, false); //not sure we need this. return false; @@ -874,7 +873,7 @@ bool Mob::DoCastingChecksOnTarget(bool check_on_casting, int32 spell_id, Mob *sp /* Requires target to be in same group or same raid in order to apply invisible. */ - if (check_on_casting && RuleB(Spells, InvisRequiresGroup) && IsInvisSpell(spell_id)) { + if (check_on_casting && RuleB(Spells, InvisRequiresGroup) && IsInvisibleSpell(spell_id)) { if (IsClient() && spell_target && spell_target->IsClient()) { if (spell_target && spell_target->GetID() != GetID()) { bool cast_failed = true; @@ -1782,7 +1781,7 @@ bool Mob::DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_ce SpellTargetType targetType = spells[spell_id].target_type; bodyType mob_body = spell_target ? spell_target->GetBodyType() : BT_Humanoid; - if(IsPlayerIllusionSpell(spell_id) + if(IsIllusionSpell(spell_id) && spell_target != nullptr // null ptr crash safeguard && !spell_target->IsNPC() // still self only if NPC targetted && IsClient() @@ -2357,7 +2356,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, CastingSlot slot, in } // check line of sight to target if it's a detrimental spell - if(!spells[spell_id].npc_no_los && spell_target && IsDetrimentalSpell(spell_id) && !CheckLosFN(spell_target) && !IsHarmonySpell(spell_id) && spells[spell_id].target_type != ST_TargetOptional) + if (!spells[spell_id].npc_no_los && spell_target && IsDetrimentalSpell(spell_id) && (!CheckLosFN(spell_target) || !CheckWaterLoS(spell_target)) && !IsHarmonySpell(spell_id) && spells[spell_id].target_type != ST_TargetOptional) { LogSpells("Spell [{}]: cannot see target [{}]", spell_id, spell_target->GetName()); MessageString(Chat::Red,CANT_SEE_TARGET); @@ -2378,7 +2377,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, CastingSlot slot, in range = spells[spell_id].aoe_range; range = GetActSpellRange(spell_id, range); - if(IsClient() && IsPlayerIllusionSpell(spell_id) && (HasProjectIllusion())){ + if(IsClient() && IsIllusionSpell(spell_id) && (HasProjectIllusion())){ range = 100; } @@ -2462,7 +2461,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, CastingSlot slot, in } } - if(IsPlayerIllusionSpell(spell_id) + if(IsIllusionSpell(spell_id) && IsClient() && (HasProjectIllusion())){ LogAA("Effect Project Illusion for [{}] on spell id: [{}] was ON", GetName(), spell_id); @@ -2605,7 +2604,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, CastingSlot slot, in } // Set and send the nimbus effect if this spell has one - int NimbusEffect = GetNimbusEffect(spell_id); + int NimbusEffect = GetSpellNimbusEffect(spell_id); if(NimbusEffect) { if(!IsNimbusEffectActive(NimbusEffect)) { SendSpellEffect(NimbusEffect, 500, 0, 1, 3000, true); @@ -2755,7 +2754,7 @@ bool Mob::ApplyBardPulse(int32 spell_id, Mob *spell_target, CastingSlot slot) { /* If divine aura applied while pulsing, it is not interrupted but does not reapply until DA fades. */ - if (DivineAura() && !IgnoreCastingRestriction(spell_id)) { + if (DivineAura() && !IsCastNotStandingSpell(spell_id)) { return true; } /* @@ -2932,7 +2931,7 @@ int Mob::CheckStackConflict(uint16 spellid1, int caster_level1, uint16 spellid2, return -1; } - if (!IsStackableDot(spellid1) && !IsEffectInSpell(spellid1, SE_ManaBurn)) { // mana burn spells we need to use the stacking command blocks live actually checks those first, we should probably rework to that too + if (!IsStackableDOT(spellid1) && !IsEffectInSpell(spellid1, SE_ManaBurn)) { // mana burn spells we need to use the stacking command blocks live actually checks those first, we should probably rework to that too if (caster_level1 > caster_level2) { // cur buff higher level than new if (IsEffectInSpell(spellid1, SE_ImprovedTaunt)) { LogSpells("SE_ImprovedTaunt level exception, overwriting"); @@ -3006,21 +3005,21 @@ int Mob::CheckStackConflict(uint16 spellid1, int caster_level1, uint16 spellid2, if (spellbonuses.BStacker[SBIndex::BUFFSTACKER_EXISTS]) { if ((effect2 == SE_BStacker) && (sp2.effect_id[i] <= spellbonuses.BStacker[SBIndex::BUFFSTACKER_VALUE])) return -1; - if ((effect2 == SE_AStacker) && (!IsCastonFadeDurationSpell(spellid1) && buffs[buffslot].ticsremaining != 1 && IsEffectInSpell(spellid1, SE_BStacker))) + if ((effect2 == SE_AStacker) && (!IsCastOnFadeDurationSpell(spellid1) && buffs[buffslot].ticsremaining != 1 && IsEffectInSpell(spellid1, SE_BStacker))) return -1; } if (spellbonuses.CStacker[SBIndex::BUFFSTACKER_EXISTS]) { if ((effect2 == SE_CStacker) && (sp2.effect_id[i] <= spellbonuses.CStacker[SBIndex::BUFFSTACKER_VALUE])) return -1; - if ((effect2 == SE_BStacker) && (!IsCastonFadeDurationSpell(spellid1) && buffs[buffslot].ticsremaining != 1 && IsEffectInSpell(spellid1, SE_CStacker))) + if ((effect2 == SE_BStacker) && (!IsCastOnFadeDurationSpell(spellid1) && buffs[buffslot].ticsremaining != 1 && IsEffectInSpell(spellid1, SE_CStacker))) return -1; } if (spellbonuses.DStacker[SBIndex::BUFFSTACKER_EXISTS]) { if ((effect2 == SE_DStacker) && (sp2.effect_id[i] <= spellbonuses.DStacker[SBIndex::BUFFSTACKER_VALUE])) return -1; - if ((effect2 == SE_CStacker) && (!IsCastonFadeDurationSpell(spellid1) && buffs[buffslot].ticsremaining != 1 && IsEffectInSpell(spellid1, SE_DStacker))) + if ((effect2 == SE_CStacker) && (!IsCastOnFadeDurationSpell(spellid1) && buffs[buffslot].ticsremaining != 1 && IsEffectInSpell(spellid1, SE_DStacker))) return -1; } @@ -3038,6 +3037,12 @@ int Mob::CheckStackConflict(uint16 spellid1, int caster_level1, uint16 spellid2, if(sp1_value < overwrite_below_value) { + if (IsResurrectionEffects(spellid1)) { + int8 res_effect_check = GetSpellResurrectionSicknessCheck(spellid1, spellid2); + if (res_effect_check != 0) { + return res_effect_check; + } + } LogSpells("Overwrite spell because sp1_value < overwrite_below_value"); return 1; // overwrite spell if its value is less } @@ -3163,6 +3168,13 @@ int Mob::CheckStackConflict(uint16 spellid1, int caster_level1, uint16 spellid2, if(sp2_value < 0) sp2_value = 0 - sp2_value; + if (IsResurrectionEffects(spellid1)) { + int8 res_effect_check = GetSpellResurrectionSicknessCheck(spellid1, spellid2); + if (res_effect_check != 0) { + return res_effect_check; + } + } + if(sp2_value < sp1_value) { LogSpells("Spell [{}] (value [{}]) is not as good as [{}] (value [{}]). Rejecting [{}]", sp2.name, sp2_value, sp1.name, sp1_value, sp2.name); @@ -3171,10 +3183,6 @@ int Mob::CheckStackConflict(uint16 spellid1, int caster_level1, uint16 spellid2, if (sp2_value != sp1_value) values_equal = false; - if (RuleB(Spells, ResurrectionEffectsBlock) && IsResurrectionEffects(spellid1)) { - LogSpells("ResurrectionEffectsBlock triggered -- [{}] is blocked by [{}]", sp2.name, sp1.name); - return -1; // can't stack - } //we dont return here... a better value on this one effect dosent mean they are //all better... @@ -3239,7 +3247,7 @@ bool Mob::CheckSpellLevelRestriction(Mob *caster, uint16 spell_id) } if (check_for_restrictions) { - int spell_level = GetMinLevel(spell_id); + int spell_level = GetSpellMinimumLevel(spell_id); // Only check for beneficial buffs if (IsBuffSpell(spell_id) && IsBeneficialSpell(spell_id)) { @@ -3365,6 +3373,10 @@ int Mob::AddBuff(Mob *caster, uint16 spell_id, int duration, int32 level_overrid will_overwrite = true; overwrite_slots.push_back(buffslot); } + if (ret == 2) { //ResurrectionEffectBlock handling to move potential overwrites to a new buff slock while keeping Res Sickness + LogSpells("Adding buff [{}] will overwrite spell [{}] in slot [{}] with caster level [{}], but ResurrectionEffectBlock is set to 2. Attempting to move [{}] to an empty buff slot.", + spell_id, curbuf.spellid, buffslot, curbuf.casterlevel, spell_id); + } } else { if (emptyslot == -1) { if (buffslot >= start_slot && buffslot < end_slot) { @@ -3522,6 +3534,19 @@ int Mob::CanBuffStack(uint16 spellid, uint8 caster_level, bool iFailIfOverwrite) LogAIDetail("Buff [{}] would conflict with [{}] in slot [{}], reporting stack failure", spellid, curbuf.spellid, i); return -1; // stop the spell, can't stack it } + if (ret == 2) { //ResurrectionEffectBlock handling to move potential overwrites to a new buff slock while keeping Res Sickness + LogAIDetail("Adding buff [{}] will overwrite spell [{}] in slot [{}] with caster level [{}], but ResurrectionEffectBlock is set to 2. Attempting to move [{}] to an empty buff slot.", + spellid, curbuf.spellid, i, curbuf.casterlevel, spellid); + for (int x = 0; x < buff_count; x++) { + const Buffs_Struct& curbuf = buffs[x]; + if (IsValidSpell(curbuf.spellid)) { + continue; + } + else { + firstfree = x; + } + } + } } LogAIDetail("Reporting that buff [{}] could successfully be placed into slot [{}]", spellid, firstfree); @@ -3747,7 +3772,7 @@ bool Mob::SpellOnTarget( if ( (spelltar->GetInvul() && !spelltar->DivineAura()) || (spelltar != this && spelltar->DivineAura()) || - (spelltar == this && spelltar->DivineAura() && !IgnoreCastingRestriction(spell_id)) + (spelltar == this && spelltar->DivineAura() && !IsCastNotStandingSpell(spell_id)) ) { LogSpells("Casting spell [{}] on [{}] aborted: they are invulnerable", spell_id, spelltar->GetName()); safe_delete(action_packet); @@ -3858,7 +3883,7 @@ bool Mob::SpellOnTarget( } if ( - (!IsAllianceSpellLine(spell_id) && !IsBeneficialAllowed(spelltar)) || + (!IsAllianceSpell(spell_id) && !IsBeneficialAllowed(spelltar)) || (IsGroupOnlySpell(spell_id) && !( ( @@ -4090,7 +4115,7 @@ bool Mob::SpellOnTarget( if ( IsCharmSpell(spell_id) || - IsMezSpell(spell_id) || + IsMesmerizeSpell(spell_id) || IsFearSpell(spell_id) ) { spell_effectiveness = spelltar->ResistSpell( @@ -4119,7 +4144,7 @@ bool Mob::SpellOnTarget( } if (spell_effectiveness < 100) { - if (spell_effectiveness == 0 || !IsPartialCapableSpell(spell_id)) { + if (spell_effectiveness == 0 || !IsPartialResistableSpell(spell_id)) { LogSpells("Spell [{}] was completely resisted by [{}]", spell_id, spelltar->GetName()); if (spells[spell_id].resist_type == RESIST_PHYSICAL){ @@ -4376,6 +4401,20 @@ void Corpse::CastRezz(uint16 spellid, Mob* Caster) safe_delete(outapp); } +std::vector Mob::GetBuffSpellIDs() +{ + std::vector l; + + for (int i = 0; i < GetMaxTotalSlots(); i++) { + const auto& e = buffs[i].spellid; + if (IsValidSpell(e)) { + l.emplace_back(e); + } + } + + return l; +} + bool Mob::FindBuff(uint16 spell_id) { uint32 buff_count = GetMaxTotalSlots(); @@ -4648,7 +4687,7 @@ bool Mob::IsImmuneToSpell(uint16 spell_id, Mob *caster) if(IsBeneficialSpell(spell_id) && (caster->GetNPCTypeID())) //then skip the rest, stop NPCs aggroing each other with buff spells. 2013-03-05 return false; - if(IsMezSpell(spell_id)) + if(IsMesmerizeSpell(spell_id)) { if(GetSpecialAbility(UNMEZABLE)) { LogSpells("We are immune to Mez spells"); @@ -5111,7 +5150,7 @@ float Mob::ResistSpell(uint8 resist_type, uint16 spell_id, Mob *caster, bool use { //This is confusing but it's basically right //It skews partial resists up over 100 more often than not - if(!IsPartialCapableSpell(spell_id)) + if(!IsPartialResistableSpell(spell_id)) { return 0; } @@ -5482,13 +5521,14 @@ void Client::UnmemSpell(int slot, bool update_client) } LogSpells("Spell [{}] forgotten from slot [{}]", m_pp.mem_spells[slot], slot); - m_pp.mem_spells[slot] = 0xFFFFFFFF; database.DeleteCharacterMemorizedSpell(CharacterID(), m_pp.mem_spells[slot], slot); - if(update_client) { + if (update_client) { MemorizeSpell(slot, m_pp.mem_spells[slot], memSpellForget); } + + m_pp.mem_spells[slot] = UINT32_MAX; } void Client::UnmemSpellBySpellID(int32 spell_id) @@ -5560,7 +5600,7 @@ void Client::ScribeSpell(uint16 spell_id, int slot, bool update_client, bool def } if (update_client) { - if (m_pp.spell_book[slot] != 0xFFFFFFFF) { + if (m_pp.spell_book[slot] != UINT32_MAX) { UnscribeSpell(slot, update_client, defer_save); } } @@ -5580,25 +5620,33 @@ void Client::ScribeSpell(uint16 spell_id, int slot, bool update_client, bool def void Client::UnscribeSpell(int slot, bool update_client, bool defer_save) { - if (slot >= EQ::spells::SPELLBOOK_SIZE || slot < 0) { + if (!EQ::ValueWithin(slot, 0, (EQ::spells::SPELLBOOK_SIZE - 1))) { return; } LogSpells("Spell [{}] erased from spell book slot [{}]", m_pp.spell_book[slot], slot); - m_pp.spell_book[slot] = 0xFFFFFFFF; if (!defer_save) { database.DeleteCharacterSpell(CharacterID(), m_pp.spell_book[slot], slot); } if (update_client && slot < EQ::spells::DynamicLookup(ClientVersion(), GetGM())->SpellbookSize) { - auto outapp = new EQApplicationPacket(OP_DeleteSpell, sizeof(DeleteSpell_Struct)); - DeleteSpell_Struct *del = (DeleteSpell_Struct *) outapp->pBuffer; + auto outapp = new EQApplicationPacket(OP_DeleteSpell, sizeof(DeleteSpell_Struct)); + auto* del = (DeleteSpell_Struct *) outapp->pBuffer; + del->spell_slot = slot; - del->success = 1; + del->success = 1; + QueuePacket(outapp); safe_delete(outapp); } + + if (parse->PlayerHasQuestSub(EVENT_UNSCRIBE_SPELL)) { + const auto export_string = fmt::format("{} {}", slot, m_pp.spell_book[slot]); + parse->EventPlayer(EVENT_UNSCRIBE_SPELL, this, export_string, 0); + } + + m_pp.spell_book[slot] = UINT32_MAX; } void Client::UnscribeSpellAll(bool update_client) @@ -7052,3 +7100,18 @@ const CombatRecord &Mob::GetCombatRecord() const { return m_combat_record; } + +bool Mob::CheckWaterLoS(Mob* m) +{ + if ( + !RuleB(Spells, WaterMatchRequiredForLoS) || + !zone->watermap + ) { + return true; + } + + return ( + zone->watermap->InLiquid(GetPosition()) == + zone->watermap->InLiquid(m->GetPosition()) + ); +} diff --git a/zone/string_ids.h b/zone/string_ids.h index cc3e1bad7..208fc030b 100644 --- a/zone/string_ids.h +++ b/zone/string_ids.h @@ -100,6 +100,7 @@ #define DUP_LORE 290 //Duplicate lore items are not allowed. #define TGB_ON 293 //Target other group buff is *ON*. #define TGB_OFF 294 //Target other group buff is *OFF*. +#define DONT_SEE_TARGET 303 //I don't see anyone by that name around here... #define DISARMED_TRAP 305 //You have disarmed the trap. #define LDON_SENSE_TRAP1 306 //You do not Sense any traps. #define TRADESKILL_NOCOMBINE 334 //You cannot combine these items in this container type! @@ -247,6 +248,9 @@ #define WONT_SELL_DEEDS5 1170 //I am tolerant by nature..but infidels like you push me past my limit..get out! #define WONT_SELL_DEEDS6 1171 //I cannot abide you or your actions against all that is right..BE GONE! #define AA_POINT 1197 //point +#define MERCHANT_CLOSED_ONE 1199 //I don't have time for that now. +#define MERCHANT_CLOSED_TWO 1200 //Can't you see I'm doing something here? +#define MERCHANT_CLOSED_THREE 1201 //I am not open for business right now. #define AA_POINTS 1215 //points #define SPELL_FIZZLE_OTHER 1218 //%1's spell fizzles! #define MISSED_NOTE_OTHER 1219 //A missed note brings %1's song to a close! @@ -358,6 +362,7 @@ #define WHOALL_NO_RESULTS 5029 //There are no players in EverQuest that match those who filters. #define TELL_QUEUED_MESSAGE 5045 //You told %1 '%T2. %3' #define TOLD_NOT_ONLINE 5046 //%1 is not online at this time. +#define RAID_IS_FULL 5048 //The raid is full. #define ZONING_NO_EXPANSION 5052 //The zone that you are attempting to enter is part of an expansion that you do not yet own. You may need to return to the Login screen and enter an account key for that expansion. If you have received this message in error, please /petition or send an email to EQAccounts@soe.sony.com #define PETITION_NO_DELETE 5053 //You do not have a petition in the queue. #define PETITION_DELETED 5054 //Your petition was successfully deleted. @@ -367,6 +372,7 @@ #define DUNGEON_SEALED 5141 //The gateway to the dungeon is sealed off to you. Perhaps you would be able to enter if you needed to adventure there. #define ADVENTURE_COMPLETE 5147 //You received %1 points for successfully completing the adventure. #define SUCCOR_FAIL 5169 //The portal collapes before you can escape! +#define AUGMENT_RESTRICTED 5480 //The item does not satisfy the augment's restrictions. #define PET_ATTACKING 5501 //%1 tells you, 'Attacking %2 Master.' #define AVOID_STUNNING_BLOW 5753 //You avoid the stunning blow. #define FATAL_BOW_SHOT 5745 //%1 performs a FATAL BOW SHOT!! @@ -460,6 +466,7 @@ #define NO_ABILITY_OUT_OF_COMBAT 9194 //You can not use this ability while out of combat. #define LESSER_SPELL_VERSION 11004 //%1 is a lesser version of %2 and cannot be scribed #define AE_RAMPAGE 11015 //%1 goes on a WILD RAMPAGE! +#define GROUP_IS_FULL 12000 //You cannot join that group, it is full. #define FACE_ACCEPTED 12028 //Facial features accepted. #define TRACKING_BEGIN 12040 //You begin tracking %1. #define SPELL_LEVEL_TO_LOW 12048 //You will have to achieve level %1 before you can scribe the %2. diff --git a/zone/task_client_state.cpp b/zone/task_client_state.cpp index fefeabab7..54d581fce 100644 --- a/zone/task_client_state.cpp +++ b/zone/task_client_state.cpp @@ -169,13 +169,7 @@ void ClientTaskState::EnableTask(int character_id, int task_count, int *task_lis query_stream << (i ? ", " : "") << StringFormat("(%i, %i)", character_id, tasks_enabled[i]); } - std::string query = query_stream.str(); - if (!tasks_enabled.empty()) { - database.QueryDatabase(query); - } - else { - LogTasks("Called for character_id [{}] but, no tasks exist", character_id); - } + database.QueryDatabase(query_stream.str()); } void ClientTaskState::DisableTask(int character_id, int task_count, int *task_list) @@ -228,17 +222,7 @@ void ClientTaskState::DisableTask(int character_id, int task_count, int *task_li queryStream << ")"; - std::string query = queryStream.str(); - - if (tasks_disabled.size()) { - database.QueryDatabase(query); - } - else { - LogTasks( - "DisableTask called for character_id [{}] ... but, no tasks exist", - character_id - ); - } + database.QueryDatabase(queryStream.str()); } bool ClientTaskState::IsTaskEnabled(int task_id) diff --git a/zone/task_manager.cpp b/zone/task_manager.cpp index 0711b0977..9b995cf93 100644 --- a/zone/task_manager.cpp +++ b/zone/task_manager.cpp @@ -1,7 +1,6 @@ #include "../common/global_define.h" #include "../common/misc_functions.h" #include "../common/repositories/character_activities_repository.h" -#include "../common/repositories/character_data_repository.h" #include "../common/repositories/character_tasks_repository.h" #include "../common/repositories/completed_tasks_repository.h" #include "../common/repositories/task_activities_repository.h" @@ -12,7 +11,6 @@ #include "string_ids.h" #include "task_manager.h" #include "../common/repositories/shared_task_activity_state_repository.h" -#include "../common/repositories/shared_task_dynamic_zones_repository.h" #include "../common/repositories/shared_task_members_repository.h" #include "../common/shared_tasks.h" #include "worldserver.h" @@ -46,7 +44,6 @@ bool TaskManager::LoadTaskSets() bool TaskManager::LoadTasks(int single_task) { std::string task_query_filter = fmt::format("id = {}", single_task); - std::string query; if (single_task == 0) { if (!LoadTaskSets()) { LogTasks("LoadTaskSets failed"); @@ -389,11 +386,15 @@ bool TaskManager::SaveClientState(Client *client, ClientTaskState *cts) const char *completed_task_query = "REPLACE INTO completed_tasks (charid, completedtime, taskid, activityid) " "VALUES (%i, %i, %i, %i)"; - for (unsigned int task_index = cts->m_last_completed_task_loaded; + for ( + unsigned int task_index = cts->m_last_completed_task_loaded; task_index < cts->m_completed_tasks.size(); - task_index++) { + task_index++ + ) { - int task_id = cts->m_completed_tasks[task_index].task_id; + const auto& t = cts->m_completed_tasks[task_index]; + + int task_id = t.task_id; const auto task_data = GetTaskData(task_id); if (!task_data) { @@ -412,7 +413,7 @@ bool TaskManager::SaveClientState(Client *client, ClientTaskState *cts) std::string query = StringFormat( completed_task_query, character_id, - cts->m_completed_tasks[task_index].completed_time, + t.completed_time, task_id, -1 ); @@ -431,14 +432,14 @@ bool TaskManager::SaveClientState(Client *client, ClientTaskState *cts) // Insert one record for each completed optional task. for (int activity_id = 0; activity_id < task_data->activity_count; activity_id++) { if (!task_data->activity_information[activity_id].optional || - !cts->m_completed_tasks[task_index].activity_done[activity_id]) { + !t.activity_done[activity_id]) { continue; } query = StringFormat( completed_task_query, character_id, - cts->m_completed_tasks[task_index].completed_time, + t.completed_time, task_id, activity_id ); @@ -1163,7 +1164,6 @@ void TaskManager::SendActiveTaskDescription( // if (!t->reward_id_list.empty() && t->item_link.empty()) { auto items = Strings::Split(t->reward_id_list, "|"); - auto item = items.front(); int item_id = Strings::IsNumber(items.front()) ? Strings::ToInt(items.front()) : 0; if (item_id) { diff --git a/zone/tasks.cpp b/zone/tasks.cpp index 114594482..47bccd0a3 100644 --- a/zone/tasks.cpp +++ b/zone/tasks.cpp @@ -15,9 +15,7 @@ extern QueryServ *QServ; void Client::LoadClientTaskState() { if (RuleB(TaskSystem, EnableTaskSystem) && task_manager) { - if (task_state) { - safe_delete(task_state); - } + safe_delete(task_state); task_state = new ClientTaskState(); if (!task_manager->LoadClientState(this, task_state)) { @@ -147,8 +145,7 @@ void Client::StartTaskRequestCooldownTimer() uint32_t milliseconds = RuleI(TaskSystem, RequestCooldownTimerSeconds) * 1000; task_request_timer.Start(milliseconds); - uint32_t size = sizeof(uint32_t); - auto outapp = std::make_unique(OP_TaskRequestTimer, size); + auto outapp = std::make_unique(OP_TaskRequestTimer, sizeof(uint32_t)); outapp->WriteUInt32(milliseconds); QueuePacket(outapp.get()); } diff --git a/zone/tradeskills.cpp b/zone/tradeskills.cpp index 2d8e03002..2383d841e 100644 --- a/zone/tradeskills.cpp +++ b/zone/tradeskills.cpp @@ -19,7 +19,6 @@ #include "../common/global_define.h" #include "../common/events/player_event_logs.h" -#include #include #ifndef WIN32 @@ -27,7 +26,6 @@ #endif #include "../common/rulesys.h" -#include "../common/strings.h" #include "queryserv.h" #include "quest_parser_collection.h" @@ -36,7 +34,6 @@ #include "zonedb.h" #include "worldserver.h" #include "../common/repositories/char_recipe_list_repository.h" -#include "../common/zone_store.h" #include "../common/repositories/tradeskill_recipe_repository.h" #include "../common/repositories/tradeskill_recipe_entries_repository.h" @@ -120,7 +117,18 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme return; } - if (!RuleB(Inventory, AllowMultipleOfSameAugment) && tobe_auged->ContainsAugmentByID(auged_with->GetID())) { + if ( + RuleB(Inventory, EnforceAugmentRestriction) && + user->IsAugmentRestricted(tobe_auged->GetItemType(), auged_with->GetAugmentRestriction()) + ) { + user->MessageString(Chat::Red, AUGMENT_RESTRICTED); + return; + } + + if ( + !RuleB(Inventory, AllowMultipleOfSameAugment) && + tobe_auged->ContainsAugmentByID(auged_with->GetID()) + ) { user->Message(Chat::Red, "Error: Cannot put multiple of the same augment in an item."); return; } @@ -758,91 +766,6 @@ void Object::HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac } } -EQ::skills::SkillType Object::TypeToSkill(uint32 type) -{ - switch(type) { // grouped and ordered by SkillUseTypes name - new types need to be verified for proper SkillUseTypes and use -/*SkillAlchemy*/ - case EQ::item::BagTypeMedicineBag: - return EQ::skills::SkillAlchemy; - -/*SkillBaking*/ - //case EQ::item::BagTypeMixingBowl: // No idea... - case EQ::item::BagTypeOven: - return EQ::skills::SkillBaking; - -/*SkillBlacksmithing*/ - case EQ::item::BagTypeForge: - //case EQ::item::BagTypeKoadaDalForge: - case EQ::item::BagTypeTeirDalForge: - case EQ::item::BagTypeOggokForge: - case EQ::item::BagTypeStormguardForge: - //case EQ::item::BagTypeAkanonForge: - //case EQ::item::BagTypeNorthmanForge: - //case EQ::item::BagTypeCabilisForge: - //case EQ::item::BagTypeFreeportForge: - //case EQ::item::BagTypeRoyalQeynosForge: - //case EQ::item::BagTypeTrollForge: - case EQ::item::BagTypeFierDalForge: - case EQ::item::BagTypeValeForge: - //case EQ::item::BagTypeErudForge: - //case EQ::item::BagTypeGuktaForge: - return EQ::skills::SkillBlacksmithing; - -/*SkillBrewing*/ - //case EQ::item::BagTypeIceCreamChurn: // No idea... - case EQ::item::BagTypeBrewBarrel: - return EQ::skills::SkillBrewing; - -/*SkillFishing*/ - case EQ::item::BagTypeTackleBox: - return EQ::skills::SkillFishing; - -/*SkillFletching*/ - case EQ::item::BagTypeFletchingKit: - //case EQ::item::BagTypeFierDalFletchingKit: - return EQ::skills::SkillFletching; - -/*SkillJewelryMaking*/ - case EQ::item::BagTypeJewelersKit: - return EQ::skills::SkillJewelryMaking; - -/*SkillMakePoison*/ - // This is a guess and needs to be verified... (Could be SkillAlchemy) - //case EQ::item::BagTypeMortar: - // return SkillMakePoison; - -/*SkillPottery*/ - case EQ::item::BagTypePotteryWheel: - case EQ::item::BagTypeKiln: - //case EQ::item::BagTypeIksarPotteryWheel: - return EQ::skills::SkillPottery; - -/*SkillResearch*/ - //case EQ::item::BagTypeLexicon: - case EQ::item::BagTypeWizardsLexicon: - case EQ::item::BagTypeMagesLexicon: - case EQ::item::BagTypeNecromancersLexicon: - case EQ::item::BagTypeEnchantersLexicon: - //case EQ::item::BagTypeConcordanceofResearch: - return EQ::skills::SkillResearch; - -/*SkillTailoring*/ - case EQ::item::BagTypeSewingKit: - //case EQ::item::BagTypeHalflingTailoringKit: - //case EQ::item::BagTypeErudTailoringKit: - //case EQ::item::BagTypeFierDalTailoringKit: - return EQ::skills::SkillTailoring; - -/*SkillTinkering*/ - case EQ::item::BagTypeToolBox: - return EQ::skills::SkillTinkering; - -/*Undefined*/ - default: - return TradeskillUnknown; - } -} - void Client::SendTradeskillSearchResults( const std::string &query, unsigned long objtype, @@ -1612,7 +1535,7 @@ bool ZoneDatabase::GetTradeRecipe( for(auto row = results.begin(); row != results.end(); ++row) { uint32 item = (uint32)Strings::ToInt(row[0]); uint8 num = (uint8) Strings::ToInt(row[1]); - spec->onsuccess.push_back(std::pair(item, num)); + spec->onsuccess.emplace_back(std::pair(item, num)); } spec->onfail.clear(); @@ -1626,7 +1549,7 @@ bool ZoneDatabase::GetTradeRecipe( for (auto row = results.begin(); row != results.end(); ++row) { uint32 item = (uint32) Strings::ToInt(row[0]); uint8 num = (uint8) Strings::ToInt(row[1]); - spec->onfail.push_back(std::pair(item, num)); + spec->onfail.emplace_back(std::pair(item, num)); } } @@ -1649,7 +1572,7 @@ bool ZoneDatabase::GetTradeRecipe( for (auto row = results.begin(); row != results.end(); ++row) { uint32 item = (uint32) Strings::ToInt(row[0]); uint8 num = (uint8) Strings::ToInt(row[1]); - spec->salvage.push_back(std::pair(item, num)); + spec->salvage.emplace_back(std::pair(item, num)); } } diff --git a/zone/trading.cpp b/zone/trading.cpp index 9500f9a23..19873c0bd 100644 --- a/zone/trading.cpp +++ b/zone/trading.cpp @@ -61,11 +61,6 @@ void Trade::Reset() pp=0; gp=0; sp=0; cp=0; } -void Trade::SetTradeCash(uint32 in_pp, uint32 in_gp, uint32 in_sp, uint32 in_cp) -{ - pp=in_pp; gp=in_gp; sp=in_sp; cp=in_cp; -} - // Initiate a trade with another mob // initiate_with specifies whether to start trade with other mob as well void Trade::Start(uint32 mob_id, bool initiate_with) @@ -1315,19 +1310,6 @@ void Client::NukeTraderItem(uint16 Slot,int16 Charges,int16 Quantity,Client* Cus safe_delete(outapp2); } -void Client::TraderUpdate(uint16 SlotID,uint32 TraderID){ - // This method is no longer used. - - auto outapp = new EQApplicationPacket(OP_TraderItemUpdate, sizeof(TraderItemUpdate_Struct)); - TraderItemUpdate_Struct* tus=(TraderItemUpdate_Struct*)outapp->pBuffer; - tus->Charges = 0xFFFF; - tus->FromSlot = SlotID; - tus->ToSlot = 0xFF; - tus->TraderID = TraderID; - tus->Unknown000 = 0; - QueuePacket(outapp); - safe_delete(outapp); -} void Client::FindAndNukeTraderItem(int32 SerialNumber, int16 Quantity, Client* Customer, uint16 TraderSlot){ @@ -3018,3 +3000,13 @@ void Client::BuyerItemSearch(const EQApplicationPacket *app) { QueuePacket(outapp); safe_delete(outapp); } + +const std::string &Client::GetMailKeyFull() const +{ + return m_mail_key_full; +} + +const std::string &Client::GetMailKey() const +{ + return m_mail_key; +} diff --git a/zone/trap.cpp b/zone/trap.cpp index 947a325e5..0c447a2d2 100644 --- a/zone/trap.cpp +++ b/zone/trap.cpp @@ -18,7 +18,6 @@ #include "../common/spdat.h" #include "../common/strings.h" -#include "../common/types.h" #include "client.h" #include "entity.h" @@ -209,8 +208,7 @@ void Trap::Trigger(Mob* trigger) { entity_list.MessageClose(trigger,false,100,13,"%s",message.c_str()); } - if(trigger->IsClient()) - { + if (trigger && trigger->IsClient()) { auto outapp = new EQApplicationPacket(OP_Damage, sizeof(CombatDamage_Struct)); CombatDamage_Struct* a = (CombatDamage_Struct*)outapp->pBuffer; int64 dmg = zone->random.Int(effectvalue, effectvalue2); @@ -226,8 +224,7 @@ void Trap::Trigger(Mob* trigger) } } - if (trigger && trigger->IsClient()) - { + if (trigger && trigger->IsClient()) { trigger->CastToClient()->trapid = trap_id; charid = trigger->CastToClient()->CharacterID(); } diff --git a/zone/tribute.cpp b/zone/tribute.cpp index 4f6588e40..18e2bf664 100644 --- a/zone/tribute.cpp +++ b/zone/tribute.cpp @@ -26,8 +26,6 @@ #ifdef _WINDOWS #include - #include - #include #define snprintf _snprintf #define vsnprintf _vsnprintf #define strncasecmp _strnicmp diff --git a/zone/tune.cpp b/zone/tune.cpp index ad427146e..a3ec9825f 100644 --- a/zone/tune.cpp +++ b/zone/tune.cpp @@ -24,13 +24,10 @@ #include "../common/eq_constants.h" #include "../common/eq_packet_structs.h" #include "../common/rulesys.h" -#include "../common/skills.h" #include "../common/spdat.h" #include "../common/strings.h" #include "../common/data_verification.h" -#include "../common/misc_functions.h" #include "queryserv.h" -#include "quest_parser_collection.h" #include "string_ids.h" #include "water_map.h" #include "worldserver.h" @@ -38,12 +35,6 @@ #include "lua_parser.h" #include "fastmath.h" #include "mob.h" -#include "npc.h" - -#include -#include -#include -#include #include "bot.h" @@ -920,7 +911,7 @@ int64 Mob::TuneClientAttack(Mob* other, bool no_avoid, bool no_hit_chance, int h if (Hand == EQ::invslot::slotPrimary || Hand == EQ::invslot::slotSecondary) my_hit.base_damage = CastToClient()->DoDamageCaps(my_hit.base_damage); auto shield_inc = spellbonuses.ShieldEquipDmgMod + itembonuses.ShieldEquipDmgMod + aabonuses.ShieldEquipDmgMod; - if (shield_inc > 0 && HasShieldEquiped() && Hand == EQ::invslot::slotPrimary) { + if (shield_inc > 0 && HasShieldEquipped() && Hand == EQ::invslot::slotPrimary) { my_hit.base_damage = my_hit.base_damage * (100 + shield_inc) / 100; hate = hate * (100 + shield_inc) / 100; } @@ -1040,7 +1031,7 @@ int64 Mob::TuneACSum(bool skip_caps, int ac_override, int add_ac) } int shield_ac = 0; - if (HasShieldEquiped() && IsOfClientBot()) { + if (HasShieldEquipped() && IsOfClientBot()) { auto inst = (IsClient()) ? GetInv().GetItem(EQ::invslot::slotSecondary) : CastToBot()->GetBotItem(EQ::invslot::slotSecondary); if (inst) { if (inst->GetItemRecommendedLevel(true) <= GetLevel()) { @@ -1246,7 +1237,7 @@ int64 Mob::Tunecompute_tohit(EQ::skills::SkillType skillinuse, int accuracy_over tohit += add_accuracy; } if (IsClient()) { - double reduction = CastToClient()->m_pp.intoxication / 2.0; + double reduction = CastToClient()->GetIntoxication() / 2.0; if (reduction > 20.0) { reduction = std::min((110 - reduction) / 100.0, 1.0); tohit = reduction * static_cast(tohit); @@ -1375,7 +1366,7 @@ int64 Mob::Tunecompute_defense(int avoidance_override, int add_avoidance) } if (IsClient()) { - double reduction = CastToClient()->m_pp.intoxication / 2.0; + double reduction = CastToClient()->GetIntoxication() / 2.0; if (reduction > 20.0) { reduction = std::min((110 - reduction) / 100.0, 1.0); defense = reduction * static_cast(defense); diff --git a/zone/water_map.cpp b/zone/water_map.cpp index b7d367c47..27289abd6 100644 --- a/zone/water_map.cpp +++ b/zone/water_map.cpp @@ -4,8 +4,6 @@ #include "water_map_v1.h" #include "water_map_v2.h" #include "../common/eqemu_logsys.h" -#include "../common/file.h" -#include "../common/path_manager.h" #include #include diff --git a/zone/waypoints.cpp b/zone/waypoints.cpp index 6ef49d924..56e69d017 100644 --- a/zone/waypoints.cpp +++ b/zone/waypoints.cpp @@ -20,7 +20,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include #endif -#include "../common/features.h" #include "../common/rulesys.h" #include "../common/strings.h" #include "../common/misc_functions.h" @@ -34,7 +33,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "mob_movement_manager.h" #include -#include extern FastMath g_Math; diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index 699db95fb..09ab02a74 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -20,7 +20,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include #include #include -#include #include #ifdef _WINDOWS @@ -57,7 +56,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "shared_task_zone_messaging.h" #include "dialogue_window.h" #include "bot_command.h" -#include "queryserv.h" #include "../common/events/player_event_logs.h" extern EntityList entity_list; diff --git a/zone/xtargetautohaters.h b/zone/xtargetautohaters.h index fd8ee4f21..73c0fa8d2 100644 --- a/zone/xtargetautohaters.h +++ b/zone/xtargetautohaters.h @@ -15,8 +15,7 @@ struct HatersCount { }; public: XTargetAutoHaters() : m_client(nullptr), m_group(nullptr), m_raid(nullptr) {} - XTargetAutoHaters(Client *co, Group *go, Raid *ro) : m_client(co), m_group(go), m_raid(ro) {} - ~XTargetAutoHaters() {} + ~XTargetAutoHaters() = default; void merge(XTargetAutoHaters &other); void demerge(XTargetAutoHaters &other); diff --git a/zone/zone.cpp b/zone/zone.cpp index 3ddcc1894..78e618dfd 100644 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -18,7 +18,6 @@ #include #include -#include #include #include @@ -43,8 +42,6 @@ #include "npc.h" #include "object.h" #include "pathfinder_null.h" -#include "pathfinder_nav_mesh.h" -#include "pathfinder_waypoint.h" #include "petitions.h" #include "quest_parser_collection.h" #include "spawn2.h" @@ -58,15 +55,11 @@ #include "../common/data_verification.h" #include "zone_reload.h" #include "../common/repositories/criteria/content_filter_criteria.h" -#include "../common/repositories/content_flags_repository.h" #include "../common/repositories/merchantlist_repository.h" #include "../common/repositories/rule_sets_repository.h" -#include "../common/repositories/zone_points_repository.h" #include "../common/serverinfo.h" #include -#include -#include #ifdef _WINDOWS #define snprintf _snprintf @@ -116,7 +109,7 @@ bool Zone::Bootup(uint32 iZoneID, uint32 iInstanceID, bool is_static) { std::string tmp; if (database.GetVariable("loglevel", tmp)) { int log_levels[4]; - int tmp_i = Strings::ToInt(tmp.c_str()); + int tmp_i = Strings::ToInt(tmp); if (tmp_i>9){ //Server is using the new code for(int i=0;i<4;i++){ if (((int)tmp[i]>=48) && ((int)tmp[i]<=57)) @@ -360,23 +353,10 @@ bool Zone::LoadGroundSpawns() { return(true); } -void Zone::DumpMerchantList(uint32 npcid) { - std::list tmp_merlist = tmpmerchanttable[npcid]; - std::list::const_iterator tmp_itr; - TempMerchantList ml; - - for (tmp_itr = tmp_merlist.begin(); tmp_itr != tmp_merlist.end(); ++tmp_itr) { - ml = *tmp_itr; - - LogInventory("slot[{}] Orig[{}] Item[{}] Charges[{}]", ml.slot, ml.origslot, ml.item, ml.charges); - } -} - int Zone::SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charges, bool sold) { LogInventory("[{}] [{}] charges of [{}]", ((sold) ? "Sold" : "Bought"), charges, item); - //DumpMerchantList(npcid); // Iterate past main items. // If the item being transacted is in this list, return 0; std::list merlist = merchanttable[merchantid]; @@ -443,7 +423,6 @@ int Zone::SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charg } tmpmerchanttable[npcid] = tmp_merlist; - //DumpMerchantList(npcid); return ml.slot; } else { @@ -506,7 +485,6 @@ int Zone::SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charg ml2.origslot = first_empty_slot; tmp_merlist.push_back(ml2); tmpmerchanttable[npcid] = tmp_merlist; - //DumpMerchantList(npcid); return ml2.slot; } } @@ -1059,7 +1037,7 @@ Zone::Zone(uint32 in_zoneid, uint32 in_instanceid, const char* in_short_name) did_adventure_actions = false; database.QGlobalPurge(); - if(zoneid == RuleI(World, GuildBankZoneID)) + if(zoneid == Zones::GUILDHALL) GuildBanks = new GuildBankManager; else GuildBanks = nullptr; @@ -1113,7 +1091,7 @@ bool Zone::Init(bool is_static) { if (RuleManager::Instance()->GetActiveRulesetID() != default_ruleset) { std::string r_name = RuleSetsRepository::GetRuleSetName(database, default_ruleset); if (r_name.size() > 0) { - RuleManager::Instance()->LoadRules(&database, r_name.c_str(), false); + RuleManager::Instance()->LoadRules(&database, r_name, false); } } @@ -1998,6 +1976,11 @@ void Zone::SetTime(uint8 hour, uint8 minute, bool update_world /*= true*/) ZonePoint* Zone::GetClosestZonePoint(const glm::vec3& location, uint32 to, Client* client, float max_distance) { LinkedListIterator iterator(zone_point_list); ZonePoint* closest_zp = nullptr; + + if (!client) { + return closest_zp; + } + float closest_dist = FLT_MAX; float max_distance2 = max_distance * max_distance; iterator.Reset(); @@ -2027,13 +2010,12 @@ ZonePoint* Zone::GetClosestZonePoint(const glm::vec3& location, uint32 to, Clien // if we have a water map and it says we're in a zoneline, lets assume it's just a really big zone line // this shouldn't open up any exploits since those situations are detected later on - if ((zone->HasWaterMap() && !zone->watermap->InZoneLine(glm::vec3(client->GetPosition()))) || (!zone->HasWaterMap() && closest_dist > 400.0f && closest_dist < max_distance2)) + if ((client && zone->HasWaterMap() && !zone->watermap->InZoneLine(glm::vec3(client->GetPosition()))) || (!zone->HasWaterMap() && closest_dist > 400.0f && closest_dist < max_distance2)) { - if (client) { - if (!client->cheat_manager.GetExemptStatus(Port)) { - client->cheat_manager.CheatDetected(MQZoneUnknownDest, location); - } + if (!client->cheat_manager.GetExemptStatus(Port)) { + client->cheat_manager.CheatDetected(MQZoneUnknownDest, location); } + LogInfo("WARNING: Closest zone point for zone id [{}] is [{}], you might need to update your zone_points table if you dont arrive at the right spot", to, closest_dist); LogInfo(". [{}]", to_string(location).c_str()); } @@ -2208,11 +2190,6 @@ bool Zone::HasGraveyard() { return Result; } -void Zone::SetGraveyard(uint32 zoneid, const glm::vec4& graveyardPosition) { - pgraveyard_zoneid = zoneid; - m_graveyard = graveyardPosition; -} - void Zone::LoadZoneBlockedSpells() { if (!blocked_spells) { @@ -2231,10 +2208,9 @@ void Zone::LoadZoneBlockedSpells() void Zone::ClearBlockedSpells() { - if (blocked_spells) { - safe_delete_array(blocked_spells); - zone_total_blocked_spells = 0; - } + safe_delete_array(blocked_spells); + + zone_total_blocked_spells = 0; } bool Zone::IsSpellBlocked(uint32 spell_id, const glm::vec3 &location) diff --git a/zone/zone.h b/zone/zone.h index 6a6906684..53084c07d 100755 --- a/zone/zone.h +++ b/zone/zone.h @@ -177,10 +177,9 @@ public: inline Timer *GetInstanceTimer() { return Instance_Timer; } inline void AddGlobalLootEntry(GlobalLootEntry &in) { return m_global_loot.AddEntry(in); } inline void SetZoneHasCurrentTime(bool time) { zone_has_current_time = time; } - inline void ShowNPCGlobalLoot(Client *to, NPC *who) { m_global_loot.ShowNPCGlobalLoot(to, who); } - inline void ShowZoneGlobalLoot(Client *to) { m_global_loot.ShowZoneGlobalLoot(to); } + inline void ShowNPCGlobalLoot(Client *c, NPC *t) { m_global_loot.ShowNPCGlobalLoot(c, t); } + inline void ShowZoneGlobalLoot(Client *c) { m_global_loot.ShowZoneGlobalLoot(c); } int GetZoneTotalBlockedSpells() { return zone_total_blocked_spells; } - void DumpMerchantList(uint32 npcid); int SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charges, bool sold = false); int32 MobsAggroCount() { return aggroedmobs; } DynamicZone *GetDynamicZone(); @@ -296,7 +295,6 @@ public: void RequestUCSServerStatus(); void ResetAuth(); void SetDate(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute); - void SetGraveyard(uint32 zoneid, const glm::vec4 &graveyardPosition); void SetInstanceTimer(uint32 new_duration); void SetStaticZone(bool sz) { staticzone = sz; } void SetTime(uint8 hour, uint8 minute, bool update_world = true); diff --git a/zone/zone_event_scheduler.cpp b/zone/zone_event_scheduler.cpp index 839dfa981..8d40e6a44 100644 --- a/zone/zone_event_scheduler.cpp +++ b/zone/zone_event_scheduler.cpp @@ -1,5 +1,4 @@ #include "zone_event_scheduler.h" -#include "../common/rulesys.h" #include void ZoneEventScheduler::Process(Zone *zone, WorldContentService *content_service) @@ -103,7 +102,7 @@ void ZoneEventScheduler::Process(Zone *zone, WorldContentService *content_servic rule_key, rule_value ); - RuleManager::Instance()->SetRule(rule_key.c_str(), rule_value.c_str(), nullptr, false, true); + RuleManager::Instance()->SetRule(rule_key, rule_value, nullptr, false, true); } m_active_events.push_back(e); } diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index f57c45daf..f9cb3a310 100755 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -1,7 +1,6 @@ #include "../common/eqemu_logsys.h" #include "../common/extprofile.h" -#include "../common/item_instance.h" #include "../common/rulesys.h" #include "../common/strings.h" @@ -12,9 +11,14 @@ #include "zone.h" #include "zonedb.h" #include "aura.h" -#include "../common/repositories/criteria/content_filter_criteria.h" +#include "../common/repositories/character_tribute_repository.h" #include "../common/repositories/character_disciplines_repository.h" #include "../common/repositories/npc_types_repository.h" +#include "../common/repositories/character_bind_repository.h" +#include "../common/repositories/character_pet_buffs_repository.h" +#include "../common/repositories/character_pet_inventory_repository.h" +#include "../common/repositories/character_pet_info_repository.h" +#include "../common/repositories/character_buffs_repository.h" #include #include @@ -955,23 +959,23 @@ bool ZoneDatabase::LoadCharacterBandolier(uint32 character_id, PlayerProfile_Str return true; } -bool ZoneDatabase::LoadCharacterTribute(uint32 character_id, PlayerProfile_Struct* pp){ - std::string query = StringFormat("SELECT `tier`, `tribute` FROM `character_tribute` WHERE `id` = %u", character_id); - auto results = database.QueryDatabase(query); - int i = 0; - for (i = 0; i < EQ::invtype::TRIBUTE_SIZE; i++){ - pp->tributes[i].tribute = 0xFFFFFFFF; - pp->tributes[i].tier = 0; +void ZoneDatabase::LoadCharacterTribute(Client* c){ + const auto& l = CharacterTributeRepository::GetWhere(database, fmt::format("character_id = {}", c->CharacterID())); + + for (auto& t : c->GetPP().tributes) { + t.tier = 0; + t.tribute = TRIBUTE_NONE; } - i = 0; - for (auto& row = results.begin(); row != results.end(); ++row) { - if(Strings::ToInt(row[1]) != TRIBUTE_NONE){ - pp->tributes[i].tier = Strings::ToInt(row[0]); - pp->tributes[i].tribute = Strings::ToInt(row[1]); + + auto i = 0; + + for (const auto& e : l) { + if (e.tribute != TRIBUTE_NONE) { + c->GetPP().tributes[i].tier = e.tier; + c->GetPP().tributes[i].tribute = e.tribute; i++; } } - return true; } bool ZoneDatabase::LoadCharacterPotions(uint32 character_id, PlayerProfile_Struct *pp) @@ -1032,25 +1036,6 @@ bool ZoneDatabase::SaveCharacterLanguage(uint32 character_id, uint32 lang_id, ui return true; } -bool ZoneDatabase::SaveCharacterBindPoint(uint32 character_id, const BindStruct &bind, uint32 bind_num) -{ - /* Save Home Bind Point */ - std::string query = - StringFormat("REPLACE INTO `character_bind` (id, zone_id, instance_id, x, y, z, heading, slot) VALUES (%u, " - "%u, %u, %f, %f, %f, %f, %i)", - character_id, bind.zone_id, bind.instance_id, bind.x, bind.y, bind.z, bind.heading, bind_num); - - LogDebug("ZoneDatabase::SaveCharacterBindPoint for character ID: [{}] zone_id: [{}] instance_id: [{}] position: [{}] [{}] [{}] [{}] bind_num: [{}]", - character_id, bind.zone_id, bind.instance_id, bind.x, bind.y, bind.z, bind.heading, bind_num); - - auto results = QueryDatabase(query); - if (!results.RowsAffected()) - LogDebug("ERROR Bind Home Save: [{}]. [{}]", results.ErrorMessage().c_str(), - query.c_str()); - - return true; -} - bool ZoneDatabase::SaveCharacterMaterialColor(uint32 character_id, uint32 slot_id, uint32 color){ uint8 red = (color & 0x00FF0000) >> 16; uint8 green = (color & 0x0000FF00) >> 8; @@ -1074,18 +1059,35 @@ bool ZoneDatabase::SaveCharacterDisc(uint32 character_id, uint32 slot_id, uint32 return true; } -bool ZoneDatabase::SaveCharacterTribute(uint32 character_id, PlayerProfile_Struct* pp){ - std::string query = StringFormat("DELETE FROM `character_tribute` WHERE `id` = %u", character_id); - QueryDatabase(query); - /* Save Tributes only if we have values... */ - for (int i = 0; i < EQ::invtype::TRIBUTE_SIZE; i++){ - if (pp->tributes[i].tribute >= 0 && pp->tributes[i].tribute != TRIBUTE_NONE){ - std::string query = StringFormat("REPLACE INTO `character_tribute` (id, tier, tribute) VALUES (%u, %u, %u)", character_id, pp->tributes[i].tier, pp->tributes[i].tribute); - QueryDatabase(query); - LogDebug("ZoneDatabase::SaveCharacterTribute for character ID: [{}], tier:[{}] tribute:[{}] done", character_id, pp->tributes[i].tier, pp->tributes[i].tribute); +void ZoneDatabase::SaveCharacterTribute(Client* c) +{ + std::vector tributes = {}; + CharacterTributeRepository::CharacterTribute tribute = {}; + + uint32 tribute_count = 0; + for (auto& t : c->GetPP().tributes) { + if (t.tribute != TRIBUTE_NONE) { + tribute_count++; } } - return true; + + tributes.reserve(tribute_count); + + for (auto& t : c->GetPP().tributes) { + if (t.tribute != TRIBUTE_NONE) { + tribute.character_id = c->CharacterID(); + tribute.tier = t.tier; + tribute.tribute = t.tribute; + + tributes.emplace_back(tribute); + } + } + + CharacterTributeRepository::DeleteWhere(database, fmt::format("character_id = {}", c->CharacterID())); + + if (tribute_count > 0) { + CharacterTributeRepository::InsertMany(database, tributes); + } } bool ZoneDatabase::SaveCharacterBandolier(uint32 character_id, uint8 bandolier_id, uint8 bandolier_slot, uint32 item_id, uint32 icon, const char* bandolier_name) @@ -1134,8 +1136,6 @@ bool ZoneDatabase::SaveCharacterData( return false; } - const auto mail_key = database.GetMailKey(c->CharacterID()); - clock_t t = std::clock(); /* Function timer start */ const auto query = fmt::format( "REPLACE INTO `character_data` (" @@ -1429,7 +1429,7 @@ bool ZoneDatabase::SaveCharacterData( m_epp->perAA, m_epp->expended_aa, m_epp->last_invsnapshot_time, - mail_key.c_str() + c->GetMailKeyFull() ); auto results = database.QueryDatabase(query); LogDebug( @@ -1686,7 +1686,7 @@ void ZoneDatabase::ListCharacterInvSnapshots(uint32 character_id, std::list(Strings::ToUnsignedInt(row[0]), Strings::ToInt(row[1]))); + is_list.emplace_back(std::pair(Strings::ToUnsignedInt(row[0]), Strings::ToInt(row[1]))); } bool ZoneDatabase::ValidateCharacterInvSnapshotTimestamp(uint32 character_id, uint32 timestamp) { @@ -1736,7 +1736,7 @@ void ZoneDatabase::ParseCharacterInvSnapshot(uint32 character_id, uint32 timesta return; for (auto row : results) - parse_list.push_back(std::pair(Strings::ToInt(row[0]), Strings::ToUnsignedInt(row[1]))); + parse_list.emplace_back(std::pair(Strings::ToInt(row[0]), Strings::ToUnsignedInt(row[1]))); } void ZoneDatabase::DivergeCharacterInvSnapshotFromInventory(uint32 character_id, uint32 timestamp, std::list> &compare_list) { @@ -1780,7 +1780,7 @@ void ZoneDatabase::DivergeCharacterInvSnapshotFromInventory(uint32 character_id, return; for (auto row : results) - compare_list.push_back(std::pair(Strings::ToInt(row[0]), Strings::ToUnsignedInt(row[1]))); + compare_list.emplace_back(std::pair(Strings::ToInt(row[0]), Strings::ToUnsignedInt(row[1]))); } void ZoneDatabase::DivergeCharacterInventoryFromInvSnapshot(uint32 character_id, uint32 timestamp, std::list> &compare_list) { @@ -1821,7 +1821,7 @@ void ZoneDatabase::DivergeCharacterInventoryFromInvSnapshot(uint32 character_id, return; for (auto row : results) - compare_list.push_back(std::pair(Strings::ToInt(row[0]), Strings::ToUnsignedInt(row[1]))); + compare_list.emplace_back(std::pair(Strings::ToInt(row[0]), Strings::ToUnsignedInt(row[1]))); } bool ZoneDatabase::RestoreCharacterInvSnapshot(uint32 character_id, uint32 timestamp) { @@ -3077,29 +3077,62 @@ void ZoneDatabase::UpdateAltCurrencyValue(uint32 char_id, uint32 currency_id, ui void ZoneDatabase::SaveBuffs(Client *client) { - std::string query = StringFormat("DELETE FROM `character_buffs` WHERE `character_id` = '%u'", client->CharacterID()); - database.QueryDatabase(query); + // delete the character buffs + CharacterBuffsRepository::DeleteWhere(database, fmt::format("character_id = {}", client->CharacterID())); + // get the character buffs uint32 buff_count = client->GetMaxBuffSlots(); Buffs_Struct *buffs = client->GetBuffs(); + // character buffs struct + auto b = CharacterBuffsRepository::NewEntity(); + + // vector of character buffs + std::vector character_buffs = {}; + + // count the number of buffs that are valid + int character_buff_count = 0; + for (int index = 0; index < buff_count; index++) { + if (!IsValidSpell(buffs[index].spellid)) { + continue; + } + character_buff_count++; + } + + // allocate memory for the character buffs + character_buffs.reserve(character_buff_count); + for (int index = 0; index < buff_count; index++) { if (!IsValidSpell(buffs[index].spellid)) { continue; } - query = StringFormat("INSERT INTO `character_buffs` (character_id, slot_id, spell_id, " - "caster_level, caster_name, ticsremaining, counters, numhits, melee_rune, " - "magic_rune, persistent, dot_rune, caston_x, caston_y, caston_z, ExtraDIChance, " - "instrument_mod) " - "VALUES('%u', '%u', '%u', '%u', '%s', '%d', '%u', '%u', '%u', '%u', '%u', '%u', " - "'%i', '%i', '%i', '%i', '%i')", client->CharacterID(), index, buffs[index].spellid, - buffs[index].casterlevel, buffs[index].caster_name, buffs[index].ticsremaining, - buffs[index].counters, buffs[index].hit_number, buffs[index].melee_rune, - buffs[index].magic_rune, buffs[index].persistant_buff, buffs[index].dot_rune, - buffs[index].caston_x, buffs[index].caston_y, buffs[index].caston_z, - buffs[index].ExtraDIChance, buffs[index].instrument_mod); - QueryDatabase(query); + // fill in the buff struct + b.character_id = client->CharacterID(); + b.slot_id = index; + b.spell_id = buffs[index].spellid; + b.caster_level = buffs[index].casterlevel; + b.caster_name = buffs[index].caster_name; + b.ticsremaining = buffs[index].ticsremaining; + b.counters = buffs[index].counters; + b.numhits = buffs[index].hit_number; + b.melee_rune = buffs[index].melee_rune; + b.magic_rune = buffs[index].magic_rune; + b.persistent = buffs[index].persistant_buff; + b.dot_rune = buffs[index].dot_rune; + b.caston_x = buffs[index].caston_x; + b.caston_y = buffs[index].caston_y; + b.caston_z = buffs[index].caston_z; + b.ExtraDIChance = buffs[index].ExtraDIChance; + b.instrument_mod = buffs[index].instrument_mod; + + // add the buff to the vector + character_buffs.emplace_back(b); + } + + // insert the buffs into the database + if (!character_buffs.empty()) { + CharacterBuffsRepository::InsertMany(database, character_buffs); } } @@ -3235,72 +3268,123 @@ void ZoneDatabase::SavePetInfo(Client *client) { PetInfo *petinfo = nullptr; - std::string query = StringFormat("DELETE FROM `character_pet_buffs` WHERE `char_id` = %u", client->CharacterID()); - auto results = database.QueryDatabase(query); - if (!results.Success()) - return; + // Pet Info + std::vector pet_infos = {}; + CharacterPetInfoRepository::CharacterPetInfo pet_info = {}; - query = StringFormat("DELETE FROM `character_pet_inventory` WHERE `char_id` = %u", client->CharacterID()); - results = database.QueryDatabase(query); - if (!results.Success()) - return; + // Pet buffs + std::vector pet_buffs = {}; + CharacterPetBuffsRepository::CharacterPetBuffs pet_buff = {}; + // Pet inventory + std::vector inventory = {}; + CharacterPetInventoryRepository::CharacterPetInventory item = {}; + + // Loop through pet types for (int pet = 0; pet < 2; pet++) { petinfo = client->GetPetInfo(pet); - if (!petinfo) + if (!petinfo) { continue; + } - query = StringFormat("INSERT INTO `character_pet_info` " - "(`char_id`, `pet`, `petname`, `petpower`, `spell_id`, `hp`, `mana`, `size`, `taunting`) " - "VALUES (%u, %u, '%s', %i, %u, %u, %u, %f, %u) " - "ON DUPLICATE KEY UPDATE `petname` = '%s', `petpower` = %i, `spell_id` = %u, " - "`hp` = %u, `mana` = %u, `size` = %f, `taunting` = %u", - client->CharacterID(), pet, petinfo->Name, petinfo->petpower, petinfo->SpellID, - petinfo->HP, petinfo->Mana, petinfo->size, (petinfo->taunting) ? 1 : 0, - // and now the ON DUPLICATE ENTRIES - petinfo->Name, petinfo->petpower, petinfo->SpellID, petinfo->HP, petinfo->Mana, petinfo->size, (petinfo->taunting) ? 1 : 0); - results = database.QueryDatabase(query); - if (!results.Success()) - return; - query.clear(); + // build pet info into struct + pet_info.char_id = client->CharacterID(); + pet_info.pet = pet; + pet_info.petname = petinfo->Name; + pet_info.petpower = petinfo->petpower; + pet_info.spell_id = petinfo->SpellID; + pet_info.hp = petinfo->HP; + pet_info.mana = petinfo->Mana; + pet_info.size = petinfo->size; + pet_info.taunting = (petinfo->taunting) ? 1 : 0; - // pet buffs! + // add pet info to vector + pet_infos.push_back(pet_info); + + // build pet buffs into struct + int pet_buff_count = 0; int max_slots = RuleI(Spells, MaxTotalSlotsPET); + + // count pet buffs for (int index = 0; index < max_slots; index++) { if (!IsValidSpell(petinfo->Buffs[index].spellid)) { continue; } - if (query.length() == 0) - query = StringFormat("INSERT INTO `character_pet_buffs` " - "(`char_id`, `pet`, `slot`, `spell_id`, `caster_level`, " - "`ticsremaining`, `counters`, `instrument_mod`) " - "VALUES (%u, %u, %u, %u, %u, %d, %d, %u)", - client->CharacterID(), pet, index, petinfo->Buffs[index].spellid, - petinfo->Buffs[index].level, petinfo->Buffs[index].duration, - petinfo->Buffs[index].counters, petinfo->Buffs[index].bard_modifier); - else - query += StringFormat(", (%u, %u, %u, %u, %u, %d, %d, %u)", - client->CharacterID(), pet, index, petinfo->Buffs[index].spellid, - petinfo->Buffs[index].level, petinfo->Buffs[index].duration, - petinfo->Buffs[index].counters, petinfo->Buffs[index].bard_modifier); + pet_buff_count++; } - database.QueryDatabase(query); - query.clear(); - // pet inventory! - for (int index = EQ::invslot::EQUIPMENT_BEGIN; index <= EQ::invslot::EQUIPMENT_END; index++) { - if (!petinfo->Items[index]) + // reserve space for pet buffs + pet_buffs.reserve(pet_buff_count); + + // loop through pet buffs + for (int index = 0; index < max_slots; index++) { + if (!IsValidSpell(petinfo->Buffs[index].spellid)) { continue; + } - if (query.length() == 0) - query = StringFormat("INSERT INTO `character_pet_inventory` " - "(`char_id`, `pet`, `slot`, `item_id`) " - "VALUES (%u, %u, %u, %u)", - client->CharacterID(), pet, index, petinfo->Items[index]); - else - query += StringFormat(", (%u, %u, %u, %u)", client->CharacterID(), pet, index, petinfo->Items[index]); + pet_buff.char_id = client->CharacterID(); + pet_buff.pet = pet; + pet_buff.slot = index; + pet_buff.spell_id = petinfo->Buffs[index].spellid; + pet_buff.caster_level = petinfo->Buffs[index].level; + pet_buff.ticsremaining = petinfo->Buffs[index].duration; + pet_buff.counters = petinfo->Buffs[index].counters; + pet_buff.instrument_mod = petinfo->Buffs[index].bard_modifier; + + // add pet buffs to vector + pet_buffs.push_back(pet_buff); } - database.QueryDatabase(query); + + // build pet inventory into struct + int pet_inventory_count = 0; + for (int index = EQ::invslot::EQUIPMENT_BEGIN; index <= EQ::invslot::EQUIPMENT_END; index++) { + if (!petinfo->Items[index]) { + continue; + } + pet_inventory_count++; + } + + // reserve space for pet inventory + inventory.reserve(pet_inventory_count); + + // loop through pet inventory + for (int index = EQ::invslot::EQUIPMENT_BEGIN; index <= EQ::invslot::EQUIPMENT_END; index++) { + if (!petinfo->Items[index]) { + continue; + } + + item.char_id = client->CharacterID(); + item.pet = pet; + item.slot = index; + item.item_id = petinfo->Items[index]; + + // add pet inventory to vector + inventory.push_back(item); + } + } + + // Delete existing pet info + CharacterPetInfoRepository::DeleteWhere(database, fmt::format("char_id = {}", client->CharacterID())); + + // insert pet info into database + if (!pet_infos.empty()) { + CharacterPetInfoRepository::InsertMany(database, pet_infos); + } + + // Delete existing pet buffs + CharacterPetBuffsRepository::DeleteWhere(database, fmt::format("char_id = {}", client->CharacterID())); + + // insert pet buffs into database + if (!pet_buffs.empty()) { + CharacterPetBuffsRepository::InsertMany(database, pet_buffs); + } + + // Delete existing pet inventory + CharacterPetInventoryRepository::DeleteWhere(database, fmt::format("char_id = {}", client->CharacterID())); + + // insert pet inventory into database + if (!inventory.empty()) { + CharacterPetInventoryRepository::InsertMany(database, inventory); } } @@ -4142,7 +4226,7 @@ bool ZoneDatabase::LoadCharacterCorpseData(uint32 corpse_id, CharacterCorpseEntr item.ornamentidfile = Strings::ToUnsignedInt(row[r++]); item.ornament_hero_model = Strings::ToUnsignedInt(row[r++]); - corpse.items.push_back(std::move(item)); + corpse.items.emplace_back(std::move(item)); r = 0; i++; } @@ -4522,3 +4606,52 @@ void ZoneDatabase::UpdateGMStatus(uint32 accID, int newStatus) database.QueryDatabase(query); } } + +void ZoneDatabase::SaveCharacterBinds(Client *c) +{ + // bulk save character binds + std::vector binds = {}; + CharacterBindRepository::CharacterBind bind = {}; + + // count character binds + int bind_count = 0; + for (auto & b : c->GetPP().binds) { + if (b.zone_id) { + bind_count++; + } + } + + LogInfo("bind count is [{}]", bind_count); + + // allocate memory for binds + binds.reserve(bind_count); + + // copy binds to vector + int i = 0; + for (auto &b: c->GetPP().binds) { + if (b.zone_id) { + // copy bind data + bind.id = c->CharacterID(); + bind.zone_id = b.zone_id; + bind.instance_id = b.instance_id; + bind.x = b.x; + bind.y = b.y; + bind.z = b.z; + bind.heading = b.heading; + bind.slot = i; + + // add bind to vector + binds.emplace_back(bind); + + i++; + } + } + + // save binds + if (bind_count > 0) { + // delete old binds + CharacterBindRepository::DeleteWhere(database, fmt::format("id = {}", c->CharacterID())); + // save new binds + CharacterBindRepository::InsertMany(database, binds); + } +} diff --git a/zone/zonedb.h b/zone/zonedb.h index 23309128c..c35ee885d 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -304,7 +304,7 @@ struct CharacterCorpseItemEntry uint32 ornament_hero_model; }; -struct CharacterCorpseEntry +struct CharacterCorpseEntry { bool locked; uint32 exp; @@ -442,11 +442,9 @@ public: bool LoadCharacterPotions(uint32 character_id, PlayerProfile_Struct* pp); bool LoadCharacterSkills(uint32 character_id, PlayerProfile_Struct* pp); bool LoadCharacterSpellBook(uint32 character_id, PlayerProfile_Struct* pp); - bool LoadCharacterTribute(uint32 character_id, PlayerProfile_Struct* pp); bool SaveCharacterAA(uint32 character_id, uint32 aa_id, uint32 current_level, uint32 charges); bool SaveCharacterBandolier(uint32 character_id, uint8 bandolier_id, uint8 bandolier_slot, uint32 item_id, uint32 icon, const char* bandolier_name); - bool SaveCharacterBindPoint(uint32 character_id, const BindStruct &bind, uint32 bind_number); bool SaveCharacterCurrency(uint32 character_id, PlayerProfile_Struct* pp); bool SaveCharacterData(Client* c, PlayerProfile_Struct* pp, ExtendedProfile_Struct* m_epp); bool SaveCharacterDisc(uint32 character_id, uint32 slot_id, uint32 disc_id); @@ -457,7 +455,6 @@ public: bool SaveCharacterPotionBelt(uint32 character_id, uint8 potion_id, uint32 item_id, uint32 icon); bool SaveCharacterSkill(uint32 character_id, uint32 skill_id, uint32 value); bool SaveCharacterSpell(uint32 character_id, uint32 spell_id, uint32 slot_id); - bool SaveCharacterTribute(uint32 character_id, PlayerProfile_Struct* pp); double GetAAEXPModifier(uint32 character_id, uint32 zone_id, int16 instance_version = -1) const; double GetEXPModifier(uint32 character_id, uint32 zone_id, int16 instance_version = -1) const; @@ -528,8 +525,6 @@ public: bool LoadSpawnGroups(const char* zone_name, uint16 version, SpawnGroupList* spawn_group_list); bool LoadSpawnGroupsByID(int spawn_group_id, SpawnGroupList* spawn_group_list); bool PopulateZoneSpawnList(uint32 zoneid, LinkedList &spawn2_list, int16 version); - bool PopulateZoneSpawnListClose(uint32 zoneid, LinkedList &spawn2_list, int16 version, const glm::vec4& client_position, uint32 repop_distance); - Spawn2* LoadSpawn2(LinkedList &spawn2_list, uint32 spawn2id, uint32 timeleft); bool CreateSpawn2(Client *c, uint32 spawngroup, const char* zone, const glm::vec4& position, uint32 respawn, uint32 variance, uint16 condition, int16 cond_value); void UpdateRespawnTime(uint32 id, uint16 instance_id,uint32 timeleft); uint32 GetSpawnTimeLeft(uint32 id, uint16 instance_id); @@ -666,6 +661,10 @@ public: // bot database add-on to eliminate the need for a second database connection BotDatabase botdb; + static void LoadCharacterTribute(Client* c); + + static void SaveCharacterBinds(Client *c); + static void SaveCharacterTribute(Client* c); protected: void ZDBInitVars(); diff --git a/zone/zoning.cpp b/zone/zoning.cpp index 3a41ecb1d..1f9375ef1 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -34,10 +34,7 @@ extern QueryServ* QServ; extern WorldServer worldserver; extern Zone* zone; -#include "../common/content/world_content_service.h" - #include "../common/repositories/character_peqzone_flags_repository.h" -#include "../common/repositories/zone_repository.h" #include "../common/events/player_event_logs.h" @@ -75,19 +72,14 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { target_zone_id = zone->GetZoneID(); break; case GMSummon: + case ZoneSolicited: //we told the client to zone somewhere, so we know where they are going. target_zone_id = zonesummon_id; break; case GateToBindPoint: - target_zone_id = m_pp.binds[0].zone_id; - target_instance_id = m_pp.binds[0].instance_id; - break; case ZoneToBindPoint: target_zone_id = m_pp.binds[0].zone_id; target_instance_id = m_pp.binds[0].instance_id; break; - case ZoneSolicited: //we told the client to zone somewhere, so we know where they are going. - target_zone_id = zonesummon_id; - break; case ZoneUnsolicited: //client came up with this on its own. zone_point = zone->GetClosestZonePointWithoutZone(GetX(), GetY(), GetZ(), this, ZONEPOINT_NOZONE_RANGE); if (zone_point) { @@ -648,7 +640,7 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z auto zd = GetZoneVersionWithFallback(zoneID, zone->GetInstanceVersion()); if (zd) { - pZoneName = strcpy(new char[strlen(zd->long_name.c_str()) + 1], zd->long_name.c_str()); + pZoneName = strcpy(new char[zd->long_name.length() + 1], zd->long_name.c_str()); } LogInfo( @@ -794,8 +786,7 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z FastQueuePacket(&outapp); } else if(zm == EvacToSafeCoords) { - auto outapp = - new EQApplicationPacket(OP_RequestClientZoneChange, sizeof(RequestClientZoneChange_Struct)); + auto outapp = new EQApplicationPacket(OP_RequestClientZoneChange, sizeof(RequestClientZoneChange_Struct)); RequestClientZoneChange_Struct* gmg = (RequestClientZoneChange_Struct*) outapp->pBuffer; // if we are in the same zone we want to evac to, client will not send OP_ZoneChange back to do an actual @@ -806,12 +797,11 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z // 76 is orignial Plane of Hate // WildcardX 27 January 2008. Tested this for 6.2 and Titanium clients. - if(GetZoneID() == 1) + if (GetZoneID() == 1) { gmg->zone_id = 2; - else if(GetZoneID() == 2) - gmg->zone_id = 1; - else + } else { gmg->zone_id = 1; + } gmg->x = x; gmg->y = y; @@ -900,23 +890,28 @@ void NPC::Gate(uint8 bind_number) { void Client::SetBindPoint(int bind_number, int to_zone, int to_instance, const glm::vec3 &location) { - if (bind_number < 0 || bind_number >= 4) + if (bind_number < 0 || bind_number >= 4) { bind_number = 0; + } if (to_zone == -1) { - m_pp.binds[bind_number].zone_id = zone->GetZoneID(); - m_pp.binds[bind_number].instance_id = (zone->GetInstanceID() != 0 && zone->IsInstancePersistent()) ? zone->GetInstanceID() : 0; - m_pp.binds[bind_number].x = m_Position.x; - m_pp.binds[bind_number].y = m_Position.y; - m_pp.binds[bind_number].z = m_Position.z; - } else { - m_pp.binds[bind_number].zone_id = to_zone; - m_pp.binds[bind_number].instance_id = to_instance; - m_pp.binds[bind_number].x = location.x; - m_pp.binds[bind_number].y = location.y; - m_pp.binds[bind_number].z = location.z; + m_pp.binds[bind_number].zone_id = zone->GetZoneID(); + m_pp.binds[bind_number].instance_id = (zone->GetInstanceID() != 0 && zone->IsInstancePersistent())? zone->GetInstanceID() : 0; + m_pp.binds[bind_number].x = m_Position.x; + m_pp.binds[bind_number].y = m_Position.y; + m_pp.binds[bind_number].z = m_Position.z; + m_pp.binds[bind_number].heading = GetHeading(); } - database.SaveCharacterBindPoint(CharacterID(), m_pp.binds[bind_number], bind_number); + else { + m_pp.binds[bind_number].zone_id = to_zone; + m_pp.binds[bind_number].instance_id = to_instance; + m_pp.binds[bind_number].x = location.x; + m_pp.binds[bind_number].y = location.y; + m_pp.binds[bind_number].z = location.z; + m_pp.binds[bind_number].heading = GetHeading(); + } + + database.SaveCharacterBinds(this); } void Client::SetBindPoint2(int bind_number, int to_zone, int to_instance, const glm::vec4 &location) @@ -939,7 +934,8 @@ void Client::SetBindPoint2(int bind_number, int to_zone, int to_instance, const m_pp.binds[bind_number].z = location.z; m_pp.binds[bind_number].heading = location.w; } - database.SaveCharacterBindPoint(CharacterID(), m_pp.binds[bind_number], bind_number); + + database.SaveCharacterBinds(this); } void Client::GoToBind(uint8 bind_number) {