Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14630019 | 865 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
CurveLPOracle
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-22 */ // SPDX-License-Identifier: AGPL-3.0-or-later /// CurveLPOracle.sol // Copyright (C) 2021 Dai Foundation // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. pragma solidity 0.8.13; interface CurvePoolLike { function coins(uint256) external view returns (address); function get_virtual_price() external view returns (uint256); function lp_token() external view returns (address); function remove_liquidity(uint256, uint256[2] calldata) external returns (uint256); } interface OracleLike { function read() external view returns (uint256); } contract CurveLPOracle { // --- Auth --- mapping (address => uint256) public wards; // Addresses with admin authority function rely(address _usr) external auth { wards[_usr] = 1; emit Rely(_usr); } // Add admin function deny(address _usr) external auth { wards[_usr] = 0; emit Deny(_usr); } // Remove admin modifier auth { require(wards[msg.sender] == 1, "CurveLPOracle/not-authorized"); _; } address public immutable src; // Price source, do not remove as needed for OmegaPoker // stopped, hop, and zph are packed into single slot to reduce SLOADs; // this outweighs the added bitmasking overhead. uint8 public stopped; // Stop/start ability to update uint16 public hop = 1 hours; // Minimum time in between price updates uint232 public zph; // Time of last price update plus hop // --- Whitelisting --- mapping (address => uint256) public bud; modifier toll { require(bud[msg.sender] == 1, "CurveLPOracle/not-whitelisted"); _; } struct Feed { uint128 val; // Price uint128 has; // Is price valid } Feed internal cur; // Current price (storage slot 0x3) Feed internal nxt; // Queued price (storage slot 0x4) address[] public orbs; // array of price feeds for pool assets, same order as in the pool address public immutable pool; // Address of underlying Curve pool bytes32 public immutable wat; // Label of token whose price is being tracked uint256 public immutable ncoins; // Number of tokens in underlying Curve pool bool public immutable nonreentrant; // Whether to prevent pool reentrancy // --- Events --- event Rely(address indexed usr); event Deny(address indexed usr); event Stop(); event Start(); event Step(uint256 hop); event Link(uint256 id, address orb); event Value(uint128 curVal, uint128 nxtVal); event Kiss(address a); event Diss(address a); // --- Init --- constructor(address _ward, address _pool, bytes32 _wat, address[] memory _orbs, bool _nonreentrant) { require(_pool != address(0), "CurveLPOracle/invalid-pool"); uint256 _ncoins = _orbs.length; pool = _pool; src = CurvePoolLike(_pool).lp_token(); wat = _wat; ncoins = _ncoins; nonreentrant = _nonreentrant; for (uint256 i = 0; i < _ncoins;) { require(_orbs[i] != address(0), "CurveLPOracle/invalid-orb"); orbs.push(_orbs[i]); unchecked { i++; } } require(_ward != address(0), "CurveLPOracle/ward-0"); wards[_ward] = 1; emit Rely(_ward); } function stop() external auth { stopped = 1; delete cur; delete nxt; zph = 0; emit Stop(); } function start() external auth { stopped = 0; emit Start(); } function step(uint16 _hop) external auth { uint16 old = hop; hop = _hop; if (zph > old) { // if false, zph will be unset and no update is needed zph = (zph - old) + _hop; } emit Step(_hop); } function link(uint256 _id, address _orb) external auth { require(_orb != address(0), "CurveLPOracle/invalid-orb"); require(_id < ncoins, "CurveLPOracle/invalid-orb-index"); orbs[_id] = _orb; emit Link(_id, _orb); } // For consistency with other oracles function zzz() external view returns (uint256) { if (zph == 0) return 0; // backwards compatibility return zph - hop; } function pass() external view returns (bool) { return block.timestamp >= zph; } // Marked payable to save gas. DO *NOT* send ETH to poke(), it will be lost permanently. function poke() external payable { // Ensure a single SLOAD while avoiding solc's excessive bitmasking bureaucracy. uint256 hop_; { // Block-scoping these variables saves some gas. uint256 stopped_; uint256 zph_; assembly { let slot1 := sload(1) stopped_ := and(slot1, 0xff ) hop_ := and(shr(8, slot1), 0xffff) zph_ := shr(24, slot1) } // When stopped, values are set to zero and should remain such; thus, disallow updating in that case. require(stopped_ == 0, "CurveLPOracle/is-stopped"); // Equivalent to requiring that pass() returns true; logic repeated to save gas. require(block.timestamp >= zph_, "CurveLPOracle/not-passed"); } uint256 val = type(uint256).max; for (uint256 i = 0; i < ncoins;) { uint256 price = OracleLike(orbs[i]).read(); if (price < val) val = price; unchecked { i++; } } val = val * CurvePoolLike(pool).get_virtual_price() / 10**18; require(val != 0, "CurveLPOracle/zero-price"); require(val <= type(uint128).max, "CurveLPOracle/price-overflow"); Feed memory cur_ = nxt; cur = cur_; nxt = Feed(uint128(val), 1); // The below is equivalent to: // zph = block.timestamp + hop // but ensures no extra SLOADs are performed. // // Even if _hop = (2^16 - 1), the maximum possible value, add(timestamp(), _hop) // will not overflow (even a 232 bit value) for a very long time. // // Also, we know stopped was zero, so there is no need to account for it explicitly here. assembly { sstore( 1, add( shl(24, add(timestamp(), hop_)), // zph value starts 24 bits in shl(8, hop_) // hop value starts 8 bits in ) ) } // This will revert if called during execution of a state-modifying pool function. if (nonreentrant) { uint256[2] calldata amounts; CurvePoolLike(pool).remove_liquidity(0, amounts); } emit Value(cur_.val, uint128(val)); // Safe to terminate immediately since no postfix modifiers are applied. assembly { stop() } } function peek() external view toll returns (bytes32,bool) { return (bytes32(uint256(cur.val)), cur.has == 1); } function peep() external view toll returns (bytes32,bool) { return (bytes32(uint256(nxt.val)), nxt.has == 1); } function read() external view toll returns (bytes32) { require(cur.has == 1, "CurveLPOracle/no-current-value"); return (bytes32(uint256(cur.val))); } function kiss(address _a) external auth { require(_a != address(0), "CurveLPOracle/no-contract-0"); bud[_a] = 1; emit Kiss(_a); } function kiss(address[] calldata _a) external auth { for(uint256 i = 0; i < _a.length;) { require(_a[i] != address(0), "CurveLPOracle/no-contract-0"); bud[_a[i]] = 1; emit Kiss(_a[i]); unchecked { i++; } } } function diss(address _a) external auth { bud[_a] = 0; emit Diss(_a); } function diss(address[] calldata _a) external auth { for(uint256 i = 0; i < _a.length;) { bud[_a[i]] = 0; emit Diss(_a[i]); unchecked { i++; } } } // Needed for Curve pool reentrancy checks, since remove_liquidity with call the caller to do an ETH transfer. // Technically we receive 0 Ether, but using a payable function saves a little gas. receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_ward","type":"address"},{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bytes32","name":"_wat","type":"bytes32"},{"internalType":"address[]","name":"_orbs","type":"address[]"},{"internalType":"bool","name":"_nonreentrant","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"Diss","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"Kiss","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"orb","type":"address"}],"name":"Link","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"anonymous":false,"inputs":[],"name":"Start","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"hop","type":"uint256"}],"name":"Step","type":"event"},{"anonymous":false,"inputs":[],"name":"Stop","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"curVal","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"nxtVal","type":"uint128"}],"name":"Value","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bud","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"}],"name":"diss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"diss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hop","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"}],"name":"kiss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"kiss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_orb","type":"address"}],"name":"link","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ncoins","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonreentrant","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"orbs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pass","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peek","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peep","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poke","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"read","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"src","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_hop","type":"uint16"}],"name":"step","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopped","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wat","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zph","outputs":[{"internalType":"uint232","name":"","type":"uint232"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zzz","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101206040526001805462ffff001916620e10001790553480156200002357600080fd5b50604051620022c2380380620022c2833981016040819052620000469162000306565b6001600160a01b038416620000a25760405162461bcd60e51b815260206004820152601a60248201527f43757276654c504f7261636c652f696e76616c69642d706f6f6c00000000000060448201526064015b60405180910390fd5b81516001600160a01b03851660a081905260408051634163183360e11b815290516382c63066916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200011591906200041d565b6001600160a01b031660805260c084905260e08190528115156101005260005b818110156200021b5760006001600160a01b03168482815181106200015e576200015e62000442565b60200260200101516001600160a01b031603620001be5760405162461bcd60e51b815260206004820152601960248201527f43757276654c504f7261636c652f696e76616c69642d6f726200000000000000604482015260640162000099565b6005848281518110620001d557620001d562000442565b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b03909316929092179091550162000135565b506001600160a01b038616620002745760405162461bcd60e51b815260206004820152601460248201527f43757276654c504f7261636c652f776172642d30000000000000000000000000604482015260640162000099565b6001600160a01b03861660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250505050505062000458565b80516001600160a01b0381168114620002da57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b80518015158114620002da57600080fd5b600080600080600060a086880312156200031f57600080fd5b6200032a86620002c2565b945060206200033b818801620002c2565b6040880151606089015191965094506001600160401b03808211156200036057600080fd5b818901915089601f8301126200037557600080fd5b8151818111156200038a576200038a620002df565b8060051b604051601f19603f83011681018181108582111715620003b257620003b2620002df565b60405291825284820192508381018501918c831115620003d157600080fd5b938501935b82851015620003fa57620003ea85620002c2565b84529385019392850192620003d6565b8097505050505050506200041160808701620002f5565b90509295509295909350565b6000602082840312156200043057600080fd5b6200043b82620002c2565b9392505050565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e05161010051611e02620004c0600039600081816102950152610ba001526000818161030d015281816108ab01526112ea0152600061036f015260008181610214015281816109a10152610c03015260006102d90152611e026000f3fe6080604052600436106101b05760003560e01c806365af7909116100ec578063a7a1ed721161008a578063be9a655511610064578063be9a6555146105a5578063bf353dbb146105ba578063e38e2cfb146105e7578063f29c29c41461060757600080fd5b8063a7a1ed72146104c9578063a9c52a3914610507578063b0b8579b1461057257600080fd5b806375f12b21116100c657806375f12b211461044857806397783a11146104745780639c52a7f114610494578063a4dff0a2146104b457600080fd5b806365af7909146103e857806365c4ce7a1461040857806365fae35e1461042857600080fd5b80632e7dc6af116101595780634ca29923116101335780634ca299231461035d5780634fce7a2a1461039157806357de26a4146103be57806359e02dd7146103d357600080fd5b80632e7dc6af146102c7578063371f8dae146102fb57806346d4577d1461033d57600080fd5b8063181783581161018a578063181783581461025b5780631b25b65f1461026357806328cfb3de1461028357600080fd5b806307da68f5146101bc5780630e5a6c70146101d357806316f0115b1461020257600080fd5b366101b757005b600080fd5b3480156101c857600080fd5b506101d1610627565b005b3480156101df57600080fd5b506101e86106ea565b604080519283529015156020830152015b60405180910390f35b34801561020e57600080fd5b506102367f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f9565b6101d161079b565b34801561026f57600080fd5b506101d161027e366004611b1b565b610cd2565b34801561028f57600080fd5b506102b77f000000000000000000000000000000000000000000000000000000000000000081565b60405190151581526020016101f9565b3480156102d357600080fd5b506102367f000000000000000000000000000000000000000000000000000000000000000081565b34801561030757600080fd5b5061032f7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101f9565b34801561034957600080fd5b506101d1610358366004611b1b565b610ecd565b34801561036957600080fd5b5061032f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039d57600080fd5b5061032f6103ac366004611bb9565b60026020526000908152604090205481565b3480156103ca57600080fd5b5061032f61101d565b3480156103df57600080fd5b506101e8611141565b3480156103f457600080fd5b506101d1610403366004611bdb565b6111f2565b34801561041457600080fd5b506101d1610423366004611bb9565b611411565b34801561043457600080fd5b506101d1610443366004611bb9565b6114ea565b34801561045457600080fd5b506001546104629060ff1681565b60405160ff90911681526020016101f9565b34801561048057600080fd5b5061023661048f366004611c07565b6115b5565b3480156104a057600080fd5b506101d16104af366004611bb9565b6115ec565b3480156104c057600080fd5b5061032f6116b6565b3480156104d557600080fd5b50600154630100000090047cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff164210156102b7565b34801561051357600080fd5b5060015461054490630100000090047cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681565b6040517cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911681526020016101f9565b34801561057e57600080fd5b5060015461059290610100900461ffff1681565b60405161ffff90911681526020016101f9565b3480156105b157600080fd5b506101d161174e565b3480156105c657600080fd5b5061032f6105d5366004611bb9565b60006020819052908152604090205481565b3480156105f357600080fd5b506101d1610602366004611c20565b61181a565b34801561061357600080fd5b506101d1610622366004611bb9565b6119cb565b336000908152602081905260409020546001146106a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a65640000000060448201526064015b60405180910390fd5b6001805460006003819055600481905562ffff0090911682179091556040517fbedf0f4abfe86d4ffad593d9607fe70e83ea706033d44d24b3b6283cf3fc4f6b9190a1565b336000908152600260205260408120548190600114610765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f43757276654c504f7261636c652f6e6f742d77686974656c6973746564000000604482015260640161069c565b50506004546fffffffffffffffffffffffffffffffff808216917001000000000000000000000000000000009004166001149091565b600154600881901c61ffff169060ff81169060181c8115610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43757276654c504f7261636c652f69732d73746f707065640000000000000000604482015260640161069c565b80421015610882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43757276654c504f7261636c652f6e6f742d7061737365640000000000000000604482015260640161069c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905060005b7f0000000000000000000000000000000000000000000000000000000000000000811015610995576000600582815481106108e6576108e6611c44565b60009182526020918290200154604080517f57de26a4000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926357de26a4926004808401938290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611c73565b90508281101561098c578092505b506001016108a9565b50670de0b6b3a76400007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e9190611c73565b610a389083611cbb565b610a429190611cf8565b905080600003610aae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43757276654c504f7261636c652f7a65726f2d70726963650000000000000000604482015260640161069c565b6fffffffffffffffffffffffffffffffff811115610b28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f70726963652d6f766572666c6f7700000000604482015260640161069c565b604080518082018252600480546fffffffffffffffffffffffffffffffff8082168085527001000000000000000000000000000000009283900482166020808701829052908402909117600355855180870190965290861680865260019590910185905217905542840160181b600885901b019091557f000000000000000000000000000000000000000000000000000000000000000015610c81576040517f5b36389c000000000000000000000000000000000000000000000000000000008152369073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635b36389c90610c3b906000908590600401611d33565b6020604051808303816000875af1158015610c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7e9190611c73565b50505b8051604080516fffffffffffffffffffffffffffffffff928316815291841660208301527f80a5d0081d7e9a7bdb15ef207c6e0772f0f56d24317693206c0e47408f2d0b73910160405180910390a1005b33600090815260208190526040902054600114610d4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b60005b81811015610ec8576000838383818110610d6a57610d6a611c44565b9050602002016020810190610d7f9190611bb9565b73ffffffffffffffffffffffffffffffffffffffff1603610dfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43757276654c504f7261636c652f6e6f2d636f6e74726163742d300000000000604482015260640161069c565b600160026000858585818110610e1457610e14611c44565b9050602002016020810190610e299190611bb9565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020557f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb244838383818110610e8357610e83611c44565b9050602002016020810190610e989190611bb9565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1600101610d4e565b505050565b33600090815260208190526040902054600114610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b60005b81811015610ec857600060026000858585818110610f6957610f69611c44565b9050602002016020810190610f7e9190611bb9565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020557f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c838383818110610fd857610fd8611c44565b9050602002016020810190610fed9190611bb9565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1600101610f49565b33600090815260026020526040812054600114611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f43757276654c504f7261636c652f6e6f742d77686974656c6973746564000000604482015260640161069c565b60035470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16600114611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f43757276654c504f7261636c652f6e6f2d63757272656e742d76616c75650000604482015260640161069c565b506003546fffffffffffffffffffffffffffffffff1690565b3360009081526002602052604081205481906001146111bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f43757276654c504f7261636c652f6e6f742d77686974656c6973746564000000604482015260640161069c565b50506003546fffffffffffffffffffffffffffffffff808216917001000000000000000000000000000000009004166001149091565b3360009081526020819052604090205460011461126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b73ffffffffffffffffffffffffffffffffffffffff81166112e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f43757276654c504f7261636c652f696e76616c69642d6f726200000000000000604482015260640161069c565b7f00000000000000000000000000000000000000000000000000000000000000008210611371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f43757276654c504f7261636c652f696e76616c69642d6f72622d696e64657800604482015260640161069c565b806005838154811061138557611385611c44565b60009182526020918290200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff93841617905560408051858152928416918301919091527f57e1d18531e0ed6c4f60bf6039e5719aa115e43e43847525125856433a69f7a791015b60405180910390a15050565b3360009081526020819052604090205460011461148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602090815260408083209290925590519182527f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c91015b60405180910390a150565b33600090815260208190526040902054600114611563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b73ffffffffffffffffffffffffffffffffffffffff811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b600581815481106115c557600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b33600090815260208190526040902054600114611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b600154600090630100000090047cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681036116ee5750600090565b60015461172a90610100810461ffff1690630100000090047cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611d4d565b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16905090565b336000908152602081905260409020546001146117c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1b55ba3aa851a46be3b365aee5b5c140edd620d578922f3e8466d2cbd96f954b90600090a1565b33600090815260208190526040902054600114611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b6001805461ffff8381166101009081027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff8416179384905590910416907cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6301000000909104168110156119975760015461ffff8381169161193a91841690630100000090047cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611d4d565b6119449190611d8b565b600160036101000a8154817cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055505b60405161ffff831681527fd5cae49d972f01d170fb2d3409c5f318698639863c0403e59e4af06e0ce9281790602001611405565b33600090815260208190526040902054600114611a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b73ffffffffffffffffffffffffffffffffffffffff8116611ac1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43757276654c504f7261636c652f6e6f2d636f6e74726163742d300000000000604482015260640161069c565b73ffffffffffffffffffffffffffffffffffffffff81166000818152600260209081526040918290206001905590519182527f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb24491016114df565b60008060208385031215611b2e57600080fd5b823567ffffffffffffffff80821115611b4657600080fd5b818501915085601f830112611b5a57600080fd5b813581811115611b6957600080fd5b8660208260051b8501011115611b7e57600080fd5b60209290920196919550909350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611bb457600080fd5b919050565b600060208284031215611bcb57600080fd5b611bd482611b90565b9392505050565b60008060408385031215611bee57600080fd5b82359150611bfe60208401611b90565b90509250929050565b600060208284031215611c1957600080fd5b5035919050565b600060208284031215611c3257600080fd5b813561ffff81168114611bd457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611c8557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611cf357611cf3611c8c565b500290565b600082611d2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b828152606081016040836020840137600081529392505050565b60007cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83811690831681811015611d8357611d83611c8c565b039392505050565b60007cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316818516808303821115611dc357611dc3611c8c565b0194935050505056fea2646970667358221220cf0c377d5c9e0fc22485a18c9fa17a980625bb0be9fda7b12a448427517ccd6664736f6c634300080d0033000000000000000000000000be8e3e3618f7474f8cb1d074a26affef007e98fb000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f67022435256563145544853544554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000064de91f5a373cd4c28de3600cb34c7c6ce410c85000000000000000000000000911d7a8f87282c4111f621e2d100aa751bab1260
Deployed Bytecode
0x6080604052600436106101b05760003560e01c806365af7909116100ec578063a7a1ed721161008a578063be9a655511610064578063be9a6555146105a5578063bf353dbb146105ba578063e38e2cfb146105e7578063f29c29c41461060757600080fd5b8063a7a1ed72146104c9578063a9c52a3914610507578063b0b8579b1461057257600080fd5b806375f12b21116100c657806375f12b211461044857806397783a11146104745780639c52a7f114610494578063a4dff0a2146104b457600080fd5b806365af7909146103e857806365c4ce7a1461040857806365fae35e1461042857600080fd5b80632e7dc6af116101595780634ca29923116101335780634ca299231461035d5780634fce7a2a1461039157806357de26a4146103be57806359e02dd7146103d357600080fd5b80632e7dc6af146102c7578063371f8dae146102fb57806346d4577d1461033d57600080fd5b8063181783581161018a578063181783581461025b5780631b25b65f1461026357806328cfb3de1461028357600080fd5b806307da68f5146101bc5780630e5a6c70146101d357806316f0115b1461020257600080fd5b366101b757005b600080fd5b3480156101c857600080fd5b506101d1610627565b005b3480156101df57600080fd5b506101e86106ea565b604080519283529015156020830152015b60405180910390f35b34801561020e57600080fd5b506102367f000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f6702281565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f9565b6101d161079b565b34801561026f57600080fd5b506101d161027e366004611b1b565b610cd2565b34801561028f57600080fd5b506102b77f000000000000000000000000000000000000000000000000000000000000000181565b60405190151581526020016101f9565b3480156102d357600080fd5b506102367f00000000000000000000000006325440d014e39736583c165c2963ba99faf14e81565b34801561030757600080fd5b5061032f7f000000000000000000000000000000000000000000000000000000000000000281565b6040519081526020016101f9565b34801561034957600080fd5b506101d1610358366004611b1b565b610ecd565b34801561036957600080fd5b5061032f7f435256563145544853544554480000000000000000000000000000000000000081565b34801561039d57600080fd5b5061032f6103ac366004611bb9565b60026020526000908152604090205481565b3480156103ca57600080fd5b5061032f61101d565b3480156103df57600080fd5b506101e8611141565b3480156103f457600080fd5b506101d1610403366004611bdb565b6111f2565b34801561041457600080fd5b506101d1610423366004611bb9565b611411565b34801561043457600080fd5b506101d1610443366004611bb9565b6114ea565b34801561045457600080fd5b506001546104629060ff1681565b60405160ff90911681526020016101f9565b34801561048057600080fd5b5061023661048f366004611c07565b6115b5565b3480156104a057600080fd5b506101d16104af366004611bb9565b6115ec565b3480156104c057600080fd5b5061032f6116b6565b3480156104d557600080fd5b50600154630100000090047cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff164210156102b7565b34801561051357600080fd5b5060015461054490630100000090047cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681565b6040517cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911681526020016101f9565b34801561057e57600080fd5b5060015461059290610100900461ffff1681565b60405161ffff90911681526020016101f9565b3480156105b157600080fd5b506101d161174e565b3480156105c657600080fd5b5061032f6105d5366004611bb9565b60006020819052908152604090205481565b3480156105f357600080fd5b506101d1610602366004611c20565b61181a565b34801561061357600080fd5b506101d1610622366004611bb9565b6119cb565b336000908152602081905260409020546001146106a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a65640000000060448201526064015b60405180910390fd5b6001805460006003819055600481905562ffff0090911682179091556040517fbedf0f4abfe86d4ffad593d9607fe70e83ea706033d44d24b3b6283cf3fc4f6b9190a1565b336000908152600260205260408120548190600114610765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f43757276654c504f7261636c652f6e6f742d77686974656c6973746564000000604482015260640161069c565b50506004546fffffffffffffffffffffffffffffffff808216917001000000000000000000000000000000009004166001149091565b600154600881901c61ffff169060ff81169060181c8115610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43757276654c504f7261636c652f69732d73746f707065640000000000000000604482015260640161069c565b80421015610882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43757276654c504f7261636c652f6e6f742d7061737365640000000000000000604482015260640161069c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905060005b7f0000000000000000000000000000000000000000000000000000000000000002811015610995576000600582815481106108e6576108e6611c44565b60009182526020918290200154604080517f57de26a4000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926357de26a4926004808401938290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611c73565b90508281101561098c578092505b506001016108a9565b50670de0b6b3a76400007f000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f6702273ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e9190611c73565b610a389083611cbb565b610a429190611cf8565b905080600003610aae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43757276654c504f7261636c652f7a65726f2d70726963650000000000000000604482015260640161069c565b6fffffffffffffffffffffffffffffffff811115610b28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f70726963652d6f766572666c6f7700000000604482015260640161069c565b604080518082018252600480546fffffffffffffffffffffffffffffffff8082168085527001000000000000000000000000000000009283900482166020808701829052908402909117600355855180870190965290861680865260019590910185905217905542840160181b600885901b019091557f000000000000000000000000000000000000000000000000000000000000000115610c81576040517f5b36389c000000000000000000000000000000000000000000000000000000008152369073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f670221690635b36389c90610c3b906000908590600401611d33565b6020604051808303816000875af1158015610c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7e9190611c73565b50505b8051604080516fffffffffffffffffffffffffffffffff928316815291841660208301527f80a5d0081d7e9a7bdb15ef207c6e0772f0f56d24317693206c0e47408f2d0b73910160405180910390a1005b33600090815260208190526040902054600114610d4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b60005b81811015610ec8576000838383818110610d6a57610d6a611c44565b9050602002016020810190610d7f9190611bb9565b73ffffffffffffffffffffffffffffffffffffffff1603610dfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43757276654c504f7261636c652f6e6f2d636f6e74726163742d300000000000604482015260640161069c565b600160026000858585818110610e1457610e14611c44565b9050602002016020810190610e299190611bb9565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020557f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb244838383818110610e8357610e83611c44565b9050602002016020810190610e989190611bb9565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1600101610d4e565b505050565b33600090815260208190526040902054600114610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b60005b81811015610ec857600060026000858585818110610f6957610f69611c44565b9050602002016020810190610f7e9190611bb9565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020557f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c838383818110610fd857610fd8611c44565b9050602002016020810190610fed9190611bb9565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1600101610f49565b33600090815260026020526040812054600114611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f43757276654c504f7261636c652f6e6f742d77686974656c6973746564000000604482015260640161069c565b60035470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16600114611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f43757276654c504f7261636c652f6e6f2d63757272656e742d76616c75650000604482015260640161069c565b506003546fffffffffffffffffffffffffffffffff1690565b3360009081526002602052604081205481906001146111bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f43757276654c504f7261636c652f6e6f742d77686974656c6973746564000000604482015260640161069c565b50506003546fffffffffffffffffffffffffffffffff808216917001000000000000000000000000000000009004166001149091565b3360009081526020819052604090205460011461126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b73ffffffffffffffffffffffffffffffffffffffff81166112e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f43757276654c504f7261636c652f696e76616c69642d6f726200000000000000604482015260640161069c565b7f00000000000000000000000000000000000000000000000000000000000000028210611371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f43757276654c504f7261636c652f696e76616c69642d6f72622d696e64657800604482015260640161069c565b806005838154811061138557611385611c44565b60009182526020918290200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff93841617905560408051858152928416918301919091527f57e1d18531e0ed6c4f60bf6039e5719aa115e43e43847525125856433a69f7a791015b60405180910390a15050565b3360009081526020819052604090205460011461148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602090815260408083209290925590519182527f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c91015b60405180910390a150565b33600090815260208190526040902054600114611563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b73ffffffffffffffffffffffffffffffffffffffff811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b600581815481106115c557600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b33600090815260208190526040902054600114611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b600154600090630100000090047cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681036116ee5750600090565b60015461172a90610100810461ffff1690630100000090047cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611d4d565b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16905090565b336000908152602081905260409020546001146117c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1b55ba3aa851a46be3b365aee5b5c140edd620d578922f3e8466d2cbd96f954b90600090a1565b33600090815260208190526040902054600114611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b6001805461ffff8381166101009081027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff8416179384905590910416907cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6301000000909104168110156119975760015461ffff8381169161193a91841690630100000090047cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611d4d565b6119449190611d8b565b600160036101000a8154817cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055505b60405161ffff831681527fd5cae49d972f01d170fb2d3409c5f318698639863c0403e59e4af06e0ce9281790602001611405565b33600090815260208190526040902054600114611a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43757276654c504f7261636c652f6e6f742d617574686f72697a656400000000604482015260640161069c565b73ffffffffffffffffffffffffffffffffffffffff8116611ac1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43757276654c504f7261636c652f6e6f2d636f6e74726163742d300000000000604482015260640161069c565b73ffffffffffffffffffffffffffffffffffffffff81166000818152600260209081526040918290206001905590519182527f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb24491016114df565b60008060208385031215611b2e57600080fd5b823567ffffffffffffffff80821115611b4657600080fd5b818501915085601f830112611b5a57600080fd5b813581811115611b6957600080fd5b8660208260051b8501011115611b7e57600080fd5b60209290920196919550909350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611bb457600080fd5b919050565b600060208284031215611bcb57600080fd5b611bd482611b90565b9392505050565b60008060408385031215611bee57600080fd5b82359150611bfe60208401611b90565b90509250929050565b600060208284031215611c1957600080fd5b5035919050565b600060208284031215611c3257600080fd5b813561ffff81168114611bd457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611c8557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611cf357611cf3611c8c565b500290565b600082611d2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b828152606081016040836020840137600081529392505050565b60007cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83811690831681811015611d8357611d83611c8c565b039392505050565b60007cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316818516808303821115611dc357611dc3611c8c565b0194935050505056fea2646970667358221220cf0c377d5c9e0fc22485a18c9fa17a980625bb0be9fda7b12a448427517ccd6664736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000be8e3e3618f7474f8cb1d074a26affef007e98fb000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f67022435256563145544853544554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000064de91f5a373cd4c28de3600cb34c7c6ce410c85000000000000000000000000911d7a8f87282c4111f621e2d100aa751bab1260
-----Decoded View---------------
Arg [0] : _ward (address): 0xBE8E3e3618f7474F8cB1d074A26afFef007E98FB
Arg [1] : _pool (address): 0xDC24316b9AE028F1497c275EB9192a3Ea0f67022
Arg [2] : _wat (bytes32): 0x4352565631455448535445544800000000000000000000000000000000000000
Arg [3] : _orbs (address[]): 0x64DE91F5A373Cd4c28de3600cB34C7C6cE410C85,0x911D7A8F87282C4111f621e2D100Aa751Bab1260
Arg [4] : _nonreentrant (bool): True
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000be8e3e3618f7474f8cb1d074a26affef007e98fb
Arg [1] : 000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f67022
Arg [2] : 4352565631455448535445544800000000000000000000000000000000000000
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 00000000000000000000000064de91f5a373cd4c28de3600cb34c7c6ce410c85
Arg [7] : 000000000000000000000000911d7a8f87282c4111f621e2d100aa751bab1260
Deployed Bytecode Sourcemap
1214:7986:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4033:142;;;;;;;;;;;;;:::i;:::-;;7873:125;;;;;;;;;;;;;:::i;:::-;;;;182:25:1;;;250:14;;243:22;238:2;223:18;;216:50;155:18;7873:125:0;;;;;;;;2640:29;;;;;;;;;;;;;;;;;;453:42:1;441:55;;;423:74;;411:2;396:18;2640:29:0;277:226:1;5190:2542:0;;;:::i;8355:282::-;;;;;;;;;;-1:-1:-1;8355:282:0;;;;;:::i;:::-;;:::i;2903:37::-;;;;;;;;;;;;;;;;;;1293:14:1;;1286:22;1268:41;;1256:2;1241:18;2903:37:0;1128:187:1;1704:28:0;;;;;;;;;;;;;;;2813:31;;;;;;;;;;;;;;;;;;1466:25:1;;;1454:2;1439:18;2813:31:0;1320:177:1;8747:208:0;;;;;;;;;;-1:-1:-1;8747:208:0;;;;;:::i;:::-;;:::i;2721:28::-;;;;;;;;;;;;;;;2179:39;;;;;;;;;;-1:-1:-1;2179:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;8006:172;;;;;;;;;;;;;:::i;7740:125::-;;;;;;;;;;;;;:::i;4538:255::-;;;;;;;;;;-1:-1:-1;4538:255:0;;;;;:::i;:::-;;:::i;8645:94::-;;;;;;;;;;-1:-1:-1;8645:94:0;;;;;:::i;:::-;;:::i;1387:79::-;;;;;;;;;;-1:-1:-1;1387:79:0;;;;;:::i;:::-;;:::i;1929:22::-;;;;;;;;;;-1:-1:-1;1929:22:0;;;;;;;;;;;2507:4:1;2495:17;;;2477:36;;2465:2;2450:18;1929:22:0;2335:184:1;2542:21:0;;;;;;;;;;-1:-1:-1;2542:21:0;;;;;:::i;:::-;;:::i;1486:79::-;;;;;;;;;;-1:-1:-1;1486:79:0;;;;;:::i;:::-;;:::i;4844:143::-;;;;;;;;;;;;;:::i;4995:93::-;;;;;;;;;;-1:-1:-1;5077:3:0;;;;;;;5058:15;:22;;4995:93;;2074:18;;;;;;;;;;-1:-1:-1;2074:18:0;;;;;;;;;;;;;;2885:60:1;2873:73;;;2855:92;;2843:2;2828:18;2074::0;2709:244:1;1997:28:0;;;;;;;;;;-1:-1:-1;1997:28:0;;;;;;;;;;;;;;3132:6:1;3120:19;;;3102:38;;3090:2;3075:18;1997:28:0;2958:188:1;4183:84:0;;;;;;;;;;;;;:::i;1267:41::-;;;;;;;;;;-1:-1:-1;1267:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;4275:255;;;;;;;;;;-1:-1:-1;4275:255:0;;;;;:::i;:::-;;:::i;8186:161::-;;;;;;;;;;-1:-1:-1;8186:161:0;;;;;:::i;:::-;;:::i;4033:142::-;1627:10;1621:5;:17;;;;;;;;;;;1642:1;1621:22;1613:63;;;;;;;3630:2:1;1613:63:0;;;3612:21:1;3669:2;3649:18;;;3642:30;3708;3688:18;;;3681:58;3756:18;;1613:63:0;;;;;;;;;4084:1:::1;4074:11:::0;;:7:::1;4103:3;4096:10:::0;;;4124:3:::1;4117:10:::0;;;4138:7;;;;;;;;;4161:6:::1;::::0;::::1;::::0;4074:7;4161:6:::1;4033:142::o:0;7873:125::-;2253:10;7917:7;2249:15;;;:3;:15;;;;;;7917:7;;2268:1;2249:20;2241:62;;;;;;;3987:2:1;2241:62:0;;;3969:21:1;4026:2;4006:18;;;3999:30;4065:31;4045:18;;;4038:59;4114:18;;2241:62:0;3785:353:1;2241:62:0;-1:-1:-1;;7966:3:0::1;:7:::0;::::1;::::0;;::::1;::::0;7977;;::::1;;7966::::0;7977:12:::1;7873:125:::0;;:::o;5190:2542::-;5533:1;5527:8;5631:1;5627:13;;;5642:6;5623:26;;5585:4;5566:26;;;5684:2;5680:14;5848:13;;5840:50;;;;;;;4345:2:1;5840:50:0;;;4327:21:1;4384:2;4364:18;;;4357:30;4423:26;4403:18;;;4396:54;4467:18;;5840:50:0;4143:348:1;5840:50:0;6028:4;6009:15;:23;;6001:60;;;;;;;4698:2:1;6001:60:0;;;4680:21:1;4737:2;4717:18;;;4710:30;4776:26;4756:18;;;4749:54;4820:18;;6001:60:0;4496:348:1;6001:60:0;-1:-1:-1;6099:17:0;;-1:-1:-1;6085:11:0;6127:177;6151:6;6147:1;:10;6127:177;;;6175:13;6202:4;6207:1;6202:7;;;;;;;;:::i;:::-;;;;;;;;;;;;6191:26;;;;;;;;6202:7;;;;;6191:24;;:26;;;;;;;;;;6202:7;6191:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6175:42;;6244:3;6236:5;:11;6232:28;;;6255:5;6249:11;;6232:28;-1:-1:-1;6287:3:0;;6127:177;;;;6368:6;6340:4;6326:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6320:45;;:3;:45;:::i;:::-;:54;;;;:::i;:::-;6314:60;;6393:3;6400:1;6393:8;6385:45;;;;;;;6130:2:1;6385:45:0;;;6112:21:1;6169:2;6149:18;;;6142:30;6208:26;6188:18;;;6181:54;6252:18;;6385:45:0;5928:348:1;6385:45:0;6456:17;6449:24;;;6441:65;;;;;;;6483:2:1;6441:65:0;;;6465:21:1;6522:2;6502:18;;;6495:30;6561;6541:18;;;6534:58;6609:18;;6441:65:0;6281:352:1;6441:65:0;6517:22;;;;;;;;6536:3;6517:22;;;;;;;;;;;;;;;;;;;;;;;6550:10;;;;;;:3;:10;6577:21;;;;;;;;;;;;;;6517:22;6577:21;;;;;;;6571:27;;;7144:11;7140:22;;7136:2;7132:31;7222:1;7218:12;;;7106:194;7061:254;;;7434:12;7430:135;;;7505:48;;;;;7463:27;;7505:36;7519:4;7505:36;;;;:48;;7542:1;;7463:27;;7505:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7448:117;7430:135;7588:8;;7582:29;;;7167:34:1;7228:15;;;7210:34;;7280:15;;;7275:2;7260:18;;7253:43;7582:29:0;;7130:18:1;7582:29:0;;;;;;;7717:6;8355:282;1627:10;1621:5;:17;;;;;;;;;;;1642:1;1621:22;1613:63;;;;;;;3630:2:1;1613:63:0;;;3612:21:1;3669:2;3649:18;;;3642:30;3708;3688:18;;;3681:58;3756:18;;1613:63:0;3428:352:1;1613:63:0;8421:9:::1;8417:213;8436:13:::0;;::::1;8417:213;;;8492:1;8475:2:::0;;8478:1;8475:5;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:19;;::::0;8467:59:::1;;;::::0;::::1;::::0;;7509:2:1;8467:59:0::1;::::0;::::1;7491:21:1::0;7548:2;7528:18;;;7521:30;7587:29;7567:18;;;7560:57;7634:18;;8467:59:0::1;7307:351:1::0;8467:59:0::1;8554:1;8541:3;:10;8545:2;;8548:1;8545:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8541:10;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;8541:10:0;:14;8575:11:::1;8580:2:::0;;8583:1;8580:5;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8575:11;::::0;453:42:1;441:55;;;423:74;;411:2;396:18;8575:11:0::1;;;;;;;8613:3;;8417:213;;;;8355:282:::0;;:::o;8747:208::-;1627:10;1621:5;:17;;;;;;;;;;;1642:1;1621:22;1613:63;;;;;;;3630:2:1;1613:63:0;;;3612:21:1;3669:2;3649:18;;;3642:30;3708;3688:18;;;3681:58;3756:18;;1613:63:0;3428:352:1;1613:63:0;8813:9:::1;8809:139;8828:13:::0;;::::1;8809:139;;;8872:1;8859:3;:10;8863:2;;8866:1;8863:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8859:10;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;8859:10:0;:14;8893:11:::1;8898:2:::0;;8901:1;8898:5;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8893:11;::::0;453:42:1;441:55;;;423:74;;411:2;396:18;8893:11:0::1;;;;;;;8931:3;;8809:139;;8006:172:::0;2253:10;8050:7;2249:15;;;:3;:15;;;;;;2268:1;2249:20;2241:62;;;;;;;3987:2:1;2241:62:0;;;3969:21:1;4026:2;4006:18;;;3999:30;4065:31;4045:18;;;4038:59;4114:18;;2241:62:0;3785:353:1;2241:62:0;8078:3:::1;:7:::0;;;::::1;;;8089:1;8078:12;8070:55;;;::::0;::::1;::::0;;7865:2:1;8070:55:0::1;::::0;::::1;7847:21:1::0;7904:2;7884:18;;;7877:30;7943:32;7923:18;;;7916:60;7993:18;;8070:55:0::1;7663:354:1::0;8070:55:0::1;-1:-1:-1::0;8160:3:0::1;:7:::0;::::1;;8006:172:::0;:::o;7740:125::-;2253:10;7784:7;2249:15;;;:3;:15;;;;;;7784:7;;2268:1;2249:20;2241:62;;;;;;;3987:2:1;2241:62:0;;;3969:21:1;4026:2;4006:18;;;3999:30;4065:31;4045:18;;;4038:59;4114:18;;2241:62:0;3785:353:1;2241:62:0;-1:-1:-1;;7833:3:0::1;:7:::0;::::1;::::0;;::::1;::::0;7844;;::::1;;7833::::0;7844:12:::1;7740:125:::0;;:::o;4538:255::-;1627:10;1621:5;:17;;;;;;;;;;;1642:1;1621:22;1613:63;;;;;;;3630:2:1;1613:63:0;;;3612:21:1;3669:2;3649:18;;;3642:30;3708;3688:18;;;3681:58;3756:18;;1613:63:0;3428:352:1;1613:63:0;4612:18:::1;::::0;::::1;4604:56;;;::::0;::::1;::::0;;8224:2:1;4604:56:0::1;::::0;::::1;8206:21:1::0;8263:2;8243:18;;;8236:30;8302:27;8282:18;;;8275:55;8347:18;;4604:56:0::1;8022:349:1::0;4604:56:0::1;4685:6;4679:3;:12;4671:56;;;::::0;::::1;::::0;;8578:2:1;4671:56:0::1;::::0;::::1;8560:21:1::0;8617:2;8597:18;;;8590:30;8656:33;8636:18;;;8629:61;8707:18;;4671:56:0::1;8376:355:1::0;4671:56:0::1;4750:4;4738;4743:3;4738:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;:16:::0;;;::::1;;::::0;;::::1;;::::0;;4770:15:::1;::::0;;8910:25:1;;;8971:55;;;8951:18;;;8944:83;;;;4770:15:0::1;::::0;8883:18:1;4770:15:0::1;;;;;;;;4538:255:::0;;:::o;8645:94::-;1627:10;1621:5;:17;;;;;;;;;;;1642:1;1621:22;1613:63;;;;;;;3630:2:1;1613:63:0;;;3612:21:1;3669:2;3649:18;;;3642:30;3708;3688:18;;;3681:58;3756:18;;1613:63:0;3428:352:1;1613:63:0;8696:7:::1;::::0;::::1;8706:1;8696:7:::0;;;:3:::1;:7;::::0;;;;;;;:11;;;;8723:8;;423:74:1;;;8723:8:0::1;::::0;396:18:1;8723:8:0::1;;;;;;;;8645:94:::0;:::o;1387:79::-;1627:10;1621:5;:17;;;;;;;;;;;1642:1;1621:22;1613:63;;;;;;;3630:2:1;1613:63:0;;;3612:21:1;3669:2;3649:18;;;3642:30;3708;3688:18;;;3681:58;3756:18;;1613:63:0;3428:352:1;1613:63:0;1431:11:::1;::::0;::::1;:5;:11:::0;;;::::1;::::0;;;;;;;1445:1:::1;1431:15:::0;;1453:10;::::1;::::0;1431:5;1453:10:::1;1387:79:::0;:::o;2542:21::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2542:21:0;:::o;1486:79::-;1627:10;1621:5;:17;;;;;;;;;;;1642:1;1621:22;1613:63;;;;;;;3630:2:1;1613:63:0;;;3612:21:1;3669:2;3649:18;;;3642:30;3708;3688:18;;;3681:58;3756:18;;1613:63:0;3428:352:1;1613:63:0;1530:11:::1;::::0;::::1;1544:1;1530:11:::0;;;::::1;::::0;;;;;;;:15;;;1552:10;::::1;::::0;1544:1;1552:10:::1;1486:79:::0;:::o;4844:143::-;4906:3;;4882:7;;4906:3;;;;;:8;;4902:22;;-1:-1:-1;4923:1:0;;4844:143::o;4902:22::-;4976:3;;4970:9;;4976:3;;;;;;4970;;;;;:9;:::i;:::-;4963:16;;;;4844:143;:::o;4183:84::-;1627:10;1621:5;:17;;;;;;;;;;;1642:1;1621:22;1613:63;;;;;;;3630:2:1;1613:63:0;;;3612:21:1;3669:2;3649:18;;;3642:30;3708;3688:18;;;3681:58;3756:18;;1613:63:0;3428:352:1;1613:63:0;4225:7:::1;:11:::0;;;::::1;::::0;;4252:7:::1;::::0;::::1;::::0;4235:1:::1;::::0;4252:7:::1;4183:84::o:0;4275:255::-;1627:10;1621:5;:17;;;;;;;;;;;1642:1;1621:22;1613:63;;;;;;;3630:2:1;1613:63:0;;;3612:21:1;3669:2;3649:18;;;3642:30;3708;3688:18;;;3681:58;3756:18;;1613:63:0;3428:352:1;1613:63:0;4340:3:::1;::::0;;::::1;4354:10:::0;;::::1;4340:3;4354:10:::0;;::::1;::::0;;::::1;;::::0;;;;4340:3;;::::1;;::::0;4379::::1;::::0;;;::::1;;:9:::0;-1:-1:-1;4375:122:0::1;;;4468:3;::::0;4467:18:::1;::::0;;::::1;::::0;4468:9:::1;::::0;;::::1;::::0;:3;;::::1;;;:9;:::i;:::-;4467:18;;;;:::i;:::-;4461:3;;:24;;;;;;;;;;;;;;;;;;4375:122;4512:10;::::0;3132:6:1;3120:19;;3102:38;;4512:10:0::1;::::0;3090:2:1;3075:18;4512:10:0::1;2958:188:1::0;8186:161:0;1627:10;1621:5;:17;;;;;;;;;;;1642:1;1621:22;1613:63;;;;;;;3630:2:1;1613:63:0;;;3612:21:1;3669:2;3649:18;;;3642:30;3708;3688:18;;;3681:58;3756:18;;1613:63:0;3428:352:1;1613:63:0;8245:16:::1;::::0;::::1;8237:56;;;::::0;::::1;::::0;;7509:2:1;8237:56:0::1;::::0;::::1;7491:21:1::0;7548:2;7528:18;;;7521:30;7587:29;7567:18;;;7560:57;7634:18;;8237:56:0::1;7307:351:1::0;8237:56:0::1;8304:7;::::0;::::1;;::::0;;;:3:::1;:7;::::0;;;;;;;;8314:1:::1;8304:11:::0;;8331:8;;423:74:1;;;8331:8:0::1;::::0;396:18:1;8331:8:0::1;277:226:1::0;508:615;594:6;602;655:2;643:9;634:7;630:23;626:32;623:52;;;671:1;668;661:12;623:52;711:9;698:23;740:18;781:2;773:6;770:14;767:34;;;797:1;794;787:12;767:34;835:6;824:9;820:22;810:32;;880:7;873:4;869:2;865:13;861:27;851:55;;902:1;899;892:12;851:55;942:2;929:16;968:2;960:6;957:14;954:34;;;984:1;981;974:12;954:34;1037:7;1032:2;1022:6;1019:1;1015:14;1011:2;1007:23;1003:32;1000:45;997:65;;;1058:1;1055;1048:12;997:65;1089:2;1081:11;;;;;1111:6;;-1:-1:-1;508:615:1;;-1:-1:-1;;;;508:615:1:o;1684:196::-;1752:20;;1812:42;1801:54;;1791:65;;1781:93;;1870:1;1867;1860:12;1781:93;1684:196;;;:::o;1885:186::-;1944:6;1997:2;1985:9;1976:7;1972:23;1968:32;1965:52;;;2013:1;2010;2003:12;1965:52;2036:29;2055:9;2036:29;:::i;:::-;2026:39;1885:186;-1:-1:-1;;;1885:186:1:o;2076:254::-;2144:6;2152;2205:2;2193:9;2184:7;2180:23;2176:32;2173:52;;;2221:1;2218;2211:12;2173:52;2257:9;2244:23;2234:33;;2286:38;2320:2;2309:9;2305:18;2286:38;:::i;:::-;2276:48;;2076:254;;;;;:::o;2524:180::-;2583:6;2636:2;2624:9;2615:7;2611:23;2607:32;2604:52;;;2652:1;2649;2642:12;2604:52;-1:-1:-1;2675:23:1;;2524:180;-1:-1:-1;2524:180:1:o;3151:272::-;3209:6;3262:2;3250:9;3241:7;3237:23;3233:32;3230:52;;;3278:1;3275;3268:12;3230:52;3317:9;3304:23;3367:6;3360:5;3356:18;3349:5;3346:29;3336:57;;3389:1;3386;3379:12;4849:184;4901:77;4898:1;4891:88;4998:4;4995:1;4988:15;5022:4;5019:1;5012:15;5038:184;5108:6;5161:2;5149:9;5140:7;5136:23;5132:32;5129:52;;;5177:1;5174;5167:12;5129:52;-1:-1:-1;5200:16:1;;5038:184;-1:-1:-1;5038:184:1:o;5227:::-;5279:77;5276:1;5269:88;5376:4;5373:1;5366:15;5400:4;5397:1;5390:15;5416:228;5456:7;5582:1;5514:66;5510:74;5507:1;5504:81;5499:1;5492:9;5485:17;5481:105;5478:131;;;5589:18;;:::i;:::-;-1:-1:-1;5629:9:1;;5416:228::o;5649:274::-;5689:1;5715;5705:189;;5750:77;5747:1;5740:88;5851:4;5848:1;5841:15;5879:4;5876:1;5869:15;5705:189;-1:-1:-1;5908:9:1;;5649:274::o;6638:340::-;6868:25;;;6856:2;6841:18;;6943:4;6935:6;6930:2;6915:18;;6902:46;6970:1;6964:4;6957:15;6638:340;;;;;:::o;9038:272::-;9078:4;9107:60;9217:10;;;;9187;;9239:12;;;9236:38;;;9254:18;;:::i;:::-;9291:13;;9038:272;-1:-1:-1;;;9038:272:1:o;9315:279::-;9355:3;9383:60;9470:2;9467:1;9463:10;9500:2;9497:1;9493:10;9531:3;9527:2;9523:12;9518:3;9515:21;9512:47;;;9539:18;;:::i;:::-;9575:13;;9315:279;-1:-1:-1;;;;9315:279:1:o
Swarm Source
ipfs://cf0c377d5c9e0fc22485a18c9fa17a980625bb0be9fda7b12a448427517ccd66
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.