Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 807 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Q6_2Emo Explain ... | 9092653 | 50 secs ago | IN | 0 S | 0.00296516 | ||||
Q6_1Emo Fight An... | 9092346 | 2 mins ago | IN | 0 S | 0.02517086 | ||||
Q6_2Emo Explain ... | 9089011 | 20 mins ago | IN | 0 S | 0.00489133 | ||||
Q6_1Emo Fight An... | 9088725 | 21 mins ago | IN | 0 S | 0.04716369 | ||||
Q6_2Emo Explain ... | 9087878 | 26 mins ago | IN | 0 S | 0.00296516 | ||||
Q6_1Emo Fight An... | 9087722 | 27 mins ago | IN | 0 S | 0.02518037 | ||||
Q6_2Emo Explain ... | 9086682 | 33 mins ago | IN | 0 S | 0.00296516 | ||||
Q6_1Emo Fight An... | 9086420 | 34 mins ago | IN | 0 S | 0.0251812 | ||||
Q6_2Emo Explain ... | 9085641 | 38 mins ago | IN | 0 S | 0.00296516 | ||||
Q6_1Emo Fight An... | 9085502 | 39 mins ago | IN | 0 S | 0.02517163 | ||||
Q6_2Emo Explain ... | 9085094 | 41 mins ago | IN | 0 S | 0.00390816 | ||||
Q7_1Yuka Meet At... | 9082615 | 55 mins ago | IN | 0 S | 0.0027827 | ||||
Q7_1Yuka Meet At... | 9082281 | 57 mins ago | IN | 0 S | 0.0071128 | ||||
Q8_1Sam Open Res... | 9082145 | 58 mins ago | IN | 0 S | 0.00465518 | ||||
Q6_2Emo Explain ... | 9082021 | 58 mins ago | IN | 0 S | 0.00296516 | ||||
Q6_1Emo Fight An... | 9081880 | 1 hrs ago | IN | 0 S | 0.02519907 | ||||
Q6_2Emo Explain ... | 9080230 | 1 hr ago | IN | 0 S | 0.00827283 | ||||
Q6_1Emo Fight An... | 9080077 | 1 hr ago | IN | 0 S | 0.03318811 | ||||
Q6_2Emo Explain ... | 9078397 | 1 hr ago | IN | 0 S | 0.00358518 | ||||
Q8_1Sam Open Res... | 9077974 | 1 hr ago | IN | 0 S | 0.0041183 | ||||
Q6_1Emo Fight An... | 9077800 | 1 hr ago | IN | 0 S | 0.03154209 | ||||
Q6_2Emo Explain ... | 9077227 | 1 hr ago | IN | 0 S | 0.00296516 | ||||
Q6_2Emo Explain ... | 9076982 | 1 hr ago | IN | 0 S | 0.00269545 | ||||
Q6_1Emo Fight An... | 9076969 | 1 hr ago | IN | 0 S | 0.02518934 | ||||
Q6_2Emo Explain ... | 9076056 | 1 hr ago | IN | 0 S | 0.00296516 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
FARPG_QuestSystemV2
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) { 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 - QuestSystemV2.sol pragma solidity ^0.8.19; //_______________________________________________________________ // ___ __ __ _ ___ _ ___ _ __ // | _ )\ \ / / _ | | / _ \ _ | | / _ \ (_)\ \ // | _ \ \ V / | || || (_) || || || (_) | _ | | // |___/ |_| \__/ \___/ \__/ \___/ ( ) | | // |/ /_/ //_______________________________________________________________ // Interface for accessing Storage //------------------------------------------------------------------- // _____ _ _ _______ ______ _____ ______ _____ ______ // |_ _| \ | |__ __| ____| __ \| ____/\ / ____| ____| // | | | \| | | | | |__ | |__) | |__ / \ | | | |__ // | | | . ` | | | | __| | _ /| __/ /\ \| | | __| // _| |_| |\ | | | | |____| | \ \| | / ____ \ |____| |____ // |_____|_| \_| |_| |______|_| \_\_|/_/ \_\_____|______| // //------------------------------------------------------------------- interface BattleV4 { //enum Weather { Sunny, Cloudy, Rainy, Thunderstorm, Snowy, Aurora, BloodMoon, NONE } function BattleV4_3v3(S.Unit[6] memory _UnitGroup) external returns (uint BattleRhythm, uint bit, bool Won, uint randret); function Calibrate(uint index) external returns (uint, uint, bool, uint); } contract FARPG_QuestSystemV2 is ReentrancyGuard ,Ownable { IFARPG_Storage public contractStorage; BattleV4 public Battle; constructor() { } event StatChangedResult(S.Unit AfterUnit, S.Status AfterStatus, S.Time AfterTime); event BattleResultV2(uint BattleRythm, uint bit, bool Won, uint randret, S.Unit[6] unitgroup,uint[3] oponentid, uint[3] attackerid); //------------------------------------------------------------------- // _____ _ ____ ____ _ __ __ // / ____| | / __ \| _ \ /\ | | \ \ / / // | | __| | | | | | |_) | / \ | | \ \ / / // | | |_ | | | | | | _ < / /\ \ | | \ \/ / // | |__| | |___| |__| | |_) / ____ \| |____ \ / _ // \_____|______\____/|____/_/ \_\______| \/ (_) // //------------------------------------------------------------------- uint private QuesttoQuestDelay3 = 3 seconds; //prevent a bot to finish the quest too fast uint private QuesttoQuestDelay10 = 10 seconds; //prevent a bot to finish the quest too fast mapping (address => uint) private reentrant_time; uint constant PRICE_TOOPENBOX = 5 ether; //dont have to change, as this will not happened since First quest only run once. Even is, that is attempt to exploit. 5 FTM will prevent that. uint constant TIME_INITIALSTAMINA = 24 hours; //initial stamina uint constant TIME_INITIALENDURANCE = 3 hours; //initial endurance/hunger string constant MESSAGE_STANDARDQUESTCONDITIONUNMATCHED = "Quest requirement unmatched."; //--------------------------------------------------------- // _____ __ __ _____ _ _ // /\ | __ \| \/ |_ _| \ | | // / \ | | | | \ / | | | | \| | // / /\ \ | | | | |\/| | | | | . ` | // / ____ \| |__| | | | |_| |_| |\ | // /_/ \_\_____/|_| |_|_____|_| \_| // //--------------------------------------------------------- function updateStorageContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractStorage = IFARPG_Storage(_newContractAAddress); } function updateBattleV4Address(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); Battle = BattleV4(_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(msg.sender).transfer(address(this).balance); } //--------------------------------------------------------- // // _____ _______ _____ _______ // / ____|__ __|/\ | __ \__ __| // | (___ | | / \ | |__) | | | // \___ \ | | / /\ \ | _ / | | // ____) | | |/ ____ \| | \ \ | | // |_____/ |_/_/ \_\_| \_\ |_| // //--------------------------------------------------------- //--------- sub functions --------------- function accountAddressToProceed() public view returns (address) { address playerAddress = contractStorage.personalwallet(msg.sender); if (playerAddress == address(0)) { return msg.sender; } else { return playerAddress; } } modifier onlyEOA() { require(!isContract(msg.sender), "Smart contracts not allowed"); _; } function noneReentrant_time(address player, uint delay) internal { require(reentrant_time[player] < block.timestamp ,"Spam prevention activated."); reentrant_time[player] = block.timestamp + delay; } function isContract(address _addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(_addr) } return size > 0; } /////////////////////////////////////// QUEST START ////////////////////////////////////////////////////////////////// uint constant REENTRANT_TIMELIMIT = 2 seconds; // default 2 seconds. means u cannot run the nonreentrant functions >1 time within 3 seconds. uint constant PET_STAMINA_MAX = 24 hours; //maximum stamina even rested for so long uint constant PET_HUNGER_MAX = 24 hours; // if a pet left for very long time. the MAX hunger should be... uint constant ROOKIETOMATURE_BOND = 35 hours; // if Bond more than this, evolve. BUT it is Stamina + Hunger, thus 48hr per day, open Box gave 24+21= 45 hours uint constant MATURETOPERFECT_BOND = 81 hours; // on evolved, you gain max stamina and initial hunger again, means 45hours again. function Q6_1EmoFightAndLetPass(uint[3] calldata attackersID) public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay10); //prevent spam //after completed Michael Simulated Dungeon quest require(contractStorage.getMainQuestProgress(playerAddress,5) >= 2,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); bool AttackerWin; uint BattleRhythm; uint randret; S.Unit[3] memory AttackerUnits; //0,1,2 is Attacker, defender on PvPFULLRecords storage uint[3] memory AttackerIDs; //0,1,2 is Attacker, defender on PvPFULLRecords storage S.Unit[6] memory UnitGroup; //this is a group that will send to battlecontract uint bit; uint[3] memory OpponIDs; (AttackerUnits,AttackerIDs) = contractStorage.getBattleUnit3(playerAddress,attackersID); require(AttackerUnits[0].hp>0 || AttackerUnits[1].hp>0 || AttackerUnits[2].hp>0,"3 empty slots, cannot battle."); //player's Lings UnitGroup[0] = AttackerUnits[0]; UnitGroup[1] = AttackerUnits[1]; UnitGroup[2] = AttackerUnits[2]; //Emo show mercy - use only Grizzleclaw Wombat P1 UnitGroup[3] = S.Unit({ hp: 18000, attack: 3000, defense: 890, speed: 1500, intelligence: 420, genestrength: 10, range: 20, special: 22 }); //buffed for challenge //Emo show mercy, only use 1 Ling. OpponIDs = [uint(22), uint(0), uint(0)]; // Call the BattleV4_3v3 function with matching types (BattleRhythm, bit, AttackerWin, randret) = Battle.BattleV4_3v3(UnitGroup); if (contractStorage.getMainQuestProgress(playerAddress,6) == 0) { contractStorage.setMainQuest(playerAddress,6,1); //lose or win also set complete. } emit BattleResultV2(BattleRhythm, bit, AttackerWin, randret,UnitGroup,OpponIDs,AttackerIDs); //This suppose to be sure lose battle. but even lose, will complete the quest } function Q6_2EmoExplainPVP() public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,6) == 1,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); contractStorage.setMainQuest(playerAddress,6,2); } function Q7_1YukaMeetAtShine() public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,6) >= 1,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); if (contractStorage.getMainQuestProgress(playerAddress,7) == 0) { contractStorage.setMainQuest(playerAddress,7,1); } } function Q7_2YukaExplainTutorial() public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,7) == 1,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); contractStorage.setMainQuest(playerAddress,7,2); } function Q8_1SamOpenResearchCenter() public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,6) >= 1,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); if (contractStorage.getMainQuestProgress(playerAddress,8) == 0) { contractStorage.setMainQuest(playerAddress,8,1); } } function Q8_2SamExplainTransformInfuseTutorial() public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,8) == 1,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); contractStorage.setMainQuest(playerAddress,8,2); } function Q9_1TopenAdvertistment() public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,5) >= 1,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); if (contractStorage.getMainQuestProgress(playerAddress,9) == 0) { contractStorage.setMainQuest(playerAddress,9,1); } } }
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":[{"internalType":"uint256[3]","name":"attackersID","type":"uint256[3]"}],"name":"Q6_1EmoFightAndLetPass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Q6_2EmoExplainPVP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Q7_1YukaMeetAtShine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Q7_2YukaExplainTutorial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Q8_1SamOpenResearchCenter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Q8_2SamExplainTransformInfuseTutorial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Q9_1TopenAdvertistment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accountAddressToProceed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractStorage","outputs":[{"internalType":"contract IFARPG_Storage","name":"","type":"address"}],"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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateBattleV4Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateStorageContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526003600455600a6005553480156018575f5ffd5b5060015f556024336028565b6079565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b611763806100865f395ff3fe608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c8063a081623811610093578063c6a8fe6d11610063578063c6a8fe6d146101bd578063f2fde38b146101c5578063f7c6dad6146101d8578063ff9067d5146101e0575f5ffd5b8063a081623814610187578063a0bdcda81461018f578063b9f54f2c14610197578063c6643535146101aa575f5ffd5b806357ba60e0116100ce57806357ba60e014610153578063715018a6146101665780638da5cb5b1461016e57806396a33dc51461017f575f5ffd5b80630549b27e146100ff57806319858da31461012e578063324744f2146101415780633ccfd60b1461014b575b5f5ffd5b600254610112906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b600354610112906001600160a01b031681565b6101496101e8565b005b6101496103b5565b610149610161366004611308565b610438565b6101496104aa565b6001546001600160a01b0316610112565b6101126104bb565b610149610545565b610149610653565b6101496101a5366004611308565b610761565b6101496101b836600461132a565b6107d3565b610149610be3565b6101496101d3366004611308565b610d6d565b610149610de3565b610149610ef1565b6101f061107b565b5f6101f96104bb565b9050610207816004546110d2565b600254604051636afb050760e11b81526001916001600160a01b03169063d5f60a0e9061023b90859060069060040161134f565b602060405180830381865afa158015610256573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027a9190611368565b60ff1610156040518060400160405280601c81526020015f51602061170e5f395f51905f52815250906102c95760405162461bcd60e51b81526004016102c09190611388565b60405180910390fd5b50600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e906102fd90849060089060040161134f565b602060405180830381865afa158015610318573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061033c9190611368565b60ff165f036103a95760025460405163b074a63560e01b81526001600160a01b039091169063b074a6359061037b9084906008906001906004016113bd565b5f604051808303815f87803b158015610392575f5ffd5b505af11580156103a4573d5f5f3e3d5ffd5b505050505b506103b360015f55565b565b6103bd611161565b5f471161040c5760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f000000000000000060448201526064016102c0565b60405133904780156108fc02915f818181858888f19350505050158015610435573d5f5f3e3d5ffd5b50565b610440611161565b6001600160a01b0381166104885760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016102c0565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6104b2611161565b6103b35f6111bb565b6002546040516302e6c26360e11b81523360048201525f9182916001600160a01b03909116906305cd84c690602401602060405180830381865afa158015610505573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061052991906113e1565b90506001600160a01b038116610540573391505090565b919050565b61054d61107b565b5f6105566104bb565b9050610564816004546110d2565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061059790849060089060040161134f565b602060405180830381865afa1580156105b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d69190611368565b60ff166001146040518060400160405280601c81526020015f51602061170e5f395f51905f528152509061061d5760405162461bcd60e51b81526004016102c09190611388565b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a6359161037b918591600891906004016113bd565b61065b61107b565b5f6106646104bb565b9050610672816004546110d2565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e906106a590849060079060040161134f565b602060405180830381865afa1580156106c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e49190611368565b60ff166001146040518060400160405280601c81526020015f51602061170e5f395f51905f528152509061072b5760405162461bcd60e51b81526004016102c09190611388565b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a6359161037b918591600791906004016113bd565b610769611161565b6001600160a01b0381166107b15760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016102c0565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6107db61107b565b5f6107e46104bb565b90506107f2816005546110d2565b60028054604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061082690859060059060040161134f565b602060405180830381865afa158015610841573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108659190611368565b60ff1610156040518060400160405280601c81526020015f51602061170e5f395f51905f52815250906108ab5760405162461bcd60e51b81526004016102c09190611388565b505f5f5f6108b761120c565b6108bf611271565b6108c761128f565b5f6108d0611271565b60025460405163a69a496f60e01b81526001600160a01b039091169063a69a496f90610902908c908e906004016113fc565b61036060405180830381865afa15801561091e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094291906114d9565b815151919650945015158061095b575060208501515115155b8061096a575060408501515115155b6109b65760405162461bcd60e51b815260206004820152601d60248201527f3320656d70747920736c6f74732c2063616e6e6f7420626174746c652e00000060448201526064016102c0565b508351825260208085015181840152604080860151818501528051610100810182526146508152610bb88184015261037a818301526105dc6060808301919091526101a46080830152600a60a0830152601460c0830152601660e0830181905281870192909252825190810183529081525f928101839052808201929092526003549051639d392e5b60e01b81526001600160a01b0390911690639d392e5b90610a64908690600401611623565b6080604051808303815f875af1158015610a80573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa49190611638565b600254604051636afb050760e11b8152929c50939a5098509093506001600160a01b039091169063d5f60a0e90610ae2908c9060069060040161134f565b602060405180830381865afa158015610afd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b219190611368565b60ff165f03610b8e5760025460405163b074a63560e01b81526001600160a01b039091169063b074a63590610b60908c906006906001906004016113bd565b5f604051808303815f87803b158015610b77575f5ffd5b505af1158015610b89573d5f5f3e3d5ffd5b505050505b7fed965831ff58bcf473e4bcfc1e0f5325bbb0c898866ca137ca39639ad40f3ca487838a8987868a604051610bc9979695949392919061169b565b60405180910390a150505050505050505061043560015f55565b610beb61107b565b5f610bf46104bb565b9050610c02816004546110d2565b600254604051636afb050760e11b81526001916001600160a01b03169063d5f60a0e90610c3690859060059060040161134f565b602060405180830381865afa158015610c51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c759190611368565b60ff1610156040518060400160405280601c81526020015f51602061170e5f395f51905f5281525090610cbb5760405162461bcd60e51b81526004016102c09190611388565b50600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90610cef90849060099060040161134f565b602060405180830381865afa158015610d0a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2e9190611368565b60ff165f036103a95760025460405163b074a63560e01b81526001600160a01b039091169063b074a6359061037b9084906009906001906004016113bd565b610d75611161565b6001600160a01b038116610dda5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102c0565b610435816111bb565b610deb61107b565b5f610df46104bb565b9050610e02816004546110d2565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90610e3590849060069060040161134f565b602060405180830381865afa158015610e50573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e749190611368565b60ff166001146040518060400160405280601c81526020015f51602061170e5f395f51905f5281525090610ebb5760405162461bcd60e51b81526004016102c09190611388565b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a6359161037b918591600691906004016113bd565b610ef961107b565b5f610f026104bb565b9050610f10816004546110d2565b600254604051636afb050760e11b81526001916001600160a01b03169063d5f60a0e90610f4490859060069060040161134f565b602060405180830381865afa158015610f5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f839190611368565b60ff1610156040518060400160405280601c81526020015f51602061170e5f395f51905f5281525090610fc95760405162461bcd60e51b81526004016102c09190611388565b50600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90610ffd90849060079060040161134f565b602060405180830381865afa158015611018573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103c9190611368565b60ff165f036103a95760025460405163b074a63560e01b81526001600160a01b039091169063b074a6359061037b9084906007906001906004016113bd565b60025f54036110cc5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102c0565b60025f55565b6001600160a01b0382165f9081526006602052604090205442116111385760405162461bcd60e51b815260206004820152601a60248201527f5370616d2070726576656e74696f6e206163746976617465642e00000000000060448201526064016102c0565b61114281426116ee565b6001600160a01b039092165f9081526006602052604090209190915550565b6001546001600160a01b031633146103b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c0565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60405180606001604052806003905b61125b6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b81526020019060019003908161121b5790505090565b60405180606001604052806003906020820280368337509192915050565b6040518060c001604052806006905b6112de6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b81526020019060019003908161129e5790505090565b6001600160a01b0381168114610435575f5ffd5b5f60208284031215611318575f5ffd5b8135611323816112f4565b9392505050565b5f6060828403121561133a575f5ffd5b82606083011115611349575f5ffd5b50919050565b6001600160a01b03929092168252602082015260400190565b5f60208284031215611378575f5ffd5b815160ff81168114611323575f5ffd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b03939093168352602083019190915260ff16604082015260600190565b5f602082840312156113f1575f5ffd5b8151611323816112f4565b6001600160a01b03831681526080810160608360208401379392505050565b634e487b7160e01b5f52604160045260245ffd5b604051610100810167ffffffffffffffff811182821017156114535761145361141b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156114825761148261141b565b604052919050565b5f82601f830112611499575f5ffd5b6114a36060611459565b8060608401858111156114b4575f5ffd5b845b818110156114ce5780518452602093840193016114b6565b509095945050505050565b5f5f61036083850312156114eb575f5ffd5b83601f8401126114f9575f5ffd5b606061150481611459565b80610300860187811115611516575f5ffd5b865b8181101561159157610100818a031215611530575f5ffd5b61153861142f565b81518152602080830151818301526040808401519083015286830151878301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152908552939093019261010001611518565b5081955061159f888261148a565b9450505050509250929050565b805f5b600681101561161d578151805185526020810151602086015260408101516040860152606081015160608601526080810151608086015260a081015160a086015260c081015160c086015260e081015160e086015250610100840193506020820191506001810190506115af565b50505050565b610600810161163282846115ac565b92915050565b5f5f5f5f6080858703121561164b575f5ffd5b84516020860151604087015191955093508015158114611669575f5ffd5b6060959095015193969295505050565b805f5b600381101561161d57815184526020938401939091019060010161167c565b8781526020810187905285151560408201526060810185905261074081016116c660808301866115ac565b6116d4610680830185611679565b6116e26106e0830184611679565b98975050505050505050565b8082018082111561163257634e487b7160e01b5f52601160045260245ffdfe517565737420726571756972656d656e7420756e6d6174636865642e00000000a264697066735822122071ec7cb251a7a4a313a3f733f19752058b14b02fe37180233d972fb7025ef69064736f6c634300081c0033
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c8063a081623811610093578063c6a8fe6d11610063578063c6a8fe6d146101bd578063f2fde38b146101c5578063f7c6dad6146101d8578063ff9067d5146101e0575f5ffd5b8063a081623814610187578063a0bdcda81461018f578063b9f54f2c14610197578063c6643535146101aa575f5ffd5b806357ba60e0116100ce57806357ba60e014610153578063715018a6146101665780638da5cb5b1461016e57806396a33dc51461017f575f5ffd5b80630549b27e146100ff57806319858da31461012e578063324744f2146101415780633ccfd60b1461014b575b5f5ffd5b600254610112906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b600354610112906001600160a01b031681565b6101496101e8565b005b6101496103b5565b610149610161366004611308565b610438565b6101496104aa565b6001546001600160a01b0316610112565b6101126104bb565b610149610545565b610149610653565b6101496101a5366004611308565b610761565b6101496101b836600461132a565b6107d3565b610149610be3565b6101496101d3366004611308565b610d6d565b610149610de3565b610149610ef1565b6101f061107b565b5f6101f96104bb565b9050610207816004546110d2565b600254604051636afb050760e11b81526001916001600160a01b03169063d5f60a0e9061023b90859060069060040161134f565b602060405180830381865afa158015610256573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027a9190611368565b60ff1610156040518060400160405280601c81526020015f51602061170e5f395f51905f52815250906102c95760405162461bcd60e51b81526004016102c09190611388565b60405180910390fd5b50600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e906102fd90849060089060040161134f565b602060405180830381865afa158015610318573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061033c9190611368565b60ff165f036103a95760025460405163b074a63560e01b81526001600160a01b039091169063b074a6359061037b9084906008906001906004016113bd565b5f604051808303815f87803b158015610392575f5ffd5b505af11580156103a4573d5f5f3e3d5ffd5b505050505b506103b360015f55565b565b6103bd611161565b5f471161040c5760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f000000000000000060448201526064016102c0565b60405133904780156108fc02915f818181858888f19350505050158015610435573d5f5f3e3d5ffd5b50565b610440611161565b6001600160a01b0381166104885760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016102c0565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6104b2611161565b6103b35f6111bb565b6002546040516302e6c26360e11b81523360048201525f9182916001600160a01b03909116906305cd84c690602401602060405180830381865afa158015610505573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061052991906113e1565b90506001600160a01b038116610540573391505090565b919050565b61054d61107b565b5f6105566104bb565b9050610564816004546110d2565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061059790849060089060040161134f565b602060405180830381865afa1580156105b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d69190611368565b60ff166001146040518060400160405280601c81526020015f51602061170e5f395f51905f528152509061061d5760405162461bcd60e51b81526004016102c09190611388565b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a6359161037b918591600891906004016113bd565b61065b61107b565b5f6106646104bb565b9050610672816004546110d2565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e906106a590849060079060040161134f565b602060405180830381865afa1580156106c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e49190611368565b60ff166001146040518060400160405280601c81526020015f51602061170e5f395f51905f528152509061072b5760405162461bcd60e51b81526004016102c09190611388565b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a6359161037b918591600791906004016113bd565b610769611161565b6001600160a01b0381166107b15760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016102c0565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6107db61107b565b5f6107e46104bb565b90506107f2816005546110d2565b60028054604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061082690859060059060040161134f565b602060405180830381865afa158015610841573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108659190611368565b60ff1610156040518060400160405280601c81526020015f51602061170e5f395f51905f52815250906108ab5760405162461bcd60e51b81526004016102c09190611388565b505f5f5f6108b761120c565b6108bf611271565b6108c761128f565b5f6108d0611271565b60025460405163a69a496f60e01b81526001600160a01b039091169063a69a496f90610902908c908e906004016113fc565b61036060405180830381865afa15801561091e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094291906114d9565b815151919650945015158061095b575060208501515115155b8061096a575060408501515115155b6109b65760405162461bcd60e51b815260206004820152601d60248201527f3320656d70747920736c6f74732c2063616e6e6f7420626174746c652e00000060448201526064016102c0565b508351825260208085015181840152604080860151818501528051610100810182526146508152610bb88184015261037a818301526105dc6060808301919091526101a46080830152600a60a0830152601460c0830152601660e0830181905281870192909252825190810183529081525f928101839052808201929092526003549051639d392e5b60e01b81526001600160a01b0390911690639d392e5b90610a64908690600401611623565b6080604051808303815f875af1158015610a80573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa49190611638565b600254604051636afb050760e11b8152929c50939a5098509093506001600160a01b039091169063d5f60a0e90610ae2908c9060069060040161134f565b602060405180830381865afa158015610afd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b219190611368565b60ff165f03610b8e5760025460405163b074a63560e01b81526001600160a01b039091169063b074a63590610b60908c906006906001906004016113bd565b5f604051808303815f87803b158015610b77575f5ffd5b505af1158015610b89573d5f5f3e3d5ffd5b505050505b7fed965831ff58bcf473e4bcfc1e0f5325bbb0c898866ca137ca39639ad40f3ca487838a8987868a604051610bc9979695949392919061169b565b60405180910390a150505050505050505061043560015f55565b610beb61107b565b5f610bf46104bb565b9050610c02816004546110d2565b600254604051636afb050760e11b81526001916001600160a01b03169063d5f60a0e90610c3690859060059060040161134f565b602060405180830381865afa158015610c51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c759190611368565b60ff1610156040518060400160405280601c81526020015f51602061170e5f395f51905f5281525090610cbb5760405162461bcd60e51b81526004016102c09190611388565b50600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90610cef90849060099060040161134f565b602060405180830381865afa158015610d0a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2e9190611368565b60ff165f036103a95760025460405163b074a63560e01b81526001600160a01b039091169063b074a6359061037b9084906009906001906004016113bd565b610d75611161565b6001600160a01b038116610dda5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102c0565b610435816111bb565b610deb61107b565b5f610df46104bb565b9050610e02816004546110d2565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90610e3590849060069060040161134f565b602060405180830381865afa158015610e50573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e749190611368565b60ff166001146040518060400160405280601c81526020015f51602061170e5f395f51905f5281525090610ebb5760405162461bcd60e51b81526004016102c09190611388565b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a6359161037b918591600691906004016113bd565b610ef961107b565b5f610f026104bb565b9050610f10816004546110d2565b600254604051636afb050760e11b81526001916001600160a01b03169063d5f60a0e90610f4490859060069060040161134f565b602060405180830381865afa158015610f5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f839190611368565b60ff1610156040518060400160405280601c81526020015f51602061170e5f395f51905f5281525090610fc95760405162461bcd60e51b81526004016102c09190611388565b50600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90610ffd90849060079060040161134f565b602060405180830381865afa158015611018573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103c9190611368565b60ff165f036103a95760025460405163b074a63560e01b81526001600160a01b039091169063b074a6359061037b9084906007906001906004016113bd565b60025f54036110cc5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102c0565b60025f55565b6001600160a01b0382165f9081526006602052604090205442116111385760405162461bcd60e51b815260206004820152601a60248201527f5370616d2070726576656e74696f6e206163746976617465642e00000000000060448201526064016102c0565b61114281426116ee565b6001600160a01b039092165f9081526006602052604090209190915550565b6001546001600160a01b031633146103b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c0565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60405180606001604052806003905b61125b6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b81526020019060019003908161121b5790505090565b60405180606001604052806003906020820280368337509192915050565b6040518060c001604052806006905b6112de6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b81526020019060019003908161129e5790505090565b6001600160a01b0381168114610435575f5ffd5b5f60208284031215611318575f5ffd5b8135611323816112f4565b9392505050565b5f6060828403121561133a575f5ffd5b82606083011115611349575f5ffd5b50919050565b6001600160a01b03929092168252602082015260400190565b5f60208284031215611378575f5ffd5b815160ff81168114611323575f5ffd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b03939093168352602083019190915260ff16604082015260600190565b5f602082840312156113f1575f5ffd5b8151611323816112f4565b6001600160a01b03831681526080810160608360208401379392505050565b634e487b7160e01b5f52604160045260245ffd5b604051610100810167ffffffffffffffff811182821017156114535761145361141b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156114825761148261141b565b604052919050565b5f82601f830112611499575f5ffd5b6114a36060611459565b8060608401858111156114b4575f5ffd5b845b818110156114ce5780518452602093840193016114b6565b509095945050505050565b5f5f61036083850312156114eb575f5ffd5b83601f8401126114f9575f5ffd5b606061150481611459565b80610300860187811115611516575f5ffd5b865b8181101561159157610100818a031215611530575f5ffd5b61153861142f565b81518152602080830151818301526040808401519083015286830151878301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152908552939093019261010001611518565b5081955061159f888261148a565b9450505050509250929050565b805f5b600681101561161d578151805185526020810151602086015260408101516040860152606081015160608601526080810151608086015260a081015160a086015260c081015160c086015260e081015160e086015250610100840193506020820191506001810190506115af565b50505050565b610600810161163282846115ac565b92915050565b5f5f5f5f6080858703121561164b575f5ffd5b84516020860151604087015191955093508015158114611669575f5ffd5b6060959095015193969295505050565b805f5b600381101561161d57815184526020938401939091019060010161167c565b8781526020810187905285151560408201526060810185905261074081016116c660808301866115ac565b6116d4610680830185611679565b6116e26106e0830184611679565b98975050505050505050565b8082018082111561163257634e487b7160e01b5f52601160045260245ffdfe517565737420726571756972656d656e7420756e6d6174636865642e00000000a264697066735822122071ec7cb251a7a4a313a3f733f19752058b14b02fe37180233d972fb7025ef69064736f6c634300081c0033
Deployed Bytecode Sourcemap
89792:10009:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89856:37;;;;;-1:-1:-1;;;;;89856:37:0;;;;;;-1:-1:-1;;;;;202:32:1;;;184:51;;172:2;157:18;89856:37:0;;;;;;;89900:22;;;;;-1:-1:-1;;;;;89900:22:0;;;98370:494;;;:::i;:::-;;92500:257;;;:::i;92283:211::-;;;;;;:::i;:::-;;:::i;2788:103::-;;;:::i;2140:87::-;2213:6;;-1:-1:-1;;;;;2213:6:0;2140:87;;93342:291;;;:::i;98872:415::-;;;:::i;97960:402::-;;;:::i;92037:234::-;;;;;;:::i;:::-;;:::i;94993:2053::-;;;;;;:::i;:::-;;:::i;99299:489::-;;;:::i;3046:201::-;;;;;;:::i;:::-;;:::i;97054:395::-;;;:::i;97461:491::-;;;:::i;98370:494::-;70926:21;:19;:21::i;:::-;98447::::1;98471:25;:23;:25::i;:::-;98447:49;;98507:52;98526:13;98540:18;;98507;:52::i;:::-;98603:15;::::0;:53:::1;::::0;-1:-1:-1;;;98603:53:0;;98660:1:::1;::::0;-1:-1:-1;;;;;98603:15:0::1;::::0;:36:::1;::::0;:53:::1;::::0;98640:13;;98654:1:::1;::::0;98603:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;;98662:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;98662:39:0::1;;::::0;98595:107:::1;;;;;-1:-1:-1::0;;;98595:107:0::1;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;98719:15:0::1;::::0;:53:::1;::::0;-1:-1:-1;;;98719:53:0;;-1:-1:-1;;;;;98719:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;98756:13;;98770:1:::1;::::0;98719:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;98776:1;98719:58:::0;98715:142:::1;;98797:15;::::0;:47:::1;::::0;-1:-1:-1;;;98797:47:0;;-1:-1:-1;;;;;98797:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;98826:13;;98840:1:::1;::::0;98797:15;;:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;98715:142;98427:437;70970:20:::0;70364:1;71490:7;:22;71307:213;70970:20;98370:494::o;92500:257::-;2026:13;:11;:13::i;:::-;92657:1:::1;92633:21;:25;92625:62;;;::::0;-1:-1:-1;;;92625:62:0;;3176:2:1;92625:62:0::1;::::0;::::1;3158:21:1::0;3215:2;3195:18;;;3188:30;3254:26;3234:18;;;3227:54;3298:18;;92625:62:0::1;2974:348:1::0;92625:62:0::1;92698:51;::::0;92706:10:::1;::::0;92727:21:::1;92698:51:::0;::::1;;;::::0;::::1;::::0;;;92727:21;92706:10;92698:51;::::1;;;;;;;;;;;;;;;;;;;;92500:257::o:0;92283:211::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;92382:34:0;::::1;92374:62;;;::::0;-1:-1:-1;;;92374:62:0;;3529:2:1;92374:62:0::1;::::0;::::1;3511:21:1::0;3568:2;3548:18;;;3541:30;-1:-1:-1;;;3587:18:1;;;3580:45;3642:18;;92374:62:0::1;3327:339:1::0;92374:62:0::1;92447:6;:39:::0;;-1:-1:-1;;;;;;92447:39:0::1;-1:-1:-1::0;;;;;92447:39:0;;;::::1;::::0;;;::::1;::::0;;92283:211::o;2788:103::-;2026:13;:11;:13::i;:::-;2853:30:::1;2880:1;2853:18;:30::i;93342:291::-:0;93443:15;;:42;;-1:-1:-1;;;93443:42:0;;93474:10;93443:42;;;184:51:1;93398:7:0;;;;-1:-1:-1;;;;;93443:15:0;;;;:30;;157:18:1;;93443:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;93419:66;-1:-1:-1;;;;;;93500:27:0;;93496:130;;93551:10;93544:17;;;93342:291;:::o;93496:130::-;93601:13;93342:291;-1:-1:-1;93342:291:0:o;98872:415::-;70926:21;:19;:21::i;:::-;98960::::1;98984:25;:23;:25::i;:::-;98960:49;;99020:52;99039:13;99053:18;;99020;:52::i;:::-;99116:15;::::0;:53:::1;::::0;-1:-1:-1;;;99116:53:0;;-1:-1:-1;;;;;99116:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;99153:13;;99167:1:::1;::::0;99116:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;99173:1;99116:58;99175:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;99175:39:0::1;;::::0;99108:107:::1;;;;;-1:-1:-1::0;;;99108:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;99228:15:0::1;::::0;;:47:::1;::::0;-1:-1:-1;;;99228:47:0;;-1:-1:-1;;;;;99228:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;99257:13;;99271:1:::1;::::0;99228:15;:47:::1;;;:::i;97960:402::-:0;70926:21;:19;:21::i;:::-;98035::::1;98059:25;:23;:25::i;:::-;98035:49;;98095:52;98114:13;98128:18;;98095;:52::i;:::-;98191:15;::::0;:53:::1;::::0;-1:-1:-1;;;98191:53:0;;-1:-1:-1;;;;;98191:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;98228:13;;98242:1:::1;::::0;98191:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;98248:1;98191:58;98250:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;98250:39:0::1;;::::0;98183:107:::1;;;;;-1:-1:-1::0;;;98183:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;98303:15:0::1;::::0;;:47:::1;::::0;-1:-1:-1;;;98303:47:0;;-1:-1:-1;;;;;98303:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;98332:13;;98346:1:::1;::::0;98303:15;:47:::1;;;:::i;92037:234::-:0;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;92144:34:0;::::1;92136:62;;;::::0;-1:-1:-1;;;92136:62:0;;3529:2:1;92136:62:0::1;::::0;::::1;3511:21:1::0;3568:2;3548:18;;;3541:30;-1:-1:-1;;;3587:18:1;;;3580:45;3642:18;;92136:62:0::1;3327:339:1::0;92136:62:0::1;92209:15;:54:::0;;-1:-1:-1;;;;;;92209:54:0::1;-1:-1:-1::0;;;;;92209:54:0;;;::::1;::::0;;;::::1;::::0;;92037:234::o;94993:2053::-;70926:21;:19;:21::i;:::-;95094::::1;95118:25;:23;:25::i;:::-;95094:49;;95154:53;95173:13;95187:19;;95154:18;:53::i;:::-;95357:1;95300:15:::0;;:53:::1;::::0;-1:-1:-1;;;95300:53:0;;-1:-1:-1;;;;;95300:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;95337:13;;95351:1:::1;::::0;95300:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;;95359:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;95359:39:0::1;;::::0;95292:107:::1;;;;;-1:-1:-1::0;;;95292:107:0::1;;;;;;;;:::i;:::-;;95421:16;95448:17;95476:12;95499:30;;:::i;:::-;95596:26;;:::i;:::-;95689;;:::i;:::-;95777:8;95796:23;;:::i;:::-;95860:15;::::0;:57:::1;::::0;-1:-1:-1;;;95860:57:0;;-1:-1:-1;;;;;95860:15:0;;::::1;::::0;:30:::1;::::0;:57:::1;::::0;95891:13;;95905:11;;95860:57:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;95936:16:::0;;:19;95830:87;;-1:-1:-1;95830:87:0;-1:-1:-1;95936:21:0;;;:46:::1;;-1:-1:-1::0;95961:16:0::1;::::0;::::1;::::0;:19;:21;;95936:46:::1;:71;;;-1:-1:-1::0;95986:16:0;;::::1;::::0;:19;:21;;95936:71:::1;95928:112;;;::::0;-1:-1:-1;;;95928:112:0;;9063:2:1;95928:112:0::1;::::0;::::1;9045:21:1::0;9102:2;9082:18;;;9075:30;9141:31;9121:18;;;9114:59;9190:18;;95928:112:0::1;8861:353:1::0;95928:112:0::1;-1:-1:-1::0;96092:16:0;;96077:31;;96092:16:::1;96134::::0;;::::1;::::0;96119:12;;::::1;:31:::0;96176:16;;;::::1;::::0;96161:12;;::::1;:31:::0;96277:123;;::::1;::::0;::::1;::::0;;96290:5:::1;96277:123:::0;;96305:4:::1;96277:123:::0;;::::1;::::0;96320:3:::1;96277:123:::0;;;;96332:4:::1;96277:123:::0;;;;;;;;96352:3:::1;96277:123:::0;;;;96371:2:::1;96277:123:::0;;;;96382:2:::1;96277:123:::0;;;;96395:2:::1;96277:123:::0;;;;;;96262:12;;::::1;:138:::0;;;;96478:39;;;;::::1;::::0;;;;;-1:-1:-1;96478:39:0;;::::1;::::0;;;;;;;;;;96272:1:::1;96635:6:::0;:30;;-1:-1:-1;;;96635:30:0;;-1:-1:-1;;;;;96635:6:0;;::::1;::::0;:19:::1;::::0;:30:::1;::::0;96077:31;;96635:30:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;96680:15;::::0;:53:::1;::::0;-1:-1:-1;;;96680:53:0;;96591:74;;-1:-1:-1;96591:74:0;;-1:-1:-1;96591:74:0;-1:-1:-1;96591:74:0;;-1:-1:-1;;;;;;96680:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;96717:13;;96731:1:::1;::::0;96680:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;96737:1;96680:58:::0;96676:174:::1;;96758:15;::::0;:47:::1;::::0;-1:-1:-1;;;96758:47:0;;-1:-1:-1;;;;;96758:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;96787:13;;96801:1:::1;::::0;96758:15;;:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;96676:174;96865:86;96880:12;96894:3;96899:11;96912:7;96920:9;96930:8;96939:11;96865:86;;;;;;;;;;;;:::i;:::-;;;;;;;;95075:1971;;;;;;;;;70970:20:::0;70364:1;71490:7;:22;71307:213;99299:489;70926:21;:19;:21::i;:::-;99373::::1;99397:25;:23;:25::i;:::-;99373:49;;99433:52;99452:13;99466:18;;99433;:52::i;:::-;99529:15;::::0;:53:::1;::::0;-1:-1:-1;;;99529:53:0;;99586:1:::1;::::0;-1:-1:-1;;;;;99529:15:0::1;::::0;:36:::1;::::0;:53:::1;::::0;99566:13;;99580:1:::1;::::0;99529:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;;99588:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;99588:39:0::1;;::::0;99521:107:::1;;;;;-1:-1:-1::0;;;99521:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;99645:15:0::1;::::0;:53:::1;::::0;-1:-1:-1;;;99645:53:0;;-1:-1:-1;;;;;99645:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;99682:13;;99696:1:::1;::::0;99645:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;99702:1;99645:58:::0;99641:140:::1;;99721:15;::::0;:47:::1;::::0;-1:-1:-1;;;99721:47:0;;-1:-1:-1;;;;;99721:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;99750:13;;99764:1:::1;::::0;99721:15;;:47:::1;;;:::i;3046:201::-:0;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;3135:22:0;::::1;3127:73;;;::::0;-1:-1:-1;;;3127:73:0;;13292:2:1;3127:73:0::1;::::0;::::1;13274:21:1::0;13331:2;13311:18;;;13304:30;13370:34;13350:18;;;13343:62;-1:-1:-1;;;13421:18:1;;;13414:36;13467:19;;3127:73:0::1;13090:402:1::0;3127:73:0::1;3211:28;3230:8;3211:18;:28::i;97054:395::-:0;70926:21;:19;:21::i;:::-;97122::::1;97146:25;:23;:25::i;:::-;97122:49;;97182:52;97201:13;97215:18;;97182;:52::i;:::-;97278:15;::::0;:53:::1;::::0;-1:-1:-1;;;97278:53:0;;-1:-1:-1;;;;;97278:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;97315:13;;97329:1:::1;::::0;97278:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;97335:1;97278:58;97337:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;97337:39:0::1;;::::0;97270:107:::1;;;;;-1:-1:-1::0;;;97270:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;97390:15:0::1;::::0;;:47:::1;::::0;-1:-1:-1;;;97390:47:0;;-1:-1:-1;;;;;97390:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;97419:13;;97433:1:::1;::::0;97390:15;:47:::1;;;:::i;97461:491::-:0;70926:21;:19;:21::i;:::-;97532::::1;97556:25;:23;:25::i;:::-;97532:49;;97592:52;97611:13;97625:18;;97592;:52::i;:::-;97688:15;::::0;:53:::1;::::0;-1:-1:-1;;;97688:53:0;;97745:1:::1;::::0;-1:-1:-1;;;;;97688:15:0::1;::::0;:36:::1;::::0;:53:::1;::::0;97725:13;;97739:1:::1;::::0;97688:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;;97747:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;97747:39:0::1;;::::0;97680:107:::1;;;;;-1:-1:-1::0;;;97680:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;97804:15:0::1;::::0;:53:::1;::::0;-1:-1:-1;;;97804:53:0;;-1:-1:-1;;;;;97804:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;97841:13;;97855:1:::1;::::0;97804:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;97861:1;97804:58:::0;97800:145:::1;;97882:15;::::0;:47:::1;::::0;-1:-1:-1;;;97882:47:0;;-1:-1:-1;;;;;97882:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;97911:13;;97925:1:::1;::::0;97882:15;;:47:::1;;;:::i;71006:293::-:0;70408:1;71140:7;;:19;71132:63;;;;-1:-1:-1;;;71132:63:0;;14449:2:1;71132:63:0;;;14431:21:1;14488:2;14468:18;;;14461:30;14527:33;14507:18;;;14500:61;14578:18;;71132:63:0;14247:355:1;71132:63:0;70408:1;71273:7;:18;71006:293::o;93760:230::-;-1:-1:-1;;;;;93852:22:0;;;;;;:14;:22;;;;;;93877:15;-1:-1:-1;93844:79:0;;;;-1:-1:-1;;;93844:79:0;;14809:2:1;93844:79:0;;;14791:21:1;14848:2;14828:18;;;14821:30;14887:28;14867:18;;;14860:56;14933:18;;93844:79:0;14607:350:1;93844:79:0;93959:23;93977:5;93959:15;:23;:::i;:::-;-1:-1:-1;;;;;93934:22:0;;;;;;;:14;:22;;;;;:48;;;;-1:-1:-1;93760:230:0:o;2305:132::-;2213:6;;-1:-1:-1;;;;;2213:6:0;765:10;2369:23;2361:68;;;;-1:-1:-1;;;2361:68:0;;15391:2:1;2361:68:0;;;15373:21:1;;;15410:18;;;15403:30;15469:34;15449:18;;;15442:62;15521:18;;2361:68:0;15189:356:1;3407:191:0;3500:6;;;-1:-1:-1;;;;;3517:17:0;;;-1:-1:-1;;;;;;3517:17:0;;;;;;;3550:40;;3500:6;;;3517:17;3500:6;;3550:40;;3481:16;;3550:40;3470:128;3407:191;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;472:131:1:-;-1:-1:-1;;;;;547:31:1;;537:42;;527:70;;593:1;590;583:12;608:247;667:6;720:2;708:9;699:7;695:23;691:32;688:52;;;736:1;733;726:12;688:52;775:9;762:23;794:31;819:5;794:31;:::i;:::-;844:5;608:247;-1:-1:-1;;;608:247:1:o;1068:251::-;1152:6;1205:2;1193:9;1184:7;1180:23;1176:32;1173:52;;;1221:1;1218;1211:12;1173:52;1260:7;1255:2;1244:9;1240:18;1237:31;1234:51;;;1281:1;1278;1271:12;1234:51;-1:-1:-1;1304:9:1;1068:251;-1:-1:-1;1068:251:1:o;1324:282::-;-1:-1:-1;;;;;1524:32:1;;;;1506:51;;1588:2;1573:18;;1566:34;1494:2;1479:18;;1324:282::o;1611:273::-;1679:6;1732:2;1720:9;1711:7;1707:23;1703:32;1700:52;;;1748:1;1745;1738:12;1700:52;1780:9;1774:16;1830:4;1823:5;1819:16;1812:5;1809:27;1799:55;;1850:1;1847;1840:12;1889:418;2038:2;2027:9;2020:21;2001:4;2070:6;2064:13;2113:6;2108:2;2097:9;2093:18;2086:34;2172:6;2167:2;2159:6;2155:15;2150:2;2139:9;2135:18;2129:50;2228:1;2223:2;2214:6;2203:9;2199:22;2195:31;2188:42;2298:2;2291;2287:7;2282:2;2274:6;2270:15;2266:29;2255:9;2251:45;2247:54;2239:62;;;1889:418;;;;:::o;2599:370::-;-1:-1:-1;;;;;2833:32:1;;;;2815:51;;2897:2;2882:18;;2875:34;;;;2957:4;2945:17;2940:2;2925:18;;2918:45;2803:2;2788:18;;2599:370::o;3671:251::-;3741:6;3794:2;3782:9;3773:7;3769:23;3765:32;3762:52;;;3810:1;3807;3800:12;3762:52;3842:9;3836:16;3861:31;3886:5;3861:31;:::i;5251:335::-;-1:-1:-1;;;;;5492:32:1;;5474:51;;5461:3;5446:19;;5575:4;5567:6;5562:2;5547:18;;5534:46;5251:335;;;;;:::o;5591:127::-;5652:10;5647:3;5643:20;5640:1;5633:31;5683:4;5680:1;5673:15;5707:4;5704:1;5697:15;5723:255;5795:2;5789:9;5837:6;5825:19;;5874:18;5859:34;;5895:22;;;5856:62;5853:88;;;5921:18;;:::i;:::-;5957:2;5950:22;5723:255;:::o;5983:275::-;6054:2;6048:9;6119:2;6100:13;;-1:-1:-1;;6096:27:1;6084:40;;6154:18;6139:34;;6175:22;;;6136:62;6133:88;;;6201:18;;:::i;:::-;6237:2;6230:22;5983:275;;-1:-1:-1;5983:275:1:o;6263:620::-;6324:5;6377:3;6370:4;6362:6;6358:17;6354:27;6344:55;;6395:1;6392;6385:12;6344:55;6496:19;6474:2;6496:19;:::i;:::-;6539:3;6577:2;6569:6;6565:15;6603:3;6595:6;6592:15;6589:35;;;6620:1;6617;6610:12;6589:35;6644:6;6659:193;6675:6;6670:3;6667:15;6659:193;;;6767:10;;6790:18;;6837:4;6828:14;;;;6692;6659:193;;;-1:-1:-1;6870:7:1;;6263:620;-1:-1:-1;;;;;6263:620:1:o;6888:1836::-;7034:6;7042;7095:3;7083:9;7074:7;7070:23;7066:33;7063:53;;;7112:1;7109;7102:12;7063:53;7161:7;7154:4;7143:9;7139:20;7135:34;7125:62;;7183:1;7180;7173:12;7125:62;7262:2;7284:19;7262:2;7284:19;:::i;:::-;7325:3;7366;7355:9;7351:19;7393:7;7385:6;7382:19;7379:39;;;7414:1;7411;7404:12;7379:39;7438:9;7456:1167;7472:6;7467:3;7464:15;7456:1167;;;7556:6;7550:3;7541:7;7537:17;7533:30;7530:50;;;7576:1;7573;7566:12;7530:50;7606:22;;:::i;:::-;7681:10;;7704:22;;7794:2;7785:12;;;7779:19;7818:14;;;7811:31;7910:2;7901:12;;;7895:19;7934:14;;;7927:31;8017:14;;;8011:21;8052:16;;;8045:33;8146:3;8137:13;;;8131:20;8171:15;;;8164:32;8264:3;8255:13;;;8249:20;8289:15;;;8282:32;8382:3;8373:13;;;8367:20;8407:15;;;8400:32;8500:3;8491:13;;;8485:20;8525:15;;;8518:32;8563:18;;;8601:12;;;;;7498:6;7489:16;7456:1167;;;7460:3;8642:5;8632:15;;8666:52;8710:7;8702:6;8666:52;:::i;:::-;8656:62;;;;;;6888:1836;;;;;:::o;9219:740::-;9316:5;9339:1;9349:604;9363:4;9360:1;9357:11;9349:604;;;9426:6;9420:13;9464:2;9458:9;9453:3;9446:22;9518:4;9514:2;9510:13;9504:20;9497:4;9492:3;9488:14;9481:44;9575:4;9571:2;9567:13;9561:20;9554:4;9549:3;9545:14;9538:44;9632:4;9628:2;9624:13;9618:20;9611:4;9606:3;9602:14;9595:44;9689:4;9685:2;9681:13;9675:20;9668:4;9663:3;9659:14;9652:44;9746:4;9742:2;9738:13;9732:20;9725:4;9720:3;9716:14;9709:44;9803:4;9799:2;9795:13;9789:20;9782:4;9777:3;9773:14;9766:44;9860:4;9856:2;9852:13;9846:20;9839:4;9834:3;9830:14;9823:44;;9896:6;9891:3;9887:16;9880:23;;9938:4;9930:6;9926:17;9916:27;;9383:1;9380;9376:9;9371:14;;9349:604;;;9353:3;;9219:740;;:::o;9964:289::-;10186:4;10171:20;;10200:47;10175:9;10229:6;10200:47;:::i;:::-;9964:289;;;;:::o;10258:619::-;10352:6;10360;10368;10376;10429:3;10417:9;10408:7;10404:23;10400:33;10397:53;;;10446:1;10443;10436:12;10397:53;10491:16;;10597:2;10582:18;;10576:25;10672:2;10657:18;;10651:25;10491:16;;-1:-1:-1;10576:25:1;-1:-1:-1;10714:15:1;;10707:23;10695:36;;10685:64;;10745:1;10742;10735:12;10685:64;10841:2;10826:18;;;;10820:25;10258:619;;;;-1:-1:-1;;;10258:619:1:o;11257:303::-;11350:5;11373:1;11383:171;11397:4;11394:1;11391:11;11383:171;;;11456:13;;11444:26;;11499:4;11490:14;;;;11527:17;;;;11417:1;11410:9;11383:171;;11565:858;12055:25;;;12111:2;12096:18;;12089:34;;;12166:14;;12159:22;12154:2;12139:18;;12132:50;12213:2;12198:18;;12191:34;;;12041:4;12026:20;;12234:57;12286:3;12271:19;;12263:6;12234:57;:::i;:::-;12300:54;12348:4;12337:9;12333:20;12325:6;12300:54;:::i;:::-;12363;12411:4;12400:9;12396:20;12388:6;12363:54;:::i;:::-;11565:858;;;;;;;;;;:::o;14962:222::-;15027:9;;;15048:10;;;15045:133;;;15100:10;15095:3;15091:20;15088:1;15081:31;15135:4;15132:1;15125:15;15163:4;15160:1;15153:15
Swarm Source
ipfs://71ec7cb251a7a4a313a3f733f19752058b14b02fe37180233d972fb7025ef690
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.