ETH Price: $3,245.25 (-2.52%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Adminis...170756682023-04-18 19:37:11645 days ago1681846631IN
0x277D98D3...D56aBAa62
0 ETH0.0032719868.64834925
Finalize Delay170756592023-04-18 19:35:23645 days ago1681846523IN
0x277D98D3...D56aBAa62
0 ETH0.0042980674.49635447
Update Delay170756542023-04-18 19:34:23645 days ago1681846463IN
0x277D98D3...D56aBAa62
0 ETH0.006196767.32254083
Transfer Delegat...170756462023-04-18 19:32:47645 days ago1681846367IN
0x277D98D3...D56aBAa62
0 ETH0.0037272574.99512654
Set Factory170756292023-04-18 19:29:23645 days ago1681846163IN
0x277D98D3...D56aBAa62
0 ETH0.0032688870.88560335

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block
From
To
164855942023-01-25 18:22:23728 days ago1674670943  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EnsoBeacon

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 100000000 runs

Other Settings:
default evmVersion, GNU GPLv3 license
File 1 of 5 : EnsoBeacon.sol
// SPDX-License-Identifier: GPL-3.0-only

pragma solidity ^0.8.16;

import "./interfaces/IBeacon.sol";
import "./interfaces/IOwnable.sol";
import "./interfaces/IUUPS.sol";
import "./access/Timelock.sol";

contract EnsoBeacon is IBeacon, Timelock {

    uint256 constant public MAX_DELAY = 2419200; // 4 weeks

    address public admin;
    address public delegate;
    address public factory;
    address public coreImplementation;
    address public fallbackImplementation;

    address public pendingAdmin;
    address public pendingDelegate;

    event CoreUpgraded(address previousImplementation, address newImplementation, bool finalized);
    event FallbackUpgraded(address previousImplementation, address newImplementation, bool finalized);
    event EmergencyUpgrade();
    event AdministrationTransferred(address previousAdmin, address newAdmin);
    event AdministrationTransferStarted(address previousAdmin, address newAdmin);
    event DelegationTransferred(address previousDelegate, address newDelegate);
    event DelegationTransferStarted(address previousDelegate, address newDelegate);
    event Delay(uint256 newDelay, bool finalized);

    error InvalidImplementation();
    error InvalidAccount();
    error InvalidDelay();
    error NotPermitted();
    error FactorySet();

    modifier onlyAdmin() {
        if (msg.sender != admin) revert NotPermitted();
        _;
    }

    modifier onlyDelegate() {
        if (msg.sender != delegate) revert NotPermitted();
        _;
    }

    constructor(address admin_, address coreImplementation_, address fallbackImplementation_) {
        admin = admin_;
        delegate = admin_;
        coreImplementation = coreImplementation_;
        fallbackImplementation = fallbackImplementation_;
    }

    // @notice The current core implementation
    // @dev Called by proxy contracts to get the implementation address
    function implementation() external view override returns (address) {
        return coreImplementation;
    }

    // @notice Switch from the core implementation to the fallback implementation
    function emergencyUpgrade() external onlyDelegate {
        _upgradeCore(fallbackImplementation);
        emit EmergencyUpgrade();
    }

    // @notice Initialize an upgrade to a new core implementation
    // @param newImplementation The address of the new core implementation
    // @param factoryImplementation Optionally include a new factory implementation to upgrade the factory simultaneously. Pass zero address if no upgrade is needed
    // @param factoryUpgradeData Calldata for upgrading the new factory. Pass zero bytes if factory is not being upgraded or no additional call needs to be made
    function upgradeCore(
        address newImplementation,
        address factoryImplementation,
        bytes memory factoryUpgradeData
    ) external onlyAdmin {
        address currentImplementation = coreImplementation;
        if (newImplementation == address(0)) revert InvalidImplementation();
        if (newImplementation == currentImplementation) revert InvalidImplementation();
        bytes32 key = this.upgradeCore.selector;
        bytes memory data = abi.encode(newImplementation, factoryImplementation, factoryUpgradeData);
        _startTimelock(key, data);
        emit CoreUpgraded(currentImplementation, newImplementation, false);
    }

    // @notice Finalize the new core implementation
    function finalizeCore() external {
        // Resolve timelock
        bytes32 key = this.upgradeCore.selector;
        (address newImplementation, address factoryImplementation, bytes memory factoryUpgradeData) = abi.decode(
            _resolveTimelock(key), (address, address, bytes)
        );
        // Upgrade
        _upgradeCore(newImplementation);
        if (factoryImplementation != address(0)) _upgradeFactory(factoryImplementation, factoryUpgradeData);
    }

    // @notice Initialize an upgrade to a new fallback implementation
    // @param newImplementation The address of the new fallback implementation
    function upgradeFallback(address newImplementation) external onlyAdmin {
        address currentImplementation = fallbackImplementation;
        if (newImplementation == address(0)) revert InvalidImplementation();
        if (newImplementation == currentImplementation) revert InvalidImplementation();
        bytes32 key = this.upgradeFallback.selector;
        bytes memory data = abi.encode(newImplementation);
        _startTimelock(key, data);
        emit FallbackUpgraded(currentImplementation, newImplementation, false);
    }

    // @notice Finalize the new fallback implementation
    function finalizeFallback() external {
        // Resolve timelock
        bytes32 key = this.upgradeFallback.selector;
        (address newImplementation) = abi.decode(
            _resolveTimelock(key), (address)
        );
        // Upgrade
        if (newImplementation == address(0)) revert InvalidImplementation(); // sanity check
        address previousImplementation = fallbackImplementation;
        fallbackImplementation = newImplementation;
        emit FallbackUpgraded(previousImplementation, newImplementation, true);
    }

    // @notice Upgrade the factory implementation
    // @param newImplementation The address of the new factory implementation
    // @param data Calldata for upgrading the new factory. Pass zero bytes if no additional call needs to be made
    function upgradeFactory(address newImplementation, bytes memory data) external onlyAdmin {
        if (newImplementation == address(0)) revert InvalidImplementation();
        _upgradeFactory(newImplementation, data);
    }

    // @notice Initiate transfer of the admin role
    // @notice newAdmin The address of the new admin
    function transferAdministration(address newAdmin) external onlyAdmin {
        if (newAdmin == address(0)) revert InvalidAccount();
        if (newAdmin == admin) revert InvalidAccount();
        pendingAdmin = newAdmin;
        emit AdministrationTransferStarted(admin, newAdmin);
    }

    // @notice Accept new admin role
    // @dev Only the pending admin can call this function
    function acceptAdministration() external {
        if (msg.sender != pendingAdmin) revert NotPermitted();
        delete pendingAdmin;
        address previousAdmin = admin;
        admin = msg.sender;
        emit AdministrationTransferred(previousAdmin, msg.sender);
    }

    // @notice Renounce admin role. No upgrades can be done if this function is called.
    // @dev This function renounces both the admin and the delegate roles.
    function renounceAdministration() external onlyAdmin {
        address previousAdmin = admin;
        address previousDelegate = delegate;
        delete admin;
        delete delegate;
        delete pendingAdmin;
        delete pendingDelegate;
        emit AdministrationTransferred(previousAdmin, address(0));
        emit DelegationTransferred(previousDelegate, address(0));
    }

    // @notice Initiate transfer of the delegate role
    // @notice newDelegate The address of the new delegate
    function transferDelegation(address newDelegate) external onlyAdmin {
        if (newDelegate == address(0)) revert InvalidAccount();
        if (newDelegate == delegate) revert InvalidAccount();
        pendingDelegate = newDelegate;
        emit DelegationTransferStarted(delegate, newDelegate);
    }

    // @notice Accept new delegate role
    // @dev Only the pending delegate can call this function
    function acceptDelegation() external {
        if (msg.sender != pendingDelegate) revert NotPermitted();
        delete pendingDelegate;
        address previousDelegate = delegate;
        delegate = msg.sender;
        emit DelegationTransferred(previousDelegate, msg.sender);
    }

    // @notice Renounce delegate role. Emergency upgrades cannot happen while this role remain unfilled.
    // @dev The admin can always give this role to another address with the transferDelegation function
    function renounceDelegation() external onlyDelegate {
        address previousDelegate = delegate;
        delete delegate;
        emit DelegationTransferred(previousDelegate, address(0));
    }

    // @notice Transfer ownership of a contract that is owned by this contract
    // @param ownable The address of the contract that is getting it's ownership transferred
    // @param newOwner The address of the new owner
    function transferOwnership(address ownable, address newOwner) external onlyAdmin {
        IOwnable(ownable).transferOwnership(newOwner);
    }

    // @notice Accept ownership of another contract by this contract
    // @param ownable The address of the contract that is getting it's ownership transferred
    function acceptOwnership(address ownable) external onlyAdmin {
        IOwnable(ownable).acceptOwnership();
    }

    // @notice Set the factory address. Once set, the factory cannot be changed
    // @param newFactory The address of the new factory
    function setFactory(address newFactory) external onlyAdmin {
        if (factory != address(0)) revert FactorySet();
        if (newFactory == address(0)) revert InvalidAccount();
        factory = newFactory;
    }

    // @notice Initiate an update of the delay value
    // @param newDelay The new delay in seconds
    function updateDelay(uint256 newDelay) external onlyAdmin {
        if (newDelay > MAX_DELAY) revert InvalidDelay();
        // Set timelock
        bytes32 key = this.updateDelay.selector;
        bytes memory data = abi.encode(newDelay);
        _startTimelock(key, data);
        emit Delay(newDelay, false);
    }

    // @notice Finalize the delay in state
    function finalizeDelay() external {
        // Resolve timelock
        bytes32 key = this.updateDelay.selector;
        (uint256 newDelay) = abi.decode(
            _resolveTimelock(key), (uint256)
        );
        if (newDelay > MAX_DELAY) revert InvalidDelay(); // sanity check
        // Set delay
        delay = newDelay;
        emit Delay(newDelay, true);
    }

    // @notice Internal function for setting the new core implementation
    // @param newImplementation The address of the new implementation
    function _upgradeCore(address newImplementation) internal {
        if (newImplementation == address(0)) revert InvalidImplementation();
        //if (newImplementation == coreImplementation) revert InvalidImplementation();
        address previousImplementation = coreImplementation;
        coreImplementation = newImplementation;
        emit CoreUpgraded(previousImplementation, newImplementation, true);
    }

    // @notice Internal function for upgrading the factory implementation
    // @param newImplementation The address of the new factory implementation
    // @param data Calldata for upgrading the new factory. Pass zero bytes if no additional call needs to be made
    function _upgradeFactory(address newImplementation, bytes memory data) internal {
        if (data.length > 0) {
            IUUPS(factory).upgradeToAndCall(newImplementation, data);
        } else {
            IUUPS(factory).upgradeTo(newImplementation);
        }
    }

    // @notice Internal function to check timelock and reset it after timelock has matured
    // @param key The bytes32 key that represents the function that is timelocked
    // @return The bytes data that is stored by the timelock
    function _resolveTimelock(bytes32 key) internal returns (bytes memory data) {
        _checkTimelock(key);
        data = _getTimelockValue(key);
        _resetTimelock(key);
    }
}

File 2 of 5 : Timelock.sol
// SPDX-License-Identifier: GPL-3.0-only
pragma solidity ^0.8.16;


abstract contract Timelock {

    uint256 constant public UNSET_TIMESTAMP = 1;
    bytes constant public UNSET_VALUE = new bytes(0x01); 

    uint256 public delay;
    mapping(bytes32 => TimelockData) public timelockData;

    struct TimelockData {
        uint256 timestamp;
        bytes value;
    }
    
    error NoTimelock();
    error Wait();

    // @notice Internal function to initiate a timelock
    // @param key The bytes32 key that represents the function that is timelocked
    // @param value The bytes value that is stored until the timelock completes
    function _startTimelock(bytes32 key, bytes memory value) internal {
        TimelockData storage td = timelockData[key]; 
        td.timestamp = block.timestamp;
        td.value = value;
    }

    // @notice Internal function to check the current status of a timelock and revert if the timelock has not matured
    // @param key The bytes32 key that represents the function that is timelocked
    function _checkTimelock(bytes32 key) internal view {
        TimelockData memory td = timelockData[key]; 
        if (td.timestamp < 2) revert NoTimelock();
        if (block.timestamp < td.timestamp + delay) revert Wait();
    }

    // @notice Internal function to view the value stored for a timelock
    // @return The bytes value that is stored until the timelock completes
    function _getTimelockValue(bytes32 key) internal view returns(bytes memory) {
        return timelockData[key].value; 
    }

    // @notice Reset the timelock
    // @param key The bytes32 key that represents the function that is timelocked
    function _resetTimelock(bytes32 key) internal {
        TimelockData storage td = timelockData[key];
        // By not deleting TimelockData, we save gas on subsequent actions
        td.timestamp = UNSET_TIMESTAMP; 
        td.value = UNSET_VALUE;
    }
}

File 3 of 5 : IBeacon.sol
// SPDX-License-Identifier: GPL-3.0-only
pragma solidity ^0.8.16;

interface IBeacon {
    function implementation() external view returns (address);
}

File 4 of 5 : IOwnable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;

interface IOwnable {
    function transferOwnership(address newOwner) external;

    function acceptOwnership() external;
}

File 5 of 5 : IUUPS.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;

interface IUUPS {
    function upgradeTo(address newImplementation) external;

    function upgradeToAndCall(address newImplementation, bytes calldata data) external;
}

Settings
{
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 100000000
  },
  "remappings": [],
  "viaIR": true,
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"admin_","type":"address"},{"internalType":"address","name":"coreImplementation_","type":"address"},{"internalType":"address","name":"fallbackImplementation_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FactorySet","type":"error"},{"inputs":[],"name":"InvalidAccount","type":"error"},{"inputs":[],"name":"InvalidDelay","type":"error"},{"inputs":[],"name":"InvalidImplementation","type":"error"},{"inputs":[],"name":"NoTimelock","type":"error"},{"inputs":[],"name":"NotPermitted","type":"error"},{"inputs":[],"name":"Wait","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdministrationTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdministrationTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"},{"indexed":false,"internalType":"bool","name":"finalized","type":"bool"}],"name":"CoreUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDelay","type":"uint256"},{"indexed":false,"internalType":"bool","name":"finalized","type":"bool"}],"name":"Delay","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousDelegate","type":"address"},{"indexed":false,"internalType":"address","name":"newDelegate","type":"address"}],"name":"DelegationTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousDelegate","type":"address"},{"indexed":false,"internalType":"address","name":"newDelegate","type":"address"}],"name":"DelegationTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"EmergencyUpgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"},{"indexed":false,"internalType":"bool","name":"finalized","type":"bool"}],"name":"FallbackUpgraded","type":"event"},{"inputs":[],"name":"MAX_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNSET_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNSET_VALUE","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptAdministration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptDelegation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ownable","type":"address"}],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coreImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delegate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyUpgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fallbackImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalizeCore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalizeDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalizeFallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDelegate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceAdministration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceDelegation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFactory","type":"address"}],"name":"setFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"timelockData","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes","name":"value","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdministration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDelegate","type":"address"}],"name":"transferDelegation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ownable","type":"address"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"updateDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"address","name":"factoryImplementation","type":"address"},{"internalType":"bytes","name":"factoryUpgradeData","type":"bytes"}],"name":"upgradeCore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeFallback","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608034620000b557601f6200286438819003918201601f19168301916001600160401b03831184841017620000ba57808492606094604052833981010312620000b5576200004d81620000d0565b6200006960406200006160208501620000d0565b9301620000d0565b60018060a01b03808093169360018060a01b03199480866002541617600255856003541617600355168360055416176005551690600654161760065560405161277e9081620000e68239f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620000b55756fe608060408181526004918236101561001657600080fd5b600092833560e01c918263230eae2f146121dd5750816324e0f57e1461212c57816326782247146120d957816333a861e01461207d578163402bbfb5146120165781634125ff9014611fda5781634859e38214611f8757816351710e4514611ece5781635bb4780814611deb5781635c60da1b1461112257816364d6235314611b045781636a42b8f814611ac95781636d435421146119ca5781637babfffc1461188f5781639068c51a146115b657816390c210bf146112e6578163913ee93d146111af57816392caa08b146111755781639d492a2c14611122578163addd34f514610e30578163c45a015514610ddb578163c780b63d14610c78578163c89e436114610c25578163d0ff6fc114610bd2578163d29a53df1461082e578163e03b874114610767578163e6d15e1b146103a1578163ea1466d3146102c9578163f0025d96146101c4575063f851a4401461016f57600080fd5b346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05760209073ffffffffffffffffffffffffffffffffffffffff600254169051908152f35b5080fd5b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5576007549073ffffffffffffffffffffffffffffffffffffffff90818316330361029e57507fffffffffffffffffffffffff0000000000000000000000000000000000000000918216600755600280543393811684179091558351911673ffffffffffffffffffffffffffffffffffffffff16815260208101919091527ffd11f9fc2b7f18358a6f98ed3df762cdba9d98f2365d3021b5fd38d1240b0fad9080604081015b0390a151f35b83517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5576008549073ffffffffffffffffffffffffffffffffffffffff90818316330361029e57507fffffffffffffffffffffffff0000000000000000000000000000000000000000918216600855600380543393811684179091558351911673ffffffffffffffffffffffffffffffffffffffff16815260208101919091527fd0f8e6a439689cb66a57cb879faad9da11c6b662caf1ec096fef086d15ea16c7908060408101610298565b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5577f90c210bf000000000000000000000000000000000000000000000000000000008060005260016020908082528460002061041c8287519261041284612317565b80548452016124ae565b83820152600281511061073f575160005481018091116107115742106106e957826000528082526104518186600020016124ae565b92600052808252846000208181558186519161046c83612317565b818352843681850137019181519167ffffffffffffffff968784116106bb5750610496845461245b565b601f8111610672575b508490601f84116001146105d1576000918491826105a6575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b81518201916060818385019403126105a257610506828201612573565b93610512868301612573565b91606081015191821161059a57019183603f8401121561059e578083015161053981612374565b9461054688519687612333565b81865287828601011161059a57610584938761056593870191016123f5565b73ffffffffffffffffffffffffffffffffffffffff8091169316612594565b8161058e57505051f35b61059791612643565b51f35b8780fd5b8680fd5b8580fd5b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104b8565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084939416918560005283876000209360005b898883831061065b5750505010610624575b505050811b0190556104e9565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610617565b868601518855909601959485019487935001610605565b8460005285600020601f850160051c8101918786106106b1575b601f0160051c019083905b8281106106a557505061049f565b60008155018390610697565b909150819061068c565b6041907f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b8385517f47e103ca000000000000000000000000000000000000000000000000000000008152fd5b6011857f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b8486517f4f6c1185000000000000000000000000000000000000000000000000000000008152fd5b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c55760035473ffffffffffffffffffffffffffffffffffffffff81169182330361029e57507fffffffffffffffffffffffff000000000000000000000000000000000000000016600355815173ffffffffffffffffffffffffffffffffffffffff9091168152600060208201527fd0f8e6a439689cb66a57cb879faad9da11c6b662caf1ec096fef086d15ea16c7908060408101610298565b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5577faddd34f5000000000000000000000000000000000000000000000000000000009081600052600190602092828452846000206108a18487519261041284612317565b858201526002815110610baa57516000548101809111610b7c574210610b5457806000528284526108d68386600020016124ae565b9060005282845284600020838155838651916108f183612317565b818352863681850137019080519067ffffffffffffffff8211610b2657819061091a845461245b565b601f8111610ad3575b508790601f8311600114610a3657600092610a2b575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82871b9260031b1c19161790555b83818051810103126105a257839061099973ffffffffffffffffffffffffffffffffffffffff95869201612573565b16918215610a045750600680547fffffffffffffffffffffffff000000000000000000000000000000000000000081168417909155855194168452830152818301527ff296648dbd7a1f6fa8844476fcafe111c6c359f4205835a5ceab8be87deead7c90606090a151f35b85517f68155f9a000000000000000000000000000000000000000000000000000000008152fd5b015190503880610939565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08894169185600052896000209260005b8b828210610abd5750508411610a86575b505050811b01905561096a565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610a79565b8385015186558b97909501949384019301610a68565b9091508360005287600020601f840160051c810191898510610b1c575b84939291601f8a920160051c01915b828110610b0d575050610923565b60008155859450899101610aff565b9091508190610af0565b6041857f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b5083517f47e103ca000000000000000000000000000000000000000000000000000000008152fd5b6011837f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b8286517f4f6c1185000000000000000000000000000000000000000000000000000000008152fd5b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05760209073ffffffffffffffffffffffffffffffffffffffff600654169051908152f35b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05760209073ffffffffffffffffffffffffffffffffffffffff600354169051908152f35b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c55760025473ffffffffffffffffffffffffffffffffffffffff9182821690813303610db45750907ffd11f9fc2b7f18358a6f98ed3df762cdba9d98f2365d3021b5fd38d1240b0fad610d847fd0f8e6a439689cb66a57cb879faad9da11c6b662caf1ec096fef086d15ea16c79493600354937fffffffffffffffffffffffff0000000000000000000000000000000000000000809116600255808516600355806007541660075560085416600855865191829182602060009193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a18351911673ffffffffffffffffffffffffffffffffffffffff168152600060208201528060408101610298565b84517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b828434610e2d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e2d575073ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b80fd5b9050346102c557602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261111e57610e6b612289565b9173ffffffffffffffffffffffffffffffffffffffff806002541633036110f657806006541693169182156110cf578383146110cf578451908383830152828252610eb582612317565b7faddd34f50000000000000000000000000000000000000000000000000000000060005260018084528087600020428155019280519267ffffffffffffffff84116106bb5750610f05845461245b565b601f8111611086575b508490601f8411600114610fbe579183807ff296648dbd7a1f6fa8844476fcafe111c6c359f4205835a5ceab8be87deead7c999795936060999795600093610f93575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b85519283528201528484820152a151f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff38610f51565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0849394169185600052866000209260005b8181106110715750917ff296648dbd7a1f6fa8844476fcafe111c6c359f4205835a5ceab8be87deead7c99979593918560609a9896941061103a575b505050811b019055610f82565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c1916905538808061102d565b82840151855593860193928801928801610ff1565b8460005285600020601f850160051c8101918786106110c5575b601f0160051c019083905b8281106110b9575050610f0e565b600081550183906110ab565b90915081906110a0565b84517f68155f9a000000000000000000000000000000000000000000000000000000008152fd5b8285517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b8380fd5b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05760209073ffffffffffffffffffffffffffffffffffffffff600554169051908152f35b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c0576020905160018152f35b9050346102c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5576111e8612289565b9073ffffffffffffffffffffffffffffffffffffffff908160025416918233036112be578316908115611297578282146112975750600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055825173ffffffffffffffffffffffffffffffffffffffff9182168152911660208201527fc84b53e36f9cc4d47cde3c091e2817c6da2d24e3acf415caa7162388440c41cd908060408101610298565b84517f6d187b28000000000000000000000000000000000000000000000000000000008152fd5b5083517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b9050346102c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c55761131f612289565b906113286122b1565b67ffffffffffffffff9160443583811161059e5761134990369083016123ae565b9273ffffffffffffffffffffffffffffffffffffffff938460025416330361158e57848060055416961694851561156657868614611566576113a688519283926020978989860152168a8401526060808401526080830190612418565b036113d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe091828101845283612333565b7f90c210bf000000000000000000000000000000000000000000000000000000006000526001918286528289600020428155019481519485116106bb575061141f855461245b565b601f811161151d575b508591601f85116001146114ac57509183807f9c330345d9c36f7cf94243f2b70f88d8ae30322193ae0cb95cce75780d4b7071999795936060999795600093610f935750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c191617905585519283528201528484820152a151f35b849394929192169185600052866000209260005b8181106115085750917f9c330345d9c36f7cf94243f2b70f88d8ae30322193ae0cb95cce75780d4b707199979593918560609a9896941061103a57505050811b019055610f82565b828401518555938601939288019288016114c0565b8560005286600020601f860160051c81019188871061155c575b601f0160051c019084905b828110611550575050611428565b60008155018490611542565b9091508190611537565b8388517f68155f9a000000000000000000000000000000000000000000000000000000008152fd5b8287517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5577f64d623530000000000000000000000000000000000000000000000000000000080600052600190602090828252846000206116288487519261041284612317565b83820152600281511061073f575160005481018091116107115742106106e9578060005282825261165d8386600020016124ae565b90600052828252846000208381558386519161167883612317565b818352843681850137019080519067ffffffffffffffff82116118615781906116a1845461245b565b601f811161180e575b508590601f831160011461177157600092611766575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82871b9260031b1c19161790555b81818051810103126105a257810151926224ea00841161173f575082855583519283528201527fc5a1c5c7b7c9e42e6bbead55c3e21bfe68d5950bf1b26e6f75df442bec11038f908290a151f35b84517f4fbe5dba000000000000000000000000000000000000000000000000000000008152fd5b0151905038806116c0565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08894169185600052876000209260005b898282106117f857505084116117c1575b505050811b0190556116f1565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690553880806117b4565b8385015186558b979095019493840193016117a3565b9091508360005285600020601f840160051c810191878510611857575b84939291601f8a920160051c01915b8281106118485750506116aa565b6000815585945089910161183a565b909150819061182b565b6041877f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b9050346102c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5576118c8612289565b9073ffffffffffffffffffffffffffffffffffffffff806002541633036119a25780831690811561197a5760035416918282146112975750600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055825173ffffffffffffffffffffffffffffffffffffffff9182168152911660208201527fb3efe8834d414d488190f39a997544d1e941aa3e5ebad80baa2abd82015482bf908060408101610298565b8285517f6d187b28000000000000000000000000000000000000000000000000000000008152fd5b5082517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b9050346102c557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c557611a02612289565b611a0a6122b1565b9073ffffffffffffffffffffffffffffffffffffffff9081600254163303611aa15790808694939216803b15611a9d57849283602492885196879586947ff2fde38b00000000000000000000000000000000000000000000000000000000865216908401525af18015611a9057611a8057505051f35b611a89906122d4565b6101c05751f35b50505051903d90823e3d90fd5b8480fd5b8385517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057602091549051908152f35b9050346102c5576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261111e5781359073ffffffffffffffffffffffffffffffffffffffff600254163303611dc3576224ea008211611d9b578351928282850152818452611b7684612317565b7f64d62353000000000000000000000000000000000000000000000000000000006000526001908183528186600020428155019185519167ffffffffffffffff83116106bb575091869493918893611bce835461245b565b601f8111611d3e575b508397601f8311600114611c7a57827fc5a1c5c7b7c9e42e6bbead55c3e21bfe68d5950bf1b26e6f75df442bec11038f998192600093611c4f575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b8351928352820152a151f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff38611c12565b977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0839293169084600052856000209160005b818110611d23575099837fc5a1c5c7b7c9e42e6bbead55c3e21bfe68d5950bf1b26e6f75df442bec11038f9b10611cec575b505050811b019055611c43565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080611cdf565b8b83015184558c9a508d985092850192918701918701611cad565b91939596509180945060005284600020601f840160051c810191868510611d91575b918a959391601f8b999896940160051c01905b818110611d805750611bd7565b600081558a98508b96508201611d73565b9091508190611d60565b8284517f4fbe5dba000000000000000000000000000000000000000000000000000000008152fd5b8284517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b9050346102c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c557611e24612289565b73ffffffffffffffffffffffffffffffffffffffff80600254163303611dc357825491818316611ea65716908115611e7e577fffffffffffffffffffffffff00000000000000000000000000000000000000001617905551f35b8284517f6d187b28000000000000000000000000000000000000000000000000000000008152fd5b8385517f5763f48e000000000000000000000000000000000000000000000000000000008152fd5b839150346101c05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057611f08612289565b73ffffffffffffffffffffffffffffffffffffffff90816002541633036110f6571690813b156102c557829182918551809481937f79ba50970000000000000000000000000000000000000000000000000000000083525af18015611f7d57611f7057509051f35b611f79906122d4565b9051f35b83513d84823e3d90fd5b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05760209073ffffffffffffffffffffffffffffffffffffffff600854169051908152f35b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057602090516224ea008152f35b9050346102c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5579181923581526001602052206120796120646001835493016124ae565b83519384938452806020850152830190612418565b0390f35b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c0578051612079916120bc82612317565b600182526020368184013751918291602083526020830190612418565b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05760209073ffffffffffffffffffffffffffffffffffffffff600754169051908152f35b9050346102c557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c557612164612289565b60243567ffffffffffffffff8111611a9d5761218390369084016123ae565b9173ffffffffffffffffffffffffffffffffffffffff806002541633036112be578216156121b657509061059791612643565b83517f68155f9a000000000000000000000000000000000000000000000000000000008152fd5b91503461111e57837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261111e5773ffffffffffffffffffffffffffffffffffffffff918260035416330361226457505061223d9060065416612594565b517f014f4edb46826c5e74e23ca091de2d3fdfe2cc9d62b5eebf7f5a63eff16d55be8282a1f35b7f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036122ac57565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036122ac57565b67ffffffffffffffff81116122e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176122e857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176122e857604052565b67ffffffffffffffff81116122e857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f820112156122ac578035906123c582612374565b926123d36040519485612333565b828452602083830101116122ac57816000926020809301838601378301015290565b60005b8381106124085750506000910152565b81810151838201526020016123f8565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612454815180928187528780880191016123f5565b0116010190565b90600182811c921680156124a4575b602083101461247557565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161246a565b90604051918260008254926124c28461245b565b90818452600194858116908160001461253157506001146124ee575b50506124ec92500383612333565b565b9093915060005260209081600020936000915b8183106125195750506124ec935082010138806124de565b85548884018501529485019487945091830191612501565b90506124ec9550602093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138806124de565b519073ffffffffffffffffffffffffffffffffffffffff821682036122ac57565b73ffffffffffffffffffffffffffffffffffffffff8091168015612619577f9c330345d9c36f7cf94243f2b70f88d8ae30322193ae0cb95cce75780d4b70719160609160055491817fffffffffffffffffffffffff000000000000000000000000000000000000000084161760055560405192168252602082015260016040820152a1565b60046040517f68155f9a000000000000000000000000000000000000000000000000000000008152fd5b8151156126de5773ffffffffffffffffffffffffffffffffffffffff918260045416803b156122ac576126b89360008094604051968795869485937f4f1ef286000000000000000000000000000000000000000000000000000000008552166004840152604060248401526044830190612418565b03925af180156126d2576126c95750565b6124ec906122d4565b6040513d6000823e3d90fd5b60045473ffffffffffffffffffffffffffffffffffffffff9081169250823b156122ac5760246000928360405195869485937f3659cfe60000000000000000000000000000000000000000000000000000000085521660048401525af180156126d2576126c9575056fea26469706673582212203b473bc68bd1fee29b20fae64e02cad9bb792d075050136a1f84bb2feb42d3fb64736f6c63430008100033000000000000000000000000fae0bbfd75307865dcdf21d9defefedeee718431000000000000000000000000b6bc9b50b4ac1397ab03d8a24d8fa529a5070ff0000000000000000000000000b8d76a79b60449deda533b9eee68a1efccc9a04c

Deployed Bytecode

0x608060408181526004918236101561001657600080fd5b600092833560e01c918263230eae2f146121dd5750816324e0f57e1461212c57816326782247146120d957816333a861e01461207d578163402bbfb5146120165781634125ff9014611fda5781634859e38214611f8757816351710e4514611ece5781635bb4780814611deb5781635c60da1b1461112257816364d6235314611b045781636a42b8f814611ac95781636d435421146119ca5781637babfffc1461188f5781639068c51a146115b657816390c210bf146112e6578163913ee93d146111af57816392caa08b146111755781639d492a2c14611122578163addd34f514610e30578163c45a015514610ddb578163c780b63d14610c78578163c89e436114610c25578163d0ff6fc114610bd2578163d29a53df1461082e578163e03b874114610767578163e6d15e1b146103a1578163ea1466d3146102c9578163f0025d96146101c4575063f851a4401461016f57600080fd5b346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05760209073ffffffffffffffffffffffffffffffffffffffff600254169051908152f35b5080fd5b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5576007549073ffffffffffffffffffffffffffffffffffffffff90818316330361029e57507fffffffffffffffffffffffff0000000000000000000000000000000000000000918216600755600280543393811684179091558351911673ffffffffffffffffffffffffffffffffffffffff16815260208101919091527ffd11f9fc2b7f18358a6f98ed3df762cdba9d98f2365d3021b5fd38d1240b0fad9080604081015b0390a151f35b83517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5576008549073ffffffffffffffffffffffffffffffffffffffff90818316330361029e57507fffffffffffffffffffffffff0000000000000000000000000000000000000000918216600855600380543393811684179091558351911673ffffffffffffffffffffffffffffffffffffffff16815260208101919091527fd0f8e6a439689cb66a57cb879faad9da11c6b662caf1ec096fef086d15ea16c7908060408101610298565b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5577f90c210bf000000000000000000000000000000000000000000000000000000008060005260016020908082528460002061041c8287519261041284612317565b80548452016124ae565b83820152600281511061073f575160005481018091116107115742106106e957826000528082526104518186600020016124ae565b92600052808252846000208181558186519161046c83612317565b818352843681850137019181519167ffffffffffffffff968784116106bb5750610496845461245b565b601f8111610672575b508490601f84116001146105d1576000918491826105a6575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b81518201916060818385019403126105a257610506828201612573565b93610512868301612573565b91606081015191821161059a57019183603f8401121561059e578083015161053981612374565b9461054688519687612333565b81865287828601011161059a57610584938761056593870191016123f5565b73ffffffffffffffffffffffffffffffffffffffff8091169316612594565b8161058e57505051f35b61059791612643565b51f35b8780fd5b8680fd5b8580fd5b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104b8565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084939416918560005283876000209360005b898883831061065b5750505010610624575b505050811b0190556104e9565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610617565b868601518855909601959485019487935001610605565b8460005285600020601f850160051c8101918786106106b1575b601f0160051c019083905b8281106106a557505061049f565b60008155018390610697565b909150819061068c565b6041907f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b8385517f47e103ca000000000000000000000000000000000000000000000000000000008152fd5b6011857f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b8486517f4f6c1185000000000000000000000000000000000000000000000000000000008152fd5b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c55760035473ffffffffffffffffffffffffffffffffffffffff81169182330361029e57507fffffffffffffffffffffffff000000000000000000000000000000000000000016600355815173ffffffffffffffffffffffffffffffffffffffff9091168152600060208201527fd0f8e6a439689cb66a57cb879faad9da11c6b662caf1ec096fef086d15ea16c7908060408101610298565b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5577faddd34f5000000000000000000000000000000000000000000000000000000009081600052600190602092828452846000206108a18487519261041284612317565b858201526002815110610baa57516000548101809111610b7c574210610b5457806000528284526108d68386600020016124ae565b9060005282845284600020838155838651916108f183612317565b818352863681850137019080519067ffffffffffffffff8211610b2657819061091a845461245b565b601f8111610ad3575b508790601f8311600114610a3657600092610a2b575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82871b9260031b1c19161790555b83818051810103126105a257839061099973ffffffffffffffffffffffffffffffffffffffff95869201612573565b16918215610a045750600680547fffffffffffffffffffffffff000000000000000000000000000000000000000081168417909155855194168452830152818301527ff296648dbd7a1f6fa8844476fcafe111c6c359f4205835a5ceab8be87deead7c90606090a151f35b85517f68155f9a000000000000000000000000000000000000000000000000000000008152fd5b015190503880610939565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08894169185600052896000209260005b8b828210610abd5750508411610a86575b505050811b01905561096a565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610a79565b8385015186558b97909501949384019301610a68565b9091508360005287600020601f840160051c810191898510610b1c575b84939291601f8a920160051c01915b828110610b0d575050610923565b60008155859450899101610aff565b9091508190610af0565b6041857f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b5083517f47e103ca000000000000000000000000000000000000000000000000000000008152fd5b6011837f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b8286517f4f6c1185000000000000000000000000000000000000000000000000000000008152fd5b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05760209073ffffffffffffffffffffffffffffffffffffffff600654169051908152f35b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05760209073ffffffffffffffffffffffffffffffffffffffff600354169051908152f35b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c55760025473ffffffffffffffffffffffffffffffffffffffff9182821690813303610db45750907ffd11f9fc2b7f18358a6f98ed3df762cdba9d98f2365d3021b5fd38d1240b0fad610d847fd0f8e6a439689cb66a57cb879faad9da11c6b662caf1ec096fef086d15ea16c79493600354937fffffffffffffffffffffffff0000000000000000000000000000000000000000809116600255808516600355806007541660075560085416600855865191829182602060009193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a18351911673ffffffffffffffffffffffffffffffffffffffff168152600060208201528060408101610298565b84517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b828434610e2d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e2d575073ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b80fd5b9050346102c557602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261111e57610e6b612289565b9173ffffffffffffffffffffffffffffffffffffffff806002541633036110f657806006541693169182156110cf578383146110cf578451908383830152828252610eb582612317565b7faddd34f50000000000000000000000000000000000000000000000000000000060005260018084528087600020428155019280519267ffffffffffffffff84116106bb5750610f05845461245b565b601f8111611086575b508490601f8411600114610fbe579183807ff296648dbd7a1f6fa8844476fcafe111c6c359f4205835a5ceab8be87deead7c999795936060999795600093610f93575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b85519283528201528484820152a151f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff38610f51565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0849394169185600052866000209260005b8181106110715750917ff296648dbd7a1f6fa8844476fcafe111c6c359f4205835a5ceab8be87deead7c99979593918560609a9896941061103a575b505050811b019055610f82565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c1916905538808061102d565b82840151855593860193928801928801610ff1565b8460005285600020601f850160051c8101918786106110c5575b601f0160051c019083905b8281106110b9575050610f0e565b600081550183906110ab565b90915081906110a0565b84517f68155f9a000000000000000000000000000000000000000000000000000000008152fd5b8285517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b8380fd5b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05760209073ffffffffffffffffffffffffffffffffffffffff600554169051908152f35b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c0576020905160018152f35b9050346102c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5576111e8612289565b9073ffffffffffffffffffffffffffffffffffffffff908160025416918233036112be578316908115611297578282146112975750600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055825173ffffffffffffffffffffffffffffffffffffffff9182168152911660208201527fc84b53e36f9cc4d47cde3c091e2817c6da2d24e3acf415caa7162388440c41cd908060408101610298565b84517f6d187b28000000000000000000000000000000000000000000000000000000008152fd5b5083517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b9050346102c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c55761131f612289565b906113286122b1565b67ffffffffffffffff9160443583811161059e5761134990369083016123ae565b9273ffffffffffffffffffffffffffffffffffffffff938460025416330361158e57848060055416961694851561156657868614611566576113a688519283926020978989860152168a8401526060808401526080830190612418565b036113d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe091828101845283612333565b7f90c210bf000000000000000000000000000000000000000000000000000000006000526001918286528289600020428155019481519485116106bb575061141f855461245b565b601f811161151d575b508591601f85116001146114ac57509183807f9c330345d9c36f7cf94243f2b70f88d8ae30322193ae0cb95cce75780d4b7071999795936060999795600093610f935750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c191617905585519283528201528484820152a151f35b849394929192169185600052866000209260005b8181106115085750917f9c330345d9c36f7cf94243f2b70f88d8ae30322193ae0cb95cce75780d4b707199979593918560609a9896941061103a57505050811b019055610f82565b828401518555938601939288019288016114c0565b8560005286600020601f860160051c81019188871061155c575b601f0160051c019084905b828110611550575050611428565b60008155018490611542565b9091508190611537565b8388517f68155f9a000000000000000000000000000000000000000000000000000000008152fd5b8287517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b9050346102c557827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5577f64d623530000000000000000000000000000000000000000000000000000000080600052600190602090828252846000206116288487519261041284612317565b83820152600281511061073f575160005481018091116107115742106106e9578060005282825261165d8386600020016124ae565b90600052828252846000208381558386519161167883612317565b818352843681850137019080519067ffffffffffffffff82116118615781906116a1845461245b565b601f811161180e575b508590601f831160011461177157600092611766575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82871b9260031b1c19161790555b81818051810103126105a257810151926224ea00841161173f575082855583519283528201527fc5a1c5c7b7c9e42e6bbead55c3e21bfe68d5950bf1b26e6f75df442bec11038f908290a151f35b84517f4fbe5dba000000000000000000000000000000000000000000000000000000008152fd5b0151905038806116c0565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08894169185600052876000209260005b898282106117f857505084116117c1575b505050811b0190556116f1565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690553880806117b4565b8385015186558b979095019493840193016117a3565b9091508360005285600020601f840160051c810191878510611857575b84939291601f8a920160051c01915b8281106118485750506116aa565b6000815585945089910161183a565b909150819061182b565b6041877f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b9050346102c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5576118c8612289565b9073ffffffffffffffffffffffffffffffffffffffff806002541633036119a25780831690811561197a5760035416918282146112975750600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055825173ffffffffffffffffffffffffffffffffffffffff9182168152911660208201527fb3efe8834d414d488190f39a997544d1e941aa3e5ebad80baa2abd82015482bf908060408101610298565b8285517f6d187b28000000000000000000000000000000000000000000000000000000008152fd5b5082517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b9050346102c557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c557611a02612289565b611a0a6122b1565b9073ffffffffffffffffffffffffffffffffffffffff9081600254163303611aa15790808694939216803b15611a9d57849283602492885196879586947ff2fde38b00000000000000000000000000000000000000000000000000000000865216908401525af18015611a9057611a8057505051f35b611a89906122d4565b6101c05751f35b50505051903d90823e3d90fd5b8480fd5b8385517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057602091549051908152f35b9050346102c5576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261111e5781359073ffffffffffffffffffffffffffffffffffffffff600254163303611dc3576224ea008211611d9b578351928282850152818452611b7684612317565b7f64d62353000000000000000000000000000000000000000000000000000000006000526001908183528186600020428155019185519167ffffffffffffffff83116106bb575091869493918893611bce835461245b565b601f8111611d3e575b508397601f8311600114611c7a57827fc5a1c5c7b7c9e42e6bbead55c3e21bfe68d5950bf1b26e6f75df442bec11038f998192600093611c4f575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b8351928352820152a151f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff38611c12565b977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0839293169084600052856000209160005b818110611d23575099837fc5a1c5c7b7c9e42e6bbead55c3e21bfe68d5950bf1b26e6f75df442bec11038f9b10611cec575b505050811b019055611c43565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080611cdf565b8b83015184558c9a508d985092850192918701918701611cad565b91939596509180945060005284600020601f840160051c810191868510611d91575b918a959391601f8b999896940160051c01905b818110611d805750611bd7565b600081558a98508b96508201611d73565b9091508190611d60565b8284517f4fbe5dba000000000000000000000000000000000000000000000000000000008152fd5b8284517f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b9050346102c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c557611e24612289565b73ffffffffffffffffffffffffffffffffffffffff80600254163303611dc357825491818316611ea65716908115611e7e577fffffffffffffffffffffffff00000000000000000000000000000000000000001617905551f35b8284517f6d187b28000000000000000000000000000000000000000000000000000000008152fd5b8385517f5763f48e000000000000000000000000000000000000000000000000000000008152fd5b839150346101c05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057611f08612289565b73ffffffffffffffffffffffffffffffffffffffff90816002541633036110f6571690813b156102c557829182918551809481937f79ba50970000000000000000000000000000000000000000000000000000000083525af18015611f7d57611f7057509051f35b611f79906122d4565b9051f35b83513d84823e3d90fd5b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05760209073ffffffffffffffffffffffffffffffffffffffff600854169051908152f35b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057602090516224ea008152f35b9050346102c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c5579181923581526001602052206120796120646001835493016124ae565b83519384938452806020850152830190612418565b0390f35b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c0578051612079916120bc82612317565b600182526020368184013751918291602083526020830190612418565b5050346101c057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05760209073ffffffffffffffffffffffffffffffffffffffff600754169051908152f35b9050346102c557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c557612164612289565b60243567ffffffffffffffff8111611a9d5761218390369084016123ae565b9173ffffffffffffffffffffffffffffffffffffffff806002541633036112be578216156121b657509061059791612643565b83517f68155f9a000000000000000000000000000000000000000000000000000000008152fd5b91503461111e57837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261111e5773ffffffffffffffffffffffffffffffffffffffff918260035416330361226457505061223d9060065416612594565b517f014f4edb46826c5e74e23ca091de2d3fdfe2cc9d62b5eebf7f5a63eff16d55be8282a1f35b7f39218f3b000000000000000000000000000000000000000000000000000000008152fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036122ac57565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036122ac57565b67ffffffffffffffff81116122e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176122e857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176122e857604052565b67ffffffffffffffff81116122e857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f820112156122ac578035906123c582612374565b926123d36040519485612333565b828452602083830101116122ac57816000926020809301838601378301015290565b60005b8381106124085750506000910152565b81810151838201526020016123f8565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612454815180928187528780880191016123f5565b0116010190565b90600182811c921680156124a4575b602083101461247557565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161246a565b90604051918260008254926124c28461245b565b90818452600194858116908160001461253157506001146124ee575b50506124ec92500383612333565b565b9093915060005260209081600020936000915b8183106125195750506124ec935082010138806124de565b85548884018501529485019487945091830191612501565b90506124ec9550602093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138806124de565b519073ffffffffffffffffffffffffffffffffffffffff821682036122ac57565b73ffffffffffffffffffffffffffffffffffffffff8091168015612619577f9c330345d9c36f7cf94243f2b70f88d8ae30322193ae0cb95cce75780d4b70719160609160055491817fffffffffffffffffffffffff000000000000000000000000000000000000000084161760055560405192168252602082015260016040820152a1565b60046040517f68155f9a000000000000000000000000000000000000000000000000000000008152fd5b8151156126de5773ffffffffffffffffffffffffffffffffffffffff918260045416803b156122ac576126b89360008094604051968795869485937f4f1ef286000000000000000000000000000000000000000000000000000000008552166004840152604060248401526044830190612418565b03925af180156126d2576126c95750565b6124ec906122d4565b6040513d6000823e3d90fd5b60045473ffffffffffffffffffffffffffffffffffffffff9081169250823b156122ac5760246000928360405195869485937f3659cfe60000000000000000000000000000000000000000000000000000000085521660048401525af180156126d2576126c9575056fea26469706673582212203b473bc68bd1fee29b20fae64e02cad9bb792d075050136a1f84bb2feb42d3fb64736f6c63430008100033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000fae0bbfd75307865dcdf21d9defefedeee718431000000000000000000000000b6bc9b50b4ac1397ab03d8a24d8fa529a5070ff0000000000000000000000000b8d76a79b60449deda533b9eee68a1efccc9a04c

-----Decoded View---------------
Arg [0] : admin_ (address): 0xfae0bbFD75307865Dcdf21d9deFEFEDEee718431
Arg [1] : coreImplementation_ (address): 0xb6Bc9B50b4AC1397AB03d8a24d8fa529a5070ff0
Arg [2] : fallbackImplementation_ (address): 0xb8D76a79B60449deda533B9eeE68a1efcCc9a04C

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000fae0bbfd75307865dcdf21d9defefedeee718431
Arg [1] : 000000000000000000000000b6bc9b50b4ac1397ab03d8a24d8fa529a5070ff0
Arg [2] : 000000000000000000000000b8d76a79b60449deda533b9eee68a1efccc9a04c


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.