ETH Price: $3,308.70 (-3.24%)
Gas: 13 Gwei

Contract

0xf1E4712c44B24d5633972a6B0EDCa99b967d989e
 

Overview

ETH Balance

0.33119141231001413 ETH

Eth Value

$1,095.81 (@ $3,308.70/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Withdraw Wrap200742742024-06-12 7:32:2321 days ago1718177543IN
0xf1E4712c...b967d989e
0 ETH0.0008800211
Withdraw Token191312462024-02-01 4:34:47153 days ago1706762087IN
0xf1E4712c...b967d989e
0 ETH0.0016361319.70990127
Deposit Token179644072023-08-21 16:51:59317 days ago1692636719IN
0xf1E4712c...b967d989e
0 ETH0.0043581948.26996539
Deposit Token179643972023-08-21 16:49:59317 days ago1692636599IN
0xf1E4712c...b967d989e
0 ETH0.0047676844.40175487
SELL179643612023-08-21 16:42:47317 days ago1692636167IN
0xf1E4712c...b967d989e
0 ETH0.0089632838.69842145
Remove Both Liqu...163974062023-01-13 10:54:11537 days ago1673607251IN
0xf1E4712c...b967d989e
0 ETH0.0031135113.14830298
BUY157555822022-10-15 19:22:59626 days ago1665861779IN
0xf1E4712c...b967d989e
0.2 ETH0.0027557216.26631747
Withdraw Wrap157515932022-10-15 6:01:59627 days ago1665813719IN
0xf1E4712c...b967d989e
0 ETH0.0011898714.87533458
Withdraw Token157515872022-10-15 6:00:47627 days ago1665813647IN
0xf1E4712c...b967d989e
0 ETH0.0013093913.73813229
SELL155104362022-09-10 19:01:35661 days ago1662836495IN
0xf1E4712c...b967d989e
0 ETH0.001907968.23497098
SELL155104272022-09-10 18:59:30661 days ago1662836370IN
0xf1E4712c...b967d989e
0 ETH0.002127679.18324999
SELL155104182022-09-10 18:57:11661 days ago1662836231IN
0xf1E4712c...b967d989e
0 ETH0.001667677.19785831
SELL155104142022-09-10 18:56:02661 days ago1662836162IN
0xf1E4712c...b967d989e
0 ETH0.001418656.12303768
SELL155104012022-09-10 18:53:27661 days ago1662836007IN
0xf1E4712c...b967d989e
0 ETH0.001964878.48057429
SELL155103942022-09-10 18:51:44661 days ago1662835904IN
0xf1E4712c...b967d989e
0 ETH0.001938468.36657969
SELL155103902022-09-10 18:50:40661 days ago1662835840IN
0xf1E4712c...b967d989e
0 ETH0.002000388.63384672
SELL155103872022-09-10 18:50:20661 days ago1662835820IN
0xf1E4712c...b967d989e
0 ETH0.0024056810.38316235
SELL155103672022-09-10 18:45:48661 days ago1662835548IN
0xf1E4712c...b967d989e
0 ETH0.001811797.81988687
SELL155103562022-09-10 18:43:25661 days ago1662835405IN
0xf1E4712c...b967d989e
0 ETH0.001561086.73778435
SELL155103492022-09-10 18:42:23661 days ago1662835343IN
0xf1E4712c...b967d989e
0 ETH0.001678367.24396867
SELL155103452022-09-10 18:41:39661 days ago1662835299IN
0xf1E4712c...b967d989e
0 ETH0.00162677.02102285
SELL155103422022-09-10 18:40:22661 days ago1662835222IN
0xf1E4712c...b967d989e
0 ETH0.001435726.19674095
SELL155103142022-09-10 18:35:32661 days ago1662834932IN
0xf1E4712c...b967d989e
0 ETH0.001614196.96920244
BUY152936662022-08-07 6:54:21696 days ago1659855261IN
0xf1E4712c...b967d989e
0.003 ETH0.000396012.12423097
SELL148167572022-05-21 10:38:37774 days ago1653129517IN
0xf1E4712c...b967d989e
0 ETH0.000510
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
179643612023-08-21 16:42:47317 days ago1692636167
0xf1E4712c...b967d989e
0.00044235 ETH
179643612023-08-21 16:42:47317 days ago1692636167
0xf1E4712c...b967d989e
0.00044235 ETH
157555822022-10-15 19:22:59626 days ago1665861779
0xf1E4712c...b967d989e
0.2 ETH
155104362022-09-10 19:01:35661 days ago1662836495
0xf1E4712c...b967d989e
0.03627785 ETH
155104362022-09-10 19:01:35661 days ago1662836495
0xf1E4712c...b967d989e
0.03627785 ETH
155104272022-09-10 18:59:30661 days ago1662836370
0xf1E4712c...b967d989e
0.0348721 ETH
155104272022-09-10 18:59:30661 days ago1662836370
0xf1E4712c...b967d989e
0.0348721 ETH
155104182022-09-10 18:57:11661 days ago1662836231
0xf1E4712c...b967d989e
0.04080751 ETH
155104182022-09-10 18:57:11661 days ago1662836231
0xf1E4712c...b967d989e
0.04080751 ETH
155104142022-09-10 18:56:02661 days ago1662836162
0xf1E4712c...b967d989e
0.04839995 ETH
155104142022-09-10 18:56:02661 days ago1662836162
0xf1E4712c...b967d989e
0.04839995 ETH
155104012022-09-10 18:53:27661 days ago1662836007
0xf1E4712c...b967d989e
0.03766166 ETH
155104012022-09-10 18:53:27661 days ago1662836007
0xf1E4712c...b967d989e
0.03766166 ETH
155103942022-09-10 18:51:44661 days ago1662835904
0xf1E4712c...b967d989e
0.04530511 ETH
155103942022-09-10 18:51:44661 days ago1662835904
0xf1E4712c...b967d989e
0.04530511 ETH
155103902022-09-10 18:50:40661 days ago1662835840
0xf1E4712c...b967d989e
0.05262388 ETH
155103902022-09-10 18:50:40661 days ago1662835840
0xf1E4712c...b967d989e
0.05262388 ETH
155103872022-09-10 18:50:20661 days ago1662835820
0xf1E4712c...b967d989e
0.06187276 ETH
155103872022-09-10 18:50:20661 days ago1662835820
0xf1E4712c...b967d989e
0.06187276 ETH
155103672022-09-10 18:45:48661 days ago1662835548
0xf1E4712c...b967d989e
0.04897924 ETH
155103672022-09-10 18:45:48661 days ago1662835548
0xf1E4712c...b967d989e
0.04897924 ETH
155103562022-09-10 18:43:25661 days ago1662835405
0xf1E4712c...b967d989e
0.05567217 ETH
155103562022-09-10 18:43:25661 days ago1662835405
0xf1E4712c...b967d989e
0.05567217 ETH
155103492022-09-10 18:42:23661 days ago1662835343
0xf1E4712c...b967d989e
0.06383818 ETH
155103492022-09-10 18:42:23661 days ago1662835343
0xf1E4712c...b967d989e
0.06383818 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FEGexV2

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-01
*/

pragma solidity 0.7.6;     

// SPDX-License-Identifier: UNLICENSED 


abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {

        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;

        _;

        _status = _NOT_ENTERED;
    }
}

contract FSilver  {
     function getColor()
        external pure
        returns (bytes32) {
            return bytes32("BRONZE");
        }
}


contract FConst is FSilver, ReentrancyGuard {
    uint public constant BASE              = 10**18;

    uint public constant MIN_BOUND_TOKENS  = 2;
    uint public constant MAX_BOUND_TOKENS  = 2;

    uint public constant MIN_FEE           = 2000000000000000; 
    uint public constant MAX_FEE           = 2000000000000000; // FREE BUYS and sells pay 0.2% to liquidity providers
    uint public constant EXIT_FEE          = BASE / 100;
    uint public constant DEFAULT_RESERVES_RATIO = 0;

    uint public constant MIN_WEIGHT        = BASE;
    uint public constant MAX_WEIGHT        = BASE * 50;
    uint public constant MAX_TOTAL_WEIGHT  = BASE * 50;
    uint public constant MIN_BALANCE       = BASE / 10**12;

    uint public constant INIT_POOL_SUPPLY  = BASE * 100;
    
    uint public  SM = 10;
    address public FEGstake = 0x04788562Ab11eA3a5201d579e2b3Ee7A3F74F1fA;

    uint public constant MIN_BPOW_BASE     = 1 wei;
    uint public constant MAX_BPOW_BASE     = (2 * BASE) - 1 wei;
    uint public constant BPOW_PRECISION    = BASE / 10**10;

    uint public constant MAX_IN_RATIO      = BASE / 2;
    uint public constant MAX_OUT_RATIO     = (BASE / 3) + 1 wei;
    uint public MAX_SELL_RATIO             = BASE / SM;
}


contract FNum is ReentrancyGuard, FConst {

    function btoi(uint a)
        internal pure
        returns (uint)
    {
        return a / BASE;
    }

    function bfloor(uint a)
        internal pure
        returns (uint)
    {
        return btoi(a) * BASE;
    }

    function badd(uint a, uint b)
        internal pure
        returns (uint)
    {
        uint c = a + b;
        require(c >= a, "ERR_ADD_OVERFLOW");
        return c;
    }

    function bsub(uint a, uint b)
        internal pure
        returns (uint)
    {
        (uint c, bool flag) = bsubSign(a, b);
        require(!flag, "ERR_SUB_UNDERFLOW");
        return c;
    }

    function bsubSign(uint a, uint b)
        internal pure
        returns (uint, bool)
    {
        if (a >= b) {
            return (a - b, false);
        } else {
            return (b - a, true);
        }
    }

    function bmul(uint a, uint b)
        internal pure
        returns (uint)
    {
        uint c0 = a * b;
        require(a == 0 || c0 / a == b, "ERR_MUL_OVERFLOW");
        uint c1 = c0 + (BASE / 2);
        require(c1 >= c0, "ERR_MUL_OVERFLOW");
        uint c2 = c1 / BASE;
        return c2;
    }

    function bdiv(uint a, uint b)
        internal pure
        returns (uint)
    {
        require(b != 0, "ERR_DIV_ZERO");
        uint c0 = a * BASE;
        require(a == 0 || c0 / a == BASE, "ERR_DIV_INTERNAL"); // bmul overflow
        uint c1 = c0 + (b / 2);
        require(c1 >= c0, "ERR_DIV_INTERNAL"); //  badd require
        uint c2 = c1 / b;
        return c2;
    }

    function bpowi(uint a, uint n)
        internal pure
        returns (uint)
    {
        uint z = n % 2 != 0 ? a : BASE;

        for (n /= 2; n != 0; n /= 2) {
            a = bmul(a, a);

            if (n % 2 != 0) {
                z = bmul(z, a);
            }
        }
        return z;
    }

    function bpow(uint base, uint exp)
        internal pure
        returns (uint)
    {
        require(base >= MIN_BPOW_BASE, "ERR_BPOW_BASE_TOO_LOW");
        require(base <= MAX_BPOW_BASE, "ERR_BPOW_BASE_TOO_HIGH");

        uint whole  = bfloor(exp);
        uint remain = bsub(exp, whole);

        uint wholePow = bpowi(base, btoi(whole));

        if (remain == 0) {
            return wholePow;
        }

        uint partialResult = bpowApprox(base, remain, BPOW_PRECISION);
        return bmul(wholePow, partialResult);
    }

    function bpowApprox(uint base, uint exp, uint precision)
        internal pure
        returns (uint)
    {
        uint a     = exp;
        (uint x, bool xneg)  = bsubSign(base, BASE);
        uint term = BASE;
        uint sum   = term;
        bool negative = false;


        for (uint i = 1; term >= precision; i++) {
            uint bigK = i * BASE;
            (uint c, bool cneg) = bsubSign(a, bsub(bigK, BASE));
            term = bmul(term, bmul(c, x));
            term = bdiv(term, bigK);
            if (term == 0) break;

            if (xneg) negative = !negative;
            if (cneg) negative = !negative;
            if (negative) {
                sum = bsub(sum, term);
            } else {
                sum = badd(sum, term);
            }
        }

        return sum;
    }
}

contract FMath is FSilver, FConst, FNum {
    
        function calcSpotPrice(
        uint tokenBalanceIn,
        uint tokenWeightIn,
        uint tokenBalanceOut,
        uint tokenWeightOut,
        uint swapFee
    )
        public pure
        returns (uint spotPrice)
    {
        uint numer = bdiv(tokenBalanceIn, tokenWeightIn);
        uint denom = bdiv(tokenBalanceOut, tokenWeightOut);
        uint ratio = bdiv(numer, denom);
        uint scale = bdiv(BASE, bsub(BASE, swapFee));
        return  (spotPrice = bmul(ratio, scale));
    }


    function calcOutGivenIn(
        uint tokenBalanceIn,
        uint tokenWeightIn,
        uint tokenBalanceOut,
        uint tokenWeightOut,
        uint tokenAmountIn,
        uint swapFee
    )
        public pure
        returns (uint tokenAmountOut, uint tokenInFee)
    {
        uint weightRatio = bdiv(tokenWeightIn, tokenWeightOut);
        uint adjustedIn = bsub(BASE, swapFee);
        adjustedIn = bmul(tokenAmountIn, adjustedIn);
        uint y = bdiv(tokenBalanceIn, badd(tokenBalanceIn, adjustedIn));
        uint foo = bpow(y, weightRatio);
        uint bar = bsub(BASE, foo);
        tokenAmountOut = bmul(tokenBalanceOut, bar);
        tokenInFee = bsub(tokenAmountIn, adjustedIn);
        return (tokenAmountOut, tokenInFee);
    }


    function calcInGivenOut(
        uint tokenBalanceIn,
        uint tokenWeightIn,
        uint tokenBalanceOut,
        uint tokenWeightOut,
        uint tokenAmountOut,
        uint swapFee
    )
        public pure
        returns (uint tokenAmountIn, uint tokenInFee)
    {
        uint weightRatio = bdiv(tokenWeightOut, tokenWeightIn);
        uint diff = bsub(tokenBalanceOut, tokenAmountOut);
        uint y = bdiv(tokenBalanceOut, diff);
        uint foo = bpow(y, weightRatio);
        foo = bsub(foo, BASE);
        foo = bmul(tokenBalanceIn, foo);
        tokenAmountIn = bsub(BASE, swapFee);
        tokenAmountIn = bdiv(foo, tokenAmountIn);
        tokenInFee = bdiv(foo, BASE);
        tokenInFee = bsub(tokenAmountIn, tokenInFee);
        return (tokenAmountIn, tokenInFee);
    }


    function calcPoolOutGivenSingleIn(
        uint tokenBalanceIn,
        uint tokenWeightIn,
        uint poolSupply,
        uint totalWeight,
        uint tokenAmountIn,
        uint swapFee,
        uint reservesRatio
    )
        public pure
        returns (uint poolAmountOut, uint reserves)
    {

        uint normalizedWeight = bdiv(tokenWeightIn, totalWeight);
         uint zaz = bmul(bsub(BASE, normalizedWeight), swapFee);
        uint tokenAmountInAfterFee = bmul(tokenAmountIn, bsub(BASE, zaz));

        reserves = calcReserves(tokenAmountIn, tokenAmountInAfterFee, reservesRatio);
        uint newTokenBalanceIn = badd(tokenBalanceIn, tokenAmountInAfterFee);
        uint tokenInRatio = bdiv(newTokenBalanceIn, tokenBalanceIn);

 
        uint poolRatio = bpow(tokenInRatio, normalizedWeight);
        uint newPoolSupply = bmul(poolRatio, poolSupply);
        poolAmountOut = bsub(newPoolSupply, poolSupply);
        return (poolAmountOut, reserves);
    }

    function calcSingleOutGivenPoolIn(
        uint tokenBalanceOut,
        uint tokenWeightOut,
        uint poolSupply,
        uint totalWeight,
        uint poolAmountIn,
        uint swapFee
    )
        public pure
        returns (uint tokenAmountOut)
    {
        uint normalizedWeight = bdiv(tokenWeightOut, totalWeight);

        uint poolAmountInAfterExitFee = bmul(poolAmountIn, bsub(BASE, EXIT_FEE));
        uint newPoolSupply = bsub(poolSupply, poolAmountInAfterExitFee);
        uint poolRatio = bdiv(newPoolSupply, poolSupply);


        uint tokenOutRatio = bpow(poolRatio, bdiv(BASE, normalizedWeight));
        uint newTokenBalanceOut = bmul(tokenOutRatio, tokenBalanceOut);

        uint tokenAmountOutBeforeSwapFee = bsub(tokenBalanceOut, newTokenBalanceOut);
        uint zaz = bmul(bsub(BASE, normalizedWeight), swapFee);
        tokenAmountOut = bmul(tokenAmountOutBeforeSwapFee, bsub(BASE, zaz));
        return tokenAmountOut;
    }


    function calcPoolInGivenSingleOut(
        uint tokenBalanceOut,
        uint tokenWeightOut,
        uint poolSupply,
        uint totalWeight,
        uint tokenAmountOut,
        uint swapFee,
        uint reservesRatio
    )
        public pure
        returns (uint poolAmountIn, uint reserves)
    {


        uint normalizedWeight = bdiv(tokenWeightOut, totalWeight);
        uint zar = bmul(bsub(BASE, normalizedWeight), swapFee);
        uint tokenAmountOutBeforeSwapFee = bdiv(tokenAmountOut, bsub(BASE, zar));
        reserves = calcReserves(tokenAmountOutBeforeSwapFee, tokenAmountOut, reservesRatio);

        uint newTokenBalanceOut = bsub(tokenBalanceOut, tokenAmountOutBeforeSwapFee);
        uint tokenOutRatio = bdiv(newTokenBalanceOut, tokenBalanceOut);


        uint poolRatio = bpow(tokenOutRatio, normalizedWeight);
        uint newPoolSupply = bmul(poolRatio, poolSupply);
        uint poolAmountInAfterExitFee = bsub(poolSupply, newPoolSupply);


        poolAmountIn = bdiv(poolAmountInAfterExitFee, bsub(BASE, EXIT_FEE));
        return (poolAmountIn, reserves);
    }

    function calcReserves(uint amountWithFee, uint amountWithoutFee, uint reservesRatio)
        internal pure
        returns (uint reserves)
    {
        require(amountWithFee >= amountWithoutFee, "ERR_MATH_APPROX");
        require(reservesRatio <= BASE, "ERR_INVALID_RESERVE");
        uint swapFeeAndReserves = bsub(amountWithFee, amountWithoutFee);
        reserves = bmul(swapFeeAndReserves, reservesRatio);
        require(swapFeeAndReserves >= reserves, "ERR_MATH_APPROX");
    }

    function calcReservesFromFee(uint fee, uint reservesRatio)
        internal pure
        returns (uint reserves)
    {
        require(reservesRatio <= BASE, "ERR_INVALID_RESERVE");
        reserves = bmul(fee, reservesRatio);
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint);
    function balanceOf(address whom) external view returns (uint);
    function allowance(address src, address dst) external view returns (uint);

    function approve(address dst, uint amt) external returns (bool);
    function transfer(address dst, uint amt) external returns (bool);
    function transferFrom(
        address src, address dst, uint amt
    ) external returns (bool);
}

interface wrap {
    function deposit() external payable;
    function withdraw(uint amt) external;
    function transfer(address recipient, uint256 amount) external returns (bool);
}

library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

contract FTokenBase is ReentrancyGuard, FNum {

    mapping(address => uint)                   internal _balance;
    mapping(address => mapping(address=>uint)) internal _allowance;
    uint internal _totalSupply;

    event Approval(address indexed src, address indexed dst, uint amt);
    event Transfer(address indexed src, address indexed dst, uint amt);

    function _mint(uint amt) internal {
        _balance[address(this)] = badd(_balance[address(this)], amt);
        _totalSupply = badd(_totalSupply, amt);
        emit Transfer(address(0), address(this), amt);
    }

    function _burn(uint amt) internal {
        require(_balance[address(this)] >= amt);
        _balance[address(this)] = bsub(_balance[address(this)], amt);
        _totalSupply = bsub(_totalSupply, amt);
        emit Transfer(address(this), address(0), amt);
    }

    function _move(address src, address dst, uint amt) internal {
        require(_balance[src] >= amt);
        _balance[src] = bsub(_balance[src], amt);
        _balance[dst] = badd(_balance[dst], amt);
        emit Transfer(src, dst, amt);
    }

    function _push(address to, uint amt) internal {
        _move(address(this), to, amt);
    }

    function _pull(address from, uint amt) internal {
        _move(from, address(this), amt);
    }
}

contract FToken is ReentrancyGuard, FTokenBase {

    string  private _name     = "FEGexV2";
    string  private _symbol   = "FEGfETH";
    uint8   private _decimals = 18;

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns(uint8) {
        return _decimals;
    }

    function allowance(address src, address dst) external view returns (uint) {
        return _allowance[src][dst];
    }

    function balanceOf(address whom) external view returns (uint) {
        return _balance[whom];
    }

    function totalSupply() public view returns (uint) {
        return _totalSupply;
    }

    function approve(address dst, uint amt) external returns (bool) {
        _allowance[msg.sender][dst] = amt;
        emit Approval(msg.sender, dst, amt);
        return true;
    }

    function increaseApproval(address dst, uint amt) external returns (bool) {
        _allowance[msg.sender][dst] = badd(_allowance[msg.sender][dst], amt);
        emit Approval(msg.sender, dst, _allowance[msg.sender][dst]);
        return true;
    }

    function decreaseApproval(address dst, uint amt) external returns (bool) {
        uint oldValue = _allowance[msg.sender][dst];
        if (amt > oldValue) {
            _allowance[msg.sender][dst] = 0;
        } else {
            _allowance[msg.sender][dst] = bsub(oldValue, amt);
        }
        emit Approval(msg.sender, dst, _allowance[msg.sender][dst]);
        return true;
    }

    function transfer(address dst, uint amt) external returns (bool) {
        FEGexV2 ulock;
        bool getlock = ulock.getUserLock(msg.sender);
        
        require(getlock == true, 'Liquidity is locked, you cannot remove liquidity until after lock time.');
        
        _move(msg.sender, dst, amt);
        return true;
    }

    function transferFrom(address src, address dst, uint amt) external returns (bool) {
        require(msg.sender == src || amt <= _allowance[src][msg.sender]);
        FEGexV2 ulock;
        bool getlock = ulock.getUserLock(msg.sender);
        
        require(getlock == true, 'Transfer is Locked ');
        
        
        _move(src, dst, amt);
        if (msg.sender != src && _allowance[src][msg.sender] != uint256(-1)) {
            _allowance[src][msg.sender] = bsub(_allowance[src][msg.sender], amt);
            emit Approval(msg.sender, dst, _allowance[src][msg.sender]);
        }
        return true;
    }
}

contract FEGexV2 is FSilver, ReentrancyGuard, FToken, FMath {

    struct Record {
        bool bound;   // is token bound to pool
        uint denorm;  // denormalized weight will always be even
        uint index;
        uint balance;
    }
    
    struct userLock {
        bool setLock; // true = locked, false = unlocked
        uint unlockTime;
    }
    
    function getUserLock(address usr) public view returns(bool lock){
        return _userlock[usr].setLock;
    }
    
    event LOG_SWAP(
        address indexed caller,
        address indexed tokenIn,
        address indexed tokenOut,
        uint256         tokenAmountIn,
        uint256         tokenAmountOut
);

    event LOG_JOIN(
        address indexed caller,
        address indexed tokenIn,
        uint256         tokenAmountIn,
        uint256         reservesAmount
);

    event LOG_EXIT(
        address indexed caller,
        address indexed tokenOut,
        uint256         tokenAmountOut,
        uint256         reservesAmount
    );

    event LOG_CLAIM_RESERVES(
        address indexed caller,
        address indexed tokenOut,
        uint256         tokenAmountOut
    );

    event LOG_ADD_RESERVES(
        address indexed token,
        uint256         reservesAmount
    );

    event LOG_CALL(
        bytes4  indexed sig,
        address indexed caller,
        bytes           data
    ) anonymous;

    modifier _logs_() {
        emit LOG_CALL(msg.sig, msg.sender, msg.data);
        _;
    }

    modifier _lock_() {
        require(!_mutex);
        _mutex = true;
        _;
        _mutex = false;
    } 

    modifier _viewlock_() {
        require(!_mutex);
        _;
    }

    bool private _mutex;

    wrap wrapp;
    address private _factory = 0x1Eb421973d639C3422904c65Cccc2972b37a17e8;    
    address private _controller = 0x4c9BC793716e8dC05d1F48D8cA8f84318Ec3043C; 
    address private _poolOwner;
    address public Wrap = 0xf786c34106762Ab4Eeb45a51B42a62470E9D5332;
    address public Token = 0x389999216860AB8E0175387A0c90E5c52522C945;
    address public pairRewardPool = 0x94D4Ac11689C6EbbA91cDC1430fc7dfa9a858753;
    address public burn = 0x000000000000000000000000000000000000dEaD;
    uint public FSS = 25; // FEGstake Share
    uint public PSS = 20; // pairRewardPool Share
    uint public RPF = 1000; //Smart Rising Price Floor Setting
    uint public SHR = 995; //p2p fee Token
    uint public SHR1 = 997; //p2p fee Wrap
    uint private _swapFee;
    address[] private _tokens;
    uint256 public _totalSupply1;
    uint256 public _totalSupply2;
    bool public live = false;
    mapping(address=>Record) private  _records;
    mapping(address=>userLock) public  _userlock;
    mapping(address=>userLock) public  _unlockTime;
    mapping(address=>bool) public whiteListContract;
    mapping(address => uint256) private _balances1;
    mapping(address => uint256) private _balances2;
    
    uint private _totalWeight;

    constructor() {
        wrapp = wrap(Wrap);
        _poolOwner = msg.sender;
        //pairRewardPool = msg.sender;
        _swapFee = MIN_FEE;
    }
    
    receive() external payable {
    }

    function userBalanceInternal(address _addr) public view returns (uint256 token, uint256 fwrap) {
        return (_balances1[_addr], _balances2[_addr]);
    } 
    
    function isContract(address account) internal view returns (bool) {
        
        if(IsWhiteListContract(account)) {  return false; }
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
    
    function addWhiteListContract(address _addy, bool boolean) public {
        require(msg.sender == _controller);
        require(_addy != address(0), "setting 0 address;;");
        
        whiteListContract[_addy] = boolean;
    }
    
    function IsWhiteListContract(address _addy) public view returns(bool){
        require(_addy != address(0), "setting 0 address;;");
        
        return whiteListContract[_addy];
    }
    
    modifier noContract() {
        require(isContract(msg.sender) == false, 'Unapproved contracts are not allowed to interact with the swap');
        _;
    }
    
    function setMaxSellRatio(uint256 _amount) public {
        require(msg.sender == _poolOwner, "You do not have permission");
        require (_amount > 0, "cannot turn off");
        require (_amount <= 100, "cannot set under 1%");
        SM = _amount;
    }
    
    function setStakePool(address _addy) public {
        require(msg.sender == _controller);
    FEGstake = _addy;
    }
    
    function setPairRewardPool(address _addy) public {
        require(msg.sender == _controller);
    pairRewardPool = _addy;
    }
    
    function setupWrap() public {
        IERC20(address(this)).approve(address(Wrap), 100000000000000000e18);        
    }  
    
    function isBound(address t)
        external view
        returns (bool)
    {
        return _records[t].bound;
    }

    function getFinalTokens()
        external view
        _viewlock_
        returns (address[] memory tokens)
    {
        
        return _tokens;
    }

    function getDenormalizedWeight(address token)
        external view
        _viewlock_
    {

        require(_records[token].bound);
    }

    function getTotalDenormalizedWeight()
        external view
        _viewlock_
        returns (uint)
    {
        return _totalWeight;
    }

    function getNormalizedWeight(address token)
        external view
        _viewlock_
        returns (uint)
    {

        require(_records[token].bound);
        return _totalWeight;
    }

    function getBalance(address token)
        external view
        _viewlock_
        returns (uint)
    {

        require(_records[token].bound);
        return _records[token].balance;
    }

    function getSwapFee()
        external view
        _viewlock_
        returns (uint)
    {
        return _swapFee;
    }

    function getController()
        external view
        _viewlock_
        returns (address)
    {
        return _controller;
    }

    function setController(address manager)
        external
        _logs_
        _lock_
    {
        require(msg.sender == _controller);
        _controller = manager;
    }

    function deploySwap (uint256 amtoftoken, uint256 amtofwrap)
        external
        {
        require(msg.sender == _poolOwner);
        require(live == false);
        address tokenIn = Token;
        address tokenIn1 = Wrap;
        
        _records[Token] = Record({
            bound: true,
            denorm: BASE * 25,
            index: _tokens.length,
            balance: (amtoftoken * 98/100)
            
        });
        
        _records[Wrap] = Record({
            bound: true,
            denorm: BASE * 25,
            index: _tokens.length,
            balance: (amtofwrap * 99/100)
        });
        live = true;
        _tokens.push(Token);
        _tokens.push(Wrap);
        _pullUnderlying(tokenIn, msg.sender, amtoftoken);
        _pullUnderlying(tokenIn1, msg.sender, amtofwrap);
        _mint(INIT_POOL_SUPPLY);
        _pushPoolShare(msg.sender, INIT_POOL_SUPPLY); 
        address user = msg.sender;
        userLock storage ulock = _userlock[user];
        userLock storage time = _unlockTime[user];
        ulock.setLock = true;
        time.unlockTime = block.timestamp + 365 days ; 
    }
   
    function saveLostTokens(address token, uint amount)
        external
        _logs_
        _lock_
    {
        require(msg.sender == _controller);
        require(!_records[token].bound);

        uint bal = IERC20(token).balanceOf(address(this));
        require(amount <= bal);

        _pushUnderlying(token, msg.sender, amount);
    }

    function getSpotPrice(address tokenIn, address tokenOut)
        external view
        _viewlock_
        returns (uint spotPrice)
    {
        
        require(_records[tokenIn].bound, "ERR_NOT_BOUND");
        require(_records[tokenOut].bound, "ERR_NOT_BOUND");
        Record storage inRecord = _records[address(tokenIn)];
        Record storage outRecord = _records[address(tokenOut)];
        return calcSpotPrice(inRecord.balance, BASE * 25, outRecord.balance, BASE * 25, _swapFee);}
        

    function depositToken(uint256 amt)  external noContract nonReentrant {
        address tokenIn = Token;
        _pullUnderlying(tokenIn, msg.sender, amt);
        
       
        uint256 finalAmount = amt * 98/100;
        _totalSupply1 = _totalSupply1 + finalAmount;
        _balances1[msg.sender] = _balances1[msg.sender] + finalAmount;
    }
    
    function depositWrap(uint256 amt)  external noContract nonReentrant {
        address tokenIn = Wrap;
        _pullUnderlying(tokenIn, msg.sender, amt);
        
       
        uint256 finalAmount = amt * 99/100;
        _totalSupply2  = _totalSupply2 + finalAmount;
        _balances2[msg.sender] = _balances2[msg.sender] + finalAmount;
    }
    
    function withdrawToken(uint256 amt) external noContract nonReentrant {
        address tokenIn = Token;
        require(_balances1[msg.sender] >= amt, "Not enough token");
        
        _totalSupply1 = _totalSupply1 - amt;
        _balances1[msg.sender] = _balances1[msg.sender] - amt;
        
        _pushUnderlying(tokenIn, msg.sender, amt);
        
    }
    
    function withdrawWrap(uint256 amt) external noContract nonReentrant{
        address tokenIn = Wrap;
        require(_balances2[msg.sender] >= amt, "Not enough Wrap");
        
        _totalSupply2 = _totalSupply2 - amt;
        _balances2[msg.sender] = _balances2[msg.sender] - amt;
        
        _pushUnderlying(tokenIn, msg.sender, amt);
    }

    function addBothLiquidity(uint poolAmountOut, uint[] calldata maxAmountsIn)
    noContract nonReentrant
        external
        _logs_
        _lock_
    {
        

        uint poolTotal = totalSupply();
        uint ratio = bdiv(poolAmountOut, poolTotal);
        require(ratio != 0, "ERR_MATH_APPROX");

        for (uint i = 0; i < _tokens.length; i++) {
            address t = _tokens[i];
            uint bal = _records[t].balance;
            uint tokenAmountIn = bmul(ratio, bal);
            require(tokenAmountIn != 0, "ERR_MATH_APPROX");
            require(tokenAmountIn <= maxAmountsIn[i], "ERR_LIMIT_IN");
            emit LOG_JOIN(msg.sender, t, tokenAmountIn * 98/100, 0);
            _pullUnderlying(t, msg.sender, tokenAmountIn);
            _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1;
            _records[Wrap].balance = IERC20(Wrap).balanceOf(address(this)) - _totalSupply2;
        }
        _mintPoolShare(poolAmountOut);
        _pushPoolShare(msg.sender, poolAmountOut);
        
    }
   
    function removeBothLiquidity(uint poolAmountIn, uint[] calldata minAmountsOut)
    noContract nonReentrant
        external
        _logs_
        _lock_
    {
        
        userLock storage ulock = _userlock[msg.sender];
        
        if(ulock.setLock == true) {
            require(ulock.unlockTime <= block.timestamp, "Liquidity is locked, you cannot remove liquidity until after lock time.");
        }

        uint poolTotal = totalSupply();
        uint exitFee = bmul(poolAmountIn, EXIT_FEE);
        uint pAiAfterExitFee = bsub(poolAmountIn, exitFee);
        uint ratio = bdiv(pAiAfterExitFee, poolTotal);
        require(ratio != 0, "ERR_MATH_APPROX");

        _pullPoolShare(msg.sender, poolAmountIn);
        _pushPoolShare(_factory, exitFee);
        _burnPoolShare(pAiAfterExitFee);
        
        
        for (uint i = 0; i < _tokens.length; i++) {
            address t = _tokens[i];
            uint bal = _records[t].balance;
            uint tokenAmountOut = bmul(ratio, bal);
            require(tokenAmountOut != 0, "ERR_MATH_APPROX");
            require(tokenAmountOut >= minAmountsOut[i], "ERR_LIMIT_OUT");
            emit LOG_EXIT(msg.sender, t, tokenAmountOut, 0);
            _pushUnderlying(t, msg.sender, tokenAmountOut);
            _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1;
            _records[Wrap].balance = IERC20(Wrap).balanceOf(address(this)) - _totalSupply2;
        }

    }


    function BUYSmart(
        uint tokenAmountIn,
        uint minAmountOut
    ) noContract nonReentrant
        external 
        _logs_
        _lock_
        returns (uint tokenAmountOut, uint spotPriceAfter)
    {
        
        address tokenIn = Wrap;
        address tokenOut = Token;
        require(_balances2[msg.sender] >= tokenAmountIn, "Not enough Wrap, deposit more");
        
        
        Record storage inRecord = _records[address(tokenIn)];
        Record storage outRecord = _records[address(tokenOut)];

        require(tokenAmountIn <= bmul(inRecord.balance, MAX_IN_RATIO), "ERR_MAX_IN_RATIO");
        uint spotPriceBefore = calcSpotPrice(
                                    inRecord.balance ,
                                    BASE * 25,
                                    outRecord.balance,
                                    BASE * 25,
                                    _swapFee * 0
                                );
                                
        uint tokenInFee;
        (tokenAmountOut, tokenInFee) = calcOutGivenIn(
                                            inRecord.balance,
                                            BASE * 25,
                                            outRecord.balance,
                                            BASE * 25,
                                            tokenAmountIn * 99/100,
                                            _swapFee * 0
                                        );
                                        
        require(tokenAmountOut >= minAmountOut, "ERR_LIMIT_OUT");
        require(spotPriceBefore <= bdiv(tokenAmountIn, tokenAmountOut), "ERR_MATH_APPROX");                     
        _balances2[msg.sender] = _balances2[msg.sender] - tokenAmountIn;
        _balances1[msg.sender] = _balances1[msg.sender] + tokenAmountOut;
        _totalSupply2 = _totalSupply2 - tokenAmountIn;
        _totalSupply1 = _totalSupply1 + tokenAmountOut;
        _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1;
        _records[Wrap].balance = IERC20(Wrap).balanceOf(address(this)) - _totalSupply2;
        
        spotPriceAfter = calcSpotPrice(
                                            inRecord.balance,
                                            BASE * 25,
                                            outRecord.balance,
                                            BASE * 25,
                                            _swapFee * 0
                            );
        require(spotPriceAfter >= spotPriceBefore, "ERR_MATH_APPROX");
        emit LOG_SWAP(msg.sender, tokenIn, tokenOut, tokenAmountIn, tokenAmountOut);
        return (tokenAmountOut, spotPriceAfter);
    }
    
    function BUY(
        address to,
        uint minAmountOut
    ) noContract nonReentrant
        external payable
        _logs_
        _lock_
        returns (uint tokenAmountOut, uint spotPriceAfter)
    {
        
        address tokenIn = Wrap;
        address tokenOut = Token;
        
        
        Record storage inRecord = _records[address(tokenIn)];
        Record storage outRecord = _records[address(tokenOut)];

        require(msg.value <= bmul(inRecord.balance, MAX_IN_RATIO), "ERR_MAX_IN_RATIO");

        uint spotPriceBefore = calcSpotPrice(
                                    inRecord.balance ,
                                    BASE * 25,
                                    outRecord.balance,
                                    BASE * 25,
                                    _swapFee * 0
                                );

        uint tokenInFee;
        (tokenAmountOut, tokenInFee) = calcOutGivenIn(
                                            inRecord.balance,
                                            BASE * 25,
                                            outRecord.balance,
                                            BASE * 25,
                                            msg.value * 99/100,
                                            _swapFee * 0
                                        );
                                        
        require(tokenAmountOut >= minAmountOut, "ERR_LIMIT_OUT");
        require(spotPriceBefore <= bdiv(msg.value * 99/100, tokenAmountOut), "ERR_MATH_APPROX");
        wrap(Wrap).deposit{value: msg.value}();
        _pushUnderlying(tokenOut, to, tokenAmountOut);
        _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1;
        _records[Wrap].balance = IERC20(Wrap).balanceOf(address(this)) - _totalSupply2;
        
        spotPriceAfter = calcSpotPrice(
                                            inRecord.balance,
                                            BASE * 25,
                                            outRecord.balance,
                                            BASE * 25,
                                            _swapFee * 0
                            );
        require(spotPriceAfter >= spotPriceBefore, "ERR_MATH_APPROX");
        
        emit LOG_SWAP(msg.sender, tokenIn, tokenOut, msg.value * 99/100, tokenAmountOut * 98/100);
        return (tokenAmountOut, spotPriceAfter);
    }

    function SELL(
    address to,
        uint tokenAmountIn,
        uint minAmountOut
    ) noContract nonReentrant 
        external
        _logs_
        _lock_
        returns (uint tokenAmountOut, uint spotPriceAfter)
    {
        
        address tokenIn = Token;
        address tokenOut = Wrap;
        
        Record storage inRecord = _records[address(tokenIn)];
        Record storage outRecord = _records[address(tokenOut)];

        require(tokenAmountIn <= bmul(inRecord.balance, MAX_SELL_RATIO), "ERR_SELL_RATIO");
                                               
        uint tokenInFee;
        (tokenAmountOut, tokenInFee) = calcOutGivenIn(
                                            inRecord.balance,
                                            BASE * 25,
                                            outRecord.balance,
                                            BASE * 25,
                                            tokenAmountIn * 98/100,
                                            _swapFee
                                        );
        require(tokenAmountOut >= minAmountOut, "ERR_LIMIT_OUT");
        
        emit LOG_SWAP(msg.sender, tokenIn, tokenOut, tokenAmountIn * 98/100, tokenAmountOut * 99/100);

        _pullUnderlying(tokenIn, msg.sender, tokenAmountIn);
        uint256 toka = bmul(tokenAmountOut, bdiv(RPF, 1000));
        uint256 tokAmountI  = bmul(tokenAmountOut, bdiv(FSS, 10000));
        uint256 tokAmountI2 =  bmul(tokenAmountOut, bdiv(PSS, 10000));
        uint256 tokAmountI1 = bsub(toka, badd(tokAmountI, tokAmountI2));
        uint256 out1 = tokAmountI1;
        wrap(Wrap).withdraw(out1); 
        TransferHelper.safeTransferETH(to, (out1 * 99/100)); 
        _pushUnderlying1(tokenOut, tokAmountI);
        _balances2[pairRewardPool] = _balances2[pairRewardPool] + tokAmountI2;
        _totalSupply2 = _totalSupply2 + tokAmountI2;
        uint spotPriceBefore = calcSpotPrice(
                                    inRecord.balance,
                                    BASE * 25,
                                    outRecord.balance,
                                    BASE * 25,
                                    _swapFee
                                );
        require(spotPriceBefore <= bdiv(tokenAmountIn, tokenAmountOut), "ERR_MATH_APPROX");                        
        _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1;
        _records[Wrap].balance = IERC20(Wrap).balanceOf(address(this)) - _totalSupply2;
        
        spotPriceAfter = calcSpotPrice(
                                            inRecord.balance,
                                            BASE * 25,
                                            outRecord.balance,
                                            BASE * 25,
                                            _swapFee
                            );
        require(spotPriceAfter >= spotPriceBefore, "ERR_MATH_APPROX");
        
        
        return (tokenAmountOut, spotPriceAfter);
    }
    
     function SELLSmart(
        uint tokenAmountIn,
        uint minAmountOut
    ) noContract nonReentrant
        external
        _logs_
        _lock_
        returns (uint tokenAmountOut, uint spotPriceAfter)
    {
        
        address tokenIn = Token;
        address tokenOut = Wrap;
        
        require(_balances1[msg.sender] >= tokenAmountIn, "Not enough Token");
        
        Record storage inRecord = _records[address(tokenIn)];
        Record storage outRecord = _records[address(tokenOut)];

        require(tokenAmountIn <= bmul(inRecord.balance, MAX_SELL_RATIO), "ERR_SELL_RATIO");

        uint spotPriceBefore = calcSpotPrice(
                                    inRecord.balance,
                                    BASE * 25,
                                    outRecord.balance,
                                    BASE * 25,
                                    _swapFee
                                );

        uint tokenInFee;
        (tokenAmountOut, tokenInFee) = calcOutGivenIn(
                                            inRecord.balance,
                                            BASE * 25,
                                            outRecord.balance,
                                            BASE * 25,
                                            tokenAmountIn * 98/100,
                                            _swapFee
                                        );
        require(tokenAmountOut >= minAmountOut, "ERR_LIMIT_OUT");
        require(spotPriceBefore <= bdiv(tokenAmountIn, tokenAmountOut), "ERR_MATH_APPROX");

        emit LOG_SWAP(msg.sender, tokenIn, tokenOut, tokenAmountIn, tokenAmountOut);
        uint256 toka = bmul(tokenAmountOut, bdiv(RPF, 1000));
        uint256 tokAmountI  = bmul(tokenAmountOut, bdiv(FSS, 10000));
        uint256 tokAmountI2 =  bmul(tokenAmountOut, bdiv(PSS, 10000));
        uint256 tokAmountI1 = bsub(toka, badd(tokAmountI, tokAmountI2));
        uint256 tok2 = badd(tokAmountI1, tokAmountI2);
        _balances1[msg.sender] = _balances1[msg.sender] - tokenAmountIn;
        _balances2[msg.sender] = _balances2[msg.sender] + tokAmountI1;
        _totalSupply2 = _totalSupply2 + tok2;
        _totalSupply1 = _totalSupply1 - tokenAmountIn;
        _pushUnderlying1(tokenOut, tokAmountI);
        _balances2[pairRewardPool] = _balances2[pairRewardPool] + tokAmountI2;
        _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1;
        _records[Wrap].balance = IERC20(Wrap).balanceOf(address(this)) - _totalSupply2;
                          
        spotPriceAfter = calcSpotPrice(
                                            inRecord.balance,
                                            BASE * 25,
                                            outRecord.balance,
                                            BASE * 25,
                                            _swapFee
                            );
        require(spotPriceAfter >= spotPriceBefore, "ERR_MATH_APPROX");
        
        return (tokenAmountOut, spotPriceAfter);
    }
    
    function setFSS(uint _FSS ) external {
        require(msg.sender == _controller);
        require(_FSS <= 100, " Cannot set over 1%");
        require(_FSS > 0, " Cannot set to 0");
        FSS = _FSS;
    }
    
    function setPSS(uint _PSS ) external {
        require(msg.sender == _poolOwner);
         require(_PSS <= 100, " Cannot set over 1%"); 
         require(_PSS > 0, " Cannot set to 0");
        PSS = _PSS;
    }

    function setRPF(uint _RPF ) external {
        require(msg.sender == _poolOwner);
         require(_RPF <= 200, " Cannot set over 20%"); 
         require(_RPF > 0, " Cannot set to 0");
        RPF = _RPF;
    }
    
    function setSHR(uint _SHR, uint _SHR1 ) external {
        require(msg.sender == _controller);
         require(_SHR <= 100 && _SHR1 <=100, " Cannot set over 10%"); 
         require(_SHR > 0 && _SHR1 > 0, " Cannot set to 0"); 
        SHR = _SHR;
        SHR1 = _SHR1;
    }
    
    function setLockLiquidity() external { //
        address user = msg.sender;
        userLock storage ulock = _userlock[user];
        userLock storage time = _unlockTime[user];
        ulock.setLock = true;
        time.unlockTime = block.timestamp + 365 days ; 
        }
    
    function releaseLiquidity() external { // Allows removal of liquidity after the lock period is over
        address user = msg.sender;
        userLock storage ulock = _userlock[user];
        userLock storage time = _unlockTime[user];
        require (block.timestamp >= time.unlockTime, "Liquidity is locked, you cannot remove liquidity until after lock time.");
        ulock.setLock = false; 
    }
    
    function emergencyLockOverride(address user, bool _bool, uint _time) external {
        require(msg.sender == _controller);
        userLock storage ulock = _userlock[user];
        userLock storage time = _unlockTime[user];
        ulock.setLock = _bool;
        time.unlockTime = _time;
    }

    function _pullUnderlying(address erc20, address from, uint amount)
        internal
    {   
        //require(amount > 0, "Cannot deposit nothing");
        bool xfer = IERC20(erc20).transferFrom(from, address(this), amount);
        require(xfer, "ERR_ERC20_FALSE");
        
    }

    function _pushUnderlying(address erc20, address to, uint amount)
        internal
    {   
        //require(amount > 0, "Cannot withdraw nothing");
        bool xfer = IERC20(erc20).transfer(to, amount);
        require(xfer, "ERR_ERC20_FALSE");
    }
    
    function _pushUnderlying1(address erc20, uint amount)
        internal
    {
        bool xfer = IERC20(erc20).transfer(FEGstake, amount);
        require(xfer, "ERR_ERC20_FALSE");
    }

    function _pullPoolShare(address from, uint amount)
        internal
    {
        _pull(from, amount);
    }

    function _pushPoolShare(address to, uint amount)
        internal
    {
        _push(to, amount);
    }

    function _mintPoolShare(uint amount)
        internal
    {
        _mint(amount);
    }

    function _burnPoolShare(uint amount)
        internal
    {
        _burn(amount);
    }

    function PayWrap(address payee, uint amount)
        external noContract nonReentrant 
        
    {   
        require(_balances2[msg.sender] >= amount, "Not enough token");
        uint256 amt = amount * SHR1/1000;
        uint256 amt1 = amount - amt;
        _balances2[msg.sender] = _balances2[msg.sender] - amount;
        _balances2[payee] = _balances2[payee] + amt;
        _balances2[_factory] = _balances2[_factory] + amt1;
    }
    
    function PayToken(address payee, uint amount)
        external noContract nonReentrant 
        
    {
        require(_balances1[msg.sender] >= amount, "Not enough token");
        uint256 amt = amount * SHR/1000;
        uint256 amt1 = amount - amt;
        _balances1[msg.sender] = _balances1[msg.sender] - amount;
        _balances1[payee] = _balances1[payee] + amt;
        _pushUnderlying(Token, burn, amt1);
        _totalSupply1 = _totalSupply1 - amt1;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"reservesAmount","type":"uint256"}],"name":"LOG_ADD_RESERVES","type":"event"},{"anonymous":true,"inputs":[{"indexed":true,"internalType":"bytes4","name":"sig","type":"bytes4"},{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"LOG_CALL","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"name":"LOG_CLAIM_RESERVES","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reservesAmount","type":"uint256"}],"name":"LOG_EXIT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reservesAmount","type":"uint256"}],"name":"LOG_JOIN","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"name":"LOG_SWAP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BPOW_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BUY","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"spotPriceAfter","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BUYSmart","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"spotPriceAfter","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DEFAULT_RESERVES_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXIT_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEGstake","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FSS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INIT_POOL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"}],"name":"IsWhiteListContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BOUND_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BPOW_BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_IN_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_OUT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SELL_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOTAL_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BALANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BOUND_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BPOW_BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PSS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PayToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PayWrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RPF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"SELL","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"spotPriceAfter","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"SELLSmart","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"spotPriceAfter","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SHR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHR1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Wrap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_unlockTime","outputs":[{"internalType":"bool","name":"setLock","type":"bool"},{"internalType":"uint256","name":"unlockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_userlock","outputs":[{"internalType":"bool","name":"setLock","type":"bool"},{"internalType":"uint256","name":"unlockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"}],"name":"addBothLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"},{"internalType":"bool","name":"boolean","type":"bool"}],"name":"addWhiteListContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"whom","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcInGivenOut","outputs":[{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"tokenInFee","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcOutGivenIn","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"tokenInFee","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"poolSupply","type":"uint256"},{"internalType":"uint256","name":"totalWeight","type":"uint256"},{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"reservesRatio","type":"uint256"}],"name":"calcPoolInGivenSingleOut","outputs":[{"internalType":"uint256","name":"poolAmountIn","type":"uint256"},{"internalType":"uint256","name":"reserves","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"poolSupply","type":"uint256"},{"internalType":"uint256","name":"totalWeight","type":"uint256"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"reservesRatio","type":"uint256"}],"name":"calcPoolOutGivenSingleIn","outputs":[{"internalType":"uint256","name":"poolAmountOut","type":"uint256"},{"internalType":"uint256","name":"reserves","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"poolSupply","type":"uint256"},{"internalType":"uint256","name":"totalWeight","type":"uint256"},{"internalType":"uint256","name":"poolAmountIn","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcSingleOutGivenPoolIn","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcSpotPrice","outputs":[{"internalType":"uint256","name":"spotPrice","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"decreaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amtoftoken","type":"uint256"},{"internalType":"uint256","name":"amtofwrap","type":"uint256"}],"name":"deploySwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"depositToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"depositWrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"},{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"emergencyLockOverride","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getColor","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getDenormalizedWeight","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFinalTokens","outputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getNormalizedWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getSpotPrice","outputs":[{"internalType":"uint256","name":"spotPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDenormalizedWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"getUserLock","outputs":[{"internalType":"bool","name":"lock","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"increaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"t","type":"address"}],"name":"isBound","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"live","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairRewardPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releaseLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeBothLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"saveLostTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_FSS","type":"uint256"}],"name":"setFSS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLockLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxSellRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_PSS","type":"uint256"}],"name":"setPSS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"}],"name":"setPairRewardPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_RPF","type":"uint256"}],"name":"setRPF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_SHR","type":"uint256"},{"internalType":"uint256","name":"_SHR1","type":"uint256"}],"name":"setSHR","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"}],"name":"setStakePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setupWrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"userBalanceInternal","outputs":[{"internalType":"uint256","name":"token","type":"uint256"},{"internalType":"uint256","name":"fwrap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawWrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600a600155600280546001600160a01b0319167304788562ab11ea3a5201d579e2b3ee7a3f74f1fa17905567016345785d8a000060035560c060405260076080819052662322a3b2bc2b1960c91b60a09081526200005f919081620001d8565b506040805180820190915260078082526608c8a8ecc8aa8960cb1b60209092019182526200009091600891620001d8565b506009805460ff199081166012908117909255600a80546001600160a01b0319908116731eb421973d639c3422904c65cccc2972b37a17e817909155600b80548216734c9bc793716e8dc05d1f48d8ca8f84318ec3043c179055600d8054821673f786c34106762ab4eeb45a51b42a62470e9d5332179055600e8054821673389999216860ab8e0175387a0c90e5c52522c945179055600f805482167394d4ac11689c6ebba91cdc1430fc7dfa9a8587531790556010805490911661dead17905560196011556014918290556103e86013556103e39091556103e5601555601a805490911690553480156200018457600080fd5b506001600055600d546009805462010000600160b01b0319166001600160a01b039092166201000002919091179055600c8054336001600160a01b031990911617905566071afd498d000060165562000284565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200021057600085556200025b565b82601f106200022b57805160ff19168380011785556200025b565b828001600101855582156200025b579182015b828111156200025b5782518255916020019190600101906200023e565b50620002699291506200026d565b5090565b5b808211156200026957600081556001016200026e565b615fee80620002946000396000f3fe6080604052600436106104fa5760003560e01c806392eefe9b1161028c578063ba019dab1161015a578063d4cadf68116100cc578063f1091b6e11610085578063f1091b6e14611345578063f1b8a9b71461135a578063f319dba81461138d578063f8b2cb4f146113bd578063f8d6aed4146113f0578063fea4393a1461143857610501565b8063d4cadf68146112a7578063d73dd623146112bc578063dd62ed3e146112f5578063e4a28a5214610701578063ec09302114611330578063ec342ad0146108cf57610501565b8063c24126761161011e578063c2412676146111ca578063c627fbfa146111df578063c6580d1214611212578063c879a14b14611227578063cbee44ba14611251578063cdfec52d1461129257610501565b8063ba019dab146110f3578063ba9530a614611108578063bc063e1a14610d5a578063bc694ea214611150578063be3bbd2e1461116557610501565b80639f074aad116101fe578063a5a54ea5116101b7578063a5a54ea51461102d578063a9059cbb14611042578063ae1931be1461107b578063b0e0d136146110ab578063b44ec921146110c0578063b7b800a4146110ab57610501565b80639f074aad14610f585780639f6d847414610f6d578063a16faa1814610f97578063a221ee4914610fac578063a2e70a2e14610fee578063a2e73cb61461100357610501565b8063957aa58c11610250578063957aa58c14610ec557806395d89b4114610eda578063992e2a9214610eef5780639a78458a14610f045780639a86139b14610f195780639ae7707314610f2e57610501565b806392eefe9b14610e20578063936c347714610e535780639381cd2b14610e6857806393c88d1414610e7d578063948d8ce614610e9257610501565b80632f37b624116103c95780635f45e8d51161033b57806372015efc116102f457806372015efc14610d4557806376c7a3c714610d5a578063867378c514610d6f5780638929801214610d845780638d811d1f14610dcc578063909f319014610df657610501565b80635f45e8d514610bdd5780636215be7714610bf25780636618846314610c1c5780636c24846914610c5557806370a0823114610c8e57806371a1e6dd14610cc157610501565b8063390221d61161038d578063390221d614610aed5780633a0e928814610b2657806344df8e7014610b595780634cc0fa7e14610b6e57806350baa62214610b9e5780635c7b55bd14610bc857610501565b80632f37b62414610a2c5780633018205f14610a5f5780633109db0314610a74578063313ce56714610aad5780633170570514610ad857610501565b80631489cc2c1161046d5780632140fb40116104265780632140fb401461089c578063218b5382146108cf57806321abba01146108e457806323b872dd1461093257806329dfe3b2146109755780632b9abe1a146109f957610501565b80631489cc2c146107b257806315e84af9146107c757806316f76357146108025780631764d5951461083357806318160ddd14610872578063189d00ca1461088757610501565b806307d729c4116104bf57806307d729c41461067a578063095ea7b3146106c857806309a3bbe414610701578063103ff68d1461071657806311c42a991461075357806312b69b5d1461077f57610501565b80627b44a7146105065780630149e5c71461052d578063024eb2e314610574578063036fe1bb146105db57806306fdde03146105f057610501565b3661050157005b600080fd5b34801561051257600080fd5b5061051b611468565b60408051918252519081900360200190f35b34801561053957600080fd5b506105606004803603602081101561055057600080fd5b50356001600160a01b031661146e565b604080519115158252519081900360200190f35b34801561058057600080fd5b506105c2600480360360e081101561059757600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c001356114e4565b6040805192835260208301919091528051918290030190f35b3480156105e757600080fd5b5061051b6115b6565b3480156105fc57600080fd5b506106056115bc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561063f578181015183820152602001610627565b50505050905090810190601f16801561066c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561068657600080fd5b506106ad6004803603602081101561069d57600080fd5b50356001600160a01b0316611652565b60408051921515835260208301919091528051918290030190f35b3480156106d457600080fd5b50610560600480360360408110156106eb57600080fd5b506001600160a01b038135169060200135611671565b34801561070d57600080fd5b5061051b6116c6565b34801561072257600080fd5b506107516004803603604081101561073957600080fd5b506001600160a01b03813516906020013515156116d3565b005b6105c26004803603604081101561076957600080fd5b506001600160a01b038135169060200135611766565b34801561078b57600080fd5b506106ad600480360360208110156107a257600080fd5b50356001600160a01b0316611c73565b3480156107be57600080fd5b5061051b611c92565b3480156107d357600080fd5b5061051b600480360360408110156107ea57600080fd5b506001600160a01b0381358116916020013516611c98565b34801561080e57600080fd5b50610817611db8565b604080516001600160a01b039092168252519081900360200190f35b34801561083f57600080fd5b506105c26004803603606081101561085657600080fd5b506001600160a01b038135169060208101359060400135611dc7565b34801561087e57600080fd5b5061051b612361565b34801561089357600080fd5b5061051b612367565b3480156108a857600080fd5b50610560600480360360208110156108bf57600080fd5b50356001600160a01b031661237b565b3480156108db57600080fd5b5061051b612399565b3480156108f057600080fd5b506105c2600480360360e081101561090757600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c001356123a5565b34801561093e57600080fd5b506105606004803603606081101561095557600080fd5b506001600160a01b0381358116916020810135909116906040013561244d565b34801561098157600080fd5b506107516004803603604081101561099857600080fd5b813591908101906040810160208201356401000000008111156109ba57600080fd5b8201836020820111156109cc57600080fd5b803590602001918460208302840111640100000000831117156109ee57600080fd5b509092509050612625565b348015610a0557600080fd5b506105c260048036036020811015610a1c57600080fd5b50356001600160a01b0316612ad3565b348015610a3857600080fd5b5061056060048036036020811015610a4f57600080fd5b50356001600160a01b0316612af9565b348015610a6b57600080fd5b50610817612b17565b348015610a8057600080fd5b5061075160048036036040811015610a9757600080fd5b506001600160a01b038135169060200135612b3f565b348015610ab957600080fd5b50610ac2612c98565b6040805160ff9092168252519081900360200190f35b348015610ae457600080fd5b50610817612ca1565b348015610af957600080fd5b5061075160048036036040811015610b1057600080fd5b506001600160a01b038135169060200135612cb0565b348015610b3257600080fd5b5061075160048036036020811015610b4957600080fd5b50356001600160a01b0316612e19565b348015610b6557600080fd5b50610817612e52565b348015610b7a57600080fd5b5061075160048036036040811015610b9157600080fd5b5080359060200135612e61565b348015610baa57600080fd5b5061075160048036036020811015610bc157600080fd5b5035613089565b348015610bd457600080fd5b5061051b6131b3565b348015610be957600080fd5b5061051b6131b9565b348015610bfe57600080fd5b5061075160048036036020811015610c1557600080fd5b50356131bf565b348015610c2857600080fd5b5061056060048036036040811015610c3f57600080fd5b506001600160a01b038135169060200135613299565b348015610c6157600080fd5b5061075160048036036040811015610c7857600080fd5b506001600160a01b038135169060200135613371565b348015610c9a57600080fd5b5061051b60048036036020811015610cb157600080fd5b50356001600160a01b03166134b4565b348015610ccd57600080fd5b5061075160048036036040811015610ce457600080fd5b81359190810190604081016020820135640100000000811115610d0657600080fd5b820183602082011115610d1857600080fd5b80359060200191846020830284011164010000000083111715610d3a57600080fd5b5090925090506134cf565b348015610d5157600080fd5b506107516138e0565b348015610d6657600080fd5b5061051b613949565b348015610d7b57600080fd5b5061051b613954565b348015610d9057600080fd5b5061051b600480360360c0811015610da757600080fd5b5080359060208101359060408101359060608101359060808101359060a00135613968565b348015610dd857600080fd5b5061075160048036036020811015610def57600080fd5b5035613a32565b348015610e0257600080fd5b5061075160048036036020811015610e1957600080fd5b5035613b29565b348015610e2c57600080fd5b5061075160048036036020811015610e4357600080fd5b50356001600160a01b0316613bda565b348015610e5f57600080fd5b5061051b613ca5565b348015610e7457600080fd5b5061051b613cc4565b348015610e8957600080fd5b5061051b613cd1565b348015610e9e57600080fd5b5061075160048036036020811015610eb557600080fd5b50356001600160a01b0316613cd6565b348015610ed157600080fd5b50610560613d13565b348015610ee657600080fd5b50610605613d1c565b348015610efb57600080fd5b5061051b613d7d565b348015610f1057600080fd5b50610817613d89565b348015610f2557600080fd5b5061051b613d98565b348015610f3a57600080fd5b5061075160048036036020811015610f5157600080fd5b5035613da5565b348015610f6457600080fd5b50610751613ec3565b348015610f7957600080fd5b5061075160048036036020811015610f9057600080fd5b5035613f51565b348015610fa357600080fd5b50610751614001565b348015610fb857600080fd5b5061051b600480360360a0811015610fcf57600080fd5b5080359060208101359060408101359060608101359060800135614035565b348015610ffa57600080fd5b5061051b61409a565b34801561100f57600080fd5b506107516004803603602081101561102657600080fd5b50356140a0565b34801561103957600080fd5b5061051b614150565b34801561104e57600080fd5b506105606004803603604081101561106557600080fd5b506001600160a01b038135169060200135614156565b34801561108757600080fd5b506105c26004803603604081101561109e57600080fd5b508035906020013561422d565b3480156110b757600080fd5b5061051b614862565b3480156110cc57600080fd5b50610560600480360360208110156110e357600080fd5b50356001600160a01b0316614867565b3480156110ff57600080fd5b5061051b61487c565b34801561111457600080fd5b506105c2600480360360c081101561112b57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135614881565b34801561115c57600080fd5b5061051b614912565b34801561117157600080fd5b5061117a61491e565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156111b657818101518382015260200161119e565b505050509050019250505060405180910390f35b3480156111d657600080fd5b50610817614995565b3480156111eb57600080fd5b506107516004803603602081101561120257600080fd5b50356001600160a01b03166149a4565b34801561121e57600080fd5b5061051b6149dd565b34801561123357600080fd5b506107516004803603602081101561124a57600080fd5b50356149ed565b34801561125d57600080fd5b506107516004803603606081101561127457600080fd5b506001600160a01b0381351690602081013515159060400135614ac6565b34801561129e57600080fd5b5061051b614b17565b3480156112b357600080fd5b5061051b614b1d565b3480156112c857600080fd5b50610560600480360360408110156112df57600080fd5b506001600160a01b038135169060200135614b3c565b34801561130157600080fd5b5061051b6004803603604081101561131857600080fd5b506001600160a01b0381358116916020013516614bbd565b34801561133c57600080fd5b5061051b614be8565b34801561135157600080fd5b5061051b614bf8565b34801561136657600080fd5b5061051b6004803603602081101561137d57600080fd5b50356001600160a01b0316614bfe565b34801561139957600080fd5b50610751600480360360408110156113b057600080fd5b5080359060200135614c43565b3480156113c957600080fd5b5061051b600480360360208110156113e057600080fd5b50356001600160a01b0316614d13565b3480156113fc57600080fd5b506105c2600480360360c081101561141357600080fd5b5080359060208101359060408101359060608101359060808101359060a00135614d6f565b34801561144457600080fd5b506105c26004803603604081101561145b57600080fd5b5080359060200135614e19565b60135481565b60006001600160a01b0382166114c1576040805162461bcd60e51b815260206004820152601360248201527273657474696e67203020616464726573733b3b60681b604482015290519081900360640190fd5b506001600160a01b0381166000908152601e602052604090205460ff165b919050565b60008060006114f38988615346565b9050600061151261150c670de0b6b3a764000084615459565b876154bb565b905060006115318861152c670de0b6b3a764000085615459565b615346565b905061153e81898861557d565b9350600061154c8d83615459565b9050600061155a828f615346565b90506000611568828761567a565b90506000611576828f6154bb565b905060006115848f83615459565b90506115a08161152c670de0b6b3a76400006064815b04615459565b9950505050505050505097509795505050505050565b60195481565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116485780601f1061161d57610100808354040283529160200191611648565b820191906000526020600020905b81548152906001019060200180831161162b57829003601f168201915b5050505050905090565b601d602052600090815260409020805460019091015460ff9091169082565b3360008181526005602090815260408083206001600160a01b03871680855290835281842086905581518681529151939490939092600080516020615f76833981519152928290030190a35060015b92915050565b6802b5e3af16b188000081565b600b546001600160a01b031633146116ea57600080fd5b6001600160a01b03821661173b576040805162461bcd60e51b815260206004820152601360248201527273657474696e67203020616464726573733b3b60681b604482015290519081900360640190fd5b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b60008061177233615788565b156117ae5760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b600260005414156117f4576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b600260009081556040805160208082523690820181905233936001600160e01b03198135169390929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff161561185d57600080fd5b6009805461ff001916610100179055600d54600e546001600160a01b039182166000818152601b6020526040808220939094168082529390206003830154919392916118b5906002670de0b6b3a76400005b046154bb565b3411156118fc576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d41585f494e5f524154494f60801b604482015290519081900360640190fd5b6003808301549082015460009161191f9168015af1d78b58c40000908185614035565b9050600061195d8460030154670de0b6b3a76400006019028560030154670de0b6b3a76400006019026064346063028161195557fe5b046000614881565b9098509050888810156119a7576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6119b76064606334020489615346565b8211156119fd576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b5050505050611a71858b8a6157da565b601854600e54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611abf57600080fd5b505afa158015611ad3573d6000803e3d6000fd5b505050506040513d6020811015611ae957600080fd5b5051600e546001600160a01b039081166000908152601b602090815260409182902094909303600390940193909355601954600d5484516370a0823160e01b8152306004820152945191949216926370a082319260248082019391829003018186803b158015611b5857600080fd5b505afa158015611b6c573d6000803e3d6000fd5b505050506040513d6020811015611b8257600080fd5b5051600d546001600160a01b03166000908152601b60205260408120929091036003928301558582015491850154611bc8929168015af1d78b58c4000091908290614035565b965081871015611c11576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b6001600160a01b0380861690871633600080516020615ed183398151915260646063340204606460628e026040805193845291900460208301528051918290030190a45050505050506009805461ff0019169055600160005590939092509050565b601c602052600090815260409020805460019091015460ff9091169082565b60155481565b600954600090610100900460ff1615611cb057600080fd5b6001600160a01b0383166000908152601b602052604090205460ff16611d0d576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152601b602052604090205460ff16611d6a576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b038084166000908152601b60205260408082209285168252902060038083015490820154601654611daf929168015af1d78b58c40000918290614035565b95945050505050565b600d546001600160a01b031681565b600080611dd333615788565b15611e0f5760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b60026000541415611e55576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b600260009081556040805160208082523690820181905233936001600160e01b03198135169390929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff1615611ebe57600080fd5b6009805461ff001916610100179055600e54600d546001600160a01b039182166000818152601b602052604080822093909416808252939020600380840154905492949392611f0d91906154bb565b881115611f52576040805162461bcd60e51b815260206004820152600e60248201526d4552525f53454c4c5f524154494f60901b604482015290519081900360640190fd5b60038083015490820154600091611f7f9168015af1d78b58c400009081606460628f025b04601654614881565b909750905087871015611fc9576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6001600160a01b0380851690861633600080516020615ed1833981519152606460628e0204606460638d026040805193845291900460208301528051918290030190a461201785338b6158ab565b60006120308861202b6013546103e8615346565b6154bb565b905060006120468961202b601154612710615346565b9050600061205c8a61202b601254612710615346565b905060006120738461206e8585615904565b615459565b600d5460408051632e1a7d4d60e01b815260048101849052905192935083926001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156120c557600080fd5b505af11580156120d9573d6000803e3d6000fd5b505050506120f48f606483606302816120ee57fe5b04615958565b6120fe8985615a50565b600f546001600160a01b03166000908152602080526040812080548501905560198054850190556003808a015490890154601654612149929168015af1d78b58c40000918290614035565b90506121558f8e615346565b81111561219b576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b601854600e54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156121e957600080fd5b505afa1580156121fd573d6000803e3d6000fd5b505050506040513d602081101561221357600080fd5b5051600e546001600160a01b039081166000908152601b602090815260409182902094909303600390940193909355601954600d5484516370a0823160e01b8152306004820152945191949216926370a082319260248082019391829003018186803b15801561228257600080fd5b505afa158015612296573d6000803e3d6000fd5b505050506040513d60208110156122ac57600080fd5b5051600d546001600160a01b03166000908152601b6020526040902091900360039182015589810154908901546016546122f3929168015af1d78b58c40000918290614035565b9b50808c101561233c576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b50505050505050505050506009805461ff001916905560016000559094909350915050565b60065490565b6402540be400670de0b6b3a76400005b0481565b6001600160a01b03166000908152601c602052604090205460ff1690565b670de0b6b3a764000081565b60008060006123b48988615346565b905060006123cd61150c670de0b6b3a764000084615459565b905060006123e78861202b670de0b6b3a764000085615459565b90506123f488828861557d565b935060006124028d83615904565b90506000612410828f615346565b9050600061241e828761567a565b9050600061242c828f6154bb565b9050612438818f615459565b98505050505050505097509795505050505050565b6000336001600160a01b038516148061248957506001600160a01b03841660009081526005602090815260408083203384529091529020548211155b61249257600080fd5b60408051628503ed60e61b8152336004820152905160009182918291632140fb40916024808301926020929190829003018186803b1580156124d357600080fd5b505afa1580156124e7573d6000803e3d6000fd5b505050506040513d60208110156124fd57600080fd5b5051905060018115151461254e576040805162461bcd60e51b815260206004820152601360248201527202a3930b739b332b91034b9902637b1b5b2b21606d1b604482015290519081900360640190fd5b612559868686615b18565b336001600160a01b0387161480159061259757506001600160a01b038616600090815260056020908152604080832033845290915290205460001914155b15612619576001600160a01b03861660009081526005602090815260408083203384529091529020546125ca9085615459565b6001600160a01b0387811660009081526005602090815260408083203380855290835292819020859055805194855251928916939192600080516020615f768339815191529281900390910190a35b50600195945050505050565b61262e33615788565b1561266a5760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b600260005414156126b0576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b600260009081556040805160208082523690820181905233936001600160e01b03198135169390929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff161561271957600080fd5b6009805461ff001916610100179055336000908152601c60205260409020805460ff161515600114156127895742816001015411156127895760405162461bcd60e51b8152600401808060200182810382526047815260200180615ef16047913960600191505060405180910390fd5b6000612793612361565b905060006127ab866064670de0b6b3a76400006118af565b905060006127b98783615459565b905060006127c78285615346565b90508061280d576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b6128173389615beb565b600a5461282d906001600160a01b031684615bf5565b61283682615bff565b60005b601754811015612ab85760006017828154811061285257fe5b60009182526020808320909101546001600160a01b0316808352601b90915260408220600301549092509061288785836154bb565b9050806128cd576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b8a8a858181106128d957fe5b90506020020135811015612924576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b604080518281526000602082015281516001600160a01b0386169233927f9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f3929081900390910190a36129778333836157da565b601854600e54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156129c557600080fd5b505afa1580156129d9573d6000803e3d6000fd5b505050506040513d60208110156129ef57600080fd5b5051600e546001600160a01b039081166000908152601b602090815260409182902094909303600390940193909355601954600d5484516370a0823160e01b8152306004820152945191949216926370a082319260248082019391829003018186803b158015612a5e57600080fd5b505afa158015612a72573d6000803e3d6000fd5b505050506040513d6020811015612a8857600080fd5b5051600d546001600160a01b03166000908152601b60205260409020919003600390910155505050600101612839565b50506009805461ff0019169055505060016000555050505050565b6001600160a01b03166000908152601f6020908152604080832054918052909120549091565b6001600160a01b03166000908152601b602052604090205460ff1690565b600954600090610100900460ff1615612b2f57600080fd5b50600b546001600160a01b031690565b612b4833615788565b15612b845760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b60026000541415612bca576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b60026000908155338152601f6020526040902054811115612c25576040805162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b4103a37b5b2b760811b604482015290519081900360640190fd5b60006103e8601454830281612c3657fe5b336000908152601f6020526040808220805487900390556001600160a01b0387811683529120805493909204928301909155600e5460105492935083850392612c84929182169116836157da565b601880549190910390555050600160005550565b60095460ff1690565b600f546001600160a01b031681565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff1615612d2657600080fd5b6009805461ff001916610100179055600b54336001600160a01b0390911614612d4e57600080fd5b6001600160a01b0382166000908152601b602052604090205460ff1615612d7457600080fd5b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612dc357600080fd5b505afa158015612dd7573d6000803e3d6000fd5b505050506040513d6020811015612ded57600080fd5b5051905080821115612dfe57600080fd5b612e098333846157da565b50506009805461ff001916905550565b600b546001600160a01b03163314612e3057600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6010546001600160a01b031681565b600c546001600160a01b03163314612e7857600080fd5b601a5460ff1615612e8857600080fd5b600e54600d54604080516080810182526001815268015af1d78b58c400006020820152601754918101919091526001600160a01b03928316929091169060608101606460628702049052600e546001600160a01b03166000908152601b60209081526040918290208351815460ff191690151517815583820151600180830191909155848401516002830155606094850151600390920191909155825160808101845290815268015af1d78b58c400009181019190915260175491810191909152908101606460638602049052600d80546001600160a01b039081166000908152601b602090815260408083208651815490151560ff1991821617825592870151600182810191909155918701516002820155606090960151600390960195909555601a805490911685179055600e54601780548087018255928190527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1592830180546001600160a01b0319908116938616939093179055935484549586019094559301805490931691161790556130218233866158ab565b61302c8133856158ab565b61303e68056bc75e2d63100000615c08565b6130513368056bc75e2d63100000615bf5565b5050336000908152601c60209081526040808320601d909252909120815460ff191660019081179092556301e1338042019101555050565b61309233615788565b156130ce5760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b60026000541415613114576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b60026000908155600e54338252601f6020526040909120546001600160a01b039091169082111561317f576040805162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b4103a37b5b2b760811b604482015290519081900360640190fd5b601880548390039055336000818152601f60205260409020805484900390556131aa908290846157da565b50506001600055565b60115481565b60145481565b6131c833615788565b156132045760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b6002600054141561324a576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b6002600055600e546001600160a01b03166132668133846158ab565b50601880546064606293909302929092049182019055336000908152601f60205260408120805490920190915560019055565b3360009081526005602090815260408083206001600160a01b0386168452909152812054808311156132ee573360009081526005602090815260408083206001600160a01b038816845290915281205561331d565b6132f88184615459565b3360009081526005602090815260408083206001600160a01b03891684529091529020555b3360008181526005602090815260408083206001600160a01b038916808552908352928190205481519081529051929392600080516020615f76833981519152929181900390910190a35060019392505050565b61337a33615788565b156133b65760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b600260005414156133fc576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b60026000908155338152602080526040902054811115613456576040805162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b4103a37b5b2b760811b604482015290519081900360640190fd5b60006103e860155483028161346757fe5b336000908152602080526040808220805487900390556001600160a01b039687168252808220805494909304938401909255600a5490951685528420805491909303019091555060019055565b6001600160a01b031660009081526004602052604090205490565b6134d833615788565b156135145760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b6002600054141561355a576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b600260009081556040805160208082523690820181905233936001600160e01b03198135169390929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff16156135c357600080fd5b6009805461ff00191661010017905560006135dc612361565b905060006135ea8583615346565b905080613630576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b60005b6017548110156138b55760006017828154811061364c57fe5b60009182526020808320909101546001600160a01b0316808352601b90915260408220600301549092509061368185836154bb565b9050806136c7576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b8787858181106136d357fe5b9050602002013581111561371d576040805162461bcd60e51b815260206004820152600c60248201526b22a9292fa624a6a4aa2fa4a760a11b604482015290519081900360640190fd5b6001600160a01b038316337f15a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a60646062850260408051929091048252600060208301528051918290030190a36137748333836158ab565b601854600e54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156137c257600080fd5b505afa1580156137d6573d6000803e3d6000fd5b505050506040513d60208110156137ec57600080fd5b5051600e546001600160a01b039081166000908152601b602090815260409182902094909303600390940193909355601954600d5484516370a0823160e01b8152306004820152945191949216926370a082319260248082019391829003018186803b15801561385b57600080fd5b505afa15801561386f573d6000803e3d6000fd5b505050506040513d602081101561388557600080fd5b5051600d546001600160a01b03166000908152601b60205260409020919003600390910155505050600101613633565b506138bf85615c7d565b6138c93386615bf5565b50506009805461ff00191690555050600160005550565b336000818152601c60209081526040808320601d909252909120600181015442101561393d5760405162461bcd60e51b8152600401808060200182810382526047815260200180615ef16047913960600191505060405180910390fd5b50805460ff1916905550565b66071afd498d000081565b64e8d4a51000670de0b6b3a7640000612377565b6000806139758786615346565b905060006139918561202b670de0b6b3a764000060648161159a565b9050600061399f8883615459565b905060006139ad828a615346565b905060006139cc826139c7670de0b6b3a764000088615346565b61567a565b905060006139da828e6154bb565b905060006139e88e83615459565b90506000613a07613a01670de0b6b3a76400008a615459565b8b6154bb565b9050613a1f8261202b670de0b6b3a764000084615459565b9f9e505050505050505050505050505050565b600c546001600160a01b03163314613a91576040805162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f742068617665207065726d697373696f6e000000000000604482015290519081900360640190fd5b60008111613ad8576040805162461bcd60e51b815260206004820152600f60248201526e31b0b73737ba103a3ab9371037b33360891b604482015290519081900360640190fd5b6064811115613b24576040805162461bcd60e51b815260206004820152601360248201527263616e6e6f742073657420756e64657220312560681b604482015290519081900360640190fd5b600155565b600c546001600160a01b03163314613b4057600080fd5b60c8811115613b8d576040805162461bcd60e51b81526020600482015260146024820152732043616e6e6f7420736574206f7665722032302560601b604482015290519081900360640190fd5b60008111613bd5576040805162461bcd60e51b815260206004820152601060248201526f02043616e6e6f742073657420746f20360841b604482015290519081900360640190fd5b601355565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff1615613c5057600080fd5b6009805461ff001916610100179055600b54336001600160a01b0390911614613c7857600080fd5b600b80546001600160a01b0319166001600160a01b03929092169190911790556009805461ff0019169055565b600954600090610100900460ff1615613cbd57600080fd5b5060215490565b68056bc75e2d6310000081565b600081565b600954610100900460ff1615613ceb57600080fd5b6001600160a01b0381166000908152601b602052604090205460ff16613d1057600080fd5b50565b601a5460ff1681565b60088054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116485780601f1061161d57610100808354040283529160200191611648565b6704a03ce68d21555681565b6002546001600160a01b031681565b6542524f4e5a4560d01b90565b613dae33615788565b15613dea5760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b60026000541415613e30576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b60026000908155600d54338252602080526040909120546001600160a01b0390911690821115613e99576040805162461bcd60e51b815260206004820152600f60248201526e04e6f7420656e6f756768205772617608c1b604482015290519081900360640190fd5b6019805483900390553360008181526020805260409020805484900390556131aa908290846157da565b600d546040805163095ea7b360e01b81526001600160a01b0390921660048301526e13426172c74d822b878fe800000000602483015251309163095ea7b39160448083019260209291908290030181600087803b158015613f2357600080fd5b505af1158015613f37573d6000803e3d6000fd5b505050506040513d6020811015613f4d57600080fd5b5050565b600b546001600160a01b03163314613f6857600080fd5b6064811115613fb4576040805162461bcd60e51b81526020600482015260136024820152722043616e6e6f7420736574206f76657220312560681b604482015290519081900360640190fd5b60008111613ffc576040805162461bcd60e51b815260206004820152601060248201526f02043616e6e6f742073657420746f20360841b604482015290519081900360640190fd5b601155565b336000908152601c60209081526040808320601d909252909120815460ff191660019081179092556301e133804201910155565b6000806140428787615346565b905060006140508686615346565b9050600061405e8383615346565b90506000614080670de0b6b3a764000061152c670de0b6b3a764000089615459565b905061408c82826154bb565b9a9950505050505050505050565b60185481565b600c546001600160a01b031633146140b757600080fd5b6064811115614103576040805162461bcd60e51b81526020600482015260136024820152722043616e6e6f7420736574206f76657220312560681b604482015290519081900360640190fd5b6000811161414b576040805162461bcd60e51b815260206004820152601060248201526f02043616e6e6f742073657420746f20360841b604482015290519081900360640190fd5b601255565b60015481565b6000806000816001600160a01b0316632140fb40336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156141a857600080fd5b505afa1580156141bc573d6000803e3d6000fd5b505050506040513d60208110156141d257600080fd5b505190506001811515146142175760405162461bcd60e51b8152600401808060200182810382526047815260200180615ef16047913960600191505060405180910390fd5b614222338686615b18565b506001949350505050565b60008061423933615788565b156142755760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b600260005414156142bb576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b600260009081556040805160208082523690820181905233936001600160e01b03198135169390929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff161561432457600080fd5b6009805461ff001916610100179055600e54600d54336000908152601f60205260409020546001600160a01b039283169291909116908611156143a1576040805162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b4102a37b5b2b760811b604482015290519081900360640190fd5b6001600160a01b038083166000908152601b60205260408082209284168252902060038083015490546143d491906154bb565b881115614419576040805162461bcd60e51b815260206004820152600e60248201526d4552525f53454c4c5f524154494f60901b604482015290519081900360640190fd5b60006144488360030154670de0b6b3a76400006019028460030154670de0b6b3a7640000601902601654614035565b9050600061447e8460030154670de0b6b3a76400006019028560030154670de0b6b3a764000060190260648f60620281611f7657fe5b9098509050888810156144c8576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6144d28a89615346565b821115614518576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b846001600160a01b0316866001600160a01b0316336001600160a01b0316600080516020615ed18339815191528d8c604051808381526020018281526020019250505060405180910390a460006145778961202b6013546103e8615346565b9050600061458d8a61202b601154612710615346565b905060006145a38b61202b601254612710615346565b905060006145b58461206e8585615904565b905060006145c38284615904565b90508e601f6000336001600160a01b03166001600160a01b031681526020019081526020016000205403601f6000336001600160a01b03166001600160a01b03168152602001908152602001600020819055508160206000336001600160a01b03166001600160a01b03168152602001908152602001600020540160206000336001600160a01b03166001600160a01b031681526020019081526020016000208190555080601954016019819055508e601854036018819055506146878a85615a50565b600f546001600160a01b0390811660009081526020808052604091829020805487019055601854600e5483516370a0823160e01b81523060048201529351919416926370a08231926024808301939192829003018186803b1580156146eb57600080fd5b505afa1580156146ff573d6000803e3d6000fd5b505050506040513d602081101561471557600080fd5b5051600e546001600160a01b039081166000908152601b602090815260409182902094909303600390940193909355601954600d5484516370a0823160e01b8152306004820152945191949216926370a082319260248082019391829003018186803b15801561478457600080fd5b505afa158015614798573d6000803e3d6000fd5b505050506040513d60208110156147ae57600080fd5b5051600d546001600160a01b03166000908152601b6020526040902091900360039182015589810154908901546016546147f5929168015af1d78b58c40000918290614035565b9b50868c101561483e576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b50505050505050505050506009805461ff0019169055600160005590939092509050565b600281565b601e6020526000908152604090205460ff1681565b600181565b60008060006148908887615346565b905060006148a6670de0b6b3a764000086615459565b90506148b286826154bb565b905060006148c48b61152c8d85615904565b905060006148d2828561567a565b905060006148e8670de0b6b3a764000083615459565b90506148f48b826154bb565b96506149008985615459565b95505050505050965096945050505050565b671bc16d674ec7ffff81565b600954606090610100900460ff161561493657600080fd5b601780548060200260200160405190810160405280929190818152602001828054801561164857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161496e575050505050905090565b600e546001600160a01b031681565b600b546001600160a01b031633146149bb57600080fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6064670de0b6b3a7640000612377565b6149f633615788565b15614a325760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b60026000541415614a78576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b6002600055600d546001600160a01b0316614a948133846158ab565b506019805460646063939093029290920491820190553360009081526020805260408120805490920190915560019055565b600b546001600160a01b03163314614add57600080fd5b6001600160a01b03929092166000908152601c60209081526040808320601d909252909120815460ff191692151592909217905560010155565b60035481565b600954600090610100900460ff1615614b3557600080fd5b5060165490565b3360009081526005602090815260408083206001600160a01b0386168452909152812054614b6a9083615904565b3360008181526005602090815260408083206001600160a01b038916808552908352928190208590558051948552519193600080516020615f76833981519152929081900390910190a350600192915050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6002670de0b6b3a7640000612377565b60125481565b600954600090610100900460ff1615614c1657600080fd5b6001600160a01b0382166000908152601b602052604090205460ff16614c3b57600080fd5b505060215490565b600b546001600160a01b03163314614c5a57600080fd5b60648211158015614c6c575060648111155b614cb4576040805162461bcd60e51b81526020600482015260146024820152732043616e6e6f7420736574206f7665722031302560601b604482015290519081900360640190fd5b600082118015614cc45750600081115b614d08576040805162461bcd60e51b815260206004820152601060248201526f02043616e6e6f742073657420746f20360841b604482015290519081900360640190fd5b601491909155601555565b600954600090610100900460ff1615614d2b57600080fd5b6001600160a01b0382166000908152601b602052604090205460ff16614d5057600080fd5b506001600160a01b03166000908152601b602052604090206003015490565b6000806000614d7e8689615346565b90506000614d8c8887615459565b90506000614d9a8983615346565b90506000614da8828561567a565b9050614dbc81670de0b6b3a7640000615459565b9050614dc88c826154bb565b9050614ddc670de0b6b3a764000088615459565b9550614de88187615346565b9550614dfc81670de0b6b3a7640000615346565b9450614e088686615459565b945050505050965096945050505050565b600080614e2533615788565b15614e615760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b60026000541415614ea7576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b600260009081556040805160208082523690820181905233936001600160e01b03198135169390929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff1615614f1057600080fd5b6009805461ff001916610100179055600d54600e543360009081526020805260409020546001600160a01b03928316929190911690861115614f99576040805162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820577261702c206465706f736974206d6f7265000000604482015290519081900360640190fd5b6001600160a01b038083166000908152601b6020526040808220928416825290206003820154614fd3906002670de0b6b3a76400006118af565b88111561501a576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d41585f494e5f524154494f60801b604482015290519081900360640190fd5b6003808301549082015460009161503d9168015af1d78b58c40000908185614035565b905060006150738460030154670de0b6b3a76400006019028560030154670de0b6b3a764000060190260648f6063028161195557fe5b9098509050888810156150bd576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6150c78a89615346565b82111561510d576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b3360009081526020808052604080832080548e90039055601f82529182902080548b019055601980548d90039055601880548b0190819055600e5483516370a0823160e01b8152306004820152935191936001600160a01b03909116926370a0823192602480840193829003018186803b15801561518a57600080fd5b505afa15801561519e573d6000803e3d6000fd5b505050506040513d60208110156151b457600080fd5b5051600e546001600160a01b039081166000908152601b602090815260409182902094909303600390940193909355601954600d5484516370a0823160e01b8152306004820152945191949216926370a082319260248082019391829003018186803b15801561522357600080fd5b505afa158015615237573d6000803e3d6000fd5b505050506040513d602081101561524d57600080fd5b5051600d546001600160a01b03166000908152601b60205260408120929091036003928301558582015491850154615293929168015af1d78b58c4000091908290614035565b9650818710156152dc576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b846001600160a01b0316866001600160a01b0316336001600160a01b0316600080516020615ed18339815191528d8c604051808381526020018281526020019250505060405180910390a45050505050506009805461ff0019169055600160005590939092509050565b600081615389576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a764000083028315806153b15750670de0b6b3a76400008482816153ae57fe5b04145b6153f5576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b60028304810181811015615443576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b600084828161544e57fe5b049695505050505050565b60008060006154688585615c86565b9150915080156154b3576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b60008282028315806154d55750828482816154d257fe5b04145b615519576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b2000081018181101561556c576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a76400008261544e565b6000828410156155c6576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b670de0b6b3a7640000821115615619576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b60006156258585615459565b905061563181846154bb565b9150818110156154b3576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b600060018310156156ca576040805162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b604482015290519081900360640190fd5b671bc16d674ec7ffff831115615720576040805162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b604482015290519081900360640190fd5b600061572b83615cab565b905060006157398483615459565b9050600061574f8661574a85615cc6565b615cd4565b9050816157605792506116c0915050565b600061577187846305f5e100615d2b565b905061577d82826154bb565b979650505050505050565b60006157938261146e565b156157a0575060006114df565b813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906157d25750808214155b949350505050565b6000836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561583357600080fd5b505af1158015615847573d6000803e3d6000fd5b505050506040513d602081101561585d57600080fd5b50519050806158a5576040805162461bcd60e51b815260206004820152600f60248201526e4552525f45524332305f46414c534560881b604482015290519081900360640190fd5b50505050565b604080516323b872dd60e01b81526001600160a01b0384811660048301523060248301526044820184905291516000928616916323b872dd91606480830192602092919082900301818787803b15801561583357600080fd5b600082820183811015615951576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b9392505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106159a45780518252601f199092019160209182019101615985565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615a06576040519150601f19603f3d011682016040523d82523d6000602084013e615a0b565b606091505b5050905080615a4b5760405162461bcd60e51b8152600401808060200182810382526023815260200180615f966023913960400191505060405180910390fd5b505050565b6002546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101849052905160009285169163a9059cbb91604480830192602092919082900301818787803b158015615aa657600080fd5b505af1158015615aba573d6000803e3d6000fd5b505050506040513d6020811015615ad057600080fd5b5051905080615a4b576040805162461bcd60e51b815260206004820152600f60248201526e4552525f45524332305f46414c534560881b604482015290519081900360640190fd5b6001600160a01b038316600090815260046020526040902054811115615b3d57600080fd5b6001600160a01b038316600090815260046020526040902054615b609082615459565b6001600160a01b038085166000908152600460205260408082209390935590841681522054615b8f9082615904565b6001600160a01b0380841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b613f4d8282615e09565b613f4d8282615e14565b613d1081615e1f565b30600090815260046020526040902054615c229082615904565b30600090815260046020526040902055600654615c3f9082615904565b60065560408051828152905130916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b613d1081615c08565b600080828410615c9c5750508082036000615ca4565b505081810360015b9250929050565b6000670de0b6b3a7640000615cbf83615cc6565b0292915050565b670de0b6b3a7640000900490565b60008060028306615ced57670de0b6b3a7640000615cef565b835b90506002830492505b821561595157615d0884856154bb565b93506002830615615d2057615d1d81856154bb565b90505b600283049250615cf8565b6000828180615d4287670de0b6b3a7640000615c86565b9092509050670de0b6b3a764000080600060015b888410615dfa576000670de0b6b3a764000082029050600080615d8a8a615d8585670de0b6b3a7640000615459565b615c86565b91509150615d9c8761202b848c6154bb565b9650615da88784615346565b965086615db757505050615dfa565b8715615dc1579315935b8015615dcb579315935b8415615de257615ddb8688615459565b9550615def565b615dec8688615904565b95505b505050600101615d56565b50909998505050505050505050565b613f4d823083615b18565b613f4d308383615b18565b30600090815260046020526040902054811115615e3b57600080fd5b30600090815260046020526040902054615e559082615459565b30600090815260046020526040902055600654615e729082615459565b60065560408051828152905160009130917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d433784c6971756964697479206973206c6f636b65642c20796f752063616e6e6f742072656d6f7665206c697175696469747920756e74696c206166746572206c6f636b2074696d652e556e617070726f76656420636f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e74657261637420776974682074686520737761708c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a2646970667358221220fb9f151e92c1efed1a487a5a396a5ced323f106c4ede3e11e9e5ee5060405d0f64736f6c63430007060033

Deployed Bytecode

0x6080604052600436106104fa5760003560e01c806392eefe9b1161028c578063ba019dab1161015a578063d4cadf68116100cc578063f1091b6e11610085578063f1091b6e14611345578063f1b8a9b71461135a578063f319dba81461138d578063f8b2cb4f146113bd578063f8d6aed4146113f0578063fea4393a1461143857610501565b8063d4cadf68146112a7578063d73dd623146112bc578063dd62ed3e146112f5578063e4a28a5214610701578063ec09302114611330578063ec342ad0146108cf57610501565b8063c24126761161011e578063c2412676146111ca578063c627fbfa146111df578063c6580d1214611212578063c879a14b14611227578063cbee44ba14611251578063cdfec52d1461129257610501565b8063ba019dab146110f3578063ba9530a614611108578063bc063e1a14610d5a578063bc694ea214611150578063be3bbd2e1461116557610501565b80639f074aad116101fe578063a5a54ea5116101b7578063a5a54ea51461102d578063a9059cbb14611042578063ae1931be1461107b578063b0e0d136146110ab578063b44ec921146110c0578063b7b800a4146110ab57610501565b80639f074aad14610f585780639f6d847414610f6d578063a16faa1814610f97578063a221ee4914610fac578063a2e70a2e14610fee578063a2e73cb61461100357610501565b8063957aa58c11610250578063957aa58c14610ec557806395d89b4114610eda578063992e2a9214610eef5780639a78458a14610f045780639a86139b14610f195780639ae7707314610f2e57610501565b806392eefe9b14610e20578063936c347714610e535780639381cd2b14610e6857806393c88d1414610e7d578063948d8ce614610e9257610501565b80632f37b624116103c95780635f45e8d51161033b57806372015efc116102f457806372015efc14610d4557806376c7a3c714610d5a578063867378c514610d6f5780638929801214610d845780638d811d1f14610dcc578063909f319014610df657610501565b80635f45e8d514610bdd5780636215be7714610bf25780636618846314610c1c5780636c24846914610c5557806370a0823114610c8e57806371a1e6dd14610cc157610501565b8063390221d61161038d578063390221d614610aed5780633a0e928814610b2657806344df8e7014610b595780634cc0fa7e14610b6e57806350baa62214610b9e5780635c7b55bd14610bc857610501565b80632f37b62414610a2c5780633018205f14610a5f5780633109db0314610a74578063313ce56714610aad5780633170570514610ad857610501565b80631489cc2c1161046d5780632140fb40116104265780632140fb401461089c578063218b5382146108cf57806321abba01146108e457806323b872dd1461093257806329dfe3b2146109755780632b9abe1a146109f957610501565b80631489cc2c146107b257806315e84af9146107c757806316f76357146108025780631764d5951461083357806318160ddd14610872578063189d00ca1461088757610501565b806307d729c4116104bf57806307d729c41461067a578063095ea7b3146106c857806309a3bbe414610701578063103ff68d1461071657806311c42a991461075357806312b69b5d1461077f57610501565b80627b44a7146105065780630149e5c71461052d578063024eb2e314610574578063036fe1bb146105db57806306fdde03146105f057610501565b3661050157005b600080fd5b34801561051257600080fd5b5061051b611468565b60408051918252519081900360200190f35b34801561053957600080fd5b506105606004803603602081101561055057600080fd5b50356001600160a01b031661146e565b604080519115158252519081900360200190f35b34801561058057600080fd5b506105c2600480360360e081101561059757600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c001356114e4565b6040805192835260208301919091528051918290030190f35b3480156105e757600080fd5b5061051b6115b6565b3480156105fc57600080fd5b506106056115bc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561063f578181015183820152602001610627565b50505050905090810190601f16801561066c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561068657600080fd5b506106ad6004803603602081101561069d57600080fd5b50356001600160a01b0316611652565b60408051921515835260208301919091528051918290030190f35b3480156106d457600080fd5b50610560600480360360408110156106eb57600080fd5b506001600160a01b038135169060200135611671565b34801561070d57600080fd5b5061051b6116c6565b34801561072257600080fd5b506107516004803603604081101561073957600080fd5b506001600160a01b03813516906020013515156116d3565b005b6105c26004803603604081101561076957600080fd5b506001600160a01b038135169060200135611766565b34801561078b57600080fd5b506106ad600480360360208110156107a257600080fd5b50356001600160a01b0316611c73565b3480156107be57600080fd5b5061051b611c92565b3480156107d357600080fd5b5061051b600480360360408110156107ea57600080fd5b506001600160a01b0381358116916020013516611c98565b34801561080e57600080fd5b50610817611db8565b604080516001600160a01b039092168252519081900360200190f35b34801561083f57600080fd5b506105c26004803603606081101561085657600080fd5b506001600160a01b038135169060208101359060400135611dc7565b34801561087e57600080fd5b5061051b612361565b34801561089357600080fd5b5061051b612367565b3480156108a857600080fd5b50610560600480360360208110156108bf57600080fd5b50356001600160a01b031661237b565b3480156108db57600080fd5b5061051b612399565b3480156108f057600080fd5b506105c2600480360360e081101561090757600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c001356123a5565b34801561093e57600080fd5b506105606004803603606081101561095557600080fd5b506001600160a01b0381358116916020810135909116906040013561244d565b34801561098157600080fd5b506107516004803603604081101561099857600080fd5b813591908101906040810160208201356401000000008111156109ba57600080fd5b8201836020820111156109cc57600080fd5b803590602001918460208302840111640100000000831117156109ee57600080fd5b509092509050612625565b348015610a0557600080fd5b506105c260048036036020811015610a1c57600080fd5b50356001600160a01b0316612ad3565b348015610a3857600080fd5b5061056060048036036020811015610a4f57600080fd5b50356001600160a01b0316612af9565b348015610a6b57600080fd5b50610817612b17565b348015610a8057600080fd5b5061075160048036036040811015610a9757600080fd5b506001600160a01b038135169060200135612b3f565b348015610ab957600080fd5b50610ac2612c98565b6040805160ff9092168252519081900360200190f35b348015610ae457600080fd5b50610817612ca1565b348015610af957600080fd5b5061075160048036036040811015610b1057600080fd5b506001600160a01b038135169060200135612cb0565b348015610b3257600080fd5b5061075160048036036020811015610b4957600080fd5b50356001600160a01b0316612e19565b348015610b6557600080fd5b50610817612e52565b348015610b7a57600080fd5b5061075160048036036040811015610b9157600080fd5b5080359060200135612e61565b348015610baa57600080fd5b5061075160048036036020811015610bc157600080fd5b5035613089565b348015610bd457600080fd5b5061051b6131b3565b348015610be957600080fd5b5061051b6131b9565b348015610bfe57600080fd5b5061075160048036036020811015610c1557600080fd5b50356131bf565b348015610c2857600080fd5b5061056060048036036040811015610c3f57600080fd5b506001600160a01b038135169060200135613299565b348015610c6157600080fd5b5061075160048036036040811015610c7857600080fd5b506001600160a01b038135169060200135613371565b348015610c9a57600080fd5b5061051b60048036036020811015610cb157600080fd5b50356001600160a01b03166134b4565b348015610ccd57600080fd5b5061075160048036036040811015610ce457600080fd5b81359190810190604081016020820135640100000000811115610d0657600080fd5b820183602082011115610d1857600080fd5b80359060200191846020830284011164010000000083111715610d3a57600080fd5b5090925090506134cf565b348015610d5157600080fd5b506107516138e0565b348015610d6657600080fd5b5061051b613949565b348015610d7b57600080fd5b5061051b613954565b348015610d9057600080fd5b5061051b600480360360c0811015610da757600080fd5b5080359060208101359060408101359060608101359060808101359060a00135613968565b348015610dd857600080fd5b5061075160048036036020811015610def57600080fd5b5035613a32565b348015610e0257600080fd5b5061075160048036036020811015610e1957600080fd5b5035613b29565b348015610e2c57600080fd5b5061075160048036036020811015610e4357600080fd5b50356001600160a01b0316613bda565b348015610e5f57600080fd5b5061051b613ca5565b348015610e7457600080fd5b5061051b613cc4565b348015610e8957600080fd5b5061051b613cd1565b348015610e9e57600080fd5b5061075160048036036020811015610eb557600080fd5b50356001600160a01b0316613cd6565b348015610ed157600080fd5b50610560613d13565b348015610ee657600080fd5b50610605613d1c565b348015610efb57600080fd5b5061051b613d7d565b348015610f1057600080fd5b50610817613d89565b348015610f2557600080fd5b5061051b613d98565b348015610f3a57600080fd5b5061075160048036036020811015610f5157600080fd5b5035613da5565b348015610f6457600080fd5b50610751613ec3565b348015610f7957600080fd5b5061075160048036036020811015610f9057600080fd5b5035613f51565b348015610fa357600080fd5b50610751614001565b348015610fb857600080fd5b5061051b600480360360a0811015610fcf57600080fd5b5080359060208101359060408101359060608101359060800135614035565b348015610ffa57600080fd5b5061051b61409a565b34801561100f57600080fd5b506107516004803603602081101561102657600080fd5b50356140a0565b34801561103957600080fd5b5061051b614150565b34801561104e57600080fd5b506105606004803603604081101561106557600080fd5b506001600160a01b038135169060200135614156565b34801561108757600080fd5b506105c26004803603604081101561109e57600080fd5b508035906020013561422d565b3480156110b757600080fd5b5061051b614862565b3480156110cc57600080fd5b50610560600480360360208110156110e357600080fd5b50356001600160a01b0316614867565b3480156110ff57600080fd5b5061051b61487c565b34801561111457600080fd5b506105c2600480360360c081101561112b57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135614881565b34801561115c57600080fd5b5061051b614912565b34801561117157600080fd5b5061117a61491e565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156111b657818101518382015260200161119e565b505050509050019250505060405180910390f35b3480156111d657600080fd5b50610817614995565b3480156111eb57600080fd5b506107516004803603602081101561120257600080fd5b50356001600160a01b03166149a4565b34801561121e57600080fd5b5061051b6149dd565b34801561123357600080fd5b506107516004803603602081101561124a57600080fd5b50356149ed565b34801561125d57600080fd5b506107516004803603606081101561127457600080fd5b506001600160a01b0381351690602081013515159060400135614ac6565b34801561129e57600080fd5b5061051b614b17565b3480156112b357600080fd5b5061051b614b1d565b3480156112c857600080fd5b50610560600480360360408110156112df57600080fd5b506001600160a01b038135169060200135614b3c565b34801561130157600080fd5b5061051b6004803603604081101561131857600080fd5b506001600160a01b0381358116916020013516614bbd565b34801561133c57600080fd5b5061051b614be8565b34801561135157600080fd5b5061051b614bf8565b34801561136657600080fd5b5061051b6004803603602081101561137d57600080fd5b50356001600160a01b0316614bfe565b34801561139957600080fd5b50610751600480360360408110156113b057600080fd5b5080359060200135614c43565b3480156113c957600080fd5b5061051b600480360360208110156113e057600080fd5b50356001600160a01b0316614d13565b3480156113fc57600080fd5b506105c2600480360360c081101561141357600080fd5b5080359060208101359060408101359060608101359060808101359060a00135614d6f565b34801561144457600080fd5b506105c26004803603604081101561145b57600080fd5b5080359060200135614e19565b60135481565b60006001600160a01b0382166114c1576040805162461bcd60e51b815260206004820152601360248201527273657474696e67203020616464726573733b3b60681b604482015290519081900360640190fd5b506001600160a01b0381166000908152601e602052604090205460ff165b919050565b60008060006114f38988615346565b9050600061151261150c670de0b6b3a764000084615459565b876154bb565b905060006115318861152c670de0b6b3a764000085615459565b615346565b905061153e81898861557d565b9350600061154c8d83615459565b9050600061155a828f615346565b90506000611568828761567a565b90506000611576828f6154bb565b905060006115848f83615459565b90506115a08161152c670de0b6b3a76400006064815b04615459565b9950505050505050505097509795505050505050565b60195481565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116485780601f1061161d57610100808354040283529160200191611648565b820191906000526020600020905b81548152906001019060200180831161162b57829003601f168201915b5050505050905090565b601d602052600090815260409020805460019091015460ff9091169082565b3360008181526005602090815260408083206001600160a01b03871680855290835281842086905581518681529151939490939092600080516020615f76833981519152928290030190a35060015b92915050565b6802b5e3af16b188000081565b600b546001600160a01b031633146116ea57600080fd5b6001600160a01b03821661173b576040805162461bcd60e51b815260206004820152601360248201527273657474696e67203020616464726573733b3b60681b604482015290519081900360640190fd5b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b60008061177233615788565b156117ae5760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b600260005414156117f4576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b600260009081556040805160208082523690820181905233936001600160e01b03198135169390929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff161561185d57600080fd5b6009805461ff001916610100179055600d54600e546001600160a01b039182166000818152601b6020526040808220939094168082529390206003830154919392916118b5906002670de0b6b3a76400005b046154bb565b3411156118fc576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d41585f494e5f524154494f60801b604482015290519081900360640190fd5b6003808301549082015460009161191f9168015af1d78b58c40000908185614035565b9050600061195d8460030154670de0b6b3a76400006019028560030154670de0b6b3a76400006019026064346063028161195557fe5b046000614881565b9098509050888810156119a7576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6119b76064606334020489615346565b8211156119fd576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b5050505050611a71858b8a6157da565b601854600e54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611abf57600080fd5b505afa158015611ad3573d6000803e3d6000fd5b505050506040513d6020811015611ae957600080fd5b5051600e546001600160a01b039081166000908152601b602090815260409182902094909303600390940193909355601954600d5484516370a0823160e01b8152306004820152945191949216926370a082319260248082019391829003018186803b158015611b5857600080fd5b505afa158015611b6c573d6000803e3d6000fd5b505050506040513d6020811015611b8257600080fd5b5051600d546001600160a01b03166000908152601b60205260408120929091036003928301558582015491850154611bc8929168015af1d78b58c4000091908290614035565b965081871015611c11576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b6001600160a01b0380861690871633600080516020615ed183398151915260646063340204606460628e026040805193845291900460208301528051918290030190a45050505050506009805461ff0019169055600160005590939092509050565b601c602052600090815260409020805460019091015460ff9091169082565b60155481565b600954600090610100900460ff1615611cb057600080fd5b6001600160a01b0383166000908152601b602052604090205460ff16611d0d576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152601b602052604090205460ff16611d6a576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b038084166000908152601b60205260408082209285168252902060038083015490820154601654611daf929168015af1d78b58c40000918290614035565b95945050505050565b600d546001600160a01b031681565b600080611dd333615788565b15611e0f5760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b60026000541415611e55576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b600260009081556040805160208082523690820181905233936001600160e01b03198135169390929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff1615611ebe57600080fd5b6009805461ff001916610100179055600e54600d546001600160a01b039182166000818152601b602052604080822093909416808252939020600380840154905492949392611f0d91906154bb565b881115611f52576040805162461bcd60e51b815260206004820152600e60248201526d4552525f53454c4c5f524154494f60901b604482015290519081900360640190fd5b60038083015490820154600091611f7f9168015af1d78b58c400009081606460628f025b04601654614881565b909750905087871015611fc9576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6001600160a01b0380851690861633600080516020615ed1833981519152606460628e0204606460638d026040805193845291900460208301528051918290030190a461201785338b6158ab565b60006120308861202b6013546103e8615346565b6154bb565b905060006120468961202b601154612710615346565b9050600061205c8a61202b601254612710615346565b905060006120738461206e8585615904565b615459565b600d5460408051632e1a7d4d60e01b815260048101849052905192935083926001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156120c557600080fd5b505af11580156120d9573d6000803e3d6000fd5b505050506120f48f606483606302816120ee57fe5b04615958565b6120fe8985615a50565b600f546001600160a01b03166000908152602080526040812080548501905560198054850190556003808a015490890154601654612149929168015af1d78b58c40000918290614035565b90506121558f8e615346565b81111561219b576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b601854600e54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156121e957600080fd5b505afa1580156121fd573d6000803e3d6000fd5b505050506040513d602081101561221357600080fd5b5051600e546001600160a01b039081166000908152601b602090815260409182902094909303600390940193909355601954600d5484516370a0823160e01b8152306004820152945191949216926370a082319260248082019391829003018186803b15801561228257600080fd5b505afa158015612296573d6000803e3d6000fd5b505050506040513d60208110156122ac57600080fd5b5051600d546001600160a01b03166000908152601b6020526040902091900360039182015589810154908901546016546122f3929168015af1d78b58c40000918290614035565b9b50808c101561233c576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b50505050505050505050506009805461ff001916905560016000559094909350915050565b60065490565b6402540be400670de0b6b3a76400005b0481565b6001600160a01b03166000908152601c602052604090205460ff1690565b670de0b6b3a764000081565b60008060006123b48988615346565b905060006123cd61150c670de0b6b3a764000084615459565b905060006123e78861202b670de0b6b3a764000085615459565b90506123f488828861557d565b935060006124028d83615904565b90506000612410828f615346565b9050600061241e828761567a565b9050600061242c828f6154bb565b9050612438818f615459565b98505050505050505097509795505050505050565b6000336001600160a01b038516148061248957506001600160a01b03841660009081526005602090815260408083203384529091529020548211155b61249257600080fd5b60408051628503ed60e61b8152336004820152905160009182918291632140fb40916024808301926020929190829003018186803b1580156124d357600080fd5b505afa1580156124e7573d6000803e3d6000fd5b505050506040513d60208110156124fd57600080fd5b5051905060018115151461254e576040805162461bcd60e51b815260206004820152601360248201527202a3930b739b332b91034b9902637b1b5b2b21606d1b604482015290519081900360640190fd5b612559868686615b18565b336001600160a01b0387161480159061259757506001600160a01b038616600090815260056020908152604080832033845290915290205460001914155b15612619576001600160a01b03861660009081526005602090815260408083203384529091529020546125ca9085615459565b6001600160a01b0387811660009081526005602090815260408083203380855290835292819020859055805194855251928916939192600080516020615f768339815191529281900390910190a35b50600195945050505050565b61262e33615788565b1561266a5760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b600260005414156126b0576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b600260009081556040805160208082523690820181905233936001600160e01b03198135169390929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff161561271957600080fd5b6009805461ff001916610100179055336000908152601c60205260409020805460ff161515600114156127895742816001015411156127895760405162461bcd60e51b8152600401808060200182810382526047815260200180615ef16047913960600191505060405180910390fd5b6000612793612361565b905060006127ab866064670de0b6b3a76400006118af565b905060006127b98783615459565b905060006127c78285615346565b90508061280d576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b6128173389615beb565b600a5461282d906001600160a01b031684615bf5565b61283682615bff565b60005b601754811015612ab85760006017828154811061285257fe5b60009182526020808320909101546001600160a01b0316808352601b90915260408220600301549092509061288785836154bb565b9050806128cd576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b8a8a858181106128d957fe5b90506020020135811015612924576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b604080518281526000602082015281516001600160a01b0386169233927f9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f3929081900390910190a36129778333836157da565b601854600e54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156129c557600080fd5b505afa1580156129d9573d6000803e3d6000fd5b505050506040513d60208110156129ef57600080fd5b5051600e546001600160a01b039081166000908152601b602090815260409182902094909303600390940193909355601954600d5484516370a0823160e01b8152306004820152945191949216926370a082319260248082019391829003018186803b158015612a5e57600080fd5b505afa158015612a72573d6000803e3d6000fd5b505050506040513d6020811015612a8857600080fd5b5051600d546001600160a01b03166000908152601b60205260409020919003600390910155505050600101612839565b50506009805461ff0019169055505060016000555050505050565b6001600160a01b03166000908152601f6020908152604080832054918052909120549091565b6001600160a01b03166000908152601b602052604090205460ff1690565b600954600090610100900460ff1615612b2f57600080fd5b50600b546001600160a01b031690565b612b4833615788565b15612b845760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b60026000541415612bca576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b60026000908155338152601f6020526040902054811115612c25576040805162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b4103a37b5b2b760811b604482015290519081900360640190fd5b60006103e8601454830281612c3657fe5b336000908152601f6020526040808220805487900390556001600160a01b0387811683529120805493909204928301909155600e5460105492935083850392612c84929182169116836157da565b601880549190910390555050600160005550565b60095460ff1690565b600f546001600160a01b031681565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff1615612d2657600080fd5b6009805461ff001916610100179055600b54336001600160a01b0390911614612d4e57600080fd5b6001600160a01b0382166000908152601b602052604090205460ff1615612d7457600080fd5b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612dc357600080fd5b505afa158015612dd7573d6000803e3d6000fd5b505050506040513d6020811015612ded57600080fd5b5051905080821115612dfe57600080fd5b612e098333846157da565b50506009805461ff001916905550565b600b546001600160a01b03163314612e3057600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6010546001600160a01b031681565b600c546001600160a01b03163314612e7857600080fd5b601a5460ff1615612e8857600080fd5b600e54600d54604080516080810182526001815268015af1d78b58c400006020820152601754918101919091526001600160a01b03928316929091169060608101606460628702049052600e546001600160a01b03166000908152601b60209081526040918290208351815460ff191690151517815583820151600180830191909155848401516002830155606094850151600390920191909155825160808101845290815268015af1d78b58c400009181019190915260175491810191909152908101606460638602049052600d80546001600160a01b039081166000908152601b602090815260408083208651815490151560ff1991821617825592870151600182810191909155918701516002820155606090960151600390960195909555601a805490911685179055600e54601780548087018255928190527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1592830180546001600160a01b0319908116938616939093179055935484549586019094559301805490931691161790556130218233866158ab565b61302c8133856158ab565b61303e68056bc75e2d63100000615c08565b6130513368056bc75e2d63100000615bf5565b5050336000908152601c60209081526040808320601d909252909120815460ff191660019081179092556301e1338042019101555050565b61309233615788565b156130ce5760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b60026000541415613114576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b60026000908155600e54338252601f6020526040909120546001600160a01b039091169082111561317f576040805162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b4103a37b5b2b760811b604482015290519081900360640190fd5b601880548390039055336000818152601f60205260409020805484900390556131aa908290846157da565b50506001600055565b60115481565b60145481565b6131c833615788565b156132045760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b6002600054141561324a576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b6002600055600e546001600160a01b03166132668133846158ab565b50601880546064606293909302929092049182019055336000908152601f60205260408120805490920190915560019055565b3360009081526005602090815260408083206001600160a01b0386168452909152812054808311156132ee573360009081526005602090815260408083206001600160a01b038816845290915281205561331d565b6132f88184615459565b3360009081526005602090815260408083206001600160a01b03891684529091529020555b3360008181526005602090815260408083206001600160a01b038916808552908352928190205481519081529051929392600080516020615f76833981519152929181900390910190a35060019392505050565b61337a33615788565b156133b65760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b600260005414156133fc576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b60026000908155338152602080526040902054811115613456576040805162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b4103a37b5b2b760811b604482015290519081900360640190fd5b60006103e860155483028161346757fe5b336000908152602080526040808220805487900390556001600160a01b039687168252808220805494909304938401909255600a5490951685528420805491909303019091555060019055565b6001600160a01b031660009081526004602052604090205490565b6134d833615788565b156135145760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b6002600054141561355a576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b600260009081556040805160208082523690820181905233936001600160e01b03198135169390929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff16156135c357600080fd5b6009805461ff00191661010017905560006135dc612361565b905060006135ea8583615346565b905080613630576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b60005b6017548110156138b55760006017828154811061364c57fe5b60009182526020808320909101546001600160a01b0316808352601b90915260408220600301549092509061368185836154bb565b9050806136c7576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b8787858181106136d357fe5b9050602002013581111561371d576040805162461bcd60e51b815260206004820152600c60248201526b22a9292fa624a6a4aa2fa4a760a11b604482015290519081900360640190fd5b6001600160a01b038316337f15a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a60646062850260408051929091048252600060208301528051918290030190a36137748333836158ab565b601854600e54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156137c257600080fd5b505afa1580156137d6573d6000803e3d6000fd5b505050506040513d60208110156137ec57600080fd5b5051600e546001600160a01b039081166000908152601b602090815260409182902094909303600390940193909355601954600d5484516370a0823160e01b8152306004820152945191949216926370a082319260248082019391829003018186803b15801561385b57600080fd5b505afa15801561386f573d6000803e3d6000fd5b505050506040513d602081101561388557600080fd5b5051600d546001600160a01b03166000908152601b60205260409020919003600390910155505050600101613633565b506138bf85615c7d565b6138c93386615bf5565b50506009805461ff00191690555050600160005550565b336000818152601c60209081526040808320601d909252909120600181015442101561393d5760405162461bcd60e51b8152600401808060200182810382526047815260200180615ef16047913960600191505060405180910390fd5b50805460ff1916905550565b66071afd498d000081565b64e8d4a51000670de0b6b3a7640000612377565b6000806139758786615346565b905060006139918561202b670de0b6b3a764000060648161159a565b9050600061399f8883615459565b905060006139ad828a615346565b905060006139cc826139c7670de0b6b3a764000088615346565b61567a565b905060006139da828e6154bb565b905060006139e88e83615459565b90506000613a07613a01670de0b6b3a76400008a615459565b8b6154bb565b9050613a1f8261202b670de0b6b3a764000084615459565b9f9e505050505050505050505050505050565b600c546001600160a01b03163314613a91576040805162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f742068617665207065726d697373696f6e000000000000604482015290519081900360640190fd5b60008111613ad8576040805162461bcd60e51b815260206004820152600f60248201526e31b0b73737ba103a3ab9371037b33360891b604482015290519081900360640190fd5b6064811115613b24576040805162461bcd60e51b815260206004820152601360248201527263616e6e6f742073657420756e64657220312560681b604482015290519081900360640190fd5b600155565b600c546001600160a01b03163314613b4057600080fd5b60c8811115613b8d576040805162461bcd60e51b81526020600482015260146024820152732043616e6e6f7420736574206f7665722032302560601b604482015290519081900360640190fd5b60008111613bd5576040805162461bcd60e51b815260206004820152601060248201526f02043616e6e6f742073657420746f20360841b604482015290519081900360640190fd5b601355565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff1615613c5057600080fd5b6009805461ff001916610100179055600b54336001600160a01b0390911614613c7857600080fd5b600b80546001600160a01b0319166001600160a01b03929092169190911790556009805461ff0019169055565b600954600090610100900460ff1615613cbd57600080fd5b5060215490565b68056bc75e2d6310000081565b600081565b600954610100900460ff1615613ceb57600080fd5b6001600160a01b0381166000908152601b602052604090205460ff16613d1057600080fd5b50565b601a5460ff1681565b60088054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116485780601f1061161d57610100808354040283529160200191611648565b6704a03ce68d21555681565b6002546001600160a01b031681565b6542524f4e5a4560d01b90565b613dae33615788565b15613dea5760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b60026000541415613e30576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b60026000908155600d54338252602080526040909120546001600160a01b0390911690821115613e99576040805162461bcd60e51b815260206004820152600f60248201526e04e6f7420656e6f756768205772617608c1b604482015290519081900360640190fd5b6019805483900390553360008181526020805260409020805484900390556131aa908290846157da565b600d546040805163095ea7b360e01b81526001600160a01b0390921660048301526e13426172c74d822b878fe800000000602483015251309163095ea7b39160448083019260209291908290030181600087803b158015613f2357600080fd5b505af1158015613f37573d6000803e3d6000fd5b505050506040513d6020811015613f4d57600080fd5b5050565b600b546001600160a01b03163314613f6857600080fd5b6064811115613fb4576040805162461bcd60e51b81526020600482015260136024820152722043616e6e6f7420736574206f76657220312560681b604482015290519081900360640190fd5b60008111613ffc576040805162461bcd60e51b815260206004820152601060248201526f02043616e6e6f742073657420746f20360841b604482015290519081900360640190fd5b601155565b336000908152601c60209081526040808320601d909252909120815460ff191660019081179092556301e133804201910155565b6000806140428787615346565b905060006140508686615346565b9050600061405e8383615346565b90506000614080670de0b6b3a764000061152c670de0b6b3a764000089615459565b905061408c82826154bb565b9a9950505050505050505050565b60185481565b600c546001600160a01b031633146140b757600080fd5b6064811115614103576040805162461bcd60e51b81526020600482015260136024820152722043616e6e6f7420736574206f76657220312560681b604482015290519081900360640190fd5b6000811161414b576040805162461bcd60e51b815260206004820152601060248201526f02043616e6e6f742073657420746f20360841b604482015290519081900360640190fd5b601255565b60015481565b6000806000816001600160a01b0316632140fb40336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156141a857600080fd5b505afa1580156141bc573d6000803e3d6000fd5b505050506040513d60208110156141d257600080fd5b505190506001811515146142175760405162461bcd60e51b8152600401808060200182810382526047815260200180615ef16047913960600191505060405180910390fd5b614222338686615b18565b506001949350505050565b60008061423933615788565b156142755760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b600260005414156142bb576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b600260009081556040805160208082523690820181905233936001600160e01b03198135169390929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff161561432457600080fd5b6009805461ff001916610100179055600e54600d54336000908152601f60205260409020546001600160a01b039283169291909116908611156143a1576040805162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b4102a37b5b2b760811b604482015290519081900360640190fd5b6001600160a01b038083166000908152601b60205260408082209284168252902060038083015490546143d491906154bb565b881115614419576040805162461bcd60e51b815260206004820152600e60248201526d4552525f53454c4c5f524154494f60901b604482015290519081900360640190fd5b60006144488360030154670de0b6b3a76400006019028460030154670de0b6b3a7640000601902601654614035565b9050600061447e8460030154670de0b6b3a76400006019028560030154670de0b6b3a764000060190260648f60620281611f7657fe5b9098509050888810156144c8576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6144d28a89615346565b821115614518576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b846001600160a01b0316866001600160a01b0316336001600160a01b0316600080516020615ed18339815191528d8c604051808381526020018281526020019250505060405180910390a460006145778961202b6013546103e8615346565b9050600061458d8a61202b601154612710615346565b905060006145a38b61202b601254612710615346565b905060006145b58461206e8585615904565b905060006145c38284615904565b90508e601f6000336001600160a01b03166001600160a01b031681526020019081526020016000205403601f6000336001600160a01b03166001600160a01b03168152602001908152602001600020819055508160206000336001600160a01b03166001600160a01b03168152602001908152602001600020540160206000336001600160a01b03166001600160a01b031681526020019081526020016000208190555080601954016019819055508e601854036018819055506146878a85615a50565b600f546001600160a01b0390811660009081526020808052604091829020805487019055601854600e5483516370a0823160e01b81523060048201529351919416926370a08231926024808301939192829003018186803b1580156146eb57600080fd5b505afa1580156146ff573d6000803e3d6000fd5b505050506040513d602081101561471557600080fd5b5051600e546001600160a01b039081166000908152601b602090815260409182902094909303600390940193909355601954600d5484516370a0823160e01b8152306004820152945191949216926370a082319260248082019391829003018186803b15801561478457600080fd5b505afa158015614798573d6000803e3d6000fd5b505050506040513d60208110156147ae57600080fd5b5051600d546001600160a01b03166000908152601b6020526040902091900360039182015589810154908901546016546147f5929168015af1d78b58c40000918290614035565b9b50868c101561483e576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b50505050505050505050506009805461ff0019169055600160005590939092509050565b600281565b601e6020526000908152604090205460ff1681565b600181565b60008060006148908887615346565b905060006148a6670de0b6b3a764000086615459565b90506148b286826154bb565b905060006148c48b61152c8d85615904565b905060006148d2828561567a565b905060006148e8670de0b6b3a764000083615459565b90506148f48b826154bb565b96506149008985615459565b95505050505050965096945050505050565b671bc16d674ec7ffff81565b600954606090610100900460ff161561493657600080fd5b601780548060200260200160405190810160405280929190818152602001828054801561164857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161496e575050505050905090565b600e546001600160a01b031681565b600b546001600160a01b031633146149bb57600080fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6064670de0b6b3a7640000612377565b6149f633615788565b15614a325760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b60026000541415614a78576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b6002600055600d546001600160a01b0316614a948133846158ab565b506019805460646063939093029290920491820190553360009081526020805260408120805490920190915560019055565b600b546001600160a01b03163314614add57600080fd5b6001600160a01b03929092166000908152601c60209081526040808320601d909252909120815460ff191692151592909217905560010155565b60035481565b600954600090610100900460ff1615614b3557600080fd5b5060165490565b3360009081526005602090815260408083206001600160a01b0386168452909152812054614b6a9083615904565b3360008181526005602090815260408083206001600160a01b038916808552908352928190208590558051948552519193600080516020615f76833981519152929081900390910190a350600192915050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6002670de0b6b3a7640000612377565b60125481565b600954600090610100900460ff1615614c1657600080fd5b6001600160a01b0382166000908152601b602052604090205460ff16614c3b57600080fd5b505060215490565b600b546001600160a01b03163314614c5a57600080fd5b60648211158015614c6c575060648111155b614cb4576040805162461bcd60e51b81526020600482015260146024820152732043616e6e6f7420736574206f7665722031302560601b604482015290519081900360640190fd5b600082118015614cc45750600081115b614d08576040805162461bcd60e51b815260206004820152601060248201526f02043616e6e6f742073657420746f20360841b604482015290519081900360640190fd5b601491909155601555565b600954600090610100900460ff1615614d2b57600080fd5b6001600160a01b0382166000908152601b602052604090205460ff16614d5057600080fd5b506001600160a01b03166000908152601b602052604090206003015490565b6000806000614d7e8689615346565b90506000614d8c8887615459565b90506000614d9a8983615346565b90506000614da8828561567a565b9050614dbc81670de0b6b3a7640000615459565b9050614dc88c826154bb565b9050614ddc670de0b6b3a764000088615459565b9550614de88187615346565b9550614dfc81670de0b6b3a7640000615346565b9450614e088686615459565b945050505050965096945050505050565b600080614e2533615788565b15614e615760405162461bcd60e51b815260040180806020018281038252603e815260200180615f38603e913960400191505060405180910390fd5b60026000541415614ea7576040805162461bcd60e51b815260206004820152601f6024820152600080516020615eb1833981519152604482015290519081900360640190fd5b600260009081556040805160208082523690820181905233936001600160e01b03198135169390929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600954610100900460ff1615614f1057600080fd5b6009805461ff001916610100179055600d54600e543360009081526020805260409020546001600160a01b03928316929190911690861115614f99576040805162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820577261702c206465706f736974206d6f7265000000604482015290519081900360640190fd5b6001600160a01b038083166000908152601b6020526040808220928416825290206003820154614fd3906002670de0b6b3a76400006118af565b88111561501a576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d41585f494e5f524154494f60801b604482015290519081900360640190fd5b6003808301549082015460009161503d9168015af1d78b58c40000908185614035565b905060006150738460030154670de0b6b3a76400006019028560030154670de0b6b3a764000060190260648f6063028161195557fe5b9098509050888810156150bd576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6150c78a89615346565b82111561510d576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b3360009081526020808052604080832080548e90039055601f82529182902080548b019055601980548d90039055601880548b0190819055600e5483516370a0823160e01b8152306004820152935191936001600160a01b03909116926370a0823192602480840193829003018186803b15801561518a57600080fd5b505afa15801561519e573d6000803e3d6000fd5b505050506040513d60208110156151b457600080fd5b5051600e546001600160a01b039081166000908152601b602090815260409182902094909303600390940193909355601954600d5484516370a0823160e01b8152306004820152945191949216926370a082319260248082019391829003018186803b15801561522357600080fd5b505afa158015615237573d6000803e3d6000fd5b505050506040513d602081101561524d57600080fd5b5051600d546001600160a01b03166000908152601b60205260408120929091036003928301558582015491850154615293929168015af1d78b58c4000091908290614035565b9650818710156152dc576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b846001600160a01b0316866001600160a01b0316336001600160a01b0316600080516020615ed18339815191528d8c604051808381526020018281526020019250505060405180910390a45050505050506009805461ff0019169055600160005590939092509050565b600081615389576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a764000083028315806153b15750670de0b6b3a76400008482816153ae57fe5b04145b6153f5576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b60028304810181811015615443576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b600084828161544e57fe5b049695505050505050565b60008060006154688585615c86565b9150915080156154b3576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b60008282028315806154d55750828482816154d257fe5b04145b615519576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b2000081018181101561556c576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a76400008261544e565b6000828410156155c6576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b670de0b6b3a7640000821115615619576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b60006156258585615459565b905061563181846154bb565b9150818110156154b3576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b600060018310156156ca576040805162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b604482015290519081900360640190fd5b671bc16d674ec7ffff831115615720576040805162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b604482015290519081900360640190fd5b600061572b83615cab565b905060006157398483615459565b9050600061574f8661574a85615cc6565b615cd4565b9050816157605792506116c0915050565b600061577187846305f5e100615d2b565b905061577d82826154bb565b979650505050505050565b60006157938261146e565b156157a0575060006114df565b813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906157d25750808214155b949350505050565b6000836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561583357600080fd5b505af1158015615847573d6000803e3d6000fd5b505050506040513d602081101561585d57600080fd5b50519050806158a5576040805162461bcd60e51b815260206004820152600f60248201526e4552525f45524332305f46414c534560881b604482015290519081900360640190fd5b50505050565b604080516323b872dd60e01b81526001600160a01b0384811660048301523060248301526044820184905291516000928616916323b872dd91606480830192602092919082900301818787803b15801561583357600080fd5b600082820183811015615951576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b9392505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106159a45780518252601f199092019160209182019101615985565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615a06576040519150601f19603f3d011682016040523d82523d6000602084013e615a0b565b606091505b5050905080615a4b5760405162461bcd60e51b8152600401808060200182810382526023815260200180615f966023913960400191505060405180910390fd5b505050565b6002546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101849052905160009285169163a9059cbb91604480830192602092919082900301818787803b158015615aa657600080fd5b505af1158015615aba573d6000803e3d6000fd5b505050506040513d6020811015615ad057600080fd5b5051905080615a4b576040805162461bcd60e51b815260206004820152600f60248201526e4552525f45524332305f46414c534560881b604482015290519081900360640190fd5b6001600160a01b038316600090815260046020526040902054811115615b3d57600080fd5b6001600160a01b038316600090815260046020526040902054615b609082615459565b6001600160a01b038085166000908152600460205260408082209390935590841681522054615b8f9082615904565b6001600160a01b0380841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b613f4d8282615e09565b613f4d8282615e14565b613d1081615e1f565b30600090815260046020526040902054615c229082615904565b30600090815260046020526040902055600654615c3f9082615904565b60065560408051828152905130916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b613d1081615c08565b600080828410615c9c5750508082036000615ca4565b505081810360015b9250929050565b6000670de0b6b3a7640000615cbf83615cc6565b0292915050565b670de0b6b3a7640000900490565b60008060028306615ced57670de0b6b3a7640000615cef565b835b90506002830492505b821561595157615d0884856154bb565b93506002830615615d2057615d1d81856154bb565b90505b600283049250615cf8565b6000828180615d4287670de0b6b3a7640000615c86565b9092509050670de0b6b3a764000080600060015b888410615dfa576000670de0b6b3a764000082029050600080615d8a8a615d8585670de0b6b3a7640000615459565b615c86565b91509150615d9c8761202b848c6154bb565b9650615da88784615346565b965086615db757505050615dfa565b8715615dc1579315935b8015615dcb579315935b8415615de257615ddb8688615459565b9550615def565b615dec8688615904565b95505b505050600101615d56565b50909998505050505050505050565b613f4d823083615b18565b613f4d308383615b18565b30600090815260046020526040902054811115615e3b57600080fd5b30600090815260046020526040902054615e559082615459565b30600090815260046020526040902055600654615e729082615459565b60065560408051828152905160009130917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d433784c6971756964697479206973206c6f636b65642c20796f752063616e6e6f742072656d6f7665206c697175696469747920756e74696c206166746572206c6f636b2074696d652e556e617070726f76656420636f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e74657261637420776974682074686520737761708c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a2646970667358221220fb9f151e92c1efed1a487a5a396a5ced323f106c4ede3e11e9e5ee5060405d0f64736f6c63430007060033

Deployed Bytecode Sourcemap

17156:28397:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19549:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;21244:191;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21244:191:0;-1:-1:-1;;;;;21244:191:0;;:::i;:::-;;;;;;;;;;;;;;;;;;9461:1125;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9461:1125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19796:28;;;;;;;;;;;;;:::i;14699:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19962:46;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19962:46:0;-1:-1:-1;;;;;19962:46:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;15309:184;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15309:184:0;;;;;;;;:::i;1274:50::-;;;;;;;;;;;;;:::i;20996:236::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20996:236:0;;;;;;;;;;:::i;:::-;;32697:2478;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32697:2478:0;;;;;;;;:::i;19911:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19911:44:0;-1:-1:-1;;;;;19911:44:0;;:::i;19657:22::-;;;;;;;;;;;;;:::i;25326:500::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25326:500:0;;;;;;;;;;:::i;19158:64::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19158:64:0;;;;;;;;;;;;;;35183:3087;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35183:3087:0;;;;;;;;;;;;;:::i;15213:88::-;;;;;;;;;;;;;:::i;1681:54::-;;;;;;;;;;;;;:::i;17538:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17538:112:0;-1:-1:-1;;;;;17538:112:0;;:::i;1165:45::-;;;;;;;;;;;;;:::i;7461:999::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7461:999:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16516:633::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16516:633:0;;;;;;;;;;;;;;;;;:::i;28411:1501::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28411:1501:0;;-1:-1:-1;28411:1501:0;-1:-1:-1;28411:1501:0;:::i;20424:159::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20424:159:0;-1:-1:-1;;;;;20424:159:0;;:::i;22304:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22304:123:0;-1:-1:-1;;;;;22304:123:0;;:::i;23460:137::-;;;;;;;;;;;;;:::i;45073:477::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45073:477:0;;;;;;;;:::i;14885:82::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19301:74;;;;;;;;;;;;;:::i;24966:352::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24966:352:0;;;;;;;;:::i;21893:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21893:120:0;-1:-1:-1;;;;;21893:120:0;;:::i;19382:64::-;;;;;;;;;;;;;:::i;23793:1162::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23793:1162:0;;;;;;;:::i;26573:372::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26573:372:0;;:::i;19453:20::-;;;;;;;;;;;;;:::i;19613:21::-;;;;;;;;;;;;;:::i;25844:353::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25844:353:0;;:::i;15761:397::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15761:397:0;;;;;;;;:::i;44612:449::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;44612:449:0;;;;;;;;:::i;15103:102::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15103:102:0;-1:-1:-1;;;;;15103:102:0;;:::i;27323:1077::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27323:1077:0;;-1:-1:-1;27323:1077:0;-1:-1:-1;27323:1077:0;:::i;42681:408::-;;;;;;;;;;;;;:::i;867:57::-;;;;;;;;;;;;;:::i;1331:54::-;;;;;;;;;;;;;:::i;8468:983::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8468:983:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21618:263::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21618:263:0;;:::i;41869:216::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41869:216:0;;:::i;23605:180::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23605:180:0;-1:-1:-1;;;;;23605:180:0;;:::i;22756:148::-;;;;;;;;;;;;;:::i;1394:51::-;;;;;;;;;;;;;:::i;1109:47::-;;;;;;;;;;;;;:::i;22603:145::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22603:145:0;-1:-1:-1;;;;;22603:145:0;;:::i;19831:24::-;;;;;;;;;;;;;:::i;14790:87::-;;;;;;;;;;;;;:::i;1800:59::-;;;;;;;;;;;;;:::i;1485:68::-;;;;;;;;;;;;;:::i;530:121::-;;;;;;;;;;;;;:::i;26957:358::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26957:358:0;;:::i;22168:122::-;;;;;;;;;;;;;:::i;41421:213::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41421:213:0;;:::i;42390:279::-;;;;;;;;;;;;;:::i;5336:509::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5336:509:0;;;;;;;;;;;;;;;;;;;;;;:::i;19761:28::-;;;;;;;;;;;;;:::i;41646:215::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41646:215:0;;:::i;1458:20::-;;;;;;;;;;;;;:::i;16166:342::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16166:342:0;;;;;;;;:::i;38283:3126::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38283:3126:0;;;;;;;:::i;816:42::-;;;;;;;;;;;;;:::i;20015:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20015:47:0;-1:-1:-1;;;;;20015:47:0;;:::i;1562:46::-;;;;;;;;;;;;;:::i;5855:769::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5855:769:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1615:59::-;;;;;;;;;;;;;:::i;22435:160::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19229:65;;;;;;;;;;;;;:::i;22025:131::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22025:131:0;-1:-1:-1;;;;;22025:131:0;;:::i;1051:51::-;;;;;;;;;;;;;:::i;26209:352::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26209:352:0;;:::i;43101:300::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;43101:300:0;;;;;;;;;;;;;;;:::i;1866:50::-;;;;;;;;;;;;;:::i;23324:128::-;;;;;;;;;;;;;:::i;15501:252::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15501:252:0;;;;;;;;:::i;14975:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14975:120:0;;;;;;;;;;:::i;1744:49::-;;;;;;;;;;;;;:::i;19498:20::-;;;;;;;;;;;;;:::i;22912:197::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22912:197:0;-1:-1:-1;;;;;22912:197:0;;:::i;42097:281::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42097:281:0;;;;;;;:::i;23117:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23117:199:0;-1:-1:-1;;;;;23117:199:0;;:::i;6634:817::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6634:817:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29922:2763::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29922:2763:0;;;;;;;:::i;19549:22::-;;;;:::o;21244:191::-;21308:4;-1:-1:-1;;;;;21332:19:0;;21324:51;;;;;-1:-1:-1;;;21324:51:0;;;;;;;;;;;;-1:-1:-1;;;21324:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21403:24:0;;;;;;:17;:24;;;;;;;;21244:191;;;;:::o;9461:1125::-;9737:17;9756:13;9791:21;9815:33;9820:14;9836:11;9815:4;:33::i;:::-;9791:57;;9859:8;9870:43;9875:28;752:6;9886:16;9875:4;:28::i;:::-;9905:7;9870:4;:43::i;:::-;9859:54;;9924:32;9959:37;9964:14;9980:15;752:6;9991:3;9980:4;:15::i;:::-;9959:4;:37::i;:::-;9924:72;;10018;10031:27;10060:14;10076:13;10018:12;:72::i;:::-;10007:83;;10103:23;10129:50;10134:15;10151:27;10129:4;:50::i;:::-;10103:76;;10190:18;10211:41;10216:18;10236:15;10211:4;:41::i;:::-;10190:62;;10267:14;10284:37;10289:13;10304:16;10284:4;:37::i;:::-;10267:54;;10332:18;10353:27;10358:9;10369:10;10353:4;:27::i;:::-;10332:48;;10391:29;10423:31;10428:10;10440:13;10423:4;:31::i;:::-;10391:63;-1:-1:-1;10484:52:0;10391:63;10515:20;752:6;1099:3;752:6;1092:10;;10515:4;:20::i;10484:52::-;10469:67;;10547:31;;;;;;;;9461:1125;;;;;;;;;;:::o;19796:28::-;;;;:::o;14699:83::-;14769:5;14762:12;;;;;;;;-1:-1:-1;;14762:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14736:13;;14762:12;;14769:5;;14762:12;;14769:5;14762:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14699:83;:::o;19962:46::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;15309:184::-;15395:10;15367:4;15384:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15384:27:0;;;;;;;;;;;:33;;;15433:30;;;;;;;15367:4;;15384:27;;15395:10;;-1:-1:-1;;;;;;;;;;;15433:30:0;;;;;;;-1:-1:-1;15481:4:0;15309:184;;;;;:::o;1274:50::-;1315:9;1274:50;:::o;20996:236::-;21095:11;;-1:-1:-1;;;;;21095:11:0;21081:10;:25;21073:34;;;;;;-1:-1:-1;;;;;21126:19:0;;21118:51;;;;;-1:-1:-1;;;21118:51:0;;;;;;;;;;;;-1:-1:-1;;;21118:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21190:24:0;;;;;;;;:17;:24;;;;;:34;;-1:-1:-1;;21190:34:0;;;;;;;;;;20996:236::o;32697:2478::-;32866:19;32887;21488:22;21499:10;21488;:22::i;:::-;:31;21480:106;;;;-1:-1:-1;;;21480:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;203:1:::1;354:7;;:19;;346:63;;;::::0;;-1:-1:-1;;;346:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;346:63:0;;;;;;;;;;;;;::::1;;203:1;422:7;:18:::0;;;18653:39:::2;::::0;;::::2;::::0;;;18683:8:::2;18653:39:::0;;::::2;::::0;;;18671:10:::2;::::0;-1:-1:-1;;;;;;18662:7:0;::::2;;::::0;422;;18653:39;;;;;422:7;18683:8;;422:7;18653:39;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;18653:39:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;18653:39:0;;-1:-1:-1;;;;18653:39:0::2;18758:6:::3;::::0;::::3;::::0;::::3;;;18757:7;18749:16;;;::::0;::::3;;18776:6;:13:::0;;-1:-1:-1;;18776:13:0::3;;;::::0;;32952:4:::4;::::0;32986:5:::4;::::0;-1:-1:-1;;;;;32952:4:0;;::::4;18776:13:::0;33048:26;;;:8:::4;:26;::::0;;;;;32986:5;;;::::4;33112:27:::0;;;;;;33178:16:::4;::::0;::::4;::::0;32952:4;;32986:5;33048:26;33173:36:::4;::::0;1792:1:::4;752:6;1785:8;;33173:4;:36::i;:::-;33160:9;:49;;33152:78;;;::::0;;-1:-1:-1;;;33152:78:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;33152:78:0;;;;;;;;;;;;;::::4;;33318:16;::::0;;::::4;::::0;33422:17;;::::4;::::0;33243:20:::4;::::0;33266:307:::4;::::0;33374:9;;;33243:20;33266:13:::4;:307::i;:::-;33243:330;;33586:15;33643:420;33704:8;:16;;;752:6;33774:2;33767:9;33823;:17;;;752:6;33894:2;33887:9;33958:3;33943:9;33955:2;33943:14;:18;;;;;;34019:1;33643:14;:420::i;:::-;33612:451:::0;;-1:-1:-1;33612:451:0;-1:-1:-1;34124:30:0;;::::4;;34116:56;;;::::0;;-1:-1:-1;;;34116:56:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;34116:56:0;;;;;;;;;;;;;::::4;;34210:40;34230:3;34227:2;34215:9;:14;:18;34235:14;34210:4;:40::i;:::-;34191:15;:59;;34183:87;;;::::0;;-1:-1:-1;;;34183:87:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;34183:87:0;;;;;;;;;;;;;::::4;;34286:4;;;;;;;;;-1:-1:-1::0;;;;;34286:4:0::4;-1:-1:-1::0;;;;;34281:18:0::4;;34307:9;34281:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;34330:45;34346:8;34356:2;34360:14;34330:15;:45::i;:::-;34453:13;::::0;34419:5:::4;::::0;34412:38:::4;::::0;;-1:-1:-1;;;34412:38:0;;34444:4:::4;34412:38;::::0;::::4;::::0;;;-1:-1:-1;;;;;34419:5:0;;::::4;::::0;34412:23:::4;::::0;:38;;;;;::::4;::::0;;;;;;;;;34419:5;34412:38;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;34412:38:0;34395:5:::4;::::0;-1:-1:-1;;;;;34395:5:0;;::::4;34386:15;::::0;;;:8:::4;34412:38;34386:15:::0;;;;;;;;34412:54;;;::::4;34386:23;::::0;;::::4;:80:::0;;;;34542:13:::4;::::0;34509:4:::4;::::0;34502:37;;-1:-1:-1;;;34502:37:0;;34533:4:::4;34502:37;::::0;::::4;::::0;;;34542:13;;34509:4;::::4;::::0;34502:22:::4;::::0;:37;;;;;;;;;;;34509:4;34502:37;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;34502:37:0;34486:4:::4;::::0;-1:-1:-1;;;;;34486:4:0::4;34477:14;::::0;;;:8:::4;34502:37;34477:14:::0;;;;34502:53;;;::::4;34477:22;::::0;;::::4;:78:::0;34653:16;;::::4;::::0;34772:17;;::::4;::::0;34593:342:::4;::::0;34653:16;34716:9;;34772:17;34716:9;;34593:13:::4;:342::i;:::-;34576:359;;34972:15;34954:14;:33;;34946:61;;;::::0;;-1:-1:-1;;;34946:61:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;34946:61:0;;;;;;;;;;;;;::::4;;-1:-1:-1::0;;;;;35033:84:0;;::::4;::::0;;::::4;35042:10;-1:-1:-1::0;;;;;;;;;;;35088:3:0::4;35085:2;35073:9;:14;:18;35113:3;35110:2;35093:19:::0;::::4;35033:84;::::0;;;;;35093:23;;::::4;35033:84;::::0;::::4;::::0;;;;;;;;;::::4;35128:39;;;;;;18812:6:::3;:14:::0;;-1:-1:-1;;18812:14:0::3;::::0;;:6:::3;18821:5;467:22:::0;32697:2478;;;;-1:-1:-1;32697:2478:0;-1:-1:-1;32697:2478:0:o;19911:44::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19657:22::-;;;;:::o;25326:500::-;18885:6;;25444:14;;18885:6;;;;;18884:7;18876:16;;;;;;-1:-1:-1;;;;;25494:17:0;::::1;;::::0;;;:8:::1;:17;::::0;;;;:23;::::1;;25486:49;;;::::0;;-1:-1:-1;;;25486:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25486:49:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;25554:18:0;::::1;;::::0;;;:8:::1;:18;::::0;;;;:24;::::1;;25546:50;;;::::0;;-1:-1:-1;;;25546:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25546:50:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;25633:26:0;;::::1;25607:23;25633:26:::0;;;:8:::1;:26;::::0;;;;;25697:27;;::::1;::::0;;;;25756:16:::1;::::0;;::::1;::::0;25785:17;;::::1;::::0;25815:8:::1;::::0;25742:82:::1;::::0;25756:16;25774:9;;;;25742:13:::1;:82::i;:::-;25735:89:::0;25326:500;-1:-1:-1;;;;;25326:500:0:o;19158:64::-;;;-1:-1:-1;;;;;19158:64:0;;:::o;35183:3087::-;35371:19;35392;21488:22;21499:10;21488;:22::i;:::-;:31;21480:106;;;;-1:-1:-1;;;21480:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;203:1:::1;354:7;;:19;;346:63;;;::::0;;-1:-1:-1;;;346:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;346:63:0;;;;;;;;;;;;;::::1;;203:1;422:7;:18:::0;;;18653:39:::2;::::0;;::::2;::::0;;;18683:8:::2;18653:39:::0;;::::2;::::0;;;18671:10:::2;::::0;-1:-1:-1;;;;;;18662:7:0;::::2;;::::0;422;;18653:39;;;;;422:7;18683:8;;422:7;18653:39;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;18653:39:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;18653:39:0;;-1:-1:-1;;;;18653:39:0::2;18758:6:::3;::::0;::::3;::::0;::::3;;;18757:7;18749:16;;;::::0;::::3;;18776:6;:13:::0;;-1:-1:-1;;18776:13:0::3;;;::::0;;35457:5:::4;::::0;35492:4:::4;::::0;-1:-1:-1;;;;;35457:5:0;;::::4;18776:13:::0;35543:26;;;:8:::4;:26;::::0;;;;;35492:4;;;::::4;35607:27:::0;;;;;;35677:16:::4;::::0;;::::4;::::0;35695:14;;35457:5;;35492:4;35543:26;35672:38:::4;::::0;35677:16;35672:4:::4;:38::i;:::-;35655:13;:55;;35647:82;;;::::0;;-1:-1:-1;;;35647:82:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;35647:82:0;;;;;;;;;;;;;::::4;;35907:16;::::0;;::::4;::::0;36026:17;;::::4;::::0;35789:15:::4;::::0;35846:420:::4;::::0;35970:9;;;36165:3:::4;36162:2;36146:18:::0;::::4;:22;;36215:8;;35846:14;:420::i;:::-;35815:451:::0;;-1:-1:-1;35815:451:0;-1:-1:-1;36285:30:0;;::::4;;36277:56;;;::::0;;-1:-1:-1;;;36277:56:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;36277:56:0;;;;;;;;;;;;;::::4;;-1:-1:-1::0;;;;;36359:88:0;;::::4;::::0;;::::4;36368:10;-1:-1:-1::0;;;;;;;;;;;36418:3:0::4;36415:2;36399:18:::0;::::4;:22;36443:3;36440:2;36423:19:::0;::::4;36359:88;::::0;;;;;36423:23;;::::4;36359:88;::::0;::::4;::::0;;;;;;;;;::::4;36460:51;36476:7;36485:10;36497:13;36460:15;:51::i;:::-;36522:12;36537:37;36542:14;36558:15;36563:3;;36568:4;36558;:15::i;:::-;36537:4;:37::i;:::-;36522:52;;36585:18;36607:38;36612:14;36628:16;36633:3;;36638:5;36628:4;:16::i;36607:38::-;36585:60;;36656:19;36679:38;36684:14;36700:16;36705:3;;36710:5;36700:4;:16::i;36679:38::-;36656:61;;36728:19;36750:41;36755:4;36761:29;36766:10;36778:11;36761:4;:29::i;:::-;36750:4;:41::i;:::-;36844:4;::::0;36839:25:::4;::::0;;-1:-1:-1;;;36839:25:0;;::::4;::::0;::::4;::::0;;;;;36728:63;;-1:-1:-1;36728:63:0;;-1:-1:-1;;;;;36844:4:0;;::::4;::::0;36839:19:::4;::::0;:25;;;;;36802:12:::4;::::0;36839:25;;;;;;;;36802:12;36844:4;36839:25;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;36876:51;36907:2;36922:3;36912:4;36919:2;36912:9;:13;;;;;;36876:30;:51::i;:::-;36939:38;36956:8;36966:10;36939:16;:38::i;:::-;37028:14;::::0;-1:-1:-1;;;;;37028:14:0::4;37017:26;::::0;;;:10:::4;:26:::0;;;;;;;:40;::::4;36988:69:::0;;37084:13:::4;::::0;;:27;::::4;37068:43:::0;;37197:16:::4;::::0;;::::4;::::0;37300:17;;::::4;::::0;37404:8:::4;::::0;37145:302:::4;::::0;37197:16;37252:9;;;;37145:13:::4;:302::i;:::-;37122:325;;37485:35;37490:13;37505:14;37485:4;:35::i;:::-;37466:15;:54;;37458:82;;;::::0;;-1:-1:-1;;;37458:82:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;37458:82:0;;;;;;;;;;;;;::::4;;37642:13;::::0;37608:5:::4;::::0;37601:38:::4;::::0;;-1:-1:-1;;;37601:38:0;;37633:4:::4;37601:38;::::0;::::4;::::0;;;-1:-1:-1;;;;;37608:5:0;;::::4;::::0;37601:23:::4;::::0;:38;;;;;::::4;::::0;;;;;;;;;37608:5;37601:38;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;37601:38:0;37584:5:::4;::::0;-1:-1:-1;;;;;37584:5:0;;::::4;37575:15;::::0;;;:8:::4;37601:38;37575:15:::0;;;;;;;;37601:54;;;::::4;37575:23;::::0;;::::4;:80:::0;;;;37731:13:::4;::::0;37698:4:::4;::::0;37691:37;;-1:-1:-1;;;37691:37:0;;37722:4:::4;37691:37;::::0;::::4;::::0;;;37731:13;;37698:4;::::4;::::0;37691:22:::4;::::0;:37;;;;;;;;;;;37698:4;37691:37;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;37691:37:0;37675:4:::4;::::0;-1:-1:-1;;;;;37675:4:0::4;37666:14;::::0;;;:8:::4;37691:37;37666:14:::0;;;;37691:53;;::::4;37666:22;::::0;;::::4;:78:::0;37842:16;;::::4;::::0;37961:17;;::::4;::::0;38081:8:::4;::::0;37782:338:::4;::::0;37842:16;37905:9;;;;37782:13:::4;:338::i;:::-;37765:355;;38157:15;38139:14;:33;;38131:61;;;::::0;;-1:-1:-1;;;38131:61:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;38131:61:0;;;;;;;;;;;;;::::4;;38223:39;;;;;;;;;;;18812:6:::3;:14:::0;;-1:-1:-1;;18812:14:0::3;::::0;;:6:::3;18821:5;467:22:::0;35183:3087;;;;-1:-1:-1;35183:3087:0;-1:-1:-1;;35183:3087:0:o;15213:88::-;15281:12;;15213:88;:::o;1681:54::-;1729:6;752;1722:13;;1681:54;:::o;17538:112::-;-1:-1:-1;;;;;17620:14:0;17592:9;17620:14;;;:9;:14;;;;;:22;;;;17538:112::o;1165:45::-;752:6;1165:45;:::o;7461:999::-;7734:18;7754:13;7787:21;7811:32;7816:13;7831:11;7811:4;:32::i;:::-;7787:56;;7855:8;7866:43;7871:28;752:6;7882:16;7871:4;:28::i;7866:43::-;7855:54;;7920:26;7949:36;7954:13;7969:15;752:6;7980:3;7969:4;:15::i;7949:36::-;7920:65;;8009;8022:13;8037:21;8060:13;8009:12;:65::i;:::-;7998:76;;8085:22;8110:43;8115:14;8131:21;8110:4;:43::i;:::-;8085:68;;8164:17;8184:39;8189:17;8208:14;8184:4;:39::i;:::-;8164:59;;8239:14;8256:36;8261:12;8275:16;8256:4;:36::i;:::-;8239:53;;8303:18;8324:27;8329:9;8340:10;8324:4;:27::i;:::-;8303:48;;8378:31;8383:13;8398:10;8378:4;:31::i;:::-;8362:47;;8420:32;;;;;;;7461:999;;;;;;;;;;:::o;16516:633::-;16592:4;16617:10;-1:-1:-1;;;;;16617:17:0;;;;:55;;-1:-1:-1;;;;;;16645:15:0;;;;;;:10;:15;;;;;;;;16661:10;16645:27;;;;;;;;16638:34;;;16617:55;16609:64;;;;;;16723:29;;;-1:-1:-1;;;16723:29:0;;16741:10;16723:29;;;;;;16684:13;;;;;;16723:17;;:29;;;;;;;;;;;;;;16684:13;16723:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16723:29:0;;-1:-1:-1;16792:4:0;16781:15;;;;16773:47;;;;;-1:-1:-1;;;16773:47:0;;;;;;;;;;;;-1:-1:-1;;;16773:47:0;;;;;;;;;;;;;;;16851:20;16857:3;16862;16867;16851:5;:20::i;:::-;16886:10;-1:-1:-1;;;;;16886:17:0;;;;;;:63;;-1:-1:-1;;;;;;16907:15:0;;;;;;:10;:15;;;;;;;;16923:10;16907:27;;;;;;;;-1:-1:-1;;16907:42:0;;16886:63;16882:238;;;-1:-1:-1;;;;;17001:15:0;;;;;;:10;:15;;;;;;;;17017:10;17001:27;;;;;;;;16996:38;;17030:3;16996:4;:38::i;:::-;-1:-1:-1;;;;;16966:15:0;;;;;;;:10;:15;;;;;;;;16982:10;16966:27;;;;;;;;;;:68;;;17054:54;;;;;;;;;;16982:10;;-1:-1:-1;;;;;;;;;;;17054:54:0;;;;;;;;;16882:238;-1:-1:-1;17137:4:0;;16516:633;-1:-1:-1;;;;;16516:633:0:o;28411:1501::-;21488:22;21499:10;21488;:22::i;:::-;:31;21480:106;;;;-1:-1:-1;;;21480:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;203:1:::1;354:7;;:19;;346:63;;;::::0;;-1:-1:-1;;;346:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;346:63:0;;;;;;;;;;;;;::::1;;203:1;422:7;:18:::0;;;18653:39:::2;::::0;;::::2;::::0;;;18683:8:::2;18653:39:::0;;::::2;::::0;;;18671:10:::2;::::0;-1:-1:-1;;;;;;18662:7:0;::::2;;::::0;422;;18653:39;;;;;422:7;18683:8;;422:7;18653:39;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;18653:39:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;18653:39:0;;-1:-1:-1;;;;18653:39:0::2;18758:6:::3;::::0;::::3;::::0;::::3;;;18757:7;18749:16;;;::::0;::::3;;18776:6;:13:::0;;-1:-1:-1;;18776:13:0::3;;;::::0;;28630:10:::4;18776:13:::0;28620:21;;;:9:::4;:21;::::0;;;;28665:13;;18776::::3;28665::::4;:21;;18785:4:::3;28665:21:::4;28662:172;;;28731:15;28711:5;:16;;;:35;;28703:119;;;;-1:-1:-1::0;;;28703:119:0::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28846:14;28863:13;:11;:13::i;:::-;28846:30:::0;-1:-1:-1;28887:12:0::4;28902:28;28907:12:::0;1099:3:::4;752:6;1092:10;::::0;28902:28:::4;28887:43;;28941:20;28964:27;28969:12;28983:7;28964:4;:27::i;:::-;28941:50;;29002:10;29015:32;29020:15;29037:9;29015:4;:32::i;:::-;29002:45:::0;-1:-1:-1;29066:10:0;29058:38:::4;;;::::0;;-1:-1:-1;;;29058:38:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;29058:38:0;;;;;;;;;;;;;::::4;;29109:40;29124:10;29136:12;29109:14;:40::i;:::-;29175:8;::::0;29160:33:::4;::::0;-1:-1:-1;;;;;29175:8:0::4;29185:7:::0;29160:14:::4;:33::i;:::-;29204:31;29219:15;29204:14;:31::i;:::-;29271:6;29266:637;29287:7;:14:::0;29283:18;::::4;29266:637;;;29323:9;29335:7;29343:1;29335:10;;;;;;;;;::::0;;;::::4;::::0;;;;;::::4;::::0;-1:-1:-1;;;;;29335:10:0::4;29371:11:::0;;;:8:::4;:11:::0;;;;;;:19:::4;;::::0;29335:10;;-1:-1:-1;29371:19:0;29427:16:::4;29432:5:::0;29371:19;29427:4:::4;:16::i;:::-;29405:38:::0;-1:-1:-1;29466:19:0;29458:47:::4;;;::::0;;-1:-1:-1;;;29458:47:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;29458:47:0;;;;;;;;;;;;;::::4;;29546:13;;29560:1;29546:16;;;;;;;;;;;;;29528:14;:34;;29520:60;;;::::0;;-1:-1:-1;;;29520:60:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;29520:60:0;;;;;;;;;;;;;::::4;;29600:42;::::0;;;;;29640:1:::4;29600:42;::::0;::::4;::::0;;;-1:-1:-1;;;;;29600:42:0;::::4;::::0;29609:10:::4;::::0;29600:42:::4;::::0;;;;;;;;;::::4;29657:46;29673:1;29676:10;29688:14;29657:15;:46::i;:::-;29785:13;::::0;29751:5:::4;::::0;29744:38:::4;::::0;;-1:-1:-1;;;29744:38:0;;29776:4:::4;29744:38;::::0;::::4;::::0;;;-1:-1:-1;;;;;29751:5:0;;::::4;::::0;29744:23:::4;::::0;:38;;;;;::::4;::::0;;;;;;;;;29751:5;29744:38;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;29744:38:0;29727:5:::4;::::0;-1:-1:-1;;;;;29727:5:0;;::::4;29718:15;::::0;;;:8:::4;29744:38;29718:15:::0;;;;;;;;29744:54;;;::::4;29718:23;::::0;;::::4;:80:::0;;;;29878:13:::4;::::0;29845:4:::4;::::0;29838:37;;-1:-1:-1;;;29838:37:0;;29869:4:::4;29838:37;::::0;::::4;::::0;;;29878:13;;29845:4;::::4;::::0;29838:22:::4;::::0;:37;;;;;;;;;;;29845:4;29838:37;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;29838:37:0;29822:4:::4;::::0;-1:-1:-1;;;;;29822:4:0::4;29813:14;::::0;;;:8:::4;29838:37;29813:14:::0;;;;29838:53;;::::4;29813:22;::::0;;::::4;:78:::0;-1:-1:-1;;;29822:4:0;29303:3:::4;29266:637;;;-1:-1:-1::0;;18812:6:0::3;:14:::0;;-1:-1:-1;;18812:14:0::3;::::0;;-1:-1:-1;;18812:6:0::3;18821:5;467:22:::0;-1:-1:-1;;;;;28411:1501:0:o;20424:159::-;-1:-1:-1;;;;;20538:17:0;20489:13;20538:17;;;:10;:17;;;;;;;;;20557;;;;;;;20538;;20424:159::o;22304:123::-;-1:-1:-1;;;;;22402:11:0;22373:4;22402:11;;;:8;:11;;;;;:17;;;;22304:123::o;23460:137::-;18885:6;;23546:7;;18885:6;;;;;18884:7;18876:16;;;;;;-1:-1:-1;23578:11:0::1;::::0;-1:-1:-1;;;;;23578:11:0::1;23460:137:::0;:::o;45073:477::-;21488:22;21499:10;21488;:22::i;:::-;:31;21480:106;;;;-1:-1:-1;;;21480:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;203:1:::1;354:7;;:19;;346:63;;;::::0;;-1:-1:-1;;;346:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;346:63:0;;;;;;;;;;;;;::::1;;203:1;422:7;:18:::0;;;45207:10:::2;45196:22:::0;;:10:::2;:22;::::0;;;;;:32;-1:-1:-1;45196:32:0::2;45188:61;;;::::0;;-1:-1:-1;;;45188:61:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;45188:61:0;;;;;;;;;;;;;::::2;;45260:11;45287:4;45283:3;;45274:6;:12;:17;;;;;45376:10;45302:12;45365:22:::0;;;:10:::2;:22;::::0;;;;;;;:31;;::::2;45340:56:::0;;-1:-1:-1;;;;;45427:17:0;;::::2;::::0;;;;;;45274;;;::::2;45427:23:::0;;::::2;45407:43:::0;;;45477:5:::2;::::0;45484:4:::2;::::0;45274:17;;-1:-1:-1;45317:12:0;;::::2;::::0;45461:34:::2;::::0;45477:5;;::::2;::::0;45484:4:::2;45317:12:::0;45461:15:::2;:34::i;:::-;45522:13;::::0;;:20;;;::::2;45506:36:::0;;-1:-1:-1;;;;467:22:0;-1:-1:-1;45073:477:0:o;14885:82::-;14950:9;;;;14885:82;:::o;19301:74::-;;;-1:-1:-1;;;;;19301:74:0;;:::o;24966:352::-;18671:10;-1:-1:-1;;;;;18653:39:0;18662:7;;-1:-1:-1;;;;;;18662:7:0;-1:-1:-1;;;;;18653:39:0;;18683:8;;18653:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18653:39:0;;;;;;;;-1:-1:-1;18653:39:0;;-1:-1:-1;;;;18653:39:0;18758:6:::1;::::0;::::1;::::0;::::1;;;18757:7;18749:16;;;::::0;::::1;;18776:6;:13:::0;;-1:-1:-1;;18776:13:0::1;;;::::0;;25106:11:::2;::::0;25092:10:::2;-1:-1:-1::0;;;;;25106:11:0;;::::2;25092:25;25084:34;;;::::0;::::2;;-1:-1:-1::0;;;;;25138:15:0;::::2;;::::0;;;:8:::2;:15;::::0;;;;:21;::::2;;25137:22;25129:31;;;::::0;::::2;;25173:8;25191:5;-1:-1:-1::0;;;;;25184:23:0::2;;25216:4;25184:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;25184:38:0::2;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;25184:38:0;;-1:-1:-1;25241:13:0;;::::2;;25233:22;;;::::0;::::2;;25268:42;25284:5;25291:10;25303:6;25268:15;:42::i;:::-;-1:-1:-1::0;;18812:6:0::1;:14:::0;;-1:-1:-1;;18812:14:0::1;::::0;;-1:-1:-1;24966:352:0:o;21893:120::-;21970:11;;-1:-1:-1;;;;;21970:11:0;21956:10;:25;21948:34;;;;;;21989:8;:16;;-1:-1:-1;;;;;;21989:16:0;-1:-1:-1;;;;;21989:16:0;;;;;;;;;;21893:120::o;19382:64::-;;;-1:-1:-1;;;;;19382:64:0;;:::o;23793:1162::-;23913:10;;-1:-1:-1;;;;;23913:10:0;23899;:24;23891:33;;;;;;23943:4;;;;:13;23935:22;;;;;;23986:5;;24021:4;;24064:172;;;;;;;;23986:5;24064:172;;24120:9;24064:172;;;;24151:7;:14;24064:172;;;;;;;-1:-1:-1;;;;;23986:5:0;;;;24021:4;;;;24064:172;;;24206:3;24203:2;24190:15;;:19;24064:172;;24055:5;;-1:-1:-1;;;;;24055:5:0;24046:15;;;;:8;:15;;;;;;;;;:190;;;;-1:-1:-1;;24046:190:0;;;;;;;;;;;-1:-1:-1;24046:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24274:157;;;;;;;;;;24330:9;24274:157;;;;;;;24361:7;:14;24274:157;;;;;;;;;;24415:3;24412:2;24400:14;;:18;24274:157;;24266:4;;;-1:-1:-1;;;;;24266:4:0;;;24257:14;;;;:8;:14;;;;;;;;:174;;;;;;;-1:-1:-1;;24257:174:0;;;;;;;;;;24266:4;24257:174;;;;;;;;;;;;;;;;;;;;;;;;;;;;24442:4;:11;;;;;;;;;24477:5;;24464:7;:19;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24464:19:0;;;24477:5;;;24464:19;;;;;;24507:4;;24494:18;;;;;;;;;;;;;;;24507:4;;24494:18;;;24523:48;24539:7;24548:10;24560;24523:15;:48::i;:::-;24582;24598:8;24608:10;24620:9;24582:15;:48::i;:::-;24641:23;1435:10;24641:5;:23::i;:::-;24675:44;24690:10;1435;24675:14;:44::i;:::-;-1:-1:-1;;24746:10:0;24731:12;24792:15;;;:9;:15;;;;;;;;24842:11;:17;;;;;;24870:20;;-1:-1:-1;;24870:20:0;24886:4;24870:20;;;;;;24937:8;24919:15;:26;24901:15;;:44;-1:-1:-1;;23793:1162:0:o;26573:372::-;21488:22;21499:10;21488;:22::i;:::-;:31;21480:106;;;;-1:-1:-1;;;21480:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;203:1:::1;354:7;;:19;;346:63;;;::::0;;-1:-1:-1;;;346:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;346:63:0;;;;;;;;;;;;;::::1;;203:1;422:7;:18:::0;;;26671:5:::2;::::0;26706:10:::2;26695:22:::0;;:10:::2;:22;::::0;;;;;;-1:-1:-1;;;;;26671:5:0;;::::2;::::0;26695:29;-1:-1:-1;26695:29:0::2;26687:58;;;::::0;;-1:-1:-1;;;26687:58:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;26687:58:0;;;;;;;;;;;;;::::2;;26782:13;::::0;;:19;;::::2;26766:35:::0;;26848:10:::2;-1:-1:-1::0;26837:22:0;;;:10:::2;:22;::::0;;;;;;:28;;::::2;26812:53:::0;;26886:41:::2;::::0;26902:7;;26798:3;26886:15:::2;:41::i;:::-;-1:-1:-1::0;;159:1:0::1;467:7;:22:::0;26573:372::o;19453:20::-;;;;:::o;19613:21::-;;;;:::o;25844:353::-;21488:22;21499:10;21488;:22::i;:::-;:31;21480:106;;;;-1:-1:-1;;;21480:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;203:1:::1;354:7;;:19;;346:63;;;::::0;;-1:-1:-1;;;346:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;346:63:0;;;;;;;;;;;;;::::1;;203:1;422:7;:18:::0;25942:5:::2;::::0;-1:-1:-1;;;;;25942:5:0::2;25958:41;25942:5:::0;25983:10:::2;25995:3:::0;25958:15:::2;:41::i;:::-;-1:-1:-1::0;26090:13:0::2;::::0;;26060:3:::2;26057:2;26051:8:::0;;;::::2;:12:::0;;;::::2;26090:27:::0;;::::2;26074:43:::0;;26164:10:::2;26029:19;26153:22:::0;;;:10:::2;:22;::::0;;;;;;:36;;::::2;26128:61:::0;;;-1:-1:-1;467:22:0;;25844:353::o;15761:397::-;15872:10;15828:4;15861:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15861:27:0;;;;;;;;;;15903:14;;;15899:160;;;15945:10;15964:1;15934:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15934:27:0;;;;;;;;;:31;15899:160;;;16028:19;16033:8;16043:3;16028:4;:19::i;:::-;16009:10;15998:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15998:27:0;;;;;;;;;:49;15899:160;16083:10;16100:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;16074:54:0;;16100:27;;;;;;;;;;;16074:54;;;;;;;;;16083:10;-1:-1:-1;;;;;;;;;;;16074:54:0;;;;;;;;;;-1:-1:-1;16146:4:0;;15761:397;-1:-1:-1;;;15761:397:0:o;44612:449::-;21488:22;21499:10;21488;:22::i;:::-;:31;21480:106;;;;-1:-1:-1;;;21480:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;203:1:::1;354:7;;:19;;346:63;;;::::0;;-1:-1:-1;;;346:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;346:63:0;;;;;;;;;;;;;::::1;;203:1;422:7;:18:::0;;;44748:10:::2;44737:22:::0;;:10:::2;:22:::0;;;;;;:32;-1:-1:-1;44737:32:0::2;44729:61;;;::::0;;-1:-1:-1;;;44729:61:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;44729:61:0;;;;;;;;;;;;;::::2;;44801:11;44829:4;44824;;44815:6;:13;:18;;;;;44918:10;44844:12;44907:22:::0;;;:10:::2;:22:::0;;;;;;;;:31;;::::2;44882:56:::0;;-1:-1:-1;;;;;44969:17:0;;::::2;::::0;;;;;;;44815:18;;;::::2;44969:23:::0;;::::2;44949:43:::0;;;45037:8:::2;::::0;;;::::2;45026:20:::0;;;;;;44859:12;;;::::2;45026:27;45003:50:::0;;;-1:-1:-1;;467:22:0;;44612:449::o;15103:102::-;-1:-1:-1;;;;;15183:14:0;15159:4;15183:14;;;:8;:14;;;;;;;15103:102::o;27323:1077::-;21488:22;21499:10;21488;:22::i;:::-;:31;21480:106;;;;-1:-1:-1;;;21480:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;203:1:::1;354:7;;:19;;346:63;;;::::0;;-1:-1:-1;;;346:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;346:63:0;;;;;;;;;;;;;::::1;;203:1;422:7;:18:::0;;;18653:39:::2;::::0;;::::2;::::0;;;18683:8:::2;18653:39:::0;;::::2;::::0;;;18671:10:::2;::::0;-1:-1:-1;;;;;;18662:7:0;::::2;;::::0;422;;18653:39;;;;;422:7;18683:8;;422:7;18653:39;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;18653:39:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;18653:39:0;;-1:-1:-1;;;;18653:39:0::2;18758:6:::3;::::0;::::3;::::0;::::3;;;18757:7;18749:16;;;::::0;::::3;;18776:6;:13:::0;;-1:-1:-1;;18776:13:0::3;;;::::0;;;27523::::4;:11;:13::i;:::-;27506:30;;27547:10;27560:30;27565:13;27580:9;27560:4;:30::i;:::-;27547:43:::0;-1:-1:-1;27609:10:0;27601:38:::4;;;::::0;;-1:-1:-1;;;27601:38:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;27601:38:0;;;;;;;;;;;;;::::4;;27657:6;27652:639;27673:7;:14:::0;27669:18;::::4;27652:639;;;27709:9;27721:7;27729:1;27721:10;;;;;;;;;::::0;;;::::4;::::0;;;;;::::4;::::0;-1:-1:-1;;;;;27721:10:0::4;27757:11:::0;;;:8:::4;:11:::0;;;;;;:19:::4;;::::0;27721:10;;-1:-1:-1;27757:19:0;27812:16:::4;27817:5:::0;27757:19;27812:4:::4;:16::i;:::-;27791:37:::0;-1:-1:-1;27851:18:0;27843:46:::4;;;::::0;;-1:-1:-1;;;27843:46:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;27843:46:0;;;;;;;;;;;;;::::4;;27929:12;;27942:1;27929:15;;;;;;;;;;;;;27912:13;:32;;27904:57;;;::::0;;-1:-1:-1;;;27904:57:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;27904:57:0;;;;;;;;;;;;;::::4;;-1:-1:-1::0;;;;;27981:50:0;::::4;27990:10;27981:50;28024:3;28021:2;28005:18:::0;::::4;27981:50;::::0;;28005:22;;;::::4;27981:50:::0;;28029:1:::4;27981:50;::::0;::::4;::::0;;;;;;;;;::::4;28046:45;28062:1;28065:10;28077:13;28046:15;:45::i;:::-;28173:13;::::0;28139:5:::4;::::0;28132:38:::4;::::0;;-1:-1:-1;;;28132:38:0;;28164:4:::4;28132:38;::::0;::::4;::::0;;;-1:-1:-1;;;;;28139:5:0;;::::4;::::0;28132:23:::4;::::0;:38;;;;;::::4;::::0;;;;;;;;;28139:5;28132:38;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;28132:38:0;28115:5:::4;::::0;-1:-1:-1;;;;;28115:5:0;;::::4;28106:15;::::0;;;:8:::4;28132:38;28106:15:::0;;;;;;;;28132:54;;;::::4;28106:23;::::0;;::::4;:80:::0;;;;28266:13:::4;::::0;28233:4:::4;::::0;28226:37;;-1:-1:-1;;;28226:37:0;;28257:4:::4;28226:37;::::0;::::4;::::0;;;28266:13;;28233:4;::::4;::::0;28226:22:::4;::::0;:37;;;;;;;;;;;28233:4;28226:37;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;28226:37:0;28210:4:::4;::::0;-1:-1:-1;;;;;28210:4:0::4;28201:14;::::0;;;:8:::4;28226:37;28201:14:::0;;;;28226:53;;::::4;28201:22;::::0;;::::4;:78:::0;-1:-1:-1;;;28210:4:0;27689:3:::4;27652:639;;;;28301:29;28316:13;28301:14;:29::i;:::-;28341:41;28356:10;28368:13;28341:14;:41::i;:::-;-1:-1:-1::0;;18812:6:0::3;:14:::0;;-1:-1:-1;;18812:14:0::3;::::0;;-1:-1:-1;;18812:6:0::3;18821:5;467:22:::0;-1:-1:-1;27323:1077:0:o;42681:408::-;42805:10;42790:12;42851:15;;;:9;:15;;;;;;;;42901:11;:17;;;;;;42957:15;;;;42938;:34;;42929:119;;;;-1:-1:-1;;;42929:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43059:21:0;;-1:-1:-1;;43059:21:0;;;-1:-1:-1;42681:408:0:o;867:57::-;908:16;867:57;:::o;1331:54::-;1379:6;752;1372:13;;8468:983;8713:19;8750:21;8774:33;8779:14;8795:11;8774:4;:33::i;:::-;8750:57;-1:-1:-1;8820:29:0;8852:40;8857:12;8871:20;752:6;1099:3;752:6;1092:10;;8852:40;8820:72;;8903:18;8924:42;8929:10;8941:24;8924:4;:42::i;:::-;8903:63;;8977:14;8994:31;8999:13;9014:10;8994:4;:31::i;:::-;8977:48;;9040:18;9061:45;9066:9;9077:28;752:6;9088:16;9077:4;:28::i;:::-;9061:4;:45::i;:::-;9040:66;;9117:23;9143:36;9148:13;9163:15;9143:4;:36::i;:::-;9117:62;;9192:32;9227:41;9232:15;9249:18;9227:4;:41::i;:::-;9192:76;;9279:8;9290:43;9295:28;752:6;9306:16;9295:4;:28::i;:::-;9325:7;9290:4;:43::i;:::-;9279:54;;9361:50;9366:27;9395:15;752:6;9406:3;9395:4;:15::i;9361:50::-;9344:67;8468:983;-1:-1:-1;;;;;;;;;;;;;;;8468:983:0:o;21618:263::-;21700:10;;-1:-1:-1;;;;;21700:10:0;21686;:24;21678:63;;;;;-1:-1:-1;;;21678:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21771:1;21761:7;:11;21752:40;;;;;-1:-1:-1;;;21752:40:0;;;;;;;;;;;;-1:-1:-1;;;21752:40:0;;;;;;;;;;;;;;;21823:3;21812:7;:14;;21803:47;;;;;-1:-1:-1;;;21803:47:0;;;;;;;;;;;;-1:-1:-1;;;21803:47:0;;;;;;;;;;;;;;;21861:2;:12;21618:263::o;41869:216::-;41939:10;;-1:-1:-1;;;;;41939:10:0;41925;:24;41917:33;;;;;;41978:3;41970:4;:11;;41962:44;;;;;-1:-1:-1;;;41962:44:0;;;;;;;;;;;;-1:-1:-1;;;41962:44:0;;;;;;;;;;;;;;;42034:1;42027:4;:8;42019:37;;;;;-1:-1:-1;;;42019:37:0;;;;;;;;;;;;-1:-1:-1;;;42019:37:0;;;;;;;;;;;;;;;42067:3;:10;41869:216::o;23605:180::-;18671:10;-1:-1:-1;;;;;18653:39:0;18662:7;;-1:-1:-1;;;;;;18662:7:0;-1:-1:-1;;;;;18653:39:0;;18683:8;;18653:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18653:39:0;;;;;;;;-1:-1:-1;18653:39:0;;-1:-1:-1;;;;18653:39:0;18758:6:::1;::::0;::::1;::::0;::::1;;;18757:7;18749:16;;;::::0;::::1;;18776:6;:13:::0;;-1:-1:-1;;18776:13:0::1;;;::::0;;23733:11:::2;::::0;23719:10:::2;-1:-1:-1::0;;;;;23733:11:0;;::::2;23719:25;23711:34;;;::::0;::::2;;23756:11;:21:::0;;-1:-1:-1;;;;;;23756:21:0::2;-1:-1:-1::0;;;;;23756:21:0;;;::::2;::::0;;;::::2;::::0;;18812:6:::1;:14:::0;;-1:-1:-1;;18812:14:0::1;::::0;;23605:180::o;22756:148::-;18885:6;;22855:4;;18885:6;;;;;18884:7;18876:16;;;;;;-1:-1:-1;22884:12:0::1;::::0;22756:148;:::o;1394:51::-;1435:10;1394:51;:::o;1109:47::-;1155:1;1109:47;:::o;22603:145::-;18885:6;;;;;;;18884:7;18876:16;;;;;;-1:-1:-1;;;;;22718:15:0;::::1;;::::0;;;:8:::1;:15;::::0;;;;:21;::::1;;22710:30;;;::::0;::::1;;22603:145:::0;:::o;19831:24::-;;;;;;:::o;14790:87::-;14862:7;14855:14;;;;;;;;-1:-1:-1;;14855:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14829:13;;14855:14;;14862:7;;14855:14;;14862:7;14855:14;;;;;;;;;;;;;;;;;;;;;;;;1800:59;1841:18;1800:59;:::o;1485:68::-;;;-1:-1:-1;;;;;1485:68:0;;:::o;530:121::-;-1:-1:-1;;;530:121:0;:::o;26957:358::-;21488:22;21499:10;21488;:22::i;:::-;:31;21480:106;;;;-1:-1:-1;;;21480:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;203:1:::1;354:7;;:19;;346:63;;;::::0;;-1:-1:-1;;;346:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;346:63:0;;;;;;;;;;;;;::::1;;203:1;422:7;:18:::0;;;27053:4:::2;::::0;27087:10:::2;27076:22:::0;;:10:::2;:22:::0;;;;;;;-1:-1:-1;;;;;27053:4:0;;::::2;::::0;27076:29;-1:-1:-1;27076:29:0::2;27068:57;;;::::0;;-1:-1:-1;;;27068:57:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;27068:57:0;;;;;;;;;;;;;::::2;;27162:13;::::0;;:19;;::::2;27146:35:::0;;27228:10:::2;-1:-1:-1::0;27217:22:0;;;:10:::2;:22:::0;;;;;;;:28;;::::2;27192:53:::0;;27266:41:::2;::::0;27282:7;;27178:3;27266:15:::2;:41::i;22168:122::-:0;22245:4;;22207:67;;;-1:-1:-1;;;22207:67:0;;-1:-1:-1;;;;;22245:4:0;;;22207:67;;;;22252:21;22207:67;;;;;22222:4;;22207:29;;:67;;;;;;;;;;;;;;-1:-1:-1;22222:4:0;22207:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22168:122:0:o;41421:213::-;41491:11;;-1:-1:-1;;;;;41491:11:0;41477:10;:25;41469:34;;;;;;41530:3;41522:4;:11;;41514:43;;;;;-1:-1:-1;;;41514:43:0;;;;;;;;;;;;-1:-1:-1;;;41514:43:0;;;;;;;;;;;;;;;41583:1;41576:4;:8;41568:37;;;;;-1:-1:-1;;;41568:37:0;;;;;;;;;;;;-1:-1:-1;;;41568:37:0;;;;;;;;;;;;;;;41616:3;:10;41421:213::o;42390:279::-;42456:10;42441:12;42502:15;;;:9;:15;;;;;;;;42552:11;:17;;;;;;42580:20;;-1:-1:-1;;42580:20:0;42596:4;42580:20;;;;;;42647:8;42629:15;:26;42611:15;;:44;42390:279::o;5336:509::-;5548:14;5580:10;5593:35;5598:14;5614:13;5593:4;:35::i;:::-;5580:48;;5639:10;5652:37;5657:15;5674:14;5652:4;:37::i;:::-;5639:50;;5700:10;5713:18;5718:5;5725;5713:4;:18::i;:::-;5700:31;;5742:10;5755:31;752:6;5766:19;752:6;5777:7;5766:4;:19::i;5755:31::-;5742:44;;5818:18;5823:5;5830;5818:4;:18::i;:::-;5806:30;5336:509;-1:-1:-1;;;;;;;;;;5336:509:0:o;19761:28::-;;;;:::o;41646:215::-;41716:10;;-1:-1:-1;;;;;41716:10:0;41702;:24;41694:33;;;;;;41755:3;41747:4;:11;;41739:43;;;;;-1:-1:-1;;;41739:43:0;;;;;;;;;;;;-1:-1:-1;;;41739:43:0;;;;;;;;;;;;;;;41810:1;41803:4;:8;41795:37;;;;;-1:-1:-1;;;41795:37:0;;;;;;;;;;;;-1:-1:-1;;;41795:37:0;;;;;;;;;;;;;;;41843:3;:10;41646:215::o;1458:20::-;;;;:::o;16166:342::-;16225:4;16242:13;16266:12;16281:5;-1:-1:-1;;;;;16281:17:0;;16299:10;16281:29;;;;;;;;;;;;;-1:-1:-1;;;;;16281:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16281:29:0;;-1:-1:-1;16350:4:0;16339:15;;;;16331:99;;;;-1:-1:-1;;;16331:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16451:27;16457:10;16469:3;16474;16451:5;:27::i;:::-;-1:-1:-1;16496:4:0;;16166:342;-1:-1:-1;;;;16166:342:0:o;38283:3126::-;38458:19;38479;21488:22;21499:10;21488;:22::i;:::-;:31;21480:106;;;;-1:-1:-1;;;21480:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;203:1:::1;354:7;;:19;;346:63;;;::::0;;-1:-1:-1;;;346:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;346:63:0;;;;;;;;;;;;;::::1;;203:1;422:7;:18:::0;;;18653:39:::2;::::0;;::::2;::::0;;;18683:8:::2;18653:39:::0;;::::2;::::0;;;18671:10:::2;::::0;-1:-1:-1;;;;;;18662:7:0;::::2;;::::0;422;;18653:39;;;;;422:7;18683:8;;422:7;18653:39;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;18653:39:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;18653:39:0;;-1:-1:-1;;;;18653:39:0::2;18758:6:::3;::::0;::::3;::::0;::::3;;;18757:7;18749:16;;;::::0;::::3;;18776:6;:13:::0;;-1:-1:-1;;18776:13:0::3;;;::::0;;38544:5:::4;::::0;38579:4:::4;::::0;38623:10:::4;18776:13:::0;38612:22;;;:10:::4;:22;::::0;;;;;-1:-1:-1;;;;;38544:5:0;;::::4;::::0;38579:4;;;::::4;::::0;38612:39;-1:-1:-1;38612:39:0::4;38604:68;;;::::0;;-1:-1:-1;;;38604:68:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;38604:68:0;;;;;;;;;;;;;::::4;;-1:-1:-1::0;;;;;38719:26:0;;::::4;38693:23;38719:26:::0;;;:8:::4;:26;::::0;;;;;38783:27;;::::4;::::0;;;;38853:16:::4;::::0;;::::4;::::0;38871:14;;38848:38:::4;::::0;38853:16;38848:4:::4;:38::i;:::-;38831:13;:55;;38823:82;;;::::0;;-1:-1:-1;;;38823:82:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;38823:82:0;;;;;;;;;;;;;::::4;;38918:20;38941:302;38993:8;:16;;;752:6;39055:2;39048:9;39096;:17;;;752:6;39159:2;39152:9;39200:8;;38941:13;:302::i;:::-;38918:325;;39256:15;39313:420;39374:8;:16;;;752:6;39444:2;39437:9;39493;:17;;;752:6;39564:2;39557:9;39632:3;39613:13;39629:2;39613:18;:22;;;;39313:420;39282:451:::0;;-1:-1:-1;39282:451:0;-1:-1:-1;39752:30:0;;::::4;;39744:56;;;::::0;;-1:-1:-1;;;39744:56:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;39744:56:0;;;;;;;;;;;;;::::4;;39838:35;39843:13;39858:14;39838:4;:35::i;:::-;39819:15;:54;;39811:82;;;::::0;;-1:-1:-1;;;39811:82:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;39811:82:0;;;;;;;;;;;;;::::4;;39941:8;-1:-1:-1::0;;;;;39911:70:0::4;39932:7;-1:-1:-1::0;;;;;39911:70:0::4;39920:10;-1:-1:-1::0;;;;;39911:70:0::4;-1:-1:-1::0;;;;;;;;;;;39951:13:0::4;39966:14;39911:70;;;;;;;;;;;;;;;;;;;;;;;;39992:12;40007:37;40012:14;40028:15;40033:3;;40038:4;40028;:15::i;40007:37::-;39992:52;;40055:18;40077:38;40082:14;40098:16;40103:3;;40108:5;40098:4;:16::i;40077:38::-;40055:60;;40126:19;40149:38;40154:14;40170:16;40175:3;;40180:5;40170:4;:16::i;40149:38::-;40126:61;;40198:19;40220:41;40225:4;40231:29;40236:10;40248:11;40231:4;:29::i;40220:41::-;40198:63;;40272:12;40287:30;40292:11;40305;40287:4;:30::i;:::-;40272:45;;40378:13;40353:10;:22;40364:10;-1:-1:-1::0;;;;;40353:22:0::4;-1:-1:-1::0;;;;;40353:22:0::4;;;;;;;;;;;;;:38;40328:10;:22;40339:10;-1:-1:-1::0;;;;;40328:22:0::4;-1:-1:-1::0;;;;;40328:22:0::4;;;;;;;;;;;;:63;;;;40452:11;40427:10;:22;40438:10;-1:-1:-1::0;;;;;40427:22:0::4;-1:-1:-1::0;;;;;40427:22:0::4;;;;;;;;;;;;;:36;40402:10;:22;40413:10;-1:-1:-1::0;;;;;40402:22:0::4;-1:-1:-1::0;;;;;40402:22:0::4;;;;;;;;;;;;:61;;;;40506:4;40490:13;;:20;40474:13;:36;;;;40553:13;40537;;:29;40521:13;:45;;;;40577:38;40594:8;40604:10;40577:16;:38::i;:::-;40666:14;::::0;-1:-1:-1;;;;;40666:14:0;;::::4;40655:26;::::0;;;:10:::4;:26:::0;;;;;;;;;;:40;::::4;40626:69:::0;;40773:13:::4;::::0;40739:5:::4;::::0;40732:38;;-1:-1:-1;;;40732:38:0;;40764:4:::4;40732:38;::::0;::::4;::::0;;;40773:13;;40739:5:::4;::::0;40732:23:::4;::::0;:38;;;;;40655:10;;40732:38;;;;;40739:5;40732:38;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;40732:38:0;40715:5:::4;::::0;-1:-1:-1;;;;;40715:5:0;;::::4;40706:15;::::0;;;:8:::4;40732:38;40706:15:::0;;;;;;;;40732:54;;;::::4;40706:23;::::0;;::::4;:80:::0;;;;40862:13:::4;::::0;40829:4:::4;::::0;40822:37;;-1:-1:-1;;;40822:37:0;;40853:4:::4;40822:37;::::0;::::4;::::0;;;40862:13;;40829:4;::::4;::::0;40822:22:::4;::::0;:37;;;;;;;;;;;40829:4;40822:37;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;40822:37:0;40806:4:::4;::::0;-1:-1:-1;;;;;40806:4:0::4;40797:14;::::0;;;:8:::4;40822:37;40797:14:::0;;;;40822:53;;::::4;40797:22;::::0;;::::4;:78:::0;40991:16;;::::4;::::0;41110:17;;::::4;::::0;41230:8:::4;::::0;40931:338:::4;::::0;40991:16;41054:9;;;;40931:13:::4;:338::i;:::-;40914:355;;41306:15;41288:14;:33;;41280:61;;;::::0;;-1:-1:-1;;;41280:61:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;41280:61:0;;;;;;;;;;;;;::::4;;41362:39;;;;;;;;;;;18812:6:::3;:14:::0;;-1:-1:-1;;18812:14:0::3;::::0;;:6:::3;18821:5;467:22:::0;38283:3126;;;;-1:-1:-1;38283:3126:0;-1:-1:-1;38283:3126:0:o;816:42::-;857:1;816:42;:::o;20015:47::-;;;;;;;;;;;;;;;:::o;1562:46::-;1603:5;1562:46;:::o;5855:769::-;6097:19;6118:15;6151:16;6170:35;6175:13;6190:14;6170:4;:35::i;:::-;6151:54;;6216:15;6234:19;752:6;6245:7;6234:4;:19::i;:::-;6216:37;;6277:31;6282:13;6297:10;6277:4;:31::i;:::-;6264:44;;6319:6;6328:54;6333:14;6349:32;6354:14;6370:10;6349:4;:32::i;6328:54::-;6319:63;;6393:8;6404:20;6409:1;6412:11;6404:4;:20::i;:::-;6393:31;;6435:8;6446:15;752:6;6457:3;6446:4;:15::i;:::-;6435:26;;6489;6494:15;6511:3;6489:4;:26::i;:::-;6472:43;;6539:31;6544:13;6559:10;6539:4;:31::i;:::-;6526:44;;6581:35;;;;;5855:769;;;;;;;;;:::o;1615:59::-;1656:18;1615:59;:::o;22435:160::-;18885:6;;22522:23;;18885:6;;;;;18884:7;18876:16;;;;;;22580:7:::1;22573:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;22573:14:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;22435:160:::0;:::o;19229:65::-;;;-1:-1:-1;;;;;19229:65:0;;:::o;22025:131::-;22107:11;;-1:-1:-1;;;;;22107:11:0;22093:10;:25;22085:34;;;;;;22126:14;:22;;-1:-1:-1;;;;;;22126:22:0;-1:-1:-1;;;;;22126:22:0;;;;;;;;;;22025:131::o;1051:51::-;1099:3;752:6;1092:10;;26209:352;21488:22;21499:10;21488;:22::i;:::-;:31;21480:106;;;;-1:-1:-1;;;21480:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;203:1:::1;354:7;;:19;;346:63;;;::::0;;-1:-1:-1;;;346:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;346:63:0;;;;;;;;;;;;;::::1;;203:1;422:7;:18:::0;26306:4:::2;::::0;-1:-1:-1;;;;;26306:4:0::2;26321:41;26306:4:::0;26346:10:::2;26358:3:::0;26321:15:::2;:41::i;:::-;-1:-1:-1::0;26454:13:0::2;::::0;;26423:3:::2;26420:2;26414:8:::0;;;::::2;:12:::0;;;::::2;26454:27:::0;;::::2;26437:44:::0;;26528:10:::2;26392:19;26517:22:::0;;;:10:::2;:22:::0;;;;;;;:36;;::::2;26492:61:::0;;;-1:-1:-1;467:22:0;;26209:352::o;43101:300::-;43212:11;;-1:-1:-1;;;;;43212:11:0;43198:10;:25;43190:34;;;;;;-1:-1:-1;;;;;43260:15:0;;;;43235:22;43260:15;;;:9;:15;;;;;;;;43310:11;:17;;;;;;43338:21;;-1:-1:-1;;43338:21:0;;;;;;;;;;-1:-1:-1;43370:15:0;:23;43101:300::o;1866:50::-;;;;:::o;23324:128::-;18885:6;;23407:4;;18885:6;;;;;18884:7;18876:16;;;;;;-1:-1:-1;23436:8:0::1;::::0;23324:128;:::o;15501:252::-;15631:10;15568:4;15620:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15620:27:0;;;;;;;;;;15615:38;;15649:3;15615:4;:38::i;:::-;15596:10;15585:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15585:27:0;;;;;;;;;;;;:68;;;15669:54;;;;;;15585:27;;-1:-1:-1;;;;;;;;;;;15669:54:0;;;;;;;;;;-1:-1:-1;15741:4:0;15501:252;;;;:::o;14975:120::-;-1:-1:-1;;;;;15067:15:0;;;15043:4;15067:15;;;:10;:15;;;;;;;;:20;;;;;;;;;;;;;14975:120::o;1744:49::-;1792:1;752:6;1785:8;;19498:20;;;;:::o;22912:197::-;18885:6;;23017:4;;18885:6;;;;;18884:7;18876:16;;;;;;-1:-1:-1;;;;;23049:15:0;::::1;;::::0;;;:8:::1;:15;::::0;;;;:21;::::1;;23041:30;;;::::0;::::1;;-1:-1:-1::0;;23089:12:0::1;::::0;;22912:197::o;42097:281::-;42179:11;;-1:-1:-1;;;;;42179:11:0;42165:10;:25;42157:34;;;;;;42219:3;42211:4;:11;;:26;;;;;42234:3;42226:5;:11;;42211:26;42203:59;;;;;-1:-1:-1;;;42203:59:0;;;;;;;;;;;;-1:-1:-1;;;42203:59:0;;;;;;;;;;;;;;;42290:1;42283:4;:8;:21;;;;;42303:1;42295:5;:9;42283:21;42275:50;;;;;-1:-1:-1;;;42275:50:0;;;;;;;;;;;;-1:-1:-1;;;42275:50:0;;;;;;;;;;;;;;;42337:3;:10;;;;42358:4;:12;42097:281::o;23117:199::-;18885:6;;23213:4;;18885:6;;;;;18884:7;18876:16;;;;;;-1:-1:-1;;;;;23245:15:0;::::1;;::::0;;;:8:::1;:15;::::0;;;;:21;::::1;;23237:30;;;::::0;::::1;;-1:-1:-1::0;;;;;;23285:15:0::1;;::::0;;;:8:::1;:15;::::0;;;;:23:::1;;::::0;;23117:199::o;6634:817::-;6877:18;6897:15;6930:16;6949:35;6954:14;6970:13;6949:4;:35::i;:::-;6930:54;;6995:9;7007:37;7012:15;7029:14;7007:4;:37::i;:::-;6995:49;;7055:6;7064:27;7069:15;7086:4;7064;:27::i;:::-;7055:36;;7102:8;7113:20;7118:1;7121:11;7113:4;:20::i;:::-;7102:31;;7150:15;7155:3;752:6;7150:4;:15::i;:::-;7144:21;;7182:25;7187:14;7203:3;7182:4;:25::i;:::-;7176:31;;7234:19;752:6;7245:7;7234:4;:19::i;:::-;7218:35;;7280:24;7285:3;7290:13;7280:4;:24::i;:::-;7264:40;;7328:15;7333:3;752:6;7328:4;:15::i;:::-;7315:28;;7367:31;7372:13;7387:10;7367:4;:31::i;:::-;7354:44;;7409:34;;;;6634:817;;;;;;;;;:::o;29922:2763::-;30097:19;30118;21488:22;21499:10;21488;:22::i;:::-;:31;21480:106;;;;-1:-1:-1;;;21480:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;203:1:::1;354:7;;:19;;346:63;;;::::0;;-1:-1:-1;;;346:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;346:63:0;;;;;;;;;;;;;::::1;;203:1;422:7;:18:::0;;;18653:39:::2;::::0;;::::2;::::0;;;18683:8:::2;18653:39:::0;;::::2;::::0;;;18671:10:::2;::::0;-1:-1:-1;;;;;;18662:7:0;::::2;;::::0;422;;18653:39;;;;;422:7;18683:8;;422:7;18653:39;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;18653:39:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;18653:39:0;;-1:-1:-1;;;;18653:39:0::2;18758:6:::3;::::0;::::3;::::0;::::3;;;18757:7;18749:16;;;::::0;::::3;;18776:6;:13:::0;;-1:-1:-1;;18776:13:0::3;;;::::0;;30183:4:::4;::::0;30217:5:::4;::::0;30252:10:::4;18776:13:::0;30241:22;;;:10:::4;:22:::0;;;;;;-1:-1:-1;;;;;30183:4:0;;::::4;::::0;30217:5;;;::::4;::::0;30241:39;-1:-1:-1;30241:39:0::4;30233:81;;;::::0;;-1:-1:-1;;;30233:81:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;::::4;::::0;;;;;;;;;;;;;::::4;;-1:-1:-1::0;;;;;30371:26:0;;::::4;30345:23;30371:26:::0;;;:8:::4;:26;::::0;;;;;30435:27;;::::4;::::0;;;;30505:16:::4;::::0;::::4;::::0;30500:36:::4;::::0;1792:1:::4;752:6;1785:8;::::0;30500:36:::4;30483:13;:53;;30475:82;;;::::0;;-1:-1:-1;;;30475:82:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;30475:82:0;;;;;;;;;;;;;::::4;;30643:16;::::0;;::::4;::::0;30747:17;;::::4;::::0;30568:20:::4;::::0;30591:307:::4;::::0;30699:9;;;30568:20;30591:13:::4;:307::i;:::-;30568:330;;30943:15;31000:424;31061:8;:16;;;752:6;31131:2;31124:9;31180;:17;;;752:6;31251:2;31244:9;31319:3;31300:13;31316:2;31300:18;:22;;;;31000:424;30969:455:::0;;-1:-1:-1;30969:455:0;-1:-1:-1;31485:30:0;;::::4;;31477:56;;;::::0;;-1:-1:-1;;;31477:56:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;31477:56:0;;;;;;;;;;;;;::::4;;31571:35;31576:13;31591:14;31571:4;:35::i;:::-;31552:15;:54;;31544:82;;;::::0;;-1:-1:-1;;;31544:82:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;31544:82:0;;;;;;;;;;;;;::::4;;31694:10;31683:22;::::0;;;:10:::4;:22:::0;;;;;;;;;:38;;::::4;31658:63:::0;;31757:10:::4;:22:::0;;;;;;;;:39;::::4;31732:64:::0;;31823:13:::4;::::0;;:29;;::::4;31807:45:::0;;31879:13:::4;::::0;;:30;::::4;31863:46:::0;;;;31953:5:::4;::::0;31946:38;;-1:-1:-1;;;31946:38:0;;31978:4:::4;31946:38;::::0;::::4;::::0;;;31879:30;;-1:-1:-1;;;;;31953:5:0;;::::4;::::0;31946:23:::4;::::0;:38;;;;;;;;;;31953:5;31946:38;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;31946:38:0;31929:5:::4;::::0;-1:-1:-1;;;;;31929:5:0;;::::4;31920:15;::::0;;;:8:::4;31946:38;31920:15:::0;;;;;;;;31946:54;;;::::4;31920:23;::::0;;::::4;:80:::0;;;;32076:13:::4;::::0;32043:4:::4;::::0;32036:37;;-1:-1:-1;;;32036:37:0;;32067:4:::4;32036:37;::::0;::::4;::::0;;;32076:13;;32043:4;::::4;::::0;32036:22:::4;::::0;:37;;;;;;;;;;;32043:4;32036:37;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;32036:37:0;32020:4:::4;::::0;-1:-1:-1;;;;;32020:4:0::4;32011:14;::::0;;;:8:::4;32036:37;32011:14:::0;;;;32036:53;;;::::4;32011:22;::::0;;::::4;:78:::0;32187:16;;::::4;::::0;32306:17;;::::4;::::0;32127:342:::4;::::0;32187:16;32250:9;;32306:17;32250:9;;32127:13:::4;:342::i;:::-;32110:359;;32506:15;32488:14;:33;;32480:61;;;::::0;;-1:-1:-1;;;32480:61:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;32480:61:0;;;;;;;;;;;;;::::4;;32587:8;-1:-1:-1::0;;;;;32557:70:0::4;32578:7;-1:-1:-1::0;;;;;32557:70:0::4;32566:10;-1:-1:-1::0;;;;;32557:70:0::4;-1:-1:-1::0;;;;;;;;;;;32597:13:0::4;32612:14;32557:70;;;;;;;;;;;;;;;;;;;;;;;;32638:39;;;;;;18812:6:::3;:14:::0;;-1:-1:-1;;18812:14:0::3;::::0;;:6:::3;18821:5;467:22:::0;29922:2763;;;;-1:-1:-1;29922:2763:0;-1:-1:-1;29922:2763:0:o;3164:387::-;3235:4;3265:6;3257:31;;;;;-1:-1:-1;;;3257:31:0;;;;;;;;;;;;-1:-1:-1;;;3257:31:0;;;;;;;;;;;;;;;752:6;3309:8;;3336:6;;;:24;;;752:6;3351:1;3346:2;:6;;;;;;:14;3336:24;3328:53;;;;;-1:-1:-1;;;3328:53:0;;;;;;;;;;;;-1:-1:-1;;;3328:53:0;;;;;;;;;;;;;;;3429:1;3425:5;;3419:12;;3450:8;;;;3442:37;;;;;-1:-1:-1;;;3442:37:0;;;;;;;;;;;;-1:-1:-1;;;3442:37:0;;;;;;;;;;;;;;;3507:7;3522:1;3517:2;:6;;;;;;;3164:387;-1:-1:-1;;;;;;3164:387:0:o;2404:202::-;2475:4;2498:6;2506:9;2519:14;2528:1;2531;2519:8;:14::i;:::-;2497:36;;;;2553:4;2552:5;2544:35;;;;;-1:-1:-1;;;2544:35:0;;;;;;;;;;;;-1:-1:-1;;;2544:35:0;;;;;;;;;;;;;;;-1:-1:-1;2597:1:0;2404:202;-1:-1:-1;;;2404:202:0:o;2845:311::-;2916:4;2948:5;;;2972:6;;;:21;;;2992:1;2987;2982:2;:6;;;;;;:11;2972:21;2964:50;;;;;-1:-1:-1;;;2964:50:0;;;;;;;;;;;;-1:-1:-1;;;2964:50:0;;;;;;;;;;;;;;;3041:8;3035:15;;3069:8;;;;3061:37;;;;;-1:-1:-1;;;3061:37:0;;;;;;;;;;;;-1:-1:-1;;;3061:37:0;;;;;;;;;;;;;;;3109:7;752:6;3119:2;:9;;10594:494;10720:13;10776:16;10759:13;:33;;10751:61;;;;;-1:-1:-1;;;10751:61:0;;;;;;;;;;;;-1:-1:-1;;;10751:61:0;;;;;;;;;;;;;;;752:6;10831:13;:21;;10823:53;;;;;-1:-1:-1;;;10823:53:0;;;;;;;;;;;;-1:-1:-1;;;10823:53:0;;;;;;;;;;;;;;;10887:23;10913:37;10918:13;10933:16;10913:4;:37::i;:::-;10887:63;;10972:39;10977:18;10997:13;10972:4;:39::i;:::-;10961:50;;11052:8;11030:18;:30;;11022:58;;;;;-1:-1:-1;;;11022:58:0;;;;;;;;;;;;-1:-1:-1;;;11022:58:0;;;;;;;;;;;;;;3881:552;3957:4;1603:5;3987:4;:21;;3979:55;;;;;-1:-1:-1;;;3979:55:0;;;;;;;;;;;;-1:-1:-1;;;3979:55:0;;;;;;;;;;;;;;;1656:18;4053:21;;;4045:56;;;;;-1:-1:-1;;;4045:56:0;;;;;;;;;;;;-1:-1:-1;;;4045:56:0;;;;;;;;;;;;;;;4114:10;4128:11;4135:3;4128:6;:11::i;:::-;4114:25;;4150:11;4164:16;4169:3;4174:5;4164:4;:16::i;:::-;4150:30;;4193:13;4209:24;4215:4;4221:11;4226:5;4221:4;:11::i;:::-;4209:5;:24::i;:::-;4193:40;-1:-1:-1;4250:11:0;4246:59;;4285:8;-1:-1:-1;4278:15:0;;-1:-1:-1;;4278:15:0;4246:59;4317:18;4338:40;4349:4;4355:6;1722:13;4338:10;:40::i;:::-;4317:61;;4396:29;4401:8;4411:13;4396:4;:29::i;:::-;4389:36;3881:552;-1:-1:-1;;;;;;;3881:552:0:o;20596:388::-;20656:4;20686:28;20706:7;20686:19;:28::i;:::-;20683:51;;;-1:-1:-1;20726:5:0;20719:12;;20683:51;20893:20;;20793:66;20933:15;;;;;:42;;;20964:11;20952:8;:23;;20933:42;20925:51;20596:388;-1:-1:-1;;;;20596:388:0:o;43707:258::-;43868:9;43887:5;-1:-1:-1;;;;;43880:22:0;;43903:2;43907:6;43880:34;;;;;;;;;;;;;-1:-1:-1;;;;;43880:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43880:34:0;;-1:-1:-1;43880:34:0;43925:32;;;;;-1:-1:-1;;;43925:32:0;;;;;;;;;;;;-1:-1:-1;;;43925:32:0;;;;;;;;;;;;;;;43707:258;;;;:::o;43409:290::-;43583:55;;;-1:-1:-1;;;43583:55:0;;-1:-1:-1;;;;;43583:55:0;;;;;;;43624:4;43583:55;;;;;;;;;;;;43571:9;;43583:26;;;;;:55;;;;;;;;;;;;;;43571:9;43583:26;:55;;;;;;;;;;2216:180;2287:4;2318:5;;;2342:6;;;;2334:35;;;;;-1:-1:-1;;;2334:35:0;;;;;;;;;;;;-1:-1:-1;;;2334:35:0;;;;;;;;;;;;;;;2387:1;2216:180;-1:-1:-1;;;2216:180:0:o;12975:195::-;13083:12;;;13045;13083;;;;;;;;;-1:-1:-1;;;;;13062:7:0;;;13076:5;;13062:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13062:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13044:52;;;13115:7;13107:55;;;;-1:-1:-1;;;13107:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12975:195;;;:::o;43977:191::-;44100:8;;44077:40;;;-1:-1:-1;;;44077:40:0;;-1:-1:-1;;;;;44100:8:0;;;44077:40;;;;;;;;;;;;44065:9;;44077:22;;;;;:40;;;;;;;;;;;;;;44065:9;44077:22;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44077:40:0;;-1:-1:-1;44077:40:0;44128:32;;;;;-1:-1:-1;;;44128:32:0;;;;;;;;;;;;-1:-1:-1;;;44128:32:0;;;;;;;;;;;;;;14052:249;-1:-1:-1;;;;;14131:13:0;;;;;;:8;:13;;;;;;:20;-1:-1:-1;14131:20:0;14123:29;;;;;;-1:-1:-1;;;;;14184:13:0;;;;;;:8;:13;;;;;;14179:24;;14199:3;14179:4;:24::i;:::-;-1:-1:-1;;;;;14163:13:0;;;;;;;:8;:13;;;;;;:40;;;;14235:13;;;;;;;14230:24;;14250:3;14230:4;:24::i;:::-;-1:-1:-1;;;;;14214:13:0;;;;;;;:8;:13;;;;;;;;;:40;;;;14270:23;;;;;;;14214:13;;14270:23;;;;;;;;;;;;;14052:249;;;:::o;44176:112::-;44261:19;44267:4;44273:6;44261:5;:19::i;44296:108::-;44379:17;44385:2;44389:6;44379:5;:17::i;44512:92::-;44583:13;44589:6;44583:5;:13::i;13550:218::-;13643:4;13626:23;;;;:8;:23;;;;;;13621:34;;13651:3;13621:4;:34::i;:::-;13612:4;13595:23;;;;:8;:23;;;;;:60;13686:12;;13681:23;;13700:3;13681:4;:23::i;:::-;13666:12;:38;13720:40;;;;;;;;13749:4;;13737:1;;13720:40;;;;;;;;;13550:218;:::o;44412:92::-;44483:13;44489:6;44483:5;:13::i;2614:223::-;2689:4;2695;2726:1;2721;:6;2717:113;;-1:-1:-1;;2752:5:0;;;2759;2744:21;;2717:113;-1:-1:-1;;2806:5:0;;;2813:4;2717:113;2614:223;;;;;:::o;2092:116::-;2157:4;752:6;2186:7;2191:1;2186:4;:7::i;:::-;:14;;2092:116;-1:-1:-1;;2092:116:0:o;1976:108::-;752:6;2068:8;;;1976:108::o;3559:314::-;3631:4;;3666:1;3662;:5;:21;;752:6;3662:21;;;3675:1;3662:21;3653:30;-1:-1:-1;3706:1:0;3701:6;;;;3696:151;3709:6;;3696:151;;3744:10;3749:1;3752;3744:4;:10::i;:::-;3740:14;-1:-1:-1;3779:1:0;3775;:5;:10;3771:65;;3810:10;3815:1;3818;3810:4;:10::i;:::-;3806:14;;3771:65;3722:1;3717:6;;;;3696:151;;4441:831;4539:4;4574:3;4539:4;;4611:20;4620:4;752:6;4611:8;:20::i;:::-;4588:43;;-1:-1:-1;4588:43:0;-1:-1:-1;752:6:0;;4642:9;4747:1;4733:509;4758:9;4750:4;:17;4733:509;;4789:9;752:6;4801:1;:8;4789:20;;4825:6;4833:9;4846:29;4855:1;4858:16;4863:4;752:6;4858:4;:16::i;:::-;4846:8;:29::i;:::-;4824:51;;;;4897:22;4902:4;4908:10;4913:1;4916;4908:4;:10::i;4897:22::-;4890:29;;4941:16;4946:4;4952;4941;:16::i;:::-;4934:23;-1:-1:-1;4976:9:0;4972:20;;4987:5;;;;;4972:20;5013:4;5009:30;;;5030:9;;;5009:30;5058:4;5054:30;;;5075:9;;;5054:30;5103:8;5099:132;;;5138:15;5143:3;5148:4;5138;:15::i;:::-;5132:21;;5099:132;;;5200:15;5205:3;5210:4;5200;:15::i;:::-;5194:21;;5099:132;-1:-1:-1;;;4769:3:0;;4733:509;;;-1:-1:-1;5261:3:0;;4441:831;-1:-1:-1;;;;;;;;;4441:831:0:o;14411:98::-;14470:31;14476:4;14490;14497:3;14470:5;:31::i;14309:94::-;14366:29;14380:4;14387:2;14391:3;14366:5;:29::i;13776:268::-;13846:4;13829:23;;;;:8;:23;;;;;;:30;-1:-1:-1;13829:30:0;13821:39;;;;;;13919:4;13902:23;;;;:8;:23;;;;;;13897:34;;13927:3;13897:4;:34::i;:::-;13888:4;13871:23;;;;:8;:23;;;;;:60;13962:12;;13957:23;;13976:3;13957:4;:23::i;:::-;13942:12;:38;13996:40;;;;;;;;14028:1;;14013:4;;13996:40;;;;;;;;;13776:268;:::o

Swarm Source

ipfs://fb9f151e92c1efed1a487a5a396a5ced323f106c4ede3e11e9e5ee5060405d0f

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  ]
[ 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.