Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Oracle
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; import "./interfaces/IOracle.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; contract Oracle is IOracle, Initializable { uint64 public version; bytes32 public constant DEFAULT_KEY = 0x0; string public constant E_LENGTH_MISMATCH = "data and keys length mismatch"; mapping(address => mapping(bytes32 => Value)) public data; /// @custom:oz-upgrades-unsafe-allow constructor constructor() initializer {} function initialize() external initializer { version = 1; } function updateStateBulk( bytes[] calldata _data, bytes32[] calldata keys ) external override { require(_data.length == keys.length, E_LENGTH_MISMATCH); uint64 timestamp = _blockTimestamp(); for (uint256 i = 0; i < _data.length; i++) { _updateState(_data[i], keys[i], timestamp); } } function updateStateByKey( bytes calldata _data, bytes32 key ) external override { _updateState(_data, key); } function updateState(bytes calldata _data) external override { _updateState(_data, DEFAULT_KEY); } function readAsStringWithTimestamp( address sender, bytes32 key ) external view override returns (string memory, uint64) { return _readAsString(sender, key); } function readAsUint256WithTimestamp( address sender, bytes32 key ) external view override returns (uint256, uint64) { return _readAsUint256(sender, key); } function readAsUint128WithTimestamp( address sender, bytes32 key ) external view override returns (uint128, uint64) { return _readAsUint128(sender, key); } function readAsUint64WithTimestamp( address sender, bytes32 key ) external view override returns (uint64, uint64) { return _readAsUint64(sender, key); } function readAsInt256WithTimestamp( address sender, bytes32 key ) external view override returns (int256, uint64) { return _readAsInt256(sender, key); } function readAsInt128WithTimestamp( address sender, bytes32 key ) external view override returns (int128, uint64) { return _readAsInt128(sender, key); } function readAsInt64WithTimestamp( address sender, bytes32 key ) external view override returns (int64, uint64) { return _readAsInt64(sender, key); } function readAsStringByKey( address sender, bytes32 key ) external view override returns (string memory) { (string memory value, ) = _readAsString(sender, key); return value; } function readAsUint256ByKey( address sender, bytes32 key ) external view override returns (uint256) { (uint256 value, ) = _readAsUint256(sender, key); return value; } function readAsUint128ByKey( address sender, bytes32 key ) external view override returns (uint128) { (uint128 value, ) = _readAsUint128(sender, key); return value; } function readAsUint64ByKey( address sender, bytes32 key ) external view override returns (uint64) { (uint64 value, ) = _readAsUint64(sender, key); return value; } function readAsInt256ByKey( address sender, bytes32 key ) external view override returns (int256) { (int256 value, ) = _readAsInt256(sender, key); return value; } function readAsInt128ByKey( address sender, bytes32 key ) external view override returns (int128) { (int128 value, ) = _readAsInt128(sender, key); return value; } function readAsInt64ByKey( address sender, bytes32 key ) external view override returns (int64) { (int64 value, ) = _readAsInt64(sender, key); return value; } function readAsString( address sender ) external view override returns (string memory) { (string memory value, ) = _readAsString(sender, DEFAULT_KEY); return value; } function readAsUint256( address sender ) external view override returns (uint256) { (uint256 value, ) = _readAsUint256(sender, DEFAULT_KEY); return value; } function readAsUint128( address sender ) external view override returns (uint128) { (uint128 value, ) = _readAsUint128(sender, DEFAULT_KEY); return value; } function readAsUint64( address sender ) external view override returns (uint64) { (uint64 value, ) = _readAsUint64(sender, DEFAULT_KEY); return value; } function readAsInt256( address sender ) external view override returns (int256) { (int256 value, ) = _readAsInt256(sender, DEFAULT_KEY); return value; } function readAsInt128( address sender ) external view override returns (int128) { (int128 value, ) = _readAsInt128(sender, DEFAULT_KEY); return value; } function readAsInt64( address sender ) external view override returns (int64) { (int64 value, ) = _readAsInt64(sender, DEFAULT_KEY); return value; } function _updateState(bytes calldata _data, bytes32 key) internal { _updateState(_data, key, _blockTimestamp()); } function _updateState( bytes calldata _data, bytes32 key, uint64 timestamp ) internal { data[msg.sender][key] = Value(_data, timestamp); emit StateUpdated(msg.sender, _data, key); } function _readAsString( address sender, bytes32 key ) internal view returns (string memory, uint64) { Value memory value = data[sender][key]; return (abi.decode(value.data, (string)), value.timestamp); } function _readAsUint256( address sender, bytes32 key ) internal view returns (uint256, uint64) { Value memory value = data[sender][key]; return (abi.decode(value.data, (uint256)), value.timestamp); } function _readAsUint128( address sender, bytes32 key ) internal view returns (uint128, uint64) { Value memory value = data[sender][key]; return (abi.decode(value.data, (uint128)), value.timestamp); } function _readAsUint64( address sender, bytes32 key ) internal view returns (uint64, uint64) { Value memory value = data[sender][key]; return (abi.decode(value.data, (uint64)), value.timestamp); } function _readAsInt256( address sender, bytes32 key ) internal view returns (int256, uint64) { Value memory value = data[sender][key]; return (abi.decode(value.data, (int256)), value.timestamp); } function _readAsInt128( address sender, bytes32 key ) internal view returns (int128, uint64) { Value memory value = data[sender][key]; return (abi.decode(value.data, (int128)), value.timestamp); } function _readAsInt64( address sender, bytes32 key ) internal view returns (int64, uint64) { Value memory value = data[sender][key]; return (abi.decode(value.data, (int64)), value.timestamp); } function _blockTimestamp() internal view returns (uint64) { return uint64(block.timestamp); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.20; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in * case an upgrade adds a module that needs to be initialized. * * For example: * * [.hljs-theme-light.nopadding] * ```solidity * contract MyToken is ERC20Upgradeable { * function initialize() initializer public { * __ERC20_init("MyToken", "MTK"); * } * } * * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { * function initializeV2() reinitializer(2) public { * __ERC20Permit_init("MyToken"); * } * } * ``` * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() { * _disableInitializers(); * } * ``` * ==== */ abstract contract Initializable { /** * @dev Storage of the initializable contract. * * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions * when using with upgradeable contracts. * * @custom:storage-location erc7201:openzeppelin.storage.Initializable */ struct InitializableStorage { /** * @dev Indicates that the contract has been initialized. */ uint64 _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool _initializing; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; /** * @dev The contract is already initialized. */ error InvalidInitialization(); /** * @dev The contract is not initializing. */ error NotInitializing(); /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint64 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. * * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in * production. * * Emits an {Initialized} event. */ modifier initializer() { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); // Cache values to avoid duplicated sloads bool isTopLevelCall = !$._initializing; uint64 initialized = $._initialized; // Allowed calls: // - initialSetup: the contract is not in the initializing state and no previous version was // initialized // - construction: the contract is initialized at version 1 (no reininitialization) and the // current contract is just being deployed bool initialSetup = initialized == 0 && isTopLevelCall; bool construction = initialized == 1 && address(this).code.length == 0; if (!initialSetup && !construction) { revert InvalidInitialization(); } $._initialized = 1; if (isTopLevelCall) { $._initializing = true; } _; if (isTopLevelCall) { $._initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * A reinitializer may be used after the original initialization step. This is essential to configure modules that * are added through upgrades and that require initialization. * * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` * cannot be nested. If one is invoked in the context of another, execution will revert. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. * * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization. * * Emits an {Initialized} event. */ modifier reinitializer(uint64 version) { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing || $._initialized >= version) { revert InvalidInitialization(); } $._initialized = version; $._initializing = true; _; $._initializing = false; emit Initialized(version); } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { _checkInitializing(); _; } /** * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}. */ function _checkInitializing() internal view virtual { if (!_isInitializing()) { revert NotInitializing(); } } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. * * Emits an {Initialized} event the first time it is successfully executed. */ function _disableInitializers() internal virtual { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing) { revert InvalidInitialization(); } if ($._initialized != type(uint64).max) { $._initialized = type(uint64).max; emit Initialized(type(uint64).max); } } /** * @dev Returns the highest version that has been initialized. See {reinitializer}. */ function _getInitializedVersion() internal view returns (uint64) { return _getInitializableStorage()._initialized; } /** * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. */ function _isInitializing() internal view returns (bool) { return _getInitializableStorage()._initializing; } /** * @dev Returns a pointer to the storage namespace. */ // solhint-disable-next-line var-name-mixedcase function _getInitializableStorage() private pure returns (InitializableStorage storage $) { assembly { $.slot := INITIALIZABLE_STORAGE } } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; interface IOracle { struct Value { bytes data; uint64 timestamp; } event StateUpdated(address indexed sender, bytes data, bytes32 indexed key); function updateState(bytes calldata data) external; function updateStateByKey(bytes calldata data, bytes32 key) external; function updateStateBulk( bytes[] calldata data, bytes32[] calldata keys ) external; function readAsString(address sender) external view returns (string memory); function readAsUint256(address sender) external view returns (uint256); function readAsUint128(address sender) external view returns (uint128); function readAsUint64(address sender) external view returns (uint64); function readAsInt256(address sender) external view returns (int256); function readAsInt128(address sender) external view returns (int128); function readAsInt64(address sender) external view returns (int64); function readAsStringByKey( address sender, bytes32 key ) external view returns (string memory); function readAsUint256ByKey( address sender, bytes32 key ) external view returns (uint256); function readAsUint128ByKey( address sender, bytes32 key ) external view returns (uint128); function readAsUint64ByKey( address sender, bytes32 key ) external view returns (uint64); function readAsInt256ByKey( address sender, bytes32 key ) external view returns (int256); function readAsInt128ByKey( address sender, bytes32 key ) external view returns (int128); function readAsInt64ByKey( address sender, bytes32 key ) external view returns (int64); function readAsStringWithTimestamp( address sender, bytes32 key ) external view returns (string memory, uint64); function readAsUint256WithTimestamp( address sender, bytes32 key ) external view returns (uint256, uint64); function readAsUint128WithTimestamp( address sender, bytes32 key ) external view returns (uint128, uint64); function readAsUint64WithTimestamp( address sender, bytes32 key ) external view returns (uint64, uint64); function readAsInt256WithTimestamp( address sender, bytes32 key ) external view returns (int256, uint64); function readAsInt128WithTimestamp( address sender, bytes32 key ) external view returns (int128, uint64); function readAsInt64WithTimestamp( address sender, bytes32 key ) external view returns (int64, uint64); }
{ "evmVersion": "paris", "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"StateUpdated","type":"event"},{"inputs":[],"name":"DEFAULT_KEY","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"E_LENGTH_MISMATCH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"data","outputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint64","name":"timestamp","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"readAsInt128","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsInt128ByKey","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsInt128WithTimestamp","outputs":[{"internalType":"int128","name":"","type":"int128"},{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"readAsInt256","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsInt256ByKey","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsInt256WithTimestamp","outputs":[{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"readAsInt64","outputs":[{"internalType":"int64","name":"","type":"int64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsInt64ByKey","outputs":[{"internalType":"int64","name":"","type":"int64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsInt64WithTimestamp","outputs":[{"internalType":"int64","name":"","type":"int64"},{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"readAsString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsStringByKey","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsStringWithTimestamp","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"readAsUint128","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsUint128ByKey","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsUint128WithTimestamp","outputs":[{"internalType":"uint128","name":"","type":"uint128"},{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"readAsUint256","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsUint256ByKey","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsUint256WithTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"readAsUint64","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsUint64ByKey","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"readAsUint64WithTimestamp","outputs":[{"internalType":"uint64","name":"","type":"uint64"},{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"updateState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"_data","type":"bytes[]"},{"internalType":"bytes32[]","name":"keys","type":"bytes32[]"}],"name":"updateStateBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"updateStateByKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50600062000024620001ab60201b60201c565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff16148015620000735750825b9050600060018367ffffffffffffffff16148015620000a9575060003073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015620000b8575080155b15620000f0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315620001415760018560000160086101000a81548160ff0219169083151502179055505b8315620001a05760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405162000197919062000234565b60405180910390a15b505050505062000251565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000819050919050565b60006200021c620002166200021084620001d3565b620001f1565b620001dd565b9050919050565b6200022e81620001fb565b82525050565b60006020820190506200024b600083018462000223565b92915050565b61272680620002616000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806364f36c8911610104578063aee65b76116100a2578063badf254111610071578063badf2541146105f2578063eb3facf514610623578063f3e1d89014610653578063faeba25714610683576101cf565b8063aee65b7614610530578063aeffc41214610561578063af07209c14610591578063b0028d43146105c1576101cf565b80639ab00c3e116100de5780639ab00c3e1461046f5780639b7db120146104a0578063a65bc74f146104d0578063a987e41514610500576101cf565b806364f36c891461041957806367acd475146104495780638129fc1c14610465576101cf565b80633e62d7a71161017157806354e5060e1161014b57806354e5060e1461039257806354fd4d50146103ae5780635a9eb417146103cc57806364da691d146103e8576101cf565b80633e62d7a714610301578063452cb9d41461033257806345b2468514610362576101cf565b80632d4dde36116101ad5780632d4dde36146102405780633226e968146102705780633366ec02146102a057806336e6b1b3146102d1576101cf565b8063095516bd146101d45780631caef15814610204578063298e6eb714610222575b600080fd5b6101ee60048036038101906101e99190611837565b6106b4565b6040516101fb9190611893565b60405180910390f35b61020c6106ce565b604051610219919061193e565b60405180910390f35b61022a610707565b604051610237919061196f565b60405180910390f35b61025a60048036038101906102559190611837565b61070e565b60405161026791906119a3565b60405180910390f35b61028a600480360381019061028591906119be565b610728565b6040516102979190611a07565b60405180910390f35b6102ba60048036038101906102b59190611837565b610744565b6040516102c8929190611a5e565b60405180910390f35b6102eb60048036038101906102e691906119be565b61075c565b6040516102f89190611893565b60405180910390f35b61031b60048036038101906103169190611837565b610778565b604051610329929190611ab2565b60405180910390f35b61034c60048036038101906103479190611837565b610790565b6040516103599190611adb565b60405180910390f35b61037c600480360381019061037791906119be565b6107aa565b6040516103899190611af6565b60405180910390f35b6103ac60048036038101906103a79190611b76565b6107c6565b005b6103b66107d6565b6040516103c39190611bd6565b60405180910390f35b6103e660048036038101906103e19190611c9d565b6107ee565b005b61040260048036038101906103fd9190611837565b6108ec565b604051610410929190611d1e565b60405180910390f35b610433600480360381019061042e9190611837565b610904565b604051610440919061193e565b60405180910390f35b610463600480360381019061045e9190611d47565b61091f565b005b61046d610931565b005b61048960048036038101906104849190611837565b610adf565b604051610497929190611d94565b60405180910390f35b6104ba60048036038101906104b59190611837565b610af7565b6040516104c79190611af6565b60405180910390f35b6104ea60048036038101906104e59190611837565b610b11565b6040516104f79190611bd6565b60405180910390f35b61051a600480360381019061051591906119be565b610b2b565b6040516105279190611adb565b60405180910390f35b61054a60048036038101906105459190611837565b610b47565b604051610558929190611dbd565b60405180910390f35b61057b60048036038101906105769190611837565b610b5f565b6040516105889190611a07565b60405180910390f35b6105ab60048036038101906105a691906119be565b610b79565b6040516105b8919061193e565b60405180910390f35b6105db60048036038101906105d69190611837565b610b96565b6040516105e9929190611de6565b60405180910390f35b61060c60048036038101906106079190611837565b610bae565b60405161061a929190611e0f565b60405180910390f35b61063d600480360381019061063891906119be565b610bc7565b60405161064a91906119a3565b60405180910390f35b61066d600480360381019061066891906119be565b610be3565b60405161067a9190611bd6565b60405180910390f35b61069d60048036038101906106989190611837565b610bff565b6040516106ab929190611e94565b60405180910390f35b6000806106c18484610ccc565b5090508091505092915050565b6040518060400160405280601d81526020017f6461746120616e64206b657973206c656e677468206d69736d6174636800000081525081565b6000801b81565b60008061071b8484610e1b565b5090508091505092915050565b600080610738836000801b610f6a565b50905080915050919050565b60008061075184846110b9565b915091509250929050565b60008061076c836000801b610ccc565b50905080915050919050565b6000806107858484611208565b915091509250929050565b60008061079d84846110b9565b5090508091505092915050565b6000806107ba836000801b611208565b50905080915050919050565b6107d1838383611357565b505050565b60008054906101000a900467ffffffffffffffff1681565b8181905084849050146040518060400160405280601d81526020017f6461746120616e64206b657973206c656e677468206d69736d617463680000008152509061086e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610865919061193e565b60405180910390fd5b50600061087961136f565b905060005b858590508110156108e4576108d186868381811061089f5761089e611ec4565b5b90506020028101906108b19190611f02565b8686858181106108c4576108c3611ec4565b5b9050602002013585611377565b80806108dc90611f94565b91505061087e565b505050505050565b6000806108f98484610f6a565b915091509250929050565b6060600061091284846114c9565b5090508091505092915050565b61092d82826000801b611357565b5050565b600061093b611618565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff161480156109895750825b9050600060018367ffffffffffffffff161480156109be575060003073ffffffffffffffffffffffffffffffffffffffff163b145b9050811580156109cc575080155b15610a03576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315610a535760018560000160086101000a81548160ff0219169083151502179055505b60016000806101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315610ad85760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051610acf9190612021565b60405180910390a15b5050505050565b600080610aec8484610e1b565b915091509250929050565b600080610b048484611208565b5090508091505092915050565b600080610b1e8484611640565b5090508091505092915050565b600080610b3b836000801b6110b9565b50905080915050919050565b600080610b548484611640565b915091509250929050565b600080610b6c8484610f6a565b5090508091505092915050565b60606000610b8a836000801b6114c9565b50905080915050919050565b600080610ba38484610ccc565b915091509250929050565b60606000610bbc84846114c9565b915091509250929050565b600080610bd7836000801b610e1b565b50905080915050919050565b600080610bf3836000801b611640565b50905080915050919050565b600160205281600052604060002060205280600052604060002060009150915050806000018054610c2f9061206b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5b9061206b565b8015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b820191906000526020600020905b815481529060010190602001808311610c8b57829003601f168201915b5050505050908060010160009054906101000a900467ffffffffffffffff16905082565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020604051806040016040529081600082018054610d3c9061206b565b80601f0160208091040260200160405190810160405280929190818152602001828054610d689061206b565b8015610db55780601f10610d8a57610100808354040283529160200191610db5565b820191906000526020600020905b815481529060010190602001808311610d9857829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090508060000151806020019051810190610e0a91906120c8565b816020015192509250509250929050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020604051806040016040529081600082018054610e8b9061206b565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb79061206b565b8015610f045780601f10610ed957610100808354040283529160200191610f04565b820191906000526020600020905b815481529060010190602001808311610ee757829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090508060000151806020019051810190610f599190612121565b816020015192509250509250929050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020604051806040016040529081600082018054610fda9061206b565b80601f01602080910402602001604051908101604052809291908181526020018280546110069061206b565b80156110535780601f1061102857610100808354040283529160200191611053565b820191906000526020600020905b81548152906001019060200180831161103657829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050905080600001518060200190518101906110a8919061217a565b816020015192509250509250929050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206040518060400160405290816000820180546111299061206b565b80601f01602080910402602001604051908101604052809291908181526020018280546111559061206b565b80156111a25780601f10611177576101008083540402835291602001916111a2565b820191906000526020600020905b81548152906001019060200180831161118557829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050905080600001518060200190518101906111f791906121d3565b816020015192509250509250929050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206040518060400160405290816000820180546112789061206b565b80601f01602080910402602001604051908101604052809291908181526020018280546112a49061206b565b80156112f15780601f106112c6576101008083540402835291602001916112f1565b820191906000526020600020905b8154815290600101906020018083116112d457829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090508060000151806020019051810190611346919061222c565b816020015192509250509250929050565b61136a83838361136561136f565b611377565b505050565b600042905090565b604051806040016040528085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020018267ffffffffffffffff16815250600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600082015181600001908161143f919061242a565b5060208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050813373ffffffffffffffffffffffffffffffffffffffff167f7bd8eb591ab5c32a523ee775f2da32d524e3e7f156208f546e370b78036df6db86866040516114bb929190612538565b60405180910390a350505050565b6060600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206040518060400160405290816000820180546115399061206b565b80601f01602080910402602001604051908101604052809291908181526020018280546115659061206b565b80156115b25780601f10611587576101008083540402835291602001916115b2565b820191906000526020600020905b81548152906001019060200180831161159557829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090508060000151806020019051810190611607919061264e565b816020015192509250509250929050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206040518060400160405290816000820180546116b09061206b565b80601f01602080910402602001604051908101604052809291908181526020018280546116dc9061206b565b80156117295780601f106116fe57610100808354040283529160200191611729565b820191906000526020600020905b81548152906001019060200180831161170c57829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050806000015180602001905181019061177e91906126c3565b816020015192509250509250929050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117ce826117a3565b9050919050565b6117de816117c3565b81146117e957600080fd5b50565b6000813590506117fb816117d5565b92915050565b6000819050919050565b61181481611801565b811461181f57600080fd5b50565b6000813590506118318161180b565b92915050565b6000806040838503121561184e5761184d611799565b5b600061185c858286016117ec565b925050602061186d85828601611822565b9150509250929050565b60008160070b9050919050565b61188d81611877565b82525050565b60006020820190506118a86000830184611884565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118e85780820151818401526020810190506118cd565b60008484015250505050565b6000601f19601f8301169050919050565b6000611910826118ae565b61191a81856118b9565b935061192a8185602086016118ca565b611933816118f4565b840191505092915050565b600060208201905081810360008301526119588184611905565b905092915050565b61196981611801565b82525050565b60006020820190506119846000830184611960565b92915050565b6000819050919050565b61199d8161198a565b82525050565b60006020820190506119b86000830184611994565b92915050565b6000602082840312156119d4576119d3611799565b5b60006119e2848285016117ec565b91505092915050565b600081600f0b9050919050565b611a01816119eb565b82525050565b6000602082019050611a1c60008301846119f8565b92915050565b6000819050919050565b611a3581611a22565b82525050565b600067ffffffffffffffff82169050919050565b611a5881611a3b565b82525050565b6000604082019050611a736000830185611a2c565b611a806020830184611a4f565b9392505050565b60006fffffffffffffffffffffffffffffffff82169050919050565b611aac81611a87565b82525050565b6000604082019050611ac76000830185611aa3565b611ad46020830184611a4f565b9392505050565b6000602082019050611af06000830184611a2c565b92915050565b6000602082019050611b0b6000830184611aa3565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b3657611b35611b11565b5b8235905067ffffffffffffffff811115611b5357611b52611b16565b5b602083019150836001820283011115611b6f57611b6e611b1b565b5b9250929050565b600080600060408486031215611b8f57611b8e611799565b5b600084013567ffffffffffffffff811115611bad57611bac61179e565b5b611bb986828701611b20565b93509350506020611bcc86828701611822565b9150509250925092565b6000602082019050611beb6000830184611a4f565b92915050565b60008083601f840112611c0757611c06611b11565b5b8235905067ffffffffffffffff811115611c2457611c23611b16565b5b602083019150836020820283011115611c4057611c3f611b1b565b5b9250929050565b60008083601f840112611c5d57611c5c611b11565b5b8235905067ffffffffffffffff811115611c7a57611c79611b16565b5b602083019150836020820283011115611c9657611c95611b1b565b5b9250929050565b60008060008060408587031215611cb757611cb6611799565b5b600085013567ffffffffffffffff811115611cd557611cd461179e565b5b611ce187828801611bf1565b9450945050602085013567ffffffffffffffff811115611d0457611d0361179e565b5b611d1087828801611c47565b925092505092959194509250565b6000604082019050611d3360008301856119f8565b611d406020830184611a4f565b9392505050565b60008060208385031215611d5e57611d5d611799565b5b600083013567ffffffffffffffff811115611d7c57611d7b61179e565b5b611d8885828601611b20565b92509250509250929050565b6000604082019050611da96000830185611994565b611db66020830184611a4f565b9392505050565b6000604082019050611dd26000830185611a4f565b611ddf6020830184611a4f565b9392505050565b6000604082019050611dfb6000830185611884565b611e086020830184611a4f565b9392505050565b60006040820190508181036000830152611e298185611905565b9050611e386020830184611a4f565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000611e6682611e3f565b611e708185611e4a565b9350611e808185602086016118ca565b611e89816118f4565b840191505092915050565b60006040820190508181036000830152611eae8185611e5b565b9050611ebd6020830184611a4f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112611f1f57611f1e611ef3565b5b80840192508235915067ffffffffffffffff821115611f4157611f40611ef8565b5b602083019250600182023603831315611f5d57611f5c611efd565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f9f8261198a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611fd157611fd0611f65565b5b600182019050919050565b6000819050919050565b6000819050919050565b600061200b61200661200184611fdc565b611fe6565b611a3b565b9050919050565b61201b81611ff0565b82525050565b60006020820190506120366000830184612012565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061208357607f821691505b6020821081036120965761209561203c565b5b50919050565b6120a581611877565b81146120b057600080fd5b50565b6000815190506120c28161209c565b92915050565b6000602082840312156120de576120dd611799565b5b60006120ec848285016120b3565b91505092915050565b6120fe8161198a565b811461210957600080fd5b50565b60008151905061211b816120f5565b92915050565b60006020828403121561213757612136611799565b5b60006121458482850161210c565b91505092915050565b612157816119eb565b811461216257600080fd5b50565b6000815190506121748161214e565b92915050565b6000602082840312156121905761218f611799565b5b600061219e84828501612165565b91505092915050565b6121b081611a22565b81146121bb57600080fd5b50565b6000815190506121cd816121a7565b92915050565b6000602082840312156121e9576121e8611799565b5b60006121f7848285016121be565b91505092915050565b61220981611a87565b811461221457600080fd5b50565b60008151905061222681612200565b92915050565b60006020828403121561224257612241611799565b5b600061225084828501612217565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026122ea7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826122ad565b6122f486836122ad565b95508019841693508086168417925050509392505050565b600061232761232261231d8461198a565b611fe6565b61198a565b9050919050565b6000819050919050565b6123418361230c565b61235561234d8261232e565b8484546122ba565b825550505050565b600090565b61236a61235d565b612375818484612338565b505050565b5b818110156123995761238e600082612362565b60018101905061237b565b5050565b601f8211156123de576123af81612288565b6123b88461229d565b810160208510156123c7578190505b6123db6123d38561229d565b83018261237a565b50505b505050565b600082821c905092915050565b6000612401600019846008026123e3565b1980831691505092915050565b600061241a83836123f0565b9150826002028217905092915050565b61243382611e3f565b67ffffffffffffffff81111561244c5761244b612259565b5b612456825461206b565b61246182828561239d565b600060209050601f8311600181146124945760008415612482578287015190505b61248c858261240e565b8655506124f4565b601f1984166124a286612288565b60005b828110156124ca578489015182556001820191506020850194506020810190506124a5565b868310156124e757848901516124e3601f8916826123f0565b8355505b6001600288020188555050505b505050505050565b82818337600083830152505050565b60006125178385611e4a565b93506125248385846124fc565b61252d836118f4565b840190509392505050565b6000602082019050818103600083015261255381848661250b565b90509392505050565b600080fd5b61256a826118f4565b810181811067ffffffffffffffff8211171561258957612588612259565b5b80604052505050565b600061259c61178f565b90506125a88282612561565b919050565b600067ffffffffffffffff8211156125c8576125c7612259565b5b6125d1826118f4565b9050602081019050919050565b60006125f16125ec846125ad565b612592565b90508281526020810184848401111561260d5761260c61255c565b5b6126188482856118ca565b509392505050565b600082601f83011261263557612634611b11565b5b81516126458482602086016125de565b91505092915050565b60006020828403121561266457612663611799565b5b600082015167ffffffffffffffff8111156126825761268161179e565b5b61268e84828501612620565b91505092915050565b6126a081611a3b565b81146126ab57600080fd5b50565b6000815190506126bd81612697565b92915050565b6000602082840312156126d9576126d8611799565b5b60006126e7848285016126ae565b9150509291505056fea2646970667358221220e63652f00656ef200da8bc88043231443206facc456dbba6de885d1cfabe837b64736f6c63430008150033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806364f36c8911610104578063aee65b76116100a2578063badf254111610071578063badf2541146105f2578063eb3facf514610623578063f3e1d89014610653578063faeba25714610683576101cf565b8063aee65b7614610530578063aeffc41214610561578063af07209c14610591578063b0028d43146105c1576101cf565b80639ab00c3e116100de5780639ab00c3e1461046f5780639b7db120146104a0578063a65bc74f146104d0578063a987e41514610500576101cf565b806364f36c891461041957806367acd475146104495780638129fc1c14610465576101cf565b80633e62d7a71161017157806354e5060e1161014b57806354e5060e1461039257806354fd4d50146103ae5780635a9eb417146103cc57806364da691d146103e8576101cf565b80633e62d7a714610301578063452cb9d41461033257806345b2468514610362576101cf565b80632d4dde36116101ad5780632d4dde36146102405780633226e968146102705780633366ec02146102a057806336e6b1b3146102d1576101cf565b8063095516bd146101d45780631caef15814610204578063298e6eb714610222575b600080fd5b6101ee60048036038101906101e99190611837565b6106b4565b6040516101fb9190611893565b60405180910390f35b61020c6106ce565b604051610219919061193e565b60405180910390f35b61022a610707565b604051610237919061196f565b60405180910390f35b61025a60048036038101906102559190611837565b61070e565b60405161026791906119a3565b60405180910390f35b61028a600480360381019061028591906119be565b610728565b6040516102979190611a07565b60405180910390f35b6102ba60048036038101906102b59190611837565b610744565b6040516102c8929190611a5e565b60405180910390f35b6102eb60048036038101906102e691906119be565b61075c565b6040516102f89190611893565b60405180910390f35b61031b60048036038101906103169190611837565b610778565b604051610329929190611ab2565b60405180910390f35b61034c60048036038101906103479190611837565b610790565b6040516103599190611adb565b60405180910390f35b61037c600480360381019061037791906119be565b6107aa565b6040516103899190611af6565b60405180910390f35b6103ac60048036038101906103a79190611b76565b6107c6565b005b6103b66107d6565b6040516103c39190611bd6565b60405180910390f35b6103e660048036038101906103e19190611c9d565b6107ee565b005b61040260048036038101906103fd9190611837565b6108ec565b604051610410929190611d1e565b60405180910390f35b610433600480360381019061042e9190611837565b610904565b604051610440919061193e565b60405180910390f35b610463600480360381019061045e9190611d47565b61091f565b005b61046d610931565b005b61048960048036038101906104849190611837565b610adf565b604051610497929190611d94565b60405180910390f35b6104ba60048036038101906104b59190611837565b610af7565b6040516104c79190611af6565b60405180910390f35b6104ea60048036038101906104e59190611837565b610b11565b6040516104f79190611bd6565b60405180910390f35b61051a600480360381019061051591906119be565b610b2b565b6040516105279190611adb565b60405180910390f35b61054a60048036038101906105459190611837565b610b47565b604051610558929190611dbd565b60405180910390f35b61057b60048036038101906105769190611837565b610b5f565b6040516105889190611a07565b60405180910390f35b6105ab60048036038101906105a691906119be565b610b79565b6040516105b8919061193e565b60405180910390f35b6105db60048036038101906105d69190611837565b610b96565b6040516105e9929190611de6565b60405180910390f35b61060c60048036038101906106079190611837565b610bae565b60405161061a929190611e0f565b60405180910390f35b61063d600480360381019061063891906119be565b610bc7565b60405161064a91906119a3565b60405180910390f35b61066d600480360381019061066891906119be565b610be3565b60405161067a9190611bd6565b60405180910390f35b61069d60048036038101906106989190611837565b610bff565b6040516106ab929190611e94565b60405180910390f35b6000806106c18484610ccc565b5090508091505092915050565b6040518060400160405280601d81526020017f6461746120616e64206b657973206c656e677468206d69736d6174636800000081525081565b6000801b81565b60008061071b8484610e1b565b5090508091505092915050565b600080610738836000801b610f6a565b50905080915050919050565b60008061075184846110b9565b915091509250929050565b60008061076c836000801b610ccc565b50905080915050919050565b6000806107858484611208565b915091509250929050565b60008061079d84846110b9565b5090508091505092915050565b6000806107ba836000801b611208565b50905080915050919050565b6107d1838383611357565b505050565b60008054906101000a900467ffffffffffffffff1681565b8181905084849050146040518060400160405280601d81526020017f6461746120616e64206b657973206c656e677468206d69736d617463680000008152509061086e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610865919061193e565b60405180910390fd5b50600061087961136f565b905060005b858590508110156108e4576108d186868381811061089f5761089e611ec4565b5b90506020028101906108b19190611f02565b8686858181106108c4576108c3611ec4565b5b9050602002013585611377565b80806108dc90611f94565b91505061087e565b505050505050565b6000806108f98484610f6a565b915091509250929050565b6060600061091284846114c9565b5090508091505092915050565b61092d82826000801b611357565b5050565b600061093b611618565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff161480156109895750825b9050600060018367ffffffffffffffff161480156109be575060003073ffffffffffffffffffffffffffffffffffffffff163b145b9050811580156109cc575080155b15610a03576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315610a535760018560000160086101000a81548160ff0219169083151502179055505b60016000806101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315610ad85760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051610acf9190612021565b60405180910390a15b5050505050565b600080610aec8484610e1b565b915091509250929050565b600080610b048484611208565b5090508091505092915050565b600080610b1e8484611640565b5090508091505092915050565b600080610b3b836000801b6110b9565b50905080915050919050565b600080610b548484611640565b915091509250929050565b600080610b6c8484610f6a565b5090508091505092915050565b60606000610b8a836000801b6114c9565b50905080915050919050565b600080610ba38484610ccc565b915091509250929050565b60606000610bbc84846114c9565b915091509250929050565b600080610bd7836000801b610e1b565b50905080915050919050565b600080610bf3836000801b611640565b50905080915050919050565b600160205281600052604060002060205280600052604060002060009150915050806000018054610c2f9061206b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5b9061206b565b8015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b820191906000526020600020905b815481529060010190602001808311610c8b57829003601f168201915b5050505050908060010160009054906101000a900467ffffffffffffffff16905082565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020604051806040016040529081600082018054610d3c9061206b565b80601f0160208091040260200160405190810160405280929190818152602001828054610d689061206b565b8015610db55780601f10610d8a57610100808354040283529160200191610db5565b820191906000526020600020905b815481529060010190602001808311610d9857829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090508060000151806020019051810190610e0a91906120c8565b816020015192509250509250929050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020604051806040016040529081600082018054610e8b9061206b565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb79061206b565b8015610f045780601f10610ed957610100808354040283529160200191610f04565b820191906000526020600020905b815481529060010190602001808311610ee757829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090508060000151806020019051810190610f599190612121565b816020015192509250509250929050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020604051806040016040529081600082018054610fda9061206b565b80601f01602080910402602001604051908101604052809291908181526020018280546110069061206b565b80156110535780601f1061102857610100808354040283529160200191611053565b820191906000526020600020905b81548152906001019060200180831161103657829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050905080600001518060200190518101906110a8919061217a565b816020015192509250509250929050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206040518060400160405290816000820180546111299061206b565b80601f01602080910402602001604051908101604052809291908181526020018280546111559061206b565b80156111a25780601f10611177576101008083540402835291602001916111a2565b820191906000526020600020905b81548152906001019060200180831161118557829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050905080600001518060200190518101906111f791906121d3565b816020015192509250509250929050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206040518060400160405290816000820180546112789061206b565b80601f01602080910402602001604051908101604052809291908181526020018280546112a49061206b565b80156112f15780601f106112c6576101008083540402835291602001916112f1565b820191906000526020600020905b8154815290600101906020018083116112d457829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090508060000151806020019051810190611346919061222c565b816020015192509250509250929050565b61136a83838361136561136f565b611377565b505050565b600042905090565b604051806040016040528085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020018267ffffffffffffffff16815250600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600082015181600001908161143f919061242a565b5060208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050813373ffffffffffffffffffffffffffffffffffffffff167f7bd8eb591ab5c32a523ee775f2da32d524e3e7f156208f546e370b78036df6db86866040516114bb929190612538565b60405180910390a350505050565b6060600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206040518060400160405290816000820180546115399061206b565b80601f01602080910402602001604051908101604052809291908181526020018280546115659061206b565b80156115b25780601f10611587576101008083540402835291602001916115b2565b820191906000526020600020905b81548152906001019060200180831161159557829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090508060000151806020019051810190611607919061264e565b816020015192509250509250929050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206040518060400160405290816000820180546116b09061206b565b80601f01602080910402602001604051908101604052809291908181526020018280546116dc9061206b565b80156117295780601f106116fe57610100808354040283529160200191611729565b820191906000526020600020905b81548152906001019060200180831161170c57829003601f168201915b505050505081526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050806000015180602001905181019061177e91906126c3565b816020015192509250509250929050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117ce826117a3565b9050919050565b6117de816117c3565b81146117e957600080fd5b50565b6000813590506117fb816117d5565b92915050565b6000819050919050565b61181481611801565b811461181f57600080fd5b50565b6000813590506118318161180b565b92915050565b6000806040838503121561184e5761184d611799565b5b600061185c858286016117ec565b925050602061186d85828601611822565b9150509250929050565b60008160070b9050919050565b61188d81611877565b82525050565b60006020820190506118a86000830184611884565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118e85780820151818401526020810190506118cd565b60008484015250505050565b6000601f19601f8301169050919050565b6000611910826118ae565b61191a81856118b9565b935061192a8185602086016118ca565b611933816118f4565b840191505092915050565b600060208201905081810360008301526119588184611905565b905092915050565b61196981611801565b82525050565b60006020820190506119846000830184611960565b92915050565b6000819050919050565b61199d8161198a565b82525050565b60006020820190506119b86000830184611994565b92915050565b6000602082840312156119d4576119d3611799565b5b60006119e2848285016117ec565b91505092915050565b600081600f0b9050919050565b611a01816119eb565b82525050565b6000602082019050611a1c60008301846119f8565b92915050565b6000819050919050565b611a3581611a22565b82525050565b600067ffffffffffffffff82169050919050565b611a5881611a3b565b82525050565b6000604082019050611a736000830185611a2c565b611a806020830184611a4f565b9392505050565b60006fffffffffffffffffffffffffffffffff82169050919050565b611aac81611a87565b82525050565b6000604082019050611ac76000830185611aa3565b611ad46020830184611a4f565b9392505050565b6000602082019050611af06000830184611a2c565b92915050565b6000602082019050611b0b6000830184611aa3565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b3657611b35611b11565b5b8235905067ffffffffffffffff811115611b5357611b52611b16565b5b602083019150836001820283011115611b6f57611b6e611b1b565b5b9250929050565b600080600060408486031215611b8f57611b8e611799565b5b600084013567ffffffffffffffff811115611bad57611bac61179e565b5b611bb986828701611b20565b93509350506020611bcc86828701611822565b9150509250925092565b6000602082019050611beb6000830184611a4f565b92915050565b60008083601f840112611c0757611c06611b11565b5b8235905067ffffffffffffffff811115611c2457611c23611b16565b5b602083019150836020820283011115611c4057611c3f611b1b565b5b9250929050565b60008083601f840112611c5d57611c5c611b11565b5b8235905067ffffffffffffffff811115611c7a57611c79611b16565b5b602083019150836020820283011115611c9657611c95611b1b565b5b9250929050565b60008060008060408587031215611cb757611cb6611799565b5b600085013567ffffffffffffffff811115611cd557611cd461179e565b5b611ce187828801611bf1565b9450945050602085013567ffffffffffffffff811115611d0457611d0361179e565b5b611d1087828801611c47565b925092505092959194509250565b6000604082019050611d3360008301856119f8565b611d406020830184611a4f565b9392505050565b60008060208385031215611d5e57611d5d611799565b5b600083013567ffffffffffffffff811115611d7c57611d7b61179e565b5b611d8885828601611b20565b92509250509250929050565b6000604082019050611da96000830185611994565b611db66020830184611a4f565b9392505050565b6000604082019050611dd26000830185611a4f565b611ddf6020830184611a4f565b9392505050565b6000604082019050611dfb6000830185611884565b611e086020830184611a4f565b9392505050565b60006040820190508181036000830152611e298185611905565b9050611e386020830184611a4f565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000611e6682611e3f565b611e708185611e4a565b9350611e808185602086016118ca565b611e89816118f4565b840191505092915050565b60006040820190508181036000830152611eae8185611e5b565b9050611ebd6020830184611a4f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112611f1f57611f1e611ef3565b5b80840192508235915067ffffffffffffffff821115611f4157611f40611ef8565b5b602083019250600182023603831315611f5d57611f5c611efd565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f9f8261198a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611fd157611fd0611f65565b5b600182019050919050565b6000819050919050565b6000819050919050565b600061200b61200661200184611fdc565b611fe6565b611a3b565b9050919050565b61201b81611ff0565b82525050565b60006020820190506120366000830184612012565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061208357607f821691505b6020821081036120965761209561203c565b5b50919050565b6120a581611877565b81146120b057600080fd5b50565b6000815190506120c28161209c565b92915050565b6000602082840312156120de576120dd611799565b5b60006120ec848285016120b3565b91505092915050565b6120fe8161198a565b811461210957600080fd5b50565b60008151905061211b816120f5565b92915050565b60006020828403121561213757612136611799565b5b60006121458482850161210c565b91505092915050565b612157816119eb565b811461216257600080fd5b50565b6000815190506121748161214e565b92915050565b6000602082840312156121905761218f611799565b5b600061219e84828501612165565b91505092915050565b6121b081611a22565b81146121bb57600080fd5b50565b6000815190506121cd816121a7565b92915050565b6000602082840312156121e9576121e8611799565b5b60006121f7848285016121be565b91505092915050565b61220981611a87565b811461221457600080fd5b50565b60008151905061222681612200565b92915050565b60006020828403121561224257612241611799565b5b600061225084828501612217565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026122ea7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826122ad565b6122f486836122ad565b95508019841693508086168417925050509392505050565b600061232761232261231d8461198a565b611fe6565b61198a565b9050919050565b6000819050919050565b6123418361230c565b61235561234d8261232e565b8484546122ba565b825550505050565b600090565b61236a61235d565b612375818484612338565b505050565b5b818110156123995761238e600082612362565b60018101905061237b565b5050565b601f8211156123de576123af81612288565b6123b88461229d565b810160208510156123c7578190505b6123db6123d38561229d565b83018261237a565b50505b505050565b600082821c905092915050565b6000612401600019846008026123e3565b1980831691505092915050565b600061241a83836123f0565b9150826002028217905092915050565b61243382611e3f565b67ffffffffffffffff81111561244c5761244b612259565b5b612456825461206b565b61246182828561239d565b600060209050601f8311600181146124945760008415612482578287015190505b61248c858261240e565b8655506124f4565b601f1984166124a286612288565b60005b828110156124ca578489015182556001820191506020850194506020810190506124a5565b868310156124e757848901516124e3601f8916826123f0565b8355505b6001600288020188555050505b505050505050565b82818337600083830152505050565b60006125178385611e4a565b93506125248385846124fc565b61252d836118f4565b840190509392505050565b6000602082019050818103600083015261255381848661250b565b90509392505050565b600080fd5b61256a826118f4565b810181811067ffffffffffffffff8211171561258957612588612259565b5b80604052505050565b600061259c61178f565b90506125a88282612561565b919050565b600067ffffffffffffffff8211156125c8576125c7612259565b5b6125d1826118f4565b9050602081019050919050565b60006125f16125ec846125ad565b612592565b90508281526020810184848401111561260d5761260c61255c565b5b6126188482856118ca565b509392505050565b600082601f83011261263557612634611b11565b5b81516126458482602086016125de565b91505092915050565b60006020828403121561266457612663611799565b5b600082015167ffffffffffffffff8111156126825761268161179e565b5b61268e84828501612620565b91505092915050565b6126a081611a3b565b81146126ab57600080fd5b50565b6000815190506126bd81612697565b92915050565b6000602082840312156126d9576126d8611799565b5b60006126e7848285016126ae565b9150509291505056fea2646970667358221220e63652f00656ef200da8bc88043231443206facc456dbba6de885d1cfabe837b64736f6c63430008150033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.