Source Code
Overview
S Balance
S Value
$0.00Latest 25 from a total of 1,853 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Infuse Lings To ... | 9325466 | 338 days ago | IN | 0 S | 0.00832414 | ||||
| Web2Wallet Take ... | 9322483 | 338 days ago | IN | 0 S | 0.00325685 | ||||
| Web3Wallet Give ... | 9322463 | 338 days ago | IN | 0 S | 0.00400585 | ||||
| Web3Wallet Give ... | 9322253 | 338 days ago | IN | 0 S | 0.01003569 | ||||
| Gain Lings Stren... | 9322235 | 338 days ago | IN | 0 S | 0.00630271 | ||||
| Infuse Lings To ... | 9322186 | 338 days ago | IN | 0 S | 0.00936595 | ||||
| Summon Lings Fro... | 9321996 | 338 days ago | IN | 0 S | 0.03040988 | ||||
| Summon Lings Fro... | 9321922 | 338 days ago | IN | 0 S | 0.0303488 | ||||
| Infuse Lings To ... | 9321871 | 338 days ago | IN | 0 S | 0.00867955 | ||||
| Infuse Lings To ... | 9321841 | 338 days ago | IN | 0 S | 0.01995073 | ||||
| Delete Personal ... | 9321461 | 338 days ago | IN | 0 S | 0.00282185 | ||||
| Swap UID_Relayer... | 9320735 | 338 days ago | IN | 0 S | 0.00405435 | ||||
| Web2Wallet Take ... | 9320712 | 338 days ago | IN | 0 S | 0.00325685 | ||||
| Web3Wallet Give ... | 9320693 | 338 days ago | IN | 0 S | 0.01003726 | ||||
| Infuse Lings To ... | 9320375 | 338 days ago | IN | 0 S | 0.008679 | ||||
| Infuse Lings To ... | 9320328 | 338 days ago | IN | 0 S | 0.01032115 | ||||
| Infuse Lings To ... | 9319187 | 338 days ago | IN | 0 S | 0.00800375 | ||||
| Infuse Lings To ... | 9319168 | 338 days ago | IN | 0 S | 0.00800375 | ||||
| Gain Lings Stren... | 9319138 | 338 days ago | IN | 0 S | 0.00584275 | ||||
| Infuse Lings To ... | 9318979 | 338 days ago | IN | 0 S | 0.00969035 | ||||
| Infuse Lings To ... | 9318379 | 338 days ago | IN | 0 S | 0.00870808 | ||||
| Infuse Lings To ... | 9318361 | 338 days ago | IN | 0 S | 0.00800375 | ||||
| Gain Trainers St... | 9317364 | 338 days ago | IN | 0 S | 0.0033465 | ||||
| Gain Trainers St... | 9317357 | 338 days ago | IN | 0 S | 0.0033465 | ||||
| Gain Trainers St... | 9317352 | 338 days ago | IN | 0 S | 0.0044415 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
InfuseSummonTransferV1
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-02-15 */ // 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: @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 - InfuseSummonTransferV1.sol pragma solidity ^0.8.19; //_______________________________________________________________ // ___ __ __ _ ___ _ ___ _ __ // | _ )\ \ / / _ | | / _ \ _ | | / _ \ (_)\ \ // | _ \ \ V / | || || (_) || || || (_) | _ | | // |___/ |_| \__/ \___/ \__/ \___/ ( ) | | // |/ /_/ //_______________________________________________________________ // Interface for accessing Storage //------------------------------------------------------------------- // _____ _ _ _______ ______ _____ ______ _____ ______ // |_ _| \ | |__ __| ____| __ \| ____/\ / ____| ____| // | | | \| | | | | |__ | |__) | |__ / \ | | | |__ // | | | . ` | | | | __| | _ /| __/ /\ \| | | __| // _| |_| |\ | | | | |____| | \ \| | / ____ \ |____| |____ // |_____|_| \_| |_| |______|_| \_\_|/_/ \_\_____|______| // //------------------------------------------------------------------- interface FARPG_RAMInterface { // Read functions function genetoid_mapping(uint trainergene) external pure returns (uint); function petunitsmax(uint id) external pure returns (S.Unit calldata); function petunitsevolveid(S.Status calldata _status, uint _trainergene, uint _exp, uint _hash) external pure returns (S.Status calldata); function transformIDtoStageFamily(uint _id) external pure returns (S.Status memory unitstatus); function summonStage3RangeSkill(uint _id_transformed) external pure returns (uint ranged); } interface IFARPGItemsToken { function mint( uint _amount, address _to, uint _id) external; function burn(address owner, uint _id, uint _amount) external; function balanceOf(address account, uint256 id) external view returns (uint256); } interface IFARPGLingsNFTToken { function mint( uint _amount, address _to, uint _id) external; function burn(address owner, uint _id, uint _amount) external; function balanceOf(address account, uint256 id) external view returns (uint256); } //-------*************************************************----------- contract InfuseSummonTransferV1 is Ownable, ReentrancyGuard { IFARPG_Storage public contractStorage; FARPG_RAMInterface public contractRAM; IFARPGItemsToken public contractITEMS; IFARPGLingsNFTToken public contractLingsNFT; constructor() { } event StatChangedResult(S.Unit AfterUnit, S.Status AfterStatus, S.Time AfterTime); //------------------------------------------------------------------- // _____ _ ____ ____ _ __ __ // / ____| | / __ \| _ \ /\ | | \ \ / / // | | __| | | | | | |_) | / \ | | \ \ / / // | | |_ | | | | | | _ < / /\ \ | | \ \/ / // | |__| | |___| |__| | |_) / ____ \| |____ \ / _ // \_____|______\____/|____/_/ \_\______| \/ (_) // //------------------------------------------------------------------- mapping (address => uint) private reentrant_time; uint constant TIME_INITIALSTAMINA = 24 hours; //initial stamina uint constant TIME_INITIALENDURANCE = 3 hours; //initial endurance/hunger //--------------------------------------------------------- // _____ __ __ _____ _ _ // /\ | __ \| \/ |_ _| \ | | // / \ | | | | \ / | | | | \| | // / /\ \ | | | | |\/| | | | | . ` | // / ____ \| |__| | | | |_| |_| |\ | // /_/ \_\_____/|_| |_|_____|_| \_| // //--------------------------------------------------------- function updateStorageContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractStorage = IFARPG_Storage(_newContractAAddress); } function updateRAMContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractRAM = FARPG_RAMInterface(_newContractAAddress); } function updateITEMContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractITEMS = IFARPGItemsToken(_newContractAAddress); } function updateLingsNFTContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractLingsNFT = IFARPGLingsNFTToken(_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); } uint UNLOCKPERIOD = 1 minutes; //1 min for testing will be 25 hours function changeTrainerUnlockPeriod (uint _seconds) external onlyOwner { UNLOCKPERIOD = _seconds; } //--------------------------------------------------------- // // _____ _______ _____ _______ // / ____|__ __|/\ | __ \__ __| // | (___ | | / \ | |__) | | | // \___ \ | | / /\ \ | _ / | | // ____) | | |/ ____ \| | \ \ | | // |_____/ |_/_/ \_\_| \_\ |_| // //--------------------------------------------------------- function noneReentrant_time(address player, uint timeSeconds) internal { require(block.timestamp - reentrant_time[player] >= timeSeconds,"Non-Reentrant, slow down TX attempts."); reentrant_time[player] = block.timestamp; } function accountAddressToProceed() public view returns (address) { address playerAddress = contractStorage.personalwallet(msg.sender); if (playerAddress == address(0)) { return msg.sender; } else { return playerAddress; } } //--------------------------------------------------------- function SummonLingsFromNFT (uint NFT_ID, uint _slot) public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress , 2); uint limit2 = contractStorage.getLimit2(playerAddress); //limit2 is slot limit require(_slot < limit2, "Chosen slot exceeds limit."); S.Status memory _petstatus = contractStorage.getPetStatuses(playerAddress, _slot); require(_petstatus.id == 0, "Chosen slot is occupied."); require(contractLingsNFT.balanceOf(playerAddress,NFT_ID) >= 1, "Lings NFT not find. You dont have this NFT."); contractLingsNFT.burn(playerAddress, NFT_ID, 1); S.Unit memory _petunit = S.Unit({ hp: 1000, attack: 100, defense: 50, speed: 100, intelligence: 100, genestrength: 1, range: contractRAM.summonStage3RangeSkill(NFT_ID), special:0}); _petstatus = contractRAM.transformIDtoStageFamily(NFT_ID); _petstatus.id = NFT_ID; if (_petstatus.stage == 3) { _petunit.special = NFT_ID%10000; } if (_petstatus.stage == 2) { _petunit.range = NFT_ID%10000; } S.Time memory _pettime = S.Time({bond: 0, stamina: block.timestamp - TIME_INITIALSTAMINA, hunger: block.timestamp + TIME_INITIALENDURANCE}); contractStorage.setPetUnits(playerAddress, _slot ,_petunit); contractStorage.setPetStatuses(playerAddress,_slot , _petstatus); contractStorage.setPetTimes(playerAddress, _slot ,_pettime); contractStorage.setPetUnitsMaxVitamined(playerAddress, _slot ,contractRAM.petunitsmax(_petstatus.id)); uint GENEbit = contractStorage.getPoint2(playerAddress); GENEbit |= (1 << (_petstatus.id%10000)); contractStorage.setPoint2(playerAddress,GENEbit); emit StatChangedResult(_petunit,_petstatus,_pettime); } //WARN the user that Stats will be reset. function InfuseLingsToNFT (uint _slot, uint _genestrength) public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress , 2); S.Status memory _petstatus = contractStorage.getPetStatuses(playerAddress, _slot); require(_petstatus.id > 0, "empty slot, nothing to infuse"); S.Unit memory _petunits = contractStorage.getPetUnits(playerAddress, _slot); require(_petunits.genestrength >= _genestrength, "not enough genestrength to infuse"); S.Unit memory emptypetunits; S.Status memory emptypetstatus; S.Time memory emptypettime; if (_petunits.genestrength == _genestrength ) { //infused all! Empty the slot //empty all storage of that slot contractStorage.setPetUnits(playerAddress, _slot ,emptypetunits); contractStorage.setPetStatuses(playerAddress,_slot , emptypetstatus); contractStorage.setPetTimes(playerAddress, _slot ,emptypettime); contractStorage.setPetUnitsMaxVitamined(playerAddress, _slot ,emptypetunits); //mint according to genestrength contractLingsNFT.mint(_genestrength, playerAddress, _petstatus.id); } else { // at least 1 genestrength left, no need empty slot //update new genestrength at storage _petunits.genestrength -= _genestrength; contractStorage.setPetUnits(playerAddress, _slot ,_petunits); //mint according to genestrength contractLingsNFT.mint(_genestrength, playerAddress, _petstatus.id); } } function InfuseTrainersToNFT (uint _TrainerID, uint _genestrength) public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress , 2); require (_TrainerID < 40, "invalid trainerID"); require (_genestrength >= 1, "0 input, nothing to infuse."); uint TrainerGeneStr = contractStorage.getPlayerGeneStrength(playerAddress,_TrainerID); if (_TrainerID == 0) { require(TrainerGeneStr >= _genestrength+1, "not enough genestrength to infuse"); } else { require(TrainerGeneStr >= _genestrength, "not enough genestrength to infuse"); } //take away the genestrength contractStorage.setPlayerGeneStrength(playerAddress, _TrainerID, TrainerGeneStr -= _genestrength); //and locked them for 25 hours uint lockingGene = contractStorage.getTrainerGeneInfusingGene(playerAddress, _TrainerID); contractStorage.setTrainerGeneInfusingGene(playerAddress,_TrainerID,lockingGene+_genestrength); contractStorage.setTrainerGeneInfusingTimer(playerAddress,_TrainerID,block.timestamp); } function ClaimTrainerNFT (uint claimTrainersID) public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress , 2); uint TimeLocked = contractStorage.getTrainerGeneInfusingTimer(playerAddress,claimTrainersID); require(block.timestamp >= TimeLocked + UNLOCKPERIOD, "Still unlocking"); uint lockingGene = contractStorage.getTrainerGeneInfusingGene(playerAddress, claimTrainersID); require(lockingGene > 0,"No gene is locking.."); contractStorage.setTrainerGeneInfusingGene(playerAddress,claimTrainersID,0); contractStorage.setTrainerGeneInfusingTimer(playerAddress,claimTrainersID,0); uint ItemID; ItemID = claimTrainersID + 201; contractITEMS.mint(lockingGene, playerAddress, ItemID); } function GainLingsStrength (uint _slot, uint _Gainquantity) public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress , 2); //LingNFT ID = Ling ID //confirm the choosing slot is empty and available uint limit2 = contractStorage.getLimit2(playerAddress); //limit2 is slot limit require(_slot < limit2, "Chosen slot exceeds limit."); S.Status memory _petstatus = contractStorage.getPetStatuses(playerAddress, _slot); require(_petstatus.id > 0, "empty slot, nothing to gain"); S.Unit memory _petunits = contractStorage.getPetUnits(playerAddress, _slot); require(_petunits.genestrength >= 1, "not genestrength to top up, empty slot?"); //Confirm player has the NFT require(contractLingsNFT.balanceOf(playerAddress,_petstatus.id ) >= _Gainquantity, "Lings NFT not enough. Check Lings ID"); contractLingsNFT.burn(playerAddress, _petstatus.id, _Gainquantity); //after Consume the NFT, add the genestr on the Ling _petunits.genestrength += _Gainquantity; contractStorage.setPetUnits(playerAddress, _slot ,_petunits); } function GainTrainersStrength (uint TrainerID, uint _Gainquantity) public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress , 2); uint TrainerNFTID = TrainerID + 201; require(contractITEMS.balanceOf(playerAddress,TrainerNFTID) >= _Gainquantity, "Trainer Item NFT not enough. Check trainer ID"); contractITEMS.burn(playerAddress, TrainerNFTID, _Gainquantity); uint trainergenestrengthnow = contractStorage.getPlayerGeneStrength(playerAddress, TrainerID); contractStorage.setPlayerGeneStrength(playerAddress, TrainerID, trainergenestrengthnow+_Gainquantity); } function viewForUnityTrainerInfuse () public view returns(uint[50] memory infusingGENE, uint[50] memory infusingStartTime , uint cooldownLimit){ address playerAddress = accountAddressToProceed(); infusingGENE = contractStorage.getTrainerGeneInfusingGeneAll(playerAddress); infusingStartTime = contractStorage.getTrainerGeneInfusingTimerAll(playerAddress); cooldownLimit = UNLOCKPERIOD; } function TransferUID_ACCOUNT (address to_new_address) public nonReentrant { require(contractStorage.UIDmain(to_new_address) == 0, "New Address has already linked to an UID."); address OldAddress = msg.sender; uint transferingUID = contractStorage.UIDmain(OldAddress); require(transferingUID != 0, "Existing address has no UID..."); contractStorage.transferUID(OldAddress,to_new_address); } //----- setup PersonalWallet ---> link Web2 wallet --------- function web3WalletGivePermissionToWeb2Wallet(address web2wallet) public nonReentrant { address web3wallet = msg.sender; noneReentrant_time(web3wallet , 1); contractStorage.setGiveControlTo(web3wallet,web2wallet); } function web2WalletTakeControlOfWeb3Wallet(address web3wallet) public nonReentrant { //get permitted address from the web3 address noneReentrant_time(web3wallet , 1); address permittedAddress = contractStorage.givecontrolto(web3wallet); address web2wallet = msg.sender; require(permittedAddress == web2wallet, "you are not permitted to control this web3wallet."); //if you are permitted then set to your control contractStorage.setPersonalWallet(web2wallet,web3wallet); } //--------- SWAP UID if already talking control (optional) ------------- event UIDSwapped(address indexed relayerWallet, address indexed personalWallet, uint relayerUID, uint personalUID); function swapUID_RelayeredtoPersonal() external nonReentrant { //get what is the controlling wallet (Personal Wallet) address personalWallet = myControllingWallet(msg.sender); require(personalWallet != address(0), "You do not have personal wallet authenticated."); //Verify that personalWallet has given control to the relayered wallet. address relayeredwallet = contractStorage.givecontrolto(personalWallet); require(relayeredwallet == msg.sender, "You do not have control over this personal wallet."); //Retrieve UIDs of both wallets uint relayerUID = contractStorage.UIDmain(msg.sender); uint personalUID = contractStorage.UIDmain(personalWallet); contractStorage.setUIDmain(relayeredwallet, personalUID); contractStorage.setUID_ownedby(personalUID, relayeredwallet ); contractStorage.setUIDmain(personalWallet, relayerUID); contractStorage.setUID_ownedby(relayerUID, personalWallet ); // Emit an event for transparency emit UIDSwapped(relayeredwallet, personalWallet, relayerUID, personalUID); } function deletePersonalWalletControl() public nonReentrant { noneReentrant_time(msg.sender,1); contractStorage.setPersonalWallet(msg.sender,address(0)); } function deletePermissionForControlling() public nonReentrant { noneReentrant_time(msg.sender,1); contractStorage.setGiveControlTo(msg.sender,address(0)); } function readPermissionGivenTo (address web3wallet) public view returns(address thiswallet) { thiswallet = contractStorage.givecontrolto(web3wallet); } function myControllingWallet (address web2wallet) public view returns(address walletgotcontrolled) { walletgotcontrolled = contractStorage.personalwallet(web2wallet); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"relayerWallet","type":"address"},{"indexed":true,"internalType":"address","name":"personalWallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"relayerUID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"personalUID","type":"uint256"}],"name":"UIDSwapped","type":"event"},{"inputs":[{"internalType":"uint256","name":"claimTrainersID","type":"uint256"}],"name":"ClaimTrainerNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slot","type":"uint256"},{"internalType":"uint256","name":"_Gainquantity","type":"uint256"}],"name":"GainLingsStrength","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"TrainerID","type":"uint256"},{"internalType":"uint256","name":"_Gainquantity","type":"uint256"}],"name":"GainTrainersStrength","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slot","type":"uint256"},{"internalType":"uint256","name":"_genestrength","type":"uint256"}],"name":"InfuseLingsToNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_TrainerID","type":"uint256"},{"internalType":"uint256","name":"_genestrength","type":"uint256"}],"name":"InfuseTrainersToNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"NFT_ID","type":"uint256"},{"internalType":"uint256","name":"_slot","type":"uint256"}],"name":"SummonLingsFromNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_new_address","type":"address"}],"name":"TransferUID_ACCOUNT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accountAddressToProceed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"changeTrainerUnlockPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractITEMS","outputs":[{"internalType":"contract IFARPGItemsToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractLingsNFT","outputs":[{"internalType":"contract IFARPGLingsNFTToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractRAM","outputs":[{"internalType":"contract FARPG_RAMInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractStorage","outputs":[{"internalType":"contract IFARPG_Storage","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deletePermissionForControlling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deletePersonalWalletControl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"web2wallet","type":"address"}],"name":"myControllingWallet","outputs":[{"internalType":"address","name":"walletgotcontrolled","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"web3wallet","type":"address"}],"name":"readPermissionGivenTo","outputs":[{"internalType":"address","name":"thiswallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapUID_RelayeredtoPersonal","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":"updateITEMContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateLingsNFTContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateRAMContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateStorageContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewForUnityTrainerInfuse","outputs":[{"internalType":"uint256[50]","name":"infusingGENE","type":"uint256[50]"},{"internalType":"uint256[50]","name":"infusingStartTime","type":"uint256[50]"},{"internalType":"uint256","name":"cooldownLimit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"web3wallet","type":"address"}],"name":"web2WalletTakeControlOfWeb3Wallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"web2wallet","type":"address"}],"name":"web3WalletGivePermissionToWeb2Wallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052603c6007553480156013575f5ffd5b50601b336023565b600180556072565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6130028061007f5f395ff3fe608060405234801561000f575f5ffd5b50600436106101c6575f3560e01c806356b54192116100fe578063c02816b11161009e578063e56066591161006e578063e560665914610383578063f17756e114610396578063f1b1a6ab146103a9578063f2fde38b146103bc575f5ffd5b8063c02816b114610342578063c113d0d914610355578063c2b7ac4914610368578063dcc6aaaa1461037b575f5ffd5b80638da5cb5b116100d95780638da5cb5b1461030457806396a33dc5146103145780639ad56dd51461031c578063b9f54f2c1461032f575f5ffd5b806356b54192146102d6578063715018a6146102e95780637d35f912146102f1575f5ffd5b80632c45fa49116101695780634410015c116101445780634410015c1461028a5780634af2fe6f1461029d5780634c4808fa146102b0578063521f4f0c146102c3575f5ffd5b80632c45fa4914610267578063324381561461026f5780633ccfd60b14610282575f5ffd5b806309fb0795116101a457806309fb0795146102225780631b8c058c146102355780631dec52911461023d5780632acd699214610250575f5ffd5b806303eaa141146101ca5780630549b27e146101df57806306f949131461020f575b5f5ffd5b6101dd6101d8366004612b6b565b6103cf565b005b6002546101f2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101dd61021d366004612b6b565b6105d8565b6101dd610230366004612b8d565b610628565b6101dd61095e565b6101dd61024b366004612b8d565b6109db565b610258610bed565b60405161020693929190612bd5565b6101dd610cf2565b6101dd61027d366004612b6b565b610d3b565b6101dd610dbb565b6101dd610298366004612b8d565b610e3b565b6003546101f2906001600160a01b031681565b6101f26102be366004612b6b565b61125f565b6101dd6102d1366004612b6b565b6112d2565b6101dd6102e4366004612b8d565b611400565b6101dd6118e8565b6101dd6102ff366004612c01565b6118f9565b5f546001600160a01b03166101f2565b6101f2611bdb565b6101dd61032a366004612b6b565b611c65565b6101dd61033d366004612b6b565b611cb5565b6101dd610350366004612b8d565b611d05565b6101f2610363366004612b6b565b612483565b6101dd610376366004612c01565b6124b5565b6101dd6124c2565b6004546101f2906001600160a01b031681565b6101dd6103a4366004612b6b565b6128d5565b6005546101f2906001600160a01b031681565b6101dd6103ca366004612b6b565b612925565b6103d761299b565b600254604051630bc7d91360e31b81526001600160a01b03838116600483015290911690635e3ec89890602401602060405180830381865afa15801561041f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104439190612c18565b156104a75760405162461bcd60e51b815260206004820152602960248201527f4e657720416464726573732068617320616c7265616479206c696e6b65642074604482015268379030b7102aa4a21760b91b60648201526084015b60405180910390fd5b600254604051630bc7d91360e31b81523360048201819052915f916001600160a01b0390911690635e3ec89890602401602060405180830381865afa1580156104f2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105169190612c18565b9050805f036105675760405162461bcd60e51b815260206004820152601e60248201527f4578697374696e67206164647265737320686173206e6f205549442e2e2e0000604482015260640161049e565b6002546040516306c34e9360e51b81526001600160a01b03848116600483015285811660248301529091169063d869d260906044015b5f604051808303815f87803b1580156105b4575f5ffd5b505af11580156105c6573d5f5f3e3d5ffd5b5050505050506105d560018055565b50565b6105e06129f4565b6001600160a01b0381166106065760405162461bcd60e51b815260040161049e90612c2f565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61063061299b565b5f610639611bdb565b9050610646816002612a4d565b6028831061068a5760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081d1c985a5b995c9251607a1b604482015260640161049e565b60018210156106db5760405162461bcd60e51b815260206004820152601b60248201527f3020696e7075742c206e6f7468696e6720746f20696e667573652e0000000000604482015260640161049e565b6002546040516315f67cf360e31b81525f916001600160a01b03169063afb3e7989061070d9085908890600401612c58565b602060405180830381865afa158015610728573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074c9190612c18565b9050835f0361078457610760836001612c85565b81101561077f5760405162461bcd60e51b815260040161049e90612c98565b6107a4565b828110156107a45760405162461bcd60e51b815260040161049e90612c98565b6002546001600160a01b0316635af875f783866107c18786612cd9565b9450846040518463ffffffff1660e01b81526004016107e293929190612cec565b5f604051808303815f87803b1580156107f9575f5ffd5b505af115801561080b573d5f5f3e3d5ffd5b505060025460405163067f299160e31b81525f93506001600160a01b0390911691506333f94c88906108439086908990600401612c58565b602060405180830381865afa15801561085e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108829190612c18565b6002549091506001600160a01b03166371a2058884876108a28886612c85565b6040518463ffffffff1660e01b81526004016108c093929190612cec565b5f604051808303815f87803b1580156108d7575f5ffd5b505af11580156108e9573d5f5f3e3d5ffd5b5050600254604051637d30ac7160e01b81526001600160a01b039091169250637d30ac71915061092190869089904290600401612cec565b5f604051808303815f87803b158015610938575f5ffd5b505af115801561094a573d5f5f3e3d5ffd5b5050505050505061095a60018055565b5050565b61096661299b565b610971336001612a4d565b600254604051639cef0bd560e01b81523360048201525f60248201526001600160a01b0390911690639cef0bd5906044015b5f604051808303815f87803b1580156109ba575f5ffd5b505af11580156109cc573d5f5f3e3d5ffd5b505050506109d960018055565b565b6109e361299b565b5f6109ec611bdb565b90506109f9816002612a4d565b5f610a058460c9612c85565b60048054604051627eeac760e11b815292935085926001600160a01b039091169162fdd58e91610a39918791879101612c58565b602060405180830381865afa158015610a54573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a789190612c18565b1015610adc5760405162461bcd60e51b815260206004820152602d60248201527f547261696e6572204974656d204e4654206e6f7420656e6f7567682e2043686560448201526c18dac81d1c985a5b995c881251609a1b606482015260840161049e565b60048054604051637a94c56560e11b81526001600160a01b039091169163f5298aca91610b0f9186918691899101612cec565b5f604051808303815f87803b158015610b26575f5ffd5b505af1158015610b38573d5f5f3e3d5ffd5b50506002546040516315f67cf360e31b81525f93506001600160a01b03909116915063afb3e79890610b709086908990600401612c58565b602060405180830381865afa158015610b8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610baf9190612c18565b6002549091506001600160a01b0316635af875f78487610bcf8886612c85565b6040518463ffffffff1660e01b815260040161092193929190612cec565b610bf5612b38565b610bfd612b38565b5f5f610c07611bdb565b600254604051633003c07760e21b81526001600160a01b03808416600483015292935091169063c00f01dc9060240161064060405180830381865afa158015610c52573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c769190612d4b565b6002546040516308a924af60e01b81526001600160a01b0384811660048301529296509116906308a924af9060240161064060405180830381865afa158015610cc1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce59190612d4b565b9250600754915050909192565b610cfa61299b565b610d05336001612a4d565b600254604051637fd7374f60e01b81523360048201525f60248201526001600160a01b0390911690637fd7374f906044016109a3565b610d4361299b565b33610d4f816001612a4d565b600254604051639cef0bd560e01b81526001600160a01b038381166004830152848116602483015290911690639cef0bd5906044015f604051808303815f87803b158015610d9b575f5ffd5b505af1158015610dad573d5f5f3e3d5ffd5b50505050506105d560018055565b610dc36129f4565b5f4711610e125760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f0000000000000000604482015260640161049e565b60405133904780156108fc02915f818181858888f193505050501580156105d5573d5f5f3e3d5ffd5b610e4361299b565b5f610e4c611bdb565b9050610e59816002612a4d565b6002546040516329323b0d60e21b81526001600160a01b0383811660048301525f92169063a4c8ec3490602401602060405180830381865afa158015610ea1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec59190612c18565b9050808410610f165760405162461bcd60e51b815260206004820152601a60248201527f43686f73656e20736c6f742065786365656473206c696d69742e000000000000604482015260640161049e565b6002546040516388e6c74d60e01b81525f916001600160a01b0316906388e6c74d90610f489086908990600401612c58565b606060405180830381865afa158015610f63573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f879190612dc8565b8051909150610fd85760405162461bcd60e51b815260206004820152601b60248201527f656d70747920736c6f742c206e6f7468696e6720746f206761696e0000000000604482015260640161049e565b600254604051636802761f60e01b81525f916001600160a01b031690636802761f9061100a9087908a90600401612c58565b61010060405180830381865afa158015611026573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104a9190612e21565b905060018160a0015110156110b15760405162461bcd60e51b815260206004820152602760248201527f6e6f742067656e65737472656e67746820746f20746f702075702c20656d70746044820152667920736c6f743f60c81b606482015260840161049e565b6005548251604051627eeac760e11b815287926001600160a01b03169162fdd58e916110e1918991600401612c58565b602060405180830381865afa1580156110fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111209190612c18565b101561117a5760405162461bcd60e51b8152602060048201526024808201527f4c696e6773204e4654206e6f7420656e6f7567682e20436865636b204c696e676044820152631cc8125160e21b606482015260840161049e565b6005548251604051637a94c56560e11b81526001600160a01b039092169163f5298aca916111af918891908a90600401612cec565b5f604051808303815f87803b1580156111c6575f5ffd5b505af11580156111d8573d5f5f3e3d5ffd5b50505050848160a0018181516111ee9190612c85565b90525060025460405163daa3f88b60e01b81526001600160a01b039091169063daa3f88b906112259087908a908690600401612edd565b5f604051808303815f87803b15801561123c575f5ffd5b505af115801561124e573d5f5f3e3d5ffd5b505050505050505061095a60018055565b60025460405163378ed8ed60e01b81526001600160a01b0383811660048301525f92169063378ed8ed906024015b602060405180830381865afa1580156112a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cc9190612f0a565b92915050565b6112da61299b565b6112e5816001612a4d565b60025460405163378ed8ed60e01b81526001600160a01b0383811660048301525f92169063378ed8ed90602401602060405180830381865afa15801561132d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113519190612f0a565b9050336001600160a01b03821681146113c65760405162461bcd60e51b815260206004820152603160248201527f796f7520617265206e6f74207065726d697474656420746f20636f6e74726f6c604482015270103a3434b9903bb2b119bbb0b63632ba1760791b606482015260840161049e565b600254604051637fd7374f60e01b81526001600160a01b038381166004830152858116602483015290911690637fd7374f9060440161059d565b61140861299b565b5f611411611bdb565b905061141e816002612a4d565b6002546040516388e6c74d60e01b81525f916001600160a01b0316906388e6c74d906114509085908890600401612c58565b606060405180830381865afa15801561146b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061148f9190612dc8565b80519091506114e05760405162461bcd60e51b815260206004820152601d60248201527f656d70747920736c6f742c206e6f7468696e6720746f20696e66757365000000604482015260640161049e565b600254604051636802761f60e01b81525f916001600160a01b031690636802761f906115129086908990600401612c58565b61010060405180830381865afa15801561152e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115529190612e21565b9050838160a0015110156115785760405162461bcd60e51b815260040161049e90612c98565b6115b86040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6115d960405180606001604052805f81526020015f81526020015f81525090565b6115fa60405180606001604052805f81526020015f81526020015f81525090565b868460a00151036117f85760025460405163daa3f88b60e01b81526001600160a01b039091169063daa3f88b906116399089908c908890600401612edd565b5f604051808303815f87803b158015611650575f5ffd5b505af1158015611662573d5f5f3e3d5ffd5b50506002546040516318f626f560e11b81526001600160a01b0390911692506331ec4dea915061169a9089908c908790600401612f25565b5f604051808303815f87803b1580156116b1575f5ffd5b505af11580156116c3573d5f5f3e3d5ffd5b505060025460405163108b074f60e31b81526001600160a01b0390911692506384583a7891506116fb9089908c908690600401612f25565b5f604051808303815f87803b158015611712575f5ffd5b505af1158015611724573d5f5f3e3d5ffd5b505060025460405163c10e83e160e01b81526001600160a01b03909116925063c10e83e1915061175c9089908c908890600401612edd565b5f604051808303815f87803b158015611773575f5ffd5b505af1158015611785573d5f5f3e3d5ffd5b5050600554875160405163020da84160e61b8152600481018c90526001600160a01b038b8116602483015260448201929092529116925063836a104091506064015f604051808303815f87803b1580156117dd575f5ffd5b505af11580156117ef573d5f5f3e3d5ffd5b505050506118d9565b868460a00181815161180a9190612cd9565b90525060025460405163daa3f88b60e01b81526001600160a01b039091169063daa3f88b906118419089908c908990600401612edd565b5f604051808303815f87803b158015611858575f5ffd5b505af115801561186a573d5f5f3e3d5ffd5b5050600554875160405163020da84160e61b8152600481018c90526001600160a01b038b8116602483015260448201929092529116925063836a104091506064015f604051808303815f87803b1580156118c2575f5ffd5b505af11580156118d4573d5f5f3e3d5ffd5b505050505b50505050505061095a60018055565b6118f06129f4565b6109d95f612ae9565b61190161299b565b5f61190a611bdb565b9050611917816002612a4d565b60025460405163246ccd7b60e01b81525f916001600160a01b03169063246ccd7b906119499085908790600401612c58565b602060405180830381865afa158015611964573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119889190612c18565b9050600754816119989190612c85565b4210156119d95760405162461bcd60e51b815260206004820152600f60248201526e5374696c6c20756e6c6f636b696e6760881b604482015260640161049e565b60025460405163067f299160e31b81525f916001600160a01b0316906333f94c8890611a0b9086908890600401612c58565b602060405180830381865afa158015611a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4a9190612c18565b90505f8111611a925760405162461bcd60e51b815260206004820152601460248201527327379033b2b7329034b9903637b1b5b4b733971760611b604482015260640161049e565b600254604051630e3440b160e31b81526001600160a01b03909116906371a2058890611ac690869088905f90600401612cec565b5f604051808303815f87803b158015611add575f5ffd5b505af1158015611aef573d5f5f3e3d5ffd5b5050600254604051637d30ac7160e01b81526001600160a01b039091169250637d30ac719150611b2790869088905f90600401612cec565b5f604051808303815f87803b158015611b3e575f5ffd5b505af1158015611b50573d5f5f3e3d5ffd5b505050505f8460c9611b629190612c85565b6004805460405163020da84160e61b81529182018590526001600160a01b03878116602484015260448301849052929350919091169063836a1040906064015f604051808303815f87803b158015611bb8575f5ffd5b505af1158015611bca573d5f5f3e3d5ffd5b50505050505050506105d560018055565b6002546040516302e6c26360e11b81523360048201525f9182916001600160a01b03909116906305cd84c690602401602060405180830381865afa158015611c25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c499190612f0a565b90506001600160a01b038116611c60573391505090565b919050565b611c6d6129f4565b6001600160a01b038116611c935760405162461bcd60e51b815260040161049e90612c2f565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b611cbd6129f4565b6001600160a01b038116611ce35760405162461bcd60e51b815260040161049e90612c2f565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611d0d61299b565b5f611d16611bdb565b9050611d23816002612a4d565b6002546040516329323b0d60e21b81526001600160a01b0383811660048301525f92169063a4c8ec3490602401602060405180830381865afa158015611d6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d8f9190612c18565b9050808310611de05760405162461bcd60e51b815260206004820152601a60248201527f43686f73656e20736c6f742065786365656473206c696d69742e000000000000604482015260640161049e565b6002546040516388e6c74d60e01b81525f916001600160a01b0316906388e6c74d90611e129086908890600401612c58565b606060405180830381865afa158015611e2d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e519190612dc8565b805190915015611ea35760405162461bcd60e51b815260206004820152601860248201527f43686f73656e20736c6f74206973206f636375706965642e0000000000000000604482015260640161049e565b600554604051627eeac760e11b81526001916001600160a01b03169062fdd58e90611ed49087908a90600401612c58565b602060405180830381865afa158015611eef573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f139190612c18565b1015611f755760405162461bcd60e51b815260206004820152602b60248201527f4c696e6773204e4654206e6f742066696e642e20596f7520646f6e742068617660448201526a32903a3434b99027232a1760a91b606482015260840161049e565b600554604051637a94c56560e11b81526001600160a01b039091169063f5298aca90611faa9086908990600190600401612cec565b5f604051808303815f87803b158015611fc1575f5ffd5b505af1158015611fd3573d5f5f3e3d5ffd5b505060408051610100810182526103e88152606460208201819052603282840152606082018190526080820152600160a082015260035491516304fe10d360e41b8152600481018a90525f945090925060c08301916001600160a01b031690634fe10d3090602401602060405180830381865afa158015612056573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207a9190612c18565b81525f6020909101526003546040516353b4eff960e11b8152600481018990529192506001600160a01b03169063a769dff290602401606060405180830381865afa1580156120cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120ef9190612dc8565b86815260408101519092506003036121135761210d61271087612f5d565b60e08201525b81604001516002036121315761212b61271087612f5d565b60c08201525b5f60405180606001604052805f815260200162015180426121529190612cd9565b8152602001612163612a3042612c85565b905260025460405163daa3f88b60e01b81529192506001600160a01b03169063daa3f88b9061219a9088908a908790600401612edd565b5f604051808303815f87803b1580156121b1575f5ffd5b505af11580156121c3573d5f5f3e3d5ffd5b50506002546040516318f626f560e11b81526001600160a01b0390911692506331ec4dea91506121fb9088908a908890600401612f25565b5f604051808303815f87803b158015612212575f5ffd5b505af1158015612224573d5f5f3e3d5ffd5b505060025460405163108b074f60e31b81526001600160a01b0390911692506384583a78915061225c9088908a908690600401612f25565b5f604051808303815f87803b158015612273575f5ffd5b505af1158015612285573d5f5f3e3d5ffd5b505060025460035486516040516315e3d00d60e11b815260048101919091526001600160a01b03928316945063c10e83e1935089928b921690632bc7a01a9060240161010060405180830381865afa1580156122e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123079190612e21565b6040518463ffffffff1660e01b815260040161232593929190612edd565b5f604051808303815f87803b15801561233c575f5ffd5b505af115801561234e573d5f5f3e3d5ffd5b505060025460405163b2cbbfad60e01b81526001600160a01b0389811660048301525f9450909116915063b2cbbfad90602401602060405180830381865afa15801561239c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c09190612c18565b84519091506123d29061271090612f5d565b600254604051636ed6fed760e11b8152600190921b92909217916001600160a01b03169063ddadfdae9061240c9089908590600401612c58565b5f604051808303815f87803b158015612423575f5ffd5b505af1158015612435573d5f5f3e3d5ffd5b505050507fc1e766b7fcdd3f4867b7cd3d80cf2616b5b7bc4340a7971becb6036c77aa65bd83858460405161246c93929190612f7c565b60405180910390a150505050505061095a60018055565b6002546040516302e6c26360e11b81526001600160a01b0383811660048301525f9216906305cd84c69060240161128d565b6124bd6129f4565b600755565b6124ca61299b565b5f6124d433612483565b90506001600160a01b0381166125435760405162461bcd60e51b815260206004820152602e60248201527f596f7520646f206e6f74206861766520706572736f6e616c2077616c6c65742060448201526d30baba3432b73a34b1b0ba32b21760911b606482015260840161049e565b60025460405163378ed8ed60e01b81526001600160a01b0383811660048301525f92169063378ed8ed90602401602060405180830381865afa15801561258b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125af9190612f0a565b90506001600160a01b03811633146126245760405162461bcd60e51b815260206004820152603260248201527f596f7520646f206e6f74206861766520636f6e74726f6c206f7665722074686960448201527139903832b939b7b730b6103bb0b63632ba1760711b606482015260840161049e565b600254604051630bc7d91360e31b81523360048201525f916001600160a01b031690635e3ec89890602401602060405180830381865afa15801561266a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061268e9190612c18565b600254604051630bc7d91360e31b81526001600160a01b0386811660048301529293505f9290911690635e3ec89890602401602060405180830381865afa1580156126db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ff9190612c18565b600254604051632875cd2b60e01b81529192506001600160a01b031690632875cd2b906127329086908590600401612c58565b5f604051808303815f87803b158015612749575f5ffd5b505af115801561275b573d5f5f3e3d5ffd5b50506002546040516311fa2c4960e01b8152600481018590526001600160a01b03878116602483015290911692506311fa2c4991506044015f604051808303815f87803b1580156127aa575f5ffd5b505af11580156127bc573d5f5f3e3d5ffd5b5050600254604051632875cd2b60e01b81526001600160a01b039091169250632875cd2b91506127f29087908690600401612c58565b5f604051808303815f87803b158015612809575f5ffd5b505af115801561281b573d5f5f3e3d5ffd5b50506002546040516311fa2c4960e01b8152600481018690526001600160a01b03888116602483015290911692506311fa2c4991506044015f604051808303815f87803b15801561286a575f5ffd5b505af115801561287c573d5f5f3e3d5ffd5b505060408051858152602081018590526001600160a01b038089169450871692507f1d5be8888e86a0f9d77e7d6375cd8a6824db2f90cd41d56455e437c8b4eb9fc3910160405180910390a3505050506109d960018055565b6128dd6129f4565b6001600160a01b0381166129035760405162461bcd60e51b815260040161049e90612c2f565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b61292d6129f4565b6001600160a01b0381166129925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161049e565b6105d581612ae9565b6002600154036129ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161049e565b6002600155565b5f546001600160a01b031633146109d95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161049e565b6001600160a01b0382165f908152600660205260409020548190612a719042612cd9565b1015612acd5760405162461bcd60e51b815260206004820152602560248201527f4e6f6e2d5265656e7472616e742c20736c6f7720646f776e205458206174746560448201526436b83a399760d91b606482015260840161049e565b506001600160a01b03165f908152600660205260409020429055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518061064001604052806032906020820280368337509192915050565b6001600160a01b03811681146105d5575f5ffd5b5f60208284031215612b7b575f5ffd5b8135612b8681612b57565b9392505050565b5f5f60408385031215612b9e575f5ffd5b50508035926020909101359150565b805f5b6032811015612bcf578151845260209384019390910190600101612bb0565b50505050565b610ca08101612be48286612bad565b612bf2610640830185612bad565b82610c80830152949350505050565b5f60208284031215612c11575f5ffd5b5035919050565b5f60208284031215612c28575f5ffd5b5051919050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156112cc576112cc612c71565b60208082526021908201527f6e6f7420656e6f7567682067656e65737472656e67746820746f20696e6675736040820152606560f81b606082015260800190565b818103818111156112cc576112cc612c71565b6001600160a01b039390931683526020830191909152604082015260600190565b634e487b7160e01b5f52604160045260245ffd5b604051610100810167ffffffffffffffff81118282101715612d4557612d45612d0d565b60405290565b5f6106408284031215612d5c575f5ffd5b82601f830112612d6a575f5ffd5b604051610640810167ffffffffffffffff81118282101715612d8e57612d8e612d0d565b60405280610640840185811115612da3575f5ffd5b845b81811015612dbd578051835260209283019201612da5565b509195945050505050565b5f6060828403128015612dd9575f5ffd5b506040516060810167ffffffffffffffff81118282101715612dfd57612dfd612d0d565b60409081528351825260208085015190830152928301519281019290925250919050565b5f610100828403128015612e33575f5ffd5b50612e3c612d21565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e0928301519281019290925250919050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b6001600160a01b0384168152602081018390526101408101612f026040830184612e8f565b949350505050565b5f60208284031215612f1a575f5ffd5b8151612b8681612b57565b6001600160a01b03841681526020810183905260a08101612f0260408301848051825260208082015190830152604090810151910152565b5f82612f7757634e487b7160e01b5f52601260045260245ffd5b500690565b6101c08101612f8b8286612e8f565b8351610100830152602084015161012083015260408401516101408301528251610160830152602083015161018083015260408301516101a0830152612f0256fea26469706673582212204448de072000fd6ae25fd733be0d8243875dcc73b44efc9774f19252011e14eb64736f6c634300081c0033
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106101c6575f3560e01c806356b54192116100fe578063c02816b11161009e578063e56066591161006e578063e560665914610383578063f17756e114610396578063f1b1a6ab146103a9578063f2fde38b146103bc575f5ffd5b8063c02816b114610342578063c113d0d914610355578063c2b7ac4914610368578063dcc6aaaa1461037b575f5ffd5b80638da5cb5b116100d95780638da5cb5b1461030457806396a33dc5146103145780639ad56dd51461031c578063b9f54f2c1461032f575f5ffd5b806356b54192146102d6578063715018a6146102e95780637d35f912146102f1575f5ffd5b80632c45fa49116101695780634410015c116101445780634410015c1461028a5780634af2fe6f1461029d5780634c4808fa146102b0578063521f4f0c146102c3575f5ffd5b80632c45fa4914610267578063324381561461026f5780633ccfd60b14610282575f5ffd5b806309fb0795116101a457806309fb0795146102225780631b8c058c146102355780631dec52911461023d5780632acd699214610250575f5ffd5b806303eaa141146101ca5780630549b27e146101df57806306f949131461020f575b5f5ffd5b6101dd6101d8366004612b6b565b6103cf565b005b6002546101f2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101dd61021d366004612b6b565b6105d8565b6101dd610230366004612b8d565b610628565b6101dd61095e565b6101dd61024b366004612b8d565b6109db565b610258610bed565b60405161020693929190612bd5565b6101dd610cf2565b6101dd61027d366004612b6b565b610d3b565b6101dd610dbb565b6101dd610298366004612b8d565b610e3b565b6003546101f2906001600160a01b031681565b6101f26102be366004612b6b565b61125f565b6101dd6102d1366004612b6b565b6112d2565b6101dd6102e4366004612b8d565b611400565b6101dd6118e8565b6101dd6102ff366004612c01565b6118f9565b5f546001600160a01b03166101f2565b6101f2611bdb565b6101dd61032a366004612b6b565b611c65565b6101dd61033d366004612b6b565b611cb5565b6101dd610350366004612b8d565b611d05565b6101f2610363366004612b6b565b612483565b6101dd610376366004612c01565b6124b5565b6101dd6124c2565b6004546101f2906001600160a01b031681565b6101dd6103a4366004612b6b565b6128d5565b6005546101f2906001600160a01b031681565b6101dd6103ca366004612b6b565b612925565b6103d761299b565b600254604051630bc7d91360e31b81526001600160a01b03838116600483015290911690635e3ec89890602401602060405180830381865afa15801561041f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104439190612c18565b156104a75760405162461bcd60e51b815260206004820152602960248201527f4e657720416464726573732068617320616c7265616479206c696e6b65642074604482015268379030b7102aa4a21760b91b60648201526084015b60405180910390fd5b600254604051630bc7d91360e31b81523360048201819052915f916001600160a01b0390911690635e3ec89890602401602060405180830381865afa1580156104f2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105169190612c18565b9050805f036105675760405162461bcd60e51b815260206004820152601e60248201527f4578697374696e67206164647265737320686173206e6f205549442e2e2e0000604482015260640161049e565b6002546040516306c34e9360e51b81526001600160a01b03848116600483015285811660248301529091169063d869d260906044015b5f604051808303815f87803b1580156105b4575f5ffd5b505af11580156105c6573d5f5f3e3d5ffd5b5050505050506105d560018055565b50565b6105e06129f4565b6001600160a01b0381166106065760405162461bcd60e51b815260040161049e90612c2f565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61063061299b565b5f610639611bdb565b9050610646816002612a4d565b6028831061068a5760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081d1c985a5b995c9251607a1b604482015260640161049e565b60018210156106db5760405162461bcd60e51b815260206004820152601b60248201527f3020696e7075742c206e6f7468696e6720746f20696e667573652e0000000000604482015260640161049e565b6002546040516315f67cf360e31b81525f916001600160a01b03169063afb3e7989061070d9085908890600401612c58565b602060405180830381865afa158015610728573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074c9190612c18565b9050835f0361078457610760836001612c85565b81101561077f5760405162461bcd60e51b815260040161049e90612c98565b6107a4565b828110156107a45760405162461bcd60e51b815260040161049e90612c98565b6002546001600160a01b0316635af875f783866107c18786612cd9565b9450846040518463ffffffff1660e01b81526004016107e293929190612cec565b5f604051808303815f87803b1580156107f9575f5ffd5b505af115801561080b573d5f5f3e3d5ffd5b505060025460405163067f299160e31b81525f93506001600160a01b0390911691506333f94c88906108439086908990600401612c58565b602060405180830381865afa15801561085e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108829190612c18565b6002549091506001600160a01b03166371a2058884876108a28886612c85565b6040518463ffffffff1660e01b81526004016108c093929190612cec565b5f604051808303815f87803b1580156108d7575f5ffd5b505af11580156108e9573d5f5f3e3d5ffd5b5050600254604051637d30ac7160e01b81526001600160a01b039091169250637d30ac71915061092190869089904290600401612cec565b5f604051808303815f87803b158015610938575f5ffd5b505af115801561094a573d5f5f3e3d5ffd5b5050505050505061095a60018055565b5050565b61096661299b565b610971336001612a4d565b600254604051639cef0bd560e01b81523360048201525f60248201526001600160a01b0390911690639cef0bd5906044015b5f604051808303815f87803b1580156109ba575f5ffd5b505af11580156109cc573d5f5f3e3d5ffd5b505050506109d960018055565b565b6109e361299b565b5f6109ec611bdb565b90506109f9816002612a4d565b5f610a058460c9612c85565b60048054604051627eeac760e11b815292935085926001600160a01b039091169162fdd58e91610a39918791879101612c58565b602060405180830381865afa158015610a54573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a789190612c18565b1015610adc5760405162461bcd60e51b815260206004820152602d60248201527f547261696e6572204974656d204e4654206e6f7420656e6f7567682e2043686560448201526c18dac81d1c985a5b995c881251609a1b606482015260840161049e565b60048054604051637a94c56560e11b81526001600160a01b039091169163f5298aca91610b0f9186918691899101612cec565b5f604051808303815f87803b158015610b26575f5ffd5b505af1158015610b38573d5f5f3e3d5ffd5b50506002546040516315f67cf360e31b81525f93506001600160a01b03909116915063afb3e79890610b709086908990600401612c58565b602060405180830381865afa158015610b8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610baf9190612c18565b6002549091506001600160a01b0316635af875f78487610bcf8886612c85565b6040518463ffffffff1660e01b815260040161092193929190612cec565b610bf5612b38565b610bfd612b38565b5f5f610c07611bdb565b600254604051633003c07760e21b81526001600160a01b03808416600483015292935091169063c00f01dc9060240161064060405180830381865afa158015610c52573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c769190612d4b565b6002546040516308a924af60e01b81526001600160a01b0384811660048301529296509116906308a924af9060240161064060405180830381865afa158015610cc1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce59190612d4b565b9250600754915050909192565b610cfa61299b565b610d05336001612a4d565b600254604051637fd7374f60e01b81523360048201525f60248201526001600160a01b0390911690637fd7374f906044016109a3565b610d4361299b565b33610d4f816001612a4d565b600254604051639cef0bd560e01b81526001600160a01b038381166004830152848116602483015290911690639cef0bd5906044015f604051808303815f87803b158015610d9b575f5ffd5b505af1158015610dad573d5f5f3e3d5ffd5b50505050506105d560018055565b610dc36129f4565b5f4711610e125760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f0000000000000000604482015260640161049e565b60405133904780156108fc02915f818181858888f193505050501580156105d5573d5f5f3e3d5ffd5b610e4361299b565b5f610e4c611bdb565b9050610e59816002612a4d565b6002546040516329323b0d60e21b81526001600160a01b0383811660048301525f92169063a4c8ec3490602401602060405180830381865afa158015610ea1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec59190612c18565b9050808410610f165760405162461bcd60e51b815260206004820152601a60248201527f43686f73656e20736c6f742065786365656473206c696d69742e000000000000604482015260640161049e565b6002546040516388e6c74d60e01b81525f916001600160a01b0316906388e6c74d90610f489086908990600401612c58565b606060405180830381865afa158015610f63573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f879190612dc8565b8051909150610fd85760405162461bcd60e51b815260206004820152601b60248201527f656d70747920736c6f742c206e6f7468696e6720746f206761696e0000000000604482015260640161049e565b600254604051636802761f60e01b81525f916001600160a01b031690636802761f9061100a9087908a90600401612c58565b61010060405180830381865afa158015611026573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104a9190612e21565b905060018160a0015110156110b15760405162461bcd60e51b815260206004820152602760248201527f6e6f742067656e65737472656e67746820746f20746f702075702c20656d70746044820152667920736c6f743f60c81b606482015260840161049e565b6005548251604051627eeac760e11b815287926001600160a01b03169162fdd58e916110e1918991600401612c58565b602060405180830381865afa1580156110fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111209190612c18565b101561117a5760405162461bcd60e51b8152602060048201526024808201527f4c696e6773204e4654206e6f7420656e6f7567682e20436865636b204c696e676044820152631cc8125160e21b606482015260840161049e565b6005548251604051637a94c56560e11b81526001600160a01b039092169163f5298aca916111af918891908a90600401612cec565b5f604051808303815f87803b1580156111c6575f5ffd5b505af11580156111d8573d5f5f3e3d5ffd5b50505050848160a0018181516111ee9190612c85565b90525060025460405163daa3f88b60e01b81526001600160a01b039091169063daa3f88b906112259087908a908690600401612edd565b5f604051808303815f87803b15801561123c575f5ffd5b505af115801561124e573d5f5f3e3d5ffd5b505050505050505061095a60018055565b60025460405163378ed8ed60e01b81526001600160a01b0383811660048301525f92169063378ed8ed906024015b602060405180830381865afa1580156112a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cc9190612f0a565b92915050565b6112da61299b565b6112e5816001612a4d565b60025460405163378ed8ed60e01b81526001600160a01b0383811660048301525f92169063378ed8ed90602401602060405180830381865afa15801561132d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113519190612f0a565b9050336001600160a01b03821681146113c65760405162461bcd60e51b815260206004820152603160248201527f796f7520617265206e6f74207065726d697474656420746f20636f6e74726f6c604482015270103a3434b9903bb2b119bbb0b63632ba1760791b606482015260840161049e565b600254604051637fd7374f60e01b81526001600160a01b038381166004830152858116602483015290911690637fd7374f9060440161059d565b61140861299b565b5f611411611bdb565b905061141e816002612a4d565b6002546040516388e6c74d60e01b81525f916001600160a01b0316906388e6c74d906114509085908890600401612c58565b606060405180830381865afa15801561146b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061148f9190612dc8565b80519091506114e05760405162461bcd60e51b815260206004820152601d60248201527f656d70747920736c6f742c206e6f7468696e6720746f20696e66757365000000604482015260640161049e565b600254604051636802761f60e01b81525f916001600160a01b031690636802761f906115129086908990600401612c58565b61010060405180830381865afa15801561152e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115529190612e21565b9050838160a0015110156115785760405162461bcd60e51b815260040161049e90612c98565b6115b86040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6115d960405180606001604052805f81526020015f81526020015f81525090565b6115fa60405180606001604052805f81526020015f81526020015f81525090565b868460a00151036117f85760025460405163daa3f88b60e01b81526001600160a01b039091169063daa3f88b906116399089908c908890600401612edd565b5f604051808303815f87803b158015611650575f5ffd5b505af1158015611662573d5f5f3e3d5ffd5b50506002546040516318f626f560e11b81526001600160a01b0390911692506331ec4dea915061169a9089908c908790600401612f25565b5f604051808303815f87803b1580156116b1575f5ffd5b505af11580156116c3573d5f5f3e3d5ffd5b505060025460405163108b074f60e31b81526001600160a01b0390911692506384583a7891506116fb9089908c908690600401612f25565b5f604051808303815f87803b158015611712575f5ffd5b505af1158015611724573d5f5f3e3d5ffd5b505060025460405163c10e83e160e01b81526001600160a01b03909116925063c10e83e1915061175c9089908c908890600401612edd565b5f604051808303815f87803b158015611773575f5ffd5b505af1158015611785573d5f5f3e3d5ffd5b5050600554875160405163020da84160e61b8152600481018c90526001600160a01b038b8116602483015260448201929092529116925063836a104091506064015f604051808303815f87803b1580156117dd575f5ffd5b505af11580156117ef573d5f5f3e3d5ffd5b505050506118d9565b868460a00181815161180a9190612cd9565b90525060025460405163daa3f88b60e01b81526001600160a01b039091169063daa3f88b906118419089908c908990600401612edd565b5f604051808303815f87803b158015611858575f5ffd5b505af115801561186a573d5f5f3e3d5ffd5b5050600554875160405163020da84160e61b8152600481018c90526001600160a01b038b8116602483015260448201929092529116925063836a104091506064015f604051808303815f87803b1580156118c2575f5ffd5b505af11580156118d4573d5f5f3e3d5ffd5b505050505b50505050505061095a60018055565b6118f06129f4565b6109d95f612ae9565b61190161299b565b5f61190a611bdb565b9050611917816002612a4d565b60025460405163246ccd7b60e01b81525f916001600160a01b03169063246ccd7b906119499085908790600401612c58565b602060405180830381865afa158015611964573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119889190612c18565b9050600754816119989190612c85565b4210156119d95760405162461bcd60e51b815260206004820152600f60248201526e5374696c6c20756e6c6f636b696e6760881b604482015260640161049e565b60025460405163067f299160e31b81525f916001600160a01b0316906333f94c8890611a0b9086908890600401612c58565b602060405180830381865afa158015611a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4a9190612c18565b90505f8111611a925760405162461bcd60e51b815260206004820152601460248201527327379033b2b7329034b9903637b1b5b4b733971760611b604482015260640161049e565b600254604051630e3440b160e31b81526001600160a01b03909116906371a2058890611ac690869088905f90600401612cec565b5f604051808303815f87803b158015611add575f5ffd5b505af1158015611aef573d5f5f3e3d5ffd5b5050600254604051637d30ac7160e01b81526001600160a01b039091169250637d30ac719150611b2790869088905f90600401612cec565b5f604051808303815f87803b158015611b3e575f5ffd5b505af1158015611b50573d5f5f3e3d5ffd5b505050505f8460c9611b629190612c85565b6004805460405163020da84160e61b81529182018590526001600160a01b03878116602484015260448301849052929350919091169063836a1040906064015f604051808303815f87803b158015611bb8575f5ffd5b505af1158015611bca573d5f5f3e3d5ffd5b50505050505050506105d560018055565b6002546040516302e6c26360e11b81523360048201525f9182916001600160a01b03909116906305cd84c690602401602060405180830381865afa158015611c25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c499190612f0a565b90506001600160a01b038116611c60573391505090565b919050565b611c6d6129f4565b6001600160a01b038116611c935760405162461bcd60e51b815260040161049e90612c2f565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b611cbd6129f4565b6001600160a01b038116611ce35760405162461bcd60e51b815260040161049e90612c2f565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611d0d61299b565b5f611d16611bdb565b9050611d23816002612a4d565b6002546040516329323b0d60e21b81526001600160a01b0383811660048301525f92169063a4c8ec3490602401602060405180830381865afa158015611d6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d8f9190612c18565b9050808310611de05760405162461bcd60e51b815260206004820152601a60248201527f43686f73656e20736c6f742065786365656473206c696d69742e000000000000604482015260640161049e565b6002546040516388e6c74d60e01b81525f916001600160a01b0316906388e6c74d90611e129086908890600401612c58565b606060405180830381865afa158015611e2d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e519190612dc8565b805190915015611ea35760405162461bcd60e51b815260206004820152601860248201527f43686f73656e20736c6f74206973206f636375706965642e0000000000000000604482015260640161049e565b600554604051627eeac760e11b81526001916001600160a01b03169062fdd58e90611ed49087908a90600401612c58565b602060405180830381865afa158015611eef573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f139190612c18565b1015611f755760405162461bcd60e51b815260206004820152602b60248201527f4c696e6773204e4654206e6f742066696e642e20596f7520646f6e742068617660448201526a32903a3434b99027232a1760a91b606482015260840161049e565b600554604051637a94c56560e11b81526001600160a01b039091169063f5298aca90611faa9086908990600190600401612cec565b5f604051808303815f87803b158015611fc1575f5ffd5b505af1158015611fd3573d5f5f3e3d5ffd5b505060408051610100810182526103e88152606460208201819052603282840152606082018190526080820152600160a082015260035491516304fe10d360e41b8152600481018a90525f945090925060c08301916001600160a01b031690634fe10d3090602401602060405180830381865afa158015612056573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207a9190612c18565b81525f6020909101526003546040516353b4eff960e11b8152600481018990529192506001600160a01b03169063a769dff290602401606060405180830381865afa1580156120cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120ef9190612dc8565b86815260408101519092506003036121135761210d61271087612f5d565b60e08201525b81604001516002036121315761212b61271087612f5d565b60c08201525b5f60405180606001604052805f815260200162015180426121529190612cd9565b8152602001612163612a3042612c85565b905260025460405163daa3f88b60e01b81529192506001600160a01b03169063daa3f88b9061219a9088908a908790600401612edd565b5f604051808303815f87803b1580156121b1575f5ffd5b505af11580156121c3573d5f5f3e3d5ffd5b50506002546040516318f626f560e11b81526001600160a01b0390911692506331ec4dea91506121fb9088908a908890600401612f25565b5f604051808303815f87803b158015612212575f5ffd5b505af1158015612224573d5f5f3e3d5ffd5b505060025460405163108b074f60e31b81526001600160a01b0390911692506384583a78915061225c9088908a908690600401612f25565b5f604051808303815f87803b158015612273575f5ffd5b505af1158015612285573d5f5f3e3d5ffd5b505060025460035486516040516315e3d00d60e11b815260048101919091526001600160a01b03928316945063c10e83e1935089928b921690632bc7a01a9060240161010060405180830381865afa1580156122e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123079190612e21565b6040518463ffffffff1660e01b815260040161232593929190612edd565b5f604051808303815f87803b15801561233c575f5ffd5b505af115801561234e573d5f5f3e3d5ffd5b505060025460405163b2cbbfad60e01b81526001600160a01b0389811660048301525f9450909116915063b2cbbfad90602401602060405180830381865afa15801561239c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c09190612c18565b84519091506123d29061271090612f5d565b600254604051636ed6fed760e11b8152600190921b92909217916001600160a01b03169063ddadfdae9061240c9089908590600401612c58565b5f604051808303815f87803b158015612423575f5ffd5b505af1158015612435573d5f5f3e3d5ffd5b505050507fc1e766b7fcdd3f4867b7cd3d80cf2616b5b7bc4340a7971becb6036c77aa65bd83858460405161246c93929190612f7c565b60405180910390a150505050505061095a60018055565b6002546040516302e6c26360e11b81526001600160a01b0383811660048301525f9216906305cd84c69060240161128d565b6124bd6129f4565b600755565b6124ca61299b565b5f6124d433612483565b90506001600160a01b0381166125435760405162461bcd60e51b815260206004820152602e60248201527f596f7520646f206e6f74206861766520706572736f6e616c2077616c6c65742060448201526d30baba3432b73a34b1b0ba32b21760911b606482015260840161049e565b60025460405163378ed8ed60e01b81526001600160a01b0383811660048301525f92169063378ed8ed90602401602060405180830381865afa15801561258b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125af9190612f0a565b90506001600160a01b03811633146126245760405162461bcd60e51b815260206004820152603260248201527f596f7520646f206e6f74206861766520636f6e74726f6c206f7665722074686960448201527139903832b939b7b730b6103bb0b63632ba1760711b606482015260840161049e565b600254604051630bc7d91360e31b81523360048201525f916001600160a01b031690635e3ec89890602401602060405180830381865afa15801561266a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061268e9190612c18565b600254604051630bc7d91360e31b81526001600160a01b0386811660048301529293505f9290911690635e3ec89890602401602060405180830381865afa1580156126db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ff9190612c18565b600254604051632875cd2b60e01b81529192506001600160a01b031690632875cd2b906127329086908590600401612c58565b5f604051808303815f87803b158015612749575f5ffd5b505af115801561275b573d5f5f3e3d5ffd5b50506002546040516311fa2c4960e01b8152600481018590526001600160a01b03878116602483015290911692506311fa2c4991506044015f604051808303815f87803b1580156127aa575f5ffd5b505af11580156127bc573d5f5f3e3d5ffd5b5050600254604051632875cd2b60e01b81526001600160a01b039091169250632875cd2b91506127f29087908690600401612c58565b5f604051808303815f87803b158015612809575f5ffd5b505af115801561281b573d5f5f3e3d5ffd5b50506002546040516311fa2c4960e01b8152600481018690526001600160a01b03888116602483015290911692506311fa2c4991506044015f604051808303815f87803b15801561286a575f5ffd5b505af115801561287c573d5f5f3e3d5ffd5b505060408051858152602081018590526001600160a01b038089169450871692507f1d5be8888e86a0f9d77e7d6375cd8a6824db2f90cd41d56455e437c8b4eb9fc3910160405180910390a3505050506109d960018055565b6128dd6129f4565b6001600160a01b0381166129035760405162461bcd60e51b815260040161049e90612c2f565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b61292d6129f4565b6001600160a01b0381166129925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161049e565b6105d581612ae9565b6002600154036129ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161049e565b6002600155565b5f546001600160a01b031633146109d95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161049e565b6001600160a01b0382165f908152600660205260409020548190612a719042612cd9565b1015612acd5760405162461bcd60e51b815260206004820152602560248201527f4e6f6e2d5265656e7472616e742c20736c6f7720646f776e205458206174746560448201526436b83a399760d91b606482015260840161049e565b506001600160a01b03165f908152600660205260409020429055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518061064001604052806032906020820280368337509192915050565b6001600160a01b03811681146105d5575f5ffd5b5f60208284031215612b7b575f5ffd5b8135612b8681612b57565b9392505050565b5f5f60408385031215612b9e575f5ffd5b50508035926020909101359150565b805f5b6032811015612bcf578151845260209384019390910190600101612bb0565b50505050565b610ca08101612be48286612bad565b612bf2610640830185612bad565b82610c80830152949350505050565b5f60208284031215612c11575f5ffd5b5035919050565b5f60208284031215612c28575f5ffd5b5051919050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156112cc576112cc612c71565b60208082526021908201527f6e6f7420656e6f7567682067656e65737472656e67746820746f20696e6675736040820152606560f81b606082015260800190565b818103818111156112cc576112cc612c71565b6001600160a01b039390931683526020830191909152604082015260600190565b634e487b7160e01b5f52604160045260245ffd5b604051610100810167ffffffffffffffff81118282101715612d4557612d45612d0d565b60405290565b5f6106408284031215612d5c575f5ffd5b82601f830112612d6a575f5ffd5b604051610640810167ffffffffffffffff81118282101715612d8e57612d8e612d0d565b60405280610640840185811115612da3575f5ffd5b845b81811015612dbd578051835260209283019201612da5565b509195945050505050565b5f6060828403128015612dd9575f5ffd5b506040516060810167ffffffffffffffff81118282101715612dfd57612dfd612d0d565b60409081528351825260208085015190830152928301519281019290925250919050565b5f610100828403128015612e33575f5ffd5b50612e3c612d21565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e0928301519281019290925250919050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b6001600160a01b0384168152602081018390526101408101612f026040830184612e8f565b949350505050565b5f60208284031215612f1a575f5ffd5b8151612b8681612b57565b6001600160a01b03841681526020810183905260a08101612f0260408301848051825260208082015190830152604090810151910152565b5f82612f7757634e487b7160e01b5f52601260045260245ffd5b500690565b6101c08101612f8b8286612e8f565b8351610100830152602084015161012083015260408401516101408301528251610160830152602083015161018083015260408301516101a0830152612f0256fea26469706673582212204448de072000fd6ae25fd733be0d8243875dcc73b44efc9774f19252011e14eb64736f6c634300081c0033
Deployed Bytecode Sourcemap
26822:15951:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39320:461;;;;;;:::i;:::-;;:::i;:::-;;26889:37;;;;;-1:-1:-1;;;;;26889:37:0;;;;;;-1:-1:-1;;;;;589:32:1;;;571:51;;559:2;544:18;26889:37:0;;;;;;;;28806:230;;;;;;:::i;:::-;;:::i;34827:1179::-;;;;;;:::i;:::-;;:::i;42226:179::-;;;:::i;38149:721::-;;;;;;:::i;:::-;;:::i;38878:430::-;;;:::i;:::-;;;;;;;;;:::i;42043:177::-;;;:::i;39855:247::-;;;;;;:::i;:::-;;:::i;29528:257::-;;;:::i;36903:1238::-;;;;;;:::i;:::-;;:::i;26933:37::-;;;;;-1:-1:-1;;;;;26933:37:0;;;42411:165;;;;;;:::i;:::-;;:::i;40110:549::-;;;;;;:::i;:::-;;:::i;33159:1660::-;;;;;;:::i;:::-;;:::i;2788:103::-;;;:::i;36020:873::-;;;;;;:::i;:::-;;:::i;2140:87::-;2186:7;2213:6;-1:-1:-1;;;;;2213:6:0;2140:87;;30758:299;;;:::i;29042:231::-;;;;;;:::i;:::-;;:::i;28566:234::-;;;;;;:::i;:::-;;:::i;31154:1949::-;;;;;;:::i;:::-;;:::i;42582:182::-;;;;;;:::i;:::-;;:::i;29868:112::-;;;;;;:::i;:::-;;:::i;40866:1163::-;;;:::i;26977:37::-;;;;;-1:-1:-1;;;;;26977:37:0;;;29279:241;;;;;;:::i;:::-;;:::i;27021:43::-;;;;;-1:-1:-1;;;;;27021:43:0;;;3046:201;;;;;;:::i;:::-;;:::i;39320:461::-;7139:21;:19;:21::i;:::-;39421:15:::1;::::0;:39:::1;::::0;-1:-1:-1;;;39421:39:0;;-1:-1:-1;;;;;589:32:1;;;39421:39:0::1;::::0;::::1;571:51:1::0;39421:15:0;;::::1;::::0;:23:::1;::::0;544:18:1;;39421:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44:::0;39413:98:::1;;;::::0;-1:-1:-1;;;39413:98:0;;3334:2:1;39413:98:0::1;::::0;::::1;3316:21:1::0;3373:2;3353:18;;;3346:30;3412:34;3392:18;;;3385:62;-1:-1:-1;;;3463:18:1;;;3456:39;3512:19;;39413:98:0::1;;;;;;;;;39588:15;::::0;:35:::1;::::0;-1:-1:-1;;;39588:35:0;;39545:10:::1;39588:35;::::0;::::1;571:51:1::0;;;39545:10:0;39524:18:::1;::::0;-1:-1:-1;;;;;39588:15:0;;::::1;::::0;:23:::1;::::0;544:18:1;;39588:35:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39566:57;;39642:14;39660:1;39642:19:::0;39634:62:::1;;;::::0;-1:-1:-1;;;39634:62:0;;3744:2:1;39634:62:0::1;::::0;::::1;3726:21:1::0;3783:2;3763:18;;;3756:30;3822:32;3802:18;;;3795:60;3872:18;;39634:62:0::1;3542:354:1::0;39634:62:0::1;39717:15;::::0;:54:::1;::::0;-1:-1:-1;;;39717:54:0;;-1:-1:-1;;;;;4093:32:1;;;39717:54:0::1;::::0;::::1;4075:51:1::0;4162:32;;;4142:18;;;4135:60;39717:15:0;;::::1;::::0;:27:::1;::::0;4048:18:1;;39717:54:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39394:387;;7183:20:::0;6577:1;7703:22;;7520:213;7183:20;39320:461;:::o;28806:230::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;28909:34:0;::::1;28901:62;;;;-1:-1:-1::0;;;28901:62:0::1;;;;;;;:::i;:::-;28974:11;:54:::0;;-1:-1:-1;;;;;;28974:54:0::1;-1:-1:-1::0;;;;;28974:54:0;;;::::1;::::0;;;::::1;::::0;;28806:230::o;34827:1179::-;7139:21;:19;:21::i;:::-;34925::::1;34949:25;:23;:25::i;:::-;34925:49;;34988:37;35007:13;35023:1;34988:18;:37::i;:::-;35058:2;35045:10;:15;35036:46;;;::::0;-1:-1:-1;;;35036:46:0;;4752:2:1;35036:46:0::1;::::0;::::1;4734:21:1::0;4791:2;4771:18;;;4764:30;-1:-1:-1;;;4810:18:1;;;4803:47;4867:18;;35036:46:0::1;4550:341:1::0;35036:46:0::1;35119:1;35102:13;:18;;35093:59;;;::::0;-1:-1:-1;;;35093:59:0;;5098:2:1;35093:59:0::1;::::0;::::1;5080:21:1::0;5137:2;5117:18;;;5110:30;5176:29;5156:18;;;5149:57;5223:18;;35093:59:0::1;4896:351:1::0;35093:59:0::1;35194:15;::::0;:63:::1;::::0;-1:-1:-1;;;35194:63:0;;35172:19:::1;::::0;-1:-1:-1;;;;;35194:15:0::1;::::0;:37:::1;::::0;:63:::1;::::0;35232:13;;35246:10;;35194:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35172:85;;35272:10;35286:1;35272:15:::0;35268:238:::1;;35331:15;:13:::0;35345:1:::1;35331:15;:::i;:::-;35313:14;:33;;35305:79;;;;-1:-1:-1::0;;;35305:79:0::1;;;;;;;:::i;:::-;35268:238;;;35443:13;35425:14;:31;;35417:77;;;;-1:-1:-1::0;;;35417:77:0::1;;;;;;;:::i;:::-;35557:15;::::0;-1:-1:-1;;;;;35557:15:0::1;:37;35595:13:::0;35610:10;35622:31:::1;35640:13:::0;35622:31;::::1;:::i;:::-;;;;35557:97;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;35726:15:0::1;::::0;:69:::1;::::0;-1:-1:-1;;;35726:69:0;;35707:16:::1;::::0;-1:-1:-1;;;;;;35726:15:0;;::::1;::::0;-1:-1:-1;35726:42:0::1;::::0;:69:::1;::::0;35769:13;;35784:10;;35726:69:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35806:15;::::0;35707:88;;-1:-1:-1;;;;;;35806:15:0::1;:42;35849:13:::0;35863:10;35874:25:::1;35886:13:::0;35707:88;35874:25:::1;:::i;:::-;35806:94;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;35911:15:0::1;::::0;:85:::1;::::0;-1:-1:-1;;;35911:85:0;;-1:-1:-1;;;;;35911:15:0;;::::1;::::0;-1:-1:-1;35911:43:0::1;::::0;-1:-1:-1;35911:85:0::1;::::0;35955:13;;35969:10;;35980:15:::1;::::0;35911:85:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34914:1092;;;7183:20:::0;6577:1;7703:22;;7520:213;7183:20;34827:1179;;:::o;42226:179::-;7139:21;:19;:21::i;:::-;42299:32:::1;42318:10;42329:1;42299:18;:32::i;:::-;42342:15;::::0;:55:::1;::::0;-1:-1:-1;;;42342:55:0;;42375:10:::1;42342:55;::::0;::::1;4075:51:1::0;42342:15:0::1;4142:18:1::0;;;4135:60;-1:-1:-1;;;;;42342:15:0;;::::1;::::0;:32:::1;::::0;4048:18:1;;42342:55:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7183:20:::0;6577:1;7703:22;;7520:213;7183:20;42226:179::o;38149:721::-;7139:21;:19;:21::i;:::-;38256::::1;38280:25;:23;:25::i;:::-;38256:49;;38319:37;38338:13;38354:1;38319:18;:37::i;:::-;38369:17;38389:15;:9:::0;38401:3:::1;38389:15;:::i;:::-;38433:13;::::0;;:51:::1;::::0;-1:-1:-1;;;38433:51:0;;38369:35;;-1:-1:-1;38488:13:0;;-1:-1:-1;;;;;38433:13:0;;::::1;::::0;:23:::1;::::0;:51:::1;::::0;38457:13;;38369:35;;38433:51:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;;38425:126;;;::::0;-1:-1:-1;;;38425:126:0;;6880:2:1;38425:126:0::1;::::0;::::1;6862:21:1::0;6919:2;6899:18;;;6892:30;6958:34;6938:18;;;6931:62;-1:-1:-1;;;7009:18:1;;;7002:43;7062:19;;38425:126:0::1;6678:409:1::0;38425:126:0::1;38572:13;::::0;;:62:::1;::::0;-1:-1:-1;;;38572:62:0;;-1:-1:-1;;;;;38572:13:0;;::::1;::::0;:18:::1;::::0;:62:::1;::::0;38591:13;;38606:12;;38620:13;;38572:62:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;38685:15:0::1;::::0;:63:::1;::::0;-1:-1:-1;;;38685:63:0;;38655:27:::1;::::0;-1:-1:-1;;;;;;38685:15:0;;::::1;::::0;-1:-1:-1;38685:37:0::1;::::0;:63:::1;::::0;38723:13;;38738:9;;38685:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38759:15;::::0;38655:93;;-1:-1:-1;;;;;;38759:15:0::1;:37;38797:13:::0;38812:9;38823:36:::1;38846:13:::0;38655:93;38823:36:::1;:::i;:::-;38759:101;;;;;;;;;;;;;;;;;:::i;38878:430::-:0;38936:28;;:::i;:::-;38966:33;;:::i;:::-;39002:18;39032:21;39056:25;:23;:25::i;:::-;39107:15;;:60;;-1:-1:-1;;;39107:60:0;;-1:-1:-1;;;;;589:32:1;;;39107:60:0;;;571:51:1;39032:49:0;;-1:-1:-1;39107:15:0;;;:45;;544:18:1;;39107:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39198:15;;:61;;-1:-1:-1;;;39198:61:0;;-1:-1:-1;;;;;589:32:1;;;39198:61:0;;;571:51:1;39092:75:0;;-1:-1:-1;39198:15:0;;;:46;;544:18:1;;39198:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39178:81;;39286:12;;39270:28;;39021:287;38878:430;;;:::o;42043:177::-;7139:21;:19;:21::i;:::-;42113:32:::1;42132:10;42143:1;42113:18;:32::i;:::-;42156:15;::::0;:56:::1;::::0;-1:-1:-1;;;42156:56:0;;42190:10:::1;42156:56;::::0;::::1;4075:51:1::0;42156:15:0::1;4142:18:1::0;;;4135:60;-1:-1:-1;;;;;42156:15:0;;::::1;::::0;:33:::1;::::0;4048:18:1;;42156:56:0::1;3901:300:1::0;39855:247:0;7139:21;:19;:21::i;:::-;39973:10:::1;39994:34;39973:10:::0;40026:1:::1;39994:18;:34::i;:::-;40039:15;::::0;:55:::1;::::0;-1:-1:-1;;;40039:55:0;;-1:-1:-1;;;;;4093:32:1;;;40039:55:0::1;::::0;::::1;4075:51:1::0;4162:32;;;4142:18;;;4135:60;40039:15:0;;::::1;::::0;:32:::1;::::0;4048:18:1;;40039:55:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39941:161;7183:20:::0;6577:1;7703:22;;7520:213;29528:257;2026:13;:11;:13::i;:::-;29685:1:::1;29661:21;:25;29653:62;;;::::0;-1:-1:-1;;;29653:62:0;;8526:2:1;29653:62:0::1;::::0;::::1;8508:21:1::0;8565:2;8545:18;;;8538:30;8604:26;8584:18;;;8577:54;8648:18;;29653:62:0::1;8324:348:1::0;29653:62:0::1;29726:51;::::0;29734:10:::1;::::0;29755:21:::1;29726:51:::0;::::1;;;::::0;::::1;::::0;;;29755:21;29734:10;29726:51;::::1;;;;;;;;;;;;;;;;;;36903:1238:::0;7139:21;:19;:21::i;:::-;36994::::1;37018:25;:23;:25::i;:::-;36994:49;;37057:37;37076:13;37092:1;37057:18;:37::i;:::-;37223:15;::::0;:40:::1;::::0;-1:-1:-1;;;37223:40:0;;-1:-1:-1;;;;;589:32:1;;;37223:40:0::1;::::0;::::1;571:51:1::0;37209:11:0::1;::::0;37223:15:::1;::::0;:25:::1;::::0;544:18:1;;37223:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37209:54;;37313:6;37305:5;:14;37297:53;;;::::0;-1:-1:-1;;;37297:53:0;;8879:2:1;37297:53:0::1;::::0;::::1;8861:21:1::0;8918:2;8898:18;;;8891:30;8957:28;8937:18;;;8930:56;9003:18;;37297:53:0::1;8677:350:1::0;37297:53:0::1;37392:15;::::0;:52:::1;::::0;-1:-1:-1;;;37392:52:0;;37363:26:::1;::::0;-1:-1:-1;;;;;37392:15:0::1;::::0;:30:::1;::::0;:52:::1;::::0;37423:13;;37438:5;;37392:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37463:13:::0;;37363:81;;-1:-1:-1;37455:57:0::1;;;::::0;-1:-1:-1;;;37455:57:0;;10004:2:1;37455:57:0::1;::::0;::::1;9986:21:1::0;10043:2;10023:18;;;10016:30;10082:29;10062:18;;;10055:57;10129:18;;37455:57:0::1;9802:351:1::0;37455:57:0::1;37551:15;::::0;:49:::1;::::0;-1:-1:-1;;;37551:49:0;;37525:23:::1;::::0;-1:-1:-1;;;;;37551:15:0::1;::::0;:27:::1;::::0;:49:::1;::::0;37579:13;;37594:5;;37551:49:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37525:75;;37645:1;37619:9;:22;;;:27;;37611:79;;;::::0;-1:-1:-1;;;37611:79:0;;11506:2:1;37611:79:0::1;::::0;::::1;11488:21:1::0;11545:2;11525:18;;;11518:30;11584:34;11564:18;;;11557:62;-1:-1:-1;;;11635:18:1;;;11628:37;11682:19;;37611:79:0::1;11304:403:1::0;37611:79:0::1;37757:16;::::0;37798:13;;37757:56:::1;::::0;-1:-1:-1;;;37757:56:0;;37817:13;;-1:-1:-1;;;;;37757:16:0::1;::::0;:26:::1;::::0;:56:::1;::::0;37784:13;;37757:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:73;;37749:122;;;::::0;-1:-1:-1;;;37749:122:0;;11914:2:1;37749:122:0::1;::::0;::::1;11896:21:1::0;11953:2;11933:18;;;11926:30;11992:34;11972:18;;;11965:62;-1:-1:-1;;;12043:18:1;;;12036:34;12087:19;;37749:122:0::1;11712:400:1::0;37749:122:0::1;37882:16;::::0;37919:13;;37882:66:::1;::::0;-1:-1:-1;;;37882:66:0;;-1:-1:-1;;;;;37882:16:0;;::::1;::::0;:21:::1;::::0;:66:::1;::::0;37904:13;;37919;37934;;37882:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38049:13;38023:9;:22;;:39;;;;;;;:::i;:::-;::::0;;-1:-1:-1;38073:15:0::1;::::0;:60:::1;::::0;-1:-1:-1;;;38073:60:0;;-1:-1:-1;;;;;38073:15:0;;::::1;::::0;:27:::1;::::0;:60:::1;::::0;38101:13;;38116:5;;38123:9;;38073:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36983:1158;;;;7183:20:::0;6577:1;7703:22;;7520:213;42411:165;42527:15;;:41;;-1:-1:-1;;;42527:41:0;;-1:-1:-1;;;;;589:32:1;;;42527:41:0;;;571:51:1;42483:18:0;;42527:15;;:29;;544:18:1;;42527:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42514:54;42411:165;-1:-1:-1;;42411:165:0:o;40110:549::-;7139:21;:19;:21::i;:::-;40259:34:::1;40278:10;40291:1;40259:18;:34::i;:::-;40331:15;::::0;:41:::1;::::0;-1:-1:-1;;;40331:41:0;;-1:-1:-1;;;;;589:32:1;;;40331:41:0::1;::::0;::::1;571:51:1::0;40304:24:0::1;::::0;40331:15:::1;::::0;:29:::1;::::0;544:18:1;;40331:41:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40304:68:::0;-1:-1:-1;40404:10:0::1;-1:-1:-1::0;;;;;40433:30:0;::::1;::::0;::::1;40425:92;;;::::0;-1:-1:-1;;;40425:92:0;;13470:2:1;40425:92:0::1;::::0;::::1;13452:21:1::0;13509:2;13489:18;;;13482:30;13548:34;13528:18;;;13521:62;-1:-1:-1;;;13599:18:1;;;13592:47;13656:19;;40425:92:0::1;13268:413:1::0;40425:92:0::1;40595:15;::::0;:56:::1;::::0;-1:-1:-1;;;40595:56:0;;-1:-1:-1;;;;;4093:32:1;;;40595:56:0::1;::::0;::::1;4075:51:1::0;4162:32;;;4142:18;;;4135:60;40595:15:0;;::::1;::::0;:33:::1;::::0;4048:18:1;;40595:56:0::1;3901:300:1::0;33159:1660:0;7139:21;:19;:21::i;:::-;33249::::1;33273:25;:23;:25::i;:::-;33249:49;;33312:37;33331:13;33347:1;33312:18;:37::i;:::-;33391:15;::::0;:52:::1;::::0;-1:-1:-1;;;33391:52:0;;33362:26:::1;::::0;-1:-1:-1;;;;;33391:15:0::1;::::0;:30:::1;::::0;:52:::1;::::0;33422:13;;33437:5;;33391:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33462:13:::0;;33362:81;;-1:-1:-1;33454:59:0::1;;;::::0;-1:-1:-1;;;33454:59:0;;13888:2:1;33454:59:0::1;::::0;::::1;13870:21:1::0;13927:2;13907:18;;;13900:30;13966:31;13946:18;;;13939:59;14015:18;;33454:59:0::1;13686:353:1::0;33454:59:0::1;33552:15;::::0;:49:::1;::::0;-1:-1:-1;;;33552:49:0;;33526:23:::1;::::0;-1:-1:-1;;;;;33552:15:0::1;::::0;:27:::1;::::0;:49:::1;::::0;33580:13;;33595:5;;33552:49:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33526:75;;33646:13;33620:9;:22;;;:39;;33612:85;;;;-1:-1:-1::0;;;33612:85:0::1;;;;;;;:::i;:::-;33718:27;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33718:27:0::1;33756:30;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;33756:30:0::1;33797:26;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;33797:26:0::1;33866:13;33840:9;:22;;;:39:::0;33836:974:::1;;33973:15;::::0;:64:::1;::::0;-1:-1:-1;;;33973:64:0;;-1:-1:-1;;;;;33973:15:0;;::::1;::::0;:27:::1;::::0;:64:::1;::::0;34001:13;;34016:5;;34023:13;;33973:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;34052:15:0::1;::::0;:68:::1;::::0;-1:-1:-1;;;34052:68:0;;-1:-1:-1;;;;;34052:15:0;;::::1;::::0;-1:-1:-1;34052:30:0::1;::::0;-1:-1:-1;34052:68:0::1;::::0;34083:13;;34097:5;;34105:14;;34052:68:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;34135:15:0::1;::::0;:63:::1;::::0;-1:-1:-1;;;34135:63:0;;-1:-1:-1;;;;;34135:15:0;;::::1;::::0;-1:-1:-1;34135:27:0::1;::::0;-1:-1:-1;34135:63:0::1;::::0;34163:13;;34178:5;;34185:12;;34135:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;34213:15:0::1;::::0;:76:::1;::::0;-1:-1:-1;;;34213:76:0;;-1:-1:-1;;;;;34213:15:0;;::::1;::::0;-1:-1:-1;34213:39:0::1;::::0;-1:-1:-1;34213:76:0::1;::::0;34253:13;;34268:5;;34275:13;;34213:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;34352:16:0::1;::::0;34404:13;;34352:66:::1;::::0;-1:-1:-1;;;34352:66:0;;::::1;::::0;::::1;15280:25:1::0;;;-1:-1:-1;;;;;15341:32:1;;;15321:18;;;15314:60;15390:18;;;15383:34;;;;34352:16:0;::::1;::::0;-1:-1:-1;34352:21:0::1;::::0;-1:-1:-1;15253:18:1;;34352:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33836:974;;;34581:13;34555:9;:22;;:39;;;;;;;:::i;:::-;::::0;;-1:-1:-1;34609:15:0::1;::::0;:60:::1;::::0;-1:-1:-1;;;34609:60:0;;-1:-1:-1;;;;;34609:15:0;;::::1;::::0;:27:::1;::::0;:60:::1;::::0;34637:13;;34652:5;;34659:9;;34609:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;34732:16:0::1;::::0;34784:13;;34732:66:::1;::::0;-1:-1:-1;;;34732:66:0;;::::1;::::0;::::1;15280:25:1::0;;;-1:-1:-1;;;;;15341:32:1;;;15321:18;;;15314:60;15390:18;;;15383:34;;;;34732:16:0;::::1;::::0;-1:-1:-1;34732:21:0::1;::::0;-1:-1:-1;15253:18:1;;34732:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33836:974;33238:1581;;;;;;7183:20:::0;6577:1;7703:22;;7520:213;2788:103;2026:13;:11;:13::i;:::-;2853:30:::1;2880:1;2853:18;:30::i;36020:873::-:0;7139:21;:19;:21::i;:::-;36099::::1;36123:25;:23;:25::i;:::-;36099:49;;36162:37;36181:13;36197:1;36162:18;:37::i;:::-;36230:15;::::0;:74:::1;::::0;-1:-1:-1;;;36230:74:0;;36212:15:::1;::::0;-1:-1:-1;;;;;36230:15:0::1;::::0;:43:::1;::::0;:74:::1;::::0;36274:13;;36288:15;;36230:74:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36212:92;;36355:12;;36342:10;:25;;;;:::i;:::-;36323:15;:44;;36315:72;;;::::0;-1:-1:-1;;;36315:72:0;;15630:2:1;36315:72:0::1;::::0;::::1;15612:21:1::0;15669:2;15649:18;;;15642:30;-1:-1:-1;;;15688:18:1;;;15681:45;15743:18;;36315:72:0::1;15428:339:1::0;36315:72:0::1;36426:15;::::0;:74:::1;::::0;-1:-1:-1;;;36426:74:0;;36407:16:::1;::::0;-1:-1:-1;;;;;36426:15:0::1;::::0;:42:::1;::::0;:74:::1;::::0;36469:13;;36484:15;;36426:74:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36407:93;;36533:1;36519:11;:15;36511:47;;;::::0;-1:-1:-1;;;36511:47:0;;15974:2:1;36511:47:0::1;::::0;::::1;15956:21:1::0;16013:2;15993:18;;;15986:30;-1:-1:-1;;;16032:18:1;;;16025:50;16092:18;;36511:47:0::1;15772:344:1::0;36511:47:0::1;36579:15;::::0;:75:::1;::::0;-1:-1:-1;;;36579:75:0;;-1:-1:-1;;;;;36579:15:0;;::::1;::::0;:42:::1;::::0;:75:::1;::::0;36622:13;;36636:15;;36579::::1;::::0;:75:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;36665:15:0::1;::::0;:76:::1;::::0;-1:-1:-1;;;36665:76:0;;-1:-1:-1;;;;;36665:15:0;;::::1;::::0;-1:-1:-1;36665:43:0::1;::::0;-1:-1:-1;36665:76:0::1;::::0;36709:13;;36723:15;;36665::::1;::::0;:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36761:11;36793:15;36811:3;36793:21;;;;:::i;:::-;36825:13;::::0;;:54:::1;::::0;-1:-1:-1;;;36825:54:0;;;;::::1;15280:25:1::0;;;-1:-1:-1;;;;;15341:32:1;;;15321:18;;;15314:60;15390:18;;;15383:34;;;36784:30:0;;-1:-1:-1;36825:13:0;;;::::1;::::0;:18:::1;::::0;15253::1;;36825:54:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36088:805;;;;7183:20:::0;6577:1;7703:22;;7520:213;30758:299;30867:15;;:42;;-1:-1:-1;;;30867:42:0;;30898:10;30867:42;;;571:51:1;30814:7:0;;;;-1:-1:-1;;;;;30867:15:0;;;;:30;;544:18:1;;30867:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30843:66;-1:-1:-1;;;;;;30924:27:0;;30920:130;;30975:10;30968:17;;;30758:299;:::o;30920:130::-;31025:13;30758:299;-1:-1:-1;30758:299:0:o;29042:231::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;29146:34:0;::::1;29138:62;;;;-1:-1:-1::0;;;29138:62:0::1;;;;;;;:::i;:::-;29211:13;:54:::0;;-1:-1:-1;;;;;;29211:54:0::1;-1:-1:-1::0;;;;;29211:54:0;;;::::1;::::0;;;::::1;::::0;;29042:231::o;28566:234::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;28673:34:0;::::1;28665:62;;;;-1:-1:-1::0;;;28665:62:0::1;;;;;;;:::i;:::-;28738:15;:54:::0;;-1:-1:-1;;;;;;28738:54:0::1;-1:-1:-1::0;;;;;28738:54:0;;;::::1;::::0;;;::::1;::::0;;28566:234::o;31154:1949::-;7139:21;:19;:21::i;:::-;31239::::1;31263:25;:23;:25::i;:::-;31239:49;;31302:37;31321:13;31337:1;31302:18;:37::i;:::-;31384:15;::::0;:40:::1;::::0;-1:-1:-1;;;31384:40:0;;-1:-1:-1;;;;;589:32:1;;;31384:40:0::1;::::0;::::1;571:51:1::0;31370:11:0::1;::::0;31384:15:::1;::::0;:25:::1;::::0;544:18:1;;31384:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31370:54;;31474:6;31466:5;:14;31458:53;;;::::0;-1:-1:-1;;;31458:53:0;;8879:2:1;31458:53:0::1;::::0;::::1;8861:21:1::0;8918:2;8898:18;;;8891:30;8957:28;8937:18;;;8930:56;9003:18;;31458:53:0::1;8677:350:1::0;31458:53:0::1;31561:15;::::0;:52:::1;::::0;-1:-1:-1;;;31561:52:0;;31532:26:::1;::::0;-1:-1:-1;;;;;31561:15:0::1;::::0;:30:::1;::::0;:52:::1;::::0;31592:13;;31607:5;;31561:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31632:13:::0;;31532:81;;-1:-1:-1;31632:18:0;31624:55:::1;;;::::0;-1:-1:-1;;;31624:55:0;;16681:2:1;31624:55:0::1;::::0;::::1;16663:21:1::0;16720:2;16700:18;;;16693:30;16759:26;16739:18;;;16732:54;16803:18;;31624:55:0::1;16479:348:1::0;31624:55:0::1;31700:16;::::0;:48:::1;::::0;-1:-1:-1;;;31700:48:0;;31752:1:::1;::::0;-1:-1:-1;;;;;31700:16:0::1;::::0;:26:::1;::::0;:48:::1;::::0;31727:13;;31741:6;;31700:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;31692:109;;;::::0;-1:-1:-1;;;31692:109:0;;17034:2:1;31692:109:0::1;::::0;::::1;17016:21:1::0;17073:2;17053:18;;;17046:30;17112:34;17092:18;;;17085:62;-1:-1:-1;;;17163:18:1;;;17156:41;17214:19;;31692:109:0::1;16832:407:1::0;31692:109:0::1;31812:16;::::0;:47:::1;::::0;-1:-1:-1;;;31812:47:0;;-1:-1:-1;;;;;31812:16:0;;::::1;::::0;:21:::1;::::0;:47:::1;::::0;31834:13;;31849:6;;31812:16;;:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;31904:155:0::1;::::0;;::::1;::::0;::::1;::::0;;31917:4:::1;31904:155:::0;;31931:3:::1;31904:155;::::0;::::1;::::0;;;31945:2:::1;31904:155:::0;;;;;;;;;;;;;;31994:1:::1;31904:155:::0;;;;32004:11:::1;::::0;:42;;-1:-1:-1;;;32004:42:0;;::::1;::::0;::::1;17748:25:1::0;;;-1:-1:-1;;;31904:155:0;;-1:-1:-1;31904:155:0;;;;-1:-1:-1;;;;;32004:11:0::1;::::0;:34:::1;::::0;17721:18:1;;32004:42:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31904:155:::0;;32056:1:::1;31904:155;::::0;;::::1;::::0;32083:11:::1;::::0;:44:::1;::::0;-1:-1:-1;;;32083:44:0;;::::1;::::0;::::1;17748:25:1::0;;;31879:180:0;;-1:-1:-1;;;;;;32083:11:0::1;::::0;:36:::1;::::0;17721:18:1;;32083:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32138:22:::0;;;32175:16:::1;::::0;::::1;::::0;32070:57;;-1:-1:-1;32195:1:0::1;32175:21:::0;32171:85:::1;;32232:12;32239:5;32232:6:::0;:12:::1;:::i;:::-;32213:16;::::0;::::1;:31:::0;32171:85:::1;32272:10;:16;;;32292:1;32272:21:::0;32268:83:::1;;32327:12;32334:5;32327:6:::0;:12:::1;:::i;:::-;32310:14;::::0;::::1;:29:::0;32268:83:::1;32361:22;32387:114;;;;;;;;32401:1;32387:114;;;;27925:8;32413:15;:37;;;;:::i;:::-;32387:114:::0;;::::1;;32460:39;27996:7;32460:15;:39;:::i;:::-;32387:114:::0;;32514:15:::1;::::0;:59:::1;::::0;-1:-1:-1;;;32514:59:0;;32361:140;;-1:-1:-1;;;;;;32514:15:0::1;::::0;:27:::1;::::0;:59:::1;::::0;32542:13;;32557:5;;32564:8;;32514:59:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;32584:15:0::1;::::0;:64:::1;::::0;-1:-1:-1;;;32584:64:0;;-1:-1:-1;;;;;32584:15:0;;::::1;::::0;-1:-1:-1;32584:30:0::1;::::0;-1:-1:-1;32584:64:0::1;::::0;32615:13;;32629:5;;32637:10;;32584:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;32659:15:0::1;::::0;:59:::1;::::0;-1:-1:-1;;;32659:59:0;;-1:-1:-1;;;;;32659:15:0;;::::1;::::0;-1:-1:-1;32659:27:0::1;::::0;-1:-1:-1;32659:59:0::1;::::0;32687:13;;32702:5;;32709:8;;32659:59:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;32729:15:0::1;::::0;32791:11:::1;::::0;32815:13;;32791:38:::1;::::0;-1:-1:-1;;;32791:38:0;;::::1;::::0;::::1;17748:25:1::0;;;;-1:-1:-1;;;;;32729:15:0;;::::1;::::0;-1:-1:-1;32729:39:0::1;::::0;-1:-1:-1;32769:13:0;;32784:5;;32791:11:::1;::::0;:23:::1;::::0;17721:18:1;;32791:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32729:101;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;32864:15:0::1;::::0;:40:::1;::::0;-1:-1:-1;;;32864:40:0;;-1:-1:-1;;;;;589:32:1;;;32864:40:0::1;::::0;::::1;571:51:1::0;32849:12:0::1;::::0;-1:-1:-1;32864:15:0;;::::1;::::0;-1:-1:-1;32864:25:0::1;::::0;544:18:1;;32864:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32942:13:::0;;32849:55;;-1:-1:-1;32942:19:0::1;::::0;32956:5:::1;::::0;32942:19:::1;:::i;:::-;32974:15;::::0;:48:::1;::::0;-1:-1:-1;;;32974:48:0;;32936:1:::1;:26:::0;;::::1;32924:39:::0;;;::::1;::::0;-1:-1:-1;;;;;32974:15:0::1;::::0;:25:::1;::::0;:48:::1;::::0;33000:13;;32924:39;;32974:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33048:47;33066:8;33075:10;33086:8;33048:47;;;;;;;;:::i;:::-;;;;;;;;31228:1875;;;;;;7183:20:::0;6577:1;7703:22;;7520:213;42582:182;42714:15;;:42;;-1:-1:-1;;;42714:42:0;;-1:-1:-1;;;;;589:32:1;;;42714:42:0;;;571:51:1;42652:27:0;;42714:15;;:30;;544:18:1;;42714:42:0;402:226:1;29868:112:0;2026:13;:11;:13::i;:::-;29949:12:::1;:23:::0;29868:112::o;40866:1163::-;7139:21;:19;:21::i;:::-;41002:22:::1;41027:31;41047:10;41027:19;:31::i;:::-;41002:56:::0;-1:-1:-1;;;;;;41077:28:0;::::1;41069:87;;;::::0;-1:-1:-1;;;41069:87:0;;18709:2:1;41069:87:0::1;::::0;::::1;18691:21:1::0;18748:2;18728:18;;;18721:30;18787:34;18767:18;;;18760:62;-1:-1:-1;;;18838:18:1;;;18831:44;18892:19;;41069:87:0::1;18507:410:1::0;41069:87:0::1;41284:15;::::0;:45:::1;::::0;-1:-1:-1;;;41284:45:0;;-1:-1:-1;;;;;589:32:1;;;41284:45:0::1;::::0;::::1;571:51:1::0;41258:23:0::1;::::0;41284:15:::1;::::0;:29:::1;::::0;544:18:1;;41284:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41258:71:::0;-1:-1:-1;;;;;;41348:29:0;::::1;41367:10;41348:29;41340:92;;;::::0;-1:-1:-1;;;41340:92:0;;19124:2:1;41340:92:0::1;::::0;::::1;19106:21:1::0;19163:2;19143:18;;;19136:30;19202:34;19182:18;;;19175:62;-1:-1:-1;;;19253:18:1;;;19246:48;19311:19;;41340:92:0::1;18922:414:1::0;41340:92:0::1;41504:15;::::0;:35:::1;::::0;-1:-1:-1;;;41504:35:0;;41528:10:::1;41504:35;::::0;::::1;571:51:1::0;41486:15:0::1;::::0;-1:-1:-1;;;;;41504:15:0::1;::::0;:23:::1;::::0;544:18:1;;41504:35:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41569:15;::::0;:39:::1;::::0;-1:-1:-1;;;41569:39:0;;-1:-1:-1;;;;;589:32:1;;;41569:39:0::1;::::0;::::1;571:51:1::0;41486:53:0;;-1:-1:-1;41550:16:0::1;::::0;41569:15;;::::1;::::0;:23:::1;::::0;544:18:1;;41569:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41627:15;::::0;:56:::1;::::0;-1:-1:-1;;;41627:56:0;;41550:58;;-1:-1:-1;;;;;;41627:15:0::1;::::0;:26:::1;::::0;:56:::1;::::0;41654:15;;41550:58;;41627:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;41694:15:0::1;::::0;:61:::1;::::0;-1:-1:-1;;;41694:61:0;;::::1;::::0;::::1;19515:25:1::0;;;-1:-1:-1;;;;;19576:32:1;;;19556:18;;;19549:60;41694:15:0;;::::1;::::0;-1:-1:-1;41694:30:0::1;::::0;-1:-1:-1;19488:18:1;;41694:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;41768:15:0::1;::::0;:54:::1;::::0;-1:-1:-1;;;41768:54:0;;-1:-1:-1;;;;;41768:15:0;;::::1;::::0;-1:-1:-1;41768:26:0::1;::::0;-1:-1:-1;41768:54:0::1;::::0;41795:14;;41811:10;;41768:54:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;41833:15:0::1;::::0;:59:::1;::::0;-1:-1:-1;;;41833:59:0;;::::1;::::0;::::1;19515:25:1::0;;;-1:-1:-1;;;;;19576:32:1;;;19556:18;;;19549:60;41833:15:0;;::::1;::::0;-1:-1:-1;41833:30:0::1;::::0;-1:-1:-1;19488:18:1;;41833:59:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;41953:68:0::1;::::0;;19794:25:1;;;19850:2;19835:18;;19828:34;;;-1:-1:-1;;;;;41953:68:0;;::::1;::::0;-1:-1:-1;41953:68:0;::::1;::::0;-1:-1:-1;41953:68:0::1;::::0;19767:18:1;41953:68:0::1;;;;;;;40927:1102;;;;7183:20:::0;6577:1;7703:22;;7520:213;29279:241;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;29387:34:0;::::1;29379:62;;;;-1:-1:-1::0;;;29379:62:0::1;;;;;;;:::i;:::-;29452:16;:60:::0;;-1:-1:-1;;;;;;29452:60:0::1;-1:-1:-1::0;;;;;29452:60:0;;;::::1;::::0;;;::::1;::::0;;29279:241::o;3046:201::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;3135:22:0;::::1;3127:73;;;::::0;-1:-1:-1;;;3127:73:0;;20075:2:1;3127:73:0::1;::::0;::::1;20057:21:1::0;20114:2;20094:18;;;20087:30;20153:34;20133:18;;;20126:62;-1:-1:-1;;;20204:18:1;;;20197:36;20250:19;;3127:73:0::1;19873:402:1::0;3127:73:0::1;3211:28;3230:8;3211:18;:28::i;7219:293::-:0;6621:1;7353:7;;:19;7345:63;;;;-1:-1:-1;;;7345:63:0;;20482:2:1;7345:63:0;;;20464:21:1;20521:2;20501:18;;;20494:30;20560:33;20540:18;;;20533:61;20611:18;;7345:63:0;20280:355:1;7345:63:0;6621:1;7486:7;:18;7219:293::o;2305:132::-;2186:7;2213:6;-1:-1:-1;;;;;2213:6:0;765:10;2369:23;2361:68;;;;-1:-1:-1;;;2361:68:0;;20842:2:1;2361:68:0;;;20824:21:1;;;20861:18;;;20854:30;20920:34;20900:18;;;20893:62;20972:18;;2361:68:0;20640:356:1;30483:253:0;-1:-1:-1;;;;;30599:22:0;;;;;;:14;:22;;;;;;30625:11;;30581:40;;:15;:40;:::i;:::-;:55;;30573:104;;;;-1:-1:-1;;;30573:104:0;;21203:2:1;30573:104:0;;;21185:21:1;21242:2;21222:18;;;21215:30;21281:34;21261:18;;;21254:62;-1:-1:-1;;;21332:18:1;;;21325:35;21377:19;;30573:104:0;21001:401:1;30573:104:0;-1:-1:-1;;;;;;30688:22:0;;;;;:14;:22;;;;;30713:15;30688:40;;30483:253::o;3407:191::-;3481:16;3500:6;;-1:-1:-1;;;;;3517:17:0;;;-1:-1:-1;;;;;;3517:17:0;;;;;;3550:40;;3500:6;;;;;;;3550:40;;3481:16;3550:40;3470:128;3407:191;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:1:o;633:346::-;701:6;709;762:2;750:9;741:7;737:23;733:32;730:52;;;778:1;775;768:12;730:52;-1:-1:-1;;823:23:1;;;943:2;928:18;;;915:32;;-1:-1:-1;633:346:1:o;984:303::-;1077:5;1100:1;1110:171;1124:4;1121:1;1118:11;1110:171;;;1183:13;;1171:26;;1226:4;1217:14;;;;1254:17;;;;1144:1;1137:9;1110:171;;;1114:3;;984:303;;:::o;1292:457::-;1578:4;1563:20;;1592:43;1567:9;1617:6;1592:43;:::i;:::-;1644:54;1692:4;1681:9;1677:20;1669:6;1644:54;:::i;:::-;1736:6;1729:4;1718:9;1714:20;1707:36;1292:457;;;;;;:::o;2197:226::-;2256:6;2309:2;2297:9;2288:7;2284:23;2280:32;2277:52;;;2325:1;2322;2315:12;2277:52;-1:-1:-1;2370:23:1;;2197:226;-1:-1:-1;2197:226:1:o;2897:230::-;2967:6;3020:2;3008:9;2999:7;2995:23;2991:32;2988:52;;;3036:1;3033;3026:12;2988:52;-1:-1:-1;3081:16:1;;2897:230;-1:-1:-1;2897:230:1:o;4206:339::-;4408:2;4390:21;;;4447:2;4427:18;;;4420:30;-1:-1:-1;;;4481:2:1;4466:18;;4459:45;4536:2;4521:18;;4206:339::o;5252:274::-;-1:-1:-1;;;;;5444:32:1;;;;5426:51;;5508:2;5493:18;;5486:34;5414:2;5399:18;;5252:274::o;5531:127::-;5592:10;5587:3;5583:20;5580:1;5573:31;5623:4;5620:1;5613:15;5647:4;5644:1;5637:15;5663:125;5728:9;;;5749:10;;;5746:36;;;5762:18;;:::i;5793:397::-;5995:2;5977:21;;;6034:2;6014:18;;;6007:30;6073:34;6068:2;6053:18;;6046:62;-1:-1:-1;;;6139:2:1;6124:18;;6117:31;6180:3;6165:19;;5793:397::o;6195:128::-;6262:9;;;6283:11;;;6280:37;;;6297:18;;:::i;6328:345::-;-1:-1:-1;;;;;6548:32:1;;;;6530:51;;6612:2;6597:18;;6590:34;;;;6655:2;6640:18;;6633:34;6518:2;6503:18;;6328:345::o;7092:127::-;7153:10;7148:3;7144:20;7141:1;7134:31;7184:4;7181:1;7174:15;7208:4;7205:1;7198:15;7224:247;7291:2;7285:9;7333:3;7321:16;;7367:18;7352:34;;7388:22;;;7349:62;7346:88;;;7414:18;;:::i;:::-;7450:2;7443:22;7224:247;:::o;7476:843::-;7570:6;7623:4;7611:9;7602:7;7598:23;7594:34;7591:54;;;7641:1;7638;7631:12;7591:54;7690:7;7683:4;7672:9;7668:20;7664:34;7654:62;;7712:1;7709;7702:12;7654:62;7765:2;7759:9;7807:4;7795:17;;7842:18;7827:34;;7863:22;;;7824:62;7821:88;;;7889:18;;:::i;:::-;7925:2;7918:22;7960:6;8004:4;7989:20;;8021:19;;;8018:39;;;8053:1;8050;8043:12;8018:39;8077:9;8095:193;8111:6;8106:3;8103:15;8095:193;;;8203:10;;8226:18;;8273:4;8264:14;;;;8128;8095:193;;;-1:-1:-1;8307:6:1;;7476:843;-1:-1:-1;;;;;7476:843:1:o;9032:765::-;9125:6;9185:2;9173:9;9164:7;9160:23;9156:32;9200:2;9197:22;;;9215:1;9212;9205:12;9197:22;-1:-1:-1;9284:2:1;9278:9;9326:2;9314:15;;9359:18;9344:34;;9380:22;;;9341:62;9338:88;;;9406:18;;:::i;:::-;9442:2;9435:22;;;9498:16;;9523:21;;9610:2;9595:18;;;9589:25;9630:15;;;9623:32;9706:18;;;9700:25;9741:15;;;9734:32;;;;-1:-1:-1;9530:6:1;9032:765;-1:-1:-1;9032:765:1:o;10158:1141::-;10249:6;10309:3;10297:9;10288:7;10284:23;10280:33;10325:2;10322:22;;;10340:1;10337;10330:12;10322:22;-1:-1:-1;10382:17:1;;:::i;:::-;10444:16;;10469:22;;10557:2;10542:18;;;10536:25;10577:14;;;10570:31;10667:2;10652:18;;;10646:25;10687:14;;;10680:31;10777:2;10762:18;;;10756:25;10797:14;;;10790:31;10887:3;10872:19;;;10866:26;10908:15;;;10901:32;10999:3;10984:19;;;10978:26;11020:15;;;11013:32;11111:3;11096:19;;;11090:26;11132:15;;;11125:32;11223:3;11208:19;;;11202:26;11244:15;;;11237:32;;;;-1:-1:-1;10476:5:1;10158:1141;-1:-1:-1;10158:1141:1:o;12117:481::-;12193:5;12187:12;12182:3;12175:25;12249:4;12242:5;12238:16;12232:23;12225:4;12220:3;12216:14;12209:47;12305:4;12298:5;12294:16;12288:23;12281:4;12276:3;12272:14;12265:47;12361:4;12354:5;12350:16;12344:23;12337:4;12332:3;12328:14;12321:47;12417:4;12410:5;12406:16;12400:23;12393:4;12388:3;12384:14;12377:47;12473:4;12466:5;12462:16;12456:23;12449:4;12444:3;12440:14;12433:47;12529:4;12522:5;12518:16;12512:23;12505:4;12500:3;12496:14;12489:47;12585:4;12578:5;12574:16;12568:23;12561:4;12556:3;12552:14;12545:47;;;12117:481::o;12603:404::-;-1:-1:-1;;;;;12866:32:1;;12848:51;;12930:2;12915:18;;12908:34;;;12835:3;12820:19;;12951:50;12997:2;12982:18;;12974:6;12951:50;:::i;:::-;12603:404;;;;;;:::o;13012:251::-;13082:6;13135:2;13123:9;13114:7;13110:23;13106:32;13103:52;;;13151:1;13148;13141:12;13103:52;13183:9;13177:16;13202:31;13227:5;13202:31;:::i;14252:410::-;-1:-1:-1;;;;;14519:32:1;;14501:51;;14583:2;14568:18;;14561:34;;;14488:3;14473:19;;14604:52;14652:2;14637:18;;14629:6;14116:12;;14104:25;;14178:4;14167:16;;;14161:23;14145:14;;;14138:47;14234:4;14223:16;;;14217:23;14201:14;;14194:47;14044:203;17784:209;17816:1;17842;17832:132;;17886:10;17881:3;17877:20;17874:1;17867:31;17921:4;17918:1;17911:15;17949:4;17946:1;17939:15;17832:132;-1:-1:-1;17978:9:1;;17784:209::o;17998:504::-;18318:3;18303:19;;18331:41;18307:9;18354:6;18331:41;:::i;:::-;14116:12;;18429:3;18414:19;;14104:25;14178:4;14167:16;;14161:23;14145:14;;;14138:47;14234:4;14223:16;;14217:23;14201:14;;;14194:47;14116:12;;18491:3;18476:19;;14104:25;14178:4;14167:16;;14161:23;14145:14;;;14138:47;14234:4;14223:16;;14217:23;14201:14;;;14194:47;18443:53;14044:203
Swarm Source
ipfs://4448de072000fd6ae25fd733be0d8243875dcc73b44efc9774f19252011e14eb
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in S
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.