ETH Price: $3,453.37 (-0.97%)
Gas: 2 Gwei

Contract

0xd95cd888D1d39F5fEE61e8E58072f70dcFF2b34D
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Unfreeze147642262022-05-13 0:27:45781 days ago1652401665IN
0xd95cd888...dcFF2b34D
0 ETH0.0100225870.93123019
Emergency Withdr...133281992021-09-30 16:49:221005 days ago1633020562IN
0xd95cd888...dcFF2b34D
0 ETH0.00461386112.10958174
Emergency Withdr...133281882021-09-30 16:45:161005 days ago1633020316IN
0xd95cd888...dcFF2b34D
0 ETH0.0046392379.41043735
Emergency Withdr...133281772021-09-30 16:43:211005 days ago1633020201IN
0xd95cd888...dcFF2b34D
0 ETH0.00468548101.95809551
Unfreeze133256182021-09-30 6:54:161005 days ago1632984856IN
0xd95cd888...dcFF2b34D
0 ETH0.0107654241.81461799
Withdraw Unfreez...133249392021-09-30 4:30:281006 days ago1632976228IN
0xd95cd888...dcFF2b34D
0 ETH0.0044712856.1755046
Withdraw Unfreez...133198602021-09-29 9:28:331006 days ago1632907713IN
0xd95cd888...dcFF2b34D
0 ETH0.0047682559.90648245
Unfreeze133174962021-09-29 0:34:301007 days ago1632875670IN
0xd95cd888...dcFF2b34D
0 ETH0.009781569.20694382
Withdraw Unfreez...133174712021-09-29 0:31:011007 days ago1632875461IN
0xd95cd888...dcFF2b34D
0 ETH0.00831422104.45668662
Withdraw Unfreez...133159312021-09-28 18:41:151007 days ago1632854475IN
0xd95cd888...dcFF2b34D
0 ETH0.0081856668.15596678
Unfreeze133141062021-09-28 11:57:431007 days ago1632830263IN
0xd95cd888...dcFF2b34D
0 ETH0.0101410466.50081275
Unfreeze133005112021-09-26 9:09:011009 days ago1632647341IN
0xd95cd888...dcFF2b34D
0 ETH0.0126989779.84971871
Unfreeze132984792021-09-26 1:21:221010 days ago1632619282IN
0xd95cd888...dcFF2b34D
0 ETH0.005747838.38597199
Unfreeze132980212021-09-25 23:38:131010 days ago1632613093IN
0xd95cd888...dcFF2b34D
0 ETH0.0087839534.11987497
Unfreeze132969322021-09-25 19:46:131010 days ago1632599173IN
0xd95cd888...dcFF2b34D
0 ETH0.0103616147.25248488
Set Exit132952572021-09-25 13:31:161010 days ago1632576676IN
0xd95cd888...dcFF2b34D
0 ETH0.0044617940.55186117
Claim132952552021-09-25 13:31:041010 days ago1632576664IN
0xd95cd888...dcFF2b34D
0 ETH0.0125140446.55331253
Unfreeze132918022021-09-25 0:52:071011 days ago1632531127IN
0xd95cd888...dcFF2b34D
0 ETH0.0058455941.35574395
Unfreeze132883392021-09-24 11:50:491011 days ago1632484249IN
0xd95cd888...dcFF2b34D
0 ETH0.0127228884.96138606
Unfreeze132745032021-09-22 8:28:241013 days ago1632299304IN
0xd95cd888...dcFF2b34D
0 ETH0.005598945.57437246
Unfreeze132738002021-09-22 5:48:581013 days ago1632289738IN
0xd95cd888...dcFF2b34D
0 ETH0.0069147148.91943575
Withdraw Unfreez...132737972021-09-22 5:48:251013 days ago1632289705IN
0xd95cd888...dcFF2b34D
0 ETH0.0042673953.61383518
Withdraw Unfreez...132711142021-09-21 19:49:291014 days ago1632253769IN
0xd95cd888...dcFF2b34D
0 ETH0.0088229895.08864298
Unfreeze132651102021-09-20 21:36:091015 days ago1632173769IN
0xd95cd888...dcFF2b34D
0 ETH0.0188821107.18478676
Unfreeze132592592021-09-19 23:43:371016 days ago1632095017IN
0xd95cd888...dcFF2b34D
0 ETH0.0089166358.05553414
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StakeAndYieldV2

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-05-25
*/

pragma solidity 0.6.12;

// SPDX-License-Identifier: MIT

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface StandardToken {
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function balanceOf(address account) external view returns (uint256);
}

interface IController {
    function withdrawETH(uint256 amount) external;
    function depositForStrategy(uint256 amount, address addr) external;
    function buyForStrategy(
        uint256 amount,
        address rewardToken,
        address recipient
    ) external;

    function sendExitToken(
        address user,
        uint256 amount
    ) external;

    function getStrategy(address vault) external view returns (address);
}

interface IStrategy {
    function getNextEpochTime() external view returns(uint256);
}

interface StakeAndYieldV1 {
    function users(address user) external view returns (
        uint256 balance,
        uint256 stakeType,
        uint256 paidReward,
        uint256 yieldPaidReward,
        uint256 paidRewardPerToken,
        uint256 yieldPaidRewardPerToken,
        uint256 withdrawable,
        uint256 withdrawableExit,
        uint256 withdrawTime,
        bool exit,
        uint256 exitStartTime,
        uint256 exitAmountTillNow,
        uint256 lastClaimTime
    );

    function userInfo(address account) external view returns(
        uint256[15] memory numbers,

        address rewardTokenAddress,
        address stakedTokenAddress,
        address controllerAddress,
        address strategyAddress,
        bool exit
    );
}

contract StakeAndYieldV2 is Ownable {
    uint256 constant STAKE = 1;
    uint256 constant YIELD = 2;
    uint256 constant BOTH = 3;

    uint256 public PERIOD = 7 days;

    uint256 public EPOCH_PERIOD = 24 hours;

    uint256 public EXIT_PERIOD = 75 days;

    uint256 public lastUpdateTime;
    uint256 public rewardRate;
    uint256 public rewardRateYield;

    uint256 public rewardTillNowPerToken = 0;
    uint256 public yieldRewardTillNowPerToken = 0;

    uint256 public _totalSupply = 27107222074668847534350;
    uint256 public _totalSupplyYield = 24018522600167288546949;

    uint256 public _totalYieldWithdrawed = 7614108146077065784600;
    uint256 public _totalExit = 0;

    // false: withdraw from YEARN and then pay the user
    // true: pay the user before withdrawing from YEARN
    bool public allowEmergencyWithdraw = false;

    uint256 public exitRewardDenominator = 2;

    IController public controller;

    address public operator;

    struct User {
        uint256 balance;
        uint256 stakeType;

        uint256 paidReward;
        uint256 yieldPaidReward;

        uint256 paidRewardPerToken;
        uint256 yieldPaidRewardPerToken;

        uint256 withdrawable;
        uint256 withdrawableExit;
        uint256 withdrawTime;

        bool exit;

        uint256 exitStartTime;
        uint256 exitAmountTillNow;

        uint256 lastClaimTime;
    }

    mapping (address => uint256) pendingEarneds;
    mapping (address => uint256) pendingEarnedYields;

    using SafeMath for uint256;

    mapping (address => User) public users;

    uint256 public lastUpdatedBlock;

    uint256 public periodFinish = 1621529382;

    uint256 public birthDate;

    uint256 public daoShare;
    address public daoWallet;

    bool public exitable;

    StandardToken public stakedToken;
    StandardToken public rewardToken;
    StandardToken public yieldRewardToken;

    address public oldContract;

    uint256 public totalExitRewards;
    uint256 public totalExitRewardsYield;

    event Deposit(address user, uint256 amount, uint256 stakeType);
    event Withdraw(address user, uint256 amount, uint256 stakeType);
    event Exit(address user, uint256 amount, uint256 stakeType);
    event Unfreeze(address user, uint256 amount, uint256 stakeType);
    event EmergencyWithdraw(address user, uint256 amount);
    event RewardClaimed(address user, uint256 amount, uint256 yieldAmount);

    //event Int(uint256 i);

    constructor (
        address _stakedToken,
        address _rewardToken,
        address _yieldRewardToken,
        uint256 _daoShare,
        address _daoWallet,
        address _controller,
        bool _exitable,
        address _oldContract
    ) public {
        stakedToken = StandardToken(_stakedToken);
        rewardToken = StandardToken(_rewardToken);
        yieldRewardToken = StandardToken(_yieldRewardToken);
        controller = IController(_controller);
        daoShare = _daoShare;
        daoWallet = _daoWallet;
        exitable = _exitable;

        operator = msg.sender;
        oldContract = _oldContract;
        birthDate = now;
    }

    modifier onlyOwnerOrController(){
        require(msg.sender == owner() ||
            msg.sender == address(controller) ||
            msg.sender == operator,
            "!ownerOrController"
        );
        _;
    }

    // imports the user from old contract if
    // its not imported yet
    modifier importUser(address account){
        if(oldContract != address(0)){
            if(users[account].stakeType==0){
                uint256 oldStakeType;
                bool oldExit;
                uint256[] memory ints = new uint256[](3);
                (
                    ,
                    oldStakeType,
                    ,,,,,,ints[2],oldExit,ints[0],,ints[1]
                ) = StakeAndYieldV1(oldContract).users(account);
                if(oldStakeType > 0){
                    //lastClaimTime should be < birthdate of new contract
                    require(ints[1] <= birthDate, "lastClaimTime > birthDate");
                    users[account].exit = oldExit;
                    users[account].exitStartTime = ints[0];
                    users[account].lastClaimTime = ints[1];
                    users[account].withdrawTime = ints[2];
                    loadOldUser(account);
                }
            }
        }
        _;
    }

    modifier updateReward(address account, uint256 stakeType) {
        
        if(users[account].balance > 0 || users[account].withdrawable > 0
            || users[account].withdrawableExit > 0
        ){
            stakeType = users[account].stakeType;
        }
        
        if (account != address(0)) {
            uint256 stakeEarned;
            uint256 stakeSubtract;

            (stakeEarned, stakeSubtract) = earned(account, STAKE);

            uint256 yieldEarned;
            uint256 yieldSubtract;

            (yieldEarned, yieldSubtract) = earned(account, YIELD);

            // sendReward(
            //     account,
            //     stakeEarned, stakeSubtract,
            //     yieldEarned, yieldSubtract
            // );

            if(yieldEarned > 0){
                pendingEarnedYields[account] = yieldEarned;
                totalExitRewardsYield += yieldSubtract;
            }
            if(stakeEarned > 0){
                pendingEarneds[account] = stakeEarned;
                totalExitRewards += stakeSubtract;
            }
        }
        
        rewardTillNowPerToken = rewardPerToken(STAKE);
        yieldRewardTillNowPerToken = rewardPerToken(YIELD);
        lastUpdateTime = lastTimeRewardApplicable();
        if (account != address(0)) {
            users[account].paidRewardPerToken = rewardTillNowPerToken;
            users[account].yieldPaidRewardPerToken = yieldRewardTillNowPerToken;
        }
        _;
    }

    function loadOldUser(address account) private{
            (
                users[account].balance,
                users[account].stakeType,
                , //paidReward,
                users[account].yieldPaidReward,
                ,//paidRewardPerToken,
                users[account].yieldPaidRewardPerToken,
                users[account].withdrawable,
                ,//withdrawableExit,
                ,//withdrawTime,
                ,//exit,
                ,//exitStartTime,
                ,//exitAmountTillNow,
                //lastClaimTime
            ) = StakeAndYieldV1(oldContract).users(account);
    }

    function setDaoWallet(address _daoWallet) public onlyOwner {
        daoWallet = _daoWallet;
    }

    function setDaoShare(uint256 _daoShare) public onlyOwner {
        daoShare = _daoShare;
    }

    function setExitPeriod(uint256 period) public onlyOwner {
        EXIT_PERIOD = period;
    }

    function setOperator(address _addr) public onlyOwner{
        operator = _addr;
    }

    function setPeriods(uint256 period, uint256 epochPeriod, uint256 _birthDate) public onlyOwner{
        PERIOD = period;
        EPOCH_PERIOD = epochPeriod;
        birthDate = _birthDate;
    }

    function setRewardInfo(
        uint256 _lastUpdateTime,
        uint256 _rewardRate,
        uint256 _rewardRateYield,

        uint256 _rewardTillNowPerToken,
        uint256 _yieldRewardTillNowPerToken
    ) public onlyOwner{
        lastUpdateTime = _lastUpdateTime;
        rewardRate = _rewardRate;
        rewardRateYield = _rewardRateYield;

        rewardTillNowPerToken = _rewardTillNowPerToken;
        yieldRewardTillNowPerToken = _yieldRewardTillNowPerToken;
    }

    function withdrawToBurn() public onlyOwner{
        stakedToken.transfer(
            msg.sender,
            _totalExit
        );
        _totalExit = 0;
    }

    function earned(address account, uint256 stakeType) public view returns(uint256, uint256) {
        User storage user = users[account];

        uint256 paidPerToken = stakeType == STAKE ? 
            user.paidRewardPerToken : user.yieldPaidRewardPerToken;

        uint256 amount = balanceOf(account, stakeType).mul(
            rewardPerToken(stakeType).
            sub(paidPerToken)
        ).div(1e18);

        uint256 substract = 0;
        if(user.exit){
            uint256 startDate = user.exitStartTime;
            if(user.lastClaimTime > startDate){
                startDate = user.lastClaimTime;
            }
            uint256 daysIn = (block.timestamp - startDate) / 1 days;
            uint256 exitPeriodDays = EXIT_PERIOD/1 days;
            if(daysIn > exitPeriodDays){
                daysIn = exitPeriodDays;
            }
            substract = daysIn.mul(amount).div(exitPeriodDays).div(
                exitRewardDenominator
            );
        }
        uint256 pending = stakeType == STAKE ? 
            pendingEarneds[account] : pendingEarnedYields[account];
        return (amount.sub(substract) + pending, substract);
    }

    function earned(address account) public view returns(uint256){
        uint256 stakeEarned;
        uint256 yieldEarned;
        uint256 tmp;
        (stakeEarned, tmp) = earned(account, STAKE);
        (yieldEarned, tmp) = earned(account, YIELD);

        return stakeEarned + yieldEarned;
    }

    function deposit(uint256 amount, uint256 stakeType, bool _exit) public {
        depositFor(msg.sender, amount, stakeType, _exit);
    }

    function depositFor(address _user, uint256 amount, uint256 stakeType, bool _exit)
        
        importUser(_user)

        updateReward(_user, stakeType)
        public {
        
        require(stakeType==STAKE || stakeType ==YIELD || stakeType==BOTH, "Invalid stakeType");
 
        User storage user = users[_user];
        require((user.balance == 0 && user.withdrawable==0 && user.withdrawableExit == 0)|| user.stakeType==stakeType, "Invalid Stake Type");

        if(user.exit || (user.balance == 0 && _exit)){
            updateExit(_user);
        }else if(user.balance == 0 && !_exit){
            user.exit = false;
        }

        stakedToken.transferFrom(address(msg.sender), address(this), amount);

        user.stakeType = stakeType;
        user.balance = user.balance.add(amount);

        if(stakeType == STAKE){
            _totalSupply = _totalSupply.add(amount);
        }else if(stakeType == YIELD){
            _totalSupplyYield = _totalSupplyYield.add(amount);
        }else{
            _totalSupplyYield = _totalSupplyYield.add(amount);
            _totalSupply = _totalSupply.add(amount);
        }
        
        emit Deposit(_user, amount, stakeType);
    }

    function updateExit(address _user) private{
        require(exitable, "Not exitable");
        User storage user = users[_user];
        user.exit = true;
        user.exitAmountTillNow = exitBalance(_user);
        user.exitStartTime = block.timestamp;
    }

    function sendReward(address userAddress, 
        uint256 stakeEarned, uint256 stakeSubtract, 
        uint256 yieldEarned, uint256 yieldSubtract
    ) private {
        User storage user = users[userAddress];
        uint256 _daoShare = stakeEarned.mul(daoShare).div(1 ether);
        uint256 _yieldDaoShare = yieldEarned.mul(daoShare).div(1 ether);

        if(stakeEarned > 0){
            rewardToken.transfer(userAddress, stakeEarned.sub(_daoShare));
            if(_daoShare > 0)
                rewardToken.transfer(daoWallet, _daoShare);
            user.paidReward = user.paidReward.add(
                stakeEarned
            );
        }

        if(yieldEarned > 0){
            yieldRewardToken.transfer(userAddress, yieldEarned.sub(_yieldDaoShare));
            
            if(_yieldDaoShare > 0)
                yieldRewardToken.transfer(daoWallet, _yieldDaoShare);   
            
            user.yieldPaidReward = user.yieldPaidReward.add(
                yieldEarned
            );
        }
        
        if(yieldEarned > 0 || stakeEarned > 0){
            emit RewardClaimed(userAddress, stakeEarned, yieldEarned);
        }

        if(stakeSubtract > 0){
            //notifyRewardAmountInternal(stakeSubtract, STAKE);
            totalExitRewards += stakeSubtract;
        }
        if(yieldSubtract > 0){
            //notifyRewardAmountInternal(yieldSubtract, YIELD);
            totalExitRewardsYield += yieldSubtract;
        }
        user.lastClaimTime = block.timestamp;
        pendingEarneds[userAddress] = 0;
        pendingEarnedYields[userAddress] = 0;
    }

    function sendExitToken(address _user, uint256 amount) private {
        controller.sendExitToken(
            _user,
            amount
        );
    }

    function claim() 
        importUser(msg.sender)
        updateReward(msg.sender, 0) public {
        
        claimInternal();
    }

    function claimInternal() private{
        uint256 stakeEarned;
        uint256 stakeSubtract;

        (stakeEarned, stakeSubtract) = earned(msg.sender, STAKE);

        uint256 yieldEarned;
        uint256 yieldSubtract;

        (yieldEarned, yieldSubtract) = earned(msg.sender, YIELD);

        sendReward(
            msg.sender,
            stakeEarned, stakeSubtract,
            yieldEarned, yieldSubtract
        );
    }

    function setExit(bool _val) 
        importUser(msg.sender) 
        updateReward(msg.sender, 0) public{
        
        User storage user = users[msg.sender];
        require(user.exit != _val, "same exit status");
        require(user.balance > 0, "0 balance");

        user.exit = _val;
        user.exitStartTime = now;
        user.exitAmountTillNow = 0;
    }

    function unfreezeAllAndClaim() public{
        unfreeze(users[msg.sender].balance);
        claimInternal();
    }

    function unfreeze(uint256 amount) 
        importUser(msg.sender) 
        updateReward(msg.sender, 0) public {
        User storage user = users[msg.sender];
        uint256 stakeType = user.stakeType;

        require(
            user.balance >= amount,
            "withdraw > deposit");

        if (amount > 0) {
            uint256 exitAmount = exitBalance(msg.sender);
            uint256 remainingExit = 0;
            if(exitAmount > amount){
                remainingExit = exitAmount.sub(amount);
                exitAmount = amount;
            }

            if(user.exit){
                user.exitAmountTillNow = remainingExit;
                user.exitStartTime = now;
            }

            uint256 tokenAmount = amount.sub(exitAmount);
            user.balance = user.balance.sub(amount);
            if(stakeType == STAKE){
                _totalSupply = _totalSupply.sub(amount);
            }else if (stakeType == YIELD){
                _totalSupplyYield = _totalSupplyYield.sub(amount);
            }else{
                _totalSupply = _totalSupply.sub(amount);
                _totalSupplyYield = _totalSupplyYield.sub(amount);
            }

            if(allowEmergencyWithdraw || stakeType==STAKE){
                if(tokenAmount > 0){
                    stakedToken.transfer(address(msg.sender), tokenAmount);
                    emit Withdraw(msg.sender, tokenAmount, stakeType);
                }
                if(exitAmount > 0){
                    sendExitToken(msg.sender, exitAmount);
                    emit Exit(msg.sender, exitAmount, stakeType);
                }
            }else{
                user.withdrawable += tokenAmount;
                user.withdrawableExit += exitAmount;

                user.withdrawTime = now;

                _totalYieldWithdrawed += amount;
                emit Unfreeze(msg.sender, amount, stakeType);
            }
            _totalExit += exitAmount;
        }
    }

    function withdrawUnfreezed() 
        importUser(msg.sender) 
        public{
        User storage user = users[msg.sender];
        require(user.withdrawable > 0 || user.withdrawableExit > 0, 
            "amount is 0");
        
        uint256 nextEpochTime = IStrategy(
            controller.getStrategy(address(this))
        ).getNextEpochTime();

        require(nextEpochTime.sub(PERIOD).sub(EPOCH_PERIOD) >=  user.withdrawTime ||
            allowEmergencyWithdraw, "not withdrawable yet");

        if(user.withdrawable > 0){
            stakedToken.transfer(address(msg.sender), user.withdrawable);
            emit Withdraw(msg.sender, user.withdrawable, YIELD);
            user.withdrawable = 0;
        }

        if(user.withdrawableExit > 0){
            sendExitToken(msg.sender, user.withdrawableExit);
            emit Exit(msg.sender, user.withdrawableExit, YIELD);
            user.withdrawableExit = 0;    
        }
    }

    function notifyRewardAmount(uint256 reward, uint256 stakeType) public onlyOwnerOrController{
        notifyRewardAmountInternal(reward, stakeType);
    }

    // just Controller and admin should be able to call this
    function notifyRewardAmountInternal(uint256 reward, uint256 stakeType) private  updateReward(address(0), stakeType){
        if (block.timestamp >= periodFinish) {
            if(stakeType == STAKE){
                rewardRate = reward.div(PERIOD);    
            }else{
                rewardRateYield = reward.div(PERIOD);
            }
        } else {
            uint256 remaining = periodFinish.sub(block.timestamp);
            if(stakeType == STAKE){
                uint256 leftover = remaining.mul(rewardRate);
                rewardRate = reward.add(leftover).div(PERIOD);    
            }else{
                uint256 leftover = remaining.mul(rewardRateYield);
                rewardRateYield = reward.add(leftover).div(PERIOD);
            }
            
        }
        lastUpdateTime = block.timestamp;
        periodFinish = block.timestamp.add(PERIOD);
    }

    function balanceOf(address account, uint256 stakeType) public view returns(uint256) {
        User storage user = users[account];
        if(user.stakeType == BOTH || user.stakeType==stakeType)
            return user.balance;
        return 0;
    }

    function exitBalance(address account) public view returns(uint256){
        User storage user = users[account];
        if(!user.exit || user.balance==0){
            return 0;
        }
        uint256 portion = (block.timestamp - user.exitStartTime).mul(1 ether).div(EXIT_PERIOD);
        portion = portion >= 1 ether ? 1 ether : portion;

        uint256 notExitedBalance = user.balance.sub(user.exitAmountTillNow);
        
        uint256 balance = user.exitAmountTillNow.add(notExitedBalance.mul(portion).div(1 ether));
        return balance > user.balance ? user.balance : balance;
    }

    function totalYieldWithdrawed() public view returns(uint256) {
        return _totalYieldWithdrawed;
    }

    function totalExit() public view returns(uint256) {
        return _totalExit;
    }

    function totalSupply(uint256 stakeType) public view returns(uint256) {
        return stakeType == STAKE ? _totalSupply : _totalSupplyYield;
    }

    function lastTimeRewardApplicable() public view returns(uint256) {
        return block.timestamp < periodFinish ? block.timestamp : periodFinish;
    }

    function rewardPerToken(uint256 stakeType) public view returns(uint256) {
        uint256 supply = stakeType == STAKE ? _totalSupply : _totalSupplyYield;        
        if (supply == 0) {
            return stakeType == STAKE ? rewardTillNowPerToken : yieldRewardTillNowPerToken;
        }
        if(stakeType == STAKE){
            return rewardTillNowPerToken.add(
                lastTimeRewardApplicable().sub(lastUpdateTime)
                .mul(rewardRate).mul(1e18).div(_totalSupply)
            );
        }else{
            return yieldRewardTillNowPerToken.add(
                lastTimeRewardApplicable().sub(lastUpdateTime).
                mul(rewardRateYield).mul(1e18).div(_totalSupplyYield)
            );
        }
    }

    function getRewardToken() public view returns(address){
        return address(rewardToken);
    }

    function userInfo(address account) public view returns(
        uint256[15] memory numbers,

        address rewardTokenAddress,
        address stakedTokenAddress,
        address controllerAddress,
        address strategyAddress,
        bool exit
    ){
        User storage user = users[account];
        numbers[0] = user.balance;
        numbers[1] = user.stakeType;
        numbers[2] = user.withdrawTime;
        numbers[3] = user.withdrawable;
        numbers[4] = _totalSupply;
        numbers[5] = _totalSupplyYield;
        numbers[6] = stakedToken.balanceOf(address(this));
        
        numbers[7] = rewardPerToken(STAKE);
        numbers[8] = rewardPerToken(YIELD);
        
        numbers[9] = earned(account);

        numbers[10] = user.exitStartTime;
        numbers[11] = exitBalance(account);

        numbers[12] = user.withdrawable;
        numbers[13] = user.withdrawableExit;

        rewardTokenAddress = address(rewardToken);
        stakedTokenAddress = address(stakedToken);
        controllerAddress = address(controller);

        exit = user.exit;

        strategyAddress = controller.getStrategy(address(this));
        numbers[14] = IStrategy(
            controller.getStrategy(address(this))
        ).getNextEpochTime();
    }

    function setController(address _controller) public onlyOwner{
        if(_controller != address(0)){
            controller = IController(_controller);
        }
    }

    function emergencyWithdrawFor(address _user) public onlyOwner{
        User storage user = users[_user];

        uint256 amount = user.balance;

        stakedToken.transfer(_user, amount);

        emit EmergencyWithdraw(_user, amount);

        //add other fields
        user.balance = 0;
        user.paidReward = 0;
        user.yieldPaidReward = 0;
    }

    function setAllowEmergencyWithdraw(bool _val) public onlyOwner{
        allowEmergencyWithdraw = _val;
    }

    function setExitable(bool _val) public onlyOwner{
        exitable = _val;
    }

    function setExitRewardDenominator(uint256 _val) public onlyOwner{
        exitRewardDenominator = _val;
    }

    function emergencyWithdrawETH(uint256 amount, address addr) public onlyOwner{
        require(addr != address(0));
        payable(addr).transfer(amount);
    }

    function emergencyWithdrawERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        StandardToken(_tokenAddr).transfer(_to, _amount);
    }
}


//Dar panah khoda

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_stakedToken","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"address","name":"_yieldRewardToken","type":"address"},{"internalType":"uint256","name":"_daoShare","type":"uint256"},{"internalType":"address","name":"_daoWallet","type":"address"},{"internalType":"address","name":"_controller","type":"address"},{"internalType":"bool","name":"_exitable","type":"bool"},{"internalType":"address","name":"_oldContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeType","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeType","type":"uint256"}],"name":"Exit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"yieldAmount","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeType","type":"uint256"}],"name":"Unfreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeType","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"EPOCH_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXIT_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalExit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupplyYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalYieldWithdrawed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowEmergencyWithdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"stakeType","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"birthDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daoShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daoWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakeType","type":"uint256"},{"internalType":"bool","name":"_exit","type":"bool"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakeType","type":"uint256"},{"internalType":"bool","name":"_exit","type":"bool"}],"name":"depositFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"stakeType","type":"uint256"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyWithdrawERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"addr","type":"address"}],"name":"emergencyWithdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"emergencyWithdrawFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"exitBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exitRewardDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exitable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdatedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"stakeType","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oldContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeType","type":"uint256"}],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRateYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardTillNowPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract StandardToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_val","type":"bool"}],"name":"setAllowEmergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_daoShare","type":"uint256"}],"name":"setDaoShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_daoWallet","type":"address"}],"name":"setDaoWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_val","type":"bool"}],"name":"setExit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"period","type":"uint256"}],"name":"setExitPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_val","type":"uint256"}],"name":"setExitRewardDenominator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_val","type":"bool"}],"name":"setExitable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"period","type":"uint256"},{"internalType":"uint256","name":"epochPeriod","type":"uint256"},{"internalType":"uint256","name":"_birthDate","type":"uint256"}],"name":"setPeriods","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"_rewardRate","type":"uint256"},{"internalType":"uint256","name":"_rewardRateYield","type":"uint256"},{"internalType":"uint256","name":"_rewardTillNowPerToken","type":"uint256"},{"internalType":"uint256","name":"_yieldRewardTillNowPerToken","type":"uint256"}],"name":"setRewardInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakedToken","outputs":[{"internalType":"contract StandardToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalExit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalExitRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalExitRewardsYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeType","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalYieldWithdrawed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unfreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unfreezeAllAndClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256[15]","name":"numbers","type":"uint256[15]"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"address","name":"stakedTokenAddress","type":"address"},{"internalType":"address","name":"controllerAddress","type":"address"},{"internalType":"address","name":"strategyAddress","type":"address"},{"internalType":"bool","name":"exit","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"stakeType","type":"uint256"},{"internalType":"uint256","name":"paidReward","type":"uint256"},{"internalType":"uint256","name":"yieldPaidReward","type":"uint256"},{"internalType":"uint256","name":"paidRewardPerToken","type":"uint256"},{"internalType":"uint256","name":"yieldPaidRewardPerToken","type":"uint256"},{"internalType":"uint256","name":"withdrawable","type":"uint256"},{"internalType":"uint256","name":"withdrawableExit","type":"uint256"},{"internalType":"uint256","name":"withdrawTime","type":"uint256"},{"internalType":"bool","name":"exit","type":"bool"},{"internalType":"uint256","name":"exitStartTime","type":"uint256"},{"internalType":"uint256","name":"exitAmountTillNow","type":"uint256"},{"internalType":"uint256","name":"lastClaimTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawToBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawUnfreezed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"yieldRewardTillNowPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yieldRewardToken","outputs":[{"internalType":"contract StandardToken","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405262093a806001556201518060029081556262e0806003556000600781905560088190556905bd7c46a8b187f1110e6009556905160bf5c943f6d32685600a5569019cc2fa29954b93ad18600b55600c55600d805460ff19169055600e556360a693266015553480156200007657600080fd5b50604051620044f2380380620044f283398181016040526101008110156200009d57600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e0909701519596949593949293919290916000620000dc620001c5565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601980546001600160a01b03199081166001600160a01b039a8b1617909155601a80548216988a1698909817909755601b8054881696891696909617909555600f80548716928816929092179091556017929092556018805485169186169190911760ff60a01b1916600160a01b921515929092029190911790556010805433908416179055601c8054909216921691909117905542601655620001c9565b3390565b61431980620001d96000396000f3fe608060405234801561001057600080fd5b50600436106103d95760003560e01c80637b0a47ee1161020a578063b4d1d79511610125578063d177804b116100b8578063f77c479111610087578063f77c479114610a16578063f7c618c114610a1e578063f90ce5ba14610a26578063f9114bd614610a2e578063fea10a5f14610a36576103d9565b8063d177804b146109d8578063ebe2b12b146109e0578063f2bbd86c146109e8578063f2fde38b146109f0576103d9565b8063c04b5f65116100f4578063c04b5f65146109b8578063c1985d3b146109c0578063c8f33c91146109c8578063cc7a262e146109d0576103d9565b8063b4d1d79514610983578063b7b1f2101461098b578063bd85b03914610993578063bfc84ff9146109b0576103d9565b8063a630e99d1161019d578063b004e03b1161016c578063b004e03b146108f9578063b2552acb1461091f578063b3ab15fb14610927578063b3f5e0081461094d576103d9565b8063a630e99d14610836578063a81119b81461083e578063a87430ba14610864578063ae342141146108f1576103d9565b806388d19f1b116101d957806388d19f1b146107f85780638da5cb5b1461080057806392eefe9b146108085780639c511ad41461082e576103d9565b80637b0a47ee146107c357806380faa57d146107cb5780638544ab30146107d3578063874c120b146107db576103d9565b80634e71d92d116102fa57806365f203551161028d57806369dda74c1161025c57806369dda74c146107795780636d0d2067146107815780636fadc3ca1461079e578063715018a6146107bb576103d9565b806365f20355146107125780636623fc461461074c578063698a58971461076957806369940d7914610771576103d9565b806360551d9d116102c957806360551d9d146106bd57806360c6cdac146106dc57806361004f39146106e457806364997e01146106ec576103d9565b80634e71d92d14610659578063570ca735146106615780635d4c3224146106695780635d9966ac14610688576103d9565b806326bfae3e116103725780633eaaf86b116103415780633eaaf86b146105f557806340878f58146105fd578063417314591461060557806343a0d0661461062e576103d9565b806326bfae3e1461059857806330503c4e146105a05780633101d5af146105a85780633e491d47146105b0576103d9565b80631959a002116103ae5780631959a0021461048d5780631a26af7a146105355780631ea7dd5714610551578063246132f914610575576103d9565b80628cc262146103de578062fdd58e1461041657806304ff336c146104425780631594500614610461575b600080fd5b610404600480360360208110156103f457600080fd5b50356001600160a01b0316610a55565b60408051918252519081900360200190f35b6104046004803603604081101561042c57600080fd5b506001600160a01b038135169060200135610a85565b61045f6004803603602081101561045857600080fd5b5035610acc565b005b61045f6004803603604081101561047757600080fd5b50803590602001356001600160a01b0316610b29565b6104b3600480360360208110156104a357600080fd5b50356001600160a01b0316610bcf565b60405180876101e080838360005b838110156104d95781810151838201526020016104c1565b50505050905001866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b031681526020018215158152602001965050505050505060405180910390f35b61053d610e87565b604080519115158252519081900360200190f35b610559610e90565b604080516001600160a01b039092168252519081900360200190f35b61045f6004803603604081101561058b57600080fd5b5080359060200135610e9f565b61053d610f39565b610559610f49565b61045f610f58565b6105dc600480360360408110156105c657600080fd5b506001600160a01b03813516906020013561103a565b6040805192835260208301919091528051918290030190f35b61040461117e565b61045f611184565b61045f6004803603606081101561061b57600080fd5b50803590602081013590604001356111a7565b61045f6004803603606081101561064457600080fd5b5080359060208101359060400135151561120d565b61045f611219565b610559611620565b61045f6004803603602081101561067f57600080fd5b5035151561162f565b61045f600480360360a081101561069e57600080fd5b508035906020810135906040810135906060810135906080013561169a565b61045f600480360360208110156106d357600080fd5b50351515611709565b61040461177f565b610404611785565b61045f6004803603602081101561070257600080fd5b50356001600160a01b031661178b565b61045f6004803603608081101561072857600080fd5b506001600160a01b0381351690602081013590604081013590606001351515611805565b61045f6004803603602081101561076257600080fd5b5035611e92565b61055961255c565b61055961256b565b61040461257a565b61045f6004803603602081101561079757600080fd5b5035612580565b61045f600480360360208110156107b457600080fd5b50356125dd565b61045f61263a565b6104046126dc565b6104046126e2565b6104046126fc565b610404600480360360208110156107f157600080fd5b5035612702565b6104046127a9565b6105596127af565b61045f6004803603602081101561081e57600080fd5b50356001600160a01b03166127be565b610404612844565b61040461284a565b61045f6004803603602081101561085457600080fd5b50356001600160a01b0316612850565b61088a6004803603602081101561087a57600080fd5b50356001600160a01b0316612999565b604080519d8e5260208e019c909c528c8c019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e0880152610100870152151561012086015261014085015261016084015261018083015251908190036101a00190f35b610404612a04565b6104046004803603602081101561090f57600080fd5b50356001600160a01b0316612a0a565b610404612aeb565b61045f6004803603602081101561093d57600080fd5b50356001600160a01b0316612af1565b61045f6004803603606081101561096357600080fd5b506001600160a01b03813581169160208101359091169060400135612b6b565b610404612c4b565b610404612c51565b610404600480360360208110156109a957600080fd5b5035612c57565b610404612c71565b610404612c77565b61045f612c7d565b610404613213565b610559613219565b610404613228565b61040461322e565b610404613234565b61045f60048036036020811015610a0657600080fd5b50356001600160a01b031661323a565b610559613332565b610559613341565b610404613350565b610404613356565b61045f60048036036020811015610a4c57600080fd5b5035151561335c565b600080600080610a6685600161103a565b9093509050610a7685600261103a565b5092909201925050505b919050565b6001600160a01b0382166000908152601360205260408120600181015460031480610ab35750828160010154145b15610ac057549050610ac6565b60009150505b92915050565b610ad4613823565b6000546001600160a01b03908116911614610b24576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600355565b610b31613823565b6000546001600160a01b03908116911614610b81576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b038116610b9457600080fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610bca573d6000803e3d6000fd5b505050565b610bd761423d565b6001600160a01b03828116600090815260136020908152604080832080548652600181015486840152600881015486830152600681015460608701526009546080870152600a5460a087015260195482516370a0823160e01b815230600482015292519495869586958695869594909316926370a082319260248083019392829003018186803b158015610c6a57600080fd5b505afa158015610c7e573d6000803e3d6000fd5b505050506040513d6020811015610c9457600080fd5b505160c0880152610ca56001612702565b60e0880152610cb46002612702565b610100880152610cc388610a55565b610120880152600a810154610140880152610cdd88612a0a565b610160880152600681015461018088015260078101546101a0880152601a54601954600f5460098401546040805163f8806a1360e01b815230600482015290516001600160a01b039586169b50938516995093909116965060ff169350859163f8806a13916024808301926020929190829003018186803b158015610d6157600080fd5b505afa158015610d75573d6000803e3d6000fd5b505050506040513d6020811015610d8b57600080fd5b5051600f546040805163f8806a1360e01b815230600482015290519295506001600160a01b039091169163f8806a1391602480820192602092909190829003018186803b158015610ddb57600080fd5b505afa158015610def573d6000803e3d6000fd5b505050506040513d6020811015610e0557600080fd5b505160408051630596293360e41b815290516001600160a01b0390921691635962933091600480820192602092909190829003018186803b158015610e4957600080fd5b505afa158015610e5d573d6000803e3d6000fd5b505050506040513d6020811015610e7357600080fd5b50516101c088015250949693955091939092565b600d5460ff1681565b601b546001600160a01b031681565b610ea76127af565b6001600160a01b0316336001600160a01b03161480610ed05750600f546001600160a01b031633145b80610ee557506010546001600160a01b031633145b610f2b576040805162461bcd60e51b815260206004820152601260248201527110b7bbb732b927b921b7b73a3937b63632b960711b604482015290519081900360640190fd5b610f358282613827565b5050565b601854600160a01b900460ff1681565b601c546001600160a01b031681565b610f60613823565b6000546001600160a01b03908116911614610fb0576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601954600c546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561100757600080fd5b505af115801561101b573d6000803e3d6000fd5b505050506040513d602081101561103157600080fd5b50506000600c55565b6001600160a01b03821660009081526013602052604081208190816001851461106757816005015461106d565b81600401545b905060006110a9670de0b6b3a76400006110a36110938561108d8b612702565b90613a8f565b61109d8b8b610a85565b90613ad8565b90613b31565b600984015490915060009060ff161561111f57600a840154600c8501548110156110d45750600c8401545b600062015180824203816110e457fe5b049050600062015180600354816110f757fe5b04905080821115611106578091505b600e54611119906110a38381868a613ad8565b93505050505b600060018814611147576001600160a01b038916600090815260126020526040902054611161565b6001600160a01b0389166000908152601160205260409020545b90508061116e8484613a8f565b0199919850909650505050505050565b60095481565b3360009081526013602052604090205461119d90611e92565b6111a5613b73565b565b6111af613823565b6000546001600160a01b039081169116146111ff576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600192909255600255601655565b610bca33848484611805565b601c5433906001600160a01b0316156114aa576001600160a01b0381166000908152601360205260409020600101546114aa576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b1580156112bf57600080fd5b505afa1580156112d3573d6000803e3d6000fd5b505050506040513d6101a08110156112ea57600080fd5b506020810151610100820151610120830151610140840151610180909401518551939492939192918690600290811061131f57fe5b602002602001018660008151811061133357fe5b602002602001018760018151811061134757fe5b602090810291909101019290925291905291909152909350915082156114a6576016548160018151811061137757fe5b602002602001015111156113c0576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff191684151517905581518291906113f257fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a01819055508060018151811061143357fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c01819055508060028151811061147457fe5b6020908102919091018101516001600160a01b038616600090815260139092526040909120600801556114a684613bac565b5050505b336000818152601360205260408120541515806114e157506001600160a01b03821660009081526013602052604090206006015415155b8061150657506001600160a01b03821660009081526013602052604090206007015415155b1561152957506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b038216156115b75760008061154684600161103a565b909250905060008061155986600261103a565b90925090508115611588576001600160a01b0386166000908152601260205260409020829055601e8054820190555b83156115b2576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b6115c16001612702565b6007556115ce6002612702565b6008556115d96126e2565b6004556001600160a01b03821615611618576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b610bca613b73565b6010546001600160a01b031681565b611637613823565b6000546001600160a01b03908116911614611687576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600d805460ff1916911515919091179055565b6116a2613823565b6000546001600160a01b039081169116146116f2576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600494909455600592909255600655600755600855565b611711613823565b6000546001600160a01b03908116911614611761576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b60188054911515600160a01b0260ff60a01b19909216919091179055565b60075481565b60165481565b611793613823565b6000546001600160a01b039081169116146117e3576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b601c5484906001600160a01b031615611a96576001600160a01b038116600090815260136020526040902060010154611a96576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b1580156118ab57600080fd5b505afa1580156118bf573d6000803e3d6000fd5b505050506040513d6101a08110156118d657600080fd5b506020810151610100820151610120830151610140840151610180909401518551939492939192918690600290811061190b57fe5b602002602001018660008151811061191f57fe5b602002602001018760018151811061193357fe5b60209081029190910101929092529190529190915290935091508215611a92576016548160018151811061196357fe5b602002602001015111156119ac576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff191684151517905581518291906119de57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a018190555080600181518110611a1f57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c018190555080600281518110611a6057fe5b6020908102919091018101516001600160a01b03861660009081526013909252604090912060080155611a9284613bac565b5050505b6001600160a01b03851660009081526013602052604090205485908490151580611ada57506001600160a01b03821660009081526013602052604090206006015415155b80611aff57506001600160a01b03821660009081526013602052604090206007015415155b15611b2257506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b03821615611bb057600080611b3f84600161103a565b9092509050600080611b5286600261103a565b90925090508115611b81576001600160a01b0386166000908152601260205260409020829055601e8054820190555b8315611bab576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b611bba6001612702565b600755611bc76002612702565b600855611bd26126e2565b6004556001600160a01b03821615611c11576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b6001851480611c205750600285145b80611c2b5750600385145b611c70576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207374616b655479706560781b604482015290519081900360640190fd5b6001600160a01b03871660009081526013602052604090208054158015611c9957506006810154155b8015611ca757506007810154155b80611cb55750858160010154145b611cfb576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964205374616b65205479706560701b604482015290519081900360640190fd5b600981015460ff1680611d1557508054158015611d155750845b15611d2857611d2388613c79565b611d47565b8054158015611d35575084155b15611d475760098101805460ff191690555b601954604080516323b872dd60e01b8152336004820152306024820152604481018a905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611da157600080fd5b505af1158015611db5573d6000803e3d6000fd5b505050506040513d6020811015611dcb57600080fd5b5050600181018690558054611de09088613d05565b81556001861415611e0057600954611df89088613d05565b600955611e3f565b6002861415611e1e57600a54611e169088613d05565b600a55611e3f565b600a54611e2b9088613d05565b600a55600954611e3b9088613d05565b6009555b604080516001600160a01b038a1681526020810189905280820188905290517f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360600190a15050505050505050565b601c5433906001600160a01b031615612123576001600160a01b038116600090815260136020526040902060010154612123576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b158015611f3857600080fd5b505afa158015611f4c573d6000803e3d6000fd5b505050506040513d6101a0811015611f6357600080fd5b5060208101516101008201516101208301516101408401516101809094015185519394929391929186906002908110611f9857fe5b6020026020010186600081518110611fac57fe5b6020026020010187600181518110611fc057fe5b6020908102919091010192909252919052919091529093509150821561211f5760165481600181518110611ff057fe5b60200260200101511115612039576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff1916841515179055815182919061206b57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a0181905550806001815181106120ac57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c0181905550806002815181106120ed57fe5b6020908102919091018101516001600160a01b0386166000908152601390925260409091206008015561211f84613bac565b5050505b3360008181526013602052604081205415158061215a57506001600160a01b03821660009081526013602052604090206006015415155b8061217f57506001600160a01b03821660009081526013602052604090206007015415155b156121a257506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b03821615612230576000806121bf84600161103a565b90925090506000806121d286600261103a565b90925090508115612201576001600160a01b0386166000908152601260205260409020829055601e8054820190555b831561222b576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b61223a6001612702565b6007556122476002612702565b6008556122526126e2565b6004556001600160a01b03821615612291576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b336000908152601360205260409020600181015481548611156122f0576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dc80f8819195c1bdcda5d60721b604482015290519081900360640190fd5b851561255457600061230133612a0a565b905060008782111561231d576123178289613a8f565b90508791505b600984015460ff161561233857600b840181905542600a8501555b60006123448984613a8f565b8554909150612353908a613a8f565b855560018414156123735760095461236b908a613a8f565b6009556123b2565b600284141561239157600a54612389908a613a8f565b600a556123b2565b60095461239e908a613a8f565b600955600a546123ae908a613a8f565b600a555b600d5460ff16806123c35750600184145b156124e557801561248f576019546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561242257600080fd5b505af1158015612436573d6000803e3d6000fd5b505050506040513d602081101561244c57600080fd5b5050604080513381526020810183905280820186905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a15b82156124e05761249f3384613d5f565b604080513381526020810185905280820186905290517fbe0b6e5b3195df91f2e6b2b20501f84b085714f9e38073f499073c83056510099181900360600190a15b612548565b6006850180548201905560078501805484019055426008860155600b80548a01905560408051338152602081018b905280820186905290517f7ed75eaf82098257819f0bd6dd7f79062e49152905980263c73ee48565a656a59181900360600190a15b5050600c805490910190555b505050505050565b6018546001600160a01b031681565b601a546001600160a01b031690565b600c5490565b612588613823565b6000546001600160a01b039081169116146125d8576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600e55565b6125e5613823565b6000546001600160a01b03908116911614612635576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601755565b612642613823565b6000546001600160a01b03908116911614612692576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60055481565b600060155442106126f5576015546126f7565b425b905090565b600e5481565b6000806001831461271557600a54612719565b6009545b90508061273c576001831461273057600854612734565b6007545b915050610a80565b60018314156127775761273461276e6009546110a3670de0b6b3a764000061109d60055461109d60045461108d6126e2565b60075490613d05565b6127346127a0600a546110a3670de0b6b3a764000061109d60065461109d60045461108d6126e2565b60085490613d05565b60175481565b6000546001600160a01b031690565b6127c6613823565b6000546001600160a01b03908116911614612816576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b0381161561284157600f80546001600160a01b0319166001600160a01b0383161790555b50565b60025481565b60065481565b612858613823565b6000546001600160a01b039081169116146128a8576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b0380821660008181526013602090815260408083208054601954835163a9059cbb60e01b815260048101979097526024870182905292519196909592169363a9059cbb93604480850194919392918390030190829087803b15801561291357600080fd5b505af1158015612927573d6000803e3d6000fd5b505050506040513d602081101561293d57600080fd5b5050604080516001600160a01b03851681526020810183905281517f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695929181900390910190a15060008082556002820181905560039091015550565b601360205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a989997989697959694959394929360ff909216929091908d565b600a5481565b6001600160a01b0381166000908152601360205260408120600981015460ff161580612a3557508054155b15612a44576000915050610a80565b6000612a6d6003546110a3670de0b6b3a764000085600a01544203613ad890919063ffffffff16565b9050670de0b6b3a7640000811015612a855780612a8f565b670de0b6b3a76400005b600b8301548354919250600091612aa591613a8f565b90506000612acd612ac2670de0b6b3a76400006110a38587613ad8565b600b86015490613d05565b84549091508111612ade5780612ae1565b83545b9695505050505050565b601d5481565b612af9613823565b6000546001600160a01b03908116911614612b49576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b612b73613823565b6000546001600160a01b03908116911614612bc3576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c1a57600080fd5b505af1158015612c2e573d6000803e3d6000fd5b505050506040513d6020811015612c4457600080fd5b5050505050565b60015481565b60085481565b600060018214612c6957600a54610ac6565b505060095490565b600c5481565b60035481565b601c5433906001600160a01b031615612f0e576001600160a01b038116600090815260136020526040902060010154612f0e576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b158015612d2357600080fd5b505afa158015612d37573d6000803e3d6000fd5b505050506040513d6101a0811015612d4e57600080fd5b5060208101516101008201516101208301516101408401516101809094015185519394929391929186906002908110612d8357fe5b6020026020010186600081518110612d9757fe5b6020026020010187600181518110612dab57fe5b60209081029190910101929092529190529190915290935091508215612f0a5760165481600181518110612ddb57fe5b60200260200101511115612e24576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff19168415151790558151829190612e5657fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a018190555080600181518110612e9757fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c018190555080600281518110612ed857fe5b6020908102919091018101516001600160a01b03861660009081526013909252604090912060080155612f0a84613bac565b5050505b3360009081526013602052604090206006810154151580612f33575060008160070154115b612f72576040805162461bcd60e51b815260206004820152600b60248201526a0616d6f756e7420697320360ac1b604482015290519081900360640190fd5b600f546040805163f8806a1360e01b815230600482015290516000926001600160a01b03169163f8806a13916024808301926020929190829003018186803b158015612fbd57600080fd5b505afa158015612fd1573d6000803e3d6000fd5b505050506040513d6020811015612fe757600080fd5b505160408051630596293360e41b815290516001600160a01b0390921691635962933091600480820192602092909190829003018186803b15801561302b57600080fd5b505afa15801561303f573d6000803e3d6000fd5b505050506040513d602081101561305557600080fd5b505160088301546002546001549293509091613077919061108d908590613a8f565b1015806130865750600d5460ff165b6130ce576040805162461bcd60e51b81526020600482015260146024820152731b9bdd081dda5d1a191c985dd8589b19481e595d60621b604482015290519081900360640190fd5b6006820154156131aa5760195460068301546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561313157600080fd5b505af1158015613145573d6000803e3d6000fd5b505050506040513d602081101561315b57600080fd5b50506006820154604080513381526020810192909252600282820152517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a1600060068301555b600782015415610bca576131c2338360070154613d5f565b6007820154604080513381526020810192909252600282820152517fbe0b6e5b3195df91f2e6b2b20501f84b085714f9e38073f499073c83056510099181900360600190a160006007830155505050565b60045481565b6019546001600160a01b031681565b600b5481565b60155481565b600b5490565b613242613823565b6000546001600160a01b03908116911614613292576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b0381166132d75760405162461bcd60e51b815260040180806020018281038252602681526020018061425d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b031681565b601a546001600160a01b031681565b60145481565b601e5481565b601c5433906001600160a01b0316156135ed576001600160a01b0381166000908152601360205260409020600101546135ed576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b15801561340257600080fd5b505afa158015613416573d6000803e3d6000fd5b505050506040513d6101a081101561342d57600080fd5b506020810151610100820151610120830151610140840151610180909401518551939492939192918690600290811061346257fe5b602002602001018660008151811061347657fe5b602002602001018760018151811061348a57fe5b602090810291909101019290925291905291909152909350915082156135e957601654816001815181106134ba57fe5b60200260200101511115613503576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff1916841515179055815182919061353557fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a01819055508060018151811061357657fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c0181905550806002815181106135b757fe5b6020908102919091018101516001600160a01b038616600090815260139092526040909120600801556135e984613bac565b5050505b3360008181526013602052604081205415158061362457506001600160a01b03821660009081526013602052604090206006015415155b8061364957506001600160a01b03821660009081526013602052604090206007015415155b1561366c57506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b038216156136fa5760008061368984600161103a565b909250905060008061369c86600261103a565b909250905081156136cb576001600160a01b0386166000908152601260205260409020829055601e8054820190555b83156136f5576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b6137046001612702565b6007556137116002612702565b60085561371c6126e2565b6004556001600160a01b0382161561375b576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b336000908152601360205260409020600981015460ff16151585151514156137bd576040805162461bcd60e51b815260206004820152601060248201526f73616d6520657869742073746174757360801b604482015290519081900360640190fd5b80546137fc576040805162461bcd60e51b8152602060048201526009602482015268302062616c616e636560b81b604482015290519081900360640190fd5b60098101805460ff191695151595909517909455505042600a830155506000600b90910155565b3390565b600080805260136020527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c54829015158061387c57506001600160a01b03821660009081526013602052604090206006015415155b806138a157506001600160a01b03821660009081526013602052604090206007015415155b156138c457506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b03821615613952576000806138e184600161103a565b90925090506000806138f486600261103a565b90925090508115613923576001600160a01b0386166000908152601260205260409020829055601e8054820190555b831561394d576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b61395c6001612702565b6007556139696002612702565b6008556139746126e2565b6004556001600160a01b038216156139b3576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b60155442106139f25760018314156139db576001546139d3908590613b31565b6005556139ed565b6001546139e9908590613b31565b6006555b613a73565b601554600090613a029042613a8f565b90506001841415613a41576000613a2460055483613ad890919063ffffffff16565b600154909150613a38906110a38884613d05565b60055550613a71565b6000613a5860065483613ad890919063ffffffff16565b600154909150613a6c906110a38884613d05565b600655505b505b426004819055600154613a869190613d05565b60155550505050565b6000613ad183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613dc8565b9392505050565b600082613ae757506000610ac6565b82820282848281613af457fe5b0414613ad15760405162461bcd60e51b81526004018080602001828103825260218152602001806142836021913960400191505060405180910390fd5b6000613ad183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e5f565b600080613b8133600161103a565b9092509050600080613b9433600261103a565b9092509050613ba63385858585613ec4565b50505050565b601c546040805163543a185d60e11b81526001600160a01b0384811660048301529151919092169163a87430ba916024808301926101a0929190829003018186803b158015613bfa57600080fd5b505afa158015613c0e573d6000803e3d6000fd5b505050506040513d6101a0811015613c2557600080fd5b508051602080830151606084015160a085015160c0909501516001600160a01b0390961660009081526013909352604090922060068101959095556005850193909355600384015560018301919091559055565b601854600160a01b900460ff16613cc6576040805162461bcd60e51b815260206004820152600c60248201526b4e6f74206578697461626c6560a01b604482015290519081900360640190fd5b6001600160a01b038116600090815260136020526040902060098101805460ff19166001179055613cf682612a0a565b600b82015542600a9091015550565b600082820183811015613ad1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600f5460408051631abe49b560e21b81526001600160a01b0385811660048301526024820185905291519190921691636af926d491604480830192600092919082900301818387803b158015613db457600080fd5b505af1158015612554573d6000803e3d6000fd5b60008184841115613e575760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e1c578181015183820152602001613e04565b50505050905090810190601f168015613e495780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183613eae5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613e1c578181015183820152602001613e04565b506000838581613eba57fe5b0495945050505050565b6001600160a01b0385166000908152601360205260408120601754909190613efb90670de0b6b3a7640000906110a3908990613ad8565b90506000613f20670de0b6b3a76400006110a360175488613ad890919063ffffffff16565b9050861561405757601a546001600160a01b031663a9059cbb89613f448a86613a8f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613f8a57600080fd5b505af1158015613f9e573d6000803e3d6000fd5b505050506040513d6020811015613fb457600080fd5b5050811561404257601a546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018690529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561401557600080fd5b505af1158015614029573d6000803e3d6000fd5b505050506040513d602081101561403f57600080fd5b50505b60028301546140519088613d05565b60028401555b841561418c57601b546001600160a01b031663a9059cbb896140798885613a8f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156140bf57600080fd5b505af11580156140d3573d6000803e3d6000fd5b505050506040513d60208110156140e957600080fd5b5050801561417757601b546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561414a57600080fd5b505af115801561415e573d6000803e3d6000fd5b505050506040513d602081101561417457600080fd5b50505b60038301546141869086613d05565b60038401555b600085118061419b5750600087115b156141ea57604080516001600160a01b038a1681526020810189905280820187905290517ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e27317439181900360600190a15b85156141f957601d8054870190555b831561420857601e8054850190555b505042600c9190910155505050506001600160a01b031660009081526011602090815260408083208390556012909152812055565b604051806101e00160405280600f90602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726c617374436c61696d54696d65203e2062697274684461746500000000000000a264697066735822122051a03b017c430dd61805192cd5ca17bbad0d9e5d98b2a0e2c3839ac65723f79264736f6c634300060c0033000000000000000000000000d8c33488b76d4a2c06d5ccb75574f10f6ccac3d700000000000000000000000080ab141f324c3d6f2b18b030f1c4e95d4d65877800000000000000000000000080ab141f324c3d6f2b18b030f1c4e95d4d65877800000000000000000000000000000000000000000000000000354a6ba7a18000000000000000000000000000d9775d818fc23e07ac4b8efd4c58972f7c59bc0f0000000000000000000000004e8a7c429192bfda8c9a1ef0f3b749d0f66657aa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000004244abf6151153b8d3eefbbfdbab91cd85a8b222

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103d95760003560e01c80637b0a47ee1161020a578063b4d1d79511610125578063d177804b116100b8578063f77c479111610087578063f77c479114610a16578063f7c618c114610a1e578063f90ce5ba14610a26578063f9114bd614610a2e578063fea10a5f14610a36576103d9565b8063d177804b146109d8578063ebe2b12b146109e0578063f2bbd86c146109e8578063f2fde38b146109f0576103d9565b8063c04b5f65116100f4578063c04b5f65146109b8578063c1985d3b146109c0578063c8f33c91146109c8578063cc7a262e146109d0576103d9565b8063b4d1d79514610983578063b7b1f2101461098b578063bd85b03914610993578063bfc84ff9146109b0576103d9565b8063a630e99d1161019d578063b004e03b1161016c578063b004e03b146108f9578063b2552acb1461091f578063b3ab15fb14610927578063b3f5e0081461094d576103d9565b8063a630e99d14610836578063a81119b81461083e578063a87430ba14610864578063ae342141146108f1576103d9565b806388d19f1b116101d957806388d19f1b146107f85780638da5cb5b1461080057806392eefe9b146108085780639c511ad41461082e576103d9565b80637b0a47ee146107c357806380faa57d146107cb5780638544ab30146107d3578063874c120b146107db576103d9565b80634e71d92d116102fa57806365f203551161028d57806369dda74c1161025c57806369dda74c146107795780636d0d2067146107815780636fadc3ca1461079e578063715018a6146107bb576103d9565b806365f20355146107125780636623fc461461074c578063698a58971461076957806369940d7914610771576103d9565b806360551d9d116102c957806360551d9d146106bd57806360c6cdac146106dc57806361004f39146106e457806364997e01146106ec576103d9565b80634e71d92d14610659578063570ca735146106615780635d4c3224146106695780635d9966ac14610688576103d9565b806326bfae3e116103725780633eaaf86b116103415780633eaaf86b146105f557806340878f58146105fd578063417314591461060557806343a0d0661461062e576103d9565b806326bfae3e1461059857806330503c4e146105a05780633101d5af146105a85780633e491d47146105b0576103d9565b80631959a002116103ae5780631959a0021461048d5780631a26af7a146105355780631ea7dd5714610551578063246132f914610575576103d9565b80628cc262146103de578062fdd58e1461041657806304ff336c146104425780631594500614610461575b600080fd5b610404600480360360208110156103f457600080fd5b50356001600160a01b0316610a55565b60408051918252519081900360200190f35b6104046004803603604081101561042c57600080fd5b506001600160a01b038135169060200135610a85565b61045f6004803603602081101561045857600080fd5b5035610acc565b005b61045f6004803603604081101561047757600080fd5b50803590602001356001600160a01b0316610b29565b6104b3600480360360208110156104a357600080fd5b50356001600160a01b0316610bcf565b60405180876101e080838360005b838110156104d95781810151838201526020016104c1565b50505050905001866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b031681526020018215158152602001965050505050505060405180910390f35b61053d610e87565b604080519115158252519081900360200190f35b610559610e90565b604080516001600160a01b039092168252519081900360200190f35b61045f6004803603604081101561058b57600080fd5b5080359060200135610e9f565b61053d610f39565b610559610f49565b61045f610f58565b6105dc600480360360408110156105c657600080fd5b506001600160a01b03813516906020013561103a565b6040805192835260208301919091528051918290030190f35b61040461117e565b61045f611184565b61045f6004803603606081101561061b57600080fd5b50803590602081013590604001356111a7565b61045f6004803603606081101561064457600080fd5b5080359060208101359060400135151561120d565b61045f611219565b610559611620565b61045f6004803603602081101561067f57600080fd5b5035151561162f565b61045f600480360360a081101561069e57600080fd5b508035906020810135906040810135906060810135906080013561169a565b61045f600480360360208110156106d357600080fd5b50351515611709565b61040461177f565b610404611785565b61045f6004803603602081101561070257600080fd5b50356001600160a01b031661178b565b61045f6004803603608081101561072857600080fd5b506001600160a01b0381351690602081013590604081013590606001351515611805565b61045f6004803603602081101561076257600080fd5b5035611e92565b61055961255c565b61055961256b565b61040461257a565b61045f6004803603602081101561079757600080fd5b5035612580565b61045f600480360360208110156107b457600080fd5b50356125dd565b61045f61263a565b6104046126dc565b6104046126e2565b6104046126fc565b610404600480360360208110156107f157600080fd5b5035612702565b6104046127a9565b6105596127af565b61045f6004803603602081101561081e57600080fd5b50356001600160a01b03166127be565b610404612844565b61040461284a565b61045f6004803603602081101561085457600080fd5b50356001600160a01b0316612850565b61088a6004803603602081101561087a57600080fd5b50356001600160a01b0316612999565b604080519d8e5260208e019c909c528c8c019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e0880152610100870152151561012086015261014085015261016084015261018083015251908190036101a00190f35b610404612a04565b6104046004803603602081101561090f57600080fd5b50356001600160a01b0316612a0a565b610404612aeb565b61045f6004803603602081101561093d57600080fd5b50356001600160a01b0316612af1565b61045f6004803603606081101561096357600080fd5b506001600160a01b03813581169160208101359091169060400135612b6b565b610404612c4b565b610404612c51565b610404600480360360208110156109a957600080fd5b5035612c57565b610404612c71565b610404612c77565b61045f612c7d565b610404613213565b610559613219565b610404613228565b61040461322e565b610404613234565b61045f60048036036020811015610a0657600080fd5b50356001600160a01b031661323a565b610559613332565b610559613341565b610404613350565b610404613356565b61045f60048036036020811015610a4c57600080fd5b5035151561335c565b600080600080610a6685600161103a565b9093509050610a7685600261103a565b5092909201925050505b919050565b6001600160a01b0382166000908152601360205260408120600181015460031480610ab35750828160010154145b15610ac057549050610ac6565b60009150505b92915050565b610ad4613823565b6000546001600160a01b03908116911614610b24576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600355565b610b31613823565b6000546001600160a01b03908116911614610b81576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b038116610b9457600080fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610bca573d6000803e3d6000fd5b505050565b610bd761423d565b6001600160a01b03828116600090815260136020908152604080832080548652600181015486840152600881015486830152600681015460608701526009546080870152600a5460a087015260195482516370a0823160e01b815230600482015292519495869586958695869594909316926370a082319260248083019392829003018186803b158015610c6a57600080fd5b505afa158015610c7e573d6000803e3d6000fd5b505050506040513d6020811015610c9457600080fd5b505160c0880152610ca56001612702565b60e0880152610cb46002612702565b610100880152610cc388610a55565b610120880152600a810154610140880152610cdd88612a0a565b610160880152600681015461018088015260078101546101a0880152601a54601954600f5460098401546040805163f8806a1360e01b815230600482015290516001600160a01b039586169b50938516995093909116965060ff169350859163f8806a13916024808301926020929190829003018186803b158015610d6157600080fd5b505afa158015610d75573d6000803e3d6000fd5b505050506040513d6020811015610d8b57600080fd5b5051600f546040805163f8806a1360e01b815230600482015290519295506001600160a01b039091169163f8806a1391602480820192602092909190829003018186803b158015610ddb57600080fd5b505afa158015610def573d6000803e3d6000fd5b505050506040513d6020811015610e0557600080fd5b505160408051630596293360e41b815290516001600160a01b0390921691635962933091600480820192602092909190829003018186803b158015610e4957600080fd5b505afa158015610e5d573d6000803e3d6000fd5b505050506040513d6020811015610e7357600080fd5b50516101c088015250949693955091939092565b600d5460ff1681565b601b546001600160a01b031681565b610ea76127af565b6001600160a01b0316336001600160a01b03161480610ed05750600f546001600160a01b031633145b80610ee557506010546001600160a01b031633145b610f2b576040805162461bcd60e51b815260206004820152601260248201527110b7bbb732b927b921b7b73a3937b63632b960711b604482015290519081900360640190fd5b610f358282613827565b5050565b601854600160a01b900460ff1681565b601c546001600160a01b031681565b610f60613823565b6000546001600160a01b03908116911614610fb0576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601954600c546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561100757600080fd5b505af115801561101b573d6000803e3d6000fd5b505050506040513d602081101561103157600080fd5b50506000600c55565b6001600160a01b03821660009081526013602052604081208190816001851461106757816005015461106d565b81600401545b905060006110a9670de0b6b3a76400006110a36110938561108d8b612702565b90613a8f565b61109d8b8b610a85565b90613ad8565b90613b31565b600984015490915060009060ff161561111f57600a840154600c8501548110156110d45750600c8401545b600062015180824203816110e457fe5b049050600062015180600354816110f757fe5b04905080821115611106578091505b600e54611119906110a38381868a613ad8565b93505050505b600060018814611147576001600160a01b038916600090815260126020526040902054611161565b6001600160a01b0389166000908152601160205260409020545b90508061116e8484613a8f565b0199919850909650505050505050565b60095481565b3360009081526013602052604090205461119d90611e92565b6111a5613b73565b565b6111af613823565b6000546001600160a01b039081169116146111ff576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600192909255600255601655565b610bca33848484611805565b601c5433906001600160a01b0316156114aa576001600160a01b0381166000908152601360205260409020600101546114aa576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b1580156112bf57600080fd5b505afa1580156112d3573d6000803e3d6000fd5b505050506040513d6101a08110156112ea57600080fd5b506020810151610100820151610120830151610140840151610180909401518551939492939192918690600290811061131f57fe5b602002602001018660008151811061133357fe5b602002602001018760018151811061134757fe5b602090810291909101019290925291905291909152909350915082156114a6576016548160018151811061137757fe5b602002602001015111156113c0576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff191684151517905581518291906113f257fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a01819055508060018151811061143357fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c01819055508060028151811061147457fe5b6020908102919091018101516001600160a01b038616600090815260139092526040909120600801556114a684613bac565b5050505b336000818152601360205260408120541515806114e157506001600160a01b03821660009081526013602052604090206006015415155b8061150657506001600160a01b03821660009081526013602052604090206007015415155b1561152957506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b038216156115b75760008061154684600161103a565b909250905060008061155986600261103a565b90925090508115611588576001600160a01b0386166000908152601260205260409020829055601e8054820190555b83156115b2576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b6115c16001612702565b6007556115ce6002612702565b6008556115d96126e2565b6004556001600160a01b03821615611618576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b610bca613b73565b6010546001600160a01b031681565b611637613823565b6000546001600160a01b03908116911614611687576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600d805460ff1916911515919091179055565b6116a2613823565b6000546001600160a01b039081169116146116f2576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600494909455600592909255600655600755600855565b611711613823565b6000546001600160a01b03908116911614611761576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b60188054911515600160a01b0260ff60a01b19909216919091179055565b60075481565b60165481565b611793613823565b6000546001600160a01b039081169116146117e3576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b601c5484906001600160a01b031615611a96576001600160a01b038116600090815260136020526040902060010154611a96576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b1580156118ab57600080fd5b505afa1580156118bf573d6000803e3d6000fd5b505050506040513d6101a08110156118d657600080fd5b506020810151610100820151610120830151610140840151610180909401518551939492939192918690600290811061190b57fe5b602002602001018660008151811061191f57fe5b602002602001018760018151811061193357fe5b60209081029190910101929092529190529190915290935091508215611a92576016548160018151811061196357fe5b602002602001015111156119ac576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff191684151517905581518291906119de57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a018190555080600181518110611a1f57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c018190555080600281518110611a6057fe5b6020908102919091018101516001600160a01b03861660009081526013909252604090912060080155611a9284613bac565b5050505b6001600160a01b03851660009081526013602052604090205485908490151580611ada57506001600160a01b03821660009081526013602052604090206006015415155b80611aff57506001600160a01b03821660009081526013602052604090206007015415155b15611b2257506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b03821615611bb057600080611b3f84600161103a565b9092509050600080611b5286600261103a565b90925090508115611b81576001600160a01b0386166000908152601260205260409020829055601e8054820190555b8315611bab576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b611bba6001612702565b600755611bc76002612702565b600855611bd26126e2565b6004556001600160a01b03821615611c11576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b6001851480611c205750600285145b80611c2b5750600385145b611c70576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207374616b655479706560781b604482015290519081900360640190fd5b6001600160a01b03871660009081526013602052604090208054158015611c9957506006810154155b8015611ca757506007810154155b80611cb55750858160010154145b611cfb576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964205374616b65205479706560701b604482015290519081900360640190fd5b600981015460ff1680611d1557508054158015611d155750845b15611d2857611d2388613c79565b611d47565b8054158015611d35575084155b15611d475760098101805460ff191690555b601954604080516323b872dd60e01b8152336004820152306024820152604481018a905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611da157600080fd5b505af1158015611db5573d6000803e3d6000fd5b505050506040513d6020811015611dcb57600080fd5b5050600181018690558054611de09088613d05565b81556001861415611e0057600954611df89088613d05565b600955611e3f565b6002861415611e1e57600a54611e169088613d05565b600a55611e3f565b600a54611e2b9088613d05565b600a55600954611e3b9088613d05565b6009555b604080516001600160a01b038a1681526020810189905280820188905290517f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360600190a15050505050505050565b601c5433906001600160a01b031615612123576001600160a01b038116600090815260136020526040902060010154612123576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b158015611f3857600080fd5b505afa158015611f4c573d6000803e3d6000fd5b505050506040513d6101a0811015611f6357600080fd5b5060208101516101008201516101208301516101408401516101809094015185519394929391929186906002908110611f9857fe5b6020026020010186600081518110611fac57fe5b6020026020010187600181518110611fc057fe5b6020908102919091010192909252919052919091529093509150821561211f5760165481600181518110611ff057fe5b60200260200101511115612039576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff1916841515179055815182919061206b57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a0181905550806001815181106120ac57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c0181905550806002815181106120ed57fe5b6020908102919091018101516001600160a01b0386166000908152601390925260409091206008015561211f84613bac565b5050505b3360008181526013602052604081205415158061215a57506001600160a01b03821660009081526013602052604090206006015415155b8061217f57506001600160a01b03821660009081526013602052604090206007015415155b156121a257506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b03821615612230576000806121bf84600161103a565b90925090506000806121d286600261103a565b90925090508115612201576001600160a01b0386166000908152601260205260409020829055601e8054820190555b831561222b576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b61223a6001612702565b6007556122476002612702565b6008556122526126e2565b6004556001600160a01b03821615612291576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b336000908152601360205260409020600181015481548611156122f0576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dc80f8819195c1bdcda5d60721b604482015290519081900360640190fd5b851561255457600061230133612a0a565b905060008782111561231d576123178289613a8f565b90508791505b600984015460ff161561233857600b840181905542600a8501555b60006123448984613a8f565b8554909150612353908a613a8f565b855560018414156123735760095461236b908a613a8f565b6009556123b2565b600284141561239157600a54612389908a613a8f565b600a556123b2565b60095461239e908a613a8f565b600955600a546123ae908a613a8f565b600a555b600d5460ff16806123c35750600184145b156124e557801561248f576019546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561242257600080fd5b505af1158015612436573d6000803e3d6000fd5b505050506040513d602081101561244c57600080fd5b5050604080513381526020810183905280820186905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a15b82156124e05761249f3384613d5f565b604080513381526020810185905280820186905290517fbe0b6e5b3195df91f2e6b2b20501f84b085714f9e38073f499073c83056510099181900360600190a15b612548565b6006850180548201905560078501805484019055426008860155600b80548a01905560408051338152602081018b905280820186905290517f7ed75eaf82098257819f0bd6dd7f79062e49152905980263c73ee48565a656a59181900360600190a15b5050600c805490910190555b505050505050565b6018546001600160a01b031681565b601a546001600160a01b031690565b600c5490565b612588613823565b6000546001600160a01b039081169116146125d8576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600e55565b6125e5613823565b6000546001600160a01b03908116911614612635576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601755565b612642613823565b6000546001600160a01b03908116911614612692576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60055481565b600060155442106126f5576015546126f7565b425b905090565b600e5481565b6000806001831461271557600a54612719565b6009545b90508061273c576001831461273057600854612734565b6007545b915050610a80565b60018314156127775761273461276e6009546110a3670de0b6b3a764000061109d60055461109d60045461108d6126e2565b60075490613d05565b6127346127a0600a546110a3670de0b6b3a764000061109d60065461109d60045461108d6126e2565b60085490613d05565b60175481565b6000546001600160a01b031690565b6127c6613823565b6000546001600160a01b03908116911614612816576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b0381161561284157600f80546001600160a01b0319166001600160a01b0383161790555b50565b60025481565b60065481565b612858613823565b6000546001600160a01b039081169116146128a8576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b0380821660008181526013602090815260408083208054601954835163a9059cbb60e01b815260048101979097526024870182905292519196909592169363a9059cbb93604480850194919392918390030190829087803b15801561291357600080fd5b505af1158015612927573d6000803e3d6000fd5b505050506040513d602081101561293d57600080fd5b5050604080516001600160a01b03851681526020810183905281517f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695929181900390910190a15060008082556002820181905560039091015550565b601360205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a989997989697959694959394929360ff909216929091908d565b600a5481565b6001600160a01b0381166000908152601360205260408120600981015460ff161580612a3557508054155b15612a44576000915050610a80565b6000612a6d6003546110a3670de0b6b3a764000085600a01544203613ad890919063ffffffff16565b9050670de0b6b3a7640000811015612a855780612a8f565b670de0b6b3a76400005b600b8301548354919250600091612aa591613a8f565b90506000612acd612ac2670de0b6b3a76400006110a38587613ad8565b600b86015490613d05565b84549091508111612ade5780612ae1565b83545b9695505050505050565b601d5481565b612af9613823565b6000546001600160a01b03908116911614612b49576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b612b73613823565b6000546001600160a01b03908116911614612bc3576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c1a57600080fd5b505af1158015612c2e573d6000803e3d6000fd5b505050506040513d6020811015612c4457600080fd5b5050505050565b60015481565b60085481565b600060018214612c6957600a54610ac6565b505060095490565b600c5481565b60035481565b601c5433906001600160a01b031615612f0e576001600160a01b038116600090815260136020526040902060010154612f0e576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b158015612d2357600080fd5b505afa158015612d37573d6000803e3d6000fd5b505050506040513d6101a0811015612d4e57600080fd5b5060208101516101008201516101208301516101408401516101809094015185519394929391929186906002908110612d8357fe5b6020026020010186600081518110612d9757fe5b6020026020010187600181518110612dab57fe5b60209081029190910101929092529190529190915290935091508215612f0a5760165481600181518110612ddb57fe5b60200260200101511115612e24576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff19168415151790558151829190612e5657fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a018190555080600181518110612e9757fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c018190555080600281518110612ed857fe5b6020908102919091018101516001600160a01b03861660009081526013909252604090912060080155612f0a84613bac565b5050505b3360009081526013602052604090206006810154151580612f33575060008160070154115b612f72576040805162461bcd60e51b815260206004820152600b60248201526a0616d6f756e7420697320360ac1b604482015290519081900360640190fd5b600f546040805163f8806a1360e01b815230600482015290516000926001600160a01b03169163f8806a13916024808301926020929190829003018186803b158015612fbd57600080fd5b505afa158015612fd1573d6000803e3d6000fd5b505050506040513d6020811015612fe757600080fd5b505160408051630596293360e41b815290516001600160a01b0390921691635962933091600480820192602092909190829003018186803b15801561302b57600080fd5b505afa15801561303f573d6000803e3d6000fd5b505050506040513d602081101561305557600080fd5b505160088301546002546001549293509091613077919061108d908590613a8f565b1015806130865750600d5460ff165b6130ce576040805162461bcd60e51b81526020600482015260146024820152731b9bdd081dda5d1a191c985dd8589b19481e595d60621b604482015290519081900360640190fd5b6006820154156131aa5760195460068301546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561313157600080fd5b505af1158015613145573d6000803e3d6000fd5b505050506040513d602081101561315b57600080fd5b50506006820154604080513381526020810192909252600282820152517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a1600060068301555b600782015415610bca576131c2338360070154613d5f565b6007820154604080513381526020810192909252600282820152517fbe0b6e5b3195df91f2e6b2b20501f84b085714f9e38073f499073c83056510099181900360600190a160006007830155505050565b60045481565b6019546001600160a01b031681565b600b5481565b60155481565b600b5490565b613242613823565b6000546001600160a01b03908116911614613292576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b0381166132d75760405162461bcd60e51b815260040180806020018281038252602681526020018061425d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b031681565b601a546001600160a01b031681565b60145481565b601e5481565b601c5433906001600160a01b0316156135ed576001600160a01b0381166000908152601360205260409020600101546135ed576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b15801561340257600080fd5b505afa158015613416573d6000803e3d6000fd5b505050506040513d6101a081101561342d57600080fd5b506020810151610100820151610120830151610140840151610180909401518551939492939192918690600290811061346257fe5b602002602001018660008151811061347657fe5b602002602001018760018151811061348a57fe5b602090810291909101019290925291905291909152909350915082156135e957601654816001815181106134ba57fe5b60200260200101511115613503576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff1916841515179055815182919061353557fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a01819055508060018151811061357657fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c0181905550806002815181106135b757fe5b6020908102919091018101516001600160a01b038616600090815260139092526040909120600801556135e984613bac565b5050505b3360008181526013602052604081205415158061362457506001600160a01b03821660009081526013602052604090206006015415155b8061364957506001600160a01b03821660009081526013602052604090206007015415155b1561366c57506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b038216156136fa5760008061368984600161103a565b909250905060008061369c86600261103a565b909250905081156136cb576001600160a01b0386166000908152601260205260409020829055601e8054820190555b83156136f5576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b6137046001612702565b6007556137116002612702565b60085561371c6126e2565b6004556001600160a01b0382161561375b576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b336000908152601360205260409020600981015460ff16151585151514156137bd576040805162461bcd60e51b815260206004820152601060248201526f73616d6520657869742073746174757360801b604482015290519081900360640190fd5b80546137fc576040805162461bcd60e51b8152602060048201526009602482015268302062616c616e636560b81b604482015290519081900360640190fd5b60098101805460ff191695151595909517909455505042600a830155506000600b90910155565b3390565b600080805260136020527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c54829015158061387c57506001600160a01b03821660009081526013602052604090206006015415155b806138a157506001600160a01b03821660009081526013602052604090206007015415155b156138c457506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b03821615613952576000806138e184600161103a565b90925090506000806138f486600261103a565b90925090508115613923576001600160a01b0386166000908152601260205260409020829055601e8054820190555b831561394d576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b61395c6001612702565b6007556139696002612702565b6008556139746126e2565b6004556001600160a01b038216156139b3576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b60155442106139f25760018314156139db576001546139d3908590613b31565b6005556139ed565b6001546139e9908590613b31565b6006555b613a73565b601554600090613a029042613a8f565b90506001841415613a41576000613a2460055483613ad890919063ffffffff16565b600154909150613a38906110a38884613d05565b60055550613a71565b6000613a5860065483613ad890919063ffffffff16565b600154909150613a6c906110a38884613d05565b600655505b505b426004819055600154613a869190613d05565b60155550505050565b6000613ad183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613dc8565b9392505050565b600082613ae757506000610ac6565b82820282848281613af457fe5b0414613ad15760405162461bcd60e51b81526004018080602001828103825260218152602001806142836021913960400191505060405180910390fd5b6000613ad183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e5f565b600080613b8133600161103a565b9092509050600080613b9433600261103a565b9092509050613ba63385858585613ec4565b50505050565b601c546040805163543a185d60e11b81526001600160a01b0384811660048301529151919092169163a87430ba916024808301926101a0929190829003018186803b158015613bfa57600080fd5b505afa158015613c0e573d6000803e3d6000fd5b505050506040513d6101a0811015613c2557600080fd5b508051602080830151606084015160a085015160c0909501516001600160a01b0390961660009081526013909352604090922060068101959095556005850193909355600384015560018301919091559055565b601854600160a01b900460ff16613cc6576040805162461bcd60e51b815260206004820152600c60248201526b4e6f74206578697461626c6560a01b604482015290519081900360640190fd5b6001600160a01b038116600090815260136020526040902060098101805460ff19166001179055613cf682612a0a565b600b82015542600a9091015550565b600082820183811015613ad1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600f5460408051631abe49b560e21b81526001600160a01b0385811660048301526024820185905291519190921691636af926d491604480830192600092919082900301818387803b158015613db457600080fd5b505af1158015612554573d6000803e3d6000fd5b60008184841115613e575760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e1c578181015183820152602001613e04565b50505050905090810190601f168015613e495780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183613eae5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613e1c578181015183820152602001613e04565b506000838581613eba57fe5b0495945050505050565b6001600160a01b0385166000908152601360205260408120601754909190613efb90670de0b6b3a7640000906110a3908990613ad8565b90506000613f20670de0b6b3a76400006110a360175488613ad890919063ffffffff16565b9050861561405757601a546001600160a01b031663a9059cbb89613f448a86613a8f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613f8a57600080fd5b505af1158015613f9e573d6000803e3d6000fd5b505050506040513d6020811015613fb457600080fd5b5050811561404257601a546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018690529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561401557600080fd5b505af1158015614029573d6000803e3d6000fd5b505050506040513d602081101561403f57600080fd5b50505b60028301546140519088613d05565b60028401555b841561418c57601b546001600160a01b031663a9059cbb896140798885613a8f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156140bf57600080fd5b505af11580156140d3573d6000803e3d6000fd5b505050506040513d60208110156140e957600080fd5b5050801561417757601b546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561414a57600080fd5b505af115801561415e573d6000803e3d6000fd5b505050506040513d602081101561417457600080fd5b50505b60038301546141869086613d05565b60038401555b600085118061419b5750600087115b156141ea57604080516001600160a01b038a1681526020810189905280820187905290517ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e27317439181900360600190a15b85156141f957601d8054870190555b831561420857601e8054850190555b505042600c9190910155505050506001600160a01b031660009081526011602090815260408083208390556012909152812055565b604051806101e00160405280600f90602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726c617374436c61696d54696d65203e2062697274684461746500000000000000a264697066735822122051a03b017c430dd61805192cd5ca17bbad0d9e5d98b2a0e2c3839ac65723f79264736f6c634300060c0033

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

000000000000000000000000d8c33488b76d4a2c06d5ccb75574f10f6ccac3d700000000000000000000000080ab141f324c3d6f2b18b030f1c4e95d4d65877800000000000000000000000080ab141f324c3d6f2b18b030f1c4e95d4d65877800000000000000000000000000000000000000000000000000354a6ba7a18000000000000000000000000000d9775d818fc23e07ac4b8efd4c58972f7c59bc0f0000000000000000000000004e8a7c429192bfda8c9a1ef0f3b749d0f66657aa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000004244abf6151153b8d3eefbbfdbab91cd85a8b222

-----Decoded View---------------
Arg [0] : _stakedToken (address): 0xd8C33488B76D4a2C06D5cCB75574f10F6ccaC3D7
Arg [1] : _rewardToken (address): 0x80aB141F324C3d6F2b18b030f1C4E95d4d658778
Arg [2] : _yieldRewardToken (address): 0x80aB141F324C3d6F2b18b030f1C4E95d4d658778
Arg [3] : _daoShare (uint256): 15000000000000000
Arg [4] : _daoWallet (address): 0xd9775d818FC23e07aC4b8eFd4C58972F7c59BC0f
Arg [5] : _controller (address): 0x4e8a7C429192bFDa8c9a1ef0f3B749d0f66657AA
Arg [6] : _exitable (bool): False
Arg [7] : _oldContract (address): 0x4244abF6151153b8d3eEfbBfDBAB91CD85a8b222

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000d8c33488b76d4a2c06d5ccb75574f10f6ccac3d7
Arg [1] : 00000000000000000000000080ab141f324c3d6f2b18b030f1c4e95d4d658778
Arg [2] : 00000000000000000000000080ab141f324c3d6f2b18b030f1c4e95d4d658778
Arg [3] : 00000000000000000000000000000000000000000000000000354a6ba7a18000
Arg [4] : 000000000000000000000000d9775d818fc23e07ac4b8efd4c58972f7c59bc0f
Arg [5] : 0000000000000000000000004e8a7c429192bfda8c9a1ef0f3b749d0f66657aa
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000004244abf6151153b8d3eefbbfdbab91cd85a8b222


Deployed Bytecode Sourcemap

9524:23045:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18724:304;;;;;;;;;;;;;;;;-1:-1:-1;18724:304:0;-1:-1:-1;;;;;18724:304:0;;:::i;:::-;;;;;;;;;;;;;;;;27746:255;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27746:255:0;;;;;;;;:::i;16449:95::-;;;;;;;;;;;;;;;;-1:-1:-1;16449:95:0;;:::i;:::-;;32226:163;;;;;;;;;;;;;;;;-1:-1:-1;32226:163:0;;;;;;-1:-1:-1;;;;;32226:163:0;;:::i;30022:1308::-;;;;;;;;;;;;;;;;-1:-1:-1;30022:1308:0;-1:-1:-1;;;;;30022:1308:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30022:1308:0;;;;;;-1:-1:-1;;;;;30022:1308:0;;;;;;-1:-1:-1;;;;;30022:1308:0;;;;;;-1:-1:-1;;;;;30022:1308:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10353:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;11457:37;;;:::i;:::-;;;;-1:-1:-1;;;;;11457:37:0;;;;;;;;;;;;;;26614:155;;;;;;;;;;;;;;;;-1:-1:-1;26614:155:0;;;;;;;:::i;11350:20::-;;;:::i;11503:26::-;;;:::i;17351:167::-;;;:::i;17526:1190::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17526:1190:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10006:53;;;:::i;23491:117::-;;;:::i;16647:197::-;;;;;;;;;;;;;;;;-1:-1:-1;16647:197:0;;;;;;;;;;;;:::i;19036:138::-;;;;;;;;;;;;;;;;-1:-1:-1;19036:138:0;;;;;;;;;;;;;;:::i;22506:::-;;;:::i;10491:23::-;;;:::i;31899:110::-;;;;;;;;;;;;;;;;-1:-1:-1;31899:110:0;;;;:::i;16852:491::-;;;;;;;;;;;;;;;;-1:-1:-1;16852:491:0;;;;;;;;;;;;;;;;;;;;;;:::i;32017:82::-;;;;;;;;;;;;;;;;-1:-1:-1;32017:82:0;;;;:::i;9905:40::-;;;:::i;11254:24::-;;;:::i;16237:100::-;;;;;;;;;;;;;;;;-1:-1:-1;16237:100:0;-1:-1:-1;;;;;16237:100:0;;:::i;19182:1228::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19182:1228:0;;;;;;;;;;;;;;;;;;;;:::i;23616:2011::-;;;;;;;;;;;;;;;;-1:-1:-1;23616:2011:0;;:::i;11317:24::-;;;:::i;29914:100::-;;;:::i;28740:86::-;;;:::i;32107:111::-;;;;;;;;;;;;;;;;-1:-1:-1;32107:111:0;;:::i;16345:96::-;;;;;;;;;;;;;;;;-1:-1:-1;16345:96:0;;:::i;7343:148::-;;;:::i;9834:25::-;;;:::i;28990:154::-;;;:::i;10404:40::-;;;:::i;29152:754::-;;;;;;;;;;;;;;;;-1:-1:-1;29152:754:0;;:::i;11287:23::-;;;:::i;6701:79::-;;;:::i;31338:171::-;;;;;;;;;;;;;;;;-1:-1:-1;31338:171:0;-1:-1:-1;;;;;31338:171:0;;:::i;9706:38::-;;;:::i;9866:30::-;;;:::i;31517:374::-;;;;;;;;;;;;;;;;-1:-1:-1;31517:374:0;-1:-1:-1;;;;;31517:374:0;;:::i;11118:38::-;;;;;;;;;;;;;;;;-1:-1:-1;11118:38:0;-1:-1:-1;;;;;11118:38:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10066:58;;;:::i;28009:607::-;;;;;;;;;;;;;;;;-1:-1:-1;28009:607:0;-1:-1:-1;;;;;28009:607:0;;:::i;11538:31::-;;;:::i;16552:87::-;;;;;;;;;;;;;;;;-1:-1:-1;16552:87:0;-1:-1:-1;;;;;16552:87:0;;:::i;32397:169::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32397:169:0;;;;;;;;;;;;;;;;;:::i;9667:30::-;;;:::i;9952:45::-;;;:::i;28834:148::-;;;;;;;;;;;;;;;;-1:-1:-1;28834:148:0;;:::i;10201:29::-;;;:::i;9753:36::-;;;:::i;25635:971::-;;;:::i;9798:29::-;;;:::i;11379:32::-;;;:::i;10133:61::-;;;:::i;11205:40::-;;;:::i;28624:108::-;;;:::i;7646:244::-;;;;;;;;;;;;;;;;-1:-1:-1;7646:244:0;-1:-1:-1;;;;;7646:244:0;;:::i;10453:29::-;;;:::i;11418:32::-;;;:::i;11165:31::-;;;:::i;11576:36::-;;;:::i;23105:378::-;;;;;;;;;;;;;;;;-1:-1:-1;23105:378:0;;;;:::i;18724:304::-;18777:7;18796:19;18826;18856:11;18899:22;18906:7;9592:1;18899:6;:22::i;:::-;18878:43;;-1:-1:-1;18878:43:0;-1:-1:-1;18953:22:0;18960:7;9625:1;18953:6;:22::i;:::-;-1:-1:-1;18995:25:0;;;;;-1:-1:-1;;;18724:304:0;;;;:::o;27746:255::-;-1:-1:-1;;;;;27861:14:0;;27821:7;27861:14;;;:5;:14;;;;;27889;;;;9657:1;27889:22;;:51;;;27931:9;27915:4;:14;;;:25;27889:51;27886:88;;;27962:12;;-1:-1:-1;27955:19:0;;27886:88;27992:1;27985:8;;;27746:255;;;;;:::o;16449:95::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;16516:11:::1;:20:::0;16449:95::o;32226:163::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32321:18:0;::::1;32313:27;;;::::0;::::1;;32351:30;::::0;-1:-1:-1;;;;;32351:22:0;::::1;::::0;:30;::::1;;;::::0;32374:6;;32351:30:::1;::::0;;;32374:6;32351:22;:30;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32226:163:::0;;:::o;30022:1308::-;30087:26;;:::i;:::-;-1:-1:-1;;;;;30317:14:0;;;30126:26;30317:14;;;:5;:14;;;;;;;;30355:12;;30342:25;;30391:14;;;;30378:10;;;:27;30429:17;;;;30416:10;;;:30;30470:17;;;;30457:10;;;:30;30511:12;;30498:10;;;:25;30547:17;;30534:10;;;:30;30588:11;;:36;;-1:-1:-1;;;30588:36:0;;30618:4;30506:1;30588:36;;;;;30126:26;;;;;;;;;;30317:14;30588:11;;;;:21;;:36;;;;;30317:14;30588:36;;;;;:11;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30588:36:0;30575:10;;;:49;30658:21;9592:1;30658:14;:21::i;:::-;30645:10;;;:34;30703:21;9625:1;30703:14;:21::i;:::-;30690:10;;;:34;30758:15;30765:7;30758:6;:15::i;:::-;30745:10;;;:28;30800:18;;;;30786:11;;;:32;30843:20;30855:7;30843:11;:20::i;:::-;30829:11;;;:34;30890:17;;;;30876:11;;;:31;30932:21;;;;30918:11;;;:35;30995:11;;31047;;31098:10;;31129:9;;;;31169:37;;;-1:-1:-1;;;31169:37:0;;31200:4;31169:37;;;;;;-1:-1:-1;;;;;30995:11:0;;;;-1:-1:-1;31047:11:0;;;;-1:-1:-1;31098:10:0;;;;;-1:-1:-1;31129:9:0;;;-1:-1:-1;31098:10:0;;31169:22;;:37;;;;;30829:11;;31169:37;;;;;;;31098:10;31169:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31169:37:0;31255:10;;:37;;;-1:-1:-1;;;31255:37:0;;31286:4;31255:37;;;;;;31169;;-1:-1:-1;;;;;;31255:10:0;;;;:22;;:37;;;;;31169;;31255;;;;;;;;:10;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31255:37:0;31231:91;;;-1:-1:-1;;;31231:91:0;;;;-1:-1:-1;;;;;31231:89:0;;;;;;:91;;;;;31255:37;;31231:91;;;;;;;;:89;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31231:91:0;31217:11;;;:105;-1:-1:-1;31217:7:0;;30022:1308;;-1:-1:-1;30022:1308:0;;;;:::o;10353:42::-;;;;;;:::o;11457:37::-;;;-1:-1:-1;;;;;11457:37:0;;:::o;26614:155::-;12821:7;:5;:7::i;:::-;-1:-1:-1;;;;;12807:21:0;:10;-1:-1:-1;;;;;12807:21:0;;:71;;;-1:-1:-1;12867:10:0;;-1:-1:-1;;;;;12867:10:0;12845;:33;12807:71;:110;;;-1:-1:-1;12909:8:0;;-1:-1:-1;;;;;12909:8:0;12895:10;:22;12807:110;12799:164;;;;;-1:-1:-1;;;12799:164:0;;;;;;;;;;;;-1:-1:-1;;;12799:164:0;;;;;;;;;;;;;;;26716:45:::1;26743:6;26751:9;26716:26;:45::i;:::-;26614:155:::0;;:::o;11350:20::-;;;-1:-1:-1;;;11350:20:0;;;;;:::o;11503:26::-;;;-1:-1:-1;;;;;11503:26:0;;:::o;17351:167::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;17404:11:::1;::::0;17464:10:::1;::::0;17404:81:::1;::::0;;-1:-1:-1;;;17404:81:0;;17439:10:::1;17404:81;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;17404:11:0;;::::1;::::0;:20:::1;::::0;:81;;;;;::::1;::::0;;;;;;;;;:11:::1;::::0;:81;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;17509:1:0::1;17496:10;:14:::0;17351:167::o;17526:1190::-;-1:-1:-1;;;;;17647:14:0;;17598:7;17647:14;;;:5;:14;;;;;17598:7;;;9592:1;17697:18;;:89;;17758:4;:28;;;17697:89;;;17732:4;:23;;;17697:89;17674:112;;17799:14;17816:126;17937:4;17816:116;17864:57;17908:12;17864:25;17879:9;17864:14;:25::i;:::-;:43;;:57::i;:::-;17816:29;17826:7;17835:9;17816;:29::i;:::-;:33;;:116::i;:::-;:120;;:126::i;:::-;17990:9;;;;17799:143;;-1:-1:-1;17955:17:0;;17990:9;;17987:542;;;18035:18;;;;18071;;;;:30;-1:-1:-1;18068:99:0;;;-1:-1:-1;18133:18:0;;;;18068:99;18181:14;18230:6;18217:9;18199:15;:27;18198:38;;;;;;18181:55;;18251:22;18288:6;18276:11;;:18;;;;;;18251:43;;18321:14;18312:6;:23;18309:85;;;18364:14;18355:23;;18309:85;18481:21;;18420:97;;:38;18443:14;18420:38;:6;18431;18420:10;:18::i;:97::-;18408:109;;17987:542;;;;18539:15;9592:1;18557:9;:18;:89;;-1:-1:-1;;;;;18618:28:0;;;;;;:19;:28;;;;;;18557:89;;;-1:-1:-1;;;;;18592:23:0;;;;;;:14;:23;;;;;;18557:89;18539:107;-1:-1:-1;18539:107:0;18665:21;:6;18676:9;18665:10;:21::i;:::-;:31;;18698:9;;-1:-1:-1;17526:1190:0;;-1:-1:-1;;;;;;;17526:1190:0:o;10006:53::-;;;;:::o;23491:117::-;23554:10;23548:17;;;;:5;:17;;;;;:25;23539:35;;:8;:35::i;:::-;23585:15;:13;:15::i;:::-;23491:117::o;16647:197::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;16751:6:::1;:15:::0;;;;16777:12:::1;:26:::0;16814:9:::1;:22:::0;16647:197::o;19036:138::-;19118:48;19129:10;19141:6;19149:9;19160:5;19118:10;:48::i;22506:138::-;13116:11;;22544:10;;-1:-1:-1;;;;;13116:11:0;:25;13113:925;;-1:-1:-1;;;;;13160:14:0;;;;;;:5;:14;;;;;:24;;;13157:870;;13301:16;;;13315:1;13301:16;;;;;;;;;13207:20;;;;13277:21;;13301:16;;;13277:21;;13301:16;;;-1:-1:-1;;13493:11:0;;13477:43;;;-1:-1:-1;;;13477:43:0;;-1:-1:-1;;;;;13477:43:0;;;;;;;;;13277:40;;-1:-1:-1;13493:11:0;;;13477:34;;-1:-1:-1;13477:43:0;;;;;;;;;;;;;;13493:11;13477:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13477:43:0;;;;;;;;;;;;;;;;;;;;;13423:7;;13477:43;;;;;;;13423:4;;13428:1;;13423:7;;;;;;;;;;;13439:4;13444:1;13439:7;;;;;;;;;;;;;13448:4;13453:1;13448:7;;;;;;;;;;;;;;;;;13336:184;;;;;;;;;;;;;-1:-1:-1;13336:184:0;-1:-1:-1;13542:16:0;;13539:473;;13676:9;;13665:4;13670:1;13665:7;;;;;;;;;;;;;;:20;;13657:58;;;;;-1:-1:-1;;;13657:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13657:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13738:14:0;;;;;;:5;:14;;;;;:19;;:29;;-1:-1:-1;;13738:29:0;;;;;;;13821:7;;;;13738:14;13821:7;;;;;;;;;;13790:5;:14;13796:7;-1:-1:-1;;;;;13790:14:0;-1:-1:-1;;;;;13790:14:0;;;;;;;;;;;;:28;;:38;;;;13882:4;13887:1;13882:7;;;;;;;;;;;;;;13851:5;:14;13857:7;-1:-1:-1;;;;;13851:14:0;-1:-1:-1;;;;;13851:14:0;;;;;;;;;;;;:28;;:38;;;;13942:4;13947:1;13942:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13912:14:0;;;;;;:5;:14;;;;;;;:27;;:37;13972:20;13918:7;13972:11;:20::i;:::-;13157:870;;;;22578:10:::1;22590:1;14147:14:::0;;;:5:::1;:14;::::0;;;;:22;:26;;;:61:::1;;-1:-1:-1::0;;;;;;14177:14:0;::::1;14207:1;14177:14:::0;;;:5:::1;:14;::::0;;;;:27:::1;;::::0;:31;;14147:61:::1;:113;;;-1:-1:-1::0;;;;;;14225:14:0;::::1;14259:1;14225:14:::0;;;:5:::1;:14;::::0;;;;:31:::1;;::::0;:35;;14147:113:::1;14144:190;;;-1:-1:-1::0;;;;;;14298:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:24:::1;;::::0;14144:190:::1;-1:-1:-1::0;;;;;14358:21:0;::::1;::::0;14354:820:::1;;14396:19;14430:21:::0;14499:22:::1;14506:7;9592:1;14499:6;:22::i;:::-;14468:53:::0;;-1:-1:-1;14468:53:0;-1:-1:-1;14538:19:0::1;::::0;14641:22:::1;14648:7:::0;9625:1:::1;14641:6;:22::i;:::-;14610:53:::0;;-1:-1:-1;14610:53:0;-1:-1:-1;14856:15:0;;14853:153:::1;;-1:-1:-1::0;;;;;14891:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;:42;;;14952:21:::1;:38:::0;;;::::1;::::0;;14853:153:::1;15023:15:::0;;15020:143:::1;;-1:-1:-1::0;;;;;15058:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:37;;;15114:16:::1;:33:::0;;;::::1;::::0;;15020:143:::1;14354:820;;;;;15218:21;9592:1;15218:14;:21::i;:::-;15194;:45:::0;15279:21:::1;9625:1;15279:14;:21::i;:::-;15250:26;:50:::0;15328:26:::1;:24;:26::i;:::-;15311:14;:43:::0;-1:-1:-1;;;;;15369:21:0;::::1;::::0;15365:193:::1;;15443:21;::::0;-1:-1:-1;;;;;15407:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:33:::1;::::0;::::1;:57:::0;;;;15520:26:::1;::::0;15479:38:::1;::::0;;::::1;:67:::0;15365:193:::1;22621:15:::2;:13;:15::i;10491:23::-:0;;;-1:-1:-1;;;;;10491:23:0;;:::o;31899:110::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;31972:22:::1;:29:::0;;-1:-1:-1;;31972:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31899:110::o;16852:491::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;17097:14:::1;:32:::0;;;;17140:10:::1;:24:::0;;;;17175:15:::1;:34:::0;17222:21:::1;:46:::0;17279:26:::1;:56:::0;16852:491::o;32017:82::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;32076:8:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;32076:15:0::1;-1:-1:-1::0;;;;32076:15:0;;::::1;::::0;;;::::1;::::0;;32017:82::o;9905:40::-;;;;:::o;11254:24::-;;;;:::o;16237:100::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;16307:9:::1;:22:::0;;-1:-1:-1;;;;;;16307:22:0::1;-1:-1:-1::0;;;;;16307:22:0;;;::::1;::::0;;;::::1;::::0;;16237:100::o;19182:1228::-;13116:11;;19294:5;;-1:-1:-1;;;;;13116:11:0;:25;13113:925;;-1:-1:-1;;;;;13160:14:0;;;;;;:5;:14;;;;;:24;;;13157:870;;13301:16;;;13315:1;13301:16;;;;;;;;;13207:20;;;;13277:21;;13301:16;;;13277:21;;13301:16;;;-1:-1:-1;;13493:11:0;;13477:43;;;-1:-1:-1;;;13477:43:0;;-1:-1:-1;;;;;13477:43:0;;;;;;;;;13277:40;;-1:-1:-1;13493:11:0;;;13477:34;;-1:-1:-1;13477:43:0;;;;;;;;;;;;;;13493:11;13477:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13477:43:0;;;;;;;;;;;;;;;;;;;;;13423:7;;13477:43;;;;;;;13423:4;;13428:1;;13423:7;;;;;;;;;;;13439:4;13444:1;13439:7;;;;;;;;;;;;;13448:4;13453:1;13448:7;;;;;;;;;;;;;;;;;13336:184;;;;;;;;;;;;;-1:-1:-1;13336:184:0;-1:-1:-1;13542:16:0;;13539:473;;13676:9;;13665:4;13670:1;13665:7;;;;;;;;;;;;;;:20;;13657:58;;;;;-1:-1:-1;;;13657:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13657:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13738:14:0;;;;;;:5;:14;;;;;:19;;:29;;-1:-1:-1;;13738:29:0;;;;;;;13821:7;;;;13738:14;13821:7;;;;;;;;;;13790:5;:14;13796:7;-1:-1:-1;;;;;13790:14:0;-1:-1:-1;;;;;13790:14:0;;;;;;;;;;;;:28;;:38;;;;13882:4;13887:1;13882:7;;;;;;;;;;;;;;13851:5;:14;13857:7;-1:-1:-1;;;;;13851:14:0;-1:-1:-1;;;;;13851:14:0;;;;;;;;;;;;:28;;:38;;;;13942:4;13947:1;13942:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13912:14:0;;;;;;:5;:14;;;;;;;:27;;:37;13972:20;13918:7;13972:11;:20::i;:::-;13157:870;;;;-1:-1:-1;;;;;14147:14:0;::::1;14172:1;14147:14:::0;;;:5:::1;:14;::::0;;;;:22;19325:5;;19332:9;;14147:26;;;:61:::1;;-1:-1:-1::0;;;;;;14177:14:0;::::1;14207:1;14177:14:::0;;;:5:::1;:14;::::0;;;;:27:::1;;::::0;:31;;14147:61:::1;:113;;;-1:-1:-1::0;;;;;;14225:14:0;::::1;14259:1;14225:14:::0;;;:5:::1;:14;::::0;;;;:31:::1;;::::0;:35;;14147:113:::1;14144:190;;;-1:-1:-1::0;;;;;;14298:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:24:::1;;::::0;14144:190:::1;-1:-1:-1::0;;;;;14358:21:0;::::1;::::0;14354:820:::1;;14396:19;14430:21:::0;14499:22:::1;14506:7;9592:1;14499:6;:22::i;:::-;14468:53:::0;;-1:-1:-1;14468:53:0;-1:-1:-1;14538:19:0::1;::::0;14641:22:::1;14648:7:::0;9625:1:::1;14641:6;:22::i;:::-;14610:53:::0;;-1:-1:-1;14610:53:0;-1:-1:-1;14856:15:0;;14853:153:::1;;-1:-1:-1::0;;;;;14891:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;:42;;;14952:21:::1;:38:::0;;;::::1;::::0;;14853:153:::1;15023:15:::0;;15020:143:::1;;-1:-1:-1::0;;;;;15058:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:37;;;15114:16:::1;:33:::0;;;::::1;::::0;;15020:143:::1;14354:820;;;;;15218:21;9592:1;15218:14;:21::i;:::-;15194;:45:::0;15279:21:::1;9625:1;15279:14;:21::i;:::-;15250:26;:50:::0;15328:26:::1;:24;:26::i;:::-;15311:14;:43:::0;-1:-1:-1;;;;;15369:21:0;::::1;::::0;15365:193:::1;;15443:21;::::0;-1:-1:-1;;;;;15407:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:33:::1;::::0;::::1;:57:::0;;;;15520:26:::1;::::0;15479:38:::1;::::0;;::::1;:67:::0;15365:193:::1;9592:1:::2;19388:9;:16;:37;;;;9625:1;19408:9;:17;19388:37;:56;;;;9657:1;19429:9;:15;19388:56;19380:86;;;::::0;;-1:-1:-1;;;19380:86:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;19380:86:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;19500:12:0;::::2;19480:17;19500:12:::0;;;:5:::2;:12;::::0;;;;19532;;:17;:41;::::2;;;-1:-1:-1::0;19553:17:0::2;::::0;::::2;::::0;:20;19532:41:::2;:71;;;;-1:-1:-1::0;19577:21:0::2;::::0;::::2;::::0;:26;19532:71:::2;19531:101;;;;19623:9;19607:4;:14;;;:25;19531:101;19523:132;;;::::0;;-1:-1:-1;;;19523:132:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;19523:132:0;;;;;;;;;;;;;::::2;;19671:9;::::0;::::2;::::0;::::2;;::::0;:41:::2;;-1:-1:-1::0;19685:12:0;;:17;:26;::::2;;;;19706:5;19685:26;19668:169;;;19728:17;19739:5;19728:10;:17::i;:::-;19668:169;;;19765:12:::0;;:17;:27;::::2;;;;19787:5;19786:6;19765:27;19762:75;;;19808:9;::::0;::::2;:17:::0;;-1:-1:-1;;19808:17:0::2;::::0;;19762:75:::2;19849:11;::::0;:68:::2;::::0;;-1:-1:-1;;;19849:68:0;;19882:10:::2;19849:68;::::0;::::2;::::0;19903:4:::2;19849:68:::0;;;;;;;;;;;;-1:-1:-1;;;;;19849:11:0;;::::2;::::0;:24:::2;::::0;:68;;;;;::::2;::::0;;;;;;;;;:11:::2;::::0;:68;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;19930:14:0::2;::::0;::::2;:26:::0;;;19982:12;;:24:::2;::::0;19999:6;19982:16:::2;:24::i;:::-;19967:39:::0;;9592:1:::2;20022:18:::0;::::2;20019:325;;;20071:12;::::0;:24:::2;::::0;20088:6;20071:16:::2;:24::i;:::-;20056:12;:39:::0;20019:325:::2;;;9625:1;20115:9;:18;20112:232;;;20169:17;::::0;:29:::2;::::0;20191:6;20169:21:::2;:29::i;:::-;20149:17;:49:::0;20112:232:::2;;;20249:17;::::0;:29:::2;::::0;20271:6;20249:21:::2;:29::i;:::-;20229:17;:49:::0;20308:12:::2;::::0;:24:::2;::::0;20325:6;20308:16:::2;:24::i;:::-;20293:12;:39:::0;20112:232:::2;20369:33;::::0;;-1:-1:-1;;;;;20369:33:0;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;;;;::::2;::::0;;;;;;;::::2;15568:1;14048::::1;;19182:1228:::0;;;;;:::o;23616:2011::-;13116:11;;23671:10;;-1:-1:-1;;;;;13116:11:0;:25;13113:925;;-1:-1:-1;;;;;13160:14:0;;;;;;:5;:14;;;;;:24;;;13157:870;;13301:16;;;13315:1;13301:16;;;;;;;;;13207:20;;;;13277:21;;13301:16;;;13277:21;;13301:16;;;-1:-1:-1;;13493:11:0;;13477:43;;;-1:-1:-1;;;13477:43:0;;-1:-1:-1;;;;;13477:43:0;;;;;;;;;13277:40;;-1:-1:-1;13493:11:0;;;13477:34;;-1:-1:-1;13477:43:0;;;;;;;;;;;;;;13493:11;13477:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13477:43:0;;;;;;;;;;;;;;;;;;;;;13423:7;;13477:43;;;;;;;13423:4;;13428:1;;13423:7;;;;;;;;;;;13439:4;13444:1;13439:7;;;;;;;;;;;;;13448:4;13453:1;13448:7;;;;;;;;;;;;;;;;;13336:184;;;;;;;;;;;;;-1:-1:-1;13336:184:0;-1:-1:-1;13542:16:0;;13539:473;;13676:9;;13665:4;13670:1;13665:7;;;;;;;;;;;;;;:20;;13657:58;;;;;-1:-1:-1;;;13657:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13657:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13738:14:0;;;;;;:5;:14;;;;;:19;;:29;;-1:-1:-1;;13738:29:0;;;;;;;13821:7;;;;13738:14;13821:7;;;;;;;;;;13790:5;:14;13796:7;-1:-1:-1;;;;;13790:14:0;-1:-1:-1;;;;;13790:14:0;;;;;;;;;;;;:28;;:38;;;;13882:4;13887:1;13882:7;;;;;;;;;;;;;;13851:5;:14;13857:7;-1:-1:-1;;;;;13851:14:0;-1:-1:-1;;;;;13851:14:0;;;;;;;;;;;;:28;;:38;;;;13942:4;13947:1;13942:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13912:14:0;;;;;;:5;:14;;;;;;;:27;;:37;13972:20;13918:7;13972:11;:20::i;:::-;13157:870;;;;23706:10:::1;23718:1;14147:14:::0;;;:5:::1;:14;::::0;;;;:22;:26;;;:61:::1;;-1:-1:-1::0;;;;;;14177:14:0;::::1;14207:1;14177:14:::0;;;:5:::1;:14;::::0;;;;:27:::1;;::::0;:31;;14147:61:::1;:113;;;-1:-1:-1::0;;;;;;14225:14:0;::::1;14259:1;14225:14:::0;;;:5:::1;:14;::::0;;;;:31:::1;;::::0;:35;;14147:113:::1;14144:190;;;-1:-1:-1::0;;;;;;14298:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:24:::1;;::::0;14144:190:::1;-1:-1:-1::0;;;;;14358:21:0;::::1;::::0;14354:820:::1;;14396:19;14430:21:::0;14499:22:::1;14506:7;9592:1;14499:6;:22::i;:::-;14468:53:::0;;-1:-1:-1;14468:53:0;-1:-1:-1;14538:19:0::1;::::0;14641:22:::1;14648:7:::0;9625:1:::1;14641:6;:22::i;:::-;14610:53:::0;;-1:-1:-1;14610:53:0;-1:-1:-1;14856:15:0;;14853:153:::1;;-1:-1:-1::0;;;;;14891:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;:42;;;14952:21:::1;:38:::0;;;::::1;::::0;;14853:153:::1;15023:15:::0;;15020:143:::1;;-1:-1:-1::0;;;;;15058:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:37;;;15114:16:::1;:33:::0;;;::::1;::::0;;15020:143:::1;14354:820;;;;;15218:21;9592:1;15218:14;:21::i;:::-;15194;:45:::0;15279:21:::1;9625:1;15279:14;:21::i;:::-;15250:26;:50:::0;15328:26:::1;:24;:26::i;:::-;15311:14;:43:::0;-1:-1:-1;;;;;15369:21:0;::::1;::::0;15365:193:::1;;15443:21;::::0;-1:-1:-1;;;;;15407:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:33:::1;::::0;::::1;:57:::0;;;;15520:26:::1;::::0;15479:38:::1;::::0;;::::1;:67:::0;15365:193:::1;23765:10:::2;23739:17;23759::::0;;;:5:::2;:17;::::0;;;;23807:14:::2;::::0;::::2;::::0;23856:12;;:22;-1:-1:-1;23856:22:0::2;23834:80;;;::::0;;-1:-1:-1;;;23834:80:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;23834:80:0;;;;;;;;;;;;;::::2;;23931:10:::0;;23927:1693:::2;;23958:18;23979:23;23991:10;23979:11;:23::i;:::-;23958:44;;24017:21;24073:6;24060:10;:19;24057:134;;;24115:22;:10:::0;24130:6;24115:14:::2;:22::i;:::-;24099:38;;24169:6;24156:19;;24057:134;24210:9;::::0;::::2;::::0;::::2;;24207:129;;;24239:22;::::0;::::2;:38:::0;;;24317:3:::2;24296:18;::::0;::::2;:24:::0;24207:129:::2;24352:19;24374:22;:6:::0;24385:10;24374::::2;:22::i;:::-;24426:12:::0;;24352:44;;-1:-1:-1;24426:24:0::2;::::0;24443:6;24426:16:::2;:24::i;:::-;24411:39:::0;;9592:1:::2;24468:18:::0;::::2;24465:354;;;24521:12;::::0;:24:::2;::::0;24538:6;24521:16:::2;:24::i;:::-;24506:12;:39:::0;24465:354:::2;;;9625:1;24570:9;:18;24566:253;;;24628:17;::::0;:29:::2;::::0;24650:6;24628:21:::2;:29::i;:::-;24608:17;:49:::0;24566:253:::2;;;24711:12;::::0;:24:::2;::::0;24728:6;24711:16:::2;:24::i;:::-;24696:12;:39:::0;24774:17:::2;::::0;:29:::2;::::0;24796:6;24774:21:::2;:29::i;:::-;24754:17;:49:::0;24566:253:::2;24838:22;::::0;::::2;;::::0;:42:::2;;;9592:1;24864:9;:16;24838:42;24835:735;;;24903:15:::0;;24900:188:::2;;24942:11;::::0;:54:::2;::::0;;-1:-1:-1;;;24942:54:0;;24971:10:::2;24942:54;::::0;::::2;::::0;;;;;;;;;-1:-1:-1;;;;;24942:11:0;;::::2;::::0;:20:::2;::::0;:54;;;;;::::2;::::0;;;;;;;;;:11:::2;::::0;:54;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;25024:44:0::2;::::0;;25033:10:::2;25024:44:::0;;24942:54:::2;25024:44:::0;::::2;::::0;;;;;;;;;;;::::2;::::0;;;;;;;::::2;24900:188;25109:14:::0;;25106:165:::2;;25147:37;25161:10;25173;25147:13;:37::i;:::-;25212:39;::::0;;25217:10:::2;25212:39:::0;;::::2;::::0;::::2;::::0;;;;;;;;;;;::::2;::::0;;;;;;;::::2;25106:165;24835:735;;;25309:17;::::0;::::2;:32:::0;;;::::2;::::0;;25360:21:::2;::::0;::::2;:35:::0;;;::::2;::::0;;25436:3:::2;25416:17;::::0;::::2;:23:::0;25460:21:::2;:31:::0;;;::::2;::::0;;25515:39:::2;::::0;;25524:10:::2;25515:39:::0;;::::2;::::0;::::2;::::0;;;;;;;;;;;::::2;::::0;;;;;;;::::2;24835:735;-1:-1:-1::0;;25584:10:0::2;:24:::0;;;;::::2;::::0;;23927:1693:::2;15568:1;;14048::::1;;23616:2011:::0;;:::o;11317:24::-;;;-1:-1:-1;;;;;11317:24:0;;:::o;29914:100::-;29994:11;;-1:-1:-1;;;;;29994:11:0;29914:100;:::o;28740:86::-;28808:10;;28740:86;:::o;32107:111::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;32182:21:::1;:28:::0;32107:111::o;16345:96::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;16413:8:::1;:20:::0;16345:96::o;7343:148::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;7450:1:::1;7434:6:::0;;7413:40:::1;::::0;-1:-1:-1;;;;;7434:6:0;;::::1;::::0;7413:40:::1;::::0;7450:1;;7413:40:::1;7481:1;7464:19:::0;;-1:-1:-1;;;;;;7464:19:0::1;::::0;;7343:148::o;9834:25::-;;;;:::o;28990:154::-;29046:7;29091:12;;29073:15;:30;:63;;29124:12;;29073:63;;;29106:15;29073:63;29066:70;;28990:154;:::o;10404:40::-;;;;:::o;29152:754::-;29215:7;29235:14;9592:1;29252:9;:18;:53;;29288:17;;29252:53;;;29273:12;;29252:53;29235:70;-1:-1:-1;29328:11:0;29324:122;;9592:1;29363:9;:18;:71;;29408:26;;29363:71;;;29384:21;;29363:71;29356:78;;;;;29324:122;9592:1;29459:9;:18;29456:443;;;29500:167;29544:108;29639:12;;29544:90;29629:4;29544:80;29613:10;;29544:46;29575:14;;29544:26;:24;:26::i;:108::-;29500:21;;;:25;:167::i;29456:443::-;29705:182;29754:118;29854:17;;29754:95;29844:4;29754:85;29823:15;;29754:46;29785:14;;29754:26;:24;:26::i;:118::-;29705:26;;;:30;:182::i;11287:23::-;;;;:::o;6701:79::-;6739:7;6766:6;-1:-1:-1;;;;;6766:6:0;6701:79;:::o;31338:171::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31412:25:0;::::1;::::0;31409:93:::1;;31453:10;:37:::0;;-1:-1:-1;;;;;;31453:37:0::1;-1:-1:-1::0;;;;;31453:37:0;::::1;;::::0;;31409:93:::1;31338:171:::0;:::o;9706:38::-;;;;:::o;9866:30::-;;;;:::o;31517:374::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31609:12:0;;::::1;31589:17;31609:12:::0;;;:5:::1;:12;::::0;;;;;;;31651;;31676:11:::1;::::0;:35;;-1:-1:-1;;;31676:35:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;31609:12;;31651;;31676:11;::::1;::::0;:20:::1;::::0;:35;;;;;31609:12;;31676:35;;;;;;;;;:11;:35;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;31729:32:0::1;::::0;;-1:-1:-1;;;;;31729:32:0;::::1;::::0;;31676:35:::1;31729:32:::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;31817:1:0::1;31802:16:::0;;;31829:15:::1;::::0;::::1;:19:::0;;;31859:20:::1;::::0;;::::1;:24:::0;-1:-1:-1;31517:374:0:o;11118:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10066:58::-;;;;:::o;28009:607::-;-1:-1:-1;;;;;28106:14:0;;28067:7;28106:14;;;:5;:14;;;;;28135:9;;;;;;28134:10;;:29;;-1:-1:-1;28148:12:0;;:15;28134:29;28131:68;;;28186:1;28179:8;;;;;28131:68;28209:15;28227:68;28283:11;;28227:51;28270:7;28246:4;:18;;;28228:15;:36;28227:42;;:51;;;;:::i;:68::-;28209:86;;28327:7;28316;:18;;:38;;28347:7;28316:38;;;28337:7;28316:38;28411:22;;;;28394:12;;28306:48;;-1:-1:-1;28367:24:0;;28394:40;;:16;:40::i;:::-;28367:67;-1:-1:-1;28455:15:0;28473:70;28500:42;28534:7;28500:29;28367:67;28521:7;28500:20;:29::i;:42::-;28473:22;;;;;:26;:70::i;:::-;28571:12;;28455:88;;-1:-1:-1;28561:22:0;;:47;;28601:7;28561:47;;;28586:12;;28561:47;28554:54;28009:607;-1:-1:-1;;;;;;28009:607:0:o;11538:31::-;;;;:::o;16552:87::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;16615:8:::1;:16:::0;;-1:-1:-1;;;;;;16615:16:0::1;-1:-1:-1::0;;;;;16615:16:0;;;::::1;::::0;;;::::1;::::0;;16552:87::o;32397:169::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;32524:10:::1;-1:-1:-1::0;;;;;32510:34:0::1;;32545:3;32550:7;32510:48;;;;;;;;;;;;;-1:-1:-1::0;;;;;32510:48:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;;32397:169:0:o;9667:30::-;;;;:::o;9952:45::-;;;;:::o;28834:148::-;28894:7;9592:1;28921:9;:18;:53;;28957:17;;28921:53;;;-1:-1:-1;;28942:12:0;;;28834:148::o;10201:29::-;;;;:::o;9753:36::-;;;;:::o;25635:971::-;13116:11;;25685:10;;-1:-1:-1;;;;;13116:11:0;:25;13113:925;;-1:-1:-1;;;;;13160:14:0;;;;;;:5;:14;;;;;:24;;;13157:870;;13301:16;;;13315:1;13301:16;;;;;;;;;13207:20;;;;13277:21;;13301:16;;;13277:21;;13301:16;;;-1:-1:-1;;13493:11:0;;13477:43;;;-1:-1:-1;;;13477:43:0;;-1:-1:-1;;;;;13477:43:0;;;;;;;;;13277:40;;-1:-1:-1;13493:11:0;;;13477:34;;-1:-1:-1;13477:43:0;;;;;;;;;;;;;;13493:11;13477:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13477:43:0;;;;;;;;;;;;;;;;;;;;;13423:7;;13477:43;;;;;;;13423:4;;13428:1;;13423:7;;;;;;;;;;;13439:4;13444:1;13439:7;;;;;;;;;;;;;13448:4;13453:1;13448:7;;;;;;;;;;;;;;;;;13336:184;;;;;;;;;;;;;-1:-1:-1;13336:184:0;-1:-1:-1;13542:16:0;;13539:473;;13676:9;;13665:4;13670:1;13665:7;;;;;;;;;;;;;;:20;;13657:58;;;;;-1:-1:-1;;;13657:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13657:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13738:14:0;;;;;;:5;:14;;;;;:19;;:29;;-1:-1:-1;;13738:29:0;;;;;;;13821:7;;;;13738:14;13821:7;;;;;;;;;;13790:5;:14;13796:7;-1:-1:-1;;;;;13790:14:0;-1:-1:-1;;;;;13790:14:0;;;;;;;;;;;;:28;;:38;;;;13882:4;13887:1;13882:7;;;;;;;;;;;;;;13851:5;:14;13857:7;-1:-1:-1;;;;;13851:14:0;-1:-1:-1;;;;;13851:14:0;;;;;;;;;;;;:28;;:38;;;;13942:4;13947:1;13942:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13912:14:0;;;;;;:5;:14;;;;;;;:27;;:37;13972:20;13918:7;13972:11;:20::i;:::-;13157:870;;;;25750:10:::1;25724:17;25744::::0;;;:5:::1;:17;::::0;;;;25780::::1;::::0;::::1;::::0;:21;;;:50:::1;;;25829:1;25805:4;:21;;;:25;25780:50;25772:88;;;::::0;;-1:-1:-1;;;25772:88:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25772:88:0;;;;;;;;;;;;;::::1;;25929:10;::::0;:37:::1;::::0;;-1:-1:-1;;;25929:37:0;;25960:4:::1;25929:37;::::0;::::1;::::0;;;25881:21:::1;::::0;-1:-1:-1;;;;;25929:10:0::1;::::0;:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;:10;:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25929:37:0;25905:91:::1;::::0;;-1:-1:-1;;;25905:91:0;;;;-1:-1:-1;;;;;25905:89:0;;::::1;::::0;::::1;::::0;:91:::1;::::0;;::::1;::::0;25929:37:::1;::::0;25905:91;;;;;;;;:89;:91;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25905:91:0;26065:17:::1;::::0;::::1;::::0;26047:12:::1;::::0;26035:6:::1;::::0;25905:91;;-1:-1:-1;26065:17:0;;26017:43:::1;::::0;26047:12;26017:25:::1;::::0;25905:91;;26017:17:::1;:25::i;:43::-;:65;;:104;;;-1:-1:-1::0;26099:22:0::1;::::0;::::1;;26017:104;26009:137;;;::::0;;-1:-1:-1;;;26009:137:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26009:137:0;;;;;;;;;;;;;::::1;;26162:17;::::0;::::1;::::0;:21;26159:214:::1;;26199:11;::::0;26241:17:::1;::::0;::::1;::::0;26199:60:::1;::::0;;-1:-1:-1;;;26199:60:0;;26228:10:::1;26199:60;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;26199:11:0;;::::1;::::0;:20:::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;:11:::1;::::0;:60;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;26300:17:0::1;::::0;::::1;::::0;26279:46:::1;::::0;;26288:10:::1;26279:46:::0;;26199:60:::1;26279:46:::0;::::1;::::0;;;;9625:1:::1;26279:46:::0;;;;;::::1;::::0;;;;;;;::::1;26360:1;26340:17;::::0;::::1;:21:::0;26159:214:::1;26388:21;::::0;::::1;::::0;:25;26385:214:::1;;26429:48;26443:10;26455:4;:21;;;26429:13;:48::i;:::-;26514:21;::::0;::::1;::::0;26497:46:::1;::::0;;26502:10:::1;26497:46:::0;;::::1;::::0;::::1;::::0;;;;9625:1:::1;26497:46:::0;;;;;::::1;::::0;;;;;;;::::1;26582:1;26558:21;::::0;::::1;:25:::0;14048:1:::1;;25635:971:::0;:::o;9798:29::-;;;;:::o;11379:32::-;;;-1:-1:-1;;;;;11379:32:0;;:::o;10133:61::-;;;;:::o;11205:40::-;;;;:::o;28624:108::-;28703:21;;28624:108;:::o;7646:244::-;6923:12;:10;:12::i;:::-;6913:6;;-1:-1:-1;;;;;6913:6:0;;;:22;;;6905:67;;;;;-1:-1:-1;;;6905:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;7735:22:0;::::1;7727:73;;;;-1:-1:-1::0;;;7727:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7837:6;::::0;;7816:38:::1;::::0;-1:-1:-1;;;;;7816:38:0;;::::1;::::0;7837:6;::::1;::::0;7816:38:::1;::::0;::::1;7865:6;:17:::0;;-1:-1:-1;;;;;;7865:17:0::1;-1:-1:-1::0;;;;;7865:17:0;;;::::1;::::0;;;::::1;::::0;;7646:244::o;10453:29::-;;;-1:-1:-1;;;;;10453:29:0;;:::o;11418:32::-;;;-1:-1:-1;;;;;11418:32:0;;:::o;11165:31::-;;;;:::o;11576:36::-;;;;:::o;23105:378::-;13116:11;;23154:10;;-1:-1:-1;;;;;13116:11:0;:25;13113:925;;-1:-1:-1;;;;;13160:14:0;;;;;;:5;:14;;;;;:24;;;13157:870;;13301:16;;;13315:1;13301:16;;;;;;;;;13207:20;;;;13277:21;;13301:16;;;13277:21;;13301:16;;;-1:-1:-1;;13493:11:0;;13477:43;;;-1:-1:-1;;;13477:43:0;;-1:-1:-1;;;;;13477:43:0;;;;;;;;;13277:40;;-1:-1:-1;13493:11:0;;;13477:34;;-1:-1:-1;13477:43:0;;;;;;;;;;;;;;13493:11;13477:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13477:43:0;;;;;;;;;;;;;;;;;;;;;13423:7;;13477:43;;;;;;;13423:4;;13428:1;;13423:7;;;;;;;;;;;13439:4;13444:1;13439:7;;;;;;;;;;;;;13448:4;13453:1;13448:7;;;;;;;;;;;;;;;;;13336:184;;;;;;;;;;;;;-1:-1:-1;13336:184:0;-1:-1:-1;13542:16:0;;13539:473;;13676:9;;13665:4;13670:1;13665:7;;;;;;;;;;;;;;:20;;13657:58;;;;;-1:-1:-1;;;13657:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13657:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13738:14:0;;;;;;:5;:14;;;;;:19;;:29;;-1:-1:-1;;13738:29:0;;;;;;;13821:7;;;;13738:14;13821:7;;;;;;;;;;13790:5;:14;13796:7;-1:-1:-1;;;;;13790:14:0;-1:-1:-1;;;;;13790:14:0;;;;;;;;;;;;:28;;:38;;;;13882:4;13887:1;13882:7;;;;;;;;;;;;;;13851:5;:14;13857:7;-1:-1:-1;;;;;13851:14:0;-1:-1:-1;;;;;13851:14:0;;;;;;;;;;;;:28;;:38;;;;13942:4;13947:1;13942:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13912:14:0;;;;;;:5;:14;;;;;;;:27;;:37;13972:20;13918:7;13972:11;:20::i;:::-;13157:870;;;;23189:10:::1;23201:1;14147:14:::0;;;:5:::1;:14;::::0;;;;:22;:26;;;:61:::1;;-1:-1:-1::0;;;;;;14177:14:0;::::1;14207:1;14177:14:::0;;;:5:::1;:14;::::0;;;;:27:::1;;::::0;:31;;14147:61:::1;:113;;;-1:-1:-1::0;;;;;;14225:14:0;::::1;14259:1;14225:14:::0;;;:5:::1;:14;::::0;;;;:31:::1;;::::0;:35;;14147:113:::1;14144:190;;;-1:-1:-1::0;;;;;;14298:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:24:::1;;::::0;14144:190:::1;-1:-1:-1::0;;;;;14358:21:0;::::1;::::0;14354:820:::1;;14396:19;14430:21:::0;14499:22:::1;14506:7;9592:1;14499:6;:22::i;:::-;14468:53:::0;;-1:-1:-1;14468:53:0;-1:-1:-1;14538:19:0::1;::::0;14641:22:::1;14648:7:::0;9625:1:::1;14641:6;:22::i;:::-;14610:53:::0;;-1:-1:-1;14610:53:0;-1:-1:-1;14856:15:0;;14853:153:::1;;-1:-1:-1::0;;;;;14891:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;:42;;;14952:21:::1;:38:::0;;;::::1;::::0;;14853:153:::1;15023:15:::0;;15020:143:::1;;-1:-1:-1::0;;;;;15058:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:37;;;15114:16:::1;:33:::0;;;::::1;::::0;;15020:143:::1;14354:820;;;;;15218:21;9592:1;15218:14;:21::i;:::-;15194;:45:::0;15279:21:::1;9625:1;15279:14;:21::i;:::-;15250:26;:50:::0;15328:26:::1;:24;:26::i;:::-;15311:14;:43:::0;-1:-1:-1;;;;;15369:21:0;::::1;::::0;15365:193:::1;;15443:21;::::0;-1:-1:-1;;;;;15407:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:33:::1;::::0;::::1;:57:::0;;;;15520:26:::1;::::0;15479:38:::1;::::0;;::::1;:67:::0;15365:193:::1;23257:10:::2;23231:17;23251::::0;;;:5:::2;:17;::::0;;;;23287:9:::2;::::0;::::2;::::0;::::2;;:17;;::::0;::::2;;;;23279:46;;;::::0;;-1:-1:-1;;;23279:46:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;23279:46:0;;;;;;;;;;;;;::::2;;23344:12:::0;;23336:38:::2;;;::::0;;-1:-1:-1;;;23336:38:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;23336:38:0;;;;;;;;;;;;;::::2;;23387:9;::::0;::::2;:16:::0;;-1:-1:-1;;23387:16:0::2;::::0;::::2;;::::0;;;::::2;::::0;;;-1:-1:-1;;23435:3:0::2;23414:18;::::0;::::2;:24:::0;-1:-1:-1;;23449:22:0::2;::::0;;::::2;:26:::0;23105:378::o;5328:106::-;5416:10;5328:106;:::o;26839:899::-;26940:1;14147:14;;;:5;:14;;;:22;26944:9;;14147:26;;;:61;;-1:-1:-1;;;;;;14177:14:0;;14207:1;14177:14;;;:5;:14;;;;;:27;;;:31;;14147:61;:113;;;-1:-1:-1;;;;;;14225:14:0;;14259:1;14225:14;;;:5;:14;;;;;:31;;;:35;;14147:113;14144:190;;;-1:-1:-1;;;;;;14298:14:0;;;;;;:5;:14;;;;;:24;;;14144:190;-1:-1:-1;;;;;14358:21:0;;;14354:820;;14396:19;14430:21;14499:22;14506:7;9592:1;14499:6;:22::i;:::-;14468:53;;-1:-1:-1;14468:53:0;-1:-1:-1;14538:19:0;;14641:22;14648:7;9625:1;14641:6;:22::i;:::-;14610:53;;-1:-1:-1;14610:53:0;-1:-1:-1;14856:15:0;;14853:153;;-1:-1:-1;;;;;14891:28:0;;;;;;:19;:28;;;;;:42;;;14952:21;:38;;;;;;14853:153;15023:15;;15020:143;;-1:-1:-1;;;;;15058:23:0;;;;;;:14;:23;;;;;:37;;;15114:16;:33;;;;;;15020:143;14354:820;;;;;15218:21;9592:1;15218:14;:21::i;:::-;15194;:45;15279:21;9625:1;15279:14;:21::i;:::-;15250:26;:50;15328:26;:24;:26::i;:::-;15311:14;:43;-1:-1:-1;;;;;15369:21:0;;;15365:193;;15443:21;;-1:-1:-1;;;;;15407:14:0;;;;;;:5;:14;;;;;:33;;;:57;;;;15520:26;;15479:38;;;;:67;15365:193;26988:12:::1;;26969:15;:31;26965:670;;9592:1;27020:9;:18;27017:167;;;27082:6;::::0;27071:18:::1;::::0;:6;;:10:::1;:18::i;:::-;27058:10;:31:::0;27017:167:::1;;;27161:6;::::0;27150:18:::1;::::0;:6;;:10:::1;:18::i;:::-;27132:15;:36:::0;27017:167:::1;26965:670;;;27236:12;::::0;27216:17:::1;::::0;27236:33:::1;::::0;27253:15:::1;27236:16;:33::i;:::-;27216:53;;9592:1;27287:9;:18;27284:326;;;27325:16;27344:25;27358:10;;27344:9;:13;;:25;;;;:::i;:::-;27426:6;::::0;27325:44;;-1:-1:-1;27401:32:0::1;::::0;:20:::1;:6:::0;27325:44;27401:10:::1;:20::i;:32::-;27388:10;:45:::0;-1:-1:-1;27284:326:0::1;;;27476:16;27495:30;27509:15;;27495:9;:13;;:30;;;;:::i;:::-;27587:6;::::0;27476:49;;-1:-1:-1;27562:32:0::1;::::0;:20:::1;:6:::0;27476:49;27562:10:::1;:20::i;:32::-;27544:15;:50:::0;-1:-1:-1;27284:326:0::1;26965:670;;27662:15;27645:14;:32:::0;;;27723:6:::1;::::0;27703:27:::1;::::0;27662:15;27703:19:::1;:27::i;:::-;27688:12;:42:::0;-1:-1:-1;;;;26839:899:0:o;789:136::-;847:7;874:43;878:1;881;874:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;867:50;789:136;-1:-1:-1;;;789:136:0:o;1679:471::-;1737:7;1982:6;1978:47;;-1:-1:-1;2012:1:0;2005:8;;1978:47;2049:5;;;2053:1;2049;:5;:1;2073:5;;;;;:10;2065:56;;;;-1:-1:-1;;;2065:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2626:132;2684:7;2711:39;2715:1;2718;2711:39;;;;;;;;;;;;;;;;;:3;:39::i;22652:445::-;22695:19;22725:21;22790:25;22797:10;9592:1;22790:6;:25::i;:::-;22759:56;;-1:-1:-1;22759:56:0;-1:-1:-1;22828:19:0;;22923:25;22930:10;9625:1;22923:6;:25::i;:::-;22892:56;;-1:-1:-1;22892:56:0;-1:-1:-1;22961:128:0;22986:10;23011:11;23024:13;22892:56;;22961:10;:128::i;:::-;22652:445;;;;:::o;15585:644::-;16194:11;;16178:43;;;-1:-1:-1;;;16178:43:0;;-1:-1:-1;;;;;16178:43:0;;;;;;;;;16194:11;;;;;16178:34;;:43;;;;;;;;;;;;;;16194:11;16178:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16178:43:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15664:14:0;;;;;;;:5;:14;;;16178:43;15664:14;;;15927:27;;;15645:576;;;;15870:38;;;15645:576;;;;15781:30;;;15645:576;15705:24;;;15645:576;;;;;;15585:644::o;20418:265::-;20479:8;;-1:-1:-1;;;20479:8:0;;;;20471:33;;;;;-1:-1:-1;;;20471:33:0;;;;;;;;;;;;-1:-1:-1;;;20471:33:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20535:12:0;;20515:17;20535:12;;;:5;:12;;;;;20558:9;;;:16;;-1:-1:-1;;20558:16:0;20570:4;20558:16;;;20610:18;20541:5;20610:11;:18::i;:::-;20585:22;;;:43;20660:15;20639:18;;;;:36;-1:-1:-1;20418:265:0:o;325:181::-;383:7;415:5;;;439:6;;;;431:46;;;;;-1:-1:-1;;;431:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;22341:157;22414:10;;:76;;;-1:-1:-1;;;22414:76:0;;-1:-1:-1;;;;;22414:76:0;;;;;;;;;;;;;;;:10;;;;;:24;;:76;;;;;:10;;:76;;;;;;;:10;;:76;;;;;;;;;;;;;;;;;;;;;;;;;;1228:192;1314:7;1350:12;1342:6;;;;1334:29;;;;-1:-1:-1;;;1334:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1386:5:0;;;1228:192::o;3254:278::-;3340:7;3375:12;3368:5;3360:28;;;;-1:-1:-1;;;3360:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3399:9;3415:1;3411;:5;;;;;;;3254:278;-1:-1:-1;;;;;3254:278:0:o;20691:1642::-;-1:-1:-1;;;;;20885:18:0;;20865:17;20885:18;;;:5;:18;;;;;20950:8;;20885:18;;20865:17;20934:38;;20964:7;;20934:25;;:11;;:15;:25::i;:38::-;20914:58;;20983:22;21008:38;21038:7;21008:25;21024:8;;21008:11;:15;;:25;;;;:::i;:38::-;20983:63;-1:-1:-1;21062:15:0;;21059:296;;21093:11;;-1:-1:-1;;;;;21093:11:0;:20;21114:11;21127:26;:11;21143:9;21127:15;:26::i;:::-;21093:61;;;;;;;;;;;;;-1:-1:-1;;;;;21093:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21172:13:0;;21169:77;;21204:11;;21225:9;;21204:42;;;-1:-1:-1;;;21204:42:0;;-1:-1:-1;;;;;21225:9:0;;;21204:42;;;;;;;;;;;;:11;;;;;:20;;:42;;;;;;;;;;;;;;:11;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21169:77:0;21279:15;;;;:64;;21317:11;21279:19;:64::i;:::-;21261:15;;;:82;21059:296;21370:15;;21367:362;;21401:16;;-1:-1:-1;;;;;21401:16:0;:25;21427:11;21440:31;:11;21456:14;21440:15;:31::i;:::-;21401:71;;;;;;;;;;;;;-1:-1:-1;;;;;21401:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21504:18:0;;21501:92;;21541:16;;21567:9;;21541:52;;;-1:-1:-1;;;21541:52:0;;-1:-1:-1;;;;;21567:9:0;;;21541:52;;;;;;;;;;;;:16;;;;;:25;;:52;;;;;;;;;;;;;;:16;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21501:92:0;21648:20;;;;:69;;21691:11;21648:24;:69::i;:::-;21625:20;;;:92;21367:362;21766:1;21752:11;:15;:34;;;;21785:1;21771:11;:15;21752:34;21749:122;;;21807:52;;;-1:-1:-1;;;;;21807:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;21749:122;21886:17;;21883:146;;21984:16;:33;;;;;;21883:146;22042:17;;22039:151;;22140:21;:38;;;;;;22039:151;-1:-1:-1;;22221:15:0;22200:18;;;;;:36;-1:-1:-1;;;;;;;;;22247:27:0;22277:1;22247:27;;;:14;:27;;;;;;;;:31;;;22289:19;:32;;;;;:36;20691:1642::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://51a03b017c430dd61805192cd5ca17bbad0d9e5d98b2a0e2c3839ac65723f792

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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.