ETH Price: $3,252.97 (-3.64%)

Token

Locker Token (LKT)
 

Overview

Max Total Supply

1,000,000,000 LKT

Holders

531 ( -0.188%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 LKT

Value
$0.00
0x79287bd5bffaa27f1f8d56b102ffc5ece5c69e04
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Locker Token ecosystem is the gateway for professional sports teams to enter the New Digital World. Whitelabel solutions and professional Web3 Integration assistance.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LKT

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-17
*/

// SPDX-License-Identifier: MIT
/*
 *     __    ____  ________ __ __________
 *    / /   / __ \/ ____/ //_// ____/ __ \
 *   / /   / / / / /   / ,<  / __/ / /_/ /
 *  / /___/ /_/ / /___/ /| |/ /___/ _, _/
 * /_____/\____/\____/_/ |_/_____/_/ |_|
 *
 *
 * TG:  https://t.me/lockertoken_public
 * WEB: https://locker-token.com
 * TW:  https://twitter.com/lockertoken
 *
 * LOCKER migration from: 0x1cc29ee9dd8d9ed4148f6600ba5ec84d7ee85d12
 *
 * CONTRACT DEV: @seanking52
 * 
 */
pragma solidity 0.8.17;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

interface ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;

    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;
    bool public earlyBuyerAdditionEnabled = true; // Can only be disabled!

    // 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 originalSellOperationsFee;
    uint256 private originalSellLiquidityFee;

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

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    event DisabledAddingEarlyBuyersForever();

    constructor() payable ERC20("Locker Token", "LKT") {
        address newOwner = msg.sender; // can leave alone if owner is deployer.

        address _dexRouter;

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

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

        maxBuyAmount = (totalSupply * 25) / 10000; // 0.25%
        maxSellAmount = (totalSupply * 25) / 10000; // 0.25%
        maxWallet = (totalSupply * 15) / 1000; // 1.5%
        swapTokensAtAmount = (totalSupply * 2) / 10000; // 0.02 %

        buyOperationsFee = 7;
        buyLiquidityFee = 2;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        originalSellOperationsFee = 7;
        originalSellLiquidityFee = 2;

        sellOperationsFee = 12; // increased sell tax at launch
        sellLiquidityFee = 3;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;

        operationsAddress = address(0x258cb94167f233D2E6cf1C868873164321064664);

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

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

        _createInitialSupply(
            address(0x258cb94167f233D2E6cf1C868873164321064664),
            (totalSupply * 83) / 100
        ); // Tokens for exchanges, additional liq, etc.
        _createInitialSupply(address(this), (totalSupply * 2) / 100); // Tokens for liquidity
        _createInitialSupply(newOwner, (totalSupply * 15) / 100); // Airdrop old holders

        transferOwnership(newOwner);
    }

    receive() external payable {}

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

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

    function addBoughtEarly(address wallet) external onlyOwner {
        require(
            earlyBuyerAdditionEnabled,
            "Early buyer addition has been disabled forever!!"
        );
        require(!boughtEarly[wallet], "Wallet is already flagged.");
        boughtEarly[wallet] = true;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    function restoreTaxes() external onlyOwner {
        buyOperationsFee = originalSellOperationsFee;
        buyLiquidityFee = originalSellLiquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

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

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

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

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

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

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

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

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

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

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

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

    function setOperationsAddress(address _operationsAddress)
        external
        onlyOwner
    {
        require(
            _operationsAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }

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

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

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

    function addLP(bool confirmAddLp) external onlyOwner {
        require(confirmAddLp, "Please confirm adding of the LP");
        require(!tradingActive, "Trading is already active, cannot relaunch.");

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

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

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

    function launch(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(
            blocksForPenalty < 10,
            "Cannot make penalty blocks more than 10"
        );

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

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

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

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

    function airdropToWallets(
        address[] memory wallets,
        uint256[] memory amountsInTokens
    ) external onlyOwner {
        require(
            wallets.length == amountsInTokens.length,
            "arrays must be the same length"
        );
        require(
            wallets.length < 200,
            "Can only airdrop 200 wallets per txn due to gas limits"
        ); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for (uint256 i = 0; i < wallets.length; i++) {
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }

    /**
     * This function will disable the possibility to add early buyers FOREVER
     */
    function disableAddingEarlyBuyersForever(bool confirmDisableFeatureForever)
        external
        onlyOwner
    {
        require(confirmDisableFeatureForever, "Please confirm");
        require(earlyBuyerAdditionEnabled, "Already disabled forever!");
        earlyBuyerAdditionEnabled = false;
        emit DisabledAddingEarlyBuyersForever();
    }
}

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":"DisabledAddingEarlyBuyersForever","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"addBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmAddLp","type":"bool"}],"name":"addLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"bool","name":"confirmDisableFeatureForever","type":"bool"}],"name":"disableAddingEarlyBuyersForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyBuyerAdditionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreTaxes","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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","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"}]

6000600d556012805463ffffffff191663010000011790556014805460ff19166001179055600c60809081526b2637b1b5b2b9102a37b5b2b760a11b60a052610100604052600360c0818152621312d560ea1b60e052906200006283826200093e565b5060046200007182826200093e565b5050506000620000866200053c60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004b2f833981519152908290a35033600046600103620000eb5750737a250d5630b4cf539739df2c5dacb4c659f2488d6200015d565b46600503620001105750737a250d5630b4cf539739df2c5dacb4c659f2488d6200015d565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dd919062000a0a565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000240573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000266919062000a0a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da919062000a0a565b600a80546001600160a01b0319166001600160a01b039290921691821790556200030690600162000540565b600a546200031f906001600160a01b03166001620005a1565b6b033b2e3c9fd0803ce80000006127106200033c82601962000a52565b62000348919062000a72565b6006556127106200035b82601962000a52565b62000367919062000a72565b6007556103e86200037a82600f62000a52565b62000386919062000a72565b6008556127106200039982600262000a52565b620003a5919062000a72565b600b556007601681905560026017819055620003c19162000a95565b60155560076018556002601955600c601b8190556003601c819055620003e79162000a95565b601a55600c80546001600160a01b03191673258cb94167f233d2e6cf1c8688731643210646641790556200041d83600162000540565b6200042a30600162000540565b6200043961dead600162000540565b600c5462000452906001600160a01b0316600162000540565b6009546200046b906001600160a01b0316600162000540565b620004788360016200060d565b620004853060016200060d565b6200049461dead60016200060d565b600c54620004ad906001600160a01b031660016200060d565b600954620004c6906001600160a01b031660016200060d565b6200050073258cb94167f233d2e6cf1c8688731643210646646064620004ee84605362000a52565b620004fa919062000a72565b620006b7565b62000514306064620004ee84600262000a52565b62000528836064620004ee84600f62000a52565b62000533836200079c565b50505062000aab565b3390565b6001600160a01b03821660008181526020808052604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602160205260409020805460ff1916821515179055620005d1828262000540565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006585760405162461bcd60e51b8152602060048201819052602482015260008051602062004b0f833981519152604482015260640162000154565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200070f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000154565b806002600082825462000723919062000a95565b90915550506001600160a01b038216600090815260208190526040812080548392906200075290849062000a95565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007e75760405162461bcd60e51b8152602060048201819052602482015260008051602062004b0f833981519152604482015260640162000154565b6001600160a01b0381166200084e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000154565b6005546040516001600160a01b0380841692169060008051602062004b2f83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008c457607f821691505b602082108103620008e557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200093957600081815260208120601f850160051c81016020861015620009145750805b601f850160051c820191505b81811015620009355782815560010162000920565b5050505b505050565b81516001600160401b038111156200095a576200095a62000899565b62000972816200096b8454620008af565b84620008eb565b602080601f831160018114620009aa5760008415620009915750858301515b600019600386901b1c1916600185901b17855562000935565b600085815260208120601f198616915b82811015620009db57888601518255948401946001909101908401620009ba565b5085821015620009fa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a1d57600080fd5b81516001600160a01b038116811462000a3557600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a6c5762000a6c62000a3c565b92915050565b60008262000a9057634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a6c5762000a6c62000a3c565b6140548062000abb6000396000f3fe6080604052600436106103f35760003560e01c806382aa7c6811610208578063c18bc19511610118578063ea4cfe12116100ab578063f2fde38b1161007a578063f2fde38b14610b95578063f5648a4f14610bb5578063f637434214610bca578063f8b45b0514610be0578063fb002c9714610bf657600080fd5b8063ea4cfe1214610b29578063eb472fc414610b49578063ee40166e14610b69578063f11a24d314610b7f57600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f14610a98578063dd62ed3e14610ab8578063e2f4560514610afe578063e884f26014610b1457600080fd5b8063c18bc19514610a28578063c876d0b914610a48578063d257b34f14610a62578063d85ba06314610a8257600080fd5b80639a7a23d61161019b578063a9059cbb1161016a578063a9059cbb14610979578063b62496f514610999578063b9875539146109c9578063bbc0c742146109e9578063c024666814610a0857600080fd5b80639a7a23d61461090e578063a28e86d31461092e578063a457c2d714610943578063a62068ce1461096357600080fd5b806388e765ff116101d757806388e765ff146108a35780638da5cb5b146108b957806395d89b41146108d75780639a5bd2dd146108ec57600080fd5b806382aa7c68146108135780638366e79a1461083357806385b12c7c1461085357806385ecfd281461087357600080fd5b8063499b83941161030357806366ca9b83116102965780636ddd1713116102655780636ddd17131461077e57806370a082311461079e578063751039fc146107be5780637571336a146107d35780637e926b4b146107f357600080fd5b806366ca9b831461071c57806366d602ae1461073c5780636a486a8e146107525780636b0a894c1461076857600080fd5b806358a6d531116102d257806358a6d531146106ba5780635a139dd4146106d15780635bb988c9146106e75780635eed98e21461070757600080fd5b8063499b8394146106555780634a62bb65146106755780634f77f6c01461068f57806351f205e4146106a557600080fd5b80632307b4411161038657806337d2e67e1161035557806337d2e67e146105b457806339509351146105d557806340755c79146105f5578063452ed4f114610615578063474c1a531461063557600080fd5b80632307b4411461053857806323b872dd146105585780632be32b6114610578578063313ce5671461059857600080fd5b806310d5de53116103c257806310d5de53146104b45780631805805b146104e357806318160ddd146105035780631a8145bb1461052257600080fd5b806302dbd8f8146103ff57806306fdde03146104215780630758d9241461044c578063095ea7b31461048457600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b5061041f61041a3660046138b9565b610c0c565b005b34801561042d57600080fd5b50610436610cac565b60405161044391906138db565b60405180910390f35b34801561045857600080fd5b5060095461046c906001600160a01b031681565b6040516001600160a01b039091168152602001610443565b34801561049057600080fd5b506104a461049f366004613941565b610d3e565b6040519015158152602001610443565b3480156104c057600080fd5b506104a46104cf36600461396d565b602080526000908152604090205460ff1681565b3480156104ef57600080fd5b5061041f6104fe36600461396d565b610d55565b34801561050f57600080fd5b506002545b604051908152602001610443565b34801561052e57600080fd5b50610514601e5481565b34801561054457600080fd5b5061041f610553366004613a67565b610e0b565b34801561056457600080fd5b506104a4610573366004613b29565b610f63565b34801561058457600080fd5b5061041f610593366004613b6a565b61100d565b3480156105a457600080fd5b5060405160128152602001610443565b3480156105c057600080fd5b506012546104a4906301000000900460ff1681565b3480156105e157600080fd5b506104a46105f0366004613941565b61116c565b34801561060157600080fd5b5061041f61061036600461396d565b6111a8565b34801561062157600080fd5b50600a5461046c906001600160a01b031681565b34801561064157600080fd5b5061041f610650366004613b91565b6112d1565b34801561066157600080fd5b5061041f61067036600461396d565b6113cb565b34801561068157600080fd5b506012546104a49060ff1681565b34801561069b57600080fd5b50610514601b5481565b3480156106b157600080fd5b5061041f6114a4565b3480156106c657600080fd5b50600e5443106104a4565b3480156106dd57600080fd5b5061051460165481565b3480156106f357600080fd5b5061041f61070236600461396d565b6115ad565b34801561071357600080fd5b5061041f611660565b34801561072857600080fd5b5061041f6107373660046138b9565b6116c4565b34801561074857600080fd5b5061051460075481565b34801561075e57600080fd5b50610514601a5481565b34801561077457600080fd5b5061051460115481565b34801561078a57600080fd5b506012546104a49062010000900460ff1681565b3480156107aa57600080fd5b506105146107b936600461396d565b611757565b3480156107ca57600080fd5b5061041f611772565b3480156107df57600080fd5b5061041f6107ee366004613bae565b6117a8565b3480156107ff57600080fd5b5061041f61080e366004613b91565b61186f565b34801561081f57600080fd5b5061041f61082e366004613b6a565b611931565b34801561083f57600080fd5b506104a461084e366004613be7565b611a25565b34801561085f57600080fd5b5061041f61086e366004613b6a565b611c5f565b34801561087f57600080fd5b506104a461088e36600461396d565b600f6020526000908152604090205460ff1681565b3480156108af57600080fd5b5061051460065481565b3480156108c557600080fd5b506005546001600160a01b031661046c565b3480156108e357600080fd5b50610436611e4c565b3480156108f857600080fd5b50610901611e5b565b6040516104439190613c59565b34801561091a57600080fd5b5061041f610929366004613bae565b611ebc565b34801561093a57600080fd5b5061041f611fb0565b34801561094f57600080fd5b506104a461095e366004613941565b611fe9565b34801561096f57600080fd5b50610514600e5481565b34801561098557600080fd5b506104a4610994366004613941565b612082565b3480156109a557600080fd5b506104a46109b436600461396d565b60216020526000908152604090205460ff1681565b3480156109d557600080fd5b5061041f6109e4366004613b91565b61208f565b3480156109f557600080fd5b506012546104a490610100900460ff1681565b348015610a1457600080fd5b5061041f610a23366004613bae565b61214e565b348015610a3457600080fd5b5061041f610a43366004613b6a565b6121d7565b348015610a5457600080fd5b506014546104a49060ff1681565b348015610a6e57600080fd5b5061041f610a7d366004613b6a565b612376565b348015610a8e57600080fd5b5061051460155481565b348015610aa457600080fd5b5061041f610ab3366004613b6a565b6124c1565b348015610ac457600080fd5b50610514610ad3366004613be7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b0a57600080fd5b50610514600b5481565b348015610b2057600080fd5b5061041f612619565b348015610b3557600080fd5b50600c5461046c906001600160a01b031681565b348015610b5557600080fd5b5061046c610b64366004613b6a565b61264f565b348015610b7557600080fd5b50610514600d5481565b348015610b8b57600080fd5b5061051460175481565b348015610ba157600080fd5b5061041f610bb036600461396d565b612679565b348015610bc157600080fd5b5061041f612764565b348015610bd657600080fd5b50610514601c5481565b348015610bec57600080fd5b5061051460085481565b348015610c0257600080fd5b50610514601d5481565b6005546001600160a01b03163314610c3f5760405162461bcd60e51b8152600401610c3690613c6c565b60405180910390fd5b601b829055601c819055610c538183613cb7565b601a81905560141015610ca85760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c36565b5050565b606060038054610cbb90613cca565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce790613cca565b8015610d345780601f10610d0957610100808354040283529160200191610d34565b820191906000526020600020905b815481529060010190602001808311610d1757829003601f168201915b5050505050905090565b6000610d4b3384846127d0565b5060015b92915050565b6005546001600160a01b03163314610d7f5760405162461bcd60e51b8152600401610c3690613c6c565b601254610100900460ff1615610de95760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610c36565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e355760405162461bcd60e51b8152600401610c3690613c6c565b8051825114610e865760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c36565b60c8825110610ef65760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c36565b60005b8251811015610f5e576000838281518110610f1657610f16613d04565b602002602001015190506000838381518110610f3457610f34613d04565b60200260200101519050610f493383836128f4565b50508080610f5690613d1a565b915050610ef9565b505050565b6000610f70848484612a49565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ff55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c36565b61100285338584036127d0565b506001949350505050565b6005546001600160a01b031633146110375760405162461bcd60e51b8152600401610c3690613c6c565b670de0b6b3a764000061271061104c60025490565b611057906019613d33565b6110619190613d4a565b61106b9190613d4a565b81101561108a5760405162461bcd60e51b8152600401610c3690613d6c565b670de0b6b3a7640000606461109e60025490565b6110a9906002613d33565b6110b39190613d4a565b6110bd9190613d4a565b81111561111e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610c36565b61113081670de0b6b3a7640000613d33565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d4b9185906111a3908690613cb7565b6127d0565b6005546001600160a01b031633146111d25760405162461bcd60e51b8152600401610c3690613c6c565b6012546301000000900460ff166112445760405162461bcd60e51b815260206004820152603060248201527f4561726c79206275796572206164646974696f6e20686173206265656e20646960448201526f7361626c656420666f7265766572212160801b6064820152608401610c36565b6001600160a01b0381166000908152600f602052604090205460ff16156112ad5760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610c36565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6005546001600160a01b031633146112fb5760405162461bcd60e51b8152600401610c3690613c6c565b806113395760405162461bcd60e51b815260206004820152600e60248201526d506c6561736520636f6e6669726d60901b6044820152606401610c36565b6012546301000000900460ff166113925760405162461bcd60e51b815260206004820152601960248201527f416c72656164792064697361626c656420666f726576657221000000000000006044820152606401610c36565b6012805463ff000000191690556040517f0fffc7f08e7698aa61f39199012c821543295ceb152216ad71727b17c1cf35b590600090a150565b6005546001600160a01b031633146113f55760405162461bcd60e51b8152600401610c3690613c6c565b6001600160a01b03811661145a5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c36565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146114ce5760405162461bcd60e51b8152600401610c3690613c6c565b600b546114da30611757565b1015611550576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c36565b600a805460ff60a01b1916600160a01b17905561156b6134cd565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115d75760405162461bcd60e51b8152600401610c3690613c6c565b6001600160a01b0381166000908152600f602052604090205460ff1661163f5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610c36565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b0316331461168a5760405162461bcd60e51b8152600401610c3690613c6c565b601854601681905560195460178190556116a391613cb7565b601555601854601b819055601954601c8190556116bf91613cb7565b601a55565b6005546001600160a01b031633146116ee5760405162461bcd60e51b8152600401610c3690613c6c565b601682905560178190556117028183613cb7565b6015819055600f1015610ca85760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c36565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461179c5760405162461bcd60e51b8152600401610c3690613c6c565b6012805460ff19169055565b6005546001600160a01b031633146117d25760405162461bcd60e51b8152600401610c3690613c6c565b8061184557600a546001600160a01b03908116908316036118455760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c36565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b031633146118995760405162461bcd60e51b8152600401610c3690613c6c565b806118e65760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610c36565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b0316331461195b5760405162461bcd60e51b8152600401610c3690613c6c565b601254610100900460ff16156119b35760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c36565b600a8111156119d45760405162461bcd60e51b8152600401610c3690613db6565b6012805462ffff0019166201010017905543600d8190556119f6908290613cb7565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611a525760405162461bcd60e51b8152600401610c3690613c6c565b6001600160a01b038316611aa85760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c36565b6001600160a01b03831630141580611ac85750601254610100900460ff16155b611b315760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610c36565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c9190613dfd565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c139190613e16565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611c895760405162461bcd60e51b8152600401610c3690613c6c565b601254610100900460ff1615611cb15760405162461bcd60e51b8152600401610c3690613e33565b600a8110611cd15760405162461bcd60e51b8152600401610c3690613db6565b6012805462ffff0019166201010017905543600d819055611cf3908290613cb7565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a160004711611d3f5760405162461bcd60e51b8152600401610c3690613e7e565b6000611d4a30611757565b11611da65760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610c36565b600954611dc19030906001600160a01b03166111a382611757565b6009546001600160a01b031663f305d7194730611ddd81611757565b60008033426040518863ffffffff1660e01b8152600401611e0396959493929190613ec1565b60606040518083038185885af1158015611e21573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e469190613efc565b50505050565b606060048054610cbb90613cca565b60606010805480602002602001604051908101604052809291908181526020018280548015610d3457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611e95575050505050905090565b6005546001600160a01b03163314611ee65760405162461bcd60e51b8152600401610c3690613c6c565b600a546001600160a01b0390811690831603611f6a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c36565b611f74828261362f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611fda5760405162461bcd60e51b8152600401610c3690613c6c565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561206b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c36565b61207833858584036127d0565b5060019392505050565b6000610d4b338484612a49565b6005546001600160a01b031633146120b95760405162461bcd60e51b8152600401610c3690613c6c565b806121065760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610c36565b601254610100900460ff161561212e5760405162461bcd60e51b8152600401610c3690613e33565b60004711611d3f5760405162461bcd60e51b8152600401610c3690613e7e565b6005546001600160a01b031633146121785760405162461bcd60e51b8152600401610c3690613c6c565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146122015760405162461bcd60e51b8152600401610c3690613c6c565b670de0b6b3a76400006103e861221660025490565b612221906005613d33565b61222b9190613d4a565b6122359190613d4a565b8110156122995760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610c36565b670de0b6b3a764000060646122ad60025490565b6122b8906002613d33565b6122c29190613d4a565b6122cc9190613d4a565b81111561232f5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20322560a81b6064820152608401610c36565b61234181670de0b6b3a7640000613d33565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611161565b6005546001600160a01b031633146123a05760405162461bcd60e51b8152600401610c3690613c6c565b620186a06123ad60025490565b6123b8906001613d33565b6123c29190613d4a565b81101561242f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c36565b6103e861243b60025490565b612446906001613d33565b6124509190613d4a565b8111156124bc5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c36565b600b55565b6005546001600160a01b031633146124eb5760405162461bcd60e51b8152600401610c3690613c6c565b670de0b6b3a764000061271061250060025490565b61250b906019613d33565b6125159190613d4a565b61251f9190613d4a565b81101561253e5760405162461bcd60e51b8152600401610c3690613d6c565b670de0b6b3a7640000606461255260025490565b61255d906002613d33565b6125679190613d4a565b6125719190613d4a565b8111156125d25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610c36565b6125e481670de0b6b3a7640000613d33565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611161565b6005546001600160a01b031633146126435760405162461bcd60e51b8152600401610c3690613c6c565b6014805460ff19169055565b6010818154811061265f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146126a35760405162461bcd60e51b8152600401610c3690613c6c565b6001600160a01b0381166127085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c36565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461278e5760405162461bcd60e51b8152600401610c3690613c6c565b604051600090339047908381818185875af1925050503d8060008114611e46576040519150601f19603f3d011682016040523d82523d6000602084013e611e46565b6001600160a01b0383166128325760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c36565b6001600160a01b0382166128935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c36565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661291a5760405162461bcd60e51b8152600401610c3690613f2a565b6001600160a01b0382166129405760405162461bcd60e51b8152600401610c3690613f6f565b6001600160a01b038316600090815260208190526040902054818110156129b85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c36565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906129ef908490613cb7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a3b91815260200190565b60405180910390a350505050565b6001600160a01b038316612a6f5760405162461bcd60e51b8152600401610c3690613f2a565b6001600160a01b038216612a955760405162461bcd60e51b8152600401610c3690613f6f565b60008111612ae55760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c36565b601254610100900460ff16612b78576001600160a01b0383166000908152601f602052604090205460ff1680612b3357506001600160a01b0382166000908152601f602052604090205460ff165b612b785760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c36565b600e544310158015612b915750601254610100900460ff165b15612c61576001600160a01b0383166000908152600f602052604090205460ff161580612bcb57506005546001600160a01b038381169116145b80612be057506001600160a01b03821661dead145b612c615760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c36565b60125460ff161561303c576005546001600160a01b03848116911614801590612c9857506005546001600160a01b03838116911614155b8015612caf57506001600160a01b03821661dead14155b8015612cd457506001600160a01b0383166000908152601f602052604090205460ff16155b8015612cf957506001600160a01b0382166000908152601f602052604090205460ff16155b1561303c5760145460ff1615612e12576009546001600160a01b03838116911614801590612d355750600a546001600160a01b03838116911614155b15612e1257612d45600243613fb2565b32600090815260136020526040902054108015612d835750612d68600243613fb2565b6001600160a01b038316600090815260136020526040902054105b612ded5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c36565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526021602052604090205460ff168015612e5257506001600160a01b038216600090815260208052604090205460ff16155b15612f1957600654811115612eba5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c36565b600854612ec683611757565b612ed09083613cb7565b1115612f145760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610c36565b61303c565b6001600160a01b03821660009081526021602052604090205460ff168015612f5957506001600160a01b038316600090815260208052604090205460ff16155b15612fc357600754811115612f145760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c36565b6001600160a01b038216600090815260208052604090205460ff1661303c57600854612fee83611757565b612ff89083613cb7565b111561303c5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610c36565b600061304730611757565b600b5490915081108015908190613066575060125462010000900460ff165b801561307c5750600a54600160a01b900460ff16155b80156130a057506001600160a01b03841660009081526021602052604090205460ff165b156130ce57600a805460ff60a01b1916600160a01b1790556130c06134cd565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601f602052604090205460019060ff168061311057506001600160a01b0385166000908152601f602052604090205460ff165b15613119575060005b600081156134b957600e5443108061315f5750670c7d713b49da00006006546131429190613fb2565b851015801561315f575043600e54600861315c9190613cb7565b10155b801561318357506001600160a01b03871660009081526021602052604090205460ff165b80156131a857506001600160a01b03861660009081526021602052604090205460ff16155b80156131cd57506001600160a01b0386166000908152601f602052604090205460ff16155b80156131db57506000601554115b1561336257600e544310613202576001600660008282546131fc9190613fb2565b90915550505b6001600160a01b0386166000908152600f602052604090205460ff166132e2576001600160a01b0386166000908152600f60205260408120805460ff19166001908117909155601180549192909161325b908490613cb7565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646132ef866063613d33565b6132f99190613d4a565b90506015546017548261330c9190613d33565b6133169190613d4a565b601e60008282546133279190613cb7565b909155505060155460165461333c9083613d33565b6133469190613d4a565b601d60008282546133579190613cb7565b9091555061349b9050565b6001600160a01b03861660009081526021602052604090205460ff16801561338c57506000601a54115b156133ee576064601a54866133a19190613d33565b6133ab9190613d4a565b9050601a54601c54826133be9190613d33565b6133c89190613d4a565b601e60008282546133d99190613cb7565b9091555050601a54601b5461333c9083613d33565b6001600160a01b03871660009081526021602052604090205460ff16801561341857506000601554115b1561349b5760646015548661342d9190613d33565b6134379190613d4a565b90506015546017548261344a9190613d33565b6134549190613d4a565b601e60008282546134659190613cb7565b909155505060155460165461347a9083613d33565b6134849190613d4a565b601d60008282546134959190613cb7565b90915550505b80156134ac576134ac8730836128f4565b6134b68186613fb2565b94505b6134c48787876128f4565b50505050505050565b60006134d830611757565b90506000601d54601e546134ec9190613cb7565b90508115806134f9575080155b15613502575050565b600b5461351090600a613d33565b82111561352857600b5461352590600a613d33565b91505b600080600283601e548661353c9190613d33565b6135469190613d4a565b6135509190613d4a565b905061356461355f8286613fb2565b61365d565b601e544790819060009061357a90600290613d4a565b6135849087613fb2565b601d546135919085613d33565b61359b9190613d4a565b90506135a78183613fb2565b6000601e819055601d55915083158015906135c25750600082115b156135d1576135d184836137b7565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461361e576040519150601f19603f3d011682016040523d82523d6000602084013e613623565b606091505b50505050505050505050565b6001600160a01b0382166000908152602160205260409020805460ff1916821515179055611f748282613858565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061369257613692613d04565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156136eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370f9190613fc5565b8160018151811061372257613722613d04565b6001600160a01b03928316602091820292909201015260095461374891309116846127d0565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613781908590600090869030904290600401613fe2565b600060405180830381600087803b15801561379b57600080fd5b505af11580156137af573d6000803e3d6000fd5b505050505050565b6009546137cf9030906001600160a01b0316846127d0565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061380e9030908790600090819061dead904290600401613ec1565b60606040518083038185885af115801561382c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138519190613efc565b5050505050565b6001600160a01b03821660008181526020808052604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600080604083850312156138cc57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015613908578581018301518582016040015282016138ec565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461393e57600080fd5b50565b6000806040838503121561395457600080fd5b823561395f81613929565b946020939093013593505050565b60006020828403121561397f57600080fd5b813561398a81613929565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139d0576139d0613991565b604052919050565b600067ffffffffffffffff8211156139f2576139f2613991565b5060051b60200190565b600082601f830112613a0d57600080fd5b81356020613a22613a1d836139d8565b6139a7565b82815260059290921b84018101918181019086841115613a4157600080fd5b8286015b84811015613a5c5780358352918301918301613a45565b509695505050505050565b60008060408385031215613a7a57600080fd5b823567ffffffffffffffff80821115613a9257600080fd5b818501915085601f830112613aa657600080fd5b81356020613ab6613a1d836139d8565b82815260059290921b84018101918181019089841115613ad557600080fd5b948201945b83861015613afc578535613aed81613929565b82529482019490820190613ada565b96505086013592505080821115613b1257600080fd5b50613b1f858286016139fc565b9150509250929050565b600080600060608486031215613b3e57600080fd5b8335613b4981613929565b92506020840135613b5981613929565b929592945050506040919091013590565b600060208284031215613b7c57600080fd5b5035919050565b801515811461393e57600080fd5b600060208284031215613ba357600080fd5b813561398a81613b83565b60008060408385031215613bc157600080fd5b8235613bcc81613929565b91506020830135613bdc81613b83565b809150509250929050565b60008060408385031215613bfa57600080fd5b8235613c0581613929565b91506020830135613bdc81613929565b600081518084526020808501945080840160005b83811015613c4e5781516001600160a01b031687529582019590820190600101613c29565b509495945050505050565b60208152600061398a6020830184613c15565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610d4f57610d4f613ca1565b600181811c90821680613cde57607f821691505b602082108103613cfe57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201613d2c57613d2c613ca1565b5060010190565b8082028115828204841417610d4f57610d4f613ca1565b600082613d6757634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602a908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152697468616e20302e32352560b01b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b600060208284031215613e0f57600080fd5b5051919050565b600060208284031215613e2857600080fd5b815161398a81613b83565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613f1157600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d4f57610d4f613ca1565b600060208284031215613fd757600080fd5b815161398a81613929565b85815284602082015260a06040820152600061400160a0830186613c15565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212202d30c1ec20c762150c882f3c250e468766a0f0cba4b8e21ae05e8823de31d7b864736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103f35760003560e01c806382aa7c6811610208578063c18bc19511610118578063ea4cfe12116100ab578063f2fde38b1161007a578063f2fde38b14610b95578063f5648a4f14610bb5578063f637434214610bca578063f8b45b0514610be0578063fb002c9714610bf657600080fd5b8063ea4cfe1214610b29578063eb472fc414610b49578063ee40166e14610b69578063f11a24d314610b7f57600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f14610a98578063dd62ed3e14610ab8578063e2f4560514610afe578063e884f26014610b1457600080fd5b8063c18bc19514610a28578063c876d0b914610a48578063d257b34f14610a62578063d85ba06314610a8257600080fd5b80639a7a23d61161019b578063a9059cbb1161016a578063a9059cbb14610979578063b62496f514610999578063b9875539146109c9578063bbc0c742146109e9578063c024666814610a0857600080fd5b80639a7a23d61461090e578063a28e86d31461092e578063a457c2d714610943578063a62068ce1461096357600080fd5b806388e765ff116101d757806388e765ff146108a35780638da5cb5b146108b957806395d89b41146108d75780639a5bd2dd146108ec57600080fd5b806382aa7c68146108135780638366e79a1461083357806385b12c7c1461085357806385ecfd281461087357600080fd5b8063499b83941161030357806366ca9b83116102965780636ddd1713116102655780636ddd17131461077e57806370a082311461079e578063751039fc146107be5780637571336a146107d35780637e926b4b146107f357600080fd5b806366ca9b831461071c57806366d602ae1461073c5780636a486a8e146107525780636b0a894c1461076857600080fd5b806358a6d531116102d257806358a6d531146106ba5780635a139dd4146106d15780635bb988c9146106e75780635eed98e21461070757600080fd5b8063499b8394146106555780634a62bb65146106755780634f77f6c01461068f57806351f205e4146106a557600080fd5b80632307b4411161038657806337d2e67e1161035557806337d2e67e146105b457806339509351146105d557806340755c79146105f5578063452ed4f114610615578063474c1a531461063557600080fd5b80632307b4411461053857806323b872dd146105585780632be32b6114610578578063313ce5671461059857600080fd5b806310d5de53116103c257806310d5de53146104b45780631805805b146104e357806318160ddd146105035780631a8145bb1461052257600080fd5b806302dbd8f8146103ff57806306fdde03146104215780630758d9241461044c578063095ea7b31461048457600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b5061041f61041a3660046138b9565b610c0c565b005b34801561042d57600080fd5b50610436610cac565b60405161044391906138db565b60405180910390f35b34801561045857600080fd5b5060095461046c906001600160a01b031681565b6040516001600160a01b039091168152602001610443565b34801561049057600080fd5b506104a461049f366004613941565b610d3e565b6040519015158152602001610443565b3480156104c057600080fd5b506104a46104cf36600461396d565b602080526000908152604090205460ff1681565b3480156104ef57600080fd5b5061041f6104fe36600461396d565b610d55565b34801561050f57600080fd5b506002545b604051908152602001610443565b34801561052e57600080fd5b50610514601e5481565b34801561054457600080fd5b5061041f610553366004613a67565b610e0b565b34801561056457600080fd5b506104a4610573366004613b29565b610f63565b34801561058457600080fd5b5061041f610593366004613b6a565b61100d565b3480156105a457600080fd5b5060405160128152602001610443565b3480156105c057600080fd5b506012546104a4906301000000900460ff1681565b3480156105e157600080fd5b506104a46105f0366004613941565b61116c565b34801561060157600080fd5b5061041f61061036600461396d565b6111a8565b34801561062157600080fd5b50600a5461046c906001600160a01b031681565b34801561064157600080fd5b5061041f610650366004613b91565b6112d1565b34801561066157600080fd5b5061041f61067036600461396d565b6113cb565b34801561068157600080fd5b506012546104a49060ff1681565b34801561069b57600080fd5b50610514601b5481565b3480156106b157600080fd5b5061041f6114a4565b3480156106c657600080fd5b50600e5443106104a4565b3480156106dd57600080fd5b5061051460165481565b3480156106f357600080fd5b5061041f61070236600461396d565b6115ad565b34801561071357600080fd5b5061041f611660565b34801561072857600080fd5b5061041f6107373660046138b9565b6116c4565b34801561074857600080fd5b5061051460075481565b34801561075e57600080fd5b50610514601a5481565b34801561077457600080fd5b5061051460115481565b34801561078a57600080fd5b506012546104a49062010000900460ff1681565b3480156107aa57600080fd5b506105146107b936600461396d565b611757565b3480156107ca57600080fd5b5061041f611772565b3480156107df57600080fd5b5061041f6107ee366004613bae565b6117a8565b3480156107ff57600080fd5b5061041f61080e366004613b91565b61186f565b34801561081f57600080fd5b5061041f61082e366004613b6a565b611931565b34801561083f57600080fd5b506104a461084e366004613be7565b611a25565b34801561085f57600080fd5b5061041f61086e366004613b6a565b611c5f565b34801561087f57600080fd5b506104a461088e36600461396d565b600f6020526000908152604090205460ff1681565b3480156108af57600080fd5b5061051460065481565b3480156108c557600080fd5b506005546001600160a01b031661046c565b3480156108e357600080fd5b50610436611e4c565b3480156108f857600080fd5b50610901611e5b565b6040516104439190613c59565b34801561091a57600080fd5b5061041f610929366004613bae565b611ebc565b34801561093a57600080fd5b5061041f611fb0565b34801561094f57600080fd5b506104a461095e366004613941565b611fe9565b34801561096f57600080fd5b50610514600e5481565b34801561098557600080fd5b506104a4610994366004613941565b612082565b3480156109a557600080fd5b506104a46109b436600461396d565b60216020526000908152604090205460ff1681565b3480156109d557600080fd5b5061041f6109e4366004613b91565b61208f565b3480156109f557600080fd5b506012546104a490610100900460ff1681565b348015610a1457600080fd5b5061041f610a23366004613bae565b61214e565b348015610a3457600080fd5b5061041f610a43366004613b6a565b6121d7565b348015610a5457600080fd5b506014546104a49060ff1681565b348015610a6e57600080fd5b5061041f610a7d366004613b6a565b612376565b348015610a8e57600080fd5b5061051460155481565b348015610aa457600080fd5b5061041f610ab3366004613b6a565b6124c1565b348015610ac457600080fd5b50610514610ad3366004613be7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b0a57600080fd5b50610514600b5481565b348015610b2057600080fd5b5061041f612619565b348015610b3557600080fd5b50600c5461046c906001600160a01b031681565b348015610b5557600080fd5b5061046c610b64366004613b6a565b61264f565b348015610b7557600080fd5b50610514600d5481565b348015610b8b57600080fd5b5061051460175481565b348015610ba157600080fd5b5061041f610bb036600461396d565b612679565b348015610bc157600080fd5b5061041f612764565b348015610bd657600080fd5b50610514601c5481565b348015610bec57600080fd5b5061051460085481565b348015610c0257600080fd5b50610514601d5481565b6005546001600160a01b03163314610c3f5760405162461bcd60e51b8152600401610c3690613c6c565b60405180910390fd5b601b829055601c819055610c538183613cb7565b601a81905560141015610ca85760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c36565b5050565b606060038054610cbb90613cca565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce790613cca565b8015610d345780601f10610d0957610100808354040283529160200191610d34565b820191906000526020600020905b815481529060010190602001808311610d1757829003601f168201915b5050505050905090565b6000610d4b3384846127d0565b5060015b92915050565b6005546001600160a01b03163314610d7f5760405162461bcd60e51b8152600401610c3690613c6c565b601254610100900460ff1615610de95760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610c36565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e355760405162461bcd60e51b8152600401610c3690613c6c565b8051825114610e865760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c36565b60c8825110610ef65760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c36565b60005b8251811015610f5e576000838281518110610f1657610f16613d04565b602002602001015190506000838381518110610f3457610f34613d04565b60200260200101519050610f493383836128f4565b50508080610f5690613d1a565b915050610ef9565b505050565b6000610f70848484612a49565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ff55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c36565b61100285338584036127d0565b506001949350505050565b6005546001600160a01b031633146110375760405162461bcd60e51b8152600401610c3690613c6c565b670de0b6b3a764000061271061104c60025490565b611057906019613d33565b6110619190613d4a565b61106b9190613d4a565b81101561108a5760405162461bcd60e51b8152600401610c3690613d6c565b670de0b6b3a7640000606461109e60025490565b6110a9906002613d33565b6110b39190613d4a565b6110bd9190613d4a565b81111561111e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610c36565b61113081670de0b6b3a7640000613d33565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d4b9185906111a3908690613cb7565b6127d0565b6005546001600160a01b031633146111d25760405162461bcd60e51b8152600401610c3690613c6c565b6012546301000000900460ff166112445760405162461bcd60e51b815260206004820152603060248201527f4561726c79206275796572206164646974696f6e20686173206265656e20646960448201526f7361626c656420666f7265766572212160801b6064820152608401610c36565b6001600160a01b0381166000908152600f602052604090205460ff16156112ad5760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610c36565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6005546001600160a01b031633146112fb5760405162461bcd60e51b8152600401610c3690613c6c565b806113395760405162461bcd60e51b815260206004820152600e60248201526d506c6561736520636f6e6669726d60901b6044820152606401610c36565b6012546301000000900460ff166113925760405162461bcd60e51b815260206004820152601960248201527f416c72656164792064697361626c656420666f726576657221000000000000006044820152606401610c36565b6012805463ff000000191690556040517f0fffc7f08e7698aa61f39199012c821543295ceb152216ad71727b17c1cf35b590600090a150565b6005546001600160a01b031633146113f55760405162461bcd60e51b8152600401610c3690613c6c565b6001600160a01b03811661145a5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c36565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146114ce5760405162461bcd60e51b8152600401610c3690613c6c565b600b546114da30611757565b1015611550576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c36565b600a805460ff60a01b1916600160a01b17905561156b6134cd565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115d75760405162461bcd60e51b8152600401610c3690613c6c565b6001600160a01b0381166000908152600f602052604090205460ff1661163f5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610c36565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b0316331461168a5760405162461bcd60e51b8152600401610c3690613c6c565b601854601681905560195460178190556116a391613cb7565b601555601854601b819055601954601c8190556116bf91613cb7565b601a55565b6005546001600160a01b031633146116ee5760405162461bcd60e51b8152600401610c3690613c6c565b601682905560178190556117028183613cb7565b6015819055600f1015610ca85760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c36565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461179c5760405162461bcd60e51b8152600401610c3690613c6c565b6012805460ff19169055565b6005546001600160a01b031633146117d25760405162461bcd60e51b8152600401610c3690613c6c565b8061184557600a546001600160a01b03908116908316036118455760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c36565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b031633146118995760405162461bcd60e51b8152600401610c3690613c6c565b806118e65760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610c36565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b0316331461195b5760405162461bcd60e51b8152600401610c3690613c6c565b601254610100900460ff16156119b35760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c36565b600a8111156119d45760405162461bcd60e51b8152600401610c3690613db6565b6012805462ffff0019166201010017905543600d8190556119f6908290613cb7565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611a525760405162461bcd60e51b8152600401610c3690613c6c565b6001600160a01b038316611aa85760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c36565b6001600160a01b03831630141580611ac85750601254610100900460ff16155b611b315760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610c36565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c9190613dfd565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c139190613e16565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611c895760405162461bcd60e51b8152600401610c3690613c6c565b601254610100900460ff1615611cb15760405162461bcd60e51b8152600401610c3690613e33565b600a8110611cd15760405162461bcd60e51b8152600401610c3690613db6565b6012805462ffff0019166201010017905543600d819055611cf3908290613cb7565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a160004711611d3f5760405162461bcd60e51b8152600401610c3690613e7e565b6000611d4a30611757565b11611da65760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610c36565b600954611dc19030906001600160a01b03166111a382611757565b6009546001600160a01b031663f305d7194730611ddd81611757565b60008033426040518863ffffffff1660e01b8152600401611e0396959493929190613ec1565b60606040518083038185885af1158015611e21573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e469190613efc565b50505050565b606060048054610cbb90613cca565b60606010805480602002602001604051908101604052809291908181526020018280548015610d3457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611e95575050505050905090565b6005546001600160a01b03163314611ee65760405162461bcd60e51b8152600401610c3690613c6c565b600a546001600160a01b0390811690831603611f6a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c36565b611f74828261362f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611fda5760405162461bcd60e51b8152600401610c3690613c6c565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561206b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c36565b61207833858584036127d0565b5060019392505050565b6000610d4b338484612a49565b6005546001600160a01b031633146120b95760405162461bcd60e51b8152600401610c3690613c6c565b806121065760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610c36565b601254610100900460ff161561212e5760405162461bcd60e51b8152600401610c3690613e33565b60004711611d3f5760405162461bcd60e51b8152600401610c3690613e7e565b6005546001600160a01b031633146121785760405162461bcd60e51b8152600401610c3690613c6c565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146122015760405162461bcd60e51b8152600401610c3690613c6c565b670de0b6b3a76400006103e861221660025490565b612221906005613d33565b61222b9190613d4a565b6122359190613d4a565b8110156122995760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610c36565b670de0b6b3a764000060646122ad60025490565b6122b8906002613d33565b6122c29190613d4a565b6122cc9190613d4a565b81111561232f5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20322560a81b6064820152608401610c36565b61234181670de0b6b3a7640000613d33565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611161565b6005546001600160a01b031633146123a05760405162461bcd60e51b8152600401610c3690613c6c565b620186a06123ad60025490565b6123b8906001613d33565b6123c29190613d4a565b81101561242f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c36565b6103e861243b60025490565b612446906001613d33565b6124509190613d4a565b8111156124bc5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c36565b600b55565b6005546001600160a01b031633146124eb5760405162461bcd60e51b8152600401610c3690613c6c565b670de0b6b3a764000061271061250060025490565b61250b906019613d33565b6125159190613d4a565b61251f9190613d4a565b81101561253e5760405162461bcd60e51b8152600401610c3690613d6c565b670de0b6b3a7640000606461255260025490565b61255d906002613d33565b6125679190613d4a565b6125719190613d4a565b8111156125d25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610c36565b6125e481670de0b6b3a7640000613d33565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611161565b6005546001600160a01b031633146126435760405162461bcd60e51b8152600401610c3690613c6c565b6014805460ff19169055565b6010818154811061265f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146126a35760405162461bcd60e51b8152600401610c3690613c6c565b6001600160a01b0381166127085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c36565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461278e5760405162461bcd60e51b8152600401610c3690613c6c565b604051600090339047908381818185875af1925050503d8060008114611e46576040519150601f19603f3d011682016040523d82523d6000602084013e611e46565b6001600160a01b0383166128325760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c36565b6001600160a01b0382166128935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c36565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661291a5760405162461bcd60e51b8152600401610c3690613f2a565b6001600160a01b0382166129405760405162461bcd60e51b8152600401610c3690613f6f565b6001600160a01b038316600090815260208190526040902054818110156129b85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c36565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906129ef908490613cb7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a3b91815260200190565b60405180910390a350505050565b6001600160a01b038316612a6f5760405162461bcd60e51b8152600401610c3690613f2a565b6001600160a01b038216612a955760405162461bcd60e51b8152600401610c3690613f6f565b60008111612ae55760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c36565b601254610100900460ff16612b78576001600160a01b0383166000908152601f602052604090205460ff1680612b3357506001600160a01b0382166000908152601f602052604090205460ff165b612b785760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c36565b600e544310158015612b915750601254610100900460ff165b15612c61576001600160a01b0383166000908152600f602052604090205460ff161580612bcb57506005546001600160a01b038381169116145b80612be057506001600160a01b03821661dead145b612c615760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c36565b60125460ff161561303c576005546001600160a01b03848116911614801590612c9857506005546001600160a01b03838116911614155b8015612caf57506001600160a01b03821661dead14155b8015612cd457506001600160a01b0383166000908152601f602052604090205460ff16155b8015612cf957506001600160a01b0382166000908152601f602052604090205460ff16155b1561303c5760145460ff1615612e12576009546001600160a01b03838116911614801590612d355750600a546001600160a01b03838116911614155b15612e1257612d45600243613fb2565b32600090815260136020526040902054108015612d835750612d68600243613fb2565b6001600160a01b038316600090815260136020526040902054105b612ded5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c36565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526021602052604090205460ff168015612e5257506001600160a01b038216600090815260208052604090205460ff16155b15612f1957600654811115612eba5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c36565b600854612ec683611757565b612ed09083613cb7565b1115612f145760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610c36565b61303c565b6001600160a01b03821660009081526021602052604090205460ff168015612f5957506001600160a01b038316600090815260208052604090205460ff16155b15612fc357600754811115612f145760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c36565b6001600160a01b038216600090815260208052604090205460ff1661303c57600854612fee83611757565b612ff89083613cb7565b111561303c5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610c36565b600061304730611757565b600b5490915081108015908190613066575060125462010000900460ff165b801561307c5750600a54600160a01b900460ff16155b80156130a057506001600160a01b03841660009081526021602052604090205460ff165b156130ce57600a805460ff60a01b1916600160a01b1790556130c06134cd565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601f602052604090205460019060ff168061311057506001600160a01b0385166000908152601f602052604090205460ff165b15613119575060005b600081156134b957600e5443108061315f5750670c7d713b49da00006006546131429190613fb2565b851015801561315f575043600e54600861315c9190613cb7565b10155b801561318357506001600160a01b03871660009081526021602052604090205460ff165b80156131a857506001600160a01b03861660009081526021602052604090205460ff16155b80156131cd57506001600160a01b0386166000908152601f602052604090205460ff16155b80156131db57506000601554115b1561336257600e544310613202576001600660008282546131fc9190613fb2565b90915550505b6001600160a01b0386166000908152600f602052604090205460ff166132e2576001600160a01b0386166000908152600f60205260408120805460ff19166001908117909155601180549192909161325b908490613cb7565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646132ef866063613d33565b6132f99190613d4a565b90506015546017548261330c9190613d33565b6133169190613d4a565b601e60008282546133279190613cb7565b909155505060155460165461333c9083613d33565b6133469190613d4a565b601d60008282546133579190613cb7565b9091555061349b9050565b6001600160a01b03861660009081526021602052604090205460ff16801561338c57506000601a54115b156133ee576064601a54866133a19190613d33565b6133ab9190613d4a565b9050601a54601c54826133be9190613d33565b6133c89190613d4a565b601e60008282546133d99190613cb7565b9091555050601a54601b5461333c9083613d33565b6001600160a01b03871660009081526021602052604090205460ff16801561341857506000601554115b1561349b5760646015548661342d9190613d33565b6134379190613d4a565b90506015546017548261344a9190613d33565b6134549190613d4a565b601e60008282546134659190613cb7565b909155505060155460165461347a9083613d33565b6134849190613d4a565b601d60008282546134959190613cb7565b90915550505b80156134ac576134ac8730836128f4565b6134b68186613fb2565b94505b6134c48787876128f4565b50505050505050565b60006134d830611757565b90506000601d54601e546134ec9190613cb7565b90508115806134f9575080155b15613502575050565b600b5461351090600a613d33565b82111561352857600b5461352590600a613d33565b91505b600080600283601e548661353c9190613d33565b6135469190613d4a565b6135509190613d4a565b905061356461355f8286613fb2565b61365d565b601e544790819060009061357a90600290613d4a565b6135849087613fb2565b601d546135919085613d33565b61359b9190613d4a565b90506135a78183613fb2565b6000601e819055601d55915083158015906135c25750600082115b156135d1576135d184836137b7565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461361e576040519150601f19603f3d011682016040523d82523d6000602084013e613623565b606091505b50505050505050505050565b6001600160a01b0382166000908152602160205260409020805460ff1916821515179055611f748282613858565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061369257613692613d04565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156136eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370f9190613fc5565b8160018151811061372257613722613d04565b6001600160a01b03928316602091820292909201015260095461374891309116846127d0565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613781908590600090869030904290600401613fe2565b600060405180830381600087803b15801561379b57600080fd5b505af11580156137af573d6000803e3d6000fd5b505050505050565b6009546137cf9030906001600160a01b0316846127d0565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061380e9030908790600090819061dead904290600401613ec1565b60606040518083038185885af115801561382c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138519190613efc565b5050505050565b6001600160a01b03821660008181526020808052604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600080604083850312156138cc57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015613908578581018301518582016040015282016138ec565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461393e57600080fd5b50565b6000806040838503121561395457600080fd5b823561395f81613929565b946020939093013593505050565b60006020828403121561397f57600080fd5b813561398a81613929565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139d0576139d0613991565b604052919050565b600067ffffffffffffffff8211156139f2576139f2613991565b5060051b60200190565b600082601f830112613a0d57600080fd5b81356020613a22613a1d836139d8565b6139a7565b82815260059290921b84018101918181019086841115613a4157600080fd5b8286015b84811015613a5c5780358352918301918301613a45565b509695505050505050565b60008060408385031215613a7a57600080fd5b823567ffffffffffffffff80821115613a9257600080fd5b818501915085601f830112613aa657600080fd5b81356020613ab6613a1d836139d8565b82815260059290921b84018101918181019089841115613ad557600080fd5b948201945b83861015613afc578535613aed81613929565b82529482019490820190613ada565b96505086013592505080821115613b1257600080fd5b50613b1f858286016139fc565b9150509250929050565b600080600060608486031215613b3e57600080fd5b8335613b4981613929565b92506020840135613b5981613929565b929592945050506040919091013590565b600060208284031215613b7c57600080fd5b5035919050565b801515811461393e57600080fd5b600060208284031215613ba357600080fd5b813561398a81613b83565b60008060408385031215613bc157600080fd5b8235613bcc81613929565b91506020830135613bdc81613b83565b809150509250929050565b60008060408385031215613bfa57600080fd5b8235613c0581613929565b91506020830135613bdc81613929565b600081518084526020808501945080840160005b83811015613c4e5781516001600160a01b031687529582019590820190600101613c29565b509495945050505050565b60208152600061398a6020830184613c15565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610d4f57610d4f613ca1565b600181811c90821680613cde57607f821691505b602082108103613cfe57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201613d2c57613d2c613ca1565b5060010190565b8082028115828204841417610d4f57610d4f613ca1565b600082613d6757634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602a908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152697468616e20302e32352560b01b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b600060208284031215613e0f57600080fd5b5051919050565b600060208284031215613e2857600080fd5b815161398a81613b83565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613f1157600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d4f57610d4f613ca1565b600060208284031215613fd757600080fd5b815161398a81613929565b85815284602082015260a06040820152600061400160a0830186613c15565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212202d30c1ec20c762150c882f3c250e468766a0f0cba4b8e21ae05e8823de31d7b864736f6c63430008110033

Deployed Bytecode Sourcemap

11133:24463:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21278:344;;;;;;;;;;-1:-1:-1;21278:344:0;;;;;:::i;:::-;;:::i;:::-;;4485:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11273:27;;;;;;;;;;-1:-1:-1;11273:27:0;;;;-1:-1:-1;;;;;11273:27:0;;;;;;-1:-1:-1;;;;;1002:32:1;;;984:51;;972:2;957:18;11273:27:0;820:221:1;5540:210:0;;;;;;;;;;-1:-1:-1;5540:210:0;;;;;:::i;:::-;;:::i;:::-;;;1667:14:1;;1660:22;1642:41;;1630:2;1615:18;5540:210:0;1502:187:1;12651:63:0;;;;;;;;;;-1:-1:-1;12651:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17491:194;;;;;;;;;;-1:-1:-1;17491:194:0;;;;;:::i;:::-;;:::i;4806:108::-;;;;;;;;;;-1:-1:-1;4894:12:0;;4806:108;;;2092:25:1;;;2080:2;2065:18;4806:108:0;1946:177:1;12469:33:0;;;;;;;;;;;;;;;;34409:719;;;;;;;;;;-1:-1:-1;34409:719:0;;;;;:::i;:::-;;:::i;5758:529::-;;;;;;;;;;-1:-1:-1;5758:529:0;;;;;:::i;:::-;;:::i;17852:459::-;;;;;;;;;;-1:-1:-1;17852:459:0;;;;;:::i;:::-;;:::i;4705:93::-;;;;;;;;;;-1:-1:-1;4705:93:0;;4788:2;5403:36:1;;5391:2;5376:18;4705:93:0;5261:184:1;11802:44:0;;;;;;;;;;-1:-1:-1;11802:44:0;;;;;;;;;;;6295:297;;;;;;;;;;-1:-1:-1;6295:297:0;;;;;:::i;:::-;;:::i;16986:308::-;;;;;;;;;;-1:-1:-1;16986:308:0;;;;;:::i;:::-;;:::i;11307:21::-;;;;;;;;;;-1:-1:-1;11307:21:0;;;;-1:-1:-1;;;;;11307:21:0;;;35233:360;;;;;;;;;;-1:-1:-1;35233:360:0;;;;;:::i;:::-;;:::i;31379:357::-;;;;;;;;;;-1:-1:-1;31379:357:0;;;;;:::i;:::-;;:::i;11684:33::-;;;;;;;;;;-1:-1:-1;11684:33:0;;;;;;;;12349:32;;;;;;;;;;;;;;;;31788:349;;;;;;;;;;;;;:::i;28047:121::-;;;;;;;;;;-1:-1:-1;28142:18:0;;28127:12;:33;28047:121;;12140:31;;;;;;;;;;;;;;;;17302:181;;;;;;;;;;-1:-1:-1;17302:181:0;;;;;:::i;:::-;;:::i;21630:394::-;;;;;;;;;;;;;:::i;20933:337::-;;;;;;;;;;-1:-1:-1;20933:337:0;;;;;:::i;:::-;;:::i;11205:28::-;;;;;;;;;;;;;;;;12314;;;;;;;;;;;;;;;;11650:25;;;;;;;;;;;;;;;;11764:31;;;;;;;;;;-1:-1:-1;11764:31:0;;;;;;;;;;;4922:177;;;;;;;;;;-1:-1:-1;4922:177:0;;;;;:::i;:::-;;:::i;32189:84::-;;;;;;;;;;;;;:::i;19986:334::-;;;;;;;;;;-1:-1:-1;19986:334:0;;;;;:::i;:::-;;:::i;9016:265::-;;;;;;;;;;-1:-1:-1;9016:265:0;;;;;:::i;:::-;;:::i;16402:464::-;;;;;;;;;;-1:-1:-1;16402:464:0;;;;;:::i;:::-;;:::i;30549:567::-;;;;;;;;;;-1:-1:-1;30549:567:0;;;;;:::i;:::-;;:::i;33239:1162::-;;;;;;;;;;-1:-1:-1;33239:1162:0;;;;;:::i;:::-;;:::i;11565:43::-;;;;;;;;;;-1:-1:-1;11565:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11171:27;;;;;;;;;;;;;;;;8802:79;;;;;;;;;;-1:-1:-1;8867:6:0;;-1:-1:-1;;;;;8867:6:0;8802:79;;4593:104;;;;;;;;;;;;;:::i;16874:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20328:353::-;;;;;;;;;;-1:-1:-1;20328:353:0;;;;;:::i;:::-;;:::i;32281:84::-;;;;;;;;;;;;;:::i;6600:482::-;;;;;;;;;;-1:-1:-1;6600:482:0;;;;;:::i;:::-;;:::i;11525:33::-;;;;;;;;;;;;;;;;5107:216;;;;;;;;;;-1:-1:-1;5107:216:0;;;;;:::i;:::-;;:::i;12872:57::-;;;;;;;;;;-1:-1:-1;12872:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32373:858;;;;;;;;;;-1:-1:-1;32373:858:0;;;;;:::i;:::-;;:::i;11724:33::-;;;;;;;;;;-1:-1:-1;11724:33:0;;;;;;;;;;;22032:182;;;;;;;;;;-1:-1:-1;22032:182:0;;;;;:::i;:::-;;:::i;18790:461::-;;;;;;;;;;-1:-1:-1;18790:461:0;;;;;:::i;:::-;;:::i;12058:39::-;;;;;;;;;;-1:-1:-1;12058:39:0;;;;;;;;19321:428;;;;;;;;;;-1:-1:-1;19321:428:0;;;;;:::i;:::-;;:::i;12106:27::-;;;;;;;;;;;;;;;;18319:463;;;;;;;;;;-1:-1:-1;18319:463:0;;;;;:::i;:::-;;:::i;5331:201::-;;;;;;;;;;-1:-1:-1;5331:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5497:18:0;;;5465:7;5497:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5331:201;11365:33;;;;;;;;;;;;;;;;17746:98;;;;;;;;;;;;;:::i;11407:32::-;;;;;;;;;;-1:-1:-1;11407:32:0;;;;-1:-1:-1;;;;;11407:32:0;;;11615:28;;;;;;;;;;-1:-1:-1;11615:28:0;;;;;:::i;:::-;;:::i;11448:37::-;;;;;;;;;;;;;;;;12178:30;;;;;;;;;;;;;;;;9289:281;;;;;;;;;;-1:-1:-1;9289:281:0;;;;;:::i;:::-;;:::i;31186:185::-;;;;;;;;;;;;;:::i;12388:31::-;;;;;;;;;;;;;;;;11240:24;;;;;;;;;;;;;;;;12428:34;;;;;;;;;;;;;;;;21278:344;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;;;;;;;;;21402:17:::1;:34:::0;;;21447:16:::1;:32:::0;;;21506:36:::1;21466:13:::0;21422:14;21506:36:::1;:::i;:::-;21490:13;:52:::0;;;21578:2:::1;-1:-1:-1::0;21561:19:0::1;21553:61;;;::::0;-1:-1:-1;;;21553:61:0;;8364:2:1;21553:61:0::1;::::0;::::1;8346:21:1::0;8403:2;8383:18;;;8376:30;8442:31;8422:18;;;8415:59;8491:18;;21553:61:0::1;8162:353:1::0;21553:61:0::1;21278:344:::0;;:::o;4485:100::-;4539:13;4572:5;4565:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4485:100;:::o;5540:210::-;5659:4;5681:39;635:10;5704:7;5713:6;5681:8;:39::i;:::-;-1:-1:-1;5738:4:0;5540:210;;;;;:::o;17491:194::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;17577:13:::1;::::0;::::1;::::0;::::1;;;17576:14;17568:68;;;::::0;-1:-1:-1;;;17568:68:0;;9107:2:1;17568:68:0::1;::::0;::::1;9089:21:1::0;9146:2;9126:18;;;9119:30;9185:34;9165:18;;;9158:62;-1:-1:-1;;;9236:18:1;;;9229:39;9285:19;;17568:68:0::1;8905:405:1::0;17568:68:0::1;17647:9;:30:::0;;-1:-1:-1;;;;;;17647:30:0::1;-1:-1:-1::0;;;;;17647:30:0;;;::::1;::::0;;;::::1;::::0;;17491:194::o;34409:719::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;34590:15:::1;:22;34572:7;:14;:40;34550:120;;;::::0;-1:-1:-1;;;34550:120:0;;9517:2:1;34550:120:0::1;::::0;::::1;9499:21:1::0;9556:2;9536:18;;;9529:30;9595:32;9575:18;;;9568:60;9645:18;;34550:120:0::1;9315:354:1::0;34550:120:0::1;34720:3;34703:7;:14;:20;34681:124;;;::::0;-1:-1:-1;;;34681:124:0;;9876:2:1;34681:124:0::1;::::0;::::1;9858:21:1::0;9915:2;9895:18;;;9888:30;9954:34;9934:18;;;9927:62;-1:-1:-1;;;10005:18:1;;;9998:52;10067:19;;34681:124:0::1;9674:418:1::0;34681:124:0::1;34919:9;34914:207;34938:7;:14;34934:1;:18;34914:207;;;34974:14;34991:7;34999:1;34991:10;;;;;;;;:::i;:::-;;;;;;;34974:27;;35016:14;35033:15;35049:1;35033:18;;;;;;;;:::i;:::-;;;;;;;35016:35;;35066:43;35082:10;35094:6;35102;35066:15;:43::i;:::-;34959:162;;34954:3;;;;;:::i;:::-;;;;34914:207;;;;34409:719:::0;;:::o;5758:529::-;5898:4;5915:36;5925:6;5933:9;5944:6;5915:9;:36::i;:::-;-1:-1:-1;;;;;5991:19:0;;5964:24;5991:19;;;:11;:19;;;;;;;;635:10;5991:33;;;;;;;;6057:26;;;;6035:116;;;;-1:-1:-1;;;6035:116:0;;10571:2:1;6035:116:0;;;10553:21:1;10610:2;10590:18;;;10583:30;10649:34;10629:18;;;10622:62;-1:-1:-1;;;10700:18:1;;;10693:38;10748:19;;6035:116:0;10369:404:1;6035:116:0;6187:57;6196:6;635:10;6237:6;6218:16;:25;6187:8;:57::i;:::-;-1:-1:-1;6275:4:0;;5758:529;-1:-1:-1;;;;5758:529:0:o;17852:459::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;17991:4:::1;17982:5;17960:13;4894:12:::0;;;4806:108;17960:13:::1;:18;::::0;17976:2:::1;17960:18;:::i;:::-;17959:28;;;;:::i;:::-;17958:37;;;;:::i;:::-;17948:6;:47;;17926:139;;;;-1:-1:-1::0;;;17926:139:0::1;;;;;;;:::i;:::-;18138:4;18131:3;18110:13;4894:12:::0;;;4806:108;18110:13:::1;:17;::::0;18126:1:::1;18110:17;:::i;:::-;18109:25;;;;:::i;:::-;18108:34;;;;:::i;:::-;18098:6;:44;;18076:135;;;::::0;-1:-1:-1;;;18076:135:0;;11786:2:1;18076:135:0::1;::::0;::::1;11768:21:1::0;11825:2;11805:18;;;11798:30;11864:34;11844:18;;;11837:62;-1:-1:-1;;;11915:18:1;;;11908:39;11964:19;;18076:135:0::1;11584:405:1::0;18076:135:0::1;18237:17;:6:::0;18247::::1;18237:17;:::i;:::-;18222:12;:32:::0;;;18270:33:::1;::::0;2092:25:1;;;18270:33:0::1;::::0;2080:2:1;2065:18;18270:33:0::1;;;;;;;;17852:459:::0;:::o;6295:297::-;635:10;6410:4;6504:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6504:34:0;;;;;;;;;;6410:4;;6432:130;;6482:7;;6504:47;;6541:10;;6504:47;:::i;:::-;6432:8;:130::i;16986:308::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;17078:25:::1;::::0;;;::::1;;;17056:123;;;::::0;-1:-1:-1;;;17056:123:0;;12196:2:1;17056:123:0::1;::::0;::::1;12178:21:1::0;12235:2;12215:18;;;12208:30;12274:34;12254:18;;;12247:62;-1:-1:-1;;;12325:18:1;;;12318:46;12381:19;;17056:123:0::1;11994:412:1::0;17056:123:0::1;-1:-1:-1::0;;;;;17199:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;17198:20;17190:59;;;::::0;-1:-1:-1;;;17190:59:0;;12613:2:1;17190:59:0::1;::::0;::::1;12595:21:1::0;12652:2;12632:18;;;12625:30;12691:28;12671:18;;;12664:56;12737:18;;17190:59:0::1;12411:350:1::0;17190:59:0::1;-1:-1:-1::0;;;;;17260:19:0::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;17260:26:0::1;17282:4;17260:26;::::0;;16986:308::o;35233:360::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;35370:28:::1;35362:55;;;::::0;-1:-1:-1;;;35362:55:0;;12968:2:1;35362:55:0::1;::::0;::::1;12950:21:1::0;13007:2;12987:18;;;12980:30;-1:-1:-1;;;13026:18:1;;;13019:44;13080:18;;35362:55:0::1;12766:338:1::0;35362:55:0::1;35436:25;::::0;;;::::1;;;35428:63;;;::::0;-1:-1:-1;;;35428:63:0;;13311:2:1;35428:63:0::1;::::0;::::1;13293:21:1::0;13350:2;13330:18;;;13323:30;13389:27;13369:18;;;13362:55;13434:18;;35428:63:0::1;13109:349:1::0;35428:63:0::1;35502:25;:33:::0;;-1:-1:-1;;35502:33:0::1;::::0;;35551:34:::1;::::0;::::1;::::0;35530:5:::1;::::0;35551:34:::1;35233:360:::0;:::o;31379:357::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31512:32:0;::::1;31490:120;;;::::0;-1:-1:-1;;;31490:120:0;;13665:2:1;31490:120:0::1;::::0;::::1;13647:21:1::0;13704:2;13684:18;;;13677:30;13743:34;13723:18;;;13716:62;-1:-1:-1;;;13794:18:1;;;13787:36;13840:19;;31490:120:0::1;13463:402:1::0;31490:120:0::1;31621:17;:47:::0;;-1:-1:-1;;;;;;31621:47:0::1;-1:-1:-1::0;;;;;31621:47:0;::::1;::::0;;::::1;::::0;;;31684:44:::1;::::0;::::1;::::0;-1:-1:-1;;31684:44:0::1;31379:357:::0;:::o;31788:349::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;31893:18:::1;;31865:24;31883:4;31865:9;:24::i;:::-;:46;;31843:160;;;::::0;;-1:-1:-1;;;31843:160:0;;14072:2:1;31843:160:0::1;::::0;::::1;14054:21:1::0;14091:18;;;14084:30;;;;14150:34;14130:18;;;14123:62;14221:34;14201:18;;;14194:62;14273:19;;31843:160:0::1;13870:428:1::0;31843:160:0::1;32014:8;:15:::0;;-1:-1:-1;;;;32014:15:0::1;-1:-1:-1::0;;;32014:15:0::1;::::0;;32040:10:::1;:8;:10::i;:::-;32061:8;:16:::0;;-1:-1:-1;;;;32061:16:0::1;::::0;;32093:36:::1;::::0;32113:15:::1;2092:25:1::0;;32093:36:0::1;::::0;2080:2:1;2065:18;32093:36:0::1;;;;;;;31788:349::o:0;17302:181::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17383:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;17375:62;;;::::0;-1:-1:-1;;;17375:62:0;;14505:2:1;17375:62:0::1;::::0;::::1;14487:21:1::0;14544:2;14524:18;;;14517:30;14583:32;14563:18;;;14556:60;14633:18;;17375:62:0::1;14303:354:1::0;17375:62:0::1;-1:-1:-1::0;;;;;17448:19:0::1;17470:5;17448:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;17448:27:0::1;::::0;;17302:181::o;21630:394::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;21703:25:::1;::::0;21684:16:::1;:44:::0;;;21757:24:::1;::::0;21739:15:::1;:42:::0;;;21807:34:::1;::::0;::::1;:::i;:::-;21792:12;:49:::0;21874:25:::1;::::0;21854:17:::1;:45:::0;;;21929:24:::1;::::0;21910:16:::1;:43:::0;;;21980:36:::1;::::0;::::1;:::i;:::-;21964:13;:52:::0;21630:394::o;20933:337::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;21056:16:::1;:33:::0;;;21100:15:::1;:31:::0;;;21157:34:::1;21118:13:::0;21075:14;21157:34:::1;:::i;:::-;21142:12;:49:::0;;;21226:2:::1;-1:-1:-1::0;21210:18:0::1;21202:60;;;::::0;-1:-1:-1;;;21202:60:0;;14864:2:1;21202:60:0::1;::::0;::::1;14846:21:1::0;14903:2;14883:18;;;14876:30;14942:31;14922:18;;;14915:59;14991:18;;21202:60:0::1;14662:353:1::0;4922:177:0;-1:-1:-1;;;;;5073:18:0;5041:7;5073:18;;;;;;;;;;;;4922:177::o;32189:84::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;32243:14:::1;:22:::0;;-1:-1:-1;;32243:22:0::1;::::0;;32189:84::o;19986:334::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;20106:4:::1;20101:155;;20163:6;::::0;-1:-1:-1;;;;;20163:6:0;;::::1;20153:16:::0;;::::1;::::0;20127:117:::1;;;::::0;-1:-1:-1;;;20127:117:0;;15222:2:1;20127:117:0::1;::::0;::::1;15204:21:1::0;15261:2;15241:18;;;15234:30;15300:34;15280:18;;;15273:62;-1:-1:-1;;;15351:18:1;;;15344:37;15398:19;;20127:117:0::1;15020:403:1::0;20127:117:0::1;-1:-1:-1::0;;;;;20266:39:0;;;::::1;;::::0;;;:31:::1;:39:::0;;;;;:46;;-1:-1:-1;;20266:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19986:334::o;9016:265::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;9143:15:::1;9135:52;;;::::0;-1:-1:-1;;;9135:52:0;;15630:2:1;9135:52:0::1;::::0;::::1;15612:21:1::0;15669:2;15649:18;;;15642:30;15708:26;15688:18;;;15681:54;15752:18;;9135:52:0::1;15428:348:1::0;9135:52:0::1;9224:6;::::0;9203:40:::1;::::0;9240:1:::1;::::0;-1:-1:-1;;;;;9224:6:0::1;::::0;9203:40:::1;::::0;9240:1;;9203:40:::1;-1:-1:-1::0;9254:6:0::1;:19:::0;;-1:-1:-1;;;;;;9254:19:0::1;::::0;;9016:265::o;16402:464::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;16490:13:::1;::::0;::::1;::::0;::::1;;;16489:14;16481:50;;;::::0;-1:-1:-1;;;16481:50:0;;15983:2:1;16481:50:0::1;::::0;::::1;15965:21:1::0;16022:2;16002:18;;;15995:30;16061:25;16041:18;;;16034:53;16104:18;;16481:50:0::1;15781:347:1::0;16481:50:0::1;16584:2;16564:16;:22;;16542:111;;;;-1:-1:-1::0;;;16542:111:0::1;;;;;;;:::i;:::-;16664:13;:20:::0;;-1:-1:-1;;16695:18:0;;;;;16745:12:::1;16724:18;:33:::0;;;16789:37:::1;::::0;16810:16;;16789:37:::1;:::i;:::-;16768:18;:58:::0;16842:16:::1;::::0;::::1;::::0;;;::::1;16402:464:::0;:::o;30549:567::-;8929:6;;30663:10;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30699:20:0;::::1;30691:59;;;::::0;-1:-1:-1;;;30691:59:0;;16743:2:1;30691:59:0::1;::::0;::::1;16725:21:1::0;16782:2;16762:18;;;16755:30;16821:28;16801:18;;;16794:56;16867:18;;30691:59:0::1;16541:350:1::0;30691:59:0::1;-1:-1:-1::0;;;;;30783:23:0;::::1;30801:4;30783:23;;::::0;:41:::1;;-1:-1:-1::0;30811:13:0::1;::::0;::::1;::::0;::::1;;;30810:14;30783:41;30761:143;;;::::0;-1:-1:-1;;;30761:143:0;;17098:2:1;30761:143:0::1;::::0;::::1;17080:21:1::0;17137:2;17117:18;;;17110:30;17176:34;17156:18;;;17149:62;-1:-1:-1;;;17227:18:1;;;17220:50;17287:19;;30761:143:0::1;16896:416:1::0;30761:143:0::1;30942:39;::::0;-1:-1:-1;;;30942:39:0;;30975:4:::1;30942:39;::::0;::::1;984:51:1::0;30915:24:0::1;::::0;-1:-1:-1;;;;;30942:24:0;::::1;::::0;::::1;::::0;957:18:1;;30942:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31000:46;::::0;-1:-1:-1;;;31000:46:0;;-1:-1:-1;;;;;17698:32:1;;;31000:46:0::1;::::0;::::1;17680:51:1::0;17747:18;;;17740:34;;;30915:66:0;;-1:-1:-1;31000:23:0;;::::1;::::0;::::1;::::0;17653:18:1;;31000:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31062;::::0;;-1:-1:-1;;;;;17698:32:1;;17680:51;;17762:2;17747:18;;17740:34;;;30992:54:0;;-1:-1:-1;31062:46:0::1;::::0;17653:18:1;31062:46:0::1;;;;;;;30680:436;30549:567:::0;;;;:::o;33239:1162::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;33320:13:::1;::::0;::::1;::::0;::::1;;;33319:14;33311:70;;;;-1:-1:-1::0;;;33311:70:0::1;;;;;;;:::i;:::-;33433:2;33414:16;:21;33392:110;;;;-1:-1:-1::0;;;33392:110:0::1;;;;;;;:::i;:::-;33550:13;:20:::0;;-1:-1:-1;;33581:18:0;;;;;33631:12:::1;33610:18;:33:::0;;;33675:37:::1;::::0;33696:16;;33675:37:::1;:::i;:::-;33654:18;:58:::0;33728:16:::1;::::0;::::1;::::0;;;::::1;33833:1;33809:21;:25;33787:110;;;;-1:-1:-1::0;;;33787:110:0::1;;;;;;;:::i;:::-;33957:1;33930:24;33948:4;33930:9;:24::i;:::-;:28;33908:116;;;::::0;-1:-1:-1;;;33908:116:0;;19053:2:1;33908:116:0::1;::::0;::::1;19035:21:1::0;19092:2;19072:18;;;19065:30;19131:34;19111:18;;;19104:62;-1:-1:-1;;;19182:18:1;;;19175:36;19228:19;;33908:116:0::1;18851:402:1::0;33908:116:0::1;34069:9;::::0;34037:69:::1;::::0;34054:4:::1;::::0;-1:-1:-1;;;;;34069:9:0::1;34081:24;34054:4:::0;34081:9:::1;:24::i;34037:69::-;34119:9;::::0;-1:-1:-1;;;;;34119:9:0::1;:25;34152:21;34197:4;34217:24;34197:4:::0;34217:9:::1;:24::i;:::-;34256:1;34299::::0;34342:10:::1;34367:15;34119:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33239:1162:::0;:::o;4593:104::-;4649:13;4682:7;4675:14;;;;;:::i;16874:104::-;16923:16;16959:11;16952:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16952:18:0;;;;;;;;;;;;;;;;;;;;;;16874:104;:::o;20328:353::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;20474:6:::1;::::0;-1:-1:-1;;;;;20474:6:0;;::::1;20466:14:::0;;::::1;::::0;20444:121:::1;;;::::0;-1:-1:-1;;;20444:121:0;;20383:2:1;20444:121:0::1;::::0;::::1;20365:21:1::0;20422:2;20402:18;;;20395:30;20461:34;20441:18;;;20434:62;20532:27;20512:18;;;20505:55;20577:19;;20444:121:0::1;20181:421:1::0;20444:121:0::1;20576:41;20605:4;20611:5;20576:28;:41::i;:::-;20633:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;20633:40:0;::::1;::::0;::::1;::::0;;;::::1;20328:353:::0;;:::o;32281:84::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;32336:14:::1;:21:::0;;-1:-1:-1;;32336:21:0::1;32353:4;32336:21;::::0;;32281:84::o;6600:482::-;635:10;6720:4;6769:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6769:34:0;;;;;;;;;;6836:35;;;;6814:122;;;;-1:-1:-1;;;6814:122:0;;20809:2:1;6814:122:0;;;20791:21:1;20848:2;20828:18;;;20821:30;20887:34;20867:18;;;20860:62;-1:-1:-1;;;20938:18:1;;;20931:35;20983:19;;6814:122:0;20607:401:1;6814:122:0;6972:67;635:10;6995:7;7023:15;7004:16;:34;6972:8;:67::i;:::-;-1:-1:-1;7070:4:0;;6600:482;-1:-1:-1;;;6600:482:0:o;5107:216::-;5229:4;5251:42;635:10;5275:9;5286:6;5251:9;:42::i;32373:858::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;32445:12:::1;32437:56;;;::::0;-1:-1:-1;;;32437:56:0;;21215:2:1;32437:56:0::1;::::0;::::1;21197:21:1::0;21254:2;21234:18;;;21227:30;21293:33;21273:18;;;21266:61;21344:18;;32437:56:0::1;21013:355:1::0;32437:56:0::1;32513:13;::::0;::::1;::::0;::::1;;;32512:14;32504:70;;;;-1:-1:-1::0;;;32504:70:0::1;;;;;;;:::i;:::-;32663:1;32639:21;:25;32617:110;;;;-1:-1:-1::0;;;32617:110:0::1;;;;;;;:::i;22032:182::-:0;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22117:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22117:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22172:34;;1642:41:1;;;22172:34:0::1;::::0;1615:18:1;22172:34:0::1;;;;;;;22032:182:::0;;:::o;18790:461::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;18930:4:::1;18922;18901:13;4894:12:::0;;;4806:108;18901:13:::1;:17;::::0;18917:1:::1;18901:17;:::i;:::-;18900:26;;;;:::i;:::-;18899:35;;;;:::i;:::-;18889:6;:45;;18867:139;;;::::0;-1:-1:-1;;;18867:139:0;;21575:2:1;18867:139:0::1;::::0;::::1;21557:21:1::0;21614:2;21594:18;;;21587:30;21653:34;21633:18;;;21626:62;-1:-1:-1;;;21704:18:1;;;21697:42;21756:19;;18867:139:0::1;21373:408:1::0;18867:139:0::1;19079:4;19072:3;19051:13;4894:12:::0;;;4806:108;19051:13:::1;:17;::::0;19067:1:::1;19051:17;:::i;:::-;19050:25;;;;:::i;:::-;19049:34;;;;:::i;:::-;19039:6;:44;;19017:137;;;::::0;-1:-1:-1;;;19017:137:0;;21988:2:1;19017:137:0::1;::::0;::::1;21970:21:1::0;22027:2;22007:18;;;22000:30;22066:34;22046:18;;;22039:62;-1:-1:-1;;;22117:18:1;;;22110:41;22168:19;;19017:137:0::1;21786:407:1::0;19017:137:0::1;19177:17;:6:::0;19187::::1;19177:17;:::i;:::-;19165:9;:29:::0;;;19210:33:::1;::::0;2092:25:1;;;19210:33:0::1;::::0;2080:2:1;2065:18;19210:33:0::1;1946:177:1::0;19321:428:0;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;19461:6:::1;19440:13;4894:12:::0;;;4806:108;19440:13:::1;:17;::::0;19456:1:::1;19440:17;:::i;:::-;19439:28;;;;:::i;:::-;19426:9;:41;;19404:144;;;::::0;-1:-1:-1;;;19404:144:0;;22400:2:1;19404:144:0::1;::::0;::::1;22382:21:1::0;22439:2;22419:18;;;22412:30;22478:34;22458:18;;;22451:62;-1:-1:-1;;;22529:18:1;;;22522:51;22590:19;;19404:144:0::1;22198:417:1::0;19404:144:0::1;19616:4;19595:13;4894:12:::0;;;4806:108;19595:13:::1;:17;::::0;19611:1:::1;19595:17;:::i;:::-;19594:26;;;;:::i;:::-;19581:9;:39;;19559:141;;;::::0;-1:-1:-1;;;19559:141:0;;22822:2:1;19559:141:0::1;::::0;::::1;22804:21:1::0;22861:2;22841:18;;;22834:30;22900:34;22880:18;;;22873:62;-1:-1:-1;;;22951:18:1;;;22944:50;23011:19;;19559:141:0::1;22620:416:1::0;19559:141:0::1;19711:18;:30:::0;19321:428::o;18319:463::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;18459:4:::1;18450:5;18428:13;4894:12:::0;;;4806:108;18428:13:::1;:18;::::0;18444:2:::1;18428:18;:::i;:::-;18427:28;;;;:::i;:::-;18426:37;;;;:::i;:::-;18416:6;:47;;18394:139;;;;-1:-1:-1::0;;;18394:139:0::1;;;;;;;:::i;:::-;18606:4;18599:3;18578:13;4894:12:::0;;;4806:108;18578:13:::1;:17;::::0;18594:1:::1;18578:17;:::i;:::-;18577:25;;;;:::i;:::-;18576:34;;;;:::i;:::-;18566:6;:44;;18544:135;;;::::0;-1:-1:-1;;;18544:135:0;;23243:2:1;18544:135:0::1;::::0;::::1;23225:21:1::0;23282:2;23262:18;;;23255:30;23321:34;23301:18;;;23294:62;-1:-1:-1;;;23372:18:1;;;23365:39;23421:19;;18544:135:0::1;23041:405:1::0;18544:135:0::1;18706:17;:6:::0;18716::::1;18706:17;:::i;:::-;18690:13;:33:::0;;;18739:35:::1;::::0;2092:25:1;;;18739:35:0::1;::::0;2080:2:1;2065:18;18739:35:0::1;1946:177:1::0;17746:98:0;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;17808:20:::1;:28:::0;;-1:-1:-1;;17808:28:0::1;::::0;;17746:98::o;11615:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11615:28:0;;-1:-1:-1;11615:28:0;:::o;9289:281::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9392:22:0;::::1;9370:110;;;::::0;-1:-1:-1;;;9370:110:0;;23653:2:1;9370:110:0::1;::::0;::::1;23635:21:1::0;23692:2;23672:18;;;23665:30;23731:34;23711:18;;;23704:62;-1:-1:-1;;;23782:18:1;;;23775:36;23828:19;;9370:110:0::1;23451:402:1::0;9370:110:0::1;9517:6;::::0;9496:38:::1;::::0;-1:-1:-1;;;;;9496:38:0;;::::1;::::0;9517:6:::1;::::0;9496:38:::1;::::0;9517:6:::1;::::0;9496:38:::1;9545:6;:17:::0;;-1:-1:-1;;;;;;9545:17:0::1;-1:-1:-1::0;;;;;9545:17:0;;;::::1;::::0;;;::::1;::::0;;9289:281::o;31186:185::-;8929:6;;-1:-1:-1;;;;;8929:6:0;635:10;8929:22;8921:67;;;;-1:-1:-1;;;8921:67:0;;;;;;;:::i;:::-;31281:82:::1;::::0;31244:12:::1;::::0;31289:10:::1;::::0;31313:21:::1;::::0;31244:12;31281:82;31244:12;31281:82;31313:21;31289:10;31281:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8071:380:::0;-1:-1:-1;;;;;8207:19:0;;8199:68;;;;-1:-1:-1;;;8199:68:0;;24270:2:1;8199:68:0;;;24252:21:1;24309:2;24289:18;;;24282:30;24348:34;24328:18;;;24321:62;-1:-1:-1;;;24399:18:1;;;24392:34;24443:19;;8199:68:0;24068:400:1;8199:68:0;-1:-1:-1;;;;;8286:21:0;;8278:68;;;;-1:-1:-1;;;8278:68:0;;24675:2:1;8278:68:0;;;24657:21:1;24714:2;24694:18;;;24687:30;24753:34;24733:18;;;24726:62;-1:-1:-1;;;24804:18:1;;;24797:32;24846:19;;8278:68:0;24473:398:1;8278:68:0;-1:-1:-1;;;;;8359:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8411:32;;2092:25:1;;;8411:32:0;;2065:18:1;8411:32:0;;;;;;;8071:380;;;:::o;7090:651::-;-1:-1:-1;;;;;7230:20:0;;7222:70;;;;-1:-1:-1;;;7222:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7311:23:0;;7303:71;;;;-1:-1:-1;;;7303:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7411:17:0;;7387:21;7411:17;;;;;;;;;;;7461:23;;;;7439:111;;;;-1:-1:-1;;;7439:111:0;;25888:2:1;7439:111:0;;;25870:21:1;25927:2;25907:18;;;25900:30;25966:34;25946:18;;;25939:62;-1:-1:-1;;;26017:18:1;;;26010:36;26063:19;;7439:111:0;25686:402:1;7439:111:0;-1:-1:-1;;;;;7586:17:0;;;:9;:17;;;;;;;;;;;7606:22;;;7586:42;;7650:20;;;;;;;;:30;;7622:6;;7586:9;7650:30;;7622:6;;7650:30;:::i;:::-;;;;;;;;7715:9;-1:-1:-1;;;;;7698:35:0;7707:6;-1:-1:-1;;;;;7698:35:0;;7726:6;7698:35;;;;2092:25:1;;2080:2;2065:18;;1946:177;7698:35:0;;;;;;;;7211:530;7090:651;;;:::o;22222:5817::-;-1:-1:-1;;;;;22354:18:0;;22346:68;;;;-1:-1:-1;;;22346:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22433:16:0;;22425:64;;;;-1:-1:-1;;;22425:64:0;;;;;;;:::i;:::-;22517:1;22508:6;:10;22500:52;;;;-1:-1:-1;;;22500:52:0;;26295:2:1;22500:52:0;;;26277:21:1;26334:2;26314:18;;;26307:30;26373:31;26353:18;;;26346:59;26422:18;;22500:52:0;26093:353:1;22500:52:0;22570:13;;;;;;;22565:183;;-1:-1:-1;;;;;22626:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22655:23:0;;;;;;:19;:23;;;;;;;;22626:52;22600:136;;;;-1:-1:-1;;;22600:136:0;;26653:2:1;22600:136:0;;;26635:21:1;26692:2;26672:18;;;26665:30;-1:-1:-1;;;26711:18:1;;;26704:52;26773:18;;22600:136:0;26451:346:1;22600:136:0;28142:18;;28127:12;:33;22764:26;:43;;;;-1:-1:-1;22794:13:0;;;;;;;22764:43;22760:268;;;-1:-1:-1;;;;;22851:17:0;;;;;;:11;:17;;;;;;;;22850:18;;:35;;-1:-1:-1;8867:6:0;;-1:-1:-1;;;;;22872:13:0;;;8867:6;;22872:13;22850:35;:60;;;-1:-1:-1;;;;;;22889:21:0;;22903:6;22889:21;22850:60;22824:192;;;;-1:-1:-1;;;22824:192:0;;27004:2:1;22824:192:0;;;26986:21:1;27043:2;27023:18;;;27016:30;27082:34;27062:18;;;27055:62;27153:34;27133:18;;;27126:62;-1:-1:-1;;;27204:19:1;;;27197:37;27251:19;;22824:192:0;26802:474:1;22824:192:0;23044:14;;;;23040:2148;;;8867:6;;-1:-1:-1;;;;;23097:15:0;;;8867:6;;23097:15;;;;:49;;-1:-1:-1;8867:6:0;;-1:-1:-1;;;;;23133:13:0;;;8867:6;;23133:13;;23097:49;:91;;;;-1:-1:-1;;;;;;23167:21:0;;23181:6;23167:21;;23097:91;:138;;;;-1:-1:-1;;;;;;23210:25:0;;;;;;:19;:25;;;;;;;;23209:26;23097:138;:183;;;;-1:-1:-1;;;;;;23257:23:0;;;;;;:19;:23;;;;;;;;23256:24;23097:183;23075:2102;;;23319:20;;;;23315:692;;;23382:9;;-1:-1:-1;;;;;23368:24:0;;;23382:9;;23368:24;;;;:49;;-1:-1:-1;23410:6:0;;-1:-1:-1;;;;;23396:21:0;;;23410:6;;23396:21;;23368:49;23364:624;;;23559:16;23574:1;23559:12;:16;:::i;:::-;23513:9;23484:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;23680:16:0;23695:1;23680:12;:16;:::i;:::-;-1:-1:-1;;;;;23612:32:0;;;;;;:28;:32;;;;;;:84;23484:212;23446:363;;;;-1:-1:-1;;;23446:363:0;;27616:2:1;23446:363:0;;;27598:21:1;27655:2;27635:18;;;27628:30;27694:34;27674:18;;;27667:62;-1:-1:-1;;;27745:18:1;;;27738:51;27806:19;;23446:363:0;27414:417:1;23446:363:0;23865:9;23836:39;;;;:28;:39;;;;;;23878:12;23836:54;;;;-1:-1:-1;;;;;23917:32:0;;;;;;:47;23364:624;-1:-1:-1;;;;;24081:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;24138:35:0;;;;;;:31;:35;;;;;;;;24137:36;24081:92;24055:1107;;;24260:12;;24250:6;:22;;24216:148;;;;-1:-1:-1;;;24216:148:0;;28038:2:1;24216:148:0;;;28020:21:1;28077:2;28057:18;;;28050:30;28116:34;28096:18;;;28089:62;-1:-1:-1;;;28167:18:1;;;28160:38;28215:19;;24216:148:0;27836:404:1;24216:148:0;24447:9;;24430:13;24440:2;24430:9;:13::i;:::-;24421:22;;:6;:22;:::i;:::-;:35;;24387:140;;;;-1:-1:-1;;;24387:140:0;;28447:2:1;24387:140:0;;;28429:21:1;28486:2;28466:18;;;28459:30;-1:-1:-1;;;28505:18:1;;;28498:49;28564:18;;24387:140:0;28245:343:1;24387:140:0;24055:1107;;;-1:-1:-1;;;;;24625:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;24680:37:0;;;;;;:31;:37;;;;;;;;24679:38;24625:92;24599:563;;;24804:13;;24794:6;:23;;24760:151;;;;-1:-1:-1;;;24760:151:0;;28795:2:1;24760:151:0;;;28777:21:1;28834:2;28814:18;;;28807:30;28873:34;28853:18;;;28846:62;-1:-1:-1;;;28924:18:1;;;28917:40;28974:19;;24760:151:0;28593:406:1;24599:563:0;-1:-1:-1;;;;;24942:35:0;;;;;;:31;:35;;;;;;;;24937:225;;25062:9;;25045:13;25055:2;25045:9;:13::i;:::-;25036:22;;:6;:22;:::i;:::-;:35;;25002:140;;;;-1:-1:-1;;;25002:140:0;;28447:2:1;25002:140:0;;;28429:21:1;28486:2;28466:18;;;28459:30;-1:-1:-1;;;28505:18:1;;;28498:49;28564:18;;25002:140:0;28245:343:1;25002:140:0;25200:28;25231:24;25249:4;25231:9;:24::i;:::-;25307:18;;25200:55;;-1:-1:-1;25283:42:0;;;;;;;25356:22;;-1:-1:-1;25367:11:0;;;;;;;25356:22;:35;;;;-1:-1:-1;25383:8:0;;-1:-1:-1;;;25383:8:0;;;;25382:9;25356:35;:68;;;;-1:-1:-1;;;;;;25395:29:0;;;;;;:25;:29;;;;;;;;25356:68;25338:196;;;25451:8;:15;;-1:-1:-1;;;;25451:15:0;-1:-1:-1;;;25451:15:0;;;25481:10;:8;:10::i;:::-;25506:8;:16;;-1:-1:-1;;;;25506:16:0;;;25338:196;-1:-1:-1;;;;;25665:25:0;;25546:12;25665:25;;;:19;:25;;;;;;25561:4;;25665:25;;;:52;;-1:-1:-1;;;;;;25694:23:0;;;;;;:19;:23;;;;;;;;25665:52;25661:100;;;-1:-1:-1;25744:5:0;25661:100;25773:12;25878:7;25874:2112;;;28142:18;;28127:12;:33;25961:152;;;;26037:8;26022:12;;:23;;;;:::i;:::-;26012:6;:33;;:100;;;;;26100:12;26074:18;;26095:1;26074:22;;;;:::i;:::-;:38;;26012:100;25960:206;;;;-1:-1:-1;;;;;;26135:31:0;;;;;;:25;:31;;;;;;;;25960:206;:257;;;;-1:-1:-1;;;;;;26188:29:0;;;;;;:25;:29;;;;;;;;26187:30;25960:257;:302;;;;-1:-1:-1;;;;;;26239:23:0;;;;;;:19;:23;;;;;;;;26238:24;25960:302;:339;;;;;26298:1;26283:12;;:16;25960:339;25938:1899;;;28142:18;;28127:12;:33;26334:332;;26645:1;26629:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;26334:332:0;-1:-1:-1;;;;;26691:15:0;;;;;;:11;:15;;;;;;;;26686:216;;-1:-1:-1;;;;;26731:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;26731:22:0;26749:4;26731:22;;;;;;26776:10;:15;;26749:4;;26776:10;;:15;;26749:4;;26776:15;:::i;:::-;;;;-1:-1:-1;;26814:11:0;:20;;;;;;;-1:-1:-1;26814:20:0;;;;;;;;-1:-1:-1;;;;;;26814:20:0;-1:-1:-1;;;;;26814:20:0;;;;;;;;26862;;984:51:1;;;26862:20:0;;972:2:1;957:18;26862:20:0;;;;;;;26686:216;26945:3;26930:11;:6;26939:2;26930:11;:::i;:::-;26929:19;;;;:::i;:::-;26922:26;;27016:12;;26997:15;;26990:4;:22;;;;:::i;:::-;26989:39;;;;:::i;:::-;26967:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27098:12:0;;27078:16;;27071:23;;:4;:23;:::i;:::-;27070:40;;;;:::i;:::-;27047:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;25938:1899:0;;-1:-1:-1;25938:1899:0;;-1:-1:-1;;;;;27173:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27222:1;27206:13;;:17;27173:50;27169:668;;;27278:3;27261:13;;27252:6;:22;;;;:::i;:::-;27251:30;;;;:::i;:::-;27244:37;;27350:13;;27330:16;;27323:4;:23;;;;:::i;:::-;27322:41;;;;:::i;:::-;27300:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27476:13:0;;27434:17;;27427:24;;:4;:24;:::i;27169:668::-;-1:-1:-1;;;;;27551:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27601:1;27586:12;;:16;27551:51;27547:290;;;27656:3;27640:12;;27631:6;:21;;;;:::i;:::-;27630:29;;;;:::i;:::-;27623:36;;27727:12;;27708:15;;27701:4;:22;;;;:::i;:::-;27700:39;;;;:::i;:::-;27678:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27809:12:0;;27789:16;;27782:23;;:4;:23;:::i;:::-;27781:40;;;;:::i;:::-;27758:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27547:290:0;27857:8;;27853:91;;27886:42;27902:4;27916;27923;27886:15;:42::i;:::-;27960:14;27970:4;27960:14;;:::i;:::-;;;25874:2112;27998:33;28014:4;28020:2;28024:6;27998:15;:33::i;:::-;22335:5704;;;;22222:5817;;;:::o;29272:1269::-;29311:23;29337:24;29355:4;29337:9;:24::i;:::-;29311:50;;29372:25;29421:19;;29400:18;;:40;;;;:::i;:::-;29372:68;-1:-1:-1;29457:20:0;;;:46;;-1:-1:-1;29481:22:0;;29457:46;29453:85;;;29520:7;;29272:1269::o;29453:85::-;29572:18;;:23;;29593:2;29572:23;:::i;:::-;29554:15;:41;29550:115;;;29630:18;;:23;;29651:2;29630:23;:::i;:::-;29612:41;;29550:115;29677:12;29751:23;29864:1;29831:17;29796:18;;29778:15;:36;;;;:::i;:::-;29777:71;;;;:::i;:::-;:88;;;;:::i;:::-;29751:114;-1:-1:-1;29878:51:0;29895:33;29751:114;29895:15;:33;:::i;:::-;29878:16;:51::i;:::-;30143:18;;29963:21;;;;29942:18;;30143:22;;30164:1;;30143:22;:::i;:::-;30122:44;;:17;:44;:::i;:::-;30085:19;;30072:32;;:10;:32;:::i;:::-;30071:96;;;;:::i;:::-;30044:123;-1:-1:-1;30180:35:0;30044:123;30180:35;;:::i;:::-;30249:1;30228:18;:22;;;30261:19;:23;30180:35;-1:-1:-1;30301:19:0;;;;;:42;;;30342:1;30324:15;:19;30301:42;30297:121;;;30360:46;30373:15;30390;30360:12;:46::i;:::-;30452:17;;30444:89;;-1:-1:-1;;;;;30452:17:0;;;;30497:21;;30444:89;;;;30497:21;30452:17;30444:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;29272:1269:0:o;20689:236::-;-1:-1:-1;;;;;20772:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;20772:39:0;;;;;;;20822;20772:31;:39;20822:26;:39::i;28176:571::-;28326:16;;;28340:1;28326:16;;;;;;;;28302:21;;28326:16;;;;;;;;;;-1:-1:-1;28326:16:0;28302:40;;28371:4;28353;28358:1;28353:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28353:23:0;;;:7;;;;;;;;;;:23;;;;28397:9;;:16;;;-1:-1:-1;;;28397:16:0;;;;:9;;;;;:14;;:16;;;;;28353:7;;28397:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28387:4;28392:1;28387:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28387:26:0;;;:7;;;;;;;;;:26;28458:9;;28426:56;;28443:4;;28458:9;28470:11;28426:8;:56::i;:::-;28521:9;;:218;;-1:-1:-1;;;28521:218:0;;-1:-1:-1;;;;;28521:9:0;;;;:60;;:218;;28596:11;;28521:9;;28666:4;;28693;;28713:15;;28521:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28231:516;28176:571;:::o;28755:509::-;28935:9;;28903:56;;28920:4;;-1:-1:-1;;;;;28935:9:0;28947:11;28903:8;:56::i;:::-;29002:9;;:254;;-1:-1:-1;;;29002:254:0;;-1:-1:-1;;;;;29002:9:0;;;;:25;;29035:9;;29002:254;;29068:4;;29088:11;;29002:9;;;;29208:6;;29230:15;;29002:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28755:509;;:::o;19757:221::-;-1:-1:-1;;;;;19859:39:0;;;;;;:31;:39;;;;;;;;:52;;-1:-1:-1;;19859:52:0;;;;;;;;;;19927:43;;30015:51:1;;;30082:18;;;30075:50;19927:43:0;;29988:18:1;19927:43:0;;;;;;;19757:221;;:::o;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:548::-;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;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;1046:131::-;-1:-1:-1;;;;;1121:31:1;;1111:42;;1101:70;;1167:1;1164;1157:12;1101:70;1046:131;:::o;1182:315::-;1250:6;1258;1311:2;1299:9;1290:7;1286:23;1282:32;1279:52;;;1327:1;1324;1317:12;1279:52;1366:9;1353:23;1385:31;1410:5;1385:31;:::i;:::-;1435:5;1487:2;1472:18;;;;1459:32;;-1:-1:-1;;;1182:315:1:o;1694:247::-;1753:6;1806:2;1794:9;1785:7;1781:23;1777:32;1774:52;;;1822:1;1819;1812:12;1774:52;1861:9;1848:23;1880:31;1905:5;1880:31;:::i;:::-;1930:5;1694:247;-1:-1:-1;;;1694:247:1:o;2128:127::-;2189:10;2184:3;2180:20;2177:1;2170:31;2220:4;2217:1;2210:15;2244:4;2241:1;2234:15;2260:275;2331:2;2325:9;2396:2;2377:13;;-1:-1:-1;;2373:27:1;2361:40;;2431:18;2416:34;;2452:22;;;2413:62;2410:88;;;2478:18;;:::i;:::-;2514:2;2507:22;2260:275;;-1:-1:-1;2260:275:1:o;2540:183::-;2600:4;2633:18;2625:6;2622:30;2619:56;;;2655:18;;:::i;:::-;-1:-1:-1;2700:1:1;2696:14;2712:4;2692:25;;2540:183::o;2728:662::-;2782:5;2835:3;2828:4;2820:6;2816:17;2812:27;2802:55;;2853:1;2850;2843:12;2802:55;2889:6;2876:20;2915:4;2939:60;2955:43;2995:2;2955:43;:::i;:::-;2939:60;:::i;:::-;3033:15;;;3119:1;3115:10;;;;3103:23;;3099:32;;;3064:12;;;;3143:15;;;3140:35;;;3171:1;3168;3161:12;3140:35;3207:2;3199:6;3195:15;3219:142;3235:6;3230:3;3227:15;3219:142;;;3301:17;;3289:30;;3339:12;;;;3252;;3219:142;;;-1:-1:-1;3379:5:1;2728:662;-1:-1:-1;;;;;;2728:662:1:o;3395:1215::-;3513:6;3521;3574:2;3562:9;3553:7;3549:23;3545:32;3542:52;;;3590:1;3587;3580:12;3542:52;3630:9;3617:23;3659:18;3700:2;3692:6;3689:14;3686:34;;;3716:1;3713;3706:12;3686:34;3754:6;3743:9;3739:22;3729:32;;3799:7;3792:4;3788:2;3784:13;3780:27;3770:55;;3821:1;3818;3811:12;3770:55;3857:2;3844:16;3879:4;3903:60;3919:43;3959:2;3919:43;:::i;3903:60::-;3997:15;;;4079:1;4075:10;;;;4067:19;;4063:28;;;4028:12;;;;4103:19;;;4100:39;;;4135:1;4132;4125:12;4100:39;4159:11;;;;4179:217;4195:6;4190:3;4187:15;4179:217;;;4275:3;4262:17;4292:31;4317:5;4292:31;:::i;:::-;4336:18;;4212:12;;;;4374;;;;4179:217;;;4415:5;-1:-1:-1;;4458:18:1;;4445:32;;-1:-1:-1;;4489:16:1;;;4486:36;;;4518:1;4515;4508:12;4486:36;;4541:63;4596:7;4585:8;4574:9;4570:24;4541:63;:::i;:::-;4531:73;;;3395:1215;;;;;:::o;4615:456::-;4692:6;4700;4708;4761:2;4749:9;4740:7;4736:23;4732:32;4729:52;;;4777:1;4774;4767:12;4729:52;4816:9;4803:23;4835:31;4860:5;4835:31;:::i;:::-;4885:5;-1:-1:-1;4942:2:1;4927:18;;4914:32;4955:33;4914:32;4955:33;:::i;:::-;4615:456;;5007:7;;-1:-1:-1;;;5061:2:1;5046:18;;;;5033:32;;4615:456::o;5076:180::-;5135:6;5188:2;5176:9;5167:7;5163:23;5159:32;5156:52;;;5204:1;5201;5194:12;5156:52;-1:-1:-1;5227:23:1;;5076:180;-1:-1:-1;5076:180:1:o;5658:118::-;5744:5;5737:13;5730:21;5723:5;5720:32;5710:60;;5766:1;5763;5756:12;5781:241;5837:6;5890:2;5878:9;5869:7;5865:23;5861:32;5858:52;;;5906:1;5903;5896:12;5858:52;5945:9;5932:23;5964:28;5986:5;5964:28;:::i;6027:382::-;6092:6;6100;6153:2;6141:9;6132:7;6128:23;6124:32;6121:52;;;6169:1;6166;6159:12;6121:52;6208:9;6195:23;6227:31;6252:5;6227:31;:::i;:::-;6277:5;-1:-1:-1;6334:2:1;6319:18;;6306:32;6347:30;6306:32;6347:30;:::i;:::-;6396:7;6386:17;;;6027:382;;;;;:::o;6414:388::-;6482:6;6490;6543:2;6531:9;6522:7;6518:23;6514:32;6511:52;;;6559:1;6556;6549:12;6511:52;6598:9;6585:23;6617:31;6642:5;6617:31;:::i;:::-;6667:5;-1:-1:-1;6724:2:1;6709:18;;6696:32;6737:33;6696:32;6737:33;:::i;6807:461::-;6860:3;6898:5;6892:12;6925:6;6920:3;6913:19;6951:4;6980:2;6975:3;6971:12;6964:19;;7017:2;7010:5;7006:14;7038:1;7048:195;7062:6;7059:1;7056:13;7048:195;;;7127:13;;-1:-1:-1;;;;;7123:39:1;7111:52;;7183:12;;;;7218:15;;;;7159:1;7077:9;7048:195;;;-1:-1:-1;7259:3:1;;6807:461;-1:-1:-1;;;;;6807:461:1:o;7273:261::-;7452:2;7441:9;7434:21;7415:4;7472:56;7524:2;7513:9;7509:18;7501:6;7472:56;:::i;7539:356::-;7741:2;7723:21;;;7760:18;;;7753:30;7819:34;7814:2;7799:18;;7792:62;7886:2;7871:18;;7539:356::o;7900:127::-;7961:10;7956:3;7952:20;7949:1;7942:31;7992:4;7989:1;7982:15;8016:4;8013:1;8006:15;8032:125;8097:9;;;8118:10;;;8115:36;;;8131:18;;:::i;8520:380::-;8599:1;8595:12;;;;8642;;;8663:61;;8717:4;8709:6;8705:17;8695:27;;8663:61;8770:2;8762:6;8759:14;8739:18;8736:38;8733:161;;8816:10;8811:3;8807:20;8804:1;8797:31;8851:4;8848:1;8841:15;8879:4;8876:1;8869:15;8733:161;;8520:380;;;:::o;10097:127::-;10158:10;10153:3;10149:20;10146:1;10139:31;10189:4;10186:1;10179:15;10213:4;10210:1;10203:15;10229:135;10268:3;10289:17;;;10286:43;;10309:18;;:::i;:::-;-1:-1:-1;10356:1:1;10345:13;;10229:135::o;10778:168::-;10851:9;;;10882;;10899:15;;;10893:22;;10879:37;10869:71;;10920:18;;:::i;10951:217::-;10991:1;11017;11007:132;;11061:10;11056:3;11052:20;11049:1;11042:31;11096:4;11093:1;11086:15;11124:4;11121:1;11114:15;11007:132;-1:-1:-1;11153:9:1;;10951:217::o;11173:406::-;11375:2;11357:21;;;11414:2;11394:18;;;11387:30;11453:34;11448:2;11433:18;;11426:62;-1:-1:-1;;;11519:2:1;11504:18;;11497:40;11569:3;11554:19;;11173:406::o;16133:403::-;16335:2;16317:21;;;16374:2;16354:18;;;16347:30;16413:34;16408:2;16393:18;;16386:62;-1:-1:-1;;;16479:2:1;16464:18;;16457:37;16526:3;16511:19;;16133:403::o;17317:184::-;17387:6;17440:2;17428:9;17419:7;17415:23;17411:32;17408:52;;;17456:1;17453;17446:12;17408:52;-1:-1:-1;17479:16:1;;17317:184;-1:-1:-1;17317:184:1:o;17785:245::-;17852:6;17905:2;17893:9;17884:7;17880:23;17876:32;17873:52;;;17921:1;17918;17911:12;17873:52;17953:9;17947:16;17972:28;17994:5;17972:28;:::i;18035:407::-;18237:2;18219:21;;;18276:2;18256:18;;;18249:30;18315:34;18310:2;18295:18;;18288:62;-1:-1:-1;;;18381:2:1;18366:18;;18359:41;18432:3;18417:19;;18035:407::o;18447:399::-;18649:2;18631:21;;;18688:2;18668:18;;;18661:30;18727:34;18722:2;18707:18;;18700:62;-1:-1:-1;;;18793:2:1;18778:18;;18771:33;18836:3;18821:19;;18447:399::o;19258:607::-;-1:-1:-1;;;;;19617:15:1;;;19599:34;;19664:2;19649:18;;19642:34;;;;19707:2;19692:18;;19685:34;;;;19750:2;19735:18;;19728:34;;;;19799:15;;;19793:3;19778:19;;19771:44;19579:3;19831:19;;19824:35;;;;19548:3;19533:19;;19258:607::o;19870:306::-;19958:6;19966;19974;20027:2;20015:9;20006:7;20002:23;19998:32;19995:52;;;20043:1;20040;20033:12;19995:52;20072:9;20066:16;20056:26;;20122:2;20111:9;20107:18;20101:25;20091:35;;20166:2;20155:9;20151:18;20145:25;20135:35;;19870:306;;;;;:::o;24876:401::-;25078:2;25060:21;;;25117:2;25097:18;;;25090:30;25156:34;25151:2;25136:18;;25129:62;-1:-1:-1;;;25222:2:1;25207:18;;25200:35;25267:3;25252:19;;24876:401::o;25282:399::-;25484:2;25466:21;;;25523:2;25503:18;;;25496:30;25562:34;25557:2;25542:18;;25535:62;-1:-1:-1;;;25628:2:1;25613:18;;25606:33;25671:3;25656:19;;25282:399::o;27281:128::-;27348:9;;;27369:11;;;27366:37;;;27383:18;;:::i;29004:251::-;29074:6;29127:2;29115:9;29106:7;29102:23;29098:32;29095:52;;;29143:1;29140;29133:12;29095:52;29175:9;29169:16;29194:31;29219:5;29194:31;:::i;29260:582::-;29559:6;29548:9;29541:25;29602:6;29597:2;29586:9;29582:18;29575:34;29645:3;29640:2;29629:9;29625:18;29618:31;29522:4;29666:57;29718:3;29707:9;29703:19;29695:6;29666:57;:::i;:::-;-1:-1:-1;;;;;29759:32:1;;;;29754:2;29739:18;;29732:60;-1:-1:-1;29823:3:1;29808:19;29801:35;29658:65;29260:582;-1:-1:-1;;;29260:582:1:o

Swarm Source

ipfs://2d30c1ec20c762150c882f3c250e468766a0f0cba4b8e21ae05e8823de31d7b8
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.