Source Code
Overview
ETH Balance
0.024997222539252429 ETH
Token Holdings
More Info
ContractCreator
TokenTracker
Multichain Info
N/A
Latest 25 from a total of 274 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Stake | 614453 | 1 hr ago | IN | 0.5 ETH | 0.0045183 | ||||
Stake | 614417 | 1 hr ago | IN | 0.5 ETH | 0.00393778 | ||||
Stake | 614380 | 1 hr ago | IN | 1 ETH | 0.0045183 | ||||
Stake | 614261 | 2 hrs ago | IN | 0.5 ETH | 0.00393778 | ||||
Stake | 614236 | 2 hrs ago | IN | 0.5 ETH | 0.00393778 | ||||
Stake | 614189 | 2 hrs ago | IN | 0.5 ETH | 0.00393778 | ||||
Request Exit | 613528 | 4 hrs ago | IN | 0 ETH | 0.00063327 | ||||
Stake | 613527 | 4 hrs ago | IN | 0.0525856 ETH | 0.00033845 | ||||
Request Exit | 613526 | 4 hrs ago | IN | 0 ETH | 0.00063995 | ||||
Request Exit | 613484 | 4 hrs ago | IN | 0 ETH | 0.00060639 | ||||
Stake | 613483 | 4 hrs ago | IN | 0.01 ETH | 0.00036453 | ||||
Request Exit | 613432 | 4 hrs ago | IN | 0 ETH | 0.0006301 | ||||
Stake | 613429 | 4 hrs ago | IN | 0.005 ETH | 0.00045763 | ||||
Multi Claim | 613234 | 5 hrs ago | IN | 0 ETH | 0.00020987 | ||||
Stake | 613154 | 5 hrs ago | IN | 0.006 ETH | 0.00035652 | ||||
Stake | 613058 | 6 hrs ago | IN | 0.005476 ETH | 0.00034175 | ||||
Stake | 613047 | 6 hrs ago | IN | 0.00522 ETH | 0.00044894 | ||||
Request Exit | 612944 | 6 hrs ago | IN | 0 ETH | 0.00065901 | ||||
Stake | 612485 | 8 hrs ago | IN | 0.01234567 ETH | 0.00052533 | ||||
Stake | 612428 | 8 hrs ago | IN | 0.005 ETH | 0.00042731 | ||||
Stake | 612195 | 9 hrs ago | IN | 0.005 ETH | 0.00036504 | ||||
Stake | 612176 | 9 hrs ago | IN | 0.0050083 ETH | 0.00034852 | ||||
Request Exit | 612140 | 9 hrs ago | IN | 0 ETH | 0.00061524 | ||||
Request Exit | 612047 | 9 hrs ago | IN | 0 ETH | 0.00063504 | ||||
Stake | 612033 | 9 hrs ago | IN | 0.0058 ETH | 0.00034217 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Onv Pool Shares ... | 614453 | 1 hr ago | 0 ETH | ||||
Onv Pool Shares ... | 614453 | 1 hr ago | 0 ETH | ||||
Deposit | 614453 | 1 hr ago | 0.49995246 ETH | ||||
Total Underlying... | 614453 | 1 hr ago | 0 ETH | ||||
Total Supply | 614453 | 1 hr ago | 0 ETH | ||||
Total Underlying... | 614453 | 1 hr ago | 0 ETH | ||||
Total Supply | 614453 | 1 hr ago | 0 ETH | ||||
Total Supply | 614453 | 1 hr ago | 0 ETH | ||||
Total Underlying... | 614453 | 1 hr ago | 0 ETH | ||||
Total Supply | 614453 | 1 hr ago | 0 ETH | ||||
Total Underlying... | 614453 | 1 hr ago | 0 ETH | ||||
Total Underlying... | 614453 | 1 hr ago | 0 ETH | ||||
Total Supply | 614453 | 1 hr ago | 0 ETH | ||||
Total Underlying... | 614453 | 1 hr ago | 0 ETH | ||||
Total Supply | 614453 | 1 hr ago | 0 ETH | ||||
Total Underlying... | 614453 | 1 hr ago | 0 ETH | ||||
Total Supply | 614453 | 1 hr ago | 0 ETH | ||||
Stake | 614453 | 1 hr ago | 0.5 ETH | ||||
Deposit | 614417 | 1 hr ago | 0.49995246 ETH | ||||
Total Underlying... | 614417 | 1 hr ago | 0 ETH | ||||
Total Supply | 614417 | 1 hr ago | 0 ETH | ||||
Total Underlying... | 614417 | 1 hr ago | 0 ETH | ||||
Total Supply | 614417 | 1 hr ago | 0 ETH | ||||
Total Supply | 614417 | 1 hr ago | 0 ETH | ||||
Total Underlying... | 614417 | 1 hr ago | 0 ETH |
Loading...
Loading
Contract Name:
TUPProxy
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1 // SPDX-FileCopyrightText: 2023 Kiln <[email protected]> // // ██╗ ██╗██╗██╗ ███╗ ██╗ // ██║ ██╔╝██║██║ ████╗ ██║ // █████╔╝ ██║██║ ██╔██╗ ██║ // ██╔═██╗ ██║██║ ██║╚██╗██║ // ██║ ██╗██║███████╗██║ ╚████║ // ╚═╝ ╚═╝╚═╝╚══════╝╚═╝ ╚═══╝ // pragma solidity >=0.8.17; import "openzeppelin-contracts/proxy/ERC1967/ERC1967Proxy.sol"; import "./Freezable.sol"; /// @title Openzeppelin Transparent Upgradeable Proxy (with virtual external upgrade methods) contract TransparentUpgradeableProxy is ERC1967Proxy { /** * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}. */ constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) { _changeAdmin(admin_); } /** * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin. */ // slither-disable-next-line incorrect-modifier modifier ifAdmin() { if (msg.sender == _getAdmin()) { _; } else { _fallback(); } } /** * @dev Returns the current admin. * * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. * * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103` */ function admin() external ifAdmin returns (address admin_) { admin_ = _getAdmin(); } /** * @dev Returns the current implementation. * * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. * * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` */ function implementation() external ifAdmin returns (address implementation_) { implementation_ = _implementation(); } /** * @dev Changes the admin of the proxy. * * Emits an {AdminChanged} event. * * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}. */ function changeAdmin(address newAdmin) external virtual ifAdmin { _changeAdmin(newAdmin); } /** * @dev Upgrade the implementation of the proxy. * * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}. */ function upgradeTo(address newImplementation) external virtual ifAdmin { _upgradeToAndCall(newImplementation, bytes(""), false); } /** * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the * proxied contract. * * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}. */ function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin { _upgradeToAndCall(newImplementation, data, true); } /** * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}. */ function _beforeFallback() internal virtual override { require(msg.sender != _getAdmin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target"); super._beforeFallback(); } } /// @title TUPProxy (Transparent Upgradeable Pausable Proxy) /// @author mortimr @ Kiln /// @notice This contract extends the Transparent Upgradeable proxy and adds a system wide pause feature. /// When the system is paused, the fallback will fail no matter what calls are made. contract TUPProxy is TransparentUpgradeableProxy, Freezable { /// @dev EIP1967 slot to store the pause status value. bytes32 private constant _PAUSE_SLOT = bytes32(uint256(keccak256("eip1967.proxy.pause")) - 1); /// @dev EIP1967 slot to store the pauser address value. bytes32 private constant _PAUSER_SLOT = bytes32(uint256(keccak256("eip1967.proxy.pauser")) - 1); /// @notice Emitted when the proxy dedicated pauser is changed. /// @param previousPauser The address of the previous pauser /// @param newPauser The address of the new pauser event PauserChanged(address previousPauser, address newPauser); /// @notice Thrown when a call was attempted and the proxy is paused. error CallWhenPaused(); // slither-disable-next-line incorrect-modifier modifier ifAdminOrPauser() { if (msg.sender == _getAdmin() || msg.sender == _getPauser()) { _; } else { _fallback(); } } /// @param _logic The address of the implementation contract /// @param admin_ The address of the admin account able to pause and upgrade the implementation /// @param _data Extra data use to perform atomic initializations constructor(address _logic, address admin_, bytes memory _data) payable TransparentUpgradeableProxy(_logic, admin_, _data) {} /// @notice Retrieves Paused state. /// @return Paused state function paused() external ifAdminOrPauser returns (bool) { return StorageSlot.getBooleanSlot(_PAUSE_SLOT).value; } /// @notice Pauses system. function pause() external ifAdminOrPauser notFrozen { StorageSlot.getBooleanSlot(_PAUSE_SLOT).value = true; } /// @notice Unpauses system. function unpause() external ifAdmin notFrozen { StorageSlot.getBooleanSlot(_PAUSE_SLOT).value = false; } /// @notice Sets the freeze timeout. function freeze(uint256 freezeTimeout) external ifAdmin { _freeze(freezeTimeout); } /// @notice Cancels the freeze process. function cancelFreeze() external ifAdmin { _cancelFreeze(); } /// @notice Retrieve the freeze status. /// @return True if frozen function frozen() external ifAdmin returns (bool) { return _isFrozen(); } /// @notice Retrieve the freeze timestamp. /// @return The freeze timestamp function freezeTime() external ifAdmin returns (uint256) { return _freezeTime(); } /// @notice Retrieve the dedicated pauser address. /// @return The pauser address function pauser() external ifAdminOrPauser returns (address) { return _getPauser(); } /// @notice Changes the dedicated pauser address. /// @dev Not callable when frozen /// @param newPauser The new pauser address function changePauser(address newPauser) external ifAdmin notFrozen { emit PauserChanged(_getPauser(), newPauser); _changePauser(newPauser); } /// @notice Changed the proxy admin. /// @dev Not callable when frozen function changeAdmin(address newAdmin) external override ifAdmin notFrozen { _changeAdmin(newAdmin); } /// @notice Performs an upgrade without reinitialization. /// @param newImplementation The new implementation address function upgradeTo(address newImplementation) external override ifAdmin notFrozen { _upgradeToAndCall(newImplementation, bytes(""), false); } /// @notice Performs an upgrade with reinitialization. /// @param newImplementation The new implementation address /// @param data The calldata to use atomically after the implementation upgrade function upgradeToAndCall(address newImplementation, bytes calldata data) external payable override ifAdmin notFrozen { _upgradeToAndCall(newImplementation, data, true); } /// @dev Internal utility to retrieve the dedicated pauser from storage, /// @return The pauser address function _getPauser() internal view returns (address) { return StorageSlot.getAddressSlot(_PAUSER_SLOT).value; } /// @dev Internal utility to change the dedicated pauser. /// @param newPauser The new pauser address function _changePauser(address newPauser) internal { StorageSlot.getAddressSlot(_PAUSER_SLOT).value = newPauser; } /// @dev Overrides the fallback method to check if system is not paused before. /// @dev Address Zero is allowed to perform calls even if system is paused. This allows /// view functions to be called when the system is paused as rpc providers can easily /// set the sender address to zero. // slither-disable-next-line timestamp function _beforeFallback() internal override { if ((!StorageSlot.getBooleanSlot(_PAUSE_SLOT).value || _isFrozen()) || msg.sender == address(0)) { super._beforeFallback(); } else { revert CallWhenPaused(); } } /// @dev Internal utility to retrieve the account allowed to freeze the contract. /// @return The freezer account function _getFreezer() internal view override returns (address) { return _getAdmin(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol) pragma solidity ^0.8.0; import "../Proxy.sol"; import "./ERC1967Upgrade.sol"; /** * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an * implementation address that can be changed. This address is stored in storage in the location specified by * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the * implementation behind the proxy. */ contract ERC1967Proxy is Proxy, ERC1967Upgrade { /** * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`. * * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded * function call, and allows initializing the storage of the proxy like a Solidity constructor. */ constructor(address _logic, bytes memory _data) payable { _upgradeToAndCall(_logic, _data, false); } /** * @dev Returns the current implementation address. */ function _implementation() internal view virtual override returns (address impl) { return ERC1967Upgrade._getImplementation(); } }
// SPDX-License-Identifier: BUSL-1.1 // SPDX-FileCopyrightText: 2023 Kiln <[email protected]> // // ██╗ ██╗██╗██╗ ███╗ ██╗ // ██║ ██╔╝██║██║ ████╗ ██║ // █████╔╝ ██║██║ ██╔██╗ ██║ // ██╔═██╗ ██║██║ ██║╚██╗██║ // ██║ ██╗██║███████╗██║ ╚████║ // ╚═╝ ╚═╝╚═╝╚══════╝╚═╝ ╚═══╝ // pragma solidity >=0.8.17; // For some unexplainable and mysterious reason, adding this line would make slither crash // This is the reason why we are not using our own unstructured storage libs in this contract // (while the libs work properly in a lot of contracts without slither having any issue with it) // import "./types/uint256.sol"; import "./libs/LibErrors.sol"; import "./libs/LibConstant.sol"; import "openzeppelin-contracts/utils/StorageSlot.sol"; /// @title Freezable /// @author mortimr @ Kiln /// @dev Unstructured Storage Friendly /// @notice The Freezable contract is used to add a freezing capability to admin related actions. /// The goal would be to ossify an implementation after a certain amount of time. // slither-disable-next-line unimplemented-functions abstract contract Freezable { /// @notice Thrown when a call happened while it was forbidden when frozen. error Frozen(); /// @notice Thrown when the provided timeout value is lower than 100 days. /// @param providedValue The user provided value /// @param minimumValue The minimum allowed value error FreezeTimeoutTooLow(uint256 providedValue, uint256 minimumValue); /// @notice Emitted when the freeze timeout is changed. /// @param freezeTime The timestamp after which the contract will be frozen event SetFreezeTime(uint256 freezeTime); /// @dev This is the keccak-256 hash of "freezable.freeze_timestamp" subtracted by 1. bytes32 private constant _FREEZE_TIMESTAMP_SLOT = 0x04b06dd5becaad633b58f99e01f1e05103eff5a573d10d18c9baf1bc4e6bfd3a; /// @dev Only callable by the freezer account. modifier onlyFreezer() { _onlyFreezer(); _; } /// @dev Only callable when not frozen. modifier notFrozen() { _notFrozen(); _; } /// @dev Override and set it to return the address to consider as the freezer. /// @return The freezer address // slither-disable-next-line dead-code function _getFreezer() internal view virtual returns (address); /// @dev Retrieve the freeze status. /// @return True if contract is frozen // slither-disable-next-line dead-code,timestamp function _isFrozen() internal view returns (bool) { uint256 freezeTime_ = _freezeTime(); return (freezeTime_ > 0 && block.timestamp >= freezeTime_); } /// @dev Retrieve the freeze timestamp. /// @return The freeze timestamp // slither-disable-next-line dead-code function _freezeTime() internal view returns (uint256) { return StorageSlot.getUint256Slot(_FREEZE_TIMESTAMP_SLOT).value; } /// @dev Internal utility to set the freeze timestamp. /// @param freezeTime The new freeze timestamp // slither-disable-next-line dead-code function _setFreezeTime(uint256 freezeTime) internal { StorageSlot.getUint256Slot(_FREEZE_TIMESTAMP_SLOT).value = freezeTime; emit SetFreezeTime(freezeTime); } /// @dev Internal utility to revert if caller is not freezer. // slither-disable-next-line dead-code function _onlyFreezer() internal view { if (msg.sender != _getFreezer()) { revert LibErrors.Unauthorized(msg.sender, _getFreezer()); } } /// @dev Internal utility to revert if contract is frozen. // slither-disable-next-line dead-code function _notFrozen() internal view { if (_isFrozen()) { revert Frozen(); } } /// @dev Internal utility to start the freezing procedure. /// @param freezeTimeout Timeout to add to current timestamp to define freeze timestamp // slither-disable-next-line dead-code function _freeze(uint256 freezeTimeout) internal { _notFrozen(); _onlyFreezer(); if (freezeTimeout < LibConstant.MINIMUM_FREEZE_TIMEOUT) { revert FreezeTimeoutTooLow(freezeTimeout, LibConstant.MINIMUM_FREEZE_TIMEOUT); } // overflow would revert uint256 now_ = block.timestamp; uint256 freezeTime_ = now_ + freezeTimeout; _setFreezeTime(freezeTime_); } /// @dev Internal utility to cancel the freezing procedure. // slither-disable-next-line dead-code function _cancelFreeze() internal { _notFrozen(); _onlyFreezer(); _setFreezeTime(0); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol) pragma solidity ^0.8.0; /** * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to * be specified by overriding the virtual {_implementation} function. * * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a * different contract through the {_delegate} function. * * The success and return data of the delegated call will be returned back to the caller of the proxy. */ abstract contract Proxy { /** * @dev Delegates the current call to `implementation`. * * This function does not return to its internal call site, it will return directly to the external caller. */ function _delegate(address implementation) internal virtual { assembly { // Copy msg.data. We take full control of memory in this inline assembly // block because it will not return to Solidity code. We overwrite the // Solidity scratch pad at memory position 0. calldatacopy(0, 0, calldatasize()) // Call the implementation. // out and outsize are 0 because we don't know the size yet. let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) // Copy the returned data. returndatacopy(0, 0, returndatasize()) switch result // delegatecall returns 0 on error. case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } /** * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function * and {_fallback} should delegate. */ function _implementation() internal view virtual returns (address); /** * @dev Delegates the current call to the address returned by `_implementation()`. * * This function does not return to its internal call site, it will return directly to the external caller. */ function _fallback() internal virtual { _beforeFallback(); _delegate(_implementation()); } /** * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other * function in the contract matches the call data. */ fallback() external payable virtual { _fallback(); } /** * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data * is empty. */ receive() external payable virtual { _fallback(); } /** * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback` * call, or as part of the Solidity `fallback` or `receive` functions. * * If overridden should call `super._beforeFallback()`. */ function _beforeFallback() internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol) pragma solidity ^0.8.2; import "../beacon/IBeacon.sol"; import "../../interfaces/draft-IERC1822.sol"; import "../../utils/Address.sol"; import "../../utils/StorageSlot.sol"; /** * @dev This abstract contract provides getters and event emitting update functions for * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. * * _Available since v4.1._ */ abstract contract ERC1967Upgrade { // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1 bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143; /** * @dev Storage slot with the address of the current implementation. * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; /** * @dev Emitted when the implementation is upgraded. */ event Upgraded(address indexed implementation); /** * @dev Returns the current implementation address. */ function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } /** * @dev Stores a new address in the EIP1967 implementation slot. */ function _setImplementation(address newImplementation) private { require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract"); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } /** * @dev Perform implementation upgrade * * Emits an {Upgraded} event. */ function _upgradeTo(address newImplementation) internal { _setImplementation(newImplementation); emit Upgraded(newImplementation); } /** * @dev Perform implementation upgrade with additional setup call. * * Emits an {Upgraded} event. */ function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal { _upgradeTo(newImplementation); if (data.length > 0 || forceCall) { Address.functionDelegateCall(newImplementation, data); } } /** * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call. * * Emits an {Upgraded} event. */ function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal { // Upgrades from old implementations will perform a rollback test. This test requires the new // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing // this special case will break upgrade paths from old UUPS implementation to new ones. if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) { _setImplementation(newImplementation); } else { try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) { require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID"); } catch { revert("ERC1967Upgrade: new implementation is not UUPS"); } _upgradeToAndCall(newImplementation, data, forceCall); } } /** * @dev Storage slot with the admin of the contract. * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; /** * @dev Emitted when the admin account has changed. */ event AdminChanged(address previousAdmin, address newAdmin); /** * @dev Returns the current admin. */ function _getAdmin() internal view returns (address) { return StorageSlot.getAddressSlot(_ADMIN_SLOT).value; } /** * @dev Stores a new address in the EIP1967 admin slot. */ function _setAdmin(address newAdmin) private { require(newAdmin != address(0), "ERC1967: new admin is the zero address"); StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin; } /** * @dev Changes the admin of the proxy. * * Emits an {AdminChanged} event. */ function _changeAdmin(address newAdmin) internal { emit AdminChanged(_getAdmin(), newAdmin); _setAdmin(newAdmin); } /** * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor. */ bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; /** * @dev Emitted when the beacon is upgraded. */ event BeaconUpgraded(address indexed beacon); /** * @dev Returns the current beacon. */ function _getBeacon() internal view returns (address) { return StorageSlot.getAddressSlot(_BEACON_SLOT).value; } /** * @dev Stores a new beacon in the EIP1967 beacon slot. */ function _setBeacon(address newBeacon) private { require(Address.isContract(newBeacon), "ERC1967: new beacon is not a contract"); require( Address.isContract(IBeacon(newBeacon).implementation()), "ERC1967: beacon implementation is not a contract" ); StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon; } /** * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that). * * Emits a {BeaconUpgraded} event. */ function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal { _setBeacon(newBeacon); emit BeaconUpgraded(newBeacon); if (data.length > 0 || forceCall) { Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data); } } }
// SPDX-License-Identifier: BUSL-1.1 // SPDX-FileCopyrightText: 2023 Kiln <[email protected]> // // ██╗ ██╗██╗██╗ ███╗ ██╗ // ██║ ██╔╝██║██║ ████╗ ██║ // █████╔╝ ██║██║ ██╔██╗ ██║ // ██╔═██╗ ██║██║ ██║╚██╗██║ // ██║ ██╗██║███████╗██║ ╚████║ // ╚═╝ ╚═╝╚═╝╚══════╝╚═╝ ╚═══╝ // pragma solidity >=0.8.17; library LibErrors { error Unauthorized(address account, address expected); error InvalidZeroAddress(); error InvalidNullValue(); error InvalidBPSValue(); error InvalidEmptyString(); }
// SPDX-License-Identifier: BUSL-1.1 // SPDX-FileCopyrightText: 2023 Kiln <[email protected]> // // ██╗ ██╗██╗██╗ ███╗ ██╗ // ██║ ██╔╝██║██║ ████╗ ██║ // █████╔╝ ██║██║ ██╔██╗ ██║ // ██╔═██╗ ██║██║ ██║╚██╗██║ // ██║ ██╗██║███████╗██║ ╚████║ // ╚═╝ ╚═╝╚═╝╚══════╝╚═╝ ╚═══╝ // pragma solidity >=0.8.17; library LibConstant { /// @dev The basis points value representing 100%. uint256 internal constant BASIS_POINTS_MAX = 10_000; /// @dev The size of a deposit to activate a validator. uint256 internal constant DEPOSIT_SIZE = 32 ether; /// @dev The minimum freeze timeout before freeze is active. uint256 internal constant MINIMUM_FREEZE_TIMEOUT = 100 days; /// @dev Address used to represent ETH when an address is required to identify an asset. address internal constant ETHER = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol) pragma solidity ^0.8.0; /** * @dev Library for reading and writing primitive types to specific storage slots. * * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. * This library helps with reading and writing to such slots without the need for inline assembly. * * The functions in this library return Slot structs that contain a `value` member that can be used to read or write. * * Example usage to set ERC1967 implementation slot: * ```solidity * contract ERC1967 { * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; * * function _getImplementation() internal view returns (address) { * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; * } * * function _setImplementation(address newImplementation) internal { * require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract"); * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; * } * } * ``` * * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._ */ library StorageSlot { struct AddressSlot { address value; } struct BooleanSlot { bool value; } struct Bytes32Slot { bytes32 value; } struct Uint256Slot { uint256 value; } /** * @dev Returns an `AddressSlot` with member `value` located at `slot`. */ function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `BooleanSlot` with member `value` located at `slot`. */ function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `Bytes32Slot` with member `value` located at `slot`. */ function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `Uint256Slot` with member `value` located at `slot`. */ function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol) pragma solidity ^0.8.0; /** * @dev This is the interface that {BeaconProxy} expects of its beacon. */ interface IBeacon { /** * @dev Must return an address that can be used as a delegate call target. * * {BeaconProxy} will check that this address is a contract. */ function implementation() external view returns (address); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol) pragma solidity ^0.8.0; /** * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified * proxy whose upgrades are fully controlled by the current implementation. */ interface IERC1822Proxiable { /** * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation * address. * * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this * function revert if invoked through a proxy. */ function proxiableUUID() external view returns (bytes32); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } }
{ "remappings": [ "deploy.sol/=lib/deploy.sol/src/", "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-gas-snapshot/=lib/forge-gas-snapshot/src/", "forge-std/=lib/forge-std/src/", "murky/=lib/murky/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/", "solmate/=lib/deploy.sol/lib/solmate/src/", "vsuite/=lib/vsuite/src/", "vsuite.test/=lib/vsuite/test/", "prb-math/=lib/vsuite/lib/utils.sol/lib/prb-math/contracts/", "utils.sol.test/=lib/vsuite/lib/utils.sol/test/", "utils.sol/=lib/vsuite/lib/utils.sol/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/" ], "optimizer": { "enabled": false, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "evmVersion": "london", "viaIR": false }
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"CallWhenPaused","type":"error"},{"inputs":[{"internalType":"uint256","name":"providedValue","type":"uint256"},{"internalType":"uint256","name":"minimumValue","type":"uint256"}],"name":"FreezeTimeoutTooLow","type":"error"},{"inputs":[],"name":"Frozen","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"expected","type":"address"}],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousPauser","type":"address"},{"indexed":false,"internalType":"address","name":"newPauser","type":"address"}],"name":"PauserChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"freezeTime","type":"uint256"}],"name":"SetFreezeTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelFreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPauser","type":"address"}],"name":"changePauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"freezeTimeout","type":"uint256"}],"name":"freeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"frozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052604051620025443803806200254483398181016040528101906200002991906200074e565b828282828162000042828260006200006160201b60201c565b50506200005582620000a460201b60201c565b50505050505062000a90565b62000072836200010260201b60201c565b600082511180620000805750805b156200009f576200009d83836200015960201b62000a261760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000d56200018f60201b60201c565b82604051620000e6929190620007da565b60405180910390a1620000ff81620001f360201b60201c565b50565b6200011381620002e360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200018783836040518060600160405280602781526020016200251d60279139620003b960201b60201c565b905092915050565b6000620001ca7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b6200044b60201b62000a531760201c565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000265576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025c906200088e565b60405180910390fd5b806200029f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b6200044b60201b62000a531760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620002f9816200045560201b62000a5d1760201c565b6200033b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003329062000926565b60405180910390fd5b80620003757f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200044b60201b62000a531760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620003e5919062000995565b600060405180830381855af49150503d806000811462000422576040519150601f19603f3d011682016040523d82523d6000602084013e62000427565b606091505b509150915062000440868383876200047860201b60201c565b925050509392505050565b6000819050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315620004e8576000835103620004df576200049c856200045560201b60201c565b620004de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004d590620009fe565b60405180910390fd5b5b829050620004fb565b620004fa83836200050360201b60201c565b5b949350505050565b600082511115620005175781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054d919062000a6c565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000597826200056a565b9050919050565b620005a9816200058a565b8114620005b557600080fd5b50565b600081519050620005c9816200059e565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200062482620005d9565b810181811067ffffffffffffffff82111715620006465762000645620005ea565b5b80604052505050565b60006200065b62000556565b905062000669828262000619565b919050565b600067ffffffffffffffff8211156200068c576200068b620005ea565b5b6200069782620005d9565b9050602081019050919050565b60005b83811015620006c4578082015181840152602081019050620006a7565b60008484015250505050565b6000620006e7620006e1846200066e565b6200064f565b905082815260208101848484011115620007065762000705620005d4565b5b62000713848285620006a4565b509392505050565b600082601f830112620007335762000732620005cf565b5b815162000745848260208601620006d0565b91505092915050565b6000806000606084860312156200076a576200076962000560565b5b60006200077a86828701620005b8565b93505060206200078d86828701620005b8565b925050604084015167ffffffffffffffff811115620007b157620007b062000565565b5b620007bf868287016200071b565b9150509250925092565b620007d4816200058a565b82525050565b6000604082019050620007f16000830185620007c9565b620008006020830184620007c9565b9392505050565b600082825260208201905092915050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200087660268362000807565b9150620008838262000818565b604082019050919050565b60006020820190508181036000830152620008a98162000867565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006200090e602d8362000807565b91506200091b82620008b0565b604082019050919050565b600060208201905081810360008301526200094181620008ff565b9050919050565b600081519050919050565b600081905092915050565b60006200096b8262000948565b62000977818562000953565b935062000989818560208601620006a4565b80840191505092915050565b6000620009a382846200095e565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000620009e6601d8362000807565b9150620009f382620009ae565b602082019050919050565b6000602082019050818103600083015262000a1981620009d7565b9050919050565b600081519050919050565b600062000a388262000a20565b62000a44818562000807565b935062000a56818560208601620006a4565b62000a6181620005d9565b840191505092915050565b6000602082019050818103600083015262000a88818462000a2b565b905092915050565b611a7d8062000aa06000396000f3fe6080604052600436106100e15760003560e01c80638456cb591161007f578063bad490dc11610059578063bad490dc1461026b578063d7a78db814610282578063f851a440146102ab578063fd7e1bee146102d6576100f0565b80638456cb59146102005780638f283970146102175780639fd0506d14610240576100f0565b80633f4ba83a116100bb5780633f4ba83a146101775780634f1ef2861461018e5780635c60da1b146101aa5780635c975abb146101d5576100f0565b8063054f7d9c146100fa5780632cd271e7146101255780633659cfe61461014e576100f0565b366100f0576100ee610301565b005b6100f8610301565b005b34801561010657600080fd5b5061010f61031b565b60405161011c91906113b3565b60405180910390f35b34801561013157600080fd5b5061014c60048036038101906101479190611436565b610372565b005b34801561015a57600080fd5b5061017560048036038101906101709190611436565b61040e565b005b34801561018357600080fd5b5061018c61047c565b005b6101a860048036038101906101a391906114c8565b610525565b005b3480156101b657600080fd5b506101bf6105ca565b6040516101cc9190611537565b60405180910390f35b3480156101e157600080fd5b506101ea610621565b6040516101f791906113b3565b60405180910390f35b34801561020c57600080fd5b506102156106fa565b005b34801561022357600080fd5b5061023e60048036038101906102399190611436565b6107e1565b005b34801561024c57600080fd5b5061025561083d565b6040516102629190611537565b60405180910390f35b34801561027757600080fd5b506102806108d2565b005b34801561028e57600080fd5b506102a960048036038101906102a49190611588565b610924565b005b3480156102b757600080fd5b506102c0610978565b6040516102cd9190611537565b60405180910390f35b3480156102e257600080fd5b506102eb6109cf565b6040516102f891906115c4565b60405180910390f35b610309610a80565b610319610314610b59565b610b68565b565b6000610325610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036103665761035f610be5565b905061036f565b61036e610301565b5b90565b61037a610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610402576103b4610c08565b7f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a8116103dd610c49565b826040516103ec9291906115df565b60405180910390a16103fd81610caf565b61040b565b61040a610301565b5b50565b610416610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361047057610450610c08565b61046b81604051806020016040528060008152506000610d2f565b610479565b610478610301565b5b50565b610484610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361051a576104be610c08565b60006104fb60017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c6104f39190611637565b60001b610d5b565b60000160006101000a81548160ff021916908315150217905550610523565b610522610301565b5b565b61052d610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036105bc57610567610c08565b6105b78383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001610d2f565b6105c5565b6105c4610301565b5b505050565b60006105d4610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036106155761060e610b59565b905061061e565b61061d610301565b5b90565b600061062b610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806106965750610667610c49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156106ee576106d660017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c6106ce9190611637565b60001b610d5b565b60000160009054906101000a900460ff1690506106f7565b6106f6610301565b5b90565b610702610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061076d575061073e610c49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156107d65761077a610c08565b60016107b760017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c6107af9190611637565b60001b610d5b565b60000160006101000a81548160ff0219169083151502179055506107df565b6107de610301565b5b565b6107e9610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361083157610823610c08565b61082c81610d65565b61083a565b610839610301565b5b50565b6000610847610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108b25750610883610c49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156108c6576108bf610c49565b90506108cf565b6108ce610301565b5b90565b6108da610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361091957610914610db1565b610922565b610921610301565b5b565b61092c610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361096c5761096781610dcd565b610975565b610974610301565b5b50565b6000610982610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036109c3576109bc610b8e565b90506109cc565b6109cb610301565b5b90565b60006109d9610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610a1a57610a13610e4d565b9050610a23565b610a22610301565b5b90565b6060610a4b8383604051806060016040528060278152602001611a2160279139610e84565b905092915050565b6000819050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b610abb60017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c610ab39190611637565b60001b610d5b565b60000160009054906101000a900460ff161580610adc5750610adb610be5565b5b80610b135750600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15610b2557610b20610f0a565b610b57565b6040517f2514f7d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610b63610f89565b905090565b3660008037600080366000845af43d6000803e8060008114610b89573d6000f35b3d6000fd5b6000610bbc7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610a53565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080610bf0610e4d565b9050600081118015610c025750804210155b91505090565b610c10610be5565b15610c47576040517fa8cab3d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610c8660017f41a07f15d150fca84be71d927adb8e4a8a0de6ebcadef3119141487ff482f0f260001c610c7e9190611637565b60001b610a53565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80610ceb60017f41a07f15d150fca84be71d927adb8e4a8a0de6ebcadef3119141487ff482f0f260001c610ce39190611637565b60001b610a53565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d3883610fe0565b600082511180610d455750805b15610d5657610d548383610a26565b505b505050565b6000819050919050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610d8e610b8e565b82604051610d9d9291906115df565b60405180910390a1610dae8161102f565b50565b610db9610c08565b610dc161110f565b610dcb6000611191565b565b610dd5610c08565b610ddd61110f565b6283d600811015610e2a57806283d6006040517fd96242ca000000000000000000000000000000000000000000000000000000008152600401610e2192919061166b565b60405180910390fd5b600042905060008282610e3d9190611694565b9050610e4881611191565b505050565b6000610e7b7f04b06dd5becaad633b58f99e01f1e05103eff5a573d10d18c9baf1bc4e6bfd3a60001b6111ff565b60000154905090565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051610eae9190611739565b600060405180830381855af49150503d8060008114610ee9576040519150601f19603f3d011682016040523d82523d6000602084013e610eee565b606091505b5091509150610eff86838387611209565b925050509392505050565b610f12610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f76906117f9565b60405180910390fd5b610f8761127e565b565b6000610fb77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610a53565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fe981611280565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361109e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110959061188b565b60405180910390fd5b806110cb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610a53565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611117611339565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461118f5733611152611339565b6040517f295a81c10000000000000000000000000000000000000000000000000000000081526004016111869291906115df565b60405180910390fd5b565b806111be7f04b06dd5becaad633b58f99e01f1e05103eff5a573d10d18c9baf1bc4e6bfd3a60001b6111ff565b600001819055507f7413b2ccac0d914f9764525af0b89a12aaf913cb0de2b18adb85e22b80c86ca0816040516111f491906115c4565b60405180910390a150565b6000819050919050565b6060831561126b5760008351036112635761122385610a5d565b611262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611259906118f7565b60405180910390fd5b5b829050611276565b6112758383611348565b5b949350505050565b565b61128981610a5d565b6112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90611989565b60405180910390fd5b806112f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610a53565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611343610b8e565b905090565b60008251111561135b5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f91906119fe565b60405180910390fd5b60008115159050919050565b6113ad81611398565b82525050565b60006020820190506113c860008301846113a4565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611403826113d8565b9050919050565b611413816113f8565b811461141e57600080fd5b50565b6000813590506114308161140a565b92915050565b60006020828403121561144c5761144b6113ce565b5b600061145a84828501611421565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261148857611487611463565b5b8235905067ffffffffffffffff8111156114a5576114a4611468565b5b6020830191508360018202830111156114c1576114c061146d565b5b9250929050565b6000806000604084860312156114e1576114e06113ce565b5b60006114ef86828701611421565b935050602084013567ffffffffffffffff8111156115105761150f6113d3565b5b61151c86828701611472565b92509250509250925092565b611531816113f8565b82525050565b600060208201905061154c6000830184611528565b92915050565b6000819050919050565b61156581611552565b811461157057600080fd5b50565b6000813590506115828161155c565b92915050565b60006020828403121561159e5761159d6113ce565b5b60006115ac84828501611573565b91505092915050565b6115be81611552565b82525050565b60006020820190506115d960008301846115b5565b92915050565b60006040820190506115f46000830185611528565b6116016020830184611528565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061164282611552565b915061164d83611552565b925082820390508181111561166557611664611608565b5b92915050565b600060408201905061168060008301856115b5565b61168d60208301846115b5565b9392505050565b600061169f82611552565b91506116aa83611552565b92508282019050808211156116c2576116c1611608565b5b92915050565b600081519050919050565b600081905092915050565b60005b838110156116fc5780820151818401526020810190506116e1565b60008484015250505050565b6000611713826116c8565b61171d81856116d3565b935061172d8185602086016116de565b80840191505092915050565b60006117458284611708565b915081905092915050565b600082825260208201905092915050565b7f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60008201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760208201527f6574000000000000000000000000000000000000000000000000000000000000604082015250565b60006117e3604283611750565b91506117ee82611761565b606082019050919050565b60006020820190508181036000830152611812816117d6565b9050919050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611875602683611750565b915061188082611819565b604082019050919050565b600060208201905081810360008301526118a481611868565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006118e1601d83611750565b91506118ec826118ab565b602082019050919050565b60006020820190508181036000830152611910816118d4565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000611973602d83611750565b915061197e82611917565b604082019050919050565b600060208201905081810360008301526119a281611966565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006119d0826119a9565b6119da8185611750565b93506119ea8185602086016116de565b6119f3816119b4565b840191505092915050565b60006020820190508181036000830152611a1881846119c5565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220530b2b5f962ad5bc7b115a2ccce61f89851984a2451e481ea65a0b3afb17dd3464736f6c63430008110033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000c7533a09ce5f8bf57a84d4fdbd576dd310949268000000000000000000000000fffff2a646d204fb4ad6fcc4c3c53121491ebf3c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003244538e009000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000aaaaa6288ad901050051f282c48527628219bf5900000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000012546573746e6574205374616b6564204554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b746573744b696c6e45544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000002bb938c0e2073b085c76c410a8371657167b3e1e000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000012368c1dce73224b936271d44f1dd7b8ea0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106100e15760003560e01c80638456cb591161007f578063bad490dc11610059578063bad490dc1461026b578063d7a78db814610282578063f851a440146102ab578063fd7e1bee146102d6576100f0565b80638456cb59146102005780638f283970146102175780639fd0506d14610240576100f0565b80633f4ba83a116100bb5780633f4ba83a146101775780634f1ef2861461018e5780635c60da1b146101aa5780635c975abb146101d5576100f0565b8063054f7d9c146100fa5780632cd271e7146101255780633659cfe61461014e576100f0565b366100f0576100ee610301565b005b6100f8610301565b005b34801561010657600080fd5b5061010f61031b565b60405161011c91906113b3565b60405180910390f35b34801561013157600080fd5b5061014c60048036038101906101479190611436565b610372565b005b34801561015a57600080fd5b5061017560048036038101906101709190611436565b61040e565b005b34801561018357600080fd5b5061018c61047c565b005b6101a860048036038101906101a391906114c8565b610525565b005b3480156101b657600080fd5b506101bf6105ca565b6040516101cc9190611537565b60405180910390f35b3480156101e157600080fd5b506101ea610621565b6040516101f791906113b3565b60405180910390f35b34801561020c57600080fd5b506102156106fa565b005b34801561022357600080fd5b5061023e60048036038101906102399190611436565b6107e1565b005b34801561024c57600080fd5b5061025561083d565b6040516102629190611537565b60405180910390f35b34801561027757600080fd5b506102806108d2565b005b34801561028e57600080fd5b506102a960048036038101906102a49190611588565b610924565b005b3480156102b757600080fd5b506102c0610978565b6040516102cd9190611537565b60405180910390f35b3480156102e257600080fd5b506102eb6109cf565b6040516102f891906115c4565b60405180910390f35b610309610a80565b610319610314610b59565b610b68565b565b6000610325610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036103665761035f610be5565b905061036f565b61036e610301565b5b90565b61037a610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610402576103b4610c08565b7f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a8116103dd610c49565b826040516103ec9291906115df565b60405180910390a16103fd81610caf565b61040b565b61040a610301565b5b50565b610416610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361047057610450610c08565b61046b81604051806020016040528060008152506000610d2f565b610479565b610478610301565b5b50565b610484610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361051a576104be610c08565b60006104fb60017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c6104f39190611637565b60001b610d5b565b60000160006101000a81548160ff021916908315150217905550610523565b610522610301565b5b565b61052d610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036105bc57610567610c08565b6105b78383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001610d2f565b6105c5565b6105c4610301565b5b505050565b60006105d4610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036106155761060e610b59565b905061061e565b61061d610301565b5b90565b600061062b610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806106965750610667610c49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156106ee576106d660017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c6106ce9190611637565b60001b610d5b565b60000160009054906101000a900460ff1690506106f7565b6106f6610301565b5b90565b610702610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061076d575061073e610c49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156107d65761077a610c08565b60016107b760017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c6107af9190611637565b60001b610d5b565b60000160006101000a81548160ff0219169083151502179055506107df565b6107de610301565b5b565b6107e9610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361083157610823610c08565b61082c81610d65565b61083a565b610839610301565b5b50565b6000610847610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108b25750610883610c49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156108c6576108bf610c49565b90506108cf565b6108ce610301565b5b90565b6108da610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361091957610914610db1565b610922565b610921610301565b5b565b61092c610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361096c5761096781610dcd565b610975565b610974610301565b5b50565b6000610982610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036109c3576109bc610b8e565b90506109cc565b6109cb610301565b5b90565b60006109d9610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610a1a57610a13610e4d565b9050610a23565b610a22610301565b5b90565b6060610a4b8383604051806060016040528060278152602001611a2160279139610e84565b905092915050565b6000819050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b610abb60017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c610ab39190611637565b60001b610d5b565b60000160009054906101000a900460ff161580610adc5750610adb610be5565b5b80610b135750600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15610b2557610b20610f0a565b610b57565b6040517f2514f7d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610b63610f89565b905090565b3660008037600080366000845af43d6000803e8060008114610b89573d6000f35b3d6000fd5b6000610bbc7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610a53565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080610bf0610e4d565b9050600081118015610c025750804210155b91505090565b610c10610be5565b15610c47576040517fa8cab3d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610c8660017f41a07f15d150fca84be71d927adb8e4a8a0de6ebcadef3119141487ff482f0f260001c610c7e9190611637565b60001b610a53565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80610ceb60017f41a07f15d150fca84be71d927adb8e4a8a0de6ebcadef3119141487ff482f0f260001c610ce39190611637565b60001b610a53565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d3883610fe0565b600082511180610d455750805b15610d5657610d548383610a26565b505b505050565b6000819050919050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610d8e610b8e565b82604051610d9d9291906115df565b60405180910390a1610dae8161102f565b50565b610db9610c08565b610dc161110f565b610dcb6000611191565b565b610dd5610c08565b610ddd61110f565b6283d600811015610e2a57806283d6006040517fd96242ca000000000000000000000000000000000000000000000000000000008152600401610e2192919061166b565b60405180910390fd5b600042905060008282610e3d9190611694565b9050610e4881611191565b505050565b6000610e7b7f04b06dd5becaad633b58f99e01f1e05103eff5a573d10d18c9baf1bc4e6bfd3a60001b6111ff565b60000154905090565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051610eae9190611739565b600060405180830381855af49150503d8060008114610ee9576040519150601f19603f3d011682016040523d82523d6000602084013e610eee565b606091505b5091509150610eff86838387611209565b925050509392505050565b610f12610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f76906117f9565b60405180910390fd5b610f8761127e565b565b6000610fb77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610a53565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fe981611280565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361109e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110959061188b565b60405180910390fd5b806110cb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610a53565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611117611339565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461118f5733611152611339565b6040517f295a81c10000000000000000000000000000000000000000000000000000000081526004016111869291906115df565b60405180910390fd5b565b806111be7f04b06dd5becaad633b58f99e01f1e05103eff5a573d10d18c9baf1bc4e6bfd3a60001b6111ff565b600001819055507f7413b2ccac0d914f9764525af0b89a12aaf913cb0de2b18adb85e22b80c86ca0816040516111f491906115c4565b60405180910390a150565b6000819050919050565b6060831561126b5760008351036112635761122385610a5d565b611262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611259906118f7565b60405180910390fd5b5b829050611276565b6112758383611348565b5b949350505050565b565b61128981610a5d565b6112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90611989565b60405180910390fd5b806112f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610a53565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611343610b8e565b905090565b60008251111561135b5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f91906119fe565b60405180910390fd5b60008115159050919050565b6113ad81611398565b82525050565b60006020820190506113c860008301846113a4565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611403826113d8565b9050919050565b611413816113f8565b811461141e57600080fd5b50565b6000813590506114308161140a565b92915050565b60006020828403121561144c5761144b6113ce565b5b600061145a84828501611421565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261148857611487611463565b5b8235905067ffffffffffffffff8111156114a5576114a4611468565b5b6020830191508360018202830111156114c1576114c061146d565b5b9250929050565b6000806000604084860312156114e1576114e06113ce565b5b60006114ef86828701611421565b935050602084013567ffffffffffffffff8111156115105761150f6113d3565b5b61151c86828701611472565b92509250509250925092565b611531816113f8565b82525050565b600060208201905061154c6000830184611528565b92915050565b6000819050919050565b61156581611552565b811461157057600080fd5b50565b6000813590506115828161155c565b92915050565b60006020828403121561159e5761159d6113ce565b5b60006115ac84828501611573565b91505092915050565b6115be81611552565b82525050565b60006020820190506115d960008301846115b5565b92915050565b60006040820190506115f46000830185611528565b6116016020830184611528565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061164282611552565b915061164d83611552565b925082820390508181111561166557611664611608565b5b92915050565b600060408201905061168060008301856115b5565b61168d60208301846115b5565b9392505050565b600061169f82611552565b91506116aa83611552565b92508282019050808211156116c2576116c1611608565b5b92915050565b600081519050919050565b600081905092915050565b60005b838110156116fc5780820151818401526020810190506116e1565b60008484015250505050565b6000611713826116c8565b61171d81856116d3565b935061172d8185602086016116de565b80840191505092915050565b60006117458284611708565b915081905092915050565b600082825260208201905092915050565b7f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60008201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760208201527f6574000000000000000000000000000000000000000000000000000000000000604082015250565b60006117e3604283611750565b91506117ee82611761565b606082019050919050565b60006020820190508181036000830152611812816117d6565b9050919050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611875602683611750565b915061188082611819565b604082019050919050565b600060208201905081810360008301526118a481611868565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006118e1601d83611750565b91506118ec826118ab565b602082019050919050565b60006020820190508181036000830152611910816118d4565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000611973602d83611750565b915061197e82611917565b604082019050919050565b600060208201905081810360008301526119a281611966565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006119d0826119a9565b6119da8185611750565b93506119ea8185602086016116de565b6119f3816119b4565b840191505092915050565b60006020820190508181036000830152611a1881846119c5565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220530b2b5f962ad5bc7b115a2ccce61f89851984a2451e481ea65a0b3afb17dd3464736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c7533a09ce5f8bf57a84d4fdbd576dd310949268000000000000000000000000fffff2a646d204fb4ad6fcc4c3c53121491ebf3c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003244538e009000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000aaaaa6288ad901050051f282c48527628219bf5900000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000012546573746e6574205374616b6564204554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b746573744b696c6e45544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000002bb938c0e2073b085c76c410a8371657167b3e1e000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000012368c1dce73224b936271d44f1dd7b8ea0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _logic (address): 0xC7533A09cE5F8bf57a84d4fDbD576Dd310949268
Arg [1] : admin_ (address): 0xFfFff2A646d204FB4aD6FCC4c3c53121491eBF3c
Arg [2] : _data (bytes): 0x4538e009000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000aaaaa6288ad901050051f282c48527628219bf5900000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000012546573746e6574205374616b6564204554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b746573744b696c6e45544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000002bb938c0e2073b085c76c410a8371657167b3e1e000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000012368c1dce73224b936271d44f1dd7b8ea00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000002710
-----Encoded View---------------
30 Constructor Arguments found :
Arg [0] : 000000000000000000000000c7533a09ce5f8bf57a84d4fdbd576dd310949268
Arg [1] : 000000000000000000000000fffff2a646d204fb4ad6fcc4c3c53121491ebf3c
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000324
Arg [4] : 4538e00900000000000000000000000000000000000000000000000000000000
Arg [5] : 0000002000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000014000000000000000000000000000000000000000000000000000000000
Arg [7] : 00000180000000000000000000000000aaaaa6288ad901050051f282c4852762
Arg [8] : 8219bf5900000000000000000000000000000000000000000000000000000000
Arg [9] : 000001c000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000020000000000000000000000000000000000000000000000000000000000
Arg [11] : 0000024000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000028000000000000000000000000000000000000000000000000000000000
Arg [13] : 000002c000000000000000000000000000000000000000000000000000000000
Arg [14] : 000013880000000000000000000000000000000000000000000000000de0b6b3
Arg [15] : a764000000000000000000000000000000000000000000000000000000000000
Arg [16] : 00000012546573746e6574205374616b65642045544800000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [18] : 0000000b746573744b696c6e4554480000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 000000010000000000000000000000002bb938c0e2073b085c76c410a8371657
Arg [21] : 167b3e1e00000000000000000000000000000000000000000000000000000000
Arg [22] : 0000000100000000000000000000000000000000000000000000000000000000
Arg [23] : 000003e800000000000000000000000000000000000000000000000000000000
Arg [24] : 000000010000000000000000000000000000012368c1dce73224b936271d44f1
Arg [25] : dd7b8ea000000000000000000000000000000000000000000000000000000000
Arg [26] : 0000000100000000000000000000000000000000000000000000000000000000
Arg [27] : 0000271000000000000000000000000000000000000000000000000000000000
Arg [28] : 0000000100000000000000000000000000000000000000000000000000000000
Arg [29] : 0000271000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
4422:5250:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2898:11:3;:9;:11::i;:::-;4422:5250:8;;2675:11:3;:9;:11::i;:::-;4422:5250:8;6640:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7248:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7741:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6178:116;;;;;;;;;;;;;:::i;:::-;;8107:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2516:129;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5854:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6018:121;;;;;;;;;;;;;:::i;:::-;;7495:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7005:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6486:73;;;;;;;;;;;;;:::i;:::-;;6341:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1960:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6815:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2322:110:3;2370:17;:15;:17::i;:::-;2397:28;2407:17;:15;:17::i;:::-;2397:9;:28::i;:::-;2322:110::o;6640:85:8:-;6684:4;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;6707:11:::1;:9;:11::i;:::-;6700:18;;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;6640:85;:::o;7248:162::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2353:12:7::1;:10;:12::i;:::-;7331:38:8::2;7345:12;:10;:12::i;:::-;7359:9;7331:38;;;;;;;:::i;:::-;;;;;;;;7379:24;7393:9;7379:13;:24::i;:::-;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;7248:162;:::o;7741:153::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2353:12:7::1;:10;:12::i;:::-;7833:54:8::2;7851:17;7870:9;;;;;;;;;;;::::0;7881:5:::2;7833:17;:54::i;:::-;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;7741:153;:::o;6178:116::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2353:12:7::1;:10;:12::i;:::-;6282:5:8::2;6234:39;4638:1;4602:32;4594:41;;:45;;;;:::i;:::-;4586:54;;6234:26;:39::i;:::-;:45;;;:53;;;;;;;;;;;;;;;;;;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;6178:116::o;8107:227::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2353:12:7::1;:10;:12::i;:::-;8279:48:8::2;8297:17;8316:4;;8279:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8322:4;8279:17;:48::i;:::-;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;8107:227;;;:::o;2516:129::-;2568:23;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2621:17:::1;:15;:17::i;:::-;2603:35;;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;2516:129;:::o;5854:127::-;5906:4;5276:11;:9;:11::i;:::-;5262:25;;:10;:25;;;:55;;;;5305:12;:10;:12::i;:::-;5291:26;;:10;:26;;;5262:55;5258:129;;;5929:39:::1;4638:1;4602:32;4594:41;;:45;;;;:::i;:::-;4586:54;;5929:26;:39::i;:::-;:45;;;;;;;;;;;;5922:52;;5258:129:::0;;;5365:11;:9;:11::i;:::-;5258:129;5854:127;:::o;6018:121::-;5276:11;:9;:11::i;:::-;5262:25;;:10;:25;;;:55;;;;5305:12;:10;:12::i;:::-;5291:26;;:10;:26;;;5262:55;5258:129;;;2353:12:7::1;:10;:12::i;:::-;6128:4:8::2;6080:39;4638:1;4602:32;4594:41;;:45;;;;:::i;:::-;4586:54;;6080:26;:39::i;:::-;:45;;;:52;;;;;;;;;;;;;;;;;;5258:129:::0;;;5365:11;:9;:11::i;:::-;5258:129;6018:121::o;7495:114::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2353:12:7::1;:10;:12::i;:::-;7580:22:8::2;7593:8;7580:12;:22::i;:::-;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;7495:114;:::o;7005:97::-;7057:7;5276:11;:9;:11::i;:::-;5262:25;;:10;:25;;;:55;;;;5305:12;:10;:12::i;:::-;5291:26;;:10;:26;;;5262:55;5258:129;;;7083:12:::1;:10;:12::i;:::-;7076:19;;5258:129:::0;;;5365:11;:9;:11::i;:::-;5258:129;7005:97;:::o;6486:73::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;6537:15:::1;:13;:15::i;:::-;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;6486:73::o;6341:95::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;6407:22:::1;6415:13;6407:7;:22::i;:::-;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;6341:95;:::o;1960:96::-;2003:14;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2038:11:::1;:9;:11::i;:::-;2029:20;;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;1960:96;:::o;6815:94::-;6863:7;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;6889:13:::1;:11;:13::i;:::-;6882:20;;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;6815:94;:::o;6675:198:5:-;6758:12;6789:77;6810:6;6818:4;6789:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6782:84;;6675:198;;;;:::o;1622:190:6:-;1683:21;1792:4;1782:14;;1622:190;;;:::o;1412:320:5:-;1472:4;1724:1;1702:7;:19;;;:23;1695:30;;1412:320;;;:::o;9183:260:8:-;9244:39;4638:1;4602:32;4594:41;;:45;;;;:::i;:::-;4586:54;;9244:26;:39::i;:::-;:45;;;;;;;;;;;;9243:46;:61;;;;9293:11;:9;:11::i;:::-;9243:61;9242:91;;;;9331:1;9309:24;;:10;:24;;;9242:91;9238:199;;;9349:23;:21;:23::i;:::-;9238:199;;;9410:16;;;;;;;;;;;;;;9238:199;9183:260::o;1148:140:1:-;1215:12;1246:35;:33;:35::i;:::-;1239:42;;1148:140;:::o;948:895:3:-;1286:14;1283:1;1280;1267:34;1500:1;1497;1481:14;1478:1;1462:14;1455:5;1442:60;1576:16;1573:1;1570;1555:38;1614:6;1686:1;1681:66;;;;1796:16;1793:1;1786:27;1681:66;1716:16;1713:1;1706:27;3996:122:2;4040:7;4066:39;3730:66;4093:11;;4066:26;:39::i;:::-;:45;;;;;;;;;;;;4059:52;;3996:122;:::o;2757:170:7:-;2801:4;2817:19;2839:13;:11;:13::i;:::-;2817:35;;2884:1;2870:11;:15;:49;;;;;2908:11;2889:15;:30;;2870:49;2862:58;;;2757:170;:::o;3925:109::-;3975:11;:9;:11::i;:::-;3971:57;;;4009:8;;;;;;;;;;;;;;3971:57;3925:109::o;8452:124:8:-;8497:7;8523:40;4800:1;4763:33;4755:42;;:46;;;;:::i;:::-;4747:55;;8523:26;:40::i;:::-;:46;;;;;;;;;;;;8516:53;;8452:124;:::o;8692:126::-;8802:9;8753:40;4800:1;4763:33;4755:42;;:46;;;;:::i;:::-;4747:55;;8753:26;:40::i;:::-;:46;;;:58;;;;;;;;;;;;;;;;;;8692:126;:::o;2131:265:2:-;2239:29;2250:17;2239:10;:29::i;:::-;2296:1;2282:4;:11;:15;:28;;;;2301:9;2282:28;2278:112;;;2326:53;2355:17;2374:4;2326:28;:53::i;:::-;;2278:112;2131:265;;;:::o;1910:190:6:-;1971:21;2080:4;2070:14;;1910:190;;;:::o;4512:135:2:-;4576:35;4589:11;:9;:11::i;:::-;4602:8;4576:35;;;;;;;:::i;:::-;;;;;;;;4621:19;4631:8;4621:9;:19::i;:::-;4512:135;:::o;4784:114:7:-;4828:12;:10;:12::i;:::-;4850:14;:12;:14::i;:::-;4874:17;4889:1;4874:14;:17::i;:::-;4784:114::o;4238:433::-;4297:12;:10;:12::i;:::-;4319:14;:12;:14::i;:::-;964:8:9;4347:13:7;:50;4343:158;;;4440:13;964:8:9;4420:70:7;;;;;;;;;;;;:::i;:::-;;;;;;;;4343:158;4544:12;4559:15;4544:30;;4584:19;4613:13;4606:4;:20;;;;:::i;:::-;4584:42;;4637:27;4652:11;4637:14;:27::i;:::-;4287:384;;4238:433;:::o;3057:135::-;3103:7;3129:50;2083:66;3156:22;;3129:26;:50::i;:::-;:56;;;3122:63;;3057:135;:::o;7059:325:5:-;7200:12;7225;7239:23;7266:6;:19;;7286:4;7266:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7224:67;;;;7308:69;7335:6;7343:7;7352:10;7364:12;7308:26;:69::i;:::-;7301:76;;;;7059:325;;;;;:::o;3924:207:8:-;4009:11;:9;:11::i;:::-;3995:25;;:10;:25;;;3987:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;4101:23;:21;:23::i;:::-;3924:207::o;1249:140:2:-;1302:7;1328:48;978:66;1355:20;;1328:26;:48::i;:::-;:54;;;;;;;;;;;;1321:61;;1249:140;:::o;1845:152::-;1911:37;1930:17;1911:18;:37::i;:::-;1972:17;1963:27;;;;;;;;;;;;1845:152;:::o;4200:201::-;4283:1;4263:22;;:8;:22;;;4255:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4386:8;4338:39;3730:66;4365:11;;4338:26;:39::i;:::-;:45;;;:56;;;;;;;;;;;;;;;;;;4200:201;:::o;3645:168:7:-;3711:13;:11;:13::i;:::-;3697:27;;:10;:27;;;3693:114;;3770:10;3782:13;:11;:13::i;:::-;3747:49;;;;;;;;;;;;:::i;:::-;;;;;;;;3693:114;3645:168::o;3351:179::-;3473:10;3414:50;2083:66;3441:22;;3414:26;:50::i;:::-;:56;;:69;;;;3498:25;3512:10;3498:25;;;;;;:::i;:::-;;;;;;;;3351:179;:::o;2486:190:6:-;2547:21;2656:4;2646:14;;2486:190;;;:::o;7672:628:5:-;7852:12;7880:7;7876:418;;;7928:1;7907:10;:17;:22;7903:286;;8122:18;8133:6;8122:10;:18::i;:::-;8114:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;7903:286;8209:10;8202:17;;;;7876:418;8250:33;8258:10;8270:12;8250:7;:33::i;:::-;7672:628;;;;;;;:::o;3198:46:3:-;:::o;1480:259:2:-;1561:37;1580:17;1561:18;:37::i;:::-;1553:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1715:17;1658:48;978:66;1685:20;;1658:26;:48::i;:::-;:54;;;:74;;;;;;;;;;;;;;;;;;1480:259;:::o;9571:99:8:-;9626:7;9652:11;:9;:11::i;:::-;9645:18;;9571:99;:::o;8822:540:5:-;9001:1;8981:10;:17;:21;8977:379;;;9209:10;9203:17;9265:15;9252:10;9248:2;9244:19;9237:44;8977:379;9332:12;9325:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:90:11;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;515:117::-;624:1;621;614:12;638:117;747:1;744;737:12;761:126;798:7;838:42;831:5;827:54;816:65;;761:126;;;:::o;893:96::-;930:7;959:24;977:5;959:24;:::i;:::-;948:35;;893:96;;;:::o;995:122::-;1068:24;1086:5;1068:24;:::i;:::-;1061:5;1058:35;1048:63;;1107:1;1104;1097:12;1048:63;995:122;:::o;1123:139::-;1169:5;1207:6;1194:20;1185:29;;1223:33;1250:5;1223:33;:::i;:::-;1123:139;;;;:::o;1268:329::-;1327:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:119;;;1382:79;;:::i;:::-;1344:119;1502:1;1527:53;1572:7;1563:6;1552:9;1548:22;1527:53;:::i;:::-;1517:63;;1473:117;1268:329;;;;:::o;1603:117::-;1712:1;1709;1702:12;1726:117;1835:1;1832;1825:12;1849:117;1958:1;1955;1948:12;1985:552;2042:8;2052:6;2102:3;2095:4;2087:6;2083:17;2079:27;2069:122;;2110:79;;:::i;:::-;2069:122;2223:6;2210:20;2200:30;;2253:18;2245:6;2242:30;2239:117;;;2275:79;;:::i;:::-;2239:117;2389:4;2381:6;2377:17;2365:29;;2443:3;2435:4;2427:6;2423:17;2413:8;2409:32;2406:41;2403:128;;;2450:79;;:::i;:::-;2403:128;1985:552;;;;;:::o;2543:672::-;2622:6;2630;2638;2687:2;2675:9;2666:7;2662:23;2658:32;2655:119;;;2693:79;;:::i;:::-;2655:119;2813:1;2838:53;2883:7;2874:6;2863:9;2859:22;2838:53;:::i;:::-;2828:63;;2784:117;2968:2;2957:9;2953:18;2940:32;2999:18;2991:6;2988:30;2985:117;;;3021:79;;:::i;:::-;2985:117;3134:64;3190:7;3181:6;3170:9;3166:22;3134:64;:::i;:::-;3116:82;;;;2911:297;2543:672;;;;;:::o;3221:118::-;3308:24;3326:5;3308:24;:::i;:::-;3303:3;3296:37;3221:118;;:::o;3345:222::-;3438:4;3476:2;3465:9;3461:18;3453:26;;3489:71;3557:1;3546:9;3542:17;3533:6;3489:71;:::i;:::-;3345:222;;;;:::o;3573:77::-;3610:7;3639:5;3628:16;;3573:77;;;:::o;3656:122::-;3729:24;3747:5;3729:24;:::i;:::-;3722:5;3719:35;3709:63;;3768:1;3765;3758:12;3709:63;3656:122;:::o;3784:139::-;3830:5;3868:6;3855:20;3846:29;;3884:33;3911:5;3884:33;:::i;:::-;3784:139;;;;:::o;3929:329::-;3988:6;4037:2;4025:9;4016:7;4012:23;4008:32;4005:119;;;4043:79;;:::i;:::-;4005:119;4163:1;4188:53;4233:7;4224:6;4213:9;4209:22;4188:53;:::i;:::-;4178:63;;4134:117;3929:329;;;;:::o;4264:118::-;4351:24;4369:5;4351:24;:::i;:::-;4346:3;4339:37;4264:118;;:::o;4388:222::-;4481:4;4519:2;4508:9;4504:18;4496:26;;4532:71;4600:1;4589:9;4585:17;4576:6;4532:71;:::i;:::-;4388:222;;;;:::o;4616:332::-;4737:4;4775:2;4764:9;4760:18;4752:26;;4788:71;4856:1;4845:9;4841:17;4832:6;4788:71;:::i;:::-;4869:72;4937:2;4926:9;4922:18;4913:6;4869:72;:::i;:::-;4616:332;;;;;:::o;4954:180::-;5002:77;4999:1;4992:88;5099:4;5096:1;5089:15;5123:4;5120:1;5113:15;5140:194;5180:4;5200:20;5218:1;5200:20;:::i;:::-;5195:25;;5234:20;5252:1;5234:20;:::i;:::-;5229:25;;5278:1;5275;5271:9;5263:17;;5302:1;5296:4;5293:11;5290:37;;;5307:18;;:::i;:::-;5290:37;5140:194;;;;:::o;5340:332::-;5461:4;5499:2;5488:9;5484:18;5476:26;;5512:71;5580:1;5569:9;5565:17;5556:6;5512:71;:::i;:::-;5593:72;5661:2;5650:9;5646:18;5637:6;5593:72;:::i;:::-;5340:332;;;;;:::o;5678:191::-;5718:3;5737:20;5755:1;5737:20;:::i;:::-;5732:25;;5771:20;5789:1;5771:20;:::i;:::-;5766:25;;5814:1;5811;5807:9;5800:16;;5835:3;5832:1;5829:10;5826:36;;;5842:18;;:::i;:::-;5826:36;5678:191;;;;:::o;5875:98::-;5926:6;5960:5;5954:12;5944:22;;5875:98;;;:::o;5979:147::-;6080:11;6117:3;6102:18;;5979:147;;;;:::o;6132:246::-;6213:1;6223:113;6237:6;6234:1;6231:13;6223:113;;;6322:1;6317:3;6313:11;6307:18;6303:1;6298:3;6294:11;6287:39;6259:2;6256:1;6252:10;6247:15;;6223:113;;;6370:1;6361:6;6356:3;6352:16;6345:27;6194:184;6132:246;;;:::o;6384:386::-;6488:3;6516:38;6548:5;6516:38;:::i;:::-;6570:88;6651:6;6646:3;6570:88;:::i;:::-;6563:95;;6667:65;6725:6;6720:3;6713:4;6706:5;6702:16;6667:65;:::i;:::-;6757:6;6752:3;6748:16;6741:23;;6492:278;6384:386;;;;:::o;6776:271::-;6906:3;6928:93;7017:3;7008:6;6928:93;:::i;:::-;6921:100;;7038:3;7031:10;;6776:271;;;;:::o;7053:169::-;7137:11;7171:6;7166:3;7159:19;7211:4;7206:3;7202:14;7187:29;;7053:169;;;;:::o;7228:290::-;7368:34;7364:1;7356:6;7352:14;7345:58;7437:34;7432:2;7424:6;7420:15;7413:59;7506:4;7501:2;7493:6;7489:15;7482:29;7228:290;:::o;7524:366::-;7666:3;7687:67;7751:2;7746:3;7687:67;:::i;:::-;7680:74;;7763:93;7852:3;7763:93;:::i;:::-;7881:2;7876:3;7872:12;7865:19;;7524:366;;;:::o;7896:419::-;8062:4;8100:2;8089:9;8085:18;8077:26;;8149:9;8143:4;8139:20;8135:1;8124:9;8120:17;8113:47;8177:131;8303:4;8177:131;:::i;:::-;8169:139;;7896:419;;;:::o;8321:225::-;8461:34;8457:1;8449:6;8445:14;8438:58;8530:8;8525:2;8517:6;8513:15;8506:33;8321:225;:::o;8552:366::-;8694:3;8715:67;8779:2;8774:3;8715:67;:::i;:::-;8708:74;;8791:93;8880:3;8791:93;:::i;:::-;8909:2;8904:3;8900:12;8893:19;;8552:366;;;:::o;8924:419::-;9090:4;9128:2;9117:9;9113:18;9105:26;;9177:9;9171:4;9167:20;9163:1;9152:9;9148:17;9141:47;9205:131;9331:4;9205:131;:::i;:::-;9197:139;;8924:419;;;:::o;9349:179::-;9489:31;9485:1;9477:6;9473:14;9466:55;9349:179;:::o;9534:366::-;9676:3;9697:67;9761:2;9756:3;9697:67;:::i;:::-;9690:74;;9773:93;9862:3;9773:93;:::i;:::-;9891:2;9886:3;9882:12;9875:19;;9534:366;;;:::o;9906:419::-;10072:4;10110:2;10099:9;10095:18;10087:26;;10159:9;10153:4;10149:20;10145:1;10134:9;10130:17;10123:47;10187:131;10313:4;10187:131;:::i;:::-;10179:139;;9906:419;;;:::o;10331:232::-;10471:34;10467:1;10459:6;10455:14;10448:58;10540:15;10535:2;10527:6;10523:15;10516:40;10331:232;:::o;10569:366::-;10711:3;10732:67;10796:2;10791:3;10732:67;:::i;:::-;10725:74;;10808:93;10897:3;10808:93;:::i;:::-;10926:2;10921:3;10917:12;10910:19;;10569:366;;;:::o;10941:419::-;11107:4;11145:2;11134:9;11130:18;11122:26;;11194:9;11188:4;11184:20;11180:1;11169:9;11165:17;11158:47;11222:131;11348:4;11222:131;:::i;:::-;11214:139;;10941:419;;;:::o;11366:99::-;11418:6;11452:5;11446:12;11436:22;;11366:99;;;:::o;11471:102::-;11512:6;11563:2;11559:7;11554:2;11547:5;11543:14;11539:28;11529:38;;11471:102;;;:::o;11579:377::-;11667:3;11695:39;11728:5;11695:39;:::i;:::-;11750:71;11814:6;11809:3;11750:71;:::i;:::-;11743:78;;11830:65;11888:6;11883:3;11876:4;11869:5;11865:16;11830:65;:::i;:::-;11920:29;11942:6;11920:29;:::i;:::-;11915:3;11911:39;11904:46;;11671:285;11579:377;;;;:::o;11962:313::-;12075:4;12113:2;12102:9;12098:18;12090:26;;12162:9;12156:4;12152:20;12148:1;12137:9;12133:17;12126:47;12190:78;12263:4;12254:6;12190:78;:::i;:::-;12182:86;;11962:313;;;;:::o
Swarm Source
ipfs://530b2b5f962ad5bc7b115a2ccce61f89851984a2451e481ea65a0b3afb17dd34
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.