Token Kounotori

 

Overview [ERC-20]

Price
$0.00 @ 0.000000 Eth (+1.89%)
Fully Diluted Market Cap
Max Total Supply:
1,000,000,000,000,000 KTO

Holders:
2,101

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

$KTO is built on the Ethereum block chain with a number of anti-manipulation features built into its contract, including max buy/sell in any single transaction, a max hold per wallet, and bot/sniper blacklisting on launch.

Market

Volume (24H):$1,721.75
Market Capitalization:$0.00
Circulating Supply:0.00 KTO
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Kounotori

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-03
*/

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

abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

    /**
     * @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/od/ai/nu/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 IUniswapV2Factory {
    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 IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    function factory() external view returns (address);
}

interface IUniswapV2Router01 {
    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);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ag, bool _ab, bool _aspecial) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function getSniperAmt() external view returns (uint256);
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
}

contract Kounotori is Context, IERC20Upgradeable {
    // Ownership moved to in-contract for customizability.
    address private _owner;

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    bool private allowedPresaleExclusion = true;
    mapping (address => bool) private _isSniper;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;

    string private _name;
    string private _symbol;

    struct FeesStruct {
        uint16 reflectFee;
        uint16 liquidityFee;
        uint16 marketingFee;
    }

    struct StaticValuesStruct {
        uint16 maxReflectFee;
        uint16 maxLiquidityFee;
        uint16 maxMarketingFee;
        uint16 masterTaxDivisor;
    }

    struct Ratios {
        uint16 liquidityRatio;
        uint16 marketingRatio;
        uint16 totalRatio;
    }

    FeesStruct private currentTaxes = FeesStruct({
        reflectFee: 0,
        liquidityFee: 0,
        marketingFee: 0
        });

    FeesStruct public _buyTaxes = FeesStruct({
        reflectFee: 300,
        liquidityFee: 300,
        marketingFee: 300
        });

    FeesStruct public _sellTaxes = FeesStruct({
        reflectFee: 300,
        liquidityFee: 300,
        marketingFee: 300
        });

    FeesStruct public _transferTaxes = FeesStruct({
        reflectFee: 300,
        liquidityFee: 300,
        marketingFee: 300
        });

    Ratios public _ratios = Ratios({
        liquidityRatio: _buyTaxes.liquidityFee,
        marketingRatio: _buyTaxes.marketingFee,
        totalRatio: _buyTaxes.liquidityFee + _buyTaxes.marketingFee
        });

    StaticValuesStruct public staticVals = StaticValuesStruct({
        maxReflectFee: 800,
        maxLiquidityFee: 800,
        maxMarketingFee: 800,
        masterTaxDivisor: 10000
        });

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    address public currentRouter;
    // PCS ROUTER
    address private pcsV2Router = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
    // UNI ROUTER
    address private uniswapV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable private _marketingWallet = payable(0x990C36e0871857534a55F8f756cDecF360d59B08);
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    
    uint256 private _maxTxAmount;
    uint256 public maxTxAmountUI;

    uint256 private _maxWalletSize;
    uint256 public maxWalletSizeUI;

    uint256 private swapThreshold;
    uint256 private swapAmount;

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

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event ContractSwapEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

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


        if (block.chainid == 56 || block.chainid == 97) {
            currentRouter = pcsV2Router;
        } else if (block.chainid == 1) {
            currentRouter = uniswapV2Router;
        }

        _approve(_msgSender(), currentRouter, type(uint256).max);
        _approve(address(this), currentRouter, type(uint256).max);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;
    }
    
    bool contractInitialized = false;

    function intializeContract(address[] memory accounts, uint256[] memory amounts, address newOwner) external onlyOwner {
        require(!contractInitialized, "1");
        require(accounts.length < 100, "2");
        require(accounts.length == amounts.length, "3");

        _name = "Kounotori";
        _symbol = "KTO";
        startingSupply = 1_000_000_000_000_000;
        if (startingSupply < 10000000000) {
            _decimals = 18;
        } else {
            _decimals = 9;
        }
        _tTotal = startingSupply * (10**_decimals);
        _rTotal = (MAX - (MAX % _tTotal));

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

        uint256 percent = 2;
        uint256 divisor = 1000;
        _maxTxAmount = (_tTotal * percent) / divisor;
        maxTxAmountUI = (startingSupply * percent) / divisor;
        percent = 55;
        divisor = 10000;
        _maxWalletSize = (_tTotal * percent) / divisor;
        maxWalletSizeUI = (startingSupply * percent) / divisor;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        contractInitialized = true;     
        _rOwned[owner()] = _rTotal;
        emit Transfer(address(0), owner(), _tTotal);

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

        for(uint256 i = 0; i < accounts.length; i++){
            address wallet = accounts[i];
            uint256 amount = amounts[i]*10**_decimals;
            _transfer(owner(), wallet, amount);
        }

        _transfer(owner(), address(this), balanceOf(owner()));

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

        enableTrading();
        transferOwner(newOwner);
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) public onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        if (tradingEnabled){
            setExcludedFromReward(newOwner, true);
        }
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view returns (uint8) { return _decimals; }
    function symbol() external view returns (string memory) { return _symbol; }
    function name() external view returns (string memory) { return _name; }
    function getOwner() external view 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) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), 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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_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 > 1 weeks, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

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

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

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_isExcluded[account], "Account is already included.");
            if(_excluded.length == 1){
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
            } else {
                for (uint256 i = 0; i < _excluded.length; i++) {
                    if (_excluded[i] == account) {
                        _excluded[i] = _excluded[_excluded.length - 1];
                        _tOwned[account] = 0;
                        _isExcluded[account] = false;
                        _excluded.pop();
                        break;
                    }
                }
            }
        }
    }

    function setInitializer(address initializer) external onlyOwner {
        require(!_hasLiqBeenAdded, "Liquidity is already in.");
        antiSnipe = AntiSnipe(initializer);
    }

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


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

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

    function getSniperAmt() public view returns (uint256) {
        return antiSnipe.getSniperAmt();
    }

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

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }
    
    function setTaxesBuy(uint16 reflectFee, uint16 liquidityFee, uint16 marketingFee) external onlyOwner {
        require(reflectFee <= staticVals.maxReflectFee
                && liquidityFee <= staticVals.maxLiquidityFee
                && marketingFee <= staticVals.maxMarketingFee);
        require(liquidityFee + reflectFee + marketingFee <= 3450);
        _buyTaxes.liquidityFee = liquidityFee;
        _buyTaxes.reflectFee = reflectFee;
        _buyTaxes.marketingFee = marketingFee;
    }

    function setTaxesSell(uint16 reflectFee, uint16 liquidityFee, uint16 marketingFee) external onlyOwner {
        require(reflectFee <= staticVals.maxReflectFee
                && liquidityFee <= staticVals.maxLiquidityFee
                && marketingFee <= staticVals.maxMarketingFee);
        require(liquidityFee + reflectFee + marketingFee <= 3450);
        _sellTaxes.liquidityFee = liquidityFee;
        _sellTaxes.reflectFee = reflectFee;
        _sellTaxes.marketingFee = marketingFee;
    }

    function setTaxesTransfer(uint16 reflectFee, uint16 liquidityFee, uint16 marketingFee) external onlyOwner {
        require(reflectFee <= staticVals.maxReflectFee
                && liquidityFee <= staticVals.maxLiquidityFee
                && marketingFee <= staticVals.maxMarketingFee);
        require(liquidityFee + reflectFee + marketingFee <= 3450);
        _transferTaxes.liquidityFee = liquidityFee;
        _transferTaxes.reflectFee = reflectFee;
        _transferTaxes.marketingFee = marketingFee;
    }

    function setRatios(uint16 liquidity, uint16 marketing) external onlyOwner {
        require (liquidity + marketing == 100, "Must add up to 100%");
        _ratios.liquidityRatio = liquidity;
        _ratios.marketingRatio = marketing;
        _ratios.totalRatio = liquidity + marketing;
    }

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

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

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

    function setWallets(address payable marketingWallet) external onlyOwner {
        _marketingWallet = payable(marketingWallet);
    }

    function setContractSwapEnabled(bool _enabled) public onlyOwner {
        contractSwapEnabled = _enabled;
        emit ContractSwapEnabledUpdated(_enabled);
    }

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

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }

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

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

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

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        if (_ratios.totalRatio == 0)
            return;

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

        uint256 toLiquify = ((contractTokenBalance * _ratios.liquidityRatio) / _ratios.totalRatio) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

        //uint256 currentBalance = address(this).balance;
        uint256 liquidityBalance = ((address(this).balance * _ratios.liquidityRatio) / _ratios.totalRatio) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer(address(this).balance);
        }
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            if (from == address(this)){
                _liquidityHolders[owner()] = true;
            } else {
                _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.");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp)) {} catch {}
        tradingEnabled = true;
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

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

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOwned[from] = _rOwned[from] - values.rAmount;
        _rOwned[to] = _rOwned[to] + values.rTransferAmount;

        if (_isExcluded[from] && !_isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        } else if (!_isExcluded[from] && _isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;  
        } else if (_isExcluded[from] && _isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _rTotal -= values.rFee;
            _tFeeTotal += values.tFee;

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) private returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

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

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

        if(takeFee) {
            if (lpPairs[to]) {
                currentTaxes.reflectFee = _sellTaxes.reflectFee;
                currentTaxes.liquidityFee = _sellTaxes.liquidityFee;
                currentTaxes.marketingFee = _sellTaxes.marketingFee;
            } else if (lpPairs[from]) {
                currentTaxes.reflectFee = _buyTaxes.reflectFee;
                currentTaxes.liquidityFee = _buyTaxes.liquidityFee;
                currentTaxes.marketingFee = _buyTaxes.marketingFee;
            } else {
                currentTaxes.reflectFee = _transferTaxes.reflectFee;
                currentTaxes.liquidityFee = _transferTaxes.liquidityFee;
                currentTaxes.marketingFee = _transferTaxes.marketingFee;
            }

            values.tFee = (tAmount * currentTaxes.reflectFee) / staticVals.masterTaxDivisor;
            values.tLiquidity = (tAmount * (currentTaxes.liquidityFee + currentTaxes.marketingFee)) / staticVals.masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tLiquidity = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }
        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate));
        return values;
    }

    function _getRate() private view returns(uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return _rTotal / _tTotal;
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return _rTotal / _tTotal;
        return rSupply / tSupply;
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) private {
        _rOwned[address(this)] = _rOwned[address(this)] + (tLiquidity * _getRate());
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }

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

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":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflectFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidityRatio","type":"uint16"},{"internalType":"uint16","name":"marketingRatio","type":"uint16"},{"internalType":"uint16","name":"totalRatio","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflectFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflectFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"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":"currentRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","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":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","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":"_antiSpecial","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflectFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflectFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflectFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxReflectFee","type":"uint16"},{"internalType":"uint16","name":"maxLiquidityFee","type":"uint16"},{"internalType":"uint16","name":"maxMarketingFee","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006004819055600a805460ff19166001179055608081905260a081905260c0526010805465ffffffffffff1990811690915561012c60e08190526101008190526101208190526011805465012c012c012c908416811791829055610140839052610160839052610180839052601280548516821790556101a08390526101c08390526101e0929092526013805490931690911790915561026060405262010000810461ffff90811661020081815264010000000090930490911661022081905261024091620000d091906200045b565b61ffff90811690915281516014805460208086015160409687015186166401000000000261ffff60201b19918716620100000263ffffffff199094169590961694909417919091179290921692909217909155815160808101835261032080825291810182905291820152612710606090910152601580546727100320032003206001600160401b0319909116179055601d80546001600160a01b03199081167310ed43c718714eb63d5aa57b78b54704e256024e17909155601e80548216737a250d5630b4cf539739df2c5dacb4c659f2488d179055601f8054600161ff0160a01b03191673990c36e0871857534a55f8f756cdecf360d59b081790556026805461ffff60ff60b01b011916905560008054909116331790556038461480620001fa5750466061145b156200022857601d54601c80546001600160a01b0319166001600160a01b0390921691909117905562000255565b46600114156200025557601e54601c80546001600160a01b0319166001600160a01b039092169190911790555b6200026f33601c546001600160a01b03166000196200035a565b601c546200028b9030906001600160a01b03166000196200035a565b600160066000620002a46000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080548316600190811790915561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168117909255600c906200032c6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000490565b6001600160a01b038316620003ac5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620003fa5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620003a3565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061ffff8083168185168083038211156200048757634e487b7160e01b600052601160045260246000fd5b01949350505050565b61540480620004a06000396000f3fe6080604052600436106103855760003560e01c806364038409116101d1578063bcd96a2511610102578063de3a3b69116100a0578063f6540ec71161006f578063f6540ec714610b29578063fb78680d14610b3f578063fdb78c0e14610b5f578063fe575a8714610b9257600080fd5b8063de3a3b6914610ab4578063eafb5a3c14610ad4578063eb50e70e14610af4578063ee5d9c2d14610b1457600080fd5b8063c6a276c2116100dc578063c6a276c2146109fd578063cab5ebea14610a1d578063cf84770614610a3d578063dd62ed3e14610a6e57600080fd5b8063bcd96a251461097b578063c2fa418f1461099b578063c6831cd8146109cc57600080fd5b80638965b55d1161016f5780638da5cb5b116101495780638da5cb5b146108be57806395d89b4114610926578063a457c2d71461093b578063a9059cbb1461095b57600080fd5b80638965b55d146108dc5780638a63bd9b146108fc5780638a8c523c1461091157600080fd5b80637b45d431116101ab5780637b45d4311461080f57806380c581d11461086557806388f8202014610885578063893d20e8146108be57600080fd5b806364038409146107c457806370a08231146107da578063715018a6146107fa57600080fd5b8063313ce567116102b65780634fb2e45d1161025457806355dbc3691161022357806355dbc36914610736578063590ffdce1461074b5780635c24b0741461076b5780635cce86cd1461078b57600080fd5b80634fb2e45d1461069e5780634fbee193146106be57806350a8e016146106f757806355d8ece61461071657600080fd5b8063395093511161029057806339509351146106245780633f3cf56c14610644578063452ed4f1146106645780634ada218b1461068457600080fd5b8063313ce567146105c257806333251a0b146105e457806336fddb041461060457600080fd5b806318160ddd1161032357806323b872dd116102fd57806323b872dd14610542578063260039571461056257806329dd8798146105825780632d838119146105a257600080fd5b806318160ddd146104985780631b6afa2d146104b75780631e90afe31461052257600080fd5b8063092316021161035f5780630923160214610406578063095ea7b314610428578063122fea3b1461045857806313e461921461047857600080fd5b806303fd2a451461039157806306fdde03146103c45780630758d924146103e657600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a761dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d057600080fd5b506103d9610bb2565b6040516103bb9190614b83565b3480156103f257600080fd5b50601a546103a7906001600160a01b031681565b34801561041257600080fd5b50610426610421366004614bd8565b610c44565b005b34801561043457600080fd5b50610448610443366004614c16565b610d68565b60405190151581526020016103bb565b34801561046457600080fd5b50601c546103a7906001600160a01b031681565b34801561048457600080fd5b50610426610493366004614c50565b610d7f565b3480156104a457600080fd5b506017545b6040519081526020016103bb565b3480156104c357600080fd5b506015546104f49061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103bb565b34801561052e57600080fd5b5061042661053d366004614c9b565b61113a565b34801561054e57600080fd5b5061044861055d366004614cde565b611270565b34801561056e57600080fd5b5061042661057d366004614d1f565b6112e8565b34801561058e57600080fd5b5061042661059d366004614d41565b6113ff565b3480156105ae57600080fd5b506104a96105bd366004614bd8565b6114e8565b3480156105ce57600080fd5b5060165460405160ff90911681526020016103bb565b3480156105f057600080fd5b506104266105ff366004614d9d565b61157f565b34801561061057600080fd5b5061042661061f366004614c50565b61161f565b34801561063057600080fd5b5061044861063f366004614c16565b611698565b34801561065057600080fd5b5061042661065f366004614d1f565b6116d4565b34801561067057600080fd5b50601b546103a7906001600160a01b031681565b34801561069057600080fd5b506026546104489060ff1681565b3480156106aa57600080fd5b506104266106b9366004614d9d565b6117eb565b3480156106ca57600080fd5b506104486106d9366004614d9d565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561070357600080fd5b5060265461044890610100900460ff1681565b34801561072257600080fd5b50610426610731366004614c9b565b611a47565b34801561074257600080fd5b506104a9611b7d565b34801561075757600080fd5b50610426610766366004614c50565b611bfb565b34801561077757600080fd5b50610426610786366004614d9d565b611c74565b34801561079757600080fd5b506104486107a6366004614d9d565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107d057600080fd5b506104a960215481565b3480156107e657600080fd5b506104a96107f5366004614d9d565b611d5a565b34801561080657600080fd5b50610426611db9565b34801561081b57600080fd5b506011546108409061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103bb565b34801561087157600080fd5b50610426610880366004614c50565b611e69565b34801561089157600080fd5b506104486108a0366004614d9d565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108ca57600080fd5b506000546001600160a01b03166103a7565b3480156108e857600080fd5b506104266108f7366004614c9b565b612056565b34801561090857600080fd5b5061044861218c565b34801561091d57600080fd5b506104266121fb565b34801561093257600080fd5b506103d9612400565b34801561094757600080fd5b50610448610956366004614c16565b61240f565b34801561096757600080fd5b50610448610976366004614c16565b612446565b34801561098757600080fd5b50610426610996366004614dba565b61245d565b3480156109a757600080fd5b506013546108409061ffff808216916201000081048216916401000000009091041683565b3480156109d857600080fd5b506012546108409061ffff808216916201000081048216916401000000009091041683565b348015610a0957600080fd5b50610426610a18366004614d9d565b612558565b348015610a2957600080fd5b50610426610a38366004614ded565b6125f8565b348015610a4957600080fd5b506014546108409061ffff808216916201000081048216916401000000009091041683565b348015610a7a57600080fd5b506104a9610a89366004614e0a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ac057600080fd5b50610426610acf366004614f27565b6126cb565b348015610ae057600080fd5b50610426610aef366004614d9d565b612ea8565b348015610b0057600080fd5b50610426610b0f366004614d9d565b613257565b348015610b2057600080fd5b506104266132d4565b348015610b3557600080fd5b506104a960235481565b348015610b4b57600080fd5b50610426610b5a366004614ff0565b6133b7565b348015610b6b57600080fd5b50601f54610448907501000000000000000000000000000000000000000000900460ff1681565b348015610b9e57600080fd5b50610448610bad366004614d9d565b613444565b6060600e8054610bc190615022565b80601f0160208091040260200160405190810160405280929190818152602001828054610bed90615022565b8015610c3a5780601f10610c0f57610100808354040283529160200191610c3a565b820191906000526020600020905b815481529060010190602001808311610c1d57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610c975760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b604b811015610ce85760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610c8e565b6026546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610d4d57600080fd5b505af1158015610d61573d6000803e3d6000fd5b5050505050565b6000610d753384846134d2565b5060015b92915050565b6000546001600160a01b03163314610dcd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b60018115151415610f0f576001600160a01b03821660009081526008602052604090205460ff1615610e415760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610c8e565b6001600160a01b03821660009081526001602052604090205415610e9b576001600160a01b038216600090815260016020526040902054610e81906114e8565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b80611136576001600160a01b03821660009081526008602052604090205460ff16610f7c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610c8e565b60095460011415610ff8576001600160a01b038216600090815260026020908152604080832083905560089091529020805460ff191690556009805480610fc557610fc5615076565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60095481101561113457826001600160a01b031660098281548110611022576110226150a5565b6000918252602090912001546001600160a01b03161415611122576009805461104d90600190615103565b8154811061105d5761105d6150a5565b600091825260209091200154600980546001600160a01b039092169183908110611089576110896150a5565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600890925220805460ff1916905560098054806110ee576110ee615076565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055611134565b8061112c8161511a565b915050610ffb565b505b5050565b6000546001600160a01b031633146111885760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b60155461ffff908116908416118015906111b2575060155461ffff62010000909104811690831611155b80156111d0575060155461ffff640100000000909104811690821611155b6111d957600080fd5b610d7a816111e78585615135565b6111f19190615135565b61ffff16111561120057600080fd5b6013805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00009484166201000002949094167fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909116179390911692909217179055565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146112d5576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906112cf908490615103565b90915550505b6112e08484846135df565b949350505050565b6000546001600160a01b031633146113365760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b60008183601754611347919061515b565b61135191906151a9565b90506103e860175461136391906151a9565b8110156113d85760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610c8e565b6022819055600d5482906113ed90859061515b565b6113f791906151a9565b602355505050565b6000546001600160a01b0316331461144d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b6026546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156114ca57600080fd5b505af11580156114de573d6000803e3d6000fd5b5050505050505050565b60006018548211156115625760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610c8e565b600061156c613a91565b905061157881846151a9565b9392505050565b6000546001600160a01b031633146115cd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b6026546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610d33565b6000546001600160a01b0316331461166d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d759185906116cf9086906151bd565b6134d2565b6000546001600160a01b031633146117225760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b60008183601754611733919061515b565b61173d91906151a9565b90506103e860175461174f91906151a9565b8110156117c45760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c8e565b6020819055600d5482906117d990859061515b565b6117e391906151a9565b602155505050565b6000546001600160a01b031633146118395760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b6001600160a01b0381166118b55760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c8e565b6001600160a01b03811661dead14156119365760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c8e565b6000805461194f916001600160a01b0390911690611bfb565b61195a816001611bfb565b60265460ff161561197057611970816001610d7f565b600054601f546001600160a01b03908116911614156119b257601f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600080546119c8906001600160a01b0316611d5a565b11156119ef576000546119ed906001600160a01b0316826119e882611d5a565b6135df565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611a955760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b60155461ffff90811690841611801590611abf575060155461ffff62010000909104811690831611155b8015611add575060155461ffff640100000000909104811690821611155b611ae657600080fd5b610d7a81611af48585615135565b611afe9190615135565b61ffff161115611b0d57600080fd5b6011805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00009484166201000002949094167fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909116179390911692909217179055565b6000602660029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf691906151d5565b905090565b6000546001600160a01b03163314611c495760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611cc25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b602654610100900460ff1615611d1a5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610c8e565b602680546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6001600160a01b03811660009081526008602052604081205460ff1615611d9757506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d79906114e8565b6000546001600160a01b03163314611e075760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b60008054611e20916001600160a01b0390911690611bfb565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611eb75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b80611f5f576001600160a01b03828116600081815260036020526040808220805460ff1916905560265490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015611f4357600080fd5b505af1158015611f57573d6000803e3d6000fd5b505050505050565b60045415611fc65762093a8060045442611f799190615103565b11611fc65760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610c8e565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560265492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401600060405180830381600087803b158015611f4357600080fd5b6000546001600160a01b031633146120a45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b60155461ffff908116908416118015906120ce575060155461ffff62010000909104811690831611155b80156120ec575060155461ffff640100000000909104811690821611155b6120f557600080fd5b610d7a816121038585615135565b61210d9190615135565b61ffff16111561211c57600080fd5b6012805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00009484166201000002949094167fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909116179390911692909217179055565b600080546001600160a01b031633146121db5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b601a546121f59030906001600160a01b03166000196134d2565b50600190565b6000546001600160a01b031633146122495760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b60265460ff161561229c5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c8e565b602654610100900460ff166122f35760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c8e565b6122fe306001610d7f565b601b54612315906001600160a01b03166001610d7f565b6026546201000090046001600160a01b031661235b57602680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602654601b546040517f4b38f1d40000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff42166044820152620100009092041690634b38f1d490606401600060405180830381600087803b1580156123df57600080fd5b505af19250505080156123f0575060015b506026805460ff19166001179055565b6060600f8054610bc190615022565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d759185906116cf908690615103565b60006124533384846135df565b5060019392505050565b6000546001600160a01b031633146124ab5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b6124b58183615135565b61ffff166064146125085760405162461bcd60e51b815260206004820152601360248201527f4d7573742061646420757020746f2031303025000000000000000000000000006044820152606401610c8e565b6014805461ffff838116620100000263ffffffff19909216908516171790556125318183615135565b6014805461ffff929092166401000000000265ffff00000000199092169190911790555050565b6000546001600160a01b031633146125a65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b6026546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610d33565b6000546001600160a01b031633146126465760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b601f80548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906126c090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146127195760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b602654760100000000000000000000000000000000000000000000900460ff16156127865760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610c8e565b60648351106127d75760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610c8e565b81518351146128285760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610c8e565b6040805180820190915260098082527f4b6f756e6f746f72690000000000000000000000000000000000000000000000602090920191825261286c91600e91614aea565b506040805180820190915260038082527f4b544f000000000000000000000000000000000000000000000000000000000060209092019182526128b191600f91614aea565b5066038d7ea4c68000600d556016805460ff191660091790556016546128db9060ff16600a6152d2565b600d546128e8919061515b565b60178190556128f9906000196152e1565b61290590600019615103565b601855601c54601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a0155916004808201926020929091908290030181865afa15801561298a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ae91906152f5565b6001600160a01b031663c9c65396601a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3391906152f5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abb91906152f5565b601b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff191660011790556017546002906103e8908190612b1790849061515b565b612b2191906151a9565b602055600d548190612b3490849061515b565b612b3e91906151a9565b6021555050601754603790612710908190612b5a90849061515b565b612b6491906151a9565b602255600d548190612b7790849061515b565b612b8191906151a9565b60235560175461271090612b9690600561515b565b612ba091906151a9565b6024556017546103e890612bb590600561515b565b612bbf91906151a9565b6025556026546201000090046001600160a01b0316612c0857602680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602680547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff1676010000000000000000000000000000000000000000000017905560185460016000612c626000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055612c8e6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601754604051612cd591815260200190565b60405180910390a3601a54612cf79030906001600160a01b03166000196134d2565b60005b8551811015612d91576000868281518110612d1757612d176150a5565b6020908102919091010151601654909150600090612d399060ff16600a6152d2565b878481518110612d4b57612d4b6150a5565b6020026020010151612d5d919061515b565b9050612d7b612d746000546001600160a01b031690565b83836135df565b5050508080612d899061511a565b915050612cfa565b50612dbd612da76000546001600160a01b031690565b306119e86107f56000546001600160a01b031690565b50601a546001600160a01b031663f305d7194730612dda81611d5a565b600080612def6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612e6f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e949190615312565b505050612e9f6121fb565b610d61836117eb565b6000546001600160a01b03163314612ef65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5f91906152f5565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd091906152f5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613033573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305791906152f5565b90506001600160a01b0381166131f557816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c991906152f5565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313a91906152f5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561319f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c391906152f5565b601b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905561321e565b601b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556111349030906000196134d2565b6000546001600160a01b031633146132a55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b601f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146133225760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b602654610100900460ff161561337a5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c8e565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156133b4573d6000803e3d6000fd5b50565b6000546001600160a01b031633146134055760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610c8e565b8284601754613414919061515b565b61341e91906151a9565b602455601754819061343190849061515b565b61343b91906151a9565b60255550505050565b6026546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156134ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d799190615340565b6001600160a01b0383166135285760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c8e565b6001600160a01b03821661357e5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c8e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661365d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c8e565b6001600160a01b0383166136d95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c8e565b6000821161374f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c8e565b6137598484613c22565b156139965760265460ff166137b05760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c8e565b6001600160a01b03841660009081526003602052604090205460ff16806137ef57506001600160a01b03831660009081526003602052604090205460ff165b156138af576001600160a01b03831660009081526007602052604090205460ff168061383357506001600160a01b03841660009081526007602052604090205460ff165b6138af576020548211156138af5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c8e565b601c546001600160a01b038481169116148015906138e657506001600160a01b03831660009081526003602052604090205460ff16155b15613996576001600160a01b03831660009081526007602052604090205460ff16613996576022548261391885611d5a565b61392291906151bd565b11156139965760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c8e565b6001600160a01b03841660009081526006602052604090205460019060ff16806139d857506001600160a01b03841660009081526006602052604090205460ff165b156139e1575060005b6001600160a01b03841660009081526003602052604090205460ff1615613a7c57601f5474010000000000000000000000000000000000000000900460ff16158015613a485750601f547501000000000000000000000000000000000000000000900460ff165b15613a7c576000613a5830611d5a565b90506024548110613a7a576025548110613a7157506025545b613a7a81613cdf565b505b613a88858585846140f4565b95945050505050565b60185460175460009190825b600954811015613be957826001600060098481548110613abf57613abf6150a5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613b2a5750816002600060098481548110613b0357613b036150a5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613b4757601754601854613b3f91906151a9565b935050505090565b6001600060098381548110613b5e57613b5e6150a5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613b8d9084615103565b92506002600060098381548110613ba657613ba66150a5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613bd59083615103565b915080613be18161511a565b915050613a9d565b50601754601854613bfa91906151a9565b821015613c1857601754601854613c1191906151a9565b9250505090565b613c1181836151a9565b600080546001600160a01b03848116911614801590613c4f57506000546001600160a01b03838116911614155b8015613c7457506001600160a01b0382166000908152600c602052604090205460ff16155b8015613c9957506001600160a01b0383166000908152600c602052604090205460ff16155b8015613cb057506001600160a01b03821661dead14155b8015613cc457506001600160a01b03821615155b801561157857506001600160a01b0383163014159392505050565b601f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905560145461ffff64010000000090910416613d37576140c9565b306000908152600560209081526040808320601a546001600160a01b0316845290915290205460001914613d9057306000908152600560209081526040808320601a546001600160a01b03168452909152902060001990555b60145460009060029061ffff6401000000008204811691613db291168561515b565b613dbc91906151a9565b613dc691906151a9565b90506000613dd48284615103565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613e0e57613e0e6150a5565b6001600160a01b03928316602091820292909201810191909152601a54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea491906152f5565b81600181518110613eb757613eb76150a5565b6001600160a01b039283166020918202929092010152601a546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613f1690859060009086903090429060040161535d565b600060405180830381600087803b158015613f3057600080fd5b505af1158015613f44573d6000803e3d6000fd5b5050601454600092506002915061ffff6401000000008204811691613f6a91164761515b565b613f7491906151a9565b613f7e91906151a9565b9050831561407757601a546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561400d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140329190615312565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b60006140838587615103565b11156140c457601f546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156140c2573d6000803e3d6000fd5b505b505050505b50601f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b602654600090610100900460ff166141a05761411085856144a6565b602654610100900460ff1615801561412d575061412d8585613c22565b156141a05760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610c8e565b60006141ae868686866146b0565b60808101516001600160a01b0388166000908152600160205260409020549192506141d891615103565b6001600160a01b038088166000908152600160205260408082209390935560608401519188168152919091205461420f91906151bd565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526008909152205460ff16801561426357506001600160a01b03851660009081526008602052604090205460ff16155b156142aa576001600160a01b03861660009081526002602052604090205461428c908590615103565b6001600160a01b0387166000908152600260205260409020556143ea565b6001600160a01b03861660009081526008602052604090205460ff161580156142eb57506001600160a01b03851660009081526008602052604090205460ff165b156143335780516001600160a01b03861660009081526002602052604090205461431591906151bd565b6001600160a01b0386166000908152600260205260409020556143ea565b6001600160a01b03861660009081526008602052604090205460ff16801561437357506001600160a01b03851660009081526008602052604090205460ff165b156143ea576001600160a01b03861660009081526002602052604090205461439c908590615103565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546143d091906151bd565b6001600160a01b0386166000908152600260205260409020555b60408101511561440257614402868260400151614a2a565b60008160a001511180614419575060008160200151115b1561443a578060a00151601860008282546144349190615103565b90915550505b80602001516019600082825461445091906151bd565b909155505080516040519081526001600160a01b0386811691908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600195945050505050565b602654610100900460ff16156145245760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c8e565b61452e8282613c22565b1580156145485750601b546001600160a01b038281169116145b15611136576001600160a01b0382163014156145a3576001600c60006145766000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556145c7565b6001600160a01b0382166000908152600c60205260409020805460ff191660011790555b602680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017908190556201000090046001600160a01b031661463857602680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601f80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6146e96040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6147226040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061472c613a91565b9050614738818661515b565b60808301526147478787613c22565b156147fa576026546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156147e3575060408051601f3d908101601f191682019092526147e091810190615340565b60015b6147ec57600080fd5b9050806147f857600080fd5b505b83156149d4576001600160a01b03861660009081526003602052604090205460ff161561486b576012546010805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff000000001916640100000000938490049190911690920291909117905561491c565b6001600160a01b03871660009081526003602052604090205460ff16156148d6576011546010805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff000000001916640100000000938490049190911690920291909117905561491c565b6013546010805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff00000000191664010000000093849004919091169092029190911790555b60155460105461ffff660100000000000090920482169161493e91168761515b565b61494891906151a9565b602083015260155460105461ffff66010000000000009092048216916149809164010000000081048216916201000090910416615135565b61498e9061ffff168761515b565b61499891906151a9565b6040830181905260208301516149ae91906151bd565b6149b89086615103565b825260208201516149ca90829061515b565b60a08301526149ed565b6000602083018190526040830181905285835260a08301525b8082604001516149fd919061515b565b8260a00151614a0c91906151bd565b8260800151614a1b9190615103565b60608301525095945050505050565b614a32613a91565b614a3c908261515b565b30600090815260016020526040902054614a5691906151bd565b3060009081526001602090815260408083209390935560089052205460ff1615614aa65730600090815260026020526040902054614a959082906151bd565b306000908152600260205260409020555b60405181815230906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054614af690615022565b90600052602060002090601f016020900481019282614b185760008555614b5e565b82601f10614b3157805160ff1916838001178555614b5e565b82800160010185558215614b5e579182015b82811115614b5e578251825591602001919060010190614b43565b50614b6a929150614b6e565b5090565b5b80821115614b6a5760008155600101614b6f565b600060208083528351808285015260005b81811015614bb057858101830151858201604001528201614b94565b81811115614bc2576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215614bea57600080fd5b5035919050565b6001600160a01b03811681146133b457600080fd5b8035614c1181614bf1565b919050565b60008060408385031215614c2957600080fd5b8235614c3481614bf1565b946020939093013593505050565b80151581146133b457600080fd5b60008060408385031215614c6357600080fd5b8235614c6e81614bf1565b91506020830135614c7e81614c42565b809150509250929050565b803561ffff81168114614c1157600080fd5b600080600060608486031215614cb057600080fd5b614cb984614c89565b9250614cc760208501614c89565b9150614cd560408501614c89565b90509250925092565b600080600060608486031215614cf357600080fd5b8335614cfe81614bf1565b92506020840135614d0e81614bf1565b929592945050506040919091013590565b60008060408385031215614d3257600080fd5b50508035926020909101359150565b60008060008060808587031215614d5757600080fd5b8435614d6281614c42565b93506020850135614d7281614c42565b92506040850135614d8281614c42565b91506060850135614d9281614c42565b939692955090935050565b600060208284031215614daf57600080fd5b813561157881614bf1565b60008060408385031215614dcd57600080fd5b614dd683614c89565b9150614de460208401614c89565b90509250929050565b600060208284031215614dff57600080fd5b813561157881614c42565b60008060408385031215614e1d57600080fd5b8235614e2881614bf1565b91506020830135614c7e81614bf1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e9057614e90614e38565b604052919050565b600067ffffffffffffffff821115614eb257614eb2614e38565b5060051b60200190565b600082601f830112614ecd57600080fd5b81356020614ee2614edd83614e98565b614e67565b82815260059290921b84018101918181019086841115614f0157600080fd5b8286015b84811015614f1c5780358352918301918301614f05565b509695505050505050565b600080600060608486031215614f3c57600080fd5b833567ffffffffffffffff80821115614f5457600080fd5b818601915086601f830112614f6857600080fd5b81356020614f78614edd83614e98565b82815260059290921b8401810191818101908a841115614f9757600080fd5b948201945b83861015614fbe578535614faf81614bf1565b82529482019490820190614f9c565b97505087013592505080821115614fd457600080fd5b50614fe186828701614ebc565b925050614cd560408501614c06565b6000806000806080858703121561500657600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061503657607f821691505b60208210811415615070577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015615115576151156150d4565b500390565b600060001982141561512e5761512e6150d4565b5060010190565b600061ffff808316818516808303821115615152576151526150d4565b01949350505050565b6000816000190483118215151615615175576151756150d4565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826151b8576151b861517a565b500490565b600082198211156151d0576151d06150d4565b500190565b6000602082840312156151e757600080fd5b5051919050565b600181815b8085111561522957816000190482111561520f5761520f6150d4565b8085161561521c57918102915b93841c93908002906151f3565b509250929050565b60008261524057506001610d79565b8161524d57506000610d79565b8160018114615263576002811461526d57615289565b6001915050610d79565b60ff84111561527e5761527e6150d4565b50506001821b610d79565b5060208310610133831016604e8410600b84101617156152ac575081810a610d79565b6152b683836151ee565b80600019048211156152ca576152ca6150d4565b029392505050565b600061157860ff841683615231565b6000826152f0576152f061517a565b500690565b60006020828403121561530757600080fd5b815161157881614bf1565b60008060006060848603121561532757600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561535257600080fd5b815161157881614c42565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156153ad5784516001600160a01b031683529383019391830191600101615388565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220261c9e03edd57f6a59dc21f3ec0173677392e88fc347c89c2c21651aeb40c2a664736f6c634300080a0033

Deployed ByteCode Sourcemap

6420:27997:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9205:73;;;;;;;;;;;;9236:42;9205:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;9205:73:0;;;;;;;;15539:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8896:35::-;;;;;;;;;;-1:-1:-1;8896:35:0;;;;-1:-1:-1;;;;;8896:35:0;;;21490:149;;;;;;;;;;-1:-1:-1;21490:149:0;;;;;:::i;:::-;;:::i;:::-;;16215:161;;;;;;;;;;-1:-1:-1;16215:161:0;;;;;:::i;:::-;;:::i;:::-;;;2131:14:1;;2124:22;2106:41;;2094:2;2079:18;16215:161:0;1966:187:1;8968:28:0;;;;;;;;;;-1:-1:-1;8968:28:0;;;;-1:-1:-1;;;;;8968:28:0;;;19447:1139;;;;;;;;;;-1:-1:-1;19447:1139:0;;;;;:::i;:::-;;:::i;15292:83::-;;;;;;;;;;-1:-1:-1;15365:7:0;;15292:83;;;2814:25:1;;;2802:2;2787:18;15292:83:0;2668:177:1;8518:195:0;;;;;;;;;;-1:-1:-1;8518:195:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3083:6:1;3116:15;;;3098:34;;3168:15;;;3163:2;3148:18;;3141:43;3220:15;;;3200:18;;;3193:43;;;;3272:15;;;3267:2;3252:18;;3245:43;3060:3;3045:19;8518:195:0;2850:444:1;22673:521:0;;;;;;;;;;-1:-1:-1;22673:521:0;;;;;:::i;:::-;;:::i;16882:306::-;;;;;;;;;;-1:-1:-1;16882:306:0;;;;;:::i;:::-;;:::i;23855:340::-;;;;;;;;;;-1:-1:-1;23855:340:0;;;;;:::i;:::-;;:::i;21273:209::-;;;;;;;;;;-1:-1:-1;21273:209:0;;;;;:::i;:::-;;:::i;25146:250::-;;;;;;;;;;-1:-1:-1;25146:250:0;;;;;:::i;:::-;;:::i;15381:71::-;;;;;;;;;;-1:-1:-1;15440:9:0;;15381:71;;15440:9;;;;5304:36:1;;5292:2;5277:18;15381:71:0;5162:184:1;20784:108:0;;;;;;;;;;-1:-1:-1;20784:108:0;;;;;:::i;:::-;;:::i;19299:140::-;;;;;;;;;;-1:-1:-1;19299:140:0;;;;;:::i;:::-;;:::i;17196:215::-;;;;;;;;;;-1:-1:-1;17196:215:0;;;;;:::i;:::-;;:::i;23507:340::-;;;;;;;;;;-1:-1:-1;23507:340:0;;;;;:::i;:::-;;:::i;8938:21::-;;;;;;;;;;-1:-1:-1;8938:21:0;;;;-1:-1:-1;;;;;8938:21:0;;;9681:34;;;;;;;;;;-1:-1:-1;9681:34:0;;;;;;;;13944:792;;;;;;;;;;-1:-1:-1;13944:792:0;;;;;:::i;:::-;;:::i;18759:125::-;;;;;;;;;;-1:-1:-1;18759:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;18848:28:0;18824:4;18848:28;;;:19;:28;;;;;;;;;18759:125;9722:36;;;;;;;;;;-1:-1:-1;9722:36:0;;;;;;;;;;;21651:501;;;;;;;;;;-1:-1:-1;21651:501:0;;;;;:::i;:::-;;:::i;21161:104::-;;;;;;;;;;;;;:::i;19029:134::-;;;;;;;;;;-1:-1:-1;19029:134:0;;;;;:::i;:::-;;:::i;20594:182::-;;;;;;;;;;-1:-1:-1;20594:182:0;;;;;:::i;:::-;;:::i;18892:129::-;;;;;;;;;;-1:-1:-1;18892:129:0;;;;;:::i;:::-;-1:-1:-1;;;;;18983:30:0;18959:4;18983:30;;;:21;:30;;;;;;;;;18892:129;9497:28;;;;;;;;;;;;;;;;15834:198;;;;;;;;;;-1:-1:-1;15834:198:0;;;;;:::i;:::-;;:::i;14744:195::-;;;;;;;;;;;;;:::i;7860:135::-;;;;;;;;;;-1:-1:-1;7860:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;5809:6:1;5842:15;;;5824:34;;5894:15;;;5889:2;5874:18;;5867:43;5946:15;;5926:18;;;5919:43;;;;5787:2;5772:18;7860:135:0;5603:365:1;18234:517:0;;;;;;;;;;-1:-1:-1;18234:517:0;;;;;:::i;:::-;;:::i;19171:120::-;;;;;;;;;;-1:-1:-1;19171:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19263:20:0;19239:4;19263:20;;;:11;:20;;;;;;;;;19171:120;15616:71;;;;;;;;;;-1:-1:-1;15659:7:0;13922:6;-1:-1:-1;;;;;13922:6:0;15616:71;21161:104;22160:505;;;;;;;;;;-1:-1:-1;22160:505:0;;;;;:::i;:::-;;:::i;16701:173::-;;;;;;;;;;;;;:::i;29283:517::-;;;;;;;;;;;;;:::i;15458:75::-;;;;;;;;;;;;;:::i;17419:225::-;;;;;;;;;;-1:-1:-1;17419:225:0;;;;;:::i;:::-;;:::i;16040:167::-;;;;;;;;;;-1:-1:-1;16040:167:0;;;;;:::i;:::-;;:::i;23202:297::-;;;;;;;;;;-1:-1:-1;23202:297:0;;;;;:::i;:::-;;:::i;8149:140::-;;;;;;;;;;-1:-1:-1;8149:140:0;;;;;;;;;;;;;;;;;;;;;;8004:136;;;;;;;;;;-1:-1:-1;8004:136:0;;;;;;;;;;;;;;;;;;;;;;21035:118;;;;;;;;;;-1:-1:-1;21035:118:0;;;;;:::i;:::-;;:::i;24642:165::-;;;;;;;;;;-1:-1:-1;24642:165:0;;;;;:::i;:::-;;:::i;8298:211::-;;;;;;;;;;-1:-1:-1;8298:211:0;;;;;;;;;;;;;;;;;;;;;;15693:133;;;;;;;;;;-1:-1:-1;15693:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15795:19:0;;;15777:7;15795:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15693:133;11074:2193;;;;;;;;;;-1:-1:-1;11074:2193:0;;;;;:::i;:::-;;:::i;17652:574::-;;;;;;;;;;-1:-1:-1;17652:574:0;;;;;:::i;:::-;;:::i;24500:134::-;;;;;;;;;;-1:-1:-1;24500:134:0;;;;;:::i;:::-;;:::i;34231:183::-;;;;;;;;;;;;;:::i;9571:30::-;;;;;;;;;;;;;;;;24203:289;;;;;;;;;;-1:-1:-1;24203:289:0;;;;;:::i;:::-;;:::i;9410:39::-;;;;;;;;;;-1:-1:-1;9410:39:0;;;;;;;;;;;20902:125;;;;;;;;;;-1:-1:-1;20902:125:0;;;;;:::i;:::-;;:::i;15539:71::-;15578:13;15602:5;15595:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15539:71;:::o;21490:149::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;;;;;;;;;21574:2:::1;21567:3;:9;;21559:30;;;::::0;-1:-1:-1;;;21559:30:0;;11190:2:1;21559:30:0::1;::::0;::::1;11172:21:1::0;11229:1;11209:18;;;11202:29;11267:10;11247:18;;;11240:38;11295:18;;21559:30:0::1;10988:331:1::0;21559:30:0::1;21600:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;2814:25:1::0;;;21600:9:0;;;::::1;-1:-1:-1::0;;;;;21600:9:0::1;::::0;:26:::1;::::0;2787:18:1;;21600:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21490:149:::0;:::o;16215:161::-;16290:4;16307:39;189:10;16330:7;16339:6;16307:8;:39::i;:::-;-1:-1:-1;16364:4:0;16215:161;;;;;:::o;19447:1139::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;19552:4:::1;19541:15:::0;::::1;;;19537:1042;;;-1:-1:-1::0;;;;;19582:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19581:21;19573:62;;;::::0;-1:-1:-1;;;19573:62:0;;11526:2:1;19573:62:0::1;::::0;::::1;11508:21:1::0;11565:2;11545:18;;;11538:30;11604;11584:18;;;11577:58;11652:18;;19573:62:0::1;11324:352:1::0;19573:62:0::1;-1:-1:-1::0;;;;;19653:16:0;::::1;19672:1;19653:16:::0;;;:7:::1;:16;::::0;;;;;:20;19650:116:::1;;-1:-1:-1::0;;;;;19733:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;19713:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;19694:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;19650:116:::1;-1:-1:-1::0;;;;;;19780:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;19780:27:0::1;19803:4;19780:27:::0;;::::1;::::0;;;19822:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;19822:23:0::1;::::0;;::::1;::::0;;19447:1139::o;19537:1042::-:1;19867:16:::0;19863:716:::1;;-1:-1:-1::0;;;;;19908:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19900:61;;;::::0;-1:-1:-1;;;19900:61:0;;11883:2:1;19900:61:0::1;::::0;::::1;11865:21:1::0;11922:2;11902:18;;;11895:30;11961;11941:18;;;11934:58;12009:18;;19900:61:0::1;11681:352:1::0;19900:61:0::1;19979:9;:16:::0;19999:1:::1;19979:21;19976:592;;;-1:-1:-1::0;;;;;20020:16:0;::::1;20039:1;20020:16:::0;;;:7:::1;:16;::::0;;;;;;;:20;;;20059:11:::1;:20:::0;;;;;:28;;-1:-1:-1;;20059:28:0::1;::::0;;20106:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20106:15:0;;;;;-1:-1:-1;;20106:15:0::1;::::0;;;;;19447:1139;;:::o;19976:592::-:1;20167:9;20162:391;20186:9;:16:::0;20182:20;::::1;20162:391;;;20252:7;-1:-1:-1::0;;;;;20236:23:0::1;:9;20246:1;20236:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;20236:12:0::1;:23;20232:302;;;20303:9;20313:16:::0;;:20:::1;::::0;20332:1:::1;::::0;20313:20:::1;:::i;:::-;20303:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;20288:9:::1;:12:::0;;-1:-1:-1;;;;;20303:31:0;;::::1;::::0;20298:1;;20288:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;20288:46:0::1;-1:-1:-1::0;;;;;20288:46:0;;::::1;;::::0;;20361:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;20408:11:::1;:20:::0;;;;:28;;-1:-1:-1;;20408:28:0::1;::::0;;20463:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20463:15:0;;;;;-1:-1:-1;;20463:15:0::1;::::0;;;;;20505:5:::1;;20232:302;20204:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20162:391;;;;19976:592;19447:1139:::0;;:::o;22673:521::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;22812:10:::1;:24:::0;::::1;::::0;;::::1;22798:38:::0;;::::1;;::::0;::::1;::::0;:101:::1;;-1:-1:-1::0;22873:10:0::1;:26:::0;::::1;::::0;;;::::1;::::0;::::1;22857:42:::0;;::::1;;;22798:101;:164;;;;-1:-1:-1::0;22936:10:0::1;:26:::0;::::1;::::0;;;::::1;::::0;::::1;22920:42:::0;;::::1;;;22798:164;22790:173;;;::::0;::::1;;23026:4;23010:12:::0;22982:25:::1;22997:10:::0;22982:12;:25:::1;:::i;:::-;:40;;;;:::i;:::-;:48;;;;22974:57;;;::::0;::::1;;23042:14;:42:::0;;::::1;23144::::0;;::::1;::::0;::::1;::::0;23042;;::::1;::::0;::::1;23144::::0;;;;;;;;;23095:38;;;::::1;23144:42:::0;;;;::::1;::::0;;22673:521::o;16882:306::-;-1:-1:-1;;;;;17003:19:0;;16982:4;17003:19;;;:11;:19;;;;;;;;17023:10;17003:31;;;;;;;;-1:-1:-1;;17003:52:0;16999:126;;-1:-1:-1;;;;;17072:19:0;;;;;;:11;:19;;;;;;;;17092:10;17072:31;;;;;;;:41;;17107:6;;17072:19;:41;;17107:6;;17072:41;:::i;:::-;;;;-1:-1:-1;;16999:126:0;17144:36;17154:6;17162:9;17173:6;17144:9;:36::i;:::-;17137:43;16882:306;-1:-1:-1;;;;16882:306:0:o;23855:340::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;23945:13:::1;23983:7;23972;23962;;:17;;;;:::i;:::-;23961:29;;;;:::i;:::-;23945:45;;24029:4;24019:7;;:14;;;;:::i;:::-;24009:5;:25;;24001:88;;;::::0;-1:-1:-1;;;24001:88:0;;13913:2:1;24001:88:0::1;::::0;::::1;13895:21:1::0;13952:2;13932:18;;;13925:30;13991:34;13971:18;;;13964:62;14062:20;14042:18;;;14035:48;14100:19;;24001:88:0::1;13711:414:1::0;24001:88:0::1;24100:14;:22:::0;;;24152:14:::1;::::0;24180:7;;24152:24:::1;::::0;24169:7;;24152:24:::1;:::i;:::-;24151:36;;;;:::i;:::-;24133:15;:54:::0;-1:-1:-1;;;23855:340:0:o;21273:209::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;21402:9:::1;::::0;:72:::1;::::0;;;;14362:14:1;;14355:22;21402:72:0::1;::::0;::::1;14337:41:1::0;14421:14;;14414:22;14394:18;;;14387:50;14480:14;;14473:22;14453:18;;;14446:50;14539:14;;14532:22;14512:18;;;14505:50;21402:9:0;;;::::1;-1:-1:-1::0;;;;;21402:9:0::1;::::0;:24:::1;::::0;14309:19:1;;21402:72:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21273:209:::0;;;;:::o;25146:250::-;25212:7;25251;;25240;:18;;25232:73;;;;-1:-1:-1;;;25232:73:0;;14768:2:1;25232:73:0;;;14750:21:1;14807:2;14787:18;;;14780:30;14846:34;14826:18;;;14819:62;14917:12;14897:18;;;14890:40;14947:19;;25232:73:0;14566:406:1;25232:73:0;25316:19;25339:10;:8;:10::i;:::-;25316:33;-1:-1:-1;25367:21:0;25316:33;25367:7;:21;:::i;:::-;25360:28;25146:250;-1:-1:-1;;;25146:250:0:o;20784:108::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;20853:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;20853:31:0::1;::::0;::::1;160:74:1::0;20853:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;20853:31:0::1;14:226:1::0;19299:140:0;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;-1:-1:-1;;;;;19391:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;19391:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19299:140::o;17196:215::-;189:10;17284:4;17333:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17333:34:0;;;;;;;;;;17284:4;;17301:80;;17324:7;;17333:47;;17370:10;;17333:47;:::i;:::-;17301:8;:80::i;23507:340::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;23596:13:::1;23634:7;23623;23613;;:17;;;;:::i;:::-;23612:29;;;;:::i;:::-;23596:45;;23680:4;23670:7;;:14;;;;:::i;:::-;23660:5;:25;;23652:93;;;::::0;-1:-1:-1;;;23652:93:0;;15312:2:1;23652:93:0::1;::::0;::::1;15294:21:1::0;15351:2;15331:18;;;15324:30;15390:34;15370:18;;;15363:62;15461:25;15441:18;;;15434:53;15504:19;;23652:93:0::1;15110:419:1::0;23652:93:0::1;23756:12;:20:::0;;;23804:14:::1;::::0;23832:7;;23804:24:::1;::::0;23821:7;;23804:24:::1;:::i;:::-;23803:36;;;;:::i;:::-;23787:13;:52:::0;-1:-1:-1;;;23507:340:0:o;13944:792::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;-1:-1:-1;;;;;14023:22:0;::::1;14015:96;;;::::0;-1:-1:-1;;;14015:96:0;;15736:2:1;14015:96:0::1;::::0;::::1;15718:21:1::0;15775:2;15755:18;;;15748:30;15814:34;15794:18;;;15787:62;15885:31;15865:18;;;15858:59;15934:19;;14015:96:0::1;15534:425:1::0;14015:96:0::1;-1:-1:-1::0;;;;;14130:16:0;::::1;9236:42;14130:16;;14122:90;;;::::0;-1:-1:-1;;;14122:90:0;;15736:2:1;14122:90:0::1;::::0;::::1;15718:21:1::0;15775:2;15755:18;;;15748:30;15814:34;15794:18;;;15787:62;15885:31;15865:18;;;15858:59;15934:19;;14122:90:0::1;15534:425:1::0;14122:90:0::1;14243:6;::::0;;14223:34:::1;::::0;-1:-1:-1;;;;;14243:6:0;;::::1;::::0;14223:19:::1;:34::i;:::-;14268:35;14288:8;14298:4;14268:19;:35::i;:::-;14318:14;::::0;::::1;;14314:83;;;14348:37;14370:8;14380:4;14348:21;:37::i;:::-;14449:6;::::0;14421:16:::1;::::0;-1:-1:-1;;;;;14421:16:0;;::::1;14449:6:::0;::::1;14421:35;14417:90;;;14471:16;:36:::0;;-1:-1:-1;;14471:36:0::1;-1:-1:-1::0;;;;;14471:36:0;::::1;;::::0;;14417:90:::1;14551:1;14541:6:::0;;14531:17:::1;::::0;-1:-1:-1;;;;;14541:6:0::1;14531:9;:17::i;:::-;:21;14528:99;;;14579:6;::::0;14569:46:::1;::::0;-1:-1:-1;;;;;14579:6:0::1;14587:8:::0;14597:17:::1;14579:6:::0;14597:9:::1;:17::i;:::-;14569:9;:46::i;:::-;;14528:99;14647:6;:17:::0;;-1:-1:-1;;14647:17:0::1;-1:-1:-1::0;;;;;14647:17:0;::::1;::::0;;::::1;::::0;;14680:38:::1;::::0;14647:17;;;;14680:38:::1;::::0;14647:6;14680:38:::1;13944:792:::0;:::o;21651:501::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;21785:10:::1;:24:::0;::::1;::::0;;::::1;21771:38:::0;;::::1;;::::0;::::1;::::0;:101:::1;;-1:-1:-1::0;21846:10:0::1;:26:::0;::::1;::::0;;;::::1;::::0;::::1;21830:42:::0;;::::1;;;21771:101;:164;;;;-1:-1:-1::0;21909:10:0::1;:26:::0;::::1;::::0;;;::::1;::::0;::::1;21893:42:::0;;::::1;;;21771:164;21763:173;;;::::0;::::1;;21999:4;21983:12:::0;21955:25:::1;21970:10:::0;21955:12;:25:::1;:::i;:::-;:40;;;;:::i;:::-;:48;;;;21947:57;;;::::0;::::1;;22015:9;:37:::0;;::::1;22107::::0;;::::1;::::0;::::1;::::0;22015;;::::1;::::0;::::1;22107::::0;;;;;;;;;22063:33;;;::::1;22107:37:::0;;;;::::1;::::0;;21651:501::o;21161:104::-;21206:7;21233:9;;;;;;;;;-1:-1:-1;;;;;21233:9:0;-1:-1:-1;;;;;21233:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21226:31;;21161:104;:::o;19029:134::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;-1:-1:-1;;;;;19117:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;19117:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19029:134::o;20594:182::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;20678:16:::1;::::0;::::1;::::0;::::1;;;20677:17;20669:54;;;::::0;-1:-1:-1;;;20669:54:0;;16355:2:1;20669:54:0::1;::::0;::::1;16337:21:1::0;16394:2;16374:18;;;16367:30;16433:26;16413:18;;;16406:54;16477:18;;20669:54:0::1;16153:348:1::0;20669:54:0::1;20734:9;:34:::0;;-1:-1:-1;;;;;20734:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;20594:182::o;15834:198::-;-1:-1:-1;;;;;15924:20:0;;15900:7;15924:20;;;:11;:20;;;;;;;;15920:49;;;-1:-1:-1;;;;;;15953:16:0;;;;;:7;:16;;;;;;;15834:198::o;15920:49::-;-1:-1:-1;;;;;16007:16:0;;;;;;:7;:16;;;;;;15987:37;;:19;:37::i;14744:195::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;14831:6:::1;::::0;;14811:34:::1;::::0;-1:-1:-1;;;;;14831:6:0;;::::1;::::0;14811:19:::1;:34::i;:::-;14873:1;14856:19:::0;;-1:-1:-1;;14856:19:0::1;::::0;;14891:40:::1;::::0;14873:1;;14891:40:::1;::::0;14873:1;;14891:40:::1;14744:195::o:0;18234:517::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;18315:16;18311:433:::1;;-1:-1:-1::0;;;;;18348:13:0;;::::1;18364:5;18348:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;18348:21:0::1;::::0;;18384:9:::1;::::0;:32;;;;;::::1;::::0;::::1;16674:74:1::0;;;;16764:18;;;16757:50;;;;18384:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;16647:18:1;;18384:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19447:1139:::0;;:::o;18311:433::-:1;18453:17;::::0;:22;18449:153:::1;;18542:7;18522:17;;18504:15;:35;;;;:::i;:::-;:45;18496:90;;;::::0;-1:-1:-1;;;18496:90:0;;17020:2:1;18496:90:0::1;::::0;::::1;17002:21:1::0;;;17039:18;;;17032:30;17098:34;17078:18;;;17071:62;17150:18;;18496:90:0::1;16818:356:1::0;18496:90:0::1;-1:-1:-1::0;;;;;18616:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;18616:20:0::1;18632:4;18616:20:::0;;::::1;::::0;;;18671:15:::1;18651:17;:35:::0;;;18701:9:::1;::::0;:31;;;;;;;::::1;16674:74:1::0;;;;16764:18;;;16757:50;18701:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;16647:18:1;;18701:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;22160:505:::0;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;22295:10:::1;:24:::0;::::1;::::0;;::::1;22281:38:::0;;::::1;;::::0;::::1;::::0;:101:::1;;-1:-1:-1::0;22356:10:0::1;:26:::0;::::1;::::0;;;::::1;::::0;::::1;22340:42:::0;;::::1;;;22281:101;:164;;;;-1:-1:-1::0;22419:10:0::1;:26:::0;::::1;::::0;;;::::1;::::0;::::1;22403:42:::0;;::::1;;;22281:164;22273:173;;;::::0;::::1;;22509:4;22493:12:::0;22465:25:::1;22480:10:::0;22465:12;:25:::1;:::i;:::-;:40;;;;:::i;:::-;:48;;;;22457:57;;;::::0;::::1;;22525:10;:38:::0;;::::1;22619::::0;;::::1;::::0;::::1;::::0;22525;;::::1;::::0;::::1;22619::::0;;;;;;;;;22574:34;;;::::1;22619:38:::0;;;;::::1;::::0;;22160:505::o;16701:173::-;16765:4;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;16814:9:::1;::::0;16782:62:::1;::::0;16799:4:::1;::::0;-1:-1:-1;;;;;16814:9:0::1;-1:-1:-1::0;;16782:8:0::1;:62::i;:::-;-1:-1:-1::0;16862:4:0::1;16701:173:::0;:::o;29283:517::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;29345:14:::1;::::0;::::1;;29344:15;29336:52;;;::::0;-1:-1:-1;;;29336:52:0;;17381:2:1;29336:52:0::1;::::0;::::1;17363:21:1::0;17420:2;17400:18;;;17393:30;17459:26;17439:18;;;17432:54;17503:18;;29336:52:0::1;17179:348:1::0;29336:52:0::1;29407:16;::::0;::::1;::::0;::::1;;;29399:53;;;::::0;-1:-1:-1;;;29399:53:0;;17734:2:1;29399:53:0::1;::::0;::::1;17716:21:1::0;17773:2;17753:18;;;17746:30;17812:26;17792:18;;;17785:54;17856:18;;29399:53:0::1;17532:348:1::0;29399:53:0::1;29463:42;29493:4;29500;29463:21;:42::i;:::-;29538:6;::::0;29516:35:::1;::::0;-1:-1:-1;;;;;29538:6:0::1;::::0;29516:21:::1;:35::i;:::-;29573:9;::::0;;;::::1;-1:-1:-1::0;;;;;29573:9:0::1;29562:99;;29613:9;:36:::0;;;::::1;29643:4;29613:36:::0;::::1;;::::0;;29562:99:::1;29675:9;::::0;29695:6:::1;::::0;29675:74:::1;::::0;;;;-1:-1:-1;;;;;29695:6:0;;::::1;29675:74;::::0;::::1;18083::1::0;18205:10;29710:12:0::1;18193:23:1::0;18173:18;;;18166:51;18265:18;29732:15:0::1;18253:31:1::0;18233:18;;;18226:59;29675:9:0;;;::::1;;::::0;:19:::1;::::0;18056:18:1;;29675:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;29671:90:::0;29771:14:::1;:21:::0;;-1:-1:-1;;29771:21:0::1;29788:4;29771:21;::::0;;29283:517::o;15458:75::-;15499:13;15523:7;15516:14;;;;;:::i;17419:225::-;189:10;17512:4;17561:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17561:34:0;;;;;;;;;;17512:4;;17529:85;;17552:7;;17561:52;;17598:15;;17561:52;:::i;16040:167::-;16118:4;16135:42;189:10;16159:9;16170:6;16135:9;:42::i;:::-;-1:-1:-1;16195:4:0;;16040:167;-1:-1:-1;;;16040:167:0:o;23202:297::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;23296:21:::1;23308:9:::0;23296;:21:::1;:::i;:::-;:28;;23321:3;23296:28;23287:61;;;::::0;-1:-1:-1;;;23287:61:0;;18498:2:1;23287:61:0::1;::::0;::::1;18480:21:1::0;18537:2;18517:18;;;18510:30;18576:21;18556:18;;;18549:49;18615:18;;23287:61:0::1;18296:343:1::0;23287:61:0::1;23359:7;:34:::0;;::::1;23404::::0;;::::1;::::0;::::1;-1:-1:-1::0;;23404:34:0;;;23359;;::::1;23404::::0;::::1;::::0;;23470:21:::1;23429:9:::0;23384;23470:21:::1;:::i;:::-;23449:7;:42:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;23449:42:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;23202:297:0:o;21035:118::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;21109:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;21109:36:0::1;::::0;::::1;160:74:1::0;21109:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;21109:36:0::1;14:226:1::0;24642:165:0;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;24717:19:::1;:30:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;24763:36:::1;::::0;::::1;::::0;::::1;::::0;24739:8;2131:14:1;2124:22;2106:41;;2094:2;2079:18;;1966:187;24763:36:0::1;;;;;;;;24642:165:::0;:::o;11074:2193::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;11211:19:::1;::::0;;;::::1;;;11210:20;11202:34;;;::::0;-1:-1:-1;;;11202:34:0;;18846:2:1;11202:34:0::1;::::0;::::1;18828:21:1::0;18885:1;18865:18;;;18858:29;18923:3;18903:18;;;18896:31;18944:18;;11202:34:0::1;18644:324:1::0;11202:34:0::1;11273:3;11255:8;:15;:21;11247:35;;;::::0;-1:-1:-1;;;11247:35:0;;19175:2:1;11247:35:0::1;::::0;::::1;19157:21:1::0;19214:1;19194:18;;;19187:29;19252:3;19232:18;;;19225:31;19273:18;;11247:35:0::1;18973:324:1::0;11247:35:0::1;11320:7;:14;11301:8;:15;:33;11293:47;;;::::0;-1:-1:-1;;;11293:47:0;;19504:2:1;11293:47:0::1;::::0;::::1;19486:21:1::0;19543:1;19523:18;;;19516:29;19581:3;19561:18;;;19554:31;19602:18;;11293:47:0::1;19302:324:1::0;11293:47:0::1;11353:19;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:5:::1;::::0;:19:::1;:::i;:::-;-1:-1:-1::0;11383:15:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:15:::1;:::i;:::-;-1:-1:-1::0;11426:21:0::1;11409:14;:38:::0;11554:9:::1;:13:::0;;-1:-1:-1;;11554:13:0::1;11566:1;11554:13;::::0;;11621:9:::1;::::0;11617:13:::1;::::0;11621:9:::1;;11617:2;:13;:::i;:::-;11599:14;;:32;;;;:::i;:::-;11589:7;:42:::0;;;11660:13:::1;::::0;-1:-1:-1;;11660:13:0::1;:::i;:::-;11653:21;::::0;-1:-1:-1;;11653:21:0::1;:::i;:::-;11642:7;:33:::0;11719:13:::1;::::0;11688:9:::1;:45:::0;;-1:-1:-1;;11688:45:0::1;-1:-1:-1::0;;;;;11719:13:0;;::::1;11688:45:::0;;::::1;::::0;;11771:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;11719:13;11771:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11753:49:0::1;;11803:9;;;;;;;;;-1:-1:-1::0;;;;;11803:9:0::1;-1:-1:-1::0;;;;;11803:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11753:82;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21760:15:1;;;11753:82:0::1;::::0;::::1;21742:34:1::0;11829:4:0::1;21792:18:1::0;;;21785:43;21654:18;;11753:82:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11744:6;:91:::0;;-1:-1:-1;;11744:91:0::1;-1:-1:-1::0;;;;;11744:91:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;11846:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;11846:22:0::1;-1:-1:-1::0;11846:22:0::1;::::0;;11960:7:::1;::::0;11899:1:::1;::::0;11929:4:::1;::::0;;;11960:17:::1;::::0;11899:1;;11960:17:::1;:::i;:::-;11959:29;;;;:::i;:::-;11944:12;:44:::0;12016:14:::1;::::0;12044:7;;12016:24:::1;::::0;12033:7;;12016:24:::1;:::i;:::-;12015:36;;;;:::i;:::-;11999:13;:52:::0;-1:-1:-1;;12129:7:0::1;::::0;12072:2:::1;::::0;12095:5:::1;::::0;;;12129:17:::1;::::0;12072:2;;12129:17:::1;:::i;:::-;12128:29;;;;:::i;:::-;12111:14;:46:::0;12187:14:::1;::::0;12215:7;;12187:24:::1;::::0;12204:7;;12187:24:::1;:::i;:::-;12186:36;;;;:::i;:::-;12168:15;:54:::0;12250:7:::1;::::0;12265:5:::1;::::0;12250:11:::1;::::0;12260:1:::1;12250:11;:::i;:::-;12249:21;;;;:::i;:::-;12233:13;:37:::0;12295:7:::1;::::0;12310:4:::1;::::0;12295:11:::1;::::0;12305:1:::1;12295:11;:::i;:::-;12294:20;;;;:::i;:::-;12281:10;:33:::0;12336:9:::1;::::0;;;::::1;-1:-1:-1::0;;;;;12336:9:0::1;12325:99;;12376:9;:36:::0;;;::::1;12406:4;12376:36:::0;::::1;;::::0;;12325:99:::1;12434:19;:26:::0;;;::::1;::::0;::::1;::::0;;12495:7:::1;::::0;12456:4:::1;12434:26:::0;12484:7:::1;13895::::0;13922:6;-1:-1:-1;;;;;13922:6:0;;13857:79;12484:7:::1;-1:-1:-1::0;;;;;12476:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12476:16:0;:26;12539:7:::1;13895::::0;13922:6;-1:-1:-1;;;;;13922:6:0;;13857:79;12539:7:::1;-1:-1:-1::0;;;;;12518:38:0::1;12535:1;-1:-1:-1::0;;;;;12518:38:0::1;;12548:7;;12518:38;;;;2814:25:1::0;;2802:2;2787:18;;2668:177;12518:38:0::1;;;;;;;;12601:9;::::0;12569:62:::1;::::0;12586:4:::1;::::0;-1:-1:-1;;;;;12601:9:0::1;-1:-1:-1::0;;12569:8:0::1;:62::i;:::-;12648:9;12644:204;12667:8;:15;12663:1;:19;12644:204;;;12703:14;12720:8;12729:1;12720:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;12778:9:::1;::::0;12720:11;;-1:-1:-1;12746:14:0::1;::::0;12774:13:::1;::::0;12778:9:::1;;12774:2;:13;:::i;:::-;12763:7;12771:1;12763:10;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;12746:41;;12802:34;12812:7;13895::::0;13922:6;-1:-1:-1;;;;;13922:6:0;;13857:79;12812:7:::1;12821:6;12829;12802:9;:34::i;:::-;;12688:160;;12684:3;;;;;:::i;:::-;;;;12644:204;;;;12860:53;12870:7;13895::::0;13922:6;-1:-1:-1;;;;;13922:6:0;;13857:79;12870:7:::1;12887:4;12894:18;12904:7;13895::::0;13922:6;-1:-1:-1;;;;;13922:6:0;;13857:79;12860:53:::1;-1:-1:-1::0;12926:9:0::1;::::0;-1:-1:-1;;;;;12926:9:0::1;:25;12959:21;13004:4;13024:24;13004:4:::0;13024:9:::1;:24::i;:::-;13063:1;13106::::0;13149:7:::1;13895::::0;13922:6;-1:-1:-1;;;;;13922:6:0;;13857:79;13149:7:::1;12926:271;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;22221:15:1;;;12926:271:0::1;::::0;::::1;22203:34:1::0;22253:18;;;22246:34;;;;22296:18;;;22289:34;;;;22339:18;;;22332:34;22403:15;;;22382:19;;;22375:44;13171:15:0::1;22435:19:1::0;;;22428:35;22114:19;;12926:271:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13210:15;:13;:15::i;:::-;13236:23;13250:8;13236:13;:23::i;17652:574::-:0;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;17723:29:::1;17774:9;17723:61;;17795:16;17832:10;-1:-1:-1::0;;;;;17832:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17814:47:0::1;;17870:4;17877:10;-1:-1:-1::0;;;;;17877:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17814:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21760:15:1;;;17814:81:0::1;::::0;::::1;21742:34:1::0;21812:15;;21792:18;;;21785:43;21654:18;;17814:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17795:100:::0;-1:-1:-1;;;;;;17910:22:0;::::1;17906:207;;17976:10;-1:-1:-1::0;;;;;17976:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17958:50:0::1;;18017:4;18024:10;-1:-1:-1::0;;;;;18024:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17958:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21760:15:1;;;17958:84:0::1;::::0;::::1;21742:34:1::0;21812:15;;21792:18;;;21785:43;21654:18;;17958:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17949:6;:93:::0;;-1:-1:-1;;17949:93:0::1;-1:-1:-1::0;;;;;17949:93:0;;;::::1;::::0;;;::::1;::::0;;17906:207:::1;;;18084:6;:17:::0;;-1:-1:-1;;18084:17:0::1;-1:-1:-1::0;;;;;18084:17:0;::::1;;::::0;;17906:207:::1;18123:9;:22:::0;;-1:-1:-1;;18123:22:0::1;-1:-1:-1::0;;;;;18123:22:0;::::1;::::0;;::::1;::::0;;;18156:62:::1;::::0;18173:4:::1;::::0;-1:-1:-1;;18156:8:0::1;:62::i;24500:134::-:0;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;24583:16:::1;:43:::0;;-1:-1:-1;;24583:43:0::1;-1:-1:-1::0;;;;;24583:43:0;;;::::1;::::0;;;::::1;::::0;;24500:134::o;34231:183::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;34298:16:::1;::::0;::::1;::::0;::::1;;;34297:17;34289:58;;;::::0;-1:-1:-1;;;34289:58:0;;22987:2:1;34289:58:0::1;::::0;::::1;22969:21:1::0;23026:2;23006:18;;;22999:30;23065;23045:18;;;23038:58;23113:18;;34289:58:0::1;22785:352:1::0;34289:58:0::1;13895:7:::0;13922:6;;34358:48:::1;::::0;-1:-1:-1;;;;;13922:6:0;;;;34384:21:::1;34358:48:::0;::::1;;;::::0;34384:21;;34358:48;13895:7;34358:48;34384:21;13922:6;34358:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;34231:183::o:0;24203:289::-;10329:6;;-1:-1:-1;;;;;10329:6:0;189:10;10329:22;10321:52;;;;-1:-1:-1;;;10321:52:0;;10844:2:1;10321:52:0;;;10826:21:1;10883:2;10863:18;;;10856:30;-1:-1:-1;;;10902:18:1;;;10895:47;10959:18;;10321:52:0;10642:341:1;10321:52:0;24403:16:::1;24383;24373:7;;:26;;;;:::i;:::-;24372:47;;;;:::i;:::-;24356:13;:63:::0;24444:7:::1;::::0;24471:13;;24444:23:::1;::::0;24454:13;;24444:23:::1;:::i;:::-;24443:41;;;;:::i;:::-;24430:10;:54:::0;-1:-1:-1;;;;24203:289:0:o;20902:125::-;20987:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;20987:32:0;;;160:74:1;20963:4:0;;20987:9;;;;;:23;;133:18:1;;20987:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16384:309::-;-1:-1:-1;;;;;16478:20:0;;16470:52;;;;-1:-1:-1;;;16470:52:0;;23594:2:1;16470:52:0;;;23576:21:1;23633:2;23613:18;;;23606:30;23672:21;23652:18;;;23645:49;23711:18;;16470:52:0;23392:343:1;16470:52:0;-1:-1:-1;;;;;16541:21:0;;16533:53;;;;-1:-1:-1;;;16533:53:0;;23594:2:1;16533:53:0;;;23576:21:1;23633:2;23613:18;;;23606:30;23672:21;23652:18;;;23645:49;23711:18;;16533:53:0;23392:343:1;16533:53:0;-1:-1:-1;;;;;16599:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;16652:33;;2814:25:1;;;16652:33:0;;2787:18:1;16652:33:0;;;;;;;16384:309;;;:::o;25404:1649::-;25483:4;-1:-1:-1;;;;;25508:18:0;;25500:68;;;;-1:-1:-1;;;25500:68:0;;23942:2:1;25500:68:0;;;23924:21:1;23981:2;23961:18;;;23954:30;24020:34;24000:18;;;23993:62;24091:7;24071:18;;;24064:35;24116:19;;25500:68:0;23740:401:1;25500:68:0;-1:-1:-1;;;;;25587:16:0;;25579:64;;;;-1:-1:-1;;;25579:64:0;;24348:2:1;25579:64:0;;;24330:21:1;24387:2;24367:18;;;24360:30;24426:34;24406:18;;;24399:62;24497:5;24477:18;;;24470:33;24520:19;;25579:64:0;24146:399:1;25579:64:0;25671:1;25662:6;:10;25654:64;;;;-1:-1:-1;;;25654:64:0;;24752:2:1;25654:64:0;;;24734:21:1;24791:2;24771:18;;;24764:30;24830:34;24810:18;;;24803:62;24901:11;24881:18;;;24874:39;24930:19;;25654:64:0;24550:405:1;25654:64:0;25732:20;25743:4;25749:2;25732:10;:20::i;:::-;25729:659;;;25773:14;;;;25769:89;;25808:34;;-1:-1:-1;;;25808:34:0;;25162:2:1;25808:34:0;;;25144:21:1;25201:2;25181:18;;;25174:30;25240:26;25220:18;;;25213:54;25284:18;;25808:34:0;24960:348:1;25769:89:0;-1:-1:-1;;;;;25875:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;25892:11:0;;;;;;:7;:11;;;;;;;;25875:28;25872:248;;;-1:-1:-1;;;;;25929:25:0;;;;;;:21;:25;;;;;;;;;:56;;-1:-1:-1;;;;;;25958:27:0;;;;;;:21;:27;;;;;;;;25929:56;25923:182;;26028:12;;26018:6;:22;;26010:75;;;;-1:-1:-1;;;26010:75:0;;25515:2:1;26010:75:0;;;25497:21:1;25554:2;25534:18;;;25527:30;25593:34;25573:18;;;25566:62;25664:10;25644:18;;;25637:38;25692:19;;26010:75:0;25313:404:1;26010:75:0;26143:13;;-1:-1:-1;;;;;26137:19:0;;;26143:13;;26137:19;;;;:35;;-1:-1:-1;;;;;;26161:11:0;;;;;;:7;:11;;;;;;;;26160:12;26137:35;26134:243;;;-1:-1:-1;;;;;26197:25:0;;;;;;:21;:25;;;;;;;;26193:169;;26281:14;;26271:6;26255:13;26265:2;26255:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;26247:95;;;;-1:-1:-1;;;26247:95:0;;25924:2:1;26247:95:0;;;25906:21:1;25963:2;25943:18;;;25936:30;26002:34;25982:18;;;25975:62;26073:12;26053:18;;;26046:40;26103:19;;26247:95:0;25722:406:1;26247:95:0;-1:-1:-1;;;;;26433:25:0;;26400:12;26433:25;;;:19;:25;;;;;;26415:4;;26433:25;;;:52;;-1:-1:-1;;;;;;26462:23:0;;;;;;:19;:23;;;;;;;;26433:52;26430:98;;;-1:-1:-1;26511:5:0;26430:98;-1:-1:-1;;;;;26544:11:0;;;;;;:7;:11;;;;;;;;26540:443;;;26577:6;;;;;;;26576:7;:47;;;;-1:-1:-1;26604:19:0;;;;;;;26576:47;26572:394;;;26658:28;26689:24;26707:4;26689:9;:24::i;:::-;26658:55;;26760:13;;26736:20;:37;26732:219;;26825:10;;26801:20;:34;26798:77;;-1:-1:-1;26862:10:0;;26798:77;26897:34;26910:20;26897:12;:34::i;:::-;26639:327;26572:394;27001:44;27019:4;27025:2;27029:6;27037:7;27001:17;:44::i;:::-;26994:51;25404:1649;-1:-1:-1;;;;;25404:1649:0:o;33311:525::-;33390:7;;33426;;33352;;33390;33352;33444:282;33468:9;:16;33464:20;;33444:282;;;33534:7;33510;:21;33518:9;33528:1;33518:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33518:12:0;33510:21;;;;;;;;;;;;;:31;;:66;;;33569:7;33545;:21;33553:9;33563:1;33553:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33553:12:0;33545:21;;;;;;;;;;;;;:31;33510:66;33506:96;;;33595:7;;33585;;:17;;;;:::i;:::-;33578:24;;;;;33311:525;:::o;33506:96::-;33637:7;:21;33645:9;33655:1;33645:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33645:12:0;33637:21;;;;;;;;;;;;;33627:31;;:7;:31;:::i;:::-;33617:41;;33693:7;:21;33701:9;33711:1;33701:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33701:12:0;33693:21;;;;;;;;;;;;;33683:31;;:7;:31;:::i;:::-;33673:41;-1:-1:-1;33486:3:0;;;;:::i;:::-;;;;33444:282;;;;33760:7;;33750;;:17;;;;:::i;:::-;33740:7;:27;33736:57;;;33786:7;;33776;;:17;;;;:::i;:::-;33769:24;;;;33311:525;:::o;33736:57::-;33811:17;33821:7;33811;:17;:::i;24815:323::-;24883:4;13922:6;;-1:-1:-1;;;;;24907:15:0;;;13922:6;;24907:15;;;;:45;;-1:-1:-1;13895:7:0;13922:6;-1:-1:-1;;;;;24939:13:0;;;13922:6;;24939:13;;24907:45;:84;;;;-1:-1:-1;;;;;;24970:21:0;;;;;;:17;:21;;;;;;;;24969:22;24907:84;:125;;;;-1:-1:-1;;;;;;25009:23:0;;;;;;:17;:23;;;;;;;;25008:24;24907:125;:152;;;;-1:-1:-1;;;;;;25049:10:0;;9236:42;25049:10;;24907:152;:185;;;;-1:-1:-1;;;;;;25076:16:0;;;;24907:185;:223;;;;-1:-1:-1;;;;;;25109:21:0;;25125:4;25109:21;;24900:230;24815:323;-1:-1:-1;;;24815:323:0:o;27061:1564::-;10223:6;:13;;;;;;;;:6;27148:18;::::1;::::0;;;::::1;;27144:49;;27186:7;;27144:49;27228:4;27208:26;::::0;;;:11:::1;:26;::::0;;;;;;;27243:9:::1;::::0;-1:-1:-1;;;;;27243:9:0::1;27208:46:::0;;;;;;;;-1:-1:-1;;27208:67:0::1;27205:165;;27312:4;27292:26;::::0;;;:11:::1;:26;::::0;;;;;;;27327:9:::1;::::0;-1:-1:-1;;;;;27327:9:0::1;27292:46:::0;;;;;;;-1:-1:-1;;27292:66:0;;27205:165:::1;27453:7;:18:::0;27382:17:::1;::::0;27475:1:::1;::::0;27453:18:::1;::::0;;::::1;::::0;::::1;::::0;27404:45:::1;::::0;27427:22:::1;27404:20:::0;:45:::1;:::i;:::-;27403:68;;;;:::i;:::-;27402:74;;;;:::i;:::-;27382:94:::0;-1:-1:-1;27489:20:0::1;27512:32;27382:94:::0;27512:20;:32:::1;:::i;:::-;27589:16;::::0;;27603:1:::1;27589:16:::0;;;;;::::1;::::0;;27489:55;;-1:-1:-1;27565:21:0::1;::::0;27589:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27589:16:0::1;27565:40;;27634:4;27616;27621:1;27616:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27616:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27660:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;27616:7;;27660:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27650:4;27655:1;27650:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27650:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;27689:9:::1;::::0;:219:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:219:::1;::::0;27764:12;;27689:9:::1;::::0;27835:4;;27862::::1;::::0;27882:15:::1;::::0;27689:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28059:7:0::1;:18:::0;27980:24:::1;::::0;-1:-1:-1;28081:1:0::1;::::0;-1:-1:-1;28059:18:0::1;::::0;;::::1;::::0;::::1;::::0;28009:46:::1;::::0;28033:22:::1;28009:21;:46;:::i;:::-;28008:69;;;;:::i;:::-;28007:75;;;;:::i;:::-;27980:102:::0;-1:-1:-1;28099:13:0;;28095:396:::1;;28129:9;::::0;:276:::1;::::0;;;;28206:4:::1;28129:276;::::0;::::1;22203:34:1::0;22253:18;;;22246:34;;;28129:9:0::1;22296:18:1::0;;;22289:34;;;22339:18;;;22332:34;9236:42:0::1;22382:19:1::0;;;22375:44;28375:15:0::1;22435:19:1::0;;;22428:35;-1:-1:-1;;;;;28129:9:0;;::::1;::::0;:25:::1;::::0;28162:16;;22114:19:1;;28129:276:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28425:54:0::1;::::0;;27366:25:1;;;27422:2;27407:18;;27400:34;;;27450:18;;;27443:34;;;28425:54:0::1;::::0;-1:-1:-1;27354:2:1;27339:18;28425:54:0::1;;;;;;;28095:396;28540:1;28505:32;28528:9:::0;28505:20;:32:::1;:::i;:::-;:36;28501:117;;;28558:16;::::0;:48:::1;::::0;-1:-1:-1;;;;;28558:16:0;;::::1;::::0;28584:21:::1;28558:48:::0;::::1;;;::::0;:16:::1;:48:::0;:16;:48;28584:21;28558:16;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28501:117;27133:1492;;;;10247:1;-1:-1:-1::0;10259:6:0;:14;;;;;;27061:1564::o;30014:1273::-;30137:16;;30115:4;;30137:16;;;;;30132:221;;30170:28;30189:4;30195:2;30170:18;:28::i;:::-;30218:16;;;;;;;30217:17;:41;;;;;30238:20;30249:4;30255:2;30238:10;:20::i;:::-;30213:129;;;30279:47;;-1:-1:-1;;;30279:47:0;;27690:2:1;30279:47:0;;;27672:21:1;27729:2;27709:18;;;27702:30;27768:34;27748:18;;;27741:62;27839:7;27819:18;;;27812:35;27864:19;;30279:47:0;27488:401:1;30213:129:0;30365:25;30393:38;30404:4;30410:2;30414:7;30423;30393:10;:38::i;:::-;30476:14;;;;-1:-1:-1;;;;;30460:13:0;;;;;;:7;:13;;;;;;30365:66;;-1:-1:-1;30460:30:0;;;:::i;:::-;-1:-1:-1;;;;;30444:13:0;;;;;;;:7;:13;;;;;;:46;;;;30529:22;;;;30515:11;;;;;;;;;;:36;;30529:22;30515:36;:::i;:::-;-1:-1:-1;;;;;30501:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;30568:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;30590:15:0;;;;;;:11;:15;;;;;;;;30589:16;30568:37;30564:416;;;-1:-1:-1;;;;;30638:13:0;;;;;;:7;:13;;;;;;:23;;30654:7;;30638:23;:::i;:::-;-1:-1:-1;;;;;30622:13:0;;;;;;:7;:13;;;;;:39;30564:416;;;-1:-1:-1;;;;;30684:17:0;;;;;;:11;:17;;;;;;;;30683:18;:37;;;;-1:-1:-1;;;;;;30705:15:0;;;;;;:11;:15;;;;;;;;30683:37;30679:301;;;30765:22;;-1:-1:-1;;;;;30751:11:0;;30765:22;30751:11;;;:7;:11;;;;;;:36;;30765:22;30751:36;:::i;:::-;-1:-1:-1;;;;;30737:11:0;;;;;;:7;:11;;;;;:50;30679:301;;;-1:-1:-1;;;;;30811:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;30832:15:0;;;;;;:11;:15;;;;;;;;30811:36;30807:173;;;-1:-1:-1;;;;;30880:13:0;;;;;;:7;:13;;;;;;:23;;30896:7;;30880:23;:::i;:::-;-1:-1:-1;;;;;30864:13:0;;;;;;;:7;:13;;;;;;:39;;;;30946:22;;30932:11;;;;;;;;;;:36;;30946:22;30932:36;:::i;:::-;-1:-1:-1;;;;;30918:11:0;;;;;;:7;:11;;;;;:50;30807:173;30996:17;;;;:21;30992:79;;31032:39;31047:4;31053:6;:17;;;31032:14;:39::i;:::-;31100:1;31086:6;:11;;;:15;:34;;;;31119:1;31105:6;:11;;;:15;31086:34;31082:75;;;31146:6;:11;;;31135:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;31082:75:0;31186:6;:11;;;31172:10;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;31234:22:0;;31215:42;;2814:25:1;;;-1:-1:-1;;;;;31215:42:0;;;;;;;;;;2802:2:1;2787:18;31215:42:0;;;;;;;-1:-1:-1;31275:4:0;;30014:1273;-1:-1:-1;;;;;30014:1273:0:o;28633:642::-;28715:16;;;;;;;28714:17;28706:65;;;;-1:-1:-1;;;28706:65:0;;28096:2:1;28706:65:0;;;28078:21:1;28135:2;28115:18;;;28108:30;28174:34;28154:18;;;28147:62;28245:5;28225:18;;;28218:33;28268:19;;28706:65:0;27894:399:1;28706:65:0;28787:20;28798:4;28804:2;28787:10;:20::i;:::-;28786:21;:37;;;;-1:-1:-1;28817:6:0;;-1:-1:-1;;;;;28811:12:0;;;28817:6;;28811:12;28786:37;28782:486;;;-1:-1:-1;;;;;28844:21:0;;28860:4;28844:21;28840:165;;;28914:4;28885:17;:26;28903:7;13895;13922:6;-1:-1:-1;;;;;13922:6:0;;13857:79;28903:7;-1:-1:-1;;;;;28885:26:0;;;;;;;;;;;;-1:-1:-1;28885:26:0;:33;;-1:-1:-1;;28885:33:0;;;;;;;;;;28840:165;;;-1:-1:-1;;;;;28959:23:0;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;28959:30:0;28985:4;28959:30;;;28840:165;29019:16;:23;;;;;;;;;;29068:9;;;-1:-1:-1;;;;;29068:9:0;29057:107;;29112:9;:36;;;;29142:4;29112:36;;;;;29057:107;29178:19;:26;;;;;;;;29224:32;;-1:-1:-1;2106:41:1;;29224:32:0;;2094:2:1;2079:18;29224:32:0;;;;;;;28633:642;;:::o;31295:2008::-;31389:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31389:18:0;31420:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31420:25:0;31456:19;31478:10;:8;:10::i;:::-;31456:32;-1:-1:-1;31518:21:0;31456:32;31518:7;:21;:::i;:::-;31501:14;;;:38;31556:20;31567:4;31573:2;31556:10;:20::i;:::-;31552:315;;;31624:9;;:38;;;;;-1:-1:-1;;;;;28579:15:1;;;31624:38:0;;;28561:34:1;28631:15;;;28611:18;;;28604:43;28663:18;;;28656:34;;;31593:12:0;;31624:9;;;;;:19;;28473:18:1;;31624:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;31624:38:0;;;;;;;;-1:-1:-1;;31624:38:0;;;;;;;;;;;;:::i;:::-;;;31620:164;;31760:8;;;31620:164;31713:5;-1:-1:-1;31804:7:0;31800:56;;31832:8;;;31800:56;31578:289;31552:315;31882:7;31879:1291;;;-1:-1:-1;;;;;31910:11:0;;;;;;:7;:11;;;;;;;;31906:723;;;31968:10;:21;31942:12;:47;;31968:21;;;;-1:-1:-1;;32008:51:0;;;;;;;32036:23;;;;;;32008:51;;-1:-1:-1;;32078:51:0;32106:23;;;;;;;;;32078:51;;;;;;;;;31906:723;;;-1:-1:-1;;;;;32155:13:0;;;;;;:7;:13;;;;;;;;32151:478;;;32215:9;:20;32189:12;:46;;32215:20;;;;-1:-1:-1;;32254:50:0;;;;;;;32282:22;;;;;;32254:50;;-1:-1:-1;;32323:50:0;32351:22;;;;;;;;;32323:50;;;;;;;;;32151:478;;;32440:14;:25;32414:12;:51;;32440:25;;;;-1:-1:-1;;32484:55:0;;;;;;;32512:27;;;;;;32484:55;;-1:-1:-1;;32558:55:0;32586:27;;;;;;;;;32558:55;;;;;;;;;32151:478;32697:10;:27;32670:12;:23;32697:27;;;;;;;;32660:33;;32670:23;32660:7;:33;:::i;:::-;32659:65;;;;:::i;:::-;32645:11;;;:79;32829:10;:27;32799:12;:25;32829:27;;;;;;;;32771:53;;32799:25;;;;;;32771;;;;;:53;:::i;:::-;32760:65;;;;:7;:65;:::i;:::-;32759:97;;;;:::i;:::-;32739:17;;;:117;;;32907:11;;;;:31;;32739:117;32907:31;:::i;:::-;32896:43;;:7;:43;:::i;:::-;32871:68;;32970:11;;;;:25;;32984:11;;32970:25;:::i;:::-;32956:11;;;:39;31879:1291;;;33042:1;33028:11;;;:15;;;33058:17;;;:21;;;33094:32;;;33143:11;;;:15;31879:1291;33258:11;33238:6;:17;;;:31;;;;:::i;:::-;33223:6;:11;;;:47;;;;:::i;:::-;33205:6;:14;;;:66;;;;:::i;:::-;33180:22;;;:91;-1:-1:-1;33180:22:0;31295:2008;-1:-1:-1;;;;;31295:2008:0:o;33848:375::-;33991:10;:8;:10::i;:::-;33978:23;;:10;:23;:::i;:::-;33968:4;33952:22;;;;:7;:22;;;;;;:50;;;;:::i;:::-;33943:4;33927:22;;;;:7;:22;;;;;;;;:75;;;;34016:11;:26;;;;;;34013:104;;;34098:4;34082:22;;;;:7;:22;;;;;;:35;;34107:10;;34082:35;:::i;:::-;34073:4;34057:22;;;;:7;:22;;;;;:60;34013:104;34133:43;;2814:25:1;;;34158:4:0;;-1:-1:-1;;;;;34133:43:0;;;;;2802:2:1;2787:18;34133:43:0;;;;;;;33848:375;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;245:656:1;357:4;386:2;415;404:9;397:21;447:6;441:13;490:6;485:2;474:9;470:18;463:34;515:1;525:140;539:6;536:1;533:13;525:140;;;634:14;;;630:23;;624:30;600:17;;;619:2;596:26;589:66;554:10;;525:140;;;683:6;680:1;677:13;674:91;;;753:1;748:2;739:6;728:9;724:22;720:31;713:42;674:91;-1:-1:-1;817:2:1;805:15;-1:-1:-1;;801:88:1;786:104;;;;892:2;782:113;;245:656;-1:-1:-1;;;245:656:1:o;1163:180::-;1222:6;1275:2;1263:9;1254:7;1250:23;1246:32;1243:52;;;1291:1;1288;1281:12;1243:52;-1:-1:-1;1314:23:1;;1163:180;-1:-1:-1;1163:180:1:o;1348:154::-;-1:-1:-1;;;;;1427:5:1;1423:54;1416:5;1413:65;1403:93;;1492:1;1489;1482:12;1507:134;1575:20;;1604:31;1575:20;1604:31;:::i;:::-;1507:134;;;:::o;1646:315::-;1714:6;1722;1775:2;1763:9;1754:7;1750:23;1746:32;1743:52;;;1791:1;1788;1781:12;1743:52;1830:9;1817:23;1849:31;1874:5;1849:31;:::i;:::-;1899:5;1951:2;1936:18;;;;1923:32;;-1:-1:-1;;;1646:315:1:o;2158:118::-;2244:5;2237:13;2230:21;2223:5;2220:32;2210:60;;2266:1;2263;2256:12;2281:382;2346:6;2354;2407:2;2395:9;2386:7;2382:23;2378:32;2375:52;;;2423:1;2420;2413:12;2375:52;2462:9;2449:23;2481:31;2506:5;2481:31;:::i;:::-;2531:5;-1:-1:-1;2588:2:1;2573:18;;2560:32;2601:30;2560:32;2601:30;:::i;:::-;2650:7;2640:17;;;2281:382;;;;;:::o;3299:159::-;3366:20;;3426:6;3415:18;;3405:29;;3395:57;;3448:1;3445;3438:12;3463:328;3537:6;3545;3553;3606:2;3594:9;3585:7;3581:23;3577:32;3574:52;;;3622:1;3619;3612:12;3574:52;3645:28;3663:9;3645:28;:::i;:::-;3635:38;;3692:37;3725:2;3714:9;3710:18;3692:37;:::i;:::-;3682:47;;3748:37;3781:2;3770:9;3766:18;3748:37;:::i;:::-;3738:47;;3463:328;;;;;:::o;3796:456::-;3873:6;3881;3889;3942:2;3930:9;3921:7;3917:23;3913:32;3910:52;;;3958:1;3955;3948:12;3910:52;3997:9;3984:23;4016:31;4041:5;4016:31;:::i;:::-;4066:5;-1:-1:-1;4123:2:1;4108:18;;4095:32;4136:33;4095:32;4136:33;:::i;:::-;3796:456;;4188:7;;-1:-1:-1;;;4242:2:1;4227:18;;;;4214:32;;3796:456::o;4257:248::-;4325:6;4333;4386:2;4374:9;4365:7;4361:23;4357:32;4354:52;;;4402:1;4399;4392:12;4354:52;-1:-1:-1;;4425:23:1;;;4495:2;4480:18;;;4467:32;;-1:-1:-1;4257:248:1:o;4510:647::-;4584:6;4592;4600;4608;4661:3;4649:9;4640:7;4636:23;4632:33;4629:53;;;4678:1;4675;4668:12;4629:53;4717:9;4704:23;4736:28;4758:5;4736:28;:::i;:::-;4783:5;-1:-1:-1;4840:2:1;4825:18;;4812:32;4853:30;4812:32;4853:30;:::i;:::-;4902:7;-1:-1:-1;4961:2:1;4946:18;;4933:32;4974:30;4933:32;4974:30;:::i;:::-;5023:7;-1:-1:-1;5082:2:1;5067:18;;5054:32;5095:30;5054:32;5095:30;:::i;:::-;4510:647;;;;-1:-1:-1;4510:647:1;;-1:-1:-1;;4510:647:1:o;5351:247::-;5410:6;5463:2;5451:9;5442:7;5438:23;5434:32;5431:52;;;5479:1;5476;5469:12;5431:52;5518:9;5505:23;5537:31;5562:5;5537:31;:::i;5973:256::-;6039:6;6047;6100:2;6088:9;6079:7;6075:23;6071:32;6068:52;;;6116:1;6113;6106:12;6068:52;6139:28;6157:9;6139:28;:::i;:::-;6129:38;;6186:37;6219:2;6208:9;6204:18;6186:37;:::i;:::-;6176:47;;5973:256;;;;;:::o;6234:241::-;6290:6;6343:2;6331:9;6322:7;6318:23;6314:32;6311:52;;;6359:1;6356;6349:12;6311:52;6398:9;6385:23;6417:28;6439:5;6417:28;:::i;6480:388::-;6548:6;6556;6609:2;6597:9;6588:7;6584:23;6580:32;6577:52;;;6625:1;6622;6615:12;6577:52;6664:9;6651:23;6683:31;6708:5;6683:31;:::i;:::-;6733:5;-1:-1:-1;6790:2:1;6775:18;;6762:32;6803:33;6762:32;6803:33;:::i;6873:184::-;6925:77;6922:1;6915:88;7022:4;7019:1;7012:15;7046:4;7043:1;7036:15;7062:334;7133:2;7127:9;7189:2;7179:13;;-1:-1:-1;;7175:86:1;7163:99;;7292:18;7277:34;;7313:22;;;7274:62;7271:88;;;7339:18;;:::i;:::-;7375:2;7368:22;7062:334;;-1:-1:-1;7062:334:1:o;7401:183::-;7461:4;7494:18;7486:6;7483:30;7480:56;;;7516:18;;:::i;:::-;-1:-1:-1;7561:1:1;7557:14;7573:4;7553:25;;7401:183::o;7589:662::-;7643:5;7696:3;7689:4;7681:6;7677:17;7673:27;7663:55;;7714:1;7711;7704:12;7663:55;7750:6;7737:20;7776:4;7800:60;7816:43;7856:2;7816:43;:::i;:::-;7800:60;:::i;:::-;7894:15;;;7980:1;7976:10;;;;7964:23;;7960:32;;;7925:12;;;;8004:15;;;8001:35;;;8032:1;8029;8022:12;8001:35;8068:2;8060:6;8056:15;8080:142;8096:6;8091:3;8088:15;8080:142;;;8162:17;;8150:30;;8200:12;;;;8113;;8080:142;;;-1:-1:-1;8240:5:1;7589:662;-1:-1:-1;;;;;;7589:662:1:o;8256:1289::-;8383:6;8391;8399;8452:2;8440:9;8431:7;8427:23;8423:32;8420:52;;;8468:1;8465;8458:12;8420:52;8508:9;8495:23;8537:18;8578:2;8570:6;8567:14;8564:34;;;8594:1;8591;8584:12;8564:34;8632:6;8621:9;8617:22;8607:32;;8677:7;8670:4;8666:2;8662:13;8658:27;8648:55;;8699:1;8696;8689:12;8648:55;8735:2;8722:16;8757:4;8781:60;8797:43;8837:2;8797:43;:::i;8781:60::-;8875:15;;;8957:1;8953:10;;;;8945:19;;8941:28;;;8906:12;;;;8981:19;;;8978:39;;;9013:1;9010;9003:12;8978:39;9037:11;;;;9057:217;9073:6;9068:3;9065:15;9057:217;;;9153:3;9140:17;9170:31;9195:5;9170:31;:::i;:::-;9214:18;;9090:12;;;;9252;;;;9057:217;;;9293:5;-1:-1:-1;;9336:18:1;;9323:32;;-1:-1:-1;;9367:16:1;;;9364:36;;;9396:1;9393;9386:12;9364:36;;9419:63;9474:7;9463:8;9452:9;9448:24;9419:63;:::i;:::-;9409:73;;;9501:38;9535:2;9524:9;9520:18;9501:38;:::i;9810:385::-;9896:6;9904;9912;9920;9973:3;9961:9;9952:7;9948:23;9944:33;9941:53;;;9990:1;9987;9980:12;9941:53;-1:-1:-1;;10013:23:1;;;10083:2;10068:18;;10055:32;;-1:-1:-1;10134:2:1;10119:18;;10106:32;;10185:2;10170:18;10157:32;;-1:-1:-1;9810:385:1;-1:-1:-1;9810:385:1:o;10200:437::-;10279:1;10275:12;;;;10322;;;10343:61;;10397:4;10389:6;10385:17;10375:27;;10343:61;10450:2;10442:6;10439:14;10419:18;10416:38;10413:218;;;10487:77;10484:1;10477:88;10588:4;10585:1;10578:15;10616:4;10613:1;10606:15;10413:218;;10200:437;;;:::o;12038:184::-;12090:77;12087:1;12080:88;12187:4;12184:1;12177:15;12211:4;12208:1;12201:15;12227:184;12279:77;12276:1;12269:88;12376:4;12373:1;12366:15;12400:4;12397:1;12390:15;12416:184;12468:77;12465:1;12458:88;12565:4;12562:1;12555:15;12589:4;12586:1;12579:15;12605:125;12645:4;12673:1;12670;12667:8;12664:34;;;12678:18;;:::i;:::-;-1:-1:-1;12715:9:1;;12605:125::o;12735:195::-;12774:3;-1:-1:-1;;12798:5:1;12795:77;12792:103;;;12875:18;;:::i;:::-;-1:-1:-1;12922:1:1;12911:13;;12735:195::o;12935:224::-;12974:3;13002:6;13035:2;13032:1;13028:10;13065:2;13062:1;13058:10;13096:3;13092:2;13088:12;13083:3;13080:21;13077:47;;;13104:18;;:::i;:::-;13140:13;;12935:224;-1:-1:-1;;;;12935:224:1:o;13164:228::-;13204:7;13330:1;-1:-1:-1;;13258:74:1;13255:1;13252:81;13247:1;13240:9;13233:17;13229:105;13226:131;;;13337:18;;:::i;:::-;-1:-1:-1;13377:9:1;;13164:228::o;13397:184::-;13449:77;13446:1;13439:88;13546:4;13543:1;13536:15;13570:4;13567:1;13560:15;13586:120;13626:1;13652;13642:35;;13657:18;;:::i;:::-;-1:-1:-1;13691:9:1;;13586:120::o;14977:128::-;15017:3;15048:1;15044:6;15041:1;15038:13;15035:39;;;15054:18;;:::i;:::-;-1:-1:-1;15090:9:1;;14977:128::o;15964:184::-;16034:6;16087:2;16075:9;16066:7;16062:23;16058:32;16055:52;;;16103:1;16100;16093:12;16055:52;-1:-1:-1;16126:16:1;;15964:184;-1:-1:-1;15964:184:1:o;19631:482::-;19720:1;19763:5;19720:1;19777:330;19798:7;19788:8;19785:21;19777:330;;;19917:4;-1:-1:-1;;19845:77:1;19839:4;19836:87;19833:113;;;19926:18;;:::i;:::-;19976:7;19966:8;19962:22;19959:55;;;19996:16;;;;19959:55;20075:22;;;;20035:15;;;;19777:330;;;19781:3;19631:482;;;;;:::o;20118:866::-;20167:5;20197:8;20187:80;;-1:-1:-1;20238:1:1;20252:5;;20187:80;20286:4;20276:76;;-1:-1:-1;20323:1:1;20337:5;;20276:76;20368:4;20386:1;20381:59;;;;20454:1;20449:130;;;;20361:218;;20381:59;20411:1;20402:10;;20425:5;;;20449:130;20486:3;20476:8;20473:17;20470:43;;;20493:18;;:::i;:::-;-1:-1:-1;;20549:1:1;20535:16;;20564:5;;20361:218;;20663:2;20653:8;20650:16;20644:3;20638:4;20635:13;20631:36;20625:2;20615:8;20612:16;20607:2;20601:4;20598:12;20594:35;20591:77;20588:159;;;-1:-1:-1;20700:19:1;;;20732:5;;20588:159;20779:34;20804:8;20798:4;20779:34;:::i;:::-;20909:6;-1:-1:-1;;20837:79:1;20828:7;20825:92;20822:118;;;20920:18;;:::i;:::-;20958:20;;20118:866;-1:-1:-1;;;20118:866:1:o;20989:140::-;21047:5;21076:47;21117:4;21107:8;21103:19;21097:4;21076:47;:::i;21134:112::-;21166:1;21192;21182:35;;21197:18;;:::i;:::-;-1:-1:-1;21231:9:1;;21134:112::o;21251:251::-;21321:6;21374:2;21362:9;21353:7;21349:23;21345:32;21342:52;;;21390:1;21387;21380:12;21342:52;21422:9;21416:16;21441:31;21466:5;21441:31;:::i;22474:306::-;22562:6;22570;22578;22631:2;22619:9;22610:7;22606:23;22602:32;22599:52;;;22647:1;22644;22637:12;22599:52;22676:9;22670:16;22660:26;;22726:2;22715:9;22711:18;22705:25;22695:35;;22770:2;22759:9;22755:18;22749:25;22739:35;;22474:306;;;;;:::o;23142:245::-;23209:6;23262:2;23250:9;23241:7;23237:23;23233:32;23230:52;;;23278:1;23275;23268:12;23230:52;23310:9;23304:16;23329:28;23351:5;23329:28;:::i;26133:1026::-;26395:4;26443:3;26432:9;26428:19;26474:6;26463:9;26456:25;26500:2;26538:6;26533:2;26522:9;26518:18;26511:34;26581:3;26576:2;26565:9;26561:18;26554:31;26605:6;26640;26634:13;26671:6;26663;26656:22;26709:3;26698:9;26694:19;26687:26;;26748:2;26740:6;26736:15;26722:29;;26769:1;26779:218;26793:6;26790:1;26787:13;26779:218;;;26858:13;;-1:-1:-1;;;;;26854:62:1;26842:75;;26972:15;;;;26937:12;;;;26815:1;26808:9;26779:218;;;-1:-1:-1;;;;;;;27053:55:1;;;;27048:2;27033:18;;27026:83;-1:-1:-1;;;27140:3:1;27125:19;27118:35;27014:3;26133:1026;-1:-1:-1;;;26133:1026:1:o

Swarm Source

ipfs://261c9e03edd57f6a59dc21f3ec0173677392e88fc347c89c2c21651aeb40c2a6

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.