ETH Price: $2,152.29 (+0.93%)

Contract

0x5e654AAb015bbb49FD59079fcDDfEE4e149e8057
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw115282162020-12-26 8:27:151911 days ago1608971235IN
0x5e654AAb...e149e8057
0 ETH0.0047395742.00000145
Exit115282062020-12-26 8:25:251911 days ago1608971125IN
0x5e654AAb...e149e8057
0 ETH0.0111499942.00000145
Exit115273152020-12-26 5:13:011911 days ago1608959581IN
0x5e654AAb...e149e8057
0 ETH0.0044911634
Exit115272262020-12-26 4:56:231911 days ago1608958583IN
0x5e654AAb...e149e8057
0 ETH0.0037600831
Withdraw115269692020-12-26 4:00:031911 days ago1608955203IN
0x5e654AAb...e149e8057
0 ETH0.0059808953
Exit115269662020-12-26 3:59:551911 days ago1608955195IN
0x5e654AAb...e149e8057
0 ETH0.0070009253
Exit115268412020-12-26 3:32:121911 days ago1608953532IN
0x5e654AAb...e149e8057
0 ETH0.0064725549
Exit115267792020-12-26 3:16:431911 days ago1608952603IN
0x5e654AAb...e149e8057
0 ETH0.0045043734.1000016
Exit115267532020-12-26 3:12:021911 days ago1608952322IN
0x5e654AAb...e149e8057
0 ETH0.012803543
Stake Token115235402020-12-25 15:17:281912 days ago1608909448IN
0x5e654AAb...e149e8057
0 ETH0.0254155592
Get Bonus115232442020-12-25 14:10:221912 days ago1608905422IN
0x5e654AAb...e149e8057
0 ETH0.0023692666
Exit115232362020-12-25 14:08:081912 days ago1608905288IN
0x5e654AAb...e149e8057
0 ETH0.0167818967
Get Bonus115232012020-12-25 14:02:091912 days ago1608904929IN
0x5e654AAb...e149e8057
0 ETH0.001687247
Get Bonus115231112020-12-25 13:41:471912 days ago1608903707IN
0x5e654AAb...e149e8057
0 ETH0.0025570881
Withdraw115230932020-12-25 13:37:031912 days ago1608903423IN
0x5e654AAb...e149e8057
0 ETH0.0162517188.1
Withdraw115230022020-12-25 13:16:341912 days ago1608902194IN
0x5e654AAb...e149e8057
0 ETH0.0300318392
Set Withdrawn Pe...115229992020-12-25 13:15:131912 days ago1608902113IN
0x5e654AAb...e149e8057
0 ETH0.0037649985
Set Deposit Perc...115229962020-12-25 13:14:241912 days ago1608902064IN
0x5e654AAb...e149e8057
0 ETH0.0012436385
Stake Token115222712020-12-25 10:34:151912 days ago1608892455IN
0x5e654AAb...e149e8057
0 ETH0.0167293963.00000156
Withdraw115221802020-12-25 10:11:441912 days ago1608891104IN
0x5e654AAb...e149e8057
0 ETH0.0096977550
Get Reward115221772020-12-25 10:11:161912 days ago1608891076IN
0x5e654AAb...e149e8057
0 ETH0.0083142656
Get Reward115214342020-12-25 7:32:481912 days ago1608881568IN
0x5e654AAb...e149e8057
0 ETH0.0104291475.039
Stake Token115165922020-12-24 13:38:191913 days ago1608817099IN
0x5e654AAb...e149e8057
0 ETH0.0178234467.12
Set Difficulty115165152020-12-24 13:19:391913 days ago1608815979IN
0x5e654AAb...e149e8057
0 ETH0.0074946477
Get Reward115164872020-12-24 13:11:391913 days ago1608815499IN
0x5e654AAb...e149e8057
0 ETH0.0023597660.51451876
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CUPIUSDTPOOL

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2020-12-10
*/

/**
 *Submitted for verification at Etherscan.io on 2020-11-27
 */

// File: contracts/Interfaces.sol

// SPDX-License-Identifier: --🦉--
pragma solidity =0.6.12;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function mint(address account, uint256 amount) external;

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

pragma solidity =0.6.12;

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

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

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "division by zero");
        uint256 c = a / b;
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "modulo by zero");
        return a % b;
    }
}

pragma solidity =0.6.12;

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * This test is non-exhaustive, and there may be false-negatives: during the
     * execution of a contract's constructor, its address will be reported as
     * not containing a contract.
     *
     * IMPORTANT: It is unsafe to assume that an address for which this
     * function returns false is an externally-owned account (EOA) and not a
     * contract.
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;


            bytes32 accountHash
         = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != 0x0 && codehash != accountHash);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account)
        internal
        pure
        returns (address payable)
    {
        return address(uint160(account));
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        // (bool success, ) = recipient.call.value(amount)("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
}

pragma solidity =0.6.12;

library SafeERC20 {
    using SafeMathLT for uint256;
    using Address for address;

    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)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(
            value
        );
        callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(
            value,
            "SafeERC20: decreased allowance below zero"
        );
        callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    /**
     * @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
        require(address(token).isContract(), "SafeERC20: call to non-contract");

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

pragma solidity =0.6.12;
// pragma solidity =0.7.0;
pragma experimental ABIEncoderV2;

contract CUPIUSDTPOOL {
    using SafeMathLT for uint256;
    using SafeERC20 for IERC20;

    IERC20 public mintedToken = IERC20(
        0xe7D2914136E63f209f0e9De3100eD60ce18A3e8E
    );

    IERC20 public poolToken = IERC20(
        0xdAC17F958D2ee523a2206206994597C13D831ec7
    );

    struct Difficulty {
        uint256 EndedAt;
        bool Exists;
    }

    struct Deposit {
        uint256 Difficulty;
        uint256 Amount;
        uint256 DepositedAt;
        bool Closed;
        uint256 ClosedAt;
    }

    struct User {
        bool Exists;
        uint256 Balances;
        Deposit[] Deposits;
        address Referrer;
        address[] Invited1st;
        address[] Invited2nd;
    }

    struct Reward {
        uint256 ClosedRewardTotal;
        uint256 ClosedRewardUsed;
        bool Stoped;
        uint256 CurrentRewardUsed;
        uint256 MintRewardTotal;
        uint256 LastRewardAt;
    }

    uint256 public CONTRACT_STARTED_AT;
    uint256 public CONTRACT_DEPOSIT_PERCENT = 20;
    uint256 public CONTRACT_WITHDRAWN_PERCENT = 0;
    uint256 public TOKEN_MINT_TOTAL = 15000000 * 1e18;
    uint256 public TOKEN_MINT_USED = 0;
    uint256 private TOTAL_BALANCE_SUPPLY = 0;
    uint256 public CONTRACT_DIFFICULTY = 1 * 1e18;

    mapping(uint256 => Difficulty) public DIFFICULTIES;
    mapping(address => User) public USERS;
    mapping(address => Reward) public REWARDS;
    mapping(address => uint256) public BONUS;

    address payable public CONTRACT_DEVELOPER;
    address payable public CONTRACT_FOUNDATION;
    address public CONTRACT_DEFAULT_REFERRER;
    bool public CONTRACT_INITED = false;

    uint256[] public REFERRAL_PERCENTS = [10, 5];
    uint256[] public ALLDIFFICULTIES = [CONTRACT_DIFFICULTY];

    event onStake(address indexed account, address referrer, uint256 amount);
    event onReward(address indexed account, uint256 reward);
    event onBouns(address indexed account, uint256 bouns);
    event onWithdraw(address indexed account, uint256 amount);

    modifier afterDeveloper() {
        require(msg.sender == CONTRACT_DEVELOPER);
        _;
    }

    modifier afterStarted() {
        require(block.timestamp > CONTRACT_STARTED_AT, "not start");
        _;
    }

    constructor() public {
        CONTRACT_DEVELOPER = msg.sender;
        CONTRACT_STARTED_AT = block.timestamp + 1 minutes;
    }

    receive() external payable {
        revert();
    }

    function _(
        address account,
        uint256 amount,
        address referrer
    ) internal {
        if (referrer == account) {
            referrer = CONTRACT_DEFAULT_REFERRER;
        }

        if (USERS[account].Exists == false) {
            USERS[account].Referrer = referrer;

            USERS[referrer].Invited1st.push(account);
            USERS[USERS[referrer].Referrer].Invited2nd.push(account);
        }

        USERS[account].Deposits.push(
            Deposit(CONTRACT_DIFFICULTY, amount, block.timestamp, false, 0)
        );
        USERS[account].Balances = USERS[account].Balances.add(amount);
        TOTAL_BALANCE_SUPPLY = TOTAL_BALANCE_SUPPLY.add(amount);
        USERS[account].Exists = true;

        if (REWARDS[msg.sender].Stoped) {
            getReward();
        }

        emit onStake(account, referrer, amount);
    }

    function stakeToken(uint256 amount, address referrer)
        external
        afterStarted
    {
        require(referrer != address(0), "referrer = address(0)");
        require(amount > 0, "amount = 0");

        poolToken.safeTransferFrom(msg.sender, address(this), amount);

        uint256 burnAmount = amount.mul(CONTRACT_DEPOSIT_PERCENT).div(100);
        poolToken.safeTransfer(CONTRACT_FOUNDATION, burnAmount);

        _(msg.sender, amount.sub(burnAmount), referrer);
    }

    function computeDifficulties(Deposit memory d)
        internal
        view
        returns (uint256)
    {
        uint256 earnedAmount;
        uint256 nextEndedAt = d.DepositedAt;

        if (ALLDIFFICULTIES.length > 1) {
            uint256 difficultyIndex = 0;
            for (uint256 i = 0; i < ALLDIFFICULTIES.length; i++) {
                if (ALLDIFFICULTIES[i] == d.Difficulty) {
                    difficultyIndex = i;
                    break;
                }
            }

            for (uint256 i = difficultyIndex; i < ALLDIFFICULTIES.length; i++) {
                if (DIFFICULTIES[ALLDIFFICULTIES[i]].Exists) {
                    earnedAmount = earnedAmount.add(
                        d.Amount.mul(
                            DIFFICULTIES[ALLDIFFICULTIES[i]]
                                .EndedAt
                                .sub(nextEndedAt)
                                .div(1 seconds)
                                .mul(ALLDIFFICULTIES[i])
                                .div(1e8)
                        )
                    );

                    nextEndedAt = DIFFICULTIES[ALLDIFFICULTIES[i]].EndedAt;
                }
            }
        }

        earnedAmount = earnedAmount.add(
            d
                .Amount
                .mul(block.timestamp.sub(nextEndedAt).div(1 seconds))
                .mul(CONTRACT_DIFFICULTY)
                .div(1e8)
        );

        return earnedAmount;
    }

    function _earned(address account) internal view returns (uint256) {
        require(account != address(0), "account = address(0)");
        require(
            TOKEN_MINT_USED < TOKEN_MINT_TOTAL,
            "TOKEN_MINT_USED >= TOKEN_MINT_TOTAL"
        );

        User memory u = USERS[account];

        uint256 earnedAmount;

        for (uint256 i = 0; i < u.Deposits.length; i++) {
            Deposit memory d = u.Deposits[i];

            if (d.Closed) {
                continue;
            }

            earnedAmount = earnedAmount.add(computeDifficulties(d));
        }

        earnedAmount = earnedAmount.div(1 days);
        earnedAmount = earnedAmount.add(
            REWARDS[account].ClosedRewardTotal.sub(
                REWARDS[account].ClosedRewardUsed
            )
        );

        earnedAmount = earnedAmount.sub(REWARDS[account].CurrentRewardUsed);

        if (TOKEN_MINT_USED.add(earnedAmount) > TOKEN_MINT_TOTAL) {
            earnedAmount = earnedAmount.sub(
                TOKEN_MINT_USED.add(earnedAmount).sub(TOKEN_MINT_TOTAL)
            );
        }

        return earnedAmount;
    }

    function getMyEarnd(address account)
        public
        view
        afterStarted
        returns (uint256)
    {
        return _earned(account);
    }

    function getMyInvitedLength(address account)
        external
        view
        returns (uint256, uint256)
    {
        User memory user = USERS[account];

        return (user.Invited1st.length, user.Invited2nd.length);
    }

    function getMyInvitedBonus(address account)
        public
        view
        afterStarted
        returns (uint256)
    {
        require(account != address(0), "account = address(0)");

        uint256 bonusBonus1st;
        uint256 bonusBonus2nd;

        User memory user = USERS[account];

        for (uint256 i = 0; i < user.Invited1st.length; i++) {
            uint256 earnedAmount;
            uint256 rewardAmount = REWARDS[user.Invited1st[i]].MintRewardTotal;

            earnedAmount = _earned(user.Invited1st[i]).add(rewardAmount);
            bonusBonus1st = bonusBonus1st.add(
                earnedAmount.mul(REFERRAL_PERCENTS[0]).div(100)
            );
        }

        for (uint256 i = 0; i < user.Invited2nd.length; i++) {
            uint256 earnedAmount;
            uint256 rewardAmount = REWARDS[user.Invited2nd[i]].MintRewardTotal;

            earnedAmount = _earned(user.Invited2nd[i]).add(rewardAmount);
            bonusBonus2nd = bonusBonus2nd.add(
                earnedAmount.mul(REFERRAL_PERCENTS[1]).div(100)
            );
        }

        return bonusBonus1st.add(bonusBonus2nd).sub(BONUS[account]);
    }

    function getBonus() public afterStarted {
        uint256 bonusAmount;

        bonusAmount = getMyInvitedBonus(msg.sender);

        if (bonusAmount > 0) {
            BONUS[msg.sender] = BONUS[msg.sender].add(bonusAmount);
            TOKEN_MINT_USED = TOKEN_MINT_USED.add(bonusAmount);

            mintedToken.safeTransfer(msg.sender, bonusAmount);
            emit onBouns(msg.sender, bonusAmount);
        }
    }

    function getReward() public afterStarted {
        uint256 earnedAmount;
        uint256 totalAmount;

        earnedAmount = _earned(msg.sender);

        if (REWARDS[msg.sender].Stoped) {
            REWARDS[msg.sender].Stoped = false;
            REWARDS[msg.sender].CurrentRewardUsed = 0;
        } else {
            REWARDS[msg.sender].CurrentRewardUsed = REWARDS[msg.sender]
                .CurrentRewardUsed
                .add(earnedAmount);
        }

        totalAmount = earnedAmount;

        if (totalAmount > 0) {
            REWARDS[msg.sender].ClosedRewardUsed = REWARDS[msg.sender]
                .ClosedRewardTotal;
            TOKEN_MINT_USED = TOKEN_MINT_USED.add(totalAmount);
            REWARDS[msg.sender].MintRewardTotal = REWARDS[msg.sender]
                .MintRewardTotal
                .add(totalAmount);

            mintedToken.safeTransfer(msg.sender, totalAmount);
            emit onReward(msg.sender, totalAmount);
        }
    }

    function withdraw() public afterStarted {
        User storage u = USERS[msg.sender];

        TOTAL_BALANCE_SUPPLY = TOTAL_BALANCE_SUPPLY.sub(u.Balances);

        REWARDS[msg.sender].ClosedRewardTotal = REWARDS[msg.sender]
            .ClosedRewardTotal
            .add(_earned(msg.sender));

        REWARDS[msg.sender].CurrentRewardUsed = 0;
        REWARDS[msg.sender].Stoped = true;

        for (uint256 i = 0; i < u.Deposits.length; i++) {
            u.Deposits[i].Closed = true;
            u.Deposits[i].ClosedAt = block.timestamp;
        }

         uint256 burnAmount = u.Balances.mul(CONTRACT_WITHDRAWN_PERCENT).div(
            100
        );
        uint256 amount = u.Balances.sub(burnAmount);

        poolToken.safeTransfer(msg.sender, amount);
        poolToken.safeTransfer(CONTRACT_FOUNDATION, burnAmount);

        emit onWithdraw(msg.sender, amount);

        u.Balances = 0;
    }

    function exit() external afterStarted {
        withdraw();
        getBonus();
        getReward();
    }

    function getDeposit(address account)
        external
        view
        afterStarted
        returns (Deposit[] memory)
    {
        require(account != address(0), "account = address(0)");

        User memory u = USERS[account];

        return u.Deposits;
    }

    function totalSupply() public view returns (uint256) {
        return TOTAL_BALANCE_SUPPLY;
    }

    function balanceOf(address account)
        public
        view
        afterStarted
        returns (uint256)
    {
        require(account != address(0), "account = address(0)");

        return USERS[account].Balances;
    }

    function setDifficulty(uint256 v)
        external
        afterDeveloper
        returns (uint256)
    {
        require(DIFFICULTIES[v].Exists == false, "difficulty = true");

        ALLDIFFICULTIES.push(v);
        DIFFICULTIES[CONTRACT_DIFFICULTY] = Difficulty(block.timestamp, true);
        CONTRACT_DIFFICULTY = v;

        return ALLDIFFICULTIES.length;
    }

    function setDepositPercent(uint256 percent) external afterDeveloper {
        CONTRACT_DEPOSIT_PERCENT = percent;

        require(
            CONTRACT_DEPOSIT_PERCENT.add(CONTRACT_WITHDRAWN_PERCENT) <= 100
        );
    }

    function setWithdrawnPercent(uint256 percent) external afterDeveloper {
        CONTRACT_WITHDRAWN_PERCENT = percent;

        require(
            CONTRACT_DEPOSIT_PERCENT.add(CONTRACT_WITHDRAWN_PERCENT) <= 100
        );
    }

    function setDefaultReferrer(address account) external afterDeveloper {
        require(account != address(0), "account = address(0)");

        CONTRACT_DEFAULT_REFERRER = account;
    }

    function setDeveloper(address payable account) external afterDeveloper {
        require(account != address(0), "account = address(0)");

        CONTRACT_DEVELOPER = account;
    }

    function setFoundation(address payable account) external afterDeveloper {
        require(account != address(0), "account = address(0)");

        CONTRACT_FOUNDATION = account;
    }

    function init() external afterDeveloper {
        require(CONTRACT_INITED == false, "CONTRACT_INITED = true");

        mintedToken.mint(address(this), TOKEN_MINT_TOTAL);

        CONTRACT_INITED = true;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"bouns","type":"uint256"}],"name":"onBouns","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"onReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"onStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"onWithdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ALLDIFFICULTIES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"BONUS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_DEFAULT_REFERRER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_DEPOSIT_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_DEVELOPER","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_DIFFICULTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_FOUNDATION","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_INITED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_STARTED_AT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_WITHDRAWN_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"DIFFICULTIES","outputs":[{"internalType":"uint256","name":"EndedAt","type":"uint256"},{"internalType":"bool","name":"Exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"REFERRAL_PERCENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"REWARDS","outputs":[{"internalType":"uint256","name":"ClosedRewardTotal","type":"uint256"},{"internalType":"uint256","name":"ClosedRewardUsed","type":"uint256"},{"internalType":"bool","name":"Stoped","type":"bool"},{"internalType":"uint256","name":"CurrentRewardUsed","type":"uint256"},{"internalType":"uint256","name":"MintRewardTotal","type":"uint256"},{"internalType":"uint256","name":"LastRewardAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_MINT_TOTAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_MINT_USED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"USERS","outputs":[{"internalType":"bool","name":"Exists","type":"bool"},{"internalType":"uint256","name":"Balances","type":"uint256"},{"internalType":"address","name":"Referrer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getDeposit","outputs":[{"components":[{"internalType":"uint256","name":"Difficulty","type":"uint256"},{"internalType":"uint256","name":"Amount","type":"uint256"},{"internalType":"uint256","name":"DepositedAt","type":"uint256"},{"internalType":"bool","name":"Closed","type":"bool"},{"internalType":"uint256","name":"ClosedAt","type":"uint256"}],"internalType":"struct CUPIUSDTPOOL.Deposit[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getMyEarnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getMyInvitedBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getMyInvitedLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintedToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setDefaultReferrer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setDepositPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"setDeveloper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"v","type":"uint256"}],"name":"setDifficulty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"setFoundation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setWithdrawnPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"}],"name":"stakeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273e7d2914136e63f209f0e9de3100ed60ce18a3e8e6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dac17f958d2ee523a2206206994597c13d831ec7600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601460035560006004556a0c685fa11e01ec6f00000060055560006006556000600755670de0b6b3a76400006008556000600f60146101000a81548160ff0219169083151502179055506040518060400160405280600a60ff168152602001600560ff16815250601090600262000126929190620001aa565b50604051806020016040528060085481525060119060016200014a92919062000201565b503480156200015857600080fd5b5033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603c420160028190555062000272565b828054828255906000526020600020908101928215620001ee579160200282015b82811115620001ed578251829060ff16905591602001919060010190620001cb565b5b509050620001fd919062000253565b5090565b82805482825590600052602060002090810192821562000240579160200282015b828111156200023f57825182559160200191906001019062000222565b5b5090506200024f919062000253565b5090565b5b808211156200026e57600081600090555060010162000254565b5090565b61487980620002826000396000f3fe6080604052600436106102135760003560e01c80639ee3060011610118578063db3543f5116100a0578063e9fad8ee1161006f578063e9fad8ee146107ce578063f0057e09146107e5578063f5a76d331461080e578063fd5e823b14610839578063ff70fa49146108765761021d565b8063db3543f514610728578063dcf6e81914610751578063e1254fba1461077a578063e1c7392a146107b75761021d565b8063c6712ee2116100e7578063c6712ee21461063f578063cbdf382c1461067c578063d355e1db146106a7578063d5b34445146106d2578063d83a8225146106fd5761021d565b80639ee3060014610570578063a385714c14610599578063bc566431146105d6578063c0c9e551146106145761021d565b8063449472f61161019b578063602512e11161016a578063602512e1146104725780636f49c34e146104af57806370a08231146104f15780638542925a1461052e5780638bdff161146105595761021d565b8063449472f6146103905780634989c1a9146103b95780634f697c37146103f6578063600d20ce146104355761021d565b80632a8e0326116101e25780632a8e0326146102e15780633072f2531461030c5780633bb54b93146103375780633ccfd60b146103625780633d18b912146103795761021d565b806303966c911461022257806305e826cd1461026057806318160ddd1461028b5780632a527af9146102b65761021d565b3661021d57600080fd5b600080fd5b34801561022e57600080fd5b5061024960048036038101906102449190613c7a565b61089f565b604051610257929190614616565b60405180910390f35b34801561026c57600080fd5b50610275610b45565b60405161028291906143a5565b60405180910390f35b34801561029757600080fd5b506102a0610b58565b6040516102ad91906145d2565b60405180910390f35b3480156102c257600080fd5b506102cb610b62565b6040516102d891906145d2565b60405180910390f35b3480156102ed57600080fd5b506102f6610b68565b60405161030391906145d2565b60405180910390f35b34801561031857600080fd5b50610321610b6e565b60405161032e91906145d2565b60405180910390f35b34801561034357600080fd5b5061034c610b74565b60405161035991906142c4565b60405180910390f35b34801561036e57600080fd5b50610377610b9a565b005b34801561038557600080fd5b5061038e610f68565b005b34801561039c57600080fd5b506103b760048036038101906103b29190613cf5565b61133c565b005b3480156103c557600080fd5b506103e060048036038101906103db9190613cf5565b6113c4565b6040516103ed91906145d2565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613c7a565b6113e5565b60405161042c939291906143c0565b60405180910390f35b34801561044157600080fd5b5061045c60048036038101906104579190613cf5565b61143c565b60405161046991906145d2565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613cf5565b61145d565b6040516104a691906145d2565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d19190613c7a565b6115ba565b6040516104e89695949392919061463f565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190613c7a565b611603565b60405161052591906145d2565b60405180910390f35b34801561053a57600080fd5b50610543611703565b60405161055091906143f7565b60405180910390f35b34801561056557600080fd5b5061056e611727565b005b34801561057c57600080fd5b5061059760048036038101906105929190613d1e565b6118ce565b005b3480156105a557600080fd5b506105c060048036038101906105bb9190613c7a565b611ad1565b6040516105cd91906145d2565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613cf5565b61208f565b60405161060b9291906145ed565b60405180910390f35b34801561062057600080fd5b506106296120c0565b60405161063691906145d2565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190613c7a565b6120c6565b60405161067391906145d2565b60405180910390f35b34801561068857600080fd5b506106916120de565b60405161069e91906143f7565b60405180910390f35b3480156106b357600080fd5b506106bc612104565b6040516106c991906145d2565b60405180910390f35b3480156106de57600080fd5b506106e761210a565b6040516106f491906142df565b60405180910390f35b34801561070957600080fd5b50610712612130565b60405161071f91906145d2565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190613ca3565b612136565b005b34801561075d57600080fd5b5061077860048036038101906107739190613c7a565b612244565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613c7a565b612352565b6040516107ae9190614383565b60405180910390f35b3480156107c357600080fd5b506107cc6126a2565b005b3480156107da57600080fd5b506107e36127fe565b005b3480156107f157600080fd5b5061080c60048036038101906108079190613cf5565b61285c565b005b34801561081a57600080fd5b506108236128e4565b60405161083091906142df565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b9190613c7a565b61290a565b60405161086d91906145d2565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190613ca3565b612960565b005b6000806108aa613ba7565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156109b357838290600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff161515151581526020016004820154815250508152602001906001019061093e565b5050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201805480602002602001604051908101604052809291908181526020018280548015610a9657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610a4c575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015610b2457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610ada575b50505050508152505090508060800151518160a00151519250925050915091565b600f60149054906101000a900460ff1681565b6000600754905090565b60035481565b60025481565b60045481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002544211610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590614412565b60405180910390fd5b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610c3a8160010154600754612a6e90919063ffffffff16565b600781905550610c9d610c4c33612ac4565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ffc90919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555060005b8160020180549050811015610e03576001826002018281548110610da957fe5b906000526020600020906005020160030160006101000a81548160ff02191690831515021790555042826002018281548110610de157fe5b9060005260206000209060050201600401819055508080600101915050610d89565b506000610e326064610e24600454856001015461305190919063ffffffff16565b6130c190919063ffffffff16565b90506000610e4d828460010154612a6e90919063ffffffff16565b9050610e9c3382600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661311d9092919063ffffffff16565b610f0b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661311d9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc82604051610f5191906145d2565b60405180910390a260008360010181905550505050565b6002544211610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614412565b60405180910390fd5b600080610fb833612ac4565b9150600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16156110b7576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550611153565b61110c82600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154612ffc90919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055505b819050600081111561133857600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506111fd81600654612ffc90919063ffffffff16565b60068190555061125881600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154612ffc90919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055506112e9338260008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661311d9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fc3723288a1442c21017ef3f3627162e3d8da44517955f5aee6a75ef2f4ced5c68260405161132f91906145d2565b60405180910390a25b5050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461139657600080fd5b8060038190555060646113b6600454600354612ffc90919063ffffffff16565b11156113c157600080fd5b50565b601181815481106113d157fe5b906000526020600020016000915090505481565b600a6020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b6010818154811061144957fe5b906000526020600020016000915090505481565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114b957600080fd5b600015156009600084815260200190815260200160002060010160009054906101000a900460ff16151514611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a90614432565b60405180910390fd5b60118290806001815401808255809150506001900390600052602060002001600090919091909150556040518060400160405280428152602001600115158152506009600060085481526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff021916908315150217905550905050816008819055506011805490509050919050565b600b6020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16908060030154908060040154908060050154905086565b60006002544211611649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164090614412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b0906144d2565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600254421161176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176290614412565b60405180910390fd5b600061177633611ad1565b905060008111156118cb576117d381600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ffc90919063ffffffff16565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061182b81600654612ffc90919063ffffffff16565b60068190555061187c338260008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661311d9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f4ac90d1f78f20dba88859653e6f21532dc8fccefb0f3992a2f6e9d1d80290bc8826040516118c291906145d2565b60405180910390a25b50565b6002544211611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190990614412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611979906144b2565b60405180910390fd5b600082116119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc906145b2565b60405180910390fd5b611a14333084600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166131a3909392919063ffffffff16565b6000611a3e6064611a306003548661305190919063ffffffff16565b6130c190919063ffffffff16565b9050611aaf600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661311d9092919063ffffffff16565b611acc33611ac68386612a6e90919063ffffffff16565b8461322c565b505050565b60006002544211611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90614412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7e906144d2565b60405180910390fd5b600080611b92613ba7565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015611c9b57838290600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff1615151515815260200160048201548152505081526020019060010190611c26565b5050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201805480602002602001604051908101604052809291908181526020018280548015611d7e57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611d34575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015611e0c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611dc2575b505050505081525050905060005b816080015151811015611f1b57600080600b600085608001518581518110611e3e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050611eb881611eaa86608001518681518110611e9d57fe5b6020026020010151612ac4565b612ffc90919063ffffffff16565b9150611f0a611efb6064611eed6010600081548110611ed357fe5b90600052602060002001548661305190919063ffffffff16565b6130c190919063ffffffff16565b87612ffc90919063ffffffff16565b955050508080600101915050611e1a565b5060005b8160a001515181101561202057600080600b60008560a001518581518110611f4357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050611fbd81611faf8660a001518681518110611fa257fe5b6020026020010151612ac4565b612ffc90919063ffffffff16565b915061200f6120006064611ff26010600181548110611fd857fe5b90600052602060002001548661305190919063ffffffff16565b6130c190919063ffffffff16565b86612ffc90919063ffffffff16565b945050508080600101915050611f1f565b50612085600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120778486612ffc90919063ffffffff16565b612a6e90919063ffffffff16565b9350505050919050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b60065481565b600c6020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461219057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f7906144d2565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461229e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561230e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612305906144d2565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606002544211612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f90614412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ff906144d2565b60405180910390fd5b612410613ba7565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201805480602002602001604051908101604052809291908181526020016000905b8282101561251957838290600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481525050815260200190600101906124a4565b5050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482018054806020026020016040519081016040528092919081815260200182805480156125fc57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116125b2575b505050505081526020016005820180548060200260200160405190810160405280929190818152602001828054801561268a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612640575b50505050508152505090508060400151915050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126fc57600080fd5b60001515600f60149054906101000a900460ff16151514612752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274990614492565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19306005546040518363ffffffff1660e01b81526004016127af9291906142fa565b600060405180830381600087803b1580156127c957600080fd5b505af11580156127dd573d6000803e3d6000fd5b505050506001600f60146101000a81548160ff021916908315150217905550565b6002544211612842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283990614412565b60405180910390fd5b61284a610b9a565b612852611727565b61285a610f68565b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128b657600080fd5b8060048190555060646128d6600454600354612ffc90919063ffffffff16565b11156128e157600080fd5b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006002544211612950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294790614412565b60405180910390fd5b61295982612ac4565b9050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129ba57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a21906144d2565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600082821115612ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aaa90614572565b60405180910390fd5b600082840390508091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c906144d2565b60405180910390fd5b60055460065410612b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7290614512565b60405180910390fd5b612b83613ba7565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612c8c57838290600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff1615151515815260200160048201548152505081526020019060010190612c17565b5050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201805480602002602001604051908101604052809291908181526020018280548015612d6f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612d25575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015612dfd57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612db3575b5050505050815250509050600080600090505b826040015151811015612e7b57612e25613bf5565b83604001518281518110612e3557fe5b60200260200101519050806060015115612e4f5750612e6e565b612e6a612e5b826137b2565b84612ffc90919063ffffffff16565b9250505b8080600101915050612e10565b50612e9262015180826130c190919063ffffffff16565b9050612f3d612f2e600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612a6e90919063ffffffff16565b82612ffc90919063ffffffff16565b9050612f94600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015482612a6e90919063ffffffff16565b9050600554612fae82600654612ffc90919063ffffffff16565b1115612ff257612fef612fe0600554612fd284600654612ffc90919063ffffffff16565b612a6e90919063ffffffff16565b82612a6e90919063ffffffff16565b90505b8092505050919050565b600080828401905083811015613047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303e906144f2565b60405180910390fd5b8091505092915050565b60008083141561306457600090506130bb565b600082840290508284828161307557fe5b04146130b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ad90614452565b60405180910390fd5b809150505b92915050565b6000808211613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fc90614532565b60405180910390fd5b600082848161311057fe5b0490508091505092915050565b61319e8363a9059cbb60e01b848460405160240161313c92919061435a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506139ea565b505050565b613226846323b872dd60e01b8585856040516024016131c493929190614323565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506139ea565b50505050565b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561328657600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b60001515600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515141561350c5780600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002016040518060a0016040528060085481526020018481526020014281526020016000151581526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555060808201518160040155505061364382600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154612ffc90919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061369e82600754612ffc90919063ffffffff16565b6007819055506001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161561375d5761375c610f68565b5b8273ffffffffffffffffffffffffffffffffffffffff167f8de0474e83702ebc5e8a750d5ac74be5da93a41665a828acb915ff89ebd91b1f82846040516137a592919061435a565b60405180910390a2505050565b60008060008360400151905060016011805490501115613966576000805b601180549050811015613815578560000151601182815481106137ef57fe5b9060005260206000200154141561380857809150613815565b80806001019150506137d0565b5060008190505b60118054905081101561396357600960006011838154811061383a57fe5b9060005260206000200154815260200190815260200160002060010160009054906101000a900460ff1615613956576139236139146139016305f5e1006138f36011868154811061388757fe5b90600052602060002001546138e560016138d78b6009600060118d815481106138ac57fe5b9060005260206000200154815260200190815260200160002060000154612a6e90919063ffffffff16565b6130c190919063ffffffff16565b61305190919063ffffffff16565b6130c190919063ffffffff16565b886020015161305190919063ffffffff16565b85612ffc90919063ffffffff16565b9350600960006011838154811061393657fe5b906000526020600020015481526020019081526020016000206000015492505b808060010191505061381c565b50505b6139de6139cf6305f5e1006139c16008546139b36139a060016139928942612a6e90919063ffffffff16565b6130c190919063ffffffff16565b8a6020015161305190919063ffffffff16565b61305190919063ffffffff16565b6130c190919063ffffffff16565b83612ffc90919063ffffffff16565b91508192505050919050565b613a098273ffffffffffffffffffffffffffffffffffffffff16613b5c565b613a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3f90614592565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff1683604051613a7191906142ad565b6000604051808303816000865af19150503d8060008114613aae576040519150601f19603f3d011682016040523d82523d6000602084013e613ab3565b606091505b509150915081613af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aef90614472565b60405180910390fd5b600081511115613b565780806020019051810190613b169190613ccc565b613b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4c90614552565b60405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b8214158015613b9e5750808214155b92505050919050565b6040518060c001604052806000151581526020016000815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081525090565b6040518060a00160405280600081526020016000815260200160008152602001600015158152602001600081525090565b600081359050613c35816147e7565b92915050565b600081359050613c4a816147fe565b92915050565b600081519050613c5f81614815565b92915050565b600081359050613c748161482c565b92915050565b600060208284031215613c8c57600080fd5b6000613c9a84828501613c26565b91505092915050565b600060208284031215613cb557600080fd5b6000613cc384828501613c3b565b91505092915050565b600060208284031215613cde57600080fd5b6000613cec84828501613c50565b91505092915050565b600060208284031215613d0757600080fd5b6000613d1584828501613c65565b91505092915050565b60008060408385031215613d3157600080fd5b6000613d3f85828601613c65565b9250506020613d5085828601613c26565b9150509250929050565b6000613d668383614227565b60a08301905092915050565b613d7b8161475a565b82525050565b613d8a81614712565b82525050565b613d9981614700565b82525050565b6000613daa826146b0565b613db481856146d3565b9350613dbf836146a0565b8060005b83811015613df0578151613dd78882613d5a565b9750613de2836146c6565b925050600181019050613dc3565b5085935050505092915050565b613e0681614724565b82525050565b613e1581614724565b82525050565b6000613e26826146bb565b613e3081856146e4565b9350613e408185602086016147b4565b80840191505092915050565b613e558161476c565b82525050565b6000613e686009836146ef565b91507f6e6f7420737461727400000000000000000000000000000000000000000000006000830152602082019050919050565b6000613ea86011836146ef565b91507f646966666963756c7479203d20747275650000000000000000000000000000006000830152602082019050919050565b6000613ee86017836146ef565b91507f6d756c7469706c69636174696f6e206f766572666c6f770000000000000000006000830152602082019050919050565b6000613f286020836146ef565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b6000613f686016836146ef565b91507f434f4e54524143545f494e49544544203d2074727565000000000000000000006000830152602082019050919050565b6000613fa86015836146ef565b91507f7265666572726572203d206164647265737328302900000000000000000000006000830152602082019050919050565b6000613fe86014836146ef565b91507f6163636f756e74203d20616464726573732830290000000000000000000000006000830152602082019050919050565b60006140286011836146ef565b91507f6164646974696f6e206f766572666c6f770000000000000000000000000000006000830152602082019050919050565b60006140686023836146ef565b91507f544f4b454e5f4d494e545f55534544203e3d20544f4b454e5f4d494e545f544f60008301527f54414c00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140ce6010836146ef565b91507f6469766973696f6e206279207a65726f000000000000000000000000000000006000830152602082019050919050565b600061410e602a836146ef565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006141746014836146ef565b91507f7375627472616374696f6e206f766572666c6f770000000000000000000000006000830152602082019050919050565b60006141b4601f836146ef565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b60006141f4600a836146ef565b91507f616d6f756e74203d2030000000000000000000000000000000000000000000006000830152602082019050919050565b60a08201600082015161423d600085018261428f565b506020820151614250602085018261428f565b506040820151614263604085018261428f565b5060608201516142766060850182613dfd565b506080820151614289608085018261428f565b50505050565b61429881614750565b82525050565b6142a781614750565b82525050565b60006142b98284613e1b565b915081905092915050565b60006020820190506142d96000830184613d90565b92915050565b60006020820190506142f46000830184613d81565b92915050565b600060408201905061430f6000830185613d72565b61431c602083018461429e565b9392505050565b60006060820190506143386000830186613d90565b6143456020830185613d90565b614352604083018461429e565b949350505050565b600060408201905061436f6000830185613d90565b61437c602083018461429e565b9392505050565b6000602082019050818103600083015261439d8184613d9f565b905092915050565b60006020820190506143ba6000830184613e0c565b92915050565b60006060820190506143d56000830186613e0c565b6143e2602083018561429e565b6143ef6040830184613d90565b949350505050565b600060208201905061440c6000830184613e4c565b92915050565b6000602082019050818103600083015261442b81613e5b565b9050919050565b6000602082019050818103600083015261444b81613e9b565b9050919050565b6000602082019050818103600083015261446b81613edb565b9050919050565b6000602082019050818103600083015261448b81613f1b565b9050919050565b600060208201905081810360008301526144ab81613f5b565b9050919050565b600060208201905081810360008301526144cb81613f9b565b9050919050565b600060208201905081810360008301526144eb81613fdb565b9050919050565b6000602082019050818103600083015261450b8161401b565b9050919050565b6000602082019050818103600083015261452b8161405b565b9050919050565b6000602082019050818103600083015261454b816140c1565b9050919050565b6000602082019050818103600083015261456b81614101565b9050919050565b6000602082019050818103600083015261458b81614167565b9050919050565b600060208201905081810360008301526145ab816141a7565b9050919050565b600060208201905081810360008301526145cb816141e7565b9050919050565b60006020820190506145e7600083018461429e565b92915050565b6000604082019050614602600083018561429e565b61460f6020830184613e0c565b9392505050565b600060408201905061462b600083018561429e565b614638602083018461429e565b9392505050565b600060c082019050614654600083018961429e565b614661602083018861429e565b61466e6040830187613e0c565b61467b606083018661429e565b614688608083018561429e565b61469560a083018461429e565b979650505050505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061470b82614730565b9050919050565b600061471d82614730565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061476582614790565b9050919050565b60006147778261477e565b9050919050565b600061478982614730565b9050919050565b600061479b826147a2565b9050919050565b60006147ad82614730565b9050919050565b60005b838110156147d25780820151818401526020810190506147b7565b838111156147e1576000848401525b50505050565b6147f081614700565b81146147fb57600080fd5b50565b61480781614712565b811461481257600080fd5b50565b61481e81614724565b811461482957600080fd5b50565b61483581614750565b811461484057600080fd5b5056fea2646970667358221220f88b454dbd078dcab0b74837da64ae557f7ec986964fd1e86513d16a941a68b364736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102135760003560e01c80639ee3060011610118578063db3543f5116100a0578063e9fad8ee1161006f578063e9fad8ee146107ce578063f0057e09146107e5578063f5a76d331461080e578063fd5e823b14610839578063ff70fa49146108765761021d565b8063db3543f514610728578063dcf6e81914610751578063e1254fba1461077a578063e1c7392a146107b75761021d565b8063c6712ee2116100e7578063c6712ee21461063f578063cbdf382c1461067c578063d355e1db146106a7578063d5b34445146106d2578063d83a8225146106fd5761021d565b80639ee3060014610570578063a385714c14610599578063bc566431146105d6578063c0c9e551146106145761021d565b8063449472f61161019b578063602512e11161016a578063602512e1146104725780636f49c34e146104af57806370a08231146104f15780638542925a1461052e5780638bdff161146105595761021d565b8063449472f6146103905780634989c1a9146103b95780634f697c37146103f6578063600d20ce146104355761021d565b80632a8e0326116101e25780632a8e0326146102e15780633072f2531461030c5780633bb54b93146103375780633ccfd60b146103625780633d18b912146103795761021d565b806303966c911461022257806305e826cd1461026057806318160ddd1461028b5780632a527af9146102b65761021d565b3661021d57600080fd5b600080fd5b34801561022e57600080fd5b5061024960048036038101906102449190613c7a565b61089f565b604051610257929190614616565b60405180910390f35b34801561026c57600080fd5b50610275610b45565b60405161028291906143a5565b60405180910390f35b34801561029757600080fd5b506102a0610b58565b6040516102ad91906145d2565b60405180910390f35b3480156102c257600080fd5b506102cb610b62565b6040516102d891906145d2565b60405180910390f35b3480156102ed57600080fd5b506102f6610b68565b60405161030391906145d2565b60405180910390f35b34801561031857600080fd5b50610321610b6e565b60405161032e91906145d2565b60405180910390f35b34801561034357600080fd5b5061034c610b74565b60405161035991906142c4565b60405180910390f35b34801561036e57600080fd5b50610377610b9a565b005b34801561038557600080fd5b5061038e610f68565b005b34801561039c57600080fd5b506103b760048036038101906103b29190613cf5565b61133c565b005b3480156103c557600080fd5b506103e060048036038101906103db9190613cf5565b6113c4565b6040516103ed91906145d2565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613c7a565b6113e5565b60405161042c939291906143c0565b60405180910390f35b34801561044157600080fd5b5061045c60048036038101906104579190613cf5565b61143c565b60405161046991906145d2565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613cf5565b61145d565b6040516104a691906145d2565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d19190613c7a565b6115ba565b6040516104e89695949392919061463f565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190613c7a565b611603565b60405161052591906145d2565b60405180910390f35b34801561053a57600080fd5b50610543611703565b60405161055091906143f7565b60405180910390f35b34801561056557600080fd5b5061056e611727565b005b34801561057c57600080fd5b5061059760048036038101906105929190613d1e565b6118ce565b005b3480156105a557600080fd5b506105c060048036038101906105bb9190613c7a565b611ad1565b6040516105cd91906145d2565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613cf5565b61208f565b60405161060b9291906145ed565b60405180910390f35b34801561062057600080fd5b506106296120c0565b60405161063691906145d2565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190613c7a565b6120c6565b60405161067391906145d2565b60405180910390f35b34801561068857600080fd5b506106916120de565b60405161069e91906143f7565b60405180910390f35b3480156106b357600080fd5b506106bc612104565b6040516106c991906145d2565b60405180910390f35b3480156106de57600080fd5b506106e761210a565b6040516106f491906142df565b60405180910390f35b34801561070957600080fd5b50610712612130565b60405161071f91906145d2565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190613ca3565b612136565b005b34801561075d57600080fd5b5061077860048036038101906107739190613c7a565b612244565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613c7a565b612352565b6040516107ae9190614383565b60405180910390f35b3480156107c357600080fd5b506107cc6126a2565b005b3480156107da57600080fd5b506107e36127fe565b005b3480156107f157600080fd5b5061080c60048036038101906108079190613cf5565b61285c565b005b34801561081a57600080fd5b506108236128e4565b60405161083091906142df565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b9190613c7a565b61290a565b60405161086d91906145d2565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190613ca3565b612960565b005b6000806108aa613ba7565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156109b357838290600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff161515151581526020016004820154815250508152602001906001019061093e565b5050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201805480602002602001604051908101604052809291908181526020018280548015610a9657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610a4c575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015610b2457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610ada575b50505050508152505090508060800151518160a00151519250925050915091565b600f60149054906101000a900460ff1681565b6000600754905090565b60035481565b60025481565b60045481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002544211610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590614412565b60405180910390fd5b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610c3a8160010154600754612a6e90919063ffffffff16565b600781905550610c9d610c4c33612ac4565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ffc90919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555060005b8160020180549050811015610e03576001826002018281548110610da957fe5b906000526020600020906005020160030160006101000a81548160ff02191690831515021790555042826002018281548110610de157fe5b9060005260206000209060050201600401819055508080600101915050610d89565b506000610e326064610e24600454856001015461305190919063ffffffff16565b6130c190919063ffffffff16565b90506000610e4d828460010154612a6e90919063ffffffff16565b9050610e9c3382600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661311d9092919063ffffffff16565b610f0b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661311d9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc82604051610f5191906145d2565b60405180910390a260008360010181905550505050565b6002544211610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614412565b60405180910390fd5b600080610fb833612ac4565b9150600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16156110b7576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550611153565b61110c82600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154612ffc90919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055505b819050600081111561133857600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506111fd81600654612ffc90919063ffffffff16565b60068190555061125881600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154612ffc90919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055506112e9338260008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661311d9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fc3723288a1442c21017ef3f3627162e3d8da44517955f5aee6a75ef2f4ced5c68260405161132f91906145d2565b60405180910390a25b5050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461139657600080fd5b8060038190555060646113b6600454600354612ffc90919063ffffffff16565b11156113c157600080fd5b50565b601181815481106113d157fe5b906000526020600020016000915090505481565b600a6020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b6010818154811061144957fe5b906000526020600020016000915090505481565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114b957600080fd5b600015156009600084815260200190815260200160002060010160009054906101000a900460ff16151514611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a90614432565b60405180910390fd5b60118290806001815401808255809150506001900390600052602060002001600090919091909150556040518060400160405280428152602001600115158152506009600060085481526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff021916908315150217905550905050816008819055506011805490509050919050565b600b6020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16908060030154908060040154908060050154905086565b60006002544211611649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164090614412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b0906144d2565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600254421161176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176290614412565b60405180910390fd5b600061177633611ad1565b905060008111156118cb576117d381600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ffc90919063ffffffff16565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061182b81600654612ffc90919063ffffffff16565b60068190555061187c338260008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661311d9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f4ac90d1f78f20dba88859653e6f21532dc8fccefb0f3992a2f6e9d1d80290bc8826040516118c291906145d2565b60405180910390a25b50565b6002544211611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190990614412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611979906144b2565b60405180910390fd5b600082116119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc906145b2565b60405180910390fd5b611a14333084600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166131a3909392919063ffffffff16565b6000611a3e6064611a306003548661305190919063ffffffff16565b6130c190919063ffffffff16565b9050611aaf600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661311d9092919063ffffffff16565b611acc33611ac68386612a6e90919063ffffffff16565b8461322c565b505050565b60006002544211611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90614412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7e906144d2565b60405180910390fd5b600080611b92613ba7565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015611c9b57838290600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff1615151515815260200160048201548152505081526020019060010190611c26565b5050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201805480602002602001604051908101604052809291908181526020018280548015611d7e57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611d34575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015611e0c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611dc2575b505050505081525050905060005b816080015151811015611f1b57600080600b600085608001518581518110611e3e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050611eb881611eaa86608001518681518110611e9d57fe5b6020026020010151612ac4565b612ffc90919063ffffffff16565b9150611f0a611efb6064611eed6010600081548110611ed357fe5b90600052602060002001548661305190919063ffffffff16565b6130c190919063ffffffff16565b87612ffc90919063ffffffff16565b955050508080600101915050611e1a565b5060005b8160a001515181101561202057600080600b60008560a001518581518110611f4357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050611fbd81611faf8660a001518681518110611fa257fe5b6020026020010151612ac4565b612ffc90919063ffffffff16565b915061200f6120006064611ff26010600181548110611fd857fe5b90600052602060002001548661305190919063ffffffff16565b6130c190919063ffffffff16565b86612ffc90919063ffffffff16565b945050508080600101915050611f1f565b50612085600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120778486612ffc90919063ffffffff16565b612a6e90919063ffffffff16565b9350505050919050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b60065481565b600c6020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461219057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f7906144d2565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461229e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561230e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612305906144d2565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606002544211612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f90614412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ff906144d2565b60405180910390fd5b612410613ba7565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201805480602002602001604051908101604052809291908181526020016000905b8282101561251957838290600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481525050815260200190600101906124a4565b5050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482018054806020026020016040519081016040528092919081815260200182805480156125fc57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116125b2575b505050505081526020016005820180548060200260200160405190810160405280929190818152602001828054801561268a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612640575b50505050508152505090508060400151915050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126fc57600080fd5b60001515600f60149054906101000a900460ff16151514612752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274990614492565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19306005546040518363ffffffff1660e01b81526004016127af9291906142fa565b600060405180830381600087803b1580156127c957600080fd5b505af11580156127dd573d6000803e3d6000fd5b505050506001600f60146101000a81548160ff021916908315150217905550565b6002544211612842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283990614412565b60405180910390fd5b61284a610b9a565b612852611727565b61285a610f68565b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128b657600080fd5b8060048190555060646128d6600454600354612ffc90919063ffffffff16565b11156128e157600080fd5b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006002544211612950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294790614412565b60405180910390fd5b61295982612ac4565b9050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129ba57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a21906144d2565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600082821115612ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aaa90614572565b60405180910390fd5b600082840390508091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c906144d2565b60405180910390fd5b60055460065410612b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7290614512565b60405180910390fd5b612b83613ba7565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612c8c57838290600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff1615151515815260200160048201548152505081526020019060010190612c17565b5050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201805480602002602001604051908101604052809291908181526020018280548015612d6f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612d25575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015612dfd57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612db3575b5050505050815250509050600080600090505b826040015151811015612e7b57612e25613bf5565b83604001518281518110612e3557fe5b60200260200101519050806060015115612e4f5750612e6e565b612e6a612e5b826137b2565b84612ffc90919063ffffffff16565b9250505b8080600101915050612e10565b50612e9262015180826130c190919063ffffffff16565b9050612f3d612f2e600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612a6e90919063ffffffff16565b82612ffc90919063ffffffff16565b9050612f94600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015482612a6e90919063ffffffff16565b9050600554612fae82600654612ffc90919063ffffffff16565b1115612ff257612fef612fe0600554612fd284600654612ffc90919063ffffffff16565b612a6e90919063ffffffff16565b82612a6e90919063ffffffff16565b90505b8092505050919050565b600080828401905083811015613047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303e906144f2565b60405180910390fd5b8091505092915050565b60008083141561306457600090506130bb565b600082840290508284828161307557fe5b04146130b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ad90614452565b60405180910390fd5b809150505b92915050565b6000808211613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fc90614532565b60405180910390fd5b600082848161311057fe5b0490508091505092915050565b61319e8363a9059cbb60e01b848460405160240161313c92919061435a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506139ea565b505050565b613226846323b872dd60e01b8585856040516024016131c493929190614323565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506139ea565b50505050565b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561328657600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b60001515600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515141561350c5780600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002016040518060a0016040528060085481526020018481526020014281526020016000151581526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555060808201518160040155505061364382600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154612ffc90919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061369e82600754612ffc90919063ffffffff16565b6007819055506001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161561375d5761375c610f68565b5b8273ffffffffffffffffffffffffffffffffffffffff167f8de0474e83702ebc5e8a750d5ac74be5da93a41665a828acb915ff89ebd91b1f82846040516137a592919061435a565b60405180910390a2505050565b60008060008360400151905060016011805490501115613966576000805b601180549050811015613815578560000151601182815481106137ef57fe5b9060005260206000200154141561380857809150613815565b80806001019150506137d0565b5060008190505b60118054905081101561396357600960006011838154811061383a57fe5b9060005260206000200154815260200190815260200160002060010160009054906101000a900460ff1615613956576139236139146139016305f5e1006138f36011868154811061388757fe5b90600052602060002001546138e560016138d78b6009600060118d815481106138ac57fe5b9060005260206000200154815260200190815260200160002060000154612a6e90919063ffffffff16565b6130c190919063ffffffff16565b61305190919063ffffffff16565b6130c190919063ffffffff16565b886020015161305190919063ffffffff16565b85612ffc90919063ffffffff16565b9350600960006011838154811061393657fe5b906000526020600020015481526020019081526020016000206000015492505b808060010191505061381c565b50505b6139de6139cf6305f5e1006139c16008546139b36139a060016139928942612a6e90919063ffffffff16565b6130c190919063ffffffff16565b8a6020015161305190919063ffffffff16565b61305190919063ffffffff16565b6130c190919063ffffffff16565b83612ffc90919063ffffffff16565b91508192505050919050565b613a098273ffffffffffffffffffffffffffffffffffffffff16613b5c565b613a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3f90614592565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff1683604051613a7191906142ad565b6000604051808303816000865af19150503d8060008114613aae576040519150601f19603f3d011682016040523d82523d6000602084013e613ab3565b606091505b509150915081613af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aef90614472565b60405180910390fd5b600081511115613b565780806020019051810190613b169190613ccc565b613b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4c90614552565b60405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b8214158015613b9e5750808214155b92505050919050565b6040518060c001604052806000151581526020016000815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081525090565b6040518060a00160405280600081526020016000815260200160008152602001600015158152602001600081525090565b600081359050613c35816147e7565b92915050565b600081359050613c4a816147fe565b92915050565b600081519050613c5f81614815565b92915050565b600081359050613c748161482c565b92915050565b600060208284031215613c8c57600080fd5b6000613c9a84828501613c26565b91505092915050565b600060208284031215613cb557600080fd5b6000613cc384828501613c3b565b91505092915050565b600060208284031215613cde57600080fd5b6000613cec84828501613c50565b91505092915050565b600060208284031215613d0757600080fd5b6000613d1584828501613c65565b91505092915050565b60008060408385031215613d3157600080fd5b6000613d3f85828601613c65565b9250506020613d5085828601613c26565b9150509250929050565b6000613d668383614227565b60a08301905092915050565b613d7b8161475a565b82525050565b613d8a81614712565b82525050565b613d9981614700565b82525050565b6000613daa826146b0565b613db481856146d3565b9350613dbf836146a0565b8060005b83811015613df0578151613dd78882613d5a565b9750613de2836146c6565b925050600181019050613dc3565b5085935050505092915050565b613e0681614724565b82525050565b613e1581614724565b82525050565b6000613e26826146bb565b613e3081856146e4565b9350613e408185602086016147b4565b80840191505092915050565b613e558161476c565b82525050565b6000613e686009836146ef565b91507f6e6f7420737461727400000000000000000000000000000000000000000000006000830152602082019050919050565b6000613ea86011836146ef565b91507f646966666963756c7479203d20747275650000000000000000000000000000006000830152602082019050919050565b6000613ee86017836146ef565b91507f6d756c7469706c69636174696f6e206f766572666c6f770000000000000000006000830152602082019050919050565b6000613f286020836146ef565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b6000613f686016836146ef565b91507f434f4e54524143545f494e49544544203d2074727565000000000000000000006000830152602082019050919050565b6000613fa86015836146ef565b91507f7265666572726572203d206164647265737328302900000000000000000000006000830152602082019050919050565b6000613fe86014836146ef565b91507f6163636f756e74203d20616464726573732830290000000000000000000000006000830152602082019050919050565b60006140286011836146ef565b91507f6164646974696f6e206f766572666c6f770000000000000000000000000000006000830152602082019050919050565b60006140686023836146ef565b91507f544f4b454e5f4d494e545f55534544203e3d20544f4b454e5f4d494e545f544f60008301527f54414c00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140ce6010836146ef565b91507f6469766973696f6e206279207a65726f000000000000000000000000000000006000830152602082019050919050565b600061410e602a836146ef565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006141746014836146ef565b91507f7375627472616374696f6e206f766572666c6f770000000000000000000000006000830152602082019050919050565b60006141b4601f836146ef565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b60006141f4600a836146ef565b91507f616d6f756e74203d2030000000000000000000000000000000000000000000006000830152602082019050919050565b60a08201600082015161423d600085018261428f565b506020820151614250602085018261428f565b506040820151614263604085018261428f565b5060608201516142766060850182613dfd565b506080820151614289608085018261428f565b50505050565b61429881614750565b82525050565b6142a781614750565b82525050565b60006142b98284613e1b565b915081905092915050565b60006020820190506142d96000830184613d90565b92915050565b60006020820190506142f46000830184613d81565b92915050565b600060408201905061430f6000830185613d72565b61431c602083018461429e565b9392505050565b60006060820190506143386000830186613d90565b6143456020830185613d90565b614352604083018461429e565b949350505050565b600060408201905061436f6000830185613d90565b61437c602083018461429e565b9392505050565b6000602082019050818103600083015261439d8184613d9f565b905092915050565b60006020820190506143ba6000830184613e0c565b92915050565b60006060820190506143d56000830186613e0c565b6143e2602083018561429e565b6143ef6040830184613d90565b949350505050565b600060208201905061440c6000830184613e4c565b92915050565b6000602082019050818103600083015261442b81613e5b565b9050919050565b6000602082019050818103600083015261444b81613e9b565b9050919050565b6000602082019050818103600083015261446b81613edb565b9050919050565b6000602082019050818103600083015261448b81613f1b565b9050919050565b600060208201905081810360008301526144ab81613f5b565b9050919050565b600060208201905081810360008301526144cb81613f9b565b9050919050565b600060208201905081810360008301526144eb81613fdb565b9050919050565b6000602082019050818103600083015261450b8161401b565b9050919050565b6000602082019050818103600083015261452b8161405b565b9050919050565b6000602082019050818103600083015261454b816140c1565b9050919050565b6000602082019050818103600083015261456b81614101565b9050919050565b6000602082019050818103600083015261458b81614167565b9050919050565b600060208201905081810360008301526145ab816141a7565b9050919050565b600060208201905081810360008301526145cb816141e7565b9050919050565b60006020820190506145e7600083018461429e565b92915050565b6000604082019050614602600083018561429e565b61460f6020830184613e0c565b9392505050565b600060408201905061462b600083018561429e565b614638602083018461429e565b9392505050565b600060c082019050614654600083018961429e565b614661602083018861429e565b61466e6040830187613e0c565b61467b606083018661429e565b614688608083018561429e565b61469560a083018461429e565b979650505050505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061470b82614730565b9050919050565b600061471d82614730565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061476582614790565b9050919050565b60006147778261477e565b9050919050565b600061478982614730565b9050919050565b600061479b826147a2565b9050919050565b60006147ad82614730565b9050919050565b60005b838110156147d25780820151818401526020810190506147b7565b838111156147e1576000848401525b50505050565b6147f081614700565b81146147fb57600080fd5b50565b61480781614712565b811461481257600080fd5b50565b61481e81614724565b811461482957600080fd5b50565b61483581614750565b811461484057600080fd5b5056fea2646970667358221220f88b454dbd078dcab0b74837da64ae557f7ec986964fd1e86513d16a941a68b364736f6c634300060c0033

Deployed Bytecode Sourcemap

9489:13018:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11973:8;;;9489:13018;;;;16253:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;11141:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20484:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10498:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10457:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10549:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11094:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19137:935;;;;;;;;;;;;;:::i;:::-;;18129:1000;;;;;;;;;;;;;:::i;:::-;;21223:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11236:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10856:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;11185:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20835:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10900:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;20591:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9588:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17690:431;;;;;;;;;;;;;:::i;:::-;;12894:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16499:1183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10799:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;10657:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10948:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9691:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10601:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10997:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10745:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22094:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21703:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20198:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22289:215;;;;;;;;;;;;;:::i;:::-;;20080:110;;;;;;;;;;;;;:::i;:::-;;21461:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11045:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16082:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21901:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16253:238;16348:7;16357;16382:16;;:::i;:::-;16401:5;:14;16407:7;16401:14;;;;;;;;;;;;;;;16382:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16436:4;:15;;;:22;16460:4;:15;;;:22;16428:55;;;;;16253:238;;;:::o;11141:35::-;;;;;;;;;;;;;:::o;20484:99::-;20528:7;20555:20;;20548:27;;20484:99;:::o;10498:44::-;;;;:::o;10457:34::-;;;;:::o;10549:45::-;;;;:::o;11094:40::-;;;;;;;;;;;;;:::o;19137:935::-;11735:19;;11717:15;:37;11709:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;19188:14:::1;19205:5;:17;19211:10;19205:17;;;;;;;;;;;;;;;19188:34;;19258:36;19283:1;:10;;;19258:20;;:24;;:36;;;;:::i;:::-;19235:20;:59;;;;19347:90;19417:19;19425:10;19417:7;:19::i;:::-;19347:7;:19;19355:10;19347:19;;;;;;;;;;;;;;;:51;;;:69;;:90;;;;:::i;:::-;19307:7;:19;19315:10;19307:19;;;;;;;;;;;;;;;:37;;:130;;;;19490:1;19450:7;:19;19458:10;19450:19;;;;;;;;;;;;;;;:37;;:41;;;;19531:4;19502:7;:19;19510:10;19502:19;;;;;;;;;;;;;;;:26;;;:33;;;;;;;;;;;;;;;;;;19553:9;19548:157;19572:1;:10;;:17;;;;19568:1;:21;19548:157;;;19634:4;19611:1;:10;;19622:1;19611:13;;;;;;;;;;;;;;;;;;:20;;;:27;;;;;;;;;;;;;;;;;;19678:15;19653:1;:10;;19664:1;19653:13;;;;;;;;;;;;;;;;;;:22;;:40;;;;19591:3;;;;;;;19548:157;;;;19718:18;19739:75;19800:3;19739:42;19754:26;;19739:1;:10;;;:14;;:42;;;;:::i;:::-;:46;;:75;;;;:::i;:::-;19718:96;;19825:14;19842:26;19857:10;19842:1;:10;;;:14;;:26;;;;:::i;:::-;19825:43;;19881:42;19904:10;19916:6;19881:9;;;;;;;;;;;:22;;;;:42;;;;;:::i;:::-;19934:55;19957:19;;;;;;;;;;;19978:10;19934:9;;;;;;;;;;;:22;;;;:55;;;;;:::i;:::-;20018:10;20007:30;;;20030:6;20007:30;;;;;;:::i;:::-;;;;;;;;20063:1;20050;:10;;:14;;;;11779:1;;;19137:935::o:0;18129:1000::-;11735:19;;11717:15;:37;11709:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;18181:20:::1;18212:19:::0;18259::::1;18267:10;18259:7;:19::i;:::-;18244:34;;18295:7;:19;18303:10;18295:19;;;;;;;;;;;;;;;:26;;;;;;;;;;;;18291:313;;;18367:5;18338:7;:19;18346:10;18338:19;;;;;;;;;;;;;;;:26;;;:34;;;;;;;;;;;;;;;;;;18427:1;18387:7;:19;18395:10;18387:19;;;;;;;;;;;;;;;:37;;:41;;;;18291:313;;;18501:91;18579:12;18501:7;:19;18509:10;18501:19;;;;;;;;;;;;;;;:55;;;:77;;:91;;;;:::i;:::-;18461:7;:19;18469:10;18461:19;;;;;;;;;;;;;;;:37;;:131;;;;18291:313;18630:12;18616:26;;18673:1;18659:11;:15;18655:467;;;18730:7;:19;18738:10;18730:19;;;;;;;;;;;;;;;:55;;;18691:7;:19;18699:10;18691:19;;;;;;;;;;;;;;;:36;;:94;;;;18818:32;18838:11;18818:15;;:19;;:32;;;;:::i;:::-;18800:15;:50;;;;18903:88;18979:11;18903:7;:19;18911:10;18903:19;;;;;;;;;;;;;;;:53;;;:75;;:88;;;;:::i;:::-;18865:7;:19;18873:10;18865:19;;;;;;;;;;;;;;;:35;;:126;;;;19008:49;19033:10;19045:11;19008;::::0;::::1;;;;;;;;:24;;;;:49;;;;;:::i;:::-;19086:10;19077:33;;;19098:11;19077:33;;;;;;:::i;:::-;;;;;;;;18655:467;11779:1;;18129:1000::o:0;21223:230::-;11627:18;;;;;;;;;;;11613:32;;:10;:32;;;11605:41;;;;;;21329:7:::1;21302:24;:34;;;;21431:3;21371:56;21400:26;;21371:24;;:28;;:56;;;;:::i;:::-;:63;;21349:96;;;::::0;::::1;;21223:230:::0;:::o;11236:56::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10856:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11185:44::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20835:380::-;20929:7;11627:18;;;;;;;;;;;11613:32;;:10;:32;;;11605:41;;;;;;20988:5:::1;20962:31;;:12;:15;20975:1;20962:15;;;;;;;;;;;:22;;;;;;;;;;;;:31;;;20954:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21028:15;21049:1;21028:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21098:33;;;;;;;;21109:15;21098:33;;;;21126:4;21098:33;;;;::::0;21062:12:::1;:33;21075:19;;21062:33;;;;;;;;;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21164:1;21142:19;:23;;;;21185:15;:22;;;;21178:29;;20835:380:::0;;;:::o;10900:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20591:236::-;20697:7;11735:19;;11717:15;:37;11709:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;20749:1:::1;20730:21;;:7;:21;;;;20722:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;20796:5;:14;20802:7;20796:14;;;;;;;;;;;;;;;:23;;;20789:30;;20591:236:::0;;;:::o;9588:94::-;;;;;;;;;;;;:::o;17690:431::-;11735:19;;11717:15;:37;11709:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;17741:19:::1;17787:29;17805:10;17787:17;:29::i;:::-;17773:43;;17847:1;17833:11;:15;17829:285;;;17885:34;17907:11;17885:5;:17;17891:10;17885:17;;;;;;;;;;;;;;;;:21;;:34;;;;:::i;:::-;17865:5;:17;17871:10;17865:17;;;;;;;;;;;;;;;:54;;;;17952:32;17972:11;17952:15;;:19;;:32;;;;:::i;:::-;17934:15;:50;;;;18001:49;18026:10;18038:11;18001;::::0;::::1;;;;;;;;:24;;;;:49;;;;;:::i;:::-;18078:10;18070:32;;;18090:11;18070:32;;;;;;:::i;:::-;;;;;;;;17829:285;11779:1;17690:431::o:0;12894:497::-;11735:19;;11717:15;:37;11709:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;13032:1:::1;13012:22;;:8;:22;;;;13004:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;13088:1;13079:6;:10;13071:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;13117:61;13144:10;13164:4;13171:6;13117:9;;;;;;;;;;;:26;;;;:61;;;;;;:::i;:::-;13191:18;13212:45;13253:3;13212:36;13223:24;;13212:6;:10;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;13191:66;;13268:55;13291:19;;;;;;;;;;;13312:10;13268:9;;;;;;;;;;;:22;;;;:55;;;;;:::i;:::-;13336:47;13338:10;13350:22;13361:10;13350:6;:10;;:22;;;;:::i;:::-;13374:8;13336:1;:47::i;:::-;11779:1;12894:497:::0;;:::o;16499:1183::-;16613:7;11735:19;;11717:15;:37;11709:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;16665:1:::1;16646:21;;:7;:21;;;;16638:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;16705:21;16737::::0;16771:16:::1;;:::i;:::-;16790:5;:14;16796:7;16790:14;;;;;;;;;;;;;;;16771:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;16822:9;16817:387;16841:4;:15;;;:22;16837:1;:26;16817:387;;;16885:20;16920::::0;16943:7:::1;:27;16951:4;:15;;;16967:1;16951:18;;;;;;;;;;;;;;16943:27;;;;;;;;;;;;;;;:43;;;16920:66;;17018:45;17050:12;17018:27;17026:4;:15;;;17042:1;17026:18;;;;;;;;;;;;;;17018:7;:27::i;:::-;:31;;:45;;;;:::i;:::-;17003:60;;17094:98;17130:47;17173:3;17130:38;17147:17;17165:1;17147:20;;;;;;;;;;;;;;;;17130:12;:16;;:38;;;;:::i;:::-;:42;;:47;;;;:::i;:::-;17094:13;:17;;:98;;;;:::i;:::-;17078:114;;16817:387;;16865:3;;;;;;;16817:387;;;;17221:9;17216:387;17240:4;:15;;;:22;17236:1;:26;17216:387;;;17284:20;17319::::0;17342:7:::1;:27;17350:4;:15;;;17366:1;17350:18;;;;;;;;;;;;;;17342:27;;;;;;;;;;;;;;;:43;;;17319:66;;17417:45;17449:12;17417:27;17425:4;:15;;;17441:1;17425:18;;;;;;;;;;;;;;17417:7;:27::i;:::-;:31;;:45;;;;:::i;:::-;17402:60;;17493:98;17529:47;17572:3;17529:38;17546:17;17564:1;17546:20;;;;;;;;;;;;;;;;17529:12;:16;;:38;;;;:::i;:::-;:42;;:47;;;;:::i;:::-;17493:13;:17;;:98;;;;:::i;:::-;17477:114;;17216:387;;17264:3;;;;;;;17216:387;;;;17622:52;17659:5;:14;17665:7;17659:14;;;;;;;;;;;;;;;;17622:32;17640:13;17622;:17;;:32;;;;:::i;:::-;:36;;:52;;;;:::i;:::-;17615:59;;;;;16499:1183:::0;;;:::o;10799:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10657:34::-;;;;:::o;10948:40::-;;;;;;;;;;;;;;;;;:::o;9691:92::-;;;;;;;;;;;;;:::o;10601:49::-;;;;:::o;10997:41::-;;;;;;;;;;;;;:::o;10745:45::-;;;;:::o;22094:187::-;11627:18;;;;;;;;;;;11613:32;;:10;:32;;;11605:41;;;;;;22204:1:::1;22185:21;;:7;:21;;;;22177:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;22266:7;22244:19;;:29;;;;;;;;;;;;;;;;;;22094:187:::0;:::o;21703:190::-;11627:18;;;;;;;;;;;11613:32;;:10;:32;;;11605:41;;;;;;21810:1:::1;21791:21;;:7;:21;;;;21783:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;21878:7;21850:25;;:35;;;;;;;;;;;;;;;;;;21703:190:::0;:::o;20198:278::-;20307:16;11735:19;;11717:15;:37;11709:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;20368:1:::1;20349:21;;:7;:21;;;;20341:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;20408:13;;:::i;:::-;20424:5;:14;20430:7;20424:14;;;;;;;;;;;;;;;20408:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;20458:1;:10;;;20451:17;;;20198:278:::0;;;:::o;22289:215::-;11627:18;;;;;;;;;;;11613:32;;:10;:32;;;11605:41;;;;;;22367:5:::1;22348:24;;:15;;;;;;;;;;;:24;;;22340:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;22412:11;::::0;::::1;;;;;;;;:16;;;22437:4;22444:16;;22412:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22492:4;22474:15;;:22;;;;;;;;;;;;;;;;;;22289:215::o:0;20080:110::-;11735:19;;11717:15;:37;11709:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;20129:10:::1;:8;:10::i;:::-;20150;:8;:10::i;:::-;20171:11;:9;:11::i;:::-;20080:110::o:0;21461:234::-;11627:18;;;;;;;;;;;11613:32;;:10;:32;;;11605:41;;;;;;21571:7:::1;21542:26;:36;;;;21673:3;21613:56;21642:26;;21613:24;;:28;;:56;;;;:::i;:::-;:63;;21591:96;;;::::0;::::1;;21461:234:::0;:::o;11045:42::-;;;;;;;;;;;;;:::o;16082:163::-;16189:7;11735:19;;11717:15;:37;11709:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;16221:16:::1;16229:7;16221;:16::i;:::-;16214:23;;16082:163:::0;;;:::o;21901:185::-;11627:18;;;;;;;;;;;11613:32;;:10;:32;;;11605:41;;;;;;22010:1:::1;21991:21;;:7;:21;;;;21983:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;22071:7;22050:18;;:28;;;;;;;;;;;;;;;;;;21901:185:::0;:::o;1272:172::-;1330:7;1363:1;1358;:6;;1350:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;1400:9;1416:1;1412;:5;1400:17;;1435:1;1428:8;;;1272:172;;;;:::o;14911:1163::-;14968:7;15015:1;14996:21;;:7;:21;;;;14988:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;15093:16;;15075:15;;:34;15053:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;15185:13;;:::i;:::-;15201:5;:14;15207:7;15201:14;;;;;;;;;;;;;;;15185:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15228:20;15266:9;15278:1;15266:13;;15261:252;15285:1;:10;;;:17;15281:1;:21;15261:252;;;15324:16;;:::i;:::-;15343:1;:10;;;15354:1;15343:13;;;;;;;;;;;;;;15324:32;;15377:1;:8;;;15373:57;;;15406:8;;;15373:57;15461:40;15478:22;15498:1;15478:19;:22::i;:::-;15461:12;:16;;:40;;;;:::i;:::-;15446:55;;15261:252;;15304:3;;;;;;;15261:252;;;;15540:24;15557:6;15540:12;:16;;:24;;;;:::i;:::-;15525:39;;15590:147;15621:105;15678:7;:16;15686:7;15678:16;;;;;;;;;;;;;;;:33;;;15621:7;:16;15629:7;15621:16;;;;;;;;;;;;;;;:34;;;:38;;:105;;;;:::i;:::-;15590:12;:16;;:147;;;;:::i;:::-;15575:162;;15765:52;15782:7;:16;15790:7;15782:16;;;;;;;;;;;;;;;:34;;;15765:12;:16;;:52;;;;:::i;:::-;15750:67;;15870:16;;15834:33;15854:12;15834:15;;:19;;:33;;;;:::i;:::-;:52;15830:205;;;15918:105;15953:55;15991:16;;15953:33;15973:12;15953:15;;:19;;:33;;;;:::i;:::-;:37;;:55;;;;:::i;:::-;15918:12;:16;;:105;;;;:::i;:::-;15903:120;;15830:205;16054:12;16047:19;;;;14911:1163;;;:::o;1095:169::-;1153:7;1173:9;1189:1;1185;:5;1173:17;;1214:1;1209;:6;;1201:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;1255:1;1248:8;;;1095:169;;;;:::o;1686:240::-;1744:7;1773:1;1768;:6;1764:47;;;1798:1;1791:8;;;;1764:47;1823:9;1839:1;1835;:5;1823:17;;1868:1;1863;1859;:5;;;;;;:10;1851:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1917:1;1910:8;;;1686:240;;;;;:::o;1934:167::-;1992:7;2024:1;2020;:5;2012:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;2057:9;2073:1;2069;:5;;;;;;2057:17;;2092:1;2085:8;;;1934:167;;;;:::o;5605:247::-;5722:122;5755:5;5798:23;;;5823:2;5827:5;5775:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5722:18;:122::i;:::-;5605:247;;;:::o;5860:284::-;6004:132;6037:5;6080:27;;;6109:4;6115:2;6119:5;6057:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6004:18;:132::i;:::-;5860:284;;;;:::o;11997:889::-;12129:7;12117:19;;:8;:19;;;12113:88;;;12164:25;;;;;;;;;;;12153:36;;12113:88;12242:5;12217:30;;:5;:14;12223:7;12217:14;;;;;;;;;;;;;;;:21;;;;;;;;;;;;:30;;;12213:225;;;12290:8;12264:5;:14;12270:7;12264:14;;;;;;;;;;;;;;;:23;;;:34;;;;;;;;;;;;;;;;;;12315:5;:15;12321:8;12315:15;;;;;;;;;;;;;;;:26;;12347:7;12315:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12370:5;:31;12376:5;:15;12382:8;12376:15;;;;;;;;;;;;;;;:24;;;;;;;;;;;;12370:31;;;;;;;;;;;;;;;:42;;12418:7;12370:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12213:225;12450:5;:14;12456:7;12450:14;;;;;;;;;;;;;;;:23;;12493:63;;;;;;;;12501:19;;12493:63;;;;12522:6;12493:63;;;;12530:15;12493:63;;;;12547:5;12493:63;;;;;;12554:1;12493:63;;;12450:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12604:35;12632:6;12604:5;:14;12610:7;12604:14;;;;;;;;;;;;;;;:23;;;:27;;:35;;;;:::i;:::-;12578:5;:14;12584:7;12578:14;;;;;;;;;;;;;;;:23;;:61;;;;12673:32;12698:6;12673:20;;:24;;:32;;;;:::i;:::-;12650:20;:55;;;;12740:4;12716:5;:14;12722:7;12716:14;;;;;;;;;;;;;;;:21;;;:28;;;;;;;;;;;;;;;;;;12761:7;:19;12769:10;12761:19;;;;;;;;;;;;;;;:26;;;;;;;;;;;;12757:70;;;12804:11;:9;:11::i;:::-;12757:70;12852:7;12844:34;;;12861:8;12871:6;12844:34;;;;;;;:::i;:::-;;;;;;;;11997:889;;;:::o;13399:1504::-;13496:7;13521:20;13552:19;13574:1;:13;;;13552:35;;13629:1;13604:15;:22;;;;:26;13600:1027;;;13647:23;13694:9;13689:217;13713:15;:22;;;;13709:1;:26;13689:217;;;13787:1;:12;;;13765:15;13781:1;13765:18;;;;;;;;;;;;;;;;:34;13761:130;;;13842:1;13824:19;;13866:5;;13761:130;13737:3;;;;;;;13689:217;;;;13927:9;13939:15;13927:27;;13922:694;13960:15;:22;;;;13956:1;:26;13922:694;;;14012:12;:32;14025:15;14041:1;14025:18;;;;;;;;;;;;;;;;14012:32;;;;;;;;;;;:39;;;;;;;;;;;;14008:593;;;14091:411;14134:345;14177:275;14448:3;14177:232;14390:15;14406:1;14390:18;;;;;;;;;;;;;;;;14177:174;14341:9;14177:125;14290:11;14177:12;:32;14190:15;14206:1;14190:18;;;;;;;;;;;;;;;;14177:32;;;;;;;;;;;:74;;;:112;;:125;;;;:::i;:::-;:163;;:174;;;;:::i;:::-;:212;;:232;;;;:::i;:::-;:270;;:275;;;;:::i;:::-;14134:1;:8;;;:12;;:345;;;;:::i;:::-;14091:12;:16;;:411;;;;:::i;:::-;14076:426;;14541:12;:32;14554:15;14570:1;14554:18;;;;;;;;;;;;;;;;14541:32;;;;;;;;;;;:40;;;14527:54;;14008:593;13984:3;;;;;;;13922:694;;;;13600:1027;;14654:209;14685:167;14848:3;14685:140;14805:19;;14685:97;14734:47;14771:9;14734:32;14754:11;14734:15;:19;;:32;;;;:::i;:::-;:36;;:47;;;;:::i;:::-;14685:1;:26;;;:48;;:97;;;;:::i;:::-;:119;;:140;;;;:::i;:::-;:162;;:167;;;;:::i;:::-;14654:12;:16;;:209;;;;:::i;:::-;14639:224;;14883:12;14876:19;;;;13399:1504;;;:::o;8215:1176::-;8819:27;8827:5;8819:25;;;:27::i;:::-;8811:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8956:12;8970:23;9005:5;8997:19;;9017:4;8997:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8955:67;;;;9041:7;9033:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;9122:1;9102:10;:17;:21;9098:286;;;9275:10;9264:30;;;;;;;;;;;;:::i;:::-;9238:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;9098:286;8215:1176;;;;:::o;2762:850::-;2822:4;3275:16;3310:19;3342:66;3310:98;;;;3524:7;3512:20;3500:32;;3573:3;3561:15;;:8;:15;;:42;;;;;3592:11;3580:8;:23;;3561:42;3553:51;;;;2762:850;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;142:146::-;;230:6;217:20;208:29;;242:41;277:5;242:41;:::i;:::-;202:86;;;;:::o;295:128::-;;376:6;370:13;361:22;;388:30;412:5;388:30;:::i;:::-;355:68;;;;:::o;430:130::-;;510:6;497:20;488:29;;522:33;549:5;522:33;:::i;:::-;482:78;;;;:::o;567:241::-;;671:2;659:9;650:7;646:23;642:32;639:2;;;687:1;684;677:12;639:2;722:1;739:53;784:7;775:6;764:9;760:22;739:53;:::i;:::-;729:63;;701:97;633:175;;;;:::o;815:257::-;;927:2;915:9;906:7;902:23;898:32;895:2;;;943:1;940;933:12;895:2;978:1;995:61;1048:7;1039:6;1028:9;1024:22;995:61;:::i;:::-;985:71;;957:105;889:183;;;;:::o;1079:257::-;;1191:2;1179:9;1170:7;1166:23;1162:32;1159:2;;;1207:1;1204;1197:12;1159:2;1242:1;1259:61;1312:7;1303:6;1292:9;1288:22;1259:61;:::i;:::-;1249:71;;1221:105;1153:183;;;;:::o;1343:241::-;;1447:2;1435:9;1426:7;1422:23;1418:32;1415:2;;;1463:1;1460;1453:12;1415:2;1498:1;1515:53;1560:7;1551:6;1540:9;1536:22;1515:53;:::i;:::-;1505:63;;1477:97;1409:175;;;;:::o;1591:366::-;;;1712:2;1700:9;1691:7;1687:23;1683:32;1680:2;;;1728:1;1725;1718:12;1680:2;1763:1;1780:53;1825:7;1816:6;1805:9;1801:22;1780:53;:::i;:::-;1770:63;;1742:97;1870:2;1888:53;1933:7;1924:6;1913:9;1909:22;1888:53;:::i;:::-;1878:63;;1849:98;1674:283;;;;;:::o;1965:269::-;;2100:94;2190:3;2182:6;2100:94;:::i;:::-;2223:4;2218:3;2214:14;2200:28;;2093:141;;;;:::o;2242:142::-;2333:45;2372:5;2333:45;:::i;:::-;2328:3;2321:58;2315:69;;:::o;2391:137::-;2490:32;2516:5;2490:32;:::i;:::-;2485:3;2478:45;2472:56;;:::o;2535:113::-;2618:24;2636:5;2618:24;:::i;:::-;2613:3;2606:37;2600:48;;:::o;2726:882::-;;2919:78;2991:5;2919:78;:::i;:::-;3010:110;3113:6;3108:3;3010:110;:::i;:::-;3003:117;;3141:80;3215:5;3141:80;:::i;:::-;3241:7;3269:1;3254:332;3279:6;3276:1;3273:13;3254:332;;;3346:6;3340:13;3367:111;3474:3;3459:13;3367:111;:::i;:::-;3360:118;;3495:84;3572:6;3495:84;:::i;:::-;3485:94;;3311:275;3301:1;3298;3294:9;3289:14;;3254:332;;;3258:14;3599:3;3592:10;;2898:710;;;;;;;:::o;3616:94::-;3683:21;3698:5;3683:21;:::i;:::-;3678:3;3671:34;3665:45;;:::o;3717:104::-;3794:21;3809:5;3794:21;:::i;:::-;3789:3;3782:34;3776:45;;:::o;3828:356::-;;3956:38;3988:5;3956:38;:::i;:::-;4006:88;4087:6;4082:3;4006:88;:::i;:::-;3999:95;;4099:52;4144:6;4139:3;4132:4;4125:5;4121:16;4099:52;:::i;:::-;4172:6;4167:3;4163:16;4156:23;;3936:248;;;;;:::o;4191:152::-;4287:50;4331:5;4287:50;:::i;:::-;4282:3;4275:63;4269:74;;:::o;4351:308::-;;4511:66;4575:1;4570:3;4511:66;:::i;:::-;4504:73;;4610:11;4606:1;4601:3;4597:11;4590:32;4650:2;4645:3;4641:12;4634:19;;4497:162;;;:::o;4668:317::-;;4828:67;4892:2;4887:3;4828:67;:::i;:::-;4821:74;;4928:19;4924:1;4919:3;4915:11;4908:40;4976:2;4971:3;4967:12;4960:19;;4814:171;;;:::o;4994:323::-;;5154:67;5218:2;5213:3;5154:67;:::i;:::-;5147:74;;5254:25;5250:1;5245:3;5241:11;5234:46;5308:2;5303:3;5299:12;5292:19;;5140:177;;;:::o;5326:332::-;;5486:67;5550:2;5545:3;5486:67;:::i;:::-;5479:74;;5586:34;5582:1;5577:3;5573:11;5566:55;5649:2;5644:3;5640:12;5633:19;;5472:186;;;:::o;5667:322::-;;5827:67;5891:2;5886:3;5827:67;:::i;:::-;5820:74;;5927:24;5923:1;5918:3;5914:11;5907:45;5980:2;5975:3;5971:12;5964:19;;5813:176;;;:::o;5998:321::-;;6158:67;6222:2;6217:3;6158:67;:::i;:::-;6151:74;;6258:23;6254:1;6249:3;6245:11;6238:44;6310:2;6305:3;6301:12;6294:19;;6144:175;;;:::o;6328:320::-;;6488:67;6552:2;6547:3;6488:67;:::i;:::-;6481:74;;6588:22;6584:1;6579:3;6575:11;6568:43;6639:2;6634:3;6630:12;6623:19;;6474:174;;;:::o;6657:317::-;;6817:67;6881:2;6876:3;6817:67;:::i;:::-;6810:74;;6917:19;6913:1;6908:3;6904:11;6897:40;6965:2;6960:3;6956:12;6949:19;;6803:171;;;:::o;6983:372::-;;7143:67;7207:2;7202:3;7143:67;:::i;:::-;7136:74;;7243:34;7239:1;7234:3;7230:11;7223:55;7312:5;7307:2;7302:3;7298:12;7291:27;7346:2;7341:3;7337:12;7330:19;;7129:226;;;:::o;7364:316::-;;7524:67;7588:2;7583:3;7524:67;:::i;:::-;7517:74;;7624:18;7620:1;7615:3;7611:11;7604:39;7671:2;7666:3;7662:12;7655:19;;7510:170;;;:::o;7689:379::-;;7849:67;7913:2;7908:3;7849:67;:::i;:::-;7842:74;;7949:34;7945:1;7940:3;7936:11;7929:55;8018:12;8013:2;8008:3;8004:12;7997:34;8059:2;8054:3;8050:12;8043:19;;7835:233;;;:::o;8077:320::-;;8237:67;8301:2;8296:3;8237:67;:::i;:::-;8230:74;;8337:22;8333:1;8328:3;8324:11;8317:43;8388:2;8383:3;8379:12;8372:19;;8223:174;;;:::o;8406:331::-;;8566:67;8630:2;8625:3;8566:67;:::i;:::-;8559:74;;8666:33;8662:1;8657:3;8653:11;8646:54;8728:2;8723:3;8719:12;8712:19;;8552:185;;;:::o;8746:310::-;;8906:67;8970:2;8965:3;8906:67;:::i;:::-;8899:74;;9006:12;9002:1;8997:3;8993:11;8986:33;9047:2;9042:3;9038:12;9031:19;;8892:164;;;:::o;9129:941::-;9260:4;9255:3;9251:14;9349:4;9342:5;9338:16;9332:23;9361:63;9418:4;9413:3;9409:14;9395:12;9361:63;:::i;:::-;9280:150;9505:4;9498:5;9494:16;9488:23;9517:63;9574:4;9569:3;9565:14;9551:12;9517:63;:::i;:::-;9440:146;9666:4;9659:5;9655:16;9649:23;9678:63;9735:4;9730:3;9726:14;9712:12;9678:63;:::i;:::-;9596:151;9822:4;9815:5;9811:16;9805:23;9834:57;9885:4;9880:3;9876:14;9862:12;9834:57;:::i;:::-;9757:140;9974:4;9967:5;9963:16;9957:23;9986:63;10043:4;10038:3;10034:14;10020:12;9986:63;:::i;:::-;9907:148;9233:837;;;:::o;10077:103::-;10150:24;10168:5;10150:24;:::i;:::-;10145:3;10138:37;10132:48;;:::o;10187:113::-;10270:24;10288:5;10270:24;:::i;:::-;10265:3;10258:37;10252:48;;:::o;10307:271::-;;10460:93;10549:3;10540:6;10460:93;:::i;:::-;10453:100;;10570:3;10563:10;;10441:137;;;;:::o;10585:222::-;;10712:2;10701:9;10697:18;10689:26;;10726:71;10794:1;10783:9;10779:17;10770:6;10726:71;:::i;:::-;10683:124;;;;:::o;10814:254::-;;10957:2;10946:9;10942:18;10934:26;;10971:87;11055:1;11044:9;11040:17;11031:6;10971:87;:::i;:::-;10928:140;;;;:::o;11075:349::-;;11238:2;11227:9;11223:18;11215:26;;11252:79;11328:1;11317:9;11313:17;11304:6;11252:79;:::i;:::-;11342:72;11410:2;11399:9;11395:18;11386:6;11342:72;:::i;:::-;11209:215;;;;;:::o;11431:444::-;;11614:2;11603:9;11599:18;11591:26;;11628:71;11696:1;11685:9;11681:17;11672:6;11628:71;:::i;:::-;11710:72;11778:2;11767:9;11763:18;11754:6;11710:72;:::i;:::-;11793;11861:2;11850:9;11846:18;11837:6;11793:72;:::i;:::-;11585:290;;;;;;:::o;11882:333::-;;12037:2;12026:9;12022:18;12014:26;;12051:71;12119:1;12108:9;12104:17;12095:6;12051:71;:::i;:::-;12133:72;12201:2;12190:9;12186:18;12177:6;12133:72;:::i;:::-;12008:207;;;;;:::o;12222:466::-;;12447:2;12436:9;12432:18;12424:26;;12497:9;12491:4;12487:20;12483:1;12472:9;12468:17;12461:47;12522:156;12673:4;12664:6;12522:156;:::i;:::-;12514:164;;12418:270;;;;:::o;12695:210::-;;12816:2;12805:9;12801:18;12793:26;;12830:65;12892:1;12881:9;12877:17;12868:6;12830:65;:::i;:::-;12787:118;;;;:::o;12912:432::-;;13089:2;13078:9;13074:18;13066:26;;13103:65;13165:1;13154:9;13150:17;13141:6;13103:65;:::i;:::-;13179:72;13247:2;13236:9;13232:18;13223:6;13179:72;:::i;:::-;13262;13330:2;13319:9;13315:18;13306:6;13262:72;:::i;:::-;13060:284;;;;;;:::o;13351:248::-;;13491:2;13480:9;13476:18;13468:26;;13505:84;13586:1;13575:9;13571:17;13562:6;13505:84;:::i;:::-;13462:137;;;;:::o;13606:416::-;;13806:2;13795:9;13791:18;13783:26;;13856:9;13850:4;13846:20;13842:1;13831:9;13827:17;13820:47;13881:131;14007:4;13881:131;:::i;:::-;13873:139;;13777:245;;;:::o;14029:416::-;;14229:2;14218:9;14214:18;14206:26;;14279:9;14273:4;14269:20;14265:1;14254:9;14250:17;14243:47;14304:131;14430:4;14304:131;:::i;:::-;14296:139;;14200:245;;;:::o;14452:416::-;;14652:2;14641:9;14637:18;14629:26;;14702:9;14696:4;14692:20;14688:1;14677:9;14673:17;14666:47;14727:131;14853:4;14727:131;:::i;:::-;14719:139;;14623:245;;;:::o;14875:416::-;;15075:2;15064:9;15060:18;15052:26;;15125:9;15119:4;15115:20;15111:1;15100:9;15096:17;15089:47;15150:131;15276:4;15150:131;:::i;:::-;15142:139;;15046:245;;;:::o;15298:416::-;;15498:2;15487:9;15483:18;15475:26;;15548:9;15542:4;15538:20;15534:1;15523:9;15519:17;15512:47;15573:131;15699:4;15573:131;:::i;:::-;15565:139;;15469:245;;;:::o;15721:416::-;;15921:2;15910:9;15906:18;15898:26;;15971:9;15965:4;15961:20;15957:1;15946:9;15942:17;15935:47;15996:131;16122:4;15996:131;:::i;:::-;15988:139;;15892:245;;;:::o;16144:416::-;;16344:2;16333:9;16329:18;16321:26;;16394:9;16388:4;16384:20;16380:1;16369:9;16365:17;16358:47;16419:131;16545:4;16419:131;:::i;:::-;16411:139;;16315:245;;;:::o;16567:416::-;;16767:2;16756:9;16752:18;16744:26;;16817:9;16811:4;16807:20;16803:1;16792:9;16788:17;16781:47;16842:131;16968:4;16842:131;:::i;:::-;16834:139;;16738:245;;;:::o;16990:416::-;;17190:2;17179:9;17175:18;17167:26;;17240:9;17234:4;17230:20;17226:1;17215:9;17211:17;17204:47;17265:131;17391:4;17265:131;:::i;:::-;17257:139;;17161:245;;;:::o;17413:416::-;;17613:2;17602:9;17598:18;17590:26;;17663:9;17657:4;17653:20;17649:1;17638:9;17634:17;17627:47;17688:131;17814:4;17688:131;:::i;:::-;17680:139;;17584:245;;;:::o;17836:416::-;;18036:2;18025:9;18021:18;18013:26;;18086:9;18080:4;18076:20;18072:1;18061:9;18057:17;18050:47;18111:131;18237:4;18111:131;:::i;:::-;18103:139;;18007:245;;;:::o;18259:416::-;;18459:2;18448:9;18444:18;18436:26;;18509:9;18503:4;18499:20;18495:1;18484:9;18480:17;18473:47;18534:131;18660:4;18534:131;:::i;:::-;18526:139;;18430:245;;;:::o;18682:416::-;;18882:2;18871:9;18867:18;18859:26;;18932:9;18926:4;18922:20;18918:1;18907:9;18903:17;18896:47;18957:131;19083:4;18957:131;:::i;:::-;18949:139;;18853:245;;;:::o;19105:416::-;;19305:2;19294:9;19290:18;19282:26;;19355:9;19349:4;19345:20;19341:1;19330:9;19326:17;19319:47;19380:131;19506:4;19380:131;:::i;:::-;19372:139;;19276:245;;;:::o;19528:222::-;;19655:2;19644:9;19640:18;19632:26;;19669:71;19737:1;19726:9;19722:17;19713:6;19669:71;:::i;:::-;19626:124;;;;:::o;19757:321::-;;19906:2;19895:9;19891:18;19883:26;;19920:71;19988:1;19977:9;19973:17;19964:6;19920:71;:::i;:::-;20002:66;20064:2;20053:9;20049:18;20040:6;20002:66;:::i;:::-;19877:201;;;;;:::o;20085:333::-;;20240:2;20229:9;20225:18;20217:26;;20254:71;20322:1;20311:9;20307:17;20298:6;20254:71;:::i;:::-;20336:72;20404:2;20393:9;20389:18;20380:6;20336:72;:::i;:::-;20211:207;;;;;:::o;20425:768::-;;20686:3;20675:9;20671:19;20663:27;;20701:71;20769:1;20758:9;20754:17;20745:6;20701:71;:::i;:::-;20783:72;20851:2;20840:9;20836:18;20827:6;20783:72;:::i;:::-;20866:66;20928:2;20917:9;20913:18;20904:6;20866:66;:::i;:::-;20943:72;21011:2;21000:9;20996:18;20987:6;20943:72;:::i;:::-;21026:73;21094:3;21083:9;21079:19;21070:6;21026:73;:::i;:::-;21110;21178:3;21167:9;21163:19;21154:6;21110:73;:::i;:::-;20657:536;;;;;;;;;:::o;21200:175::-;;21310:3;21302:11;;21348:4;21343:3;21339:14;21331:22;;21296:79;;;:::o;21382:161::-;;21515:5;21509:12;21499:22;;21480:63;;;:::o;21550:121::-;;21643:5;21637:12;21627:22;;21608:63;;;:::o;21678:132::-;;21800:4;21795:3;21791:14;21783:22;;21777:33;;;:::o;21818:202::-;;21972:6;21967:3;21960:19;22009:4;22004:3;22000:14;21985:29;;21953:67;;;;:::o;22029:144::-;;22164:3;22149:18;;22142:31;;;;:::o;22182:163::-;;22297:6;22292:3;22285:19;22334:4;22329:3;22325:14;22310:29;;22278:67;;;;:::o;22353:91::-;;22415:24;22433:5;22415:24;:::i;:::-;22404:35;;22398:46;;;:::o;22451:99::-;;22521:24;22539:5;22521:24;:::i;:::-;22510:35;;22504:46;;;:::o;22557:85::-;;22630:5;22623:13;22616:21;22605:32;;22599:43;;;:::o;22649:121::-;;22722:42;22715:5;22711:54;22700:65;;22694:76;;;:::o;22777:72::-;;22839:5;22828:16;;22822:27;;;:::o;22856:129::-;;22943:37;22974:5;22943:37;:::i;:::-;22930:50;;22924:61;;;:::o;22992:147::-;;23084:50;23128:5;23084:50;:::i;:::-;23071:63;;23065:74;;;:::o;23146:121::-;;23238:24;23256:5;23238:24;:::i;:::-;23225:37;;23219:48;;;:::o;23274:121::-;;23353:37;23384:5;23353:37;:::i;:::-;23340:50;;23334:61;;;:::o;23402:108::-;;23481:24;23499:5;23481:24;:::i;:::-;23468:37;;23462:48;;;:::o;23518:268::-;23583:1;23590:101;23604:6;23601:1;23598:13;23590:101;;;23680:1;23675:3;23671:11;23665:18;23661:1;23656:3;23652:11;23645:39;23626:2;23623:1;23619:10;23614:15;;23590:101;;;23706:6;23703:1;23700:13;23697:2;;;23771:1;23762:6;23757:3;23753:16;23746:27;23697:2;23567:219;;;;:::o;23794:117::-;23863:24;23881:5;23863:24;:::i;:::-;23856:5;23853:35;23843:2;;23902:1;23899;23892:12;23843:2;23837:74;:::o;23918:133::-;23995:32;24021:5;23995:32;:::i;:::-;23988:5;23985:43;23975:2;;24042:1;24039;24032:12;23975:2;23969:82;:::o;24058:111::-;24124:21;24139:5;24124:21;:::i;:::-;24117:5;24114:32;24104:2;;24160:1;24157;24150:12;24104:2;24098:71;:::o;24176:117::-;24245:24;24263:5;24245:24;:::i;:::-;24238:5;24235:35;24225:2;;24284:1;24281;24274:12;24225:2;24219:74;:::o

Swarm Source

ipfs://f88b454dbd078dcab0b74837da64ae557f7ec986964fd1e86513d16a941a68b3

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