ETH Price: $2,287.82 (+0.48%)

Token

Ringan (SHA)
 

Overview

Max Total Supply

1,000,000,000 SHA

Holders

132

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
wantsumfuch.eth
Balance
2,000,000 SHA

Value
$0.00
0x1Dc907D55F1be2bC4370FEb0f01Fb89324B8941c
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:
Ringan

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-24
*/

// 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 getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

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

contract Ringan is IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _liquidityHolders;

    uint256 constant private startingSupply = 1_000_000_000;

    string constant private _name = "Ringan";
    string constant private _symbol = "SHA";
    uint8 constant private _decimals = 18;

    uint256 constant private _tTotal = startingSupply * 10**_decimals;

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

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

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

    Ratios public _ratios = Ratios({
        liquidity: 5,
        marketing: 6,
        development: 2,
        total: 13
        });

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

    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(0xb7abD378528DeD12C2DeD6d1829BC4B4568d1562),
        development: payable(0x5FF3f6B3082F12650460fC0aed388bb0D3f31C09)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;

    uint256 private _maxTxAmount = (_tTotal * 2) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 3) / 1000;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

    bool lpInitialized = false;

    mapping (address => bool) private _isPrivateSaler;
    mapping (address => uint256) private privateSalerSold;
    mapping (address => uint256) private privateSalerSellTime;

    bool public privateSaleLimitsEnabled = true;
    uint256 public privateSaleDelay = 24 hours;
    uint256 public privateSaleMaxSell = 1 * 10**18;

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

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _tOwned[msg.sender] = _tTotal;
        emit Transfer(address(0), msg.sender, _tTotal);

        // Set the owner.
        _owner = msg.sender;

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

        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

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

    function initializeLP(uint256 amountTokens) public onlyOwner {
        require(!lpInitialized, "Already initialized");
        require(address(this).balance > 0 , "Contract must have ETH.");
        require(balanceOf(msg.sender) >= amountTokens * 10**18, "You do not have enough tokens.");

        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        lpInitialized = true;

        amountTokens *= 10**_decimals;
        _finalizeTransfer(msg.sender, address(this), amountTokens, false, 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();
    }

    function preInitializeTransfer(address to, uint256 amount) public onlyOwner {
        require(!lpInitialized);
        amount = amount*10**_decimals;
        _finalizeTransfer(msg.sender, to, amount, false, false, false, true);
    }

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

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function transferOwner(address newOwner) 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, false, true);
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

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

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

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

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

    function _approve(address sender, address spender, uint256 amount) 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() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

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

        return _transfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _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.total = liquidity + marketing + development;
    }

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

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

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

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

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

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

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

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

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

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

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

    function isPrivateSaler(address account) external view returns (bool) {
        return _isPrivateSaler[account];
    }

    function getPrivateAmtSold(address account) external view returns(uint256) {
        // Return value is in tenths, so 100 returned is 1 ETH.
        return (privateSalerSold[account] / (10 ** 16));
    }

    function setPrivateSaleVestingSettings(uint256 time, uint256 value, uint256 multiplier) external onlyOwner {
        require(time <= 48 hours && value * 10**multiplier >= 50 * 10**16);
        privateSaleDelay = time;
        privateSaleMaxSell = value * 10**multiplier;
    }

    function setPrivateSalers(address[] memory accounts, bool enabled) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isPrivateSaler[accounts[i]] = enabled;
        }
    }

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

    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");
        require(lpInitialized);
        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(privateSaleLimitsEnabled) {
                bool saler = _isPrivateSaler[from];
                if(saler) {
                    require(sell || buy);
                }
                if(sell && saler && !inSwap) {
                    address[] memory path = new address[](2);
                    path[0] = address(this);
                    path[1] = dexRouter.WETH();
                    uint256 ethBalance = dexRouter.getAmountsOut(amount, path)[1];
                    if(privateSalerSellTime[from] + privateSaleDelay < block.timestamp) {
                        require(ethBalance <= privateSaleMaxSell);
                        privateSalerSellTime[from] = block.timestamp;
                        privateSalerSold[from] = ethBalance;
                    } else if (privateSalerSellTime[from] + privateSaleDelay > block.timestamp) {
                        require(privateSalerSold[from] + ethBalance <= privateSaleMaxSell);
                        privateSalerSold[from] += ethBalance;
                    }
                }
            }
        }

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

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

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

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

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

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

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

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

        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.total;
        uint256 marketingBalance = amtBalance - developmentBalance;
        if (ratios.marketing > 0) {
            _taxWallets.marketing.transfer(marketingBalance);
        }
        if (ratios.development > 0) {
            _taxWallets.development.transfer(developmentBalance);
        }
    }

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

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

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

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

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

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

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

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

        emit Transfer(from, to, amountReceived);
        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;
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

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

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"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":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getPrivateAmtSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"initializeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPrivateSaler","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"preInitializeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"preInitializeTransferMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"privateSaleDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSaleLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSaleMaxSell","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":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"setPrivateSaleVestingSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPrivateSalers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"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"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"}]

60006003819055610578608081905260a081905260c0526009805465ffffffffffff191665057805780578179055600560e052600661010052600261012052600d610140819052600a80546001600160401b031916660d0002000600051781556101a060405273b7abd378528ded12c2ded6d1829bc4b4568d1562610160819052735ff3f6b3082f12650460fc0aed388bb0d3f31c0961018081905283546001600160a01b0319908116909217909355600e8054909116909217909155600f805461ff00191690556010919091556103e890620000df906012906200060a565b620000ef90633b9aca0062000622565b620000fc90600262000622565b62000108919062000644565b6014556103e86200011c6012600a6200060a565b6200012c90633b9aca0062000622565b6200013990600362000622565b62000145919062000644565b6015556016805461ffff60ff60b01b0119169055601a805460ff1916600117905562015180601b55670de0b6b3a7640000601c55620001876012600a6200060a565b6200019790633b9aca0062000622565b33600081815260016020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001da6012600a6200060a565b620001ea90633b9aca0062000622565b60405190815260200160405180910390a3600080546001600160a01b03191633179055466038036200024257600b80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000335565b466061036200027757600b80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000335565b4660011480620002875750466004145b80620002935750466003145b15620002c557600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000335565b4661a86a03620002fb57600b80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000335565b4660fa036200033057600b80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c2917905562000335565b600080fd5b600054600b5462000356916001600160a01b039081169116600019620003f4565b600b54620003729030906001600160a01b0316600019620003f4565b600080546001600160a01b0390811682526005602090815260408084208054600160ff19918216811790925530865282862080548216831790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80548216831790558554909416855260089092529092208054909116909117905562000667565b6001600160a01b038316620004465760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620004945760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016200043d565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200054c578160001904821115620005305762000530620004f5565b808516156200053e57918102915b93841c939080029062000510565b509250929050565b600082620005655750600162000604565b81620005745750600062000604565b81600181146200058d57600281146200059857620005b8565b600191505062000604565b60ff841115620005ac57620005ac620004f5565b50506001821b62000604565b5060208310610133831016604e8410600b8410161715620005dd575081810a62000604565b620005e983836200050b565b8060001904821115620006005762000600620004f5565b0290505b92915050565b60006200061b60ff84168362000554565b9392505050565b60008160001904831182151516156200063f576200063f620004f5565b500290565b6000826200066257634e487b7160e01b600052601260045260246000fd5b500490565b614cd080620006776000396000f3fe6080604052600436106103bc5760003560e01c806350a8e016116101f2578063a9059cbb1161010d578063dd62ed3e116100a0578063eec2744e1161006f578063eec2744e14610bdc578063f94aa1b414610bfc578063fdb78c0e14610c43578063fe575a8714610c6257600080fd5b8063dd62ed3e14610b4b578063e4fcfd1814610b91578063eafb5a3c14610ba7578063ee5d9c2d14610bc757600080fd5b8063cab5ebea116100dc578063cab5ebea14610a8a578063cf84770614610aaa578063d3f6a15714610b15578063d528f32614610b3557600080fd5b8063a9059cbb14610a4a578063aa22b17214610a6a578063b1b08f7114610660578063b3d514fb1461066057600080fd5b8063749f2ef2116101855780638a63bd9b116101545780638a63bd9b146109c05780638a8c523c146109d55780639242b759146109ea57806395d89b4114610a0457600080fd5b8063749f2ef21461094c578063773d4ffd1461096257806380c581d114610982578063893d20e8146109a257600080fd5b80635cce86cd116101c15780635cce86cd146108b35780636ebd0078146108ec57806370a0823114610901578063715018a61461093757600080fd5b806350a8e0161461081b578063514a68121461083a578063590ffdce146108735780635c24b0741461089357600080fd5b80632610eaca116102e257806334cd82601161027557806347aee6d81161024457806347aee6d8146107885780634ada218b146107a85780634fb2e45d146107c25780634fbee193146107e257600080fd5b806334cd82601461070857806336fddb04146107285780633f3cf56c14610748578063452ed4f11461076857600080fd5b80632e8fa821116102b15780632e8fa82114610696578063313ce567146106ac57806332cde664146106c857806333251a0b146106e857600080fd5b80632610eaca1461062057806329dd8798146106405780632b28fc7a146106605780632cee76021461067657600080fd5b8063095ea7b31161035a57806318160ddd1161032957806318160ddd146105ab5780631cc43f07146105c057806323b872dd146105e0578063260039571461060057600080fd5b8063095ea7b3146105265780630962cb3f14610556578063098f8b02146105765780630fa604e41461059657600080fd5b8063069d955f11610396578063069d955f1461044157806306fdde03146104975780630758d924146104e6578063092316021461050657600080fd5b806303fd2a45146103c85780630445b667146103fb57806305bbedb61461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041160125481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a3660046144ca565b610c82565b005b34801561044d57600080fd5b506009546104729061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103f2565b3480156104a357600080fd5b5060408051808201909152600681527f52696e67616e000000000000000000000000000000000000000000000000000060208201525b6040516103f2919061451c565b3480156104f257600080fd5b50600b546103de906001600160a01b031681565b34801561051257600080fd5b5061043f610521366004614571565b610d5b565b34801561053257600080fd5b5061054661054136600461458a565b610e7a565b60405190151581526020016103f2565b34801561056257600080fd5b506104116105713660046145b6565b610e91565b34801561058257600080fd5b5061043f610591366004614571565b610ebc565b3480156105a257600080fd5b50610411611387565b3480156105b757600080fd5b506104116113a7565b3480156105cc57600080fd5b5061043f6105db3660046145d3565b6113e9565b3480156105ec57600080fd5b506105466105fb36600461468e565b61153e565b34801561060c57600080fd5b5061043f61061b3660046146cf565b6115b6565b34801561062c57600080fd5b5061043f61063b3660046145d3565b611706565b34801561064c57600080fd5b5061043f61065b3660046146f1565b611899565b34801561066c57600080fd5b506104116109c481565b34801561068257600080fd5b5061043f61069136600461458a565b611982565b3480156106a257600080fd5b5061041160135481565b3480156106b857600080fd5b50604051601281526020016103f2565b3480156106d457600080fd5b5061043f6106e3366004614764565b611a24565b3480156106f457600080fd5b5061043f6107033660046145b6565b611b5f565b34801561071457600080fd5b5061043f6107233660046147a7565b611bff565b34801561073457600080fd5b5061043f6107433660046147e2565b611cbf565b34801561075457600080fd5b5061043f6107633660046146cf565b611d38565b34801561077457600080fd5b50600c546103de906001600160a01b031681565b34801561079457600080fd5b5061043f6107a3366004614810565b611e88565b3480156107b457600080fd5b506016546105469060ff1681565b3480156107ce57600080fd5b5061043f6107dd3660046145b6565b611f30565b3480156107ee57600080fd5b506105466107fd3660046145b6565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561082757600080fd5b5060165461054690610100900460ff1681565b34801561084657600080fd5b506105466108553660046145b6565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561087f57600080fd5b5061043f61088e3660046147e2565b61215b565b34801561089f57600080fd5b5061043f6108ae3660046145b6565b6121d4565b3480156108bf57600080fd5b506105466108ce3660046145b6565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108f857600080fd5b506104116122cf565b34801561090d57600080fd5b5061041161091c3660046145b6565b6001600160a01b031660009081526001602052604090205490565b34801561094357600080fd5b5061043f6122ea565b34801561095857600080fd5b50610411601b5481565b34801561096e57600080fd5b5061043f61097d3660046144ca565b61239a565b34801561098e57600080fd5b5061043f61099d3660046147e2565b61244f565b3480156109ae57600080fd5b506000546001600160a01b03166103de565b3480156109cc57600080fd5b506105466125fe565b3480156109e157600080fd5b5061043f61266d565b3480156109f657600080fd5b50601a546105469060ff1681565b348015610a1057600080fd5b5060408051808201909152600381527f534841000000000000000000000000000000000000000000000000000000000060208201526104d9565b348015610a5657600080fd5b50610546610a6536600461458a565b6128d5565b348015610a7657600080fd5b5061043f610a85366004614764565b6128ec565b348015610a9657600080fd5b5061043f610aa536600461483c565b6129ff565b348015610ab657600080fd5b50600a54610ae79061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b348015610b2157600080fd5b5061043f610b30366004614859565b612aa1565b348015610b4157600080fd5b50610411601c5481565b348015610b5757600080fd5b50610411610b66366004614859565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610b9d57600080fd5b5061041160105481565b348015610bb357600080fd5b5061043f610bc23660046145b6565b612b2a565b348015610bd357600080fd5b5061043f612ed9565b348015610be857600080fd5b5061043f610bf73660046147e2565b612fb9565b348015610c0857600080fd5b50600d54600e54610c23916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103f2565b348015610c4f57600080fd5b50600f5461054690610100900460ff1681565b348015610c6e57600080fd5b50610546610c7d3660046145b6565b613061565b6000546001600160a01b03163314610cd55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6016546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d2590859085906004016148cb565b600060405180830381600087803b158015610d3f57600080fd5b505af1158015610d53573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610da95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b60c8811015610dfa5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610ccc565b6016546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610e5f57600080fd5b505af1158015610e73573d6000803e3d6000fd5b5050505050565b6000610e873384846130ef565b5060015b92915050565b6001600160a01b038116600090815260186020526040812054610e8b90662386f26fc100009061491e565b6000546001600160a01b03163314610f0a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b601654760100000000000000000000000000000000000000000000900460ff1615610f775760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610ccc565b60004711610fc75760405162461bcd60e51b815260206004820152601760248201527f436f6e7472616374206d7573742068617665204554482e0000000000000000006044820152606401610ccc565b610fd981670de0b6b3a7640000614959565b3360009081526001602052604090205410156110375760405162461bcd60e51b815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e732e00006044820152606401610ccc565b600b60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae9190614978565b6001600160a01b031663c9c65396600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111339190614978565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb9190614978565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283169081179091556000908152600260205260408120805460ff1916600117905554600b546112159291821691166000196130ef565b600b5461122f9030906001600160a01b03166000196130ef565b601680547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff1676010000000000000000000000000000000000000000000017905561127c6012600a614a79565b6112869082614959565b905061129a333083600080600060016131fc565b50600b546001600160a01b031663f305d71947306112cd816001600160a01b031660009081526001602052604090205490565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af1158015611354573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113799190614a88565b50505061138461266d565b50565b60006113956012600a614a79565b6015546113a2919061491e565b905090565b60006113b56012600a614a79565b6113c390633b9aca00614959565b6000036113cf57600080fd5b6113db6012600a614a79565b6113a290633b9aca00614959565b6000546001600160a01b031633146114375760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b80518251146114885760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610ccc565b60005b82518160ff161015611539576114a36012600a614a79565b828260ff16815181106114b8576114b8614ab6565b60200260200101516114ca9190614959565b3360009081526001602052604090205410156114e557600080fd5b611527838260ff16815181106114fd576114fd614ab6565b6020026020010151838360ff168151811061151a5761151a614ab6565b6020026020010151611982565b8061153181614ae5565b91505061148b565b505050565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019146115a3576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061159d908490614b04565b90915550505b6115ae84848461343c565b949350505050565b6000546001600160a01b031633146116045760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6103e86116136012600a614a79565b61162190633b9aca00614959565b61162b919061491e565b81836116396012600a614a79565b61164790633b9aca00614959565b6116519190614959565b61165b919061491e565b10156116cf5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610ccc565b80826116dd6012600a614a79565b6116eb90633b9aca00614959565b6116f59190614959565b6116ff919061491e565b6015555050565b6000546001600160a01b031633146117545760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b80518251146117a55760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610ccc565b601654760100000000000000000000000000000000000000000000900460ff166117ce57600080fd5b60005b82518160ff16101561153957818160ff16815181106117f2576117f2614ab6565b6020026020010151611819336001600160a01b031660009081526001602052604090205490565b101561182457600080fd5b61188633848360ff168151811061183d5761183d614ab6565b60200260200101516012600a6118539190614a79565b858560ff168151811061186857611868614ab6565b602002602001015161187a9190614959565b600080600060016131fc565b508061189181614ae5565b9150506117d1565b6000546001600160a01b031633146118e75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6016546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561196457600080fd5b505af1158015611978573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146119d05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b601654760100000000000000000000000000000000000000000000900460ff16156119fa57600080fd5b611a066012600a614a79565b611a109082614959565b9050611539338383600080600060016131fc565b6000546001600160a01b03163314611a725760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6109c48361ffff1611158015611a8e57506109c48261ffff1611155b8015611aa057506109c48161ffff1611155b611aec5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610ccc565b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b03163314611bad5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6016546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610e45565b6000546001600160a01b03163314611c4d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b8385611c5b6012600a614a79565b611c6990633b9aca00614959565b611c739190614959565b611c7d919061491e565b601290815582908490611c9190600a614a79565b611c9f90633b9aca00614959565b611ca99190614959565b611cb3919061491e565b60135560105550505050565b6000546001600160a01b03163314611d0d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d865760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6103e8611d956012600a614a79565b611da390633b9aca00614959565b611dad919061491e565b8183611dbb6012600a614a79565b611dc990633b9aca00614959565b611dd39190614959565b611ddd919061491e565b1015611e515760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610ccc565b8082611e5f6012600a614a79565b611e6d90633b9aca00614959565b611e779190614959565b611e81919061491e565b6014555050565b6000546001600160a01b03163314611ed65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6202a3008311158015611f0557506706f05b59d3b20000611ef882600a614b1b565b611f029084614959565b10155b611f0e57600080fd5b601b839055611f1e81600a614b1b565b611f289083614959565b601c55505050565b6000546001600160a01b03163314611f7e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6001600160a01b038116611ffa5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ccc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038216016120985760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ccc565b600080546120b1916001600160a01b039091169061215b565b6120bc81600161215b565b600080546001600160a01b03168152600160205260409020541561210357600080546001600160a01b031680825260016020526040909120546121019190839061187a565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146121a95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146122225760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b601654610100900460ff161561223757600080fd5b306001600160a01b0382160361228f5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610ccc565b601680546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60006122dd6012600a614a79565b6014546113a2919061491e565b6000546001600160a01b031633146123385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b60008054612351916001600160a01b039091169061215b565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146123e85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b60005b825181101561153957816017600085848151811061240b5761240b614ab6565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061244781614b27565b9150506123eb565b6000546001600160a01b0316331461249d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b801515600003612519576001600160a01b03828116600081815260026020526040808220805460ff1916905560165490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610d25565b60035415612580576203f480600354426125339190614b04565b116125805760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610ccc565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560165491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610d25565b5050565b600080546001600160a01b0316331461264d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b600b546126679030906001600160a01b03166000196130ef565b50600190565b6000546001600160a01b031633146126bb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b60165460ff161561270e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ccc565b601654610100900460ff166127655760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ccc565b6016546201000090046001600160a01b03166127ab57601680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601654600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561283657600080fd5b505af1925050508015612847575060015b506016805460ff19166001179055600c5461271090612884906001600160a01b03166001600160a01b031660009081526001602052604090205490565b61288f90600a614959565b612899919061491e565b601255600c546001600160a01b0316600090815260016020526040902054612710906128c6906019614959565b6128d0919061491e565b601355565b60006128e233848461343c565b5060019392505050565b6000546001600160a01b0316331461293a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b600a805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416928816929092179290921716179055806129b28385614b41565b6129bc9190614b41565b600a805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b03163314612a4d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b600f80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612a9690831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612aef5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b600d80546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff1991821617909155600e8054929093169116179055565b6000546001600160a01b03163314612b785760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be19190614978565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c529190614978565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd99190614978565b90506001600160a01b038116612e7757816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4b9190614978565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbc9190614978565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e459190614978565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612ea0565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556115399030906000196130ef565b6000546001600160a01b03163314612f275760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b601654610100900460ff1615612f7f5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ccc565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611384573d6000803e3d6000fd5b6000546001600160a01b031633146130075760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6016546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d25565b6016546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156130cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8b9190614b67565b6001600160a01b0383166131455760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ccc565b6001600160a01b03821661319b5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ccc565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601654600090610100900460ff166132a8576132188888613c1b565b601654610100900460ff1615801561323557506132358888613d79565b156132a85760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610ccc565b6132b28888613d79565b15613365576016546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801561334e575060408051601f3d908101601f1916820190925261334b91810190614b67565b60015b61335757600080fd5b90508061336357600080fd5b505b6001600160a01b0388166000908152600160205260408120805488929061338d908490614b04565b9091555060009050856133a057866133ac565b6133ac8986868a613e4e565b6001600160a01b0389166000908152600160205260408120805492935083929091906133d9908490614b84565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161342591815260200190565b60405180910390a350600198975050505050505050565b60006001600160a01b0384166134ba5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ccc565b6001600160a01b0383166135365760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ccc565b600082116135ac5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610ccc565b601654760100000000000000000000000000000000000000000000900460ff166135d557600080fd5b6001600160a01b0384166000908152600260205260408120548190819060ff16156136035760019250613631565b6001600160a01b03861660009081526002602052604090205460ff161561362d5760019150613631565b5060015b61363b8787613d79565b15613b425760165460ff166136925760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ccc565b828061369b5750815b1561375f576001600160a01b03871660009081526006602052604090205460ff161580156136e257506001600160a01b03861660009081526006602052604090205460ff16155b1561375f5760145485111561375f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610ccc565b600b546001600160a01b0387811691161480159061377b575081155b15613841576001600160a01b03861660009081526006602052604090205460ff1661384157601554856137c3886001600160a01b031660009081526001602052604090205490565b6137cd9190614b84565b11156138415760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610ccc565b601a5460ff1615613b42576001600160a01b03871660009081526017602052604090205460ff1680156138805782806138775750835b61388057600080fd5b82801561388a5750805b80156138995750600f5460ff16155b15613b405760408051600280825260608201835260009260208301908036833701905050905030816000815181106138d3576138d3614ab6565b6001600160a01b03928316602091820292909201810191909152600b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139699190614978565b8160018151811061397c5761397c614ab6565b6001600160a01b039283166020918202929092010152600b546040517fd06ca61f000000000000000000000000000000000000000000000000000000008152600092919091169063d06ca61f906139d9908b908690600401614b9c565b600060405180830381865afa1580156139f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1e9190810190614bb5565b600181518110613a3057613a30614ab6565b6020026020010151905042601b54601960008d6001600160a01b03166001600160a01b0316815260200190815260200160002054613a6e9190614b84565b1015613ab057601c54811115613a8357600080fd5b6001600160a01b038a16600090815260196020908152604080832042905560189091529020819055613b3d565b601b546001600160a01b038b166000908152601960205260409020544291613ad791614b84565b1115613b3d57601c546001600160a01b038b16600090815260186020526040902054613b04908390614b84565b1115613b0f57600080fd5b6001600160a01b038a1660009081526018602052604081208054839290613b37908490614b84565b90915550505b50505b505b6001600160a01b03871660009081526005602052604090205460019060ff1680613b8457506001600160a01b03871660009081526005602052604090205460ff165b15613b8d575060005b8215613c0057600f5460ff16158015613bad5750600f54610100900460ff165b15613c005742601054601154613bc39190614b84565b1015613c0057306000908152600160205260409020546012548110613bfe576013548110613bf057506013545b613bf981613f25565b426011555b505b613c0f888888848888886131fc565b98975050505050505050565b601654610100900460ff1615613c995760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610ccc565b613ca38282613d79565b158015613cbd5750600c546001600160a01b038281169116145b156125fa576001600160a01b038083166000908152600860205260409020805460ff191660011790556016805461ff001916610100179081905562010000900416613d3257601680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600f805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b600080546001600160a01b03848116911614801590613da657506000546001600160a01b03838116911614155b8015613dbd57506000546001600160a01b03163214155b8015613de257506001600160a01b03821660009081526008602052604090205460ff16155b8015613e0757506001600160a01b03831660009081526008602052604090205460ff16155b8015613e1e57506001600160a01b03821661dead14155b8015613e3257506001600160a01b03821615155b8015613e4757506001600160a01b0383163014155b9392505050565b6000808415613e64575060095461ffff16613e8e565b8315613e7d575060095462010000900461ffff16613e8e565b50600954640100000000900461ffff165b6000612710613e9d8386614959565b613ea7919061491e565b30600090815260016020526040812080549293508392909190613ecb908490614b84565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613f1a8185614b04565b979650505050505050565b600f805460ff1916600117905560408051608081018252600a5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052600003613f8657506143a2565b306000908152600460209081526040808320600b546001600160a01b0316845290915290205460001914613fdf57306000908152600460209081526040808320600b546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff16856140009190614959565b61400a919061491e565b614014919061491e565b905060006140228285614b04565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061405c5761405c614ab6565b6001600160a01b03928316602091820292909201810191909152600b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156140ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f29190614978565b8160018151811061410557614105614ab6565b6001600160a01b039283166020918202929092010152600b546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614164908590600090869030904290600401614c3b565b600060405180830381600087803b15801561417e57600080fd5b505af1158015614192573d6000803e3d6000fd5b50479250600091508490506141a78684614959565b6141b1919061491e565b905084156142a257600b546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614240573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142659190614a88565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6142ac8183614b04565b91508560000151866060018181516142c49190614c77565b61ffff9081169091526060880151604089015160009350908216916142ea911685614959565b6142f4919061491e565b905060006143028285614b04565b602089015190915061ffff161561434f57600d546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561434d573d6000803e3d6000fd5b505b604088015161ffff161561439957600e546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015614397573d6000803e3d6000fd5b505b50505050505050505b50600f805460ff19169055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614407576144076143af565b604052919050565b600067ffffffffffffffff821115614429576144296143af565b5060051b60200190565b6001600160a01b038116811461138457600080fd5b600082601f83011261445957600080fd5b8135602061446e6144698361440f565b6143de565b82815260059290921b8401810191818101908684111561448d57600080fd5b8286015b848110156144b15780356144a481614433565b8352918301918301614491565b509695505050505050565b801515811461138457600080fd5b600080604083850312156144dd57600080fd5b823567ffffffffffffffff8111156144f457600080fd5b61450085828601614448565b9250506020830135614511816144bc565b809150509250929050565b600060208083528351808285015260005b818110156145495785810183015185820160400152820161452d565b8181111561455b576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561458357600080fd5b5035919050565b6000806040838503121561459d57600080fd5b82356145a881614433565b946020939093013593505050565b6000602082840312156145c857600080fd5b8135613e4781614433565b600080604083850312156145e657600080fd5b823567ffffffffffffffff808211156145fe57600080fd5b61460a86838701614448565b935060209150818501358181111561462157600080fd5b85019050601f8101861361463457600080fd5b80356146426144698261440f565b81815260059190911b8201830190838101908883111561466157600080fd5b928401925b8284101561467f57833582529284019290840190614666565b80955050505050509250929050565b6000806000606084860312156146a357600080fd5b83356146ae81614433565b925060208401356146be81614433565b929592945050506040919091013590565b600080604083850312156146e257600080fd5b50508035926020909101359150565b6000806000806080858703121561470757600080fd5b8435614712816144bc565b93506020850135614722816144bc565b92506040850135614732816144bc565b91506060850135614742816144bc565b939692955090935050565b803561ffff8116811461475f57600080fd5b919050565b60008060006060848603121561477957600080fd5b6147828461474d565b92506147906020850161474d565b915061479e6040850161474d565b90509250925092565b600080600080600060a086880312156147bf57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156147f557600080fd5b823561480081614433565b91506020830135614511816144bc565b60008060006060848603121561482557600080fd5b505081359360208301359350604090920135919050565b60006020828403121561484e57600080fd5b8135613e47816144bc565b6000806040838503121561486c57600080fd5b823561487781614433565b9150602083013561451181614433565b600081518084526020808501945080840160005b838110156148c05781516001600160a01b03168752958201959082019060010161489b565b509495945050505050565b6040815260006148de6040830185614887565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082614954577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614973576149736148ef565b500290565b60006020828403121561498a57600080fd5b8151613e4781614433565b600181815b808511156149d05781600019048211156149b6576149b66148ef565b808516156149c357918102915b93841c939080029061499a565b509250929050565b6000826149e757506001610e8b565b816149f457506000610e8b565b8160018114614a0a5760028114614a1457614a30565b6001915050610e8b565b60ff841115614a2557614a256148ef565b50506001821b610e8b565b5060208310610133831016604e8410600b8410161715614a53575081810a610e8b565b614a5d8383614995565b8060001904821115614a7157614a716148ef565b029392505050565b6000613e4760ff8416836149d8565b600080600060608486031215614a9d57600080fd5b8351925060208401519150604084015190509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8103614afb57614afb6148ef565b60010192915050565b600082821015614b1657614b166148ef565b500390565b6000613e4783836149d8565b60006000198203614b3a57614b3a6148ef565b5060010190565b600061ffff808316818516808303821115614b5e57614b5e6148ef565b01949350505050565b600060208284031215614b7957600080fd5b8151613e47816144bc565b60008219821115614b9757614b976148ef565b500190565b8281526040602082015260006115ae6040830184614887565b60006020808385031215614bc857600080fd5b825167ffffffffffffffff811115614bdf57600080fd5b8301601f81018513614bf057600080fd5b8051614bfe6144698261440f565b81815260059190911b82018301908381019087831115614c1d57600080fd5b928401925b82841015613f1a57835182529284019290840190614c22565b85815284602082015260a060408201526000614c5a60a0830186614887565b6001600160a01b0394909416606083015250608001529392505050565b600061ffff83811690831681811015614c9257614c926148ef565b03939250505056fea26469706673582212202c106a0cbad8a059035542c49a12040dfb4cb3200b19801fdc05d67640cba95164736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c806350a8e016116101f2578063a9059cbb1161010d578063dd62ed3e116100a0578063eec2744e1161006f578063eec2744e14610bdc578063f94aa1b414610bfc578063fdb78c0e14610c43578063fe575a8714610c6257600080fd5b8063dd62ed3e14610b4b578063e4fcfd1814610b91578063eafb5a3c14610ba7578063ee5d9c2d14610bc757600080fd5b8063cab5ebea116100dc578063cab5ebea14610a8a578063cf84770614610aaa578063d3f6a15714610b15578063d528f32614610b3557600080fd5b8063a9059cbb14610a4a578063aa22b17214610a6a578063b1b08f7114610660578063b3d514fb1461066057600080fd5b8063749f2ef2116101855780638a63bd9b116101545780638a63bd9b146109c05780638a8c523c146109d55780639242b759146109ea57806395d89b4114610a0457600080fd5b8063749f2ef21461094c578063773d4ffd1461096257806380c581d114610982578063893d20e8146109a257600080fd5b80635cce86cd116101c15780635cce86cd146108b35780636ebd0078146108ec57806370a0823114610901578063715018a61461093757600080fd5b806350a8e0161461081b578063514a68121461083a578063590ffdce146108735780635c24b0741461089357600080fd5b80632610eaca116102e257806334cd82601161027557806347aee6d81161024457806347aee6d8146107885780634ada218b146107a85780634fb2e45d146107c25780634fbee193146107e257600080fd5b806334cd82601461070857806336fddb04146107285780633f3cf56c14610748578063452ed4f11461076857600080fd5b80632e8fa821116102b15780632e8fa82114610696578063313ce567146106ac57806332cde664146106c857806333251a0b146106e857600080fd5b80632610eaca1461062057806329dd8798146106405780632b28fc7a146106605780632cee76021461067657600080fd5b8063095ea7b31161035a57806318160ddd1161032957806318160ddd146105ab5780631cc43f07146105c057806323b872dd146105e0578063260039571461060057600080fd5b8063095ea7b3146105265780630962cb3f14610556578063098f8b02146105765780630fa604e41461059657600080fd5b8063069d955f11610396578063069d955f1461044157806306fdde03146104975780630758d924146104e6578063092316021461050657600080fd5b806303fd2a45146103c85780630445b667146103fb57806305bbedb61461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041160125481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a3660046144ca565b610c82565b005b34801561044d57600080fd5b506009546104729061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103f2565b3480156104a357600080fd5b5060408051808201909152600681527f52696e67616e000000000000000000000000000000000000000000000000000060208201525b6040516103f2919061451c565b3480156104f257600080fd5b50600b546103de906001600160a01b031681565b34801561051257600080fd5b5061043f610521366004614571565b610d5b565b34801561053257600080fd5b5061054661054136600461458a565b610e7a565b60405190151581526020016103f2565b34801561056257600080fd5b506104116105713660046145b6565b610e91565b34801561058257600080fd5b5061043f610591366004614571565b610ebc565b3480156105a257600080fd5b50610411611387565b3480156105b757600080fd5b506104116113a7565b3480156105cc57600080fd5b5061043f6105db3660046145d3565b6113e9565b3480156105ec57600080fd5b506105466105fb36600461468e565b61153e565b34801561060c57600080fd5b5061043f61061b3660046146cf565b6115b6565b34801561062c57600080fd5b5061043f61063b3660046145d3565b611706565b34801561064c57600080fd5b5061043f61065b3660046146f1565b611899565b34801561066c57600080fd5b506104116109c481565b34801561068257600080fd5b5061043f61069136600461458a565b611982565b3480156106a257600080fd5b5061041160135481565b3480156106b857600080fd5b50604051601281526020016103f2565b3480156106d457600080fd5b5061043f6106e3366004614764565b611a24565b3480156106f457600080fd5b5061043f6107033660046145b6565b611b5f565b34801561071457600080fd5b5061043f6107233660046147a7565b611bff565b34801561073457600080fd5b5061043f6107433660046147e2565b611cbf565b34801561075457600080fd5b5061043f6107633660046146cf565b611d38565b34801561077457600080fd5b50600c546103de906001600160a01b031681565b34801561079457600080fd5b5061043f6107a3366004614810565b611e88565b3480156107b457600080fd5b506016546105469060ff1681565b3480156107ce57600080fd5b5061043f6107dd3660046145b6565b611f30565b3480156107ee57600080fd5b506105466107fd3660046145b6565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561082757600080fd5b5060165461054690610100900460ff1681565b34801561084657600080fd5b506105466108553660046145b6565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561087f57600080fd5b5061043f61088e3660046147e2565b61215b565b34801561089f57600080fd5b5061043f6108ae3660046145b6565b6121d4565b3480156108bf57600080fd5b506105466108ce3660046145b6565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108f857600080fd5b506104116122cf565b34801561090d57600080fd5b5061041161091c3660046145b6565b6001600160a01b031660009081526001602052604090205490565b34801561094357600080fd5b5061043f6122ea565b34801561095857600080fd5b50610411601b5481565b34801561096e57600080fd5b5061043f61097d3660046144ca565b61239a565b34801561098e57600080fd5b5061043f61099d3660046147e2565b61244f565b3480156109ae57600080fd5b506000546001600160a01b03166103de565b3480156109cc57600080fd5b506105466125fe565b3480156109e157600080fd5b5061043f61266d565b3480156109f657600080fd5b50601a546105469060ff1681565b348015610a1057600080fd5b5060408051808201909152600381527f534841000000000000000000000000000000000000000000000000000000000060208201526104d9565b348015610a5657600080fd5b50610546610a6536600461458a565b6128d5565b348015610a7657600080fd5b5061043f610a85366004614764565b6128ec565b348015610a9657600080fd5b5061043f610aa536600461483c565b6129ff565b348015610ab657600080fd5b50600a54610ae79061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b348015610b2157600080fd5b5061043f610b30366004614859565b612aa1565b348015610b4157600080fd5b50610411601c5481565b348015610b5757600080fd5b50610411610b66366004614859565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610b9d57600080fd5b5061041160105481565b348015610bb357600080fd5b5061043f610bc23660046145b6565b612b2a565b348015610bd357600080fd5b5061043f612ed9565b348015610be857600080fd5b5061043f610bf73660046147e2565b612fb9565b348015610c0857600080fd5b50600d54600e54610c23916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103f2565b348015610c4f57600080fd5b50600f5461054690610100900460ff1681565b348015610c6e57600080fd5b50610546610c7d3660046145b6565b613061565b6000546001600160a01b03163314610cd55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6016546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d2590859085906004016148cb565b600060405180830381600087803b158015610d3f57600080fd5b505af1158015610d53573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610da95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b60c8811015610dfa5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610ccc565b6016546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610e5f57600080fd5b505af1158015610e73573d6000803e3d6000fd5b5050505050565b6000610e873384846130ef565b5060015b92915050565b6001600160a01b038116600090815260186020526040812054610e8b90662386f26fc100009061491e565b6000546001600160a01b03163314610f0a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b601654760100000000000000000000000000000000000000000000900460ff1615610f775760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610ccc565b60004711610fc75760405162461bcd60e51b815260206004820152601760248201527f436f6e7472616374206d7573742068617665204554482e0000000000000000006044820152606401610ccc565b610fd981670de0b6b3a7640000614959565b3360009081526001602052604090205410156110375760405162461bcd60e51b815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e732e00006044820152606401610ccc565b600b60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae9190614978565b6001600160a01b031663c9c65396600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111339190614978565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb9190614978565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283169081179091556000908152600260205260408120805460ff1916600117905554600b546112159291821691166000196130ef565b600b5461122f9030906001600160a01b03166000196130ef565b601680547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff1676010000000000000000000000000000000000000000000017905561127c6012600a614a79565b6112869082614959565b905061129a333083600080600060016131fc565b50600b546001600160a01b031663f305d71947306112cd816001600160a01b031660009081526001602052604090205490565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af1158015611354573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113799190614a88565b50505061138461266d565b50565b60006113956012600a614a79565b6015546113a2919061491e565b905090565b60006113b56012600a614a79565b6113c390633b9aca00614959565b6000036113cf57600080fd5b6113db6012600a614a79565b6113a290633b9aca00614959565b6000546001600160a01b031633146114375760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b80518251146114885760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610ccc565b60005b82518160ff161015611539576114a36012600a614a79565b828260ff16815181106114b8576114b8614ab6565b60200260200101516114ca9190614959565b3360009081526001602052604090205410156114e557600080fd5b611527838260ff16815181106114fd576114fd614ab6565b6020026020010151838360ff168151811061151a5761151a614ab6565b6020026020010151611982565b8061153181614ae5565b91505061148b565b505050565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019146115a3576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061159d908490614b04565b90915550505b6115ae84848461343c565b949350505050565b6000546001600160a01b031633146116045760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6103e86116136012600a614a79565b61162190633b9aca00614959565b61162b919061491e565b81836116396012600a614a79565b61164790633b9aca00614959565b6116519190614959565b61165b919061491e565b10156116cf5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610ccc565b80826116dd6012600a614a79565b6116eb90633b9aca00614959565b6116f59190614959565b6116ff919061491e565b6015555050565b6000546001600160a01b031633146117545760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b80518251146117a55760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610ccc565b601654760100000000000000000000000000000000000000000000900460ff166117ce57600080fd5b60005b82518160ff16101561153957818160ff16815181106117f2576117f2614ab6565b6020026020010151611819336001600160a01b031660009081526001602052604090205490565b101561182457600080fd5b61188633848360ff168151811061183d5761183d614ab6565b60200260200101516012600a6118539190614a79565b858560ff168151811061186857611868614ab6565b602002602001015161187a9190614959565b600080600060016131fc565b508061189181614ae5565b9150506117d1565b6000546001600160a01b031633146118e75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6016546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561196457600080fd5b505af1158015611978573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146119d05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b601654760100000000000000000000000000000000000000000000900460ff16156119fa57600080fd5b611a066012600a614a79565b611a109082614959565b9050611539338383600080600060016131fc565b6000546001600160a01b03163314611a725760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6109c48361ffff1611158015611a8e57506109c48261ffff1611155b8015611aa057506109c48161ffff1611155b611aec5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610ccc565b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b03163314611bad5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6016546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610e45565b6000546001600160a01b03163314611c4d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b8385611c5b6012600a614a79565b611c6990633b9aca00614959565b611c739190614959565b611c7d919061491e565b601290815582908490611c9190600a614a79565b611c9f90633b9aca00614959565b611ca99190614959565b611cb3919061491e565b60135560105550505050565b6000546001600160a01b03163314611d0d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d865760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6103e8611d956012600a614a79565b611da390633b9aca00614959565b611dad919061491e565b8183611dbb6012600a614a79565b611dc990633b9aca00614959565b611dd39190614959565b611ddd919061491e565b1015611e515760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610ccc565b8082611e5f6012600a614a79565b611e6d90633b9aca00614959565b611e779190614959565b611e81919061491e565b6014555050565b6000546001600160a01b03163314611ed65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6202a3008311158015611f0557506706f05b59d3b20000611ef882600a614b1b565b611f029084614959565b10155b611f0e57600080fd5b601b839055611f1e81600a614b1b565b611f289083614959565b601c55505050565b6000546001600160a01b03163314611f7e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6001600160a01b038116611ffa5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ccc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038216016120985760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ccc565b600080546120b1916001600160a01b039091169061215b565b6120bc81600161215b565b600080546001600160a01b03168152600160205260409020541561210357600080546001600160a01b031680825260016020526040909120546121019190839061187a565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146121a95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146122225760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b601654610100900460ff161561223757600080fd5b306001600160a01b0382160361228f5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610ccc565b601680546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60006122dd6012600a614a79565b6014546113a2919061491e565b6000546001600160a01b031633146123385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b60008054612351916001600160a01b039091169061215b565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146123e85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b60005b825181101561153957816017600085848151811061240b5761240b614ab6565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061244781614b27565b9150506123eb565b6000546001600160a01b0316331461249d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b801515600003612519576001600160a01b03828116600081815260026020526040808220805460ff1916905560165490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610d25565b60035415612580576203f480600354426125339190614b04565b116125805760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610ccc565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560165491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610d25565b5050565b600080546001600160a01b0316331461264d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b600b546126679030906001600160a01b03166000196130ef565b50600190565b6000546001600160a01b031633146126bb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b60165460ff161561270e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ccc565b601654610100900460ff166127655760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ccc565b6016546201000090046001600160a01b03166127ab57601680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601654600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561283657600080fd5b505af1925050508015612847575060015b506016805460ff19166001179055600c5461271090612884906001600160a01b03166001600160a01b031660009081526001602052604090205490565b61288f90600a614959565b612899919061491e565b601255600c546001600160a01b0316600090815260016020526040902054612710906128c6906019614959565b6128d0919061491e565b601355565b60006128e233848461343c565b5060019392505050565b6000546001600160a01b0316331461293a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b600a805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416928816929092179290921716179055806129b28385614b41565b6129bc9190614b41565b600a805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b03163314612a4d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b600f80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612a9690831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612aef5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b600d80546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff1991821617909155600e8054929093169116179055565b6000546001600160a01b03163314612b785760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be19190614978565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c529190614978565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd99190614978565b90506001600160a01b038116612e7757816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4b9190614978565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbc9190614978565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e459190614978565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612ea0565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556115399030906000196130ef565b6000546001600160a01b03163314612f275760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b601654610100900460ff1615612f7f5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ccc565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611384573d6000803e3d6000fd5b6000546001600160a01b031633146130075760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ccc565b6016546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d25565b6016546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156130cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8b9190614b67565b6001600160a01b0383166131455760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ccc565b6001600160a01b03821661319b5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ccc565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601654600090610100900460ff166132a8576132188888613c1b565b601654610100900460ff1615801561323557506132358888613d79565b156132a85760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610ccc565b6132b28888613d79565b15613365576016546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801561334e575060408051601f3d908101601f1916820190925261334b91810190614b67565b60015b61335757600080fd5b90508061336357600080fd5b505b6001600160a01b0388166000908152600160205260408120805488929061338d908490614b04565b9091555060009050856133a057866133ac565b6133ac8986868a613e4e565b6001600160a01b0389166000908152600160205260408120805492935083929091906133d9908490614b84565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161342591815260200190565b60405180910390a350600198975050505050505050565b60006001600160a01b0384166134ba5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ccc565b6001600160a01b0383166135365760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ccc565b600082116135ac5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610ccc565b601654760100000000000000000000000000000000000000000000900460ff166135d557600080fd5b6001600160a01b0384166000908152600260205260408120548190819060ff16156136035760019250613631565b6001600160a01b03861660009081526002602052604090205460ff161561362d5760019150613631565b5060015b61363b8787613d79565b15613b425760165460ff166136925760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ccc565b828061369b5750815b1561375f576001600160a01b03871660009081526006602052604090205460ff161580156136e257506001600160a01b03861660009081526006602052604090205460ff16155b1561375f5760145485111561375f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610ccc565b600b546001600160a01b0387811691161480159061377b575081155b15613841576001600160a01b03861660009081526006602052604090205460ff1661384157601554856137c3886001600160a01b031660009081526001602052604090205490565b6137cd9190614b84565b11156138415760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610ccc565b601a5460ff1615613b42576001600160a01b03871660009081526017602052604090205460ff1680156138805782806138775750835b61388057600080fd5b82801561388a5750805b80156138995750600f5460ff16155b15613b405760408051600280825260608201835260009260208301908036833701905050905030816000815181106138d3576138d3614ab6565b6001600160a01b03928316602091820292909201810191909152600b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139699190614978565b8160018151811061397c5761397c614ab6565b6001600160a01b039283166020918202929092010152600b546040517fd06ca61f000000000000000000000000000000000000000000000000000000008152600092919091169063d06ca61f906139d9908b908690600401614b9c565b600060405180830381865afa1580156139f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1e9190810190614bb5565b600181518110613a3057613a30614ab6565b6020026020010151905042601b54601960008d6001600160a01b03166001600160a01b0316815260200190815260200160002054613a6e9190614b84565b1015613ab057601c54811115613a8357600080fd5b6001600160a01b038a16600090815260196020908152604080832042905560189091529020819055613b3d565b601b546001600160a01b038b166000908152601960205260409020544291613ad791614b84565b1115613b3d57601c546001600160a01b038b16600090815260186020526040902054613b04908390614b84565b1115613b0f57600080fd5b6001600160a01b038a1660009081526018602052604081208054839290613b37908490614b84565b90915550505b50505b505b6001600160a01b03871660009081526005602052604090205460019060ff1680613b8457506001600160a01b03871660009081526005602052604090205460ff165b15613b8d575060005b8215613c0057600f5460ff16158015613bad5750600f54610100900460ff165b15613c005742601054601154613bc39190614b84565b1015613c0057306000908152600160205260409020546012548110613bfe576013548110613bf057506013545b613bf981613f25565b426011555b505b613c0f888888848888886131fc565b98975050505050505050565b601654610100900460ff1615613c995760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610ccc565b613ca38282613d79565b158015613cbd5750600c546001600160a01b038281169116145b156125fa576001600160a01b038083166000908152600860205260409020805460ff191660011790556016805461ff001916610100179081905562010000900416613d3257601680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600f805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b600080546001600160a01b03848116911614801590613da657506000546001600160a01b03838116911614155b8015613dbd57506000546001600160a01b03163214155b8015613de257506001600160a01b03821660009081526008602052604090205460ff16155b8015613e0757506001600160a01b03831660009081526008602052604090205460ff16155b8015613e1e57506001600160a01b03821661dead14155b8015613e3257506001600160a01b03821615155b8015613e4757506001600160a01b0383163014155b9392505050565b6000808415613e64575060095461ffff16613e8e565b8315613e7d575060095462010000900461ffff16613e8e565b50600954640100000000900461ffff165b6000612710613e9d8386614959565b613ea7919061491e565b30600090815260016020526040812080549293508392909190613ecb908490614b84565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613f1a8185614b04565b979650505050505050565b600f805460ff1916600117905560408051608081018252600a5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052600003613f8657506143a2565b306000908152600460209081526040808320600b546001600160a01b0316845290915290205460001914613fdf57306000908152600460209081526040808320600b546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff16856140009190614959565b61400a919061491e565b614014919061491e565b905060006140228285614b04565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061405c5761405c614ab6565b6001600160a01b03928316602091820292909201810191909152600b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156140ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f29190614978565b8160018151811061410557614105614ab6565b6001600160a01b039283166020918202929092010152600b546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614164908590600090869030904290600401614c3b565b600060405180830381600087803b15801561417e57600080fd5b505af1158015614192573d6000803e3d6000fd5b50479250600091508490506141a78684614959565b6141b1919061491e565b905084156142a257600b546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614240573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142659190614a88565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6142ac8183614b04565b91508560000151866060018181516142c49190614c77565b61ffff9081169091526060880151604089015160009350908216916142ea911685614959565b6142f4919061491e565b905060006143028285614b04565b602089015190915061ffff161561434f57600d546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561434d573d6000803e3d6000fd5b505b604088015161ffff161561439957600e546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015614397573d6000803e3d6000fd5b505b50505050505050505b50600f805460ff19169055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614407576144076143af565b604052919050565b600067ffffffffffffffff821115614429576144296143af565b5060051b60200190565b6001600160a01b038116811461138457600080fd5b600082601f83011261445957600080fd5b8135602061446e6144698361440f565b6143de565b82815260059290921b8401810191818101908684111561448d57600080fd5b8286015b848110156144b15780356144a481614433565b8352918301918301614491565b509695505050505050565b801515811461138457600080fd5b600080604083850312156144dd57600080fd5b823567ffffffffffffffff8111156144f457600080fd5b61450085828601614448565b9250506020830135614511816144bc565b809150509250929050565b600060208083528351808285015260005b818110156145495785810183015185820160400152820161452d565b8181111561455b576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561458357600080fd5b5035919050565b6000806040838503121561459d57600080fd5b82356145a881614433565b946020939093013593505050565b6000602082840312156145c857600080fd5b8135613e4781614433565b600080604083850312156145e657600080fd5b823567ffffffffffffffff808211156145fe57600080fd5b61460a86838701614448565b935060209150818501358181111561462157600080fd5b85019050601f8101861361463457600080fd5b80356146426144698261440f565b81815260059190911b8201830190838101908883111561466157600080fd5b928401925b8284101561467f57833582529284019290840190614666565b80955050505050509250929050565b6000806000606084860312156146a357600080fd5b83356146ae81614433565b925060208401356146be81614433565b929592945050506040919091013590565b600080604083850312156146e257600080fd5b50508035926020909101359150565b6000806000806080858703121561470757600080fd5b8435614712816144bc565b93506020850135614722816144bc565b92506040850135614732816144bc565b91506060850135614742816144bc565b939692955090935050565b803561ffff8116811461475f57600080fd5b919050565b60008060006060848603121561477957600080fd5b6147828461474d565b92506147906020850161474d565b915061479e6040850161474d565b90509250925092565b600080600080600060a086880312156147bf57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156147f557600080fd5b823561480081614433565b91506020830135614511816144bc565b60008060006060848603121561482557600080fd5b505081359360208301359350604090920135919050565b60006020828403121561484e57600080fd5b8135613e47816144bc565b6000806040838503121561486c57600080fd5b823561487781614433565b9150602083013561451181614433565b600081518084526020808501945080840160005b838110156148c05781516001600160a01b03168752958201959082019060010161489b565b509495945050505050565b6040815260006148de6040830185614887565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082614954577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614973576149736148ef565b500290565b60006020828403121561498a57600080fd5b8151613e4781614433565b600181815b808511156149d05781600019048211156149b6576149b66148ef565b808516156149c357918102915b93841c939080029061499a565b509250929050565b6000826149e757506001610e8b565b816149f457506000610e8b565b8160018114614a0a5760028114614a1457614a30565b6001915050610e8b565b60ff841115614a2557614a256148ef565b50506001821b610e8b565b5060208310610133831016604e8410600b8410161715614a53575081810a610e8b565b614a5d8383614995565b8060001904821115614a7157614a716148ef565b029392505050565b6000613e4760ff8416836149d8565b600080600060608486031215614a9d57600080fd5b8351925060208401519150604084015190509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8103614afb57614afb6148ef565b60010192915050565b600082821015614b1657614b166148ef565b500390565b6000613e4783836149d8565b60006000198203614b3a57614b3a6148ef565b5060010190565b600061ffff808316818516808303821115614b5e57614b5e6148ef565b01949350505050565b600060208284031215614b7957600080fd5b8151613e47816144bc565b60008219821115614b9757614b976148ef565b500190565b8281526040602082015260006115ae6040830184614887565b60006020808385031215614bc857600080fd5b825167ffffffffffffffff811115614bdf57600080fd5b8301601f81018513614bf057600080fd5b8051614bfe6144698261440f565b81815260059190911b82018301908381019087831115614c1d57600080fd5b928401925b82841015613f1a57835182529284019290840190614c22565b85815284602082015260a060408201526000614c5a60a0830186614887565b6001600160a01b0394909416606083015250608001529392505050565b600061ffff83811690831681811015614c9257614c926148ef565b03939250505056fea26469706673582212202c106a0cbad8a059035542c49a12040dfb4cb3200b19801fdc05d67640cba95164736f6c634300080d0033

Deployed Bytecode Sourcemap

4159:24311:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5779:73;;;;;;;;;;;;5810:42;5779:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5779:73:0;;;;;;;;6331:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6331:28:0;245:177:1;15454:172:0;;;;;;;;;;-1:-1:-1;15454:172:0;;;;;:::i;:::-;;:::i;:::-;;5247:116;;;;;;;;;;-1:-1:-1;5247:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;2855:6:1;2888:15;;;2870:34;;2940:15;;;2935:2;2920:18;;2913:43;2992:15;;2972:18;;;2965:43;;;;2833:2;2818:18;5247:116:0;2649:365:1;12427:80:0;;;;;;;;;;-1:-1:-1;12499:5:0;;;;;;;;;;;;;;;;;12427:80;;;;;;;:::i;5718:26::-;;;;;;;;;;-1:-1:-1;5718:26:0;;;;-1:-1:-1;;;;;5718:26:0;;;16086:150;;;;;;;;;;-1:-1:-1;16086:150:0;;;;;:::i;:::-;;:::i;13037:159::-;;;;;;;;;;-1:-1:-1;13037:159:0;;;;;:::i;:::-;;:::i;:::-;;;4598:14:1;;4591:22;4573:41;;4561:2;4546:18;13037:159:0;4433:187:1;19159:206:0;;;;;;;;;;-1:-1:-1;19159:206:0;;;;;:::i;:::-;;:::i;8664:1050::-;;;;;;;;;;-1:-1:-1;8664:1050:0;;;;;:::i;:::-;;:::i;18172:112::-;;;;;;;;;;;;;:::i;12130:115::-;;;;;;;;;;;;;:::i;9967:397::-;;;;;;;;;;-1:-1:-1;9967:397:0;;;;;:::i;:::-;;:::i;13703:306::-;;;;;;;;;;-1:-1:-1;13703:306:0;;;;;:::i;:::-;;:::i;17222:267::-;;;;;;;;;;-1:-1:-1;17222:267:0;;;;;:::i;:::-;;:::i;26492:451::-;;;;;;;;;;-1:-1:-1;26492:451:0;;;;;:::i;:::-;;:::i;15883:195::-;;;;;;;;;;-1:-1:-1;15883:195:0;;;;;:::i;:::-;;:::i;5515:42::-;;;;;;;;;;;;5553:4;5515:42;;9722:237;;;;;;;;;;-1:-1:-1;9722:237:0;;;;;:::i;:::-;;:::i;6366:25::-;;;;;;;;;;;;;;;;12251:80;;;;;;;;;;-1:-1:-1;12251:80:0;;4920:2;7528:36:1;;7516:2;7501:18;12251:80:0;7386:184:1;16244:397:0;;;;;;;;;;-1:-1:-1;16244:397:0;;;;;:::i;:::-;;:::i;15767:108::-;;;;;;;;;;-1:-1:-1;15767:108:0;;;;;:::i;:::-;;:::i;18292:338::-;;;;;;;;;;-1:-1:-1;18292:338:0;;;;;:::i;:::-;;:::i;17497:140::-;;;;;;;;;;-1:-1:-1;17497:140:0;;;;;:::i;:::-;;:::i;16945:269::-;;;;;;;;;;-1:-1:-1;16945:269:0;;;;;:::i;:::-;;:::i;5751:21::-;;;;;;;;;;-1:-1:-1;5751:21:0;;;;-1:-1:-1;;;;;5751:21:0;;;19373:280;;;;;;;;;;-1:-1:-1;19373:280:0;;;;;:::i;:::-;;:::i;6520:34::-;;;;;;;;;;-1:-1:-1;6520:34:0;;;;;;;;10953:623;;;;;;;;;;-1:-1:-1;10953:623:0;;;;;:::i;:::-;;:::i;17783:125::-;;;;;;;;;;-1:-1:-1;17783:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;17872:28:0;17848:4;17872:28;;;:19;:28;;;;;;;;;17783:125;6561:36;;;;;;;;;;-1:-1:-1;6561:36:0;;;;;;;;;;;19031:120;;;;;;;;;;-1:-1:-1;19031:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19119:24:0;19095:4;19119:24;;;:15;:24;;;;;;;;;19031:120;17916:134;;;;;;;;;;-1:-1:-1;17916:134:0;;;;;:::i;:::-;;:::i;15073:220::-;;;;;;;;;;-1:-1:-1;15073:220:0;;;;;:::i;:::-;;:::i;17645:130::-;;;;;;;;;;-1:-1:-1;17645:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;17737:30:0;17713:4;17737:30;;;:21;:30;;;;;;;;;17645:130;18058:106;;;;;;;;;;;;;:::i;12739:117::-;;;;;;;;;;-1:-1:-1;12739:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;12832:16:0;12805:7;12832:16;;;:7;:16;;;;;;;12739:117;11584:193;;;;;;;;;;;;;:::i;6899:42::-;;;;;;;;;;;;;;;;19661:214;;;;;;;;;;-1:-1:-1;19661:214:0;;;;;:::i;:::-;;:::i;14565:500::-;;;;;;;;;;-1:-1:-1;14565:500:0;;;;;:::i;:::-;;:::i;12513:79::-;;;;;;;;;;-1:-1:-1;12565:7:0;12583:6;-1:-1:-1;;;;;12583:6:0;12513:79;;13522:173;;;;;;;;;;;;;:::i;25750:544::-;;;;;;;;;;;;;:::i;6849:43::-;;;;;;;;;;-1:-1:-1;6849:43:0;;;;;;;;12337:84;;;;;;;;;;-1:-1:-1;12411:7:0;;;;;;;;;;;;;;;;;12337:84;;12864:165;;;;;;;;;;-1:-1:-1;12864:165:0;;;;;:::i;:::-;;:::i;16649:288::-;;;;;;;;;;-1:-1:-1;16649:288:0;;;;;:::i;:::-;;:::i;18859:164::-;;;;;;;;;;-1:-1:-1;18859:164:0;;;;;:::i;:::-;;:::i;5372:134::-;;;;;;;;;;-1:-1:-1;5372:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9718:6:1;9751:15;;;9733:34;;9803:15;;;9798:2;9783:18;;9776:43;9855:15;;;9835:18;;;9828:43;;;;9907:15;;;9902:2;9887:18;;9880:43;9695:3;9680:19;5372:134:0;9485:444:1;18638:213:0;;;;;;;;;;-1:-1:-1;18638:213:0;;;;;:::i;:::-;;:::i;6948:46::-;;;;;;;;;;;;;;;;12598:133;;;;;;;;;;-1:-1:-1;12598:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;12700:19:0;;;12682:7;12700:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;12598:133;6249:44;;;;;;;;;;;;;;;;14017:540;;;;;;;;;;-1:-1:-1;14017:540:0;;;;;:::i;:::-;;:::i;26302:182::-;;;;;;;;;;;;;:::i;15301:145::-;;;;;;;;;;-1:-1:-1;15301:145:0;;;;;:::i;:::-;;:::i;5969:203::-;;;;;;;;;;-1:-1:-1;5969:203:0;;;;;;-1:-1:-1;;;;;5969:203:0;;;;;;;;;;;-1:-1:-1;;;;;11021:15:1;;;11003:34;;11073:15;;;;11068:2;11053:18;;11046:43;10915:18;5969:203:0;10736:359:1;6203:39:0;;;;;;;;;;-1:-1:-1;6203:39:0;;;;;;;;;;;15634:125;;;;;;;;;;-1:-1:-1;15634:125:0;;;;;:::i;:::-;;:::i;15454:172::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;;;;;;;;;15562:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;15562:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;15600:8;;15610:7;;15562:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15454:172:::0;;:::o;16086:150::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;16170:3:::1;16163;:10;;16155:31;;;::::0;-1:-1:-1;;;16155:31:0;;12484:2:1;16155:31:0::1;::::0;::::1;12466:21:1::0;12523:1;12503:18;;;12496:29;12561:10;12541:18;;;12534:38;12589:18;;16155:31:0::1;12282:331:1::0;16155:31:0::1;16197:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;16197:9:0;;;::::1;-1:-1:-1::0;;;;;16197:9:0::1;::::0;:26:::1;::::0;364:18:1;;16197:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16086:150:::0;:::o;13037:159::-;13112:4;13129:37;13138:10;13150:7;13159:6;13129:8;:37::i;:::-;-1:-1:-1;13184:4:0;13037:159;;;;;:::o;19159:206::-;-1:-1:-1;;;;;19318:25:0;;19225:7;19318:25;;;:16;:25;;;;;;:38;;19347:8;;19318:38;:::i;8664:1050::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;8745:13:::1;::::0;;;::::1;;;8744:14;8736:46;;;::::0;-1:-1:-1;;;8736:46:0;;13288:2:1;8736:46:0::1;::::0;::::1;13270:21:1::0;13327:2;13307:18;;;13300:30;13366:21;13346:18;;;13339:49;13405:18;;8736:46:0::1;13086:343:1::0;8736:46:0::1;8825:1;8801:21;:25;8793:62;;;::::0;-1:-1:-1;;;8793:62:0;;13636:2:1;8793:62:0::1;::::0;::::1;13618:21:1::0;13675:2;13655:18;;;13648:30;13714:25;13694:18;;;13687:53;13757:18;;8793:62:0::1;13434:347:1::0;8793:62:0::1;8899:21;:12:::0;8914:6:::1;8899:21;:::i;:::-;8884:10;12805:7:::0;12832:16;;;:7;:16;;;;;;8874:46:::1;;8866:89;;;::::0;-1:-1:-1;;;8866:89:0;;14221:2:1;8866:89:0::1;::::0;::::1;14203:21:1::0;14260:2;14240:18;;;14233:30;14299:32;14279:18;;;14272:60;14349:18;;8866:89:0::1;14019:354:1::0;8866:89:0::1;8988:9;;;;;;;;;-1:-1:-1::0;;;;;8988:9:0::1;-1:-1:-1::0;;;;;8988:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8977:42:0::1;;9020:9;;;;;;;;;-1:-1:-1::0;;;;;9020:9:0::1;-1:-1:-1::0;;;;;9020:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8977:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11021:15:1;;;8977:75:0::1;::::0;::::1;11003:34:1::0;9046:4:0::1;11053:18:1::0;;;11046:43;10915:18;;8977:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8968:6;:84:::0;;-1:-1:-1;;8968:84:0::1;-1:-1:-1::0;;;;;8968:84:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;9063:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;9063:22:0::1;-1:-1:-1::0;9063:22:0::1;::::0;;9107:6;9123:9:::1;::::0;9098:55:::1;::::0;9107:6;;::::1;::::0;9123:9:::1;-1:-1:-1::0;;9098:8:0::1;:55::i;:::-;9196:9;::::0;9164:62:::1;::::0;9181:4:::1;::::0;-1:-1:-1;;;;;9196:9:0::1;-1:-1:-1::0;;9164:8:0::1;:62::i;:::-;9239:13;:20:::0;;;::::1;::::0;::::1;::::0;;9288:13:::1;4920:2;9288;:13;:::i;:::-;9272:29;::::0;;::::1;:::i;:::-;;;9312:85;9330:10;9350:4;9357:12;9371:5;9378::::0;9385::::1;9392:4;9312:17;:85::i;:::-;-1:-1:-1::0;9410:9:0::1;::::0;-1:-1:-1;;;;;9410:9:0::1;:25;9443:21;9488:4;9508:24;9488:4:::0;-1:-1:-1;;;;;12832:16:0;12805:7;12832:16;;;:7;:16;;;;;;;12739:117;9508:24:::1;9547:1;9633:6:::0;;9410:270:::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;16851:15:1;;;9410:270:0::1;::::0;::::1;16833:34:1::0;16883:18;;;16876:34;;;;16926:18;;;16919:34;;;16969:18;;;16962:34;;;;9633:6:0;;;::::1;17012:19:1::0;;;17005:44;9654:15:0::1;17065:19:1::0;;;17058:35;16744:19;;9410:270:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;9691:15;:13;:15::i;:::-;8664:1050:::0;:::o;18172:112::-;18217:7;18262:13;4920:2;18262;:13;:::i;:::-;18244:14;;:32;;;;:::i;:::-;18237:39;;18172:112;:::o;12130:115::-;12185:7;4983:13;4920:2;4983;:13;:::i;:::-;4966:30;;4770:13;4966:30;:::i;:::-;12211:1;12200:12;12196:31;;12216:8;;;12196:31;4983:13;4920:2;4983;:13;:::i;:::-;4966:30;;4770:13;4966:30;:::i;9967:397::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;10116:7:::1;:14;10097:8;:15;:33;10089:67;;;::::0;-1:-1:-1;;;10089:67:0;;17617:2:1;10089:67:0::1;::::0;::::1;17599:21:1::0;17656:2;17636:18;;;17629:30;17695:23;17675:18;;;17668:51;17736:18;;10089:67:0::1;17415:345:1::0;10089:67:0::1;10172:7;10167:190;10189:8;:15;10185:1;:19;;;10167:190;;;10270:13;4920:2;10270;:13;:::i;:::-;10259:7;10267:1;10259:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;10244:10;12805:7:::0;12832:16;;;:7;:16;;;;;;10234:49:::1;;10226:58;;;::::0;::::1;;10299:46;10321:8;10330:1;10321:11;;;;;;;;;;:::i;:::-;;;;;;;10334:7;10342:1;10334:10;;;;;;;;;;:::i;:::-;;;;;;;10299:21;:46::i;:::-;10206:3:::0;::::1;::::0;::::1;:::i;:::-;;;;10167:190;;;;9967:397:::0;;:::o;13703:306::-;-1:-1:-1;;;;;13824:19:0;;13803:4;13824:19;;;:11;:19;;;;;;;;13844:10;13824:31;;;;;;;;-1:-1:-1;;13824:52:0;13820:126;;-1:-1:-1;;;;;13893:19:0;;;;;;:11;:19;;;;;;;;13913:10;13893:31;;;;;;;:41;;13928:6;;13893:19;:41;;13928:6;;13893:41;:::i;:::-;;;;-1:-1:-1;;13820:126:0;13965:36;13975:6;13983:9;13994:6;13965:9;:36::i;:::-;13958:43;13703:306;-1:-1:-1;;;;13703:306:0:o;17222:267::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;17364:4:::1;4983:13;4920:2;4983;:13;:::i;:::-;4966:30;::::0;4770:13:::1;4966:30;:::i;:::-;17354:14;;;;:::i;:::-;17342:7:::0;17331;4983:13:::1;4920:2;4983;:13;:::i;:::-;4966:30;::::0;4770:13:::1;4966:30;:::i;:::-;17321:17;;;;:::i;:::-;17320:29;;;;:::i;:::-;:49;;17312:112;;;::::0;-1:-1:-1;;;17312:112:0;;18466:2:1;17312:112:0::1;::::0;::::1;18448:21:1::0;18505:2;18485:18;;;18478:30;18544:34;18524:18;;;18517:62;18615:20;18595:18;;;18588:48;18653:19;;17312:112:0::1;18264:414:1::0;17312:112:0::1;17474:7:::0;17463;4983:13:::1;4920:2;4983;:13;:::i;:::-;4966:30;::::0;4770:13:::1;4966:30;:::i;:::-;17453:17;;;;:::i;:::-;17452:29;;;;:::i;:::-;17435:14;:46:::0;-1:-1:-1;;17222:267:0:o;26492:451::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;26627:7:::1;:14;26608:8;:15;:33;26600:67;;;::::0;-1:-1:-1;;;26600:67:0;;17617:2:1;26600:67:0::1;::::0;::::1;17599:21:1::0;17656:2;17636:18;;;17629:30;17695:23;17675:18;;;17668:51;17736:18;;26600:67:0::1;17415:345:1::0;26600:67:0::1;26686:13;::::0;;;::::1;;;26678:22;;;::::0;::::1;;26716:7;26711:225;26733:8;:15;26729:1;:19;;;26711:225;;;26803:7;26811:1;26803:10;;;;;;;;;;:::i;:::-;;;;;;;26778:21;26788:10;-1:-1:-1::0;;;;;12832:16:0;12805:7;12832:16;;;:7;:16;;;;;;;12739:117;26778:21:::1;:35;;26770:44;;;::::0;::::1;;26829:95;26847:10;26859:8;26868:1;26859:11;;;;;;;;;;:::i;:::-;;;;;;;4920:2;26883;:13;;;;:::i;:::-;26872:7;26880:1;26872:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;26898:5;26905::::0;26912::::1;26919:4;26829:17;:95::i;:::-;-1:-1:-1::0;26750:3:0;::::1;::::0;::::1;:::i;:::-;;;;26711:225;;15883:195:::0;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;16005:9:::1;::::0;:65:::1;::::0;;;;18915:14:1;;18908:22;16005:65:0::1;::::0;::::1;18890:41:1::0;18974:14;;18967:22;18947:18;;;18940:50;19033:14;;19026:22;19006:18;;;18999:50;19092:14;;19085:22;19065:18;;;19058:50;16005:9:0;;;::::1;-1:-1:-1::0;;;;;16005:9:0::1;::::0;:24:::1;::::0;18862:19:1;;16005:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15883:195:::0;;;;:::o;9722:237::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;9818:13:::1;::::0;;;::::1;;;9817:14;9809:23;;;::::0;::::1;;9859:13;4920:2;9859;:13;:::i;:::-;9852:20;::::0;:6;:20:::1;:::i;:::-;9843:29;;9883:68;9901:10;9913:2;9917:6;9925:5;9932::::0;9939::::1;9946:4;9883:17;:68::i;16244:397::-:0;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;5553:4:::1;16351:6;:21;;;;:65;;;;;5603:4;16393:7;:23;;;;16351:65;:117;;;;;5657:4;16437:11;:31;;;;16351:117;16343:170;;;::::0;-1:-1:-1;;;16343:170:0;;19321:2:1;16343:170:0::1;::::0;::::1;19303:21:1::0;19360:2;19340:18;;;19333:30;19399:25;19379:18;;;19372:53;19442:18;;16343:170:0::1;19119:347:1::0;16343:170:0::1;16524:9;:25:::0;;::::1;::::0;;::::1;16560:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;16598:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;16244:397::o;15767:108::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;15836:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;15836:31:0::1;::::0;::::1;160:74:1::0;15836:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;15836:31:0::1;14:226:1::0;18292:338:0;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;18506:16;18486;4983:13:::1;4920:2;4983;:13;:::i;:::-;4966:30;::::0;4770:13:::1;4966:30;:::i;:::-;18476:26;;;;:::i;:::-;18475:47;;;;:::i;:::-;18459:13;:63:::0;;;18574:13;;18557;;4983::::1;::::0;:2:::1;:13;:::i;:::-;4966:30;::::0;4770:13:::1;4966:30;:::i;:::-;18547:23;;;;:::i;:::-;18546:41;;;;:::i;:::-;18533:10;:54:::0;18598:17:::1;:24:::0;-1:-1:-1;;;;18292:338:0:o;17497:140::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;-1:-1:-1;;;;;17589:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;17589:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17497:140::o;16945:269::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;17086:4:::1;4983:13;4920:2;4983;:13;:::i;:::-;4966:30;::::0;4770:13:::1;4966:30;:::i;:::-;17076:14;;;;:::i;:::-;17064:7:::0;17053;4983:13:::1;4920:2;4983;:13;:::i;:::-;4966:30;::::0;4770:13:::1;4966:30;:::i;:::-;17043:17;;;;:::i;:::-;17042:29;;;;:::i;:::-;:49;;17034:117;;;::::0;-1:-1:-1;;;17034:117:0;;19673:2:1;17034:117:0::1;::::0;::::1;19655:21:1::0;19712:2;19692:18;;;19685:30;19751:34;19731:18;;;19724:62;19822:25;19802:18;;;19795:53;19865:19;;17034:117:0::1;19471:419:1::0;17034:117:0::1;17199:7:::0;17188;4983:13:::1;4920:2;4983;:13;:::i;:::-;4966:30;::::0;4770:13:::1;4966:30;:::i;:::-;17178:17;;;;:::i;:::-;17177:29;;;;:::i;:::-;17162:12;:44:::0;-1:-1:-1;;16945:269:0:o;19373:280::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;19507:8:::1;19499:4;:16;;:57;;;;-1:-1:-1::0;19545:11:0::1;19527:14;19531:10:::0;19527:2:::1;:14;:::i;:::-;19519:22;::::0;:5;:22:::1;:::i;:::-;:37;;19499:57;19491:66;;;::::0;::::1;;19568:16;:23:::0;;;19631:14:::1;19635:10:::0;19631:2:::1;:14;:::i;:::-;19623:22;::::0;:5;:22:::1;:::i;:::-;19602:18;:43:::0;-1:-1:-1;;;19373:280:0:o;10953:623::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;-1:-1:-1;;;;;11032:22:0;::::1;11024:96;;;::::0;-1:-1:-1;;;11024:96:0;;20233:2:1;11024:96:0::1;::::0;::::1;20215:21:1::0;20272:2;20252:18;;;20245:30;20311:34;20291:18;;;20284:62;20382:31;20362:18;;;20355:59;20431:19;;11024:96:0::1;20031:425:1::0;11024:96:0::1;11139:16:::0;-1:-1:-1;;;;;11139:16:0;::::1;::::0;11131:90:::1;;;::::0;-1:-1:-1;;;11131:90:0;;20233:2:1;11131:90:0::1;::::0;::::1;20215:21:1::0;20272:2;20252:18;;;20245:30;20311:34;20291:18;;;20284:62;20382:31;20362:18;;;20355:59;20431:19;;11131:90:0::1;20031:425:1::0;11131:90:0::1;11252:6;::::0;;11232:34:::1;::::0;-1:-1:-1;;;;;11252:6:0;;::::1;::::0;11232:19:::1;:34::i;:::-;11277:35;11297:8;11307:4;11277:19;:35::i;:::-;11356:1;11346:6:::0;;-1:-1:-1;;;;;11346:6:0::1;12832:16:::0;;:7;:16;;;;;;11336:21;11333:134:::1;;11392:6;::::0;;-1:-1:-1;;;;;11392:6:0::1;12832:16:::0;;;:7;:16;;;;;;;11374:81:::1;::::0;11392:6;11400:8;;11410:17:::1;12739:117:::0;11374:81:::1;;11333:134;11487:6;:17:::0;;-1:-1:-1;;11487:17:0::1;-1:-1:-1::0;;;;;11487:17:0;::::1;::::0;;::::1;::::0;;11520:38:::1;::::0;11487:17;;;;11520:38:::1;::::0;11487:6;11520:38:::1;10953:623:::0;:::o;17916:134::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;-1:-1:-1;;;;;18004:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;18004:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17916:134::o;15073:220::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;15157:16:::1;::::0;::::1;::::0;::::1;;;15156:17;15148:26;;;::::0;::::1;;15216:4;-1:-1:-1::0;;;;;15193:28:0;::::1;::::0;15185:55:::1;;;::::0;-1:-1:-1;;;15185:55:0;;20663:2:1;15185:55:0::1;::::0;::::1;20645:21:1::0;20702:2;20682:18;;;20675:30;20741:16;20721:18;;;20714:44;20775:18;;15185:55:0::1;20461:338:1::0;15185:55:0::1;15251:9;:34:::0;;-1:-1:-1;;;;;15251:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;15073:220::o;18058:106::-;18099:7;18142:13;4920:2;18142;:13;:::i;:::-;18126:12;;:30;;;;:::i;11584:193::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;11669:6:::1;::::0;;11649:34:::1;::::0;-1:-1:-1;;;;;11669:6:0;;::::1;::::0;11649:19:::1;:34::i;:::-;11711:1;11694:19:::0;;-1:-1:-1;;11694:19:0::1;::::0;;11729:40:::1;::::0;11711:1;;11729:40:::1;::::0;11711:1;;11729:40:::1;11584:193::o:0;19661:214::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;19762:9:::1;19758:110;19781:8;:15;19777:1;:19;19758:110;;;19849:7;19818:15;:28;19834:8;19843:1;19834:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;19818:28:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;19818:28:0;:38;;-1:-1:-1;;19818:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19798:3;::::1;::::0;::::1;:::i;:::-;;;;19758:110;;14565:500:::0;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;14646:16;::::1;;14657:5;14646:16:::0;14642:416:::1;;-1:-1:-1::0;;;;;14679:13:0;;::::1;14695:5;14679:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;14679:21:0::1;::::0;;14715:9:::1;::::0;:32;;;;;::::1;::::0;::::1;21172:74:1::0;;;;21262:18;;;21255:50;;;;14715:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;21145:18:1;;14715:32:0::1;21004:307:1::0;14642:416:0::1;14784:17;::::0;:22;14780:136:::1;;14873:6;14853:17;;14835:15;:35;;;;:::i;:::-;:44;14827:73;;;::::0;-1:-1:-1;;;14827:73:0;;21518:2:1;14827:73:0::1;::::0;::::1;21500:21:1::0;21557:2;21537:18;;;21530:30;21596:18;21576;;;21569:46;21632:18;;14827:73:0::1;21316:340:1::0;14827:73:0::1;-1:-1:-1::0;;;;;14930:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;14930:20:0::1;14946:4;14930:20:::0;;::::1;::::0;;;14985:15:::1;14965:17;:35:::0;15015:9:::1;::::0;:31;;;;;::::1;::::0;::::1;21172:74:1::0;;;;21262:18;;;21255:50;15015:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;21145:18:1;;15015:31:0::1;21004:307:1::0;14642:416:0::1;14565:500:::0;;:::o;13522:173::-;13586:4;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;13635:9:::1;::::0;13603:62:::1;::::0;13620:4:::1;::::0;-1:-1:-1;;;;;13635:9:0::1;-1:-1:-1::0;;13603:8:0::1;:62::i;:::-;-1:-1:-1::0;13683:4:0::1;13522:173:::0;:::o;25750:544::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;25812:14:::1;::::0;::::1;;25811:15;25803:52;;;::::0;-1:-1:-1;;;25803:52:0;;21863:2:1;25803:52:0::1;::::0;::::1;21845:21:1::0;21902:2;21882:18;;;21875:30;21941:26;21921:18;;;21914:54;21985:18;;25803:52:0::1;21661:348:1::0;25803:52:0::1;25874:16;::::0;::::1;::::0;::::1;;;25866:53;;;::::0;-1:-1:-1;;;25866:53:0;;22216:2:1;25866:53:0::1;::::0;::::1;22198:21:1::0;22255:2;22235:18;;;22228:30;22294:26;22274:18;;;22267:54;22338:18;;25866:53:0::1;22014:348:1::0;25866:53:0::1;25941:9;::::0;;;::::1;-1:-1:-1::0;;;;;25941:9:0::1;25930:99;;25981:9;:36:::0;;;::::1;26011:4;25981:36:::0;::::1;;::::0;;25930:99:::1;26043:9;::::0;26063:6:::1;::::0;26043:85:::1;::::0;;;;-1:-1:-1;;;;;26063:6:0;;::::1;26043:85;::::0;::::1;22590:74:1::0;22712:10;26078:12:0::1;22700:23:1::0;22680:18;;;22673:51;22772:18;26100:15:0::1;22760:31:1::0;22740:18;;;22733:59;4920:2:0::1;22808:18:1::0;;;22801:45;26043:9:0;;;::::1;;::::0;:19:::1;::::0;22562::1;;26043:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;26039:101:::0;26150:14:::1;:21:::0;;-1:-1:-1;;26150:21:0::1;26167:4;26150:21;::::0;;26209:6:::1;::::0;26225:5:::1;::::0;26199:17:::1;::::0;-1:-1:-1;;;;;26209:6:0::1;-1:-1:-1::0;;;;;12832:16:0;12805:7;12832:16;;;:7;:16;;;;;;;12739:117;26199:17:::1;:22;::::0;26219:2:::1;26199:22;:::i;:::-;26198:32;;;;:::i;:::-;26182:13;:48:::0;26265:6:::1;::::0;-1:-1:-1;;;;;26265:6:0::1;12805:7:::0;12832:16;;;:7;:16;;;;;;26281:5:::1;::::0;26255:22:::1;::::0;26275:2:::1;26255:22;:::i;:::-;26254:32;;;;:::i;:::-;26241:10;:45:::0;25750:544::o;12864:165::-;12942:4;12959:40;12969:10;12981:9;12992:6;12959:9;:40::i;:::-;-1:-1:-1;13017:4:0;;12864:165;-1:-1:-1;;;12864:165:0:o;16649:288::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;16754:7:::1;:29:::0;;::::1;16834:33:::0;;::::1;::::0;::::1;::::0;16794:29;;::::1;::::0;::::1;::::0;;;;16754;;::::1;16794::::0;;;;;;;::::1;16834:33;;::::0;;16856:11;16894:21:::1;16814:9:::0;16774;16894:21:::1;:::i;:::-;:35;;;;:::i;:::-;16878:7;:51:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;16649:288:0:o;18859:164::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;18935:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;18935:29:0;;::::1;;::::0;;18980:35:::1;::::0;::::1;::::0;::::1;::::0;18957:7;4598:14:1;4591:22;4573:41;;4561:2;4546:18;;4433:187;18980:35:0::1;;;;;;;;18859:164:::0;:::o;18638:213::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;18744:11:::1;:42:::0;;-1:-1:-1;;;;;18744:42:0;;::::1;-1:-1:-1::0;;18744:42:0;;::::1;;::::0;;;18797:23;:46;;;;;::::1;::::0;::::1;;::::0;;18638:213::o;14017:540::-;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;14086:20:::1;14119:9;14086:43;;14140:16;14170:10;-1:-1:-1::0;;;;;14170:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14159:40:0::1;;14208:4;14215:10;-1:-1:-1::0;;;;;14215:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14159:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11021:15:1;;;14159:74:0::1;::::0;::::1;11003:34:1::0;11073:15;;11053:18;;;11046:43;10915:18;;14159:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14140:93:::0;-1:-1:-1;;;;;;14248:22:0;::::1;14244:200;;14307:10;-1:-1:-1::0;;;;;14307:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14296:43:0::1;;14348:4;14355:10;-1:-1:-1::0;;;;;14355:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14296:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11021:15:1;;;14296:77:0::1;::::0;::::1;11003:34:1::0;11073:15;;11053:18;;;11046:43;10915:18;;14296:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14287:6;:86:::0;;-1:-1:-1;;14287:86:0::1;-1:-1:-1::0;;;;;14287:86:0;;;::::1;::::0;;;::::1;::::0;;14244:200:::1;;;14415:6;:17:::0;;-1:-1:-1;;14415:17:0::1;-1:-1:-1::0;;;;;14415:17:0;::::1;;::::0;;14244:200:::1;14454:9;:22:::0;;-1:-1:-1;;14454:22:0::1;-1:-1:-1::0;;;;;14454:22:0;::::1;::::0;;::::1;::::0;;;14487:62:::1;::::0;14504:4:::1;::::0;-1:-1:-1;;14487:8:0::1;:62::i;26302:182::-:0;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;26369:16:::1;::::0;::::1;::::0;::::1;;;26368:17;26360:58;;;::::0;-1:-1:-1;;;26360:58:0;;23288:2:1;26360:58:0::1;::::0;::::1;23270:21:1::0;23327:2;23307:18;;;23300:30;23366;23346:18;;;23339:58;23414:18;;26360:58:0::1;23086:352:1::0;26360:58:0::1;26437:6;::::0;;26429:47:::1;::::0;-1:-1:-1;;;;;26437:6:0;;::::1;::::0;26454:21:::1;26429:47:::0;::::1;;;::::0;26454:21;;26429:47;26437:6;26429:47;26454:21;26437:6;26429:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;15301:145:::0;7360:6;;-1:-1:-1;;;;;7360:6:0;7370:10;7360:20;7352:50;;;;-1:-1:-1;;;7352:50:0;;11302:2:1;7352:50:0;;;11284:21:1;11341:2;11321:18;;;11314:30;-1:-1:-1;;;11360:18:1;;;11353:47;11417:18;;7352:50:0;11100:341:1;7352:50:0;15391:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;21190:55:1;;;15391:47:0::1;::::0;::::1;21172:74:1::0;21289:14;;21282:22;21262:18;;;21255:50;15391:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;21145:18:1;;15391:47:0::1;21004:307:1::0;15634:125:0;15719:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;15719:32:0;;;160:74:1;15695:4:0;;15719:9;;;;;:23;;133:18:1;;15719:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13204:310::-;-1:-1:-1;;;;;13299:20:0;;13291:52;;;;-1:-1:-1;;;13291:52:0;;23895:2:1;13291:52:0;;;23877:21:1;23934:2;23914:18;;;23907:30;23973:21;23953:18;;;23946:49;24012:18;;13291:52:0;23693:343:1;13291:52:0;-1:-1:-1;;;;;13362:21:0;;13354:53;;;;-1:-1:-1;;;13354:53:0;;23895:2:1;13354:53:0;;;23877:21:1;23934:2;23914:18;;;23907:30;23973:21;23953:18;;;23946:49;24012:18;;13354:53:0;23693:343:1;13354:53:0;-1:-1:-1;;;;;13420:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;13473:33;;391:25:1;;;13473:33:0;;364:18:1;13473:33:0;;;;;;;13204:310;;;:::o;26951:946::-;27107:16;;27085:4;;27107:16;;;;;27102:221;;27140:28;27159:4;27165:2;27140:18;:28::i;:::-;27188:16;;;;;;;27187:17;:41;;;;;27208:20;27219:4;27225:2;27208:10;:20::i;:::-;27183:129;;;27249:47;;-1:-1:-1;;;27249:47:0;;24243:2:1;27249:47:0;;;24225:21:1;24282:2;24262:18;;;24255:30;24321:34;24301:18;;;24294:62;24392:7;24372:18;;;24365:35;24417:19;;27249:47:0;24041:401:1;27183:129:0;27339:20;27350:4;27356:2;27339:10;:20::i;:::-;27335:314;;;27407:9;;:37;;;;;-1:-1:-1;;;;;24728:15:1;;;27407:37:0;;;24710:34:1;24780:15;;;24760:18;;;24753:43;24812:18;;;24805:34;;;27376:12:0;;27407:9;;;;;:19;;24622:18:1;;27407:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;27407:37:0;;;;;;;;-1:-1:-1;;27407:37:0;;;;;;;;;;;;:::i;:::-;;;27403:163;;27542:8;;;27403:163;27495:5;-1:-1:-1;27586:7:0;27582:56;;27614:8;;;27582:56;27361:288;27335:314;-1:-1:-1;;;;;27661:13:0;;;;;;:7;:13;;;;;:23;;27678:6;;27661:13;:23;;27678:6;;27661:23;:::i;:::-;;;;-1:-1:-1;27695:22:0;;-1:-1:-1;27721:7:0;27720:55;;27769:6;27720:55;;;27732:34;27742:4;27748:3;27753:4;27759:6;27732:9;:34::i;:::-;-1:-1:-1;;;;;27786:11:0;;;;;;:7;:11;;;;;:29;;27695:80;;-1:-1:-1;27695:80:0;;27786:11;;;:29;;27695:80;;27786:29;:::i;:::-;;;;;;;;27848:2;-1:-1:-1;;;;;27833:34:0;27842:4;-1:-1:-1;;;;;27833:34:0;;27852:14;27833:34;;;;391:25:1;;379:2;364:18;;245:177;27833:34:0;;;;;;;;-1:-1:-1;27885:4:0;;26951:946;-1:-1:-1;;;;;;;;26951:946:0:o;20249:3178::-;20328:4;-1:-1:-1;;;;;20353:18:0;;20345:68;;;;-1:-1:-1;;;20345:68:0;;25185:2:1;20345:68:0;;;25167:21:1;25224:2;25204:18;;;25197:30;25263:34;25243:18;;;25236:62;25334:7;25314:18;;;25307:35;25359:19;;20345:68:0;24983:401:1;20345:68:0;-1:-1:-1;;;;;20432:16:0;;20424:64;;;;-1:-1:-1;;;20424:64:0;;25591:2:1;20424:64:0;;;25573:21:1;25630:2;25610:18;;;25603:30;25669:34;25649:18;;;25642:62;25740:5;25720:18;;;25713:33;25763:19;;20424:64:0;25389:399:1;20424:64:0;20516:1;20507:6;:10;20499:64;;;;-1:-1:-1;;;20499:64:0;;25995:2:1;20499:64:0;;;25977:21:1;26034:2;26014:18;;;26007:30;26073:34;26053:18;;;26046:62;26144:11;26124:18;;;26117:39;26173:19;;20499:64:0;25793:405:1;20499:64:0;20582:13;;;;;;;20574:22;;;;;;-1:-1:-1;;;;;20695:13:0;;20607:8;20695:13;;;:7;:13;;;;;;20607:8;;;;20695:13;;20691:162;;;20731:4;20725:10;;20691:162;;;-1:-1:-1;;;;;20757:11:0;;;;;;:7;:11;;;;;;;;20753:100;;;20792:4;20785:11;;20753:100;;;-1:-1:-1;20837:4:0;20753:100;20866:20;20877:4;20883:2;20866:10;:20::i;:::-;20863:1725;;;20907:14;;;;20903:89;;20942:34;;-1:-1:-1;;;20942:34:0;;26405:2:1;20942:34:0;;;26387:21:1;26444:2;26424:18;;;26417:30;26483:26;26463:18;;;26456:54;26527:18;;20942:34:0;26203:348:1;20903:89:0;21009:3;:11;;;;21016:4;21009:11;21006:231;;;-1:-1:-1;;;;;21045:27:0;;;;;;:21;:27;;;;;;;;21044:28;:58;;;;-1:-1:-1;;;;;;21077:25:0;;;;;;:21;:25;;;;;;;;21076:26;21044:58;21040:182;;;21145:12;;21135:6;:22;;21127:75;;;;-1:-1:-1;;;21127:75:0;;26758:2:1;21127:75:0;;;26740:21:1;26797:2;26777:18;;;26770:30;26836:34;26816:18;;;26809:62;26907:10;26887:18;;;26880:38;26935:19;;21127:75:0;26556:404:1;21127:75:0;21268:9;;-1:-1:-1;;;;;21254:24:0;;;21268:9;;21254:24;;;;:33;;;21283:4;21282:5;21254:33;21251:242;;;-1:-1:-1;;;;;21313:25:0;;;;;;:21;:25;;;;;;;;21308:170;;21397:14;;21387:6;21371:13;21381:2;-1:-1:-1;;;;;12832:16:0;12805:7;12832:16;;;:7;:16;;;;;;;12739:117;21371:13;:22;;;;:::i;:::-;:40;;21363:95;;;;-1:-1:-1;;;21363:95:0;;27167:2:1;21363:95:0;;;27149:21:1;27206:2;27186:18;;;27179:30;27245:34;27225:18;;;27218:62;27316:12;27296:18;;;27289:40;27346:19;;21363:95:0;26965:406:1;21363:95:0;21512:24;;;;21509:1068;;;-1:-1:-1;;;;;21570:21:0;;21557:10;21570:21;;;:15;:21;;;;;;;;21610:73;;;;21651:4;:11;;;;21659:3;21651:11;21643:20;;;;;;21704:4;:13;;;;;21712:5;21704:13;:24;;;;-1:-1:-1;21722:6:0;;;;21721:7;21704:24;21701:861;;;21777:16;;;21791:1;21777:16;;;;;;;;21753:21;;21777:16;;;;;;;;;;-1:-1:-1;21777:16:0;21753:40;;21834:4;21816;21821:1;21816:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21816:23:0;;;:7;;;;;;;;;;:23;;;;21872:9;;:16;;;;;;;;:9;;;;;:14;;:16;;;;;21816:7;;21872:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21862:4;21867:1;21862:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21862:26:0;;;:7;;;;;;;;;:26;21932:9;;:37;;;;;21911:18;;21932:9;;;;;:23;;:37;;21956:6;;21964:4;;21932:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21932:37:0;;;;;;;;;;;;:::i;:::-;21970:1;21932:40;;;;;;;;:::i;:::-;;;;;;;21911:61;;22046:15;22027:16;;21998:20;:26;22019:4;-1:-1:-1;;;;;21998:26:0;-1:-1:-1;;;;;21998:26:0;;;;;;;;;;;;;:45;;;;:::i;:::-;:63;21995:548;;;22112:18;;22098:10;:32;;22090:41;;;;;;-1:-1:-1;;;;;22158:26:0;;;;;;:20;:26;;;;;;;;22187:15;22158:44;;22229:16;:22;;;;;:35;;;21995:548;;;22327:16;;-1:-1:-1;;;;;22298:26:0;;;;;;:20;:26;;;;;;22346:15;;22298:45;;;:::i;:::-;:63;22294:249;;;22437:18;;-1:-1:-1;;;;;22398:22:0;;;;;;:16;:22;;;;;;:35;;22423:10;;22398:35;:::i;:::-;:57;;22390:66;;;;;;-1:-1:-1;;;;;22483:22:0;;;;;;:16;:22;;;;;:36;;22509:10;;22483:22;:36;;22509:10;;22483:36;:::i;:::-;;;;-1:-1:-1;;22294:249:0;21730:832;;21701:861;21538:1039;21509:1068;-1:-1:-1;;;;;22633:25:0;;22600:12;22633:25;;;:19;:25;;;;;;22615:4;;22633:25;;;:52;;-1:-1:-1;;;;;;22662:23:0;;;;;;:19;:23;;;;;;;;22633:52;22630:98;;;-1:-1:-1;22711:5:0;22630:98;22744:4;22740:599;;;22770:6;;;;22769:7;:47;;;;-1:-1:-1;22797:19:0;;;;;;;22769:47;22765:557;;;22886:15;22866:17;;22855:8;;:28;;;;:::i;:::-;:46;22851:456;;;22975:4;22926:28;12832:16;;;:7;:16;;;;;;23032:13;;23008:37;;23004:284;;23101:10;;23077:20;:34;23074:77;;-1:-1:-1;23138:10:0;;23074:77;23177:34;23190:20;23177:12;:34::i;:::-;23249:15;23238:8;:26;23004:284;22903:404;22851:456;23357:62;23375:4;23381:2;23385:6;23393:7;23402:3;23407:4;23413:5;23357:17;:62::i;:::-;23350:69;20249:3178;-1:-1:-1;;;;;;;;20249:3178:0:o;25233:509::-;25316:16;;;;;;;25315:17;25307:65;;;;-1:-1:-1;;;25307:65:0;;28801:2:1;25307:65:0;;;28783:21:1;28840:2;28820:18;;;28813:30;28879:34;28859:18;;;28852:62;28950:5;28930:18;;;28923:33;28973:19;;25307:65:0;28599:399:1;25307:65:0;25388:20;25399:4;25405:2;25388:10;:20::i;:::-;25387:21;:37;;;;-1:-1:-1;25418:6:0;;-1:-1:-1;;;;;25412:12:0;;;25418:6;;25412:12;25387:37;25383:352;;;-1:-1:-1;;;;;25441:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;25441:30:0;25467:4;25441:30;;;25486:16;:23;;-1:-1:-1;;25486:23:0;25441:30;25486:23;;;;;25535:9;;;;25524:107;;25579:9;:36;;;;25609:4;25579:36;;;;;25524:107;25645:19;:26;;-1:-1:-1;;25645:26:0;;;;;25691:32;;-1:-1:-1;4573:41:1;;25691:32:0;;4561:2:1;4546:18;25691:32:0;;;;;;;25233:509;;:::o;19883:358::-;19952:4;19984:6;;-1:-1:-1;;;;;19976:14:0;;;19984:6;;19976:14;;;;:43;;-1:-1:-1;20013:6:0;;-1:-1:-1;;;;;20007:12:0;;;20013:6;;20007:12;;19976:43;:79;;;;-1:-1:-1;20049:6:0;;-1:-1:-1;;;;;20049:6:0;20036:9;:19;;19976:79;:118;;;;-1:-1:-1;;;;;;20073:21:0;;;;;;:17;:21;;;;;;;;20072:22;19976:118;:159;;;;-1:-1:-1;;;;;;20112:23:0;;;;;;:17;:23;;;;;;;;20111:24;19976:159;:186;;;;-1:-1:-1;;;;;;20152:10:0;;5810:42;20152:10;;19976:186;:219;;;;-1:-1:-1;;;;;;20179:16:0;;;;19976:219;:257;;;;-1:-1:-1;;;;;;20212:21:0;;20228:4;20212:21;;19976:257;19969:264;19883:358;-1:-1:-1;;;19883:358:0:o;27905:562::-;27993:7;28013:18;28046:3;28042:205;;;-1:-1:-1;28079:9:0;:16;;;28042:205;;;28117:4;28113:134;;;-1:-1:-1;28151:9:0;:17;;;;;;28113:134;;;-1:-1:-1;28214:9:0;:21;;;;;;28113:134;28259:17;5704:5;28279:19;28288:10;28279:6;:19;:::i;:::-;:38;;;;:::i;:::-;28346:4;28330:22;;;;:7;:22;;;;;:35;;28259:58;;-1:-1:-1;28259:58:0;;28330:22;;;:35;;28259:58;;28330:35;:::i;:::-;;;;-1:-1:-1;;28381:40:0;;391:25:1;;;28404:4:0;;-1:-1:-1;;;;;28381:40:0;;;;;379:2:1;364:18;28381:40:0;;;;;;;28441:18;28450:9;28441:6;:18;:::i;:::-;28434:25;27905:562;-1:-1:-1;;;;;;;27905:562:0:o;23435:1790::-;7254:6;:13;;-1:-1:-1;;7254:13:0;7263:4;7254:13;;;23519:30:::1;::::0;;::::1;::::0;::::1;::::0;;23542:7:::1;23519:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;7254:6;23564:17;23560:56:::1;;23598:7;;;23560:56;23651:4;23631:26;::::0;;;:11:::1;:26;::::0;;;;;;;23666:9:::1;::::0;-1:-1:-1;;;;;23666:9:0::1;23631:46:::0;;;;;;;;-1:-1:-1;;23631:67:0::1;23628:165;;23735:4;23715:26;::::0;;;:11:::1;:26;::::0;;;;;;;23750:9:::1;::::0;-1:-1:-1;;;;;23750:9:0::1;23715:46:::0;;;;;;;-1:-1:-1;;23715:66:0;;23628:165:::1;23805:17;23886:1;23870:6;:12;;;23826:56;;23850:6;:16;;;23827:39;;:20;:39;;;;:::i;:::-;23826:56;;;;:::i;:::-;23825:62;;;;:::i;:::-;23805:82:::0;-1:-1:-1;23898:15:0::1;23916:32;23805:82:::0;23916:20;:32:::1;:::i;:::-;23993:16;::::0;;24007:1:::1;23993:16:::0;;;;;::::1;::::0;;23898:50;;-1:-1:-1;23969:21:0::1;::::0;23993:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23993:16:0::1;23969:40;;24038:4;24020;24025:1;24020:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24020:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;24064:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;24020:7;;24064:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24054:4;24059:1;24054:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24054:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;24093:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;24168:7;;24093:9:::1;::::0;24206:4;;24233::::1;::::0;24253:15:::1;::::0;24093:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24313:21:0::1;::::0;-1:-1:-1;24292:18:0::1;::::0;-1:-1:-1;24399:7:0;;-1:-1:-1;24373:22:0::1;24386:9:::0;24313:21;24373:22:::1;:::i;:::-;24372:34;;;;:::i;:::-;24345:61:::0;-1:-1:-1;24423:13:0;;24419:328:::1;;24453:9;::::0;:222:::1;::::0;;;;24530:4:::1;24453:222;::::0;::::1;16833:34:1::0;16883:18;;;16876:34;;;24453:9:0::1;16926:18:1::0;;;16919:34;;;16969:18;;;16962:34;5810:42:0::1;17012:19:1::0;;;17005:44;24645:15:0::1;17065:19:1::0;;;17058:35;-1:-1:-1;;;;;24453:9:0;;::::1;::::0;:25:::1;::::0;24486:16;;16744:19:1;;24453:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24695:40:0::1;::::0;;29787:25:1;;;29843:2;29828:18;;29821:34;;;24695:40:0::1;::::0;-1:-1:-1;29760:18:1;24695:40:0::1;;;;;;;24419:328;24759:30;24773:16:::0;24759:30;::::1;:::i;:::-;;;24816:6;:16;;;24800:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;24908:12:::1;::::0;::::1;::::0;24886:18:::1;::::0;::::1;::::0;24843:26:::1;::::0;-1:-1:-1;24872:48:0;;::::1;::::0;24873:31:::1;::::0;::::1;:10:::0;:31:::1;:::i;:::-;24872:48;;;;:::i;:::-;24843:77:::0;-1:-1:-1;24931:24:0::1;24958:31;24843:77:::0;24958:10;:31:::1;:::i;:::-;25004:16;::::0;::::1;::::0;24931:58;;-1:-1:-1;25004:20:0::1;;::::0;25000:101:::1;;25041:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;25041:21:0;;::::1;::::0;:48;::::1;;;::::0;25072:16;;25041:21:::1;:48:::0;:21;:48;25072:16;25041:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25000:101;25115:18;::::0;::::1;::::0;:22:::1;;::::0;25111:107:::1;;25154:23:::0;;:52:::1;::::0;-1:-1:-1;;;;;25154:23:0;;::::1;::::0;:52;::::1;;;::::0;25187:18;;25154:23:::1;:52:::0;:23;:52;25187:18;25154:23;:52;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25111:107;23508:1717;;;;;;;;7278:1;-1:-1:-1::0;7290:6:0;:14;;-1:-1:-1;;7290:14:0;;;23435:1790::o;427:184:1:-;479:77;476:1;469:88;576:4;573:1;566:15;600:4;597:1;590:15;616:334;687:2;681:9;743:2;733:13;;-1:-1:-1;;729:86:1;717:99;;846:18;831:34;;867:22;;;828:62;825:88;;;893:18;;:::i;:::-;929:2;922:22;616:334;;-1:-1:-1;616:334:1:o;955:183::-;1015:4;1048:18;1040:6;1037:30;1034:56;;;1070:18;;:::i;:::-;-1:-1:-1;1115:1:1;1111:14;1127:4;1107:25;;955:183::o;1143:154::-;-1:-1:-1;;;;;1222:5:1;1218:54;1211:5;1208:65;1198:93;;1287:1;1284;1277:12;1302:737;1356:5;1409:3;1402:4;1394:6;1390:17;1386:27;1376:55;;1427:1;1424;1417:12;1376:55;1463:6;1450:20;1489:4;1513:60;1529:43;1569:2;1529:43;:::i;:::-;1513:60;:::i;:::-;1607:15;;;1693:1;1689:10;;;;1677:23;;1673:32;;;1638:12;;;;1717:15;;;1714:35;;;1745:1;1742;1735:12;1714:35;1781:2;1773:6;1769:15;1793:217;1809:6;1804:3;1801:15;1793:217;;;1889:3;1876:17;1906:31;1931:5;1906:31;:::i;:::-;1950:18;;1988:12;;;;1826;;1793:217;;;-1:-1:-1;2028:5:1;1302:737;-1:-1:-1;;;;;;1302:737:1:o;2044:118::-;2130:5;2123:13;2116:21;2109:5;2106:32;2096:60;;2152:1;2149;2142:12;2167:477;2257:6;2265;2318:2;2306:9;2297:7;2293:23;2289:32;2286:52;;;2334:1;2331;2324:12;2286:52;2374:9;2361:23;2407:18;2399:6;2396:30;2393:50;;;2439:1;2436;2429:12;2393:50;2462:61;2515:7;2506:6;2495:9;2491:22;2462:61;:::i;:::-;2452:71;;;2573:2;2562:9;2558:18;2545:32;2586:28;2608:5;2586:28;:::i;:::-;2633:5;2623:15;;;2167:477;;;;;:::o;3019:656::-;3131:4;3160:2;3189;3178:9;3171:21;3221:6;3215:13;3264:6;3259:2;3248:9;3244:18;3237:34;3289:1;3299:140;3313:6;3310:1;3307:13;3299:140;;;3408:14;;;3404:23;;3398:30;3374:17;;;3393:2;3370:26;3363:66;3328:10;;3299:140;;;3457:6;3454:1;3451:13;3448:91;;;3527:1;3522:2;3513:6;3502:9;3498:22;3494:31;3487:42;3448:91;-1:-1:-1;3591:2:1;3579:15;-1:-1:-1;;3575:88:1;3560:104;;;;3666:2;3556:113;;3019:656;-1:-1:-1;;;3019:656:1:o;3928:180::-;3987:6;4040:2;4028:9;4019:7;4015:23;4011:32;4008:52;;;4056:1;4053;4046:12;4008:52;-1:-1:-1;4079:23:1;;3928:180;-1:-1:-1;3928:180:1:o;4113:315::-;4181:6;4189;4242:2;4230:9;4221:7;4217:23;4213:32;4210:52;;;4258:1;4255;4248:12;4210:52;4297:9;4284:23;4316:31;4341:5;4316:31;:::i;:::-;4366:5;4418:2;4403:18;;;;4390:32;;-1:-1:-1;;;4113:315:1:o;4625:247::-;4684:6;4737:2;4725:9;4716:7;4712:23;4708:32;4705:52;;;4753:1;4750;4743:12;4705:52;4792:9;4779:23;4811:31;4836:5;4811:31;:::i;4877:1138::-;4995:6;5003;5056:2;5044:9;5035:7;5031:23;5027:32;5024:52;;;5072:1;5069;5062:12;5024:52;5112:9;5099:23;5141:18;5182:2;5174:6;5171:14;5168:34;;;5198:1;5195;5188:12;5168:34;5221:61;5274:7;5265:6;5254:9;5250:22;5221:61;:::i;:::-;5211:71;;5301:2;5291:12;;5356:2;5345:9;5341:18;5328:32;5385:2;5375:8;5372:16;5369:36;;;5401:1;5398;5391:12;5369:36;5424:24;;;-1:-1:-1;5479:4:1;5471:13;;5467:27;-1:-1:-1;5457:55:1;;5508:1;5505;5498:12;5457:55;5544:2;5531:16;5567:60;5583:43;5623:2;5583:43;:::i;5567:60::-;5661:15;;;5743:1;5739:10;;;;5731:19;;5727:28;;;5692:12;;;;5767:19;;;5764:39;;;5799:1;5796;5789:12;5764:39;5823:11;;;;5843:142;5859:6;5854:3;5851:15;5843:142;;;5925:17;;5913:30;;5876:12;;;;5963;;;;5843:142;;;6004:5;5994:15;;;;;;;4877:1138;;;;;:::o;6020:456::-;6097:6;6105;6113;6166:2;6154:9;6145:7;6141:23;6137:32;6134:52;;;6182:1;6179;6172:12;6134:52;6221:9;6208:23;6240:31;6265:5;6240:31;:::i;:::-;6290:5;-1:-1:-1;6347:2:1;6332:18;;6319:32;6360:33;6319:32;6360:33;:::i;:::-;6020:456;;6412:7;;-1:-1:-1;;;6466:2:1;6451:18;;;;6438:32;;6020:456::o;6481:248::-;6549:6;6557;6610:2;6598:9;6589:7;6585:23;6581:32;6578:52;;;6626:1;6623;6616:12;6578:52;-1:-1:-1;;6649:23:1;;;6719:2;6704:18;;;6691:32;;-1:-1:-1;6481:248:1:o;6734:647::-;6808:6;6816;6824;6832;6885:3;6873:9;6864:7;6860:23;6856:33;6853:53;;;6902:1;6899;6892:12;6853:53;6941:9;6928:23;6960:28;6982:5;6960:28;:::i;:::-;7007:5;-1:-1:-1;7064:2:1;7049:18;;7036:32;7077:30;7036:32;7077:30;:::i;:::-;7126:7;-1:-1:-1;7185:2:1;7170:18;;7157:32;7198:30;7157:32;7198:30;:::i;:::-;7247:7;-1:-1:-1;7306:2:1;7291:18;;7278:32;7319:30;7278:32;7319:30;:::i;:::-;6734:647;;;;-1:-1:-1;6734:647:1;;-1:-1:-1;;6734:647:1:o;7575:159::-;7642:20;;7702:6;7691:18;;7681:29;;7671:57;;7724:1;7721;7714:12;7671:57;7575:159;;;:::o;7739:328::-;7813:6;7821;7829;7882:2;7870:9;7861:7;7857:23;7853:32;7850:52;;;7898:1;7895;7888:12;7850:52;7921:28;7939:9;7921:28;:::i;:::-;7911:38;;7968:37;8001:2;7990:9;7986:18;7968:37;:::i;:::-;7958:47;;8024:37;8057:2;8046:9;8042:18;8024:37;:::i;:::-;8014:47;;7739:328;;;;;:::o;8072:454::-;8167:6;8175;8183;8191;8199;8252:3;8240:9;8231:7;8227:23;8223:33;8220:53;;;8269:1;8266;8259:12;8220:53;-1:-1:-1;;8292:23:1;;;8362:2;8347:18;;8334:32;;-1:-1:-1;8413:2:1;8398:18;;8385:32;;8464:2;8449:18;;8436:32;;-1:-1:-1;8515:3:1;8500:19;8487:33;;-1:-1:-1;8072:454:1;-1:-1:-1;8072:454:1:o;8531:382::-;8596:6;8604;8657:2;8645:9;8636:7;8632:23;8628:32;8625:52;;;8673:1;8670;8663:12;8625:52;8712:9;8699:23;8731:31;8756:5;8731:31;:::i;:::-;8781:5;-1:-1:-1;8838:2:1;8823:18;;8810:32;8851:30;8810:32;8851:30;:::i;8918:316::-;8995:6;9003;9011;9064:2;9052:9;9043:7;9039:23;9035:32;9032:52;;;9080:1;9077;9070:12;9032:52;-1:-1:-1;;9103:23:1;;;9173:2;9158:18;;9145:32;;-1:-1:-1;9224:2:1;9209:18;;;9196:32;;8918:316;-1:-1:-1;8918:316:1:o;9239:241::-;9295:6;9348:2;9336:9;9327:7;9323:23;9319:32;9316:52;;;9364:1;9361;9354:12;9316:52;9403:9;9390:23;9422:28;9444:5;9422:28;:::i;9934:404::-;10018:6;10026;10079:2;10067:9;10058:7;10054:23;10050:32;10047:52;;;10095:1;10092;10085:12;10047:52;10134:9;10121:23;10153:31;10178:5;10153:31;:::i;:::-;10203:5;-1:-1:-1;10260:2:1;10245:18;;10232:32;10273:33;10232:32;10273:33;:::i;11446:484::-;11499:3;11537:5;11531:12;11564:6;11559:3;11552:19;11590:4;11619:2;11614:3;11610:12;11603:19;;11656:2;11649:5;11645:14;11677:1;11687:218;11701:6;11698:1;11695:13;11687:218;;;11766:13;;-1:-1:-1;;;;;11762:62:1;11750:75;;11845:12;;;;11880:15;;;;11723:1;11716:9;11687:218;;;-1:-1:-1;11921:3:1;;11446:484;-1:-1:-1;;;;;11446:484:1:o;11935:342::-;12136:2;12125:9;12118:21;12099:4;12156:56;12208:2;12197:9;12193:18;12185:6;12156:56;:::i;:::-;12148:64;;12262:6;12255:14;12248:22;12243:2;12232:9;12228:18;12221:50;11935:342;;;;;:::o;12618:184::-;12670:77;12667:1;12660:88;12767:4;12764:1;12757:15;12791:4;12788:1;12781:15;12807:274;12847:1;12873;12863:189;;12908:77;12905:1;12898:88;13009:4;13006:1;12999:15;13037:4;13034:1;13027:15;12863:189;-1:-1:-1;13066:9:1;;12807:274::o;13786:228::-;13826:7;13952:1;-1:-1:-1;;13880:74:1;13877:1;13874:81;13869:1;13862:9;13855:17;13851:105;13848:131;;;13959:18;;:::i;:::-;-1:-1:-1;13999:9:1;;13786:228::o;14378:251::-;14448:6;14501:2;14489:9;14480:7;14476:23;14472:32;14469:52;;;14517:1;14514;14507:12;14469:52;14549:9;14543:16;14568:31;14593:5;14568:31;:::i;14966:482::-;15055:1;15098:5;15055:1;15112:330;15133:7;15123:8;15120:21;15112:330;;;15252:4;-1:-1:-1;;15180:77:1;15174:4;15171:87;15168:113;;;15261:18;;:::i;:::-;15311:7;15301:8;15297:22;15294:55;;;15331:16;;;;15294:55;15410:22;;;;15370:15;;;;15112:330;;;15116:3;14966:482;;;;;:::o;15453:866::-;15502:5;15532:8;15522:80;;-1:-1:-1;15573:1:1;15587:5;;15522:80;15621:4;15611:76;;-1:-1:-1;15658:1:1;15672:5;;15611:76;15703:4;15721:1;15716:59;;;;15789:1;15784:130;;;;15696:218;;15716:59;15746:1;15737:10;;15760:5;;;15784:130;15821:3;15811:8;15808:17;15805:43;;;15828:18;;:::i;:::-;-1:-1:-1;;15884:1:1;15870:16;;15899:5;;15696:218;;15998:2;15988:8;15985:16;15979:3;15973:4;15970:13;15966:36;15960:2;15950:8;15947:16;15942:2;15936:4;15933:12;15929:35;15926:77;15923:159;;;-1:-1:-1;16035:19:1;;;16067:5;;15923:159;16114:34;16139:8;16133:4;16114:34;:::i;:::-;16244:6;-1:-1:-1;;16172:79:1;16163:7;16160:92;16157:118;;;16255:18;;:::i;:::-;16293:20;;15453:866;-1:-1:-1;;;15453:866:1:o;16324:140::-;16382:5;16411:47;16452:4;16442:8;16438:19;16432:4;16411:47;:::i;17104:306::-;17192:6;17200;17208;17261:2;17249:9;17240:7;17236:23;17232:32;17229:52;;;17277:1;17274;17267:12;17229:52;17306:9;17300:16;17290:26;;17356:2;17345:9;17341:18;17335:25;17325:35;;17400:2;17389:9;17385:18;17379:25;17369:35;;17104:306;;;;;:::o;17765:184::-;17817:77;17814:1;17807:88;17914:4;17911:1;17904:15;17938:4;17935:1;17928:15;17954:175;17991:3;18035:4;18028:5;18024:16;18064:4;18055:7;18052:17;18049:43;;18072:18;;:::i;:::-;18121:1;18108:15;;17954:175;-1:-1:-1;;17954:175:1:o;18134:125::-;18174:4;18202:1;18199;18196:8;18193:34;;;18207:18;;:::i;:::-;-1:-1:-1;18244:9:1;;18134:125::o;19895:131::-;19955:5;19984:36;20011:8;20005:4;19984:36;:::i;20804:195::-;20843:3;-1:-1:-1;;20867:5:1;20864:77;20861:103;;20944:18;;:::i;:::-;-1:-1:-1;20991:1:1;20980:13;;20804:195::o;22857:224::-;22896:3;22924:6;22957:2;22954:1;22950:10;22987:2;22984:1;22980:10;23018:3;23014:2;23010:12;23005:3;23002:21;22999:47;;;23026:18;;:::i;:::-;23062:13;;22857:224;-1:-1:-1;;;;22857:224:1:o;23443:245::-;23510:6;23563:2;23551:9;23542:7;23538:23;23534:32;23531:52;;;23579:1;23576;23569:12;23531:52;23611:9;23605:16;23630:28;23652:5;23630:28;:::i;24850:128::-;24890:3;24921:1;24917:6;24914:1;24911:13;24908:39;;;24927:18;;:::i;:::-;-1:-1:-1;24963:9:1;;24850:128::o;27376:332::-;27583:6;27572:9;27565:25;27626:2;27621;27610:9;27606:18;27599:30;27546:4;27646:56;27698:2;27687:9;27683:18;27675:6;27646:56;:::i;27713:881::-;27808:6;27839:2;27882;27870:9;27861:7;27857:23;27853:32;27850:52;;;27898:1;27895;27888:12;27850:52;27931:9;27925:16;27964:18;27956:6;27953:30;27950:50;;;27996:1;27993;27986:12;27950:50;28019:22;;28072:4;28064:13;;28060:27;-1:-1:-1;28050:55:1;;28101:1;28098;28091:12;28050:55;28130:2;28124:9;28153:60;28169:43;28209:2;28169:43;:::i;28153:60::-;28247:15;;;28329:1;28325:10;;;;28317:19;;28313:28;;;28278:12;;;;28353:19;;;28350:39;;;28385:1;28382;28375:12;28350:39;28409:11;;;;28429:135;28445:6;28440:3;28437:15;28429:135;;;28511:10;;28499:23;;28462:12;;;;28542;;;;28429:135;;29003:605;29302:6;29291:9;29284:25;29345:6;29340:2;29329:9;29325:18;29318:34;29388:3;29383:2;29372:9;29368:18;29361:31;29265:4;29409:57;29461:3;29450:9;29446:19;29438:6;29409:57;:::i;:::-;-1:-1:-1;;;;;29502:55:1;;;;29497:2;29482:18;;29475:83;-1:-1:-1;29589:3:1;29574:19;29567:35;29401:65;29003:605;-1:-1:-1;;;29003:605:1:o;29866:217::-;29905:4;29934:6;29990:10;;;;29960;;30012:12;;;30009:38;;;30027:18;;:::i;:::-;30064:13;;29866:217;-1:-1:-1;;;29866:217:1:o

Swarm Source

ipfs://2c106a0cbad8a059035542c49a12040dfb4cb3200b19801fdc05d67640cba951
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.