ETH Price: $3,466.38 (-1.43%)
Gas: 5 Gwei

Contract

0x17c5CA47d70Ba155ACD8950523FeA3B251376660
 

Overview

ETH Balance

0.004607900899202386 ETH

Eth Value

$15.97 (@ $3,466.38/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
BUY151126542022-07-10 4:07:54744 days ago1657426074IN
0x17c5CA47...251376660
0.0002 ETH0.0045406110.05160559
BUY151126172022-07-10 4:00:44744 days ago1657425644IN
0x17c5CA47...251376660
0.001 ETH0.0027931118.33378597
BUY149887942022-06-19 4:11:25765 days ago1655611885IN
0x17c5CA47...251376660
0.00004 ETH0.0043134618.4572735
BUY148407172022-05-25 8:04:35789 days ago1653465875IN
0x17c5CA47...251376660
0.00008706 ETH0.0070106430
BUY148407032022-05-25 8:00:03789 days ago1653465603IN
0x17c5CA47...251376660
0.00001958 ETH0.0031561913.5060109
BUY148406922022-05-25 7:58:05789 days ago1653465485IN
0x17c5CA47...251376660
0.012 ETH0.0067678214.43335693
SELL146098762022-04-18 15:05:25826 days ago1650294325IN
0x17c5CA47...251376660
0 ETH0.0105101339.12815904
SELL146098712022-04-18 15:04:47826 days ago1650294287IN
0x17c5CA47...251376660
0 ETH0.0126925847.25319881
SELL146098442022-04-18 14:57:37826 days ago1650293857IN
0x17c5CA47...251376660
0 ETH0.0094739335.26889872
SELL146098392022-04-18 14:56:29826 days ago1650293789IN
0x17c5CA47...251376660
0 ETH0.0087947532.74048981
SELL146098322022-04-18 14:55:07826 days ago1650293707IN
0x17c5CA47...251376660
0 ETH0.0096392235.88423551
SELL146098262022-04-18 14:53:43826 days ago1650293623IN
0x17c5CA47...251376660
0 ETH0.0189035737.52124199
SELL142680132022-02-24 9:28:14879 days ago1645694894IN
0x17c5CA47...251376660
0 ETH0.0155558157.91012053
SELL142679072022-02-24 9:03:36879 days ago1645693416IN
0x17c5CA47...251376660
0 ETH0.019973840.55109008
SELL142361052022-02-19 10:53:56884 days ago1645268036IN
0x17c5CA47...251376660
0 ETH0.0125571346.74683652
SELL142361022022-02-19 10:51:55884 days ago1645267915IN
0x17c5CA47...251376660
0 ETH0.009551333.4289145
BUY142225562022-02-17 8:22:37886 days ago1645086157IN
0x17c5CA47...251376660
0.2 ETH0.0108722346.51702806
BUY142161722022-02-16 8:54:56887 days ago1645001696IN
0x17c5CA47...251376660
0.1 ETH0.0195363472.91695341
SELL140387752022-01-19 22:46:56915 days ago1642632416IN
0x17c5CA47...251376660
0 ETH0.05604069122.80926832
BUY138715412021-12-25 2:07:17941 days ago1640398037IN
0x17c5CA47...251376660
0.01 ETH0.015298861
BUY138231452021-12-17 14:24:49948 days ago1639751089IN
0x17c5CA47...251376660
0.07 ETH0.0131789150.07300279
BUY138218282021-12-17 9:20:57948 days ago1639732857IN
0x17c5CA47...251376660
0.1 ETH0.0142992558.10485688
BUY138052672021-12-14 19:43:55951 days ago1639511035IN
0x17c5CA47...251376660
0.07 ETH0.0131111753.27709531
SELL138024232021-12-14 9:18:03951 days ago1639473483IN
0x17c5CA47...251376660
0 ETH0.004672846.41334599
SELL138023992021-12-14 9:11:49951 days ago1639473109IN
0x17c5CA47...251376660
0 ETH0.0051191550.84680079
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
151126542022-07-10 4:07:54744 days ago1657426074
0x17c5CA47...251376660
0.000001 ETH
151126542022-07-10 4:07:54744 days ago1657426074
0x17c5CA47...251376660
0.000199 ETH
151126172022-07-10 4:00:44744 days ago1657425644
0x17c5CA47...251376660
0.000005 ETH
151126172022-07-10 4:00:44744 days ago1657425644
0x17c5CA47...251376660
0.000995 ETH
149887942022-06-19 4:11:25765 days ago1655611885
0x17c5CA47...251376660
0.0000002 ETH
149887942022-06-19 4:11:25765 days ago1655611885
0x17c5CA47...251376660
0.0000398 ETH
148407172022-05-25 8:04:35789 days ago1653465875
0x17c5CA47...251376660
0.00000043 ETH
148407172022-05-25 8:04:35789 days ago1653465875
0x17c5CA47...251376660
0.00008662 ETH
148407032022-05-25 8:00:03789 days ago1653465603
0x17c5CA47...251376660
0.00000009 ETH
148407032022-05-25 8:00:03789 days ago1653465603
0x17c5CA47...251376660
0.00001948 ETH
148406922022-05-25 7:58:05789 days ago1653465485
0x17c5CA47...251376660
0.00006 ETH
148406922022-05-25 7:58:05789 days ago1653465485
0x17c5CA47...251376660
0.01194 ETH
146098762022-04-18 15:05:25826 days ago1650294325
0x17c5CA47...251376660
0.03350588 ETH
146098762022-04-18 15:05:25826 days ago1650294325
0x17c5CA47...251376660
0.03355645 ETH
146098712022-04-18 15:04:47826 days ago1650294287
0x17c5CA47...251376660
0.06581815 ETH
146098712022-04-18 15:04:47826 days ago1650294287
0x17c5CA47...251376660
0.06591748 ETH
146098442022-04-18 14:57:37826 days ago1650293857
0x17c5CA47...251376660
0.08325632 ETH
146098442022-04-18 14:57:37826 days ago1650293857
0x17c5CA47...251376660
0.08338196 ETH
146098392022-04-18 14:56:29826 days ago1650293789
0x17c5CA47...251376660
0.10593648 ETH
146098392022-04-18 14:56:29826 days ago1650293789
0x17c5CA47...251376660
0.10609635 ETH
146098322022-04-18 14:55:07826 days ago1650293707
0x17c5CA47...251376660
0.10765158 ETH
146098322022-04-18 14:55:07826 days ago1650293707
0x17c5CA47...251376660
0.10781403 ETH
146098262022-04-18 14:53:43826 days ago1650293623
0x17c5CA47...251376660
0.15243824 ETH
146098262022-04-18 14:53:43826 days ago1650293623
0x17c5CA47...251376660
0.15266828 ETH
142680132022-02-24 9:28:14879 days ago1645694894
0x17c5CA47...251376660
0.09366281 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x80598337...3ACE27272
The constructor portion of the code might be different and could alter the actual behaviour of the contract

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-10-19
*/

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 calcOutGivenIn1(
        uint256 tokenBalanceIn,
        uint256 tokenWeightIn,
        uint256 tokenBalanceOut,
        uint256 tokenWeightOut,
        uint256 tokenAmountIn
    )
        public pure
        returns (uint256 tokenAmountOut)
    {
        uint256 weightRatio = bdiv(tokenWeightIn, tokenWeightOut);
        uint256 adjustedIn = bsub(10**18, 0);
        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);
        return tokenAmountOut;
    }

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

contract LPToken is LPTokenBase {

    string  public name     = "FEGex 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) external;
    function userBalanceInternal(address _addr) external returns (uint256, uint256);
}

interface newDeployer {
    function createPair(address token, uint256 liqmain, uint256 liqtoken, address owner) external;
}

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; // time liquidity can be released
    }
    
    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
);

    uint256 private spec;
    address private _controller = 0x4c9BC793716e8dC05d1F48D8cA8f84318Ec3043C; 
    address private _setter = 0x86882FA66aC57039b10D78e2D3205592A44664c0;
    address private fegp;
    address private FEG = 0x389999216860AB8E0175387A0c90E5c52522C945;
    address private burn = 0x000000000000000000000000000000000000dEaD;
    address public _poolOwner;
    address public Main = 0xf786c34106762Ab4Eeb45a51B42a62470E9D5332;
    address private newDep;
    address public Token;
    address public pairRewardPool;
    address private FEGstake;
    address public Bonus;
    uint256 public MAX_BUY_RATIO = 100e18;
    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;
    uint256 public _totalSupply2;
    uint256 public _totalSupply7;
    uint256 public _totalSupply8;
    uint256 public lockedLiquidity;
    uint256 public totalSentRebates;
    bool private live = false;
    //bool private on = true;
    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 private constant MAX_RATIO  = 50; // Max ratio for all trades based on liquidity amount
    uint256 public tx1;
    uint256 public tx2 = 99;
    uint256 private status = 0;
   
    function initialize( address _token1, address owner, address _made, address _fegp, uint256 ol) external{
        require(live == false, "Can only use once");
        Token = _token1;
        _poolOwner = owner;
        pairRewardPool = owner;
        spec = ol;
        fegp = _fegp;
        FEGstake = _made;
        MAX_SELL_RATIO = bmul(IERC20(Token).totalSupply(), bdiv(1, 20));
    }
    
    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);
        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 sync() public {  // updates the liquidity to current state
        _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1;  
        uint256 al = (_totalSupply2 + _totalSupply7 + _totalSupply8);
        _records[Main].balance = IERC20(Main).balanceOf(address(this)) - al;
    }
    
    function setMaxBuySellRatio(uint256 sellmax, uint256 buymax) public {
        require(msg.sender == _poolOwner, "You do not have permission");
        uint256 tob = IERC20(Token).totalSupply();
        require (sellmax >= tob/1000 && sellmax <= tob, "min 0.1% of token supply, max 100% of token supply"); 
        require (buymax >= 1e18, "1 BNB minimum");
        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);
        require(isContract(_bonus) == true);
        Bonus = _bonus;
    }
    
    function setStakePool(address _stake, address _fegp, address newd) public {
        require(msg.sender == _setter);
        FEGstake = _stake;
        fegp = _fegp;
        newDep = newd;
    }
    
    function setPRP(address prp) public {
        require(msg.sender == _setter);
        pairRewardPool = prp;
    }
    
    function setTX1(uint256 amt) public {
        require(msg.sender == _setter);
        tx1 = amt;
    }
    
    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);
        _controller = manager;
        _setter = set;
        _poolOwner = ad; // Incase pool owner wallet was compromised and needs new access
    }
    
    function setLockLiquidity() public { //
        address user;
        user = msg.sender;
        require(getUserLock(user) == 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 (address _from, uint256 liqtoken)
        external
        {
        require(live == false);
        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);
        uint256 c = a + b;
        _mint(c);
        _push(_from, c);
        lockedLiquidity = badd(lockedLiquidity, c);
        userLock storage ulock = _userlock[_from];
        userLock storage time = _unlockTime[_from];
        ulock.setLock = true;
        time.unlockTime = block.timestamp + 365 days; 
        live = true;
        tx1 = bmul(100, bdiv(much, liqtoken)); 
    }
   
    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 {
        require(asset == Main || asset == Token, "Not supported");
        require(status == 0, "No reentry");
        status = 1;
        require(open == true);
        
        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 += finalAmount;
        _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  += finalAmount;
        _balances2[msg.sender] += finalAmount;
        }
        status = 0;
    }

    function withdrawInternal(address asset, uint256 amt) external {
        require(asset == Main || asset == Token, "Not supported");
        require(status == 0, "No reentry");
        status = 1;
        
        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);
        }
        status = 0;
    }

    function swapToSwap(address path, address asset, address to, uint256 amt) external {
        require(asset == Main || asset == Token, "Not supported");
        require(status == 0, "No reentry");
        status = 1;
        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;
        }
        status = 0;
    }
    
    function transfer(address dst, uint256 amt) external returns(bool) {
        require(getUserLock(msg.sender) == 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]);
        require(getUserLock(msg.sender) == 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)
        external 
    {
        require(status == 0, "No reentry");
        status = 1;
        uint256 poolTotal = totalSupply;
        uint256 ratio = bdiv(poolAmountOut, poolTotal);
        
        if(getUserLock(msg.sender) == 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 <= maxAmountsIn[i]);
            emit LOG_JOIN(msg.sender, t, tokenAmountIn, 0);
            _pullUnderlying(t, msg.sender, tokenAmountIn);
            
        }
        _mint(poolAmountOut);
        _push(msg.sender, poolAmountOut);
        sync();
        status = 0;
    }
   
    function removeBothLiquidity(uint256 poolAmountIn, uint[] calldata minAmountsOut)
        external 
    {
        
        require(getUserLock(msg.sender) == false, "Liquidity is locked, you cannot remove liquidity until after lock time.");
        require(status == 0, "No reentry");
        status = 1;
        sync();
        uint256 poolTotal = totalSupply;
        uint256 ratio = bdiv(poolAmountIn, poolTotal);

        _balance[msg.sender] -= poolAmountIn;
        totalSupply -= poolAmountIn;
        emit Transfer(msg.sender, address(0), 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 >= minAmountsOut[i], "Minimum amount out not met");
            emit LOG_EXIT(msg.sender, t, tokenAmountOut, 0);
            _pushUnderlying(t, msg.sender, tokenAmountOut);
        }
        
        uint256 tab = bmul(ratio, _balances2[burn]);
        _balances2[burn] -= tab;
        _balances2[msg.sender] += tab;
        sync();
        if(Bonus != address(0)){
        uint256 bal1 = bmul(ratio, IERC20(Bonus).balanceOf(address(this)));
        if(bal1 > 0){
        _pushUnderlying(Bonus, msg.sender, bal1);
        }
        }
        status = 0;
    }
    
    function sendRebate() internal {
        uint256 re = address(this).balance / 8;
        TransferHelper.safeTransferETH(msg.sender, re);
        totalSentRebates += re;
    }
    
    function BUYSmart(
        uint256 tokenAmountIn,
        uint256 minAmountOut
    )   
        external 
        returns(uint256 tokenAmountOut)
    {

        require(_balances2[msg.sender] >= tokenAmountIn, "Not enough Main, deposit more");
        require(status == 0, "No reentry");
        status = 1;
        Record storage inRecord = _records[address(Main)];
        Record storage outRecord = _records[address(Token)];
        require(tokenAmountIn <= MAX_BUY_RATIO, "ERR_BUY_IN_RATIO");
        uint256 tokenInFee;
        (tokenAmountOut, tokenInFee) = calcOutGivenIn(
                                            inRecord.balance,
                                            bmul(1e18, 25),
                                            outRecord.balance,
                                            bmul(1e18, 25),
                                            bmul(tokenAmountIn, bdiv(999, 1000)),
                                            0
                                        );
        
        require(tokenAmountOut <= bmul(outRecord.balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO");                                
        require(tokenAmountOut >= minAmountOut, "Minimum amount out not met");   
        _balances2[msg.sender] -= tokenAmountIn;
        _totalSupply2 -= tokenAmountIn;
        _balances1[msg.sender] += tokenAmountOut;
        _totalSupply1 += tokenAmountOut;
        _totalSupply8 += bmul(tokenAmountIn, bdiv(1, 1000));
        sync();
        emit LOG_SMARTSWAP(msg.sender, Main, Token, tokenAmountIn, tokenAmountOut);
        uint256 hold = IERC20(FEG).balanceOf(address(msg.sender));
        if(address(this).balance > 0 && tokenAmountIn >= 5e16 && hold >= 2e19){
        uint256 re = bdiv(address(this).balance, 8);
        TransferHelper.safeTransferETH(msg.sender, re);
        totalSentRebates += re;
        }
        status = 0;
        return(tokenAmountOut);
    }
    
    function BUY(
        uint256 dot,
        address to,
        uint256 minAmountOut
    )  
        external payable
        returns(uint256 tokenAmountOut)
    {
        require(status == 0, "No reentry");
        status = 1;
        require(open == true, "Swap not opened");
        uint256 maker = bmul(msg.value, bdiv(995, 1000));
        wrap(Main).deposit{value: maker}();
        TransferHelper.safeTransferETH(msg.sender, bmul(msg.value, bdiv(5, 1000)));
        
        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");
        
        uint256 tokenInFee;
        (tokenAmountOut, tokenInFee) = calcOutGivenIn(
                                            inRecord.balance,
                                            bmul(1e18, 25),
                                            outRecord.balance,
                                            bmul(1e18, 25),
                                            bmul(maker, bdiv(999, 1000)),
                                            0
                                        );
                                        
        require(tokenAmountOut <= bmul(outRecord.balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO");
        _totalSupply8 += bmul(msg.value, bdiv(1, 1000));                                
        require(tokenAmountOut >= minAmountOut, "Minimum amount out not met");
        _pushUnderlying(Token, to, tokenAmountOut);
        sync();

        emit LOG_SWAP(msg.sender, Main, Token, msg.value, bmul(tokenAmountOut, bdiv(tx1, 100)));
        status = 0;
        return(tokenAmountOut);
    }
    
    function SELL(
        uint256 dot,
        address to,
        uint256 tokenAmountIn,
        uint256 minAmountOut
    )   
        external
        returns(uint256 tokenAmountOut)
    {   
        if(IsWhiteListContract(msg.sender) == false){
        require(status == 0, "No reentry");
        }
        status = 1;
        require(open == true, "Swap not opened");
        if(Address.isContract(msg.sender) == true){ 
        require(dot == spec, "Contracts are not allowed to interact with the Swap");
        }
        
        require(tokenAmountIn <= MAX_SELL_RATIO, "ERR_SELL_RATIO");
        uint256 omm = _records[Token].balance;
        _pullUnderlying(Token, msg.sender, tokenAmountIn);
        _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1;
        uint256 trueamount = bmul((_records[Token].balance - omm), bdiv(998, 1000));
        
        tokenAmountOut = calcOutGivenIn1(
                                            _records[Token].balance,
                                            bmul(1e18, 25),
                                            _records[Main].balance,
                                            bmul(1e18, 25),
                                            trueamount
                                        );
        
        require(tokenAmountOut <= bmul(_records[Main].balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO");                                
        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 > 1e16){
        _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));
        uint256 oss = bmul(tokAmountI2, bdiv(5, 100));
        uint256 osss = bmul(tokAmountI2, bdiv(15, 100));
        _balances2[pairRewardPool] += bmul(tokAmountI2, bdiv(80, 100));
        _balances2[_setter] += osss;
        _balances2[burn] += oss;
        _totalSupply2 += tokAmountI2;
        _totalSupply7 += tok;
        payStake();
        burnFEG();
        sync();
        emit LOG_SWAP(msg.sender, Token, Main, trueamount, bmul(tokAmountI1, bdiv(99, 100)));
        status = 0;
        return tokAmountI1;
    }
    
     function SELLSmart(
        uint256 tokenAmountIn,
        uint256 minAmountOut
    )   
        external
        returns(uint256 tokenAmountOut)
    {
        require(status == 0, "No reentry");
        status = 1;
        uint256 tai = tokenAmountIn;
        require(_balances1[msg.sender] >= tokenAmountIn, "Not enough Token");
        Record storage inRecord = _records[address(Token)];
        Record storage outRecord = _records[address(Main)];
        require(tokenAmountIn <= MAX_SELL_RATIO, "ERR_SELL_RATIO");

        tokenAmountOut = calcOutGivenIn1(
                                            inRecord.balance,
                                            bmul(1e18, 25),
                                            outRecord.balance,
                                            bmul(1e18, 25),
                                            bmul(tokenAmountIn, bdiv(998, 1000)) // 0.2% liquidity fee
                                        );

        require(tokenAmountOut <= bmul(outRecord.balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO");
        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));
        _totalSupply8 += bmul(io, bdiv(1, 1000));
        require(tokAmountI1 >= minAmountOut, "Minimum amount out not met");
        _balances1[msg.sender] -= tokenAmountIn;
        _totalSupply1 -= tokenAmountIn;
        _balances2[msg.sender] += tokAmountI1;
        _balances2[address(this)] += tokAmountI;
        uint256 os = bmul(tokAmountI2, bdiv(80, 100));
        uint256 oss = bmul(tokAmountI2, bdiv(5, 100));
        uint256 osss = bmul(tokAmountI2, bdiv(15, 100));
        _balances2[pairRewardPool] += os;
        _balances2[_setter] += osss;
        _balances2[burn] += oss;
        _totalSupply2 += (tokAmountI + tokAmountI2 + tokAmountI1);
        _totalSupply7 += tok;
        sync();
        burnFEG();
        emit LOG_SMARTSWAP(msg.sender, Token, Main, tai, tokAmountI1);
        status = 0;
        return(tokAmountI1);
    }
        
    function setPSSRPF(uint256 _PSS, uint256 _RPF) external {
        
        uint256 tot = _records[Main].balance;
        require(msg.sender == _poolOwner && tot >= 5e18, "You do not have permission");
        
        if(tot < 20e18) {// Incentive for providing higher liquidity
        require(_RPF >= 990 && _RPF <= 1000 && _PSS <= 100 && _PSS != 0, "Cannot set over 1%"); 
        }
        
        if(tot >= 20e18) {// Incentive for providing higher liquidity
        require(_RPF >= 900 && _RPF <= 1000 && _PSS <= 500 && _PSS != 0, "Cannot set PSS over 5% or RPF over 10%"); 
        }
        
        RPF = _RPF;
        PSS = _PSS;
    }
    
    function releaseLiquidity(address user) external { // Allows removal of liquidity after the lock period is over
        require(status == 0, "No reentry");
        status = 1;
        require(getUserLock(user) == true, "Liquidity not locked");
        userLock storage ulock = _userlock[user];
        userLock storage time = _unlockTime[user];
        if(msg.sender == _controller){
        time.unlockTime = block.timestamp + 1 days; // 24 hour notice for users
        }
        else{
        require(block.timestamp >= time.unlockTime && msg.sender == _poolOwner, "Liquidity is locked, you cannot release liquidity until after lock time.");
        ulock.setLock = false;
        uint256 total = IERC20(address(this)).balanceOf(user);
        lockedLiquidity -= total;
        }
        status = 0;
    }

    function Migrate() external { //Incase we upgrade to PROv2 in the future
        require(status == 0, "No reentry");
        status = 1;
        require(msg.sender == _poolOwner || msg.sender == _controller && newDep != address(0), "Not ready");
        sync();
        userLock storage ulock = _userlock[_poolOwner];
        IERC20(Main).approve(newDep, 1e30);
        IERC20(Token).approve(newDep, 1e50);
        uint256 tot = _balance[_poolOwner];
        _balance[_poolOwner] -= tot;
        uint256 ts = totalSupply;
        uint256 amt = bmul(_records[Main].balance, bdiv(tot, ts));
        uint256 amt1 = bmul(_records[Token].balance, bdiv(tot, ts));
        totalSupply -= tot;
        ulock.setLock = false;
        lockedLiquidity -= tot;
        newDeployer(newDep).createPair(Token, amt, amt1, _poolOwner);
        sync();
        status = 0;
    }

    function _pullUnderlying(address erc20, address from, uint256 amount)
        internal 
    {   
        bool xfer = IERC20(erc20).transferFrom(from, address(this), amount);
        require(xfer);
    }
    
    function _pushUnderlying(address erc20, address to, uint256 amount)
        internal 
    {   
        bool xfer = IERC20(erc20).transfer(to, amount);
        require(xfer);
    }
    
    function burnFEG() internal {
        if(_totalSupply8 > 25e14){ 
        wrap(Main).withdraw(_totalSupply8);
        swap(fegp).BUY{value:bmul(_totalSupply8, bdiv(99, 100))}(1001, burn, 1);
        _totalSupply8 = 0;
        }
    }
    
    function payStake() internal {   
        if(_totalSupply7 > 2e15) {
        _pushUnderlying(Main, FEGstake, _totalSupply7);
        _totalSupply7 = 0;
        }
    }
    
    function payMain(address payee, uint256 amount)
        external  
        
    {   
        require(_balances2[msg.sender] >= amount, "Not enough token");
        uint256 amt = bmul(amount, bdiv(997, 1000));
        _balances2[msg.sender] -= amount;
        _balances2[payee] += amt;
        _balances2[burn] += bsub(amount, amt);
        status = 0;
    }
    
    function payToken(address payee, uint256 amount)
        external  
        
    {
        require(status == 0, "No reentry");
        status = 1;
        require(_balances1[msg.sender] >= amount, "Not enough token");
        _balances1[msg.sender] -= amount;
        _balances1[payee] += amount;
        status = 0;
    }
}

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":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"},{"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":[{"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_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":"Migrate","outputs":[],"stateMutability":"nonpayable","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":"tokenAmountIn","type":"uint256"}],"name":"calcOutGivenIn1","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcSpotPrice","outputs":[{"internalType":"uint256","name":"spotPrice","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"decreaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"liqtoken","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":"_token1","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"_made","type":"address"},{"internalType":"address","name":"_fegp","type":"address"},{"internalType":"uint256","name":"ol","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"user","type":"address"}],"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":"prp","type":"address"}],"name":"setPRP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_PSS","type":"uint256"},{"internalType":"uint256","name":"_RPF","type":"uint256"}],"name":"setPSSRPF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stake","type":"address"},{"internalType":"address","name":"_fegp","type":"address"},{"internalType":"address","name":"newd","type":"address"}],"name":"setStakePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setTX1","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"}]

Deployed Bytecode

0x6080604052600436106102e15760003560e01c80627b44a7146102ed5780630149e5c714610316578063036fe1bb14610346578063055a03c51461035c57806306fdde031461037257806307d729c414610394578063095ea7b3146103e5578063103ff68d1461040557806310510ec11461042757806312dcff7a1461044757806315e84af91461046757806318160ddd14610487578063192661121461049d578063207aba24146104bd5780632140fb40146104d257806323b872dd146104f257806329dfe3b2146105125780632b9abe1a14610532578063313ce5671461058257806331705705146105ae578063390a73e2146105db57806349a3fa9e146105f15780634f5c3d1b14610611578063520bb81b1461063157806365d1a40d1461065157806366188463146106715780636a8ebcd2146106915780636c5c6814146106a657806370a08231146106bc57806371a1e6dd146106f25780637bc224f91461071257806388f60dcb146107325780638c340f641461075257806395d89b411461077257806396c4b648146107875780639a6204ed146107a7578063a16faa18146107bd578063a221ee49146107d2578063a2e70a2e146107f2578063a9059cbb14610808578063ac7a36a214610828578063add975cc14610848578063ae1931be14610868578063b071148314610888578063b4398244146108a8578063ba9530a6146108be578063bbf12714146108de578063c172715c146108fe578063c241267614610911578063cdfec52d14610931578063d62b6f7e14610947578063d68de8de14610967578063d73dd62314610987578063da6d6578146109a7578063dbb74e22146109bd578063dd62ed3e146109dd578063ef8fdfd814610a23578063f1091b6e14610a43578063f7013ef614610a59578063f8b2cb4f14610a79578063f8d6aed414610ab2578063fbe8998914610ad2578063fcfff16f14610ae8578063fea4393a14610b07578063fff6cae914610b2757600080fd5b366102e857005b600080fd5b3480156102f957600080fd5b5061030360165481565b6040519081526020015b60405180910390f35b34801561032257600080fd5b50610336610331366004614c0c565b610b3c565b604051901515815260200161030d565b34801561035257600080fd5b5061030360195481565b34801561036857600080fd5b5061030360135481565b34801561037e57600080fd5b50610387610b5a565b60405161030d919061501b565b3480156103a057600080fd5b506103ce6103af366004614c0c565b6021602052600090815260409020805460019091015460ff9091169082565b60408051921515835260208301919091520161030d565b3480156103f157600080fd5b50610336610400366004614db7565b610be8565b34801561041157600080fd5b50610425610420366004614d80565b610c43565b005b34801561043357600080fd5b50610425610442366004614db7565b610c85565b34801561045357600080fd5b50610425610462366004614c0c565b610d3c565b34801561047357600080fd5b50610303610482366004614c27565b610dc0565b34801561049357600080fd5b5061030360025481565b3480156104a957600080fd5b506104256104b8366004614db7565b610e2e565b3480156104c957600080fd5b50610425610fbe565b3480156104de57600080fd5b506103366104ed366004614c0c565b6112ff565b3480156104fe57600080fd5b5061033661050d366004614d44565b61131c565b34801561051e57600080fd5b5061042561052d366004614e90565b61145b565b34801561053e57600080fd5b5061057461054d366004614c0c565b6001600160a01b031660009081526024602090815260408083205460239092529091205491565b60405161030d929190615327565b34801561058e57600080fd5b5060055461059c9060ff1681565b60405160ff909116815260200161030d565b3480156105ba57600080fd5b506010546105ce906001600160a01b031681565b60405161030d9190614fee565b3480156105e757600080fd5b50610303601b5481565b3480156105fd57600080fd5b5061042561060c366004614c5a565b611773565b34801561061d57600080fd5b5061030361062c366004614f54565b6117c9565b34801561063d57600080fd5b50600c546105ce906001600160a01b031681565b34801561065d57600080fd5b5061042561066c366004614db7565b61184f565b34801561067d57600080fd5b5061033661068c366004614db7565b61192c565b34801561069d57600080fd5b50610425611a02565b3480156106b257600080fd5b5061030360255481565b3480156106c857600080fd5b506103036106d7366004614c0c565b6001600160a01b031660009081526020819052604090205490565b3480156106fe57600080fd5b5061042561070d366004614e90565b611a2a565b34801561071e57600080fd5b5061042561072d366004614c5a565b611b94565b34801561073e57600080fd5b5061042561074d366004614f0e565b611bea565b34801561075e57600080fd5b5061042561076d366004614f0e565b611d61565b34801561077e57600080fd5b50610387611ee0565b34801561079357600080fd5b506104256107a2366004614c0c565b611eed565b3480156107b357600080fd5b50610303601d5481565b3480156107c957600080fd5b506104256120dd565b3480156107de57600080fd5b506103036107ed366004614f54565b612207565b3480156107fe57600080fd5b5061030360185481565b34801561081457600080fd5b50610336610823366004614db7565b61226c565b34801561083457600080fd5b50610425610843366004614db7565b6122a8565b34801561085457600080fd5b50610303610863366004614e55565b61257a565b34801561087457600080fd5b50610303610883366004614f0e565b612b18565b34801561089457600080fd5b506104256108a3366004614cf9565b612f39565b3480156108b457600080fd5b50610303601c5481565b3480156108ca57600080fd5b506105746108d9366004614f8f565b613443565b3480156108ea57600080fd5b506104256108f9366004614db7565b6134d4565b61030361090c366004614e30565b6137a0565b34801561091d57600080fd5b50600f546105ce906001600160a01b031681565b34801561093d57600080fd5b5061030360145481565b34801561095357600080fd5b50600d546105ce906001600160a01b031681565b34801561097357600080fd5b50610425610982366004614dfe565b613b15565b34801561099357600080fd5b506103366109a2366004614db7565b613b31565b3480156109b357600080fd5b50610303601a5481565b3480156109c957600080fd5b506104256109d8366004614c0c565b613ba4565b3480156109e957600080fd5b506103036109f8366004614c27565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a2f57600080fd5b506012546105ce906001600160a01b031681565b348015610a4f57600080fd5b5061030360155481565b348015610a6557600080fd5b50610425610a74366004614c9d565b613bdd565b348015610a8557600080fd5b50610303610a94366004614c0c565b6001600160a01b03166000908152601f602052604090206001015490565b348015610abe57600080fd5b50610574610acd366004614f8f565b613d06565b348015610ade57600080fd5b5061030360265481565b348015610af457600080fd5b50601e5461033690610100900460ff1681565b348015610b1357600080fd5b50610303610b22366004614f0e565b613db0565b348015610b3357600080fd5b506104256140d3565b6001600160a01b031660009081526022602052604090205460ff1690565b60038054610b67906153c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b93906153c3565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b505050505081565b3360008181526001602090815260408083206001600160a01b0387168085529252808320859055519192909160008051602061550183398151915290610c319086815260200190565b60405180910390a35060015b92915050565b6008546001600160a01b03163314610c5a57600080fd5b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b60275415610cae5760405162461bcd60e51b8152600401610ca59061504e565b60405180910390fd5b600160275533600090815260236020526040902054811115610ce25760405162461bcd60e51b8152600401610ca5906150d0565b3360009081526023602052604081208054839290610d01908490615380565b90915550506001600160a01b03821660009081526023602052604081208054839290610d2e908490615335565b909155505060006027555050565b600c546001600160a01b031633148015610d645750600d546001600160a01b03828116911614155b8015610d7e5750600f546001600160a01b03828116911614155b610d8757600080fd5b610d908161424e565b1515600114610d9e57600080fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038083166000908152601f6020526040808220928416825281206001830154919291610e2590610e00670de0b6b3a7640000601961428e565b8360010154610e18670de0b6b3a7640000601961428e565b66071afd498d0000612207565b95945050505050565b600d546001600160a01b0383811691161480610e575750600f546001600160a01b038381169116145b610e735760405162461bcd60e51b8152600401610ca590615300565b60275415610e935760405162461bcd60e51b8152600401610ca59061504e565b6001602755600f546001600160a01b0383811691161415610f345733600090815260236020526040902054811115610edd5760405162461bcd60e51b8152600401610ca5906150a6565b8060186000828254610eef9190615380565b90915550503360009081526023602052604081208054839290610f13908490615380565b9091555050600f54610f2f906001600160a01b03163383614322565b610fb5565b33600090815260246020526040902054811115610f635760405162461bcd60e51b8152600401610ca5906151a9565b8060196000828254610f759190615380565b90915550503360009081526024602052604081208054839290610f99908490615380565b9091555050600d54610fb5906001600160a01b03163383614322565b50506000602755565b60275415610fde5760405162461bcd60e51b8152600401610ca59061504e565b6001602755600c546001600160a01b031633148061101b57506007546001600160a01b03163314801561101b5750600e546001600160a01b031615155b6110535760405162461bcd60e51b81526020600482015260096024820152684e6f7420726561647960b81b6044820152606401610ca5565b61105b6140d3565b600c546001600160a01b03908116600090815260208052604090819020600d54600e54925163095ea7b360e01b815291939081169263095ea7b3926110b592919091169068327cb2734119d3b7a9601e1b90600401615002565b602060405180830381600087803b1580156110cf57600080fd5b505af11580156110e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111079190614de1565b50600f54600e5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611150929116906e111b0ec57e6499a1f4b1014d3f6d5960321b90600401615002565b602060405180830381600087803b15801561116a57600080fd5b505af115801561117e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a29190614de1565b50600c546001600160a01b031660009081526020819052604081208054918291906111cd8380615380565b9091555050600254600d546001600160a01b03166000908152601f60205260408120600101546112069061120185856143b7565b61428e565b600f546001600160a01b03166000908152601f6020526040812060010154919250906112369061120186866143b7565b9050836002600082825461124a9190615380565b9091555050845460ff19168555601c805485919060009061126c908490615380565b9091555050600e54600f54600c54604051632f1c0f2560e01b81526001600160a01b03928316600482015260248101869052604481018590529082166064820152911690632f1c0f2590608401600060405180830381600087803b1580156112d357600080fd5b505af11580156112e7573d6000803e3d6000fd5b505050506112f36140d3565b50506000602755505050565b6001600160a01b0316600090815260208052604090205460ff1690565b6000336001600160a01b038516148061135857506001600160a01b03841660009081526001602090815260408083203384529091529020548211155b61136157600080fd5b61136a336112ff565b156113875760405162461bcd60e51b8152600401610ca59061514e565b611392848484614489565b336001600160a01b038516148015906113d057506001600160a01b038416600090815260016020908152604080832033845290915290205460001914155b15611451576001600160a01b03841660009081526001602090815260408083203384529091529020546114039083614547565b6001600160a01b038581166000908152600160209081526040808320338085529083529281902085905551938452918616929091600080516020615501833981519152910160405180910390a35b5060019392505050565b611464336112ff565b156114815760405162461bcd60e51b8152600401610ca59061514e565b602754156114a15760405162461bcd60e51b8152600401610ca59061504e565b60016027556114ae6140d3565b60025460006114bd85836143b7565b336000908152602081905260408120805492935087929091906114e1908490615380565b9250508190555084600260008282546114fa9190615380565b909155505060405185815260009033906000805160206154e18339815191529060200160405180910390a360005b6017548110156116255760006017828154811061154757611547615459565b60009182526020808320909101546001600160a01b0316808352601f90915260408220600101549092509061157c858361428e565b905087878581811061159057611590615459565b905060200201358110156115b65760405162461bcd60e51b8152600401610ca5906151d2565b826001600160a01b0316336001600160a01b03167f9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f38360006040516115fc929190615327565b60405180910390a361160f833383614322565b505050808061161d906153fe565b915050611528565b50600b546001600160a01b031660009081526024602052604081205461164c90839061428e565b600b546001600160a01b031660009081526024602052604081208054929350839290919061167b908490615380565b9091555050336000908152602460205260408120805483929061169f908490615335565b909155506116ad90506140d3565b6012546001600160a01b031615611766576012546040516370a0823160e01b81526000916117459185916001600160a01b0316906370a08231906116f5903090600401614fee565b60206040518083038186803b15801561170d57600080fd5b505afa158015611721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190614e17565b9050801561176457601254611764906001600160a01b03163383614322565b505b5050600060275550505050565b6008546001600160a01b0316331461178a57600080fd5b601180546001600160a01b039485166001600160a01b0319918216179091556009805493851693821693909317909255600e8054919093169116179055565b6000806117d686856143b7565b905060006117ed670de0b6b3a76400006000614547565b90506117f9848261428e565b905060006118108961180b8b856145a4565b6143b7565b9050600061181e82856145fd565b90506000611834670de0b6b3a764000083614547565b9050611840898261428e565b9b9a5050505050505050505050565b3360009081526024602052604090205481111561187e5760405162461bcd60e51b8152600401610ca5906150d0565b6000611892826112016103e56103e86143b7565b336000908152602460205260408120805492935084929091906118b6908490615380565b90915550506001600160a01b038316600090815260246020526040812080548392906118e3908490615335565b909155506118f390508282614547565b600b546001600160a01b03166000908152602460205260408120805490919061191d908490615335565b90915550506000602755505050565b3360009081526001602090815260408083206001600160a01b038616845290915281205480831115611981573360009081526001602090815260408083206001600160a01b03881684529091528120556119b0565b61198b8184614547565b3360009081526001602090815260408083206001600160a01b03891684529091529020555b3360008181526001602090815260408083206001600160a01b03891680855290835292819020549051908152919291600080516020615501833981519152910160405180910390a35060019392505050565b600c546001600160a01b03163314611a1957600080fd5b601e805461ff001916610100179055565b60275415611a4a5760405162461bcd60e51b8152600401610ca59061504e565b60016027556002546000611a5e85836143b7565b9050611a69336112ff565b151560011415611a8b5784601c6000828254611a859190615335565b90915550505b60005b601754811015611b7857600060178281548110611aad57611aad615459565b60009182526020808320909101546001600160a01b0316808352601f909152604082206001015490925090611ae2858361428e565b9050878785818110611af657611af6615459565b90506020020135811115611b0957600080fd5b826001600160a01b0316336001600160a01b03167f15a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a836000604051611b4f929190615327565b60405180910390a3611b62833383614701565b5050508080611b70906153fe565b915050611a8e565b50611b8285614740565b611b8c33866147a3565b6112f36140d3565b6007546001600160a01b03163314611bab57600080fd5b600780546001600160a01b039485166001600160a01b0319918216179091556008805493851693821693909317909255600c8054919093169116179055565b600d546001600160a01b039081166000908152601f6020526040902060010154600c5490911633148015611c265750674563918244f400008110155b611c425760405162461bcd60e51b8152600401610ca590615072565b6801158e460913d00000811015611cc0576103de8210158015611c6757506103e88211155b8015611c74575060648311155b8015611c7f57508215155b611cc05760405162461bcd60e51b815260206004820152601260248201527143616e6e6f7420736574206f76657220312560701b6044820152606401610ca5565b6801158e460913d000008110611d58576103848210158015611ce457506103e88211155b8015611cf257506101f48311155b8015611cfd57508215155b611d585760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073657420505353206f766572203525206f7220525046206f7660448201526565722031302560d01b6064820152608401610ca5565b50601655601555565b600c546001600160a01b03163314611d8b5760405162461bcd60e51b8152600401610ca590615072565b600f54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015611dd057600080fd5b505afa158015611de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e089190614e17565b9050611e166103e88261534d565b8310158015611e255750808311155b611e8c5760405162461bcd60e51b815260206004820152603260248201527f6d696e20302e3125206f6620746f6b656e20737570706c792c206d61782031306044820152713025206f6620746f6b656e20737570706c7960701b6064820152608401610ca5565b670de0b6b3a7640000821015611ed45760405162461bcd60e51b815260206004820152600d60248201526c3120424e42206d696e696d756d60981b6044820152606401610ca5565b50601491909155601355565b60048054610b67906153c3565b60275415611f0d5760405162461bcd60e51b8152600401610ca59061504e565b6001602755611f1b816112ff565b1515600114611f635760405162461bcd60e51b8152602060048201526014602482015273131a5c5d5a591a5d1e481b9bdd081b1bd8dad95960621b6044820152606401610ca5565b6001600160a01b0381811660009081526020808052604080832060219092529091206007549192909116331415611fab57611fa14262015180615335565b60018201556120d3565b80600101544210158015611fc95750600c546001600160a01b031633145b61203a5760405162461bcd60e51b8152602060048201526048602482015260008051602061552183398151915260448201527f72656c65617365206c697175696469747920756e74696c206166746572206c6f60648201526731b5903a34b6b29760c11b608482015260a401610ca5565b815460ff191682556040516370a0823160e01b815260009030906370a0823190612068908790600401614fee565b60206040518083038186803b15801561208057600080fd5b505afa158015612094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b89190614e17565b905080601c60008282546120cc9190615380565b9091555050505b5050600060275550565b336120e7816112ff565b1561212f5760405162461bcd60e51b8152602060048201526018602482015277131a5c5d5a591a5d1e48185b1c9958591e481b1bd8dad95960421b6044820152606401610ca5565b6040516370a0823160e01b815260009030906370a0823190612155908590600401614fee565b60206040518083038186803b15801561216d57600080fd5b505afa158015612181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a59190614e17565b6001600160a01b0383166000908152602080805260408083206021909252909120815460ff19166001178255919250906121e2426276a700615335565b816001018190555082601c60008282546121fc9190615335565b909155505050505050565b60008061221487876143b7565b9050600061222286866143b7565b9050600061223083836143b7565b90506000612252670de0b6b3a764000061180b670de0b6b3a764000089614547565b905061225e828261428e565b9a9950505050505050505050565b6000612277336112ff565b156122945760405162461bcd60e51b8152600401610ca59061514e565b61229f338484614489565b50600192915050565b601e5460ff16156122b857600080fd5b600f546040516370a0823160e01b81526000916001600160a01b0316906370a08231906122e9903090600401614fee565b60206040518083038186803b15801561230157600080fd5b505afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190614e17565b600d546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061236f903090600401614fee565b60206040518083038186803b15801561238757600080fd5b505afa15801561239b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bf9190614e17565b6040805180820182526017805482526020808301878152600f80546001600160a01b039081166000908152601f80865288822097518855935160019788015587518089018952865481528086018a8152600d80548516845295909652888220905181559451948701949094558154855480880187557fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1590810180549284166001600160a01b03199384161790559354865480890190975595909301805495821695909316949094179091555490911681529182200154919250906124a790633b9aca006143b7565b600d546001600160a01b03166000908152601f6020526040812060010154919250906124db90670de0b6b3a76400006143b7565b905060006124e98284615335565b90506124f481614740565b6124fe87826147a3565b61250a601c54826145a4565b601c556001600160a01b0387166000908152602080805260408083206021909252909120815460ff19166001178255612547426301e13380615335565b600180830191909155601e805460ff1916909117905561256c6064611201898b6143b7565b602555505050505050505050565b600061258533610b3c565b6125a957602754156125a95760405162461bcd60e51b8152600401610ca59061504e565b60016027819055601e54610100900460ff161515146125da5760405162461bcd60e51b8152600401610ca590615206565b6125e3336147b2565b15156001141561260e57600654851461260e5760405162461bcd60e51b8152600401610ca5906152ad565b6014548311156126305760405162461bcd60e51b8152600401610ca590615259565b600f546001600160a01b03166000818152601f60205260409020600101549061265a903386614701565b601854600f546040516370a0823160e01b81526001600160a01b03909116906370a082319061268d903090600401614fee565b60206040518083038186803b1580156126a557600080fd5b505afa1580156126b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126dd9190614e17565b6126e79190615380565b600f80546001600160a01b039081166000908152601f602052604080822060019081019590955592549091168152908120909101546127399061272b908490615380565b6112016103e66103e86143b7565b600f546001600160a01b03166000908152601f60205260409020600101549091506127a890612771670de0b6b3a7640000601961428e565b600d546001600160a01b03166000908152601f60205260409020600101546127a2670de0b6b3a7640000601961428e565b856117c9565b600d546001600160a01b03166000908152601f60205260409020600101549093506127d990611201603260646143b7565b8311156127f85760405162461bcd60e51b8152600401610ca590615281565b838310156128185760405162461bcd60e51b8152600401610ca5906151d2565b600061282c846112016016546103e86143b7565b9050600061284182611201600f6127106143b7565b9050600061285683611201600f6127106143b7565b9050600061286c846112016015546127106143b7565b905060008161287b8486615335565b6128859190615335565b61288f9086615380565b905060006128a5826112016103e76103e86143b7565b30600090815260246020526040902054909150662386f26fc100008111156128ef5780601960008282546128d99190615380565b9091555050306000908152602460205260408120555b600d546001600160a01b0316632e1a7d4d8761290b8486615335565b6129159190615335565b6040518263ffffffff1660e01b815260040161293391815260200190565b600060405180830381600087803b15801561294d57600080fd5b505af1158015612961573d6000803e3d6000fd5b5050505061297e8d61297984611201606360646143b7565b6147d9565b61298f8361120160016103e86143b7565b601b60008282546129a09190615335565b90915550600090506129b885611201600560646143b7565b905060006129cc86611201600f60646143b7565b90506129de86611201605060646143b7565b6010546001600160a01b031660009081526024602052604081208054909190612a08908490615335565b90915550506008546001600160a01b031660009081526024602052604081208054839290612a37908490615335565b9091555050600b546001600160a01b031660009081526024602052604081208054849290612a66908490615335565b925050819055508560196000828254612a7f9190615335565b9250508190555086601a6000828254612a989190615335565b90915550612aa690506148a7565b612aae6148e0565b612ab66140d3565b600d54600f546001600160a01b039182169116336000805160206154c18339815191528d612aea89611201606360646143b7565b604051612af8929190615327565b60405180910390a450506000602755509c9b505050505050505050505050565b6000602754600014612b3c5760405162461bcd60e51b8152600401610ca59061504e565b6001602755336000908152602360205260409020548390811115612b725760405162461bcd60e51b8152600401610ca5906150a6565b600f546001600160a01b039081166000908152601f6020526040808220600d5490931682529020601454861115612bbb5760405162461bcd60e51b8152600401610ca590615259565b612c008260010154612bd6670de0b6b3a7640000601961428e565b8360010154612bee670de0b6b3a7640000601961428e565b61062c8b6112016103e66103e86143b7565b9350612c168160010154611201603260646143b7565b841115612c355760405162461bcd60e51b8152600401610ca590615281565b6000612c49856112016016546103e86143b7565b90506000612c5e82611201600f6127106143b7565b90506000612c7383611201600f6127106143b7565b90506000612c89846112016015546127106143b7565b9050600081612c988486615335565b612ca29190615335565b612cac9086615380565b90506000612cc2826112016103e76103e86143b7565b9050612cd58261120160016103e86143b7565b601b6000828254612ce69190615335565b90915550508a811015612d0b5760405162461bcd60e51b8152600401610ca5906151d2565b33600090815260236020526040812080548e9290612d2a908490615380565b925050819055508b60186000828254612d439190615380565b90915550503360009081526024602052604081208054839290612d67908490615335565b90915550503060009081526024602052604081208054879290612d8b908490615335565b9091555060009050612da384611201605060646143b7565b90506000612db785611201600560646143b7565b90506000612dcb86611201600f60646143b7565b6010546001600160a01b0316600090815260246020526040812080549293508592909190612dfa908490615335565b90915550506008546001600160a01b031660009081526024602052604081208054839290612e29908490615335565b9091555050600b546001600160a01b031660009081526024602052604081208054849290612e58908490615335565b90915550849050612e69878a615335565b612e739190615335565b60196000828254612e849190615335565b9250508190555086601a6000828254612e9d9190615335565b90915550612eab90506140d3565b612eb36148e0565b600d60009054906101000a90046001600160a01b03166001600160a01b0316600f60009054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b03166000805160206154a18339815191528f88604051612f1a929190615327565b60405180910390a450506000602755509b9a5050505050505050505050565b600d546001600160a01b0384811691161480612f625750600f546001600160a01b038481169116145b612f7e5760405162461bcd60e51b8152600401610ca590615300565b60275415612f9e5760405162461bcd60e51b8152600401610ca59061504e565b6001602755600d546001600160a01b03848116911614156131fb5733600090815260246020526040902054811115612fe85760405162461bcd60e51b8152600401610ca5906151a9565b600d5460405163095ea7b360e01b81526001600160a01b039091169063095ea7b39061301a9087908590600401615002565b602060405180830381600087803b15801561303457600080fd5b505af1158015613048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306c9190614de1565b50806019600082825461307f9190615380565b909155505033600090815260246020526040812080548392906130a3908490615380565b9091555050600d54604051632efc49c560e21b81526001600160a01b038681169263bbf12714926130dc92909116908590600401615002565b600060405180830381600087803b1580156130f657600080fd5b505af115801561310a573d6000803e3d6000fd5b50505050600080856001600160a01b0316632b9abe1a306040518263ffffffff1660e01b815260040161313d9190614fee565b6040805180830381600087803b15801561315657600080fd5b505af115801561316a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318e9190614f30565b6040516365d1a40d60e01b815291935091506001600160a01b038716906365d1a40d906131c19087908590600401615002565b600060405180830381600087803b1580156131db57600080fd5b505af11580156131ef573d6000803e3d6000fd5b50613438945050505050565b3360009081526023602052604090205481111561322a5760405162461bcd60e51b8152600401610ca5906150a6565b600f5460405163095ea7b360e01b81526001600160a01b039091169063095ea7b39061325c9087908590600401615002565b602060405180830381600087803b15801561327657600080fd5b505af115801561328a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ae9190614de1565b5080601860008282546132c19190615380565b909155505033600090815260236020526040812080548392906132e5908490615380565b9091555050600f54604051632efc49c560e21b81526001600160a01b038681169263bbf127149261331e92909116908590600401615002565b600060405180830381600087803b15801561333857600080fd5b505af115801561334c573d6000803e3d6000fd5b50505050600080856001600160a01b0316632b9abe1a306040518263ffffffff1660e01b815260040161337f9190614fee565b6040805180830381600087803b15801561339857600080fd5b505af11580156133ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d09190614f30565b6040516310510ec160e01b815291935091506001600160a01b038716906310510ec1906134039087908690600401615002565b600060405180830381600087803b15801561341d57600080fd5b505af1158015613431573d6000803e3d6000fd5b5050505050505b505060006027555050565b600080600061345288876143b7565b90506000613468670de0b6b3a764000086614547565b9050613474868261428e565b905060006134868b61180b8d856145a4565b9050600061349482856145fd565b905060006134aa670de0b6b3a764000083614547565b90506134b68b8261428e565b96506134c28985614547565b95505050505050965096945050505050565b600d546001600160a01b03838116911614806134fd5750600f546001600160a01b038381169116145b6135195760405162461bcd60e51b8152600401610ca590615300565b602754156135395760405162461bcd60e51b8152600401610ca59061504e565b60016027819055601e54610100900460ff1615151461355757600080fd5b600f546001600160a01b038381169116141561367a57600f546001600160a01b03166000818152601f602052604090206001015490613597903384614701565b600f546040516370a0823160e01b8152600091613626916001600160a01b03909116906370a08231906135ce903090600401614fee565b60206040518083038186803b1580156135e657600080fd5b505afa1580156135fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361e9190614e17565b601854614547565b905060006136348284614547565b905080601860008282546136489190615335565b9091555050336000908152602360205260408120805483929061366c908490615335565b90915550610fb59350505050565b600d546001600160a01b03166000818152601f6020526040902060010154906136a4903384614701565b600d546040516370a0823160e01b8152600091613749916001600160a01b03909116906370a08231906136db903090600401614fee565b60206040518083038186803b1580156136f357600080fd5b505afa158015613707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372b9190614e17565b61374460195461373f601a54601b546145a4565b6145a4565b614547565b905060006137578284614547565b9050806019600082825461376b9190615335565b9091555050336000908152602460205260408120805483929061378f908490615335565b909155505050505050506000602755565b60006027546000146137c45760405162461bcd60e51b8152600401610ca59061504e565b60016027819055601e54610100900460ff161515146137f55760405162461bcd60e51b8152600401610ca590615206565b6000613809346112016103e36103e86143b7565b9050600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561385b57600080fd5b505af115801561386f573d6000803e3d6000fd5b5050505050613889336129793461120160056103e86143b7565b613892336147b2565b1515600114156138bd5760065485146138bd5760405162461bcd60e51b8152600401610ca5906152ad565b600a546040516370a0823160e01b81526000916001600160a01b0316906370a08231906138ee903390600401614fee565b60206040518083038186803b15801561390657600080fd5b505afa15801561391a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393e9190614e17565b9050478015801590613957575066b1a2bc2ec500003410155b801561396c57506801158e460913d000008210155b15613979576139796149f2565b600d546001600160a01b039081166000908152601f6020526040808220600f54909316825290206013543411156139c25760405162461bcd60e51b8152600401610ca5906150fa565b6000613a1083600101546139df670de0b6b3a7640000601961428e565b84600101546139f7670de0b6b3a7640000601961428e565b613a098b6112016103e76103e86143b7565b6000613443565b60018401549198509150613a2a90611201603260646143b7565b871115613a495760405162461bcd60e51b8152600401610ca590615281565b613a5a3461120160016103e86143b7565b601b6000828254613a6b9190615335565b909155505087871015613a905760405162461bcd60e51b8152600401610ca5906151d2565b600f54613aa7906001600160a01b03168a89614322565b613aaf6140d3565b600f54600d546025546001600160a01b03928316929091169033906000805160206154c1833981519152903490613aed908d906112019060646143b7565b604051613afb929190615327565b60405180910390a450506000602755505050509392505050565b6008546001600160a01b03163314613b2c57600080fd5b602555565b3360009081526001602090815260408083206001600160a01b0386168452909152812054613b5f90836145a4565b3360008181526001602090815260408083206001600160a01b038916808552908352928190208590555193845290926000805160206155018339815191529101610c31565b6008546001600160a01b03163314613bbb57600080fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b601e5460ff1615613c245760405162461bcd60e51b815260206004820152601160248201527043616e206f6e6c7920757365206f6e636560781b6044820152606401610ca5565b600f80546001600160a01b038088166001600160a01b03199283168117909355600c8054888316908416811790915560108054841690911790556006849055600980548683169084161790556011805491871691909216179055604080516318160ddd60e01b81529051613cfc92916318160ddd916004808301926020929190829003018186803b158015613cb857600080fd5b505afa158015613ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf09190614e17565b611201600160146143b7565b6014555050505050565b6000806000613d1586896143b7565b90506000613d238887614547565b90506000613d3189836143b7565b90506000613d3f82856145fd565b9050613d5381670de0b6b3a7640000614547565b9050613d5f8c8261428e565b9050613d73670de0b6b3a764000088614547565b9550613d7f81876143b7565b9550613d9381670de0b6b3a76400006143b7565b9450613d9f8686614547565b945050505050965096945050505050565b33600090815260246020526040812054831115613e0f5760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f756768204d61696e2c206465706f736974206d6f72650000006044820152606401610ca5565b60275415613e2f5760405162461bcd60e51b8152600401610ca59061504e565b6001602755600d546001600160a01b039081166000908152601f6020526040808220600f5490931682529020601354851115613e7d5760405162461bcd60e51b8152600401610ca5906150fa565b6000613e9a83600101546139df670de0b6b3a7640000601961428e565b60018401549195509150613eb490611201603260646143b7565b841115613ed35760405162461bcd60e51b8152600401610ca590615281565b84841015613ef35760405162461bcd60e51b8152600401610ca5906151d2565b3360009081526024602052604081208054889290613f12908490615380565b925050819055508560196000828254613f2b9190615380565b90915550503360009081526023602052604081208054869290613f4f908490615335565b925050819055508360186000828254613f689190615335565b90915550613f7f90508661120160016103e86143b7565b601b6000828254613f909190615335565b90915550613f9e90506140d3565b600f54600d546040516001600160a01b03928316929091169033906000805160206154a183398151915290613fd6908b908a90615327565b60405180910390a4600a546040516370a0823160e01b81526000916001600160a01b0316906370a082319061400f903390600401614fee565b60206040518083038186803b15801561402757600080fd5b505afa15801561403b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405f9190614e17565b9050600047118015614078575066b1a2bc2ec500008710155b801561408d57506801158e460913d000008110155b156140c457600061409f4760086143b7565b90506140ab33826147d9565b80601d60008282546140bd9190615335565b9091555050505b50506000602755505092915050565b601854600f546040516370a0823160e01b81526001600160a01b03909116906370a0823190614106903090600401614fee565b60206040518083038186803b15801561411e57600080fd5b505afa158015614132573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141569190614e17565b6141609190615380565b600f546001600160a01b03166000908152601f6020526040812060010191909155601b54601a546019546141949190615335565b61419e9190615335565b600d546040516370a0823160e01b815291925082916001600160a01b03909116906370a08231906141d3903090600401614fee565b60206040518083038186803b1580156141eb57600080fd5b505afa1580156141ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142239190614e17565b61422d9190615380565b600d546001600160a01b03166000908152601f602052604090206001015550565b600061425982610b3c565b1561426657506000919050565b813f60008051602061548183398151915281158015906142865750808214155b949350505050565b60008061429b8385615361565b90508315806142b25750826142b0858361534d565b145b6142ce5760405162461bcd60e51b8152600401610ca59061522f565b60006142e2826706f05b59d3b20000615335565b9050818110156143045760405162461bcd60e51b8152600401610ca59061522f565b6000614318670de0b6b3a76400008361534d565b9695505050505050565b60405163a9059cbb60e01b81526000906001600160a01b0385169063a9059cbb906143539086908690600401615002565b602060405180830381600087803b15801561436d57600080fd5b505af1158015614381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143a59190614de1565b9050806143b157600080fd5b50505050565b6000816143f55760405162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b6044820152606401610ca5565b600061440984670de0b6b3a7640000615361565b9050831580614428575061441d848261534d565b670de0b6b3a7640000145b6144445760405162461bcd60e51b8152600401610ca590615124565b600061445160028561534d565b61445b9083615335565b90508181101561447d5760405162461bcd60e51b8152600401610ca590615124565b6000614318858361534d565b6001600160a01b0383166000908152602081905260409020548111156144ae57600080fd5b6001600160a01b0383166000908152602081905260409020546144d19082614547565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461450090826145a4565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616916000805160206154e1833981519152910160405180910390a3505050565b60008060006145568585614a25565b91509150801561459c5760405162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b6044820152606401610ca5565b509392505050565b6000806145b18385615335565b9050838110156145f65760405162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b6044820152606401610ca5565b9392505050565b600060018310156146485760405162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b6044820152606401610ca5565b671bc16d674ec7ffff8311156146995760405162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b6044820152606401610ca5565b60006146a483614a5c565b905060006146b28483614547565b905060006146c8866146c385614a79565b614a8d565b9050816146d9579250610c3d915050565b60006146ea87846305f5e100614b00565b90506146f6828261428e565b979650505050505050565b6040516323b872dd60e01b81526001600160a01b03838116600483015230602483015260448201839052600091908516906323b872dd90606401614353565b3060009081526020819052604090205461475a90826145a4565b3060009081526020819052604090205560025461477790826145a4565b60025560405181815230906000906000805160206154e18339815191529060200160405180910390a350565b6147ae308383614489565b5050565b6000813f600080516020615481833981519152818114801590614286575050151592915050565b604080516000808252602082019092526001600160a01b0384169083906040516148039190614fd2565b60006040518083038185875af1925050503d8060008114614840576040519150601f19603f3d011682016040523d82523d6000602084013e614845565b606091505b50509050806148a25760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610ca5565b505050565b66071afd498d0000601a5411156148de57600d54601154601a546148d8926001600160a01b03908116921690614322565b6000601a555b565b6608e1bc9bf04000601b5411156148de57600d54601b54604051632e1a7d4d60e01b81526001600160a01b0390921691632e1a7d4d916149269160040190815260200190565b600060405180830381600087803b15801561494057600080fd5b505af1158015614954573d6000803e3d6000fd5b5050600954601b546001600160a01b03909116925063c172715c915061498090611201606360646143b7565b600b5460405160e084901b6001600160e01b03191681526103e960048201526001600160a01b039091166024820152600160448201526064016000604051808303818588803b1580156149d257600080fd5b505af11580156149e6573d6000803e3d6000fd5b50506000601b55505050565b60006149ff60084761534d565b9050614a0b33826147d9565b80601d6000828254614a1d9190615335565b909155505050565b600080828410614a4457614a398385615380565b600091509150614a55565b614a4e8484615380565b6001915091505b9250929050565b6000614a6782614a79565b610c3d90670de0b6b3a7640000615361565b6000610c3d670de0b6b3a76400008361534d565b600080614a9b600284615419565b614aad57670de0b6b3a7640000614aaf565b835b9050614abc60028461534d565b92505b82156145f657614acf848561428e565b9350614adc600284615419565b15614aee57614aeb818561428e565b90505b614af960028461534d565b9250614abf565b6000828180614b1787670de0b6b3a7640000614a25565b9092509050670de0b6b3a764000080600060015b888410614be1576000614b4682670de0b6b3a7640000615361565b9050600080614b668a614b6185670de0b6b3a7640000614547565b614a25565b91509150614b7887611201848c61428e565b9650614b8487846143b7565b965086614b9357505050614be1565b8715614b9d579315935b8015614ba7579315935b8415614bbe57614bb78688614547565b9550614bcb565b614bc886886145a4565b95505b5050508080614bd9906153fe565b915050614b2b565b50909998505050505050505050565b80356001600160a01b0381168114614c0757600080fd5b919050565b600060208284031215614c1e57600080fd5b6145f682614bf0565b60008060408385031215614c3a57600080fd5b614c4383614bf0565b9150614c5160208401614bf0565b90509250929050565b600080600060608486031215614c6f57600080fd5b614c7884614bf0565b9250614c8660208501614bf0565b9150614c9460408501614bf0565b90509250925092565b600080600080600060a08688031215614cb557600080fd5b614cbe86614bf0565b9450614ccc60208701614bf0565b9350614cda60408701614bf0565b9250614ce860608701614bf0565b949793965091946080013592915050565b60008060008060808587031215614d0f57600080fd5b614d1885614bf0565b9350614d2660208601614bf0565b9250614d3460408601614bf0565b9396929550929360600135925050565b600080600060608486031215614d5957600080fd5b614d6284614bf0565b9250614d7060208501614bf0565b9150604084013590509250925092565b60008060408385031215614d9357600080fd5b614d9c83614bf0565b91506020830135614dac8161546f565b809150509250929050565b60008060408385031215614dca57600080fd5b614dd383614bf0565b946020939093013593505050565b600060208284031215614df357600080fd5b81516145f68161546f565b600060208284031215614e1057600080fd5b5035919050565b600060208284031215614e2957600080fd5b5051919050565b600080600060608486031215614e4557600080fd5b83359250614d7060208501614bf0565b60008060008060808587031215614e6b57600080fd5b84359350614e7b60208601614bf0565b93969395505050506040820135916060013590565b600080600060408486031215614ea557600080fd5b8335925060208401356001600160401b0380821115614ec357600080fd5b818601915086601f830112614ed757600080fd5b813581811115614ee657600080fd5b8760208260051b8501011115614efb57600080fd5b6020830194508093505050509250925092565b60008060408385031215614f2157600080fd5b50508035926020909101359150565b60008060408385031215614f4357600080fd5b505080516020909101519092909150565b600080600080600060a08688031215614f6c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060008060008060c08789031215614fa857600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008251614fe4818460208701615397565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602081526000825180602084015261503a816040850160208701615397565b601f01601f19169190910160400192915050565b6020808252600a90820152694e6f207265656e74727960b01b604082015260600190565b6020808252601a90820152792cb7ba903237903737ba103430bb32903832b936b4b9b9b4b7b760311b604082015260600190565b60208082526010908201526f2737ba1032b737bab3b4102a37b5b2b760811b604082015260600190565b60208082526010908201526f2737ba1032b737bab3b4103a37b5b2b760811b604082015260600190565b60208082526010908201526f4552525f4255595f494e5f524154494f60801b604082015260600190565b60208082526010908201526f11549497d1125597d25395115493905360821b604082015260600190565b602080825260479082015260008051602061552183398151915260408201527f72656d6f7665206c697175696469747920756e74696c206166746572206c6f6360608201526635903a34b6b29760c91b608082015260a00190565b6020808252600f908201526e2737ba1032b737bab3b41026b0b4b760891b604082015260600190565b6020808252601a9082015279135a5b9a5b5d5b48185b5bdd5b9d081bdd5d081b9bdd081b595d60321b604082015260600190565b6020808252600f908201526e14ddd85c081b9bdd081bdc195b9959608a1b604082015260600190565b60208082526010908201526f4552525f4d554c5f4f564552464c4f5760801b604082015260600190565b6020808252600e908201526d4552525f53454c4c5f524154494f60901b604082015260600190565b6020808252601290820152714f766572204d41585f4f55545f524154494f60701b604082015260600190565b60208082526033908201527f436f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e7460408201527206572616374207769746820746865205377617606c1b606082015260800190565b6020808252600d908201526c139bdd081cdd5c1c1bdc9d1959609a1b604082015260600190565b918252602082015260400190565b600082198211156153485761534861542d565b500190565b60008261535c5761535c615443565b500490565b600081600019048311821515161561537b5761537b61542d565b500290565b6000828210156153925761539261542d565b500390565b60005b838110156153b257818101518382015260200161539a565b838111156143b15750506000910152565b600181811c908216806153d757607f821691505b602082108114156153f857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156154125761541261542d565b5060010190565b60008261542857615428615443565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b801515811461547d57600080fd5b5056fec5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470c5f954edb6f50c3415e43c4c343ed2fac83243f08807d721c27e2ccb634c36fa908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d43378ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9254c6971756964697479206973206c6f636b65642c20796f752063616e6e6f7420a26469706673582212206e975ff83a4186e01467ea640ea3732de6c1a56f22974857b5b47eb9274d0e3464736f6c63430008070033

Deployed Bytecode Sourcemap

13034:27959:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15009:25;;;;;;;;;;;;;;;;;;;21195::1;;;21183:2;21168:18;15009:25:0;;;;;;;;17172:119;;;;;;;;;;-1:-1:-1;17172:119:0;;;;;:::i;:::-;;:::i;:::-;;;8732:14:1;;8725:22;8707:41;;8695:2;8680:18;17172:119:0;8567:187:1;15144:28:0;;;;;;;;;;;;;;;;14862:37;;;;;;;;;;;;;;;;11418;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15519:46::-;;;;;;;;;;-1:-1:-1;15519:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8952:14:1;;8945:22;8927:41;;8999:2;8984:18;;8977:34;;;;8900:18;15519:46:0;8759:258:1;11786:187:0;;;;;;;;;;-1:-1:-1;11786:187:0;;;;;:::i;:::-;;:::i;17000:160::-;;;;;;;;;;-1:-1:-1;17000:160:0;;;;;:::i;:::-;;:::i;:::-;;40658:332;;;;;;;;;;-1:-1:-1;40658:332:0;;;;;:::i;:::-;;:::i;18419:254::-;;;;;;;;;;-1:-1:-1;18419:254:0;;;;;:::i;:::-;;:::i;21129:372::-;;;;;;;;;;-1:-1:-1;21129:372:0;;;;;:::i;:::-;;:::i;10591:30::-;;;;;;;;;;;;;;;;22539:680;;;;;;;;;;-1:-1:-1;22539:680:0;;;;;:::i;:::-;;:::i;38542:879::-;;;;;;;;;;;;;:::i;13368:114::-;;;;;;;;;;-1:-1:-1;13368:114:0;;;;;:::i;:::-;;:::i;24639:601::-;;;;;;;;;;-1:-1:-1;24639:601:0;;;;;:::i;:::-;;:::i;26188:1393::-;;;;;;;;;;-1:-1:-1;26188:1393:0;;;;;:::i;:::-;;:::i;16379:209::-;;;;;;;;;;-1:-1:-1;16379:209:0;;;;;:::i;:::-;-1:-1:-1;;;;;16488:17:0;16443:7;16488:17;;;:10;:17;;;;;;;;;16532:10;:17;;;;;;;;16379:209;;;;;;;;;:::i;11505:28::-;;;;;;;;;;-1:-1:-1;11505:28:0;;;;;;;;;;;21917:4:1;21905:17;;;21887:36;;21875:2;21860:18;11505:28:0;21745:184:1;14768:29:0;;;;;;;;;;-1:-1:-1;14768:29:0;;;;-1:-1:-1;;;;;14768:29:0;;;;;;;;;;:::i;15214:28::-;;;;;;;;;;;;;;;;18685:198;;;;;;;;;;-1:-1:-1;18685:198:0;;;;;:::i;:::-;;:::i;4953:690::-;;;;;;;;;;-1:-1:-1;4953:690:0;;;;;:::i;:::-;;:::i;14609:25::-;;;;;;;;;;-1:-1:-1;14609:25:0;;;;-1:-1:-1;;;;;14609:25:0;;;40279:367;;;;;;;;;;-1:-1:-1;40279:367:0;;;;;:::i;:::-;;:::i;12244:403::-;;;;;;;;;;-1:-1:-1;12244:403:0;;;;;:::i;:::-;;:::i;18249:158::-;;;;;;;;;;;;;:::i;15834:18::-;;;;;;;;;;;;;;;;11673:105;;;;;;;;;;-1:-1:-1;11673:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;11756:14:0;11729:7;11756:14;;;;;;;;;;;;11673:105;25252:925;;;;;;;;;;-1:-1:-1;25252:925:0;;;;;:::i;:::-;;:::i;19297:282::-;;;;;;;;;;-1:-1:-1;19297:282:0;;;;;:::i;:::-;;:::i;37037:661::-;;;;;;;;;;-1:-1:-1;37037:661:0;;;;;:::i;:::-;;:::i;17802:435::-;;;;;;;;;;-1:-1:-1;17802:435:0;;;;;:::i;:::-;;:::i;11462:36::-;;;;;;;;;;;;;:::i;37710:824::-;;;;;;;;;;-1:-1:-1;37710:824:0;;;;;:::i;:::-;;:::i;15286:31::-;;;;;;;;;;;;;;;;19591:459;;;;;;;;;;;;;:::i;3582:543::-;;;;;;;;;;-1:-1:-1;3582:543:0;;;;;:::i;:::-;;:::i;15109:28::-;;;;;;;;;;;;;;;;24369:262;;;;;;;;;;-1:-1:-1;24369:262:0;;;;;:::i;:::-;;:::i;20062:1056::-;;;;;;;;;;-1:-1:-1;20062:1056:0;;;;;:::i;:::-;;:::i;31894:2806::-;;;;;;;;;;-1:-1:-1;31894:2806:0;;;;;:::i;:::-;;:::i;34713:2308::-;;;;;;;;;;-1:-1:-1;34713:2308:0;;;;;:::i;:::-;;:::i;23227:1130::-;;;;;;;;;;-1:-1:-1;23227:1130:0;;;;;:::i;:::-;;:::i;15249:30::-;;;;;;;;;;;;;;;;4135:810;;;;;;;;;;-1:-1:-1;4135:810:0;;;;;:::i;:::-;;:::i;21517:1014::-;;;;;;;;;;-1:-1:-1;21517:1014:0;;;;;:::i;:::-;;:::i;29755:2127::-;;;;;;:::i;:::-;;:::i;14741:20::-;;;;;;;;;;-1:-1:-1;14741:20:0;;;;-1:-1:-1;;;;;14741:20:0;;;14906:29;;;;;;;;;;;;;;;;14641:64;;;;;;;;;;-1:-1:-1;14641:64:0;;;;-1:-1:-1;;;;;14641:64:0;;;19023:105;;;;;;;;;;-1:-1:-1;19023:105:0;;;;;:::i;:::-;;:::i;11981:255::-;;;;;;;;;;-1:-1:-1;11981:255:0;;;;;:::i;:::-;;:::i;15179:28::-;;;;;;;;;;;;;;;;18895:116;;;;;;;;;;-1:-1:-1;18895:116:0;;;;;:::i;:::-;;:::i;11542:123::-;;;;;;;;;;-1:-1:-1;11542:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;11637:15:0;;;11610:7;11637:15;;;:10;:15;;;;;;;;:20;;;;;;;;;;;;;11542:123;14835:20;;;;;;;;;;-1:-1:-1;14835:20:0;;;;-1:-1:-1;;;;;14835:20:0;;;14942:23;;;;;;;;;;;;;;;;15927:397;;;;;;;;;;-1:-1:-1;15927:397:0;;;;;:::i;:::-;;:::i;19140:149::-;;;;;;;;;;-1:-1:-1;19140:149:0;;;;;:::i;:::-;-1:-1:-1;;;;;19258:15:0;19216:7;19258:15;;;:8;:15;;;;;:23;;;;19140:149;5651:853;;;;;;;;;;-1:-1:-1;5651:853:0;;;;;:::i;:::-;;:::i;15859:23::-;;;;;;;;;;;;;;;;15387:24;;;;;;;;;;-1:-1:-1;15387:24:0;;;;;;;;;;;27783:1960;;;;;;;;;;-1:-1:-1;27783:1960:0;;;;;:::i;:::-;;:::i;17474:316::-;;;;;;;;;;;;;:::i;17172:119::-;-1:-1:-1;;;;;17259:24:0;17236:4;17259:24;;;:17;:24;;;;;;;;;17172:119::o;11418:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11786:187::-;11875:10;11847:4;11864:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;11864:27:0;;;;;;;;;;:33;;;11913:30;11847:4;;11864:27;;-1:-1:-1;;;;;;;;;;;11913:30:0;;;11894:3;21195:25:1;;21183:2;21168:18;;21049:177;11913:30:0;;;;;;;;-1:-1:-1;11961:4:0;11786:187;;;;;:::o;17000:160::-;17099:7;;-1:-1:-1;;;;;17099:7:0;17085:10;:21;17077:30;;;;;;-1:-1:-1;;;;;17118:24:0;;;;;;;;:17;:24;;;;;:34;;-1:-1:-1;;17118:34:0;;;;;;;;;;17000:160::o;40658:332::-;40761:6;;:11;40753:34;;;;-1:-1:-1;;;40753:34:0;;;;;;;:::i;:::-;;;;;;;;;40807:1;40798:6;:10;40838;40827:22;;;;:10;:22;;;;;;:32;-1:-1:-1;40827:32:0;40819:61;;;;-1:-1:-1;;;40819:61:0;;;;;;;:::i;:::-;40902:10;40891:22;;;;:10;:22;;;;;:32;;40917:6;;40891:22;:32;;40917:6;;40891:32;:::i;:::-;;;;-1:-1:-1;;;;;;;40934:17:0;;;;;;:10;:17;;;;;:27;;40955:6;;40934:17;:27;;40955:6;;40934:27;:::i;:::-;;;;-1:-1:-1;;40981:1:0;40972:6;:10;-1:-1:-1;;40658:332:0:o;18419:254::-;18545:10;;-1:-1:-1;;;;;18545:10:0;18531;:24;:42;;;;-1:-1:-1;18569:4:0;;-1:-1:-1;;;;;18559:14:0;;;18569:4;;18559:14;;18531:42;:62;;;;-1:-1:-1;18588:5:0;;-1:-1:-1;;;;;18578:15:0;;;18588:5;;18578:15;;18531:62;18523:71;;;;;;18613:18;18624:6;18613:10;:18::i;:::-;:26;;18635:4;18613:26;18605:35;;;;;;18651:5;:14;;-1:-1:-1;;;;;;18651:14:0;-1:-1:-1;;;;;18651:14:0;;;;;;;;;;18419:254::o;21129:372::-;-1:-1:-1;;;;;21296:26:0;;;21225:17;21296:26;;;:8;:26;;;;;;21360:27;;;;;;;21419:16;;;;21225:17;;21296:26;21405:88;;21437:14;21442:4;21448:2;21437:4;:14::i;:::-;21453:9;:17;;;21472:14;21477:4;21483:2;21472:4;:14::i;:::-;21488:4;21405:13;:88::i;:::-;21398:95;21129:372;-1:-1:-1;;;;;21129:372:0:o;22539:680::-;22630:4;;-1:-1:-1;;;;;22621:13:0;;;22630:4;;22621:13;;:31;;-1:-1:-1;22647:5:0;;-1:-1:-1;;;;;22638:14:0;;;22647:5;;22638:14;22621:31;22613:57;;;;-1:-1:-1;;;22613:57:0;;;;;;;:::i;:::-;22689:6;;:11;22681:34;;;;-1:-1:-1;;;22681:34:0;;;;;;;:::i;:::-;22735:1;22726:6;:10;22769:5;;-1:-1:-1;;;;;22760:14:0;;;22769:5;;22760:14;22757:434;;;22805:10;22794:22;;;;:10;:22;;;;;;:29;-1:-1:-1;22794:29:0;22786:58;;;;-1:-1:-1;;;22786:58:0;;;;;;;:::i;:::-;22872:3;22855:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;22897:10:0;22886:22;;;;:10;:22;;;;;:29;;22912:3;;22886:22;:29;;22912:3;;22886:29;:::i;:::-;;;;-1:-1:-1;;22942:5:0;;22926:39;;-1:-1:-1;;;;;22942:5:0;22949:10;22961:3;22926:15;:39::i;:::-;22757:434;;;23021:10;23010:22;;;;:10;:22;;;;;;:29;-1:-1:-1;23010:29:0;23002:57;;;;-1:-1:-1;;;23002:57:0;;;;;;;:::i;:::-;23087:3;23070:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;23112:10:0;23101:22;;;;:10;:22;;;;;:29;;23127:3;;23101:22;:29;;23127:3;;23101:29;:::i;:::-;;;;-1:-1:-1;;23157:4:0;;23141:38;;-1:-1:-1;;;;;23157:4:0;23163:10;23175:3;23141:15;:38::i;:::-;-1:-1:-1;;23210:1:0;23201:6;:10;22539:680::o;38542:879::-;38632:6;;:11;38624:34;;;;-1:-1:-1;;;38624:34:0;;;;;;;:::i;:::-;38678:1;38669:6;:10;38712;;-1:-1:-1;;;;;38712:10:0;38698;:24;;:77;;-1:-1:-1;38740:11:0;;-1:-1:-1;;;;;38740:11:0;38726:10;:25;:49;;;;-1:-1:-1;38755:6:0;;-1:-1:-1;;;;;38755:6:0;:20;;38726:49;38690:99;;;;-1:-1:-1;;;38690:99:0;;10675:2:1;38690:99:0;;;10657:21:1;10714:1;10694:18;;;10687:29;-1:-1:-1;;;10732:18:1;;;10725:39;10781:18;;38690:99:0;10473:332:1;38690:99:0;38800:6;:4;:6::i;:::-;38852:10;;-1:-1:-1;;;;;38852:10:0;;;38817:22;38842:21;;;:9;:21;;;;;;;38881:4;;38895:6;;38874:34;;-1:-1:-1;;;38874:34:0;;38842:21;;38881:4;;;;38874:20;;:34;;38895:6;;;;;-1:-1:-1;;;38903:4:0;38874:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38926:5:0;;38941:6;;38919:35;;-1:-1:-1;;;38919:35:0;;-1:-1:-1;;;;;38926:5:0;;;;38919:21;;:35;;38941:6;;;-1:-1:-1;;;38949:4:0;38919:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38988:10:0;;-1:-1:-1;;;;;38988:10:0;38965:11;38979:20;;;;;;;;;;;;;;;;39010:27;38979:20;;39010:27;:::i;:::-;;;;-1:-1:-1;;39061:11:0;;39111:4;;-1:-1:-1;;;;;39111:4:0;39048:10;39102:14;;;:8;:14;;;;;39111:4;39102:22;;39097:43;;39126:13;39131:3;39061:11;39126:4;:13::i;:::-;39097:4;:43::i;:::-;39180:5;;-1:-1:-1;;;;;39180:5:0;39151:12;39171:15;;;:8;:15;;;;;39180:5;39171:23;;39083:57;;-1:-1:-1;39151:12:0;39166:44;;39196:13;39201:3;39206:2;39196:4;:13::i;39166:44::-;39151:59;;39236:3;39221:11;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;39250:21:0;;-1:-1:-1;;39250:21:0;;;39282:15;:22;;39301:3;;39282:15;39266:5;;39282:22;;39301:3;;39282:22;:::i;:::-;;;;-1:-1:-1;;39327:6:0;;39346:5;;39364:10;;39315:60;;-1:-1:-1;;;39315:60:0;;-1:-1:-1;;;;;39346:5:0;;;39315:60;;;8384:34:1;8434:18;;;8427:34;;;8477:18;;;8470:34;;;39364:10:0;;;8520:18:1;;;8513:43;39327:6:0;;;39315:30;;8318:19:1;;39315:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39386:6;:4;:6::i;:::-;-1:-1:-1;;39412:1:0;39403:6;:10;-1:-1:-1;;;38542:879:0:o;13368:114::-;-1:-1:-1;;;;;13451:14:0;13422:9;13451:14;;;:9;:14;;;;;:22;;;;13368:114::o;24639:601::-;24717:4;24742:10;-1:-1:-1;;;;;24742:17:0;;;;:55;;-1:-1:-1;;;;;;24770:15:0;;;;;;:10;:15;;;;;;;;24786:10;24770:27;;;;;;;;24763:34;;;24742:55;24734:64;;;;;;24817:23;24829:10;24817:11;:23::i;:::-;:32;24809:116;;;;-1:-1:-1;;;24809:116:0;;;;;;;:::i;:::-;24936:20;24942:3;24947;24952;24936:5;:20::i;:::-;24971:10;-1:-1:-1;;;;;24971:17:0;;;;;;:69;;-1:-1:-1;;;;;;24992:15:0;;;;;;:10;:15;;;;;;;;25008:10;24992:27;;;;;;;;-1:-1:-1;;24992:48:0;;24971:69;24967:244;;;-1:-1:-1;;;;;25092:15:0;;;;;;:10;:15;;;;;;;;25108:10;25092:27;;;;;;;;25087:38;;25121:3;25087:4;:38::i;:::-;-1:-1:-1;;;;;25057:15:0;;;;;;;:10;:15;;;;;;;;25073:10;25057:27;;;;;;;;;;:68;;;25145:54;21195:25:1;;;25145:54:0;;;;25073:10;;-1:-1:-1;;;;;;;;;;;25145:54:0;21168:18:1;25145:54:0;;;;;;;24967:244;-1:-1:-1;25228:4:0;24639:601;;;;;:::o;26188:1393::-;26323:23;26335:10;26323:11;:23::i;:::-;:32;26315:116;;;;-1:-1:-1;;;26315:116:0;;;;;;;:::i;:::-;26450:6;;:11;26442:34;;;;-1:-1:-1;;;26442:34:0;;;;;;;:::i;:::-;26496:1;26487:6;:10;26508:6;:4;:6::i;:::-;26545:11;;26525:17;26583:29;26588:12;26545:11;26583:4;:29::i;:::-;26634:10;26625:8;:20;;;;;;;;;;:36;;26567:45;;-1:-1:-1;26649:12:0;;26625:20;;:8;:36;;26649:12;;26625:36;:::i;:::-;;;;;;;;26687:12;26672:11;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;26715:46:0;;21195:25:1;;;26744:1:0;;26724:10;;-1:-1:-1;;;;;;;;;;;26715:46:0;21183:2:1;21168:18;26715:46:0;;;;;;;26787:9;26782:409;26806:7;:14;26802:18;;26782:409;;;26842:9;26854:7;26862:1;26854:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26854:10:0;26893:11;;;:8;:11;;;;;;26854:10;26893:19;;26854:10;;-1:-1:-1;26893:19:0;26952:16;26957:5;26893:19;26952:4;:16::i;:::-;26927:41;;27009:13;;27023:1;27009:16;;;;;;;:::i;:::-;;;;;;;26991:14;:34;;26983:73;;;;-1:-1:-1;;;26983:73:0;;;;;;;:::i;:::-;27097:1;-1:-1:-1;;;;;27076:42:0;27085:10;-1:-1:-1;;;;;27076:42:0;;27100:14;27116:1;27076:42;;;;;;;:::i;:::-;;;;;;;;27133:46;27149:1;27152:10;27164:14;27133:15;:46::i;:::-;26827:364;;;26822:3;;;;;:::i;:::-;;;;26782:409;;;-1:-1:-1;27248:4:0;;-1:-1:-1;;;;;27248:4:0;27211:11;27237:16;;;:10;:16;;;;;;27225:29;;27230:5;;27225:4;:29::i;:::-;27276:4;;-1:-1:-1;;;;;27276:4:0;27265:16;;;;:10;:16;;;;;:23;;27211:43;;-1:-1:-1;27211:43:0;;27265:16;;;:23;;27211:43;;27265:23;:::i;:::-;;;;-1:-1:-1;;27310:10:0;27299:22;;;;:10;:22;;;;;:29;;27325:3;;27299:22;:29;;27325:3;;27299:29;:::i;:::-;;;;-1:-1:-1;27339:6:0;;-1:-1:-1;27339:4:0;:6::i;:::-;27359:5;;-1:-1:-1;;;;;27359:5:0;:19;27356:197;;27424:5;;27417:38;;-1:-1:-1;;;27417:38:0;;27390:12;;27405:51;;27410:5;;-1:-1:-1;;;;;27424:5:0;;27417:23;;:38;;27449:4;;27417:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27405:51::-;27390:66;-1:-1:-1;27470:8:0;;27467:75;;27506:5;;27490:40;;-1:-1:-1;;;;;27506:5:0;27513:10;27525:4;27490:15;:40::i;:::-;27379:174;27356:197;-1:-1:-1;;27572:1:0;27563:6;:10;-1:-1:-1;;;;26188:1393:0:o;18685:198::-;18792:7;;-1:-1:-1;;;;;18792:7:0;18778:10;:21;18770:30;;;;;;18811:8;:17;;-1:-1:-1;;;;;18811:17:0;;;-1:-1:-1;;;;;;18811:17:0;;;;;;;18839:4;:12;;;;;;;;;;;;;;;18862:6;:13;;;;;;;;;;;18685:198::o;4953:690::-;5188:22;5228:19;5250:35;5255:13;5270:14;5250:4;:35::i;:::-;5228:57;;5296:18;5317:15;5322:6;5330:1;5317:4;:15::i;:::-;5296:36;;5356:31;5361:13;5376:10;5356:4;:31::i;:::-;5343:44;;5398:9;5410:54;5415:14;5431:32;5436:14;5452:10;5431:4;:32::i;:::-;5410:4;:54::i;:::-;5398:66;;5475:11;5489:20;5494:1;5497:11;5489:4;:20::i;:::-;5475:34;;5520:11;5534:15;5539:4;5545:3;5534:4;:15::i;:::-;5520:29;;5577:26;5582:15;5599:3;5577:4;:26::i;:::-;5560:43;4953:690;-1:-1:-1;;;;;;;;;;;4953:690:0:o;40279:367::-;40395:10;40384:22;;;;:10;:22;;;;;;:32;-1:-1:-1;40384:32:0;40376:61;;;;-1:-1:-1;;;40376:61:0;;;;;;;:::i;:::-;40448:11;40462:29;40467:6;40475:15;40480:3;40485:4;40475;:15::i;40462:29::-;40513:10;40502:22;;;;:10;:22;;;;;:32;;40448:43;;-1:-1:-1;40528:6:0;;40502:22;;;:32;;40528:6;;40502:32;:::i;:::-;;;;-1:-1:-1;;;;;;;40545:17:0;;;;;;:10;:17;;;;;:24;;40566:3;;40545:17;:24;;40566:3;;40545:24;:::i;:::-;;;;-1:-1:-1;40600:17:0;;-1:-1:-1;40605:6:0;40613:3;40600:4;:17::i;:::-;40591:4;;-1:-1:-1;;;;;40591:4:0;40580:16;;;;:10;:16;;;;;:37;;:16;;;:37;;;;;:::i;:::-;;;;-1:-1:-1;;40637:1:0;40628:6;:10;-1:-1:-1;;;40279:367:0:o;12244:403::-;12361:10;12314:4;12350:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12350:27:0;;;;;;;;;;12392:14;;;12388:160;;;12434:10;12453:1;12423:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12423:27:0;;;;;;;;;:31;12388:160;;;12517:19;12522:8;12532:3;12517:4;:19::i;:::-;12498:10;12487:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12487:27:0;;;;;;;;;:49;12388:160;12572:10;12589:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12563:54:0;;12589:27;;;;;;;;;;;12563:54;;21195:25:1;;;12563:54:0;;12572:10;-1:-1:-1;;;;;;;;;;;12563:54:0;21168:18:1;12563:54:0;;;;;;;-1:-1:-1;12635:4:0;;12244:403;-1:-1:-1;;;12244:403:0:o;18249:158::-;18366:10;;-1:-1:-1;;;;;18366:10:0;18352;:24;18344:33;;;;;;18388:4;:11;;-1:-1:-1;;18388:11:0;;;;;18249:158::o;25252:925::-;25374:6;;:11;25366:34;;;;-1:-1:-1;;;25366:34:0;;;;;;;:::i;:::-;25420:1;25411:6;:10;25452:11;;25432:17;25490:30;25495:13;25452:11;25490:4;:30::i;:::-;25474:46;;25544:23;25556:10;25544:11;:23::i;:::-;:31;;25571:4;25544:31;25541:94;;;25606:13;25587:15;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;25541:94:0;25660:9;25655:403;25679:7;:14;25675:18;;25655:403;;;25715:9;25727:7;25735:1;25727:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25727:10:0;25766:11;;;:8;:11;;;;;;25727:10;25766:19;;25727:10;;-1:-1:-1;25766:19:0;25838:16;25843:5;25766:19;25838:4;:16::i;:::-;25814:40;;25895:12;;25908:1;25895:15;;;;;;;:::i;:::-;;;;;;;25878:13;:32;;25870:41;;;;;;25952:1;-1:-1:-1;;;;;25931:41:0;25940:10;-1:-1:-1;;;;;25931:41:0;;25955:13;25970:1;25931:41;;;;;;;:::i;:::-;;;;;;;;25987:45;26003:1;26006:10;26018:13;25987:15;:45::i;:::-;25700:358;;;25695:3;;;;;:::i;:::-;;;;25655:403;;;;26068:20;26074:13;26068:5;:20::i;:::-;26099:32;26105:10;26117:13;26099:5;:32::i;:::-;26142:6;:4;:6::i;19297:282::-;19412:11;;-1:-1:-1;;;;;19412:11:0;19398:10;:25;19390:34;;;;;;19435:11;:21;;-1:-1:-1;;;;;19435:21:0;;;-1:-1:-1;;;;;;19435:21:0;;;;;;;19467:7;:13;;;;;;;;;;;;;;;19491:10;:15;;;;;;;;;;;19297:282::o;37037:661::-;37137:4;;-1:-1:-1;;;;;37137:4:0;;;37114:11;37128:14;;;:8;:14;;;;;37137:4;37128:22;;37183:10;;37128:22;;37183:10;37169;:24;:39;;;;;37204:4;37197:3;:11;;37169:39;37161:78;;;;-1:-1:-1;;;37161:78:0;;;;;;;:::i;:::-;37269:5;37263:3;:11;37260:169;;;37346:3;37338:4;:11;;:27;;;;;37361:4;37353;:12;;37338:27;:42;;;;;37377:3;37369:4;:11;;37338:42;:55;;;;-1:-1:-1;37384:9:0;;;37338:55;37330:86;;;;-1:-1:-1;;;37330:86:0;;20553:2:1;37330:86:0;;;20535:21:1;20592:2;20572:18;;;20565:30;-1:-1:-1;;;20611:18:1;;;20604:48;20669:18;;37330:86:0;20351:342:1;37330:86:0;37459:5;37452:3;:12;37449:190;;37536:3;37528:4;:11;;:27;;;;;37551:4;37543;:12;;37528:27;:42;;;;;37567:3;37559:4;:11;;37528:42;:55;;;;-1:-1:-1;37574:9:0;;;37528:55;37520:106;;;;-1:-1:-1;;;37520:106:0;;15157:2:1;37520:106:0;;;15139:21:1;15196:2;15176:18;;;15169:30;15235:34;15215:18;;;15208:62;-1:-1:-1;;;15286:18:1;;;15279:36;15332:19;;37520:106:0;14955:402:1;37520:106:0;-1:-1:-1;37659:3:0;:10;37680:3;:10;37037:661::o;17802:435::-;17903:10;;-1:-1:-1;;;;;17903:10:0;17889;:24;17881:63;;;;-1:-1:-1;;;17881:63:0;;;;;;;:::i;:::-;17976:5;;17969:27;;;-1:-1:-1;;;17969:27:0;;;;17955:11;;-1:-1:-1;;;;;17976:5:0;;17969:25;;:27;;;;;;;;;;;;;;17976:5;17969:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17955:41;-1:-1:-1;18027:8:0;18031:4;17955:41;18027:8;:::i;:::-;18016:7;:19;;:37;;;;;18050:3;18039:7;:14;;18016:37;18007:101;;;;-1:-1:-1;;;18007:101:0;;14048:2:1;18007:101:0;;;14030:21:1;14087:2;14067:18;;;14060:30;14126:34;14106:18;;;14099:62;-1:-1:-1;;;14177:18:1;;;14170:48;14235:19;;18007:101:0;13846:414:1;18007:101:0;18139:4;18129:6;:14;;18120:41;;;;-1:-1:-1;;;18120:41:0;;12191:2:1;18120:41:0;;;12173:21:1;12230:2;12210:18;;;12203:30;-1:-1:-1;;;12249:18:1;;;12242:43;12302:18;;18120:41:0;11989:337:1;18120:41:0;-1:-1:-1;18172:14:0;:24;;;;18207:13;:22;17802:435::o;11462:36::-;;;;;;;:::i;37710:824::-;37839:6;;:11;37831:34;;;;-1:-1:-1;;;37831:34:0;;;;;;;:::i;:::-;37885:1;37876:6;:10;37905:17;37917:4;37905:11;:17::i;:::-;:25;;37926:4;37905:25;37897:58;;;;-1:-1:-1;;;37897:58:0;;15919:2:1;37897:58:0;;;15901:21:1;15958:2;15938:18;;;15931:30;-1:-1:-1;;;15977:18:1;;;15970:50;16037:18;;37897:58:0;15717:344:1;37897:58:0;-1:-1:-1;;;;;37991:15:0;;;37966:22;37991:15;;;:9;:15;;;;;;;38041:11;:17;;;;;;38086:11;;37991:15;;38041:17;;38086:11;38072:10;:25;38069:437;;;38127:24;:15;38145:6;38127:24;:::i;:::-;38109:15;;;:42;38069:437;;;38243:4;:15;;;38224;:34;;:62;;;;-1:-1:-1;38276:10:0;;-1:-1:-1;;;;;38276:10:0;38262;:24;38224:62;38216:147;;;;-1:-1:-1;;;38216:147:0;;11710:2:1;38216:147:0;;;11692:21:1;11749:2;11729:18;;;11722:30;-1:-1:-1;;;;;;;;;;;11768:18:1;;;11761:62;11859:34;11839:18;;;11832:62;-1:-1:-1;;;11910:19:1;;;11903:39;11959:19;;38216:147:0;11508:476:1;38216:147:0;38374:21;;-1:-1:-1;;38374:21:0;;;38422:37;;-1:-1:-1;;;38422:37:0;;38390:5;;38437:4;;38422:31;;:37;;38454:4;;38422:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38406:53;;38489:5;38470:15;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;;38069:437:0;-1:-1:-1;;38525:1:0;38516:6;:10;-1:-1:-1;37710:824:0:o;19591:459::-;19670:10;19699:17;19670:10;19699:11;:17::i;:::-;:26;19691:63;;;;-1:-1:-1;;;19691:63:0;;11357:2:1;19691:63:0;;;11339:21:1;11396:2;11376:18;;;11369:30;-1:-1:-1;;;11415:18:1;;;11408:54;11479:18;;19691:63:0;11155:348:1;19691:63:0;19781:37;;-1:-1:-1;;;19781:37:0;;19765:13;;19796:4;;19781:31;;:37;;19813:4;;19781:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19854:15:0;;19829:22;19854:15;;;:9;:15;;;;;;;19904:11;:17;;;;;;19932:20;;-1:-1:-1;;19932:20:0;19948:4;19932:20;;;19765:53;;-1:-1:-1;19854:15:0;19981:25;:15;19999:7;19981:25;:::i;:::-;19963:4;:15;;:43;;;;20037:5;20018:15;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;19591:459: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:35::-;4015:51;;4098:18;4103:5;4110;4098:4;:18::i;:::-;4086:30;3582:543;-1:-1:-1;;;;;;;;;;3582:543:0:o;24369:262::-;24430:4;24455:23;24467:10;24455:11;:23::i;:::-;:32;24447:116;;;;-1:-1:-1;;;24447:116:0;;;;;;;:::i;:::-;24574:27;24580:10;24592:3;24597;24574:5;:27::i;:::-;-1:-1:-1;24619:4:0;24369:262;;;;:::o;20062:1056::-;20162:4;;;;:13;20154:22;;;;;;20209:5;;20202:38;;-1:-1:-1;;;20202:38:0;;20187:12;;-1:-1:-1;;;;;20209:5:0;;20202:23;;:38;;20234:4;;20202:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20274:4;;20267:37;;-1:-1:-1;;;20267:37:0;;20187:53;;-1:-1:-1;20251:13:0;;-1:-1:-1;;;;;20274:4:0;;;;20267:22;;:37;;20298:4;;20267:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20333:83;;;;;;;;20362:7;:14;;20333:83;;;;;;;;;20324:5;;;-1:-1:-1;;;;;20324:5:0;;;-1:-1:-1;20315:15:0;;;:8;:15;;;;;;:101;;;;;;20324:5;20315:101;;;;20454:84;;;;;;;20483:14;;20454:84;;;;;;;;20446:4;;;;;20437:14;;;;;;;;;:101;;;;;;;;;;;;;20572:5;;20559:19;;;;;;;;;;;;;20572:5;;;-1:-1:-1;;;;;;20559:19:0;;;;;;20602:4;;20589:18;;;;;;;;;;;;;;20602:4;;;20589:18;;;;;;;;;;;20644:5;;;;20635:15;;;;;:23;;20454:84;;-1:-1:-1;;20630:34:0;;20660:3;20630:4;:34::i;:::-;20701:4;;-1:-1:-1;;;;;20701:4:0;20675:9;20692:14;;;:8;:14;;;;;20701:4;20692:22;;20618:46;;-1:-1:-1;20675:9:0;20687:34;;20716:4;20687;:34::i;:::-;20675:46;-1:-1:-1;20732:9:0;20744:5;20675:46;20744:1;:5;:::i;:::-;20732:17;;20760:8;20766:1;20760:5;:8::i;:::-;20779:15;20785:5;20792:1;20779:5;:15::i;:::-;20823:24;20828:15;;20845:1;20823:4;:24::i;:::-;20805:15;:42;-1:-1:-1;;;;;20883:16:0;;20858:22;20883:16;;;:9;:16;;;;;;;20934:11;:18;;;;;;20963:20;;-1:-1:-1;;20963:20:0;20979:4;20963:20;;;21012:26;:15;21030:8;21012:26;:::i;:::-;20994:15;;;;:44;;;;21050:4;:11;;-1:-1:-1;;21050:11:0;;;;;;21078:31;21083:3;21088:20;21093:4;21099:8;21088:4;:20::i;21078:31::-;21072:3;:37;-1:-1:-1;;;;;;;;;20062:1056:0:o;31894:2806::-;32059:22;32105:31;32125:10;32105:19;:31::i;:::-;32102:101;;32165:6;;:11;32157:34;;;;-1:-1:-1;;;32157:34:0;;;;;;;:::i;:::-;32222:1;32213:6;:10;;;32242:4;;;;;;;:12;;;32234:40;;;;-1:-1:-1;;;32234:40:0;;;;;;;:::i;:::-;32288:30;32307:10;32288:18;:30::i;:::-;:38;;32322:4;32288:38;32285:141;;;32354:4;;32347:3;:11;32339:75;;;;-1:-1:-1;;;32339:75:0;;;;;;;:::i;:::-;32471:14;;32454:13;:31;;32446:58;;;;-1:-1:-1;;;32446:58:0;;;;;;;:::i;:::-;32538:5;;-1:-1:-1;;;;;32538:5:0;32515:11;32529:15;;;:8;:15;;;;;32538:5;32529:23;;;32563:49;;32586:10;32598:13;32563:15;:49::i;:::-;32690:13;;32656:5;;32649:38;;-1:-1:-1;;;32649:38:0;;-1:-1:-1;;;;;32656:5:0;;;;32649:23;;:38;;32681:4;;32649:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;;:::i;:::-;32632:5;;;-1:-1:-1;;;;;32632:5:0;;;32623:15;;;;:8;:15;;;;;;32632:5;32623:23;;;:80;;;;32750:5;;;;;32741:15;;;;;:23;;;;32735:54;;32741:29;;32767:3;;32741:29;:::i;:::-;32773:15;32778:3;32783:4;32773;:15::i;32735:54::-;32898:5;;-1:-1:-1;;;;;32898:5:0;32889:15;;;;:8;:15;;;;;32898:5;32889:23;;32714:75;;-1:-1:-1;32827:376:0;;32959:14;32964:4;32970:2;32959:4;:14::i;:::-;33029:4;;-1:-1:-1;;;;;33029:4:0;33020:14;;;;:8;:14;;;;;33029:4;33020:22;;33089:14;33094:4;33100:2;33089:4;:14::i;:::-;33150:10;32827:15;:376::i;:::-;33264:4;;-1:-1:-1;;;;;33264:4:0;33255:14;;;;:8;:14;;;;;33264:4;33255:22;;32810:393;;-1:-1:-1;33250:50:0;;33279:20;15771:2;33295:3;33279:4;:20::i;33250:50::-;33232:14;:68;;33224:99;;;;-1:-1:-1;;;33224:99:0;;;;;;;:::i;:::-;33392:12;33374:14;:30;;33366:69;;;;-1:-1:-1;;;33366:69:0;;;;;;;:::i;:::-;33446:12;33461:37;33466:14;33482:15;33487:3;;33492:4;33482;:15::i;33461:37::-;33446:52;;33509:18;33531:27;33536:4;33542:15;33547:2;33551:5;33542:4;:15::i;33531:27::-;33509:49;;33569:11;33583:27;33588:4;33594:15;33599:2;33603:5;33594:4;:15::i;33583:27::-;33569:41;;33621:19;33644:28;33649:4;33655:16;33660:3;;33665:5;33655:4;:16::i;33644:28::-;33621:51;-1:-1:-1;33683:10:0;33621:51;33705:16;33718:3;33705:10;:16;:::i;:::-;:30;;;;:::i;:::-;33697:39;;:4;:39;:::i;:::-;33683:54;;33748:19;33770:25;33775:2;33779:15;33784:3;33789:4;33779;:15::i;33770:25::-;33838:4;33806:10;33819:25;;;:10;:25;;;;;;33748:47;;-1:-1:-1;33873:4:0;33868:9;;33865:95;;;33906:2;33889:13;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;33938:4:0;33947:1;33919:25;;;:10;:25;;;;;:29;33865:95;33985:4;;-1:-1:-1;;;;;33985:4:0;33980:19;34019:10;34000:16;34014:2;34000:11;:16;:::i;:::-;:29;;;;:::i;:::-;33980:50;;;;;;;;;;;;;21195:25:1;;21183:2;21168:18;;21049:177;33980:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34041:68;34072:2;34076:32;34081:11;34094:13;34099:2;34103:3;34094:4;:13::i;34076:32::-;34041:30;:68::i;:::-;34137:23;34142:2;34146:13;34151:1;34154:4;34146;:13::i;34137:23::-;34120:13;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;34171:11:0;;-1:-1:-1;34185:31:0;34190:11;34203:12;34208:1;34211:3;34203:4;:12::i;34185:31::-;34171:45;;34227:12;34242:32;34247:11;34260:13;34265:2;34269:3;34260:4;:13::i;34242:32::-;34227:47;;34315:32;34320:11;34333:13;34338:2;34342:3;34333:4;:13::i;34315:32::-;34296:14;;-1:-1:-1;;;;;34296:14:0;34285:26;;;;:10;:26;;;;;:62;;:26;;;:62;;;;;:::i;:::-;;;;-1:-1:-1;;34369:7:0;;-1:-1:-1;;;;;34369:7:0;34358:19;;;;:10;:19;;;;;:27;;34381:4;;34358:19;:27;;34381:4;;34358:27;:::i;:::-;;;;-1:-1:-1;;34407:4:0;;-1:-1:-1;;;;;34407:4:0;34396:16;;;;:10;:16;;;;;:23;;34416:3;;34396:16;:23;;34416:3;;34396:23;:::i;:::-;;;;;;;;34447:11;34430:13;;:28;;;;;;;:::i;:::-;;;;;;;;34486:3;34469:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;34500:10:0;;-1:-1:-1;34500:8:0;:10::i;:::-;34521:9;:7;:9::i;:::-;34541:6;:4;:6::i;:::-;34591:4;;34584:5;;-1:-1:-1;;;;;34591:4:0;;;;34584:5;34572:10;-1:-1:-1;;;;;;;;;;;34597:10:0;34609:32;34614:11;34627:13;34632:2;34636:3;34627:4;:13::i;34609:32::-;34563:79;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;34662:1:0;34653:6;:10;-1:-1:-1;34681:11:0;31894:2806;-1:-1:-1;;;;;;;;;;;;31894:2806:0:o;34713:2308::-;34840:22;34888:6;;34898:1;34888:11;34880:34;;;;-1:-1:-1;;;34880:34:0;;;;;;;:::i;:::-;34934:1;34925:6;:10;35003;34946:11;34992:22;;;:10;:22;;;;;;34960:13;;34992:39;-1:-1:-1;34992:39:0;34984:68;;;;-1:-1:-1;;;34984:68:0;;;;;;;:::i;:::-;35106:5;;-1:-1:-1;;;;;35106:5:0;;;35063:23;35089:24;;;:8;:24;;;;;;35168:4;;;;;35151:23;;;;35210:14;;35193:31;;;35185:58;;;;-1:-1:-1;;;35185:58:0;;;;;;;:::i;:::-;35273:412;35335:8;:16;;;35398:14;35403:4;35409:2;35398:4;:14::i;:::-;35459:9;:17;;;35523:14;35528:4;35534:2;35523:4;:14::i;:::-;35584:36;35589:13;35604:15;35609:3;35614:4;35604;:15::i;35273:412::-;35256:429;;35724:45;35729:9;:17;;;35748:20;15771:2;35764:3;35748:4;:20::i;35724:45::-;35706:14;:63;;35698:94;;;;-1:-1:-1;;;35698:94:0;;;;;;;:::i;:::-;35803:12;35818:37;35823:14;35839:15;35844:3;;35849:4;35839;:15::i;35818:37::-;35803:52;;35866:18;35888:27;35893:4;35899:15;35904:2;35908:5;35899:4;:15::i;35888:27::-;35866:49;;35926:11;35940:27;35945:4;35951:15;35956:2;35960:5;35951:4;:15::i;35940:27::-;35926:41;;35978:19;36001:28;36006:4;36012:16;36017:3;;36022:5;36012:4;:16::i;36001:28::-;35978:51;-1:-1:-1;36040:10:0;35978:51;36062:16;36075:3;36062:10;:16;:::i;:::-;:30;;;;:::i;:::-;36054:39;;:4;:39;:::i;:::-;36040:54;;36105:19;36127:25;36132:2;36136:15;36141:3;36146:4;36136;:15::i;36127:25::-;36105:47;;36180:23;36185:2;36189:13;36194:1;36197:4;36189;:13::i;36180:23::-;36163:13;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;;36222:27:0;;;;36214:66;;;;-1:-1:-1;;;36214:66:0;;;;;;;:::i;:::-;36302:10;36291:22;;;;:10;:22;;;;;:39;;36317:13;;36291:22;:39;;36317:13;;36291:39;:::i;:::-;;;;;;;;36358:13;36341;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;36393:10:0;36382:22;;;;:10;:22;;;;;:37;;36408:11;;36382:22;:37;;36408:11;;36382:37;:::i;:::-;;;;-1:-1:-1;;36449:4:0;36430:25;;;;:10;:25;;;;;:39;;36459:10;;36430:25;:39;;36459:10;;36430:39;:::i;:::-;;;;-1:-1:-1;36480:10:0;;-1:-1:-1;36493:32:0;36498:11;36511:13;36516:2;36520:3;36511:4;:13::i;36493:32::-;36480:45;;36536:11;36550:31;36555:11;36568:12;36573:1;36576:3;36568:4;:12::i;36550:31::-;36536:45;;36592:12;36607:32;36612:11;36625:13;36630:2;36634:3;36625:4;:13::i;36607:32::-;36661:14;;-1:-1:-1;;;;;36661:14:0;36650:26;;;;:10;:26;;;;;:32;;36592:47;;-1:-1:-1;36680:2:0;;36650:26;;;:32;;36680:2;;36650:32;:::i;:::-;;;;-1:-1:-1;;36704:7:0;;-1:-1:-1;;;;;36704:7:0;36693:19;;;;:10;:19;;;;;:27;;36716:4;;36693:19;:27;;36716:4;;36693:27;:::i;:::-;;;;-1:-1:-1;;36742:4:0;;-1:-1:-1;;;;;36742:4:0;36731:16;;;;:10;:16;;;;;:23;;36751:3;;36731:16;:23;;36751:3;;36731:23;:::i;:::-;;;;-1:-1:-1;36810:11:0;;-1:-1:-1;36783:24:0;36796:11;36783:10;:24;:::i;:::-;:38;;;;:::i;:::-;36765:13;;:57;;;;;;;:::i;:::-;;;;;;;;36850:3;36833:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;36864:6:0;;-1:-1:-1;36864:4:0;:6::i;:::-;36881:9;:7;:9::i;:::-;36939:4;;;;;;;;;-1:-1:-1;;;;;36939:4:0;-1:-1:-1;;;;;36906:56:0;36932:5;;;;;;;;;-1:-1:-1;;;;;36932:5:0;-1:-1:-1;;;;;36906:56:0;36920:10;-1:-1:-1;;;;;36906:56:0;-1:-1:-1;;;;;;;;;;;36945:3:0;36950:11;36906:56;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;36982:1:0;36973:6;:10;-1:-1:-1;37001:11:0;34713:2308;-1:-1:-1;;;;;;;;;;;34713:2308:0:o;23227:1130::-;23338:4;;-1:-1:-1;;;;;23329:13:0;;;23338:4;;23329:13;;:31;;-1:-1:-1;23355:5:0;;-1:-1:-1;;;;;23346:14:0;;;23355:5;;23346:14;23329:31;23321:57;;;;-1:-1:-1;;;23321:57:0;;;;;;;:::i;:::-;23397:6;;:11;23389:34;;;;-1:-1:-1;;;23389:34:0;;;;;;;:::i;:::-;23443:1;23434:6;:10;23467:4;;-1:-1:-1;;;;;23458:13:0;;;23467:4;;23458:13;23455:874;;;23502:10;23491:22;;;;:10;:22;;;;;;:29;-1:-1:-1;23491:29:0;23483:57;;;;-1:-1:-1;;;23483:57:0;;;;;;;:::i;:::-;23566:4;;23551:49;;-1:-1:-1;;;23551:49:0;;-1:-1:-1;;;;;23566:4:0;;;;23551:29;;:49;;23589:4;;23596:3;;23551:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23631:3;23614:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;23656:10:0;23645:22;;;;:10;:22;;;;;:29;;23671:3;;23645:22;:29;;23671:3;;23645:29;:::i;:::-;;;;-1:-1:-1;;23712:4:0;;23685:37;;-1:-1:-1;;;23685:37:0;;-1:-1:-1;;;;;23685:26:0;;;;;;:37;;23712:4;;;;23718:3;;23685:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23734:14;23750:13;23777:4;-1:-1:-1;;;;;23767:35:0;;23811:4;23767:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23828:29;;-1:-1:-1;;;23828:29:0;;23733:84;;-1:-1:-1;23733:84:0;-1:-1:-1;;;;;;23828:18:0;;;;;:29;;23847:2;;23733:84;;23828:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23455:874:0;;-1:-1:-1;;;;;23455:874:0;;23940:10;23929:22;;;;:10;:22;;;;;;:29;-1:-1:-1;23929:29:0;23921:58;;;;-1:-1:-1;;;23921:58:0;;;;;;;:::i;:::-;24005:5;;23990:50;;-1:-1:-1;;;23990:50:0;;-1:-1:-1;;;;;24005:5:0;;;;23990:30;;:50;;24029:4;;24036:3;;23990:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24068:3;24051:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;24093:10:0;24082:22;;;;:10;:22;;;;;:29;;24108:3;;24082:22;:29;;24108:3;;24082:29;:::i;:::-;;;;-1:-1:-1;;24149:5:0;;24122:38;;-1:-1:-1;;;24122:38:0;;-1:-1:-1;;;;;24122:26:0;;;;;;:38;;24149:5;;;;24156:3;;24122:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24172:14;24188:13;24215:4;-1:-1:-1;;;;;24205:35:0;;24249:4;24205:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24266:31;;-1:-1:-1;;;24266:31:0;;24171:84;;-1:-1:-1;24171:84:0;-1:-1:-1;;;;;;24266:19:0;;;;;:31;;24286:2;;24171:84;;24266:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23455:874:0;-1:-1:-1;;24348:1:0;24339:6;:10;-1:-1:-1;;23227:1130: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;21517:1014::-;21607:4;;-1:-1:-1;;;;;21598:13:0;;;21607:4;;21598:13;;:31;;-1:-1:-1;21624:5:0;;-1:-1:-1;;;;;21615:14:0;;;21624:5;;21615:14;21598:31;21590:57;;;;-1:-1:-1;;;21590:57:0;;;;;;;:::i;:::-;21666:6;;:11;21658:34;;;;-1:-1:-1;;;21658:34:0;;;;;;;:::i;:::-;21712:1;21703:6;:10;;;21732:4;;;;;;;:12;;;21724:21;;;;;;21778:5;;-1:-1:-1;;;;;21769:14:0;;;21778:5;;21769:14;21766:737;;;21818:5;;-1:-1:-1;;;;;21818:5:0;21795:11;21809:15;;;:8;:15;;;;;21818:5;21809:23;;;21848:39;;21871:10;21883:3;21848:15;:39::i;:::-;21924:5;;21917:38;;-1:-1:-1;;;21917:38:0;;21898:11;;21912:59;;-1:-1:-1;;;;;21924:5:0;;;;21917:23;;:38;;21949:4;;21917:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21957:13;;21912:4;:59::i;:::-;21898:73;;21984:19;22006:14;22011:3;22016;22006:4;:14::i;:::-;21984:36;;22050:11;22033:13;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;22083:10:0;22072:22;;;;:10;:22;;;;;:37;;22098:11;;22072:22;:37;;22098:11;;22072:37;:::i;:::-;;;;-1:-1:-1;21766:737:0;;-1:-1:-1;;;;21766:737:0;;22169:4;;-1:-1:-1;;;;;22169:4:0;22146:11;22160:14;;;:8;:14;;;;;22169:4;22160:22;;;22193:38;;22215:10;22227:3;22193:15;:38::i;:::-;22268:4;;22261:37;;-1:-1:-1;;;22261:37:0;;22242:11;;22256:100;;-1:-1:-1;;;;;22268:4:0;;;;22261:22;;:37;;22292:4;;22261:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22300:55;22305:13;;22320:34;22325:13;;22340;;22320:4;:34::i;:::-;22300:4;:55::i;:::-;22256:4;:100::i;:::-;22242:114;;22367:19;22389:14;22394:3;22399;22389:4;:14::i;:::-;22367:36;;22432:11;22414:13;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;22465:10:0;22454:22;;;;:10;:22;;;;;:37;;22480:11;;22454:22;:37;;22480:11;;22454:37;:::i;:::-;;;;-1:-1:-1;;;;;;;22522:1:0;22513:6;:10;21517:1014::o;29755:2127::-;29894:22;29942:6;;29952:1;29942:11;29934:34;;;;-1:-1:-1;;;29934:34:0;;;;;;;:::i;:::-;29988:1;29979:6;:10;;;30008:4;;;;;;;:12;;;30000:40;;;;-1:-1:-1;;;30000:40:0;;;;;;;:::i;:::-;30051:13;30067:32;30072:9;30083:15;30088:3;30093:4;30083;:15::i;30067:32::-;30051:48;;30115:4;;;;;;;;;-1:-1:-1;;;;;30115:4:0;-1:-1:-1;;;;;30110:18:0;;30136:5;30110:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30155:74;30186:10;30198:30;30203:9;30214:13;30219:1;30222:4;30214;:13::i;30155:74::-;30253:30;30272:10;30253:18;:30::i;:::-;:38;;30287:4;30253:38;30250:141;;;30319:4;;30312:3;:11;30304:75;;;;-1:-1:-1;;;30304:75:0;;;;;;;:::i;:::-;30433:3;;30426:42;;-1:-1:-1;;;30426:42:0;;30411:12;;-1:-1:-1;;;;;30433:3:0;;30426:21;;:42;;30456:10;;30426:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30411:57;-1:-1:-1;30492:21:0;30537:6;;;;;:27;;;30560:4;30547:9;:17;;30537:27;:43;;;;;30576:4;30568;:12;;30537:43;30534:82;;;30592:12;:10;:12::i;:::-;30679:4;;-1:-1:-1;;;;;30679:4:0;;;30636:23;30662;;;:8;:23;;;;;;30740:5;;;;;30723:24;;;;30789:13;;30776:9;:26;;30768:55;;;;-1:-1:-1;;;30768:55:0;;;;;;;:::i;:::-;30844:18;30904:429;30965:8;:16;;;31028:14;31033:4;31039:2;31028:4;:14::i;:::-;31089:9;:17;;;31153:14;31158:4;31164:2;31153:4;:14::i;:::-;31214:28;31219:5;31226:15;31231:3;31236:4;31226;:15::i;31214:28::-;31289:1;30904:14;:429::i;:::-;31417:17;;;;30873:460;;-1:-1:-1;30873:460:0;-1:-1:-1;31412:45:0;;31436:20;15771:2;31452:3;31436:4;:20::i;31412:45::-;31394:14;:63;;31386:94;;;;-1:-1:-1;;;31386:94:0;;;;;;;:::i;:::-;31508:30;31513:9;31524:13;31529:1;31532:4;31524;:13::i;31508:30::-;31491:13;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;31589:30:0;;;;31581:69;;;;-1:-1:-1;;;31581:69:0;;;;;;;:::i;:::-;31677:5;;31661:42;;-1:-1:-1;;;;;31677:5:0;31684:2;31688:14;31661:15;:42::i;:::-;31714:6;:4;:6::i;:::-;31765:5;;31759:4;;31809:3;;-1:-1:-1;;;;;31765:5:0;;;;31759:4;;;;31747:10;;-1:-1:-1;;;;;;;;;;;31738:82:0;31772:9;;31783:36;;31788:14;;31804;;31814:3;31804:4;:14::i;31783:36::-;31738:82;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;31840:1:0;31831:6;:10;-1:-1:-1;;;;29755:2127:0;;;;;:::o;19023:105::-;19092:7;;-1:-1:-1;;;;;19092:7:0;19078:10;:21;19070:30;;;;;;19111:3;:9;19023:105::o;11981:255::-;12114:10;12051:4;12103:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12103:27:0;;;;;;;;;;12098:38;;12132:3;12098:4;:38::i;:::-;12079:10;12068:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12068:27:0;;;;;;;;;;;;:68;;;12152:54;21195:25:1;;;12068:27:0;;-1:-1:-1;;;;;;;;;;;12152:54:0;21168:18:1;12152:54:0;21049:177:1;18895:116:0;18964:7;;-1:-1:-1;;;;;18964:7:0;18950:10;:21;18942:30;;;;;;18983:14;:20;;-1:-1:-1;;;;;;18983:20:0;-1:-1:-1;;;;;18983:20:0;;;;;;;;;;18895:116::o;15927:397::-;16049:4;;;;:13;16041:43;;;;-1:-1:-1;;;16041:43:0;;14811:2:1;16041:43:0;;;14793:21:1;14850:2;14830:18;;;14823:30;-1:-1:-1;;;14869:18:1;;;14862:47;14926:18;;16041:43:0;14609:341:1;16041:43:0;16095:5;:15;;-1:-1:-1;;;;;16095:15:0;;;-1:-1:-1;;;;;;16095:15:0;;;;;;;;16121:10;:18;;;;;;;;;;;;;16150:14;:22;;;;;;;;;16183:4;:9;;;-1:-1:-1;16203:12:0;;;;;;;;;;;16226:8;:16;;;;;;;;;;;;16275:27;;;-1:-1:-1;;;16275:27:0;;;;16270:46;;16095:15;16275:25;;:27;;;;;;;;;;;;;;16095:15;16275:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16304:11;16309:1;16312:2;16304:4;:11::i;16270:46::-;16253:14;:63;-1:-1:-1;;;;;15927:397:0:o;5651:853::-;5912:21;5935:18;5971:19;5993:35;5998:14;6014:13;5993:4;:35::i;:::-;5971:57;;6039:12;6054:37;6059:15;6076:14;6054:4;:37::i;:::-;6039:52;;6102:9;6114:27;6119:15;6136:4;6114;:27::i;:::-;6102:39;;6152:11;6166:20;6171:1;6174:11;6166:4;:20::i;:::-;6152:34;;6203:15;6208:3;6213:4;6203;:15::i;:::-;6197:21;;6235:25;6240:14;6256:3;6235:4;:25::i;:::-;6229:31;;6287:19;6292:4;6298:7;6287:4;:19::i;:::-;6271:35;;6333:24;6338:3;6343:13;6333:4;:24::i;:::-;6317:40;;6381:15;6386:3;6391:4;6381;:15::i;:::-;6368:28;;6420:31;6425:13;6440:10;6420:4;:31::i;:::-;6407:44;;6462:34;;;;5651:853;;;;;;;;;:::o;27783:1960::-;27971:10;27910:22;27960;;;:10;:22;;;;;;:39;-1:-1:-1;27960:39:0;27952:81;;;;-1:-1:-1;;;27952:81:0;;18758:2:1;27952:81:0;;;18740:21:1;18797:2;18777:18;;;18770:30;18836:31;18816:18;;;18809:59;18885:18;;27952:81:0;18556:353:1;27952:81:0;28052:6;;:11;28044:34;;;;-1:-1:-1;;;28044:34:0;;;;;;;:::i;:::-;28098:1;28089:6;:10;28153:4;;-1:-1:-1;;;;;28153:4:0;;;28110:23;28136;;;:8;:23;;;;;;28214:5;;;;;28197:24;;;;28257:13;;28240:30;;;28232:59;;;;-1:-1:-1;;;28232:59:0;;;;;;;:::i;:::-;28302:18;28362:437;28423:8;:16;;;28486:14;28491:4;28497:2;28486:4;:14::i;28362:437::-;28851:17;;;;28331:468;;-1:-1:-1;28331:468:0;-1:-1:-1;28846:45:0;;28870:20;15771:2;28886:3;28870:4;:20::i;28846:45::-;28828:14;:63;;28820:94;;;;-1:-1:-1;;;28820:94:0;;;;;;;:::i;:::-;28983:12;28965:14;:30;;28957:69;;;;-1:-1:-1;;;28957:69:0;;;;;;;:::i;:::-;29051:10;29040:22;;;;:10;:22;;;;;:39;;29066:13;;29040:22;:39;;29066:13;;29040:39;:::i;:::-;;;;;;;;29107:13;29090;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;29142:10:0;29131:22;;;;:10;:22;;;;;:40;;29157:14;;29131:22;:40;;29157:14;;29131:40;:::i;:::-;;;;;;;;29199:14;29182:13;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;29241:34:0;;-1:-1:-1;29246:13:0;29261;29266:1;29269:4;29261;:13::i;29241:34::-;29224:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;29286:6:0;;-1:-1:-1;29286:4:0;:6::i;:::-;29340:5;;29334:4;;29308:69;;-1:-1:-1;;;;;29340:5:0;;;;29334:4;;;;29322:10;;-1:-1:-1;;;;;;;;;;;29308:69:0;;;29347:13;;29362:14;;29308:69;:::i;:::-;;;;;;;;29410:3;;29403:42;;-1:-1:-1;;;29403:42:0;;29388:12;;-1:-1:-1;;;;;29410:3:0;;29403:21;;:42;;29433:10;;29403:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29388:57;;29483:1;29459:21;:25;:50;;;;;29505:4;29488:13;:21;;29459:50;:66;;;;;29521:4;29513;:12;;29459:66;29456:226;;;29537:10;29550:30;29555:21;29578:1;29550:4;:30::i;:::-;29537:43;;29591:46;29622:10;29634:2;29591:30;:46::i;:::-;29668:2;29648:16;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;29456:226:0;-1:-1:-1;;29701:1:0;29692:6;:10;-1:-1:-1;;27783:1960:0;;;;:::o;17474:316::-;17618:13;;17584:5;;17577:38;;-1:-1:-1;;;17577:38:0;;-1:-1:-1;;;;;17584:5:0;;;;17577:23;;:38;;17609:4;;17577:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;;:::i;:::-;17560:5;;-1:-1:-1;;;;;17560:5:0;17551:15;;;;:8;:15;;;;;17560:5;17551:23;:80;;;;17690:13;;17674;;17658;;:29;;17674:13;17658:29;:::i;:::-;:45;;;;:::i;:::-;17747:4;;17740:37;;-1:-1:-1;;;17740:37:0;;17644:60;;-1:-1:-1;17644:60:0;;-1:-1:-1;;;;;17747:4:0;;;;17740:22;;:37;;17771:4;;17740:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;;;:::i;:::-;17724:4;;-1:-1:-1;;;;;17724:4:0;17715:14;;;;:8;:14;;;;;17724:4;17715:22;:67;-1:-1:-1;17474:316:0:o;16601:387::-;16660:4;16690:28;16710:7;16690:19;:28::i;:::-;16687:51;;;-1:-1:-1;16730:5:0;;16601:387;-1:-1:-1;16601:387:0:o;16687:51::-;16897:20;;-1:-1:-1;;;;;;;;;;;16937:15:0;;;;;:42;;;16968:11;16956:8;:23;;16937:42;16929:51;16601:387;-1:-1:-1;;;;16601:387: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;:::-;1288:22;1009:329;-1:-1:-1;;;;;;1009:329:0:o;39648:184::-;39766:34;;-1:-1:-1;;;39766:34:0;;39754:9;;-1:-1:-1;;;;;39766:22:0;;;;;:34;;39789:2;;39793:6;;39766:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39754:46;;39819:4;39811:13;;;;;;39740:92;39648:184;;;:::o;1346:405::-;1423:7;1456:6;1448:31;;;;-1:-1:-1;;;1448:31:0;;16957:2:1;1448:31:0;;;16939:21:1;16996:2;16976:18;;;16969:30;-1:-1:-1;;;17015:18:1;;;17008:42;17067:18;;1448:31:0;16755: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;11013:252::-;-1:-1:-1;;;;;11095:13:0;;:8;:13;;;;;;;;;;;:20;-1:-1:-1;11095:20:0;11087:29;;;;;;-1:-1:-1;;;;;11148:13:0;;:8;:13;;;;;;;;;;;11143:24;;11163:3;11143:4;:24::i;:::-;-1:-1:-1;;;;;11127:13:0;;;:8;:13;;;;;;;;;;;:40;;;;11199:13;;;;;;;11194:24;;11214:3;11194:4;:24::i;:::-;-1:-1:-1;;;;;11178:13:0;;;:8;:13;;;;;;;;;;;;:40;;;;11234:23;21195:25:1;;;11178:13:0;;11234:23;;;;-1:-1:-1;;;;;;;;;;;11234:23:0;21168:18:1;11234:23:0;;;;;;;11013:252;;;:::o;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;;19520:2:1;702:35:0;;;19502:21:1;19559:2;19539:18;;;19532:30;-1:-1:-1;;;19578:18:1;;;19571:47;19635:18;;702:35:0;19318:341:1;702:35:0;-1:-1:-1;755:1:0;550:214;-1:-1:-1;;;550:214:0:o;350:192::-;427:7;;464:5;468:1;464;:5;:::i;:::-;452:17;;493:1;488;:6;;480:35;;;;-1:-1:-1;;;480:35:0;;19866:2:1;480:35:0;;;19848:21:1;19905:2;19885:18;;;19878:30;-1:-1:-1;;;19924:18:1;;;19917:46;19980:18;;480:35:0;19664:340:1;480:35:0;533:1;350:192;-1:-1:-1;;;350:192:0:o;2093:567::-;2175:7;2216:5;2208:4;:13;;2200:47;;;;-1:-1:-1;;;2200:47:0;;18408:2:1;2200:47:0;;;18390:21:1;18447:2;18427:18;;;18420:30;-1:-1:-1;;;18466:18:1;;;18459:51;18527:18;;2200:47:0;18206:345:1;2200:47:0;2274:18;2266:4;:26;;2258:61;;;;-1:-1:-1;;;2258:61:0;;20900:2:1;2258:61:0;;;20882:21:1;20939:2;20919:18;;;20912:30;-1:-1:-1;;;20958:18:1;;;20951:52;21020:18;;2258:61:0;20698: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;39429:207::-;39549:55;;-1:-1:-1;;;39549:55:0;;-1:-1:-1;;;;;7060:15:1;;;39549:55:0;;;7042:34:1;39590:4:0;7092:18:1;;;7085:43;7144:18;;;7137:34;;;39537:9:0;;39549:26;;;;;;6977:18:1;;39549:55:0;6802:375:1;10786:219:0;10882:4;10865:8;:23;;;;;;;;;;;10860:34;;10890:3;10860:4;:34::i;:::-;10851:4;10834:8;:23;;;;;;;;;;:60;10924:11;;10919:22;;10937:3;10919:4;:22::i;:::-;10905:11;:36;10957:40;;21195:25:1;;;10986:4:0;;10974:1;;-1:-1:-1;;;;;;;;;;;10957:40:0;21183:2:1;21168:18;10957:40:0;;;;;;;10786:219;:::o;11273:97::-;11333:29;11347:4;11354:2;11358:3;11333:5;:29::i;:::-;11273:97;;:::o;8106:318::-;8166:4;8333:20;;-1:-1:-1;;;;;;;;;;;8373:23:0;;;;;;:42;;-1:-1:-1;;8400:15:0;;;8365:51;-1:-1:-1;;8106:318:0:o;7872:198::-;7983:12;;;7945;7983;;;;;;;;;-1:-1:-1;;;;;7962:7:0;;;7976:5;;7962:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7944:52;;;8015:7;8007:55;;;;-1:-1:-1;;;8007:55:0;;19116:2:1;8007:55:0;;;19098:21:1;19155:2;19135:18;;;19128:30;19194:34;19174:18;;;19167:62;-1:-1:-1;;;19245:18:1;;;19238:33;19288:19;;8007:55:0;18914:399:1;8007:55:0;7933:137;7872:198;;:::o;40095:172::-;40157:4;40141:13;;:20;40138:122;;;40190:4;;40196:8;;40206:13;;40174:46;;-1:-1:-1;;;;;40190:4:0;;;;40196:8;;40174:15;:46::i;:::-;40247:1;40231:13;:17;40138:122;40095:172::o;39844:239::-;39902:5;39886:13;;:21;39883:193;;;39925:4;;39940:13;;39920:34;;-1:-1:-1;;;39920:34:0;;-1:-1:-1;;;;;39925:4:0;;;;39920:19;;:34;;;;21195:25:1;;;21183:2;21168:18;;21049:177;39920:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39970:4:0;;39991:13;;-1:-1:-1;;;;;39970:4:0;;;;-1:-1:-1;39965:14:0;;-1:-1:-1;39986:34:0;;40006:13;40011:2;40015:3;40006:4;:13::i;39986:34::-;40028:4;;39965:71;;;;;;-1:-1:-1;;;;;;39965:71:0;;;40022:4;39965:71;;;9243:25:1;-1:-1:-1;;;;;40028:4:0;;;9284:18:1;;;9277:60;40028:4:0;9353:18:1;;;9346:34;9216:18;;39965:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40063:1:0;40047:13;:17;-1:-1:-1;;;39844:239:0:o;27593:178::-;27635:10;27648:25;27672:1;27648:21;:25;:::i;:::-;27635:38;;27684:46;27715:10;27727:2;27684:30;:46::i;:::-;27761:2;27741:16;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;27593:178: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:478::-;1082:6;1090;1098;1106;1114;1167:3;1155:9;1146:7;1142:23;1138:33;1135:53;;;1184:1;1181;1174:12;1135:53;1207:29;1226:9;1207:29;:::i;:::-;1197:39;;1255:38;1289:2;1278:9;1274:18;1255:38;:::i;:::-;1245:48;;1312:38;1346:2;1335:9;1331:18;1312:38;:::i;:::-;1302:48;;1369:38;1403:2;1392:9;1388:18;1369:38;:::i;:::-;987:478;;;;-1:-1:-1;987:478:1;;1454:3;1439:19;1426:33;;987:478;-1:-1:-1;;987:478:1:o;1470:403::-;1556:6;1564;1572;1580;1633:3;1621:9;1612:7;1608:23;1604:33;1601:53;;;1650:1;1647;1640:12;1601:53;1673:29;1692:9;1673:29;:::i;:::-;1663:39;;1721:38;1755:2;1744:9;1740:18;1721:38;:::i;:::-;1711:48;;1778:38;1812:2;1801:9;1797:18;1778:38;:::i;:::-;1470:403;;;;-1:-1:-1;1768:48:1;;1863:2;1848:18;1835:32;;-1:-1:-1;;1470:403:1:o;1878:328::-;1955:6;1963;1971;2024:2;2012:9;2003:7;1999:23;1995:32;1992:52;;;2040:1;2037;2030:12;1992:52;2063:29;2082:9;2063:29;:::i;:::-;2053:39;;2111:38;2145:2;2134:9;2130:18;2111:38;:::i;:::-;2101:48;;2196:2;2185:9;2181:18;2168:32;2158:42;;1878:328;;;;;:::o;2211:315::-;2276:6;2284;2337:2;2325:9;2316:7;2312:23;2308:32;2305:52;;;2353:1;2350;2343:12;2305:52;2376:29;2395:9;2376:29;:::i;:::-;2366:39;;2455:2;2444:9;2440:18;2427:32;2468:28;2490:5;2468:28;:::i;:::-;2515:5;2505:15;;;2211:315;;;;;:::o;2531:254::-;2599:6;2607;2660:2;2648:9;2639:7;2635:23;2631:32;2628:52;;;2676:1;2673;2666:12;2628:52;2699:29;2718:9;2699:29;:::i;:::-;2689:39;2775:2;2760:18;;;;2747:32;;-1:-1:-1;;;2531:254:1:o;2790:245::-;2857:6;2910:2;2898:9;2889:7;2885:23;2881:32;2878:52;;;2926:1;2923;2916:12;2878:52;2958:9;2952:16;2977:28;2999:5;2977:28;:::i;3040:180::-;3099:6;3152:2;3140:9;3131:7;3127:23;3123:32;3120:52;;;3168:1;3165;3158:12;3120:52;-1:-1:-1;3191:23:1;;3040:180;-1:-1:-1;3040:180:1:o;3225:184::-;3295:6;3348:2;3336:9;3327:7;3323:23;3319:32;3316:52;;;3364:1;3361;3354:12;3316:52;-1:-1:-1;3387:16:1;;3225:184;-1:-1:-1;3225:184:1:o;3414:322::-;3491:6;3499;3507;3560:2;3548:9;3539:7;3535:23;3531:32;3528:52;;;3576:1;3573;3566:12;3528:52;3612:9;3599:23;3589:33;;3641:38;3675:2;3664:9;3660:18;3641:38;:::i;3741:391::-;3827:6;3835;3843;3851;3904:3;3892:9;3883:7;3879:23;3875:33;3872:53;;;3921:1;3918;3911:12;3872:53;3957:9;3944:23;3934:33;;3986:38;4020:2;4009:9;4005:18;3986:38;:::i;:::-;3741:391;;3976:48;;-1:-1:-1;;;;4071:2:1;4056:18;;4043:32;;4122:2;4107:18;4094:32;;3741:391::o;4137:683::-;4232:6;4240;4248;4301:2;4289:9;4280:7;4276:23;4272:32;4269:52;;;4317:1;4314;4307:12;4269:52;4340:23;;;-1:-1:-1;4414:2:1;4399:18;;4386:32;-1:-1:-1;;;;;4467:14:1;;;4464:34;;;4494:1;4491;4484:12;4464:34;4532:6;4521:9;4517:22;4507:32;;4577:7;4570:4;4566:2;4562:13;4558:27;4548:55;;4599:1;4596;4589:12;4548:55;4639:2;4626:16;4665:2;4657:6;4654:14;4651:34;;;4681:1;4678;4671:12;4651:34;4734:7;4729:2;4719:6;4716:1;4712:14;4708:2;4704:23;4700:32;4697:45;4694:65;;;4755:1;4752;4745:12;4694:65;4786:2;4782;4778:11;4768:21;;4808:6;4798:16;;;;;4137:683;;;;;:::o;4825:248::-;4893:6;4901;4954:2;4942:9;4933:7;4929:23;4925:32;4922:52;;;4970:1;4967;4960:12;4922:52;-1:-1:-1;;4993:23:1;;;5063:2;5048:18;;;5035:32;;-1:-1:-1;4825:248:1:o;5078:245::-;5157:6;5165;5218:2;5206:9;5197:7;5193:23;5189:32;5186:52;;;5234:1;5231;5224:12;5186:52;-1:-1:-1;;5257:16:1;;5313:2;5298:18;;;5292:25;5257:16;;5292:25;;-1:-1:-1;5078:245:1:o;5328:454::-;5423:6;5431;5439;5447;5455;5508:3;5496:9;5487:7;5483:23;5479:33;5476:53;;;5525:1;5522;5515:12;5476:53;-1:-1:-1;;5548:23:1;;;5618:2;5603:18;;5590:32;;-1:-1:-1;5669:2:1;5654:18;;5641:32;;5720:2;5705:18;;5692:32;;-1:-1:-1;5771:3:1;5756:19;5743:33;;-1:-1:-1;5328:454:1;-1:-1:-1;5328:454:1:o;5787:523::-;5891:6;5899;5907;5915;5923;5931;5984:3;5972:9;5963:7;5959:23;5955:33;5952:53;;;6001:1;5998;5991:12;5952:53;-1:-1:-1;;6024:23:1;;;6094:2;6079:18;;6066:32;;-1:-1:-1;6145:2:1;6130:18;;6117:32;;6196:2;6181:18;;6168:32;;-1:-1:-1;6247:3:1;6232:19;;6219:33;;-1:-1:-1;6299:3:1;6284:19;6271:33;;-1:-1:-1;5787:523:1;-1:-1:-1;5787:523:1:o;6315:274::-;6444:3;6482:6;6476:13;6498:53;6544:6;6539:3;6532:4;6524:6;6520:17;6498:53;:::i;:::-;6567:16;;;;;6315:274;-1:-1:-1;;6315:274:1:o;6594:203::-;-1:-1:-1;;;;;6758:32:1;;;;6740:51;;6728:2;6713:18;;6594:203::o;7182:332::-;-1:-1:-1;;;;;7432:32:1;;;;7414:51;;7496:2;7481:18;;7474:34;7402:2;7387:18;;7182:332::o;9391:383::-;9540:2;9529:9;9522:21;9503:4;9572:6;9566:13;9615:6;9610:2;9599:9;9595:18;9588:34;9631:66;9690:6;9685:2;9674:9;9670:18;9665:2;9657:6;9653:15;9631:66;:::i;:::-;9758:2;9737:15;-1:-1:-1;;9733:29:1;9718:45;;;;9765:2;9714:54;;9391:383;-1:-1:-1;;9391:383:1:o;9779:334::-;9981:2;9963:21;;;10020:2;10000:18;;;9993:30;-1:-1:-1;;;10054:2:1;10039:18;;10032:40;10104:2;10089:18;;9779:334::o;10118:350::-;10320:2;10302:21;;;10359:2;10339:18;;;10332:30;-1:-1:-1;;;10393:2:1;10378:18;;10371:56;10459:2;10444:18;;10118:350::o;10810:340::-;11012:2;10994:21;;;11051:2;11031:18;;;11024:30;-1:-1:-1;;;11085:2:1;11070:18;;11063:46;11141:2;11126:18;;10810:340::o;12331:::-;12533:2;12515:21;;;12572:2;12552:18;;;12545:30;-1:-1:-1;;;12606:2:1;12591:18;;12584:46;12662:2;12647:18;;12331:340::o;12676:::-;12878:2;12860:21;;;12917:2;12897:18;;;12890:30;-1:-1:-1;;;12951:2:1;12936:18;;12929:46;13007:2;12992:18;;12676:340::o;13021:::-;13223:2;13205:21;;;13262:2;13242:18;;;13235:30;-1:-1:-1;;;13296:2:1;13281:18;;13274:46;13352:2;13337:18;;13021:340::o;13366:475::-;13568:2;13550:21;;;13607:2;13587:18;;;13580:30;-1:-1:-1;;;;;;;;;;;13641:2:1;13626:18;;13619:62;13717:34;13712:2;13697:18;;13690:62;-1:-1:-1;;;13783:3:1;13768:19;;13761:38;13831:3;13816:19;;13366:475::o;14265:339::-;14467:2;14449:21;;;14506:2;14486:18;;;14479:30;-1:-1:-1;;;14540:2:1;14525:18;;14518:45;14595:2;14580:18;;14265:339::o;15362:350::-;15564:2;15546:21;;;15603:2;15583:18;;;15576:30;-1:-1:-1;;;15637:2:1;15622:18;;15615:56;15703:2;15688:18;;15362:350::o;16066:339::-;16268:2;16250:21;;;16307:2;16287:18;;;16280:30;-1:-1:-1;;;16341:2:1;16326:18;;16319:45;16396:2;16381:18;;16066:339::o;16410:340::-;16612:2;16594:21;;;16651:2;16631:18;;;16624:30;-1:-1:-1;;;16685:2:1;16670:18;;16663:46;16741:2;16726:18;;16410:340::o;17096:338::-;17298:2;17280:21;;;17337:2;17317:18;;;17310:30;-1:-1:-1;;;17371:2:1;17356:18;;17349:44;17425:2;17410:18;;17096:338::o;17439:342::-;17641:2;17623:21;;;17680:2;17660:18;;;17653:30;-1:-1:-1;;;17714:2:1;17699:18;;17692:48;17772:2;17757:18;;17439:342::o;17786:415::-;17988:2;17970:21;;;18027:2;18007:18;;;18000:30;18066:34;18061:2;18046:18;;18039:62;-1:-1:-1;;;18132:2:1;18117:18;;18110:49;18191:3;18176:19;;17786:415::o;20009:337::-;20211:2;20193:21;;;20250:2;20230:18;;;20223:30;-1:-1:-1;;;20284:2:1;20269:18;;20262:43;20337:2;20322:18;;20009:337::o;21231:256::-;21413:25;;;21469:2;21454:18;;21447:34;21401:2;21386:18;;21231:256::o;21934:128::-;21974:3;22005:1;22001:6;21998:1;21995:13;21992:39;;;22011:18;;:::i;:::-;-1:-1:-1;22047:9:1;;21934:128::o;22067:120::-;22107:1;22133;22123:35;;22138:18;;:::i;:::-;-1:-1:-1;22172:9:1;;22067:120::o;22192:168::-;22232:7;22298:1;22294;22290:6;22286:14;22283:1;22280:21;22275:1;22268:9;22261:17;22257:45;22254:71;;;22305:18;;:::i;:::-;-1:-1:-1;22345:9:1;;22192:168::o;22365:125::-;22405:4;22433:1;22430;22427:8;22424:34;;;22438:18;;:::i;:::-;-1:-1:-1;22475:9:1;;22365:125::o;22495:258::-;22567:1;22577:113;22591:6;22588:1;22585:13;22577:113;;;22667:11;;;22661:18;22648:11;;;22641:39;22613:2;22606:10;22577:113;;;22708:6;22705:1;22702:13;22699:48;;;-1:-1:-1;;22743:1:1;22725:16;;22718:27;22495:258::o;22758:380::-;22837:1;22833:12;;;;22880;;;22901:61;;22955:4;22947:6;22943:17;22933:27;;22901:61;23008:2;23000:6;22997:14;22977:18;22974:38;22971:161;;;23054:10;23049:3;23045:20;23042:1;23035:31;23089:4;23086:1;23079:15;23117:4;23114:1;23107:15;22971:161;;22758:380;;;:::o;23143:135::-;23182:3;-1:-1:-1;;23203:17:1;;23200:43;;;23223:18;;:::i;:::-;-1:-1:-1;23270:1:1;23259:13;;23143:135::o;23283:112::-;23315:1;23341;23331:35;;23346:18;;:::i;:::-;-1:-1:-1;23380:9:1;;23283:112::o;23400:127::-;23461:10;23456:3;23452:20;23449:1;23442:31;23492:4;23489:1;23482:15;23516:4;23513:1;23506:15;23532:127;23593:10;23588:3;23584:20;23581:1;23574:31;23624:4;23621:1;23614:15;23648:4;23645:1;23638:15;23664:127;23725:10;23720:3;23716:20;23713:1;23706:31;23756:4;23753:1;23746:15;23780:4;23777:1;23770:15;23928:118;24014:5;24007:13;24000:21;23993:5;23990:32;23980:60;;24036:1;24033;24026:12;23980:60;23928:118;:::o

Swarm Source

ipfs://6e975ff83a4186e01467ea640ea3732de6c1a56f22974857b5b47eb9274d0e34

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.