ETH Price: $2,628.94 (+0.70%)

Token

Ape-TV (APETV)
 

Overview

Max Total Supply

10,000,000 APETV

Holders

78

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
apenowthinklater.eth
Balance
20,158.804355808042576072 APETV

Value
$0.00
0x1D4F81c3E4Bd849B33Ff6Be3B9780555A8E0Dc3b
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:
ApeTV

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 2022-11-03
*/

// SPDX-License-Identifier: MIT
/*
    APETV

    Telegram:
    https://t.me/ApeTV_Portal

    Twitter:
    https://Twitter.com/ApeTV_
 */
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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), 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() external virtual onlyOwner {
        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 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 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 ApeTV is ERC20, Ownable {
    uint256 public maxTxnAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public boughtEarly;
    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 buyBurnFee;

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

    uint256 public constant FEE_DIVISOR = 10000;

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

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

    // 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 RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxTxnAmount(uint256 newAmount);
    event UpdatedMaxWallet(uint256 newAmount);

    event UpdatedOperationsAddress(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 EnabledSellingForever();

    constructor() payable ERC20("Ape-TV", "APETV") {
        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 = 10 * 1e6 * 1e18;

        maxTxnAmount = (totalSupply * 1) / 100; // 1%
        maxWallet = (totalSupply * 2) / 100; // 2%
        swapTokensAtAmount = (totalSupply * 1) / 10000; // 0.01%

        buyOperationsFee = 500;
        buyLiquidityFee = 100;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyBurnFee;

        sellOperationsFee = 500;
        sellLiquidityFee = 100;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellBurnFee;

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

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

        operationsAddress = address(0xEBcC114F358343Ab4C7138b1Ff91044942A83aA5);

        _createInitialSupply(address(this), totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // only enable if no plan to airdrop

    function enableTrading(uint256 deadBlocks) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + deadBlocks;
        emit EnabledTrading();
    }

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

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

    function manageBoughtEarly(address wallet, bool flag) external onlyOwner {
        boughtEarly[wallet] = flag;
    }

    function massManageBoughtEarly(address[] calldata wallets, bool flag)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < wallets.length; i++) {
            boughtEarly[wallets[i]] = flag;
        }
    }

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

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / (10**decimals()),
            "Cannot set max buy amount lower than 0.2%"
        );
        maxTxnAmount = newNum * (10**decimals());
        emit UpdatedMaxTxnAmount(maxTxnAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 100) / (10**decimals()),
            "Cannot set max buy amount lower than 0.2%"
        );
        maxWallet = newNum * (10**decimals());
        emit UpdatedMaxWallet(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 setBuyFees(
        uint256 _operationsFee,
        uint256 _liquidityFee,
        uint256 _burnFee
    ) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyBurnFee;
        require(buyTotalFees <= 800, "Must keep fees at 8% or less");
    }

    function setSellFees(
        uint256 _operationsFee,
        uint256 _liquidityFee,
        uint256 _burnFee
    ) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellBurnFee;
        require(sellTotalFees <= 800, "Must keep fees at 8% or less");
    }

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

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

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

        if (blockForPenaltyEnd > 0) {
            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(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                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 <= maxTxnAmount,
                        "Buy transfer amount exceeds the max txn."
                    );
                    require(
                        balanceOf(to) + amount <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(sellingEnabled, "Selling disabled");
                    require(
                        amount <= maxTxnAmount,
                        "Sell transfer amount exceeds the max txn."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        balanceOf(to) + amount <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            if (contractTokenBalance > swapTokensAtAmount * 20) {
                contractTokenBalance = swapTokensAtAmount * 20;
            }

            swapTokensForEthAndSend(contractTokenBalance);

            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;
        uint256 burnTokens = 0;
        uint256 liquidityTokens = 0;
        address currentLiquidityAddress;
        // only take fees on buys/sells, do not take on wallet transfers

        if (takeFee) {
            // bot/sniper penalty.
            if (
                earlyBuyPenaltyInEffect() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!boughtEarly[to]) {
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }
                currentLiquidityAddress = from;
                fees = (amount * 99) / 100;
                liquidityTokens = (fees * buyLiquidityFee) / buyTotalFees;
                burnTokens = (fees * buyBurnFee) / buyTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                currentLiquidityAddress = to;
                fees = (amount * sellTotalFees) / FEE_DIVISOR;
                liquidityTokens = (fees * sellLiquidityFee) / sellTotalFees;
                burnTokens = (fees * sellBurnFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                currentLiquidityAddress = from;
                fees = (amount * buyTotalFees) / FEE_DIVISOR;
                liquidityTokens = (fees * buyLiquidityFee) / buyTotalFees;
                burnTokens = (fees * buyBurnFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
                if (burnTokens > 0) {
                    _burn(address(this), burnTokens);
                }
                if (liquidityTokens > 0) {
                    super._transfer(
                        address(this),
                        currentLiquidityAddress,
                        liquidityTokens
                    );
                }
            }
            amount -= fees;
        }

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

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

    function swapTokensForEthAndSend(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(operationsAddress),
            block.timestamp
        );
    }

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

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

    function resetTaxes() external onlyOwner {
        buyOperationsFee = 400;
        buyLiquidityFee = 100;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyBurnFee;

        sellOperationsFee = 400;
        sellLiquidityFee = 100;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellBurnFee;
    }

    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 removeLP(uint256 percent) external onlyOwner {
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));

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

        uint256 lpAmount = (lpBalance * percent) / 10000;

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

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

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

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

        sellingEnabled = true;
        emit EnabledSellingForever();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledSellingForever","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","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":"UpdatedMaxTxnAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadBlocks","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":"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":"letsGo","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":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"massManageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxnAmount","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"removeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmSellingEnabled","type":"bool"}],"name":"setSellingEnabled","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","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"}]

6000600c556010805462ffffff191660019081179091556012805460ff199081169092179055601b80549091169055600660809081526520b83296aa2b60d11b60a052610100604052600560c09081526420a822aa2b60d91b60e0526003620000698382620008bf565b506004620000788282620008bf565b50505060006200008d620004bb60201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620042f4833981519152908290a35033600046600103620000f25750737a250d5630b4cf539739df2c5dacb4c659f2488d62000164565b46600503620001175750737a250d5630b4cf539739df2c5dacb4c659f2488d62000164565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e491906200098b565b6001600160a01b031663c9c6539630600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000247573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026d91906200098b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e191906200098b565b600980546001600160a01b0319166001600160a01b039290921691821790556200030d906001620004bf565b60095462000326906001600160a01b0316600162000522565b6a084595161401484a000000606462000341826001620009d3565b6200034d9190620009f3565b60065560646200035f826002620009d3565b6200036b9190620009f3565b6007556127106200037e826001620009d3565b6200038a9190620009f3565b600a556101f46014819055606460158190556000601681905591620003b0919062000a16565b620003bc919062000a16565b6013556101f46018819055606460198190556000601a81905591620003e2919062000a16565b620003ee919062000a16565b601755620003fe836001620004bf565b6200040b306001620004bf565b6200041a61dead6001620004bf565b60085462000433906001600160a01b03166001620004bf565b620004408360016200058e565b6200044d3060016200058e565b6200045c61dead60016200058e565b60085462000475906001600160a01b031660016200058e565b600b80546001600160a01b03191673ebcc114f358343ab4c7138b1ff91044942a83aa5179055620004a7308262000638565b620004b2836200071d565b50505062000a2c565b3390565b6001600160a01b0382166000818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601e60205260409020805460ff1916821515179055620005528282620004bf565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005d95760405162461bcd60e51b81526020600482018190526024820152600080516020620042d483398151915260448201526064016200015b565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006905760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200015b565b8060026000828254620006a4919062000a16565b90915550506001600160a01b03821660009081526020819052604081208054839290620006d390849062000a16565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007685760405162461bcd60e51b81526020600482018190526024820152600080516020620042d483398151915260448201526064016200015b565b6001600160a01b038116620007cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200015b565b6005546040516001600160a01b03808416921690600080516020620042f483398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200084557607f821691505b6020821081036200086657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008ba57600081815260208120601f850160051c81016020861015620008955750805b601f850160051c820191505b81811015620008b657828155600101620008a1565b5050505b505050565b81516001600160401b03811115620008db57620008db6200081a565b620008f381620008ec845462000830565b846200086c565b602080601f8311600181146200092b5760008415620009125750858301515b600019600386901b1c1916600185901b178555620008b6565b600085815260208120601f198616915b828110156200095c578886015182559484019460019091019084016200093b565b50858210156200097b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200099e57600080fd5b81516001600160a01b0381168114620009b657600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620009ed57620009ed620009bd565b92915050565b60008262000a1157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009ed57620009ed620009bd565b6138988062000a3c6000396000f3fe6080604052600436106103b15760003560e01c80639a7a23d6116101e7578063d257b34f1161010d578063ee40166e116100a0578063f5648a4f1161006f578063f5648a4f14610aa7578063f637434214610abc578063f771cb6514610ad2578063f8b45b0514610aec57600080fd5b8063ee40166e14610a3b578063efda116514610a51578063f11a24d314610a71578063f2fde38b14610a8757600080fd5b8063e71dc3f5116100dc578063e71dc3f5146109db578063e7b71ce2146109f1578063e800dff714610a06578063e884f26014610a2657600080fd5b8063d257b34f14610949578063d85ba06314610969578063dd62ed3e1461097f578063e2f45605146109c557600080fd5b8063b16d78cf11610185578063c024666811610154578063c0246668146108d9578063c18bc195146108f9578063c876d0b914610919578063cf46f24c1461093357600080fd5b8063b16d78cf1461084a578063b62496f51461086a578063b98755391461089a578063bbc0c742146108ba57600080fd5b8063a457c2d7116101c1578063a457c2d7146107de578063a62068ce146107fe578063a9059cbb14610814578063adb873bd1461083457600080fd5b80639a7a23d6146107935780639e93ad8e146107b3578063a28e86d3146107c957600080fd5b80634a62bb65116102d7578063715018a61161026a5780638366e79a116102395780638366e79a1461071057806385ecfd28146107305780638da5cb5b1461076057806395d89b411461077e57600080fd5b8063715018a6146106a6578063751039fc146106bb5780637571336a146106d057806382aa7c68146106f057600080fd5b80636a486a8e116102a65780636a486a8e1461063a5780636b0a894c146106505780636ddd17131461066657806370a082311461068657600080fd5b80634a62bb65146105dd5780634f77f6c0146105f757806358a6d5311461060d5780635a139dd41461062457600080fd5b806318160ddd1161034f578063313ce5671161031e578063313ce56714610561578063395093511461057d578063452ed4f11461059d578063499b8394146105bd57600080fd5b806318160ddd146104e2578063203e727e1461050157806323b872dd1461052157806326ccb4c11461054157600080fd5b80630d075d9c1161038b5780630d075d9c146104505780630f683e901461047257806310d5de5314610492578063130a2c3c146104c257600080fd5b806306fdde03146103bd5780630758d924146103e8578063095ea7b31461042057600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610b02565b6040516103df9190613158565b60405180910390f35b3480156103f457600080fd5b50600854610408906001600160a01b031681565b6040516001600160a01b0390911681526020016103df565b34801561042c57600080fd5b5061044061043b3660046131be565b610b94565b60405190151581526020016103df565b34801561045c57600080fd5b5061047061046b3660046131ea565b610bab565b005b34801561047e57600080fd5b5061047061048d3660046131ea565b610c5d565b34801561049e57600080fd5b506104406104ad366004613216565b601d6020526000908152604090205460ff1681565b3480156104ce57600080fd5b506104706104dd366004613248565b610d01565b3480156104ee57600080fd5b506002545b6040519081526020016103df565b34801561050d57600080fd5b5061047061051c3660046132ce565b610da2565b34801561052d57600080fd5b5061044061053c3660046132e7565b610e74565b34801561054d57600080fd5b5061047061055c3660046132ce565b610f1e565b34801561056d57600080fd5b50604051601281526020016103df565b34801561058957600080fd5b506104406105983660046131be565b61114a565b3480156105a957600080fd5b50600954610408906001600160a01b031681565b3480156105c957600080fd5b506104706105d8366004613216565b611181565b3480156105e957600080fd5b506010546104409060ff1681565b34801561060357600080fd5b506104f360185481565b34801561061957600080fd5b50600d544310610440565b34801561063057600080fd5b506104f360145481565b34801561064657600080fd5b506104f360175481565b34801561065c57600080fd5b506104f3600f5481565b34801561067257600080fd5b506010546104409062010000900460ff1681565b34801561069257600080fd5b506104f36106a1366004613216565b611232565b3480156106b257600080fd5b5061047061124d565b3480156106c757600080fd5b506104706112c1565b3480156106dc57600080fd5b506104706106eb366004613328565b61132c565b3480156106fc57600080fd5b5061047061070b3660046132ce565b6113f4565b34801561071c57600080fd5b5061044061072b366004613361565b6114c7565b34801561073c57600080fd5b5061044061074b366004613216565b600e6020526000908152604090205460ff1681565b34801561076c57600080fd5b506005546001600160a01b0316610408565b34801561078a57600080fd5b506103d26116d0565b34801561079f57600080fd5b506104706107ae366004613328565b6116df565b3480156107bf57600080fd5b506104f361271081565b3480156107d557600080fd5b506104706117d3565b3480156107ea57600080fd5b506104406107f93660046131be565b61180c565b34801561080a57600080fd5b506104f3600d5481565b34801561082057600080fd5b5061044061082f3660046131be565b6118a5565b34801561084057600080fd5b506104f3601a5481565b34801561085657600080fd5b5061047061086536600461338f565b6118b2565b34801561087657600080fd5b50610440610885366004613216565b601e6020526000908152604090205460ff1681565b3480156108a657600080fd5b506104706108b536600461338f565b6119b5565b3480156108c657600080fd5b5060105461044090610100900460ff1681565b3480156108e557600080fd5b506104706108f4366004613328565b611a74565b34801561090557600080fd5b506104706109143660046132ce565b611afd565b34801561092557600080fd5b506012546104409060ff1681565b34801561093f57600080fd5b506104f360065481565b34801561095557600080fd5b506104706109643660046132ce565b611bc7565b34801561097557600080fd5b506104f360135481565b34801561098b57600080fd5b506104f361099a366004613361565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109d157600080fd5b506104f3600a5481565b3480156109e757600080fd5b506104f360165481565b3480156109fd57600080fd5b50610470611d12565b348015610a1257600080fd5b50610470610a21366004613328565b611d9a565b348015610a3257600080fd5b50610470611def565b348015610a4757600080fd5b506104f3600c5481565b348015610a5d57600080fd5b50610470610a6c3660046132ce565b611e25565b348015610a7d57600080fd5b506104f360155481565b348015610a9357600080fd5b50610470610aa2366004613216565b612026565b348015610ab357600080fd5b50610470612111565b348015610ac857600080fd5b506104f360195481565b348015610ade57600080fd5b50601b546104409060ff1681565b348015610af857600080fd5b506104f360075481565b606060038054610b11906133ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3d906133ac565b8015610b8a5780601f10610b5f57610100808354040283529160200191610b8a565b820191906000526020600020905b815481529060010190602001808311610b6d57829003601f168201915b5050505050905090565b6000610ba133848461217d565b5060015b92915050565b6005546001600160a01b03163314610bde5760405162461bcd60e51b8152600401610bd5906133e6565b60405180910390fd5b60148390556015829055601681905580610bf88385613431565b610c029190613431565b60138190556103201015610c585760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203825206f72206c657373000000006044820152606401610bd5565b505050565b6005546001600160a01b03163314610c875760405162461bcd60e51b8152600401610bd5906133e6565b60188390556019829055601a81905580610ca18385613431565b610cab9190613431565b60178190556103201015610c585760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203825206f72206c657373000000006044820152606401610bd5565b6005546001600160a01b03163314610d2b5760405162461bcd60e51b8152600401610bd5906133e6565b60005b82811015610d9c5781600e6000868685818110610d4d57610d4d613444565b9050602002016020810190610d629190613216565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d948161345a565b915050610d2e565b50505050565b6005546001600160a01b03163314610dcc5760405162461bcd60e51b8152600401610bd5906133e6565b610dd86012600a613557565b6103e8610de460025490565b610def906002613566565b610df9919061357d565b610e03919061357d565b811015610e225760405162461bcd60e51b8152600401610bd59061359f565b610e2e6012600a613557565b610e389082613566565b60068190556040519081527f89c099a4e6d77f9ed9839689924c080dcc270b4bc837e2d8979544f19df27d78906020015b60405180910390a150565b6000610e818484846122a2565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f065760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bd5565b610f13853385840361217d565b506001949350505050565b6005546001600160a01b03163314610f485760405162461bcd60e51b8152600401610bd5906133e6565b601054610100900460ff1615610f705760405162461bcd60e51b8152600401610bd5906135e8565b600a8110610fd05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610bd5565b6010805462ffff0019166201010017905543600c819055610ff2908290613431565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a16000471161103e5760405162461bcd60e51b8152600401610bd590613633565b600061104930611232565b116110a55760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610bd5565b6008546110c59030906001600160a01b03166110c082611232565b61217d565b6008546001600160a01b031663f305d71947306110e181611232565b60008030426040518863ffffffff1660e01b815260040161110796959493929190613676565b60606040518083038185885af1158015611125573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d9c91906136b1565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ba19185906110c0908690613431565b6005546001600160a01b031633146111ab5760405162461bcd60e51b8152600401610bd5906133e6565b6001600160a01b0381166112105760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610bd5565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112775760405162461bcd60e51b8152600401610bd5906133e6565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112eb5760405162461bcd60e51b8152600401610bd5906133e6565b6010805460ff199081169091556012805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146113565760405162461bcd60e51b8152600401610bd5906133e6565b806113c9576009546001600160a01b03908116908316036113c95760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bd5565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461141e5760405162461bcd60e51b8152600401610bd5906133e6565b601054610100900460ff16156114765760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bd5565b6010805462ffff0019166201010017905543600c819055611498908290613431565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146114f45760405162461bcd60e51b8152600401610bd5906133e6565b6001600160a01b03831661154a5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bd5565b306001600160a01b038416036115a25760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bd5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160d91906136df565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168491906136f8565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610b11906133ac565b6005546001600160a01b031633146117095760405162461bcd60e51b8152600401610bd5906133e6565b6009546001600160a01b039081169083160361178d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bd5565b6117978282612cea565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146117fd5760405162461bcd60e51b8152600401610bd5906133e6565b6010805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561188e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bd5565b61189b338585840361217d565b5060019392505050565b6000610ba13384846122a2565b6005546001600160a01b031633146118dc5760405162461bcd60e51b8152600401610bd5906133e6565b806119295760405162461bcd60e51b815260206004820152601860248201527f436f6e6669726d2073656c6c696e6720656e61626c65642100000000000000006044820152606401610bd5565b601b5460ff161561197c5760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610bd5565b601b805460ff191660011790556040517f9392259d24d71f51fdce621059e3218b1271b2a2781a380c58fff224548c193c90600090a150565b6005546001600160a01b031633146119df5760405162461bcd60e51b8152600401610bd5906133e6565b80611a2c5760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610bd5565b601054610100900460ff1615611a545760405162461bcd60e51b8152600401610bd5906135e8565b6000471161103e5760405162461bcd60e51b8152600401610bd590613633565b6005546001600160a01b03163314611a9e5760405162461bcd60e51b8152600401610bd5906133e6565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611b275760405162461bcd60e51b8152600401610bd5906133e6565b611b336012600a613557565b6064611b3e60025490565b611b49906001613566565b611b53919061357d565b611b5d919061357d565b811015611b7c5760405162461bcd60e51b8152600401610bd59061359f565b611b886012600a613557565b611b929082613566565b60078190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610e69565b6005546001600160a01b03163314611bf15760405162461bcd60e51b8152600401610bd5906133e6565b620186a0611bfe60025490565b611c09906001613566565b611c13919061357d565b811015611c805760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bd5565b6103e8611c8c60025490565b611c97906001613566565b611ca1919061357d565b811115611d0d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bd5565b600a55565b6005546001600160a01b03163314611d3c5760405162461bcd60e51b8152600401610bd5906133e6565b6101906014819055606460158190556000601681905591611d5d9190613431565b611d679190613431565b6013556101906018819055606460198190556000601a81905591611d8b9190613431565b611d959190613431565b601755565b6005546001600160a01b03163314611dc45760405162461bcd60e51b8152600401610bd5906133e6565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611e195760405162461bcd60e51b8152600401610bd5906133e6565b6012805460ff19169055565b6005546001600160a01b03163314611e4f5760405162461bcd60e51b8152600401610bd5906133e6565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611e98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebc91906136df565b905060008111611f0e5760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610bd5565b6000612710611f1d8484613566565b611f27919061357d565b60095460085460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015611f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa291906136f8565b50600854604051629d473b60e21b81526001600160a01b03909116906302751cec90611fdd9030908590600190819033904290600401613676565b60408051808303816000875af1158015611ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201f9190613715565b5050505050565b6005546001600160a01b031633146120505760405162461bcd60e51b8152600401610bd5906133e6565b6001600160a01b0381166120b55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd5565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461213b5760405162461bcd60e51b8152600401610bd5906133e6565b604051600090339047908381818185875af1925050503d8060008114610d9c576040519150601f19603f3d011682016040523d82523d6000602084013e610d9c565b6001600160a01b0383166121df5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd5565b6001600160a01b0382166122405760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122c85760405162461bcd60e51b8152600401610bd590613739565b6001600160a01b0382166122ee5760405162461bcd60e51b8152600401610bd59061377e565b6000811161233e5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bd5565b601054610100900460ff166123d1576001600160a01b0383166000908152601c602052604090205460ff168061238c57506001600160a01b0382166000908152601c602052604090205460ff165b6123d15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bd5565b600d54156124a4576001600160a01b0383166000908152600e602052604090205460ff16158061240e57506005546001600160a01b038381169116145b8061242357506001600160a01b03821661dead145b6124a45760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610bd5565b60105460ff16156128dc576005546001600160a01b038481169116148015906124db57506005546001600160a01b03838116911614155b80156124ef57506001600160a01b03821615155b801561250657506001600160a01b03821661dead14155b801561252b57506001600160a01b0383166000908152601c602052604090205460ff16155b801561255057506001600160a01b0382166000908152601c602052604090205460ff16155b156128dc5760125460ff1615612669576008546001600160a01b0383811691161480159061258c57506009546001600160a01b03838116911614155b156126695761259c6002436137c1565b326000908152601160205260409020541080156125da57506125bf6002436137c1565b6001600160a01b038316600090815260116020526040902054105b6126445760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610bd5565b3260009081526011602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601e602052604090205460ff1680156126aa57506001600160a01b0382166000908152601d602052604090205460ff16155b15612772576006548111156127125760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc103a3c371760c11b6064820152608401610bd5565b6007548161271f84611232565b6127299190613431565b111561276d5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bd5565b6128dc565b6001600160a01b0382166000908152601e602052604090205460ff1680156127b357506001600160a01b0383166000908152601d602052604090205460ff16155b1561286157601b5460ff166127fd5760405162461bcd60e51b815260206004820152601060248201526f14d95b1b1a5b99c8191a5cd8589b195960821b6044820152606401610bd5565b60065481111561276d5760405162461bcd60e51b815260206004820152602960248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152681036b0bc103a3c371760b91b6064820152608401610bd5565b6001600160a01b0382166000908152601d602052604090205460ff166128dc576007548161288e84611232565b6128989190613431565b11156128dc5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bd5565b60006128e730611232565b600a5490915081108015908190612906575060105462010000900460ff165b801561291c5750600954600160a01b900460ff16155b801561294157506001600160a01b0385166000908152601e602052604090205460ff16155b801561296657506001600160a01b0385166000908152601c602052604090205460ff16155b801561298b57506001600160a01b0384166000908152601c602052604090205460ff16155b156129e0576009805460ff60a01b1916600160a01b179055600a546129b1906014613566565b8211156129c957600a546129c6906014613566565b91505b6129d282612d18565b6009805460ff60a01b191690555b6001600160a01b0385166000908152601c602052604090205460019060ff1680612a2257506001600160a01b0385166000908152601c602052604090205460ff165b15612a2b575060005b6000806000808415612cd357600d5443108015612a6057506001600160a01b038a166000908152601e602052604090205460ff165b8015612a8557506001600160a01b0389166000908152601e602052604090205460ff16155b8015612a9357506000601354115b15612b8d576001600160a01b0389166000908152600e602052604090205460ff16612b33576001600160a01b0389166000908152600e60205260408120805460ff19166001908117909155600f805491929091612af1908490613431565b90915550506040516001600160a01b038a1681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b50886064612b42896063613566565b612b4c919061357d565b935060135460155485612b5f9190613566565b612b69919061357d565b915060135460165485612b7c9190613566565b612b86919061357d565b9250612c94565b6001600160a01b0389166000908152601e602052604090205460ff168015612bb757506000601754115b15612c0a5788905061271060175489612bd09190613566565b612bda919061357d565b935060175460195485612bed9190613566565b612bf7919061357d565b9150601754601a5485612b7c9190613566565b6001600160a01b038a166000908152601e602052604090205460ff168015612c3457506000601354115b15612c945789905061271060135489612c4d9190613566565b612c57919061357d565b935060135460155485612c6a9190613566565b612c74919061357d565b915060135460165485612c879190613566565b612c91919061357d565b92505b8315612cc657612ca58a3086612e76565b8215612cb557612cb53084612fcb565b8115612cc657612cc6308284612e76565b612cd084896137c1565b97505b612cde8a8a8a612e76565b50505050505050505050565b6001600160a01b0382166000908152601e60205260409020805460ff191682151517905561179782826130f5565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d4d57612d4d613444565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dca91906137d4565b81600181518110612ddd57612ddd613444565b6001600160a01b039283166020918202929092010152600854612e03913091168461217d565b600854600b5460405163791ac94760e01b81526001600160a01b039283169263791ac94792612e40928792600092889291169042906004016137f1565b600060405180830381600087803b158015612e5a57600080fd5b505af1158015612e6e573d6000803e3d6000fd5b505050505050565b6001600160a01b038316612e9c5760405162461bcd60e51b8152600401610bd590613739565b6001600160a01b038216612ec25760405162461bcd60e51b8152600401610bd59061377e565b6001600160a01b03831660009081526020819052604090205481811015612f3a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bd5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612f71908490613431565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fbd91815260200190565b60405180910390a350505050565b6001600160a01b03821661302b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bd5565b6001600160a01b0382166000908152602081905260409020548181101561309f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bd5565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612295565b6001600160a01b0382166000818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b8181101561318557858101830151858201604001528201613169565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131bb57600080fd5b50565b600080604083850312156131d157600080fd5b82356131dc816131a6565b946020939093013593505050565b6000806000606084860312156131ff57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561322857600080fd5b8135613233816131a6565b9392505050565b80151581146131bb57600080fd5b60008060006040848603121561325d57600080fd5b833567ffffffffffffffff8082111561327557600080fd5b818601915086601f83011261328957600080fd5b81358181111561329857600080fd5b8760208260051b85010111156132ad57600080fd5b602092830195509350508401356132c38161323a565b809150509250925092565b6000602082840312156132e057600080fd5b5035919050565b6000806000606084860312156132fc57600080fd5b8335613307816131a6565b92506020840135613317816131a6565b929592945050506040919091013590565b6000806040838503121561333b57600080fd5b8235613346816131a6565b915060208301356133568161323a565b809150509250929050565b6000806040838503121561337457600080fd5b823561337f816131a6565b91506020830135613356816131a6565b6000602082840312156133a157600080fd5b81356132338161323a565b600181811c908216806133c057607f821691505b6020821081036133e057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ba557610ba561341b565b634e487b7160e01b600052603260045260246000fd5b60006001820161346c5761346c61341b565b5060010190565b600181815b808511156134ae5781600019048211156134945761349461341b565b808516156134a157918102915b93841c9390800290613478565b509250929050565b6000826134c557506001610ba5565b816134d257506000610ba5565b81600181146134e857600281146134f25761350e565b6001915050610ba5565b60ff8411156135035761350361341b565b50506001821b610ba5565b5060208310610133831016604e8410600b8410161715613531575081810a610ba5565b61353b8383613473565b806000190482111561354f5761354f61341b565b029392505050565b600061323360ff8416836134b6565b8082028115828204841417610ba557610ba561341b565b60008261359a57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152687468616e20302e322560b81b606082015260800190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156136c657600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156136f157600080fd5b5051919050565b60006020828403121561370a57600080fd5b81516132338161323a565b6000806040838503121561372857600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba557610ba561341b565b6000602082840312156137e657600080fd5b8151613233816131a6565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138415784516001600160a01b03168352938301939183019160010161381c565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212200b620c14b1bfdc11de51620093bc1aee303343b611311db1cf12c1f3834a79f464736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80639a7a23d6116101e7578063d257b34f1161010d578063ee40166e116100a0578063f5648a4f1161006f578063f5648a4f14610aa7578063f637434214610abc578063f771cb6514610ad2578063f8b45b0514610aec57600080fd5b8063ee40166e14610a3b578063efda116514610a51578063f11a24d314610a71578063f2fde38b14610a8757600080fd5b8063e71dc3f5116100dc578063e71dc3f5146109db578063e7b71ce2146109f1578063e800dff714610a06578063e884f26014610a2657600080fd5b8063d257b34f14610949578063d85ba06314610969578063dd62ed3e1461097f578063e2f45605146109c557600080fd5b8063b16d78cf11610185578063c024666811610154578063c0246668146108d9578063c18bc195146108f9578063c876d0b914610919578063cf46f24c1461093357600080fd5b8063b16d78cf1461084a578063b62496f51461086a578063b98755391461089a578063bbc0c742146108ba57600080fd5b8063a457c2d7116101c1578063a457c2d7146107de578063a62068ce146107fe578063a9059cbb14610814578063adb873bd1461083457600080fd5b80639a7a23d6146107935780639e93ad8e146107b3578063a28e86d3146107c957600080fd5b80634a62bb65116102d7578063715018a61161026a5780638366e79a116102395780638366e79a1461071057806385ecfd28146107305780638da5cb5b1461076057806395d89b411461077e57600080fd5b8063715018a6146106a6578063751039fc146106bb5780637571336a146106d057806382aa7c68146106f057600080fd5b80636a486a8e116102a65780636a486a8e1461063a5780636b0a894c146106505780636ddd17131461066657806370a082311461068657600080fd5b80634a62bb65146105dd5780634f77f6c0146105f757806358a6d5311461060d5780635a139dd41461062457600080fd5b806318160ddd1161034f578063313ce5671161031e578063313ce56714610561578063395093511461057d578063452ed4f11461059d578063499b8394146105bd57600080fd5b806318160ddd146104e2578063203e727e1461050157806323b872dd1461052157806326ccb4c11461054157600080fd5b80630d075d9c1161038b5780630d075d9c146104505780630f683e901461047257806310d5de5314610492578063130a2c3c146104c257600080fd5b806306fdde03146103bd5780630758d924146103e8578063095ea7b31461042057600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610b02565b6040516103df9190613158565b60405180910390f35b3480156103f457600080fd5b50600854610408906001600160a01b031681565b6040516001600160a01b0390911681526020016103df565b34801561042c57600080fd5b5061044061043b3660046131be565b610b94565b60405190151581526020016103df565b34801561045c57600080fd5b5061047061046b3660046131ea565b610bab565b005b34801561047e57600080fd5b5061047061048d3660046131ea565b610c5d565b34801561049e57600080fd5b506104406104ad366004613216565b601d6020526000908152604090205460ff1681565b3480156104ce57600080fd5b506104706104dd366004613248565b610d01565b3480156104ee57600080fd5b506002545b6040519081526020016103df565b34801561050d57600080fd5b5061047061051c3660046132ce565b610da2565b34801561052d57600080fd5b5061044061053c3660046132e7565b610e74565b34801561054d57600080fd5b5061047061055c3660046132ce565b610f1e565b34801561056d57600080fd5b50604051601281526020016103df565b34801561058957600080fd5b506104406105983660046131be565b61114a565b3480156105a957600080fd5b50600954610408906001600160a01b031681565b3480156105c957600080fd5b506104706105d8366004613216565b611181565b3480156105e957600080fd5b506010546104409060ff1681565b34801561060357600080fd5b506104f360185481565b34801561061957600080fd5b50600d544310610440565b34801561063057600080fd5b506104f360145481565b34801561064657600080fd5b506104f360175481565b34801561065c57600080fd5b506104f3600f5481565b34801561067257600080fd5b506010546104409062010000900460ff1681565b34801561069257600080fd5b506104f36106a1366004613216565b611232565b3480156106b257600080fd5b5061047061124d565b3480156106c757600080fd5b506104706112c1565b3480156106dc57600080fd5b506104706106eb366004613328565b61132c565b3480156106fc57600080fd5b5061047061070b3660046132ce565b6113f4565b34801561071c57600080fd5b5061044061072b366004613361565b6114c7565b34801561073c57600080fd5b5061044061074b366004613216565b600e6020526000908152604090205460ff1681565b34801561076c57600080fd5b506005546001600160a01b0316610408565b34801561078a57600080fd5b506103d26116d0565b34801561079f57600080fd5b506104706107ae366004613328565b6116df565b3480156107bf57600080fd5b506104f361271081565b3480156107d557600080fd5b506104706117d3565b3480156107ea57600080fd5b506104406107f93660046131be565b61180c565b34801561080a57600080fd5b506104f3600d5481565b34801561082057600080fd5b5061044061082f3660046131be565b6118a5565b34801561084057600080fd5b506104f3601a5481565b34801561085657600080fd5b5061047061086536600461338f565b6118b2565b34801561087657600080fd5b50610440610885366004613216565b601e6020526000908152604090205460ff1681565b3480156108a657600080fd5b506104706108b536600461338f565b6119b5565b3480156108c657600080fd5b5060105461044090610100900460ff1681565b3480156108e557600080fd5b506104706108f4366004613328565b611a74565b34801561090557600080fd5b506104706109143660046132ce565b611afd565b34801561092557600080fd5b506012546104409060ff1681565b34801561093f57600080fd5b506104f360065481565b34801561095557600080fd5b506104706109643660046132ce565b611bc7565b34801561097557600080fd5b506104f360135481565b34801561098b57600080fd5b506104f361099a366004613361565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109d157600080fd5b506104f3600a5481565b3480156109e757600080fd5b506104f360165481565b3480156109fd57600080fd5b50610470611d12565b348015610a1257600080fd5b50610470610a21366004613328565b611d9a565b348015610a3257600080fd5b50610470611def565b348015610a4757600080fd5b506104f3600c5481565b348015610a5d57600080fd5b50610470610a6c3660046132ce565b611e25565b348015610a7d57600080fd5b506104f360155481565b348015610a9357600080fd5b50610470610aa2366004613216565b612026565b348015610ab357600080fd5b50610470612111565b348015610ac857600080fd5b506104f360195481565b348015610ade57600080fd5b50601b546104409060ff1681565b348015610af857600080fd5b506104f360075481565b606060038054610b11906133ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3d906133ac565b8015610b8a5780601f10610b5f57610100808354040283529160200191610b8a565b820191906000526020600020905b815481529060010190602001808311610b6d57829003601f168201915b5050505050905090565b6000610ba133848461217d565b5060015b92915050565b6005546001600160a01b03163314610bde5760405162461bcd60e51b8152600401610bd5906133e6565b60405180910390fd5b60148390556015829055601681905580610bf88385613431565b610c029190613431565b60138190556103201015610c585760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203825206f72206c657373000000006044820152606401610bd5565b505050565b6005546001600160a01b03163314610c875760405162461bcd60e51b8152600401610bd5906133e6565b60188390556019829055601a81905580610ca18385613431565b610cab9190613431565b60178190556103201015610c585760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203825206f72206c657373000000006044820152606401610bd5565b6005546001600160a01b03163314610d2b5760405162461bcd60e51b8152600401610bd5906133e6565b60005b82811015610d9c5781600e6000868685818110610d4d57610d4d613444565b9050602002016020810190610d629190613216565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d948161345a565b915050610d2e565b50505050565b6005546001600160a01b03163314610dcc5760405162461bcd60e51b8152600401610bd5906133e6565b610dd86012600a613557565b6103e8610de460025490565b610def906002613566565b610df9919061357d565b610e03919061357d565b811015610e225760405162461bcd60e51b8152600401610bd59061359f565b610e2e6012600a613557565b610e389082613566565b60068190556040519081527f89c099a4e6d77f9ed9839689924c080dcc270b4bc837e2d8979544f19df27d78906020015b60405180910390a150565b6000610e818484846122a2565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f065760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bd5565b610f13853385840361217d565b506001949350505050565b6005546001600160a01b03163314610f485760405162461bcd60e51b8152600401610bd5906133e6565b601054610100900460ff1615610f705760405162461bcd60e51b8152600401610bd5906135e8565b600a8110610fd05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610bd5565b6010805462ffff0019166201010017905543600c819055610ff2908290613431565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a16000471161103e5760405162461bcd60e51b8152600401610bd590613633565b600061104930611232565b116110a55760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610bd5565b6008546110c59030906001600160a01b03166110c082611232565b61217d565b6008546001600160a01b031663f305d71947306110e181611232565b60008030426040518863ffffffff1660e01b815260040161110796959493929190613676565b60606040518083038185885af1158015611125573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d9c91906136b1565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ba19185906110c0908690613431565b6005546001600160a01b031633146111ab5760405162461bcd60e51b8152600401610bd5906133e6565b6001600160a01b0381166112105760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610bd5565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112775760405162461bcd60e51b8152600401610bd5906133e6565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112eb5760405162461bcd60e51b8152600401610bd5906133e6565b6010805460ff199081169091556012805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146113565760405162461bcd60e51b8152600401610bd5906133e6565b806113c9576009546001600160a01b03908116908316036113c95760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bd5565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461141e5760405162461bcd60e51b8152600401610bd5906133e6565b601054610100900460ff16156114765760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bd5565b6010805462ffff0019166201010017905543600c819055611498908290613431565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146114f45760405162461bcd60e51b8152600401610bd5906133e6565b6001600160a01b03831661154a5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bd5565b306001600160a01b038416036115a25760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bd5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160d91906136df565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168491906136f8565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610b11906133ac565b6005546001600160a01b031633146117095760405162461bcd60e51b8152600401610bd5906133e6565b6009546001600160a01b039081169083160361178d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bd5565b6117978282612cea565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146117fd5760405162461bcd60e51b8152600401610bd5906133e6565b6010805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561188e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bd5565b61189b338585840361217d565b5060019392505050565b6000610ba13384846122a2565b6005546001600160a01b031633146118dc5760405162461bcd60e51b8152600401610bd5906133e6565b806119295760405162461bcd60e51b815260206004820152601860248201527f436f6e6669726d2073656c6c696e6720656e61626c65642100000000000000006044820152606401610bd5565b601b5460ff161561197c5760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610bd5565b601b805460ff191660011790556040517f9392259d24d71f51fdce621059e3218b1271b2a2781a380c58fff224548c193c90600090a150565b6005546001600160a01b031633146119df5760405162461bcd60e51b8152600401610bd5906133e6565b80611a2c5760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610bd5565b601054610100900460ff1615611a545760405162461bcd60e51b8152600401610bd5906135e8565b6000471161103e5760405162461bcd60e51b8152600401610bd590613633565b6005546001600160a01b03163314611a9e5760405162461bcd60e51b8152600401610bd5906133e6565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611b275760405162461bcd60e51b8152600401610bd5906133e6565b611b336012600a613557565b6064611b3e60025490565b611b49906001613566565b611b53919061357d565b611b5d919061357d565b811015611b7c5760405162461bcd60e51b8152600401610bd59061359f565b611b886012600a613557565b611b929082613566565b60078190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610e69565b6005546001600160a01b03163314611bf15760405162461bcd60e51b8152600401610bd5906133e6565b620186a0611bfe60025490565b611c09906001613566565b611c13919061357d565b811015611c805760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bd5565b6103e8611c8c60025490565b611c97906001613566565b611ca1919061357d565b811115611d0d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bd5565b600a55565b6005546001600160a01b03163314611d3c5760405162461bcd60e51b8152600401610bd5906133e6565b6101906014819055606460158190556000601681905591611d5d9190613431565b611d679190613431565b6013556101906018819055606460198190556000601a81905591611d8b9190613431565b611d959190613431565b601755565b6005546001600160a01b03163314611dc45760405162461bcd60e51b8152600401610bd5906133e6565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611e195760405162461bcd60e51b8152600401610bd5906133e6565b6012805460ff19169055565b6005546001600160a01b03163314611e4f5760405162461bcd60e51b8152600401610bd5906133e6565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611e98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebc91906136df565b905060008111611f0e5760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610bd5565b6000612710611f1d8484613566565b611f27919061357d565b60095460085460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015611f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa291906136f8565b50600854604051629d473b60e21b81526001600160a01b03909116906302751cec90611fdd9030908590600190819033904290600401613676565b60408051808303816000875af1158015611ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201f9190613715565b5050505050565b6005546001600160a01b031633146120505760405162461bcd60e51b8152600401610bd5906133e6565b6001600160a01b0381166120b55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd5565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461213b5760405162461bcd60e51b8152600401610bd5906133e6565b604051600090339047908381818185875af1925050503d8060008114610d9c576040519150601f19603f3d011682016040523d82523d6000602084013e610d9c565b6001600160a01b0383166121df5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd5565b6001600160a01b0382166122405760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122c85760405162461bcd60e51b8152600401610bd590613739565b6001600160a01b0382166122ee5760405162461bcd60e51b8152600401610bd59061377e565b6000811161233e5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bd5565b601054610100900460ff166123d1576001600160a01b0383166000908152601c602052604090205460ff168061238c57506001600160a01b0382166000908152601c602052604090205460ff165b6123d15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bd5565b600d54156124a4576001600160a01b0383166000908152600e602052604090205460ff16158061240e57506005546001600160a01b038381169116145b8061242357506001600160a01b03821661dead145b6124a45760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610bd5565b60105460ff16156128dc576005546001600160a01b038481169116148015906124db57506005546001600160a01b03838116911614155b80156124ef57506001600160a01b03821615155b801561250657506001600160a01b03821661dead14155b801561252b57506001600160a01b0383166000908152601c602052604090205460ff16155b801561255057506001600160a01b0382166000908152601c602052604090205460ff16155b156128dc5760125460ff1615612669576008546001600160a01b0383811691161480159061258c57506009546001600160a01b03838116911614155b156126695761259c6002436137c1565b326000908152601160205260409020541080156125da57506125bf6002436137c1565b6001600160a01b038316600090815260116020526040902054105b6126445760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610bd5565b3260009081526011602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601e602052604090205460ff1680156126aa57506001600160a01b0382166000908152601d602052604090205460ff16155b15612772576006548111156127125760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc103a3c371760c11b6064820152608401610bd5565b6007548161271f84611232565b6127299190613431565b111561276d5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bd5565b6128dc565b6001600160a01b0382166000908152601e602052604090205460ff1680156127b357506001600160a01b0383166000908152601d602052604090205460ff16155b1561286157601b5460ff166127fd5760405162461bcd60e51b815260206004820152601060248201526f14d95b1b1a5b99c8191a5cd8589b195960821b6044820152606401610bd5565b60065481111561276d5760405162461bcd60e51b815260206004820152602960248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152681036b0bc103a3c371760b91b6064820152608401610bd5565b6001600160a01b0382166000908152601d602052604090205460ff166128dc576007548161288e84611232565b6128989190613431565b11156128dc5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bd5565b60006128e730611232565b600a5490915081108015908190612906575060105462010000900460ff165b801561291c5750600954600160a01b900460ff16155b801561294157506001600160a01b0385166000908152601e602052604090205460ff16155b801561296657506001600160a01b0385166000908152601c602052604090205460ff16155b801561298b57506001600160a01b0384166000908152601c602052604090205460ff16155b156129e0576009805460ff60a01b1916600160a01b179055600a546129b1906014613566565b8211156129c957600a546129c6906014613566565b91505b6129d282612d18565b6009805460ff60a01b191690555b6001600160a01b0385166000908152601c602052604090205460019060ff1680612a2257506001600160a01b0385166000908152601c602052604090205460ff165b15612a2b575060005b6000806000808415612cd357600d5443108015612a6057506001600160a01b038a166000908152601e602052604090205460ff165b8015612a8557506001600160a01b0389166000908152601e602052604090205460ff16155b8015612a9357506000601354115b15612b8d576001600160a01b0389166000908152600e602052604090205460ff16612b33576001600160a01b0389166000908152600e60205260408120805460ff19166001908117909155600f805491929091612af1908490613431565b90915550506040516001600160a01b038a1681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b50886064612b42896063613566565b612b4c919061357d565b935060135460155485612b5f9190613566565b612b69919061357d565b915060135460165485612b7c9190613566565b612b86919061357d565b9250612c94565b6001600160a01b0389166000908152601e602052604090205460ff168015612bb757506000601754115b15612c0a5788905061271060175489612bd09190613566565b612bda919061357d565b935060175460195485612bed9190613566565b612bf7919061357d565b9150601754601a5485612b7c9190613566565b6001600160a01b038a166000908152601e602052604090205460ff168015612c3457506000601354115b15612c945789905061271060135489612c4d9190613566565b612c57919061357d565b935060135460155485612c6a9190613566565b612c74919061357d565b915060135460165485612c879190613566565b612c91919061357d565b92505b8315612cc657612ca58a3086612e76565b8215612cb557612cb53084612fcb565b8115612cc657612cc6308284612e76565b612cd084896137c1565b97505b612cde8a8a8a612e76565b50505050505050505050565b6001600160a01b0382166000908152601e60205260409020805460ff191682151517905561179782826130f5565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d4d57612d4d613444565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dca91906137d4565b81600181518110612ddd57612ddd613444565b6001600160a01b039283166020918202929092010152600854612e03913091168461217d565b600854600b5460405163791ac94760e01b81526001600160a01b039283169263791ac94792612e40928792600092889291169042906004016137f1565b600060405180830381600087803b158015612e5a57600080fd5b505af1158015612e6e573d6000803e3d6000fd5b505050505050565b6001600160a01b038316612e9c5760405162461bcd60e51b8152600401610bd590613739565b6001600160a01b038216612ec25760405162461bcd60e51b8152600401610bd59061377e565b6001600160a01b03831660009081526020819052604090205481811015612f3a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bd5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612f71908490613431565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fbd91815260200190565b60405180910390a350505050565b6001600160a01b03821661302b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bd5565b6001600160a01b0382166000908152602081905260409020548181101561309f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bd5565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612295565b6001600160a01b0382166000818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b8181101561318557858101830151858201604001528201613169565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131bb57600080fd5b50565b600080604083850312156131d157600080fd5b82356131dc816131a6565b946020939093013593505050565b6000806000606084860312156131ff57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561322857600080fd5b8135613233816131a6565b9392505050565b80151581146131bb57600080fd5b60008060006040848603121561325d57600080fd5b833567ffffffffffffffff8082111561327557600080fd5b818601915086601f83011261328957600080fd5b81358181111561329857600080fd5b8760208260051b85010111156132ad57600080fd5b602092830195509350508401356132c38161323a565b809150509250925092565b6000602082840312156132e057600080fd5b5035919050565b6000806000606084860312156132fc57600080fd5b8335613307816131a6565b92506020840135613317816131a6565b929592945050506040919091013590565b6000806040838503121561333b57600080fd5b8235613346816131a6565b915060208301356133568161323a565b809150509250929050565b6000806040838503121561337457600080fd5b823561337f816131a6565b91506020830135613356816131a6565b6000602082840312156133a157600080fd5b81356132338161323a565b600181811c908216806133c057607f821691505b6020821081036133e057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ba557610ba561341b565b634e487b7160e01b600052603260045260246000fd5b60006001820161346c5761346c61341b565b5060010190565b600181815b808511156134ae5781600019048211156134945761349461341b565b808516156134a157918102915b93841c9390800290613478565b509250929050565b6000826134c557506001610ba5565b816134d257506000610ba5565b81600181146134e857600281146134f25761350e565b6001915050610ba5565b60ff8411156135035761350361341b565b50506001821b610ba5565b5060208310610133831016604e8410600b8410161715613531575081810a610ba5565b61353b8383613473565b806000190482111561354f5761354f61341b565b029392505050565b600061323360ff8416836134b6565b8082028115828204841417610ba557610ba561341b565b60008261359a57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152687468616e20302e322560b81b606082015260800190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156136c657600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156136f157600080fd5b5051919050565b60006020828403121561370a57600080fd5b81516132338161323a565b6000806040838503121561372857600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba557610ba561341b565b6000602082840312156137e657600080fd5b8151613233816131a6565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138415784516001600160a01b03168352938301939183019160010161381c565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212200b620c14b1bfdc11de51620093bc1aee303343b611311db1cf12c1f3834a79f464736f6c63430008110033

Deployed Bytecode Sourcemap

11023:20640:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4139:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11130:27;;;;;;;;;;-1:-1:-1;11130:27:0;;;;-1:-1:-1;;;;;11130:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;11130:27:0;567:221:1;5194:210:0;;;;;;;;;;-1:-1:-1;5194:210:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;5194:210:0;1249:187:1;19141:408:0;;;;;;;;;;-1:-1:-1;19141:408:0;;;;;:::i;:::-;;:::i;:::-;;19557:417;;;;;;;;;;-1:-1:-1;19557:417:0;;;;;:::i;:::-;;:::i;12435:63::-;;;;;;;;;;-1:-1:-1;12435:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16393:232;;;;;;;;;;-1:-1:-1;16393:232:0;;;;;:::i;:::-;;:::i;4460:108::-;;;;;;;;;;-1:-1:-1;4548:12:0;;4460:108;;;3038:25:1;;;3026:2;3011:18;4460:108:0;2892:177:1;16792:330:0;;;;;;;;;;-1:-1:-1;16792:330:0;;;;;:::i;:::-;;:::i;5412:529::-;;;;;;;;;;-1:-1:-1;5412:529:0;;;;;:::i;:::-;;:::i;30149:1169::-;;;;;;;;;;-1:-1:-1;30149:1169:0;;;;;:::i;:::-;;:::i;4359:93::-;;;;;;;;;;-1:-1:-1;4359:93:0;;4442:2;3862:36:1;;3850:2;3835:18;4359:93:0;3720:184:1;5949:297:0;;;;;;;;;;-1:-1:-1;5949:297:0;;;;;:::i;:::-;;:::i;11164:21::-;;;;;;;;;;-1:-1:-1;11164:21:0;;;;-1:-1:-1;;;;;11164:21:0;;;27910:297;;;;;;;;;;-1:-1:-1;27910:297:0;;;;;:::i;:::-;;:::i;11499:33::-;;;;;;;;;;-1:-1:-1;11499:33:0;;;;;;;;12023:32;;;;;;;;;;;;;;;;26493:121;;;;;;;;;;-1:-1:-1;26588:18:0;;26573:12;:33;26493:121;;11879:31;;;;;;;;;;;;;;;;11988:28;;;;;;;;;;;;;;;;11465:25;;;;;;;;;;;;;;;;11579:31;;;;;;;;;;-1:-1:-1;11579:31:0;;;;;;;;;;;4576:177;;;;;;;;;;-1:-1:-1;4576:177:0;;;;;:::i;:::-;;:::i;9228:150::-;;;;;;;;;;;;;:::i;16013:154::-;;;;;;;;;;;;;:::i;18188:334::-;;;;;;;;;;-1:-1:-1;18188:334:0;;;;;:::i;:::-;;:::i;15631:330::-;;;;;;;;;;-1:-1:-1;15631:330:0;;;;;:::i;:::-;;:::i;27221:488::-;;;;;;;;;;-1:-1:-1;27221:488:0;;;;;:::i;:::-;;:::i;11415:43::-;;;;;;;;;;-1:-1:-1;11415:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9014:79;;;;;;;;;;-1:-1:-1;9079:6:0;;-1:-1:-1;;;;;9079:6:0;9014:79;;4247:104;;;;;;;;;;;;;:::i;18530:355::-;;;;;;;;;;-1:-1:-1;18530:355:0;;;;;:::i;:::-;;:::i;12135:43::-;;;;;;;;;;;;12173:5;12135:43;;16175:84;;;;;;;;;;;;;:::i;6254:482::-;;;;;;;;;;-1:-1:-1;6254:482:0;;;;;:::i;:::-;;:::i;11375:33::-;;;;;;;;;;;;;;;;4761:216;;;;;;;;;;-1:-1:-1;4761:216:0;;;;;:::i;:::-;;:::i;12100:26::-;;;;;;;;;;;;;;;;31373:287;;;;;;;;;;-1:-1:-1;31373:287:0;;;;;:::i;:::-;;:::i;12656:57::-;;;;;;;;;;-1:-1:-1;12656:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28607:861;;;;;;;;;;-1:-1:-1;28607:861:0;;;;;:::i;:::-;;:::i;11539:33::-;;;;;;;;;;-1:-1:-1;11539:33:0;;;;;;;;;;;19982:182;;;;;;;;;;-1:-1:-1;19982:182:0;;;;;:::i;:::-;;:::i;17130:323::-;;;;;;;;;;-1:-1:-1;17130:323:0;;;;;:::i;:::-;;:::i;11797:39::-;;;;;;;;;;-1:-1:-1;11797:39:0;;;;;;;;11063:27;;;;;;;;;;;;;;;;17523:428;;;;;;;;;;-1:-1:-1;17523:428:0;;;;;:::i;:::-;;:::i;11845:27::-;;;;;;;;;;;;;;;;4985:201;;;;;;;;;;-1:-1:-1;4985:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5151:18:0;;;5119:7;5151:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4985:201;11222:33;;;;;;;;;;;;;;;;11954:25;;;;;;;;;;;;;;;;28215:384;;;;;;;;;;;;;:::i;16267:118::-;;;;;;;;;;-1:-1:-1;16267:118:0;;;;;:::i;:::-;;:::i;16686:98::-;;;;;;;;;;;;;:::i;11298:37::-;;;;;;;;;;;;;;;;29476:665;;;;;;;;;;-1:-1:-1;29476:665:0;;;;;:::i;:::-;;:::i;11917:30::-;;;;;;;;;;;;;;;;9386:281;;;;;;;;;;-1:-1:-1;9386:281:0;;;;;:::i;:::-;;:::i;27717:185::-;;;;;;;;;;;;;:::i;12062:31::-;;;;;;;;;;;;;;;;12252:34;;;;;;;;;;-1:-1:-1;12252:34:0;;;;;;;;11097:24;;;;;;;;;;;;;;;;4139:100;4193:13;4226:5;4219:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4139:100;:::o;5194:210::-;5313:4;5335:39;289:10;5358:7;5367:6;5335:8;:39::i;:::-;-1:-1:-1;5392:4:0;5194:210;;;;;:::o;19141:408::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;;;;;;;;;19290:16:::1;:33:::0;;;19334:15:::1;:31:::0;;;19376:10:::1;:21:::0;;;19389:8;19423:34:::1;19352:13:::0;19309:14;19423:34:::1;:::i;:::-;:47;;;;:::i;:::-;19408:12;:62:::0;;;19505:3:::1;-1:-1:-1::0;19489:19:0::1;19481:60;;;::::0;-1:-1:-1;;;19481:60:0;;6353:2:1;19481:60:0::1;::::0;::::1;6335:21:1::0;6392:2;6372:18;;;6365:30;6431;6411:18;;;6404:58;6479:18;;19481:60:0::1;6151:352:1::0;19481:60:0::1;19141:408:::0;;;:::o;19557:417::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;19707:17:::1;:34:::0;;;19752:16:::1;:32:::0;;;19795:11:::1;:22:::0;;;19809:8;19844:36:::1;19771:13:::0;19727:14;19844:36:::1;:::i;:::-;:50;;;;:::i;:::-;19828:13;:66:::0;;;19930:3:::1;-1:-1:-1::0;19913:20:0::1;19905:61;;;::::0;-1:-1:-1;;;19905:61:0;;6353:2:1;19905:61:0::1;::::0;::::1;6335:21:1::0;6392:2;6372:18;;;6365:30;6431;6411:18;;;6404:58;6479:18;;19905:61:0::1;6151:352:1::0;16393:232:0;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;16521:9:::1;16516:102;16536:18:::0;;::::1;16516:102;;;16602:4;16576:11;:23;16588:7;;16596:1;16588:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16576:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16576:23:0;:30;;-1:-1:-1;;16576:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16556:3;::::1;::::0;::::1;:::i;:::-;;;;16516:102;;;;16393:232:::0;;;:::o;16792:330::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;16930:14:::1;4442:2:::0;16930::::1;:14;:::i;:::-;16921:4;16900:13;4548:12:::0;;;4460:108;16900:13:::1;:17;::::0;16916:1:::1;16900:17;:::i;:::-;16899:26;;;;:::i;:::-;16898:47;;;;:::i;:::-;16888:6;:57;;16866:148;;;;-1:-1:-1::0;;;16866:148:0::1;;;;;;;:::i;:::-;17050:14;4442:2:::0;17050::::1;:14;:::i;:::-;17040:25;::::0;:6;:25:::1;:::i;:::-;17025:12;:40:::0;;;17081:33:::1;::::0;3038:25:1;;;17081:33:0::1;::::0;3026:2:1;3011:18;17081:33:0::1;;;;;;;;16792:330:::0;:::o;5412:529::-;5552:4;5569:36;5579:6;5587:9;5598:6;5569:9;:36::i;:::-;-1:-1:-1;;;;;5645:19:0;;5618:24;5645:19;;;:11;:19;;;;;;;;289:10;5645:33;;;;;;;;5711:26;;;;5689:116;;;;-1:-1:-1;;;5689:116:0;;9170:2:1;5689:116:0;;;9152:21:1;9209:2;9189:18;;;9182:30;9248:34;9228:18;;;9221:62;-1:-1:-1;;;9299:18:1;;;9292:38;9347:19;;5689:116:0;8968:404:1;5689:116:0;5841:57;5850:6;289:10;5891:6;5872:16;:25;5841:8;:57::i;:::-;-1:-1:-1;5929:4:0;;5412:529;-1:-1:-1;;;;5412:529:0:o;30149:1169::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;30230:13:::1;::::0;::::1;::::0;::::1;;;30229:14;30221:70;;;;-1:-1:-1::0;;;30221:70:0::1;;;;;;;:::i;:::-;30343:2;30324:16;:21;30302:110;;;::::0;-1:-1:-1;;;30302:110:0;;9991:2:1;30302:110:0::1;::::0;::::1;9973:21:1::0;10030:2;10010:18;;;10003:30;10069:34;10049:18;;;10042:62;-1:-1:-1;;;10120:18:1;;;10113:37;10167:19;;30302:110:0::1;9789:403:1::0;30302:110:0::1;30460:13;:20:::0;;-1:-1:-1;;30491:18:0;;;;;30541:12:::1;30520:18;:33:::0;;;30585:37:::1;::::0;30606:16;;30585:37:::1;:::i;:::-;30564:18;:58:::0;30638:16:::1;::::0;::::1;::::0;;;::::1;30745:1;30721:21;:25;30699:110;;;;-1:-1:-1::0;;;30699:110:0::1;;;;;;;:::i;:::-;30871:1;30844:24;30862:4;30844:9;:24::i;:::-;:28;30822:116;;;::::0;-1:-1:-1;;;30822:116:0;;10803:2:1;30822:116:0::1;::::0;::::1;10785:21:1::0;10842:2;10822:18;;;10815:30;10881:34;10861:18;;;10854:62;-1:-1:-1;;;10932:18:1;;;10925:36;10978:19;;30822:116:0::1;10601:402:1::0;30822:116:0::1;30983:9;::::0;30951:69:::1;::::0;30968:4:::1;::::0;-1:-1:-1;;;;;30983:9:0::1;30995:24;30968:4:::0;30995:9:::1;:24::i;:::-;30951:8;:69::i;:::-;31033:9;::::0;-1:-1:-1;;;;;31033:9:0::1;:25;31066:21;31111:4;31131:24;31111:4:::0;31131:9:::1;:24::i;:::-;31170:1;31213::::0;31264:4:::1;31284:15;31033:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5949:297::-:0;289:10;6064:4;6158:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6158:34:0;;;;;;;;;;6064:4;;6086:130;;6136:7;;6158:47;;6195:10;;6158:47;:::i;27910:297::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28043:32:0;::::1;28021:120;;;::::0;-1:-1:-1;;;28021:120:0;;12133:2:1;28021:120:0::1;::::0;::::1;12115:21:1::0;12172:2;12152:18;;;12145:30;12211:34;12191:18;;;12184:62;-1:-1:-1;;;12262:18:1;;;12255:36;12308:19;;28021:120:0::1;11931:402:1::0;28021:120:0::1;28152:17;:47:::0;;-1:-1:-1;;;;;;28152:47:0::1;-1:-1:-1::0;;;;;28152:47:0;;;::::1;::::0;;;::::1;::::0;;27910:297::o;4576:177::-;-1:-1:-1;;;;;4727:18:0;4695:7;4727:18;;;;;;;;;;;;4576:177::o;9228:150::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;9321:6:::1;::::0;9300:40:::1;::::0;9337:1:::1;::::0;-1:-1:-1;;;;;9321:6:0::1;::::0;9300:40:::1;::::0;9337:1;;9300:40:::1;9351:6;:19:::0;;-1:-1:-1;;;;;;9351:19:0::1;::::0;;9228:150::o;16013:154::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;16067:14:::1;:22:::0;;-1:-1:-1;;16067:22:0;;::::1;::::0;;;16100:20:::1;:28:::0;;;;::::1;::::0;;16144:15:::1;::::0;::::1;::::0;16084:5:::1;::::0;16144:15:::1;16013:154::o:0;18188:334::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;18308:4:::1;18303:155;;18365:6;::::0;-1:-1:-1;;;;;18365:6:0;;::::1;18355:16:::0;;::::1;::::0;18329:117:::1;;;::::0;-1:-1:-1;;;18329:117:0;;12540:2:1;18329:117:0::1;::::0;::::1;12522:21:1::0;12579:2;12559:18;;;12552:30;12618:34;12598:18;;;12591:62;-1:-1:-1;;;12669:18:1;;;12662:37;12716:19;;18329:117:0::1;12338:403:1::0;18329:117:0::1;-1:-1:-1::0;;;;;18468:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18468:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18188:334::o;15631:330::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;15713:13:::1;::::0;::::1;::::0;::::1;;;15712:14;15704:50;;;::::0;-1:-1:-1;;;15704:50:0;;12948:2:1;15704:50:0::1;::::0;::::1;12930:21:1::0;12987:2;12967:18;;;12960:30;13026:25;13006:18;;;12999:53;13069:18;;15704:50:0::1;12746:347:1::0;15704:50:0::1;15765:13;:20:::0;;-1:-1:-1;;15796:18:0;;;;;15846:12:::1;15825:18;:33:::0;;;15890:31:::1;::::0;15911:10;;15890:31:::1;:::i;:::-;15869:18;:52:::0;15937:16:::1;::::0;::::1;::::0;;;::::1;15631:330:::0;:::o;27221:488::-;9141:6;;27335:10;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27371:20:0;::::1;27363:59;;;::::0;-1:-1:-1;;;27363:59:0;;13300:2:1;27363:59:0::1;::::0;::::1;13282:21:1::0;13339:2;13319:18;;;13312:30;13378:28;13358:18;;;13351:56;13424:18;;27363:59:0::1;13098:350:1::0;27363:59:0::1;27459:4;-1:-1:-1::0;;;;;27441:23:0;::::1;::::0;27433:64:::1;;;::::0;-1:-1:-1;;;27433:64:0;;13655:2:1;27433:64:0::1;::::0;::::1;13637:21:1::0;13694:2;13674:18;;;13667:30;13733;13713:18;;;13706:58;13781:18;;27433:64:0::1;13453:352:1::0;27433:64:0::1;27535:39;::::0;-1:-1:-1;;;27535:39:0;;27568:4:::1;27535:39;::::0;::::1;731:51:1::0;27508:24:0::1;::::0;-1:-1:-1;;;;;27535:24:0;::::1;::::0;::::1;::::0;704:18:1;;27535:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27593:46;::::0;-1:-1:-1;;;27593:46:0;;-1:-1:-1;;;;;14191:32:1;;;27593:46:0::1;::::0;::::1;14173:51:1::0;14240:18;;;14233:34;;;27508:66:0;;-1:-1:-1;27593:23:0;;::::1;::::0;::::1;::::0;14146:18:1;;27593:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27655;::::0;;-1:-1:-1;;;;;14191:32:1;;14173:51;;14255:2;14240:18;;14233:34;;;27585:54:0;;-1:-1:-1;27655:46:0::1;::::0;14146:18:1;27655:46:0::1;;;;;;;27352:357;27221:488:::0;;;;:::o;4247:104::-;4303:13;4336:7;4329:14;;;;;:::i;18530:355::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;18676:6:::1;::::0;-1:-1:-1;;;;;18676:6:0;;::::1;18668:14:::0;;::::1;::::0;18646:121:::1;;;::::0;-1:-1:-1;;;18646:121:0;;14730:2:1;18646:121:0::1;::::0;::::1;14712:21:1::0;14769:2;14749:18;;;14742:30;14808:34;14788:18;;;14781:62;14879:27;14859:18;;;14852:55;14924:19;;18646:121:0::1;14528:421:1::0;18646:121:0::1;18780:41;18809:4;18815:5;18780:28;:41::i;:::-;18837:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;18837:40:0;::::1;::::0;::::1;::::0;;;::::1;18530:355:::0;;:::o;16175:84::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;16230:14:::1;:21:::0;;-1:-1:-1;;16230:21:0::1;16247:4;16230:21;::::0;;16175:84::o;6254:482::-;289:10;6374:4;6423:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6423:34:0;;;;;;;;;;6490:35;;;;6468:122;;;;-1:-1:-1;;;6468:122:0;;15156:2:1;6468:122:0;;;15138:21:1;15195:2;15175:18;;;15168:30;15234:34;15214:18;;;15207:62;-1:-1:-1;;;15285:18:1;;;15278:35;15330:19;;6468:122:0;14954:401:1;6468:122:0;6626:67;289:10;6649:7;6677:15;6658:16;:34;6626:8;:67::i;:::-;-1:-1:-1;6724:4:0;;6254:482;-1:-1:-1;;;6254:482:0:o;4761:216::-;4883:4;4905:42;289:10;4929:9;4940:6;4905:9;:42::i;31373:287::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;31466:21:::1;31458:58;;;::::0;-1:-1:-1;;;31458:58:0;;15562:2:1;31458:58:0::1;::::0;::::1;15544:21:1::0;15601:2;15581:18;;;15574:30;15640:26;15620:18;;;15613:54;15684:18;;31458:58:0::1;15360:348:1::0;31458:58:0::1;31536:14;::::0;::::1;;31535:15;31527:52;;;::::0;-1:-1:-1;;;31527:52:0;;15915:2:1;31527:52:0::1;::::0;::::1;15897:21:1::0;15954:2;15934:18;;;15927:30;15993:26;15973:18;;;15966:54;16037:18;;31527:52:0::1;15713:348:1::0;31527:52:0::1;31592:14;:21:::0;;-1:-1:-1;;31592:21:0::1;31609:4;31592:21;::::0;;31629:23:::1;::::0;::::1;::::0;31592:14:::1;::::0;31629:23:::1;31373:287:::0;:::o;28607:861::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;28679:12:::1;28671:56;;;::::0;-1:-1:-1;;;28671:56:0;;16268:2:1;28671:56:0::1;::::0;::::1;16250:21:1::0;16307:2;16287:18;;;16280:30;16346:33;16326:18;;;16319:61;16397:18;;28671:56:0::1;16066:355:1::0;28671:56:0::1;28747:13;::::0;::::1;::::0;::::1;;;28746:14;28738:70;;;;-1:-1:-1::0;;;28738:70:0::1;;;;;;;:::i;:::-;28897:1;28873:21;:25;28851:110;;;;-1:-1:-1::0;;;28851:110:0::1;;;;;;;:::i;19982:182::-:0;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20067:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20067:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20122:34;;1389:41:1;;;20122:34:0::1;::::0;1362:18:1;20122:34:0::1;;;;;;;19982:182:::0;;:::o;17130:323::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;17270:14:::1;4442:2:::0;17270::::1;:14;:::i;:::-;17262:3;17241:13;4548:12:::0;;;4460:108;17241:13:::1;:17;::::0;17257:1:::1;17241:17;:::i;:::-;17240:25;;;;:::i;:::-;17239:46;;;;:::i;:::-;17229:6;:56;;17207:147;;;;-1:-1:-1::0;;;17207:147:0::1;;;;;;;:::i;:::-;17387:14;4442:2:::0;17387::::1;:14;:::i;:::-;17377:25;::::0;:6;:25:::1;:::i;:::-;17365:9;:37:::0;;;17418:27:::1;::::0;3038:25:1;;;17418:27:0::1;::::0;3026:2:1;3011:18;17418:27:0::1;2892:177:1::0;17523:428:0;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;17663:6:::1;17642:13;4548:12:::0;;;4460:108;17642:13:::1;:17;::::0;17658:1:::1;17642:17;:::i;:::-;17641:28;;;;:::i;:::-;17628:9;:41;;17606:144;;;::::0;-1:-1:-1;;;17606:144:0;;16628:2:1;17606:144:0::1;::::0;::::1;16610:21:1::0;16667:2;16647:18;;;16640:30;16706:34;16686:18;;;16679:62;-1:-1:-1;;;16757:18:1;;;16750:51;16818:19;;17606:144:0::1;16426:417:1::0;17606:144:0::1;17818:4;17797:13;4548:12:::0;;;4460:108;17797:13:::1;:17;::::0;17813:1:::1;17797:17;:::i;:::-;17796:26;;;;:::i;:::-;17783:9;:39;;17761:141;;;::::0;-1:-1:-1;;;17761:141:0;;17050:2:1;17761:141:0::1;::::0;::::1;17032:21:1::0;17089:2;17069:18;;;17062:30;17128:34;17108:18;;;17101:62;-1:-1:-1;;;17179:18:1;;;17172:50;17239:19;;17761:141:0::1;16848:416:1::0;17761:141:0::1;17913:18;:30:::0;17523:428::o;28215:384::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;28286:3:::1;28267:16;:22:::0;;;28318:3:::1;28300:15;:21:::0;;;-1:-1:-1;28332:10:0::1;:14:::0;;;-1:-1:-1;28372:34:0::1;::::0;28318:3;28372:34:::1;:::i;:::-;:47;;;;:::i;:::-;28357:12;:62:::0;28452:3:::1;28432:17;:23:::0;;;28485:3:::1;28466:16;:22:::0;;;-1:-1:-1;28499:11:0::1;:15:::0;;;-1:-1:-1;28541:36:0::1;::::0;28485:3;28541:36:::1;:::i;:::-;:50;;;;:::i;:::-;28525:13;:66:::0;28215:384::o;16267:118::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16351:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;16351:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16267:118::o;16686:98::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;16748:20:::1;:28:::0;;-1:-1:-1;;16748:28:0::1;::::0;;16686:98::o;29476:665::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;29568:6:::1;::::0;29561:39:::1;::::0;-1:-1:-1;;;29561:39:0;;29594:4:::1;29561:39;::::0;::::1;731:51:1::0;29541:17:0::1;::::0;-1:-1:-1;;;;;29568:6:0::1;::::0;29561:24:::1;::::0;704:18:1;;29561:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29541:59;;29633:1;29621:9;:13;29613:50;;;::::0;-1:-1:-1;;;29613:50:0;;17471:2:1;29613:50:0::1;::::0;::::1;17453:21:1::0;17510:2;17490:18;;;17483:30;17549:26;17529:18;;;17522:54;17593:18;;29613:50:0::1;17269:348:1::0;29613:50:0::1;29676:16;29719:5;29696:19;29708:7:::0;29696:9;:19:::1;:::i;:::-;29695:29;;;;:::i;:::-;29811:6;::::0;29835:9:::1;::::0;29804:52:::1;::::0;-1:-1:-1;;;29804:52:0;;-1:-1:-1;;;;;29835:9:0;;::::1;29804:52;::::0;::::1;14173:51:1::0;14240:18;;;14233:34;;;29676:48:0;;-1:-1:-1;29811:6:0::1;::::0;29804:22:::1;::::0;14146:18:1;;29804:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29902:9:0::1;::::0;:231:::1;::::0;-1:-1:-1;;;29902:231:0;;-1:-1:-1;;;;;29902:9:0;;::::1;::::0;:28:::1;::::0;:231:::1;::::0;29953:4:::1;::::0;29973:8;;29902:9;;;;30082:10:::1;::::0;30107:15:::1;::::0;29902:231:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29530:611;;29476:665:::0;:::o;9386:281::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9489:22:0;::::1;9467:110;;;::::0;-1:-1:-1;;;9467:110:0;;18686:2:1;9467:110:0::1;::::0;::::1;18668:21:1::0;18725:2;18705:18;;;18698:30;18764:34;18744:18;;;18737:62;-1:-1:-1;;;18815:18:1;;;18808:36;18861:19;;9467:110:0::1;18484:402:1::0;9467:110:0::1;9614:6;::::0;9593:38:::1;::::0;-1:-1:-1;;;;;9593:38:0;;::::1;::::0;9614:6:::1;::::0;9593:38:::1;::::0;9614:6:::1;::::0;9593:38:::1;9642:6;:17:::0;;-1:-1:-1;;;;;;9642:17:0::1;-1:-1:-1::0;;;;;9642:17:0;;;::::1;::::0;;;::::1;::::0;;9386:281::o;27717:185::-;9141:6;;-1:-1:-1;;;;;9141:6:0;289:10;9141:22;9133:67;;;;-1:-1:-1;;;9133:67:0;;;;;;;:::i;:::-;27812:82:::1;::::0;27775:12:::1;::::0;27820:10:::1;::::0;27844:21:::1;::::0;27775:12;27812:82;27775:12;27812:82;27844:21;27820:10;27812:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8283:380:::0;-1:-1:-1;;;;;8419:19:0;;8411:68;;;;-1:-1:-1;;;8411:68:0;;19303:2:1;8411:68:0;;;19285:21:1;19342:2;19322:18;;;19315:30;19381:34;19361:18;;;19354:62;-1:-1:-1;;;19432:18:1;;;19425:34;19476:19;;8411:68:0;19101:400:1;8411:68:0;-1:-1:-1;;;;;8498:21:0;;8490:68;;;;-1:-1:-1;;;8490:68:0;;19708:2:1;8490:68:0;;;19690:21:1;19747:2;19727:18;;;19720:30;19786:34;19766:18;;;19759:62;-1:-1:-1;;;19837:18:1;;;19830:32;19879:19;;8490:68:0;19506:398:1;8490:68:0;-1:-1:-1;;;;;8571:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8623:32;;3038:25:1;;;8623:32:0;;3011:18:1;8623:32:0;;;;;;;;8283:380;;;:::o;20172:6313::-;-1:-1:-1;;;;;20304:18:0;;20296:68;;;;-1:-1:-1;;;20296:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20383:16:0;;20375:64;;;;-1:-1:-1;;;20375:64:0;;;;;;;:::i;:::-;20467:1;20458:6;:10;20450:52;;;;-1:-1:-1;;;20450:52:0;;20921:2:1;20450:52:0;;;20903:21:1;20960:2;20940:18;;;20933:30;20999:31;20979:18;;;20972:59;21048:18;;20450:52:0;20719:353:1;20450:52:0;20520:13;;;;;;;20515:183;;-1:-1:-1;;;;;20576:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20605:23:0;;;;;;:19;:23;;;;;;;;20576:52;20550:136;;;;-1:-1:-1;;;20550:136:0;;21279:2:1;20550:136:0;;;21261:21:1;21318:2;21298:18;;;21291:30;-1:-1:-1;;;21337:18:1;;;21330:52;21399:18;;20550:136:0;21077:346:1;20550:136:0;20714:18;;:22;20710:247;;-1:-1:-1;;;;;20780:17:0;;;;;;:11;:17;;;;;;;;20779:18;;:35;;-1:-1:-1;9079:6:0;;-1:-1:-1;;;;;20801:13:0;;;9079:6;;20801:13;20779:35;:60;;;-1:-1:-1;;;;;;20818:21:0;;20832:6;20818:21;20779:60;20753:192;;;;-1:-1:-1;;;20753:192:0;;21630:2:1;20753:192:0;;;21612:21:1;21669:2;21649:18;;;21642:30;21708:34;21688:18;;;21681:62;21779:34;21759:18;;;21752:62;-1:-1:-1;;;21830:19:1;;;21823:37;21877:19;;20753:192:0;21428:474:1;20753:192:0;20973:14;;;;20969:2381;;;9079:6;;-1:-1:-1;;;;;21026:15:0;;;9079:6;;21026:15;;;;:49;;-1:-1:-1;9079:6:0;;-1:-1:-1;;;;;21062:13:0;;;9079:6;;21062:13;;21026:49;:86;;;;-1:-1:-1;;;;;;21096:16:0;;;;21026:86;:128;;;;-1:-1:-1;;;;;;21133:21:0;;21147:6;21133:21;;21026:128;:175;;;;-1:-1:-1;;;;;;21176:25:0;;;;;;:19;:25;;;;;;;;21175:26;21026:175;:220;;;;-1:-1:-1;;;;;;21223:23:0;;;;;;:19;:23;;;;;;;;21222:24;21026:220;21004:2335;;;21417:20;;;;21413:692;;;21480:9;;-1:-1:-1;;;;;21466:24:0;;;21480:9;;21466:24;;;;:49;;-1:-1:-1;21508:6:0;;-1:-1:-1;;;;;21494:21:0;;;21508:6;;21494:21;;21466:49;21462:624;;;21657:16;21672:1;21657:12;:16;:::i;:::-;21611:9;21582:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;21778:16:0;21793:1;21778:12;:16;:::i;:::-;-1:-1:-1;;;;;21710:32:0;;;;;;:28;:32;;;;;;:84;21582:212;21544:363;;;;-1:-1:-1;;;21544:363:0;;22242:2:1;21544:363:0;;;22224:21:1;22281:2;22261:18;;;22254:30;22320:34;22300:18;;;22293:62;-1:-1:-1;;;22371:18:1;;;22364:51;22432:19;;21544:363:0;22040:417:1;21544:363:0;21963:9;21934:39;;;;:28;:39;;;;;;21976:12;21934:54;;;;-1:-1:-1;;;;;22015:32:0;;;;;;:47;21462:624;-1:-1:-1;;;;;22179:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;22236:35:0;;;;;;:31;:35;;;;;;;;22235:36;22179:92;22153:1171;;;22358:12;;22348:6;:22;;22314:148;;;;-1:-1:-1;;;22314:148:0;;22664:2:1;22314:148:0;;;22646:21:1;22703:2;22683:18;;;22676:30;22742:34;22722:18;;;22715:62;-1:-1:-1;;;22793:18:1;;;22786:38;22841:19;;22314:148:0;22462:404:1;22314:148:0;22545:9;;22535:6;22519:13;22529:2;22519:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;22485:140;;;;-1:-1:-1;;;22485:140:0;;23073:2:1;22485:140:0;;;23055:21:1;23112:2;23092:18;;;23085:30;-1:-1:-1;;;23131:18:1;;;23124:49;23190:18;;22485:140:0;22871:343:1;22485:140:0;22153:1171;;;-1:-1:-1;;;;;22723:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;22778:37:0;;;;;;:31;:37;;;;;;;;22777:38;22723:92;22697:627;;;22866:14;;;;22858:43;;;;-1:-1:-1;;;22858:43:0;;23421:2:1;22858:43:0;;;23403:21:1;23460:2;23440:18;;;23433:30;-1:-1:-1;;;23479:18:1;;;23472:46;23535:18;;22858:43:0;23219:340:1;22858:43:0;22968:12;;22958:6;:22;;22924:149;;;;-1:-1:-1;;;22924:149:0;;23766:2:1;22924:149:0;;;23748:21:1;23805:2;23785:18;;;23778:30;23844:34;23824:18;;;23817:62;-1:-1:-1;;;23895:18:1;;;23888:39;23944:19;;22924:149:0;23564:405:1;22697:627:0;-1:-1:-1;;;;;23104:35:0;;;;;;:31;:35;;;;;;;;23099:225;;23224:9;;23214:6;23198:13;23208:2;23198:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;23164:140;;;;-1:-1:-1;;;23164:140:0;;23073:2:1;23164:140:0;;;23055:21:1;23112:2;23092:18;;;23085:30;-1:-1:-1;;;23131:18:1;;;23124:49;23190:18;;23164:140:0;22871:343:1;23164:140:0;23362:28;23393:24;23411:4;23393:9;:24::i;:::-;23469:18;;23362:55;;-1:-1:-1;23445:42:0;;;;;;;23518:35;;-1:-1:-1;23542:11:0;;;;;;;23518:35;:61;;;;-1:-1:-1;23571:8:0;;-1:-1:-1;;;23571:8:0;;;;23570:9;23518:61;:110;;;;-1:-1:-1;;;;;;23597:31:0;;;;;;:25;:31;;;;;;;;23596:32;23518:110;:153;;;;-1:-1:-1;;;;;;23646:25:0;;;;;;:19;:25;;;;;;;;23645:26;23518:153;:194;;;;-1:-1:-1;;;;;;23689:23:0;;;;;;:19;:23;;;;;;;;23688:24;23518:194;23500:510;;;23739:8;:15;;-1:-1:-1;;;;23739:15:0;-1:-1:-1;;;23739:15:0;;;23798:18;;:23;;23739:8;23798:23;:::i;:::-;23775:20;:46;23771:133;;;23865:18;;:23;;23886:2;23865:23;:::i;:::-;23842:46;;23771:133;23920:45;23944:20;23920:23;:45::i;:::-;23982:8;:16;;-1:-1:-1;;;;23982:16:0;;;23500:510;-1:-1:-1;;;;;24141:25:0;;24022:12;24141:25;;;:19;:25;;;;;;24037:4;;24141:25;;;:52;;-1:-1:-1;;;;;;24170:23:0;;;;;;:19;:23;;;;;;;;24141:52;24137:100;;;-1:-1:-1;24220:5:0;24137:100;24249:12;24276:18;24309:23;24347:31;24469:7;24465:1967;;;26588:18;;26573:12;:33;24551:77;;;;-1:-1:-1;;;;;;24597:31:0;;;;;;:25;:31;;;;;;;;24551:77;:128;;;;-1:-1:-1;;;;;;24650:29:0;;;;;;:25;:29;;;;;;;;24649:30;24551:128;:165;;;;;24715:1;24700:12;;:16;24551:165;24529:1387;;;-1:-1:-1;;;;;24756:15:0;;;;;;:11;:15;;;;;;;;24751:173;;-1:-1:-1;;;;;24796:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;24796:22:0;24814:4;24796:22;;;;;;24841:10;:15;;24814:4;;24841:10;;:15;;24814:4;;24841:15;:::i;:::-;;;;-1:-1:-1;;24884:20:0;;-1:-1:-1;;;;;749:32:1;;731:51;;24884:20:0;;719:2:1;704:18;24884:20:0;;;;;;;24751:173;-1:-1:-1;24968:4:0;25014:3;24999:11;:6;25008:2;24999:11;:::i;:::-;24998:19;;;;:::i;:::-;24991:26;;25081:12;;25062:15;;25055:4;:22;;;;:::i;:::-;25054:39;;;;:::i;:::-;25036:57;;25147:12;;25133:10;;25126:4;:17;;;;:::i;:::-;25125:34;;;;:::i;:::-;25112:47;;24529:1387;;;-1:-1:-1;;;;;25222:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25271:1;25255:13;;:17;25222:50;25218:698;;;25319:2;25293:28;;12173:5;25357:13;;25348:6;:22;;;;:::i;:::-;25347:38;;;;:::i;:::-;25340:45;;25450:13;;25430:16;;25423:4;:23;;;;:::i;:::-;25422:41;;;;:::i;:::-;25404:59;;25518:13;;25503:11;;25496:4;:18;;;;:::i;25218:698::-;-1:-1:-1;;;;;25593:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;25643:1;25628:12;;:16;25593:51;25589:327;;;25691:4;25665:30;;12173:5;25731:12;;25722:6;:21;;;;:::i;:::-;25721:37;;;;:::i;:::-;25714:44;;25822:12;;25803:15;;25796:4;:22;;;;:::i;:::-;25795:39;;;;:::i;:::-;25777:57;;25888:12;;25874:10;;25867:4;:17;;;;:::i;:::-;25866:34;;;;:::i;:::-;25853:47;;25589:327;25936:8;;25932:460;;25965:42;25981:4;25995;26002;25965:15;:42::i;:::-;26030:14;;26026:95;;26069:32;26083:4;26090:10;26069:5;:32::i;:::-;26143:19;;26139:238;;26187:170;26237:4;26269:23;26319:15;26187;:170::i;:::-;26406:14;26416:4;26406:14;;:::i;:::-;;;24465:1967;26444:33;26460:4;26466:2;26470:6;26444:15;:33::i;:::-;20285:6200;;;;;;;20172:6313;;;:::o;18893:240::-;-1:-1:-1;;;;;18976:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;18976:39:0;;;;;;;19028;18976:31;:39;19028:26;:39::i;26622:591::-;26779:16;;;26793:1;26779:16;;;;;;;;26755:21;;26779:16;;;;;;;;;;-1:-1:-1;26779:16:0;26755:40;;26824:4;26806;26811:1;26806:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26806:23:0;;;:7;;;;;;;;;;:23;;;;26850:9;;:16;;;-1:-1:-1;;;26850:16:0;;;;:9;;;;;:14;;:16;;;;;26806:7;;26850:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26840:4;26845:1;26840:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26840:26:0;;;:7;;;;;;;;;:26;26911:9;;26879:56;;26896:4;;26911:9;26923:11;26879:8;:56::i;:::-;26974:9;;27146:17;;26974:231;;-1:-1:-1;;;26974:231:0;;-1:-1:-1;;;;;26974:9:0;;;;:60;;:231;;27049:11;;26974:9;;27119:4;;27146:17;;;27179:15;;26974:231;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26684:529;26622:591;:::o;6744:651::-;-1:-1:-1;;;;;6884:20:0;;6876:70;;;;-1:-1:-1;;;6876:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6965:23:0;;6957:71;;;;-1:-1:-1;;;6957:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7065:17:0;;7041:21;7065:17;;;;;;;;;;;7115:23;;;;7093:111;;;;-1:-1:-1;;;7093:111:0;;25549:2:1;7093:111:0;;;25531:21:1;25588:2;25568:18;;;25561:30;25627:34;25607:18;;;25600:62;-1:-1:-1;;;25678:18:1;;;25671:36;25724:19;;7093:111:0;25347:402:1;7093:111:0;-1:-1:-1;;;;;7240:17:0;;;:9;:17;;;;;;;;;;;7260:22;;;7240:42;;7304:20;;;;;;;;:30;;7276:6;;7240:9;7304:30;;7276:6;;7304:30;:::i;:::-;;;;;;;;7369:9;-1:-1:-1;;;;;7352:35:0;7361:6;-1:-1:-1;;;;;7352:35:0;;7380:6;7352:35;;;;3038:25:1;;3026:2;3011:18;;2892:177;7352:35:0;;;;;;;;6865:530;6744:651;;;:::o;7725:550::-;-1:-1:-1;;;;;7809:21:0;;7801:67;;;;-1:-1:-1;;;7801:67:0;;25956:2:1;7801:67:0;;;25938:21:1;25995:2;25975:18;;;25968:30;26034:34;26014:18;;;26007:62;-1:-1:-1;;;26085:18:1;;;26078:31;26126:19;;7801:67:0;25754:397:1;7801:67:0;-1:-1:-1;;;;;7904:18:0;;7879:22;7904:18;;;;;;;;;;;7941:24;;;;7933:71;;;;-1:-1:-1;;;7933:71:0;;26358:2:1;7933:71:0;;;26340:21:1;26397:2;26377:18;;;26370:30;26436:34;26416:18;;;26409:62;-1:-1:-1;;;26487:18:1;;;26480:32;26529:19;;7933:71:0;26156:398:1;7933:71:0;-1:-1:-1;;;;;8040:18:0;;:9;:18;;;;;;;;;;;8061:23;;;8040:44;;8179:12;:22;;;;;;;8230:37;3038:25:1;;;8040:9:0;;:18;8230:37;;3011:18:1;8230:37:0;2892:177:1;17959:221:0;-1:-1:-1;;;;;18061:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;18061:52:0;;;;;;;;;;18129:43;;26727:51:1;;;26794:18;;;26787:50;18129:43:0;;26700:18:1;18129:43:0;;;;;;;17959:221;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1441:316::-;1518:6;1526;1534;1587:2;1575:9;1566:7;1562:23;1558:32;1555:52;;;1603:1;1600;1593:12;1555:52;-1:-1:-1;;1626:23:1;;;1696:2;1681:18;;1668:32;;-1:-1:-1;1747:2:1;1732:18;;;1719:32;;1441:316;-1:-1:-1;1441:316:1:o;1762:247::-;1821:6;1874:2;1862:9;1853:7;1849:23;1845:32;1842:52;;;1890:1;1887;1880:12;1842:52;1929:9;1916:23;1948:31;1973:5;1948:31;:::i;:::-;1998:5;1762:247;-1:-1:-1;;;1762:247:1:o;2014:118::-;2100:5;2093:13;2086:21;2079:5;2076:32;2066:60;;2122:1;2119;2112:12;2137:750;2229:6;2237;2245;2298:2;2286:9;2277:7;2273:23;2269:32;2266:52;;;2314:1;2311;2304:12;2266:52;2354:9;2341:23;2383:18;2424:2;2416:6;2413:14;2410:34;;;2440:1;2437;2430:12;2410:34;2478:6;2467:9;2463:22;2453:32;;2523:7;2516:4;2512:2;2508:13;2504:27;2494:55;;2545:1;2542;2535:12;2494:55;2585:2;2572:16;2611:2;2603:6;2600:14;2597:34;;;2627:1;2624;2617:12;2597:34;2682:7;2675:4;2665:6;2662:1;2658:14;2654:2;2650:23;2646:34;2643:47;2640:67;;;2703:1;2700;2693:12;2640:67;2734:4;2726:13;;;;-1:-1:-1;2758:6:1;-1:-1:-1;;2799:20:1;;2786:34;2829:28;2786:34;2829:28;:::i;:::-;2876:5;2866:15;;;2137:750;;;;;:::o;3074:180::-;3133:6;3186:2;3174:9;3165:7;3161:23;3157:32;3154:52;;;3202:1;3199;3192:12;3154:52;-1:-1:-1;3225:23:1;;3074:180;-1:-1:-1;3074:180:1:o;3259:456::-;3336:6;3344;3352;3405:2;3393:9;3384:7;3380:23;3376:32;3373:52;;;3421:1;3418;3411:12;3373:52;3460:9;3447:23;3479:31;3504:5;3479:31;:::i;:::-;3529:5;-1:-1:-1;3586:2:1;3571:18;;3558:32;3599:33;3558:32;3599:33;:::i;:::-;3259:456;;3651:7;;-1:-1:-1;;;3705:2:1;3690:18;;;;3677:32;;3259:456::o;4117:382::-;4182:6;4190;4243:2;4231:9;4222:7;4218:23;4214:32;4211:52;;;4259:1;4256;4249:12;4211:52;4298:9;4285:23;4317:31;4342:5;4317:31;:::i;:::-;4367:5;-1:-1:-1;4424:2:1;4409:18;;4396:32;4437:30;4396:32;4437:30;:::i;:::-;4486:7;4476:17;;;4117:382;;;;;:::o;4504:388::-;4572:6;4580;4633:2;4621:9;4612:7;4608:23;4604:32;4601:52;;;4649:1;4646;4639:12;4601:52;4688:9;4675:23;4707:31;4732:5;4707:31;:::i;:::-;4757:5;-1:-1:-1;4814:2:1;4799:18;;4786:32;4827:33;4786:32;4827:33;:::i;4897:241::-;4953:6;5006:2;4994:9;4985:7;4981:23;4977:32;4974:52;;;5022:1;5019;5012:12;4974:52;5061:9;5048:23;5080:28;5102:5;5080:28;:::i;5143:380::-;5222:1;5218:12;;;;5265;;;5286:61;;5340:4;5332:6;5328:17;5318:27;;5286:61;5393:2;5385:6;5382:14;5362:18;5359:38;5356:161;;5439:10;5434:3;5430:20;5427:1;5420:31;5474:4;5471:1;5464:15;5502:4;5499:1;5492:15;5356:161;;5143:380;;;:::o;5528:356::-;5730:2;5712:21;;;5749:18;;;5742:30;5808:34;5803:2;5788:18;;5781:62;5875:2;5860:18;;5528:356::o;5889:127::-;5950:10;5945:3;5941:20;5938:1;5931:31;5981:4;5978:1;5971:15;6005:4;6002:1;5995:15;6021:125;6086:9;;;6107:10;;;6104:36;;;6120:18;;:::i;6508:127::-;6569:10;6564:3;6560:20;6557:1;6550:31;6600:4;6597:1;6590:15;6624:4;6621:1;6614:15;6640:135;6679:3;6700:17;;;6697:43;;6720:18;;:::i;:::-;-1:-1:-1;6767:1:1;6756:13;;6640:135::o;6780:422::-;6869:1;6912:5;6869:1;6926:270;6947:7;6937:8;6934:21;6926:270;;;7006:4;7002:1;6998:6;6994:17;6988:4;6985:27;6982:53;;;7015:18;;:::i;:::-;7065:7;7055:8;7051:22;7048:55;;;7085:16;;;;7048:55;7164:22;;;;7124:15;;;;6926:270;;;6930:3;6780:422;;;;;:::o;7207:806::-;7256:5;7286:8;7276:80;;-1:-1:-1;7327:1:1;7341:5;;7276:80;7375:4;7365:76;;-1:-1:-1;7412:1:1;7426:5;;7365:76;7457:4;7475:1;7470:59;;;;7543:1;7538:130;;;;7450:218;;7470:59;7500:1;7491:10;;7514:5;;;7538:130;7575:3;7565:8;7562:17;7559:43;;;7582:18;;:::i;:::-;-1:-1:-1;;7638:1:1;7624:16;;7653:5;;7450:218;;7752:2;7742:8;7739:16;7733:3;7727:4;7724:13;7720:36;7714:2;7704:8;7701:16;7696:2;7690:4;7687:12;7683:35;7680:77;7677:159;;;-1:-1:-1;7789:19:1;;;7821:5;;7677:159;7868:34;7893:8;7887:4;7868:34;:::i;:::-;7938:6;7934:1;7930:6;7926:19;7917:7;7914:32;7911:58;;;7949:18;;:::i;:::-;7987:20;;7207:806;-1:-1:-1;;;7207:806:1:o;8018:140::-;8076:5;8105:47;8146:4;8136:8;8132:19;8126:4;8105:47;:::i;8163:168::-;8236:9;;;8267;;8284:15;;;8278:22;;8264:37;8254:71;;8305:18;;:::i;8336:217::-;8376:1;8402;8392:132;;8446:10;8441:3;8437:20;8434:1;8427:31;8481:4;8478:1;8471:15;8509:4;8506:1;8499:15;8392:132;-1:-1:-1;8538:9:1;;8336:217::o;8558:405::-;8760:2;8742:21;;;8799:2;8779:18;;;8772:30;8838:34;8833:2;8818:18;;8811:62;-1:-1:-1;;;8904:2:1;8889:18;;8882:39;8953:3;8938:19;;8558:405::o;9377:407::-;9579:2;9561:21;;;9618:2;9598:18;;;9591:30;9657:34;9652:2;9637:18;;9630:62;-1:-1:-1;;;9723:2:1;9708:18;;9701:41;9774:3;9759:19;;9377:407::o;10197:399::-;10399:2;10381:21;;;10438:2;10418:18;;;10411:30;10477:34;10472:2;10457:18;;10450:62;-1:-1:-1;;;10543:2:1;10528:18;;10521:33;10586:3;10571:19;;10197:399::o;11008:607::-;-1:-1:-1;;;;;11367:15:1;;;11349:34;;11414:2;11399:18;;11392:34;;;;11457:2;11442:18;;11435:34;;;;11500:2;11485:18;;11478:34;;;;11549:15;;;11543:3;11528:19;;11521:44;11329:3;11581:19;;11574:35;;;;11298:3;11283:19;;11008:607::o;11620:306::-;11708:6;11716;11724;11777:2;11765:9;11756:7;11752:23;11748:32;11745:52;;;11793:1;11790;11783:12;11745:52;11822:9;11816:16;11806:26;;11872:2;11861:9;11857:18;11851:25;11841:35;;11916:2;11905:9;11901:18;11895:25;11885:35;;11620:306;;;;;:::o;13810:184::-;13880:6;13933:2;13921:9;13912:7;13908:23;13904:32;13901:52;;;13949:1;13946;13939:12;13901:52;-1:-1:-1;13972:16:1;;13810:184;-1:-1:-1;13810:184:1:o;14278:245::-;14345:6;14398:2;14386:9;14377:7;14373:23;14369:32;14366:52;;;14414:1;14411;14404:12;14366:52;14446:9;14440:16;14465:28;14487:5;14465:28;:::i;18234:245::-;18313:6;18321;18374:2;18362:9;18353:7;18349:23;18345:32;18342:52;;;18390:1;18387;18380:12;18342:52;-1:-1:-1;;18413:16:1;;18469:2;18454:18;;;18448:25;18413:16;;18448:25;;-1:-1:-1;18234:245:1:o;19909:401::-;20111:2;20093:21;;;20150:2;20130:18;;;20123:30;20189:34;20184:2;20169:18;;20162:62;-1:-1:-1;;;20255:2:1;20240:18;;20233:35;20300:3;20285:19;;19909:401::o;20315:399::-;20517:2;20499:21;;;20556:2;20536:18;;;20529:30;20595:34;20590:2;20575:18;;20568:62;-1:-1:-1;;;20661:2:1;20646:18;;20639:33;20704:3;20689:19;;20315:399::o;21907:128::-;21974:9;;;21995:11;;;21992:37;;;22009:18;;:::i;24106:251::-;24176:6;24229:2;24217:9;24208:7;24204:23;24200:32;24197:52;;;24245:1;24242;24235:12;24197:52;24277:9;24271:16;24296:31;24321:5;24296:31;:::i;24362:980::-;24624:4;24672:3;24661:9;24657:19;24703:6;24692:9;24685:25;24729:2;24767:6;24762:2;24751:9;24747:18;24740:34;24810:3;24805:2;24794:9;24790:18;24783:31;24834:6;24869;24863:13;24900:6;24892;24885:22;24938:3;24927:9;24923:19;24916:26;;24977:2;24969:6;24965:15;24951:29;;24998:1;25008:195;25022:6;25019:1;25016:13;25008:195;;;25087:13;;-1:-1:-1;;;;;25083:39:1;25071:52;;25178:15;;;;25143:12;;;;25119:1;25037:9;25008:195;;;-1:-1:-1;;;;;;;25259:32:1;;;;25254:2;25239:18;;25232:60;-1:-1:-1;;;25323:3:1;25308:19;25301:35;25220:3;24362:980;-1:-1:-1;;;24362:980:1:o

Swarm Source

ipfs://0b620c14b1bfdc11de51620093bc1aee303343b611311db1cf12c1f3834a79f4
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.