ETH Price: $3,452.74 (-0.99%)
Gas: 3 Gwei

Contract

0xCca75B648097b7D378B293Af702Ce328a630e5E7
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Transfer Ownersh...133275542021-09-30 14:16:481005 days ago1633011408IN
0xCca75B64...8a630e5E7
0 ETH0.0020950372.9825685
Withdraw Unfreez...133124182021-09-28 5:24:421008 days ago1632806682IN
0xCca75B64...8a630e5E7
0 ETH0.0098028189.208183
Withdraw Unfreez...132951052021-09-25 12:58:021010 days ago1632574682IN
0xCca75B64...8a630e5E7
0 ETH0.0020498127.57689951
Unfreeze132918022021-09-25 0:52:071011 days ago1632531127IN
0xCca75B64...8a630e5E7
0 ETH0.0058455941.35574395
Unfreeze132837842021-09-23 19:12:341012 days ago1632424354IN
0xCca75B64...8a630e5E7
0 ETH0.0086714265.23254886
Withdraw Unfreez...132711172021-09-21 19:50:201014 days ago1632253820IN
0xCca75B64...8a630e5E7
0 ETH0.0105873196.3472506
Withdraw Unfreez...132689872021-09-21 11:55:441014 days ago1632225344IN
0xCca75B64...8a630e5E7
0 ETH0.0020575527.68095676
Withdraw Unfreez...132677502021-09-21 7:28:141014 days ago1632209294IN
0xCca75B64...8a630e5E7
0 ETH0.0047635743.34975982
Unfreeze132592532021-09-19 23:41:411016 days ago1632094901IN
0xCca75B64...8a630e5E7
0 ETH0.0078632951.19333728
Withdraw Unfreez...132388232021-09-16 20:04:541019 days ago1631822694IN
0xCca75B64...8a630e5E7
0 ETH0.01552056141.24111169
Withdraw Unfreez...132339662021-09-16 2:10:111020 days ago1631758211IN
0xCca75B64...8a630e5E7
0 ETH0.0063558185.50688563
Unfreeze132331042021-09-15 22:50:241020 days ago1631746224IN
0xCca75B64...8a630e5E7
0 ETH0.0134111587.32582178
Unfreeze132240542021-09-14 13:10:491021 days ago1631625049IN
0xCca75B64...8a630e5E7
0 ETH0.0100557554.49919425
Unfreeze132193662021-09-13 19:48:351022 days ago1631562515IN
0xCca75B64...8a630e5E7
0 ETH0.0073623647.93208819
Unfreeze132123352021-09-12 17:36:391023 days ago1631468199IN
0xCca75B64...8a630e5E7
0 ETH0.0095353757.14972926
Unfreeze132094282021-09-12 6:49:241023 days ago1631429364IN
0xCca75B64...8a630e5E7
0 ETH0.0061916435.15185239
Unfreeze132074792021-09-11 23:41:531024 days ago1631403713IN
0xCca75B64...8a630e5E7
0 ETH0.0067728949.61826016
Set Exit131868372021-09-08 18:43:171027 days ago1631126597IN
0xCca75B64...8a630e5E7
0 ETH0.01144571163.10017262
Unfreeze131868362021-09-08 18:42:461027 days ago1631126566IN
0xCca75B64...8a630e5E7
0 ETH0.02230333145.21534948
Unfreeze131865072021-09-08 17:33:521027 days ago1631122432IN
0xCca75B64...8a630e5E7
0 ETH0.02299991183.80373046
Unfreeze131768162021-09-07 5:34:091029 days ago1630992849IN
0xCca75B64...8a630e5E7
0 ETH0.0136936191.44375938
Withdraw Unfreez...131746212021-09-06 21:33:281029 days ago1630964008IN
0xCca75B64...8a630e5E7
0 ETH0.01348499122.71688256
Withdraw Unfreez...131638852021-09-05 5:37:511031 days ago1630820271IN
0xCca75B64...8a630e5E7
0 ETH0.0109254699.42458278
Unfreeze131574902021-09-04 6:04:301031 days ago1630735470IN
0xCca75B64...8a630e5E7
0 ETH0.0156104688.60722534
Withdraw Unfreez...131571012021-09-04 4:37:201032 days ago1630730240IN
0xCca75B64...8a630e5E7
0 ETH0.0091431100
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-26
*/

/**
 *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 = 522980160138;

    uint256 public _totalSupply = 166595040647474093217766 ;
    uint256 public _totalSupplyYield = 133848289735327725732704 ;

    uint256 public _totalYieldWithdrawed = 14715976256875355924591;
    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;

    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"}]

608060405262093a806001556201518060029081556262e080600355600060078190556479c40bf28a600855692347229fba85f783d7e6600955691c57ee29d3a5fc594360600a5569031dc132250b5a2b686f600b55600c55600d805460ff19169055600e553480156200007257600080fd5b50604051620044ee380380620044ee83398181016040526101008110156200009957600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e0909701519596949593949293919290916000620000d8620001c1565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601980546001600160a01b03199081166001600160a01b039a8b1617909155601a80548216988a1698909817909755601b8054881696891696909617909555600f80548716928816929092179091556017929092556018805485169186169190911760ff60a01b1916600160a01b921515929092029190911790556010805433908416179055601c8054909216921691909117905542601655620001c5565b3390565b61431980620001d56000396000f3fe608060405234801561001057600080fd5b50600436106103d95760003560e01c80637b0a47ee1161020a578063b4d1d79511610125578063d177804b116100b8578063f77c479111610087578063f77c479114610a16578063f7c618c114610a1e578063f90ce5ba14610a26578063f9114bd614610a2e578063fea10a5f14610a36576103d9565b8063d177804b146109d8578063ebe2b12b146109e0578063f2bbd86c146109e8578063f2fde38b146109f0576103d9565b8063c04b5f65116100f4578063c04b5f65146109b8578063c1985d3b146109c0578063c8f33c91146109c8578063cc7a262e146109d0576103d9565b8063b4d1d79514610983578063b7b1f2101461098b578063bd85b03914610993578063bfc84ff9146109b0576103d9565b8063a630e99d1161019d578063b004e03b1161016c578063b004e03b146108f9578063b2552acb1461091f578063b3ab15fb14610927578063b3f5e0081461094d576103d9565b8063a630e99d14610836578063a81119b81461083e578063a87430ba14610864578063ae342141146108f1576103d9565b806388d19f1b116101d957806388d19f1b146107f85780638da5cb5b1461080057806392eefe9b146108085780639c511ad41461082e576103d9565b80637b0a47ee146107c357806380faa57d146107cb5780638544ab30146107d3578063874c120b146107db576103d9565b80634e71d92d116102fa57806365f203551161028d57806369dda74c1161025c57806369dda74c146107795780636d0d2067146107815780636fadc3ca1461079e578063715018a6146107bb576103d9565b806365f20355146107125780636623fc461461074c578063698a58971461076957806369940d7914610771576103d9565b806360551d9d116102c957806360551d9d146106bd57806360c6cdac146106dc57806361004f39146106e457806364997e01146106ec576103d9565b80634e71d92d14610659578063570ca735146106615780635d4c3224146106695780635d9966ac14610688576103d9565b806326bfae3e116103725780633eaaf86b116103415780633eaaf86b146105f557806340878f58146105fd578063417314591461060557806343a0d0661461062e576103d9565b806326bfae3e1461059857806330503c4e146105a05780633101d5af146105a85780633e491d47146105b0576103d9565b80631959a002116103ae5780631959a0021461048d5780631a26af7a146105355780631ea7dd5714610551578063246132f914610575576103d9565b80628cc262146103de578062fdd58e1461041657806304ff336c146104425780631594500614610461575b600080fd5b610404600480360360208110156103f457600080fd5b50356001600160a01b0316610a55565b60408051918252519081900360200190f35b6104046004803603604081101561042c57600080fd5b506001600160a01b038135169060200135610a85565b61045f6004803603602081101561045857600080fd5b5035610acc565b005b61045f6004803603604081101561047757600080fd5b50803590602001356001600160a01b0316610b29565b6104b3600480360360208110156104a357600080fd5b50356001600160a01b0316610bcf565b60405180876101e080838360005b838110156104d95781810151838201526020016104c1565b50505050905001866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b031681526020018215158152602001965050505050505060405180910390f35b61053d610e87565b604080519115158252519081900360200190f35b610559610e90565b604080516001600160a01b039092168252519081900360200190f35b61045f6004803603604081101561058b57600080fd5b5080359060200135610e9f565b61053d610f39565b610559610f49565b61045f610f58565b6105dc600480360360408110156105c657600080fd5b506001600160a01b03813516906020013561103a565b6040805192835260208301919091528051918290030190f35b61040461117e565b61045f611184565b61045f6004803603606081101561061b57600080fd5b50803590602081013590604001356111a7565b61045f6004803603606081101561064457600080fd5b5080359060208101359060400135151561120d565b61045f611219565b610559611620565b61045f6004803603602081101561067f57600080fd5b5035151561162f565b61045f600480360360a081101561069e57600080fd5b508035906020810135906040810135906060810135906080013561169a565b61045f600480360360208110156106d357600080fd5b50351515611709565b61040461177f565b610404611785565b61045f6004803603602081101561070257600080fd5b50356001600160a01b031661178b565b61045f6004803603608081101561072857600080fd5b506001600160a01b0381351690602081013590604081013590606001351515611805565b61045f6004803603602081101561076257600080fd5b5035611e92565b61055961255c565b61055961256b565b61040461257a565b61045f6004803603602081101561079757600080fd5b5035612580565b61045f600480360360208110156107b457600080fd5b50356125dd565b61045f61263a565b6104046126dc565b6104046126e2565b6104046126fc565b610404600480360360208110156107f157600080fd5b5035612702565b6104046127a9565b6105596127af565b61045f6004803603602081101561081e57600080fd5b50356001600160a01b03166127be565b610404612844565b61040461284a565b61045f6004803603602081101561085457600080fd5b50356001600160a01b0316612850565b61088a6004803603602081101561087a57600080fd5b50356001600160a01b0316612999565b604080519d8e5260208e019c909c528c8c019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e0880152610100870152151561012086015261014085015261016084015261018083015251908190036101a00190f35b610404612a04565b6104046004803603602081101561090f57600080fd5b50356001600160a01b0316612a0a565b610404612aeb565b61045f6004803603602081101561093d57600080fd5b50356001600160a01b0316612af1565b61045f6004803603606081101561096357600080fd5b506001600160a01b03813581169160208101359091169060400135612b6b565b610404612c4b565b610404612c51565b610404600480360360208110156109a957600080fd5b5035612c57565b610404612c71565b610404612c77565b61045f612c7d565b610404613213565b610559613219565b610404613228565b61040461322e565b610404613234565b61045f60048036036020811015610a0657600080fd5b50356001600160a01b031661323a565b610559613332565b610559613341565b610404613350565b610404613356565b61045f60048036036020811015610a4c57600080fd5b5035151561335c565b600080600080610a6685600161103a565b9093509050610a7685600261103a565b5092909201925050505b919050565b6001600160a01b0382166000908152601360205260408120600181015460031480610ab35750828160010154145b15610ac057549050610ac6565b60009150505b92915050565b610ad4613823565b6000546001600160a01b03908116911614610b24576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600355565b610b31613823565b6000546001600160a01b03908116911614610b81576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b038116610b9457600080fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610bca573d6000803e3d6000fd5b505050565b610bd761423d565b6001600160a01b03828116600090815260136020908152604080832080548652600181015486840152600881015486830152600681015460608701526009546080870152600a5460a087015260195482516370a0823160e01b815230600482015292519495869586958695869594909316926370a082319260248083019392829003018186803b158015610c6a57600080fd5b505afa158015610c7e573d6000803e3d6000fd5b505050506040513d6020811015610c9457600080fd5b505160c0880152610ca56001612702565b60e0880152610cb46002612702565b610100880152610cc388610a55565b610120880152600a810154610140880152610cdd88612a0a565b610160880152600681015461018088015260078101546101a0880152601a54601954600f5460098401546040805163f8806a1360e01b815230600482015290516001600160a01b039586169b50938516995093909116965060ff169350859163f8806a13916024808301926020929190829003018186803b158015610d6157600080fd5b505afa158015610d75573d6000803e3d6000fd5b505050506040513d6020811015610d8b57600080fd5b5051600f546040805163f8806a1360e01b815230600482015290519295506001600160a01b039091169163f8806a1391602480820192602092909190829003018186803b158015610ddb57600080fd5b505afa158015610def573d6000803e3d6000fd5b505050506040513d6020811015610e0557600080fd5b505160408051630596293360e41b815290516001600160a01b0390921691635962933091600480820192602092909190829003018186803b158015610e4957600080fd5b505afa158015610e5d573d6000803e3d6000fd5b505050506040513d6020811015610e7357600080fd5b50516101c088015250949693955091939092565b600d5460ff1681565b601b546001600160a01b031681565b610ea76127af565b6001600160a01b0316336001600160a01b03161480610ed05750600f546001600160a01b031633145b80610ee557506010546001600160a01b031633145b610f2b576040805162461bcd60e51b815260206004820152601260248201527110b7bbb732b927b921b7b73a3937b63632b960711b604482015290519081900360640190fd5b610f358282613827565b5050565b601854600160a01b900460ff1681565b601c546001600160a01b031681565b610f60613823565b6000546001600160a01b03908116911614610fb0576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601954600c546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561100757600080fd5b505af115801561101b573d6000803e3d6000fd5b505050506040513d602081101561103157600080fd5b50506000600c55565b6001600160a01b03821660009081526013602052604081208190816001851461106757816005015461106d565b81600401545b905060006110a9670de0b6b3a76400006110a36110938561108d8b612702565b90613a8f565b61109d8b8b610a85565b90613ad8565b90613b31565b600984015490915060009060ff161561111f57600a840154600c8501548110156110d45750600c8401545b600062015180824203816110e457fe5b049050600062015180600354816110f757fe5b04905080821115611106578091505b600e54611119906110a38381868a613ad8565b93505050505b600060018814611147576001600160a01b038916600090815260126020526040902054611161565b6001600160a01b0389166000908152601160205260409020545b90508061116e8484613a8f565b0199919850909650505050505050565b60095481565b3360009081526013602052604090205461119d90611e92565b6111a5613b73565b565b6111af613823565b6000546001600160a01b039081169116146111ff576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600192909255600255601655565b610bca33848484611805565b601c5433906001600160a01b0316156114aa576001600160a01b0381166000908152601360205260409020600101546114aa576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b1580156112bf57600080fd5b505afa1580156112d3573d6000803e3d6000fd5b505050506040513d6101a08110156112ea57600080fd5b506020810151610100820151610120830151610140840151610180909401518551939492939192918690600290811061131f57fe5b602002602001018660008151811061133357fe5b602002602001018760018151811061134757fe5b602090810291909101019290925291905291909152909350915082156114a6576016548160018151811061137757fe5b602002602001015111156113c0576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff191684151517905581518291906113f257fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a01819055508060018151811061143357fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c01819055508060028151811061147457fe5b6020908102919091018101516001600160a01b038616600090815260139092526040909120600801556114a684613bac565b5050505b336000818152601360205260408120541515806114e157506001600160a01b03821660009081526013602052604090206006015415155b8061150657506001600160a01b03821660009081526013602052604090206007015415155b1561152957506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b038216156115b75760008061154684600161103a565b909250905060008061155986600261103a565b90925090508115611588576001600160a01b0386166000908152601260205260409020829055601e8054820190555b83156115b2576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b6115c16001612702565b6007556115ce6002612702565b6008556115d96126e2565b6004556001600160a01b03821615611618576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b610bca613b73565b6010546001600160a01b031681565b611637613823565b6000546001600160a01b03908116911614611687576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600d805460ff1916911515919091179055565b6116a2613823565b6000546001600160a01b039081169116146116f2576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600494909455600592909255600655600755600855565b611711613823565b6000546001600160a01b03908116911614611761576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b60188054911515600160a01b0260ff60a01b19909216919091179055565b60075481565b60165481565b611793613823565b6000546001600160a01b039081169116146117e3576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b601c5484906001600160a01b031615611a96576001600160a01b038116600090815260136020526040902060010154611a96576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b1580156118ab57600080fd5b505afa1580156118bf573d6000803e3d6000fd5b505050506040513d6101a08110156118d657600080fd5b506020810151610100820151610120830151610140840151610180909401518551939492939192918690600290811061190b57fe5b602002602001018660008151811061191f57fe5b602002602001018760018151811061193357fe5b60209081029190910101929092529190529190915290935091508215611a92576016548160018151811061196357fe5b602002602001015111156119ac576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff191684151517905581518291906119de57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a018190555080600181518110611a1f57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c018190555080600281518110611a6057fe5b6020908102919091018101516001600160a01b03861660009081526013909252604090912060080155611a9284613bac565b5050505b6001600160a01b03851660009081526013602052604090205485908490151580611ada57506001600160a01b03821660009081526013602052604090206006015415155b80611aff57506001600160a01b03821660009081526013602052604090206007015415155b15611b2257506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b03821615611bb057600080611b3f84600161103a565b9092509050600080611b5286600261103a565b90925090508115611b81576001600160a01b0386166000908152601260205260409020829055601e8054820190555b8315611bab576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b611bba6001612702565b600755611bc76002612702565b600855611bd26126e2565b6004556001600160a01b03821615611c11576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b6001851480611c205750600285145b80611c2b5750600385145b611c70576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207374616b655479706560781b604482015290519081900360640190fd5b6001600160a01b03871660009081526013602052604090208054158015611c9957506006810154155b8015611ca757506007810154155b80611cb55750858160010154145b611cfb576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964205374616b65205479706560701b604482015290519081900360640190fd5b600981015460ff1680611d1557508054158015611d155750845b15611d2857611d2388613c79565b611d47565b8054158015611d35575084155b15611d475760098101805460ff191690555b601954604080516323b872dd60e01b8152336004820152306024820152604481018a905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611da157600080fd5b505af1158015611db5573d6000803e3d6000fd5b505050506040513d6020811015611dcb57600080fd5b5050600181018690558054611de09088613d05565b81556001861415611e0057600954611df89088613d05565b600955611e3f565b6002861415611e1e57600a54611e169088613d05565b600a55611e3f565b600a54611e2b9088613d05565b600a55600954611e3b9088613d05565b6009555b604080516001600160a01b038a1681526020810189905280820188905290517f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360600190a15050505050505050565b601c5433906001600160a01b031615612123576001600160a01b038116600090815260136020526040902060010154612123576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b158015611f3857600080fd5b505afa158015611f4c573d6000803e3d6000fd5b505050506040513d6101a0811015611f6357600080fd5b5060208101516101008201516101208301516101408401516101809094015185519394929391929186906002908110611f9857fe5b6020026020010186600081518110611fac57fe5b6020026020010187600181518110611fc057fe5b6020908102919091010192909252919052919091529093509150821561211f5760165481600181518110611ff057fe5b60200260200101511115612039576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff1916841515179055815182919061206b57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a0181905550806001815181106120ac57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c0181905550806002815181106120ed57fe5b6020908102919091018101516001600160a01b0386166000908152601390925260409091206008015561211f84613bac565b5050505b3360008181526013602052604081205415158061215a57506001600160a01b03821660009081526013602052604090206006015415155b8061217f57506001600160a01b03821660009081526013602052604090206007015415155b156121a257506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b03821615612230576000806121bf84600161103a565b90925090506000806121d286600261103a565b90925090508115612201576001600160a01b0386166000908152601260205260409020829055601e8054820190555b831561222b576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b61223a6001612702565b6007556122476002612702565b6008556122526126e2565b6004556001600160a01b03821615612291576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b336000908152601360205260409020600181015481548611156122f0576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dc80f8819195c1bdcda5d60721b604482015290519081900360640190fd5b851561255457600061230133612a0a565b905060008782111561231d576123178289613a8f565b90508791505b600984015460ff161561233857600b840181905542600a8501555b60006123448984613a8f565b8554909150612353908a613a8f565b855560018414156123735760095461236b908a613a8f565b6009556123b2565b600284141561239157600a54612389908a613a8f565b600a556123b2565b60095461239e908a613a8f565b600955600a546123ae908a613a8f565b600a555b600d5460ff16806123c35750600184145b156124e557801561248f576019546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561242257600080fd5b505af1158015612436573d6000803e3d6000fd5b505050506040513d602081101561244c57600080fd5b5050604080513381526020810183905280820186905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a15b82156124e05761249f3384613d5f565b604080513381526020810185905280820186905290517fbe0b6e5b3195df91f2e6b2b20501f84b085714f9e38073f499073c83056510099181900360600190a15b612548565b6006850180548201905560078501805484019055426008860155600b80548a01905560408051338152602081018b905280820186905290517f7ed75eaf82098257819f0bd6dd7f79062e49152905980263c73ee48565a656a59181900360600190a15b5050600c805490910190555b505050505050565b6018546001600160a01b031681565b601a546001600160a01b031690565b600c5490565b612588613823565b6000546001600160a01b039081169116146125d8576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600e55565b6125e5613823565b6000546001600160a01b03908116911614612635576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601755565b612642613823565b6000546001600160a01b03908116911614612692576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60055481565b600060155442106126f5576015546126f7565b425b905090565b600e5481565b6000806001831461271557600a54612719565b6009545b90508061273c576001831461273057600854612734565b6007545b915050610a80565b60018314156127775761273461276e6009546110a3670de0b6b3a764000061109d60055461109d60045461108d6126e2565b60075490613d05565b6127346127a0600a546110a3670de0b6b3a764000061109d60065461109d60045461108d6126e2565b60085490613d05565b60175481565b6000546001600160a01b031690565b6127c6613823565b6000546001600160a01b03908116911614612816576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b0381161561284157600f80546001600160a01b0319166001600160a01b0383161790555b50565b60025481565b60065481565b612858613823565b6000546001600160a01b039081169116146128a8576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b0380821660008181526013602090815260408083208054601954835163a9059cbb60e01b815260048101979097526024870182905292519196909592169363a9059cbb93604480850194919392918390030190829087803b15801561291357600080fd5b505af1158015612927573d6000803e3d6000fd5b505050506040513d602081101561293d57600080fd5b5050604080516001600160a01b03851681526020810183905281517f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695929181900390910190a15060008082556002820181905560039091015550565b601360205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a989997989697959694959394929360ff909216929091908d565b600a5481565b6001600160a01b0381166000908152601360205260408120600981015460ff161580612a3557508054155b15612a44576000915050610a80565b6000612a6d6003546110a3670de0b6b3a764000085600a01544203613ad890919063ffffffff16565b9050670de0b6b3a7640000811015612a855780612a8f565b670de0b6b3a76400005b600b8301548354919250600091612aa591613a8f565b90506000612acd612ac2670de0b6b3a76400006110a38587613ad8565b600b86015490613d05565b84549091508111612ade5780612ae1565b83545b9695505050505050565b601d5481565b612af9613823565b6000546001600160a01b03908116911614612b49576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b612b73613823565b6000546001600160a01b03908116911614612bc3576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c1a57600080fd5b505af1158015612c2e573d6000803e3d6000fd5b505050506040513d6020811015612c4457600080fd5b5050505050565b60015481565b60085481565b600060018214612c6957600a54610ac6565b505060095490565b600c5481565b60035481565b601c5433906001600160a01b031615612f0e576001600160a01b038116600090815260136020526040902060010154612f0e576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b158015612d2357600080fd5b505afa158015612d37573d6000803e3d6000fd5b505050506040513d6101a0811015612d4e57600080fd5b5060208101516101008201516101208301516101408401516101809094015185519394929391929186906002908110612d8357fe5b6020026020010186600081518110612d9757fe5b6020026020010187600181518110612dab57fe5b60209081029190910101929092529190529190915290935091508215612f0a5760165481600181518110612ddb57fe5b60200260200101511115612e24576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff19168415151790558151829190612e5657fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a018190555080600181518110612e9757fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c018190555080600281518110612ed857fe5b6020908102919091018101516001600160a01b03861660009081526013909252604090912060080155612f0a84613bac565b5050505b3360009081526013602052604090206006810154151580612f33575060008160070154115b612f72576040805162461bcd60e51b815260206004820152600b60248201526a0616d6f756e7420697320360ac1b604482015290519081900360640190fd5b600f546040805163f8806a1360e01b815230600482015290516000926001600160a01b03169163f8806a13916024808301926020929190829003018186803b158015612fbd57600080fd5b505afa158015612fd1573d6000803e3d6000fd5b505050506040513d6020811015612fe757600080fd5b505160408051630596293360e41b815290516001600160a01b0390921691635962933091600480820192602092909190829003018186803b15801561302b57600080fd5b505afa15801561303f573d6000803e3d6000fd5b505050506040513d602081101561305557600080fd5b505160088301546002546001549293509091613077919061108d908590613a8f565b1015806130865750600d5460ff165b6130ce576040805162461bcd60e51b81526020600482015260146024820152731b9bdd081dda5d1a191c985dd8589b19481e595d60621b604482015290519081900360640190fd5b6006820154156131aa5760195460068301546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561313157600080fd5b505af1158015613145573d6000803e3d6000fd5b505050506040513d602081101561315b57600080fd5b50506006820154604080513381526020810192909252600282820152517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a1600060068301555b600782015415610bca576131c2338360070154613d5f565b6007820154604080513381526020810192909252600282820152517fbe0b6e5b3195df91f2e6b2b20501f84b085714f9e38073f499073c83056510099181900360600190a160006007830155505050565b60045481565b6019546001600160a01b031681565b600b5481565b60155481565b600b5490565b613242613823565b6000546001600160a01b03908116911614613292576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b0381166132d75760405162461bcd60e51b815260040180806020018281038252602681526020018061425d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b031681565b601a546001600160a01b031681565b60145481565b601e5481565b601c5433906001600160a01b0316156135ed576001600160a01b0381166000908152601360205260409020600101546135ed576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b15801561340257600080fd5b505afa158015613416573d6000803e3d6000fd5b505050506040513d6101a081101561342d57600080fd5b506020810151610100820151610120830151610140840151610180909401518551939492939192918690600290811061346257fe5b602002602001018660008151811061347657fe5b602002602001018760018151811061348a57fe5b602090810291909101019290925291905291909152909350915082156135e957601654816001815181106134ba57fe5b60200260200101511115613503576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff1916841515179055815182919061353557fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a01819055508060018151811061357657fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c0181905550806002815181106135b757fe5b6020908102919091018101516001600160a01b038616600090815260139092526040909120600801556135e984613bac565b5050505b3360008181526013602052604081205415158061362457506001600160a01b03821660009081526013602052604090206006015415155b8061364957506001600160a01b03821660009081526013602052604090206007015415155b1561366c57506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b038216156136fa5760008061368984600161103a565b909250905060008061369c86600261103a565b909250905081156136cb576001600160a01b0386166000908152601260205260409020829055601e8054820190555b83156136f5576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b6137046001612702565b6007556137116002612702565b60085561371c6126e2565b6004556001600160a01b0382161561375b576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b336000908152601360205260409020600981015460ff16151585151514156137bd576040805162461bcd60e51b815260206004820152601060248201526f73616d6520657869742073746174757360801b604482015290519081900360640190fd5b80546137fc576040805162461bcd60e51b8152602060048201526009602482015268302062616c616e636560b81b604482015290519081900360640190fd5b60098101805460ff191695151595909517909455505042600a830155506000600b90910155565b3390565b600080805260136020527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c54829015158061387c57506001600160a01b03821660009081526013602052604090206006015415155b806138a157506001600160a01b03821660009081526013602052604090206007015415155b156138c457506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b03821615613952576000806138e184600161103a565b90925090506000806138f486600261103a565b90925090508115613923576001600160a01b0386166000908152601260205260409020829055601e8054820190555b831561394d576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b61395c6001612702565b6007556139696002612702565b6008556139746126e2565b6004556001600160a01b038216156139b3576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b60155442106139f25760018314156139db576001546139d3908590613b31565b6005556139ed565b6001546139e9908590613b31565b6006555b613a73565b601554600090613a029042613a8f565b90506001841415613a41576000613a2460055483613ad890919063ffffffff16565b600154909150613a38906110a38884613d05565b60055550613a71565b6000613a5860065483613ad890919063ffffffff16565b600154909150613a6c906110a38884613d05565b600655505b505b426004819055600154613a869190613d05565b60155550505050565b6000613ad183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613dc8565b9392505050565b600082613ae757506000610ac6565b82820282848281613af457fe5b0414613ad15760405162461bcd60e51b81526004018080602001828103825260218152602001806142836021913960400191505060405180910390fd5b6000613ad183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e5f565b600080613b8133600161103a565b9092509050600080613b9433600261103a565b9092509050613ba63385858585613ec4565b50505050565b601c546040805163543a185d60e11b81526001600160a01b0384811660048301529151919092169163a87430ba916024808301926101a0929190829003018186803b158015613bfa57600080fd5b505afa158015613c0e573d6000803e3d6000fd5b505050506040513d6101a0811015613c2557600080fd5b508051602080830151606084015160a085015160c0909501516001600160a01b0390961660009081526013909352604090922060068101959095556005850193909355600384015560018301919091559055565b601854600160a01b900460ff16613cc6576040805162461bcd60e51b815260206004820152600c60248201526b4e6f74206578697461626c6560a01b604482015290519081900360640190fd5b6001600160a01b038116600090815260136020526040902060098101805460ff19166001179055613cf682612a0a565b600b82015542600a9091015550565b600082820183811015613ad1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600f5460408051631abe49b560e21b81526001600160a01b0385811660048301526024820185905291519190921691636af926d491604480830192600092919082900301818387803b158015613db457600080fd5b505af1158015612554573d6000803e3d6000fd5b60008184841115613e575760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e1c578181015183820152602001613e04565b50505050905090810190601f168015613e495780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183613eae5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613e1c578181015183820152602001613e04565b506000838581613eba57fe5b0495945050505050565b6001600160a01b0385166000908152601360205260408120601754909190613efb90670de0b6b3a7640000906110a3908990613ad8565b90506000613f20670de0b6b3a76400006110a360175488613ad890919063ffffffff16565b9050861561405757601a546001600160a01b031663a9059cbb89613f448a86613a8f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613f8a57600080fd5b505af1158015613f9e573d6000803e3d6000fd5b505050506040513d6020811015613fb457600080fd5b5050811561404257601a546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018690529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561401557600080fd5b505af1158015614029573d6000803e3d6000fd5b505050506040513d602081101561403f57600080fd5b50505b60028301546140519088613d05565b60028401555b841561418c57601b546001600160a01b031663a9059cbb896140798885613a8f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156140bf57600080fd5b505af11580156140d3573d6000803e3d6000fd5b505050506040513d60208110156140e957600080fd5b5050801561417757601b546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561414a57600080fd5b505af115801561415e573d6000803e3d6000fd5b505050506040513d602081101561417457600080fd5b50505b60038301546141869086613d05565b60038401555b600085118061419b5750600087115b156141ea57604080516001600160a01b038a1681526020810189905280820187905290517ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e27317439181900360600190a15b85156141f957601d8054870190555b831561420857601e8054850190555b505042600c9190910155505050506001600160a01b031660009081526011602090815260408083208390556012909152812055565b604051806101e00160405280600f90602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726c617374436c61696d54696d65203e2062697274684461746500000000000000a2646970667358221220ca6ce80931c45f5c562178c3d0d997c1020bf31829d4a0e4da5ab4fff9f967ad64736f6c634300060c0033000000000000000000000000c586aea83a96d57764a431b9f4e2e84844075a0100000000000000000000000080ab141f324c3d6f2b18b030f1c4e95d4d65877800000000000000000000000080ab141f324c3d6f2b18b030f1c4e95d4d6587780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9775d818fc23e07ac4b8efd4c58972f7c59bc0f0000000000000000000000004e8a7c429192bfda8c9a1ef0f3b749d0f66657aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ddf3273a23c256ab805ca71f9b2e42767afdd4bd

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103d95760003560e01c80637b0a47ee1161020a578063b4d1d79511610125578063d177804b116100b8578063f77c479111610087578063f77c479114610a16578063f7c618c114610a1e578063f90ce5ba14610a26578063f9114bd614610a2e578063fea10a5f14610a36576103d9565b8063d177804b146109d8578063ebe2b12b146109e0578063f2bbd86c146109e8578063f2fde38b146109f0576103d9565b8063c04b5f65116100f4578063c04b5f65146109b8578063c1985d3b146109c0578063c8f33c91146109c8578063cc7a262e146109d0576103d9565b8063b4d1d79514610983578063b7b1f2101461098b578063bd85b03914610993578063bfc84ff9146109b0576103d9565b8063a630e99d1161019d578063b004e03b1161016c578063b004e03b146108f9578063b2552acb1461091f578063b3ab15fb14610927578063b3f5e0081461094d576103d9565b8063a630e99d14610836578063a81119b81461083e578063a87430ba14610864578063ae342141146108f1576103d9565b806388d19f1b116101d957806388d19f1b146107f85780638da5cb5b1461080057806392eefe9b146108085780639c511ad41461082e576103d9565b80637b0a47ee146107c357806380faa57d146107cb5780638544ab30146107d3578063874c120b146107db576103d9565b80634e71d92d116102fa57806365f203551161028d57806369dda74c1161025c57806369dda74c146107795780636d0d2067146107815780636fadc3ca1461079e578063715018a6146107bb576103d9565b806365f20355146107125780636623fc461461074c578063698a58971461076957806369940d7914610771576103d9565b806360551d9d116102c957806360551d9d146106bd57806360c6cdac146106dc57806361004f39146106e457806364997e01146106ec576103d9565b80634e71d92d14610659578063570ca735146106615780635d4c3224146106695780635d9966ac14610688576103d9565b806326bfae3e116103725780633eaaf86b116103415780633eaaf86b146105f557806340878f58146105fd578063417314591461060557806343a0d0661461062e576103d9565b806326bfae3e1461059857806330503c4e146105a05780633101d5af146105a85780633e491d47146105b0576103d9565b80631959a002116103ae5780631959a0021461048d5780631a26af7a146105355780631ea7dd5714610551578063246132f914610575576103d9565b80628cc262146103de578062fdd58e1461041657806304ff336c146104425780631594500614610461575b600080fd5b610404600480360360208110156103f457600080fd5b50356001600160a01b0316610a55565b60408051918252519081900360200190f35b6104046004803603604081101561042c57600080fd5b506001600160a01b038135169060200135610a85565b61045f6004803603602081101561045857600080fd5b5035610acc565b005b61045f6004803603604081101561047757600080fd5b50803590602001356001600160a01b0316610b29565b6104b3600480360360208110156104a357600080fd5b50356001600160a01b0316610bcf565b60405180876101e080838360005b838110156104d95781810151838201526020016104c1565b50505050905001866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b031681526020018215158152602001965050505050505060405180910390f35b61053d610e87565b604080519115158252519081900360200190f35b610559610e90565b604080516001600160a01b039092168252519081900360200190f35b61045f6004803603604081101561058b57600080fd5b5080359060200135610e9f565b61053d610f39565b610559610f49565b61045f610f58565b6105dc600480360360408110156105c657600080fd5b506001600160a01b03813516906020013561103a565b6040805192835260208301919091528051918290030190f35b61040461117e565b61045f611184565b61045f6004803603606081101561061b57600080fd5b50803590602081013590604001356111a7565b61045f6004803603606081101561064457600080fd5b5080359060208101359060400135151561120d565b61045f611219565b610559611620565b61045f6004803603602081101561067f57600080fd5b5035151561162f565b61045f600480360360a081101561069e57600080fd5b508035906020810135906040810135906060810135906080013561169a565b61045f600480360360208110156106d357600080fd5b50351515611709565b61040461177f565b610404611785565b61045f6004803603602081101561070257600080fd5b50356001600160a01b031661178b565b61045f6004803603608081101561072857600080fd5b506001600160a01b0381351690602081013590604081013590606001351515611805565b61045f6004803603602081101561076257600080fd5b5035611e92565b61055961255c565b61055961256b565b61040461257a565b61045f6004803603602081101561079757600080fd5b5035612580565b61045f600480360360208110156107b457600080fd5b50356125dd565b61045f61263a565b6104046126dc565b6104046126e2565b6104046126fc565b610404600480360360208110156107f157600080fd5b5035612702565b6104046127a9565b6105596127af565b61045f6004803603602081101561081e57600080fd5b50356001600160a01b03166127be565b610404612844565b61040461284a565b61045f6004803603602081101561085457600080fd5b50356001600160a01b0316612850565b61088a6004803603602081101561087a57600080fd5b50356001600160a01b0316612999565b604080519d8e5260208e019c909c528c8c019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e0880152610100870152151561012086015261014085015261016084015261018083015251908190036101a00190f35b610404612a04565b6104046004803603602081101561090f57600080fd5b50356001600160a01b0316612a0a565b610404612aeb565b61045f6004803603602081101561093d57600080fd5b50356001600160a01b0316612af1565b61045f6004803603606081101561096357600080fd5b506001600160a01b03813581169160208101359091169060400135612b6b565b610404612c4b565b610404612c51565b610404600480360360208110156109a957600080fd5b5035612c57565b610404612c71565b610404612c77565b61045f612c7d565b610404613213565b610559613219565b610404613228565b61040461322e565b610404613234565b61045f60048036036020811015610a0657600080fd5b50356001600160a01b031661323a565b610559613332565b610559613341565b610404613350565b610404613356565b61045f60048036036020811015610a4c57600080fd5b5035151561335c565b600080600080610a6685600161103a565b9093509050610a7685600261103a565b5092909201925050505b919050565b6001600160a01b0382166000908152601360205260408120600181015460031480610ab35750828160010154145b15610ac057549050610ac6565b60009150505b92915050565b610ad4613823565b6000546001600160a01b03908116911614610b24576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600355565b610b31613823565b6000546001600160a01b03908116911614610b81576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b038116610b9457600080fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610bca573d6000803e3d6000fd5b505050565b610bd761423d565b6001600160a01b03828116600090815260136020908152604080832080548652600181015486840152600881015486830152600681015460608701526009546080870152600a5460a087015260195482516370a0823160e01b815230600482015292519495869586958695869594909316926370a082319260248083019392829003018186803b158015610c6a57600080fd5b505afa158015610c7e573d6000803e3d6000fd5b505050506040513d6020811015610c9457600080fd5b505160c0880152610ca56001612702565b60e0880152610cb46002612702565b610100880152610cc388610a55565b610120880152600a810154610140880152610cdd88612a0a565b610160880152600681015461018088015260078101546101a0880152601a54601954600f5460098401546040805163f8806a1360e01b815230600482015290516001600160a01b039586169b50938516995093909116965060ff169350859163f8806a13916024808301926020929190829003018186803b158015610d6157600080fd5b505afa158015610d75573d6000803e3d6000fd5b505050506040513d6020811015610d8b57600080fd5b5051600f546040805163f8806a1360e01b815230600482015290519295506001600160a01b039091169163f8806a1391602480820192602092909190829003018186803b158015610ddb57600080fd5b505afa158015610def573d6000803e3d6000fd5b505050506040513d6020811015610e0557600080fd5b505160408051630596293360e41b815290516001600160a01b0390921691635962933091600480820192602092909190829003018186803b158015610e4957600080fd5b505afa158015610e5d573d6000803e3d6000fd5b505050506040513d6020811015610e7357600080fd5b50516101c088015250949693955091939092565b600d5460ff1681565b601b546001600160a01b031681565b610ea76127af565b6001600160a01b0316336001600160a01b03161480610ed05750600f546001600160a01b031633145b80610ee557506010546001600160a01b031633145b610f2b576040805162461bcd60e51b815260206004820152601260248201527110b7bbb732b927b921b7b73a3937b63632b960711b604482015290519081900360640190fd5b610f358282613827565b5050565b601854600160a01b900460ff1681565b601c546001600160a01b031681565b610f60613823565b6000546001600160a01b03908116911614610fb0576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601954600c546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561100757600080fd5b505af115801561101b573d6000803e3d6000fd5b505050506040513d602081101561103157600080fd5b50506000600c55565b6001600160a01b03821660009081526013602052604081208190816001851461106757816005015461106d565b81600401545b905060006110a9670de0b6b3a76400006110a36110938561108d8b612702565b90613a8f565b61109d8b8b610a85565b90613ad8565b90613b31565b600984015490915060009060ff161561111f57600a840154600c8501548110156110d45750600c8401545b600062015180824203816110e457fe5b049050600062015180600354816110f757fe5b04905080821115611106578091505b600e54611119906110a38381868a613ad8565b93505050505b600060018814611147576001600160a01b038916600090815260126020526040902054611161565b6001600160a01b0389166000908152601160205260409020545b90508061116e8484613a8f565b0199919850909650505050505050565b60095481565b3360009081526013602052604090205461119d90611e92565b6111a5613b73565b565b6111af613823565b6000546001600160a01b039081169116146111ff576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600192909255600255601655565b610bca33848484611805565b601c5433906001600160a01b0316156114aa576001600160a01b0381166000908152601360205260409020600101546114aa576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b1580156112bf57600080fd5b505afa1580156112d3573d6000803e3d6000fd5b505050506040513d6101a08110156112ea57600080fd5b506020810151610100820151610120830151610140840151610180909401518551939492939192918690600290811061131f57fe5b602002602001018660008151811061133357fe5b602002602001018760018151811061134757fe5b602090810291909101019290925291905291909152909350915082156114a6576016548160018151811061137757fe5b602002602001015111156113c0576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff191684151517905581518291906113f257fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a01819055508060018151811061143357fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c01819055508060028151811061147457fe5b6020908102919091018101516001600160a01b038616600090815260139092526040909120600801556114a684613bac565b5050505b336000818152601360205260408120541515806114e157506001600160a01b03821660009081526013602052604090206006015415155b8061150657506001600160a01b03821660009081526013602052604090206007015415155b1561152957506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b038216156115b75760008061154684600161103a565b909250905060008061155986600261103a565b90925090508115611588576001600160a01b0386166000908152601260205260409020829055601e8054820190555b83156115b2576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b6115c16001612702565b6007556115ce6002612702565b6008556115d96126e2565b6004556001600160a01b03821615611618576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b610bca613b73565b6010546001600160a01b031681565b611637613823565b6000546001600160a01b03908116911614611687576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600d805460ff1916911515919091179055565b6116a2613823565b6000546001600160a01b039081169116146116f2576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600494909455600592909255600655600755600855565b611711613823565b6000546001600160a01b03908116911614611761576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b60188054911515600160a01b0260ff60a01b19909216919091179055565b60075481565b60165481565b611793613823565b6000546001600160a01b039081169116146117e3576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b601c5484906001600160a01b031615611a96576001600160a01b038116600090815260136020526040902060010154611a96576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b1580156118ab57600080fd5b505afa1580156118bf573d6000803e3d6000fd5b505050506040513d6101a08110156118d657600080fd5b506020810151610100820151610120830151610140840151610180909401518551939492939192918690600290811061190b57fe5b602002602001018660008151811061191f57fe5b602002602001018760018151811061193357fe5b60209081029190910101929092529190529190915290935091508215611a92576016548160018151811061196357fe5b602002602001015111156119ac576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff191684151517905581518291906119de57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a018190555080600181518110611a1f57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c018190555080600281518110611a6057fe5b6020908102919091018101516001600160a01b03861660009081526013909252604090912060080155611a9284613bac565b5050505b6001600160a01b03851660009081526013602052604090205485908490151580611ada57506001600160a01b03821660009081526013602052604090206006015415155b80611aff57506001600160a01b03821660009081526013602052604090206007015415155b15611b2257506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b03821615611bb057600080611b3f84600161103a565b9092509050600080611b5286600261103a565b90925090508115611b81576001600160a01b0386166000908152601260205260409020829055601e8054820190555b8315611bab576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b611bba6001612702565b600755611bc76002612702565b600855611bd26126e2565b6004556001600160a01b03821615611c11576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b6001851480611c205750600285145b80611c2b5750600385145b611c70576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207374616b655479706560781b604482015290519081900360640190fd5b6001600160a01b03871660009081526013602052604090208054158015611c9957506006810154155b8015611ca757506007810154155b80611cb55750858160010154145b611cfb576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964205374616b65205479706560701b604482015290519081900360640190fd5b600981015460ff1680611d1557508054158015611d155750845b15611d2857611d2388613c79565b611d47565b8054158015611d35575084155b15611d475760098101805460ff191690555b601954604080516323b872dd60e01b8152336004820152306024820152604481018a905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611da157600080fd5b505af1158015611db5573d6000803e3d6000fd5b505050506040513d6020811015611dcb57600080fd5b5050600181018690558054611de09088613d05565b81556001861415611e0057600954611df89088613d05565b600955611e3f565b6002861415611e1e57600a54611e169088613d05565b600a55611e3f565b600a54611e2b9088613d05565b600a55600954611e3b9088613d05565b6009555b604080516001600160a01b038a1681526020810189905280820188905290517f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360600190a15050505050505050565b601c5433906001600160a01b031615612123576001600160a01b038116600090815260136020526040902060010154612123576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b158015611f3857600080fd5b505afa158015611f4c573d6000803e3d6000fd5b505050506040513d6101a0811015611f6357600080fd5b5060208101516101008201516101208301516101408401516101809094015185519394929391929186906002908110611f9857fe5b6020026020010186600081518110611fac57fe5b6020026020010187600181518110611fc057fe5b6020908102919091010192909252919052919091529093509150821561211f5760165481600181518110611ff057fe5b60200260200101511115612039576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff1916841515179055815182919061206b57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a0181905550806001815181106120ac57fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c0181905550806002815181106120ed57fe5b6020908102919091018101516001600160a01b0386166000908152601390925260409091206008015561211f84613bac565b5050505b3360008181526013602052604081205415158061215a57506001600160a01b03821660009081526013602052604090206006015415155b8061217f57506001600160a01b03821660009081526013602052604090206007015415155b156121a257506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b03821615612230576000806121bf84600161103a565b90925090506000806121d286600261103a565b90925090508115612201576001600160a01b0386166000908152601260205260409020829055601e8054820190555b831561222b576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b61223a6001612702565b6007556122476002612702565b6008556122526126e2565b6004556001600160a01b03821615612291576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b336000908152601360205260409020600181015481548611156122f0576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dc80f8819195c1bdcda5d60721b604482015290519081900360640190fd5b851561255457600061230133612a0a565b905060008782111561231d576123178289613a8f565b90508791505b600984015460ff161561233857600b840181905542600a8501555b60006123448984613a8f565b8554909150612353908a613a8f565b855560018414156123735760095461236b908a613a8f565b6009556123b2565b600284141561239157600a54612389908a613a8f565b600a556123b2565b60095461239e908a613a8f565b600955600a546123ae908a613a8f565b600a555b600d5460ff16806123c35750600184145b156124e557801561248f576019546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561242257600080fd5b505af1158015612436573d6000803e3d6000fd5b505050506040513d602081101561244c57600080fd5b5050604080513381526020810183905280820186905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a15b82156124e05761249f3384613d5f565b604080513381526020810185905280820186905290517fbe0b6e5b3195df91f2e6b2b20501f84b085714f9e38073f499073c83056510099181900360600190a15b612548565b6006850180548201905560078501805484019055426008860155600b80548a01905560408051338152602081018b905280820186905290517f7ed75eaf82098257819f0bd6dd7f79062e49152905980263c73ee48565a656a59181900360600190a15b5050600c805490910190555b505050505050565b6018546001600160a01b031681565b601a546001600160a01b031690565b600c5490565b612588613823565b6000546001600160a01b039081169116146125d8576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600e55565b6125e5613823565b6000546001600160a01b03908116911614612635576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601755565b612642613823565b6000546001600160a01b03908116911614612692576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60055481565b600060155442106126f5576015546126f7565b425b905090565b600e5481565b6000806001831461271557600a54612719565b6009545b90508061273c576001831461273057600854612734565b6007545b915050610a80565b60018314156127775761273461276e6009546110a3670de0b6b3a764000061109d60055461109d60045461108d6126e2565b60075490613d05565b6127346127a0600a546110a3670de0b6b3a764000061109d60065461109d60045461108d6126e2565b60085490613d05565b60175481565b6000546001600160a01b031690565b6127c6613823565b6000546001600160a01b03908116911614612816576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b0381161561284157600f80546001600160a01b0319166001600160a01b0383161790555b50565b60025481565b60065481565b612858613823565b6000546001600160a01b039081169116146128a8576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b0380821660008181526013602090815260408083208054601954835163a9059cbb60e01b815260048101979097526024870182905292519196909592169363a9059cbb93604480850194919392918390030190829087803b15801561291357600080fd5b505af1158015612927573d6000803e3d6000fd5b505050506040513d602081101561293d57600080fd5b5050604080516001600160a01b03851681526020810183905281517f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695929181900390910190a15060008082556002820181905560039091015550565b601360205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a989997989697959694959394929360ff909216929091908d565b600a5481565b6001600160a01b0381166000908152601360205260408120600981015460ff161580612a3557508054155b15612a44576000915050610a80565b6000612a6d6003546110a3670de0b6b3a764000085600a01544203613ad890919063ffffffff16565b9050670de0b6b3a7640000811015612a855780612a8f565b670de0b6b3a76400005b600b8301548354919250600091612aa591613a8f565b90506000612acd612ac2670de0b6b3a76400006110a38587613ad8565b600b86015490613d05565b84549091508111612ade5780612ae1565b83545b9695505050505050565b601d5481565b612af9613823565b6000546001600160a01b03908116911614612b49576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b612b73613823565b6000546001600160a01b03908116911614612bc3576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c1a57600080fd5b505af1158015612c2e573d6000803e3d6000fd5b505050506040513d6020811015612c4457600080fd5b5050505050565b60015481565b60085481565b600060018214612c6957600a54610ac6565b505060095490565b600c5481565b60035481565b601c5433906001600160a01b031615612f0e576001600160a01b038116600090815260136020526040902060010154612f0e576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b158015612d2357600080fd5b505afa158015612d37573d6000803e3d6000fd5b505050506040513d6101a0811015612d4e57600080fd5b5060208101516101008201516101208301516101408401516101809094015185519394929391929186906002908110612d8357fe5b6020026020010186600081518110612d9757fe5b6020026020010187600181518110612dab57fe5b60209081029190910101929092529190529190915290935091508215612f0a5760165481600181518110612ddb57fe5b60200260200101511115612e24576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff19168415151790558151829190612e5657fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a018190555080600181518110612e9757fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c018190555080600281518110612ed857fe5b6020908102919091018101516001600160a01b03861660009081526013909252604090912060080155612f0a84613bac565b5050505b3360009081526013602052604090206006810154151580612f33575060008160070154115b612f72576040805162461bcd60e51b815260206004820152600b60248201526a0616d6f756e7420697320360ac1b604482015290519081900360640190fd5b600f546040805163f8806a1360e01b815230600482015290516000926001600160a01b03169163f8806a13916024808301926020929190829003018186803b158015612fbd57600080fd5b505afa158015612fd1573d6000803e3d6000fd5b505050506040513d6020811015612fe757600080fd5b505160408051630596293360e41b815290516001600160a01b0390921691635962933091600480820192602092909190829003018186803b15801561302b57600080fd5b505afa15801561303f573d6000803e3d6000fd5b505050506040513d602081101561305557600080fd5b505160088301546002546001549293509091613077919061108d908590613a8f565b1015806130865750600d5460ff165b6130ce576040805162461bcd60e51b81526020600482015260146024820152731b9bdd081dda5d1a191c985dd8589b19481e595d60621b604482015290519081900360640190fd5b6006820154156131aa5760195460068301546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561313157600080fd5b505af1158015613145573d6000803e3d6000fd5b505050506040513d602081101561315b57600080fd5b50506006820154604080513381526020810192909252600282820152517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a1600060068301555b600782015415610bca576131c2338360070154613d5f565b6007820154604080513381526020810192909252600282820152517fbe0b6e5b3195df91f2e6b2b20501f84b085714f9e38073f499073c83056510099181900360600190a160006007830155505050565b60045481565b6019546001600160a01b031681565b600b5481565b60155481565b600b5490565b613242613823565b6000546001600160a01b03908116911614613292576040805162461bcd60e51b815260206004820181905260248201526000805160206142a4833981519152604482015290519081900360640190fd5b6001600160a01b0381166132d75760405162461bcd60e51b815260040180806020018281038252602681526020018061425d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b031681565b601a546001600160a01b031681565b60145481565b601e5481565b601c5433906001600160a01b0316156135ed576001600160a01b0381166000908152601360205260409020600101546135ed576040805160038082526080820190925260009182916060916020820183803683375050601c546040805163543a185d60e11b81526001600160a01b038981166004830152915194955091169263a87430ba92506024808301926101a0929190829003018186803b15801561340257600080fd5b505afa158015613416573d6000803e3d6000fd5b505050506040513d6101a081101561342d57600080fd5b506020810151610100820151610120830151610140840151610180909401518551939492939192918690600290811061346257fe5b602002602001018660008151811061347657fe5b602002602001018760018151811061348a57fe5b602090810291909101019290925291905291909152909350915082156135e957601654816001815181106134ba57fe5b60200260200101511115613503576040805162461bcd60e51b815260206004820152601960248201526000805160206142c4833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152601360205260408120600901805460ff1916841515179055815182919061353557fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600a01819055508060018151811061357657fe5b602002602001015160136000866001600160a01b03166001600160a01b03168152602001908152602001600020600c0181905550806002815181106135b757fe5b6020908102919091018101516001600160a01b038616600090815260139092526040909120600801556135e984613bac565b5050505b3360008181526013602052604081205415158061362457506001600160a01b03821660009081526013602052604090206006015415155b8061364957506001600160a01b03821660009081526013602052604090206007015415155b1561366c57506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b038216156136fa5760008061368984600161103a565b909250905060008061369c86600261103a565b909250905081156136cb576001600160a01b0386166000908152601260205260409020829055601e8054820190555b83156136f5576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b6137046001612702565b6007556137116002612702565b60085561371c6126e2565b6004556001600160a01b0382161561375b576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b336000908152601360205260409020600981015460ff16151585151514156137bd576040805162461bcd60e51b815260206004820152601060248201526f73616d6520657869742073746174757360801b604482015290519081900360640190fd5b80546137fc576040805162461bcd60e51b8152602060048201526009602482015268302062616c616e636560b81b604482015290519081900360640190fd5b60098101805460ff191695151595909517909455505042600a830155506000600b90910155565b3390565b600080805260136020527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c54829015158061387c57506001600160a01b03821660009081526013602052604090206006015415155b806138a157506001600160a01b03821660009081526013602052604090206007015415155b156138c457506001600160a01b0381166000908152601360205260409020600101545b6001600160a01b03821615613952576000806138e184600161103a565b90925090506000806138f486600261103a565b90925090508115613923576001600160a01b0386166000908152601260205260409020829055601e8054820190555b831561394d576001600160a01b0386166000908152601160205260409020849055601d8054840190555b505050505b61395c6001612702565b6007556139696002612702565b6008556139746126e2565b6004556001600160a01b038216156139b3576007546001600160a01b038316600090815260136020526040902060048101919091556008546005909101555b60155442106139f25760018314156139db576001546139d3908590613b31565b6005556139ed565b6001546139e9908590613b31565b6006555b613a73565b601554600090613a029042613a8f565b90506001841415613a41576000613a2460055483613ad890919063ffffffff16565b600154909150613a38906110a38884613d05565b60055550613a71565b6000613a5860065483613ad890919063ffffffff16565b600154909150613a6c906110a38884613d05565b600655505b505b426004819055600154613a869190613d05565b60155550505050565b6000613ad183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613dc8565b9392505050565b600082613ae757506000610ac6565b82820282848281613af457fe5b0414613ad15760405162461bcd60e51b81526004018080602001828103825260218152602001806142836021913960400191505060405180910390fd5b6000613ad183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e5f565b600080613b8133600161103a565b9092509050600080613b9433600261103a565b9092509050613ba63385858585613ec4565b50505050565b601c546040805163543a185d60e11b81526001600160a01b0384811660048301529151919092169163a87430ba916024808301926101a0929190829003018186803b158015613bfa57600080fd5b505afa158015613c0e573d6000803e3d6000fd5b505050506040513d6101a0811015613c2557600080fd5b508051602080830151606084015160a085015160c0909501516001600160a01b0390961660009081526013909352604090922060068101959095556005850193909355600384015560018301919091559055565b601854600160a01b900460ff16613cc6576040805162461bcd60e51b815260206004820152600c60248201526b4e6f74206578697461626c6560a01b604482015290519081900360640190fd5b6001600160a01b038116600090815260136020526040902060098101805460ff19166001179055613cf682612a0a565b600b82015542600a9091015550565b600082820183811015613ad1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600f5460408051631abe49b560e21b81526001600160a01b0385811660048301526024820185905291519190921691636af926d491604480830192600092919082900301818387803b158015613db457600080fd5b505af1158015612554573d6000803e3d6000fd5b60008184841115613e575760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e1c578181015183820152602001613e04565b50505050905090810190601f168015613e495780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183613eae5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613e1c578181015183820152602001613e04565b506000838581613eba57fe5b0495945050505050565b6001600160a01b0385166000908152601360205260408120601754909190613efb90670de0b6b3a7640000906110a3908990613ad8565b90506000613f20670de0b6b3a76400006110a360175488613ad890919063ffffffff16565b9050861561405757601a546001600160a01b031663a9059cbb89613f448a86613a8f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613f8a57600080fd5b505af1158015613f9e573d6000803e3d6000fd5b505050506040513d6020811015613fb457600080fd5b5050811561404257601a546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018690529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561401557600080fd5b505af1158015614029573d6000803e3d6000fd5b505050506040513d602081101561403f57600080fd5b50505b60028301546140519088613d05565b60028401555b841561418c57601b546001600160a01b031663a9059cbb896140798885613a8f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156140bf57600080fd5b505af11580156140d3573d6000803e3d6000fd5b505050506040513d60208110156140e957600080fd5b5050801561417757601b546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561414a57600080fd5b505af115801561415e573d6000803e3d6000fd5b505050506040513d602081101561417457600080fd5b50505b60038301546141869086613d05565b60038401555b600085118061419b5750600087115b156141ea57604080516001600160a01b038a1681526020810189905280820187905290517ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e27317439181900360600190a15b85156141f957601d8054870190555b831561420857601e8054850190555b505042600c9190910155505050506001600160a01b031660009081526011602090815260408083208390556012909152812055565b604051806101e00160405280600f90602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726c617374436c61696d54696d65203e2062697274684461746500000000000000a2646970667358221220ca6ce80931c45f5c562178c3d0d997c1020bf31829d4a0e4da5ab4fff9f967ad64736f6c634300060c0033

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

000000000000000000000000c586aea83a96d57764a431b9f4e2e84844075a0100000000000000000000000080ab141f324c3d6f2b18b030f1c4e95d4d65877800000000000000000000000080ab141f324c3d6f2b18b030f1c4e95d4d6587780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9775d818fc23e07ac4b8efd4c58972f7c59bc0f0000000000000000000000004e8a7c429192bfda8c9a1ef0f3b749d0f66657aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ddf3273a23c256ab805ca71f9b2e42767afdd4bd

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

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000c586aea83a96d57764a431b9f4e2e84844075a01
Arg [1] : 00000000000000000000000080ab141f324c3d6f2b18b030f1c4e95d4d658778
Arg [2] : 00000000000000000000000080ab141f324c3d6f2b18b030f1c4e95d4d658778
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000d9775d818fc23e07ac4b8efd4c58972f7c59bc0f
Arg [5] : 0000000000000000000000004e8a7c429192bfda8c9a1ef0f3b749d0f66657aa
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000ddf3273a23c256ab805ca71f9b2e42767afdd4bd


Deployed Bytecode Sourcemap

9597:23000:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18776:304;;;;;;;;;;;;;;;;-1:-1:-1;18776:304:0;-1:-1:-1;;;;;18776:304:0;;:::i;:::-;;;;;;;;;;;;;;;;27777:255;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27777:255:0;;;;;;;;:::i;16501:95::-;;;;;;;;;;;;;;;;-1:-1:-1;16501:95:0;;:::i;:::-;;32254:163;;;;;;;;;;;;;;;;-1:-1:-1;32254:163:0;;;;;;-1:-1:-1;;;;;32254:163:0;;:::i;30053:1308::-;;;;;;;;;;;;;;;;-1:-1:-1;30053:1308:0;-1:-1:-1;;;;;30053:1308:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30053:1308:0;;;;;;-1:-1:-1;;;;;30053:1308:0;;;;;;-1:-1:-1;;;;;30053:1308:0;;;;;;-1:-1:-1;;;;;30053:1308:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10442:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;11533:37;;;:::i;:::-;;;;-1:-1:-1;;;;;11533:37:0;;;;;;;;;;;;;;26645:155;;;;;;;;;;;;;;;;-1:-1:-1;26645:155:0;;;;;;;:::i;11426:20::-;;;:::i;11579:26::-;;;:::i;17403:167::-;;;:::i;17578:1190::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17578:1190:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10090:54;;;:::i;23522:117::-;;;:::i;16699:197::-;;;;;;;;;;;;;;;;-1:-1:-1;16699:197:0;;;;;;;;;;;;:::i;19085:132::-;;;;;;;;;;;;;;;;-1:-1:-1;19085:132:0;;;;;;;;;;;;;;:::i;22537:138::-;;;:::i;10580:23::-;;;:::i;31927:110::-;;;;;;;;;;;;;;;;-1:-1:-1;31927:110:0;;;;:::i;16904:491::-;;;;;;;;;;;;;;;;-1:-1:-1;16904:491:0;;;;;;;;;;;;;;;;;;;;;;:::i;32045:82::-;;;;;;;;;;;;;;;;-1:-1:-1;32045:82:0;;;;:::i;9978:40::-;;;:::i;11330:24::-;;;:::i;16289:100::-;;;;;;;;;;;;;;;;-1:-1:-1;16289:100:0;-1:-1:-1;;;;;16289:100:0;;:::i;19225:1228::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19225:1228:0;;;;;;;;;;;;;;;;;;;;:::i;23647:2011::-;;;;;;;;;;;;;;;;-1:-1:-1;23647:2011:0;;:::i;11393:24::-;;;:::i;29945:100::-;;;:::i;28771:86::-;;;:::i;32135:111::-;;;;;;;;;;;;;;;;-1:-1:-1;32135:111:0;;:::i;16397:96::-;;;;;;;;;;;;;;;;-1:-1:-1;16397:96:0;;:::i;7414:148::-;;;:::i;9907:25::-;;;:::i;29021:154::-;;;:::i;10493:40::-;;;:::i;29183:754::-;;;;;;;;;;;;;;;;-1:-1:-1;29183:754:0;;:::i;11363:23::-;;;:::i;6772:79::-;;;:::i;31369:171::-;;;;;;;;;;;;;;;;-1:-1:-1;31369:171:0;-1:-1:-1;;;;;31369:171:0;;:::i;9779:38::-;;;:::i;9939:30::-;;;:::i;31545:374::-;;;;;;;;;;;;;;;;-1:-1:-1;31545:374:0;-1:-1:-1;;;;;31545:374:0;;:::i;11207:38::-;;;;;;;;;;;;;;;;-1:-1:-1;11207:38:0;-1:-1:-1;;;;;11207:38:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10152:59;;;:::i;28040:607::-;;;;;;;;;;;;;;;;-1:-1:-1;28040:607:0;-1:-1:-1;;;;;28040:607:0;;:::i;11614:31::-;;;:::i;16604:87::-;;;;;;;;;;;;;;;;-1:-1:-1;16604:87:0;-1:-1:-1;;;;;16604:87:0;;:::i;32425:169::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32425:169:0;;;;;;;;;;;;;;;;;:::i;9740:30::-;;;:::i;10025:56::-;;;:::i;28865:148::-;;;;;;;;;;;;;;;;-1:-1:-1;28865:148:0;;:::i;10290:29::-;;;:::i;9826:36::-;;;:::i;25666:971::-;;;:::i;9871:29::-;;;:::i;11455:32::-;;;:::i;10221:62::-;;;:::i;11294:27::-;;;:::i;28655:108::-;;;:::i;7717:244::-;;;;;;;;;;;;;;;;-1:-1:-1;7717:244:0;-1:-1:-1;;;;;7717:244:0;;:::i;10542:29::-;;;:::i;11494:32::-;;;:::i;11254:31::-;;;:::i;11652:36::-;;;:::i;23136:378::-;;;;;;;;;;;;;;;;-1:-1:-1;23136:378:0;;;;:::i;18776:304::-;18829:7;18848:19;18878;18908:11;18951:22;18958:7;9665:1;18951:6;:22::i;:::-;18930:43;;-1:-1:-1;18930:43:0;-1:-1:-1;19005:22:0;19012:7;9698:1;19005:6;:22::i;:::-;-1:-1:-1;19047:25:0;;;;;-1:-1:-1;;;18776:304:0;;;;:::o;27777:255::-;-1:-1:-1;;;;;27892:14:0;;27852:7;27892:14;;;:5;:14;;;;;27920;;;;9730:1;27920:22;;:51;;;27962:9;27946:4;:14;;;:25;27920:51;27917:88;;;27993:12;;-1:-1:-1;27986:19:0;;27917:88;28023:1;28016:8;;;27777:255;;;;;:::o;16501:95::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;16568:11:::1;:20:::0;16501:95::o;32254:163::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32349:18:0;::::1;32341:27;;;::::0;::::1;;32379:30;::::0;-1:-1:-1;;;;;32379:22:0;::::1;::::0;:30;::::1;;;::::0;32402:6;;32379:30:::1;::::0;;;32402:6;32379:22;:30;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32254:163:::0;;:::o;30053:1308::-;30118:26;;:::i;:::-;-1:-1:-1;;;;;30348:14:0;;;30157:26;30348:14;;;:5;:14;;;;;;;;30386:12;;30373:25;;30422:14;;;;30409:10;;;:27;30460:17;;;;30447:10;;;:30;30501:17;;;;30488:10;;;:30;30542:12;;30529:10;;;:25;30578:17;;30565:10;;;:30;30619:11;;:36;;-1:-1:-1;;;30619:36:0;;30649:4;30537:1;30619:36;;;;;30157:26;;;;;;;;;;30348:14;30619:11;;;;:21;;:36;;;;;30348:14;30619:36;;;;;:11;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30619:36:0;30606:10;;;:49;30689:21;9665:1;30689:14;:21::i;:::-;30676:10;;;:34;30734:21;9698:1;30734:14;:21::i;:::-;30721:10;;;:34;30789:15;30796:7;30789:6;:15::i;:::-;30776:10;;;:28;30831:18;;;;30817:11;;;:32;30874:20;30886:7;30874:11;:20::i;:::-;30860:11;;;:34;30921:17;;;;30907:11;;;:31;30963:21;;;;30949:11;;;:35;31026:11;;31078;;31129:10;;31160:9;;;;31200:37;;;-1:-1:-1;;;31200:37:0;;31231:4;31200:37;;;;;;-1:-1:-1;;;;;31026:11:0;;;;-1:-1:-1;31078:11:0;;;;-1:-1:-1;31129:10:0;;;;;-1:-1:-1;31160:9:0;;;-1:-1:-1;31129:10:0;;31200:22;;:37;;;;;30860:11;;31200:37;;;;;;;31129:10;31200:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31200:37:0;31286:10;;:37;;;-1:-1:-1;;;31286:37:0;;31317:4;31286:37;;;;;;31200;;-1:-1:-1;;;;;;31286:10:0;;;;:22;;:37;;;;;31200;;31286;;;;;;;;:10;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31286:37:0;31262:91;;;-1:-1:-1;;;31262:91:0;;;;-1:-1:-1;;;;;31262:89:0;;;;;;:91;;;;;31286:37;;31262:91;;;;;;;;:89;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31262:91:0;31248:11;;;:105;-1:-1:-1;31248:7:0;;30053:1308;;-1:-1:-1;30053:1308:0;;;;:::o;10442:42::-;;;;;;:::o;11533:37::-;;;-1:-1:-1;;;;;11533:37:0;;:::o;26645:155::-;12873:7;:5;:7::i;:::-;-1:-1:-1;;;;;12859:21:0;:10;-1:-1:-1;;;;;12859:21:0;;:71;;;-1:-1:-1;12919:10:0;;-1:-1:-1;;;;;12919:10:0;12897;:33;12859:71;:110;;;-1:-1:-1;12961:8:0;;-1:-1:-1;;;;;12961:8:0;12947:10;:22;12859:110;12851:164;;;;;-1:-1:-1;;;12851:164:0;;;;;;;;;;;;-1:-1:-1;;;12851:164:0;;;;;;;;;;;;;;;26747:45:::1;26774:6;26782:9;26747:26;:45::i;:::-;26645:155:::0;;:::o;11426:20::-;;;-1:-1:-1;;;11426:20:0;;;;;:::o;11579:26::-;;;-1:-1:-1;;;;;11579:26:0;;:::o;17403:167::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;17456:11:::1;::::0;17516:10:::1;::::0;17456:81:::1;::::0;;-1:-1:-1;;;17456:81:0;;17491:10:::1;17456:81;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;17456: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;;17561:1:0::1;17548:10;:14:::0;17403:167::o;17578:1190::-;-1:-1:-1;;;;;17699:14:0;;17650:7;17699:14;;;:5;:14;;;;;17650:7;;;9665:1;17749:18;;:89;;17810:4;:28;;;17749:89;;;17784:4;:23;;;17749:89;17726:112;;17851:14;17868:126;17989:4;17868:116;17916:57;17960:12;17916:25;17931:9;17916:14;:25::i;:::-;:43;;:57::i;:::-;17868:29;17878:7;17887:9;17868;:29::i;:::-;:33;;:116::i;:::-;:120;;:126::i;:::-;18042:9;;;;17851:143;;-1:-1:-1;18007:17:0;;18042:9;;18039:542;;;18087:18;;;;18123;;;;:30;-1:-1:-1;18120:99:0;;;-1:-1:-1;18185:18:0;;;;18120:99;18233:14;18282:6;18269:9;18251:15;:27;18250:38;;;;;;18233:55;;18303:22;18340:6;18328:11;;:18;;;;;;18303:43;;18373:14;18364:6;:23;18361:85;;;18416:14;18407:23;;18361:85;18533:21;;18472:97;;:38;18495:14;18472:38;:6;18483;18472:10;:18::i;:97::-;18460:109;;18039:542;;;;18591:15;9665:1;18609:9;:18;:89;;-1:-1:-1;;;;;18670:28:0;;;;;;:19;:28;;;;;;18609:89;;;-1:-1:-1;;;;;18644:23:0;;;;;;:14;:23;;;;;;18609:89;18591:107;-1:-1:-1;18591:107:0;18717:21;:6;18728:9;18717:10;:21::i;:::-;:31;;18750:9;;-1:-1:-1;17578:1190:0;;-1:-1:-1;;;;;;;17578:1190:0:o;10090:54::-;;;;:::o;23522:117::-;23585:10;23579:17;;;;:5;:17;;;;;:25;23570:35;;:8;:35::i;:::-;23616:15;:13;:15::i;:::-;23522:117::o;16699:197::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;16803:6:::1;:15:::0;;;;16829:12:::1;:26:::0;16866:9:::1;:22:::0;16699:197::o;19085:132::-;19161:48;19172:10;19184:6;19192:9;19203:5;19161:10;:48::i;22537:138::-;13168:11;;22575:10;;-1:-1:-1;;;;;13168:11:0;:25;13165:925;;-1:-1:-1;;;;;13212:14:0;;;;;;:5;:14;;;;;:24;;;13209:870;;13353:16;;;13367:1;13353:16;;;;;;;;;13259:20;;;;13329:21;;13353:16;;;13329:21;;13353:16;;;-1:-1:-1;;13545:11:0;;13529:43;;;-1:-1:-1;;;13529:43:0;;-1:-1:-1;;;;;13529:43:0;;;;;;;;;13329:40;;-1:-1:-1;13545:11:0;;;13529:34;;-1:-1:-1;13529:43:0;;;;;;;;;;;;;;13545:11;13529:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13529:43:0;;;;;;;;;;;;;;;;;;;;;13475:7;;13529:43;;;;;;;13475:4;;13480:1;;13475:7;;;;;;;;;;;13491:4;13496:1;13491:7;;;;;;;;;;;;;13500:4;13505:1;13500:7;;;;;;;;;;;;;;;;;13388:184;;;;;;;;;;;;;-1:-1:-1;13388:184:0;-1:-1:-1;13594:16:0;;13591:473;;13728:9;;13717:4;13722:1;13717:7;;;;;;;;;;;;;;:20;;13709:58;;;;;-1:-1:-1;;;13709:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13709:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13790:14:0;;;;;;:5;:14;;;;;:19;;:29;;-1:-1:-1;;13790:29:0;;;;;;;13873:7;;;;13790:14;13873:7;;;;;;;;;;13842:5;:14;13848:7;-1:-1:-1;;;;;13842:14:0;-1:-1:-1;;;;;13842:14:0;;;;;;;;;;;;:28;;:38;;;;13934:4;13939:1;13934:7;;;;;;;;;;;;;;13903:5;:14;13909:7;-1:-1:-1;;;;;13903:14:0;-1:-1:-1;;;;;13903:14:0;;;;;;;;;;;;:28;;:38;;;;13994:4;13999:1;13994:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13964:14:0;;;;;;:5;:14;;;;;;;:27;;:37;14024:20;13970:7;14024:11;:20::i;:::-;13209:870;;;;22609:10:::1;22621:1;14199:14:::0;;;:5:::1;:14;::::0;;;;:22;:26;;;:61:::1;;-1:-1:-1::0;;;;;;14229:14:0;::::1;14259:1;14229:14:::0;;;:5:::1;:14;::::0;;;;:27:::1;;::::0;:31;;14199:61:::1;:113;;;-1:-1:-1::0;;;;;;14277:14:0;::::1;14311:1;14277:14:::0;;;:5:::1;:14;::::0;;;;:31:::1;;::::0;:35;;14199:113:::1;14196:190;;;-1:-1:-1::0;;;;;;14350:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:24:::1;;::::0;14196:190:::1;-1:-1:-1::0;;;;;14410:21:0;::::1;::::0;14406:820:::1;;14448:19;14482:21:::0;14551:22:::1;14558:7;9665:1;14551:6;:22::i;:::-;14520:53:::0;;-1:-1:-1;14520:53:0;-1:-1:-1;14590:19:0::1;::::0;14693:22:::1;14700:7:::0;9698:1:::1;14693:6;:22::i;:::-;14662:53:::0;;-1:-1:-1;14662:53:0;-1:-1:-1;14908:15:0;;14905:153:::1;;-1:-1:-1::0;;;;;14943:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;:42;;;15004:21:::1;:38:::0;;;::::1;::::0;;14905:153:::1;15075:15:::0;;15072:143:::1;;-1:-1:-1::0;;;;;15110:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:37;;;15166:16:::1;:33:::0;;;::::1;::::0;;15072:143:::1;14406:820;;;;;15270:21;9665:1;15270:14;:21::i;:::-;15246;:45:::0;15331:21:::1;9698:1;15331:14;:21::i;:::-;15302:26;:50:::0;15380:26:::1;:24;:26::i;:::-;15363:14;:43:::0;-1:-1:-1;;;;;15421:21:0;::::1;::::0;15417:193:::1;;15495:21;::::0;-1:-1:-1;;;;;15459:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:33:::1;::::0;::::1;:57:::0;;;;15572:26:::1;::::0;15531:38:::1;::::0;;::::1;:67:::0;15417:193:::1;22652:15:::2;:13;:15::i;10580:23::-:0;;;-1:-1:-1;;;;;10580:23:0;;:::o;31927:110::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;32000:22:::1;:29:::0;;-1:-1:-1;;32000:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31927:110::o;16904:491::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;17149:14:::1;:32:::0;;;;17192:10:::1;:24:::0;;;;17227:15:::1;:34:::0;17274:21:::1;:46:::0;17331:26:::1;:56:::0;16904:491::o;32045:82::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;32104:8:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;32104:15:0::1;-1:-1:-1::0;;;;32104:15:0;;::::1;::::0;;;::::1;::::0;;32045:82::o;9978:40::-;;;;:::o;11330:24::-;;;;:::o;16289:100::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;16359:9:::1;:22:::0;;-1:-1:-1;;;;;;16359:22:0::1;-1:-1:-1::0;;;;;16359:22:0;;;::::1;::::0;;;::::1;::::0;;16289:100::o;19225:1228::-;13168:11;;19337:5;;-1:-1:-1;;;;;13168:11:0;:25;13165:925;;-1:-1:-1;;;;;13212:14:0;;;;;;:5;:14;;;;;:24;;;13209:870;;13353:16;;;13367:1;13353:16;;;;;;;;;13259:20;;;;13329:21;;13353:16;;;13329:21;;13353:16;;;-1:-1:-1;;13545:11:0;;13529:43;;;-1:-1:-1;;;13529:43:0;;-1:-1:-1;;;;;13529:43:0;;;;;;;;;13329:40;;-1:-1:-1;13545:11:0;;;13529:34;;-1:-1:-1;13529:43:0;;;;;;;;;;;;;;13545:11;13529:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13529:43:0;;;;;;;;;;;;;;;;;;;;;13475:7;;13529:43;;;;;;;13475:4;;13480:1;;13475:7;;;;;;;;;;;13491:4;13496:1;13491:7;;;;;;;;;;;;;13500:4;13505:1;13500:7;;;;;;;;;;;;;;;;;13388:184;;;;;;;;;;;;;-1:-1:-1;13388:184:0;-1:-1:-1;13594:16:0;;13591:473;;13728:9;;13717:4;13722:1;13717:7;;;;;;;;;;;;;;:20;;13709:58;;;;;-1:-1:-1;;;13709:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13709:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13790:14:0;;;;;;:5;:14;;;;;:19;;:29;;-1:-1:-1;;13790:29:0;;;;;;;13873:7;;;;13790:14;13873:7;;;;;;;;;;13842:5;:14;13848:7;-1:-1:-1;;;;;13842:14:0;-1:-1:-1;;;;;13842:14:0;;;;;;;;;;;;:28;;:38;;;;13934:4;13939:1;13934:7;;;;;;;;;;;;;;13903:5;:14;13909:7;-1:-1:-1;;;;;13903:14:0;-1:-1:-1;;;;;13903:14:0;;;;;;;;;;;;:28;;:38;;;;13994:4;13999:1;13994:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13964:14:0;;;;;;:5;:14;;;;;;;:27;;:37;14024:20;13970:7;14024:11;:20::i;:::-;13209:870;;;;-1:-1:-1;;;;;14199:14:0;::::1;14224:1;14199:14:::0;;;:5:::1;:14;::::0;;;;:22;19368:5;;19375:9;;14199:26;;;:61:::1;;-1:-1:-1::0;;;;;;14229:14:0;::::1;14259:1;14229:14:::0;;;:5:::1;:14;::::0;;;;:27:::1;;::::0;:31;;14199:61:::1;:113;;;-1:-1:-1::0;;;;;;14277:14:0;::::1;14311:1;14277:14:::0;;;:5:::1;:14;::::0;;;;:31:::1;;::::0;:35;;14199:113:::1;14196:190;;;-1:-1:-1::0;;;;;;14350:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:24:::1;;::::0;14196:190:::1;-1:-1:-1::0;;;;;14410:21:0;::::1;::::0;14406:820:::1;;14448:19;14482:21:::0;14551:22:::1;14558:7;9665:1;14551:6;:22::i;:::-;14520:53:::0;;-1:-1:-1;14520:53:0;-1:-1:-1;14590:19:0::1;::::0;14693:22:::1;14700:7:::0;9698:1:::1;14693:6;:22::i;:::-;14662:53:::0;;-1:-1:-1;14662:53:0;-1:-1:-1;14908:15:0;;14905:153:::1;;-1:-1:-1::0;;;;;14943:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;:42;;;15004:21:::1;:38:::0;;;::::1;::::0;;14905:153:::1;15075:15:::0;;15072:143:::1;;-1:-1:-1::0;;;;;15110:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:37;;;15166:16:::1;:33:::0;;;::::1;::::0;;15072:143:::1;14406:820;;;;;15270:21;9665:1;15270:14;:21::i;:::-;15246;:45:::0;15331:21:::1;9698:1;15331:14;:21::i;:::-;15302:26;:50:::0;15380:26:::1;:24;:26::i;:::-;15363:14;:43:::0;-1:-1:-1;;;;;15421:21:0;::::1;::::0;15417:193:::1;;15495:21;::::0;-1:-1:-1;;;;;15459:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:33:::1;::::0;::::1;:57:::0;;;;15572:26:::1;::::0;15531:38:::1;::::0;;::::1;:67:::0;15417:193:::1;9665:1:::2;19431:9;:16;:37;;;;9698:1;19451:9;:17;19431:37;:56;;;;9730:1;19472:9;:15;19431:56;19423:86;;;::::0;;-1:-1:-1;;;19423:86:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;19423:86:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;19543:12:0;::::2;19523:17;19543:12:::0;;;:5:::2;:12;::::0;;;;19575;;:17;:41;::::2;;;-1:-1:-1::0;19596:17:0::2;::::0;::::2;::::0;:20;19575:41:::2;:71;;;;-1:-1:-1::0;19620:21:0::2;::::0;::::2;::::0;:26;19575:71:::2;19574:101;;;;19666:9;19650:4;:14;;;:25;19574:101;19566:132;;;::::0;;-1:-1:-1;;;19566:132:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;19566:132:0;;;;;;;;;;;;;::::2;;19714:9;::::0;::::2;::::0;::::2;;::::0;:41:::2;;-1:-1:-1::0;19728:12:0;;:17;:26;::::2;;;;19749:5;19728:26;19711:169;;;19771:17;19782:5;19771:10;:17::i;:::-;19711:169;;;19808:12:::0;;:17;:27;::::2;;;;19830:5;19829:6;19808:27;19805:75;;;19851:9;::::0;::::2;:17:::0;;-1:-1:-1;;19851:17:0::2;::::0;;19805:75:::2;19892:11;::::0;:68:::2;::::0;;-1:-1:-1;;;19892:68:0;;19925:10:::2;19892:68;::::0;::::2;::::0;19946:4:::2;19892:68:::0;;;;;;;;;;;;-1:-1:-1;;;;;19892: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;;19973:14:0::2;::::0;::::2;:26:::0;;;20025:12;;:24:::2;::::0;20042:6;20025:16:::2;:24::i;:::-;20010:39:::0;;9665:1:::2;20065:18:::0;::::2;20062:325;;;20114:12;::::0;:24:::2;::::0;20131:6;20114:16:::2;:24::i;:::-;20099:12;:39:::0;20062:325:::2;;;9698:1;20158:9;:18;20155:232;;;20212:17;::::0;:29:::2;::::0;20234:6;20212:21:::2;:29::i;:::-;20192:17;:49:::0;20155:232:::2;;;20292:17;::::0;:29:::2;::::0;20314:6;20292:21:::2;:29::i;:::-;20272:17;:49:::0;20351:12:::2;::::0;:24:::2;::::0;20368:6;20351:16:::2;:24::i;:::-;20336:12;:39:::0;20155:232:::2;20412:33;::::0;;-1:-1:-1;;;;;20412:33:0;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;;;;::::2;::::0;;;;;;;::::2;15620:1;14100::::1;;19225:1228:::0;;;;;:::o;23647:2011::-;13168:11;;23702:10;;-1:-1:-1;;;;;13168:11:0;:25;13165:925;;-1:-1:-1;;;;;13212:14:0;;;;;;:5;:14;;;;;:24;;;13209:870;;13353:16;;;13367:1;13353:16;;;;;;;;;13259:20;;;;13329:21;;13353:16;;;13329:21;;13353:16;;;-1:-1:-1;;13545:11:0;;13529:43;;;-1:-1:-1;;;13529:43:0;;-1:-1:-1;;;;;13529:43:0;;;;;;;;;13329:40;;-1:-1:-1;13545:11:0;;;13529:34;;-1:-1:-1;13529:43:0;;;;;;;;;;;;;;13545:11;13529:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13529:43:0;;;;;;;;;;;;;;;;;;;;;13475:7;;13529:43;;;;;;;13475:4;;13480:1;;13475:7;;;;;;;;;;;13491:4;13496:1;13491:7;;;;;;;;;;;;;13500:4;13505:1;13500:7;;;;;;;;;;;;;;;;;13388:184;;;;;;;;;;;;;-1:-1:-1;13388:184:0;-1:-1:-1;13594:16:0;;13591:473;;13728:9;;13717:4;13722:1;13717:7;;;;;;;;;;;;;;:20;;13709:58;;;;;-1:-1:-1;;;13709:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13709:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13790:14:0;;;;;;:5;:14;;;;;:19;;:29;;-1:-1:-1;;13790:29:0;;;;;;;13873:7;;;;13790:14;13873:7;;;;;;;;;;13842:5;:14;13848:7;-1:-1:-1;;;;;13842:14:0;-1:-1:-1;;;;;13842:14:0;;;;;;;;;;;;:28;;:38;;;;13934:4;13939:1;13934:7;;;;;;;;;;;;;;13903:5;:14;13909:7;-1:-1:-1;;;;;13903:14:0;-1:-1:-1;;;;;13903:14:0;;;;;;;;;;;;:28;;:38;;;;13994:4;13999:1;13994:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13964:14:0;;;;;;:5;:14;;;;;;;:27;;:37;14024:20;13970:7;14024:11;:20::i;:::-;13209:870;;;;23737:10:::1;23749:1;14199:14:::0;;;:5:::1;:14;::::0;;;;:22;:26;;;:61:::1;;-1:-1:-1::0;;;;;;14229:14:0;::::1;14259:1;14229:14:::0;;;:5:::1;:14;::::0;;;;:27:::1;;::::0;:31;;14199:61:::1;:113;;;-1:-1:-1::0;;;;;;14277:14:0;::::1;14311:1;14277:14:::0;;;:5:::1;:14;::::0;;;;:31:::1;;::::0;:35;;14199:113:::1;14196:190;;;-1:-1:-1::0;;;;;;14350:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:24:::1;;::::0;14196:190:::1;-1:-1:-1::0;;;;;14410:21:0;::::1;::::0;14406:820:::1;;14448:19;14482:21:::0;14551:22:::1;14558:7;9665:1;14551:6;:22::i;:::-;14520:53:::0;;-1:-1:-1;14520:53:0;-1:-1:-1;14590:19:0::1;::::0;14693:22:::1;14700:7:::0;9698:1:::1;14693:6;:22::i;:::-;14662:53:::0;;-1:-1:-1;14662:53:0;-1:-1:-1;14908:15:0;;14905:153:::1;;-1:-1:-1::0;;;;;14943:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;:42;;;15004:21:::1;:38:::0;;;::::1;::::0;;14905:153:::1;15075:15:::0;;15072:143:::1;;-1:-1:-1::0;;;;;15110:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:37;;;15166:16:::1;:33:::0;;;::::1;::::0;;15072:143:::1;14406:820;;;;;15270:21;9665:1;15270:14;:21::i;:::-;15246;:45:::0;15331:21:::1;9698:1;15331:14;:21::i;:::-;15302:26;:50:::0;15380:26:::1;:24;:26::i;:::-;15363:14;:43:::0;-1:-1:-1;;;;;15421:21:0;::::1;::::0;15417:193:::1;;15495:21;::::0;-1:-1:-1;;;;;15459:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:33:::1;::::0;::::1;:57:::0;;;;15572:26:::1;::::0;15531:38:::1;::::0;;::::1;:67:::0;15417:193:::1;23796:10:::2;23770:17;23790::::0;;;:5:::2;:17;::::0;;;;23838:14:::2;::::0;::::2;::::0;23887:12;;:22;-1:-1:-1;23887:22:0::2;23865:80;;;::::0;;-1:-1:-1;;;23865:80:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;23865:80:0;;;;;;;;;;;;;::::2;;23962:10:::0;;23958:1693:::2;;23989:18;24010:23;24022:10;24010:11;:23::i;:::-;23989:44;;24048:21;24104:6;24091:10;:19;24088:134;;;24146:22;:10:::0;24161:6;24146:14:::2;:22::i;:::-;24130:38;;24200:6;24187:19;;24088:134;24241:9;::::0;::::2;::::0;::::2;;24238:129;;;24270:22;::::0;::::2;:38:::0;;;24348:3:::2;24327:18;::::0;::::2;:24:::0;24238:129:::2;24383:19;24405:22;:6:::0;24416:10;24405::::2;:22::i;:::-;24457:12:::0;;24383:44;;-1:-1:-1;24457:24:0::2;::::0;24474:6;24457:16:::2;:24::i;:::-;24442:39:::0;;9665:1:::2;24499:18:::0;::::2;24496:354;;;24552:12;::::0;:24:::2;::::0;24569:6;24552:16:::2;:24::i;:::-;24537:12;:39:::0;24496:354:::2;;;9698:1;24601:9;:18;24597:253;;;24659:17;::::0;:29:::2;::::0;24681:6;24659:21:::2;:29::i;:::-;24639:17;:49:::0;24597:253:::2;;;24742:12;::::0;:24:::2;::::0;24759:6;24742:16:::2;:24::i;:::-;24727:12;:39:::0;24805:17:::2;::::0;:29:::2;::::0;24827:6;24805:21:::2;:29::i;:::-;24785:17;:49:::0;24597:253:::2;24869:22;::::0;::::2;;::::0;:42:::2;;;9665:1;24895:9;:16;24869:42;24866:735;;;24934:15:::0;;24931:188:::2;;24973:11;::::0;:54:::2;::::0;;-1:-1:-1;;;24973:54:0;;25002:10:::2;24973:54;::::0;::::2;::::0;;;;;;;;;-1:-1:-1;;;;;24973: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;;25055:44:0::2;::::0;;25064:10:::2;25055:44:::0;;24973:54:::2;25055:44:::0;::::2;::::0;;;;;;;;;;;::::2;::::0;;;;;;;::::2;24931:188;25140:14:::0;;25137:165:::2;;25178:37;25192:10;25204;25178:13;:37::i;:::-;25243:39;::::0;;25248:10:::2;25243:39:::0;;::::2;::::0;::::2;::::0;;;;;;;;;;;::::2;::::0;;;;;;;::::2;25137:165;24866:735;;;25340:17;::::0;::::2;:32:::0;;;::::2;::::0;;25391:21:::2;::::0;::::2;:35:::0;;;::::2;::::0;;25467:3:::2;25447:17;::::0;::::2;:23:::0;25491:21:::2;:31:::0;;;::::2;::::0;;25546:39:::2;::::0;;25555:10:::2;25546:39:::0;;::::2;::::0;::::2;::::0;;;;;;;;;;;::::2;::::0;;;;;;;::::2;24866:735;-1:-1:-1::0;;25615:10:0::2;:24:::0;;;;::::2;::::0;;23958:1693:::2;15620:1;;14100::::1;;23647:2011:::0;;:::o;11393:24::-;;;-1:-1:-1;;;;;11393:24:0;;:::o;29945:100::-;30025:11;;-1:-1:-1;;;;;30025:11:0;29945:100;:::o;28771:86::-;28839:10;;28771:86;:::o;32135:111::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;32210:21:::1;:28:::0;32135:111::o;16397:96::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;16465:8:::1;:20:::0;16397:96::o;7414:148::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;7521:1:::1;7505:6:::0;;7484:40:::1;::::0;-1:-1:-1;;;;;7505:6:0;;::::1;::::0;7484:40:::1;::::0;7521:1;;7484:40:::1;7552:1;7535:19:::0;;-1:-1:-1;;;;;;7535:19:0::1;::::0;;7414:148::o;9907:25::-;;;;:::o;29021:154::-;29077:7;29122:12;;29104:15;:30;:63;;29155:12;;29104:63;;;29137:15;29104:63;29097:70;;29021:154;:::o;10493:40::-;;;;:::o;29183:754::-;29246:7;29266:14;9665:1;29283:9;:18;:53;;29319:17;;29283:53;;;29304:12;;29283:53;29266:70;-1:-1:-1;29359:11:0;29355:122;;9665:1;29394:9;:18;:71;;29439:26;;29394:71;;;29415:21;;29394:71;29387:78;;;;;29355:122;9665:1;29490:9;:18;29487:443;;;29531:167;29575:108;29670:12;;29575:90;29660:4;29575:80;29644:10;;29575:46;29606:14;;29575:26;:24;:26::i;:108::-;29531:21;;;:25;:167::i;29487:443::-;29736:182;29785:118;29885:17;;29785:95;29875:4;29785:85;29854:15;;29785:46;29816:14;;29785:26;:24;:26::i;:118::-;29736:26;;;:30;:182::i;11363:23::-;;;;:::o;6772:79::-;6810:7;6837:6;-1:-1:-1;;;;;6837:6:0;6772:79;:::o;31369:171::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31443:25:0;::::1;::::0;31440:93:::1;;31484:10;:37:::0;;-1:-1:-1;;;;;;31484:37:0::1;-1:-1:-1::0;;;;;31484:37:0;::::1;;::::0;;31440:93:::1;31369:171:::0;:::o;9779:38::-;;;;:::o;9939:30::-;;;;:::o;31545:374::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31637:12:0;;::::1;31617:17;31637:12:::0;;;:5:::1;:12;::::0;;;;;;;31679;;31704:11:::1;::::0;:35;;-1:-1:-1;;;31704:35:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;31637:12;;31679;;31704:11;::::1;::::0;:20:::1;::::0;:35;;;;;31637:12;;31704:35;;;;;;;;;:11;:35;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;31757:32:0::1;::::0;;-1:-1:-1;;;;;31757:32:0;::::1;::::0;;31704:35:::1;31757:32:::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;31845:1:0::1;31830:16:::0;;;31857:15:::1;::::0;::::1;:19:::0;;;31887:20:::1;::::0;;::::1;:24:::0;-1:-1:-1;31545:374:0:o;11207:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10152:59::-;;;;:::o;28040:607::-;-1:-1:-1;;;;;28137:14:0;;28098:7;28137:14;;;:5;:14;;;;;28166:9;;;;;;28165:10;;:29;;-1:-1:-1;28179:12:0;;:15;28165:29;28162:68;;;28217:1;28210:8;;;;;28162:68;28240:15;28258:68;28314:11;;28258:51;28301:7;28277:4;:18;;;28259:15;:36;28258:42;;:51;;;;:::i;:68::-;28240:86;;28358:7;28347;:18;;:38;;28378:7;28347:38;;;28368:7;28347:38;28442:22;;;;28425:12;;28337:48;;-1:-1:-1;28398:24:0;;28425:40;;:16;:40::i;:::-;28398:67;-1:-1:-1;28486:15:0;28504:70;28531:42;28565:7;28531:29;28398:67;28552:7;28531:20;:29::i;:42::-;28504:22;;;;;:26;:70::i;:::-;28602:12;;28486:88;;-1:-1:-1;28592:22:0;;:47;;28632:7;28592:47;;;28617:12;;28592:47;28585:54;28040:607;-1:-1:-1;;;;;;28040:607:0:o;11614:31::-;;;;:::o;16604:87::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;16667:8:::1;:16:::0;;-1:-1:-1;;;;;;16667:16:0::1;-1:-1:-1::0;;;;;16667:16:0;;;::::1;::::0;;;::::1;::::0;;16604:87::o;32425:169::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;32552:10:::1;-1:-1:-1::0;;;;;32538:34:0::1;;32573:3;32578:7;32538:48;;;;;;;;;;;;;-1:-1:-1::0;;;;;32538:48:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;;32425:169:0:o;9740:30::-;;;;:::o;10025:56::-;;;;:::o;28865:148::-;28925:7;9665:1;28952:9;:18;:53;;28988:17;;28952:53;;;-1:-1:-1;;28973:12:0;;;28865:148::o;10290:29::-;;;;:::o;9826:36::-;;;;:::o;25666:971::-;13168:11;;25716:10;;-1:-1:-1;;;;;13168:11:0;:25;13165:925;;-1:-1:-1;;;;;13212:14:0;;;;;;:5;:14;;;;;:24;;;13209:870;;13353:16;;;13367:1;13353:16;;;;;;;;;13259:20;;;;13329:21;;13353:16;;;13329:21;;13353:16;;;-1:-1:-1;;13545:11:0;;13529:43;;;-1:-1:-1;;;13529:43:0;;-1:-1:-1;;;;;13529:43:0;;;;;;;;;13329:40;;-1:-1:-1;13545:11:0;;;13529:34;;-1:-1:-1;13529:43:0;;;;;;;;;;;;;;13545:11;13529:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13529:43:0;;;;;;;;;;;;;;;;;;;;;13475:7;;13529:43;;;;;;;13475:4;;13480:1;;13475:7;;;;;;;;;;;13491:4;13496:1;13491:7;;;;;;;;;;;;;13500:4;13505:1;13500:7;;;;;;;;;;;;;;;;;13388:184;;;;;;;;;;;;;-1:-1:-1;13388:184:0;-1:-1:-1;13594:16:0;;13591:473;;13728:9;;13717:4;13722:1;13717:7;;;;;;;;;;;;;;:20;;13709:58;;;;;-1:-1:-1;;;13709:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13709:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13790:14:0;;;;;;:5;:14;;;;;:19;;:29;;-1:-1:-1;;13790:29:0;;;;;;;13873:7;;;;13790:14;13873:7;;;;;;;;;;13842:5;:14;13848:7;-1:-1:-1;;;;;13842:14:0;-1:-1:-1;;;;;13842:14:0;;;;;;;;;;;;:28;;:38;;;;13934:4;13939:1;13934:7;;;;;;;;;;;;;;13903:5;:14;13909:7;-1:-1:-1;;;;;13903:14:0;-1:-1:-1;;;;;13903:14:0;;;;;;;;;;;;:28;;:38;;;;13994:4;13999:1;13994:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13964:14:0;;;;;;:5;:14;;;;;;;:27;;:37;14024:20;13970:7;14024:11;:20::i;:::-;13209:870;;;;25781:10:::1;25755:17;25775::::0;;;:5:::1;:17;::::0;;;;25811::::1;::::0;::::1;::::0;:21;;;:50:::1;;;25860:1;25836:4;:21;;;:25;25811:50;25803:88;;;::::0;;-1:-1:-1;;;25803:88:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25803:88:0;;;;;;;;;;;;;::::1;;25960:10;::::0;:37:::1;::::0;;-1:-1:-1;;;25960:37:0;;25991:4:::1;25960:37;::::0;::::1;::::0;;;25912:21:::1;::::0;-1:-1:-1;;;;;25960: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;25960:37:0;25936:91:::1;::::0;;-1:-1:-1;;;25936:91:0;;;;-1:-1:-1;;;;;25936:89:0;;::::1;::::0;::::1;::::0;:91:::1;::::0;;::::1;::::0;25960:37:::1;::::0;25936:91;;;;;;;;:89;:91;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25936:91:0;26096:17:::1;::::0;::::1;::::0;26078:12:::1;::::0;26066:6:::1;::::0;25936:91;;-1:-1:-1;26096:17:0;;26048:43:::1;::::0;26078:12;26048:25:::1;::::0;25936:91;;26048:17:::1;:25::i;:43::-;:65;;:104;;;-1:-1:-1::0;26130:22:0::1;::::0;::::1;;26048:104;26040:137;;;::::0;;-1:-1:-1;;;26040:137:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26040:137:0;;;;;;;;;;;;;::::1;;26193:17;::::0;::::1;::::0;:21;26190:214:::1;;26230:11;::::0;26272:17:::1;::::0;::::1;::::0;26230:60:::1;::::0;;-1:-1:-1;;;26230:60:0;;26259:10:::1;26230:60;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;26230: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;;26331:17:0::1;::::0;::::1;::::0;26310:46:::1;::::0;;26319:10:::1;26310:46:::0;;26230:60:::1;26310:46:::0;::::1;::::0;;;;9698:1:::1;26310:46:::0;;;;;::::1;::::0;;;;;;;::::1;26391:1;26371:17;::::0;::::1;:21:::0;26190:214:::1;26419:21;::::0;::::1;::::0;:25;26416:214:::1;;26460:48;26474:10;26486:4;:21;;;26460:13;:48::i;:::-;26545:21;::::0;::::1;::::0;26528:46:::1;::::0;;26533:10:::1;26528:46:::0;;::::1;::::0;::::1;::::0;;;;9698:1:::1;26528:46:::0;;;;;::::1;::::0;;;;;;;::::1;26613:1;26589:21;::::0;::::1;:25:::0;14100:1:::1;;25666:971:::0;:::o;9871:29::-;;;;:::o;11455:32::-;;;-1:-1:-1;;;;;11455:32:0;;:::o;10221:62::-;;;;:::o;11294:27::-;;;;:::o;28655:108::-;28734:21;;28655:108;:::o;7717:244::-;6994:12;:10;:12::i;:::-;6984:6;;-1:-1:-1;;;;;6984:6:0;;;:22;;;6976:67;;;;;-1:-1:-1;;;6976:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6976:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;7806:22:0;::::1;7798:73;;;;-1:-1:-1::0;;;7798:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7908:6;::::0;;7887:38:::1;::::0;-1:-1:-1;;;;;7887:38:0;;::::1;::::0;7908:6;::::1;::::0;7887:38:::1;::::0;::::1;7936:6;:17:::0;;-1:-1:-1;;;;;;7936:17:0::1;-1:-1:-1::0;;;;;7936:17:0;;;::::1;::::0;;;::::1;::::0;;7717:244::o;10542:29::-;;;-1:-1:-1;;;;;10542:29:0;;:::o;11494:32::-;;;-1:-1:-1;;;;;11494:32:0;;:::o;11254:31::-;;;;:::o;11652:36::-;;;;:::o;23136:378::-;13168:11;;23185:10;;-1:-1:-1;;;;;13168:11:0;:25;13165:925;;-1:-1:-1;;;;;13212:14:0;;;;;;:5;:14;;;;;:24;;;13209:870;;13353:16;;;13367:1;13353:16;;;;;;;;;13259:20;;;;13329:21;;13353:16;;;13329:21;;13353:16;;;-1:-1:-1;;13545:11:0;;13529:43;;;-1:-1:-1;;;13529:43:0;;-1:-1:-1;;;;;13529:43:0;;;;;;;;;13329:40;;-1:-1:-1;13545:11:0;;;13529:34;;-1:-1:-1;13529:43:0;;;;;;;;;;;;;;13545:11;13529:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13529:43:0;;;;;;;;;;;;;;;;;;;;;13475:7;;13529:43;;;;;;;13475:4;;13480:1;;13475:7;;;;;;;;;;;13491:4;13496:1;13491:7;;;;;;;;;;;;;13500:4;13505:1;13500:7;;;;;;;;;;;;;;;;;13388:184;;;;;;;;;;;;;-1:-1:-1;13388:184:0;-1:-1:-1;13594:16:0;;13591:473;;13728:9;;13717:4;13722:1;13717:7;;;;;;;;;;;;;;:20;;13709:58;;;;;-1:-1:-1;;;13709:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13709:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13790:14:0;;;;;;:5;:14;;;;;:19;;:29;;-1:-1:-1;;13790:29:0;;;;;;;13873:7;;;;13790:14;13873:7;;;;;;;;;;13842:5;:14;13848:7;-1:-1:-1;;;;;13842:14:0;-1:-1:-1;;;;;13842:14:0;;;;;;;;;;;;:28;;:38;;;;13934:4;13939:1;13934:7;;;;;;;;;;;;;;13903:5;:14;13909:7;-1:-1:-1;;;;;13903:14:0;-1:-1:-1;;;;;13903:14:0;;;;;;;;;;;;:28;;:38;;;;13994:4;13999:1;13994:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13964:14:0;;;;;;:5;:14;;;;;;;:27;;:37;14024:20;13970:7;14024:11;:20::i;:::-;13209:870;;;;23220:10:::1;23232:1;14199:14:::0;;;:5:::1;:14;::::0;;;;:22;:26;;;:61:::1;;-1:-1:-1::0;;;;;;14229:14:0;::::1;14259:1;14229:14:::0;;;:5:::1;:14;::::0;;;;:27:::1;;::::0;:31;;14199:61:::1;:113;;;-1:-1:-1::0;;;;;;14277:14:0;::::1;14311:1;14277:14:::0;;;:5:::1;:14;::::0;;;;:31:::1;;::::0;:35;;14199:113:::1;14196:190;;;-1:-1:-1::0;;;;;;14350:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:24:::1;;::::0;14196:190:::1;-1:-1:-1::0;;;;;14410:21:0;::::1;::::0;14406:820:::1;;14448:19;14482:21:::0;14551:22:::1;14558:7;9665:1;14551:6;:22::i;:::-;14520:53:::0;;-1:-1:-1;14520:53:0;-1:-1:-1;14590:19:0::1;::::0;14693:22:::1;14700:7:::0;9698:1:::1;14693:6;:22::i;:::-;14662:53:::0;;-1:-1:-1;14662:53:0;-1:-1:-1;14908:15:0;;14905:153:::1;;-1:-1:-1::0;;;;;14943:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;:42;;;15004:21:::1;:38:::0;;;::::1;::::0;;14905:153:::1;15075:15:::0;;15072:143:::1;;-1:-1:-1::0;;;;;15110:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:37;;;15166:16:::1;:33:::0;;;::::1;::::0;;15072:143:::1;14406:820;;;;;15270:21;9665:1;15270:14;:21::i;:::-;15246;:45:::0;15331:21:::1;9698:1;15331:14;:21::i;:::-;15302:26;:50:::0;15380:26:::1;:24;:26::i;:::-;15363:14;:43:::0;-1:-1:-1;;;;;15421:21:0;::::1;::::0;15417:193:::1;;15495:21;::::0;-1:-1:-1;;;;;15459:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;:33:::1;::::0;::::1;:57:::0;;;;15572:26:::1;::::0;15531:38:::1;::::0;;::::1;:67:::0;15417:193:::1;23288:10:::2;23262:17;23282::::0;;;:5:::2;:17;::::0;;;;23318:9:::2;::::0;::::2;::::0;::::2;;:17;;::::0;::::2;;;;23310:46;;;::::0;;-1:-1:-1;;;23310:46:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;23310:46:0;;;;;;;;;;;;;::::2;;23375:12:::0;;23367:38:::2;;;::::0;;-1:-1:-1;;;23367:38:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;23367:38:0;;;;;;;;;;;;;::::2;;23418:9;::::0;::::2;:16:::0;;-1:-1:-1;;23418:16:0::2;::::0;::::2;;::::0;;;::::2;::::0;;;-1:-1:-1;;23466:3:0::2;23445:18;::::0;::::2;:24:::0;-1:-1:-1;;23480:22:0::2;::::0;;::::2;:26:::0;23136:378::o;5399:106::-;5487:10;5399:106;:::o;26870:899::-;26971:1;14199:14;;;:5;:14;;;:22;26975:9;;14199:26;;;:61;;-1:-1:-1;;;;;;14229:14:0;;14259:1;14229:14;;;:5;:14;;;;;:27;;;:31;;14199:61;:113;;;-1:-1:-1;;;;;;14277:14:0;;14311:1;14277:14;;;:5;:14;;;;;:31;;;:35;;14199:113;14196:190;;;-1:-1:-1;;;;;;14350:14:0;;;;;;:5;:14;;;;;:24;;;14196:190;-1:-1:-1;;;;;14410:21:0;;;14406:820;;14448:19;14482:21;14551:22;14558:7;9665:1;14551:6;:22::i;:::-;14520:53;;-1:-1:-1;14520:53:0;-1:-1:-1;14590:19:0;;14693:22;14700:7;9698:1;14693:6;:22::i;:::-;14662:53;;-1:-1:-1;14662:53:0;-1:-1:-1;14908:15:0;;14905:153;;-1:-1:-1;;;;;14943:28:0;;;;;;:19;:28;;;;;:42;;;15004:21;:38;;;;;;14905:153;15075:15;;15072:143;;-1:-1:-1;;;;;15110:23:0;;;;;;:14;:23;;;;;:37;;;15166:16;:33;;;;;;15072:143;14406:820;;;;;15270:21;9665:1;15270:14;:21::i;:::-;15246;:45;15331:21;9698:1;15331:14;:21::i;:::-;15302:26;:50;15380:26;:24;:26::i;:::-;15363:14;:43;-1:-1:-1;;;;;15421:21:0;;;15417:193;;15495:21;;-1:-1:-1;;;;;15459:14:0;;;;;;:5;:14;;;;;:33;;;:57;;;;15572:26;;15531:38;;;;:67;15417:193;27019:12:::1;;27000:15;:31;26996:670;;9665:1;27051:9;:18;27048:167;;;27113:6;::::0;27102:18:::1;::::0;:6;;:10:::1;:18::i;:::-;27089:10;:31:::0;27048:167:::1;;;27192:6;::::0;27181:18:::1;::::0;:6;;:10:::1;:18::i;:::-;27163:15;:36:::0;27048:167:::1;26996:670;;;27267:12;::::0;27247:17:::1;::::0;27267:33:::1;::::0;27284:15:::1;27267:16;:33::i;:::-;27247:53;;9665:1;27318:9;:18;27315:326;;;27356:16;27375:25;27389:10;;27375:9;:13;;:25;;;;:::i;:::-;27457:6;::::0;27356:44;;-1:-1:-1;27432:32:0::1;::::0;:20:::1;:6:::0;27356:44;27432:10:::1;:20::i;:32::-;27419:10;:45:::0;-1:-1:-1;27315:326:0::1;;;27507:16;27526:30;27540:15;;27526:9;:13;;:30;;;;:::i;:::-;27618:6;::::0;27507:49;;-1:-1:-1;27593:32:0::1;::::0;:20:::1;:6:::0;27507:49;27593:10:::1;:20::i;:32::-;27575:15;:50:::0;-1:-1:-1;27315:326:0::1;26996:670;;27693:15;27676:14;:32:::0;;;27754:6:::1;::::0;27734:27:::1;::::0;27693:15;27734:19:::1;:27::i;:::-;27719:12;:42:::0;-1:-1:-1;;;;26870:899:0:o;860:136::-;918:7;945:43;949:1;952;945:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;938:50;860:136;-1:-1:-1;;;860:136:0:o;1750:471::-;1808:7;2053:6;2049:47;;-1:-1:-1;2083:1:0;2076:8;;2049:47;2120:5;;;2124:1;2120;:5;:1;2144:5;;;;;:10;2136:56;;;;-1:-1:-1;;;2136:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2697:132;2755:7;2782:39;2786:1;2789;2782:39;;;;;;;;;;;;;;;;;:3;:39::i;22683:445::-;22726:19;22756:21;22821:25;22828:10;9665:1;22821:6;:25::i;:::-;22790:56;;-1:-1:-1;22790:56:0;-1:-1:-1;22859:19:0;;22954:25;22961:10;9698:1;22954:6;:25::i;:::-;22923:56;;-1:-1:-1;22923:56:0;-1:-1:-1;22992:128:0;23017:10;23042:11;23055:13;22923:56;;22992:10;:128::i;:::-;22683:445;;;;:::o;15637:644::-;16246:11;;16230:43;;;-1:-1:-1;;;16230:43:0;;-1:-1:-1;;;;;16230:43:0;;;;;;;;;16246:11;;;;;16230:34;;:43;;;;;;;;;;;;;;16246:11;16230:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16230:43:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15716:14:0;;;;;;;:5;:14;;;16230:43;15716:14;;;15979:27;;;15697:576;;;;15922:38;;;15697:576;;;;15833:30;;;15697:576;15757:24;;;15697:576;;;;;;15637:644::o;20461:265::-;20522:8;;-1:-1:-1;;;20522:8:0;;;;20514:33;;;;;-1:-1:-1;;;20514:33:0;;;;;;;;;;;;-1:-1:-1;;;20514:33:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20578:12:0;;20558:17;20578:12;;;:5;:12;;;;;20601:9;;;:16;;-1:-1:-1;;20601:16:0;20613:4;20601:16;;;20653:18;20584:5;20653:11;:18::i;:::-;20628:22;;;:43;20703:15;20682:18;;;;:36;-1:-1:-1;20461:265:0:o;396:181::-;454:7;486:5;;;510:6;;;;502:46;;;;;-1:-1:-1;;;502:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;22372:157;22445:10;;:76;;;-1:-1:-1;;;22445:76:0;;-1:-1:-1;;;;;22445:76:0;;;;;;;;;;;;;;;:10;;;;;:24;;:76;;;;;:10;;:76;;;;;;;:10;;:76;;;;;;;;;;;;;;;;;;;;;;;;;;1299:192;1385:7;1421:12;1413:6;;;;1405:29;;;;-1:-1:-1;;;1405:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1457:5:0;;;1299:192::o;3325:278::-;3411:7;3446:12;3439:5;3431:28;;;;-1:-1:-1;;;3431:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3470:9;3486:1;3482;:5;;;;;;;3325:278;-1:-1:-1;;;;;3325:278:0:o;20731:1633::-;-1:-1:-1;;;;;20925:18:0;;20905:17;20925:18;;;:5;:18;;;;;20984:8;;20925:18;;20905:17;20968:38;;20998:7;;20968:25;;:11;;:15;:25::i;:38::-;20948:58;;21017:22;21042:38;21072:7;21042:25;21058:8;;21042:11;:15;;:25;;;;:::i;:38::-;21017:63;-1:-1:-1;21096:15:0;;21093:296;;21127:11;;-1:-1:-1;;;;;21127:11:0;:20;21148:11;21161:26;:11;21177:9;21161:15;:26::i;:::-;21127:61;;;;;;;;;;;;;-1:-1:-1;;;;;21127:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21206:13:0;;21203:77;;21238:11;;21259:9;;21238:42;;;-1:-1:-1;;;21238:42:0;;-1:-1:-1;;;;;21259:9:0;;;21238:42;;;;;;;;;;;;:11;;;;;:20;;:42;;;;;;;;;;;;;;:11;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21203:77:0;21313:15;;;;:64;;21351:11;21313:19;:64::i;:::-;21295:15;;;:82;21093:296;21404:15;;21401:362;;21435:16;;-1:-1:-1;;;;;21435:16:0;:25;21461:11;21474:31;:11;21490:14;21474:15;:31::i;:::-;21435:71;;;;;;;;;;;;;-1:-1:-1;;;;;21435:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21538:18:0;;21535:92;;21575:16;;21601:9;;21575:52;;;-1:-1:-1;;;21575:52:0;;-1:-1:-1;;;;;21601:9:0;;;21575:52;;;;;;;;;;;;:16;;;;;:25;;:52;;;;;;;;;;;;;;:16;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21535:92:0;21682:20;;;;:69;;21725:11;21682:24;:69::i;:::-;21659:20;;;:92;21401:362;21800:1;21786:11;:15;:34;;;;21819:1;21805:11;:15;21786:34;21783:122;;;21841:52;;;-1:-1:-1;;;;;21841:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;21783:122;21920:17;;21917:146;;22018:16;:33;;;;;;21917:146;22076:17;;22073:151;;22174:21;:38;;;;;;22073:151;-1:-1:-1;;22255:15:0;22234:18;;;;;:36;-1:-1:-1;;;;;;;;;22281:27:0;22311:1;22281:27;;;:14;:27;;;;;;;;:31;;;22323:19;:32;;;;;:36;20731:1633::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://ca6ce80931c45f5c562178c3d0d997c1020bf31829d4a0e4da5ab4fff9f967ad

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.