ETH Price: $2,608.73 (-2.32%)

Token

Evolve (EVO)
 

Overview

Max Total Supply

100,000,000,000,000,000 EVO

Holders

79

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
18,552,638,812,302.622971641 EVO

Value
$0.00
0x4b97352169ee36342cf401a3cb162853a1cac7e7
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Evolve

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-04
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address _owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ag, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
    function getInitializers() external view returns (string memory, string memory, uint256, uint8, address);
}

contract Evolve is IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => uint256) private firstBuy;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private _tTotal;

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
        uint16 sellFeeBoosted;
    }

    struct Ratios {
        uint16 marketing;
        uint16 buyback;
        uint16 dev;
        uint16 total;
    }

    Fees public _taxRates = Fees({
        buyFee: 1400,
        sellFee: 1400,
        transferFee: 1400,
        sellFeeBoosted: 2000
        });

    Ratios public _ratios = Ratios({
        marketing: 4,
        buyback: 6,
        dev: 4,
        total: 14
        });

    uint256 constant public maxBuyTaxes = 2000;
    uint256 constant public maxSellTaxes = 2000;
    uint256 constant public maxTransferTaxes = 2000;
    uint256 constant masterTaxDivisor = 10000;

    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address payable buyback;
        address payable dev;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xf561704c7476CE9c808d84e6447F856838D9C62f),
        buyback: payable(0x58694A00Bf4390B0a9533916844177694c1A4eCE),
        dev: payable(0x7c15D48Df776d9651Bf55C2fcD577969e60c31f1)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    
    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;
    bool contractInitialized = false;
    bool public boostedTaxesEnabled = true;
    uint256 public boostedTaxesTimeLimit = 24 hours;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);
        } else if (block.chainid == 1 || block.chainid == 4) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else {
            revert();
        }
        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;
    }

    function intializeContract(address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "1");
        antiSnipe = AntiSnipe(_antiSnipe);
        try antiSnipe.transfer(address(this)) {} catch {}
        address newOwner;
        try antiSnipe.getInitializers() returns (string memory initName, string memory initSymbol, uint256 initStartingSupply, uint8 initDecimals, address initOwner) {
            _name = initName;
            _symbol = initSymbol;
            startingSupply = initStartingSupply;
            _decimals = initDecimals;
            _tTotal = startingSupply * 10**_decimals;
            newOwner = initOwner;
        } catch {
            revert("3");
        }
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        swapThreshold = (_tTotal * 3) / 10000;
        swapAmount = (_tTotal * 5) / 10000;
        _maxTxAmount = (_tTotal * 5) / 1000;
        _maxWalletSize = (_tTotal * 1) / 100;
        contractInitialized = true;     
        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);
        _transfer(_owner, DEAD, (_tTotal * 6) / 10);
        _transfer(_owner, address(this), balanceOf(_owner));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            newOwner,
            block.timestamp
        );

        enableTrading();
        transferOwner(newOwner);
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function transferOwner(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

    function approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) public onlyOwner {
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

    function setInitializer(address initializer) external onlyOwner {
        require(!_hasLiqBeenAdded);
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
    }

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
    }

    function removeBlacklisted(address account) external onlyOwner {
        antiSnipe.removeBlacklisted(account);
    }

    function isBlacklisted(address account) public view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

    function removeSniper(address account) external onlyOwner {
        antiSnipe.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiGas, bool _antiBlock, bool _algo) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _antiGas, _antiBlock, _algo);
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 275, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }

    function setBoostedTaxesEnabled(bool enabled) external onlyOwner {
        boostedTaxesEnabled = enabled;
    }

    function setBoostedTaxesTimeLimit(uint256 time) external onlyOwner {
        require(time <= 36 hours);
        boostedTaxesTimeLimit = time;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee, uint16 sellFeeBoosted) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes
                && sellFeeBoosted <= maxSellTaxes,
                "Cannot exceed maximums.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
        _taxRates.sellFeeBoosted = sellFeeBoosted;
    }

    function setRatios(uint16 marketing, uint16 buyback, uint16 dev) external onlyOwner {
        _ratios.marketing = marketing;
        _ratios.buyback = buyback;
        _ratios.dev = dev;
        _ratios.total = marketing + buyback + dev;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = (_tTotal * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function setExcludedFromLimits(address account, bool enabled) external onlyOwner {
        _isExcludedFromLimits[account] = enabled;
    }

    function isExcludedFromLimits(address account) public view returns (bool) {
        return _isExcludedFromLimits[account];
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function getMaxTX() public view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

    function getMaxWallet() public view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor, uint256 time) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        contractSwapTimer = time;
    }

    function setWallets(address payable marketing, address payable buyback, address payable dev) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.buyback = payable(buyback);
        _taxWallets.dev = payable(dev);
    }

    function setContractSwapEnabled(bool enabled) external onlyOwner {
        contractSwapEnabled = enabled;
        emit ContractSwapEnabledUpdated(enabled);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != _owner
            && to != _owner
            && tx.origin != _owner
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function getFirstBuy(address account) external view returns (uint256) {
        return firstBuy[account];
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if(to != address(dexRouter) && !lpPairs[to]) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        if (lpPairs[from] && firstBuy[to] == 0) {
            firstBuy[to] = block.timestamp;
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        Ratios memory ratios = _ratios;
        if (ratios.total == 0) {
            return;
        }

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amtBalance = address(this).balance;
        uint256 buybackBalance = (amtBalance * ratios.buyback) / ratios.total;
        uint256 devBalance = (amtBalance * ratios.dev) / ratios.total;
        uint256 marketingBalance = amtBalance - (buybackBalance + devBalance);
        if (ratios.buyback > 0) {
            _taxWallets.buyback.transfer(buybackBalance);
        }
        if (ratios.dev > 0) {
            _taxWallets.dev.transfer(devBalance);
        }
        if (ratios.marketing > 0) {
            _taxWallets.marketing.transfer(marketingBalance);
        }
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            if(address(antiSnipe) == address(0)){
                antiSnipe = AntiSnipe(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _transfer(msg.sender, accounts[i], amounts[i]*10**_decimals);
        }
    }

    function multiSendPercents(address[] memory accounts, uint256[] memory percents, uint256[] memory divisors) external {
        require(accounts.length == percents.length && percents.length == divisors.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= (_tTotal * percents[i]) / divisors[i]);
            _transfer(msg.sender, accounts[i], (_tTotal * percents[i]) / divisors[i]);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

        if (_hasLimits(from, to)) {
            bool checked;
            try antiSnipe.checkUser(from, to, amount) returns (bool check) {
                checked = check;
            } catch {
                revert();
            }

            if(!checked) {
                revert();
            }
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount;
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (lpPairs[from]) {
            currentFee = _taxRates.buyFee;
        } else if (lpPairs[to]) {
            if (firstBuy[from] == 0 && boostedTaxesEnabled) {
                firstBuy[from] = block.timestamp;
            }
            if (boostedTaxesEnabled && firstBuy[from] + boostedTaxesTimeLimit > block.timestamp) {
                currentFee = _taxRates.sellFeeBoosted;
            } else {
                currentFee = _taxRates.sellFee;
            }
        } else {
            currentFee = _taxRates.transferFee;
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"},{"internalType":"uint16","name":"sellFeeBoosted","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"buyback","type":"address"},{"internalType":"address payable","name":"dev","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostedTaxesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostedTaxesTimeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getFirstBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_antiSnipe","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"}],"name":"multiSendPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBoostedTaxesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setBoostedTaxesTimeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"},{"internalType":"uint16","name":"sellFeeBoosted","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"buyback","type":"address"},{"internalType":"address payable","name":"dev","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006003819055610578608081905260a081905260c0526107d060e052600e80546707d00578057805786001600160401b031991821617825560046101008190526006610120526101405261016091909152600f8054660e00040006000492169190911790556101e060405273f561704c7476ce9c808d84e6447f856838d9c62f6101808190527358694a00bf4390b0a9533916844177694c1a4ece6101a0819052737c15d48df776d9651bf55c2fcd577969e60c31f16101c0819052601280546001600160a01b0319908116909417905560138054841690921790915560148054831690911790556015805461ff00191690556016829055601c805461ffff61ffff60b01b011916600160b81b17905562015180601d558154163317905560384614156200015457601080546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001d1565b46606114156200018a57601080546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620001d1565b46600114806200019a5750466004145b15620001cc57601080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001d1565b600080fd5b600054601054620001f2916001600160a01b03908116911660001962000290565b6010546200020e9030906001600160a01b031660001962000290565b600080546001600160a01b0390811682526005602090815260408084208054600160ff19918216811790925530865282862080548216831790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80548216831790558554909416855260079092529092208054909116909117905562000391565b6001600160a01b038316620002e25760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620003305760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620002d9565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b614c2380620003a16000396000f3fe6080604052600436106103a65760003560e01c80635cce86cd116101e7578063b3d514fb1161010d578063eafb5a3c116100a0578063f94aa1b41161006f578063f94aa1b414610b37578063fceef4ac14610b8e578063fdb78c0e14610bae578063fe575a8714610bcd57600080fd5b8063eafb5a3c14610ac2578063ecfc021f14610ae2578063ee5d9c2d14610b02578063eec2744e14610b1757600080fd5b8063d131d5ca116100dc578063d131d5ca14610a30578063dd62ed3e14610a46578063e4fcfd1814610a8c578063e8a0e3f914610aa257600080fd5b8063b3d514fb146105d2578063c6a276c2146109b3578063cab5ebea146109d3578063cf847706146109f357600080fd5b80638a63bd9b11610185578063a13ce2c611610154578063a13ce2c61461093d578063a9059cbb14610973578063aa22b17214610993578063b1b08f71146105d257600080fd5b80638a63bd9b146108de5780638a6c01a3146108f35780638a8c523c1461091357806395d89b411461092857600080fd5b8063715018a6116101c1578063715018a61461086b57806375cb1bd11461088057806380c581d1146108a0578063893d20e8146108c057600080fd5b80635cce86cd146107e75780636ebd00781461082057806370a082311461083557600080fd5b80632e8fa821116102cc57806348909c021161026a57806350a8e0161161023957806350a8e01614610768578063533ecf5414610787578063590ffdce146107a75780635c24b074146107c757600080fd5b806348909c02146106c05780634ada218b146106f55780634fb2e45d1461070f5780634fbee1931461072f57600080fd5b806334cd8260116102a657806334cd82601461064057806336fddb04146106605780633f3cf56c14610680578063452ed4f1146106a057600080fd5b80632e8fa821146105e8578063313ce567146105fe57806333251a0b1461062057600080fd5b8063095ea7b311610344578063260039571161031357806326003957146105725780632610eaca1461059257806329dd8798146105b25780632b28fc7a146105d257600080fd5b8063095ea7b3146104f85780630fa604e41461052857806318160ddd1461053d57806323b872dd1461055257600080fd5b8063069d955f11610380578063069d955f1461042b57806306fdde03146104965780630758d924146104b857806309231602146104d857600080fd5b806303fd2a45146103b25780630445b667146103e557806305bbedb61461040957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f157600080fd5b506103fb60185481565b6040519081526020016103dc565b34801561041557600080fd5b506104296104243660046142a7565b610bed565b005b34801561043757600080fd5b50600e546104689061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103dc565b3480156104a257600080fd5b506104ab610cc6565b6040516103dc9190614325565b3480156104c457600080fd5b506010546103c8906001600160a01b031681565b3480156104e457600080fd5b506104296104f3366004614358565b610d58565b34801561050457600080fd5b50610518610513366004614371565b610e78565b60405190151581526020016103dc565b34801561053457600080fd5b506103fb610e8f565b34801561054957600080fd5b506103fb610eb5565b34801561055e57600080fd5b5061051861056d36600461439d565b610ece565b34801561057e57600080fd5b5061042961058d3660046143de565b610f46565b34801561059e57600080fd5b506104296105ad36600461445b565b611051565b3480156105be57600080fd5b506104296105cd3660046144bf565b611171565b3480156105de57600080fd5b506103fb6107d081565b3480156105f457600080fd5b506103fb60195481565b34801561060a57600080fd5b50600c5460405160ff90911681526020016103dc565b34801561062c57600080fd5b5061042961063b36600461451b565b61125a565b34801561064c57600080fd5b5061042961065b366004614538565b6112fa565b34801561066c57600080fd5b5061042961067b366004614573565b61138a565b34801561068c57600080fd5b5061042961069b3660046143de565b611403565b3480156106ac57600080fd5b506011546103c8906001600160a01b031681565b3480156106cc57600080fd5b50601c546105189077010000000000000000000000000000000000000000000000900460ff1681565b34801561070157600080fd5b50601c546105189060ff1681565b34801561071b57600080fd5b5061042961072a36600461451b565b61150e565b34801561073b57600080fd5b5061051861074a36600461451b565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561077457600080fd5b50601c5461051890610100900460ff1681565b34801561079357600080fd5b506104296107a236600461451b565b61171c565b3480156107b357600080fd5b506104296107c2366004614573565b611df2565b3480156107d357600080fd5b506104296107e236600461451b565b611e6b565b3480156107f357600080fd5b5061051861080236600461451b565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561082c57600080fd5b506103fb611f67565b34801561084157600080fd5b506103fb61085036600461451b565b6001600160a01b031660009081526001602052604090205490565b34801561087757600080fd5b50610429611f88565b34801561088c57600080fd5b5061042961089b3660046145a1565b612038565b3480156108ac57600080fd5b506104296108bb366004614573565b6120d2565b3480156108cc57600080fd5b506000546001600160a01b03166103c8565b3480156108ea57600080fd5b50610518612278565b3480156108ff57600080fd5b5061042961090e366004614358565b6122e7565b34801561091f57600080fd5b5061042961234a565b34801561093457600080fd5b506104ab61253a565b34801561094957600080fd5b506103fb61095836600461451b565b6001600160a01b031660009081526008602052604090205490565b34801561097f57600080fd5b5061051861098e366004614371565b612549565b34801561099f57600080fd5b506104296109ae366004614603565b612560565b3480156109bf57600080fd5b506104296109ce36600461451b565b612673565b3480156109df57600080fd5b506104296109ee366004614646565b612713565b3480156109ff57600080fd5b50600f546104689061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610a3c57600080fd5b506103fb601d5481565b348015610a5257600080fd5b506103fb610a61366004614663565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a9857600080fd5b506103fb60165481565b348015610aae57600080fd5b50610429610abd366004614691565b6127b5565b348015610ace57600080fd5b50610429610add36600461451b565b61290f565b348015610aee57600080fd5b50610429610afd366004614719565b612cbe565b348015610b0e57600080fd5b50610429612e40565b348015610b2357600080fd5b50610429610b32366004614573565b612f23565b348015610b4357600080fd5b50601254601354601454610b64926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103dc565b348015610b9a57600080fd5b50610429610ba9366004614646565b612fcb565b348015610bba57600080fd5b5060155461051890610100900460ff1681565b348015610bd957600080fd5b50610518610be836600461451b565b613066565b6000546001600160a01b03163314610c405760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601c546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610c9090859085906004016147b1565b600060405180830381600087803b158015610caa57600080fd5b505af1158015610cbe573d6000803e3d6000fd5b505050505050565b6060600a8054610cd5906147d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d01906147d5565b8015610d4e5780601f10610d2357610100808354040283529160200191610d4e565b820191906000526020600020905b815481529060010190602001808311610d3157829003601f168201915b5050505050905090565b6000546001600160a01b03163314610da65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b610113811015610df85760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610c37565b601c546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610e5d57600080fd5b505af1158015610e71573d6000803e3d6000fd5b5050505050565b6000610e853384846130f4565b5060015b92915050565b600c54600090610ea39060ff16600a61493c565b601b54610eb0919061494b565b905090565b6000600d5460001415610ec757600080fd5b50600d5490565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610f33576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610f2d908490614986565b90915550505b610f3e848484613201565b949350505050565b6000546001600160a01b03163314610f945760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6103e8600d54610fa4919061494b565b8183600d54610fb3919061499d565b610fbd919061494b565b10156110315760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610c37565b8082600d54611040919061499d565b61104a919061494b565b601b555050565b80518251146110a25760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c37565b60005b82518160ff16101561116c57818160ff16815181106110c6576110c66149bc565b60200260200101516110ed336001600160a01b031660009081526001602052604090205490565b10156110f857600080fd5b61115933848360ff1681518110611111576111116149bc565b6020908102919091010151600c5461112d9060ff16600a61493c565b858560ff1681518110611142576111426149bc565b6020026020010151611154919061499d565b613201565b5080611164816149eb565b9150506110a5565b505050565b6000546001600160a01b031633146111bf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561123c57600080fd5b505af1158015611250573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146112a85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610e43565b6000546001600160a01b031633146113485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b8385600d54611357919061499d565b611361919061494b565b601855600d54829061137490859061499d565b61137e919061494b565b60195560165550505050565b6000546001600160a01b031633146113d85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114515760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6103e8600d54611461919061494b565b8183600d54611470919061499d565b61147a919061494b565b10156114ee5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c37565b8082600d546114fd919061499d565b611507919061494b565b601a555050565b6000546001600160a01b0316331461155c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6001600160a01b0381166115d85760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c37565b6001600160a01b03811661dead14156116595760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c37565b60008054611672916001600160a01b0390911690611df2565b61167d816001611df2565b600080546001600160a01b0316815260016020526040902054156116c457600080546001600160a01b031680825260016020526040909120546116c291908390613201565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461176a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c54760100000000000000000000000000000000000000000000900460ff16156117d75760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610c37565b601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b15801561186957600080fd5b505af192505050801561187a575060015b506000601c60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa9250505080156118f157506040513d6000823e601f3d908101601f191682016040526118ee9190810190614a6f565b60015b61193d5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610c37565b845161195090600a9060208801906140f3565b50835161196490600b9060208701906140f3565b506009839055600c805460ff191660ff841690811790915561198790600a61493c565b600954611994919061499d565b600d55601054604080517fc45a015500000000000000000000000000000000000000000000000000000000815290519297506001600160a01b03909116955063c45a015594506004808201945060209350908290030181865afa1580156119ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a239190614b0b565b6001600160a01b031663c9c65396601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa89190614b0b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b309190614b0b565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600260205260409020805460ff19166001179055600d5461271090611b8790600361499d565b611b91919061494b565b601855600d5461271090611ba690600561499d565b611bb0919061494b565b601955600d546103e890611bc590600561499d565b611bcf919061494b565b601a55600d54606490611be390600161499d565b611bed919061494b565b601b55601c80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055600d54600080546001600160a01b03908116825260016020526040808320849055825490519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611c8791815260200190565b60405180910390a3601054611ca99030906001600160a01b03166000196130f4565b600054600d54611cd9916001600160a01b03169061dead90600a90611ccf90600661499d565b611154919061494b565b50600080546001600160a01b03168082526001602052604090912054611d0191903090613201565b506010546001600160a01b031663f305d7194730611d34816001600160a01b031660009081526001602052604090205490565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0392831660048201526024810191909152600060448201819052606482015290851660848201524260a482015260c40160606040518083038185885af1158015611db5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611dda9190614b28565b505050611de561234a565b611dee8161150e565b5050565b6000546001600160a01b03163314611e405760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611eb95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c54610100900460ff1615611ece57600080fd5b6001600160a01b038116301415611f275760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c37565b601c80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600c54600090611f7b9060ff16600a61493c565b601a54610eb0919061494b565b6000546001600160a01b03163314611fd65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b60008054611fef916001600160a01b0390911690611df2565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146120865760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601280546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155601380549385169382169390931790925560148054919093169116179055565b6000546001600160a01b031633146121205760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b80612197576001600160a01b03828116600081815260026020526040808220805460ff19169055601c5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610c90565b600354156121fe576203f480600354426121b19190614986565b116121fe5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610c37565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601c5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610c90565b600080546001600160a01b031633146122c75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6010546122e19030906001600160a01b03166000196130f4565b50600190565b6000546001600160a01b031633146123355760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6201fa4081111561234557600080fd5b601d55565b6000546001600160a01b031633146123985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c5460ff16156123eb5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c37565b601c54610100900460ff166124425760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c37565b601c546201000090046001600160a01b031661248857601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c54601154600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561251957600080fd5b505af192505050801561252a575060015b50601c805460ff19166001179055565b6060600b8054610cd5906147d5565b6000612556338484613201565b5060019392505050565b6000546001600160a01b031633146125ae5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b600f805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416928816929092179290921716179055806126268385614b56565b6126309190614b56565b600f805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b031633146126c15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610e43565b6000546001600160a01b031633146127615760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601580548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906127aa90831515815260200190565b60405180910390a150565b815183511480156127c7575080518251145b6128135760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c37565b60005b83518160ff16101561290957818160ff1681518110612837576128376149bc565b6020026020010151838260ff1681518110612854576128546149bc565b6020026020010151600d54612869919061499d565b612873919061494b565b33600090815260016020526040902054101561288e57600080fd5b6128f633858360ff16815181106128a7576128a76149bc565b6020026020010151848460ff16815181106128c4576128c46149bc565b6020026020010151868560ff16815181106128e1576128e16149bc565b6020026020010151600d54611ccf919061499d565b5080612901816149eb565b915050612816565b50505050565b6000546001600160a01b0316331461295d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c69190614b0b565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a379190614b0b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612a9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abe9190614b0b565b90506001600160a01b038116612c5c57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b309190614b0b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba19190614b0b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2a9190614b0b565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612c85565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915561116c9030906000196130f4565b6000546001600160a01b03163314612d0c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6107d08461ffff1611158015612d2857506107d08361ffff1611155b8015612d3a57506107d08261ffff1611155b8015612d4c57506107d08161ffff1611155b612d985760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c37565b600e805461ffff9586167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000094861694909402939093177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000928516929092027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff169190911766010000000000009190931602919091179055565b6000546001600160a01b03163314612e8e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c54610100900460ff1615612ee65760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c37565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612f20573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612f715760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610c90565b6000546001600160a01b031633146130195760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c805491151577010000000000000000000000000000000000000000000000027fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b601c546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156130d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e899190614b7c565b6001600160a01b03831661314a5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c37565b6001600160a01b0382166131a05760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c37565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661327f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c37565b6001600160a01b0383166132fb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c37565b600082116133715760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c37565b61337b848461371f565b156135d257601c5460ff166133d25760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c37565b6001600160a01b03841660009081526002602052604090205460ff168061341157506001600160a01b03831660009081526002602052604090205460ff165b156134d5576001600160a01b03841660009081526006602052604090205460ff1615801561345857506001600160a01b03831660009081526006602052604090205460ff16155b156134d557601a548211156134d55760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c37565b6010546001600160a01b0384811691161480159061350c57506001600160a01b03831660009081526002602052604090205460ff16155b156135d2576001600160a01b03831660009081526006602052604090205460ff166135d257601b5482613554856001600160a01b031660009081526001602052604090205490565b61355e9190614b99565b11156135d25760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c37565b6001600160a01b03841660009081526002602052604090205460ff16801561361057506001600160a01b038316600090815260086020526040902054155b15613631576001600160a01b03831660009081526008602052604090204290555b6001600160a01b03841660009081526005602052604090205460019060ff168061367357506001600160a01b03841660009081526005602052604090205460ff165b1561367c575060005b6001600160a01b03841660009081526002602052604090205460ff161561370a5760155460ff161580156136b75750601554610100900460ff165b1561370a57426016546017546136cd9190614b99565b101561370a573060009081526001602052604090205460185481106137085760195481106136fa57506019545b613703816137f4565b426017555b505b61371685858584613b7d565b95945050505050565b600080546001600160a01b0384811691161480159061374c57506000546001600160a01b03838116911614155b801561376357506000546001600160a01b03163214155b801561378857506001600160a01b03821660009081526007602052604090205460ff16155b80156137ad57506001600160a01b03831660009081526007602052604090205460ff16155b80156137c457506001600160a01b03821661dead14155b80156137d857506001600160a01b03821615155b80156137ed57506001600160a01b0383163014155b9392505050565b6015805460ff1916600117905560408051608081018252600f5461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000009004909116606082018190526138525750613b70565b3060009081526004602090815260408083206010546001600160a01b03168452909152902054600019146138ab573060009081526004602090815260408083206010546001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138e0576138e06149bc565b6001600160a01b03928316602091820292909201810191909152601054604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613952573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139769190614b0b565b81600181518110613989576139896149bc565b6001600160a01b0392831660209182029290920101526010546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906139e8908690600090869030904290600401614bb1565b600060405180830381600087803b158015613a0257600080fd5b505af1158015613a16573d6000803e3d6000fd5b5050505060004790506000836060015161ffff16846020015161ffff1683613a3e919061499d565b613a48919061494b565b90506000846060015161ffff16856040015161ffff1684613a69919061499d565b613a73919061494b565b90506000613a818284614b99565b613a8b9085614986565b602087015190915061ffff1615613ad8576013546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613ad6573d6000803e3d6000fd5b505b604086015161ffff1615613b22576014546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613b20573d6000803e3d6000fd5b505b855161ffff1615613b69576012546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613b67573d6000803e3d6000fd5b505b5050505050505b506015805460ff19169055565b601c54600090610100900460ff16613c2957613b998585613db9565b601c54610100900460ff16158015613bb65750613bb6858561371f565b15613c295760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610c37565b613c33858561371f565b15613ce657601c546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613ccf575060408051601f3d908101601f19168201909252613ccc91810190614b7c565b60015b613cd857600080fd5b905080613ce457600080fd5b505b6001600160a01b03851660009081526001602052604081208054859290613d0e908490614986565b909155506000905082613d215783613d2c565b613d2c868686613f17565b6001600160a01b038616600090815260016020526040812080549293508392909190613d59908490614b99565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613da591815260200190565b60405180910390a350600195945050505050565b601c54610100900460ff1615613e375760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c37565b613e41828261371f565b158015613e5b57506011546001600160a01b038281169116145b15611dee576001600160a01b038083166000908152600760205260409020805460ff19166001179055601c805461ff001916610100179081905562010000900416613ed057601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6015805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b038316600090815260026020526040812054819060ff1615613f475750600e5461ffff1661405d565b6001600160a01b03841660009081526002602052604090205460ff161561404c576001600160a01b038516600090815260086020526040902054158015613fab5750601c5477010000000000000000000000000000000000000000000000900460ff165b15613fcc576001600160a01b03851660009081526008602052604090204290555b601c5477010000000000000000000000000000000000000000000000900460ff16801561401d5750601d546001600160a01b038616600090815260086020526040902054429161401b91614b99565b115b156140395750600e546601000000000000900461ffff1661405d565b50600e5462010000900461ffff1661405d565b50600e54640100000000900461ffff165b600061271061406c838661499d565b614076919061494b565b3060009081526001602052604081208054929350839290919061409a908490614b99565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36140e98185614986565b9695505050505050565b8280546140ff906147d5565b90600052602060002090601f0160209004810192826141215760008555614167565b82601f1061413a57805160ff1916838001178555614167565b82800160010185558215614167579182015b8281111561416757825182559160200191906001019061414c565b50614173929150614177565b5090565b5b808211156141735760008155600101614178565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156141e4576141e461418c565b604052919050565b600067ffffffffffffffff8211156142065761420661418c565b5060051b60200190565b6001600160a01b0381168114612f2057600080fd5b600082601f83011261423657600080fd5b8135602061424b614246836141ec565b6141bb565b82815260059290921b8401810191818101908684111561426a57600080fd5b8286015b8481101561428e57803561428181614210565b835291830191830161426e565b509695505050505050565b8015158114612f2057600080fd5b600080604083850312156142ba57600080fd5b823567ffffffffffffffff8111156142d157600080fd5b6142dd85828601614225565b92505060208301356142ee81614299565b809150509250929050565b60005b838110156143145781810151838201526020016142fc565b838111156129095750506000910152565b60208152600082518060208401526143448160408501602087016142f9565b601f01601f19169190910160400192915050565b60006020828403121561436a57600080fd5b5035919050565b6000806040838503121561438457600080fd5b823561438f81614210565b946020939093013593505050565b6000806000606084860312156143b257600080fd5b83356143bd81614210565b925060208401356143cd81614210565b929592945050506040919091013590565b600080604083850312156143f157600080fd5b50508035926020909101359150565b600082601f83011261441157600080fd5b81356020614421614246836141ec565b82815260059290921b8401810191818101908684111561444057600080fd5b8286015b8481101561428e5780358352918301918301614444565b6000806040838503121561446e57600080fd5b823567ffffffffffffffff8082111561448657600080fd5b61449286838701614225565b935060208501359150808211156144a857600080fd5b506144b585828601614400565b9150509250929050565b600080600080608085870312156144d557600080fd5b84356144e081614299565b935060208501356144f081614299565b9250604085013561450081614299565b9150606085013561451081614299565b939692955090935050565b60006020828403121561452d57600080fd5b81356137ed81614210565b600080600080600060a0868803121561455057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561458657600080fd5b823561459181614210565b915060208301356142ee81614299565b6000806000606084860312156145b657600080fd5b83356145c181614210565b925060208401356145d181614210565b915060408401356145e181614210565b809150509250925092565b803561ffff811681146145fe57600080fd5b919050565b60008060006060848603121561461857600080fd5b614621846145ec565b925061462f602085016145ec565b915061463d604085016145ec565b90509250925092565b60006020828403121561465857600080fd5b81356137ed81614299565b6000806040838503121561467657600080fd5b823561468181614210565b915060208301356142ee81614210565b6000806000606084860312156146a657600080fd5b833567ffffffffffffffff808211156146be57600080fd5b6146ca87838801614225565b945060208601359150808211156146e057600080fd5b6146ec87838801614400565b9350604086013591508082111561470257600080fd5b5061470f86828701614400565b9150509250925092565b6000806000806080858703121561472f57600080fd5b614738856145ec565b9350614746602086016145ec565b9250614754604086016145ec565b9150614762606086016145ec565b905092959194509250565b600081518084526020808501945080840160005b838110156147a65781516001600160a01b031687529582019590820190600101614781565b509495945050505050565b6040815260006147c4604083018561476d565b905082151560208301529392505050565b600181811c908216806147e957607f821691505b60208210811415614823577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b8085111561489357816000190482111561487957614879614829565b8085161561488657918102915b93841c939080029061485d565b509250929050565b6000826148aa57506001610e89565b816148b757506000610e89565b81600181146148cd57600281146148d7576148f3565b6001915050610e89565b60ff8411156148e8576148e8614829565b50506001821b610e89565b5060208310610133831016604e8410600b8410161715614916575081810a610e89565b6149208383614858565b806000190482111561493457614934614829565b029392505050565b60006137ed60ff84168361489b565b600082614981577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008282101561499857614998614829565b500390565b60008160001904831182151516156149b7576149b7614829565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff811415614a0257614a02614829565b60010192915050565b600082601f830112614a1c57600080fd5b815167ffffffffffffffff811115614a3657614a3661418c565b614a496020601f19601f840116016141bb565b818152846020838601011115614a5e57600080fd5b610f3e8260208301602087016142f9565b600080600080600060a08688031215614a8757600080fd5b855167ffffffffffffffff80821115614a9f57600080fd5b614aab89838a01614a0b565b96506020880151915080821115614ac157600080fd5b50614ace88828901614a0b565b94505060408601519250606086015160ff81168114614aec57600080fd5b6080870151909250614afd81614210565b809150509295509295909350565b600060208284031215614b1d57600080fd5b81516137ed81614210565b600080600060608486031215614b3d57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff808316818516808303821115614b7357614b73614829565b01949350505050565b600060208284031215614b8e57600080fd5b81516137ed81614299565b60008219821115614bac57614bac614829565b500190565b85815284602082015260a060408201526000614bd060a083018661476d565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220e45662662206616e139b412a853b1ab70c841077695de674dd0e6082ab90553264736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c80635cce86cd116101e7578063b3d514fb1161010d578063eafb5a3c116100a0578063f94aa1b41161006f578063f94aa1b414610b37578063fceef4ac14610b8e578063fdb78c0e14610bae578063fe575a8714610bcd57600080fd5b8063eafb5a3c14610ac2578063ecfc021f14610ae2578063ee5d9c2d14610b02578063eec2744e14610b1757600080fd5b8063d131d5ca116100dc578063d131d5ca14610a30578063dd62ed3e14610a46578063e4fcfd1814610a8c578063e8a0e3f914610aa257600080fd5b8063b3d514fb146105d2578063c6a276c2146109b3578063cab5ebea146109d3578063cf847706146109f357600080fd5b80638a63bd9b11610185578063a13ce2c611610154578063a13ce2c61461093d578063a9059cbb14610973578063aa22b17214610993578063b1b08f71146105d257600080fd5b80638a63bd9b146108de5780638a6c01a3146108f35780638a8c523c1461091357806395d89b411461092857600080fd5b8063715018a6116101c1578063715018a61461086b57806375cb1bd11461088057806380c581d1146108a0578063893d20e8146108c057600080fd5b80635cce86cd146107e75780636ebd00781461082057806370a082311461083557600080fd5b80632e8fa821116102cc57806348909c021161026a57806350a8e0161161023957806350a8e01614610768578063533ecf5414610787578063590ffdce146107a75780635c24b074146107c757600080fd5b806348909c02146106c05780634ada218b146106f55780634fb2e45d1461070f5780634fbee1931461072f57600080fd5b806334cd8260116102a657806334cd82601461064057806336fddb04146106605780633f3cf56c14610680578063452ed4f1146106a057600080fd5b80632e8fa821146105e8578063313ce567146105fe57806333251a0b1461062057600080fd5b8063095ea7b311610344578063260039571161031357806326003957146105725780632610eaca1461059257806329dd8798146105b25780632b28fc7a146105d257600080fd5b8063095ea7b3146104f85780630fa604e41461052857806318160ddd1461053d57806323b872dd1461055257600080fd5b8063069d955f11610380578063069d955f1461042b57806306fdde03146104965780630758d924146104b857806309231602146104d857600080fd5b806303fd2a45146103b25780630445b667146103e557806305bbedb61461040957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f157600080fd5b506103fb60185481565b6040519081526020016103dc565b34801561041557600080fd5b506104296104243660046142a7565b610bed565b005b34801561043757600080fd5b50600e546104689061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103dc565b3480156104a257600080fd5b506104ab610cc6565b6040516103dc9190614325565b3480156104c457600080fd5b506010546103c8906001600160a01b031681565b3480156104e457600080fd5b506104296104f3366004614358565b610d58565b34801561050457600080fd5b50610518610513366004614371565b610e78565b60405190151581526020016103dc565b34801561053457600080fd5b506103fb610e8f565b34801561054957600080fd5b506103fb610eb5565b34801561055e57600080fd5b5061051861056d36600461439d565b610ece565b34801561057e57600080fd5b5061042961058d3660046143de565b610f46565b34801561059e57600080fd5b506104296105ad36600461445b565b611051565b3480156105be57600080fd5b506104296105cd3660046144bf565b611171565b3480156105de57600080fd5b506103fb6107d081565b3480156105f457600080fd5b506103fb60195481565b34801561060a57600080fd5b50600c5460405160ff90911681526020016103dc565b34801561062c57600080fd5b5061042961063b36600461451b565b61125a565b34801561064c57600080fd5b5061042961065b366004614538565b6112fa565b34801561066c57600080fd5b5061042961067b366004614573565b61138a565b34801561068c57600080fd5b5061042961069b3660046143de565b611403565b3480156106ac57600080fd5b506011546103c8906001600160a01b031681565b3480156106cc57600080fd5b50601c546105189077010000000000000000000000000000000000000000000000900460ff1681565b34801561070157600080fd5b50601c546105189060ff1681565b34801561071b57600080fd5b5061042961072a36600461451b565b61150e565b34801561073b57600080fd5b5061051861074a36600461451b565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561077457600080fd5b50601c5461051890610100900460ff1681565b34801561079357600080fd5b506104296107a236600461451b565b61171c565b3480156107b357600080fd5b506104296107c2366004614573565b611df2565b3480156107d357600080fd5b506104296107e236600461451b565b611e6b565b3480156107f357600080fd5b5061051861080236600461451b565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561082c57600080fd5b506103fb611f67565b34801561084157600080fd5b506103fb61085036600461451b565b6001600160a01b031660009081526001602052604090205490565b34801561087757600080fd5b50610429611f88565b34801561088c57600080fd5b5061042961089b3660046145a1565b612038565b3480156108ac57600080fd5b506104296108bb366004614573565b6120d2565b3480156108cc57600080fd5b506000546001600160a01b03166103c8565b3480156108ea57600080fd5b50610518612278565b3480156108ff57600080fd5b5061042961090e366004614358565b6122e7565b34801561091f57600080fd5b5061042961234a565b34801561093457600080fd5b506104ab61253a565b34801561094957600080fd5b506103fb61095836600461451b565b6001600160a01b031660009081526008602052604090205490565b34801561097f57600080fd5b5061051861098e366004614371565b612549565b34801561099f57600080fd5b506104296109ae366004614603565b612560565b3480156109bf57600080fd5b506104296109ce36600461451b565b612673565b3480156109df57600080fd5b506104296109ee366004614646565b612713565b3480156109ff57600080fd5b50600f546104689061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610a3c57600080fd5b506103fb601d5481565b348015610a5257600080fd5b506103fb610a61366004614663565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a9857600080fd5b506103fb60165481565b348015610aae57600080fd5b50610429610abd366004614691565b6127b5565b348015610ace57600080fd5b50610429610add36600461451b565b61290f565b348015610aee57600080fd5b50610429610afd366004614719565b612cbe565b348015610b0e57600080fd5b50610429612e40565b348015610b2357600080fd5b50610429610b32366004614573565b612f23565b348015610b4357600080fd5b50601254601354601454610b64926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103dc565b348015610b9a57600080fd5b50610429610ba9366004614646565b612fcb565b348015610bba57600080fd5b5060155461051890610100900460ff1681565b348015610bd957600080fd5b50610518610be836600461451b565b613066565b6000546001600160a01b03163314610c405760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601c546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610c9090859085906004016147b1565b600060405180830381600087803b158015610caa57600080fd5b505af1158015610cbe573d6000803e3d6000fd5b505050505050565b6060600a8054610cd5906147d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d01906147d5565b8015610d4e5780601f10610d2357610100808354040283529160200191610d4e565b820191906000526020600020905b815481529060010190602001808311610d3157829003601f168201915b5050505050905090565b6000546001600160a01b03163314610da65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b610113811015610df85760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610c37565b601c546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610e5d57600080fd5b505af1158015610e71573d6000803e3d6000fd5b5050505050565b6000610e853384846130f4565b5060015b92915050565b600c54600090610ea39060ff16600a61493c565b601b54610eb0919061494b565b905090565b6000600d5460001415610ec757600080fd5b50600d5490565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610f33576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610f2d908490614986565b90915550505b610f3e848484613201565b949350505050565b6000546001600160a01b03163314610f945760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6103e8600d54610fa4919061494b565b8183600d54610fb3919061499d565b610fbd919061494b565b10156110315760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610c37565b8082600d54611040919061499d565b61104a919061494b565b601b555050565b80518251146110a25760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c37565b60005b82518160ff16101561116c57818160ff16815181106110c6576110c66149bc565b60200260200101516110ed336001600160a01b031660009081526001602052604090205490565b10156110f857600080fd5b61115933848360ff1681518110611111576111116149bc565b6020908102919091010151600c5461112d9060ff16600a61493c565b858560ff1681518110611142576111426149bc565b6020026020010151611154919061499d565b613201565b5080611164816149eb565b9150506110a5565b505050565b6000546001600160a01b031633146111bf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561123c57600080fd5b505af1158015611250573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146112a85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610e43565b6000546001600160a01b031633146113485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b8385600d54611357919061499d565b611361919061494b565b601855600d54829061137490859061499d565b61137e919061494b565b60195560165550505050565b6000546001600160a01b031633146113d85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114515760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6103e8600d54611461919061494b565b8183600d54611470919061499d565b61147a919061494b565b10156114ee5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c37565b8082600d546114fd919061499d565b611507919061494b565b601a555050565b6000546001600160a01b0316331461155c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6001600160a01b0381166115d85760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c37565b6001600160a01b03811661dead14156116595760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c37565b60008054611672916001600160a01b0390911690611df2565b61167d816001611df2565b600080546001600160a01b0316815260016020526040902054156116c457600080546001600160a01b031680825260016020526040909120546116c291908390613201565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461176a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c54760100000000000000000000000000000000000000000000900460ff16156117d75760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610c37565b601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b15801561186957600080fd5b505af192505050801561187a575060015b506000601c60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa9250505080156118f157506040513d6000823e601f3d908101601f191682016040526118ee9190810190614a6f565b60015b61193d5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610c37565b845161195090600a9060208801906140f3565b50835161196490600b9060208701906140f3565b506009839055600c805460ff191660ff841690811790915561198790600a61493c565b600954611994919061499d565b600d55601054604080517fc45a015500000000000000000000000000000000000000000000000000000000815290519297506001600160a01b03909116955063c45a015594506004808201945060209350908290030181865afa1580156119ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a239190614b0b565b6001600160a01b031663c9c65396601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa89190614b0b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b309190614b0b565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600260205260409020805460ff19166001179055600d5461271090611b8790600361499d565b611b91919061494b565b601855600d5461271090611ba690600561499d565b611bb0919061494b565b601955600d546103e890611bc590600561499d565b611bcf919061494b565b601a55600d54606490611be390600161499d565b611bed919061494b565b601b55601c80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055600d54600080546001600160a01b03908116825260016020526040808320849055825490519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611c8791815260200190565b60405180910390a3601054611ca99030906001600160a01b03166000196130f4565b600054600d54611cd9916001600160a01b03169061dead90600a90611ccf90600661499d565b611154919061494b565b50600080546001600160a01b03168082526001602052604090912054611d0191903090613201565b506010546001600160a01b031663f305d7194730611d34816001600160a01b031660009081526001602052604090205490565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0392831660048201526024810191909152600060448201819052606482015290851660848201524260a482015260c40160606040518083038185885af1158015611db5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611dda9190614b28565b505050611de561234a565b611dee8161150e565b5050565b6000546001600160a01b03163314611e405760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611eb95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c54610100900460ff1615611ece57600080fd5b6001600160a01b038116301415611f275760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c37565b601c80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600c54600090611f7b9060ff16600a61493c565b601a54610eb0919061494b565b6000546001600160a01b03163314611fd65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b60008054611fef916001600160a01b0390911690611df2565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146120865760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601280546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155601380549385169382169390931790925560148054919093169116179055565b6000546001600160a01b031633146121205760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b80612197576001600160a01b03828116600081815260026020526040808220805460ff19169055601c5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610c90565b600354156121fe576203f480600354426121b19190614986565b116121fe5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610c37565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601c5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610c90565b600080546001600160a01b031633146122c75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6010546122e19030906001600160a01b03166000196130f4565b50600190565b6000546001600160a01b031633146123355760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6201fa4081111561234557600080fd5b601d55565b6000546001600160a01b031633146123985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c5460ff16156123eb5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c37565b601c54610100900460ff166124425760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c37565b601c546201000090046001600160a01b031661248857601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c54601154600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561251957600080fd5b505af192505050801561252a575060015b50601c805460ff19166001179055565b6060600b8054610cd5906147d5565b6000612556338484613201565b5060019392505050565b6000546001600160a01b031633146125ae5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b600f805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416928816929092179290921716179055806126268385614b56565b6126309190614b56565b600f805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b031633146126c15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610e43565b6000546001600160a01b031633146127615760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601580548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906127aa90831515815260200190565b60405180910390a150565b815183511480156127c7575080518251145b6128135760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c37565b60005b83518160ff16101561290957818160ff1681518110612837576128376149bc565b6020026020010151838260ff1681518110612854576128546149bc565b6020026020010151600d54612869919061499d565b612873919061494b565b33600090815260016020526040902054101561288e57600080fd5b6128f633858360ff16815181106128a7576128a76149bc565b6020026020010151848460ff16815181106128c4576128c46149bc565b6020026020010151868560ff16815181106128e1576128e16149bc565b6020026020010151600d54611ccf919061499d565b5080612901816149eb565b915050612816565b50505050565b6000546001600160a01b0316331461295d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c69190614b0b565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a379190614b0b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612a9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abe9190614b0b565b90506001600160a01b038116612c5c57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b309190614b0b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba19190614b0b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2a9190614b0b565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612c85565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915561116c9030906000196130f4565b6000546001600160a01b03163314612d0c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b6107d08461ffff1611158015612d2857506107d08361ffff1611155b8015612d3a57506107d08261ffff1611155b8015612d4c57506107d08161ffff1611155b612d985760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c37565b600e805461ffff9586167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000094861694909402939093177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000928516929092027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff169190911766010000000000009190931602919091179055565b6000546001600160a01b03163314612e8e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c54610100900460ff1615612ee65760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c37565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612f20573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612f715760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610c90565b6000546001600160a01b031633146130195760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c37565b601c805491151577010000000000000000000000000000000000000000000000027fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b601c546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156130d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e899190614b7c565b6001600160a01b03831661314a5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c37565b6001600160a01b0382166131a05760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c37565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661327f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c37565b6001600160a01b0383166132fb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c37565b600082116133715760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c37565b61337b848461371f565b156135d257601c5460ff166133d25760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c37565b6001600160a01b03841660009081526002602052604090205460ff168061341157506001600160a01b03831660009081526002602052604090205460ff165b156134d5576001600160a01b03841660009081526006602052604090205460ff1615801561345857506001600160a01b03831660009081526006602052604090205460ff16155b156134d557601a548211156134d55760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c37565b6010546001600160a01b0384811691161480159061350c57506001600160a01b03831660009081526002602052604090205460ff16155b156135d2576001600160a01b03831660009081526006602052604090205460ff166135d257601b5482613554856001600160a01b031660009081526001602052604090205490565b61355e9190614b99565b11156135d25760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c37565b6001600160a01b03841660009081526002602052604090205460ff16801561361057506001600160a01b038316600090815260086020526040902054155b15613631576001600160a01b03831660009081526008602052604090204290555b6001600160a01b03841660009081526005602052604090205460019060ff168061367357506001600160a01b03841660009081526005602052604090205460ff165b1561367c575060005b6001600160a01b03841660009081526002602052604090205460ff161561370a5760155460ff161580156136b75750601554610100900460ff165b1561370a57426016546017546136cd9190614b99565b101561370a573060009081526001602052604090205460185481106137085760195481106136fa57506019545b613703816137f4565b426017555b505b61371685858584613b7d565b95945050505050565b600080546001600160a01b0384811691161480159061374c57506000546001600160a01b03838116911614155b801561376357506000546001600160a01b03163214155b801561378857506001600160a01b03821660009081526007602052604090205460ff16155b80156137ad57506001600160a01b03831660009081526007602052604090205460ff16155b80156137c457506001600160a01b03821661dead14155b80156137d857506001600160a01b03821615155b80156137ed57506001600160a01b0383163014155b9392505050565b6015805460ff1916600117905560408051608081018252600f5461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000009004909116606082018190526138525750613b70565b3060009081526004602090815260408083206010546001600160a01b03168452909152902054600019146138ab573060009081526004602090815260408083206010546001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138e0576138e06149bc565b6001600160a01b03928316602091820292909201810191909152601054604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613952573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139769190614b0b565b81600181518110613989576139896149bc565b6001600160a01b0392831660209182029290920101526010546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906139e8908690600090869030904290600401614bb1565b600060405180830381600087803b158015613a0257600080fd5b505af1158015613a16573d6000803e3d6000fd5b5050505060004790506000836060015161ffff16846020015161ffff1683613a3e919061499d565b613a48919061494b565b90506000846060015161ffff16856040015161ffff1684613a69919061499d565b613a73919061494b565b90506000613a818284614b99565b613a8b9085614986565b602087015190915061ffff1615613ad8576013546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613ad6573d6000803e3d6000fd5b505b604086015161ffff1615613b22576014546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613b20573d6000803e3d6000fd5b505b855161ffff1615613b69576012546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613b67573d6000803e3d6000fd5b505b5050505050505b506015805460ff19169055565b601c54600090610100900460ff16613c2957613b998585613db9565b601c54610100900460ff16158015613bb65750613bb6858561371f565b15613c295760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610c37565b613c33858561371f565b15613ce657601c546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613ccf575060408051601f3d908101601f19168201909252613ccc91810190614b7c565b60015b613cd857600080fd5b905080613ce457600080fd5b505b6001600160a01b03851660009081526001602052604081208054859290613d0e908490614986565b909155506000905082613d215783613d2c565b613d2c868686613f17565b6001600160a01b038616600090815260016020526040812080549293508392909190613d59908490614b99565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613da591815260200190565b60405180910390a350600195945050505050565b601c54610100900460ff1615613e375760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c37565b613e41828261371f565b158015613e5b57506011546001600160a01b038281169116145b15611dee576001600160a01b038083166000908152600760205260409020805460ff19166001179055601c805461ff001916610100179081905562010000900416613ed057601c80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6015805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b038316600090815260026020526040812054819060ff1615613f475750600e5461ffff1661405d565b6001600160a01b03841660009081526002602052604090205460ff161561404c576001600160a01b038516600090815260086020526040902054158015613fab5750601c5477010000000000000000000000000000000000000000000000900460ff165b15613fcc576001600160a01b03851660009081526008602052604090204290555b601c5477010000000000000000000000000000000000000000000000900460ff16801561401d5750601d546001600160a01b038616600090815260086020526040902054429161401b91614b99565b115b156140395750600e546601000000000000900461ffff1661405d565b50600e5462010000900461ffff1661405d565b50600e54640100000000900461ffff165b600061271061406c838661499d565b614076919061494b565b3060009081526001602052604081208054929350839290919061409a908490614b99565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36140e98185614986565b9695505050505050565b8280546140ff906147d5565b90600052602060002090601f0160209004810192826141215760008555614167565b82601f1061413a57805160ff1916838001178555614167565b82800160010185558215614167579182015b8281111561416757825182559160200191906001019061414c565b50614173929150614177565b5090565b5b808211156141735760008155600101614178565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156141e4576141e461418c565b604052919050565b600067ffffffffffffffff8211156142065761420661418c565b5060051b60200190565b6001600160a01b0381168114612f2057600080fd5b600082601f83011261423657600080fd5b8135602061424b614246836141ec565b6141bb565b82815260059290921b8401810191818101908684111561426a57600080fd5b8286015b8481101561428e57803561428181614210565b835291830191830161426e565b509695505050505050565b8015158114612f2057600080fd5b600080604083850312156142ba57600080fd5b823567ffffffffffffffff8111156142d157600080fd5b6142dd85828601614225565b92505060208301356142ee81614299565b809150509250929050565b60005b838110156143145781810151838201526020016142fc565b838111156129095750506000910152565b60208152600082518060208401526143448160408501602087016142f9565b601f01601f19169190910160400192915050565b60006020828403121561436a57600080fd5b5035919050565b6000806040838503121561438457600080fd5b823561438f81614210565b946020939093013593505050565b6000806000606084860312156143b257600080fd5b83356143bd81614210565b925060208401356143cd81614210565b929592945050506040919091013590565b600080604083850312156143f157600080fd5b50508035926020909101359150565b600082601f83011261441157600080fd5b81356020614421614246836141ec565b82815260059290921b8401810191818101908684111561444057600080fd5b8286015b8481101561428e5780358352918301918301614444565b6000806040838503121561446e57600080fd5b823567ffffffffffffffff8082111561448657600080fd5b61449286838701614225565b935060208501359150808211156144a857600080fd5b506144b585828601614400565b9150509250929050565b600080600080608085870312156144d557600080fd5b84356144e081614299565b935060208501356144f081614299565b9250604085013561450081614299565b9150606085013561451081614299565b939692955090935050565b60006020828403121561452d57600080fd5b81356137ed81614210565b600080600080600060a0868803121561455057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561458657600080fd5b823561459181614210565b915060208301356142ee81614299565b6000806000606084860312156145b657600080fd5b83356145c181614210565b925060208401356145d181614210565b915060408401356145e181614210565b809150509250925092565b803561ffff811681146145fe57600080fd5b919050565b60008060006060848603121561461857600080fd5b614621846145ec565b925061462f602085016145ec565b915061463d604085016145ec565b90509250925092565b60006020828403121561465857600080fd5b81356137ed81614299565b6000806040838503121561467657600080fd5b823561468181614210565b915060208301356142ee81614210565b6000806000606084860312156146a657600080fd5b833567ffffffffffffffff808211156146be57600080fd5b6146ca87838801614225565b945060208601359150808211156146e057600080fd5b6146ec87838801614400565b9350604086013591508082111561470257600080fd5b5061470f86828701614400565b9150509250925092565b6000806000806080858703121561472f57600080fd5b614738856145ec565b9350614746602086016145ec565b9250614754604086016145ec565b9150614762606086016145ec565b905092959194509250565b600081518084526020808501945080840160005b838110156147a65781516001600160a01b031687529582019590820190600101614781565b509495945050505050565b6040815260006147c4604083018561476d565b905082151560208301529392505050565b600181811c908216806147e957607f821691505b60208210811415614823577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b8085111561489357816000190482111561487957614879614829565b8085161561488657918102915b93841c939080029061485d565b509250929050565b6000826148aa57506001610e89565b816148b757506000610e89565b81600181146148cd57600281146148d7576148f3565b6001915050610e89565b60ff8411156148e8576148e8614829565b50506001821b610e89565b5060208310610133831016604e8410600b8410161715614916575081810a610e89565b6149208383614858565b806000190482111561493457614934614829565b029392505050565b60006137ed60ff84168361489b565b600082614981577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008282101561499857614998614829565b500390565b60008160001904831182151516156149b7576149b7614829565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff811415614a0257614a02614829565b60010192915050565b600082601f830112614a1c57600080fd5b815167ffffffffffffffff811115614a3657614a3661418c565b614a496020601f19601f840116016141bb565b818152846020838601011115614a5e57600080fd5b610f3e8260208301602087016142f9565b600080600080600060a08688031215614a8757600080fd5b855167ffffffffffffffff80821115614a9f57600080fd5b614aab89838a01614a0b565b96506020880151915080821115614ac157600080fd5b50614ace88828901614a0b565b94505060408601519250606086015160ff81168114614aec57600080fd5b6080870151909250614afd81614210565b809150509295509295909350565b600060208284031215614b1d57600080fd5b81516137ed81614210565b600080600060608486031215614b3d57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff808316818516808303821115614b7357614b73614829565b01949350505050565b600060208284031215614b8e57600080fd5b81516137ed81614299565b60008219821115614bac57614bac614829565b500190565b85815284602082015260a060408201526000614bd060a083018661476d565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220e45662662206616e139b412a853b1ab70c841077695de674dd0e6082ab90553264736f6c634300080b0033

Deployed Bytecode Sourcemap

6308:22303:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7854:73;;;;;;;;;;;;7885:42;7854:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;7854:73:0;;;;;;;;8495:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;8495:28:0;245:177:1;16934:172:0;;;;;;;;;;-1:-1:-1;16934:172:0;;;;;:::i;:::-;;:::i;:::-;;7301:147;;;;;;;;;;-1:-1:-1;7301:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2882:6:1;2915:15;;;2897:34;;2967:15;;;2962:2;2947:18;;2940:43;3019:15;;;2999:18;;;2992:43;;;;3071:15;;;3066:2;3051:18;;3044:43;2859:3;2844:19;7301:147:0;2649:444:1;13908:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7793:26::-;;;;;;;;;;-1:-1:-1;7793:26:0;;;;-1:-1:-1;;;;;7793:26:0;;;17692:150;;;;;;;;;;-1:-1:-1;17692:150:0;;;;;:::i;:::-;;:::i;14518:159::-;;;;;;;;;;-1:-1:-1;14518:159:0;;;;;:::i;:::-;;:::i;:::-;;;4726:14:1;;4719:22;4701:41;;4689:2;4674:18;14518:159:0;4561:187:1;20143:112:0;;;;;;;;;;;;;:::i;13611:115::-;;;;;;;;;;;;;:::i;15183:306::-;;;;;;;;;;-1:-1:-1;15183:306:0;;;;;:::i;:::-;;:::i;19193:267::-;;;;;;;;;;-1:-1:-1;19193:267:0;;;;;:::i;:::-;;:::i;25928:373::-;;;;;;;;;;-1:-1:-1;25928:373:0;;;;;:::i;:::-;;:::i;17489:195::-;;;;;;;;;;-1:-1:-1;17489:195:0;;;;;:::i;:::-;;:::i;7590:42::-;;;;;;;;;;;;7628:4;7590:42;;8530:25;;;;;;;;;;;;;;;;13732:80;;;;;;;;;;-1:-1:-1;13800:9:0;;13732:80;;13800:9;;;;7528:36:1;;7516:2;7501:18;13732:80:0;7386:184:1;17373:108:0;;;;;;;;;;-1:-1:-1;17373:108:0;;;;;:::i;:::-;;:::i;20263:338::-;;;;;;;;;;-1:-1:-1;20263:338:0;;;;;:::i;:::-;;:::i;19468:140::-;;;;;;;;;;-1:-1:-1;19468:140:0;;;;;:::i;:::-;;:::i;18916:269::-;;;;;;;;;;-1:-1:-1;18916:269:0;;;;;:::i;:::-;;:::i;7826:21::-;;;;;;;;;;-1:-1:-1;7826:21:0;;;;-1:-1:-1;;;;;7826:21:0;;;8791:38;;;;;;;;;;-1:-1:-1;8791:38:0;;;;;;;;;;;8642:34;;;;;;;;;;-1:-1:-1;8642:34:0;;;;;;;;12471:586;;;;;;;;;;-1:-1:-1;12471:586:0;;;;;:::i;:::-;;:::i;19754:125::-;;;;;;;;;;-1:-1:-1;19754:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;19843:28:0;19819:4;19843:28;;;:19;:28;;;;;;;;;19754:125;8683:36;;;;;;;;;;-1:-1:-1;8683:36:0;;;;;;;;;;;10180:1702;;;;;;;;;;-1:-1:-1;10180:1702:0;;;;;:::i;:::-;;:::i;19887:134::-;;;;;;;;;;-1:-1:-1;19887:134:0;;;;;:::i;:::-;;:::i;16553:220::-;;;;;;;;;;-1:-1:-1;16553:220:0;;;;;:::i;:::-;;:::i;19616:130::-;;;;;;;;;;-1:-1:-1;19616:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;19708:30:0;19684:4;19708:30;;;:21;:30;;;;;;;;;19616:130;20029:106;;;;;;;;;;;;;:::i;14220:117::-;;;;;;;;;;-1:-1:-1;14220:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;14313:16:0;14286:7;14313:16;;;:7;:16;;;;;;;14220:117;13065:193;;;;;;;;;;;;;:::i;20609:263::-;;;;;;;;;;-1:-1:-1;20609:263:0;;;;;:::i;:::-;;:::i;16045:500::-;;;;;;;;;;-1:-1:-1;16045:500:0;;;;;:::i;:::-;;:::i;13994:79::-;;;;;;;;;;-1:-1:-1;14046:7:0;14064:6;-1:-1:-1;;;;;14064:6:0;13994:79;;15002:173;;;;;;;;;;;;;:::i;17971:150::-;;;;;;;;;;-1:-1:-1;17971:150:0;;;;;:::i;:::-;;:::i;25301:429::-;;;;;;;;;;;;;:::i;13818:84::-;;;;;;;;;;;;;:::i;21417:113::-;;;;;;;;;;-1:-1:-1;21417:113:0;;;;;:::i;:::-;-1:-1:-1;;;;;21505:17:0;21478:7;21505:17;;;:8;:17;;;;;;;21417:113;14345:165;;;;;;;;;;-1:-1:-1;14345:165:0;;;;;:::i;:::-;;:::i;18660:248::-;;;;;;;;;;-1:-1:-1;18660:248:0;;;;;:::i;:::-;;:::i;17114:118::-;;;;;;;;;;-1:-1:-1;17114:118:0;;;;;:::i;:::-;;:::i;20880:164::-;;;;;;;;;;-1:-1:-1;20880:164:0;;;;;:::i;:::-;;:::i;7457:124::-;;;;;;;;;;-1:-1:-1;7457:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8836:47;;;;;;;;;;;;;;;;14079:133;;;;;;;;;;-1:-1:-1;14079:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;14181:19:0;;;14163:7;14181:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;14079:133;8413:44;;;;;;;;;;;;;;;;26309:482;;;;;;;;;;-1:-1:-1;26309:482:0;;;;;:::i;:::-;;:::i;15497:540::-;;;;;;;;;;-1:-1:-1;15497:540:0;;;;;:::i;:::-;;:::i;18129:523::-;;;;;;;;;;-1:-1:-1;18129:523:0;;;;;:::i;:::-;;:::i;25738:182::-;;;;;;;;;;;;;:::i;16781:145::-;;;;;;;;;;-1:-1:-1;16781:145:0;;;;;:::i;:::-;;:::i;8070:266::-;;;;;;;;;;-1:-1:-1;8070:266:0;;;;;;;;-1:-1:-1;;;;;8070:266:0;;;;;;;;;;;;;;-1:-1:-1;;;;;11928:15:1;;;11910:34;;11980:15;;;11975:2;11960:18;;11953:43;12032:15;;12012:18;;;12005:43;;;;11837:2;11822:18;8070:266:0;11599:455:1;17850:113:0;;;;;;;;;;-1:-1:-1;17850:113:0;;;;;:::i;:::-;;:::i;8367:39::-;;;;;;;;;;-1:-1:-1;8367:39:0;;;;;;;;;;;17240:125;;;;;;;;;;-1:-1:-1;17240:125:0;;;;;:::i;:::-;;:::i;16934:172::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;;;;;;;;;17042:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;17042:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;17080:8;;17090:7;;17042:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16934:172:::0;;:::o;13908:80::-;13956:13;13980:5;13973:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13908:80;:::o;17692:150::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;17776:3:::1;17769;:10;;17761:31;;;::::0;-1:-1:-1;;;17761:31:0;;13885:2:1;17761:31:0::1;::::0;::::1;13867:21:1::0;13924:1;13904:18;;;13897:29;13962:10;13942:18;;;13935:38;13990:18;;17761:31:0::1;13683:331:1::0;17761:31:0::1;17803:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;17803:9:0;;;::::1;-1:-1:-1::0;;;;;17803:9:0::1;::::0;:26:::1;::::0;364:18:1;;17803:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17692:150:::0;:::o;14518:159::-;14593:4;14610:37;14619:10;14631:7;14640:6;14610:8;:37::i;:::-;-1:-1:-1;14665:4:0;14518:159;;;;;:::o;20143:112::-;20237:9;;20188:7;;20233:13;;20237:9;;20233:2;:13;:::i;:::-;20215:14;;:32;;;;:::i;:::-;20208:39;;20143:112;:::o;13611:115::-;13666:7;13681;;13692:1;13681:12;13677:31;;;13697:8;;;13677:31;-1:-1:-1;13716:7:0;;;13611:115::o;15183:306::-;-1:-1:-1;;;;;15304:19:0;;15283:4;15304:19;;;:11;:19;;;;;;;;15324:10;15304:31;;;;;;;;-1:-1:-1;;15304:52:0;15300:126;;-1:-1:-1;;;;;15373:19:0;;;;;;:11;:19;;;;;;;;15393:10;15373:31;;;;;;;:41;;15408:6;;15373:19;:41;;15408:6;;15373:41;:::i;:::-;;;;-1:-1:-1;;15300:126:0;15445:36;15455:6;15463:9;15474:6;15445:9;:36::i;:::-;15438:43;15183:306;-1:-1:-1;;;;15183:306:0:o;19193:267::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;19335:4:::1;19325:7;;:14;;;;:::i;:::-;19313:7;19302;19292;;:17;;;;:::i;:::-;19291:29;;;;:::i;:::-;:49;;19283:112;;;::::0;-1:-1:-1;;;19283:112:0;;16555:2:1;19283:112:0::1;::::0;::::1;16537:21:1::0;16594:2;16574:18;;;16567:30;16633:34;16613:18;;;16606:62;16704:20;16684:18;;;16677:48;16742:19;;19283:112:0::1;16353:414:1::0;19283:112:0::1;19445:7;19434;19424;;:17;;;;:::i;:::-;19423:29;;;;:::i;:::-;19406:14;:46:::0;-1:-1:-1;;19193:267:0:o;25928:373::-;26053:7;:14;26034:8;:15;:33;26026:67;;;;-1:-1:-1;;;26026:67:0;;16974:2:1;26026:67:0;;;16956:21:1;17013:2;16993:18;;;16986:30;17052:23;17032:18;;;17025:51;17093:18;;26026:67:0;16772:345:1;26026:67:0;26109:7;26104:190;26126:8;:15;26122:1;:19;;;26104:190;;;26196:7;26204:1;26196:10;;;;;;;;;;:::i;:::-;;;;;;;26171:21;26181:10;-1:-1:-1;;;;;14313:16:0;14286:7;14313:16;;;:7;:16;;;;;;;14220:117;26171:21;:35;;26163:44;;;;;;26222:60;26232:10;26244:8;26253:1;26244:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;26272:9;;26268:13;;26272:9;;26268:2;:13;:::i;:::-;26257:7;26265:1;26257:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;26222:9;:60::i;:::-;-1:-1:-1;26143:3:0;;;;:::i;:::-;;;;26104:190;;;;25928:373;;:::o;17489:195::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;17611:9:::1;::::0;:65:::1;::::0;;;;17723:14:1;;17716:22;17611:65:0::1;::::0;::::1;17698:41:1::0;17782:14;;17775:22;17755:18;;;17748:50;17841:14;;17834:22;17814:18;;;17807:50;17900:14;;17893:22;17873:18;;;17866:50;17611:9:0;;;::::1;-1:-1:-1::0;;;;;17611:9:0::1;::::0;:24:::1;::::0;17670:19:1;;17611:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17489:195:::0;;;;:::o;17373:108::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;17442:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;17442:31:0::1;::::0;::::1;160:74:1::0;17442:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;17442:31:0::1;14:226:1::0;20263:338:0;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;20477:16:::1;20457;20447:7;;:26;;;;:::i;:::-;20446:47;;;;:::i;:::-;20430:13;:63:::0;20518:7:::1;::::0;20545:13;;20518:23:::1;::::0;20528:13;;20518:23:::1;:::i;:::-;20517:41;;;;:::i;:::-;20504:10;:54:::0;20569:17:::1;:24:::0;-1:-1:-1;;;;20263:338:0:o;19468:140::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;-1:-1:-1;;;;;19560:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;19560:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19468:140::o;18916:269::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;19057:4:::1;19047:7;;:14;;;;:::i;:::-;19035:7;19024;19014;;:17;;;;:::i;:::-;19013:29;;;;:::i;:::-;:49;;19005:117;;;::::0;-1:-1:-1;;;19005:117:0;;18129:2:1;19005:117:0::1;::::0;::::1;18111:21:1::0;18168:2;18148:18;;;18141:30;18207:34;18187:18;;;18180:62;18278:25;18258:18;;;18251:53;18321:19;;19005:117:0::1;17927:419:1::0;19005:117:0::1;19170:7;19159;19149;;:17;;;;:::i;:::-;19148:29;;;;:::i;:::-;19133:12;:44:::0;-1:-1:-1;;18916:269:0:o;12471:586::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;-1:-1:-1;;;;;12548:22:0;::::1;12540:96;;;::::0;-1:-1:-1;;;12540:96:0;;18553:2:1;12540:96:0::1;::::0;::::1;18535:21:1::0;18592:2;18572:18;;;18565:30;18631:34;18611:18;;;18604:62;18702:31;18682:18;;;18675:59;18751:19;;12540:96:0::1;18351:425:1::0;12540:96:0::1;-1:-1:-1::0;;;;;12655:16:0;::::1;7885:42;12655:16;;12647:90;;;::::0;-1:-1:-1;;;12647:90:0;;18553:2:1;12647:90:0::1;::::0;::::1;18535:21:1::0;18592:2;18572:18;;;18565:30;18631:34;18611:18;;;18604:62;18702:31;18682:18;;;18675:59;18751:19;;12647:90:0::1;18351:425:1::0;12647:90:0::1;12768:6;::::0;;12748:34:::1;::::0;-1:-1:-1;;;;;12768:6:0;;::::1;::::0;12748:19:::1;:34::i;:::-;12793:35;12813:8;12823:4;12793:19;:35::i;:::-;12872:1;12862:6:::0;;-1:-1:-1;;;;;12862:6:0::1;14313:16:::0;;:7;:16;;;;;;12852:21;12849:99:::1;;12900:6;::::0;;-1:-1:-1;;;;;12900:6:0::1;14313:16:::0;;;:7;:16;;;;;;;12890:46:::1;::::0;12900:6;12908:8;;26222:9;:60::i;12890:46::-:1;;12849:99;12968:6;:17:::0;;-1:-1:-1;;12968:17:0::1;-1:-1:-1::0;;;;;12968:17:0;::::1;::::0;;::::1;::::0;;13001:38:::1;::::0;12968:17;;;;13001:38:::1;::::0;12968:6;13001:38:::1;12471:586:::0;:::o;10180:1702::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;10266:19:::1;::::0;;;::::1;;;10265:20;10257:34;;;::::0;-1:-1:-1;;;10257:34:0;;18983:2:1;10257:34:0::1;::::0;::::1;18965:21:1::0;19022:1;19002:18;;;18995:29;19060:3;19040:18;;;19033:31;19081:18;;10257:34:0::1;18781:324:1::0;10257:34:0::1;10302:9;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;10302:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;10350::::1;::::0;;;;10377:4:::1;10350:33;::::0;::::1;160:74:1::0;10350:9:0;::::1;;::::0;:18:::1;::::0;133::1;;10350:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;10346:49:::0;10405:16:::1;10436:9;;;;;;;;;-1:-1:-1::0;;;;;10436:9:0::1;-1:-1:-1::0;;;;;10436:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;10436:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;10432:460;;10869:11;::::0;-1:-1:-1;;;10869:11:0;;20787:2:1;10869:11:0::1;::::0;::::1;20769:21:1::0;20826:1;20806:18;;;20799:29;20864:3;20844:18;;;20837:31;20885:18;;10869:11:0::1;20585:324:1::0;10432:460:0::1;10605:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10636:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10671:14:0::1;:35:::0;;;10721:9:::1;:24:::0;;-1:-1:-1;;10721:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;10787:13:::1;::::0;:2:::1;:13;:::i;:::-;10770:14;;:30;;;;:::i;:::-;10760:7;:40:::0;10922:9:::1;::::0;:19:::1;::::0;;;;;;;10826:9;;-1:-1:-1;;;;;;10922:9:0;;::::1;::::0;-1:-1:-1;10922:17:0::1;::::0;-1:-1:-1;10922:19:0::1;::::0;;::::1;::::0;-1:-1:-1;10922:19:0::1;::::0;-1:-1:-1;10922:19:0;;;;;;:9;:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10911:42:0::1;;10954:9;;;;;;;;;-1:-1:-1::0;;;;;10954:9:0::1;-1:-1:-1::0;;;;;10954:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10911:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21423:15:1;;;10911:75:0::1;::::0;::::1;21405:34:1::0;10980:4:0::1;21455:18:1::0;;;21448:43;21317:18;;10911:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10902:6;:84:::0;;-1:-1:-1;;10902:84:0::1;-1:-1:-1::0;;;;;10902:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;10997:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;10997:22:0::1;-1:-1:-1::0;10997:22:0::1;::::0;;11047:7:::1;::::0;11062:5:::1;::::0;11047:11:::1;::::0;11057:1:::1;11047:11;:::i;:::-;11046:21;;;;:::i;:::-;11030:13;:37:::0;11092:7:::1;::::0;11107:5:::1;::::0;11092:11:::1;::::0;11102:1:::1;11092:11;:::i;:::-;11091:21;;;;:::i;:::-;11078:10;:34:::0;11139:7:::1;::::0;11154:4:::1;::::0;11139:11:::1;::::0;11149:1:::1;11139:11;:::i;:::-;11138:20;;;;:::i;:::-;11123:12;:35:::0;11187:7:::1;::::0;11202:3:::1;::::0;11187:11:::1;::::0;11197:1:::1;11187:11;:::i;:::-;11186:19;;;;:::i;:::-;11169:14;:36:::0;11216:19:::1;:26:::0;;;::::1;::::0;::::1;::::0;;11276:7:::1;::::0;11216:26;11266:6;;-1:-1:-1;;;;;11266:6:0;;::::1;11258:15:::0;;11238:4:::1;11258:15;::::0;;;;;:25;;;11320:6;;11299:37;;11320:6;::::1;::::0;11299:37:::1;::::0;::::1;::::0;391:25:1;;379:2;364:18;;245:177;11299:37:0::1;;;;;;;;11381:9;::::0;11349:62:::1;::::0;11366:4:::1;::::0;-1:-1:-1;;;;;11381:9:0::1;-1:-1:-1::0;;11349:8:0::1;:62::i;:::-;11432:6;::::0;11447:7:::1;::::0;11422:43:::1;::::0;-1:-1:-1;;;;;11432:6:0::1;::::0;7885:42:::1;::::0;11462:2:::1;::::0;11447:11:::1;::::0;11457:1:::1;11447:11;:::i;:::-;11446:18;;;;:::i;11422:43::-;-1:-1:-1::0;11486:6:0::1;::::0;;-1:-1:-1;;;;;11486:6:0::1;14313:16:::0;;;:7;:16;;;;;;;11476:51:::1;::::0;11486:6;11502:4:::1;::::0;26222:9;:60::i;11476:51::-:1;-1:-1:-1::0;11540:9:0::1;::::0;-1:-1:-1;;;;;11540:9:0::1;:25;11573:21;11618:4;11638:24;11618:4:::0;-1:-1:-1;;;;;14313:16:0;14286:7;14313:16;;;:7;:16;;;;;;;14220:117;11638:24:::1;11540:272;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21884:15:1;;;11540:272:0::1;::::0;::::1;21866:34:1::0;21916:18;;;21909:34;;;;11677:1:0::1;21959:18:1::0;;;21952:34;;;22002:18;;;21995:34;22066:15;;;22045:19;;;22038:44;11786:15:0::1;22098:19:1::0;;;22091:35;21777:19;;11540:272:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;11825:15;:13;:15::i;:::-;11851:23;11865:8;11851:13;:23::i;:::-;10246:1636;10180:1702:::0;:::o;19887:134::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;-1:-1:-1;;;;;19975:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;19975:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19887:134::o;16553:220::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;16637:16:::1;::::0;::::1;::::0;::::1;;;16636:17;16628:26;;;::::0;::::1;;-1:-1:-1::0;;;;;16673:28:0;::::1;16696:4;16673:28;;16665:55;;;::::0;-1:-1:-1;;;16665:55:0;;22650:2:1;16665:55:0::1;::::0;::::1;22632:21:1::0;22689:2;22669:18;;;22662:30;22728:16;22708:18;;;22701:44;22762:18;;16665:55:0::1;22448:338:1::0;16665:55:0::1;16731:9;:34:::0;;-1:-1:-1;;;;;16731:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;16553:220::o;20029:106::-;20117:9;;20070:7;;20113:13;;20117:9;;20113:2;:13;:::i;:::-;20097:12;;:30;;;;:::i;13065:193::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;13150:6:::1;::::0;;13130:34:::1;::::0;-1:-1:-1;;;;;13150:6:0;;::::1;::::0;13130:19:::1;:34::i;:::-;13192:1;13175:19:::0;;-1:-1:-1;;13175:19:0::1;::::0;;13210:40:::1;::::0;13192:1;;13210:40:::1;::::0;13192:1;;13210:40:::1;13065:193::o:0;20609:263::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;20732:11:::1;:42:::0;;-1:-1:-1;;;;;20732:42:0;;::::1;-1:-1:-1::0;;20732:42:0;;::::1;;::::0;;;20785:19;:38;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;20834:15;:30;;;;;::::1;::::0;::::1;;::::0;;20609:263::o;16045:500::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;16126:16;16122:416:::1;;-1:-1:-1::0;;;;;16159:13:0;;::::1;16175:5;16159:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;16159:21:0::1;::::0;;16195:9:::1;::::0;:32;;;;;::::1;::::0;::::1;22959:74:1::0;;;;23049:18;;;23042:50;;;;16195:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;22932:18:1;;16195:32:0::1;22791:307:1::0;16122:416:0::1;16264:17;::::0;:22;16260:136:::1;;16353:6;16333:17;;16315:15;:35;;;;:::i;:::-;:44;16307:73;;;::::0;-1:-1:-1;;;16307:73:0;;23305:2:1;16307:73:0::1;::::0;::::1;23287:21:1::0;23344:2;23324:18;;;23317:30;23383:18;23363;;;23356:46;23419:18;;16307:73:0::1;23103:340:1::0;16307:73:0::1;-1:-1:-1::0;;;;;16410:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;16410:20:0::1;16426:4;16410:20:::0;;::::1;::::0;;;16465:15:::1;16445:17;:35:::0;16495:9:::1;::::0;:31;;;;;::::1;::::0;::::1;22959:74:1::0;;;;23049:18;;;23042:50;16495:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;22932:18:1;;16495:31:0::1;22791:307:1::0;15002:173:0;15066:4;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;15115:9:::1;::::0;15083:62:::1;::::0;15100:4:::1;::::0;-1:-1:-1;;;;;15115:9:0::1;-1:-1:-1::0;;15083:8:0::1;:62::i;:::-;-1:-1:-1::0;15163:4:0::1;15002:173:::0;:::o;17971:150::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;18065:8:::1;18057:4;:16;;18049:25;;;::::0;::::1;;18085:21;:28:::0;17971:150::o;25301:429::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;25363:14:::1;::::0;::::1;;25362:15;25354:52;;;::::0;-1:-1:-1;;;25354:52:0;;23650:2:1;25354:52:0::1;::::0;::::1;23632:21:1::0;23689:2;23669:18;;;23662:30;23728:26;23708:18;;;23701:54;23772:18;;25354:52:0::1;23448:348:1::0;25354:52:0::1;25425:16;::::0;::::1;::::0;::::1;;;25417:53;;;::::0;-1:-1:-1;;;25417:53:0;;24003:2:1;25417:53:0::1;::::0;::::1;23985:21:1::0;24042:2;24022:18;;;24015:30;24081:26;24061:18;;;24054:54;24125:18;;25417:53:0::1;23801:348:1::0;25417:53:0::1;25492:9;::::0;;;::::1;-1:-1:-1::0;;;;;25492:9:0::1;25481:99;;25532:9;:36:::0;;;::::1;25562:4;25532:36:::0;::::1;;::::0;;25481:99:::1;25594:9;::::0;25614:6:::1;::::0;25669:9:::1;::::0;25594:85:::1;::::0;;;;-1:-1:-1;;;;;25614:6:0;;::::1;25594:85;::::0;::::1;24377:74:1::0;24499:10;25629:12:0::1;24487:23:1::0;24467:18;;;24460:51;24559:18;25651:15:0::1;24547:31:1::0;24527:18;;;24520:59;25669:9:0::1;::::0;;::::1;24595:18:1::0;;;24588:45;25594:9:0;;;::::1;;::::0;:19:::1;::::0;24349::1;;25594:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;25590:101:::0;25701:14:::1;:21:::0;;-1:-1:-1;;25701:21:0::1;25718:4;25701:21;::::0;;25301:429::o;13818:84::-;13868:13;13892:7;13885:14;;;;;:::i;14345:165::-;14423:4;14440:40;14450:10;14462:9;14473:6;14440:9;:40::i;:::-;-1:-1:-1;14498:4:0;;14345:165;-1:-1:-1;;;14345:165:0:o;18660:248::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;18755:7:::1;:29:::0;;::::1;18831:17:::0;;::::1;::::0;::::1;::::0;18795:25;;::::1;::::0;::::1;::::0;;;;18755:29;;::::1;18795:25:::0;;;;;;;::::1;18831:17;;::::0;;18845:3;18875:19:::1;18813:7:::0;18775:9;18875:19:::1;:::i;:::-;:25;;;;:::i;:::-;18859:7;:41:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;18660:248:0:o;17114:118::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;17188:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;17188:36:0::1;::::0;::::1;160:74:1::0;17188:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;17188:36:0::1;14:226:1::0;20880:164:0;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;20956:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;20956:29:0;;::::1;;::::0;;21001:35:::1;::::0;::::1;::::0;::::1;::::0;20978:7;4726:14:1;4719:22;4701:41;;4689:2;4674:18;;4561:187;21001:35:0::1;;;;;;;;20880:164:::0;:::o;26309:482::-;26464:8;:15;26445:8;:15;:34;:72;;;;;26502:8;:15;26483:8;:15;:34;26445:72;26437:106;;;;-1:-1:-1;;;26437:106:0;;16974:2:1;26437:106:0;;;16956:21:1;17013:2;16993:18;;;16986:30;17052:23;17032:18;;;17025:51;17093:18;;26437:106:0;16772:345:1;26437:106:0;26559:7;26554:230;26576:8;:15;26572:1;:19;;;26554:230;;;26672:8;26681:1;26672:11;;;;;;;;;;:::i;:::-;;;;;;;26657:8;26666:1;26657:11;;;;;;;;;;:::i;:::-;;;;;;;26647:7;;:21;;;;:::i;:::-;26646:37;;;;:::i;:::-;26631:10;14286:7;14313:16;;;:7;:16;;;;;;26621:62;;26613:71;;;;;;26699:73;26709:10;26721:8;26730:1;26721:11;;;;;;;;;;:::i;:::-;;;;;;;26760:8;26769:1;26760:11;;;;;;;;;;:::i;:::-;;;;;;;26745:8;26754:1;26745:11;;;;;;;;;;:::i;:::-;;;;;;;26735:7;;:21;;;;:::i;26699:73::-;-1:-1:-1;26593:3:0;;;;:::i;:::-;;;;26554:230;;;;26309:482;;;:::o;15497:540::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;15566:20:::1;15599:9;15566:43;;15620:16;15650:10;-1:-1:-1::0;;;;;15650:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15639:40:0::1;;15688:4;15695:10;-1:-1:-1::0;;;;;15695:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15639:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21423:15:1;;;15639:74:0::1;::::0;::::1;21405:34:1::0;21475:15;;21455:18;;;21448:43;21317:18;;15639:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15620:93:::0;-1:-1:-1;;;;;;15728:22:0;::::1;15724:200;;15787:10;-1:-1:-1::0;;;;;15787:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15776:43:0::1;;15828:4;15835:10;-1:-1:-1::0;;;;;15835:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15776:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21423:15:1;;;15776:77:0::1;::::0;::::1;21405:34:1::0;21475:15;;21455:18;;;21448:43;21317:18;;15776:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15767:6;:86:::0;;-1:-1:-1;;15767:86:0::1;-1:-1:-1::0;;;;;15767:86:0;;;::::1;::::0;;;::::1;::::0;;15724:200:::1;;;15895:6;:17:::0;;-1:-1:-1;;15895:17:0::1;-1:-1:-1::0;;;;;15895:17:0;::::1;;::::0;;15724:200:::1;15934:9;:22:::0;;-1:-1:-1;;15934:22:0::1;-1:-1:-1::0;;;;;15934:22:0;::::1;::::0;;::::1;::::0;;;15967:62:::1;::::0;15984:4:::1;::::0;-1:-1:-1;;15967:8:0::1;:62::i;18129:523::-:0;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;7628:4:::1;18259:6;:21;;;;:65;;;;;7678:4;18301:7;:23;;;;18259:65;:117;;;;;7732:4;18345:11;:31;;;;18259:117;:168;;;;;7678:4;18397:14;:30;;;;18259:168;18251:221;;;::::0;-1:-1:-1;;;18251:221:0;;25075:2:1;18251:221:0::1;::::0;::::1;25057:21:1::0;25114:2;25094:18;;;25087:30;25153:25;25133:18;;;25126:53;25196:18;;18251:221:0::1;24873:347:1::0;18251:221:0::1;18483:9;:25:::0;;::::1;::::0;;::::1;18519:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;18603:41:::0;;18557:35;;;::::1;::::0;;;::::1;18603:41:::0;;;;;;;;;;::::1;;::::0;;;::::1;::::0;;18129:523::o;25738:182::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;25805:16:::1;::::0;::::1;::::0;::::1;;;25804:17;25796:58;;;::::0;-1:-1:-1;;;25796:58:0;;25427:2:1;25796:58:0::1;::::0;::::1;25409:21:1::0;25466:2;25446:18;;;25439:30;25505;25485:18;;;25478:58;25553:18;;25796:58:0::1;25225:352:1::0;25796:58:0::1;25873:6;::::0;;25865:47:::1;::::0;-1:-1:-1;;;;;25873:6:0;;::::1;::::0;25890:21:::1;25865:47:::0;::::1;;;::::0;25890:21;;25865:47;25873:6;25865:47;25890:21;25873:6;25865:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25738:182::o:0;16781:145::-;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;16871:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;22977:55:1;;;16871:47:0::1;::::0;::::1;22959:74:1::0;23076:14;;23069:22;23049:18;;;23042:50;16871:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;22932:18:1;;16871:47:0::1;22791:307:1::0;17850:113:0;9249:6;;-1:-1:-1;;;;;9249:6:0;9259:10;9249:20;9241:50;;;;-1:-1:-1;;;9241:50:0;;12261:2:1;9241:50:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;9241:50:0;12059:341:1;9241:50:0;17926:19:::1;:29:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;17850:113::o;17240:125::-;17325:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;17325:32:0;;;160:74:1;17301:4:0;;17325:9;;;;;:23;;133:18:1;;17325:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14685:309::-;-1:-1:-1;;;;;14779:20:0;;14771:52;;;;-1:-1:-1;;;14771:52:0;;26034:2:1;14771:52:0;;;26016:21:1;26073:2;26053:18;;;26046:30;26112:21;26092:18;;;26085:49;26151:18;;14771:52:0;25832:343:1;14771:52:0;-1:-1:-1;;;;;14842:21:0;;14834:53;;;;-1:-1:-1;;;14834:53:0;;26034:2:1;14834:53:0;;;26016:21:1;26073:2;26053:18;;;26046:30;26112:21;26092:18;;;26085:49;26151:18;;14834:53:0;25832:343:1;14834:53:0;-1:-1:-1;;;;;14900:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;14953:33;;391:25:1;;;14953:33:0;;364:18:1;14953:33:0;;;;;;;14685:309;;;:::o;21538:1927::-;21617:4;-1:-1:-1;;;;;21642:18:0;;21634:68;;;;-1:-1:-1;;;21634:68:0;;26382:2:1;21634:68:0;;;26364:21:1;26421:2;26401:18;;;26394:30;26460:34;26440:18;;;26433:62;26531:7;26511:18;;;26504:35;26556:19;;21634:68:0;26180:401:1;21634:68:0;-1:-1:-1;;;;;21721:16:0;;21713:64;;;;-1:-1:-1;;;21713:64:0;;26788:2:1;21713:64:0;;;26770:21:1;26827:2;26807:18;;;26800:30;26866:34;26846:18;;;26839:62;26937:5;26917:18;;;26910:33;26960:19;;21713:64:0;26586:399:1;21713:64:0;21805:1;21796:6;:10;21788:64;;;;-1:-1:-1;;;21788:64:0;;27192:2:1;21788:64:0;;;27174:21:1;27231:2;27211:18;;;27204:30;27270:34;27250:18;;;27243:62;27341:11;27321:18;;;27314:39;27370:19;;21788:64:0;26990:405:1;21788:64:0;21866:20;21877:4;21883:2;21866:10;:20::i;:::-;21863:665;;;21907:14;;;;21903:89;;21942:34;;-1:-1:-1;;;21942:34:0;;27602:2:1;21942:34:0;;;27584:21:1;27641:2;27621:18;;;27614:30;27680:26;27660:18;;;27653:54;27724:18;;21942:34:0;27400:348:1;21903:89:0;-1:-1:-1;;;;;22009:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;22026:11:0;;;;;;:7;:11;;;;;;;;22009:28;22006:248;;;-1:-1:-1;;;;;22062:27:0;;;;;;:21;:27;;;;;;;;22061:28;:58;;;;-1:-1:-1;;;;;;22094:25:0;;;;;;:21;:25;;;;;;;;22093:26;22061:58;22057:182;;;22162:12;;22152:6;:22;;22144:75;;;;-1:-1:-1;;;22144:75:0;;27955:2:1;22144:75:0;;;27937:21:1;27994:2;27974:18;;;27967:30;28033:34;28013:18;;;28006:62;28104:10;28084:18;;;28077:38;28132:19;;22144:75:0;27753:404:1;22144:75:0;22285:9;;-1:-1:-1;;;;;22271:24:0;;;22285:9;;22271:24;;;;:40;;-1:-1:-1;;;;;;22300:11:0;;;;;;:7;:11;;;;;;;;22299:12;22271:40;22268:249;;;-1:-1:-1;;;;;22337:25:0;;;;;;:21;:25;;;;;;;;22332:170;;22421:14;;22411:6;22395:13;22405:2;-1:-1:-1;;;;;14313:16:0;14286:7;14313:16;;;:7;:16;;;;;;;14220:117;22395:13;:22;;;;:::i;:::-;:40;;22387:95;;;;-1:-1:-1;;;22387:95:0;;28497:2:1;22387:95:0;;;28479:21:1;28536:2;28516:18;;;28509:30;28575:34;28555:18;;;28548:62;28646:12;28626:18;;;28619:40;28676:19;;22387:95:0;28295:406:1;22387:95:0;-1:-1:-1;;;;;22544:13:0;;;;;;:7;:13;;;;;;;;:34;;;;-1:-1:-1;;;;;;22561:12:0;;;;;;:8;:12;;;;;;:17;22544:34;22540:97;;;-1:-1:-1;;;;;22595:12:0;;;;;;:8;:12;;;;;22610:15;22595:30;;22540:97;-1:-1:-1;;;;;22682:25:0;;22649:12;22682:25;;;:19;:25;;;;;;22664:4;;22682:25;;;:52;;-1:-1:-1;;;;;;22711:23:0;;;;;;:19;:23;;;;;;;;22682:52;22679:98;;;-1:-1:-1;22760:5:0;22679:98;-1:-1:-1;;;;;22793:11:0;;;;;;:7;:11;;;;;;;;22789:606;;;22826:6;;;;22825:7;:47;;;;-1:-1:-1;22853:19:0;;;;;;;22825:47;22821:557;;;22942:15;22922:17;;22911:8;;:28;;;;:::i;:::-;:46;22907:456;;;23031:4;22982:28;14313:16;;;:7;:16;;;;;;23088:13;;23064:37;;23060:284;;23157:10;;23133:20;:34;23130:77;;-1:-1:-1;23194:10:0;;23130:77;23233:34;23246:20;23233:12;:34::i;:::-;23305:15;23294:8;:26;23060:284;22959:404;22907:456;23413:44;23431:4;23437:2;23441:6;23449:7;23413:17;:44::i;:::-;23406:51;21538:1927;-1:-1:-1;;;;;21538:1927:0:o;21052:357::-;21120:4;21152:6;;-1:-1:-1;;;;;21144:14:0;;;21152:6;;21144:14;;;;:43;;-1:-1:-1;21181:6:0;;-1:-1:-1;;;;;21175:12:0;;;21181:6;;21175:12;;21144:43;:79;;;;-1:-1:-1;21217:6:0;;-1:-1:-1;;;;;21217:6:0;21204:9;:19;;21144:79;:118;;;;-1:-1:-1;;;;;;21241:21:0;;;;;;:17;:21;;;;;;;;21240:22;21144:118;:159;;;;-1:-1:-1;;;;;;21280:23:0;;;;;;:17;:23;;;;;;;;21279:24;21144:159;:186;;;;-1:-1:-1;;;;;;21320:10:0;;7885:42;21320:10;;21144:186;:219;;;;-1:-1:-1;;;;;;21347:16:0;;;;21144:219;:257;;;;-1:-1:-1;;;;;;21380:21:0;;21396:4;21380:21;;21144:257;21137:264;21052:357;-1:-1:-1;;;21052:357:0:o;23473:1304::-;9143:6;:13;;-1:-1:-1;;9143:13:0;9152:4;9143:13;;;23556:30:::1;::::0;;::::1;::::0;::::1;::::0;;23579:7:::1;23556:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;23597:56:::1;;23635:7;;;23597:56;23688:4;23668:26;::::0;;;:11:::1;:26;::::0;;;;;;;23703:9:::1;::::0;-1:-1:-1;;;;;23703:9:0::1;23668:46:::0;;;;;;;;-1:-1:-1;;23668:67:0::1;23665:165;;23772:4;23752:26;::::0;;;:11:::1;:26;::::0;;;;;;;23787:9:::1;::::0;-1:-1:-1;;;;;23787:9:0::1;23752:46:::0;;;;;;;-1:-1:-1;;23752:66:0;;23665:165:::1;23874:16;::::0;;23888:1:::1;23874:16:::0;;;;;::::1;::::0;;23850:21:::1;::::0;23874:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23874:16:0::1;23850:40;;23919:4;23901;23906:1;23901:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23901:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23945:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;23901:7;;23945:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23935:4;23940:1;23935:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23935:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23974:9:::1;::::0;:199:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:199:::1;::::0;24049:20;;23974:9:::1;::::0;24100:4;;24127::::1;::::0;24147:15:::1;::::0;23974:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24186:18;24207:21;24186:42;;24239:22;24296:6;:12;;;24264:44;;24278:6;:14;;;24265:27;;:10;:27;;;;:::i;:::-;24264:44;;;;:::i;:::-;24239:69;;24319:18;24368:6;:12;;;24340:40;;24354:6;:10;;;24341:23;;:10;:23;;;;:::i;:::-;24340:40;;;;:::i;:::-;24319:61:::0;-1:-1:-1;24391:24:0::1;24432:27;24319:61:::0;24432:14;:27:::1;:::i;:::-;24418:42;::::0;:10;:42:::1;:::i;:::-;24475:14;::::0;::::1;::::0;24391:69;;-1:-1:-1;24475:18:0::1;;::::0;24471:95:::1;;24510:19:::0;;:44:::1;::::0;-1:-1:-1;;;;;24510:19:0;;::::1;::::0;:44;::::1;;;::::0;24539:14;;24510:19:::1;:44:::0;:19;:44;24539:14;24510:19;:44;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24471:95;24580:10;::::0;::::1;::::0;:14:::1;;::::0;24576:83:::1;;24611:15:::0;;:36:::1;::::0;-1:-1:-1;;;;;24611:15:0;;::::1;::::0;:36;::::1;;;::::0;24636:10;;24611:15:::1;:36:::0;:15;:36;24636:10;24611:15;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24576:83;24673:16:::0;;:20:::1;;::::0;24669:101:::1;;24710:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;24710:21:0;;::::1;::::0;:48;::::1;;;::::0;24741:16;;24710:21:::1;:48:::0;:21;:48;24741:16;24710:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24669:101;23545:1232;;;;;;9167:1;-1:-1:-1::0;9179:6:0;:14;;-1:-1:-1;;9179:14:0;;;23473:1304::o;26799:905::-;26921:16;;26899:4;;26921:16;;;;;26916:221;;26954:28;26973:4;26979:2;26954:18;:28::i;:::-;27002:16;;;;;;;27001:17;:41;;;;;27022:20;27033:4;27039:2;27022:10;:20::i;:::-;26997:129;;;27063:47;;-1:-1:-1;;;27063:47:0;;29518:2:1;27063:47:0;;;29500:21:1;29557:2;29537:18;;;29530:30;29596:34;29576:18;;;29569:62;29667:7;29647:18;;;29640:35;29692:19;;27063:47:0;29316:401:1;26997:129:0;27153:20;27164:4;27170:2;27153:10;:20::i;:::-;27149:314;;;27221:9;;:37;;;;;-1:-1:-1;;;;;30003:15:1;;;27221:37:0;;;29985:34:1;30055:15;;;30035:18;;;30028:43;30087:18;;;30080:34;;;27190:12:0;;27221:9;;;;;:19;;29897:18:1;;27221:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;27221:37:0;;;;;;;;-1:-1:-1;;27221:37:0;;;;;;;;;;;;:::i;:::-;;;27217:163;;27356:8;;;27217:163;27309:5;-1:-1:-1;27400:7:0;27396:56;;27428:8;;;27396:56;27175:288;27149:314;-1:-1:-1;;;;;27475:13:0;;;;;;:7;:13;;;;;:23;;27492:6;;27475:13;:23;;27492:6;;27475:23;:::i;:::-;;;;-1:-1:-1;27509:22:0;;-1:-1:-1;27535:7:0;27534:48;;27576:6;27534:48;;;27546:27;27556:4;27562:2;27566:6;27546:9;:27::i;:::-;-1:-1:-1;;;;;27593:11:0;;;;;;:7;:11;;;;;:29;;27509:73;;-1:-1:-1;27509:73:0;;27593:11;;;:29;;27509:73;;27593:29;:::i;:::-;;;;;;;;27655:2;-1:-1:-1;;;;;27640:34:0;27649:4;-1:-1:-1;;;;;27640:34:0;;27659:14;27640:34;;;;391:25:1;;379:2;364:18;;245:177;27640:34:0;;;;;;;;-1:-1:-1;27692:4:0;;26799:905;-1:-1:-1;;;;;26799:905:0:o;24785:508::-;24867:16;;;;;;;24866:17;24858:65;;;;-1:-1:-1;;;24858:65:0;;30327:2:1;24858:65:0;;;30309:21:1;30366:2;30346:18;;;30339:30;30405:34;30385:18;;;30378:62;30476:5;30456:18;;;30449:33;30499:19;;24858:65:0;30125:399:1;24858:65:0;24939:20;24950:4;24956:2;24939:10;:20::i;:::-;24938:21;:37;;;;-1:-1:-1;24969:6:0;;-1:-1:-1;;;;;24963:12:0;;;24969:6;;24963:12;24938:37;24934:352;;;-1:-1:-1;;;;;24992:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;24992:30:0;25018:4;24992:30;;;25037:16;:23;;-1:-1:-1;;25037:23:0;24992:30;25037:23;;;;;25086:9;;;;25075:107;;25130:9;:36;;;;25160:4;25130:36;;;;;25075:107;25196:19;:26;;-1:-1:-1;;25196:26:0;;;;;25242:32;;-1:-1:-1;4701:41:1;;25242:32:0;;4689:2:1;4674:18;25242:32:0;;;;;;;24785:508;;:::o;27712:896::-;-1:-1:-1;;;;;27844:13:0;;27791:7;27844:13;;;:7;:13;;;;;;27791:7;;27844:13;;27840:548;;;-1:-1:-1;27887:9:0;:16;;;27840:548;;;-1:-1:-1;;;;;27925:11:0;;;;;;:7;:11;;;;;;;;27921:467;;;-1:-1:-1;;;;;27957:14:0;;;;;;:8;:14;;;;;;:19;:42;;;;-1:-1:-1;27980:19:0;;;;;;;27957:42;27953:115;;;-1:-1:-1;;;;;28020:14:0;;;;;;:8;:14;;;;;28037:15;28020:32;;27953:115;28086:19;;;;;;;:79;;;;-1:-1:-1;28126:21:0;;-1:-1:-1;;;;;28109:14:0;;;;;;:8;:14;;;;;;28150:15;;28109:38;;;:::i;:::-;:56;28086:79;28082:228;;;-1:-1:-1;28199:9:0;:24;;;;;;27921:467;;28082:228;-1:-1:-1;28277:9:0;:17;;;;;;27921:467;;;-1:-1:-1;28355:9:0;:21;;;;;;27921:467;28400:17;7779:5;28420:19;28429:10;28420:6;:19;:::i;:::-;:38;;;;:::i;:::-;28487:4;28471:22;;;;:7;:22;;;;;:35;;28400:58;;-1:-1:-1;28400:58:0;;28471:22;;;:35;;28400:58;;28471:35;:::i;:::-;;;;-1:-1:-1;;28522:40:0;;391:25:1;;;28545:4:0;;-1:-1:-1;;;;;28522:40:0;;;;;379:2:1;364:18;28522:40:0;;;;;;;28582:18;28591:9;28582:6;:18;:::i;:::-;28575:25;27712:896;-1:-1:-1;;;;;;27712:896:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;427:184:1;479:77;476:1;469:88;576:4;573:1;566:15;600:4;597:1;590:15;616:334;687:2;681:9;743:2;733:13;;-1:-1:-1;;729:86:1;717:99;;846:18;831:34;;867:22;;;828:62;825:88;;;893:18;;:::i;:::-;929:2;922:22;616:334;;-1:-1:-1;616:334:1:o;955:183::-;1015:4;1048:18;1040:6;1037:30;1034:56;;;1070:18;;:::i;:::-;-1:-1:-1;1115:1:1;1111:14;1127:4;1107:25;;955:183::o;1143:154::-;-1:-1:-1;;;;;1222:5:1;1218:54;1211:5;1208:65;1198:93;;1287:1;1284;1277:12;1302:737;1356:5;1409:3;1402:4;1394:6;1390:17;1386:27;1376:55;;1427:1;1424;1417:12;1376:55;1463:6;1450:20;1489:4;1513:60;1529:43;1569:2;1529:43;:::i;:::-;1513:60;:::i;:::-;1607:15;;;1693:1;1689:10;;;;1677:23;;1673:32;;;1638:12;;;;1717:15;;;1714:35;;;1745:1;1742;1735:12;1714:35;1781:2;1773:6;1769:15;1793:217;1809:6;1804:3;1801:15;1793:217;;;1889:3;1876:17;1906:31;1931:5;1906:31;:::i;:::-;1950:18;;1988:12;;;;1826;;1793:217;;;-1:-1:-1;2028:5:1;1302:737;-1:-1:-1;;;;;;1302:737:1:o;2044:118::-;2130:5;2123:13;2116:21;2109:5;2106:32;2096:60;;2152:1;2149;2142:12;2167:477;2257:6;2265;2318:2;2306:9;2297:7;2293:23;2289:32;2286:52;;;2334:1;2331;2324:12;2286:52;2374:9;2361:23;2407:18;2399:6;2396:30;2393:50;;;2439:1;2436;2429:12;2393:50;2462:61;2515:7;2506:6;2495:9;2491:22;2462:61;:::i;:::-;2452:71;;;2573:2;2562:9;2558:18;2545:32;2586:28;2608:5;2586:28;:::i;:::-;2633:5;2623:15;;;2167:477;;;;;:::o;3098:258::-;3170:1;3180:113;3194:6;3191:1;3188:13;3180:113;;;3270:11;;;3264:18;3251:11;;;3244:39;3216:2;3209:10;3180:113;;;3311:6;3308:1;3305:13;3302:48;;;-1:-1:-1;;3346:1:1;3328:16;;3321:27;3098:258::o;3361:442::-;3510:2;3499:9;3492:21;3473:4;3542:6;3536:13;3585:6;3580:2;3569:9;3565:18;3558:34;3601:66;3660:6;3655:2;3644:9;3640:18;3635:2;3627:6;3623:15;3601:66;:::i;:::-;3719:2;3707:15;-1:-1:-1;;3703:88:1;3688:104;;;;3794:2;3684:113;;3361:442;-1:-1:-1;;3361:442:1:o;4056:180::-;4115:6;4168:2;4156:9;4147:7;4143:23;4139:32;4136:52;;;4184:1;4181;4174:12;4136:52;-1:-1:-1;4207:23:1;;4056:180;-1:-1:-1;4056:180:1:o;4241:315::-;4309:6;4317;4370:2;4358:9;4349:7;4345:23;4341:32;4338:52;;;4386:1;4383;4376:12;4338:52;4425:9;4412:23;4444:31;4469:5;4444:31;:::i;:::-;4494:5;4546:2;4531:18;;;;4518:32;;-1:-1:-1;;;4241:315:1:o;4753:456::-;4830:6;4838;4846;4899:2;4887:9;4878:7;4874:23;4870:32;4867:52;;;4915:1;4912;4905:12;4867:52;4954:9;4941:23;4973:31;4998:5;4973:31;:::i;:::-;5023:5;-1:-1:-1;5080:2:1;5065:18;;5052:32;5093:33;5052:32;5093:33;:::i;:::-;4753:456;;5145:7;;-1:-1:-1;;;5199:2:1;5184:18;;;;5171:32;;4753:456::o;5214:248::-;5282:6;5290;5343:2;5331:9;5322:7;5318:23;5314:32;5311:52;;;5359:1;5356;5349:12;5311:52;-1:-1:-1;;5382:23:1;;;5452:2;5437:18;;;5424:32;;-1:-1:-1;5214:248:1:o;5467:662::-;5521:5;5574:3;5567:4;5559:6;5555:17;5551:27;5541:55;;5592:1;5589;5582:12;5541:55;5628:6;5615:20;5654:4;5678:60;5694:43;5734:2;5694:43;:::i;5678:60::-;5772:15;;;5858:1;5854:10;;;;5842:23;;5838:32;;;5803:12;;;;5882:15;;;5879:35;;;5910:1;5907;5900:12;5879:35;5946:2;5938:6;5934:15;5958:142;5974:6;5969:3;5966:15;5958:142;;;6040:17;;6028:30;;6078:12;;;;5991;;5958:142;;6134:595;6252:6;6260;6313:2;6301:9;6292:7;6288:23;6284:32;6281:52;;;6329:1;6326;6319:12;6281:52;6369:9;6356:23;6398:18;6439:2;6431:6;6428:14;6425:34;;;6455:1;6452;6445:12;6425:34;6478:61;6531:7;6522:6;6511:9;6507:22;6478:61;:::i;:::-;6468:71;;6592:2;6581:9;6577:18;6564:32;6548:48;;6621:2;6611:8;6608:16;6605:36;;;6637:1;6634;6627:12;6605:36;;6660:63;6715:7;6704:8;6693:9;6689:24;6660:63;:::i;:::-;6650:73;;;6134:595;;;;;:::o;6734:647::-;6808:6;6816;6824;6832;6885:3;6873:9;6864:7;6860:23;6856:33;6853:53;;;6902:1;6899;6892:12;6853:53;6941:9;6928:23;6960:28;6982:5;6960:28;:::i;:::-;7007:5;-1:-1:-1;7064:2:1;7049:18;;7036:32;7077:30;7036:32;7077:30;:::i;:::-;7126:7;-1:-1:-1;7185:2:1;7170:18;;7157:32;7198:30;7157:32;7198:30;:::i;:::-;7247:7;-1:-1:-1;7306:2:1;7291:18;;7278:32;7319:30;7278:32;7319:30;:::i;:::-;6734:647;;;;-1:-1:-1;6734:647:1;;-1:-1:-1;;6734:647:1:o;7575:247::-;7634:6;7687:2;7675:9;7666:7;7662:23;7658:32;7655:52;;;7703:1;7700;7693:12;7655:52;7742:9;7729:23;7761:31;7786:5;7761:31;:::i;7827:454::-;7922:6;7930;7938;7946;7954;8007:3;7995:9;7986:7;7982:23;7978:33;7975:53;;;8024:1;8021;8014:12;7975:53;-1:-1:-1;;8047:23:1;;;8117:2;8102:18;;8089:32;;-1:-1:-1;8168:2:1;8153:18;;8140:32;;8219:2;8204:18;;8191:32;;-1:-1:-1;8270:3:1;8255:19;8242:33;;-1:-1:-1;7827:454:1;-1:-1:-1;7827:454:1:o;8286:382::-;8351:6;8359;8412:2;8400:9;8391:7;8387:23;8383:32;8380:52;;;8428:1;8425;8418:12;8380:52;8467:9;8454:23;8486:31;8511:5;8486:31;:::i;:::-;8536:5;-1:-1:-1;8593:2:1;8578:18;;8565:32;8606:30;8565:32;8606:30;:::i;8673:553::-;8774:6;8782;8790;8843:2;8831:9;8822:7;8818:23;8814:32;8811:52;;;8859:1;8856;8849:12;8811:52;8898:9;8885:23;8917:31;8942:5;8917:31;:::i;:::-;8967:5;-1:-1:-1;9024:2:1;9009:18;;8996:32;9037:33;8996:32;9037:33;:::i;:::-;9089:7;-1:-1:-1;9148:2:1;9133:18;;9120:32;9161:33;9120:32;9161:33;:::i;:::-;9213:7;9203:17;;;8673:553;;;;;:::o;9231:159::-;9298:20;;9358:6;9347:18;;9337:29;;9327:57;;9380:1;9377;9370:12;9327:57;9231:159;;;:::o;9395:328::-;9469:6;9477;9485;9538:2;9526:9;9517:7;9513:23;9509:32;9506:52;;;9554:1;9551;9544:12;9506:52;9577:28;9595:9;9577:28;:::i;:::-;9567:38;;9624:37;9657:2;9646:9;9642:18;9624:37;:::i;:::-;9614:47;;9680:37;9713:2;9702:9;9698:18;9680:37;:::i;:::-;9670:47;;9395:328;;;;;:::o;9728:241::-;9784:6;9837:2;9825:9;9816:7;9812:23;9808:32;9805:52;;;9853:1;9850;9843:12;9805:52;9892:9;9879:23;9911:28;9933:5;9911:28;:::i;9974:388::-;10042:6;10050;10103:2;10091:9;10082:7;10078:23;10074:32;10071:52;;;10119:1;10116;10109:12;10071:52;10158:9;10145:23;10177:31;10202:5;10177:31;:::i;:::-;10227:5;-1:-1:-1;10284:2:1;10269:18;;10256:32;10297:33;10256:32;10297:33;:::i;10367:821::-;10519:6;10527;10535;10588:2;10576:9;10567:7;10563:23;10559:32;10556:52;;;10604:1;10601;10594:12;10556:52;10644:9;10631:23;10673:18;10714:2;10706:6;10703:14;10700:34;;;10730:1;10727;10720:12;10700:34;10753:61;10806:7;10797:6;10786:9;10782:22;10753:61;:::i;:::-;10743:71;;10867:2;10856:9;10852:18;10839:32;10823:48;;10896:2;10886:8;10883:16;10880:36;;;10912:1;10909;10902:12;10880:36;10935:63;10990:7;10979:8;10968:9;10964:24;10935:63;:::i;:::-;10925:73;;11051:2;11040:9;11036:18;11023:32;11007:48;;11080:2;11070:8;11067:16;11064:36;;;11096:1;11093;11086:12;11064:36;;11119:63;11174:7;11163:8;11152:9;11148:24;11119:63;:::i;:::-;11109:73;;;10367:821;;;;;:::o;11193:401::-;11275:6;11283;11291;11299;11352:3;11340:9;11331:7;11327:23;11323:33;11320:53;;;11369:1;11366;11359:12;11320:53;11392:28;11410:9;11392:28;:::i;:::-;11382:38;;11439:37;11472:2;11461:9;11457:18;11439:37;:::i;:::-;11429:47;;11495:37;11528:2;11517:9;11513:18;11495:37;:::i;:::-;11485:47;;11551:37;11584:2;11573:9;11569:18;11551:37;:::i;:::-;11541:47;;11193:401;;;;;;;:::o;12405:484::-;12458:3;12496:5;12490:12;12523:6;12518:3;12511:19;12549:4;12578:2;12573:3;12569:12;12562:19;;12615:2;12608:5;12604:14;12636:1;12646:218;12660:6;12657:1;12654:13;12646:218;;;12725:13;;-1:-1:-1;;;;;12721:62:1;12709:75;;12804:12;;;;12839:15;;;;12682:1;12675:9;12646:218;;;-1:-1:-1;12880:3:1;;12405:484;-1:-1:-1;;;;;12405:484:1:o;12894:342::-;13095:2;13084:9;13077:21;13058:4;13115:56;13167:2;13156:9;13152:18;13144:6;13115:56;:::i;:::-;13107:64;;13221:6;13214:14;13207:22;13202:2;13191:9;13187:18;13180:50;12894:342;;;;;:::o;13241:437::-;13320:1;13316:12;;;;13363;;;13384:61;;13438:4;13430:6;13426:17;13416:27;;13384:61;13491:2;13483:6;13480:14;13460:18;13457:38;13454:218;;;13528:77;13525:1;13518:88;13629:4;13626:1;13619:15;13657:4;13654:1;13647:15;13454:218;;13241:437;;;:::o;14019:184::-;14071:77;14068:1;14061:88;14168:4;14165:1;14158:15;14192:4;14189:1;14182:15;14208:482;14297:1;14340:5;14297:1;14354:330;14375:7;14365:8;14362:21;14354:330;;;14494:4;-1:-1:-1;;14422:77:1;14416:4;14413:87;14410:113;;;14503:18;;:::i;:::-;14553:7;14543:8;14539:22;14536:55;;;14573:16;;;;14536:55;14652:22;;;;14612:15;;;;14354:330;;;14358:3;14208:482;;;;;:::o;14695:866::-;14744:5;14774:8;14764:80;;-1:-1:-1;14815:1:1;14829:5;;14764:80;14863:4;14853:76;;-1:-1:-1;14900:1:1;14914:5;;14853:76;14945:4;14963:1;14958:59;;;;15031:1;15026:130;;;;14938:218;;14958:59;14988:1;14979:10;;15002:5;;;15026:130;15063:3;15053:8;15050:17;15047:43;;;15070:18;;:::i;:::-;-1:-1:-1;;15126:1:1;15112:16;;15141:5;;14938:218;;15240:2;15230:8;15227:16;15221:3;15215:4;15212:13;15208:36;15202:2;15192:8;15189:16;15184:2;15178:4;15175:12;15171:35;15168:77;15165:159;;;-1:-1:-1;15277:19:1;;;15309:5;;15165:159;15356:34;15381:8;15375:4;15356:34;:::i;:::-;15486:6;-1:-1:-1;;15414:79:1;15405:7;15402:92;15399:118;;;15497:18;;:::i;:::-;15535:20;;14695:866;-1:-1:-1;;;14695:866:1:o;15566:140::-;15624:5;15653:47;15694:4;15684:8;15680:19;15674:4;15653:47;:::i;15711:274::-;15751:1;15777;15767:189;;15812:77;15809:1;15802:88;15913:4;15910:1;15903:15;15941:4;15938:1;15931:15;15767:189;-1:-1:-1;15970:9:1;;15711:274::o;15990:125::-;16030:4;16058:1;16055;16052:8;16049:34;;;16063:18;;:::i;:::-;-1:-1:-1;16100:9:1;;15990:125::o;16120:228::-;16160:7;16286:1;-1:-1:-1;;16214:74:1;16211:1;16208:81;16203:1;16196:9;16189:17;16185:105;16182:131;;;16293:18;;:::i;:::-;-1:-1:-1;16333:9:1;;16120:228::o;17122:184::-;17174:77;17171:1;17164:88;17271:4;17268:1;17261:15;17295:4;17292:1;17285:15;17311:175;17348:3;17392:4;17385:5;17381:16;17421:4;17412:7;17409:17;17406:43;;;17429:18;;:::i;:::-;17478:1;17465:15;;17311:175;-1:-1:-1;;17311:175:1:o;19110:556::-;19164:5;19217:3;19210:4;19202:6;19198:17;19194:27;19184:55;;19235:1;19232;19225:12;19184:55;19264:6;19258:13;19290:18;19286:2;19283:26;19280:52;;;19312:18;;:::i;:::-;19356:114;19464:4;-1:-1:-1;;19388:4:1;19384:2;19380:13;19376:86;19372:97;19356:114;:::i;:::-;19495:2;19486:7;19479:19;19541:3;19534:4;19529:2;19521:6;19517:15;19513:26;19510:35;19507:55;;;19558:1;19555;19548:12;19507:55;19571:64;19632:2;19625:4;19616:7;19612:18;19605:4;19597:6;19593:17;19571:64;:::i;19671:909::-;19795:6;19803;19811;19819;19827;19880:3;19868:9;19859:7;19855:23;19851:33;19848:53;;;19897:1;19894;19887:12;19848:53;19930:9;19924:16;19959:18;20000:2;19992:6;19989:14;19986:34;;;20016:1;20013;20006:12;19986:34;20039:61;20092:7;20083:6;20072:9;20068:22;20039:61;:::i;:::-;20029:71;;20146:2;20135:9;20131:18;20125:25;20109:41;;20175:2;20165:8;20162:16;20159:36;;;20191:1;20188;20181:12;20159:36;;20214:63;20269:7;20258:8;20247:9;20243:24;20214:63;:::i;:::-;20204:73;;;20317:2;20306:9;20302:18;20296:25;20286:35;;20364:2;20353:9;20349:18;20343:25;20408:4;20401:5;20397:16;20390:5;20387:27;20377:55;;20428:1;20425;20418:12;20377:55;20501:3;20486:19;;20480:26;20451:5;;-1:-1:-1;20515:33:1;20480:26;20515:33;:::i;:::-;20567:7;20557:17;;;19671:909;;;;;;;;:::o;20914:251::-;20984:6;21037:2;21025:9;21016:7;21012:23;21008:32;21005:52;;;21053:1;21050;21043:12;21005:52;21085:9;21079:16;21104:31;21129:5;21104:31;:::i;22137:306::-;22225:6;22233;22241;22294:2;22282:9;22273:7;22269:23;22265:32;22262:52;;;22310:1;22307;22300:12;22262:52;22339:9;22333:16;22323:26;;22389:2;22378:9;22374:18;22368:25;22358:35;;22433:2;22422:9;22418:18;22412:25;22402:35;;22137:306;;;;;:::o;24644:224::-;24683:3;24711:6;24744:2;24741:1;24737:10;24774:2;24771:1;24767:10;24805:3;24801:2;24797:12;24792:3;24789:21;24786:47;;;24813:18;;:::i;:::-;24849:13;;24644:224;-1:-1:-1;;;;24644:224:1:o;25582:245::-;25649:6;25702:2;25690:9;25681:7;25677:23;25673:32;25670:52;;;25718:1;25715;25708:12;25670:52;25750:9;25744:16;25769:28;25791:5;25769:28;:::i;28162:128::-;28202:3;28233:1;28229:6;28226:1;28223:13;28220:39;;;28239:18;;:::i;:::-;-1:-1:-1;28275:9:1;;28162:128::o;28706:605::-;29005:6;28994:9;28987:25;29048:6;29043:2;29032:9;29028:18;29021:34;29091:3;29086:2;29075:9;29071:18;29064:31;28968:4;29112:57;29164:3;29153:9;29149:19;29141:6;29112:57;:::i;:::-;-1:-1:-1;;;;;29205:55:1;;;;29200:2;29185:18;;29178:83;-1:-1:-1;29292:3:1;29277:19;29270:35;29104:65;28706:605;-1:-1:-1;;;28706:605:1:o

Swarm Source

ipfs://e45662662206616e139b412a853b1ab70c841077695de674dd0e6082ab905532
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.