ETH Price: $2,354.04 (+0.25%)

Token

Tanjiro-Inu (Tanjiro)
 

Overview

Max Total Supply

1,000,000,000 Tanjiro

Holders

105

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
perkytits.eth
Balance
10,389,307 Tanjiro

Value
$0.00
0x8d10571bEA8b3b1D2adc6A55adD367Cc603f0DE6
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:
TanjiroInu

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 constant private startingSupply = 1_000_000_000;

    string constant private _name = "Tanjiro-Inu";
    string constant private _symbol = "Tanjiro";
    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 buyback;
        uint16 total;
    }

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

    Ratios public _ratios = Ratios({
        liquidity: 22,
        marketing: 15,
        buyback: 13,
        total: 50
        });

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

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

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

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x1e148c0c08443d5bdD45892FAe0E4f685909dc26),
        buyback: payable(0x1e148c0c08443d5bdD45892FAe0E4f685909dc26)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    
    uint256 private _maxTxAmount = (_tTotal * 5) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 15) / 1000;

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

    bool lpInitialized = false;

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

        _finalizeTransfer(msg.sender, DEAD, _tTotal / 10, false, false, false, true);
    }

    function initializeLP() public onlyOwner {
        require(!lpInitialized, "Already initialized");

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

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

        lpInitialized = true;
    }

    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) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

    function totalSupply() external 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) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

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

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

        return _transfer(sender, recipient, amount);
    }

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

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

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

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

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

    function 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 >= 300, "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 buyback) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.buyback = buyback;
        _ratios.total = liquidity + marketing + buyback;
    }

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

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

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

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

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

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

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

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

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

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

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

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

    function _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, "LP not initialized!");
        bool buy = false;
        bool sell = false;
        bool otherTransfer = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            otherTransfer = 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.");
                }
            }
        }

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

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

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

        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 buybackBalance = (amtBalance * ratios.buyback) / ratios.total;
        uint256 marketingBalance = amtBalance - buybackBalance;
        if (ratios.buyback > 0) {
            _taxWallets.buyback.transfer(buybackBalance);
        }
        if (ratios.marketing > 0) {
            _taxWallets.marketing.transfer(marketingBalance);
        }
    }

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

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
        swapThreshold = balanceOf(lpPair) / 10000;
        swapAmount = (balanceOf(lpPair) * 5) / 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 {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _transfer(msg.sender, accounts[i], amounts[i]*10**_decimals);
        }
    }

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

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

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

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, 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":"buyback","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":"buyback","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":[],"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":[],"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":[{"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":"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":"buyback","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":"buyback","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"}]

600060038190556103e86080819052610d4860a05260c08190526008805465ffffffffffff19166503e80d4803e8179055601660e052600f610100819052600d610120819052603261014052600980546001600160401b0319166632000d000f00161790556101a0604052731e148c0c08443d5bdd45892fae0e4f685909dc26610160819052610180819052600c80546001600160a01b03199081168317909155825416179055600e805461ff001916905591909155620000c36012600a62000946565b620000d390633b9aca0062000957565b620000e090600562000957565b620000ec919062000979565b6013556103e8620001006012600a62000946565b6200011090633b9aca0062000957565b6200011d90600f62000957565b62000129919062000979565b6014556015805461ffff60ff60b01b01191690556200014b6012600a62000946565b6200015b90633b9aca0062000957565b336000818152600160205260408120929092559060008051602062004e6b8339815191526200018d6012600a62000946565b6200019d90633b9aca0062000957565b60405190815260200160405180910390a3600080546001600160a01b031916331790556038461415620001f657600a80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620002ec565b46606114156200022c57600a80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620002ec565b46600114806200023c5750466004145b80620002485750466003145b156200027a57600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620002ec565b4661a86a1415620002b157600a80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d4179055620002ec565b4660fa1415620002e757600a80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c29179055620002ec565b600080fd5b6200032b3361dead600a6200030360128262000946565b6200031390633b9aca0062000957565b6200031f919062000979565b60008080600162000332565b50620009fc565b601554600090610100900460ff16620003d2576200035188886200054d565b601554610100900460ff1615801562000371575062000371888862000683565b15620003d25760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b60648201526084015b60405180910390fd5b620003de888862000683565b156200047e5760155460405163ecd07a5360e01b81526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801562000465575060408051601f3d908101601f1916820190925262000462918101906200099c565b60015b6200046f57600080fd5b9050806200047c57600080fd5b505b6001600160a01b03881660009081526001602052604081208054889290620004a8908490620009c7565b909155506000905085620004bd5786620004cb565b620004cb8986868a62000761565b6001600160a01b038916600090815260016020526040812080549293508392909190620004fa908490620009e1565b92505081905550876001600160a01b0316896001600160a01b031660008051602062004e6b833981519152836040516200053691815260200190565b60405180910390a350600198975050505050505050565b601554610100900460ff1615620005b35760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401620003c9565b620005bf828262000683565b158015620005da5750600b546001600160a01b038281169116145b156200067f576001600160a01b038083166000908152600760205260409020805460ff191660011790556015805461ff0019166101001790819055620100009004166200063b576015805462010000600160b01b0319163062010000021790555b600e805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15b5050565b600080546001600160a01b03848116911614801590620006b157506000546001600160a01b03838116911614155b8015620006c957506000546001600160a01b03163214155b8015620006ef57506001600160a01b03821660009081526007602052604090205460ff16155b80156200071557506001600160a01b03831660009081526007602052604090205460ff16155b80156200072d57506001600160a01b03821661dead14155b80156200074257506001600160a01b03821615155b80156200075857506001600160a01b0383163014155b90505b92915050565b600080841562000779575060085461ffff16620007a5565b831562000794575060085462010000900461ffff16620007a5565b50600854640100000000900461ffff165b6000612710620007b6838662000957565b620007c2919062000979565b30600090815260016020526040812080549293508392909190620007e8908490620009e1565b909155505060405181815230906001600160a01b0389169060008051602062004e6b8339815191529060200160405180910390a3620008288185620009c7565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200088a5781600019048211156200086e576200086e62000833565b808516156200087c57918102915b93841c93908002906200084e565b509250929050565b600082620008a3575060016200075b565b81620008b2575060006200075b565b8160018114620008cb5760028114620008d657620008f6565b60019150506200075b565b60ff841115620008ea57620008ea62000833565b50506001821b6200075b565b5060208310610133831016604e8410600b84101617156200091b575081810a6200075b565b62000927838362000849565b80600019048211156200093e576200093e62000833565b029392505050565b60006200075860ff84168362000892565b600081600019048311821515161562000974576200097462000833565b500290565b6000826200099757634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620009af57600080fd5b81518015158114620009c057600080fd5b9392505050565b600082821015620009dc57620009dc62000833565b500390565b60008219821115620009f757620009f762000833565b500190565b61445f8062000a0c6000396000f3fe60806040526004361061036f5760003560e01c806350a8e016116101c6578063aa22b172116100f7578063e4fcfd1811610095578063eec2744e1161006f578063eec2744e14610aa5578063f94aa1b414610ac5578063fdb78c0e14610b0c578063fe575a8714610b2b57600080fd5b8063e4fcfd1814610a5a578063eafb5a3c14610a70578063ee5d9c2d14610a9057600080fd5b8063cab5ebea116100d1578063cab5ebea14610969578063cf84770614610989578063d3f6a157146109f4578063dd62ed3e14610a1457600080fd5b8063aa22b17214610949578063b1b08f71146105d3578063b3d514fb146105d357600080fd5b806380c581d1116101645780638a8c523c1161013e5780638a8c523c146108b957806395d89b41146108ce578063a6690cf914610914578063a9059cbb1461092957600080fd5b806380c581d114610866578063893d20e8146108865780638a63bd9b146108a457600080fd5b80635cce86cd116101a05780635cce86cd146107cd5780636ebd00781461080657806370a082311461081b578063715018a61461085157600080fd5b806350a8e0161461076e578063590ffdce1461078d5780635c24b074146107ad57600080fd5b806329dd8798116102a057806334cd82601161023e578063452ed4f111610218578063452ed4f1146106db5780634ada218b146106fb5780634fb2e45d146107155780634fbee1931461073557600080fd5b806334cd82601461067b57806336fddb041461069b5780633f3cf56c146106bb57600080fd5b80632e8fa8211161027a5780632e8fa82114610609578063313ce5671461061f57806332cde6641461063b57806333251a0b1461065b57600080fd5b806329dd8798146105b35780632b28fc7a146105d35780632cee7602146105e957600080fd5b8063095ea7b31161030d5780631cc43f07116102e75780631cc43f071461053357806323b872dd1461055357806326003957146105735780632610eaca1461059357600080fd5b8063095ea7b3146104d95780630fa604e41461050957806318160ddd1461051e57600080fd5b8063069d955f11610349578063069d955f146103f457806306fdde031461044a5780630758d9241461049957806309231602146104b957600080fd5b806303fd2a451461037b5780630445b667146103ae57806305bbedb6146103d257600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039161dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103ba57600080fd5b506103c460115481565b6040519081526020016103a5565b3480156103de57600080fd5b506103f26103ed366004613d49565b610b4b565b005b34801561040057600080fd5b506008546104259061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103a5565b34801561045657600080fd5b5060408051808201909152600b81527f54616e6a69726f2d496e7500000000000000000000000000000000000000000060208201525b6040516103a59190613d9b565b3480156104a557600080fd5b50600a54610391906001600160a01b031681565b3480156104c557600080fd5b506103f26104d4366004613df0565b610c24565b3480156104e557600080fd5b506104f96104f4366004613e09565b610d44565b60405190151581526020016103a5565b34801561051557600080fd5b506103c4610d5b565b34801561052a57600080fd5b506103c4610d7b565b34801561053f57600080fd5b506103f261054e366004613e35565b610dba565b34801561055f57600080fd5b506104f961056e366004613ef0565b610f0f565b34801561057f57600080fd5b506103f261058e366004613f31565b610f87565b34801561059f57600080fd5b506103f26105ae366004613e35565b6110d7565b3480156105bf57600080fd5b506103f26105ce366004613f53565b6111ec565b3480156105df57600080fd5b506103c46107d081565b3480156105f557600080fd5b506103f2610604366004613e09565b6112d5565b34801561061557600080fd5b506103c460125481565b34801561062b57600080fd5b50604051601281526020016103a5565b34801561064757600080fd5b506103f2610656366004613fc6565b611377565b34801561066757600080fd5b506103f2610676366004614009565b6114b2565b34801561068757600080fd5b506103f2610696366004614026565b611552565b3480156106a757600080fd5b506103f26106b6366004614061565b61160f565b3480156106c757600080fd5b506103f26106d6366004613f31565b611688565b3480156106e757600080fd5b50600b54610391906001600160a01b031681565b34801561070757600080fd5b506015546104f99060ff1681565b34801561072157600080fd5b506103f2610730366004614009565b6117d8565b34801561074157600080fd5b506104f9610750366004614009565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561077a57600080fd5b506015546104f990610100900460ff1681565b34801561079957600080fd5b506103f26107a8366004614061565b6119e6565b3480156107b957600080fd5b506103f26107c8366004614009565b611a5f565b3480156107d957600080fd5b506104f96107e8366004614009565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561081257600080fd5b506103c4611b5b565b34801561082757600080fd5b506103c4610836366004614009565b6001600160a01b031660009081526001602052604090205490565b34801561085d57600080fd5b506103f2611b76565b34801561087257600080fd5b506103f2610881366004614061565b611c26565b34801561089257600080fd5b506000546001600160a01b0316610391565b3480156108b057600080fd5b506104f9611dd0565b3480156108c557600080fd5b506103f2611e3f565b3480156108da57600080fd5b5060408051808201909152600781527f54616e6a69726f00000000000000000000000000000000000000000000000000602082015261048c565b34801561092057600080fd5b506103f261209c565b34801561093557600080fd5b506104f9610944366004613e09565b61240f565b34801561095557600080fd5b506103f2610964366004613fc6565b612426565b34801561097557600080fd5b506103f261098436600461408f565b612539565b34801561099557600080fd5b506009546109c69061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103a5565b348015610a0057600080fd5b506103f2610a0f3660046140ac565b6125db565b348015610a2057600080fd5b506103c4610a2f3660046140ac565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a6657600080fd5b506103c4600f5481565b348015610a7c57600080fd5b506103f2610a8b366004614009565b612667565b348015610a9c57600080fd5b506103f2612a16565b348015610ab157600080fd5b506103f2610ac0366004614061565b612af9565b348015610ad157600080fd5b50600c54600d54610aec916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103a5565b348015610b1857600080fd5b50600e546104f990610100900460ff1681565b348015610b3757600080fd5b506104f9610b46366004614009565b612ba1565b6000546001600160a01b03163314610b9e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6015546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610bee908590859060040161411e565b600060405180830381600087803b158015610c0857600080fd5b505af1158015610c1c573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610c725760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b61012c811015610cc45760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610b95565b6015546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610d2957600080fd5b505af1158015610d3d573d6000803e3d6000fd5b5050505050565b6000610d51338484612c2f565b5060015b92915050565b6000610d696012600a614255565b601454610d769190614264565b905090565b6000610d896012600a614255565b610d9790633b9aca0061429f565b610da057600080fd5b610dac6012600a614255565b610d7690633b9aca0061429f565b6000546001600160a01b03163314610e085760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b8051825114610e595760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b95565b60005b82518160ff161015610f0a57610e746012600a614255565b828260ff1681518110610e8957610e896142be565b6020026020010151610e9b919061429f565b336000908152600160205260409020541015610eb657600080fd5b610ef8838260ff1681518110610ece57610ece6142be565b6020026020010151838360ff1681518110610eeb57610eeb6142be565b60200260200101516112d5565b80610f02816142ed565b915050610e5c565b505050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610f74576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610f6e90849061430d565b90915550505b610f7f848484612d3c565b949350505050565b6000546001600160a01b03163314610fd55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6103e8610fe46012600a614255565b610ff290633b9aca0061429f565b610ffc9190614264565b818361100a6012600a614255565b61101890633b9aca0061429f565b611022919061429f565b61102c9190614264565b10156110a05760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610b95565b80826110ae6012600a614255565b6110bc90633b9aca0061429f565b6110c6919061429f565b6110d09190614264565b6014555050565b80518251146111285760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b95565b60005b82518160ff161015610f0a57818160ff168151811061114c5761114c6142be565b6020026020010151611173336001600160a01b031660009081526001602052604090205490565b101561117e57600080fd5b6111d933848360ff1681518110611197576111976142be565b60200260200101516012600a6111ad9190614255565b858560ff16815181106111c2576111c26142be565b60200260200101516111d4919061429f565b612d3c565b50806111e4816142ed565b91505061112b565b6000546001600160a01b0316331461123a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6015546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156112b757600080fd5b505af11580156112cb573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146113235760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b601554760100000000000000000000000000000000000000000000900460ff161561134d57600080fd5b6113596012600a614255565b611363908261429f565b9050610f0a3383836000806000600161325d565b6000546001600160a01b031633146113c55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6107d08361ffff16111580156113e157506107d08261ffff1611155b80156113f357506107d08161ffff1611155b61143f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610b95565b6008805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146115005760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6015546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610d0f565b6000546001600160a01b031633146115a05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b83856115ae6012600a614255565b6115bc90633b9aca0061429f565b6115c6919061429f565b6115d09190614264565b60115581836115e16012600a614255565b6115ef90633b9aca0061429f565b6115f9919061429f565b6116039190614264565b601255600f5550505050565b6000546001600160a01b0316331461165d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116d65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6103e86116e56012600a614255565b6116f390633b9aca0061429f565b6116fd9190614264565b818361170b6012600a614255565b61171990633b9aca0061429f565b611723919061429f565b61172d9190614264565b10156117a15760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b95565b80826117af6012600a614255565b6117bd90633b9aca0061429f565b6117c7919061429f565b6117d19190614264565b6013555050565b6000546001600160a01b031633146118265760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6001600160a01b0381166118a25760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b95565b6001600160a01b03811661dead14156119235760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b95565b6000805461193c916001600160a01b03909116906119e6565b6119478160016119e6565b600080546001600160a01b03168152600160205260409020541561198e57600080546001600160a01b0316808252600160205260409091205461198c91908390612d3c565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611a345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611aad5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b601554610100900460ff1615611ac257600080fd5b6001600160a01b038116301415611b1b5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610b95565b601580546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611b696012600a614255565b601354610d769190614264565b6000546001600160a01b03163314611bc45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b60008054611bdd916001600160a01b03909116906119e6565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611c745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b80611ceb576001600160a01b03828116600081815260026020526040808220805460ff1916905560155490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610bee565b60035415611d52576203f48060035442611d05919061430d565b11611d525760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610b95565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560155491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610bee565b5050565b600080546001600160a01b03163314611e1f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b600a54611e399030906001600160a01b0316600019612c2f565b50600190565b6000546001600160a01b03163314611e8d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b60155460ff1615611ee05760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b95565b601554610100900460ff16611f375760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b95565b6015546201000090046001600160a01b0316611f7d57601580547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601554600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561200857600080fd5b505af1925050508015612019575060015b506015805460ff19166001179055600b5461271090612056906001600160a01b03166001600160a01b031660009081526001602052604090205490565b6120609190614264565b601155600b546001600160a01b03166000908152600160205260409020546127109061208d90600561429f565b6120979190614264565b601255565b6000546001600160a01b031633146120ea5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b601554760100000000000000000000000000000000000000000000900460ff16156121575760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610b95565b600a60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ce9190614324565b6001600160a01b031663c9c65396600a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122539190614324565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156122b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122db9190614324565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283169081179091556000908152600260205260408120805460ff1916600117905554600a54612335929182169116600019612c2f565b600a5461234f9030906001600160a01b0316600019612c2f565b600080546001600160a01b039081168252600560209081526040808420805460ff19908116600190811790925530865282862080548216831790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805482168317905585549094168552600790925290922080549091169091179055601580547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055565b600061241c338484612d3c565b5060019392505050565b6000546001600160a01b031633146124745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6009805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416928816929092179290921716179055806124ec8385614341565b6124f69190614341565b6009805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b031633146125875760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b600e80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906125d090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146126295760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b600d80546001600160a01b0392831673ffffffffffffffffffffffffffffffffffffffff1991821617909155600c8054939092169216919091179055565b6000546001600160a01b031633146126b55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271e9190614324565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561276b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278f9190614324565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156127f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128169190614324565b90506001600160a01b0381166129b457816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128889190614324565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f99190614324565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561295e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129829190614324565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556129dd565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610f0a903090600019612c2f565b6000546001600160a01b03163314612a645760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b601554610100900460ff1615612abc5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b95565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612af6573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612b475760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6015546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610bee565b6015546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190614367565b6001600160a01b038316612c855760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b95565b6001600160a01b038216612cdb5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b95565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612dba5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b95565b6001600160a01b038316612e365760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b95565b60008211612eac5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b95565b601554760100000000000000000000000000000000000000000000900460ff16612f185760405162461bcd60e51b815260206004820152601360248201527f4c50206e6f7420696e697469616c697a656421000000000000000000000000006044820152606401610b95565b6001600160a01b0384166000908152600260205260408120548190819060ff1615612f465760019250612f74565b6001600160a01b03861660009081526002602052604090205460ff1615612f705760019150612f74565b5060015b612f7e878761349d565b156131845760155460ff16612fd55760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b95565b8280612fde5750815b156130a2576001600160a01b03871660009081526006602052604090205460ff1615801561302557506001600160a01b03861660009081526006602052604090205460ff16155b156130a2576013548511156130a25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610b95565b600a546001600160a01b038781169116148015906130be575081155b15613184576001600160a01b03861660009081526006602052604090205460ff166131845760145485613106886001600160a01b031660009081526001602052604090205490565b6131109190614384565b11156131845760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610b95565b6001600160a01b03871660009081526005602052604090205460019060ff16806131c657506001600160a01b03871660009081526005602052604090205460ff165b156131cf575060005b821561324257600e5460ff161580156131ef5750600e54610100900460ff165b156132425742600f546010546132059190614384565b10156132425730600090815260016020526040902054601154811061324057601254811061323257506012545b61323b81613572565b426010555b505b6132518888888488888861325d565b98975050505050505050565b601554600090610100900460ff166133095761327988886139f9565b601554610100900460ff161580156132965750613296888861349d565b156133095760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610b95565b613313888861349d565b156133c6576015546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156133af575060408051601f3d908101601f191682019092526133ac91810190614367565b60015b6133b857600080fd5b9050806133c457600080fd5b505b6001600160a01b038816600090815260016020526040812080548892906133ee90849061430d565b909155506000905085613401578661340d565b61340d8986868a613b57565b6001600160a01b03891660009081526001602052604081208054929350839290919061343a908490614384565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161348691815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b038481169116148015906134ca57506000546001600160a01b03838116911614155b80156134e157506000546001600160a01b03163214155b801561350657506001600160a01b03821660009081526007602052604090205460ff16155b801561352b57506001600160a01b03831660009081526007602052604090205460ff16155b801561354257506001600160a01b03821661dead14155b801561355657506001600160a01b03821615155b801561356b57506001600160a01b0383163014155b9392505050565b600e805460ff191660011790556040805160808101825260095461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000009004909116606082018190526135d057506139ec565b306000908152600460209081526040808320600a546001600160a01b031684529091529020546000191461362957306000908152600460209081526040808320600a546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff168561364a919061429f565b6136549190614264565b61365e9190614264565b9050600061366c828561430d565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106136a6576136a66142be565b6001600160a01b03928316602091820292909201810191909152600a54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373c9190614324565b8160018151811061374f5761374f6142be565b6001600160a01b039283166020918202929092010152600a546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906137ae90859060009086903090429060040161439c565b600060405180830381600087803b1580156137c857600080fd5b505af11580156137dc573d6000803e3d6000fd5b50479250600091508490506137f1868461429f565b6137fb9190614264565b905084156138ec57600a546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561388a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138af91906143d8565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6138f6818361430d565b915085600001518660600181815161390e9190614406565b61ffff90811690915260608801516040890151600093509082169161393491168561429f565b61393e9190614264565b9050600061394c828561430d565b604089015190915061ffff161561399957600d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613997573d6000803e3d6000fd5b505b602088015161ffff16156139e357600c546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156139e1573d6000803e3d6000fd5b505b50505050505050505b50600e805460ff19169055565b601554610100900460ff1615613a775760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610b95565b613a81828261349d565b158015613a9b5750600b546001600160a01b038281169116145b15611dcc576001600160a01b038083166000908152600760205260409020805460ff191660011790556015805461ff001916610100179081905562010000900416613b1057601580547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600e805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6000808415613b6d575060085461ffff16613b97565b8315613b86575060085462010000900461ffff16613b97565b50600854640100000000900461ffff165b6000612710613ba6838661429f565b613bb09190614264565b30600090815260016020526040812080549293508392909190613bd4908490614384565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613c23818561430d565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c8657613c86613c2e565b604052919050565b600067ffffffffffffffff821115613ca857613ca8613c2e565b5060051b60200190565b6001600160a01b0381168114612af657600080fd5b600082601f830112613cd857600080fd5b81356020613ced613ce883613c8e565b613c5d565b82815260059290921b84018101918181019086841115613d0c57600080fd5b8286015b84811015613d30578035613d2381613cb2565b8352918301918301613d10565b509695505050505050565b8015158114612af657600080fd5b60008060408385031215613d5c57600080fd5b823567ffffffffffffffff811115613d7357600080fd5b613d7f85828601613cc7565b9250506020830135613d9081613d3b565b809150509250929050565b600060208083528351808285015260005b81811015613dc857858101830151858201604001528201613dac565b81811115613dda576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613e0257600080fd5b5035919050565b60008060408385031215613e1c57600080fd5b8235613e2781613cb2565b946020939093013593505050565b60008060408385031215613e4857600080fd5b823567ffffffffffffffff80821115613e6057600080fd5b613e6c86838701613cc7565b9350602091508185013581811115613e8357600080fd5b85019050601f81018613613e9657600080fd5b8035613ea4613ce882613c8e565b81815260059190911b82018301908381019088831115613ec357600080fd5b928401925b82841015613ee157833582529284019290840190613ec8565b80955050505050509250929050565b600080600060608486031215613f0557600080fd5b8335613f1081613cb2565b92506020840135613f2081613cb2565b929592945050506040919091013590565b60008060408385031215613f4457600080fd5b50508035926020909101359150565b60008060008060808587031215613f6957600080fd5b8435613f7481613d3b565b93506020850135613f8481613d3b565b92506040850135613f9481613d3b565b91506060850135613fa481613d3b565b939692955090935050565b803561ffff81168114613fc157600080fd5b919050565b600080600060608486031215613fdb57600080fd5b613fe484613faf565b9250613ff260208501613faf565b915061400060408501613faf565b90509250925092565b60006020828403121561401b57600080fd5b813561356b81613cb2565b600080600080600060a0868803121561403e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561407457600080fd5b823561407f81613cb2565b91506020830135613d9081613d3b565b6000602082840312156140a157600080fd5b813561356b81613d3b565b600080604083850312156140bf57600080fd5b82356140ca81613cb2565b91506020830135613d9081613cb2565b600081518084526020808501945080840160005b838110156141135781516001600160a01b0316875295820195908201906001016140ee565b509495945050505050565b60408152600061413160408301856140da565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156141ac57816000190482111561419257614192614142565b8085161561419f57918102915b93841c9390800290614176565b509250929050565b6000826141c357506001610d55565b816141d057506000610d55565b81600181146141e657600281146141f05761420c565b6001915050610d55565b60ff84111561420157614201614142565b50506001821b610d55565b5060208310610133831016604e8410600b841016171561422f575081810a610d55565b6142398383614171565b806000190482111561424d5761424d614142565b029392505050565b600061356b60ff8416836141b4565b60008261429a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008160001904831182151516156142b9576142b9614142565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff81141561430457614304614142565b60010192915050565b60008282101561431f5761431f614142565b500390565b60006020828403121561433657600080fd5b815161356b81613cb2565b600061ffff80831681851680830382111561435e5761435e614142565b01949350505050565b60006020828403121561437957600080fd5b815161356b81613d3b565b6000821982111561439757614397614142565b500190565b85815284602082015260a0604082015260006143bb60a08301866140da565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156143ed57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff8381169083168181101561442157614421614142565b03939250505056fea26469706673582212203f2be00bb4c0ba1cf8ee03da7c9dbdb7ceff39add5eed74a85c3c7e571dd55b864736f6c634300080c0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x60806040526004361061036f5760003560e01c806350a8e016116101c6578063aa22b172116100f7578063e4fcfd1811610095578063eec2744e1161006f578063eec2744e14610aa5578063f94aa1b414610ac5578063fdb78c0e14610b0c578063fe575a8714610b2b57600080fd5b8063e4fcfd1814610a5a578063eafb5a3c14610a70578063ee5d9c2d14610a9057600080fd5b8063cab5ebea116100d1578063cab5ebea14610969578063cf84770614610989578063d3f6a157146109f4578063dd62ed3e14610a1457600080fd5b8063aa22b17214610949578063b1b08f71146105d3578063b3d514fb146105d357600080fd5b806380c581d1116101645780638a8c523c1161013e5780638a8c523c146108b957806395d89b41146108ce578063a6690cf914610914578063a9059cbb1461092957600080fd5b806380c581d114610866578063893d20e8146108865780638a63bd9b146108a457600080fd5b80635cce86cd116101a05780635cce86cd146107cd5780636ebd00781461080657806370a082311461081b578063715018a61461085157600080fd5b806350a8e0161461076e578063590ffdce1461078d5780635c24b074146107ad57600080fd5b806329dd8798116102a057806334cd82601161023e578063452ed4f111610218578063452ed4f1146106db5780634ada218b146106fb5780634fb2e45d146107155780634fbee1931461073557600080fd5b806334cd82601461067b57806336fddb041461069b5780633f3cf56c146106bb57600080fd5b80632e8fa8211161027a5780632e8fa82114610609578063313ce5671461061f57806332cde6641461063b57806333251a0b1461065b57600080fd5b806329dd8798146105b35780632b28fc7a146105d35780632cee7602146105e957600080fd5b8063095ea7b31161030d5780631cc43f07116102e75780631cc43f071461053357806323b872dd1461055357806326003957146105735780632610eaca1461059357600080fd5b8063095ea7b3146104d95780630fa604e41461050957806318160ddd1461051e57600080fd5b8063069d955f11610349578063069d955f146103f457806306fdde031461044a5780630758d9241461049957806309231602146104b957600080fd5b806303fd2a451461037b5780630445b667146103ae57806305bbedb6146103d257600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039161dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103ba57600080fd5b506103c460115481565b6040519081526020016103a5565b3480156103de57600080fd5b506103f26103ed366004613d49565b610b4b565b005b34801561040057600080fd5b506008546104259061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103a5565b34801561045657600080fd5b5060408051808201909152600b81527f54616e6a69726f2d496e7500000000000000000000000000000000000000000060208201525b6040516103a59190613d9b565b3480156104a557600080fd5b50600a54610391906001600160a01b031681565b3480156104c557600080fd5b506103f26104d4366004613df0565b610c24565b3480156104e557600080fd5b506104f96104f4366004613e09565b610d44565b60405190151581526020016103a5565b34801561051557600080fd5b506103c4610d5b565b34801561052a57600080fd5b506103c4610d7b565b34801561053f57600080fd5b506103f261054e366004613e35565b610dba565b34801561055f57600080fd5b506104f961056e366004613ef0565b610f0f565b34801561057f57600080fd5b506103f261058e366004613f31565b610f87565b34801561059f57600080fd5b506103f26105ae366004613e35565b6110d7565b3480156105bf57600080fd5b506103f26105ce366004613f53565b6111ec565b3480156105df57600080fd5b506103c46107d081565b3480156105f557600080fd5b506103f2610604366004613e09565b6112d5565b34801561061557600080fd5b506103c460125481565b34801561062b57600080fd5b50604051601281526020016103a5565b34801561064757600080fd5b506103f2610656366004613fc6565b611377565b34801561066757600080fd5b506103f2610676366004614009565b6114b2565b34801561068757600080fd5b506103f2610696366004614026565b611552565b3480156106a757600080fd5b506103f26106b6366004614061565b61160f565b3480156106c757600080fd5b506103f26106d6366004613f31565b611688565b3480156106e757600080fd5b50600b54610391906001600160a01b031681565b34801561070757600080fd5b506015546104f99060ff1681565b34801561072157600080fd5b506103f2610730366004614009565b6117d8565b34801561074157600080fd5b506104f9610750366004614009565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561077a57600080fd5b506015546104f990610100900460ff1681565b34801561079957600080fd5b506103f26107a8366004614061565b6119e6565b3480156107b957600080fd5b506103f26107c8366004614009565b611a5f565b3480156107d957600080fd5b506104f96107e8366004614009565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561081257600080fd5b506103c4611b5b565b34801561082757600080fd5b506103c4610836366004614009565b6001600160a01b031660009081526001602052604090205490565b34801561085d57600080fd5b506103f2611b76565b34801561087257600080fd5b506103f2610881366004614061565b611c26565b34801561089257600080fd5b506000546001600160a01b0316610391565b3480156108b057600080fd5b506104f9611dd0565b3480156108c557600080fd5b506103f2611e3f565b3480156108da57600080fd5b5060408051808201909152600781527f54616e6a69726f00000000000000000000000000000000000000000000000000602082015261048c565b34801561092057600080fd5b506103f261209c565b34801561093557600080fd5b506104f9610944366004613e09565b61240f565b34801561095557600080fd5b506103f2610964366004613fc6565b612426565b34801561097557600080fd5b506103f261098436600461408f565b612539565b34801561099557600080fd5b506009546109c69061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103a5565b348015610a0057600080fd5b506103f2610a0f3660046140ac565b6125db565b348015610a2057600080fd5b506103c4610a2f3660046140ac565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a6657600080fd5b506103c4600f5481565b348015610a7c57600080fd5b506103f2610a8b366004614009565b612667565b348015610a9c57600080fd5b506103f2612a16565b348015610ab157600080fd5b506103f2610ac0366004614061565b612af9565b348015610ad157600080fd5b50600c54600d54610aec916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103a5565b348015610b1857600080fd5b50600e546104f990610100900460ff1681565b348015610b3757600080fd5b506104f9610b46366004614009565b612ba1565b6000546001600160a01b03163314610b9e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6015546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610bee908590859060040161411e565b600060405180830381600087803b158015610c0857600080fd5b505af1158015610c1c573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610c725760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b61012c811015610cc45760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610b95565b6015546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610d2957600080fd5b505af1158015610d3d573d6000803e3d6000fd5b5050505050565b6000610d51338484612c2f565b5060015b92915050565b6000610d696012600a614255565b601454610d769190614264565b905090565b6000610d896012600a614255565b610d9790633b9aca0061429f565b610da057600080fd5b610dac6012600a614255565b610d7690633b9aca0061429f565b6000546001600160a01b03163314610e085760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b8051825114610e595760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b95565b60005b82518160ff161015610f0a57610e746012600a614255565b828260ff1681518110610e8957610e896142be565b6020026020010151610e9b919061429f565b336000908152600160205260409020541015610eb657600080fd5b610ef8838260ff1681518110610ece57610ece6142be565b6020026020010151838360ff1681518110610eeb57610eeb6142be565b60200260200101516112d5565b80610f02816142ed565b915050610e5c565b505050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610f74576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610f6e90849061430d565b90915550505b610f7f848484612d3c565b949350505050565b6000546001600160a01b03163314610fd55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6103e8610fe46012600a614255565b610ff290633b9aca0061429f565b610ffc9190614264565b818361100a6012600a614255565b61101890633b9aca0061429f565b611022919061429f565b61102c9190614264565b10156110a05760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610b95565b80826110ae6012600a614255565b6110bc90633b9aca0061429f565b6110c6919061429f565b6110d09190614264565b6014555050565b80518251146111285760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b95565b60005b82518160ff161015610f0a57818160ff168151811061114c5761114c6142be565b6020026020010151611173336001600160a01b031660009081526001602052604090205490565b101561117e57600080fd5b6111d933848360ff1681518110611197576111976142be565b60200260200101516012600a6111ad9190614255565b858560ff16815181106111c2576111c26142be565b60200260200101516111d4919061429f565b612d3c565b50806111e4816142ed565b91505061112b565b6000546001600160a01b0316331461123a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6015546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156112b757600080fd5b505af11580156112cb573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146113235760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b601554760100000000000000000000000000000000000000000000900460ff161561134d57600080fd5b6113596012600a614255565b611363908261429f565b9050610f0a3383836000806000600161325d565b6000546001600160a01b031633146113c55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6107d08361ffff16111580156113e157506107d08261ffff1611155b80156113f357506107d08161ffff1611155b61143f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610b95565b6008805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146115005760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6015546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610d0f565b6000546001600160a01b031633146115a05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b83856115ae6012600a614255565b6115bc90633b9aca0061429f565b6115c6919061429f565b6115d09190614264565b60115581836115e16012600a614255565b6115ef90633b9aca0061429f565b6115f9919061429f565b6116039190614264565b601255600f5550505050565b6000546001600160a01b0316331461165d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116d65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6103e86116e56012600a614255565b6116f390633b9aca0061429f565b6116fd9190614264565b818361170b6012600a614255565b61171990633b9aca0061429f565b611723919061429f565b61172d9190614264565b10156117a15760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b95565b80826117af6012600a614255565b6117bd90633b9aca0061429f565b6117c7919061429f565b6117d19190614264565b6013555050565b6000546001600160a01b031633146118265760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6001600160a01b0381166118a25760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b95565b6001600160a01b03811661dead14156119235760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b95565b6000805461193c916001600160a01b03909116906119e6565b6119478160016119e6565b600080546001600160a01b03168152600160205260409020541561198e57600080546001600160a01b0316808252600160205260409091205461198c91908390612d3c565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611a345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611aad5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b601554610100900460ff1615611ac257600080fd5b6001600160a01b038116301415611b1b5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610b95565b601580546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611b696012600a614255565b601354610d769190614264565b6000546001600160a01b03163314611bc45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b60008054611bdd916001600160a01b03909116906119e6565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611c745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b80611ceb576001600160a01b03828116600081815260026020526040808220805460ff1916905560155490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610bee565b60035415611d52576203f48060035442611d05919061430d565b11611d525760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610b95565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560155491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610bee565b5050565b600080546001600160a01b03163314611e1f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b600a54611e399030906001600160a01b0316600019612c2f565b50600190565b6000546001600160a01b03163314611e8d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b60155460ff1615611ee05760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b95565b601554610100900460ff16611f375760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b95565b6015546201000090046001600160a01b0316611f7d57601580547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601554600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561200857600080fd5b505af1925050508015612019575060015b506015805460ff19166001179055600b5461271090612056906001600160a01b03166001600160a01b031660009081526001602052604090205490565b6120609190614264565b601155600b546001600160a01b03166000908152600160205260409020546127109061208d90600561429f565b6120979190614264565b601255565b6000546001600160a01b031633146120ea5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b601554760100000000000000000000000000000000000000000000900460ff16156121575760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610b95565b600a60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ce9190614324565b6001600160a01b031663c9c65396600a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122539190614324565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156122b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122db9190614324565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283169081179091556000908152600260205260408120805460ff1916600117905554600a54612335929182169116600019612c2f565b600a5461234f9030906001600160a01b0316600019612c2f565b600080546001600160a01b039081168252600560209081526040808420805460ff19908116600190811790925530865282862080548216831790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805482168317905585549094168552600790925290922080549091169091179055601580547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055565b600061241c338484612d3c565b5060019392505050565b6000546001600160a01b031633146124745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6009805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416928816929092179290921716179055806124ec8385614341565b6124f69190614341565b6009805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b031633146125875760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b600e80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906125d090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146126295760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b600d80546001600160a01b0392831673ffffffffffffffffffffffffffffffffffffffff1991821617909155600c8054939092169216919091179055565b6000546001600160a01b031633146126b55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271e9190614324565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561276b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278f9190614324565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156127f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128169190614324565b90506001600160a01b0381166129b457816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128889190614324565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f99190614324565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561295e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129829190614324565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556129dd565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610f0a903090600019612c2f565b6000546001600160a01b03163314612a645760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b601554610100900460ff1615612abc5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b95565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612af6573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612b475760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6015546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610bee565b6015546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190614367565b6001600160a01b038316612c855760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b95565b6001600160a01b038216612cdb5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b95565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612dba5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b95565b6001600160a01b038316612e365760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b95565b60008211612eac5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b95565b601554760100000000000000000000000000000000000000000000900460ff16612f185760405162461bcd60e51b815260206004820152601360248201527f4c50206e6f7420696e697469616c697a656421000000000000000000000000006044820152606401610b95565b6001600160a01b0384166000908152600260205260408120548190819060ff1615612f465760019250612f74565b6001600160a01b03861660009081526002602052604090205460ff1615612f705760019150612f74565b5060015b612f7e878761349d565b156131845760155460ff16612fd55760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b95565b8280612fde5750815b156130a2576001600160a01b03871660009081526006602052604090205460ff1615801561302557506001600160a01b03861660009081526006602052604090205460ff16155b156130a2576013548511156130a25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610b95565b600a546001600160a01b038781169116148015906130be575081155b15613184576001600160a01b03861660009081526006602052604090205460ff166131845760145485613106886001600160a01b031660009081526001602052604090205490565b6131109190614384565b11156131845760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610b95565b6001600160a01b03871660009081526005602052604090205460019060ff16806131c657506001600160a01b03871660009081526005602052604090205460ff165b156131cf575060005b821561324257600e5460ff161580156131ef5750600e54610100900460ff165b156132425742600f546010546132059190614384565b10156132425730600090815260016020526040902054601154811061324057601254811061323257506012545b61323b81613572565b426010555b505b6132518888888488888861325d565b98975050505050505050565b601554600090610100900460ff166133095761327988886139f9565b601554610100900460ff161580156132965750613296888861349d565b156133095760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610b95565b613313888861349d565b156133c6576015546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156133af575060408051601f3d908101601f191682019092526133ac91810190614367565b60015b6133b857600080fd5b9050806133c457600080fd5b505b6001600160a01b038816600090815260016020526040812080548892906133ee90849061430d565b909155506000905085613401578661340d565b61340d8986868a613b57565b6001600160a01b03891660009081526001602052604081208054929350839290919061343a908490614384565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161348691815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b038481169116148015906134ca57506000546001600160a01b03838116911614155b80156134e157506000546001600160a01b03163214155b801561350657506001600160a01b03821660009081526007602052604090205460ff16155b801561352b57506001600160a01b03831660009081526007602052604090205460ff16155b801561354257506001600160a01b03821661dead14155b801561355657506001600160a01b03821615155b801561356b57506001600160a01b0383163014155b9392505050565b600e805460ff191660011790556040805160808101825260095461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000009004909116606082018190526135d057506139ec565b306000908152600460209081526040808320600a546001600160a01b031684529091529020546000191461362957306000908152600460209081526040808320600a546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff168561364a919061429f565b6136549190614264565b61365e9190614264565b9050600061366c828561430d565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106136a6576136a66142be565b6001600160a01b03928316602091820292909201810191909152600a54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373c9190614324565b8160018151811061374f5761374f6142be565b6001600160a01b039283166020918202929092010152600a546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906137ae90859060009086903090429060040161439c565b600060405180830381600087803b1580156137c857600080fd5b505af11580156137dc573d6000803e3d6000fd5b50479250600091508490506137f1868461429f565b6137fb9190614264565b905084156138ec57600a546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561388a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138af91906143d8565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6138f6818361430d565b915085600001518660600181815161390e9190614406565b61ffff90811690915260608801516040890151600093509082169161393491168561429f565b61393e9190614264565b9050600061394c828561430d565b604089015190915061ffff161561399957600d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613997573d6000803e3d6000fd5b505b602088015161ffff16156139e357600c546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156139e1573d6000803e3d6000fd5b505b50505050505050505b50600e805460ff19169055565b601554610100900460ff1615613a775760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610b95565b613a81828261349d565b158015613a9b5750600b546001600160a01b038281169116145b15611dcc576001600160a01b038083166000908152600760205260409020805460ff191660011790556015805461ff001916610100179081905562010000900416613b1057601580547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600e805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6000808415613b6d575060085461ffff16613b97565b8315613b86575060085462010000900461ffff16613b97565b50600854640100000000900461ffff165b6000612710613ba6838661429f565b613bb09190614264565b30600090815260016020526040812080549293508392909190613bd4908490614384565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613c23818561430d565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c8657613c86613c2e565b604052919050565b600067ffffffffffffffff821115613ca857613ca8613c2e565b5060051b60200190565b6001600160a01b0381168114612af657600080fd5b600082601f830112613cd857600080fd5b81356020613ced613ce883613c8e565b613c5d565b82815260059290921b84018101918181019086841115613d0c57600080fd5b8286015b84811015613d30578035613d2381613cb2565b8352918301918301613d10565b509695505050505050565b8015158114612af657600080fd5b60008060408385031215613d5c57600080fd5b823567ffffffffffffffff811115613d7357600080fd5b613d7f85828601613cc7565b9250506020830135613d9081613d3b565b809150509250929050565b600060208083528351808285015260005b81811015613dc857858101830151858201604001528201613dac565b81811115613dda576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613e0257600080fd5b5035919050565b60008060408385031215613e1c57600080fd5b8235613e2781613cb2565b946020939093013593505050565b60008060408385031215613e4857600080fd5b823567ffffffffffffffff80821115613e6057600080fd5b613e6c86838701613cc7565b9350602091508185013581811115613e8357600080fd5b85019050601f81018613613e9657600080fd5b8035613ea4613ce882613c8e565b81815260059190911b82018301908381019088831115613ec357600080fd5b928401925b82841015613ee157833582529284019290840190613ec8565b80955050505050509250929050565b600080600060608486031215613f0557600080fd5b8335613f1081613cb2565b92506020840135613f2081613cb2565b929592945050506040919091013590565b60008060408385031215613f4457600080fd5b50508035926020909101359150565b60008060008060808587031215613f6957600080fd5b8435613f7481613d3b565b93506020850135613f8481613d3b565b92506040850135613f9481613d3b565b91506060850135613fa481613d3b565b939692955090935050565b803561ffff81168114613fc157600080fd5b919050565b600080600060608486031215613fdb57600080fd5b613fe484613faf565b9250613ff260208501613faf565b915061400060408501613faf565b90509250925092565b60006020828403121561401b57600080fd5b813561356b81613cb2565b600080600080600060a0868803121561403e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561407457600080fd5b823561407f81613cb2565b91506020830135613d9081613d3b565b6000602082840312156140a157600080fd5b813561356b81613d3b565b600080604083850312156140bf57600080fd5b82356140ca81613cb2565b91506020830135613d9081613cb2565b600081518084526020808501945080840160005b838110156141135781516001600160a01b0316875295820195908201906001016140ee565b509495945050505050565b60408152600061413160408301856140da565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156141ac57816000190482111561419257614192614142565b8085161561419f57918102915b93841c9390800290614176565b509250929050565b6000826141c357506001610d55565b816141d057506000610d55565b81600181146141e657600281146141f05761420c565b6001915050610d55565b60ff84111561420157614201614142565b50506001821b610d55565b5060208310610133831016604e8410600b841016171561422f575081810a610d55565b6142398383614171565b806000190482111561424d5761424d614142565b029392505050565b600061356b60ff8416836141b4565b60008261429a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008160001904831182151516156142b9576142b9614142565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff81141561430457614304614142565b60010192915050565b60008282101561431f5761431f614142565b500390565b60006020828403121561433657600080fd5b815161356b81613cb2565b600061ffff80831681851680830382111561435e5761435e614142565b01949350505050565b60006020828403121561437957600080fd5b815161356b81613d3b565b6000821982111561439757614397614142565b500190565b85815284602082015260a0604082015260006143bb60a08301866140da565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156143ed57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff8381169083168181101561442157614421614142565b03939250505056fea26469706673582212203f2be00bb4c0ba1cf8ee03da7c9dbdb7ceff39add5eed74a85c3c7e571dd55b864736f6c634300080c0033

Deployed Bytecode Sourcemap

6148:21182:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7729:73;;;;;;;;;;;;7760:42;7729:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;7729:73:0;;;;;;;;8273:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;8273:28:0;245:177:1;16337:172:0;;;;;;;;;;-1:-1:-1;16337:172:0;;;;;:::i;:::-;;:::i;:::-;;7198:116;;;;;;;;;;-1:-1:-1;7198: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;7198:116:0;2649:365:1;13311:80:0;;;;;;;;;;-1:-1:-1;13383:5:0;;;;;;;;;;;;;;;;;13311:80;;;;;;;:::i;7668:26::-;;;;;;;;;;-1:-1:-1;7668:26:0;;;;-1:-1:-1;;;;;7668:26:0;;;16969:150;;;;;;;;;;-1:-1:-1;16969:150:0;;;;;:::i;:::-;;:::i;13921:159::-;;;;;;;;;;-1:-1:-1;13921:159:0;;;;;:::i;:::-;;:::i;:::-;;;4598:14:1;;4591:22;4573:41;;4561:2;4546:18;13921:159:0;4433:187:1;19039:112:0;;;;;;;;;;;;;:::i;13014:115::-;;;;;;;;;;;;;:::i;10886:397::-;;;;;;;;;;-1:-1:-1;10886:397:0;;;;;:::i;:::-;;:::i;14586:306::-;;;;;;;;;;-1:-1:-1;14586:306:0;;;;;:::i;:::-;;:::i;18089:267::-;;;;;;;;;;-1:-1:-1;18089:267:0;;;;;:::i;:::-;;:::i;25423:373::-;;;;;;;;;;-1:-1:-1;25423:373:0;;;;;:::i;:::-;;:::i;16766:195::-;;;;;;;;;;-1:-1:-1;16766:195:0;;;;;:::i;:::-;;:::i;7465:42::-;;;;;;;;;;;;7503:4;7465:42;;10641:237;;;;;;;;;;-1:-1:-1;10641:237:0;;;;;:::i;:::-;;:::i;8308:25::-;;;;;;;;;;;;;;;;13135:80;;;;;;;;;;-1:-1:-1;13135:80:0;;6875:2;7276:36:1;;7264:2;7249:18;13135:80:0;7134:184:1;17127:397:0;;;;;;;;;;-1:-1:-1;17127:397:0;;;;;:::i;:::-;;:::i;16650:108::-;;;;;;;;;;-1:-1:-1;16650:108:0;;;;;:::i;:::-;;:::i;19159:338::-;;;;;;;;;;-1:-1:-1;19159:338:0;;;;;:::i;:::-;;:::i;18364:140::-;;;;;;;;;;-1:-1:-1;18364:140:0;;;;;:::i;:::-;;:::i;17812:269::-;;;;;;;;;;-1:-1:-1;17812:269:0;;;;;:::i;:::-;;:::i;7701:21::-;;;;;;;;;;-1:-1:-1;7701:21:0;;;;-1:-1:-1;;;;;7701:21:0;;;8467:34;;;;;;;;;;-1:-1:-1;8467:34:0;;;;;;;;11872:588;;;;;;;;;;-1:-1:-1;11872:588:0;;;;;:::i;:::-;;:::i;18650:125::-;;;;;;;;;;-1:-1:-1;18650:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;18739:28:0;18715:4;18739:28;;;:19;:28;;;;;;;;;18650:125;8508:36;;;;;;;;;;-1:-1:-1;8508:36:0;;;;;;;;;;;18783:134;;;;;;;;;;-1:-1:-1;18783:134:0;;;;;:::i;:::-;;:::i;15956:220::-;;;;;;;;;;-1:-1:-1;15956:220:0;;;;;:::i;:::-;;:::i;18512:130::-;;;;;;;;;;-1:-1:-1;18512:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;18604:30:0;18580:4;18604:30;;;:21;:30;;;;;;;;;18512:130;18925:106;;;;;;;;;;;;;:::i;13623:117::-;;;;;;;;;;-1:-1:-1;13623:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;13716:16:0;13689:7;13716:16;;;:7;:16;;;;;;;13623:117;12468:193;;;;;;;;;;;;;:::i;15448:500::-;;;;;;;;;;-1:-1:-1;15448:500:0;;;;;:::i;:::-;;:::i;13397:79::-;;;;;;;;;;-1:-1:-1;13449:7:0;13467:6;-1:-1:-1;;;;;13467:6:0;13397:79;;14405:173;;;;;;;;;;;;;:::i;24689:536::-;;;;;;;;;;;;;:::i;13221:84::-;;;;;;;;;;-1:-1:-1;13295:7:0;;;;;;;;;;;;;;;;;13221:84;;10038:595;;;;;;;;;;;;;:::i;13748:165::-;;;;;;;;;;-1:-1:-1;13748:165:0;;;;;:::i;:::-;;:::i;17532:272::-;;;;;;;;;;-1:-1:-1;17532:272:0;;;;;:::i;:::-;;:::i;19714:164::-;;;;;;;;;;-1:-1:-1;19714:164:0;;;;;:::i;:::-;;:::i;7323:133::-;;;;;;;;;;-1:-1:-1;7323:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9397:6:1;9430:15;;;9412:34;;9482:15;;;9477:2;9462:18;;9455:43;9534:15;;;9514:18;;;9507:43;;;;9586:15;;;9581:2;9566:18;;9559:43;9374:3;9359:19;7323:133:0;9164:444:1;19505:201:0;;;;;;;;;;-1:-1:-1;19505:201:0;;;;;:::i;:::-;;:::i;13482:133::-;;;;;;;;;;-1:-1:-1;13482:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;13584:19:0;;;13566:7;13584:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13482:133;8191:44;;;;;;;;;;;;;;;;14900:540;;;;;;;;;;-1:-1:-1;14900:540:0;;;;;:::i;:::-;;:::i;25233:182::-;;;;;;;;;;;;;:::i;16184:145::-;;;;;;;;;;-1:-1:-1;16184:145:0;;;;;:::i;:::-;;:::i;7915:199::-;;;;;;;;;;-1:-1:-1;7915:199:0;;;;;;-1:-1:-1;;;;;7915:199:0;;;;;;;;;;;-1:-1:-1;;;;;10700:15:1;;;10682:34;;10752:15;;;;10747:2;10732:18;;10725:43;10594:18;7915:199:0;10415:359:1;8145:39:0;;;;;;;;;;-1:-1:-1;8145:39:0;;;;;;;;;;;16517:125;;;;;;;;;;-1:-1:-1;16517:125:0;;;;;:::i;:::-;;:::i;16337:172::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;;;;;;;;;16445:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;16445:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;16483:8;;16493:7;;16445:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16337:172:::0;;:::o;16969:150::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;17053:3:::1;17046;:10;;17038:31;;;::::0;-1:-1:-1;;;17038:31:0;;12163:2:1;17038:31:0::1;::::0;::::1;12145:21:1::0;12202:1;12182:18;;;12175:29;12240:10;12220:18;;;12213:38;12268:18;;17038:31:0::1;11961:331:1::0;17038:31:0::1;17080:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;17080:9:0;;;::::1;-1:-1:-1::0;;;;;17080:9:0::1;::::0;:26:::1;::::0;364:18:1;;17080:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16969:150:::0;:::o;13921:159::-;13996:4;14013:37;14022:10;14034:7;14043:6;14013:8;:37::i;:::-;-1:-1:-1;14068:4:0;13921:159;;;;;:::o;19039:112::-;19084:7;19129:13;6875:2;19129;:13;:::i;:::-;19111:14;;:32;;;;:::i;:::-;19104:39;;19039:112;:::o;13014:115::-;13069:7;6938:13;6875:2;6938;:13;:::i;:::-;6921:30;;6716:13;6921:30;:::i;:::-;13080:31;;13100:8;;;13080:31;6938:13;6875:2;6938;:13;:::i;:::-;6921:30;;6716:13;6921:30;:::i;10886:397::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;11035:7:::1;:14;11016:8;:15;:33;11008:67;;;::::0;-1:-1:-1;;;11008:67:0;;14703:2:1;11008:67:0::1;::::0;::::1;14685:21:1::0;14742:2;14722:18;;;14715:30;14781:23;14761:18;;;14754:51;14822:18;;11008:67:0::1;14501:345:1::0;11008:67:0::1;11091:7;11086:190;11108:8;:15;11104:1;:19;;;11086:190;;;11189:13;6875:2;11189;:13;:::i;:::-;11178:7;11186:1;11178:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;11163:10;13689:7:::0;13716:16;;;:7;:16;;;;;;11153:49:::1;;11145:58;;;::::0;::::1;;11218:46;11240:8;11249:1;11240:11;;;;;;;;;;:::i;:::-;;;;;;;11253:7;11261:1;11253:10;;;;;;;;;;:::i;:::-;;;;;;;11218:21;:46::i;:::-;11125:3:::0;::::1;::::0;::::1;:::i;:::-;;;;11086:190;;;;10886:397:::0;;:::o;14586:306::-;-1:-1:-1;;;;;14707:19:0;;14686:4;14707:19;;;:11;:19;;;;;;;;14727:10;14707:31;;;;;;;;-1:-1:-1;;14707:52:0;14703:126;;-1:-1:-1;;;;;14776:19:0;;;;;;:11;:19;;;;;;;;14796:10;14776:31;;;;;;;:41;;14811:6;;14776:19;:41;;14811:6;;14776:41;:::i;:::-;;;;-1:-1:-1;;14703:126:0;14848:36;14858:6;14866:9;14877:6;14848:9;:36::i;:::-;14841:43;14586:306;-1:-1:-1;;;;14586:306:0:o;18089:267::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;18231:4:::1;6938:13;6875:2;6938;:13;:::i;:::-;6921:30;::::0;6716:13:::1;6921:30;:::i;:::-;18221:14;;;;:::i;:::-;18209:7:::0;18198;6938:13:::1;6875:2;6938;:13;:::i;:::-;6921:30;::::0;6716:13:::1;6921:30;:::i;:::-;18188:17;;;;:::i;:::-;18187:29;;;;:::i;:::-;:49;;18179:112;;;::::0;-1:-1:-1;;;18179:112:0;;15552:2:1;18179:112:0::1;::::0;::::1;15534:21:1::0;15591:2;15571:18;;;15564:30;15630:34;15610:18;;;15603:62;15701:20;15681:18;;;15674:48;15739:19;;18179:112:0::1;15350:414:1::0;18179:112:0::1;18341:7:::0;18330;6938:13:::1;6875:2;6938;:13;:::i;:::-;6921:30;::::0;6716:13:::1;6921:30;:::i;:::-;18320:17;;;;:::i;:::-;18319:29;;;;:::i;:::-;18302:14;:46:::0;-1:-1:-1;;18089:267:0:o;25423:373::-;25548:7;:14;25529:8;:15;:33;25521:67;;;;-1:-1:-1;;;25521:67:0;;14703:2:1;25521:67:0;;;14685:21:1;14742:2;14722:18;;;14715:30;14781:23;14761:18;;;14754:51;14822:18;;25521:67:0;14501:345:1;25521:67:0;25604:7;25599:190;25621:8;:15;25617:1;:19;;;25599:190;;;25691:7;25699:1;25691:10;;;;;;;;;;:::i;:::-;;;;;;;25666:21;25676:10;-1:-1:-1;;;;;13716:16:0;13689:7;13716:16;;;:7;:16;;;;;;;13623:117;25666:21;:35;;25658:44;;;;;;25717:60;25727:10;25739:8;25748:1;25739:11;;;;;;;;;;:::i;:::-;;;;;;;6875:2;25763;:13;;;;:::i;:::-;25752:7;25760:1;25752:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;25717:9;:60::i;:::-;-1:-1:-1;25638:3:0;;;;:::i;:::-;;;;25599:190;;16766:195;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;16888:9:::1;::::0;:65:::1;::::0;;;;16001:14:1;;15994:22;16888:65:0::1;::::0;::::1;15976:41:1::0;16060:14;;16053:22;16033:18;;;16026:50;16119:14;;16112:22;16092:18;;;16085:50;16178:14;;16171:22;16151:18;;;16144:50;16888:9:0;;;::::1;-1:-1:-1::0;;;;;16888:9:0::1;::::0;:24:::1;::::0;15948:19:1;;16888:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16766:195:::0;;;;:::o;10641:237::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;10737:13:::1;::::0;;;::::1;;;10736:14;10728:23;;;::::0;::::1;;10778:13;6875:2;10778;:13;:::i;:::-;10771:20;::::0;:6;:20:::1;:::i;:::-;10762:29;;10802:68;10820:10;10832:2;10836:6;10844:5;10851::::0;10858::::1;10865:4;10802:17;:68::i;17127:397::-:0;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;7503:4:::1;17234:6;:21;;;;:65;;;;;7553:4;17276:7;:23;;;;17234:65;:117;;;;;7607:4;17320:11;:31;;;;17234:117;17226:170;;;::::0;-1:-1:-1;;;17226:170:0;;16407:2:1;17226:170:0::1;::::0;::::1;16389:21:1::0;16446:2;16426:18;;;16419:30;16485:25;16465:18;;;16458:53;16528:18;;17226:170:0::1;16205:347:1::0;17226:170:0::1;17407:9;:25:::0;;::::1;::::0;;::::1;17443:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;17481:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;17127:397::o;16650:108::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;16719:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;16719:31:0::1;::::0;::::1;160:74:1::0;16719:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;16719:31:0::1;14:226:1::0;19159:338:0;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;19373:16;19353;6938:13:::1;6875:2;6938;:13;:::i;:::-;6921:30;::::0;6716:13:::1;6921:30;:::i;:::-;19343:26;;;;:::i;:::-;19342:47;;;;:::i;:::-;19326:13;:63:::0;19441:13;19424;6938::::1;6875:2;6938;:13;:::i;:::-;6921:30;::::0;6716:13:::1;6921:30;:::i;:::-;19414:23;;;;:::i;:::-;19413:41;;;;:::i;:::-;19400:10;:54:::0;19465:17:::1;:24:::0;-1:-1:-1;;;;19159:338:0:o;18364:140::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;-1:-1:-1;;;;;18456:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;18456:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18364:140::o;17812:269::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;17953:4:::1;6938:13;6875:2;6938;:13;:::i;:::-;6921:30;::::0;6716:13:::1;6921:30;:::i;:::-;17943:14;;;;:::i;:::-;17931:7:::0;17920;6938:13:::1;6875:2;6938;:13;:::i;:::-;6921:30;::::0;6716:13:::1;6921:30;:::i;:::-;17910:17;;;;:::i;:::-;17909:29;;;;:::i;:::-;:49;;17901:117;;;::::0;-1:-1:-1;;;17901:117:0;;16759:2:1;17901:117:0::1;::::0;::::1;16741:21:1::0;16798:2;16778:18;;;16771:30;16837:34;16817:18;;;16810:62;16908:25;16888:18;;;16881:53;16951:19;;17901:117:0::1;16557:419:1::0;17901:117:0::1;18066:7:::0;18055;6938:13:::1;6875:2;6938;:13;:::i;:::-;6921:30;::::0;6716:13:::1;6921:30;:::i;:::-;18045:17;;;;:::i;:::-;18044:29;;;;:::i;:::-;18029:12;:44:::0;-1:-1:-1;;17812:269:0:o;11872:588::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;-1:-1:-1;;;;;11951:22:0;::::1;11943:96;;;::::0;-1:-1:-1;;;11943:96:0;;17183:2:1;11943:96:0::1;::::0;::::1;17165:21:1::0;17222:2;17202:18;;;17195:30;17261:34;17241:18;;;17234:62;17332:31;17312:18;;;17305:59;17381:19;;11943:96:0::1;16981:425:1::0;11943:96:0::1;-1:-1:-1::0;;;;;12058:16:0;::::1;7760:42;12058:16;;12050:90;;;::::0;-1:-1:-1;;;12050:90:0;;17183:2:1;12050:90:0::1;::::0;::::1;17165:21:1::0;17222:2;17202:18;;;17195:30;17261:34;17241:18;;;17234:62;17332:31;17312:18;;;17305:59;17381:19;;12050:90:0::1;16981:425:1::0;12050:90:0::1;12171:6;::::0;;12151:34:::1;::::0;-1:-1:-1;;;;;12171:6:0;;::::1;::::0;12151:19:::1;:34::i;:::-;12196:35;12216:8;12226:4;12196:19;:35::i;:::-;12275:1;12265:6:::0;;-1:-1:-1;;;;;12265:6:0::1;13716:16:::0;;:7;:16;;;;;;12255:21;12252:99:::1;;12303:6;::::0;;-1:-1:-1;;;;;12303:6:0::1;13716:16:::0;;;:7;:16;;;;;;;12293:46:::1;::::0;12303:6;12311:8;;25717:9;:60::i;12293:46::-:1;;12252:99;12371:6;:17:::0;;-1:-1:-1;;12371:17:0::1;-1:-1:-1::0;;;;;12371:17:0;::::1;::::0;;::::1;::::0;;12404:38:::1;::::0;12371:17;;;;12404:38:::1;::::0;12371:6;12404:38:::1;11872:588:::0;:::o;18783:134::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;-1:-1:-1;;;;;18871:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;18871:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18783:134::o;15956:220::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;16040:16:::1;::::0;::::1;::::0;::::1;;;16039:17;16031:26;;;::::0;::::1;;-1:-1:-1::0;;;;;16076:28:0;::::1;16099:4;16076:28;;16068:55;;;::::0;-1:-1:-1;;;16068:55:0;;17613:2:1;16068:55:0::1;::::0;::::1;17595:21:1::0;17652:2;17632:18;;;17625:30;17691:16;17671:18;;;17664:44;17725:18;;16068:55:0::1;17411:338:1::0;16068:55:0::1;16134:9;:34:::0;;-1:-1:-1;;;;;16134:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;15956:220::o;18925:106::-;18966:7;19009:13;6875:2;19009;:13;:::i;:::-;18993:12;;:30;;;;:::i;12468:193::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;12553:6:::1;::::0;;12533:34:::1;::::0;-1:-1:-1;;;;;12553:6:0;;::::1;::::0;12533:19:::1;:34::i;:::-;12595:1;12578:19:::0;;-1:-1:-1;;12578:19:0::1;::::0;;12613:40:::1;::::0;12595:1;;12613:40:::1;::::0;12595:1;;12613:40:::1;12468:193::o:0;15448:500::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;15529:16;15525:416:::1;;-1:-1:-1::0;;;;;15562:13:0;;::::1;15578:5;15562:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;15562:21:0::1;::::0;;15598:9:::1;::::0;:32;;;;;::::1;::::0;::::1;17922:74:1::0;;;;18012:18;;;18005:50;;;;15598:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;17895:18:1;;15598:32:0::1;17754:307:1::0;15525:416:0::1;15667:17;::::0;:22;15663:136:::1;;15756:6;15736:17;;15718:15;:35;;;;:::i;:::-;:44;15710:73;;;::::0;-1:-1:-1;;;15710:73:0;;18268:2:1;15710:73:0::1;::::0;::::1;18250:21:1::0;18307:2;18287:18;;;18280:30;18346:18;18326;;;18319:46;18382:18;;15710:73:0::1;18066:340:1::0;15710:73:0::1;-1:-1:-1::0;;;;;15813:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;15813:20:0::1;15829:4;15813:20:::0;;::::1;::::0;;;15868:15:::1;15848:17;:35:::0;15898:9:::1;::::0;:31;;;;;::::1;::::0;::::1;17922:74:1::0;;;;18012:18;;;18005:50;15898:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;17895:18:1;;15898:31:0::1;17754:307:1::0;15525:416:0::1;15448:500:::0;;:::o;14405:173::-;14469:4;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;14518:9:::1;::::0;14486:62:::1;::::0;14503:4:::1;::::0;-1:-1:-1;;;;;14518:9:0::1;-1:-1:-1::0;;14486:8:0::1;:62::i;:::-;-1:-1:-1::0;14566:4:0::1;14405:173:::0;:::o;24689:536::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;24751:14:::1;::::0;::::1;;24750:15;24742:52;;;::::0;-1:-1:-1;;;24742:52:0;;18613:2:1;24742:52:0::1;::::0;::::1;18595:21:1::0;18652:2;18632:18;;;18625:30;18691:26;18671:18;;;18664:54;18735:18;;24742:52:0::1;18411:348:1::0;24742:52:0::1;24813:16;::::0;::::1;::::0;::::1;;;24805:53;;;::::0;-1:-1:-1;;;24805:53:0;;18966:2:1;24805:53:0::1;::::0;::::1;18948:21:1::0;19005:2;18985:18;;;18978:30;19044:26;19024:18;;;19017:54;19088:18;;24805:53:0::1;18764:348:1::0;24805:53:0::1;24880:9;::::0;;;::::1;-1:-1:-1::0;;;;;24880:9:0::1;24869:99;;24920:9;:36:::0;;;::::1;24950:4;24920:36:::0;::::1;;::::0;;24869:99:::1;24982:9;::::0;25002:6:::1;::::0;24982:85:::1;::::0;;;;-1:-1:-1;;;;;25002:6:0;;::::1;24982:85;::::0;::::1;19340:74:1::0;19462:10;25017:12:0::1;19450:23:1::0;19430:18;;;19423:51;19522:18;25039:15:0::1;19510:31:1::0;19490:18;;;19483:59;6875:2:0::1;19558:18:1::0;;;19551:45;24982:9:0;;;::::1;;::::0;:19:::1;::::0;19312::1;;24982:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24978:101:::0;25089:14:::1;:21:::0;;-1:-1:-1;;25089:21:0::1;25106:4;25089:21;::::0;;25147:6:::1;::::0;25157:5:::1;::::0;25137:17:::1;::::0;-1:-1:-1;;;;;25147:6:0::1;-1:-1:-1::0;;;;;13716:16:0;13689:7;13716:16;;;:7;:16;;;;;;;13623:117;25137:17:::1;:25;;;;:::i;:::-;25121:13;:41:::0;25197:6:::1;::::0;-1:-1:-1;;;;;25197:6:0::1;13689:7:::0;13716:16;;;:7;:16;;;;;;25212:5:::1;::::0;25187:21:::1;::::0;25207:1:::1;25187:21;:::i;:::-;25186:31;;;;:::i;:::-;25173:10;:44:::0;24689:536::o;10038:595::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;10099:13:::1;::::0;;;::::1;;;10098:14;10090:46;;;::::0;-1:-1:-1;;;10090:46:0;;19809:2:1;10090:46:0::1;::::0;::::1;19791:21:1::0;19848:2;19828:18;;;19821:30;19887:21;19867:18;;;19860:49;19926:18;;10090:46:0::1;19607:343:1::0;10090:46:0::1;10169:9;;;;;;;;;-1:-1:-1::0;;;;;10169:9:0::1;-1:-1:-1::0;;;;;10169:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10158:42:0::1;;10201:9;;;;;;;;;-1:-1:-1::0;;;;;10201:9:0::1;-1:-1:-1::0;;;;;10201:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10158:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;10700:15:1;;;10158:75:0::1;::::0;::::1;10682:34:1::0;10227:4:0::1;10732:18:1::0;;;10725:43;10594:18;;10158:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10149:6;:84:::0;;-1:-1:-1;;10149:84:0::1;-1:-1:-1::0;;;;;10149:84:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;10244:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;10244:22:0::1;-1:-1:-1::0;10244:22:0::1;::::0;;10288:6;10304:9:::1;::::0;10279:55:::1;::::0;10288:6;;::::1;::::0;10304:9:::1;-1:-1:-1::0;;10279:8:0::1;:55::i;:::-;10377:9;::::0;10345:62:::1;::::0;10362:4:::1;::::0;-1:-1:-1;;;;;10377:9:0::1;-1:-1:-1::0;;10345:8:0::1;:62::i;:::-;10420:27;10440:6:::0;;-1:-1:-1;;;;;10440:6:0;;::::1;10420:27:::0;;:19:::1;:27;::::0;;;;;;;:34;;-1:-1:-1;;10420:34:0;;::::1;10450:4;10420:34:::0;;::::1;::::0;;;10493:4:::1;10465:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;10517:25;:32;;;::::1;::::0;::::1;::::0;;10578:6;;;;::::1;10560:25:::0;;:17:::1;:25:::0;;;;;;:32;;;;::::1;::::0;;::::1;::::0;;10605:13:::1;:20:::0;;;::::1;::::0;::::1;::::0;;10038:595::o;13748:165::-;13826:4;13843:40;13853:10;13865:9;13876:6;13843:9;:40::i;:::-;-1:-1:-1;13901:4:0;;13748:165;-1:-1:-1;;;13748:165:0:o;17532:272::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;17633:7:::1;:29:::0;;::::1;17713:25:::0;;::::1;::::0;::::1;::::0;17673:29;;::::1;::::0;::::1;::::0;;;;17633;;::::1;17673::::0;;;;;;;::::1;17713:25;;::::0;;17731:7;17765:21:::1;17693:9:::0;17653;17765:21:::1;:::i;:::-;:31;;;;:::i;:::-;17749:7;:47:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;17532:272:0:o;19714:164::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;19790:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;19790:29:0;;::::1;;::::0;;19835:35:::1;::::0;::::1;::::0;::::1;::::0;19812:7;4598:14:1;4591:22;4573:41;;4561:2;4546:18;;4433:187;19835:35:0::1;;;;;;;;19714:164:::0;:::o;19505:201::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;19607:19;:38;;-1:-1:-1;;;;;19607:38:0;;::::1;-1:-1:-1::0;;19607:38:0;;::::1;;::::0;;;:11:::1;19656:42:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;19505:201::o;14900:540::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;14969:20:::1;15002:9;14969:43;;15023:16;15053:10;-1:-1:-1::0;;;;;15053:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15042:40:0::1;;15091:4;15098:10;-1:-1:-1::0;;;;;15098:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15042:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;10700:15:1;;;15042:74:0::1;::::0;::::1;10682:34:1::0;10752:15;;10732:18;;;10725:43;10594:18;;15042:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15023:93:::0;-1:-1:-1;;;;;;15131:22:0;::::1;15127:200;;15190:10;-1:-1:-1::0;;;;;15190:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15179:43:0::1;;15231:4;15238:10;-1:-1:-1::0;;;;;15238:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15179:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;10700:15:1;;;15179:77:0::1;::::0;::::1;10682:34:1::0;10752:15;;10732:18;;;10725:43;10594:18;;15179:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15170:6;:86:::0;;-1:-1:-1;;15170:86:0::1;-1:-1:-1::0;;;;;15170:86:0;;;::::1;::::0;;;::::1;::::0;;15127:200:::1;;;15298:6;:17:::0;;-1:-1:-1;;15298:17:0::1;-1:-1:-1::0;;;;;15298:17:0;::::1;;::::0;;15127:200:::1;15337:9;:22:::0;;-1:-1:-1;;15337:22:0::1;-1:-1:-1::0;;;;;15337:22:0;::::1;::::0;;::::1;::::0;;;15370:62:::1;::::0;15387:4:::1;::::0;-1:-1:-1;;15370:8:0::1;:62::i;25233:182::-:0;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;25300:16:::1;::::0;::::1;::::0;::::1;;;25299:17;25291:58;;;::::0;-1:-1:-1;;;25291:58:0;;20974:2:1;25291:58:0::1;::::0;::::1;20956:21:1::0;21013:2;20993:18;;;20986:30;21052;21032:18;;;21025:58;21100:18;;25291:58:0::1;20772:352:1::0;25291:58:0::1;25368:6;::::0;;25360:47:::1;::::0;-1:-1:-1;;;;;25368:6:0;;::::1;::::0;25385:21:::1;25360:47:::0;::::1;;;::::0;25385:21;;25360:47;25368:6;25360:47;25385:21;25368:6;25360:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25233:182::o:0;16184:145::-;8971:6;;-1:-1:-1;;;;;8971:6:0;8981:10;8971:20;8963:50;;;;-1:-1:-1;;;8963:50:0;;10981:2:1;8963:50:0;;;10963:21:1;11020:2;11000:18;;;10993:30;-1:-1:-1;;;11039:18:1;;;11032:47;11096:18;;8963:50:0;10779:341:1;8963:50:0;16274:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;17940:55:1;;;16274:47:0::1;::::0;::::1;17922:74:1::0;18039:14;;18032:22;18012:18;;;18005:50;16274:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;17895:18:1;;16274:47:0::1;17754:307:1::0;16517:125:0;16602:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;16602:32:0;;;160:74:1;16578:4:0;;16602:9;;;;;:23;;133:18:1;;16602:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14088:309::-;-1:-1:-1;;;;;14182:20:0;;14174:52;;;;-1:-1:-1;;;14174:52:0;;21581:2:1;14174:52:0;;;21563:21:1;21620:2;21600:18;;;21593:30;21659:21;21639:18;;;21632:49;21698:18;;14174:52:0;21379:343:1;14174:52:0;-1:-1:-1;;;;;14245:21:0;;14237:53;;;;-1:-1:-1;;;14237:53:0;;21581:2:1;14237:53:0;;;21563:21:1;21620:2;21600:18;;;21593:30;21659:21;21639:18;;;21632:49;21698:18;;14237:53:0;21379:343:1;14237:53:0;-1:-1:-1;;;;;14303:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;14356:33;;391:25:1;;;14356:33:0;;364:18:1;14356:33:0;;;;;;;14088:309;;;:::o;20251:2141::-;20330:4;-1:-1:-1;;;;;20355:18:0;;20347:68;;;;-1:-1:-1;;;20347:68:0;;21929:2:1;20347:68:0;;;21911:21:1;21968:2;21948:18;;;21941:30;22007:34;21987:18;;;21980:62;22078:7;22058:18;;;22051:35;22103:19;;20347:68:0;21727:401:1;20347:68:0;-1:-1:-1;;;;;20434:16:0;;20426:64;;;;-1:-1:-1;;;20426:64:0;;22335:2:1;20426:64:0;;;22317:21:1;22374:2;22354:18;;;22347:30;22413:34;22393:18;;;22386:62;22484:5;22464:18;;;22457:33;22507:19;;20426:64:0;22133:399:1;20426:64:0;20518:1;20509:6;:10;20501:64;;;;-1:-1:-1;;;20501:64:0;;22739:2:1;20501:64:0;;;22721:21:1;22778:2;22758:18;;;22751:30;22817:34;22797:18;;;22790:62;22888:11;22868:18;;;22861:39;22917:19;;20501:64:0;22537:405:1;20501:64:0;20584:13;;;;;;;20576:45;;;;-1:-1:-1;;;20576:45:0;;23149:2:1;20576:45:0;;;23131:21:1;23188:2;23168:18;;;23161:30;23227:21;23207:18;;;23200:49;23266:18;;20576:45:0;22947:343:1;20576:45:0;-1:-1:-1;;;;;20728:13:0;;20632:8;20728:13;;;:7;:13;;;;;;20632:8;;;;20728:13;;20724:170;;;20764:4;20758:10;;20724:170;;;-1:-1:-1;;;;;20790:11:0;;;;;;:7;:11;;;;;;;;20786:108;;;20825:4;20818:11;;20786:108;;;-1:-1:-1;20878:4:0;20786:108;20907:20;20918:4;20924:2;20907:10;:20::i;:::-;20904:641;;;20948:14;;;;20944:89;;20983:34;;-1:-1:-1;;;20983:34:0;;23497:2:1;20983:34:0;;;23479:21:1;23536:2;23516:18;;;23509:30;23575:26;23555:18;;;23548:54;23619:18;;20983:34:0;23295:348:1;20944:89:0;21050:3;:11;;;;21057:4;21050:11;21047:231;;;-1:-1:-1;;;;;21086:27:0;;;;;;:21;:27;;;;;;;;21085:28;:58;;;;-1:-1:-1;;;;;;21118:25:0;;;;;;:21;:25;;;;;;;;21117:26;21085:58;21081:182;;;21186:12;;21176:6;:22;;21168:75;;;;-1:-1:-1;;;21168:75:0;;23850:2:1;21168:75:0;;;23832:21:1;23889:2;23869:18;;;23862:30;23928:34;23908:18;;;23901:62;23999:10;23979:18;;;23972:38;24027:19;;21168:75:0;23648:404:1;21168:75:0;21309:9;;-1:-1:-1;;;;;21295:24:0;;;21309:9;;21295:24;;;;:33;;;21324:4;21323:5;21295:33;21292:242;;;-1:-1:-1;;;;;21354:25:0;;;;;;:21;:25;;;;;;;;21349:170;;21438:14;;21428:6;21412:13;21422:2;-1:-1:-1;;;;;13716:16:0;13689:7;13716:16;;;:7;:16;;;;;;;13623:117;21412:13;:22;;;;:::i;:::-;:40;;21404:95;;;;-1:-1:-1;;;21404:95:0;;24392:2:1;21404:95:0;;;24374:21:1;24431:2;24411:18;;;24404:30;24470:34;24450:18;;;24443:62;24541:12;24521:18;;;24514:40;24571:19;;21404:95:0;24190:406:1;21404:95:0;-1:-1:-1;;;;;21590:25:0;;21557:12;21590:25;;;:19;:25;;;;;;21572:4;;21590:25;;;:52;;-1:-1:-1;;;;;;21619:23:0;;;;;;:19;:23;;;;;;;;21590:52;21587:98;;;-1:-1:-1;21668:5:0;21587:98;21701:4;21697:599;;;21727:6;;;;21726:7;:47;;;;-1:-1:-1;21754:19:0;;;;;;;21726:47;21722:557;;;21843:15;21823:17;;21812:8;;:28;;;;:::i;:::-;:46;21808:456;;;21932:4;21883:28;13716:16;;;:7;:16;;;;;;21989:13;;21965:37;;21961:284;;22058:10;;22034:20;:34;22031:77;;-1:-1:-1;22095:10:0;;22031:77;22134:34;22147:20;22134:12;:34::i;:::-;22206:15;22195:8;:26;21961:284;21860:404;21808:456;22314:70;22332:4;22338:2;22342:6;22350:7;22359:3;22364:4;22370:13;22314:17;:70::i;:::-;22307:77;20251:2141;-1:-1:-1;;;;;;;;20251:2141:0:o;25804:953::-;25967:16;;25945:4;;25967:16;;;;;25962:221;;26000:28;26019:4;26025:2;26000:18;:28::i;:::-;26048:16;;;;;;;26047:17;:41;;;;;26068:20;26079:4;26085:2;26068:10;:20::i;:::-;26043:129;;;26109:47;;-1:-1:-1;;;26109:47:0;;24803:2:1;26109:47:0;;;24785:21:1;24842:2;24822:18;;;24815:30;24881:34;24861:18;;;24854:62;24952:7;24932:18;;;24925:35;24977:19;;26109:47:0;24601:401:1;26043:129:0;26199:20;26210:4;26216:2;26199:10;:20::i;:::-;26195:314;;;26267:9;;:37;;;;;-1:-1:-1;;;;;25288:15:1;;;26267:37:0;;;25270:34:1;25340:15;;;25320:18;;;25313:43;25372:18;;;25365:34;;;26236:12:0;;26267:9;;;;;:19;;25182:18:1;;26267:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;26267:37:0;;;;;;;;-1:-1:-1;;26267:37:0;;;;;;;;;;;;:::i;:::-;;;26263:163;;26402:8;;;26263:163;26355:5;-1:-1:-1;26446:7:0;26442:56;;26474:8;;;26442:56;26221:288;26195:314;-1:-1:-1;;;;;26521:13:0;;;;;;:7;:13;;;;;:23;;26538:6;;26521:13;:23;;26538:6;;26521:23;:::i;:::-;;;;-1:-1:-1;26555:22:0;;-1:-1:-1;26581:7:0;26580:55;;26629:6;26580:55;;;26592:34;26602:4;26608:3;26613:4;26619:6;26592:9;:34::i;:::-;-1:-1:-1;;;;;26646:11:0;;;;;;:7;:11;;;;;:29;;26555:80;;-1:-1:-1;26555:80:0;;26646:11;;;:29;;26555:80;;26646:29;:::i;:::-;;;;;;;;26708:2;-1:-1:-1;;;;;26693:34:0;26702:4;-1:-1:-1;;;;;26693:34:0;;26712:14;26693:34;;;;391:25:1;;379:2;364:18;;245:177;26693:34:0;;;;;;;;-1:-1:-1;26745:4:0;;25804:953;-1:-1:-1;;;;;;;;25804:953:0:o;19886:357::-;19954:4;19986:6;;-1:-1:-1;;;;;19978:14:0;;;19986:6;;19978:14;;;;:43;;-1:-1:-1;20015:6:0;;-1:-1:-1;;;;;20009:12:0;;;20015:6;;20009:12;;19978:43;:79;;;;-1:-1:-1;20051:6:0;;-1:-1:-1;;;;;20051:6:0;20038:9;:19;;19978:79;:118;;;;-1:-1:-1;;;;;;20075:21:0;;;;;;:17;:21;;;;;;;;20074:22;19978:118;:159;;;;-1:-1:-1;;;;;;20114:23:0;;;;;;:17;:23;;;;;;;;20113:24;19978:159;:186;;;;-1:-1:-1;;;;;;20154:10:0;;7760:42;20154:10;;19978:186;:219;;;;-1:-1:-1;;;;;;20181:16:0;;;;19978:219;:257;;;;-1:-1:-1;;;;;;20214:21:0;;20230:4;20214:21;;19978:257;19971:264;19886:357;-1:-1:-1;;;19886:357:0:o;22400:1765::-;8865:6;:13;;-1:-1:-1;;8865:13:0;8874:4;8865:13;;;22483:30:::1;::::0;;::::1;::::0;::::1;::::0;;22506:7:::1;22483:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;22524:56:::1;;22562:7;;;22524:56;22615:4;22595:26;::::0;;;:11:::1;:26;::::0;;;;;;;22630:9:::1;::::0;-1:-1:-1;;;;;22630:9:0::1;22595:46:::0;;;;;;;;-1:-1:-1;;22595:67:0::1;22592:165;;22699:4;22679:26;::::0;;;:11:::1;:26;::::0;;;;;;;22714:9:::1;::::0;-1:-1:-1;;;;;22714:9:0::1;22679:46:::0;;;;;;;-1:-1:-1;;22679:66:0;;22592:165:::1;22769:17;22850:1;22834:6;:12;;;22790:56;;22814:6;:16;;;22791:39;;:20;:39;;;;:::i;:::-;22790:56;;;;:::i;:::-;22789:62;;;;:::i;:::-;22769:82:::0;-1:-1:-1;22862:15:0::1;22880:32;22769:82:::0;22880:20;:32:::1;:::i;:::-;22957:16;::::0;;22971:1:::1;22957:16:::0;;;;;::::1;::::0;;22862:50;;-1:-1:-1;22933:21:0::1;::::0;22957:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22957:16:0::1;22933:40;;23002:4;22984;22989:1;22984:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22984:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23028:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;22984:7;;23028:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23018:4;23023:1;23018:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23018:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23057:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;23132:7;;23057:9:::1;::::0;23170:4;;23197::::1;::::0;23217:15:::1;::::0;23057:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23277:21:0::1;::::0;-1:-1:-1;23256:18:0::1;::::0;-1:-1:-1;23363:7:0;;-1:-1:-1;23337:22:0::1;23350:9:::0;23277:21;23337:22:::1;:::i;:::-;23336:34;;;;:::i;:::-;23309:61:::0;-1:-1:-1;23387:13:0;;23383:328:::1;;23417:9;::::0;:222:::1;::::0;;;;23494:4:::1;23417:222;::::0;::::1;26384:34:1::0;26434:18;;;26427:34;;;23417:9:0::1;26477:18:1::0;;;26470:34;;;26520:18;;;26513:34;7760:42:0::1;26563:19:1::0;;;26556:44;23609:15:0::1;26616:19:1::0;;;26609:35;-1:-1:-1;;;;;23417:9:0;;::::1;::::0;:25:::1;::::0;23450:16;;26295:19:1;;23417:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23659:40:0::1;::::0;;27140:25:1;;;27196:2;27181:18;;27174:34;;;23659:40:0::1;::::0;-1:-1:-1;27113:18:1;23659:40:0::1;;;;;;;23383:328;23723:30;23737:16:::0;23723:30;::::1;:::i;:::-;;;23780:6;:16;;;23764:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;23864:12:::1;::::0;::::1;::::0;23846:14:::1;::::0;::::1;::::0;23807:22:::1;::::0;-1:-1:-1;23832:44:0;;::::1;::::0;23833:27:::1;::::0;::::1;:10:::0;:27:::1;:::i;:::-;23832:44;;;;:::i;:::-;23807:69:::0;-1:-1:-1;23887:24:0::1;23914:27;23807:69:::0;23914:10;:27:::1;:::i;:::-;23956:14;::::0;::::1;::::0;23887:54;;-1:-1:-1;23956:18:0::1;;::::0;23952:95:::1;;23991:19:::0;;:44:::1;::::0;-1:-1:-1;;;;;23991:19:0;;::::1;::::0;:44;::::1;;;::::0;24020:14;;23991:19:::1;:44:::0;:19;:44;24020:14;23991:19;:44;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23952:95;24061:16;::::0;::::1;::::0;:20:::1;;::::0;24057:101:::1;;24098:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;24098:21:0;;::::1;::::0;:48;::::1;;;::::0;24129:16;;24098:21:::1;:48:::0;:21;:48;24129:16;24098:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24057:101;22472:1693;;;;;;;;8889:1;-1:-1:-1::0;8901:6:0;:14;;-1:-1:-1;;8901:14:0;;;22400:1765::o;24173:508::-;24255:16;;;;;;;24254:17;24246:65;;;;-1:-1:-1;;;24246:65:0;;27643:2:1;24246:65:0;;;27625:21:1;27682:2;27662:18;;;27655:30;27721:34;27701:18;;;27694:62;27792:5;27772:18;;;27765:33;27815:19;;24246:65:0;27441:399:1;24246:65:0;24327:20;24338:4;24344:2;24327:10;:20::i;:::-;24326:21;:37;;;;-1:-1:-1;24357:6:0;;-1:-1:-1;;;;;24351:12:0;;;24357:6;;24351:12;24326:37;24322:352;;;-1:-1:-1;;;;;24380:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;24380:30:0;24406:4;24380:30;;;24425:16;:23;;-1:-1:-1;;24425:23:0;24380:30;24425:23;;;;;24474:9;;;;24463:107;;24518:9;:36;;;;24548:4;24518:36;;;;;24463:107;24584:19;:26;;-1:-1:-1;;24584:26:0;;;;;24630:32;;-1:-1:-1;4573:41:1;;24630:32:0;;4561:2:1;4546:18;24630:32:0;;;;;;;24173:508;;:::o;26765:562::-;26853:7;26873:18;26906:3;26902:205;;;-1:-1:-1;26939:9:0;:16;;;26902:205;;;26977:4;26973:134;;;-1:-1:-1;27011:9:0;:17;;;;;;26973:134;;;-1:-1:-1;27074:9:0;:21;;;;;;26973:134;27119:17;7654:5;27139:19;27148:10;27139:6;:19;:::i;:::-;:38;;;;:::i;:::-;27206:4;27190:22;;;;:7;:22;;;;;:35;;27119:58;;-1:-1:-1;27119:58:0;;27190:22;;;:35;;27119:58;;27190:35;:::i;:::-;;;;-1:-1:-1;;27241:40:0;;391:25:1;;;27264:4:0;;-1:-1:-1;;;;;27241:40:0;;;;;379:2:1;364:18;27241:40:0;;;;;;;27301:18;27310:9;27301:6;:18;:::i;:::-;27294:25;26765:562;-1:-1:-1;;;;;;;26765:562:0: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:1138::-;4743:6;4751;4804:2;4792:9;4783:7;4779:23;4775:32;4772:52;;;4820:1;4817;4810:12;4772:52;4860:9;4847:23;4889:18;4930:2;4922:6;4919:14;4916:34;;;4946:1;4943;4936:12;4916:34;4969:61;5022:7;5013:6;5002:9;4998:22;4969:61;:::i;:::-;4959:71;;5049:2;5039:12;;5104:2;5093:9;5089:18;5076:32;5133:2;5123:8;5120:16;5117:36;;;5149:1;5146;5139:12;5117:36;5172:24;;;-1:-1:-1;5227:4:1;5219:13;;5215:27;-1:-1:-1;5205:55:1;;5256:1;5253;5246:12;5205:55;5292:2;5279:16;5315:60;5331:43;5371:2;5331:43;:::i;5315:60::-;5409:15;;;5491:1;5487:10;;;;5479:19;;5475:28;;;5440:12;;;;5515:19;;;5512:39;;;5547:1;5544;5537:12;5512:39;5571:11;;;;5591:142;5607:6;5602:3;5599:15;5591:142;;;5673:17;;5661:30;;5624:12;;;;5711;;;;5591:142;;;5752:5;5742:15;;;;;;;4625:1138;;;;;:::o;5768:456::-;5845:6;5853;5861;5914:2;5902:9;5893:7;5889:23;5885:32;5882:52;;;5930:1;5927;5920:12;5882:52;5969:9;5956:23;5988:31;6013:5;5988:31;:::i;:::-;6038:5;-1:-1:-1;6095:2:1;6080:18;;6067:32;6108:33;6067:32;6108:33;:::i;:::-;5768:456;;6160:7;;-1:-1:-1;;;6214:2:1;6199:18;;;;6186:32;;5768:456::o;6229:248::-;6297:6;6305;6358:2;6346:9;6337:7;6333:23;6329:32;6326:52;;;6374:1;6371;6364:12;6326:52;-1:-1:-1;;6397:23:1;;;6467:2;6452:18;;;6439:32;;-1:-1:-1;6229:248:1:o;6482:647::-;6556:6;6564;6572;6580;6633:3;6621:9;6612:7;6608:23;6604:33;6601:53;;;6650:1;6647;6640:12;6601:53;6689:9;6676:23;6708:28;6730:5;6708:28;:::i;:::-;6755:5;-1:-1:-1;6812:2:1;6797:18;;6784:32;6825:30;6784:32;6825:30;:::i;:::-;6874:7;-1:-1:-1;6933:2:1;6918:18;;6905:32;6946:30;6905:32;6946:30;:::i;:::-;6995:7;-1:-1:-1;7054:2:1;7039:18;;7026:32;7067:30;7026:32;7067:30;:::i;:::-;6482:647;;;;-1:-1:-1;6482:647:1;;-1:-1:-1;;6482:647:1:o;7323:159::-;7390:20;;7450:6;7439:18;;7429:29;;7419:57;;7472:1;7469;7462:12;7419:57;7323:159;;;:::o;7487:328::-;7561:6;7569;7577;7630:2;7618:9;7609:7;7605:23;7601:32;7598:52;;;7646:1;7643;7636:12;7598:52;7669:28;7687:9;7669:28;:::i;:::-;7659:38;;7716:37;7749:2;7738:9;7734:18;7716:37;:::i;:::-;7706:47;;7772:37;7805:2;7794:9;7790:18;7772:37;:::i;:::-;7762:47;;7487:328;;;;;:::o;7820:247::-;7879:6;7932:2;7920:9;7911:7;7907:23;7903:32;7900:52;;;7948:1;7945;7938:12;7900:52;7987:9;7974:23;8006:31;8031:5;8006:31;:::i;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:241::-;8974:6;9027:2;9015:9;9006:7;9002:23;8998:32;8995:52;;;9043:1;9040;9033:12;8995:52;9082:9;9069:23;9101:28;9123:5;9101:28;:::i;9613:404::-;9697:6;9705;9758:2;9746:9;9737:7;9733:23;9729:32;9726:52;;;9774:1;9771;9764:12;9726:52;9813:9;9800:23;9832:31;9857:5;9832:31;:::i;:::-;9882:5;-1:-1:-1;9939:2:1;9924:18;;9911:32;9952:33;9911:32;9952:33;:::i;11125:484::-;11178:3;11216:5;11210:12;11243:6;11238:3;11231:19;11269:4;11298:2;11293:3;11289:12;11282:19;;11335:2;11328:5;11324:14;11356:1;11366:218;11380:6;11377:1;11374:13;11366:218;;;11445:13;;-1:-1:-1;;;;;11441:62:1;11429:75;;11524:12;;;;11559:15;;;;11402:1;11395:9;11366:218;;;-1:-1:-1;11600:3:1;;11125:484;-1:-1:-1;;;;;11125:484:1:o;11614:342::-;11815:2;11804:9;11797:21;11778:4;11835:56;11887:2;11876:9;11872:18;11864:6;11835:56;:::i;:::-;11827:64;;11941:6;11934:14;11927:22;11922:2;11911:9;11907:18;11900:50;11614:342;;;;;:::o;12297:184::-;12349:77;12346:1;12339:88;12446:4;12443:1;12436:15;12470:4;12467:1;12460:15;12486:482;12575:1;12618:5;12575:1;12632:330;12653:7;12643:8;12640:21;12632:330;;;12772:4;-1:-1:-1;;12700:77:1;12694:4;12691:87;12688:113;;;12781:18;;:::i;:::-;12831:7;12821:8;12817:22;12814:55;;;12851:16;;;;12814:55;12930:22;;;;12890:15;;;;12632:330;;;12636:3;12486:482;;;;;:::o;12973:866::-;13022:5;13052:8;13042:80;;-1:-1:-1;13093:1:1;13107:5;;13042:80;13141:4;13131:76;;-1:-1:-1;13178:1:1;13192:5;;13131:76;13223:4;13241:1;13236:59;;;;13309:1;13304:130;;;;13216:218;;13236:59;13266:1;13257:10;;13280:5;;;13304:130;13341:3;13331:8;13328:17;13325:43;;;13348:18;;:::i;:::-;-1:-1:-1;;13404:1:1;13390:16;;13419:5;;13216:218;;13518:2;13508:8;13505:16;13499:3;13493:4;13490:13;13486:36;13480:2;13470:8;13467:16;13462:2;13456:4;13453:12;13449:35;13446:77;13443:159;;;-1:-1:-1;13555:19:1;;;13587:5;;13443:159;13634:34;13659:8;13653:4;13634:34;:::i;:::-;13764:6;-1:-1:-1;;13692:79:1;13683:7;13680:92;13677:118;;;13775:18;;:::i;:::-;13813:20;;12973:866;-1:-1:-1;;;12973:866:1:o;13844:140::-;13902:5;13931:47;13972:4;13962:8;13958:19;13952:4;13931:47;:::i;13989:274::-;14029:1;14055;14045:189;;14090:77;14087:1;14080:88;14191:4;14188:1;14181:15;14219:4;14216:1;14209:15;14045:189;-1:-1:-1;14248:9:1;;13989:274::o;14268:228::-;14308:7;14434:1;-1:-1:-1;;14362:74:1;14359:1;14356:81;14351:1;14344:9;14337:17;14333:105;14330:131;;;14441:18;;:::i;:::-;-1:-1:-1;14481:9:1;;14268:228::o;14851:184::-;14903:77;14900:1;14893:88;15000:4;14997:1;14990:15;15024:4;15021:1;15014:15;15040:175;15077:3;15121:4;15114:5;15110:16;15150:4;15141:7;15138:17;15135:43;;;15158:18;;:::i;:::-;15207:1;15194:15;;15040:175;-1:-1:-1;;15040:175:1:o;15220:125::-;15260:4;15288:1;15285;15282:8;15279:34;;;15293:18;;:::i;:::-;-1:-1:-1;15330:9:1;;15220:125::o;19955:251::-;20025:6;20078:2;20066:9;20057:7;20053:23;20049:32;20046:52;;;20094:1;20091;20084:12;20046:52;20126:9;20120:16;20145:31;20170:5;20145:31;:::i;20543:224::-;20582:3;20610:6;20643:2;20640:1;20636:10;20673:2;20670:1;20666:10;20704:3;20700:2;20696:12;20691:3;20688:21;20685:47;;;20712:18;;:::i;:::-;20748:13;;20543:224;-1:-1:-1;;;;20543:224:1:o;21129:245::-;21196:6;21249:2;21237:9;21228:7;21224:23;21220:32;21217:52;;;21265:1;21262;21255:12;21217:52;21297:9;21291:16;21316:28;21338:5;21316:28;:::i;24057:128::-;24097:3;24128:1;24124:6;24121:1;24118:13;24115:39;;;24134:18;;:::i;:::-;-1:-1:-1;24170:9:1;;24057:128::o;25410:605::-;25709:6;25698:9;25691:25;25752:6;25747:2;25736:9;25732:18;25725:34;25795:3;25790:2;25779:9;25775:18;25768:31;25672:4;25816:57;25868:3;25857:9;25853:19;25845:6;25816:57;:::i;:::-;-1:-1:-1;;;;;25909:55:1;;;;25904:2;25889:18;;25882:83;-1:-1:-1;25996:3:1;25981:19;25974:35;25808:65;25410:605;-1:-1:-1;;;25410:605:1:o;26655:306::-;26743:6;26751;26759;26812:2;26800:9;26791:7;26787:23;26783:32;26780:52;;;26828:1;26825;26818:12;26780:52;26857:9;26851:16;26841:26;;26907:2;26896:9;26892:18;26886:25;26876:35;;26951:2;26940:9;26936:18;26930:25;26920:35;;26655:306;;;;;:::o;27219:217::-;27258:4;27287:6;27343:10;;;;27313;;27365:12;;;27362:38;;;27380:18;;:::i;:::-;27417:13;;27219:217;-1:-1:-1;;;27219:217:1:o

Swarm Source

ipfs://3f2be00bb4c0ba1cf8ee03da7c9dbdb7ceff39add5eed74a85c3c7e571dd55b8
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.