ETH Price: $2,638.40 (-0.09%)

Contract

0xf2bda964ec2D2fcB1610c886eD4831bf58f64948
 

Overview

ETH Balance

0.003087106288151876 ETH

Eth Value

$8.15 (@ $2,638.40/ETH)

Token Holdings

Transaction Hash
Method
Block
From
To
BUY204528382024-08-04 4:36:3557 days ago1722746195IN
0xf2bda964...f58f64948
0.00419999 ETH0.000187581
BUY204526572024-08-04 4:00:2357 days ago1722744023IN
0xf2bda964...f58f64948
0.0032 ETH0.000187591
Pay Token198669802024-05-14 8:12:23138 days ago1715674343IN
0xf2bda964...f58f64948
0 ETH0.000317048.23640356
Pay Token192358752024-02-15 21:00:47227 days ago1708030847IN
0xf2bda964...f58f64948
0 ETH0.0017714231.8642261
BUY174708212023-06-13 11:37:23474 days ago1686656243IN
0xf2bda964...f58f64948
0.08 ETH0.02006212106.92784182
Approve167335922023-03-01 11:52:11578 days ago1677671531IN
0xf2bda964...f58f64948
0 ETH0.0005663623.30443055
Approve166924392023-02-23 16:59:47584 days ago1677171587IN
0xf2bda964...f58f64948
0 ETH0.0019338641.67183703
Transfer166919082023-02-23 15:12:23584 days ago1677165143IN
0xf2bda964...f58f64948
0 ETH0.0052268103.85060927
Transfer166886412023-02-23 4:11:47585 days ago1677125507IN
0xf2bda964...f58f64948
0 ETH0.0007119228.05487922
Approve166886322023-02-23 4:09:59585 days ago1677125399IN
0xf2bda964...f58f64948
0 ETH0.0013610529.32874891
Approve166862252023-02-22 20:03:35585 days ago1677096215IN
0xf2bda964...f58f64948
0 ETH0.0020588344.36485456
Transfer156713752022-10-04 1:02:35727 days ago1664845355IN
0xf2bda964...f58f64948
0 ETH0.000238379.40251637
Transfer156713682022-10-04 1:01:11727 days ago1664845271IN
0xf2bda964...f58f64948
0 ETH0.0002727910.76048066
BUY155961012022-09-23 12:39:11737 days ago1663936751IN
0xf2bda964...f58f64948
0.05542475 ETH0.0069601143.34307602
BUY153867852022-08-21 23:04:35770 days ago1661123075IN
0xf2bda964...f58f64948
0.00449999 ETH0.000052
BUY152909842022-08-06 20:44:36785 days ago1659818676IN
0xf2bda964...f58f64948
0.0000001 ETH0.000382122.60422564
SELL151990452022-07-23 12:57:45799 days ago1658581065IN
0xf2bda964...f58f64948
0 ETH0.000460574
BUY151905452022-07-22 5:26:16801 days ago1658467576IN
0xf2bda964...f58f64948
0.003 ETH0.0060487841.21294192
BUY151589332022-07-17 7:49:40806 days ago1658044180IN
0xf2bda964...f58f64948
0.001 ETH0.000733845
Approve148888282022-06-02 4:03:58851 days ago1654142638IN
0xf2bda964...f58f64948
0 ETH0.0022748549.07048975
BUY148656852022-05-29 9:23:22854 days ago1653816202IN
0xf2bda964...f58f64948
0.00012 ETH0.000799328
SELL148632512022-05-28 23:54:37855 days ago1653782077IN
0xf2bda964...f58f64948
0 ETH0.001098139.53712741
SELL148632002022-05-28 23:44:05855 days ago1653781445IN
0xf2bda964...f58f64948
0 ETH0.001150539.99223606
BUY148606242022-05-28 13:48:46855 days ago1653745726IN
0xf2bda964...f58f64948
0.3 ETH0.002789119
BUY148606202022-05-28 13:48:26855 days ago1653745706IN
0xf2bda964...f58f64948
0.3 ETH0.0030826921
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
204528382024-08-04 4:36:3557 days ago1722746195
0xf2bda964...f58f64948
0.00419999 ETH
204526572024-08-04 4:00:2357 days ago1722744023
0xf2bda964...f58f64948
0.0032 ETH
174708212023-06-13 11:37:23474 days ago1686656243
0xf2bda964...f58f64948
0.08 ETH
155961012022-09-23 12:39:11737 days ago1663936751
0xf2bda964...f58f64948
0.00038588 ETH
155961012022-09-23 12:39:11737 days ago1663936751
0xf2bda964...f58f64948
0.05542475 ETH
152909842022-08-06 20:44:36785 days ago1659818676
0xf2bda964...f58f64948
0.0000001 ETH
151990452022-07-23 12:57:45799 days ago1658581065
0xf2bda964...f58f64948
0.00038588 ETH
151905452022-07-22 5:26:16801 days ago1658467576
0xf2bda964...f58f64948
0.003 ETH
151589332022-07-17 7:49:40806 days ago1658044180
0xf2bda964...f58f64948
0.001 ETH
151200482022-07-11 7:38:30812 days ago1657525110
0xf2bda964...f58f64948
0.003 ETH
151200482022-07-11 7:38:30812 days ago1657525110
0xf2bda964...f58f64948
0.003 ETH
150611422022-07-02 5:19:11821 days ago1656739151
0xf2bda964...f58f64948
0.003 ETH
150611422022-07-02 5:19:11821 days ago1656739151
0xf2bda964...f58f64948
0.003 ETH
148656852022-05-29 9:23:22854 days ago1653816202
0xf2bda964...f58f64948
0.00012 ETH
148632512022-05-28 23:54:37855 days ago1653782077
0xf2bda964...f58f64948
0.00038588 ETH
148632002022-05-28 23:44:05855 days ago1653781445
0xf2bda964...f58f64948
0.00038588 ETH
148606242022-05-28 13:48:46855 days ago1653745726
0xf2bda964...f58f64948
0.3 ETH
148606202022-05-28 13:48:26855 days ago1653745706
0xf2bda964...f58f64948
0.3 ETH
148606202022-05-28 13:48:26855 days ago1653745706
0xf2bda964...f58f64948
0.3 ETH
148605622022-05-28 13:32:49855 days ago1653744769
0xf2bda964...f58f64948
0.3 ETH
148605612022-05-28 13:32:42855 days ago1653744762
0xf2bda964...f58f64948
0.3 ETH
148605382022-05-28 13:28:17855 days ago1653744497
0xf2bda964...f58f64948
0.3 ETH
148605382022-05-28 13:28:17855 days ago1653744497
0xf2bda964...f58f64948
0.3 ETH
148605382022-05-28 13:28:17855 days ago1653744497
0xf2bda964...f58f64948
0.3 ETH
148605382022-05-28 13:28:17855 days ago1653744497
0xf2bda964...f58f64948
0.3 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FEGexPRO

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 5 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-20
*/

pragma solidity 0.8.7;     
// SPDX-License-Identifier: UNLICENSED 

contract FEGmath {

    function btoi(uint256 a)
        internal pure
        returns (uint256)
    {
        return a / 1e18;
    }

    function bfloor(uint256 a)
        internal pure
        returns (uint256)
    {
        return btoi(a) * 1e18;
    }

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

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

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

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

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

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

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

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

    function bpow(uint256 base, uint256 exp)
        internal pure
        returns (uint256)
    {
        require(base >= 1 wei, "ERR_BPOW_BASE_TOO_LOW");
        require(base <= (2 * 1e18) - 1 wei, "ERR_BPOW_BASE_TOO_HIGH");

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

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

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

        uint256 partialResult = bpowApprox(base, remain, 1e18 / 1e10);
        return bmul(wholePow, partialResult);
    }

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


        for (uint256 i = 1; term >= precision; i++) {
            uint256 bigK = i * 1e18;
            (uint256 c, bool cneg) = bsubSign(a, bsub(bigK, 1e18));
            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 FEGmath {
    
        function calcSpotPrice(
        uint256 tokenBalanceIn,
        uint256 tokenWeightIn,
        uint256 tokenBalanceOut,
        uint256 tokenWeightOut,
        uint256 swapFee
    )
        public pure
        returns (uint256 spotPrice)
    {
        uint256 numer = bdiv(tokenBalanceIn, tokenWeightIn);
        uint256 denom = bdiv(tokenBalanceOut, tokenWeightOut);
        uint256 ratio = bdiv(numer, denom);
        uint256 scale = bdiv(10**18, bsub(10**18, swapFee));
        return  (spotPrice = bmul(ratio, scale));
    }


    function calcOutGivenIn(
        uint256 tokenBalanceIn,
        uint256 tokenWeightIn,
        uint256 tokenBalanceOut,
        uint256 tokenWeightOut,
        uint256 tokenAmountIn,
        uint256 swapFee
    )
        public pure
        returns (uint256 tokenAmountOut, uint256 tokenInFee)
    {
        uint256 weightRatio = bdiv(tokenWeightIn, tokenWeightOut);
        uint256 adjustedIn = bsub(10**18, swapFee);
        adjustedIn = bmul(tokenAmountIn, adjustedIn);
        uint256 y = bdiv(tokenBalanceIn, badd(tokenBalanceIn, adjustedIn));
        uint256 foo = bpow(y, weightRatio);
        uint256 bar = bsub(1e18, foo);
        tokenAmountOut = bmul(tokenBalanceOut, bar);
        tokenInFee = bsub(tokenAmountIn, adjustedIn);
        return (tokenAmountOut, tokenInFee);
    }


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

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address whom) external view returns (uint256);
    function allowance(address src, address dst) external view returns (uint256);
    function approve(address dst, uint256 amt) external returns (bool);
    function transfer(address dst, uint256 amt) external returns (bool);
    function transferFrom(
        address src, address dst, uint256 amt
    ) external returns (bool);
}

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

interface swap {
    function depositInternal(address asset, uint256 amt) external;
    function payMain(address payee, uint256 amount) external;
    function payToken(address payee, uint256 amount) external;
    function BUY(uint256 dot, address to, uint256 minAmountOut) external payable;
}

library TransferHelper {
    
    function safeTransferFrom(address token, address from, address to, uint256 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, uint256 value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

library Address {
    
    function isContract(address account) internal view returns (bool) {
         bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
   
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract LPTokenBase is FEGmath {

    mapping(address => uint256)                   internal _balance;
    mapping(address => mapping(address=>uint256)) internal _allowance;
    uint256 public totalSupply = 0;
    event Approval(address indexed src, address indexed dst, uint256 amt);
    event Transfer(address indexed src, address indexed dst, uint256 amt);
    
    function _mint(uint256 amt) internal {
        _balance[address(this)] = badd(_balance[address(this)], amt);
        totalSupply = badd(totalSupply, amt);
        emit Transfer(address(0), address(this), amt);
    }

    function _burn(uint256 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, uint256 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, uint256 amt) internal {
        _move(address(this), to, amt);
    }

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

contract LPToken is LPTokenBase {

    string  public name     = "FEXex PRO";
    string  public symbol   = "LP Token";
    uint8   public decimals = 18;

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

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

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

    function increaseApproval(address dst, uint256 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, uint256 amt) external returns (bool) {
        uint256 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;
    }
}

interface FEgexPair {
    function initialize(address, address, address, address, uint256) external; 
    function deploySwap (address, uint256, uint256) external;
    function userBalanceInternal(address _addr) external returns (uint256, uint256);
}

contract FEGexPRO is LPToken, FMath {
    using Address for address;
    struct Record {
        uint256 index;
        uint256 balance;
    }
    
    struct userLock {
        bool setLock; // true = lockedLiquidity, false = unlockedLiquidity
        uint256 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_SMARTSWAP(
        address indexed caller,
        address indexed tokenIn,
        address indexed tokenOut,
        uint256         AmountIn,
        uint256         AmountOut
);

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

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

    uint256 private spec;
    address private _controller = 0x4c9BC793716e8dC05d1F48D8cA8f84318Ec3043C; 
    address private _setter = 0x86882FA66aC57039b10D78e2D3205592A44664c0;
    address private FEG = 0x389999216860AB8E0175387A0c90E5c52522C945;
    address public _poolOwner = 0x4c9BC793716e8dC05d1F48D8cA8f84318Ec3043C;
    address public Main = 0xf786c34106762Ab4Eeb45a51B42a62470E9D5332;
    address public Token = 0x389999216860AB8E0175387A0c90E5c52522C945;
    address public pairRewardPool = 0x94D4Ac11689C6EbbA91cDC1430fc7dfa9a858753;
    address public FEGstake = 0x0f8bAA9bf4e0Ebaa9111F07F8125DF66166A1D9E;
    address public Bonus;
    uint256 public MAX_BUY_RATIO;
    uint256 public MAX_SELL_RATIO;
    uint256 public PSS = 20; // pairRewardPool Share 0.2% default
    uint256 public RPF = 1000; // Smart Rising Price Floor Setting
    address[] private _tokens;
    uint256 public _totalSupply1 = 0;
    uint256 public _totalSupply2 = 0;
    uint256 public _totalSupply7 = 0;
    uint256 public _totalSupply8 = 0;
    uint256 public totalSentRebates = 0;
    uint256 public lockedLiquidity = 0;
    bool public live = false;
    bool public open = false;
    mapping(address=>Record) private  _records;
    mapping(address=>userLock) private  _userlock;
    mapping(address=>userLock) public  _unlockTime;
    mapping(address=>bool) private whiteListContract;
    mapping(address => uint256) private _balances1;
    mapping(address => uint256) private _balances2;
    uint256 public constant MAX_RATIO  = 50; // Max ratio for all trades based on liquidity amount
    uint256 public tx1;
    uint256 public tx2;
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status = _NOT_ENTERED;
    event rebate(address indexed user, uint256 amount);

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

        _status = _ENTERED;

        _;

        _status = _NOT_ENTERED;
    
    }
    
    receive() external payable {
    }

    function userBalanceInternal(address _addr) public view returns(uint256, uint256) {
        uint256 main  = _balances2[_addr];
        uint256 token = _balances1[_addr];
        return (token, main);
    } 
    
    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 == _setter, "You do not have permission");
        whiteListContract[_addy] = boolean;
    }
    
    function IsWhiteListContract(address _addy) public view returns(bool){
        return whiteListContract[_addy];
    }
    
    modifier noContract() {
        require(isContract(msg.sender) == false, "Unapproved contracts are not allowed to interact with the swap");
        _;
    }
    
    function setMaxBuySellRatio(uint256 sellmax, uint256 buymax) public {
        require(msg.sender == _poolOwner, "You do not have permission");
        uint256 tib = _records[Token].balance;
        uint256 tob = _records[Main].balance;
        require (sellmax >= 1e23 && sellmax <= tib, "min 10 T FEG, max 100% of liquidity"); 
        require (buymax >= 100e18 && buymax <= tob, "min 100 ETH, max 100% of liquidity");
        MAX_SELL_RATIO = sellmax;
        MAX_BUY_RATIO = buymax;
    }
    
    function openit() public{ // Since only sets to true, trading can never be turned off
        require(msg.sender == _poolOwner);
        open = true;
    }
    
    function setBonus(address _bonus) public{ // For tokens that have a 3rd party token reflection
        require(msg.sender == _poolOwner && _bonus != Main  && _bonus != Token, "Not permitted");
        Bonus = _bonus;
    }
    
    function setStakePool(address _stake) public {
        require(msg.sender == _setter && _stake != address(0), "You do not have permission");
        FEGstake = _stake;
    }
    
    function setPairRewardPool(address _addy) public { // Gives ability to move rewards to future staking protocols 
        require(msg.sender == _setter, "You do not have permission");
        pairRewardPool = _addy;
    }

    function getBalance(address token)
        external view
        returns (uint256)
    {
        
        return _records[token].balance;
    }

    function setCont(address manager, address set, address ad)
        external
    {
        require(msg.sender == _controller, "You do not have permission");
        require(manager != address(0) && set != address(0), "Cannot set 0 address");
        _controller = manager;
        _setter = set;
        _poolOwner = ad; // Incase pool owner wallet was compromised and needs new access
    }
    
    function setLockLiquidity() nonReentrant public { //
        address user;
        user = msg.sender;
        bool loc = getUserLock(user);
        require(loc == false, "Liquidity already locked");
        uint256 total = IERC20(address(this)).balanceOf(user);
        userLock storage ulock = _userlock[user];
        userLock storage time = _unlockTime[user];
        ulock.setLock = true;
        time.unlockTime = block.timestamp + 90 days; 
        lockedLiquidity += total;
    }
    
    function deploySwap (uint256 liqmain, uint256 liqtoken, uint256 ol)
        external
        {
        require(live == false, "Can only use once");
        require(msg.sender == _poolOwner, "No permissions");
        address _from = msg.sender;
        spec = ol;
        _pullUnderlying(Main, msg.sender, liqmain);
        _pullUnderlying(Token, msg.sender, liqtoken);
        MAX_SELL_RATIO = 5000000000000e9;
        MAX_BUY_RATIO = 300e18;
        uint256 much = IERC20(Token).balanceOf(address(this));
        uint256 much1 = IERC20(Main).balanceOf(address(this));
        
        _records[Token] = Record({
            index: _tokens.length,
            balance: much
            
        });
        
        _records[Main] = Record({
            index: _tokens.length,
            balance: much1
        });
        
        _tokens.push(Token);
        _tokens.push(Main);
        uint256 a = bdiv(_records[Token].balance, 1e9);
        uint256 b = bdiv(_records[Main].balance, 1e18);
        _mint(badd(a, b));
        lockedLiquidity = badd(lockedLiquidity, badd(a, b));
        _push(_from, badd(a, b)); 
        userLock storage ulock = _userlock[_from];
        userLock storage time = _unlockTime[_from];
        ulock.setLock = true;
        time.unlockTime = block.timestamp + 365 days; 
        live = true;
        PSS = 30;
        tx1 = bmul(100, bdiv(much, liqtoken)); 
        tx2 = bmul(100, bdiv(much1, liqmain)); 
    }
   
    function getSpotPrice(address tokenIn, address tokenOut)
        public view
        returns (uint256 spotPrice)
    {
        
        Record storage inRecord = _records[address(tokenIn)];
        Record storage outRecord = _records[address(tokenOut)];
        return calcSpotPrice(inRecord.balance, bmul(1e18, 25), outRecord.balance, bmul(1e18, 25), 2e15);
        
    }
        
    function depositInternal(address asset, uint256 amt)  external nonReentrant {
        require(asset == Main || asset == Token);
        require(open == true, "Swap not opened");
        
        if(asset == Token){
        uint256 bef = _records[Token].balance;     
        _pullUnderlying(Token, msg.sender, amt);
        uint256 aft = bsub(IERC20(Token).balanceOf(address(this)), _totalSupply1);  
        uint256 finalAmount = bsub(aft, bef);  
        _totalSupply1 = badd(_totalSupply1, finalAmount);
        _balances1[msg.sender] = badd(_balances1[msg.sender], finalAmount);
        }
        else{
        uint256 bef = _records[Main].balance;
        _pullUnderlying(Main, msg.sender, amt);
        uint256 aft = bsub(IERC20(Main).balanceOf(address(this)), badd(_totalSupply2, badd(_totalSupply7, _totalSupply8)));
        uint256 finalAmount = bsub(aft, bef);
        _totalSupply2 = badd(_totalSupply2, finalAmount);
        _balances2[msg.sender] = badd(_balances2[msg.sender], finalAmount);
        }
        payStake();
    }

    function withdrawInternal(address asset, uint256 amt) external nonReentrant {
        require(asset == Main || asset == Token);
        
        if(asset == Token){
        require(_balances1[msg.sender] >= amt, "Not enough Token");
        _totalSupply1 -= amt;
        _balances1[msg.sender] -= amt;
        _pushUnderlying(Token, msg.sender, amt);
        }
        else{
        require(_balances2[msg.sender] >= amt, "Not enough Main");
        _totalSupply2 -= amt;
        _balances2[msg.sender] -= amt;
        _pushUnderlying(Main, msg.sender, amt);
        }
        payStake();
    }

    function swapToSwap(address path, address asset, address to, uint256 amt) external nonReentrant {
        require(asset == Main || asset == Token);
        
        if(asset == Main){
        require(_balances2[msg.sender] >= amt, "Not enough Main");
        IERC20(address(Main)).approve(address(path), amt);   
        _totalSupply2 -= amt;
        _balances2[msg.sender] -= amt;
        swap(path).depositInternal(Main, amt);
        (uint256 tokens, uint256 mains) = FEgexPair(path).userBalanceInternal(address(this));
        swap(path).payMain(to, mains);
        tokens = 0;
        }
    
        else{
        require(_balances1[msg.sender] >= amt, "Not enough Token");
        IERC20(address(Token)).approve(address(path), amt);
        _totalSupply1 -= amt;
        _balances1[msg.sender] -= amt;
        swap(path).depositInternal(Token, amt);
        (uint256 tokens, uint256 mains) = FEgexPair(path).userBalanceInternal(address(this));
        swap(path).payToken(to, tokens);
        mains = 0;
        }
        payStake();
    }
    
    function transfer(address dst, uint256 amt) external returns(bool) {
        bool loc = getUserLock(msg.sender);
        require(loc == false, "Liquidity is locked, you cannot remove liquidity until after lock time.");
        _move(msg.sender, dst, amt);
        return true;
    }

    function transferFrom(address src, address dst, uint256 amt) external returns(bool) {
        require(msg.sender == src || amt <= _allowance[src][msg.sender]);
        bool loc = getUserLock(msg.sender);
        require(loc == false, "Liquidity is locked, you cannot remove liquidity until after lock time.");
        _move(src, dst, amt);
        if (msg.sender != src && _allowance[src][msg.sender] != type(uint256).max) {
            _allowance[src][msg.sender] = bsub(_allowance[src][msg.sender], amt);
            emit Approval(msg.sender, dst, _allowance[src][msg.sender]);
        }
        return true;
    }
    
    function addBothLiquidity(uint256 poolAmountOut, uint[] calldata maxAmountsIn)
    nonReentrant
        external
    {
        sync();
        uint256 poolTotal = totalSupply;
        uint256 ratio = bdiv(poolAmountOut, poolTotal);
        require(ratio != 0, "ERR_MATH_APPROX");
        
        
        bool loc = getUserLock(msg.sender);
        if(loc == true){
        lockedLiquidity += poolAmountOut;    
        }
        
        for (uint256 i = 0; i < _tokens.length; i++) {
            address t = _tokens[i];
            uint256 bal = _records[t].balance;
            
            uint256 tokenAmountIn = bmul(ratio, bal); 
            require(tokenAmountIn != 0, "ERR_MATH_APPROX");
            require(tokenAmountIn <= maxAmountsIn[i], "ERR_LIMIT_IN");
            emit LOG_JOIN(msg.sender, t, tokenAmountIn, 0);
            _pullUnderlying(t, msg.sender, tokenAmountIn);
        }
        payStake();
        sync();
        _mint(poolAmountOut);
        _push(msg.sender, poolAmountOut);
    }
   
    function removeBothLiquidity(uint256 poolAmountIn, uint[] calldata minAmountsOut)
    nonReentrant
        external
    {
        bool loc = getUserLock(msg.sender);
        require(loc == false, "Liquidity is locked, you cannot remove liquidity until after lock time.");
        sync();
        uint256 poolTotal = totalSupply;
        uint256 ratio = bdiv(poolAmountIn, poolTotal);
        require(ratio != 0, "ERR_MATH_APPROX");

        _pull(msg.sender, poolAmountIn);
        _burn(poolAmountIn);
        
        for (uint256 i = 0; i < _tokens.length; i++) {
            address t = _tokens[i];
            uint256 bal = _records[t].balance;
            uint256 tokenAmountOut = bmul(ratio, bal);
            require(tokenAmountOut != 0, "ERR_MATH_APPROX");
            require(tokenAmountOut >= minAmountsOut[i], "Minimum amount out not met");
            emit LOG_EXIT(msg.sender, t, tokenAmountOut, 0);
            _pushUnderlying(t, msg.sender, tokenAmountOut);
        }
        sync();
        
        if(Bonus != address(0)){
        uint256 bal1 = bmul(ratio, IERC20(Bonus).balanceOf(address(this)));
        if(bal1 > 0){
        _pushUnderlying(Bonus, msg.sender, bal1);
        }
        }
    }
    
    function sendRebate() internal {
        uint256 re = address(this).balance / 8;
        TransferHelper.safeTransferETH(msg.sender, re);
        totalSentRebates += re;
        emit rebate(msg.sender, re);
    }
    
    function BUYSmart(
        uint256 tokenAmountIn,
        uint256 minAmountOut
    )  nonReentrant
        external 
        returns(uint256 tokenAmountOut)
    {

        require(_balances2[msg.sender] >= tokenAmountIn, "Not enough Main, deposit more");
        
        uint256 hold = IERC20(FEG).balanceOf(address(msg.sender));
        uint256 io = address(this).balance;
        
        if(io > 0 && tokenAmountIn >= 5e16 && hold >= 2e19){
        sendRebate();
        }
        
        Record storage inRecord = _records[address(Main)];
        Record storage outRecord = _records[address(Token)];

        require(tokenAmountIn <= MAX_BUY_RATIO, "ERR_BUY_IN_RATIO");
        require(tokenAmountOut <= bmul(outRecord.balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO");
        
        uint256 tokenInFee;
        (tokenAmountOut, tokenInFee) = calcOutGivenIn(
                                            inRecord.balance,
                                            bmul(1e18, 25),
                                            outRecord.balance,
                                            bmul(1e18, 25),
                                            bmul(tokenAmountIn, bdiv(999, 1000)),
                                            0
                                        );
                                        
        require(tokenAmountOut >= minAmountOut, "Minimum amount out not met");   
        emit LOG_SMARTSWAP(msg.sender, Main, Token, tokenAmountIn, tokenAmountOut);
        _balances2[msg.sender] -= tokenAmountIn;
        _totalSupply2 -= tokenAmountIn;
        _balances1[msg.sender] += tokenAmountOut;
        _totalSupply1 += tokenAmountOut;
        _totalSupply8 += bmul(tokenAmountIn, bdiv(1, 1000));
        sync();
        
        return(tokenAmountOut);
    }
    
    function BUY(
        uint256 dot,
        address to,
        uint256 minAmountOut
    ) nonReentrant 
        external payable
        returns(uint256 tokenAmountOut)
    {
        
        require(open == true, "Swap not opened");
        wrap(Main).deposit{value: msg.value}();
        if(Address.isContract(msg.sender) == true){ 
        require(dot == spec, "Contracts are not allowed to interact with the Swap");
        }
        
        uint256 hold = IERC20(FEG).balanceOf(address(msg.sender));
        uint256 io = address(this).balance;
        
        if(io > 0 && msg.value >= 5e16 && hold >= 2e19){
        sendRebate();
        }
        
        Record storage inRecord = _records[address(Main)];
        Record storage outRecord = _records[address(Token)];
        
        require(msg.value <= MAX_BUY_RATIO, "ERR_BUY_IN_RATIO");
        require(tokenAmountOut <= bmul(outRecord.balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO");
        
        uint256 tokenInFee;
        (tokenAmountOut, tokenInFee) = calcOutGivenIn(
                                            inRecord.balance,
                                            bmul(1e18, 25),
                                            outRecord.balance,
                                            bmul(1e18, 25),
                                            bmul(msg.value, bdiv(999, 1000)),
                                            0
                                        );
                                        
        require(tokenAmountOut >= minAmountOut, "Minimum amount out not met");
        uint256 oi = bmul(msg.value, bdiv(1, 1000));
        _totalSupply8 += bmul(oi, bdiv(tx2, 100));
        _pushUnderlying(Token, to, tokenAmountOut);
        sync();

        emit LOG_SWAP(msg.sender, Main, Token, msg.value, bmul(tokenAmountOut, bdiv(tx1, 100)));
        return(tokenAmountOut);
    }

    function SELL(
        uint256 dot,
        address to,
        uint256 tokenAmountIn,
        uint256 minAmountOut
    )  nonReentrant 
        external
        returns(uint256 tokenAmountOut)
    {
        
        require(open == true, "Swap not opened");
        if(Address.isContract(msg.sender) == true){ 
        require(dot == spec, "Contracts are not allowed to interact with the Swap");
        }
        
        uint256 hold = IERC20(FEG).balanceOf(address(msg.sender));
        if(address(this).balance > 0 && hold >= 2e19 && tokenAmountOut <= 1e18){
        sendRebate();
        }
        
        uint256 omm = _records[Token].balance;
        _pullUnderlying(Token, msg.sender, tokenAmountIn);
        setTokenBalance();
        uint256 trueamount = bmul((_records[Token].balance - omm), bdiv(998, 1000));
        require(tokenAmountIn <= MAX_SELL_RATIO, "ERR_SELL_RATIO");
        require(tokenAmountOut <= bmul(_records[Main].balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO"); 
        
        uint256 tokenInFee;
        (tokenAmountOut, tokenInFee) = calcOutGivenIn(
                                            omm,
                                            bmul(1e18, 25),
                                            _records[Main].balance,
                                            bmul(1e18, 25),
                                            trueamount,
                                            2e15
                                        );
                                         
        require(tokenAmountOut >= minAmountOut, "Minimum amount out not met");
        uint256 toka = bmul(tokenAmountOut, bdiv(RPF, 1000));
        uint256 tokAmountI  = bmul(toka, bdiv(15, 10000));
        uint256 tok = bmul(toka, bdiv(15, 10000));
        uint256 tokAmountI2 =  bmul(toka, bdiv(PSS, 10000));
        uint256 io = (toka - (tokAmountI + tok + tokAmountI2));
        uint256 tokAmountI1 = bmul(io, bdiv(999, 1000));
        uint256 ox = _balances2[address(this)];
        if(ox > 1e15){
        _totalSupply2 -= ox;
        _balances2[address(this)] = 0;
        }
        
        wrap(Main).withdraw(tokAmountI1 + ox + tokAmountI);
        TransferHelper.safeTransferETH(to, bmul(tokAmountI1, bdiv(99, 100)));
        _totalSupply8 += bmul(io, bdiv(1, 1000));
        _balances2[pairRewardPool] += tokAmountI2;
        _totalSupply2 += tokAmountI2;
        _totalSupply7 += tok;
        addRebate();
        setMainBalance(); 
        emit LOG_SWAP(msg.sender, Token, Main, trueamount, bmul(tokAmountI1, bdiv(tx2, 100)));
        return tokenAmountOut;
    }
    
     function SELLSmart(
        uint256 tokenAmountIn,
        uint256 minAmountOut
    )  nonReentrant
        external
        returns(uint256 tokenAmountOut)
    {
        uint256 hold = IERC20(FEG).balanceOf(address(msg.sender));
        if(address(this).balance > 0 && hold >= 2e19 && tokenAmountOut <= 1e18){
        sendRebate();
        }
        
        uint256 tai = tokenAmountIn;
        require(_balances1[msg.sender] >= tai, "Not enough Token");
        Record storage inRecord = _records[address(Token)];
        Record storage outRecord = _records[address(Main)];
        require(tai <= MAX_SELL_RATIO, "ERR_SELL_RATIO");
        require(tokenAmountOut <= bmul(outRecord.balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO");
        
        uint256 tokenInFee;
        (tokenAmountOut, tokenInFee) = calcOutGivenIn(
                                            inRecord.balance,
                                            bmul(1e18, 25),
                                            outRecord.balance,
                                            bmul(1e18, 25),
                                            bmul(tai, bdiv(998, 1000)),
                                            2e15
                                        );
        
        uint256 toka = bmul(tokenAmountOut, bdiv(RPF, 1000));
        uint256 tokAmountI  = bmul(toka, bdiv(15, 10000));
        uint256 tok = bmul(toka, bdiv(15, 10000));
        uint256 tokAmountI2 =  bmul(toka, bdiv(PSS, 10000));
        uint256 io = (toka - (tokAmountI + tok + tokAmountI2));
        uint256 tokAmountI1 = bmul(io, bdiv(999, 1000));
        emit LOG_SMARTSWAP(msg.sender, Token, Main, tai, tokAmountI1);
        _totalSupply8 += bmul(io, bdiv(1, 1000));
        require(tokAmountI1 >= minAmountOut, "Minimum amount out not met");
        _balances1[msg.sender] -= tai;
        _totalSupply1 -= tai;
        _balances2[msg.sender] += tokAmountI1;
        _balances2[address(this)] += tokAmountI;
        _balances2[pairRewardPool] += tokAmountI2;
        _totalSupply2 += (tokAmountI + tokAmountI2 + tokAmountI1);
        _totalSupply7 += tok;
        sync();
        addRebate();
        return(tokenAmountOut);
    }
    
    function sync() public {  // updates the liquidity to current state
    setTokenBalance();
    setMainBalance();
    }
    
    function setTokenBalance() internal {
        _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1;  
    }
        
    function setMainBalance() internal {
        uint256 al = (_totalSupply2 +_totalSupply7 + _totalSupply8);
        _records[Main].balance = IERC20(Main).balanceOf(address(this)) - al;
    }
        
    function setRPF(uint256 _PSS, uint256 _RPF ) external {
        require(msg.sender == _poolOwner, "You do not have permission");
        require(_PSS <= 50 && _PSS != 0, " Cannot set over 0.5%"); 
        require(_RPF >= 990 && _RPF <= 1000, " Cannot set over 1%"); 
        RPF = _RPF;
        PSS = _PSS;
    }
    
    function releaseLiquidity() nonReentrant external { // Allows removal of liquidity after the lock period is over
        address user = msg.sender;
        bool loc = getUserLock(user);
        require(loc == true, "Liquidity not locked");
        uint256 total = IERC20(address(this)).balanceOf(user);
        lockedLiquidity -= total;
        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 initializeMigrate(address user) external { //Incase we upgrade to v3 in the future, will offer a 48 hour time delay to allow releasing liquidity for migration to new pools.
        require(msg.sender == _controller, "You do not have permission");
        bool loc = getUserLock(user);
        require(loc == true, "Liquidity not locked");
        userLock storage time = _unlockTime[user];
        time.unlockTime = block.timestamp + 2 days; 
    }

    function _pullUnderlying(address erc20, address from, uint256 amount)
        internal
    {   
        bool xfer = IERC20(erc20).transferFrom(from, address(this), amount);
        require(xfer, "ERR_ERC20_FALSE");
    }

    function _pushUnderlying(address erc20, address to, uint256 amount)
        internal
    {   
        bool xfer = IERC20(erc20).transfer(to, amount);
        require(xfer, "ERR_ERC20_FALSE");
    }
    
    function payStake() internal {
        if(_totalSupply7 > 5e15) {
        bool xfer = IERC20(Main).transfer(FEGstake, _totalSupply7);
        require(xfer, "ERR_ERC20_FALSE");
        _totalSupply7 = 0;
        }
    }
    
    function addRebate()
        internal
    {   
        if(_totalSupply8 > 5e15){
        wrap(Main).withdraw(_totalSupply8);
        _totalSupply8 = 0;
        }
    }
    
    function payMain(address payee, uint256 amount)
        external nonReentrant 
        
    {   
        require(_balances2[msg.sender] >= amount, "Not enough token");
        uint256 amt = bmul(amount, bdiv(997, 1000));
        uint256 amt1 = bsub(amount, amt);
        _balances2[msg.sender] -= amount;
        _balances2[payee] += amt;
        _balances2[_controller] += amt1;
    }
    
    function payToken(address payee, uint256 amount)
        external nonReentrant 
        
    {
        require(_balances1[msg.sender] >= amount, "Not enough token");
        uint256 amt = bmul(amount, bdiv(997, 1000));
        uint256 amt1 = bsub(amount, amt);
        _balances1[msg.sender] -= amount;
        _balances1[payee] += amt;
        _balances1[_controller] += amt1;
    }
}

Contract Security Audit

Contract ABI

[{"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":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"},{"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":"AmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"AmountOut","type":"uint256"}],"name":"LOG_SMARTSWAP","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rebate","type":"event"},{"inputs":[{"internalType":"uint256","name":"dot","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BUY","outputs":[{"internalType":"uint256","name":"tokenAmountOut","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"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Bonus","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEGstake","outputs":[{"internalType":"address","name":"","type":"address"}],"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_BUY_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_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":"Main","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PSS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RPF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dot","type":"uint256"},{"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"}],"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"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_poolOwner","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":[],"name":"_totalSupply7","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply8","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":"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":[{"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":"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":"liqmain","type":"uint256"},{"internalType":"uint256","name":"liqtoken","type":"uint256"},{"internalType":"uint256","name":"ol","type":"uint256"}],"name":"deploySwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"depositInternal","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":[{"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":[{"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":"user","type":"address"}],"name":"initializeMigrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"live","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockedLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pairRewardPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"payMain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"payToken","outputs":[],"stateMutability":"nonpayable","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":"_bonus","type":"address"}],"name":"setBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"set","type":"address"},{"internalType":"address","name":"ad","type":"address"}],"name":"setCont","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLockLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellmax","type":"uint256"},{"internalType":"uint256","name":"buymax","type":"uint256"}],"name":"setMaxBuySellRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"}],"name":"setPairRewardPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_PSS","type":"uint256"},{"internalType":"uint256","name":"_RPF","type":"uint256"}],"name":"setRPF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stake","type":"address"}],"name":"setStakePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"path","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"swapToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSentRebates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"tx1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tx2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"userBalanceInternal","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawInternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060025560c0604052600960808190526846455865782050524f60b81b60a09081526200003191600391906200019d565b50604080518082019091526008808252672628102a37b5b2b760c11b602090920191825262000063916004916200019d565b506005805460ff19166012908117909155600780546001600160a01b0319908116734c9bc793716e8dc05d1f48d8ca8f84318ec3043c9081179092556008805482167386882fa66ac57039b10d78e2d3205592a44664c017905560098054821673389999216860ab8e0175387a0c90e5c52522c945908117909155600a80548316909317909255600b8054821673f786c34106762ab4eeb45a51b42a62470e9d5332179055600c80548216909217909155600d805482167394d4ac11689c6ebba91cdc1430fc7dfa9a858753179055600e8054909116730f8baa9bf4e0ebaa9111f07f8125df66166a1d9e179055601490556103e8601355600060158190556016819055601781905560188190556019819055601a55601b805461ffff1916905560016024553480156200019657600080fd5b5062000280565b828054620001ab9062000243565b90600052602060002090601f016020900481019282620001cf57600085556200021a565b82601f10620001ea57805160ff19168380011785556200021a565b828001600101855582156200021a579182015b828111156200021a578251825591602001919060010190620001fd565b50620002289291506200022c565b5090565b5b808211156200022857600081556001016200022d565b600181811c908216806200025857607f821691505b602082108114156200027a57634e487b7160e01b600052602260045260246000fd5b50919050565b6151b080620002906000396000f3fe6080604052600436106102e15760003560e01c80627b44a7146102ed5780630149e5c714610316578063036fe1bb1461035f578063055a03c51461037557806306fdde031461038b57806307d729c4146103ad578063095ea7b3146103fe578063103ff68d1461041e57806310510ec11461044057806312dcff7a1461046057806315e84af91461048057806318160ddd146104a057806319266112146104b65780632140fb40146104d657806323b872dd146104f657806329dfe3b2146105165780632b9abe1a14610536578063313ce5671461058457806331705705146105b0578063390a73e2146105dd5780633a0e9288146105f35780633f7376a914610613578063520bb81b146106335780635c464b6114610653578063630eb8ab1461067357806365d1a40d1461068857806366188463146106a85780636a8ebcd2146106c85780636c5c6814146106dd57806370a08231146106f357806371a1e6dd1461072957806372015efc1461074957806376c309241461075e5780637bc224f91461077e5780638c340f641461079e578063957aa58c146107be57806395d89b41146107d85780639a6204ed146107ed5780639a78458a14610803578063a16faa1814610823578063a221ee4914610838578063a2e70a2e14610858578063a9059cbb1461086e578063add975cc1461088e578063ae1931be146108ae578063b0711483146108ce578063b4398244146108ee578063ba9530a614610904578063bbf1271414610924578063c172715c14610944578063c241267614610957578063c627fbfa14610977578063cdfec52d14610997578063d62b6f7e146109ad578063d73dd623146109cd578063da6d6578146109ed578063dd62ed3e14610a03578063ef8fdfd814610a49578063f1091b6e14610a69578063f8b2cb4f14610a7f578063f8d6aed414610ab8578063fbe8998914610ad8578063fcfff16f14610aee578063fea4393a14610b0d578063fff6cae914610b2d57600080fd5b366102e857005b600080fd5b3480156102f957600080fd5b5061030360135481565b6040519081526020015b60405180910390f35b34801561032257600080fd5b5061034f610331366004614851565b6001600160a01b03166000908152601f602052604090205460ff1690565b604051901515815260200161030d565b34801561036b57600080fd5b5061030360165481565b34801561038157600080fd5b5061030360105481565b34801561039757600080fd5b506103a0610b42565b60405161030d9190614c17565b3480156103b957600080fd5b506103e76103c8366004614851565b601e602052600090815260409020805460019091015460ff9091169082565b60408051921515835260208301919091520161030d565b34801561040a57600080fd5b5061034f6104193660046149a0565b610bd0565b34801561042a57600080fd5b5061043e610439366004614969565b610c2b565b005b34801561044c57600080fd5b5061043e61045b3660046149a0565b610c89565b34801561046c57600080fd5b5061043e61047b366004614851565b610d93565b34801561048c57600080fd5b5061030361049b36600461486c565b610e33565b3480156104ac57600080fd5b5061030360025481565b3480156104c257600080fd5b5061043e6104d13660046149a0565b610ea1565b3480156104e257600080fd5b5061034f6104f1366004614851565b611027565b34801561050257600080fd5b5061034f61051136600461492d565b611045565b34801561052257600080fd5b5061043e610531366004614a60565b61118a565b34801561054257600080fd5b50610576610551366004614851565b6001600160a01b03166000908152602160209081526040808320549180529091205491565b60405161030d929190614fa1565b34801561059057600080fd5b5060055461059e9060ff1681565b60405160ff909116815260200161030d565b3480156105bc57600080fd5b50600d546105d0906001600160a01b031681565b60405161030d9190614bea565b3480156105e957600080fd5b5061030360185481565b3480156105ff57600080fd5b5061043e61060e366004614851565b611412565b34801561061f57600080fd5b5061043e61062e366004614851565b611472565b34801561063f57600080fd5b50600a546105d0906001600160a01b031681565b34801561065f57600080fd5b5061043e61066e366004614b24565b6114fa565b34801561067f57600080fd5b50610303603281565b34801561069457600080fd5b5061043e6106a33660046149a0565b6118c5565b3480156106b457600080fd5b5061034f6106c33660046149a0565b6119be565b3480156106d457600080fd5b5061043e611a94565b3480156106e957600080fd5b5061030360225481565b3480156106ff57600080fd5b5061030361070e366004614851565b6001600160a01b031660009081526020819052604090205490565b34801561073557600080fd5b5061043e610744366004614a60565b611abc565b34801561075557600080fd5b5061043e611caa565b34801561076a57600080fd5b5061043e610779366004614ade565b611deb565b34801561078a57600080fd5b5061043e61079936600461489f565b611ec7565b3480156107aa57600080fd5b5061043e6107b9366004614ade565b611f93565b3480156107ca57600080fd5b50601b5461034f9060ff1681565b3480156107e457600080fd5b506103a06120db565b3480156107f957600080fd5b5061030360195481565b34801561080f57600080fd5b50600e546105d0906001600160a01b031681565b34801561082f57600080fd5b5061043e6120e8565b34801561084457600080fd5b50610303610853366004614b50565b612247565b34801561086457600080fd5b5061030360155481565b34801561087a57600080fd5b5061034f6108893660046149a0565b6122b1565b34801561089a57600080fd5b506103036108a9366004614a25565b6122f2565b3480156108ba57600080fd5b506103036108c9366004614ade565b612800565b3480156108da57600080fd5b5061043e6108e93660046148e2565b612c24565b3480156108fa57600080fd5b50610303601a5481565b34801561091057600080fd5b5061057661091f366004614b8b565b613124565b34801561093057600080fd5b5061043e61093f3660046149a0565b6131b5565b610303610952366004614a00565b613479565b34801561096357600080fd5b50600c546105d0906001600160a01b031681565b34801561098357600080fd5b5061043e610992366004614851565b6137d9565b3480156109a357600080fd5b5061030360115481565b3480156109b957600080fd5b50600b546105d0906001600160a01b031681565b3480156109d957600080fd5b5061034f6109e83660046149a0565b613825565b3480156109f957600080fd5b5061030360175481565b348015610a0f57600080fd5b50610303610a1e36600461486c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a5557600080fd5b50600f546105d0906001600160a01b031681565b348015610a7557600080fd5b5061030360125481565b348015610a8b57600080fd5b50610303610a9a366004614851565b6001600160a01b03166000908152601c602052604090206001015490565b348015610ac457600080fd5b50610576610ad3366004614b8b565b613898565b348015610ae457600080fd5b5061030360235481565b348015610afa57600080fd5b50601b5461034f90610100900460ff1681565b348015610b1957600080fd5b50610303610b28366004614ade565b613942565b348015610b3957600080fd5b5061043e613c69565b60038054610b4f9061503d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7b9061503d565b8015610bc85780601f10610b9d57610100808354040283529160200191610bc8565b820191906000526020600020905b815481529060010190602001808311610bab57829003601f168201915b505050505081565b3360008181526001602090815260408083206001600160a01b0387168085529252808320859055519192909160008051602061515b83398151915290610c199086815260200190565b60405180910390a35060015b92915050565b6008546001600160a01b03163314610c5e5760405162461bcd60e51b8152600401610c5590614c4a565b60405180910390fd5b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b60026024541415610cac5760405162461bcd60e51b8152600401610c5590614f6a565b6002602455336000908152602080526040902054811115610cdf5760405162461bcd60e51b8152600401610c5590614cd1565b6000610cf882610cf36103e56103e8613c7b565b613d57565b90506000610d068383613de1565b336000908152602080526040812080549293508592909190610d29908490614ffa565b90915550506001600160a01b038416600090815260208052604081208054849290610d55908490614faf565b90915550506007546001600160a01b0316600090815260208052604081208054839290610d83908490614faf565b9091555050600160245550505050565b600a546001600160a01b031633148015610dbb5750600b546001600160a01b03828116911614155b8015610dd55750600c546001600160a01b03828116911614155b610e115760405162461bcd60e51b815260206004820152600d60248201526c139bdd081c195c9b5a5d1d1959609a1b6044820152606401610c55565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038083166000908152601c6020526040808220928416825281206001830154919291610e9890610e73670de0b6b3a76400006019613d57565b8360010154610e8b670de0b6b3a76400006019613d57565b66071afd498d0000612247565b95945050505050565b60026024541415610ec45760405162461bcd60e51b8152600401610c5590614f6a565b6002602455600b546001600160a01b0383811691161480610ef25750600c546001600160a01b038381169116145b610efb57600080fd5b600c546001600160a01b0383811691161415610f9557336000908152602080526040902054811115610f3f5760405162461bcd60e51b8152600401610c5590614c7e565b8060156000828254610f519190614ffa565b909155505033600090815260208052604081208054839290610f74908490614ffa565b9091555050600c54610f90906001600160a01b03163383613e3e565b611016565b33600090815260216020526040902054811115610fc45760405162461bcd60e51b8152600401610c5590614dbc565b8060166000828254610fd69190614ffa565b90915550503360009081526021602052604081208054839290610ffa908490614ffa565b9091555050600b54611016906001600160a01b03163383613e3e565b61101e613ee6565b50506001602455565b6001600160a01b03166000908152601d602052604090205460ff1690565b6000336001600160a01b038516148061108157506001600160a01b03841660009081526001602090815260408083203384529091529020548211155b61108a57600080fd5b600061109533611027565b905080156110b55760405162461bcd60e51b8152600401610c5590614d4f565b6110c0858585613fac565b336001600160a01b038616148015906110fe57506001600160a01b038516600090815260016020908152604080832033845290915290205460001914155b1561117f576001600160a01b03851660009081526001602090815260408083203384529091529020546111319084613de1565b6001600160a01b03868116600090815260016020908152604080832033808552908352928190208590555193845291871692909160008051602061515b833981519152910160405180910390a35b506001949350505050565b600260245414156111ad5760405162461bcd60e51b8152600401610c5590614f6a565b600260245560006111bd33611027565b905080156111dd5760405162461bcd60e51b8152600401610c5590614d4f565b6111e5613c69565b60025460006111f48683613c7b565b9050806112135760405162461bcd60e51b8152600401610c5590614ca8565b61121d338761406a565b61122686614079565b60005b60145481101561134357600060148281548110611248576112486150d3565b60009182526020808320909101546001600160a01b0316808352601c90915260408220600101549092509061127d8583613d57565b90508061129c5760405162461bcd60e51b8152600401610c5590614ca8565b8888858181106112ae576112ae6150d3565b905060200201358110156112d45760405162461bcd60e51b8152600401610c5590614de5565b826001600160a01b0316336001600160a01b03167f9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f383600060405161131a929190614fa1565b60405180910390a361132d833383613e3e565b505050808061133b90615078565b915050611229565b5061134c613c69565b600f546001600160a01b03161561140557600f546040516370a0823160e01b81526000916113e49184916001600160a01b0316906370a0823190611394903090600401614bea565b60206040518083038186803b1580156113ac57600080fd5b505afa1580156113c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf391906149e7565b9050801561140357600f54611403906001600160a01b03163383613e3e565b505b5050600160245550505050565b6008546001600160a01b03163314801561143457506001600160a01b03811615155b6114505760405162461bcd60e51b8152600401610c5590614c4a565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b0316331461149c5760405162461bcd60e51b8152600401610c5590614c4a565b60006114a782611027565b90506001811515146114cb5760405162461bcd60e51b8152600401610c5590614e19565b6001600160a01b0382166000908152601e602052604090206114f0426202a300614faf565b6001909101555050565b601b5460ff16156115415760405162461bcd60e51b815260206004820152601160248201527043616e206f6e6c7920757365206f6e636560781b6044820152606401610c55565b600a546001600160a01b0316331461158c5760405162461bcd60e51b815260206004820152600e60248201526d4e6f207065726d697373696f6e7360901b6044820152606401610c55565b6006819055600b5433906115aa906001600160a01b031682866140f9565b600c546115c1906001600160a01b031633856140f9565b69010f0cf064dd59200000601155681043561a8829300000601055600c546040516370a0823160e01b81526000916001600160a01b0316906370a082319061160d903090600401614bea565b60206040518083038186803b15801561162557600080fd5b505afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165d91906149e7565b600b546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611693903090600401614bea565b60206040518083038186803b1580156116ab57600080fd5b505afa1580156116bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e391906149e7565b6040805180820182526014805482526020808301878152600c80546001600160a01b039081166000908152601c80865288822097518855935160019788015587518089018952865481528086018a8152600b80548516845295909652888220905181559451948701949094558154855480880187557fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec90810180549284166001600160a01b03199384161790559354865480890190975595909301805495821695909316949094179091555490911681529182200154919250906117cb90633b9aca00613c7b565b600b546001600160a01b03166000908152601c6020526040812060010154919250906117ff90670de0b6b3a7640000613c7b565b905061181361180e8383614138565b614191565b611828601a546118238484614138565b614138565b601a5561183e856118398484614138565b6141ee565b6001600160a01b0385166000908152601d60209081526040808320601e909252909120815460ff1916600117825561187a426301e13380614faf565b600180830191909155601b805460ff19169091179055601e6012556118a46064610cf3888c613c7b565b6022556118b66064610cf3878d613c7b565b60235550505050505050505050565b600260245414156118e85760405162461bcd60e51b8152600401610c5590614f6a565b60026024553360009081526021602052604090205481111561191c5760405162461bcd60e51b8152600401610c5590614cd1565b600061193082610cf36103e56103e8613c7b565b9050600061193e8383613de1565b33600090815260216020526040812080549293508592909190611962908490614ffa565b90915550506001600160a01b0384166000908152602160205260408120805484929061198f908490614faf565b90915550506007546001600160a01b031660009081526021602052604081208054839290610d83908490614faf565b3360009081526001602090815260408083206001600160a01b038616845290915281205480831115611a13573360009081526001602090815260408083206001600160a01b0388168452909152812055611a42565b611a1d8184613de1565b3360009081526001602090815260408083206001600160a01b03891684529091529020555b3360008181526001602090815260408083206001600160a01b0389168085529083529281902054905190815291929160008051602061515b833981519152910160405180910390a35060019392505050565b600a546001600160a01b03163314611aab57600080fd5b601b805461ff001916610100179055565b60026024541415611adf5760405162461bcd60e51b8152600401610c5590614f6a565b6002602455611aec613c69565b6002546000611afb8583613c7b565b905080611b1a5760405162461bcd60e51b8152600401610c5590614ca8565b6000611b2533611027565b905060018115151415611b4a5785601a6000828254611b449190614faf565b90915550505b60005b601454811015611c8657600060148281548110611b6c57611b6c6150d3565b60009182526020808320909101546001600160a01b0316808352601c909152604082206001015490925090611ba18683613d57565b905080611bc05760405162461bcd60e51b8152600401610c5590614ca8565b888885818110611bd257611bd26150d3565b90506020020135811115611c175760405162461bcd60e51b815260206004820152600c60248201526b22a9292fa624a6a4aa2fa4a760a11b6044820152606401610c55565b826001600160a01b0316336001600160a01b03167f15a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a836000604051611c5d929190614fa1565b60405180910390a3611c708333836140f9565b5050508080611c7e90615078565b915050611b4d565b50611c8f613ee6565b611c97613c69565b611ca086614191565b61140533876141ee565b60026024541415611ccd5760405162461bcd60e51b8152600401610c5590614f6a565b6002602455336000611cde82611027565b9050600181151514611d025760405162461bcd60e51b8152600401610c5590614e19565b6040516370a0823160e01b815260009030906370a0823190611d28908690600401614bea565b60206040518083038186803b158015611d4057600080fd5b505afa158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7891906149e7565b905080601a6000828254611d8c9190614ffa565b90915550506001600160a01b0383166000908152601d60209081526040808320601e9092529091206001810154421015611dd85760405162461bcd60e51b8152600401610c5590614d4f565b50805460ff191690555050600160245550565b600a546001600160a01b03163314611e155760405162461bcd60e51b8152600401610c5590614c4a565b60328211158015611e2557508115155b611e695760405162461bcd60e51b81526020600482015260156024820152742043616e6e6f7420736574206f76657220302e352560581b6044820152606401610c55565b6103de8110158015611e7d57506103e88111155b611ebf5760405162461bcd60e51b81526020600482015260136024820152722043616e6e6f7420736574206f76657220312560681b6044820152606401610c55565b601355601255565b6007546001600160a01b03163314611ef15760405162461bcd60e51b8152600401610c5590614c4a565b6001600160a01b03831615801590611f1157506001600160a01b03821615155b611f545760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207365742030206164647265737360601b6044820152606401610c55565b600780546001600160a01b039485166001600160a01b0319918216179091556008805493851693821693909317909255600a8054919093169116179055565b600a546001600160a01b03163314611fbd5760405162461bcd60e51b8152600401610c5590614c4a565b600c546001600160a01b039081166000908152601c6020526040808220600190810154600b5490941683529120015469152d02c7e14af680000084108015906120065750818411155b61205e5760405162461bcd60e51b815260206004820152602360248201527f6d696e2031302054204645472c206d61782031303025206f66206c697175696460448201526269747960e81b6064820152608401610c55565b68056bc75e2d6310000083101580156120775750808311155b6120ce5760405162461bcd60e51b815260206004820152602260248201527f6d696e20313030204554482c206d61782031303025206f66206c697175696469604482015261747960f01b6064820152608401610c55565b5050601191909155601055565b60048054610b4f9061503d565b6002602454141561210b5760405162461bcd60e51b8152600401610c5590614f6a565b600260245533600061211c82611027565b905080156121675760405162461bcd60e51b8152602060048201526018602482015277131a5c5d5a591a5d1e48185b1c9958591e481b1bd8dad95960421b6044820152606401610c55565b6040516370a0823160e01b815260009030906370a082319061218d908690600401614bea565b60206040518083038186803b1580156121a557600080fd5b505afa1580156121b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121dd91906149e7565b6001600160a01b0384166000908152601d60209081526040808320601e909252909120815460ff191660011782559192509061221c426276a700614faf565b816001018190555082601a60008282546122369190614faf565b909155505060016024555050505050565b6000806122548787613c7b565b905060006122628686613c7b565b905060006122708383613c7b565b90506000612297670de0b6b3a7640000612292670de0b6b3a764000089613de1565b613c7b565b90506122a38282613d57565b9a9950505050505050505050565b6000806122bd33611027565b905080156122dd5760405162461bcd60e51b8152600401610c5590614d4f565b6122e8338585613fac565b5060019392505050565b6000600260245414156123175760405162461bcd60e51b8152600401610c5590614f6a565b6002602455601b5460ff6101009091041615156001146123495760405162461bcd60e51b8152600401610c5590614e47565b612352336141f9565b15156001141561237d57600654851461237d5760405162461bcd60e51b8152600401610c5590614eee565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a08231906123ae903390600401614bea565b60206040518083038186803b1580156123c657600080fd5b505afa1580156123da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fe91906149e7565b905060004711801561241957506801158e460913d000008110155b801561242d5750670de0b6b3a76400008211155b1561243a5761243a614235565b600c546001600160a01b03166000818152601c6020526040902060010154906124649033876140f9565b61246c61429d565b600c546001600160a01b03166000908152601c60205260408120600101546124a790612499908490614ffa565b610cf36103e66103e8613c7b565b90506011548611156124cb5760405162461bcd60e51b8152600401610c5590614e9a565b600b546001600160a01b03166000908152601c60205260409020600101546124f990610cf360326064613c7b565b8411156125185760405162461bcd60e51b8152600401610c5590614ec2565b600061257083612531670de0b6b3a76400006019613d57565b600b546001600160a01b03166000908152601c6020526040902060010154612562670de0b6b3a76400006019613d57565b8666071afd498d0000613124565b9095509050858510156125955760405162461bcd60e51b8152600401610c5590614de5565b60006125a986610cf36013546103e8613c7b565b905060006125be82610cf3600f612710613c7b565b905060006125d383610cf3600f612710613c7b565b905060006125e984610cf3601254612710613c7b565b90506000816125f88486614faf565b6126029190614faf565b61260c9086614ffa565b9050600061262282610cf36103e76103e8613c7b565b3060009081526021602052604090205490915066038d7ea4c6800081111561266c5780601660008282546126569190614ffa565b9091555050306000908152602160205260408120555b600b546001600160a01b0316632e1a7d4d876126888486614faf565b6126929190614faf565b6040518263ffffffff1660e01b81526004016126b091815260200190565b600060405180830381600087803b1580156126ca57600080fd5b505af11580156126de573d6000803e3d6000fd5b505050506126fb8f6126f684610cf360636064613c7b565b61434a565b61270c83610cf360016103e8613c7b565b6018600082825461271d9190614faf565b9091555050600d546001600160a01b03166000908152602160205260408120805486929061274c908490614faf565b9250508190555083601660008282546127659190614faf565b92505081905550846017600082825461277e9190614faf565b9091555061278c9050614418565b612794614497565b600b54600c546023546001600160a01b039283169290911690339060008051602061511b833981519152908d906127d2908890610cf3906064613c7b565b6040516127e0929190614fa1565b60405180910390a450505050505050505050506001602455949350505050565b6000600260245414156128255760405162461bcd60e51b8152600401610c5590614f6a565b60026024556009546040516370a0823160e01b81526000916001600160a01b0316906370a082319061285b903390600401614bea565b60206040518083038186803b15801561287357600080fd5b505afa158015612887573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ab91906149e7565b90506000471180156128c657506801158e460913d000008110155b80156128da5750670de0b6b3a76400008211155b156128e7576128e7614235565b33600090815260208052604090205484908111156129175760405162461bcd60e51b8152600401610c5590614c7e565b600c546001600160a01b039081166000908152601c6020526040808220600b54909316825290206011548311156129605760405162461bcd60e51b8152600401610c5590614e9a565b6129748160010154610cf360326064613c7b565b8511156129935760405162461bcd60e51b8152600401610c5590614ec2565b60006129e783600101546129b0670de0b6b3a76400006019613d57565b84600101546129c8670de0b6b3a76400006019613d57565b6129da89610cf36103e66103e8613c7b565b66071afd498d0000613124565b80925081975050506000612a0387610cf36013546103e8613c7b565b90506000612a1882610cf3600f612710613c7b565b90506000612a2d83610cf3600f612710613c7b565b90506000612a4384610cf3601254612710613c7b565b9050600081612a528486614faf565b612a5c9190614faf565b612a669086614ffa565b90506000612a7c82610cf36103e76103e8613c7b565b600b54600c546040519293506001600160a01b039182169291169033906000805160206150fb83398151915290612ab6908f908790614fa1565b60405180910390a4612acf82610cf360016103e8613c7b565b60186000828254612ae09190614faf565b90915550508c811015612b055760405162461bcd60e51b8152600401610c5590614de5565b336000908152602080526040812080548c9290612b23908490614ffa565b925050819055508960156000828254612b3c9190614ffa565b90915550503360009081526021602052604081208054839290612b60908490614faf565b90915550503060009081526021602052604081208054879290612b84908490614faf565b9091555050600d546001600160a01b031660009081526021602052604081208054859290612bb3908490614faf565b90915550819050612bc48487614faf565b612bce9190614faf565b60166000828254612bdf9190614faf565b925050819055508360176000828254612bf89190614faf565b90915550612c069050613c69565b612c0e614418565b5050505050505050505050600160245592915050565b60026024541415612c475760405162461bcd60e51b8152600401610c5590614f6a565b6002602455600b546001600160a01b0384811691161480612c755750600c546001600160a01b038481169116145b612c7e57600080fd5b600b546001600160a01b0384811691161415612ed65733600090815260216020526040902054811115612cc35760405162461bcd60e51b8152600401610c5590614dbc565b600b5460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390612cf59087908590600401614bfe565b602060405180830381600087803b158015612d0f57600080fd5b505af1158015612d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4791906149ca565b508060166000828254612d5a9190614ffa565b90915550503360009081526021602052604081208054839290612d7e908490614ffa565b9091555050600b54604051632efc49c560e21b81526001600160a01b038681169263bbf1271492612db792909116908590600401614bfe565b600060405180830381600087803b158015612dd157600080fd5b505af1158015612de5573d6000803e3d6000fd5b50505050600080856001600160a01b0316632b9abe1a306040518263ffffffff1660e01b8152600401612e189190614bea565b6040805180830381600087803b158015612e3157600080fd5b505af1158015612e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e699190614b00565b6040516365d1a40d60e01b815291935091506001600160a01b038716906365d1a40d90612e9c9087908590600401614bfe565b600060405180830381600087803b158015612eb657600080fd5b505af1158015612eca573d6000803e3d6000fd5b50613111945050505050565b336000908152602080526040902054811115612f045760405162461bcd60e51b8152600401610c5590614c7e565b600c5460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390612f369087908590600401614bfe565b602060405180830381600087803b158015612f5057600080fd5b505af1158015612f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8891906149ca565b508060156000828254612f9b9190614ffa565b909155505033600090815260208052604081208054839290612fbe908490614ffa565b9091555050600c54604051632efc49c560e21b81526001600160a01b038681169263bbf1271492612ff792909116908590600401614bfe565b600060405180830381600087803b15801561301157600080fd5b505af1158015613025573d6000803e3d6000fd5b50505050600080856001600160a01b0316632b9abe1a306040518263ffffffff1660e01b81526004016130589190614bea565b6040805180830381600087803b15801561307157600080fd5b505af1158015613085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a99190614b00565b6040516310510ec160e01b815291935091506001600160a01b038716906310510ec1906130dc9087908690600401614bfe565b600060405180830381600087803b1580156130f657600080fd5b505af115801561310a573d6000803e3d6000fd5b5050505050505b613119613ee6565b505060016024555050565b60008060006131338887613c7b565b90506000613149670de0b6b3a764000086613de1565b90506131558682613d57565b905060006131678b6122928d85614138565b905060006131758285614566565b9050600061318b670de0b6b3a764000083613de1565b90506131978b82613d57565b96506131a38985613de1565b95505050505050965096945050505050565b600260245414156131d85760405162461bcd60e51b8152600401610c5590614f6a565b6002602455600b546001600160a01b03838116911614806132065750600c546001600160a01b038381169116145b61320f57600080fd5b601b5460ff61010090910416151560011461323c5760405162461bcd60e51b8152600401610c5590614e47565b600c546001600160a01b038381169116141561335b57600c546001600160a01b03166000818152601c60205260409020600101549061327c9033846140f9565b600c546040516370a0823160e01b815260009161330b916001600160a01b03909116906370a08231906132b3903090600401614bea565b60206040518083038186803b1580156132cb57600080fd5b505afa1580156132df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330391906149e7565b601554613de1565b905060006133198284613de1565b905061332760155482614138565b6015553360009081526020805260409020546133439082614138565b33600090815260208052604090205550611016915050565b600b546001600160a01b03166000818152601c6020526040902060010154906133859033846140f9565b600b546040516370a0823160e01b8152600091613425916001600160a01b03909116906370a08231906133bc903090600401614bea565b60206040518083038186803b1580156133d457600080fd5b505afa1580156133e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340c91906149e7565b613420601654611823601754601854614138565b613de1565b905060006134338284613de1565b905061344160165482614138565b6016553360009081526021602052604090205461345e9082614138565b3360009081526021602052604090205550505061101e613ee6565b60006002602454141561349e5760405162461bcd60e51b8152600401610c5590614f6a565b6002602455601b5460ff6101009091041615156001146134d05760405162461bcd60e51b8152600401610c5590614e47565b600b60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561352057600080fd5b505af1158015613534573d6000803e3d6000fd5b5050505050613542336141f9565b15156001141561356d57600654841461356d5760405162461bcd60e51b8152600401610c5590614eee565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a082319061359e903390600401614bea565b60206040518083038186803b1580156135b657600080fd5b505afa1580156135ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ee91906149e7565b9050478015801590613607575066b1a2bc2ec500003410155b801561361c57506801158e460913d000008210155b1561362957613629614235565b600b546001600160a01b039081166000908152601c6020526040808220600c54909316825290206010543411156136725760405162461bcd60e51b8152600401610c5590614cfb565b6136868160010154610cf360326064613c7b565b8511156136a55760405162461bcd60e51b8152600401610c5590614ec2565b60006136f383600101546136c2670de0b6b3a76400006019613d57565b84600101546136da670de0b6b3a76400006019613d57565b6136ec34610cf36103e76103e8613c7b565b6000613124565b9096509050868610156137185760405162461bcd60e51b8152600401610c5590614de5565b600061372b34610cf360016103e8613c7b565b905061373e81610cf36023546064613c7b565b6018600082825461374f9190614faf565b9091555050600c5461376b906001600160a01b03168a89613e3e565b613773613c69565b600c54600b546022546001600160a01b039283169290911690339060008051602061511b8339815191529034906137b1908d90610cf3906064613c7b565b6040516137bf929190614fa1565b60405180910390a450505050505060016024559392505050565b6008546001600160a01b031633146138035760405162461bcd60e51b8152600401610c5590614c4a565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526001602090815260408083206001600160a01b03861684529091528120546138539083614138565b3360008181526001602090815260408083206001600160a01b0389168085529083529281902085905551938452909260008051602061515b8339815191529101610c19565b60008060006138a78689613c7b565b905060006138b58887613de1565b905060006138c38983613c7b565b905060006138d18285614566565b90506138e581670de0b6b3a7640000613de1565b90506138f18c82613d57565b9050613905670de0b6b3a764000088613de1565b95506139118187613c7b565b955061392581670de0b6b3a7640000613c7b565b94506139318686613de1565b945050505050965096945050505050565b6000600260245414156139675760405162461bcd60e51b8152600401610c5590614f6a565b6002602455336000908152602160205260409020548311156139cb5760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f756768204d61696e2c206465706f736974206d6f72650000006044820152606401610c55565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a08231906139fc903390600401614bea565b60206040518083038186803b158015613a1457600080fd5b505afa158015613a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4c91906149e7565b9050478015801590613a65575066b1a2bc2ec500008510155b8015613a7a57506801158e460913d000008210155b15613a8757613a87614235565b600b546001600160a01b039081166000908152601c6020526040808220600c5490931682529020601054871115613ad05760405162461bcd60e51b8152600401610c5590614cfb565b613ae48160010154610cf360326064613c7b565b851115613b035760405162461bcd60e51b8152600401610c5590614ec2565b6000613b4a8360010154613b20670de0b6b3a76400006019613d57565b8460010154613b38670de0b6b3a76400006019613d57565b6136ec8d610cf36103e76103e8613c7b565b909650905086861015613b6f5760405162461bcd60e51b8152600401610c5590614de5565b600c54600b546040516001600160a01b03928316929091169033906000805160206150fb83398151915290613ba7908d908c90614fa1565b60405180910390a433600090815260216020526040812080548a9290613bce908490614ffa565b925050819055508760166000828254613be79190614ffa565b909155505033600090815260208052604081208054889290613c0a908490614faf565b925050819055508560156000828254613c239190614faf565b90915550613c3a905088610cf360016103e8613c7b565b60186000828254613c4b9190614faf565b90915550613c599050613c69565b5050505050600160245592915050565b613c7161429d565b613c79614497565b565b600081613cb95760405162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b6044820152606401610c55565b6000613ccd84670de0b6b3a7640000614fdb565b9050831580613cec5750613ce18482614fc7565b670de0b6b3a7640000145b613d085760405162461bcd60e51b8152600401610c5590614d25565b6000613d15600285614fc7565b613d1f9083614faf565b905081811015613d415760405162461bcd60e51b8152600401610c5590614d25565b6000613d4d8583614fc7565b9695505050505050565b600080613d648385614fdb565b9050831580613d7b575082613d798583614fc7565b145b613d975760405162461bcd60e51b8152600401610c5590614e70565b6000613dab826706f05b59d3b20000614faf565b905081811015613dcd5760405162461bcd60e51b8152600401610c5590614e70565b6000613d4d670de0b6b3a764000083614fc7565b6000806000613df0858561466a565b915091508015613e365760405162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b6044820152606401610c55565b509392505050565b60405163a9059cbb60e01b81526000906001600160a01b0385169063a9059cbb90613e6f9086908690600401614bfe565b602060405180830381600087803b158015613e8957600080fd5b505af1158015613e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec191906149ca565b905080613ee05760405162461bcd60e51b8152600401610c5590614f41565b50505050565b6611c37937e080006017541115613c7957600b54600e5460175460405163a9059cbb60e01b81526000936001600160a01b039081169363a9059cbb93613f33939290911691600401614bfe565b602060405180830381600087803b158015613f4d57600080fd5b505af1158015613f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8591906149ca565b905080613fa45760405162461bcd60e51b8152600401610c5590614f41565b506000601755565b6001600160a01b038316600090815260208190526040902054811115613fd157600080fd5b6001600160a01b038316600090815260208190526040902054613ff49082613de1565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546140239082614138565b6001600160a01b0383811660008181526020818152604091829020949094555184815290929186169160008051602061513b833981519152910160405180910390a3505050565b614075823083613fac565b5050565b3060009081526020819052604090205481111561409557600080fd5b306000908152602081905260409020546140af9082613de1565b306000908152602081905260409020556002546140cc9082613de1565b600255604051818152600090309060008051602061513b833981519152906020015b60405180910390a350565b6040516323b872dd60e01b81526001600160a01b03838116600483015230602483015260448201839052600091908516906323b872dd90606401613e6f565b6000806141458385614faf565b90508381101561418a5760405162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b6044820152606401610c55565b9392505050565b306000908152602081905260409020546141ab9082614138565b306000908152602081905260409020556002546141c89082614138565b600255604051818152309060009060008051602061513b833981519152906020016140ee565b614075308383613fac565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061422d57508115155b949350505050565b6000614242600847614fc7565b905061424e338261434a565b80601960008282546142609190614faf565b909155505060405181815233907f802156a7f2652a91784564a0f4d3dfa6e1ae4033f7d4b4d58dae393437c50de69060200160405180910390a250565b601554600c546040516370a0823160e01b81526001600160a01b03909116906370a08231906142d0903090600401614bea565b60206040518083038186803b1580156142e857600080fd5b505afa1580156142fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061432091906149e7565b61432a9190614ffa565b600c546001600160a01b03166000908152601c6020526040902060010155565b604080516000808252602082019092526001600160a01b0384169083906040516143749190614bce565b60006040518083038185875af1925050503d80600081146143b1576040519150601f19603f3d011682016040523d82523d6000602084013e6143b6565b606091505b50509050806144135760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610c55565b505050565b6611c37937e080006018541115613c7957600b54601854604051632e1a7d4d60e01b81526001600160a01b0390921691632e1a7d4d9161445e9160040190815260200190565b600060405180830381600087803b15801561447857600080fd5b505af115801561448c573d6000803e3d6000fd5b505060006018555050565b60006018546017546016546144ac9190614faf565b6144b69190614faf565b600b546040516370a0823160e01b815291925082916001600160a01b03909116906370a08231906144eb903090600401614bea565b60206040518083038186803b15801561450357600080fd5b505afa158015614517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061453b91906149e7565b6145459190614ffa565b600b546001600160a01b03166000908152601c602052604090206001015550565b600060018310156145b15760405162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b6044820152606401610c55565b671bc16d674ec7ffff8311156146025760405162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b6044820152606401610c55565b600061460d836146a1565b9050600061461b8483613de1565b905060006146318661462c856146be565b6146d2565b905081614642579250610c25915050565b600061465387846305f5e100614745565b905061465f8282613d57565b979650505050505050565b6000808284106146895761467e8385614ffa565b60009150915061469a565b6146938484614ffa565b6001915091505b9250929050565b60006146ac826146be565b610c2590670de0b6b3a7640000614fdb565b6000610c25670de0b6b3a764000083614fc7565b6000806146e0600284615093565b6146f257670de0b6b3a76400006146f4565b835b9050614701600284614fc7565b92505b821561418a576147148485613d57565b9350614721600284615093565b15614733576147308185613d57565b90505b61473e600284614fc7565b9250614704565b600082818061475c87670de0b6b3a764000061466a565b9092509050670de0b6b3a764000080600060015b88841061482657600061478b82670de0b6b3a7640000614fdb565b90506000806147ab8a6147a685670de0b6b3a7640000613de1565b61466a565b915091506147bd87610cf3848c613d57565b96506147c98784613c7b565b9650866147d857505050614826565b87156147e2579315935b80156147ec579315935b8415614803576147fc8688613de1565b9550614810565b61480d8688614138565b95505b505050808061481e90615078565b915050614770565b50909998505050505050505050565b80356001600160a01b038116811461484c57600080fd5b919050565b60006020828403121561486357600080fd5b61418a82614835565b6000806040838503121561487f57600080fd5b61488883614835565b915061489660208401614835565b90509250929050565b6000806000606084860312156148b457600080fd5b6148bd84614835565b92506148cb60208501614835565b91506148d960408501614835565b90509250925092565b600080600080608085870312156148f857600080fd5b61490185614835565b935061490f60208601614835565b925061491d60408601614835565b9396929550929360600135925050565b60008060006060848603121561494257600080fd5b61494b84614835565b925061495960208501614835565b9150604084013590509250925092565b6000806040838503121561497c57600080fd5b61498583614835565b91506020830135614995816150e9565b809150509250929050565b600080604083850312156149b357600080fd5b6149bc83614835565b946020939093013593505050565b6000602082840312156149dc57600080fd5b815161418a816150e9565b6000602082840312156149f957600080fd5b5051919050565b600080600060608486031215614a1557600080fd5b8335925061495960208501614835565b60008060008060808587031215614a3b57600080fd5b84359350614a4b60208601614835565b93969395505050506040820135916060013590565b600080600060408486031215614a7557600080fd5b8335925060208401356001600160401b0380821115614a9357600080fd5b818601915086601f830112614aa757600080fd5b813581811115614ab657600080fd5b8760208260051b8501011115614acb57600080fd5b6020830194508093505050509250925092565b60008060408385031215614af157600080fd5b50508035926020909101359150565b60008060408385031215614b1357600080fd5b505080516020909101519092909150565b600080600060608486031215614b3957600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614b6857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060008060008060c08789031215614ba457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008251614be0818460208701615011565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020815260008251806020840152614c36816040850160208701615011565b601f01601f19169190910160400192915050565b6020808252601a90820152792cb7ba903237903737ba103430bb32903832b936b4b9b9b4b7b760311b604082015260600190565b60208082526010908201526f2737ba1032b737bab3b4102a37b5b2b760811b604082015260600190565b6020808252600f908201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604082015260600190565b60208082526010908201526f2737ba1032b737bab3b4103a37b5b2b760811b604082015260600190565b60208082526010908201526f4552525f4255595f494e5f524154494f60801b604082015260600190565b60208082526010908201526f11549497d1125597d25395115493905360821b604082015260600190565b60208082526047908201527f4c6971756964697479206973206c6f636b65642c20796f752063616e6e6f742060408201527f72656d6f7665206c697175696469747920756e74696c206166746572206c6f6360608201526635903a34b6b29760c91b608082015260a00190565b6020808252600f908201526e2737ba1032b737bab3b41026b0b4b760891b604082015260600190565b6020808252601a9082015279135a5b9a5b5d5b48185b5bdd5b9d081bdd5d081b9bdd081b595d60321b604082015260600190565b602080825260149082015273131a5c5d5a591a5d1e481b9bdd081b1bd8dad95960621b604082015260600190565b6020808252600f908201526e14ddd85c081b9bdd081bdc195b9959608a1b604082015260600190565b60208082526010908201526f4552525f4d554c5f4f564552464c4f5760801b604082015260600190565b6020808252600e908201526d4552525f53454c4c5f524154494f60901b604082015260600190565b6020808252601290820152714f766572204d41585f4f55545f524154494f60701b604082015260600190565b60208082526033908201527f436f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e7460408201527206572616374207769746820746865205377617606c1b606082015260800190565b6020808252600f908201526e4552525f45524332305f46414c534560881b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b918252602082015260400190565b60008219821115614fc257614fc26150a7565b500190565b600082614fd657614fd66150bd565b500490565b6000816000190483118215151615614ff557614ff56150a7565b500290565b60008282101561500c5761500c6150a7565b500390565b60005b8381101561502c578181015183820152602001615014565b83811115613ee05750506000910152565b600181811c9082168061505157607f821691505b6020821081141561507257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561508c5761508c6150a7565b5060010190565b6000826150a2576150a26150bd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b80151581146150f757600080fd5b5056fec5f954edb6f50c3415e43c4c343ed2fac83243f08807d721c27e2ccb634c36fa908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d43378ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a26469706673582212208f5c475ddbdb0cba8a6e89ee08f8de7b55e30e0740344aaf3371322e03ccbdf164736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102e15760003560e01c80627b44a7146102ed5780630149e5c714610316578063036fe1bb1461035f578063055a03c51461037557806306fdde031461038b57806307d729c4146103ad578063095ea7b3146103fe578063103ff68d1461041e57806310510ec11461044057806312dcff7a1461046057806315e84af91461048057806318160ddd146104a057806319266112146104b65780632140fb40146104d657806323b872dd146104f657806329dfe3b2146105165780632b9abe1a14610536578063313ce5671461058457806331705705146105b0578063390a73e2146105dd5780633a0e9288146105f35780633f7376a914610613578063520bb81b146106335780635c464b6114610653578063630eb8ab1461067357806365d1a40d1461068857806366188463146106a85780636a8ebcd2146106c85780636c5c6814146106dd57806370a08231146106f357806371a1e6dd1461072957806372015efc1461074957806376c309241461075e5780637bc224f91461077e5780638c340f641461079e578063957aa58c146107be57806395d89b41146107d85780639a6204ed146107ed5780639a78458a14610803578063a16faa1814610823578063a221ee4914610838578063a2e70a2e14610858578063a9059cbb1461086e578063add975cc1461088e578063ae1931be146108ae578063b0711483146108ce578063b4398244146108ee578063ba9530a614610904578063bbf1271414610924578063c172715c14610944578063c241267614610957578063c627fbfa14610977578063cdfec52d14610997578063d62b6f7e146109ad578063d73dd623146109cd578063da6d6578146109ed578063dd62ed3e14610a03578063ef8fdfd814610a49578063f1091b6e14610a69578063f8b2cb4f14610a7f578063f8d6aed414610ab8578063fbe8998914610ad8578063fcfff16f14610aee578063fea4393a14610b0d578063fff6cae914610b2d57600080fd5b366102e857005b600080fd5b3480156102f957600080fd5b5061030360135481565b6040519081526020015b60405180910390f35b34801561032257600080fd5b5061034f610331366004614851565b6001600160a01b03166000908152601f602052604090205460ff1690565b604051901515815260200161030d565b34801561036b57600080fd5b5061030360165481565b34801561038157600080fd5b5061030360105481565b34801561039757600080fd5b506103a0610b42565b60405161030d9190614c17565b3480156103b957600080fd5b506103e76103c8366004614851565b601e602052600090815260409020805460019091015460ff9091169082565b60408051921515835260208301919091520161030d565b34801561040a57600080fd5b5061034f6104193660046149a0565b610bd0565b34801561042a57600080fd5b5061043e610439366004614969565b610c2b565b005b34801561044c57600080fd5b5061043e61045b3660046149a0565b610c89565b34801561046c57600080fd5b5061043e61047b366004614851565b610d93565b34801561048c57600080fd5b5061030361049b36600461486c565b610e33565b3480156104ac57600080fd5b5061030360025481565b3480156104c257600080fd5b5061043e6104d13660046149a0565b610ea1565b3480156104e257600080fd5b5061034f6104f1366004614851565b611027565b34801561050257600080fd5b5061034f61051136600461492d565b611045565b34801561052257600080fd5b5061043e610531366004614a60565b61118a565b34801561054257600080fd5b50610576610551366004614851565b6001600160a01b03166000908152602160209081526040808320549180529091205491565b60405161030d929190614fa1565b34801561059057600080fd5b5060055461059e9060ff1681565b60405160ff909116815260200161030d565b3480156105bc57600080fd5b50600d546105d0906001600160a01b031681565b60405161030d9190614bea565b3480156105e957600080fd5b5061030360185481565b3480156105ff57600080fd5b5061043e61060e366004614851565b611412565b34801561061f57600080fd5b5061043e61062e366004614851565b611472565b34801561063f57600080fd5b50600a546105d0906001600160a01b031681565b34801561065f57600080fd5b5061043e61066e366004614b24565b6114fa565b34801561067f57600080fd5b50610303603281565b34801561069457600080fd5b5061043e6106a33660046149a0565b6118c5565b3480156106b457600080fd5b5061034f6106c33660046149a0565b6119be565b3480156106d457600080fd5b5061043e611a94565b3480156106e957600080fd5b5061030360225481565b3480156106ff57600080fd5b5061030361070e366004614851565b6001600160a01b031660009081526020819052604090205490565b34801561073557600080fd5b5061043e610744366004614a60565b611abc565b34801561075557600080fd5b5061043e611caa565b34801561076a57600080fd5b5061043e610779366004614ade565b611deb565b34801561078a57600080fd5b5061043e61079936600461489f565b611ec7565b3480156107aa57600080fd5b5061043e6107b9366004614ade565b611f93565b3480156107ca57600080fd5b50601b5461034f9060ff1681565b3480156107e457600080fd5b506103a06120db565b3480156107f957600080fd5b5061030360195481565b34801561080f57600080fd5b50600e546105d0906001600160a01b031681565b34801561082f57600080fd5b5061043e6120e8565b34801561084457600080fd5b50610303610853366004614b50565b612247565b34801561086457600080fd5b5061030360155481565b34801561087a57600080fd5b5061034f6108893660046149a0565b6122b1565b34801561089a57600080fd5b506103036108a9366004614a25565b6122f2565b3480156108ba57600080fd5b506103036108c9366004614ade565b612800565b3480156108da57600080fd5b5061043e6108e93660046148e2565b612c24565b3480156108fa57600080fd5b50610303601a5481565b34801561091057600080fd5b5061057661091f366004614b8b565b613124565b34801561093057600080fd5b5061043e61093f3660046149a0565b6131b5565b610303610952366004614a00565b613479565b34801561096357600080fd5b50600c546105d0906001600160a01b031681565b34801561098357600080fd5b5061043e610992366004614851565b6137d9565b3480156109a357600080fd5b5061030360115481565b3480156109b957600080fd5b50600b546105d0906001600160a01b031681565b3480156109d957600080fd5b5061034f6109e83660046149a0565b613825565b3480156109f957600080fd5b5061030360175481565b348015610a0f57600080fd5b50610303610a1e36600461486c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a5557600080fd5b50600f546105d0906001600160a01b031681565b348015610a7557600080fd5b5061030360125481565b348015610a8b57600080fd5b50610303610a9a366004614851565b6001600160a01b03166000908152601c602052604090206001015490565b348015610ac457600080fd5b50610576610ad3366004614b8b565b613898565b348015610ae457600080fd5b5061030360235481565b348015610afa57600080fd5b50601b5461034f90610100900460ff1681565b348015610b1957600080fd5b50610303610b28366004614ade565b613942565b348015610b3957600080fd5b5061043e613c69565b60038054610b4f9061503d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7b9061503d565b8015610bc85780601f10610b9d57610100808354040283529160200191610bc8565b820191906000526020600020905b815481529060010190602001808311610bab57829003601f168201915b505050505081565b3360008181526001602090815260408083206001600160a01b0387168085529252808320859055519192909160008051602061515b83398151915290610c199086815260200190565b60405180910390a35060015b92915050565b6008546001600160a01b03163314610c5e5760405162461bcd60e51b8152600401610c5590614c4a565b60405180910390fd5b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b60026024541415610cac5760405162461bcd60e51b8152600401610c5590614f6a565b6002602455336000908152602080526040902054811115610cdf5760405162461bcd60e51b8152600401610c5590614cd1565b6000610cf882610cf36103e56103e8613c7b565b613d57565b90506000610d068383613de1565b336000908152602080526040812080549293508592909190610d29908490614ffa565b90915550506001600160a01b038416600090815260208052604081208054849290610d55908490614faf565b90915550506007546001600160a01b0316600090815260208052604081208054839290610d83908490614faf565b9091555050600160245550505050565b600a546001600160a01b031633148015610dbb5750600b546001600160a01b03828116911614155b8015610dd55750600c546001600160a01b03828116911614155b610e115760405162461bcd60e51b815260206004820152600d60248201526c139bdd081c195c9b5a5d1d1959609a1b6044820152606401610c55565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038083166000908152601c6020526040808220928416825281206001830154919291610e9890610e73670de0b6b3a76400006019613d57565b8360010154610e8b670de0b6b3a76400006019613d57565b66071afd498d0000612247565b95945050505050565b60026024541415610ec45760405162461bcd60e51b8152600401610c5590614f6a565b6002602455600b546001600160a01b0383811691161480610ef25750600c546001600160a01b038381169116145b610efb57600080fd5b600c546001600160a01b0383811691161415610f9557336000908152602080526040902054811115610f3f5760405162461bcd60e51b8152600401610c5590614c7e565b8060156000828254610f519190614ffa565b909155505033600090815260208052604081208054839290610f74908490614ffa565b9091555050600c54610f90906001600160a01b03163383613e3e565b611016565b33600090815260216020526040902054811115610fc45760405162461bcd60e51b8152600401610c5590614dbc565b8060166000828254610fd69190614ffa565b90915550503360009081526021602052604081208054839290610ffa908490614ffa565b9091555050600b54611016906001600160a01b03163383613e3e565b61101e613ee6565b50506001602455565b6001600160a01b03166000908152601d602052604090205460ff1690565b6000336001600160a01b038516148061108157506001600160a01b03841660009081526001602090815260408083203384529091529020548211155b61108a57600080fd5b600061109533611027565b905080156110b55760405162461bcd60e51b8152600401610c5590614d4f565b6110c0858585613fac565b336001600160a01b038616148015906110fe57506001600160a01b038516600090815260016020908152604080832033845290915290205460001914155b1561117f576001600160a01b03851660009081526001602090815260408083203384529091529020546111319084613de1565b6001600160a01b03868116600090815260016020908152604080832033808552908352928190208590555193845291871692909160008051602061515b833981519152910160405180910390a35b506001949350505050565b600260245414156111ad5760405162461bcd60e51b8152600401610c5590614f6a565b600260245560006111bd33611027565b905080156111dd5760405162461bcd60e51b8152600401610c5590614d4f565b6111e5613c69565b60025460006111f48683613c7b565b9050806112135760405162461bcd60e51b8152600401610c5590614ca8565b61121d338761406a565b61122686614079565b60005b60145481101561134357600060148281548110611248576112486150d3565b60009182526020808320909101546001600160a01b0316808352601c90915260408220600101549092509061127d8583613d57565b90508061129c5760405162461bcd60e51b8152600401610c5590614ca8565b8888858181106112ae576112ae6150d3565b905060200201358110156112d45760405162461bcd60e51b8152600401610c5590614de5565b826001600160a01b0316336001600160a01b03167f9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f383600060405161131a929190614fa1565b60405180910390a361132d833383613e3e565b505050808061133b90615078565b915050611229565b5061134c613c69565b600f546001600160a01b03161561140557600f546040516370a0823160e01b81526000916113e49184916001600160a01b0316906370a0823190611394903090600401614bea565b60206040518083038186803b1580156113ac57600080fd5b505afa1580156113c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf391906149e7565b9050801561140357600f54611403906001600160a01b03163383613e3e565b505b5050600160245550505050565b6008546001600160a01b03163314801561143457506001600160a01b03811615155b6114505760405162461bcd60e51b8152600401610c5590614c4a565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b0316331461149c5760405162461bcd60e51b8152600401610c5590614c4a565b60006114a782611027565b90506001811515146114cb5760405162461bcd60e51b8152600401610c5590614e19565b6001600160a01b0382166000908152601e602052604090206114f0426202a300614faf565b6001909101555050565b601b5460ff16156115415760405162461bcd60e51b815260206004820152601160248201527043616e206f6e6c7920757365206f6e636560781b6044820152606401610c55565b600a546001600160a01b0316331461158c5760405162461bcd60e51b815260206004820152600e60248201526d4e6f207065726d697373696f6e7360901b6044820152606401610c55565b6006819055600b5433906115aa906001600160a01b031682866140f9565b600c546115c1906001600160a01b031633856140f9565b69010f0cf064dd59200000601155681043561a8829300000601055600c546040516370a0823160e01b81526000916001600160a01b0316906370a082319061160d903090600401614bea565b60206040518083038186803b15801561162557600080fd5b505afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165d91906149e7565b600b546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611693903090600401614bea565b60206040518083038186803b1580156116ab57600080fd5b505afa1580156116bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e391906149e7565b6040805180820182526014805482526020808301878152600c80546001600160a01b039081166000908152601c80865288822097518855935160019788015587518089018952865481528086018a8152600b80548516845295909652888220905181559451948701949094558154855480880187557fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec90810180549284166001600160a01b03199384161790559354865480890190975595909301805495821695909316949094179091555490911681529182200154919250906117cb90633b9aca00613c7b565b600b546001600160a01b03166000908152601c6020526040812060010154919250906117ff90670de0b6b3a7640000613c7b565b905061181361180e8383614138565b614191565b611828601a546118238484614138565b614138565b601a5561183e856118398484614138565b6141ee565b6001600160a01b0385166000908152601d60209081526040808320601e909252909120815460ff1916600117825561187a426301e13380614faf565b600180830191909155601b805460ff19169091179055601e6012556118a46064610cf3888c613c7b565b6022556118b66064610cf3878d613c7b565b60235550505050505050505050565b600260245414156118e85760405162461bcd60e51b8152600401610c5590614f6a565b60026024553360009081526021602052604090205481111561191c5760405162461bcd60e51b8152600401610c5590614cd1565b600061193082610cf36103e56103e8613c7b565b9050600061193e8383613de1565b33600090815260216020526040812080549293508592909190611962908490614ffa565b90915550506001600160a01b0384166000908152602160205260408120805484929061198f908490614faf565b90915550506007546001600160a01b031660009081526021602052604081208054839290610d83908490614faf565b3360009081526001602090815260408083206001600160a01b038616845290915281205480831115611a13573360009081526001602090815260408083206001600160a01b0388168452909152812055611a42565b611a1d8184613de1565b3360009081526001602090815260408083206001600160a01b03891684529091529020555b3360008181526001602090815260408083206001600160a01b0389168085529083529281902054905190815291929160008051602061515b833981519152910160405180910390a35060019392505050565b600a546001600160a01b03163314611aab57600080fd5b601b805461ff001916610100179055565b60026024541415611adf5760405162461bcd60e51b8152600401610c5590614f6a565b6002602455611aec613c69565b6002546000611afb8583613c7b565b905080611b1a5760405162461bcd60e51b8152600401610c5590614ca8565b6000611b2533611027565b905060018115151415611b4a5785601a6000828254611b449190614faf565b90915550505b60005b601454811015611c8657600060148281548110611b6c57611b6c6150d3565b60009182526020808320909101546001600160a01b0316808352601c909152604082206001015490925090611ba18683613d57565b905080611bc05760405162461bcd60e51b8152600401610c5590614ca8565b888885818110611bd257611bd26150d3565b90506020020135811115611c175760405162461bcd60e51b815260206004820152600c60248201526b22a9292fa624a6a4aa2fa4a760a11b6044820152606401610c55565b826001600160a01b0316336001600160a01b03167f15a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a836000604051611c5d929190614fa1565b60405180910390a3611c708333836140f9565b5050508080611c7e90615078565b915050611b4d565b50611c8f613ee6565b611c97613c69565b611ca086614191565b61140533876141ee565b60026024541415611ccd5760405162461bcd60e51b8152600401610c5590614f6a565b6002602455336000611cde82611027565b9050600181151514611d025760405162461bcd60e51b8152600401610c5590614e19565b6040516370a0823160e01b815260009030906370a0823190611d28908690600401614bea565b60206040518083038186803b158015611d4057600080fd5b505afa158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7891906149e7565b905080601a6000828254611d8c9190614ffa565b90915550506001600160a01b0383166000908152601d60209081526040808320601e9092529091206001810154421015611dd85760405162461bcd60e51b8152600401610c5590614d4f565b50805460ff191690555050600160245550565b600a546001600160a01b03163314611e155760405162461bcd60e51b8152600401610c5590614c4a565b60328211158015611e2557508115155b611e695760405162461bcd60e51b81526020600482015260156024820152742043616e6e6f7420736574206f76657220302e352560581b6044820152606401610c55565b6103de8110158015611e7d57506103e88111155b611ebf5760405162461bcd60e51b81526020600482015260136024820152722043616e6e6f7420736574206f76657220312560681b6044820152606401610c55565b601355601255565b6007546001600160a01b03163314611ef15760405162461bcd60e51b8152600401610c5590614c4a565b6001600160a01b03831615801590611f1157506001600160a01b03821615155b611f545760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207365742030206164647265737360601b6044820152606401610c55565b600780546001600160a01b039485166001600160a01b0319918216179091556008805493851693821693909317909255600a8054919093169116179055565b600a546001600160a01b03163314611fbd5760405162461bcd60e51b8152600401610c5590614c4a565b600c546001600160a01b039081166000908152601c6020526040808220600190810154600b5490941683529120015469152d02c7e14af680000084108015906120065750818411155b61205e5760405162461bcd60e51b815260206004820152602360248201527f6d696e2031302054204645472c206d61782031303025206f66206c697175696460448201526269747960e81b6064820152608401610c55565b68056bc75e2d6310000083101580156120775750808311155b6120ce5760405162461bcd60e51b815260206004820152602260248201527f6d696e20313030204554482c206d61782031303025206f66206c697175696469604482015261747960f01b6064820152608401610c55565b5050601191909155601055565b60048054610b4f9061503d565b6002602454141561210b5760405162461bcd60e51b8152600401610c5590614f6a565b600260245533600061211c82611027565b905080156121675760405162461bcd60e51b8152602060048201526018602482015277131a5c5d5a591a5d1e48185b1c9958591e481b1bd8dad95960421b6044820152606401610c55565b6040516370a0823160e01b815260009030906370a082319061218d908690600401614bea565b60206040518083038186803b1580156121a557600080fd5b505afa1580156121b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121dd91906149e7565b6001600160a01b0384166000908152601d60209081526040808320601e909252909120815460ff191660011782559192509061221c426276a700614faf565b816001018190555082601a60008282546122369190614faf565b909155505060016024555050505050565b6000806122548787613c7b565b905060006122628686613c7b565b905060006122708383613c7b565b90506000612297670de0b6b3a7640000612292670de0b6b3a764000089613de1565b613c7b565b90506122a38282613d57565b9a9950505050505050505050565b6000806122bd33611027565b905080156122dd5760405162461bcd60e51b8152600401610c5590614d4f565b6122e8338585613fac565b5060019392505050565b6000600260245414156123175760405162461bcd60e51b8152600401610c5590614f6a565b6002602455601b5460ff6101009091041615156001146123495760405162461bcd60e51b8152600401610c5590614e47565b612352336141f9565b15156001141561237d57600654851461237d5760405162461bcd60e51b8152600401610c5590614eee565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a08231906123ae903390600401614bea565b60206040518083038186803b1580156123c657600080fd5b505afa1580156123da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fe91906149e7565b905060004711801561241957506801158e460913d000008110155b801561242d5750670de0b6b3a76400008211155b1561243a5761243a614235565b600c546001600160a01b03166000818152601c6020526040902060010154906124649033876140f9565b61246c61429d565b600c546001600160a01b03166000908152601c60205260408120600101546124a790612499908490614ffa565b610cf36103e66103e8613c7b565b90506011548611156124cb5760405162461bcd60e51b8152600401610c5590614e9a565b600b546001600160a01b03166000908152601c60205260409020600101546124f990610cf360326064613c7b565b8411156125185760405162461bcd60e51b8152600401610c5590614ec2565b600061257083612531670de0b6b3a76400006019613d57565b600b546001600160a01b03166000908152601c6020526040902060010154612562670de0b6b3a76400006019613d57565b8666071afd498d0000613124565b9095509050858510156125955760405162461bcd60e51b8152600401610c5590614de5565b60006125a986610cf36013546103e8613c7b565b905060006125be82610cf3600f612710613c7b565b905060006125d383610cf3600f612710613c7b565b905060006125e984610cf3601254612710613c7b565b90506000816125f88486614faf565b6126029190614faf565b61260c9086614ffa565b9050600061262282610cf36103e76103e8613c7b565b3060009081526021602052604090205490915066038d7ea4c6800081111561266c5780601660008282546126569190614ffa565b9091555050306000908152602160205260408120555b600b546001600160a01b0316632e1a7d4d876126888486614faf565b6126929190614faf565b6040518263ffffffff1660e01b81526004016126b091815260200190565b600060405180830381600087803b1580156126ca57600080fd5b505af11580156126de573d6000803e3d6000fd5b505050506126fb8f6126f684610cf360636064613c7b565b61434a565b61270c83610cf360016103e8613c7b565b6018600082825461271d9190614faf565b9091555050600d546001600160a01b03166000908152602160205260408120805486929061274c908490614faf565b9250508190555083601660008282546127659190614faf565b92505081905550846017600082825461277e9190614faf565b9091555061278c9050614418565b612794614497565b600b54600c546023546001600160a01b039283169290911690339060008051602061511b833981519152908d906127d2908890610cf3906064613c7b565b6040516127e0929190614fa1565b60405180910390a450505050505050505050506001602455949350505050565b6000600260245414156128255760405162461bcd60e51b8152600401610c5590614f6a565b60026024556009546040516370a0823160e01b81526000916001600160a01b0316906370a082319061285b903390600401614bea565b60206040518083038186803b15801561287357600080fd5b505afa158015612887573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ab91906149e7565b90506000471180156128c657506801158e460913d000008110155b80156128da5750670de0b6b3a76400008211155b156128e7576128e7614235565b33600090815260208052604090205484908111156129175760405162461bcd60e51b8152600401610c5590614c7e565b600c546001600160a01b039081166000908152601c6020526040808220600b54909316825290206011548311156129605760405162461bcd60e51b8152600401610c5590614e9a565b6129748160010154610cf360326064613c7b565b8511156129935760405162461bcd60e51b8152600401610c5590614ec2565b60006129e783600101546129b0670de0b6b3a76400006019613d57565b84600101546129c8670de0b6b3a76400006019613d57565b6129da89610cf36103e66103e8613c7b565b66071afd498d0000613124565b80925081975050506000612a0387610cf36013546103e8613c7b565b90506000612a1882610cf3600f612710613c7b565b90506000612a2d83610cf3600f612710613c7b565b90506000612a4384610cf3601254612710613c7b565b9050600081612a528486614faf565b612a5c9190614faf565b612a669086614ffa565b90506000612a7c82610cf36103e76103e8613c7b565b600b54600c546040519293506001600160a01b039182169291169033906000805160206150fb83398151915290612ab6908f908790614fa1565b60405180910390a4612acf82610cf360016103e8613c7b565b60186000828254612ae09190614faf565b90915550508c811015612b055760405162461bcd60e51b8152600401610c5590614de5565b336000908152602080526040812080548c9290612b23908490614ffa565b925050819055508960156000828254612b3c9190614ffa565b90915550503360009081526021602052604081208054839290612b60908490614faf565b90915550503060009081526021602052604081208054879290612b84908490614faf565b9091555050600d546001600160a01b031660009081526021602052604081208054859290612bb3908490614faf565b90915550819050612bc48487614faf565b612bce9190614faf565b60166000828254612bdf9190614faf565b925050819055508360176000828254612bf89190614faf565b90915550612c069050613c69565b612c0e614418565b5050505050505050505050600160245592915050565b60026024541415612c475760405162461bcd60e51b8152600401610c5590614f6a565b6002602455600b546001600160a01b0384811691161480612c755750600c546001600160a01b038481169116145b612c7e57600080fd5b600b546001600160a01b0384811691161415612ed65733600090815260216020526040902054811115612cc35760405162461bcd60e51b8152600401610c5590614dbc565b600b5460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390612cf59087908590600401614bfe565b602060405180830381600087803b158015612d0f57600080fd5b505af1158015612d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4791906149ca565b508060166000828254612d5a9190614ffa565b90915550503360009081526021602052604081208054839290612d7e908490614ffa565b9091555050600b54604051632efc49c560e21b81526001600160a01b038681169263bbf1271492612db792909116908590600401614bfe565b600060405180830381600087803b158015612dd157600080fd5b505af1158015612de5573d6000803e3d6000fd5b50505050600080856001600160a01b0316632b9abe1a306040518263ffffffff1660e01b8152600401612e189190614bea565b6040805180830381600087803b158015612e3157600080fd5b505af1158015612e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e699190614b00565b6040516365d1a40d60e01b815291935091506001600160a01b038716906365d1a40d90612e9c9087908590600401614bfe565b600060405180830381600087803b158015612eb657600080fd5b505af1158015612eca573d6000803e3d6000fd5b50613111945050505050565b336000908152602080526040902054811115612f045760405162461bcd60e51b8152600401610c5590614c7e565b600c5460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390612f369087908590600401614bfe565b602060405180830381600087803b158015612f5057600080fd5b505af1158015612f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8891906149ca565b508060156000828254612f9b9190614ffa565b909155505033600090815260208052604081208054839290612fbe908490614ffa565b9091555050600c54604051632efc49c560e21b81526001600160a01b038681169263bbf1271492612ff792909116908590600401614bfe565b600060405180830381600087803b15801561301157600080fd5b505af1158015613025573d6000803e3d6000fd5b50505050600080856001600160a01b0316632b9abe1a306040518263ffffffff1660e01b81526004016130589190614bea565b6040805180830381600087803b15801561307157600080fd5b505af1158015613085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a99190614b00565b6040516310510ec160e01b815291935091506001600160a01b038716906310510ec1906130dc9087908690600401614bfe565b600060405180830381600087803b1580156130f657600080fd5b505af115801561310a573d6000803e3d6000fd5b5050505050505b613119613ee6565b505060016024555050565b60008060006131338887613c7b565b90506000613149670de0b6b3a764000086613de1565b90506131558682613d57565b905060006131678b6122928d85614138565b905060006131758285614566565b9050600061318b670de0b6b3a764000083613de1565b90506131978b82613d57565b96506131a38985613de1565b95505050505050965096945050505050565b600260245414156131d85760405162461bcd60e51b8152600401610c5590614f6a565b6002602455600b546001600160a01b03838116911614806132065750600c546001600160a01b038381169116145b61320f57600080fd5b601b5460ff61010090910416151560011461323c5760405162461bcd60e51b8152600401610c5590614e47565b600c546001600160a01b038381169116141561335b57600c546001600160a01b03166000818152601c60205260409020600101549061327c9033846140f9565b600c546040516370a0823160e01b815260009161330b916001600160a01b03909116906370a08231906132b3903090600401614bea565b60206040518083038186803b1580156132cb57600080fd5b505afa1580156132df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330391906149e7565b601554613de1565b905060006133198284613de1565b905061332760155482614138565b6015553360009081526020805260409020546133439082614138565b33600090815260208052604090205550611016915050565b600b546001600160a01b03166000818152601c6020526040902060010154906133859033846140f9565b600b546040516370a0823160e01b8152600091613425916001600160a01b03909116906370a08231906133bc903090600401614bea565b60206040518083038186803b1580156133d457600080fd5b505afa1580156133e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340c91906149e7565b613420601654611823601754601854614138565b613de1565b905060006134338284613de1565b905061344160165482614138565b6016553360009081526021602052604090205461345e9082614138565b3360009081526021602052604090205550505061101e613ee6565b60006002602454141561349e5760405162461bcd60e51b8152600401610c5590614f6a565b6002602455601b5460ff6101009091041615156001146134d05760405162461bcd60e51b8152600401610c5590614e47565b600b60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561352057600080fd5b505af1158015613534573d6000803e3d6000fd5b5050505050613542336141f9565b15156001141561356d57600654841461356d5760405162461bcd60e51b8152600401610c5590614eee565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a082319061359e903390600401614bea565b60206040518083038186803b1580156135b657600080fd5b505afa1580156135ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ee91906149e7565b9050478015801590613607575066b1a2bc2ec500003410155b801561361c57506801158e460913d000008210155b1561362957613629614235565b600b546001600160a01b039081166000908152601c6020526040808220600c54909316825290206010543411156136725760405162461bcd60e51b8152600401610c5590614cfb565b6136868160010154610cf360326064613c7b565b8511156136a55760405162461bcd60e51b8152600401610c5590614ec2565b60006136f383600101546136c2670de0b6b3a76400006019613d57565b84600101546136da670de0b6b3a76400006019613d57565b6136ec34610cf36103e76103e8613c7b565b6000613124565b9096509050868610156137185760405162461bcd60e51b8152600401610c5590614de5565b600061372b34610cf360016103e8613c7b565b905061373e81610cf36023546064613c7b565b6018600082825461374f9190614faf565b9091555050600c5461376b906001600160a01b03168a89613e3e565b613773613c69565b600c54600b546022546001600160a01b039283169290911690339060008051602061511b8339815191529034906137b1908d90610cf3906064613c7b565b6040516137bf929190614fa1565b60405180910390a450505050505060016024559392505050565b6008546001600160a01b031633146138035760405162461bcd60e51b8152600401610c5590614c4a565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526001602090815260408083206001600160a01b03861684529091528120546138539083614138565b3360008181526001602090815260408083206001600160a01b0389168085529083529281902085905551938452909260008051602061515b8339815191529101610c19565b60008060006138a78689613c7b565b905060006138b58887613de1565b905060006138c38983613c7b565b905060006138d18285614566565b90506138e581670de0b6b3a7640000613de1565b90506138f18c82613d57565b9050613905670de0b6b3a764000088613de1565b95506139118187613c7b565b955061392581670de0b6b3a7640000613c7b565b94506139318686613de1565b945050505050965096945050505050565b6000600260245414156139675760405162461bcd60e51b8152600401610c5590614f6a565b6002602455336000908152602160205260409020548311156139cb5760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f756768204d61696e2c206465706f736974206d6f72650000006044820152606401610c55565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a08231906139fc903390600401614bea565b60206040518083038186803b158015613a1457600080fd5b505afa158015613a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4c91906149e7565b9050478015801590613a65575066b1a2bc2ec500008510155b8015613a7a57506801158e460913d000008210155b15613a8757613a87614235565b600b546001600160a01b039081166000908152601c6020526040808220600c5490931682529020601054871115613ad05760405162461bcd60e51b8152600401610c5590614cfb565b613ae48160010154610cf360326064613c7b565b851115613b035760405162461bcd60e51b8152600401610c5590614ec2565b6000613b4a8360010154613b20670de0b6b3a76400006019613d57565b8460010154613b38670de0b6b3a76400006019613d57565b6136ec8d610cf36103e76103e8613c7b565b909650905086861015613b6f5760405162461bcd60e51b8152600401610c5590614de5565b600c54600b546040516001600160a01b03928316929091169033906000805160206150fb83398151915290613ba7908d908c90614fa1565b60405180910390a433600090815260216020526040812080548a9290613bce908490614ffa565b925050819055508760166000828254613be79190614ffa565b909155505033600090815260208052604081208054889290613c0a908490614faf565b925050819055508560156000828254613c239190614faf565b90915550613c3a905088610cf360016103e8613c7b565b60186000828254613c4b9190614faf565b90915550613c599050613c69565b5050505050600160245592915050565b613c7161429d565b613c79614497565b565b600081613cb95760405162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b6044820152606401610c55565b6000613ccd84670de0b6b3a7640000614fdb565b9050831580613cec5750613ce18482614fc7565b670de0b6b3a7640000145b613d085760405162461bcd60e51b8152600401610c5590614d25565b6000613d15600285614fc7565b613d1f9083614faf565b905081811015613d415760405162461bcd60e51b8152600401610c5590614d25565b6000613d4d8583614fc7565b9695505050505050565b600080613d648385614fdb565b9050831580613d7b575082613d798583614fc7565b145b613d975760405162461bcd60e51b8152600401610c5590614e70565b6000613dab826706f05b59d3b20000614faf565b905081811015613dcd5760405162461bcd60e51b8152600401610c5590614e70565b6000613d4d670de0b6b3a764000083614fc7565b6000806000613df0858561466a565b915091508015613e365760405162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b6044820152606401610c55565b509392505050565b60405163a9059cbb60e01b81526000906001600160a01b0385169063a9059cbb90613e6f9086908690600401614bfe565b602060405180830381600087803b158015613e8957600080fd5b505af1158015613e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec191906149ca565b905080613ee05760405162461bcd60e51b8152600401610c5590614f41565b50505050565b6611c37937e080006017541115613c7957600b54600e5460175460405163a9059cbb60e01b81526000936001600160a01b039081169363a9059cbb93613f33939290911691600401614bfe565b602060405180830381600087803b158015613f4d57600080fd5b505af1158015613f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8591906149ca565b905080613fa45760405162461bcd60e51b8152600401610c5590614f41565b506000601755565b6001600160a01b038316600090815260208190526040902054811115613fd157600080fd5b6001600160a01b038316600090815260208190526040902054613ff49082613de1565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546140239082614138565b6001600160a01b0383811660008181526020818152604091829020949094555184815290929186169160008051602061513b833981519152910160405180910390a3505050565b614075823083613fac565b5050565b3060009081526020819052604090205481111561409557600080fd5b306000908152602081905260409020546140af9082613de1565b306000908152602081905260409020556002546140cc9082613de1565b600255604051818152600090309060008051602061513b833981519152906020015b60405180910390a350565b6040516323b872dd60e01b81526001600160a01b03838116600483015230602483015260448201839052600091908516906323b872dd90606401613e6f565b6000806141458385614faf565b90508381101561418a5760405162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b6044820152606401610c55565b9392505050565b306000908152602081905260409020546141ab9082614138565b306000908152602081905260409020556002546141c89082614138565b600255604051818152309060009060008051602061513b833981519152906020016140ee565b614075308383613fac565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061422d57508115155b949350505050565b6000614242600847614fc7565b905061424e338261434a565b80601960008282546142609190614faf565b909155505060405181815233907f802156a7f2652a91784564a0f4d3dfa6e1ae4033f7d4b4d58dae393437c50de69060200160405180910390a250565b601554600c546040516370a0823160e01b81526001600160a01b03909116906370a08231906142d0903090600401614bea565b60206040518083038186803b1580156142e857600080fd5b505afa1580156142fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061432091906149e7565b61432a9190614ffa565b600c546001600160a01b03166000908152601c6020526040902060010155565b604080516000808252602082019092526001600160a01b0384169083906040516143749190614bce565b60006040518083038185875af1925050503d80600081146143b1576040519150601f19603f3d011682016040523d82523d6000602084013e6143b6565b606091505b50509050806144135760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610c55565b505050565b6611c37937e080006018541115613c7957600b54601854604051632e1a7d4d60e01b81526001600160a01b0390921691632e1a7d4d9161445e9160040190815260200190565b600060405180830381600087803b15801561447857600080fd5b505af115801561448c573d6000803e3d6000fd5b505060006018555050565b60006018546017546016546144ac9190614faf565b6144b69190614faf565b600b546040516370a0823160e01b815291925082916001600160a01b03909116906370a08231906144eb903090600401614bea565b60206040518083038186803b15801561450357600080fd5b505afa158015614517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061453b91906149e7565b6145459190614ffa565b600b546001600160a01b03166000908152601c602052604090206001015550565b600060018310156145b15760405162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b6044820152606401610c55565b671bc16d674ec7ffff8311156146025760405162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b6044820152606401610c55565b600061460d836146a1565b9050600061461b8483613de1565b905060006146318661462c856146be565b6146d2565b905081614642579250610c25915050565b600061465387846305f5e100614745565b905061465f8282613d57565b979650505050505050565b6000808284106146895761467e8385614ffa565b60009150915061469a565b6146938484614ffa565b6001915091505b9250929050565b60006146ac826146be565b610c2590670de0b6b3a7640000614fdb565b6000610c25670de0b6b3a764000083614fc7565b6000806146e0600284615093565b6146f257670de0b6b3a76400006146f4565b835b9050614701600284614fc7565b92505b821561418a576147148485613d57565b9350614721600284615093565b15614733576147308185613d57565b90505b61473e600284614fc7565b9250614704565b600082818061475c87670de0b6b3a764000061466a565b9092509050670de0b6b3a764000080600060015b88841061482657600061478b82670de0b6b3a7640000614fdb565b90506000806147ab8a6147a685670de0b6b3a7640000613de1565b61466a565b915091506147bd87610cf3848c613d57565b96506147c98784613c7b565b9650866147d857505050614826565b87156147e2579315935b80156147ec579315935b8415614803576147fc8688613de1565b9550614810565b61480d8688614138565b95505b505050808061481e90615078565b915050614770565b50909998505050505050505050565b80356001600160a01b038116811461484c57600080fd5b919050565b60006020828403121561486357600080fd5b61418a82614835565b6000806040838503121561487f57600080fd5b61488883614835565b915061489660208401614835565b90509250929050565b6000806000606084860312156148b457600080fd5b6148bd84614835565b92506148cb60208501614835565b91506148d960408501614835565b90509250925092565b600080600080608085870312156148f857600080fd5b61490185614835565b935061490f60208601614835565b925061491d60408601614835565b9396929550929360600135925050565b60008060006060848603121561494257600080fd5b61494b84614835565b925061495960208501614835565b9150604084013590509250925092565b6000806040838503121561497c57600080fd5b61498583614835565b91506020830135614995816150e9565b809150509250929050565b600080604083850312156149b357600080fd5b6149bc83614835565b946020939093013593505050565b6000602082840312156149dc57600080fd5b815161418a816150e9565b6000602082840312156149f957600080fd5b5051919050565b600080600060608486031215614a1557600080fd5b8335925061495960208501614835565b60008060008060808587031215614a3b57600080fd5b84359350614a4b60208601614835565b93969395505050506040820135916060013590565b600080600060408486031215614a7557600080fd5b8335925060208401356001600160401b0380821115614a9357600080fd5b818601915086601f830112614aa757600080fd5b813581811115614ab657600080fd5b8760208260051b8501011115614acb57600080fd5b6020830194508093505050509250925092565b60008060408385031215614af157600080fd5b50508035926020909101359150565b60008060408385031215614b1357600080fd5b505080516020909101519092909150565b600080600060608486031215614b3957600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614b6857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060008060008060c08789031215614ba457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008251614be0818460208701615011565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020815260008251806020840152614c36816040850160208701615011565b601f01601f19169190910160400192915050565b6020808252601a90820152792cb7ba903237903737ba103430bb32903832b936b4b9b9b4b7b760311b604082015260600190565b60208082526010908201526f2737ba1032b737bab3b4102a37b5b2b760811b604082015260600190565b6020808252600f908201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604082015260600190565b60208082526010908201526f2737ba1032b737bab3b4103a37b5b2b760811b604082015260600190565b60208082526010908201526f4552525f4255595f494e5f524154494f60801b604082015260600190565b60208082526010908201526f11549497d1125597d25395115493905360821b604082015260600190565b60208082526047908201527f4c6971756964697479206973206c6f636b65642c20796f752063616e6e6f742060408201527f72656d6f7665206c697175696469747920756e74696c206166746572206c6f6360608201526635903a34b6b29760c91b608082015260a00190565b6020808252600f908201526e2737ba1032b737bab3b41026b0b4b760891b604082015260600190565b6020808252601a9082015279135a5b9a5b5d5b48185b5bdd5b9d081bdd5d081b9bdd081b595d60321b604082015260600190565b602080825260149082015273131a5c5d5a591a5d1e481b9bdd081b1bd8dad95960621b604082015260600190565b6020808252600f908201526e14ddd85c081b9bdd081bdc195b9959608a1b604082015260600190565b60208082526010908201526f4552525f4d554c5f4f564552464c4f5760801b604082015260600190565b6020808252600e908201526d4552525f53454c4c5f524154494f60901b604082015260600190565b6020808252601290820152714f766572204d41585f4f55545f524154494f60701b604082015260600190565b60208082526033908201527f436f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e7460408201527206572616374207769746820746865205377617606c1b606082015260800190565b6020808252600f908201526e4552525f45524332305f46414c534560881b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b918252602082015260400190565b60008219821115614fc257614fc26150a7565b500190565b600082614fd657614fd66150bd565b500490565b6000816000190483118215151615614ff557614ff56150a7565b500290565b60008282101561500c5761500c6150a7565b500390565b60005b8381101561502c578181015183820152602001615014565b83811115613ee05750506000910152565b600181811c9082168061505157607f821691505b6020821081141561507257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561508c5761508c6150a7565b5060010190565b6000826150a2576150a26150bd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b80151581146150f757600080fd5b5056fec5f954edb6f50c3415e43c4c343ed2fac83243f08807d721c27e2ccb634c36fa908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d43378ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a26469706673582212208f5c475ddbdb0cba8a6e89ee08f8de7b55e30e0740344aaf3371322e03ccbdf164736f6c63430008070033

Deployed Bytecode Sourcemap

12602:27511:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14820:25;;;;;;;;;;;;;;;;;;;20287::1;;;20275:2;20260:18;14820:25:0;;;;;;;;16962:119;;;;;;;;;;-1:-1:-1;16962:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;17049:24:0;17026:4;17049:24;;;:17;:24;;;;;;;;;16962:119;;;;7279:14:1;;7272:22;7254:41;;7242:2;7227:18;16962:119:0;7114:187:1;14959:32:0;;;;;;;;;;;;;;;;14682:28;;;;;;;;;;;;;;;;11108:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15322:46::-;;;;;;;;;;-1:-1:-1;15322:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7499:14:1;;7492:22;7474:41;;7546:2;7531:18;;7524:34;;;;7447:18;15322:46:0;7306:258:1;11476:187:0;;;;;;;;;;-1:-1:-1;11476:187:0;;;;;:::i;:::-;;:::i;16760:190::-;;;;;;;;;;-1:-1:-1;16760:190:0;;;;;:::i;:::-;;:::i;:::-;;39717:393;;;;;;;;;;-1:-1:-1;39717:393:0;;;;;:::i;:::-;;:::i;17945:225::-;;;;;;;;;;-1:-1:-1;17945:225:0;;;;;:::i;:::-;;:::i;21174:382::-;;;;;;;;;;-1:-1:-1;21174:382:0;;;;;:::i;:::-;;:::i;9895:30::-;;;;;;;;;;;;;;;;22641:610;;;;;;;;;;-1:-1:-1;22641:610:0;;;;;:::i;:::-;;:::i;12902:114::-;;;;;;;;;;-1:-1:-1;12902:114:0;;;;;:::i;:::-;;:::i;24636:626::-;;;;;;;;;;-1:-1:-1;24636:626:0;;;;;:::i;:::-;;:::i;26325:1246::-;;;;;;;;;;-1:-1:-1;26325:1246:0;;;;;:::i;:::-;;:::i;16139:209::-;;;;;;;;;;-1:-1:-1;16139:209:0;;;;;:::i;:::-;-1:-1:-1;;;;;16248:17:0;16203:7;16248:17;;;:10;:17;;;;;;;;;16292;;;;;;;;16139:209;;;;;;;;;:::i;11195:28::-;;;;;;;;;;-1:-1:-1;11195:28:0;;;;;;;;;;;21009:4:1;20997:17;;;20979:36;;20967:2;20952:18;11195:28:0;20837:184:1;14499:74:0;;;;;;;;;;-1:-1:-1;14499:74:0;;;;-1:-1:-1;;;;;14499:74:0;;;;;;;;;;:::i;15037:32::-;;;;;;;;;;;;;;;;18182:176;;;;;;;;;;-1:-1:-1;18182:176:0;;;;;:::i;:::-;;:::i;37970:463::-;;;;;;;;;;-1:-1:-1;37970:463:0;;;;;:::i;:::-;;:::i;14279:70::-;;;;;;;;;;-1:-1:-1;14279:70:0;;;;-1:-1:-1;;;;;14279:70:0;;;19677:1486;;;;;;;;;;-1:-1:-1;19677:1486:0;;;;;:::i;:::-;;:::i;15536:39::-;;;;;;;;;;;;15573:2;15536:39;;39310:395;;;;;;;;;;-1:-1:-1;39310:395:0;;;;;:::i;:::-;;:::i;11934:403::-;;;;;;;;;;-1:-1:-1;11934:403:0;;;;;:::i;:::-;;:::i;17775:158::-;;;;;;;;;;;;;:::i;15636:18::-;;;;;;;;;;;;;;;;11363:105;;;;;;;;;;-1:-1:-1;11363:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;11446:14:0;11419:7;11446:14;;;;;;;;;;;;11363:105;25274:1040;;;;;;;;;;-1:-1:-1;25274:1040:0;;;;;:::i;:::-;;:::i;37344:614::-;;;;;;;;;;;;;:::i;37014:318::-;;;;;;;;;;-1:-1:-1;37014:318:0;;;;;:::i;:::-;;:::i;18758:398::-;;;;;;;;;;-1:-1:-1;18758:398:0;;;;;:::i;:::-;;:::i;17264:499::-;;;;;;;;;;-1:-1:-1;17264:499:0;;;;;:::i;:::-;;:::i;15159:24::-;;;;;;;;;;-1:-1:-1;15159:24:0;;;;;;;;11152:36;;;;;;;;;;;;;:::i;15076:35::-;;;;;;;;;;;;;;;;14580:68;;;;;;;;;;-1:-1:-1;14580:68:0;;;;-1:-1:-1;;;;;14580:68:0;;;19168:497;;;;;;;;;;;;;:::i;3582:543::-;;;;;;;;;;-1:-1:-1;3582:543:0;;;;;:::i;:::-;;:::i;14920:32::-;;;;;;;;;;;;;;;;24341:287;;;;;;;;;;-1:-1:-1;24341:287:0;;;;;:::i;:::-;;:::i;31604:2657::-;;;;;;;;;;-1:-1:-1;31604:2657:0;;;;;:::i;:::-;;:::i;34274:2235::-;;;;;;;;;;-1:-1:-1;34274:2235:0;;;;;:::i;:::-;;:::i;23259:1070::-;;;;;;;;;;-1:-1:-1;23259:1070:0;;;;;:::i;:::-;;:::i;15118:34::-;;;;;;;;;;;;;;;;4135:810;;;;;;;;;;-1:-1:-1;4135:810:0;;;;;:::i;:::-;;:::i;21572:1061::-;;;;;;;;;;-1:-1:-1;21572:1061:0;;;;;:::i;:::-;;:::i;29664:1932::-;;;;;;:::i;:::-;;:::i;14427:65::-;;;;;;;;;;-1:-1:-1;14427:65:0;;;;-1:-1:-1;;;;;14427:65:0;;;18370:223;;;;;;;;;;-1:-1:-1;18370:223:0;;;;;:::i;:::-;;:::i;14717:29::-;;;;;;;;;;;;;;;;14356:64;;;;;;;;;;-1:-1:-1;14356:64:0;;;;-1:-1:-1;;;;;14356:64:0;;;11671:255;;;;;;;;;;-1:-1:-1;11671:255:0;;;;;:::i;:::-;;:::i;14998:32::-;;;;;;;;;;;;;;;;11232:123;;;;;;;;;;-1:-1:-1;11232:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;11327:15:0;;;11300:7;11327:15;;;:10;:15;;;;;;;;:20;;;;;;;;;;;;;11232:123;14655:20;;;;;;;;;;-1:-1:-1;14655:20:0;;;;-1:-1:-1;;;;;14655:20:0;;;14753:23;;;;;;;;;;;;;;;;18601:149;;;;;;;;;;-1:-1:-1;18601:149:0;;;;;:::i;:::-;-1:-1:-1;;;;;18719:15:0;18677:7;18719:15;;;:8;:15;;;;;:23;;;;18601:149;4955:853;;;;;;;;;;-1:-1:-1;4955:853:0;;;;;:::i;:::-;;:::i;15661:18::-;;;;;;;;;;;;;;;;15190:24;;;;;;;;;;-1:-1:-1;15190:24:0;;;;;;;;;;;27811:1841;;;;;;;;;;-1:-1:-1;27811:1841:0;;;;;:::i;:::-;;:::i;36521:121::-;;;;;;;;;;;;;:::i;11108:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11476:187::-;11565:10;11537:4;11554:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;11554:27:0;;;;;;;;;;:33;;;11603:30;11537:4;;11554:27;;-1:-1:-1;;;;;;;;;;;11603:30:0;;;11584:3;20287:25:1;;20275:2;20260:18;;20141:177;11603:30:0;;;;;;;;-1:-1:-1;11651:4:0;11476:187;;;;;:::o;16760:190::-;16859:7;;-1:-1:-1;;;;;16859:7:0;16845:10;:21;16837:60;;;;-1:-1:-1;;;16837:60:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;16908:24:0;;;;;;;;:17;:24;;;;;:34;;-1:-1:-1;;16908:34:0;;;;;;;;;;16760:190::o;39717:393::-;15770:1;15935:7;;:19;;15927:63;;;;-1:-1:-1;;;15927:63:0;;;;;;;:::i;:::-;15770:1;16003:7;:18;39843:10:::1;39832:22;::::0;;;:10:::1;:22:::0;;;;;;:32;-1:-1:-1;39832:32:0::1;39824:61;;;;-1:-1:-1::0;;;39824:61:0::1;;;;;;;:::i;:::-;39896:11;39910:29;39915:6;39923:15;39928:3;39933:4;39923;:15::i;:::-;39910:4;:29::i;:::-;39896:43;;39950:12;39965:17;39970:6;39978:3;39965:4;:17::i;:::-;40004:10;39993:22;::::0;;;:10:::1;:22:::0;;;;;:32;;39950;;-1:-1:-1;40019:6:0;;39993:22;;;:32:::1;::::0;40019:6;;39993:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;40036:17:0;::::1;;::::0;;;:10:::1;:17:::0;;;;;:24;;40057:3;;40036:17;:24:::1;::::0;40057:3;;40036:24:::1;:::i;:::-;::::0;;;-1:-1:-1;;40082:11:0::1;::::0;-1:-1:-1;;;;;40082:11:0::1;40071:23;::::0;;;:10:::1;:23:::0;;;;;:31;;40098:4;;40071:23;:31:::1;::::0;40098:4;;40071:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;15726:1:0;16048:7;:22;-1:-1:-1;;;;39717:393:0:o;17945:225::-;18071:10;;-1:-1:-1;;;;;18071:10:0;18057;:24;:42;;;;-1:-1:-1;18095:4:0;;-1:-1:-1;;;;;18085:14:0;;;18095:4;;18085:14;;18057:42;:62;;;;-1:-1:-1;18114:5:0;;-1:-1:-1;;;;;18104:15:0;;;18114:5;;18104:15;;18057:62;18049:88;;;;-1:-1:-1;;;18049:88:0;;10597:2:1;18049:88:0;;;10579:21:1;10636:2;10616:18;;;10609:30;-1:-1:-1;;;10655:18:1;;;10648:43;10708:18;;18049:88:0;10395:337:1;18049:88:0;18148:5;:14;;-1:-1:-1;;;;;;18148:14:0;-1:-1:-1;;;;;18148:14:0;;;;;;;;;;17945:225::o;21174:382::-;-1:-1:-1;;;;;21341:26:0;;;21270:17;21341:26;;;:8;:26;;;;;;21405:27;;;;;;;21464:16;;;;21270:17;;21341:26;21450:88;;21482:14;21487:4;21493:2;21482:4;:14::i;:::-;21498:9;:17;;;21517:14;21522:4;21528:2;21517:4;:14::i;:::-;21533:4;21450:13;:88::i;:::-;21443:95;21174:382;-1:-1:-1;;;;;21174:382:0:o;22641:610::-;15770:1;15935:7;;:19;;15927:63;;;;-1:-1:-1;;;15927:63:0;;;;;;;:::i;:::-;15770:1;16003:7;:18;22745:4:::1;::::0;-1:-1:-1;;;;;22736:13:0;;::::1;22745:4:::0;::::1;22736:13;::::0;:31:::1;;-1:-1:-1::0;22762:5:0::1;::::0;-1:-1:-1;;;;;22753:14:0;;::::1;22762:5:::0;::::1;22753:14;22736:31;22728:40;;;::::0;::::1;;22801:5;::::0;-1:-1:-1;;;;;22792:14:0;;::::1;22801:5:::0;::::1;22792:14;22789:434;;;22837:10;22826:22;::::0;;;:10:::1;:22:::0;;;;;;:29;-1:-1:-1;22826:29:0::1;22818:58;;;;-1:-1:-1::0;;;22818:58:0::1;;;;;;;:::i;:::-;22904:3;22887:13;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;22929:10:0::1;22918:22;::::0;;;:10:::1;:22:::0;;;;;:29;;22944:3;;22918:22;:29:::1;::::0;22944:3;;22918:29:::1;:::i;:::-;::::0;;;-1:-1:-1;;22974:5:0::1;::::0;22958:39:::1;::::0;-1:-1:-1;;;;;22974:5:0::1;22981:10;22993:3:::0;22958:15:::1;:39::i;:::-;22789:434;;;23053:10;23042:22;::::0;;;:10:::1;:22;::::0;;;;;:29;-1:-1:-1;23042:29:0::1;23034:57;;;;-1:-1:-1::0;;;23034:57:0::1;;;;;;;:::i;:::-;23119:3;23102:13;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;23144:10:0::1;23133:22;::::0;;;:10:::1;:22;::::0;;;;:29;;23159:3;;23133:22;:29:::1;::::0;23159:3;;23133:29:::1;:::i;:::-;::::0;;;-1:-1:-1;;23189:4:0::1;::::0;23173:38:::1;::::0;-1:-1:-1;;;;;23189:4:0::1;23195:10;23207:3:::0;23173:15:::1;:38::i;:::-;23233:10;:8;:10::i;:::-;-1:-1:-1::0;;15726:1:0;16048:7;:22;22641:610::o;12902:114::-;-1:-1:-1;;;;;12985:14:0;12956:9;12985:14;;;:9;:14;;;;;:22;;;;12902:114::o;24636:626::-;24714:4;24739:10;-1:-1:-1;;;;;24739:17:0;;;;:55;;-1:-1:-1;;;;;;24767:15:0;;;;;;:10;:15;;;;;;;;24783:10;24767:27;;;;;;;;24760:34;;;24739:55;24731:64;;;;;;24806:8;24817:23;24829:10;24817:11;:23::i;:::-;24806:34;-1:-1:-1;24859:12:0;;24851:96;;;;-1:-1:-1;;;24851:96:0;;;;;;;:::i;:::-;24958:20;24964:3;24969;24974;24958:5;:20::i;:::-;24993:10;-1:-1:-1;;;;;24993:17:0;;;;;;:69;;-1:-1:-1;;;;;;25014:15:0;;;;;;:10;:15;;;;;;;;25030:10;25014:27;;;;;;;;-1:-1:-1;;25014:48:0;;24993:69;24989:244;;;-1:-1:-1;;;;;25114:15:0;;;;;;:10;:15;;;;;;;;25130:10;25114:27;;;;;;;;25109:38;;25143:3;25109:4;:38::i;:::-;-1:-1:-1;;;;;25079:15:0;;;;;;;:10;:15;;;;;;;;25095:10;25079:27;;;;;;;;;;:68;;;25167:54;20287:25:1;;;25167:54:0;;;;25095:10;;-1:-1:-1;;;;;;;;;;;25167:54:0;20260:18:1;25167:54:0;;;;;;;24989:244;-1:-1:-1;25250:4:0;;24636:626;-1:-1:-1;;;;24636:626:0:o;26325:1246::-;15770:1;15935:7;;:19;;15927:63;;;;-1:-1:-1;;;15927:63:0;;;;;;;:::i;:::-;15770:1;16003:7;:18;26459:8:::1;26470:23;26482:10;26470:11;:23::i;:::-;26459:34:::0;-1:-1:-1;26512:12:0;::::1;26504:96;;;;-1:-1:-1::0;;;26504:96:0::1;;;;;;;:::i;:::-;26611:6;:4;:6::i;:::-;26648:11;::::0;26628:17:::1;26686:29;26691:12:::0;26648:11;26686:4:::1;:29::i;:::-;26670:45:::0;-1:-1:-1;26734:10:0;26726:38:::1;;;;-1:-1:-1::0;;;26726:38:0::1;;;;;;;:::i;:::-;26777:31;26783:10;26795:12;26777:5;:31::i;:::-;26819:19;26825:12;26819:5;:19::i;:::-;26864:9;26859:471;26883:7;:14:::0;26879:18;::::1;26859:471;;;26919:9;26931:7;26939:1;26931:10;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;26931:10:0::1;26970:11:::0;;;:8:::1;:11:::0;;;;;;26931:10;26970:19:::1;::::0;26931:10;;-1:-1:-1;26970:19:0;27029:16:::1;27034:5:::0;26970:19;27029:4:::1;:16::i;:::-;27004:41:::0;-1:-1:-1;27068:19:0;27060:47:::1;;;;-1:-1:-1::0;;;27060:47:0::1;;;;;;;:::i;:::-;27148:13;;27162:1;27148:16;;;;;;;:::i;:::-;;;;;;;27130:14;:34;;27122:73;;;;-1:-1:-1::0;;;27122:73:0::1;;;;;;;:::i;:::-;27236:1;-1:-1:-1::0;;;;;27215:42:0::1;27224:10;-1:-1:-1::0;;;;;27215:42:0::1;;27239:14;27255:1;27215:42;;;;;;;:::i;:::-;;;;;;;;27272:46;27288:1;27291:10;27303:14;27272:15;:46::i;:::-;26904:426;;;26899:3;;;;;:::i;:::-;;;;26859:471;;;;27340:6;:4;:6::i;:::-;27370:5;::::0;-1:-1:-1;;;;;27370:5:0::1;:19:::0;27367:197:::1;;27435:5;::::0;27428:38:::1;::::0;-1:-1:-1;;;27428:38:0;;27401:12:::1;::::0;27416:51:::1;::::0;27421:5;;-1:-1:-1;;;;;27435:5:0::1;::::0;27428:23:::1;::::0;:38:::1;::::0;27460:4:::1;::::0;27428:38:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27416:51::-;27401:66:::0;-1:-1:-1;27481:8:0;;27478:75:::1;;27517:5;::::0;27501:40:::1;::::0;-1:-1:-1;;;;;27517:5:0::1;27524:10;27536:4:::0;27501:15:::1;:40::i;:::-;27390:174;27367:197;-1:-1:-1::0;;15726:1:0;16048:7;:22;-1:-1:-1;;;;26325:1246:0:o;18182:176::-;18260:7;;-1:-1:-1;;;;;18260:7:0;18246:10;:21;:45;;;;-1:-1:-1;;;;;;18271:20:0;;;;18246:45;18238:84;;;;-1:-1:-1;;;18238:84:0;;;;;;;:::i;:::-;18333:8;:17;;-1:-1:-1;;;;;;18333:17:0;-1:-1:-1;;;;;18333:17:0;;;;;;;;;;18182:176::o;37970:463::-;38183:11;;-1:-1:-1;;;;;38183:11:0;38169:10;:25;38161:64;;;;-1:-1:-1;;;38161:64:0;;;;;;;:::i;:::-;38236:8;38247:17;38259:4;38247:11;:17::i;:::-;38236:28;-1:-1:-1;38290:4:0;38283:11;;;;38275:44;;;;-1:-1:-1;;;38275:44:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38354:17:0;;38330:21;38354:17;;;:11;:17;;;;;38400:24;:15;38418:6;38400:24;:::i;:::-;38382:15;;;;:42;-1:-1:-1;;37970:463:0:o;19677:1486::-;19791:4;;;;:13;19783:43;;;;-1:-1:-1;;;19783:43:0;;13488:2:1;19783:43:0;;;13470:21:1;13527:2;13507:18;;;13500:30;-1:-1:-1;;;13546:18:1;;;13539:47;13603:18;;19783:43:0;13286:341:1;19783:43:0;19859:10;;-1:-1:-1;;;;;19859:10:0;19845;:24;19837:51;;;;-1:-1:-1;;;19837:51:0;;10254:2:1;19837:51:0;;;10236:21:1;10293:2;10273:18;;;10266:30;-1:-1:-1;;;10312:18:1;;;10305:44;10366:18;;19837:51:0;10052:338:1;19837:51:0;19936:4;:9;;;19972:4;;19915:10;;19956:42;;-1:-1:-1;;;;;19972:4:0;19915:10;19990:7;19956:15;:42::i;:::-;20025:5;;20009:44;;-1:-1:-1;;;;;20025:5:0;20032:10;20044:8;20009:15;:44::i;:::-;20081:15;20064:14;:32;20123:6;20107:13;:22;20162:5;;20155:38;;-1:-1:-1;;;20155:38:0;;-1:-1:-1;;;;;;;20162:5:0;;20155:23;;:38;;20187:4;;20155:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20227:4;;20220:37;;-1:-1:-1;;;20220:37:0;;20140:53;;-1:-1:-1;20204:13:0;;-1:-1:-1;;;;;20227:4:0;;;;20220:22;;:37;;20251:4;;20220:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20296:97;;;;;;;;20325:7;:14;;20296:97;;;;;;;;;20287:5;;;-1:-1:-1;;;;;20287:5:0;;;-1:-1:-1;20278:15:0;;;:8;:15;;;;;;:115;;;;;;20287:5;20278:115;;;;20431:84;;;;;;;20460:14;;20431:84;;;;;;;;20423:4;;;;;20414:14;;;;;;;;;:101;;;;;;;;;;;;;20549:5;;20536:19;;;;;;;;;;;;;20549:5;;;-1:-1:-1;;;;;;20536:19:0;;;;;;20579:4;;20566:18;;;;;;;;;;;;;;20579:4;;;20566:18;;;;;;;;;;;20621:5;;;;20612:15;;;;;:23;;20431:84;;-1:-1:-1;;20607:34:0;;20637:3;20607:4;:34::i;:::-;20678:4;;-1:-1:-1;;;;;20678:4:0;20652:9;20669:14;;;:8;:14;;;;;20678:4;20669:22;;20595:46;;-1:-1:-1;20652:9:0;20664:34;;20693:4;20664;:34::i;:::-;20652:46;;20709:17;20715:10;20720:1;20723;20715:4;:10::i;:::-;20709:5;:17::i;:::-;20755:33;20760:15;;20777:10;20782:1;20785;20777:4;:10::i;:::-;20755:4;:33::i;:::-;20737:15;:51;20799:24;20805:5;20812:10;20817:1;20820;20812:4;:10::i;:::-;20799:5;:24::i;:::-;-1:-1:-1;;;;;20860:16:0;;20835:22;20860:16;;;:9;:16;;;;;;;;20911:11;:18;;;;;;20940:20;;-1:-1:-1;;20940:20:0;20956:4;20940:20;;;20989:26;:15;21007:8;20989:26;:::i;:::-;20971:15;;;;:44;;;;21027:4;:11;;-1:-1:-1;;21027:11:0;;;;;;21055:2;21049:3;:8;21074:31;21079:3;21084:20;21089:4;21095:8;21084:4;:20::i;21074:31::-;21068:3;:37;21123:31;21128:3;21133:20;21138:5;21145:7;21133:4;:20::i;21123:31::-;21117:3;:37;-1:-1:-1;;;;;;;;;;19677:1486:0:o;39310:395::-;15770:1;15935:7;;:19;;15927:63;;;;-1:-1:-1;;;15927:63:0;;;;;;;:::i;:::-;15770:1;16003:7;:18;39438:10:::1;39427:22;::::0;;;:10:::1;:22;::::0;;;;;:32;-1:-1:-1;39427:32:0::1;39419:61;;;;-1:-1:-1::0;;;39419:61:0::1;;;;;;;:::i;:::-;39491:11;39505:29;39510:6;39518:15;39523:3;39528:4;39518;:15::i;39505:29::-;39491:43;;39545:12;39560:17;39565:6;39573:3;39560:4;:17::i;:::-;39599:10;39588:22;::::0;;;:10:::1;:22;::::0;;;;:32;;39545;;-1:-1:-1;39614:6:0;;39588:22;;;:32:::1;::::0;39614:6;;39588:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;39631:17:0;::::1;;::::0;;;:10:::1;:17;::::0;;;;:24;;39652:3;;39631:17;:24:::1;::::0;39652:3;;39631:24:::1;:::i;:::-;::::0;;;-1:-1:-1;;39677:11:0::1;::::0;-1:-1:-1;;;;;39677:11:0::1;39666:23;::::0;;;:10:::1;:23;::::0;;;;:31;;39693:4;;39666:23;:31:::1;::::0;39693:4;;39666:31:::1;:::i;11934:403::-:0;12051:10;12004:4;12040:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12040:27:0;;;;;;;;;;12082:14;;;12078:160;;;12124:10;12143:1;12113:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12113:27:0;;;;;;;;;:31;12078:160;;;12207:19;12212:8;12222:3;12207:4;:19::i;:::-;12188:10;12177:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12177:27:0;;;;;;;;;:49;12078:160;12262:10;12279:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12253:54:0;;12279:27;;;;;;;;;;;12253:54;;20287:25:1;;;12253:54:0;;12262:10;-1:-1:-1;;;;;;;;;;;12253:54:0;20260:18:1;12253:54:0;;;;;;;-1:-1:-1;12325:4:0;;11934:403;-1:-1:-1;;;11934:403:0:o;17775:158::-;17892:10;;-1:-1:-1;;;;;17892:10:0;17878;:24;17870:33;;;;;;17914:4;:11;;-1:-1:-1;;17914:11:0;;;;;17775:158::o;25274:1040::-;15770:1;15935:7;;:19;;15927:63;;;;-1:-1:-1;;;15927:63:0;;;;;;;:::i;:::-;15770:1;16003:7;:18;25405:6:::1;:4;:6::i;:::-;25442:11;::::0;25422:17:::1;25480:30;25485:13:::0;25442:11;25480:4:::1;:30::i;:::-;25464:46:::0;-1:-1:-1;25529:10:0;25521:38:::1;;;;-1:-1:-1::0;;;25521:38:0::1;;;;;;;:::i;:::-;25590:8;25601:23;25613:10;25601:11;:23::i;:::-;25590:34:::0;-1:-1:-1;25645:4:0::1;25638:11:::0;::::1;;;25635:74;;;25680:13;25661:15;;:32;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;25635:74:0::1;25734:9;25729:466;25753:7;:14:::0;25749:18;::::1;25729:466;;;25789:9;25801:7;25809:1;25801:10;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;25801:10:0::1;25840:11:::0;;;:8:::1;:11:::0;;;;;;25801:10;25840:19:::1;::::0;25801:10;;-1:-1:-1;25840:19:0;25912:16:::1;25917:5:::0;25840:19;25912:4:::1;:16::i;:::-;25888:40:::0;-1:-1:-1;25952:18:0;25944:46:::1;;;;-1:-1:-1::0;;;25944:46:0::1;;;;;;;:::i;:::-;26030:12;;26043:1;26030:15;;;;;;;:::i;:::-;;;;;;;26013:13;:32;;26005:57;;;::::0;-1:-1:-1;;;26005:57:0;;12803:2:1;26005:57:0::1;::::0;::::1;12785:21:1::0;12842:2;12822:18;;;12815:30;-1:-1:-1;;;12861:18:1;;;12854:42;12913:18;;26005:57:0::1;12601:336:1::0;26005:57:0::1;26103:1;-1:-1:-1::0;;;;;26082:41:0::1;26091:10;-1:-1:-1::0;;;;;26082:41:0::1;;26106:13;26121:1;26082:41;;;;;;;:::i;:::-;;;;;;;;26138:45;26154:1;26157:10;26169:13;26138:15;:45::i;:::-;25774:421;;;25769:3;;;;;:::i;:::-;;;;25729:466;;;;26205:10;:8;:10::i;:::-;26226:6;:4;:6::i;:::-;26243:20;26249:13;26243:5;:20::i;:::-;26274:32;26280:10;26292:13;26274:5;:32::i;37344:614::-:0;15770:1;15935:7;;:19;;15927:63;;;;-1:-1:-1;;;15927:63:0;;;;;;;:::i;:::-;15770:1;16003:7;:18;37481:10:::1;37466:12;37513:17;37481:10:::0;37513:11:::1;:17::i;:::-;37502:28:::0;-1:-1:-1;37556:4:0::1;37549:11:::0;::::1;;;37541:44;;;;-1:-1:-1::0;;;37541:44:0::1;;;;;;;:::i;:::-;37612:37;::::0;-1:-1:-1;;;37612:37:0;;37596:13:::1;::::0;37627:4:::1;::::0;37612:31:::1;::::0;:37:::1;::::0;37644:4;;37612:37:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37596:53;;37679:5;37660:15;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;37720:15:0;::::1;37695:22;37720:15:::0;;;:9:::1;:15;::::0;;;;;;;37770:11:::1;:17:::0;;;;;;37826:15:::1;::::0;::::1;::::0;37807::::1;:34;;37798:119;;;;-1:-1:-1::0;;;37798:119:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;37928:21:0;;-1:-1:-1;;37928:21:0::1;::::0;;-1:-1:-1;;37928:21:0;16048:7;:22;-1:-1:-1;37344:614:0:o;37014:318::-;37101:10;;-1:-1:-1;;;;;37101:10:0;37087;:24;37079:63;;;;-1:-1:-1;;;37079:63:0;;;;;;;:::i;:::-;37169:2;37161:4;:10;;:23;;;;-1:-1:-1;37175:9:0;;;37161:23;37153:57;;;;-1:-1:-1;;;37153:57:0;;9904:2:1;37153:57:0;;;9886:21:1;9943:2;9923:18;;;9916:30;-1:-1:-1;;;9962:18:1;;;9955:51;10023:18;;37153:57:0;9702:345:1;37153:57:0;37238:3;37230:4;:11;;:27;;;;;37253:4;37245;:12;;37230:27;37222:59;;;;-1:-1:-1;;;37222:59:0;;9556:2:1;37222:59:0;;;9538:21:1;9595:2;9575:18;;;9568:30;-1:-1:-1;;;9614:18:1;;;9607:49;9673:18;;37222:59:0;9354:343:1;37222:59:0;37293:3;:10;37314:3;:10;37014:318::o;18758:398::-;18873:11;;-1:-1:-1;;;;;18873:11:0;18859:10;:25;18851:64;;;;-1:-1:-1;;;18851:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18934:21:0;;;;;;:42;;-1:-1:-1;;;;;;18959:17:0;;;;18934:42;18926:75;;;;-1:-1:-1;;;18926:75:0;;10939:2:1;18926:75:0;;;10921:21:1;10978:2;10958:18;;;10951:30;-1:-1:-1;;;10997:18:1;;;10990:50;11057:18;;18926:75:0;10737:344:1;18926:75:0;19012:11;:21;;-1:-1:-1;;;;;19012:21:0;;;-1:-1:-1;;;;;;19012:21:0;;;;;;;19044:7;:13;;;;;;;;;;;;;;;19068:10;:15;;;;;;;;;;;18758:398::o;17264:499::-;17365:10;;-1:-1:-1;;;;;17365:10:0;17351;:24;17343:63;;;;-1:-1:-1;;;17343:63:0;;;;;;;:::i;:::-;17440:5;;-1:-1:-1;;;;;17440:5:0;;;17417:11;17431:15;;;:8;:15;;;;;;17440:5;17431:23;;;;17488:4;;;;;17479:14;;;;:22;;17532:4;17521:15;;;;;:33;;;17551:3;17540:7;:14;;17521:33;17512:82;;;;-1:-1:-1;;;17512:82:0;;14538:2:1;17512:82:0;;;14520:21:1;14577:2;14557:18;;;14550:30;14616:34;14596:18;;;14589:62;-1:-1:-1;;;14667:18:1;;;14660:33;14710:19;;17512:82:0;14336:399:1;17512:82:0;17625:6;17615;:16;;:33;;;;;17645:3;17635:6;:13;;17615:33;17606:81;;;;-1:-1:-1;;;17606:81:0;;18538:2:1;17606:81:0;;;18520:21:1;18577:2;18557:18;;;18550:30;18616:34;18596:18;;;18589:62;-1:-1:-1;;;18667:18:1;;;18660:32;18709:19;;17606:81:0;18336:398:1;17606:81:0;-1:-1:-1;;17698:14:0;:24;;;;17733:13;:22;17264:499::o;11152:36::-;;;;;;;:::i;19168:497::-;15770:1;15935:7;;:19;;15927:63;;;;-1:-1:-1;;;15927:63:0;;;;;;;:::i;:::-;15770:1;16003:7;:18;19260:10:::1;19230:12;19292:17;19260:10:::0;19292:11:::1;:17::i;:::-;19281:28:::0;-1:-1:-1;19328:12:0;::::1;19320:49;;;::::0;-1:-1:-1;;;19320:49:0;;9203:2:1;19320:49:0::1;::::0;::::1;9185:21:1::0;9242:2;9222:18;;;9215:30;-1:-1:-1;;;9261:18:1;;;9254:54;9325:18;;19320:49:0::1;9001:348:1::0;19320:49:0::1;19396:37;::::0;-1:-1:-1;;;19396:37:0;;19380:13:::1;::::0;19411:4:::1;::::0;19396:31:::1;::::0;:37:::1;::::0;19428:4;;19396:37:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19469:15:0;::::1;19444:22;19469:15:::0;;;:9:::1;:15;::::0;;;;;;;19519:11:::1;:17:::0;;;;;;19547:20;;-1:-1:-1;;19547:20:0::1;19563:4;19547:20;::::0;;19380:53;;-1:-1:-1;19469:15:0;19596:25:::1;:15;19614:7;19596:25;:::i;:::-;19578:4;:15;;:43;;;;19652:5;19633:15;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;15726:1:0;16048:7;:22;-1:-1:-1;;;;;19168:497:0:o;3582:543::-;3809:17;3844:13;3860:35;3865:14;3881:13;3860:4;:35::i;:::-;3844:51;;3906:13;3922:37;3927:15;3944:14;3922:4;:37::i;:::-;3906:53;;3970:13;3986:18;3991:5;3998;3986:4;:18::i;:::-;3970:34;;4015:13;4031:35;4036:6;4044:21;4049:6;4057:7;4044:4;:21::i;:::-;4031:4;:35::i;:::-;4015:51;;4098:18;4103:5;4110;4098:4;:18::i;:::-;4086:30;3582:543;-1:-1:-1;;;;;;;;;;3582:543:0:o;24341:287::-;24402:4;24419:8;24430:23;24442:10;24430:11;:23::i;:::-;24419:34;-1:-1:-1;24472:12:0;;24464:96;;;;-1:-1:-1;;;24464:96:0;;;;;;;:::i;:::-;24571:27;24577:10;24589:3;24594;24571:5;:27::i;:::-;-1:-1:-1;24616:4:0;;24341:287;-1:-1:-1;;;24341:287:0:o;31604:2657::-;31781:22;15770:1;15935:7;;:19;;15927:63;;;;-1:-1:-1;;;15927:63:0;;;;;;;:::i;:::-;15770:1;16003:7;:18;31839:4:::1;::::0;::::1;;::::0;;::::1;;:12;;:4;:12;31831:40;;;;-1:-1:-1::0;;;31831:40:0::1;;;;;;;:::i;:::-;31885:30;31904:10;31885:18;:30::i;:::-;:38;;31919:4;31885:38;31882:141;;;31951:4;;31944:3;:11;31936:75;;;;-1:-1:-1::0;;;31936:75:0::1;;;;;;;:::i;:::-;32065:3;::::0;32058:42:::1;::::0;-1:-1:-1;;;32058:42:0;;32043:12:::1;::::0;-1:-1:-1;;;;;32065:3:0::1;::::0;32058:21:::1;::::0;:42:::1;::::0;32088:10:::1;::::0;32058:42:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32043:57;;32138:1;32114:21;:25;:41;;;;;32151:4;32143;:12;;32114:41;:67;;;;;32177:4;32159:14;:22;;32114:67;32111:106;;;32193:12;:10;:12::i;:::-;32260:5;::::0;-1:-1:-1;;;;;32260:5:0::1;32237:11;32251:15:::0;;;:8:::1;:15;::::0;;;;32260:5;32251:23:::1;::::0;;32285:49:::1;::::0;32308:10:::1;32320:13:::0;32285:15:::1;:49::i;:::-;32345:17;:15;:17::i;:::-;32409:5;::::0;-1:-1:-1;;;;;32409:5:0::1;32373:18;32400:15:::0;;;:8:::1;:15;::::0;;;;32409:5;32400:23:::1;::::0;32394:54:::1;::::0;32400:29:::1;::::0;32426:3;;32400:29:::1;:::i;:::-;32432:15;32437:3;32442:4;32432;:15::i;32394:54::-;32373:75;;32484:14;;32467:13;:31;;32459:58;;;;-1:-1:-1::0;;;32459:58:0::1;;;;;;;:::i;:::-;32568:4;::::0;-1:-1:-1;;;;;32568:4:0::1;32559:14;::::0;;;:8:::1;:14;::::0;;;;32568:4;32559:22:::1;::::0;32554:50:::1;::::0;32583:20:::1;15573:2;32599:3;32583:4;:20::i;32554:50::-;32536:14;:68;;32528:99;;;;-1:-1:-1::0;;;32528:99:0::1;;;;;;;:::i;:::-;32649:18;32709:406;32770:3;32820:14;32825:4;32831:2;32820:4;:14::i;:::-;32890:4;::::0;-1:-1:-1;;;;;32890:4:0::1;32881:14;::::0;;;:8:::1;:14;::::0;;;;32890:4;32881:22:::1;::::0;32950:14:::1;32955:4;32961:2;32950:4;:14::i;:::-;33011:10;33068:4;32709:14;:406::i;:::-;32678:437:::0;;-1:-1:-1;32678:437:0;-1:-1:-1;33177:30:0;;::::1;;33169:69;;;;-1:-1:-1::0;;;33169:69:0::1;;;;;;;:::i;:::-;33249:12;33264:37;33269:14;33285:15;33290:3;;33295:4;33285;:15::i;33264:37::-;33249:52;;33312:18;33334:27;33339:4;33345:15;33350:2;33354:5;33345:4;:15::i;33334:27::-;33312:49;;33372:11;33386:27;33391:4;33397:15;33402:2;33406:5;33397:4;:15::i;33386:27::-;33372:41;;33424:19;33447:28;33452:4;33458:16;33463:3;;33468:5;33458:4;:16::i;33447:28::-;33424:51:::0;-1:-1:-1;33486:10:0::1;33424:51:::0;33508:16:::1;33521:3:::0;33508:10;:16:::1;:::i;:::-;:30;;;;:::i;:::-;33500:39;::::0;:4;:39:::1;:::i;:::-;33486:54;;33551:19;33573:25;33578:2;33582:15;33587:3;33592:4;33582;:15::i;33573:25::-;33641:4;33609:10;33622:25:::0;;;:10:::1;:25;::::0;;;;;33551:47;;-1:-1:-1;33666:4:0::1;33661:9:::0;::::1;33658:95;;;33699:2;33682:13;;:19;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;33731:4:0::1;33740:1;33712:25:::0;;;:10:::1;:25;::::0;;;;:29;33658:95:::1;33778:4;::::0;-1:-1:-1;;;;;33778:4:0::1;33773:19;33812:10:::0;33793:16:::1;33807:2:::0;33793:11;:16:::1;:::i;:::-;:29;;;;:::i;:::-;33773:50;;;;;;;;;;;;;20287:25:1::0;;20275:2;20260:18;;20141:177;33773:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33834:68;33865:2;33869:32;33874:11;33887:13;33892:2;33896:3;33887:4;:13::i;33869:32::-;33834:30;:68::i;:::-;33930:23;33935:2;33939:13;33944:1;33947:4;33939;:13::i;33930:23::-;33913:13;;:40;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;33975:14:0::1;::::0;-1:-1:-1;;;;;33975:14:0::1;33964:26;::::0;;;:10:::1;:26;::::0;;;;:41;;33994:11;;33964:26;:41:::1;::::0;33994:11;;33964:41:::1;:::i;:::-;;;;;;;;34033:11;34016:13;;:28;;;;;;;:::i;:::-;;;;;;;;34072:3;34055:13;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;34086:11:0::1;::::0;-1:-1:-1;34086:9:0::1;:11::i;:::-;34108:16;:14;:16::i;:::-;34169:4;::::0;34162:5:::1;::::0;34210:3:::1;::::0;-1:-1:-1;;;;;34169:4:0;;::::1;::::0;34162:5;;::::1;::::0;34150:10:::1;::::0;-1:-1:-1;;;;;;;;;;;34141:80:0;34175:10;;34187:33:::1;::::0;34192:11;;34205:14:::1;::::0;34215:3:::1;34205:4;:14::i;34187:33::-;34141:80;;;;;;;:::i;:::-;;;;;;;;34232:21;;;;;;;;;;;15726:1:::0;16048:7;:22;31604:2657;;-1:-1:-1;;;;31604:2657:0:o;34274:2235::-;34412:22;15770:1;15935:7;;:19;;15927:63;;;;-1:-1:-1;;;15927:63:0;;;;;;;:::i;:::-;15770:1;16003:7;:18;34474:3:::1;::::0;34467:42:::1;::::0;-1:-1:-1;;;34467:42:0;;34452:12:::1;::::0;-1:-1:-1;;;;;34474:3:0::1;::::0;34467:21:::1;::::0;:42:::1;::::0;34497:10:::1;::::0;34467:42:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34452:57;;34547:1;34523:21;:25;:41;;;;;34560:4;34552;:12;;34523:41;:67;;;;;34586:4;34568:14;:22;;34523:67;34520:106;;;34602:12;:10;:12::i;:::-;34703:10;34646:11;34692:22:::0;;;:10:::1;:22:::0;;;;;;34660:13;;34692:29;-1:-1:-1;34692:29:0::1;34684:58;;;;-1:-1:-1::0;;;34684:58:0::1;;;;;;;:::i;:::-;34796:5;::::0;-1:-1:-1;;;;;34796:5:0;;::::1;34753:23;34779:24:::0;;;:8:::1;:24;::::0;;;;;34858:4:::1;::::0;;;::::1;34841:23:::0;;;;34890:14:::1;::::0;34883:21;::::1;;34875:48;;;;-1:-1:-1::0;;;34875:48:0::1;;;;;;;:::i;:::-;34960:45;34965:9;:17;;;34984:20;15573:2;35000:3;34984:4;:20::i;34960:45::-;34942:14;:63;;34934:94;;;;-1:-1:-1::0;;;34934:94:0::1;;;;;;;:::i;:::-;35049:18;35109:430;35170:8;:16;;;35233:14;35238:4;35244:2;35233:4;:14::i;:::-;35294:9;:17;;;35358:14;35363:4;35369:2;35358:4;:14::i;:::-;35419:26;35424:3;35429:15;35434:3;35439:4;35429;:15::i;35419:26::-;35492:4;35109:14;:430::i;:::-;35078:461;;;;;;;;35560:12;35575:37;35580:14;35596:15;35601:3;;35606:4;35596;:15::i;35575:37::-;35560:52;;35623:18;35645:27;35650:4;35656:15;35661:2;35665:5;35656:4;:15::i;35645:27::-;35623:49;;35683:11;35697:27;35702:4;35708:15;35713:2;35717:5;35708:4;:15::i;35697:27::-;35683:41;;35735:19;35758:28;35763:4;35769:16;35774:3;;35779:5;35769:4;:16::i;35758:28::-;35735:51:::0;-1:-1:-1;35797:10:0::1;35735:51:::0;35819:16:::1;35832:3:::0;35819:10;:16:::1;:::i;:::-;:30;;;;:::i;:::-;35811:39;::::0;:4;:39:::1;:::i;:::-;35797:54;;35862:19;35884:25;35889:2;35893:15;35898:3;35903:4;35893;:15::i;35884:25::-;35958:4;::::0;35951:5:::1;::::0;35925:56:::1;::::0;35862:47;;-1:-1:-1;;;;;;35958:4:0;;::::1;::::0;35951:5;::::1;::::0;35939:10:::1;::::0;-1:-1:-1;;;;;;;;;;;35925:56:0;::::1;::::0;35964:3;;35862:47;;35925:56:::1;:::i;:::-;;;;;;;;36009:23;36014:2;36018:13;36023:1;36026:4;36018;:13::i;36009:23::-;35992:13;;:40;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;36051:27:0;;::::1;;36043:66;;;;-1:-1:-1::0;;;36043:66:0::1;;;;;;;:::i;:::-;36131:10;36120:22;::::0;;;:10:::1;:22:::0;;;;;:29;;36146:3;;36120:22;:29:::1;::::0;36146:3;;36120:29:::1;:::i;:::-;;;;;;;;36177:3;36160:13;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;36202:10:0::1;36191:22;::::0;;;:10:::1;:22;::::0;;;;:37;;36217:11;;36191:22;:37:::1;::::0;36217:11;;36191:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;36258:4:0::1;36239:25;::::0;;;:10:::1;:25;::::0;;;;:39;;36268:10;;36239:25;:39:::1;::::0;36268:10;;36239:39:::1;:::i;:::-;::::0;;;-1:-1:-1;;36300:14:0::1;::::0;-1:-1:-1;;;;;36300:14:0::1;36289:26;::::0;;;:10:::1;:26;::::0;;;;:41;;36319:11;;36289:26;:41:::1;::::0;36319:11;;36289:41:::1;:::i;:::-;::::0;;;-1:-1:-1;36386:11:0;;-1:-1:-1;36359:24:0::1;36372:11:::0;36359:10;:24:::1;:::i;:::-;:38;;;;:::i;:::-;36341:13;;:57;;;;;;;:::i;:::-;;;;;;;;36426:3;36409:13;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;36440:6:0::1;::::0;-1:-1:-1;36440:4:0::1;:6::i;:::-;36457:11;:9;:11::i;:::-;36479:22;;;;;;;;;;;15726:1:::0;16048:7;:22;34274:2235;;-1:-1:-1;;34274:2235:0:o;23259:1070::-;15770:1;15935:7;;:19;;15927:63;;;;-1:-1:-1;;;15927:63:0;;;;;;;:::i;:::-;15770:1;16003:7;:18;23383:4:::1;::::0;-1:-1:-1;;;;;23374:13:0;;::::1;23383:4:::0;::::1;23374:13;::::0;:31:::1;;-1:-1:-1::0;23400:5:0::1;::::0;-1:-1:-1;;;;;23391:14:0;;::::1;23400:5:::0;::::1;23391:14;23374:31;23366:40;;;::::0;::::1;;23439:4;::::0;-1:-1:-1;;;;;23430:13:0;;::::1;23439:4:::0;::::1;23430:13;23427:874;;;23474:10;23463:22;::::0;;;:10:::1;:22;::::0;;;;;:29;-1:-1:-1;23463:29:0::1;23455:57;;;;-1:-1:-1::0;;;23455:57:0::1;;;;;;;:::i;:::-;23538:4;::::0;23523:49:::1;::::0;-1:-1:-1;;;23523:49:0;;-1:-1:-1;;;;;23538:4:0;;::::1;::::0;23523:29:::1;::::0;:49:::1;::::0;23561:4;;23568:3;;23523:49:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23603:3;23586:13;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;23628:10:0::1;23617:22;::::0;;;:10:::1;:22;::::0;;;;:29;;23643:3;;23617:22;:29:::1;::::0;23643:3;;23617:29:::1;:::i;:::-;::::0;;;-1:-1:-1;;23684:4:0::1;::::0;23657:37:::1;::::0;-1:-1:-1;;;23657:37:0;;-1:-1:-1;;;;;23657:26:0;;::::1;::::0;::::1;::::0;:37:::1;::::0;23684:4;;::::1;::::0;23690:3;;23657:37:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23706:14;23722:13:::0;23749:4:::1;-1:-1:-1::0;;;;;23739:35:0::1;;23783:4;23739:50;;;;;;;;;;;;;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23800:29;::::0;-1:-1:-1;;;23800:29:0;;23705:84;;-1:-1:-1;23705:84:0;-1:-1:-1;;;;;;23800:18:0;::::1;::::0;::::1;::::0;:29:::1;::::0;23819:2;;23705:84;;23800:29:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23427:874:0::1;::::0;-1:-1:-1;;;;;23427:874:0::1;;23912:10;23901:22;::::0;;;:10:::1;:22:::0;;;;;;:29;-1:-1:-1;23901:29:0::1;23893:58;;;;-1:-1:-1::0;;;23893:58:0::1;;;;;;;:::i;:::-;23977:5;::::0;23962:50:::1;::::0;-1:-1:-1;;;23962:50:0;;-1:-1:-1;;;;;23977:5:0;;::::1;::::0;23962:30:::1;::::0;:50:::1;::::0;24001:4;;24008:3;;23962:50:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24040:3;24023:13;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24065:10:0::1;24054:22;::::0;;;:10:::1;:22:::0;;;;;:29;;24080:3;;24054:22;:29:::1;::::0;24080:3;;24054:29:::1;:::i;:::-;::::0;;;-1:-1:-1;;24121:5:0::1;::::0;24094:38:::1;::::0;-1:-1:-1;;;24094:38:0;;-1:-1:-1;;;;;24094:26:0;;::::1;::::0;::::1;::::0;:38:::1;::::0;24121:5;;::::1;::::0;24128:3;;24094:38:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24144:14;24160:13:::0;24187:4:::1;-1:-1:-1::0;;;;;24177:35:0::1;;24221:4;24177:50;;;;;;;;;;;;;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24238:31;::::0;-1:-1:-1;;;24238:31:0;;24143:84;;-1:-1:-1;24143:84:0;-1:-1:-1;;;;;;24238:19:0;::::1;::::0;::::1;::::0;:31:::1;::::0;24258:2;;24143:84;;24238:31:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;23427:874:0::1;24311:10;:8;:10::i;:::-;-1:-1:-1::0;;15726:1:0;16048:7;:22;-1:-1:-1;;23259:1070:0:o;4135:810::-;4395:22;4419:18;4455:19;4477:35;4482:13;4497:14;4477:4;:35::i;:::-;4455:57;;4523:18;4544:21;4549:6;4557:7;4544:4;:21::i;:::-;4523:42;;4589:31;4594:13;4609:10;4589:4;:31::i;:::-;4576:44;;4631:9;4643:54;4648:14;4664:32;4669:14;4685:10;4664:4;:32::i;4643:54::-;4631:66;;4708:11;4722:20;4727:1;4730:11;4722:4;:20::i;:::-;4708:34;;4753:11;4767:15;4772:4;4778:3;4767:4;:15::i;:::-;4753:29;;4810:26;4815:15;4832:3;4810:4;:26::i;:::-;4793:43;;4860:31;4865:13;4880:10;4860:4;:31::i;:::-;4847:44;;4902:35;;;;;4135:810;;;;;;;;;:::o;21572:1061::-;15770:1;15935:7;;:19;;15927:63;;;;-1:-1:-1;;;15927:63:0;;;;;;;:::i;:::-;15770:1;16003:7;:18;21676:4:::1;::::0;-1:-1:-1;;;;;21667:13:0;;::::1;21676:4:::0;::::1;21667:13;::::0;:31:::1;;-1:-1:-1::0;21693:5:0::1;::::0;-1:-1:-1;;;;;21684:14:0;;::::1;21693:5:::0;::::1;21684:14;21667:31;21659:40;;;::::0;::::1;;21718:4;::::0;::::1;;::::0;;::::1;;:12;;:4;:12;21710:40;;;;-1:-1:-1::0;;;21710:40:0::1;;;;;;;:::i;:::-;21783:5;::::0;-1:-1:-1;;;;;21774:14:0;;::::1;21783:5:::0;::::1;21774:14;21771:834;;;21823:5;::::0;-1:-1:-1;;;;;21823:5:0::1;21800:11;21814:15:::0;;;:8:::1;:15;::::0;;;;21823:5;21814:23:::1;::::0;;21853:39:::1;::::0;21876:10:::1;21888:3:::0;21853:15:::1;:39::i;:::-;21929:5;::::0;21922:38:::1;::::0;-1:-1:-1;;;21922:38:0;;21903:11:::1;::::0;21917:59:::1;::::0;-1:-1:-1;;;;;21929:5:0;;::::1;::::0;21922:23:::1;::::0;:38:::1;::::0;21954:4:::1;::::0;21922:38:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21962:13;;21917:4;:59::i;:::-;21903:73;;21989:19;22011:14;22016:3;22021;22011:4;:14::i;:::-;21989:36;;22054:32;22059:13;;22074:11;22054:4;:32::i;:::-;22038:13;:48:::0;22138:10:::1;22127:22;::::0;;;:10:::1;:22:::0;;;;;;22122:41:::1;::::0;22151:11;22122:4:::1;:41::i;:::-;22108:10;22097:22;::::0;;;:10:::1;:22:::0;;;;;:66;-1:-1:-1;21771:834:0::1;::::0;-1:-1:-1;;21771:834:0::1;;22223:4;::::0;-1:-1:-1;;;;;22223:4:0::1;22200:11;22214:14:::0;;;:8:::1;:14;::::0;;;;22223:4;22214:22:::1;::::0;;22247:38:::1;::::0;22269:10:::1;22281:3:::0;22247:15:::1;:38::i;:::-;22322:4;::::0;22315:37:::1;::::0;-1:-1:-1;;;22315:37:0;;22296:11:::1;::::0;22310:100:::1;::::0;-1:-1:-1;;;;;22322:4:0;;::::1;::::0;22315:22:::1;::::0;:37:::1;::::0;22346:4:::1;::::0;22315:37:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22354:55;22359:13;;22374:34;22379:13;;22394;;22374:4;:34::i;22354:55::-;22310:4;:100::i;:::-;22296:114;;22421:19;22443:14;22448:3;22453;22443:4;:14::i;:::-;22421:36;;22484:32;22489:13;;22504:11;22484:4;:32::i;:::-;22468:13;:48:::0;22568:10:::1;22557:22;::::0;;;:10:::1;:22;::::0;;;;;22552:41:::1;::::0;22581:11;22552:4:::1;:41::i;:::-;22538:10;22527:22;::::0;;;:10:::1;:22;::::0;;;;:66;-1:-1:-1;;;22615:10:0::1;:8;:10::i;29664:1932::-:0;29815:22;15770:1;15935:7;;:19;;15927:63;;;;-1:-1:-1;;;15927:63:0;;;;;;;:::i;:::-;15770:1;16003:7;:18;29873:4:::1;::::0;::::1;;::::0;;::::1;;:12;;:4;:12;29865:40;;;;-1:-1:-1::0;;;29865:40:0::1;;;;;;;:::i;:::-;29921:4;;;;;;;;;-1:-1:-1::0;;;;;29921:4:0::1;-1:-1:-1::0;;;;;29916:18:0::1;;29942:9;29916:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29968:30;29987:10;29968:18;:30::i;:::-;:38;;30002:4;29968:38;29965:141;;;30034:4;;30027:3;:11;30019:75;;;;-1:-1:-1::0;;;30019:75:0::1;;;;;;;:::i;:::-;30148:3;::::0;30141:42:::1;::::0;-1:-1:-1;;;30141:42:0;;30126:12:::1;::::0;-1:-1:-1;;;;;30148:3:0::1;::::0;30141:21:::1;::::0;:42:::1;::::0;30171:10:::1;::::0;30141:42:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30126:57:::0;-1:-1:-1;30207:21:0::1;30252:6:::0;;;;;:27:::1;;;30275:4;30262:9;:17;;30252:27;:43;;;;;30291:4;30283;:12;;30252:43;30249:82;;;30307:12;:10;:12::i;:::-;30394:4;::::0;-1:-1:-1;;;;;30394:4:0;;::::1;30351:23;30377::::0;;;:8:::1;:23;::::0;;;;;30455:5:::1;::::0;;;::::1;30438:24:::0;;;;30504:13:::1;::::0;30491:9:::1;:26;;30483:55;;;;-1:-1:-1::0;;;30483:55:0::1;;;;;;;:::i;:::-;30575:45;30580:9;:17;;;30599:20;15573:2;30615:3;30599:4;:20::i;30575:45::-;30557:14;:63;;30549:94;;;;-1:-1:-1::0;;;30549:94:0::1;;;;;;;:::i;:::-;30664:18;30724:433;30785:8;:16;;;30848:14;30853:4;30859:2;30848:4;:14::i;:::-;30909:9;:17;;;30973:14;30978:4;30984:2;30973:4;:14::i;:::-;31034:32;31039:9;31050:15;31055:3;31060:4;31050;:15::i;31034:32::-;31113:1;30724:14;:433::i;:::-;30693:464:::0;;-1:-1:-1;30693:464:0;-1:-1:-1;31218:30:0;;::::1;;31210:69;;;;-1:-1:-1::0;;;31210:69:0::1;;;;;;;:::i;:::-;31290:10;31303:30;31308:9;31319:13;31324:1;31327:4;31319;:13::i;31303:30::-;31290:43;;31361:24;31366:2;31370:14;31375:3;;31380;31370:4;:14::i;31361:24::-;31344:13;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;31412:5:0::1;::::0;31396:42:::1;::::0;-1:-1:-1;;;;;31412:5:0::1;31419:2:::0;31423:14;31396:15:::1;:42::i;:::-;31449:6;:4;:6::i;:::-;31500:5;::::0;31494:4:::1;::::0;31544:3:::1;::::0;-1:-1:-1;;;;;31500:5:0;;::::1;::::0;31494:4;;::::1;::::0;31482:10:::1;::::0;-1:-1:-1;;;;;;;;;;;31473:82:0;31507:9:::1;::::0;31518:36:::1;::::0;31523:14;;31539::::1;::::0;31549:3:::1;31539:4;:14::i;31518:36::-;31473:82;;;;;;;:::i;:::-;;;;;;;;31566:22;;;;;;15726:1:::0;16048:7;:22;29664:1932;;-1:-1:-1;;;29664:1932:0:o;18370:223::-;18514:7;;-1:-1:-1;;;;;18514:7:0;18500:10;:21;18492:60;;;;-1:-1:-1;;;18492:60:0;;;;;;;:::i;:::-;18563:14;:22;;-1:-1:-1;;;;;;18563:22:0;-1:-1:-1;;;;;18563:22:0;;;;;;;;;;18370:223::o;11671:255::-;11804:10;11741:4;11793:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;11793:27:0;;;;;;;;;;11788:38;;11822:3;11788:4;:38::i;:::-;11769:10;11758:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;11758:27:0;;;;;;;;;;;;:68;;;11842:54;20287:25:1;;;11758:27:0;;-1:-1:-1;;;;;;;;;;;11842:54:0;20260:18:1;11842:54:0;20141:177:1;4955:853:0;5216:21;5239:18;5275:19;5297:35;5302:14;5318:13;5297:4;:35::i;:::-;5275:57;;5343:12;5358:37;5363:15;5380:14;5358:4;:37::i;:::-;5343:52;;5406:9;5418:27;5423:15;5440:4;5418;:27::i;:::-;5406:39;;5456:11;5470:20;5475:1;5478:11;5470:4;:20::i;:::-;5456:34;;5507:15;5512:3;5517:4;5507;:15::i;:::-;5501:21;;5539:25;5544:14;5560:3;5539:4;:25::i;:::-;5533:31;;5591:19;5596:4;5602:7;5591:4;:19::i;:::-;5575:35;;5637:24;5642:3;5647:13;5637:4;:24::i;:::-;5621:40;;5685:15;5690:3;5695:4;5685;:15::i;:::-;5672:28;;5724:31;5729:13;5744:10;5724:4;:31::i;:::-;5711:44;;5766:34;;;;4955:853;;;;;;;;;:::o;27811:1841::-;27949:22;15770:1;15935:7;;:19;;15927:63;;;;-1:-1:-1;;;15927:63:0;;;;;;;:::i;:::-;15770:1;16003:7;:18;28010:10:::1;27999:22;::::0;;;:10:::1;:22;::::0;;;;;:39;-1:-1:-1;27999:39:0::1;27991:81;;;::::0;-1:-1:-1;;;27991:81:0;;17432:2:1;27991:81:0::1;::::0;::::1;17414:21:1::0;17471:2;17451:18;;;17444:30;17510:31;17490:18;;;17483:59;17559:18;;27991:81:0::1;17230:353:1::0;27991:81:0::1;28115:3;::::0;28108:42:::1;::::0;-1:-1:-1;;;28108:42:0;;28093:12:::1;::::0;-1:-1:-1;;;;;28115:3:0::1;::::0;28108:21:::1;::::0;:42:::1;::::0;28138:10:::1;::::0;28108:42:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28093:57:::0;-1:-1:-1;28174:21:0::1;28219:6:::0;;;;;:31:::1;;;28246:4;28229:13;:21;;28219:31;:47;;;;;28262:4;28254;:12;;28219:47;28216:86;;;28278:12;:10;:12::i;:::-;28365:4;::::0;-1:-1:-1;;;;;28365:4:0;;::::1;28322:23;28348::::0;;;:8:::1;:23;::::0;;;;;28426:5:::1;::::0;;;::::1;28409:24:::0;;;;28471:13:::1;::::0;28454:30;::::1;;28446:59;;;;-1:-1:-1::0;;;28446:59:0::1;;;;;;;:::i;:::-;28542:45;28547:9;:17;;;28566:20;15573:2;28582:3;28566:4;:20::i;28542:45::-;28524:14;:63;;28516:94;;;;-1:-1:-1::0;;;28516:94:0::1;;;;;;;:::i;:::-;28631:18;28691:437;28752:8;:16;;;28815:14;28820:4;28826:2;28815:4;:14::i;:::-;28876:9;:17;;;28940:14;28945:4;28951:2;28940:4;:14::i;:::-;29001:36;29006:13;29021:15;29026:3;29031:4;29021;:15::i;28691:437::-;28660:468:::0;;-1:-1:-1;28660:468:0;-1:-1:-1;29189:30:0;;::::1;;29181:69;;;;-1:-1:-1::0;;;29181:69:0::1;;;;;;;:::i;:::-;29301:5;::::0;29295:4:::1;::::0;29269:69:::1;::::0;-1:-1:-1;;;;;29301:5:0;;::::1;::::0;29295:4;;::::1;::::0;29283:10:::1;::::0;-1:-1:-1;;;;;;;;;;;29269:69:0;::::1;::::0;29308:13;;29323:14;;29269:69:::1;:::i;:::-;;;;;;;;29360:10;29349:22;::::0;;;:10:::1;:22;::::0;;;;:39;;29375:13;;29349:22;:39:::1;::::0;29375:13;;29349:39:::1;:::i;:::-;;;;;;;;29416:13;29399;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;29451:10:0::1;29440:22;::::0;;;:10:::1;:22:::0;;;;;:40;;29466:14;;29440:22;:40:::1;::::0;29466:14;;29440:40:::1;:::i;:::-;;;;;;;;29508:14;29491:13;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;29550:34:0::1;::::0;-1:-1:-1;29555:13:0;29570::::1;29575:1;29578:4;29570;:13::i;29550:34::-;29533:13;;:51;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;29595:6:0::1;::::0;-1:-1:-1;29595:4:0::1;:6::i;:::-;29622:22;;;;;15726:1:::0;16048:7;:22;27811:1841;;-1:-1:-1;;27811:1841:0:o;36521:121::-;36594:17;:15;:17::i;:::-;36618:16;:14;:16::i;:::-;36521:121::o;1346:405::-;1423:7;1456:6;1448:31;;;;-1:-1:-1;;;1448:31:0;;15631:2:1;1448:31:0;;;15613:21:1;15670:2;15650:18;;;15643:30;-1:-1:-1;;;15689:18:1;;;15682:42;15741:18;;1448:31:0;15429:336:1;1448:31:0;1490:10;1503:8;:1;1507:4;1503:8;:::i;:::-;1490:21;-1:-1:-1;1530:6:0;;;:24;;-1:-1:-1;1540:6:0;1545:1;1540:2;:6;:::i;:::-;1550:4;1540:14;1530:24;1522:53;;;;-1:-1:-1;;;1522:53:0;;;;;;;:::i;:::-;1603:10;1622:5;1626:1;1622;:5;:::i;:::-;1616:12;;:2;:12;:::i;:::-;1603:25;;1653:2;1647;:8;;1639:37;;;;-1:-1:-1;;;1639:37:0;;;;;;;:::i;:::-;1704:10;1717:6;1722:1;1717:2;:6;:::i;:::-;1704:19;1346:405;-1:-1:-1;;;;;;1346:405:0:o;1009:329::-;1086:7;;1124:5;1128:1;1124;:5;:::i;:::-;1111:18;-1:-1:-1;1148:6:0;;;:21;;-1:-1:-1;1168:1:0;1158:6;1163:1;1158:2;:6;:::i;:::-;:11;1148:21;1140:50;;;;-1:-1:-1;;;1140:50:0;;;;;;;:::i;:::-;1201:10;1214:15;:2;1220:8;1214:15;:::i;:::-;1201:28;;1254:2;1248;:8;;1240:37;;;;-1:-1:-1;;;1240:37:0;;;;;;;:::i;:::-;1288:10;1301:9;1306:4;1301:2;:9;:::i;550:214::-;627:7;653:9;664;677:14;686:1;689;677:8;:14::i;:::-;652:39;;;;711:4;710:5;702:35;;;;-1:-1:-1;;;702:35:0;;18941:2:1;702:35:0;;;18923:21:1;18980:2;18960:18;;;18953:30;-1:-1:-1;;;18999:18:1;;;18992:47;19056:18;;702:35:0;18739:341:1;702:35:0;-1:-1:-1;755:1:0;550:214;-1:-1:-1;;;550:214:0:o;38674:202::-;38791:34;;-1:-1:-1;;;38791:34:0;;38779:9;;-1:-1:-1;;;;;38791:22:0;;;;;:34;;38814:2;;38818:6;;38791:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38779:46;;38844:4;38836:32;;;;-1:-1:-1;;;38836:32:0;;;;;;;:::i;:::-;38765:111;38674:202;;;:::o;38888:224::-;38947:4;38931:13;;:20;38928:177;;;38983:4;;38998:8;;39008:13;;38976:46;;-1:-1:-1;;;38976:46:0;;38964:9;;-1:-1:-1;;;;;38983:4:0;;;;38976:21;;:46;;38998:8;;;;;38976:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38964:58;;39041:4;39033:32;;;;-1:-1:-1;;;39033:32:0;;;;;;;:::i;:::-;-1:-1:-1;39092:1:0;39076:13;:17;38888:224::o;10594:252::-;-1:-1:-1;;;;;10676:13:0;;:8;:13;;;;;;;;;;;:20;-1:-1:-1;10676:20:0;10668:29;;;;;;-1:-1:-1;;;;;10729:13:0;;:8;:13;;;;;;;;;;;10724:24;;10744:3;10724:4;:24::i;:::-;-1:-1:-1;;;;;10708:13:0;;;:8;:13;;;;;;;;;;;:40;;;;10780:13;;;;;;;10775:24;;10795:3;10775:4;:24::i;:::-;-1:-1:-1;;;;;10759:13:0;;;:8;:13;;;;;;;;;;;;:40;;;;10815:23;20287:25:1;;;10759:13:0;;10815:23;;;;-1:-1:-1;;;;;;;;;;;10815:23:0;20260:18:1;10815:23:0;;;;;;;10594:252;;;:::o;10959:101::-;11021:31;11027:4;11041;11048:3;11021:5;:31::i;:::-;10959:101;;:::o;10317:269::-;10390:4;10373:8;:23;;;;;;;;;;;:30;-1:-1:-1;10373:30:0;10365:39;;;;;;10463:4;10446:8;:23;;;;;;;;;;;10441:34;;10471:3;10441:4;:34::i;:::-;10432:4;10415:8;:23;;;;;;;;;;:60;10505:11;;10500:22;;10518:3;10500:4;:22::i;:::-;10486:11;:36;10538:40;;20287:25:1;;;10570:1:0;;10555:4;;-1:-1:-1;;;;;;;;;;;10538:40:0;20275:2:1;20260:18;10538:40:0;;;;;;;;10317:269;:::o;38441:225::-;38560:55;;-1:-1:-1;;;38560:55:0;;-1:-1:-1;;;;;6713:15:1;;;38560:55:0;;;6695:34:1;38601:4:0;6745:18:1;;;6738:43;6797:18;;;6790:34;;;38548:9:0;;38560:26;;;;;;6630:18:1;;38560:55:0;6455:375:1;350:192:0;427:7;;464:5;468:1;464;:5;:::i;:::-;452:17;;493:1;488;:6;;480:35;;;;-1:-1:-1;;;480:35:0;;19287:2:1;480:35:0;;;19269:21:1;19326:2;19306:18;;;19299:30;-1:-1:-1;;;19345:18:1;;;19338:46;19401:18;;480:35:0;19085:340:1;480:35:0;533:1;350:192;-1:-1:-1;;;350:192:0:o;10090:219::-;10186:4;10169:8;:23;;;;;;;;;;;10164:34;;10194:3;10164:4;:34::i;:::-;10155:4;10138:8;:23;;;;;;;;;;:60;10228:11;;10223:22;;10241:3;10223:4;:22::i;:::-;10209:11;:36;10261:40;;20287:25:1;;;10290:4:0;;10278:1;;-1:-1:-1;;;;;;;;;;;10261:40:0;20275:2:1;20260:18;10261:40:0;20141:177:1;10854:97:0;10914:29;10928:4;10935:2;10939:3;10914:5;:29::i;7410:318::-;7470:4;7637:20;;7537:66;7677:23;;;;;;:42;;-1:-1:-1;7704:15:0;;;7677:42;7669:51;7410:318;-1:-1:-1;;;;7410:318:0:o;27583:216::-;27625:10;27638:25;27662:1;27638:21;:25;:::i;:::-;27625:38;;27674:46;27705:10;27717:2;27674:30;:46::i;:::-;27751:2;27731:16;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;27769:22:0;;20287:25:1;;;27776:10:0;;27769:22;;20275:2:1;20260:18;27769:22:0;;;;;;;27614:185;27583:216::o;36654:137::-;36768:13;;36734:5;;36727:38;;-1:-1:-1;;;36727:38:0;;-1:-1:-1;;;;;36734:5:0;;;;36727:23;;:38;;36759:4;;36727:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;;:::i;:::-;36710:5;;-1:-1:-1;;;;;36710:5:0;36701:15;;;;:8;:15;;;;;36710:5;36701:23;:80;36654:137::o;7176:198::-;7287:12;;;7249;7287;;;;;;;;;-1:-1:-1;;;;;7266:7:0;;;7280:5;;7266:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7248:52;;;7319:7;7311:55;;;;-1:-1:-1;;;7311:55:0;;18134:2:1;7311:55:0;;;18116:21:1;18173:2;18153:18;;;18146:30;18212:34;18192:18;;;18185:62;-1:-1:-1;;;18263:18:1;;;18256:33;18306:19;;7311:55:0;17932:399:1;7311:55:0;7237:137;7176:198;;:::o;39124:174::-;39201:4;39185:13;;:20;39182:109;;;39222:4;;39237:13;;39217:34;;-1:-1:-1;;;39217:34:0;;-1:-1:-1;;;;;39222:4:0;;;;39217:19;;:34;;;;20287:25:1;;;20275:2;20260:18;;20141:177;39217:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39278:1:0;39262:13;:17;-1:-1:-1;;39124:174:0:o;36807:191::-;36853:10;36898:13;;36882;;36867;;:28;;;;:::i;:::-;:44;;;;:::i;:::-;36955:4;;36948:37;;-1:-1:-1;;;36948:37:0;;36853:59;;-1:-1:-1;36853:59:0;;-1:-1:-1;;;;;36955:4:0;;;;36948:22;;:37;;36979:4;;36948:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;;;:::i;:::-;36932:4;;-1:-1:-1;;;;;36932:4:0;36923:14;;;;:8;:14;;;;;36932:4;36923:22;:67;-1:-1:-1;36807:191:0:o;2093:567::-;2175:7;2216:5;2208:4;:13;;2200:47;;;;-1:-1:-1;;;2200:47:0;;17082:2:1;2200:47:0;;;17064:21:1;17121:2;17101:18;;;17094:30;-1:-1:-1;;;17140:18:1;;;17133:51;17201:18;;2200:47:0;16880:345:1;2200:47:0;2274:18;2266:4;:26;;2258:61;;;;-1:-1:-1;;;2258:61:0;;19992:2:1;2258:61:0;;;19974:21:1;20031:2;20011:18;;;20004:30;-1:-1:-1;;;20050:18:1;;;20043:52;20112:18;;2258:61:0;19790:346:1;2258:61:0;2332:13;2349:11;2356:3;2349:6;:11::i;:::-;2332:28;;2371:14;2388:16;2393:3;2398:5;2388:4;:16::i;:::-;2371:33;;2417:16;2436:24;2442:4;2448:11;2453:5;2448:4;:11::i;:::-;2436:5;:24::i;:::-;2417:43;-1:-1:-1;2477:11:0;2473:59;;2512:8;-1:-1:-1;2505:15:0;;-1:-1:-1;;2505:15:0;2473:59;2544:21;2568:37;2579:4;2585:6;2593:11;2568:10;:37::i;:::-;2544:61;;2623:29;2628:8;2638:13;2623:4;:29::i;:::-;2616:36;2093:567;-1:-1:-1;;;;;;;2093:567:0:o;772:229::-;853:4;859;890:1;885;:6;881:113;;916:5;920:1;916;:5;:::i;:::-;923;908:21;;;;;;881:113;970:5;974:1;970;:5;:::i;:::-;977:4;962:20;;;;881:113;772:229;;;;;:::o;220:122::-;288:7;320;325:1;320:4;:7::i;:::-;:14;;330:4;320:14;:::i;98:114::-;164:7;196:8;200:4;196:1;:8;:::i;1759:326::-;1837:7;;1874:5;1878:1;1874;:5;:::i;:::-;:21;;1891:4;1874:21;;;1887:1;1874:21;1862:33;-1:-1:-1;1913:6:0;1918:1;1913:6;;:::i;:::-;;;1908:151;1921:6;;1908:151;;1956:10;1961:1;1964;1956:4;:10::i;:::-;1952:14;-1:-1:-1;1987:5:0;1991:1;1987;:5;:::i;:::-;:10;1983:65;;2022:10;2027:1;2030;2022:4;:10::i;:::-;2018:14;;1983:65;1929:6;1934:1;1929:6;;:::i;:::-;;;1908:151;;2668:864;2775:7;2816:3;2775:7;;2856:20;2865:4;2871;2856:8;:20::i;:::-;2830:46;;-1:-1:-1;2830:46:0;-1:-1:-1;2902:4:0;;2887:12;3001:1;2984:518;3012:9;3004:4;:17;2984:518;;3043:12;3058:8;:1;3062:4;3058:8;:::i;:::-;3043:23;;3082:9;3093;3106:29;3115:1;3118:16;3123:4;3129;3118;:16::i;:::-;3106:8;:29::i;:::-;3081:54;;;;3157:22;3162:4;3168:10;3173:1;3176;3168:4;:10::i;3157:22::-;3150:29;;3201:16;3206:4;3212;3201;:16::i;:::-;3194:23;-1:-1:-1;3236:9:0;3232:20;;3247:5;;;;;3232:20;3273:4;3269:30;;;3290:9;;;3269:30;3318:4;3314:30;;;3335:9;;;3314:30;3363:8;3359:132;;;3398:15;3403:3;3408:4;3398;:15::i;:::-;3392:21;;3359:132;;;3460:15;3465:3;3470:4;3460;:15::i;:::-;3454:21;;3359:132;3028:474;;;3023:3;;;;;:::i;:::-;;;;2984:518;;;-1:-1:-1;3521:3:0;;2668:864;-1:-1:-1;;;;;;;;;2668:864:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:334::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;938:38;972:2;961:9;957:18;938:38;:::i;:::-;928:48;;648:334;;;;;:::o;987:403::-;1073:6;1081;1089;1097;1150:3;1138:9;1129:7;1125:23;1121:33;1118:53;;;1167:1;1164;1157:12;1118:53;1190:29;1209:9;1190:29;:::i;:::-;1180:39;;1238:38;1272:2;1261:9;1257:18;1238:38;:::i;:::-;1228:48;;1295:38;1329:2;1318:9;1314:18;1295:38;:::i;:::-;987:403;;;;-1:-1:-1;1285:48:1;;1380:2;1365:18;1352:32;;-1:-1:-1;;987:403:1:o;1395:328::-;1472:6;1480;1488;1541:2;1529:9;1520:7;1516:23;1512:32;1509:52;;;1557:1;1554;1547:12;1509:52;1580:29;1599:9;1580:29;:::i;:::-;1570:39;;1628:38;1662:2;1651:9;1647:18;1628:38;:::i;:::-;1618:48;;1713:2;1702:9;1698:18;1685:32;1675:42;;1395:328;;;;;:::o;1728:315::-;1793:6;1801;1854:2;1842:9;1833:7;1829:23;1825:32;1822:52;;;1870:1;1867;1860:12;1822:52;1893:29;1912:9;1893:29;:::i;:::-;1883:39;;1972:2;1961:9;1957:18;1944:32;1985:28;2007:5;1985:28;:::i;:::-;2032:5;2022:15;;;1728:315;;;;;:::o;2048:254::-;2116:6;2124;2177:2;2165:9;2156:7;2152:23;2148:32;2145:52;;;2193:1;2190;2183:12;2145:52;2216:29;2235:9;2216:29;:::i;:::-;2206:39;2292:2;2277:18;;;;2264:32;;-1:-1:-1;;;2048:254:1:o;2307:245::-;2374:6;2427:2;2415:9;2406:7;2402:23;2398:32;2395:52;;;2443:1;2440;2433:12;2395:52;2475:9;2469:16;2494:28;2516:5;2494:28;:::i;2557:184::-;2627:6;2680:2;2668:9;2659:7;2655:23;2651:32;2648:52;;;2696:1;2693;2686:12;2648:52;-1:-1:-1;2719:16:1;;2557:184;-1:-1:-1;2557:184:1:o;2746:322::-;2823:6;2831;2839;2892:2;2880:9;2871:7;2867:23;2863:32;2860:52;;;2908:1;2905;2898:12;2860:52;2944:9;2931:23;2921:33;;2973:38;3007:2;2996:9;2992:18;2973:38;:::i;3073:391::-;3159:6;3167;3175;3183;3236:3;3224:9;3215:7;3211:23;3207:33;3204:53;;;3253:1;3250;3243:12;3204:53;3289:9;3276:23;3266:33;;3318:38;3352:2;3341:9;3337:18;3318:38;:::i;:::-;3073:391;;3308:48;;-1:-1:-1;;;;3403:2:1;3388:18;;3375:32;;3454:2;3439:18;3426:32;;3073:391::o;3469:683::-;3564:6;3572;3580;3633:2;3621:9;3612:7;3608:23;3604:32;3601:52;;;3649:1;3646;3639:12;3601:52;3672:23;;;-1:-1:-1;3746:2:1;3731:18;;3718:32;-1:-1:-1;;;;;3799:14:1;;;3796:34;;;3826:1;3823;3816:12;3796:34;3864:6;3853:9;3849:22;3839:32;;3909:7;3902:4;3898:2;3894:13;3890:27;3880:55;;3931:1;3928;3921:12;3880:55;3971:2;3958:16;3997:2;3989:6;3986:14;3983:34;;;4013:1;4010;4003:12;3983:34;4066:7;4061:2;4051:6;4048:1;4044:14;4040:2;4036:23;4032:32;4029:45;4026:65;;;4087:1;4084;4077:12;4026:65;4118:2;4114;4110:11;4100:21;;4140:6;4130:16;;;;;3469:683;;;;;:::o;4157:248::-;4225:6;4233;4286:2;4274:9;4265:7;4261:23;4257:32;4254:52;;;4302:1;4299;4292:12;4254:52;-1:-1:-1;;4325:23:1;;;4395:2;4380:18;;;4367:32;;-1:-1:-1;4157:248:1:o;4410:245::-;4489:6;4497;4550:2;4538:9;4529:7;4525:23;4521:32;4518:52;;;4566:1;4563;4556:12;4518:52;-1:-1:-1;;4589:16:1;;4645:2;4630:18;;;4624:25;4589:16;;4624:25;;-1:-1:-1;4410:245:1:o;4660:316::-;4737:6;4745;4753;4806:2;4794:9;4785:7;4781:23;4777:32;4774:52;;;4822:1;4819;4812:12;4774:52;-1:-1:-1;;4845:23:1;;;4915:2;4900:18;;4887:32;;-1:-1:-1;4966:2:1;4951:18;;;4938:32;;4660:316;-1:-1:-1;4660:316:1:o;4981:454::-;5076:6;5084;5092;5100;5108;5161:3;5149:9;5140:7;5136:23;5132:33;5129:53;;;5178:1;5175;5168:12;5129:53;-1:-1:-1;;5201:23:1;;;5271:2;5256:18;;5243:32;;-1:-1:-1;5322:2:1;5307:18;;5294:32;;5373:2;5358:18;;5345:32;;-1:-1:-1;5424:3:1;5409:19;5396:33;;-1:-1:-1;4981:454:1;-1:-1:-1;4981:454:1:o;5440:523::-;5544:6;5552;5560;5568;5576;5584;5637:3;5625:9;5616:7;5612:23;5608:33;5605:53;;;5654:1;5651;5644:12;5605:53;-1:-1:-1;;5677:23:1;;;5747:2;5732:18;;5719:32;;-1:-1:-1;5798:2:1;5783:18;;5770:32;;5849:2;5834:18;;5821:32;;-1:-1:-1;5900:3:1;5885:19;;5872:33;;-1:-1:-1;5952:3:1;5937:19;5924:33;;-1:-1:-1;5440:523:1;-1:-1:-1;5440:523:1:o;5968:274::-;6097:3;6135:6;6129:13;6151:53;6197:6;6192:3;6185:4;6177:6;6173:17;6151:53;:::i;:::-;6220:16;;;;;5968:274;-1:-1:-1;;5968:274:1:o;6247:203::-;-1:-1:-1;;;;;6411:32:1;;;;6393:51;;6381:2;6366:18;;6247:203::o;6835:274::-;-1:-1:-1;;;;;7027:32:1;;;;7009:51;;7091:2;7076:18;;7069:34;6997:2;6982:18;;6835:274::o;7569:383::-;7718:2;7707:9;7700:21;7681:4;7750:6;7744:13;7793:6;7788:2;7777:9;7773:18;7766:34;7809:66;7868:6;7863:2;7852:9;7848:18;7843:2;7835:6;7831:15;7809:66;:::i;:::-;7936:2;7915:15;-1:-1:-1;;7911:29:1;7896:45;;;;7943:2;7892:54;;7569:383;-1:-1:-1;;7569:383:1:o;7957:350::-;8159:2;8141:21;;;8198:2;8178:18;;;8171:30;-1:-1:-1;;;8232:2:1;8217:18;;8210:56;8298:2;8283:18;;7957:350::o;8312:340::-;8514:2;8496:21;;;8553:2;8533:18;;;8526:30;-1:-1:-1;;;8587:2:1;8572:18;;8565:46;8643:2;8628:18;;8312:340::o;8657:339::-;8859:2;8841:21;;;8898:2;8878:18;;;8871:30;-1:-1:-1;;;8932:2:1;8917:18;;8910:45;8987:2;8972:18;;8657:339::o;11086:340::-;11288:2;11270:21;;;11327:2;11307:18;;;11300:30;-1:-1:-1;;;11361:2:1;11346:18;;11339:46;11417:2;11402:18;;11086:340::o;11431:::-;11633:2;11615:21;;;11672:2;11652:18;;;11645:30;-1:-1:-1;;;11706:2:1;11691:18;;11684:46;11762:2;11747:18;;11431:340::o;11776:::-;11978:2;11960:21;;;12017:2;11997:18;;;11990:30;-1:-1:-1;;;12051:2:1;12036:18;;12029:46;12107:2;12092:18;;11776:340::o;12121:475::-;12323:2;12305:21;;;12362:2;12342:18;;;12335:30;12401:34;12396:2;12381:18;;12374:62;12472:34;12467:2;12452:18;;12445:62;-1:-1:-1;;;12538:3:1;12523:19;;12516:38;12586:3;12571:19;;12121:475::o;12942:339::-;13144:2;13126:21;;;13183:2;13163:18;;;13156:30;-1:-1:-1;;;13217:2:1;13202:18;;13195:45;13272:2;13257:18;;12942:339::o;13632:350::-;13834:2;13816:21;;;13873:2;13853:18;;;13846:30;-1:-1:-1;;;13907:2:1;13892:18;;13885:56;13973:2;13958:18;;13632:350::o;13987:344::-;14189:2;14171:21;;;14228:2;14208:18;;;14201:30;-1:-1:-1;;;14262:2:1;14247:18;;14240:50;14322:2;14307:18;;13987:344::o;14740:339::-;14942:2;14924:21;;;14981:2;14961:18;;;14954:30;-1:-1:-1;;;15015:2:1;15000:18;;14993:45;15070:2;15055:18;;14740:339::o;15084:340::-;15286:2;15268:21;;;15325:2;15305:18;;;15298:30;-1:-1:-1;;;15359:2:1;15344:18;;15337:46;15415:2;15400:18;;15084:340::o;15770:338::-;15972:2;15954:21;;;16011:2;15991:18;;;15984:30;-1:-1:-1;;;16045:2:1;16030:18;;16023:44;16099:2;16084:18;;15770:338::o;16113:342::-;16315:2;16297:21;;;16354:2;16334:18;;;16327:30;-1:-1:-1;;;16388:2:1;16373:18;;16366:48;16446:2;16431:18;;16113:342::o;16460:415::-;16662:2;16644:21;;;16701:2;16681:18;;;16674:30;16740:34;16735:2;16720:18;;16713:62;-1:-1:-1;;;16806:2:1;16791:18;;16784:49;16865:3;16850:19;;16460:415::o;17588:339::-;17790:2;17772:21;;;17829:2;17809:18;;;17802:30;-1:-1:-1;;;17863:2:1;17848:18;;17841:45;17918:2;17903:18;;17588:339::o;19430:355::-;19632:2;19614:21;;;19671:2;19651:18;;;19644:30;19710:33;19705:2;19690:18;;19683:61;19776:2;19761:18;;19430:355::o;20323:256::-;20505:25;;;20561:2;20546:18;;20539:34;20493:2;20478:18;;20323:256::o;21026:128::-;21066:3;21097:1;21093:6;21090:1;21087:13;21084:39;;;21103:18;;:::i;:::-;-1:-1:-1;21139:9:1;;21026:128::o;21159:120::-;21199:1;21225;21215:35;;21230:18;;:::i;:::-;-1:-1:-1;21264:9:1;;21159:120::o;21284:168::-;21324:7;21390:1;21386;21382:6;21378:14;21375:1;21372:21;21367:1;21360:9;21353:17;21349:45;21346:71;;;21397:18;;:::i;:::-;-1:-1:-1;21437:9:1;;21284:168::o;21457:125::-;21497:4;21525:1;21522;21519:8;21516:34;;;21530:18;;:::i;:::-;-1:-1:-1;21567:9:1;;21457:125::o;21587:258::-;21659:1;21669:113;21683:6;21680:1;21677:13;21669:113;;;21759:11;;;21753:18;21740:11;;;21733:39;21705:2;21698:10;21669:113;;;21800:6;21797:1;21794:13;21791:48;;;-1:-1:-1;;21835:1:1;21817:16;;21810:27;21587:258::o;21850:380::-;21929:1;21925:12;;;;21972;;;21993:61;;22047:4;22039:6;22035:17;22025:27;;21993:61;22100:2;22092:6;22089:14;22069:18;22066:38;22063:161;;;22146:10;22141:3;22137:20;22134:1;22127:31;22181:4;22178:1;22171:15;22209:4;22206:1;22199:15;22063:161;;21850:380;;;:::o;22235:135::-;22274:3;-1:-1:-1;;22295:17:1;;22292:43;;;22315:18;;:::i;:::-;-1:-1:-1;22362:1:1;22351:13;;22235:135::o;22375:112::-;22407:1;22433;22423:35;;22438:18;;:::i;:::-;-1:-1:-1;22472:9:1;;22375:112::o;22492:127::-;22553:10;22548:3;22544:20;22541:1;22534:31;22584:4;22581:1;22574:15;22608:4;22605:1;22598:15;22624:127;22685:10;22680:3;22676:20;22673:1;22666:31;22716:4;22713:1;22706:15;22740:4;22737:1;22730:15;22756:127;22817:10;22812:3;22808:20;22805:1;22798:31;22848:4;22845:1;22838:15;22872:4;22869:1;22862:15;23020:118;23106:5;23099:13;23092:21;23085:5;23082:32;23072:60;;23128:1;23125;23118:12;23072:60;23020:118;:::o

Swarm Source

ipfs://8f5c475ddbdb0cba8a6e89ee08f8de7b55e30e0740344aaf3371322e03ccbdf1

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.