Contract 0xe3c10989ddc5df5b1b9c0e6229c2e4e0862fde3e

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x97ad2a4e0bbb48b00467454066ee733fea1fd9eadd85f8b8471a79397d48abf8Claim559979482023-01-28 0:41:413 hrs 37 mins ago0x98cbc2ddd4c977d074f27a966f3845efd1549f4f IN  DODO: DODO Mining V10 ETH0.0000354
0x50ac16121cd4da78b9db7f0e69d996f93d724e1d08f9a62c21f8fc6db15da54cClaim559977532023-01-28 0:40:373 hrs 38 mins ago0x1fd8271f95b32ecffade04a2c93c7009b6fe7d5f IN  DODO: DODO Mining V10 ETH0.00003555
0x3dcfb2d127df14c405f6ca030df245e043e05f109fe483803c4b5d2033937f56Deposit559922212023-01-28 0:06:594 hrs 12 mins ago0x4aaee20543e118a5f86d626ed5b98e37b9835ebf IN  DODO: DODO Mining V10 ETH0.00004442
0x30a7e1efa0db43d40e32f9a5e57025c85afb69eedf516dfe8b07e24d557f9652Claim559902252023-01-27 23:54:244 hrs 24 mins ago0x4aaee20543e118a5f86d626ed5b98e37b9835ebf IN  DODO: DODO Mining V10 ETH0.00003636
0x06166f980a2a7572750bed77c2ac9afb25ff1654fc315fd0e7bcdc06dc30cf48Claim558997562023-01-27 15:45:5212 hrs 33 mins ago0x00000000632eece87d2031a5531549f96e873f8c IN  DODO: DODO Mining V10 ETH0.00003838
0x7013a7f67e1ac2d3d35bc964ae0558877ee9cfeac27a0d1759edbb3dc3d6748aDeposit558960352023-01-27 15:28:5912 hrs 50 mins ago0xa3e5bce18e61a6ccd6f296a6f72ac44c3b1c6a0c IN  DODO: DODO Mining V10 ETH0.00004625
0x48f8771a90ea7e0005c4a84fb90c3903ac19f3a41a87188e508a3c9e23707d3dDeposit558705682023-01-27 13:29:4914 hrs 49 mins ago0xb12b515ee1a1d63cabf3e4d53db859eda53719d5 IN  DODO: DODO Mining V10 ETH0.00003621
0xfacb983c48a17f25206ce193c5b7c366c3e2c891f61f591b165f8c94380236c4Deposit558703762023-01-27 13:28:5814 hrs 50 mins ago0xb12b515ee1a1d63cabf3e4d53db859eda53719d5 IN  DODO: DODO Mining V10 ETH0.00003621
0xd5fa414a3eb522aad76d451fee17d6be9cec5f7071eeb3104e59ee806c0e836cDeposit558669002023-01-27 13:11:4015 hrs 7 mins ago0x6fdd02e37e6fa5d1977c93f54115917ed64a2211 IN  DODO: DODO Mining V10 ETH0.00005058
0x0b1f581e446d18c7c01499f72f5542b8fa80cbc6af72a748473c8e969346c45fWithdraw557624032023-01-27 3:50:581 day 28 mins ago0xd3702ee4f898aa8e73bef3d8fbfaf3da92546ff8 IN  DODO: DODO Mining V10 ETH0.00004378
0xd1bed5888a80bfb27e642cde8459f9202d653d8e7d037c81ede55c1f16d4f9c6Claim556764652023-01-26 19:14:281 day 9 hrs ago0x8ecd87e1dc7a80a0c6f012572959a6661ad3f4c0 IN  DODO: DODO Mining V10 ETH0.00004868
0xc2e9f1edd00f54f46e922daf7081671d7fbc10035ba4048b6902df1f8a720d0bDeposit555784792023-01-26 10:17:501 day 18 hrs ago0xd3702ee4f898aa8e73bef3d8fbfaf3da92546ff8 IN  DODO: DODO Mining V10 ETH0.0000385
0x1864d0e149757f38f9a5608e22ffbb596389f628bba114e4ff1bb5e6004f7915Claim555782692023-01-26 10:16:331 day 18 hrs ago0xd3702ee4f898aa8e73bef3d8fbfaf3da92546ff8 IN  DODO: DODO Mining V10 ETH0.00003218
0xe34d2088bbf65b699d2d1d890a82479056c6c7ac53f75785aba3d96978fa35e9Withdraw All555454782023-01-26 6:57:201 day 21 hrs ago0x6f38083784e70f298c82d2bd3ee60f0c00112ef5 IN  DODO: DODO Mining V10 ETH0.00003518
0xae2bd8d89357208d6778fc4e9a43fb76d3c86982da0c0210f2f722098a0d83aeWithdraw All555454092023-01-26 6:56:501 day 21 hrs ago0x6f38083784e70f298c82d2bd3ee60f0c00112ef5 IN  DODO: DODO Mining V10 ETH0.0000386
0x3a1dfd7b799e65ff2dabb82ebf4bae350f73e1f5096db1eeea0833fd49a81b7fDeposit555229262023-01-26 4:26:201 day 23 hrs ago0xfa9d28cfec901004e5ca985ce1c43a3be15865ea IN  DODO: DODO Mining V10 ETH0.00004198
0x478f4b14bbb80c833140e3a4aea68ae75ee9ac791a6e7007404458810b96f618Deposit555003772023-01-26 2:02:532 days 2 hrs ago0x8adea5a258f0e4e0bd02fd3a833ec25f2a4672f4 IN  DODO: DODO Mining V10 ETH0.00003576
0x07540900d900bc572eb3ca21ba8f64ea7d00f7b5f8545c561236a0e5d2b02cbbClaim554805952023-01-26 0:14:582 days 4 hrs ago0xc6367e2de86aaca6d8ac892373ddb9ffd4c126d5 IN  DODO: DODO Mining V10 ETH0.00005305
0xf5fa519225f14016a6ff01285736ea67a02eadbdb3ec07ec9352ba377bb42658Withdraw553202562023-01-25 8:44:352 days 19 hrs ago0x4d28d1c0134923061e69b4aefaff505aab08a8ac IN  DODO: DODO Mining V10 ETH0.00003826
0xeb81850dcfd55e3c3165aa94074f7a45dced28f046d6c0ed40a7f30f2690264eClaim553201472023-01-25 8:43:472 days 19 hrs ago0x4d28d1c0134923061e69b4aefaff505aab08a8ac IN  DODO: DODO Mining V10 ETH0.00003207
0x3b231310d875c2d3c86c832429aab3b43c24c9229069210870abeb642990760dDeposit553142812023-01-25 8:03:052 days 20 hrs ago0x9a5a60a5f89aa9d8ec592b1f72fd38f75a99c72f IN  DODO: DODO Mining V10 ETH0.00003557
0xa404d5ec13d5fb4dbff5bdabe26002a95c98134734fa0e2889adc58007bb69f4Deposit553141162023-01-25 8:02:052 days 20 hrs ago0x9a5a60a5f89aa9d8ec592b1f72fd38f75a99c72f IN  DODO: DODO Mining V10 ETH0.00003557
0x9f4ccd8068fab1141c362985f92382b552b0f01472bed33567ef8e1d9fb402e9Withdraw553070402023-01-25 7:11:252 days 21 hrs ago0x9ce91fec8421881b3643a2cb3fbd5b705bc40273 IN  DODO: DODO Mining V10 ETH0.00003907
0xd93eda41cd190eb95aec8fbd1d4d60802b386f2dd3152ad32ff97dd0590e3a03Claim553060422023-01-25 7:03:432 days 21 hrs ago0x9ce91fec8421881b3643a2cb3fbd5b705bc40273 IN  DODO: DODO Mining V10 ETH0.00003193
0x29775f00350e13992064556b1e3883472bdef8939c4cd20fe92c2b2d048e963dClaim553059692023-01-25 7:03:122 days 21 hrs ago0x6a9e5379505ecae77c97899a5f43176365cd6b40 IN  DODO: DODO Mining V10 ETH0.00002996
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x97ad2a4e0bbb48b00467454066ee733fea1fd9eadd85f8b8471a79397d48abf8559979482023-01-28 0:41:413 hrs 37 mins ago DODO: DODO Mining V1 0x7e5a52371e6716adcd1ea7dc7e165ab3a54f75e10 ETH
0x97ad2a4e0bbb48b00467454066ee733fea1fd9eadd85f8b8471a79397d48abf8559979482023-01-28 0:41:413 hrs 37 mins ago DODO: DODO Mining V10x7ebd8a1803ce082d4de609c0aa0813dd842bd4db0 ETH
0x50ac16121cd4da78b9db7f0e69d996f93d724e1d08f9a62c21f8fc6db15da54c559977532023-01-28 0:40:373 hrs 38 mins ago DODO: DODO Mining V1 0x7e5a52371e6716adcd1ea7dc7e165ab3a54f75e10 ETH
0x50ac16121cd4da78b9db7f0e69d996f93d724e1d08f9a62c21f8fc6db15da54c559977532023-01-28 0:40:373 hrs 38 mins ago DODO: DODO Mining V10x7ebd8a1803ce082d4de609c0aa0813dd842bd4db0 ETH
0x3dcfb2d127df14c405f6ca030df245e043e05f109fe483803c4b5d2033937f56559922212023-01-28 0:06:594 hrs 12 mins ago DODO: DODO Mining V10x7ebd8a1803ce082d4de609c0aa0813dd842bd4db0 ETH
0x3dcfb2d127df14c405f6ca030df245e043e05f109fe483803c4b5d2033937f56559922212023-01-28 0:06:594 hrs 12 mins ago DODO: DODO Mining V1 0x7e5a52371e6716adcd1ea7dc7e165ab3a54f75e10 ETH
0x3dcfb2d127df14c405f6ca030df245e043e05f109fe483803c4b5d2033937f56559922212023-01-28 0:06:594 hrs 12 mins ago DODO: DODO Mining V10x7ebd8a1803ce082d4de609c0aa0813dd842bd4db0 ETH
0x30a7e1efa0db43d40e32f9a5e57025c85afb69eedf516dfe8b07e24d557f9652559902252023-01-27 23:54:244 hrs 24 mins ago DODO: DODO Mining V1 0x7e5a52371e6716adcd1ea7dc7e165ab3a54f75e10 ETH
0x30a7e1efa0db43d40e32f9a5e57025c85afb69eedf516dfe8b07e24d557f9652559902252023-01-27 23:54:244 hrs 24 mins ago DODO: DODO Mining V10x7ebd8a1803ce082d4de609c0aa0813dd842bd4db0 ETH
0x06166f980a2a7572750bed77c2ac9afb25ff1654fc315fd0e7bcdc06dc30cf48558997562023-01-27 15:45:5212 hrs 33 mins ago DODO: DODO Mining V1 0x7e5a52371e6716adcd1ea7dc7e165ab3a54f75e10 ETH
0x06166f980a2a7572750bed77c2ac9afb25ff1654fc315fd0e7bcdc06dc30cf48558997562023-01-27 15:45:5212 hrs 33 mins ago DODO: DODO Mining V10x82b423848cdd98740fb57f961fa692739f9916330 ETH
0x7013a7f67e1ac2d3d35bc964ae0558877ee9cfeac27a0d1759edbb3dc3d6748a558960352023-01-27 15:28:5912 hrs 50 mins ago DODO: DODO Mining V10x7ebd8a1803ce082d4de609c0aa0813dd842bd4db0 ETH
0x7013a7f67e1ac2d3d35bc964ae0558877ee9cfeac27a0d1759edbb3dc3d6748a558960352023-01-27 15:28:5912 hrs 50 mins ago DODO: DODO Mining V10x7ebd8a1803ce082d4de609c0aa0813dd842bd4db0 ETH
0x48f8771a90ea7e0005c4a84fb90c3903ac19f3a41a87188e508a3c9e23707d3d558705682023-01-27 13:29:4914 hrs 49 mins ago DODO: DODO Mining V10x7ebd8a1803ce082d4de609c0aa0813dd842bd4db0 ETH
0x48f8771a90ea7e0005c4a84fb90c3903ac19f3a41a87188e508a3c9e23707d3d558705682023-01-27 13:29:4914 hrs 49 mins ago DODO: DODO Mining V10x7ebd8a1803ce082d4de609c0aa0813dd842bd4db0 ETH
0xfacb983c48a17f25206ce193c5b7c366c3e2c891f61f591b165f8c94380236c4558703762023-01-27 13:28:5814 hrs 50 mins ago DODO: DODO Mining V10x82b423848cdd98740fb57f961fa692739f9916330 ETH
0xfacb983c48a17f25206ce193c5b7c366c3e2c891f61f591b165f8c94380236c4558703762023-01-27 13:28:5814 hrs 50 mins ago DODO: DODO Mining V10x82b423848cdd98740fb57f961fa692739f9916330 ETH
0xd5fa414a3eb522aad76d451fee17d6be9cec5f7071eeb3104e59ee806c0e836c558669002023-01-27 13:11:4015 hrs 7 mins ago DODO: DODO Mining V10x7ebd8a1803ce082d4de609c0aa0813dd842bd4db0 ETH
0xd5fa414a3eb522aad76d451fee17d6be9cec5f7071eeb3104e59ee806c0e836c558669002023-01-27 13:11:4015 hrs 7 mins ago DODO: DODO Mining V1 0x7e5a52371e6716adcd1ea7dc7e165ab3a54f75e10 ETH
0xd5fa414a3eb522aad76d451fee17d6be9cec5f7071eeb3104e59ee806c0e836c558669002023-01-27 13:11:4015 hrs 7 mins ago DODO: DODO Mining V10x7ebd8a1803ce082d4de609c0aa0813dd842bd4db0 ETH
0x0b1f581e446d18c7c01499f72f5542b8fa80cbc6af72a748473c8e969346c45f557624032023-01-27 3:50:581 day 28 mins ago DODO: DODO Mining V10x82b423848cdd98740fb57f961fa692739f9916330 ETH
0x0b1f581e446d18c7c01499f72f5542b8fa80cbc6af72a748473c8e969346c45f557624032023-01-27 3:50:581 day 28 mins ago DODO: DODO Mining V1 0x7e5a52371e6716adcd1ea7dc7e165ab3a54f75e10 ETH
0x0b1f581e446d18c7c01499f72f5542b8fa80cbc6af72a748473c8e969346c45f557624032023-01-27 3:50:581 day 28 mins ago DODO: DODO Mining V10x82b423848cdd98740fb57f961fa692739f9916330 ETH
0xd1bed5888a80bfb27e642cde8459f9202d653d8e7d037c81ede55c1f16d4f9c6556764652023-01-26 19:14:281 day 9 hrs ago DODO: DODO Mining V1 0x7e5a52371e6716adcd1ea7dc7e165ab3a54f75e10 ETH
0xd1bed5888a80bfb27e642cde8459f9202d653d8e7d037c81ede55c1f16d4f9c6556764652023-01-26 19:14:281 day 9 hrs ago DODO: DODO Mining V10x82b423848cdd98740fb57f961fa692739f9916330 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DODOMine

Compiler Version
v0.6.9+commit.3e3065ac

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan on 2021-09-02
*/

// File: contracts/lib/Ownable.sol

/*

    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 Ownable {
    address public _OWNER_;
    address public _NEW_OWNER_;

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

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

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

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

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

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

    constructor() internal {
        _OWNER_ = msg.sender;
        emit OwnershipTransferred(address(0), _OWNER_);
    }

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

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

// File: contracts/lib/SafeMath.sol

/**
 * @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;
        }
    }
}

// File: contracts/lib/DecimalMath.sol

/**
 * @title DecimalMath
 * @author DODO Breeder
 *
 * @notice Functions for fixed point number with 18 decimals
 */
library DecimalMath {
    using SafeMath for uint256;

    uint256 internal constant ONE = 10**18;
    uint256 internal constant ONE2 = 10**36;

    function mulFloor(uint256 target, uint256 d) internal pure returns (uint256) {
        return target.mul(d) / (10**18);
    }

    function mulCeil(uint256 target, uint256 d) internal pure returns (uint256) {
        return target.mul(d).divCeil(10**18);
    }

    function divFloor(uint256 target, uint256 d) internal pure returns (uint256) {
        return target.mul(10**18).div(d);
    }

    function divCeil(uint256 target, uint256 d) internal pure returns (uint256) {
        return target.mul(10**18).divCeil(d);
    }

    function reciprocalFloor(uint256 target) internal pure returns (uint256) {
        return uint256(10**36).div(target);
    }

    function reciprocalCeil(uint256 target) internal pure returns (uint256) {
        return uint256(10**36).divCeil(target);
    }
}

// File: contracts/intf/IERC20.sol


/**
 * @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);
}

// File: contracts/lib/SafeERC20.sol

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: contracts/DODOToken/DODORewardVault.sol



interface IDODORewardVault {
    function reward(address to, uint256 amount) external;
}


contract DODORewardVault is Ownable {
    using SafeERC20 for IERC20;

    address public dodoToken;

    constructor(address _dodoToken) public {
        dodoToken = _dodoToken;
    }

    function reward(address to, uint256 amount) external onlyOwner {
        IERC20(dodoToken).safeTransfer(to, amount);
    }
}

// File: contracts/DODOToken/DODOMine.sol

contract DODOMine is Ownable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    // Info of each user.
    struct UserInfo {
        uint256 amount; // How many LP tokens the user has provided.
        uint256 rewardDebt; // Reward debt. See explanation below.
        //
        // We do some fancy math here. Basically, any point in time, the amount of DODOs
        // entitled to a user but is pending to be distributed is:
        //
        //   pending reward = (user.amount * pool.accDODOPerShare) - user.rewardDebt
        //
        // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens:
        //   1. The pool's `accDODOPerShare` (and `lastRewardBlock`) gets updated.
        //   2. User receives the pending reward sent to his/her address.
        //   3. User's `amount` gets updated.
        //   4. User's `rewardDebt` gets updated.
    }

    // Info of each pool.
    struct PoolInfo {
        address lpToken; // Address of LP token contract.
        uint256 allocPoint; // How many allocation points assigned to this pool. DODOs to distribute per block.
        uint256 lastRewardBlock; // Last block number that DODOs distribution occurs.
        uint256 accDODOPerShare; // Accumulated DODOs per share, times 1e12. See below.
    }

    address public dodoRewardVault;
    uint256 public dodoPerBlock;

    // Info of each pool.
    PoolInfo[] public poolInfos;
    mapping(address => uint256) public lpTokenRegistry;

    // Info of each user that stakes LP tokens.
    mapping(uint256 => mapping(address => UserInfo)) public userInfo;
    mapping(address => uint256) public realizedReward;

    // Total allocation points. Must be the sum of all allocation points in all pools.
    uint256 public totalAllocPoint = 0;
    // The block number when DODO mining starts.
    uint256 public startBlock;

    event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
    event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
    event Claim(address indexed user, uint256 amount);

    constructor(address _dodoToken, uint256 _startBlock) public {
        dodoRewardVault = address(new DODORewardVault(_dodoToken));
        startBlock = _startBlock;
    }

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

    modifier lpTokenExist(address lpToken) {
        require(lpTokenRegistry[lpToken] > 0, "LP Token Not Exist");
        _;
    }

    modifier lpTokenNotExist(address lpToken) {
        require(lpTokenRegistry[lpToken] == 0, "LP Token Already Exist");
        _;
    }

    // ============ Helper ============

    function poolLength() external view returns (uint256) {
        return poolInfos.length;
    }

    function getPid(address _lpToken) public view lpTokenExist(_lpToken) returns (uint256) {
        return lpTokenRegistry[_lpToken] - 1;
    }

    function getUserLpBalance(address _lpToken, address _user) public view returns (uint256) {
        uint256 pid = getPid(_lpToken);
        return userInfo[pid][_user].amount;
    }

    // ============ Ownable ============

    function addLpToken(
        address _lpToken,
        uint256 _allocPoint,
        bool _withUpdate
    ) public lpTokenNotExist(_lpToken) onlyOwner {
        if (_withUpdate) {
            massUpdatePools();
        }
        uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolInfos.push(
            PoolInfo({
                lpToken: _lpToken,
                allocPoint: _allocPoint,
                lastRewardBlock: lastRewardBlock,
                accDODOPerShare: 0
            })
        );
        lpTokenRegistry[_lpToken] = poolInfos.length;
    }

    function setLpToken(
        address _lpToken,
        uint256 _allocPoint,
        bool _withUpdate
    ) public onlyOwner {
        if (_withUpdate) {
            massUpdatePools();
        }
        uint256 pid = getPid(_lpToken);
        totalAllocPoint = totalAllocPoint.sub(poolInfos[pid].allocPoint).add(_allocPoint);
        poolInfos[pid].allocPoint = _allocPoint;
    }

    function setReward(uint256 _dodoPerBlock, bool _withUpdate) external onlyOwner {
        if (_withUpdate) {
            massUpdatePools();
        }
        dodoPerBlock = _dodoPerBlock;
    }

    // ============ View Rewards ============

    function getPendingReward(address _lpToken, address _user) external view returns (uint256) {
        uint256 pid = getPid(_lpToken);
        PoolInfo storage pool = poolInfos[pid];
        UserInfo storage user = userInfo[pid][_user];
        uint256 accDODOPerShare = pool.accDODOPerShare;
        uint256 lpSupply = IERC20(pool.lpToken).balanceOf(address(this));
        if (block.number > pool.lastRewardBlock && lpSupply != 0) {
            uint256 DODOReward = block
                .number
                .sub(pool.lastRewardBlock)
                .mul(dodoPerBlock)
                .mul(pool.allocPoint)
                .div(totalAllocPoint);
            accDODOPerShare = accDODOPerShare.add(DecimalMath.divFloor(DODOReward, lpSupply));
        }
        return DecimalMath.mulFloor(user.amount, accDODOPerShare).sub(user.rewardDebt);
    }

    function getAllPendingReward(address _user) external view returns (uint256) {
        uint256 length = poolInfos.length;
        uint256 totalReward = 0;
        for (uint256 pid = 0; pid < length; ++pid) {
            if (userInfo[pid][_user].amount == 0 || poolInfos[pid].allocPoint == 0) {
                continue; // save gas
            }
            PoolInfo storage pool = poolInfos[pid];
            UserInfo storage user = userInfo[pid][_user];
            uint256 accDODOPerShare = pool.accDODOPerShare;
            uint256 lpSupply = IERC20(pool.lpToken).balanceOf(address(this));
            if (block.number > pool.lastRewardBlock && lpSupply != 0) {
                uint256 DODOReward = block
                    .number
                    .sub(pool.lastRewardBlock)
                    .mul(dodoPerBlock)
                    .mul(pool.allocPoint)
                    .div(totalAllocPoint);
                accDODOPerShare = accDODOPerShare.add(DecimalMath.divFloor(DODOReward, lpSupply));
            }
            totalReward = totalReward.add(
                DecimalMath.mulFloor(user.amount, accDODOPerShare).sub(user.rewardDebt)
            );
        }
        return totalReward;
    }

    function getRealizedReward(address _user) external view returns (uint256) {
        return realizedReward[_user];
    }

    function getDlpMiningSpeed(address _lpToken) external view returns (uint256) {
        uint256 pid = getPid(_lpToken);
        PoolInfo storage pool = poolInfos[pid];
        return dodoPerBlock.mul(pool.allocPoint).div(totalAllocPoint);
    }

    // ============ Update Pools ============

    // Update reward vairables for all pools. Be careful of gas spending!
    function massUpdatePools() public {
        uint256 length = poolInfos.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            updatePool(pid);
        }
    }

    // Update reward variables of the given pool to be up-to-date.
    function updatePool(uint256 _pid) public {
        PoolInfo storage pool = poolInfos[_pid];
        if (block.number <= pool.lastRewardBlock) {
            return;
        }
        uint256 lpSupply = IERC20(pool.lpToken).balanceOf(address(this));
        if (lpSupply == 0) {
            pool.lastRewardBlock = block.number;
            return;
        }
        uint256 DODOReward = block
            .number
            .sub(pool.lastRewardBlock)
            .mul(dodoPerBlock)
            .mul(pool.allocPoint)
            .div(totalAllocPoint);
        pool.accDODOPerShare = pool.accDODOPerShare.add(DecimalMath.divFloor(DODOReward, lpSupply));
        pool.lastRewardBlock = block.number;
    }

    // ============ Deposit & Withdraw & Claim ============
    // Deposit & withdraw will also trigger claim

    function deposit(address _lpToken, uint256 _amount) public {
        uint256 pid = getPid(_lpToken);
        PoolInfo storage pool = poolInfos[pid];
        UserInfo storage user = userInfo[pid][msg.sender];
        updatePool(pid);
        if (user.amount > 0) {
            uint256 pending = DecimalMath.mulFloor(user.amount, pool.accDODOPerShare).sub(
                user.rewardDebt
            );
            safeDODOTransfer(msg.sender, pending);
        }
        IERC20(pool.lpToken).safeTransferFrom(address(msg.sender), address(this), _amount);
        user.amount = user.amount.add(_amount);
        user.rewardDebt = DecimalMath.mulFloor(user.amount, pool.accDODOPerShare);
        emit Deposit(msg.sender, pid, _amount);
    }

    function withdraw(address _lpToken, uint256 _amount) public {
        uint256 pid = getPid(_lpToken);
        PoolInfo storage pool = poolInfos[pid];
        UserInfo storage user = userInfo[pid][msg.sender];
        require(user.amount >= _amount, "withdraw too much");
        updatePool(pid);
        uint256 pending = DecimalMath.mulFloor(user.amount, pool.accDODOPerShare).sub(
            user.rewardDebt
        );
        safeDODOTransfer(msg.sender, pending);
        user.amount = user.amount.sub(_amount);
        user.rewardDebt = DecimalMath.mulFloor(user.amount, pool.accDODOPerShare);
        IERC20(pool.lpToken).safeTransfer(address(msg.sender), _amount);
        emit Withdraw(msg.sender, pid, _amount);
    }

    function withdrawAll(address _lpToken) public {
        uint256 balance = getUserLpBalance(_lpToken, msg.sender);
        withdraw(_lpToken, balance);
    }

    // Withdraw without caring about rewards. EMERGENCY ONLY.
    function emergencyWithdraw(address _lpToken) public {
        uint256 pid = getPid(_lpToken);
        PoolInfo storage pool = poolInfos[pid];
        UserInfo storage user = userInfo[pid][msg.sender];
        IERC20(pool.lpToken).safeTransfer(address(msg.sender), user.amount);
        user.amount = 0;
        user.rewardDebt = 0;
    }

    function claim(address _lpToken) public {
        uint256 pid = getPid(_lpToken);
        if (userInfo[pid][msg.sender].amount == 0 || poolInfos[pid].allocPoint == 0) {
            return; // save gas
        }
        PoolInfo storage pool = poolInfos[pid];
        UserInfo storage user = userInfo[pid][msg.sender];
        updatePool(pid);
        uint256 pending = DecimalMath.mulFloor(user.amount, pool.accDODOPerShare).sub(
            user.rewardDebt
        );
        user.rewardDebt = DecimalMath.mulFloor(user.amount, pool.accDODOPerShare);
        safeDODOTransfer(msg.sender, pending);
    }

    function claimAll() public {
        uint256 length = poolInfos.length;
        uint256 pending = 0;
        for (uint256 pid = 0; pid < length; ++pid) {
            if (userInfo[pid][msg.sender].amount == 0 || poolInfos[pid].allocPoint == 0) {
                continue; // save gas
            }
            PoolInfo storage pool = poolInfos[pid];
            UserInfo storage user = userInfo[pid][msg.sender];
            updatePool(pid);
            pending = pending.add(
                DecimalMath.mulFloor(user.amount, pool.accDODOPerShare).sub(user.rewardDebt)
            );
            user.rewardDebt = DecimalMath.mulFloor(user.amount, pool.accDODOPerShare);
        }
        safeDODOTransfer(msg.sender, pending);
    }

    // Safe DODO transfer function
    function safeDODOTransfer(address _to, uint256 _amount) internal {
        IDODORewardVault(dodoRewardVault).reward(_to, _amount);
        realizedReward[_to] = realizedReward[_to].add(_amount);
        emit Claim(_to, _amount);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dodoToken","type":"address"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"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":"_lpToken","type":"address"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"addLpToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dodoPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dodoRewardVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getAllPendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"}],"name":"getDlpMiningSpeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"},{"internalType":"address","name":"_user","type":"address"}],"name":"getPendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"}],"name":"getPid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getRealizedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"},{"internalType":"address","name":"_user","type":"address"}],"name":"getUserLpBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpTokenRegistry","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfos","outputs":[{"internalType":"address","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accDODOPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"realizedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setLpToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dodoPerBlock","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","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":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006008553480156200001657600080fd5b5060405162003caa38038062003caa83398181016040528101906200003c9190620001bc565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a381604051620001079062000180565b6200011391906200020e565b604051809103906000f08015801562000130573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060098190555050506200029d565b610d148062002f9683390190565b6000815190506200019f8162000269565b92915050565b600081519050620001b68162000283565b92915050565b60008060408385031215620001d057600080fd5b6000620001e0858286016200018e565b9250506020620001f385828601620001a5565b9150509250929050565b62000208816200022b565b82525050565b6000602082019050620002256000830184620001fd565b92915050565b600062000238826200023f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b62000274816200022b565b81146200028057600080fd5b50565b6200028e816200025f565b81146200029a57600080fd5b50565b612ce980620002ad6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80636ff1c9bc11610104578063d1058e59116100a2578063f3fef3a311610071578063f3fef3a314610533578063fa09e6301461054f578063fb7276f41461056b578063fe0f3a131461059b576101da565b8063d1058e59146104ad578063ec83a76a146104b7578063f146b809146104e7578063f2fde38b14610517576101da565b80638af70336116100de5780638af703361461042457806393f1a40b146104425780639599af1314610473578063bea006e014610491576101da565b80636ff1c9bc146103ce5780637f10179f146103ea5780638456db1514610406576101da565b806343b55f351161017c57806351eb05a61161014b57806351eb05a614610345578063630b5ba114610361578063689d84e41461036b5780636dc2cc8c1461039e576101da565b806343b55f35146102d157806347e7ef241461030157806348cd4cb11461031d5780634e71e0c81461033b576101da565b806319a78f55116101b857806319a78f55146102395780631e83409a1461026957806334ea5389146102855780633d16433e146102a1576101da565b8063081e3eda146101df57806316048bc4146101fd57806317caf6f11461021b575b600080fd5b6101e76105cb565b6040516101f49190612b88565b60405180910390f35b6102056105d8565b6040516102129190612968565b60405180910390f35b6102236105fd565b6040516102309190612b88565b60405180910390f35b610253600480360381019061024e9190612462565b610603565b6040516102609190612b88565b60405180910390f35b610283600480360381019061027e9190612439565b61066e565b005b61029f600480360381019061029a91906124da565b6107da565b005b6102bb60048036038101906102b69190612439565b6108f9565b6040516102c89190612b88565b60405180910390f35b6102eb60048036038101906102e69190612439565b610911565b6040516102f89190612b88565b60405180910390f35b61031b6004803603810190610316919061249e565b6109e1565b005b610325610b8f565b6040516103329190612b88565b60405180910390f35b610343610b95565b005b61035f600480360381019061035a9190612552565b610d68565b005b610369610ef3565b005b61038560048036038101906103809190612552565b610f23565b60405161039594939291906129e3565b60405180910390f35b6103b860048036038101906103b39190612439565b610f80565b6040516103c59190612b88565b60405180910390f35b6103e860048036038101906103e39190612439565b610fc9565b005b61040460048036038101906103ff91906125e0565b6110b6565b005b61040e61115f565b60405161041b9190612968565b60405180910390f35b61042c611185565b6040516104399190612b88565b60405180910390f35b61045c600480360381019061045791906125a4565b61118b565b60405161046a929190612ba3565b60405180910390f35b61047b6111bc565b6040516104889190612968565b60405180910390f35b6104ab60048036038101906104a691906124da565b6111e2565b005b6104b561144f565b005b6104d160048036038101906104cc9190612439565b6115e5565b6040516104de9190612b88565b60405180910390f35b61050160048036038101906104fc9190612439565b6115fd565b60405161050e9190612b88565b60405180910390f35b610531600480360381019061052c9190612439565b6118b7565b005b61054d6004803603810190610548919061249e565b611a05565b005b61056960048036038101906105649190612439565b611bea565b005b61058560048036038101906105809190612439565b611c06565b6040516105929190612b88565b60405180910390f35b6105b560048036038101906105b09190612462565b611c69565b6040516105c29190612b88565b60405180910390f35b6000600480549050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60008061060f84610911565b90506006600082815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015491505092915050565b600061067982610911565b905060006006600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414806106fb57506000600482815481106106e757fe5b906000526020600020906004020160010154145b1561070657506107d7565b60006004828154811061071557fe5b9060005260206000209060040201905060006006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061078283610d68565b60006107ac826001015461079e84600001548660030154611e67565b611e9590919063ffffffff16565b90506107c082600001548460030154611e67565b82600101819055506107d23382611ee5565b505050505b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086090612ac8565b60405180910390fd5b801561087857610877610ef3565b5b600061088384610911565b90506108ca836108bc6004848154811061089957fe5b906000526020600020906004020160010154600854611e9590919063ffffffff16565b61205b90919063ffffffff16565b60088190555082600482815481106108de57fe5b90600052602060002090600402016001018190555050505050565b60056020528060005260406000206000915090505481565b6000816000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098d90612ae8565b60405180910390fd5b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403915050919050565b60006109ec83610911565b90506000600482815481106109fd57fe5b9060005260206000209060040201905060006006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610a6a83610d68565b600081600001541115610aaf576000610aa18260010154610a9384600001548660030154611e67565b611e9590919063ffffffff16565b9050610aad3382611ee5565b505b610b003330868560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166120b0909392919063ffffffff16565b610b1784826000015461205b90919063ffffffff16565b8160000181905550610b3181600001548360030154611e67565b8160010181905550823373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1586604051610b809190612b88565b60405180910390a35050505050565b60095481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c90612a28565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060048281548110610d7757fe5b9060005260206000209060040201905080600201544311610d985750610ef0565b60008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610df79190612968565b60206040518083038186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e47919061257b565b90506000811415610e62574382600201819055505050610ef0565b6000610eb9600854610eab8560010154610e9d600354610e8f896002015443611e9590919063ffffffff16565b61213990919063ffffffff16565b61213990919063ffffffff16565b6121a990919063ffffffff16565b9050610edb610ec882846121ff565b846003015461205b90919063ffffffff16565b83600301819055504383600201819055505050505b50565b6000600480549050905060008090505b81811015610f1f57610f1481610d68565b806001019050610f03565b5050565b60048181548110610f3057fe5b90600052602060002090600402016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154905084565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610fd482610911565b9050600060048281548110610fe557fe5b9060005260206000209060040201905060006006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061109c3382600001548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122369092919063ffffffff16565b600081600001819055506000816001018190555050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90612ac8565b60405180910390fd5b801561115457611153610ef3565b5b816003819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b6006602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b826000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90612b48565b60405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90612ac8565b60405180910390fd5b811561130357611302610ef3565b5b6000600954431161131657600954611318565b435b905061132f8460085461205b90919063ffffffff16565b600881905550600460405180608001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018381526020016000815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301555050600480549050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b60006004805490509050600080905060008090505b828110156115d65760006006600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414806114ec57506000600482815481106114d857fe5b906000526020600020906004020160010154145b156114f6576115cb565b60006004828154811061150557fe5b9060005260206000209060040201905060006006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061157283610d68565b6115ac61159d826001015461158f84600001548660030154611e67565b611e9590919063ffffffff16565b8561205b90919063ffffffff16565b93506115c081600001548360030154611e67565b816001018190555050505b806001019050611464565b506115e13382611ee5565b5050565b60076020528060005260406000206000915090505481565b6000806004805490509050600080905060008090505b828110156118ac5760006006600083815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154148061169b575060006004828154811061168757fe5b906000526020600020906004020160010154145b156116a5576118a1565b6000600482815481106116b457fe5b9060005260206000209060040201905060006006600084815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260030154905060008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117809190612968565b60206040518083038186803b15801561179857600080fd5b505afa1580156117ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d0919061257b565b90508360020154431180156117e6575060008114155b1561186457600061184260085461183487600101546118266003546118188b6002015443611e9590919063ffffffff16565b61213990919063ffffffff16565b61213990919063ffffffff16565b6121a990919063ffffffff16565b905061186061185182846121ff565b8461205b90919063ffffffff16565b9250505b61189a61188b846001015461187d866000015486611e67565b611e9590919063ffffffff16565b8761205b90919063ffffffff16565b9550505050505b806001019050611613565b508092505050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90612ac8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6260405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611a1083610911565b9050600060048281548110611a2157fe5b9060005260206000209060040201905060006006600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508381600001541015611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390612aa8565b60405180910390fd5b611ad583610d68565b6000611aff8260010154611af184600001548660030154611e67565b611e9590919063ffffffff16565b9050611b0b3382611ee5565b611b22858360000154611e9590919063ffffffff16565b8260000181905550611b3c82600001548460030154611e67565b8260010181905550611b9333868560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122369092919063ffffffff16565b833373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56887604051611bda9190612b88565b60405180910390a3505050505050565b6000611bf68233610603565b9050611c028282611a05565b5050565b600080611c1283610911565b9050600060048281548110611c2357fe5b90600052602060002090600402019050611c60600854611c52836001015460035461213990919063ffffffff16565b6121a990919063ffffffff16565b92505050919050565b600080611c7584610911565b9050600060048281548110611c8657fe5b9060005260206000209060040201905060006006600084815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260030154905060008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d529190612968565b60206040518083038186803b158015611d6a57600080fd5b505afa158015611d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da2919061257b565b9050836002015443118015611db8575060008114155b15611e36576000611e14600854611e068760010154611df8600354611dea8b6002015443611e9590919063ffffffff16565b61213990919063ffffffff16565b61213990919063ffffffff16565b6121a990919063ffffffff16565b9050611e32611e2382846121ff565b8461205b90919063ffffffff16565b9250505b611e5a8360010154611e4c856000015485611e67565b611e9590919063ffffffff16565b9550505050505092915050565b6000670de0b6b3a7640000611e85838561213990919063ffffffff16565b81611e8c57fe5b04905092915050565b600082821115611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190612a88565b60405180910390fd5b818303905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166321670f2283836040518363ffffffff1660e01b8152600401611f429291906129ba565b600060405180830381600087803b158015611f5c57600080fd5b505af1158015611f70573d6000803e3d6000fd5b50505050611fc681600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205b90919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d48260405161204f9190612b88565b60405180910390a25050565b6000808284019050838110156120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90612b08565b60405180910390fd5b8091505092915050565b612133846323b872dd60e01b8585856040516024016120d193929190612983565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506122bc565b50505050565b60008083141561214c57600090506121a3565b600082840290508284828161215d57fe5b041461219e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219590612b68565b60405180910390fd5b809150505b92915050565b60008082116121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e490612a68565b60405180910390fd5b8183816121f657fe5b04905092915050565b600061222e82612220670de0b6b3a76400008661213990919063ffffffff16565b6121a990919063ffffffff16565b905092915050565b6122b78363a9059cbb60e01b84846040516024016122559291906129ba565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506122bc565b505050565b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516122e59190612951565b6000604051808303816000865af19150503d8060008114612322576040519150601f19603f3d011682016040523d82523d6000602084013e612327565b606091505b50915091508161236c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236390612a48565b60405180910390fd5b6000815111156123ca578080602001905181019061238a9190612529565b6123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c090612b28565b60405180910390fd5b5b50505050565b6000813590506123df81612c6e565b92915050565b6000813590506123f481612c85565b92915050565b60008151905061240981612c85565b92915050565b60008135905061241e81612c9c565b92915050565b60008151905061243381612c9c565b92915050565b60006020828403121561244b57600080fd5b6000612459848285016123d0565b91505092915050565b6000806040838503121561247557600080fd5b6000612483858286016123d0565b9250506020612494858286016123d0565b9150509250929050565b600080604083850312156124b157600080fd5b60006124bf858286016123d0565b92505060206124d08582860161240f565b9150509250929050565b6000806000606084860312156124ef57600080fd5b60006124fd868287016123d0565b935050602061250e8682870161240f565b925050604061251f868287016123e5565b9150509250925092565b60006020828403121561253b57600080fd5b6000612549848285016123fa565b91505092915050565b60006020828403121561256457600080fd5b60006125728482850161240f565b91505092915050565b60006020828403121561258d57600080fd5b600061259b84828501612424565b91505092915050565b600080604083850312156125b757600080fd5b60006125c58582860161240f565b92505060206125d6858286016123d0565b9150509250929050565b600080604083850312156125f357600080fd5b60006126018582860161240f565b9250506020612612858286016123e5565b9150509250929050565b61262581612bf3565b82525050565b600061263682612bcc565b6126408185612bd7565b9350612650818560208601612c3b565b80840191505092915050565b6000612669600d83612be2565b91507f494e56414c49445f434c41494d000000000000000000000000000000000000006000830152602082019050919050565b60006126a9602083612be2565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b60006126e9600e83612be2565b91507f4449564944494e475f4552524f520000000000000000000000000000000000006000830152602082019050919050565b6000612729600983612be2565b91507f5355425f4552524f5200000000000000000000000000000000000000000000006000830152602082019050919050565b6000612769601183612be2565b91507f776974686472617720746f6f206d7563680000000000000000000000000000006000830152602082019050919050565b60006127a9600983612be2565b91507f4e4f545f4f574e455200000000000000000000000000000000000000000000006000830152602082019050919050565b60006127e9601283612be2565b91507f4c5020546f6b656e204e6f7420457869737400000000000000000000000000006000830152602082019050919050565b6000612829600983612be2565b91507f4144445f4552524f5200000000000000000000000000000000000000000000006000830152602082019050919050565b6000612869602a83612be2565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006128cf601683612be2565b91507f4c5020546f6b656e20416c7265616479204578697374000000000000000000006000830152602082019050919050565b600061290f600983612be2565b91507f4d554c5f4552524f5200000000000000000000000000000000000000000000006000830152602082019050919050565b61294b81612c31565b82525050565b600061295d828461262b565b915081905092915050565b600060208201905061297d600083018461261c565b92915050565b6000606082019050612998600083018661261c565b6129a5602083018561261c565b6129b26040830184612942565b949350505050565b60006040820190506129cf600083018561261c565b6129dc6020830184612942565b9392505050565b60006080820190506129f8600083018761261c565b612a056020830186612942565b612a126040830185612942565b612a1f6060830184612942565b95945050505050565b60006020820190508181036000830152612a418161265c565b9050919050565b60006020820190508181036000830152612a618161269c565b9050919050565b60006020820190508181036000830152612a81816126dc565b9050919050565b60006020820190508181036000830152612aa18161271c565b9050919050565b60006020820190508181036000830152612ac18161275c565b9050919050565b60006020820190508181036000830152612ae18161279c565b9050919050565b60006020820190508181036000830152612b01816127dc565b9050919050565b60006020820190508181036000830152612b218161281c565b9050919050565b60006020820190508181036000830152612b418161285c565b9050919050565b60006020820190508181036000830152612b61816128c2565b9050919050565b60006020820190508181036000830152612b8181612902565b9050919050565b6000602082019050612b9d6000830184612942565b92915050565b6000604082019050612bb86000830185612942565b612bc56020830184612942565b9392505050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000612bfe82612c11565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015612c59578082015181840152602081019050612c3e565b83811115612c68576000848401525b50505050565b612c7781612bf3565b8114612c8257600080fd5b50565b612c8e81612c05565b8114612c9957600080fd5b50565b612ca581612c31565b8114612cb057600080fd5b5056fea26469706673582212206c5ef2855065d11ff39309bb4d76e329941b85d4478ba56a6ef0537c8597a10564736f6c63430006090033608060405234801561001057600080fd5b50604051610d14380380610d148339818101604052810190610032919061014a565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506101bc565b600081519050610144816101a5565b92915050565b60006020828403121561015c57600080fd5b600061016a84828501610135565b91505092915050565b600061017e82610185565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6101ae81610173565b81146101b957600080fd5b50565b610b49806101cb6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806316048bc41461006757806321670f22146100855780634e71e0c8146100a157806375123ff9146100ab5780638456db15146100c9578063f2fde38b146100e7575b600080fd5b61006f610103565b60405161007c9190610968565b60405180910390f35b61009f600480360381019061009a9190610777565b610128565b005b6100a9610208565b005b6100b36103db565b6040516100c09190610968565b60405180910390f35b6100d1610401565b6040516100de9190610968565b60405180910390f35b61010160048036038101906100fc919061074e565b610427565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ae906109ec565b60405180910390fd5b6102048282600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166105759092919063ffffffff16565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028f906109ac565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ad906109ec565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6260405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6105f68363a9059cbb60e01b8484604051602401610594929190610983565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506105fb565b505050565b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516106249190610951565b6000604051808303816000865af19150503d8060008114610661576040519150601f19603f3d011682016040523d82523d6000602084013e610666565b606091505b5091509150816106ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a2906109cc565b60405180910390fd5b60008151111561070957808060200190518101906106c991906107b3565b610708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ff90610a0c565b60405180910390fd5b5b50505050565b60008135905061071e81610ace565b92915050565b60008151905061073381610ae5565b92915050565b60008135905061074881610afc565b92915050565b60006020828403121561076057600080fd5b600061076e8482850161070f565b91505092915050565b6000806040838503121561078a57600080fd5b60006107988582860161070f565b92505060206107a985828601610739565b9150509250929050565b6000602082840312156107c557600080fd5b60006107d384828501610724565b91505092915050565b6107e581610a53565b82525050565b60006107f682610a2c565b6108008185610a37565b9350610810818560208601610a9b565b80840191505092915050565b6000610829600d83610a42565b91507f494e56414c49445f434c41494d000000000000000000000000000000000000006000830152602082019050919050565b6000610869602083610a42565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b60006108a9600983610a42565b91507f4e4f545f4f574e455200000000000000000000000000000000000000000000006000830152602082019050919050565b60006108e9602a83610a42565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b61094b81610a91565b82525050565b600061095d82846107eb565b915081905092915050565b600060208201905061097d60008301846107dc565b92915050565b600060408201905061099860008301856107dc565b6109a56020830184610942565b9392505050565b600060208201905081810360008301526109c58161081c565b9050919050565b600060208201905081810360008301526109e58161085c565b9050919050565b60006020820190508181036000830152610a058161089c565b9050919050565b60006020820190508181036000830152610a25816108dc565b9050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000610a5e82610a71565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015610ab9578082015181840152602081019050610a9e565b83811115610ac8576000848401525b50505050565b610ad781610a53565b8114610ae257600080fd5b50565b610aee81610a65565b8114610af957600080fd5b50565b610b0581610a91565b8114610b1057600080fd5b5056fea26469706673582212204dd3b51af84772c0cd791c715df9a4fb26f85a61e90d8f8af99a209c42d9a3c964736f6c6343000609003300000000000000000000000069eb4fa4a2fbd498c257c57ea8b7655a2559a5810000000000000000000000000000000000000000000000000000000000c8a794

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

00000000000000000000000069eb4fa4a2fbd498c257c57ea8b7655a2559a5810000000000000000000000000000000000000000000000000000000000c8a794

-----Decoded View---------------
Arg [0] : _dodoToken (address): 0x69eb4fa4a2fbd498c257c57ea8b7655a2559a581
Arg [1] : _startBlock (uint256): 13150100

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000069eb4fa4a2fbd498c257c57ea8b7655a2559a581
Arg [1] : 0000000000000000000000000000000000000000000000000000000000c8a794


Deployed ByteCode Sourcemap

10067:11992:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12756:96;;;:::i;:::-;;;;;;;;;;;;;;;;306:22;;;:::i;:::-;;;;;;;;;;;;;;;;11863:34;;;:::i;:::-;;;;;;;;;;;;;;;;13010:183;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;20400:617;;;;;;;;;;;;;;;;:::i;:::-;;13934:390;;;;;;;;;;;;;;;;:::i;:::-;;11538:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12860:142;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18307:754;;;;;;;;;;;;;;;;:::i;:::-;;11954:25;;;:::i;:::-;;;;;;;;;;;;;;;;1097:230;;;:::i;:::-;;17466:719;;;;;;;;;;;;;;;;:::i;:::-;;17209:181;;;:::i;:::-;;11504:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16701:121;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;20048:344;;;;;;;;;;;;;;;;:::i;:::-;;14332:197;;;;;;;;;;;;;;;;:::i;:::-;;335:26;;;:::i;:::-;;;;;;;;;;;;;;;;11441:27;;;:::i;:::-;;;;;;;;;;;;;;;;11646:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11404:30;;;:::i;:::-;;;;;;;;;;;;;;;;13245:681;;;;;;;;;;;;;;;;:::i;:::-;;21025:749;;;:::i;:::-;;11717:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15459:1234;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;924:165;;;;;;;;;;;;;;;;:::i;:::-;;19069:741;;;;;;;;;;;;;;;;:::i;:::-;;19818:159;;;;;;;;;;;;;;;;:::i;:::-;;16830:247;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14586:865;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12756:96;12801:7;12828:9;:16;;;;12821:23;;12756:96;:::o;306:22::-;;;;;;;;;;;;;:::o;11863:34::-;;;;:::o;13010:183::-;13090:7;13110:11;13124:16;13131:8;13124:6;:16::i;:::-;13110:30;;13158:8;:13;13167:3;13158:13;;;;;;;;;;;:20;13172:5;13158:20;;;;;;;;;;;;;;;:27;;;13151:34;;;13010:183;;;;:::o;20400:617::-;20451:11;20465:16;20472:8;20465:6;:16::i;:::-;20451:30;;20532:1;20496:8;:13;20505:3;20496:13;;;;;;;;;;;:25;20510:10;20496:25;;;;;;;;;;;;;;;:32;;;:37;:71;;;;20566:1;20537:9;20547:3;20537:14;;;;;;;;;;;;;;;;;;:25;;;:30;20496:71;20492:122;;;20584:7;;;20492:122;20624:21;20648:9;20658:3;20648:14;;;;;;;;;;;;;;;;;;20624:38;;20673:21;20697:8;:13;20706:3;20697:13;;;;;;;;;;;:25;20711:10;20697:25;;;;;;;;;;;;;;;20673:49;;20733:15;20744:3;20733:10;:15::i;:::-;20759;20777:100;20851:4;:15;;;20777:55;20798:4;:11;;;20811:4;:20;;;20777;:55::i;:::-;:59;;:100;;;;:::i;:::-;20759:118;;20906:55;20927:4;:11;;;20940:4;:20;;;20906;:55::i;:::-;20888:4;:15;;:73;;;;20972:37;20989:10;21001:7;20972:16;:37::i;:::-;20400:617;;;;;;:::o;13934:390::-;702:7;;;;;;;;;;;688:21;;:10;:21;;;680:43;;;;;;;;;;;;;;;;;;;;;;14077:11:::1;14073:61;;;14105:17;:15;:17::i;:::-;14073:61;14144:11;14158:16;14165:8;14158:6;:16::i;:::-;14144:30;;14203:63;14254:11;14203:46;14223:9;14233:3;14223:14;;;;;;;;;;;;;;;;;;:25;;;14203:15;;:19;;:46;;;;:::i;:::-;:50;;:63;;;;:::i;:::-;14185:15;:81;;;;14305:11;14277:9;14287:3;14277:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;734:1;13934:390:::0;;;:::o;11538:50::-;;;;;;;;;;;;;;;;;:::o;12860:142::-;12938:7;12919:8;12516:1;12489:15;:24;12505:7;12489:24;;;;;;;;;;;;;;;;:28;12481:59;;;;;;;;;;;;;;;;;;;;;;12993:1:::1;12965:15;:25;12981:8;12965:25;;;;;;;;;;;;;;;;:29;12958:36;;12860:142:::0;;;;:::o;18307:754::-;18377:11;18391:16;18398:8;18391:6;:16::i;:::-;18377:30;;18418:21;18442:9;18452:3;18442:14;;;;;;;;;;;;;;;;;;18418:38;;18467:21;18491:8;:13;18500:3;18491:13;;;;;;;;;;;:25;18505:10;18491:25;;;;;;;;;;;;;;;18467:49;;18527:15;18538:3;18527:10;:15::i;:::-;18571:1;18557:4;:11;;;:15;18553:226;;;18589:15;18607:108;18685:4;:15;;;18607:55;18628:4;:11;;;18641:4;:20;;;18607;:55::i;:::-;:59;;:108;;;;:::i;:::-;18589:126;;18730:37;18747:10;18759:7;18730:16;:37::i;:::-;18553:226;;18789:82;18835:10;18856:4;18863:7;18796:4;:12;;;;;;;;;;;;18789:37;;;;:82;;;;;;:::i;:::-;18896:24;18912:7;18896:4;:11;;;:15;;:24;;;;:::i;:::-;18882:4;:11;;:38;;;;18949:55;18970:4;:11;;;18983:4;:20;;;18949;:55::i;:::-;18931:4;:15;;:73;;;;19040:3;19028:10;19020:33;;;19045:7;19020:33;;;;;;;;;;;;;;;18307:754;;;;;:::o;11954:25::-;;;;:::o;1097:230::-;1165:11;;;;;;;;;;;1151:25;;:10;:25;;;1143:51;;;;;;;;;;;;;;;;;;;;;;1240:11;;;;;;;;;;;1210:42;;1231:7;;;;;;;;;;;1210:42;;;;;;;;;;;;1273:11;;;;;;;;;;;1263:7;;:21;;;;;;;;;;;;;;;;;;1317:1;1295:11;;:24;;;;;;;;;;;;;;;;;;1097:230::o;17466:719::-;17518:21;17542:9;17552:4;17542:15;;;;;;;;;;;;;;;;;;17518:39;;17588:4;:20;;;17572:12;:36;17568:75;;17625:7;;;17568:75;17653:16;17679:4;:12;;;;;;;;;;;;17672:30;;;17711:4;17672:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17653:64;;17744:1;17732:8;:13;17728:102;;;17785:12;17762:4;:20;;:35;;;;17812:7;;;;17728:102;17840:18;17861:168;18013:15;;17861:133;17978:4;:15;;;17861:98;17946:12;;17861:66;17906:4;:20;;;17861:26;:44;;:66;;;;:::i;:::-;:84;;:98;;;;:::i;:::-;:116;;:133;;;;:::i;:::-;:151;;:168;;;;:::i;:::-;17840:189;;18063:68;18088:42;18109:10;18121:8;18088:20;:42::i;:::-;18063:4;:20;;;:24;;:68;;;;:::i;:::-;18040:4;:20;;:91;;;;18165:12;18142:4;:20;;:35;;;;17466:719;;;;;:::o;17209:181::-;17254:14;17271:9;:16;;;;17254:33;;17303:11;17317:1;17303:15;;17298:85;17326:6;17320:3;:12;17298:85;;;17356:15;17367:3;17356:10;:15::i;:::-;17334:5;;;;;17298:85;;;;17209:181;:::o;11504:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16701:121::-;16766:7;16793:14;:21;16808:5;16793:21;;;;;;;;;;;;;;;;16786:28;;16701:121;;;:::o;20048:344::-;20111:11;20125:16;20132:8;20125:6;:16::i;:::-;20111:30;;20152:21;20176:9;20186:3;20176:14;;;;;;;;;;;;;;;;;;20152:38;;20201:21;20225:8;:13;20234:3;20225:13;;;;;;;;;;;:25;20239:10;20225:25;;;;;;;;;;;;;;;20201:49;;20261:67;20303:10;20316:4;:11;;;20268:4;:12;;;;;;;;;;;;20261:33;;;;:67;;;;;:::i;:::-;20353:1;20339:4;:11;;:15;;;;20383:1;20365:4;:15;;:19;;;;20048:344;;;;:::o;14332:197::-;702:7;;;;;;;;;;;688:21;;:10;:21;;;680:43;;;;;;;;;;;;;;;;;;;;;;14426:11:::1;14422:61;;;14454:17;:15;:17::i;:::-;14422:61;14508:13;14493:12;:28;;;;14332:197:::0;;:::o;335:26::-;;;;;;;;;;;;;:::o;11441:27::-;;;;:::o;11646:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11404:30::-;;;;;;;;;;;;;:::o;13245:681::-;13379:8;12657:1;12629:15;:24;12645:7;12629:24;;;;;;;;;;;;;;;;:29;12621:64;;;;;;;;;;;;;;;;;;;;;;702:7:::1;::::0;::::1;;;;;;;;;688:21;;:10;:21;;;680:43;;;;;;;;;;;;;;;;;;;;;;13414:11:::2;13410:61;;;13442:17;:15;:17::i;:::-;13410:61;13481:23;13522:10;;13507:12;:25;:53;;13550:10;;13507:53;;;13535:12;13507:53;13481:79;;13589:32;13609:11;13589:15;;:19;;:32;;;;:::i;:::-;13571:15;:50;;;;13632:9;13661:191;;;;;;;;13698:8;13661:191;;;;;;13737:11;13661:191;;;;13784:15;13661:191;;;;13835:1;13661:191;;::::0;13632:231:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13902:9;:16;;;;13874:15;:25;13890:8;13874:25;;;;;;;;;;;;;;;:44;;;;734:1;13245:681:::0;;;;:::o;21025:749::-;21063:14;21080:9;:16;;;;21063:33;;21107:15;21125:1;21107:19;;21142:11;21156:1;21142:15;;21137:582;21165:6;21159:3;:12;21137:582;;;21235:1;21199:8;:13;21208:3;21199:13;;;;;;;;;;;:25;21213:10;21199:25;;;;;;;;;;;;;;;:32;;;:37;:71;;;;21269:1;21240:9;21250:3;21240:14;;;;;;;;;;;;;;;;;;:25;;;:30;21199:71;21195:132;;;21291:8;;21195:132;21341:21;21365:9;21375:3;21365:14;;;;;;;;;;;;;;;;;;21341:38;;21394:21;21418:8;:13;21427:3;21418:13;;;;;;;;;;;:25;21432:10;21418:25;;;;;;;;;;;;;;;21394:49;;21458:15;21469:3;21458:10;:15::i;:::-;21498:121;21528:76;21588:4;:15;;;21528:55;21549:4;:11;;;21562:4;:20;;;21528;:55::i;:::-;:59;;:76;;;;:::i;:::-;21498:7;:11;;:121;;;;:::i;:::-;21488:131;;21652:55;21673:4;:11;;;21686:4;:20;;;21652;:55::i;:::-;21634:4;:15;;:73;;;;21137:582;;;21173:5;;;;;21137:582;;;;21729:37;21746:10;21758:7;21729:16;:37::i;:::-;21025:749;;:::o;11717:49::-;;;;;;;;;;;;;;;;;:::o;15459:1234::-;15526:7;15546:14;15563:9;:16;;;;15546:33;;15590:19;15612:1;15590:23;;15629:11;15643:1;15629:15;;15624:1033;15652:6;15646:3;:12;15624:1033;;;15717:1;15686:8;:13;15695:3;15686:13;;;;;;;;;;;:20;15700:5;15686:20;;;;;;;;;;;;;;;:27;;;:32;:66;;;;15751:1;15722:9;15732:3;15722:14;;;;;;;;;;;;;;;;;;:25;;;:30;15686:66;15682:127;;;15773:8;;15682:127;15823:21;15847:9;15857:3;15847:14;;;;;;;;;;;;;;;;;;15823:38;;15876:21;15900:8;:13;15909:3;15900:13;;;;;;;;;;;:20;15914:5;15900:20;;;;;;;;;;;;;;;15876:44;;15935:23;15961:4;:20;;;15935:46;;15996:16;16022:4;:12;;;;;;;;;;;;16015:30;;;16054:4;16015:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15996:64;;16094:4;:20;;;16079:12;:35;:52;;;;;16130:1;16118:8;:13;;16079:52;16075:422;;;16152:18;16173:208;16365:15;;16173:165;16322:4;:15;;;16173:122;16282:12;;16173:82;16234:4;:20;;;16173:34;:60;;:82;;;;:::i;:::-;:108;;:122;;;;:::i;:::-;:148;;:165;;;;:::i;:::-;:191;;:208;;;;:::i;:::-;16152:229;;16418:63;16438:42;16459:10;16471:8;16438:20;:42::i;:::-;16418:15;:19;;:63;;;;:::i;:::-;16400:81;;16075:422;;16525:120;16559:71;16614:4;:15;;;16559:50;16580:4;:11;;;16593:15;16559:20;:50::i;:::-;:54;;:71;;;;:::i;:::-;16525:11;:15;;:120;;;;:::i;:::-;16511:134;;15624:1033;;;;;15660:5;;;;;15624:1033;;;;16674:11;16667:18;;;;15459:1234;;;:::o;924:165::-;702:7;;;;;;;;;;;688:21;;:10;:21;;;680:43;;;;;;;;;;;;;;;;;;;;;;1039:8:::1;1004:44;;1030:7;::::0;::::1;;;;;;;;;1004:44;;;;;;;;;;;;1073:8;1059:11;;:22;;;;;;;;;;;;;;;;;;924:165:::0;:::o;19069:741::-;19140:11;19154:16;19161:8;19154:6;:16::i;:::-;19140:30;;19181:21;19205:9;19215:3;19205:14;;;;;;;;;;;;;;;;;;19181:38;;19230:21;19254:8;:13;19263:3;19254:13;;;;;;;;;;;:25;19268:10;19254:25;;;;;;;;;;;;;;;19230:49;;19313:7;19298:4;:11;;;:22;;19290:52;;;;;;;;;;;;;;;;;;;;;;19353:15;19364:3;19353:10;:15::i;:::-;19379;19397:100;19471:4;:15;;;19397:55;19418:4;:11;;;19431:4;:20;;;19397;:55::i;:::-;:59;;:100;;;;:::i;:::-;19379:118;;19508:37;19525:10;19537:7;19508:16;:37::i;:::-;19570:24;19586:7;19570:4;:11;;;:15;;:24;;;;:::i;:::-;19556:4;:11;;:38;;;;19623:55;19644:4;:11;;;19657:4;:20;;;19623;:55::i;:::-;19605:4;:15;;:73;;;;19689:63;19731:10;19744:7;19696:4;:12;;;;;;;;;;;;19689:33;;;;:63;;;;;:::i;:::-;19789:3;19777:10;19768:34;;;19794:7;19768:34;;;;;;;;;;;;;;;19069:741;;;;;;:::o;19818:159::-;19875:15;19893:38;19910:8;19920:10;19893:16;:38::i;:::-;19875:56;;19942:27;19951:8;19961:7;19942:8;:27::i;:::-;19818:159;;:::o;16830:247::-;16898:7;16918:11;16932:16;16939:8;16932:6;:16::i;:::-;16918:30;;16959:21;16983:9;16993:3;16983:14;;;;;;;;;;;;;;;;;;16959:38;;17015:54;17053:15;;17015:33;17032:4;:15;;;17015:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;17008:61;;;;16830:247;;;:::o;14586:865::-;14668:7;14688:11;14702:16;14709:8;14702:6;:16::i;:::-;14688:30;;14729:21;14753:9;14763:3;14753:14;;;;;;;;;;;;;;;;;;14729:38;;14778:21;14802:8;:13;14811:3;14802:13;;;;;;;;;;;:20;14816:5;14802:20;;;;;;;;;;;;;;;14778:44;;14833:23;14859:4;:20;;;14833:46;;14890:16;14916:4;:12;;;;;;;;;;;;14909:30;;;14948:4;14909:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14890:64;;14984:4;:20;;;14969:12;:35;:52;;;;;15020:1;15008:8;:13;;14969:52;14965:390;;;15038:18;15059:188;15231:15;;15059:149;15192:4;:15;;;15059:110;15156:12;;15059:74;15112:4;:20;;;15059:30;:52;;:74;;;;:::i;:::-;:96;;:110;;;;:::i;:::-;:132;;:149;;;;:::i;:::-;:171;;:188;;;;:::i;:::-;15038:209;;15280:63;15300:42;15321:10;15333:8;15300:20;:42::i;:::-;15280:15;:19;;:63;;;;:::i;:::-;15262:81;;14965:390;;15372:71;15427:4;:15;;;15372:50;15393:4;:11;;;15406:15;15372:20;:50::i;:::-;:54;;:71;;;;:::i;:::-;15365:78;;;;;;;14586:865;;;;:::o;3050:127::-;3118:7;3162:6;3145:13;3156:1;3145:6;:10;;:13;;;;:::i;:::-;:24;;;;;;3138:31;;3050:127;;;;:::o;2203:137::-;2261:7;2294:1;2289;:6;;2281:28;;;;;;;;;;;;;;;;;;;;;;2331:1;2327;:5;2320:12;;2203:137;;;;:::o;21818:238::-;21911:15;;;;;;;;;;;21894:40;;;21935:3;21940:7;21894:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21981:32;22005:7;21981:14;:19;21996:3;21981:19;;;;;;;;;;;;;;;;:23;;:32;;;;:::i;:::-;21959:14;:19;21974:3;21959:19;;;;;;;;;;;;;;;:54;;;;22035:3;22029:19;;;22040:7;22029:19;;;;;;;;;;;;;;;21818:238;;:::o;2348:161::-;2406:7;2426:9;2442:1;2438;:5;2426:17;;2467:1;2462;:6;;2454:28;;;;;;;;;;;;;;;;;;;;;;2500:1;2493:8;;;2348:161;;;;:::o;7133:285::-;7277:133;7311:5;7354:27;;;7383:4;7389:2;7393:5;7331:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7277:19;:133::i;:::-;7133:285;;;;:::o;1524:226::-;1582:7;1611:1;1606;:6;1602:47;;;1636:1;1629:8;;;;1602:47;1661:9;1677:1;1673;:5;1661:17;;1706:1;1701;1697;:5;;;;;;:10;1689:32;;;;;;;;;;;;;;;;;;;;;;1741:1;1734:8;;;1524:226;;;;;:::o;1758:141::-;1816:7;1848:1;1844;:5;1836:32;;;;;;;;;;;;;;;;;;;;;;1890:1;1886;:5;;;;;;1879:12;;1758:141;;;;:::o;3324:128::-;3392:7;3419:25;3442:1;3419:18;3430:6;3419;:10;;:18;;;;:::i;:::-;:22;;:25;;;;:::i;:::-;3412:32;;3324:128;;;;:::o;6914:211::-;7031:86;7051:5;7081:23;;;7106:2;7110:5;7058:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7031:19;:86::i;:::-;6914:211;;;:::o;8487:1046::-;9147:12;9161:23;9196:5;9188:19;;9208:4;9188:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9146:67;;;;9232:7;9224:52;;;;;;;;;;;;;;;;;;;;;;9313:1;9293:10;:17;:21;9289:237;;;9448:10;9437:30;;;;;;;;;;;;;;9429:85;;;;;;;;;;;;;;;;;;;;;;9289:237;8487:1046;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:124;;219:6;206:20;197:29;;231:30;255:5;231:30;;;191:75;;;;;273:128;;354:6;348:13;339:22;;366:30;390:5;366:30;;;333:68;;;;;408:130;;488:6;475:20;466:29;;500:33;527:5;500:33;;;460:78;;;;;545:134;;629:6;623:13;614:22;;641:33;668:5;641:33;;;608:71;;;;;686:241;;790:2;778:9;769:7;765:23;761:32;758:2;;;806:1;803;796:12;758:2;841:1;858:53;903:7;894:6;883:9;879:22;858:53;;;848:63;;820:97;752:175;;;;;934:366;;;1055:2;1043:9;1034:7;1030:23;1026:32;1023:2;;;1071:1;1068;1061:12;1023:2;1106:1;1123:53;1168:7;1159:6;1148:9;1144:22;1123:53;;;1113:63;;1085:97;1213:2;1231:53;1276:7;1267:6;1256:9;1252:22;1231:53;;;1221:63;;1192:98;1017:283;;;;;;1307:366;;;1428:2;1416:9;1407:7;1403:23;1399:32;1396:2;;;1444:1;1441;1434:12;1396:2;1479:1;1496:53;1541:7;1532:6;1521:9;1517:22;1496:53;;;1486:63;;1458:97;1586:2;1604:53;1649:7;1640:6;1629:9;1625:22;1604:53;;;1594:63;;1565:98;1390:283;;;;;;1680:485;;;;1815:2;1803:9;1794:7;1790:23;1786:32;1783:2;;;1831:1;1828;1821:12;1783:2;1866:1;1883:53;1928:7;1919:6;1908:9;1904:22;1883:53;;;1873:63;;1845:97;1973:2;1991:53;2036:7;2027:6;2016:9;2012:22;1991:53;;;1981:63;;1952:98;2081:2;2099:50;2141:7;2132:6;2121:9;2117:22;2099:50;;;2089:60;;2060:95;1777:388;;;;;;2172:257;;2284:2;2272:9;2263:7;2259:23;2255:32;2252:2;;;2300:1;2297;2290:12;2252:2;2335:1;2352:61;2405:7;2396:6;2385:9;2381:22;2352:61;;;2342:71;;2314:105;2246:183;;;;;2436:241;;2540:2;2528:9;2519:7;2515:23;2511:32;2508:2;;;2556:1;2553;2546:12;2508:2;2591:1;2608:53;2653:7;2644:6;2633:9;2629:22;2608:53;;;2598:63;;2570:97;2502:175;;;;;2684:263;;2799:2;2787:9;2778:7;2774:23;2770:32;2767:2;;;2815:1;2812;2805:12;2767:2;2850:1;2867:64;2923:7;2914:6;2903:9;2899:22;2867:64;;;2857:74;;2829:108;2761:186;;;;;2954:366;;;3075:2;3063:9;3054:7;3050:23;3046:32;3043:2;;;3091:1;3088;3081:12;3043:2;3126:1;3143:53;3188:7;3179:6;3168:9;3164:22;3143:53;;;3133:63;;3105:97;3233:2;3251:53;3296:7;3287:6;3276:9;3272:22;3251:53;;;3241:63;;3212:98;3037:283;;;;;;3327:360;;;3445:2;3433:9;3424:7;3420:23;3416:32;3413:2;;;3461:1;3458;3451:12;3413:2;3496:1;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;;;3503:63;;3475:97;3603:2;3621:50;3663:7;3654:6;3643:9;3639:22;3621:50;;;3611:60;;3582:95;3407:280;;;;;;3694:113;3777:24;3795:5;3777:24;;;3772:3;3765:37;3759:48;;;3814:356;;3942:38;3974:5;3942:38;;;3992:88;4073:6;4068:3;3992:88;;;3985:95;;4085:52;4130:6;4125:3;4118:4;4111:5;4107:16;4085:52;;;4158:6;4153:3;4149:16;4142:23;;3922:248;;;;;;4178:313;;4338:67;4402:2;4397:3;4338:67;;;4331:74;;4438:15;4434:1;4429:3;4425:11;4418:36;4482:2;4477:3;4473:12;4466:19;;4324:167;;;;4500:332;;4660:67;4724:2;4719:3;4660:67;;;4653:74;;4760:34;4756:1;4751:3;4747:11;4740:55;4823:2;4818:3;4814:12;4807:19;;4646:186;;;;4841:314;;5001:67;5065:2;5060:3;5001:67;;;4994:74;;5101:16;5097:1;5092:3;5088:11;5081:37;5146:2;5141:3;5137:12;5130:19;;4987:168;;;;5164:308;;5324:66;5388:1;5383:3;5324:66;;;5317:73;;5423:11;5419:1;5414:3;5410:11;5403:32;5463:2;5458:3;5454:12;5447:19;;5310:162;;;;5481:317;;5641:67;5705:2;5700:3;5641:67;;;5634:74;;5741:19;5737:1;5732:3;5728:11;5721:40;5789:2;5784:3;5780:12;5773:19;;5627:171;;;;5807:308;;5967:66;6031:1;6026:3;5967:66;;;5960:73;;6066:11;6062:1;6057:3;6053:11;6046:32;6106:2;6101:3;6097:12;6090:19;;5953:162;;;;6124:318;;6284:67;6348:2;6343:3;6284:67;;;6277:74;;6384:20;6380:1;6375:3;6371:11;6364:41;6433:2;6428:3;6424:12;6417:19;;6270:172;;;;6451:308;;6611:66;6675:1;6670:3;6611:66;;;6604:73;;6710:11;6706:1;6701:3;6697:11;6690:32;6750:2;6745:3;6741:12;6734:19;;6597:162;;;;6768:379;;6928:67;6992:2;6987:3;6928:67;;;6921:74;;7028:34;7024:1;7019:3;7015:11;7008:55;7097:12;7092:2;7087:3;7083:12;7076:34;7138:2;7133:3;7129:12;7122:19;;6914:233;;;;7156:322;;7316:67;7380:2;7375:3;7316:67;;;7309:74;;7416:24;7412:1;7407:3;7403:11;7396:45;7469:2;7464:3;7460:12;7453:19;;7302:176;;;;7487:308;;7647:66;7711:1;7706:3;7647:66;;;7640:73;;7746:11;7742:1;7737:3;7733:11;7726:32;7786:2;7781:3;7777:12;7770:19;;7633:162;;;;7803:113;7886:24;7904:5;7886:24;;;7881:3;7874:37;7868:48;;;7923:271;;8076:93;8165:3;8156:6;8076:93;;;8069:100;;8186:3;8179:10;;8057:137;;;;;8201:222;;8328:2;8317:9;8313:18;8305:26;;8342:71;8410:1;8399:9;8395:17;8386:6;8342:71;;;8299:124;;;;;8430:444;;8613:2;8602:9;8598:18;8590:26;;8627:71;8695:1;8684:9;8680:17;8671:6;8627:71;;;8709:72;8777:2;8766:9;8762:18;8753:6;8709:72;;;8792;8860:2;8849:9;8845:18;8836:6;8792:72;;;8584:290;;;;;;;8881:333;;9036:2;9025:9;9021:18;9013:26;;9050:71;9118:1;9107:9;9103:17;9094:6;9050:71;;;9132:72;9200:2;9189:9;9185:18;9176:6;9132:72;;;9007:207;;;;;;9221:556;;9432:3;9421:9;9417:19;9409:27;;9447:71;9515:1;9504:9;9500:17;9491:6;9447:71;;;9529:72;9597:2;9586:9;9582:18;9573:6;9529:72;;;9612;9680:2;9669:9;9665:18;9656:6;9612:72;;;9695;9763:2;9752:9;9748:18;9739:6;9695:72;;;9403:374;;;;;;;;9784:416;;9984:2;9973:9;9969:18;9961:26;;10034:9;10028:4;10024:20;10020:1;10009:9;10005:17;9998:47;10059:131;10185:4;10059:131;;;10051:139;;9955:245;;;;10207:416;;10407:2;10396:9;10392:18;10384:26;;10457:9;10451:4;10447:20;10443:1;10432:9;10428:17;10421:47;10482:131;10608:4;10482:131;;;10474:139;;10378:245;;;;10630:416;;10830:2;10819:9;10815:18;10807:26;;10880:9;10874:4;10870:20;10866:1;10855:9;10851:17;10844:47;10905:131;11031:4;10905:131;;;10897:139;;10801:245;;;;11053:416;;11253:2;11242:9;11238:18;11230:26;;11303:9;11297:4;11293:20;11289:1;11278:9;11274:17;11267:47;11328:131;11454:4;11328:131;;;11320:139;;11224:245;;;;11476:416;;11676:2;11665:9;11661:18;11653:26;;11726:9;11720:4;11716:20;11712:1;11701:9;11697:17;11690:47;11751:131;11877:4;11751:131;;;11743:139;;11647:245;;;;11899:416;;12099:2;12088:9;12084:18;12076:26;;12149:9;12143:4;12139:20;12135:1;12124:9;12120:17;12113:47;12174:131;12300:4;12174:131;;;12166:139;;12070:245;;;;12322:416;;12522:2;12511:9;12507:18;12499:26;;12572:9;12566:4;12562:20;12558:1;12547:9;12543:17;12536:47;12597:131;12723:4;12597:131;;;12589:139;;12493:245;;;;12745:416;;12945:2;12934:9;12930:18;12922:26;;12995:9;12989:4;12985:20;12981:1;12970:9;12966:17;12959:47;13020:131;13146:4;13020:131;;;13012:139;;12916:245;;;;13168:416;;13368:2;13357:9;13353:18;13345:26;;13418:9;13412:4;13408:20;13404:1;13393:9;13389:17;13382:47;13443:131;13569:4;13443:131;;;13435:139;;13339:245;;;;13591:416;;13791:2;13780:9;13776:18;13768:26;;13841:9;13835:4;13831:20;13827:1;13816:9;13812:17;13805:47;13866:131;13992:4;13866:131;;;13858:139;;13762:245;;;;14014:416;;14214:2;14203:9;14199:18;14191:26;;14264:9;14258:4;14254:20;14250:1;14239:9;14235:17;14228:47;14289:131;14415:4;14289:131;;;14281:139;;14185:245;;;;14437:222;;14564:2;14553:9;14549:18;14541:26;;14578:71;14646:1;14635:9;14631:17;14622:6;14578:71;;;14535:124;;;;;14666:333;;14821:2;14810:9;14806:18;14798:26;;14835:71;14903:1;14892:9;14888:17;14879:6;14835:71;;;14917:72;14985:2;14974:9;14970:18;14961:6;14917:72;;;14792:207;;;;;;15006:121;;15099:5;15093:12;15083:22;;15064:63;;;;15135:144;;15270:3;15255:18;;15248:31;;;;;15288:163;;15403:6;15398:3;15391:19;15440:4;15435:3;15431:14;15416:29;;15384:67;;;;;15459:91;;15521:24;15539:5;15521:24;;;15510:35;;15504:46;;;;15557:85;;15630:5;15623:13;15616:21;15605:32;;15599:43;;;;15649:121;;15722:42;15715:5;15711:54;15700:65;;15694:76;;;;15777:72;;15839:5;15828:16;;15822:27;;;;15857:268;15922:1;15929:101;15943:6;15940:1;15937:13;15929:101;;;16019:1;16014:3;16010:11;16004:18;16000:1;15995:3;15991:11;15984:39;15965:2;15962:1;15958:10;15953:15;;15929:101;;;16045:6;16042:1;16039:13;16036:2;;;16110:1;16101:6;16096:3;16092:16;16085:27;16036:2;15906:219;;;;;16133:117;16202:24;16220:5;16202:24;;;16195:5;16192:35;16182:2;;16241:1;16238;16231:12;16182:2;16176:74;;16257:111;16323:21;16338:5;16323:21;;;16316:5;16313:32;16303:2;;16359:1;16356;16349:12;16303:2;16297:71;;16375:117;16444:24;16462:5;16444:24;;;16437:5;16434:35;16424:2;;16483:1;16480;16473:12;16424:2;16418:74;

Metadata Hash

4dd3b51af84772c0cd791c715df9a4fb26f85a61e90d8f8af99a209c42d9a3c9
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.