ETH Price: $2,584.07 (-2.98%)

Token

Frankenstein Inu (FRINU)
 

Overview

Max Total Supply

1,000,000,000 FRINU

Holders

174

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
18,305.224290745829489885 FRINU

Value
$0.00
0xC35669545333674D5B563B6eb366DA1eA4e5B3D5
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
FrankensteinInu

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-19
*/

// SPDX-License-Identifier: MIT
/*

Frankenstein Inu (FRINU)

Socials :
Website - https://frankensteininu.com
Telegram - https://t.me/FrankensteinInuToken
Medium - https://medium.com/@frankensteininu
Twitter - https://twitter.com/FrankensteinInu

*/
pragma solidity 0.8.13;

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

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

interface IERC20 {
    /**
     * @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/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

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

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    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)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount)
        internal
        virtual
    {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership(bool confirmRenounce)
        external
        virtual
        onlyOwner
    {
        require(confirmRenounce, "Please confirm renounce!");
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

contract FrankensteinInu is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress1;
    address public operationsAddress2;
    address public operationsAddress3;
    address public lpReceiverAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public boughtEarly;
    address[] public earlyBuyers;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    // MEV Bot prevention - cannot be turned off once enabled!!
    bool public sellingEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;

    uint256 private originalOperationsFee;
    uint256 private originalLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event EnabledTrading();
    event EnabledSellingForever();
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event UpdatedMaxSellAmount(uint256 newAmount);
    event UpdatedMaxWalletAmount(uint256 newAmount);
    event UpdatedOperationsAddress(address indexed newWallet1, address indexed newWallet2, address indexed newWallet3);
    event MaxTransactionExclusion(address _address, bool excluded);
    event OwnerForcedSwapBack(uint256 timestamp);
    event CaughtEarlyBuyer(address sniper);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event TransferForeignToken(address token, uint256 amount);

    constructor() payable ERC20("Frankenstein Inu", "FRINU") {
        address newOwner = msg.sender;
        
        address _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        // initialize router
        dexRouter = IDexRouter(_dexRouter);
        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );

        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 1000000000 * 1e18;

        maxBuyAmount = (totalSupply * 1) / 1000; // 0.1%
        maxSellAmount = (totalSupply * 1) / 1000; // 0.1%
        maxWallet = (totalSupply * 5) / 1000; // 0.5%
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 %

        buyOperationsFee = 5;
        buyLiquidityFee = 1;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        originalOperationsFee = 5;
        originalLiquidityFee = 1;

        sellOperationsFee = 5;
        sellLiquidityFee = 1;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;

        operationsAddress1 = address(0xf348E77563d41b1B7f4C9361Fdc7462F93eCf8a0); //40%
        operationsAddress2 = address(0x069eAaA9153E8ce4C6fad31Db4314f3C26141DB9); //40%
        operationsAddress3 = address(0xBb9B6D88BcFc4033393bBD94FEF3BF1896568c07); //20%

        lpReceiverAddress = address(0xe0FE5F07f9907d950A39C07AE93c78E37Fb97AF8);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress1), true);
        _excludeFromMaxTransaction(address(operationsAddress2), true);
        _excludeFromMaxTransaction(address(operationsAddress3), true);
        _excludeFromMaxTransaction(address(dexRouter), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress1), true);
        excludeFromFees(address(operationsAddress2), true);
        excludeFromFees(address(operationsAddress3), true);
        excludeFromFees(address(dexRouter), true);

        _createInitialSupply(newOwner, totalSupply); // Fair launch

        transferOwnership(newOwner);
    }

    receive() external payable {}

    function getEarlyBuyers() external view returns (address[] memory) {
        return earlyBuyers;
    }

    function removeBoughtEarly(address wallet) external onlyOwner {
        require(boughtEarly[wallet], "Wallet is already not flagged.");
        boughtEarly[wallet] = false;
    }

    function markBoughtEarly(address[] calldata wallet) external onlyOwner {
        for(uint256 i = 0; i < wallet.length; i++) {
            boughtEarly[wallet[i]] = true;
        }
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 10000) / 1e18,
            "Cannot set max buy amount lower than 0.01%"
        );
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 10000) / 1e18,
            "Cannot set max sell amount lower than 0.01%"
        );
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 1) / 100,
            "Swap amount cannot be higher than 1% total supply."
        );
        swapTokensAtAmount = newAmount;
    }

    function _excludeFromMaxTransaction(address updAds, bool isExcluded)
        private
    {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        external
        onlyOwner
    {
        if (!isEx) {
            require(
                updAds != lpPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        external
        onlyOwner
    {
        require(
            pair != lpPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee)
        external
        onlyOwner
    {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;
        require(buyTotalFees <= 5, "Must keep fees at 5% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee)
        external
        onlyOwner
    {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
        require(sellTotalFees <= 5, "Must keep fees at 5% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }

        if (!earlyBuyPenaltyInEffect() && tradingActive) {
            require(
                !boughtEarly[from] || to == owner() || to == address(0xdead),
                "Bots cannot transfer tokens in or out except to owner or dead address."
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (to != address(dexRouter) && to != address(lpPair)) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxBuyAmount,
                        "Buy transfer amount exceeds the max buy."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(sellingEnabled, "Selling disabled");
                    require(
                        amount <= maxSellAmount,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // bot/sniper penalty.
            if (
                earlyBuyPenaltyInEffect() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                !_isExcludedFromFees[to] &&
                buyTotalFees > 0
            ) {
                
                if (!boughtEarly[to]) {
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function earlyBuyPenaltyInEffect() public view returns (bool) {
        return block.number < blockForPenaltyEnd;
    }

    function getLaunchedBlockNumber() public view returns (uint256) {
        return tradingActiveBlock;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lpReceiverAddress,
            block.timestamp
        );
    }

    function removeLP(uint256 percent) external onlyOwner {
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));

        require(lpBalance > 0, "No LP tokens in contract");

        uint256 lpAmount = (lpBalance * percent) / 10000;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 10) {
            contractBalance = swapTokensAtAmount * 10;
        }

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = (ethBalance * tokensForOperations) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForOperations;

        tokensForLiquidity = 0;
        tokensForOperations = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        //Whatever balance left divide among 2 wallets 70/30
        uint256 contractBal = address(this).balance;
        (success, ) = address(operationsAddress1).call{
            value: contractBal*40/100
        }("");

        (success, ) = address(operationsAddress2).call{
            value: contractBal*40/100
        }("");

        (success, ) = address(operationsAddress3).call{
            value: contractBal*20/100
        }("");

    }

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(
            _token != address(this) || !tradingActive,
            "Can't withdraw native tokens while trading is active"
        );
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }

    function setOperationsAddress(address _operationsAddress1, address _operationsAddress2, address _operationsAddress3)
        external
        onlyOwner
    {
        require(
            _operationsAddress1 != address(0) && _operationsAddress2 != address(0) && _operationsAddress3 != address(0),
            "_operationsAddress address cannot be 0"
        );
        operationsAddress1 = payable(_operationsAddress1);
        operationsAddress2 = payable(_operationsAddress2);
        operationsAddress3 = payable(_operationsAddress3);
        emit UpdatedOperationsAddress(_operationsAddress1, _operationsAddress2, _operationsAddress3);
    }

    function setLPReceiverAddress(address _LPReceiverAddr)
        external
        onlyOwner
    {
        lpReceiverAddress = _LPReceiverAddr;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

    function restoreLimits() external onlyOwner {
        limitsInEffect = true;
    }

    // Enable selling - cannot be turned off!
    function setSellingEnabled(bool confirmSellingEnabled) external onlyOwner {
        require(confirmSellingEnabled, "Confirm selling enabled!");
        require(!sellingEnabled, "Selling already enabled!");

        sellingEnabled = true;
        emit EnabledSellingForever();
    }

    function resetTaxes() external onlyOwner {
        buyOperationsFee = originalOperationsFee;
        buyLiquidityFee = originalLiquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        sellOperationsFee = originalOperationsFee;
        sellLiquidityFee = originalLiquidityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
    }

    function instantiateLP() external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        // add the liquidity
        require(
            address(this).balance > 0,
            "Must have ETH on contract to launch"
        );
        require(
            balanceOf(address(this)) > 0,
            "Must have Tokens on contract to launch"
        );

        _approve(address(this), address(dexRouter), balanceOf(address(this)));

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

    function setTrading(bool _status) external onlyOwner {
        tradingActive = _status;
    }

    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(
            blocksForPenalty <= 10,
            "Cannot make penalty blocks more than 10"
        );
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }
}

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":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledSellingForever","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntoLiquidity","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet1","type":"address"},{"indexed":true,"internalType":"address","name":"newWallet2","type":"address"},{"indexed":true,"internalType":"address","name":"newWallet3","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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 IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLaunchedBlockNumber","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":[],"name":"instantiateLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","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":"lpReceiverAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallet","type":"address[]"}],"name":"markBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"operationsAddress1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"removeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_LPReceiverAddr","type":"address"}],"name":"setLPReceiverAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress1","type":"address"},{"internalType":"address","name":"_operationsAddress2","type":"address"},{"internalType":"address","name":"_operationsAddress3","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmSellingEnabled","type":"bool"}],"name":"setSellingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","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":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060109081556015805463ffffffff191660019081179091556017805460ff1916909117905560808181526f4672616e6b656e737465696e20496e7560801b60a0908152610100604052600560c0908152644652494e5560d81b60e05291926200006d9160039162000893565b5080516200008390600490602084019062000893565b5050506000620000986200053060201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620047f7833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000165919062000939565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ee919062000939565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200023c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000262919062000939565b600a80546001600160a01b0319166001600160a01b039290921691821790556200028e90600162000534565b600a54620002a7906001600160a01b0316600162000597565b6b033b2e3c9fd0803ce80000006103e8620002c482600162000981565b620002d09190620009a3565b6006556103e8620002e382600162000981565b620002ef9190620009a3565b6007556103e86200030282600562000981565b6200030e9190620009a3565b6008556127106200032182600562000981565b6200032d9190620009a3565b600b55600560198190556001601a8190556200034991620009c6565b6018556005601b8190556001601c819055601e829055601f8190556200036f91620009c6565b601d55600c80546001600160a01b031990811673f348e77563d41b1b7f4c9361fdc7462f93ecf8a017909155600d8054821673069eaaa9153e8ce4c6fad31db4314f3c26141db9179055600e8054821673bb9b6d88bcfc4033393bbd94fef3bf1896568c07179055600f805490911673e0fe5f07f9907d950a39c07ae93c78e37fb97af81790556200040383600162000534565b6200041030600162000534565b6200041f61dead600162000534565b600c5462000438906001600160a01b0316600162000534565b600d5462000451906001600160a01b0316600162000534565b600e546200046a906001600160a01b0316600162000534565b60095462000483906001600160a01b0316600162000534565b6200049083600162000603565b6200049d30600162000603565b620004ac61dead600162000603565b600c54620004c5906001600160a01b0316600162000603565b600d54620004de906001600160a01b0316600162000603565b600e54620004f7906001600160a01b0316600162000603565b60095462000510906001600160a01b0316600162000603565b6200051c8382620006b1565b620005278362000796565b50505062000a1d565b3390565b6001600160a01b038216600081815260236020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602460205260409020805460ff1916821515179055620005c7828262000534565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006525760405162461bcd60e51b81526020600482018190526024820152600080516020620047d783398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007095760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000649565b80600260008282546200071d9190620009c6565b90915550506001600160a01b038216600090815260208190526040812080548392906200074c908490620009c6565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007e15760405162461bcd60e51b81526020600482018190526024820152600080516020620047d7833981519152604482015260640162000649565b6001600160a01b038116620008485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000649565b6005546040516001600160a01b03808416921690600080516020620047f783398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b828054620008a190620009e1565b90600052602060002090601f016020900481019282620008c5576000855562000910565b82601f10620008e057805160ff191683800117855562000910565b8280016001018555821562000910579182015b8281111562000910578251825591602001919060010190620008f3565b506200091e92915062000922565b5090565b5b808211156200091e576000815560010162000923565b6000602082840312156200094c57600080fd5b81516001600160a01b03811681146200096457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200099e576200099e6200096b565b500290565b600082620009c157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009dc57620009dc6200096b565b500190565b600181811c90821680620009f657607f821691505b60208210810362000a1757634e487b7160e01b600052602260045260246000fd5b50919050565b613daa8062000a2d6000396000f3fe6080604052600436106104145760003560e01c806395d89b411161021e578063d85ba06311610123578063efda1165116100ab578063f5648a4f1161007a578063f5648a4f14610c0b578063f637434214610c20578063f771cb6514610c36578063f8b45b0514610c57578063fb002c9714610c6d57600080fd5b8063efda116514610b95578063f11a24d314610bb5578063f202316014610bcb578063f2fde38b14610beb57600080fd5b8063e2f45605116100f2578063e2f4560514610b1f578063e7b71ce214610b35578063e884f26014610b4a578063eb472fc414610b5f578063ee40166e14610b7f57600080fd5b8063d85ba06314610a83578063daf51cd114610a99578063dc3f0d0f14610ab9578063dd62ed3e14610ad957600080fd5b8063b62496f5116101a6578063c18bc19511610175578063c18bc195146109e9578063c80f591a14610a09578063c876d0b914610a29578063c97a72f114610a43578063d257b34f14610a6357600080fd5b8063b62496f514610965578063b822d56614610995578063bbc0c742146109aa578063c0246668146109c957600080fd5b8063a2cb8aac116101ed578063a2cb8aac146108cf578063a457c2d7146108ef578063a62068ce1461090f578063a9059cbb14610925578063b16d78cf1461094557600080fd5b806395d89b41146108635780639a5bd2dd146108785780639a7a23d61461089a578063a28e86d3146108ba57600080fd5b80635a139dd4116103245780637571336a116102ac57806385ecfd281161027b57806385ecfd28146107bf57806388e765ff146107ef5780638da5cb5b146108055780638f70ccf7146108235780638fa037c31461084357600080fd5b80637571336a1461073f5780637e926b4b1461075f57806382aa7c681461077f5780638366e79a1461079f57600080fd5b80636a486a8e116102f35780636a486a8e146106be5780636b0a894c146106d45780636ddd1713146106ea57806370a082311461070a578063751039fc1461072a57600080fd5b80635a139dd4146106525780635bb988c91461066857806366ca9b831461068857806366d602ae146106a857600080fd5b80631a8145bb116103a7578063395093511161037657806339509351146105cb578063452ed4f1146105eb5780634a62bb651461060b5780634f77f6c01461062557806358a6d5311461063b57600080fd5b80631a8145bb1461055957806323b872dd1461056f5780632be32b611461058f578063313ce567146105af57600080fd5b80630a0f1c1d116103e35780630a0f1c1d146104d55780630dbd397c146104f557806310d5de531461051457806318160ddd1461054457600080fd5b806302dbd8f81461042057806306fdde03146104425780630758d9241461046d578063095ea7b3146104a557600080fd5b3661041b57005b600080fd5b34801561042c57600080fd5b5061044061043b3660046137ca565b610c83565b005b34801561044e57600080fd5b50610457610d23565b60405161046491906137ec565b60405180910390f35b34801561047957600080fd5b5060095461048d906001600160a01b031681565b6040516001600160a01b039091168152602001610464565b3480156104b157600080fd5b506104c56104c0366004613859565b610db5565b6040519015158152602001610464565b3480156104e157600080fd5b50600c5461048d906001600160a01b031681565b34801561050157600080fd5b506010545b604051908152602001610464565b34801561052057600080fd5b506104c561052f366004613885565b60236020526000908152604090205460ff1681565b34801561055057600080fd5b50600254610506565b34801561056557600080fd5b5061050660215481565b34801561057b57600080fd5b506104c561058a3660046138a9565b610dcb565b34801561059b57600080fd5b506104406105aa3660046138ea565b610e75565b3480156105bb57600080fd5b5060405160128152602001610464565b3480156105d757600080fd5b506104c56105e6366004613859565b610f83565b3480156105f757600080fd5b50600a5461048d906001600160a01b031681565b34801561061757600080fd5b506015546104c59060ff1681565b34801561063157600080fd5b50610506601e5481565b34801561064757600080fd5b5060115443106104c5565b34801561065e57600080fd5b5061050660195481565b34801561067457600080fd5b50610440610683366004613885565b610fbf565b34801561069457600080fd5b506104406106a33660046137ca565b611072565b3480156106b457600080fd5b5061050660075481565b3480156106ca57600080fd5b50610506601d5481565b3480156106e057600080fd5b5061050660145481565b3480156106f657600080fd5b506015546104c59062010000900460ff1681565b34801561071657600080fd5b50610506610725366004613885565b611105565b34801561073657600080fd5b50610440611120565b34801561074b57600080fd5b5061044061075a366004613911565b611156565b34801561076b57600080fd5b5061044061077a36600461394a565b61121e565b34801561078b57600080fd5b5061044061079a3660046138ea565b6112e0565b3480156107ab57600080fd5b506104c56107ba366004613967565b611414565b3480156107cb57600080fd5b506104c56107da366004613885565b60126020526000908152604090205460ff1681565b3480156107fb57600080fd5b5061050660065481565b34801561081157600080fd5b506005546001600160a01b031661048d565b34801561082f57600080fd5b5061044061083e36600461394a565b61164e565b34801561084f57600080fd5b50600e5461048d906001600160a01b031681565b34801561086f57600080fd5b50610457611692565b34801561088457600080fd5b5061088d6116a1565b60405161046491906139d9565b3480156108a657600080fd5b506104406108b5366004613911565b611702565b3480156108c657600080fd5b506104406117f6565b3480156108db57600080fd5b50600f5461048d906001600160a01b031681565b3480156108fb57600080fd5b506104c561090a366004613859565b61182f565b34801561091b57600080fd5b5061050660115481565b34801561093157600080fd5b506104c5610940366004613859565b6118c8565b34801561095157600080fd5b5061044061096036600461394a565b6118d5565b34801561097157600080fd5b506104c5610980366004613885565b60246020526000908152604090205460ff1681565b3480156109a157600080fd5b506104406119e5565b3480156109b657600080fd5b506015546104c590610100900460ff1681565b3480156109d557600080fd5b506104406109e4366004613911565b611bf4565b3480156109f557600080fd5b50610440610a043660046138ea565b611c7d565b348015610a1557600080fd5b50610440610a24366004613885565b611d84565b348015610a3557600080fd5b506017546104c59060ff1681565b348015610a4f57600080fd5b50610440610a5e3660046139ec565b611dd0565b348015610a6f57600080fd5b50610440610a7e3660046138ea565b611e6c565b348015610a8f57600080fd5b5061050660185481565b348015610aa557600080fd5b50610440610ab4366004613a61565b611fb4565b348015610ac557600080fd5b50610440610ad43660046138ea565b6120db565b348015610ae557600080fd5b50610506610af4366004613967565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b2b57600080fd5b50610506600b5481565b348015610b4157600080fd5b506104406121e3565b348015610b5657600080fd5b50610440612247565b348015610b6b57600080fd5b5061048d610b7a3660046138ea565b61227d565b348015610b8b57600080fd5b5061050660105481565b348015610ba157600080fd5b50610440610bb03660046138ea565b6122a7565b348015610bc157600080fd5b50610506601a5481565b348015610bd757600080fd5b50600d5461048d906001600160a01b031681565b348015610bf757600080fd5b50610440610c06366004613885565b6124a8565b348015610c1757600080fd5b50610440612593565b348015610c2c57600080fd5b50610506601f5481565b348015610c4257600080fd5b506015546104c5906301000000900460ff1681565b348015610c6357600080fd5b5061050660085481565b348015610c7957600080fd5b5061050660205481565b6005546001600160a01b03163314610cb65760405162461bcd60e51b8152600401610cad90613aac565b60405180910390fd5b601e829055601f819055610cca8183613af7565b601d81905560051015610d1f5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610cad565b5050565b606060038054610d3290613b0f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5e90613b0f565b8015610dab5780601f10610d8057610100808354040283529160200191610dab565b820191906000526020600020905b815481529060010190602001808311610d8e57829003601f168201915b5050505050905090565b6000610dc233848461260a565b50600192915050565b6000610dd884848461272e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e5d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610cad565b610e6a853385840361260a565b506001949350505050565b6005546001600160a01b03163314610e9f5760405162461bcd60e51b8152600401610cad90613aac565b670de0b6b3a7640000612710610eb460025490565b610ebf906001613b49565b610ec99190613b68565b610ed39190613b68565b811015610f355760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610cad565b610f4781670de0b6b3a7640000613b49565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dc2918590610fba908690613af7565b61260a565b6005546001600160a01b03163314610fe95760405162461bcd60e51b8152600401610cad90613aac565b6001600160a01b03811660009081526012602052604090205460ff166110515760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610cad565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6005546001600160a01b0316331461109c5760405162461bcd60e51b8152600401610cad90613aac565b6019829055601a8190556110b08183613af7565b601881905560051015610d1f5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610cad565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461114a5760405162461bcd60e51b8152600401610cad90613aac565b6015805460ff19169055565b6005546001600160a01b031633146111805760405162461bcd60e51b8152600401610cad90613aac565b806111f357600a546001600160a01b03908116908316036111f35760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610cad565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112485760405162461bcd60e51b8152600401610cad90613aac565b806112955760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610cad565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b0316331461130a5760405162461bcd60e51b8152600401610cad90613aac565b601554610100900460ff16156113625760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610cad565b600a8111156113c35760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610cad565b6015805462ffff001916620101001790554360108190556113e5908290613af7565b6011556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146114415760405162461bcd60e51b8152600401610cad90613aac565b6001600160a01b0383166114975760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610cad565b6001600160a01b038316301415806114b75750601554610100900460ff16155b6115205760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610cad565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158b9190613b8a565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156115de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116029190613ba3565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116785760405162461bcd60e51b8152600401610cad90613aac565b601580549115156101000261ff0019909216919091179055565b606060048054610d3290613b0f565b60606013805480602002602001604051908101604052809291908181526020018280548015610dab57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116116db575050505050905090565b6005546001600160a01b0316331461172c5760405162461bcd60e51b8152600401610cad90613aac565b600a546001600160a01b03908116908316036117b05760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cad565b6117ba82826131a6565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118205760405162461bcd60e51b8152600401610cad90613aac565b6015805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118b15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cad565b6118be338585840361260a565b5060019392505050565b6000610dc233848461272e565b6005546001600160a01b031633146118ff5760405162461bcd60e51b8152600401610cad90613aac565b8061194c5760405162461bcd60e51b815260206004820152601860248201527f436f6e6669726d2073656c6c696e6720656e61626c65642100000000000000006044820152606401610cad565b6015546301000000900460ff16156119a65760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cad565b6015805463ff000000191663010000001790556040517f9392259d24d71f51fdce621059e3218b1271b2a2781a380c58fff224548c193c90600090a150565b6005546001600160a01b03163314611a0f5760405162461bcd60e51b8152600401610cad90613aac565b601554610100900460ff1615611a7b5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610cad565b60004711611ad75760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610cad565b6000611ae230611105565b11611b3e5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610cad565b600954611b599030906001600160a01b0316610fba82611105565b6009546001600160a01b031663f305d7194730611b7581611105565b600080611b8a6005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611bac96959493929190613bc0565b60606040518083038185885af1158015611bca573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bef9190613bfb565b505050565b6005546001600160a01b03163314611c1e5760405162461bcd60e51b8152600401610cad90613aac565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611ca75760405162461bcd60e51b8152600401610cad90613aac565b670de0b6b3a76400006103e8611cbc60025490565b611cc7906005613b49565b611cd19190613b68565b611cdb9190613b68565b811015611d3d5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610cad565b611d4f81670de0b6b3a7640000613b49565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f78565b6005546001600160a01b03163314611dae5760405162461bcd60e51b8152600401610cad90613aac565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611dfa5760405162461bcd60e51b8152600401610cad90613aac565b60005b81811015611bef57600160126000858585818110611e1d57611e1d613c29565b9050602002016020810190611e329190613885565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611e6481613c3f565b915050611dfd565b6005546001600160a01b03163314611e965760405162461bcd60e51b8152600401610cad90613aac565b620186a0611ea360025490565b611eae906001613b49565b611eb89190613b68565b811015611f255760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cad565b6064611f3060025490565b611f3b906001613b49565b611f459190613b68565b811115611faf5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610cad565b600b55565b6005546001600160a01b03163314611fde5760405162461bcd60e51b8152600401610cad90613aac565b6001600160a01b03831615801590611ffe57506001600160a01b03821615155b801561201257506001600160a01b03811615155b61206d5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610cad565b600c80546001600160a01b03199081166001600160a01b03868116918217909355600d80548316868516908117909155600e80549093169385169384179092556040517ff2fb7c89c7a2eaa5411a2b32f2c269abe818edc1c5faaaf6b40fc649025e289090600090a4505050565b6005546001600160a01b031633146121055760405162461bcd60e51b8152600401610cad90613aac565b670de0b6b3a764000061271061211a60025490565b612125906001613b49565b61212f9190613b68565b6121399190613b68565b81101561219c5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e30312560a81b6064820152608401610cad565b6121ae81670de0b6b3a7640000613b49565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f78565b6005546001600160a01b0316331461220d5760405162461bcd60e51b8152600401610cad90613aac565b601b546019819055601c54601a81905561222691613af7565b601855601b54601e819055601c54601f81905561224291613af7565b601d55565b6005546001600160a01b031633146122715760405162461bcd60e51b8152600401610cad90613aac565b6017805460ff19169055565b6013818154811061228d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146122d15760405162461bcd60e51b8152600401610cad90613aac565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561231a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233e9190613b8a565b9050600081116123905760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610cad565b600061271061239f8484613b49565b6123a99190613b68565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015612400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124249190613ba3565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061245f9030908590600190819033904290600401613bc0565b60408051808303816000875af115801561247d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a19190613c58565b5050505050565b6005546001600160a01b031633146124d25760405162461bcd60e51b8152600401610cad90613aac565b6001600160a01b0381166125375760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cad565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146125bd5760405162461bcd60e51b8152600401610cad90613aac565b604051600090339047908381818185875af1925050503d80600081146125ff576040519150601f19603f3d011682016040523d82523d6000602084013e612604565b606091505b50505050565b6001600160a01b03831661266c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cad565b6001600160a01b0382166126cd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cad565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166127545760405162461bcd60e51b8152600401610cad90613c7c565b6001600160a01b03821661277a5760405162461bcd60e51b8152600401610cad90613cc1565b600081116127ca5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cad565b601554610100900460ff1661285d576001600160a01b03831660009081526022602052604090205460ff168061281857506001600160a01b03821660009081526022602052604090205460ff165b61285d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cad565b60115443101580156128765750601554610100900460ff165b15612946576001600160a01b03831660009081526012602052604090205460ff1615806128b057506005546001600160a01b038381169116145b806128c557506001600160a01b03821661dead145b6129465760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610cad565b60155460ff1615612d70576005546001600160a01b0384811691161480159061297d57506005546001600160a01b03838116911614155b801561299457506001600160a01b03821661dead14155b80156129b957506001600160a01b03831660009081526022602052604090205460ff16155b80156129de57506001600160a01b03821660009081526022602052604090205460ff16155b15612d705760175460ff1615612af7576009546001600160a01b03838116911614801590612a1a5750600a546001600160a01b03838116911614155b15612af757612a2a600243613d04565b32600090815260166020526040902054108015612a685750612a4d600243613d04565b6001600160a01b038316600090815260166020526040902054105b612ad25760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610cad565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526024602052604090205460ff168015612b3857506001600160a01b03821660009081526023602052604090205460ff16155b15612bff57600654811115612ba05760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610cad565b600854612bac83611105565b612bb69083613af7565b1115612bfa5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610cad565b612d70565b6001600160a01b03821660009081526024602052604090205460ff168015612c4057506001600160a01b03831660009081526023602052604090205460ff16155b15612cf6576015546301000000900460ff16612c915760405162461bcd60e51b815260206004820152601060248201526f14d95b1b1a5b99c8191a5cd8589b195960821b6044820152606401610cad565b600754811115612bfa5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610cad565b6001600160a01b03821660009081526023602052604090205460ff16612d7057600854612d2283611105565b612d2c9083613af7565b1115612d705760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610cad565b6000612d7b30611105565b600b5490915081108015908190612d9a575060155462010000900460ff165b8015612db05750600a54600160a01b900460ff16155b8015612dd457506001600160a01b03841660009081526024602052604090205460ff165b15612e0257600a805460ff60a01b1916600160a01b179055612df46131d4565b600a805460ff60a01b191690555b6001600160a01b03851660009081526022602052604090205460019060ff1680612e4457506001600160a01b03851660009081526022602052604090205460ff165b15612e4d575060005b600081156131925760115443108015612e7e57506001600160a01b03871660009081526024602052604090205460ff165b8015612ea357506001600160a01b03861660009081526024602052604090205460ff16155b8015612ec857506001600160a01b03861660009081526022602052604090205460ff16155b8015612ed657506000601854115b1561303b576001600160a01b03861660009081526012602052604090205460ff16612fbb576001600160a01b0386166000908152601260205260408120805460ff191660019081179091556014805491929091612f34908490613af7565b9091555050601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612fc8866063613b49565b612fd29190613b68565b9050601854601a5482612fe59190613b49565b612fef9190613b68565b602160008282546130009190613af7565b90915550506018546019546130159083613b49565b61301f9190613b68565b602060008282546130309190613af7565b909155506131749050565b6001600160a01b03861660009081526024602052604090205460ff16801561306557506000601d54115b156130c7576064601d548661307a9190613b49565b6130849190613b68565b9050601d54601f54826130979190613b49565b6130a19190613b68565b602160008282546130b29190613af7565b9091555050601d54601e546130159083613b49565b6001600160a01b03871660009081526024602052604090205460ff1680156130f157506000601854115b15613174576064601854866131069190613b49565b6131109190613b68565b9050601854601a54826131239190613b49565b61312d9190613b68565b6021600082825461313e9190613af7565b90915550506018546019546131539083613b49565b61315d9190613b68565b6020600082825461316e9190613af7565b90915550505b80156131855761318587308361341d565b61318f8186613d04565b94505b61319d87878761341d565b50505050505050565b6001600160a01b0382166000908152602460205260409020805460ff19168215151790556117ba8282613572565b60006131df30611105565b905060006020546021546131f39190613af7565b9050811580613200575080155b15613209575050565b600b5461321790600a613b49565b82111561322f57600b5461322c90600a613b49565b91505b600080600283602154866132439190613b49565b61324d9190613b68565b6132579190613b68565b905061326b6132668286613d04565b6135d5565b6021544790819060009061328190600290613b68565b61328b9087613d04565b6020546132989085613b49565b6132a29190613b68565b90506132ae8183613d04565b60006021819055602055915083158015906132c95750600082115b156132d8576132d8848361372f565b600c5447906001600160a01b031660646132f3836028613b49565b6132fd9190613b68565b604051600081818185875af1925050503d8060008114613339576040519150601f19603f3d011682016040523d82523d6000602084013e61333e565b606091505b5050600d549096506001600160a01b0316606461335c836028613b49565b6133669190613b68565b604051600081818185875af1925050503d80600081146133a2576040519150601f19603f3d011682016040523d82523d6000602084013e6133a7565b606091505b5050600e549096506001600160a01b031660646133c5836014613b49565b6133cf9190613b68565b604051600081818185875af1925050503d806000811461340b576040519150601f19603f3d011682016040523d82523d6000602084013e613410565b606091505b5050505050505050505050565b6001600160a01b0383166134435760405162461bcd60e51b8152600401610cad90613c7c565b6001600160a01b0382166134695760405162461bcd60e51b8152600401610cad90613cc1565b6001600160a01b038316600090815260208190526040902054818110156134e15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cad565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613518908490613af7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161356491815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260236020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061360a5761360a613c29565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136879190613d1b565b8160018151811061369a5761369a613c29565b6001600160a01b0392831660209182029290920101526009546136c0913091168461260a565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906136f9908590600090869030904290600401613d38565b600060405180830381600087803b15801561371357600080fd5b505af1158015613727573d6000803e3d6000fd5b505050505050565b6009546137479030906001600160a01b03168461260a565b600954600f5460405163f305d71960e01b81526001600160a01b039283169263f305d7199285926137879230928992600092839216904290600401613bc0565b60606040518083038185885af11580156137a5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124a19190613bfb565b600080604083850312156137dd57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015613819578581018301518582016040015282016137fd565b8181111561382b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461385657600080fd5b50565b6000806040838503121561386c57600080fd5b823561387781613841565b946020939093013593505050565b60006020828403121561389757600080fd5b81356138a281613841565b9392505050565b6000806000606084860312156138be57600080fd5b83356138c981613841565b925060208401356138d981613841565b929592945050506040919091013590565b6000602082840312156138fc57600080fd5b5035919050565b801515811461385657600080fd5b6000806040838503121561392457600080fd5b823561392f81613841565b9150602083013561393f81613903565b809150509250929050565b60006020828403121561395c57600080fd5b81356138a281613903565b6000806040838503121561397a57600080fd5b823561398581613841565b9150602083013561393f81613841565b600081518084526020808501945080840160005b838110156139ce5781516001600160a01b0316875295820195908201906001016139a9565b509495945050505050565b6020815260006138a26020830184613995565b600080602083850312156139ff57600080fd5b823567ffffffffffffffff80821115613a1757600080fd5b818501915085601f830112613a2b57600080fd5b813581811115613a3a57600080fd5b8660208260051b8501011115613a4f57600080fd5b60209290920196919550909350505050565b600080600060608486031215613a7657600080fd5b8335613a8181613841565b92506020840135613a9181613841565b91506040840135613aa181613841565b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613b0a57613b0a613ae1565b500190565b600181811c90821680613b2357607f821691505b602082108103613b4357634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615613b6357613b63613ae1565b500290565b600082613b8557634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613b9c57600080fd5b5051919050565b600060208284031215613bb557600080fd5b81516138a281613903565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613c1057600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060018201613c5157613c51613ae1565b5060010190565b60008060408385031215613c6b57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613d1657613d16613ae1565b500390565b600060208284031215613d2d57600080fd5b81516138a281613841565b85815284602082015260a060408201526000613d5760a0830186613995565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212207ba5ef23bdaade1371e4b6d1651788eb7b1deaa6519eaa342618640af87c0eca64736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104145760003560e01c806395d89b411161021e578063d85ba06311610123578063efda1165116100ab578063f5648a4f1161007a578063f5648a4f14610c0b578063f637434214610c20578063f771cb6514610c36578063f8b45b0514610c57578063fb002c9714610c6d57600080fd5b8063efda116514610b95578063f11a24d314610bb5578063f202316014610bcb578063f2fde38b14610beb57600080fd5b8063e2f45605116100f2578063e2f4560514610b1f578063e7b71ce214610b35578063e884f26014610b4a578063eb472fc414610b5f578063ee40166e14610b7f57600080fd5b8063d85ba06314610a83578063daf51cd114610a99578063dc3f0d0f14610ab9578063dd62ed3e14610ad957600080fd5b8063b62496f5116101a6578063c18bc19511610175578063c18bc195146109e9578063c80f591a14610a09578063c876d0b914610a29578063c97a72f114610a43578063d257b34f14610a6357600080fd5b8063b62496f514610965578063b822d56614610995578063bbc0c742146109aa578063c0246668146109c957600080fd5b8063a2cb8aac116101ed578063a2cb8aac146108cf578063a457c2d7146108ef578063a62068ce1461090f578063a9059cbb14610925578063b16d78cf1461094557600080fd5b806395d89b41146108635780639a5bd2dd146108785780639a7a23d61461089a578063a28e86d3146108ba57600080fd5b80635a139dd4116103245780637571336a116102ac57806385ecfd281161027b57806385ecfd28146107bf57806388e765ff146107ef5780638da5cb5b146108055780638f70ccf7146108235780638fa037c31461084357600080fd5b80637571336a1461073f5780637e926b4b1461075f57806382aa7c681461077f5780638366e79a1461079f57600080fd5b80636a486a8e116102f35780636a486a8e146106be5780636b0a894c146106d45780636ddd1713146106ea57806370a082311461070a578063751039fc1461072a57600080fd5b80635a139dd4146106525780635bb988c91461066857806366ca9b831461068857806366d602ae146106a857600080fd5b80631a8145bb116103a7578063395093511161037657806339509351146105cb578063452ed4f1146105eb5780634a62bb651461060b5780634f77f6c01461062557806358a6d5311461063b57600080fd5b80631a8145bb1461055957806323b872dd1461056f5780632be32b611461058f578063313ce567146105af57600080fd5b80630a0f1c1d116103e35780630a0f1c1d146104d55780630dbd397c146104f557806310d5de531461051457806318160ddd1461054457600080fd5b806302dbd8f81461042057806306fdde03146104425780630758d9241461046d578063095ea7b3146104a557600080fd5b3661041b57005b600080fd5b34801561042c57600080fd5b5061044061043b3660046137ca565b610c83565b005b34801561044e57600080fd5b50610457610d23565b60405161046491906137ec565b60405180910390f35b34801561047957600080fd5b5060095461048d906001600160a01b031681565b6040516001600160a01b039091168152602001610464565b3480156104b157600080fd5b506104c56104c0366004613859565b610db5565b6040519015158152602001610464565b3480156104e157600080fd5b50600c5461048d906001600160a01b031681565b34801561050157600080fd5b506010545b604051908152602001610464565b34801561052057600080fd5b506104c561052f366004613885565b60236020526000908152604090205460ff1681565b34801561055057600080fd5b50600254610506565b34801561056557600080fd5b5061050660215481565b34801561057b57600080fd5b506104c561058a3660046138a9565b610dcb565b34801561059b57600080fd5b506104406105aa3660046138ea565b610e75565b3480156105bb57600080fd5b5060405160128152602001610464565b3480156105d757600080fd5b506104c56105e6366004613859565b610f83565b3480156105f757600080fd5b50600a5461048d906001600160a01b031681565b34801561061757600080fd5b506015546104c59060ff1681565b34801561063157600080fd5b50610506601e5481565b34801561064757600080fd5b5060115443106104c5565b34801561065e57600080fd5b5061050660195481565b34801561067457600080fd5b50610440610683366004613885565b610fbf565b34801561069457600080fd5b506104406106a33660046137ca565b611072565b3480156106b457600080fd5b5061050660075481565b3480156106ca57600080fd5b50610506601d5481565b3480156106e057600080fd5b5061050660145481565b3480156106f657600080fd5b506015546104c59062010000900460ff1681565b34801561071657600080fd5b50610506610725366004613885565b611105565b34801561073657600080fd5b50610440611120565b34801561074b57600080fd5b5061044061075a366004613911565b611156565b34801561076b57600080fd5b5061044061077a36600461394a565b61121e565b34801561078b57600080fd5b5061044061079a3660046138ea565b6112e0565b3480156107ab57600080fd5b506104c56107ba366004613967565b611414565b3480156107cb57600080fd5b506104c56107da366004613885565b60126020526000908152604090205460ff1681565b3480156107fb57600080fd5b5061050660065481565b34801561081157600080fd5b506005546001600160a01b031661048d565b34801561082f57600080fd5b5061044061083e36600461394a565b61164e565b34801561084f57600080fd5b50600e5461048d906001600160a01b031681565b34801561086f57600080fd5b50610457611692565b34801561088457600080fd5b5061088d6116a1565b60405161046491906139d9565b3480156108a657600080fd5b506104406108b5366004613911565b611702565b3480156108c657600080fd5b506104406117f6565b3480156108db57600080fd5b50600f5461048d906001600160a01b031681565b3480156108fb57600080fd5b506104c561090a366004613859565b61182f565b34801561091b57600080fd5b5061050660115481565b34801561093157600080fd5b506104c5610940366004613859565b6118c8565b34801561095157600080fd5b5061044061096036600461394a565b6118d5565b34801561097157600080fd5b506104c5610980366004613885565b60246020526000908152604090205460ff1681565b3480156109a157600080fd5b506104406119e5565b3480156109b657600080fd5b506015546104c590610100900460ff1681565b3480156109d557600080fd5b506104406109e4366004613911565b611bf4565b3480156109f557600080fd5b50610440610a043660046138ea565b611c7d565b348015610a1557600080fd5b50610440610a24366004613885565b611d84565b348015610a3557600080fd5b506017546104c59060ff1681565b348015610a4f57600080fd5b50610440610a5e3660046139ec565b611dd0565b348015610a6f57600080fd5b50610440610a7e3660046138ea565b611e6c565b348015610a8f57600080fd5b5061050660185481565b348015610aa557600080fd5b50610440610ab4366004613a61565b611fb4565b348015610ac557600080fd5b50610440610ad43660046138ea565b6120db565b348015610ae557600080fd5b50610506610af4366004613967565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b2b57600080fd5b50610506600b5481565b348015610b4157600080fd5b506104406121e3565b348015610b5657600080fd5b50610440612247565b348015610b6b57600080fd5b5061048d610b7a3660046138ea565b61227d565b348015610b8b57600080fd5b5061050660105481565b348015610ba157600080fd5b50610440610bb03660046138ea565b6122a7565b348015610bc157600080fd5b50610506601a5481565b348015610bd757600080fd5b50600d5461048d906001600160a01b031681565b348015610bf757600080fd5b50610440610c06366004613885565b6124a8565b348015610c1757600080fd5b50610440612593565b348015610c2c57600080fd5b50610506601f5481565b348015610c4257600080fd5b506015546104c5906301000000900460ff1681565b348015610c6357600080fd5b5061050660085481565b348015610c7957600080fd5b5061050660205481565b6005546001600160a01b03163314610cb65760405162461bcd60e51b8152600401610cad90613aac565b60405180910390fd5b601e829055601f819055610cca8183613af7565b601d81905560051015610d1f5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610cad565b5050565b606060038054610d3290613b0f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5e90613b0f565b8015610dab5780601f10610d8057610100808354040283529160200191610dab565b820191906000526020600020905b815481529060010190602001808311610d8e57829003601f168201915b5050505050905090565b6000610dc233848461260a565b50600192915050565b6000610dd884848461272e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e5d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610cad565b610e6a853385840361260a565b506001949350505050565b6005546001600160a01b03163314610e9f5760405162461bcd60e51b8152600401610cad90613aac565b670de0b6b3a7640000612710610eb460025490565b610ebf906001613b49565b610ec99190613b68565b610ed39190613b68565b811015610f355760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610cad565b610f4781670de0b6b3a7640000613b49565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dc2918590610fba908690613af7565b61260a565b6005546001600160a01b03163314610fe95760405162461bcd60e51b8152600401610cad90613aac565b6001600160a01b03811660009081526012602052604090205460ff166110515760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610cad565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6005546001600160a01b0316331461109c5760405162461bcd60e51b8152600401610cad90613aac565b6019829055601a8190556110b08183613af7565b601881905560051015610d1f5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610cad565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461114a5760405162461bcd60e51b8152600401610cad90613aac565b6015805460ff19169055565b6005546001600160a01b031633146111805760405162461bcd60e51b8152600401610cad90613aac565b806111f357600a546001600160a01b03908116908316036111f35760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610cad565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112485760405162461bcd60e51b8152600401610cad90613aac565b806112955760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610cad565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b0316331461130a5760405162461bcd60e51b8152600401610cad90613aac565b601554610100900460ff16156113625760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610cad565b600a8111156113c35760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610cad565b6015805462ffff001916620101001790554360108190556113e5908290613af7565b6011556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146114415760405162461bcd60e51b8152600401610cad90613aac565b6001600160a01b0383166114975760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610cad565b6001600160a01b038316301415806114b75750601554610100900460ff16155b6115205760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610cad565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158b9190613b8a565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156115de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116029190613ba3565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116785760405162461bcd60e51b8152600401610cad90613aac565b601580549115156101000261ff0019909216919091179055565b606060048054610d3290613b0f565b60606013805480602002602001604051908101604052809291908181526020018280548015610dab57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116116db575050505050905090565b6005546001600160a01b0316331461172c5760405162461bcd60e51b8152600401610cad90613aac565b600a546001600160a01b03908116908316036117b05760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cad565b6117ba82826131a6565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118205760405162461bcd60e51b8152600401610cad90613aac565b6015805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118b15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cad565b6118be338585840361260a565b5060019392505050565b6000610dc233848461272e565b6005546001600160a01b031633146118ff5760405162461bcd60e51b8152600401610cad90613aac565b8061194c5760405162461bcd60e51b815260206004820152601860248201527f436f6e6669726d2073656c6c696e6720656e61626c65642100000000000000006044820152606401610cad565b6015546301000000900460ff16156119a65760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cad565b6015805463ff000000191663010000001790556040517f9392259d24d71f51fdce621059e3218b1271b2a2781a380c58fff224548c193c90600090a150565b6005546001600160a01b03163314611a0f5760405162461bcd60e51b8152600401610cad90613aac565b601554610100900460ff1615611a7b5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610cad565b60004711611ad75760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610cad565b6000611ae230611105565b11611b3e5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610cad565b600954611b599030906001600160a01b0316610fba82611105565b6009546001600160a01b031663f305d7194730611b7581611105565b600080611b8a6005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611bac96959493929190613bc0565b60606040518083038185885af1158015611bca573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bef9190613bfb565b505050565b6005546001600160a01b03163314611c1e5760405162461bcd60e51b8152600401610cad90613aac565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611ca75760405162461bcd60e51b8152600401610cad90613aac565b670de0b6b3a76400006103e8611cbc60025490565b611cc7906005613b49565b611cd19190613b68565b611cdb9190613b68565b811015611d3d5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610cad565b611d4f81670de0b6b3a7640000613b49565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f78565b6005546001600160a01b03163314611dae5760405162461bcd60e51b8152600401610cad90613aac565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611dfa5760405162461bcd60e51b8152600401610cad90613aac565b60005b81811015611bef57600160126000858585818110611e1d57611e1d613c29565b9050602002016020810190611e329190613885565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611e6481613c3f565b915050611dfd565b6005546001600160a01b03163314611e965760405162461bcd60e51b8152600401610cad90613aac565b620186a0611ea360025490565b611eae906001613b49565b611eb89190613b68565b811015611f255760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cad565b6064611f3060025490565b611f3b906001613b49565b611f459190613b68565b811115611faf5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610cad565b600b55565b6005546001600160a01b03163314611fde5760405162461bcd60e51b8152600401610cad90613aac565b6001600160a01b03831615801590611ffe57506001600160a01b03821615155b801561201257506001600160a01b03811615155b61206d5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610cad565b600c80546001600160a01b03199081166001600160a01b03868116918217909355600d80548316868516908117909155600e80549093169385169384179092556040517ff2fb7c89c7a2eaa5411a2b32f2c269abe818edc1c5faaaf6b40fc649025e289090600090a4505050565b6005546001600160a01b031633146121055760405162461bcd60e51b8152600401610cad90613aac565b670de0b6b3a764000061271061211a60025490565b612125906001613b49565b61212f9190613b68565b6121399190613b68565b81101561219c5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e30312560a81b6064820152608401610cad565b6121ae81670de0b6b3a7640000613b49565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f78565b6005546001600160a01b0316331461220d5760405162461bcd60e51b8152600401610cad90613aac565b601b546019819055601c54601a81905561222691613af7565b601855601b54601e819055601c54601f81905561224291613af7565b601d55565b6005546001600160a01b031633146122715760405162461bcd60e51b8152600401610cad90613aac565b6017805460ff19169055565b6013818154811061228d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146122d15760405162461bcd60e51b8152600401610cad90613aac565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561231a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233e9190613b8a565b9050600081116123905760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610cad565b600061271061239f8484613b49565b6123a99190613b68565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015612400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124249190613ba3565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061245f9030908590600190819033904290600401613bc0565b60408051808303816000875af115801561247d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a19190613c58565b5050505050565b6005546001600160a01b031633146124d25760405162461bcd60e51b8152600401610cad90613aac565b6001600160a01b0381166125375760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cad565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146125bd5760405162461bcd60e51b8152600401610cad90613aac565b604051600090339047908381818185875af1925050503d80600081146125ff576040519150601f19603f3d011682016040523d82523d6000602084013e612604565b606091505b50505050565b6001600160a01b03831661266c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cad565b6001600160a01b0382166126cd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cad565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166127545760405162461bcd60e51b8152600401610cad90613c7c565b6001600160a01b03821661277a5760405162461bcd60e51b8152600401610cad90613cc1565b600081116127ca5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cad565b601554610100900460ff1661285d576001600160a01b03831660009081526022602052604090205460ff168061281857506001600160a01b03821660009081526022602052604090205460ff165b61285d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cad565b60115443101580156128765750601554610100900460ff165b15612946576001600160a01b03831660009081526012602052604090205460ff1615806128b057506005546001600160a01b038381169116145b806128c557506001600160a01b03821661dead145b6129465760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610cad565b60155460ff1615612d70576005546001600160a01b0384811691161480159061297d57506005546001600160a01b03838116911614155b801561299457506001600160a01b03821661dead14155b80156129b957506001600160a01b03831660009081526022602052604090205460ff16155b80156129de57506001600160a01b03821660009081526022602052604090205460ff16155b15612d705760175460ff1615612af7576009546001600160a01b03838116911614801590612a1a5750600a546001600160a01b03838116911614155b15612af757612a2a600243613d04565b32600090815260166020526040902054108015612a685750612a4d600243613d04565b6001600160a01b038316600090815260166020526040902054105b612ad25760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610cad565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526024602052604090205460ff168015612b3857506001600160a01b03821660009081526023602052604090205460ff16155b15612bff57600654811115612ba05760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610cad565b600854612bac83611105565b612bb69083613af7565b1115612bfa5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610cad565b612d70565b6001600160a01b03821660009081526024602052604090205460ff168015612c4057506001600160a01b03831660009081526023602052604090205460ff16155b15612cf6576015546301000000900460ff16612c915760405162461bcd60e51b815260206004820152601060248201526f14d95b1b1a5b99c8191a5cd8589b195960821b6044820152606401610cad565b600754811115612bfa5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610cad565b6001600160a01b03821660009081526023602052604090205460ff16612d7057600854612d2283611105565b612d2c9083613af7565b1115612d705760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610cad565b6000612d7b30611105565b600b5490915081108015908190612d9a575060155462010000900460ff165b8015612db05750600a54600160a01b900460ff16155b8015612dd457506001600160a01b03841660009081526024602052604090205460ff165b15612e0257600a805460ff60a01b1916600160a01b179055612df46131d4565b600a805460ff60a01b191690555b6001600160a01b03851660009081526022602052604090205460019060ff1680612e4457506001600160a01b03851660009081526022602052604090205460ff165b15612e4d575060005b600081156131925760115443108015612e7e57506001600160a01b03871660009081526024602052604090205460ff165b8015612ea357506001600160a01b03861660009081526024602052604090205460ff16155b8015612ec857506001600160a01b03861660009081526022602052604090205460ff16155b8015612ed657506000601854115b1561303b576001600160a01b03861660009081526012602052604090205460ff16612fbb576001600160a01b0386166000908152601260205260408120805460ff191660019081179091556014805491929091612f34908490613af7565b9091555050601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612fc8866063613b49565b612fd29190613b68565b9050601854601a5482612fe59190613b49565b612fef9190613b68565b602160008282546130009190613af7565b90915550506018546019546130159083613b49565b61301f9190613b68565b602060008282546130309190613af7565b909155506131749050565b6001600160a01b03861660009081526024602052604090205460ff16801561306557506000601d54115b156130c7576064601d548661307a9190613b49565b6130849190613b68565b9050601d54601f54826130979190613b49565b6130a19190613b68565b602160008282546130b29190613af7565b9091555050601d54601e546130159083613b49565b6001600160a01b03871660009081526024602052604090205460ff1680156130f157506000601854115b15613174576064601854866131069190613b49565b6131109190613b68565b9050601854601a54826131239190613b49565b61312d9190613b68565b6021600082825461313e9190613af7565b90915550506018546019546131539083613b49565b61315d9190613b68565b6020600082825461316e9190613af7565b90915550505b80156131855761318587308361341d565b61318f8186613d04565b94505b61319d87878761341d565b50505050505050565b6001600160a01b0382166000908152602460205260409020805460ff19168215151790556117ba8282613572565b60006131df30611105565b905060006020546021546131f39190613af7565b9050811580613200575080155b15613209575050565b600b5461321790600a613b49565b82111561322f57600b5461322c90600a613b49565b91505b600080600283602154866132439190613b49565b61324d9190613b68565b6132579190613b68565b905061326b6132668286613d04565b6135d5565b6021544790819060009061328190600290613b68565b61328b9087613d04565b6020546132989085613b49565b6132a29190613b68565b90506132ae8183613d04565b60006021819055602055915083158015906132c95750600082115b156132d8576132d8848361372f565b600c5447906001600160a01b031660646132f3836028613b49565b6132fd9190613b68565b604051600081818185875af1925050503d8060008114613339576040519150601f19603f3d011682016040523d82523d6000602084013e61333e565b606091505b5050600d549096506001600160a01b0316606461335c836028613b49565b6133669190613b68565b604051600081818185875af1925050503d80600081146133a2576040519150601f19603f3d011682016040523d82523d6000602084013e6133a7565b606091505b5050600e549096506001600160a01b031660646133c5836014613b49565b6133cf9190613b68565b604051600081818185875af1925050503d806000811461340b576040519150601f19603f3d011682016040523d82523d6000602084013e613410565b606091505b5050505050505050505050565b6001600160a01b0383166134435760405162461bcd60e51b8152600401610cad90613c7c565b6001600160a01b0382166134695760405162461bcd60e51b8152600401610cad90613cc1565b6001600160a01b038316600090815260208190526040902054818110156134e15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cad565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613518908490613af7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161356491815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260236020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061360a5761360a613c29565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136879190613d1b565b8160018151811061369a5761369a613c29565b6001600160a01b0392831660209182029290920101526009546136c0913091168461260a565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906136f9908590600090869030904290600401613d38565b600060405180830381600087803b15801561371357600080fd5b505af1158015613727573d6000803e3d6000fd5b505050505050565b6009546137479030906001600160a01b03168461260a565b600954600f5460405163f305d71960e01b81526001600160a01b039283169263f305d7199285926137879230928992600092839216904290600401613bc0565b60606040518083038185885af11580156137a5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124a19190613bfb565b600080604083850312156137dd57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015613819578581018301518582016040015282016137fd565b8181111561382b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461385657600080fd5b50565b6000806040838503121561386c57600080fd5b823561387781613841565b946020939093013593505050565b60006020828403121561389757600080fd5b81356138a281613841565b9392505050565b6000806000606084860312156138be57600080fd5b83356138c981613841565b925060208401356138d981613841565b929592945050506040919091013590565b6000602082840312156138fc57600080fd5b5035919050565b801515811461385657600080fd5b6000806040838503121561392457600080fd5b823561392f81613841565b9150602083013561393f81613903565b809150509250929050565b60006020828403121561395c57600080fd5b81356138a281613903565b6000806040838503121561397a57600080fd5b823561398581613841565b9150602083013561393f81613841565b600081518084526020808501945080840160005b838110156139ce5781516001600160a01b0316875295820195908201906001016139a9565b509495945050505050565b6020815260006138a26020830184613995565b600080602083850312156139ff57600080fd5b823567ffffffffffffffff80821115613a1757600080fd5b818501915085601f830112613a2b57600080fd5b813581811115613a3a57600080fd5b8660208260051b8501011115613a4f57600080fd5b60209290920196919550909350505050565b600080600060608486031215613a7657600080fd5b8335613a8181613841565b92506020840135613a9181613841565b91506040840135613aa181613841565b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613b0a57613b0a613ae1565b500190565b600181811c90821680613b2357607f821691505b602082108103613b4357634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615613b6357613b63613ae1565b500290565b600082613b8557634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613b9c57600080fd5b5051919050565b600060208284031215613bb557600080fd5b81516138a281613903565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613c1057600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060018201613c5157613c51613ae1565b5060010190565b60008060408385031215613c6b57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613d1657613d16613ae1565b500390565b600060208284031215613d2d57600080fd5b81516138a281613841565b85815284602082015260a060408201526000613d5760a0830186613995565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212207ba5ef23bdaade1371e4b6d1651788eb7b1deaa6519eaa342618640af87c0eca64736f6c634300080d0033

Deployed Bytecode Sourcemap

10900:22486:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19817:342;;;;;;;;;;-1:-1:-1;19817:342:0;;;;;:::i;:::-;;:::i;:::-;;4252:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11052:27;;;;;;;;;;-1:-1:-1;11052:27:0;;;;-1:-1:-1;;;;;11052:27:0;;;;;;-1:-1:-1;;;;;1051:32:1;;;1033:51;;1021:2;1006:18;11052:27:0;869:221:1;5307:210:0;;;;;;;;;;-1:-1:-1;5307:210:0;;;;;:::i;:::-;;:::i;:::-;;;1716:14:1;;1709:22;1691:41;;1679:2;1664:18;5307:210:0;1551:187:1;11186:33:0;;;;;;;;;;-1:-1:-1;11186:33:0;;;;-1:-1:-1;;;;;11186:33:0;;;25914:108;;;;;;;;;;-1:-1:-1;25996:18:0;;25914:108;;;2097:25:1;;;2085:2;2070:18;25914:108:0;1951:177:1;12572:63:0;;;;;;;;;;-1:-1:-1;12572:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4573:108;;;;;;;;;;-1:-1:-1;4661:12:0;;4573:108;;12390:33;;;;;;;;;;;;;;;;5525:529;;;;;;;;;;-1:-1:-1;5525:529:0;;;;;:::i;:::-;;:::i;16839:312::-;;;;;;;;;;-1:-1:-1;16839:312:0;;;;;:::i;:::-;;:::i;4472:93::-;;;;;;;;;;-1:-1:-1;4472:93:0;;4555:2;3173:36:1;;3161:2;3146:18;4472:93:0;3031:184:1;6062:297:0;;;;;;;;;;-1:-1:-1;6062:297:0;;;;;:::i;:::-;;:::i;11086:21::-;;;;;;;;;;-1:-1:-1;11086:21:0;;;;-1:-1:-1;;;;;11086:21:0;;;11583:33;;;;;;;;;;-1:-1:-1;11583:33:0;;;;;;;;12270:32;;;;;;;;;;;;;;;;25785:121;;;;;;;;;;-1:-1:-1;25880:18:0;;25865:12;:33;25785:121;;12069:31;;;;;;;;;;;;;;;;16295:181;;;;;;;;;;-1:-1:-1;16295:181:0;;;;;:::i;:::-;;:::i;19474:335::-;;;;;;;;;;-1:-1:-1;19474:335:0;;;;;:::i;:::-;;:::i;10984:28::-;;;;;;;;;;;;;;;;12235;;;;;;;;;;;;;;;;11549:25;;;;;;;;;;;;;;;;11663:31;;;;;;;;;;-1:-1:-1;11663:31:0;;;;;;;;;;;4689:177;;;;;;;;;;-1:-1:-1;4689:177:0;;;;;:::i;:::-;;:::i;31119:84::-;;;;;;;;;;;;;:::i;18527:334::-;;;;;;;;;;-1:-1:-1;18527:334:0;;;;;:::i;:::-;;:::i;8783:265::-;;;;;;;;;;-1:-1:-1;8783:265:0;;;;;:::i;:::-;;:::i;32919:464::-;;;;;;;;;;-1:-1:-1;32919:464:0;;;;;:::i;:::-;;:::i;29422:567::-;;;;;;;;;;-1:-1:-1;29422:567:0;;;;;:::i;:::-;;:::i;11464:43::-;;;;;;;;;;-1:-1:-1;11464:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10950:27;;;;;;;;;;;;;;;;8569:79;;;;;;;;;;-1:-1:-1;8634:6:0;;-1:-1:-1;;;;;8634:6:0;8569:79;;32816:95;;;;;;;;;;-1:-1:-1;32816:95:0;;;;;:::i;:::-;;:::i;11266:33::-;;;;;;;;;;-1:-1:-1;11266:33:0;;;;-1:-1:-1;;;;;11266:33:0;;;4360:104;;;;;;;;;;;;;:::i;16183:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18869:353::-;;;;;;;;;;-1:-1:-1;18869:353:0;;;;;:::i;:::-;;:::i;31211:84::-;;;;;;;;;;;;;:::i;11306:32::-;;;;;;;;;;-1:-1:-1;11306:32:0;;;;-1:-1:-1;;;;;11306:32:0;;;6367:482;;;;;;;;;;-1:-1:-1;6367:482:0;;;;;:::i;:::-;;:::i;11424:33::-;;;;;;;;;;;;;;;;4874:216;;;;;;;;;;-1:-1:-1;4874:216:0;;;;;:::i;:::-;;:::i;31350:287::-;;;;;;;;;;-1:-1:-1;31350:287:0;;;;;:::i;:::-;;:::i;12793:57::-;;;;;;;;;;-1:-1:-1;12793:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32029:779;;;;;;;;;;;;;:::i;11623:33::-;;;;;;;;;;-1:-1:-1;11623:33:0;;;;;;;;;;;20167:182;;;;;;;;;;-1:-1:-1;20167:182:0;;;;;:::i;:::-;;:::i;17484:311::-;;;;;;;;;;-1:-1:-1;17484:311:0;;;;;:::i;:::-;;:::i;30916:151::-;;;;;;;;;;-1:-1:-1;30916:151:0;;;;;:::i;:::-;;:::i;11987:39::-;;;;;;;;;;-1:-1:-1;11987:39:0;;;;;;;;16484:188;;;;;;;;;;-1:-1:-1;16484:188:0;;;;;:::i;:::-;;:::i;17865:425::-;;;;;;;;;;-1:-1:-1;17865:425:0;;;;;:::i;:::-;;:::i;12035:27::-;;;;;;;;;;;;;;;;30252:656;;;;;;;;;;-1:-1:-1;30252:656:0;;;;;:::i;:::-;;:::i;17159:317::-;;;;;;;;;;-1:-1:-1;17159:317:0;;;;;:::i;:::-;;:::i;5098:201::-;;;;;;;;;;-1:-1:-1;5098:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5264:18:0;;;5232:7;5264:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5098:201;11144:33;;;;;;;;;;;;;;;;31645:376;;;;;;;;;;;;;:::i;16733:98::-;;;;;;;;;;;;;:::i;11514:28::-;;;;;;;;;;-1:-1:-1;11514:28:0;;;;;:::i;:::-;;:::i;11347:37::-;;;;;;;;;;;;;;;;27128:665;;;;;;;;;;-1:-1:-1;27128:665:0;;;;;:::i;:::-;;:::i;12107:30::-;;;;;;;;;;;;;;;;11226:33;;;;;;;;;;-1:-1:-1;11226:33:0;;;;-1:-1:-1;;;;;11226:33:0;;;9056:281;;;;;;;;;;-1:-1:-1;9056:281:0;;;;;:::i;:::-;;:::i;30059:185::-;;;;;;;;;;;;;:::i;12309:31::-;;;;;;;;;;;;;;;;11766:34;;;;;;;;;;-1:-1:-1;11766:34:0;;;;;;;;;;;11019:24;;;;;;;;;;;;;;;;12349:34;;;;;;;;;;;;;;;;19817:342;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;;;;;;;;;19941:17:::1;:34:::0;;;19986:16:::1;:32:::0;;;20045:36:::1;20005:13:::0;19961:14;20045:36:::1;:::i;:::-;20029:13;:52:::0;;;20117:1:::1;-1:-1:-1::0;20100:18:0::1;20092:59;;;::::0;-1:-1:-1;;;20092:59:0;;7083:2:1;20092:59:0::1;::::0;::::1;7065:21:1::0;7122:2;7102:18;;;7095:30;7161;7141:18;;;7134:58;7209:18;;20092:59:0::1;6881:352:1::0;20092:59:0::1;19817:342:::0;;:::o;4252:100::-;4306:13;4339:5;4332:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4252:100;:::o;5307:210::-;5426:4;5448:39;402:10;5471:7;5480:6;5448:8;:39::i;:::-;-1:-1:-1;5505:4:0;5307:210;;;;:::o;5525:529::-;5665:4;5682:36;5692:6;5700:9;5711:6;5682:9;:36::i;:::-;-1:-1:-1;;;;;5758:19:0;;5731:24;5758:19;;;:11;:19;;;;;;;;402:10;5758:33;;;;;;;;5824:26;;;;5802:116;;;;-1:-1:-1;;;5802:116:0;;7825:2:1;5802:116:0;;;7807:21:1;7864:2;7844:18;;;7837:30;7903:34;7883:18;;;7876:62;-1:-1:-1;;;7954:18:1;;;7947:38;8002:19;;5802:116:0;7623:404:1;5802:116:0;5954:57;5963:6;402:10;6004:6;5985:16;:25;5954:8;:57::i;:::-;-1:-1:-1;6042:4:0;;5525:529;-1:-1:-1;;;;5525:529:0:o;16839:312::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;16977:4:::1;16968:5;16947:13;4661:12:::0;;;4573:108;16947:13:::1;:17;::::0;16963:1:::1;16947:17;:::i;:::-;16946:27;;;;:::i;:::-;16945:36;;;;:::i;:::-;16935:6;:46;;16913:138;;;::::0;-1:-1:-1;;;16913:138:0;;8629:2:1;16913:138:0::1;::::0;::::1;8611:21:1::0;8668:2;8648:18;;;8641:30;8707:34;8687:18;;;8680:62;-1:-1:-1;;;8758:18:1;;;8751:40;8808:19;;16913:138:0::1;8427:406:1::0;16913:138:0::1;17077:17;:6:::0;17087::::1;17077:17;:::i;:::-;17062:12;:32:::0;;;17110:33:::1;::::0;2097:25:1;;;17110:33:0::1;::::0;2085:2:1;2070:18;17110:33:0::1;;;;;;;;16839:312:::0;:::o;6062:297::-;402:10;6177:4;6271:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6271:34:0;;;;;;;;;;6177:4;;6199:130;;6249:7;;6271:47;;6308:10;;6271:47;:::i;:::-;6199:8;:130::i;16295:181::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16376:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;16368:62;;;::::0;-1:-1:-1;;;16368:62:0;;9040:2:1;16368:62:0::1;::::0;::::1;9022:21:1::0;9079:2;9059:18;;;9052:30;9118:32;9098:18;;;9091:60;9168:18;;16368:62:0::1;8838:354:1::0;16368:62:0::1;-1:-1:-1::0;;;;;16441:19:0::1;16463:5;16441:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;16441:27:0::1;::::0;;16295:181::o;19474:335::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;19597:16:::1;:33:::0;;;19641:15:::1;:31:::0;;;19698:34:::1;19659:13:::0;19616:14;19698:34:::1;:::i;:::-;19683:12;:49:::0;;;19767:1:::1;-1:-1:-1::0;19751:17:0::1;19743:58;;;::::0;-1:-1:-1;;;19743:58:0;;7083:2:1;19743:58:0::1;::::0;::::1;7065:21:1::0;7122:2;7102:18;;;7095:30;7161;7141:18;;;7134:58;7209:18;;19743:58:0::1;6881:352:1::0;4689:177:0;-1:-1:-1;;;;;4840:18:0;4808:7;4840:18;;;;;;;;;;;;4689:177::o;31119:84::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;31173:14:::1;:22:::0;;-1:-1:-1;;31173:22:0::1;::::0;;31119:84::o;18527:334::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;18647:4:::1;18642:155;;18704:6;::::0;-1:-1:-1;;;;;18704:6:0;;::::1;18694:16:::0;;::::1;::::0;18668:117:::1;;;::::0;-1:-1:-1;;;18668:117:0;;9399:2:1;18668:117:0::1;::::0;::::1;9381:21:1::0;9438:2;9418:18;;;9411:30;9477:34;9457:18;;;9450:62;-1:-1:-1;;;9528:18:1;;;9521:37;9575:19;;18668:117:0::1;9197:403:1::0;18668:117:0::1;-1:-1:-1::0;;;;;18807:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18807:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18527:334::o;8783:265::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;8910:15:::1;8902:52;;;::::0;-1:-1:-1;;;8902:52:0;;9807:2:1;8902:52:0::1;::::0;::::1;9789:21:1::0;9846:2;9826:18;;;9819:30;9885:26;9865:18;;;9858:54;9929:18;;8902:52:0::1;9605:348:1::0;8902:52:0::1;8991:6;::::0;8970:40:::1;::::0;9007:1:::1;::::0;-1:-1:-1;;;;;8991:6:0::1;::::0;8970:40:::1;::::0;9007:1;;8970:40:::1;-1:-1:-1::0;9021:6:0::1;:19:::0;;-1:-1:-1;;;;;;9021:19:0::1;::::0;;8783:265::o;32919:464::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;33007:13:::1;::::0;::::1;::::0;::::1;;;33006:14;32998:50;;;::::0;-1:-1:-1;;;32998:50:0;;10160:2:1;32998:50:0::1;::::0;::::1;10142:21:1::0;10199:2;10179:18;;;10172:30;10238:25;10218:18;;;10211:53;10281:18;;32998:50:0::1;9958:347:1::0;32998:50:0::1;33101:2;33081:16;:22;;33059:111;;;::::0;-1:-1:-1;;;33059:111:0;;10512:2:1;33059:111:0::1;::::0;::::1;10494:21:1::0;10551:2;10531:18;;;10524:30;10590:34;10570:18;;;10563:62;-1:-1:-1;;;10641:18:1;;;10634:37;10688:19;;33059:111:0::1;10310:403:1::0;33059:111:0::1;33181:13;:20:::0;;-1:-1:-1;;33212:18:0;;;;;33262:12:::1;33241:18;:33:::0;;;33306:37:::1;::::0;33327:16;;33306:37:::1;:::i;:::-;33285:18;:58:::0;33359:16:::1;::::0;::::1;::::0;;;::::1;32919:464:::0;:::o;29422:567::-;8696:6;;29536:10;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29572:20:0;::::1;29564:59;;;::::0;-1:-1:-1;;;29564:59:0;;10920:2:1;29564:59:0::1;::::0;::::1;10902:21:1::0;10959:2;10939:18;;;10932:30;10998:28;10978:18;;;10971:56;11044:18;;29564:59:0::1;10718:350:1::0;29564:59:0::1;-1:-1:-1::0;;;;;29656:23:0;::::1;29674:4;29656:23;;::::0;:41:::1;;-1:-1:-1::0;29684:13:0::1;::::0;::::1;::::0;::::1;;;29683:14;29656:41;29634:143;;;::::0;-1:-1:-1;;;29634:143:0;;11275:2:1;29634:143:0::1;::::0;::::1;11257:21:1::0;11314:2;11294:18;;;11287:30;11353:34;11333:18;;;11326:62;-1:-1:-1;;;11404:18:1;;;11397:50;11464:19;;29634:143:0::1;11073:416:1::0;29634:143:0::1;29815:39;::::0;-1:-1:-1;;;29815:39:0;;29848:4:::1;29815:39;::::0;::::1;1033:51:1::0;29788:24:0::1;::::0;-1:-1:-1;;;;;29815:24:0;::::1;::::0;::::1;::::0;1006:18:1;;29815:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29873:46;::::0;-1:-1:-1;;;29873:46:0;;-1:-1:-1;;;;;11875:32:1;;;29873:46:0::1;::::0;::::1;11857:51:1::0;11924:18;;;11917:34;;;29788:66:0;;-1:-1:-1;29873:23:0;;::::1;::::0;::::1;::::0;11830:18:1;;29873:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29935;::::0;;-1:-1:-1;;;;;11875:32:1;;11857:51;;11939:2;11924:18;;11917:34;;;29865:54:0;;-1:-1:-1;29935:46:0::1;::::0;11830:18:1;29935:46:0::1;;;;;;;29553:436;29422:567:::0;;;;:::o;32816:95::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;32880:13:::1;:23:::0;;;::::1;;;;-1:-1:-1::0;;32880:23:0;;::::1;::::0;;;::::1;::::0;;32816:95::o;4360:104::-;4416:13;4449:7;4442:14;;;;;:::i;16183:104::-;16232:16;16268:11;16261:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16261:18:0;;;;;;;;;;;;;;;;;;;;;;16183:104;:::o;18869:353::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;19015:6:::1;::::0;-1:-1:-1;;;;;19015:6:0;;::::1;19007:14:::0;;::::1;::::0;18985:121:::1;;;::::0;-1:-1:-1;;;18985:121:0;;12414:2:1;18985:121:0::1;::::0;::::1;12396:21:1::0;12453:2;12433:18;;;12426:30;12492:34;12472:18;;;12465:62;12563:27;12543:18;;;12536:55;12608:19;;18985:121:0::1;12212:421:1::0;18985:121:0::1;19117:41;19146:4;19152:5;19117:28;:41::i;:::-;19174:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;19174:40:0;::::1;::::0;::::1;::::0;;;::::1;18869:353:::0;;:::o;31211:84::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;31266:14:::1;:21:::0;;-1:-1:-1;;31266:21:0::1;31283:4;31266:21;::::0;;31211:84::o;6367:482::-;402:10;6487:4;6536:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6536:34:0;;;;;;;;;;6603:35;;;;6581:122;;;;-1:-1:-1;;;6581:122:0;;12840:2:1;6581:122:0;;;12822:21:1;12879:2;12859:18;;;12852:30;12918:34;12898:18;;;12891:62;-1:-1:-1;;;12969:18:1;;;12962:35;13014:19;;6581:122:0;12638:401:1;6581:122:0;6739:67;402:10;6762:7;6790:15;6771:16;:34;6739:8;:67::i;:::-;-1:-1:-1;6837:4:0;;6367:482;-1:-1:-1;;;6367:482:0:o;4874:216::-;4996:4;5018:42;402:10;5042:9;5053:6;5018:9;:42::i;31350:287::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;31443:21:::1;31435:58;;;::::0;-1:-1:-1;;;31435:58:0;;13246:2:1;31435:58:0::1;::::0;::::1;13228:21:1::0;13285:2;13265:18;;;13258:30;13324:26;13304:18;;;13297:54;13368:18;;31435:58:0::1;13044:348:1::0;31435:58:0::1;31513:14;::::0;;;::::1;;;31512:15;31504:52;;;::::0;-1:-1:-1;;;31504:52:0;;13599:2:1;31504:52:0::1;::::0;::::1;13581:21:1::0;13638:2;13618:18;;;13611:30;13677:26;13657:18;;;13650:54;13721:18;;31504:52:0::1;13397:348:1::0;31504:52:0::1;31569:14;:21:::0;;-1:-1:-1;;31569:21:0::1;::::0;::::1;::::0;;31606:23:::1;::::0;::::1;::::0;31569:21;;31606:23:::1;31350:287:::0;:::o;32029:779::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;32093:13:::1;::::0;::::1;::::0;::::1;;;32092:14;32084:70;;;::::0;-1:-1:-1;;;32084:70:0;;13952:2:1;32084:70:0::1;::::0;::::1;13934:21:1::0;13991:2;13971:18;;;13964:30;14030:34;14010:18;;;14003:62;-1:-1:-1;;;14081:18:1;;;14074:41;14132:19;;32084:70:0::1;13750:407:1::0;32084:70:0::1;32243:1;32219:21;:25;32197:110;;;::::0;-1:-1:-1;;;32197:110:0;;14364:2:1;32197:110:0::1;::::0;::::1;14346:21:1::0;14403:2;14383:18;;;14376:30;14442:34;14422:18;;;14415:62;-1:-1:-1;;;14493:18:1;;;14486:33;14536:19;;32197:110:0::1;14162:399:1::0;32197:110:0::1;32367:1;32340:24;32358:4;32340:9;:24::i;:::-;:28;32318:116;;;::::0;-1:-1:-1;;;32318:116:0;;14768:2:1;32318:116:0::1;::::0;::::1;14750:21:1::0;14807:2;14787:18;;;14780:30;14846:34;14826:18;;;14819:62;-1:-1:-1;;;14897:18:1;;;14890:36;14943:19;;32318:116:0::1;14566:402:1::0;32318:116:0::1;32479:9;::::0;32447:69:::1;::::0;32464:4:::1;::::0;-1:-1:-1;;;;;32479:9:0::1;32491:24;32464:4:::0;32491:9:::1;:24::i;32447:69::-;32529:9;::::0;-1:-1:-1;;;;;32529:9:0::1;:25;32562:21;32607:4;32627:24;32607:4:::0;32627:9:::1;:24::i;:::-;32666:1;32709::::0;32752:7:::1;8634:6:::0;;-1:-1:-1;;;;;8634:6:0;;8569:79;32752:7:::1;32774:15;32529:271;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32029:779::o:0;20167:182::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20252:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20252:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20307:34;;1691:41:1;;;20307:34:0::1;::::0;1664:18:1;20307:34:0::1;;;;;;;20167:182:::0;;:::o;17484:311::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;17624:4:::1;17616;17595:13;4661:12:::0;;;4573:108;17595:13:::1;:17;::::0;17611:1:::1;17595:17;:::i;:::-;17594:26;;;;:::i;:::-;17593:35;;;;:::i;:::-;17583:6;:45;;17561:137;;;::::0;-1:-1:-1;;;17561:137:0;;16098:2:1;17561:137:0::1;::::0;::::1;16080:21:1::0;16137:2;16117:18;;;16110:30;16176:34;16156:18;;;16149:62;-1:-1:-1;;;16227:18:1;;;16220:40;16277:19;;17561:137:0::1;15896:406:1::0;17561:137:0::1;17721:17;:6:::0;17731::::1;17721:17;:::i;:::-;17709:9;:29:::0;;;17754:33:::1;::::0;2097:25:1;;;17754:33:0::1;::::0;2085:2:1;2070:18;17754:33:0::1;1951:177:1::0;30916:151:0;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;31024:17:::1;:35:::0;;-1:-1:-1;;;;;;31024:35:0::1;-1:-1:-1::0;;;;;31024:35:0;;;::::1;::::0;;;::::1;::::0;;30916:151::o;16484:188::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;16570:9:::1;16566:99;16585:17:::0;;::::1;16566:99;;;16649:4;16624:11;:22;16636:6;;16643:1;16636:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16624:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16624:22:0;:29;;-1:-1:-1;;16624:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16604:3;::::1;::::0;::::1;:::i;:::-;;;;16566:99;;17865:425:::0;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;18005:6:::1;17984:13;4661:12:::0;;;4573:108;17984:13:::1;:17;::::0;18000:1:::1;17984:17;:::i;:::-;17983:28;;;;:::i;:::-;17970:9;:41;;17948:144;;;::::0;-1:-1:-1;;;17948:144:0;;16781:2:1;17948:144:0::1;::::0;::::1;16763:21:1::0;16820:2;16800:18;;;16793:30;16859:34;16839:18;;;16832:62;-1:-1:-1;;;16910:18:1;;;16903:51;16971:19;;17948:144:0::1;16579:417:1::0;17948:144:0::1;18160:3;18139:13;4661:12:::0;;;4573:108;18139:13:::1;:17;::::0;18155:1:::1;18139:17;:::i;:::-;18138:25;;;;:::i;:::-;18125:9;:38;;18103:138;;;::::0;-1:-1:-1;;;18103:138:0;;17203:2:1;18103:138:0::1;::::0;::::1;17185:21:1::0;17242:2;17222:18;;;17215:30;17281:34;17261:18;;;17254:62;-1:-1:-1;;;17332:18:1;;;17325:48;17390:19;;18103:138:0::1;17001:414:1::0;18103:138:0::1;18252:18;:30:::0;17865:425::o;30252:656::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30444:33:0;::::1;::::0;;::::1;::::0;:70:::1;;-1:-1:-1::0;;;;;;30481:33:0;::::1;::::0;::::1;30444:70;:107;;;;-1:-1:-1::0;;;;;;30518:33:0;::::1;::::0;::::1;30444:107;30422:195;;;::::0;-1:-1:-1;;;30422:195:0;;17622:2:1;30422:195:0::1;::::0;::::1;17604:21:1::0;17661:2;17641:18;;;17634:30;17700:34;17680:18;;;17673:62;-1:-1:-1;;;17751:18:1;;;17744:36;17797:19;;30422:195:0::1;17420:402:1::0;30422:195:0::1;30628:18;:49:::0;;-1:-1:-1;;;;;;30628:49:0;;::::1;-1:-1:-1::0;;;;;30628:49:0;;::::1;::::0;;::::1;::::0;;;30688:18:::1;:49:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;30748:18:::1;:49:::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;30813:87:::1;::::0;::::1;::::0;-1:-1:-1;;30813:87:0::1;30252:656:::0;;;:::o;17159:317::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;17298:4:::1;17289:5;17268:13;4661:12:::0;;;4573:108;17268:13:::1;:17;::::0;17284:1:::1;17268:17;:::i;:::-;17267:27;;;;:::i;:::-;17266:36;;;;:::i;:::-;17256:6;:46;;17234:139;;;::::0;-1:-1:-1;;;17234:139:0;;18029:2:1;17234:139:0::1;::::0;::::1;18011:21:1::0;18068:2;18048:18;;;18041:30;18107:34;18087:18;;;18080:62;-1:-1:-1;;;18158:18:1;;;18151:41;18209:19;;17234:139:0::1;17827:407:1::0;17234:139:0::1;17400:17;:6:::0;17410::::1;17400:17;:::i;:::-;17384:13;:33:::0;;;17433:35:::1;::::0;2097:25:1;;;17433:35:0::1;::::0;2085:2:1;2070:18;17433:35:0::1;1951:177:1::0;31645:376:0;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;31716:21:::1;::::0;31697:16:::1;:40:::0;;;31766:20:::1;::::0;31748:15:::1;:38:::0;;;31812:34:::1;::::0;::::1;:::i;:::-;31797:12;:49:::0;31879:21:::1;::::0;31859:17:::1;:41:::0;;;31930:20:::1;::::0;31911:16:::1;:39:::0;;;31977:36:::1;::::0;::::1;:::i;:::-;31961:13;:52:::0;31645:376::o;16733:98::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;16795:20:::1;:28:::0;;-1:-1:-1;;16795:28:0::1;::::0;;16733:98::o;11514:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11514:28:0;;-1:-1:-1;11514:28:0;:::o;27128:665::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;27220:6:::1;::::0;27213:39:::1;::::0;-1:-1:-1;;;27213:39:0;;27246:4:::1;27213:39;::::0;::::1;1033:51:1::0;27193:17:0::1;::::0;-1:-1:-1;;;;;27220:6:0::1;::::0;27213:24:::1;::::0;1006:18:1;;27213:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27193:59;;27285:1;27273:9;:13;27265:50;;;::::0;-1:-1:-1;;;27265:50:0;;18441:2:1;27265:50:0::1;::::0;::::1;18423:21:1::0;18480:2;18460:18;;;18453:30;18519:26;18499:18;;;18492:54;18563:18;;27265:50:0::1;18239:348:1::0;27265:50:0::1;27328:16;27371:5;27348:19;27360:7:::0;27348:9;:19:::1;:::i;:::-;27347:29;;;;:::i;:::-;27463:6;::::0;27487:9:::1;::::0;27456:52:::1;::::0;-1:-1:-1;;;27456:52:0;;-1:-1:-1;;;;;27487:9:0;;::::1;27456:52;::::0;::::1;11857:51:1::0;11924:18;;;11917:34;;;27328:48:0;;-1:-1:-1;27463:6:0::1;::::0;27456:22:::1;::::0;11830:18:1;;27456:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27554:9:0::1;::::0;:231:::1;::::0;-1:-1:-1;;;27554:231:0;;-1:-1:-1;;;;;27554:9:0;;::::1;::::0;:28:::1;::::0;:231:::1;::::0;27605:4:::1;::::0;27625:8;;27554:9;;;;27734:10:::1;::::0;27759:15:::1;::::0;27554:231:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27182:611;;27128:665:::0;:::o;9056:281::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9159:22:0;::::1;9137:110;;;::::0;-1:-1:-1;;;9137:110:0;;19656:2:1;9137:110:0::1;::::0;::::1;19638:21:1::0;19695:2;19675:18;;;19668:30;19734:34;19714:18;;;19707:62;-1:-1:-1;;;19785:18:1;;;19778:36;19831:19;;9137:110:0::1;19454:402:1::0;9137:110:0::1;9284:6;::::0;9263:38:::1;::::0;-1:-1:-1;;;;;9263:38:0;;::::1;::::0;9284:6:::1;::::0;9263:38:::1;::::0;9284:6:::1;::::0;9263:38:::1;9312:6;:17:::0;;-1:-1:-1;;;;;;9312:17:0::1;-1:-1:-1::0;;;;;9312:17:0;;;::::1;::::0;;;::::1;::::0;;9056:281::o;30059:185::-;8696:6;;-1:-1:-1;;;;;8696:6:0;402:10;8696:22;8688:67;;;;-1:-1:-1;;;8688:67:0;;;;;;;:::i;:::-;30154:82:::1;::::0;30117:12:::1;::::0;30162:10:::1;::::0;30186:21:::1;::::0;30117:12;30154:82;30117:12;30154:82;30186:21;30162:10;30154:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;30059:185:0:o;7838:380::-;-1:-1:-1;;;;;7974:19:0;;7966:68;;;;-1:-1:-1;;;7966:68:0;;20273:2:1;7966:68:0;;;20255:21:1;20312:2;20292:18;;;20285:30;20351:34;20331:18;;;20324:62;-1:-1:-1;;;20402:18:1;;;20395:34;20446:19;;7966:68:0;20071:400:1;7966:68:0;-1:-1:-1;;;;;8053:21:0;;8045:68;;;;-1:-1:-1;;;8045:68:0;;20678:2:1;8045:68:0;;;20660:21:1;20717:2;20697:18;;;20690:30;20756:34;20736:18;;;20729:62;-1:-1:-1;;;20807:18:1;;;20800:32;20849:19;;8045:68:0;20476:398:1;8045:68:0;-1:-1:-1;;;;;8126:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8178:32;;2097:25:1;;;8178:32:0;;2070:18:1;8178:32:0;;;;;;;7838:380;;;:::o;20357:5420::-;-1:-1:-1;;;;;20489:18:0;;20481:68;;;;-1:-1:-1;;;20481:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20568:16:0;;20560:64;;;;-1:-1:-1;;;20560:64:0;;;;;;;:::i;:::-;20652:1;20643:6;:10;20635:52;;;;-1:-1:-1;;;20635:52:0;;21891:2:1;20635:52:0;;;21873:21:1;21930:2;21910:18;;;21903:30;21969:31;21949:18;;;21942:59;22018:18;;20635:52:0;21689:353:1;20635:52:0;20705:13;;;;;;;20700:183;;-1:-1:-1;;;;;20761:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20790:23:0;;;;;;:19;:23;;;;;;;;20761:52;20735:136;;;;-1:-1:-1;;;20735:136:0;;22249:2:1;20735:136:0;;;22231:21:1;22288:2;22268:18;;;22261:30;-1:-1:-1;;;22307:18:1;;;22300:52;22369:18;;20735:136:0;22047:346:1;20735:136:0;25880:18;;25865:12;:33;20899:26;:43;;;;-1:-1:-1;20929:13:0;;;;;;;20899:43;20895:268;;;-1:-1:-1;;;;;20986:17:0;;;;;;:11;:17;;;;;;;;20985:18;;:35;;-1:-1:-1;8634:6:0;;-1:-1:-1;;;;;21007:13:0;;;8634:6;;21007:13;20985:35;:60;;;-1:-1:-1;;;;;;21024:21:0;;21038:6;21024:21;20985:60;20959:192;;;;-1:-1:-1;;;20959:192:0;;22600:2:1;20959:192:0;;;22582:21:1;22639:2;22619:18;;;22612:30;22678:34;22658:18;;;22651:62;22749:34;22729:18;;;22722:62;-1:-1:-1;;;22800:19:1;;;22793:37;22847:19;;20959:192:0;22398:474:1;20959:192:0;21179:14;;;;21175:2214;;;8634:6;;-1:-1:-1;;;;;21232:15:0;;;8634:6;;21232:15;;;;:49;;-1:-1:-1;8634:6:0;;-1:-1:-1;;;;;21268:13:0;;;8634:6;;21268:13;;21232:49;:91;;;;-1:-1:-1;;;;;;21302:21:0;;21316:6;21302:21;;21232:91;:138;;;;-1:-1:-1;;;;;;21345:25:0;;;;;;:19;:25;;;;;;;;21344:26;21232:138;:183;;;;-1:-1:-1;;;;;;21392:23:0;;;;;;:19;:23;;;;;;;;21391:24;21232:183;21210:2168;;;21454:20;;;;21450:692;;;21517:9;;-1:-1:-1;;;;;21503:24:0;;;21517:9;;21503:24;;;;:49;;-1:-1:-1;21545:6:0;;-1:-1:-1;;;;;21531:21:0;;;21545:6;;21531:21;;21503:49;21499:624;;;21694:16;21709:1;21694:12;:16;:::i;:::-;21648:9;21619:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;21815:16:0;21830:1;21815:12;:16;:::i;:::-;-1:-1:-1;;;;;21747:32:0;;;;;;:28;:32;;;;;;:84;21619:212;21581:363;;;;-1:-1:-1;;;21581:363:0;;23209:2:1;21581:363:0;;;23191:21:1;23248:2;23228:18;;;23221:30;23287:34;23267:18;;;23260:62;-1:-1:-1;;;23338:18:1;;;23331:51;23399:19;;21581:363:0;23007:417:1;21581:363:0;22000:9;21971:39;;;;:28;:39;;;;;;22013:12;21971:54;;;;-1:-1:-1;;;;;22052:32:0;;;;;;:47;21499:624;-1:-1:-1;;;;;22216:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;22273:35:0;;;;;;:31;:35;;;;;;;;22272:36;22216:92;22190:1173;;;22395:12;;22385:6;:22;;22351:148;;;;-1:-1:-1;;;22351:148:0;;23631:2:1;22351:148:0;;;23613:21:1;23670:2;23650:18;;;23643:30;23709:34;23689:18;;;23682:62;-1:-1:-1;;;23760:18:1;;;23753:38;23808:19;;22351:148:0;23429:404:1;22351:148:0;22582:9;;22565:13;22575:2;22565:9;:13::i;:::-;22556:22;;:6;:22;:::i;:::-;:35;;22522:140;;;;-1:-1:-1;;;22522:140:0;;24040:2:1;22522:140:0;;;24022:21:1;24079:2;24059:18;;;24052:30;-1:-1:-1;;;24098:18:1;;;24091:49;24157:18;;22522:140:0;23838:343:1;22522:140:0;22190:1173;;;-1:-1:-1;;;;;22760:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;22815:37:0;;;;;;:31;:37;;;;;;;;22814:38;22760:92;22734:629;;;22903:14;;;;;;;22895:43;;;;-1:-1:-1;;;22895:43:0;;24388:2:1;22895:43:0;;;24370:21:1;24427:2;24407:18;;;24400:30;-1:-1:-1;;;24446:18:1;;;24439:46;24502:18;;22895:43:0;24186:340:1;22895:43:0;23005:13;;22995:6;:23;;22961:151;;;;-1:-1:-1;;;22961:151:0;;24733:2:1;22961:151:0;;;24715:21:1;24772:2;24752:18;;;24745:30;24811:34;24791:18;;;24784:62;-1:-1:-1;;;24862:18:1;;;24855:40;24912:19;;22961:151:0;24531:406:1;22734:629:0;-1:-1:-1;;;;;23143:35:0;;;;;;:31;:35;;;;;;;;23138:225;;23263:9;;23246:13;23256:2;23246:9;:13::i;:::-;23237:22;;:6;:22;:::i;:::-;:35;;23203:140;;;;-1:-1:-1;;;23203:140:0;;24040:2:1;23203:140:0;;;24022:21:1;24079:2;24059:18;;;24052:30;-1:-1:-1;;;24098:18:1;;;24091:49;24157:18;;23203:140:0;23838:343:1;23203:140:0;23401:28;23432:24;23450:4;23432:9;:24::i;:::-;23508:18;;23401:55;;-1:-1:-1;23484:42:0;;;;;;;23557:22;;-1:-1:-1;23568:11:0;;;;;;;23557:22;:35;;;;-1:-1:-1;23584:8:0;;-1:-1:-1;;;23584:8:0;;;;23583:9;23557:35;:68;;;;-1:-1:-1;;;;;;23596:29:0;;;;;;:25;:29;;;;;;;;23557:68;23539:196;;;23652:8;:15;;-1:-1:-1;;;;23652:15:0;-1:-1:-1;;;23652:15:0;;;23682:10;:8;:10::i;:::-;23707:8;:16;;-1:-1:-1;;;;23707:16:0;;;23539:196;-1:-1:-1;;;;;23866:25:0;;23747:12;23866:25;;;:19;:25;;;;;;23762:4;;23866:25;;;:52;;-1:-1:-1;;;;;;23895:23:0;;;;;;:19;:23;;;;;;;;23866:52;23862:100;;;-1:-1:-1;23945:5:0;23862:100;23974:12;24079:7;24075:1649;;;25880:18;;25865:12;:33;24161:77;;;;-1:-1:-1;;;;;;24207:31:0;;;;;;:25;:31;;;;;;;;24161:77;:128;;;;-1:-1:-1;;;;;;24260:29:0;;;;;;:25;:29;;;;;;;;24259:30;24161:128;:173;;;;-1:-1:-1;;;;;;24311:23:0;;;;;;:19;:23;;;;;;;;24310:24;24161:173;:210;;;;;24370:1;24355:12;;:16;24161:210;24139:1436;;;-1:-1:-1;;;;;24429:15:0;;;;;;:11;:15;;;;;;;;24424:216;;-1:-1:-1;;;;;24469:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;24469:22:0;24487:4;24469:22;;;;;;24514:10;:15;;24487:4;;24514:10;;:15;;24487:4;;24514:15;:::i;:::-;;;;-1:-1:-1;;24552:11:0;:20;;;;;;;-1:-1:-1;24552:20:0;;;;;;;;-1:-1:-1;;;;;;24552:20:0;-1:-1:-1;;;;;24552:20:0;;;;;;;;24600;;1033:51:1;;;24600:20:0;;1021:2:1;1006:18;24600:20:0;;;;;;;24424:216;24683:3;24668:11;:6;24677:2;24668:11;:::i;:::-;24667:19;;;;:::i;:::-;24660:26;;24754:12;;24735:15;;24728:4;:22;;;;:::i;:::-;24727:39;;;;:::i;:::-;24705:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24836:12:0;;24816:16;;24809:23;;:4;:23;:::i;:::-;24808:40;;;;:::i;:::-;24785:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;24139:1436:0;;-1:-1:-1;24139:1436:0;;-1:-1:-1;;;;;24911:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;24960:1;24944:13;;:17;24911:50;24907:668;;;25016:3;24999:13;;24990:6;:22;;;;:::i;:::-;24989:30;;;;:::i;:::-;24982:37;;25088:13;;25068:16;;25061:4;:23;;;;:::i;:::-;25060:41;;;;:::i;:::-;25038:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25214:13:0;;25172:17;;25165:24;;:4;:24;:::i;24907:668::-;-1:-1:-1;;;;;25289:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;25339:1;25324:12;;:16;25289:51;25285:290;;;25394:3;25378:12;;25369:6;:21;;;;:::i;:::-;25368:29;;;;:::i;:::-;25361:36;;25465:12;;25446:15;;25439:4;:22;;;;:::i;:::-;25438:39;;;;:::i;:::-;25416:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25547:12:0;;25527:16;;25520:23;;:4;:23;:::i;:::-;25519:40;;;;:::i;:::-;25496:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25285:290:0;25595:8;;25591:91;;25624:42;25640:4;25654;25661;25624:15;:42::i;:::-;25698:14;25708:4;25698:14;;:::i;:::-;;;24075:1649;25736:33;25752:4;25758:2;25762:6;25736:15;:33::i;:::-;20470:5307;;;;20357:5420;;;:::o;19230:236::-;-1:-1:-1;;;;;19313:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19313:39:0;;;;;;;19363;19313:31;:39;19363:26;:39::i;27801:1613::-;27840:23;27866:24;27884:4;27866:9;:24::i;:::-;27840:50;;27901:25;27950:19;;27929:18;;:40;;;;:::i;:::-;27901:68;-1:-1:-1;27986:20:0;;;:46;;-1:-1:-1;28010:22:0;;27986:46;27982:85;;;28049:7;;27801:1613::o;27982:85::-;28101:18;;:23;;28122:2;28101:23;:::i;:::-;28083:15;:41;28079:115;;;28159:18;;:23;;28180:2;28159:23;:::i;:::-;28141:41;;28079:115;28206:12;28280:23;28393:1;28360:17;28325:18;;28307:15;:36;;;;:::i;:::-;28306:71;;;;:::i;:::-;:88;;;;:::i;:::-;28280:114;-1:-1:-1;28407:51:0;28424:33;28280:114;28424:15;:33;:::i;:::-;28407:16;:51::i;:::-;28672:18;;28492:21;;;;28471:18;;28672:22;;28693:1;;28672:22;:::i;:::-;28651:44;;:17;:44;:::i;:::-;28614:19;;28601:32;;:10;:32;:::i;:::-;28600:96;;;;:::i;:::-;28573:123;-1:-1:-1;28709:35:0;28573:123;28709:35;;:::i;:::-;28778:1;28757:18;:22;;;28790:19;:23;28709:35;-1:-1:-1;28830:19:0;;;;;:42;;;28871:1;28853:15;:19;28830:42;28826:121;;;28889:46;28902:15;28919;28889:12;:46::i;:::-;29097:18;;29043:21;;-1:-1:-1;;;;;29097:18:0;29158:3;29143:14;29043:21;29155:2;29143:14;:::i;:::-;:18;;;;:::i;:::-;29089:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29211:18:0;;29075:101;;-1:-1:-1;;;;;;29211:18:0;29272:3;29257:14;:11;29269:2;29257:14;:::i;:::-;:18;;;;:::i;:::-;29203:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29325:18:0;;29189:101;;-1:-1:-1;;;;;;29325:18:0;29386:3;29371:14;:11;29383:2;29371:14;:::i;:::-;:18;;;;:::i;:::-;29317:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27801:1613:0:o;6857:651::-;-1:-1:-1;;;;;6997:20:0;;6989:70;;;;-1:-1:-1;;;6989:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7078:23:0;;7070:71;;;;-1:-1:-1;;;7070:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7178:17:0;;7154:21;7178:17;;;;;;;;;;;7228:23;;;;7206:111;;;;-1:-1:-1;;;7206:111:0;;25144:2:1;7206:111:0;;;25126:21:1;25183:2;25163:18;;;25156:30;25222:34;25202:18;;;25195:62;-1:-1:-1;;;25273:18:1;;;25266:36;25319:19;;7206:111:0;24942:402:1;7206:111:0;-1:-1:-1;;;;;7353:17:0;;;:9;:17;;;;;;;;;;;7373:22;;;7353:42;;7417:20;;;;;;;;:30;;7389:6;;7353:9;7417:30;;7389:6;;7417:30;:::i;:::-;;;;;;;;7482:9;-1:-1:-1;;;;;7465:35:0;7474:6;-1:-1:-1;;;;;7465:35:0;;7493:6;7465:35;;;;2097:25:1;;2085:2;2070:18;;1951:177;7465:35:0;;;;;;;;6978:530;6857:651;;;:::o;18298:221::-;-1:-1:-1;;;;;18400:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;18400:52:0;;;;;;;;;;18468:43;;25517:51:1;;;25584:18;;;25577:50;18468:43:0;;25490:18:1;18468:43:0;;;;;;;18298:221;;:::o;26030:571::-;26180:16;;;26194:1;26180:16;;;;;;;;26156:21;;26180:16;;;;;;;;;;-1:-1:-1;26180:16:0;26156:40;;26225:4;26207;26212:1;26207:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26207:23:0;;;:7;;;;;;;;;;:23;;;;26251:9;;:16;;;-1:-1:-1;;;26251:16:0;;;;:9;;;;;:14;;:16;;;;;26207:7;;26251:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26241:4;26246:1;26241:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26241:26:0;;;:7;;;;;;;;;:26;26312:9;;26280:56;;26297:4;;26312:9;26324:11;26280:8;:56::i;:::-;26375:9;;:218;;-1:-1:-1;;;26375:218:0;;-1:-1:-1;;;;;26375:9:0;;;;:60;;:218;;26450:11;;26375:9;;26520:4;;26547;;26567:15;;26375:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26085:516;26030:571;:::o;26609:511::-;26789:9;;26757:56;;26774:4;;-1:-1:-1;;;;;26789:9:0;26801:11;26757:8;:56::i;:::-;26856:9;;27054:17;;26856:256;;-1:-1:-1;;;26856:256:0;;-1:-1:-1;;;;;26856:9:0;;;;:25;;26889:9;;26856:256;;26922:4;;26942:11;;26856:9;;;;27054:17;;27086:15;;26856:256;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:597::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;705:6;702:1;699:13;696:91;;;775:1;770:2;761:6;750:9;746:22;742:31;735:42;696:91;-1:-1:-1;848:2:1;827:15;-1:-1:-1;;823:29:1;808:45;;;;855:2;804:54;;267:597;-1:-1:-1;;;267:597:1:o;1095:131::-;-1:-1:-1;;;;;1170:31:1;;1160:42;;1150:70;;1216:1;1213;1206:12;1150:70;1095:131;:::o;1231:315::-;1299:6;1307;1360:2;1348:9;1339:7;1335:23;1331:32;1328:52;;;1376:1;1373;1366:12;1328:52;1415:9;1402:23;1434:31;1459:5;1434:31;:::i;:::-;1484:5;1536:2;1521:18;;;;1508:32;;-1:-1:-1;;;1231:315:1:o;2133:247::-;2192:6;2245:2;2233:9;2224:7;2220:23;2216:32;2213:52;;;2261:1;2258;2251:12;2213:52;2300:9;2287:23;2319:31;2344:5;2319:31;:::i;:::-;2369:5;2133:247;-1:-1:-1;;;2133:247:1:o;2385:456::-;2462:6;2470;2478;2531:2;2519:9;2510:7;2506:23;2502:32;2499:52;;;2547:1;2544;2537:12;2499:52;2586:9;2573:23;2605:31;2630:5;2605:31;:::i;:::-;2655:5;-1:-1:-1;2712:2:1;2697:18;;2684:32;2725:33;2684:32;2725:33;:::i;:::-;2385:456;;2777:7;;-1:-1:-1;;;2831:2:1;2816:18;;;;2803:32;;2385:456::o;2846:180::-;2905:6;2958:2;2946:9;2937:7;2933:23;2929:32;2926:52;;;2974:1;2971;2964:12;2926:52;-1:-1:-1;2997:23:1;;2846:180;-1:-1:-1;2846:180:1:o;3220:118::-;3306:5;3299:13;3292:21;3285:5;3282:32;3272:60;;3328:1;3325;3318:12;3343:382;3408:6;3416;3469:2;3457:9;3448:7;3444:23;3440:32;3437:52;;;3485:1;3482;3475:12;3437:52;3524:9;3511:23;3543:31;3568:5;3543:31;:::i;:::-;3593:5;-1:-1:-1;3650:2:1;3635:18;;3622:32;3663:30;3622:32;3663:30;:::i;:::-;3712:7;3702:17;;;3343:382;;;;;:::o;3730:241::-;3786:6;3839:2;3827:9;3818:7;3814:23;3810:32;3807:52;;;3855:1;3852;3845:12;3807:52;3894:9;3881:23;3913:28;3935:5;3913:28;:::i;3976:388::-;4044:6;4052;4105:2;4093:9;4084:7;4080:23;4076:32;4073:52;;;4121:1;4118;4111:12;4073:52;4160:9;4147:23;4179:31;4204:5;4179:31;:::i;:::-;4229:5;-1:-1:-1;4286:2:1;4271:18;;4258:32;4299:33;4258:32;4299:33;:::i;4369:461::-;4422:3;4460:5;4454:12;4487:6;4482:3;4475:19;4513:4;4542:2;4537:3;4533:12;4526:19;;4579:2;4572:5;4568:14;4600:1;4610:195;4624:6;4621:1;4618:13;4610:195;;;4689:13;;-1:-1:-1;;;;;4685:39:1;4673:52;;4745:12;;;;4780:15;;;;4721:1;4639:9;4610:195;;;-1:-1:-1;4821:3:1;;4369:461;-1:-1:-1;;;;;4369:461:1:o;4835:261::-;5014:2;5003:9;4996:21;4977:4;5034:56;5086:2;5075:9;5071:18;5063:6;5034:56;:::i;5101:615::-;5187:6;5195;5248:2;5236:9;5227:7;5223:23;5219:32;5216:52;;;5264:1;5261;5254:12;5216:52;5304:9;5291:23;5333:18;5374:2;5366:6;5363:14;5360:34;;;5390:1;5387;5380:12;5360:34;5428:6;5417:9;5413:22;5403:32;;5473:7;5466:4;5462:2;5458:13;5454:27;5444:55;;5495:1;5492;5485:12;5444:55;5535:2;5522:16;5561:2;5553:6;5550:14;5547:34;;;5577:1;5574;5567:12;5547:34;5630:7;5625:2;5615:6;5612:1;5608:14;5604:2;5600:23;5596:32;5593:45;5590:65;;;5651:1;5648;5641:12;5590:65;5682:2;5674:11;;;;;5704:6;;-1:-1:-1;5101:615:1;;-1:-1:-1;;;;5101:615:1:o;5721:529::-;5798:6;5806;5814;5867:2;5855:9;5846:7;5842:23;5838:32;5835:52;;;5883:1;5880;5873:12;5835:52;5922:9;5909:23;5941:31;5966:5;5941:31;:::i;:::-;5991:5;-1:-1:-1;6048:2:1;6033:18;;6020:32;6061:33;6020:32;6061:33;:::i;:::-;6113:7;-1:-1:-1;6172:2:1;6157:18;;6144:32;6185:33;6144:32;6185:33;:::i;:::-;6237:7;6227:17;;;5721:529;;;;;:::o;6255:356::-;6457:2;6439:21;;;6476:18;;;6469:30;6535:34;6530:2;6515:18;;6508:62;6602:2;6587:18;;6255:356::o;6616:127::-;6677:10;6672:3;6668:20;6665:1;6658:31;6708:4;6705:1;6698:15;6732:4;6729:1;6722:15;6748:128;6788:3;6819:1;6815:6;6812:1;6809:13;6806:39;;;6825:18;;:::i;:::-;-1:-1:-1;6861:9:1;;6748:128::o;7238:380::-;7317:1;7313:12;;;;7360;;;7381:61;;7435:4;7427:6;7423:17;7413:27;;7381:61;7488:2;7480:6;7477:14;7457:18;7454:38;7451:161;;7534:10;7529:3;7525:20;7522:1;7515:31;7569:4;7566:1;7559:15;7597:4;7594:1;7587:15;7451:161;;7238:380;;;:::o;8032:168::-;8072:7;8138:1;8134;8130:6;8126:14;8123:1;8120:21;8115:1;8108:9;8101:17;8097:45;8094:71;;;8145:18;;:::i;:::-;-1:-1:-1;8185:9:1;;8032:168::o;8205:217::-;8245:1;8271;8261:132;;8315:10;8310:3;8306:20;8303:1;8296:31;8350:4;8347:1;8340:15;8378:4;8375:1;8368:15;8261:132;-1:-1:-1;8407:9:1;;8205:217::o;11494:184::-;11564:6;11617:2;11605:9;11596:7;11592:23;11588:32;11585:52;;;11633:1;11630;11623:12;11585:52;-1:-1:-1;11656:16:1;;11494:184;-1:-1:-1;11494:184:1:o;11962:245::-;12029:6;12082:2;12070:9;12061:7;12057:23;12053:32;12050:52;;;12098:1;12095;12088:12;12050:52;12130:9;12124:16;12149:28;12171:5;12149:28;:::i;14973:607::-;-1:-1:-1;;;;;15332:15:1;;;15314:34;;15379:2;15364:18;;15357:34;;;;15422:2;15407:18;;15400:34;;;;15465:2;15450:18;;15443:34;;;;15514:15;;;15508:3;15493:19;;15486:44;15294:3;15546:19;;15539:35;;;;15263:3;15248:19;;14973:607::o;15585:306::-;15673:6;15681;15689;15742:2;15730:9;15721:7;15717:23;15713:32;15710:52;;;15758:1;15755;15748:12;15710:52;15787:9;15781:16;15771:26;;15837:2;15826:9;15822:18;15816:25;15806:35;;15881:2;15870:9;15866:18;15860:25;15850:35;;15585:306;;;;;:::o;16307:127::-;16368:10;16363:3;16359:20;16356:1;16349:31;16399:4;16396:1;16389:15;16423:4;16420:1;16413:15;16439:135;16478:3;16499:17;;;16496:43;;16519:18;;:::i;:::-;-1:-1:-1;16566:1:1;16555:13;;16439:135::o;19204:245::-;19283:6;19291;19344:2;19332:9;19323:7;19319:23;19315:32;19312:52;;;19360:1;19357;19350:12;19312:52;-1:-1:-1;;19383:16:1;;19439:2;19424:18;;;19418:25;19383:16;;19418:25;;-1:-1:-1;19204:245:1:o;20879:401::-;21081:2;21063:21;;;21120:2;21100:18;;;21093:30;21159:34;21154:2;21139:18;;21132:62;-1:-1:-1;;;21225:2:1;21210:18;;21203:35;21270:3;21255:19;;20879:401::o;21285:399::-;21487:2;21469:21;;;21526:2;21506:18;;;21499:30;21565:34;21560:2;21545:18;;21538:62;-1:-1:-1;;;21631:2:1;21616:18;;21609:33;21674:3;21659:19;;21285:399::o;22877:125::-;22917:4;22945:1;22942;22939:8;22936:34;;;22950:18;;:::i;:::-;-1:-1:-1;22987:9:1;;22877:125::o;25770:251::-;25840:6;25893:2;25881:9;25872:7;25868:23;25864:32;25861:52;;;25909:1;25906;25899:12;25861:52;25941:9;25935:16;25960:31;25985:5;25960:31;:::i;26026:582::-;26325:6;26314:9;26307:25;26368:6;26363:2;26352:9;26348:18;26341:34;26411:3;26406:2;26395:9;26391:18;26384:31;26288:4;26432:57;26484:3;26473:9;26469:19;26461:6;26432:57;:::i;:::-;-1:-1:-1;;;;;26525:32:1;;;;26520:2;26505:18;;26498:60;-1:-1:-1;26589:3:1;26574:19;26567:35;26424:65;26026:582;-1:-1:-1;;;26026:582:1:o

Swarm Source

ipfs://7ba5ef23bdaade1371e4b6d1651788eb7b1deaa6519eaa342618640af87c0eca
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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