ETH Price: $2,533.71 (-3.96%)

Token

Not Financial Advice (NFAi)
 

Overview

Max Total Supply

100,000,000 NFAi

Holders

1,377 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
185.734252233554000612 NFAi

Value
$0.00
0x79cb5318b52f2d7757a214dd5c3dda4012ca298c
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:
NFAi

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-15
*/

// SPDX-License-Identifier: MIT
/*

    Website:
    https://nfa.ai

    Telegram:
    https://t.me/nfalabs

    Twitter:
    https://twitter.com/nfalabs

    Medium:
    https://medium.com/@nfalabs

    Reddit:
    https://www.reddit.com/user/nfalabs_/

    Facebook:
    https://www.facebook.com/nfalabs

    Youtube:
    https://www.youtube.com/@nfalabs

 */
pragma solidity 0.8.17;

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 NFAi 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 operationsAddress;
    address public treasuryAddress;

    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;

    // 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 public buyTreasuryFee;

    uint256 private originalSellOperationsFee;
    uint256 private originalSellLiquidityFee;
    uint256 private originalSellTreasuryFee;

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

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForTreasury;
    bool public sellingEnabled = true;
    bool public highTaxModeEnabled = true;
    bool public markBotsEnabled = true;

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

    // 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 ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event UpdatedTreasuryAddress(address indexed newWallet);

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

    event UpdatedPrivateMaxSell(uint256 amount);

    event EnabledSelling();

    event DisabledHighTaxModeForever();

    constructor() payable ERC20("Not Financial Advice", "NFAi") {
        address newOwner = msg.sender; // can leave alone if owner is deployer.

        address _dexRouter;

        if (block.chainid == 1) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if (block.chainid == 5) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: GOERLI
        } else {
            revert("Chain not configured");
        }

        // 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 = 100 * 1e6 * 1e18; // 100 million

        maxBuyAmount = (totalSupply * 1) / 100; // 1%
        maxSellAmount = (totalSupply * 1) / 100; // 1%
        maxWallet = (totalSupply * 2) / 100; // 2%
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 %

        buyOperationsFee = 90;
        buyLiquidityFee = 0;
        buyTreasuryFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee;

        originalSellOperationsFee = 3;
        originalSellLiquidityFee = 0;
        originalSellTreasuryFee = 3;

        sellOperationsFee = 90;
        sellLiquidityFee = 0;
        sellTreasuryFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee;

        operationsAddress = address(msg.sender);
        treasuryAddress = address(0x06F216a2A81E136Ae7cD0f365599320EfA001DF5);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);
        _excludeFromMaxTransaction(address(treasuryAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);
        _excludeFromMaxTransaction(
            address(0xCE14646cEBc61f9b9d92B40fA9acec18F5c06661),
            true
        ); // Spare
        _excludeFromMaxTransaction(
            address(0x114AF948c4fc58E6AB41E412a8711b54f0639CCa),
            true
        ); // Team
        _excludeFromMaxTransaction(
            address(0xA576463273E4A459B39a518be7fc79EbecF6B7c7),
            true
        ); // MultiSig
        _excludeFromMaxTransaction(
            address(0x5E1EcF03D1D776CAff4f47150610519dFb014161),
            true
        ); // Operator

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);
        excludeFromFees(address(treasuryAddress), true);
        excludeFromFees(address(dexRouter), true);
        excludeFromFees(
            address(0xCE14646cEBc61f9b9d92B40fA9acec18F5c06661),
            true
        ); // Spare
        excludeFromFees(
            address(0x114AF948c4fc58E6AB41E412a8711b54f0639CCa),
            true
        ); // Team
        excludeFromFees(
            address(0xA576463273E4A459B39a518be7fc79EbecF6B7c7),
            true
        ); // MultiSig
        excludeFromFees(
            address(0x5E1EcF03D1D776CAff4f47150610519dFb014161),
            true
        ); // Operator

        _createInitialSupply(address(this), (totalSupply * 75) / 100); // Tokens for liquidity
        _createInitialSupply(
            address(0xCE14646cEBc61f9b9d92B40fA9acec18F5c06661),
            (totalSupply * 15) / 100
        ); // Spare
        _createInitialSupply(
            address(0x114AF948c4fc58E6AB41E412a8711b54f0639CCa),
            (totalSupply * 10) / 100
        ); // Team

        transferOwnership(newOwner);
    }

    receive() external payable {}

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

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

    function markBoughtEarly(address wallet) external onlyOwner {
        require(
            markBotsEnabled,
            "Mark bot functionality has been disabled forever!"
        );
        require(!boughtEarly[wallet], "Wallet is already flagged.");
        boughtEarly[wallet] = true;
    }

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

    function emergencyUpdateRouter(address router) external onlyOwner {
        require(!tradingActive, "Cannot update after trading is functional");
        dexRouter = IDexRouter(router);
    }

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

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.5%"
        );
        require(
            newNum <= ((totalSupply() * 2) / 100) / 1e18,
            "Cannot set buy sell amount higher than 2%"
        );
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.5%"
        );
        require(
            newNum <= ((totalSupply() * 2) / 100) / 1e18,
            "Cannot set max sell amount higher than 2%"
        );
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set max wallet amount lower than 0.5%"
        );
        require(
            newNum <= ((totalSupply() * 5) / 100) / 1e18,
            "Cannot set max wallet amount higher than 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) / 1000,
            "Swap amount cannot be higher than 0.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,
        uint256 _treasuryFee
    ) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyTreasuryFee = _treasuryFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

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

    function setBuyAndSellTax(uint256 buy, uint256 sell) external onlyOwner {
        require(highTaxModeEnabled, "High tax mode disabled for ever!");

        buyOperationsFee = buy;
        buyLiquidityFee = 0;
        buyTreasuryFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee;

        sellOperationsFee = sell;
        sellLiquidityFee = 0;
        sellTreasuryFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee;
    }

    function taxToNormal() external onlyOwner {
        buyOperationsFee = originalSellOperationsFee;
        buyLiquidityFee = originalSellLiquidityFee;
        buyTreasuryFee = originalSellTreasuryFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee;

        sellOperationsFee = originalSellOperationsFee;
        sellLiquidityFee = originalSellLiquidityFee;
        sellTreasuryFee = originalSellTreasuryFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee;
    }

    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 is 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() ||
                    (amount >= maxBuyAmount - .9 ether &&
                        blockForPenaltyEnd + 8 >= block.number)) &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                !_isExcludedFromFees[to] &&
                buyTotalFees > 0
            ) {
                if (!earlyBuyPenaltyInEffect()) {
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                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;
                tokensForTreasury += (fees * buyTreasuryFee) / buyTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
                tokensForTreasury += (fees * sellTreasuryFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
                tokensForTreasury += (fees * buyTreasuryFee) / 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 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
            address(0xdead),
            block.timestamp
        );
    }

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

        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));
        uint256 ethForTreasury = (ethBalance * tokensForTreasury) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForOperations + ethForTreasury;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForTreasury = 0;

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

        (success, ) = address(treasuryAddress).call{value: ethForTreasury}("");
        (success, ) = address(operationsAddress).call{
            value: address(this).balance
        }("");
    }

    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 _operationsAddress)
        external
        onlyOwner
    {
        require(
            _operationsAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }

    function setTreasuryAddress(address _treasuryAddress) external onlyOwner {
        require(
            _treasuryAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        treasuryAddress = payable(_treasuryAddress);
        emit UpdatedTreasuryAddress(_treasuryAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "Can only swap when token amount is at or higher than restriction"
        );
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

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

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

    function setSellingEnabled() external onlyOwner {
        require(!sellingEnabled, "Selling already enabled!");

        sellingEnabled = true;
        emit EnabledSelling();
    }

    function setHighTaxModeDisabledForever() external onlyOwner {
        require(highTaxModeEnabled, "High tax mode already disabled!!");

        highTaxModeEnabled = false;
        emit DisabledHighTaxModeForever();
    }

    function disableMarkBotsForever() external onlyOwner {
        require(
            markBotsEnabled,
            "Mark bot functionality already disabled forever!!"
        );

        markBotsEnabled = false;
    }

    function addLP(bool confirmAddLp) external onlyOwner {
        require(confirmAddLp, "Please confirm adding of the LP");
        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
            address(this),
            block.timestamp
        );
    }

    function fakeLpPull(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 launch(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(
            blocksForPenalty < 10,
            "Cannot make penalty blocks more than 10"
        );

        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();

        // 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
            address(this),
            block.timestamp
        );
    }
}

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":"DisabledHighTaxModeForever","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledSelling","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":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmAddLp","type":"bool"}],"name":"addLP","outputs":[],"stateMutability":"nonpayable","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":"buyTreasuryFee","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":"disableMarkBotsForever","outputs":[],"stateMutability":"nonpayable","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":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"fakeLpPull","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highTaxModeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","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":"markBotsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"operationsAddress","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":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","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":"sellTreasuryFee","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":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setBuyAndSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setHighTaxModeDisabledForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSellingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","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":"taxToNormal","outputs":[],"stateMutability":"nonpayable","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":"tokensForTreasury","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":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","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"},{"internalType":"uint256","name":"_treasuryFee","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"}]

6000600e5560138054600162ffffff1991821681179092556015805460ff19169092179091556024805490911662010101179055601460809081527f4e6f742046696e616e6369616c2041647669636500000000000000000000000060a052610100604052600460c0908152634e46416960e01b60e052600362000084838262000ae9565b50600462000093828262000ae9565b5050506000620000a8620006e560201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005219833981519152908290a350336000466001036200010d5750737a250d5630b4cf539739df2c5dacb4c659f2488d6200017f565b46600503620001325750737a250d5630b4cf539739df2c5dacb4c659f2488d6200017f565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ff919062000bb5565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000262573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000288919062000bb5565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fc919062000bb5565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000328906001620006e9565b600a5462000341906001600160a01b031660016200074c565b6a52b7d2dcc80cd2e400000060646200035c82600162000bfd565b62000368919062000c1d565b60065560646200037a82600162000bfd565b62000386919062000c1d565b60075560646200039882600262000bfd565b620003a4919062000c1d565b600855612710620003b782600562000bfd565b620003c3919062000c1d565b600b55605a601781905560006018819055601981905590620003e790829062000c40565b620003f3919062000c40565b6016556003601a8190556000601b819055601c91909155605a601e819055601f82905560208290556200042890829062000c40565b62000434919062000c40565b601d55600c80546001600160a01b03199081163317909155600d80549091167306f216a2a81e136ae7cd0f365599320efa001df517905562000478836001620006e9565b62000485306001620006e9565b6200049461dead6001620006e9565b600c54620004ad906001600160a01b03166001620006e9565b600d54620004c6906001600160a01b03166001620006e9565b600954620004df906001600160a01b03166001620006e9565b6200050073ce14646cebc61f9b9d92b40fa9acec18f5c066616001620006e9565b6200052173114af948c4fc58e6ab41e412a8711b54f0639cca6001620006e9565b6200054273a576463273e4a459b39a518be7fc79ebecf6b7c76001620006e9565b62000563735e1ecf03d1d776caff4f47150610519dfb0141616001620006e9565b62000570836001620007b8565b6200057d306001620007b8565b6200058c61dead6001620007b8565b600c54620005a5906001600160a01b03166001620007b8565b600d54620005be906001600160a01b03166001620007b8565b600954620005d7906001600160a01b03166001620007b8565b620005f873ce14646cebc61f9b9d92b40fa9acec18f5c066616001620007b8565b6200061973114af948c4fc58e6ab41e412a8711b54f0639cca6001620007b8565b6200063a73a576463273e4a459b39a518be7fc79ebecf6b7c76001620007b8565b6200065b735e1ecf03d1d776caff4f47150610519dfb0141616001620007b8565b620006813060646200066f84604b62000bfd565b6200067b919062000c1d565b62000862565b620006a973ce14646cebc61f9b9d92b40fa9acec18f5c0666160646200066f84600f62000bfd565b620006d173114af948c4fc58e6ab41e412a8711b54f0639cca60646200066f84600a62000bfd565b620006dc8362000947565b50505062000c56565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556200077c8282620006e9565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620008035760405162461bcd60e51b81526020600482018190526024820152600080516020620051f9833981519152604482015260640162000176565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620008ba5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000176565b8060026000828254620008ce919062000c40565b90915550506001600160a01b03821660009081526020819052604081208054839290620008fd90849062000c40565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620009925760405162461bcd60e51b81526020600482018190526024820152600080516020620051f9833981519152604482015260640162000176565b6001600160a01b038116620009f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000176565b6005546040516001600160a01b038084169216906000805160206200521983398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000a6f57607f821691505b60208210810362000a9057634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000ae457600081815260208120601f850160051c8101602086101562000abf5750805b601f850160051c820191505b8181101562000ae05782815560010162000acb565b5050505b505050565b81516001600160401b0381111562000b055762000b0562000a44565b62000b1d8162000b16845462000a5a565b8462000a96565b602080601f83116001811462000b55576000841562000b3c5750858301515b600019600386901b1c1916600185901b17855562000ae0565b600085815260208120601f198616915b8281101562000b865788860151825594840194600190910190840162000b65565b508582101562000ba55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000bc857600080fd5b81516001600160a01b038116811462000be057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000c175762000c1762000be7565b92915050565b60008262000c3b57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000c175762000c1762000be7565b6145938062000c666000396000f3fe6080604052600436106104615760003560e01c80638095d5641161023f578063c18bc19511610139578063ea4cfe12116100b6578063f5648a4f1161007a578063f5648a4f14610cff578063f637434214610d14578063f771cb6514610d2a578063f8b45b0514610d44578063fb002c9714610d5a57600080fd5b8063ea4cfe1214610c73578063eb472fc414610c93578063ee40166e14610cb3578063f11a24d314610cc9578063f2fde38b14610cdf57600080fd5b8063d85ba063116100fd578063d85ba06314610bcc578063dc3f0d0f14610be2578063dd62ed3e14610c02578063e2f4560514610c48578063e884f26014610c5e57600080fd5b8063c18bc19514610b3c578063c5f956af14610b5c578063c876d0b914610b7c578063cc2ffe7c14610b96578063d257b34f14610bac57600080fd5b80639a7a23d6116101c7578063b62496f51161018b578063b62496f514610a8d578063b987553914610abd578063bbc0c74214610add578063c024666814610afc578063c17b5b8c14610b1c57600080fd5b80639a7a23d614610a02578063a28e86d314610a22578063a457c2d714610a37578063a62068ce14610a57578063a9059cbb14610a6d57600080fd5b806385ecfd281161020e57806385ecfd281461096757806388e765ff146109975780638da5cb5b146109ad57806395d89b41146109cb5780639a5bd2dd146109e057600080fd5b80638095d564146108e757806382aa7c68146109075780638366e79a1461092757806385b12c7c1461094757600080fd5b80634a62bb651161035b5780636a486a8e116102d85780636ddd17131161029c5780636ddd17131461085257806370a0823114610872578063751039fc146108925780637571336a146108a75780637e926b4b146108c757600080fd5b80636a486a8e146107e65780636b0a894c146107fc5780636b2fb124146108125780636bc9cc62146108285780636bd62d7d1461083d57600080fd5b80635a139dd41161031f5780635a139dd4146107645780635bb988c91461077a5780635c068a8c1461079a5780636605bfda146107b057806366d602ae146107d057600080fd5b80634a62bb65146106e85780634f77f6c01461070257806350ef22511461071857806351f205e41461073857806358a6d5311461074d57600080fd5b80631a8145bb116103e95780632dd9a823116103ad5780632dd9a82314610657578063313ce5671461066c5780633950935114610688578063452ed4f1146106a8578063499b8394146106c857600080fd5b80631a8145bb146105c25780631d5915f3146105d857806323b872dd146105f85780632a5f43ad146106185780632be32b611461063757600080fd5b80630ad6af6e116104305780630ad6af6e1461051c5780630fcdfb941461053e57806310d5de53146105535780631805805b1461058357806318160ddd146105a357600080fd5b806301e0beaf1461046d57806306fdde03146104a25780630758d924146104c4578063095ea7b3146104fc57600080fd5b3661046857005b600080fd5b34801561047957600080fd5b5060245461048d9062010000900460ff1681565b60405190151581526020015b60405180910390f35b3480156104ae57600080fd5b506104b7610d70565b6040516104999190613f5d565b3480156104d057600080fd5b506009546104e4906001600160a01b031681565b6040516001600160a01b039091168152602001610499565b34801561050857600080fd5b5061048d610517366004613fc3565b610e02565b34801561052857600080fd5b5061053c610537366004613fef565b610e19565b005b34801561054a57600080fd5b5061053c611023565b34801561055f57600080fd5b5061048d61056e366004614008565b60266020526000908152604090205460ff1681565b34801561058f57600080fd5b5061053c61059e366004614008565b6110d8565b3480156105af57600080fd5b506002545b604051908152602001610499565b3480156105ce57600080fd5b506105b460225481565b3480156105e457600080fd5b5061053c6105f3366004614008565b61118e565b34801561060457600080fd5b5061048d61061336600461402c565b6112b7565b34801561062457600080fd5b5060245461048d90610100900460ff1681565b34801561064357600080fd5b5061053c610652366004613fef565b611361565b34801561066357600080fd5b5061053c611502565b34801561067857600080fd5b5060405160128152602001610499565b34801561069457600080fd5b5061048d6106a3366004613fc3565b6115ac565b3480156106b457600080fd5b50600a546104e4906001600160a01b031681565b3480156106d457600080fd5b5061053c6106e3366004614008565b6115e8565b3480156106f457600080fd5b5060135461048d9060ff1681565b34801561070e57600080fd5b506105b4601e5481565b34801561072457600080fd5b5061053c61073336600461406d565b611682565b34801561074457600080fd5b5061053c611757565b34801561075957600080fd5b50600f54431061048d565b34801561077057600080fd5b506105b460175481565b34801561078657600080fd5b5061053c610795366004614008565b611860565b3480156107a657600080fd5b506105b460195481565b3480156107bc57600080fd5b5061053c6107cb366004614008565b611913565b3480156107dc57600080fd5b506105b460075481565b3480156107f257600080fd5b506105b4601d5481565b34801561080857600080fd5b506105b460125481565b34801561081e57600080fd5b506105b460205481565b34801561083457600080fd5b5061053c6119ad565b34801561084957600080fd5b5061053c611a39565b34801561085e57600080fd5b5060135461048d9062010000900460ff1681565b34801561087e57600080fd5b506105b461088d366004614008565b611af0565b34801561089e57600080fd5b5061053c611b0b565b3480156108b357600080fd5b5061053c6108c236600461409d565b611b41565b3480156108d357600080fd5b5061053c6108e23660046140d6565b611c09565b3480156108f357600080fd5b5061053c6109023660046140f3565b611ccb565b34801561091357600080fd5b5061053c610922366004613fef565b611d73565b34801561093357600080fd5b5061048d61094236600461411f565b611e67565b34801561095357600080fd5b5061053c610962366004613fef565b6120a1565b34801561097357600080fd5b5061048d610982366004614008565b60106020526000908152604090205460ff1681565b3480156109a357600080fd5b506105b460065481565b3480156109b957600080fd5b506005546001600160a01b03166104e4565b3480156109d757600080fd5b506104b761228e565b3480156109ec57600080fd5b506109f561229d565b6040516104999190614191565b348015610a0e57600080fd5b5061053c610a1d36600461409d565b6122fe565b348015610a2e57600080fd5b5061053c6123f2565b348015610a4357600080fd5b5061048d610a52366004613fc3565b61242b565b348015610a6357600080fd5b506105b4600f5481565b348015610a7957600080fd5b5061048d610a88366004613fc3565b6124c4565b348015610a9957600080fd5b5061048d610aa8366004614008565b60276020526000908152604090205460ff1681565b348015610ac957600080fd5b5061053c610ad83660046140d6565b6124d1565b348015610ae957600080fd5b5060135461048d90610100900460ff1681565b348015610b0857600080fd5b5061053c610b1736600461409d565b612590565b348015610b2857600080fd5b5061053c610b373660046140f3565b612619565b348015610b4857600080fd5b5061053c610b57366004613fef565b6126bc565b348015610b6857600080fd5b50600d546104e4906001600160a01b031681565b348015610b8857600080fd5b5060155461048d9060ff1681565b348015610ba257600080fd5b506105b460235481565b348015610bb857600080fd5b5061053c610bc7366004613fef565b61285b565b348015610bd857600080fd5b506105b460165481565b348015610bee57600080fd5b5061053c610bfd366004613fef565b6129a6565b348015610c0e57600080fd5b506105b4610c1d36600461411f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c5457600080fd5b506105b4600b5481565b348015610c6a57600080fd5b5061053c612b41565b348015610c7f57600080fd5b50600c546104e4906001600160a01b031681565b348015610c9f57600080fd5b506104e4610cae366004613fef565b612b77565b348015610cbf57600080fd5b506105b4600e5481565b348015610cd557600080fd5b506105b460185481565b348015610ceb57600080fd5b5061053c610cfa366004614008565b612ba1565b348015610d0b57600080fd5b5061053c612c8c565b348015610d2057600080fd5b506105b4601f5481565b348015610d3657600080fd5b5060245461048d9060ff1681565b348015610d5057600080fd5b506105b460085481565b348015610d6657600080fd5b506105b460215481565b606060038054610d7f906141a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610dab906141a4565b8015610df85780601f10610dcd57610100808354040283529160200191610df8565b820191906000526020600020905b815481529060010190602001808311610ddb57829003601f168201915b5050505050905090565b6000610e0f338484612cf8565b5060015b92915050565b6005546001600160a01b03163314610e4c5760405162461bcd60e51b8152600401610e43906141de565b60405180910390fd5b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb99190614213565b905060008111610f0b5760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610e43565b6000612710610f1a8484614242565b610f249190614259565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f919061427b565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90610fda9030908590600190819033904290600401614298565b60408051808303816000875af1158015610ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101c91906142d3565b5050505050565b6005546001600160a01b0316331461104d5760405162461bcd60e51b8152600401610e43906141de565b60245460ff16156110a05760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e43565b6024805460ff191660011790556040517f7fdc9c6ba047bed382d2ae7be131e601f2fead137f249278e33c13a6928b080890600090a1565b6005546001600160a01b031633146111025760405162461bcd60e51b8152600401610e43906141de565b601354610100900460ff161561116c5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610e43565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111b85760405162461bcd60e51b8152600401610e43906141de565b60245462010000900460ff1661122a5760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920686173206265656e2060448201527064697361626c656420666f72657665722160781b6064820152608401610e43565b6001600160a01b03811660009081526010602052604090205460ff16156112935760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610e43565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b60006112c4848484612e1c565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156113495760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610e43565b6113568533858403612cf8565b506001949350505050565b6005546001600160a01b0316331461138b5760405162461bcd60e51b8152600401610e43906141de565b670de0b6b3a76400006103e86113a060025490565b6113ab906005614242565b6113b59190614259565b6113bf9190614259565b8110156114205760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610e43565b670de0b6b3a7640000606461143460025490565b61143f906002614242565b6114499190614259565b6114539190614259565b8111156114b45760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610e43565b6114c681670de0b6b3a7640000614242565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b0316331461152c5760405162461bcd60e51b8152600401610e43906141de565b60245462010000900460ff1661159e5760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920616c72656164792064604482015270697361626c656420666f7265766572212160781b6064820152608401610e43565b6024805462ff000019169055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e0f9185906115e39086906142f7565b612cf8565b6005546001600160a01b031633146116125760405162461bcd60e51b8152600401610e43906141de565b6001600160a01b0381166116385760405162461bcd60e51b8152600401610e439061430a565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146116ac5760405162461bcd60e51b8152600401610e43906141de565b602454610100900460ff166117035760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f64652064697361626c656420666f722065766572216044820152606401610e43565b601782905560006018819055601981905561171e81846142f7565b61172891906142f7565b601655601e8190556000601f819055602081905561174681836142f7565b61175091906142f7565b601d555050565b6005546001600160a01b031633146117815760405162461bcd60e51b8152600401610e43906141de565b600b5461178d30611af0565b1015611803576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610e43565b600a805460ff60a01b1916600160a01b17905561181e61397b565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461188a5760405162461bcd60e51b8152600401610e43906141de565b6001600160a01b03811660009081526010602052604090205460ff166118f25760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610e43565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b0316331461193d5760405162461bcd60e51b8152600401610e43906141de565b6001600160a01b0381166119635760405162461bcd60e51b8152600401610e439061430a565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b031633146119d75760405162461bcd60e51b8152600401610e43906141de565b601a546017819055601b546018819055601c546019819055916119fa91906142f7565b611a0491906142f7565b601655601a54601e819055601b54601f819055601c54602081905591611a2a91906142f7565b611a3491906142f7565b601d55565b6005546001600160a01b03163314611a635760405162461bcd60e51b8152600401610e43906141de565b602454610100900460ff16611aba5760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f646520616c72656164792064697361626c656421216044820152606401610e43565b6024805461ff00191690556040517fca3625aacc6ff58610754d78cf8e59adacd2752c6d6292edcb6068d395997ba090600090a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611b355760405162461bcd60e51b8152600401610e43906141de565b6013805460ff19169055565b6005546001600160a01b03163314611b6b5760405162461bcd60e51b8152600401610e43906141de565b80611bde57600a546001600160a01b0390811690831603611bde5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610e43565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c335760405162461bcd60e51b8152600401610e43906141de565b80611c805760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610e43565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b03163314611cf55760405162461bcd60e51b8152600401610e43906141de565b60178390556018829055601981905580611d0f83856142f7565b611d1991906142f7565b6016819055600f1015611d6e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610e43565b505050565b6005546001600160a01b03163314611d9d5760405162461bcd60e51b8152600401610e43906141de565b601354610100900460ff1615611df55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610e43565b600a811115611e165760405162461bcd60e51b8152600401610e4390614350565b6013805462ffff0019166201010017905543600e819055611e389082906142f7565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611e945760405162461bcd60e51b8152600401610e43906141de565b6001600160a01b038316611eea5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610e43565b6001600160a01b03831630141580611f0a5750601354610100900460ff16155b611f735760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610e43565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fde9190614213565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015612031573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612055919061427b565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120cb5760405162461bcd60e51b8152600401610e43906141de565b601354610100900460ff16156120f35760405162461bcd60e51b8152600401610e4390614397565b600a81106121135760405162461bcd60e51b8152600401610e4390614350565b6013805462ffff0019166201010017905543600e8190556121359082906142f7565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116121815760405162461bcd60e51b8152600401610e43906143e2565b600061218c30611af0565b116121e85760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610e43565b6009546122039030906001600160a01b03166115e382611af0565b6009546001600160a01b031663f305d719473061221f81611af0565b60008030426040518863ffffffff1660e01b815260040161224596959493929190614298565b60606040518083038185885af1158015612263573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122889190614425565b50505050565b606060048054610d7f906141a4565b60606011805480602002602001604051908101604052809291908181526020018280548015610df857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116122d7575050505050905090565b6005546001600160a01b031633146123285760405162461bcd60e51b8152600401610e43906141de565b600a546001600160a01b03908116908316036123ac5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610e43565b6123b68282613b83565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b0316331461241c5760405162461bcd60e51b8152600401610e43906141de565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156124ad5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e43565b6124ba3385858403612cf8565b5060019392505050565b6000610e0f338484612e1c565b6005546001600160a01b031633146124fb5760405162461bcd60e51b8152600401610e43906141de565b806125485760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610e43565b601354610100900460ff16156125705760405162461bcd60e51b8152600401610e4390614397565b600047116121815760405162461bcd60e51b8152600401610e43906143e2565b6005546001600160a01b031633146125ba5760405162461bcd60e51b8152600401610e43906141de565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146126435760405162461bcd60e51b8152600401610e43906141de565b601e839055601f82905560208190558061265d83856142f7565b61266791906142f7565b601d81905560141015611d6e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610e43565b6005546001600160a01b031633146126e65760405162461bcd60e51b8152600401610e43906141de565b670de0b6b3a76400006103e86126fb60025490565b612706906005614242565b6127109190614259565b61271a9190614259565b81101561277e5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610e43565b670de0b6b3a7640000606461279260025490565b61279d906005614242565b6127a79190614259565b6127b19190614259565b8111156128145760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20352560a81b6064820152608401610e43565b61282681670de0b6b3a7640000614242565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016114f7565b6005546001600160a01b031633146128855760405162461bcd60e51b8152600401610e43906141de565b620186a061289260025490565b61289d906001614242565b6128a79190614259565b8110156129145760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610e43565b6103e861292060025490565b61292b906001614242565b6129359190614259565b8111156129a15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610e43565b600b55565b6005546001600160a01b031633146129d05760405162461bcd60e51b8152600401610e43906141de565b670de0b6b3a76400006103e86129e560025490565b6129f0906005614242565b6129fa9190614259565b612a049190614259565b811015612a665760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610e43565b670de0b6b3a76400006064612a7a60025490565b612a85906002614242565b612a8f9190614259565b612a999190614259565b811115612afa5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610e43565b612b0c81670de0b6b3a7640000614242565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016114f7565b6005546001600160a01b03163314612b6b5760405162461bcd60e51b8152600401610e43906141de565b6015805460ff19169055565b60118181548110612b8757600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612bcb5760405162461bcd60e51b8152600401610e43906141de565b6001600160a01b038116612c305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e43565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612cb65760405162461bcd60e51b8152600401610e43906141de565b604051600090339047908381818185875af1925050503d8060008114612288576040519150601f19603f3d011682016040523d82523d6000602084013e612288565b6001600160a01b038316612d5a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e43565b6001600160a01b038216612dbb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e43565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612e425760405162461bcd60e51b8152600401610e4390614453565b6001600160a01b038216612e685760405162461bcd60e51b8152600401610e4390614498565b60008111612eb85760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610e43565b601354610100900460ff16612f4b576001600160a01b03831660009081526025602052604090205460ff1680612f0657506001600160a01b03821660009081526025602052604090205460ff165b612f4b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610e43565b600f544310158015612f645750601354610100900460ff165b15613034576001600160a01b03831660009081526010602052604090205460ff161580612f9e57506005546001600160a01b038381169116145b80612fb357506001600160a01b03821661dead145b6130345760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610e43565b60135460ff161561345a576005546001600160a01b0384811691161480159061306b57506005546001600160a01b03838116911614155b801561308257506001600160a01b03821661dead14155b80156130a757506001600160a01b03831660009081526025602052604090205460ff16155b80156130cc57506001600160a01b03821660009081526025602052604090205460ff16155b1561345a5760155460ff16156131e5576009546001600160a01b038381169116148015906131085750600a546001600160a01b03838116911614155b156131e5576131186002436144db565b32600090815260146020526040902054108015613156575061313b6002436144db565b6001600160a01b038316600090815260146020526040902054105b6131c05760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610e43565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff16801561322657506001600160a01b03821660009081526026602052604090205460ff16155b156132ed5760065481111561328e5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610e43565b60085461329a83611af0565b6132a490836142f7565b11156132e85760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610e43565b61345a565b6001600160a01b03821660009081526027602052604090205460ff16801561332e57506001600160a01b03831660009081526026602052604090205460ff16155b156133e05760245460ff1661337b5760405162461bcd60e51b815260206004820152601360248201527214d95b1b1a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610e43565b6007548111156132e85760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610e43565b6001600160a01b03821660009081526026602052604090205460ff1661345a5760085461340c83611af0565b61341690836142f7565b111561345a5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610e43565b600061346530611af0565b600b5490915081108015908190613484575060135462010000900460ff165b801561349a5750600a54600160a01b900460ff16155b80156134be57506001600160a01b03841660009081526027602052604090205460ff165b156134ec57600a805460ff60a01b1916600160a01b1790556134de61397b565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061352e57506001600160a01b03851660009081526025602052604090205460ff165b15613537575060005b6000811561396757600f5443108061357d5750670c7d713b49da000060065461356091906144db565b851015801561357d575043600f54600861357a91906142f7565b10155b80156135a157506001600160a01b03871660009081526027602052604090205460ff165b80156135c657506001600160a01b03861660009081526027602052604090205460ff16155b80156135eb57506001600160a01b03861660009081526025602052604090205460ff16155b80156135f957506000601654115b156137b057600f5443106136205760016006600082825461361a91906144db565b90915550505b6001600160a01b03861660009081526010602052604090205460ff16613700576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916136799084906142f7565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b606461370d866063614242565b6137179190614259565b90506016546018548261372a9190614242565b6137349190614259565b6022600082825461374591906142f7565b909155505060165460175461375a9083614242565b6137649190614259565b6021600082825461377591906142f7565b909155505060165460195461378a9083614242565b6137949190614259565b602360008282546137a591906142f7565b909155506139499050565b6001600160a01b03861660009081526027602052604090205460ff1680156137da57506000601d54115b1561386c576064601d54866137ef9190614242565b6137f99190614259565b9050601d54601f548261380c9190614242565b6138169190614259565b6022600082825461382791906142f7565b9091555050601d54601e5461383c9083614242565b6138469190614259565b6021600082825461385791906142f7565b9091555050601d5460205461378a9083614242565b6001600160a01b03871660009081526027602052604090205460ff16801561389657506000601654115b15613949576064601654866138ab9190614242565b6138b59190614259565b9050601654601854826138c89190614242565b6138d29190614259565b602260008282546138e391906142f7565b90915550506016546017546138f89083614242565b6139029190614259565b6021600082825461391391906142f7565b90915550506016546019546139289083614242565b6139329190614259565b6023600082825461394391906142f7565b90915550505b801561395a5761395a873083613bb1565b61396481866144db565b94505b613972878787613bb1565b50505050505050565b600061398630611af0565b9050600060235460215460225461399d91906142f7565b6139a791906142f7565b90508115806139b4575080155b156139bd575050565b600b546139cb90600a614242565b8211156139e357600b546139e090600a614242565b91505b600080600283602254866139f79190614242565b613a019190614259565b613a0b9190614259565b9050613a1f613a1a82866144db565b613d06565b60225447908190600090613a3590600290614259565b613a3f90876144db565b602154613a4c9085614242565b613a569190614259565b905060006002602254613a699190614259565b613a7390886144db565b602354613a809086614242565b613a8a9190614259565b9050613a9681836142f7565b613aa090846144db565b60006022819055602181905560235592508415801590613ac05750600083115b15613acf57613acf8584613e60565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114613b1c576040519150601f19603f3d011682016040523d82523d6000602084013e613b21565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613b71576040519150601f19603f3d011682016040523d82523d6000602084013e613b76565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556123b68282613efa565b6001600160a01b038316613bd75760405162461bcd60e51b8152600401610e4390614453565b6001600160a01b038216613bfd5760405162461bcd60e51b8152600401610e4390614498565b6001600160a01b03831660009081526020819052604090205481811015613c755760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e43565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613cac9084906142f7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613cf891815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d3b57613d3b6144ee565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db89190614504565b81600181518110613dcb57613dcb6144ee565b6001600160a01b039283166020918202929092010152600954613df19130911684612cf8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e2a908590600090869030904290600401614521565b600060405180830381600087803b158015613e4457600080fd5b505af1158015613e58573d6000803e3d6000fd5b505050505050565b600954613e789030906001600160a01b031684612cf8565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613eb79030908790600090819061dead904290600401614298565b60606040518083038185885af1158015613ed5573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061101c9190614425565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015613f8a57858101830151858201604001528201613f6e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613fc057600080fd5b50565b60008060408385031215613fd657600080fd5b8235613fe181613fab565b946020939093013593505050565b60006020828403121561400157600080fd5b5035919050565b60006020828403121561401a57600080fd5b813561402581613fab565b9392505050565b60008060006060848603121561404157600080fd5b833561404c81613fab565b9250602084013561405c81613fab565b929592945050506040919091013590565b6000806040838503121561408057600080fd5b50508035926020909101359150565b8015158114613fc057600080fd5b600080604083850312156140b057600080fd5b82356140bb81613fab565b915060208301356140cb8161408f565b809150509250929050565b6000602082840312156140e857600080fd5b81356140258161408f565b60008060006060848603121561410857600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561413257600080fd5b823561413d81613fab565b915060208301356140cb81613fab565b600081518084526020808501945080840160005b838110156141865781516001600160a01b031687529582019590820190600101614161565b509495945050505050565b602081526000614025602083018461414d565b600181811c908216806141b857607f821691505b6020821081036141d857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561422557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e1357610e1361422c565b60008261427657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561428d57600080fd5b81516140258161408f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080604083850312156142e657600080fd5b505080516020909101519092909150565b80820180821115610e1357610e1361422c565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b60008060006060848603121561443a57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610e1357610e1361422c565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561451657600080fd5b815161402581613fab565b85815284602082015260a06040820152600061454060a083018661414d565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212204bbfc278dc195bd5259a3aaae47dd0b6952ded2a5921b43976d5f7daaedfc3ea64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104615760003560e01c80638095d5641161023f578063c18bc19511610139578063ea4cfe12116100b6578063f5648a4f1161007a578063f5648a4f14610cff578063f637434214610d14578063f771cb6514610d2a578063f8b45b0514610d44578063fb002c9714610d5a57600080fd5b8063ea4cfe1214610c73578063eb472fc414610c93578063ee40166e14610cb3578063f11a24d314610cc9578063f2fde38b14610cdf57600080fd5b8063d85ba063116100fd578063d85ba06314610bcc578063dc3f0d0f14610be2578063dd62ed3e14610c02578063e2f4560514610c48578063e884f26014610c5e57600080fd5b8063c18bc19514610b3c578063c5f956af14610b5c578063c876d0b914610b7c578063cc2ffe7c14610b96578063d257b34f14610bac57600080fd5b80639a7a23d6116101c7578063b62496f51161018b578063b62496f514610a8d578063b987553914610abd578063bbc0c74214610add578063c024666814610afc578063c17b5b8c14610b1c57600080fd5b80639a7a23d614610a02578063a28e86d314610a22578063a457c2d714610a37578063a62068ce14610a57578063a9059cbb14610a6d57600080fd5b806385ecfd281161020e57806385ecfd281461096757806388e765ff146109975780638da5cb5b146109ad57806395d89b41146109cb5780639a5bd2dd146109e057600080fd5b80638095d564146108e757806382aa7c68146109075780638366e79a1461092757806385b12c7c1461094757600080fd5b80634a62bb651161035b5780636a486a8e116102d85780636ddd17131161029c5780636ddd17131461085257806370a0823114610872578063751039fc146108925780637571336a146108a75780637e926b4b146108c757600080fd5b80636a486a8e146107e65780636b0a894c146107fc5780636b2fb124146108125780636bc9cc62146108285780636bd62d7d1461083d57600080fd5b80635a139dd41161031f5780635a139dd4146107645780635bb988c91461077a5780635c068a8c1461079a5780636605bfda146107b057806366d602ae146107d057600080fd5b80634a62bb65146106e85780634f77f6c01461070257806350ef22511461071857806351f205e41461073857806358a6d5311461074d57600080fd5b80631a8145bb116103e95780632dd9a823116103ad5780632dd9a82314610657578063313ce5671461066c5780633950935114610688578063452ed4f1146106a8578063499b8394146106c857600080fd5b80631a8145bb146105c25780631d5915f3146105d857806323b872dd146105f85780632a5f43ad146106185780632be32b611461063757600080fd5b80630ad6af6e116104305780630ad6af6e1461051c5780630fcdfb941461053e57806310d5de53146105535780631805805b1461058357806318160ddd146105a357600080fd5b806301e0beaf1461046d57806306fdde03146104a25780630758d924146104c4578063095ea7b3146104fc57600080fd5b3661046857005b600080fd5b34801561047957600080fd5b5060245461048d9062010000900460ff1681565b60405190151581526020015b60405180910390f35b3480156104ae57600080fd5b506104b7610d70565b6040516104999190613f5d565b3480156104d057600080fd5b506009546104e4906001600160a01b031681565b6040516001600160a01b039091168152602001610499565b34801561050857600080fd5b5061048d610517366004613fc3565b610e02565b34801561052857600080fd5b5061053c610537366004613fef565b610e19565b005b34801561054a57600080fd5b5061053c611023565b34801561055f57600080fd5b5061048d61056e366004614008565b60266020526000908152604090205460ff1681565b34801561058f57600080fd5b5061053c61059e366004614008565b6110d8565b3480156105af57600080fd5b506002545b604051908152602001610499565b3480156105ce57600080fd5b506105b460225481565b3480156105e457600080fd5b5061053c6105f3366004614008565b61118e565b34801561060457600080fd5b5061048d61061336600461402c565b6112b7565b34801561062457600080fd5b5060245461048d90610100900460ff1681565b34801561064357600080fd5b5061053c610652366004613fef565b611361565b34801561066357600080fd5b5061053c611502565b34801561067857600080fd5b5060405160128152602001610499565b34801561069457600080fd5b5061048d6106a3366004613fc3565b6115ac565b3480156106b457600080fd5b50600a546104e4906001600160a01b031681565b3480156106d457600080fd5b5061053c6106e3366004614008565b6115e8565b3480156106f457600080fd5b5060135461048d9060ff1681565b34801561070e57600080fd5b506105b4601e5481565b34801561072457600080fd5b5061053c61073336600461406d565b611682565b34801561074457600080fd5b5061053c611757565b34801561075957600080fd5b50600f54431061048d565b34801561077057600080fd5b506105b460175481565b34801561078657600080fd5b5061053c610795366004614008565b611860565b3480156107a657600080fd5b506105b460195481565b3480156107bc57600080fd5b5061053c6107cb366004614008565b611913565b3480156107dc57600080fd5b506105b460075481565b3480156107f257600080fd5b506105b4601d5481565b34801561080857600080fd5b506105b460125481565b34801561081e57600080fd5b506105b460205481565b34801561083457600080fd5b5061053c6119ad565b34801561084957600080fd5b5061053c611a39565b34801561085e57600080fd5b5060135461048d9062010000900460ff1681565b34801561087e57600080fd5b506105b461088d366004614008565b611af0565b34801561089e57600080fd5b5061053c611b0b565b3480156108b357600080fd5b5061053c6108c236600461409d565b611b41565b3480156108d357600080fd5b5061053c6108e23660046140d6565b611c09565b3480156108f357600080fd5b5061053c6109023660046140f3565b611ccb565b34801561091357600080fd5b5061053c610922366004613fef565b611d73565b34801561093357600080fd5b5061048d61094236600461411f565b611e67565b34801561095357600080fd5b5061053c610962366004613fef565b6120a1565b34801561097357600080fd5b5061048d610982366004614008565b60106020526000908152604090205460ff1681565b3480156109a357600080fd5b506105b460065481565b3480156109b957600080fd5b506005546001600160a01b03166104e4565b3480156109d757600080fd5b506104b761228e565b3480156109ec57600080fd5b506109f561229d565b6040516104999190614191565b348015610a0e57600080fd5b5061053c610a1d36600461409d565b6122fe565b348015610a2e57600080fd5b5061053c6123f2565b348015610a4357600080fd5b5061048d610a52366004613fc3565b61242b565b348015610a6357600080fd5b506105b4600f5481565b348015610a7957600080fd5b5061048d610a88366004613fc3565b6124c4565b348015610a9957600080fd5b5061048d610aa8366004614008565b60276020526000908152604090205460ff1681565b348015610ac957600080fd5b5061053c610ad83660046140d6565b6124d1565b348015610ae957600080fd5b5060135461048d90610100900460ff1681565b348015610b0857600080fd5b5061053c610b1736600461409d565b612590565b348015610b2857600080fd5b5061053c610b373660046140f3565b612619565b348015610b4857600080fd5b5061053c610b57366004613fef565b6126bc565b348015610b6857600080fd5b50600d546104e4906001600160a01b031681565b348015610b8857600080fd5b5060155461048d9060ff1681565b348015610ba257600080fd5b506105b460235481565b348015610bb857600080fd5b5061053c610bc7366004613fef565b61285b565b348015610bd857600080fd5b506105b460165481565b348015610bee57600080fd5b5061053c610bfd366004613fef565b6129a6565b348015610c0e57600080fd5b506105b4610c1d36600461411f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c5457600080fd5b506105b4600b5481565b348015610c6a57600080fd5b5061053c612b41565b348015610c7f57600080fd5b50600c546104e4906001600160a01b031681565b348015610c9f57600080fd5b506104e4610cae366004613fef565b612b77565b348015610cbf57600080fd5b506105b4600e5481565b348015610cd557600080fd5b506105b460185481565b348015610ceb57600080fd5b5061053c610cfa366004614008565b612ba1565b348015610d0b57600080fd5b5061053c612c8c565b348015610d2057600080fd5b506105b4601f5481565b348015610d3657600080fd5b5060245461048d9060ff1681565b348015610d5057600080fd5b506105b460085481565b348015610d6657600080fd5b506105b460215481565b606060038054610d7f906141a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610dab906141a4565b8015610df85780601f10610dcd57610100808354040283529160200191610df8565b820191906000526020600020905b815481529060010190602001808311610ddb57829003601f168201915b5050505050905090565b6000610e0f338484612cf8565b5060015b92915050565b6005546001600160a01b03163314610e4c5760405162461bcd60e51b8152600401610e43906141de565b60405180910390fd5b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb99190614213565b905060008111610f0b5760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610e43565b6000612710610f1a8484614242565b610f249190614259565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f919061427b565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90610fda9030908590600190819033904290600401614298565b60408051808303816000875af1158015610ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101c91906142d3565b5050505050565b6005546001600160a01b0316331461104d5760405162461bcd60e51b8152600401610e43906141de565b60245460ff16156110a05760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e43565b6024805460ff191660011790556040517f7fdc9c6ba047bed382d2ae7be131e601f2fead137f249278e33c13a6928b080890600090a1565b6005546001600160a01b031633146111025760405162461bcd60e51b8152600401610e43906141de565b601354610100900460ff161561116c5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610e43565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111b85760405162461bcd60e51b8152600401610e43906141de565b60245462010000900460ff1661122a5760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920686173206265656e2060448201527064697361626c656420666f72657665722160781b6064820152608401610e43565b6001600160a01b03811660009081526010602052604090205460ff16156112935760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610e43565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b60006112c4848484612e1c565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156113495760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610e43565b6113568533858403612cf8565b506001949350505050565b6005546001600160a01b0316331461138b5760405162461bcd60e51b8152600401610e43906141de565b670de0b6b3a76400006103e86113a060025490565b6113ab906005614242565b6113b59190614259565b6113bf9190614259565b8110156114205760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610e43565b670de0b6b3a7640000606461143460025490565b61143f906002614242565b6114499190614259565b6114539190614259565b8111156114b45760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610e43565b6114c681670de0b6b3a7640000614242565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b0316331461152c5760405162461bcd60e51b8152600401610e43906141de565b60245462010000900460ff1661159e5760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920616c72656164792064604482015270697361626c656420666f7265766572212160781b6064820152608401610e43565b6024805462ff000019169055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e0f9185906115e39086906142f7565b612cf8565b6005546001600160a01b031633146116125760405162461bcd60e51b8152600401610e43906141de565b6001600160a01b0381166116385760405162461bcd60e51b8152600401610e439061430a565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146116ac5760405162461bcd60e51b8152600401610e43906141de565b602454610100900460ff166117035760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f64652064697361626c656420666f722065766572216044820152606401610e43565b601782905560006018819055601981905561171e81846142f7565b61172891906142f7565b601655601e8190556000601f819055602081905561174681836142f7565b61175091906142f7565b601d555050565b6005546001600160a01b031633146117815760405162461bcd60e51b8152600401610e43906141de565b600b5461178d30611af0565b1015611803576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610e43565b600a805460ff60a01b1916600160a01b17905561181e61397b565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461188a5760405162461bcd60e51b8152600401610e43906141de565b6001600160a01b03811660009081526010602052604090205460ff166118f25760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610e43565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b0316331461193d5760405162461bcd60e51b8152600401610e43906141de565b6001600160a01b0381166119635760405162461bcd60e51b8152600401610e439061430a565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b031633146119d75760405162461bcd60e51b8152600401610e43906141de565b601a546017819055601b546018819055601c546019819055916119fa91906142f7565b611a0491906142f7565b601655601a54601e819055601b54601f819055601c54602081905591611a2a91906142f7565b611a3491906142f7565b601d55565b6005546001600160a01b03163314611a635760405162461bcd60e51b8152600401610e43906141de565b602454610100900460ff16611aba5760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f646520616c72656164792064697361626c656421216044820152606401610e43565b6024805461ff00191690556040517fca3625aacc6ff58610754d78cf8e59adacd2752c6d6292edcb6068d395997ba090600090a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611b355760405162461bcd60e51b8152600401610e43906141de565b6013805460ff19169055565b6005546001600160a01b03163314611b6b5760405162461bcd60e51b8152600401610e43906141de565b80611bde57600a546001600160a01b0390811690831603611bde5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610e43565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c335760405162461bcd60e51b8152600401610e43906141de565b80611c805760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610e43565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b03163314611cf55760405162461bcd60e51b8152600401610e43906141de565b60178390556018829055601981905580611d0f83856142f7565b611d1991906142f7565b6016819055600f1015611d6e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610e43565b505050565b6005546001600160a01b03163314611d9d5760405162461bcd60e51b8152600401610e43906141de565b601354610100900460ff1615611df55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610e43565b600a811115611e165760405162461bcd60e51b8152600401610e4390614350565b6013805462ffff0019166201010017905543600e819055611e389082906142f7565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611e945760405162461bcd60e51b8152600401610e43906141de565b6001600160a01b038316611eea5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610e43565b6001600160a01b03831630141580611f0a5750601354610100900460ff16155b611f735760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610e43565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fde9190614213565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015612031573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612055919061427b565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120cb5760405162461bcd60e51b8152600401610e43906141de565b601354610100900460ff16156120f35760405162461bcd60e51b8152600401610e4390614397565b600a81106121135760405162461bcd60e51b8152600401610e4390614350565b6013805462ffff0019166201010017905543600e8190556121359082906142f7565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116121815760405162461bcd60e51b8152600401610e43906143e2565b600061218c30611af0565b116121e85760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610e43565b6009546122039030906001600160a01b03166115e382611af0565b6009546001600160a01b031663f305d719473061221f81611af0565b60008030426040518863ffffffff1660e01b815260040161224596959493929190614298565b60606040518083038185885af1158015612263573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122889190614425565b50505050565b606060048054610d7f906141a4565b60606011805480602002602001604051908101604052809291908181526020018280548015610df857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116122d7575050505050905090565b6005546001600160a01b031633146123285760405162461bcd60e51b8152600401610e43906141de565b600a546001600160a01b03908116908316036123ac5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610e43565b6123b68282613b83565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b0316331461241c5760405162461bcd60e51b8152600401610e43906141de565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156124ad5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e43565b6124ba3385858403612cf8565b5060019392505050565b6000610e0f338484612e1c565b6005546001600160a01b031633146124fb5760405162461bcd60e51b8152600401610e43906141de565b806125485760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610e43565b601354610100900460ff16156125705760405162461bcd60e51b8152600401610e4390614397565b600047116121815760405162461bcd60e51b8152600401610e43906143e2565b6005546001600160a01b031633146125ba5760405162461bcd60e51b8152600401610e43906141de565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146126435760405162461bcd60e51b8152600401610e43906141de565b601e839055601f82905560208190558061265d83856142f7565b61266791906142f7565b601d81905560141015611d6e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610e43565b6005546001600160a01b031633146126e65760405162461bcd60e51b8152600401610e43906141de565b670de0b6b3a76400006103e86126fb60025490565b612706906005614242565b6127109190614259565b61271a9190614259565b81101561277e5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610e43565b670de0b6b3a7640000606461279260025490565b61279d906005614242565b6127a79190614259565b6127b19190614259565b8111156128145760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20352560a81b6064820152608401610e43565b61282681670de0b6b3a7640000614242565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016114f7565b6005546001600160a01b031633146128855760405162461bcd60e51b8152600401610e43906141de565b620186a061289260025490565b61289d906001614242565b6128a79190614259565b8110156129145760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610e43565b6103e861292060025490565b61292b906001614242565b6129359190614259565b8111156129a15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610e43565b600b55565b6005546001600160a01b031633146129d05760405162461bcd60e51b8152600401610e43906141de565b670de0b6b3a76400006103e86129e560025490565b6129f0906005614242565b6129fa9190614259565b612a049190614259565b811015612a665760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610e43565b670de0b6b3a76400006064612a7a60025490565b612a85906002614242565b612a8f9190614259565b612a999190614259565b811115612afa5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610e43565b612b0c81670de0b6b3a7640000614242565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016114f7565b6005546001600160a01b03163314612b6b5760405162461bcd60e51b8152600401610e43906141de565b6015805460ff19169055565b60118181548110612b8757600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612bcb5760405162461bcd60e51b8152600401610e43906141de565b6001600160a01b038116612c305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e43565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612cb65760405162461bcd60e51b8152600401610e43906141de565b604051600090339047908381818185875af1925050503d8060008114612288576040519150601f19603f3d011682016040523d82523d6000602084013e612288565b6001600160a01b038316612d5a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e43565b6001600160a01b038216612dbb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e43565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612e425760405162461bcd60e51b8152600401610e4390614453565b6001600160a01b038216612e685760405162461bcd60e51b8152600401610e4390614498565b60008111612eb85760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610e43565b601354610100900460ff16612f4b576001600160a01b03831660009081526025602052604090205460ff1680612f0657506001600160a01b03821660009081526025602052604090205460ff165b612f4b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610e43565b600f544310158015612f645750601354610100900460ff165b15613034576001600160a01b03831660009081526010602052604090205460ff161580612f9e57506005546001600160a01b038381169116145b80612fb357506001600160a01b03821661dead145b6130345760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610e43565b60135460ff161561345a576005546001600160a01b0384811691161480159061306b57506005546001600160a01b03838116911614155b801561308257506001600160a01b03821661dead14155b80156130a757506001600160a01b03831660009081526025602052604090205460ff16155b80156130cc57506001600160a01b03821660009081526025602052604090205460ff16155b1561345a5760155460ff16156131e5576009546001600160a01b038381169116148015906131085750600a546001600160a01b03838116911614155b156131e5576131186002436144db565b32600090815260146020526040902054108015613156575061313b6002436144db565b6001600160a01b038316600090815260146020526040902054105b6131c05760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610e43565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff16801561322657506001600160a01b03821660009081526026602052604090205460ff16155b156132ed5760065481111561328e5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610e43565b60085461329a83611af0565b6132a490836142f7565b11156132e85760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610e43565b61345a565b6001600160a01b03821660009081526027602052604090205460ff16801561332e57506001600160a01b03831660009081526026602052604090205460ff16155b156133e05760245460ff1661337b5760405162461bcd60e51b815260206004820152601360248201527214d95b1b1a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610e43565b6007548111156132e85760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610e43565b6001600160a01b03821660009081526026602052604090205460ff1661345a5760085461340c83611af0565b61341690836142f7565b111561345a5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610e43565b600061346530611af0565b600b5490915081108015908190613484575060135462010000900460ff165b801561349a5750600a54600160a01b900460ff16155b80156134be57506001600160a01b03841660009081526027602052604090205460ff165b156134ec57600a805460ff60a01b1916600160a01b1790556134de61397b565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061352e57506001600160a01b03851660009081526025602052604090205460ff165b15613537575060005b6000811561396757600f5443108061357d5750670c7d713b49da000060065461356091906144db565b851015801561357d575043600f54600861357a91906142f7565b10155b80156135a157506001600160a01b03871660009081526027602052604090205460ff165b80156135c657506001600160a01b03861660009081526027602052604090205460ff16155b80156135eb57506001600160a01b03861660009081526025602052604090205460ff16155b80156135f957506000601654115b156137b057600f5443106136205760016006600082825461361a91906144db565b90915550505b6001600160a01b03861660009081526010602052604090205460ff16613700576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916136799084906142f7565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b606461370d866063614242565b6137179190614259565b90506016546018548261372a9190614242565b6137349190614259565b6022600082825461374591906142f7565b909155505060165460175461375a9083614242565b6137649190614259565b6021600082825461377591906142f7565b909155505060165460195461378a9083614242565b6137949190614259565b602360008282546137a591906142f7565b909155506139499050565b6001600160a01b03861660009081526027602052604090205460ff1680156137da57506000601d54115b1561386c576064601d54866137ef9190614242565b6137f99190614259565b9050601d54601f548261380c9190614242565b6138169190614259565b6022600082825461382791906142f7565b9091555050601d54601e5461383c9083614242565b6138469190614259565b6021600082825461385791906142f7565b9091555050601d5460205461378a9083614242565b6001600160a01b03871660009081526027602052604090205460ff16801561389657506000601654115b15613949576064601654866138ab9190614242565b6138b59190614259565b9050601654601854826138c89190614242565b6138d29190614259565b602260008282546138e391906142f7565b90915550506016546017546138f89083614242565b6139029190614259565b6021600082825461391391906142f7565b90915550506016546019546139289083614242565b6139329190614259565b6023600082825461394391906142f7565b90915550505b801561395a5761395a873083613bb1565b61396481866144db565b94505b613972878787613bb1565b50505050505050565b600061398630611af0565b9050600060235460215460225461399d91906142f7565b6139a791906142f7565b90508115806139b4575080155b156139bd575050565b600b546139cb90600a614242565b8211156139e357600b546139e090600a614242565b91505b600080600283602254866139f79190614242565b613a019190614259565b613a0b9190614259565b9050613a1f613a1a82866144db565b613d06565b60225447908190600090613a3590600290614259565b613a3f90876144db565b602154613a4c9085614242565b613a569190614259565b905060006002602254613a699190614259565b613a7390886144db565b602354613a809086614242565b613a8a9190614259565b9050613a9681836142f7565b613aa090846144db565b60006022819055602181905560235592508415801590613ac05750600083115b15613acf57613acf8584613e60565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114613b1c576040519150601f19603f3d011682016040523d82523d6000602084013e613b21565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613b71576040519150601f19603f3d011682016040523d82523d6000602084013e613b76565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556123b68282613efa565b6001600160a01b038316613bd75760405162461bcd60e51b8152600401610e4390614453565b6001600160a01b038216613bfd5760405162461bcd60e51b8152600401610e4390614498565b6001600160a01b03831660009081526020819052604090205481811015613c755760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e43565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613cac9084906142f7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613cf891815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d3b57613d3b6144ee565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db89190614504565b81600181518110613dcb57613dcb6144ee565b6001600160a01b039283166020918202929092010152600954613df19130911684612cf8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e2a908590600090869030904290600401614521565b600060405180830381600087803b158015613e4457600080fd5b505af1158015613e58573d6000803e3d6000fd5b505050505050565b600954613e789030906001600160a01b031684612cf8565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613eb79030908790600090819061dead904290600401614298565b60606040518083038185885af1158015613ed5573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061101c9190614425565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015613f8a57858101830151858201604001528201613f6e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613fc057600080fd5b50565b60008060408385031215613fd657600080fd5b8235613fe181613fab565b946020939093013593505050565b60006020828403121561400157600080fd5b5035919050565b60006020828403121561401a57600080fd5b813561402581613fab565b9392505050565b60008060006060848603121561404157600080fd5b833561404c81613fab565b9250602084013561405c81613fab565b929592945050506040919091013590565b6000806040838503121561408057600080fd5b50508035926020909101359150565b8015158114613fc057600080fd5b600080604083850312156140b057600080fd5b82356140bb81613fab565b915060208301356140cb8161408f565b809150509250929050565b6000602082840312156140e857600080fd5b81356140258161408f565b60008060006060848603121561410857600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561413257600080fd5b823561413d81613fab565b915060208301356140cb81613fab565b600081518084526020808501945080840160005b838110156141865781516001600160a01b031687529582019590820190600101614161565b509495945050505050565b602081526000614025602083018461414d565b600181811c908216806141b857607f821691505b6020821081036141d857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561422557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e1357610e1361422c565b60008261427657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561428d57600080fd5b81516140258161408f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080604083850312156142e657600080fd5b505080516020909101519092909150565b80820180821115610e1357610e1361422c565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b60008060006060848603121561443a57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610e1357610e1361422c565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561451657600080fd5b815161402581613fab565b85815284602082015260a06040820152600061454060a083018661414d565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212204bbfc278dc195bd5259a3aaae47dd0b6952ded2a5921b43976d5f7daaedfc3ea64736f6c63430008110033

Deployed Bytecode Sourcemap

11025:28168:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12605:34;;;;;;;;;;-1:-1:-1;12605:34:0;;;;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;12605:34:0;;;;;;;;4377:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11166:27::-;;;;;;;;;;-1:-1:-1;11166:27:0;;;;-1:-1:-1;;;;;11166:27:0;;;;;;-1:-1:-1;;;;;941:32:1;;;923:51;;911:2;896:18;11166:27:0;759:221:1;5432:210:0;;;;;;;;;;-1:-1:-1;5432:210:0;;;;;:::i;:::-;;:::i;37350:667::-;;;;;;;;;;-1:-1:-1;37350:667:0;;;;;:::i;:::-;;:::i;:::-;;35825:185;;;;;;;;;;;;;:::i;12788:63::-;;;;;;;;;;-1:-1:-1;12788:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19178:194;;;;;;;;;;-1:-1:-1;19178:194:0;;;;;:::i;:::-;;:::i;4698:108::-;;;;;;;;;;-1:-1:-1;4786:12:0;;4698:108;;;2024:25:1;;;2012:2;1997:18;4698:108:0;1878:177:1;12442:33:0;;;;;;;;;;;;;;;;18681:300;;;;;;;;;;-1:-1:-1;18681:300:0;;;;;:::i;:::-;;:::i;5650:529::-;;;;;;;;;;-1:-1:-1;5650:529:0;;;;;:::i;:::-;;:::i;12561:37::-;;;;;;;;;;-1:-1:-1;12561:37:0;;;;;;;;;;;19539:456;;;;;;;;;;-1:-1:-1;19539:456:0;;;;;:::i;:::-;;:::i;36251:222::-;;;;;;;;;;;;;:::i;4597:93::-;;;;;;;;;;-1:-1:-1;4597:93:0;;4680:2;2663:36:1;;2651:2;2636:18;4597:93:0;2521:184:1;6187:297:0;;;;;;;;;;-1:-1:-1;6187:297:0;;;;;:::i;:::-;;:::i;11200:21::-;;;;;;;;;;-1:-1:-1;11200:21:0;;;;-1:-1:-1;;;;;11200:21:0;;;34503:357;;;;;;;;;;-1:-1:-1;34503:357:0;;;;;:::i;:::-;;:::i;11614:33::-;;;;;;;;;;-1:-1:-1;11614:33:0;;;;;;;;12285:32;;;;;;;;;;;;;;;;23494:504;;;;;;;;;;-1:-1:-1;23494:504:0;;;;;:::i;:::-;;:::i;35240:349::-;;;;;;;;;;;;;:::i;30865:121::-;;;;;;;;;;-1:-1:-1;30960:18:0;;30945:12;:33;30865:121;;11994:31;;;;;;;;;;;;;;;;18989:181;;;;;;;;;;-1:-1:-1;18989:181:0;;;;;:::i;:::-;;:::i;12069:29::-;;;;;;;;;;;;;;;;34868:320;;;;;;;;;;-1:-1:-1;34868:320:0;;;;;:::i;:::-;;:::i;11098:28::-;;;;;;;;;;;;;;;;12250;;;;;;;;;;;;;;;;11580:25;;;;;;;;;;;;;;;;12362:30;;;;;;;;;;;;;;;;24006:531;;;;;;;;;;;;;:::i;36018:225::-;;;;;;;;;;;;;:::i;11694:31::-;;;;;;;;;;-1:-1:-1;11694:31:0;;;;;;;;;;;4814:177;;;;;;;;;;-1:-1:-1;4814:177:0;;;;;:::i;:::-;;:::i;35641:84::-;;;;;;;;;;;;;:::i;21668:334::-;;;;;;;;;;-1:-1:-1;21668:334:0;;;;;:::i;:::-;;:::i;8908:265::-;;;;;;;;;;-1:-1:-1;8908:265:0;;;;;:::i;:::-;;:::i;22615:427::-;;;;;;;;;;-1:-1:-1;22615:427:0;;;;;:::i;:::-;;:::i;18097:464::-;;;;;;;;;;-1:-1:-1;18097:464:0;;;;;:::i;:::-;;:::i;33673:567::-;;;;;;;;;;-1:-1:-1;33673:567:0;;;;;:::i;:::-;;:::i;38025:1165::-;;;;;;;;;;-1:-1:-1;38025:1165:0;;;;;:::i;:::-;;:::i;11495:43::-;;;;;;;;;;-1:-1:-1;11495:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11064:27;;;;;;;;;;;;;;;;8694:79;;;;;;;;;;-1:-1:-1;8759:6:0;;-1:-1:-1;;;;;8759:6:0;8694:79;;4485:104;;;;;;;;;;;;;:::i;18569:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22010:353::-;;;;;;;;;;-1:-1:-1;22010:353:0;;;;;:::i;:::-;;:::i;35733:84::-;;;;;;;;;;;;;:::i;6492:482::-;;;;;;;;;;-1:-1:-1;6492:482:0;;;;;:::i;:::-;;:::i;11455:33::-;;;;;;;;;;;;;;;;4999:216;;;;;;;;;;-1:-1:-1;4999:216:0;;;;;:::i;:::-;;:::i;13009:57::-;;;;;;;;;;-1:-1:-1;13009:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36481:861;;;;;;;;;;-1:-1:-1;36481:861:0;;;;;:::i;:::-;;:::i;11654:33::-;;;;;;;;;;-1:-1:-1;11654:33:0;;;;;;;;;;;24545:182;;;;;;;;;;-1:-1:-1;24545:182:0;;;;;:::i;:::-;;:::i;23050:436::-;;;;;;;;;;-1:-1:-1;23050:436:0;;;;;:::i;:::-;;:::i;20472:461::-;;;;;;;;;;-1:-1:-1;20472:461:0;;;;;:::i;:::-;;:::i;11339:30::-;;;;;;;;;;-1:-1:-1;11339:30:0;;;;-1:-1:-1;;;;;11339:30:0;;;11912:39;;;;;;;;;;-1:-1:-1;11912:39:0;;;;;;;;12482:32;;;;;;;;;;;;;;;;21003:428;;;;;;;;;;-1:-1:-1;21003:428:0;;;;;:::i;:::-;;:::i;11960:27::-;;;;;;;;;;;;;;;;20003:461;;;;;;;;;;-1:-1:-1;20003:461:0;;;;;:::i;:::-;;:::i;5223:201::-;;;;;;;;;;-1:-1:-1;5223:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5389:18:0;;;5357:7;5389:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5223:201;11258:33;;;;;;;;;;;;;;;;19433:98;;;;;;;;;;;;;:::i;11300:32::-;;;;;;;;;;-1:-1:-1;11300:32:0;;;;-1:-1:-1;;;;;11300:32:0;;;11545:28;;;;;;;;;;-1:-1:-1;11545:28:0;;;;;:::i;:::-;;:::i;11378:37::-;;;;;;;;;;;;;;;;12032:30;;;;;;;;;;;;;;;;9181:281;;;;;;;;;;-1:-1:-1;9181:281:0;;;;;:::i;:::-;;:::i;34310:185::-;;;;;;;;;;;;;:::i;12324:31::-;;;;;;;;;;;;;;;;12521:33;;;;;;;;;;-1:-1:-1;12521:33:0;;;;;;;;11133:24;;;;;;;;;;;;;;;;12401:34;;;;;;;;;;;;;;;;4377:100;4431:13;4464:5;4457:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4377:100;:::o;5432:210::-;5551:4;5573:39;527:10;5596:7;5605:6;5573:8;:39::i;:::-;-1:-1:-1;5630:4:0;5432:210;;;;;:::o;37350:667::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;;;;;;;;;37444:6:::1;::::0;37437:39:::1;::::0;-1:-1:-1;;;37437:39:0;;37470:4:::1;37437:39;::::0;::::1;923:51:1::0;37417:17:0::1;::::0;-1:-1:-1;;;;;37444:6:0::1;::::0;37437:24:::1;::::0;896:18:1;;37437:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37417:59;;37509:1;37497:9;:13;37489:50;;;::::0;-1:-1:-1;;;37489:50:0;;6510:2:1;37489:50:0::1;::::0;::::1;6492:21:1::0;6549:2;6529:18;;;6522:30;6588:26;6568:18;;;6561:54;6632:18;;37489:50:0::1;6308:348:1::0;37489:50:0::1;37552:16;37595:5;37572:19;37584:7:::0;37572:9;:19:::1;:::i;:::-;37571:29;;;;:::i;:::-;37687:6;::::0;37711:9:::1;::::0;37680:52:::1;::::0;-1:-1:-1;;;37680:52:0;;-1:-1:-1;;;;;37711:9:0;;::::1;37680:52;::::0;::::1;7362:51:1::0;7429:18;;;7422:34;;;37552:48:0;;-1:-1:-1;37687:6:0::1;::::0;37680:22:::1;::::0;7335:18:1;;37680:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;37778:9:0::1;::::0;:231:::1;::::0;-1:-1:-1;;;37778:231:0;;-1:-1:-1;;;;;37778:9:0;;::::1;::::0;:28:::1;::::0;:231:::1;::::0;37829:4:::1;::::0;37849:8;;37778:9;;;;37958:10:::1;::::0;37983:15:::1;::::0;37778:231:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37406:611;;37350:667:::0;:::o;35825:185::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;35893:14:::1;::::0;::::1;;35892:15;35884:52;;;::::0;-1:-1:-1;;;35884:52:0;;8781:2:1;35884:52:0::1;::::0;::::1;8763:21:1::0;8820:2;8800:18;;;8793:30;8859:26;8839:18;;;8832:54;8903:18;;35884:52:0::1;8579:348:1::0;35884:52:0::1;35949:14;:21:::0;;-1:-1:-1;;35949:21:0::1;35966:4;35949:21;::::0;;35986:16:::1;::::0;::::1;::::0;35949:14:::1;::::0;35986:16:::1;35825:185::o:0;19178:194::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;19264:13:::1;::::0;::::1;::::0;::::1;;;19263:14;19255:68;;;::::0;-1:-1:-1;;;19255:68:0;;9134:2:1;19255:68:0::1;::::0;::::1;9116:21:1::0;9173:2;9153:18;;;9146:30;9212:34;9192:18;;;9185:62;-1:-1:-1;;;9263:18:1;;;9256:39;9312:19;;19255:68:0::1;8932:405:1::0;19255:68:0::1;19334:9;:30:::0;;-1:-1:-1;;;;;;19334:30:0::1;-1:-1:-1::0;;;;;19334:30:0;;;::::1;::::0;;;::::1;::::0;;19178:194::o;18681:300::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;18774:15:::1;::::0;;;::::1;;;18752:114;;;::::0;-1:-1:-1;;;18752:114:0;;9544:2:1;18752:114:0::1;::::0;::::1;9526:21:1::0;9583:2;9563:18;;;9556:30;9622:34;9602:18;;;9595:62;-1:-1:-1;;;9673:18:1;;;9666:47;9730:19;;18752:114:0::1;9342:413:1::0;18752:114:0::1;-1:-1:-1::0;;;;;18886:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;18885:20;18877:59;;;::::0;-1:-1:-1;;;18877:59:0;;9962:2:1;18877:59:0::1;::::0;::::1;9944:21:1::0;10001:2;9981:18;;;9974:30;10040:28;10020:18;;;10013:56;10086:18;;18877:59:0::1;9760:350:1::0;18877:59:0::1;-1:-1:-1::0;;;;;18947:19:0::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;18947:26:0::1;18969:4;18947:26;::::0;;18681:300::o;5650:529::-;5790:4;5807:36;5817:6;5825:9;5836:6;5807:9;:36::i;:::-;-1:-1:-1;;;;;5883:19:0;;5856:24;5883:19;;;:11;:19;;;;;;;;527:10;5883:33;;;;;;;;5949:26;;;;5927:116;;;;-1:-1:-1;;;5927:116:0;;10317:2:1;5927:116:0;;;10299:21:1;10356:2;10336:18;;;10329:30;10395:34;10375:18;;;10368:62;-1:-1:-1;;;10446:18:1;;;10439:38;10494:19;;5927:116:0;10115:404:1;5927:116:0;6079:57;6088:6;527:10;6129:6;6110:16;:25;6079:8;:57::i;:::-;-1:-1:-1;6167:4:0;;5650:529;-1:-1:-1;;;;5650:529:0:o;19539:456::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;19676:4:::1;19668;19647:13;4786:12:::0;;;4698:108;19647:13:::1;:17;::::0;19663:1:::1;19647:17;:::i;:::-;19646:26;;;;:::i;:::-;19645:35;;;;:::i;:::-;19635:6;:45;;19613:136;;;::::0;-1:-1:-1;;;19613:136:0;;10726:2:1;19613:136:0::1;::::0;::::1;10708:21:1::0;10765:2;10745:18;;;10738:30;10804:34;10784:18;;;10777:62;-1:-1:-1;;;10855:18:1;;;10848:39;10904:19;;19613:136:0::1;10524:405:1::0;19613:136:0::1;19822:4;19815:3;19794:13;4786:12:::0;;;4698:108;19794:13:::1;:17;::::0;19810:1:::1;19794:17;:::i;:::-;19793:25;;;;:::i;:::-;19792:34;;;;:::i;:::-;19782:6;:44;;19760:135;;;::::0;-1:-1:-1;;;19760:135:0;;11136:2:1;19760:135:0::1;::::0;::::1;11118:21:1::0;11175:2;11155:18;;;11148:30;11214:34;11194:18;;;11187:62;-1:-1:-1;;;11265:18:1;;;11258:39;11314:19;;19760:135:0::1;10934:405:1::0;19760:135:0::1;19921:17;:6:::0;19931::::1;19921:17;:::i;:::-;19906:12;:32:::0;;;19954:33:::1;::::0;2024:25:1;;;19954:33:0::1;::::0;2012:2:1;1997:18;19954:33:0::1;;;;;;;;19539:456:::0;:::o;36251:222::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;36337:15:::1;::::0;;;::::1;;;36315:114;;;::::0;-1:-1:-1;;;36315:114:0;;11546:2:1;36315:114:0::1;::::0;::::1;11528:21:1::0;11585:2;11565:18;;;11558:30;11624:34;11604:18;;;11597:62;-1:-1:-1;;;11675:18:1;;;11668:47;11732:19;;36315:114:0::1;11344:413:1::0;36315:114:0::1;36442:15;:23:::0;;-1:-1:-1;;36442:23:0::1;::::0;;36251:222::o;6187:297::-;527:10;6302:4;6396:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6396:34:0;;;;;;;;;;6302:4;;6324:130;;6374:7;;6396:47;;6433:10;;6396:47;:::i;:::-;6324:8;:130::i;34503:357::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34636:32:0;::::1;34614:120;;;;-1:-1:-1::0;;;34614:120:0::1;;;;;;;:::i;:::-;34745:17;:47:::0;;-1:-1:-1;;;;;;34745:47:0::1;-1:-1:-1::0;;;;;34745:47:0;::::1;::::0;;::::1;::::0;;;34808:44:::1;::::0;::::1;::::0;-1:-1:-1;;34808:44:0::1;34503:357:::0;:::o;23494:504::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;23585:18:::1;::::0;::::1;::::0;::::1;;;23577:63;;;::::0;-1:-1:-1;;;23577:63:0;;12501:2:1;23577:63:0::1;::::0;::::1;12483:21:1::0;;;12520:18;;;12513:30;12579:34;12559:18;;;12552:62;12631:18;;23577:63:0::1;12299:356:1::0;23577:63:0::1;23653:16;:22:::0;;;23704:1:::1;23686:15;:19:::0;;;23716:14:::1;:18:::0;;;23760:34:::1;23704:1:::0;23672:3;23760:34:::1;:::i;:::-;:51;;;;:::i;:::-;23745:12;:66:::0;23824:17:::1;:24:::0;;;-1:-1:-1;23859:16:0::1;:20:::0;;;23890:15:::1;:19:::0;;;23936:36:::1;-1:-1:-1::0;23844:4:0;23936:36:::1;:::i;:::-;:54;;;;:::i;:::-;23920:13;:70:::0;-1:-1:-1;;23494:504:0:o;35240:349::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;35345:18:::1;;35317:24;35335:4;35317:9;:24::i;:::-;:46;;35295:160;;;::::0;;-1:-1:-1;;;35295:160:0;;12862:2:1;35295:160:0::1;::::0;::::1;12844:21:1::0;12881:18;;;12874:30;;;;12940:34;12920:18;;;12913:62;13011:34;12991:18;;;12984:62;13063:19;;35295:160:0::1;12660:428:1::0;35295:160:0::1;35466:8;:15:::0;;-1:-1:-1;;;;35466:15:0::1;-1:-1:-1::0;;;35466:15:0::1;::::0;;35492:10:::1;:8;:10::i;:::-;35513:8;:16:::0;;-1:-1:-1;;;;35513:16:0::1;::::0;;35545:36:::1;::::0;35565:15:::1;2024:25:1::0;;35545:36:0::1;::::0;2012:2:1;1997:18;35545:36:0::1;;;;;;;35240:349::o:0;18989:181::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19070:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;19062:62;;;::::0;-1:-1:-1;;;19062:62:0;;13295:2:1;19062:62:0::1;::::0;::::1;13277:21:1::0;13334:2;13314:18;;;13307:30;13373:32;13353:18;;;13346:60;13423:18;;19062:62:0::1;13093:354:1::0;19062:62:0::1;-1:-1:-1::0;;;;;19135:19:0::1;19157:5;19135:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;19135:27:0::1;::::0;;18989:181::o;34868:320::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34974:30:0;::::1;34952:118;;;;-1:-1:-1::0;;;34952:118:0::1;;;;;;;:::i;:::-;35081:15;:43:::0;;-1:-1:-1;;;;;;35081:43:0::1;-1:-1:-1::0;;;;;35081:43:0;::::1;::::0;;::::1;::::0;;;35140:40:::1;::::0;::::1;::::0;-1:-1:-1;;35140:40:0::1;34868:320:::0;:::o;24006:531::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;24078:25:::1;::::0;24059:16:::1;:44:::0;;;24132:24:::1;::::0;24114:15:::1;:42:::0;;;24184:23:::1;::::0;24167:14:::1;:40:::0;;;24184:23;24233:34:::1;::::0;24132:24;24233:34:::1;:::i;:::-;:51;;;;:::i;:::-;24218:12;:66:::0;24317:25:::1;::::0;24297:17:::1;:45:::0;;;24372:24:::1;::::0;24353:16:::1;:43:::0;;;24425:23:::1;::::0;24407:15:::1;:41:::0;;;24425:23;24475:36:::1;::::0;24372:24;24475:36:::1;:::i;:::-;:54;;;;:::i;:::-;24459:13;:70:::0;24006:531::o;36018:225::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;36097:18:::1;::::0;::::1;::::0;::::1;;;36089:63;;;::::0;-1:-1:-1;;;36089:63:0;;13654:2:1;36089:63:0::1;::::0;::::1;13636:21:1::0;;;13673:18;;;13666:30;13732:34;13712:18;;;13705:62;13784:18;;36089:63:0::1;13452:356:1::0;36089:63:0::1;36165:18;:26:::0;;-1:-1:-1;;36165:26:0::1;::::0;;36207:28:::1;::::0;::::1;::::0;36186:5:::1;::::0;36207:28:::1;36018:225::o:0;4814:177::-;-1:-1:-1;;;;;4965:18:0;4933:7;4965:18;;;;;;;;;;;;4814:177::o;35641:84::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;35695:14:::1;:22:::0;;-1:-1:-1;;35695:22:0::1;::::0;;35641:84::o;21668:334::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;21788:4:::1;21783:155;;21845:6;::::0;-1:-1:-1;;;;;21845:6:0;;::::1;21835:16:::0;;::::1;::::0;21809:117:::1;;;::::0;-1:-1:-1;;;21809:117:0;;14015:2:1;21809:117:0::1;::::0;::::1;13997:21:1::0;14054:2;14034:18;;;14027:30;14093:34;14073:18;;;14066:62;-1:-1:-1;;;14144:18:1;;;14137:37;14191:19;;21809:117:0::1;13813:403:1::0;21809:117:0::1;-1:-1:-1::0;;;;;21948:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;21948:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21668:334::o;8908:265::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;9035:15:::1;9027:52;;;::::0;-1:-1:-1;;;9027:52:0;;14423:2:1;9027:52:0::1;::::0;::::1;14405:21:1::0;14462:2;14442:18;;;14435:30;14501:26;14481:18;;;14474:54;14545:18;;9027:52:0::1;14221:348:1::0;9027:52:0::1;9116:6;::::0;9095:40:::1;::::0;9132:1:::1;::::0;-1:-1:-1;;;;;9116:6:0::1;::::0;9095:40:::1;::::0;9132:1;;9095:40:::1;-1:-1:-1::0;9146:6:0::1;:19:::0;;-1:-1:-1;;;;;;9146:19:0::1;::::0;;8908:265::o;22615:427::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;22771:16:::1;:33:::0;;;22815:15:::1;:31:::0;;;22857:14:::1;:29:::0;;;22874:12;22912:34:::1;22833:13:::0;22790:14;22912:34:::1;:::i;:::-;:51;;;;:::i;:::-;22897:12;:66:::0;;;22998:2:::1;-1:-1:-1::0;22982:18:0::1;22974:60;;;::::0;-1:-1:-1;;;22974:60:0;;14776:2:1;22974:60:0::1;::::0;::::1;14758:21:1::0;14815:2;14795:18;;;14788:30;14854:31;14834:18;;;14827:59;14903:18;;22974:60:0::1;14574:353:1::0;22974:60:0::1;22615:427:::0;;;:::o;18097:464::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;18185:13:::1;::::0;::::1;::::0;::::1;;;18184:14;18176:50;;;::::0;-1:-1:-1;;;18176:50:0;;15134:2:1;18176:50:0::1;::::0;::::1;15116:21:1::0;15173:2;15153:18;;;15146:30;15212:25;15192:18;;;15185:53;15255:18;;18176:50:0::1;14932:347:1::0;18176:50:0::1;18279:2;18259:16;:22;;18237:111;;;;-1:-1:-1::0;;;18237:111:0::1;;;;;;;:::i;:::-;18359:13;:20:::0;;-1:-1:-1;;18390:18:0;;;;;18440:12:::1;18419:18;:33:::0;;;18484:37:::1;::::0;18505:16;;18484:37:::1;:::i;:::-;18463:18;:58:::0;18537:16:::1;::::0;::::1;::::0;;;::::1;18097:464:::0;:::o;33673:567::-;8821:6;;33787:10;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33823:20:0;::::1;33815:59;;;::::0;-1:-1:-1;;;33815:59:0;;15894:2:1;33815:59:0::1;::::0;::::1;15876:21:1::0;15933:2;15913:18;;;15906:30;15972:28;15952:18;;;15945:56;16018:18;;33815:59:0::1;15692:350:1::0;33815:59:0::1;-1:-1:-1::0;;;;;33907:23:0;::::1;33925:4;33907:23;;::::0;:41:::1;;-1:-1:-1::0;33935:13:0::1;::::0;::::1;::::0;::::1;;;33934:14;33907:41;33885:143;;;::::0;-1:-1:-1;;;33885:143:0;;16249:2:1;33885:143:0::1;::::0;::::1;16231:21:1::0;16288:2;16268:18;;;16261:30;16327:34;16307:18;;;16300:62;-1:-1:-1;;;16378:18:1;;;16371:50;16438:19;;33885:143:0::1;16047:416:1::0;33885:143:0::1;34066:39;::::0;-1:-1:-1;;;34066:39:0;;34099:4:::1;34066:39;::::0;::::1;923:51:1::0;34039:24:0::1;::::0;-1:-1:-1;;;;;34066:24:0;::::1;::::0;::::1;::::0;896:18:1;;34066:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34124:46;::::0;-1:-1:-1;;;34124:46:0;;-1:-1:-1;;;;;7380:32:1;;;34124:46:0::1;::::0;::::1;7362:51:1::0;7429:18;;;7422:34;;;34039:66:0;;-1:-1:-1;34124:23:0;;::::1;::::0;::::1;::::0;7335:18:1;;34124:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34186;::::0;;-1:-1:-1;;;;;7380:32:1;;7362:51;;7444:2;7429:18;;7422:34;;;34116:54:0;;-1:-1:-1;34186:46:0::1;::::0;7335:18:1;34186:46:0::1;;;;;;;33804:436;33673:567:::0;;;;:::o;38025:1165::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;38106:13:::1;::::0;::::1;::::0;::::1;;;38105:14;38097:70;;;;-1:-1:-1::0;;;38097:70:0::1;;;;;;;:::i;:::-;38219:2;38200:16;:21;38178:110;;;;-1:-1:-1::0;;;38178:110:0::1;;;;;;;:::i;:::-;38336:13;:20:::0;;-1:-1:-1;;38367:18:0;;;;;38417:12:::1;38396:18;:33:::0;;;38461:37:::1;::::0;38482:16;;38461:37:::1;:::i;:::-;38440:18;:58:::0;38514:16:::1;::::0;::::1;::::0;;;::::1;38619:1;38595:21;:25;38573:110;;;;-1:-1:-1::0;;;38573:110:0::1;;;;;;;:::i;:::-;38743:1;38716:24;38734:4;38716:9;:24::i;:::-;:28;38694:116;;;::::0;-1:-1:-1;;;38694:116:0;;17486:2:1;38694:116:0::1;::::0;::::1;17468:21:1::0;17525:2;17505:18;;;17498:30;17564:34;17544:18;;;17537:62;-1:-1:-1;;;17615:18:1;;;17608:36;17661:19;;38694:116:0::1;17284:402:1::0;38694:116:0::1;38855:9;::::0;38823:69:::1;::::0;38840:4:::1;::::0;-1:-1:-1;;;;;38855:9:0::1;38867:24;38840:4:::0;38867:9:::1;:24::i;38823:69::-;38905:9;::::0;-1:-1:-1;;;;;38905:9:0::1;:25;38938:21;38983:4;39003:24;38983:4:::0;39003:9:::1;:24::i;:::-;39042:1;39085::::0;39136:4:::1;39156:15;38905:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38025:1165:::0;:::o;4485:104::-;4541:13;4574:7;4567:14;;;;;:::i;18569:104::-;18618:16;18654:11;18647:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18647:18:0;;;;;;;;;;;;;;;;;;;;;;18569:104;:::o;22010:353::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;22156:6:::1;::::0;-1:-1:-1;;;;;22156:6:0;;::::1;22148:14:::0;;::::1;::::0;22126:121:::1;;;::::0;-1:-1:-1;;;22126:121:0;;18816:2:1;22126:121:0::1;::::0;::::1;18798:21:1::0;18855:2;18835:18;;;18828:30;18894:34;18874:18;;;18867:62;18965:27;18945:18;;;18938:55;19010:19;;22126:121:0::1;18614:421:1::0;22126:121:0::1;22258:41;22287:4;22293:5;22258:28;:41::i;:::-;22315:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;22315:40:0;::::1;::::0;::::1;::::0;;;::::1;22010:353:::0;;:::o;35733:84::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;35788:14:::1;:21:::0;;-1:-1:-1;;35788:21:0::1;35805:4;35788:21;::::0;;35733:84::o;6492:482::-;527:10;6612:4;6661:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6661:34:0;;;;;;;;;;6728:35;;;;6706:122;;;;-1:-1:-1;;;6706:122:0;;19242:2:1;6706:122:0;;;19224:21:1;19281:2;19261:18;;;19254:30;19320:34;19300:18;;;19293:62;-1:-1:-1;;;19371:18:1;;;19364:35;19416:19;;6706:122:0;19040:401:1;6706:122:0;6864:67;527:10;6887:7;6915:15;6896:16;:34;6864:8;:67::i;:::-;-1:-1:-1;6962:4:0;;6492:482;-1:-1:-1;;;6492:482:0:o;4999:216::-;5121:4;5143:42;527:10;5167:9;5178:6;5143:9;:42::i;36481:861::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;36553:12:::1;36545:56;;;::::0;-1:-1:-1;;;36545:56:0;;19648:2:1;36545:56:0::1;::::0;::::1;19630:21:1::0;19687:2;19667:18;;;19660:30;19726:33;19706:18;;;19699:61;19777:18;;36545:56:0::1;19446:355:1::0;36545:56:0::1;36621:13;::::0;::::1;::::0;::::1;;;36620:14;36612:70;;;;-1:-1:-1::0;;;36612:70:0::1;;;;;;;:::i;:::-;36771:1;36747:21;:25;36725:110;;;;-1:-1:-1::0;;;36725:110:0::1;;;;;;;:::i;24545:182::-:0;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24630:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;24630:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24685:34;;154:41:1;;;24685:34:0::1;::::0;127:18:1;24685:34:0::1;;;;;;;24545:182:::0;;:::o;23050:436::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;23207:17:::1;:34:::0;;;23252:16:::1;:32:::0;;;23295:15:::1;:30:::0;;;23313:12;23352:36:::1;23271:13:::0;23227:14;23352:36:::1;:::i;:::-;:54;;;;:::i;:::-;23336:13;:70:::0;;;23442:2:::1;-1:-1:-1::0;23425:19:0::1;23417:61;;;::::0;-1:-1:-1;;;23417:61:0;;20008:2:1;23417:61:0::1;::::0;::::1;19990:21:1::0;20047:2;20027:18;;;20020:30;20086:31;20066:18;;;20059:59;20135:18;;23417:61:0::1;19806:353:1::0;20472:461:0;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;20612:4:::1;20604;20583:13;4786:12:::0;;;4698:108;20583:13:::1;:17;::::0;20599:1:::1;20583:17;:::i;:::-;20582:26;;;;:::i;:::-;20581:35;;;;:::i;:::-;20571:6;:45;;20549:139;;;::::0;-1:-1:-1;;;20549:139:0;;20366:2:1;20549:139:0::1;::::0;::::1;20348:21:1::0;20405:2;20385:18;;;20378:30;20444:34;20424:18;;;20417:62;-1:-1:-1;;;20495:18:1;;;20488:42;20547:19;;20549:139:0::1;20164:408:1::0;20549:139:0::1;20761:4;20754:3;20733:13;4786:12:::0;;;4698:108;20733:13:::1;:17;::::0;20749:1:::1;20733:17;:::i;:::-;20732:25;;;;:::i;:::-;20731:34;;;;:::i;:::-;20721:6;:44;;20699:137;;;::::0;-1:-1:-1;;;20699:137:0;;20779:2:1;20699:137:0::1;::::0;::::1;20761:21:1::0;20818:2;20798:18;;;20791:30;20857:34;20837:18;;;20830:62;-1:-1:-1;;;20908:18:1;;;20901:41;20959:19;;20699:137:0::1;20577:407:1::0;20699:137:0::1;20859:17;:6:::0;20869::::1;20859:17;:::i;:::-;20847:9;:29:::0;;;20892:33:::1;::::0;2024:25:1;;;20892:33:0::1;::::0;2012:2:1;1997:18;20892:33:0::1;1878:177:1::0;21003:428:0;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;21143:6:::1;21122:13;4786:12:::0;;;4698:108;21122:13:::1;:17;::::0;21138:1:::1;21122:17;:::i;:::-;21121:28;;;;:::i;:::-;21108:9;:41;;21086:144;;;::::0;-1:-1:-1;;;21086:144:0;;21191:2:1;21086:144:0::1;::::0;::::1;21173:21:1::0;21230:2;21210:18;;;21203:30;21269:34;21249:18;;;21242:62;-1:-1:-1;;;21320:18:1;;;21313:51;21381:19;;21086:144:0::1;20989:417:1::0;21086:144:0::1;21298:4;21277:13;4786:12:::0;;;4698:108;21277:13:::1;:17;::::0;21293:1:::1;21277:17;:::i;:::-;21276:26;;;;:::i;:::-;21263:9;:39;;21241:141;;;::::0;-1:-1:-1;;;21241:141:0;;21613:2:1;21241:141:0::1;::::0;::::1;21595:21:1::0;21652:2;21632:18;;;21625:30;21691:34;21671:18;;;21664:62;-1:-1:-1;;;21742:18:1;;;21735:50;21802:19;;21241:141:0::1;21411:416:1::0;21241:141:0::1;21393:18;:30:::0;21003:428::o;20003:461::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;20141:4:::1;20133;20112:13;4786:12:::0;;;4698:108;20112:13:::1;:17;::::0;20128:1:::1;20112:17;:::i;:::-;20111:26;;;;:::i;:::-;20110:35;;;;:::i;:::-;20100:6;:45;;20078:137;;;::::0;-1:-1:-1;;;20078:137:0;;22034:2:1;20078:137:0::1;::::0;::::1;22016:21:1::0;22073:2;22053:18;;;22046:30;22112:34;22092:18;;;22085:62;-1:-1:-1;;;22163:18:1;;;22156:40;22213:19;;20078:137:0::1;21832:406:1::0;20078:137:0::1;20288:4;20281:3;20260:13;4786:12:::0;;;4698:108;20260:13:::1;:17;::::0;20276:1:::1;20260:17;:::i;:::-;20259:25;;;;:::i;:::-;20258:34;;;;:::i;:::-;20248:6;:44;;20226:135;;;::::0;-1:-1:-1;;;20226:135:0;;22445:2:1;20226:135:0::1;::::0;::::1;22427:21:1::0;22484:2;22464:18;;;22457:30;22523:34;22503:18;;;22496:62;-1:-1:-1;;;22574:18:1;;;22567:39;22623:19;;20226:135:0::1;22243:405:1::0;20226:135:0::1;20388:17;:6:::0;20398::::1;20388:17;:::i;:::-;20372:13;:33:::0;;;20421:35:::1;::::0;2024:25:1;;;20421:35:0::1;::::0;2012:2:1;1997:18;20421:35:0::1;1878:177:1::0;19433:98:0;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;19495:20:::1;:28:::0;;-1:-1:-1;;19495:28:0::1;::::0;;19433:98::o;11545:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11545:28:0;;-1:-1:-1;11545:28:0;:::o;9181:281::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9284:22:0;::::1;9262:110;;;::::0;-1:-1:-1;;;9262:110:0;;22855:2:1;9262:110:0::1;::::0;::::1;22837:21:1::0;22894:2;22874:18;;;22867:30;22933:34;22913:18;;;22906:62;-1:-1:-1;;;22984:18:1;;;22977:36;23030:19;;9262:110:0::1;22653:402:1::0;9262:110:0::1;9409:6;::::0;9388:38:::1;::::0;-1:-1:-1;;;;;9388:38:0;;::::1;::::0;9409:6:::1;::::0;9388:38:::1;::::0;9409:6:::1;::::0;9388:38:::1;9437:6;:17:::0;;-1:-1:-1;;;;;;9437:17:0::1;-1:-1:-1::0;;;;;9437:17:0;;;::::1;::::0;;;::::1;::::0;;9181:281::o;34310:185::-;8821:6;;-1:-1:-1;;;;;8821:6:0;527:10;8821:22;8813:67;;;;-1:-1:-1;;;8813:67:0;;;;;;;:::i;:::-;34405:82:::1;::::0;34368:12:::1;::::0;34413:10:::1;::::0;34437:21:::1;::::0;34368:12;34405:82;34368:12;34405:82;34437:21;34413:10;34405:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7963:380:::0;-1:-1:-1;;;;;8099:19:0;;8091:68;;;;-1:-1:-1;;;8091:68:0;;23472:2:1;8091:68:0;;;23454:21:1;23511:2;23491:18;;;23484:30;23550:34;23530:18;;;23523:62;-1:-1:-1;;;23601:18:1;;;23594:34;23645:19;;8091:68:0;23270:400:1;8091:68:0;-1:-1:-1;;;;;8178:21:0;;8170:68;;;;-1:-1:-1;;;8170:68:0;;23877:2:1;8170:68:0;;;23859:21:1;23916:2;23896:18;;;23889:30;23955:34;23935:18;;;23928:62;-1:-1:-1;;;24006:18:1;;;23999:32;24048:19;;8170:68:0;23675:398:1;8170:68:0;-1:-1:-1;;;;;8251:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8303:32;;2024:25:1;;;8303:32:0;;1997:18:1;8303:32:0;;;;;;;7963:380;;;:::o;24735:6122::-;-1:-1:-1;;;;;24867:18:0;;24859:68;;;;-1:-1:-1;;;24859:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24946:16:0;;24938:64;;;;-1:-1:-1;;;24938:64:0;;;;;;;:::i;:::-;25030:1;25021:6;:10;25013:52;;;;-1:-1:-1;;;25013:52:0;;25090:2:1;25013:52:0;;;25072:21:1;25129:2;25109:18;;;25102:30;25168:31;25148:18;;;25141:59;25217:18;;25013:52:0;24888:353:1;25013:52:0;25083:13;;;;;;;25078:183;;-1:-1:-1;;;;;25139:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;25168:23:0;;;;;;:19;:23;;;;;;;;25139:52;25113:136;;;;-1:-1:-1;;;25113:136:0;;25448:2:1;25113:136:0;;;25430:21:1;25487:2;25467:18;;;25460:30;-1:-1:-1;;;25506:18:1;;;25499:52;25568:18;;25113:136:0;25246:346:1;25113:136:0;30960:18;;30945:12;:33;25277:26;:43;;;;-1:-1:-1;25307:13:0;;;;;;;25277:43;25273:268;;;-1:-1:-1;;;;;25364:17:0;;;;;;:11;:17;;;;;;;;25363:18;;:35;;-1:-1:-1;8759:6:0;;-1:-1:-1;;;;;25385:13:0;;;8759:6;;25385:13;25363:35;:60;;;-1:-1:-1;;;;;;25402:21:0;;25416:6;25402:21;25363:60;25337:192;;;;-1:-1:-1;;;25337:192:0;;25799:2:1;25337:192:0;;;25781:21:1;25838:2;25818:18;;;25811:30;25877:34;25857:18;;;25850:62;25948:34;25928:18;;;25921:62;-1:-1:-1;;;25999:19:1;;;25992:37;26046:19;;25337:192:0;25597:474:1;25337:192:0;25557:14;;;;25553:2217;;;8759:6;;-1:-1:-1;;;;;25610:15:0;;;8759:6;;25610:15;;;;:49;;-1:-1:-1;8759:6:0;;-1:-1:-1;;;;;25646:13:0;;;8759:6;;25646:13;;25610:49;:91;;;;-1:-1:-1;;;;;;25680:21:0;;25694:6;25680:21;;25610:91;:138;;;;-1:-1:-1;;;;;;25723:25:0;;;;;;:19;:25;;;;;;;;25722:26;25610:138;:183;;;;-1:-1:-1;;;;;;25770:23:0;;;;;;:19;:23;;;;;;;;25769:24;25610:183;25588:2171;;;25832:20;;;;25828:692;;;25895:9;;-1:-1:-1;;;;;25881:24:0;;;25895:9;;25881:24;;;;:49;;-1:-1:-1;25923:6:0;;-1:-1:-1;;;;;25909:21:0;;;25923:6;;25909:21;;25881:49;25877:624;;;26072:16;26087:1;26072:12;:16;:::i;:::-;26026:9;25997:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;26193:16:0;26208:1;26193:12;:16;:::i;:::-;-1:-1:-1;;;;;26125:32:0;;;;;;:28;:32;;;;;;:84;25997:212;25959:363;;;;-1:-1:-1;;;25959:363:0;;26411:2:1;25959:363:0;;;26393:21:1;26450:2;26430:18;;;26423:30;26489:34;26469:18;;;26462:62;-1:-1:-1;;;26540:18:1;;;26533:51;26601:19;;25959:363:0;26209:417:1;25959:363:0;26378:9;26349:39;;;;:28;:39;;;;;;26391:12;26349:54;;;;-1:-1:-1;;;;;26430:32:0;;;;;;:47;25877:624;-1:-1:-1;;;;;26594:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;26651:35:0;;;;;;:31;:35;;;;;;;;26650:36;26594:92;26568:1176;;;26773:12;;26763:6;:22;;26729:148;;;;-1:-1:-1;;;26729:148:0;;26833:2:1;26729:148:0;;;26815:21:1;26872:2;26852:18;;;26845:30;26911:34;26891:18;;;26884:62;-1:-1:-1;;;26962:18:1;;;26955:38;27010:19;;26729:148:0;26631:404:1;26729:148:0;26960:9;;26943:13;26953:2;26943:9;:13::i;:::-;26934:22;;:6;:22;:::i;:::-;:35;;26900:140;;;;-1:-1:-1;;;26900:140:0;;27242:2:1;26900:140:0;;;27224:21:1;27281:2;27261:18;;;27254:30;-1:-1:-1;;;27300:18:1;;;27293:49;27359:18;;26900:140:0;27040:343:1;26900:140:0;26568:1176;;;-1:-1:-1;;;;;27138:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;27193:37:0;;;;;;:31;:37;;;;;;;;27192:38;27138:92;27112:632;;;27281:14;;;;27273:46;;;;-1:-1:-1;;;27273:46:0;;27590:2:1;27273:46:0;;;27572:21:1;27629:2;27609:18;;;27602:30;-1:-1:-1;;;27648:18:1;;;27641:49;27707:18;;27273:46:0;27388:343:1;27273:46:0;27386:13;;27376:6;:23;;27342:151;;;;-1:-1:-1;;;27342:151:0;;27938:2:1;27342:151:0;;;27920:21:1;27977:2;27957:18;;;27950:30;28016:34;27996:18;;;27989:62;-1:-1:-1;;;28067:18:1;;;28060:40;28117:19;;27342:151:0;27736:406:1;27112:632:0;-1:-1:-1;;;;;27524:35:0;;;;;;:31;:35;;;;;;;;27519:225;;27644:9;;27627:13;27637:2;27627:9;:13::i;:::-;27618:22;;:6;:22;:::i;:::-;:35;;27584:140;;;;-1:-1:-1;;;27584:140:0;;27242:2:1;27584:140:0;;;27224:21:1;27281:2;27261:18;;;27254:30;-1:-1:-1;;;27300:18:1;;;27293:49;27359:18;;27584:140:0;27040:343:1;27584:140:0;27782:28;27813:24;27831:4;27813:9;:24::i;:::-;27889:18;;27782:55;;-1:-1:-1;27865:42:0;;;;;;;27938:22;;-1:-1:-1;27949:11:0;;;;;;;27938:22;:35;;;;-1:-1:-1;27965:8:0;;-1:-1:-1;;;27965:8:0;;;;27964:9;27938:35;:68;;;;-1:-1:-1;;;;;;27977:29:0;;;;;;:25;:29;;;;;;;;27938:68;27920:196;;;28033:8;:15;;-1:-1:-1;;;;28033:15:0;-1:-1:-1;;;28033:15:0;;;28063:10;:8;:10::i;:::-;28088:8;:16;;-1:-1:-1;;;;28088:16:0;;;27920:196;-1:-1:-1;;;;;28247:25:0;;28128:12;28247:25;;;:19;:25;;;;;;28143:4;;28247:25;;;:52;;-1:-1:-1;;;;;;28276:23:0;;;;;;:19;:23;;;;;;;;28247:52;28243:100;;;-1:-1:-1;28326:5:0;28243:100;28355:12;28460:7;28456:2348;;;30960:18;;30945:12;:33;28543:152;;;;28619:8;28604:12;;:23;;;;:::i;:::-;28594:6;:33;;:100;;;;;28682:12;28656:18;;28677:1;28656:22;;;;:::i;:::-;:38;;28594:100;28542:206;;;;-1:-1:-1;;;;;;28717:31:0;;;;;;:25;:31;;;;;;;;28542:206;:257;;;;-1:-1:-1;;;;;;28770:29:0;;;;;;:25;:29;;;;;;;;28769:30;28542:257;:302;;;;-1:-1:-1;;;;;;28821:23:0;;;;;;:19;:23;;;;;;;;28820:24;28542:302;:339;;;;;28880:1;28865:12;;:16;28542:339;28520:2135;;;30960:18;;30945:12;:33;28916:332;;29227:1;29211:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;28916:332:0;-1:-1:-1;;;;;29273:15:0;;;;;;:11;:15;;;;;;;;29268:216;;-1:-1:-1;;;;;29313:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;29313:22:0;29331:4;29313:22;;;;;;29358:10;:15;;29331:4;;29358:10;;:15;;29331:4;;29358:15;:::i;:::-;;;;-1:-1:-1;;29396:11:0;:20;;;;;;;-1:-1:-1;29396:20:0;;;;;;;;-1:-1:-1;;;;;;29396:20:0;-1:-1:-1;;;;;29396:20:0;;;;;;;;29444;;923:51:1;;;29444:20:0;;911:2:1;896:18;29444:20:0;;;;;;;29268:216;29527:3;29512:11;:6;29521:2;29512:11;:::i;:::-;29511:19;;;;:::i;:::-;29504:26;;29598:12;;29579:15;;29572:4;:22;;;;:::i;:::-;29571:39;;;;:::i;:::-;29549:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29680:12:0;;29660:16;;29653:23;;:4;:23;:::i;:::-;29652:40;;;;:::i;:::-;29629:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29758:12:0;;29740:14;;29733:21;;:4;:21;:::i;:::-;29732:38;;;;:::i;:::-;29711:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;28520:2135:0;;-1:-1:-1;28520:2135:0;;-1:-1:-1;;;;;29833:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;29882:1;29866:13;;:17;29833:50;29829:826;;;29938:3;29921:13;;29912:6;:22;;;;:::i;:::-;29911:30;;;;:::i;:::-;29904:37;;30010:13;;29990:16;;29983:4;:23;;;;:::i;:::-;29982:41;;;;:::i;:::-;29960:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30136:13:0;;30094:17;;30087:24;;:4;:24;:::i;:::-;30086:63;;;;:::i;:::-;30042:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;30216:13:0;;30197:15;;30190:22;;:4;:22;:::i;29829:826::-;-1:-1:-1;;;;;30291:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;30341:1;30326:12;;:16;30291:51;30287:368;;;30396:3;30380:12;;30371:6;:21;;;;:::i;:::-;30370:29;;;;:::i;:::-;30363:36;;30467:12;;30448:15;;30441:4;:22;;;;:::i;:::-;30440:39;;;;:::i;:::-;30418:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;30549:12:0;;30529:16;;30522:23;;:4;:23;:::i;:::-;30521:40;;;;:::i;:::-;30498:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30627:12:0;;30609:14;;30602:21;;:4;:21;:::i;:::-;30601:38;;;;:::i;:::-;30580:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;30287:368:0;30675:8;;30671:91;;30704:42;30720:4;30734;30741;30704:15;:42::i;:::-;30778:14;30788:4;30778:14;;:::i;:::-;;;28456:2348;30816:33;30832:4;30838:2;30842:6;30816:15;:33::i;:::-;24848:6009;;;;24735:6122;;;:::o;32090:1575::-;32129:23;32155:24;32173:4;32155:9;:24::i;:::-;32129:50;;32190:25;32287:17;;32252:19;;32218:18;;:53;;;;:::i;:::-;:86;;;;:::i;:::-;32190:114;-1:-1:-1;32321:20:0;;;:46;;-1:-1:-1;32345:22:0;;32321:46;32317:85;;;32384:7;;32090:1575::o;32317:85::-;32436:18;;:23;;32457:2;32436:23;:::i;:::-;32418:15;:41;32414:115;;;32494:18;;:23;;32515:2;32494:23;:::i;:::-;32476:41;;32414:115;32541:12;32615:23;32728:1;32695:17;32660:18;;32642:15;:36;;;;:::i;:::-;32641:71;;;;:::i;:::-;:88;;;;:::i;:::-;32615:114;-1:-1:-1;32742:51:0;32759:33;32615:114;32759:15;:33;:::i;:::-;32742:16;:51::i;:::-;33007:18;;32827:21;;;;32806:18;;33007:22;;33028:1;;33007:22;:::i;:::-;32986:44;;:17;:44;:::i;:::-;32949:19;;32936:32;;:10;:32;:::i;:::-;32935:96;;;;:::i;:::-;32908:123;;33042:22;33158:1;33137:18;;:22;;;;:::i;:::-;33116:44;;:17;:44;:::i;:::-;33081:17;;33068:30;;:10;:30;:::i;:::-;33067:94;;;;:::i;:::-;33042:119;-1:-1:-1;33193:33:0;33042:119;33193:16;:33;:::i;:::-;33174:52;;;;:::i;:::-;33260:1;33239:18;:22;;;33272:19;:23;;;33306:17;:21;33174:52;-1:-1:-1;33344:19:0;;;;;:42;;;33385:1;33367:15;:19;33344:42;33340:121;;;33403:46;33416:15;33433;33403:12;:46::i;:::-;33495:15;;33487:56;;-1:-1:-1;;;;;33495:15:0;;;;33524:14;;33487:56;;;;33524:14;33495:15;33487:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33576:17:0;;33568:89;;33473:70;;-1:-1:-1;;;;;;33576:17:0;;33621:21;;33568:89;;;;33621:21;33576:17;33568:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32090:1575:0:o;22371:236::-;-1:-1:-1;;;;;22454:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;22454:39:0;;;;;;;22504;22454:31;:39;22504:26;:39::i;6982:651::-;-1:-1:-1;;;;;7122:20:0;;7114:70;;;;-1:-1:-1;;;7114:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7203:23:0;;7195:71;;;;-1:-1:-1;;;7195:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7303:17:0;;7279:21;7303:17;;;;;;;;;;;7353:23;;;;7331:111;;;;-1:-1:-1;;;7331:111:0;;28349:2:1;7331:111:0;;;28331:21:1;28388:2;28368:18;;;28361:30;28427:34;28407:18;;;28400:62;-1:-1:-1;;;28478:18:1;;;28471:36;28524:19;;7331:111:0;28147:402:1;7331:111:0;-1:-1:-1;;;;;7478:17:0;;;:9;:17;;;;;;;;;;;7498:22;;;7478:42;;7542:20;;;;;;;;:30;;7514:6;;7478:9;7542:30;;7514:6;;7542:30;:::i;:::-;;;;;;;;7607:9;-1:-1:-1;;;;;7590:35:0;7599:6;-1:-1:-1;;;;;7590:35:0;;7618:6;7590:35;;;;2024:25:1;;2012:2;1997:18;;1878:177;7590:35:0;;;;;;;;7103:530;6982:651;;;:::o;30994:571::-;31144:16;;;31158:1;31144:16;;;;;;;;31120:21;;31144:16;;;;;;;;;;-1:-1:-1;31144:16:0;31120:40;;31189:4;31171;31176:1;31171:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31171:23:0;;;:7;;;;;;;;;;:23;;;;31215:9;;:16;;;-1:-1:-1;;;31215:16:0;;;;:9;;;;;:14;;:16;;;;;31171:7;;31215:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31205:4;31210:1;31205:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31205:26:0;;;:7;;;;;;;;;:26;31276:9;;31244:56;;31261:4;;31276:9;31288:11;31244:8;:56::i;:::-;31339:9;;:218;;-1:-1:-1;;;31339:218:0;;-1:-1:-1;;;;;31339:9:0;;;;:60;;:218;;31414:11;;31339:9;;31484:4;;31511;;31531:15;;31339:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31049:516;30994:571;:::o;31573:509::-;31753:9;;31721:56;;31738:4;;-1:-1:-1;;;;;31753:9:0;31765:11;31721:8;:56::i;:::-;31820:9;;:254;;-1:-1:-1;;;31820:254:0;;-1:-1:-1;;;;;31820:9:0;;;;:25;;31853:9;;31820:254;;31886:4;;31906:11;;31820:9;;;;32026:6;;32048:15;;31820:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21439:221::-;-1:-1:-1;;;;;21541:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;21541:52:0;;;;;;;;;;21609:43;;29829:51:1;;;29896:18;;;29889:50;21609:43:0;;29802:18:1;21609:43:0;;;;;;;21439:221;;:::o;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;985:131::-;-1:-1:-1;;;;;1060:31:1;;1050:42;;1040:70;;1106:1;1103;1096:12;1040:70;985:131;:::o;1121:315::-;1189:6;1197;1250:2;1238:9;1229:7;1225:23;1221:32;1218:52;;;1266:1;1263;1256:12;1218:52;1305:9;1292:23;1324:31;1349:5;1324:31;:::i;:::-;1374:5;1426:2;1411:18;;;;1398:32;;-1:-1:-1;;;1121:315:1:o;1441:180::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;-1:-1:-1;1592:23:1;;1441:180;-1:-1:-1;1441:180:1:o;1626:247::-;1685:6;1738:2;1726:9;1717:7;1713:23;1709:32;1706:52;;;1754:1;1751;1744:12;1706:52;1793:9;1780:23;1812:31;1837:5;1812:31;:::i;:::-;1862:5;1626:247;-1:-1:-1;;;1626:247:1:o;2060:456::-;2137:6;2145;2153;2206:2;2194:9;2185:7;2181:23;2177:32;2174:52;;;2222:1;2219;2212:12;2174:52;2261:9;2248:23;2280:31;2305:5;2280:31;:::i;:::-;2330:5;-1:-1:-1;2387:2:1;2372:18;;2359:32;2400:33;2359:32;2400:33;:::i;:::-;2060:456;;2452:7;;-1:-1:-1;;;2506:2:1;2491:18;;;;2478:32;;2060:456::o;2918:248::-;2986:6;2994;3047:2;3035:9;3026:7;3022:23;3018:32;3015:52;;;3063:1;3060;3053:12;3015:52;-1:-1:-1;;3086:23:1;;;3156:2;3141:18;;;3128:32;;-1:-1:-1;2918:248:1:o;3171:118::-;3257:5;3250:13;3243:21;3236:5;3233:32;3223:60;;3279:1;3276;3269:12;3294:382;3359:6;3367;3420:2;3408:9;3399:7;3395:23;3391:32;3388:52;;;3436:1;3433;3426:12;3388:52;3475:9;3462:23;3494:31;3519:5;3494:31;:::i;:::-;3544:5;-1:-1:-1;3601:2:1;3586:18;;3573:32;3614:30;3573:32;3614:30;:::i;:::-;3663:7;3653:17;;;3294:382;;;;;:::o;3681:241::-;3737:6;3790:2;3778:9;3769:7;3765:23;3761:32;3758:52;;;3806:1;3803;3796:12;3758:52;3845:9;3832:23;3864:28;3886:5;3864:28;:::i;3927:316::-;4004:6;4012;4020;4073:2;4061:9;4052:7;4048:23;4044:32;4041:52;;;4089:1;4086;4079:12;4041:52;-1:-1:-1;;4112:23:1;;;4182:2;4167:18;;4154:32;;-1:-1:-1;4233:2:1;4218:18;;;4205:32;;3927:316;-1:-1:-1;3927:316:1:o;4248:388::-;4316:6;4324;4377:2;4365:9;4356:7;4352:23;4348:32;4345:52;;;4393:1;4390;4383:12;4345:52;4432:9;4419:23;4451:31;4476:5;4451:31;:::i;:::-;4501:5;-1:-1:-1;4558:2:1;4543:18;;4530:32;4571:33;4530:32;4571:33;:::i;4641:461::-;4694:3;4732:5;4726:12;4759:6;4754:3;4747:19;4785:4;4814:2;4809:3;4805:12;4798:19;;4851:2;4844:5;4840:14;4872:1;4882:195;4896:6;4893:1;4890:13;4882:195;;;4961:13;;-1:-1:-1;;;;;4957:39:1;4945:52;;5017:12;;;;5052:15;;;;4993:1;4911:9;4882:195;;;-1:-1:-1;5093:3:1;;4641:461;-1:-1:-1;;;;;4641:461:1:o;5107:261::-;5286:2;5275:9;5268:21;5249:4;5306:56;5358:2;5347:9;5343:18;5335:6;5306:56;:::i;5373:380::-;5452:1;5448:12;;;;5495;;;5516:61;;5570:4;5562:6;5558:17;5548:27;;5516:61;5623:2;5615:6;5612:14;5592:18;5589:38;5586:161;;5669:10;5664:3;5660:20;5657:1;5650:31;5704:4;5701:1;5694:15;5732:4;5729:1;5722:15;5586:161;;5373:380;;;:::o;5758:356::-;5960:2;5942:21;;;5979:18;;;5972:30;6038:34;6033:2;6018:18;;6011:62;6105:2;6090:18;;5758:356::o;6119:184::-;6189:6;6242:2;6230:9;6221:7;6217:23;6213:32;6210:52;;;6258:1;6255;6248:12;6210:52;-1:-1:-1;6281:16:1;;6119:184;-1:-1:-1;6119:184:1:o;6661:127::-;6722:10;6717:3;6713:20;6710:1;6703:31;6753:4;6750:1;6743:15;6777:4;6774:1;6767:15;6793:168;6866:9;;;6897;;6914:15;;;6908:22;;6894:37;6884:71;;6935:18;;:::i;6966:217::-;7006:1;7032;7022:132;;7076:10;7071:3;7067:20;7064:1;7057:31;7111:4;7108:1;7101:15;7139:4;7136:1;7129:15;7022:132;-1:-1:-1;7168:9:1;;6966:217::o;7467:245::-;7534:6;7587:2;7575:9;7566:7;7562:23;7558:32;7555:52;;;7603:1;7600;7593:12;7555:52;7635:9;7629:16;7654:28;7676:5;7654:28;:::i;7717:607::-;-1:-1:-1;;;;;8076:15:1;;;8058:34;;8123:2;8108:18;;8101:34;;;;8166:2;8151:18;;8144:34;;;;8209:2;8194:18;;8187:34;;;;8258:15;;;8252:3;8237:19;;8230:44;8038:3;8290:19;;8283:35;;;;8007:3;7992:19;;7717:607::o;8329:245::-;8408:6;8416;8469:2;8457:9;8448:7;8444:23;8440:32;8437:52;;;8485:1;8482;8475:12;8437:52;-1:-1:-1;;8508:16:1;;8564:2;8549:18;;;8543:25;8508:16;;8543:25;;-1:-1:-1;8329:245:1:o;11762:125::-;11827:9;;;11848:10;;;11845:36;;;11861:18;;:::i;11892:402::-;12094:2;12076:21;;;12133:2;12113:18;;;12106:30;12172:34;12167:2;12152:18;;12145:62;-1:-1:-1;;;12238:2:1;12223:18;;12216:36;12284:3;12269:19;;11892:402::o;15284:403::-;15486:2;15468:21;;;15525:2;15505:18;;;15498:30;15564:34;15559:2;15544:18;;15537:62;-1:-1:-1;;;15630:2:1;15615:18;;15608:37;15677:3;15662:19;;15284:403::o;16468:407::-;16670:2;16652:21;;;16709:2;16689:18;;;16682:30;16748:34;16743:2;16728:18;;16721:62;-1:-1:-1;;;16814:2:1;16799:18;;16792:41;16865:3;16850:19;;16468:407::o;16880:399::-;17082:2;17064:21;;;17121:2;17101:18;;;17094:30;17160:34;17155:2;17140:18;;17133:62;-1:-1:-1;;;17226:2:1;17211:18;;17204:33;17269:3;17254:19;;16880:399::o;18303:306::-;18391:6;18399;18407;18460:2;18448:9;18439:7;18435:23;18431:32;18428:52;;;18476:1;18473;18466:12;18428:52;18505:9;18499:16;18489:26;;18555:2;18544:9;18540:18;18534:25;18524:35;;18599:2;18588:9;18584:18;18578:25;18568:35;;18303:306;;;;;:::o;24078:401::-;24280:2;24262:21;;;24319:2;24299:18;;;24292:30;24358:34;24353:2;24338:18;;24331:62;-1:-1:-1;;;24424:2:1;24409:18;;24402:35;24469:3;24454:19;;24078:401::o;24484:399::-;24686:2;24668:21;;;24725:2;24705:18;;;24698:30;24764:34;24759:2;24744:18;;24737:62;-1:-1:-1;;;24830:2:1;24815:18;;24808:33;24873:3;24858:19;;24484:399::o;26076:128::-;26143:9;;;26164:11;;;26161:37;;;26178:18;;:::i;28686:127::-;28747:10;28742:3;28738:20;28735:1;28728:31;28778:4;28775:1;28768:15;28802:4;28799:1;28792:15;28818:251;28888:6;28941:2;28929:9;28920:7;28916:23;28912:32;28909:52;;;28957:1;28954;28947:12;28909:52;28989:9;28983:16;29008:31;29033:5;29008:31;:::i;29074:582::-;29373:6;29362:9;29355:25;29416:6;29411:2;29400:9;29396:18;29389:34;29459:3;29454:2;29443:9;29439:18;29432:31;29336:4;29480:57;29532:3;29521:9;29517:19;29509:6;29480:57;:::i;:::-;-1:-1:-1;;;;;29573:32:1;;;;29568:2;29553:18;;29546:60;-1:-1:-1;29637:3:1;29622:19;29615:35;29472:65;29074:582;-1:-1:-1;;;29074:582:1:o

Swarm Source

ipfs://4bbfc278dc195bd5259a3aaae47dd0b6952ded2a5921b43976d5f7daaedfc3ea
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.