Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,995 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Simulated Dungeo... | 8698914 | 38 mins ago | IN | 0 S | 0.05678178 | ||||
Choose SD Buff | 8698868 | 39 mins ago | IN | 0 S | 0.0041976 | ||||
Reset Difficulty... | 8698805 | 39 mins ago | IN | 0 S | 0.02098228 | ||||
Simulated Dungeo... | 8694417 | 1 hr ago | IN | 0 S | 0.0466516 | ||||
Simulated Dungeo... | 8694264 | 1 hr ago | IN | 0 S | 0.04282105 | ||||
Choose SD Buff | 8694170 | 1 hr ago | IN | 0 S | 0.00837838 | ||||
Reset Difficulty... | 8694130 | 1 hr ago | IN | 0 S | 0.04690965 | ||||
Simulated Dungeo... | 8693308 | 1 hr ago | IN | 0 S | 0.0725992 | ||||
Simulated Dungeo... | 8693172 | 1 hr ago | IN | 0 S | 0.0693515 | ||||
Choose SD Buff | 8693132 | 1 hr ago | IN | 0 S | 0.003951 | ||||
Simulated Dungeo... | 8693001 | 1 hr ago | IN | 0 S | 0.0787351 | ||||
Choose SD Buff | 8692967 | 1 hr ago | IN | 0 S | 0.00641588 | ||||
Simulated Dungeo... | 8692869 | 1 hr ago | IN | 0 S | 0.05426245 | ||||
Choose SD Buff | 8692829 | 1 hr ago | IN | 0 S | 0.0038416 | ||||
Simulated Dungeo... | 8692731 | 1 hr ago | IN | 0 S | 0.09794751 | ||||
Simulated Dungeo... | 8692704 | 1 hr ago | IN | 0 S | 0.03533056 | ||||
Choose SD Buff | 8692685 | 1 hr ago | IN | 0 S | 0.00581922 | ||||
Reset Difficulty... | 8692602 | 1 hr ago | IN | 69 S | 0.02784655 | ||||
Simulated Dungeo... | 8692559 | 1 hr ago | IN | 0 S | 0.05718565 | ||||
Simulated Dungeo... | 8692424 | 1 hr ago | IN | 0 S | 0.0520086 | ||||
Simulated Dungeo... | 8690425 | 1 hr ago | IN | 0 S | 0.06019103 | ||||
Choose SD Buff | 8690385 | 1 hr ago | IN | 0 S | 0.00463637 | ||||
Simulated Dungeo... | 8690263 | 1 hr ago | IN | 0 S | 0.0483002 | ||||
Choose SD Buff | 8690209 | 1 hr ago | IN | 0 S | 0.00495514 | ||||
Simulated Dungeo... | 8690135 | 1 hr ago | IN | 0 S | 0.05400508 |
Loading...
Loading
This contract contains unverified libraries: WO
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
FARPG_Simulated_DungeonV1
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-02-09 */ // File: @openzeppelin/[email protected]/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: FINALdeployFA/LIB - Common Structs.sol pragma solidity ^0.8.9; library S { //Pet struct struct Unit { uint hp; //unit fainted when hp <= 0 uint attack; //attack - defense = damage on hp uint defense; //attack - defense = damage on hp uint speed; //how frequent to take a move uint intelligence; //how frequent to use skill uint genestrength; //depends on how many duplicates uint range; //range skill, id uint special; //special skill, id } struct Status { uint id; //unit id uint family; //determine which class of gear it can be wore. record while evolve, since its only has max 2 family, example Dragon+phantom, and 30gene max, so can use *100 uint stage; //1 is rookie, 2 is mature, 3 is perfect } struct Time { uint bond; //how many time you took on this unit , use to evolve uint stamina; //how much you can train it per day. it should follow saturation graph uint hunger; //how much you feed it per day. it should follow saturation graph } } // File: FINALdeployFA/LIB - WeatherOutfit.sol pragma solidity ^0.8.0; library WO { function WeatherBuff (S.Unit[6] memory _UnitGroup, uint _weather) external pure returns (S.Unit[6] memory UnitGroup) { UnitGroup = _UnitGroup; for (uint i = 0; i < UnitGroup.length; i++) { if (_weather == 0 && ( UnitGroup[i].special == 3 || UnitGroup[i].special == 5 || UnitGroup[i].special == 10 || UnitGroup[i].special == 23 || UnitGroup[i].special == 28 || UnitGroup[i].special == 38 || UnitGroup[i].special == 39 || UnitGroup[i].special == 60 || UnitGroup[i].special == 63 || UnitGroup[i].special == 69 || UnitGroup[i].special == 81 || UnitGroup[i].special == 95)) { //Fire UnitGroup[i].attack = UnitGroup[i].attack*2; } else if (_weather == 0 && ( UnitGroup[i].special == 20 || UnitGroup[i].special == 21 || UnitGroup[i].special == 22 || UnitGroup[i].special == 24 || UnitGroup[i].special == 26 || UnitGroup[i].special == 29 || UnitGroup[i].special == 30 || UnitGroup[i].special == 42 || UnitGroup[i].special == 51 || UnitGroup[i].special == 72 || UnitGroup[i].special == 76 || UnitGroup[i].special == 80 || UnitGroup[i].special == 86 || UnitGroup[i].special == 96)) { //Nature UnitGroup[i].intelligence = UnitGroup[i].intelligence*2; } else if (_weather == 2 && ( UnitGroup[i].special == 15 || UnitGroup[i].special == 17 || UnitGroup[i].special == 31 || UnitGroup[i].special == 35 || UnitGroup[i].special == 71 || UnitGroup[i].special == 75 || UnitGroup[i].special == 79 || UnitGroup[i].special == 98)) { //Water UnitGroup[i].hp = (UnitGroup[i].hp*15)/10; } else if (_weather == 3 && ( UnitGroup[i].special == 2 || UnitGroup[i].special == 4 || UnitGroup[i].special == 27 || UnitGroup[i].special == 55 || UnitGroup[i].special == 57 || UnitGroup[i].special == 62 || UnitGroup[i].special == 73 || UnitGroup[i].special == 85 || UnitGroup[i].special == 87 || UnitGroup[i].special == 97)) { //Electric UnitGroup[i].speed = UnitGroup[i].speed*2; } else if (_weather == 4 && ( UnitGroup[i].special == 12 || UnitGroup[i].special == 14 || UnitGroup[i].special == 16 || UnitGroup[i].special == 25 || UnitGroup[i].special == 43 || UnitGroup[i].special == 46 || UnitGroup[i].special == 47 || UnitGroup[i].special == 61 || UnitGroup[i].special == 64 || UnitGroup[i].special == 82)) { //Ice UnitGroup[i].defense = UnitGroup[i].defense*2; } else if (_weather == 6 && ( UnitGroup[i].special == 8 || UnitGroup[i].special == 9 || UnitGroup[i].special == 11 || UnitGroup[i].special == 18 || UnitGroup[i].special == 32 || UnitGroup[i].special == 33 || UnitGroup[i].special == 36 || UnitGroup[i].special == 44 || UnitGroup[i].special == 54 || UnitGroup[i].special == 56 || UnitGroup[i].special == 58 || UnitGroup[i].special == 70 || UnitGroup[i].special == 74 || UnitGroup[i].special == 78 || UnitGroup[i].special == 84 || UnitGroup[i].special == 88)) { //Dark UnitGroup[i].hp = UnitGroup[i].hp*2; } else if (_weather == 5 && ( UnitGroup[i].special == 6 || UnitGroup[i].special == 34 || UnitGroup[i].special == 40 || UnitGroup[i].special == 48 || UnitGroup[i].special == 77 || UnitGroup[i].special == 89 || UnitGroup[i].special == 99)) { //Light UnitGroup[i].speed = UnitGroup[i].speed*2; } } } function TrainersOutfitBonus (S.Unit[6] memory _UnitGroup, uint[5] memory _outfitsID, uint[5] memory _outfitBalance) internal pure returns (S.Unit[6] memory UnitGroup) { //_outfit[0~4] is outfit ID for the trainer ID. (what to wear) ID 0 means wearing nothing //[0] = Aerobot [1] = headgear [2] = Body [3] = Leggings [4 = Boots UnitGroup = _UnitGroup; //convert Outfit balance into Multiplier for (uint i=0; i<5; i++) { if (_outfitBalance[i] >= 4096) { _outfitBalance[i] = 5; } else if (_outfitBalance[i] >= 512) { _outfitBalance[i] = 4; } else if (_outfitBalance[i] >= 64) { _outfitBalance[i] = 3; } else if (_outfitBalance[i] >= 8) { _outfitBalance[i] = 2; } else if (_outfitBalance[i] >= 1) { _outfitBalance[i] = 1; } //otherwise = 0, multiplier =0 } S.Unit memory Bonus; //Get Bonus from each outfit //========== AEROBOT ====================== if (_outfitsID[0] == 3001) { //Bolt (Aerobot) //spd + 6 Bonus.speed += (6 * _outfitBalance[0]); } else if (_outfitsID[0] == 3002) { //Pixi (Aerobot) //atk + 6 Bonus.attack += (6 * _outfitBalance[0]); } else if (_outfitsID[0] == 3003) { //Finspark (Aerobot) //SPD + 10 Bonus.speed += (10 * _outfitBalance[0]); } else if (_outfitsID[0] == 3004) { //Cyanite //ATK + 10 Bonus.attack += (10 * _outfitBalance[0]); } else if (_outfitsID[0] == 3005) { //Daemon //all (20, 2, 2, 2, 1) Bonus.hp += (20 * _outfitBalance[0]); Bonus.attack += (2 * _outfitBalance[0]); Bonus.defense += (2 * _outfitBalance[0]); Bonus.speed += (2 * _outfitBalance[0]); Bonus.intelligence += (1 * _outfitBalance[0]); } else if (_outfitsID[0] == 3006) { //Skye //Int +4 Bonus.intelligence += (4 * _outfitBalance[0]); } else if (_outfitsID[0] == 3007) { //Cocoon //int +3 Bonus.intelligence += (3 * _outfitBalance[0]); } else if (_outfitsID[0] == 3008) { //Orbitron //Spd +8 Bonus.speed += (8 * _outfitBalance[0]); } else if (_outfitsID[0] == 3009) { //Glide //Atk +8 Bonus.attack += (8 * _outfitBalance[0]); } else if (_outfitsID[0] == 3010) { //Bolt Mark II //Def + 8 Bonus.defense += (8 * _outfitBalance[0]); } else if (_outfitsID[0] == 3011) { //Lovey //Hp + 80 Bonus.hp += (80 * _outfitBalance[0]); } else if (_outfitsID[0] == 3012) { //Zetabot //hp + 60 Bonus.hp += (60 * _outfitBalance[0]); } else if (_outfitsID[0] == 3013) { //Roxie //def + 6 Bonus.defense += (6 * _outfitBalance[0]); } else if (_outfitsID[0] == 3014) { //Puzzle //INT + 5 Bonus.intelligence += (5 * _outfitBalance[0]); } else if (_outfitsID[0] == 3015) { //Aura //all (20, 2, 2, 2, 1) Bonus.hp += (20 * _outfitBalance[0]); Bonus.attack += (2 * _outfitBalance[0]); Bonus.defense += (2 * _outfitBalance[0]); Bonus.speed += (2 * _outfitBalance[0]); Bonus.intelligence += (1 * _outfitBalance[0]); } else if (_outfitsID[0] == 3016) { //Goldon //DEF + 10 Bonus.defense += (10 * _outfitBalance[0]); } else if (_outfitsID[0] == 3017) { //Meteoron //HP + 100 Bonus.hp += (100 * _outfitBalance[0]); } //========== Headgear ====================== if (_outfitsID[1] == 6001) { //headgear 1 //hp+50 Bonus.hp += (50 * _outfitBalance[1]); } else if (_outfitsID[1] == 6002) { //headgear 2 //atk+3 Bonus.attack += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6003) { //headgear 3 //def+3 Bonus.defense += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6004) { //headgear 4 //spd+3 Bonus.speed += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6005) { //headgear 5 //int+1 Bonus.intelligence += (1 * _outfitBalance[1]); } else if (_outfitsID[1] == 6006) { //headgear 6 //hp+60 Bonus.hp += (60 * _outfitBalance[1]); } else if (_outfitsID[1] == 6007) { //headgear 7 //atk+6 Bonus.attack += (6 * _outfitBalance[1]); } else if (_outfitsID[1] == 6008) { //headgear 8 //def+6 Bonus.defense += (6 * _outfitBalance[1]); } else if (_outfitsID[1] == 6009) { //headgear 9 //spd+6 Bonus.speed += (6 * _outfitBalance[1]); } else if (_outfitsID[1] == 6010) { //headgear 10 //int+3 Bonus.intelligence += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6011) { //headgear 11 //hp+80 Bonus.hp += (80 * _outfitBalance[1]); } else if (_outfitsID[1] == 6012) { //headgear 12 //atk+8 Bonus.attack += (8 * _outfitBalance[1]); } else if (_outfitsID[1] == 6013) { //headgear 13 //def+8 Bonus.defense += (8 * _outfitBalance[1]); } else if (_outfitsID[1] == 6014) { //headgear 14 //spd+8 Bonus.speed += (8 * _outfitBalance[1]); } else if (_outfitsID[1] == 6015) { //headgear 15 //int+4 Bonus.intelligence += (4 * _outfitBalance[1]); } else if (_outfitsID[1] == 6016) { //headgear 16 //hp+100 Bonus.hp += (100 * _outfitBalance[1]); } else if (_outfitsID[1] == 6017) { //headgear 17 //atk+10 Bonus.attack += (10 * _outfitBalance[1]); } else if (_outfitsID[1] == 6018) { //headgear 18 //def+10 Bonus.defense += (10 * _outfitBalance[1]); } else if (_outfitsID[1] == 6019) { //headgear 19 //spd+10 Bonus.speed += (10 * _outfitBalance[1]); } else if (_outfitsID[1] == 6020) { //headgear 20 //int+5 Bonus.intelligence += (5 * _outfitBalance[1]); } //========== Body ====================== if (_outfitsID[2] == 1001) { //Scholar (Body) //hp 50 Bonus.hp += (50 * _outfitBalance[2]); } else if (_outfitsID[2] == 1002) { //Scholar (Body) //atk 3 Bonus.attack += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1003) { //Scholar (Body) //def 3 Bonus.defense += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1004) { //Scholar (Body) //spd 3 Bonus.speed += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1005) { //Scholar (Body) //int 1 Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1006 || _outfitsID[2] == 1007) { //Scholar (Body) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[2]); Bonus.attack += (1 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1022) { //Love Embrace (Body) //hp 60 Bonus.hp += (60 * _outfitBalance[2]); } else if (_outfitsID[2] == 1023) { //Love Embrace (Body) //atk 6 Bonus.attack += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1024) { //Love Embrace (Body) //def 6 Bonus.defense += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1025) { //Love Embrace (Body) //spd 6 Bonus.speed += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1026) { //Love Embrace (Body) //int 3 Bonus.intelligence += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1027 || _outfitsID[2] == 1028) { //Love Embrace (Body) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1043) { //Celestial Harmony (Body) //hp 80 Bonus.hp += (80 * _outfitBalance[2]); } else if (_outfitsID[2] == 1044) { //Celestial Harmony (Body) //atk 8 Bonus.attack += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1045) { //Celestial Harmony (Body) //def 8 Bonus.defense += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1046) { //Celestial Harmony (Body) //spd 8 Bonus.speed += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1047) { //Celestial Harmony (Body) //int 4 Bonus.intelligence += (4 * _outfitBalance[2]); } else if (_outfitsID[2] == 1048 || _outfitsID[2] == 1049) { //Celestial Harmony (Body) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (2 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1064) { //Cyber Strike (Body) //hp 80 Bonus.hp += (80 * _outfitBalance[2]); } else if (_outfitsID[2] == 1065) { //Cyber Strike (Body) //atk 8 Bonus.attack += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1066) { //Cyber Strike (Body) //def 8 Bonus.defense += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1067) { //Cyber Strike (Body) //spd 8 Bonus.speed += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1068) { //Cyber Strike (Body) //int 4 Bonus.intelligence += (4 * _outfitBalance[2]); } else if (_outfitsID[2] == 1069 || _outfitsID[2] == 1070) { //Cyber Strike (Body) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (2 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1085) { //Serpent Tribe (Body) //hp 50 Bonus.hp += (50 * _outfitBalance[2]); } else if (_outfitsID[2] == 1086) { //Serpent Tribe (Body) //atk 3 Bonus.attack += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1087) { //Serpent Tribe (Body) //def 3 Bonus.defense += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1088) { //Serpent Tribe (Body) //spd 3 Bonus.speed += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1089) { //Serpent Tribe (Body) //int 1 Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1090 || _outfitsID[2] == 1091) { //Serpent Tribe (Body) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[2]); Bonus.attack += (1 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1106) { //Pearl Empress (Body) //hp 60 Bonus.hp += (60 * _outfitBalance[2]); } else if (_outfitsID[2] == 1107) { //Pearl Empress (Body) //atk 6 Bonus.attack += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1108) { //Pearl Empress (Body) //def 6 Bonus.defense += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1109) { //Pearl Empress (Body) //spd 6 Bonus.speed += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1110) { //Pearl Empress (Body) //int 3 Bonus.intelligence += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1111 || _outfitsID[2] == 1112) { //Pearl Empress (Body) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1127) { //Starlight Diva (Body) //hp 100 Bonus.hp += (100 * _outfitBalance[2]); } else if (_outfitsID[2] == 1128) { //Starlight Diva (Body) //atk 10 Bonus.attack += (10 * _outfitBalance[2]); } else if (_outfitsID[2] == 1129) { //Starlight Diva (Body) //def 10 Bonus.defense += (10 * _outfitBalance[2]); } else if (_outfitsID[2] == 1130) { //Starlight Diva (Body) //spd 10 Bonus.speed += (10 * _outfitBalance[2]); } else if (_outfitsID[2] == 1131) { //Starlight Diva (Body) //int 5 Bonus.intelligence += (5 * _outfitBalance[2]); } else if (_outfitsID[2] == 1132 || _outfitsID[2] == 1133) { //Starlight Diva (Body) //all (20,2,2,2,1) Bonus.hp += (20 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (2 * _outfitBalance[2]); Bonus.speed += (2 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } //========== Leggings====================== if (_outfitsID[3] == 1008) { //Scholar (Leggings) //hp 50 Bonus.hp += (50 * _outfitBalance[3]); } else if (_outfitsID[3] == 1009) { //Scholar (Leggings) //atk 3 Bonus.attack += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1010) { //Scholar (Leggings) //def 3 Bonus.defense += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1011) { //Scholar (Leggings) //spd 3 Bonus.speed += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1012) { //Scholar (Leggings) //int 1 Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1013 || _outfitsID[3] == 1014) { //Scholar (Leggings) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[3]); Bonus.attack += (1 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1029) { //Love Embrace (Leggings) //hp 60 Bonus.hp += (60 * _outfitBalance[3]); } else if (_outfitsID[3] == 1030) { //Love Embrace (Leggings) //atk 6 Bonus.attack += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1031) { //Love Embrace (Leggings) //def 6 Bonus.defense += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1032) { //Love Embrace (Leggings) //spd 6 Bonus.speed += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1033) { //Love Embrace (Leggings) //int 3 Bonus.intelligence += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1034 || _outfitsID[3] == 1035) { //Love Embrace (Leggings) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1050) { //Celestial Harmony (Leggings) //hp 80 Bonus.hp += (80 * _outfitBalance[3]); } else if (_outfitsID[3] == 1051) { //Celestial Harmony (Leggings) //atk 8 Bonus.attack += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1052) { //Celestial Harmony (Leggings) //def 8 Bonus.defense += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1053) { //Celestial Harmony (Leggings) //spd 8 Bonus.speed += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1054) { //Celestial Harmony (Leggings) //int 4 Bonus.intelligence += (4 * _outfitBalance[3]); } else if (_outfitsID[3] == 1055 || _outfitsID[3] == 1056) { //Celestial Harmony (Leggings) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (2 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1071) { //Cyber Strike (Leggings) //hp 80 Bonus.hp += (80 * _outfitBalance[3]); } else if (_outfitsID[3] == 1072) { //Cyber Strike (Leggings) //atk 8 Bonus.attack += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1073) { //Cyber Strike (Leggings) //def 8 Bonus.defense += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1074) { //Cyber Strike (Leggings) //spd 8 Bonus.speed += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1075) { //Cyber Strike (Leggings) //int 4 Bonus.intelligence += (4 * _outfitBalance[3]); } else if (_outfitsID[3] == 1076 || _outfitsID[3] == 1077) { //Cyber Strike (Leggings) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (2 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1092) { //Serpent Tribe (Leggings) //hp 50 Bonus.hp += (50 * _outfitBalance[3]); } else if (_outfitsID[3] == 1093) { //Serpent Tribe (Leggings) //atk 3 Bonus.attack += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1094) { //Serpent Tribe (Leggings) //def 3 Bonus.defense += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1095) { //Serpent Tribe (Leggings) //spd 3 Bonus.speed += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1096) { //Serpent Tribe (Leggings) //int 1 Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1097 || _outfitsID[3] == 1098) { //Serpent Tribe (Leggings) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[3]); Bonus.attack += (1 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1113) { //Pearl Empress (Leggings) //hp 60 Bonus.hp += (60 * _outfitBalance[3]); } else if (_outfitsID[3] == 1114) { //Pearl Empress (Leggings) //atk 6 Bonus.attack += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1115) { //Pearl Empress (Leggings) //def 6 Bonus.defense += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1116) { //Pearl Empress (Leggings) //spd 6 Bonus.speed += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1117) { //Pearl Empress (Leggings) //int 3 Bonus.intelligence += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1118 || _outfitsID[3] == 1119) { //Pearl Empress (Leggings) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1134) { //Starlight Diva (Leggings) //hp 100 Bonus.hp += (100 * _outfitBalance[3]); } else if (_outfitsID[3] == 1135) { //Starlight Diva (Leggings) //atk 10 Bonus.attack += (10 * _outfitBalance[3]); } else if (_outfitsID[3] == 1136) { //Starlight Diva (Leggings) //def 10 Bonus.defense += (10 * _outfitBalance[3]); } else if (_outfitsID[3] == 1137) { //Starlight Diva (Leggings) //spd 10 Bonus.speed += (10 * _outfitBalance[3]); } else if (_outfitsID[3] == 1138) { //Starlight Diva (Leggings) //int 5 Bonus.intelligence += (5 * _outfitBalance[3]); } else if (_outfitsID[3] == 1139 || _outfitsID[3] == 1140) { //Starlight Diva (Leggings) //all (20,2,2,2,1) Bonus.hp += (20 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (2 * _outfitBalance[3]); Bonus.speed += (2 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } //========== Boots====================== if (_outfitsID[4] == 1015) { //Scholar (Boots) //hp 50 Bonus.hp += (50 * _outfitBalance[4]); } else if (_outfitsID[4] == 1016) { //Scholar (Boots) //atk 3 Bonus.attack += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1017) { //Scholar (Boots) //def 3 Bonus.defense += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1018) { //Scholar (Boots) //spd 3 Bonus.speed += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1019) { //Scholar (Boots) //int 1 Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1020 || _outfitsID[4] == 1021) { //Scholar (Boots) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[4]); Bonus.attack += (1 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1036) { //Love Embrace (Boots) //hp 60 Bonus.hp += (60 * _outfitBalance[4]); } else if (_outfitsID[4] == 1037) { //Love Embrace (Boots) //atk 6 Bonus.attack += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1038) { //Love Embrace (Boots) //def 6 Bonus.defense += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1039) { //Love Embrace (Boots) //spd 6 Bonus.speed += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1040) { //Love Embrace (Boots) //int 3 Bonus.intelligence += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1041 || _outfitsID[4] == 1042) { //Love Embrace (Boots) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1057) { //Celestial Harmony (Boots) //hp 80 Bonus.hp += (80 * _outfitBalance[4]); } else if (_outfitsID[4] == 1058) { //Celestial Harmony (Boots) //atk 8 Bonus.attack += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1059) { //Celestial Harmony (Boots) //def 8 Bonus.defense += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1060) { //Celestial Harmony (Boots) //spd 8 Bonus.speed += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1061) { //Celestial Harmony (Boots) //int 4 Bonus.intelligence += (4 * _outfitBalance[4]); } else if (_outfitsID[4] == 1062 || _outfitsID[4] == 1063) { //Celestial Harmony (Boots) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (2 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1078) { //Cyber Strike (Boots) //hp 80 Bonus.hp += (80 * _outfitBalance[4]); } else if (_outfitsID[4] == 1079) { //Cyber Strike (Boots) //atk 8 Bonus.attack += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1080) { //Cyber Strike (Boots) //def 8 Bonus.defense += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1081) { //Cyber Strike (Boots) //spd 8 Bonus.speed += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1082) { //Cyber Strike (Boots) //int 4 Bonus.intelligence += (4 * _outfitBalance[4]); } else if (_outfitsID[4] == 1083 || _outfitsID[4] == 1084) { //Cyber Strike (Boots) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (2 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1099) { //Serpent Tribe (Boots) //hp 50 Bonus.hp += (50 * _outfitBalance[4]); } else if (_outfitsID[4] == 1100) { //Serpent Tribe (Boots) //atk 3 Bonus.attack += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1101) { //Serpent Tribe (Boots) //def 3 Bonus.defense += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1102) { //Serpent Tribe (Boots) //spd 3 Bonus.speed += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1103) { //Serpent Tribe (Boots) //int 1 Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1104 || _outfitsID[4] == 1105) { //Serpent Tribe (Boots) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[4]); Bonus.attack += (1 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1120) { //Pearl Empress (Boots) //hp 60 Bonus.hp += (60 * _outfitBalance[4]); } else if (_outfitsID[4] == 1121) { //Pearl Empress (Boots) //atk 6 Bonus.attack += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1122) { //Pearl Empress (Boots) //def 6 Bonus.defense += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1123) { //Pearl Empress (Boots) //spd 6 Bonus.speed += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1124) { //Pearl Empress (Boots) //int 3 Bonus.intelligence += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1125 || _outfitsID[4] == 1126) { //Pearl Empress (Boots) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1141) { //Starlight Diva (Boots) //hp 100 Bonus.hp += (100 * _outfitBalance[4]); } else if (_outfitsID[4] == 1142) { //Starlight Diva (Boots) //atk 10 Bonus.attack += (10 * _outfitBalance[4]); } else if (_outfitsID[4] == 1143) { //Starlight Diva (Boots) //def 10 Bonus.defense += (10 * _outfitBalance[4]); } else if (_outfitsID[4] == 1144) { //Starlight Diva (Boots) //spd 10 Bonus.speed += (10 * _outfitBalance[4]); } else if (_outfitsID[4] == 1145) { //Starlight Diva (Boots) //int 5 Bonus.intelligence += (5 * _outfitBalance[4]); } else if (_outfitsID[4] == 1146 || _outfitsID[4] == 1147) { //Starlight Diva (Boots) //all (20,2,2,2,1) Bonus.hp += (20 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (2 * _outfitBalance[4]); Bonus.speed += (2 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } for (uint i=0; i<3; i++) { if (UnitGroup[i].hp >0 ) { //not empty slot UnitGroup[i].hp = _UnitGroup[i].hp += Bonus.hp; UnitGroup[i].attack = _UnitGroup[i].attack += Bonus.attack; UnitGroup[i].defense = _UnitGroup[i].defense += Bonus.defense; UnitGroup[i].speed = _UnitGroup[i].speed += Bonus.speed; UnitGroup[i].intelligence = _UnitGroup[i].intelligence += Bonus.intelligence; } } } function readOutfitBonus (uint[5] memory _outfitsID, uint[5] memory _outfitBalance) internal pure returns (S.Unit memory Bonus) { //_outfit[0~4] is outfit ID for the trainer ID. (what to wear) ID 0 means wearing nothing //[0] = Aerobot [1] = headgear [2] = Body [3] = Leggings [4 = Boots //convert Outfit balance into Multiplier for (uint i=0; i<5; i++) { if (_outfitBalance[i] >= 4096) { _outfitBalance[i] = 5; } else if (_outfitBalance[i] >= 512) { _outfitBalance[i] = 4; } else if (_outfitBalance[i] >= 64) { _outfitBalance[i] = 3; } else if (_outfitBalance[i] >= 8) { _outfitBalance[i] = 2; } else if (_outfitBalance[i] >= 1) { _outfitBalance[i] = 1; } //otherwise = 0, multiplier =0 } //Get Bonus from each outfit //========== AEROBOT ====================== if (_outfitsID[0] == 3001) { //Bolt (Aerobot) //spd + 6 Bonus.speed += (6 * _outfitBalance[0]); } else if (_outfitsID[0] == 3002) { //Pixi (Aerobot) //atk + 6 Bonus.attack += (6 * _outfitBalance[0]); } else if (_outfitsID[0] == 3003) { //Finspark (Aerobot) //SPD + 10 Bonus.speed += (10 * _outfitBalance[0]); } else if (_outfitsID[0] == 3004) { //Cyanite //ATK + 10 Bonus.attack += (10 * _outfitBalance[0]); } else if (_outfitsID[0] == 3005) { //Daemon //all (20, 2, 2, 2, 1) Bonus.hp += (20 * _outfitBalance[0]); Bonus.attack += (2 * _outfitBalance[0]); Bonus.defense += (2 * _outfitBalance[0]); Bonus.speed += (2 * _outfitBalance[0]); Bonus.intelligence += (1 * _outfitBalance[0]); } else if (_outfitsID[0] == 3006) { //Skye //Int +4 Bonus.intelligence += (4 * _outfitBalance[0]); } else if (_outfitsID[0] == 3007) { //Cocoon //int +3 Bonus.intelligence += (3 * _outfitBalance[0]); } else if (_outfitsID[0] == 3008) { //Orbitron //Spd +8 Bonus.speed += (8 * _outfitBalance[0]); } else if (_outfitsID[0] == 3009) { //Glide //Atk +8 Bonus.attack += (8 * _outfitBalance[0]); } else if (_outfitsID[0] == 3010) { //Bolt Mark II //Def + 8 Bonus.defense += (8 * _outfitBalance[0]); } else if (_outfitsID[0] == 3011) { //Lovey //Hp + 80 Bonus.hp += (80 * _outfitBalance[0]); } else if (_outfitsID[0] == 3012) { //Zetabot //hp + 60 Bonus.hp += (60 * _outfitBalance[0]); } else if (_outfitsID[0] == 3013) { //Roxie //def + 6 Bonus.defense += (6 * _outfitBalance[0]); } else if (_outfitsID[0] == 3014) { //Puzzle //INT + 5 Bonus.intelligence += (5 * _outfitBalance[0]); } else if (_outfitsID[0] == 3015) { //Aura //all (20, 2, 2, 2, 1) Bonus.hp += (20 * _outfitBalance[0]); Bonus.attack += (2 * _outfitBalance[0]); Bonus.defense += (2 * _outfitBalance[0]); Bonus.speed += (2 * _outfitBalance[0]); Bonus.intelligence += (1 * _outfitBalance[0]); } else if (_outfitsID[0] == 3016) { //Goldon //DEF + 10 Bonus.defense += (10 * _outfitBalance[0]); } else if (_outfitsID[0] == 3017) { //Meteoron //HP + 100 Bonus.hp += (100 * _outfitBalance[0]); } //========== Headgear ====================== if (_outfitsID[1] == 6001) { //headgear 1 //hp+50 Bonus.hp += (50 * _outfitBalance[1]); } else if (_outfitsID[1] == 6002) { //headgear 2 //atk+3 Bonus.attack += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6003) { //headgear 3 //def+3 Bonus.defense += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6004) { //headgear 4 //spd+3 Bonus.speed += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6005) { //headgear 5 //int+1 Bonus.intelligence += (1 * _outfitBalance[1]); } else if (_outfitsID[1] == 6006) { //headgear 6 //hp+60 Bonus.hp += (60 * _outfitBalance[1]); } else if (_outfitsID[1] == 6007) { //headgear 7 //atk+6 Bonus.attack += (6 * _outfitBalance[1]); } else if (_outfitsID[1] == 6008) { //headgear 8 //def+6 Bonus.defense += (6 * _outfitBalance[1]); } else if (_outfitsID[1] == 6009) { //headgear 9 //spd+6 Bonus.speed += (6 * _outfitBalance[1]); } else if (_outfitsID[1] == 6010) { //headgear 10 //int+3 Bonus.intelligence += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6011) { //headgear 11 //hp+80 Bonus.hp += (80 * _outfitBalance[1]); } else if (_outfitsID[1] == 6012) { //headgear 12 //atk+8 Bonus.attack += (8 * _outfitBalance[1]); } else if (_outfitsID[1] == 6013) { //headgear 13 //def+8 Bonus.defense += (8 * _outfitBalance[1]); } else if (_outfitsID[1] == 6014) { //headgear 14 //spd+8 Bonus.speed += (8 * _outfitBalance[1]); } else if (_outfitsID[1] == 6015) { //headgear 15 //int+4 Bonus.intelligence += (4 * _outfitBalance[1]); } else if (_outfitsID[1] == 6016) { //headgear 16 //hp+100 Bonus.hp += (100 * _outfitBalance[1]); } else if (_outfitsID[1] == 6017) { //headgear 17 //atk+10 Bonus.attack += (10 * _outfitBalance[1]); } else if (_outfitsID[1] == 6018) { //headgear 18 //def+10 Bonus.defense += (10 * _outfitBalance[1]); } else if (_outfitsID[1] == 6019) { //headgear 19 //spd+10 Bonus.speed += (10 * _outfitBalance[1]); } else if (_outfitsID[1] == 6020) { //headgear 20 //int+5 Bonus.intelligence += (5 * _outfitBalance[1]); } //========== Body ====================== if (_outfitsID[2] == 1001) { //Scholar (Body) //hp 50 Bonus.hp += (50 * _outfitBalance[2]); } else if (_outfitsID[2] == 1002) { //Scholar (Body) //atk 3 Bonus.attack += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1003) { //Scholar (Body) //def 3 Bonus.defense += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1004) { //Scholar (Body) //spd 3 Bonus.speed += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1005) { //Scholar (Body) //int 1 Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1006 || _outfitsID[2] == 1007) { //Scholar (Body) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[2]); Bonus.attack += (1 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1022) { //Love Embrace (Body) //hp 60 Bonus.hp += (60 * _outfitBalance[2]); } else if (_outfitsID[2] == 1023) { //Love Embrace (Body) //atk 6 Bonus.attack += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1024) { //Love Embrace (Body) //def 6 Bonus.defense += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1025) { //Love Embrace (Body) //spd 6 Bonus.speed += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1026) { //Love Embrace (Body) //int 3 Bonus.intelligence += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1027 || _outfitsID[2] == 1028) { //Love Embrace (Body) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1043) { //Celestial Harmony (Body) //hp 80 Bonus.hp += (80 * _outfitBalance[2]); } else if (_outfitsID[2] == 1044) { //Celestial Harmony (Body) //atk 8 Bonus.attack += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1045) { //Celestial Harmony (Body) //def 8 Bonus.defense += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1046) { //Celestial Harmony (Body) //spd 8 Bonus.speed += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1047) { //Celestial Harmony (Body) //int 4 Bonus.intelligence += (4 * _outfitBalance[2]); } else if (_outfitsID[2] == 1048 || _outfitsID[2] == 1049) { //Celestial Harmony (Body) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (2 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1064) { //Cyber Strike (Body) //hp 80 Bonus.hp += (80 * _outfitBalance[2]); } else if (_outfitsID[2] == 1065) { //Cyber Strike (Body) //atk 8 Bonus.attack += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1066) { //Cyber Strike (Body) //def 8 Bonus.defense += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1067) { //Cyber Strike (Body) //spd 8 Bonus.speed += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1068) { //Cyber Strike (Body) //int 4 Bonus.intelligence += (4 * _outfitBalance[2]); } else if (_outfitsID[2] == 1069 || _outfitsID[2] == 1070) { //Cyber Strike (Body) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (2 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1085) { //Serpent Tribe (Body) //hp 50 Bonus.hp += (50 * _outfitBalance[2]); } else if (_outfitsID[2] == 1086) { //Serpent Tribe (Body) //atk 3 Bonus.attack += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1087) { //Serpent Tribe (Body) //def 3 Bonus.defense += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1088) { //Serpent Tribe (Body) //spd 3 Bonus.speed += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1089) { //Serpent Tribe (Body) //int 1 Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1090 || _outfitsID[2] == 1091) { //Serpent Tribe (Body) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[2]); Bonus.attack += (1 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1106) { //Pearl Empress (Body) //hp 60 Bonus.hp += (60 * _outfitBalance[2]); } else if (_outfitsID[2] == 1107) { //Pearl Empress (Body) //atk 6 Bonus.attack += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1108) { //Pearl Empress (Body) //def 6 Bonus.defense += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1109) { //Pearl Empress (Body) //spd 6 Bonus.speed += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1110) { //Pearl Empress (Body) //int 3 Bonus.intelligence += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1111 || _outfitsID[2] == 1112) { //Pearl Empress (Body) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1127) { //Starlight Diva (Body) //hp 100 Bonus.hp += (100 * _outfitBalance[2]); } else if (_outfitsID[2] == 1128) { //Starlight Diva (Body) //atk 10 Bonus.attack += (10 * _outfitBalance[2]); } else if (_outfitsID[2] == 1129) { //Starlight Diva (Body) //def 10 Bonus.defense += (10 * _outfitBalance[2]); } else if (_outfitsID[2] == 1130) { //Starlight Diva (Body) //spd 10 Bonus.speed += (10 * _outfitBalance[2]); } else if (_outfitsID[2] == 1131) { //Starlight Diva (Body) //int 5 Bonus.intelligence += (5 * _outfitBalance[2]); } else if (_outfitsID[2] == 1132 || _outfitsID[2] == 1133) { //Starlight Diva (Body) //all (20,2,2,2,1) Bonus.hp += (20 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (2 * _outfitBalance[2]); Bonus.speed += (2 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } //========== Leggings====================== if (_outfitsID[3] == 1008) { //Scholar (Leggings) //hp 50 Bonus.hp += (50 * _outfitBalance[3]); } else if (_outfitsID[3] == 1009) { //Scholar (Leggings) //atk 3 Bonus.attack += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1010) { //Scholar (Leggings) //def 3 Bonus.defense += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1011) { //Scholar (Leggings) //spd 3 Bonus.speed += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1012) { //Scholar (Leggings) //int 1 Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1013 || _outfitsID[3] == 1014) { //Scholar (Leggings) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[3]); Bonus.attack += (1 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1029) { //Love Embrace (Leggings) //hp 60 Bonus.hp += (60 * _outfitBalance[3]); } else if (_outfitsID[3] == 1030) { //Love Embrace (Leggings) //atk 6 Bonus.attack += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1031) { //Love Embrace (Leggings) //def 6 Bonus.defense += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1032) { //Love Embrace (Leggings) //spd 6 Bonus.speed += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1033) { //Love Embrace (Leggings) //int 3 Bonus.intelligence += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1034 || _outfitsID[3] == 1035) { //Love Embrace (Leggings) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1050) { //Celestial Harmony (Leggings) //hp 80 Bonus.hp += (80 * _outfitBalance[3]); } else if (_outfitsID[3] == 1051) { //Celestial Harmony (Leggings) //atk 8 Bonus.attack += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1052) { //Celestial Harmony (Leggings) //def 8 Bonus.defense += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1053) { //Celestial Harmony (Leggings) //spd 8 Bonus.speed += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1054) { //Celestial Harmony (Leggings) //int 4 Bonus.intelligence += (4 * _outfitBalance[3]); } else if (_outfitsID[3] == 1055 || _outfitsID[3] == 1056) { //Celestial Harmony (Leggings) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (2 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1071) { //Cyber Strike (Leggings) //hp 80 Bonus.hp += (80 * _outfitBalance[3]); } else if (_outfitsID[3] == 1072) { //Cyber Strike (Leggings) //atk 8 Bonus.attack += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1073) { //Cyber Strike (Leggings) //def 8 Bonus.defense += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1074) { //Cyber Strike (Leggings) //spd 8 Bonus.speed += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1075) { //Cyber Strike (Leggings) //int 4 Bonus.intelligence += (4 * _outfitBalance[3]); } else if (_outfitsID[3] == 1076 || _outfitsID[3] == 1077) { //Cyber Strike (Leggings) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (2 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1092) { //Serpent Tribe (Leggings) //hp 50 Bonus.hp += (50 * _outfitBalance[3]); } else if (_outfitsID[3] == 1093) { //Serpent Tribe (Leggings) //atk 3 Bonus.attack += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1094) { //Serpent Tribe (Leggings) //def 3 Bonus.defense += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1095) { //Serpent Tribe (Leggings) //spd 3 Bonus.speed += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1096) { //Serpent Tribe (Leggings) //int 1 Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1097 || _outfitsID[3] == 1098) { //Serpent Tribe (Leggings) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[3]); Bonus.attack += (1 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1113) { //Pearl Empress (Leggings) //hp 60 Bonus.hp += (60 * _outfitBalance[3]); } else if (_outfitsID[3] == 1114) { //Pearl Empress (Leggings) //atk 6 Bonus.attack += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1115) { //Pearl Empress (Leggings) //def 6 Bonus.defense += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1116) { //Pearl Empress (Leggings) //spd 6 Bonus.speed += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1117) { //Pearl Empress (Leggings) //int 3 Bonus.intelligence += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1118 || _outfitsID[3] == 1119) { //Pearl Empress (Leggings) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1134) { //Starlight Diva (Leggings) //hp 100 Bonus.hp += (100 * _outfitBalance[3]); } else if (_outfitsID[3] == 1135) { //Starlight Diva (Leggings) //atk 10 Bonus.attack += (10 * _outfitBalance[3]); } else if (_outfitsID[3] == 1136) { //Starlight Diva (Leggings) //def 10 Bonus.defense += (10 * _outfitBalance[3]); } else if (_outfitsID[3] == 1137) { //Starlight Diva (Leggings) //spd 10 Bonus.speed += (10 * _outfitBalance[3]); } else if (_outfitsID[3] == 1138) { //Starlight Diva (Leggings) //int 5 Bonus.intelligence += (5 * _outfitBalance[3]); } else if (_outfitsID[3] == 1139 || _outfitsID[3] == 1140) { //Starlight Diva (Leggings) //all (20,2,2,2,1) Bonus.hp += (20 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (2 * _outfitBalance[3]); Bonus.speed += (2 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } //========== Boots====================== if (_outfitsID[4] == 1015) { //Scholar (Boots) //hp 50 Bonus.hp += (50 * _outfitBalance[4]); } else if (_outfitsID[4] == 1016) { //Scholar (Boots) //atk 3 Bonus.attack += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1017) { //Scholar (Boots) //def 3 Bonus.defense += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1018) { //Scholar (Boots) //spd 3 Bonus.speed += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1019) { //Scholar (Boots) //int 1 Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1020 || _outfitsID[4] == 1021) { //Scholar (Boots) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[4]); Bonus.attack += (1 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1036) { //Love Embrace (Boots) //hp 60 Bonus.hp += (60 * _outfitBalance[4]); } else if (_outfitsID[4] == 1037) { //Love Embrace (Boots) //atk 6 Bonus.attack += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1038) { //Love Embrace (Boots) //def 6 Bonus.defense += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1039) { //Love Embrace (Boots) //spd 6 Bonus.speed += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1040) { //Love Embrace (Boots) //int 3 Bonus.intelligence += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1041 || _outfitsID[4] == 1042) { //Love Embrace (Boots) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1057) { //Celestial Harmony (Boots) //hp 80 Bonus.hp += (80 * _outfitBalance[4]); } else if (_outfitsID[4] == 1058) { //Celestial Harmony (Boots) //atk 8 Bonus.attack += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1059) { //Celestial Harmony (Boots) //def 8 Bonus.defense += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1060) { //Celestial Harmony (Boots) //spd 8 Bonus.speed += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1061) { //Celestial Harmony (Boots) //int 4 Bonus.intelligence += (4 * _outfitBalance[4]); } else if (_outfitsID[4] == 1062 || _outfitsID[4] == 1063) { //Celestial Harmony (Boots) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (2 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1078) { //Cyber Strike (Boots) //hp 80 Bonus.hp += (80 * _outfitBalance[4]); } else if (_outfitsID[4] == 1079) { //Cyber Strike (Boots) //atk 8 Bonus.attack += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1080) { //Cyber Strike (Boots) //def 8 Bonus.defense += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1081) { //Cyber Strike (Boots) //spd 8 Bonus.speed += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1082) { //Cyber Strike (Boots) //int 4 Bonus.intelligence += (4 * _outfitBalance[4]); } else if (_outfitsID[4] == 1083 || _outfitsID[4] == 1084) { //Cyber Strike (Boots) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (2 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1099) { //Serpent Tribe (Boots) //hp 50 Bonus.hp += (50 * _outfitBalance[4]); } else if (_outfitsID[4] == 1100) { //Serpent Tribe (Boots) //atk 3 Bonus.attack += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1101) { //Serpent Tribe (Boots) //def 3 Bonus.defense += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1102) { //Serpent Tribe (Boots) //spd 3 Bonus.speed += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1103) { //Serpent Tribe (Boots) //int 1 Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1104 || _outfitsID[4] == 1105) { //Serpent Tribe (Boots) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[4]); Bonus.attack += (1 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1120) { //Pearl Empress (Boots) //hp 60 Bonus.hp += (60 * _outfitBalance[4]); } else if (_outfitsID[4] == 1121) { //Pearl Empress (Boots) //atk 6 Bonus.attack += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1122) { //Pearl Empress (Boots) //def 6 Bonus.defense += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1123) { //Pearl Empress (Boots) //spd 6 Bonus.speed += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1124) { //Pearl Empress (Boots) //int 3 Bonus.intelligence += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1125 || _outfitsID[4] == 1126) { //Pearl Empress (Boots) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1141) { //Starlight Diva (Boots) //hp 100 Bonus.hp += (100 * _outfitBalance[4]); } else if (_outfitsID[4] == 1142) { //Starlight Diva (Boots) //atk 10 Bonus.attack += (10 * _outfitBalance[4]); } else if (_outfitsID[4] == 1143) { //Starlight Diva (Boots) //def 10 Bonus.defense += (10 * _outfitBalance[4]); } else if (_outfitsID[4] == 1144) { //Starlight Diva (Boots) //spd 10 Bonus.speed += (10 * _outfitBalance[4]); } else if (_outfitsID[4] == 1145) { //Starlight Diva (Boots) //int 5 Bonus.intelligence += (5 * _outfitBalance[4]); } else if (_outfitsID[4] == 1146 || _outfitsID[4] == 1147) { //Starlight Diva (Boots) //all (20,2,2,2,1) Bonus.hp += (20 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (2 * _outfitBalance[4]); Bonus.speed += (2 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: FINALdeployFA/INTERFACE - StorageV2.sol pragma solidity ^0.8.20; // Import your custom structs /** * @title IFARPG_Storage * @dev Interface for FARPG_Storage so other contracts can call it */ interface IFARPG_Storage { //------------------------------------------------------------------------- // Administrative / Master Contract Access //------------------------------------------------------------------------- function owner() external view returns (address); function masterContracts(uint index) external view returns (address); function masterIndex(address) external view returns (uint); function addMasterContract(address _address, uint _index) external; function addMasterContractBatch(address[] memory _addresses, uint[] memory _indices) external; function removeMasterContract(uint _index) external; function getAllMasterContracts() external view returns (address[] memory, uint[] memory); //------------------------------------------------------------------------- // UID Management //------------------------------------------------------------------------- function UIDmain(address) external view returns (uint); function UID_ownedby(uint) external view returns (address); function UIDcounter() external view returns (uint); function getUID(address player) external view returns (uint _UID); function transferUID(address player, address newplayerwallet) external; function registerUID(address player) external; function setUIDmain (address playerAddress, uint UID) external; function setUID_ownedby (uint UID, address playerAddress) external; //------------------------------------------------------------------------- // Quest (setters) //------------------------------------------------------------------------- function setMainQuest(address player, uint index, uint8 progress) external; function setSideQuest(address player, uint index, uint8 progress) external; function setPremiumScore(address player, uint score) external; function setPlayerGeneStrength(address player, uint index, uint strength) external; function setPlayerVitamin(address player, uint index, uint amount) external; //------------------------------------------------------------------------- // Quest (getters) //------------------------------------------------------------------------- function getMainQuestProgress(address player, uint index) external view returns (uint8); function getSideQuestProgress(address player, uint index) external view returns (uint8); function getPremiumScore(address player) external view returns (uint); function getPlayerQuestAndScore(address player, uint index) external view returns (uint, uint, uint); function getMainQuestProgressArray(address player) external view returns (uint8[64] memory); function getSideQuestProgressArray(address player) external view returns (uint8[64] memory); //------------------------------------------------------------------------- // Player Stats (setters) //------------------------------------------------------------------------- function setPersonalWallet(address player, address personal) external; function setGiveControlTo(address player, address web2wallet) external; function setExp(address player, uint experience) external; function setRankScore(address player, uint score) external; function setEnergy1(address player, uint energy) external; function setEnergy2(address player, uint energy) external; function setEnergy22(address player, uint energy) external; function setEnergy3(address player, uint energy) external; function setTeamFormat(address player, uint[60] calldata format) external; function setUsernameToUID(string memory username, uint _UID) external; function setUIDToUsername(uint _UID, string memory username) external; function deleteUsernameToAddress (string memory username) external; // Points function setPoint1(address player, uint point) external; function setPoint2(address player, uint point) external; function setPoint3(address player, uint point) external; function setPoint4(address player, uint point) external; function setPoint5(address player, uint point) external; function addPoint1(address player, uint point) external; function addPoint2(address player, uint point) external; function addPoint3(address player, uint point) external; function addPoint4(address player, uint point) external; function addPoint5(address player, uint point) external; //------------------------------------------------------------------------- // Player Stats (getters) //------------------------------------------------------------------------- function personalwallet(address) external view returns (address); function givecontrolto(address) external view returns (address); function getExperience(address player) external view returns (uint); function getRankingScore(address player) external view returns (uint); function getEnergy1(address player) external view returns (uint); function getEnergy2(address player) external view returns (uint); function getEnergy22(address player) external view returns (uint); function getEnergy3(address player) external view returns (uint); function getPlayerStats(address player) external view returns (uint, uint, uint, uint, uint, uint); function UIDToUsername(uint) external view returns (string memory); function usernameToUID(string memory) external view returns (uint); function getPoint1(address player) external view returns (uint); function getPoint2(address player) external view returns (uint); function getPoint3(address player) external view returns (uint); function getPoint4(address player) external view returns (uint); function getPoint5(address player) external view returns (uint); function getPlayerPoints(address player) external view returns (uint, uint, uint, uint, uint); function getPlayergenestrengthArray(address player) external view returns (uint[50] memory); function getPlayerGeneStrength(address player, uint index) external view returns (uint); function getPlayervitaminArray(address player) external view returns (uint[50] memory); function getPlayerVitamin(address player, uint index) external view returns (uint); //------------------------------------------------------------------------- // Limits (setters) //------------------------------------------------------------------------- function setLimit1(address player, uint limit) external; function setLimit2(address player, uint limit) external; function setLimit3(address player, uint limit) external; function setTimebound1(address player, uint timestamp) external; function setTimebound2(address player, uint timestamp) external; function setTimebound3(address player, uint timestamp) external; //------------------------------------------------------------------------- // Limits (getters) //------------------------------------------------------------------------- function getLimit1(address player) external view returns (uint); function getLimit2(address player) external view returns (uint); function getLimit3(address player) external view returns (uint); function getTimebound1(address player) external view returns (uint); function getTimebound2(address player) external view returns (uint); function getTimebound3(address player) external view returns (uint); function getPlayerLimits(address player) external view returns (uint, uint, uint, uint, uint, uint); //------------------------------------------------------------------------- // Numberset (setters) //------------------------------------------------------------------------- function setNumberSet1(address player, uint[6] memory number) external; function setNumberSet2(address player, uint[5] memory number) external; function setNumberSet3(address player, uint[5] memory number) external; function setNumberSet4(address player, uint[5] memory number) external; function setNumberSet5(address player, uint[5] memory number) external; function setNumberSet6(address player, uint[5] memory number) external; function setNumberSet7(address player, uint[5] memory number) external; function setNumberSet8(address player, uint[5] memory number) external; function setNumberSet9(address player, uint[5] memory number) external; function setNumberSetA(address player, uint[5] memory number) external; function setNumberSetB(address player, uint[5] memory number) external; function setNumberSetC(address player, uint[5] memory number) external; function setNumberSetD(address player, uint[5] memory number) external; function setNumberSetE(address player, uint[10] memory number) external; function setNumberSetF(address player, uint[10] memory number) external; function setNumberSetG(address player, uint[10] memory number) external; function setNumberSetH(address player, uint[10] memory number) external; //------------------------------------------------------------------------- // Numberset (getters) //------------------------------------------------------------------------- function getNumberSet1(address player) external view returns (uint[6] memory); function getNumberSet2(address player) external view returns (uint[5] memory); function getNumberSet3(address player) external view returns (uint[5] memory); function getNumberSet4(address player) external view returns (uint[5] memory); function getNumberSet5(address player) external view returns (uint[5] memory); function getNumberSet6(address player) external view returns (uint[5] memory); function getNumberSet7(address player) external view returns (uint[5] memory); function getNumberSet8(address player) external view returns (uint[5] memory); function getNumberSet9(address player) external view returns (uint[5] memory); function getNumberSetA(address player) external view returns (uint[5] memory); function getNumberSetB(address player) external view returns (uint[5] memory); function getNumberSetC(address player) external view returns (uint[5] memory); function getNumberSetD(address player) external view returns (uint[5] memory); function getNumberSetE(address player) external view returns (uint[10] memory); function getNumberSetF(address player) external view returns (uint[10] memory); function getNumberSetG(address player) external view returns (uint[10] memory); function getNumberSetH(address player) external view returns (uint[10] memory); //------------------------------------------------------------------------- // PVP Ranks //------------------------------------------------------------------------- struct Player { uint256 rankPoints; uint256 league; uint256 indexInLeague; // Index of the player within their league array } function setPlayers(address player, Player memory rankpointleagueindexinleague) external; function setReset_Time_Attempts(address player, uint[2] memory resettimeattemps) external; function setEligible_Opponents(address player, address[5] memory eligibleOppo) external; function setFaught_Opponents(address player, uint[5] memory faughtOppo) external; function setDefending_Formation(address player, uint[3] memory defendingslot) external; function getPlayers(address player) external view returns (Player memory ) ; function getReset_Time_Attempts(address player ) external view returns (uint[2] memory ); function getEligible_Opponents(address player ) external view returns (address[5] memory); function getFaught_Opponents(address player ) external view returns(uint[5] memory) ; function getDefending_Formation(address player) external view returns (uint[3] memory ); //------------------------------------------------------------------------- // Pet data (setters) //------------------------------------------------------------------------- function setPetUnits(address player, uint index, S.Unit memory newUnit) external; function setPetUnitsMaxVitamined(address player, uint index, S.Unit memory newUnit) external; function setPetStatuses(address player, uint index, S.Status memory newStatus) external; function setPetTimes(address player, uint index, S.Time memory newTime) external; //------------------------------------------------------------------------- // Pet data (getters) //------------------------------------------------------------------------- function getPetUnitsAll(address player) external view returns (S.Unit[500] memory); function getPetUnits(address player, uint _index) external view returns (S.Unit memory); function getPetUnitsMaxVitaminedAll(address player) external view returns (S.Unit[500] memory); function getPetUnitsMaxVitamined(address player, uint _index) external view returns (S.Unit memory); function getPetStatusesAll(address player) external view returns (S.Status[500] memory); function getPetStatuses(address player, uint _index) external view returns (S.Status memory); function getPetTimesAll(address player) external view returns (S.Time[500] memory); function getPetTimes(address player, uint _index) external view returns (S.Time memory); //------------------------------------------------------------------------- // Party / Outfit //------------------------------------------------------------------------- function setPartyFormation(address player, uint[30] memory slots) external; function setTrainerOutfitPosition(address player, uint[150] memory outfitIds) external; function getPartyFormation(address player) external view returns (uint[30] memory); function getAllOutfits(address player) external view returns (uint[150] memory); //------------------------------------------------------------------------- // Trainer Gene Infusing //------------------------------------------------------------------------- function setTrainerGeneInfusingGene(address player, uint index, uint value) external; function setTrainerGeneInfusingGeneAll(address player, uint[50] memory newData) external; function setTrainerGeneInfusingTimer(address player, uint index, uint value) external; function setTrainerGeneInfusingTimerAll(address player, uint[50] memory newData) external; function getTrainerGeneInfusingGeneAll(address player) external view returns (uint[50] memory) ; function getTrainerGeneInfusingTimerAll(address player) external view returns (uint[50] memory); function getTrainerGeneInfusingGene(address player, uint Index)external view returns (uint ) ; function getTrainerGeneInfusingTimer(address player, uint Index)external view returns (uint ); //------------------------------------------------------------------------- // Additional Utility //------------------------------------------------------------------------- function getBattleUnit3(address player, uint[3] calldata slots) external view returns (S.Unit[3] memory Units3, uint[3] memory UnitIds); function getSlotUnitMore(address player, uint startindex, uint stopindex) external view returns (S.Unit[] memory Units, uint[] memory UnitIds); function getTeamFormat(address _addr) external view returns (uint[60] memory); //------------------------------------------------------------------------- // Weather System //------------------------------------------------------------------------- function getWeatherUnity() external view returns (uint _weather, uint _daylight, uint _blocktime); function getWeatherBattle(uint _timenow) external view returns (uint _weather); function setWeatherConstants(uint[12] memory _weatherIndices) external; function getWeatherIndexConstants() external view returns (uint[] memory); } // File: FINALdeployFA/PUBLIC - Simulated Dungeon V1.sol pragma solidity ^0.8.9; //_______________________________________________________________ // ___ __ __ _ ___ _ ___ _ __ // | _ )\ \ / / _ | | / _ \ _ | | / _ \ (_)\ \ // | _ \ \ V / | || || (_) || || || (_) | _ | | // |___/ |_| \__/ \___/ \__/ \___/ ( ) | | // |/ /_/ //_______________________________________________________________ // // // ____ _ _ _ _ ____ _____ _____ ____ ____ _ _ _____ _____ ____ _ /// ___\/ \/ \__/|/ \ /\/ \ / _ \/__ __\/ __// _ \ / _ \/ \ /\/ \ /|/ __// __// _ \/ \ /| //| \| || |\/||| | ||| | | / \| / \ | \ | | \| | | \|| | ||| |\ ||| | _| \ | / \|| |\ || //\___ || || | ||| \_/|| |_/\| |-|| | | | /_ | |_/| | |_/|| \_/|| | \||| |_//| /_ | \_/|| | \|| //\____/\_/\_/ \|\____/\____/\_/ \| \_/ \____\\____/ \____/\____/\_/ \|\____\\____\\____/\_/ \| // // Interface for accessing Storage //------------------------------------------------------------------- // _____ _ _ _______ ______ _____ ______ _____ ______ // |_ _| \ | |__ __| ____| __ \| ____/\ / ____| ____| // | | | \| | | | | |__ | |__) | |__ / \ | | | |__ // | | | . ` | | | | __| | _ /| __/ /\ \| | | __| // _| |_| |\ | | | | |____| | \ \| | / ____ \ |____| |____ // |_____|_| \_| |_| |______|_| \_\_|/_/ \_\_____|______| // //------------------------------------------------------------------- interface BattleV4{ function BattleV4_3v3 (S.Unit[6] memory _UnitGroup) external returns (uint , uint , bool , uint ); function Calibrate (uint index) external returns (uint , uint , bool , uint ); } interface FARPG_RAM2Interface { // Read functions function getWildUnit3 (uint[3] calldata wildLingsID) external pure returns (S.Unit[3] memory Units3); } interface WildLingsData_ERC1155Interface { // call functions function mint( uint _amount, address _to, uint _id) external; function burn(address owner, uint _id, uint _amount) external ; } interface Items_ERC1155Interface { function balanceOfBatch(address[] memory accounts, uint256[] memory ids) external view returns (uint256[] memory); // call functions function mint( uint _amount, address _to, uint _id) external; function burn(address owner, uint _id, uint _amount) external ; } contract FARPG_Simulated_DungeonV1 is Ownable, ReentrancyGuard { IFARPG_Storage public contractStorage; FARPG_RAM2Interface public contractRAM2; WildLingsData_ERC1155Interface public WildLingsDataNFT; BattleV4 public Battle; Items_ERC1155Interface public ItemsNFT; constructor() { } event StatChangedResult(S.Unit AfterUnit, S.Status AfterStatus, S.Time AfterTime); //------------------------------------------------------------------- // _____ _ ____ ____ _ __ __ // / ____| | / __ \| _ \ /\ | | \ \ / / // | | __| | | | | | |_) | / \ | | \ \ / / // | | |_ | | | | | | _ < / /\ \ | | \ \/ / // | |__| | |___| |__| | |_) / ____ \| |____ \ / _ // \_____|______\____/|____/_/ \_\______| \/ (_) // //------------------------------------------------------------------- uint constant REENTRANT_TIMELIMIT = 2 seconds; // default 2 seconds. means u cannot run the nonreentrant functions >1 time within 3 seconds. mapping (address => uint) private reentrant_time; mapping (address => uint) private rewardreentrant_time; uint public REWARDMULTIPLIER = 100; //100 = 100%, reward will /100 event BattleResultV2(uint BattleRythm, uint bit, bool Won, uint randret, S.Unit[6] unitgroup,uint[3] oponentid, uint[3] attackerid); //--------------------------------------------------------- // _____ __ __ _____ _ _ // /\ | __ \| \/ |_ _| \ | | // / \ | | | | \ / | | | | \| | // / /\ \ | | | | |\/| | | | | . ` | // / ____ \| |__| | | | |_| |_| |\ | // /_/ \_\_____/|_| |_|_____|_| \_| // //--------------------------------------------------------- address public treasury = msg.sender; //default function updateTreasury(address _newTreasury) external onlyOwner { require(_newTreasury != address(0), "Invalid treasury address"); treasury = _newTreasury; } function updateStorageContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractStorage = IFARPG_Storage(_newContractAAddress); } function updateRAM2ContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractRAM2 = FARPG_RAM2Interface(_newContractAAddress); } function updateBattleV4Address(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); Battle = BattleV4(_newContractAAddress); } function updateWildLingsDataNFTAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); WildLingsDataNFT = WildLingsData_ERC1155Interface(_newContractAAddress); } function updateItemNFTAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); ItemsNFT = Items_ERC1155Interface(_newContractAAddress); } function withdraw() external onlyOwner { // Function to withdraw all balance from the contract for revenue require(address(this).balance > 0, "Contract balance is zero"); payable(treasury).transfer(address(this).balance); } //--------------------------------------------------------- // // _____ _______ _____ _______ // / ____|__ __|/\ | __ \__ __| // | (___ | | / \ | |__) | | | // \___ \ | | / /\ \ | _ / | | // ____) | | |/ ____ \| | \ \ | | // |_____/ |_/_/ \_\_| \_\ |_| // //--------------------------------------------------------- //--------- sub functions --------------- function accountAddressToProceed() public view returns (address) { // Ready for account abstraction // If the player doesn't provide a personal wallet, all data will be recorded in the trainer wallet address playerAddress = contractStorage.personalwallet(msg.sender); if (playerAddress == address(0)) { return msg.sender; } else { return playerAddress; } } function subtract(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } modifier onlyEOA() { require(!isContract(msg.sender), "Smart contracts not allowed"); _; } function noneReentrant_time(address player, uint timeSeconds) internal { //this is to prevent player spam an action or botting effectively. //this function must be Internal otherwise, it will congest a player reentrant time to make him/her unplayable require(block.timestamp - reentrant_time[player] >= timeSeconds,"Non-Reentrant, slow down TX attempts."); reentrant_time[player] = block.timestamp; } function isContract(address _addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(_addr) } return size > 0; } function forwardEtherToTreasury() internal { require(treasury != address(0), "Treasury address not set"); (bool sent, ) = treasury.call{value: msg.value}(""); require(sent, "Failed to forward Ether to treasury"); } struct GameState { bool AttackerWin; uint bit; uint BattleRhythm; uint randret; uint weather; uint level; uint[6] numberSet1; uint[3] SimulatedLingsID; } function simulatedDungeonBattle(uint[3] calldata attackersSlots) public nonReentrant { address playerAddress = accountAddressToProceed(); require(msg.sender.code.length == 0, "Only externally owned accounts are allowed."); GameState memory _gameState; S.Unit[3] memory TempUnits; //0,1,2 is Attacker //uint[3] memory AttackerIDs; //0,1,2 is Attacker S.Unit[6] memory UnitGroup; //this is a group that will send to battlecontract //get attacker data from player storage uint[3] memory AttackerIDs; (TempUnits,AttackerIDs) = contractStorage.getBattleUnit3(playerAddress,attackersSlots); require(TempUnits[0].hp>0 || TempUnits[1].hp>0 || TempUnits[2].hp>0,"3 empty slots, cannot battle."); UnitGroup[0] = TempUnits[0]; UnitGroup[1] = TempUnits[1]; UnitGroup[2] = TempUnits[2]; //get opponent from wild Units (,_gameState.weather, _gameState.SimulatedLingsID,_gameState.numberSet1) = getNextLevel(); //Simulated Dungeon [0]=difficulty now + lost matches, [1]=seed, [2]=time reload & attempts [3]=dungeon level [4]=difficulty max [5]=SD buff (TempUnits) = contractRAM2.getWildUnit3(_gameState.SimulatedLingsID); require(TempUnits[0].hp>0 || TempUnits[1].hp>0 || TempUnits[2].hp>0,"3 empty slots, cannot battle."); require(_gameState.numberSet1[5] <6000000000000000000000 && //need at least 20 '0, because each 4'0 give to buff percentage _gameState.numberSet1[1] > 0 && _gameState.numberSet1[3] <=3, "choose buff or Won Boss level." ); UnitGroup[3] = TempUnits[0]; UnitGroup[4] = TempUnits[1]; UnitGroup[5] = TempUnits[2]; //Add OutfitsBonus to Player UnitGroup = applyOutfitBonus(UnitGroup,playerAddress); //Add weather effects to all Lings. UnitGroup = WO.WeatherBuff(UnitGroup,_gameState.weather); uint _weight = ((_gameState.numberSet1[0]%1000000) + _gameState.numberSet1[3] )+7; //start with 70% so that to go 5, 6,.. and /10 later to get 10% resolution UnitGroup[3].hp = (UnitGroup[3].hp * _weight)/10; UnitGroup[4].hp = (UnitGroup[4].hp * _weight)/10; UnitGroup[5].hp = (UnitGroup[5].hp * _weight)/10; UnitGroup[3].attack = (UnitGroup[3].attack * _weight)/10; UnitGroup[4].attack = (UnitGroup[4].attack * _weight)/10; UnitGroup[5].attack = (UnitGroup[5].attack * _weight)/10; UnitGroup[3].defense = (UnitGroup[3].defense * _weight)/10; UnitGroup[4].defense = (UnitGroup[4].defense * _weight)/10; UnitGroup[5].defense = (UnitGroup[5].defense * _weight)/10; UnitGroup[3].speed = (UnitGroup[3].speed * _weight)/10; UnitGroup[4].speed = (UnitGroup[4].speed * _weight)/10; UnitGroup[5].speed = (UnitGroup[5].speed * _weight)/10; UnitGroup[3].intelligence = (UnitGroup[3].intelligence * _weight)/10; UnitGroup[4].intelligence = (UnitGroup[4].intelligence * _weight)/10; UnitGroup[5].intelligence = (UnitGroup[5].intelligence * _weight)/10; //------------- SD bonus BUFF ------------- _weight = _gameState.numberSet1[5] % 10000; // Get the last 4 digits UnitGroup[0].hp = (UnitGroup[0].hp * _weight)/10; UnitGroup[1].hp = (UnitGroup[1].hp * _weight)/10; UnitGroup[2].hp = (UnitGroup[2].hp * _weight)/10; _weight = (_gameState.numberSet1[5]/10000) % 10000; // Get the next 4 digits UnitGroup[0].attack = (UnitGroup[0].attack * _weight)/10; UnitGroup[1].attack = (UnitGroup[1].attack * _weight)/10; UnitGroup[2].attack = (UnitGroup[2].attack * _weight)/10; _weight = (_gameState.numberSet1[5]/100000000) % 10000; UnitGroup[0].defense = (UnitGroup[0].defense * _weight)/10; UnitGroup[1].defense = (UnitGroup[1].defense * _weight)/10; UnitGroup[2].defense = (UnitGroup[2].defense * _weight)/10; _weight = (_gameState.numberSet1[5]/1000000000000) % 10000; UnitGroup[0].speed = (UnitGroup[0].speed * _weight)/10; UnitGroup[1].speed = (UnitGroup[1].speed * _weight)/10; UnitGroup[2].speed = (UnitGroup[2].speed * _weight)/10; _weight = (_gameState.numberSet1[5]/10000000000000000) % 10000; UnitGroup[0].intelligence = (UnitGroup[0].intelligence * _weight)/10; UnitGroup[1].intelligence = (UnitGroup[1].intelligence * _weight)/10; UnitGroup[2].intelligence = (UnitGroup[2].intelligence * _weight)/10; (_gameState.BattleRhythm, _gameState.bit, _gameState.AttackerWin, _gameState.randret) = Battle.BattleV4_3v3(UnitGroup); if (_gameState.AttackerWin == true) { rewardNFT(playerAddress, _gameState.randret, _gameState.SimulatedLingsID, _gameState.numberSet1); //************************ SD SPECIFIC ************************ if (_gameState.numberSet1[3] == 3) { //won Boss level if ((_gameState.numberSet1[0])%1000000 > _gameState.numberSet1[4] ) { //current difficulty > max difficulty (%1000000 extract difficulty //plus 1 _gameState.numberSet1[4] += 1; } //*********** Special Reward ********** Won Boss //reset the seed for buff to prevent prediction _gameState.numberSet1[1] = 0; //reset the seed back to 0, so getNextLevel() can works with Unity } else { _gameState.numberSet1[1] = (uint(keccak256(abi.encodePacked(block.timestamp, block.prevrandao,playerAddress)))); } _gameState.numberSet1[3] += 1; // dungeon level + 1 (if seed set to 0, player cant battle in SD, so the rest doesn't matter ) _gameState.numberSet1[5] += 6000000000000000000000; //set the buff number, to make sure choose Bonus Buff to proceed next //************************************************************* contractStorage.setNumberSet1(playerAddress,_gameState.numberSet1); } else { //Lose = losing life, losing 5 lifes = lose dungeon, reset the seed back to 0, so getNextLevel() knows its game over _gameState.numberSet1[0] += 1000000; //add 1 losing match. combine with dificulty if (_gameState.numberSet1[0] >= 5000000) { //lost 5 times _gameState.numberSet1[1] = 0; //seed = 0, means reset } contractStorage.setNumberSet1(playerAddress,_gameState.numberSet1); } noneReentrant_time(playerAddress,5);//cannot battle between 8 seconds emit BattleResultV2(_gameState.BattleRhythm, _gameState.bit, _gameState.AttackerWin, _gameState.randret,UnitGroup,_gameState.SimulatedLingsID,AttackerIDs); } function chooseSDBuff(uint Choice) public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,2);//cannot run again between X seconds require(Choice < 3, "invalid choice, needs < 3."); uint[6] memory _numberSet1 = contractStorage.getNumberSet1(playerAddress); require(_numberSet1[1] > 0 , "Won Boss Level, or havent win a level." ); //seed cannot be 0 require(_numberSet1[5] >= 6000000000000000000000,"You need to won a dungeon level first."); _numberSet1[1] = (uint(keccak256(abi.encodePacked(block.timestamp, block.prevrandao,playerAddress)))); //reset the seed for next level to prevent prediction uint[3] memory availableChoices = SDBuffChoices(); _numberSet1[5] -= 6000000000000000000000; //reset the tangible SDBuff requirement to proceed next level uint buffnumber = availableChoices[Choice]; uint weight; if (buffnumber <= 4) { weight = 5; //**********************5 means 50% will /10 in battle function _numberSet1[5] += (weight * (10000**(buffnumber%5))); } else if (buffnumber <= 5) { weight = 1; //**********************5 means 50% will /10 in battle function for (uint i=0; i<5; i++) { _numberSet1[5] += (weight * (10000**(i))); } } else if (buffnumber <= 10) { weight = 8; //**********************5 means 50% will /10 in battle function _numberSet1[5] += (weight * (10000**((buffnumber-1)%5))); //-1 because buffnumber:5 is +all stats, so buffnumber 6 start hp again } else if (buffnumber <= 11) { weight = 3; //**********************5 means 50% will /10 in battle function for (uint i=0; i<5; i++) { _numberSet1[5] += (weight * (10000**(i))); } } else if (buffnumber <= 16) { weight = 10; //**********************5 means 50% will /10 in battle function _numberSet1[5] += (weight * (10000**((buffnumber-2)%5)));//-2 because buffnumber:5,11 are +all stats, so buffnumber:12 start hp again } else if (buffnumber <= 17) { weight = 5; //**********************5 means 50% will /10 in battle function for (uint i=0; i<5; i++) { _numberSet1[5] += (weight * (10000**(i))); } } contractStorage.setNumberSet1(playerAddress,_numberSet1); } function SDBuffChoices() public view returns (uint[3] memory availableChoices) { address playerAddress = accountAddressToProceed(); uint[6] memory _numberSet1 = contractStorage.getNumberSet1(playerAddress); uint seed = (_numberSet1[1]&65535)+5191; uint chance; seed += seed>>5; for(uint i = 0; i < 3; i++) { chance = seed % 10; if (chance < 7) { // small buff 70% seed += seed >> 5; availableChoices[i] = seed % 6; } else if (chance < 9) { // medium buff 20% seed += seed >> 5; availableChoices[i] = (seed % 6) + 6; } else { // big buff 10% seed += seed >> 5; availableChoices[i] = (seed % 6) + 12; } } } function applyOutfitBonus(S.Unit[6] memory _UnitGroup,address playerAddress) private view returns (S.Unit[6] memory UnitGroup) { uint[150] memory wearingOutfit = contractStorage.getAllOutfits(playerAddress); address[] memory addressBatch = new address[](5); uint256[] memory idsBatch = new uint256[](5); for (uint i = 0; i < 5; i++) { addressBatch[i] = playerAddress; idsBatch[i] = wearingOutfit[i]; } uint256[] memory outfitBalance= new uint[](5); outfitBalance = ItemsNFT.balanceOfBatch(addressBatch, idsBatch); //convert to right type from dynamic uint[5] memory arrayID; uint[5] memory arrayBalance; for (uint i = 0; i < 5; i++) { arrayID[i] = idsBatch[i]; arrayBalance[i] = outfitBalance[i]; } UnitGroup = WO.TrainersOutfitBonus(_UnitGroup, arrayID, arrayBalance); } function rewardNFT(address playerAddress, uint randret, uint[3] memory wildLingsID, uint[6] memory numberSet1) internal { uint rewardCredit = 5+(numberSet1[0]%1000000); rewardCredit = (rewardCredit * 24 * REWARDMULTIPLIER) / 100; contractStorage.addPoint1(playerAddress,rewardCredit); if (block.timestamp - reentrant_time[playerAddress] > 1) { rewardCredit = 6; //60% chance } else { rewardCredit = 3; //30% chance } for (uint i = 0; i < 3; i++) { if ((randret / (10**(i))) % 10 < rewardCredit) { WildLingsDataNFT.mint(1, playerAddress, wildLingsID[i]); } } uint rand = (uint(keccak256(abi.encodePacked(block.timestamp, block.prevrandao,playerAddress)))); ItemsNFT.mint(1, playerAddress, ((rand%168) + 1001)); if (numberSet1[3] == 3) { //Dungeon level = boss level uint chance = (numberSet1[0] %1000000) + 1; //also has chance even for difficulty = 0 chance = (chance*100) / (chance+3) ; rand = rand/4096 + 61783; rand += rand; if (rand%100 < chance) { //success roll rand = rand/4096 + 61783; rand += rand; rand = rand % 37; if (rand< 17) { chance = rand + 3001; } else { chance = rand + 6000; } ItemsNFT.mint(1, playerAddress, chance); } } } //based on the seed, get the next level / buff or function getNextLevel () public view returns(uint map, uint weather, uint[3] memory SimulatedLingsID, uint[6] memory numberSet1) { address playerAddress = accountAddressToProceed(); uint[6] memory _numberSet1 = contractStorage.getNumberSet1(playerAddress); numberSet1 = _numberSet1; weather = _numberSet1[1] % 7; if (_numberSet1[3] <= 2) { //dungeon level = 0,1,2 map = ((_numberSet1[1]>>5) % 5)+1; //map 1~5 //No Imaginary if (map ==3) { map =2;} //give more chances to Lings available map } else { // dungeon level 3 (4th battle) Boss imaginary map = 6; } SimulatedLingsID[0] = (_numberSet1[1]>>10) % 16; //0~15 SimulatedLingsID[1] = (_numberSet1[1]>>15) % 16; //0~15 SimulatedLingsID[2] = (_numberSet1[1]>>20) % 16; //0~15 if (map == 1 ) { //jungle //Wolf, Wombat for(uint i = 0; i < 3; i++) { if (SimulatedLingsID[i] < 3) { SimulatedLingsID[i] = 44;//22; } else if (SimulatedLingsID[i] < 6) { SimulatedLingsID[i] = 43;//23; } else if (SimulatedLingsID[i] < 9) { SimulatedLingsID[i] = 44;//24; } else if (SimulatedLingsID[i] < 12) { SimulatedLingsID[i] = 43; } else { SimulatedLingsID[i] = 42;//44; } } } else if (map == 2 ) { //Grassland //Qilin, Wolf //qilin 39 40, wolf 43 44, wolf qilin 81 for(uint i = 0; i < 3; i++) { if (SimulatedLingsID[i] < 3) { SimulatedLingsID[i] = 39; } else if (SimulatedLingsID[i] < 6) { SimulatedLingsID[i] = 40; } else if (SimulatedLingsID[i] < 9) { SimulatedLingsID[i] = 43; } else if (SimulatedLingsID[i] < 12) { SimulatedLingsID[i] = 44; } else { SimulatedLingsID[i] = 81; } } } else if (map == 3 ) { //Graveyard // Wolf, Phantom //********TEMPORARY cancel Map3, so u cant get Map3. since all lings not released // phantom 10 11 12 wolf phantom 78 phantom wombat 33 34 for(uint i = 0; i < 3; i++) { if (SimulatedLingsID[i] < 3) { SimulatedLingsID[i] = 10; } else if (SimulatedLingsID[i] < 6) { //********TEMPORARY cancel Map3, so u cant get Map3. since all lings not released SimulatedLingsID[i] = 11; } else if (SimulatedLingsID[i] < 9) { SimulatedLingsID[i] = 12; } else if (SimulatedLingsID[i] < 12) { SimulatedLingsID[i] = 78; } else if (SimulatedLingsID[i] < 14) { SimulatedLingsID[i] = 33; } else { SimulatedLingsID[i] = 34; } } } else if (map == 4 ) { //Beach // Aqua, Wombat //aqua 16 17 18, wolf aqua 79, aqua wombat 35 36, for(uint i = 0; i < 3; i++) { if (SimulatedLingsID[i] < 3) { SimulatedLingsID[i] = 16; } else if (SimulatedLingsID[i] < 6) { SimulatedLingsID[i] = 17; } else if (SimulatedLingsID[i] < 9) { SimulatedLingsID[i] = 18; } else if (SimulatedLingsID[i] < 12) { SimulatedLingsID[i] = 17;//35; } else if (SimulatedLingsID[i] < 14) { SimulatedLingsID[i] = 18;//36; } else { SimulatedLingsID[i] = 79; } } } else if (map == 5 ) { //Foothill // Wombat, Qilin, dragon //wombat 22 23 24, qilin 39 40, Qilin wombat 72 for(uint i = 0; i < 3; i++) { if (SimulatedLingsID[i] < 3) { SimulatedLingsID[i] = 4;//22; } else if (SimulatedLingsID[i] < 6) { SimulatedLingsID[i] = 5;//23; } else if (SimulatedLingsID[i] < 9) { SimulatedLingsID[i] = 6;//24; } else if (SimulatedLingsID[i] < 12) { SimulatedLingsID[i] = 39; } else if (SimulatedLingsID[i] < 14) { SimulatedLingsID[i] = 40; } else { SimulatedLingsID[i] = 39;//72; } } } else if (map == 6 ) { //SIMULATED DIMENSION // All MIXED GENE for(uint i = 0; i < 3; i++) { if (SimulatedLingsID[i] < 2) { SimulatedLingsID[i] = 69; } else if (SimulatedLingsID[i] < 4) { SimulatedLingsID[i] = 73;//70; } else if (SimulatedLingsID[i] < 6) { SimulatedLingsID[i] = 71; } else if (SimulatedLingsID[i] < 8) { SimulatedLingsID[i] = 77; } else if (SimulatedLingsID[i] < 10) { SimulatedLingsID[i] = 75;//29; } else if (SimulatedLingsID[i] < 12) { SimulatedLingsID[i] = 82;//30; } else if (SimulatedLingsID[i] < 14) { SimulatedLingsID[i] = 27; } else { SimulatedLingsID[i] = 28; } } } } mapping (address => bool) DoneFirstAttempt; //make sure first attempt doesnt trigger reset timer. function ResetDifficultyAndSeed(uint difficulty) public payable nonReentrant { address playerAddress = accountAddressToProceed(); uint[6] memory _numberSet1 = contractStorage.getNumberSet1(playerAddress); uint[3] memory _SDchk; (_SDchk[0],_SDchk[1],_SDchk[2]) = calculateSD24Hr_paid(); //(uint attempts, uint remainingTimeReset_s, uint pricePerReset) { require ( difficulty <= _numberSet1[4]+1,"You can't set more than max difficulty +1."); if (_SDchk[0] == 0) { //if attempts = 0 from check function, means a fresh day, reset the time limit record, and set to 1 _numberSet1[0] = difficulty; _numberSet1[1] = (uint(keccak256(abi.encodePacked(block.timestamp, block.prevrandao,playerAddress)))); if (DoneFirstAttempt[playerAddress] == false) { DoneFirstAttempt[playerAddress] = true; //used up the newbie free attempts } else { _numberSet1[2] = block.timestamp+1000000000000000000000000000000; } //next reset level _numberSet1[3] = 0; } else { //means attempts is not 0, its a paid reset require ( msg.value == _SDchk[2],"Insufficient payment to reset SD."); _numberSet1[0] = difficulty; _numberSet1[1] = (uint(keccak256(abi.encodePacked(block.timestamp, block.prevrandao,playerAddress)))); _numberSet1[2] = _numberSet1[2] + 1000000000000000000000000000000; _numberSet1[3] = 0; } _numberSet1[5] = 100010001000100010; //10 is 100%, will /10 in battle function. //SD buff, each 4 digit is a stats, start with 10 = 100% _numberSet1[5] += 6000000000000000000000; //set the buff number, to make sure choose Bonus Buff to proceed next contractStorage.setNumberSet1(playerAddress,_numberSet1); if (msg.value > 0){ forwardEtherToTreasury(); } } uint public INTERVAL_RESET = 20 hours; //after 20 hours of players first attempts, it will reset back to 0 price. Cater for global time uint public PRICE_PERRESET = 5 ether; //similar to summon, first Simulated Dungeon reset free, subsequent need pay, incrementally. function setIntervalReset(uint _newInterval) external onlyOwner { INTERVAL_RESET = _newInterval; } function setPricePerReset(uint _newPrice) external onlyOwner { PRICE_PERRESET = _newPrice; } function calculateSD24Hr_paid() public view returns (uint attempts, uint remainingTimeReset_s, uint pricePerReset) { address playerAddress = accountAddressToProceed(); uint[6] memory _numberSet1 = contractStorage.getNumberSet1(playerAddress); uint timeElapsed = block.timestamp - (_numberSet1[2] % 1000000000000); if (timeElapsed >= INTERVAL_RESET) { attempts = 0; remainingTimeReset_s = 0; } else { attempts = _numberSet1[2]/1000000000000000000000000000000; remainingTimeReset_s = INTERVAL_RESET - timeElapsed; pricePerReset = PRICE_PERRESET*attempts; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"BattleRythm","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bit","type":"uint256"},{"indexed":false,"internalType":"bool","name":"Won","type":"bool"},{"indexed":false,"internalType":"uint256","name":"randret","type":"uint256"},{"components":[{"internalType":"uint256","name":"hp","type":"uint256"},{"internalType":"uint256","name":"attack","type":"uint256"},{"internalType":"uint256","name":"defense","type":"uint256"},{"internalType":"uint256","name":"speed","type":"uint256"},{"internalType":"uint256","name":"intelligence","type":"uint256"},{"internalType":"uint256","name":"genestrength","type":"uint256"},{"internalType":"uint256","name":"range","type":"uint256"},{"internalType":"uint256","name":"special","type":"uint256"}],"indexed":false,"internalType":"struct S.Unit[6]","name":"unitgroup","type":"tuple[6]"},{"indexed":false,"internalType":"uint256[3]","name":"oponentid","type":"uint256[3]"},{"indexed":false,"internalType":"uint256[3]","name":"attackerid","type":"uint256[3]"}],"name":"BattleResultV2","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"hp","type":"uint256"},{"internalType":"uint256","name":"attack","type":"uint256"},{"internalType":"uint256","name":"defense","type":"uint256"},{"internalType":"uint256","name":"speed","type":"uint256"},{"internalType":"uint256","name":"intelligence","type":"uint256"},{"internalType":"uint256","name":"genestrength","type":"uint256"},{"internalType":"uint256","name":"range","type":"uint256"},{"internalType":"uint256","name":"special","type":"uint256"}],"indexed":false,"internalType":"struct S.Unit","name":"AfterUnit","type":"tuple"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"family","type":"uint256"},{"internalType":"uint256","name":"stage","type":"uint256"}],"indexed":false,"internalType":"struct S.Status","name":"AfterStatus","type":"tuple"},{"components":[{"internalType":"uint256","name":"bond","type":"uint256"},{"internalType":"uint256","name":"stamina","type":"uint256"},{"internalType":"uint256","name":"hunger","type":"uint256"}],"indexed":false,"internalType":"struct S.Time","name":"AfterTime","type":"tuple"}],"name":"StatChangedResult","type":"event"},{"inputs":[],"name":"Battle","outputs":[{"internalType":"contract BattleV4","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INTERVAL_RESET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ItemsNFT","outputs":[{"internalType":"contract Items_ERC1155Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PERRESET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARDMULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"difficulty","type":"uint256"}],"name":"ResetDifficultyAndSeed","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"SDBuffChoices","outputs":[{"internalType":"uint256[3]","name":"availableChoices","type":"uint256[3]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WildLingsDataNFT","outputs":[{"internalType":"contract WildLingsData_ERC1155Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accountAddressToProceed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateSD24Hr_paid","outputs":[{"internalType":"uint256","name":"attempts","type":"uint256"},{"internalType":"uint256","name":"remainingTimeReset_s","type":"uint256"},{"internalType":"uint256","name":"pricePerReset","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"Choice","type":"uint256"}],"name":"chooseSDBuff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractRAM2","outputs":[{"internalType":"contract FARPG_RAM2Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractStorage","outputs":[{"internalType":"contract IFARPG_Storage","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextLevel","outputs":[{"internalType":"uint256","name":"map","type":"uint256"},{"internalType":"uint256","name":"weather","type":"uint256"},{"internalType":"uint256[3]","name":"SimulatedLingsID","type":"uint256[3]"},{"internalType":"uint256[6]","name":"numberSet1","type":"uint256[6]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newInterval","type":"uint256"}],"name":"setIntervalReset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPricePerReset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[3]","name":"attackersSlots","type":"uint256[3]"}],"name":"simulatedDungeonBattle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateBattleV4Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateItemNFTAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateRAM2ContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateStorageContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newTreasury","type":"address"}],"name":"updateTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateWildLingsDataNFTAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526064600955600a80546001600160a01b0319163317905562011940600c55674563918244f40000600d553480156038575f5ffd5b506040336048565b600180556097565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b615771806100a45f395ff3fe6080604052600436106101af575f3560e01c80638da5cb5b116100e7578063d5ec19be11610087578063ec28f77f11610062578063ec28f77f14610496578063ef7245e6146104ab578063f2fde38b146104ca578063fa2d9f86146104e9575f5ffd5b8063d5ec19be14610441578063d6454a6114610462578063d861a72e14610477575f5ffd5b8063b9f54f2c116100c2578063b9f54f2c146103c5578063bf6be8ae146103e4578063c13f7f3514610403578063cdbb812a14610422575f5ffd5b80638da5cb5b1461037657806396a33dc514610392578063a988158b146103a6575f5ffd5b806357ba60e01161015257806369663b3a1161012d57806369663b3a146102f5578063715018a6146103245780637f51bb1f146103385780638b4a5d2114610357575f5ffd5b806357ba60e0146102945780635b8e0407146102b357806361d027b3146102d6575f5ffd5b806319858da31161018d57806319858da3146102235780631ef3dff01461024257806329de4ffc146102615780633ccfd60b14610280575f5ffd5b80630549b27e146101b357806311415248146101ef57806315c5c6c814610204575b5f5ffd5b3480156101be575f5ffd5b506002546101d2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6102026101fd366004614e8b565b61050d565b005b34801561020f575f5ffd5b5061020261021e366004614e8b565b610832565b34801561022e575f5ffd5b506005546101d2906001600160a01b031681565b34801561024d575f5ffd5b5061020261025c366004614eb6565b610c20565b34801561026c575f5ffd5b5061020261027b366004614eb6565b610c70565b34801561028b575f5ffd5b50610202610cc0565b34801561029f575f5ffd5b506102026102ae366004614eb6565b610d4d565b3480156102be575f5ffd5b506102c860095481565b6040519081526020016101e6565b3480156102e1575f5ffd5b50600a546101d2906001600160a01b031681565b348015610300575f5ffd5b50610309610d9d565b604080519384526020840192909252908201526060016101e6565b34801561032f575f5ffd5b50610202610e9d565b348015610343575f5ffd5b50610202610352366004614eb6565b610eb0565b348015610362575f5ffd5b50610202610371366004614eb6565b610f30565b348015610381575f5ffd5b505f546001600160a01b03166101d2565b34801561039d575f5ffd5b506101d2610f80565b3480156103b1575f5ffd5b506102026103c0366004614ed8565b61100a565b3480156103d0575f5ffd5b506102026103df366004614eb6565b611ca1565b3480156103ef575f5ffd5b506102026103fe366004614e8b565b611cf1565b34801561040e575f5ffd5b506004546101d2906001600160a01b031681565b34801561042d575f5ffd5b506006546101d2906001600160a01b031681565b34801561044c575f5ffd5b50610455611cfe565b6040516101e69190614f25565b34801561046d575f5ffd5b506102c8600c5481565b348015610482575f5ffd5b506003546101d2906001600160a01b031681565b3480156104a1575f5ffd5b506102c8600d5481565b3480156104b6575f5ffd5b506102026104c5366004614e8b565b611e83565b3480156104d5575f5ffd5b506102026104e4366004614eb6565b611e90565b3480156104f4575f5ffd5b506104fd611f06565b6040516101e69493929190614f5b565b6105156127c0565b5f61051e610f80565b6002546040516329d1c01360e21b81526001600160a01b0380841660048301529293505f929091169063a747004c9060240160c060405180830381865afa15801561056b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058f9190614ffc565b9050610599614d4e565b6105a1610d9d565b60408401526020830152815260808201516105bd90600161508a565b8411156106245760405162461bcd60e51b815260206004820152602a60248201527f596f752063616e277420736574206d6f7265207468616e206d6178206469666660448201526934b1bab63a3c9015989760b11b60648201526084015b60405180910390fd5b80515f036106d0578382526040516106449042904490869060200161509d565b60408051808303601f190181529181528151602092830120848301526001600160a01b0385165f908152600b90925281205460ff16151590036106a8576001600160a01b0383165f908152600b60205260409020805460ff191660011790556106c5565b6106bf426c0c9f2c9cd04674edea4000000061508a565b60408301525b5f606083015261078a565b6040810151341461072d5760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e74207061796d656e7420746f2072657365742053446044820152601760f91b606482015260840161061b565b8382526040516107459042904490869060200161509d565b60408051808303601f1901815291815281516020928301209184019190915282015161077e906c0c9f2c9cd04674edea4000000061508a565b60408301525f60608301525b6701634e90e798f0aa60a0830181815269014542ba12a337c00000916107b190839061508a565b905250600254604051635560f54d60e01b81526001600160a01b0390911690635560f54d906107e690869086906004016150c5565b5f604051808303815f87803b1580156107fd575f5ffd5b505af115801561080f573d5f5f3e3d5ffd5b505050505f34111561082357610823612819565b50505061082f60018055565b50565b61083a6127c0565b5f610843610f80565b905061085081600261291d565b600382106108a05760405162461bcd60e51b815260206004820152601a60248201527f696e76616c69642063686f6963652c206e65656473203c20332e000000000000604482015260640161061b565b6002546040516329d1c01360e21b81526001600160a01b0383811660048301525f92169063a747004c9060240160c060405180830381865afa1580156108e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090c9190614ffc565b602081015190915061096f5760405162461bcd60e51b815260206004820152602660248201527f576f6e20426f7373204c6576656c2c206f7220686176656e742077696e2061206044820152653632bb32b61760d11b606482015260840161061b565b60a081015169014542ba12a337c0000011156109dc5760405162461bcd60e51b815260206004820152602660248201527f596f75206e65656420746f20776f6e20612064756e67656f6e206c6576656c206044820152653334b939ba1760d11b606482015260840161061b565b4244836040516020016109f19392919061509d565b60408051808303601f190181529190528051602091820120908201525f610a16611cfe565b905069014542ba12a337c0000082600560200201818151610a3791906150e2565b9052505f818560038110610a4d57610a4d615062565b602002015190505f60048211610a9957506005610a6a8183615109565b610a76906127106151ff565b610a80908261520a565b60a085018051610a9190839061508a565b905250610bb3565b60058211610ae7575060015f5b6005811015610ae157610abb816127106151ff565b610ac5908361520a565b60a086018051610ad690839061508a565b905250600101610aa6565b50610bb3565b600a8211610b09575060086005610aff6001846150e2565b610a6a9190615109565b600b8211610b51575060035f5b6005811015610ae157610b2b816127106151ff565b610b35908361520a565b60a086018051610b4690839061508a565b905250600101610b16565b60108211610b695750600a6005610aff6002846150e2565b60118211610bb3575060055f5b6005811015610bb157610b8b816127106151ff565b610b95908361520a565b60a086018051610ba690839061508a565b905250600101610b76565b505b600254604051635560f54d60e01b81526001600160a01b0390911690635560f54d90610be590889088906004016150c5565b5f604051808303815f87803b158015610bfc575f5ffd5b505af1158015610c0e573d5f5f3e3d5ffd5b50505050505050505061082f60018055565b610c286129b9565b6001600160a01b038116610c4e5760405162461bcd60e51b815260040161061b90615221565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610c786129b9565b6001600160a01b038116610c9e5760405162461bcd60e51b815260040161061b90615221565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610cc86129b9565b5f4711610d175760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f0000000000000000604482015260640161061b565b600a546040516001600160a01b03909116904780156108fc02915f818181858888f1935050505015801561082f573d5f5f3e3d5ffd5b610d556129b9565b6001600160a01b038116610d7b5760405162461bcd60e51b815260040161061b90615221565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f610da9610f80565b6002546040516329d1c01360e21b81526001600160a01b0380841660048301529293505f929091169063a747004c9060240160c060405180830381865afa158015610df6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1a9190614ffc565b90505f64e8d4a510008260026020020151610e359190615109565b610e3f90426150e2565b9050600c548110610e55575f95505f9450610e95565b6040820151610e72906c0c9f2c9cd04674edea400000009061524a565b955080600c54610e8291906150e2565b945085600d54610e92919061520a565b93505b505050909192565b610ea56129b9565b610eae5f612a12565b565b610eb86129b9565b6001600160a01b038116610f0e5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420747265617375727920616464726573730000000000000000604482015260640161061b565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610f386129b9565b6001600160a01b038116610f5e5760405162461bcd60e51b815260040161061b90615221565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6002546040516302e6c26360e11b81523360048201525f9182916001600160a01b03909116906305cd84c690602401602060405180830381865afa158015610fca573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fee919061525d565b90506001600160a01b038116611005573391505090565b919050565b6110126127c0565b5f61101b610f80565b9050333b156110805760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792065787465726e616c6c79206f776e6564206163636f756e7473206160448201526a39329030b63637bbb2b21760a91b606482015260840161061b565b611088614d6c565b611090614db8565b611098614de5565b6110a0614d4e565b60025460405163a69a496f60e01b81526001600160a01b039091169063a69a496f906110d29088908a90600401615278565b61036060405180830381865afa1580156110ee573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111129190615361565b815151919450915015158061112b575060208301515115155b8061113a575060408301515115155b6111865760405162461bcd60e51b815260206004820152601d60248201527f3320656d70747920736c6f74732c2063616e6e6f7420626174746c652e000000604482015260640161061b565b8251825260208084015190830152604080840151908301526111a6611f06565b60c088015260e08701819052608087019190915260035460405163b3d33f1b60e01b81526001600160a01b03909116925063b3d33f1b916111e991600401614f25565b61030060405180830381865afa158015611205573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122991906153dd565b805151909350151580611240575060208301515115155b8061124f575060408301515115155b61129b5760405162461bcd60e51b815260206004820152601d60248201527f3320656d70747920736c6f74732c2063616e6e6f7420626174746c652e000000604482015260640161061b565b60c084015160a0015169014542ba12a337c000001180156112c3575060c08401516020015115155b80156112d8575060c084015160600151600310155b6113245760405162461bcd60e51b815260206004820152601e60248201527f63686f6f73652062756666206f7220576f6e20426f7373206c6576656c2e0000604482015260640161061b565b8251606083015260208301516080830152604083015160a08301526113498286612a61565b608085015160405163d74f3bd160e01b8152919350732e36696e2942b5e04ce81fbe926daaab0ee0d84e9163d74f3bd19161138991869190600401615446565b61060060405180830381865af41580156113a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c9919061548b565b60c0850151606081015190519193505f916113e890620f424090615109565b6113f2919061508a565b6113fd90600761508a565b9050600a81846003602002015151611415919061520a565b61141f919061524a565b606084015152608083015151600a9061143990839061520a565b611443919061524a565b60808401515260a083015151600a9061145d90839061520a565b611467919061524a565b60a084015152606083015160200151600a9061148490839061520a565b61148e919061524a565b606084015160209081019190915260808401510151600a906114b190839061520a565b6114bb919061524a565b608084015160209081019190915260a08401510151600a906114de90839061520a565b6114e8919061524a565b60a084015160200152606083015160400151600a9061150890839061520a565b611512919061524a565b836003602002015160400152600a81846004602002015160400151611537919061520a565b611541919061524a565b836004602002015160400152600a81846005602002015160400151611566919061520a565b611570919061524a565b60a0840151604001526060808401510151600a9061158f90839061520a565b611599919061524a565b836003602002015160600152600a818460046020020151606001516115be919061520a565b6115c8919061524a565b836004602002015160600152600a818460056020020151606001516115ed919061520a565b6115f7919061524a565b836005602002015160600152600a8184600360200201516080015161161c919061520a565b611626919061524a565b836003602002015160800152600a8184600460200201516080015161164b919061520a565b611655919061524a565b836004602002015160800152600a8184600560200201516080015161167a919061520a565b611684919061524a565b60a0808501516080019190915260c086015101516116a59061271090615109565b835151909150600a906116b990839061520a565b6116c3919061524a565b835152602083015151600a906116da90839061520a565b6116e4919061524a565b602084015152604083015151600a906116fe90839061520a565b611708919061524a565b60408401515260c085015160a001516127109061172690829061524a565b6117309190615109565b835160200151909150600a9061174790839061520a565b611751919061524a565b8351602090810191909152808401510151600a9061177090839061520a565b61177a919061524a565b60208085015181019190915260408401510151600a9061179b90839061520a565b6117a5919061524a565b60408401516020015260c085015160a00151612710906117ca906305f5e1009061524a565b6117d49190615109565b835160400151909150600a906117eb90839061520a565b6117f5919061524a565b835160409081019190915260208401510151600a9061181590839061520a565b61181f919061524a565b836001602002015160400152600a81846002602002015160400151611844919061520a565b61184e919061524a565b604080850151015260c085015160a00151612710906118739064e8d4a510009061524a565b61187d9190615109565b835160600151909150600a9061189490839061520a565b61189e919061524a565b835160609081019190915260208401510151600a906118be90839061520a565b6118c8919061524a565b836001602002015160600152600a818460026020020151606001516118ed919061520a565b6118f7919061524a565b60408401516060015260c085015160a001516127109061191f90662386f26fc100009061524a565b6119299190615109565b835160800151909150600a9061194090839061520a565b61194a919061524a565b835160809081019190915260208401510151600a9061196a90839061520a565b611974919061524a565b836001602002015160800152600a81846002602002015160800151611999919061520a565b6119a3919061524a565b836002602002015160800152600554604051639d392e5b60e01b81526001600160a01b0390911690639d392e5b906119df908690600401615521565b6080604051808303815f875af11580156119fb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1f9190615530565b6060890152151580885260208801919091526040870191909152600103611b9657611a588686606001518760e001518860c00151612ccf565b60c085015160600151600303611ab65760c085015160808101519051611a8290620f424090615109565b1115611aa55760c0850151608001805160019190611aa190839061508a565b9052505b60c08501515f602090910152611aed565b424487604051602001611acb9392919061509d565b60408051808303601f19018152919052805160209182012060c0870151909101525b60c0850151606001805160019190611b0690839061508a565b90525060c085015160a001805169014542ba12a337c000009190611b2b90839061508a565b90525060025460c0860151604051635560f54d60e01b81526001600160a01b0390921691635560f54d91611b64918a91906004016150c5565b5f604051808303815f87803b158015611b7b575f5ffd5b505af1158015611b8d573d5f5f3e3d5ffd5b50505050611c31565b60c08501518051620f42409190611bae90839061508a565b90525060c085015151624c4b4011611bcd5760c08501515f6020909101525b60025460c0860151604051635560f54d60e01b81526001600160a01b0390921691635560f54d91611c03918a91906004016150c5565b5f604051808303815f87803b158015611c1a575f5ffd5b505af1158015611c2c573d5f5f3e3d5ffd5b505050505b611c3c86600561291d565b7fed965831ff58bcf473e4bcfc1e0f5325bbb0c898866ca137ca39639ad40f3ca485604001518660200151875f01518860600151878a60e0015188604051611c8a9796959493929190615571565b60405180910390a150505050505061082f60018055565b611ca96129b9565b6001600160a01b038116611ccf5760405162461bcd60e51b815260040161061b90615221565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611cf96129b9565b600c55565b611d06614d4e565b5f611d0f610f80565b6002546040516329d1c01360e21b81526001600160a01b0380841660048301529293505f929091169063a747004c9060240160c060405180830381865afa158015611d5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d809190614ffc565b90505f8160016020020151611d9b9061ffff1661144761508a565b90505f611dac600583901c8361508a565b91505f5b6003811015611e7b57611dc4600a84615109565b91506007821015611e0657611ddd600584901c8461508a565b9250611dea600684615109565b868260038110611dfc57611dfc615062565b6020020152611e73565b6009821015611e3557611e1d600584901c8461508a565b9250611e2a600684615109565b611dea90600661508a565b611e43600584901c8461508a565b9250611e50600684615109565b611e5b90600c61508a565b868260038110611e6d57611e6d615062565b60200201525b600101611db0565b505050505090565b611e8b6129b9565b600d55565b611e986129b9565b6001600160a01b038116611efd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161061b565b61082f81612a12565b5f5f611f10614d4e565b611f18614e12565b5f611f21610f80565b6002546040516329d1c01360e21b81526001600160a01b0380841660048301529293505f929091169063a747004c9060240160c060405180830381865afa158015611f6e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f929190614ffc565b6020810151909350839150611fa990600790615109565b94506002816003602002015111611fec576020810151611fcd90600590811c615109565b611fd890600161508a565b955085600303611fe757600295505b611ff1565b600695505b602081015161200590601090600a1c615109565b8452602081015161201b90601090600f1c615109565b6020808601919091528101516120369060109060141c615109565b6040850152600186900361214d575f5b600381101561214757600385826003811061206357612063615062565b6020020151101561208c57602c85826003811061208257612082615062565b602002015261213f565b60068582600381106120a0576120a0615062565b602002015110156120bf57602b85826003811061208257612082615062565b60098582600381106120d3576120d3615062565b602002015110156120f257602c85826003811061208257612082615062565b600c85826003811061210657612106615062565b6020020151101561212557602b85826003811061208257612082615062565b602a85826003811061213957612139615062565b60200201525b600101612046565b506127b8565b85600203612258575f5b600381101561214757600385826003811061217457612174615062565b6020020151101561219d57602785826003811061219357612193615062565b6020020152612250565b60068582600381106121b1576121b1615062565b602002015110156121d057602885826003811061219357612193615062565b60098582600381106121e4576121e4615062565b6020020151101561220357602b85826003811061219357612193615062565b600c85826003811061221757612217615062565b6020020151101561223657602c85826003811061219357612193615062565b605185826003811061224a5761224a615062565b60200201525b600101612157565b85600303612396575f5b600381101561214757600385826003811061227f5761227f615062565b602002015110156122a857600a85826003811061229e5761229e615062565b602002015261238e565b60068582600381106122bc576122bc615062565b602002015110156122db57600b85826003811061229e5761229e615062565b60098582600381106122ef576122ef615062565b6020020151101561230e57600c85826003811061229e5761229e615062565b600c85826003811061232257612322615062565b6020020151101561234157604e85826003811061229e5761229e615062565b600e85826003811061235557612355615062565b6020020151101561237457602185826003811061229e5761229e615062565b602285826003811061238857612388615062565b60200201525b600101612262565b856004036124d4575f5b60038110156121475760038582600381106123bd576123bd615062565b602002015110156123e65760108582600381106123dc576123dc615062565b60200201526124cc565b60068582600381106123fa576123fa615062565b602002015110156124195760118582600381106123dc576123dc615062565b600985826003811061242d5761242d615062565b6020020151101561244c5760128582600381106123dc576123dc615062565b600c85826003811061246057612460615062565b6020020151101561247f5760118582600381106123dc576123dc615062565b600e85826003811061249357612493615062565b602002015110156124b25760128582600381106123dc576123dc615062565b604f8582600381106124c6576124c6615062565b60200201525b6001016123a0565b85600503612612575f5b60038110156121475760038582600381106124fb576124fb615062565b6020020151101561252457600485826003811061251a5761251a615062565b602002015261260a565b600685826003811061253857612538615062565b6020020151101561255757600585826003811061251a5761251a615062565b600985826003811061256b5761256b615062565b6020020151101561258a57600685826003811061251a5761251a615062565b600c85826003811061259e5761259e615062565b602002015110156125bd57602785826003811061251a5761251a615062565b600e8582600381106125d1576125d1615062565b602002015110156125f057602885826003811061251a5761251a615062565b602785826003811061260457612604615062565b60200201525b6001016124de565b856006036127b8575f5b60038110156127b657600285826003811061263957612639615062565b6020020151101561266257604585826003811061265857612658615062565b60200201526127ae565b600485826003811061267657612676615062565b6020020151101561269557604985826003811061265857612658615062565b60068582600381106126a9576126a9615062565b602002015110156126c857604785826003811061265857612658615062565b60088582600381106126dc576126dc615062565b602002015110156126fb57604d85826003811061265857612658615062565b600a85826003811061270f5761270f615062565b6020020151101561272e57604b85826003811061265857612658615062565b600c85826003811061274257612742615062565b6020020151101561276157605285826003811061265857612658615062565b600e85826003811061277557612775615062565b6020020151101561279457601b85826003811061265857612658615062565b601c8582600381106127a8576127a8615062565b60200201525b60010161261c565b505b505090919293565b6002600154036128125760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161061b565b6002600155565b600a546001600160a01b03166128715760405162461bcd60e51b815260206004820152601860248201527f54726561737572792061646472657373206e6f74207365740000000000000000604482015260640161061b565b600a546040515f916001600160a01b03169034908381818185875af1925050503d805f81146128bb576040519150601f19603f3d011682016040523d82523d5f602084013e6128c0565b606091505b505090508061082f5760405162461bcd60e51b815260206004820152602360248201527f4661696c656420746f20666f727761726420457468657220746f20747265617360448201526275727960e81b606482015260840161061b565b6001600160a01b0382165f90815260076020526040902054819061294190426150e2565b101561299d5760405162461bcd60e51b815260206004820152602560248201527f4e6f6e2d5265656e7472616e742c20736c6f7720646f776e205458206174746560448201526436b83a399760d91b606482015260840161061b565b506001600160a01b03165f908152600760205260409020429055565b5f546001600160a01b03163314610eae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612a69614de5565b60025460405163a52ed17560e01b81526001600160a01b0384811660048301525f92169063a52ed175906024016112c060405180830381865afa158015612ab2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad691906155c4565b60408051600580825260c082019092529192505f91906020820160a080368337505060408051600580825260c082019092529293505f9291506020820160a0803683370190505090505f5b6005811015612b995785838281518110612b3d57612b3d615062565b60200260200101906001600160a01b031690816001600160a01b031681525050838160968110612b6f57612b6f615062565b6020020151828281518110612b8657612b86615062565b6020908102919091010152600101612b21565b5060408051600580825260c082019092525f916020820160a08036833750506006546040516313849cfd60e21b81529293506001600160a01b031691634e1273f49150612bec9086908690600401615606565b5f60405180830381865afa158015612c06573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c2d919081019061568f565b9050612c37614e30565b612c3f614e30565b5f5b6005811015612cb657848181518110612c5c57612c5c615062565b6020026020010151838260058110612c7657612c76615062565b60200201528351849082908110612c8f57612c8f615062565b6020026020010151828260058110612ca957612ca9615062565b6020020152600101612c41565b50612cc289838361309c565b9998505050505050505050565b80515f90612ce190620f424090615109565b612cec90600561508a565b90506064600954826018612d00919061520a565b612d0a919061520a565b612d14919061524a565b60025460405163e3dcd0f560e01b81526001600160a01b0388811660048301526024820184905292935091169063e3dcd0f5906044015f604051808303815f87803b158015612d61575f5ffd5b505af1158015612d73573d5f5f3e3d5ffd5b5050506001600160a01b0386165f9081526007602052604090205460019150612d9c90426150e2565b1115612daa57506006612dae565b5060035b5f5b6003811015612e755781600a612dc683826151ff565b612dd0908861524a565b612dda9190615109565b1015612e6d576004546001600160a01b031663836a1040600188878560038110612e0657612e06615062565b60200201516040516001600160e01b031960e086901b16815260048101939093526001600160a01b03909116602483015260448201526064015f604051808303815f87803b158015612e56575f5ffd5b505af1158015612e68573d5f5f3e3d5ffd5b505050505b600101612db0565b505f424487604051602001612e8c9392919061509d565b60408051601f1981840301815291905280516020909101206006549091506001600160a01b031663836a1040600188612ec660a886615109565b612ed2906103e961508a565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b03909116602483015260448201526064015f604051808303815f87803b158015612f1d575f5ffd5b505af1158015612f2f573d5f5f3e3d5ffd5b5050505082600360068110612f4657612f46615062565b60200201516003036130945782515f90612f6490620f424090615109565b612f6f90600161508a565b9050612f7c81600361508a565b612f8782606461520a565b612f91919061524a565b9050612f9f6110008361524a565b612fab9061f15761508a565b9150612fb7828061508a565b915080612fc5606484615109565b101561309257612fd76110008361524a565b612fe39061f15761508a565b9150612fef828061508a565b9150612ffc602583615109565b9150601182101561301a5761301382610bb961508a565b9050613029565b6130268261177061508a565b90505b60065460405163020da84160e61b8152600160048201526001600160a01b038981166024830152604482018490529091169063836a1040906064015f604051808303815f87803b15801561307b575f5ffd5b505af115801561308d573d5f5f3e3d5ffd5b505050505b505b505050505050565b6130a4614de5565b50825f5b60058110156131c5576110008382600581106130c6576130c6615062565b6020020151106130ee5760058382600581106130e4576130e4615062565b60200201526131bd565b61020083826005811061310357613103615062565b6020020151106131215760048382600581106130e4576130e4615062565b604083826005811061313557613135615062565b6020020151106131535760038382600581106130e4576130e4615062565b600883826005811061316757613167615062565b6020020151106131855760028382600581106130e4576130e4615062565b600183826005811061319957613199615062565b6020020151106131bd5760018382600581106131b7576131b7615062565b60200201525b6001016130a8565b506131ce614e4e565b8351610bb9036131fe5782516131e590600661520a565b816060018181516131f6919061508a565b905250613445565b8351610bba0361322657825161321590600661520a565b816020018181516131f6919061508a565b8351610bbb0361323d5782516131e590600a61520a565b8351610bbc0361325457825161321590600a61520a565b8351610bbd0361330457825f5b602002015161327190601461520a565b8151829061328090839061508a565b905250825161329090600261520a565b816020018181516132a1919061508a565b90525082516132b190600261520a565b816040018181516132c2919061508a565b90525082516132d290600261520a565b816060018181516132e3919061508a565b90525082516132f390600161520a565b816080018181516131f6919061508a565b8351610bbe0361331b5782516132f390600461520a565b8351610bbf036133325782516132f390600361520a565b8351610bc0036133495782516131e590600861520a565b8351610bc10361336057825161321590600861520a565b8351610bc20361338857825161337790600861520a565b816040018181516131f6919061508a565b8351610bc3036133ae57825161339f90605061520a565b815182906131f690839061508a565b8351610bc4036133c557825161339f90603c61520a565b8351610bc5036133dc57825161337790600661520a565b8351610bc6036133f35782516132f390600561520a565b8351610bc70361340457825f613261565b8351610bc80361341b57825161337790600a61520a565b8351610bc90361344557825161343290606461520a565b8151829061344190839061508a565b9052505b60208401516117710361347957602083015161346290603261520a565b8151829061347190839061508a565b9052506136f9565b6020840151611772036134a757602083015161349690600361520a565b81602001818151613471919061508a565b6020840151611773036134d55760208301516134c490600361520a565b81604001818151613471919061508a565b6020840151611774036135035760208301516134f290600361520a565b81606001818151613471919061508a565b60208401516117750361353157602083015161352090600161520a565b81608001818151613471919061508a565b60208401516117760361354e57602083015161346290603c61520a565b60208401516117770361356b57602083015161349690600661520a565b6020840151611778036135885760208301516134c490600661520a565b6020840151611779036135a55760208301516134f290600661520a565b602084015161177a036135c257602083015161352090600361520a565b602084015161177b036135df57602083015161346290605061520a565b602084015161177c036135fc57602083015161349690600861520a565b602084015161177d036136195760208301516134c490600861520a565b602084015161177e036136365760208301516134f290600861520a565b602084015161177f0361365357602083015161352090600461520a565b60208401516117800361367057602083015161346290606461520a565b60208401516117810361368d57602083015161349690600a61520a565b6020840151611782036136aa5760208301516134c490600a61520a565b6020840151611783036136c75760208301516134f290600a61520a565b6020840151611784036136f95760208301516136e490600561520a565b816080018181516136f5919061508a565b9052505b60408401516103e903613731578260025b602002015161371a90603261520a565b8151829061372990839061508a565b905250613dd6565b60408401516103ea03613763578260025b602002015161375290600361520a565b81602001818151613729919061508a565b60408401516103eb03613795578260025b602002015161378490600361520a565b81604001818151613729919061508a565b60408401516103ec036137c7578260025b60200201516137b690600361520a565b81606001818151613729919061508a565b60408401516103ed036137f9578260025b60200201516137e890600161520a565b81608001818151613729919061508a565b60408401516103ee1480613812575060408401516103ef145b156138b1578260025b602002015161382b90600a61520a565b8151829061383a90839061508a565b905250604083015161384d90600161520a565b8160200181815161385e919061508a565b905250604083015161387190600161520a565b81604001818151613882919061508a565b905250604083015161389590600161520a565b816060018181516138a6919061508a565b9052508260026137d8565b60408401516103fe036138d2578260025b602002015161371a90603c61520a565b60408401516103ff036138f3578260025b602002015161375290600661520a565b604084015161040003613914578260025b602002015161378490600661520a565b604084015161040103613935578260025b60200201516137b690600661520a565b604084015161040203613956578260025b60200201516137e890600361520a565b6040840151610403148061396f57506040840151610404145b156139aa578260025b602002015161398890600c61520a565b8151829061399790839061508a565b905250604083015161384d90600261520a565b6040840151610413036139cb578260025b602002015161371a90605061520a565b6040840151610414036139ec578260025b602002015161375290600861520a565b604084015161041503613a0d578260025b602002015161378490600861520a565b604084015161041603613a2e578260025b60200201516137b690600861520a565b604084015161041703613a4f578260025b60200201516137e890600461520a565b60408401516104181480613a6857506040840151610419145b15613ac7578260025b6020020151613a8190601061520a565b81518290613a9090839061508a565b9052506040830151613aa390600261520a565b81602001818151613ab4919061508a565b905250604083015161387190600261520a565b604084015161042803613adc578260026139bb565b604084015161042903613af1578260026139dc565b604084015161042a03613b06578260026139fd565b604084015161042b03613b1b57826002613a1e565b604084015161042c03613b3057826002613a3f565b604084015161042d1480613b495750604084015161042e145b15613b5657826002613a71565b604084015161043d03613b6b5782600261370a565b604084015161043e03613b8057826002613742565b604084015161043f03613b9557826002613774565b604084015161044003613baa578260026137a6565b604084015161044103613bbf578260026137d8565b60408401516104421480613bd857506040840151610443145b15613be55782600261381b565b604084015161045203613bfa578260026138c2565b604084015161045303613c0f578260026138e3565b604084015161045403613c2457826002613904565b604084015161045503613c3957826002613925565b604084015161045603613c4e57826002613946565b60408401516104571480613c6757506040840151610458145b15613c7457826002613978565b604084015161046703613c9157604083015161371a90606461520a565b604084015161046803613cae57604083015161375290600a61520a565b604084015161046903613ccb57604083015161378490600a61520a565b604084015161046a03613ce85760408301516137b690600a61520a565b604084015161046b03613d055760408301516137e890600561520a565b604084015161046c1480613d1e5750604084015161046d145b15613dd6576040830151613d3390601461520a565b81518290613d4290839061508a565b9052506040830151613d5590600261520a565b81602001818151613d66919061508a565b9052506040830151613d7990600261520a565b81604001818151613d8a919061508a565b9052506040830151613d9d90600261520a565b81606001818151613dae919061508a565b9052506040830151613dc190600161520a565b81608001818151613dd2919061508a565b9052505b60608401516103f003613e0e578260035b6020020151613df790603261520a565b81518290613e0690839061508a565b9052506144b3565b60608401516103f103613e40578260035b6020020151613e2f90600361520a565b81602001818151613e06919061508a565b60608401516103f203613e72578260035b6020020151613e6190600361520a565b81604001818151613e06919061508a565b60608401516103f303613ea4578260035b6020020151613e9390600361520a565b81606001818151613e06919061508a565b60608401516103f403613ed6578260035b6020020151613ec590600161520a565b81608001818151613e06919061508a565b60608401516103f51480613eef575060608401516103f6145b15613f8e578260035b6020020151613f0890600a61520a565b81518290613f1790839061508a565b9052506060830151613f2a90600161520a565b81602001818151613f3b919061508a565b9052506060830151613f4e90600161520a565b81604001818151613f5f919061508a565b9052506060830151613f7290600161520a565b81606001818151613f83919061508a565b905250826003613eb5565b606084015161040503613faf578260035b6020020151613df790603c61520a565b606084015161040603613fd0578260035b6020020151613e2f90600661520a565b606084015161040703613ff1578260035b6020020151613e6190600661520a565b606084015161040803614012578260035b6020020151613e9390600661520a565b606084015161040903614033578260035b6020020151613ec590600361520a565b606084015161040a148061404c5750606084015161040b145b15614087578260035b602002015161406590600c61520a565b8151829061407490839061508a565b9052506060830151613f2a90600261520a565b606084015161041a036140a8578260035b6020020151613df790605061520a565b606084015161041b036140c9578260035b6020020151613e2f90600861520a565b606084015161041c036140ea578260035b6020020151613e6190600861520a565b606084015161041d0361410b578260035b6020020151613e9390600861520a565b606084015161041e0361412c578260035b6020020151613ec590600461520a565b606084015161041f148061414557506060840151610420145b156141a4578260035b602002015161415e90601061520a565b8151829061416d90839061508a565b905250606083015161418090600261520a565b81602001818151614191919061508a565b9052506060830151613f4e90600261520a565b606084015161042f036141b957826003614098565b6060840151610430036141ce578260036140b9565b6060840151610431036141e3578260036140da565b6060840151610432036141f8578260036140fb565b60608401516104330361420d5782600361411c565b6060840151610434148061422657506060840151610435145b156142335782600361414e565b60608401516104440361424857826003613de7565b60608401516104450361425d57826003613e1f565b60608401516104460361427257826003613e51565b60608401516104470361428757826003613e83565b60608401516104480361429c57826003613eb5565b606084015161044914806142b55750606084015161044a145b156142c257826003613ef8565b6060840151610459036142d757826003613f9f565b606084015161045a036142ec57826003613fc0565b606084015161045b0361430157826003613fe1565b606084015161045c0361431657826003614002565b606084015161045d0361432b57826003614023565b606084015161045e14806143445750606084015161045f145b1561435157826003614055565b606084015161046e0361436e576060830151613df790606461520a565b606084015161046f0361438b576060830151613e2f90600a61520a565b6060840151610470036143a8576060830151613e6190600a61520a565b6060840151610471036143c5576060830151613e9390600a61520a565b6060840151610472036143e2576060830151613ec590600561520a565b606084015161047314806143fb57506060840151610474145b156144b357606083015161441090601461520a565b8151829061441f90839061508a565b905250606083015161443290600261520a565b81602001818151614443919061508a565b905250606083015161445690600261520a565b81604001818151614467919061508a565b905250606083015161447a90600261520a565b8160600181815161448b919061508a565b905250606083015161449e90600161520a565b816080018181516144af919061508a565b9052505b60808401516103f7036144eb578260045b60200201516144d490603261520a565b815182906144e390839061508a565b905250614b90565b60808401516103f80361451d578260045b602002015161450c90600361520a565b816020018181516144e3919061508a565b60808401516103f90361454f578260045b602002015161453e90600361520a565b816040018181516144e3919061508a565b60808401516103fa03614581578260045b602002015161457090600361520a565b816060018181516144e3919061508a565b60808401516103fb036145b3578260045b60200201516145a290600161520a565b816080018181516144e3919061508a565b60808401516103fc14806145cc575060808401516103fd145b1561466b578260045b60200201516145e590600a61520a565b815182906145f490839061508a565b905250608083015161460790600161520a565b81602001818151614618919061508a565b905250608083015161462b90600161520a565b8160400181815161463c919061508a565b905250608083015161464f90600161520a565b81606001818151614660919061508a565b905250826004614592565b608084015161040c0361468c578260045b60200201516144d490603c61520a565b608084015161040d036146ad578260045b602002015161450c90600661520a565b608084015161040e036146ce578260045b602002015161453e90600661520a565b608084015161040f036146ef578260045b602002015161457090600661520a565b608084015161041003614710578260045b60200201516145a290600361520a565b6080840151610411148061472957506080840151610412145b15614764578260045b602002015161474290600c61520a565b8151829061475190839061508a565b905250608083015161460790600261520a565b608084015161042103614785578260045b60200201516144d490605061520a565b6080840151610422036147a6578260045b602002015161450c90600861520a565b6080840151610423036147c7578260045b602002015161453e90600861520a565b6080840151610424036147e8578260045b602002015161457090600861520a565b608084015161042503614809578260045b60200201516145a290600461520a565b6080840151610426148061482257506080840151610427145b15614881578260045b602002015161483b90601061520a565b8151829061484a90839061508a565b905250608083015161485d90600261520a565b8160200181815161486e919061508a565b905250608083015161462b90600261520a565b60808401516104360361489657826004614775565b6080840151610437036148ab57826004614796565b6080840151610438036148c0578260046147b7565b6080840151610439036148d5578260046147d8565b608084015161043a036148ea578260046147f9565b608084015161043b14806149035750608084015161043c145b156149105782600461482b565b608084015161044b03614925578260046144c4565b608084015161044c0361493a578260046144fc565b608084015161044d0361494f5782600461452e565b608084015161044e0361496457826004614560565b608084015161044f0361497957826004614592565b6080840151610450148061499257506080840151610451145b1561499f578260046145d5565b6080840151610460036149b45782600461467c565b6080840151610461036149c95782600461469d565b6080840151610462036149de578260046146be565b6080840151610463036149f3578260046146df565b608084015161046403614a0857826004614700565b60808401516104651480614a2157506080840151610466145b15614a2e57826004614732565b608084015161047503614a4b5760808301516144d490606461520a565b608084015161047603614a6857608083015161450c90600a61520a565b608084015161047703614a8557608083015161453e90600a61520a565b608084015161047803614aa257608083015161457090600a61520a565b608084015161047903614abf5760808301516145a290600561520a565b608084015161047a1480614ad85750608084015161047b145b15614b90576080830151614aed90601461520a565b81518290614afc90839061508a565b9052506080830151614b0f90600261520a565b81602001818151614b20919061508a565b9052506080830151614b3390600261520a565b81604001818151614b44919061508a565b9052506080830151614b5790600261520a565b81606001818151614b68919061508a565b9052506080830151614b7b90600161520a565b81608001818151614b8c919061508a565b9052505b5f5b6003811015614d45575f838260068110614bae57614bae615062565b6020020151511115614d3d578151868260068110614bce57614bce615062565b60200201518051614be090839061508a565b915081815250838260068110614bf857614bf8615062565b60200201515f0181815250508160200151868260068110614c1b57614c1b615062565b6020020151602001818151614c30919061508a565b915081815250838260068110614c4857614c48615062565b602002015160200181815250508160400151868260068110614c6c57614c6c615062565b6020020151604001818151614c81919061508a565b915081815250838260068110614c9957614c99615062565b6020020151604001526060820151868260068110614cb957614cb9615062565b6020020151606001818151614cce919061508a565b915081815250838260068110614ce657614ce6615062565b6020020151606001526080820151868260068110614d0657614d06615062565b6020020151608001818151614d1b919061508a565b915081815250838260068110614d3357614d33615062565b6020020151608001525b600101614b92565b50509392505050565b60405180606001604052806003906020820280368337509192915050565b6040518061010001604052805f151581526020015f81526020015f81526020015f81526020015f81526020015f8152602001614da6614e12565b8152602001614db3614d4e565b905290565b60405180606001604052806003905b614dcf614e4e565b815260200190600190039081614dc75790505090565b6040518060c001604052806006905b614dfc614e4e565b815260200190600190039081614df45790505090565b6040518060c001604052806006906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f60208284031215614e9b575f5ffd5b5035919050565b6001600160a01b038116811461082f575f5ffd5b5f60208284031215614ec6575f5ffd5b8135614ed181614ea2565b9392505050565b5f60608284031215614ee8575f5ffd5b82606083011115614ef7575f5ffd5b50919050565b805f5b6003811015614f1f578151845260209384019390910190600101614f00565b50505050565b60608101614f338284614efd565b92915050565b805f5b6006811015614f1f578151845260209384019390910190600101614f3c565b848152602081018490526101608101614f776040830185614efd565b614f8460a0830184614f39565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051610100810167ffffffffffffffff81118282101715614fc557614fc5614f8d565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614ff457614ff4614f8d565b604052919050565b5f60c0828403121561500c575f5ffd5b5f83601f84011261501b575f5ffd5b505f8061502860c0614fcb565b905080915060c084018581111561503d575f5ffd5b845b8181101561505757805184526020938401930161503f565b509095945050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115614f3357614f33615076565b928352602083019190915260601b6bffffffffffffffffffffffff1916604082015260540190565b6001600160a01b038316815260e08101614ed16020830184614f39565b81810381811115614f3357614f33615076565b634e487b7160e01b5f52601260045260245ffd5b5f82615117576151176150f5565b500690565b6001815b60018411156151575780850481111561513b5761513b615076565b600184161561514957908102905b60019390931c928002615120565b935093915050565b5f8261516d57506001614f33565b8161517957505f614f33565b816001811461518f5760028114615199576151b5565b6001915050614f33565b60ff8411156151aa576151aa615076565b50506001821b614f33565b5060208310610133831016604e8410600b84101617156151d8575081810a614f33565b6151e45f19848461511c565b805f19048211156151f7576151f7615076565b029392505050565b5f614ed1838361515f565b8082028115828204841417614f3357614f33615076565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b5f82615258576152586150f5565b500490565b5f6020828403121561526d575f5ffd5b8151614ed181614ea2565b6001600160a01b03831681526080810160608360208401379392505050565b5f61010082840312156152a8575f5ffd5b6152b0614fa1565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e0928301519281019290925250919050565b5f82601f830112615312575f5ffd5b5f61531d6060614fcb565b905080610300840185811115615331575f5ffd5b845b81811015615356576153458782615297565b835260209092019161010001615333565b509195945050505050565b5f5f6103608385031215615373575f5ffd5b61537d8484615303565b91505f8461031f85011261538f575f5ffd5b505f8061539c6060614fcb565b90508091506103608501868111156153b2575f5ffd5b61030086015b818110156153d05780518452602093840193016153b8565b5093969095509350505050565b5f61030082840312156153ee575f5ffd5b614ed18383615303565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b610620810181845f5b600681101561547a576154638383516153f8565b61010092909201916020919091019060010161544f565b505050826106008301529392505050565b5f610600828403121561549c575f5ffd5b5f83601f8401126154ab575f5ffd5b505f806154b860c0614fcb565b90508091506106008401858111156154ce575f5ffd5b845b81811015615057576154e28782615297565b8452602090930192610100016154d0565b805f5b6006811015614f1f5761550a8483516153f8565b6101009390930192602091909101906001016154f6565b6106008101614f3382846154f3565b5f5f5f5f60808587031215615543575f5ffd5b84516020860151604087015191955093508015158114615561575f5ffd5b6060959095015193969295505050565b87815260208101879052851515604082015260608101859052610740810161559c60808301866154f3565b6155aa610680830185614efd565b6155b86106e0830184614efd565b98975050505050505050565b5f6112c082840312156155d5575f5ffd5b5f83601f8401126155e4575f5ffd5b505f806112c06155f381614fcb565b925082915084018581111561503d575f5ffd5b604080825283519082018190525f9060208501906060840190835b818110156156485783516001600160a01b0316835260209384019390920191600101615621565b5050838103602080860191909152855180835291810192508501905f5b81811015615683578251845260209384019390920191600101615665565b50919695505050505050565b5f6020828403121561569f575f5ffd5b815167ffffffffffffffff8111156156b5575f5ffd5b8201601f810184136156c5575f5ffd5b805167ffffffffffffffff8111156156df576156df614f8d565b8060051b6156ef60208201614fcb565b9182526020818401810192908101908784111561570a575f5ffd5b6020850194505b8385101561573057845180835260209586019590935090910190615711565b97965050505050505056fea26469706673582212204a9a954f86c7b3f9abcd6854fe81405b9e70f155689d6857250eaa7a6acff8d464736f6c634300081c0033
Deployed Bytecode
0x6080604052600436106101af575f3560e01c80638da5cb5b116100e7578063d5ec19be11610087578063ec28f77f11610062578063ec28f77f14610496578063ef7245e6146104ab578063f2fde38b146104ca578063fa2d9f86146104e9575f5ffd5b8063d5ec19be14610441578063d6454a6114610462578063d861a72e14610477575f5ffd5b8063b9f54f2c116100c2578063b9f54f2c146103c5578063bf6be8ae146103e4578063c13f7f3514610403578063cdbb812a14610422575f5ffd5b80638da5cb5b1461037657806396a33dc514610392578063a988158b146103a6575f5ffd5b806357ba60e01161015257806369663b3a1161012d57806369663b3a146102f5578063715018a6146103245780637f51bb1f146103385780638b4a5d2114610357575f5ffd5b806357ba60e0146102945780635b8e0407146102b357806361d027b3146102d6575f5ffd5b806319858da31161018d57806319858da3146102235780631ef3dff01461024257806329de4ffc146102615780633ccfd60b14610280575f5ffd5b80630549b27e146101b357806311415248146101ef57806315c5c6c814610204575b5f5ffd5b3480156101be575f5ffd5b506002546101d2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6102026101fd366004614e8b565b61050d565b005b34801561020f575f5ffd5b5061020261021e366004614e8b565b610832565b34801561022e575f5ffd5b506005546101d2906001600160a01b031681565b34801561024d575f5ffd5b5061020261025c366004614eb6565b610c20565b34801561026c575f5ffd5b5061020261027b366004614eb6565b610c70565b34801561028b575f5ffd5b50610202610cc0565b34801561029f575f5ffd5b506102026102ae366004614eb6565b610d4d565b3480156102be575f5ffd5b506102c860095481565b6040519081526020016101e6565b3480156102e1575f5ffd5b50600a546101d2906001600160a01b031681565b348015610300575f5ffd5b50610309610d9d565b604080519384526020840192909252908201526060016101e6565b34801561032f575f5ffd5b50610202610e9d565b348015610343575f5ffd5b50610202610352366004614eb6565b610eb0565b348015610362575f5ffd5b50610202610371366004614eb6565b610f30565b348015610381575f5ffd5b505f546001600160a01b03166101d2565b34801561039d575f5ffd5b506101d2610f80565b3480156103b1575f5ffd5b506102026103c0366004614ed8565b61100a565b3480156103d0575f5ffd5b506102026103df366004614eb6565b611ca1565b3480156103ef575f5ffd5b506102026103fe366004614e8b565b611cf1565b34801561040e575f5ffd5b506004546101d2906001600160a01b031681565b34801561042d575f5ffd5b506006546101d2906001600160a01b031681565b34801561044c575f5ffd5b50610455611cfe565b6040516101e69190614f25565b34801561046d575f5ffd5b506102c8600c5481565b348015610482575f5ffd5b506003546101d2906001600160a01b031681565b3480156104a1575f5ffd5b506102c8600d5481565b3480156104b6575f5ffd5b506102026104c5366004614e8b565b611e83565b3480156104d5575f5ffd5b506102026104e4366004614eb6565b611e90565b3480156104f4575f5ffd5b506104fd611f06565b6040516101e69493929190614f5b565b6105156127c0565b5f61051e610f80565b6002546040516329d1c01360e21b81526001600160a01b0380841660048301529293505f929091169063a747004c9060240160c060405180830381865afa15801561056b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058f9190614ffc565b9050610599614d4e565b6105a1610d9d565b60408401526020830152815260808201516105bd90600161508a565b8411156106245760405162461bcd60e51b815260206004820152602a60248201527f596f752063616e277420736574206d6f7265207468616e206d6178206469666660448201526934b1bab63a3c9015989760b11b60648201526084015b60405180910390fd5b80515f036106d0578382526040516106449042904490869060200161509d565b60408051808303601f190181529181528151602092830120848301526001600160a01b0385165f908152600b90925281205460ff16151590036106a8576001600160a01b0383165f908152600b60205260409020805460ff191660011790556106c5565b6106bf426c0c9f2c9cd04674edea4000000061508a565b60408301525b5f606083015261078a565b6040810151341461072d5760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e74207061796d656e7420746f2072657365742053446044820152601760f91b606482015260840161061b565b8382526040516107459042904490869060200161509d565b60408051808303601f1901815291815281516020928301209184019190915282015161077e906c0c9f2c9cd04674edea4000000061508a565b60408301525f60608301525b6701634e90e798f0aa60a0830181815269014542ba12a337c00000916107b190839061508a565b905250600254604051635560f54d60e01b81526001600160a01b0390911690635560f54d906107e690869086906004016150c5565b5f604051808303815f87803b1580156107fd575f5ffd5b505af115801561080f573d5f5f3e3d5ffd5b505050505f34111561082357610823612819565b50505061082f60018055565b50565b61083a6127c0565b5f610843610f80565b905061085081600261291d565b600382106108a05760405162461bcd60e51b815260206004820152601a60248201527f696e76616c69642063686f6963652c206e65656473203c20332e000000000000604482015260640161061b565b6002546040516329d1c01360e21b81526001600160a01b0383811660048301525f92169063a747004c9060240160c060405180830381865afa1580156108e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090c9190614ffc565b602081015190915061096f5760405162461bcd60e51b815260206004820152602660248201527f576f6e20426f7373204c6576656c2c206f7220686176656e742077696e2061206044820152653632bb32b61760d11b606482015260840161061b565b60a081015169014542ba12a337c0000011156109dc5760405162461bcd60e51b815260206004820152602660248201527f596f75206e65656420746f20776f6e20612064756e67656f6e206c6576656c206044820152653334b939ba1760d11b606482015260840161061b565b4244836040516020016109f19392919061509d565b60408051808303601f190181529190528051602091820120908201525f610a16611cfe565b905069014542ba12a337c0000082600560200201818151610a3791906150e2565b9052505f818560038110610a4d57610a4d615062565b602002015190505f60048211610a9957506005610a6a8183615109565b610a76906127106151ff565b610a80908261520a565b60a085018051610a9190839061508a565b905250610bb3565b60058211610ae7575060015f5b6005811015610ae157610abb816127106151ff565b610ac5908361520a565b60a086018051610ad690839061508a565b905250600101610aa6565b50610bb3565b600a8211610b09575060086005610aff6001846150e2565b610a6a9190615109565b600b8211610b51575060035f5b6005811015610ae157610b2b816127106151ff565b610b35908361520a565b60a086018051610b4690839061508a565b905250600101610b16565b60108211610b695750600a6005610aff6002846150e2565b60118211610bb3575060055f5b6005811015610bb157610b8b816127106151ff565b610b95908361520a565b60a086018051610ba690839061508a565b905250600101610b76565b505b600254604051635560f54d60e01b81526001600160a01b0390911690635560f54d90610be590889088906004016150c5565b5f604051808303815f87803b158015610bfc575f5ffd5b505af1158015610c0e573d5f5f3e3d5ffd5b50505050505050505061082f60018055565b610c286129b9565b6001600160a01b038116610c4e5760405162461bcd60e51b815260040161061b90615221565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610c786129b9565b6001600160a01b038116610c9e5760405162461bcd60e51b815260040161061b90615221565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610cc86129b9565b5f4711610d175760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f0000000000000000604482015260640161061b565b600a546040516001600160a01b03909116904780156108fc02915f818181858888f1935050505015801561082f573d5f5f3e3d5ffd5b610d556129b9565b6001600160a01b038116610d7b5760405162461bcd60e51b815260040161061b90615221565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f610da9610f80565b6002546040516329d1c01360e21b81526001600160a01b0380841660048301529293505f929091169063a747004c9060240160c060405180830381865afa158015610df6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1a9190614ffc565b90505f64e8d4a510008260026020020151610e359190615109565b610e3f90426150e2565b9050600c548110610e55575f95505f9450610e95565b6040820151610e72906c0c9f2c9cd04674edea400000009061524a565b955080600c54610e8291906150e2565b945085600d54610e92919061520a565b93505b505050909192565b610ea56129b9565b610eae5f612a12565b565b610eb86129b9565b6001600160a01b038116610f0e5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420747265617375727920616464726573730000000000000000604482015260640161061b565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610f386129b9565b6001600160a01b038116610f5e5760405162461bcd60e51b815260040161061b90615221565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6002546040516302e6c26360e11b81523360048201525f9182916001600160a01b03909116906305cd84c690602401602060405180830381865afa158015610fca573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fee919061525d565b90506001600160a01b038116611005573391505090565b919050565b6110126127c0565b5f61101b610f80565b9050333b156110805760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792065787465726e616c6c79206f776e6564206163636f756e7473206160448201526a39329030b63637bbb2b21760a91b606482015260840161061b565b611088614d6c565b611090614db8565b611098614de5565b6110a0614d4e565b60025460405163a69a496f60e01b81526001600160a01b039091169063a69a496f906110d29088908a90600401615278565b61036060405180830381865afa1580156110ee573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111129190615361565b815151919450915015158061112b575060208301515115155b8061113a575060408301515115155b6111865760405162461bcd60e51b815260206004820152601d60248201527f3320656d70747920736c6f74732c2063616e6e6f7420626174746c652e000000604482015260640161061b565b8251825260208084015190830152604080840151908301526111a6611f06565b60c088015260e08701819052608087019190915260035460405163b3d33f1b60e01b81526001600160a01b03909116925063b3d33f1b916111e991600401614f25565b61030060405180830381865afa158015611205573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122991906153dd565b805151909350151580611240575060208301515115155b8061124f575060408301515115155b61129b5760405162461bcd60e51b815260206004820152601d60248201527f3320656d70747920736c6f74732c2063616e6e6f7420626174746c652e000000604482015260640161061b565b60c084015160a0015169014542ba12a337c000001180156112c3575060c08401516020015115155b80156112d8575060c084015160600151600310155b6113245760405162461bcd60e51b815260206004820152601e60248201527f63686f6f73652062756666206f7220576f6e20426f7373206c6576656c2e0000604482015260640161061b565b8251606083015260208301516080830152604083015160a08301526113498286612a61565b608085015160405163d74f3bd160e01b8152919350732e36696e2942b5e04ce81fbe926daaab0ee0d84e9163d74f3bd19161138991869190600401615446565b61060060405180830381865af41580156113a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c9919061548b565b60c0850151606081015190519193505f916113e890620f424090615109565b6113f2919061508a565b6113fd90600761508a565b9050600a81846003602002015151611415919061520a565b61141f919061524a565b606084015152608083015151600a9061143990839061520a565b611443919061524a565b60808401515260a083015151600a9061145d90839061520a565b611467919061524a565b60a084015152606083015160200151600a9061148490839061520a565b61148e919061524a565b606084015160209081019190915260808401510151600a906114b190839061520a565b6114bb919061524a565b608084015160209081019190915260a08401510151600a906114de90839061520a565b6114e8919061524a565b60a084015160200152606083015160400151600a9061150890839061520a565b611512919061524a565b836003602002015160400152600a81846004602002015160400151611537919061520a565b611541919061524a565b836004602002015160400152600a81846005602002015160400151611566919061520a565b611570919061524a565b60a0840151604001526060808401510151600a9061158f90839061520a565b611599919061524a565b836003602002015160600152600a818460046020020151606001516115be919061520a565b6115c8919061524a565b836004602002015160600152600a818460056020020151606001516115ed919061520a565b6115f7919061524a565b836005602002015160600152600a8184600360200201516080015161161c919061520a565b611626919061524a565b836003602002015160800152600a8184600460200201516080015161164b919061520a565b611655919061524a565b836004602002015160800152600a8184600560200201516080015161167a919061520a565b611684919061524a565b60a0808501516080019190915260c086015101516116a59061271090615109565b835151909150600a906116b990839061520a565b6116c3919061524a565b835152602083015151600a906116da90839061520a565b6116e4919061524a565b602084015152604083015151600a906116fe90839061520a565b611708919061524a565b60408401515260c085015160a001516127109061172690829061524a565b6117309190615109565b835160200151909150600a9061174790839061520a565b611751919061524a565b8351602090810191909152808401510151600a9061177090839061520a565b61177a919061524a565b60208085015181019190915260408401510151600a9061179b90839061520a565b6117a5919061524a565b60408401516020015260c085015160a00151612710906117ca906305f5e1009061524a565b6117d49190615109565b835160400151909150600a906117eb90839061520a565b6117f5919061524a565b835160409081019190915260208401510151600a9061181590839061520a565b61181f919061524a565b836001602002015160400152600a81846002602002015160400151611844919061520a565b61184e919061524a565b604080850151015260c085015160a00151612710906118739064e8d4a510009061524a565b61187d9190615109565b835160600151909150600a9061189490839061520a565b61189e919061524a565b835160609081019190915260208401510151600a906118be90839061520a565b6118c8919061524a565b836001602002015160600152600a818460026020020151606001516118ed919061520a565b6118f7919061524a565b60408401516060015260c085015160a001516127109061191f90662386f26fc100009061524a565b6119299190615109565b835160800151909150600a9061194090839061520a565b61194a919061524a565b835160809081019190915260208401510151600a9061196a90839061520a565b611974919061524a565b836001602002015160800152600a81846002602002015160800151611999919061520a565b6119a3919061524a565b836002602002015160800152600554604051639d392e5b60e01b81526001600160a01b0390911690639d392e5b906119df908690600401615521565b6080604051808303815f875af11580156119fb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1f9190615530565b6060890152151580885260208801919091526040870191909152600103611b9657611a588686606001518760e001518860c00151612ccf565b60c085015160600151600303611ab65760c085015160808101519051611a8290620f424090615109565b1115611aa55760c0850151608001805160019190611aa190839061508a565b9052505b60c08501515f602090910152611aed565b424487604051602001611acb9392919061509d565b60408051808303601f19018152919052805160209182012060c0870151909101525b60c0850151606001805160019190611b0690839061508a565b90525060c085015160a001805169014542ba12a337c000009190611b2b90839061508a565b90525060025460c0860151604051635560f54d60e01b81526001600160a01b0390921691635560f54d91611b64918a91906004016150c5565b5f604051808303815f87803b158015611b7b575f5ffd5b505af1158015611b8d573d5f5f3e3d5ffd5b50505050611c31565b60c08501518051620f42409190611bae90839061508a565b90525060c085015151624c4b4011611bcd5760c08501515f6020909101525b60025460c0860151604051635560f54d60e01b81526001600160a01b0390921691635560f54d91611c03918a91906004016150c5565b5f604051808303815f87803b158015611c1a575f5ffd5b505af1158015611c2c573d5f5f3e3d5ffd5b505050505b611c3c86600561291d565b7fed965831ff58bcf473e4bcfc1e0f5325bbb0c898866ca137ca39639ad40f3ca485604001518660200151875f01518860600151878a60e0015188604051611c8a9796959493929190615571565b60405180910390a150505050505061082f60018055565b611ca96129b9565b6001600160a01b038116611ccf5760405162461bcd60e51b815260040161061b90615221565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611cf96129b9565b600c55565b611d06614d4e565b5f611d0f610f80565b6002546040516329d1c01360e21b81526001600160a01b0380841660048301529293505f929091169063a747004c9060240160c060405180830381865afa158015611d5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d809190614ffc565b90505f8160016020020151611d9b9061ffff1661144761508a565b90505f611dac600583901c8361508a565b91505f5b6003811015611e7b57611dc4600a84615109565b91506007821015611e0657611ddd600584901c8461508a565b9250611dea600684615109565b868260038110611dfc57611dfc615062565b6020020152611e73565b6009821015611e3557611e1d600584901c8461508a565b9250611e2a600684615109565b611dea90600661508a565b611e43600584901c8461508a565b9250611e50600684615109565b611e5b90600c61508a565b868260038110611e6d57611e6d615062565b60200201525b600101611db0565b505050505090565b611e8b6129b9565b600d55565b611e986129b9565b6001600160a01b038116611efd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161061b565b61082f81612a12565b5f5f611f10614d4e565b611f18614e12565b5f611f21610f80565b6002546040516329d1c01360e21b81526001600160a01b0380841660048301529293505f929091169063a747004c9060240160c060405180830381865afa158015611f6e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f929190614ffc565b6020810151909350839150611fa990600790615109565b94506002816003602002015111611fec576020810151611fcd90600590811c615109565b611fd890600161508a565b955085600303611fe757600295505b611ff1565b600695505b602081015161200590601090600a1c615109565b8452602081015161201b90601090600f1c615109565b6020808601919091528101516120369060109060141c615109565b6040850152600186900361214d575f5b600381101561214757600385826003811061206357612063615062565b6020020151101561208c57602c85826003811061208257612082615062565b602002015261213f565b60068582600381106120a0576120a0615062565b602002015110156120bf57602b85826003811061208257612082615062565b60098582600381106120d3576120d3615062565b602002015110156120f257602c85826003811061208257612082615062565b600c85826003811061210657612106615062565b6020020151101561212557602b85826003811061208257612082615062565b602a85826003811061213957612139615062565b60200201525b600101612046565b506127b8565b85600203612258575f5b600381101561214757600385826003811061217457612174615062565b6020020151101561219d57602785826003811061219357612193615062565b6020020152612250565b60068582600381106121b1576121b1615062565b602002015110156121d057602885826003811061219357612193615062565b60098582600381106121e4576121e4615062565b6020020151101561220357602b85826003811061219357612193615062565b600c85826003811061221757612217615062565b6020020151101561223657602c85826003811061219357612193615062565b605185826003811061224a5761224a615062565b60200201525b600101612157565b85600303612396575f5b600381101561214757600385826003811061227f5761227f615062565b602002015110156122a857600a85826003811061229e5761229e615062565b602002015261238e565b60068582600381106122bc576122bc615062565b602002015110156122db57600b85826003811061229e5761229e615062565b60098582600381106122ef576122ef615062565b6020020151101561230e57600c85826003811061229e5761229e615062565b600c85826003811061232257612322615062565b6020020151101561234157604e85826003811061229e5761229e615062565b600e85826003811061235557612355615062565b6020020151101561237457602185826003811061229e5761229e615062565b602285826003811061238857612388615062565b60200201525b600101612262565b856004036124d4575f5b60038110156121475760038582600381106123bd576123bd615062565b602002015110156123e65760108582600381106123dc576123dc615062565b60200201526124cc565b60068582600381106123fa576123fa615062565b602002015110156124195760118582600381106123dc576123dc615062565b600985826003811061242d5761242d615062565b6020020151101561244c5760128582600381106123dc576123dc615062565b600c85826003811061246057612460615062565b6020020151101561247f5760118582600381106123dc576123dc615062565b600e85826003811061249357612493615062565b602002015110156124b25760128582600381106123dc576123dc615062565b604f8582600381106124c6576124c6615062565b60200201525b6001016123a0565b85600503612612575f5b60038110156121475760038582600381106124fb576124fb615062565b6020020151101561252457600485826003811061251a5761251a615062565b602002015261260a565b600685826003811061253857612538615062565b6020020151101561255757600585826003811061251a5761251a615062565b600985826003811061256b5761256b615062565b6020020151101561258a57600685826003811061251a5761251a615062565b600c85826003811061259e5761259e615062565b602002015110156125bd57602785826003811061251a5761251a615062565b600e8582600381106125d1576125d1615062565b602002015110156125f057602885826003811061251a5761251a615062565b602785826003811061260457612604615062565b60200201525b6001016124de565b856006036127b8575f5b60038110156127b657600285826003811061263957612639615062565b6020020151101561266257604585826003811061265857612658615062565b60200201526127ae565b600485826003811061267657612676615062565b6020020151101561269557604985826003811061265857612658615062565b60068582600381106126a9576126a9615062565b602002015110156126c857604785826003811061265857612658615062565b60088582600381106126dc576126dc615062565b602002015110156126fb57604d85826003811061265857612658615062565b600a85826003811061270f5761270f615062565b6020020151101561272e57604b85826003811061265857612658615062565b600c85826003811061274257612742615062565b6020020151101561276157605285826003811061265857612658615062565b600e85826003811061277557612775615062565b6020020151101561279457601b85826003811061265857612658615062565b601c8582600381106127a8576127a8615062565b60200201525b60010161261c565b505b505090919293565b6002600154036128125760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161061b565b6002600155565b600a546001600160a01b03166128715760405162461bcd60e51b815260206004820152601860248201527f54726561737572792061646472657373206e6f74207365740000000000000000604482015260640161061b565b600a546040515f916001600160a01b03169034908381818185875af1925050503d805f81146128bb576040519150601f19603f3d011682016040523d82523d5f602084013e6128c0565b606091505b505090508061082f5760405162461bcd60e51b815260206004820152602360248201527f4661696c656420746f20666f727761726420457468657220746f20747265617360448201526275727960e81b606482015260840161061b565b6001600160a01b0382165f90815260076020526040902054819061294190426150e2565b101561299d5760405162461bcd60e51b815260206004820152602560248201527f4e6f6e2d5265656e7472616e742c20736c6f7720646f776e205458206174746560448201526436b83a399760d91b606482015260840161061b565b506001600160a01b03165f908152600760205260409020429055565b5f546001600160a01b03163314610eae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612a69614de5565b60025460405163a52ed17560e01b81526001600160a01b0384811660048301525f92169063a52ed175906024016112c060405180830381865afa158015612ab2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad691906155c4565b60408051600580825260c082019092529192505f91906020820160a080368337505060408051600580825260c082019092529293505f9291506020820160a0803683370190505090505f5b6005811015612b995785838281518110612b3d57612b3d615062565b60200260200101906001600160a01b031690816001600160a01b031681525050838160968110612b6f57612b6f615062565b6020020151828281518110612b8657612b86615062565b6020908102919091010152600101612b21565b5060408051600580825260c082019092525f916020820160a08036833750506006546040516313849cfd60e21b81529293506001600160a01b031691634e1273f49150612bec9086908690600401615606565b5f60405180830381865afa158015612c06573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c2d919081019061568f565b9050612c37614e30565b612c3f614e30565b5f5b6005811015612cb657848181518110612c5c57612c5c615062565b6020026020010151838260058110612c7657612c76615062565b60200201528351849082908110612c8f57612c8f615062565b6020026020010151828260058110612ca957612ca9615062565b6020020152600101612c41565b50612cc289838361309c565b9998505050505050505050565b80515f90612ce190620f424090615109565b612cec90600561508a565b90506064600954826018612d00919061520a565b612d0a919061520a565b612d14919061524a565b60025460405163e3dcd0f560e01b81526001600160a01b0388811660048301526024820184905292935091169063e3dcd0f5906044015f604051808303815f87803b158015612d61575f5ffd5b505af1158015612d73573d5f5f3e3d5ffd5b5050506001600160a01b0386165f9081526007602052604090205460019150612d9c90426150e2565b1115612daa57506006612dae565b5060035b5f5b6003811015612e755781600a612dc683826151ff565b612dd0908861524a565b612dda9190615109565b1015612e6d576004546001600160a01b031663836a1040600188878560038110612e0657612e06615062565b60200201516040516001600160e01b031960e086901b16815260048101939093526001600160a01b03909116602483015260448201526064015f604051808303815f87803b158015612e56575f5ffd5b505af1158015612e68573d5f5f3e3d5ffd5b505050505b600101612db0565b505f424487604051602001612e8c9392919061509d565b60408051601f1981840301815291905280516020909101206006549091506001600160a01b031663836a1040600188612ec660a886615109565b612ed2906103e961508a565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b03909116602483015260448201526064015f604051808303815f87803b158015612f1d575f5ffd5b505af1158015612f2f573d5f5f3e3d5ffd5b5050505082600360068110612f4657612f46615062565b60200201516003036130945782515f90612f6490620f424090615109565b612f6f90600161508a565b9050612f7c81600361508a565b612f8782606461520a565b612f91919061524a565b9050612f9f6110008361524a565b612fab9061f15761508a565b9150612fb7828061508a565b915080612fc5606484615109565b101561309257612fd76110008361524a565b612fe39061f15761508a565b9150612fef828061508a565b9150612ffc602583615109565b9150601182101561301a5761301382610bb961508a565b9050613029565b6130268261177061508a565b90505b60065460405163020da84160e61b8152600160048201526001600160a01b038981166024830152604482018490529091169063836a1040906064015f604051808303815f87803b15801561307b575f5ffd5b505af115801561308d573d5f5f3e3d5ffd5b505050505b505b505050505050565b6130a4614de5565b50825f5b60058110156131c5576110008382600581106130c6576130c6615062565b6020020151106130ee5760058382600581106130e4576130e4615062565b60200201526131bd565b61020083826005811061310357613103615062565b6020020151106131215760048382600581106130e4576130e4615062565b604083826005811061313557613135615062565b6020020151106131535760038382600581106130e4576130e4615062565b600883826005811061316757613167615062565b6020020151106131855760028382600581106130e4576130e4615062565b600183826005811061319957613199615062565b6020020151106131bd5760018382600581106131b7576131b7615062565b60200201525b6001016130a8565b506131ce614e4e565b8351610bb9036131fe5782516131e590600661520a565b816060018181516131f6919061508a565b905250613445565b8351610bba0361322657825161321590600661520a565b816020018181516131f6919061508a565b8351610bbb0361323d5782516131e590600a61520a565b8351610bbc0361325457825161321590600a61520a565b8351610bbd0361330457825f5b602002015161327190601461520a565b8151829061328090839061508a565b905250825161329090600261520a565b816020018181516132a1919061508a565b90525082516132b190600261520a565b816040018181516132c2919061508a565b90525082516132d290600261520a565b816060018181516132e3919061508a565b90525082516132f390600161520a565b816080018181516131f6919061508a565b8351610bbe0361331b5782516132f390600461520a565b8351610bbf036133325782516132f390600361520a565b8351610bc0036133495782516131e590600861520a565b8351610bc10361336057825161321590600861520a565b8351610bc20361338857825161337790600861520a565b816040018181516131f6919061508a565b8351610bc3036133ae57825161339f90605061520a565b815182906131f690839061508a565b8351610bc4036133c557825161339f90603c61520a565b8351610bc5036133dc57825161337790600661520a565b8351610bc6036133f35782516132f390600561520a565b8351610bc70361340457825f613261565b8351610bc80361341b57825161337790600a61520a565b8351610bc90361344557825161343290606461520a565b8151829061344190839061508a565b9052505b60208401516117710361347957602083015161346290603261520a565b8151829061347190839061508a565b9052506136f9565b6020840151611772036134a757602083015161349690600361520a565b81602001818151613471919061508a565b6020840151611773036134d55760208301516134c490600361520a565b81604001818151613471919061508a565b6020840151611774036135035760208301516134f290600361520a565b81606001818151613471919061508a565b60208401516117750361353157602083015161352090600161520a565b81608001818151613471919061508a565b60208401516117760361354e57602083015161346290603c61520a565b60208401516117770361356b57602083015161349690600661520a565b6020840151611778036135885760208301516134c490600661520a565b6020840151611779036135a55760208301516134f290600661520a565b602084015161177a036135c257602083015161352090600361520a565b602084015161177b036135df57602083015161346290605061520a565b602084015161177c036135fc57602083015161349690600861520a565b602084015161177d036136195760208301516134c490600861520a565b602084015161177e036136365760208301516134f290600861520a565b602084015161177f0361365357602083015161352090600461520a565b60208401516117800361367057602083015161346290606461520a565b60208401516117810361368d57602083015161349690600a61520a565b6020840151611782036136aa5760208301516134c490600a61520a565b6020840151611783036136c75760208301516134f290600a61520a565b6020840151611784036136f95760208301516136e490600561520a565b816080018181516136f5919061508a565b9052505b60408401516103e903613731578260025b602002015161371a90603261520a565b8151829061372990839061508a565b905250613dd6565b60408401516103ea03613763578260025b602002015161375290600361520a565b81602001818151613729919061508a565b60408401516103eb03613795578260025b602002015161378490600361520a565b81604001818151613729919061508a565b60408401516103ec036137c7578260025b60200201516137b690600361520a565b81606001818151613729919061508a565b60408401516103ed036137f9578260025b60200201516137e890600161520a565b81608001818151613729919061508a565b60408401516103ee1480613812575060408401516103ef145b156138b1578260025b602002015161382b90600a61520a565b8151829061383a90839061508a565b905250604083015161384d90600161520a565b8160200181815161385e919061508a565b905250604083015161387190600161520a565b81604001818151613882919061508a565b905250604083015161389590600161520a565b816060018181516138a6919061508a565b9052508260026137d8565b60408401516103fe036138d2578260025b602002015161371a90603c61520a565b60408401516103ff036138f3578260025b602002015161375290600661520a565b604084015161040003613914578260025b602002015161378490600661520a565b604084015161040103613935578260025b60200201516137b690600661520a565b604084015161040203613956578260025b60200201516137e890600361520a565b6040840151610403148061396f57506040840151610404145b156139aa578260025b602002015161398890600c61520a565b8151829061399790839061508a565b905250604083015161384d90600261520a565b6040840151610413036139cb578260025b602002015161371a90605061520a565b6040840151610414036139ec578260025b602002015161375290600861520a565b604084015161041503613a0d578260025b602002015161378490600861520a565b604084015161041603613a2e578260025b60200201516137b690600861520a565b604084015161041703613a4f578260025b60200201516137e890600461520a565b60408401516104181480613a6857506040840151610419145b15613ac7578260025b6020020151613a8190601061520a565b81518290613a9090839061508a565b9052506040830151613aa390600261520a565b81602001818151613ab4919061508a565b905250604083015161387190600261520a565b604084015161042803613adc578260026139bb565b604084015161042903613af1578260026139dc565b604084015161042a03613b06578260026139fd565b604084015161042b03613b1b57826002613a1e565b604084015161042c03613b3057826002613a3f565b604084015161042d1480613b495750604084015161042e145b15613b5657826002613a71565b604084015161043d03613b6b5782600261370a565b604084015161043e03613b8057826002613742565b604084015161043f03613b9557826002613774565b604084015161044003613baa578260026137a6565b604084015161044103613bbf578260026137d8565b60408401516104421480613bd857506040840151610443145b15613be55782600261381b565b604084015161045203613bfa578260026138c2565b604084015161045303613c0f578260026138e3565b604084015161045403613c2457826002613904565b604084015161045503613c3957826002613925565b604084015161045603613c4e57826002613946565b60408401516104571480613c6757506040840151610458145b15613c7457826002613978565b604084015161046703613c9157604083015161371a90606461520a565b604084015161046803613cae57604083015161375290600a61520a565b604084015161046903613ccb57604083015161378490600a61520a565b604084015161046a03613ce85760408301516137b690600a61520a565b604084015161046b03613d055760408301516137e890600561520a565b604084015161046c1480613d1e5750604084015161046d145b15613dd6576040830151613d3390601461520a565b81518290613d4290839061508a565b9052506040830151613d5590600261520a565b81602001818151613d66919061508a565b9052506040830151613d7990600261520a565b81604001818151613d8a919061508a565b9052506040830151613d9d90600261520a565b81606001818151613dae919061508a565b9052506040830151613dc190600161520a565b81608001818151613dd2919061508a565b9052505b60608401516103f003613e0e578260035b6020020151613df790603261520a565b81518290613e0690839061508a565b9052506144b3565b60608401516103f103613e40578260035b6020020151613e2f90600361520a565b81602001818151613e06919061508a565b60608401516103f203613e72578260035b6020020151613e6190600361520a565b81604001818151613e06919061508a565b60608401516103f303613ea4578260035b6020020151613e9390600361520a565b81606001818151613e06919061508a565b60608401516103f403613ed6578260035b6020020151613ec590600161520a565b81608001818151613e06919061508a565b60608401516103f51480613eef575060608401516103f6145b15613f8e578260035b6020020151613f0890600a61520a565b81518290613f1790839061508a565b9052506060830151613f2a90600161520a565b81602001818151613f3b919061508a565b9052506060830151613f4e90600161520a565b81604001818151613f5f919061508a565b9052506060830151613f7290600161520a565b81606001818151613f83919061508a565b905250826003613eb5565b606084015161040503613faf578260035b6020020151613df790603c61520a565b606084015161040603613fd0578260035b6020020151613e2f90600661520a565b606084015161040703613ff1578260035b6020020151613e6190600661520a565b606084015161040803614012578260035b6020020151613e9390600661520a565b606084015161040903614033578260035b6020020151613ec590600361520a565b606084015161040a148061404c5750606084015161040b145b15614087578260035b602002015161406590600c61520a565b8151829061407490839061508a565b9052506060830151613f2a90600261520a565b606084015161041a036140a8578260035b6020020151613df790605061520a565b606084015161041b036140c9578260035b6020020151613e2f90600861520a565b606084015161041c036140ea578260035b6020020151613e6190600861520a565b606084015161041d0361410b578260035b6020020151613e9390600861520a565b606084015161041e0361412c578260035b6020020151613ec590600461520a565b606084015161041f148061414557506060840151610420145b156141a4578260035b602002015161415e90601061520a565b8151829061416d90839061508a565b905250606083015161418090600261520a565b81602001818151614191919061508a565b9052506060830151613f4e90600261520a565b606084015161042f036141b957826003614098565b6060840151610430036141ce578260036140b9565b6060840151610431036141e3578260036140da565b6060840151610432036141f8578260036140fb565b60608401516104330361420d5782600361411c565b6060840151610434148061422657506060840151610435145b156142335782600361414e565b60608401516104440361424857826003613de7565b60608401516104450361425d57826003613e1f565b60608401516104460361427257826003613e51565b60608401516104470361428757826003613e83565b60608401516104480361429c57826003613eb5565b606084015161044914806142b55750606084015161044a145b156142c257826003613ef8565b6060840151610459036142d757826003613f9f565b606084015161045a036142ec57826003613fc0565b606084015161045b0361430157826003613fe1565b606084015161045c0361431657826003614002565b606084015161045d0361432b57826003614023565b606084015161045e14806143445750606084015161045f145b1561435157826003614055565b606084015161046e0361436e576060830151613df790606461520a565b606084015161046f0361438b576060830151613e2f90600a61520a565b6060840151610470036143a8576060830151613e6190600a61520a565b6060840151610471036143c5576060830151613e9390600a61520a565b6060840151610472036143e2576060830151613ec590600561520a565b606084015161047314806143fb57506060840151610474145b156144b357606083015161441090601461520a565b8151829061441f90839061508a565b905250606083015161443290600261520a565b81602001818151614443919061508a565b905250606083015161445690600261520a565b81604001818151614467919061508a565b905250606083015161447a90600261520a565b8160600181815161448b919061508a565b905250606083015161449e90600161520a565b816080018181516144af919061508a565b9052505b60808401516103f7036144eb578260045b60200201516144d490603261520a565b815182906144e390839061508a565b905250614b90565b60808401516103f80361451d578260045b602002015161450c90600361520a565b816020018181516144e3919061508a565b60808401516103f90361454f578260045b602002015161453e90600361520a565b816040018181516144e3919061508a565b60808401516103fa03614581578260045b602002015161457090600361520a565b816060018181516144e3919061508a565b60808401516103fb036145b3578260045b60200201516145a290600161520a565b816080018181516144e3919061508a565b60808401516103fc14806145cc575060808401516103fd145b1561466b578260045b60200201516145e590600a61520a565b815182906145f490839061508a565b905250608083015161460790600161520a565b81602001818151614618919061508a565b905250608083015161462b90600161520a565b8160400181815161463c919061508a565b905250608083015161464f90600161520a565b81606001818151614660919061508a565b905250826004614592565b608084015161040c0361468c578260045b60200201516144d490603c61520a565b608084015161040d036146ad578260045b602002015161450c90600661520a565b608084015161040e036146ce578260045b602002015161453e90600661520a565b608084015161040f036146ef578260045b602002015161457090600661520a565b608084015161041003614710578260045b60200201516145a290600361520a565b6080840151610411148061472957506080840151610412145b15614764578260045b602002015161474290600c61520a565b8151829061475190839061508a565b905250608083015161460790600261520a565b608084015161042103614785578260045b60200201516144d490605061520a565b6080840151610422036147a6578260045b602002015161450c90600861520a565b6080840151610423036147c7578260045b602002015161453e90600861520a565b6080840151610424036147e8578260045b602002015161457090600861520a565b608084015161042503614809578260045b60200201516145a290600461520a565b6080840151610426148061482257506080840151610427145b15614881578260045b602002015161483b90601061520a565b8151829061484a90839061508a565b905250608083015161485d90600261520a565b8160200181815161486e919061508a565b905250608083015161462b90600261520a565b60808401516104360361489657826004614775565b6080840151610437036148ab57826004614796565b6080840151610438036148c0578260046147b7565b6080840151610439036148d5578260046147d8565b608084015161043a036148ea578260046147f9565b608084015161043b14806149035750608084015161043c145b156149105782600461482b565b608084015161044b03614925578260046144c4565b608084015161044c0361493a578260046144fc565b608084015161044d0361494f5782600461452e565b608084015161044e0361496457826004614560565b608084015161044f0361497957826004614592565b6080840151610450148061499257506080840151610451145b1561499f578260046145d5565b6080840151610460036149b45782600461467c565b6080840151610461036149c95782600461469d565b6080840151610462036149de578260046146be565b6080840151610463036149f3578260046146df565b608084015161046403614a0857826004614700565b60808401516104651480614a2157506080840151610466145b15614a2e57826004614732565b608084015161047503614a4b5760808301516144d490606461520a565b608084015161047603614a6857608083015161450c90600a61520a565b608084015161047703614a8557608083015161453e90600a61520a565b608084015161047803614aa257608083015161457090600a61520a565b608084015161047903614abf5760808301516145a290600561520a565b608084015161047a1480614ad85750608084015161047b145b15614b90576080830151614aed90601461520a565b81518290614afc90839061508a565b9052506080830151614b0f90600261520a565b81602001818151614b20919061508a565b9052506080830151614b3390600261520a565b81604001818151614b44919061508a565b9052506080830151614b5790600261520a565b81606001818151614b68919061508a565b9052506080830151614b7b90600161520a565b81608001818151614b8c919061508a565b9052505b5f5b6003811015614d45575f838260068110614bae57614bae615062565b6020020151511115614d3d578151868260068110614bce57614bce615062565b60200201518051614be090839061508a565b915081815250838260068110614bf857614bf8615062565b60200201515f0181815250508160200151868260068110614c1b57614c1b615062565b6020020151602001818151614c30919061508a565b915081815250838260068110614c4857614c48615062565b602002015160200181815250508160400151868260068110614c6c57614c6c615062565b6020020151604001818151614c81919061508a565b915081815250838260068110614c9957614c99615062565b6020020151604001526060820151868260068110614cb957614cb9615062565b6020020151606001818151614cce919061508a565b915081815250838260068110614ce657614ce6615062565b6020020151606001526080820151868260068110614d0657614d06615062565b6020020151608001818151614d1b919061508a565b915081815250838260068110614d3357614d33615062565b6020020151608001525b600101614b92565b50509392505050565b60405180606001604052806003906020820280368337509192915050565b6040518061010001604052805f151581526020015f81526020015f81526020015f81526020015f81526020015f8152602001614da6614e12565b8152602001614db3614d4e565b905290565b60405180606001604052806003905b614dcf614e4e565b815260200190600190039081614dc75790505090565b6040518060c001604052806006905b614dfc614e4e565b815260200190600190039081614df45790505090565b6040518060c001604052806006906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f60208284031215614e9b575f5ffd5b5035919050565b6001600160a01b038116811461082f575f5ffd5b5f60208284031215614ec6575f5ffd5b8135614ed181614ea2565b9392505050565b5f60608284031215614ee8575f5ffd5b82606083011115614ef7575f5ffd5b50919050565b805f5b6003811015614f1f578151845260209384019390910190600101614f00565b50505050565b60608101614f338284614efd565b92915050565b805f5b6006811015614f1f578151845260209384019390910190600101614f3c565b848152602081018490526101608101614f776040830185614efd565b614f8460a0830184614f39565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051610100810167ffffffffffffffff81118282101715614fc557614fc5614f8d565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614ff457614ff4614f8d565b604052919050565b5f60c0828403121561500c575f5ffd5b5f83601f84011261501b575f5ffd5b505f8061502860c0614fcb565b905080915060c084018581111561503d575f5ffd5b845b8181101561505757805184526020938401930161503f565b509095945050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115614f3357614f33615076565b928352602083019190915260601b6bffffffffffffffffffffffff1916604082015260540190565b6001600160a01b038316815260e08101614ed16020830184614f39565b81810381811115614f3357614f33615076565b634e487b7160e01b5f52601260045260245ffd5b5f82615117576151176150f5565b500690565b6001815b60018411156151575780850481111561513b5761513b615076565b600184161561514957908102905b60019390931c928002615120565b935093915050565b5f8261516d57506001614f33565b8161517957505f614f33565b816001811461518f5760028114615199576151b5565b6001915050614f33565b60ff8411156151aa576151aa615076565b50506001821b614f33565b5060208310610133831016604e8410600b84101617156151d8575081810a614f33565b6151e45f19848461511c565b805f19048211156151f7576151f7615076565b029392505050565b5f614ed1838361515f565b8082028115828204841417614f3357614f33615076565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b5f82615258576152586150f5565b500490565b5f6020828403121561526d575f5ffd5b8151614ed181614ea2565b6001600160a01b03831681526080810160608360208401379392505050565b5f61010082840312156152a8575f5ffd5b6152b0614fa1565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e0928301519281019290925250919050565b5f82601f830112615312575f5ffd5b5f61531d6060614fcb565b905080610300840185811115615331575f5ffd5b845b81811015615356576153458782615297565b835260209092019161010001615333565b509195945050505050565b5f5f6103608385031215615373575f5ffd5b61537d8484615303565b91505f8461031f85011261538f575f5ffd5b505f8061539c6060614fcb565b90508091506103608501868111156153b2575f5ffd5b61030086015b818110156153d05780518452602093840193016153b8565b5093969095509350505050565b5f61030082840312156153ee575f5ffd5b614ed18383615303565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b610620810181845f5b600681101561547a576154638383516153f8565b61010092909201916020919091019060010161544f565b505050826106008301529392505050565b5f610600828403121561549c575f5ffd5b5f83601f8401126154ab575f5ffd5b505f806154b860c0614fcb565b90508091506106008401858111156154ce575f5ffd5b845b81811015615057576154e28782615297565b8452602090930192610100016154d0565b805f5b6006811015614f1f5761550a8483516153f8565b6101009390930192602091909101906001016154f6565b6106008101614f3382846154f3565b5f5f5f5f60808587031215615543575f5ffd5b84516020860151604087015191955093508015158114615561575f5ffd5b6060959095015193969295505050565b87815260208101879052851515604082015260608101859052610740810161559c60808301866154f3565b6155aa610680830185614efd565b6155b86106e0830184614efd565b98975050505050505050565b5f6112c082840312156155d5575f5ffd5b5f83601f8401126155e4575f5ffd5b505f806112c06155f381614fcb565b925082915084018581111561503d575f5ffd5b604080825283519082018190525f9060208501906060840190835b818110156156485783516001600160a01b0316835260209384019390920191600101615621565b5050838103602080860191909152855180835291810192508501905f5b81811015615683578251845260209384019390920191600101615665565b50919695505050505050565b5f6020828403121561569f575f5ffd5b815167ffffffffffffffff8111156156b5575f5ffd5b8201601f810184136156c5575f5ffd5b805167ffffffffffffffff8111156156df576156df614f8d565b8060051b6156ef60208201614fcb565b9182526020818401810192908101908784111561570a575f5ffd5b6020850194505b8385101561573057845180835260209586019590935090910190615711565b97965050505050505056fea26469706673582212204a9a954f86c7b3f9abcd6854fe81405b9e70f155689d6857250eaa7a6acff8d464736f6c634300081c0033
Deployed Bytecode Sourcemap
91255:28674:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;91325:37;;;;;;;;;;-1:-1:-1;91325:37:0;;;;-1:-1:-1;;;;;91325:37:0;;;;;;-1:-1:-1;;;;;202:32:1;;;184:51;;172:2;157:18;91325:37:0;;;;;;;;116595:2072;;;;;;:::i;:::-;;:::i;:::-;;104442:2553;;;;;;;;;;-1:-1:-1;104442:2553:0;;;;;:::i;:::-;;:::i;91482:22::-;;;;;;;;;;-1:-1:-1;91482:22:0;;;;-1:-1:-1;;;;;91482:22:0;;;94523:226;;;;;;;;;;-1:-1:-1;94523:226:0;;;;;:::i;:::-;;:::i;93810:233::-;;;;;;;;;;-1:-1:-1;93810:233:0;;;;;:::i;:::-;;:::i;94755:255::-;;;;;;;;;;;;;:::i;94049:211::-;;;;;;;;;;-1:-1:-1;94049:211:0;;;;;:::i;:::-;;:::i;92577:34::-;;;;;;;;;;;;;;;;;;;1191:25:1;;;1179:2;1164:18;92577:34:0;1045:177:1;93286:36:0;;;;;;;;;;-1:-1:-1;93286:36:0;;;;-1:-1:-1;;;;;93286:36:0;;;119193:719;;;;;;;;;;;;;:::i;:::-;;;;1637:25:1;;;1693:2;1678:18;;1671:34;;;;1721:18;;;1714:34;1625:2;1610:18;119193:719:0;1435:319:1;2788:103:0;;;;;;;;;;;;;:::i;93341:181::-;;;;;;;;;;-1:-1:-1;93341:181:0;;;;;:::i;:::-;;:::i;94266:251::-;;;;;;;;;;-1:-1:-1;94266:251:0;;;;;:::i;:::-;;:::i;2140:87::-;;;;;;;;;;-1:-1:-1;2186:7:0;2213:6;-1:-1:-1;;;;;2213:6:0;2140:87;;95595:429;;;;;;;;;;;;;:::i;97497:6937::-;;;;;;;;;;-1:-1:-1;97497:6937:0;;;;;:::i;:::-;;:::i;93564:234::-;;;;;;;;;;-1:-1:-1;93564:234:0;;;;;:::i;:::-;;:::i;118957:112::-;;;;;;;;;;-1:-1:-1;118957:112:0;;;;;:::i;:::-;;:::i;91421:54::-;;;;;;;;;;-1:-1:-1;91421:54:0;;;;-1:-1:-1;;;;;91421:54:0;;;91511:38;;;;;;;;;;-1:-1:-1;91511:38:0;;;;-1:-1:-1;;;;;91511:38:0;;;107001:876;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;118677:37::-;;;;;;;;;;;;;;;;91375:39;;;;;;;;;;-1:-1:-1;91375:39:0;;;;-1:-1:-1;;;;;91375:39:0;;;118818:36;;;;;;;;;;;;;;;;119079:106;;;;;;;;;;-1:-1:-1;119079:106:0;;;;;:::i;:::-;;:::i;3046:201::-;;;;;;;;;;-1:-1:-1;3046:201:0;;;;;:::i;:::-;;:::i;110654:5830::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;116595:2072::-;71166:21;:19;:21::i;:::-;116683::::1;116707:25;:23;:25::i;:::-;116780:15;::::0;:44:::1;::::0;-1:-1:-1;;;116780:44:0;;-1:-1:-1;;;;;202:32:1;;;116780:44:0::1;::::0;::::1;184:51:1::0;116683:49:0;;-1:-1:-1;116751:26:0::1;::::0;116780:15;;::::1;::::0;:29:::1;::::0;157:18:1;;116780:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;116751:73;;116835:21;;:::i;:::-;116901:22;:20;:22::i;:::-;116888:9:::0;;::::1;116867:56:::0;116868:9:::1;116878::::0;::::1;116867:56:::0;;;117033:14;;::::1;::::0;:16:::1;::::0;116885:1:::1;117033:16;:::i;:::-;117019:10;:30;;117009:86;;;::::0;-1:-1:-1;;;117009:86:0;;6189:2:1;117009:86:0::1;::::0;::::1;6171:21:1::0;6228:2;6208:18;;;6201:30;6267:34;6247:18;;;6240:62;-1:-1:-1;;;6318:18:1;;;6311:40;6368:19;;117009:86:0::1;;;;;;;;;117110:9:::0;;117117:1:::1;117110:14:::0;117106:1121:::1;;117253:27:::0;;;117342:65:::1;::::0;::::1;::::0;117359:15:::1;::::0;117376:16:::1;::::0;117393:13;;117253:14:::1;117342:65;;:::i;:::-;;::::0;;;;::::1;-1:-1:-1::0;;117342:65:0;;;;;;117332:76;;117342:65:::1;117332:76:::0;;::::1;::::0;117309:14;;::::1;:101:::0;-1:-1:-1;;;;;117429:31:0;::::1;;::::0;;;:16:::1;:31:::0;;;;;;::::1;;:40;;::::0;;117425:259:::1;;-1:-1:-1::0;;;;;117490:31:0;::::1;;::::0;;;:16:::1;:31;::::0;;;;:38;;-1:-1:-1;;117490:38:0::1;117524:4;117490:38;::::0;;117425:259:::1;;;117621:47;:15;117637:31;117621:47;:::i;:::-;117604:14:::0;;::::1;:64:::0;117425:259:::1;117747:1;117730:14:::0;;::::1;:18:::0;117106:1121:::1;;;117862:9:::0;;::::1;::::0;117849::::1;:22;117839:69;;;::::0;-1:-1:-1;;;117839:69:0;;6964:2:1;117839:69:0::1;::::0;::::1;6946:21:1::0;7003:2;6983:18;;;6976:30;7042:34;7022:18;;;7015:62;-1:-1:-1;;;7093:18:1;;;7086:31;7134:19;;117839:69:0::1;6762:397:1::0;117839:69:0::1;117936:27:::0;;;118022:65:::1;::::0;::::1;::::0;118039:15:::1;::::0;118056:16:::1;::::0;118073:13;;117936:14:::1;118022:65;;:::i;:::-;;::::0;;;;::::1;-1:-1:-1::0;;118022:65:0;;;;;;118012:76;;118022:65:::1;118012:76:::0;;::::1;::::0;117989:14;;::::1;:101:::0;;;;118122:14;::::1;::::0;:48:::1;::::0;118139:31:::1;118122:48;:::i;:::-;118105:14:::0;;::::1;:65:::0;118214:1:::1;118197:14:::0;;::::1;:18:::0;117106:1121:::1;118263:18;118246:14:::0;;::::1;:35:::0;;;118411:22:::1;::::0;118393:40:::1;::::0;118411:22;;118393:40:::1;:::i;:::-;::::0;;-1:-1:-1;118524:15:0::1;::::0;:56:::1;::::0;-1:-1:-1;;;118524:56:0;;-1:-1:-1;;;;;118524:15:0;;::::1;::::0;:29:::1;::::0;:56:::1;::::0;118554:13;;118568:11;;118524:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;118607:1;118595:9;:13;118591:69;;;118624:24;:22;:24::i;:::-;116672:1995;;;71210:20:::0;70604:1;71730:22;;71547:213;71210:20;116595:2072;:::o;104442:2553::-;71166:21;:19;:21::i;:::-;104508::::1;104532:25;:23;:25::i;:::-;104508:49;;104568:35;104587:13;104601:1;104568:18;:35::i;:::-;104667:1;104658:6;:10;104650:49;;;::::0;-1:-1:-1;;;104650:49:0;;7721:2:1;104650:49:0::1;::::0;::::1;7703:21:1::0;7760:2;7740:18;;;7733:30;7799:28;7779:18;;;7772:56;7845:18;;104650:49:0::1;7519:350:1::0;104650:49:0::1;104749:15;::::0;:44:::1;::::0;-1:-1:-1;;;104749:44:0;;-1:-1:-1;;;;;202:32:1;;;104749:44:0::1;::::0;::::1;184:51:1::0;104720:26:0::1;::::0;104749:15:::1;::::0;:29:::1;::::0;157:18:1;;104749:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;104812:14;::::0;::::1;::::0;104720:73;;-1:-1:-1;104804:71:0::1;;;::::0;-1:-1:-1;;;104804:71:0;;8076:2:1;104804:71:0::1;::::0;::::1;8058:21:1::0;8115:2;8095:18;;;8088:30;8154:34;8134:18;;;8127:62;-1:-1:-1;;;8205:18:1;;;8198:36;8251:19;;104804:71:0::1;7874:402:1::0;104804:71:0::1;104913:14:::0;;::::1;::::0;104931:22:::1;-1:-1:-1::0;104913:40:0::1;104905:90;;;::::0;-1:-1:-1;;;104905:90:0;;8483:2:1;104905:90:0::1;::::0;::::1;8465:21:1::0;8522:2;8502:18;;;8495:30;8561:34;8541:18;;;8534:62;-1:-1:-1;;;8612:18:1;;;8605:36;8658:19;;104905:90:0::1;8281:402:1::0;104905:90:0::1;105058:15;105075:16;105092:13;105041:65;;;;;;;;;;:::i;:::-;;::::0;;;;::::1;-1:-1:-1::0;;105041:65:0;;;;;;105031:76;;105041:65:::1;105031:76:::0;;::::1;::::0;105008:14;;::::1;:101:::0;105185:31:::1;105219:15;:13;:15::i;:::-;105185:49:::0;-1:-1:-1;105263:22:0::1;105245:11:::0;105257:1:::1;105245:14;;;:40;;;;;;;:::i;:::-;::::0;;-1:-1:-1;105358:15:0::1;105376:16:::0;105393:6;105376:24:::1;::::0;::::1;;;;;:::i;:::-;;;;;105358:42;;105411:11;105459:1;105445:10;:15;105441:1470;;-1:-1:-1::0;105486:1:0::1;105603:12;105486:1:::0;105603:10;:12:::1;:::i;:::-;105595:21;::::0;:5:::1;:21;:::i;:::-;105585:32;::::0;:6;:32:::1;:::i;:::-;105566:14:::0;;::::1;:52:::0;;::::1;::::0;;;::::1;:::i;:::-;::::0;;-1:-1:-1;105441:1470:0::1;;;105654:1;105640:10;:15;105636:1275;;-1:-1:-1::0;105681:1:0::1;105766:6;105761:101;105778:1;105776;:3;105761:101;;;105834:10;105842:1:::0;105834:5:::1;:10;:::i;:::-;105824:21;::::0;:6;:21:::1;:::i;:::-;105805:14:::0;;::::1;:41:::0;;::::1;::::0;;;::::1;:::i;:::-;::::0;;-1:-1:-1;105781:3:0::1;;105761:101;;;;105636:1275;;;105897:2;105883:10;:16;105879:1032;;-1:-1:-1::0;105925:1:0::1;106058;106044:12;106055:1;106044:10:::0;:12:::1;:::i;:::-;106043:16;;;;:::i;105879:1032::-;106170:2;106156:10;:16;106152:759;;-1:-1:-1::0;106198:1:0::1;106283:6;106278:101;106295:1;106293;:3;106278:101;;;106351:10;106359:1:::0;106351:5:::1;:10;:::i;:::-;106341:21;::::0;:6;:21:::1;:::i;:::-;106322:14:::0;;::::1;:41:::0;;::::1;::::0;;;::::1;:::i;:::-;::::0;;-1:-1:-1;106298:3:0::1;;106278:101;;106152:759;106414:2;106400:10;:16;106396:515;;-1:-1:-1::0;106442:2:0::1;106575:1;106561:12;106572:1;106561:10:::0;:12:::1;:::i;106396:515::-;106691:2;106677:10;:16;106673:238;;-1:-1:-1::0;106719:1:0::1;106804:6;106799:101;106816:1;106814;:3;106799:101;;;106872:10;106880:1:::0;106872:5:::1;:10;:::i;:::-;106862:21;::::0;:6;:21:::1;:::i;:::-;106843:14:::0;;::::1;:41:::0;;::::1;::::0;;;::::1;:::i;:::-;::::0;;-1:-1:-1;106819:3:0::1;;106799:101;;;;106673:238;106921:15;::::0;:56:::1;::::0;-1:-1:-1;;;106921:56:0;;-1:-1:-1;;;;;106921:15:0;;::::1;::::0;:29:::1;::::0;:56:::1;::::0;106951:13;;106965:11;;106921:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;104497:2498;;;;;71210:20:::0;70604:1;71730:22;;71547:213;94523:226;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;94621:34:0;::::1;94613:62;;;;-1:-1:-1::0;;;94613:62:0::1;;;;;;;:::i;:::-;94686:8;:55:::0;;-1:-1:-1;;;;;;94686:55:0::1;-1:-1:-1::0;;;;;94686:55:0;;;::::1;::::0;;;::::1;::::0;;94523:226::o;93810:233::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;93914:34:0;::::1;93906:62;;;;-1:-1:-1::0;;;93906:62:0::1;;;;;;;:::i;:::-;93979:12;:56:::0;;-1:-1:-1;;;;;;93979:56:0::1;-1:-1:-1::0;;;;;93979:56:0;;;::::1;::::0;;;::::1;::::0;;93810:233::o;94755:255::-;2026:13;:11;:13::i;:::-;94912:1:::1;94888:21;:25;94880:62;;;::::0;-1:-1:-1;;;94880:62:0;;11212:2:1;94880:62:0::1;::::0;::::1;11194:21:1::0;11251:2;11231:18;;;11224:30;11290:26;11270:18;;;11263:54;11334:18;;94880:62:0::1;11010:348:1::0;94880:62:0::1;94961:8;::::0;94953:49:::1;::::0;-1:-1:-1;;;;;94961:8:0;;::::1;::::0;94980:21:::1;94953:49:::0;::::1;;;::::0;94961:8:::1;94953:49:::0;94961:8;94953:49;94980:21;94961:8;94953:49;::::1;;;;;;;;;;;;;;;;;;94049:211:::0;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;94148:34:0;::::1;94140:62;;;;-1:-1:-1::0;;;94140:62:0::1;;;;;;;:::i;:::-;94213:6;:39:::0;;-1:-1:-1;;;;;;94213:39:0::1;-1:-1:-1::0;;;;;94213:39:0;;;::::1;::::0;;;::::1;::::0;;94049:211::o;119193:719::-;119246:13;119261:25;119288:18;119328:21;119352:25;:23;:25::i;:::-;119426:15;;:44;;-1:-1:-1;;;119426:44:0;;-1:-1:-1;;;;;202:32:1;;;119426:44:0;;;184:51:1;119328:49:0;;-1:-1:-1;119397:26:0;;119426:15;;;;:29;;157:18:1;;119426:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;119397:73;-1:-1:-1;119500:16:0;119555:13;119397:73;119550:1;119538:14;;;;:30;;;;:::i;:::-;119519:50;;:15;:50;:::i;:::-;119500:69;;119599:14;;119584:11;:29;119580:325;;119642:1;119631:12;;119681:1;119658:24;;119580:325;;;119727:14;;;;:46;;119742:31;;119727:46;:::i;:::-;119716:57;;119828:11;119811:14;;:28;;;;:::i;:::-;119788:51;;119885:8;119870:14;;:23;;;;:::i;:::-;119854:39;;119580:325;119308:604;;;119193:719;;;:::o;2788:103::-;2026:13;:11;:13::i;:::-;2853:30:::1;2880:1;2853:18;:30::i;:::-;2788:103::o:0;93341:181::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;93425:26:0;::::1;93417:63;;;::::0;-1:-1:-1;;;93417:63:0;;11690:2:1;93417:63:0::1;::::0;::::1;11672:21:1::0;11729:2;11709:18;;;11702:30;11768:26;11748:18;;;11741:54;11812:18;;93417:63:0::1;11488:348:1::0;93417:63:0::1;93491:8;:23:::0;;-1:-1:-1;;;;;;93491:23:0::1;-1:-1:-1::0;;;;;93491:23:0;;;::::1;::::0;;;::::1;::::0;;93341:181::o;94266:251::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;94373:34:0;::::1;94365:62;;;;-1:-1:-1::0;;;94365:62:0::1;;;;;;;:::i;:::-;94438:16;:71:::0;;-1:-1:-1;;;;;;94438:71:0::1;-1:-1:-1::0;;;;;94438:71:0;;;::::1;::::0;;;::::1;::::0;;94266:251::o;95595:429::-;95834:15;;:42;;-1:-1:-1;;;95834:42:0;;95865:10;95834:42;;;184:51:1;95651:7:0;;;;-1:-1:-1;;;;;95834:15:0;;;;:30;;157:18:1;;95834:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;95810:66;-1:-1:-1;;;;;;95891:27:0;;95887:130;;95942:10;95935:17;;;95595:429;:::o;95887:130::-;95992:13;95595:429;-1:-1:-1;95595:429:0:o;97497:6937::-;71166:21;:19;:21::i;:::-;97593::::1;97617:25;:23;:25::i;:::-;97593:49:::0;-1:-1:-1;97669:10:0::1;:22;:27:::0;97661:83:::1;;;::::0;-1:-1:-1;;;97661:83:0;;12299:2:1;97661:83:0::1;::::0;::::1;12281:21:1::0;12338:2;12318:18;;;12311:30;12377:34;12357:18;;;12350:62;-1:-1:-1;;;12428:18:1;;;12421:41;12479:19;;97661:83:0::1;12097:407:1::0;97661:83:0::1;97774:27;;:::i;:::-;97812:26;;:::i;:::-;97928;;:::i;:::-;98075;;:::i;:::-;98138:15;::::0;:60:::1;::::0;-1:-1:-1;;;98138:60:0;;-1:-1:-1;;;;;98138:15:0;;::::1;::::0;:30:::1;::::0;:60:::1;::::0;98169:13;;98183:14;;98138:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;98217:12:::0;;:15;98112:86;;-1:-1:-1;98112:86:0;-1:-1:-1;98217:17:0;;;:38:::1;;-1:-1:-1::0;98238:12:0::1;::::0;::::1;::::0;:15;:17;;98217:38:::1;:59;;;-1:-1:-1::0;98259:12:0;;::::1;::::0;:15;:17;;98217:59:::1;98209:100;;;::::0;-1:-1:-1;;;98209:100:0;;15645:2:1;98209:100:0::1;::::0;::::1;15627:21:1::0;15684:2;15664:18;;;15657:30;15723:31;15703:18;;;15696:59;15772:18;;98209:100:0::1;15443:353:1::0;98209:100:0::1;98335:12:::0;;98320:27;;98335:12:::1;98373::::0;;::::1;::::0;98358;;::::1;:27:::0;98411:12;;;::::1;::::0;98396;;::::1;:27:::0;98549:14:::1;:12;:14::i;:::-;98524:21;::::0;::::1;98474:89:::0;98496:27:::1;::::0;::::1;98474:89:::0;;;98476:18:::1;::::0;::::1;98474:89:::0;;;;98738:12:::1;::::0;-1:-1:-1;98738:54:0;-1:-1:-1;;;98738:54:0;;-1:-1:-1;;;;;98738:12:0;;::::1;::::0;-1:-1:-1;98738:25:0::1;::::0;:54:::1;::::0;::::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;98811:12:::0;;:15;98724:68;;-1:-1:-1;98811:17:0;;;:38:::1;;-1:-1:-1::0;98832:12:0::1;::::0;::::1;::::0;:15;:17;;98811:38:::1;:59;;;-1:-1:-1::0;98853:12:0;;::::1;::::0;:15;:17;;98811:59:::1;98803:100;;;::::0;-1:-1:-1;;;98803:100:0;;15645:2:1;98803:100:0::1;::::0;::::1;15627:21:1::0;15684:2;15664:18;;;15657:30;15723:31;15703:18;;;15696:59;15772:18;;98803:100:0::1;15443:353:1::0;98803:100:0::1;98922:21;::::0;::::1;::::0;:24;::::1;::::0;98948:22:::1;-1:-1:-1::0;98922:158:0;::::1;;;-1:-1:-1::0;99052:21:0::1;::::0;::::1;::::0;:24:::1;;::::0;:28;;98922:158:::1;:190;;;;-1:-1:-1::0;99084:21:0::1;::::0;::::1;::::0;:24;::::1;::::0;99111:1:::1;-1:-1:-1::0;99084:28:0::1;98922:190;98914:234;;;::::0;-1:-1:-1;;;98914:234:0;;16280:2:1;98914:234:0::1;::::0;::::1;16262:21:1::0;16319:2;16299:18;;;16292:30;16358:32;16338:18;;;16331:60;16408:18;;98914:234:0::1;16078:354:1::0;98914:234:0::1;99174:12:::0;;99159;;::::1;:27:::0;99174:12:::1;99212::::0;::::1;::::0;99197;;::::1;:27:::0;99250:12;;::::1;::::0;99235;;::::1;:27:::0;99323:41:::1;99159:9:::0;99350:13;99323:16:::1;:41::i;:::-;99457:18;::::0;::::1;::::0;99432:44:::1;::::0;-1:-1:-1;;;99432:44:0;;99311:53;;-1:-1:-1;99432:2:0::1;::::0;:14:::1;::::0;:44:::1;::::0;99311:53;;99457:18;99432:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;99544:21;::::0;::::1;::::0;:24;;::::1;::::0;99508;;99420:56;;-1:-1:-1;99491:12:0::1;::::0;99508:32:::1;::::0;99533:7:::1;::::0;99508:32:::1;:::i;:::-;99507:61;;;;:::i;:::-;99506:66;::::0;99571:1:::1;99506:66;:::i;:::-;99491:81:::0;-1:-1:-1;99712:2:0::1;99491:81:::0;99685:9;99695:1:::1;99685:12;;;::::0;:15;:25:::1;::::0;;::::1;:::i;:::-;99684:30;;;;:::i;:::-;99666:12:::0;;::::1;::::0;:48;99744:12;;::::1;::::0;:15;99771:2:::1;::::0;99744:25:::1;::::0;99762:7;;99744:25:::1;:::i;:::-;99743:30;;;;:::i;:::-;99725:12:::0;;::::1;::::0;:48;99803:12;;::::1;::::0;:15;99830:2:::1;::::0;99803:25:::1;::::0;99821:7;;99803:25:::1;:::i;:::-;99802:30;;;;:::i;:::-;99784:12:::0;;::::1;::::0;:48;99866:12;;::::1;::::0;99784::::1;99866:19;::::0;99897:2:::1;::::0;99866:29:::1;::::0;99888:7;;99866:29:::1;:::i;:::-;99865:34;;;;:::i;:::-;99843:12:::0;;::::1;::::0;::::1;:19:::0;;::::1;:56:::0;;;;99933:12;;::::1;::::0;:19:::1;::::0;99964:2:::1;::::0;99933:29:::1;::::0;99955:7;;99933:29:::1;:::i;:::-;99932:34;;;;:::i;:::-;99910:12:::0;;::::1;::::0;::::1;:19:::0;;::::1;:56:::0;;;;100000:12;;::::1;::::0;:19:::1;::::0;100031:2:::1;::::0;100000:29:::1;::::0;100022:7;;100000:29:::1;:::i;:::-;99999:34;;;;:::i;:::-;99977:12:::0;;::::1;::::0;::::1;:19;:56:::0;100068:12;;::::1;::::0;:20:::1;;::::0;100100:2:::1;::::0;100068:30:::1;::::0;100091:7;;100068:30:::1;:::i;:::-;100067:35;;;;:::i;:::-;100044:9:::0;100054:1:::1;100044:12;;;::::0;:20:::1;;:58:::0;100169:2:::1;100160:7:::0;100137:9;100147:1:::1;100137:12;;;;:20;;;:30;;;;:::i;:::-;100136:35;;;;:::i;:::-;100113:9:::0;100123:1:::1;100113:12;;;::::0;:20:::1;;:58:::0;100238:2:::1;100229:7:::0;100206:9;100216:1:::1;100206:12;;;;:20;;;:30;;;;:::i;:::-;100205:35;;;;:::i;:::-;100182:12:::0;;::::1;::::0;:20:::1;;:58:::0;-1:-1:-1;100273:12:0;;::::1;::::0;:18:::1;::::0;100303:2:::1;::::0;100273:28:::1;::::0;100294:7;;100273:28:::1;:::i;:::-;100272:33;;;;:::i;:::-;100251:9:::0;100261:1:::1;100251:12;;;::::0;:18:::1;;:54:::0;100368:2:::1;100359:7:::0;100338:9;100348:1:::1;100338:12;;;;:18;;;:28;;;;:::i;:::-;100337:33;;;;:::i;:::-;100316:9:::0;100326:1:::1;100316:12;;;::::0;:18:::1;;:54:::0;100433:2:::1;100424:7:::0;100403:9;100413:1:::1;100403:12;;;;:18;;;:28;;;;:::i;:::-;100402:33;;;;:::i;:::-;100381:9:::0;100391:1:::1;100381:12;;;::::0;:18:::1;;:54:::0;100512:2:::1;100503:7:::0;100475:9;100485:1:::1;100475:12;;;;:25;;;:35;;;;:::i;:::-;100474:40;;;;:::i;:::-;100446:9:::0;100456:1:::1;100446:12;;;::::0;:25:::1;;:68:::0;100591:2:::1;100582:7:::0;100554:9;100564:1:::1;100554:12;;;;:25;;;:35;;;;:::i;:::-;100553:40;;;;:::i;:::-;100525:9:::0;100535:1:::1;100525:12;;;::::0;:25:::1;;:68:::0;100670:2:::1;100661:7:::0;100633:9;100643:1:::1;100633:12;;;;:25;;;:35;;;;:::i;:::-;100632:40;;;;:::i;:::-;100604:12:::0;;;::::1;::::0;:25:::1;;:68:::0;;;;100756:21:::1;::::0;::::1;::::0;:24:::1;::::0;:32:::1;::::0;100783:5:::1;::::0;100756:32:::1;:::i;:::-;100843:12:::0;;:15;100746:42;;-1:-1:-1;100870:2:0::1;::::0;100843:25:::1;::::0;100746:42;;100843:25:::1;:::i;:::-;100842:30;;;;:::i;:::-;100824:12:::0;;:48;:12:::1;100902::::0;::::1;::::0;:15;100929:2:::1;::::0;100902:25:::1;::::0;100920:7;;100902:25:::1;:::i;:::-;100901:30;;;;:::i;:::-;100883:12;::::0;::::1;::::0;:48;100961:12;;::::1;::::0;:15;100988:2:::1;::::0;100961:25:::1;::::0;100979:7;;100961:25:::1;:::i;:::-;100960:30;;;;:::i;:::-;100942:12:::0;;::::1;::::0;:48;101012:21:::1;::::0;::::1;::::0;:24;::::1;::::0;101046:5:::1;::::0;101012:30:::1;::::0;101046:5;;101012:30:::1;:::i;:::-;101011:40;;;;:::i;:::-;101110:12:::0;;::::1;:19;::::0;101001:50;;-1:-1:-1;101141:2:0::1;::::0;101110:29:::1;::::0;101001:50;;101110:29:::1;:::i;:::-;101109:34;;;;:::i;:::-;101087:12:::0;;::::1;:19:::0;;::::1;:56:::0;;;;101177:12;;::::1;::::0;:19:::1;::::0;101208:2:::1;::::0;101177:29:::1;::::0;101199:7;;101177:29:::1;:::i;:::-;101176:34;;;;:::i;:::-;101154:12;::::0;;::::1;::::0;:19;::::1;:56:::0;;;;101244:12;;::::1;::::0;:19:::1;::::0;101275:2:::1;::::0;101244:29:::1;::::0;101266:7;;101244:29:::1;:::i;:::-;101243:34;;;;:::i;:::-;101221:12:::0;;::::1;::::0;::::1;:19;:56:::0;101299:21:::1;::::0;::::1;::::0;:24;::::1;::::0;101337:5:::1;::::0;101299:34:::1;::::0;101324:9:::1;::::0;101299:34:::1;:::i;:::-;101298:44;;;;:::i;:::-;101377:12:::0;;:20:::1;;::::0;101288:54;;-1:-1:-1;101409:2:0::1;::::0;101377:30:::1;::::0;101288:54;;101377:30:::1;:::i;:::-;101376:35;;;;:::i;:::-;101353:12:::0;;:20:::1;::::0;;::::1;:58:::0;;;;:12:::1;101446::::0;::::1;::::0;:20:::1;::::0;101478:2:::1;::::0;101446:30:::1;::::0;101469:7;;101446:30:::1;:::i;:::-;101445:35;;;;:::i;:::-;101422:9:::0;101432:1:::1;101422:12;;;::::0;:20:::1;;:58:::0;101547:2:::1;101538:7:::0;101515:9;101525:1:::1;101515:12;;;;:20;;;:30;;;;:::i;:::-;101514:35;;;;:::i;:::-;101491:12:::0;;;::::1;::::0;:20:::1;:58:::0;101571:21:::1;::::0;::::1;::::0;:24;::::1;::::0;101613:5:::1;::::0;101571:38:::1;::::0;101596:13:::1;::::0;101571:38:::1;:::i;:::-;101570:48;;;;:::i;:::-;101651:12:::0;;:18:::1;;::::0;101560:58;;-1:-1:-1;101681:2:0::1;::::0;101651:28:::1;::::0;101560:58;;101651:28:::1;:::i;:::-;101650:33;;;;:::i;:::-;101629:12:::0;;:18:::1;::::0;;::::1;:54:::0;;;;:12:::1;101716::::0;::::1;::::0;:18:::1;::::0;101746:2:::1;::::0;101716:28:::1;::::0;101737:7;;101716:28:::1;:::i;:::-;101715:33;;;;:::i;:::-;101694:9:::0;101704:1:::1;101694:12;;;::::0;:18:::1;;:54:::0;101811:2:::1;101802:7:::0;101781:9;101791:1:::1;101781:12;;;;:18;;;:28;;;;:::i;:::-;101780:33;;;;:::i;:::-;101759:12:::0;;::::1;::::0;:18:::1;;:54:::0;101835:21:::1;::::0;::::1;::::0;:24;::::1;::::0;101881:5:::1;::::0;101835:42:::1;::::0;101860:17:::1;::::0;101835:42:::1;:::i;:::-;101834:52;;;;:::i;:::-;101926:12:::0;;:25:::1;;::::0;101824:62;;-1:-1:-1;101963:2:0::1;::::0;101926:35:::1;::::0;101824:62;;101926:35:::1;:::i;:::-;101925:40;;;;:::i;:::-;101897:12:::0;;:25:::1;::::0;;::::1;:68:::0;;;;:12:::1;102005::::0;::::1;::::0;:25:::1;::::0;102042:2:::1;::::0;102005:35:::1;::::0;102033:7;;102005:35:::1;:::i;:::-;102004:40;;;;:::i;:::-;101976:9:::0;101986:1:::1;101976:12;;;::::0;:25:::1;;:68:::0;102121:2:::1;102112:7:::0;102084:9;102094:1:::1;102084:12;;;;:25;;;:35;;;;:::i;:::-;102083:40;;;;:::i;:::-;102055:9:::0;102065:1:::1;102055:12;;;::::0;:25:::1;;:68:::0;102224:6:::1;::::0;:30:::1;::::0;-1:-1:-1;;;102224:30:0;;-1:-1:-1;;;;;102224:6:0;;::::1;::::0;:19:::1;::::0;:30:::1;::::0;102244:9;;102224:30:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;102202:18;::::0;::::1;102136:118:::0;::::1;;::::0;;;102162:14:::1;::::0;::::1;102136:118:::0;;;;102137:23:::1;::::0;::::1;102136:118:::0;;;;102295:4:::1;102269:30:::0;102265:1906:::1;;102316:96;102326:13;102341:10;:18;;;102361:10;:27;;;102390:10;:21;;;102316:9;:96::i;:::-;102508:21;::::0;::::1;::::0;:24;::::1;::::0;102530:1:::1;102508:29:::0;102504:713:::1;;102617:21;::::0;::::1;::::0;:24;;::::1;::::0;102580;;102579:34:::1;::::0;102606:7:::1;::::0;102579:34:::1;:::i;:::-;:62;102575:230;;;102756:21;::::0;::::1;::::0;:24;::::1;:29:::0;;102784:1:::1;::::0;102756:24;:29:::1;::::0;102784:1;;102756:29:::1;:::i;:::-;::::0;;-1:-1:-1;102575:230:0::1;102954:21;::::0;::::1;::::0;102981:1:::1;102954:24;::::0;;::::1;:28:::0;102504:713:::1;;;103150:15;103167:16;103184:13;103133:65;;;;;;;;;;:::i;:::-;;::::0;;;;::::1;-1:-1:-1::0;;103133:65:0;;;;;;103123:76;;103133:65:::1;103123:76:::0;;::::1;::::0;103090:21:::1;::::0;::::1;::::0;:24;;::::1;:111:::0;102504:713:::1;103231:21;::::0;::::1;::::0;:24;::::1;:29:::0;;103259:1:::1;::::0;103231:24;:29:::1;::::0;103259:1;;103231:29:::1;:::i;:::-;::::0;;-1:-1:-1;103370:21:0::1;::::0;::::1;::::0;:24;::::1;:50:::0;;103398:22:::1;::::0;103370:24;:50:::1;::::0;103398:22;;103370:50:::1;:::i;:::-;::::0;;-1:-1:-1;103597:15:0::1;::::0;103641:21:::1;::::0;::::1;::::0;103597:66:::1;::::0;-1:-1:-1;;;103597:66:0;;-1:-1:-1;;;;;103597:15:0;;::::1;::::0;:29:::1;::::0;:66:::1;::::0;103627:13;;103641:21;103597:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102265:1906;;;103827:21;::::0;::::1;::::0;:35;;103855:7:::1;::::0;103827:21;:35:::1;::::0;103855:7;;103827:35:::1;:::i;:::-;::::0;;-1:-1:-1;103926:21:0::1;::::0;::::1;::::0;:24;103954:7:::1;-1:-1:-1::0;103922:143:0::1;;103997:21;::::0;::::1;::::0;104024:1:::1;103997:24;::::0;;::::1;:28:::0;103922:143:::1;104079:15;::::0;104123:21:::1;::::0;::::1;::::0;104079:66:::1;::::0;-1:-1:-1;;;104079:66:0;;-1:-1:-1;;;;;104079:15:0;;::::1;::::0;:29:::1;::::0;:66:::1;::::0;104109:13;;104123:21;104079:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102265:1906;104191:35;104210:13;104224:1;104191:18;:35::i;:::-;104275:149;104290:10;:23;;;104315:10;:14;;;104331:10;:22;;;104355:10;:18;;;104374:9;104384:10;:27;;;104412:11;104275:149;;;;;;;;;;;;:::i;:::-;;;;;;;;97582:6852;;;;;;71210:20:::0;70604:1;71730:22;;71547:213;93564:234;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;93671:34:0;::::1;93663:62;;;;-1:-1:-1::0;;;93663:62:0::1;;;;;;;:::i;:::-;93736:15;:54:::0;;-1:-1:-1;;;;;;93736:54:0::1;-1:-1:-1::0;;;;;93736:54:0;;;::::1;::::0;;;::::1;::::0;;93564:234::o;118957:112::-;2026:13;:11;:13::i;:::-;119032:14:::1;:29:::0;118957:112::o;107001:876::-;107047:31;;:::i;:::-;107091:21;107115:25;:23;:25::i;:::-;107189:15;;:44;;-1:-1:-1;;;107189:44:0;;-1:-1:-1;;;;;202:32:1;;;107189:44:0;;;184:51:1;107091:49:0;;-1:-1:-1;107160:26:0;;107189:15;;;;:29;;157:18:1;;107189:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;107160:73;-1:-1:-1;107244:9:0;107160:73;107269:1;107257:14;;;;107256:27;;107272:5;107257:20;107279:4;107256:27;:::i;:::-;107244:39;-1:-1:-1;107294:11:0;107316:15;107330:1;107324:7;;;107244:39;107316:15;:::i;:::-;;-1:-1:-1;107346:6:0;107342:528;107362:1;107358;:5;107342:528;;;107394:9;107401:2;107394:4;:9;:::i;:::-;107385:18;;107445:1;107436:6;:10;107432:413;;;107485:17;107501:1;107493:9;;;:4;107485:17;:::i;:::-;;-1:-1:-1;107543:8:0;107550:1;107485:17;107543:8;:::i;:::-;107521:16;107538:1;107521:19;;;;;;;:::i;:::-;;;;:30;107432:413;;;107586:1;107577:6;:10;107573:272;;;107627:17;107643:1;107635:9;;;:4;107627:17;:::i;:::-;;-1:-1:-1;107686:8:0;107693:1;107627:17;107686:8;:::i;:::-;107685:14;;107698:1;107685:14;:::i;107573:272::-;107756:17;107772:1;107764:9;;;:4;107756:17;:::i;:::-;;-1:-1:-1;107815:8:0;107822:1;107756:17;107815:8;:::i;:::-;107814:15;;107827:2;107814:15;:::i;:::-;107792:16;107809:1;107792:19;;;;;;;:::i;:::-;;;;:37;107573:272;107365:3;;107342:528;;;;107080:797;;;;107001:876;:::o;119079:106::-;2026:13;:11;:13::i;:::-;119151:14:::1;:26:::0;119079:106::o;3046:201::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;3135:22:0;::::1;3127:73;;;::::0;-1:-1:-1;;;3127:73:0;;20635:2:1;3127:73:0::1;::::0;::::1;20617:21:1::0;20674:2;20654:18;;;20647:30;20713:34;20693:18;;;20686:62;-1:-1:-1;;;20764:18:1;;;20757:36;20810:19;;3127:73:0::1;20433:402:1::0;3127:73:0::1;3211:28;3230:8;3211:18;:28::i;110654:5830::-:0;110699:8;110709:12;110723:31;;:::i;:::-;110756:25;;:::i;:::-;110794:21;110818:25;:23;:25::i;:::-;110892:15;;:44;;-1:-1:-1;;;110892:44:0;;-1:-1:-1;;;;;202:32:1;;;110892:44:0;;;184:51:1;110794:49:0;;-1:-1:-1;110863:26:0;;110892:15;;;;:29;;157:18:1;;110892:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;111001:14;;;;110863:73;;-1:-1:-1;110863:73:0;;-1:-1:-1;111001:18:0;;111018:1;;111001:18;:::i;:::-;110991:28;-1:-1:-1;111052:1:0;111034:11;111046:1;111034:14;;;;:19;111030:311;;111102:14;;;;111101:23;;111123:1;;111102:17;;111101:23;:::i;:::-;111100:27;;111126:1;111100:27;:::i;:::-;111094:33;;111181:3;111187:1;111181:7;111177:23;;111197:1;111192:6;;111177:23;111030:311;;;111328:1;111322:7;;111030:311;111374:14;;;;111373:25;;111396:2;;111390;111374:18;111373:25;:::i;:::-;111351:47;;:19;111439:14;;;111438:25;;111461:2;;111455;111439:18;111438:25;:::i;:::-;111416:19;;;;:47;;;;111504:14;;;111503:25;;111526:2;;111520;111504:18;111503:25;:::i;:::-;111481:19;;;:47;111557:1;111550:8;;;111546:4925;;111613:6;111609:574;111629:1;111625;:5;111609:574;;;111698:1;111676:16;111693:1;111676:19;;;;;;;:::i;:::-;;;;;:23;111672:496;;;111746:2;111724:16;111741:1;111724:19;;;;;;;:::i;:::-;;;;:24;111672:496;;;111805:1;111783:16;111800:1;111783:19;;;;;;;:::i;:::-;;;;;:23;111779:389;;;111853:2;111831:16;111848:1;111831:19;;;;;;;:::i;111779:389::-;111912:1;111890:16;111907:1;111890:19;;;;;;;:::i;:::-;;;;;:23;111886:282;;;111960:2;111938:16;111955:1;111938:19;;;;;;;:::i;111886:282::-;112019:2;111997:16;112014:1;111997:19;;;;;;;:::i;:::-;;;;;:24;111993:175;;;112068:2;112046:16;112063:1;112046:19;;;;;;;:::i;111993:175::-;112141:2;112119:16;112136:1;112119:19;;;;;;;:::i;:::-;;;;:24;111993:175;111632:3;;111609:574;;;;111546:4925;;;112218:3;112225:1;112218:8;112214:4257;;112324:6;112320:554;112340:1;112336;:5;112320:554;;;112409:1;112387:16;112404:1;112387:19;;;;;;;:::i;:::-;;;;;:23;112383:476;;;112457:2;112435:16;112452:1;112435:19;;;;;;;:::i;:::-;;;;:24;112383:476;;;112511:1;112489:16;112506:1;112489:19;;;;;;;:::i;:::-;;;;;:23;112485:374;;;112559:2;112537:16;112554:1;112537:19;;;;;;;:::i;112485:374::-;112613:1;112591:16;112608:1;112591:19;;;;;;;:::i;:::-;;;;;:23;112587:272;;;112661:2;112639:16;112656:1;112639:19;;;;;;;:::i;112587:272::-;112715:2;112693:16;112710:1;112693:19;;;;;;;:::i;:::-;;;;;:24;112689:170;;;112764:2;112742:16;112759:1;112742:19;;;;;;;:::i;112689:170::-;112837:2;112815:16;112832:1;112815:19;;;;;;;:::i;:::-;;;;:24;112689:170;112343:3;;112320:554;;112214:4257;112909:3;112916:1;112909:8;112905:3566;;113119:6;113115:739;113135:1;113131;:5;113115:739;;;113204:1;113182:16;113199:1;113182:19;;;;;;;:::i;:::-;;;;;:23;113178:661;;;113252:2;113230:16;113247:1;113230:19;;;;;;;:::i;:::-;;;;:24;113178:661;;;113306:1;113284:16;113301:1;113284:19;;;;;;;:::i;:::-;;;;;:23;113280:559;;;113436:2;113414:16;113431:1;113414:19;;;;;;;:::i;113280:559::-;113490:1;113468:16;113485:1;113468:19;;;;;;;:::i;:::-;;;;;:23;113464:375;;;113538:2;113516:16;113533:1;113516:19;;;;;;;:::i;113464:375::-;113592:2;113570:16;113587:1;113570:19;;;;;;;:::i;:::-;;;;;:24;113566:273;;;113641:2;113619:16;113636:1;113619:19;;;;;;;:::i;113566:273::-;113695:2;113673:16;113690:1;113673:19;;;;;;;:::i;:::-;;;;;:24;113669:170;;;113744:2;113722:16;113739:1;113722:19;;;;;;;:::i;113669:170::-;113817:2;113795:16;113812:1;113795:19;;;;;;;:::i;:::-;;;;:24;113669:170;113138:3;;113115:739;;112905:3566;113881:3;113888:1;113881:8;113877:2594;;113996:6;113992:667;114012:1;114008;:5;113992:667;;;114081:1;114059:16;114076:1;114059:19;;;;;;;:::i;:::-;;;;;:23;114055:589;;;114129:2;114107:16;114124:1;114107:19;;;;;;;:::i;:::-;;;;:24;114055:589;;;114183:1;114161:16;114178:1;114161:19;;;;;;;:::i;:::-;;;;;:23;114157:487;;;114231:2;114209:16;114226:1;114209:19;;;;;;;:::i;114157:487::-;114285:1;114263:16;114280:1;114263:19;;;;;;;:::i;:::-;;;;;:23;114259:385;;;114333:2;114311:16;114328:1;114311:19;;;;;;;:::i;114259:385::-;114387:2;114365:16;114382:1;114365:19;;;;;;;:::i;:::-;;;;;:24;114361:283;;;114436:2;114414:16;114431:1;114414:19;;;;;;;:::i;114361:283::-;114495:2;114473:16;114490:1;114473:19;;;;;;;:::i;:::-;;;;;:24;114469:175;;;114544:2;114522:16;114539:1;114522:19;;;;;;;:::i;114469:175::-;114622:2;114600:16;114617:1;114600:19;;;;;;;:::i;:::-;;;;:24;114469:175;114015:3;;113992:667;;113877:2594;114690:3;114697:1;114690:8;114686:1785;;114814:6;114810:674;114830:1;114826;:5;114810:674;;;114899:1;114877:16;114894:1;114877:19;;;;;;;:::i;:::-;;;;;:23;114873:596;;;114947:1;114925:16;114942:1;114925:19;;;;;;;:::i;:::-;;;;:23;114873:596;;;115005:1;114983:16;115000:1;114983:19;;;;;;;:::i;:::-;;;;;:23;114979:490;;;115053:1;115031:16;115048:1;115031:19;;;;;;;:::i;114979:490::-;115111:1;115089:16;115106:1;115089:19;;;;;;;:::i;:::-;;;;;:23;115085:384;;;115159:1;115137:16;115154:1;115137:19;;;;;;;:::i;115085:384::-;115217:2;115195:16;115212:1;115195:19;;;;;;;:::i;:::-;;;;;:24;115191:278;;;115266:2;115244:16;115261:1;115244:19;;;;;;;:::i;115191:278::-;115320:2;115298:16;115315:1;115298:19;;;;;;;:::i;:::-;;;;;:24;115294:175;;;115369:2;115347:16;115364:1;115347:19;;;;;;;:::i;115294:175::-;115442:2;115420:16;115437:1;115420:19;;;;;;;:::i;:::-;;;;:24;115294:175;114833:3;;114810:674;;114686:1785;115507:3;115514:1;115507:8;115503:968;;115583:6;115579:877;115599:1;115595;:5;115579:877;;;115668:1;115646:16;115663:1;115646:19;;;;;;;:::i;:::-;;;;;:23;115642:799;;;115716:2;115694:16;115711:1;115694:19;;;;;;;:::i;:::-;;;;:24;115642:799;;;115770:1;115748:16;115765:1;115748:19;;;;;;;:::i;:::-;;;;;:23;115744:697;;;115818:2;115796:16;115813:1;115796:19;;;;;;;:::i;115744:697::-;115877:1;115855:16;115872:1;115855:19;;;;;;;:::i;:::-;;;;;:23;115851:590;;;115925:2;115903:16;115920:1;115903:19;;;;;;;:::i;115851:590::-;115979:1;115957:16;115974:1;115957:19;;;;;;;:::i;:::-;;;;;:23;115953:488;;;116027:2;116005:16;116022:1;116005:19;;;;;;;:::i;115953:488::-;116081:2;116059:16;116076:1;116059:19;;;;;;;:::i;:::-;;;;;:24;116055:386;;;116130:2;116108:16;116125:1;116108:19;;;;;;;:::i;116055:386::-;116189:2;116167:16;116184:1;116167:19;;;;;;;:::i;:::-;;;;;:24;116163:278;;;116238:2;116216:16;116233:1;116216:19;;;;;;;:::i;116163:278::-;116297:2;116275:16;116292:1;116275:19;;;;;;;:::i;:::-;;;;;:24;116271:170;;;116346:2;116324:16;116341:1;116324:19;;;;;;;:::i;116271:170::-;116419:2;116397:16;116414:1;116397:19;;;;;;;:::i;:::-;;;;:24;116271:170;115602:3;;115579:877;;;;115503:968;110783:5701;;110654:5830;;;;:::o;71246:293::-;70648:1;71380:7;;:19;71372:63;;;;-1:-1:-1;;;71372:63:0;;21042:2:1;71372:63:0;;;21024:21:1;21081:2;21061:18;;;21054:30;21120:33;21100:18;;;21093:61;21171:18;;71372:63:0;20840:355:1;71372:63:0;70648:1;71513:7;:18;71246:293::o;96971:246::-;97033:8;;-1:-1:-1;;;;;97033:8:0;97025:59;;;;-1:-1:-1;;;97025:59:0;;21402:2:1;97025:59:0;;;21384:21:1;21441:2;21421:18;;;21414:30;21480:26;21460:18;;;21453:54;21524:18;;97025:59:0;21200:348:1;97025:59:0;97111:8;;:35;;97096:9;;-1:-1:-1;;;;;97111:8:0;;97132:9;;97096;97111:35;97096:9;97111:35;97132:9;97111:8;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;97095:51;;;97165:4;97157:52;;;;-1:-1:-1;;;97157:52:0;;21965:2:1;97157:52:0;;;21947:21:1;22004:2;21984:18;;;21977:30;22043:34;22023:18;;;22016:62;-1:-1:-1;;;22094:18:1;;;22087:33;22137:19;;97157:52:0;21763:399:1;96326:441:0;-1:-1:-1;;;;;96630:22:0;;;;;;:14;:22;;;;;;96656:11;;96612:40;;:15;:40;:::i;:::-;:55;;96604:104;;;;-1:-1:-1;;;96604:104:0;;22369:2:1;96604:104:0;;;22351:21:1;22408:2;22388:18;;;22381:30;22447:34;22427:18;;;22420:62;-1:-1:-1;;;22498:18:1;;;22491:35;22543:19;;96604:104:0;22167:401:1;96604:104:0;-1:-1:-1;;;;;;96719:22:0;;;;;:14;:22;;;;;96744:15;96719:40;;96326:441::o;2305:132::-;2186:7;2213:6;-1:-1:-1;;;;;2213:6:0;765:10;2369:23;2361:68;;;;-1:-1:-1;;;2361:68:0;;22775:2:1;2361:68:0;;;22757:21:1;;;22794:18;;;22787:30;22853:34;22833:18;;;22826:62;22905:18;;2361:68:0;22573:356:1;3407:191:0;3481:16;3500:6;;-1:-1:-1;;;;;3517:17:0;;;-1:-1:-1;;;;;;3517:17:0;;;;;;3550:40;;3500:6;;;;;;;3550:40;;3481:16;3550:40;3470:128;3407:191;:::o;107891:985::-;107990:26;;:::i;:::-;108062:15;;:44;;-1:-1:-1;;;108062:44:0;;-1:-1:-1;;;;;202:32:1;;;108062:44:0;;;184:51:1;108029:30:0;;108062:15;;:29;;157:18:1;;108062:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;108149:16;;;108163:1;108149:16;;;;;;;;;108029:77;;-1:-1:-1;108117:29:0;;108149:16;;;;;;;;;-1:-1:-1;;108204:16:0;;;108218:1;108204:16;;;;;;;;;108117:48;;-1:-1:-1;108176:25:0;;108204:16;-1:-1:-1;108204:16:0;;;;;;;;;;-1:-1:-1;;108176:44:0;-1:-1:-1;108246:6:0;108241:132;108262:1;108258;:5;108241:132;;;108303:13;108285:12;108298:1;108285:15;;;;;;;;:::i;:::-;;;;;;:31;-1:-1:-1;;;;;108285:31:0;;;-1:-1:-1;;;;;108285:31:0;;;;;108345:13;108359:1;108345:16;;;;;;;:::i;:::-;;;;;108331:8;108340:1;108331:11;;;;;;;;:::i;:::-;;;;;;;;;;:30;108265:3;;108241:132;;;-1:-1:-1;108425:13:0;;;108436:1;108425:13;;;;;;;;;108393:30;;108425:13;;;;;;;;-1:-1:-1;;108465:8:0;;:47;;-1:-1:-1;;;108465:47:0;;108393:45;;-1:-1:-1;;;;;;108465:8:0;;:23;;-1:-1:-1;108465:47:0;;108489:12;;108503:8;;108465:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;108465:47:0;;;;;;;;;;;;:::i;:::-;108449:63;;108579:22;;:::i;:::-;108612:27;;:::i;:::-;108655:6;108650:129;108671:1;108667;:5;108650:129;;;108707:8;108716:1;108707:11;;;;;;;;:::i;:::-;;;;;;;108694:7;108702:1;108694:10;;;;;;;:::i;:::-;;;;:24;108751:16;;:13;;108765:1;;108751:16;;;;;;:::i;:::-;;;;;;;108733:12;108746:1;108733:15;;;;;;;:::i;:::-;;;;:34;108674:3;;108650:129;;;;108801:57;108824:10;108836:7;108845:12;108801:22;:57::i;:::-;108789:69;107891:985;-1:-1:-1;;;;;;;;;107891:985:0:o;108888:1700::-;109047:13;;109024:17;;109047:21;;109061:7;;109047:21;:::i;:::-;109044:25;;:1;:25;:::i;:::-;109024:45;;109146:3;109126:16;;109106:12;109121:2;109106:17;;;;:::i;:::-;:36;;;;:::i;:::-;109105:44;;;;:::i;:::-;109162:15;;:53;;-1:-1:-1;;;109162:53:0;;-1:-1:-1;;;;;26065:32:1;;;109162:53:0;;;26047:51:1;26114:18;;;26107:34;;;109090:59:0;;-1:-1:-1;109162:15:0;;;:25;;26020:18:1;;109162:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;109259:29:0;;;;;;:14;:29;;;;;;109291:1;;-1:-1:-1;109241:47:0;;:15;:47;:::i;:::-;:51;109237:175;;;-1:-1:-1;109324:1:0;109237:175;;;-1:-1:-1;109386:1:0;109237:175;109427:6;109422:204;109443:1;109439;:5;109422:204;;;109499:12;109494:2;109482:7;109487:1;109494:2;109482:7;:::i;:::-;109471:19;;:7;:19;:::i;:::-;109470:26;;;;:::i;:::-;:41;109466:138;;;109533:16;;-1:-1:-1;;;;;109533:16:0;:21;:16;109558:13;109573:11;109585:1;109573:14;;;;;;;:::i;:::-;;;;;109533:55;;-1:-1:-1;;;;;;109533:55:0;;;;;;;;;;26362:25:1;;;;-1:-1:-1;;;;;26423:32:1;;;26403:18;;;26396:60;26472:18;;;26465:34;26335:18;;109533:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;109466:138;109446:3;;109422:204;;;;109639:9;109684:15;109701:16;109718:13;109667:65;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;109667:65:0;;;;;;;;;109657:76;;109667:65;109657:76;;;;109755:8;;109657:76;;-1:-1:-1;;;;;;109755:8:0;:13;:8;109772:13;109789:8;109794:3;109657:76;109789:8;:::i;:::-;109788:17;;109801:4;109788:17;:::i;:::-;109755:52;;-1:-1:-1;;;;;;109755:52:0;;;;;;;;;;26362:25:1;;;;-1:-1:-1;;;;;26423:32:1;;;26403:18;;;26396:60;26472:18;;;26465:34;26335:18;;109755:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;109831:10;109842:1;109831:13;;;;;;;:::i;:::-;;;;;109848:1;109831:18;109827:740;;109910:13;;109895:11;;109910:22;;109925:7;;109910:22;:::i;:::-;109909:28;;109936:1;109909:28;:::i;:::-;109895:42;-1:-1:-1;110019:8:0;109895:42;110026:1;110019:8;:::i;:::-;110004:10;:6;110011:3;110004:10;:::i;:::-;110003:25;;;;:::i;:::-;109994:34;-1:-1:-1;110051:9:0;110056:4;110051;:9;:::i;:::-;:17;;110063:5;110051:17;:::i;:::-;110044:24;-1:-1:-1;110083:12:0;110044:24;;110083:12;:::i;:::-;;-1:-1:-1;110125:6:0;110114:8;110119:3;110083:12;110114:8;:::i;:::-;:17;110110:446;;;110190:9;110195:4;110190;:9;:::i;:::-;:17;;110202:5;110190:17;:::i;:::-;110183:24;-1:-1:-1;110226:12:0;110183:24;;110226:12;:::i;:::-;;-1:-1:-1;110264:9:0;110271:2;110226:12;110264:9;:::i;:::-;110257:16;;110303:2;110297:4;:8;110293:190;;;110359:11;:4;110366;110359:11;:::i;:::-;110350:20;;110293:190;;;110451:11;:4;110458;110451:11;:::i;:::-;110442:20;;110293:190;110501:8;;:39;;-1:-1:-1;;;110501:39:0;;:8;:39;;;26362:25:1;-1:-1:-1;;;;;26423:32:1;;;26403:18;;;26396:60;26472:18;;;26465:34;;;110501:8:0;;;;:13;;26335:18:1;;110501:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;110110:446;109851:716;109827:740;109008:1580;;108888:1700;;;;:::o;11744:28830::-;11902:26;;:::i;:::-;-1:-1:-1;12134:10:0;12210:6;12205:532;12222:1;12220;:3;12205:532;;;12270:4;12249:14;12264:1;12249:17;;;;;;;:::i;:::-;;;;;:25;12245:450;;12315:1;12295:14;12310:1;12295:17;;;;;;;:::i;:::-;;;;:21;12245:450;;;12363:3;12342:14;12357:1;12342:17;;;;;;;:::i;:::-;;;;;:24;12338:357;;12407:1;12387:14;12402:1;12387:17;;;;;;;:::i;12338:357::-;12455:2;12434:14;12449:1;12434:17;;;;;;;:::i;:::-;;;;;:23;12430:265;;12498:1;12478:14;12493:1;12478:17;;;;;;;:::i;12430:265::-;12546:1;12525:14;12540:1;12525:17;;;;;;;:::i;:::-;;;;;:22;12521:174;;12588:1;12568:14;12583:1;12568:17;;;;;;;:::i;12521:174::-;12636:1;12615:14;12630:1;12615:17;;;;;;;:::i;:::-;;;;;:22;12611:84;;12678:1;12658:14;12673:1;12658:17;;;;;;;:::i;:::-;;;;:21;12611:84;12225:3;;12205:532;;;;12747:19;;:::i;:::-;12875:13;;12892:4;12875:21;12871:2510;;12960:17;;12956:21;;:1;:21;:::i;:::-;12940:5;:11;;:38;;;;;;;:::i;:::-;;;-1:-1:-1;12871:2510:0;;;13000:13;;13017:4;13000:21;12996:2385;;13086:17;;13082:21;;:1;:21;:::i;:::-;13065:5;:12;;:39;;;;;;;:::i;12996:2385::-;13126:13;;13143:4;13126:21;13122:2259;;13217:17;;13212:22;;:2;:22;:::i;13122:2259::-;13257:13;;13274:4;13257:21;13253:2128;;13338:17;;13333:22;;:2;:22;:::i;13253:2128::-;13378:13;;13395:4;13378:21;13374:2007;;13466:14;13481:1;13466:17;;;;;13461:22;;:2;:22;:::i;:::-;13448:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;13520:17:0;;13516:21;;:1;:21;:::i;:::-;13499:5;:12;;:39;;;;;;;:::i;:::-;;;-1:-1:-1;13575:17:0;;13571:21;;:1;:21;:::i;:::-;13553:5;:13;;:40;;;;;;;:::i;:::-;;;-1:-1:-1;13628:17:0;;13624:21;;:1;:21;:::i;:::-;13608:5;:11;;:38;;;;;;;:::i;:::-;;;-1:-1:-1;13688:17:0;;13684:21;;:1;:21;:::i;:::-;13661:5;:18;;:45;;;;;;;:::i;13374:2007::-;13728:13;;13745:4;13728:21;13724:1657;;13809:17;;13805:21;;:1;:21;:::i;13724:1657::-;13849:13;;13866:4;13849:21;13845:1536;;13932:17;;13928:21;;:1;:21;:::i;13845:1536::-;13972:13;;13989:4;13972:21;13968:1413;;14050:17;;14046:21;;:1;:21;:::i;13968:1413::-;14090:13;;14107:4;14090:21;14086:1295;;14166:17;;14162:21;;:1;:21;:::i;14086:1295::-;14206:13;;14223:4;14206:21;14202:1179;;14291:17;;14287:21;;:1;:21;:::i;:::-;14269:5;:13;;:40;;;;;;;:::i;14202:1179::-;14331:13;;14348:4;14331:21;14327:1054;;14405:17;;14400:22;;:2;:22;:::i;:::-;14387:36;;:5;;:36;;;;;:::i;14327:1054::-;14445:13;;14462:4;14445:21;14441:940;;14521:17;;14516:22;;:2;:22;:::i;14441:940::-;14561:13;;14578:4;14561:21;14557:824;;14639:17;;14635:21;;:1;:21;:::i;14557:824::-;14679:13;;14696:4;14679:21;14675:706;;14763:17;;14759:21;;:1;:21;:::i;14675:706::-;14803:13;;14820:4;14803:21;14799:582;;14889:14;14904:1;14889:17;;14799:582;15151:13;;15168:4;15151:21;15147:234;;15232:17;;15227:22;;:2;:22;:::i;15147:234::-;15272:13;;15289:4;15272:21;15268:113;;15351:17;;15345:23;;:3;:23;:::i;:::-;15332:37;;:5;;:37;;;;;:::i;:::-;;;-1:-1:-1;15268:113:0;15452:13;;;;15469:4;15452:21;15448:2425;;15529:17;;;;15524:22;;:2;:22;:::i;:::-;15511:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;15448:2425:0;;;15569:13;;;;15586:4;15569:21;15565:2308;;15649:17;;;;15645:21;;:1;:21;:::i;:::-;15628:5;:12;;:39;;;;;;;:::i;15565:2308::-;15689:13;;;;15706:4;15689:21;15685:2188;;15770:17;;;;15766:21;;:1;:21;:::i;:::-;15748:5;:13;;:40;;;;;;;:::i;15685:2188::-;15810:13;;;;15827:4;15810:21;15806:2067;;15889:17;;;;15885:21;;:1;:21;:::i;:::-;15869:5;:11;;:38;;;;;;;:::i;15806:2067::-;15929:13;;;;15946:4;15929:21;15925:1948;;16015:17;;;;16011:21;;16030:1;16011:21;:::i;:::-;15988:5;:18;;:45;;;;;;;:::i;15925:1948::-;16055:13;;;;16072:4;16055:21;16051:1822;;16132:17;;;;16127:22;;:2;:22;:::i;16051:1822::-;16172:13;;;;16189:4;16172:21;16168:1705;;16252:17;;;;16248:21;;:1;:21;:::i;16168:1705::-;16292:13;;;;16309:4;16292:21;16288:1585;;16373:17;;;;16369:21;;:1;:21;:::i;16288:1585::-;16413:13;;;;16430:4;16413:21;16409:1464;;16492:17;;;;16488:21;;:1;:21;:::i;16409:1464::-;16532:13;;;;16549:4;16532:21;16528:1345;;16619:17;;;;16615:21;;:1;:21;:::i;16528:1345::-;16659:13;;;;16676:4;16659:21;16655:1218;;16737:17;;;;16732:22;;:2;:22;:::i;16655:1218::-;16777:13;;;;16794:4;16777:21;16773:1100;;16858:17;;;;16854:21;;:1;:21;:::i;16773:1100::-;16898:13;;;;16915:4;16898:21;16894:979;;16980:17;;;;16976:21;;:1;:21;:::i;16894:979::-;17020:13;;;;17037:4;17020:21;17016:857;;17100:17;;;;17096:21;;:1;:21;:::i;17016:857::-;17140:13;;;;17157:4;17140:21;17136:737;;17227:17;;;;17223:21;;:1;:21;:::i;17136:737::-;17267:13;;;;17284:4;17267:21;17263:610;;17347:17;;;;17341:23;;:3;:23;:::i;17263:610::-;17387:13;;;;17404:4;17387:21;17383:490;;17470:17;;;;17465:22;;:2;:22;:::i;17383:490::-;17510:13;;;;17527:4;17510:21;17506:367;;17594:17;;;;17589:22;;:2;:22;:::i;17506:367::-;17634:13;;;;17651:4;17634:21;17630:243;;17716:17;;;;17711:22;;:2;:22;:::i;17630:243::-;17756:13;;;;17773:4;17756:21;17752:121;;17843:17;;;;17839:21;;:1;:21;:::i;:::-;17816:5;:18;;:45;;;;;;;:::i;:::-;;;-1:-1:-1;17752:121:0;17949:13;;;;17966:4;17949:21;17945:7250;;18030:14;18045:1;18030:17;;;;;18025:22;;:2;:22;:::i;:::-;18012:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;17945:7250:0;;;18070:13;;;;18087:4;18070:21;18066:7129;;18154:14;18169:1;18154:17;;;;;18150:21;;:1;:21;:::i;:::-;18133:5;:12;;:39;;;;;;;:::i;18066:7129::-;18194:13;;;;18211:4;18194:21;18190:7005;;18279:14;18294:1;18279:17;;;;;18275:21;;:1;:21;:::i;:::-;18257:5;:13;;:40;;;;;;;:::i;18190:7005::-;18319:13;;;;18336:4;18319:21;18315:6880;;18402:14;18417:1;18402:17;;;;;18398:21;;:1;:21;:::i;:::-;18382:5;:11;;:38;;;;;;;:::i;18315:6880::-;18442:13;;;;18459:4;18442:21;18438:6757;;18532:14;18547:1;18532:17;;;;;18528:21;;:1;:21;:::i;:::-;18505:5;:18;;:45;;;;;;;:::i;18438:6757::-;18572:13;;;;18589:4;18572:21;;:46;;-1:-1:-1;18597:13:0;;;;18614:4;18597:21;18572:46;18568:6627;;;18689:14;18704:1;18689:17;;;;;18684:22;;:2;:22;:::i;:::-;18671:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;18743:17:0;;;;18739:21;;:1;:21;:::i;:::-;18722:5;:12;;:39;;;;;;;:::i;:::-;;;-1:-1:-1;18798:17:0;;;;18794:21;;:1;:21;:::i;:::-;18776:5;:13;;:40;;;;;;;:::i;:::-;;;-1:-1:-1;18851:17:0;;;;18847:21;;:1;:21;:::i;:::-;18831:5;:11;;:38;;;;;;;:::i;:::-;;;-1:-1:-1;18911:14:0;18926:1;18911:17;;18568:6627;18951:13;;;;18968:4;18951:21;18947:6248;;19037:14;19052:1;19037:17;;;;;19032:22;;:2;:22;:::i;18947:6248::-;19077:13;;;;19094:4;19077:21;19073:6122;;19166:14;19181:1;19166:17;;;;;19162:21;;:1;:21;:::i;19073:6122::-;19206:13;;;;19223:4;19206:21;19202:5993;;19296:14;19311:1;19296:17;;;;;19292:21;;:1;:21;:::i;19202:5993::-;19336:13;;;;19353:4;19336:21;19332:5863;;19424:14;19439:1;19424:17;;;;;19420:21;;:1;:21;:::i;19332:5863::-;19464:13;;;;19481:4;19464:21;19460:5735;;19559:14;19574:1;19559:17;;;;;19555:21;;:1;:21;:::i;19460:5735::-;19599:13;;;;19616:4;19599:21;;:46;;-1:-1:-1;19624:13:0;;;;19641:4;19624:21;19599:46;19595:5600;;;19721:14;19736:1;19721:17;;;;;19716:22;;:2;:22;:::i;:::-;19703:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;19775:17:0;;;;19771:21;;19790:1;19771:21;:::i;19595:5600::-;19983:13;;;;20000:4;19983:21;19979:5216;;20074:14;20089:1;20074:17;;;;;20069:22;;:2;:22;:::i;19979:5216::-;20114:13;;;;20131:4;20114:21;20110:5085;;20208:14;20223:1;20208:17;;;;;20204:21;;:1;:21;:::i;20110:5085::-;20248:13;;;;20265:4;20248:21;20244:4951;;20343:14;20358:1;20343:17;;;;;20339:21;;:1;:21;:::i;20244:4951::-;20383:13;;;;20400:4;20383:21;20379:4816;;20476:14;20491:1;20476:17;;;;;20472:21;;:1;:21;:::i;20379:4816::-;20516:13;;;;20533:4;20516:21;20512:4683;;20616:14;20631:1;20616:17;;;;;20612:21;;:1;:21;:::i;20512:4683::-;20656:13;;;;20673:4;20656:21;;:46;;-1:-1:-1;20681:13:0;;;;20698:4;20681:21;20656:46;20652:4543;;;20783:14;20798:1;20783:17;;;;;20778:22;;:2;:22;:::i;:::-;20765:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;20837:17:0;;;;20833:21;;20852:1;20833:21;:::i;:::-;20816:5;:12;;:39;;;;;;;:::i;:::-;;;-1:-1:-1;20892:17:0;;;;20888:21;;20907:1;20888:21;:::i;20652:4543::-;21045:13;;;;21062:4;21045:21;21041:4154;;21131:14;21146:1;21131:17;;21041:4154;21171:13;;;;21188:4;21171:21;21167:4028;;21260:14;21275:1;21260:17;;21167:4028;21300:13;;;;21317:4;21300:21;21296:3899;;21390:14;21405:1;21390:17;;21296:3899;21430:13;;;;21447:4;21430:21;21426:3769;;21518:14;21533:1;21518:17;;21426:3769;21558:13;;;;21575:4;21558:21;21554:3641;;21653:14;21668:1;21653:17;;21554:3641;21693:13;;;;21710:4;21693:21;;:46;;-1:-1:-1;21718:13:0;;;;21735:4;21718:21;21693:46;21689:3506;;;21815:14;21830:1;21815:17;;21689:3506;22077:13;;;;22094:4;22077:21;22073:3122;;22164:14;22179:1;22164:17;;22073:3122;22204:13;;;;22221:4;22204:21;22200:2995;;22294:14;22309:1;22294:17;;22200:2995;22334:13;;;;22351:4;22334:21;22330:2865;;22425:14;22440:1;22425:17;;22330:2865;22465:13;;;;22482:4;22465:21;22461:2734;;22554:14;22569:1;22554:17;;22461:2734;22594:13;;;;22611:4;22594:21;22590:2605;;22690:14;22705:1;22690:17;;22590:2605;22730:13;;;;22747:4;22730:21;;:46;;-1:-1:-1;22755:13:0;;;;22772:4;22755:21;22730:46;22726:2469;;;22853:14;22868:1;22853:17;;22726:2469;23115:13;;;;23132:4;23115:21;23111:2084;;23202:14;23217:1;23202:17;;23111:2084;23242:13;;;;23259:4;23242:21;23238:1957;;23332:14;23347:1;23332:17;;23238:1957;23372:13;;;;23389:4;23372:21;23368:1827;;23463:14;23478:1;23463:17;;23368:1827;23503:13;;;;23520:4;23503:21;23499:1696;;23592:14;23607:1;23592:17;;23499:1696;23632:13;;;;23649:4;23632:21;23628:1567;;23728:14;23743:1;23728:17;;23628:1567;23768:13;;;;23785:4;23768:21;;:46;;-1:-1:-1;23793:13:0;;;;23810:4;23793:21;23768:46;23764:1431;;;23891:14;23906:1;23891:17;;23764:1431;24153:13;;;;24170:4;24153:21;24149:1046;;24243:17;;;;24237:23;;:3;:23;:::i;24149:1046::-;24283:13;;;;24300:4;24283:21;24279:916;;24376:17;;;;24371:22;;:2;:22;:::i;24279:916::-;24416:13;;;;24433:4;24416:21;24412:783;;24510:17;;;;24505:22;;:2;:22;:::i;24412:783::-;24550:13;;;;24567:4;24550:21;24546:649;;24642:17;;;;24637:22;;:2;:22;:::i;24546:649::-;24682:13;;;;24699:4;24682:21;24678:517;;24779:17;;;;24775:21;;:1;:21;:::i;24678:517::-;24819:13;;;;24836:4;24819:21;;:46;;-1:-1:-1;24844:13:0;;;;24861:4;24844:21;24819:46;24815:380;;;24943:17;;;;24938:22;;:2;:22;:::i;:::-;24925:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;24997:17:0;;;;24993:21;;25012:1;24993:21;:::i;:::-;24976:5;:12;;:39;;;;;;;:::i;:::-;;;-1:-1:-1;25052:17:0;;;;25048:21;;25067:1;25048:21;:::i;:::-;25030:5;:13;;:40;;;;;;;:::i;:::-;;;-1:-1:-1;25105:17:0;;;;25101:21;;25120:1;25101:21;:::i;:::-;25085:5;:11;;:38;;;;;;;:::i;:::-;;;-1:-1:-1;25165:17:0;;;;25161:21;;:1;:21;:::i;:::-;25138:5;:18;;:45;;;;;;;:::i;:::-;;;-1:-1:-1;24815:380:0;25272:13;;;;25289:4;25272:21;25268:7418;;25357:14;25372:1;25357:17;;;;;25352:22;;:2;:22;:::i;:::-;25339:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;25268:7418:0;;;25397:13;;;;25414:4;25397:21;25393:7293;;25485:14;25500:1;25485:17;;;;;25481:21;;:1;:21;:::i;:::-;25464:5;:12;;:39;;;;;;;:::i;25393:7293::-;25525:13;;;;25542:4;25525:21;25521:7165;;25614:14;25629:1;25614:17;;;;;25610:21;;:1;:21;:::i;:::-;25592:5;:13;;:40;;;;;;;:::i;25521:7165::-;25654:13;;;;25671:4;25654:21;25650:7036;;25741:14;25756:1;25741:17;;;;;25737:21;;:1;:21;:::i;:::-;25721:5;:11;;:38;;;;;;;:::i;25650:7036::-;25781:13;;;;25798:4;25781:21;25777:6909;;25875:14;25890:1;25875:17;;;;;25871:21;;:1;:21;:::i;:::-;25848:5;:18;;:45;;;;;;;:::i;25777:6909::-;25915:13;;;;25932:4;25915:21;;:46;;-1:-1:-1;25940:13:0;;;;25957:4;25940:21;25915:46;25911:6775;;;26036:14;26051:1;26036:17;;;;;26031:22;;:2;:22;:::i;:::-;26018:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;26090:17:0;;;;26086:21;;:1;:21;:::i;:::-;26069:5;:12;;:39;;;;;;;:::i;:::-;;;-1:-1:-1;26145:17:0;;;;26141:21;;:1;:21;:::i;:::-;26123:5;:13;;:40;;;;;;;:::i;:::-;;;-1:-1:-1;26198:17:0;;;;26194:21;;:1;:21;:::i;:::-;26178:5;:11;;:38;;;;;;;:::i;:::-;;;-1:-1:-1;26258:14:0;26273:1;26258:17;;25911:6775;26298:13;;;;26315:4;26298:21;26294:6392;;26388:14;26403:1;26388:17;;;;;26383:22;;:2;:22;:::i;26294:6392::-;26428:13;;;;26445:4;26428:21;26424:6262;;26521:14;26536:1;26521:17;;;;;26517:21;;:1;:21;:::i;26424:6262::-;26561:13;;;;26578:4;26561:21;26557:6129;;26655:14;26670:1;26655:17;;;;;26651:21;;:1;:21;:::i;26557:6129::-;26695:13;;;;26712:4;26695:21;26691:5995;;26787:14;26802:1;26787:17;;;;;26783:21;;:1;:21;:::i;26691:5995::-;26827:13;;;;26844:4;26827:21;26823:5863;;26926:14;26941:1;26926:17;;;;;26922:21;;:1;:21;:::i;26823:5863::-;26966:13;;;;26983:4;26966:21;;:46;;-1:-1:-1;26991:13:0;;;;27008:4;26991:21;26966:46;26962:5724;;;27092:14;27107:1;27092:17;;;;;27087:22;;:2;:22;:::i;:::-;27074:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;27146:17:0;;;;27142:21;;:1;:21;:::i;26962:5724::-;27354:13;;;;27371:4;27354:21;27350:5336;;27449:14;27464:1;27449:17;;;;;27444:22;;:2;:22;:::i;27350:5336::-;27489:13;;;;27506:4;27489:21;27485:5201;;27587:14;27602:1;27587:17;;;;;27583:21;;:1;:21;:::i;27485:5201::-;27627:13;;;;27644:4;27627:21;27623:5063;;27726:14;27741:1;27726:17;;;;;27722:21;;:1;:21;:::i;27623:5063::-;27766:13;;;;27783:4;27766:21;27762:4924;;27863:14;27878:1;27863:17;;;;;27859:21;;:1;:21;:::i;27762:4924::-;27903:13;;;;27920:4;27903:21;27899:4787;;28007:14;28022:1;28007:17;;;;;28003:21;;:1;:21;:::i;27899:4787::-;28047:13;;;;28064:4;28047:21;;:46;;-1:-1:-1;28072:13:0;;;;28089:4;28072:21;28047:46;28043:4643;;;28178:14;28193:1;28178:17;;;;;28173:22;;:2;:22;:::i;:::-;28160:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;28232:17:0;;;;28228:21;;:1;:21;:::i;:::-;28211:5;:12;;:39;;;;;;;:::i;:::-;;;-1:-1:-1;28287:17:0;;;;28283:21;;:1;:21;:::i;28043:4643::-;28440:13;;;;28457:4;28440:21;28436:4250;;28530:14;28545:1;28530:17;;28436:4250;28570:13;;;;28587:4;28570:21;28566:4120;;28663:14;28678:1;28663:17;;28566:4120;28703:13;;;;28720:4;28703:21;28699:3987;;28797:14;28812:1;28797:17;;28699:3987;28837:13;;;;28854:4;28837:21;28833:3853;;28929:14;28944:1;28929:17;;28833:3853;28969:13;;;;28986:4;28969:21;28965:3721;;29068:14;29083:1;29068:17;;28965:3721;29108:13;;;;29125:4;29108:21;;:46;;-1:-1:-1;29133:13:0;;;;29150:4;29133:21;29108:46;29104:3582;;;29234:14;29249:1;29234:17;;29104:3582;29496:13;;;;29513:4;29496:21;29492:3194;;29587:14;29602:1;29587:17;;29492:3194;29627:13;;;;29644:4;29627:21;29623:3063;;29721:14;29736:1;29721:17;;29623:3063;29761:13;;;;29778:4;29761:21;29757:2929;;29856:14;29871:1;29856:17;;29757:2929;29896:13;;;;29913:4;29896:21;29892:2794;;29989:14;30004:1;29989:17;;29892:2794;30029:13;;;;30046:4;30029:21;30025:2661;;30129:14;30144:1;30129:17;;30025:2661;30169:13;;;;30186:4;30169:21;;:46;;-1:-1:-1;30194:13:0;;;;30211:4;30194:21;30169:46;30165:2521;;;30296:14;30311:1;30296:17;;30165:2521;30558:13;;;;30575:4;30558:21;30554:2132;;30649:14;30664:1;30649:17;;30554:2132;30689:13;;;;30706:4;30689:21;30685:2001;;30783:14;30798:1;30783:17;;30685:2001;30823:13;;;;30840:4;30823:21;30819:1867;;30918:14;30933:1;30918:17;;30819:1867;30958:13;;;;30975:4;30958:21;30954:1732;;31051:14;31066:1;31051:17;;30954:1732;31091:13;;;;31108:4;31091:21;31087:1599;;31191:14;31206:1;31191:17;;31087:1599;31231:13;;;;31248:4;31231:21;;:46;;-1:-1:-1;31256:13:0;;;;31273:4;31256:21;31231:46;31227:1459;;;31358:14;31373:1;31358:17;;31227:1459;31620:13;;;;31637:4;31620:21;31616:1070;;31714:17;;;;31708:23;;:3;:23;:::i;31616:1070::-;31754:13;;;;31771:4;31754:21;31750:936;;31851:17;;;;31846:22;;:2;:22;:::i;31750:936::-;31891:13;;;;31908:4;31891:21;31887:799;;31989:17;;;;31984:22;;:2;:22;:::i;31887:799::-;32029:13;;;;32046:4;32029:21;32025:661;;32125:17;;;;32120:22;;:2;:22;:::i;32025:661::-;32165:13;;;;32182:4;32165:21;32161:525;;32266:17;;;;32262:21;;:1;:21;:::i;32161:525::-;32306:13;;;;32323:4;32306:21;;:46;;-1:-1:-1;32331:13:0;;;;32348:4;32331:21;32306:46;32302:384;;;32434:17;;;;32429:22;;:2;:22;:::i;:::-;32416:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;32488:17:0;;;;32484:21;;:1;:21;:::i;:::-;32467:5;:12;;:39;;;;;;;:::i;:::-;;;-1:-1:-1;32543:17:0;;;;32539:21;;:1;:21;:::i;:::-;32521:5;:13;;:40;;;;;;;:::i;:::-;;;-1:-1:-1;32596:17:0;;;;32592:21;;:1;:21;:::i;:::-;32576:5;:11;;:38;;;;;;;:::i;:::-;;;-1:-1:-1;32656:17:0;;;;32652:21;;:1;:21;:::i;:::-;32629:5;:18;;:45;;;;;;;:::i;:::-;;;-1:-1:-1;32302:384:0;32752:13;;;;32769:4;32752:21;32748:7292;;32834:14;32849:1;32834:17;;;;;32829:22;;:2;:22;:::i;:::-;32816:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;32748:7292:0;;;32874:13;;;;32891:4;32874:21;32870:7170;;32959:14;32974:1;32959:17;;;;;32955:21;;:1;:21;:::i;:::-;32938:5;:12;;:39;;;;;;;:::i;32870:7170::-;32999:13;;;;33016:4;32999:21;32995:7045;;33085:14;33100:1;33085:17;;;;;33081:21;;:1;:21;:::i;:::-;33063:5;:13;;:40;;;;;;;:::i;32995:7045::-;33125:13;;;;33142:4;33125:21;33121:6919;;33209:14;33224:1;33209:17;;;;;33205:21;;:1;:21;:::i;:::-;33189:5;:11;;:38;;;;;;;:::i;33121:6919::-;33249:13;;;;33266:4;33249:21;33245:6795;;33340:14;33355:1;33340:17;;;;;33336:21;;:1;:21;:::i;:::-;33313:5;:18;;:45;;;;;;;:::i;33245:6795::-;33380:13;;;;33397:4;33380:21;;:46;;-1:-1:-1;33405:13:0;;;;33422:4;33405:21;33380:46;33376:6664;;;33498:14;33513:1;33498:17;;;;;33493:22;;:2;:22;:::i;:::-;33480:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;33552:17:0;;;;33548:21;;:1;:21;:::i;:::-;33531:5;:12;;:39;;;;;;;:::i;:::-;;;-1:-1:-1;33607:17:0;;;;33603:21;;:1;:21;:::i;:::-;33585:5;:13;;:40;;;;;;;:::i;:::-;;;-1:-1:-1;33660:17:0;;;;33656:21;;:1;:21;:::i;:::-;33640:5;:11;;:38;;;;;;;:::i;:::-;;;-1:-1:-1;33720:14:0;33735:1;33720:17;;33376:6664;33760:13;;;;33777:4;33760:21;33756:6284;;33847:14;33862:1;33847:17;;;;;33842:22;;:2;:22;:::i;33756:6284::-;33887:13;;;;33904:4;33887:21;33883:6157;;33977:14;33992:1;33977:17;;;;;33973:21;;:1;:21;:::i;33883:6157::-;34017:13;;;;34034:4;34017:21;34013:6027;;34108:14;34123:1;34108:17;;;;;34104:21;;:1;:21;:::i;34013:6027::-;34148:13;;;;34165:4;34148:21;34144:5896;;34237:14;34252:1;34237:17;;;;;34233:21;;:1;:21;:::i;34144:5896::-;34277:13;;;;34294:4;34277:21;34273:5767;;34373:14;34388:1;34373:17;;;;;34369:21;;:1;:21;:::i;34273:5767::-;34413:13;;;;34430:4;34413:21;;:46;;-1:-1:-1;34438:13:0;;;;34455:4;34438:21;34413:46;34409:5631;;;34536:14;34551:1;34536:17;;;;;34531:22;;:2;:22;:::i;:::-;34518:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;34590:17:0;;;;34586:21;;:1;:21;:::i;34409:5631::-;34798:13;;;;34815:4;34798:21;34794:5246;;34890:14;34905:1;34890:17;;;;;34885:22;;:2;:22;:::i;34794:5246::-;34930:13;;;;34947:4;34930:21;34926:5114;;35025:14;35040:1;35025:17;;;;;35021:21;;:1;:21;:::i;34926:5114::-;35065:13;;;;35082:4;35065:21;35061:4979;;35161:14;35176:1;35161:17;;;;;35157:21;;:1;:21;:::i;35061:4979::-;35201:13;;;;35218:4;35201:21;35197:4843;;35295:14;35310:1;35295:17;;;;;35291:21;;:1;:21;:::i;35197:4843::-;35335:13;;;;35352:4;35335:21;35331:4709;;35436:14;35451:1;35436:17;;;;;35432:21;;:1;:21;:::i;35331:4709::-;35476:13;;;;35493:4;35476:21;;:46;;-1:-1:-1;35501:13:0;;;;35518:4;35501:21;35476:46;35472:4568;;;35604:14;35619:1;35604:17;;;;;35599:22;;:2;:22;:::i;:::-;35586:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;35658:17:0;;;;35654:21;;:1;:21;:::i;:::-;35637:5;:12;;:39;;;;;;;:::i;:::-;;;-1:-1:-1;35713:17:0;;;;35709:21;;:1;:21;:::i;35472:4568::-;35866:13;;;;35883:4;35866:21;35862:4178;;35953:14;35968:1;35953:17;;35862:4178;35993:13;;;;36010:4;35993:21;35989:4051;;36083:14;36098:1;36083:17;;35989:4051;36123:13;;;;36140:4;36123:21;36119:3921;;36214:14;36229:1;36214:17;;36119:3921;36254:13;;;;36271:4;36254:21;36250:3790;;36343:14;36358:1;36343:17;;36250:3790;36383:13;;;;36400:4;36383:21;36379:3661;;36479:14;36494:1;36479:17;;36379:3661;36519:13;;;;36536:4;36519:21;;:46;;-1:-1:-1;36544:13:0;;;;36561:4;36544:21;36519:46;36515:3525;;;36642:14;36657:1;36642:17;;36515:3525;36904:13;;;;36921:4;36904:21;36900:3140;;36992:14;37007:1;36992:17;;36900:3140;37032:13;;;;37049:4;37032:21;37028:3012;;37123:14;37138:1;37123:17;;37028:3012;37163:13;;;;37180:4;37163:21;37159:2881;;37255:14;37270:1;37255:17;;37159:2881;37295:13;;;;37312:4;37295:21;37291:2749;;37385:14;37400:1;37385:17;;37291:2749;37425:13;;;;37442:4;37425:21;37421:2619;;37522:14;37537:1;37522:17;;37421:2619;37562:13;;;;37579:4;37562:21;;:46;;-1:-1:-1;37587:13:0;;;;37604:4;37587:21;37562:46;37558:2482;;;37686:14;37701:1;37686:17;;37558:2482;37948:13;;;;37965:4;37948:21;37944:2096;;38036:14;38051:1;38036:17;;37944:2096;38076:13;;;;38093:4;38076:21;38072:1968;;38167:14;38182:1;38167:17;;38072:1968;38207:13;;;;38224:4;38207:21;38203:1837;;38299:14;38314:1;38299:17;;38203:1837;38339:13;;;;38356:4;38339:21;38335:1705;;38429:14;38444:1;38429:17;;38335:1705;38469:13;;;;38486:4;38469:21;38465:1575;;38566:14;38581:1;38566:17;;38465:1575;38606:13;;;;38623:4;38606:21;;:46;;-1:-1:-1;38631:13:0;;;;38648:4;38631:21;38606:46;38602:1438;;;38730:14;38745:1;38730:17;;38602:1438;38992:13;;;;39009:4;38992:21;38988:1052;;39083:17;;;;39077:23;;:3;:23;:::i;38988:1052::-;39123:13;;;;39140:4;39123:21;39119:921;;39217:17;;;;39212:22;;:2;:22;:::i;39119:921::-;39257:13;;;;39274:4;39257:21;39253:787;;39352:17;;;;39347:22;;:2;:22;:::i;39253:787::-;39392:13;;;;39409:4;39392:21;39388:652;;39485:17;;;;39480:22;;:2;:22;:::i;39388:652::-;39525:13;;;;39542:4;39525:21;39521:519;;39623:17;;;;39619:21;;:1;:21;:::i;39521:519::-;39663:13;;;;39680:4;39663:21;;:46;;-1:-1:-1;39688:13:0;;;;39705:4;39688:21;39663:46;39659:381;;;39788:17;;;;39783:22;;:2;:22;:::i;:::-;39770:36;;:5;;:36;;;;;:::i;:::-;;;-1:-1:-1;39842:17:0;;;;39838:21;;:1;:21;:::i;:::-;39821:5;:12;;:39;;;;;;;:::i;:::-;;;-1:-1:-1;39897:17:0;;;;39893:21;;:1;:21;:::i;:::-;39875:5;:13;;:40;;;;;;;:::i;:::-;;;-1:-1:-1;39950:17:0;;;;39946:21;;:1;:21;:::i;:::-;39930:5;:11;;:38;;;;;;;:::i;:::-;;;-1:-1:-1;40010:17:0;;;;40006:21;;:1;:21;:::i;:::-;39983:5;:18;;:45;;;;;;;:::i;:::-;;;-1:-1:-1;39659:381:0;40057:6;40052:513;40069:1;40067;:3;40052:513;;;40113:1;40096:9;40106:1;40096:12;;;;;;;:::i;:::-;;;;;:15;:18;40092:449;;;40191:8;;40171:10;40182:1;40171:13;;;;;;;:::i;:::-;;;;;:28;;;;;;;:::i;:::-;;;;;;;40153:9;40163:1;40153:12;;;;;;;:::i;:::-;;;;;:15;;:46;;;;;40264:5;:12;;;40240:10;40251:1;40240:13;;;;;;;:::i;:::-;;;;;:20;;:36;;;;;;;:::i;:::-;;;;;;;40218:9;40228:1;40218:12;;;;;;;:::i;:::-;;;;;:19;;:58;;;;;40343:5;:13;;;40318:10;40329:1;40318:13;;;;;;;:::i;:::-;;;;;:21;;:38;;;;;;;:::i;:::-;;;;;;;40295:9;40305:1;40295:12;;;;;;;:::i;:::-;;;;;:20;;:61;40419:11;;;;40396:10;40407:1;40396:13;;;;;;;:::i;:::-;;;;;:19;;:34;;;;;;;:::i;:::-;;;;;;;40375:9;40385:1;40375:12;;;;;;;:::i;:::-;;;;;:18;;:55;40507:18;;;;40477:10;40488:1;40477:13;;;;;;;:::i;:::-;;;;;:26;;:48;;;;;;;:::i;:::-;;;;;;;40449:9;40459:1;40449:12;;;;;;;:::i;:::-;;;;;:25;;:76;40092:449;40072:3;;40052:513;;;;11930:28644;11744:28830;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;246:180:1:-;305:6;358:2;346:9;337:7;333:23;329:32;326:52;;;374:1;371;364:12;326:52;-1:-1:-1;397:23:1;;246:180;-1:-1:-1;246:180:1:o;657:131::-;-1:-1:-1;;;;;732:31:1;;722:42;;712:70;;778:1;775;768:12;793:247;852:6;905:2;893:9;884:7;880:23;876:32;873:52;;;921:1;918;911:12;873:52;960:9;947:23;979:31;1004:5;979:31;:::i;:::-;1029:5;793:247;-1:-1:-1;;;793:247:1:o;1759:251::-;1843:6;1896:2;1884:9;1875:7;1871:23;1867:32;1864:52;;;1912:1;1909;1902:12;1864:52;1951:7;1946:2;1935:9;1931:18;1928:31;1925:51;;;1972:1;1969;1962:12;1925:51;-1:-1:-1;1995:9:1;1759:251;-1:-1:-1;1759:251:1:o;2503:303::-;2596:5;2619:1;2629:171;2643:4;2640:1;2637:11;2629:171;;;2702:13;;2690:26;;2745:4;2736:14;;;;2773:17;;;;2663:1;2656:9;2629:171;;;2633:3;;2503:303;;:::o;2811:241::-;2991:2;2976:18;;3003:43;2980:9;3028:6;3003:43;:::i;:::-;2811:241;;;;:::o;3294:314::-;3398:5;3421:1;3431:171;3445:4;3442:1;3439:11;3431:171;;;3504:13;;3492:26;;3547:4;3538:14;;;;3575:17;;;;3465:1;3458:9;3431:171;;3613:531;3936:25;;;3992:2;3977:18;;3970:34;;;3923:3;3908:19;;4013:52;4061:2;4046:18;;4038:6;4013:52;:::i;:::-;4074:64;4133:3;4122:9;4118:19;4110:6;4074:64;:::i;:::-;3613:531;;;;;;;:::o;4149:127::-;4210:10;4205:3;4201:20;4198:1;4191:31;4241:4;4238:1;4231:15;4265:4;4262:1;4255:15;4281:255;4353:2;4347:9;4395:6;4383:19;;4432:18;4417:34;;4453:22;;;4414:62;4411:88;;;4479:18;;:::i;:::-;4515:2;4508:22;4281:255;:::o;4541:275::-;4612:2;4606:9;4677:2;4658:13;;-1:-1:-1;;4654:27:1;4642:40;;4712:18;4697:34;;4733:22;;;4694:62;4691:88;;;4759:18;;:::i;:::-;4795:2;4788:22;4541:275;;-1:-1:-1;4541:275:1:o;4821:767::-;4914:6;4967:3;4955:9;4946:7;4942:23;4938:33;4935:53;;;4984:1;4981;4974:12;4935:53;5010:1;5056:7;5049:4;5038:9;5034:20;5030:34;5020:62;;5078:1;5075;5068:12;5020:62;-1:-1:-1;5106:1:1;;5188:20;5165:3;5188:20;:::i;:::-;5177:31;;5228:7;5217:18;;5273:3;5262:9;5258:19;5300:7;5292:6;5289:19;5286:39;;;5321:1;5318;5311:12;5286:39;5345:9;5363:193;5379:6;5374:3;5371:15;5363:193;;;5471:10;;5494:18;;5541:4;5532:14;;;;5396;5363:193;;;-1:-1:-1;5575:7:1;;4821:767;-1:-1:-1;;;;;4821:767:1:o;5593:127::-;5654:10;5649:3;5645:20;5642:1;5635:31;5685:4;5682:1;5675:15;5709:4;5706:1;5699:15;5725:127;5786:10;5781:3;5777:20;5774:1;5767:31;5817:4;5814:1;5807:15;5841:4;5838:1;5831:15;5857:125;5922:9;;;5943:10;;;5940:36;;;5956:18;;:::i;6398:359::-;6583:19;;;6627:2;6618:12;;6611:28;;;;6677:2;6673:15;-1:-1:-1;;6669:53:1;6664:2;6655:12;;6648:75;6748:2;6739:12;;6398:359::o;7164:350::-;-1:-1:-1;;;;;7403:32:1;;7385:51;;7372:3;7357:19;;7445:63;7504:2;7489:18;;7481:6;7445:63;:::i;8688:128::-;8755:9;;;8776:11;;;8773:37;;;8790:18;;:::i;8821:127::-;8882:10;8877:3;8873:20;8870:1;8863:31;8913:4;8910:1;8903:15;8937:4;8934:1;8927:15;8953:112;8985:1;9011;9001:35;;9016:18;;:::i;:::-;-1:-1:-1;9050:9:1;;8953:112::o;9070:375::-;9158:1;9176:5;9190:249;9211:1;9201:8;9198:15;9190:249;;;9261:4;9256:3;9252:14;9246:4;9243:24;9240:50;;;9270:18;;:::i;:::-;9320:1;9310:8;9306:16;9303:49;;;9334:16;;;;9303:49;9417:1;9413:16;;;;;9373:15;;9190:249;;;9070:375;;;;;;:::o;9450:902::-;9499:5;9529:8;9519:80;;-1:-1:-1;9570:1:1;9584:5;;9519:80;9618:4;9608:76;;-1:-1:-1;9655:1:1;9669:5;;9608:76;9700:4;9718:1;9713:59;;;;9786:1;9781:174;;;;9693:262;;9713:59;9743:1;9734:10;;9757:5;;;9781:174;9818:3;9808:8;9805:17;9802:43;;;9825:18;;:::i;:::-;-1:-1:-1;;9881:1:1;9867:16;;9940:5;;9693:262;;10039:2;10029:8;10026:16;10020:3;10014:4;10011:13;10007:36;10001:2;9991:8;9988:16;9983:2;9977:4;9974:12;9970:35;9967:77;9964:203;;;-1:-1:-1;10076:19:1;;;10152:5;;9964:203;10199:42;-1:-1:-1;;10224:8:1;10218:4;10199:42;:::i;:::-;10277:6;10273:1;10269:6;10265:19;10256:7;10253:32;10250:58;;;10288:18;;:::i;:::-;10326:20;;9450:902;-1:-1:-1;;;9450:902:1:o;10357:131::-;10417:5;10446:36;10473:8;10467:4;10446:36;:::i;10493:168::-;10566:9;;;10597;;10614:15;;;10608:22;;10594:37;10584:71;;10635:18;;:::i;10666:339::-;10868:2;10850:21;;;10907:2;10887:18;;;10880:30;-1:-1:-1;;;10941:2:1;10926:18;;10919:45;10996:2;10981:18;;10666:339::o;11363:120::-;11403:1;11429;11419:35;;11434:18;;:::i;:::-;-1:-1:-1;11468:9:1;;11363:120::o;11841:251::-;11911:6;11964:2;11952:9;11943:7;11939:23;11935:32;11932:52;;;11980:1;11977;11970:12;11932:52;12012:9;12006:16;12031:31;12056:5;12031:31;:::i;12509:335::-;-1:-1:-1;;;;;12750:32:1;;12732:51;;12719:3;12704:19;;12833:4;12825:6;12820:2;12805:18;;12792:46;12509:335;;;;;:::o;12849:1050::-;12911:5;12959:6;12947:9;12942:3;12938:19;12934:32;12931:52;;;12979:1;12976;12969:12;12931:52;13001:22;;:::i;:::-;13068:16;;13093:22;;13181:2;13166:18;;;13160:25;13201:14;;;13194:31;13291:2;13276:18;;;13270:25;13311:14;;;13304:31;13401:2;13386:18;;;13380:25;13421:14;;;13414:31;13511:3;13496:19;;;13490:26;13532:15;;;13525:32;13623:3;13608:19;;;13602:26;13644:15;;;13637:32;13735:3;13720:19;;;13714:26;13756:15;;;13749:32;13847:3;13832:19;;;13826:26;13868:15;;;13861:32;;;;-1:-1:-1;12992:31:1;12849:1050;-1:-1:-1;12849:1050:1:o;13904:616::-;13969:5;14022:3;14015:4;14007:6;14003:17;13999:27;13989:55;;14040:1;14037;14030:12;13989:55;14068:1;14151:19;14129:2;14151:19;:::i;:::-;14140:30;;14190:7;14232:3;14224:6;14220:16;14259:3;14251:6;14248:15;14245:35;;;14276:1;14273;14266:12;14245:35;14300:6;14315:174;14331:6;14326:3;14323:15;14315:174;;;14401:43;14440:3;14435;14401:43;:::i;:::-;14389:56;;14474:4;14465:14;;;;14357:6;14348:16;14315:174;;;-1:-1:-1;14507:7:1;;13904:616;-1:-1:-1;;;;;13904:616:1:o;14525:913::-;14671:6;14679;14732:3;14720:9;14711:7;14707:23;14703:33;14700:53;;;14749:1;14746;14739:12;14700:53;14772:59;14823:7;14812:9;14772:59;:::i;:::-;14762:69;;14853:1;14898:7;14892:3;14881:9;14877:19;14873:33;14863:61;;14920:1;14917;14910:12;14863:61;-1:-1:-1;14948:1:1;;15029:19;15007:2;15029:19;:::i;:::-;15018:30;;15068:7;15057:18;;15113:3;15102:9;15098:19;15140:7;15132:6;15129:19;15126:39;;;15161:1;15158;15151:12;15126:39;15200:3;15189:9;15185:19;15213:193;15229:6;15224:3;15221:15;15213:193;;;15321:10;;15344:18;;15391:4;15382:14;;;;15246;15213:193;;;-1:-1:-1;14525:913:1;;15425:7;;-1:-1:-1;14525:913:1;-1:-1:-1;;;;14525:913:1:o;15801:272::-;15915:6;15968:3;15956:9;15947:7;15943:23;15939:33;15936:53;;;15985:1;15982;15975:12;15936:53;16008:59;16059:7;16048:9;16008:59;:::i;16437:481::-;16513:5;16507:12;16502:3;16495:25;16569:4;16562:5;16558:16;16552:23;16545:4;16540:3;16536:14;16529:47;16625:4;16618:5;16614:16;16608:23;16601:4;16596:3;16592:14;16585:47;16681:4;16674:5;16670:16;16664:23;16657:4;16652:3;16648:14;16641:47;16737:4;16730:5;16726:16;16720:23;16713:4;16708:3;16704:14;16697:47;16793:4;16786:5;16782:16;16776:23;16769:4;16764:3;16760:14;16753:47;16849:4;16842:5;16838:16;16832:23;16825:4;16820:3;16816:14;16809:47;16905:4;16898:5;16894:16;16888:23;16881:4;16876:3;16872:14;16865:47;;;16437:481::o;16923:614::-;17181:4;17166:20;;17170:9;17263:6;17139:4;17297:189;17311:4;17308:1;17305:11;17297:189;;;17358:42;17396:3;17387:6;17381:13;17358:42;:::i;:::-;17429:6;17420:16;;;;;17471:4;17459:17;;;;;17331:1;17324:9;17297:189;;;17301:3;;;17524:6;17517:4;17506:9;17502:20;17495:36;16923:614;;;;;:::o;17542:775::-;17656:6;17709:4;17697:9;17688:7;17684:23;17680:34;17677:54;;;17727:1;17724;17717:12;17677:54;17753:1;17799:7;17792:4;17781:9;17777:20;17773:34;17763:62;;17821:1;17818;17811:12;17763:62;-1:-1:-1;17849:1:1;;17931:20;17908:3;17931:20;:::i;:::-;17920:31;;17971:7;17960:18;;18016:4;18005:9;18001:20;18044:7;18036:6;18033:19;18030:39;;;18065:1;18062;18055:12;18030:39;18089:9;18107:178;18123:6;18118:3;18115:15;18107:178;;;18193:47;18232:7;18227:3;18193:47;:::i;:::-;18181:60;;18270:4;18261:14;;;;18149:6;18140:16;18107:178;;18322:325;18419:5;18442:1;18452:189;18466:4;18463:1;18460:11;18452:189;;;18513:42;18551:3;18542:6;18536:13;18513:42;:::i;:::-;18584:6;18575:16;;;;;18626:4;18614:17;;;;;18486:1;18479:9;18452:189;;18652:289;18874:4;18859:20;;18888:47;18863:9;18917:6;18888:47;:::i;18946:619::-;19040:6;19048;19056;19064;19117:3;19105:9;19096:7;19092:23;19088:33;19085:53;;;19134:1;19131;19124:12;19085:53;19179:16;;19285:2;19270:18;;19264:25;19360:2;19345:18;;19339:25;19179:16;;-1:-1:-1;19264:25:1;-1:-1:-1;19402:15:1;;19395:23;19383:36;;19373:64;;19433:1;19430;19423:12;19373:64;19529:2;19514:18;;;;19508:25;18946:619;;;;-1:-1:-1;;;18946:619:1:o;19570:858::-;20060:25;;;20116:2;20101:18;;20094:34;;;20171:14;;20164:22;20159:2;20144:18;;20137:50;20218:2;20203:18;;20196:34;;;20046:4;20031:20;;20239:57;20291:3;20276:19;;20268:6;20239:57;:::i;:::-;20305:54;20353:4;20342:9;20338:20;20330:6;20305:54;:::i;:::-;20368;20416:4;20405:9;20401:20;20393:6;20368:54;:::i;:::-;19570:858;;;;;;;;;;:::o;22934:773::-;23029:6;23082:4;23070:9;23061:7;23057:23;23053:34;23050:54;;;23100:1;23097;23090:12;23050:54;23126:1;23172:7;23165:4;23154:9;23150:20;23146:34;23136:62;;23194:1;23191;23184:12;23136:62;-1:-1:-1;23222:1:1;;23281:4;23305:21;23281:4;23305:21;:::i;:::-;23294:32;-1:-1:-1;23294:32:1;;-1:-1:-1;23376:20:1;;23408:19;;;23405:39;;;23440:1;23437;23430:12;23712:1171;23980:2;23992:21;;;24062:13;;23965:18;;;24084:22;;;23932:4;;24175;24163:17;;;24137:2;24122:18;;;23932:4;24208:199;24222:6;24219:1;24216:13;24208:199;;;24287:13;;-1:-1:-1;;;;;24283:39:1;24271:52;;24352:4;24380:17;;;;24343:14;;;;24319:1;24237:9;24208:199;;;-1:-1:-1;;24445:19:1;;;24438:4;24423:20;;;24416:49;;;;24515:13;;24537:21;;;24576:14;;;;-1:-1:-1;24615:17:1;;;24652:1;24662:193;24678:8;24673:3;24670:17;24662:193;;;24747:15;;24733:30;;24796:4;24785:16;;;;24826:19;;;;24706:1;24697:11;24662:193;;;-1:-1:-1;24872:5:1;;23712:1171;-1:-1:-1;;;;;;23712:1171:1:o;24888:980::-;24983:6;25036:2;25024:9;25015:7;25011:23;25007:32;25004:52;;;25052:1;25049;25042:12;25004:52;25085:9;25079:16;25118:18;25110:6;25107:30;25104:50;;;25150:1;25147;25140:12;25104:50;25173:22;;25226:4;25218:13;;25214:27;-1:-1:-1;25204:55:1;;25255:1;25252;25245:12;25204:55;25288:2;25282:9;25314:18;25306:6;25303:30;25300:56;;;25336:18;;:::i;:::-;25382:6;25379:1;25375:14;25409:28;25433:2;25429;25425:11;25409:28;:::i;:::-;25471:19;;;25515:2;25545:11;;;25541:20;;;25506:12;;;;25573:19;;;25570:39;;;25605:1;25602;25595:12;25570:39;25637:2;25633;25629:11;25618:22;;25649:189;25665:6;25660:3;25657:15;25649:189;;;25755:10;;25778:18;;;25825:2;25682:12;;;;25755:10;;-1:-1:-1;25816:12:1;;;;25649:189;;;25857:5;24888:980;-1:-1:-1;;;;;;;24888:980:1:o
Swarm Source
ipfs://4a9a954f86c7b3f9abcd6854fe81405b9e70f155689d6857250eaa7a6acff8d4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.