ETH Price: $2,890.43 (-1.72%)

Contract

0x65934e2f228Fde069A6255F46E6A15Bc9DE38545

Overview

ETH Balance

Linea Mainnet LogoLinea Mainnet LogoLinea Mainnet Logo0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Transfer Ownersh...1648102023-08-10 6:46:56900 days ago1691650016IN
0x65934e2f...c9DE38545
0 ETH0.000046011.5
Init Owner740172023-07-28 14:39:55912 days ago1690555195IN
0x65934e2f...c9DE38545
0 ETH0.000262463.96400891

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
283280452026-01-26 8:50:041 hr ago1769417404
0x65934e2f...c9DE38545
0 ETH
283280452026-01-26 8:50:041 hr ago1769417404
0x65934e2f...c9DE38545
0 ETH
283280452026-01-26 8:50:041 hr ago1769417404
0x65934e2f...c9DE38545
0 ETH
283280452026-01-26 8:50:041 hr ago1769417404
0x65934e2f...c9DE38545
0 ETH
283280452026-01-26 8:50:041 hr ago1769417404
0x65934e2f...c9DE38545
0 ETH
283280452026-01-26 8:50:041 hr ago1769417404
0x65934e2f...c9DE38545
0 ETH
283279592026-01-26 8:46:541 hr ago1769417214
0x65934e2f...c9DE38545
0 ETH
283279592026-01-26 8:46:541 hr ago1769417214
0x65934e2f...c9DE38545
0 ETH
283279592026-01-26 8:46:541 hr ago1769417214
0x65934e2f...c9DE38545
0 ETH
283279592026-01-26 8:46:541 hr ago1769417214
0x65934e2f...c9DE38545
0 ETH
283279592026-01-26 8:46:541 hr ago1769417214
0x65934e2f...c9DE38545
0 ETH
283279592026-01-26 8:46:541 hr ago1769417214
0x65934e2f...c9DE38545
0 ETH
283275552026-01-26 8:31:141 hr ago1769416274
0x65934e2f...c9DE38545
0 ETH
283275552026-01-26 8:31:141 hr ago1769416274
0x65934e2f...c9DE38545
0 ETH
283275552026-01-26 8:31:141 hr ago1769416274
0x65934e2f...c9DE38545
0 ETH
283275552026-01-26 8:31:141 hr ago1769416274
0x65934e2f...c9DE38545
0 ETH
283275552026-01-26 8:31:141 hr ago1769416274
0x65934e2f...c9DE38545
0 ETH
283275552026-01-26 8:31:141 hr ago1769416274
0x65934e2f...c9DE38545
0 ETH
283231432026-01-26 5:53:504 hrs ago1769406830
0x65934e2f...c9DE38545
0 ETH
283231432026-01-26 5:53:504 hrs ago1769406830
0x65934e2f...c9DE38545
0 ETH
283231432026-01-26 5:53:504 hrs ago1769406830
0x65934e2f...c9DE38545
0 ETH
283231432026-01-26 5:53:504 hrs ago1769406830
0x65934e2f...c9DE38545
0 ETH
283231432026-01-26 5:53:504 hrs ago1769406830
0x65934e2f...c9DE38545
0 ETH
283231432026-01-26 5:53:504 hrs ago1769406830
0x65934e2f...c9DE38545
0 ETH
283231432026-01-26 5:53:504 hrs ago1769406830
0x65934e2f...c9DE38545
0 ETH
View All Internal Transactions
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FeeRateDIP3Impl

Compiler Version
v0.6.9+commit.3e3065ac

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/*

    Copyright 2021 DODO ZOO.
    SPDX-License-Identifier: Apache-2.0

*/

pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;

import {InitializableOwnable} from "../lib/InitializableOwnable.sol";
import {IERC20} from "../intf/IERC20.sol";
import {SafeMath} from "../lib/SafeMath.sol";

interface ICrowdPooling {
    function _QUOTE_RESERVE_() external view returns (uint256);
    function getShares(address user) external view returns (uint256);
    function _OWNER_() external returns (address);
}

interface IFee {
    function getUserFee(address user) external view returns (uint256);
}

interface IQuota {
    function getUserQuota(address user) external view returns (int);
}

interface IPoolHeartBeat {
    function isPoolHeartBeatLive(address pool) external view returns(bool);
}

interface IPool {
    function version() external pure returns (string memory);
    function _LP_FEE_RATE_() external view returns (uint256);
    function _BASE_RESERVE_() external view returns (uint);
    function _QUOTE_RESERVE_() external view returns (uint);
    function _K_() external view returns (uint);
}

contract FeeRateDIP3Impl is InitializableOwnable {
    using SafeMath for uint256;

    // ============ Storage  ============

    uint256 public _LP_MT_RATIO_ = 25;

    struct CPPoolInfo {
        address quoteToken;
        int globalQuota;
        address feeAddr;
        address quotaAddr;
    }

    mapping(address => CPPoolInfo) public cpPools;
    mapping(address => uint256) public specPoolList;
    mapping (address => bool) public isAdminListed;
    address public poolHeartBeat;

    // ============ Events =============
    event AddAdmin(address admin);
    event RemoveAdmin(address admin);

    // ============ Ownable Functions ============
    
    function addCpPoolInfo(address cpPool, address quoteToken, int globalQuota, address feeAddr, address quotaAddr) external {
        require(isAdminListed[msg.sender], "ACCESS_DENIED");
        CPPoolInfo memory cpPoolInfo =  CPPoolInfo({
            quoteToken: quoteToken,
            feeAddr: feeAddr,
            quotaAddr: quotaAddr,
            globalQuota: globalQuota
        });
        cpPools[cpPool] = cpPoolInfo;
    }

    function setCpPoolInfo(address cpPool, address quoteToken, int globalQuota, address feeAddr, address quotaAddr) external onlyOwner {
        cpPools[cpPool].quoteToken = quoteToken;
        cpPools[cpPool].feeAddr = feeAddr;
        cpPools[cpPool].quotaAddr = quotaAddr;
        cpPools[cpPool].globalQuota = globalQuota;
    }

    function setLpMtRatio(uint256 newLpMtRatio) external onlyOwner {
        _LP_MT_RATIO_ = newLpMtRatio;
    }


    function setSpecPoolList (address poolAddr, uint256 mtFeeRate) public onlyOwner {
        specPoolList[poolAddr] = mtFeeRate;
    }

    function addAdminList (address userAddr) external onlyOwner {
        isAdminListed[userAddr] = true;
        emit AddAdmin(userAddr);
    }

    function removeAdminList (address userAddr) external onlyOwner {
        isAdminListed[userAddr] = false;
        emit RemoveAdmin(userAddr);
    }

    function setPoolHeartBeat (address newPoolHeartBeat) public onlyOwner {
        poolHeartBeat = newPoolHeartBeat;
    }

    // ============ Pool Owner Functions ============

    function setCpPoolQuotaAddr(address cpPool, address quotaAddr) external {
        require(msg.sender == ICrowdPooling(cpPool)._OWNER_(), "NOT OWNER OF POOL");
        cpPools[cpPool].quotaAddr = quotaAddr;
    }

    // ============ View Functions ============

    function getFeeRate(address pool, address user) external view returns (uint256) {
        try IPool(pool).version() returns (string memory poolVersion) {
            bytes32 hashPoolVersion = keccak256(abi.encodePacked(poolVersion));
            if(_kjudge(hashPoolVersion)) {
                uint k = IPool(pool)._K_();
                uint baseReserve = IPool(pool)._BASE_RESERVE_();
                uint quoteReserve = IPool(pool)._QUOTE_RESERVE_();
                require(!(k==0 && (baseReserve ==0 || quoteReserve == 0)), "KJUDGE_ERROR");
            }

            if (poolHeartBeat != address(0) && !IPoolHeartBeat(poolHeartBeat).isPoolHeartBeatLive(pool)) {
                return 10**18 - IPool(pool)._LP_FEE_RATE_() - 1;
            }

            if(specPoolList[pool] != 0) {
                return specPoolList[pool];
            }

            if(_cp(hashPoolVersion)) {
                CPPoolInfo memory cpPoolInfo = cpPools[pool];
                address quoteToken = cpPoolInfo.quoteToken;
                if(quoteToken == address(0)) {
                    return 0;
                }else {
                    uint256 userInput = IERC20(quoteToken).balanceOf(pool).sub(ICrowdPooling(pool)._QUOTE_RESERVE_());
                    uint256 userStake = ICrowdPooling(pool).getShares(user);
                    address feeAddr = cpPoolInfo.feeAddr;
                    address quotaAddr = cpPoolInfo.quotaAddr;
                    int curQuota = cpPoolInfo.globalQuota;
                    if(quotaAddr != address(0))
                        curQuota = IQuota(quotaAddr).getUserQuota(user);

                    require(curQuota == -1 || (curQuota != -1 && int(userInput.add(userStake)) <= curQuota), "DODOFeeImpl: EXCEED_YOUR_QUOTA");

                    if(feeAddr == address(0)) {
                        return 0;
                    } else {
                        return IFee(feeAddr).getUserFee(user);
                    }
                }
            } else if(_dip3dvm(hashPoolVersion) || _dip3dsp(hashPoolVersion)) {
                uint256 lpFeeRate = IPool(pool)._LP_FEE_RATE_();
                uint256 mtFeeRate = lpFeeRate.mul(_LP_MT_RATIO_).div(100);
                if(lpFeeRate.add(mtFeeRate) >= 10**18) {
                    return 0;
                } else {
                    return mtFeeRate;
                }
            } else {
                return 0;
            }
        } catch (bytes memory) {
            return 0;
        }
    }

    function getCPInfoByUser(address pool, address user) external view returns (bool isHaveCap, int curQuota, uint256 userFee) {
        CPPoolInfo memory cpPoolInfo = cpPools[pool];
        if(cpPoolInfo.quoteToken == address(0)) {
            isHaveCap = false;
            curQuota = -1;
            userFee = 0;
        }else {
            address quotaAddr = cpPoolInfo.quotaAddr;
            curQuota = cpPoolInfo.globalQuota;
            if(quotaAddr != address(0))
                curQuota = IQuota(quotaAddr).getUserQuota(user);
        
            if(curQuota == -1) {
                isHaveCap = false;
            }else {
                isHaveCap = true;
                uint256 userStake = ICrowdPooling(pool).getShares(user);
                if(uint256(curQuota) >= userStake) {
                    curQuota = int(uint256(curQuota).sub(userStake));
                }else {
                    curQuota = 0;
                }
            }

            address feeAddr = cpPoolInfo.feeAddr;
            if(feeAddr == address(0)) {
                userFee =  0;
            } else {
                userFee = IFee(feeAddr).getUserFee(user);
            }
        }
    }

    function _cp(bytes32 _hashPoolVersion) internal pure returns (bool) {
        return (_hashPoolVersion == keccak256(abi.encodePacked("CP 1.0.0")) || _hashPoolVersion == keccak256(abi.encodePacked("CP 2.0.0")));
    }

    function _dip3dvm(bytes32 _hashPoolVersion) internal pure returns (bool){
        return (_hashPoolVersion == keccak256(abi.encodePacked("DVM 1.0.2")) || _hashPoolVersion == keccak256(abi.encodePacked("DVM 1.0.3")));
    }

    function _dip3dsp(bytes32 _hashPoolVersion) internal pure returns (bool){
        return (_hashPoolVersion == keccak256(abi.encodePacked("DSP 1.0.1")) || _hashPoolVersion == keccak256(abi.encodePacked("DSP 1.0.2")));
    }

    function _kjudge(bytes32 _hashPoolVersion) internal pure returns (bool) {
        return (_hashPoolVersion == keccak256(abi.encodePacked("DVM 1.0.2")) || _hashPoolVersion == keccak256(abi.encodePacked("DSP 1.0.1")) || _hashPoolVersion == keccak256(abi.encodePacked("DPP 1.0.0")) || _hashPoolVersion == keccak256(abi.encodePacked("DPP Advanced 1.0.0")));
    }

    function version() virtual external pure returns (string memory) {
        return "1.2.0";
    }
}

/*

    Copyright 2020 DODO ZOO.
    SPDX-License-Identifier: Apache-2.0

*/

pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;


/**
 * @title SafeMath
 * @author DODO Breeder
 *
 * @notice Math operations with safety checks that revert on error
 */
library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "MUL_ERROR");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "DIVIDING_ERROR");
        return a / b;
    }

    function divCeil(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 quotient = div(a, b);
        uint256 remainder = a - quotient * b;
        if (remainder > 0) {
            return quotient + 1;
        } else {
            return quotient;
        }
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SUB_ERROR");
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "ADD_ERROR");
        return c;
    }

    function sqrt(uint256 x) internal pure returns (uint256 y) {
        uint256 z = x / 2 + 1;
        y = x;
        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }
}

/*

    Copyright 2020 DODO ZOO.
    SPDX-License-Identifier: Apache-2.0

*/

pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;

/**
 * @title Ownable
 * @author DODO Breeder
 *
 * @notice Ownership related functions
 */
contract InitializableOwnable {
    address public _OWNER_;
    address public _NEW_OWNER_;
    bool internal _INITIALIZED_;

    // ============ Events ============

    event OwnershipTransferPrepared(address indexed previousOwner, address indexed newOwner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    // ============ Modifiers ============

    modifier notInitialized() {
        require(!_INITIALIZED_, "DODO_INITIALIZED");
        _;
    }

    modifier onlyOwner() {
        require(msg.sender == _OWNER_, "NOT_OWNER");
        _;
    }

    // ============ Functions ============

    function initOwner(address newOwner) public notInitialized {
        _INITIALIZED_ = true;
        _OWNER_ = newOwner;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        emit OwnershipTransferPrepared(_OWNER_, newOwner);
        _NEW_OWNER_ = newOwner;
    }

    function claimOwnership() public {
        require(msg.sender == _NEW_OWNER_, "INVALID_CLAIM");
        emit OwnershipTransferred(_OWNER_, _NEW_OWNER_);
        _OWNER_ = _NEW_OWNER_;
        _NEW_OWNER_ = address(0);
    }
}

// This is a file copied from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    function decimals() external view returns (uint8);

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"AddAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferPrepared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"RemoveAdmin","type":"event"},{"inputs":[],"name":"_LP_MT_RATIO_","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_NEW_OWNER_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_OWNER_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddr","type":"address"}],"name":"addAdminList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cpPool","type":"address"},{"internalType":"address","name":"quoteToken","type":"address"},{"internalType":"int256","name":"globalQuota","type":"int256"},{"internalType":"address","name":"feeAddr","type":"address"},{"internalType":"address","name":"quotaAddr","type":"address"}],"name":"addCpPoolInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"cpPools","outputs":[{"internalType":"address","name":"quoteToken","type":"address"},{"internalType":"int256","name":"globalQuota","type":"int256"},{"internalType":"address","name":"feeAddr","type":"address"},{"internalType":"address","name":"quotaAddr","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getCPInfoByUser","outputs":[{"internalType":"bool","name":"isHaveCap","type":"bool"},{"internalType":"int256","name":"curQuota","type":"int256"},{"internalType":"uint256","name":"userFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"initOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAdminListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolHeartBeat","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddr","type":"address"}],"name":"removeAdminList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cpPool","type":"address"},{"internalType":"address","name":"quoteToken","type":"address"},{"internalType":"int256","name":"globalQuota","type":"int256"},{"internalType":"address","name":"feeAddr","type":"address"},{"internalType":"address","name":"quotaAddr","type":"address"}],"name":"setCpPoolInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cpPool","type":"address"},{"internalType":"address","name":"quotaAddr","type":"address"}],"name":"setCpPoolQuotaAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLpMtRatio","type":"uint256"}],"name":"setLpMtRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPoolHeartBeat","type":"address"}],"name":"setPoolHeartBeat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolAddr","type":"address"},{"internalType":"uint256","name":"mtFeeRate","type":"uint256"}],"name":"setSpecPoolList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"specPoolList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"}]

6080604052601960025534801561001557600080fd5b50611bb0806100256000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063848cc303116100b8578063b1efb8f41161007c578063b1efb8f414610271578063c30c616914610279578063ef6a5d791461028c578063f2fde38b1461029f578063fae783d8146102b2578063fd8bd849146102d457610137565b8063848cc303146102105780638614c552146102305780638c34329614610243578063a1e281de1461024b578063ae52aae71461025e57610137565b80634e71e0c8116100ff5780634e71e0c8146101b55780635454b842146101bd57806354fd4d50146101d057806368f0cb6f146101e55780638456db151461020857610137565b806301ea364b1461013c5780630d0092971461015157806316048bc4146101645780631822c0c01461018257806344c19402146101a2575b600080fd5b61014f61014a3660046116ff565b6102e7565b005b61014f61015f366004611628565b610336565b61016c610396565b60405161017991906118e0565b60405180910390f35b610195610190366004611628565b6103a5565b604051610179919061191f565b61014f6101b0366004611698565b6103ba565b61014f61043e565b61014f6101cb366004611698565b6104cc565b6101d861058d565b6040516101799190611942565b6101f86101f3366004611628565b6105ac565b60405161017994939291906118f4565b61016c6105e2565b61022361021e366004611660565b6105f1565b6040516101799190611b29565b61022361023e366004611628565b610e5d565b61016c610e6f565b61014f6102593660046117fd565b610e7e565b61014f61026c366004611628565b610ead565b610223610f35565b61014f610287366004611628565b610f3b565b61014f61029a366004611660565b610f87565b61014f6102ad366004611628565b61105c565b6102c56102c0366004611660565b6110e1565b6040516101799392919061192a565b61014f6102e2366004611628565b611355565b6000546001600160a01b0316331461031a5760405162461bcd60e51b815260040161031190611ac0565b60405180910390fd5b6001600160a01b03909116600090815260046020526040902055565b600154600160a01b900460ff16156103605760405162461bcd60e51b815260040161031190611a0d565b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b031681565b60056020526000908152604090205460ff1681565b6000546001600160a01b031633146103e45760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03948516600090815260036020819052604090912080549587166001600160a01b031996871617815560028101805494881694871694909417909355820180549190951693169290921790925560010155565b6001546001600160a01b031633146104685760405162461bcd60e51b815260040161031190611975565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b3360009081526005602052604090205460ff166104fb5760405162461bcd60e51b815260040161031190611a6e565b610503611601565b50604080516080810182526001600160a01b039586168152602080820195865293861681830190815292861660608201908152968616600090815260039485905291909120905181549086166001600160a01b0319918216178255935160018201559051600282018054918616918516919091179055935193018054939092169216919091179055565b6040805180820190915260058152640312e322e360dc1b602082015290565b600360208190526000918252604090912080546001820154600283015492909301546001600160a01b0391821693928216911684565b6001546001600160a01b031681565b6000826001600160a01b03166354fd4d506040518163ffffffff1660e01b815260040160006040518083038186803b15801561062c57600080fd5b505afa92505050801561066157506040513d6000823e601f3d908101601f1916820160405261065e9190810190611762565b60015b61069f573d80801561068f576040519150601f19603f3d011682016040523d82523d6000602084013e610694565b606091505b506000915050610e57565b6000816040516020016106b29190611815565b6040516020818303038152906040528051906020012090506106d3816113cf565b1561086c576000856001600160a01b031663ec2fd46d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561071357600080fd5b505afa158015610727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074b919061174a565b90506000866001600160a01b0316637d7215046040518163ffffffff1660e01b815260040160206040518083038186803b15801561078857600080fd5b505afa15801561079c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c0919061174a565b90506000876001600160a01b031663bbf5ce786040518163ffffffff1660e01b815260040160206040518083038186803b1580156107fd57600080fd5b505afa158015610811573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610835919061174a565b90508215801561084b575081158061084b575080155b156108685760405162461bcd60e51b81526004016103119061199c565b5050505b6006546001600160a01b0316158015906109035750600654604051633ded920b60e11b81526001600160a01b0390911690637bdb2416906108b19088906004016118e0565b60206040518083038186803b1580156108c957600080fd5b505afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610901919061172a565b155b1561098f576001856001600160a01b031663ab44a7a36040518163ffffffff1660e01b815260040160206040518083038186803b15801561094357600080fd5b505afa158015610957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097b919061174a565b670de0b6b3a7640000030392505050610e57565b6001600160a01b038516600090815260046020526040902054156109ce575050506001600160a01b038216600090815260046020526040902054610e57565b6109d781611487565b15610d5e576109e4611601565b506001600160a01b0380861660009081526003602081815260409283902083516080810185528154861680825260018301549382019390935260028201548616948101949094529091015490921660608201529080610a4a576000945050505050610e57565b6000610b48886001600160a01b031663bbf5ce786040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8857600080fd5b505afa158015610a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac0919061174a565b6040516370a0823160e01b81526001600160a01b038516906370a0823190610aec908d906004016118e0565b60206040518083038186803b158015610b0457600080fd5b505afa158015610b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3c919061174a565b9063ffffffff6114c516565b90506000886001600160a01b031663f04da65b896040518263ffffffff1660e01b8152600401610b7891906118e0565b60206040518083038186803b158015610b9057600080fd5b505afa158015610ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc8919061174a565b60408501516060860151602087015192935090916001600160a01b03821615610c6a576040516398a299e560e01b81526001600160a01b038316906398a299e590610c17908e906004016118e0565b60206040518083038186803b158015610c2f57600080fd5b505afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c67919061174a565b90505b806000191480610c9657508060001914158015610c96575080610c93868663ffffffff6114ed16565b13155b610cb25760405162461bcd60e51b815260040161031190611a37565b6001600160a01b038316610cd25760009950505050505050505050610e57565b60405163060f58c360e01b81526001600160a01b0384169063060f58c390610cfe908e906004016118e0565b60206040518083038186803b158015610d1657600080fd5b505afa158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e919061174a565b9950505050505050505050610e57565b610d6781611519565b80610d765750610d7681611557565b15610e50576000856001600160a01b031663ab44a7a36040518163ffffffff1660e01b815260040160206040518083038186803b158015610db657600080fd5b505afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee919061174a565b90506000610e186064610e0c6002548561159590919063ffffffff16565b9063ffffffff6115cf16565b9050670de0b6b3a7640000610e33838363ffffffff6114ed16565b10610e45576000945050505050610e57565b9350610e5792505050565b6000925050505b92915050565b60046020526000908152604090205481565b6006546001600160a01b031681565b6000546001600160a01b03163314610ea85760405162461bcd60e51b815260040161031190611ac0565b600255565b6000546001600160a01b03163314610ed75760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03811660009081526005602052604090819020805460ff19166001179055517fad6de4452a631e641cb59902236607946ce9272b9b981f2f80e8d129cb9084ba90610f2a9083906118e0565b60405180910390a150565b60025481565b6000546001600160a01b03163314610f655760405162461bcd60e51b815260040161031190611ac0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b816001600160a01b03166316048bc46040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fc257600080fd5b505af1158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190611644565b6001600160a01b0316336001600160a01b03161461102a5760405162461bcd60e51b815260040161031190611a95565b6001600160a01b0391821660009081526003602081905260409091200180546001600160a01b03191691909216179055565b6000546001600160a01b031633146110865760405162461bcd60e51b815260040161031190611ac0565b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060006110ee611601565b506001600160a01b03808616600090815260036020818152604092839020835160808101855281548616808252600183015493820193909352600282015486169481019490945290910154909216606082015290611158576000935060001992506000915061134d565b6060810151602082015193506001600160a01b038116156111f2576040516398a299e560e01b81526001600160a01b038216906398a299e59061119f9089906004016118e0565b60206040518083038186803b1580156111b757600080fd5b505afa1580156111cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ef919061174a565b93505b83600019141561120557600094506112af565b60405163f04da65b60e01b8152600195506000906001600160a01b0389169063f04da65b90611238908a906004016118e0565b60206040518083038186803b15801561125057600080fd5b505afa158015611264573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611288919061174a565b90508085106112a8576112a1858263ffffffff6114c516565b94506112ad565b600094505b505b60408201516001600160a01b0381166112cb576000935061134a565b60405163060f58c360e01b81526001600160a01b0382169063060f58c3906112f7908a906004016118e0565b60206040518083038186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611347919061174a565b93505b50505b509250925092565b6000546001600160a01b0316331461137f5760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03811660009081526005602052604090819020805460ff19169055517f753f40ca3312b2408759a67875b367955e7baa221daf08aa3d643d96202ac12b90610f2a9083906118e0565b60006040516020016113e090611846565b60405160208183030381529060405280519060200120821480611426575060405160200161140d90611884565b6040516020818303038152906040528051906020012082145b80611454575060405160200161143b90611899565b6040516020818303038152906040528051906020012082145b80610e575750604051602001611469906118c2565b60405160208183030381529060405280519060200120821492915050565b600060405160200161149890611870565b60405160208183030381529060405280519060200120821480610e575750604051602001611469906118ae565b6000828211156114e75760405162461bcd60e51b8152600401610311906119ea565b50900390565b6000828201838110156115125760405162461bcd60e51b815260040161031190611ae3565b9392505050565b600060405160200161152a90611846565b60405160208183030381529060405280519060200120821480610e5757506040516020016114699061185b565b600060405160200161156890611884565b60405160208183030381529060405280519060200120821480610e57575060405160200161146990611831565b6000826115a457506000610e57565b828202828482816115b157fe5b04146115125760405162461bcd60e51b815260040161031190611b06565b60008082116115f05760405162461bcd60e51b8152600401610311906119c2565b8183816115f957fe5b049392505050565b60408051608081018252600080825260208201819052918101829052606081019190915290565b600060208284031215611639578081fd5b813561151281611b62565b600060208284031215611655578081fd5b815161151281611b62565b60008060408385031215611672578081fd5b823561167d81611b62565b9150602083013561168d81611b62565b809150509250929050565b600080600080600060a086880312156116af578081fd5b85356116ba81611b62565b945060208601356116ca81611b62565b93506040860135925060608601356116e181611b62565b915060808601356116f181611b62565b809150509295509295909350565b60008060408385031215611711578182fd5b823561171c81611b62565b946020939093013593505050565b60006020828403121561173b578081fd5b81518015158114611512578182fd5b60006020828403121561175b578081fd5b5051919050565b600060208284031215611773578081fd5b815167ffffffffffffffff8082111561178a578283fd5b81840185601f82011261179b578384fd5b80519250818311156117ab578384fd5b604051601f8401601f1916810160200183811182821017156117cb578586fd5b6040528381528184016020018710156117e2578485fd5b6117f3846020830160208501611b32565b9695505050505050565b60006020828403121561180e578081fd5b5035919050565b60008251611827818460208701611b32565b9190910192915050565b682229a810189718171960b91b815260090190565b68222b2690189718171960b91b815260090190565b6844564d20312e302e3360b81b815260090190565b670435020312e302e360c41b815260080190565b6844535020312e302e3160b81b815260090190565b68044505020312e302e360bc1b815260090190565b670435020322e302e360c41b815260080190565b71044505020416476616e63656420312e302e360741b815260120190565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815260208101939093529083166040830152909116606082015260800190565b901515815260200190565b92151583526020830191909152604082015260600190565b6000602082528251806020840152611961816040850160208701611b32565b601f01601f19169190910160400192915050565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b6020808252600c908201526b25a52aa223a2afa2a92927a960a11b604082015260600190565b6020808252600e908201526d2224ab24a224a723afa2a92927a960911b604082015260600190565b60208082526009908201526829aaa12fa2a92927a960b91b604082015260600190565b60208082526010908201526f1113d113d7d25392551250531256915160821b604082015260600190565b6020808252601e908201527f444f444f466565496d706c3a204558434545445f594f55525f51554f54410000604082015260600190565b6020808252600d908201526c1050d0d154d4d7d11153925151609a1b604082015260600190565b6020808252601190820152701393d50813d5d391548813d1881413d3d3607a1b604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b60208082526009908201526820a2222fa2a92927a960b91b604082015260600190565b60208082526009908201526826aaa62fa2a92927a960b91b604082015260600190565b90815260200190565b60005b83811015611b4d578181015183820152602001611b35565b83811115611b5c576000848401525b50505050565b6001600160a01b0381168114611b7757600080fd5b5056fea2646970667358221220d2e8d52a6c5f5567a6d93556dd1bfe60a2638bb493dc72826e081510f6941abc64736f6c63430006090033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063848cc303116100b8578063b1efb8f41161007c578063b1efb8f414610271578063c30c616914610279578063ef6a5d791461028c578063f2fde38b1461029f578063fae783d8146102b2578063fd8bd849146102d457610137565b8063848cc303146102105780638614c552146102305780638c34329614610243578063a1e281de1461024b578063ae52aae71461025e57610137565b80634e71e0c8116100ff5780634e71e0c8146101b55780635454b842146101bd57806354fd4d50146101d057806368f0cb6f146101e55780638456db151461020857610137565b806301ea364b1461013c5780630d0092971461015157806316048bc4146101645780631822c0c01461018257806344c19402146101a2575b600080fd5b61014f61014a3660046116ff565b6102e7565b005b61014f61015f366004611628565b610336565b61016c610396565b60405161017991906118e0565b60405180910390f35b610195610190366004611628565b6103a5565b604051610179919061191f565b61014f6101b0366004611698565b6103ba565b61014f61043e565b61014f6101cb366004611698565b6104cc565b6101d861058d565b6040516101799190611942565b6101f86101f3366004611628565b6105ac565b60405161017994939291906118f4565b61016c6105e2565b61022361021e366004611660565b6105f1565b6040516101799190611b29565b61022361023e366004611628565b610e5d565b61016c610e6f565b61014f6102593660046117fd565b610e7e565b61014f61026c366004611628565b610ead565b610223610f35565b61014f610287366004611628565b610f3b565b61014f61029a366004611660565b610f87565b61014f6102ad366004611628565b61105c565b6102c56102c0366004611660565b6110e1565b6040516101799392919061192a565b61014f6102e2366004611628565b611355565b6000546001600160a01b0316331461031a5760405162461bcd60e51b815260040161031190611ac0565b60405180910390fd5b6001600160a01b03909116600090815260046020526040902055565b600154600160a01b900460ff16156103605760405162461bcd60e51b815260040161031190611a0d565b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b031681565b60056020526000908152604090205460ff1681565b6000546001600160a01b031633146103e45760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03948516600090815260036020819052604090912080549587166001600160a01b031996871617815560028101805494881694871694909417909355820180549190951693169290921790925560010155565b6001546001600160a01b031633146104685760405162461bcd60e51b815260040161031190611975565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b3360009081526005602052604090205460ff166104fb5760405162461bcd60e51b815260040161031190611a6e565b610503611601565b50604080516080810182526001600160a01b039586168152602080820195865293861681830190815292861660608201908152968616600090815260039485905291909120905181549086166001600160a01b0319918216178255935160018201559051600282018054918616918516919091179055935193018054939092169216919091179055565b6040805180820190915260058152640312e322e360dc1b602082015290565b600360208190526000918252604090912080546001820154600283015492909301546001600160a01b0391821693928216911684565b6001546001600160a01b031681565b6000826001600160a01b03166354fd4d506040518163ffffffff1660e01b815260040160006040518083038186803b15801561062c57600080fd5b505afa92505050801561066157506040513d6000823e601f3d908101601f1916820160405261065e9190810190611762565b60015b61069f573d80801561068f576040519150601f19603f3d011682016040523d82523d6000602084013e610694565b606091505b506000915050610e57565b6000816040516020016106b29190611815565b6040516020818303038152906040528051906020012090506106d3816113cf565b1561086c576000856001600160a01b031663ec2fd46d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561071357600080fd5b505afa158015610727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074b919061174a565b90506000866001600160a01b0316637d7215046040518163ffffffff1660e01b815260040160206040518083038186803b15801561078857600080fd5b505afa15801561079c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c0919061174a565b90506000876001600160a01b031663bbf5ce786040518163ffffffff1660e01b815260040160206040518083038186803b1580156107fd57600080fd5b505afa158015610811573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610835919061174a565b90508215801561084b575081158061084b575080155b156108685760405162461bcd60e51b81526004016103119061199c565b5050505b6006546001600160a01b0316158015906109035750600654604051633ded920b60e11b81526001600160a01b0390911690637bdb2416906108b19088906004016118e0565b60206040518083038186803b1580156108c957600080fd5b505afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610901919061172a565b155b1561098f576001856001600160a01b031663ab44a7a36040518163ffffffff1660e01b815260040160206040518083038186803b15801561094357600080fd5b505afa158015610957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097b919061174a565b670de0b6b3a7640000030392505050610e57565b6001600160a01b038516600090815260046020526040902054156109ce575050506001600160a01b038216600090815260046020526040902054610e57565b6109d781611487565b15610d5e576109e4611601565b506001600160a01b0380861660009081526003602081815260409283902083516080810185528154861680825260018301549382019390935260028201548616948101949094529091015490921660608201529080610a4a576000945050505050610e57565b6000610b48886001600160a01b031663bbf5ce786040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8857600080fd5b505afa158015610a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac0919061174a565b6040516370a0823160e01b81526001600160a01b038516906370a0823190610aec908d906004016118e0565b60206040518083038186803b158015610b0457600080fd5b505afa158015610b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3c919061174a565b9063ffffffff6114c516565b90506000886001600160a01b031663f04da65b896040518263ffffffff1660e01b8152600401610b7891906118e0565b60206040518083038186803b158015610b9057600080fd5b505afa158015610ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc8919061174a565b60408501516060860151602087015192935090916001600160a01b03821615610c6a576040516398a299e560e01b81526001600160a01b038316906398a299e590610c17908e906004016118e0565b60206040518083038186803b158015610c2f57600080fd5b505afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c67919061174a565b90505b806000191480610c9657508060001914158015610c96575080610c93868663ffffffff6114ed16565b13155b610cb25760405162461bcd60e51b815260040161031190611a37565b6001600160a01b038316610cd25760009950505050505050505050610e57565b60405163060f58c360e01b81526001600160a01b0384169063060f58c390610cfe908e906004016118e0565b60206040518083038186803b158015610d1657600080fd5b505afa158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e919061174a565b9950505050505050505050610e57565b610d6781611519565b80610d765750610d7681611557565b15610e50576000856001600160a01b031663ab44a7a36040518163ffffffff1660e01b815260040160206040518083038186803b158015610db657600080fd5b505afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee919061174a565b90506000610e186064610e0c6002548561159590919063ffffffff16565b9063ffffffff6115cf16565b9050670de0b6b3a7640000610e33838363ffffffff6114ed16565b10610e45576000945050505050610e57565b9350610e5792505050565b6000925050505b92915050565b60046020526000908152604090205481565b6006546001600160a01b031681565b6000546001600160a01b03163314610ea85760405162461bcd60e51b815260040161031190611ac0565b600255565b6000546001600160a01b03163314610ed75760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03811660009081526005602052604090819020805460ff19166001179055517fad6de4452a631e641cb59902236607946ce9272b9b981f2f80e8d129cb9084ba90610f2a9083906118e0565b60405180910390a150565b60025481565b6000546001600160a01b03163314610f655760405162461bcd60e51b815260040161031190611ac0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b816001600160a01b03166316048bc46040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fc257600080fd5b505af1158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190611644565b6001600160a01b0316336001600160a01b03161461102a5760405162461bcd60e51b815260040161031190611a95565b6001600160a01b0391821660009081526003602081905260409091200180546001600160a01b03191691909216179055565b6000546001600160a01b031633146110865760405162461bcd60e51b815260040161031190611ac0565b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060006110ee611601565b506001600160a01b03808616600090815260036020818152604092839020835160808101855281548616808252600183015493820193909352600282015486169481019490945290910154909216606082015290611158576000935060001992506000915061134d565b6060810151602082015193506001600160a01b038116156111f2576040516398a299e560e01b81526001600160a01b038216906398a299e59061119f9089906004016118e0565b60206040518083038186803b1580156111b757600080fd5b505afa1580156111cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ef919061174a565b93505b83600019141561120557600094506112af565b60405163f04da65b60e01b8152600195506000906001600160a01b0389169063f04da65b90611238908a906004016118e0565b60206040518083038186803b15801561125057600080fd5b505afa158015611264573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611288919061174a565b90508085106112a8576112a1858263ffffffff6114c516565b94506112ad565b600094505b505b60408201516001600160a01b0381166112cb576000935061134a565b60405163060f58c360e01b81526001600160a01b0382169063060f58c3906112f7908a906004016118e0565b60206040518083038186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611347919061174a565b93505b50505b509250925092565b6000546001600160a01b0316331461137f5760405162461bcd60e51b815260040161031190611ac0565b6001600160a01b03811660009081526005602052604090819020805460ff19169055517f753f40ca3312b2408759a67875b367955e7baa221daf08aa3d643d96202ac12b90610f2a9083906118e0565b60006040516020016113e090611846565b60405160208183030381529060405280519060200120821480611426575060405160200161140d90611884565b6040516020818303038152906040528051906020012082145b80611454575060405160200161143b90611899565b6040516020818303038152906040528051906020012082145b80610e575750604051602001611469906118c2565b60405160208183030381529060405280519060200120821492915050565b600060405160200161149890611870565b60405160208183030381529060405280519060200120821480610e575750604051602001611469906118ae565b6000828211156114e75760405162461bcd60e51b8152600401610311906119ea565b50900390565b6000828201838110156115125760405162461bcd60e51b815260040161031190611ae3565b9392505050565b600060405160200161152a90611846565b60405160208183030381529060405280519060200120821480610e5757506040516020016114699061185b565b600060405160200161156890611884565b60405160208183030381529060405280519060200120821480610e57575060405160200161146990611831565b6000826115a457506000610e57565b828202828482816115b157fe5b04146115125760405162461bcd60e51b815260040161031190611b06565b60008082116115f05760405162461bcd60e51b8152600401610311906119c2565b8183816115f957fe5b049392505050565b60408051608081018252600080825260208201819052918101829052606081019190915290565b600060208284031215611639578081fd5b813561151281611b62565b600060208284031215611655578081fd5b815161151281611b62565b60008060408385031215611672578081fd5b823561167d81611b62565b9150602083013561168d81611b62565b809150509250929050565b600080600080600060a086880312156116af578081fd5b85356116ba81611b62565b945060208601356116ca81611b62565b93506040860135925060608601356116e181611b62565b915060808601356116f181611b62565b809150509295509295909350565b60008060408385031215611711578182fd5b823561171c81611b62565b946020939093013593505050565b60006020828403121561173b578081fd5b81518015158114611512578182fd5b60006020828403121561175b578081fd5b5051919050565b600060208284031215611773578081fd5b815167ffffffffffffffff8082111561178a578283fd5b81840185601f82011261179b578384fd5b80519250818311156117ab578384fd5b604051601f8401601f1916810160200183811182821017156117cb578586fd5b6040528381528184016020018710156117e2578485fd5b6117f3846020830160208501611b32565b9695505050505050565b60006020828403121561180e578081fd5b5035919050565b60008251611827818460208701611b32565b9190910192915050565b682229a810189718171960b91b815260090190565b68222b2690189718171960b91b815260090190565b6844564d20312e302e3360b81b815260090190565b670435020312e302e360c41b815260080190565b6844535020312e302e3160b81b815260090190565b68044505020312e302e360bc1b815260090190565b670435020322e302e360c41b815260080190565b71044505020416476616e63656420312e302e360741b815260120190565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815260208101939093529083166040830152909116606082015260800190565b901515815260200190565b92151583526020830191909152604082015260600190565b6000602082528251806020840152611961816040850160208701611b32565b601f01601f19169190910160400192915050565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b6020808252600c908201526b25a52aa223a2afa2a92927a960a11b604082015260600190565b6020808252600e908201526d2224ab24a224a723afa2a92927a960911b604082015260600190565b60208082526009908201526829aaa12fa2a92927a960b91b604082015260600190565b60208082526010908201526f1113d113d7d25392551250531256915160821b604082015260600190565b6020808252601e908201527f444f444f466565496d706c3a204558434545445f594f55525f51554f54410000604082015260600190565b6020808252600d908201526c1050d0d154d4d7d11153925151609a1b604082015260600190565b6020808252601190820152701393d50813d5d391548813d1881413d3d3607a1b604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b60208082526009908201526820a2222fa2a92927a960b91b604082015260600190565b60208082526009908201526826aaa62fa2a92927a960b91b604082015260600190565b90815260200190565b60005b83811015611b4d578181015183820152602001611b35565b83811115611b5c576000848401525b50505050565b6001600160a01b0381168114611b7757600080fd5b5056fea2646970667358221220d2e8d52a6c5f5567a6d93556dd1bfe60a2638bb493dc72826e081510f6941abc64736f6c63430006090033

Block Transaction Gas Used Reward
view all blocks sequenced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
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.