ETH Price: $3,268.06 (+4.64%)
Gas: 2 Gwei

Token

Zombie Kong (ZKONG)
 

Overview

Max Total Supply

13,000,000,000 ZKONG

Holders

98

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
112,499,999.100000000139091733 ZKONG

Value
$0.00
0x06d5510ab0b9efb29f93bac1384798a95a780c89
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:
ZombieKong

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/*

▒███████▒ ██ ▄█▀ ▒█████   ███▄    █   ▄████ 
▒ ▒ ▒ ▄▀░ ██▄█▒ ▒██▒  ██▒ ██ ▀█   █  ██▒ ▀█▒
░ ▒ ▄▀▒░ ▓███▄░ ▒██░  ██▒▓██  ▀█ ██▒▒██░▄▄▄░
  ▄▀▒   ░▓██ █▄ ▒██   ██░▓██▒  ▐▌██▒░▓█  ██▓
▒███████▒▒██▒ █▄░ ████▓▒░▒██░   ▓██░░▒▓███▀▒
░▒▒ ▓░▒░▒▒ ▒▒ ▓▒░ ▒░▒░▒░ ░ ▒░   ▒ ▒  ░▒   ▒ 
░░▒ ▒ ░ ▒░ ░▒ ▒░  ░ ▒ ▒░ ░ ░░   ░ ▒░  ░   ░ 
░ ░ ░ ░ ░░ ░░ ░ ░ ░ ░ ▒     ░   ░ ░ ░ ░   ░ 
  ░ ░    ░  ░       ░ ░           ░       ░ 
░                                           

    Zombie Kong (ZKONG)
    https://zkongtoken.com

*/
pragma solidity 0.8.13;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

interface ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

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

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

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

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

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

    uint256 private originalOperationsFee;
    uint256 private originalLiquidityFee;

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

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

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

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

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

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

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

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

        uint256 totalSupply = 13000000000 * 1e18;

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

        buyOperationsFee = 6;
        buyLiquidityFee = 4;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        originalOperationsFee = 5;
        originalLiquidityFee = 1;

        sellOperationsFee = 6;
        sellLiquidityFee = 4;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;

        operationsAddress1 = address(0xd8D113F14B3676cC1912dD30F89D5eA26B42bE38); //40%
        operationsAddress2 = address(0xb2d2C20c07A3b8Ebf839fA1cd3facc9E8B33F1aC); //40%
        operationsAddress3 = address(0x2E542FF16405D638B5Be4A7aEb14B05fE1Df076A); //20%

        lpReceiverAddress = address(0x243913112696b8a06E9A1Bb930c27abBC33EAb9C);

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

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

        _createInitialSupply(address(this), totalSupply); // Fair launch

        transferOwnership(newOwner);
    }

    receive() external payable {}

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

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

    function markBoughtEarly(address wallet) external onlyOwner {
        require(!boughtEarly[wallet], "Wallet is already flagged.");
        boughtEarly[wallet] = true;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // bot/sniper penalty.
            if (
                (earlyBuyPenaltyInEffect() ||
                    (amount >= maxBuyAmount - .9 ether &&
                        blockForPenaltyEnd + 8 >= block.number)) &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                !_isExcludedFromFees[to] &&
                buyTotalFees > 0
            ) {
                if (!earlyBuyPenaltyInEffect()) {
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if (!boughtEarly[to]) {
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

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

        uint256 lpAmount = (lpBalance * percent) / 10000;

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

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

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

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

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

        bool success;

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

        swapTokensForEth(contractBalance - liquidityTokens);

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

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

        ethForLiquidity -= ethForOperations;

        tokensForLiquidity = 0;
        tokensForOperations = 0;

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

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

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

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

    }

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

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

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

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

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

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

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

        sellingEnabled = true;
        emit EnabledSellingForever();
    }

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledSellingForever","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet1","type":"address"},{"indexed":true,"internalType":"address","name":"newWallet2","type":"address"},{"indexed":true,"internalType":"address","name":"newWallet3","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLaunchedBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"instantiateLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpReceiverAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"markBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"removeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_LPReceiverAddr","type":"address"}],"name":"setLPReceiverAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress1","type":"address"},{"internalType":"address","name":"_operationsAddress2","type":"address"},{"internalType":"address","name":"_operationsAddress3","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmSellingEnabled","type":"bool"}],"name":"setSellingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006010556015805463ffffffff191660019081179091556017805460ff19169091179055600b60808181526a5a6f6d626965204b6f6e6760a81b60a0908152610100604052600560c0908152645a4b4f4e4760d81b60e052919262000068916003916200088b565b5080516200007e9060049060208401906200088b565b5050506000620000936200052860201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004757833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa1580156200013a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000160919062000931565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e9919062000931565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d919062000931565b600a80546001600160a01b0319166001600160a01b03929092169182179055620002899060016200052c565b600a54620002a2906001600160a01b031660016200058f565b6b2a0159141d968317c80000006064620002be82600162000979565b620002ca91906200099b565b6006556064620002dc82600162000979565b620002e891906200099b565b6007556064620002fa82600162000979565b6200030691906200099b565b6008556127106200031982600562000979565b6200032591906200099b565b600b55600660198190556004601a8190556200034191620009be565b6018556005601b556001601c556006601e8190556004601f8190556200036791620009be565b601d55600c80546001600160a01b031990811673d8d113f14b3676cc1912dd30f89d5ea26b42be3817909155600d8054821673b2d2c20c07a3b8ebf839fa1cd3facc9e8b33f1ac179055600e80548216732e542ff16405d638b5be4a7aeb14b05fe1df076a179055600f805490911673243913112696b8a06e9a1bb930c27abbc33eab9c179055620003fb8360016200052c565b620004083060016200052c565b6200041761dead60016200052c565b600c5462000430906001600160a01b031660016200052c565b600d5462000449906001600160a01b031660016200052c565b600e5462000462906001600160a01b031660016200052c565b6009546200047b906001600160a01b031660016200052c565b62000488836001620005fb565b62000495306001620005fb565b620004a461dead6001620005fb565b600c54620004bd906001600160a01b03166001620005fb565b600d54620004d6906001600160a01b03166001620005fb565b600e54620004ef906001600160a01b03166001620005fb565b60095462000508906001600160a01b03166001620005fb565b620005143082620006a9565b6200051f836200078e565b50505062000a15565b3390565b6001600160a01b038216600081815260236020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602460205260409020805460ff1916821515179055620005bf82826200052c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200064a5760405162461bcd60e51b815260206004820181905260248201526000805160206200473783398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007015760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000641565b8060026000828254620007159190620009be565b90915550506001600160a01b0382166000908152602081905260408120805483929062000744908490620009be565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007d95760405162461bcd60e51b8152602060048201819052602482015260008051602062004737833981519152604482015260640162000641565b6001600160a01b038116620008405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000641565b6005546040516001600160a01b038084169216906000805160206200475783398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200089990620009d9565b90600052602060002090601f016020900481019282620008bd576000855562000908565b82601f10620008d857805160ff191683800117855562000908565b8280016001018555821562000908579182015b8281111562000908578251825591602001919060010190620008eb565b50620009169291506200091a565b5090565b5b808211156200091657600081556001016200091b565b6000602082840312156200094457600080fd5b81516001600160a01b03811681146200095c57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000996576200099662000963565b500290565b600082620009b957634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009d457620009d462000963565b500190565b600181811c90821680620009ee57607f821691505b60208210810362000a0f57634e487b7160e01b600052602260045260246000fd5b50919050565b613d128062000a256000396000f3fe6080604052600436106104095760003560e01c806395d89b4111610213578063d85ba06311610123578063efda1165116100ab578063f5648a4f1161007a578063f5648a4f14610be0578063f637434214610bf5578063f771cb6514610c0b578063f8b45b0514610c2c578063fb002c9714610c4257600080fd5b8063efda116514610b6a578063f11a24d314610b8a578063f202316014610ba0578063f2fde38b14610bc057600080fd5b8063e2f45605116100f2578063e2f4560514610af4578063e7b71ce214610b0a578063e884f26014610b1f578063eb472fc414610b34578063ee40166e14610b5457600080fd5b8063d85ba06314610a58578063daf51cd114610a6e578063dc3f0d0f14610a8e578063dd62ed3e14610aae57600080fd5b8063b16d78cf116101a6578063c024666811610175578063c0246668146109be578063c18bc195146109de578063c80f591a146109fe578063c876d0b914610a1e578063d257b34f14610a3857600080fd5b8063b16d78cf1461093a578063b62496f51461095a578063b822d5661461098a578063bbc0c7421461099f57600080fd5b8063a2cb8aac116101e2578063a2cb8aac146108c4578063a457c2d7146108e4578063a62068ce14610904578063a9059cbb1461091a57600080fd5b806395d89b41146108585780639a5bd2dd1461086d5780639a7a23d61461088f578063a28e86d3146108af57600080fd5b806358a6d53111610319578063751039fc116102a15780638366e79a116102705780638366e79a146107b457806385ecfd28146107d457806388e765ff146108045780638da5cb5b1461081a5780638fa037c31461083857600080fd5b8063751039fc1461073f5780637571336a146107545780637e926b4b1461077457806382aa7c681461079457600080fd5b806366d602ae116102e857806366d602ae146106bd5780636a486a8e146106d35780636b0a894c146106e95780636ddd1713146106ff57806370a082311461071f57600080fd5b806358a6d531146106505780635a139dd4146106675780635bb988c91461067d57806366ca9b831461069d57600080fd5b80631a8145bb1161039c578063313ce5671161036b578063313ce567146105c457806339509351146105e0578063452ed4f1146106005780634a62bb65146106205780634f77f6c01461063a57600080fd5b80631a8145bb1461054e5780631d5915f31461056457806323b872dd146105845780632be32b61146105a457600080fd5b80630a0f1c1d116103d85780630a0f1c1d146104ca5780630dbd397c146104ea57806310d5de531461050957806318160ddd1461053957600080fd5b806302dbd8f81461041557806306fdde03146104375780630758d92414610462578063095ea7b31461049a57600080fd5b3661041057005b600080fd5b34801561042157600080fd5b506104356104303660046137c0565b610c58565b005b34801561044357600080fd5b5061044c610cf8565b60405161045991906137e2565b60405180910390f35b34801561046e57600080fd5b50600954610482906001600160a01b031681565b6040516001600160a01b039091168152602001610459565b3480156104a657600080fd5b506104ba6104b536600461384f565b610d8a565b6040519015158152602001610459565b3480156104d657600080fd5b50600c54610482906001600160a01b031681565b3480156104f657600080fd5b506010545b604051908152602001610459565b34801561051557600080fd5b506104ba61052436600461387b565b60236020526000908152604090205460ff1681565b34801561054557600080fd5b506002546104fb565b34801561055a57600080fd5b506104fb60215481565b34801561057057600080fd5b5061043561057f36600461387b565b610da0565b34801561059057600080fd5b506104ba61059f36600461389f565b610e57565b3480156105b057600080fd5b506104356105bf3660046138e0565b610f01565b3480156105d057600080fd5b5060405160128152602001610459565b3480156105ec57600080fd5b506104ba6105fb36600461384f565b61100f565b34801561060c57600080fd5b50600a54610482906001600160a01b031681565b34801561062c57600080fd5b506015546104ba9060ff1681565b34801561064657600080fd5b506104fb601e5481565b34801561065c57600080fd5b5060115443106104ba565b34801561067357600080fd5b506104fb60195481565b34801561068957600080fd5b5061043561069836600461387b565b61104b565b3480156106a957600080fd5b506104356106b83660046137c0565b6110fe565b3480156106c957600080fd5b506104fb60075481565b3480156106df57600080fd5b506104fb601d5481565b3480156106f557600080fd5b506104fb60145481565b34801561070b57600080fd5b506015546104ba9062010000900460ff1681565b34801561072b57600080fd5b506104fb61073a36600461387b565b611191565b34801561074b57600080fd5b506104356111ac565b34801561076057600080fd5b5061043561076f366004613907565b6111e2565b34801561078057600080fd5b5061043561078f366004613940565b6112aa565b3480156107a057600080fd5b506104356107af3660046138e0565b61136c565b3480156107c057600080fd5b506104ba6107cf36600461395d565b6114a0565b3480156107e057600080fd5b506104ba6107ef36600461387b565b60126020526000908152604090205460ff1681565b34801561081057600080fd5b506104fb60065481565b34801561082657600080fd5b506005546001600160a01b0316610482565b34801561084457600080fd5b50600e54610482906001600160a01b031681565b34801561086457600080fd5b5061044c6116da565b34801561087957600080fd5b506108826116e9565b60405161045991906139cf565b34801561089b57600080fd5b506104356108aa366004613907565b61174a565b3480156108bb57600080fd5b5061043561183e565b3480156108d057600080fd5b50600f54610482906001600160a01b031681565b3480156108f057600080fd5b506104ba6108ff36600461384f565b611877565b34801561091057600080fd5b506104fb60115481565b34801561092657600080fd5b506104ba61093536600461384f565b611910565b34801561094657600080fd5b50610435610955366004613940565b61191d565b34801561096657600080fd5b506104ba61097536600461387b565b60246020526000908152604090205460ff1681565b34801561099657600080fd5b50610435611a2d565b3480156109ab57600080fd5b506015546104ba90610100900460ff1681565b3480156109ca57600080fd5b506104356109d9366004613907565b611c2b565b3480156109ea57600080fd5b506104356109f93660046138e0565b611cb4565b348015610a0a57600080fd5b50610435610a1936600461387b565b611dbb565b348015610a2a57600080fd5b506017546104ba9060ff1681565b348015610a4457600080fd5b50610435610a533660046138e0565b611e07565b348015610a6457600080fd5b506104fb60185481565b348015610a7a57600080fd5b50610435610a893660046139e2565b611f4f565b348015610a9a57600080fd5b50610435610aa93660046138e0565b612076565b348015610aba57600080fd5b506104fb610ac936600461395d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b0057600080fd5b506104fb600b5481565b348015610b1657600080fd5b5061043561217e565b348015610b2b57600080fd5b506104356121e2565b348015610b4057600080fd5b50610482610b4f3660046138e0565b612218565b348015610b6057600080fd5b506104fb60105481565b348015610b7657600080fd5b50610435610b853660046138e0565b612242565b348015610b9657600080fd5b506104fb601a5481565b348015610bac57600080fd5b50600d54610482906001600160a01b031681565b348015610bcc57600080fd5b50610435610bdb36600461387b565b612443565b348015610bec57600080fd5b5061043561252e565b348015610c0157600080fd5b506104fb601f5481565b348015610c1757600080fd5b506015546104ba906301000000900460ff1681565b348015610c3857600080fd5b506104fb60085481565b348015610c4e57600080fd5b506104fb60205481565b6005546001600160a01b03163314610c8b5760405162461bcd60e51b8152600401610c8290613a2d565b60405180910390fd5b601e829055601f819055610c9f8183613a78565b601d81905560051015610cf45760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610c82565b5050565b606060038054610d0790613a90565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3390613a90565b8015610d805780601f10610d5557610100808354040283529160200191610d80565b820191906000526020600020905b815481529060010190602001808311610d6357829003601f168201915b5050505050905090565b6000610d973384846125a5565b50600192915050565b6005546001600160a01b03163314610dca5760405162461bcd60e51b8152600401610c8290613a2d565b6001600160a01b03811660009081526012602052604090205460ff1615610e335760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610c82565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6000610e648484846126c9565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ee95760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c82565b610ef685338584036125a5565b506001949350505050565b6005546001600160a01b03163314610f2b5760405162461bcd60e51b8152600401610c8290613a2d565b670de0b6b3a7640000612710610f4060025490565b610f4b906001613aca565b610f559190613ae9565b610f5f9190613ae9565b811015610fc15760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610c82565b610fd381670de0b6b3a7640000613aca565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d97918590611046908690613a78565b6125a5565b6005546001600160a01b031633146110755760405162461bcd60e51b8152600401610c8290613a2d565b6001600160a01b03811660009081526012602052604090205460ff166110dd5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610c82565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6005546001600160a01b031633146111285760405162461bcd60e51b8152600401610c8290613a2d565b6019829055601a81905561113c8183613a78565b601881905560051015610cf45760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610c82565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146111d65760405162461bcd60e51b8152600401610c8290613a2d565b6015805460ff19169055565b6005546001600160a01b0316331461120c5760405162461bcd60e51b8152600401610c8290613a2d565b8061127f57600a546001600160a01b039081169083160361127f5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c82565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112d45760405162461bcd60e51b8152600401610c8290613a2d565b806113215760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610c82565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b031633146113965760405162461bcd60e51b8152600401610c8290613a2d565b601554610100900460ff16156113ee5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c82565b600a81111561144f5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610c82565b6015805462ffff00191662010100179055436010819055611471908290613a78565b6011556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146114cd5760405162461bcd60e51b8152600401610c8290613a2d565b6001600160a01b0383166115235760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c82565b6001600160a01b038316301415806115435750601554610100900460ff16155b6115ac5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610c82565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116179190613b0b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168e9190613b24565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610d0790613a90565b60606013805480602002602001604051908101604052809291908181526020018280548015610d8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611723575050505050905090565b6005546001600160a01b031633146117745760405162461bcd60e51b8152600401610c8290613a2d565b600a546001600160a01b03908116908316036117f85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c82565b611802828261319c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118685760405162461bcd60e51b8152600401610c8290613a2d565b6015805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c82565b61190633858584036125a5565b5060019392505050565b6000610d973384846126c9565b6005546001600160a01b031633146119475760405162461bcd60e51b8152600401610c8290613a2d565b806119945760405162461bcd60e51b815260206004820152601860248201527f436f6e6669726d2073656c6c696e6720656e61626c65642100000000000000006044820152606401610c82565b6015546301000000900460ff16156119ee5760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c82565b6015805463ff000000191663010000001790556040517f9392259d24d71f51fdce621059e3218b1271b2a2781a380c58fff224548c193c90600090a150565b6005546001600160a01b03163314611a575760405162461bcd60e51b8152600401610c8290613a2d565b601554610100900460ff1615611ac35760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610c82565b60004711611b1f5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610c82565b6000611b2a30611191565b11611b865760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610c82565b600954611ba19030906001600160a01b031661104682611191565b6009546001600160a01b031663f305d7194730611bbd81611191565b60008030426040518863ffffffff1660e01b8152600401611be396959493929190613b41565b60606040518083038185885af1158015611c01573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c269190613b7c565b505050565b6005546001600160a01b03163314611c555760405162461bcd60e51b8152600401610c8290613a2d565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611cde5760405162461bcd60e51b8152600401610c8290613a2d565b670de0b6b3a76400006103e8611cf360025490565b611cfe906005613aca565b611d089190613ae9565b611d129190613ae9565b811015611d745760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610c82565b611d8681670de0b6b3a7640000613aca565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611004565b6005546001600160a01b03163314611de55760405162461bcd60e51b8152600401610c8290613a2d565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611e315760405162461bcd60e51b8152600401610c8290613a2d565b620186a0611e3e60025490565b611e49906001613aca565b611e539190613ae9565b811015611ec05760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c82565b6064611ecb60025490565b611ed6906001613aca565b611ee09190613ae9565b811115611f4a5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610c82565b600b55565b6005546001600160a01b03163314611f795760405162461bcd60e51b8152600401610c8290613a2d565b6001600160a01b03831615801590611f9957506001600160a01b03821615155b8015611fad57506001600160a01b03811615155b6120085760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c82565b600c80546001600160a01b03199081166001600160a01b03868116918217909355600d80548316868516908117909155600e80549093169385169384179092556040517ff2fb7c89c7a2eaa5411a2b32f2c269abe818edc1c5faaaf6b40fc649025e289090600090a4505050565b6005546001600160a01b031633146120a05760405162461bcd60e51b8152600401610c8290613a2d565b670de0b6b3a76400006127106120b560025490565b6120c0906001613aca565b6120ca9190613ae9565b6120d49190613ae9565b8110156121375760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e30312560a81b6064820152608401610c82565b61214981670de0b6b3a7640000613aca565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611004565b6005546001600160a01b031633146121a85760405162461bcd60e51b8152600401610c8290613a2d565b601b546019819055601c54601a8190556121c191613a78565b601855601b54601e819055601c54601f8190556121dd91613a78565b601d55565b6005546001600160a01b0316331461220c5760405162461bcd60e51b8152600401610c8290613a2d565b6017805460ff19169055565b6013818154811061222857600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b0316331461226c5760405162461bcd60e51b8152600401610c8290613a2d565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156122b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d99190613b0b565b90506000811161232b5760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610c82565b600061271061233a8484613aca565b6123449190613ae9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af115801561239b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bf9190613b24565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906123fa9030908590600190819033904290600401613b41565b60408051808303816000875af1158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190613baa565b5050505050565b6005546001600160a01b0316331461246d5760405162461bcd60e51b8152600401610c8290613a2d565b6001600160a01b0381166124d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c82565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146125585760405162461bcd60e51b8152600401610c8290613a2d565b604051600090339047908381818185875af1925050503d806000811461259a576040519150601f19603f3d011682016040523d82523d6000602084013e61259f565b606091505b50505050565b6001600160a01b0383166126075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c82565b6001600160a01b0382166126685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c82565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166126ef5760405162461bcd60e51b8152600401610c8290613bce565b6001600160a01b0382166127155760405162461bcd60e51b8152600401610c8290613c13565b600081116127655760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c82565b601554610100900460ff166127f8576001600160a01b03831660009081526022602052604090205460ff16806127b357506001600160a01b03821660009081526022602052604090205460ff165b6127f85760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c82565b60115443101580156128115750601554610100900460ff165b156128e1576001600160a01b03831660009081526012602052604090205460ff16158061284b57506005546001600160a01b038381169116145b8061286057506001600160a01b03821661dead145b6128e15760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c82565b60155460ff1615612d0b576005546001600160a01b0384811691161480159061291857506005546001600160a01b03838116911614155b801561292f57506001600160a01b03821661dead14155b801561295457506001600160a01b03831660009081526022602052604090205460ff16155b801561297957506001600160a01b03821660009081526022602052604090205460ff16155b15612d0b5760175460ff1615612a92576009546001600160a01b038381169116148015906129b55750600a546001600160a01b03838116911614155b15612a92576129c5600243613c56565b32600090815260166020526040902054108015612a0357506129e8600243613c56565b6001600160a01b038316600090815260166020526040902054105b612a6d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c82565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526024602052604090205460ff168015612ad357506001600160a01b03821660009081526023602052604090205460ff16155b15612b9a57600654811115612b3b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c82565b600854612b4783611191565b612b519083613a78565b1115612b955760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610c82565b612d0b565b6001600160a01b03821660009081526024602052604090205460ff168015612bdb57506001600160a01b03831660009081526023602052604090205460ff16155b15612c91576015546301000000900460ff16612c2c5760405162461bcd60e51b815260206004820152601060248201526f14d95b1b1a5b99c8191a5cd8589b195960821b6044820152606401610c82565b600754811115612b955760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c82565b6001600160a01b03821660009081526023602052604090205460ff16612d0b57600854612cbd83611191565b612cc79083613a78565b1115612d0b5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610c82565b6000612d1630611191565b600b5490915081108015908190612d35575060155462010000900460ff165b8015612d4b5750600a54600160a01b900460ff16155b8015612d6f57506001600160a01b03841660009081526024602052604090205460ff165b15612d9d57600a805460ff60a01b1916600160a01b179055612d8f6131ca565b600a805460ff60a01b191690555b6001600160a01b03851660009081526022602052604090205460019060ff1680612ddf57506001600160a01b03851660009081526022602052604090205460ff165b15612de8575060005b6000811561318857601154431080612e2e5750670c7d713b49da0000600654612e119190613c56565b8510158015612e2e5750436011546008612e2b9190613a78565b10155b8015612e5257506001600160a01b03871660009081526024602052604090205460ff165b8015612e7757506001600160a01b03861660009081526024602052604090205460ff16155b8015612e9c57506001600160a01b03861660009081526022602052604090205460ff16155b8015612eaa57506000601854115b15613031576011544310612ed157600160066000828254612ecb9190613c56565b90915550505b6001600160a01b03861660009081526012602052604090205460ff16612fb1576001600160a01b0386166000908152601260205260408120805460ff191660019081179091556014805491929091612f2a908490613a78565b9091555050601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612fbe866063613aca565b612fc89190613ae9565b9050601854601a5482612fdb9190613aca565b612fe59190613ae9565b60216000828254612ff69190613a78565b909155505060185460195461300b9083613aca565b6130159190613ae9565b602060008282546130269190613a78565b9091555061316a9050565b6001600160a01b03861660009081526024602052604090205460ff16801561305b57506000601d54115b156130bd576064601d54866130709190613aca565b61307a9190613ae9565b9050601d54601f548261308d9190613aca565b6130979190613ae9565b602160008282546130a89190613a78565b9091555050601d54601e5461300b9083613aca565b6001600160a01b03871660009081526024602052604090205460ff1680156130e757506000601854115b1561316a576064601854866130fc9190613aca565b6131069190613ae9565b9050601854601a54826131199190613aca565b6131239190613ae9565b602160008282546131349190613a78565b90915550506018546019546131499083613aca565b6131539190613ae9565b602060008282546131649190613a78565b90915550505b801561317b5761317b873083613413565b6131858186613c56565b94505b613193878787613413565b50505050505050565b6001600160a01b0382166000908152602460205260409020805460ff19168215151790556118028282613568565b60006131d530611191565b905060006020546021546131e99190613a78565b90508115806131f6575080155b156131ff575050565b600b5461320d90600a613aca565b82111561322557600b5461322290600a613aca565b91505b600080600283602154866132399190613aca565b6132439190613ae9565b61324d9190613ae9565b905061326161325c8286613c56565b6135cb565b6021544790819060009061327790600290613ae9565b6132819087613c56565b60205461328e9085613aca565b6132989190613ae9565b90506132a48183613c56565b60006021819055602055915083158015906132bf5750600082115b156132ce576132ce8483613725565b600c5447906001600160a01b031660646132e9836028613aca565b6132f39190613ae9565b604051600081818185875af1925050503d806000811461332f576040519150601f19603f3d011682016040523d82523d6000602084013e613334565b606091505b5050600d549096506001600160a01b03166064613352836028613aca565b61335c9190613ae9565b604051600081818185875af1925050503d8060008114613398576040519150601f19603f3d011682016040523d82523d6000602084013e61339d565b606091505b5050600e549096506001600160a01b031660646133bb836014613aca565b6133c59190613ae9565b604051600081818185875af1925050503d8060008114613401576040519150601f19603f3d011682016040523d82523d6000602084013e613406565b606091505b5050505050505050505050565b6001600160a01b0383166134395760405162461bcd60e51b8152600401610c8290613bce565b6001600160a01b03821661345f5760405162461bcd60e51b8152600401610c8290613c13565b6001600160a01b038316600090815260208190526040902054818110156134d75760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c82565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061350e908490613a78565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161355a91815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260236020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061360057613600613c6d565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367d9190613c83565b8160018151811061369057613690613c6d565b6001600160a01b0392831660209182029290920101526009546136b691309116846125a5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906136ef908590600090869030904290600401613ca0565b600060405180830381600087803b15801561370957600080fd5b505af115801561371d573d6000803e3d6000fd5b505050505050565b60095461373d9030906001600160a01b0316846125a5565b600954600f5460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261377d9230928992600092839216904290600401613b41565b60606040518083038185885af115801561379b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061243c9190613b7c565b600080604083850312156137d357600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561380f578581018301518582016040015282016137f3565b81811115613821576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461384c57600080fd5b50565b6000806040838503121561386257600080fd5b823561386d81613837565b946020939093013593505050565b60006020828403121561388d57600080fd5b813561389881613837565b9392505050565b6000806000606084860312156138b457600080fd5b83356138bf81613837565b925060208401356138cf81613837565b929592945050506040919091013590565b6000602082840312156138f257600080fd5b5035919050565b801515811461384c57600080fd5b6000806040838503121561391a57600080fd5b823561392581613837565b91506020830135613935816138f9565b809150509250929050565b60006020828403121561395257600080fd5b8135613898816138f9565b6000806040838503121561397057600080fd5b823561397b81613837565b9150602083013561393581613837565b600081518084526020808501945080840160005b838110156139c45781516001600160a01b03168752958201959082019060010161399f565b509495945050505050565b602081526000613898602083018461398b565b6000806000606084860312156139f757600080fd5b8335613a0281613837565b92506020840135613a1281613837565b91506040840135613a2281613837565b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613a8b57613a8b613a62565b500190565b600181811c90821680613aa457607f821691505b602082108103613ac457634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615613ae457613ae4613a62565b500290565b600082613b0657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613b1d57600080fd5b5051919050565b600060208284031215613b3657600080fd5b8151613898816138f9565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613b9157600080fd5b8351925060208401519150604084015190509250925092565b60008060408385031215613bbd57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613c6857613c68613a62565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613c9557600080fd5b815161389881613837565b85815284602082015260a060408201526000613cbf60a083018661398b565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122043f7bd628ccb31289b7018ab177f772d46b6eef2241e62033fc0999c5e189f4564736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104095760003560e01c806395d89b4111610213578063d85ba06311610123578063efda1165116100ab578063f5648a4f1161007a578063f5648a4f14610be0578063f637434214610bf5578063f771cb6514610c0b578063f8b45b0514610c2c578063fb002c9714610c4257600080fd5b8063efda116514610b6a578063f11a24d314610b8a578063f202316014610ba0578063f2fde38b14610bc057600080fd5b8063e2f45605116100f2578063e2f4560514610af4578063e7b71ce214610b0a578063e884f26014610b1f578063eb472fc414610b34578063ee40166e14610b5457600080fd5b8063d85ba06314610a58578063daf51cd114610a6e578063dc3f0d0f14610a8e578063dd62ed3e14610aae57600080fd5b8063b16d78cf116101a6578063c024666811610175578063c0246668146109be578063c18bc195146109de578063c80f591a146109fe578063c876d0b914610a1e578063d257b34f14610a3857600080fd5b8063b16d78cf1461093a578063b62496f51461095a578063b822d5661461098a578063bbc0c7421461099f57600080fd5b8063a2cb8aac116101e2578063a2cb8aac146108c4578063a457c2d7146108e4578063a62068ce14610904578063a9059cbb1461091a57600080fd5b806395d89b41146108585780639a5bd2dd1461086d5780639a7a23d61461088f578063a28e86d3146108af57600080fd5b806358a6d53111610319578063751039fc116102a15780638366e79a116102705780638366e79a146107b457806385ecfd28146107d457806388e765ff146108045780638da5cb5b1461081a5780638fa037c31461083857600080fd5b8063751039fc1461073f5780637571336a146107545780637e926b4b1461077457806382aa7c681461079457600080fd5b806366d602ae116102e857806366d602ae146106bd5780636a486a8e146106d35780636b0a894c146106e95780636ddd1713146106ff57806370a082311461071f57600080fd5b806358a6d531146106505780635a139dd4146106675780635bb988c91461067d57806366ca9b831461069d57600080fd5b80631a8145bb1161039c578063313ce5671161036b578063313ce567146105c457806339509351146105e0578063452ed4f1146106005780634a62bb65146106205780634f77f6c01461063a57600080fd5b80631a8145bb1461054e5780631d5915f31461056457806323b872dd146105845780632be32b61146105a457600080fd5b80630a0f1c1d116103d85780630a0f1c1d146104ca5780630dbd397c146104ea57806310d5de531461050957806318160ddd1461053957600080fd5b806302dbd8f81461041557806306fdde03146104375780630758d92414610462578063095ea7b31461049a57600080fd5b3661041057005b600080fd5b34801561042157600080fd5b506104356104303660046137c0565b610c58565b005b34801561044357600080fd5b5061044c610cf8565b60405161045991906137e2565b60405180910390f35b34801561046e57600080fd5b50600954610482906001600160a01b031681565b6040516001600160a01b039091168152602001610459565b3480156104a657600080fd5b506104ba6104b536600461384f565b610d8a565b6040519015158152602001610459565b3480156104d657600080fd5b50600c54610482906001600160a01b031681565b3480156104f657600080fd5b506010545b604051908152602001610459565b34801561051557600080fd5b506104ba61052436600461387b565b60236020526000908152604090205460ff1681565b34801561054557600080fd5b506002546104fb565b34801561055a57600080fd5b506104fb60215481565b34801561057057600080fd5b5061043561057f36600461387b565b610da0565b34801561059057600080fd5b506104ba61059f36600461389f565b610e57565b3480156105b057600080fd5b506104356105bf3660046138e0565b610f01565b3480156105d057600080fd5b5060405160128152602001610459565b3480156105ec57600080fd5b506104ba6105fb36600461384f565b61100f565b34801561060c57600080fd5b50600a54610482906001600160a01b031681565b34801561062c57600080fd5b506015546104ba9060ff1681565b34801561064657600080fd5b506104fb601e5481565b34801561065c57600080fd5b5060115443106104ba565b34801561067357600080fd5b506104fb60195481565b34801561068957600080fd5b5061043561069836600461387b565b61104b565b3480156106a957600080fd5b506104356106b83660046137c0565b6110fe565b3480156106c957600080fd5b506104fb60075481565b3480156106df57600080fd5b506104fb601d5481565b3480156106f557600080fd5b506104fb60145481565b34801561070b57600080fd5b506015546104ba9062010000900460ff1681565b34801561072b57600080fd5b506104fb61073a36600461387b565b611191565b34801561074b57600080fd5b506104356111ac565b34801561076057600080fd5b5061043561076f366004613907565b6111e2565b34801561078057600080fd5b5061043561078f366004613940565b6112aa565b3480156107a057600080fd5b506104356107af3660046138e0565b61136c565b3480156107c057600080fd5b506104ba6107cf36600461395d565b6114a0565b3480156107e057600080fd5b506104ba6107ef36600461387b565b60126020526000908152604090205460ff1681565b34801561081057600080fd5b506104fb60065481565b34801561082657600080fd5b506005546001600160a01b0316610482565b34801561084457600080fd5b50600e54610482906001600160a01b031681565b34801561086457600080fd5b5061044c6116da565b34801561087957600080fd5b506108826116e9565b60405161045991906139cf565b34801561089b57600080fd5b506104356108aa366004613907565b61174a565b3480156108bb57600080fd5b5061043561183e565b3480156108d057600080fd5b50600f54610482906001600160a01b031681565b3480156108f057600080fd5b506104ba6108ff36600461384f565b611877565b34801561091057600080fd5b506104fb60115481565b34801561092657600080fd5b506104ba61093536600461384f565b611910565b34801561094657600080fd5b50610435610955366004613940565b61191d565b34801561096657600080fd5b506104ba61097536600461387b565b60246020526000908152604090205460ff1681565b34801561099657600080fd5b50610435611a2d565b3480156109ab57600080fd5b506015546104ba90610100900460ff1681565b3480156109ca57600080fd5b506104356109d9366004613907565b611c2b565b3480156109ea57600080fd5b506104356109f93660046138e0565b611cb4565b348015610a0a57600080fd5b50610435610a1936600461387b565b611dbb565b348015610a2a57600080fd5b506017546104ba9060ff1681565b348015610a4457600080fd5b50610435610a533660046138e0565b611e07565b348015610a6457600080fd5b506104fb60185481565b348015610a7a57600080fd5b50610435610a893660046139e2565b611f4f565b348015610a9a57600080fd5b50610435610aa93660046138e0565b612076565b348015610aba57600080fd5b506104fb610ac936600461395d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b0057600080fd5b506104fb600b5481565b348015610b1657600080fd5b5061043561217e565b348015610b2b57600080fd5b506104356121e2565b348015610b4057600080fd5b50610482610b4f3660046138e0565b612218565b348015610b6057600080fd5b506104fb60105481565b348015610b7657600080fd5b50610435610b853660046138e0565b612242565b348015610b9657600080fd5b506104fb601a5481565b348015610bac57600080fd5b50600d54610482906001600160a01b031681565b348015610bcc57600080fd5b50610435610bdb36600461387b565b612443565b348015610bec57600080fd5b5061043561252e565b348015610c0157600080fd5b506104fb601f5481565b348015610c1757600080fd5b506015546104ba906301000000900460ff1681565b348015610c3857600080fd5b506104fb60085481565b348015610c4e57600080fd5b506104fb60205481565b6005546001600160a01b03163314610c8b5760405162461bcd60e51b8152600401610c8290613a2d565b60405180910390fd5b601e829055601f819055610c9f8183613a78565b601d81905560051015610cf45760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610c82565b5050565b606060038054610d0790613a90565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3390613a90565b8015610d805780601f10610d5557610100808354040283529160200191610d80565b820191906000526020600020905b815481529060010190602001808311610d6357829003601f168201915b5050505050905090565b6000610d973384846125a5565b50600192915050565b6005546001600160a01b03163314610dca5760405162461bcd60e51b8152600401610c8290613a2d565b6001600160a01b03811660009081526012602052604090205460ff1615610e335760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610c82565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6000610e648484846126c9565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ee95760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c82565b610ef685338584036125a5565b506001949350505050565b6005546001600160a01b03163314610f2b5760405162461bcd60e51b8152600401610c8290613a2d565b670de0b6b3a7640000612710610f4060025490565b610f4b906001613aca565b610f559190613ae9565b610f5f9190613ae9565b811015610fc15760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610c82565b610fd381670de0b6b3a7640000613aca565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d97918590611046908690613a78565b6125a5565b6005546001600160a01b031633146110755760405162461bcd60e51b8152600401610c8290613a2d565b6001600160a01b03811660009081526012602052604090205460ff166110dd5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610c82565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6005546001600160a01b031633146111285760405162461bcd60e51b8152600401610c8290613a2d565b6019829055601a81905561113c8183613a78565b601881905560051015610cf45760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610c82565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146111d65760405162461bcd60e51b8152600401610c8290613a2d565b6015805460ff19169055565b6005546001600160a01b0316331461120c5760405162461bcd60e51b8152600401610c8290613a2d565b8061127f57600a546001600160a01b039081169083160361127f5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c82565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112d45760405162461bcd60e51b8152600401610c8290613a2d565b806113215760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610c82565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b031633146113965760405162461bcd60e51b8152600401610c8290613a2d565b601554610100900460ff16156113ee5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c82565b600a81111561144f5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610c82565b6015805462ffff00191662010100179055436010819055611471908290613a78565b6011556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146114cd5760405162461bcd60e51b8152600401610c8290613a2d565b6001600160a01b0383166115235760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c82565b6001600160a01b038316301415806115435750601554610100900460ff16155b6115ac5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610c82565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116179190613b0b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168e9190613b24565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610d0790613a90565b60606013805480602002602001604051908101604052809291908181526020018280548015610d8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611723575050505050905090565b6005546001600160a01b031633146117745760405162461bcd60e51b8152600401610c8290613a2d565b600a546001600160a01b03908116908316036117f85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c82565b611802828261319c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118685760405162461bcd60e51b8152600401610c8290613a2d565b6015805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c82565b61190633858584036125a5565b5060019392505050565b6000610d973384846126c9565b6005546001600160a01b031633146119475760405162461bcd60e51b8152600401610c8290613a2d565b806119945760405162461bcd60e51b815260206004820152601860248201527f436f6e6669726d2073656c6c696e6720656e61626c65642100000000000000006044820152606401610c82565b6015546301000000900460ff16156119ee5760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c82565b6015805463ff000000191663010000001790556040517f9392259d24d71f51fdce621059e3218b1271b2a2781a380c58fff224548c193c90600090a150565b6005546001600160a01b03163314611a575760405162461bcd60e51b8152600401610c8290613a2d565b601554610100900460ff1615611ac35760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610c82565b60004711611b1f5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610c82565b6000611b2a30611191565b11611b865760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610c82565b600954611ba19030906001600160a01b031661104682611191565b6009546001600160a01b031663f305d7194730611bbd81611191565b60008030426040518863ffffffff1660e01b8152600401611be396959493929190613b41565b60606040518083038185885af1158015611c01573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c269190613b7c565b505050565b6005546001600160a01b03163314611c555760405162461bcd60e51b8152600401610c8290613a2d565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611cde5760405162461bcd60e51b8152600401610c8290613a2d565b670de0b6b3a76400006103e8611cf360025490565b611cfe906005613aca565b611d089190613ae9565b611d129190613ae9565b811015611d745760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610c82565b611d8681670de0b6b3a7640000613aca565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611004565b6005546001600160a01b03163314611de55760405162461bcd60e51b8152600401610c8290613a2d565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611e315760405162461bcd60e51b8152600401610c8290613a2d565b620186a0611e3e60025490565b611e49906001613aca565b611e539190613ae9565b811015611ec05760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c82565b6064611ecb60025490565b611ed6906001613aca565b611ee09190613ae9565b811115611f4a5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610c82565b600b55565b6005546001600160a01b03163314611f795760405162461bcd60e51b8152600401610c8290613a2d565b6001600160a01b03831615801590611f9957506001600160a01b03821615155b8015611fad57506001600160a01b03811615155b6120085760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c82565b600c80546001600160a01b03199081166001600160a01b03868116918217909355600d80548316868516908117909155600e80549093169385169384179092556040517ff2fb7c89c7a2eaa5411a2b32f2c269abe818edc1c5faaaf6b40fc649025e289090600090a4505050565b6005546001600160a01b031633146120a05760405162461bcd60e51b8152600401610c8290613a2d565b670de0b6b3a76400006127106120b560025490565b6120c0906001613aca565b6120ca9190613ae9565b6120d49190613ae9565b8110156121375760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e30312560a81b6064820152608401610c82565b61214981670de0b6b3a7640000613aca565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611004565b6005546001600160a01b031633146121a85760405162461bcd60e51b8152600401610c8290613a2d565b601b546019819055601c54601a8190556121c191613a78565b601855601b54601e819055601c54601f8190556121dd91613a78565b601d55565b6005546001600160a01b0316331461220c5760405162461bcd60e51b8152600401610c8290613a2d565b6017805460ff19169055565b6013818154811061222857600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b0316331461226c5760405162461bcd60e51b8152600401610c8290613a2d565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156122b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d99190613b0b565b90506000811161232b5760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610c82565b600061271061233a8484613aca565b6123449190613ae9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af115801561239b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bf9190613b24565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906123fa9030908590600190819033904290600401613b41565b60408051808303816000875af1158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190613baa565b5050505050565b6005546001600160a01b0316331461246d5760405162461bcd60e51b8152600401610c8290613a2d565b6001600160a01b0381166124d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c82565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146125585760405162461bcd60e51b8152600401610c8290613a2d565b604051600090339047908381818185875af1925050503d806000811461259a576040519150601f19603f3d011682016040523d82523d6000602084013e61259f565b606091505b50505050565b6001600160a01b0383166126075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c82565b6001600160a01b0382166126685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c82565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166126ef5760405162461bcd60e51b8152600401610c8290613bce565b6001600160a01b0382166127155760405162461bcd60e51b8152600401610c8290613c13565b600081116127655760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c82565b601554610100900460ff166127f8576001600160a01b03831660009081526022602052604090205460ff16806127b357506001600160a01b03821660009081526022602052604090205460ff165b6127f85760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c82565b60115443101580156128115750601554610100900460ff165b156128e1576001600160a01b03831660009081526012602052604090205460ff16158061284b57506005546001600160a01b038381169116145b8061286057506001600160a01b03821661dead145b6128e15760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c82565b60155460ff1615612d0b576005546001600160a01b0384811691161480159061291857506005546001600160a01b03838116911614155b801561292f57506001600160a01b03821661dead14155b801561295457506001600160a01b03831660009081526022602052604090205460ff16155b801561297957506001600160a01b03821660009081526022602052604090205460ff16155b15612d0b5760175460ff1615612a92576009546001600160a01b038381169116148015906129b55750600a546001600160a01b03838116911614155b15612a92576129c5600243613c56565b32600090815260166020526040902054108015612a0357506129e8600243613c56565b6001600160a01b038316600090815260166020526040902054105b612a6d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c82565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526024602052604090205460ff168015612ad357506001600160a01b03821660009081526023602052604090205460ff16155b15612b9a57600654811115612b3b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c82565b600854612b4783611191565b612b519083613a78565b1115612b955760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610c82565b612d0b565b6001600160a01b03821660009081526024602052604090205460ff168015612bdb57506001600160a01b03831660009081526023602052604090205460ff16155b15612c91576015546301000000900460ff16612c2c5760405162461bcd60e51b815260206004820152601060248201526f14d95b1b1a5b99c8191a5cd8589b195960821b6044820152606401610c82565b600754811115612b955760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c82565b6001600160a01b03821660009081526023602052604090205460ff16612d0b57600854612cbd83611191565b612cc79083613a78565b1115612d0b5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610c82565b6000612d1630611191565b600b5490915081108015908190612d35575060155462010000900460ff165b8015612d4b5750600a54600160a01b900460ff16155b8015612d6f57506001600160a01b03841660009081526024602052604090205460ff165b15612d9d57600a805460ff60a01b1916600160a01b179055612d8f6131ca565b600a805460ff60a01b191690555b6001600160a01b03851660009081526022602052604090205460019060ff1680612ddf57506001600160a01b03851660009081526022602052604090205460ff165b15612de8575060005b6000811561318857601154431080612e2e5750670c7d713b49da0000600654612e119190613c56565b8510158015612e2e5750436011546008612e2b9190613a78565b10155b8015612e5257506001600160a01b03871660009081526024602052604090205460ff165b8015612e7757506001600160a01b03861660009081526024602052604090205460ff16155b8015612e9c57506001600160a01b03861660009081526022602052604090205460ff16155b8015612eaa57506000601854115b15613031576011544310612ed157600160066000828254612ecb9190613c56565b90915550505b6001600160a01b03861660009081526012602052604090205460ff16612fb1576001600160a01b0386166000908152601260205260408120805460ff191660019081179091556014805491929091612f2a908490613a78565b9091555050601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612fbe866063613aca565b612fc89190613ae9565b9050601854601a5482612fdb9190613aca565b612fe59190613ae9565b60216000828254612ff69190613a78565b909155505060185460195461300b9083613aca565b6130159190613ae9565b602060008282546130269190613a78565b9091555061316a9050565b6001600160a01b03861660009081526024602052604090205460ff16801561305b57506000601d54115b156130bd576064601d54866130709190613aca565b61307a9190613ae9565b9050601d54601f548261308d9190613aca565b6130979190613ae9565b602160008282546130a89190613a78565b9091555050601d54601e5461300b9083613aca565b6001600160a01b03871660009081526024602052604090205460ff1680156130e757506000601854115b1561316a576064601854866130fc9190613aca565b6131069190613ae9565b9050601854601a54826131199190613aca565b6131239190613ae9565b602160008282546131349190613a78565b90915550506018546019546131499083613aca565b6131539190613ae9565b602060008282546131649190613a78565b90915550505b801561317b5761317b873083613413565b6131858186613c56565b94505b613193878787613413565b50505050505050565b6001600160a01b0382166000908152602460205260409020805460ff19168215151790556118028282613568565b60006131d530611191565b905060006020546021546131e99190613a78565b90508115806131f6575080155b156131ff575050565b600b5461320d90600a613aca565b82111561322557600b5461322290600a613aca565b91505b600080600283602154866132399190613aca565b6132439190613ae9565b61324d9190613ae9565b905061326161325c8286613c56565b6135cb565b6021544790819060009061327790600290613ae9565b6132819087613c56565b60205461328e9085613aca565b6132989190613ae9565b90506132a48183613c56565b60006021819055602055915083158015906132bf5750600082115b156132ce576132ce8483613725565b600c5447906001600160a01b031660646132e9836028613aca565b6132f39190613ae9565b604051600081818185875af1925050503d806000811461332f576040519150601f19603f3d011682016040523d82523d6000602084013e613334565b606091505b5050600d549096506001600160a01b03166064613352836028613aca565b61335c9190613ae9565b604051600081818185875af1925050503d8060008114613398576040519150601f19603f3d011682016040523d82523d6000602084013e61339d565b606091505b5050600e549096506001600160a01b031660646133bb836014613aca565b6133c59190613ae9565b604051600081818185875af1925050503d8060008114613401576040519150601f19603f3d011682016040523d82523d6000602084013e613406565b606091505b5050505050505050505050565b6001600160a01b0383166134395760405162461bcd60e51b8152600401610c8290613bce565b6001600160a01b03821661345f5760405162461bcd60e51b8152600401610c8290613c13565b6001600160a01b038316600090815260208190526040902054818110156134d75760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c82565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061350e908490613a78565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161355a91815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260236020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061360057613600613c6d565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367d9190613c83565b8160018151811061369057613690613c6d565b6001600160a01b0392831660209182029290920101526009546136b691309116846125a5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906136ef908590600090869030904290600401613ca0565b600060405180830381600087803b15801561370957600080fd5b505af115801561371d573d6000803e3d6000fd5b505050505050565b60095461373d9030906001600160a01b0316846125a5565b600954600f5460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261377d9230928992600092839216904290600401613b41565b60606040518083038185885af115801561379b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061243c9190613b7c565b600080604083850312156137d357600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561380f578581018301518582016040015282016137f3565b81811115613821576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461384c57600080fd5b50565b6000806040838503121561386257600080fd5b823561386d81613837565b946020939093013593505050565b60006020828403121561388d57600080fd5b813561389881613837565b9392505050565b6000806000606084860312156138b457600080fd5b83356138bf81613837565b925060208401356138cf81613837565b929592945050506040919091013590565b6000602082840312156138f257600080fd5b5035919050565b801515811461384c57600080fd5b6000806040838503121561391a57600080fd5b823561392581613837565b91506020830135613935816138f9565b809150509250929050565b60006020828403121561395257600080fd5b8135613898816138f9565b6000806040838503121561397057600080fd5b823561397b81613837565b9150602083013561393581613837565b600081518084526020808501945080840160005b838110156139c45781516001600160a01b03168752958201959082019060010161399f565b509495945050505050565b602081526000613898602083018461398b565b6000806000606084860312156139f757600080fd5b8335613a0281613837565b92506020840135613a1281613837565b91506040840135613a2281613837565b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613a8b57613a8b613a62565b500190565b600181811c90821680613aa457607f821691505b602082108103613ac457634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615613ae457613ae4613a62565b500290565b600082613b0657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613b1d57600080fd5b5051919050565b600060208284031215613b3657600080fd5b8151613898816138f9565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613b9157600080fd5b8351925060208401519150604084015190509250925092565b60008060408385031215613bbd57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613c6857613c68613a62565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613c9557600080fd5b815161389881613837565b85815284602082015260a060408201526000613cbf60a083018661398b565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122043f7bd628ccb31289b7018ab177f772d46b6eef2241e62033fc0999c5e189f4564736f6c634300080d0033

Deployed Bytecode Sourcemap

11682:22826:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20573:342;;;;;;;;;;-1:-1:-1;20573:342:0;;;;;:::i;:::-;;:::i;:::-;;5034:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11829:27;;;;;;;;;;-1:-1:-1;11829:27:0;;;;-1:-1:-1;;;;;11829:27:0;;;;;;-1:-1:-1;;;;;1051:32:1;;;1033:51;;1021:2;1006:18;11829:27:0;869:221:1;6089:210:0;;;;;;;;;;-1:-1:-1;6089:210:0;;;;;:::i;:::-;;:::i;:::-;;;1716:14:1;;1709:22;1691:41;;1679:2;1664:18;6089:210:0;1551:187:1;11963:33:0;;;;;;;;;;-1:-1:-1;11963:33:0;;;;-1:-1:-1;;;;;11963:33:0;;;27133:108;;;;;;;;;;-1:-1:-1;27215:18:0;;27133:108;;;2097:25:1;;;2085:2;2070:18;27133:108:0;1951:177:1;13349:63:0;;;;;;;;;;-1:-1:-1;13349:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5355:108;;;;;;;;;;-1:-1:-1;5443:12:0;;5355:108;;13167:33;;;;;;;;;;;;;;;;17253:175;;;;;;;;;;-1:-1:-1;17253:175:0;;;;;:::i;:::-;;:::i;6307:529::-;;;;;;;;;;-1:-1:-1;6307:529:0;;;;;:::i;:::-;;:::i;17595:312::-;;;;;;;;;;-1:-1:-1;17595:312:0;;;;;:::i;:::-;;:::i;5254:93::-;;;;;;;;;;-1:-1:-1;5254:93:0;;5337:2;3173:36:1;;3161:2;3146:18;5254:93:0;3031:184:1;6844:297:0;;;;;;;;;;-1:-1:-1;6844:297:0;;;;;:::i;:::-;;:::i;11863:21::-;;;;;;;;;;-1:-1:-1;11863:21:0;;;;-1:-1:-1;;;;;11863:21:0;;;12360:33;;;;;;;;;;-1:-1:-1;12360:33:0;;;;;;;;13047:32;;;;;;;;;;;;;;;;27004:121;;;;;;;;;;-1:-1:-1;27099:18:0;;27084:12;:33;27004:121;;12846:31;;;;;;;;;;;;;;;;17064:181;;;;;;;;;;-1:-1:-1;17064:181:0;;;;;:::i;:::-;;:::i;20230:335::-;;;;;;;;;;-1:-1:-1;20230:335:0;;;;;:::i;:::-;;:::i;11761:28::-;;;;;;;;;;;;;;;;13012;;;;;;;;;;;;;;;;12326:25;;;;;;;;;;;;;;;;12440:31;;;;;;;;;;-1:-1:-1;12440:31:0;;;;;;;;;;;5471:177;;;;;;;;;;-1:-1:-1;5471:177:0;;;;;:::i;:::-;;:::i;32338:84::-;;;;;;;;;;;;;:::i;19283:334::-;;;;;;;;;;-1:-1:-1;19283:334:0;;;;;:::i;:::-;;:::i;9565:265::-;;;;;;;;;;-1:-1:-1;9565:265:0;;;;;:::i;:::-;;:::i;34041:464::-;;;;;;;;;;-1:-1:-1;34041:464:0;;;;;:::i;:::-;;:::i;30641:567::-;;;;;;;;;;-1:-1:-1;30641:567:0;;;;;:::i;:::-;;:::i;12241:43::-;;;;;;;;;;-1:-1:-1;12241:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11727:27;;;;;;;;;;;;;;;;9351:79;;;;;;;;;;-1:-1:-1;9416:6:0;;-1:-1:-1;;;;;9416:6:0;9351:79;;12043:33;;;;;;;;;;-1:-1:-1;12043:33:0;;;;-1:-1:-1;;;;;12043:33:0;;;5142:104;;;;;;;;;;;;;:::i;16952:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19625:353::-;;;;;;;;;;-1:-1:-1;19625:353:0;;;;;:::i;:::-;;:::i;32430:84::-;;;;;;;;;;;;;:::i;12083:32::-;;;;;;;;;;-1:-1:-1;12083:32:0;;;;-1:-1:-1;;;;;12083:32:0;;;7149:482;;;;;;;;;;-1:-1:-1;7149:482:0;;;;;:::i;:::-;;:::i;12201:33::-;;;;;;;;;;;;;;;;5656:216;;;;;;;;;;-1:-1:-1;5656:216:0;;;;;:::i;:::-;;:::i;32569:287::-;;;;;;;;;;-1:-1:-1;32569:287:0;;;;;:::i;:::-;;:::i;13570:57::-;;;;;;;;;;-1:-1:-1;13570:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33248:785;;;;;;;;;;;;;:::i;12400:33::-;;;;;;;;;;-1:-1:-1;12400:33:0;;;;;;;;;;;20923:182;;;;;;;;;;-1:-1:-1;20923:182:0;;;;;:::i;:::-;;:::i;18240:311::-;;;;;;;;;;-1:-1:-1;18240:311:0;;;;;:::i;:::-;;:::i;32135:151::-;;;;;;;;;;-1:-1:-1;32135:151:0;;;;;:::i;:::-;;:::i;12764:39::-;;;;;;;;;;-1:-1:-1;12764:39:0;;;;;;;;18621:425;;;;;;;;;;-1:-1:-1;18621:425:0;;;;;:::i;:::-;;:::i;12812:27::-;;;;;;;;;;;;;;;;31471:656;;;;;;;;;;-1:-1:-1;31471:656:0;;;;;:::i;:::-;;:::i;17915:317::-;;;;;;;;;;-1:-1:-1;17915:317:0;;;;;:::i;:::-;;:::i;5880:201::-;;;;;;;;;;-1:-1:-1;5880:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;6046:18:0;;;6014:7;6046:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5880:201;11921:33;;;;;;;;;;;;;;;;32864:376;;;;;;;;;;;;;:::i;17489:98::-;;;;;;;;;;;;;:::i;12291:28::-;;;;;;;;;;-1:-1:-1;12291:28:0;;;;;:::i;:::-;;:::i;12124:37::-;;;;;;;;;;;;;;;;28347:665;;;;;;;;;;-1:-1:-1;28347:665:0;;;;;:::i;:::-;;:::i;12884:30::-;;;;;;;;;;;;;;;;12003:33;;;;;;;;;;-1:-1:-1;12003:33:0;;;;-1:-1:-1;;;;;12003:33:0;;;9838:281;;;;;;;;;;-1:-1:-1;9838:281:0;;;;;:::i;:::-;;:::i;31278:185::-;;;;;;;;;;;;;:::i;13086:31::-;;;;;;;;;;;;;;;;12543:34;;;;;;;;;;-1:-1:-1;12543:34:0;;;;;;;;;;;11796:24;;;;;;;;;;;;;;;;13126:34;;;;;;;;;;;;;;;;20573:342;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;;;;;;;;;20697:17:::1;:34:::0;;;20742:16:::1;:32:::0;;;20801:36:::1;20761:13:::0;20717:14;20801:36:::1;:::i;:::-;20785:13;:52:::0;;;20873:1:::1;-1:-1:-1::0;20856:18:0::1;20848:59;;;::::0;-1:-1:-1;;;20848:59:0;;6463:2:1;20848:59:0::1;::::0;::::1;6445:21:1::0;6502:2;6482:18;;;6475:30;6541;6521:18;;;6514:58;6589:18;;20848:59:0::1;6261:352:1::0;20848:59:0::1;20573:342:::0;;:::o;5034:100::-;5088:13;5121:5;5114:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5034:100;:::o;6089:210::-;6208:4;6230:39;1184:10;6253:7;6262:6;6230:8;:39::i;:::-;-1:-1:-1;6287:4:0;6089:210;;;;:::o;17253:175::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17333:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;17332:20;17324:59;;;::::0;-1:-1:-1;;;17324:59:0;;7205:2:1;17324:59:0::1;::::0;::::1;7187:21:1::0;7244:2;7224:18;;;7217:30;7283:28;7263:18;;;7256:56;7329:18;;17324:59:0::1;7003:350:1::0;17324:59:0::1;-1:-1:-1::0;;;;;17394:19:0::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;17394:26:0::1;17416:4;17394:26;::::0;;17253:175::o;6307:529::-;6447:4;6464:36;6474:6;6482:9;6493:6;6464:9;:36::i;:::-;-1:-1:-1;;;;;6540:19:0;;6513:24;6540:19;;;:11;:19;;;;;;;;1184:10;6540:33;;;;;;;;6606:26;;;;6584:116;;;;-1:-1:-1;;;6584:116:0;;7560:2:1;6584:116:0;;;7542:21:1;7599:2;7579:18;;;7572:30;7638:34;7618:18;;;7611:62;-1:-1:-1;;;7689:18:1;;;7682:38;7737:19;;6584:116:0;7358:404:1;6584:116:0;6736:57;6745:6;1184:10;6786:6;6767:16;:25;6736:8;:57::i;:::-;-1:-1:-1;6824:4:0;;6307:529;-1:-1:-1;;;;6307:529:0:o;17595:312::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;17733:4:::1;17724:5;17703:13;5443:12:::0;;;5355:108;17703:13:::1;:17;::::0;17719:1:::1;17703:17;:::i;:::-;17702:27;;;;:::i;:::-;17701:36;;;;:::i;:::-;17691:6;:46;;17669:138;;;::::0;-1:-1:-1;;;17669:138:0;;8364:2:1;17669:138:0::1;::::0;::::1;8346:21:1::0;8403:2;8383:18;;;8376:30;8442:34;8422:18;;;8415:62;-1:-1:-1;;;8493:18:1;;;8486:40;8543:19;;17669:138:0::1;8162:406:1::0;17669:138:0::1;17833:17;:6:::0;17843::::1;17833:17;:::i;:::-;17818:12;:32:::0;;;17866:33:::1;::::0;2097:25:1;;;17866:33:0::1;::::0;2085:2:1;2070:18;17866:33:0::1;;;;;;;;17595:312:::0;:::o;6844:297::-;1184:10;6959:4;7053:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7053:34:0;;;;;;;;;;6959:4;;6981:130;;7031:7;;7053:47;;7090:10;;7053:47;:::i;:::-;6981:8;:130::i;17064:181::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17145:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;17137:62;;;::::0;-1:-1:-1;;;17137:62:0;;8775:2:1;17137:62:0::1;::::0;::::1;8757:21:1::0;8814:2;8794:18;;;8787:30;8853:32;8833:18;;;8826:60;8903:18;;17137:62:0::1;8573:354:1::0;17137:62:0::1;-1:-1:-1::0;;;;;17210:19:0::1;17232:5;17210:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;17210:27:0::1;::::0;;17064:181::o;20230:335::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;20353:16:::1;:33:::0;;;20397:15:::1;:31:::0;;;20454:34:::1;20415:13:::0;20372:14;20454:34:::1;:::i;:::-;20439:12;:49:::0;;;20523:1:::1;-1:-1:-1::0;20507:17:0::1;20499:58;;;::::0;-1:-1:-1;;;20499:58:0;;6463:2:1;20499:58:0::1;::::0;::::1;6445:21:1::0;6502:2;6482:18;;;6475:30;6541;6521:18;;;6514:58;6589:18;;20499:58:0::1;6261:352:1::0;5471:177:0;-1:-1:-1;;;;;5622:18:0;5590:7;5622:18;;;;;;;;;;;;5471:177::o;32338:84::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;32392:14:::1;:22:::0;;-1:-1:-1;;32392:22:0::1;::::0;;32338:84::o;19283:334::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;19403:4:::1;19398:155;;19460:6;::::0;-1:-1:-1;;;;;19460:6:0;;::::1;19450:16:::0;;::::1;::::0;19424:117:::1;;;::::0;-1:-1:-1;;;19424:117:0;;9134:2:1;19424:117:0::1;::::0;::::1;9116:21:1::0;9173:2;9153:18;;;9146:30;9212:34;9192:18;;;9185:62;-1:-1:-1;;;9263:18:1;;;9256:37;9310:19;;19424:117:0::1;8932:403:1::0;19424:117:0::1;-1:-1:-1::0;;;;;19563:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;19563:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19283:334::o;9565:265::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;9692:15:::1;9684:52;;;::::0;-1:-1:-1;;;9684:52:0;;9542:2:1;9684:52:0::1;::::0;::::1;9524:21:1::0;9581:2;9561:18;;;9554:30;9620:26;9600:18;;;9593:54;9664:18;;9684:52:0::1;9340:348:1::0;9684:52:0::1;9773:6;::::0;9752:40:::1;::::0;9789:1:::1;::::0;-1:-1:-1;;;;;9773:6:0::1;::::0;9752:40:::1;::::0;9789:1;;9752:40:::1;-1:-1:-1::0;9803:6:0::1;:19:::0;;-1:-1:-1;;;;;;9803:19:0::1;::::0;;9565:265::o;34041:464::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;34129:13:::1;::::0;::::1;::::0;::::1;;;34128:14;34120:50;;;::::0;-1:-1:-1;;;34120:50:0;;9895:2:1;34120:50:0::1;::::0;::::1;9877:21:1::0;9934:2;9914:18;;;9907:30;9973:25;9953:18;;;9946:53;10016:18;;34120:50:0::1;9693:347:1::0;34120:50:0::1;34223:2;34203:16;:22;;34181:111;;;::::0;-1:-1:-1;;;34181:111:0;;10247:2:1;34181:111:0::1;::::0;::::1;10229:21:1::0;10286:2;10266:18;;;10259:30;10325:34;10305:18;;;10298:62;-1:-1:-1;;;10376:18:1;;;10369:37;10423:19;;34181:111:0::1;10045:403:1::0;34181:111:0::1;34303:13;:20:::0;;-1:-1:-1;;34334:18:0;;;;;34384:12:::1;34363:18;:33:::0;;;34428:37:::1;::::0;34449:16;;34428:37:::1;:::i;:::-;34407:18;:58:::0;34481:16:::1;::::0;::::1;::::0;;;::::1;34041:464:::0;:::o;30641:567::-;9478:6;;30755:10;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30791:20:0;::::1;30783:59;;;::::0;-1:-1:-1;;;30783:59:0;;10655:2:1;30783:59:0::1;::::0;::::1;10637:21:1::0;10694:2;10674:18;;;10667:30;10733:28;10713:18;;;10706:56;10779:18;;30783:59:0::1;10453:350:1::0;30783:59:0::1;-1:-1:-1::0;;;;;30875:23:0;::::1;30893:4;30875:23;;::::0;:41:::1;;-1:-1:-1::0;30903:13:0::1;::::0;::::1;::::0;::::1;;;30902:14;30875:41;30853:143;;;::::0;-1:-1:-1;;;30853:143:0;;11010:2:1;30853:143:0::1;::::0;::::1;10992:21:1::0;11049:2;11029:18;;;11022:30;11088:34;11068:18;;;11061:62;-1:-1:-1;;;11139:18:1;;;11132:50;11199:19;;30853:143:0::1;10808:416:1::0;30853:143:0::1;31034:39;::::0;-1:-1:-1;;;31034:39:0;;31067:4:::1;31034:39;::::0;::::1;1033:51:1::0;31007:24:0::1;::::0;-1:-1:-1;;;;;31034:24:0;::::1;::::0;::::1;::::0;1006:18:1;;31034:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31092:46;::::0;-1:-1:-1;;;31092:46:0;;-1:-1:-1;;;;;11610:32:1;;;31092:46:0::1;::::0;::::1;11592:51:1::0;11659:18;;;11652:34;;;31007:66:0;;-1:-1:-1;31092:23:0;;::::1;::::0;::::1;::::0;11565:18:1;;31092:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31154;::::0;;-1:-1:-1;;;;;11610:32:1;;11592:51;;11674:2;11659:18;;11652:34;;;31084:54:0;;-1:-1:-1;31154:46:0::1;::::0;11565:18:1;31154:46:0::1;;;;;;;30772:436;30641:567:::0;;;;:::o;5142:104::-;5198:13;5231:7;5224:14;;;;;:::i;16952:104::-;17001:16;17037:11;17030:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17030:18:0;;;;;;;;;;;;;;;;;;;;;;16952:104;:::o;19625:353::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;19771:6:::1;::::0;-1:-1:-1;;;;;19771:6:0;;::::1;19763:14:::0;;::::1;::::0;19741:121:::1;;;::::0;-1:-1:-1;;;19741:121:0;;12149:2:1;19741:121:0::1;::::0;::::1;12131:21:1::0;12188:2;12168:18;;;12161:30;12227:34;12207:18;;;12200:62;12298:27;12278:18;;;12271:55;12343:19;;19741:121:0::1;11947:421:1::0;19741:121:0::1;19873:41;19902:4;19908:5;19873:28;:41::i;:::-;19930:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;19930:40:0;::::1;::::0;::::1;::::0;;;::::1;19625:353:::0;;:::o;32430:84::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;32485:14:::1;:21:::0;;-1:-1:-1;;32485:21:0::1;32502:4;32485:21;::::0;;32430:84::o;7149:482::-;1184:10;7269:4;7318:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7318:34:0;;;;;;;;;;7385:35;;;;7363:122;;;;-1:-1:-1;;;7363:122:0;;12575:2:1;7363:122:0;;;12557:21:1;12614:2;12594:18;;;12587:30;12653:34;12633:18;;;12626:62;-1:-1:-1;;;12704:18:1;;;12697:35;12749:19;;7363:122:0;12373:401:1;7363:122:0;7521:67;1184:10;7544:7;7572:15;7553:16;:34;7521:8;:67::i;:::-;-1:-1:-1;7619:4:0;;7149:482;-1:-1:-1;;;7149:482:0:o;5656:216::-;5778:4;5800:42;1184:10;5824:9;5835:6;5800:9;:42::i;32569:287::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;32662:21:::1;32654:58;;;::::0;-1:-1:-1;;;32654:58:0;;12981:2:1;32654:58:0::1;::::0;::::1;12963:21:1::0;13020:2;13000:18;;;12993:30;13059:26;13039:18;;;13032:54;13103:18;;32654:58:0::1;12779:348:1::0;32654:58:0::1;32732:14;::::0;;;::::1;;;32731:15;32723:52;;;::::0;-1:-1:-1;;;32723:52:0;;13334:2:1;32723:52:0::1;::::0;::::1;13316:21:1::0;13373:2;13353:18;;;13346:30;13412:26;13392:18;;;13385:54;13456:18;;32723:52:0::1;13132:348:1::0;32723:52:0::1;32788:14;:21:::0;;-1:-1:-1;;32788:21:0::1;::::0;::::1;::::0;;32825:23:::1;::::0;::::1;::::0;32788:21;;32825:23:::1;32569:287:::0;:::o;33248:785::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;33312:13:::1;::::0;::::1;::::0;::::1;;;33311:14;33303:70;;;::::0;-1:-1:-1;;;33303:70:0;;13687:2:1;33303:70:0::1;::::0;::::1;13669:21:1::0;13726:2;13706:18;;;13699:30;13765:34;13745:18;;;13738:62;-1:-1:-1;;;13816:18:1;;;13809:41;13867:19;;33303:70:0::1;13485:407:1::0;33303:70:0::1;33462:1;33438:21;:25;33416:110;;;::::0;-1:-1:-1;;;33416:110:0;;14099:2:1;33416:110:0::1;::::0;::::1;14081:21:1::0;14138:2;14118:18;;;14111:30;14177:34;14157:18;;;14150:62;-1:-1:-1;;;14228:18:1;;;14221:33;14271:19;;33416:110:0::1;13897:399:1::0;33416:110:0::1;33586:1;33559:24;33577:4;33559:9;:24::i;:::-;:28;33537:116;;;::::0;-1:-1:-1;;;33537:116:0;;14503:2:1;33537:116:0::1;::::0;::::1;14485:21:1::0;14542:2;14522:18;;;14515:30;14581:34;14561:18;;;14554:62;-1:-1:-1;;;14632:18:1;;;14625:36;14678:19;;33537:116:0::1;14301:402:1::0;33537:116:0::1;33698:9;::::0;33666:69:::1;::::0;33683:4:::1;::::0;-1:-1:-1;;;;;33698:9:0::1;33710:24;33683:4:::0;33710:9:::1;:24::i;33666:69::-;33748:9;::::0;-1:-1:-1;;;;;33748:9:0::1;:25;33781:21;33826:4;33846:24;33826:4:::0;33846:9:::1;:24::i;:::-;33885:1;33928::::0;33979:4:::1;33999:15;33748:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33248:785::o:0;20923:182::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21008:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;21008:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21063:34;;1691:41:1;;;21063:34:0::1;::::0;1664:18:1;21063:34:0::1;;;;;;;20923:182:::0;;:::o;18240:311::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;18380:4:::1;18372;18351:13;5443:12:::0;;;5355:108;18351:13:::1;:17;::::0;18367:1:::1;18351:17;:::i;:::-;18350:26;;;;:::i;:::-;18349:35;;;;:::i;:::-;18339:6;:45;;18317:137;;;::::0;-1:-1:-1;;;18317:137:0;;15833:2:1;18317:137:0::1;::::0;::::1;15815:21:1::0;15872:2;15852:18;;;15845:30;15911:34;15891:18;;;15884:62;-1:-1:-1;;;15962:18:1;;;15955:40;16012:19;;18317:137:0::1;15631:406:1::0;18317:137:0::1;18477:17;:6:::0;18487::::1;18477:17;:::i;:::-;18465:9;:29:::0;;;18510:33:::1;::::0;2097:25:1;;;18510:33:0::1;::::0;2085:2:1;2070:18;18510:33:0::1;1951:177:1::0;32135:151:0;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;32243:17:::1;:35:::0;;-1:-1:-1;;;;;;32243:35:0::1;-1:-1:-1::0;;;;;32243:35:0;;;::::1;::::0;;;::::1;::::0;;32135:151::o;18621:425::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;18761:6:::1;18740:13;5443:12:::0;;;5355:108;18740:13:::1;:17;::::0;18756:1:::1;18740:17;:::i;:::-;18739:28;;;;:::i;:::-;18726:9;:41;;18704:144;;;::::0;-1:-1:-1;;;18704:144:0;;16244:2:1;18704:144:0::1;::::0;::::1;16226:21:1::0;16283:2;16263:18;;;16256:30;16322:34;16302:18;;;16295:62;-1:-1:-1;;;16373:18:1;;;16366:51;16434:19;;18704:144:0::1;16042:417:1::0;18704:144:0::1;18916:3;18895:13;5443:12:::0;;;5355:108;18895:13:::1;:17;::::0;18911:1:::1;18895:17;:::i;:::-;18894:25;;;;:::i;:::-;18881:9;:38;;18859:138;;;::::0;-1:-1:-1;;;18859:138:0;;16666:2:1;18859:138:0::1;::::0;::::1;16648:21:1::0;16705:2;16685:18;;;16678:30;16744:34;16724:18;;;16717:62;-1:-1:-1;;;16795:18:1;;;16788:48;16853:19;;18859:138:0::1;16464:414:1::0;18859:138:0::1;19008:18;:30:::0;18621:425::o;31471:656::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31663:33:0;::::1;::::0;;::::1;::::0;:70:::1;;-1:-1:-1::0;;;;;;31700:33:0;::::1;::::0;::::1;31663:70;:107;;;;-1:-1:-1::0;;;;;;31737:33:0;::::1;::::0;::::1;31663:107;31641:195;;;::::0;-1:-1:-1;;;31641:195:0;;17085:2:1;31641:195:0::1;::::0;::::1;17067:21:1::0;17124:2;17104:18;;;17097:30;17163:34;17143:18;;;17136:62;-1:-1:-1;;;17214:18:1;;;17207:36;17260:19;;31641:195:0::1;16883:402:1::0;31641:195:0::1;31847:18;:49:::0;;-1:-1:-1;;;;;;31847:49:0;;::::1;-1:-1:-1::0;;;;;31847:49:0;;::::1;::::0;;::::1;::::0;;;31907:18:::1;:49:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;31967:18:::1;:49:::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;32032:87:::1;::::0;::::1;::::0;-1:-1:-1;;32032:87:0::1;31471:656:::0;;;:::o;17915:317::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;18054:4:::1;18045:5;18024:13;5443:12:::0;;;5355:108;18024:13:::1;:17;::::0;18040:1:::1;18024:17;:::i;:::-;18023:27;;;;:::i;:::-;18022:36;;;;:::i;:::-;18012:6;:46;;17990:139;;;::::0;-1:-1:-1;;;17990:139:0;;17492:2:1;17990:139:0::1;::::0;::::1;17474:21:1::0;17531:2;17511:18;;;17504:30;17570:34;17550:18;;;17543:62;-1:-1:-1;;;17621:18:1;;;17614:41;17672:19;;17990:139:0::1;17290:407:1::0;17990:139:0::1;18156:17;:6:::0;18166::::1;18156:17;:::i;:::-;18140:13;:33:::0;;;18189:35:::1;::::0;2097:25:1;;;18189:35:0::1;::::0;2085:2:1;2070:18;18189:35:0::1;1951:177:1::0;32864:376:0;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;32935:21:::1;::::0;32916:16:::1;:40:::0;;;32985:20:::1;::::0;32967:15:::1;:38:::0;;;33031:34:::1;::::0;::::1;:::i;:::-;33016:12;:49:::0;33098:21:::1;::::0;33078:17:::1;:41:::0;;;33149:20:::1;::::0;33130:16:::1;:39:::0;;;33196:36:::1;::::0;::::1;:::i;:::-;33180:13;:52:::0;32864:376::o;17489:98::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;17551:20:::1;:28:::0;;-1:-1:-1;;17551:28:0::1;::::0;;17489:98::o;12291:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12291:28:0;;-1:-1:-1;12291:28:0;:::o;28347:665::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;28439:6:::1;::::0;28432:39:::1;::::0;-1:-1:-1;;;28432:39:0;;28465:4:::1;28432:39;::::0;::::1;1033:51:1::0;28412:17:0::1;::::0;-1:-1:-1;;;;;28439:6:0::1;::::0;28432:24:::1;::::0;1006:18:1;;28432:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28412:59;;28504:1;28492:9;:13;28484:50;;;::::0;-1:-1:-1;;;28484:50:0;;17904:2:1;28484:50:0::1;::::0;::::1;17886:21:1::0;17943:2;17923:18;;;17916:30;17982:26;17962:18;;;17955:54;18026:18;;28484:50:0::1;17702:348:1::0;28484:50:0::1;28547:16;28590:5;28567:19;28579:7:::0;28567:9;:19:::1;:::i;:::-;28566:29;;;;:::i;:::-;28682:6;::::0;28706:9:::1;::::0;28675:52:::1;::::0;-1:-1:-1;;;28675:52:0;;-1:-1:-1;;;;;28706:9:0;;::::1;28675:52;::::0;::::1;11592:51:1::0;11659:18;;;11652:34;;;28547:48:0;;-1:-1:-1;28682:6:0::1;::::0;28675:22:::1;::::0;11565:18:1;;28675:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28773:9:0::1;::::0;:231:::1;::::0;-1:-1:-1;;;28773:231:0;;-1:-1:-1;;;;;28773:9:0;;::::1;::::0;:28:::1;::::0;:231:::1;::::0;28824:4:::1;::::0;28844:8;;28773:9;;;;28953:10:::1;::::0;28978:15:::1;::::0;28773:231:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28401:611;;28347:665:::0;:::o;9838:281::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9941:22:0;::::1;9919:110;;;::::0;-1:-1:-1;;;9919:110:0;;19119:2:1;9919:110:0::1;::::0;::::1;19101:21:1::0;19158:2;19138:18;;;19131:30;19197:34;19177:18;;;19170:62;-1:-1:-1;;;19248:18:1;;;19241:36;19294:19;;9919:110:0::1;18917:402:1::0;9919:110:0::1;10066:6;::::0;10045:38:::1;::::0;-1:-1:-1;;;;;10045:38:0;;::::1;::::0;10066:6:::1;::::0;10045:38:::1;::::0;10066:6:::1;::::0;10045:38:::1;10094:6;:17:::0;;-1:-1:-1;;;;;;10094:17:0::1;-1:-1:-1::0;;;;;10094:17:0;;;::::1;::::0;;;::::1;::::0;;9838:281::o;31278:185::-;9478:6;;-1:-1:-1;;;;;9478:6:0;1184:10;9478:22;9470:67;;;;-1:-1:-1;;;9470:67:0;;;;;;;:::i;:::-;31373:82:::1;::::0;31336:12:::1;::::0;31381:10:::1;::::0;31405:21:::1;::::0;31336:12;31373:82;31336:12;31373:82;31405:21;31381:10;31373:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;31278:185:0:o;8620:380::-;-1:-1:-1;;;;;8756:19:0;;8748:68;;;;-1:-1:-1;;;8748:68:0;;19736:2:1;8748:68:0;;;19718:21:1;19775:2;19755:18;;;19748:30;19814:34;19794:18;;;19787:62;-1:-1:-1;;;19865:18:1;;;19858:34;19909:19;;8748:68:0;19534:400:1;8748:68:0;-1:-1:-1;;;;;8835:21:0;;8827:68;;;;-1:-1:-1;;;8827:68:0;;20141:2:1;8827:68:0;;;20123:21:1;20180:2;20160:18;;;20153:30;20219:34;20199:18;;;20192:62;-1:-1:-1;;;20270:18:1;;;20263:32;20312:19;;8827:68:0;19939:398:1;8827:68:0;-1:-1:-1;;;;;8908:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8960:32;;2097:25:1;;;8960:32:0;;2070:18:1;8960:32:0;;;;;;;8620:380;;;:::o;21113:5883::-;-1:-1:-1;;;;;21245:18:0;;21237:68;;;;-1:-1:-1;;;21237:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21324:16:0;;21316:64;;;;-1:-1:-1;;;21316:64:0;;;;;;;:::i;:::-;21408:1;21399:6;:10;21391:52;;;;-1:-1:-1;;;21391:52:0;;21354:2:1;21391:52:0;;;21336:21:1;21393:2;21373:18;;;21366:30;21432:31;21412:18;;;21405:59;21481:18;;21391:52:0;21152:353:1;21391:52:0;21461:13;;;;;;;21456:183;;-1:-1:-1;;;;;21517:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;21546:23:0;;;;;;:19;:23;;;;;;;;21517:52;21491:136;;;;-1:-1:-1;;;21491:136:0;;21712:2:1;21491:136:0;;;21694:21:1;21751:2;21731:18;;;21724:30;-1:-1:-1;;;21770:18:1;;;21763:52;21832:18;;21491:136:0;21510:346:1;21491:136:0;27099:18;;27084:12;:33;21655:26;:43;;;;-1:-1:-1;21685:13:0;;;;;;;21655:43;21651:268;;;-1:-1:-1;;;;;21742:17:0;;;;;;:11;:17;;;;;;;;21741:18;;:35;;-1:-1:-1;9416:6:0;;-1:-1:-1;;;;;21763:13:0;;;9416:6;;21763:13;21741:35;:60;;;-1:-1:-1;;;;;;21780:21:0;;21794:6;21780:21;21741:60;21715:192;;;;-1:-1:-1;;;21715:192:0;;22063:2:1;21715:192:0;;;22045:21:1;22102:2;22082:18;;;22075:30;22141:34;22121:18;;;22114:62;22212:34;22192:18;;;22185:62;-1:-1:-1;;;22263:19:1;;;22256:37;22310:19;;21715:192:0;21861:474:1;21715:192:0;21935:14;;;;21931:2214;;;9416:6;;-1:-1:-1;;;;;21988:15:0;;;9416:6;;21988:15;;;;:49;;-1:-1:-1;9416:6:0;;-1:-1:-1;;;;;22024:13:0;;;9416:6;;22024:13;;21988:49;:91;;;;-1:-1:-1;;;;;;22058:21:0;;22072:6;22058:21;;21988:91;:138;;;;-1:-1:-1;;;;;;22101:25:0;;;;;;:19;:25;;;;;;;;22100:26;21988:138;:183;;;;-1:-1:-1;;;;;;22148:23:0;;;;;;:19;:23;;;;;;;;22147:24;21988:183;21966:2168;;;22210:20;;;;22206:692;;;22273:9;;-1:-1:-1;;;;;22259:24:0;;;22273:9;;22259:24;;;;:49;;-1:-1:-1;22301:6:0;;-1:-1:-1;;;;;22287:21:0;;;22301:6;;22287:21;;22259:49;22255:624;;;22450:16;22465:1;22450:12;:16;:::i;:::-;22404:9;22375:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;22571:16:0;22586:1;22571:12;:16;:::i;:::-;-1:-1:-1;;;;;22503:32:0;;;;;;:28;:32;;;;;;:84;22375:212;22337:363;;;;-1:-1:-1;;;22337:363:0;;22672:2:1;22337:363:0;;;22654:21:1;22711:2;22691:18;;;22684:30;22750:34;22730:18;;;22723:62;-1:-1:-1;;;22801:18:1;;;22794:51;22862:19;;22337:363:0;22470:417:1;22337:363:0;22756:9;22727:39;;;;:28;:39;;;;;;22769:12;22727:54;;;;-1:-1:-1;;;;;22808:32:0;;;;;;:47;22255:624;-1:-1:-1;;;;;22972:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;23029:35:0;;;;;;:31;:35;;;;;;;;23028:36;22972:92;22946:1173;;;23151:12;;23141:6;:22;;23107:148;;;;-1:-1:-1;;;23107:148:0;;23094:2:1;23107:148:0;;;23076:21:1;23133:2;23113:18;;;23106:30;23172:34;23152:18;;;23145:62;-1:-1:-1;;;23223:18:1;;;23216:38;23271:19;;23107:148:0;22892:404:1;23107:148:0;23338:9;;23321:13;23331:2;23321:9;:13::i;:::-;23312:22;;:6;:22;:::i;:::-;:35;;23278:140;;;;-1:-1:-1;;;23278:140:0;;23503:2:1;23278:140:0;;;23485:21:1;23542:2;23522:18;;;23515:30;-1:-1:-1;;;23561:18:1;;;23554:49;23620:18;;23278:140:0;23301:343:1;23278:140:0;22946:1173;;;-1:-1:-1;;;;;23516:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;23571:37:0;;;;;;:31;:37;;;;;;;;23570:38;23516:92;23490:629;;;23659:14;;;;;;;23651:43;;;;-1:-1:-1;;;23651:43:0;;23851:2:1;23651:43:0;;;23833:21:1;23890:2;23870:18;;;23863:30;-1:-1:-1;;;23909:18:1;;;23902:46;23965:18;;23651:43:0;23649:340:1;23651:43:0;23761:13;;23751:6;:23;;23717:151;;;;-1:-1:-1;;;23717:151:0;;24196:2:1;23717:151:0;;;24178:21:1;24235:2;24215:18;;;24208:30;24274:34;24254:18;;;24247:62;-1:-1:-1;;;24325:18:1;;;24318:40;24375:19;;23717:151:0;23994:406:1;23490:629:0;-1:-1:-1;;;;;23899:35:0;;;;;;:31;:35;;;;;;;;23894:225;;24019:9;;24002:13;24012:2;24002:9;:13::i;:::-;23993:22;;:6;:22;:::i;:::-;:35;;23959:140;;;;-1:-1:-1;;;23959:140:0;;23503:2:1;23959:140:0;;;23485:21:1;23542:2;23522:18;;;23515:30;-1:-1:-1;;;23561:18:1;;;23554:49;23620:18;;23959:140:0;23301:343:1;23959:140:0;24157:28;24188:24;24206:4;24188:9;:24::i;:::-;24264:18;;24157:55;;-1:-1:-1;24240:42:0;;;;;;;24313:22;;-1:-1:-1;24324:11:0;;;;;;;24313:22;:35;;;;-1:-1:-1;24340:8:0;;-1:-1:-1;;;24340:8:0;;;;24339:9;24313:35;:68;;;;-1:-1:-1;;;;;;24352:29:0;;;;;;:25;:29;;;;;;;;24313:68;24295:196;;;24408:8;:15;;-1:-1:-1;;;;24408:15:0;-1:-1:-1;;;24408:15:0;;;24438:10;:8;:10::i;:::-;24463:8;:16;;-1:-1:-1;;;;24463:16:0;;;24295:196;-1:-1:-1;;;;;24622:25:0;;24503:12;24622:25;;;:19;:25;;;;;;24518:4;;24622:25;;;:52;;-1:-1:-1;;;;;;24651:23:0;;;;;;:19;:23;;;;;;;;24622:52;24618:100;;;-1:-1:-1;24701:5:0;24618:100;24730:12;24835:7;24831:2112;;;27099:18;;27084:12;:33;24918:152;;;;24994:8;24979:12;;:23;;;;:::i;:::-;24969:6;:33;;:100;;;;;25057:12;25031:18;;25052:1;25031:22;;;;:::i;:::-;:38;;24969:100;24917:206;;;;-1:-1:-1;;;;;;25092:31:0;;;;;;:25;:31;;;;;;;;24917:206;:257;;;;-1:-1:-1;;;;;;25145:29:0;;;;;;:25;:29;;;;;;;;25144:30;24917:257;:302;;;;-1:-1:-1;;;;;;25196:23:0;;;;;;:19;:23;;;;;;;;25195:24;24917:302;:339;;;;;25255:1;25240:12;;:16;24917:339;24895:1899;;;27099:18;;27084:12;:33;25291:332;;25602:1;25586:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;25291:332:0;-1:-1:-1;;;;;25648:15:0;;;;;;:11;:15;;;;;;;;25643:216;;-1:-1:-1;;;;;25688:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;25688:22:0;25706:4;25688:22;;;;;;25733:10;:15;;25706:4;;25733:10;;:15;;25706:4;;25733:15;:::i;:::-;;;;-1:-1:-1;;25771:11:0;:20;;;;;;;-1:-1:-1;25771:20:0;;;;;;;;-1:-1:-1;;;;;;25771:20:0;-1:-1:-1;;;;;25771:20:0;;;;;;;;25819;;1033:51:1;;;25819:20:0;;1021:2:1;1006:18;25819:20:0;;;;;;;25643:216;25902:3;25887:11;:6;25896:2;25887:11;:::i;:::-;25886:19;;;;:::i;:::-;25879:26;;25973:12;;25954:15;;25947:4;:22;;;;:::i;:::-;25946:39;;;;:::i;:::-;25924:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26055:12:0;;26035:16;;26028:23;;:4;:23;:::i;:::-;26027:40;;;;:::i;:::-;26004:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;24895:1899:0;;-1:-1:-1;24895:1899:0;;-1:-1:-1;;;;;26130:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;26179:1;26163:13;;:17;26130:50;26126:668;;;26235:3;26218:13;;26209:6;:22;;;;:::i;:::-;26208:30;;;;:::i;:::-;26201:37;;26307:13;;26287:16;;26280:4;:23;;;;:::i;:::-;26279:41;;;;:::i;:::-;26257:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;26433:13:0;;26391:17;;26384:24;;:4;:24;:::i;26126:668::-;-1:-1:-1;;;;;26508:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26558:1;26543:12;;:16;26508:51;26504:290;;;26613:3;26597:12;;26588:6;:21;;;;:::i;:::-;26587:29;;;;:::i;:::-;26580:36;;26684:12;;26665:15;;26658:4;:22;;;;:::i;:::-;26657:39;;;;:::i;:::-;26635:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26766:12:0;;26746:16;;26739:23;;:4;:23;:::i;:::-;26738:40;;;;:::i;:::-;26715:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;26504:290:0;26814:8;;26810:91;;26843:42;26859:4;26873;26880;26843:15;:42::i;:::-;26917:14;26927:4;26917:14;;:::i;:::-;;;24831:2112;26955:33;26971:4;26977:2;26981:6;26955:15;:33::i;:::-;21226:5770;;;;21113:5883;;;:::o;19986:236::-;-1:-1:-1;;;;;20069:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;20069:39:0;;;;;;;20119;20069:31;:39;20119:26;:39::i;29020:1613::-;29059:23;29085:24;29103:4;29085:9;:24::i;:::-;29059:50;;29120:25;29169:19;;29148:18;;:40;;;;:::i;:::-;29120:68;-1:-1:-1;29205:20:0;;;:46;;-1:-1:-1;29229:22:0;;29205:46;29201:85;;;29268:7;;29020:1613::o;29201:85::-;29320:18;;:23;;29341:2;29320:23;:::i;:::-;29302:15;:41;29298:115;;;29378:18;;:23;;29399:2;29378:23;:::i;:::-;29360:41;;29298:115;29425:12;29499:23;29612:1;29579:17;29544:18;;29526:15;:36;;;;:::i;:::-;29525:71;;;;:::i;:::-;:88;;;;:::i;:::-;29499:114;-1:-1:-1;29626:51:0;29643:33;29499:114;29643:15;:33;:::i;:::-;29626:16;:51::i;:::-;29891:18;;29711:21;;;;29690:18;;29891:22;;29912:1;;29891:22;:::i;:::-;29870:44;;:17;:44;:::i;:::-;29833:19;;29820:32;;:10;:32;:::i;:::-;29819:96;;;;:::i;:::-;29792:123;-1:-1:-1;29928:35:0;29792:123;29928:35;;:::i;:::-;29997:1;29976:18;:22;;;30009:19;:23;29928:35;-1:-1:-1;30049:19:0;;;;;:42;;;30090:1;30072:15;:19;30049:42;30045:121;;;30108:46;30121:15;30138;30108:12;:46::i;:::-;30316:18;;30262:21;;-1:-1:-1;;;;;30316:18:0;30377:3;30362:14;30262:21;30374:2;30362:14;:::i;:::-;:18;;;;:::i;:::-;30308:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30430:18:0;;30294:101;;-1:-1:-1;;;;;;30430:18:0;30491:3;30476:14;:11;30488:2;30476:14;:::i;:::-;:18;;;;:::i;:::-;30422:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30544:18:0;;30408:101;;-1:-1:-1;;;;;;30544:18:0;30605:3;30590:14;:11;30602:2;30590:14;:::i;:::-;:18;;;;:::i;:::-;30536:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29020:1613:0:o;7639:651::-;-1:-1:-1;;;;;7779:20:0;;7771:70;;;;-1:-1:-1;;;7771:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7860:23:0;;7852:71;;;;-1:-1:-1;;;7852:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7960:17:0;;7936:21;7960:17;;;;;;;;;;;8010:23;;;;7988:111;;;;-1:-1:-1;;;7988:111:0;;24607:2:1;7988:111:0;;;24589:21:1;24646:2;24626:18;;;24619:30;24685:34;24665:18;;;24658:62;-1:-1:-1;;;24736:18:1;;;24729:36;24782:19;;7988:111:0;24405:402:1;7988:111:0;-1:-1:-1;;;;;8135:17:0;;;:9;:17;;;;;;;;;;;8155:22;;;8135:42;;8199:20;;;;;;;;:30;;8171:6;;8135:9;8199:30;;8171:6;;8199:30;:::i;:::-;;;;;;;;8264:9;-1:-1:-1;;;;;8247:35:0;8256:6;-1:-1:-1;;;;;8247:35:0;;8275:6;8247:35;;;;2097:25:1;;2085:2;2070:18;;1951:177;8247:35:0;;;;;;;;7760:530;7639:651;;;:::o;19054:221::-;-1:-1:-1;;;;;19156:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;19156:52:0;;;;;;;;;;19224:43;;24980:51:1;;;25047:18;;;25040:50;19224:43:0;;24953:18:1;19224:43:0;;;;;;;19054:221;;:::o;27249:571::-;27399:16;;;27413:1;27399:16;;;;;;;;27375:21;;27399:16;;;;;;;;;;-1:-1:-1;27399:16:0;27375:40;;27444:4;27426;27431:1;27426:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27426:23:0;;;:7;;;;;;;;;;:23;;;;27470:9;;:16;;;-1:-1:-1;;;27470:16:0;;;;:9;;;;;:14;;:16;;;;;27426:7;;27470:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27460:4;27465:1;27460:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27460:26:0;;;:7;;;;;;;;;:26;27531:9;;27499:56;;27516:4;;27531:9;27543:11;27499:8;:56::i;:::-;27594:9;;:218;;-1:-1:-1;;;27594:218:0;;-1:-1:-1;;;;;27594:9:0;;;;:60;;:218;;27669:11;;27594:9;;27739:4;;27766;;27786:15;;27594:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27304:516;27249:571;:::o;27828:511::-;28008:9;;27976:56;;27993:4;;-1:-1:-1;;;;;28008:9:0;28020:11;27976:8;:56::i;:::-;28075:9;;28273:17;;28075:256;;-1:-1:-1;;;28075:256:0;;-1:-1:-1;;;;;28075:9:0;;;;:25;;28108:9;;28075:256;;28141:4;;28161:11;;28075:9;;;;28273:17;;28305:15;;28075:256;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:597::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;705:6;702:1;699:13;696:91;;;775:1;770:2;761:6;750:9;746:22;742:31;735:42;696:91;-1:-1:-1;848:2:1;827:15;-1:-1:-1;;823:29:1;808:45;;;;855:2;804:54;;267:597;-1:-1:-1;;;267:597:1:o;1095:131::-;-1:-1:-1;;;;;1170:31:1;;1160:42;;1150:70;;1216:1;1213;1206:12;1150:70;1095:131;:::o;1231:315::-;1299:6;1307;1360:2;1348:9;1339:7;1335:23;1331:32;1328:52;;;1376:1;1373;1366:12;1328:52;1415:9;1402:23;1434:31;1459:5;1434:31;:::i;:::-;1484:5;1536:2;1521:18;;;;1508:32;;-1:-1:-1;;;1231:315:1:o;2133:247::-;2192:6;2245:2;2233:9;2224:7;2220:23;2216:32;2213:52;;;2261:1;2258;2251:12;2213:52;2300:9;2287:23;2319:31;2344:5;2319:31;:::i;:::-;2369:5;2133:247;-1:-1:-1;;;2133:247:1:o;2385:456::-;2462:6;2470;2478;2531:2;2519:9;2510:7;2506:23;2502:32;2499:52;;;2547:1;2544;2537:12;2499:52;2586:9;2573:23;2605:31;2630:5;2605:31;:::i;:::-;2655:5;-1:-1:-1;2712:2:1;2697:18;;2684:32;2725:33;2684:32;2725:33;:::i;:::-;2385:456;;2777:7;;-1:-1:-1;;;2831:2:1;2816:18;;;;2803:32;;2385:456::o;2846:180::-;2905:6;2958:2;2946:9;2937:7;2933:23;2929:32;2926:52;;;2974:1;2971;2964:12;2926:52;-1:-1:-1;2997:23:1;;2846:180;-1:-1:-1;2846:180:1:o;3220:118::-;3306:5;3299:13;3292:21;3285:5;3282:32;3272:60;;3328:1;3325;3318:12;3343:382;3408:6;3416;3469:2;3457:9;3448:7;3444:23;3440:32;3437:52;;;3485:1;3482;3475:12;3437:52;3524:9;3511:23;3543:31;3568:5;3543:31;:::i;:::-;3593:5;-1:-1:-1;3650:2:1;3635:18;;3622:32;3663:30;3622:32;3663:30;:::i;:::-;3712:7;3702:17;;;3343:382;;;;;:::o;3730:241::-;3786:6;3839:2;3827:9;3818:7;3814:23;3810:32;3807:52;;;3855:1;3852;3845:12;3807:52;3894:9;3881:23;3913:28;3935:5;3913:28;:::i;3976:388::-;4044:6;4052;4105:2;4093:9;4084:7;4080:23;4076:32;4073:52;;;4121:1;4118;4111:12;4073:52;4160:9;4147:23;4179:31;4204:5;4179:31;:::i;:::-;4229:5;-1:-1:-1;4286:2:1;4271:18;;4258:32;4299:33;4258:32;4299:33;:::i;4369:461::-;4422:3;4460:5;4454:12;4487:6;4482:3;4475:19;4513:4;4542:2;4537:3;4533:12;4526:19;;4579:2;4572:5;4568:14;4600:1;4610:195;4624:6;4621:1;4618:13;4610:195;;;4689:13;;-1:-1:-1;;;;;4685:39:1;4673:52;;4745:12;;;;4780:15;;;;4721:1;4639:9;4610:195;;;-1:-1:-1;4821:3:1;;4369:461;-1:-1:-1;;;;;4369:461:1:o;4835:261::-;5014:2;5003:9;4996:21;4977:4;5034:56;5086:2;5075:9;5071:18;5063:6;5034:56;:::i;5101:529::-;5178:6;5186;5194;5247:2;5235:9;5226:7;5222:23;5218:32;5215:52;;;5263:1;5260;5253:12;5215:52;5302:9;5289:23;5321:31;5346:5;5321:31;:::i;:::-;5371:5;-1:-1:-1;5428:2:1;5413:18;;5400:32;5441:33;5400:32;5441:33;:::i;:::-;5493:7;-1:-1:-1;5552:2:1;5537:18;;5524:32;5565:33;5524:32;5565:33;:::i;:::-;5617:7;5607:17;;;5101:529;;;;;:::o;5635:356::-;5837:2;5819:21;;;5856:18;;;5849:30;5915:34;5910:2;5895:18;;5888:62;5982:2;5967:18;;5635:356::o;5996:127::-;6057:10;6052:3;6048:20;6045:1;6038:31;6088:4;6085:1;6078:15;6112:4;6109:1;6102:15;6128:128;6168:3;6199:1;6195:6;6192:1;6189:13;6186:39;;;6205:18;;:::i;:::-;-1:-1:-1;6241:9:1;;6128:128::o;6618:380::-;6697:1;6693:12;;;;6740;;;6761:61;;6815:4;6807:6;6803:17;6793:27;;6761:61;6868:2;6860:6;6857:14;6837:18;6834:38;6831:161;;6914:10;6909:3;6905:20;6902:1;6895:31;6949:4;6946:1;6939:15;6977:4;6974:1;6967:15;6831:161;;6618:380;;;:::o;7767:168::-;7807:7;7873:1;7869;7865:6;7861:14;7858:1;7855:21;7850:1;7843:9;7836:17;7832:45;7829:71;;;7880:18;;:::i;:::-;-1:-1:-1;7920:9:1;;7767:168::o;7940:217::-;7980:1;8006;7996:132;;8050:10;8045:3;8041:20;8038:1;8031:31;8085:4;8082:1;8075:15;8113:4;8110:1;8103:15;7996:132;-1:-1:-1;8142:9:1;;7940:217::o;11229:184::-;11299:6;11352:2;11340:9;11331:7;11327:23;11323:32;11320:52;;;11368:1;11365;11358:12;11320:52;-1:-1:-1;11391:16:1;;11229:184;-1:-1:-1;11229:184:1:o;11697:245::-;11764:6;11817:2;11805:9;11796:7;11792:23;11788:32;11785:52;;;11833:1;11830;11823:12;11785:52;11865:9;11859:16;11884:28;11906:5;11884:28;:::i;14708:607::-;-1:-1:-1;;;;;15067:15:1;;;15049:34;;15114:2;15099:18;;15092:34;;;;15157:2;15142:18;;15135:34;;;;15200:2;15185:18;;15178:34;;;;15249:15;;;15243:3;15228:19;;15221:44;15029:3;15281:19;;15274:35;;;;14998:3;14983:19;;14708:607::o;15320:306::-;15408:6;15416;15424;15477:2;15465:9;15456:7;15452:23;15448:32;15445:52;;;15493:1;15490;15483:12;15445:52;15522:9;15516:16;15506:26;;15572:2;15561:9;15557:18;15551:25;15541:35;;15616:2;15605:9;15601:18;15595:25;15585:35;;15320:306;;;;;:::o;18667:245::-;18746:6;18754;18807:2;18795:9;18786:7;18782:23;18778:32;18775:52;;;18823:1;18820;18813:12;18775:52;-1:-1:-1;;18846:16:1;;18902:2;18887:18;;;18881:25;18846:16;;18881:25;;-1:-1:-1;18667:245:1:o;20342:401::-;20544:2;20526:21;;;20583:2;20563:18;;;20556:30;20622:34;20617:2;20602:18;;20595:62;-1:-1:-1;;;20688:2:1;20673:18;;20666:35;20733:3;20718:19;;20342:401::o;20748:399::-;20950:2;20932:21;;;20989:2;20969:18;;;20962:30;21028:34;21023:2;21008:18;;21001:62;-1:-1:-1;;;21094:2:1;21079:18;;21072:33;21137:3;21122:19;;20748:399::o;22340:125::-;22380:4;22408:1;22405;22402:8;22399:34;;;22413:18;;:::i;:::-;-1:-1:-1;22450:9:1;;22340:125::o;25233:127::-;25294:10;25289:3;25285:20;25282:1;25275:31;25325:4;25322:1;25315:15;25349:4;25346:1;25339:15;25365:251;25435:6;25488:2;25476:9;25467:7;25463:23;25459:32;25456:52;;;25504:1;25501;25494:12;25456:52;25536:9;25530:16;25555:31;25580:5;25555:31;:::i;25621:582::-;25920:6;25909:9;25902:25;25963:6;25958:2;25947:9;25943:18;25936:34;26006:3;26001:2;25990:9;25986:18;25979:31;25883:4;26027:57;26079:3;26068:9;26064:19;26056:6;26027:57;:::i;:::-;-1:-1:-1;;;;;26120:32:1;;;;26115:2;26100:18;;26093:60;-1:-1:-1;26184:3:1;26169:19;26162:35;26019:65;25621:582;-1:-1:-1;;;25621:582:1:o

Swarm Source

ipfs://43f7bd628ccb31289b7018ab177f772d46b6eef2241e62033fc0999c5e189f45
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.