More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 206 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 18367562 | 284 days ago | IN | 0 ETH | 0.00031367 | ||||
Unstake | 18306933 | 292 days ago | IN | 0 ETH | 0.00060141 | ||||
Unstake | 18252099 | 300 days ago | IN | 0 ETH | 0.00036192 | ||||
Unstake | 18230583 | 303 days ago | IN | 0 ETH | 0.00047187 | ||||
Unstake | 18227313 | 303 days ago | IN | 0 ETH | 0.00059734 | ||||
Unstake | 18219579 | 304 days ago | IN | 0 ETH | 0.00062329 | ||||
Unstake | 18216535 | 305 days ago | IN | 0 ETH | 0.00040071 | ||||
Unstake | 18178901 | 310 days ago | IN | 0 ETH | 0.00126327 | ||||
Unstake | 18177680 | 310 days ago | IN | 0 ETH | 0.00085879 | ||||
Unstake | 18170023 | 311 days ago | IN | 0 ETH | 0.00064019 | ||||
Unstake | 18159098 | 313 days ago | IN | 0 ETH | 0.00068688 | ||||
Unstake | 18158334 | 313 days ago | IN | 0 ETH | 0.00118389 | ||||
Claim | 18153240 | 314 days ago | IN | 0 ETH | 0.00053222 | ||||
Set Merkle Root | 18152198 | 314 days ago | IN | 0.00031269 ETH | 0.00031012 | ||||
Set Merkle Root | 18145120 | 315 days ago | IN | 0.00051022 ETH | 0.00027991 | ||||
Unstake | 18144567 | 315 days ago | IN | 0 ETH | 0.00098073 | ||||
Unstake | 18139067 | 316 days ago | IN | 0 ETH | 0.00118314 | ||||
Set Merkle Root | 18138028 | 316 days ago | IN | 0.0007961 ETH | 0.0003474 | ||||
Stake | 18136935 | 316 days ago | IN | 0 ETH | 0.00214158 | ||||
Stake | 18124251 | 318 days ago | IN | 0 ETH | 0.00070868 | ||||
Set Merkle Root | 18123776 | 318 days ago | IN | 0.00040898 ETH | 0.00029254 | ||||
Unstake | 18118779 | 319 days ago | IN | 0 ETH | 0.00092105 | ||||
Set Merkle Root | 18116644 | 319 days ago | IN | 0.00065644 ETH | 0.00033338 | ||||
Unstake | 18115968 | 319 days ago | IN | 0 ETH | 0.00176998 | ||||
Stake | 18114898 | 319 days ago | IN | 0 ETH | 0.00225892 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18159098 | 313 days ago | 0.00301534 ETH | ||||
18158334 | 313 days ago | 0.00064223 ETH | ||||
18153240 | 314 days ago | 0.00362876 ETH | ||||
18144567 | 315 days ago | 0.00015751 ETH | ||||
18139067 | 316 days ago | 0.00037519 ETH | ||||
18118779 | 319 days ago | 0.00011587 ETH | ||||
18115968 | 319 days ago | 0.00003286 ETH | ||||
18099494 | 321 days ago | 0.00158486 ETH | ||||
18087913 | 323 days ago | 0.00125596 ETH | ||||
18082864 | 324 days ago | 0.00002919 ETH | ||||
18078977 | 324 days ago | 0.01170977 ETH | ||||
18074693 | 325 days ago | 0.00017114 ETH | ||||
18072050 | 325 days ago | 0.00004337 ETH | ||||
18071082 | 325 days ago | 0.0004712 ETH | ||||
18069697 | 325 days ago | 0.00001234 ETH | ||||
18062856 | 326 days ago | 0.00003879 ETH | ||||
18062312 | 326 days ago | 0.00089415 ETH | ||||
18062060 | 327 days ago | 0.00001098 ETH | ||||
18061447 | 327 days ago | 0.00002064 ETH | ||||
18061367 | 327 days ago | 0.00169618 ETH | ||||
18059625 | 327 days ago | 0.00000583 ETH | ||||
18059398 | 327 days ago | 0.00015617 ETH | ||||
18059171 | 327 days ago | 0.00018657 ETH | ||||
18056733 | 327 days ago | 0.00034559 ETH | ||||
18053494 | 328 days ago | 0.00004234 ETH |
Loading...
Loading
Contract Name:
XccelerateStaking
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.21; import "./MerkleProof.sol"; import "./IERC20.sol"; contract XccelerateStaking { IERC20 public XLRT = IERC20(0x8a3C710E41cD95799C535f22DBaE371D7C858651); // merkle related vars address public owner; address public rootFeeder; bytes32 public merkleRoot; mapping(bytes32 => bool) private _leafClaimed; // staking vars uint256 public totalStaked; mapping(address => uint256) public staked; // all events emmited for the merkle tree event MerkleUpdated(); event Staked(address staker, uint256 amount, uint256 timestamp); event Unstaked(address staker, uint256 amount, uint256 timestamp); event Claimed(address staker, uint256 amount, uint256 timestamp); modifier onlyOwner() { require(owner == msg.sender, "Only the owner can call this function."); _; } constructor() { owner = msg.sender; } /** *@dev owner can set the rootFeeder address */ function setRootFeeder(address feeder) external onlyOwner { rootFeeder = feeder; } /** *@dev rootFeeder can update the root (automatic process done once every day) */ function setMerkleRoot(bytes32 _merkleRoot) external payable { require(msg.sender == rootFeeder, "Only the rootFeeder can call this function."); merkleRoot = _merkleRoot; emit MerkleUpdated(); } function getLeaf(uint256 cumulativeReward) external view returns(bytes32) { bytes32 leaf = keccak256(abi.encodePacked(msg.sender, cumulativeReward)); return leaf; } function verifyMerkleProof(bytes32[] calldata proof, address elementToProve, uint256 cumulativeReward) public view returns (bool) { bytes32 leaf = keccak256(abi.encodePacked(elementToProve, cumulativeReward)); bool verified = MerkleProof.verify(proof, merkleRoot, leaf); return verified; } function _claim(uint256 cumulativeReward, bytes32[] memory proof) private { bytes32 leaf = keccak256(abi.encodePacked(msg.sender, cumulativeReward)); require(!_leafClaimed[leaf], "You have already claimed your rewards, wait until the next merkleRoot set."); require(MerkleProof.verify(proof, merkleRoot, leaf), "Invalid proof"); _leafClaimed[leaf] = true; payable(msg.sender).transfer(cumulativeReward); } /** *@dev Adds positing to staking pool */ function stake(uint256 amount) external { require(amount > 0, "Cannot stake 0"); XLRT.transferFrom(msg.sender, address(this), amount); staked[msg.sender] += amount; totalStaked += amount; emit Staked(msg.sender, amount, block.timestamp); } /** *@dev Unstakes the amount wished to be unstaked along with claiming cumulative reward */ function unstake(uint256 amount, uint256 cumulativeReward, bytes32[] memory proof) external { require(amount > 0, "Cannot unstake 0"); require(staked[msg.sender] >= amount, "unstake amount exceeds staked balance"); staked[msg.sender] -= amount; totalStaked -= amount; XLRT.transfer(msg.sender, amount); if (cumulativeReward > 0) _claim(cumulativeReward, proof); emit Unstaked(msg.sender, amount, block.timestamp); } /** *@dev Claiming can be done once every 24h after Merkle Root has been called */ function claim(uint256 cumulativeReward, bytes32[] memory proof) external { _claim(cumulativeReward, proof); emit Claimed(msg.sender, cumulativeReward, block.timestamp); } /** *@dev Emergency withdraw eth in contract in case something is wrong with the contract */ function emergencyWithdraw() external onlyOwner{ payable(msg.sender).transfer(address(this).balance); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.21; interface IERC20 { function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function transfer(address recipient, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.2) (utils/cryptography/MerkleProof.sol) pragma solidity 0.8.21; /** * @dev These functions deal with verification of Merkle Tree proofs. * * The tree and the proofs can be generated using our * https://github.com/OpenZeppelin/merkle-tree[JavaScript library]. * You will find a quickstart guide in the readme. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. * OpenZeppelin's JavaScript library generates merkle trees that are safe * against this attack out of the box. */ library MerkleProof { /** *@dev The multiproof provided is not valid. */ error MerkleProofInvalidMultiproof(); /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Calldata version of {verify} */ function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false * respectively. * * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 proofLen = proof.length; uint256 totalHashes = proofFlags.length; // Check proof validity. if (leavesLen + proofLen - 1 != totalHashes) { revert MerkleProofInvalidMultiproof(); } // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { if (proofPos != proofLen) { revert MerkleProofInvalidMultiproof(); } unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 proofLen = proof.length; uint256 totalHashes = proofFlags.length; // Check proof validity. if (leavesLen + proofLen - 1 != totalHashes) { revert MerkleProofInvalidMultiproof(); } // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { if (proofPos != proofLen) { revert MerkleProofInvalidMultiproof(); } unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[],"name":"MerkleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"XLRT","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"cumulativeReward","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cumulativeReward","type":"uint256"}],"name":"getLeaf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rootFeeder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"feeder","type":"address"}],"name":"setRootFeeder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"staked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"cumulativeReward","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"address","name":"elementToProve","type":"address"},{"internalType":"uint256","name":"cumulativeReward","type":"uint256"}],"name":"verifyMerkleProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052738a3c710e41cd95799c535f22dbae371d7c8586515f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015610062575f80fd5b503360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611878806100b05f395ff3fe6080604052600436106100dc575f3560e01c80638da5cb5b1161007e578063bef68bd011610058578063bef68bd0146102a8578063daef7f44146102d0578063db2e21bc146102fa578063feee10b914610310576100dc565b80638da5cb5b1461021a57806398807d8414610244578063a694fc3a14610280576100dc565b8063654f0b65116100ba578063654f0b651461016e5780637669a2a8146101985780637cb64759146101d4578063817b1cd2146101f0576100dc565b806322e91248146100e05780632eb4a7ab1461011c5780632f52ebb714610146575b5f80fd5b3480156100eb575f80fd5b5061010660048036038101906101019190610d12565b610338565b6040516101139190610d55565b60405180910390f35b348015610127575f80fd5b5061013061036e565b60405161013d9190610d55565b60405180910390f35b348015610151575f80fd5b5061016c60048036038101906101679190610ee8565b610374565b005b348015610179575f80fd5b506101826103bd565b60405161018f9190610f81565b60405180910390f35b3480156101a3575f80fd5b506101be60048036038101906101b9919061101d565b6103e2565b6040516101cb91906110a8565b60405180910390f35b6101ee60048036038101906101e991906110c1565b61046c565b005b3480156101fb575f80fd5b50610204610531565b60405161021191906110fb565b60405180910390f35b348015610225575f80fd5b5061022e610537565b60405161023b9190610f81565b60405180910390f35b34801561024f575f80fd5b5061026a60048036038101906102659190611114565b61055c565b60405161027791906110fb565b60405180910390f35b34801561028b575f80fd5b506102a660048036038101906102a19190610d12565b610571565b005b3480156102b3575f80fd5b506102ce60048036038101906102c9919061113f565b6106f9565b005b3480156102db575f80fd5b506102e4610914565b6040516102f19190611206565b60405180910390f35b348015610305575f80fd5b5061030e610937565b005b34801561031b575f80fd5b5061033660048036038101906103319190611114565b610a0c565b005b5f80338360405160200161034d929190611284565b60405160208183030381529060405280519060200120905080915050919050565b60035481565b61037e8282610ade565b7f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a3383426040516103b1939291906112af565b60405180910390a15050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8083836040516020016103f7929190611284565b6040516020818303038152906040528051906020012090505f61045d8787808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505060035484610c26565b90508092505050949350505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f290611364565b60405180910390fd5b806003819055507f829513fdf44d42b8695042dc434f271d5097c3aa0dd99b72577f83b908852f8d60405160405180910390a150565b60055481565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6006602052805f5260405f205f915090505481565b5f81116105b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105aa906113cc565b60405180910390fd5b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161060f939291906113ea565b6020604051808303815f875af115801561062b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064f9190611449565b508060065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461069c91906114a1565b925050819055508060055f8282546106b491906114a1565b925050819055507f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee903382426040516106ee939291906112af565b60405180910390a150565b5f831161073b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107329061151e565b60405180910390fd5b8260065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156107bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b2906115ac565b60405180910390fd5b8260065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461080791906115ca565b925050819055508260055f82825461081f91906115ca565b925050819055505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b81526004016108809291906115fd565b6020604051808303815f875af115801561089c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c09190611449565b505f8211156108d4576108d38282610ade565b5b7f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e338442604051610907939291906112af565b60405180910390a1505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd90611694565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610a09573d5f803e3d5ffd5b50565b3373ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290611694565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f3383604051602001610af2929190611284565b60405160208183030381529060405280519060200120905060045f8281526020019081526020015f205f9054906101000a900460ff1615610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f90611748565b60405180910390fd5b610b758260035483610c26565b610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab906117b0565b60405180910390fd5b600160045f8381526020019081526020015f205f6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015610c20573d5f803e3d5ffd5b50505050565b5f82610c328584610c3c565b1490509392505050565b5f808290505f5b8451811015610c8557610c7082868381518110610c6357610c626117ce565b5b6020026020010151610c90565b91508080610c7d906117fb565b915050610c43565b508091505092915050565b5f818310610ca757610ca28284610cba565b610cb2565b610cb18383610cba565b5b905092915050565b5f825f528160205260405f20905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610cf181610cdf565b8114610cfb575f80fd5b50565b5f81359050610d0c81610ce8565b92915050565b5f60208284031215610d2757610d26610cd7565b5b5f610d3484828501610cfe565b91505092915050565b5f819050919050565b610d4f81610d3d565b82525050565b5f602082019050610d685f830184610d46565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610db882610d72565b810181811067ffffffffffffffff82111715610dd757610dd6610d82565b5b80604052505050565b5f610de9610cce565b9050610df58282610daf565b919050565b5f67ffffffffffffffff821115610e1457610e13610d82565b5b602082029050602081019050919050565b5f80fd5b610e3281610d3d565b8114610e3c575f80fd5b50565b5f81359050610e4d81610e29565b92915050565b5f610e65610e6084610dfa565b610de0565b90508083825260208201905060208402830185811115610e8857610e87610e25565b5b835b81811015610eb15780610e9d8882610e3f565b845260208401935050602081019050610e8a565b5050509392505050565b5f82601f830112610ecf57610ece610d6e565b5b8135610edf848260208601610e53565b91505092915050565b5f8060408385031215610efe57610efd610cd7565b5b5f610f0b85828601610cfe565b925050602083013567ffffffffffffffff811115610f2c57610f2b610cdb565b5b610f3885828601610ebb565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f6b82610f42565b9050919050565b610f7b81610f61565b82525050565b5f602082019050610f945f830184610f72565b92915050565b5f80fd5b5f8083601f840112610fb357610fb2610d6e565b5b8235905067ffffffffffffffff811115610fd057610fcf610f9a565b5b602083019150836020820283011115610fec57610feb610e25565b5b9250929050565b610ffc81610f61565b8114611006575f80fd5b50565b5f8135905061101781610ff3565b92915050565b5f805f806060858703121561103557611034610cd7565b5b5f85013567ffffffffffffffff81111561105257611051610cdb565b5b61105e87828801610f9e565b9450945050602061107187828801611009565b925050604061108287828801610cfe565b91505092959194509250565b5f8115159050919050565b6110a28161108e565b82525050565b5f6020820190506110bb5f830184611099565b92915050565b5f602082840312156110d6576110d5610cd7565b5b5f6110e384828501610e3f565b91505092915050565b6110f581610cdf565b82525050565b5f60208201905061110e5f8301846110ec565b92915050565b5f6020828403121561112957611128610cd7565b5b5f61113684828501611009565b91505092915050565b5f805f6060848603121561115657611155610cd7565b5b5f61116386828701610cfe565b935050602061117486828701610cfe565b925050604084013567ffffffffffffffff81111561119557611194610cdb565b5b6111a186828701610ebb565b9150509250925092565b5f819050919050565b5f6111ce6111c96111c484610f42565b6111ab565b610f42565b9050919050565b5f6111df826111b4565b9050919050565b5f6111f0826111d5565b9050919050565b611200816111e6565b82525050565b5f6020820190506112195f8301846111f7565b92915050565b5f8160601b9050919050565b5f6112358261121f565b9050919050565b5f6112468261122b565b9050919050565b61125e61125982610f61565b61123c565b82525050565b5f819050919050565b61127e61127982610cdf565b611264565b82525050565b5f61128f828561124d565b60148201915061129f828461126d565b6020820191508190509392505050565b5f6060820190506112c25f830186610f72565b6112cf60208301856110ec565b6112dc60408301846110ec565b949350505050565b5f82825260208201905092915050565b7f4f6e6c792074686520726f6f744665656465722063616e2063616c6c207468695f8201527f732066756e6374696f6e2e000000000000000000000000000000000000000000602082015250565b5f61134e602b836112e4565b9150611359826112f4565b604082019050919050565b5f6020820190508181035f83015261137b81611342565b9050919050565b7f43616e6e6f74207374616b6520300000000000000000000000000000000000005f82015250565b5f6113b6600e836112e4565b91506113c182611382565b602082019050919050565b5f6020820190508181035f8301526113e3816113aa565b9050919050565b5f6060820190506113fd5f830186610f72565b61140a6020830185610f72565b61141760408301846110ec565b949350505050565b6114288161108e565b8114611432575f80fd5b50565b5f815190506114438161141f565b92915050565b5f6020828403121561145e5761145d610cd7565b5b5f61146b84828501611435565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6114ab82610cdf565b91506114b683610cdf565b92508282019050808211156114ce576114cd611474565b5b92915050565b7f43616e6e6f7420756e7374616b652030000000000000000000000000000000005f82015250565b5f6115086010836112e4565b9150611513826114d4565b602082019050919050565b5f6020820190508181035f830152611535816114fc565b9050919050565b7f756e7374616b6520616d6f756e742065786365656473207374616b65642062615f8201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b5f6115966025836112e4565b91506115a18261153c565b604082019050919050565b5f6020820190508181035f8301526115c38161158a565b9050919050565b5f6115d482610cdf565b91506115df83610cdf565b92508282039050818111156115f7576115f6611474565b5b92915050565b5f6040820190506116105f830185610f72565b61161d60208301846110ec565b9392505050565b7f4f6e6c7920746865206f776e65722063616e2063616c6c20746869732066756e5f8201527f6374696f6e2e0000000000000000000000000000000000000000000000000000602082015250565b5f61167e6026836112e4565b915061168982611624565b604082019050919050565b5f6020820190508181035f8301526116ab81611672565b9050919050565b7f596f75206861766520616c726561647920636c61696d656420796f75722072655f8201527f77617264732c207761697420756e74696c20746865206e657874206d65726b6c60208201527f65526f6f74207365742e00000000000000000000000000000000000000000000604082015250565b5f611732604a836112e4565b915061173d826116b2565b606082019050919050565b5f6020820190508181035f83015261175f81611726565b9050919050565b7f496e76616c69642070726f6f66000000000000000000000000000000000000005f82015250565b5f61179a600d836112e4565b91506117a582611766565b602082019050919050565b5f6020820190508181035f8301526117c78161178e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61180582610cdf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361183757611836611474565b5b60018201905091905056fea264697066735822122055845dfc8cf079c5d513b6dfcdaab6a86378e9b20f2bdb82b392f334fa20bfd664736f6c63430008150033
Deployed Bytecode
0x6080604052600436106100dc575f3560e01c80638da5cb5b1161007e578063bef68bd011610058578063bef68bd0146102a8578063daef7f44146102d0578063db2e21bc146102fa578063feee10b914610310576100dc565b80638da5cb5b1461021a57806398807d8414610244578063a694fc3a14610280576100dc565b8063654f0b65116100ba578063654f0b651461016e5780637669a2a8146101985780637cb64759146101d4578063817b1cd2146101f0576100dc565b806322e91248146100e05780632eb4a7ab1461011c5780632f52ebb714610146575b5f80fd5b3480156100eb575f80fd5b5061010660048036038101906101019190610d12565b610338565b6040516101139190610d55565b60405180910390f35b348015610127575f80fd5b5061013061036e565b60405161013d9190610d55565b60405180910390f35b348015610151575f80fd5b5061016c60048036038101906101679190610ee8565b610374565b005b348015610179575f80fd5b506101826103bd565b60405161018f9190610f81565b60405180910390f35b3480156101a3575f80fd5b506101be60048036038101906101b9919061101d565b6103e2565b6040516101cb91906110a8565b60405180910390f35b6101ee60048036038101906101e991906110c1565b61046c565b005b3480156101fb575f80fd5b50610204610531565b60405161021191906110fb565b60405180910390f35b348015610225575f80fd5b5061022e610537565b60405161023b9190610f81565b60405180910390f35b34801561024f575f80fd5b5061026a60048036038101906102659190611114565b61055c565b60405161027791906110fb565b60405180910390f35b34801561028b575f80fd5b506102a660048036038101906102a19190610d12565b610571565b005b3480156102b3575f80fd5b506102ce60048036038101906102c9919061113f565b6106f9565b005b3480156102db575f80fd5b506102e4610914565b6040516102f19190611206565b60405180910390f35b348015610305575f80fd5b5061030e610937565b005b34801561031b575f80fd5b5061033660048036038101906103319190611114565b610a0c565b005b5f80338360405160200161034d929190611284565b60405160208183030381529060405280519060200120905080915050919050565b60035481565b61037e8282610ade565b7f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a3383426040516103b1939291906112af565b60405180910390a15050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8083836040516020016103f7929190611284565b6040516020818303038152906040528051906020012090505f61045d8787808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505060035484610c26565b90508092505050949350505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f290611364565b60405180910390fd5b806003819055507f829513fdf44d42b8695042dc434f271d5097c3aa0dd99b72577f83b908852f8d60405160405180910390a150565b60055481565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6006602052805f5260405f205f915090505481565b5f81116105b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105aa906113cc565b60405180910390fd5b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161060f939291906113ea565b6020604051808303815f875af115801561062b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064f9190611449565b508060065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461069c91906114a1565b925050819055508060055f8282546106b491906114a1565b925050819055507f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee903382426040516106ee939291906112af565b60405180910390a150565b5f831161073b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107329061151e565b60405180910390fd5b8260065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156107bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b2906115ac565b60405180910390fd5b8260065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461080791906115ca565b925050819055508260055f82825461081f91906115ca565b925050819055505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b81526004016108809291906115fd565b6020604051808303815f875af115801561089c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c09190611449565b505f8211156108d4576108d38282610ade565b5b7f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e338442604051610907939291906112af565b60405180910390a1505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd90611694565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610a09573d5f803e3d5ffd5b50565b3373ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290611694565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f3383604051602001610af2929190611284565b60405160208183030381529060405280519060200120905060045f8281526020019081526020015f205f9054906101000a900460ff1615610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f90611748565b60405180910390fd5b610b758260035483610c26565b610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab906117b0565b60405180910390fd5b600160045f8381526020019081526020015f205f6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015610c20573d5f803e3d5ffd5b50505050565b5f82610c328584610c3c565b1490509392505050565b5f808290505f5b8451811015610c8557610c7082868381518110610c6357610c626117ce565b5b6020026020010151610c90565b91508080610c7d906117fb565b915050610c43565b508091505092915050565b5f818310610ca757610ca28284610cba565b610cb2565b610cb18383610cba565b5b905092915050565b5f825f528160205260405f20905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610cf181610cdf565b8114610cfb575f80fd5b50565b5f81359050610d0c81610ce8565b92915050565b5f60208284031215610d2757610d26610cd7565b5b5f610d3484828501610cfe565b91505092915050565b5f819050919050565b610d4f81610d3d565b82525050565b5f602082019050610d685f830184610d46565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610db882610d72565b810181811067ffffffffffffffff82111715610dd757610dd6610d82565b5b80604052505050565b5f610de9610cce565b9050610df58282610daf565b919050565b5f67ffffffffffffffff821115610e1457610e13610d82565b5b602082029050602081019050919050565b5f80fd5b610e3281610d3d565b8114610e3c575f80fd5b50565b5f81359050610e4d81610e29565b92915050565b5f610e65610e6084610dfa565b610de0565b90508083825260208201905060208402830185811115610e8857610e87610e25565b5b835b81811015610eb15780610e9d8882610e3f565b845260208401935050602081019050610e8a565b5050509392505050565b5f82601f830112610ecf57610ece610d6e565b5b8135610edf848260208601610e53565b91505092915050565b5f8060408385031215610efe57610efd610cd7565b5b5f610f0b85828601610cfe565b925050602083013567ffffffffffffffff811115610f2c57610f2b610cdb565b5b610f3885828601610ebb565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f6b82610f42565b9050919050565b610f7b81610f61565b82525050565b5f602082019050610f945f830184610f72565b92915050565b5f80fd5b5f8083601f840112610fb357610fb2610d6e565b5b8235905067ffffffffffffffff811115610fd057610fcf610f9a565b5b602083019150836020820283011115610fec57610feb610e25565b5b9250929050565b610ffc81610f61565b8114611006575f80fd5b50565b5f8135905061101781610ff3565b92915050565b5f805f806060858703121561103557611034610cd7565b5b5f85013567ffffffffffffffff81111561105257611051610cdb565b5b61105e87828801610f9e565b9450945050602061107187828801611009565b925050604061108287828801610cfe565b91505092959194509250565b5f8115159050919050565b6110a28161108e565b82525050565b5f6020820190506110bb5f830184611099565b92915050565b5f602082840312156110d6576110d5610cd7565b5b5f6110e384828501610e3f565b91505092915050565b6110f581610cdf565b82525050565b5f60208201905061110e5f8301846110ec565b92915050565b5f6020828403121561112957611128610cd7565b5b5f61113684828501611009565b91505092915050565b5f805f6060848603121561115657611155610cd7565b5b5f61116386828701610cfe565b935050602061117486828701610cfe565b925050604084013567ffffffffffffffff81111561119557611194610cdb565b5b6111a186828701610ebb565b9150509250925092565b5f819050919050565b5f6111ce6111c96111c484610f42565b6111ab565b610f42565b9050919050565b5f6111df826111b4565b9050919050565b5f6111f0826111d5565b9050919050565b611200816111e6565b82525050565b5f6020820190506112195f8301846111f7565b92915050565b5f8160601b9050919050565b5f6112358261121f565b9050919050565b5f6112468261122b565b9050919050565b61125e61125982610f61565b61123c565b82525050565b5f819050919050565b61127e61127982610cdf565b611264565b82525050565b5f61128f828561124d565b60148201915061129f828461126d565b6020820191508190509392505050565b5f6060820190506112c25f830186610f72565b6112cf60208301856110ec565b6112dc60408301846110ec565b949350505050565b5f82825260208201905092915050565b7f4f6e6c792074686520726f6f744665656465722063616e2063616c6c207468695f8201527f732066756e6374696f6e2e000000000000000000000000000000000000000000602082015250565b5f61134e602b836112e4565b9150611359826112f4565b604082019050919050565b5f6020820190508181035f83015261137b81611342565b9050919050565b7f43616e6e6f74207374616b6520300000000000000000000000000000000000005f82015250565b5f6113b6600e836112e4565b91506113c182611382565b602082019050919050565b5f6020820190508181035f8301526113e3816113aa565b9050919050565b5f6060820190506113fd5f830186610f72565b61140a6020830185610f72565b61141760408301846110ec565b949350505050565b6114288161108e565b8114611432575f80fd5b50565b5f815190506114438161141f565b92915050565b5f6020828403121561145e5761145d610cd7565b5b5f61146b84828501611435565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6114ab82610cdf565b91506114b683610cdf565b92508282019050808211156114ce576114cd611474565b5b92915050565b7f43616e6e6f7420756e7374616b652030000000000000000000000000000000005f82015250565b5f6115086010836112e4565b9150611513826114d4565b602082019050919050565b5f6020820190508181035f830152611535816114fc565b9050919050565b7f756e7374616b6520616d6f756e742065786365656473207374616b65642062615f8201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b5f6115966025836112e4565b91506115a18261153c565b604082019050919050565b5f6020820190508181035f8301526115c38161158a565b9050919050565b5f6115d482610cdf565b91506115df83610cdf565b92508282039050818111156115f7576115f6611474565b5b92915050565b5f6040820190506116105f830185610f72565b61161d60208301846110ec565b9392505050565b7f4f6e6c7920746865206f776e65722063616e2063616c6c20746869732066756e5f8201527f6374696f6e2e0000000000000000000000000000000000000000000000000000602082015250565b5f61167e6026836112e4565b915061168982611624565b604082019050919050565b5f6020820190508181035f8301526116ab81611672565b9050919050565b7f596f75206861766520616c726561647920636c61696d656420796f75722072655f8201527f77617264732c207761697420756e74696c20746865206e657874206d65726b6c60208201527f65526f6f74207365742e00000000000000000000000000000000000000000000604082015250565b5f611732604a836112e4565b915061173d826116b2565b606082019050919050565b5f6020820190508181035f83015261175f81611726565b9050919050565b7f496e76616c69642070726f6f66000000000000000000000000000000000000005f82015250565b5f61179a600d836112e4565b91506117a582611766565b602082019050919050565b5f6020820190508181035f8301526117c78161178e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61180582610cdf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361183757611836611474565b5b60018201905091905056fea264697066735822122055845dfc8cf079c5d513b6dfcdaab6a86378e9b20f2bdb82b392f334fa20bfd664736f6c63430008150033
Deployed Bytecode Sourcemap
115:3888:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1495:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;316:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3572:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;284:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1690:331;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1259:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;423:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;257:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;456:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2553:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2963:502;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;149:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3883:117;;;;;;;;;;;;;:::i;:::-;;1055:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1495:187;1560:7;1580:12;1622:10;1634:16;1605:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1595:57;;;;;;1580:72;;1670:4;1663:11;;;1495:187;;;:::o;316:25::-;;;;:::o;3572:194::-;3657:31;3664:16;3682:5;3657:6;:31::i;:::-;3704:54;3712:10;3724:16;3742:15;3704:54;;;;;;;;:::i;:::-;;;;;;;;3572:194;;:::o;284:25::-;;;;;;;;;;;;;:::o;1690:331::-;1814:4;1831:12;1873:14;1889:16;1856:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1846:61;;;;;;1831:76;;1918:13;1934:43;1953:5;;1934:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1960:10;;1972:4;1934:18;:43::i;:::-;1918:59;;2005:8;1998:15;;;;1690:331;;;;;;:::o;1259:228::-;1353:10;;;;;;;;;;;1339:24;;:10;:24;;;1331:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;1435:11;1422:10;:24;;;;1464:15;;;;;;;;;;1259:228;:::o;423:26::-;;;;:::o;257:20::-;;;;;;;;;;;;;:::o;456:41::-;;;;;;;;;;;;;;;;;:::o;2553:293::-;2621:1;2612:6;:10;2604:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;2654:4;;;;;;;;;;:17;;;2672:10;2692:4;2699:6;2654:52;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2739:6;2717;:18;2724:10;2717:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;2771:6;2756:11;;:21;;;;;;;:::i;:::-;;;;;;;;2795:43;2802:10;2814:6;2822:15;2795:43;;;;;;;;:::i;:::-;;;;;;;;2553:293;:::o;2963:502::-;3083:1;3074:6;:10;3066:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;3146:6;3124;:18;3131:10;3124:18;;;;;;;;;;;;;;;;:28;;3116:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;3229:6;3207;:18;3214:10;3207:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;3261:6;3246:11;;:21;;;;;;;:::i;:::-;;;;;;;;3278:4;;;;;;;;;;:13;;;3292:10;3304:6;3278:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3347:1;3328:16;:20;3324:70;;;3363:31;3370:16;3388:5;3363:6;:31::i;:::-;3324:70;3412:45;3421:10;3433:6;3441:15;3412:45;;;;;;;;:::i;:::-;;;;;;;;2963:502;;;:::o;149:71::-;;;;;;;;;;;;:::o;3883:117::-;845:10;836:19;;:5;;;;;;;;;;;:19;;;828:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;3949:10:::1;3941:28;;:51;3970:21;3941:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3883:117::o:0;1055:96::-;845:10;836:19;;:5;;;;;;;;;;;:19;;;828:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;1137:6:::1;1124:10;;:19;;;;;;;;;;;;;;;;;;1055:96:::0;:::o;2029:457::-;2114:12;2156:10;2168:16;2139:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2129:57;;;;;;2114:72;;2206:12;:18;2219:4;2206:18;;;;;;;;;;;;;;;;;;;;;2205:19;2197:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;2322:43;2341:5;2348:10;;2360:4;2322:18;:43::i;:::-;2314:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2417:4;2396:12;:18;2409:4;2396:18;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;2440:10;2432:28;;:46;2461:16;2432:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2103:383;2029:457;;:::o;1295:156:1:-;1386:4;1439;1410:25;1423:5;1430:4;1410:12;:25::i;:::-;:33;1403:40;;1295:156;;;;;:::o;2014:296::-;2097:7;2117:20;2140:4;2117:27;;2160:9;2155:118;2179:5;:12;2175:1;:16;2155:118;;;2228:33;2238:12;2252:5;2258:1;2252:8;;;;;;;;:::i;:::-;;;;;;;;2228:9;:33::i;:::-;2213:48;;2193:3;;;;;:::i;:::-;;;;2155:118;;;;2290:12;2283:19;;;2014:296;;;;:::o;9368:149::-;9431:7;9462:1;9458;:5;:51;;9489:20;9504:1;9507;9489:14;:20::i;:::-;9458:51;;;9466:20;9481:1;9484;9466:14;:20::i;:::-;9458:51;9451:58;;9368:149;;;;:::o;9525:268::-;9593:13;9700:1;9694:4;9687:15;9729:1;9723:4;9716:15;9770:4;9764;9754:21;9745:30;;9525:268;;;;:::o;7:75:3:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:77::-;1062:7;1091:5;1080:16;;1025:77;;;:::o;1108:118::-;1195:24;1213:5;1195:24;:::i;:::-;1190:3;1183:37;1108:118;;:::o;1232:222::-;1325:4;1363:2;1352:9;1348:18;1340:26;;1376:71;1444:1;1433:9;1429:17;1420:6;1376:71;:::i;:::-;1232:222;;;;:::o;1460:117::-;1569:1;1566;1559:12;1583:102;1624:6;1675:2;1671:7;1666:2;1659:5;1655:14;1651:28;1641:38;;1583:102;;;:::o;1691:180::-;1739:77;1736:1;1729:88;1836:4;1833:1;1826:15;1860:4;1857:1;1850:15;1877:281;1960:27;1982:4;1960:27;:::i;:::-;1952:6;1948:40;2090:6;2078:10;2075:22;2054:18;2042:10;2039:34;2036:62;2033:88;;;2101:18;;:::i;:::-;2033:88;2141:10;2137:2;2130:22;1920:238;1877:281;;:::o;2164:129::-;2198:6;2225:20;;:::i;:::-;2215:30;;2254:33;2282:4;2274:6;2254:33;:::i;:::-;2164:129;;;:::o;2299:311::-;2376:4;2466:18;2458:6;2455:30;2452:56;;;2488:18;;:::i;:::-;2452:56;2538:4;2530:6;2526:17;2518:25;;2598:4;2592;2588:15;2580:23;;2299:311;;;:::o;2616:117::-;2725:1;2722;2715:12;2739:122;2812:24;2830:5;2812:24;:::i;:::-;2805:5;2802:35;2792:63;;2851:1;2848;2841:12;2792:63;2739:122;:::o;2867:139::-;2913:5;2951:6;2938:20;2929:29;;2967:33;2994:5;2967:33;:::i;:::-;2867:139;;;;:::o;3029:710::-;3125:5;3150:81;3166:64;3223:6;3166:64;:::i;:::-;3150:81;:::i;:::-;3141:90;;3251:5;3280:6;3273:5;3266:21;3314:4;3307:5;3303:16;3296:23;;3367:4;3359:6;3355:17;3347:6;3343:30;3396:3;3388:6;3385:15;3382:122;;;3415:79;;:::i;:::-;3382:122;3530:6;3513:220;3547:6;3542:3;3539:15;3513:220;;;3622:3;3651:37;3684:3;3672:10;3651:37;:::i;:::-;3646:3;3639:50;3718:4;3713:3;3709:14;3702:21;;3589:144;3573:4;3568:3;3564:14;3557:21;;3513:220;;;3517:21;3131:608;;3029:710;;;;;:::o;3762:370::-;3833:5;3882:3;3875:4;3867:6;3863:17;3859:27;3849:122;;3890:79;;:::i;:::-;3849:122;4007:6;3994:20;4032:94;4122:3;4114:6;4107:4;4099:6;4095:17;4032:94;:::i;:::-;4023:103;;3839:293;3762:370;;;;:::o;4138:684::-;4231:6;4239;4288:2;4276:9;4267:7;4263:23;4259:32;4256:119;;;4294:79;;:::i;:::-;4256:119;4414:1;4439:53;4484:7;4475:6;4464:9;4460:22;4439:53;:::i;:::-;4429:63;;4385:117;4569:2;4558:9;4554:18;4541:32;4600:18;4592:6;4589:30;4586:117;;;4622:79;;:::i;:::-;4586:117;4727:78;4797:7;4788:6;4777:9;4773:22;4727:78;:::i;:::-;4717:88;;4512:303;4138:684;;;;;:::o;4828:126::-;4865:7;4905:42;4898:5;4894:54;4883:65;;4828:126;;;:::o;4960:96::-;4997:7;5026:24;5044:5;5026:24;:::i;:::-;5015:35;;4960:96;;;:::o;5062:118::-;5149:24;5167:5;5149:24;:::i;:::-;5144:3;5137:37;5062:118;;:::o;5186:222::-;5279:4;5317:2;5306:9;5302:18;5294:26;;5330:71;5398:1;5387:9;5383:17;5374:6;5330:71;:::i;:::-;5186:222;;;;:::o;5414:117::-;5523:1;5520;5513:12;5554:568;5627:8;5637:6;5687:3;5680:4;5672:6;5668:17;5664:27;5654:122;;5695:79;;:::i;:::-;5654:122;5808:6;5795:20;5785:30;;5838:18;5830:6;5827:30;5824:117;;;5860:79;;:::i;:::-;5824:117;5974:4;5966:6;5962:17;5950:29;;6028:3;6020:4;6012:6;6008:17;5998:8;5994:32;5991:41;5988:128;;;6035:79;;:::i;:::-;5988:128;5554:568;;;;;:::o;6128:122::-;6201:24;6219:5;6201:24;:::i;:::-;6194:5;6191:35;6181:63;;6240:1;6237;6230:12;6181:63;6128:122;:::o;6256:139::-;6302:5;6340:6;6327:20;6318:29;;6356:33;6383:5;6356:33;:::i;:::-;6256:139;;;;:::o;6401:849::-;6505:6;6513;6521;6529;6578:2;6566:9;6557:7;6553:23;6549:32;6546:119;;;6584:79;;:::i;:::-;6546:119;6732:1;6721:9;6717:17;6704:31;6762:18;6754:6;6751:30;6748:117;;;6784:79;;:::i;:::-;6748:117;6897:80;6969:7;6960:6;6949:9;6945:22;6897:80;:::i;:::-;6879:98;;;;6675:312;7026:2;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6997:118;7154:2;7180:53;7225:7;7216:6;7205:9;7201:22;7180:53;:::i;:::-;7170:63;;7125:118;6401:849;;;;;;;:::o;7256:90::-;7290:7;7333:5;7326:13;7319:21;7308:32;;7256:90;;;:::o;7352:109::-;7433:21;7448:5;7433:21;:::i;:::-;7428:3;7421:34;7352:109;;:::o;7467:210::-;7554:4;7592:2;7581:9;7577:18;7569:26;;7605:65;7667:1;7656:9;7652:17;7643:6;7605:65;:::i;:::-;7467:210;;;;:::o;7683:329::-;7742:6;7791:2;7779:9;7770:7;7766:23;7762:32;7759:119;;;7797:79;;:::i;:::-;7759:119;7917:1;7942:53;7987:7;7978:6;7967:9;7963:22;7942:53;:::i;:::-;7932:63;;7888:117;7683:329;;;;:::o;8018:118::-;8105:24;8123:5;8105:24;:::i;:::-;8100:3;8093:37;8018:118;;:::o;8142:222::-;8235:4;8273:2;8262:9;8258:18;8250:26;;8286:71;8354:1;8343:9;8339:17;8330:6;8286:71;:::i;:::-;8142:222;;;;:::o;8370:329::-;8429:6;8478:2;8466:9;8457:7;8453:23;8449:32;8446:119;;;8484:79;;:::i;:::-;8446:119;8604:1;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8575:117;8370:329;;;;:::o;8705:829::-;8807:6;8815;8823;8872:2;8860:9;8851:7;8847:23;8843:32;8840:119;;;8878:79;;:::i;:::-;8840:119;8998:1;9023:53;9068:7;9059:6;9048:9;9044:22;9023:53;:::i;:::-;9013:63;;8969:117;9125:2;9151:53;9196:7;9187:6;9176:9;9172:22;9151:53;:::i;:::-;9141:63;;9096:118;9281:2;9270:9;9266:18;9253:32;9312:18;9304:6;9301:30;9298:117;;;9334:79;;:::i;:::-;9298:117;9439:78;9509:7;9500:6;9489:9;9485:22;9439:78;:::i;:::-;9429:88;;9224:303;8705:829;;;;;:::o;9540:60::-;9568:3;9589:5;9582:12;;9540:60;;;:::o;9606:142::-;9656:9;9689:53;9707:34;9716:24;9734:5;9716:24;:::i;:::-;9707:34;:::i;:::-;9689:53;:::i;:::-;9676:66;;9606:142;;;:::o;9754:126::-;9804:9;9837:37;9868:5;9837:37;:::i;:::-;9824:50;;9754:126;;;:::o;9886:139::-;9949:9;9982:37;10013:5;9982:37;:::i;:::-;9969:50;;9886:139;;;:::o;10031:157::-;10131:50;10175:5;10131:50;:::i;:::-;10126:3;10119:63;10031:157;;:::o;10194:248::-;10300:4;10338:2;10327:9;10323:18;10315:26;;10351:84;10432:1;10421:9;10417:17;10408:6;10351:84;:::i;:::-;10194:248;;;;:::o;10448:94::-;10481:8;10529:5;10525:2;10521:14;10500:35;;10448:94;;;:::o;10548:::-;10587:7;10616:20;10630:5;10616:20;:::i;:::-;10605:31;;10548:94;;;:::o;10648:100::-;10687:7;10716:26;10736:5;10716:26;:::i;:::-;10705:37;;10648:100;;;:::o;10754:157::-;10859:45;10879:24;10897:5;10879:24;:::i;:::-;10859:45;:::i;:::-;10854:3;10847:58;10754:157;;:::o;10917:79::-;10956:7;10985:5;10974:16;;10917:79;;;:::o;11002:157::-;11107:45;11127:24;11145:5;11127:24;:::i;:::-;11107:45;:::i;:::-;11102:3;11095:58;11002:157;;:::o;11165:397::-;11305:3;11320:75;11391:3;11382:6;11320:75;:::i;:::-;11420:2;11415:3;11411:12;11404:19;;11433:75;11504:3;11495:6;11433:75;:::i;:::-;11533:2;11528:3;11524:12;11517:19;;11553:3;11546:10;;11165:397;;;;;:::o;11568:442::-;11717:4;11755:2;11744:9;11740:18;11732:26;;11768:71;11836:1;11825:9;11821:17;11812:6;11768:71;:::i;:::-;11849:72;11917:2;11906:9;11902:18;11893:6;11849:72;:::i;:::-;11931;11999:2;11988:9;11984:18;11975:6;11931:72;:::i;:::-;11568:442;;;;;;:::o;12016:169::-;12100:11;12134:6;12129:3;12122:19;12174:4;12169:3;12165:14;12150:29;;12016:169;;;;:::o;12191:230::-;12331:34;12327:1;12319:6;12315:14;12308:58;12400:13;12395:2;12387:6;12383:15;12376:38;12191:230;:::o;12427:366::-;12569:3;12590:67;12654:2;12649:3;12590:67;:::i;:::-;12583:74;;12666:93;12755:3;12666:93;:::i;:::-;12784:2;12779:3;12775:12;12768:19;;12427:366;;;:::o;12799:419::-;12965:4;13003:2;12992:9;12988:18;12980:26;;13052:9;13046:4;13042:20;13038:1;13027:9;13023:17;13016:47;13080:131;13206:4;13080:131;:::i;:::-;13072:139;;12799:419;;;:::o;13224:164::-;13364:16;13360:1;13352:6;13348:14;13341:40;13224:164;:::o;13394:366::-;13536:3;13557:67;13621:2;13616:3;13557:67;:::i;:::-;13550:74;;13633:93;13722:3;13633:93;:::i;:::-;13751:2;13746:3;13742:12;13735:19;;13394:366;;;:::o;13766:419::-;13932:4;13970:2;13959:9;13955:18;13947:26;;14019:9;14013:4;14009:20;14005:1;13994:9;13990:17;13983:47;14047:131;14173:4;14047:131;:::i;:::-;14039:139;;13766:419;;;:::o;14191:442::-;14340:4;14378:2;14367:9;14363:18;14355:26;;14391:71;14459:1;14448:9;14444:17;14435:6;14391:71;:::i;:::-;14472:72;14540:2;14529:9;14525:18;14516:6;14472:72;:::i;:::-;14554;14622:2;14611:9;14607:18;14598:6;14554:72;:::i;:::-;14191:442;;;;;;:::o;14639:116::-;14709:21;14724:5;14709:21;:::i;:::-;14702:5;14699:32;14689:60;;14745:1;14742;14735:12;14689:60;14639:116;:::o;14761:137::-;14815:5;14846:6;14840:13;14831:22;;14862:30;14886:5;14862:30;:::i;:::-;14761:137;;;;:::o;14904:345::-;14971:6;15020:2;15008:9;14999:7;14995:23;14991:32;14988:119;;;15026:79;;:::i;:::-;14988:119;15146:1;15171:61;15224:7;15215:6;15204:9;15200:22;15171:61;:::i;:::-;15161:71;;15117:125;14904:345;;;;:::o;15255:180::-;15303:77;15300:1;15293:88;15400:4;15397:1;15390:15;15424:4;15421:1;15414:15;15441:191;15481:3;15500:20;15518:1;15500:20;:::i;:::-;15495:25;;15534:20;15552:1;15534:20;:::i;:::-;15529:25;;15577:1;15574;15570:9;15563:16;;15598:3;15595:1;15592:10;15589:36;;;15605:18;;:::i;:::-;15589:36;15441:191;;;;:::o;15638:166::-;15778:18;15774:1;15766:6;15762:14;15755:42;15638:166;:::o;15810:366::-;15952:3;15973:67;16037:2;16032:3;15973:67;:::i;:::-;15966:74;;16049:93;16138:3;16049:93;:::i;:::-;16167:2;16162:3;16158:12;16151:19;;15810:366;;;:::o;16182:419::-;16348:4;16386:2;16375:9;16371:18;16363:26;;16435:9;16429:4;16425:20;16421:1;16410:9;16406:17;16399:47;16463:131;16589:4;16463:131;:::i;:::-;16455:139;;16182:419;;;:::o;16607:224::-;16747:34;16743:1;16735:6;16731:14;16724:58;16816:7;16811:2;16803:6;16799:15;16792:32;16607:224;:::o;16837:366::-;16979:3;17000:67;17064:2;17059:3;17000:67;:::i;:::-;16993:74;;17076:93;17165:3;17076:93;:::i;:::-;17194:2;17189:3;17185:12;17178:19;;16837:366;;;:::o;17209:419::-;17375:4;17413:2;17402:9;17398:18;17390:26;;17462:9;17456:4;17452:20;17448:1;17437:9;17433:17;17426:47;17490:131;17616:4;17490:131;:::i;:::-;17482:139;;17209:419;;;:::o;17634:194::-;17674:4;17694:20;17712:1;17694:20;:::i;:::-;17689:25;;17728:20;17746:1;17728:20;:::i;:::-;17723:25;;17772:1;17769;17765:9;17757:17;;17796:1;17790:4;17787:11;17784:37;;;17801:18;;:::i;:::-;17784:37;17634:194;;;;:::o;17834:332::-;17955:4;17993:2;17982:9;17978:18;17970:26;;18006:71;18074:1;18063:9;18059:17;18050:6;18006:71;:::i;:::-;18087:72;18155:2;18144:9;18140:18;18131:6;18087:72;:::i;:::-;17834:332;;;;;:::o;18172:225::-;18312:34;18308:1;18300:6;18296:14;18289:58;18381:8;18376:2;18368:6;18364:15;18357:33;18172:225;:::o;18403:366::-;18545:3;18566:67;18630:2;18625:3;18566:67;:::i;:::-;18559:74;;18642:93;18731:3;18642:93;:::i;:::-;18760:2;18755:3;18751:12;18744:19;;18403:366;;;:::o;18775:419::-;18941:4;18979:2;18968:9;18964:18;18956:26;;19028:9;19022:4;19018:20;19014:1;19003:9;18999:17;18992:47;19056:131;19182:4;19056:131;:::i;:::-;19048:139;;18775:419;;;:::o;19200:298::-;19340:34;19336:1;19328:6;19324:14;19317:58;19409:34;19404:2;19396:6;19392:15;19385:59;19478:12;19473:2;19465:6;19461:15;19454:37;19200:298;:::o;19504:366::-;19646:3;19667:67;19731:2;19726:3;19667:67;:::i;:::-;19660:74;;19743:93;19832:3;19743:93;:::i;:::-;19861:2;19856:3;19852:12;19845:19;;19504:366;;;:::o;19876:419::-;20042:4;20080:2;20069:9;20065:18;20057:26;;20129:9;20123:4;20119:20;20115:1;20104:9;20100:17;20093:47;20157:131;20283:4;20157:131;:::i;:::-;20149:139;;19876:419;;;:::o;20301:163::-;20441:15;20437:1;20429:6;20425:14;20418:39;20301:163;:::o;20470:366::-;20612:3;20633:67;20697:2;20692:3;20633:67;:::i;:::-;20626:74;;20709:93;20798:3;20709:93;:::i;:::-;20827:2;20822:3;20818:12;20811:19;;20470:366;;;:::o;20842:419::-;21008:4;21046:2;21035:9;21031:18;21023:26;;21095:9;21089:4;21085:20;21081:1;21070:9;21066:17;21059:47;21123:131;21249:4;21123:131;:::i;:::-;21115:139;;20842:419;;;:::o;21267:180::-;21315:77;21312:1;21305:88;21412:4;21409:1;21402:15;21436:4;21433:1;21426:15;21453:233;21492:3;21515:24;21533:5;21515:24;:::i;:::-;21506:33;;21561:66;21554:5;21551:77;21548:103;;21631:18;;:::i;:::-;21548:103;21678:1;21671:5;21667:13;21660:20;;21453:233;;;:::o
Swarm Source
ipfs://55845dfc8cf079c5d513b6dfcdaab6a86378e9b20f2bdb82b392f334fa20bfd6
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.