Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 14843400 | 794 days ago | IN | 0 ETH | 0.17169173 |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
SporeYield
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-25 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; ////////////////////////////////////////////////// // ____ __ ___ __ __ // // / __/__ ___ ______\ \/ (_)__ / /__/ / // // _\ \/ _ \/ _ \/ __/ -_) / / -_) / _ / // // /___/ .__/\___/_/ \__//_/_/\__/_/\_,_/ // // /_/ // // by 0xInuarashi.eth // ////////////////////////////////////////////////// // Open0x ECDSA library ECDSA { ///// Signer Address Recovery ///// // In its pure form, address recovery requires the following parameters // params: hash, v, r ,s // First, we define some standard checks function checkValidityOf_s(bytes32 s) public pure returns (bool) { if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { revert("recoverAddressFrom_hash_v_r_s: Invalid s value"); } return true; } function checkValidityOf_v(uint8 v) public pure returns (bool) { if (v != 27 && v != 28) { revert("recoverAddressFrom_hash_v_r_s: Invalid v value"); } return true; } // Then, we first define the pure form of recovery. function recoverAddressFrom_hash_v_r_s(bytes32 hash, uint8 v, bytes32 r, bytes32 s) public pure returns (address) { // First, we need to make sure that s and v are in correct ranges require(checkValidityOf_s(s) && checkValidityOf_v(v)); // call recovery using solidity's built-in ecrecover method address _signer = ecrecover(hash, v, r, s); require(_signer != address(0), "_signer == address(0)"); return _signer; } // There are also other ways to receive input without v, r, s values which // you will need to parse the unsupported data to find v, r, s and then // use those to call ecrecover. // For these, there are 2 other methods: // 1. params: hash, r, vs // 2. params: hash, signature // These then return the v, r, s values required to use recoverAddressFrom_hash_v_r_s // So, we will parse the first method to get v, r, s function get_v_r_s_from_r_vs(bytes32 r, bytes32 vs) public pure returns (uint8, bytes32, bytes32) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return (v, r, s); } function get_v_r_s_from_signature(bytes memory signature) public pure returns (uint8, bytes32, bytes32) { // signature.length can be 64 and 65. this depends on the method // the standard is 65 bytes1, eip-2098 is 64 bytes1. // so, we need to account for these differences // in the case that it is a standard 65 bytes1 signature if (signature.length == 65) { uint8 v; bytes32 r; bytes32 s; // assembly magic assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } // return the v, r, s return (v, r, s); } // in the case that it is eip-2098 64 bytes1 signature else if (signature.length == 64) { bytes32 r; bytes32 vs; // assembly magic assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return get_v_r_s_from_r_vs(r, vs); } else { revert("Invalid signature length"); } } // ///// Embedded toString ///// // // We need this in one of the methods of returning a signed message below. // function _toString(uint256 value_) internal pure returns (string memory) { // if (value_ == 0) { return "0"; } // uint256 _iterate = value_; uint256 _digits; // while (_iterate != 0) { _digits++; _iterate /= 10; } // get digits in value_ // bytes memory _buffer = new bytes(_digits); // while (value_ != 0) { _digits--; _buffer[_digits] = bytes1(uint8( // 48 + uint256(value_ % 10 ))); value_ /= 10; } // create bytes of value_ // return string(_buffer); // return string converted bytes of value_ // } // ///// Generation of Hashes ///// // // We need these methods because these methods are used to compare // // hash generated off-chain to hash generated on-chain to cross-check the // // validity of the signatures // // 1. A bytes32 hash to generate a bytes32 hash embedded with prefix // // 2. A bytes memory s to generate a bytes32 hash embedded with prefix // // 3. A bytes32 domain seperator and bytes32 structhash to generate // // a bytes32 hash embedded with prefix // // See: EIP-191 // function toEthSignedMessageHashBytes32(bytes32 hash) public pure // returns (bytes32) { // return keccak256(abi.encodePacked( // // Magic prefix determined by the devs // "\x19Ethereum Signed Message:\n32", // hash // )); // } // // See: EIP-191 // function toEthSignedMessageHashBytes(bytes memory s) public pure // returns (bytes32) { // return keccak256(abi.encodePacked( // // Another magic prefix determined by the devs // "\x19Ethereum Signed Message:\n", // // The bytes length of s // _toString(s.length), // // s itself // s // )); // } // // See: EIP-712 // function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) public // pure returns (bytes32) { // return keccak256(abi.encodePacked( // // Yet another magic prefix determined by the devs // "\x19\x01", // // The domain seperator (EIP-712) // domainSeparator, // // struct hash // structHash // )); // } } abstract contract Ownable { address public owner; constructor() { owner = msg.sender; } modifier onlyOwner { require(owner == msg.sender, "Not Owner!"); _; } function transferOwnership(address new_) external onlyOwner { owner = new_; } } interface iSpore { function transfer(address to_, uint256 amount_) external; function mintAsController(address to_, uint256 amount_) external; } interface iNFF { function totalSupply() external view returns (uint256); function balanceOf(address address_) external view returns (uint256); function ownerOf(uint256 tokenId_) external view returns (address); function walletOfOwner(address address_) external view returns (uint256[] memory); function transferFrom(address from_, address to_, uint256 tokenId_) external; } contract SporeYield is Ownable { // Interfaces iSpore public Spore = iSpore(0xC1CE4Af7009c0f0fFD5c10d13d1BD2a580ec4296); function setSpore(address address_) external onlyOwner { Spore = iSpore(address_); } iNFF public NFFGenerative = iNFF(0x90ee3Cf59FcDe2FE11838b9075Ea4681462362F1); function setNFFGenerative(address address_) external onlyOwner { NFFGenerative = iNFF(address_); } iNFF public NFFGenesis = iNFF(0x5f47079D0E45d95f5d5167A480B695883C4E47D9); function setNFFGenesis(address address_) external onlyOwner { NFFGenesis = iNFF(address_); } // Times uint256 public yieldStartTime = 1653264000; // May 23 2022 14:00:00 GMT+0000 uint256 public yieldEndTime = 1732060800; // November 20 2024 14:00:00 GMT+0000 function setYieldEndTime(uint256 yieldEndTime_) external onlyOwner { yieldEndTime = yieldEndTime_; } // Yield Info mapping(uint256 => uint256) public indexToYield; // @dev this is a function to override yield setting. use it with caution. function O_setIndexToYields(uint256[] calldata tokenIds_, uint256[] calldata yields_) external onlyOwner { require(tokenIds_.length == yields_.length, "Array lengths mismatch!"); for (uint256 i = 0; i < tokenIds_.length; i++) { indexToYield[tokenIds_[i]] = yields_[i]; } } // Yield Database mapping(uint256 => uint256) public indexToClaimedTimestamp; // Timestamp Controller mapping(address => bool) public addressToTimestampControllers; // Timestamp Controllers can be given externally to other addresses // in order to modify the timestamp of mappings. // Only use if you know what you are doing. modifier onlyTimestampControllers { require(addressToTimestampControllers[msg.sender], "Invalid timestamp controller!"); _; } function controllerSetClaimTimestamps(uint256[] memory indexes_, uint256[] memory timestamps_) public onlyTimestampControllers { for (uint256 i = 0; i < indexes_.length; i++) { // The timestamp set must never be below the yieldStartTime require(yieldStartTime <= timestamps_[i], "Timestamp set below yieldStartTime!"); indexToClaimedTimestamp[indexes_[i]] = timestamps_[i]; } } //// // Events event Claim(address to_, uint256[] indexes_, uint256 totalClaimed); // Internal Calculators function _getCurrentTimeOrEnded() public view returns (uint256) { // Return block.timestamp if it's lower than yieldEndTime, otherwise // return yieldEndTime instead. return block.timestamp < yieldEndTime ? block.timestamp : yieldEndTime; } function _getTimestampOfToken(uint256 index_) public view returns (uint256) { return indexToClaimedTimestamp[index_] == 0 ? yieldStartTime : indexToClaimedTimestamp[index_]; } // Yield Accountants function getPendingTokens(uint256 index_) public view returns (uint256) { // First, grab the timestamp of the token uint256 _lastClaimedTimestamp = _getTimestampOfToken(index_); // Then, we grab the current timestamp or ended uint256 _timeCurrentOrEnded = _getCurrentTimeOrEnded(); // Lastly, we calculate the time-units in seconds of elapsed time uint256 _timeElapsed = _timeCurrentOrEnded - _lastClaimedTimestamp; // Now, return the calculation of yield require(indexToYield[index_] != 0, "Yield Lookup not Initialized!"); return (_timeElapsed * indexToYield[index_]) / 1 days; } function getPendingTokensMany(uint256[] memory indexes_) public view returns (uint256) { // First, create an empty MSTORE to store the pending tokens tracker uint256 _pendingTokens; // Now, run a loop through the entire indexes array to add it for (uint256 i = 0; i < indexes_.length; i++) { _pendingTokens += getPendingTokens(indexes_[i]); } // Then, return the final value return _pendingTokens; } // Internal Timekeepers function _updateTimestampOfTokens(uint256[] memory indexes_) internal { // Get the timestamp using internal function uint256 _timeCurrentOrEnded = _getCurrentTimeOrEnded(); // Loop through the entire indexes_ array and set the timestamps for (uint256 i = 0; i < indexes_.length; i++) { // Prevents duplicate setting of same token in the same block require(indexToClaimedTimestamp[indexes_[i]] != _timeCurrentOrEnded, "Unable to set timestamp duplication in the same block!"); indexToClaimedTimestamp[indexes_[i]] = _timeCurrentOrEnded; } } // Public Claim (here we go!) function getIndexOfTokens(address[] memory contracts_, uint256[] memory tokenIds_) public view returns (uint256[] memory) { // Make sure the array lengths are equal require(contracts_.length == tokenIds_.length, "getIndexOfTokens(): Array lengths mismatch!"); // MSTORE to save GAS uint256 _items = tokenIds_.length; address _NFFGenerativeAddress = address(NFFGenerative); address _NFFGenesisAddress = address(NFFGenesis); // Make sure all items are of supported contracts for (uint256 i = 0; i < _items; i++) { require(contracts_[i] == _NFFGenerativeAddress || contracts_[i] == _NFFGenesisAddress, "getIndexOfTokens(): Unsupported Contract!"); } // MSTORE _indexes to return uint256[] memory _indexes = new uint256[](_items); // Generate the index array for (uint256 i = 0; i < _items; i++) { // Generate the offset. If generative, offeset is 10000, else, it's 0. uint256 _offset = contracts_[i] == _NFFGenerativeAddress ? 0 : 10000; _indexes[i] = tokenIds_[i] + _offset; } // Return the _indexes array return _indexes; } function claim(address[] calldata contracts_, uint256[] calldata tokenIds_) public returns (uint256) { // Make sure the array lengths are equal require(contracts_.length == tokenIds_.length, "Array Lengths Mismatch!"); // Make sure the sender owns all the tokens for (uint256 i = 0; i < tokenIds_.length; i++) { require(msg.sender == iNFF(contracts_[i]).ownerOf(tokenIds_[i]), "You do not own this token!"); } // Generate the index array uint256[] memory _claimIndexes = getIndexOfTokens(contracts_, tokenIds_); // Calculate the total pending tokens to be claimed from index array uint256 _pendingTokens = getPendingTokensMany(_claimIndexes); // Set the new timestamp of the tokens // @dev: this step will fail if duplicate tokenIds_ are passed in _updateTimestampOfTokens(_claimIndexes); // Mint the total tokens for the msg.sender Spore.mintAsController(msg.sender, _pendingTokens); // Emit claim of total tokens emit Claim(msg.sender, _claimIndexes, _pendingTokens); // Return the claim amount return _pendingTokens; } address public sporeDataSigner = 0xe4535f8EE9b374BBc2c5A57B35f09A89fe43a657; function setSporeDataSigner(address address_) public onlyOwner { sporeDataSigner = address_; } // Data initializer controllers mapping(address => bool) public addressToYieldDataInitializers; function setYieldDataInitializers(address[] calldata initializers_, bool bool_) external onlyOwner { for (uint256 i = 0; i < initializers_.length; i++) { addressToYieldDataInitializers[initializers_[i]] = bool_; } } modifier onlyYieldDataInitializer { require(addressToYieldDataInitializers[msg.sender], "Invalid yield data initializer!"); _; } function controllerInitializeYieldDatas(uint256[] memory indexes_, uint256[] memory yieldDatas_, bytes[] memory signatures_) public onlyYieldDataInitializer { _initializeYieldDatas(indexes_, yieldDatas_, signatures_); } // Core initialization logic function _initializeYieldDatas(uint256[] memory indexes_, uint256[] memory yieldDatas_, bytes[] memory signatures_) internal { require(indexes_.length == yieldDatas_.length && indexes_.length == signatures_.length, "Array lengths mismatch!"); // Make sure all the indexes to yieldDatas is valid through ECDSA for (uint256 i = 0; i < indexes_.length; i++) { // make sure the yieldDatas_[i] and signatures_[i] is correct // thus we need to use get_v_r_s_from_signature function before // address recovery (uint8 v, bytes32 r, bytes32 s) = ECDSA.get_v_r_s_from_signature(signatures_[i]); // Create the token data hash to use with ecrecover bytes32 _tokenDataHash = keccak256(abi.encodePacked( indexes_[i], yieldDatas_[i] )); require(sporeDataSigner == ECDSA.recoverAddressFrom_hash_v_r_s(_tokenDataHash, v, r, s), "Invalid signer"); // Initialize them if empty if (indexToYield[indexes_[i]] == 0) { // 10 Ether is the maximum per day as yield data is concerned. // We added leeway for 20 Ether in case any future changes. // We hardcoded this to save on gas. require(20 ether >= yieldDatas_[i], "Yield value not intended!"); indexToYield[indexes_[i]] = yieldDatas_[i]; } } } function claimWithYieldData(address[] calldata contracts_, uint256[] calldata tokenIds_, uint256[] calldata yieldDatas_, bytes[] calldata signatures_) public returns (uint256) { // Make sure the array lengths are equal require(contracts_.length == tokenIds_.length && contracts_.length == yieldDatas_.length && contracts_.length == signatures_.length, "Array Lengths Mismatch!"); // Make sure the sender owns all the tokens for (uint256 i = 0; i < tokenIds_.length; i++) { require(msg.sender == iNFF(contracts_[i]).ownerOf(tokenIds_[i]), "You do not own this token!"); } // Generate the index array uint256[] memory _claimIndexes = getIndexOfTokens(contracts_, tokenIds_); // Initialize the Yield Datas _initializeYieldDatas(_claimIndexes, yieldDatas_, signatures_); // Calculate the total pending tokens to be claimed from index array // Without _initializeYieldDatas, this function would revert. uint256 _pendingTokens = getPendingTokensMany(_claimIndexes); // Set the new timestamp of the tokens // If there are duplicate indexes in the array, this function will revert. _updateTimestampOfTokens(_claimIndexes); // Mint the total tokens for the msg.sender Spore.mintAsController(msg.sender, _pendingTokens); // Emit claim of total tokens emit Claim(msg.sender, _claimIndexes, _pendingTokens); // Return token amount return _pendingTokens; } // Public View Functions for Helpers function walletOfGenesis(address address_) public view returns (uint256[] memory) { return NFFGenesis.walletOfOwner(address_); } function walletOfGenerative(address address_) public view returns (uint256[] memory) { return NFFGenerative.walletOfOwner(address_); } function walletIndexOfOwner(address address_) public view returns (uint256[] memory) { // For this function, we want to return a unified index uint256 _genesisBalance = NFFGenesis.balanceOf(address_); uint256 _generativeBalance = NFFGenerative.balanceOf(address_); uint256 _totalBalance = _genesisBalance + _generativeBalance; // Create the indexes based on a combined balance to input datas uint256[] memory _indexes = new uint256[] (_totalBalance); // Call both wallet of owners uint256[] memory _walletOfGenesis = walletOfGenesis(address_); uint256[] memory _walletOfGenerative = walletOfGenerative(address_); // Now start inserting into the index with both wallets with offsets uint256 _currentIndex; for (uint256 i = 0; i < _walletOfGenerative.length; i++) { // Generative has an offset of 0 _indexes[_currentIndex++] = _walletOfGenerative[i]; } for (uint256 i = 0; i < _walletOfGenesis.length; i++) { // Genesis has an offset of 10000 _indexes[_currentIndex++] = _walletOfGenesis[i] + 10000; } return _indexes; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to_","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"indexes_","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"totalClaimed","type":"uint256"}],"name":"Claim","type":"event"},{"inputs":[],"name":"NFFGenerative","outputs":[{"internalType":"contract iNFF","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFFGenesis","outputs":[{"internalType":"contract iNFF","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"uint256[]","name":"yields_","type":"uint256[]"}],"name":"O_setIndexToYields","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Spore","outputs":[{"internalType":"contract iSpore","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getCurrentTimeOrEnded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index_","type":"uint256"}],"name":"_getTimestampOfToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToTimestampControllers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToYieldDataInitializers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"contracts_","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"claim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"contracts_","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldDatas_","type":"uint256[]"},{"internalType":"bytes[]","name":"signatures_","type":"bytes[]"}],"name":"claimWithYieldData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"indexes_","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldDatas_","type":"uint256[]"},{"internalType":"bytes[]","name":"signatures_","type":"bytes[]"}],"name":"controllerInitializeYieldDatas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"indexes_","type":"uint256[]"},{"internalType":"uint256[]","name":"timestamps_","type":"uint256[]"}],"name":"controllerSetClaimTimestamps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"contracts_","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"getIndexOfTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index_","type":"uint256"}],"name":"getPendingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"indexes_","type":"uint256[]"}],"name":"getPendingTokensMany","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"indexToClaimedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"indexToYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setNFFGenerative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setNFFGenesis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setSpore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setSporeDataSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"initializers_","type":"address[]"},{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setYieldDataInitializers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"yieldEndTime_","type":"uint256"}],"name":"setYieldEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sporeDataSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"new_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"walletIndexOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"walletOfGenerative","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"walletOfGenesis","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yieldEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yieldStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600180546001600160a01b031990811673c1ce4af7009c0f0ffd5c10d13d1bd2a580ec4296179091556002805482167390ee3cf59fcde2fe11838b9075ea4681462362f1179055600380548216735f47079d0e45d95f5d5167a480b695883c4e47d917905563628ace8060045563673d26806005556009805490911673e4535f8ee9b374bbc2c5a57b35f09a89fe43a6571790553480156100a457600080fd5b50600080546001600160a01b03191633179055612312806100c66000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80636e3463fe1161010f578063a8123dc8116100a2578063cf21823d11610071578063cf21823d14610450578063dae36bde14610463578063e771779414610476578063f2fde38b1461048957600080fd5b8063a8123dc814610404578063aefb2b5214610417578063c19355321461042a578063cb9eb93f1461043d57600080fd5b80638a4f3771116100de5780638a4f3771146103b85780638da5cb5b146103cb578063955f33ad146103de578063a0a6e32b146103f157600080fd5b80636e3463fe14610366578063747250011461038957806374f239f91461039c5780637c073ede146103af57600080fd5b8063314ca0391161018757806358d78c8c1161015657806358d78c8c1461030d5780635bd962001461032057806367c65041146103405780636cc532fa1461035357600080fd5b8063314ca0391461029e57806339a30fca146102a75780634d042fa8146102c75780635819a7a6146102fa57600080fd5b806315cbc3a2116101c357806315cbc3a21461022d5780631ffac581146102585780632b7c63701461026b5780632f72c8111461028b57600080fd5b806308cf8f06146101ea5780630d16beed146102105780631394818e14610218575b600080fd5b6101fd6101f836600461202d565b61049c565b6040519081526020015b60405180910390f35b6101fd610556565b61022b61022636600461202d565b61056d565b005b600954610240906001600160a01b031681565b6040516001600160a01b039091168152602001610207565b61022b610266366004611f46565b61059c565b61027e610279366004611be1565b6106e0565b604051610207919061210b565b6101fd610299366004611c8d565b610933565b6101fd60055481565b6101fd6102b536600461202d565b60066020526000908152604090205481565b6102ea6102d5366004611be1565b600a6020526000908152604090205460ff1681565b6040519015158152602001610207565b600254610240906001600160a01b031681565b6101fd61031b366004611e73565b610c4b565b6101fd61032e36600461202d565b60076020526000908152604090205481565b61022b61034e366004611d50565b610ca1565b61027e610361366004611be1565b610d42565b6102ea610374366004611be1565b60086020526000908152604090205460ff1681565b6101fd610397366004611c22565b610dca565b61022b6103aa366004611be1565b61107f565b6101fd60045481565b61027e6103c6366004611dab565b6110cb565b600054610240906001600160a01b031681565b61022b6103ec366004611f92565b61131c565b61022b6103ff366004611c22565b611386565b61022b610412366004611be1565b611466565b6101fd61042536600461202d565b6114b2565b61022b610438366004611be1565b6114e2565b600154610240906001600160a01b031681565b61027e61045e366004611be1565b61152e565b600354610240906001600160a01b031681565b61022b610484366004611be1565b611560565b61022b610497366004611be1565b6115ac565b6000806104a8836114b2565b905060006104b4610556565b905060006104c28383612243565b6000868152600660205260409020549091506105255760405162461bcd60e51b815260206004820152601d60248201527f5969656c64204c6f6f6b7570206e6f7420496e697469616c697a65642100000060448201526064015b60405180910390fd5b60008581526006602052604090205462015180906105439083612224565b61054d9190612202565b95945050505050565b60006005544210610568575060055490565b504290565b6000546001600160a01b031633146105975760405162461bcd60e51b815260040161051c90612173565b600555565b3360009081526008602052604090205460ff166105fb5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642074696d657374616d7020636f6e74726f6c6c657221000000604482015260640161051c565b60005b82518110156106db5781818151811061061957610619612298565b6020026020010151600454111561067e5760405162461bcd60e51b815260206004820152602360248201527f54696d657374616d70207365742062656c6f77207969656c64537461727454696044820152626d652160e81b606482015260840161051c565b81818151811061069057610690612298565b6020026020010151600760008584815181106106ae576106ae612298565b602002602001015181526020019081526020016000208190555080806106d390612267565b9150506105fe565b505050565b6003546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a082319060240160206040518083038186803b15801561072a57600080fd5b505afa15801561073e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107629190612046565b6002546040516370a0823160e01b81526001600160a01b038681166004830152929350600092909116906370a082319060240160206040518083038186803b1580156107ad57600080fd5b505afa1580156107c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e59190612046565b905060006107f382846121ea565b90506000816001600160401b0381111561080f5761080f6122ae565b604051908082528060200260200182016040528015610838578160200160208202803683370190505b509050600061084687610d42565b905060006108538861152e565b90506000805b82518110156108b75782818151811061087457610874612298565b602002602001015185838061088890612267565b94508151811061089a5761089a612298565b6020908102919091010152806108af81612267565b915050610859565b5060005b8351811015610925578381815181106108d6576108d6612298565b60200260200101516127106108eb91906121ea565b85836108f681612267565b94508151811061090857610908612298565b60209081029190910101528061091d81612267565b9150506108bb565b509298975050505050505050565b6000878614801561094357508784145b801561094e57508782145b6109945760405162461bcd60e51b81526020600482015260176024820152764172726179204c656e67746873204d69736d617463682160481b604482015260640161051c565b60005b86811015610acd578989828181106109b1576109b1612298565b90506020020160208101906109c69190611be1565b6001600160a01b0316636352211e8989848181106109e6576109e6612298565b905060200201356040518263ffffffff1660e01b8152600401610a0b91815260200190565b60206040518083038186803b158015610a2357600080fd5b505afa158015610a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5b9190611c05565b6001600160a01b0316336001600160a01b031614610abb5760405162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f74206f776e207468697320746f6b656e21000000000000604482015260640161051c565b80610ac581612267565b915050610997565b506000610b3d8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152506110cb92505050565b9050610b8881878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610b83925088915089905061225a565b6115f8565b6000610b9382610c4b565b9050610b9e82611960565b600154604051630a9edcc560e11b8152336004820152602481018390526001600160a01b039091169063153db98a90604401600060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050507fbb39cc58932f85e3e9d3d6b8b315e628b6ea052a07d36a8d550d9ff478cbf4df338383604051610c35939291906120d7565b60405180910390a19a9950505050505050505050565b60008060005b8351811015610c9a57610c7c848281518110610c6f57610c6f612298565b602002602001015161049c565b610c8690836121ea565b915080610c9281612267565b915050610c51565b5092915050565b6000546001600160a01b03163314610ccb5760405162461bcd60e51b815260040161051c90612173565b60005b82811015610d3c5781600a6000868685818110610ced57610ced612298565b9050602002016020810190610d029190611be1565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d3481612267565b915050610cce565b50505050565b60035460405162438b6360e81b81526001600160a01b038381166004830152606092169063438b6300906024015b60006040518083038186803b158015610d8857600080fd5b505afa158015610d9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dc49190810190611eaf565b92915050565b6000838214610e155760405162461bcd60e51b81526020600482015260176024820152764172726179204c656e67746873204d69736d617463682160481b604482015260640161051c565b60005b82811015610f4e57858582818110610e3257610e32612298565b9050602002016020810190610e479190611be1565b6001600160a01b0316636352211e858584818110610e6757610e67612298565b905060200201356040518263ffffffff1660e01b8152600401610e8c91815260200190565b60206040518083038186803b158015610ea457600080fd5b505afa158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc9190611c05565b6001600160a01b0316336001600160a01b031614610f3c5760405162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f74206f776e207468697320746f6b656e21000000000000604482015260640161051c565b80610f4681612267565b915050610e18565b506000610fbe86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284376000920191909152506110cb92505050565b90506000610fcb82610c4b565b9050610fd682611960565b600154604051630a9edcc560e11b8152336004820152602481018390526001600160a01b039091169063153db98a90604401600060405180830381600087803b15801561102257600080fd5b505af1158015611036573d6000803e3d6000fd5b505050507fbb39cc58932f85e3e9d3d6b8b315e628b6ea052a07d36a8d550d9ff478cbf4df33838360405161106d939291906120d7565b60405180910390a19695505050505050565b6000546001600160a01b031633146110a95760405162461bcd60e51b815260040161051c90612173565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b606081518351146111325760405162461bcd60e51b815260206004820152602b60248201527f676574496e6465784f66546f6b656e7328293a204172726179206c656e67746860448201526a73206d69736d617463682160a81b606482015260840161051c565b81516002546003546001600160a01b03918216911660005b8381101561122557826001600160a01b031687828151811061116e5761116e612298565b60200260200101516001600160a01b031614806111b55750816001600160a01b03168782815181106111a2576111a2612298565b60200260200101516001600160a01b0316145b6112135760405162461bcd60e51b815260206004820152602960248201527f676574496e6465784f66546f6b656e7328293a20556e737570706f7274656420604482015268436f6e74726163742160b81b606482015260840161051c565b8061121d81612267565b91505061114a565b506000836001600160401b03811115611240576112406122ae565b604051908082528060200260200182016040528015611269578160200160208202803683370190505b50905060005b84811015611311576000846001600160a01b031689838151811061129557611295612298565b60200260200101516001600160a01b0316146112b3576127106112b6565b60005b61ffff169050808883815181106112cf576112cf612298565b60200260200101516112e191906121ea565b8383815181106112f3576112f3612298565b6020908102919091010152508061130981612267565b91505061126f565b509695505050505050565b336000908152600a602052604090205460ff1661137b5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964207969656c64206461746120696e697469616c697a65722100604482015260640161051c565b6106db8383836115f8565b6000546001600160a01b031633146113b05760405162461bcd60e51b815260040161051c90612173565b8281146113f95760405162461bcd60e51b81526020600482015260176024820152764172726179206c656e67746873206d69736d617463682160481b604482015260640161051c565b60005b8381101561145f5782828281811061141657611416612298565b905060200201356006600087878581811061143357611433612298565b90506020020135815260200190815260200160002081905550808061145790612267565b9150506113fc565b5050505050565b6000546001600160a01b031633146114905760405162461bcd60e51b815260040161051c90612173565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260076020526040812054156114da57600082815260076020526040902054610dc4565b505060045490565b6000546001600160a01b0316331461150c5760405162461bcd60e51b815260040161051c90612173565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60025460405162438b6360e81b81526001600160a01b038381166004830152606092169063438b630090602401610d70565b6000546001600160a01b0316331461158a5760405162461bcd60e51b815260040161051c90612173565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115d65760405162461bcd60e51b815260040161051c90612173565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b8151835114801561160a575080518351145b6116505760405162461bcd60e51b81526020600482015260176024820152764172726179206c656e67746873206d69736d617463682160481b604482015260640161051c565b60005b8351811015610d3c57600080600073efcfed8a9e2ffeeb605b96d7120b2cb6ab092097638ee0498c86868151811061168d5761168d612298565b60200260200101516040518263ffffffff1660e01b81526004016116b1919061211e565b60606040518083038186803b1580156116c957600080fd5b505af41580156116dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611701919061205f565b925092509250600087858151811061171b5761171b612298565b602002602001015187868151811061173557611735612298565b6020026020010151604051602001611757929190918252602082015260400190565b60408051808303601f19018152908290528051602090910120635f72e03360e01b82526004820181905260ff861660248301526044820185905260648201849052915073efcfed8a9e2ffeeb605b96d7120b2cb6ab09209790635f72e0339060840160206040518083038186803b1580156117d157600080fd5b505af41580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118099190611c05565b6009546001600160a01b039081169116146118575760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21039b4b3b732b960911b604482015260640161051c565b6006600089878151811061186d5761186d612298565b6020026020010151815260200190815260200160002054600014156119495786858151811061189e5761189e612298565b60200260200101516801158e460913d0000010156118fe5760405162461bcd60e51b815260206004820152601960248201527f5969656c642076616c7565206e6f7420696e74656e6465642100000000000000604482015260640161051c565b86858151811061191057611910612298565b6020026020010151600660008a888151811061192e5761192e612298565b60200260200101518152602001908152602001600020819055505b50505050808061195890612267565b915050611653565b600061196a610556565b905060005b82518110156106db57816007600085848151811061198f5761198f612298565b60200260200101518152602001908152602001600020541415611a135760405162461bcd60e51b815260206004820152603660248201527f556e61626c6520746f207365742074696d657374616d70206475706c69636174604482015275696f6e20696e207468652073616d6520626c6f636b2160501b606482015260840161051c565b8160076000858481518110611a2a57611a2a612298565b60200260200101518152602001908152602001600020819055508080611a4f90612267565b91505061196f565b6000611a6a611a65846121c7565b612197565b9050808382526020808301915083868660051b86011115611a8a57600080fd5b60005b86811015611b1e5781356001600160401b0380821115611aac57600080fd5b8188019150601f8a81840112611ac157600080fd5b823582811115611ad357611ad36122ae565b611ae4818301601f19168801612197565b92508083528b87828601011115611afa57600080fd5b80878501888501376000908301870152508552509282019290820190600101611a8d565b505050509392505050565b60008083601f840112611b3b57600080fd5b5081356001600160401b03811115611b5257600080fd5b6020830191508360208260051b8501011115611b6d57600080fd5b9250929050565b600082601f830112611b8557600080fd5b81356020611b95611a65836121c7565b80838252828201915082860187848660051b8901011115611bb557600080fd5b60005b85811015611bd457813584529284019290840190600101611bb8565b5090979650505050505050565b600060208284031215611bf357600080fd5b8135611bfe816122c4565b9392505050565b600060208284031215611c1757600080fd5b8151611bfe816122c4565b60008060008060408587031215611c3857600080fd5b84356001600160401b0380821115611c4f57600080fd5b611c5b88838901611b29565b90965094506020870135915080821115611c7457600080fd5b50611c8187828801611b29565b95989497509550505050565b6000806000806000806000806080898b031215611ca957600080fd5b88356001600160401b0380821115611cc057600080fd5b611ccc8c838d01611b29565b909a50985060208b0135915080821115611ce557600080fd5b611cf18c838d01611b29565b909850965060408b0135915080821115611d0a57600080fd5b611d168c838d01611b29565b909650945060608b0135915080821115611d2f57600080fd5b50611d3c8b828c01611b29565b999c989b5096995094979396929594505050565b600080600060408486031215611d6557600080fd5b83356001600160401b03811115611d7b57600080fd5b611d8786828701611b29565b90945092505060208401358015158114611da057600080fd5b809150509250925092565b60008060408385031215611dbe57600080fd5b82356001600160401b0380821115611dd557600080fd5b818501915085601f830112611de957600080fd5b81356020611df9611a65836121c7565b8083825282820191508286018a848660051b8901011115611e1957600080fd5b600096505b84871015611e45578035611e31816122c4565b835260019690960195918301918301611e1e565b5096505086013592505080821115611e5c57600080fd5b50611e6985828601611b74565b9150509250929050565b600060208284031215611e8557600080fd5b81356001600160401b03811115611e9b57600080fd5b611ea784828501611b74565b949350505050565b60006020808385031215611ec257600080fd5b82516001600160401b03811115611ed857600080fd5b8301601f81018513611ee957600080fd5b8051611ef7611a65826121c7565b80828252848201915084840188868560051b8701011115611f1757600080fd5b600094505b83851015611f3a578051835260019490940193918501918501611f1c565b50979650505050505050565b60008060408385031215611f5957600080fd5b82356001600160401b0380821115611f7057600080fd5b611f7c86838701611b74565b93506020850135915080821115611e5c57600080fd5b600080600060608486031215611fa757600080fd5b83356001600160401b0380821115611fbe57600080fd5b611fca87838801611b74565b94506020860135915080821115611fe057600080fd5b611fec87838801611b74565b9350604086013591508082111561200257600080fd5b508401601f8101861361201457600080fd5b61202386823560208401611a57565b9150509250925092565b60006020828403121561203f57600080fd5b5035919050565b60006020828403121561205857600080fd5b5051919050565b60008060006060848603121561207457600080fd5b835160ff8116811461208557600080fd5b602085015160409095015190969495509392505050565b600081518084526020808501945080840160005b838110156120cc578151875295820195908201906001016120b0565b509495945050505050565b6001600160a01b03841681526060602082018190526000906120fb9083018561209c565b9050826040830152949350505050565b602081526000611bfe602083018461209c565b600060208083528351808285015260005b8181101561214b5785810183015185820160400152820161212f565b8181111561215d576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252600a90820152694e6f74204f776e65722160b01b604082015260600190565b604051601f8201601f191681016001600160401b03811182821017156121bf576121bf6122ae565b604052919050565b60006001600160401b038211156121e0576121e06122ae565b5060051b60200190565b600082198211156121fd576121fd612282565b500190565b60008261221f57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561223e5761223e612282565b500290565b60008282101561225557612255612282565b500390565b6000611bfe368484611a57565b600060001982141561227b5761227b612282565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146122d957600080fd5b5056fea26469706673582212201334124f03e476484269b54fae128aad5e80e4a10140710fcf5aa6f1e0442efc64736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80636e3463fe1161010f578063a8123dc8116100a2578063cf21823d11610071578063cf21823d14610450578063dae36bde14610463578063e771779414610476578063f2fde38b1461048957600080fd5b8063a8123dc814610404578063aefb2b5214610417578063c19355321461042a578063cb9eb93f1461043d57600080fd5b80638a4f3771116100de5780638a4f3771146103b85780638da5cb5b146103cb578063955f33ad146103de578063a0a6e32b146103f157600080fd5b80636e3463fe14610366578063747250011461038957806374f239f91461039c5780637c073ede146103af57600080fd5b8063314ca0391161018757806358d78c8c1161015657806358d78c8c1461030d5780635bd962001461032057806367c65041146103405780636cc532fa1461035357600080fd5b8063314ca0391461029e57806339a30fca146102a75780634d042fa8146102c75780635819a7a6146102fa57600080fd5b806315cbc3a2116101c357806315cbc3a21461022d5780631ffac581146102585780632b7c63701461026b5780632f72c8111461028b57600080fd5b806308cf8f06146101ea5780630d16beed146102105780631394818e14610218575b600080fd5b6101fd6101f836600461202d565b61049c565b6040519081526020015b60405180910390f35b6101fd610556565b61022b61022636600461202d565b61056d565b005b600954610240906001600160a01b031681565b6040516001600160a01b039091168152602001610207565b61022b610266366004611f46565b61059c565b61027e610279366004611be1565b6106e0565b604051610207919061210b565b6101fd610299366004611c8d565b610933565b6101fd60055481565b6101fd6102b536600461202d565b60066020526000908152604090205481565b6102ea6102d5366004611be1565b600a6020526000908152604090205460ff1681565b6040519015158152602001610207565b600254610240906001600160a01b031681565b6101fd61031b366004611e73565b610c4b565b6101fd61032e36600461202d565b60076020526000908152604090205481565b61022b61034e366004611d50565b610ca1565b61027e610361366004611be1565b610d42565b6102ea610374366004611be1565b60086020526000908152604090205460ff1681565b6101fd610397366004611c22565b610dca565b61022b6103aa366004611be1565b61107f565b6101fd60045481565b61027e6103c6366004611dab565b6110cb565b600054610240906001600160a01b031681565b61022b6103ec366004611f92565b61131c565b61022b6103ff366004611c22565b611386565b61022b610412366004611be1565b611466565b6101fd61042536600461202d565b6114b2565b61022b610438366004611be1565b6114e2565b600154610240906001600160a01b031681565b61027e61045e366004611be1565b61152e565b600354610240906001600160a01b031681565b61022b610484366004611be1565b611560565b61022b610497366004611be1565b6115ac565b6000806104a8836114b2565b905060006104b4610556565b905060006104c28383612243565b6000868152600660205260409020549091506105255760405162461bcd60e51b815260206004820152601d60248201527f5969656c64204c6f6f6b7570206e6f7420496e697469616c697a65642100000060448201526064015b60405180910390fd5b60008581526006602052604090205462015180906105439083612224565b61054d9190612202565b95945050505050565b60006005544210610568575060055490565b504290565b6000546001600160a01b031633146105975760405162461bcd60e51b815260040161051c90612173565b600555565b3360009081526008602052604090205460ff166105fb5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642074696d657374616d7020636f6e74726f6c6c657221000000604482015260640161051c565b60005b82518110156106db5781818151811061061957610619612298565b6020026020010151600454111561067e5760405162461bcd60e51b815260206004820152602360248201527f54696d657374616d70207365742062656c6f77207969656c64537461727454696044820152626d652160e81b606482015260840161051c565b81818151811061069057610690612298565b6020026020010151600760008584815181106106ae576106ae612298565b602002602001015181526020019081526020016000208190555080806106d390612267565b9150506105fe565b505050565b6003546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a082319060240160206040518083038186803b15801561072a57600080fd5b505afa15801561073e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107629190612046565b6002546040516370a0823160e01b81526001600160a01b038681166004830152929350600092909116906370a082319060240160206040518083038186803b1580156107ad57600080fd5b505afa1580156107c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e59190612046565b905060006107f382846121ea565b90506000816001600160401b0381111561080f5761080f6122ae565b604051908082528060200260200182016040528015610838578160200160208202803683370190505b509050600061084687610d42565b905060006108538861152e565b90506000805b82518110156108b75782818151811061087457610874612298565b602002602001015185838061088890612267565b94508151811061089a5761089a612298565b6020908102919091010152806108af81612267565b915050610859565b5060005b8351811015610925578381815181106108d6576108d6612298565b60200260200101516127106108eb91906121ea565b85836108f681612267565b94508151811061090857610908612298565b60209081029190910101528061091d81612267565b9150506108bb565b509298975050505050505050565b6000878614801561094357508784145b801561094e57508782145b6109945760405162461bcd60e51b81526020600482015260176024820152764172726179204c656e67746873204d69736d617463682160481b604482015260640161051c565b60005b86811015610acd578989828181106109b1576109b1612298565b90506020020160208101906109c69190611be1565b6001600160a01b0316636352211e8989848181106109e6576109e6612298565b905060200201356040518263ffffffff1660e01b8152600401610a0b91815260200190565b60206040518083038186803b158015610a2357600080fd5b505afa158015610a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5b9190611c05565b6001600160a01b0316336001600160a01b031614610abb5760405162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f74206f776e207468697320746f6b656e21000000000000604482015260640161051c565b80610ac581612267565b915050610997565b506000610b3d8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152506110cb92505050565b9050610b8881878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610b83925088915089905061225a565b6115f8565b6000610b9382610c4b565b9050610b9e82611960565b600154604051630a9edcc560e11b8152336004820152602481018390526001600160a01b039091169063153db98a90604401600060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050507fbb39cc58932f85e3e9d3d6b8b315e628b6ea052a07d36a8d550d9ff478cbf4df338383604051610c35939291906120d7565b60405180910390a19a9950505050505050505050565b60008060005b8351811015610c9a57610c7c848281518110610c6f57610c6f612298565b602002602001015161049c565b610c8690836121ea565b915080610c9281612267565b915050610c51565b5092915050565b6000546001600160a01b03163314610ccb5760405162461bcd60e51b815260040161051c90612173565b60005b82811015610d3c5781600a6000868685818110610ced57610ced612298565b9050602002016020810190610d029190611be1565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d3481612267565b915050610cce565b50505050565b60035460405162438b6360e81b81526001600160a01b038381166004830152606092169063438b6300906024015b60006040518083038186803b158015610d8857600080fd5b505afa158015610d9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dc49190810190611eaf565b92915050565b6000838214610e155760405162461bcd60e51b81526020600482015260176024820152764172726179204c656e67746873204d69736d617463682160481b604482015260640161051c565b60005b82811015610f4e57858582818110610e3257610e32612298565b9050602002016020810190610e479190611be1565b6001600160a01b0316636352211e858584818110610e6757610e67612298565b905060200201356040518263ffffffff1660e01b8152600401610e8c91815260200190565b60206040518083038186803b158015610ea457600080fd5b505afa158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc9190611c05565b6001600160a01b0316336001600160a01b031614610f3c5760405162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f74206f776e207468697320746f6b656e21000000000000604482015260640161051c565b80610f4681612267565b915050610e18565b506000610fbe86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284376000920191909152506110cb92505050565b90506000610fcb82610c4b565b9050610fd682611960565b600154604051630a9edcc560e11b8152336004820152602481018390526001600160a01b039091169063153db98a90604401600060405180830381600087803b15801561102257600080fd5b505af1158015611036573d6000803e3d6000fd5b505050507fbb39cc58932f85e3e9d3d6b8b315e628b6ea052a07d36a8d550d9ff478cbf4df33838360405161106d939291906120d7565b60405180910390a19695505050505050565b6000546001600160a01b031633146110a95760405162461bcd60e51b815260040161051c90612173565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b606081518351146111325760405162461bcd60e51b815260206004820152602b60248201527f676574496e6465784f66546f6b656e7328293a204172726179206c656e67746860448201526a73206d69736d617463682160a81b606482015260840161051c565b81516002546003546001600160a01b03918216911660005b8381101561122557826001600160a01b031687828151811061116e5761116e612298565b60200260200101516001600160a01b031614806111b55750816001600160a01b03168782815181106111a2576111a2612298565b60200260200101516001600160a01b0316145b6112135760405162461bcd60e51b815260206004820152602960248201527f676574496e6465784f66546f6b656e7328293a20556e737570706f7274656420604482015268436f6e74726163742160b81b606482015260840161051c565b8061121d81612267565b91505061114a565b506000836001600160401b03811115611240576112406122ae565b604051908082528060200260200182016040528015611269578160200160208202803683370190505b50905060005b84811015611311576000846001600160a01b031689838151811061129557611295612298565b60200260200101516001600160a01b0316146112b3576127106112b6565b60005b61ffff169050808883815181106112cf576112cf612298565b60200260200101516112e191906121ea565b8383815181106112f3576112f3612298565b6020908102919091010152508061130981612267565b91505061126f565b509695505050505050565b336000908152600a602052604090205460ff1661137b5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964207969656c64206461746120696e697469616c697a65722100604482015260640161051c565b6106db8383836115f8565b6000546001600160a01b031633146113b05760405162461bcd60e51b815260040161051c90612173565b8281146113f95760405162461bcd60e51b81526020600482015260176024820152764172726179206c656e67746873206d69736d617463682160481b604482015260640161051c565b60005b8381101561145f5782828281811061141657611416612298565b905060200201356006600087878581811061143357611433612298565b90506020020135815260200190815260200160002081905550808061145790612267565b9150506113fc565b5050505050565b6000546001600160a01b031633146114905760405162461bcd60e51b815260040161051c90612173565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260076020526040812054156114da57600082815260076020526040902054610dc4565b505060045490565b6000546001600160a01b0316331461150c5760405162461bcd60e51b815260040161051c90612173565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60025460405162438b6360e81b81526001600160a01b038381166004830152606092169063438b630090602401610d70565b6000546001600160a01b0316331461158a5760405162461bcd60e51b815260040161051c90612173565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115d65760405162461bcd60e51b815260040161051c90612173565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b8151835114801561160a575080518351145b6116505760405162461bcd60e51b81526020600482015260176024820152764172726179206c656e67746873206d69736d617463682160481b604482015260640161051c565b60005b8351811015610d3c57600080600073efcfed8a9e2ffeeb605b96d7120b2cb6ab092097638ee0498c86868151811061168d5761168d612298565b60200260200101516040518263ffffffff1660e01b81526004016116b1919061211e565b60606040518083038186803b1580156116c957600080fd5b505af41580156116dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611701919061205f565b925092509250600087858151811061171b5761171b612298565b602002602001015187868151811061173557611735612298565b6020026020010151604051602001611757929190918252602082015260400190565b60408051808303601f19018152908290528051602090910120635f72e03360e01b82526004820181905260ff861660248301526044820185905260648201849052915073efcfed8a9e2ffeeb605b96d7120b2cb6ab09209790635f72e0339060840160206040518083038186803b1580156117d157600080fd5b505af41580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118099190611c05565b6009546001600160a01b039081169116146118575760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21039b4b3b732b960911b604482015260640161051c565b6006600089878151811061186d5761186d612298565b6020026020010151815260200190815260200160002054600014156119495786858151811061189e5761189e612298565b60200260200101516801158e460913d0000010156118fe5760405162461bcd60e51b815260206004820152601960248201527f5969656c642076616c7565206e6f7420696e74656e6465642100000000000000604482015260640161051c565b86858151811061191057611910612298565b6020026020010151600660008a888151811061192e5761192e612298565b60200260200101518152602001908152602001600020819055505b50505050808061195890612267565b915050611653565b600061196a610556565b905060005b82518110156106db57816007600085848151811061198f5761198f612298565b60200260200101518152602001908152602001600020541415611a135760405162461bcd60e51b815260206004820152603660248201527f556e61626c6520746f207365742074696d657374616d70206475706c69636174604482015275696f6e20696e207468652073616d6520626c6f636b2160501b606482015260840161051c565b8160076000858481518110611a2a57611a2a612298565b60200260200101518152602001908152602001600020819055508080611a4f90612267565b91505061196f565b6000611a6a611a65846121c7565b612197565b9050808382526020808301915083868660051b86011115611a8a57600080fd5b60005b86811015611b1e5781356001600160401b0380821115611aac57600080fd5b8188019150601f8a81840112611ac157600080fd5b823582811115611ad357611ad36122ae565b611ae4818301601f19168801612197565b92508083528b87828601011115611afa57600080fd5b80878501888501376000908301870152508552509282019290820190600101611a8d565b505050509392505050565b60008083601f840112611b3b57600080fd5b5081356001600160401b03811115611b5257600080fd5b6020830191508360208260051b8501011115611b6d57600080fd5b9250929050565b600082601f830112611b8557600080fd5b81356020611b95611a65836121c7565b80838252828201915082860187848660051b8901011115611bb557600080fd5b60005b85811015611bd457813584529284019290840190600101611bb8565b5090979650505050505050565b600060208284031215611bf357600080fd5b8135611bfe816122c4565b9392505050565b600060208284031215611c1757600080fd5b8151611bfe816122c4565b60008060008060408587031215611c3857600080fd5b84356001600160401b0380821115611c4f57600080fd5b611c5b88838901611b29565b90965094506020870135915080821115611c7457600080fd5b50611c8187828801611b29565b95989497509550505050565b6000806000806000806000806080898b031215611ca957600080fd5b88356001600160401b0380821115611cc057600080fd5b611ccc8c838d01611b29565b909a50985060208b0135915080821115611ce557600080fd5b611cf18c838d01611b29565b909850965060408b0135915080821115611d0a57600080fd5b611d168c838d01611b29565b909650945060608b0135915080821115611d2f57600080fd5b50611d3c8b828c01611b29565b999c989b5096995094979396929594505050565b600080600060408486031215611d6557600080fd5b83356001600160401b03811115611d7b57600080fd5b611d8786828701611b29565b90945092505060208401358015158114611da057600080fd5b809150509250925092565b60008060408385031215611dbe57600080fd5b82356001600160401b0380821115611dd557600080fd5b818501915085601f830112611de957600080fd5b81356020611df9611a65836121c7565b8083825282820191508286018a848660051b8901011115611e1957600080fd5b600096505b84871015611e45578035611e31816122c4565b835260019690960195918301918301611e1e565b5096505086013592505080821115611e5c57600080fd5b50611e6985828601611b74565b9150509250929050565b600060208284031215611e8557600080fd5b81356001600160401b03811115611e9b57600080fd5b611ea784828501611b74565b949350505050565b60006020808385031215611ec257600080fd5b82516001600160401b03811115611ed857600080fd5b8301601f81018513611ee957600080fd5b8051611ef7611a65826121c7565b80828252848201915084840188868560051b8701011115611f1757600080fd5b600094505b83851015611f3a578051835260019490940193918501918501611f1c565b50979650505050505050565b60008060408385031215611f5957600080fd5b82356001600160401b0380821115611f7057600080fd5b611f7c86838701611b74565b93506020850135915080821115611e5c57600080fd5b600080600060608486031215611fa757600080fd5b83356001600160401b0380821115611fbe57600080fd5b611fca87838801611b74565b94506020860135915080821115611fe057600080fd5b611fec87838801611b74565b9350604086013591508082111561200257600080fd5b508401601f8101861361201457600080fd5b61202386823560208401611a57565b9150509250925092565b60006020828403121561203f57600080fd5b5035919050565b60006020828403121561205857600080fd5b5051919050565b60008060006060848603121561207457600080fd5b835160ff8116811461208557600080fd5b602085015160409095015190969495509392505050565b600081518084526020808501945080840160005b838110156120cc578151875295820195908201906001016120b0565b509495945050505050565b6001600160a01b03841681526060602082018190526000906120fb9083018561209c565b9050826040830152949350505050565b602081526000611bfe602083018461209c565b600060208083528351808285015260005b8181101561214b5785810183015185820160400152820161212f565b8181111561215d576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252600a90820152694e6f74204f776e65722160b01b604082015260600190565b604051601f8201601f191681016001600160401b03811182821017156121bf576121bf6122ae565b604052919050565b60006001600160401b038211156121e0576121e06122ae565b5060051b60200190565b600082198211156121fd576121fd612282565b500190565b60008261221f57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561223e5761223e612282565b500290565b60008282101561225557612255612282565b500390565b6000611bfe368484611a57565b600060001982141561227b5761227b612282565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146122d957600080fd5b5056fea26469706673582212201334124f03e476484269b54fae128aad5e80e4a10140710fcf5aa6f1e0442efc64736f6c63430008070033
Deployed Bytecode Sourcemap
7159:13522:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10279:698;;;;;;:::i;:::-;;:::i;:::-;;;19679:25:1;;;19667:2;19652:18;10279:698:0;;;;;;;;9752:285;;;:::i;7984:110::-;;;;;;:::i;:::-;;:::i;:::-;;14780:75;;;;;-1:-1:-1;;;;;14780:75:0;;;;;;-1:-1:-1;;;;;12037:32:1;;;12019:51;;12007:2;11992:18;14780:75:0;11873:203:1;9151:464:0;;;;;;:::i;:::-;;:::i;19436:1242::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;17436:1634::-;;;;;;:::i;:::-;;:::i;7899:40::-;;;;;;8121:47;;;;;;:::i;:::-;;;;;;;;;;;;;;15018:62;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13225:14:1;;13218:22;13200:41;;13188:2;13173:18;15018:62:0;13060:187:1;7406:76:0;;;;;-1:-1:-1;;;;;7406:76:0;;;10983:489;;;;;;:::i;:::-;;:::i;8637:58::-;;;;;;:::i;:::-;;;;;;;;;;;;;;15089:256;;;;;;:::i;:::-;;:::i;19120:148::-;;;;;;:::i;:::-;;:::i;8733:61::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13520:1252;;;;;;:::i;:::-;;:::i;14865:108::-;;;;;;:::i;:::-;;:::i;7817:42::-;;;;;;12209:1303;;;;;;:::i;:::-;;:::i;6365:20::-;;;;;-1:-1:-1;;;;;6365:20:0;;;15525:245;;;;;;:::i;:::-;;:::i;8261:345::-;;;;;;:::i;:::-;;:::i;7489:112::-;;;;;;:::i;:::-;;:::i;10043:202::-;;;;;;:::i;:::-;;:::i;7298:100::-;;;;;;:::i;:::-;;:::i;7218:72::-;;;;;-1:-1:-1;;;;;7218:72:0;;;19274:154;;;;;;:::i;:::-;;:::i;7609:73::-;;;;;-1:-1:-1;;;;;7609:73:0;;;7689:106;;;;;;:::i;:::-;;:::i;6511:77::-;;;;;;:::i;:::-;;:::i;10279:698::-;10342:7;10415:29;10447:28;10468:6;10447:20;:28::i;:::-;10415:60;;10545:27;10575:24;:22;:24::i;:::-;10545:54;-1:-1:-1;10687:20:0;10710:43;10732:21;10545:54;10710:43;:::i;:::-;10823:20;;;;:12;:20;;;;;;10687:66;;-1:-1:-1;10815:80:0;;;;-1:-1:-1;;;10815:80:0;;18668:2:1;10815:80:0;;;18650:21:1;18707:2;18687:18;;;18680:30;18746:31;18726:18;;;18719:59;18795:18;;10815:80:0;;;;;;;;;10939:20;;;;:12;:20;;;;;;10963:6;;10924:35;;:12;:35;:::i;:::-;10923:46;;;;:::i;:::-;10916:53;10279:698;-1:-1:-1;;;;;10279:698:0:o;9752:285::-;9807:7;9971:12;;9953:15;:30;:76;;-1:-1:-1;10017:12:0;;;9752:285::o;9953:76::-;-1:-1:-1;9999:15:0;;9752:285::o;7984:110::-;6465:5;;-1:-1:-1;;;;;6465:5:0;6474:10;6465:19;6457:42;;;;-1:-1:-1;;;6457:42:0;;;;;;;:::i;:::-;8063:12:::1;:28:::0;7984:110::o;9151:464::-;9065:10;9035:41;;;;:29;:41;;;;;;;;9027:96;;;;-1:-1:-1;;;9027:96:0;;17950:2:1;9027:96:0;;;17932:21:1;17989:2;17969:18;;;17962:30;18028:31;18008:18;;;18001:59;18077:18;;9027:96:0;17748:353:1;9027:96:0;9300:9:::1;9295:313;9319:8;:15;9315:1;:19;9295:313;;;9455:11;9467:1;9455:14;;;;;;;;:::i;:::-;;;;;;;9437;;:32;;9429:97;;;::::0;-1:-1:-1;;;9429:97:0;;16441:2:1;9429:97:0::1;::::0;::::1;16423:21:1::0;16480:2;16460:18;;;16453:30;16519:34;16499:18;;;16492:62;-1:-1:-1;;;16570:18:1;;;16563:33;16613:19;;9429:97:0::1;16239:399:1::0;9429:97:0::1;9582:11;9594:1;9582:14;;;;;;;;:::i;:::-;;;;;;;9543:23;:36;9567:8;9576:1;9567:11;;;;;;;;:::i;:::-;;;;;;;9543:36;;;;;;;;;;;:53;;;;9336:3;;;;;:::i;:::-;;;;9295:313;;;;9151:464:::0;;:::o;19436:1242::-;19630:10;;:30;;-1:-1:-1;;;19630:30:0;;-1:-1:-1;;;;;12037:32:1;;;19630:30:0;;;12019:51:1;19509:16:0;;19604:23;;19630:10;;;:20;;11992:18:1;;19630:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19700:13;;:33;;-1:-1:-1;;;19700:33:0;;-1:-1:-1;;;;;12037:32:1;;;19700:33:0;;;12019:51:1;19604:56:0;;-1:-1:-1;19671:26:0;;19700:13;;;;:23;;11992:18:1;;19700:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19671:62;-1:-1:-1;19744:21:0;19768:36;19671:62;19768:15;:36;:::i;:::-;19744:60;;19899:25;19942:13;-1:-1:-1;;;;;19927:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19927:29:0;;19899:57;;20008:33;20044:25;20060:8;20044:15;:25::i;:::-;20008:61;;20080:36;20119:28;20138:8;20119:18;:28::i;:::-;20080:67;-1:-1:-1;20238:21:0;;20270:180;20294:19;:26;20290:1;:30;20270:180;;;20416:19;20436:1;20416:22;;;;;;;;:::i;:::-;;;;;;;20388:8;20397:15;;;;;:::i;:::-;;;20388:25;;;;;;;;:::i;:::-;;;;;;;;;;:50;20322:3;;;;:::i;:::-;;;;20270:180;;;;20465:9;20460:183;20484:16;:23;20480:1;:27;20460:183;;;20604:16;20621:1;20604:19;;;;;;;;:::i;:::-;;;;;;;20626:5;20604:27;;;;:::i;:::-;20576:8;20585:15;;;;:::i;:::-;;;20576:25;;;;;;;;:::i;:::-;;;;;;;;;;:55;20509:3;;;;:::i;:::-;;;;20460:183;;;-1:-1:-1;20662:8:0;;19436:1242;-1:-1:-1;;;;;;;;19436:1242:0:o;17436:1634::-;17615:7;17693:37;;;:93;;;;-1:-1:-1;17747:39:0;;;17693:93;:149;;;;-1:-1:-1;17803:39:0;;;17693:149;17685:198;;;;-1:-1:-1;;;17685:198:0;;15338:2:1;17685:198:0;;;15320:21:1;15377:2;15357:18;;;15350:30;-1:-1:-1;;;15396:18:1;;;15389:53;15459:18;;17685:198:0;15136:347:1;17685:198:0;17954:9;17949:185;17969:20;;;17949:185;;;18038:10;;18049:1;18038:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18033:27:0;;18061:9;;18071:1;18061:12;;;;;;;:::i;:::-;;;;;;;18033:41;;;;;;;;;;;;;19679:25:1;;19667:2;19652:18;;19533:177;18033:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18019:55:0;:10;-1:-1:-1;;;;;18019:55:0;;18011:111;;;;-1:-1:-1;;;18011:111:0;;19380:2:1;18011:111:0;;;19362:21:1;19419:2;19399:18;;;19392:30;19458:28;19438:18;;;19431:56;19504:18;;18011:111:0;19178:350:1;18011:111:0;17991:3;;;;:::i;:::-;;;;17949:185;;;;18183:30;18216:39;18233:10;;18216:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18216:39:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18245:9:0;;-1:-1:-1;18245:9:0;;;;18216:39;;;18245:9;;18216:39;18245:9;18216:39;;;;;;;;;-1:-1:-1;18216:16:0;;-1:-1:-1;;;18216:39:0:i;:::-;18183:72;;18307:62;18329:13;18344:11;;18307:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18307:62:0;;-1:-1:-1;18357:11:0;;-1:-1:-1;18357:11:0;;-1:-1:-1;18307:62:0;:::i;:::-;:21;:62::i;:::-;18531:22;18556:35;18577:13;18556:20;:35::i;:::-;18531:60;;18736:39;18761:13;18736:24;:39::i;:::-;18841:5;;:50;;-1:-1:-1;;;18841:50:0;;18864:10;18841:50;;;12689:51:1;12756:18;;;12749:34;;;-1:-1:-1;;;;;18841:5:0;;;;:22;;12662:18:1;;18841:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18948:48;18954:10;18966:13;18981:14;18948:48;;;;;;;;:::i;:::-;;;;;;;;19048:14;17436:1634;-1:-1:-1;;;;;;;;;;17436:1634:0:o;10983:489::-;11066:7;11164:22;11275:9;11270:120;11294:8;:15;11290:1;:19;11270:120;;;11349:29;11366:8;11375:1;11366:11;;;;;;;;:::i;:::-;;;;;;;11349:16;:29::i;:::-;11331:47;;;;:::i;:::-;;-1:-1:-1;11311:3:0;;;;:::i;:::-;;;;11270:120;;;-1:-1:-1;11450:14:0;10983:489;-1:-1:-1;;10983:489:0:o;15089:256::-;6465:5;;-1:-1:-1;;;;;6465:5:0;6474:10;6465:19;6457:42;;;;-1:-1:-1;;;6457:42:0;;;;;;;:::i;:::-;15209:9:::1;15204:134;15224:24:::0;;::::1;15204:134;;;15321:5;15270:30;:48;15301:13;;15315:1;15301:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15270:48:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;15270:48:0;:56;;-1:-1:-1;;15270:56:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15250:3;::::1;::::0;::::1;:::i;:::-;;;;15204:134;;;;15089:256:::0;;;:::o;19120:148::-;19226:10;;:34;;-1:-1:-1;;;19226:34:0;;-1:-1:-1;;;;;12037:32:1;;;19226:34:0;;;12019:51:1;19190:16:0;;19226:10;;:24;;11992:18:1;;19226:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19226:34:0;;;;;;;;;;;;:::i;:::-;19219:41;19120:148;-1:-1:-1;;19120:148:0:o;13520:1252::-;13619:7;13697:37;;;13689:86;;;;-1:-1:-1;;;13689:86:0;;15338:2:1;13689:86:0;;;15320:21:1;15377:2;15357:18;;;15350:30;-1:-1:-1;;;15396:18:1;;;15389:53;15459:18;;13689:86:0;15136:347:1;13689:86:0;13846:9;13841:185;13861:20;;;13841:185;;;13930:10;;13941:1;13930:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13925:27:0;;13953:9;;13963:1;13953:12;;;;;;;:::i;:::-;;;;;;;13925:41;;;;;;;;;;;;;19679:25:1;;19667:2;19652:18;;19533:177;13925:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13911:55:0;:10;-1:-1:-1;;;;;13911:55:0;;13903:111;;;;-1:-1:-1;;;13903:111:0;;19380:2:1;13903:111:0;;;19362:21:1;19419:2;19399:18;;;19392:30;19458:28;19438:18;;;19431:56;19504:18;;13903:111:0;19178:350:1;13903:111:0;13883:3;;;;:::i;:::-;;;;13841:185;;;;14075:30;14108:39;14125:10;;14108:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14108:39:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14137:9:0;;-1:-1:-1;14137:9:0;;;;14108:39;;;14137:9;;14108:39;14137:9;14108:39;;;;;;;;;-1:-1:-1;14108:16:0;;-1:-1:-1;;;14108:39:0:i;:::-;14075:72;;14238:22;14263:35;14284:13;14263:20;:35::i;:::-;14238:60;;14434:39;14459:13;14434:24;:39::i;:::-;14539:5;;:50;;-1:-1:-1;;;14539:50:0;;14562:10;14539:50;;;12689:51:1;12756:18;;;12749:34;;;-1:-1:-1;;;;;14539:5:0;;;;:22;;12662:18:1;;14539:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14646:48;14652:10;14664:13;14679:14;14646:48;;;;;;;;:::i;:::-;;;;;;;;14750:14;13520:1252;-1:-1:-1;;;;;;13520:1252:0:o;14865:108::-;6465:5;;-1:-1:-1;;;;;6465:5:0;6474:10;6465:19;6457:42;;;;-1:-1:-1;;;6457:42:0;;;;;;;:::i;:::-;14939:15:::1;:26:::0;;-1:-1:-1;;;;;;14939:26:0::1;-1:-1:-1::0;;;;;14939:26:0;;;::::1;::::0;;;::::1;::::0;;14865:108::o;12209:1303::-;12318:16;12428:9;:16;12407:10;:17;:37;12399:106;;;;-1:-1:-1;;;12399:106:0;;16029:2:1;12399:106:0;;;16011:21:1;16068:2;16048:18;;;16041:30;16107:34;16087:18;;;16080:62;-1:-1:-1;;;16158:18:1;;;16151:41;16209:19;;12399:106:0;15827:407:1;12399:106:0;12574:16;;12641:13;;12703:10;;-1:-1:-1;;;;;12641:13:0;;;;12703:10;12557:14;12786:229;12810:6;12806:1;:10;12786:229;;;12863:21;-1:-1:-1;;;;;12846:38:0;:10;12857:1;12846:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;12846:38:0;;:94;;;;12922:18;-1:-1:-1;;;;;12905:35:0;:10;12916:1;12905:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;12905:35:0;;12846:94;12838:165;;;;-1:-1:-1;;;12838:165:0;;16845:2:1;12838:165:0;;;16827:21:1;16884:2;16864:18;;;16857:30;16923:34;16903:18;;;16896:62;-1:-1:-1;;;16974:18:1;;;16967:39;17023:19;;12838:165:0;16643:405:1;12838:165:0;12818:3;;;;:::i;:::-;;;;12786:229;;;;13073:25;13115:6;-1:-1:-1;;;;;13101:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13101:21:0;;13073:49;;13177:9;13172:267;13196:6;13192:1;:10;13172:267;;;13308:15;13343:21;-1:-1:-1;;;;;13326:38:0;:10;13337:1;13326:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;13326:38:0;;:50;;13371:5;13326:50;;;13367:1;13326:50;13308:68;;;;13420:7;13405:9;13415:1;13405:12;;;;;;;;:::i;:::-;;;;;;;:22;;;;:::i;:::-;13391:8;13400:1;13391:11;;;;;;;;:::i;:::-;;;;;;;;;;:36;-1:-1:-1;13204:3:0;;;;:::i;:::-;;;;13172:267;;;-1:-1:-1;13496:8:0;12209:1303;-1:-1:-1;;;;;;12209:1303:0:o;15525:245::-;15437:10;15406:42;;;;:30;:42;;;;;;;;15398:99;;;;-1:-1:-1;;;15398:99:0;;18308:2:1;15398:99:0;;;18290:21:1;18347:2;18327:18;;;18320:30;18386:33;18366:18;;;18359:61;18437:18;;15398:99:0;18106:355:1;15398:99:0;15705:57:::1;15727:8;15737:11;15750;15705:21;:57::i;8261:345::-:0;6465:5;;-1:-1:-1;;;;;6465:5:0;6474:10;6465:19;6457:42;;;;-1:-1:-1;;;6457:42:0;;;;;;;:::i;:::-;8390:34;;::::1;8382:83;;;::::0;-1:-1:-1;;;8382:83:0;;17255:2:1;8382:83:0::1;::::0;::::1;17237:21:1::0;17294:2;17274:18;;;17267:30;-1:-1:-1;;;17313:18:1;;;17306:53;17376:18;;8382:83:0::1;17053:347:1::0;8382:83:0::1;8491:9;8486:113;8506:20:::0;;::::1;8486:113;;;8577:7;;8585:1;8577:10;;;;;;;:::i;:::-;;;;;;;8548:12;:26;8561:9;;8571:1;8561:12;;;;;;;:::i;:::-;;;;;;;8548:26;;;;;;;;;;;:39;;;;8528:3;;;;;:::i;:::-;;;;8486:113;;;;8261:345:::0;;;;:::o;7489:112::-;6465:5;;-1:-1:-1;;;;;6465:5:0;6474:10;6465:19;6457:42;;;;-1:-1:-1;;;6457:42:0;;;;;;;:::i;:::-;7563:13:::1;:30:::0;;-1:-1:-1;;;;;;7563:30:0::1;-1:-1:-1::0;;;;;7563:30:0;;;::::1;::::0;;;::::1;::::0;;7489:112::o;10043:202::-;10110:7;10137:31;;;:23;:31;;;;;;:36;:100;;10206:31;;;;:23;:31;;;;;;10137:100;;;-1:-1:-1;;10189:14:0;;;10043:202::o;7298:100::-;6465:5;;-1:-1:-1;;;;;6465:5:0;6474:10;6465:19;6457:42;;;;-1:-1:-1;;;6457:42:0;;;;;;;:::i;:::-;7365:5:::1;:24:::0;;-1:-1:-1;;;;;;7365:24:0::1;-1:-1:-1::0;;;;;7365:24:0;;;::::1;::::0;;;::::1;::::0;;7298:100::o;19274:154::-;19383:13;;:37;;-1:-1:-1;;;19383:37:0;;-1:-1:-1;;;;;12037:32:1;;;19383:37:0;;;12019:51:1;19347:16:0;;19383:13;;:27;;11992:18:1;;19383:37:0;11873:203:1;7689:106:0;6465:5;;-1:-1:-1;;;;;6465:5:0;6474:10;6465:19;6457:42;;;;-1:-1:-1;;;6457:42:0;;;;;;;:::i;:::-;7760:10:::1;:27:::0;;-1:-1:-1;;;;;;7760:27:0::1;-1:-1:-1::0;;;;;7760:27:0;;;::::1;::::0;;;::::1;::::0;;7689:106::o;6511:77::-;6465:5;;-1:-1:-1;;;;;6465:5:0;6474:10;6465:19;6457:42;;;;-1:-1:-1;;;6457:42:0;;;;;;;:::i;:::-;6573:5:::1;:12:::0;;-1:-1:-1;;;;;;6573:12:0::1;-1:-1:-1::0;;;;;6573:12:0;;;::::1;::::0;;;::::1;::::0;;6511:77::o;15812:1616::-;15981:11;:18;15962:8;:15;:37;:91;;;;;16035:11;:18;16016:8;:15;:37;15962:91;15954:140;;;;-1:-1:-1;;;15954:140:0;;17255:2:1;15954:140:0;;;17237:21:1;17294:2;17274:18;;;17267:30;-1:-1:-1;;;17313:18:1;;;17306:53;17376:18;;15954:140:0;17053:347:1;15954:140:0;16196:9;16191:1230;16215:8;:15;16211:1;:19;16191:1230;;;16438:7;16447:9;16458;16489:5;:30;16520:11;16532:1;16520:14;;;;;;;;:::i;:::-;;;;;;;16489:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16437:98;;;;;;16617:22;16687:8;16696:1;16687:11;;;;;;;;:::i;:::-;;;;;;;16717;16729:1;16717:14;;;;;;;;:::i;:::-;;;;;;;16652:94;;;;;;;;11778:19:1;;;11822:2;11813:12;;11806:28;11859:2;11850:12;;11621:247;16652:94:0;;;;;;;-1:-1:-1;;16652:94:0;;;;;;;16642:105;;16652:94;16642:105;;;;-1:-1:-1;;;16809:60:0;;;;;13487:25:1;;;13560:4;13548:17;;13528:18;;;13521:45;13582:18;;;13575:34;;;13625:18;;;13618:34;;;16642:105:0;-1:-1:-1;16809:5:0;;:35;;13459:19:1;;16809:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16772:15;;-1:-1:-1;;;;;16772:15:0;;;:97;;;16764:141;;;;-1:-1:-1;;;16764:141:0;;17607:2:1;16764:141:0;;;17589:21:1;17646:2;17626:18;;;17619:30;-1:-1:-1;;;17665:18:1;;;17658:44;17719:18;;16764:141:0;17405:338:1;16764:141:0;16967:12;:25;16980:8;16989:1;16980:11;;;;;;;;:::i;:::-;;;;;;;16967:25;;;;;;;;;;;;16996:1;16967:30;16963:447;;;17250:11;17262:1;17250:14;;;;;;;;:::i;:::-;;;;;;;17238:8;:26;;17230:85;;;;-1:-1:-1;;;17230:85:0;;19026:2:1;17230:85:0;;;19008:21:1;19065:2;19045:18;;;19038:30;19104:27;19084:18;;;19077:55;19149:18;;17230:85:0;18824:349:1;17230:85:0;17380:11;17392:1;17380:14;;;;;;;;:::i;:::-;;;;;;;17352:12;:25;17365:8;17374:1;17365:11;;;;;;;;:::i;:::-;;;;;;;17352:25;;;;;;;;;;;:42;;;;16963:447;16237:1184;;;;16232:3;;;;;:::i;:::-;;;;16191:1230;;11509:657;11644:27;11674:24;:22;:24::i;:::-;11644:54;;11798:9;11793:366;11817:8;:15;11813:1;:19;11793:366;;;11977:19;11937:23;:36;11961:8;11970:1;11961:11;;;;;;;;:::i;:::-;;;;;;;11937:36;;;;;;;;;;;;:59;;11929:143;;;;-1:-1:-1;;;11929:143:0;;14915:2:1;11929:143:0;;;14897:21:1;14954:2;14934:18;;;14927:30;14993:34;14973:18;;;14966:62;-1:-1:-1;;;15044:18:1;;;15037:52;15106:19;;11929:143:0;14713:418:1;11929:143:0;12128:19;12089:23;:36;12113:8;12122:1;12113:11;;;;;;;;:::i;:::-;;;;;;;12089:36;;;;;;;;;;;:58;;;;11834:3;;;;;:::i;:::-;;;;11793:366;;14:1208:1;91:5;120:64;136:47;176:6;136:47;:::i;:::-;120:64;:::i;:::-;111:73;;204:5;232:6;225:5;218:21;258:4;289:2;282:5;278:14;271:21;;312:6;362:3;352:6;349:1;345:14;337:6;333:27;330:36;327:56;;;379:1;376;369:12;327:56;401:1;411:805;425:6;422:1;419:13;411:805;;;506:3;493:17;-1:-1:-1;;;;;583:2:1;570:11;567:19;564:39;;;599:1;596;589:12;564:39;638:11;630:6;626:24;616:34;;673:4;717:3;712:2;708;704:11;700:21;690:49;;735:1;732;725:12;690:49;775:2;762:16;801:2;797;794:10;791:36;;;807:18;;:::i;:::-;855:51;879:11;;;-1:-1:-1;;875:25:1;871:34;;855:51;:::i;:::-;840:66;;935:2;926:7;919:19;979:3;974:2;969;965;961:11;957:20;954:29;951:49;;;996:1;993;986:12;951:49;1057:2;1052;1048;1044:11;1039:2;1030:7;1026:16;1013:47;1107:1;1084:16;;;1080:25;;1073:36;-1:-1:-1;1122:20:1;;-1:-1:-1;1162:12:1;;;;1194;;;;447:1;440:9;411:805;;;415:3;;;;14:1208;;;;;:::o;1227:367::-;1290:8;1300:6;1354:3;1347:4;1339:6;1335:17;1331:27;1321:55;;1372:1;1369;1362:12;1321:55;-1:-1:-1;1395:20:1;;-1:-1:-1;;;;;1427:30:1;;1424:50;;;1470:1;1467;1460:12;1424:50;1507:4;1499:6;1495:17;1483:29;;1567:3;1560:4;1550:6;1547:1;1543:14;1535:6;1531:27;1527:38;1524:47;1521:67;;;1584:1;1581;1574:12;1521:67;1227:367;;;;;:::o;1599:673::-;1653:5;1706:3;1699:4;1691:6;1687:17;1683:27;1673:55;;1724:1;1721;1714:12;1673:55;1760:6;1747:20;1786:4;1810:60;1826:43;1866:2;1826:43;:::i;1810:60::-;1892:3;1916:2;1911:3;1904:15;1944:2;1939:3;1935:12;1928:19;;1979:2;1971:6;1967:15;2031:3;2026:2;2020;2017:1;2013:10;2005:6;2001:23;1997:32;1994:41;1991:61;;;2048:1;2045;2038:12;1991:61;2070:1;2080:163;2094:2;2091:1;2088:9;2080:163;;;2151:17;;2139:30;;2189:12;;;;2221;;;;2112:1;2105:9;2080:163;;;-1:-1:-1;2261:5:1;;1599:673;-1:-1:-1;;;;;;;1599:673:1:o;2277:247::-;2336:6;2389:2;2377:9;2368:7;2364:23;2360:32;2357:52;;;2405:1;2402;2395:12;2357:52;2444:9;2431:23;2463:31;2488:5;2463:31;:::i;:::-;2513:5;2277:247;-1:-1:-1;;;2277:247:1:o;2529:251::-;2599:6;2652:2;2640:9;2631:7;2627:23;2623:32;2620:52;;;2668:1;2665;2658:12;2620:52;2700:9;2694:16;2719:31;2744:5;2719:31;:::i;2785:773::-;2907:6;2915;2923;2931;2984:2;2972:9;2963:7;2959:23;2955:32;2952:52;;;3000:1;2997;2990:12;2952:52;3040:9;3027:23;-1:-1:-1;;;;;3110:2:1;3102:6;3099:14;3096:34;;;3126:1;3123;3116:12;3096:34;3165:70;3227:7;3218:6;3207:9;3203:22;3165:70;:::i;:::-;3254:8;;-1:-1:-1;3139:96:1;-1:-1:-1;3342:2:1;3327:18;;3314:32;;-1:-1:-1;3358:16:1;;;3355:36;;;3387:1;3384;3377:12;3355:36;;3426:72;3490:7;3479:8;3468:9;3464:24;3426:72;:::i;:::-;2785:773;;;;-1:-1:-1;3517:8:1;-1:-1:-1;;;;2785:773:1:o;3563:1415::-;3768:6;3776;3784;3792;3800;3808;3816;3824;3877:3;3865:9;3856:7;3852:23;3848:33;3845:53;;;3894:1;3891;3884:12;3845:53;3934:9;3921:23;-1:-1:-1;;;;;4004:2:1;3996:6;3993:14;3990:34;;;4020:1;4017;4010:12;3990:34;4059:70;4121:7;4112:6;4101:9;4097:22;4059:70;:::i;:::-;4148:8;;-1:-1:-1;4033:96:1;-1:-1:-1;4236:2:1;4221:18;;4208:32;;-1:-1:-1;4252:16:1;;;4249:36;;;4281:1;4278;4271:12;4249:36;4320:72;4384:7;4373:8;4362:9;4358:24;4320:72;:::i;:::-;4411:8;;-1:-1:-1;4294:98:1;-1:-1:-1;4499:2:1;4484:18;;4471:32;;-1:-1:-1;4515:16:1;;;4512:36;;;4544:1;4541;4534:12;4512:36;4583:72;4647:7;4636:8;4625:9;4621:24;4583:72;:::i;:::-;4674:8;;-1:-1:-1;4557:98:1;-1:-1:-1;4762:2:1;4747:18;;4734:32;;-1:-1:-1;4778:16:1;;;4775:36;;;4807:1;4804;4797:12;4775:36;;4846:72;4910:7;4899:8;4888:9;4884:24;4846:72;:::i;:::-;3563:1415;;;;-1:-1:-1;3563:1415:1;;-1:-1:-1;3563:1415:1;;;;;;4937:8;-1:-1:-1;;;3563:1415:1:o;4983:598::-;5075:6;5083;5091;5144:2;5132:9;5123:7;5119:23;5115:32;5112:52;;;5160:1;5157;5150:12;5112:52;5200:9;5187:23;-1:-1:-1;;;;;5225:6:1;5222:30;5219:50;;;5265:1;5262;5255:12;5219:50;5304:70;5366:7;5357:6;5346:9;5342:22;5304:70;:::i;:::-;5393:8;;-1:-1:-1;5278:96:1;-1:-1:-1;;5478:2:1;5463:18;;5450:32;5518:13;;5511:21;5501:32;;5491:60;;5547:1;5544;5537:12;5491:60;5570:5;5560:15;;;4983:598;;;;;:::o;5586:1226::-;5704:6;5712;5765:2;5753:9;5744:7;5740:23;5736:32;5733:52;;;5781:1;5778;5771:12;5733:52;5821:9;5808:23;-1:-1:-1;;;;;5891:2:1;5883:6;5880:14;5877:34;;;5907:1;5904;5897:12;5877:34;5945:6;5934:9;5930:22;5920:32;;5990:7;5983:4;5979:2;5975:13;5971:27;5961:55;;6012:1;6009;6002:12;5961:55;6048:2;6035:16;6070:4;6094:60;6110:43;6150:2;6110:43;:::i;6094:60::-;6176:3;6200:2;6195:3;6188:15;6228:2;6223:3;6219:12;6212:19;;6259:2;6255;6251:11;6307:7;6302:2;6296;6293:1;6289:10;6285:2;6281:19;6277:28;6274:41;6271:61;;;6328:1;6325;6318:12;6271:61;6350:1;6341:10;;6360:238;6374:2;6371:1;6368:9;6360:238;;;6445:3;6432:17;6462:31;6487:5;6462:31;:::i;:::-;6506:18;;6392:1;6385:9;;;;;6544:12;;;;6576;;6360:238;;;-1:-1:-1;6617:5:1;-1:-1:-1;;6660:18:1;;6647:32;;-1:-1:-1;;6691:16:1;;;6688:36;;;6720:1;6717;6710:12;6688:36;;6743:63;6798:7;6787:8;6776:9;6772:24;6743:63;:::i;:::-;6733:73;;;5586:1226;;;;;:::o;7595:348::-;7679:6;7732:2;7720:9;7711:7;7707:23;7703:32;7700:52;;;7748:1;7745;7738:12;7700:52;7788:9;7775:23;-1:-1:-1;;;;;7813:6:1;7810:30;7807:50;;;7853:1;7850;7843:12;7807:50;7876:61;7929:7;7920:6;7909:9;7905:22;7876:61;:::i;:::-;7866:71;7595:348;-1:-1:-1;;;;7595:348:1:o;7948:892::-;8043:6;8074:2;8117;8105:9;8096:7;8092:23;8088:32;8085:52;;;8133:1;8130;8123:12;8085:52;8166:9;8160:16;-1:-1:-1;;;;;8191:6:1;8188:30;8185:50;;;8231:1;8228;8221:12;8185:50;8254:22;;8307:4;8299:13;;8295:27;-1:-1:-1;8285:55:1;;8336:1;8333;8326:12;8285:55;8365:2;8359:9;8388:60;8404:43;8444:2;8404:43;:::i;8388:60::-;8470:3;8494:2;8489:3;8482:15;8522:2;8517:3;8513:12;8506:19;;8553:2;8549;8545:11;8601:7;8596:2;8590;8587:1;8583:10;8579:2;8575:19;8571:28;8568:41;8565:61;;;8622:1;8619;8612:12;8565:61;8644:1;8635:10;;8654:156;8668:2;8665:1;8662:9;8654:156;;;8725:10;;8713:23;;8686:1;8679:9;;;;;8756:12;;;;8788;;8654:156;;;-1:-1:-1;8829:5:1;7948:892;-1:-1:-1;;;;;;;7948:892:1:o;8845:595::-;8963:6;8971;9024:2;9012:9;9003:7;8999:23;8995:32;8992:52;;;9040:1;9037;9030:12;8992:52;9080:9;9067:23;-1:-1:-1;;;;;9150:2:1;9142:6;9139:14;9136:34;;;9166:1;9163;9156:12;9136:34;9189:61;9242:7;9233:6;9222:9;9218:22;9189:61;:::i;:::-;9179:71;;9303:2;9292:9;9288:18;9275:32;9259:48;;9332:2;9322:8;9319:16;9316:36;;;9348:1;9345;9338:12;9445:957;9606:6;9614;9622;9675:2;9663:9;9654:7;9650:23;9646:32;9643:52;;;9691:1;9688;9681:12;9643:52;9731:9;9718:23;-1:-1:-1;;;;;9801:2:1;9793:6;9790:14;9787:34;;;9817:1;9814;9807:12;9787:34;9840:61;9893:7;9884:6;9873:9;9869:22;9840:61;:::i;:::-;9830:71;;9954:2;9943:9;9939:18;9926:32;9910:48;;9983:2;9973:8;9970:16;9967:36;;;9999:1;9996;9989:12;9967:36;10022:63;10077:7;10066:8;10055:9;10051:24;10022:63;:::i;:::-;10012:73;;10138:2;10127:9;10123:18;10110:32;10094:48;;10167:2;10157:8;10154:16;10151:36;;;10183:1;10180;10173:12;10151:36;-1:-1:-1;10206:24:1;;10261:4;10253:13;;10249:27;-1:-1:-1;10239:55:1;;10290:1;10287;10280:12;10239:55;10313:83;10388:7;10383:2;10370:16;10365:2;10361;10357:11;10313:83;:::i;:::-;10303:93;;;9445:957;;;;;:::o;10407:180::-;10466:6;10519:2;10507:9;10498:7;10494:23;10490:32;10487:52;;;10535:1;10532;10525:12;10487:52;-1:-1:-1;10558:23:1;;10407:180;-1:-1:-1;10407:180:1:o;10592:184::-;10662:6;10715:2;10703:9;10694:7;10690:23;10686:32;10683:52;;;10731:1;10728;10721:12;10683:52;-1:-1:-1;10754:16:1;;10592:184;-1:-1:-1;10592:184:1:o;10781:395::-;10867:6;10875;10883;10936:2;10924:9;10915:7;10911:23;10907:32;10904:52;;;10952:1;10949;10942:12;10904:52;10984:9;10978:16;11034:4;11027:5;11023:16;11016:5;11013:27;11003:55;;11054:1;11051;11044:12;11003:55;11122:2;11107:18;;11101:25;11166:2;11151:18;;;11145:25;11077:5;;11101:25;;-1:-1:-1;11145:25:1;10781:395;-1:-1:-1;;;10781:395:1:o;11181:435::-;11234:3;11272:5;11266:12;11299:6;11294:3;11287:19;11325:4;11354:2;11349:3;11345:12;11338:19;;11391:2;11384:5;11380:14;11412:1;11422:169;11436:6;11433:1;11430:13;11422:169;;;11497:13;;11485:26;;11531:12;;;;11566:15;;;;11458:1;11451:9;11422:169;;;-1:-1:-1;11607:3:1;;11181:435;-1:-1:-1;;;;;11181:435:1:o;12081:429::-;-1:-1:-1;;;;;12316:32:1;;12298:51;;12385:2;12380;12365:18;;12358:30;;;-1:-1:-1;;12405:56:1;;12442:18;;12434:6;12405:56;:::i;:::-;12397:64;;12497:6;12492:2;12481:9;12477:18;12470:34;12081:429;;;;;;:::o;12794:261::-;12973:2;12962:9;12955:21;12936:4;12993:56;13045:2;13034:9;13030:18;13022:6;12993:56;:::i;13663:603::-;13781:4;13810:2;13839;13828:9;13821:21;13871:6;13865:13;13914:6;13909:2;13898:9;13894:18;13887:34;13939:1;13949:140;13963:6;13960:1;13957:13;13949:140;;;14058:14;;;14054:23;;14048:30;14024:17;;;14043:2;14020:26;14013:66;13978:10;;13949:140;;;14107:6;14104:1;14101:13;14098:91;;;14177:1;14172:2;14163:6;14152:9;14148:22;14144:31;14137:42;14098:91;-1:-1:-1;14250:2:1;14229:15;-1:-1:-1;;14225:29:1;14210:45;;;;14257:2;14206:54;;13663:603;-1:-1:-1;;;13663:603:1:o;15488:334::-;15690:2;15672:21;;;15729:2;15709:18;;;15702:30;-1:-1:-1;;;15763:2:1;15748:18;;15741:40;15813:2;15798:18;;15488:334::o;19715:275::-;19786:2;19780:9;19851:2;19832:13;;-1:-1:-1;;19828:27:1;19816:40;;-1:-1:-1;;;;;19871:34:1;;19907:22;;;19868:62;19865:88;;;19933:18;;:::i;:::-;19969:2;19962:22;19715:275;;-1:-1:-1;19715:275:1:o;19995:183::-;20055:4;-1:-1:-1;;;;;20080:6:1;20077:30;20074:56;;;20110:18;;:::i;:::-;-1:-1:-1;20155:1:1;20151:14;20167:4;20147:25;;19995:183::o;20183:128::-;20223:3;20254:1;20250:6;20247:1;20244:13;20241:39;;;20260:18;;:::i;:::-;-1:-1:-1;20296:9:1;;20183:128::o;20316:217::-;20356:1;20382;20372:132;;20426:10;20421:3;20417:20;20414:1;20407:31;20461:4;20458:1;20451:15;20489:4;20486:1;20479:15;20372:132;-1:-1:-1;20518:9:1;;20316:217::o;20538:168::-;20578:7;20644:1;20640;20636:6;20632:14;20629:1;20626:21;20621:1;20614:9;20607:17;20603:45;20600:71;;;20651:18;;:::i;:::-;-1:-1:-1;20691:9:1;;20538:168::o;20711:125::-;20751:4;20779:1;20776;20773:8;20770:34;;;20784:18;;:::i;:::-;-1:-1:-1;20821:9:1;;20711:125::o;20841:253::-;20977:9;21014:74;21073:14;21065:6;21058:5;21014:74;:::i;21099:135::-;21138:3;-1:-1:-1;;21159:17:1;;21156:43;;;21179:18;;:::i;:::-;-1:-1:-1;21226:1:1;21215:13;;21099:135::o;21239:127::-;21300:10;21295:3;21291:20;21288:1;21281:31;21331:4;21328:1;21321:15;21355:4;21352:1;21345:15;21371:127;21432:10;21427:3;21423:20;21420:1;21413:31;21463:4;21460:1;21453:15;21487:4;21484:1;21477:15;21503:127;21564:10;21559:3;21555:20;21552:1;21545:31;21595:4;21592:1;21585:15;21619:4;21616:1;21609:15;21635:131;-1:-1:-1;;;;;21710:31:1;;21700:42;;21690:70;;21756:1;21753;21746:12;21690:70;21635:131;:::o
Swarm Source
ipfs://1334124f03e476484269b54fae128aad5e80e4a10140710fcf5aa6f1e0442efc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.