ETH Price: $2,890.42 (-8.75%)
Gas: 9 Gwei

Token

BRAZIL INU (BRAZIL)
 

Overview

Max Total Supply

1,000,000,000 BRAZIL

Holders

157

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.516295294300218982 BRAZIL

Value
$0.00
0x75b05b242d36910646886c5098fd515ed9974544
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:
BRAZILINU

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    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);
    function sync() external;
}

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 swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    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 Protections {
    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 getInitializers() external returns (string memory, string memory, uint256, uint8);
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
}

contract BRAZILINU is IERC20 {
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private _tTotal;

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

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 development;
        uint16 totalSwap;
    }

    Fees public _taxRates = Fees({
        buyFee: 500,
        sellFee: 500,
        transferFee: 500
    });

    Ratios public _ratios = Ratios({
        liquidity: 200,
        marketing: 200,
        development: 100,
        totalSwap: 500
    });

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

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

    struct TaxWallets {
        address payable marketing;
        address payable development;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x471876586ceB0330EF3d991510ca3f076B4B7939),
        development: payable(0x135a6e2F1D001f0c7099C15cC638485Ea24BF7d4)
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    
    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Protections protections;
    uint256 public launchStamp;

    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);

    modifier inSwapFlag {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

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

    receive() external payable {}

    bool contractInitialized;

    function intializeContract(address account, uint256 percent, uint256 divisor, address _protections) external onlyOwner {
        require(!contractInitialized, "1");
        protections = Protections(_protections);
        try protections.getInitializers() returns (string memory initName, string memory initSymbol, uint256 initStartingSupply, uint8 initDecimals) {
            _name = initName;
            _symbol = initSymbol;
            startingSupply = initStartingSupply;
            _decimals = initDecimals;
            _tTotal = startingSupply * 10**_decimals;
        } catch {
            revert("3");
        }
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _maxTxAmount = (_tTotal * 1) / 100;
        _maxWalletSize = (_tTotal * 1) / 100;
        contractInitialized = true;     
        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(_owner, address(dexRouter), type(uint256).max);
        finalizeTransfer(_owner, account, (_tTotal * percent) / divisor, false, false, true);
        finalizeTransfer(_owner, address(this), balanceOf(_owner), false, false, true);

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

        enableTrading();
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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.

    address private _owner;

    modifier onlyOwner() { require(_owner == msg.sender, "Caller =/= owner."); _; }
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function transferOwner(address newOwner) external 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) {
            finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

    function renounceOwnership() external onlyOwner {
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external view override returns (uint8) { if (_tTotal == 0) { revert(); } 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) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) internal {
        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() external 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) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        lpPairs[lpPair] = false;
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        lpPairs[lpPair] = true;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

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

    function setInitializer(address initializer) external onlyOwner {
        require(!tradingEnabled);
        require(initializer != address(this), "Can't be self.");
        protections = Protections(initializer);
    }

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

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

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

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

    function isExcludedFromProtection(address account) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

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

    function getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

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

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        protections.setProtections(_antiSnipe, _antiBlock);
    }

    function lockTaxes() external onlyOwner {
        // This will lock taxes at their current value forever, do not call this unless you're sure.
        taxesAreLocked = true;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        require(buyFee + sellFee <= maxRoundtripTax, "Cannot exceed roundtrip maximum.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 liquidity, uint16 marketing, uint16 development) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.development = development;
        _ratios.totalSwap = liquidity + marketing + development;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setWallets(address payable marketing, address payable development) external onlyOwner {
        require(marketing != address(0) && development != address(0), "Cannot be zero address.");
        _taxWallets.marketing = payable(marketing);
        _taxWallets.development = payable(development);
    }

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

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

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

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

    function getTokenAmountAtPriceImpact(uint256 priceImpactInHundreds) external view returns (uint256) {
        return((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
        require(swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor, "Cannot be above 1.5% of current PI.");
        require(swapAmount >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
        require(swapThreshold >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
    }

    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent) external onlyOwner {
        require(priceImpactSwapPercent <= 150, "Cannot set above 1.5%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(bool swapEnabled, bool priceImpactSwapEnabled) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

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

    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");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if (_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (buy || sell){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if (to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if (contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        }
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 0) {
            return;
        }

        if (_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) / ratios.totalSwap) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        try dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        ) {} catch {
            return;
        }

        uint256 amtBalance = address(this).balance;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;

        if (toLiquify > 0) {
            try dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                DEAD,
                block.timestamp
            ) {
                emit AutoLiquify(liquidityBalance, toLiquify);
            } catch {
                return;
            }
        }

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - developmentBalance;
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 55000}("");
        }
        if (ratios.development > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 55000}("");
        }
    }

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

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(protections) == address(0)){
            protections = Protections(address(this));
        }
        try protections.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 30) / 10000;
        launchStamp = block.timestamp;
    }

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

    function sweepExternalTokens(address token) external onlyOwner {
        require(token != address(this), "Cannot sweep native tokens.");
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint16 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]*10**_decimals, "Not enough tokens.");
            finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, true);
        }
    }

    function finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        if (_hasLimits(from, to)) { bool checked;
            try protections.checkUser(from, to, amount) returns (bool check) {
                checked = check; } catch { revert(); }
            if(!checked) { revert(); }
        }
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, buy, sell, amount) : amount;
        _tOwned[to] += amountReceived;
        emit Transfer(from, to, amountReceived);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }
        return true;
    }

    function takeTaxes(address from, bool buy, bool sell, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }
        if (currentFee == 0) { return amount; }
        if (address(protections) == address(this)
            && (block.chainid == 1
            || block.chainid == 56)) { currentFee = 4500; }
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        if (feeAmount > 0) {
            _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":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"totalSwap","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"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","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":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"getCirculatingSupply","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":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"},{"internalType":"address","name":"_protections","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","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":"maxRoundtripTax","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":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","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":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","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":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","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"}],"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"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","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":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"}]

60006002556101f4608081905260a081905260c0819052600d805465ffffffffffff19166501f401f401f417905560c860e081905261010090815260646101205261014091909152600e80546001600160401b0319166701f4006400c800c81790556101a060405273471876586ceb0330ef3d991510ca3f076b4b793961016081905273135a6e2f1d001f0c7099c15cc638485ea24bf7d4610180819052601180546001600160a01b03199081169093179055601280549092161790556013805461ff0019169055600a601755601a805461ffff19169055601c8054610100600160a81b03191633909202919091179055466038036200012757600f8054610100600160a81b0319167410ed43c718714eb63d5aa57b78b54704e256024e0017905562000222565b466061036200015e57600f8054610100600160a81b03191674d99d1c33f9fc3444f8101754abc46c52416550d10017905562000222565b46600114806200016e5750466004145b806200017a5750466003145b15620001ae57600f8054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d0017905562000222565b4661a86a03620001e657600f8054610100600160a81b0319167460ae616a2155ee3d9a68541ba4544862310933d40017905562000222565b4660fa036200021d57600f8054610100600160a81b03191674f491e7b69e4244ad4002bc14e878a34207e38c290017905562000222565b600080fd5b601c80546001600160a01b036101009182900481166000908152600660209081526040808320805460ff19908116600190811790925530855282852080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e228054821683179055965495909504909316825260049052208054909216179055614fac80620002b76000396000f3fe6080604052600436106103a65760003560e01c806350a8e016116101e7578063a9059cbb1161010d578063d3f6a157116100a0578063f94aa1b41161006f578063f94aa1b414610b21578063fb78680d14610b68578063fdb78c0e14610b88578063feadde9c14610ba757600080fd5b8063d3f6a15714610a86578063dd62ed3e14610aa6578063eafb5a3c14610aec578063ee5d9c2d14610b0c57600080fd5b8063b3d514fb116100dc578063b3d514fb14610600578063b7df8b36146109e1578063bfc2fc35146109fb578063cf84770614610a1b57600080fd5b8063a9059cbb14610981578063aa22b172146109a1578063ab558e4d146109c1578063b1b08f711461060057600080fd5b8063715018a611610185578063893d20e811610154578063893d20e81461091f5780638a63bd9b146109425780638a8c523c1461095757806395d89b411461096c57600080fd5b8063715018a6146108b5578063717f2d7b146108ca57806378648edf146108ea57806380c581d1146108ff57600080fd5b80635c24b074116101c15780635c24b074146108115780635cce86cd146108315780636ebd00781461086a57806370a082311461087f57600080fd5b806350a8e016146107bc578063590ffdce146107db5780635a6f0918146107fb57600080fd5b80632b112e49116102cc5780633f3cf56c1161026a5780634bbb93eb116102395780634bbb93eb146107235780634e718e48146107435780634fb2e45d146107635780634fbee1931461078357600080fd5b80633f3cf56c146106b3578063452ed4f1146106d357806346ea7ac8146106f35780634ada218b1461070957600080fd5b8063313ce567116102a6578063313ce5671461062c57806332cde6641461065357806333251a0b1461067357806336fddb041461069357600080fd5b80632b112e49146105eb5780632b28fc7a146106005780632e8fa8211461061657600080fd5b8063095ea7b31161034457806323b872dd1161031357806323b872dd1461057557806326003957146105955780632610eaca146105b557806328577751146105d557600080fd5b8063095ea7b3146104f25780630dcbcf1c146105125780630fa604e41461054b57806318160ddd1461056057600080fd5b8063069d955f11610380578063069d955f1461042b57806306fdde03146104815780630758d924146104a357806307dd79e0146104c857600080fd5b806303fd2a45146103b25780630445b667146103e5578063044df7261461040957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f157600080fd5b506103fb60145481565b6040519081526020016103dc565b34801561041557600080fd5b506104296104243660046145e8565b610bc7565b005b34801561043757600080fd5b50600d5461045c9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103dc565b34801561048d57600080fd5b50610496610ca9565b6040516103dc9190614645565b3480156104af57600080fd5b50600f546103c89061010090046001600160a01b031681565b3480156104d457600080fd5b50600f546104e29060ff1681565b60405190151581526020016103dc565b3480156104fe57600080fd5b506104e261050d36600461468d565b610d3b565b34801561051e57600080fd5b506104e261052d3660046146b9565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561055757600080fd5b506103fb610d52565b34801561056c57600080fd5b506103fb610d78565b34801561058157600080fd5b506104e26105903660046146d6565b610d90565b3480156105a157600080fd5b506104296105b0366004614717565b610e08565b3480156105c157600080fd5b506104296105d0366004614828565b610f17565b3480156105e157600080fd5b506103fb60175481565b3480156105f757600080fd5b506103fb6110e2565b34801561060c57600080fd5b506103fb6107d081565b34801561062257600080fd5b506103fb60155481565b34801561063857600080fd5b50610641611149565b60405160ff90911681526020016103dc565b34801561065f57600080fd5b5061042961066e366004614901565b611164565b34801561067f57600080fd5b5061042961068e3660046146b9565b611356565b34801561069f57600080fd5b506104296106ae366004614944565b61142b565b3480156106bf57600080fd5b506104296106ce366004614717565b6114a9565b3480156106df57600080fd5b506010546103c8906001600160a01b031681565b3480156106ff57600080fd5b506103fb6109c481565b34801561071557600080fd5b50601a546104e29060ff1681565b34801561072f57600080fd5b506103fb61073e366004614962565b6115c5565b34801561074f57600080fd5b5061042961075e366004614962565b6115f9565b34801561076f57600080fd5b5061042961077e3660046146b9565b6116a2565b34801561078f57600080fd5b506104e261079e3660046146b9565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107c857600080fd5b50601a546104e290610100900460ff1681565b3480156107e757600080fd5b506104296107f6366004614944565b6118fb565b34801561080757600080fd5b506103fb601b5481565b34801561081d57600080fd5b5061042961082c3660046146b9565b611979565b34801561083d57600080fd5b506104e261084c3660046146b9565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561087657600080fd5b506103fb611a74565b34801561088b57600080fd5b506103fb61089a3660046146b9565b6001600160a01b031660009081526020819052604090205490565b3480156108c157600080fd5b50610429611a95565b3480156108d657600080fd5b506104296108e536600461497b565b611b6e565b3480156108f657600080fd5b50610429612167565b34801561090b57600080fd5b5061042961091a366004614944565b6121c9565b34801561092b57600080fd5b50601c5461010090046001600160a01b03166103c8565b34801561094e57600080fd5b506104e26123df565b34801561096357600080fd5b5061042961245a565b34801561097857600080fd5b506104966126c1565b34801561098d57600080fd5b506104e261099c36600461468d565b6126d0565b3480156109ad57600080fd5b506104296109bc366004614901565b6126e7565b3480156109cd57600080fd5b506104296109dc3660046146b9565b612898565b3480156109ed57600080fd5b506016546104e29060ff1681565b348015610a0757600080fd5b50610429610a163660046145e8565b612a62565b348015610a2757600080fd5b50600e54610a589061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103dc565b348015610a9257600080fd5b50610429610aa13660046149c5565b612b14565b348015610ab257600080fd5b506103fb610ac13660046149c5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610af857600080fd5b50610429610b073660046146b9565b612c19565b348015610b1857600080fd5b5061042961308f565b348015610b2d57600080fd5b50601154601254610b48916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103dc565b348015610b7457600080fd5b50610429610b833660046149f3565b61317d565b348015610b9457600080fd5b506013546104e290610100900460ff1681565b348015610bb357600080fd5b50610429610bc2366004614944565b61343d565b601c5461010090046001600160a01b03163314610c1f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601a546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c8d57600080fd5b505af1158015610ca1573d6000803e3d6000fd5b505050505050565b606060098054610cb890614a25565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce490614a25565b8015610d315780601f10610d0657610100808354040283529160200191610d31565b820191906000526020600020905b815481529060010190602001808311610d1457829003601f168201915b5050505050905090565b6000610d483384846134bb565b5060015b92915050565b600b54600090610d669060ff16600a614b8b565b601954610d739190614b9a565b905090565b6000600c54600003610d8957600080fd5b50600c5490565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610df5576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610def908490614bd5565b90915550505b610e008484846135c8565b949350505050565b601c5461010090046001600160a01b03163314610e5b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6064600c54610e6a9190614b9a565b8183600c54610e799190614be8565b610e839190614b9a565b1015610ef75760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610c16565b8082600c54610f069190614be8565b610f109190614b9a565b6019555050565b601c5461010090046001600160a01b03163314610f6a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b8051825114610fbb5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c16565b60005b82518161ffff1610156110dd57600b54610fdc9060ff16600a614b8b565b828261ffff1681518110610ff257610ff2614bff565b60200260200101516110049190614be8565b3360009081526020819052604090205410156110625760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610c16565b6110ca33848361ffff168151811061107c5761107c614bff565b6020908102919091010151600b546110989060ff16600a614b8b565b858561ffff16815181106110ae576110ae614bff565b60200260200101516110c09190614be8565b6000806001613a59565b50806110d581614c2e565b915050610fbe565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf835461113c9190614c4f565b600c54610d739190614bd5565b6000600c5460000361115a57600080fd5b50600b5460ff1690565b601c5461010090046001600160a01b031633146111b75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b600f5460ff161561120a5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610c16565b6107d08361ffff161115801561122657506107d08261ffff1611155b801561123857506107d08161ffff1611155b6112845760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c16565b6109c46112918385614c62565b61ffff1611156112e35760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610c16565b600d805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b601c5461010090046001600160a01b031633146113a95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601a546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561141057600080fd5b505af1158015611424573d6000803e3d6000fd5b5050505050565b601c5461010090046001600160a01b0316331461147e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601c5461010090046001600160a01b031633146114fc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6103e8600c54600561150e9190614be8565b6115189190614b9a565b8183600c546115279190614be8565b6115319190614b9a565b10156115a55760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c16565b8082600c546115b49190614be8565b6115be9190614b9a565b6018555050565b6010546001600160a01b0316600090815260208190526040812054612710906115ef908490614be8565b610d4c9190614b9a565b601c5461010090046001600160a01b0316331461164c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b609681111561169d5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610c16565b601755565b601c5461010090046001600160a01b031633146116f55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6001600160a01b0381166117715760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b0382160161180f5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c16565b601c5461182b9061010090046001600160a01b031660006118fb565b6118368160016118fb565b601c5461010090046001600160a01b0316600090815260208190526040812054111561188a57601c5461010090046001600160a01b0316600081815260208190526040902054611888919083906110c0565b505b601c80546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601c5461010090046001600160a01b0316331461194e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601c5461010090046001600160a01b031633146119cc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601a5460ff16156119dc57600080fd5b306001600160a01b03821603611a345760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c16565b601a80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600b54600090611a889060ff16600a614b8b565b601854610d739190614b9a565b601c5461010090046001600160a01b03163314611ae85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601c54611b049061010090046001600160a01b031660006118fb565b601c80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff81169091556040516101009091046001600160a01b03169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601c5461010090046001600160a01b03163314611bc15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601c5460ff1615611c145760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610c16565b80601a60026101000a8154816001600160a01b0302191690836001600160a01b03160217905550601a60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b81526004016000604051808303816000875af1925050508015611cb157506040513d6000823e601f3d908101601f19168201604052611cae9190810190614ce8565b60015b611cfd5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610c16565b6009611d098582614da9565b50600a611d168482614da9565b506008829055600b805460ff191660ff8316908117909155611d3990600a614b8b565b600854611d469190614be8565b600c5550505050600f60019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc49190614e69565b6001600160a01b031663c9c65396600f60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e499190614e69565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed19190614e69565b601080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556000908152600160208190526040909120805460ff191682179055600c54606491611f339190614be8565b611f3d9190614b9a565b601855600c54606490611f51906001614be8565b611f5b9190614b9a565b601955601c805460ff1916600117808255600c546001600160a01b0361010092839004811660009081526020819052604080822084905594549451939094041692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611fcc9190815260200190565b60405180910390a3600f54611ff390309061010090046001600160a01b03166000196134bb565b601c54600f5461201c916001600160a01b036101009182900481169291909104166000196134bb565b61204f601c60019054906101000a90046001600160a01b0316858486600c546120459190614be8565b6110c09190614b9a565b50601c5461010090046001600160a01b031660008181526020819052604090205461207c919030906110c0565b50600f54306000818152602081905260409020546101009092046001600160a01b03169163f305d719914791601c5460405160e086901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03938416600482015260248101929092526000604483018190526064830152610100900490911660848201524260a482015260c40160606040518083038185885af1158015612131573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121569190614e86565b50505061216161245a565b50505050565b601c5461010090046001600160a01b031633146121ba5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b600f805460ff19166001179055565b601c5461010090046001600160a01b0316331461221c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b80612293576001600160a01b03828116600081815260016020526040808220805460ff19169055601a5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610c73565b600254156122fa576203f480600254426122ad9190614bd5565b116122fa5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610c16565b6001600160a01b03821660009081526001602052604090205460ff16156123635760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610c16565b6001600160a01b03828116600081815260016020819052604091829020805460ff19168217905542600255601a5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610c73565b5050565b601c5460009061010090046001600160a01b031633146124355760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b600f5461245490309061010090046001600160a01b03166000196134bb565b50600190565b601c5461010090046001600160a01b031633146124ad5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601a5460ff16156125005760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c16565b601a54610100900460ff166125575760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c16565b601a546201000090046001600160a01b031661259d57601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a54601054600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561262e57600080fd5b505af192505050801561263f575060015b50601a805460ff191660011790556010546001600160a01b03166000908152602081905260409020546127109061267790600a614be8565b6126819190614b9a565b6014556010546001600160a01b0316600090815260208190526040902054612710906126ae90601e614be8565b6126b89190614b9a565b60155542601b55565b6060600a8054610cb890614a25565b60006126dd3384846135c8565b5060019392505050565b601c5461010090046001600160a01b0316331461273a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b600e805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416928816929092179290921716179055806127b28385614c62565b6127bc9190614c62565b600e80547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff93841602179055600d5460009161280d9162010000810482169116614c62565b600e5461ffff918216925066010000000000009004168110156121615760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610c16565b601c5461010090046001600160a01b031633146128eb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b306001600160a01b038216036129435760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610c16565b601c546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015282916001600160a01b038084169263a9059cbb9261010090049091169083906370a0823190602401602060405180830381865afa1580156129b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129db9190614eb4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612a3e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190614ecd565b601c5461010090046001600160a01b03163314612ab55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6013805461ff001916610100841515908102919091179091556016805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601c5461010090046001600160a01b03163314612b675760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6001600160a01b03821615801590612b8757506001600160a01b03811615155b612bd35760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610c16565b601180546001600160a01b039384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560128054929093169116179055565b601c5461010090046001600160a01b03163314612c6c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601a54610100900460ff1615612cc45760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610c16565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2d9190614e69565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9e9190614e69565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e259190614e69565b6010546001600160a01b039081166000908152600160205260409020805460ff191690559091508116612feb57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb49190614e69565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f259190614e69565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612f8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fae9190614e69565b601080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905561301f565b601080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b600f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03858116820292909217835560105482166000908152600160208190526040909120805460ff1916909117905591546110dd9230929104166000196134bb565b601c5461010090046001600160a01b031633146130e25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601a54610100900460ff161561313a5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c16565b601c546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f1935050505015801561317a573d6000803e3d6000fd5b50565b601c5461010090046001600160a01b031633146131d05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b8284600c546131df9190614be8565b6131e99190614b9a565b601455600c5481906131fc908490614be8565b6132069190614b9a565b601581905560145411156132825760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610c16565b6010546001600160a01b0316600090815260208190526040902054612710906132ac906096614be8565b6132b69190614b9a565b601554111561332d5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201527f50492e00000000000000000000000000000000000000000000000000000000006064820152608401610c16565b620f4240600c5461333e9190614b9a565b60155410156133b55760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610c16565b620f4240600c546133c69190614b9a565b60145410156121615760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610c16565b601c5461010090046001600160a01b031633146134905760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166135115760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c16565b6001600160a01b0382166135675760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c16565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166136465760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c16565b6001600160a01b0383166136c25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c16565b600082116137385760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c16565b6001600160a01b0384166000908152600160205260408120548190819060ff16156137665760019250613794565b6001600160a01b03861660009081526001602052604090205460ff16156137905760019150613794565b5060015b61379e8787613d40565b156139a957601a5460ff166137f55760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c16565b82806137fe5750815b156138c2576001600160a01b03871660009081526007602052604090205460ff1615801561384557506001600160a01b03861660009081526007602052604090205460ff16155b156138c2576018548511156138c25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c16565b600f546001600160a01b0387811661010090920416148015906138e3575081155b156139a9576001600160a01b03861660009081526007602052604090205460ff166139a9576019548561392b886001600160a01b031660009081526020819052604090205490565b6139359190614c4f565b11156139a95760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c16565b8115613a405760135460ff16613a4057601354610100900460ff1615613a4057306000908152602081905260409020546014548110613a3e5760155460165460ff1615613a28576017546010546001600160a01b031660009081526020819052604090205461271091613a1b91614be8565b613a259190614b9a565b90505b808210613a33578091505b613a3c82613e66565b505b505b613a4e878787868686613a59565b979650505050505050565b6000613a658787613d40565b15613b1857601a546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613b01575060408051601f3d908101601f19168201909252613afe91810190614ecd565b60015b613b0a57600080fd5b905080613b1657600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680613b5a57506001600160a01b03871660009081526006602052604090205460ff165b15613b63575060005b6001600160a01b03881660009081526020819052604081208054889290613b8b908490614bd5565b909155506000905081613b9e5786613baa565b613baa8987878a614355565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254613be09190614c4f565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c2c91815260200190565b60405180910390a3601a54610100900460ff16613d3157613c4d898961446a565b601a54610100900460ff16158015613c6a5750613c6a8989613d40565b8015613c8f57506001600160a01b03891660009081526005602052604090205460ff16155b8015613cb457506001600160a01b03881660009081526005602052604090205460ff16155b8015613cbe575083155b15613d315760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610c16565b50600198975050505050505050565b601c546000906001600160a01b038481166101009092041614801590613d795750601c546001600160a01b038381166101009092041614155b8015613d955750601c5461010090046001600160a01b03163214155b8015613dba57506001600160a01b03821660009081526004602052604090205460ff16155b8015613ddf57506001600160a01b03831660009081526004602052604090205460ff16155b8015613df657506001600160a01b03821661dead14155b8015613e0a57506001600160a01b03821615155b8015613e1f57506001600160a01b0383163014155b8015613e3f5750601a546001600160a01b03848116620100009092041614155b8015613e5f5750601a546001600160a01b03838116620100009092041614155b9392505050565b6013805460ff1916600117905560408051608081018252600e5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052600003613ec75750614348565b306000908152600360209081526040808320600f5461010090046001600160a01b0316845290915290205460001914613f2a57306000908152600360209081526040808320600f5461010090046001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff1685613f4b9190614be8565b613f559190614b9a565b613f5f9190614b9a565b90506000613f6d8285614bd5565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613fa757613fa7614bff565b60200260200101906001600160a01b031690816001600160a01b031681525050600f60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561401a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061403e9190614e69565b8160018151811061405157614051614bff565b6001600160a01b039283166020918202929092010152600f546040517f791ac9470000000000000000000000000000000000000000000000000000000081526101009091049091169063791ac947906140b7908590600090869030904290600401614eea565b600060405180830381600087803b1580156140d157600080fd5b505af19250505080156140e2575060015b6140ef5750505050614348565b476000836140fd8684614be8565b6141079190614b9a565b9050841561420357600f546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1935050505080156141b7575060408051601f3d908101601f191682019092526141b491810190614e86565b60015b6141c657505050505050614348565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61420d8183614bd5565b91508560000151866060018181516142259190614f5b565b61ffff908116909152606088015160408901516000935083929182169161424d911686614be8565b6142579190614b9a565b905060006142658286614bd5565b60208a015190915061ffff16156142d3576011546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d80600081146142c8576040519150601f19603f3d011682016040523d82523d6000602084013e6142cd565b606091505b50909350505b604089015161ffff161561433e576012546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d8060008114614333576040519150601f19603f3d011682016040523d82523d6000602084013e614338565b606091505b50909350505b5050505050505050505b506013805460ff19169055565b600080841561436b5750600d5461ffff16614395565b83156143845750600d5462010000900461ffff16614395565b50600d54640100000000900461ffff165b806000036143a65782915050610e00565b601a546201000090046001600160a01b0316301480156143d0575046600114806143d05750466038145b156143da57506111945b60006127106143e98386614be8565b6143f39190614b9a565b9050801561446057306000908152602081905260408120805483929061441a908490614c4f565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b613a4e8185614bd5565b601a54610100900460ff16156144e85760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c16565b6144f28282613d40565b15801561450c57506010546001600160a01b038281169116145b156123db576001600160a01b038083166000908152600460209081526040808320805460ff1990811660019081179092556006909352922080549091169091179055601a805461ff00191661010017908190556201000090041661459a57601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6013805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612b08565b801515811461317a57600080fd5b600080604083850312156145fb57600080fd5b8235614606816145da565b91506020830135614616816145da565b809150509250929050565b60005b8381101561463c578181015183820152602001614624565b50506000910152565b6020815260008251806020840152614664816040850160208701614621565b601f01601f19169190910160400192915050565b6001600160a01b038116811461317a57600080fd5b600080604083850312156146a057600080fd5b82356146ab81614678565b946020939093013593505050565b6000602082840312156146cb57600080fd5b8135613e5f81614678565b6000806000606084860312156146eb57600080fd5b83356146f681614678565b9250602084013561470681614678565b929592945050506040919091013590565b6000806040838503121561472a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561479157614791614739565b604052919050565b600067ffffffffffffffff8211156147b3576147b3614739565b5060051b60200190565b600082601f8301126147ce57600080fd5b813560206147e36147de83614799565b614768565b82815260059290921b8401810191818101908684111561480257600080fd5b8286015b8481101561481d5780358352918301918301614806565b509695505050505050565b6000806040838503121561483b57600080fd5b823567ffffffffffffffff8082111561485357600080fd5b818501915085601f83011261486757600080fd5b813560206148776147de83614799565b82815260059290921b8401810191818101908984111561489657600080fd5b948201945b838610156148bd5785356148ae81614678565b8252948201949082019061489b565b965050860135925050808211156148d357600080fd5b506148e0858286016147bd565b9150509250929050565b803561ffff811681146148fc57600080fd5b919050565b60008060006060848603121561491657600080fd5b61491f846148ea565b925061492d602085016148ea565b915061493b604085016148ea565b90509250925092565b6000806040838503121561495757600080fd5b823561460681614678565b60006020828403121561497457600080fd5b5035919050565b6000806000806080858703121561499157600080fd5b843561499c81614678565b9350602085013592506040850135915060608501356149ba81614678565b939692955090935050565b600080604083850312156149d857600080fd5b82356149e381614678565b9150602083013561461681614678565b60008060008060808587031215614a0957600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680614a3957607f821691505b602082108103614a72577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614ae2578160001904821115614ac857614ac8614a78565b80851615614ad557918102915b93841c9390800290614aac565b509250929050565b600082614af957506001610d4c565b81614b0657506000610d4c565b8160018114614b1c5760028114614b2657614b42565b6001915050610d4c565b60ff841115614b3757614b37614a78565b50506001821b610d4c565b5060208310610133831016604e8410600b8410161715614b65575081810a610d4c565b614b6f8383614aa7565b8060001904821115614b8357614b83614a78565b029392505050565b6000613e5f60ff841683614aea565b600082614bd0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b81810381811115610d4c57610d4c614a78565b8082028115828204841417610d4c57610d4c614a78565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff808316818103614c4557614c45614a78565b6001019392505050565b80820180821115610d4c57610d4c614a78565b61ffff818116838216019080821115614c7d57614c7d614a78565b5092915050565b600082601f830112614c9557600080fd5b815167ffffffffffffffff811115614caf57614caf614739565b614cc26020601f19601f84011601614768565b818152846020838601011115614cd757600080fd5b610e00826020830160208701614621565b60008060008060808587031215614cfe57600080fd5b845167ffffffffffffffff80821115614d1657600080fd5b614d2288838901614c84565b95506020870151915080821115614d3857600080fd5b50614d4587828801614c84565b93505060408501519150606085015160ff811681146149ba57600080fd5b601f8211156110dd57600081815260208120601f850160051c81016020861015614d8a5750805b601f850160051c820191505b81811015610ca157828155600101614d96565b815167ffffffffffffffff811115614dc357614dc3614739565b614dd781614dd18454614a25565b84614d63565b602080601f831160018114614e0c5760008415614df45750858301515b600019600386901b1c1916600185901b178555610ca1565b600085815260208120601f198616915b82811015614e3b57888601518255948401946001909101908401614e1c565b5085821015614e595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215614e7b57600080fd5b8151613e5f81614678565b600080600060608486031215614e9b57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215614ec657600080fd5b5051919050565b600060208284031215614edf57600080fd5b8151613e5f816145da565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614f3a5784516001600160a01b031683529383019391830191600101614f15565b50506001600160a01b03969096166060850152505050608001529392505050565b61ffff828116828216039080821115614c7d57614c7d614a7856fea2646970667358221220297e7a0b02edb128c1138612d43f8136c33ddfc32d452304989b61d5a21af0e564736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c806350a8e016116101e7578063a9059cbb1161010d578063d3f6a157116100a0578063f94aa1b41161006f578063f94aa1b414610b21578063fb78680d14610b68578063fdb78c0e14610b88578063feadde9c14610ba757600080fd5b8063d3f6a15714610a86578063dd62ed3e14610aa6578063eafb5a3c14610aec578063ee5d9c2d14610b0c57600080fd5b8063b3d514fb116100dc578063b3d514fb14610600578063b7df8b36146109e1578063bfc2fc35146109fb578063cf84770614610a1b57600080fd5b8063a9059cbb14610981578063aa22b172146109a1578063ab558e4d146109c1578063b1b08f711461060057600080fd5b8063715018a611610185578063893d20e811610154578063893d20e81461091f5780638a63bd9b146109425780638a8c523c1461095757806395d89b411461096c57600080fd5b8063715018a6146108b5578063717f2d7b146108ca57806378648edf146108ea57806380c581d1146108ff57600080fd5b80635c24b074116101c15780635c24b074146108115780635cce86cd146108315780636ebd00781461086a57806370a082311461087f57600080fd5b806350a8e016146107bc578063590ffdce146107db5780635a6f0918146107fb57600080fd5b80632b112e49116102cc5780633f3cf56c1161026a5780634bbb93eb116102395780634bbb93eb146107235780634e718e48146107435780634fb2e45d146107635780634fbee1931461078357600080fd5b80633f3cf56c146106b3578063452ed4f1146106d357806346ea7ac8146106f35780634ada218b1461070957600080fd5b8063313ce567116102a6578063313ce5671461062c57806332cde6641461065357806333251a0b1461067357806336fddb041461069357600080fd5b80632b112e49146105eb5780632b28fc7a146106005780632e8fa8211461061657600080fd5b8063095ea7b31161034457806323b872dd1161031357806323b872dd1461057557806326003957146105955780632610eaca146105b557806328577751146105d557600080fd5b8063095ea7b3146104f25780630dcbcf1c146105125780630fa604e41461054b57806318160ddd1461056057600080fd5b8063069d955f11610380578063069d955f1461042b57806306fdde03146104815780630758d924146104a357806307dd79e0146104c857600080fd5b806303fd2a45146103b25780630445b667146103e5578063044df7261461040957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f157600080fd5b506103fb60145481565b6040519081526020016103dc565b34801561041557600080fd5b506104296104243660046145e8565b610bc7565b005b34801561043757600080fd5b50600d5461045c9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103dc565b34801561048d57600080fd5b50610496610ca9565b6040516103dc9190614645565b3480156104af57600080fd5b50600f546103c89061010090046001600160a01b031681565b3480156104d457600080fd5b50600f546104e29060ff1681565b60405190151581526020016103dc565b3480156104fe57600080fd5b506104e261050d36600461468d565b610d3b565b34801561051e57600080fd5b506104e261052d3660046146b9565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561055757600080fd5b506103fb610d52565b34801561056c57600080fd5b506103fb610d78565b34801561058157600080fd5b506104e26105903660046146d6565b610d90565b3480156105a157600080fd5b506104296105b0366004614717565b610e08565b3480156105c157600080fd5b506104296105d0366004614828565b610f17565b3480156105e157600080fd5b506103fb60175481565b3480156105f757600080fd5b506103fb6110e2565b34801561060c57600080fd5b506103fb6107d081565b34801561062257600080fd5b506103fb60155481565b34801561063857600080fd5b50610641611149565b60405160ff90911681526020016103dc565b34801561065f57600080fd5b5061042961066e366004614901565b611164565b34801561067f57600080fd5b5061042961068e3660046146b9565b611356565b34801561069f57600080fd5b506104296106ae366004614944565b61142b565b3480156106bf57600080fd5b506104296106ce366004614717565b6114a9565b3480156106df57600080fd5b506010546103c8906001600160a01b031681565b3480156106ff57600080fd5b506103fb6109c481565b34801561071557600080fd5b50601a546104e29060ff1681565b34801561072f57600080fd5b506103fb61073e366004614962565b6115c5565b34801561074f57600080fd5b5061042961075e366004614962565b6115f9565b34801561076f57600080fd5b5061042961077e3660046146b9565b6116a2565b34801561078f57600080fd5b506104e261079e3660046146b9565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107c857600080fd5b50601a546104e290610100900460ff1681565b3480156107e757600080fd5b506104296107f6366004614944565b6118fb565b34801561080757600080fd5b506103fb601b5481565b34801561081d57600080fd5b5061042961082c3660046146b9565b611979565b34801561083d57600080fd5b506104e261084c3660046146b9565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561087657600080fd5b506103fb611a74565b34801561088b57600080fd5b506103fb61089a3660046146b9565b6001600160a01b031660009081526020819052604090205490565b3480156108c157600080fd5b50610429611a95565b3480156108d657600080fd5b506104296108e536600461497b565b611b6e565b3480156108f657600080fd5b50610429612167565b34801561090b57600080fd5b5061042961091a366004614944565b6121c9565b34801561092b57600080fd5b50601c5461010090046001600160a01b03166103c8565b34801561094e57600080fd5b506104e26123df565b34801561096357600080fd5b5061042961245a565b34801561097857600080fd5b506104966126c1565b34801561098d57600080fd5b506104e261099c36600461468d565b6126d0565b3480156109ad57600080fd5b506104296109bc366004614901565b6126e7565b3480156109cd57600080fd5b506104296109dc3660046146b9565b612898565b3480156109ed57600080fd5b506016546104e29060ff1681565b348015610a0757600080fd5b50610429610a163660046145e8565b612a62565b348015610a2757600080fd5b50600e54610a589061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103dc565b348015610a9257600080fd5b50610429610aa13660046149c5565b612b14565b348015610ab257600080fd5b506103fb610ac13660046149c5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610af857600080fd5b50610429610b073660046146b9565b612c19565b348015610b1857600080fd5b5061042961308f565b348015610b2d57600080fd5b50601154601254610b48916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103dc565b348015610b7457600080fd5b50610429610b833660046149f3565b61317d565b348015610b9457600080fd5b506013546104e290610100900460ff1681565b348015610bb357600080fd5b50610429610bc2366004614944565b61343d565b601c5461010090046001600160a01b03163314610c1f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601a546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c8d57600080fd5b505af1158015610ca1573d6000803e3d6000fd5b505050505050565b606060098054610cb890614a25565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce490614a25565b8015610d315780601f10610d0657610100808354040283529160200191610d31565b820191906000526020600020905b815481529060010190602001808311610d1457829003601f168201915b5050505050905090565b6000610d483384846134bb565b5060015b92915050565b600b54600090610d669060ff16600a614b8b565b601954610d739190614b9a565b905090565b6000600c54600003610d8957600080fd5b50600c5490565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610df5576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610def908490614bd5565b90915550505b610e008484846135c8565b949350505050565b601c5461010090046001600160a01b03163314610e5b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6064600c54610e6a9190614b9a565b8183600c54610e799190614be8565b610e839190614b9a565b1015610ef75760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610c16565b8082600c54610f069190614be8565b610f109190614b9a565b6019555050565b601c5461010090046001600160a01b03163314610f6a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b8051825114610fbb5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c16565b60005b82518161ffff1610156110dd57600b54610fdc9060ff16600a614b8b565b828261ffff1681518110610ff257610ff2614bff565b60200260200101516110049190614be8565b3360009081526020819052604090205410156110625760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610c16565b6110ca33848361ffff168151811061107c5761107c614bff565b6020908102919091010151600b546110989060ff16600a614b8b565b858561ffff16815181106110ae576110ae614bff565b60200260200101516110c09190614be8565b6000806001613a59565b50806110d581614c2e565b915050610fbe565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf835461113c9190614c4f565b600c54610d739190614bd5565b6000600c5460000361115a57600080fd5b50600b5460ff1690565b601c5461010090046001600160a01b031633146111b75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b600f5460ff161561120a5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610c16565b6107d08361ffff161115801561122657506107d08261ffff1611155b801561123857506107d08161ffff1611155b6112845760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c16565b6109c46112918385614c62565b61ffff1611156112e35760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610c16565b600d805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b601c5461010090046001600160a01b031633146113a95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601a546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561141057600080fd5b505af1158015611424573d6000803e3d6000fd5b5050505050565b601c5461010090046001600160a01b0316331461147e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601c5461010090046001600160a01b031633146114fc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6103e8600c54600561150e9190614be8565b6115189190614b9a565b8183600c546115279190614be8565b6115319190614b9a565b10156115a55760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c16565b8082600c546115b49190614be8565b6115be9190614b9a565b6018555050565b6010546001600160a01b0316600090815260208190526040812054612710906115ef908490614be8565b610d4c9190614b9a565b601c5461010090046001600160a01b0316331461164c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b609681111561169d5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610c16565b601755565b601c5461010090046001600160a01b031633146116f55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6001600160a01b0381166117715760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b0382160161180f5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c16565b601c5461182b9061010090046001600160a01b031660006118fb565b6118368160016118fb565b601c5461010090046001600160a01b0316600090815260208190526040812054111561188a57601c5461010090046001600160a01b0316600081815260208190526040902054611888919083906110c0565b505b601c80546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601c5461010090046001600160a01b0316331461194e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601c5461010090046001600160a01b031633146119cc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601a5460ff16156119dc57600080fd5b306001600160a01b03821603611a345760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c16565b601a80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600b54600090611a889060ff16600a614b8b565b601854610d739190614b9a565b601c5461010090046001600160a01b03163314611ae85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601c54611b049061010090046001600160a01b031660006118fb565b601c80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff81169091556040516101009091046001600160a01b03169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601c5461010090046001600160a01b03163314611bc15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601c5460ff1615611c145760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610c16565b80601a60026101000a8154816001600160a01b0302191690836001600160a01b03160217905550601a60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b81526004016000604051808303816000875af1925050508015611cb157506040513d6000823e601f3d908101601f19168201604052611cae9190810190614ce8565b60015b611cfd5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610c16565b6009611d098582614da9565b50600a611d168482614da9565b506008829055600b805460ff191660ff8316908117909155611d3990600a614b8b565b600854611d469190614be8565b600c5550505050600f60019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc49190614e69565b6001600160a01b031663c9c65396600f60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e499190614e69565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed19190614e69565b601080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556000908152600160208190526040909120805460ff191682179055600c54606491611f339190614be8565b611f3d9190614b9a565b601855600c54606490611f51906001614be8565b611f5b9190614b9a565b601955601c805460ff1916600117808255600c546001600160a01b0361010092839004811660009081526020819052604080822084905594549451939094041692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611fcc9190815260200190565b60405180910390a3600f54611ff390309061010090046001600160a01b03166000196134bb565b601c54600f5461201c916001600160a01b036101009182900481169291909104166000196134bb565b61204f601c60019054906101000a90046001600160a01b0316858486600c546120459190614be8565b6110c09190614b9a565b50601c5461010090046001600160a01b031660008181526020819052604090205461207c919030906110c0565b50600f54306000818152602081905260409020546101009092046001600160a01b03169163f305d719914791601c5460405160e086901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03938416600482015260248101929092526000604483018190526064830152610100900490911660848201524260a482015260c40160606040518083038185885af1158015612131573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121569190614e86565b50505061216161245a565b50505050565b601c5461010090046001600160a01b031633146121ba5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b600f805460ff19166001179055565b601c5461010090046001600160a01b0316331461221c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b80612293576001600160a01b03828116600081815260016020526040808220805460ff19169055601a5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610c73565b600254156122fa576203f480600254426122ad9190614bd5565b116122fa5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610c16565b6001600160a01b03821660009081526001602052604090205460ff16156123635760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610c16565b6001600160a01b03828116600081815260016020819052604091829020805460ff19168217905542600255601a5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610c73565b5050565b601c5460009061010090046001600160a01b031633146124355760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b600f5461245490309061010090046001600160a01b03166000196134bb565b50600190565b601c5461010090046001600160a01b031633146124ad5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601a5460ff16156125005760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c16565b601a54610100900460ff166125575760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c16565b601a546201000090046001600160a01b031661259d57601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a54601054600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561262e57600080fd5b505af192505050801561263f575060015b50601a805460ff191660011790556010546001600160a01b03166000908152602081905260409020546127109061267790600a614be8565b6126819190614b9a565b6014556010546001600160a01b0316600090815260208190526040902054612710906126ae90601e614be8565b6126b89190614b9a565b60155542601b55565b6060600a8054610cb890614a25565b60006126dd3384846135c8565b5060019392505050565b601c5461010090046001600160a01b0316331461273a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b600e805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416928816929092179290921716179055806127b28385614c62565b6127bc9190614c62565b600e80547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff93841602179055600d5460009161280d9162010000810482169116614c62565b600e5461ffff918216925066010000000000009004168110156121615760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610c16565b601c5461010090046001600160a01b031633146128eb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b306001600160a01b038216036129435760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610c16565b601c546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015282916001600160a01b038084169263a9059cbb9261010090049091169083906370a0823190602401602060405180830381865afa1580156129b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129db9190614eb4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612a3e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190614ecd565b601c5461010090046001600160a01b03163314612ab55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6013805461ff001916610100841515908102919091179091556016805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601c5461010090046001600160a01b03163314612b675760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6001600160a01b03821615801590612b8757506001600160a01b03811615155b612bd35760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610c16565b601180546001600160a01b039384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560128054929093169116179055565b601c5461010090046001600160a01b03163314612c6c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601a54610100900460ff1615612cc45760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610c16565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2d9190614e69565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9e9190614e69565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e259190614e69565b6010546001600160a01b039081166000908152600160205260409020805460ff191690559091508116612feb57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb49190614e69565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f259190614e69565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612f8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fae9190614e69565b601080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905561301f565b601080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b600f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03858116820292909217835560105482166000908152600160208190526040909120805460ff1916909117905591546110dd9230929104166000196134bb565b601c5461010090046001600160a01b031633146130e25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b601a54610100900460ff161561313a5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c16565b601c546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f1935050505015801561317a573d6000803e3d6000fd5b50565b601c5461010090046001600160a01b031633146131d05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b8284600c546131df9190614be8565b6131e99190614b9a565b601455600c5481906131fc908490614be8565b6132069190614b9a565b601581905560145411156132825760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610c16565b6010546001600160a01b0316600090815260208190526040902054612710906132ac906096614be8565b6132b69190614b9a565b601554111561332d5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201527f50492e00000000000000000000000000000000000000000000000000000000006064820152608401610c16565b620f4240600c5461333e9190614b9a565b60155410156133b55760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610c16565b620f4240600c546133c69190614b9a565b60145410156121615760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610c16565b601c5461010090046001600160a01b031633146134905760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c16565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166135115760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c16565b6001600160a01b0382166135675760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c16565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166136465760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c16565b6001600160a01b0383166136c25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c16565b600082116137385760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c16565b6001600160a01b0384166000908152600160205260408120548190819060ff16156137665760019250613794565b6001600160a01b03861660009081526001602052604090205460ff16156137905760019150613794565b5060015b61379e8787613d40565b156139a957601a5460ff166137f55760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c16565b82806137fe5750815b156138c2576001600160a01b03871660009081526007602052604090205460ff1615801561384557506001600160a01b03861660009081526007602052604090205460ff16155b156138c2576018548511156138c25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c16565b600f546001600160a01b0387811661010090920416148015906138e3575081155b156139a9576001600160a01b03861660009081526007602052604090205460ff166139a9576019548561392b886001600160a01b031660009081526020819052604090205490565b6139359190614c4f565b11156139a95760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c16565b8115613a405760135460ff16613a4057601354610100900460ff1615613a4057306000908152602081905260409020546014548110613a3e5760155460165460ff1615613a28576017546010546001600160a01b031660009081526020819052604090205461271091613a1b91614be8565b613a259190614b9a565b90505b808210613a33578091505b613a3c82613e66565b505b505b613a4e878787868686613a59565b979650505050505050565b6000613a658787613d40565b15613b1857601a546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613b01575060408051601f3d908101601f19168201909252613afe91810190614ecd565b60015b613b0a57600080fd5b905080613b1657600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680613b5a57506001600160a01b03871660009081526006602052604090205460ff165b15613b63575060005b6001600160a01b03881660009081526020819052604081208054889290613b8b908490614bd5565b909155506000905081613b9e5786613baa565b613baa8987878a614355565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254613be09190614c4f565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c2c91815260200190565b60405180910390a3601a54610100900460ff16613d3157613c4d898961446a565b601a54610100900460ff16158015613c6a5750613c6a8989613d40565b8015613c8f57506001600160a01b03891660009081526005602052604090205460ff16155b8015613cb457506001600160a01b03881660009081526005602052604090205460ff16155b8015613cbe575083155b15613d315760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610c16565b50600198975050505050505050565b601c546000906001600160a01b038481166101009092041614801590613d795750601c546001600160a01b038381166101009092041614155b8015613d955750601c5461010090046001600160a01b03163214155b8015613dba57506001600160a01b03821660009081526004602052604090205460ff16155b8015613ddf57506001600160a01b03831660009081526004602052604090205460ff16155b8015613df657506001600160a01b03821661dead14155b8015613e0a57506001600160a01b03821615155b8015613e1f57506001600160a01b0383163014155b8015613e3f5750601a546001600160a01b03848116620100009092041614155b8015613e5f5750601a546001600160a01b03838116620100009092041614155b9392505050565b6013805460ff1916600117905560408051608081018252600e5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052600003613ec75750614348565b306000908152600360209081526040808320600f5461010090046001600160a01b0316845290915290205460001914613f2a57306000908152600360209081526040808320600f5461010090046001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff1685613f4b9190614be8565b613f559190614b9a565b613f5f9190614b9a565b90506000613f6d8285614bd5565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613fa757613fa7614bff565b60200260200101906001600160a01b031690816001600160a01b031681525050600f60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561401a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061403e9190614e69565b8160018151811061405157614051614bff565b6001600160a01b039283166020918202929092010152600f546040517f791ac9470000000000000000000000000000000000000000000000000000000081526101009091049091169063791ac947906140b7908590600090869030904290600401614eea565b600060405180830381600087803b1580156140d157600080fd5b505af19250505080156140e2575060015b6140ef5750505050614348565b476000836140fd8684614be8565b6141079190614b9a565b9050841561420357600f546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1935050505080156141b7575060408051601f3d908101601f191682019092526141b491810190614e86565b60015b6141c657505050505050614348565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61420d8183614bd5565b91508560000151866060018181516142259190614f5b565b61ffff908116909152606088015160408901516000935083929182169161424d911686614be8565b6142579190614b9a565b905060006142658286614bd5565b60208a015190915061ffff16156142d3576011546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d80600081146142c8576040519150601f19603f3d011682016040523d82523d6000602084013e6142cd565b606091505b50909350505b604089015161ffff161561433e576012546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d8060008114614333576040519150601f19603f3d011682016040523d82523d6000602084013e614338565b606091505b50909350505b5050505050505050505b506013805460ff19169055565b600080841561436b5750600d5461ffff16614395565b83156143845750600d5462010000900461ffff16614395565b50600d54640100000000900461ffff165b806000036143a65782915050610e00565b601a546201000090046001600160a01b0316301480156143d0575046600114806143d05750466038145b156143da57506111945b60006127106143e98386614be8565b6143f39190614b9a565b9050801561446057306000908152602081905260408120805483929061441a908490614c4f565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b613a4e8185614bd5565b601a54610100900460ff16156144e85760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c16565b6144f28282613d40565b15801561450c57506010546001600160a01b038281169116145b156123db576001600160a01b038083166000908152600460209081526040808320805460ff1990811660019081179092556006909352922080549091169091179055601a805461ff00191661010017908190556201000090041661459a57601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6013805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612b08565b801515811461317a57600080fd5b600080604083850312156145fb57600080fd5b8235614606816145da565b91506020830135614616816145da565b809150509250929050565b60005b8381101561463c578181015183820152602001614624565b50506000910152565b6020815260008251806020840152614664816040850160208701614621565b601f01601f19169190910160400192915050565b6001600160a01b038116811461317a57600080fd5b600080604083850312156146a057600080fd5b82356146ab81614678565b946020939093013593505050565b6000602082840312156146cb57600080fd5b8135613e5f81614678565b6000806000606084860312156146eb57600080fd5b83356146f681614678565b9250602084013561470681614678565b929592945050506040919091013590565b6000806040838503121561472a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561479157614791614739565b604052919050565b600067ffffffffffffffff8211156147b3576147b3614739565b5060051b60200190565b600082601f8301126147ce57600080fd5b813560206147e36147de83614799565b614768565b82815260059290921b8401810191818101908684111561480257600080fd5b8286015b8481101561481d5780358352918301918301614806565b509695505050505050565b6000806040838503121561483b57600080fd5b823567ffffffffffffffff8082111561485357600080fd5b818501915085601f83011261486757600080fd5b813560206148776147de83614799565b82815260059290921b8401810191818101908984111561489657600080fd5b948201945b838610156148bd5785356148ae81614678565b8252948201949082019061489b565b965050860135925050808211156148d357600080fd5b506148e0858286016147bd565b9150509250929050565b803561ffff811681146148fc57600080fd5b919050565b60008060006060848603121561491657600080fd5b61491f846148ea565b925061492d602085016148ea565b915061493b604085016148ea565b90509250925092565b6000806040838503121561495757600080fd5b823561460681614678565b60006020828403121561497457600080fd5b5035919050565b6000806000806080858703121561499157600080fd5b843561499c81614678565b9350602085013592506040850135915060608501356149ba81614678565b939692955090935050565b600080604083850312156149d857600080fd5b82356149e381614678565b9150602083013561461681614678565b60008060008060808587031215614a0957600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680614a3957607f821691505b602082108103614a72577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614ae2578160001904821115614ac857614ac8614a78565b80851615614ad557918102915b93841c9390800290614aac565b509250929050565b600082614af957506001610d4c565b81614b0657506000610d4c565b8160018114614b1c5760028114614b2657614b42565b6001915050610d4c565b60ff841115614b3757614b37614a78565b50506001821b610d4c565b5060208310610133831016604e8410600b8410161715614b65575081810a610d4c565b614b6f8383614aa7565b8060001904821115614b8357614b83614a78565b029392505050565b6000613e5f60ff841683614aea565b600082614bd0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b81810381811115610d4c57610d4c614a78565b8082028115828204841417610d4c57610d4c614a78565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff808316818103614c4557614c45614a78565b6001019392505050565b80820180821115610d4c57610d4c614a78565b61ffff818116838216019080821115614c7d57614c7d614a78565b5092915050565b600082601f830112614c9557600080fd5b815167ffffffffffffffff811115614caf57614caf614739565b614cc26020601f19601f84011601614768565b818152846020838601011115614cd757600080fd5b610e00826020830160208701614621565b60008060008060808587031215614cfe57600080fd5b845167ffffffffffffffff80821115614d1657600080fd5b614d2288838901614c84565b95506020870151915080821115614d3857600080fd5b50614d4587828801614c84565b93505060408501519150606085015160ff811681146149ba57600080fd5b601f8211156110dd57600081815260208120601f850160051c81016020861015614d8a5750805b601f850160051c820191505b81811015610ca157828155600101614d96565b815167ffffffffffffffff811115614dc357614dc3614739565b614dd781614dd18454614a25565b84614d63565b602080601f831160018114614e0c5760008415614df45750858301515b600019600386901b1c1916600185901b178555610ca1565b600085815260208120601f198616915b82811015614e3b57888601518255948401946001909101908401614e1c565b5085821015614e595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215614e7b57600080fd5b8151613e5f81614678565b600080600060608486031215614e9b57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215614ec657600080fd5b5051919050565b600060208284031215614edf57600080fd5b8151613e5f816145da565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614f3a5784516001600160a01b031683529383019391830191600101614f15565b50506001600160a01b03969096166060850152505050608001529392505050565b61ffff828116828216039080821115614c7d57614c7d614a7856fea2646970667358221220297e7a0b02edb128c1138612d43f8136c33ddfc32d452304989b61d5a21af0e564736f6c63430008110033

Deployed Bytecode Sourcemap

4048:24127:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5565:73;;;;;;;;;;;;5596:42;5565:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5565:73:0;;;;;;;;6031:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6031:28:0;245:177:1;15939:153:0;;;;;;;;;;-1:-1:-1;15939:153:0;;;;;:::i;:::-;;:::i;:::-;;4947:109;;;;;;;;;;-1:-1:-1;4947:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;1137:6:1;1170:15;;;1152:34;;1222:15;;;1217:2;1202:18;;1195:43;1274:15;;1254:18;;;1247:43;;;;1115:2;1100:18;4947:109:0;931:365:1;11721:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5504:26::-;;;;;;;;;;-1:-1:-1;5504:26:0;;;;;;;-1:-1:-1;;;;;5504:26:0;;;5471;;;;;;;;;;-1:-1:-1;5471:26:0;;;;;;;;;;;2429:14:1;;2422:22;2404:41;;2392:2;2377:18;5471:26:0;2264:187:1;12329:161:0;;;;;;;;;;-1:-1:-1;12329:161:0;;;;;:::i;:::-;;:::i;15368:140::-;;;;;;;;;;-1:-1:-1;15368:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;15466:34:0;15442:4;15466:34;;;:25;:34;;;;;;;;;15368:140;18283:114;;;;;;;;;;;;;:::i;11392:115::-;;;;;;;;;;;;;:::i;12999:306::-;;;;;;;;;;-1:-1:-1;12999:306:0;;;;;:::i;:::-;;:::i;17895:264::-;;;;;;;;;;-1:-1:-1;17895:264:0;;;;;:::i;:::-;;:::i;25850:447::-;;;;;;;;;;-1:-1:-1;25850:447:0;;;;;:::i;:::-;;:::i;6139:33::-;;;;;;;;;;;;;;;;15672:141;;;;;;;;;;;;;:::i;5215:42::-;;;;;;;;;;;;5253:4;5215:42;;6066:25;;;;;;;;;;;;;;;;11513:112;;;;;;;;;;;;;:::i;:::-;;;6676:4:1;6664:17;;;6646:36;;6634:2;6619:18;11513:112:0;6504:184:1;16290:544:0;;;;;;;;;;-1:-1:-1;16290:544:0;;;;;:::i;:::-;;:::i;15821:110::-;;;;;;;;;;-1:-1:-1;15821:110:0;;;;;:::i;:::-;;:::i;14943:140::-;;;;;;;;;;-1:-1:-1;14943:140:0;;;;;:::i;:::-;;:::i;17614:273::-;;;;;;;;;;-1:-1:-1;17614:273:0;;;;;:::i;:::-;;:::i;5537:21::-;;;;;;;;;;-1:-1:-1;5537:21:0;;;;-1:-1:-1;;;;;5537:21:0;;;5368:46;;;;;;;;;;;;5410:4;5368:46;;6259:34;;;;;;;;;;-1:-1:-1;6259:34:0;;;;;;;;18405:189;;;;;;;;;;-1:-1:-1;18405:189:0;;;;;:::i;:::-;;:::i;19309:217::-;;;;;;;;;;-1:-1:-1;19309:217:0;;;;;:::i;:::-;;:::i;10150:654::-;;;;;;;;;;-1:-1:-1;10150:654:0;;;;;:::i;:::-;;:::i;15091:127::-;;;;;;;;;;-1:-1:-1;15091:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15182:28:0;15158:4;15182:28;;;:19;:28;;;;;;;;;15091:127;6300:36;;;;;;;;;;-1:-1:-1;6300:36:0;;;;;;;;;;;15226:134;;;;;;;;;;-1:-1:-1;15226:134:0;;;;;:::i;:::-;;:::i;6373:26::-;;;;;;;;;;;;;;;;14573:222;;;;;;;;;;-1:-1:-1;14573:222:0;;;;;:::i;:::-;;:::i;14803:132::-;;;;;;;;;;-1:-1:-1;14803:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;14897:30:0;14873:4;14897:30;;;:21;:30;;;;;;;;;14803:132;18167:108;;;;;;;;;;;;;:::i;12031:117::-;;;;;;;;;;-1:-1:-1;12031:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;12124:16:0;12097:7;12124:16;;;;;;;;;;;;12031:117;10812:225;;;;;;;;;;;;;:::i;7761:1627::-;;;;;;;;;;-1:-1:-1;7761:1627:0;;;;;:::i;:::-;;:::i;16100:182::-;;;;;;;;;;;;;:::i;14001:564::-;;;;;;;;;;-1:-1:-1;14001:564:0;;;;;:::i;:::-;;:::i;11807:79::-;;;;;;;;;;-1:-1:-1;11877:6:0;;;;;-1:-1:-1;;;;;11877:6:0;11807:79;;12816:175;;;;;;;;;;;;;:::i;24803:593::-;;;;;;;;;;;;;:::i;11631:84::-;;;;;;;;;;;;;:::i;12156:165::-;;;;;;;;;;-1:-1:-1;12156:165:0;;;;;:::i;:::-;;:::i;16842:444::-;;;;;;;;;;-1:-1:-1;16842:444:0;;;;;:::i;:::-;;:::i;25594:248::-;;;;;;;;;;-1:-1:-1;25594:248:0;;;;;:::i;:::-;;:::i;6098:34::-;;;;;;;;;;-1:-1:-1;6098:34:0;;;;;;;;19534:263;;;;;;;;;;-1:-1:-1;19534:263:0;;;;;:::i;:::-;;:::i;5065:141::-;;;;;;;;;;-1:-1:-1;5065:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8525:6:1;8558:15;;;8540:34;;8610:15;;;8605:2;8590:18;;8583:43;8662:15;;;8642:18;;;8635:43;;;;8714:15;;;8709:2;8694:18;;8687:43;8502:3;8487:19;5065:141:0;8292:444:1;17294:312:0;;;;;;;;;;-1:-1:-1;17294:312:0;;;;;:::i;:::-;;:::i;11892:133::-;;;;;;;;;;-1:-1:-1;11892:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11994:19:0;;;11976:7;11994:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11892:133;13313:680;;;;;;;;;;-1:-1:-1;13313:680:0;;;;;:::i;:::-;;:::i;25404:182::-;;;;;;;;;;;;;:::i;5755:199::-;;;;;;;;;;-1:-1:-1;5755:199:0;;;;;;-1:-1:-1;;;;;5755:199:0;;;;;;;;;;;-1:-1:-1;;;;;9828:15:1;;;9810:34;;9880:15;;;;9875:2;9860:18;;9853:43;9722:18;5755:199:0;9543:359:1;18602:699:0;;;;;;;;;;-1:-1:-1;18602:699:0;;;;;:::i;:::-;;:::i;5985:39::-;;;;;;;;;;-1:-1:-1;5985:39:0;;;;;;;;;;;15516:148;;;;;;;;;;-1:-1:-1;15516:148:0;;;;;:::i;:::-;;:::i;15939:153::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;;;;;;;;;16034:11:::1;::::0;:50:::1;::::0;;;;10830:14:1;;10823:22;16034:50:0::1;::::0;::::1;10805:41:1::0;10889:14;;10882:22;10862:18;;;10855:50;16034:11:0;;;::::1;-1:-1:-1::0;;;;;16034:11:0::1;::::0;:26:::1;::::0;10778:18:1;;16034:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15939:153:::0;;:::o;11721:80::-;11769:13;11793:5;11786:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11721:80;:::o;12329:161::-;12406:4;12423:37;12432:10;12444:7;12453:6;12423:8;:37::i;:::-;-1:-1:-1;12478:4:0;12329:161;;;;;:::o;18283:114::-;18379:9;;18330:7;;18375:13;;18379:9;;18375:2;:13;:::i;:::-;18357:14;;:32;;;;:::i;:::-;18350:39;;18283:114;:::o;11392:115::-;11447:7;11462;;11473:1;11462:12;11458:31;;11478:8;;;11458:31;-1:-1:-1;11497:7:0;;;11392:115::o;12999:306::-;-1:-1:-1;;;;;13120:19:0;;13099:4;13120:19;;;:11;:19;;;;;;;;13140:10;13120:31;;;;;;;;-1:-1:-1;;13120:52:0;13116:126;;-1:-1:-1;;;;;13189:19:0;;;;;;:11;:19;;;;;;;;13209:10;13189:31;;;;;;;:41;;13224:6;;13189:19;:41;;13224:6;;13189:41;:::i;:::-;;;;-1:-1:-1;;13116:126:0;13261:36;13271:6;13279:9;13290:6;13261:9;:36::i;:::-;13254:43;12999:306;-1:-1:-1;;;;12999:306:0:o;17895:264::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;18037:3:::1;18027:7;;:13;;;;:::i;:::-;18015:7;18004;17994;;:17;;;;:::i;:::-;17993:29;;;;:::i;:::-;:48;;17985:109;;;::::0;-1:-1:-1;;;17985:109:0;;13837:2:1;17985:109:0::1;::::0;::::1;13819:21:1::0;13876:2;13856:18;;;13849:30;13915:34;13895:18;;;13888:62;13986:18;13966;;;13959:46;14022:19;;17985:109:0::1;13635:412:1::0;17985:109:0::1;18144:7;18133;18123;;:17;;;;:::i;:::-;18122:29;;;;:::i;:::-;18105:14;:46:::0;-1:-1:-1;;17895:264:0:o;25850:447::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;25985:7:::1;:14;25966:8;:15;:33;25958:67;;;::::0;-1:-1:-1;;;25958:67:0;;14254:2:1;25958:67:0::1;::::0;::::1;14236:21:1::0;14293:2;14273:18;;;14266:30;14332:23;14312:18;;;14305:51;14373:18;;25958:67:0::1;14052:345:1::0;25958:67:0::1;26041:8;26036:254;26059:8;:15;26055:1;:19;;;26036:254;;;26144:9;::::0;26140:13:::1;::::0;26144:9:::1;;26140:2;:13;:::i;:::-;26129:7;26137:1;26129:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;26114:10;12097:7:::0;12124:16;;;;;;;;;;;26104:49:::1;;26096:80;;;::::0;-1:-1:-1;;;26096:80:0;;14793:2:1;26096:80:0::1;::::0;::::1;14775:21:1::0;14832:2;14812:18;;;14805:30;14871:20;14851:18;;;14844:48;14909:18;;26096:80:0::1;14591:342:1::0;26096:80:0::1;26191:87;26208:10;26220:8;26229:1;26220:11;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;26248:9:::1;::::0;26244:13:::1;::::0;26248:9:::1;;26244:2;:13;:::i;:::-;26233:7;26241:1;26233:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;26259:5;26266::::0;26273:4:::1;26191:16;:87::i;:::-;-1:-1:-1::0;26076:3:0;::::1;::::0;::::1;:::i;:::-;;;;26036:254;;;;25850:447:::0;;:::o;15672:141::-;15725:7;12124:16;;;;;;5596:42;12124:16;;;;15764:39;;12124:16;15764:39;:::i;:::-;15753:7;;:51;;;;:::i;11513:112::-;11565:5;11578:7;;11589:1;11578:12;11574:31;;11594:8;;;11574:31;-1:-1:-1;11613:9:0;;;;;11513:112::o;16290:544::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;16398:14:::1;::::0;::::1;;16397:15;16389:45;;;::::0;-1:-1:-1;;;16389:45:0;;15472:2:1;16389:45:0::1;::::0;::::1;15454:21:1::0;15511:2;15491:18;;;15484:30;15550:19;15530:18;;;15523:47;15587:18;;16389:45:0::1;15270:341:1::0;16389:45:0::1;5253:4;16453:6;:21;;;;:65;;;;;5303:4;16495:7;:23;;;;16453:65;:117;;;;;5357:4;16539:11;:31;;;;16453:117;16445:170;;;::::0;-1:-1:-1;;;16445:170:0;;15818:2:1;16445:170:0::1;::::0;::::1;15800:21:1::0;15857:2;15837:18;;;15830:30;15896:25;15876:18;;;15869:53;15939:18;;16445:170:0::1;15616:347:1::0;16445:170:0::1;5410:4;16634:16;16643:7:::0;16634:6;:16:::1;:::i;:::-;:35;;;;16626:80;;;::::0;-1:-1:-1;;;16626:80:0;;16343:2:1;16626:80:0::1;::::0;::::1;16325:21:1::0;;;16362:18;;;16355:30;16421:34;16401:18;;;16394:62;16473:18;;16626:80:0::1;16141:356:1::0;16626:80:0::1;16717:9;:25:::0;;::::1;::::0;;::::1;16753:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;16791:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;16290:544::o;15821:110::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;15890:11:::1;::::0;:33:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;15890:33:0::1;::::0;::::1;160:74:1::0;15890:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;15890:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15821:110:::0;:::o;14943:140::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;-1:-1:-1;;;;;15035:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;15035:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14943:140::o;17614:273::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;17759:4:::1;17745:7;;17755:1;17745:11;;;;:::i;:::-;:18;;;;:::i;:::-;17733:7;17722;17712;;:17;;;;:::i;:::-;17711:29;;;;:::i;:::-;:53;;17703:121;;;::::0;-1:-1:-1;;;17703:121:0;;16704:2:1;17703:121:0::1;::::0;::::1;16686:21:1::0;16743:2;16723:18;;;16716:30;16782:34;16762:18;;;16755:62;16853:25;16833:18;;;16826:53;16896:19;;17703:121:0::1;16502:419:1::0;17703:121:0::1;17872:7;17861;17851;;:17;;;;:::i;:::-;17850:29;;;;:::i;:::-;17835:12;:44:::0;-1:-1:-1;;17614:273:0:o;18405:189::-;18534:6;;-1:-1:-1;;;;;18534:6:0;18496:7;12124:16;;;;;;;;;;;5457:5;;18524:41;;18544:21;;18524:41;:::i;:::-;18523:62;;;;:::i;19309:217::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;19439:3:::1;19413:22;:29;;19405:64;;;::::0;-1:-1:-1;;;19405:64:0;;17128:2:1;19405:64:0::1;::::0;::::1;17110:21:1::0;17167:2;17147:18;;;17140:30;17206:24;17186:18;;;17179:52;17248:18;;19405:64:0::1;16926:346:1::0;19405:64:0::1;19480:13;:38:::0;19309:217::o;10150:654::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;-1:-1:-1;;;;;10229:22:0;::::1;10221:96;;;::::0;-1:-1:-1;;;10221:96:0;;17479:2:1;10221:96:0::1;::::0;::::1;17461:21:1::0;17518:2;17498:18;;;17491:30;17557:34;17537:18;;;17530:62;17628:31;17608:18;;;17601:59;17677:19;;10221:96:0::1;17277:425:1::0;10221:96:0::1;10336:16:::0;-1:-1:-1;;;;;10336:16:0;::::1;::::0;10328:90:::1;;;::::0;-1:-1:-1;;;10328:90:0;;17479:2:1;10328:90:0::1;::::0;::::1;17461:21:1::0;17518:2;17498:18;;;17491:30;17557:34;17537:18;;;17530:62;17628:31;17608:18;;;17601:59;17677:19;;10328:90:0::1;17277:425:1::0;10328:90:0::1;10449:6;::::0;10429:34:::1;::::0;10449:6:::1;::::0;::::1;-1:-1:-1::0;;;;;10449:6:0::1;10457:5;10429:19;:34::i;:::-;10474:35;10494:8;10504:4;10474:19;:35::i;:::-;10544:6;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;10544:6:0::1;10554:1;12124:16:::0;;;;;;;;;;;10534:21:::1;10530:127;;;10589:6;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;10589:6:0::1;12097:7:::0;12124:16;;;;;;;;;;;10572:73:::1;::::0;10589:6;10597:8;;10607:17:::1;12031:117:::0;10572:73:::1;;10530:127;10696:6;::::0;;-1:-1:-1;;;;;10713:17:0;;::::1;10696:6;10713:17:::0;;::::1;::::0;;::::1;;::::0;;;10746:40:::1;::::0;10696:6;;;::::1;;::::0;;;10746:40:::1;::::0;10677:16:::1;::::0;10746:40:::1;10210:594;10150:654:::0;:::o;15226:134::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;-1:-1:-1;;;;;15314:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;15314:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15226:134::o;14573:222::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;14657:14:::1;::::0;::::1;;14656:15;14648:24;;;::::0;::::1;;14714:4;-1:-1:-1::0;;;;;14691:28:0;::::1;::::0;14683:55:::1;;;::::0;-1:-1:-1;;;14683:55:0;;17909:2:1;14683:55:0::1;::::0;::::1;17891:21:1::0;17948:2;17928:18;;;17921:30;17987:16;17967:18;;;17960:44;18021:18;;14683:55:0::1;17707:338:1::0;14683:55:0::1;14749:11;:38:::0;;-1:-1:-1;;;;;14749:38:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;14573:222::o;18167:108::-;18257:9;;18210:7;;18253:13;;18257:9;;18253:2;:13;:::i;:::-;18237:12;;:30;;;;:::i;10812:225::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;10891:6:::1;::::0;10871:34:::1;::::0;10891:6:::1;::::0;::::1;-1:-1:-1::0;;;;;10891:6:0::1;10899:5;10871:19;:34::i;:::-;10935:6;::::0;;10952:19;;::::1;::::0;;;10987:42:::1;::::0;10935:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;10935:6:0::1;::::0;-1:-1:-1;;10935:6:0;;10987:42:::1;::::0;-1:-1:-1;;10987:42:0::1;10860:177;10812:225::o:0;7761:1627::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;7900:19:::1;::::0;::::1;;7899:20;7891:34;;;::::0;-1:-1:-1;;;7891:34:0;;18252:2:1;7891:34:0::1;::::0;::::1;18234:21:1::0;18291:1;18271:18;;;18264:29;18329:3;18309:18;;;18302:31;18350:18;;7891:34:0::1;18050:324:1::0;7891:34:0::1;7962:12;7936:11;;:39;;;;;-1:-1:-1::0;;;;;7936:39:0::1;;;;;-1:-1:-1::0;;;;;7936:39:0::1;;;;;;7990:11;;;;;;;;;-1:-1:-1::0;;;;;7990:11:0::1;-1:-1:-1::0;;;;;7990:27:0::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;7990:29:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;7986:408;;8371:11;::::0;-1:-1:-1;;;8371:11:0;;19934:2:1;8371:11:0::1;::::0;::::1;19916:21:1::0;19973:1;19953:18;;;19946:29;20011:3;19991:18;;;19984:31;20032:18;;8371:11:0::1;19732:324:1::0;7986:408:0::1;8142:5;:16;8150:8:::0;8142:5;:16:::1;:::i;:::-;-1:-1:-1::0;8173:7:0::1;:20;8183:10:::0;8173:7;:20:::1;:::i;:::-;-1:-1:-1::0;8208:14:0::1;:35:::0;;;8258:9:::1;:24:::0;;-1:-1:-1;;8258:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;8324:13:::1;::::0;:2:::1;:13;:::i;:::-;8307:14;;:30;;;;:::i;:::-;8297:7;:40:::0;-1:-1:-1;;;;8424:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;8424:9:0::1;-1:-1:-1::0;;;;;8424:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8413:42:0::1;;8456:9;;;;;;;;;-1:-1:-1::0;;;;;8456:9:0::1;-1:-1:-1::0;;;;;8456:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8413:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;9828:15:1;;;8413:75:0::1;::::0;::::1;9810:34:1::0;8482:4:0::1;9860:18:1::0;;;9853:43;9722:18;;8413:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8404:6;:84:::0;;;::::1;-1:-1:-1::0;;;;;8404:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;8499:15:0;;;-1:-1:-1;8499:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;8499:22:0::1;::::0;::::1;::::0;;8548:7:::1;::::0;8563:3:::1;::::0;8548:11:::1;::::0;:7;:11:::1;:::i;:::-;8547:19;;;;:::i;:::-;8532:12;:34:::0;8595:7:::1;::::0;8610:3:::1;::::0;8595:11:::1;::::0;8605:1:::1;8595:11;:::i;:::-;8594:19;;;;:::i;:::-;8577:14;:36:::0;8624:19:::1;:26:::0;;-1:-1:-1;;8624:26:0::1;8646:4;8624:26;::::0;;;8684:7:::1;::::0;-1:-1:-1;;;;;8624:26:0::1;8674:6:::0;;;::::1;::::0;::::1;8624:19;8666:15:::0;;;::::1;::::0;;;;;;;:25;;;8728:6;;8707:37;;8728:6;;;::::1;;::::0;8624:19;8707:37:::1;::::0;::::1;::::0;391:25:1;;;379:2;364:18;;245:177;8707:37:0::1;;;;;;;;8789:9;::::0;8757:62:::1;::::0;8774:4:::1;::::0;8789:9:::1;::::0;::::1;-1:-1:-1::0;;;;;8789:9:0::1;-1:-1:-1::0;;8757:8:0::1;:62::i;:::-;8839:6;::::0;8855:9:::1;::::0;8830:55:::1;::::0;-1:-1:-1;;;;;8839:6:0::1;::::0;;;::::1;::::0;::::1;::::0;8855:9;;;::::1;;-1:-1:-1::0;;8830:8:0::1;:55::i;:::-;8896:84;8913:6;;;;;;;;;-1:-1:-1::0;;;;;8913:6:0::1;8921:7;8952;8941;8931;;:17;;;;:::i;:::-;8930:29;;;;:::i;8896:84::-;-1:-1:-1::0;9008:6:0::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;9008:6:0::1;12097:7:::0;12124:16;;;;;;;;;;;8991:78:::1;::::0;9008:6;9024:4:::1;::::0;9031:17:::1;12031:117:::0;8991:78:::1;-1:-1:-1::0;9082:9:0::1;::::0;9160:4:::1;12097:7:::0;12124:16;;;;;;;;;;;9082:9:::1;::::0;;::::1;-1:-1:-1::0;;;;;9082:9:0::1;::::0;:25:::1;::::0;9115:21:::1;::::0;9305:6:::1;::::0;9082:270:::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;23414:15:1;;;9082:270:0::1;::::0;::::1;23396:34:1::0;23446:18;;;23439:34;;;;9219:1:0::1;23489:18:1::0;;;23482:34;;;23532:18;;;23525:34;9305:6:0::1;::::0;::::1;::::0;;::::1;23575:19:1::0;;;23568:44;9326:15:0::1;23628:19:1::0;;;23621:35;23307:19;;9082:270:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;9365:15;:13;:15::i;:::-;7761:1627:::0;;;;:::o;16100:182::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;16253:14:::1;:21:::0;;-1:-1:-1;;16253:21:0::1;16270:4;16253:21;::::0;;16100:182::o;14001:564::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;14083:7:::1;14078:480;;-1:-1:-1::0;;;;;14107:13:0;;::::1;14123:5;14107:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;14107:21:0::1;::::0;;14143:11:::1;::::0;:34;;;;;::::1;::::0;::::1;24146:74:1::0;;;;24236:18;;;24229:50;;;;14143:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;24119:18:1;;14143:34:0::1;23978:307:1::0;14078:480:0::1;14214:17;::::0;:22;14210:135:::1;;14303:6;14283:17;;14265:15;:35;;;;:::i;:::-;:44;14257:72;;;::::0;-1:-1:-1;;;14257:72:0;;24492:2:1;14257:72:0::1;::::0;::::1;24474:21:1::0;24531:2;24511:18;;;24504:30;24570:17;24550:18;;;24543:45;24605:18;;14257:72:0::1;24290:339:1::0;14257:72:0::1;-1:-1:-1::0;;;;;14368:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;14367:14;14359:54;;;::::0;-1:-1:-1;;;14359:54:0;;24836:2:1;14359:54:0::1;::::0;::::1;24818:21:1::0;24875:2;24855:18;;;24848:30;24914:29;24894:18;;;24887:57;24961:18;;14359:54:0::1;24634:351:1::0;14359:54:0::1;-1:-1:-1::0;;;;;14428:13:0;;::::1;;::::0;;;14444:4:::1;14428:13;::::0;;;;;;;;:20;;-1:-1:-1;;14428:20:0::1;::::0;::::1;::::0;;14483:15:::1;14463:17;:35:::0;14513:11:::1;::::0;:33;;;;;::::1;::::0;::::1;24146:74:1::0;;;;24236:18;;;24229:50;14513:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;24119:18:1;;14513:33:0::1;23978:307:1::0;14078:480:0::1;14001:564:::0;;:::o;12816:175::-;10004:6;;12882:4;;10004:6;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;12931:9:::1;::::0;12899:62:::1;::::0;12916:4:::1;::::0;12931:9:::1;::::0;::::1;-1:-1:-1::0;;;;;12931:9:0::1;-1:-1:-1::0;;12899:8:0::1;:62::i;:::-;-1:-1:-1::0;12979:4:0::1;12816:175:::0;:::o;24803:593::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;24865:14:::1;::::0;::::1;;24864:15;24856:52;;;::::0;-1:-1:-1;;;24856:52:0;;25192:2:1;24856:52:0::1;::::0;::::1;25174:21:1::0;25231:2;25211:18;;;25204:30;25270:26;25250:18;;;25243:54;25314:18;;24856:52:0::1;24990:348:1::0;24856:52:0::1;24927:16;::::0;::::1;::::0;::::1;;;24919:53;;;::::0;-1:-1:-1;;;24919:53:0;;25545:2:1;24919:53:0::1;::::0;::::1;25527:21:1::0;25584:2;25564:18;;;25557:30;25623:26;25603:18;;;25596:54;25667:18;;24919:53:0::1;25343:348:1::0;24919:53:0::1;24995:11;::::0;;;::::1;-1:-1:-1::0;;;;;24995:11:0::1;24983:106;;25037:11;:40:::0;;;::::1;25071:4;25037:40:::0;::::1;;::::0;;24983:106:::1;25103:11;::::0;25125:6:::1;::::0;25180:9:::1;::::0;25103:87:::1;::::0;;;;-1:-1:-1;;;;;25125:6:0;;::::1;25103:87;::::0;::::1;25919:74:1::0;26041:10;25140:12:0::1;26029:23:1::0;26009:18;;;26002:51;26101:18;25162:15:0::1;26089:31:1::0;26069:18;;;26062:59;25180:9:0::1;::::0;;::::1;26137:18:1::0;;;26130:45;25103:11:0;;;::::1;;::::0;:21:::1;::::0;25891:19:1;;25103:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;25212:14:0::1;:21:::0;;-1:-1:-1;;25212:21:0::1;25229:4;25212:21;::::0;;25271:6:::1;::::0;-1:-1:-1;;;;;25271:6:0::1;-1:-1:-1::0;12124:16:0;;;;;;;;;;;25287:5:::1;::::0;25261:22:::1;::::0;25281:2:::1;25261:22;:::i;:::-;25260:32;;;;:::i;:::-;25244:13;:48:::0;25327:6:::1;::::0;-1:-1:-1;;;;;25327:6:0::1;12097:7:::0;12124:16;;;;;;;;;;;25343:5:::1;::::0;25317:22:::1;::::0;25337:2:::1;25317:22;:::i;:::-;25316:32;;;;:::i;:::-;25303:10;:45:::0;25373:15:::1;25359:11;:29:::0;24803:593::o;11631:84::-;11681:13;11705:7;11698:14;;;;;:::i;12156:165::-;12234:4;12251:40;12261:10;12273:9;12284:6;12251:9;:40::i;:::-;-1:-1:-1;12309:4:0;;12156:165;-1:-1:-1;;;12156:165:0:o;16842:444::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;16947:7:::1;:29:::0;;::::1;17027:33:::0;;::::1;::::0;::::1;::::0;16987:29;;::::1;::::0;::::1;::::0;;;;16947;;::::1;16987::::0;;;;;;;::::1;17027:33;;::::0;;17049:11;17091:21:::1;17007:9:::0;16967;17091:21:::1;:::i;:::-;:35;;;;:::i;:::-;17071:7;:55:::0;;;::::1;::::0;::::1;::::0;;::::1;;;::::0;;17172:9:::1;:17:::0;-1:-1:-1;;17153:36:0::1;::::0;17172:17;;::::1;::::0;::::1;::::0;17153:16:::1;:36;:::i;:::-;17208:7;:17:::0;17137:52:::1;::::0;;::::1;::::0;-1:-1:-1;17208:17:0;;::::1;;:26:::0;-1:-1:-1;17208:26:0::1;17200:78;;;::::0;-1:-1:-1;;;17200:78:0;;26388:2:1;17200:78:0::1;::::0;::::1;26370:21:1::0;26427:2;26407:18;;;26400:30;26466:34;26446:18;;;26439:62;26537:9;26517:18;;;26510:37;26564:19;;17200:78:0::1;26186:403:1::0;25594:248:0;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;25693:4:::1;-1:-1:-1::0;;;;;25676:22:0;::::1;::::0;25668:62:::1;;;::::0;-1:-1:-1;;;25668:62:0;;26796:2:1;25668:62:0::1;::::0;::::1;26778:21:1::0;26835:2;26815:18;;;26808:30;26874:29;26854:18;;;26847:57;26921:18;;25668:62:0::1;26594:351:1::0;25668:62:0::1;25795:6;::::0;25803:30:::1;::::0;;;;25827:4:::1;25803:30;::::0;::::1;160:74:1::0;25763:5:0;;-1:-1:-1;;;;;25780:14:0;;::::1;::::0;::::1;::::0;25795:6:::1;::::0;::::1;::::0;;::::1;::::0;25780:14;;25803:15:::1;::::0;133:18:1;;25803:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25780:54;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;27331:55:1;;;25780:54:0::1;::::0;::::1;27313:74:1::0;27403:18;;;27396:34;27286:18;;25780:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19534:263::-:0;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;19643:19:::1;:33:::0;;-1:-1:-1;;19643:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;19687:22:::1;:47:::0;;-1:-1:-1;;19687:47:0::1;::::0;::::1;;;::::0;;19750:39:::1;::::0;2404:41:1;;;19750:39:0::1;::::0;2392:2:1;2377:18;19750:39:0::1;;;;;;;;19534:263:::0;;:::o;17294:312::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;-1:-1:-1;;;;;17408:23:0;::::1;::::0;;::::1;::::0;:52:::1;;-1:-1:-1::0;;;;;;17435:25:0;::::1;::::0;::::1;17408:52;17400:88;;;::::0;-1:-1:-1;;;17400:88:0;;27893:2:1;17400:88:0::1;::::0;::::1;27875:21:1::0;27932:2;27912:18;;;27905:30;27971:25;27951:18;;;27944:53;28014:18;;17400:88:0::1;27691:347:1::0;17400:88:0::1;17499:11;:42:::0;;-1:-1:-1;;;;;17499:42:0;;::::1;::::0;;;::::1;;::::0;;;17552:23;:46;;;;;::::1;::::0;::::1;;::::0;;17294:312::o;13313:680::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;13393:16:::1;::::0;::::1;::::0;::::1;;;13392:17;13384:60;;;::::0;-1:-1:-1;;;13384:60:0;;28245:2:1;13384:60:0::1;::::0;::::1;28227:21:1::0;28284:2;28264:18;;;28257:30;28323:32;28303:18;;;28296:60;28373:18;;13384:60:0::1;28043:354:1::0;13384:60:0::1;13455:20;13488:9;13455:43;;13509:16;13539:10;-1:-1:-1::0;;;;;13539:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13528:40:0::1;;13577:4;13584:10;-1:-1:-1::0;;;;;13584:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13528:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;9828:15:1;;;13528:74:0::1;::::0;::::1;9810:34:1::0;9880:15;;9860:18;;;9853:43;9722:18;;13528:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13621:6;::::0;-1:-1:-1;;;;;13621:6:0;;::::1;13631:5;13613:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;13613:23:0::1;::::0;;13509:93;;-1:-1:-1;13651:22:0;::::1;13647:200;;13710:10;-1:-1:-1::0;;;;;13710:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13699:43:0::1;;13751:4;13758:10;-1:-1:-1::0;;;;;13758:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13699:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;9828:15:1;;;13699:77:0::1;::::0;::::1;9810:34:1::0;9880:15;;9860:18;;;9853:43;9722:18;;13699:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13690:6;:86:::0;;;::::1;-1:-1:-1::0;;;;;13690:86:0;;;::::1;::::0;;;::::1;::::0;;13647:200:::1;;;13818:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;13818:17:0;::::1;;::::0;;13647:200:::1;13857:9;:22:::0;;;::::1;;-1:-1:-1::0;;;;;13857:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;13898:6:::1;::::0;;::::1;-1:-1:-1::0;13890:15:0;;;-1:-1:-1;13890:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;13890:22:0::1;::::0;;::::1;::::0;;13955:9;;13923:62:::1;::::0;13940:4:::1;::::0;13955:9;::::1;;-1:-1:-1::0;;13923:8:0::1;:62::i;25404:182::-:0;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;25471:16:::1;::::0;::::1;::::0;::::1;;;25470:17;25462:58;;;::::0;-1:-1:-1;;;25462:58:0;;28604:2:1;25462:58:0::1;::::0;::::1;28586:21:1::0;28643:2;28623:18;;;28616:30;28682;28662:18;;;28655:58;28730:18;;25462:58:0::1;28402:352:1::0;25462:58:0::1;25539:6;::::0;25531:47:::1;::::0;-1:-1:-1;;;;;25539:6:0::1;::::0;;::::1;::::0;;;::::1;::::0;25556:21:::1;25531:47:::0;::::1;;;::::0;::::1;::::0;;;25556:21;25539:6;25531:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25404:182::o:0;18602:699::-;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;18802:16:::1;18782;18772:7;;:26;;;;:::i;:::-;18771:47;;;;:::i;:::-;18755:13;:63:::0;18843:7:::1;::::0;18870:13;;18843:23:::1;::::0;18853:13;;18843:23:::1;:::i;:::-;18842:41;;;;:::i;:::-;18829:10;:54:::0;;;18902:13:::1;::::0;:27:::1;;18894:73;;;::::0;-1:-1:-1;;;18894:73:0;;28961:2:1;18894:73:0::1;::::0;::::1;28943:21:1::0;29000:2;28980:18;;;28973:30;29039:34;29019:18;;;29012:62;29110:3;29090:18;;;29083:31;29131:19;;18894:73:0::1;28759:397:1::0;18894:73:0::1;19011:6;::::0;-1:-1:-1;;;;;19011:6:0::1;12097:7:::0;12124:16;;;;;;;;;;;5457:5:::1;::::0;19001:23:::1;::::0;19021:3:::1;19001:23;:::i;:::-;19000:44;;;;:::i;:::-;18986:10;;:58;;18978:106;;;::::0;-1:-1:-1;;;18978:106:0;;29363:2:1;18978:106:0::1;::::0;::::1;29345:21:1::0;29402:2;29382:18;;;29375:30;29441:34;29421:18;;;29414:62;29512:5;29492:18;;;29485:33;29535:19;;18978:106:0::1;29161:399:1::0;18978:106:0::1;19127:9;19117:7;;:19;;;;:::i;:::-;19103:10;;:33;;19095:92;;;::::0;-1:-1:-1;;;19095:92:0;;29767:2:1;19095:92:0::1;::::0;::::1;29749:21:1::0;29806:2;29786:18;;;29779:30;29845:34;29825:18;;;29818:62;29916:16;29896:18;;;29889:44;29950:19;;19095:92:0::1;29565:410:1::0;19095:92:0::1;19233:9;19223:7;;:19;;;;:::i;:::-;19206:13;;:36;;19198:95;;;::::0;-1:-1:-1;;;19198:95:0;;29767:2:1;19198:95:0::1;::::0;::::1;29749:21:1::0;29806:2;29786:18;;;29779:30;29845:34;29825:18;;;29818:62;29916:16;29896:18;;;29889:44;29950:19;;19198:95:0::1;29565:410:1::0;15516:148:0;10004:6;;;;;-1:-1:-1;;;;;10004:6:0;10014:10;10004:20;9996:50;;;;-1:-1:-1;;;9996:50:0;;10499:2:1;9996:50:0;;;10481:21:1;10538:2;10518:18;;;10511:30;-1:-1:-1;;;10557:18:1;;;10550:47;10614:18;;9996:50:0;10297:341:1;9996:50:0;-1:-1:-1;;;;;15612:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;15612:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15516:148::o;12498:310::-;-1:-1:-1;;;;;12593:20:0;;12585:52;;;;-1:-1:-1;;;12585:52:0;;30182:2:1;12585:52:0;;;30164:21:1;30221:2;30201:18;;;30194:30;30260:21;30240:18;;;30233:49;30299:18;;12585:52:0;29980:343:1;12585:52:0;-1:-1:-1;;;;;12656:21:0;;12648:53;;;;-1:-1:-1;;;12648:53:0;;30182:2:1;12648:53:0;;;30164:21:1;30221:2;30201:18;;;30194:30;30260:21;30240:18;;;30233:49;30299:18;;12648:53:0;29980:343:1;12648:53:0;-1:-1:-1;;;;;12714:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12767:33;;391:25:1;;;12767:33:0;;364:18:1;12767:33:0;;;;;;;12498:310;;;:::o;20259:1946::-;20338:4;-1:-1:-1;;;;;20363:18:0;;20355:68;;;;-1:-1:-1;;;20355:68:0;;30530:2:1;20355:68:0;;;30512:21:1;30569:2;30549:18;;;30542:30;30608:34;30588:18;;;30581:62;30679:7;30659:18;;;30652:35;30704:19;;20355:68:0;30328:401:1;20355:68:0;-1:-1:-1;;;;;20442:16:0;;20434:64;;;;-1:-1:-1;;;20434:64:0;;30936:2:1;20434:64:0;;;30918:21:1;30975:2;30955:18;;;30948:30;31014:34;30994:18;;;30987:62;31085:5;31065:18;;;31058:33;31108:19;;20434:64:0;30734:399:1;20434:64:0;20526:1;20517:6;:10;20509:64;;;;-1:-1:-1;;;20509:64:0;;31340:2:1;20509:64:0;;;31322:21:1;31379:2;31359:18;;;31352:30;31418:34;31398:18;;;31391:62;31489:11;31469:18;;;31462:39;31518:19;;20509:64:0;31138:405:1;20509:64:0;-1:-1:-1;;;;;20672:13:0;;20584:8;20672:13;;;:7;:13;;;;;;20584:8;;;;20672:13;;20668:162;;;20708:4;20702:10;;20668:162;;;-1:-1:-1;;;;;20734:11:0;;;;;;:7;:11;;;;;;;;20730:100;;;20769:4;20762:11;;20730:100;;;-1:-1:-1;20814:4:0;20730:100;20844:20;20855:4;20861:2;20844:10;:20::i;:::-;20840:644;;;20885:14;;;;20881:89;;20920:34;;-1:-1:-1;;;20920:34:0;;31750:2:1;20920:34:0;;;31732:21:1;31789:2;31769:18;;;31762:30;31828:26;31808:18;;;31801:54;31872:18;;20920:34:0;31548:348:1;20881:89:0;20988:3;:11;;;;20995:4;20988:11;20984:232;;;-1:-1:-1;;;;;21024:27:0;;;;;;:21;:27;;;;;;;;21023:28;:58;;;;-1:-1:-1;;;;;;21056:25:0;;;;;;:21;:25;;;;;;;;21055:26;21023:58;21019:182;;;21124:12;;21114:6;:22;;21106:75;;;;-1:-1:-1;;;21106:75:0;;32103:2:1;21106:75:0;;;32085:21:1;32142:2;32122:18;;;32115:30;32181:34;32161:18;;;32154:62;32252:10;32232:18;;;32225:38;32280:19;;21106:75:0;31901:404:1;21106:75:0;21248:9;;-1:-1:-1;;;;;21234:24:0;;;21248:9;;;;;21234:24;;;;:33;;;21263:4;21262:5;21234:33;21230:243;;;-1:-1:-1;;;;;21293:25:0;;;;;;:21;:25;;;;;;;;21288:170;;21377:14;;21367:6;21351:13;21361:2;-1:-1:-1;;;;;12124:16:0;12097:7;12124:16;;;;;;;;;;;;12031:117;21351:13;:22;;;;:::i;:::-;:40;;21343:95;;;;-1:-1:-1;;;21343:95:0;;32512:2:1;21343:95:0;;;32494:21:1;32551:2;32531:18;;;32524:30;32590:34;32570:18;;;32563:62;32661:12;32641:18;;;32634:40;32691:19;;21343:95:0;32310:406:1;21343:95:0;21500:4;21496:632;;;21526:6;;;;21521:596;;21557:19;;;;;;;21553:549;;;21650:4;21601:28;12124:16;;;;;;;;;;;21707:13;;21683:37;;21679:404;;21767:10;;21808:22;;;;21804:97;;;21865:13;;21855:6;;-1:-1:-1;;;;;21855:6:0;12097:7;12124:16;;;;;;;;;;;5457:5;;21845:33;;;:::i;:::-;21844:54;;;;:::i;:::-;21834:64;;21804:97;21955:7;21931:20;:31;21927:72;;21989:7;21966:30;;21927:72;22025:34;22038:20;22025:12;:34::i;:::-;21722:361;21679:404;21578:524;21553:549;22145:52;22162:4;22168:2;22172:6;22180:3;22185:4;22191:5;22145:16;:52::i;:::-;22138:59;20259:1946;-1:-1:-1;;;;;;;20259:1946:0:o;26305:1055::-;26424:4;26445:20;26456:4;26462:2;26445:10;:20::i;:::-;26441:228;;;26500:11;;:39;;;;;-1:-1:-1;;;;;33002:15:1;;;26500:39:0;;;32984:34:1;33054:15;;;33034:18;;;33027:43;33086:18;;;33079:34;;;26469:12:0;;26500:11;;;;;:21;;32896:18:1;;26500:39:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;26500:39:0;;;;;;;;-1:-1:-1;;26500:39:0;;;;;;;;;;;;:::i;:::-;;;26496:122;;26607:8;;;26496:122;26590:5;-1:-1:-1;26636:7:0;26632:26;;26647:8;;;26632:26;26467:202;26441:228;-1:-1:-1;;;;;26713:25:0;;26679:12;26713:25;;;:19;:25;;;;;;26694:4;;26713:25;;;:52;;-1:-1:-1;;;;;;26742:23:0;;;;;;:19;:23;;;;;;;;26713:52;26709:99;;;-1:-1:-1;26791:5:0;26709:99;-1:-1:-1;;;;;26818:13:0;;:7;:13;;;;;;;;;;:23;;26835:6;;26818:7;:23;;26835:6;;26818:23;:::i;:::-;;;;-1:-1:-1;26852:22:0;;-1:-1:-1;26878:7:0;26877:55;;26926:6;26877:55;;;26889:34;26899:4;26905:3;26910:4;26916:6;26889:9;:34::i;:::-;26852:80;;26958:14;26943:7;:11;26951:2;-1:-1:-1;;;;;26943:11:0;-1:-1:-1;;;;;26943:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;27003:2;-1:-1:-1;;;;;26988:34:0;26997:4;-1:-1:-1;;;;;26988:34:0;;27007:14;26988:34;;;;391:25:1;;379:2;364:18;;245:177;26988:34:0;;;;;;;;27038:16;;;;;;;27033:298;;27071:28;27090:4;27096:2;27071:18;:28::i;:::-;27119:16;;;;;;;27118:17;:41;;;;;27139:20;27150:4;27156:2;27139:10;:20::i;:::-;27118:77;;;;-1:-1:-1;;;;;;27164:31:0;;;;;;:25;:31;;;;;;;;27163:32;27118:77;:111;;;;-1:-1:-1;;;;;;27200:29:0;;;;;;:25;:29;;;;;;;;27199:30;27118:111;:121;;;;;27234:5;27233:6;27118:121;27114:206;;;27260:44;;-1:-1:-1;;;27260:44:0;;33326:2:1;27260:44:0;;;33308:21:1;33365:2;33345:18;;;33338:30;33404:34;33384:18;;;33377:62;33475:4;33455:18;;;33448:32;33497:19;;27260:44:0;33124:398:1;27114:206:0;-1:-1:-1;27348:4:0;;26305:1055;-1:-1:-1;;;;;;;;26305:1055:0:o;19805:446::-;19906:6;;19874:4;;-1:-1:-1;;;;;19898:14:0;;;19906:6;;;;;19898:14;;;;:43;;-1:-1:-1;19935:6:0;;-1:-1:-1;;;;;19929:12:0;;;19935:6;;;;;19929:12;;19898:43;:79;;;;-1:-1:-1;19971:6:0;;;;;-1:-1:-1;;;;;19971:6:0;19958:9;:19;;19898:79;:118;;;;-1:-1:-1;;;;;;19995:21:0;;;;;;:17;:21;;;;;;;;19994:22;19898:118;:159;;;;-1:-1:-1;;;;;;20034:23:0;;;;;;:17;:23;;;;;;;;20033:24;19898:159;:186;;;;-1:-1:-1;;;;;;20074:10:0;;5596:42;20074:10;;19898:186;:219;;;;-1:-1:-1;;;;;;20101:16:0;;;;19898:219;:257;;;;-1:-1:-1;;;;;;20134:21:0;;20150:4;20134:21;;19898:257;:302;;;;-1:-1:-1;20188:11:0;;-1:-1:-1;;;;;20172:28:0;;;20188:11;;;;;20172:28;;19898:302;:345;;;;-1:-1:-1;20231:11:0;;-1:-1:-1;;;;;20217:26:0;;;20231:11;;;;;20217:26;;19898:345;19891:352;19805:446;-1:-1:-1;;;19805:446:0:o;22213:2011::-;6564:6;:13;;-1:-1:-1;;6564:13:0;6573:4;6564:13;;;22296:30:::1;::::0;;::::1;::::0;::::1;::::0;;22319:7:::1;22296:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;6564:6;22341:21;22337:60:::1;;22379:7;;;22337:60;22433:4;22413:26;::::0;;;:11:::1;:26;::::0;;;;;;;22448:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;22448:9:0::1;22413:46:::0;;;;;;;;-1:-1:-1;;22413:67:0::1;22409:166;;22517:4;22497:26;::::0;;;:11:::1;:26;::::0;;;;;;;22532:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;22532:9:0::1;22497:46:::0;;;;;;;-1:-1:-1;;22497:66:0;;22409:166:::1;22587:17;22672:1;22652:6;:16;;;22608:60;;22632:6;:16;;;22609:39;;:20;:39;;;;:::i;:::-;22608:60;;;;:::i;:::-;22607:66;;;;:::i;:::-;22587:86:::0;-1:-1:-1;22684:15:0::1;22702:32;22587:86:::0;22702:20;:32:::1;:::i;:::-;22779:16;::::0;;22793:1:::1;22779:16:::0;;;;;::::1;::::0;;22684:50;;-1:-1:-1;22755:21:0::1;::::0;22779:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22779:16:0::1;22755:40;;22824:4;22806;22811:1;22806:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;22806:23:0::1;;;-1:-1:-1::0;;;;;22806:23:0::1;;;::::0;::::1;22850:9;;;;;;;;;-1:-1:-1::0;;;;;22850:9:0::1;-1:-1:-1::0;;;;;22850:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22840:4;22845:1;22840:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22840:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;22883:9:::1;::::0;:186:::1;::::0;;;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;22958:7;;22980:1:::1;::::0;22996:4;;23023::::1;::::0;23043:15:::1;::::0;22883:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;22879:233;;23094:7;;;;;;22879:233;23145:21;23124:18;23231:7:::0;23205:22:::1;23218:9:::0;23145:21;23205:22:::1;:::i;:::-;23204:34;;;;:::i;:::-;23177:61:::0;-1:-1:-1;23255:13:0;;23251:400:::1;;23289:9;::::0;:222:::1;::::0;;;;23366:4:::1;23289:222;::::0;::::1;23396:34:1::0;23446:18;;;23439:34;;;23418:1:0::1;23489:18:1::0;;;23482:34;;;23532:18;;;23525:34;5596:42:0::1;23575:19:1::0;;;23568:44;23481:15:0::1;23628:19:1::0;;;23621:35;23289:9:0::1;::::0;;::::1;-1:-1:-1::0;;;;;23289:9:0::1;::::0;:25:::1;::::0;23322:16;;23307:19:1;;23289:222:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23289:222:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;23289:222:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;23285:355;;23618:7;;;;;;;;23285:355;-1:-1:-1::0;;23536:40:0::1;::::0;;34732:25:1;;;34788:2;34773:18;;34766:34;;;23536:40:0::1;::::0;-1:-1:-1;34705:18:1;23536:40:0::1;;;;;;;23285:355;23663:30;23677:16:::0;23663:30;::::1;:::i;:::-;;;23724:6;:16;;;23704:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;23839:16:::1;::::0;::::1;::::0;23817:18:::1;::::0;::::1;::::0;23751:12:::1;::::0;-1:-1:-1;23751:12:0;;23803:52;;::::1;::::0;23804:31:::1;::::0;::::1;:10:::0;:31:::1;:::i;:::-;23803:52;;;;:::i;:::-;23774:81:::0;-1:-1:-1;23866:24:0::1;23893:31;23774:81:::0;23893:10;:31:::1;:::i;:::-;23939:16;::::0;::::1;::::0;23866:58;;-1:-1:-1;23939:20:0::1;;::::0;23935:133:::1;;23989:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;23989:21:0;;::::1;::::0;24046:5:::1;::::0;24023:16;;23989:67:::1;::::0;;;24023:16;23989:21;24046:5;23989:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23976:80:0;;-1:-1:-1;;23935:133:0::1;24082:18;::::0;::::1;::::0;:22:::1;;::::0;24078:139:::1;;24134:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;24134:23:0;;::::1;::::0;24195:5:::1;::::0;24170:18;;24134:71:::1;::::0;;;24170:18;24134:23;24195:5;24134:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24121:84:0;;-1:-1:-1;;24078:139:0::1;22285:1939;;;;;;;;;6588:1;-1:-1:-1::0;6600:6:0;:14;;-1:-1:-1;;6600:14:0;;;22213:2011::o;27368:804::-;27456:7;27476:18;27509:3;27505:205;;;-1:-1:-1;27542:9:0;:16;;;27505:205;;;27580:4;27576:134;;;-1:-1:-1;27614:9:0;:17;;;;;;27576:134;;;-1:-1:-1;27677:9:0;:21;;;;;;27576:134;27724:10;27738:1;27724:15;27720:39;;27750:6;27743:13;;;;;27720:39;27781:11;;;;;-1:-1:-1;;;;;27781:11:0;27805:4;27773:37;:110;;;;;27828:13;27845:1;27828:18;:54;;;;27863:13;27880:2;27863:19;27828:54;27769:138;;;-1:-1:-1;27900:4:0;27769:138;27917:17;5457:5;27937:19;27946:10;27937:6;:19;:::i;:::-;:38;;;;:::i;:::-;27917:58;-1:-1:-1;27990:13:0;;27986:141;;28036:4;28020:7;:22;;;;;;;;;;:35;;28046:9;;28020:7;:35;;28046:9;;28020:35;:::i;:::-;;;;-1:-1:-1;;28075:40:0;;391:25:1;;;28098:4:0;;-1:-1:-1;;;;;28075:40:0;;;;;379:2:1;364:18;28075:40:0;;;;;;;27986:141;28146:18;28155:9;28146:6;:18;:::i;24232:563::-;24315:16;;;;;;;24314:17;24306:65;;;;-1:-1:-1;;;24306:65:0;;35399:2:1;24306:65:0;;;35381:21:1;35438:2;35418:18;;;35411:30;35477:34;35457:18;;;35450:62;35548:5;35528:18;;;35521:33;35571:19;;24306:65:0;35197:399:1;24306:65:0;24387:20;24398:4;24404:2;24387:10;:20::i;:::-;24386:21;:37;;;;-1:-1:-1;24417:6:0;;-1:-1:-1;;;;;24411:12:0;;;24417:6;;24411:12;24386:37;24382:406;;;-1:-1:-1;;;;;24440:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;24440:30:0;;;24466:4;24440:30;;;;;;24485:19;:25;;;;;:32;;;;;;;;;;24532:16;:23;;-1:-1:-1;;24532:23:0;24440:30;24532:23;;;;;24582:11;;;;24570:114;;24628:11;:40;;;;24662:4;24628:40;;;;;24570:114;24698:19;:26;;-1:-1:-1;;24698:26:0;;;;;24744:32;;-1:-1:-1;2404:41:1;;24744:32:0;;2392:2:1;2377:18;24744:32:0;2264:187:1;427:118;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;1301:250::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1486:11;;;1480:18;1467:11;;;1460:39;1432:2;1425:10;1396:113;;;-1:-1:-1;;1543:1:1;1525:16;;1518:27;1301:250::o;1556:455::-;1705:2;1694:9;1687:21;1668:4;1737:6;1731:13;1780:6;1775:2;1764:9;1760:18;1753:34;1796:79;1868:6;1863:2;1852:9;1848:18;1843:2;1835:6;1831:15;1796:79;:::i;:::-;1927:2;1915:15;-1:-1:-1;;1911:88:1;1896:104;;;;2002:2;1892:113;;1556:455;-1:-1:-1;;1556:455:1:o;2456:154::-;-1:-1:-1;;;;;2535:5:1;2531:54;2524:5;2521:65;2511:93;;2600:1;2597;2590:12;2615:315;2683:6;2691;2744:2;2732:9;2723:7;2719:23;2715:32;2712:52;;;2760:1;2757;2750:12;2712:52;2799:9;2786:23;2818:31;2843:5;2818:31;:::i;:::-;2868:5;2920:2;2905:18;;;;2892:32;;-1:-1:-1;;;2615:315:1:o;2935:247::-;2994:6;3047:2;3035:9;3026:7;3022:23;3018:32;3015:52;;;3063:1;3060;3053:12;3015:52;3102:9;3089:23;3121:31;3146:5;3121:31;:::i;3187:456::-;3264:6;3272;3280;3333:2;3321:9;3312:7;3308:23;3304:32;3301:52;;;3349:1;3346;3339:12;3301:52;3388:9;3375:23;3407:31;3432:5;3407:31;:::i;:::-;3457:5;-1:-1:-1;3514:2:1;3499:18;;3486:32;3527:33;3486:32;3527:33;:::i;:::-;3187:456;;3579:7;;-1:-1:-1;;;3633:2:1;3618:18;;;;3605:32;;3187:456::o;3648:248::-;3716:6;3724;3777:2;3765:9;3756:7;3752:23;3748:32;3745:52;;;3793:1;3790;3783:12;3745:52;-1:-1:-1;;3816:23:1;;;3886:2;3871:18;;;3858:32;;-1:-1:-1;3648:248:1:o;3901:184::-;3953:77;3950:1;3943:88;4050:4;4047:1;4040:15;4074:4;4071:1;4064:15;4090:334;4161:2;4155:9;4217:2;4207:13;;-1:-1:-1;;4203:86:1;4191:99;;4320:18;4305:34;;4341:22;;;4302:62;4299:88;;;4367:18;;:::i;:::-;4403:2;4396:22;4090:334;;-1:-1:-1;4090:334:1:o;4429:183::-;4489:4;4522:18;4514:6;4511:30;4508:56;;;4544:18;;:::i;:::-;-1:-1:-1;4589:1:1;4585:14;4601:4;4581:25;;4429:183::o;4617:662::-;4671:5;4724:3;4717:4;4709:6;4705:17;4701:27;4691:55;;4742:1;4739;4732:12;4691:55;4778:6;4765:20;4804:4;4828:60;4844:43;4884:2;4844:43;:::i;:::-;4828:60;:::i;:::-;4922:15;;;5008:1;5004:10;;;;4992:23;;4988:32;;;4953:12;;;;5032:15;;;5029:35;;;5060:1;5057;5050:12;5029:35;5096:2;5088:6;5084:15;5108:142;5124:6;5119:3;5116:15;5108:142;;;5190:17;;5178:30;;5228:12;;;;5141;;5108:142;;;-1:-1:-1;5268:5:1;4617:662;-1:-1:-1;;;;;;4617:662:1:o;5284:1215::-;5402:6;5410;5463:2;5451:9;5442:7;5438:23;5434:32;5431:52;;;5479:1;5476;5469:12;5431:52;5519:9;5506:23;5548:18;5589:2;5581:6;5578:14;5575:34;;;5605:1;5602;5595:12;5575:34;5643:6;5632:9;5628:22;5618:32;;5688:7;5681:4;5677:2;5673:13;5669:27;5659:55;;5710:1;5707;5700:12;5659:55;5746:2;5733:16;5768:4;5792:60;5808:43;5848:2;5808:43;:::i;5792:60::-;5886:15;;;5968:1;5964:10;;;;5956:19;;5952:28;;;5917:12;;;;5992:19;;;5989:39;;;6024:1;6021;6014:12;5989:39;6048:11;;;;6068:217;6084:6;6079:3;6076:15;6068:217;;;6164:3;6151:17;6181:31;6206:5;6181:31;:::i;:::-;6225:18;;6101:12;;;;6263;;;;6068:217;;;6304:5;-1:-1:-1;;6347:18:1;;6334:32;;-1:-1:-1;;6378:16:1;;;6375:36;;;6407:1;6404;6397:12;6375:36;;6430:63;6485:7;6474:8;6463:9;6459:24;6430:63;:::i;:::-;6420:73;;;5284:1215;;;;;:::o;6693:159::-;6760:20;;6820:6;6809:18;;6799:29;;6789:57;;6842:1;6839;6832:12;6789:57;6693:159;;;:::o;6857:328::-;6931:6;6939;6947;7000:2;6988:9;6979:7;6975:23;6971:32;6968:52;;;7016:1;7013;7006:12;6968:52;7039:28;7057:9;7039:28;:::i;:::-;7029:38;;7086:37;7119:2;7108:9;7104:18;7086:37;:::i;:::-;7076:47;;7142:37;7175:2;7164:9;7160:18;7142:37;:::i;:::-;7132:47;;6857:328;;;;;:::o;7190:382::-;7255:6;7263;7316:2;7304:9;7295:7;7291:23;7287:32;7284:52;;;7332:1;7329;7322:12;7284:52;7371:9;7358:23;7390:31;7415:5;7390:31;:::i;7577:180::-;7636:6;7689:2;7677:9;7668:7;7664:23;7660:32;7657:52;;;7705:1;7702;7695:12;7657:52;-1:-1:-1;7728:23:1;;7577:180;-1:-1:-1;7577:180:1:o;7762:525::-;7848:6;7856;7864;7872;7925:3;7913:9;7904:7;7900:23;7896:33;7893:53;;;7942:1;7939;7932:12;7893:53;7981:9;7968:23;8000:31;8025:5;8000:31;:::i;:::-;8050:5;-1:-1:-1;8102:2:1;8087:18;;8074:32;;-1:-1:-1;8153:2:1;8138:18;;8125:32;;-1:-1:-1;8209:2:1;8194:18;;8181:32;8222:33;8181:32;8222:33;:::i;:::-;7762:525;;;;-1:-1:-1;7762:525:1;;-1:-1:-1;;7762:525:1:o;8741:404::-;8825:6;8833;8886:2;8874:9;8865:7;8861:23;8857:32;8854:52;;;8902:1;8899;8892:12;8854:52;8941:9;8928:23;8960:31;8985:5;8960:31;:::i;:::-;9010:5;-1:-1:-1;9067:2:1;9052:18;;9039:32;9080:33;9039:32;9080:33;:::i;9907:385::-;9993:6;10001;10009;10017;10070:3;10058:9;10049:7;10045:23;10041:33;10038:53;;;10087:1;10084;10077:12;10038:53;-1:-1:-1;;10110:23:1;;;10180:2;10165:18;;10152:32;;-1:-1:-1;10231:2:1;10216:18;;10203:32;;10282:2;10267:18;10254:32;;-1:-1:-1;9907:385:1;-1:-1:-1;9907:385:1:o;10916:437::-;10995:1;10991:12;;;;11038;;;11059:61;;11113:4;11105:6;11101:17;11091:27;;11059:61;11166:2;11158:6;11155:14;11135:18;11132:38;11129:218;;11203:77;11200:1;11193:88;11304:4;11301:1;11294:15;11332:4;11329:1;11322:15;11129:218;;10916:437;;;:::o;11358:184::-;11410:77;11407:1;11400:88;11507:4;11504:1;11497:15;11531:4;11528:1;11521:15;11547:482;11636:1;11679:5;11636:1;11693:330;11714:7;11704:8;11701:21;11693:330;;;11833:4;-1:-1:-1;;11761:77:1;11755:4;11752:87;11749:113;;;11842:18;;:::i;:::-;11892:7;11882:8;11878:22;11875:55;;;11912:16;;;;11875:55;11991:22;;;;11951:15;;;;11693:330;;;11697:3;11547:482;;;;;:::o;12034:866::-;12083:5;12113:8;12103:80;;-1:-1:-1;12154:1:1;12168:5;;12103:80;12202:4;12192:76;;-1:-1:-1;12239:1:1;12253:5;;12192:76;12284:4;12302:1;12297:59;;;;12370:1;12365:130;;;;12277:218;;12297:59;12327:1;12318:10;;12341:5;;;12365:130;12402:3;12392:8;12389:17;12386:43;;;12409:18;;:::i;:::-;-1:-1:-1;;12465:1:1;12451:16;;12480:5;;12277:218;;12579:2;12569:8;12566:16;12560:3;12554:4;12551:13;12547:36;12541:2;12531:8;12528:16;12523:2;12517:4;12514:12;12510:35;12507:77;12504:159;;;-1:-1:-1;12616:19:1;;;12648:5;;12504:159;12695:34;12720:8;12714:4;12695:34;:::i;:::-;12825:6;-1:-1:-1;;12753:79:1;12744:7;12741:92;12738:118;;;12836:18;;:::i;:::-;12874:20;;12034:866;-1:-1:-1;;;12034:866:1:o;12905:140::-;12963:5;12992:47;13033:4;13023:8;13019:19;13013:4;12992:47;:::i;13050:274::-;13090:1;13116;13106:189;;13151:77;13148:1;13141:88;13252:4;13249:1;13242:15;13280:4;13277:1;13270:15;13106:189;-1:-1:-1;13309:9:1;;13050:274::o;13329:128::-;13396:9;;;13417:11;;;13414:37;;;13431:18;;:::i;13462:168::-;13535:9;;;13566;;13583:15;;;13577:22;;13563:37;13553:71;;13604:18;;:::i;14402:184::-;14454:77;14451:1;14444:88;14551:4;14548:1;14541:15;14575:4;14572:1;14565:15;14938:197;14976:3;15004:6;15045:2;15038:5;15034:14;15072:2;15063:7;15060:15;15057:41;;15078:18;;:::i;:::-;15127:1;15114:15;;14938:197;-1:-1:-1;;;14938:197:1:o;15140:125::-;15205:9;;;15226:10;;;15223:36;;;15239:18;;:::i;15968:168::-;16035:6;16061:10;;;16073;;;16057:27;;16096:11;;;16093:37;;;16110:18;;:::i;:::-;16093:37;15968:168;;;;:::o;18379:569::-;18433:5;18486:3;18479:4;18471:6;18467:17;18463:27;18453:55;;18504:1;18501;18494:12;18453:55;18533:6;18527:13;18559:18;18555:2;18552:26;18549:52;;;18581:18;;:::i;:::-;18625:114;18733:4;-1:-1:-1;;18657:4:1;18653:2;18649:13;18645:86;18641:97;18625:114;:::i;:::-;18764:2;18755:7;18748:19;18810:3;18803:4;18798:2;18790:6;18786:15;18782:26;18779:35;18776:55;;;18827:1;18824;18817:12;18776:55;18840:77;18914:2;18907:4;18898:7;18894:18;18887:4;18879:6;18875:17;18840:77;:::i;18953:774::-;19068:6;19076;19084;19092;19145:3;19133:9;19124:7;19120:23;19116:33;19113:53;;;19162:1;19159;19152:12;19113:53;19195:9;19189:16;19224:18;19265:2;19257:6;19254:14;19251:34;;;19281:1;19278;19271:12;19251:34;19304:61;19357:7;19348:6;19337:9;19333:22;19304:61;:::i;:::-;19294:71;;19411:2;19400:9;19396:18;19390:25;19374:41;;19440:2;19430:8;19427:16;19424:36;;;19456:1;19453;19446:12;19424:36;;19479:63;19534:7;19523:8;19512:9;19508:24;19479:63;:::i;:::-;19469:73;;;19582:2;19571:9;19567:18;19561:25;19551:35;;19629:2;19618:9;19614:18;19608:25;19673:4;19666:5;19662:16;19655:5;19652:27;19642:55;;19693:1;19690;19683:12;20187:545;20289:2;20284:3;20281:11;20278:448;;;20325:1;20350:5;20346:2;20339:17;20395:4;20391:2;20381:19;20465:2;20453:10;20449:19;20446:1;20442:27;20436:4;20432:38;20501:4;20489:10;20486:20;20483:47;;;-1:-1:-1;20524:4:1;20483:47;20579:2;20574:3;20570:12;20567:1;20563:20;20557:4;20553:31;20543:41;;20634:82;20652:2;20645:5;20642:13;20634:82;;;20697:17;;;20678:1;20667:13;20634:82;;20968:1471;21094:3;21088:10;21121:18;21113:6;21110:30;21107:56;;;21143:18;;:::i;:::-;21172:97;21262:6;21222:38;21254:4;21248:11;21222:38;:::i;:::-;21216:4;21172:97;:::i;:::-;21324:4;;21388:2;21377:14;;21405:1;21400:782;;;;22226:1;22243:6;22240:89;;;-1:-1:-1;22295:19:1;;;22289:26;22240:89;-1:-1:-1;;20865:1:1;20861:11;;;20857:84;20853:89;20843:100;20949:1;20945:11;;;20840:117;22342:81;;21370:1063;;21400:782;20134:1;20127:14;;;20171:4;20158:18;;-1:-1:-1;;21436:79:1;;;21613:236;21627:7;21624:1;21621:14;21613:236;;;21716:19;;;21710:26;21695:42;;21808:27;;;;21776:1;21764:14;;;;21643:19;;21613:236;;;21617:3;21877:6;21868:7;21865:19;21862:261;;;21938:19;;;21932:26;-1:-1:-1;;22021:1:1;22017:14;;;22033:3;22013:24;22009:97;22005:102;21990:118;21975:134;;21862:261;-1:-1:-1;;;;;22169:1:1;22153:14;;;22149:22;22136:36;;-1:-1:-1;20968:1471:1:o;22444:251::-;22514:6;22567:2;22555:9;22546:7;22542:23;22538:32;22535:52;;;22583:1;22580;22573:12;22535:52;22615:9;22609:16;22634:31;22659:5;22634:31;:::i;23667:306::-;23755:6;23763;23771;23824:2;23812:9;23803:7;23799:23;23795:32;23792:52;;;23840:1;23837;23830:12;23792:52;23869:9;23863:16;23853:26;;23919:2;23908:9;23904:18;23898:25;23888:35;;23963:2;23952:9;23948:18;23942:25;23932:35;;23667:306;;;;;:::o;26950:184::-;27020:6;27073:2;27061:9;27052:7;27048:23;27044:32;27041:52;;;27089:1;27086;27079:12;27041:52;-1:-1:-1;27112:16:1;;26950:184;-1:-1:-1;26950:184:1:o;27441:245::-;27508:6;27561:2;27549:9;27540:7;27536:23;27532:32;27529:52;;;27577:1;27574;27567:12;27529:52;27609:9;27603:16;27628:28;27650:5;27628:28;:::i;33527:1026::-;33789:4;33837:3;33826:9;33822:19;33868:6;33857:9;33850:25;33894:2;33932:6;33927:2;33916:9;33912:18;33905:34;33975:3;33970:2;33959:9;33955:18;33948:31;33999:6;34034;34028:13;34065:6;34057;34050:22;34103:3;34092:9;34088:19;34081:26;;34142:2;34134:6;34130:15;34116:29;;34163:1;34173:218;34187:6;34184:1;34181:13;34173:218;;;34252:13;;-1:-1:-1;;;;;34248:62:1;34236:75;;34366:15;;;;34331:12;;;;34209:1;34202:9;34173:218;;;-1:-1:-1;;;;;;;34447:55:1;;;;34442:2;34427:18;;34420:83;-1:-1:-1;;;34534:3:1;34519:19;34512:35;34408:3;33527:1026;-1:-1:-1;;;33527:1026:1:o;34811:171::-;34879:6;34918:10;;;34906;;;34902:27;;34941:12;;;34938:38;;;34956:18;;:::i

Swarm Source

ipfs://297e7a0b02edb128c1138612d43f8136c33ddfc32d452304989b61d5a21af0e5
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.